|
|
@ -6,8 +6,10 @@ |
|
|
<!-- cesiummap组件 --> |
|
|
<!-- cesiummap组件 --> |
|
|
<cesiumMap ref="cesiumMap" :drawDomClick="drawDom || airspaceDrawDom" |
|
|
<cesiumMap ref="cesiumMap" :drawDomClick="drawDom || airspaceDrawDom" |
|
|
:tool-mode="drawDom ? 'ranging' : (airspaceDrawDom ? 'airspace' : 'airspace')" |
|
|
:tool-mode="drawDom ? 'ranging' : (airspaceDrawDom ? 'airspace' : 'airspace')" |
|
|
|
|
|
:scaleConfig="scaleConfig" |
|
|
@draw-complete="handleMapDrawComplete" |
|
|
@draw-complete="handleMapDrawComplete" |
|
|
@open-waypoint-dialog="handleOpenWaypointEdit" |
|
|
@open-waypoint-dialog="handleOpenWaypointEdit" |
|
|
|
|
|
@scale-click="handleScaleClick" /> |
|
|
@open-route-dialog="handleOpenRouteEdit" /> |
|
|
@open-route-dialog="handleOpenRouteEdit" /> |
|
|
<div class="map-overlay-text"> |
|
|
<div class="map-overlay-text"> |
|
|
<i class="el-icon-location-outline text-3xl mb-2 block"></i> |
|
|
<i class="el-icon-location-outline text-3xl mb-2 block"></i> |
|
|
@ -67,6 +69,7 @@ |
|
|
:can-set-k-time="canSetKTime" |
|
|
:can-set-k-time="canSetKTime" |
|
|
:user-avatar="userAvatar" |
|
|
:user-avatar="userAvatar" |
|
|
:is-icon-edit-mode="isIconEditMode" |
|
|
:is-icon-edit-mode="isIconEditMode" |
|
|
|
|
|
:current-scale-config="scaleConfig" |
|
|
@select-nav="selectTopNav" |
|
|
@select-nav="selectTopNav" |
|
|
@set-k-time="openKTimeSetDialog" |
|
|
@set-k-time="openKTimeSetDialog" |
|
|
@save-plan="savePlan" |
|
|
@save-plan="savePlan" |
|
|
@ -269,6 +272,7 @@ |
|
|
v-model="showScaleDialog" |
|
|
v-model="showScaleDialog" |
|
|
:scale="currentScale" |
|
|
:scale="currentScale" |
|
|
@save="saveScale" |
|
|
@save="saveScale" |
|
|
|
|
|
@unit-change="handleScaleUnitChange" |
|
|
/> |
|
|
/> |
|
|
|
|
|
|
|
|
<!-- 外部参数弹窗 --> |
|
|
<!-- 外部参数弹窗 --> |
|
|
@ -331,6 +335,7 @@ import { listRoutes, getRoutes, addRoutes, updateRoutes, delRoutes } from "@/api |
|
|
import { updateWaypoints } from "@/api/system/waypoints"; |
|
|
import { updateWaypoints } from "@/api/system/waypoints"; |
|
|
import { listLib,addLib,delLib} from "@/api/system/lib"; |
|
|
import { listLib,addLib,delLib} from "@/api/system/lib"; |
|
|
import { getRooms, updateRooms } from "@/api/system/rooms"; |
|
|
import { getRooms, updateRooms } from "@/api/system/rooms"; |
|
|
|
|
|
import { getMenuConfig, saveMenuConfig } from "@/api/system/userMenuConfig"; |
|
|
import PlatformImportDialog from "@/views/dialogs/PlatformImportDialog.vue"; |
|
|
import PlatformImportDialog from "@/views/dialogs/PlatformImportDialog.vue"; |
|
|
export default { |
|
|
export default { |
|
|
name: 'MissionPlanningView', |
|
|
name: 'MissionPlanningView', |
|
|
@ -367,7 +372,16 @@ export default { |
|
|
showPowerZoneDialog: false, |
|
|
showPowerZoneDialog: false, |
|
|
currentPowerZone: {}, |
|
|
currentPowerZone: {}, |
|
|
showScaleDialog: false, |
|
|
showScaleDialog: false, |
|
|
currentScale: {}, |
|
|
currentScale: { |
|
|
|
|
|
scaleNumerator: 1, |
|
|
|
|
|
scaleDenominator: 1000, |
|
|
|
|
|
unit: 'm' |
|
|
|
|
|
}, |
|
|
|
|
|
scaleConfig: { |
|
|
|
|
|
scaleNumerator: 1, |
|
|
|
|
|
scaleDenominator: 1000, |
|
|
|
|
|
unit: 'm' |
|
|
|
|
|
}, |
|
|
showExternalParamsDialog: false, |
|
|
showExternalParamsDialog: false, |
|
|
currentExternalParams: {}, |
|
|
currentExternalParams: {}, |
|
|
showPageLayoutDialog: false, |
|
|
showPageLayoutDialog: false, |
|
|
@ -528,10 +542,12 @@ export default { |
|
|
isAdmin() { |
|
|
isAdmin() { |
|
|
const roles = this.$store.getters.roles || []; |
|
|
const roles = this.$store.getters.roles || []; |
|
|
const id = this.$store.getters.id; |
|
|
const id = this.$store.getters.id; |
|
|
|
|
|
const userLevel = String(this.$store.getters.userLevel); |
|
|
return ( |
|
|
return ( |
|
|
roles.includes('admin') || |
|
|
id === '1' || //系统超级管理员 ID |
|
|
String(id) === '1' || |
|
|
userLevel === '1' || //数据库 user_level 字段为管理员 |
|
|
(Array.isArray(roles) && roles.some(r => String(r).toLowerCase() === 'admin')) |
|
|
roles.includes('admin') || //拥有超级管理员角色 |
|
|
|
|
|
roles.includes('manager') //拥有你新定义的“业务管理员”角色 |
|
|
); |
|
|
); |
|
|
}, |
|
|
}, |
|
|
canSetKTime() { |
|
|
canSetKTime() { |
|
|
@ -544,8 +560,9 @@ export default { |
|
|
this.isMenuHidden = true; |
|
|
this.isMenuHidden = true; |
|
|
// 初始化时右侧面板隐藏 |
|
|
// 初始化时右侧面板隐藏 |
|
|
this.isRightPanelHidden = true; |
|
|
this.isRightPanelHidden = true; |
|
|
// 初始化菜单项为默认配置 |
|
|
// 初始化菜单项为默认配置,再尝试加载当前用户已保存的配置 |
|
|
this.menuItems = [...this.defaultMenuItems]; |
|
|
this.menuItems = [...this.defaultMenuItems]; |
|
|
|
|
|
this.loadUserMenuConfig(); |
|
|
|
|
|
|
|
|
// 更新时间 |
|
|
// 更新时间 |
|
|
this.updateTime(); |
|
|
this.updateTime(); |
|
|
@ -1110,6 +1127,10 @@ export default { |
|
|
return `${y}-${m}-${day} ${h}:${min}:${s}`; |
|
|
return `${y}-${m}-${day} ${h}:${min}:${s}`; |
|
|
}, |
|
|
}, |
|
|
openKTimeSetDialog() { |
|
|
openKTimeSetDialog() { |
|
|
|
|
|
console.log("当前登录 ID (myId):", this.$store.getters.id); |
|
|
|
|
|
console.log("当前房间 ownerId:", this.roomDetail ? this.roomDetail.ownerId : '无房间信息'); |
|
|
|
|
|
console.log("当前房间 userLevel:", this.$store.getters.userLevel); |
|
|
|
|
|
console.log("当前角色 roles:", this.$store.getters.roles); |
|
|
if (!this.canSetKTime) { |
|
|
if (!this.canSetKTime) { |
|
|
this.$message.info('仅房主或管理员可设定或修改 K 时'); |
|
|
this.$message.info('仅房主或管理员可设定或修改 K 时'); |
|
|
return; |
|
|
return; |
|
|
@ -1224,8 +1245,14 @@ export default { |
|
|
this.isIconEditMode = false |
|
|
this.isIconEditMode = false |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
handleResetMenuItems() { |
|
|
async handleResetMenuItems() { |
|
|
this.menuItems = [...this.defaultMenuItems] |
|
|
this.menuItems = [...this.defaultMenuItems] |
|
|
|
|
|
try { |
|
|
|
|
|
await saveMenuConfig({ |
|
|
|
|
|
menuItems: JSON.stringify(this.menuItems), |
|
|
|
|
|
position: this.menuPosition || 'left' |
|
|
|
|
|
}) |
|
|
|
|
|
} catch (e) { /* 未登录时仅本地恢复默认 */ } |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
updateMenuItems(newItems) { |
|
|
updateMenuItems(newItems) { |
|
|
@ -1303,8 +1330,43 @@ export default { |
|
|
} |
|
|
} |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
handleSaveMenuItems(savedItems) { |
|
|
async handleSaveMenuItems(savedItems) { |
|
|
this.menuItems = [...savedItems] |
|
|
this.menuItems = [...savedItems] |
|
|
|
|
|
// 持久化到当前账号 |
|
|
|
|
|
try { |
|
|
|
|
|
await saveMenuConfig({ |
|
|
|
|
|
menuItems: JSON.stringify(this.menuItems), |
|
|
|
|
|
position: this.menuPosition || 'left' |
|
|
|
|
|
}) |
|
|
|
|
|
} catch (e) { |
|
|
|
|
|
// 未登录或接口失败时仅本地生效,仍提示保存成功(LeftMenu 已提示) |
|
|
|
|
|
if (e && e.response && e.response.status === 401) { |
|
|
|
|
|
this.$message.info('当前未登录,配置仅在本页有效;登录后保存可同步到账号') |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
/** 加载当前用户的左侧菜单配置(登录且有过保存时生效) */ |
|
|
|
|
|
async loadUserMenuConfig() { |
|
|
|
|
|
try { |
|
|
|
|
|
const res = await getMenuConfig() |
|
|
|
|
|
const data = res && res.data |
|
|
|
|
|
if (!data) return |
|
|
|
|
|
if (data.menuItems) { |
|
|
|
|
|
let arr = [] |
|
|
|
|
|
try { |
|
|
|
|
|
arr = typeof data.menuItems === 'string' ? JSON.parse(data.menuItems) : data.menuItems |
|
|
|
|
|
} catch (e) { /* 解析失败保留默认 */ } |
|
|
|
|
|
if (Array.isArray(arr) && arr.length > 0) { |
|
|
|
|
|
this.menuItems = arr |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
if (data.position && ['left', 'top', 'bottom'].includes(data.position)) { |
|
|
|
|
|
this.menuPosition = data.position |
|
|
|
|
|
} |
|
|
|
|
|
} catch (e) { |
|
|
|
|
|
// 未登录或接口失败则使用默认菜单,不提示 |
|
|
|
|
|
} |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
attributeEdit() { |
|
|
attributeEdit() { |
|
|
@ -1349,10 +1411,36 @@ export default { |
|
|
|
|
|
|
|
|
saveScale(scale) { |
|
|
saveScale(scale) { |
|
|
console.log('保存比例尺:', scale) |
|
|
console.log('保存比例尺:', scale) |
|
|
|
|
|
this.scaleConfig = { |
|
|
|
|
|
scaleNumerator: scale.scaleNumerator, |
|
|
|
|
|
scaleDenominator: scale.scaleDenominator, |
|
|
|
|
|
unit: scale.unit |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (this.$refs.cesiumMap) { |
|
|
|
|
|
this.$refs.cesiumMap.updateScaleFromConfig(this.scaleConfig) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
const scaleText = `${scale.scaleNumerator}:${scale.scaleDenominator}` |
|
|
const scaleText = `${scale.scaleNumerator}:${scale.scaleDenominator}` |
|
|
this.$message.success(`比例尺 "${scaleText}" 保存成功`); |
|
|
this.$message.success(`比例尺 "${scaleText}" 保存成功`); |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
handleScaleClick(scaleInfo) { |
|
|
|
|
|
this.currentScale = { |
|
|
|
|
|
scaleNumerator: this.scaleConfig.scaleNumerator, |
|
|
|
|
|
scaleDenominator: this.scaleConfig.scaleDenominator, |
|
|
|
|
|
unit: this.scaleConfig.unit |
|
|
|
|
|
} |
|
|
|
|
|
this.showScaleDialog = true |
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
handleScaleUnitChange(unit) { |
|
|
|
|
|
this.scaleConfig.unit = unit |
|
|
|
|
|
if (this.$refs.cesiumMap) { |
|
|
|
|
|
this.$refs.cesiumMap.currentScaleUnit = unit |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
// 地图下拉菜单方法 |
|
|
// 地图下拉菜单方法 |
|
|
loadTerrain() { |
|
|
loadTerrain() { |
|
|
this.$message.success('加载/切换地形'); |
|
|
this.$message.success('加载/切换地形'); |
|
|
@ -1413,9 +1501,15 @@ export default { |
|
|
this.$message.success('外部参数保存成功'); |
|
|
this.$message.success('外部参数保存成功'); |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
savePageLayout(position) { |
|
|
async savePageLayout(position) { |
|
|
this.menuPosition = position; |
|
|
this.menuPosition = position; |
|
|
this.$message.success(`菜单位置已设置为:${this.getPositionLabel(position)}`); |
|
|
this.$message.success(`菜单位置已设置为:${this.getPositionLabel(position)}`); |
|
|
|
|
|
try { |
|
|
|
|
|
await saveMenuConfig({ |
|
|
|
|
|
menuItems: JSON.stringify(this.menuItems), |
|
|
|
|
|
position: this.menuPosition || 'left' |
|
|
|
|
|
}) |
|
|
|
|
|
} catch (e) { /* 未登录时仅本地生效 */ } |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
getPositionLabel(position) { |
|
|
getPositionLabel(position) { |
|
|
|