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>
效果图