|
@@ -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>
|