From c44ade277c2df14948956d7faade8bba2e39ed0c Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Sat, 06 Jun 2026 11:05:50 +0800
Subject: [PATCH] feat: 类型多选改造1

---
 applications/task-work-order/src/views/orderView/orderManage/inspectionReport/index.vue       |   72 ++++++++++++++++++------------------
 applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/FormDiaLog.vue |   13 ------
 applications/task-work-order/src/views/orderView/orderManage/taskTypeOptions.js               |    4 --
 applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/ViewDiaLog.vue |    2 
 applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue       |    1 
 5 files changed, 38 insertions(+), 54 deletions(-)

diff --git a/applications/task-work-order/src/views/orderView/orderManage/inspectionReport/index.vue b/applications/task-work-order/src/views/orderView/orderManage/inspectionReport/index.vue
index b91c32b..1b1d54a 100644
--- a/applications/task-work-order/src/views/orderView/orderManage/inspectionReport/index.vue
+++ b/applications/task-work-order/src/views/orderView/orderManage/inspectionReport/index.vue
@@ -13,21 +13,16 @@
 			</el-form-item>
 
 			<el-form-item label="文档类型" prop="resultType">
-				<el-select
-					class="gd-select gray"
-					popper-class="gd-select-popper"
+				<el-cascader
+					class="gd-cascader gray"
+					popper-class="gd-cascader-popper"
 					v-model="searchParams.resultType"
+					:options="workOrderTypeXT"
+					:props="taskTypeCascaderProps"
 					placeholder="请选择"
 					clearable
 					@change="handleSearch"
-				>
-					<el-option
-						v-for="item in dictObj.workOrderType"
-						:key="item.dictKey"
-						:label="item.dictValue"
-						:value="item.dictKey"
-					/>
-				</el-select>
+				/>
 			</el-form-item>
 
 			<el-form-item class="gd-search-actions">
@@ -56,7 +51,7 @@
 					<!-- <el-table-column prop="resultType" show-overflow-tooltip label="文档类型" /> -->
 					<el-table-column prop="resultType" show-overflow-tooltip label="文档类型">
 						<template v-slot="{ row }">
-							{{ getDictLabel(row.resultType, dictObj.workOrderType) }}
+							{{ getTaskTypeLabel(row.resultType, workOrderTypeXT) }}
 						</template>
 					</el-table-column>
 					<el-table-column label="操作" class-name="operation-btns">
@@ -94,20 +89,16 @@
 					<el-input v-model="editParams.nickName" class="gd-input" placeholder="请输入" />
 				</el-form-item>
 				<el-form-item label="文档类型" prop="resultType" v-if="titleTxt === '上传巡查报告'">
-					<el-select
-						class="gd-select"
-						popper-class="gd-select-popper"
+					<el-cascader
+						class="gd-cascader"
+						popper-class="gd-cascader-popper"
 						v-model="editParams.resultType"
+						:options="workOrderTypeXT"
+						:props="{ ...taskTypeCascaderProps, multiple: true }"
 						placeholder="请选择"
 						clearable
-					>
-						<el-option
-							v-for="item in dictObj.workOrderType"
-							:key="item.dictKey"
-							:label="item.dictValue"
-							:value="item.dictKey"
-						/>
-					</el-select>
+						collapse-tags
+					/>
 				</el-form-item>
 				<el-form-item label="上传文件" prop="link" v-if="titleTxt === '上传巡查报告'">
 					<el-upload class="avatar-uploader" action="" :show-file-list="false" :before-upload="onUploadFileBefore">
@@ -142,15 +133,19 @@
 	</basic-container>
 </template>
 <script setup>
-import { Search, RefreshRight, Download, Upload, Delete } from '@element-plus/icons-vue'
-import { fjPageApi, fjSubmitApi, fjRemoveApi, fjDetailApi, fjUploadApi,fjDownloadByByteApi } from './inspectionRequestApi'
+import { Search, RefreshRight, Download, Upload } from '@element-plus/icons-vue'
+import { fjPageApi, fjSubmitApi, fjRemoveApi, fjUploadApi, fjDownloadByByteApi } from './inspectionRequestApi'
 import { useStore } from 'vuex'
-import { ref, computed, inject, onMounted } from 'vue'
-import { ElMessage, ElMessageBox, ElLoading } from 'element-plus'
-import { getDictLabel } from '@ztzf/utils'
+import { ref, computed, onMounted } from 'vue'
+import { ElMessage, ElMessageBox } from 'element-plus'
 import PreviewFiles from '@/components/PreviewFiles/PreviewFiles.vue'
-import { getDictionaryByCode } from '@/api/system/dictbiz'
 import { Base64 } from 'js-base64'
+import { getDictListApi } from '@/api/zkxt'
+import {
+	getTaskTypeLabel,
+	normalizeTaskTypeOptions,
+	taskTypeCascaderProps,
+} from '../taskTypeOptions'
 
 const store = useStore()
 const userInfo = computed(() => store.getters.userInfo)
@@ -173,9 +168,7 @@
 // 上传名称
 const uploadName = ref('')
 
-const dictObj = ref({
-	workOrderType: [], // 巡查任务类型
-})
+const workOrderTypeXT = ref([])
 
 const searchParams = ref(initSearchParams()) // 查询参数
 const total = ref(0) // 总条数
