From 28706df7da34b8854cdce96ad89c035eaded6ea9 Mon Sep 17 00:00:00 2001
From: wujingjing <gersonwu@qq.com>
Date: 星期三, 09 四月 2025 15:54:50 +0800
Subject: [PATCH] 完善数字人

---
 src/components/chat/chatComponents/summaryCom/components/recordSet/components/TimeRange.vue |  115 ++++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 77 insertions(+), 38 deletions(-)

diff --git a/src/components/chat/chatComponents/summaryCom/components/recordSet/components/TimeRange.vue b/src/components/chat/chatComponents/summaryCom/components/recordSet/components/TimeRange.vue
index 89e8e62..11a5f48 100644
--- a/src/components/chat/chatComponents/summaryCom/components/recordSet/components/TimeRange.vue
+++ b/src/components/chat/chatComponents/summaryCom/components/recordSet/components/TimeRange.vue
@@ -2,7 +2,7 @@
 	<div class="flex items-center">
 		<div class="flex items-center space-x-1">
 			<div
-				class="ywicon icon-pre"
+				class="ywifont ywicon-pre"
 				:class="{ 'cursor-not-allowed': !offsetClickIsAllow, 'cursor-pointer': offsetClickIsAllow }"
 				@click="preDayClick"
 			></div>
@@ -15,15 +15,16 @@
 				:value-format="valueFormat"
 				:format="DEFAULT_FORMATS_DATE"
 				:disabled-date="disabledDate"
-				:clearable="false"
+				:clearable="true"
 				:disabled="disabled"
+				@change="datePickerChange"
 			>
 				<template v-for="(value, name) in $slots" #[name]="slotData">
 					<slot :name="name" v-bind="slotData || {}"></slot>
 				</template>
 			</el-date-picker>
 			<div
-				class="ywicon icon-next"
+				class="ywifont ywicon-next"
 				:class="{ 'cursor-not-allowed': !offsetClickIsAllow, 'cursor-pointer': offsetClickIsAllow }"
 				@click="nextDayClick"
 			></div>
@@ -32,12 +33,19 @@
 		<div class="ml-2 inline-flex items-center space-x-2 text-[14px]">
 			<div
 				@click="quickPickRangeClick(parseInt(item))"
-				class="border border-solid rounded-md px-2 cursor-pointer"
-				:class="{ 'bg-[#1677ff]': parseInt(item) === quickPickValue, 'text-white': parseInt(item) === quickPickValue }"
-				v-for="item in Object.keys(timeRangeEnumMapTitle)"
+				class="border border-solid rounded-md px-2 py-1 cursor-pointer"
+				:class="{
+					'bg-[#1677ff]': parseInt(item) === quickPickValue,
+					'text-white': parseInt(item) === quickPickValue,
+					'bg-[#f5f7fa]': disabled,
+					'text-[#a9acb3]': disabled,
+					'border-[#dcdfe6]': disabled,
+					'!cursor-not-allowed': disabled,
+				}"
+				v-for="item in Object.keys(timeRangeMapTitle)"
 				:key="item"
 			>
-				{{ timeRangeEnumMapTitle[item] }}
+				{{ timeRangeMapTitle[item] }}
 			</div>
 		</div>
 	</div>
@@ -46,20 +54,19 @@
 <script setup lang="ts">
 import { ElDatePicker } from 'element-plus';
 import { definePropType } from 'element-plus/es/utils/vue/props/runtime';
-import { ref, type PropType, computed, watch } from 'vue';
+import moment from 'moment';
+import { computed, nextTick, onMounted, ref, type PropType } from 'vue';
 import type { TimeRangeParam } from '../types';
 import type { TimeRangeEnum } from './types';
-import { timeRangeEnumMapTitle, timeRangeEnumMapValue } from './types';
+import { TimeStepValue, dayTimeRangeEnumMapTitle, monthTimeRangeEnumMapTitle, timeRangeEnumMapValue } from './types';
 import {
 	CURRENT_DAY,
 	DEFAULT_FORMATS_DATE,
 	DEFAULT_FORMATS_TIME,
 	END_PLACEHOLDER,
-	RANGE_SEPARATOR,
 	START_PLACEHOLDER,
 } from '/@/components/form/datepicker/constants';
 import { formatDate } from '/@/utils/formatTime';
