|
@@ -1,480 +0,0 @@
|
|
|
-<template>
|
|
|
- <n-space vertical>
|
|
|
- <n-space justify="space-between">
|
|
|
- <n-space>
|
|
|
- <n-button text style="font-size: 24px" @click="$router.back">
|
|
|
- <n-icon>
|
|
|
- <ArrowLeftOutlined />
|
|
|
- </n-icon>
|
|
|
- </n-button>
|
|
|
- <n-breadcrumb>
|
|
|
- <n-breadcrumb-item>任务管理</n-breadcrumb-item>
|
|
|
- <n-breadcrumb-item>实施方案</n-breadcrumb-item>
|
|
|
- </n-breadcrumb>
|
|
|
- </n-space>
|
|
|
- <n-space>
|
|
|
- <n-button type="primary" @click="showPutModal">生成方案</n-button>
|
|
|
- <n-button type="primary" @click="showUploadModal"
|
|
|
- >上传验证实施方案</n-button
|
|
|
- >
|
|
|
- </n-space>
|
|
|
- </n-space>
|
|
|
- <n-scrollbar style="max-height: 700px">
|
|
|
- <n-form
|
|
|
- label-placement="left"
|
|
|
- label-width="auto"
|
|
|
- style="width: 40%; margin: 0 auto"
|
|
|
- >
|
|
|
- <template
|
|
|
- v-for="item of templateDataList"
|
|
|
- :key="item.T_VerifyTemplateMap_id"
|
|
|
- >
|
|
|
- <n-form-item
|
|
|
- required
|
|
|
- :label="item.T_name"
|
|
|
- :path="item.T_field"
|
|
|
- v-if="item.T_label === 1"
|
|
|
- >
|
|
|
- <n-input v-model:value="item.T_value" />
|
|
|
- <n-popover trigger="hover">
|
|
|
- <template #trigger>
|
|
|
- <n-icon size="20" class="ml-3">
|
|
|
- <info-icon />
|
|
|
- </n-icon>
|
|
|
- </template>
|
|
|
- <n-image width="200" :src="item.T_text" />
|
|
|
- </n-popover>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item
|
|
|
- required
|
|
|
- :label="item.T_name"
|
|
|
- :path="item.T_field"
|
|
|
- v-else-if="item.T_label === 2"
|
|
|
- >
|
|
|
- <n-input v-model:value="item.T_value" />
|
|
|
- <n-popover trigger="hover">
|
|
|
- <template #trigger>
|
|
|
- <n-icon size="20" class="ml-3">
|
|
|
- <info-icon />
|
|
|
- </n-icon>
|
|
|
- </template>
|
|
|
- <n-image width="200" :src="item.T_text" />
|
|
|
- </n-popover>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item
|
|
|
- required
|
|
|
- :label="item.T_name"
|
|
|
- :path="item.T_field"
|
|
|
- v-else-if="item.T_label === 3"
|
|
|
- >
|
|
|
- <!-- <div class="w-full">-->
|
|
|
- <!-- <n-popselect-->
|
|
|
- <!-- multiple-->
|
|
|
- <!-- :options="options"-->
|
|
|
- <!-- :render-label="renderLabel"-->
|
|
|
- <!-- v-model:value="item.T_value"-->
|
|
|
- <!-- class="w-full"-->
|
|
|
- <!-- >-->
|
|
|
- <!-- <n-button block>-->
|
|
|
- <!-- {{-->
|
|
|
- <!-- Array.isArray(item.T_value) && item.T_value.length-->
|
|
|
- <!-- ? item.T_value.join(" | ")-->
|
|
|
- <!-- : "选择"-->
|
|
|
- <!-- }}-->
|
|
|
- <!-- </n-button>-->
|
|
|
- <!-- </n-popselect>-->
|
|
|
- <!-- </div>-->
|
|
|
- <n-select
|
|
|
- v-model:value="item.T_value"
|
|
|
- multiple
|
|
|
- label-field="T_sn"
|
|
|
- value-field="T_id"
|
|
|
- :options="taskDataClassList"
|
|
|
- />
|
|
|
- <n-popover trigger="hover">
|
|
|
- <template #trigger>
|
|
|
- <n-icon size="20" class="ml-3">
|
|
|
- <info-icon />
|
|
|
- </n-icon>
|
|
|
- </template>
|
|
|
- <n-image width="200" :src="item.T_text" />
|
|
|
- </n-popover>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item
|
|
|
- required
|
|
|
- :label="item.T_name"
|
|
|
- :path="item.T_field"
|
|
|
- v-else-if="item.T_label === 4"
|
|
|
- >
|
|
|
- <n-select
|
|
|
- v-model:value="item.T_value"
|
|
|
- :options="taskDataClassList"
|
|
|
- label-field="T_sn"
|
|
|
- value-field="T_id"
|
|
|
- />
|
|
|
- <n-popover trigger="hover">
|
|
|
- <template #trigger>
|
|
|
- <n-icon size="20" class="ml-3">
|
|
|
- <info-icon />
|
|
|
- </n-icon>
|
|
|
- </template>
|
|
|
- <n-image width="200" :src="item.T_text" />
|
|
|
- </n-popover>
|
|
|
- </n-form-item>
|
|
|
- <n-divider v-else-if="item.T_label === 5" />
|
|
|
- <n-form-item
|
|
|
- required
|
|
|
- :label="item.T_name"
|
|
|
- :path="item.T_field"
|
|
|
- v-else-if="item.T_label === 7"
|
|
|
- >
|
|
|
- <n-date-picker
|
|
|
- v-model:formatted-value="item.T_value"
|
|
|
- value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
- type="datetime"
|
|
|
- clearable
|
|
|
- class="w-full"
|
|
|
- />
|
|
|
- <n-popover trigger="hover">
|
|
|
- <template #trigger>
|
|
|
- <n-icon size="20" class="ml-3">
|
|
|
- <info-icon />
|
|
|
- </n-icon>
|
|
|
- </template>
|
|
|
- <n-image width="200" :src="item.T_text" />
|
|
|
- </n-popover>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item
|
|
|
- required
|
|
|
- :label="item.T_name"
|
|
|
- :path="item.T_field"
|
|
|
- v-else-if="item.T_label === 9"
|
|
|
- >
|
|
|
- <n-date-picker
|
|
|
- v-model:formatted-value="item.T_value"
|
|
|
- value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
- type="datetimerange"
|
|
|
- clearable
|
|
|
- class="w-full"
|
|
|
- />
|
|
|
- <n-popover trigger="hover">
|
|
|
- <template #trigger>
|
|
|
- <n-icon size="20" class="ml-3">
|
|
|
- <info-icon />
|
|
|
- </n-icon>
|
|
|
- </template>
|
|
|
- <n-image width="200" :src="item.T_text" />
|
|
|
- </n-popover>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item
|
|
|
- required
|
|
|
- :label="item.T_name"
|
|
|
- :path="item.T_field"
|
|
|
- v-else-if="item.T_label === 10"
|
|
|
- >
|
|
|
- <n-upload
|
|
|
- :default-upload="false"
|
|
|
- v-model:file-list="item.T_value"
|
|
|
- list-type="image-card"
|
|
|
- :max="1"
|
|
|
- >
|
|
|
- 点击上传
|
|
|
- </n-upload>
|
|
|
- <n-popover trigger="hover">
|
|
|
- <template #trigger>
|
|
|
- <n-icon size="20" class="ml-3">
|
|
|
- <info-icon />
|
|
|
- </n-icon>
|
|
|
- </template>
|
|
|
- <n-image width="200" :src="item.T_text" />
|
|
|
- </n-popover>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item
|
|
|
- required
|
|
|
- :label="item.T_name"
|
|
|
- :path="item.T_field"
|
|
|
- v-else-if="item.T_label === 11"
|
|
|
- >
|
|
|
- <n-upload
|
|
|
- :default-upload="false"
|
|
|
- v-model:file-list="item.T_value"
|
|
|
- list-type="image-card"
|
|
|
- :max="1"
|
|
|
- >
|
|
|
- 点击上传
|
|
|
- </n-upload>
|
|
|
- <n-popover trigger="hover">
|
|
|
- <template #trigger>
|
|
|
- <n-icon size="20" class="ml-3">
|
|
|
- <info-icon />
|
|
|
- </n-icon>
|
|
|
- </template>
|
|
|
- <n-image width="200" :src="item.T_text" />
|
|
|
- </n-popover>
|
|
|
- </n-form-item>
|
|
|
- </template>
|
|
|
- </n-form>
|
|
|
- </n-scrollbar>
|
|
|
- </n-space>
|
|
|
- <n-modal
|
|
|
- :style="{ width: modal.width }"
|
|
|
- v-model:show="modal.showModal"
|
|
|
- :show-icon="modal.title === '生成方案'"
|
|
|
- preset="dialog"
|
|
|
- :title="modal.title"
|
|
|
- positive-text="确认"
|
|
|
- negative-text="取消"
|
|
|
- @positive-click="submitCallback"
|
|
|
- >
|
|
|
- <template v-if="modal.title === '生成方案'"> 确定生成报告? </template>
|
|
|
- <template v-else>
|
|
|
- <n-form
|
|
|
- ref="formRef"
|
|
|
- :model="formValue"
|
|
|
- :rules="rules"
|
|
|
- label-placement="top"
|
|
|
- >
|
|
|
- <n-grid :cols="12">
|
|
|
- <n-form-item-gi :span="12" label="是否公开" path="T_Show">
|
|
|
- <n-select
|
|
|
- v-model:value="formValue.T_Show"
|
|
|
- :options="generalOptions"
|
|
|
- />
|
|
|
- </n-form-item-gi>
|
|
|
- <n-form-item-gi :span="12" label="实施方案" path="T_pdf1" required>
|
|
|
- <n-upload :default-upload="false" :max="1" @change="handleChange">
|
|
|
- <n-button>上传文件</n-button>
|
|
|
- </n-upload>
|
|
|
- </n-form-item-gi>
|
|
|
- </n-grid>
|
|
|
- </n-form>
|
|
|
- </template>
|
|
|
- </n-modal>
|
|
|
-</template>
|
|
|
-
|
|
|
-<script setup>
|
|
|
-import {
|
|
|
- getTaskDataClassList,
|
|
|
- getVerifyTemplateMapDataList,
|
|
|
- getUpFileToken,
|
|
|
- putVerifyTemplateMapData,
|
|
|
- editTask,
|
|
|
-} from "@/api";
|
|
|
-import {
|
|
|
- InfoCircleOutlined as InfoIcon,
|
|
|
- ArrowLeftOutlined,
|
|
|
-} from "@vicons/antd";
|
|
|
-import * as qiniu from "qiniu-js";
|
|
|
-import { getToken } from "@/utils/storage/sessionToken";
|
|
|
-import { useTaskStore } from "@/store/task";
|
|
|
-
|
|
|
-const message = useMessage();
|
|
|
-
|
|
|
-const taskStore = useTaskStore();
|
|
|
-
|
|
|
-// 查询数据
|
|
|
-const queryData = reactive({
|
|
|
- T_source: 1,
|
|
|
- T_task_id: taskStore.task.T_task_id,
|
|
|
- T_VerifyTemplate_id: taskStore.task.T_VerifyTemplate_id,
|
|
|
-});
|
|
|
-
|
|
|
-// 是否公开选项
|
|
|
-const generalOptions = ["隐藏", "公开"].map((v, i) => ({
|
|
|
- label: v,
|
|
|
- value: i,
|
|
|
-}));
|
|
|
-
|
|
|
-// const renderLabel = () => {
|
|
|
-// return h(
|
|
|
-// NThing,
|
|
|
-// {},
|
|
|
-// {
|
|
|
-// avatar: () => "avatar",
|
|
|
-// header: () => "title",
|
|
|
-// description: () => "description",
|
|
|
-// }
|
|
|
-// );
|
|
|
-// };
|
|
|
-
|
|
|
-// 获取表项中收集到的值的对象
|
|
|
-const formValue = reactive({
|
|
|
- T_Show: null,
|
|
|
- T_pdf1: null,
|
|
|
-});
|
|
|
-
|
|
|
-// 验证表项的规则
|
|
|
-const rules = {
|
|
|
- inputValue: {
|
|
|
- required: true,
|
|
|
- trigger: ["blur", "input"],
|
|
|
- message: "请输入 inputValue",
|
|
|
- },
|
|
|
-};
|
|
|
-
|
|
|
-// 模板标签数据列表
|
|
|
-const templateDataList = ref([]);
|
|
|
-
|
|
|
-// 设备列表
|
|
|
-const taskDataClassList = ref([]);
|
|
|
-
|
|
|
-// 上传数据
|
|
|
-let fileList = [];
|
|
|
-
|
|
|
-// 模态框数据源
|
|
|
-const modal = reactive({
|
|
|
- title: "",
|
|
|
- width: "",
|
|
|
- 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,
|
|
|
- {},
|
|
|
- {
|
|
|
- useCdnDomain: true,
|
|
|
- }
|
|
|
- );
|
|
|
- observable.subscribe({
|
|
|
- next: (result) => {
|
|
|
- // 主要用来展示进度
|
|
|
- console.warn(result);
|
|
|
- },
|
|
|
- error: () => {
|
|
|
- message.error("上传图片失败");
|
|
|
- },
|
|
|
- complete: (res) => {
|
|
|
- formValue.T_pdf1 = res.key;
|
|
|
- },
|
|
|
- });
|
|
|
-};
|
|
|
-
|
|
|
-// 执行 positive 时执行的回调函数
|
|
|
-const submitCallback = () => {
|
|
|
- if (modal.title === "生成方案") {
|
|
|
- putTemplateData();
|
|
|
- } else {
|
|
|
- editTaskInfo();
|
|
|
- }
|
|
|
-};
|
|
|
-
|
|
|
-// 获取七牛云上传文件token
|
|
|
-const getFileToken = async (T_suffix) => {
|
|
|
- const { data: res } = await getUpFileToken({
|
|
|
- T_suffix,
|
|
|
- });
|
|
|
- return res.Data;
|
|
|
-};
|
|
|
-
|
|
|
-// 显示上传验证实施方案
|
|
|
-const showUploadModal = () => {
|
|
|
- modal.title = "上传验证实施方案";
|
|
|
- modal.showModal = true;
|
|
|
- modal.width = "30%";
|
|
|
-};
|
|
|
-
|
|
|
-// 任务(编辑)
|
|
|
-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);
|
|
|
- }
|
|
|
-};
|
|
|
-
|
|
|
-// 显示生成方案
|
|
|
-const showPutModal = async () => {
|
|
|
- modal.title = "生成方案";
|
|
|
- modal.width = "";
|
|
|
- modal.showModal = true;
|
|
|
- fileList = toRaw(templateDataList.value);
|
|
|
- fileList = fileList.filter((item) => item.T_label !== 5);
|
|
|
- for (const item of fileList) {
|
|
|
- const index = fileList.indexOf(item);
|
|
|
- if (item.T_label === 10 || item.T_label === 11) {
|
|
|
- const token = await getUpFileToken(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) => {
|
|
|
- fileList[index].T_value = res.key;
|
|
|
- },
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
-};
|
|
|
-
|
|
|
-// 模板标签数据添加或更新
|
|
|
-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,
|
|
|
- });
|
|
|
- console.log(res);
|
|
|
-};
|
|
|
-
|
|
|
-// 模板标签数据(列表)
|
|
|
-const getDataList = async () => {
|
|
|
- const { data: res } = await getVerifyTemplateMapDataList(queryData);
|
|
|
- templateDataList.value = res.Data;
|
|
|
- templateDataList.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 getTaskClassList = async () => {
|
|
|
- const { data: res } = await getTaskDataClassList({
|
|
|
- T_task_id: queryData.T_task_id,
|
|
|
- });
|
|
|
- taskDataClassList.value = res.Data ? res.Data : [];
|
|
|
-};
|
|
|
-
|
|
|
-getTaskClassList();
|
|
|
-getDataList();
|
|
|
-</script>
|
|
|
-
|
|
|
-<style scoped></style>
|