Browse Source

feat: update

Hu Cheng 2 years ago
parent
commit
742009ddd3

+ 9 - 4
src/views/data/edit/ImportPlatform.vue

@@ -79,6 +79,7 @@
 
 <script setup>
 import { getV3DataList, addTaskData } from "@/api";
+import { message } from "@/plugins/naive-ui";
 
 const props = defineProps({
   task: {
@@ -113,9 +114,11 @@ const showImportModal = () => {
 
 //
 const handleImport = () => {
-  data.value.Data.forEach((item) => {
-    addTask(item);
-  });
+  if (data.value.Data) {
+    data.value.Data.forEach((item) => {
+      addTask(item);
+    });
+  }
 };
 
 const addTask = async (item) => {
@@ -127,7 +130,9 @@ const addTask = async (item) => {
     T_rh: item.T_rh,
     T_time: item.T_time,
   });
-  console.log(res);
+  if (res.Code === 200) {
+    message.success(res.Msg);
+  }
 };
 
 //

+ 18 - 10
src/views/data/edit/SetVue.vue

@@ -5,38 +5,46 @@
     :show-icon="false"
     preset="dialog"
     title="温湿度上下限设置"
+    positive-text="确定"
+    negative-text="取消"
+    @positive-click="submitCallback"
   >
     <n-form :model="formValue" label-width="auto" show-require-mark>
       <n-divider title-placement="center"> 温度 </n-divider>
       <n-form-item label="上限" path="value">
-        <n-input v-model:value="formValue.value" />
+        <n-input v-model:value="formValue.tTop" />
       </n-form-item>
       <n-form-item label="下限" path="value">
-        <n-input v-model:value="formValue.value" />
+        <n-input v-model:value="formValue.tBottom" />
       </n-form-item>
       <n-divider title-placement="center"> 湿度 </n-divider>
       <n-form-item label="上限" path="value">
-        <n-input v-model:value="formValue.value" />
+        <n-input v-model:value="formValue.hTop" />
       </n-form-item>
       <n-form-item label="下限" path="value">
-        <n-input v-model:value="formValue.value" />
+        <n-input v-model:value="formValue.hBottom" />
       </n-form-item>
-      <div class="flex justify-end">
-        <n-button type="primary">确定</n-button>
-      </div>
     </n-form>
   </n-modal>
 </template>
 
 <script setup>
+const emit = defineEmits(["submit"]);
+
+//
+const submitCallback = () => {
+  emit("submit", formValue);
+};
+
 // 是否展示 Modal
 const showModal = ref(false);
 
 // 表单数据
 const formValue = reactive({
-  value: null,
-  datetimeValue: null,
-  selectValue: null,
+  tTop: null,
+  tBottom: null,
+  hTop: null,
+  hBottom: null,
 });
 
 // 显示设置

+ 85 - 75
src/views/data/edit/TemplateForm.vue

@@ -1,65 +1,81 @@
 <template>
-  <n-scrollbar x-scrollable trigger="none">
-    <div class="flex items-center gap-x-3 mb-5" style="min-width: 2000px">
-      <template v-for="item of templateDataList" :key="item.T_label">
-        <n-space :wrap="false" align="center" v-if="item.T_label === 101">
-          <span>{{ item.T_name }}</span>
+  <n-scrollbar x-scrollable class="pb-3">
+    <div class="flex items-center gap-x-3 w-[2000px]">
+      <template v-for="item of templateList" :key="item.T_VerifyTemplateMap_id">
+        <n-form-item
+          label-width="auto"
+          label-placement="left"
+          :show-feedback="false"
+          :label="item.T_text"
+          v-if="item.T_label === 101"
+        >
           <n-date-picker
             v-model:formatted-value="item.T_value"
             value-format="yyyy-MM-dd HH:mm:ss"
             type="datetime"
             clearable
-            class="w-[300px]"
           />
-        </n-space>
-        <n-space :wrap="false" align="center" v-else-if="item.T_label === 102">
-          <span>{{ item.T_name }}</span>
+        </n-form-item>
+        <n-form-item
+          label-width="auto"
+          label-placement="left"
+          :show-feedback="false"
+          :label="item.T_text"
+          v-else-if="item.T_label === 102"
+        >
           <n-date-picker
             v-model:formatted-value="item.T_value"
             value-format="yyyy-MM-dd HH:mm:ss"
             type="datetimerange"
             clearable
-            class="w-[300px]"
           />
-        </n-space>
-        <n-space :wrap="false" align="center" v-else-if="item.T_label === 103">
-          <span>{{ item.T_name }}</span>
+        </n-form-item>
+        <n-form-item
+          label-width="auto"
+          label-placement="left"
+          :show-feedback="false"
+          :label="item.T_text"
+          v-else-if="item.T_label === 103"
+        >
           <n-select
             v-model:value="item.T_value"
-            :options="options"
+            :options="classList"
             style="width: 300px"
           />
-        </n-space>
-        <n-space :wrap="false" align="center" v-else-if="item.T_label === 104">
-          <span>{{ item.T_name }}</span>
+        </n-form-item>
+        <n-form-item
+          label-width="auto"
+          label-placement="left"
+          :show-feedback="false"
+          :label="item.T_text"
+          v-else-if="item.T_label === 104"
+        >
           <n-popselect
+            scrollable
             multiple
-            :options="options"
-            :render-label="renderLabel"
+            :options="classList"
             v-model:value="item.T_value"
-            style="width: 300px"
           >
-            <n-button>
-              {{
-                Array.isArray(item.T_value) && item.T_value.length
-                  ? item.T_value.join(" | ")
-                  : "选择"
-              }}
-            </n-button>
+            <div class="overflow-x-auto">
+              <n-button>
+                {{
+                  Array.isArray(item.T_value) && item.T_value.length
+                    ? item.T_value.join(" | ")
+                    : "选择"
+                }}
+              </n-button>
+            </div>
           </n-popselect>
-        </n-space>
+        </n-form-item>
       </template>
-      <n-button type="primary" @click="handleCreate">生成方案</n-button>
+      <n-button type="primary" @click="showCreateDialog">生成报告</n-button>
     </div>
   </n-scrollbar>
 </template>
 
 <script setup>
 import { getVerifyTemplateMapDataList, putVerifyTemplateMapData } from "@/api";
-import { NThing } from "naive-ui";
 import { getToken } from "@/utils/storage/sessionToken";
-import { getFileToken } from "@/common";
-import * as qiniu from "qiniu-js";
 
 const message = useMessage();
 
@@ -70,38 +86,22 @@ const props = defineProps({
     required: true,
     default: {},
   },
+  classList: {
+    required: true,
+    default: [],
+  },
 });
 
 //
-let fileList = [];
-
-//
-const renderLabel = () => {
-  return h(
-    NThing,
-    {},
-    {
-      avatar: () => "avatar",
-      header: () => "title",
-      description: () => "description",
-    }
-  );
-};
-
-//
-const templateDataList = ref([]);
+const classList = computed(() => {
+  return props.classList.map((item) => ({
+    label: item.T_sn,
+    value: item.T_sn,
+  }));
+});
 
 //
-const options = [
-  {
-    label: "Everybody's Got Something to Hide Except Me and My Monkey",
-    value: "song0",
-  },
-  {
-    label: "Drive My Car",
-    value: "song1",
-  },
-];
+const templateList = ref([]);
 
 //
 const queryData = reactive({
@@ -110,9 +110,12 @@ const queryData = reactive({
   T_VerifyTemplate_id: props.task.T_VerifyTemplate_id,
 });
 
-// 显示生成方案
-const handleCreate = async () => {
-  fileList = toRaw(templateDataList.value);
+//
+let templateData = [];
+
+//
+const showCreateDialog = async () => {
+  templateData = toRaw(templateList.value);
   dialog.info({
     title: "提示",
     content: "确认生成报告?",
@@ -127,7 +130,7 @@ const handleCreate = async () => {
 // 模板标签数据添加或更新
 const putTemplateData = async () => {
   try {
-    const VerifyTemplateMapData = fileList.map((item) => {
+    const VerifyTemplateMapData = templateData.map((item) => {
       if (item.T_label === 102 || item.T_label === 104) {
         return {
           T_VerifyTemplateMap_id: item.T_VerifyTemplateMap_id,
@@ -155,19 +158,26 @@ const putTemplateData = async () => {
   }
 };
 
-//
-const getDataList = async () => {
-  const { data: res } = await getVerifyTemplateMapDataList(queryData);
-  templateDataList.value = res.Data;
-  templateDataList.value.forEach((item) => {
-    if (item.T_label === 104) {
-      item.T_value = [];
-    } else {
-      item.T_value = null;
-    }
-  });
+// 模板标签数据(列表)
+const getTemplateList = async () => {
+  try {
+    const { data: res } = await getVerifyTemplateMapDataList(queryData);
+    templateList.value = res.Data || [];
+    templateList.value.forEach((item) => {
+      if (item.T_label === 102) {
+        item.T_value = item.T_value ? item.T_value.split("|") : null;
+      } else if (item.T_label === 101) {
+        item.T_value = item.T_value ? item.T_value : null;
+      } else if (item.T_label === 104) {
+        item.T_value = item.T_value ? item.T_value.split("|") : [];
+      }
+    });
+  } catch (e) {
+    console.log(e);
+  }
 };
-getDataList();
+
+getTemplateList();
 </script>
 
 <style lang="scss" scoped></style>

+ 52 - 23
src/views/data/edit/index.vue

@@ -10,7 +10,7 @@
             <n-checkbox label="全选" @update:checked="handleCheckAll" />
           </template>
           <n-scrollbar
-            :style="{ maxHeight: `${height - 320}px` }"
+            :style="{ maxHeight: `${height - 350}px` }"
             trigger="none"
             @scroll="onScroll"
           >
@@ -43,7 +43,7 @@
       </n-card>
       <n-card class="h-full col-span-3">
         <div class="flex flex-col gap-y-3">
-          <n-space :wrap="false">
+          <n-space align="center">
             <n-date-picker
               v-model:formatted-value="queryData.Time_start"
               value-format="yyyy-MM-dd HH:mm:ss"
@@ -63,11 +63,11 @@
             <ImportVue :task="task" />
             <ImportPlatform :task="task" />
             <AddVue :class-list="classList" :task="task" />
-            <SetVue />
+            <SetVue @submit="handleSet" />
           </n-space>
-          <TemplateForm :task="task" />
+          <TemplateForm :task="task" :class-list="classList" />
           <n-scrollbar
-            :style="{ maxHeight: `${height - 320}px` }"
+            :style="{ maxHeight: `${height - 350}px` }"
             trigger="none"
           >
             <Chart
@@ -92,12 +92,12 @@
     preset="dialog"
   >
     <template v-if="modal.title === '温度'">
-      <n-form-item :rule="rule">
+      <n-form-item show-require-mark>
         <n-input v-model:value="formValue.T_t" />
       </n-form-item>
     </template>
     <template v-else>
-      <n-form-item :rule="rule">
+      <n-form-item show-require-mark>
         <n-input v-model:value="formValue.T_rh" />
       </n-form-item>
     </template>
@@ -148,14 +148,6 @@ const modal = reactive({
   title: "",
 });
 
-const rule = {
-  T_t: {
-    required: true,
-    trigger: "blur",
-    message: "不能为空",
-  },
-};
-
 // 查询数据
 const queryData = reactive({
   T_task_id: task.T_task_id,
@@ -195,6 +187,42 @@ const onScroll = (e) => {
   console.log(scrollHeight);
 };
 
+//
+const handleSet = (data) => {
+  chart1.value.chart.yAxis[0].addPlotLine({
+    color: "red",
+    width: 2,
+    value: data.tTop,
+    label: {
+      text: `上限(${data.tTop})`,
+    },
+  });
+  chart1.value.chart.yAxis[0].addPlotLine({
+    color: "red",
+    width: 2,
+    value: data.tBottom,
+    label: {
+      text: `下限(${data.tBottom})`,
+    },
+  });
+  chart2.value.chart.yAxis[0].addPlotLine({
+    color: "red",
+    width: 2,
+    value: data.hTop,
+    label: {
+      text: `上限(${data.hTop})`,
+    },
+  });
+  chart2.value.chart.yAxis[0].addPlotLine({
+    color: "red",
+    width: 2,
+    value: data.hBottom,
+    label: {
+      text: `下限(${data.hBottom})`,
+    },
+  });
+};
+
 // 全选
 const handleCheckAll = (checked) => {
   if (checked) {
@@ -321,9 +349,10 @@ const chartOptions1 = {
   },
 
   yAxis: {
-    labels: {
-      format: `{text}℃`,
-    },
+    // labels: {
+    //   format: `{text}℃`,
+    // },
+    plotLines: [],
   },
 
   legend: {
@@ -366,9 +395,9 @@ const chartOptions2 = {
   },
 
   yAxis: {
-    labels: {
-      format: `{text}%`,
-    },
+    // labels: {
+    //   format: `{text}%`,
+    // },
   },
 
   legend: {
@@ -449,7 +478,7 @@ const getDataList = async () => {
   }
   const { data: res } = await getTaskDataList(data);
   dataList.value = res.Data.List || [];
-  if (queryData.page_z < res.Page_size) {
+  if (queryData.page_z < res.Data.Page_size) {
     getDataList();
   }
 };
@@ -457,7 +486,7 @@ const getDataList = async () => {
 getClassList();
 
 notification.info({
-  content:
+  title:
     task.T_collection_state === 0
       ? "未完成"
       : task.T_collection_state === 1

+ 39 - 43
src/views/report/create/index.vue

@@ -4,10 +4,8 @@
       <template #title> 报告生成 </template>
       <template #extra>
         <n-space>
-          <n-button type="primary" @click="showCreateDialog">生成方案</n-button>
-          <n-button type="primary" @click="showUploadModal"
-          >上传验证实施方案</n-button
-          >
+          <n-button type="primary" @click="showCreateDialog">生成报告</n-button>
+          <n-button type="primary" @click="showUploadModal">上传验证</n-button>
         </n-space>
       </template>
     </n-page-header>
@@ -15,9 +13,8 @@
       label-placement="left"
       label-width="auto"
       size="large"
-      :show-feedback="false"
       show-require-mark
-      class="w-2/5 mx-auto flex-1 flex flex-col justify-between"
+      class="w-2/5 mx-auto"
     >
       <template
         v-for="(item, i) of templateList"
@@ -51,7 +48,6 @@
             multiple
             scrollable
             :options="classList"
-            :render-label="renderLabel"
             v-model:value="item.T_value"
           >
             <div class="overflow-x-auto">
@@ -66,10 +62,10 @@
             <template #action>
               <n-space>
                 <n-button class="underline" text @click="handleSelectAll(i)"
-                >全选</n-button
+                  >全选</n-button
                 >
                 <n-button class="underline" text @click="handleSelectReverse(i)"
-                >反选</n-button
+                  >反选</n-button
                 >
               </n-space>
             </template>
@@ -194,8 +190,6 @@ import * as qiniu from "qiniu-js";
 import { getToken } from "@/utils/storage/sessionToken";
 import { getFileToken } from "@/common";
 import { InformationCircleOutline } from "@vicons/ionicons5";
-import { NThing } from "naive-ui";
-import { h } from "vue";
 
 const message = useMessage();
 
@@ -227,17 +221,6 @@ const modal = reactive({
 });
 
 //
-const renderLabel = (option) => {
-  return h(
-    NThing,
-    {},
-    {
-      description: () => option.value,
-    }
-  );
-};
-
-//
 const handleChange = async (options) => {
   if (options.file.type.split("/")[1] === "pdf") {
     const token = await getFileToken(options.file.type.split("/")[1]);
@@ -256,7 +239,7 @@ const handleChange = async (options) => {
         console.warn(result);
       },
       error: () => {
-        message.error("上传图片失败");
+        message.error("上传失败");
       },
       complete: (res) => {
         pdf2.value = res.key;
@@ -266,23 +249,21 @@ const handleChange = async (options) => {
 };
 
 // 全选
-// const handleSelectAll = (i) => {
-//   formValue.VerifyTemplateMapData[i].T_value = classList.value.map(
-//     (item) => item.value
-//   );
-// };
+const handleSelectAll = (i) => {
+  templateList.value[i].T_value = classList.value.map((item) => item.value);
+};
 
 // 反选
-// const handleSelectReverse = (i) => {
-//   const arr = classList.value.map((item) => item.value);
-//   formValue.VerifyTemplateMapData[i].T_value = arr.filter(
-//     (item) => formValue.VerifyTemplateMapData[i].T_value.indexOf(item) === -1
-//   );
-// };
+const handleSelectReverse = (i) => {
+  const arr = classList.value.map((item) => item.value);
+  templateList.value[i].T_value = arr.filter(
+    (item) => !templateList.value[i].T_value.includes(item)
+  );
+};
 
 //
 const showUploadModal = () => {
-  modal.title = "上传验证实施方案";
+  modal.title = "上传验证";
   modal.showModal = true;
 };
 
@@ -291,7 +272,7 @@ const editTaskInfo = async () => {
   try {
     const { data: res } = await editTask({
       T_task_id: queryData.T_task_id,
-      T_pdf1: pdf2.value,
+      T_pdf2: pdf2.value,
     });
     if (res.Code === 200) {
       message.success(res.Msg);
@@ -326,17 +307,17 @@ const showCreateDialog = async () => {
             console.warn(result);
           },
           error: () => {
-            message.error("上传图片失败");
+            message.error("上传失败");
           },
           complete: (res) => {
             item.T_value = res.key;
           },
         });
       } else {
-        item.T_value = item.T_value[0].url;
+        item.T_value = Array.isArray(item.T_value)
+          ? item.T_value[0].url
+          : item.T_value;
       }
-    } else if (item.T_label === 3 || item.T_label === 9) {
-      item.T_value = item.T_value.join("|");
     }
   }
   dialog.info({
@@ -353,13 +334,26 @@ const showCreateDialog = async () => {
 //
 const putTemplateData = async () => {
   try {
+    const VerifyTemplateMapData = templateData.map((item) => {
+      if (item.T_label === 3 || item.T_label === 9) {
+        return {
+          T_VerifyTemplateMap_id: item.T_VerifyTemplateMap_id,
+          T_value: item.T_value.join("|"),
+        };
+      } else {
+        return {
+          T_VerifyTemplateMap_id: item.T_VerifyTemplateMap_id,
+          T_value: item.T_value + "",
+        };
+      }
+    });
     const token = getToken();
     const { data: res } = await putVerifyTemplateMapData({
       User_tokey: token,
       T_source: queryData.T_source,
       T_task_id: queryData.T_task_id,
       T_VerifyTemplate_id: queryData.T_VerifyTemplate_id,
-      VerifyTemplateMapData: templateData,
+      VerifyTemplateMapData,
     });
     message.success(res.Msg);
   } catch (e) {
@@ -385,10 +379,12 @@ const getClassList = async () => {
 const getTemplateList = async () => {
   try {
     const { data: res } = await getVerifyTemplateMapDataList(queryData);
-    templateList.value = res.Data || [];
+    templateList.value = res.Data;
     templateList.value.forEach((item) => {
       if (item.T_label === 10 || item.T_label === 11) {
-        item.T_value = item.T_value ? [{ url: item.T_value, status: "finished" }] : [];
+        item.T_value = item.T_value
+          ? [{ url: item.T_value, status: "finished" }]
+          : [];
       } else if (item.T_label === 7) {
         item.T_value = item.T_value ? item.T_value : null;
       } else if (item.T_label === 9) {

+ 37 - 40
src/views/scheme/index.vue

@@ -4,10 +4,8 @@
       <template #title> 实施方案 </template>
       <template #extra>
         <n-space>
-          <n-button type="primary" @click="showCreateDialog">生成方案</n-button>
-          <n-button type="primary" @click="showUploadModal"
-            >上传验证实施方案</n-button
-          >
+          <n-button type="primary" @click="showCreateDialog">生成报告</n-button>
+          <n-button type="primary" @click="showUploadModal">上传验证</n-button>
         </n-space>
       </template>
     </n-page-header>
@@ -15,9 +13,8 @@
       label-placement="left"
       label-width="auto"
       size="large"
-      :show-feedback="false"
       show-require-mark
-      class="w-2/5 mx-auto flex-1 flex flex-col justify-between"
+      class="w-2/5 mx-auto"
     >
       <template
         v-for="(item, i) of templateList"
@@ -51,7 +48,6 @@
             multiple
             scrollable
             :options="classList"
-            :render-label="renderLabel"
             v-model:value="item.T_value"
           >
             <div class="overflow-x-auto">
@@ -194,8 +190,6 @@ import * as qiniu from "qiniu-js";
 import { getToken } from "@/utils/storage/sessionToken";
 import { getFileToken } from "@/common";
 import { InformationCircleOutline } from "@vicons/ionicons5";
-import { NThing } from "naive-ui";
-import { h } from "vue";
 
 const message = useMessage();
 
@@ -227,17 +221,6 @@ const modal = reactive({
 });
 
 //
-const renderLabel = (option) => {
-  return h(
-    NThing,
-    {},
-    {
-      description: () => option.value,
-    }
-  );
-};
-
-//
 const handleChange = async (options) => {
   if (options.file.type.split("/")[1] === "pdf") {
     const token = await getFileToken(options.file.type.split("/")[1]);
@@ -256,7 +239,7 @@ const handleChange = async (options) => {
         console.warn(result);
       },
       error: () => {
-        message.error("上传图片失败");
+        message.error("上传失败");
       },
       complete: (res) => {
         pdf1.value = res.key;
@@ -266,23 +249,21 @@ const handleChange = async (options) => {
 };
 
 // 全选
-// const handleSelectAll = (i) => {
-//   formValue.VerifyTemplateMapData[i].T_value = classList.value.map(
-//     (item) => item.value
-//   );
-// };
+const handleSelectAll = (i) => {
+  templateList.value[i].T_value = classList.value.map((item) => item.value);
+};
 
 // 反选
-// const handleSelectReverse = (i) => {
-//   const arr = classList.value.map((item) => item.value);
-//   formValue.VerifyTemplateMapData[i].T_value = arr.filter(
-//     (item) => formValue.VerifyTemplateMapData[i].T_value.indexOf(item) === -1
-//   );
-// };
+const handleSelectReverse = (i) => {
+  const arr = classList.value.map((item) => item.value);
+  templateList.value[i].T_value = arr.filter(
+    (item) => !templateList.value[i].T_value.includes(item)
+  );
+};
 
 //
 const showUploadModal = () => {
-  modal.title = "上传验证实施方案";
+  modal.title = "上传验证";
   modal.showModal = true;
 };
 
@@ -303,6 +284,7 @@ const editTaskInfo = async () => {
 
 //
 let templateData = ref([]);
+
 //
 const showCreateDialog = async () => {
   templateData = toRaw(templateList.value);
@@ -326,17 +308,17 @@ const showCreateDialog = async () => {
             console.warn(result);
           },
           error: () => {
-            message.error("上传图片失败");
+            message.error("上传失败");
           },
           complete: (res) => {
             item.T_value = res.key;
           },
         });
       } else {
-        item.T_value = item.T_value[0].url;
+        item.T_value = Array.isArray(item.T_value)
+          ? item.T_value[0].url
+          : item.T_value;
       }
-    } else if (item.T_label === 3 || item.T_label === 9) {
-      item.T_value = item.T_value.join("|");
     }
   }
   dialog.info({
@@ -353,13 +335,26 @@ const showCreateDialog = async () => {
 //
 const putTemplateData = async () => {
   try {
+    const VerifyTemplateMapData = templateData.map((item) => {
+      if (item.T_label === 3 || item.T_label === 9) {
+        return {
+          T_VerifyTemplateMap_id: item.T_VerifyTemplateMap_id,
+          T_value: item.T_value.join("|"),
+        };
+      } else {
+        return {
+          T_VerifyTemplateMap_id: item.T_VerifyTemplateMap_id,
+          T_value: item.T_value + "",
+        };
+      }
+    });
     const token = getToken();
     const { data: res } = await putVerifyTemplateMapData({
       User_tokey: token,
       T_source: queryData.T_source,
       T_task_id: queryData.T_task_id,
       T_VerifyTemplate_id: queryData.T_VerifyTemplate_id,
-      VerifyTemplateMapData: templateData,
+      VerifyTemplateMapData,
     });
     message.success(res.Msg);
   } catch (e) {
@@ -385,10 +380,12 @@ const getClassList = async () => {
 const getTemplateList = async () => {
   try {
     const { data: res } = await getVerifyTemplateMapDataList(queryData);
-    templateList.value = res.Data || [];
+    templateList.value = res.Data;
     templateList.value.forEach((item) => {
       if (item.T_label === 10 || item.T_label === 11) {
-        item.T_value = item.T_value ? [{ url: item.T_value, status: "finished" }] : [];
+        item.T_value = item.T_value
+          ? [{ url: item.T_value, status: "finished" }]
+          : [];
       } else if (item.T_label === 7) {
         item.T_value = item.T_value ? item.T_value : null;
       } else if (item.T_label === 9) {

+ 7 - 0
vite.config.js

@@ -10,6 +10,13 @@ import WindiCSS from "vite-plugin-windicss";
 export default defineConfig({
   server: {
     host: true,
+    proxy: {
+      "/Api": {
+        target: "https://cold.coldbaozhida.com/api",
+        changeOrigin: true,
+        rewrite: (path) => path.replace(/^\/Api/, ""),
+      },
+    },
   },
   base: "./",
   plugins: [