-import moment from 'moment';
 
 const valueFormat = DEFAULT_FORMATS_DATE + ' ' + DEFAULT_FORMATS_TIME;
 const props = defineProps({
@@ -70,62 +77,94 @@
 		type: Boolean,
 		default: false,
 	},
+	quickActive: {
+		type: Number as PropType<TimeRangeEnum>,
+		required: false,
+	},
 });
+
+const getRangeMapTitle = (timeStep: TimeStepValue) => {
+	switch (timeStep) {
+		case TimeStepValue.Day:
+			return dayTimeRangeEnumMapTitle;
+		case TimeStepValue.Month:
+			return monthTimeRangeEnumMapTitle;
+		default:
+			return dayTimeRangeEnumMapTitle;
+	}
+};
+
+const timeRangeMapTitle = getRangeMapTitle(props.data?.origin?.time_step);
 const dateValue = defineModel({
 	type: definePropType<[string, string]>(Array),
 });
 const emit = defineEmits(['change']);
 
-/**
- * 闇�瑕佸 dateValue 鏍煎紡鍖栵紝dataValue 缁撴潫鏃堕棿涓嶆槸23:59:59
- */
-const formatDateValue = computed({
-	get: () => {
-		if (!dateValue.value) return null;
-		return [moment(dateValue.value[0]).format('YYYY-MM-DD 00:00:00'), moment(dateValue.value[1]).format('YYYY-MM-DD 23:59:59')] as [
-			string,
-			string
-		];
-	},
-	set: (value) => {
-		dateValue.value = value;
-	},
-});
+const dateChange = () => {
+	nextTick(() => {
+		if (dateValue.value?.[1]) {
+			dateValue.value[1] = dateValue.value[1].slice(0, 10) + ' 23:59:59';
+		}
+		emit('change', dateValue.value);
+	});
+};
 
 const disabledDate = (date: Date) => {
 	return date > CURRENT_DAY;
 };
+
+const resetQuickPickValue = () => {
+	quickPickValue.value = null;
+};
 const quickPickValue = ref<TimeRangeEnum>(null);
+
+const pickQuickRange = (val: TimeRangeEnum) => {
+	// if(val==undefined) return;
+	quickPickValue.value = val;
+	dateValue.value = timeRangeEnumMapValue[val]().map((item) => formatDate(item)) as [string, string];
+};
 const quickPickRangeClick = (val: TimeRangeEnum) => {
+	if (props.disabled) return;
 	if (quickPickValue.value === val) return;
 
-	quickPickValue.value = val;
-	formatDateValue.value = timeRangeEnumMapValue[val]().map((item) => formatDate(item)) as [string, string];
+	pickQuickRange(val);
+	dateChange();
 };
 
 const offsetClickIsAllow = computed(() => !!dateValue.value && !props.disabled);
 const preDayClick = () => {
+	if (props.disabled) return;
+
 	if (!dateValue.value) return;
 	dateValue.value[0] = moment(dateValue.value[0]).subtract(1, 'day').format('YYYY-MM-DD HH:mm:ss');
-	dateValue.value = [...dateValue.value];
+	dateChange();
+
+	resetQuickPickValue();
 };
 
 const nextDayClick = () => {
+	if (props.disabled) return;
+
 	if (!dateValue.value) return;
 	dateValue.value[1] = moment(dateValue.value[1]).add(1, 'day').format('YYYY-MM-DD HH:mm:ss');
-	dateValue.value = [...dateValue.value];
+	dateChange();
+
+	resetQuickPickValue();
 };
 
-watch(
-	() => formatDateValue.value,
-	(val) => {
-		emit('change', val);
+const datePickerChange = (va) => {
+	resetQuickPickValue();
+	dateChange();
+};
+onMounted(() => {
+	if (props.quickActive != null) {
+		pickQuickRange(props.quickActive);
 	}
-);
-
+});
 defineExpose({
-	formatDateValue
-})
+	formatDateValue: dateValue,
+	resetQuickPickValue: resetQuickPickValue,
+});
 </script>
 <style scoped lang="scss">
 :deep(.el-date-editor .el-range__close-icon--hidden) {

--
Gitblit v1.9.3