Ant Design Vue 时间 下周 最近7天 最近30天 上周(版本3.2.18)

这段代码展示了如何在AntDesignVue的日期选择器组件<a-range-picker>中利用Dayjs库来设置预定义的时间范围,如今天、昨天、最近7天等。数据绑定和事件处理功能确保了用户选择时间范围后能触发相应的变更处理函数。
摘要由CSDN通过智能技术生成

Ant Design Vue 3.2版本是用Dayjs实现的,具体实现代码

 <a-range-picker
          v-model:value="dateRange"
          size="small"
          :valueFormat="dateFormat"
          @change="dataChange"
          :ranges="pickerOptions"
        />
<script lang="ts">
 import dayjs, { Dayjs } from 'dayjs';
  type RangeValue = [Dayjs, Dayjs];

  export default {
    data() {
      return {
        pickerOptions: {
          今天: [dayjs(), dayjs()] as RangeValue,
          昨天: [dayjs().subtract(1, 'days'), dayjs().subtract(1, 'days')] as RangeValue,
          最近7天: [dayjs().subtract(6, 'days'), dayjs()] as RangeValue,
          最近30天: [dayjs().subtract(29, 'days'), dayjs()] as RangeValue,

          本周: [
            dayjs().subtract(0, 'weeks').startOf('week'),
            dayjs().subtract(0, 'weeks').endOf('week'),
          ] as RangeValue,
          上周: [
            dayjs().subtract(1, 'weeks').startOf('week'),
            dayjs().subtract(1, 'weeks').endOf('week'),
          ] as RangeValue,
          /*  下周: [
            dayjs().subtract(-1, 'weeks').startOf('week'),
            dayjs().subtract(-1, 'weeks').endOf('week'),
          ] as RangeValue, */

          本月: [dayjs().startOf('month'), dayjs().endOf('month')] as RangeValue,

          上个月: [
            dayjs().subtract(1, 'months').startOf('month'),
            dayjs().subtract(1, 'months').endOf('month'),
          ] as RangeValue,
          /*    下个月: [
            dayjs().subtract(-1, 'month').startOf('month'),
            dayjs().subtract(-1, 'month').endOf('month'),
          ] as RangeValue, */

          第一季度: [dayjs().startOf('year'), dayjs().endOf('year').subtract(9, 'month')],
          第二季度: [
            dayjs().startOf('year').subtract(-3, 'month'),
            dayjs().endOf('year').subtract(6, 'month'),
          ],
          第三季度: [
            dayjs().startOf('year').subtract(-6, 'month'),
            dayjs().endOf('year').subtract(3, 'month'),
          ],
          第四季度: [
            dayjs().startOf('year').subtract(-9, 'month'),
            dayjs().endOf('year').subtract(0, 'month'),
          ],
          本年: [dayjs().startOf('year'), dayjs()] as RangeValue,
          去年: [
            dayjs().subtract(1, 'years').startOf('year'),
            dayjs().subtract(1, 'years').endOf('year'),
          ] as RangeValue,
        },
      };
    },
  };
</script>

以上是详细代码,下面是全部代码  是在vben admin 框架上开发的

<template>
  <Card title="系统看板" v-bind="$attrs">
    <template #extra>
      <div class="flex">
        <a-range-picker
          v-model:value="dateRange"
          size="small"
          :valueFormat="dateFormat"
          @change="dataChange"
          :ranges="pickerOptions"
        />
        <a-select
          ref="select"
          v-model:value="authorityScope"
          style="width: 90px; margin-left: 10px"
          :options="optionsPosition"
          @change="handleChange"
          size="small"
        />
      </div>

      <!-- <a-select
        ref="select"
        v-model:value="value2"
        style="width: 90px"
        :options="optionsTime"
        @change="handleChange"
        size="small"
      /> -->
    </template>

    <CardGrid v-for="item in groupItemsX" :key="item.fieldIndex" class="!md:w-1/4 !w-full">
      <div style="display: flex; justify-content: space-between; align-items: center">
        <span
          src=""
          alt=""
          :class="item.icon"
          :style="{ backgroundPosition: item.position }"
        ></span>
        <span
          class="text-lg ml-2 fontSize_12"
          style="
            width: 85%;
            height: 25px;
            display: inline-block;
            vertical-align: -4px;
            overflow: hidden;
            white-space: nowrap;
            text-overflow: ellipsis;
          "
        >
          {{ item.title }}
        </span>
      </div>

      <div class="mt-1.65 h-11.5 text-secondary leading-14" style="">{{ item.desc }}</div>
      <!-- <div class="flex justify-between text-secondary"> -->
      <!-- <span>{{ item.group }}</span> -->
      <!-- <span>{{ item.date }}</span> -->
      <!-- </div> -->
    </CardGrid>
  </Card>
