From 6b69eb5b2559bb5aa1735be2c5f04d58023692ea Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Tue, 14 Apr 2026 17:29:38 +0800
Subject: [PATCH] feat:成果数据demo
---
applications/task-work-order/src/views/orderView/orderManage/orderManage/outcomeData.vue | 232 ++++++++++++++++++++++++++++++++++++++++++++++
applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue | 16 ++
applications/task-work-order/src/views/orderView/orderManage/orderManage/orderManageApi.js | 9 +
3 files changed, 253 insertions(+), 4 deletions(-)
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 f422371..d790c73 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
@@ -8,7 +8,13 @@
destroy-on-close
:close-on-click-modal="false"
>
- <div class="content" style="display: flex">
+ <el-tabs class="gd-tabs" v-model="activeName" @tab-click="tabsClick" v-if="dialogReadonly">
+ <el-tab-pane label="基础信息" name="basic"></el-tab-pane>
+ <el-tab-pane label="成果数据" name="result">
+ <OutcomeData :workOrderId="formData.id" />
+ </el-tab-pane>
+ </el-tabs>
+ <div class="content" style="display: flex" v-if="activeName === 'basic'">
<div class="processBox" v-if="dialogMode !== 'add'">
<div class="detail-title">工单记录</div>
<div class="process">
@@ -189,7 +195,7 @@
</div>
</div>
- <template #footer>
+ <template #footer v-if="activeName === 'basic'">
<el-button v-if="['11', '21', '23', '31', '60'].includes(gdStatus)" @click="viewDescription" color="#F2F3F5">
{{ gdStatusObj[gdStatus]?.reason }}
</el-button>
@@ -274,13 +280,15 @@
import RefuseOrderDialog from '@/views/orderView/orderManage/orderManage/RefuseOrderDialog.vue'
import CommonCesiumMap from '@/components/map-container/common-cesium-map.vue'
import { gdPatrolTaskPageApi } from '@/views/orderView/orderManage/inspectionRequest/inspectionRequestApi'
-import { Check } from '@element-plus/icons-vue'
+import { Check, Search, RefreshRight } from '@element-plus/icons-vue'
import droneIcon from '@/assets/images/orderView/orderManage/drone.png'
import droneActiveIcon from '@/assets/images/orderView/orderManage/droneActive.png'
import { useStore } from 'vuex'
import OrderStepBar from '@/views/orderView/orderManage/orderManage/OrderStepBar.vue'
+import OutcomeData from './outcomeData.vue'
const store = useStore()
const permission = computed(() => store.state.user.permission)
+const activeName = ref('basic')
// 初始化表单数据
const initForm = () => ({
@@ -699,7 +707,7 @@
.content {
display: flex;
gap: 0 20px;
- height: 680px;
+ height: 630px;
.leftBox {
width: 0;
diff --git a/applications/task-work-order/src/views/orderView/orderManage/orderManage/orderManageApi.js b/applications/task-work-order/src/views/orderView/orderManage/orderManage/orderManageApi.js
index b373365..7e180d9 100644
--- a/applications/task-work-order/src/views/orderView/orderManage/orderManage/orderManageApi.js
+++ b/applications/task-work-order/src/views/orderView/orderManage/orderManage/orderManageApi.js
@@ -65,3 +65,12 @@
params:{ descs: 'create_time', ...params },
})
}
+
+// 成果数据分页
+export function gdTaskResultPageApi(data) {
+ return request({
+ url: `/drone-gd/workOrder/gdTaskResult/page`,
+ method: 'get',
+ params: data
+ })
+}
\ No newline at end of file
diff --git a/applications/task-work-order/src/views/orderView/orderManage/orderManage/outcomeData.vue b/applications/task-work-order/src/views/orderView/orderManage/orderManage/outcomeData.vue
new file mode 100644
index 0000000..c8e84b3
--- /dev/null
+++ b/applications/task-work-order/src/views/orderView/orderManage/orderManage/outcomeData.vue
@@ -0,0 +1,232 @@
+<template>
+ <div class="outcome-container">
+ <el-form ref="searchRef" :model="searchParams" class="gd-search-form">
+ <el-form-item label="巡查任务名称" prop="patrolTaskName">
+ <el-select
+ class="gd-select"
+ popper-class="gd-select-popper"
+ v-model="searchParams.patrolTaskName"
+ placeholder="请选择"
+ clearable
+ filterable
+ @change="handleSearch"
+ >
+ <el-option
+ v-for="item in patrolTaskList"
+ :key="item.id"
+ :label="item.patrolTaskName"
+ :value="item.patrolTaskName"
+ />
+ </el-select>
+ </el-form-item>
+
+ <el-form-item >
+ <!-- <el-button :icon="RefreshRight" @click="resetForm"></el-button>
+ <el-button class="search-btn" :icon="Search" @click="handleSearch"></el-button> -->
+ <el-button :icon="Download" color="#4C34FF" @click="handleBatchDownload">下载</el-button>
+
+ </el-form-item>
+ </el-form>
+
+ <div class="gd-table-container" v-loading="loading">
+ <div class="gd-table-content gd-table-content-bg">
+ <el-table class="gd-table" :data="list" @selection-change="handleSelectionChange">
+ <el-table-column type="selection" width="46" />
+ <el-table-column type="index" label="序号" width="80" />
+ <el-table-column label="图片" width="120">
+ <template v-slot="{ row }">
+ <el-image
+ v-if="row.resultUrl"
+ :src="row.resultUrl"
+ :preview-src-list="[row.resultUrl]"
+ fit="cover"
+ style="width: 80px; height: 80px; border-radius: 4px;"
+ />
+ <span v-else>-</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="patrolTaskName" show-overflow-tooltip label="巡查任务名称" />
+ <el-table-column prop="shootTime" show-overflow-tooltip label="拍摄时间" />
+ <el-table-column label="操作" class-name="operation-btns" width="150">
+ <template v-slot="{ row }">
+ <!-- <el-link type="primary" @click="handleDownload(row)">下载</el-link> -->
+ <el-link type="primary" @click="handleDelete(row)">删除</el-link>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+
+ <div class="gd-pagination-parent">
+ <el-pagination
+ popper-class="gd-select-popper"
+ v-model:current-page="searchParams.current"
+ v-model:page-size="searchParams.size"
+ layout="total, prev, pager, next, sizes"
+ :total="total"
+ @change="getList"
+ />
+ </div>
+ </div>
+ </div>
+</template>
+
+<script setup>
+import {gdTaskResultPageApi}from './orderManageApi'
+import { Search, RefreshRight, Download } from '@element-plus/icons-vue'
+import { ref, onMounted, inject } from 'vue'
+import { ElMessage, ElMessageBox } from 'element-plus'
+import { getDictLabel } from '@ztzf/utils'
+import { gdPatrolTaskPageApi } from '@/views/orderView/orderManage/inspectionRequest/inspectionRequestApi'
+import dayjs from 'dayjs'
+
+const props = defineProps({
+ workOrderId: {
+ type: String,
+ required: true
+ }
+})
+
+const emit = defineEmits(['success'])
+
+// 初始化查询参数
+const initSearchParams = () => ({
+ patrolTaskName: '',
+ current: 1,
+ size: 10,
+})
+
+const searchParams = ref(initSearchParams())
+const total = ref(0)
+const loading = ref(true)
+const list = ref([])
+const searchRef = ref(null)
+const selectedRows = ref([])
+const patrolTaskList = ref([])
+const dictObj = inject('dictObj')
+
+// 获取巡查任务列表
+async function getPatrolTaskList() {
+ try {
+ const res = await gdTaskResultPageApi({
+ current: 1,
+ size: 1000,
+ id: props.workOrderId
+ })
+ patrolTaskList.value = res?.data?.data?.records || []
+ console.log('patrolTaskList.value', patrolTaskList.value)
+ } catch (error) {
+ console.error('获取巡查任务列表失败:', error)
+ }
+}
+
+// 获取成果数据列表
+async function getList() {
+ loading.value = true
+ try {
+ const res = await gdTaskResultPageApi({
+ ...searchParams.value,
+ id: props.workOrderId
+ })
+ list.value = res?.data?.data?.records || []
+ total.value = res?.data?.data?.total || 0
+ console.log('list.value', list.value)
+ } finally {
+ loading.value = false
+ }
+}
+
+// 搜索
+function handleSearch() {
+ searchParams.value.current = 1
+ getList()
+}
+
+// 重置搜索
+function resetForm() {
+ searchRef.value?.resetFields()
+ searchParams.value.current = 1
+ getList()
+}
+
+// 选择变化
+function handleSelectionChange(rows) {
+ selectedRows.value = rows
+}
+
+// 下载
+function handleDownload(row) {
+ if (!row.resultUrl) {
+ ElMessage.warning('暂无图片可下载')
+ return
+ }
+ const a = document.createElement('a')
+ a.href = row.resultUrl
+ a.download = `成果数据_${row.patrolTaskName}_${dayjs().format('YYYYMMDDHHmmss')}`
+ document.body.appendChild(a)
+ a.click()
+ document.body.removeChild(a)
+ ElMessage.success('下载成功')
+}
+
+// 批量下载
+function handleBatchDownload() {
+ if (selectedRows.value.length === 0) {
+ ElMessage.warning('请选择要下载的数据')
+ return
+ }
+ selectedRows.value.forEach(row => {
+ if (row.resultUrl) {
+ const a = document.createElement('a')
+ a.href = row.resultUrl
+ a.download = `成果数据_${row.patrolTaskName}_${dayjs().format('YYYYMMDDHHmmss')}`
+ document.body.appendChild(a)
+ a.click()
+ document.body.removeChild(a)
+ }
+ })
+ ElMessage.success('批量下载完成')
+}
+
+// 删除
+async function handleDelete(row) {
+ await ElMessageBox.confirm('确认删除该条记录吗?', '提示', {
+ type: 'warning',
+ customClass: 'gd-confirm-custom',
+ confirmButtonClass: 'gd-confirm-button',
+ cancelButtonClass: 'gd-confirm-cancel-button',
+ })
+ try {
+ // 这里需要调用删除接口,暂时模拟成功
+ ElMessage.success('删除成功')
+ getList()
+ } catch (error) {
+ ElMessage.error('删除失败')
+ }
+}
+
+onMounted(() => {
+ getPatrolTaskList()
+ getList()
+})
+</script>
+
+<style scoped lang="scss">
+.outcome-container {
+ height: 679px;
+ display: flex;
+ flex-direction: column;
+ overflow: hidden;
+
+ .gd-table-container {
+ flex: 1;
+ overflow: hidden;
+ display: flex;
+ flex-direction: column;
+
+ .gd-table-content {
+ flex: 1;
+ overflow: auto;
+ }
+ }
+}
+</style>
\ No newline at end of file
--
Gitblit v1.9.3