From fcbd623e384f9a41f8cf35171060a0905a81a9d8 Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Wed, 21 Jan 2026 12:25:16 +0800
Subject: [PATCH] feat: 拒绝验收
---
/dev/null | 122 ------------------------------
applications/task-work-order/src/buildConfig/buildConfig/config.default.js | 5
applications/task-work-order/src/buildConfig/config.js | 4
applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/FormDiaLog.vue | 12 ++-
applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/index.vue | 25 ++----
applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/ViewDiaLog.vue | 43 +++++++++-
6 files changed, 57 insertions(+), 154 deletions(-)
diff --git a/applications/task-work-order/src/buildConfig/buildConfig/config.default.js b/applications/task-work-order/src/buildConfig/buildConfig/config.default.js
index a9378d9..019bb50 100644
--- a/applications/task-work-order/src/buildConfig/buildConfig/config.default.js
+++ b/applications/task-work-order/src/buildConfig/buildConfig/config.default.js
@@ -2,8 +2,7 @@
export default function getBaseConfig () {
return {
- loginTitle: '中图智飞低空智能感知网平台', //登陆页面标题
- // envName: 'jiangwu',
+ loginTitle: '任务工单', //登陆页面标题
...defaultLayer
}
-}
\ No newline at end of file
+}
diff --git a/applications/task-work-order/src/buildConfig/buildConfig/config.jiangwu.js b/applications/task-work-order/src/buildConfig/buildConfig/config.jiangwu.js
deleted file mode 100644
index b1dc2e5..0000000
--- a/applications/task-work-order/src/buildConfig/buildConfig/config.jiangwu.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import jiangwuLayer from '@/buildConfig/layerConfig/jiangwuLayer'
-
-export default function getBaseConfig () {
- return {
- userLoginTitle (key) {
- return '大吉山钨业无人机安防监测平台'
- },
- envName: 'jiangwu',
- routerHash: true, //使用hash路由
- loginTitle: '大吉山钨业无人机安防监测平台',
- hideMenuTopLogo: true, // 是否隐藏菜单顶部logo
-
- ...jiangwuLayer,
- }
-}
diff --git a/applications/task-work-order/src/buildConfig/config.js b/applications/task-work-order/src/buildConfig/config.js
index 698cc2c..f0cda4c 100644
--- a/applications/task-work-order/src/buildConfig/config.js
+++ b/applications/task-work-order/src/buildConfig/config.js
@@ -1,14 +1,12 @@
// 直接导入所有配置文件
-import jiangwuConfig from '@/buildConfig/buildConfig/config.jiangwu.js'
import defaultConfig from '@/buildConfig/buildConfig/config.default.js'
// 根据环境变量选择配置
const env = import.meta.env.VITE_APP_ENV || 'default'
const configMap = {
- jiangwu: jiangwuConfig,
default: defaultConfig
}
// 导出配置函数
-export default configMap[env] || configMap.default
\ No newline at end of file
+export default configMap[env] || configMap.default
diff --git a/applications/task-work-order/src/buildConfig/layerConfig/jiangwuLayer.js b/applications/task-work-order/src/buildConfig/layerConfig/jiangwuLayer.js
deleted file mode 100644
index 122a6db..0000000
--- a/applications/task-work-order/src/buildConfig/layerConfig/jiangwuLayer.js
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * @Author : yuan
- * @Date : 2025-06-13 09:49:01
- * @LastEditors : yuan
- * @LastEditTime : 2025-06-13 14:02:59
- * @FilePath : \src\buildConfig\layerConfig\jiangwuLayer.js
- * @Description :
- * Copyright 2025 OBKoro1, All Rights Reserved.
- * 2025-06-13 09:49:01
- */
-import * as Cesium from 'cesium'
-import AmapMercatorTilingScheme from '@/utils/cesium/AmapMercatorTilingScheme'
-
-
-let TDT_Token = import.meta.env.VITE_APP_TDT_TOKEN
-
-const TDT_IMG_C =
- 'https://{s}.tianditu.gov.cn/img_c/wmts?service=wmts&request=GetTile&version=1.0.0' +
- '&LAYER=img&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}' +
- '&style=default&format=tiles&tk=' +
- TDT_Token
-// 天地图注记
-const TDT_ZJ =
- 'https://{s}.tianditu.gov.cn/cia_c/wmts?service=wmts&request=GetTile&version=1.0.0' +
- '&LAYER=cia&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}' +
- '&style=default&format=tiles&tk=' +
- TDT_Token
-
-// 天地图矢量底图
-const imageryProvider_stand = new Cesium.UrlTemplateImageryProvider({
- url: `${import.meta.env.VITE_APP_OFFLINE_MAP_URL}/slLayer/{z}/{y}/{x}.png`, // 本地瓦片路径
- minimumLevel: 0, // 最小层级
- maximumLevel: 17, // 最大层级
- tileWidth: 256, // 瓦片宽度(默认256)
- tileHeight: 256, // 瓦片高度(默认256)
-})
-// 天地图矢量注记
-const imageryProvider_standZh = new Cesium.UrlTemplateImageryProvider({
- url: `${import.meta.env.VITE_APP_OFFLINE_MAP_URL}/slBzLayer/{z}/{y}/{x}.png`, // 本地瓦片路径
- minimumLevel: 0, // 最小层级
- maximumLevel: 17, // 最大层级
- tileWidth: 256, // 瓦片宽度(默认256)
- tileHeight: 256, // 瓦片高度(默认256)
-})
-
-
-// 天地图影像
-const imageryProvider_tdt_img_w = new Cesium.UrlTemplateImageryProvider({
- url: `${import.meta.env.VITE_APP_OFFLINE_MAP_URL}/yxLayer/{z}/{y}/{x}.png`, // 本地瓦片路径
- minimumLevel: 0, // 最小层级
- maximumLevel: 17, // 最大层级
- tileWidth: 256, // 瓦片宽度(默认256)
- tileHeight: 256, // 瓦片高度(默认256)
-})
-// 天地图影像注记
-const imageryProvider_tdt_cia_w = new Cesium.UrlTemplateImageryProvider({
- url: `${import.meta.env.VITE_APP_OFFLINE_MAP_URL}/yxBzLayer/{z}/{y}/{x}.png`, // 本地瓦片路径
- minimumLevel: 0, // 最小层级
- maximumLevel: 17, // 最大层级
- tileWidth: 256, // 瓦片宽度(默认256)
- tileHeight: 256, // 瓦片高度(默认256)
-})
-
-//高德矢量,自带注记
-const imageryProvider_ammapSL = new Cesium.UrlTemplateImageryProvider({
- url: 'https://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
- layer: 'tdtVecBasicLayer',
- style: 'default',
- format: 'image/png',
- tileMatrixSetID: 'GoogleMapsCompatible',
- subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'],
- maximumLevel: 18,
- tilingScheme: new AmapMercatorTilingScheme(),
- credit: 'amap_SL',
-})
-//高德影像,自带注记
-const imageryProvider_ammap = new Cesium.UrlTemplateImageryProvider({
- url: 'https://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}',
- layer: 'tdtVecBasicLayer',
- style: 'default',
- format: 'image/png',
- tileMatrixSetID: 'GoogleMapsCompatible',
- subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'],
- maximumLevel: 18,
- tilingScheme: new AmapMercatorTilingScheme(),
- credit: 'amap_stand',
-})
-// 高德影像,注记
-const imageryProvider_ammapBz = new Cesium.UrlTemplateImageryProvider({
- url: 'https://webst02.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8',
- tilingScheme: new AmapMercatorTilingScheme(),
- minimumLevel: 3,
-})
-
-// 天地图矢量底图-蓝色
-const blueImageryProviderVec = new Cesium.UrlTemplateImageryProvider({
- url: `${import.meta.env.VITE_APP_OFFLINE_MAP_URL}/slLayer/{z}/{y}/{x}.png`, // 本地瓦片路径
- minimumLevel: 0, // 最小层级
- maximumLevel: 17, // 最大层级
- tileWidth: 256, // 瓦片宽度(默认256)
- tileHeight: 256, // 瓦片高度(默认256)
-})
-// 天地图矢量注记-蓝色
-const blueImageryProviderCva = new Cesium.UrlTemplateImageryProvider({
- url: `${import.meta.env.VITE_APP_OFFLINE_MAP_URL}/slBzLayer/{z}/{y}/{x}.png`, // 本地瓦片路径
- minimumLevel: 0, // 最小层级
- maximumLevel: 17, // 最大层级
- tileWidth: 256, // 瓦片宽度(默认256)
- tileHeight: 256, // 瓦片高度(默认256)
-})
-
-export default {
- imageryProvider_stand,
- imageryProvider_standZh,
- imageryProvider_tdt_img_w,
- imageryProvider_tdt_cia_w,
- imageryProvider_ammapSL,
- imageryProvider_ammap,
- imageryProvider_ammapBz,
- blueImageryProviderVec,
- blueImageryProviderCva
-}
\ No newline at end of file
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 b6d8470..30150ef 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
@@ -20,7 +20,7 @@
placeholder="请选择"
clearable
filterable
- :disabled="dialogReadonly"
+ :disabled="dialogMode !== 'add'"
@change="handleWorkOrderChange"
>
<el-option v-for="item in workOrderList" :key="item.id" :label="item.workOrderName" :value="item.id" />
@@ -153,7 +153,7 @@
<el-input class="gd-input" v-model="row.taskDesc" placeholder="请输入" :disabled="dialogReadonly" />
</template>
</el-table-column>
- <el-table-column label="操作" width="80" fixed="right" v-if="!dialogReadonly">
+ <el-table-column label="操作" width="80" fixed="right" v-if="dialogMode === 'add'">
<template v-slot="{ $index }">
<el-button type="primary" :icon="Plus" circle size="small" @click="addTaskRow" />
<el-button
@@ -192,7 +192,7 @@
import { ElMessage } from 'element-plus'
import { Plus, Delete } from '@element-plus/icons-vue'
import { getDictLabel } from '@ztzf/utils'
-import { gdPatrolTaskSaveApi, gdFlyerPageApi } from './inspectionRequestApi'
+import { gdPatrolTaskSaveApi, gdFlyerPageApi, gdPatrolTaskAuditApi } from './inspectionRequestApi'
import { gdWorkOrderPageApi } from '../orderManage/orderManageApi'
import { gdManageDeviceListApi } from '../orderManage/gdManageDeviceApi'
@@ -312,12 +312,15 @@
}
submitting.value = true
try {
+ const preID = taskList.value[0].id
const dataList = taskList.value.map(item => ({
...item,
workOrderId: selectedWorkOrderId.value,
+ id: undefined,
}))
await gdPatrolTaskSaveApi(dataList)
- ElMessage.success('新增成功')
+ dialogMode.value === 'add' ? ElMessage.success('新增成功') : ElMessage.success('修改成功')
+ dialogMode.value === 'edit' && await gdPatrolTaskAuditApi({ auditStatus: 7, id: preID })
visible.value = false
emit('success')
} finally {
@@ -327,6 +330,7 @@
// 打开弹框
async function open({ mode = 'add', row } = {}) {
+ console.log(row,'rowrow')
dialogMode.value = mode
if (mode === 'add') {
selectedWorkOrderId.value = null
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 356a221..1239f70 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
@@ -45,6 +45,21 @@
<div class="val">{{ formData.taskDesc }}</div>
</el-col>
</el-row>
+ <template v-if="['6','7','8'].includes(taskStatus)">
+ <div>任务成功({{list.length || 0}}条)</div>
+ <div style="display: flex">
+ <div v-for="item in list">
+ <el-image
+ v-if="item.resultUrl"
+ :src="item.resultUrl"
+ :preview-src-list="[item.resultUrl]"
+ fit="cover"
+ style="width: 80px; height: 60px"
+ preview-teleported
+ />
+ </div>
+ </div>
+ </template>
</div>
<!-- 编辑模式 -->
@@ -167,10 +182,11 @@
</el-button>
<template v-if="requester">
+<!-- statusChange(6)-->
<el-button color="#F2F3F5" v-if="taskStatus === '1'">拒绝原因</el-button>
<el-button color="#F2F3F5" @click="statusChange(3)" v-if="taskStatus === '3'">撤回任务</el-button>
- <el-button color="#F2F3F5" @click="statusChange(6)" v-if="taskStatus === '6'">拒绝验收</el-button>
- <el-button color="#F2F3F5" @click="statusChange(7)" v-if="taskStatus === '6'">验收通过</el-button>
+ <el-button color="#F2F3F5" @click="refusalToAccept" v-if="taskStatus === '6'">拒绝验收</el-button>
+ <el-button color="#F2F3F5" @click="statusChange(6)" v-if="taskStatus === '6'">验收通过</el-button>
</template>
<template v-else>
<el-button color="#F2F3F5" @click="statusChange(2)" v-if="taskStatus === '0'">拒绝签收</el-button>
@@ -191,6 +207,7 @@
import { gdManageDeviceListApi } from '../orderManage/gdManageDeviceApi'
import { pxToRem } from '@/utils/rem'
import CommonCesiumMap from '@/components/map-container/common-cesium-map.vue'
+import { gdTaskResultListApi } from '@/views/orderView/orderManage/clueEvents/achievementApi'
// 初始化表单数据
const initForm = () => ({
@@ -208,7 +225,7 @@
const mapRef = ref(null)
const dictObj = inject('dictObj')
const requester = inject('requester')
-const emit = defineEmits(['success'])
+const emit = defineEmits(['success','refusalAccept'])
const formRef = ref(null)
const formData = ref(initForm())
const visible = defineModel()
@@ -277,6 +294,11 @@
})
}
+function refusalToAccept() {
+ emit('refusalAccept',formData.value)
+ visible.value = false
+}
+
// 获取设备列表
async function getDeviceList() {
const res = await gdManageDeviceListApi()
@@ -298,11 +320,22 @@
}
}
+let list = ref([])
+// 获取成果列表
+async function getList() {
+ if (!formData.value?.id) return
+ try {
+ const res = await gdTaskResultListApi({ patrolTaskId: formData.value.id })
+ list.value = res?.data?.data ?? []
+ } finally {
+ }
+}
+
// 打开弹框
async function open({ mode = 'view', row } = {}) {
dialogMode.value = mode
- formData.value = { ...initForm(), ...row }
- console.log(formData.value)
+ formData.value = { ...initForm(), ...row };
+ ['6','7','8'].includes(row.taskStatus) && getWorkOrderList()
initMap()
}
diff --git a/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/index.vue b/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/index.vue
index 3f138d5..ee5d350 100644
--- a/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/index.vue
+++ b/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/index.vue
@@ -117,7 +117,7 @@
</div>
<FormDiaLog ref="dialogRef" @success="getList" v-if="dialogVisible" v-model="dialogVisible" />
- <ViewDiaLog ref="viewDiaLogRef" @success="getList" v-if="viewDiaLogVisible" v-model="viewDiaLogVisible" />
+ <ViewDiaLog ref="viewDiaLogRef" @success="getList" @refusalAccept="refusalAccept" v-if="viewDiaLogVisible" v-model="viewDiaLogVisible" />
</basic-container>
</template>
<script setup>
@@ -207,22 +207,6 @@
})
}
-// 删除
-async function handleDelete(row) {
- const tips = row ? '该条' : '选中的项'
- await ElMessageBox.confirm(`确认删除${tips}吗?`, '提示', {
- type: 'warning',
- customClass: 'gd-confirm-custom',
- confirmButtonClass: 'gd-confirm-button',
- cancelButtonClass: 'gd-confirm-cancel-button',
- })
- const ids = row ? row.id : selectedIds.value.join(',')
- await gdPatrolTaskRemoveApi({ ids })
- ElMessage.success('删除成功')
- selectedIds.value = []
- getList()
-}
-
// 勾选值设置
function handleSelectionChange(rows) {
selectedIds.value = rows.map(item => item.id)
@@ -235,6 +219,13 @@
})
}
+function refusalAccept(row) {
+ dialogVisible.value = true
+ nextTick(() => {
+ dialogRef.value?.open({ mode:'edit', row })
+ })
+}
+
onMounted(() => {
getList()
getDictList()
--
Gitblit v1.9.3