|
@@ -10,165 +10,91 @@
|
|
|
</template>
|
|
|
确认生成报告?
|
|
|
</n-popconfirm>
|
|
|
- <n-button type="primary" @click="showUploadModal">上传验证</n-button>
|
|
|
+ <n-button type="primary" @click="showUploadModal"
|
|
|
+ >上传验证报告</n-button
|
|
|
+ >
|
|
|
</n-space>
|
|
|
</template>
|
|
|
</n-page-header>
|
|
|
<n-scrollbar :style="{ maxHeight: `${height - 150}px` }" trigger="none">
|
|
|
- <n-form
|
|
|
- label-placement="left"
|
|
|
- label-width="auto"
|
|
|
- size="large"
|
|
|
- show-require-mark
|
|
|
- class="w-[800px] mx-auto"
|
|
|
- >
|
|
|
- <template
|
|
|
- v-for="(item, index) 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">
|
|
|
- <template #trigger>
|
|
|
- <n-icon size="24" class="ml-3">
|
|
|
- <InformationCircleOutline />
|
|
|
- </n-icon>
|
|
|
- </template>
|
|
|
- {{ item.T_text }}
|
|
|
- </n-popover>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item :label="item.T_name" v-else-if="item.T_label === 2">
|
|
|
- <n-input v-model:value="item.T_value" />
|
|
|
- <n-popover trigger="hover">
|
|
|
- <template #trigger>
|
|
|
- <n-icon size="24" class="ml-3">
|
|
|
- <InformationCircleOutline />
|
|
|
- </n-icon>
|
|
|
- </template>
|
|
|
- {{ item.T_text }}
|
|
|
- </n-popover>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item :label="item.T_name" v-else-if="item.T_label === 3">
|
|
|
- <n-select
|
|
|
- v-model:value="item.T_value"
|
|
|
- multiple
|
|
|
- label-field="T_id"
|
|
|
- value-field="T_sn"
|
|
|
- max-tag-count="responsive"
|
|
|
- :options="classList"
|
|
|
- >
|
|
|
- <template #action>
|
|
|
- <n-space>
|
|
|
- <n-button
|
|
|
- class="underline"
|
|
|
- text
|
|
|
- @click="handleSelectAll(index)"
|
|
|
- >全选</n-button
|
|
|
- >
|
|
|
- <n-button
|
|
|
- class="underline"
|
|
|
- text
|
|
|
- @click="handleSelectReverse(index)"
|
|
|
- >反选</n-button
|
|
|
- >
|
|
|
- </n-space>
|
|
|
- </template>
|
|
|
- </n-select>
|
|
|
- <n-popover trigger="hover">
|
|
|
- <template #trigger>
|
|
|
- <n-icon size="24" class="ml-3">
|
|
|
- <InformationCircleOutline />
|
|
|
- </n-icon>
|
|
|
- </template>
|
|
|
- {{ item.T_text }}
|
|
|
- </n-popover>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item :label="item.T_name" v-else-if="item.T_label === 4">
|
|
|
- <n-select
|
|
|
- label-field="T_id"
|
|
|
- value-field="T_sn"
|
|
|
- v-model:value="item.T_value"
|
|
|
- :options="classList"
|
|
|
- />
|
|
|
- <n-popover trigger="hover">
|
|
|
- <template #trigger>
|
|
|
- <n-icon size="24" class="ml-3">
|
|
|
- <InformationCircleOutline />
|
|
|
- </n-icon>
|
|
|
- </template>
|
|
|
- {{ item.T_text }}
|
|
|
- </n-popover>
|
|
|
- </n-form-item>
|
|
|
- <n-divider v-else-if="item.T_label === 5" />
|
|
|
- <n-form-item :label="item.T_name" v-else-if="item.T_label === 7">
|
|
|
- <n-date-picker
|
|
|
- v-model:formatted-value="item.T_value"
|
|
|
- value-format="yyyy-MM-dd HH:mm"
|
|
|
- type="datetime"
|
|
|
- clearable
|
|
|
- class="w-full"
|
|
|
- />
|
|
|
- <n-popover trigger="hover">
|
|
|
- <template #trigger>
|
|
|
- <n-icon size="24" class="ml-3">
|
|
|
- <InformationCircleOutline />
|
|
|
- </n-icon>
|
|
|
- </template>
|
|
|
- {{ item.T_text }}
|
|
|
- </n-popover>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item :label="item.T_name" v-else-if="item.T_label === 9">
|
|
|
- <n-date-picker
|
|
|
- v-model:formatted-value="item.T_value"
|
|
|
- value-format="yyyy-MM-dd HH:mm"
|
|
|
- type="datetimerange"
|
|
|
- clearable
|
|
|
- class="w-full"
|
|
|
- />
|
|
|
- <n-popover trigger="hover">
|
|
|
- <template #trigger>
|
|
|
- <n-icon size="24" class="ml-3">
|
|
|
- <InformationCircleOutline />
|
|
|
- </n-icon>
|
|
|
- </template>
|
|
|
- {{ item.T_text }}
|
|
|
- </n-popover>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item :label="item.T_name" v-else-if="item.T_label === 10">
|
|
|
- <n-image class="mr-5" width="100" :src="item.T_value" />
|
|
|
- <n-upload
|
|
|
- list-type="image-card"
|
|
|
- @change="(options) => handleChangeByIndex(options, index)"
|
|
|
- :default-upload="false"
|
|
|
- :max="1"
|
|
|
- >
|
|
|
- 点击上传
|
|
|
- </n-upload>
|
|
|
- <n-popover trigger="hover">
|
|
|
- <template #trigger>
|
|
|
- <n-icon size="24" class="ml-3">
|
|
|
- <InformationCircleOutline />
|
|
|
- </n-icon>
|
|
|
- </template>
|
|
|
- <n-image width="200" :src="item.T_text" />
|
|
|
- </n-popover>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item :label="item.T_name" v-else-if="item.T_label === 11">
|
|
|
- <n-image class="mr-5" width="100" v-model:src="item.T_value" />
|
|
|
- <n-space>
|
|
|
- <n-button @click="() => handleEdit(item)">编辑</n-button>
|
|
|
- <n-button @click="() => handleRefresh(index)">刷新</n-button>
|
|
|
- </n-space>
|
|
|
+ <n-form label-width="auto" size="large" show-require-mark>
|
|
|
+ <n-grid :cols="12" :x-gap="12">
|
|
|
+ <n-form-item-gi
|
|
|
+ v-for="(item, index) of formValue.formList"
|
|
|
+ :key="item.T_VerifyTemplateMap_id"
|
|
|
+ :span="4"
|
|
|
+ :label="item.T_name"
|
|
|
+ >
|
|
|
+ <template v-if="item.T_label === 3 || item.T_label === 4">
|
|
|
+ <n-select
|
|
|
+ v-model:value="item.T_value"
|
|
|
+ :multiple="item.T_label === 3 ? true : false"
|
|
|
+ label-field="T_id"
|
|
|
+ value-field="T_sn"
|
|
|
+ :max-tag-count="item.T_label === 3 ? 'responsive' : undefined"
|
|
|
+ :options="classList"
|
|
|
+ >
|
|
|
+ <template #action v-if="item.T_label === 3">
|
|
|
+ <n-space>
|
|
|
+ <n-button
|
|
|
+ class="underline"
|
|
|
+ text
|
|
|
+ @click="handleSelectAll(index)"
|
|
|
+ >全选</n-button
|
|
|
+ >
|
|
|
+ <n-button
|
|
|
+ class="underline"
|
|
|
+ text
|
|
|
+ @click="handleSelectReverse(index)"
|
|
|
+ >反选</n-button
|
|
|
+ >
|
|
|
+ </n-space>
|
|
|
+ </template>
|
|
|
+ </n-select>
|
|
|
+ </template>
|
|
|
+ <template v-else-if="item.T_label === 7 || item.T_label === 9">
|
|
|
+ <n-date-picker
|
|
|
+ v-model:formatted-value="item.T_value"
|
|
|
+ value-format="yyyy-MM-dd HH:mm"
|
|
|
+ :type="item.T_label === 7 ? 'datetime' : 'datetimerange'"
|
|
|
+ clearable
|
|
|
+ class="w-full"
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ <template v-else-if="item.T_label === 10 || item.T_label === 11">
|
|
|
+ <n-image class="mr-5" width="100" :src="item.T_value" />
|
|
|
+ <n-upload
|
|
|
+ list-type="image-card"
|
|
|
+ @change="(options) => handleChangeByIndex(options, index)"
|
|
|
+ :default-upload="false"
|
|
|
+ :max="1"
|
|
|
+ v-if="item.T_label === 10"
|
|
|
+ >
|
|
|
+ 点击上传
|
|
|
+ </n-upload>
|
|
|
+ <n-space v-else>
|
|
|
+ <n-button @click="() => handleEdit(item)">编辑</n-button>
|
|
|
+ <n-button @click="() => handleRefresh(index)">刷新</n-button>
|
|
|
+ </n-space>
|
|
|
+ </template>
|
|
|
+ <template v-else>
|
|
|
+ <n-input v-model:value="item.T_value" />
|
|
|
+ </template>
|
|
|
<n-popover trigger="hover">
|
|
|
<template #trigger>
|
|
|
<n-icon size="24" class="ml-3">
|
|
|
<InformationCircleOutline />
|
|
|
</n-icon>
|
|
|
</template>
|
|
|
- <n-image width="200" :src="item.T_text" />
|
|
|
+ <n-image
|
|
|
+ width="200"
|
|
|
+ :src="item.T_text"
|
|
|
+ v-if="item.T_label === 10 || item.T_label === 11"
|
|
|
+ />
|
|
|
+ <span v-else>{{ item.T_text }}</span>
|
|
|
</n-popover>
|
|
|
- </n-form-item>
|
|
|
- </template>
|
|
|
+ </n-form-item-gi>
|
|
|
+ </n-grid>
|
|
|
</n-form>
|
|
|
</n-scrollbar>
|
|
|
</div>
|
|
@@ -180,7 +106,7 @@
|
|
|
:title="modal.title"
|
|
|
@close="handleClose"
|
|
|
>
|
|
|
- <n-scrollbar style="max-height: 200px" trigger="none" ref="scroll">
|
|
|
+ <n-scrollbar style="max-height: 200px" trigger="none" ref="scrollbarRef">
|
|
|
<n-upload
|
|
|
list-type="image-card"
|
|
|
:default-upload="false"
|
|
@@ -205,7 +131,7 @@
|
|
|
<n-list class="bg-transparent">
|
|
|
<n-list-item :key="index" v-for="(item, index) of items">
|
|
|
<template #prefix>
|
|
|
- {{ index }}
|
|
|
+ {{ items.length - index }}
|
|
|
</template>
|
|
|
{{ item }}
|
|
|
</n-list-item>
|
|
@@ -249,7 +175,7 @@ const { height } = useWindowSize();
|
|
|
|
|
|
const message = useMessage();
|
|
|
|
|
|
-const scroll = ref(null);
|
|
|
+const scrollbarRef = ref(null);
|
|
|
|
|
|
const task = window.sessionStorage.getItem('task')
|
|
|
? JSON.parse(window.sessionStorage.getItem('task'))
|
|
@@ -258,7 +184,7 @@ const task = window.sessionStorage.getItem('task')
|
|
|
// 表单对象
|
|
|
const formValue = reactive({
|
|
|
pdf: '',
|
|
|
- templateList: [],
|
|
|
+ formList: [],
|
|
|
});
|
|
|
|
|
|
// 查询数据
|
|
@@ -271,9 +197,6 @@ const queryData = reactive({
|
|
|
//
|
|
|
const classList = ref([]);
|
|
|
|
|
|
-//
|
|
|
-const templateList = ref([]);
|
|
|
-
|
|
|
// 模态框数据源
|
|
|
const modal = reactive({
|
|
|
showModal: false,
|
|
@@ -282,9 +205,9 @@ const modal = reactive({
|
|
|
|
|
|
// CAD刷新
|
|
|
const handleRefresh = (index) => {
|
|
|
- templateList.value[
|
|
|
+ formValue.formList[
|
|
|
index
|
|
|
- ].T_value = `http://coldverifylocal.coldbaozhida.com/CAD/download?type=upload&filename=${queryData.T_task_id}_${queryData.T_VerifyTemplate_id}_${templateList.value[index].T_id}.png`;
|
|
|
+ ].T_value = `http://coldverifylocal.coldbaozhida.com/CAD/download?type=upload&filename=${queryData.T_task_id}_${queryData.T_VerifyTemplate_id}_${formValue.formList[index].T_id}.png`;
|
|
|
};
|
|
|
|
|
|
// CAD编辑
|
|
@@ -314,7 +237,7 @@ const handleChangeByIndex = async ({ file }, i) => {
|
|
|
message.error('上传失败');
|
|
|
},
|
|
|
complete: (res) => {
|
|
|
- templateList.value[i].T_value = res.key;
|
|
|
+ formValue.formList[i].T_value = res.key;
|
|
|
},
|
|
|
});
|
|
|
};
|
|
@@ -347,17 +270,17 @@ const handleChange = async ({ file }) => {
|
|
|
|
|
|
// 全选
|
|
|
const handleSelectAll = (i) => {
|
|
|
- if (templateList.value[i].T_value.length !== 0) {
|
|
|
- return (templateList.value[i].T_value = []);
|
|
|
+ if (formValue.formList[i].T_value.length !== 0) {
|
|
|
+ return (formValue.formList[i].T_value = []);
|
|
|
}
|
|
|
- templateList.value[i].T_value = classList.value.map((item) => item.T_sn);
|
|
|
+ formValue.formList[i].T_value = classList.value.map((item) => item.T_sn);
|
|
|
};
|
|
|
|
|
|
// 反选
|
|
|
const handleSelectReverse = (i) => {
|
|
|
const arr = classList.value.map((item) => item.T_sn);
|
|
|
- templateList.value[i].T_value = arr.filter(
|
|
|
- (item) => !templateList.value[i].T_value.includes(item)
|
|
|
+ formValue.formList[i].T_value = arr.filter(
|
|
|
+ (item) => !formValue.formList[i].T_value.includes(item)
|
|
|
);
|
|
|
};
|
|
|
|
|
@@ -399,7 +322,9 @@ let timer = 0;
|
|
|
const keyInfo = ref({});
|
|
|
const items = computed(() => {
|
|
|
return keyInfo.value.Item
|
|
|
- ? keyInfo.value.Item.split('\n').filter((item) => item)
|
|
|
+ ? keyInfo.value.Item.split('\n')
|
|
|
+ .filter((item) => item)
|
|
|
+ .reverse()
|
|
|
: [];
|
|
|
});
|
|
|
|
|
@@ -408,7 +333,6 @@ const generateKeyInfo = async (key) => {
|
|
|
const { data: res } = await generateKey({
|
|
|
key,
|
|
|
});
|
|
|
- keyInfo.value = res;
|
|
|
if (res.Code === 600) {
|
|
|
timer = setTimeout(() => {
|
|
|
generateKeyInfo(key);
|
|
@@ -416,6 +340,7 @@ const generateKeyInfo = async (key) => {
|
|
|
} else {
|
|
|
clearTimeout(timer);
|
|
|
}
|
|
|
+ keyInfo.value = res;
|
|
|
};
|
|
|
|
|
|
// 关闭对话框时触发
|
|
@@ -431,7 +356,7 @@ const handleDownload = () => {
|
|
|
// 生成报告
|
|
|
const putTemplateData = async () => {
|
|
|
try {
|
|
|
- const arr = toRaw(templateList.value);
|
|
|
+ const arr = toRaw(formValue.formList);
|
|
|
const VerifyTemplateMapData = arr.map((item) => {
|
|
|
if (item.T_label === 3 || item.T_label === 9) {
|
|
|
return {
|
|
@@ -495,8 +420,8 @@ const getClassList = async () => {
|
|
|
const getTemplateList = async () => {
|
|
|
try {
|
|
|
const { data: res } = await getVerifyTemplateMapDataList(queryData);
|
|
|
- templateList.value = res.Data;
|
|
|
- templateList.value.forEach((item) => {
|
|
|
+ formValue.formList = res.Data;
|
|
|
+ formValue.formList.forEach((item) => {
|
|
|
if (item.T_label === 3 || item.T_label === 9) {
|
|
|
item.T_value = item.T_value ? item.T_value.split('|') : null;
|
|
|
} else {
|