吉安感知网项目-前端
罗广辉
2026-02-02 8173d75efc2390971d4609fc9a4eba35e2cfdfc9
Merge remote-tracking branch 'origin/master'
3 files modified
4 files added
257 ■■■■■ changed files
applications/drone-command/src/api/dataCockpit/index.js 11 ●●●●● patch | view | raw | blame | history
applications/drone-command/src/components/map-container/device-map-container.vue 100 ●●●● patch | view | raw | blame | history
applications/task-work-order/src/views/orderView/appConfiguration/inventory/index.vue 20 ●●●●● patch | view | raw | blame | history
applications/task-work-order/src/views/orderView/appConfiguration/inventory/接口文档.txt 105 ●●●●● patch | view | raw | blame | history
applications/task-work-order/src/views/orderView/appConfiguration/materials/index.vue 20 ●●●●● patch | view | raw | blame | history
applications/task-work-order/src/views/orderView/appConfiguration/materials/接口文档.txt patch | view | raw | blame | history
applications/task-work-order/src/views/orderView/orderDataManage/dataObjection/FormDiaLog.vue 1 ●●●● patch | view | raw | blame | history
applications/drone-command/src/api/dataCockpit/index.js
@@ -2,7 +2,7 @@
 * @Author       : yuan
 * @Date         : 2026-01-09 11:14:04
 * @LastEditors  : yuan
 * @LastEditTime : 2026-01-26 19:02:07
 * @LastEditTime : 2026-02-02 09:45:21
 * @FilePath     : \applications\drone-command\src\api\dataCockpit\index.js
 * @Description  : 
 * Copyright 2026 OBKoro1, All Rights Reserved. 
