From e696ff74ab21f80a3edd350176940a3e1cf65f3f Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Fri, 30 Jan 2026 15:27:36 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/index.vue | 22 ++
applications/drone-command/src/utils/cesium/deviceRange.js | 117 ++++++++++++++++
applications/drone-command/src/views/areaManage/partition/FormDiaLog.vue | 117 ++--------------
applications/drone-command/src/views/areaManage/partition/index.vue | 4
applications/drone-command/src/components/map-container/device-map-container.vue | 68 +++------
applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/ApplyViewDialog.vue | 26 ++-
applications/drone-command/env/.env.development | 2
applications/drone-command/src/views/dataCockpit/components/LegendBar.vue | 29 +++
uniapps/work-app/src/pages/login/index.vue | 4
9 files changed, 226 insertions(+), 163 deletions(-)
diff --git a/applications/drone-command/env/.env.development b/applications/drone-command/env/.env.development
index cf92b14..1f6d35a 100644
--- a/applications/drone-command/env/.env.development
+++ b/applications/drone-command/env/.env.development
@@ -16,7 +16,7 @@
#开发环境代理地址(推荐本地新建文件 .env.development.local 来进行覆盖)
# VITE_APP_URL = https://wrj.shuixiongit.com/api
-VITE_APP_URL= http://192.168.1.204
+VITE_APP_URL= http://192.168.1.168
#新大屏地址
VITE_APP_DASHBOARD_URL = 'https://wrj.shuixiongit.com/command-center-dashboard/'
diff --git a/applications/drone-command/src/components/map-container/device-map-container.vue b/applications/drone-command/src/components/map-container/device-map-container.vue
index 9cca9bf..659f8ca 100644
--- a/applications/drone-command/src/components/map-container/device-map-container.vue
+++ b/applications/drone-command/src/components/map-container/device-map-container.vue
@@ -61,13 +61,12 @@
import DevicePopup from './components/DevicePopup.vue'
import DronePopup from './components/DronePopup.vue'
import {
- RING_STYLES,
- addDeviceRings,
createDroneTrackMaterial,
createRadialGradientMaterial,
getTexturedVertexFormat,
} from './device-map-materials'
import { getPointPositionsHeight } from '@/utils/cesium/mapUtil'
+import { createDeviceRangePrimitiveWithHeight } from '@/utils/cesium/deviceRange'
import dzIcon from '@/assets/images/dataCockpit/map/dz-map-layer.png'
import yxIcon from '@/assets/images/dataCockpit/map/yx-map-layer.png'
@@ -248,6 +247,7 @@
if (!Number.isFinite(range) || range <= 0) return null
return range
}
+
const ensureCockpitPrimitiveLayer = () => {
if (!viewer) return
@@ -697,7 +697,7 @@
reorderCockpitPrimitives()
}
-const renderDeviceEntities = devices => {
+const renderDeviceEntities = async devices => {
if (!viewer) return
ensureCockpitPrimitiveLayer()
ensureDeviceCollections()
@@ -712,14 +712,14 @@
}
devicePickMap.clear()
deviceBillboardCollection.show = detailVisible.value
- const ringFillInstancesByStyle = RING_STYLES.map(() => [])
- const ringOutlineInstancesByStyle = RING_STYLES.map(() => [])
+ const deviceEntries = []
+ const devicePositions = []
devices.forEach((item, index) => {
const position = getDevicePosition(item)
if (!position) return
const entityId = `online-device-${item.id ?? index}-${index}`
const rangeMeters = getDeviceRange(item)
- addDeviceRings(position, ringFillInstancesByStyle, ringOutlineInstancesByStyle, rangeMeters)
+ devicePositions.push({ lng: position.longitude, lat: position.latitude })
const billboard = deviceBillboardCollection.add({
position: Cesium.Cartesian3.fromDegrees(position.longitude, position.latitude, 0),
image: equipmentIcon,
@@ -729,49 +729,31 @@
})
billboard.id = entityId
devicePickMap.set(entityId, { data: item, billboard })
+ deviceEntries.push({ position, rangeMeters, billboard })
})
if (selectedTargetType.value === 'device' && selectedDeviceBillboard && !devicePickMap.has(selectedDeviceBillboard.id)) {
closePopup()
}
- ringFillInstancesByStyle.forEach((instances, index) => {
- if (!instances.length) return
- const ring = RING_STYLES[index]
- const alpha = ring.alpha ?? 0.64
- const innerRatio =
- typeof ring.innerRatio === 'number'
- ? ring.innerRatio
- : ring.inner && ring.outer
- ? Math.min(Math.max(ring.inner / ring.outer, 0), 0.9)
- : 0
- const material = createRadialGradientMaterial(
- Cesium.Color.fromCssColorString(ring.gradient[0]).withAlpha(alpha),
- Cesium.Color.fromCssColorString(ring.gradient[1]).withAlpha(alpha),
- {
- gamma: 1.7,
- innerCutoff: innerRatio,
+ if (deviceEntries.length) {
+ const heights = await getPointPositionsHeight(devicePositions, viewer)
+ deviceEntries.forEach((entry, index) => {
+ const height = Number(heights?.[index]?.ASL)
+ const centerHeight = Number.isFinite(height) ? height : 0
+ if (entry.billboard) {
+ entry.billboard.position = Cesium.Cartesian3.fromDegrees(
+ entry.position.longitude,
+ entry.position.latitude,
+ centerHeight
+ )
}
- )
- const primitive = new Cesium.GroundPrimitive({
- geometryInstances: instances,
- appearance: new Cesium.MaterialAppearance({
- material,
- translucent: true,
- }),
+ if (!Number.isFinite(entry.rangeMeters) || entry.rangeMeters <= 0) return
+ const primitive = createDeviceRangePrimitiveWithHeight(entry.position, entry.rangeMeters, centerHeight)
+ if (!primitive) return
+ primitive.show = detailVisible.value
+ addCockpitPrimitive(primitive)
+ deviceRingFillPrimitives.push(primitive)
})
- primitive.show = detailVisible.value
- addCockpitPrimitive(primitive)
- deviceRingFillPrimitives.push(primitive)
- })
- ringOutlineInstancesByStyle.forEach(instances => {
- if (!instances.length) return
- const primitive = new Cesium.GroundPolylinePrimitive({
- geometryInstances: instances,
- appearance: new Cesium.PolylineColorAppearance(),
- })
- primitive.show = detailVisible.value
- addCockpitPrimitive(primitive)
- deviceRingOutlinePrimitives.push(primitive)
- })
+ }
reorderCockpitPrimitives()
}
diff --git a/applications/drone-command/src/utils/cesium/deviceRange.js b/applications/drone-command/src/utils/cesium/deviceRange.js
new file mode 100644
index 0000000..3ed20e5
--- /dev/null
+++ b/applications/drone-command/src/utils/cesium/deviceRange.js
@@ -0,0 +1,117 @@
+import * as Cesium from 'cesium'
+import { getPointPositionsHeight } from './mapUtil'
+
+const DEVICE_RANGE_MATERIAL_TYPE = 'DeviceRangeEllipsoid'
+let deviceRangeMaterialRegistered = false
+
+export const registerDeviceRangeMaterial = () => {
+ if (deviceRangeMaterialRegistered || !Cesium?.Material) return
+ deviceRangeMaterialRegistered = true
+ Cesium.Material._materialCache.addMaterial(DEVICE_RANGE_MATERIAL_TYPE, {
+ fabric: {
+ type: DEVICE_RANGE_MATERIAL_TYPE,
+ uniforms: {
+ color: new Cesium.Color(1.0, 0.0, 0.0, 0.7),
+ speed: 3.0,
+ globalAlpha: 0.9
+ },
+ source: `
+ uniform vec4 color;
+ uniform float speed;
+ uniform float globalAlpha;
+
+ czm_material czm_getMaterial(czm_materialInput materialInput)
+ {
+ czm_material material = czm_getDefaultMaterial(materialInput);
+ vec2 st = materialInput.st;
+
+ float time = fract(czm_frameNumber * speed / 1000.0);
+
+ if (st.t < 0.5) {
+ discard;
+ }
+
+ float alphaMars3D = abs(smoothstep(0.5, 1.0, fract(-st.t - time)));
+ alphaMars3D += 0.1;
+
+ material.alpha = alphaMars3D * globalAlpha;
+ material.diffuse = color.rgb;
+
+ return material;
+ }
+ `,
+ },
+ translucent: () => true,
+ })
+}
+
+export const createDeviceRangeMaterial = () => {
+ registerDeviceRangeMaterial()
+ return Cesium.Material.fromType(DEVICE_RANGE_MATERIAL_TYPE, {
+ color: Cesium.Color.fromBytes(0, 255, 255, 155),
+ })
+}
+
+export const getDeviceLngLat = device => {
+ const lngRaw = device?.longitude ?? device?.lng ?? device?.lon
+ const latRaw = device?.latitude ?? device?.lat
+ const lng = Number(lngRaw)
+ const lat = Number(latRaw)
+ if (!Number.isFinite(lng) || !Number.isFinite(lat)) return null
+ return { lng, lat }
+}
+
+export const normalizeDeviceRange = value => {
+ const range = Number(value)
+ if (!Number.isFinite(range) || range <= 0) return 2000
+ return range
+}
+
+export const resolveDeviceTerrainHeight = async (viewer, position) => {
+ if (!viewer || !position) return 0
+ const lng = position.lng ?? position.longitude
+ const lat = position.lat ?? position.latitude
+ if (!Number.isFinite(Number(lng)) || !Number.isFinite(Number(lat))) return 0
+ try {
+ const results = await getPointPositionsHeight([{ lng: Number(lng), lat: Number(lat) }], viewer)
+ const height = Number(results?.[0]?.ASL)
+ return Number.isFinite(height) ? height : 0
+ } catch (error) {
+ return 0
+ }
+}
+
+export const createDeviceRangePrimitiveWithHeight = (position, rangeMeters, height, material = null) => {
+ if (!position || !Number.isFinite(rangeMeters)) return null
+ const lng = position.lng ?? position.longitude
+ const lat = position.lat ?? position.latitude
+ if (!Number.isFinite(Number(lng)) || !Number.isFinite(Number(lat))) return null
+ const center = Cesium.Cartesian3.fromDegrees(Number(lng), Number(lat), Number(height) || 0)
+ const radii = new Cesium.Cartesian3(rangeMeters, rangeMeters, rangeMeters)
+ const geometry = new Cesium.EllipsoidGeometry({
+ radii,
+ vertexFormat: Cesium.MaterialAppearance.MaterialSupport.TEXTURED?.vertexFormat
+ || Cesium.VertexFormat.POSITION_AND_NORMAL,
+ })
+ const instance = new Cesium.GeometryInstance({
+ geometry,
+ modelMatrix: Cesium.Transforms.eastNorthUpToFixedFrame(center),
+ })
+ return new Cesium.Primitive({
+ geometryInstances: instance,
+ appearance: new Cesium.MaterialAppearance({
+ material: material || createDeviceRangeMaterial(),
+ closed: true,
+ translucent: true,
+ flat: true,
+ faceForward: true,
+ }),
+ asynchronous: false
+ })
+}
+
+export const createDeviceRangePrimitive = async (viewer, position, rangeMeters, material = null) => {
+ if (!viewer) return null
+ const height = await resolveDeviceTerrainHeight(viewer, position)
+ return createDeviceRangePrimitiveWithHeight(position, rangeMeters, height, material)
+}
diff --git a/applications/drone-command/src/views/areaManage/partition/FormDiaLog.vue b/applications/drone-command/src/views/areaManage/partition/FormDiaLog.vue
index 5fc6010..92c6ef8 100644
--- a/applications/drone-command/src/views/areaManage/partition/FormDiaLog.vue
+++ b/applications/drone-command/src/views/areaManage/partition/FormDiaLog.vue
@@ -234,7 +234,13 @@
import { fieldRules, geomAnalysis, getDictLabel } from '@ztzf/utils'
import CommonCesiumMap from '@/components/map-container/common-cesium-map.vue'
import { DrawManager, EditManager, buildEllipsePositions } from '@/utils/cesium/shapeTools'
-import { cartesian3Convert, getPointPositionsHeight } from '@/utils/cesium/mapUtil'
+import { cartesian3Convert } from '@/utils/cesium/mapUtil'
+import {
+ createDeviceRangePrimitive,
+ getDeviceLngLat,
+ normalizeDeviceRange,
+ resolveDeviceTerrainHeight,
+} from '@/utils/cesium/deviceRange'
import * as Cesium from 'cesium'
import { AREA_TYPE_STYLE_MAP, BUFFER_LEVEL_STYLES, DEFAULT_AREA_STYLE } from '@ztzf/constants'
import { fwPoliceStationListApi } from '@/views/areaManage/precinctInfo/precinctInfoApi'
@@ -294,7 +300,6 @@
let viewEntity
let shapeDisplaySource
const deviceRangePrimitiveMap = new Map()
-let deviceRangeMaterialRegistered = false
const activeToolMode = ref('')
const rules = {
@@ -455,42 +460,6 @@
return shapeDisplaySource
}
-function registerDeviceRangeMaterial () {
- if (deviceRangeMaterialRegistered || !Cesium?.Material) return
- deviceRangeMaterialRegistered = true
- Cesium.Material._materialCache.addMaterial('DeviceRangeEllipsoid', {
- fabric: {
- type: 'DeviceRangeEllipsoid',
- uniforms: {
- color: new Cesium.Color(1.0, 0.0, 0.0, 0.7),
- speed: 3.0,
- },
- source: `
- uniform vec4 color;
- uniform float speed;
- czm_material czm_getMaterial(czm_materialInput materialInput){
- czm_material material = czm_getDefaultMaterial(materialInput);
- vec2 st = materialInput.st;
- float time = fract(czm_frameNumber * speed / 1000.0);
- float alpha = abs(smoothstep(0.5,1.,fract( -st.t - time)));
- alpha += .1;
- material.alpha = alpha;
- material.diffuse = color.rgb;
- return material;
- }
- `,
- },
- translucent: () => true,
- })
-}
-
-function createDeviceRangeMaterial () {
- registerDeviceRangeMaterial()
- return Cesium.Material.fromType('DeviceRangeEllipsoid', {
- color: Cesium.Color.fromBytes(0, 255, 255, 155),
- })
-}
-
function clearDeviceRangePrimitives () {
if (!viewer || !deviceRangePrimitiveMap.size) return
for (const primitive of deviceRangePrimitiveMap.values()) {
@@ -499,67 +468,13 @@
deviceRangePrimitiveMap.clear()
}
-function normalizeDeviceRange (value) {
- const range = Number(value)
- if (!Number.isFinite(range) || range <= 0) return 2000
- return range
-}
-
-function getDeviceLngLat (device) {
- const lngRaw = device?.longitude ?? device?.lng ?? device?.lon
- const latRaw = device?.latitude ?? device?.lat
- const lng = Number(lngRaw)
- const lat = Number(latRaw)
- if (!Number.isFinite(lng) || !Number.isFinite(lat)) return null
- return { lng, lat }
-}
-
-async function resolveDeviceTerrainHeight (position) {
- if (!viewer) return 0
- try {
- const results = await getPointPositionsHeight([{ lng: position.lng, lat: position.lat }], viewer)
- const height = Number(results?.[0]?.ASL)
- return Number.isFinite(height) ? height : 0
- } catch (error) {
- return 0
- }
-}
-
-async function createDeviceRangePrimitive (device) {
- if (!viewer) return null
- if (!device) return null
- const position = getDeviceLngLat(device)
- if (!position) return null
- const rangeMeters = normalizeDeviceRange(device.effectiveRangeKm)
- const centerHeight = await resolveDeviceTerrainHeight(position)
- const center = Cesium.Cartesian3.fromDegrees(position.lng, position.lat, centerHeight)
- const radii = new Cesium.Cartesian3(rangeMeters, rangeMeters, rangeMeters)
- const geometry = new Cesium.EllipsoidGeometry({
- radii,
- vertexFormat: Cesium.MaterialAppearance.MaterialSupport.TEXTURED?.vertexFormat
- || Cesium.VertexFormat.POSITION_AND_NORMAL,
- })
- const instance = new Cesium.GeometryInstance({
- geometry,
- modelMatrix: Cesium.Transforms.eastNorthUpToFixedFrame(center),
- })
- return new Cesium.Primitive({
- geometryInstances: instance,
- appearance: new Cesium.MaterialAppearance({
- material: createDeviceRangeMaterial(),
- closed: true,
- translucent: true,
- flat: true,
- faceForward: true,
- }),
- asynchronous: false
- })
-}
-
async function renderDeviceRangeSingle (device) {
if (!viewer) return
clearDeviceRangePrimitives()
- const primitive = await createDeviceRangePrimitive(device)
+ const position = getDeviceLngLat(device)
+ if (!position) return
+ const rangeMeters = normalizeDeviceRange(device.effectiveRangeKm)
+ const primitive = await createDeviceRangePrimitive(viewer, position, rangeMeters)
if (!primitive) return
deviceRangePrimitiveMap.set(String(device?.id ?? Date.now()), primitive)
viewer.scene.primitives.add(primitive)
@@ -582,7 +497,10 @@
if (!pendingRows.length) return
const primitives = await Promise.all(
pendingRows.map(async row => {
- const primitive = await createDeviceRangePrimitive(row)
+ const position = getDeviceLngLat(row)
+ if (!position) return { row, primitive: null }
+ const rangeMeters = normalizeDeviceRange(row.effectiveRangeKm)
+ const primitive = await createDeviceRangePrimitive(viewer, position, rangeMeters)
return { row, primitive }
})
)
@@ -598,8 +516,9 @@
if (!viewer) return
const position = getDeviceLngLat(device)
if (!position) return
- const height = await resolveDeviceTerrainHeight(position)
- const destination = Cesium.Cartesian3.fromDegrees(position.lng, position.lat, height + device.effectiveRangeKm * 3)
+ const height = await resolveDeviceTerrainHeight(viewer, position)
+ const rangeMeters = normalizeDeviceRange(device?.effectiveRangeKm)
+ const destination = Cesium.Cartesian3.fromDegrees(position.lng, position.lat, height + rangeMeters * 3)
viewer.camera.flyTo({
destination,
orientation: {
diff --git a/applications/drone-command/src/views/areaManage/partition/index.vue b/applications/drone-command/src/views/areaManage/partition/index.vue
index 63cd183..9f81fd7 100644
--- a/applications/drone-command/src/views/areaManage/partition/index.vue
+++ b/applications/drone-command/src/views/areaManage/partition/index.vue
@@ -30,7 +30,7 @@
<el-table-column type="selection" width="46" />
<el-table-column type="index" show-overflow-tooltip width="64" label="序号" />
<el-table-column prop="areaName" show-overflow-tooltip width="150" label="区域名称" />
- <el-table-column prop="areaTypeKeys" show-overflow-tooltip width="120" label="区域类型">
+ <el-table-column prop="areaTypeKeys" show-overflow-tooltip width="196" label="区域类型">
<template v-slot="{ row }">
{{ getDictLabel(row.areaTypeKeys, dictObj.areaType) }}
</template>
@@ -47,7 +47,7 @@
</template>
</el-table-column>
<el-table-column prop="policeStationName" show-overflow-tooltip label="关联派出所" />
- <el-table-column show-overflow-tooltip label="可飞行时间段">
+ <el-table-column show-overflow-tooltip width="300" label="可飞行时间段">
<template v-slot="{ row }">
{{ formatFlyDate(row) }}
</template>
diff --git a/applications/drone-command/src/views/dataCockpit/components/LegendBar.vue b/applications/drone-command/src/views/dataCockpit/components/LegendBar.vue
index d50abc7..0ed4b0d 100644
--- a/applications/drone-command/src/views/dataCockpit/components/LegendBar.vue
+++ b/applications/drone-command/src/views/dataCockpit/components/LegendBar.vue
@@ -2,7 +2,7 @@
* @Author : yuan
* @Date : 2026-01-17 14:51:39
* @LastEditors : yuan
- * @LastEditTime : 2026-01-17 15:13:50
+ * @LastEditTime : 2026-01-30 15:20:56
* @FilePath : \applications\drone-command\src\views\dataCockpit\components\LegendBar.vue
* @Description :
* Copyright 2026 OBKoro1, All Rights Reserved.
@@ -12,8 +12,16 @@
<div class="legend-bar">
<div class="legend-title" data-text="图例">图例</div>
<div class="legend-item">
- <span class="legend-color partition"></span>
- <span class="legend-text" data-text="区域">区域</span>
+ <span class="legend-color detect-area"></span>
+ <span class="legend-text" data-text="侦测区">侦测区</span>
+ </div>
+ <div class="legend-item">
+ <span class="legend-color alarm-area"></span>
+ <span class="legend-text" data-text="报警区">报警区</span>
+ </div>
+ <div class="legend-item">
+ <span class="legend-color key-control-area"></span>
+ <span class="legend-text" data-text="重点管制区">重点管制区</span>
</div>
<div class="legend-item">
<img class="legend-icon drone" :src="droneIcon" alt="无人机" />
@@ -86,6 +94,21 @@
border: 1px solid rgba(255, 215, 114, 0.9);
}
+.legend-color.detect-area {
+ background-color: rgba(25, 178, 230, 0.5);
+ border: 1px solid rgb(0, 251, 255);
+}
+
+.legend-color.alarm-area {
+ background-color: rgba(255, 235, 59, 0.5);
+ border: 1px solid rgb(255, 235, 59);
+}
+
+.legend-color.key-control-area {
+ background-color: rgba(247, 20, 20, 0.5);
+ border: 1px solid rgb(255, 0, 0);
+}
+
.legend-icon {
width: 30px;
height: 42px;
diff --git a/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/ApplyViewDialog.vue b/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/ApplyViewDialog.vue
index 006b0ac..6f482ac 100644
--- a/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/ApplyViewDialog.vue
+++ b/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/ApplyViewDialog.vue
@@ -68,7 +68,7 @@
</el-row>
</div>
<!-- 申请中-->
- <div v-if="detailDemandStatus === '1' && !requesterProvider">
+ <div v-if="detailDemandStatus === '1' && (permissionList.approvedBtn || permissionList.rejectBtn)">
<div class="detail-title" :style="{ marginTop:pxToRem(10)}">数据上传</div>
<div class="upload-container">
<el-upload
@@ -106,16 +106,16 @@
</div>
</div>
<template #footer>
- <template v-if="detailDemandStatus === '1' && !requesterProvider">
- <el-button color="#F2F3F5" :loading="submitting || uploading" :disabled="submitting || uploading" @click="rejectTheApplication">拒绝申请</el-button>
- <el-button class="" color="#4C34FF" :loading="submitting || uploading" :disabled="submitting || uploading" @click="approvedByTheReview">审核通过</el-button>
+ <template v-if="detailDemandStatus === '1' ">
+ <el-button v-if="permissionList.rejectBtn" color="#F2F3F5" :loading="submitting || uploading" :disabled="submitting || uploading" @click="rejectTheApplication">拒绝申请</el-button>
+ <el-button v-if="permissionList.approvedBtn" class="" color="#4C34FF" :loading="submitting || uploading" :disabled="submitting || uploading" @click="approvedByTheReview">审核通过</el-button>
</template>
<template v-if="detailDemandStatus === '2'">
<el-button class="" color="#4C34FF" @click="downloadAllFiles">全部下载</el-button>
</template>
- <template v-if="detailDemandStatus === '3'">
- <el-button class="" color="#4C34FF" @click="visible =false">关闭</el-button>
- </template>
+<!-- <template v-if="detailDemandStatus === '3'">-->
+<!-- <el-button class="" color="#4C34FF" @click="visible =false">关闭</el-button>-->
+<!-- </template>-->
</template>
</el-dialog>
@@ -142,7 +142,7 @@
import AuditRecord from '@/views/orderView/orderDataManage/supplyAdd/auditRecord.vue' // 导入新组件
import { useStore } from 'vuex'
const store = useStore()
-const requesterProvider = computed(() => store.state.user.userInfo?.role_id === '2014158512610869250')
+const permission = computed(() => store.state.user.permission);
const emit = defineEmits(['success'])
const dictObj = inject('dictObj')
const deptTree = inject('deptTree')
@@ -156,6 +156,16 @@
const responseData = ref(null)
const submitting = ref(false) // 提交中状态
const uploading = ref(false) // 文件上传中状态
+function validData(value, defaultValue) {
+ return value !== undefined ? value : defaultValue
+}
+const permissionList = computed(() => {
+ return {
+ addBtn: validData(permission.value.orderData_addDemand, false),
+ rejectBtn: validData(permission.value.orderData_rejectApplication, false),
+ approvedBtn: validData(permission.value.orderData_approved, false),
+ }
+})
// 自定义上传请求函数
const handleHttpRequest = async (options) => {
uploading.value = true
diff --git a/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/index.vue b/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/index.vue
index 76d54e2..ac44ba2 100644
--- a/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/index.vue
+++ b/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/index.vue
@@ -35,7 +35,7 @@
</el-form-item>
</el-form>
- <div class="gd-table-toolbar">
+ <div class="gd-table-toolbar" v-if="permissionList.addBtn">
<el-button :icon="Plus" color="#4C34FF" type="primary" @click="openForm('add')">供需填报新增</el-button>
</div>
@@ -79,9 +79,8 @@
<el-table-column label="操作" class-name="operation-btns" width="150">
<template v-slot="{ row }">
<el-link type="primary" @click="openForm('view', row)">查看</el-link>
- <!-- 只对非审批状态显示编辑和删除按钮 -->
- <el-link type="primary" @click="openForm('edit', row)" v-if="!['1', '2', '3'].includes(row.demandStatus)">编辑</el-link>
- <el-link type="primary" @click="handleDelete(row)" v-if="!['1', '2', '3'].includes(row.demandStatus)">删除</el-link>
+ <el-link type="primary" @click="openForm('edit', row)" v-if="!['1', '2', '3'].includes(row.demandStatus) && permissionList.addBtn">编辑</el-link>
+ <el-link type="primary" @click="handleDelete(row)" v-if="!['1', '2', '3'].includes(row.demandStatus) && permissionList.deleteBtn">删除</el-link>
</template>
</el-table-column>
</el-table>
@@ -116,7 +115,9 @@
gdSupplyDemandPageApi,
gdSupplyDemandRemoveApi,
} from '@/views/orderView/orderDataManage/supplyAdd/supplyAddApi'
-
+import { useStore } from 'vuex'
+const store = useStore()
+const permission = computed(() => store.state.user.permission);
// 初始化查询参数
const initSearchParams = () => ({
demandName: '', // 需求名称
@@ -151,6 +152,17 @@
provide('detailDemandStatus', detailDemandStatus)
const reasonForRejection = ref('') //拒绝原因
provide('reasonForRejection', reasonForRejection)
+
+function validData(value, defaultValue) {
+ return value !== undefined ? value : defaultValue
+}
+const permissionList = computed(() => {
+ return {
+ addBtn: validData(permission.value.orderData_addDemand, false),
+ deleteBtn: validData(permission.value.orderData_delete, false),
+ }
+})
+
// 根据部门ID获取部门名称
function getDeptNameById(deptId, deptList) {
if (!deptId || !Array.isArray(deptList)) return ''
diff --git a/uniapps/work-app/src/pages/login/index.vue b/uniapps/work-app/src/pages/login/index.vue
index 9e37a79..dfd006d 100644
--- a/uniapps/work-app/src/pages/login/index.vue
+++ b/uniapps/work-app/src/pages/login/index.vue
@@ -82,8 +82,8 @@
});
}
const loginFormGd = ref({
- username: "admin",
- password: "admin",
+ username: "zhx",
+ password: "123456",
});
async function submit() {
--
Gitblit v1.9.3