From 2ca94de8ede18ac07ccfd8dec7b6f6a707adde9b Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Mon, 01 Sep 2025 11:20:24 +0800
Subject: [PATCH] Merge branch 'refs/heads/feature/v5.0/5.0.5' into patch_management
---
src/views/dataCenter/components/searchData.vue | 154 ++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 133 insertions(+), 21 deletions(-)
diff --git a/src/views/dataCenter/components/searchData.vue b/src/views/dataCenter/components/searchData.vue
index 301e868..1445f58 100644
--- a/src/views/dataCenter/components/searchData.vue
+++ b/src/views/dataCenter/components/searchData.vue
@@ -2,8 +2,9 @@
<div class="search-box-test">
<el-form :model="searchForm" inline>
<div class="search-first">
- <el-form-item label="行政区划:">
- <el-tree-select
+ <el-form-item label="行政区划:" >
+ <el-tree-select
+ :disabled="viewDetailsDisabled"
popper-class="custom-tree-select"
v-model="searchForm.areaCode"
:data="deptTreeData"
@@ -16,10 +17,12 @@
</el-form-item>
<el-form-item label="所属机巢:">
<el-select
+ :disabled="viewDetailsDisabled"
:teleported="false"
v-model="searchForm.deviceSn"
placeholder="请选择"
clearable
+ @change="handleSearch"
>
<el-option
v-for="item in machineData"
@@ -30,14 +33,15 @@
</el-select>
</el-form-item>
<el-form-item label="任务名称:">
- <el-input v-model="searchForm.jobName" placeholder="请输入" clearable />
+ <el-input :disabled="viewDetailsDisabled" v-model="searchForm.jobName" placeholder="请输入" clearable />
</el-form-item>
<el-form-item>
<el-date-picker
+ :disabled="viewDetailsDisabled"
popper-class="custom-date-picker"
v-model="dateRange"
type="daterange"
- :clearable="false"
+ :clearable="true"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
@@ -58,10 +62,12 @@
</el-form-item>
<el-form-item label="文件格式:">
<el-select
+ :disabled="foldersDisabled || viewDetailsDisabled"
:teleported="false"
v-model="searchForm.resultType"
placeholder="请选择"
clearable
+ @change="handleSearch"
>
<el-option
v-for="item in fileFormatOption"
@@ -74,12 +80,14 @@
</el-form-item>
<el-form-item label="文件类别:">
<el-select
- :disabled="disabled"
+
+ :disabled="disabled || foldersDisabled || viewDetailsDisabled"
:teleported="false"
v-model="searchForm.photoType"
placeholder="请选择"
clearable
@clear="changePhotoType"
+ @change="handleSearch"
>
<el-option
v-for="item in CategoryOption"
@@ -92,21 +100,29 @@
</div>
<div class="search-first">
<el-form-item label="文件名称:">
- <el-input v-model="searchForm.name" placeholder="请输入" clearable />
+ <el-input :disabled="foldersDisabled || viewDetailsDisabled" v-model="searchForm.name" placeholder="请输入" clearable />
</el-form-item>
<div class="search-btn">
- <el-button type="primary" icon="el-icon-search" @click="handleSearch">搜索</el-button>
- <el-button icon="el-icon-refresh" @click="handleReset">清空</el-button>
+ <el-button type="primary" icon="el-icon-search" @click="handleSearch">搜索</el-button>
+ <el-button icon="el-icon-refresh" @click="handleReset">清空</el-button>
</div>
</div>
<div class="search-first">
<div class="search-btn">
- <el-button type="primary" icon="el-icon-download" @click="allDownloadFun"
- >全部下载</el-button
- >
- <el-button type="success" plain icon="el-icon-download" @click="downloadFun"
- >下载</el-button
- >
+<!-- <el-button type="primary" icon="el-icon-download" @click="allDownloadFun"-->
+<!-- >全部下载</el-button-->
+<!-- >-->
+ <el-button v-if="!viewDetailsDisabled" type="primary" plain @click="handleswitchFolders" ><el-icon><FolderOpened /></el-icon></el-button>
+ <div class="downloadBtn" @click="htsjzx === 100 && downloadFun()">
+ <el-progress v-if="htsjzx !== 100" :percentage="htsjzx" :show-text="false" striped striped-flow :duration="1" />
+ <div class="downloadBtnText">
+ <span v-if="htsjzx === 100">下载</span>
+ <template v-else>
+ 处理中<el-icon @click="cancelDownload"><CircleClose /></el-icon>
+ </template>
+ </div>
+ </div>
+ <el-button v-if="viewDetailsDisabled" type="primary" plain @click="handleBack" >返回</el-button>
</div>
</div>
</el-form>
@@ -120,15 +136,19 @@
import { useStore } from 'vuex';
import { getRegionTreeAll, getDeviceRegion, deptsByAreaCode } from '@/api/job/task';
import { watch } from 'vue';
+import { cancelDownloadApi, getDownloadStatusApi } from '@/api/dataCenter/dataCenter';
+import EventBus from '@/utils/eventBus';
const store = useStore();
const userAreaCode = computed(() => store.getters.userInfo.detail.areaCode);
const selectedAreaCode = computed(() => store.state.user.selectedAreaCode);
-const emit = defineEmits(['search', 'downFun', 'allDownFun']);
+const htsjzx = computed(() => store.state.common.downloadProgress?.htsjzx || 100)
+const emit = defineEmits(['search', 'Reset','downFun', 'allDownFun','handleswitchFolders','handleBack']);
const startTime = dayjs().subtract(6, 'day').startOf('day');
const endTime = dayjs().endOf('day');
const timeRange = [startTime.format('YYYY-MM-DD HH:mm:ss'), endTime.format('YYYY-MM-DD HH:mm:ss')];
const dateRange = ref(timeRange);
const timeFormat = 'YYYY-MM-DD HH:mm:ss';
+const props = defineProps(['searchjobId','switchFolders','viewDetails'])
const searchForm = reactive({
jobName: '', //任务名称
name: '', //文件名称
@@ -138,6 +158,7 @@
deviceSn: '', // 所属机巢
resultType: '', //文件格式
photoType: '', //文件类别
+ wayLineJobId:''
});
const disabled = ref(false);
const treeProps = {
@@ -165,7 +186,7 @@
{
value: '5',
label: '全景',
-
+
},
{
value: '4',
@@ -194,6 +215,26 @@
},
{ deep: true }
);
+watch(() => props.searchjobId, (newVal) => {
+ searchForm.wayLineJobId = newVal;
+ handleSearch()
+});
+const foldersDisabled = ref(false)
+watch(() => props.switchFolders, (newVal) => {
+if(newVal === true){
+ foldersDisabled.value = true
+}else{
+ foldersDisabled.value = false
+}
+});
+const viewDetailsDisabled = ref(false)
+watch(() => props.viewDetails, (newVal) => {
+if(newVal === true){
+ viewDetailsDisabled.value = true
+}else{
+ viewDetailsDisabled.value = false
+}
+});
const changePhotoType =(val)=>{
if(val === undefined){
searchForm.photoType = ''
@@ -226,14 +267,13 @@
// 更新搜索表单中的时间
searchForm.startTime = start.format(timeFormat);
searchForm.endTime = end.format(timeFormat);
+ handleSearch()
}
-
};
// 部门下得机巢
const requestDockInfo = () => {
getRegionTreeAll({ parentCode: userAreaCode.value }).then(res => {
deptTreeData.value = res.data.data ? [res.data.data] : [];
-
handleNodeClick({ id: userAreaCode.value });
});
};
@@ -241,18 +281,18 @@
// 处理机巢数据
searchForm.deviceSn = '';
machineData.value = '';
-
const droneList = await getDeviceRegion({ areaCode: data.id });
-
machineData.value = droneList?.data?.data;
+
// 默认选中值
if (signDevice_sn.value) {
searchForm.deviceSn = signDevice_sn.value;
}
// 所属部门重新请求值
-
deptData.value = [];
getDeptsByAreaCode();
+ handleSearch();
+
};
// 所属部门信息
const getDeptsByAreaCode = () => {
@@ -290,8 +330,10 @@
searchForm.deviceSn = '';
searchForm.resultType = '';
searchForm.photoType = '';
+ searchForm.wayLineJobId=''
handleNodeClick({ id: userAreaCode.value });
handleSearch();
+ emit('Reset', searchForm);
};
// 下载
const downloadFun = () => {
@@ -301,8 +343,31 @@
const allDownloadFun = () => {
emit('allDownFun');
};
+
+function cancelDownload() {
+ cancelDownloadApi({ type:'htsjzx' }).then(res =>{
+ ElMessage.success('取消成功')
+ })
+}
+// 切换文件夹
+const handleswitchFolders =()=>{
+ emit('handleswitchFolders');
+}
+// 返回按钮
+const handleBack = ()=>{
+ emit('handleBack');
+}
onMounted(() => {
requestDockInfo();
+ getDownloadStatusApi({type: 'htsjzx'}).then(res =>{
+ if (!['CANCELLED','COMPLETED'].includes(res.data.data?.status || 'COMPLETED')){
+ EventBus.emit('useDownloadWs-messageHandler',res.data.data)
+ }
+ })
+});
+
+defineExpose({
+ handleReset,
});
</script>
@@ -319,7 +384,54 @@
justify-content: space-between;
.search-btn {
+ display: flex;
+ align-items: center;
margin-right: 32px;
+
+ .downloadBtn{
+ margin:0 10px;
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 28px;
+ padding: 0 15px;
+ background: rgb(239.8,248.9,235.3);
+ border-radius: 4px 4px 4px 4px;
+ border: 1px solid rgb(179,224.5,156.5);
+ cursor: pointer;
+ color: #67c23a;
+ font-size: 14px;
+
+ .downloadBtnText{
+ display: flex;
+ align-items: center;
+ gap: 5px;
+ z-index: 5;
+ }
+ .el-progress{
+ height: 100%;
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+
+ :deep(){
+ .el-progress-bar__outer{
+ height: 26px !important;
+ border-radius: 0 !important;
+ background: transparent !important;
+
+ .el-progress-bar__inner{
+ border-radius: 0 !important;
+ background-color: #e5ffd9;
+ }
+ }
+ }
+ }
+
+ }
+
}
.time-card {
text-align: center;
--
Gitblit v1.9.3