@@ -83,6 +83,15 @@
    })
}
// 最新 --- 数据驾驶舱地图聚合
export const newCockpitAggregationApi = (params) => {
    return request({
        url: '/drone-fw/cockpit/dataCockpit/statisticalDeviceOut',
        method: 'get',
        params
    })
}
// 区域列表
export const areaDivideListApi = (params) => {
    return request({
applications/drone-command/src/components/map-container/device-map-container.vue
@@ -53,7 +53,7 @@
import { fwDefenseSceneManageListApi } from '@/views/areaManage/sceneManage/sceneManageApi'
import { cockpitAggregationApi } from '@/api/dataCockpit'
import { newCockpitAggregationApi } from '@/api/dataCockpit'
import layerControlIcon from '@/assets/images/dataCockpit/layerControl.png'
import equipmentIcon from '@/assets/images/dataCockpit/map/equipment.png'
import offlineEquipmentIcon from '@/assets/images/dataCockpit/map/offline-equipment.png'
@@ -132,9 +132,9 @@
let favoritePulseElapsed = 0
const favoritePulseEntities = []
const pulseBaseColor = Cesium.Color.fromCssColorString('#FF3B30')
const PULSE_MIN_RADIUS_M = 60
const PULSE_MAX_RADIUS_M = 180
const PULSE_DURATION_S = 1.6
const PULSE_MIN_RADIUS_M = 2
const PULSE_MAX_RADIUS_M = 30
const PULSE_DURATION_S = 1.4
const detailVisible = ref(true)
const clusterVisible = ref(false)
const countyCenterMap = new Map()
@@ -217,31 +217,93 @@
    return canvas
}
class PulseSphereMaterialProperty {
    constructor(color, speed = 1.2, bands = 3.0, softness = 0.18) {
        this._definitionChanged = new Cesium.Event()
        this.color = color
        this.speed = speed
        this.bands = bands
        this.softness = softness
    }
    get isConstant() {
        return true
    }
    get definitionChanged() {
        return this._definitionChanged
    }
    getType() {
        return 'PulseSphereMaterial'
    }
    getValue(_time, result = {}) {
        result.color = this.color
        result.time = (performance.now() / 1000) * this.speed
        result.bands = this.bands
        result.softness = this.softness
        return result
    }
    equals(other) {
        return (
            other instanceof PulseSphereMaterialProperty &&
            Cesium.Color.equals(this.color, other.color) &&
            this.speed === other.speed &&
            this.bands === other.bands &&
            this.softness === other.softness
        )
    }
}
let pulseSphereMaterial = null
const getPulseSphereMaterial = () => {
    if (pulseSphereMaterial) return pulseSphereMaterial
    Cesium.Material._materialCache.addMaterial('PulseSphereMaterial', {
        fabric: {
            type: 'PulseSphereMaterial',
            uniforms: {
                color: pulseBaseColor.withAlpha(0.45),
                time: 0,
                bands: 3.0,
                softness: 0.18,
            },
            source: `
                czm_material czm_getMaterial(czm_materialInput materialInput)
                {
                    czm_material material = czm_getDefaultMaterial(materialInput);
                    vec3 normalEC = normalize(materialInput.normalEC);
                    vec3 viewEC = normalize(-materialInput.positionToEyeEC);
                    float ndv = max(dot(normalEC, viewEC), 0.0);
                    float fresnel = pow(1.0 - ndv, 1.6);
                    float wave = sin((ndv * bands + time) * 6.2831853);
                    float ring = smoothstep(-softness, softness, wave);
                    float alpha = (ring * 0.6 + fresnel * 0.4) * color.a;
                    material.diffuse = color.rgb;
                    material.alpha = alpha;
                    return material;
                }
            `,
        },
        translucent: () => true,
    })
    pulseSphereMaterial = new PulseSphereMaterialProperty(pulseBaseColor.withAlpha(0.45), 1.1, 3.2, 0.22)
    return pulseSphereMaterial
}
const createFavoritePulseEntity = (billboard) => {
    if (!viewer || !billboard) return
    const material = new Cesium.ImageMaterialProperty({
        image: getPulseCanvas(),
        transparent: true,
    })
    const material = getPulseSphereMaterial()
    const pulse = {
        material,
        offset: Math.random() * PULSE_DURATION_S,
        entity: null,
    }
    const getPulseHeight = () => {
        const pos = getBillboardPosition(billboard)
        if (!pos) return 0
        const carto = Cesium.Cartographic.fromCartesian(pos)
        return carto?.height ?? 0
    const getPulseRadius3D = () => {
        const radius = getPulseRadius(pulse)
        return new Cesium.Cartesian3(radius, radius, radius)
    }
    pulse.entity = viewer.entities.add({
        position: new Cesium.CallbackProperty(() => getBillboardPosition(billboard), false),
        ellipse: {
            semiMajorAxis: new Cesium.CallbackProperty(() => getPulseRadius(pulse), false),
            semiMinorAxis: new Cesium.CallbackProperty(() => getPulseRadius(pulse), false),
        ellipsoid: {
            radii: new Cesium.CallbackProperty(() => getPulseRadius3D(), false),
            material,
            height: new Cesium.CallbackProperty(() => getPulseHeight(), false),
            heightReference: Cesium.HeightReference.NONE,
        },
    })
    favoritePulseEntities.push(pulse)
@@ -1233,7 +1295,7 @@
const loadAggregation = async () => {
    try {
        const res = await cockpitAggregationApi({
        const res = await newCockpitAggregationApi({
            effectiveRangeKmIsNotNull: 1
        })
        renderAggregation(res?.data?.data ?? [])
applications/task-work-order/src/views/orderView/appConfiguration/inventory/index.vue
New file
@@ -0,0 +1,20 @@
<template>
 <div>
    实施清单
 </div>
</template>
<script setup >
/**
 * @description index
 * @date 2026-02-02 (周一) 09:25:52
 */
defineOptions({
 name: 'index'
})
</script>
<style scoped >
</style>
applications/task-work-order/src/views/orderView/appConfiguration/inventory/接口文档.txt
New file
@@ -0,0 +1,105 @@
## 分页
**接口地址**:`/implement/gdImplementList/page`
**请求方式**:`GET`
**请求数据类型**:`application/x-www-form-urlencoded`
**响应数据类型**:`*/*`
**接口描述**:<p>传入gdImplementList</p>
**请求参数**:
**请求参数**:
| 参数名称 | 参数说明 | 请求类型    | 是否必须 | 数据类型 | schema |
| -------- | -------- | ----- | -------- | -------- | ------ |
|areaCode|所属区划编码|query|false|string||
|current|当前页|query|false|integer(int32)||
|matterCode|事项编码|query|false|string||
|matterName|事项名称|query|false|string||
|size|每页的数量|query|false|integer(int32)||
**响应状态**:
| 状态码 | 说明 | schema |
| -------- | -------- | ----- |
|200|OK|R«IPage«GdImplementListVO»»|
|401|Unauthorized||
|403|Forbidden||
|404|Not Found||
**响应参数**:
| 参数名称 | 参数说明 | 类型 | schema |
| -------- | -------- | ----- |----- |
|code|状态码|integer(int32)|integer(int32)|
|data|承载数据|IPage«GdImplementListVO»|IPage«GdImplementListVO»|
|&emsp;&emsp;current||integer(int64)||
|&emsp;&emsp;pages||integer(int64)||
|&emsp;&emsp;records||array|GdImplementListVO|
|&emsp;&emsp;&emsp;&emsp;areaCode|所属区划编码|string||
|&emsp;&emsp;&emsp;&emsp;areaName|所属区划名称|string||
|&emsp;&emsp;&emsp;&emsp;catalogCode|目录编码|string||
|&emsp;&emsp;&emsp;&emsp;id|主键id|integer||
|&emsp;&emsp;&emsp;&emsp;implementCode|实施编码|string||
|&emsp;&emsp;&emsp;&emsp;implementName|实施清单名称|string||
|&emsp;&emsp;&emsp;&emsp;matterCode|事项编码|string||
|&emsp;&emsp;&emsp;&emsp;matterName|事项名称|string||
|&emsp;&emsp;&emsp;&emsp;orgCode|所属机构编码|string||
|&emsp;&emsp;&emsp;&emsp;orgName|所属机构名称|string||
|&emsp;&emsp;&emsp;&emsp;processDefinitionId|流程定义主键|string||
|&emsp;&emsp;&emsp;&emsp;processInstanceId|流程实例主键|string||
|&emsp;&emsp;size||integer(int64)||
|&emsp;&emsp;total||integer(int64)||
|msg|返回消息|string||
|success|是否成功|boolean||
**响应示例**:
```javascript
{
    "code": 0,
    "data": {
        "current": 0,
        "pages": 0,
        "records": [
            {
                "areaCode": "",
                "areaName": "",
                "catalogCode": "",
                "id": 0,
                "implementCode": "",
                "implementName": "",
                "matterCode": "",
                "matterName": "",
                "orgCode": "",
                "orgName": "",
                "processDefinitionId": "",
                "processInstanceId": ""
            }
        ],
        "size": 0,
        "total": 0
    },
    "msg": "",
    "success": true
}
```
applications/task-work-order/src/views/orderView/appConfiguration/materials/index.vue
New file
@@ -0,0 +1,20 @@
<template>
 <div>
    材料配置
 </div>
</template>
<script setup >
/**
 * @description index
 * @date 2026-02-02 (周一) 09:26:21
 */
defineOptions({
 name: 'index'
})
</script>
<style scoped >
</style>
applications/task-work-order/src/views/orderView/appConfiguration/materials/接口文档.txt
applications/task-work-order/src/views/orderView/orderDataManage/dataObjection/FormDiaLog.vue
@@ -8,6 +8,7 @@
        :close-on-click-modal="false"
    >
        <div class="detail-container  detail-container1" v-if="dialogReadonly">
            <div class="detail-title">异议详情</div>
            <el-row class="detail-row-view">
                <el-col :span="12">
                    <div class="label">标题</div>