Browse Source

feat(all): update

Hu Cheng 1 year ago
parent
commit
302ef66521

+ 6 - 6
src/App.vue

@@ -1,5 +1,5 @@
 <script setup>
-import { zhCN, dateZhCN } from "naive-ui";
+import { zhCN, dateZhCN } from 'naive-ui';
 
 /**
  * js 文件下使用这个做类型提示
@@ -7,13 +7,13 @@ import { zhCN, dateZhCN } from "naive-ui";
  */
 const themeOverrides = {
   common: {
-    primaryColor: "#2d8cf0",
-    primaryColorHover: "#2d8cf0",
-    primaryColorPressed: "#2d8cf0",
-    primaryColorSuppl: "#2d8cf0",
+    primaryColor: '#2d8cf0',
+    primaryColorHover: '#2d8cf0',
+    primaryColorPressed: '#2d8cf0',
+    primaryColorSuppl: '#2d8cf0',
   },
   Tabs: {
-    colorSegment: "#f0f2f5",
+    colorSegment: '#f0f2f5',
   },
 };
 </script>

+ 1 - 1
src/api/modules/TaskData.js

@@ -1,5 +1,5 @@
 import service from '@/utils/axios';
-import { baseURL4 } from '@/constant';
+import { baseURL4, baseURL2 } from '@/constant';
 
 // 任务数据 设备列表
 export const getTaskDataClassList = (data) => {

+ 2 - 1
src/views/data/edit/AddVue.vue

@@ -43,7 +43,7 @@
 </template>
 
 <script setup>
-import { addTaskData } from "@/api";
+import { addTaskData } from '@/api';
 
 // const emit = defineEmits(["submit"]);
 
@@ -87,6 +87,7 @@ const showAddModal = () => {
 // 获取设备列表
 const addTask = async () => {
   try {
+    Object.keys(formValue).forEach((key) => (formValue[key] += ''));
     const { data: res } = await addTaskData({
       T_task_id: props.task.T_task_id,
       ...formValue,

+ 3 - 3
src/views/data/edit/ExportVue.vue

@@ -46,7 +46,7 @@
 </template>
 
 <script setup>
-import { exportTaskData } from "@/api";
+import { exportTaskData } from '@/api';
 
 const props = defineProps({
   task: {
@@ -89,8 +89,8 @@ const exportTask = async () => {
     const { data: res } = await exportTaskData({
       T_task_id: props.task.T_task_id,
       T_sn_list: formValue.T_sn_list.join(),
-      Time_start: formValue.Time_start,
-      Time_end: formValue.Time_end,
+      Time_start: formValue.Time_start + '',
+      Time_end: formValue.Time_end + '',
     });
     location.href = res.Data;
   } catch (e) {

+ 19 - 25
src/views/data/edit/ImportPlatform.vue

@@ -70,17 +70,24 @@
       </n-spin>
     </n-space>
   </n-modal>
+  <n-modal
+    v-model:show="showModal1"
+    :show-icon="false"
+    preset="dialog"
+    title="进度"
+  >
+    <n-progress type="circle" :percentage="20">
+      <span style="text-align: center">20% 很小</span>
+    </n-progress>
+  </n-modal>
 </template>
 
 <script setup>
 import { getV3DataList, addTaskData } from '@/api';
 import { NStatistic, useMessage } from 'naive-ui';
-import { h } from 'vue';
 
 const message = useMessage();
 
-const notification = useNotification();
-
 const props = defineProps({
   task: {
     required: true,
@@ -90,6 +97,7 @@ const props = defineProps({
 
 // 是否展示 Modal
 const showModal = ref(false);
+const showModal1 = ref(false);
 
 //
 const show = ref(false);
@@ -119,26 +127,10 @@ const showImportModal = () => {
 //
 const handleImport = () => {
   if (data.value.Data) {
-    data.value.Data.forEach((item, index) => {
-      const code = addTask(item);
-      notification.create({
-        title: '导入数据',
-        content: () =>
-          h(
-            NStatistic,
-            {
-              label: '进度',
-              value: index,
-            },
-            {
-              suffix: () => data.value.Num,
-            }
-          ),
-      });
-      if (code !== 200) {
-        return false;
-      }
+    data.value.Data.forEach((item) => {
+      return addTask(item);
     });
+    showModal1.value = true;
   } else {
     message.info('无数据');
   }
@@ -153,7 +145,9 @@ const addTask = async (item) => {
     T_rh: item.T_rh,
     T_time: item.T_time,
   });
-  return res.Code;
+  if (res.Code !== 200) {
+    return false;
+  }
 };
 
 //
@@ -161,8 +155,8 @@ const getData = async () => {
   try {
     show.value = true;
     const { data: res } = await getV3DataList({
-      Time_start: formValue.Time_start,
-      Time_end: formValue.Time_end,
+      Time_start: formValue.Time_start + '',
+      Time_end: formValue.Time_end + '',
       T_snid: `${formValue.T_sn},${formValue.T_id}|`,
       page: 1,
       page_z: 9999,

+ 14 - 14
src/views/data/edit/ImportVue.vue

@@ -20,9 +20,9 @@
 </template>
 
 <script setup>
-import { addTaskData } from "@/api";
-import { read, utils } from "xlsx";
-import { useDateFormat } from "@vueuse/core";
+import { addTaskData } from '@/api';
+import { read, utils } from 'xlsx';
+import { useDateFormat } from '@vueuse/core';
 
 const props = defineProps({
   task: {
@@ -54,15 +54,15 @@ const readFile = (file) => {
 const handleChange = async ({ file }) => {
   const dataBinary = await readFile(file.file);
   const workBook = read(dataBinary, {
-    type: "binary",
+    type: 'binary',
     cellDates: true,
   });
   const workSheet = workBook.Sheets[workBook.SheetNames[0]];
   dataList.value = utils.sheet_to_json(workSheet);
   dataList.value.forEach((item) => {
-    item["记录时间"] = useDateFormat(
-      item["记录时间"],
-      "YYYY-MM-DD HH:mm:ss"
+    item['记录时间'] = useDateFormat(
+      item['记录时间'],
+      'YYYY-MM-DD HH:mm:ss'
     ).value;
   });
 };
@@ -71,8 +71,8 @@ const handleChange = async ({ file }) => {
 const formValue = reactive({
   Time_start: null,
   Time_end: null,
-  T_sn: "",
-  T_id: "",
+  T_sn: '',
+  T_id: '',
   page: 1,
   page_z: 9999,
 });
@@ -95,11 +95,11 @@ const submitCallback = () => {
 const addTask = async (item) => {
   const { data: res } = await addTaskData({
     T_task_id: props.task.T_task_id,
-    T_sn: item["SN"],
-    T_id: item["编号"],
-    T_t: item["温度"],
-    T_rh: item["湿度"],
-    T_time: item["记录时间"],
+    T_sn: item['SN'],
+    T_id: item['编号'],
+    T_t: item['温度'],
+    T_rh: item['湿度'],
+    T_time: item['记录时间'],
   });
   if (res.Code === 200) {
     message.success(res.Msg);

+ 2 - 2
src/views/data/edit/SetVue.vue

@@ -29,11 +29,11 @@
 </template>
 
 <script setup>
-const emit = defineEmits(["submit"]);
+const emit = defineEmits(['submit']);
 
 //
 const submitCallback = () => {
-  emit("submit", formValue);
+  emit('submit', formValue);
 };
 
 // 是否展示 Modal

+ 77 - 72
src/views/data/edit/TemplateForm.vue

@@ -2,7 +2,7 @@
   <n-scrollbar x-scrollable class="pb-3">
     <div class="flex items-center gap-x-3 w-[2000px]">
       <template
-        v-for="(item, i) of templateList"
+        v-for="(item, i) of formValue.formList"
         :key="item.T_VerifyTemplateMap_id"
       >
         <n-form-item
@@ -10,35 +10,7 @@
           label-placement="left"
           :show-feedback="false"
           :label="item.T_name"
-          v-if="item.T_label === 7"
-        >
-          <n-date-picker
-            v-model:formatted-value="item.T_value"
-            value-format="yyyy-MM-dd HH:mm"
-            type="datetime"
-            clearable
-          />
-        </n-form-item>
-        <n-form-item
-          label-width="auto"
-          label-placement="left"
-          :show-feedback="false"
-          :label="item.T_name"
-          v-else-if="item.T_label === 9"
-        >
-          <n-date-picker
-            v-model:formatted-value="item.T_value"
-            value-format="yyyy-MM-dd HH:mm"
-            type="datetimerange"
-            clearable
-          />
-        </n-form-item>
-        <n-form-item
-          label-width="auto"
-          label-placement="left"
-          :show-feedback="false"
-          :label="item.T_name"
-          v-else-if="item.T_label === 3"
+          v-if="item.T_label === 3"
         >
           <n-select
             label-field="T_sn"
@@ -76,8 +48,41 @@
             </template>
           </n-select>
         </n-form-item>
+        <n-form-item
+          label-width="auto"
+          label-placement="left"
+          :show-feedback="false"
+          :label="item.T_name"
+          v-else-if="item.T_label === 7"
+        >
+          <n-date-picker
+            v-model:formatted-value="item.T_value"
+            value-format="yyyy-MM-dd HH:mm"
+            type="datetime"
+            clearable
+          />
+        </n-form-item>
+        <n-form-item
+          label-width="auto"
+          label-placement="left"
+          :show-feedback="false"
+          :label="item.T_name"
+          v-else-if="item.T_label === 9"
+        >
+          <n-date-picker
+            v-model:formatted-value="item.T_value"
+            value-format="yyyy-MM-dd HH:mm"
+            type="datetimerange"
+            clearable
+          />
+        </n-form-item>
       </template>
-      <n-button type="primary" @click="showCreateDialog">生成报告</n-button>
+      <n-popconfirm @positive-click="putTemplateData">
+        <template #trigger>
+          <n-button type="primary">生成报告</n-button>
+        </template>
+        确认生成报告?
+      </n-popconfirm>
     </div>
   </n-scrollbar>
 </template>
@@ -85,24 +90,45 @@
 <script setup>
 import { getVerifyTemplateMapDataList, putVerifyTemplateMapData } from '@/api';
 import { getToken } from '@/utils/storage/sessionToken';
+import { watch } from 'vue';
 
 const message = useMessage();
 
-const dialog = useDialog();
-
 const props = defineProps({
   task: {
-    required: true,
     default: {},
   },
   classList: {
-    required: true,
+    default: [],
+  },
+  time: {
+    default: null,
+  },
+  temporalInterval: {
     default: [],
   },
 });
 
-//
-const templateList = ref([]);
+// 表单对象
+const formValue = reactive({
+  formList: [],
+});
+
+watch(
+  () => props.time,
+  (newValue) => {
+    const index = formValue.formList.findIndex((item) => item.T_label === 7);
+    formValue.formList[index].T_value = newValue;
+  }
+);
+
+watch(
+  () => props.temporalInterval,
+  (newValue) => {
+    const index = formValue.formList.findIndex((item) => item.T_label === 9);
+    formValue.formList[index].T_value = newValue;
+  }
+);
 
 //
 const queryData = reactive({
@@ -111,45 +137,27 @@ const queryData = reactive({
   T_VerifyTemplate_id: props.task.T_VerifyTemplate_id,
 });
 
-/**
- * 全选
- * @param i
- */
+// 全选
 const handleSelectAll = (i) => {
-  if (templateList.value[i].T_value.length !== 0) {
-    return (templateList.value[i].T_value = []);
+  if (formValue.formList[i].T_value.length !== 0) {
+    return (formValue.formList[i].T_value = []);
   }
-  templateList.value[i].T_value = props.classList.map((item) => item.T_sn);
+  formValue.formList[i].T_value = props.classList.map((item) => item.T_sn);
 };
 
-/**
- * 反选
- * @param i
- */
+// 反选
 const handleSelectReverse = (i) => {
   const arr = props.classList.map((item) => item.T_sn);
-  templateList.value[i].T_value = arr.filter(
-    (item) => !templateList.value[i].T_value.includes(item)
+  formValue.formList[i].T_value = arr.filter(
+    (item) => !formValue.formList[i].T_value.includes(item)
   );
 };
 
-//
-const showCreateDialog = async () => {
-  dialog.info({
-    title: '提示',
-    content: '确认生成报告?',
-    positiveText: '确定',
-    negativeText: '取消',
-    onPositiveClick: () => {
-      putTemplateData();
-    },
-  });
-};
-
 // 模板标签数据添加或更新
 const putTemplateData = async () => {
   try {
-    const VerifyTemplateMapData = templateList.value.map((item) => {
+    const arr = toRaw(formValue.formList);
+    const VerifyTemplateMapData = arr.map((item) => {
       if (item.T_label === 102 || item.T_label === 104) {
         return {
           T_VerifyTemplateMap_id: item.T_VerifyTemplateMap_id,
@@ -176,7 +184,6 @@ const putTemplateData = async () => {
       T_source: queryData.T_source,
       T_task_id: queryData.T_task_id,
       T_VerifyTemplate_id: queryData.T_VerifyTemplate_id,
-
       VerifyTemplateMapData,
     });
     message.success(res.Msg);
@@ -189,14 +196,12 @@ const putTemplateData = async () => {
 const getTemplateList = async () => {
   try {
     const { data: res } = await getVerifyTemplateMapDataList(queryData);
-    templateList.value = res.Data || [];
-    templateList.value.forEach((item) => {
-      if (item.T_label === 4) {
-        item.T_value = item.T_value ? item.T_value.split('|') : [];
-      } else if (item.T_label === 7) {
-        item.T_value = item.T_value ? item.T_value : null;
-      } else if (item.T_label === 9) {
+    formValue.formList = res.Data || [];
+    formValue.formList.forEach((item) => {
+      if (item.T_label === 4 || item.T_label === 9) {
         item.T_value = item.T_value ? item.T_value.split('|') : null;
+      } else {
+        item.T_value = item.T_value ? item.T_value : null;
       }
     });
   } catch (e) {

+ 59 - 44
src/views/data/edit/index.vue

@@ -78,7 +78,12 @@
             <SetVue @submit="handleSet" />
           </n-space>
           <div>
-            <TemplateForm :task="task" :class-list="classList" />
+            <TemplateForm
+              :task="task"
+              :class-list="classList"
+              :time="time"
+              :temporal-interval="temporalInterval"
+            />
           </div>
           <n-tabs
             type="segment"
@@ -193,6 +198,9 @@ const formValue = reactive({
   T_rh: null,
 });
 
+// 数据源对象
+// const state = reactive({});
+
 // 设备列表
 const classList = ref([]);
 
@@ -211,6 +219,7 @@ const tabChart = ref('温度');
 const handleTabChange = (value) => {
   console.log(value);
   checkValues.value = [];
+  checked.value = false;
 };
 
 //
@@ -255,17 +264,20 @@ const checked = ref(false);
 const handleSelectAll = async (value) => {
   if (value) {
     checkValues.value = classList.value.map((item) => item.T_id);
-    for (let i of classList.value) {
-      queryData.T_id = i.T_id;
-      queryData.T_sn = i.T_sn;
+    const arr = classList.value.filter(
+      (item) => !selectedValue.value.includes(item.T_id)
+    );
+    for (let item of arr) {
+      queryData.T_id = item.T_id;
+      queryData.T_sn = item.T_sn;
       await getDataList();
       if (tabChart.value === '温度') {
         const data1 = dataList.value
           .map((item) => [new Date(item.T_time).getTime(), item.T_t])
           .sort((a, b) => a[0] - b[0]);
         chart1.value.chart.addSeries({
-          id: i.T_id,
-          name: i.T_id,
+          id: item.T_id,
+          name: item.T_id,
           data: data1,
           lineWidth: 1,
           cursor: 'pointer',
@@ -273,6 +285,7 @@ const handleSelectAll = async (value) => {
             click(e) {
               modal.title = '温度';
               modal.showModal = true;
+              time.value = dateFormat('%Y-%m-%d %H:%M:%S', e.point.x);
               formValue.T_t = e.point.y;
               queryData.T_id = e.point.series.name;
               getDataList();
@@ -281,13 +294,12 @@ const handleSelectAll = async (value) => {
           },
         });
       } else {
-        chart2.value.chart.series = [];
         const data2 = dataList.value
           .map((item) => [new Date(item.T_time).getTime(), item.T_rh])
           .sort((a, b) => a[0] - b[0]);
         chart2.value.chart.addSeries({
-          id: i.T_id,
-          name: i.T_id,
+          id: item.T_id,
+          name: item.T_id,
           data: data2,
           lineWidth: 1,
           cursor: 'pointer',
@@ -295,6 +307,7 @@ const handleSelectAll = async (value) => {
             click(e) {
               modal.title = '湿度';
               modal.showModal = true;
+              time.value = dateFormat('%Y-%m-%d %H:%M:%S', e.point.x);
               formValue.T_rh = e.point.y;
               queryData.T_id = e.point.series.name;
               getDataList();
@@ -318,8 +331,11 @@ const handleSelectAll = async (value) => {
   }
 };
 
+const time = ref('');
+const selectedValue = ref([]);
 // 选项组的值改变时的回调
 const handleCheckValues = async (values, meta) => {
+  selectedValue.value = values;
   const classInfo = classList.value.find((item) => item.T_id === meta.value);
   queryData.T_id = classInfo.T_id;
   queryData.T_sn = classInfo.T_sn;
@@ -341,6 +357,7 @@ const handleCheckValues = async (values, meta) => {
           click(e) {
             modal.title = '温度';
             modal.showModal = true;
+            time.value = dateFormat('%Y-%m-%d %H:%M:%S', e.point.x);
             formValue.T_t = e.point.y;
             queryData.T_id = e.point.series.name;
             getDataList();
@@ -353,16 +370,17 @@ const handleCheckValues = async (values, meta) => {
         id: meta.value,
         name: meta.value,
         data: data2,
-        // events: {
-        //   click(e) {
-        //     modal.title = '湿度';
-        //     modal.showModal = true;
-        //     formValue.T_rh = e.point.y;
-        //     queryData.T_id = e.point.series.name;
-        //     getDataList();
-        //     dataInfo.value = dataList.value[e.point.index];
-        //   },
-        // },
+        events: {
+          click(e) {
+            modal.title = '湿度';
+            modal.showModal = true;
+            time.value = dateFormat('%Y-%m-%d %H:%M:%S', e.point.x);
+            formValue.T_rh = e.point.y;
+            queryData.T_id = e.point.series.name;
+            getDataList();
+            dataInfo.value = dataList.value[e.point.index];
+          },
+        },
       });
     }
   } else {
@@ -374,6 +392,8 @@ const handleCheckValues = async (values, meta) => {
   }
 };
 
+const temporalInterval = ref('');
+
 // 图表配置
 const chartOptions1 = {
   xAxis: {
@@ -383,9 +403,9 @@ const chartOptions1 = {
   },
 
   yAxis: {
-    // labels: {
-    //   format: `{text}℃`,
-    // },
+    labels: {
+      format: '{text}℃',
+    },
     plotLines: [],
   },
 
@@ -406,29 +426,24 @@ const chartOptions1 = {
     enabled: false,
   },
 
+  // tooltip: {
+  //   formatter() {
+  //     return `${this.y} ${dateFormat('%Y-%m-%d %H:%M:%S', this.x)}`;
+  //   },
+  // },
+
   chart: {
     zoomType: 'xy',
     events: {
-      click(event) {
-        console.log(
-          dateFormat('%Y-%m-%d %H:%M:%S', event.xAxis[0].value),
-          event.yAxis[0].value
-        );
-        // modal.title = '温度';
-        // modal.showModal = true;
-        // formValue.T_rh = e.point.y;
-        // queryData.T_id = e.point.series.name;
-        // getDataList();
-        // dataInfo.value = dataList.value[e.point.index];
-      },
       selection(event) {
-        // log the min and max of the primary, datetime x-axis
-        console.log(
+        // console.log(
+        //   dateFormat('%Y-%m-%d %H:%M:%S', event.xAxis[0].min),
+        //   dateFormat('%Y-%m-%d %H:%M:%S', event.xAxis[0].max)
+        // );
+        temporalInterval.value = [
           dateFormat('%Y-%m-%d %H:%M:%S', event.xAxis[0].min),
-          dateFormat('%Y-%m-%d %H:%M:%S', event.xAxis[0].max)
-        );
-        // log the min and max of the y axis
-        console.log(event.yAxis[0].min, event.yAxis[0].max);
+          dateFormat('%Y-%m-%d %H:%M:%S', event.xAxis[0].max),
+        ];
       },
     },
   },
@@ -443,9 +458,9 @@ const chartOptions2 = {
   },
 
   yAxis: {
-    // labels: {
-    //   format: `{text}%`,
-    // },
+    labels: {
+      format: '{text}%',
+    },
   },
 
   legend: {
@@ -510,7 +525,6 @@ const getClassList = async () => {
 // 获取任务数据列表
 const getDataList = async () => {
   const { data: res } = await getTaskDataList(queryData);
-  dataList.value = res.Data.List || [];
   if (queryData.page_z <= res.Data.Page_size) {
     const arr = classList.value.filter((item) =>
       checkValues.value.includes(item.T_sn)
@@ -521,6 +535,7 @@ const getDataList = async () => {
       getDataList();
     });
   }
+  dataList.value = res.Data.List || [];
 };
 
 getClassList();

+ 2 - 21
src/views/equipment/index.vue

@@ -51,14 +51,8 @@
           <n-input v-model:value="formValue.T_id" />
         </n-form-item>
       </template>
-      <n-form-item label="备注" path="T_remark">
-        <n-space vertical class="w-full">
-          <n-select
-            :options="remarkOptions"
-            @update:value="(value) => (formValue.T_remark = value)"
-          />
-          <n-input v-model:value="formValue.T_remark" type="textarea" />
-        </n-space>
+      <n-form-item label="备注(默认:产品存放区域)" path="T_remark">
+        <n-input v-model:value="formValue.T_remark" type="textarea" />
       </n-form-item>
     </n-form>
   </n-modal>
@@ -86,18 +80,6 @@ const queryData = reactive({
   T_class: task.T_class,
 });
 
-// 备注选项
-const remarkOptions = [
-  {
-    label: '产品存放区域',
-    value: '产品存放区域',
-  },
-  {
-    label: '其他',
-    value: '其他',
-  },
-];
-
 // 需要展示的列
 const columns = [
   {
@@ -189,7 +171,6 @@ const formValue = reactive({
   T_snid: '',
   T_id: 0,
   T_remark: '',
-  remark: '',
 });
 
 // 输入框点击清空按钮时触发

+ 8 - 4
src/views/report/audit/TabThree.vue

@@ -6,7 +6,7 @@
           <h2>校准证书</h2>
         </template>
         <n-scrollbar
-          :style="{ maxHeight: `${height - 450}px`, paddingRight: '20px' }"
+          :style="{ maxHeight: `${height - 400}px`, paddingRight: '20px' }"
           trigger="none"
         >
           <template v-for="item of dataList" :key="item">
@@ -21,7 +21,7 @@
                 :bordered="false"
                 :content-style="{ padding: '5px', textAlign: 'center' }"
               >
-                {{ item.T_id }}
+                {{ item.T_id }}】{{ item.T_sn }}
               </n-card>
             </n-list-item>
           </template>
@@ -36,7 +36,7 @@
           </n-icon>
         </n-button>
       </div>
-      <n-scrollbar :style="{ maxHeight: `${height - 430}px` }" trigger="none">
+      <n-scrollbar :style="{ maxHeight: `${height - 400}px` }" trigger="none">
         <vue-pdf-embed ref="pdfRef" :source="source" />
       </n-scrollbar>
     </n-card>
@@ -97,4 +97,8 @@ const getDataList = async () => {
 getDataList();
 </script>
 
-<style lang="scss" scoped></style>
+<style lang="scss" scoped>
+:deep(.n-list__header) {
+  padding: 0;
+}
+</style>

+ 35 - 8
src/views/report/audit/index.vue

@@ -18,7 +18,12 @@
       </n-descriptions-item>
     </n-descriptions>
     <n-tabs class="flex-1" type="segment" animated size="large">
-      <n-tab-pane class="h-full flex flex-col gap-y-3" name="1" tab="验证方案">
+      <n-tab-pane
+        class="h-full flex flex-col gap-y-3"
+        name="1"
+        tab="验证方案"
+        display-directive="show:lazy"
+      >
         <n-space justify="end">
           <n-button text style="font-size: 24px" @click="onPrint">
             <n-icon>
@@ -26,11 +31,16 @@
             </n-icon>
           </n-button>
         </n-space>
-        <n-scrollbar :style="{ maxHeight: `${height - 420}px` }" trigger="none">
-          <vue-pdf-embed ref="pdfRef" :source="taskInfo.T_pdf1" />
+        <n-scrollbar :style="{ maxHeight: `${height - 350}px` }" trigger="none">
+          <vue-pdf-embed ref="pdfRef" :source="state.pdf1" />
         </n-scrollbar>
       </n-tab-pane>
-      <n-tab-pane class="h-full flex flex-col gap-y-3" name="2" tab="验证报告">
+      <n-tab-pane
+        class="h-full flex flex-col gap-y-3"
+        name="2"
+        tab="验证报告"
+        display-directive="show:lazy"
+      >
         <n-space justify="end">
           <n-button text style="font-size: 24px" @click="onPrint">
             <n-icon>
@@ -38,14 +48,24 @@
             </n-icon>
           </n-button>
         </n-space>
-        <n-scrollbar :style="{ maxHeight: `${height - 420}px` }" trigger="none">
-          <vue-pdf-embed ref="pdfRef" :source="taskInfo.T_pdf2" />
+        <n-scrollbar :style="{ maxHeight: `${height - 350}px` }" trigger="none">
+          <vue-pdf-embed ref="pdfRef" :source="state.pdf2" />
         </n-scrollbar>
       </n-tab-pane>
-      <n-tab-pane class="h-full flex flex-col gap-y-3" name="3" tab="校准证书">
+      <n-tab-pane
+        class="h-full flex flex-col gap-y-3"
+        name="3"
+        tab="校准证书"
+        display-directive="show:lazy"
+      >
         <TabThree :task="task" :height="height" />
       </n-tab-pane>
-      <n-tab-pane class="h-full flex flex-col gap-y-3" name="4" tab="验证数据">
+      <n-tab-pane
+        class="h-full flex flex-col gap-y-3"
+        name="4"
+        tab="验证数据"
+        display-directive="show:lazy"
+      >
         <TabFour :task="task" />
       </n-tab-pane>
     </n-tabs>
@@ -66,6 +86,11 @@ const dialog = useDialog();
 
 const message = useMessage();
 
+const state = reactive({
+  pdf1: '',
+  pdf2: '',
+});
+
 const task = window.sessionStorage.getItem('task')
   ? JSON.parse(window.sessionStorage.getItem('task'))
   : {};
@@ -108,6 +133,8 @@ const getTaskInfo = async () => {
     T_task_id: task.T_task_id,
   });
   taskInfo.value = res.Data || {};
+  state.pdf1 = taskInfo.value.T_pdf1;
+  state.pdf2 = taskInfo.value.T_pdf2;
 };
 
 getTaskInfo();

+ 93 - 168
src/views/report/create/index.vue

@@ -10,165 +10,91 @@
             </template>
             确认生成报告?
           </n-popconfirm>
-          <n-button type="primary" @click="showUploadModal">上传验证</n-button>
+          <n-button type="primary" @click="showUploadModal"
+            >上传验证报告</n-button
+          >
         </n-space>
       </template>
     </n-page-header>
     <n-scrollbar :style="{ maxHeight: `${height - 150}px` }" trigger="none">
-      <n-form
-        label-placement="left"
-        label-width="auto"
-        size="large"
-        show-require-mark
-        class="w-[800px] mx-auto"
-      >
-        <template
-          v-for="(item, index) of templateList"
-          :key="item.T_VerifyTemplateMap_id"
-        >
-          <n-form-item :label="item.T_name" v-if="item.T_label === 1">
-            <n-input v-model:value="item.T_value" />
-            <n-popover trigger="hover">
-              <template #trigger>
-                <n-icon size="24" class="ml-3">
-                  <InformationCircleOutline />
-                </n-icon>
-              </template>
-              {{ item.T_text }}
-            </n-popover>
-          </n-form-item>
-          <n-form-item :label="item.T_name" v-else-if="item.T_label === 2">
-            <n-input v-model:value="item.T_value" />
-            <n-popover trigger="hover">
-              <template #trigger>
-                <n-icon size="24" class="ml-3">
-                  <InformationCircleOutline />
-                </n-icon>
-              </template>
-              {{ item.T_text }}
-            </n-popover>
-          </n-form-item>
-          <n-form-item :label="item.T_name" v-else-if="item.T_label === 3">
-            <n-select
-              v-model:value="item.T_value"
-              multiple
-              label-field="T_id"
-              value-field="T_sn"
-              max-tag-count="responsive"
-              :options="classList"
-            >
-              <template #action>
-                <n-space>
-                  <n-button
-                    class="underline"
-                    text
-                    @click="handleSelectAll(index)"
-                    >全选</n-button
-                  >
-                  <n-button
-                    class="underline"
-                    text
-                    @click="handleSelectReverse(index)"
-                    >反选</n-button
-                  >
-                </n-space>
-              </template>
-            </n-select>
-            <n-popover trigger="hover">
-              <template #trigger>
-                <n-icon size="24" class="ml-3">
-                  <InformationCircleOutline />
-                </n-icon>
-              </template>
-              {{ item.T_text }}
-            </n-popover>
-          </n-form-item>
-          <n-form-item :label="item.T_name" v-else-if="item.T_label === 4">
-            <n-select
-              label-field="T_id"
-              value-field="T_sn"
-              v-model:value="item.T_value"
-              :options="classList"
-            />
-            <n-popover trigger="hover">
-              <template #trigger>
-                <n-icon size="24" class="ml-3">
-                  <InformationCircleOutline />
-                </n-icon>
-              </template>
-              {{ item.T_text }}
-            </n-popover>
-          </n-form-item>
-          <n-divider v-else-if="item.T_label === 5" />
-          <n-form-item :label="item.T_name" v-else-if="item.T_label === 7">
-            <n-date-picker
-              v-model:formatted-value="item.T_value"
-              value-format="yyyy-MM-dd HH:mm"
-              type="datetime"
-              clearable
-              class="w-full"
-            />
-            <n-popover trigger="hover">
-              <template #trigger>
-                <n-icon size="24" class="ml-3">
-                  <InformationCircleOutline />
-                </n-icon>
-              </template>
-              {{ item.T_text }}
-            </n-popover>
-          </n-form-item>
-          <n-form-item :label="item.T_name" v-else-if="item.T_label === 9">
-            <n-date-picker
-              v-model:formatted-value="item.T_value"
-              value-format="yyyy-MM-dd HH:mm"
-              type="datetimerange"
-              clearable
-              class="w-full"
-            />
-            <n-popover trigger="hover">
-              <template #trigger>
-                <n-icon size="24" class="ml-3">
-                  <InformationCircleOutline />
-                </n-icon>
-              </template>
-              {{ item.T_text }}
-            </n-popover>
-          </n-form-item>
-          <n-form-item :label="item.T_name" v-else-if="item.T_label === 10">
-            <n-image class="mr-5" width="100" :src="item.T_value" />
-            <n-upload
-              list-type="image-card"
-              @change="(options) => handleChangeByIndex(options, index)"
-              :default-upload="false"
-              :max="1"
-            >
-              点击上传
-            </n-upload>
-            <n-popover trigger="hover">
-              <template #trigger>
-                <n-icon size="24" class="ml-3">
-                  <InformationCircleOutline />
-                </n-icon>
-              </template>
-              <n-image width="200" :src="item.T_text" />
-            </n-popover>
-          </n-form-item>
-          <n-form-item :label="item.T_name" v-else-if="item.T_label === 11">
-            <n-image class="mr-5" width="100" v-model:src="item.T_value" />
-            <n-space>
-              <n-button @click="() => handleEdit(item)">编辑</n-button>
-              <n-button @click="() => handleRefresh(index)">刷新</n-button>
-            </n-space>
+      <n-form label-width="auto" size="large" show-require-mark>
+        <n-grid :cols="12" :x-gap="12">
+          <n-form-item-gi
+            v-for="(item, index) of formValue.formList"
+            :key="item.T_VerifyTemplateMap_id"
+            :span="4"
+            :label="item.T_name"
+          >
+            <template v-if="item.T_label === 3 || item.T_label === 4">
+              <n-select
+                v-model:value="item.T_value"
+                :multiple="item.T_label === 3 ? true : false"
+                label-field="T_id"
+                value-field="T_sn"
+                :max-tag-count="item.T_label === 3 ? 'responsive' : undefined"
+                :options="classList"
+              >
+                <template #action v-if="item.T_label === 3">
+                  <n-space>
+                    <n-button
+                      class="underline"
+                      text
+                      @click="handleSelectAll(index)"
+                      >全选</n-button
+                    >
+                    <n-button
+                      class="underline"
+                      text
+                      @click="handleSelectReverse(index)"
+                      >反选</n-button
+                    >
+                  </n-space>
+                </template>
+              </n-select>
+            </template>
+            <template v-else-if="item.T_label === 7 || item.T_label === 9">
+              <n-date-picker
+                v-model:formatted-value="item.T_value"
+                value-format="yyyy-MM-dd HH:mm"
+                :type="item.T_label === 7 ? 'datetime' : 'datetimerange'"
+                clearable
+                class="w-full"
+              />
+            </template>
+            <template v-else-if="item.T_label === 10 || item.T_label === 11">
+              <n-image class="mr-5" width="100" :src="item.T_value" />
+              <n-upload
+                list-type="image-card"
+                @change="(options) => handleChangeByIndex(options, index)"
+                :default-upload="false"
+                :max="1"
+                v-if="item.T_label === 10"
+              >
+                点击上传
+              </n-upload>
+              <n-space v-else>
+                <n-button @click="() => handleEdit(item)">编辑</n-button>
+                <n-button @click="() => handleRefresh(index)">刷新</n-button>
+              </n-space>
+            </template>
+            <template v-else>
+              <n-input v-model:value="item.T_value" />
+            </template>
             <n-popover trigger="hover">
               <template #trigger>
                 <n-icon size="24" class="ml-3">
                   <InformationCircleOutline />
                 </n-icon>
               </template>
-              <n-image width="200" :src="item.T_text" />
+              <n-image
+                width="200"
+                :src="item.T_text"
+                v-if="item.T_label === 10 || item.T_label === 11"
+              />
+              <span v-else>{{ item.T_text }}</span>
             </n-popover>
-          </n-form-item>
-        </template>
+          </n-form-item-gi>
+        </n-grid>
       </n-form>
     </n-scrollbar>
   </div>
@@ -180,7 +106,7 @@
     :title="modal.title"
     @close="handleClose"
   >
-    <n-scrollbar style="max-height: 200px" trigger="none" ref="scroll">
+    <n-scrollbar style="max-height: 200px" trigger="none" ref="scrollbarRef">
       <n-upload
         list-type="image-card"
         :default-upload="false"
@@ -205,7 +131,7 @@
         <n-list class="bg-transparent">
           <n-list-item :key="index" v-for="(item, index) of items">
             <template #prefix>
-              {{ index }}
+              {{ items.length - index }}
             </template>
             {{ item }}
           </n-list-item>
@@ -249,7 +175,7 @@ const { height } = useWindowSize();
 
 const message = useMessage();
 
-const scroll = ref(null);
+const scrollbarRef = ref(null);
 
 const task = window.sessionStorage.getItem('task')
   ? JSON.parse(window.sessionStorage.getItem('task'))
@@ -258,7 +184,7 @@ const task = window.sessionStorage.getItem('task')
 // 表单对象
 const formValue = reactive({
   pdf: '',
-  templateList: [],
+  formList: [],
 });
 
 // 查询数据
@@ -271,9 +197,6 @@ const queryData = reactive({
 //
 const classList = ref([]);
 
-//
-const templateList = ref([]);
-
 // 模态框数据源
 const modal = reactive({
   showModal: false,
@@ -282,9 +205,9 @@ const modal = reactive({
 
 // CAD刷新
 const handleRefresh = (index) => {
-  templateList.value[
+  formValue.formList[
     index
-  ].T_value = `http://coldverifylocal.coldbaozhida.com/CAD/download?type=upload&filename=${queryData.T_task_id}_${queryData.T_VerifyTemplate_id}_${templateList.value[index].T_id}.png`;
+  ].T_value = `http://coldverifylocal.coldbaozhida.com/CAD/download?type=upload&filename=${queryData.T_task_id}_${queryData.T_VerifyTemplate_id}_${formValue.formList[index].T_id}.png`;
 };
 
 // CAD编辑
@@ -314,7 +237,7 @@ const handleChangeByIndex = async ({ file }, i) => {
       message.error('上传失败');
     },
     complete: (res) => {
-      templateList.value[i].T_value = res.key;
+      formValue.formList[i].T_value = res.key;
     },
   });
 };
@@ -347,17 +270,17 @@ const handleChange = async ({ file }) => {
 
 // 全选
 const handleSelectAll = (i) => {
-  if (templateList.value[i].T_value.length !== 0) {
-    return (templateList.value[i].T_value = []);
+  if (formValue.formList[i].T_value.length !== 0) {
+    return (formValue.formList[i].T_value = []);
   }
-  templateList.value[i].T_value = classList.value.map((item) => item.T_sn);
+  formValue.formList[i].T_value = classList.value.map((item) => item.T_sn);
 };
 
 // 反选
 const handleSelectReverse = (i) => {
   const arr = classList.value.map((item) => item.T_sn);
-  templateList.value[i].T_value = arr.filter(
-    (item) => !templateList.value[i].T_value.includes(item)
+  formValue.formList[i].T_value = arr.filter(
+    (item) => !formValue.formList[i].T_value.includes(item)
   );
 };
 
@@ -399,7 +322,9 @@ let timer = 0;
 const keyInfo = ref({});
 const items = computed(() => {
   return keyInfo.value.Item
-    ? keyInfo.value.Item.split('\n').filter((item) => item)
+    ? keyInfo.value.Item.split('\n')
+        .filter((item) => item)
+        .reverse()
     : [];
 });
 
@@ -408,7 +333,6 @@ const generateKeyInfo = async (key) => {
   const { data: res } = await generateKey({
     key,
   });
-  keyInfo.value = res;
   if (res.Code === 600) {
     timer = setTimeout(() => {
       generateKeyInfo(key);
@@ -416,6 +340,7 @@ const generateKeyInfo = async (key) => {
   } else {
     clearTimeout(timer);
   }
+  keyInfo.value = res;
 };
 
 // 关闭对话框时触发
@@ -431,7 +356,7 @@ const handleDownload = () => {
 // 生成报告
 const putTemplateData = async () => {
   try {
-    const arr = toRaw(templateList.value);
+    const arr = toRaw(formValue.formList);
     const VerifyTemplateMapData = arr.map((item) => {
       if (item.T_label === 3 || item.T_label === 9) {
         return {
@@ -495,8 +420,8 @@ const getClassList = async () => {
 const getTemplateList = async () => {
   try {
     const { data: res } = await getVerifyTemplateMapDataList(queryData);
-    templateList.value = res.Data;
-    templateList.value.forEach((item) => {
+    formValue.formList = res.Data;
+    formValue.formList.forEach((item) => {
       if (item.T_label === 3 || item.T_label === 9) {
         item.T_value = item.T_value ? item.T_value.split('|') : null;
       } else {

+ 92 - 167
src/views/scheme/index.vue

@@ -10,165 +10,91 @@
             </template>
             确认生成报告?
           </n-popconfirm>
-          <n-button type="primary" @click="showUploadModal">上传验证</n-button>
+          <n-button type="primary" @click="showUploadModal"
+            >上传验证方案</n-button
+          >
         </n-space>
       </template>
     </n-page-header>
     <n-scrollbar :style="{ maxHeight: `${height - 150}px` }" trigger="none">
-      <n-form
-        label-placement="left"
-        label-width="auto"
-        size="large"
-        show-require-mark
-        class="w-[800px] mx-auto"
-      >
-        <template
-          v-for="(item, index) of templateList"
-          :key="item.T_VerifyTemplateMap_id"
-        >
-          <n-form-item :label="item.T_name" v-if="item.T_label === 1">
-            <n-input v-model:value="item.T_value" />
-            <n-popover trigger="hover">
-              <template #trigger>
-                <n-icon size="24" class="ml-3">
-                  <InformationCircleOutline />
-                </n-icon>
-              </template>
-              {{ item.T_text }}
-            </n-popover>
-          </n-form-item>
-          <n-form-item :label="item.T_name" v-else-if="item.T_label === 2">
-            <n-input v-model:value="item.T_value" />
-            <n-popover trigger="hover">
-              <template #trigger>
-                <n-icon size="24" class="ml-3">
-                  <InformationCircleOutline />
-                </n-icon>
-              </template>
-              {{ item.T_text }}
-            </n-popover>
-          </n-form-item>
-          <n-form-item :label="item.T_name" v-else-if="item.T_label === 3">
-            <n-select
-              v-model:value="item.T_value"
-              multiple
-              label-field="T_id"
-              value-field="T_sn"
-              max-tag-count="responsive"
-              :options="classList"
-            >
-              <template #action>
-                <n-space>
-                  <n-button
-                    class="underline"
-                    text
-                    @click="handleSelectAll(index)"
-                    >全选</n-button
-                  >
-                  <n-button
-                    class="underline"
-                    text
-                    @click="handleSelectReverse(index)"
-                    >反选</n-button
-                  >
-                </n-space>
-              </template>
-            </n-select>
-            <n-popover trigger="hover">
-              <template #trigger>
-                <n-icon size="24" class="ml-3">
-                  <InformationCircleOutline />
-                </n-icon>
-              </template>
-              {{ item.T_text }}
-            </n-popover>
-          </n-form-item>
-          <n-form-item :label="item.T_name" v-else-if="item.T_label === 4">
-            <n-select
-              label-field="T_id"
-              value-field="T_sn"
-              v-model:value="item.T_value"
-              :options="classList"
-            />
-            <n-popover trigger="hover">
-              <template #trigger>
-                <n-icon size="24" class="ml-3">
-                  <InformationCircleOutline />
-                </n-icon>
-              </template>
-              {{ item.T_text }}
-            </n-popover>
-          </n-form-item>
-          <n-divider v-else-if="item.T_label === 5" />
-          <n-form-item :label="item.T_name" v-else-if="item.T_label === 7">
-            <n-date-picker
-              v-model:formatted-value="item.T_value"
-              value-format="yyyy-MM-dd HH:mm"
-              type="datetime"
-              clearable
-              class="w-full"
-            />
-            <n-popover trigger="hover">
-              <template #trigger>
-                <n-icon size="24" class="ml-3">
-                  <InformationCircleOutline />
-                </n-icon>
-              </template>
-              {{ item.T_text }}
-            </n-popover>
-          </n-form-item>
-          <n-form-item :label="item.T_name" v-else-if="item.T_label === 9">
-            <n-date-picker
-              v-model:formatted-value="item.T_value"
-              value-format="yyyy-MM-dd HH:mm"
-              type="datetimerange"
-              clearable
-              class="w-full"
-            />
-            <n-popover trigger="hover">
-              <template #trigger>
-                <n-icon size="24" class="ml-3">
-                  <InformationCircleOutline />
-                </n-icon>
-              </template>
-              {{ item.T_text }}
-            </n-popover>
-          </n-form-item>
-          <n-form-item :label="item.T_name" v-else-if="item.T_label === 10">
-            <n-image class="mr-5" width="100" :src="item.T_value" />
-            <n-upload
-              list-type="image-card"
-              @change="(options) => handleChangeByIndex(options, index)"
-              :default-upload="false"
-              :max="1"
-            >
-              点击上传
-            </n-upload>
-            <n-popover trigger="hover">
-              <template #trigger>
-                <n-icon size="24" class="ml-3">
-                  <InformationCircleOutline />
-                </n-icon>
-              </template>
-              <n-image width="200" :src="item.T_text" />
-            </n-popover>
-          </n-form-item>
-          <n-form-item :label="item.T_name" v-else-if="item.T_label === 11">
-            <n-image class="mr-5" width="100" :src="item.T_value" />
-            <n-space>
-              <n-button @click="() => handleEdit(item)">编辑</n-button>
-              <n-button @click="() => handleRefresh(index)">刷新</n-button>
-            </n-space>
+      <n-form label-width="auto" size="large" show-require-mark>
+        <n-grid :cols="12" :x-gap="12">
+          <n-form-item-gi
+            v-for="(item, index) of formValue.formList"
+            :key="item.T_VerifyTemplateMap_id"
+            :span="4"
+            :label="item.T_name"
+          >
+            <template v-if="item.T_label === 3 || item.T_label === 4">
+              <n-select
+                v-model:value="item.T_value"
+                :multiple="item.T_label === 3 ? true : false"
+                label-field="T_id"
+                value-field="T_sn"
+                :max-tag-count="item.T_label === 3 ? 'responsive' : undefined"
+                :options="classList"
+              >
+                <template #action v-if="item.T_label === 3">
+                  <n-space>
+                    <n-button
+                      class="underline"
+                      text
+                      @click="handleSelectAll(index)"
+                      >全选</n-button
+                    >
+                    <n-button
+                      class="underline"
+                      text
+                      @click="handleSelectReverse(index)"
+                      >反选</n-button
+                    >
+                  </n-space>
+                </template>
+              </n-select>
+            </template>
+            <template v-else-if="item.T_label === 7 || item.T_label === 9">
+              <n-date-picker
+                v-model:formatted-value="item.T_value"
+                value-format="yyyy-MM-dd HH:mm"
+                :type="item.T_label === 7 ? 'datetime' : 'datetimerange'"
+                clearable
+                class="w-full"
+              />
+            </template>
+            <template v-else-if="item.T_label === 10 || item.T_label === 11">
+              <n-image class="mr-5" width="100" :src="item.T_value" />
+              <n-upload
+                list-type="image-card"
+                @change="(options) => handleChangeByIndex(options, index)"
+                :default-upload="false"
+                :max="1"
+                v-if="item.T_label === 10"
+              >
+                点击上传
+              </n-upload>
+              <n-space v-else>
+                <n-button @click="() => handleEdit(item)">编辑</n-button>
+                <n-button @click="() => handleRefresh(index)">刷新</n-button>
+              </n-space>
+            </template>
+            <template v-else>
+              <n-input v-model:value="item.T_value" />
+            </template>
             <n-popover trigger="hover">
               <template #trigger>
                 <n-icon size="24" class="ml-3">
                   <InformationCircleOutline />
                 </n-icon>
               </template>
-              <n-image width="200" :src="item.T_text" />
+              <n-image
+                width="200"
+                :src="item.T_text"
+                v-if="item.T_label === 10 || item.T_label === 11"
+              />
+              <span v-else>{{ item.T_text }}</span>
             </n-popover>
-          </n-form-item>
-        </template>
+          </n-form-item-gi>
+        </n-grid>
       </n-form>
     </n-scrollbar>
   </div>
@@ -204,7 +130,7 @@
         <n-list class="bg-transparent">
           <n-list-item :key="index" v-for="(item, index) of items">
             <template #prefix>
-              {{ index }}
+              {{ items.length - index }}
             </template>
             {{ item }}
           </n-list-item>
@@ -255,7 +181,7 @@ const task = window.sessionStorage.getItem('task')
 // 表单对象
 const formValue = reactive({
   pdf: '',
-  templateList: [],
+  formList: [],
 });
 
 // 查询数据
@@ -268,9 +194,6 @@ const queryData = reactive({
 //
 const classList = ref([]);
 
-//
-const templateList = ref([]);
-
 // 模态框数据源
 const modal = reactive({
   showModal: false,
@@ -279,9 +202,9 @@ const modal = reactive({
 
 // 刷新CAD
 const handleRefresh = (index) => {
-  templateList.value[
+  formValue.formList[
     index
-  ].T_value = `http://coldverifylocal.coldbaozhida.com/CAD/download?type=upload&filename=${queryData.T_task_id}_${queryData.T_VerifyTemplate_id}_${templateList.value[index].T_id}.png`;
+  ].T_value = `http://coldverifylocal.coldbaozhida.com/CAD/download?type=upload&filename=${queryData.T_task_id}_${queryData.T_VerifyTemplate_id}_${formValue.formList[index].T_id}.png`;
 };
 
 // CAD编辑
@@ -311,7 +234,7 @@ const handleChangeByIndex = async ({ file }, i) => {
       message.error('上传失败');
     },
     complete: (res) => {
-      templateList.value[i].T_value = res.key;
+      formValue.formList[i].T_value = res.key;
     },
   });
 };
@@ -351,10 +274,10 @@ const handleChange = async ({ file }) => {
  * @param i
  */
 const handleSelectAll = (i) => {
-  if (templateList.value[i].T_value.length !== 0) {
-    return (templateList.value[i].T_value = []);
+  if (formValue.formList[i].T_value.length !== 0) {
+    return (formValue.formList[i].T_value = []);
   }
-  templateList.value[i].T_value = classList.value.map((item) => item.T_sn);
+  formValue.formList[i].T_value = classList.value.map((item) => item.T_sn);
 };
 
 /**
@@ -363,8 +286,8 @@ const handleSelectAll = (i) => {
  */
 const handleSelectReverse = (i) => {
   const arr = classList.value.map((item) => item.T_sn);
-  templateList.value[i].T_value = arr.filter(
-    (item) => !templateList.value[i].T_value.includes(item)
+  formValue.formList[i].T_value = arr.filter(
+    (item) => !formValue.formList[i].T_value.includes(item)
   );
 };
 
@@ -410,7 +333,9 @@ let timer = 0;
 const keyInfo = ref({});
 const items = computed(() => {
   return keyInfo.value.Item
-    ? keyInfo.value.Item.split('\n').filter((item) => item)
+    ? keyInfo.value.Item.split('\n')
+        .filter((item) => item)
+        .reverse()
     : [];
 });
 // 验证报告生成 获取生成结果
@@ -418,7 +343,6 @@ const generateKeyInfo = async (key) => {
   const { data: res } = await generateKey({
     key,
   });
-  keyInfo.value = res;
   if (res.Code === 600) {
     timer = setTimeout(() => {
       generateKeyInfo(key);
@@ -426,6 +350,7 @@ const generateKeyInfo = async (key) => {
   } else {
     clearTimeout(timer);
   }
+  keyInfo.value = res;
 };
 
 // 关闭对话框时触发
@@ -446,8 +371,8 @@ const handleDownload = () => {
  */
 const putTemplateData = async () => {
   try {
-    const arr = toRaw(templateList.value);
-    const VerifyTemplateMapData = templateList.value.map((item) => {
+    const arr = toRaw(formValue.formList);
+    const VerifyTemplateMapData = formValue.formList.map((item) => {
       if (item.T_label === 3 || item.T_label === 9) {
         return {
           T_VerifyTemplateMap_id: item.T_VerifyTemplateMap_id,
@@ -516,8 +441,8 @@ const getClassList = async () => {
 const getTemplateList = async () => {
   try {
     const { data: res } = await getVerifyTemplateMapDataList(queryData);
-    templateList.value = res.Data;
-    templateList.value.forEach((item) => {
+    formValue.formList = res.Data;
+    formValue.formList.forEach((item) => {
       if (item.T_label === 3 || item.T_label === 9) {
         item.T_value = item.T_value ? item.T_value.split('|') : null;
       } else {

+ 10 - 10
vite.config.js

@@ -8,16 +8,16 @@ import WindiCSS from 'vite-plugin-windicss';
 
 // https://vitejs.dev/config/
 export default defineConfig({
-  // server: {
-  //   cors: true,
-  //   proxy: {
-  //     '/api': {
-  //       target: 'http://coldverifylocal.coldbaozhida.com',
-  //       changeOrigin: true,
-  //       rewrite: (path) => path.replace(/^\/api/, ''),
-  //     },
-  //   },
-  // },
+  server: {
+    cors: true,
+    proxy: {
+      '/api': {
+        target: 'http://coldverifylocal.coldbaozhida.com',
+        changeOrigin: true,
+        rewrite: (path) => path.replace(/^\/api/, ''),
+      },
+    },
+  },
   base: './',
   resolve: {
     alias: {