</template>
<script lang="ts">
  type RangeValue = [Dayjs, Dayjs];

  export default {
    data() {
      return {
        pickerOptions: {
          今天: [dayjs(), dayjs()] as RangeValue,
          昨天: [dayjs().subtract(1, 'days'), dayjs().subtract(1, 'days')] as RangeValue,
          最近7天: [dayjs().subtract(6, 'days'), dayjs()] as RangeValue,
          最近30天: [dayjs().subtract(29, 'days'), dayjs()] as RangeValue,

          本周: [
            dayjs().subtract(0, 'weeks').startOf('week'),
            dayjs().subtract(0, 'weeks').endOf('week'),
          ] as RangeValue,
          上周: [
            dayjs().subtract(1, 'weeks').startOf('week'),
            dayjs().subtract(1, 'weeks').endOf('week'),
          ] as RangeValue,
          /*  下周: [
            dayjs().subtract(-1, 'weeks').startOf('week'),
            dayjs().subtract(-1, 'weeks').endOf('week'),
          ] as RangeValue, */

          本月: [dayjs().startOf('month'), dayjs().endOf('month')] as RangeValue,

          上个月: [
            dayjs().subtract(1, 'months').startOf('month'),
            dayjs().subtract(1, 'months').endOf('month'),
          ] as RangeValue,
          /*    下个月: [
            dayjs().subtract(-1, 'month').startOf('month'),
            dayjs().subtract(-1, 'month').endOf('month'),
          ] as RangeValue, */

          第一季度: [dayjs().startOf('year'), dayjs().endOf('year').subtract(9, 'month')],
          第二季度: [
            dayjs().startOf('year').subtract(-3, 'month'),
            dayjs().endOf('year').subtract(6, 'month'),
          ],
          第三季度: [
            dayjs().startOf('year').subtract(-6, 'month'),
            dayjs().endOf('year').subtract(3, 'month'),
          ],
          第四季度: [
            dayjs().startOf('year').subtract(-9, 'month'),
            dayjs().endOf('year').subtract(0, 'month'),
          ],
          本年: [dayjs().startOf('year'), dayjs()] as RangeValue,
          去年: [
            dayjs().subtract(1, 'years').startOf('year'),
            dayjs().subtract(1, 'years').endOf('year'),
          ] as RangeValue,
        },
      };
    },
  };
</script>

<script lang="ts" setup>
  import { ref, onMounted } from 'vue';
  import { Card, CardGrid } from 'ant-design-vue';
  import { groupItems, optionsPosition, optionsTime, getSearchListOfSecondParamName } from './data';
  import dayjs, { Dayjs } from 'dayjs';
  import { getNewNumbers } from './api';
  import { useUserStore } from '/@/store/modules/user';
  const userStore = useUserStore();
  const groupItemsX = ref(groupItems);

  const getDayjsTime = () => dayjs(`${new Date()}`).format('YYYY-MM-DD HH:mm:ss');

  const dateFormat = 'YYYY-MM-DD';
  const startTime = ref(`${new Date().getFullYear()}-01-01`);
  const endTime = ref(getNowDate() + ' 23:59:59');
  const dateRange = ref<[Dayjs, Dayjs]>([
    dayjs(startTime.value, dateFormat),
    dayjs(endTime.value, dateFormat),
  ]);

  function getNowDate() {
    let date = new Date();
    let year = date.getFullYear();
    let month: any = date.getMonth() + 1;
    let ri: any = date.getDate();
    month = month < 10 ? '0' + month : month;
    ri = ri < 10 ? '0' + ri : ri;
    return year + '-' + month + '-' + ri;
  }
  const secondParamNameOptions = getSearchListOfSecondParamName();
  function dataChange(params) {
    startTime.value = params[0];
    endTime.value = params[1] + ' 23:59:59';
    initHomePageNumbers();
  }
  function getChildren(value) {
    // searchInfo.secondParamName = value;
  }

  const authorityScope = ref(optionsPosition[2].value);
  const value2 = ref(optionsTime[0].label);
  const handleChange = (value: string) => {
    console.log(`selected ${value}`);
    initHomePageNumbers();
  };
  const initHomePageNumbers = () => {
    getNewNumbers({
      beginDate: startTime.value,
      endDate: endTime.value,
      authorityScope: authorityScope.value,
      userName: userStore.getUserInfo.realName,
    })
      .then((res) => {
        console.log(res);
        groupItemsX.value[0].title = res.data.amount1;
        groupItemsX.value[1].title = res.data.amount2;
        groupItemsX.value[2].title = res.data.amount3;
        groupItemsX.value[3].title = res.data.amount4;
        groupItemsX.value[4].title = res.data.amount5;
        groupItemsX.value[5].title = res.data.amount6;
        groupItemsX.value[6].title = res.data.amount7;
        groupItemsX.value[7].title = res.data.amount8;
        groupItemsX.value[8].title = res.data.amount9;
        groupItemsX.value[9].title = res.data.amount10;
        groupItemsX.value[10].title = res.data.amount11;
        groupItemsX.value[11].title = res.data.amount12;
        console.log(groupItemsX.value);
      })
      .catch((e) => {
        console.log(e);
      });
  };
  onMounted(() => {
    initHomePageNumbers();
  });
</script>
<style scoped lang="less">
  .ant-select {
    margin-right: 5px;
    // border-radius: 4px;

    .ant-select:not(.ant-select-customize-input) .ant-select-selector {
      border-radius: 4px !important;
    }
  }

  .iconImg {
    width: 30px;
    height: 30px;
    display: inline-block;
    background: #fff url(../image/system_sprites.png) no-repeat;
  }
  @media (min-width: 375px) and (max-width: 1024px) {
    .fontSize_12 {
      font-size: 12px;
    }
  }
</style>

效果图

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值