From fb83485ab14cdf80ce394ab3e7d38a9dd8439516 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Fri, 17 Oct 2025 15:51:44 +0800
Subject: [PATCH] Merge branch 'feature/v7.0/7.0.1' of http://139.196.74.78:10010/r/drone/drone-web-manage into feature/v7.0/7.0.1
---
src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue | 2
src/views/tickets/ticket.vue | 2
src/views/resource/components/spotDetails.vue | 40 +++++-
src/api/system/role.js | 3
src/views/system/user.vue | 4
src/views/system/helpCenter.vue | 68 +++++++---
src/views/device/airport.vue | 58 ++++++++-
src/views/device/components/firmwareManage.vue | 6
src/views/device/devicePerMenu.vue | 2
src/option/system/dict.js | 2
src/views/wel/components/backlog.vue | 9
src/views/dataCenter/components/searchData.vue | 2
src/views/algorithmRepository/algorithmRepository.vue | 4
src/views/resource/wayline.vue | 2
src/views/job/components/DeviceJobDetails.vue | 5
src/components/CreateQRcode/CreateQRcode.vue | 2
src/api/system/menu.js | 6
src/views/system/dept.vue | 50 ++++++--
src/store/modules/user.js | 4
src/api/user.js | 3
src/views/device/components/devicePerShare.vue | 5
src/views/system/menu.vue | 11 +
src/views/device/addDevice.vue | 4
src/styles/element-ui.scss | 12 +
src/views/authority/role.vue | 23 +++
src/views/job/components/SearchBox.vue | 6
src/views/tickets/orderLog.vue | 4
src/assets/images/warn.svg | 10 +
28 files changed, 259 insertions(+), 90 deletions(-)
diff --git a/src/api/system/menu.js b/src/api/system/menu.js
index 7050c95..7574974 100644
--- a/src/api/system/menu.js
+++ b/src/api/system/menu.js
@@ -98,11 +98,9 @@
method: 'get',
});
-export const getRoutes = topMenuId =>
+export const getRoutes = params =>
request({
url: '/blade-system/menu/routes',
method: 'get',
- params: {
- topMenuId,
- },
+ params
});
diff --git a/src/api/system/role.js b/src/api/system/role.js
index dadd865..aaae6bb 100644
--- a/src/api/system/role.js
+++ b/src/api/system/role.js
@@ -20,10 +20,11 @@
});
};
-export const grantTree = () => {
+export const grantTree = (params) => {
return request({
url: '/blade-system/menu/grant-tree',
method: 'get',
+ params
});
};
diff --git a/src/api/user.js b/src/api/user.js
index 37d8f12..7785c82 100644
--- a/src/api/user.js
+++ b/src/api/user.js
@@ -122,10 +122,11 @@
},
});
-export const getButtons = () =>
+export const getButtons = (params) =>
request({
url: '/blade-system/menu/buttons',
method: 'get',
+ params
});
export const getCaptcha = () =>
diff --git a/src/assets/images/warn.svg b/src/assets/images/warn.svg
new file mode 100644
index 0000000..5e955c2
--- /dev/null
+++ b/src/assets/images/warn.svg
@@ -0,0 +1,10 @@
+<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="Frame" clip-path="url(#clip0_2023_1729)">
+<path id="Vector" d="M10.9609 1.95508C5.96561 1.95508 1.91602 6.00424 1.91602 11C1.91602 15.9958 5.96561 20.0449 10.9609 20.0449C15.9563 20.0449 20.0059 15.9949 20.0059 11C20.0059 6.0051 15.9563 1.95508 10.9609 1.95508ZM10.9609 15.843C10.7528 15.8426 10.5495 15.7805 10.3767 15.6645C10.2038 15.5486 10.0692 15.3841 9.98987 15.1917C9.91052 14.9993 9.88998 14.7877 9.93084 14.5836C9.9717 14.3795 10.0721 14.1921 10.2194 14.0451C10.3668 13.8981 10.5543 13.7981 10.7585 13.7576C10.9626 13.7172 11.1742 13.7381 11.3664 13.8179C11.5587 13.8976 11.723 14.0326 11.8386 14.2056C11.9541 14.3787 12.0158 14.5822 12.0158 14.7903C12.0158 14.9287 11.9885 15.0658 11.9355 15.1936C11.8824 15.3215 11.8047 15.4376 11.7067 15.5354C11.6087 15.6332 11.4924 15.7107 11.3645 15.7635C11.2365 15.8163 11.0994 15.8433 10.9609 15.843ZM12.0158 11.2836C12.0119 11.5607 11.899 11.8252 11.7016 12.0198C11.5042 12.2143 11.2382 12.3234 10.961 12.3234C10.6839 12.3234 10.4179 12.2143 10.2205 12.0198C10.0231 11.8252 9.91022 11.5607 9.90627 11.2836V6.37313C9.91022 6.09599 10.0231 5.83154 10.2205 5.63696C10.4179 5.44238 10.6839 5.3333 10.961 5.3333C11.2382 5.3333 11.5042 5.44238 11.7016 5.63696C11.899 5.83154 12.0119 6.09599 12.0158 6.37313V11.2836Z" fill="#FF0000"/>
+</g>
+<defs>
+<clipPath id="clip0_2023_1729">
+<rect width="22" height="22" fill="white"/>
+</clipPath>
+</defs>
+</svg>
diff --git a/src/components/CreateQRcode/CreateQRcode.vue b/src/components/CreateQRcode/CreateQRcode.vue
index 642de73..7c1d31e 100644
--- a/src/components/CreateQRcode/CreateQRcode.vue
+++ b/src/components/CreateQRcode/CreateQRcode.vue
@@ -21,7 +21,7 @@
qrCodeInstance = new QRCode(myQrCode.value, {
width: 130,
height: 130,
- text: `https://uri.amap.com/marker?position=${transformed}&name=%E4%BA%8B%E4%BB%B6%E7%82%B9`,
+ text: `https://uri.amap.com/marker?position=${transformed}&name=%E4%BA%8B%E4%BB%B6%E7%82%B9&from='ztzf'`,
})
if (myQrCode.value.hasAttribute('title')) {
myQrCode.value.removeAttribute('title')
diff --git a/src/option/system/dict.js b/src/option/system/dict.js
index a5e75fa..e593c9f 100644
--- a/src/option/system/dict.js
+++ b/src/option/system/dict.js
@@ -63,7 +63,7 @@
label: '封存',
prop: 'isSealed',
type: 'switch',
- align: 'center',
+ // align: 'center',
width: 100,
dicData: [
{
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
index 2750ef4..181b52d 100644
--- a/src/store/modules/user.js
+++ b/src/store/modules/user.js
@@ -280,7 +280,7 @@
})
}
return new Promise(resolve => {
- getRoutes(tenantId).then(res => {
+ getRoutes({tenantId,sysType: 1}).then(res => {
const data = res.data.data;
let menu = deepClone(data);
if (!res.data?.data?.length){
@@ -299,7 +299,7 @@
},
GetButtons({ commit }) {
return new Promise(resolve => {
- getButtons().then(res => {
+ getButtons({sysType: 1}).then(res => {
const data = res.data.data;
commit('SET_PERMISSION', data);
resolve();
diff --git a/src/styles/element-ui.scss b/src/styles/element-ui.scss
index ef0d66b..c7378c2 100644
--- a/src/styles/element-ui.scss
+++ b/src/styles/element-ui.scss
@@ -98,7 +98,7 @@
.el-dialog__headerbtn {
position: absolute;
left: 0;
- top: 14px;
+ //top: 14px;
.el-dialog__close {
color: #fff;
@@ -111,10 +111,13 @@
}
.ztzf-drawer-body-basic-container {
+ .el-drawer__header {
+ margin-bottom: 0;
+ }
.el-drawer__body {
display: flex;
flex-direction: column;
-
+
}
}
@@ -177,6 +180,9 @@
.ztzf-form-mange {
.el-form-item {
width: 300px;
+ .el-form-item__content {
+ width: 100%;
+ }
.el-form-item__label {
width: 120px;
}
@@ -228,4 +234,4 @@
box-sizing: border-box;
background: #fafafa;
}
-}
\ No newline at end of file
+}
diff --git a/src/views/algorithmRepository/algorithmRepository.vue b/src/views/algorithmRepository/algorithmRepository.vue
index b3300bb..3b4828a 100644
--- a/src/views/algorithmRepository/algorithmRepository.vue
+++ b/src/views/algorithmRepository/algorithmRepository.vue
@@ -55,7 +55,6 @@
</div>
</div>
<div class="search-btn">
-
<el-button type="primary" icon="el-icon-search" @click="handleSearch">搜索</el-button>
<el-button icon="el-icon-delete" @click="handleReset">清空</el-button>
<el-button type="primary" icon="el-icon-back" @click="goback">返回</el-button>
@@ -365,7 +364,6 @@
}
.search {
display: flex;
- justify-content: space-between;
}
.searchBox {
display: flex;
@@ -381,7 +379,7 @@
.item {
display: flex;
align-items: center;
- margin-right: 49px;
+ margin-right: 40px;
}
}
.search-btn {
diff --git a/src/views/authority/role.vue b/src/views/authority/role.vue
index 44d57ab..9082ed2 100644
--- a/src/views/authority/role.vue
+++ b/src/views/authority/role.vue
@@ -14,9 +14,14 @@
</avue-crud>
<el-dialog title="角色权限配置" append-to-body v-model="box" width="345px">
<el-tabs type="border-card">
- <el-tab-pane label="菜单权限">
+ <el-tab-pane label="后台管理">
<el-tree :data="menuGrantList" show-checkbox node-key="id" ref="treeMenu" :default-checked-keys="menuTreeObj"
:props="props">
+ </el-tree>
+ </el-tab-pane>
+ <el-tab-pane label="移动app">
+ <el-tree :data="menuGrantListApp" show-checkbox node-key="id" ref="treeMenuApp" :default-checked-keys="menuTreeObjApp"
+ :props="props">
</el-tree>
</el-tab-pane>
<!-- <el-tab-pane label="数据权限">
@@ -76,10 +81,12 @@
value: 'key',
},
menuGrantList: [],
+ menuGrantListApp: [],
dataScopeGrantList: [],
apiScopeGrantList: [],
apiGrantList: [],
menuTreeObj: [],
+ menuTreeObjApp: [],
dataScopeTreeObj: [],
apiScopeTreeObj: [],
selectionList: [],
@@ -230,11 +237,12 @@
},
submit () {
const menuList = this.$refs.treeMenu.getCheckedKeys()
+ const menuListApp = this.$refs.treeMenuApp.getCheckedKeys()
// const dataScopeList = this.$refs.treeDataScope.getCheckedKeys();
const dataScopeList = []
// const apiScopeList = this.$refs.treeApiScope.getCheckedKeys();
const apiScopeList = []
- grant(this.idsArray, menuList, dataScopeList, apiScopeList).then(() => {
+ grant(this.idsArray, [...menuList,...menuListApp], dataScopeList, apiScopeList).then(() => {
this.box = false
this.$message({
type: 'success',
@@ -324,7 +332,7 @@
this.menuTreeObj = []
this.dataScopeTreeObj = []
this.apiScopeTreeObj = []
- grantTree().then(res => {
+ grantTree({sysType: 1}).then(res => {
this.menuGrantList = res.data.data.menu
this.dataScopeGrantList = res.data.data.dataScope
this.apiScopeGrantList = res.data.data.apiScope
@@ -332,6 +340,13 @@
this.menuTreeObj = res.data.data.menu
this.dataScopeTreeObj = res.data.data.dataScope
this.apiScopeTreeObj = res.data.data.apiScope
+ this.box = true
+ })
+ })
+ grantTree({sysType: 3}).then(res => {
+ this.menuGrantListApp = res.data.data.menu
+ getRole(this.ids).then(res => {
+ this.menuTreeObjApp = res.data.data.menu
this.box = true
})
})
@@ -378,4 +393,4 @@
},
}
</script>
-<style scoped lang="scss"></style>
\ No newline at end of file
+<style scoped lang="scss"></style>
diff --git a/src/views/dataCenter/components/searchData.vue b/src/views/dataCenter/components/searchData.vue
index de86787..1988466 100644
--- a/src/views/dataCenter/components/searchData.vue
+++ b/src/views/dataCenter/components/searchData.vue
@@ -359,6 +359,8 @@
function cancelDownload() {
cancelDownloadApi({ type:'htsjzx' }).then(res =>{
ElMessage.success('取消成功')
+ }).catch(e =>{
+ EventBus.emit('useGlobalWS-messageHandler', {biz_code: 'DOWNLOAD_PROGRESS',data:{status: 'CANCELLED',type:'htsjzx'}})
})
}
// 切换文件夹
diff --git a/src/views/device/addDevice.vue b/src/views/device/addDevice.vue
index 6391862..a8a95d0 100644
--- a/src/views/device/addDevice.vue
+++ b/src/views/device/addDevice.vue
@@ -11,7 +11,7 @@
@click.stop="copyInfo(scope.row, scope.index)" v-if="userInfo.role_name.includes('admin')">复制
</el-button>
</template>
- </avue-crud>F
+ </avue-crud>
</basic-container>
</template>
@@ -217,7 +217,7 @@
prop: 'area_code',
// type: 'cascader',
type: 'tree',
- labelWidth: 145,
+ labelWidth: 130,
searchSpan: 4,
hide: true,
search: true,
diff --git a/src/views/device/airport.vue b/src/views/device/airport.vue
index 62f7d00..dc81630 100644
--- a/src/views/device/airport.vue
+++ b/src/views/device/airport.vue
@@ -132,15 +132,16 @@
<el-input v-model="operate_password" disabled></el-input>
</el-dialog>
- <el-dialog title="注销" class="zx-cancel" append-to-body v-model="cancenOperate" width="460px">
- <div style="display: flex;justify-content: center;margin-bottom: 10px;">注销
- <span style="color:cornflowerblue;font-weight: bolder;margin: 0px 4px;">
+ <el-dialog title="注销" class="ztzf-dialog-mange zx-cancel" append-to-body v-model="cancenOperate" width="560px">
+ <div class="txt-contain">
+ <img :src="warnSvg" />注销
+ <span class="name">
{{ cancelSNName }}
</span> 设备可能会影响相关数据,确认注销吗?
</div>
- <div style="display: flex;justify-content: center;color:red;font-size: 12px;">*删除相关图片、视频、事件</div>
+ <div class="delete-txt">*删除相关图片、视频、事件</div>
<template #footer>
- <span class="dialog-footer" style="display: flex;justify-content: center;">
+ <span class="dialog-footer">
<el-button @click="cancenOperate = false">取 消</el-button>
<el-button type="primary" @click="cancenOperateDo">确 定</el-button>
</span>
@@ -231,8 +232,10 @@
import FirmwareManage from './components/firmwareManage.vue'
import DevicePerShare from './components/devicePerShare.vue'
import DockControlPanel from './components/DockControlPanel.vue'
-import { getWebsocketUrl } from '@/utils/websocket/config'
-import ConnectWebSocket from '@/utils/websocket'
+import { getWebsocketUrl } from '@/utils/websocket/config';
+import ConnectWebSocket from '@/utils/websocket';
+import warnSvg from '@/assets/images/warn.svg'
+
export default {
components: {
FirmwareManage,
@@ -264,6 +267,7 @@
password: [{ required: true, validator: validatePass, trigger: 'blur' }],
password2: [{ required: true, validator: validatePass2, trigger: 'blur' }],
},
+ warnSvg: warnSvg,
cancelSNName: '',
cancenOperate: false,
cancenOperateRow: {},
@@ -1564,4 +1568,44 @@
height: 190px;
right: 0;
}
+
+:deep(.avue-crud__pagination) {
+ position: fixed;
+ bottom: 10px;
+ right: 30px;
+}
+
+.force-center-dialog .el-dialog {
+
+}
+.zx-cancel {
+ .txt-contain {
+ display: flex;
+ justify-content: center;
+ margin-bottom: 20px;
+ font-family: Source Han Sans CN, Source Han Sans CN;
+ font-weight: 400;
+ font-size: 14px;
+ img {
+ width: 20px;
+ height: 20px;
+ }
+ .name {
+ color: #0E8BFF;
+ margin-left: 6px;
+ margin-right: 6px;
+ }
+
+ }
+ .delete-txt {
+ font-family: Source Han Sans CN, Source Han Sans CN;
+ font-weight: 400;
+ display: flex;
+ justify-content: center;
+ color: #FF0000;
+ font-size: 12px;
+ margin-bottom: 20px;
+ }
+}
+
</style>
diff --git a/src/views/device/components/devicePerShare.vue b/src/views/device/components/devicePerShare.vue
index 511fe0b..8b3feaa 100644
--- a/src/views/device/components/devicePerShare.vue
+++ b/src/views/device/components/devicePerShare.vue
@@ -39,6 +39,7 @@
index: true,
viewBtn: true,
addBtn: true,
+ editBtn: false,
selection: true,
excelBtn: false,
dialogClickModal: false,
@@ -119,7 +120,7 @@
editDisplay: false,
span: 24,
row: true,
- width: 160,
+ width: 200,
format: 'YYYY-MM-DD HH:mm:ss',
},
],
@@ -134,7 +135,7 @@
addBtn: this.validData(this.permission.airport_add, true),
viewBtn: this.validData(this.permission.airport_view, true),
delBtn: this.validData(this.permission.airport_delete, true),
- editBtn: this.validData(this.permission.airport_edit, true),
+ editBtn: this.validData(this.permission.airport_edit, false),
}
},
ids () {
diff --git a/src/views/device/components/firmwareManage.vue b/src/views/device/components/firmwareManage.vue
index a08af72..aa0b3e7 100644
--- a/src/views/device/components/firmwareManage.vue
+++ b/src/views/device/components/firmwareManage.vue
@@ -435,4 +435,8 @@
/* color: aqua; */
}
</style>
-<style scoped lang="scss"></style>
+<style scoped lang="scss">
+.upload-demo {
+ height: 30px;
+}
+</style>
diff --git a/src/views/device/devicePerMenu.vue b/src/views/device/devicePerMenu.vue
index 6986bfa..ef97045 100644
--- a/src/views/device/devicePerMenu.vue
+++ b/src/views/device/devicePerMenu.vue
@@ -79,6 +79,8 @@
},
{
label: '绑定菜单',
+ searchSpan: 5,
+ span: 24,
prop: 'menu_id',
type: 'tree',
dicUrl: '/blade-system/menu/deviceButtons',
diff --git a/src/views/job/components/DeviceJobDetails.vue b/src/views/job/components/DeviceJobDetails.vue
index 922545d..d32dadd 100644
--- a/src/views/job/components/DeviceJobDetails.vue
+++ b/src/views/job/components/DeviceJobDetails.vue
@@ -162,6 +162,7 @@
import { droneEventList } from '../const/drc'
import { ElMessage,ElLoading } from 'element-plus'
import { useStore } from 'vuex';
+import EventBus from '@/utils/eventBus';
const store = useStore();
const htlsrwxq = computed(() => store.state.common.downloadProgress?.htlsrwxq || 100)
const isShow = defineModel('show')
@@ -350,7 +351,9 @@
function cancelDownload() {
cancelDownloadApi({ type:'htlsrwxq' }).then(res =>{
ElMessage.success('取消成功')
- })
+ }).catch(e =>{
+ EventBus.emit('useGlobalWS-messageHandler', {biz_code: 'DOWNLOAD_PROGRESS',data:{status: 'CANCELLED',type:'htlsrwxq'}})
+ })
}
onMounted(() => {
getDetails()
diff --git a/src/views/job/components/SearchBox.vue b/src/views/job/components/SearchBox.vue
index 2752438..d69206c 100644
--- a/src/views/job/components/SearchBox.vue
+++ b/src/views/job/components/SearchBox.vue
@@ -14,7 +14,8 @@
check-strictly
node-key="id"
:props="treeProps"
- @node-click="handleNodeClick"
+ clearable
+ @change="handleNodeClick"
/>
</el-form-item>
<el-form-item label="所属机巢:">
@@ -61,7 +62,7 @@
<div class="more" v-if="isExpand" @click="toggleExpand">收起</div>
<div class="more" v-else @click="toggleExpand">更多</div>
<div class="search-btn" :style="{ bottom: isExpand ? '5px' : '-3px' }">
-
+
<el-button type="primary" icon="el-icon-search" @click="handleSearch">搜索</el-button>
<el-button icon="el-icon-refresh" @click="handleReset">清空</el-button>
</div>
@@ -89,7 +90,6 @@
collapse-tags
collapse-tags-tooltip
clearable
- @node-click="handleNodeClick"
@check="handleCheck"
@clear="handleClear"
/>
diff --git a/src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue b/src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue
index 6b34eeb..2cd9618 100644
--- a/src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue
+++ b/src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue
@@ -17,7 +17,7 @@
</el-tooltip-copy>
</template>
</el-table-column>
- <el-table-column prop="name" label="任务编号" width="160">
+ <el-table-column prop="name" label="任务名称" width="160">
<template #default="scope">
<el-tooltip-copy :content="scope.row.name" :showCopyText="true">
{{scope.row.name}}
diff --git a/src/views/resource/components/spotDetails.vue b/src/views/resource/components/spotDetails.vue
index 13bcdc7..28eb3a8 100644
--- a/src/views/resource/components/spotDetails.vue
+++ b/src/views/resource/components/spotDetails.vue
@@ -133,6 +133,8 @@
import * as Cesium from 'cesium';
import { PublicCesium } from '@/utils/cesium/publicCesium';
import { ref, watch, onBeforeUnmount, onMounted } from 'vue';
+// 标记地图是否初始化完成
+const isMapReady = ref(false);
const uploadPatchDialog = defineModel('show');
const props = defineProps(['title', 'detailid', 'detailList', 'spotTypeOption', 'regionalData']);
const polygonTableEle = ref(null);
@@ -266,9 +268,8 @@
// 地图
const initMap = () => {
- if (!document.getElementById('spotMap')) {
- return;
- }
+ if (!document.getElementById('spotMap') || isMapReady.value) return;
+
publicCesiumInstance = new PublicCesium({
dom: 'spotMap',
flatMode: false,
@@ -276,12 +277,33 @@
layerMode: 4,
contour: false,
});
+
homeViewer.value = publicCesiumInstance.getViewer();
viewer = publicCesiumInstance.getViewer();
- viewInstance.value = publicCesiumInstance;
+ viewInstance.value = publicCesiumInstance;
viewer.scene.globe.depthTestAgainstTerrain = true;
viewInstance.value.switchContour(true);
+
+ // 确保 readyPromise 存在
+ if (viewer.readyPromise) {
+ viewer.readyPromise.then(() => {
+ isMapReady.value = true;
+ getTableList();
+ }).catch((error) => {
+ console.error('地图加载失败:', error);
+ ElMessage.error('地图加载失败,请刷新重试');
+ });
+ } else {
+
+ // 如果没有 readyPromise
+ setTimeout(() => {
+ isMapReady.value = true;
+ getTableList();
+ }, 1000);
+ }
};
+
+
// 仅弹框初始化时执行的定位逻辑
const initMapLocation = () => {
if (tbJwdList.length === 0 || !homeViewer.value) return;
@@ -303,6 +325,7 @@
};
// 初始化所有图斑
const entitiesAddSpot = () => {
+if (!isMapReady.value || !viewer) return;
viewer?.entities.removeAll();
tbJwdList = []; // 重置经纬度列表
@@ -594,20 +617,21 @@
watch(uploadPatchDialog, newVal => {
if (newVal) {
-
isInit.value = true;
+ isMapReady.value = false;
setTimeout(() => {
initMap();
- getTableList();
- getspotManagementTableApi();
+ getspotManagementTableApi();
}, 0);
} else {
- tableData.value = [];
+
+ tableData.value = [];
isEditing.value = false;
handleUpDateDrawState(false);
destroyMap();
isInit.value = false;
clearSelect();
+ isMapReady.value = false;
}
refreshonload();
});
diff --git a/src/views/resource/wayline.vue b/src/views/resource/wayline.vue
index cab5ac2..52ea83f 100644
--- a/src/views/resource/wayline.vue
+++ b/src/views/resource/wayline.vue
@@ -47,7 +47,7 @@
searchMenuSpan: 4,
border: true,
index: true,
- selection: true,
+ // selection: true,
dialogClickModal: false,
menu: false, // 禁用默认操作列
diff --git a/src/views/system/dept.vue b/src/views/system/dept.vue
index 809dc7a..c9bf5c3 100644
--- a/src/views/system/dept.vue
+++ b/src/views/system/dept.vue
@@ -40,10 +40,12 @@
import { getLazyTree } from '@/api/base/region'
import { mapGetters } from 'vuex'
import website from '@/config/website'
+import { getList } from '@/api/device/device';
export default {
data () {
return {
+ treeResolveMap: new Map(),
form: {},
selectionList: [],
query: {},
@@ -383,6 +385,14 @@
type: 'success',
message: '操作成功!',
})
+ this.parentId = ''
+ const resolve = this.treeResolveMap.get(row.parentId)
+ if (resolve) {
+ // 重新加载子节点数据
+ getChildLazyTree({ parentId: row.parentId }).then(res => {
+ resolve(res.data.data)
+ })
+ }
this.onLoad(this.page)
done(row)
},
@@ -398,7 +408,7 @@
loading()
return
}
- console.log('--- Start rowUpdate ---')
+ // console.log('--- Start rowUpdate ---')
// 提交时只使用县级代码
const submitData = {
@@ -406,27 +416,33 @@
areaCode: row.areaCode.split(',').pop(), // 取最后一个代码(县级)
}
- console.log('Row data before submit:', row)
+ console.log('编辑', row)
update(submitData)
.then(
res => {
- console.log('Update response:', res.data)
+ const resolve = this.treeResolveMap.get(row.parentId)
+ if (resolve) {
+ // 重新加载子节点数据
+ getChildLazyTree({ parentId: row.parentId }).then(res => {
+ resolve(res.data.data)
+ })
+ }
+ this.onLoad(this.page)
this.$message({
type: 'success',
message: '操作成功!',
})
- this.onLoad(this.page)
done(row)
},
error => {
- console.log('Update error:', error)
+ // console.log('Update error:', error)
this.loading = false
loading()
}
)
.catch(error => {
- console.log('Update promise rejected:', error)
+ // console.log('Update promise rejected:', error)
this.loading = false
})
},
@@ -440,11 +456,18 @@
return remove(row.id)
})
.then(() => {
+ const resolve = this.treeResolveMap.get(row.parentId)
+ if (resolve) {
+ // 重新加载子节点数据
+ getChildLazyTree({ parentId: row.parentId }).then(res => {
+ resolve(res.data.data)
+ })
+ }
+ this.onLoad(this.page)
this.$message({
type: 'success',
message: '操作成功!',
})
- this.onLoad(this.page)
done(row)
})
},
@@ -546,11 +569,11 @@
},
onLoad (page, params = {}) {
this.loading = true
- console.log('onLoad triggered with page:', page, 'params:', params)
- console.log('Current parentId:', this.parentId, 'query:', this.query)
+ // console.log('onLoad triggered with page:', page, 'params:', params)
+ // console.log('Current parentId:', this.parentId, 'query:', this.query)
getLazyList(this.parentId, Object.assign(params, this.query))
.then(res => {
- console.log('onLoad response:', res.data)
+ // console.log('onLoad response:', res.data)
// 处理 areaCode,确保是单一字符串
const data = (res.data.data || []).map(item => {
const fullAreaCode = this.getFullAreaCode(item.areaCode)
@@ -565,16 +588,17 @@
this.data = data
this.loading = false
this.selectionClear()
- console.log('Table data after onLoad:', this.data)
+ // console.log('Table data after onLoad:', this.data)
})
.catch(error => {
- console.log('onLoad error:', error)
+ // console.log('onLoad error:', error)
this.loading = false
this.data = this.data // 保留当前数据
- console.log('Table data after onLoad error:', this.data)
+ // console.log('Table data after onLoad error:', this.data)
})
},
treeLoad (tree, treeNode, resolve) {
+ this.treeResolveMap.set(tree.id, resolve)
getChildLazyTree({ parentId: tree.id }).then(res => {
resolve(res.data.data)
})
diff --git a/src/views/system/helpCenter.vue b/src/views/system/helpCenter.vue
index 0d61b93..8860f3c 100644
--- a/src/views/system/helpCenter.vue
+++ b/src/views/system/helpCenter.vue
@@ -17,22 +17,37 @@
<el-table-column prop="levelTwoType" label="二级类别" />
<el-table-column prop="uploadUser" label="上传者" />
<el-table-column prop="createTime" label="上传时间" />
- <el-table-column label="操作" width="150" align="center">
- <template #default="scope">
- <span class="look" @click="clickDetail(scope.row)" v-if="permission.helpCenterLook"
- >查看</span
- >
- <el-upload
- style="display: inline-block"
- :show-file-list="false"
- :before-upload="file => onUploadFileBefore(file, scope.row)"
- :limit="1"
- accept=".pdf"
- >
- <span class="uploads" v-if="permission.helpCenterUpload">上传</span>
- </el-upload>
- </template>
- </el-table-column>
+ <el-table-column label="操作" width="200" align="center">
+ <template #default="scope">
+ <div class="actionBar" >
+ <el-button
+ class="look"
+ icon="el-icon-view"
+ type="text"
+ @click="clickDetail(scope.row)"
+ v-if="permission.helpCenterLook"
+ >
+ 查看
+ </el-button>
+ <el-upload
+ style="display: inline-block"
+ :show-file-list="false"
+ :before-upload="file => onUploadFileBefore(file, scope.row)"
+ :limit="1"
+ accept=".pdf"
+ >
+ <el-button
+ class="uploads"
+ icon="el-icon-upload"
+ type="text"
+ v-if="permission.helpCenterUpload"
+ >
+ 上传
+ </el-button>
+ </el-upload>
+ </div>
+ </template>
+</el-table-column>
</el-table>
</div>
</basic-container>
@@ -146,18 +161,25 @@
.helpContainer {
height: 100%;
.look {
- font-family: Source Han Sans CN, Source Han Sans CN;
- color: #1c5cff;
+ // font-family: Source Han Sans CN, Source Han Sans CN;
+ // color: #1c5cff;
cursor: pointer;
margin-right: 15px;
- font-size: 14px;
+ // font-size: 14px;
}
.uploads {
- font-family: Source Han Sans CN, Source Han Sans CN;
- font-weight: 400;
- font-size: 14px;
- color: #19876d;
+ // font-family: Source Han Sans CN, Source Han Sans CN;
+ // font-weight: 400;
+ // font-size: 14px;
+ // color: #19876d;
cursor: pointer;
+
+ }
+ .actionBar {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 8px;
}
:deep(.custom-header th.el-table__cell) {
color: rgba(0, 0, 0, 0.85);
diff --git a/src/views/system/menu.vue b/src/views/system/menu.vue
index 1d10305..dceee19 100644
--- a/src/views/system/menu.vue
+++ b/src/views/system/menu.vue
@@ -38,7 +38,8 @@
data () {
return {
form: {},
- query: {},
+ query: {
+ },
loading: true,
selectionList: [],
parentId: 0,
@@ -180,6 +181,8 @@
prop: 'sysType',
type: 'radio',
value: 1,
+ search: true,
+ searchSpan: 4,
dicData: [
{
label: '后台管理',
@@ -188,6 +191,10 @@
{
label: '大屏',
value: 2,
+ },
+ {
+ label: '移动app',
+ value: 3,
},
],
hide: true,
@@ -468,4 +475,4 @@
.namei {
margin-right: 5px;
}
-</style>
\ No newline at end of file
+</style>
diff --git a/src/views/system/user.vue b/src/views/system/user.vue
index c4104e5..83ad8b5 100644
--- a/src/views/system/user.vue
+++ b/src/views/system/user.vue
@@ -519,6 +519,7 @@
column: [
{
label: '到期时间',
+ labelWidth: 110,
prop: 'expireTime',
type: 'datetime',
format: 'YYYY-MM-DD HH:mm:ss',
@@ -526,12 +527,14 @@
},
{
label: '次数限制',
+ labelWidth: 110,
prop: 'maxLoginNum',
type: 'input',
},
{
label: '飞行开始时间',
+ labelWidth: 110,
prop: 'flightStartTime',
type: 'time',
format: 'HH:mm',
@@ -546,6 +549,7 @@
},
{
label: '飞行结束时间',
+ labelWidth: 110,
prop: 'flightEndTime',
type: 'time',
format: 'HH:mm',
diff --git a/src/views/tickets/orderLog.vue b/src/views/tickets/orderLog.vue
index 0a6f5b5..46e87d8 100644
--- a/src/views/tickets/orderLog.vue
+++ b/src/views/tickets/orderLog.vue
@@ -579,7 +579,8 @@
<el-col :span="3">
<el-time-picker
- style="width: 100px"
+ class="timeStyle"
+ :style="{width:pxToRem(140)}"
v-model="form.deal_time"
prop="deal_time"
value-format="HH:mm"
@@ -861,6 +862,7 @@
</template>
<script>
+import { pxToRem, pxToRemNum } from '@/utils/rem'
import { calculateDefaultRange } from '@/utils/util';
import {
getList,
diff --git a/src/views/tickets/ticket.vue b/src/views/tickets/ticket.vue
index b6bba07..75dec34 100644
--- a/src/views/tickets/ticket.vue
+++ b/src/views/tickets/ticket.vue
@@ -685,7 +685,7 @@
:src="getThumbUrl(currentDetail.mediaUrl)"
:preview-src-list="[getPreviewUrl(currentDetail.mediaUrl)]"
fit="contain"
- style="pxToRemNum(width: 700px); pxToRemNum(height: 520px); cursor: pointer"
+ style=" cursor: pointer"
>
<template #placeholder>
<div class="image-placeholder">
diff --git a/src/views/wel/components/backlog.vue b/src/views/wel/components/backlog.vue
index 37a1a3c..c106d5c 100644
--- a/src/views/wel/components/backlog.vue
+++ b/src/views/wel/components/backlog.vue
@@ -60,7 +60,9 @@
import { onMounted } from 'vue'
import { useRouter } from 'vue-router'
import { useStore } from 'vuex'
-
+const userInfo = computed(() => store.getters.userInfo)
+const todos = ref([])
+const loading = ref(false)
const router = useRouter()
const store = useStore()
const permission = computed(() => store.getters.permission)
@@ -83,12 +85,11 @@
])
const titleClick = async (item, index) => {
+todos.value =[]
checked.value = item.name
await getListMatter()
}
-const userInfo = computed(() => store.getters.userInfo)
-const todos = ref([])
-const loading = ref(false)
+
// * 事件工单中2=待审核,0=待处理,3=处理中
// * 智飞工单中1: 待审核,2=已驳回,3=已通过
const statusMap = {
--
Gitblit v1.9.3