vue同时使用两个版本的依赖

40 篇文章 1 订阅
33 篇文章 0 订阅

初衷

业务需求开始时间和结束事件的框不能让它们联动。因为ant-design-vue3的日期选择器功能不支持,ant-design-vue2支持,所以选择安装ant-design-vue2然后按需引入日期选择器。

方案

使用npm的别名,安装不同版本的库:
 npm install --save ant-design-vue2@npm:ant-design-vue@2.2.8
这样就可以和现有的版本共同使用

package.json:

{
	"ant-design-vue": "^3.2.5",
    "ant-design-vue2": "npm:ant-design-vue@^2.2.8",
}

使用示例:

import { DatePicker } from 'ant-design-vue'
import { DatePicker } from 'ant-design-vue2'

这样就可以愉快的使用俩个版本不同的依赖了

日期选择器封装:

<template>
  <div class="text-[18px] flex items-center">
    <a-radio-group v-model:value="activeBtn" size="large" @change="selectTime">
      <a-radio-button
        v-for="item in btnList"
        :key="item.id"
        :value="item.id"
        class="cursor-pointer"
        >{{ item.name }}</a-radio-button
      >
    </a-radio-group>
    <RangePicker
      class="picker"
      style="height: 35px; width: 250px"
      v-model:value="time"
      format="YYYY/MM/DD"
      valueFormat="YYYY-MM-DD"
      @change="timeChange"
    >
      <template #suffixIcon>
        <FieldTimeOutlined />
      </template>
    </RangePicker>
  </div>
</template>

<script lang="ts">
import { reactive, toRefs, onBeforeMount, onMounted, ref } from 'vue'
import { DatePicker } from 'ant-design-vue2'
import 'ant-design-vue2/dist/antd.css'; 
import moment from 'moment'
import 'moment/dist/locale/zh-cn'

Date.prototype.format = function (format:any) {
  var o:any = {
    'M+': this.getMonth() + 1, //month
    'd+': this.getDate(), //day
    'h+': this.getHours(), //hour
    'm+': this.getMinutes(), //minute
    's+': this.getSeconds(), //second
    'q+': Math.floor((this.getMonth() + 3) / 3), //quarter
    S: this.getMilliseconds() //millisecond
  }
  if (/(y+)/.test(format))
    format = format.replace(
      RegExp.$1,
      (this.getFullYear() + '').substr(4 - RegExp.$1.length)
    )
  for (var k in o)
    if (new RegExp('(' + k + ')').test(format))
      format = format.replace(
        RegExp.$1,
        RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)
      )
  return format
}
export default {
  name: 'time',
  props: {
    timeType: Number
  },
  components: {
    RangePicker:DatePicker.RangePicker
  },
  emits: ['selectedTime'],
  setup(props: any, context: any) {
    const data:any = reactive({
      time: moment('2015-01-01', 'YYYY-MM-DD'),
      year: '',
      beginTime: '',
      endTime: ''
    })
    const today = ref('')
    const activeBtn = ref(0)
    const btnList = ref([
      {
        id: 0,
        name: '开累'
      },
      {
        id: 1,
        name: '上月'
      },
      {
        id: 2,
        name: '本月'
      },
      {
        id: 3,
        name: '去年'
      },
      {
        id: 4,
        name: '今年'
      }
    ])
    const refData: any = toRefs(data)
    onBeforeMount(() => {
      const date = new Date()
      refData.year.value = date.getFullYear()
      const y = date.getFullYear().toString()
      const m = (date.getMonth() + 1).toString().padStart(2, '0')
      const d = date.getDate().toString().padStart(2, '0')
      today.value = y + '/' + m + '/' + d
      data.time = ['1990-01-01', y + '-' + m + '-' + d]
    })
    onMounted(() => {})

    const timeChange = (dates: any | String) => {
      activeBtn.value = -1
      context.emit('selectedTime', dates[0], dates[1], props.timeType)
      console.log(
        dates[0],
        dates[1],
        props.timeType,
        '-----------------------selectedTime'
      )
    }
    const selectTime = (e: any) => {
      console.log(props.timeType)

      let type = e.target.value
      if (type === 0) {
        //开累
        refData.beginTime.value = '1990/01/01'
        refData.endTime.value = today.value
      } else if (type === 1) {
        //上月
        refData.beginTime.value = new Date(
          new Date(new Date().setMonth(new Date().getMonth() - 1)).setDate(1)
        ).format('yyyy/MM/dd')
        refData.endTime.value = new Date(new Date().setDate(0)).format(
          'yyyy/MM/dd'
        )
      } else if (type === 2) {
        //本月
        refData.beginTime.value = new Date(new Date().setDate(1)).format(
          'yyyy/MM/dd'
        )
        refData.endTime.value = new Date(
          new Date(new Date().setMonth(new Date().getMonth() + 1)).setDate(0)
        ).format('yyyy/MM/dd')
      } else if (type === 3) {
        //去年
        // refData.beginTime.value = new Date(new Date(new Date(new Date().setFullYear(refData.year.value-1)).setMonth(0)).setDate(1)).format('yyyy/MM/dd')
        // refData.endTime.value = new Date(new Date(new Date(new Date().setFullYear(refData.year.value-1)).setMonth(12)).setDate(0)).format('yyyy/MM/dd')
        refData.beginTime.value = '2021/01/01'
        refData.endTime.value = '2021/12/31'
      } else if (type === 4) {
        //今年
        refData.beginTime.value = new Date(
          new Date(new Date().setMonth(0)).setDate(1)
        ).format('yyyy/MM/dd')
        refData.endTime.value = new Date(
          new Date(new Date().setMonth(12)).setDate(0)
        ).format('yyyy/MM/dd')
      }
      refData.time.value = [refData.beginTime.value, refData.endTime.value]
      console.log(
        refData.beginTime.value,
        refData.endTime.value,
        props.timeType,
        '-----------------------selectedTime'
      )
      context.emit(
        'selectedTime',
        refData.beginTime.value,
        refData.endTime.value,
        props.timeType
      )
    }
    return {
      ...refData,
      activeBtn,
      btnList,
      timeChange,
      selectTime
    }
  }
}
</script>
<style lang="scss" scoped>
.button {
  width: 48px;
  height: 30px;
}
.active {
  background: rgba(189, 158, 85, 1);
}
:deep(.el-range-editor.el-input__inner) {
  width: 200px;
  height: 35px;
}
:deep(.el-date-editor .el-range-input) {
  font-size: 12px;
  color: #333333;
}
:deep(.ant-radio-button-wrapper) {
  width: 52px;
  height: 35px;
  font-size: 12px;
  color: #006ab2;
  padding: 0;
  text-align: center;
  line-height: 35px;
  border: 1px solid rgba(0, 106, 178, 1);
}
:deep(.ant-radio-button-wrapper-checked) {
  background: rgba(189, 158, 85, 1);
  color: #fff;
  border: 1px solid rgba(189, 158, 85, 1);
}
:deep(.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):first-child) {
  border-color: rgba(189, 158, 85, 1);
}
.picker{
  margin-left: 10px;
}
</style>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_孤傲_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值