Browse Source

feat: update

Hu Cheng 2 years ago
parent
commit
22d56f204f

+ 18 - 3
src/views/certificate/index.vue

@@ -3,7 +3,7 @@
     <n-page-header @back="$router.back">
       <template #title> 校准证书 </template>
     </n-page-header>
-    <div class="flex-1 grid grid-cols-4 gap-x-3">
+    <div class="flex-1 grid grid-cols-[400px,1fr] gap-x-3">
       <n-card>
         <n-list class="h-full">
           <template #header>
@@ -19,7 +19,7 @@
             <template v-for="item of dataList" :key="item">
               <n-list-item>
                 <template #suffix>
-                  <n-popconfirm>
+                  <n-popconfirm @positive-click="handleDelete(item)">
                     <template #trigger>
                       <n-button type="error">删除</n-button>
                     </template>
@@ -40,7 +40,7 @@
           </n-scrollbar>
         </n-list>
       </n-card>
-      <n-card class="col-span-3">
+      <n-card>
         <div class="flex flex-col gap-y-3">
           <n-descriptions bordered>
             <n-descriptions-item label="报告名称">
@@ -142,6 +142,21 @@ const handleView = (row) => {
 };
 
 //
+const handleDelete = async (row) => {
+  const arr = dataList.value.filter((item) => item !== row);
+  try {
+    const { data: res } = await editTask({
+      T_task_id: task.T_task_id,
+      T_pdf3: arr.join("|"),
+    });
+    message.success(res.Msg);
+    getTaskInfo();
+  } catch (e) {
+    console.log(e);
+  }
+};
+
+//
 const handleChange = async ({ file }) => {
   const type = file.type.split("/")[1];
   const token = await getFileToken(type);

+ 7 - 0
src/views/data/edit/ExportVue.vue

@@ -18,6 +18,7 @@
           value-field="T_sn"
           :options="options"
           multiple
+          :max-tag-count="2"
           clearable
         >
         </n-select>
@@ -75,10 +76,16 @@ const formValue = reactive({
 // 显示导入
 const showImportModal = () => {
   showModal.value = true;
+  formValue.T_sn_list = [];
+  formValue.Time_start = null;
+  formValue.Time_end = null;
 };
 
 const exportTask = async () => {
   try {
+    if (formValue.T_sn_list.length === 0) {
+      formValue.T_sn_list = props.classList.map((item) => item.T_sn);
+    }
     const { data: res } = await exportTaskData({
       T_task_id: props.task.T_task_id,
       T_sn_list: formValue.T_sn_list.join(),

+ 28 - 19
src/views/data/edit/index.vue

@@ -43,25 +43,21 @@
       </n-card>
       <n-card class="h-full col-span-3">
         <div class="flex flex-col gap-y-3">
-          <n-space>
-            <n-space align="center">
-              <span>开始时间</span>
-              <n-date-picker
-                v-model:formatted-value="queryData.Time_start"
-                value-format="yyyy-MM-dd HH:mm:ss"
-                type="datetime"
-                clearable
-              />
-            </n-space>
-            <n-space align="center">
-              <span>结束时间</span>
-              <n-date-picker
-                v-model:formatted-value="queryData.Time_end"
-                value-format="yyyy-MM-dd HH:mm:ss"
-                type="datetime"
-                clearable
-              />
-            </n-space>
+          <n-space :wrap="false">
+            <n-date-picker
+              v-model:formatted-value="queryData.Time_start"
+              value-format="yyyy-MM-dd HH:mm:ss"
+              type="datetime"
+              clearable
+              placeholder="请选择开始时间"
+            />
+            <n-date-picker
+              v-model:formatted-value="queryData.Time_end"
+              value-format="yyyy-MM-dd HH:mm:ss"
+              type="datetime"
+              clearable
+              placeholder="请选择结束时间"
+            />
             <n-button type="primary" @click="getDataList">搜索</n-button>
             <ExportVue :task="task" :class-list="classList" />
             <ImportVue :task="task" />
@@ -133,6 +129,8 @@ import ExportVue from "./ExportVue.vue";
 import TemplateForm from "./TemplateForm.vue";
 import { useWindowSize } from "@vueuse/core";
 
+const notification = useNotification();
+
 const { height } = useWindowSize();
 
 const message = useMessage();
@@ -457,6 +455,17 @@ const getDataList = async () => {
 };
 
 getClassList();
+
+notification.info({
+  content:
+    task.T_collection_state === 0
+      ? "未完成"
+      : task.T_collection_state === 1
+      ? "已完成"
+      : "采集中",
+  duration: 2500,
+  keepAliveOnHover: true,
+});
 </script>
 
 <style lang="scss" scoped></style>

+ 1 - 1
src/views/data/source/index.vue

@@ -185,7 +185,7 @@ const getDataList = async () => {
       queryData.Time_end = null;
       showModal.value = true;
     } else {
-      taskList.value = res.Data.List || [];
+      taskList.value = res.Data.List;
     }
   } catch (e) {
     console.log(e);

+ 1 - 1
src/views/report/audit/index.vue

@@ -107,7 +107,7 @@ const getTaskInfo = async () => {
   const { data: res } = await getTask({
     T_task_id: task.T_task_id,
   });
-  taskInfo.value = res.Data;
+  taskInfo.value = res.Data || {};
 };
 
 getTaskInfo();

+ 183 - 145
src/views/report/create/index.vue

@@ -4,7 +4,7 @@
       <template #title> 报告生成 </template>
       <template #extra>
         <n-space>
-          <n-button type="primary" @click="handleCreate">生成方案</n-button>
+          <n-button type="primary" @click="showCreateDialog">生成方案</n-button>
           <n-button type="primary" @click="showUploadModal"
           >上传验证实施方案</n-button
           >
@@ -15,11 +15,14 @@
       label-placement="left"
       label-width="auto"
       size="large"
-      show-require-mark
       :show-feedback="false"
+      show-require-mark
       class="w-2/5 mx-auto flex-1 flex flex-col justify-between"
     >
-      <template v-for="item of dataList" :key="item.T_VerifyTemplateMap_id">
+      <template
+        v-for="(item, i) 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">
@@ -43,23 +46,34 @@
           </n-popover>
         </n-form-item>
         <n-form-item :label="item.T_name" v-else-if="item.T_label === 3">
-          <div class="w-full">
-            <n-popselect
-              multiple
-              :options="classList"
-              :render-label="renderLabel"
-              v-model:value="item.T_value"
-              class="w-full"
-            >
-              <n-button block>
+          <n-popselect
+            placement="top"
+            multiple
+            scrollable
+            :options="classList"
+            :render-label="renderLabel"
+            v-model:value="item.T_value"
+          >
+            <div class="overflow-x-auto">
+              <n-button>
                 {{
                   Array.isArray(item.T_value) && item.T_value.length
                     ? item.T_value.join(" | ")
                     : "选择"
                 }}
               </n-button>
-            </n-popselect>
-          </div>
+            </div>
+            <template #action>
+              <n-space>
+                <n-button class="underline" text @click="handleSelectAll(i)"
+                >全选</n-button
+                >
+                <n-button class="underline" text @click="handleSelectReverse(i)"
+                >反选</n-button
+                >
+              </n-space>
+            </template>
+          </n-popselect>
           <n-popover trigger="hover">
             <template #trigger>
               <n-icon size="24" class="ml-3">
@@ -163,28 +177,25 @@
     negative-text="取消"
     @positive-click="editTaskInfo"
   >
-    <n-form :model="formValue" label-width="auto" show-require-mark>
-      <n-form-item label="实施方案">
-        <n-upload :default-upload="false" :max="1" @change="handleChange">
-          <n-button> 上传文件 </n-button>
-        </n-upload>
-      </n-form-item>
-    </n-form>
+    <n-upload :default-upload="false" :max="1" @change="handleChange">
+      <n-button> 上传文件 </n-button>
+    </n-upload>
   </n-modal>
 </template>
 
 <script setup>
 import {
-  getTaskDataClassList,
-  getVerifyTemplateMapDataList,
   putVerifyTemplateMapData,
   editTask,
+  getTaskDataClassList,
+  getVerifyTemplateMapDataList,
 } from "@/api";
-import { InformationCircleOutline } from "@vicons/ionicons5";
 import * as qiniu from "qiniu-js";
 import { getToken } from "@/utils/storage/sessionToken";
-import { NThing } from "naive-ui";
 import { getFileToken } from "@/common";
+import { InformationCircleOutline } from "@vicons/ionicons5";
+import { NThing } from "naive-ui";
+import { h } from "vue";
 
 const message = useMessage();
 
@@ -194,6 +205,9 @@ const task = window.sessionStorage.getItem("task")
   ? JSON.parse(window.sessionStorage.getItem("task"))
   : {};
 
+// 获取表项中收集到的值的对象
+const pdf2 = ref("");
+
 // 查询数据
 const queryData = reactive({
   T_source: 1,
@@ -202,107 +216,127 @@ const queryData = reactive({
 });
 
 //
-const renderLabel = () => {
-  return h(
-    NThing,
-    {},
-    {
-      avatar: () => "avatar",
-      header: () => "title",
-      description: () => "description",
-    }
-  );
-};
-
-// 获取表项中收集到的值的对象
-const formValue = reactive({
-  T_pdf1: null,
-});
-
-// 模板标签数据列表
-const dataList = ref([]);
+const classList = ref([]);
 
 //
-let fileList = [];
-
-// 设备列表
-const classList = ref([]);
+const templateList = ref([]);
 
 // 模态框数据源
 const modal = reactive({
   showModal: false,
 });
 
-// 组件状态变化的回调
-const handleChange = async (options) => {
-  const token = await getFileToken(options.file.type.split("/")[1]);
-  const observable = qiniu.upload(
-    options.file.file,
-    options.file.name,
-    token,
+//
+const renderLabel = (option) => {
+  return h(
+    NThing,
     {},
     {
-      useCdnDomain: true,
+      description: () => option.value,
     }
   );
-  observable.subscribe({
-    next: (result) => {
-      // 主要用来展示进度
-      console.warn(result);
-    },
-    error: () => {
-      message.error("上传图片失败");
-    },
-    complete: (res) => {
-      formValue.T_pdf1 = res.key;
-    },
-  });
 };
 
-// 显示上传验证实施方案
+//
+const handleChange = async (options) => {
+  if (options.file.type.split("/")[1] === "pdf") {
+    const token = await getFileToken(options.file.type.split("/")[1]);
+    const observable = qiniu.upload(
+      options.file.file,
+      options.file.name,
+      token,
+      {},
+      {
+        useCdnDomain: true,
+      }
+    );
+    observable.subscribe({
+      next: (result) => {
+        // 主要用来展示进度
+        console.warn(result);
+      },
+      error: () => {
+        message.error("上传图片失败");
+      },
+      complete: (res) => {
+        pdf2.value = res.key;
+      },
+    });
+  }
+};
+
+// 全选
+// const handleSelectAll = (i) => {
+//   formValue.VerifyTemplateMapData[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 showUploadModal = () => {
   modal.title = "上传验证实施方案";
   modal.showModal = true;
 };
 
-// 任务(编辑)
+//
 const editTaskInfo = async () => {
-  const { data: res } = await editTask({
-    T_task_id: queryData.T_task_id,
-    T_pdf1: formValue.T_pdf1,
-  });
-  if (res.Code === 200) {
-    message.success(res.Msg);
+  try {
+    const { data: res } = await editTask({
+      T_task_id: queryData.T_task_id,
+      T_pdf1: pdf2.value,
+    });
+    if (res.Code === 200) {
+      message.success(res.Msg);
+    }
+  } catch (e) {
+    console.log(e);
   }
 };
 
-// 显示生成方案
-const handleCreate = async () => {
-  fileList = toRaw(dataList.value);
-  for (const item of fileList) {
+//
+let templateData = ref([]);
+//
+const showCreateDialog = async () => {
+  templateData = toRaw(templateList.value);
+  templateData = templateData.filter((item) => item.T_label !== 5);
+  for (const item of templateData) {
     if (item.T_label === 10 || item.T_label === 11) {
-      const token = await getFileToken(item.T_value[0].type.split("/")[1]);
-      const observable = qiniu.upload(
-        item.T_value[0].file,
-        item.T_value[0].name,
-        token,
-        {},
-        {
-          useCdnDomain: true,
-        }
-      );
-      observable.subscribe({
-        next: (result) => {
-          // 主要用来展示进度
-          console.warn(result);
-        },
-        error: () => {
-          message.error("上传图片失败");
-        },
-        complete: (res) => {
-          item.T_value = res.key;
-        },
-      });
+      if (item.T_value[0].type) {
+        const token = await getFileToken(item.T_value[0].type.split("/")[1]);
+        const observable = qiniu.upload(
+          item.T_value[0].file,
+          item.T_value[0].name,
+          token,
+          {},
+          {
+            useCdnDomain: true,
+          }
+        );
+        observable.subscribe({
+          next: (result) => {
+            // 主要用来展示进度
+            console.warn(result);
+          },
+          error: () => {
+            message.error("上传图片失败");
+          },
+          complete: (res) => {
+            item.T_value = res.key;
+          },
+        });
+      } else {
+        item.T_value = item.T_value[0].url;
+      }
+    } else if (item.T_label === 3 || item.T_label === 9) {
+      item.T_value = item.T_value.join("|");
     }
   }
   dialog.info({
@@ -316,56 +350,60 @@ const handleCreate = async () => {
   });
 };
 
-// 模板标签数据添加或更新
+//
 const putTemplateData = async () => {
-  const VerifyTemplateMapData = fileList.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,
-  });
-  message.success(res.Msg);
+  try {
+    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,
+    });
+    message.success(res.Msg);
+  } catch (e) {
+    console.log(e);
+  }
 };
 
-// 模板标签数据(列表)
-const getDataList = async () => {
-  const { data: res } = await getVerifyTemplateMapDataList(queryData);
-  dataList.value = res.Data;
-  dataList.value.forEach((item) => {
-    if (item.T_label === 10 || item.T_label === 11 || item.T_label === 3) {
-      item.T_value = [];
-    } else if (item.T_label === 7 || item.T_label === 9) {
-      item.T_value = null;
-    }
-  });
+// 获取设备列表
+const getClassList = async () => {
+  try {
+    const { data: res } = await getTaskDataClassList({
+      T_task_id: queryData.T_task_id,
+    });
+    classList.value = res.Data
+      ? res.Data.map((item) => ({ label: item.T_sn, value: item.T_sn }))
+      : [];
+  } catch (e) {
+    console.log(e);
+  }
 };
 
-// 获取设备列表
-const getTaskClassList = async () => {
-  const { data: res } = await getTaskDataClassList({
-    T_task_id: queryData.T_task_id,
-  });
-  classList.value = res.Data || [];
+// 模板标签数据(列表)
+const getTemplateList = async () => {
+  try {
+    const { data: res } = await getVerifyTemplateMapDataList(queryData);
+    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" }] : [];
+      } else if (item.T_label === 7) {
+        item.T_value = item.T_value ? item.T_value : null;
+      } else if (item.T_label === 9) {
+        item.T_value = item.T_value ? item.T_value.split("|") : null;
+      } else if (item.T_label === 3) {
+        item.T_value = item.T_value ? item.T_value.split("|") : [];
+      }
+    });
+  } catch (e) {
+    console.log(e);
+  }
 };
 
-getTaskClassList();
-getDataList();
+getClassList();
+getTemplateList();
 </script>
 
 <style scoped></style>

+ 152 - 130
src/views/scheme/index.vue

@@ -4,7 +4,7 @@
       <template #title> 实施方案 </template>
       <template #extra>
         <n-space>
-          <n-button type="primary" @click="handleCreate">生成方案</n-button>
+          <n-button type="primary" @click="showCreateDialog">生成方案</n-button>
           <n-button type="primary" @click="showUploadModal"
             >上传验证实施方案</n-button
           >
@@ -15,11 +15,14 @@
       label-placement="left"
       label-width="auto"
       size="large"
-      show-require-mark
       :show-feedback="false"
+      show-require-mark
       class="w-2/5 mx-auto flex-1 flex flex-col justify-between"
     >
-      <template v-for="item of dataList" :key="item.T_VerifyTemplateMap_id">
+      <template
+        v-for="(item, i) 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">
@@ -43,23 +46,34 @@
           </n-popover>
         </n-form-item>
         <n-form-item :label="item.T_name" v-else-if="item.T_label === 3">
-          <div class="w-full">
-            <n-popselect
-              multiple
-              :options="classList"
-              :render-label="renderLabel"
-              v-model:value="item.T_value"
-              class="w-full"
-            >
-              <n-button block>
+          <n-popselect
+            placement="top"
+            multiple
+            scrollable
+            :options="classList"
+            :render-label="renderLabel"
+            v-model:value="item.T_value"
+          >
+            <div class="overflow-x-auto">
+              <n-button>
                 {{
                   Array.isArray(item.T_value) && item.T_value.length
                     ? item.T_value.join(" | ")
                     : "选择"
                 }}
               </n-button>
-            </n-popselect>
-          </div>
+            </div>
+            <template #action>
+              <n-space>
+                <n-button class="underline" text @click="handleSelectAll(i)"
+                  >全选</n-button
+                >
+                <n-button class="underline" text @click="handleSelectReverse(i)"
+                  >反选</n-button
+                >
+              </n-space>
+            </template>
+          </n-popselect>
           <n-popover trigger="hover">
             <template #trigger>
               <n-icon size="24" class="ml-3">
@@ -163,28 +177,25 @@
     negative-text="取消"
     @positive-click="editTaskInfo"
   >
-    <n-form :model="formValue" label-width="auto" show-require-mark>
-      <n-form-item label="实施方案">
-        <n-upload :default-upload="false" :max="1" @change="handleChange">
-          <n-button> 上传文件 </n-button>
-        </n-upload>
-      </n-form-item>
-    </n-form>
+    <n-upload :default-upload="false" :max="1" @change="handleChange">
+      <n-button> 上传文件 </n-button>
+    </n-upload>
   </n-modal>
 </template>
 
 <script setup>
 import {
-  getTaskDataClassList,
-  getVerifyTemplateMapDataList,
   putVerifyTemplateMapData,
   editTask,
+  getTaskDataClassList,
+  getVerifyTemplateMapDataList,
 } from "@/api";
-import { InformationCircleOutline } from "@vicons/ionicons5";
 import * as qiniu from "qiniu-js";
 import { getToken } from "@/utils/storage/sessionToken";
-import { NThing } from "naive-ui";
 import { getFileToken } from "@/common";
+import { InformationCircleOutline } from "@vicons/ionicons5";
+import { NThing } from "naive-ui";
+import { h } from "vue";
 
 const message = useMessage();
 
@@ -194,6 +205,9 @@ const task = window.sessionStorage.getItem("task")
   ? JSON.parse(window.sessionStorage.getItem("task"))
   : {};
 
+// 获取表项中收集到的值的对象
+const pdf1 = ref("");
+
 // 查询数据
 const queryData = reactive({
   T_source: 1,
@@ -202,75 +216,82 @@ const queryData = reactive({
 });
 
 //
-const renderLabel = () => {
-  return h(
-    NThing,
-    {},
-    {
-      avatar: () => "avatar",
-      header: () => "title",
-      description: () => "description",
-    }
-  );
-};
-
-// 获取表项中收集到的值的对象
-const formValue = reactive({
-  T_pdf1: null,
-});
-
-// 模板标签数据列表
-const dataList = ref([]);
+const classList = ref([]);
 
 //
-let fileList = [];
-
-// 设备列表
-const classList = ref([]);
+const templateList = ref([]);
 
 // 模态框数据源
 const modal = reactive({
   showModal: false,
 });
 
-// 组件状态变化的回调
-const handleChange = async (options) => {
-  const token = await getFileToken(options.file.type.split("/")[1]);
-  const observable = qiniu.upload(
-    options.file.file,
-    options.file.name,
-    token,
+//
+const renderLabel = (option) => {
+  return h(
+    NThing,
     {},
     {
-      useCdnDomain: true,
+      description: () => option.value,
     }
   );
-  observable.subscribe({
-    next: (result) => {
-      // 主要用来展示进度
-      console.warn(result);
-    },
-    error: () => {
-      message.error("上传图片失败");
-    },
-    complete: (res) => {
-      formValue.T_pdf1 = res.key;
-    },
-  });
 };
 
-// 显示上传验证实施方案
+//
+const handleChange = async (options) => {
+  if (options.file.type.split("/")[1] === "pdf") {
+    const token = await getFileToken(options.file.type.split("/")[1]);
+    const observable = qiniu.upload(
+      options.file.file,
+      options.file.name,
+      token,
+      {},
+      {
+        useCdnDomain: true,
+      }
+    );
+    observable.subscribe({
+      next: (result) => {
+        // 主要用来展示进度
+        console.warn(result);
+      },
+      error: () => {
+        message.error("上传图片失败");
+      },
+      complete: (res) => {
+        pdf1.value = res.key;
+      },
+    });
+  }
+};
+
+// 全选
+// const handleSelectAll = (i) => {
+//   formValue.VerifyTemplateMapData[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 showUploadModal = () => {
   modal.title = "上传验证实施方案";
   modal.showModal = true;
 };
 
-// 任务(编辑)
+//
 const editTaskInfo = async () => {
   try {
     const { data: res } = await editTask({
       T_task_id: queryData.T_task_id,
-      T_pdf1: formValue.T_pdf1,
+      T_pdf1: pdf1.value,
     });
     if (res.Code === 200) {
       message.success(res.Msg);
@@ -280,33 +301,42 @@ const editTaskInfo = async () => {
   }
 };
 
-// 显示生成方案
-const handleCreate = async () => {
-  fileList = toRaw(dataList.value);
-  for (const item of fileList) {
+//
+let templateData = ref([]);
+//
+const showCreateDialog = async () => {
+  templateData = toRaw(templateList.value);
+  templateData = templateData.filter((item) => item.T_label !== 5);
+  for (const item of templateData) {
     if (item.T_label === 10 || item.T_label === 11) {
-      const token = await getFileToken(item.T_value[0].type.split("/")[1]);
-      const observable = qiniu.upload(
-        item.T_value[0].file,
-        item.T_value[0].name,
-        token,
-        {},
-        {
-          useCdnDomain: true,
-        }
-      );
-      observable.subscribe({
-        next: (result) => {
-          // 主要用来展示进度
-          console.warn(result);
-        },
-        error: () => {
-          message.error("上传图片失败");
-        },
-        complete: (res) => {
-          item.T_value = res.key;
-        },
-      });
+      if (item.T_value[0].type) {
+        const token = await getFileToken(item.T_value[0].type.split("/")[1]);
+        const observable = qiniu.upload(
+          item.T_value[0].file,
+          item.T_value[0].name,
+          token,
+          {},
+          {
+            useCdnDomain: true,
+          }
+        );
+        observable.subscribe({
+          next: (result) => {
+            // 主要用来展示进度
+            console.warn(result);
+          },
+          error: () => {
+            message.error("上传图片失败");
+          },
+          complete: (res) => {
+            item.T_value = res.key;
+          },
+        });
+      } else {
+        item.T_value = item.T_value[0].url;
+      }
+    } else if (item.T_label === 3 || item.T_label === 9) {
+      item.T_value = item.T_value.join("|");
     }
   }
   dialog.info({
@@ -320,30 +350,16 @@ const handleCreate = async () => {
   });
 };
 
-// 模板标签数据添加或更新
+//
 const putTemplateData = async () => {
   try {
-    const VerifyTemplateMapData = fileList.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,
+      VerifyTemplateMapData: templateData,
     });
     message.success(res.Msg);
   } catch (e) {
@@ -351,37 +367,43 @@ const putTemplateData = async () => {
   }
 };
 
-// 模板标签数据(列表)
-const getDataList = async () => {
+// 获取设备列表
+const getClassList = async () => {
   try {
-    const { data: res } = await getVerifyTemplateMapDataList(queryData);
-    dataList.value = res.Data || [];
-    dataList.value.forEach((item) => {
-      if (item.T_label === 10 || item.T_label === 11 || item.T_label === 3) {
-        item.T_value = [];
-      } else if (item.T_label === 7 || item.T_label === 9) {
-        item.T_value = null;
-      }
+    const { data: res } = await getTaskDataClassList({
+      T_task_id: queryData.T_task_id,
     });
+    classList.value = res.Data
+      ? res.Data.map((item) => ({ label: item.T_sn, value: item.T_sn }))
+      : [];
   } catch (e) {
     console.log(e);
   }
 };
 
-// 获取设备列表
-const getTaskClassList = async () => {
+// 模板标签数据(列表)
+const getTemplateList = async () => {
   try {
-    const { data: res } = await getTaskDataClassList({
-      T_task_id: queryData.T_task_id,
+    const { data: res } = await getVerifyTemplateMapDataList(queryData);
+    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" }] : [];
+      } else if (item.T_label === 7) {
+        item.T_value = item.T_value ? item.T_value : null;
+      } else if (item.T_label === 9) {
+        item.T_value = item.T_value ? item.T_value.split("|") : null;
+      } else if (item.T_label === 3) {
+        item.T_value = item.T_value ? item.T_value.split("|") : [];
+      }
     });
-    classList.value = res.Data || [];
   } catch (e) {
     console.log(e);
   }
 };
 
-getTaskClassList();
-getDataList();
+getClassList();
+getTemplateList();
 </script>
 
 <style scoped></style>

+ 3 - 3
vite.config.js

@@ -8,9 +8,9 @@ import WindiCSS from "vite-plugin-windicss";
 
 // https://vitejs.dev/config/
 export default defineConfig({
-  // server: {
-  //   host: true,
-  // },
+  server: {
+    host: true,
+  },
   base: "./",
   plugins: [
     vue(),