|
@@ -5,12 +5,10 @@
|
|
<n-breadcrumb-item>任务管理</n-breadcrumb-item>
|
|
<n-breadcrumb-item>任务管理</n-breadcrumb-item>
|
|
<n-breadcrumb-item>实施方案</n-breadcrumb-item>
|
|
<n-breadcrumb-item>实施方案</n-breadcrumb-item>
|
|
</n-breadcrumb>
|
|
</n-breadcrumb>
|
|
- <n-button type="primary" @click="handleClick">生成报告</n-button>
|
|
|
|
|
|
+ <n-button type="primary" @click="showPutModal">生成方案</n-button>
|
|
</n-space>
|
|
</n-space>
|
|
<n-scrollbar style="max-height: 700px">
|
|
<n-scrollbar style="max-height: 700px">
|
|
<n-form
|
|
<n-form
|
|
- ref="formRef"
|
|
|
|
- :rules="rules"
|
|
|
|
label-placement="left"
|
|
label-placement="left"
|
|
label-width="auto"
|
|
label-width="auto"
|
|
style="width: 40%; margin: 0 auto"
|
|
style="width: 40%; margin: 0 auto"
|
|
@@ -20,6 +18,7 @@
|
|
:key="item.T_VerifyTemplateMap_id"
|
|
:key="item.T_VerifyTemplateMap_id"
|
|
>
|
|
>
|
|
<n-form-item
|
|
<n-form-item
|
|
|
|
+ required
|
|
:label="item.T_name"
|
|
:label="item.T_name"
|
|
:path="item.T_field"
|
|
:path="item.T_field"
|
|
v-if="item.T_label === 1"
|
|
v-if="item.T_label === 1"
|
|
@@ -35,6 +34,7 @@
|
|
</n-popover>
|
|
</n-popover>
|
|
</n-form-item>
|
|
</n-form-item>
|
|
<n-form-item
|
|
<n-form-item
|
|
|
|
+ required
|
|
:label="item.T_name"
|
|
:label="item.T_name"
|
|
:path="item.T_field"
|
|
:path="item.T_field"
|
|
v-else-if="item.T_label === 2"
|
|
v-else-if="item.T_label === 2"
|
|
@@ -54,27 +54,35 @@
|
|
</n-popover>
|
|
</n-popover>
|
|
</n-form-item>
|
|
</n-form-item>
|
|
<n-form-item
|
|
<n-form-item
|
|
|
|
+ required
|
|
:label="item.T_name"
|
|
:label="item.T_name"
|
|
:path="item.T_field"
|
|
:path="item.T_field"
|
|
v-else-if="item.T_label === 3"
|
|
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>
|
|
|
|
|
|
+ <!-- <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">
|
|
<n-popover trigger="hover">
|
|
<template #trigger>
|
|
<template #trigger>
|
|
<n-icon size="20" class="ml-3">
|
|
<n-icon size="20" class="ml-3">
|
|
@@ -85,11 +93,17 @@
|
|
</n-popover>
|
|
</n-popover>
|
|
</n-form-item>
|
|
</n-form-item>
|
|
<n-form-item
|
|
<n-form-item
|
|
|
|
+ required
|
|
:label="item.T_name"
|
|
:label="item.T_name"
|
|
:path="item.T_field"
|
|
:path="item.T_field"
|
|
v-else-if="item.T_label === 4"
|
|
v-else-if="item.T_label === 4"
|
|
>
|
|
>
|
|
- <n-select :options="options" />
|
|
|
|
|
|
+ <n-select
|
|
|
|
+ v-model:value="item.T_value"
|
|
|
|
+ :options="taskDataClassList"
|
|
|
|
+ label-field="T_sn"
|
|
|
|
+ value-field="T_id"
|
|
|
|
+ />
|
|
<n-popover trigger="hover">
|
|
<n-popover trigger="hover">
|
|
<template #trigger>
|
|
<template #trigger>
|
|
<n-icon size="20" class="ml-3">
|
|
<n-icon size="20" class="ml-3">
|
|
@@ -101,11 +115,13 @@
|
|
</n-form-item>
|
|
</n-form-item>
|
|
<n-divider v-else-if="item.T_label === 5" />
|
|
<n-divider v-else-if="item.T_label === 5" />
|
|
<n-form-item
|
|
<n-form-item
|
|
|
|
+ required
|
|
:label="item.T_name"
|
|
:label="item.T_name"
|
|
:path="item.T_field"
|
|
:path="item.T_field"
|
|
v-else-if="item.T_label === 7"
|
|
v-else-if="item.T_label === 7"
|
|
>
|
|
>
|
|
<n-date-picker
|
|
<n-date-picker
|
|
|
|
+ v-model:formatted-value="item.T_value"
|
|
value-format="yyyy-MM-dd HH:mm:ss"
|
|
value-format="yyyy-MM-dd HH:mm:ss"
|
|
type="datetime"
|
|
type="datetime"
|
|
clearable
|
|
clearable
|
|
@@ -121,11 +137,13 @@
|
|
</n-popover>
|
|
</n-popover>
|
|
</n-form-item>
|
|
</n-form-item>
|
|
<n-form-item
|
|
<n-form-item
|
|
|
|
+ required
|
|
:label="item.T_name"
|
|
:label="item.T_name"
|
|
:path="item.T_field"
|
|
:path="item.T_field"
|
|
v-else-if="item.T_label === 9"
|
|
v-else-if="item.T_label === 9"
|
|
>
|
|
>
|
|
<n-date-picker
|
|
<n-date-picker
|
|
|
|
+ v-model:formatted-value="item.T_value"
|
|
value-format="yyyy-MM-dd HH:mm:ss"
|
|
value-format="yyyy-MM-dd HH:mm:ss"
|
|
type="datetimerange"
|
|
type="datetimerange"
|
|
clearable
|
|
clearable
|
|
@@ -141,11 +159,17 @@
|
|
</n-popover>
|
|
</n-popover>
|
|
</n-form-item>
|
|
</n-form-item>
|
|
<n-form-item
|
|
<n-form-item
|
|
|
|
+ required
|
|
:label="item.T_name"
|
|
:label="item.T_name"
|
|
:path="item.T_field"
|
|
:path="item.T_field"
|
|
v-else-if="item.T_label === 10"
|
|
v-else-if="item.T_label === 10"
|
|
>
|
|
>
|
|
- <n-upload :default-upload="false" list-type="image-card" :max="1">
|
|
|
|
|
|
+ <n-upload
|
|
|
|
+ :default-upload="false"
|
|
|
|
+ v-model:file-list="item.T_value"
|
|
|
|
+ list-type="image-card"
|
|
|
|
+ :max="1"
|
|
|
|
+ >
|
|
点击上传
|
|
点击上传
|
|
</n-upload>
|
|
</n-upload>
|
|
<n-popover trigger="hover">
|
|
<n-popover trigger="hover">
|
|
@@ -158,11 +182,17 @@
|
|
</n-popover>
|
|
</n-popover>
|
|
</n-form-item>
|
|
</n-form-item>
|
|
<n-form-item
|
|
<n-form-item
|
|
|
|
+ required
|
|
:label="item.T_name"
|
|
:label="item.T_name"
|
|
:path="item.T_field"
|
|
:path="item.T_field"
|
|
v-else-if="item.T_label === 11"
|
|
v-else-if="item.T_label === 11"
|
|
>
|
|
>
|
|
- <n-upload :default-upload="false" list-type="image-card" :max="1">
|
|
|
|
|
|
+ <n-upload
|
|
|
|
+ :default-upload="false"
|
|
|
|
+ v-model:file-list="item.T_value"
|
|
|
|
+ list-type="image-card"
|
|
|
|
+ :max="1"
|
|
|
|
+ >
|
|
点击上传
|
|
点击上传
|
|
</n-upload>
|
|
</n-upload>
|
|
<n-popover trigger="hover">
|
|
<n-popover trigger="hover">
|
|
@@ -179,61 +209,56 @@
|
|
</n-scrollbar>
|
|
</n-scrollbar>
|
|
</n-space>
|
|
</n-space>
|
|
<n-modal
|
|
<n-modal
|
|
- :show-icon="false"
|
|
|
|
v-model:show="modal.showModal"
|
|
v-model:show="modal.showModal"
|
|
preset="dialog"
|
|
preset="dialog"
|
|
- :title="modal.title"
|
|
|
|
- positive-text="提交"
|
|
|
|
|
|
+ title="生成方案"
|
|
|
|
+ content="确定生成报告?"
|
|
|
|
+ positive-text="确认"
|
|
negative-text="取消"
|
|
negative-text="取消"
|
|
- @positive-click="submitCallback"
|
|
|
|
- >
|
|
|
|
- 123
|
|
|
|
- </n-modal>
|
|
|
|
|
|
+ @positive-click="putTemplateMapData"
|
|
|
|
+ />
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
<script setup>
|
|
-import { h } from "vue";
|
|
|
|
-import { getTaskDataClassData, getVerifyTemplateMapData } from "@/api";
|
|
|
|
|
|
+import {
|
|
|
|
+ getTaskDataClassData,
|
|
|
|
+ getVerifyTemplateMapData,
|
|
|
|
+ getUpFileTokenData,
|
|
|
|
+ putTemplateMapDataData,
|
|
|
|
+} from "@/api";
|
|
import { QuestionCircleOutlined } from "@vicons/antd";
|
|
import { QuestionCircleOutlined } from "@vicons/antd";
|
|
-import { NThing } from "naive-ui";
|
|
|
|
|
|
+import * as qiniu from "qiniu-js";
|
|
|
|
|
|
-const renderLabel = () => {
|
|
|
|
- return h(
|
|
|
|
- NThing,
|
|
|
|
- {},
|
|
|
|
- {
|
|
|
|
- avatar: () => "avatar",
|
|
|
|
- header: () => "title",
|
|
|
|
- description: () => "description",
|
|
|
|
- }
|
|
|
|
- );
|
|
|
|
-};
|
|
|
|
|
|
+const message = useMessage();
|
|
|
|
+
|
|
|
|
+const task = window.sessionStorage.getItem("task")
|
|
|
|
+ ? JSON.parse(window.sessionStorage.getItem("task"))
|
|
|
|
+ : {};
|
|
|
|
|
|
-const props = defineProps({
|
|
|
|
- taskId: String,
|
|
|
|
|
|
+// 查询数据
|
|
|
|
+const queryData = reactive({
|
|
|
|
+ T_source: 1,
|
|
|
|
+ T_task_id: task.T_task_id,
|
|
|
|
+ T_VerifyTemplate_id: task.T_VerifyTemplate_id,
|
|
});
|
|
});
|
|
|
|
|
|
|
|
+// const renderLabel = () => {
|
|
|
|
+// return h(
|
|
|
|
+// NThing,
|
|
|
|
+// {},
|
|
|
|
+// {
|
|
|
|
+// avatar: () => "avatar",
|
|
|
|
+// header: () => "title",
|
|
|
|
+// description: () => "description",
|
|
|
|
+// }
|
|
|
|
+// );
|
|
|
|
+// };
|
|
|
|
+
|
|
// 模板标签数据列表
|
|
// 模板标签数据列表
|
|
const templateDataList = ref([]);
|
|
const templateDataList = ref([]);
|
|
|
|
|
|
// 设备列表
|
|
// 设备列表
|
|
-const TaskDataClassList = ref([]);
|
|
|
|
-
|
|
|
|
-// 配置选项内容
|
|
|
|
-const options = [
|
|
|
|
- {
|
|
|
|
- label: "Everybody's Got Something to Hide Except Me and My Monkey",
|
|
|
|
- value: "song0",
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- label: "Drive My Car",
|
|
|
|
- value: "song1",
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- label: "Norwegian Wood",
|
|
|
|
- value: "song2",
|
|
|
|
- },
|
|
|
|
-];
|
|
|
|
|
|
+const taskDataClassList = ref([]);
|
|
|
|
|
|
// 模态框数据源
|
|
// 模态框数据源
|
|
const modal = reactive({
|
|
const modal = reactive({
|
|
@@ -241,42 +266,90 @@ const modal = reactive({
|
|
showModal: false,
|
|
showModal: false,
|
|
});
|
|
});
|
|
|
|
|
|
-// 验证表项的规则
|
|
|
|
-const rules = {
|
|
|
|
- T_name: { required: true, message: "不能为空", trigger: "blur" },
|
|
|
|
- time: { required: true, message: "不能为空", trigger: ["blur", "change"] },
|
|
|
|
- extent: { required: true, message: "不能为空", trigger: ["blur", "change"] },
|
|
|
|
|
|
+// 获取七牛云上传文件token
|
|
|
|
+const getUpFileToken = async (T_suffix) => {
|
|
|
|
+ const { data: res } = await getUpFileTokenData({
|
|
|
|
+ T_suffix,
|
|
|
|
+ });
|
|
|
|
+ return res.Data;
|
|
};
|
|
};
|
|
|
|
|
|
-const handleClick = () => {
|
|
|
|
- console.log(templateDataList.value);
|
|
|
|
|
|
+// 模板标签数据添加或更新
|
|
|
|
+const putTemplateMapData = async () => {
|
|
|
|
+ const arr = templateDataList.value.filter((item) => item.T_label !== 5);
|
|
|
|
+ const VerifyTemplateMapData = arr.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 { data: res } = await putTemplateMapDataData({
|
|
|
|
+ T_source: queryData.T_source,
|
|
|
|
+ T_task_id: queryData.T_task_id,
|
|
|
|
+ T_VerifyTemplate_id: queryData.T_VerifyTemplate_id,
|
|
|
|
+ VerifyTemplateMapData,
|
|
|
|
+ });
|
|
|
|
+ console.log(res);
|
|
};
|
|
};
|
|
|
|
|
|
-// 执行 positive 时执行的回调函数
|
|
|
|
-const submitCallback = () => {
|
|
|
|
- if (modal.title === "添加") {
|
|
|
|
- console.log("add");
|
|
|
|
- } else {
|
|
|
|
- console.log("edit");
|
|
|
|
|
|
+const showPutModal = async () => {
|
|
|
|
+ modal.showModal = true;
|
|
|
|
+ const arr = templateDataList.value;
|
|
|
|
+ for (const item of arr) {
|
|
|
|
+ const index = arr.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) => {
|
|
|
|
+ arr[index].T_value = res.key;
|
|
|
|
+ },
|
|
|
|
+ });
|
|
|
|
+ }
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
// 模板标签数据(列表)
|
|
// 模板标签数据(列表)
|
|
const getVerifyTemplateMapDataList = async () => {
|
|
const getVerifyTemplateMapDataList = async () => {
|
|
- const { data: res } = await getVerifyTemplateMapData({
|
|
|
|
- T_source: 1,
|
|
|
|
- T_task_id: props.taskId,
|
|
|
|
- T_VerifyTemplate_id: "rtxF",
|
|
|
|
- });
|
|
|
|
|
|
+ const { data: res } = await getVerifyTemplateMapData(queryData);
|
|
templateDataList.value = res.Data;
|
|
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 getTaskDataClassList = async () => {
|
|
const getTaskDataClassList = async () => {
|
|
const { data: res } = await getTaskDataClassData({
|
|
const { data: res } = await getTaskDataClassData({
|
|
- T_task_id: props.taskId,
|
|
|
|
|
|
+ T_task_id: queryData.T_task_id,
|
|
});
|
|
});
|
|
- TaskDataClassList.value = res.Data ? res.Data : [];
|
|
|
|
|
|
+ taskDataClassList.value = res.Data ? res.Data : [];
|
|
};
|
|
};
|
|
|
|
|
|
getTaskDataClassList();
|
|
getTaskDataClassList();
|