Sfoglia il codice sorgente

✨ feat<数据中心>: 数据录入数据与上一次做校验;日期选择器更改

xinyan 1 anno fa
parent
commit
45d36a6021

+ 2 - 1
src/views/reportManage/TaskManage/index.vue

@@ -117,7 +117,7 @@ const gridOptions = reactive<VxeGridProps<RowVO>>({
   border: 'inner',
   keepSource: true,
   //showOverflow: true,
-  height: 930,
+  height: 780,
   loading: false,
   round: true,
   toolbarConfig: {
@@ -792,6 +792,7 @@ const cellStyle = () => {
   return {
     fontSize: '12px',
     fontWeight: '600',
+    padding: 0,
   };
 };
 

+ 10 - 10
src/views/reportManage/TaskManage/utils/columns.ts

@@ -85,7 +85,7 @@ export const taskColumns = ref([
     editRender: {},
     slots: { edit: 'company_edit' },
     align: 'center',
-    minWidth: 98
+    minWidth: 184
   },
   {
     field: 'companyEnglishName',
@@ -93,7 +93,7 @@ export const taskColumns = ref([
     editRender: {},
     slots: { edit: 'companyEnglishName_edit' },
     align: 'center',
-    minWidth: 110
+    minWidth: 126
   },
   {
     field: 'address',
@@ -101,7 +101,7 @@ export const taskColumns = ref([
     editRender: {},
     slots: { edit: 'address_edit' },
     align: 'center',
-    minWidth: 95
+    minWidth: 262
   },
   {
     field: 'juridicalPerson',
@@ -125,7 +125,7 @@ export const taskColumns = ref([
     editRender: {},
     slots: { edit: 'juridicalPersonCreditCardAddress_edit' },
     align: 'center',
-    minWidth: 105
+    minWidth: 262
   },
   {
     field: 'receivablesAccount',
@@ -133,7 +133,7 @@ export const taskColumns = ref([
     editRender: {},
     slots: { edit: 'receivablesAccount_edit' },
     align: 'center',
-    minWidth: 95
+    minWidth: 156
   },
   {
     field: 'receivablesAccountCompany',
@@ -224,19 +224,19 @@ export const shopInfoColumns = ref([
     field: 'company',
     title: '注册公司',
     align: 'center',
-    minWidth: 98
+    minWidth: 184
   },
   {
     field: 'companyEnglishName',
     title: '公司英文名称',
     align: 'center',
-    minWidth: 110
+    minWidth: 120
   },
   {
     field: 'address',
     title: '公司地址',
     align: 'center',
-    minWidth: 95
+    minWidth: 262
   },
   {
     field: 'juridicalPerson',
@@ -254,13 +254,13 @@ export const shopInfoColumns = ref([
     field: 'juridicalPersonCreditCardAddress',
     title: '信用卡地址',
     align: 'center',
-    minWidth: 105
+    minWidth: 262
   },
   {
     field: 'receivablesAccount',
     title: '收款账号',
     align: 'center',
-    minWidth: 95
+    minWidth: 156
   },
   {
     field: 'receivablesAccountCompany',

+ 37 - 13
src/views/reportManage/dataCenter/api.ts

@@ -1,7 +1,6 @@
 import { request } from '/@/utils/service';
-import { UserPageQuery } from '@fast-crud/fast-crud';
 
-//卡片日数据
+// 卡片日数据
 export function getCardDayData(query) {
   return request({
     url: '/api/report_manage/data-day/sum/',
@@ -25,7 +24,8 @@ export function getCardMonthData(query) {
     params: query,
   });
 }
-//条形图日数据
+
+// 条形图日数据
 export function getLineForDay(query) {
   return request({
     url: '/api/report_manage/data-day/daily/',
@@ -50,7 +50,7 @@ export function getLineForMonth(query) {
   });
 }
 
-//合并展示月对比数据
+// 合并展示月对比数据
 export function getLineData(query) {
   return request({
     url: '/api/report_manage/data-month/compare/plan/',
@@ -84,7 +84,7 @@ export function getMonthData(query) {
   });
 }
 
-//普通展示表格数据汇总
+// 普通展示表格数据汇总
 export function getDayTotalData(query) {
   return request({
     url: `/api/report_manage/data-day/list/sum/`,
@@ -109,8 +109,7 @@ export function getMonthTotalData(query) {
   });
 }
 
-
-//日数据插入
+// 日数据插入
 export function postCreateDayData(body) {
   return request({
     url: `/api/report_manage/data-day/`,
@@ -160,10 +159,10 @@ export function getMonthTaskData(query) {
   });
 }
 
-//日数据更新
+// 日数据更新
 export function postUpdateDayData(body) {
   return request({
-    url: `/api/report_manage/data-day/${body.id}/`,
+    url: `/api/report_manage/data-day/${ body.id }/`,
     method: 'POST',
     data: body,
   });
@@ -171,7 +170,7 @@ export function postUpdateDayData(body) {
 
 export function postUpdateWeekData(body) {
   return request({
-    url: `/api/report_manage/data-week/${body.id}/`,
+    url: `/api/report_manage/data-week/${ body.id }/`,
     method: 'POST',
     data: body,
   });
@@ -179,13 +178,38 @@ export function postUpdateWeekData(body) {
 
 export function postUpdateMonthData(body) {
   return request({
-    url: `/api/report_manage/data-month/${body.id}/`,
+    url: `/api/report_manage/data-month/${ body.id }/`,
     method: 'POST',
     data: body,
   });
 }
 
-//主数据获取
+// 日数据前一天数据获取
+export function getDayBeforeData(query) {
+  return request({
+    url: '/api/report_manage/data-day/one/',
+    method: 'GET',
+    params: query,
+  });
+}
+
+export function getWeekBeforeData(query) {
+  return request({
+    url: '/api/report_manage/data-week/one/',
+    method: 'GET',
+    params: query,
+  });
+}
+
+export function getMonthBeforeData(query) {
+  return request({
+    url: '/api/report_manage/data-month/one/',
+    method: 'GET',
+    params: query,
+  });
+}
+
+// 主数据获取
 export function getMainData(query) {
   return request({
     url: '/api/report_manage/data-all/',
@@ -202,7 +226,7 @@ export function getMonthlyData(query) {
   });
 }
 
-//导出
+// 导出
 export function exportData(query) {
   return request({
     url: '/api/report_manage/data-all/download/',

+ 14 - 9
src/views/reportManage/dataCenter/combinedDisplay/components/DatePicker/index.vue

@@ -1,10 +1,11 @@
 <script lang="ts" setup>
-import { inject, onBeforeMount, onMounted, ref, Ref, watch } from 'vue';
+import { computed, inject, onMounted, ref, Ref } from 'vue';
 import dayjs from 'dayjs';
 import isoWeek from 'dayjs/plugin/isoWeek';
 import DateRangePicker from '/src/components/DateRangePicker/index.vue';
 import enLocale from 'element-plus/es/locale/lang/en';
 
+
 dayjs.extend(isoWeek);
 //import { storeToRefs } from 'pinia';
 //import { usePublicData } from '/src/stores/publicData';
@@ -22,8 +23,14 @@ const dateRange = ref([
 
 const startWeek = ref(null);
 const endWeek = ref(null);
-const weekStartDate = ref<string | null>(dayjs().locale('en').subtract(1, 'week').startOf('week').format('YYYY-MM-DD'));
-const weekEndDate = ref<string | null>(dayjs().locale('en').endOf('week').format('YYYY-MM-DD'));
+const weekStartDate = ref<string | null>(dayjs().locale('en').subtract(2, 'week').startOf('week').format('YYYY-MM-DD'));console.log("=>(index.vue:27) weekStartDate", weekStartDate.value);
+const wEndDate = ref<string | null>(dayjs().locale('en').subtract(2, 'week').endOf('week').format('YYYY-MM-DD'));console.log("=>(index.vue:29) wEndDate", wEndDate.value);
+const wStartDate = ref<string | null>(dayjs().locale('en').subtract(1, 'week').startOf('week').format('YYYY-MM-DD'));
+const weekEndDate = ref<string | null>(dayjs().locale('en').subtract(1, 'week').endOf('week').format('YYYY-MM-DD'));
+
+const sFormat = computed(() => `${ weekStartDate.value } to ${ wEndDate.value }`);
+const wFormat = computed(() => `${ wStartDate.value } to ${ weekEndDate.value }`);
+
 const currentYear = new Date().getFullYear();
 const currentMonth = new Date().getMonth();
 const monthlyDataTime = ref([
@@ -135,8 +142,8 @@ function setDefaultDate() {
     dayjs().subtract(6, 'day').startOf('day').format('YYYY-MM-DD'),
     dayjs().subtract(1, 'day').endOf('day').format('YYYY-MM-DD')
   ];
-  startWeek.value = dayjs().locale('en').subtract(1, 'week').startOf('week').format('YYYY-MM-DD');
-  endWeek.value = dayjs().locale('en').endOf('week').format('YYYY-MM-DD');
+  startWeek.value = dayjs().locale('en').subtract(2, 'week').startOf('week').format('YYYY-MM-DD');
+  endWeek.value = dayjs().locale('en').subtract(1, 'week').endOf('week').format('YYYY-MM-DD');
   const startOfMonth = new Date(new Date().getFullYear(), new Date().getMonth() - 2, 1);
   const endOfMonth = new Date(new Date().getFullYear(), new Date().getMonth(), 0); // 设置下个月的第一天减去1天,得到当前月的最后一天
   monthlyDataTime.value = [startOfMonth, endOfMonth];
@@ -169,11 +176,10 @@ onMounted(() => {
               v-model="startWeek"
               :clearable="false"
               :disabled-date="disabledDate"
-              format="YYYY 第 WW 周"
+              :format="sFormat"
               placeholder="选择开始周"
               type="week"
               @change="handleStartWeekChange"
-              style="width: 150px"
           />
         </el-config-provider>
       </div>
@@ -185,11 +191,10 @@ onMounted(() => {
               :clearable="false"
               :disabled="!startWeek"
               :disabled-date="weekDisabledDate"
-              format="YYYY 第 WW 周"
+              :format="wFormat"
               placeholder="选择结束周"
               type="week"
               @change="handleEndWeekChange"
-              style="width: 150px"
           />
         </el-config-provider>
       </div>

+ 10 - 6
src/views/reportManage/dataCenter/normalDisplay/components/DatePicker/index.vue

@@ -23,8 +23,12 @@ const dateRange = ref( [
 
 const startWeek = ref(null);
 const endWeek = ref(null);
-const weekStartDate = ref<string | null>(dayjs().locale('en').subtract(5, 'week').startOf('week').format('YYYY-MM-DD'));
+const weekStartDate = ref<string | null>(dayjs().locale('en').subtract(2, 'week').startOf('week').format('YYYY-MM-DD'));
+const wEndDate = ref<string | null>(dayjs().locale('en').subtract(2, 'week').endOf('week').format('YYYY-MM-DD'));
+const wStartDate = ref<string | null>(dayjs().locale('en').subtract(1, 'week').startOf('week').format('YYYY-MM-DD'));
 const weekEndDate = ref<string | null>(dayjs().locale('en').subtract(1, 'week').endOf('week').format('YYYY-MM-DD'));
+const sFormat = computed(() => `${ weekStartDate.value } to ${ wEndDate.value }`);
+const wFormat = computed(() => `${ wStartDate.value } to ${ weekEndDate.value }`);
 
 const currentYear = new Date().getFullYear();
 const currentMonth = new Date().getMonth();
@@ -144,7 +148,7 @@ function setDefaultDate() {
       dateChange();
       break;
     case 'week':
-      startWeek.value = dayjs().locale('en').subtract(5, 'week').startOf('week').format('YYYY-MM-DD');
+      startWeek.value = dayjs().locale('en').subtract(2, 'week').startOf('week').format('YYYY-MM-DD');
       endWeek.value = dayjs().locale('en').subtract(1, 'week').endOf('week').format('YYYY-MM-DD');
       dateChange();
       break;
@@ -187,11 +191,11 @@ watch(dateType, () => {
               :clearable="false"
               :disabled-date="disabledDate"
               class="date-picker"
-              format="YYYY 第 WW 周"
+              :format="sFormat"
               placeholder="选择开始周"
               type="week"
               @change="handleStartWeekChange"
-              style="width: 150px"
+              style="width: 210px"
           />
         </el-config-provider>
         <span class="demonstration">至</span>
@@ -202,11 +206,11 @@ watch(dateType, () => {
               :disabled="!startWeek"
               :disabled-date="weekDisabledDate"
               class="date-picker"
-              format="YYYY 第 WW 周"
+              :format="wFormat"
               placeholder="选择结束周"
               type="week"
               @change="handleEndWeekChange"
-              style="width: 150px"
+              style="width: 210px"
           />
         </el-config-provider>
       </div>

+ 5 - 5
src/views/reportManage/dataCenter/normalDisplay/components/Selector/index.vue

@@ -149,11 +149,11 @@ defineExpose({ fetchFilteredData, filteredData, updateData });
 
 <template>
   <div class="flex gap-2.5 flex-wrap">
-    <el-input v-model="platformNumberList" class="flex-item" clearable placeholder="平台编号" style="width: 150px;height: 30px"
+    <el-input v-model="platformNumberList" class="flex-item" clearable placeholder="平台编号" style="width: 130px"
               @change="emitChange"></el-input>
-    <el-input v-model="platformNameList" class="flex-item" clearable placeholder="平台名称" style="width: 150px;height: 30px"
+    <el-input v-model="platformNameList" class="flex-item" clearable placeholder="平台名称" style="width: 130px"
               @change="emitChange"></el-input>
-    <el-input v-model="operationList" class="flex-item" clearable placeholder="运营" style="width: 150px;height: 30px" @change="emitChange"></el-input>
+    <el-input v-model="operationList" class="flex-item" clearable placeholder="运营" style="width: 130px" @change="emitChange"></el-input>
     <el-select
         v-model="usersList"
         class="flex-item"
@@ -178,11 +178,11 @@ defineExpose({ fetchFilteredData, filteredData, updateData });
         <el-button text size="small" @click="selectCommonGroup2">欧洲+英国</el-button>
       </template>
     </el-select>
-    <el-select v-model="brandNameList" class="flex-item" clearable collapse-tags collapse-tags-tooltip multiple style="width: 150px;"
+    <el-select v-model="brandNameList" class="flex-item" clearable collapse-tags collapse-tags-tooltip multiple style="width: 145px;"
                placeholder="品牌">
       <el-option v-for="item in brandNameOptions" :key="item" :label="item" :value="item" />
     </el-select>
-    <el-select v-model="platformList" class="flex-item" clearable collapse-tags collapse-tags-tooltip multiple style="width: 150px;"
+    <el-select v-model="platformList" class="flex-item" clearable collapse-tags collapse-tags-tooltip multiple style="width: 145px;"
                placeholder="平台">
       <el-option v-for="item in platformOptions" :key="item" :label="item" :value="item" />
     </el-select>

+ 149 - 28
src/views/reportManage/dataCenter/normalDisplay/components/TableDataEntry.vue

@@ -5,8 +5,11 @@ import dayjs from 'dayjs';
 import isoWeek from 'dayjs/plugin/isoWeek';
 import { useRoute } from 'vue-router';
 import {
+  getDayBeforeData,
   getDayTaskData,
+  getMonthBeforeData,
   getMonthTaskData,
+  getWeekBeforeData,
   getWeekTaskData,
   postCreateDayData,
   postCreateMonthData,
@@ -19,6 +22,8 @@ import { dayColumns, monthColumns, weekColumns } from '../../utils/columns';
 import { ComponentSize, ElMessage, FormInstance, FormRules } from 'element-plus';
 import enLocale from 'element-plus/es/locale/lang/en';
 import Selector from '/@/views/reportManage/dataCenter/normalDisplay/components/Selector/index.vue';
+import { Warning } from '@element-plus/icons-vue';
+
 
 dayjs.extend(isoWeek);
 
@@ -67,8 +72,13 @@ const shortcuts = [
   },
 ];
 
+const yDayDate = ref(null);
+const yWeekDay = ref(null);
+const yMonthDay = ref(null);
+
 function handleDayChange(value) {
   dailySalesTime.value = dayjs(value).format('YYYY-MM-DD');
+  yDayDate.value = dayjs(dailySalesTime.value).subtract(1, 'day').format('YYYY-MM-DD');
   fetchCurrentTaskData();
 }
 
@@ -80,6 +90,7 @@ const handleWeekChange = () => {
     weeklyAdTime.value = adDate.format('YYYY-WW');
     adStartDate.value = adDate.startOf('week').format('YYYY-MM-DD');
     adEndDate.value = adDate.endOf('week').format('YYYY-MM-DD');
+    yWeekDay.value = dayjs(entryEndDate.value).locale('en').endOf('week').subtract(1, 'week').format('YYYY-MM-DD');
   }
   if (initialLoad) {
     initialLoad = false; // 只在初次加载时避免多次调用
@@ -96,6 +107,7 @@ const handleMonthChange = (value) => {
     const lastDay = new Date(year, month, 0).getDate();
     startDate.value = `${ year }-${ String(month).padStart(2, '0') }-01`;
     endDate.value = `${ year }-${ String(month).padStart(2, '0') }-${ lastDay }`;
+    yMonthDay.value = dayjs(endDate.value).subtract(1, 'month').endOf('month').format('YYYY-MM-DD');
     fetchCurrentTaskData();
   } else {
     startDate.value = null;
@@ -115,6 +127,7 @@ function setDefaultDate() {
   switch (dateType) {
     case 'day':
       dailySalesTime.value = dayjs().subtract(1, 'day').format('YYYY-MM-DD');
+      yDayDate.value = dayjs(dailySalesTime.value).subtract(1, 'day').format('YYYY-MM-DD');
       break;
     case 'week':
       weeklyEntryTime.value = dayjs().locale('en').subtract(1, 'week').startOf('week').format('YYYY-MM-DD');
@@ -124,6 +137,7 @@ function setDefaultDate() {
       monthlyEntryTime.value = dayjs().subtract(1, 'month').format('YYYY-MM-DD');
       startDate.value = dayjs(monthlyEntryTime.value).startOf('month').format('YYYY-MM-DD');
       endDate.value = dayjs(monthlyEntryTime.value).endOf('month').format('YYYY-MM-DD');
+      yMonthDay.value = dayjs(endDate.value).subtract(1, 'month').endOf('month').format('YYYY-MM-DD');
   }
 }
 
@@ -150,6 +164,8 @@ interface taskDataForm {
 const formSize = ref<ComponentSize>('default');
 const isSubmitting = ref(false);
 const dayFormVisible = ref(false);
+const dialogVisible = ref(false);
+const dialogMessage = ref('');
 const taskDataFormRef = ref<FormInstance>();
 const taskDataForm = reactive({
   sales_original: null,
@@ -159,7 +175,6 @@ const taskDataForm = reactive({
   impression: null,
   ad_click: null,
   ad_order: null,
-  // money_by_other: null,
   session: null,
   order: null,
   availableSalesDay: null,
@@ -195,6 +210,11 @@ const rules = reactive<FormRules>({
 const flatDayColumns = ref(flattenColumns(dayColumns.value));
 const flatWeekColumns = ref(flattenColumns(weekColumns.value));
 const flatMonthColumns = ref(flattenColumns(monthColumns.value));
+
+const ySalesData = ref({
+  sales_original: '',
+  total_sales_current_monthly_original: '',
+});
 //表格
 let taskId = 0;
 let currentId = 0;
@@ -315,7 +335,6 @@ const handelEditRow = (row: RowVO) => {
     // 强制恢复滚动条位置
     setTimeout(() => {
       bodyWrapper.scrollLeft = currentScrollLeft.value;
-      console.log('After setTimeout, scrollLeft:', bodyWrapper.scrollLeft);
     }, 0);
   }
 };
@@ -387,9 +406,9 @@ function fetchCurrentTaskData() {
 
 const editEvent = async (row: RowVO) => {
   taskId = row.task;
-  // console.log('row', taskId);
   currentId = row.id;
   Object.assign(taskDataForm, row);
+  await currentSalesTip();
   dayFormVisible.value = true;
 };
 
@@ -543,31 +562,43 @@ async function createMonthData() {
 
 //创建任务
 const submitForm = async (formEl: FormInstance | undefined) => {
-  if (!formEl || isSubmitting.value) return; // 防止重复提交
-  await formEl.validate(async (valid, fields) => {
-    if (valid) {
-      isSubmitting.value = true; // 表单开始提交,禁用按钮
-      try {
-        if (dateType === 'day') {
-          const fieldsToValidate = ['sales_original'];
-          if (!validateNumericFields(taskDataForm, fieldsToValidate)) return; // 验证字段
-          await createDayData();
-        }
-        if (dateType === 'week') {
-          const fieldsToValidate = ['sales_original', 'ad_sales_original', 'ad_cost_original', 'total_sales_current_monthly_original', 'impression', 'ad_click', 'ad_order', 'money_by_amazon', 'money_by_other', 'session', 'order', 'availableSalesDay', 'intransitInventory', 'overseasStorage', 'refundRate'];
-          if (!validateNumericFields(taskDataForm, fieldsToValidate)) return; // 验证字段
-          await createWeekData();
-        }
-        if (dateType === 'month') {
-          const fieldsToValidate = ['sales_original'];
-          if (!validateNumericFields(taskDataForm, fieldsToValidate)) return; // 验证字段
-          await createMonthData();
+  const fieldsToWarn = validateForm();
+  if (fieldsToWarn.length > 0) {
+    dialogVisible.value = true;
+    dialogMessage.value = `${ fieldsToWarn.join(', ') }`;
+    return;
+  } else {
+    if (!formEl || isSubmitting.value) return; // 防止重复提交
+    await formEl.validate(async (valid, fields) => {
+      if (valid) {
+        isSubmitting.value = true; // 表单开始提交,禁用按钮
+        try {
+          await submit(formEl);
+        } finally {
+          isSubmitting.value = false; // 无论成功或失败,恢复按钮
         }
-      } finally {
-        isSubmitting.value = false; // 无论成功或失败,恢复按钮
       }
-    }
-  });
+    });
+  }
+};
+
+const submit = async () => {
+  dialogVisible.value = false;
+  if (dateType === 'day') {
+    const fieldsToValidate = ['sales_original'];
+    if (!validateNumericFields(taskDataForm, fieldsToValidate)) return; // 验证字段
+    await createDayData();
+  }
+  if (dateType === 'week') {
+    const fieldsToValidate = ['sales_original', 'ad_sales_original', 'ad_cost_original', 'total_sales_current_monthly_original', 'impression', 'ad_click', 'ad_order', 'money_by_amazon', 'money_by_other', 'session', 'order', 'availableSalesDay', 'intransitInventory', 'overseasStorage', 'refundRate'];
+    if (!validateNumericFields(taskDataForm, fieldsToValidate)) return; // 验证字段
+    await createWeekData();
+  }
+  if (dateType === 'month') {
+    const fieldsToValidate = ['sales_original'];
+    if (!validateNumericFields(taskDataForm, fieldsToValidate)) return; // 验证字段
+    await createMonthData();
+  }
 };
 
 // 更新日数据
@@ -696,6 +727,47 @@ const editRowEvent = async (row: any) => {
   }
 };
 
+// 日数据提示
+async function salesTip(apiFunction, dateTypeKey) {
+  const dateMap = {
+    day: yDayDate.value,
+    week: yWeekDay.value,
+    month: yMonthDay.value,
+  };
+  const resp = await apiFunction({
+    task: taskId,
+    [`${ dateTypeKey }_end_date`]: dateMap[dateTypeKey],
+  });
+  if (dateType === 'week') {
+    ySalesData.value = resp.data;
+  } else {
+    ySalesData.value = resp.data[0];
+  }
+  return ySalesData.value;
+}
+
+async function daySalesTip() {
+  await salesTip(getDayBeforeData, 'day');
+}
+
+async function weekSalesTip() {
+  await salesTip(getWeekBeforeData, 'week');
+}
+
+async function monthSalesTip() {
+  await salesTip(getMonthBeforeData, 'month');
+}
+
+async function currentSalesTip() {
+  if (dateType === 'week') {
+    await weekSalesTip();
+  } else if (dateType === 'month') {
+    await monthSalesTip();
+  } else {
+    await daySalesTip();
+  }
+}
+
 const currentGridOptions = computed(() => {
   const selectedGridOptions = gridOptions[dateType] || gridOptions['day'];
   return {
@@ -749,6 +821,27 @@ const headerCellStyle = () => {
   };
 };
 
+const validateForm = () => {
+  const fieldsToWarn = [];
+  const fieldsToValidate = ['sales_original', 'total_sales_current_monthly_original'];
+  if (ySalesData.value) {
+    for (const key of fieldsToValidate) {
+      const newValue = taskDataForm[key];
+      const yDayValue = ySalesData.value[key];
+      const column = flatWeekColumns.value.find(col => col.field === key);
+      const title = column ? column.title : key;
+
+      if (newValue != null && yDayValue !== null && yDayValue !== undefined) {
+        const diffPercentage = Math.abs((newValue - yDayValue) / yDayValue) * 100;
+        if (diffPercentage > 50) {
+          fieldsToWarn.push(title);
+        }
+      }
+    }
+  }
+  return fieldsToWarn;
+};
+
 onMounted(() => {
   setDefaultDate();
   //fetchCurrentTaskData();
@@ -769,9 +862,9 @@ onMounted(() => {
                 :clearable="false"
                 :disabled-date="disabledDate"
                 :shortcuts="shortcuts"
+                style="width: 170px"
                 type="Date"
                 @change="handleDayChange"
-                style="width: 170px"
             />
           </div>
         </div>
@@ -838,6 +931,9 @@ onMounted(() => {
                      @click="editEvent(row)">创建
           </el-button>
         </template>
+        <template #total_header="{ row }">
+          <span>当月截止{{ entryEndDate }}销售额</span>
+        </template>
         <template #sales_original_edit="{ row }">
           <vxe-input v-model="row.sales_original"></vxe-input>
         </template>
@@ -925,8 +1021,8 @@ onMounted(() => {
       <div class="dialog-footer">
         <el-button @click="dayFormVisible = false ;resetForm(taskDataFormRef)">取消</el-button>
         <el-button
-            type="primary"
             :disabled="isSubmitting"
+            type="primary"
             @click="submitForm(taskDataFormRef)"
         >
           {{ isSubmitting ? '提交中...' : '确认' }}
@@ -934,6 +1030,31 @@ onMounted(() => {
       </div>
     </template>
   </el-dialog>
+  <el-dialog
+      v-model="dialogVisible"
+      align-center
+      style="border-radius: 10px;"
+      title="重要提示"
+      width="30%"
+  >
+    <template #title>
+      <el-button link style="font-size: 18px" type="warning">
+        <el-icon size="22px">
+          <warning />
+        </el-icon>
+        重要提示
+      </el-button>
+    </template>
+    <span>您输入的 </span>
+    <span style="color: #f1a055;">{{ dialogMessage }}</span>
+    <span> 相较于上次填入的数据偏离值超过 50% ,是否仍要提交?</span>
+    <template #footer>
+      <span class="dialog-footer">
+        <el-button @click="dialogVisible = false">取消</el-button>
+        <el-button type="primary" @click="submit(formEl)">确认</el-button>
+      </span>
+    </template>
+  </el-dialog>
 </template>
 
 <style lang="scss" scoped>

+ 2 - 1
src/views/reportManage/dataCenter/utils/columns.ts

@@ -98,7 +98,8 @@ export const weekColumns = ref([
     ]
   },
   {
-    title: '当月累计销售额', align: 'center', children: [
+    title: '当月累计销售额', align: 'center', slots: { header: 'total_header' },
+    children: [
       { field: 'total_sales_current_monthly', title: '当月累计销售额', width: 120 },
       {
         field: 'total_sales_current_monthly_original',