@@ -203,9 +196,13 @@
 
 // 获取字典
 function getDictList() {
-	getDictionaryByCode('workOrderType').then(res => {
-		dictObj.value = res.data.data
+	getDictListApi('task_inspection_type').then(res => {
+		workOrderTypeXT.value = normalizeTaskTypeOptions(res.data.data || [])
 	})
+}
+
+function toTaskTypeQueryValue(value) {
+	return Array.isArray(value) ? value.join(',') : value
 }
 
 // 将字节大小转换为可读格式的函数
@@ -221,7 +218,10 @@
 async function getList() {
 	loading.value = true
 	try {
-		const res = await fjPageApi({ ...searchParams.value })
+		const res = await fjPageApi({
+			...searchParams.value,
+			resultType: toTaskTypeQueryValue(searchParams.value.resultType),
+		})
 		list.value = res?.data?.data?.records ?? []
 		total.value = res?.data?.data?.total ?? 0
 	} finally {
@@ -401,7 +401,7 @@
 		if (valid) {
 			submitting.value = true
 			try {
-				await fjSubmitApi({ ...editParams.value })
+				await fjSubmitApi(editParams.value)
 				ElMessage.success('保存成功')
 				isShowEditView.value = false
 				getList()
diff --git a/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/FormDiaLog.vue b/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/FormDiaLog.vue
index 799149d..ab432d4 100644
--- a/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/FormDiaLog.vue
+++ b/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/FormDiaLog.vue
@@ -161,8 +161,7 @@
 									v-model="row.deviceFlyerId"
 									placeholder="请选择"
 									filterable
-									:disabled="dialogReadonly || !hasTaskTypeValue(taskList[$index].patrolTaskType)"
-
+									:disabled="dialogReadonly || !taskList[$index].patrolTaskType"
 								>
 									<el-option
 										v-for="item in flyerListMap[$index] || []"
@@ -275,7 +274,6 @@
 	getTaskTypeLabel,
 	taskTypeCascaderProps,
 	toTaskTypeCascaderValue,
-	toTaskTypeRequestValue,
 } from '../taskTypeOptions'
 
 // 初始化任务行
@@ -475,7 +473,6 @@
 function isTaskRowFilled(task) {
 	return !!(
 		task.patrolTaskName ||
-		hasTaskTypeValue(task.patrolTaskType) ||
 		task.executeTime ||
 		task.patrolRouteUrl ||
 		task.deviceFlyerId ||
@@ -483,9 +480,6 @@
 	)
 }
 
-function hasTaskTypeValue(value) {
-	return !!toTaskTypeRequestValue(value).length
-}
 
 // 提交新增
 async function handleSubmit() {
@@ -507,10 +501,6 @@
 		// 已填写的行需要校验完整性
 		if (!task.patrolTaskName) {
 			ElMessage.warning(`第${i + 1}行: 请输入巡查任务名称`)
-			return
-		}
-		if (!hasTaskTypeValue(task.patrolTaskType)) {
-			ElMessage.warning(`第${i + 1}行: 请选择巡查任务类型`)
 			return
 		}
 		if (!task.executeTime) {
@@ -536,7 +526,6 @@
 		// 只提交已填写的任务行
 		const dataList = filledTasks.map(item => ({
 			...item,
-			patrolTaskType: toTaskTypeRequestValue(item.patrolTaskType),
 			workOrderId: selectedWorkOrderId.value,
 			id: undefined,
 		}))
diff --git a/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/ViewDiaLog.vue b/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/ViewDiaLog.vue
index 2530bbb..c50f00e 100644
--- a/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/ViewDiaLog.vue
+++ b/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/ViewDiaLog.vue
@@ -299,7 +299,7 @@
 import { queryAirById, airlineListApi, algorithmGroupedApi } from '@/api/zkxt'
 import * as Cesium from 'cesium'
 import { useStore } from 'vuex'
-import { getTaskTypeLabel, taskTypeCascaderProps, toTaskTypeCascaderValue, toTaskTypeRequestValue } from '../taskTypeOptions'
+import { getTaskTypeLabel, taskTypeCascaderProps, toTaskTypeCascaderValue } from '../taskTypeOptions'
 
 // 初始化表单数据
 const initForm = () => ({
diff --git a/applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue b/applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue
index f134301..5a65a75 100644
--- a/applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue
+++ b/applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue
@@ -285,7 +285,6 @@
 	getTaskTypeLabel,
 	taskTypeCascaderProps,
 	toTaskTypeCascaderValue,
-	toTaskTypeRequestValue,
 } from '../taskTypeOptions'
 const store = useStore()
 const permission = computed(() => store.state.user.permission)
diff --git a/applications/task-work-order/src/views/orderView/orderManage/taskTypeOptions.js b/applications/task-work-order/src/views/orderView/orderManage/taskTypeOptions.js
index c661bc0..80c708c 100644
--- a/applications/task-work-order/src/views/orderView/orderManage/taskTypeOptions.js
+++ b/applications/task-work-order/src/views/orderView/orderManage/taskTypeOptions.js
@@ -57,10 +57,6 @@
 	return value.filter(isValidPath)
 }
 
-export function toTaskTypeRequestValue(value) {
-	return toTaskTypeCascaderValue(value).map(item => [item[0], item[1]])
-}
-
 
 export function getTaskTypeLabel(value, options = []) {
 	if (!value?.length) return ''

--
Gitblit v1.9.3