From 803b93038ca16e21ea60a260ca4ac882b84a87ef Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期五, 18 七月 2025 17:31:53 +0800
Subject: [PATCH] 2025.7.18 监管任务模块 1. 监管场景样式优化; 2. 新增监管场景GIS地图展示(待完成);
---
src/assets/image/scene_18.png | 0
src/components.d.ts | 1
src/components/list-item/ItemMonitorObj.vue | 93 +++++++-
src/api/index.js | 2
src/components/map/BaseMap.vue | 7
index.html | 4
src/utils/map/index.js | 114 +++++++++++
src/assets/image/scene_19.png | 0
vite.config.js | 27 +-
src/views/fysp/task/MonitorObjEdit.vue | 4
src/assets/image/scene_4.png | 0
src/components/map/SceneMap.vue | 36 +++
src/assets/image/scene_15.png | 0
src/assets/image/scene_5.png | 0
src/views/fysp/task/components/CompTaskMap.vue | 25 ++
src/views/fysp/task/components/CompMonitorObj.vue | 70 +++++-
src/assets/scene-icon.js | 43 ++++
src/assets/image/scene_20.png | 0
src/assets/image/scene_16.png | 0
src/utils/map/marks.js | 36 ++-
src/views/fysp/task/components/CompMonitorObjEdit.vue | 38 ++
src/assets/image/scene_1.png | 0
src/assets/image/scene_17.png | 0
src/views/fysp/task/TaskManage.vue | 29 ++
src/views/fysp/task/components/CompMonitorPlan.vue | 71 ++++--
src/assets/image/scene_6.png | 0
26 files changed, 488 insertions(+), 112 deletions(-)
diff --git a/index.html b/index.html
index d5c41ec..bbeb3db 100644
--- a/index.html
+++ b/index.html
@@ -9,12 +9,12 @@
<body>
<div id="app"></div>
</body>
- <!-- <script type="text/javascript">
+ <script type="text/javascript">
window._AMapSecurityConfig = {
serviceHost: 'http://47.100.191.150:8083/_AMapService'
};
</script>
- <script
+ <!-- <script
type="text/javascript"
src="https://webapi.amap.com/maps?v=1.4.5&key=520c5e5cf44c7793104e500cbf0ed711&plugin=Map3D,ElasticMarker,AMap.ControlBar,AMap.Geocoder"
></script> -->
diff --git a/src/api/index.js b/src/api/index.js
index dca45b4..a839aee 100644
--- a/src/api/index.js
+++ b/src/api/index.js
@@ -13,7 +13,7 @@
let ip2_file = 'https://fyami.com.cn/';
if (debug) {
- ip1 = 'http://192.168.0.103:8080/';
+ ip1 = 'http://192.168.0.103:9001/';
// ip1_file = 'http://192.168.0.138:8080/';
// ip2 = 'http://192.168.0.138:8080/';
// ip2_file = 'https://fyami.com.cn/';
diff --git a/src/assets/image/scene_1.png b/src/assets/image/scene_1.png
new file mode 100644
index 0000000..972dd1c
--- /dev/null
+++ b/src/assets/image/scene_1.png
Binary files differ
diff --git a/src/assets/image/scene_15.png b/src/assets/image/scene_15.png
new file mode 100644
index 0000000..2c33b51
--- /dev/null
+++ b/src/assets/image/scene_15.png
Binary files differ
diff --git a/src/assets/image/scene_16.png b/src/assets/image/scene_16.png
new file mode 100644
index 0000000..f314fcd
--- /dev/null
+++ b/src/assets/image/scene_16.png
Binary files differ
diff --git a/src/assets/image/scene_17.png b/src/assets/image/scene_17.png
new file mode 100644
index 0000000..082f2ac
--- /dev/null
+++ b/src/assets/image/scene_17.png
Binary files differ
diff --git a/src/assets/image/scene_18.png b/src/assets/image/scene_18.png
new file mode 100644
index 0000000..4adcc68
--- /dev/null
+++ b/src/assets/image/scene_18.png
Binary files differ
diff --git a/src/assets/image/scene_19.png b/src/assets/image/scene_19.png
new file mode 100644
index 0000000..69dd6bf
--- /dev/null
+++ b/src/assets/image/scene_19.png
Binary files differ
diff --git a/src/assets/image/scene_20.png b/src/assets/image/scene_20.png
new file mode 100644
index 0000000..d7b09a8
--- /dev/null
+++ b/src/assets/image/scene_20.png
Binary files differ
diff --git a/src/assets/image/scene_4.png b/src/assets/image/scene_4.png
new file mode 100644
index 0000000..5d4a940
--- /dev/null
+++ b/src/assets/image/scene_4.png
Binary files differ
diff --git a/src/assets/image/scene_5.png b/src/assets/image/scene_5.png
new file mode 100644
index 0000000..c90e6a7
--- /dev/null
+++ b/src/assets/image/scene_5.png
Binary files differ
diff --git a/src/assets/image/scene_6.png b/src/assets/image/scene_6.png
new file mode 100644
index 0000000..6f7ab7a
--- /dev/null
+++ b/src/assets/image/scene_6.png
Binary files differ
diff --git a/src/assets/scene-icon.js b/src/assets/scene-icon.js
new file mode 100644
index 0000000..446fec7
--- /dev/null
+++ b/src/assets/scene-icon.js
@@ -0,0 +1,43 @@
+import scene_1 from '@/assets/image/scene_1.png';
+import scene_4 from '@/assets/image/scene_4.png';
+import scene_5 from '@/assets/image/scene_5.png';
+import scene_6 from '@/assets/image/scene_6.png';
+import scene_15 from '@/assets/image/scene_15.png';
+import scene_16 from '@/assets/image/scene_16.png';
+import scene_17 from '@/assets/image/scene_17.png';
+import scene_18 from '@/assets/image/scene_18.png';
+import scene_19 from '@/assets/image/scene_19.png';
+import scene_20 from '@/assets/image/scene_20.png';
+
+function sceneIcon(type) {
+ switch (type + '') {
+ case '1':
+ return scene_1;
+ case '2':
+ return scene_1;
+ case '3':
+ return scene_1;
+ case '4':
+ return scene_4;
+ case '5':
+ return scene_5;
+ case '6':
+ return scene_6;
+ case '15':
+ return scene_15;
+ case '16':
+ return scene_16;
+ case '17':
+ return scene_17;
+ case '18':
+ return scene_18;
+ case '19':
+ return scene_19;
+ case '20':
+ return scene_20;
+ default:
+ return scene_1;
+ }
+}
+
+export { sceneIcon };
diff --git a/src/components.d.ts b/src/components.d.ts
index 2b04de3..dfd2932 100644
--- a/src/components.d.ts
+++ b/src/components.d.ts
@@ -63,6 +63,7 @@
ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
ElRow: typeof import('element-plus/es')['ElRow']
+ ElScroll: typeof import('element-plus/es')['ElScroll']
ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
ElSegmented: typeof import('element-plus/es')['ElSegmented']
ElSelect: typeof import('element-plus/es')['ElSelect']
diff --git a/src/components/list-item/ItemMonitorObj.vue b/src/components/list-item/ItemMonitorObj.vue
index 51f1ecf..128c5fc 100644
--- a/src/components/list-item/ItemMonitorObj.vue
+++ b/src/components/list-item/ItemMonitorObj.vue
@@ -1,24 +1,53 @@
<template>
<!-- <el-card shadow="hover"> -->
- <div class="wrapper">
+ <div :class="statusClass + ' wrapper'">
<div>
- <el-text>{{ item.displayid }}銆�</el-text>
- <el-text truncated class="w-250px">{{ item.sensename }}</el-text>
+ <!-- <el-text>{{ item.displayid }}銆�</el-text> -->
+ <el-text tag="b" class="text-line-2">
+ {{ item.displayid + '銆�' + item.sensename }}
+ </el-text>
</div>
- <!-- <div>
- <el-text>鍦板潃锛歿{ item.location }}</el-text>
- </div> -->
+ <div>
+ <el-text truncated class="w-250px" type="info">
+ <el-icon><LocationInformation /></el-icon>
+ {{ item.scene.location }}
+ </el-text>
+ </div>
<el-row justify="space-between" style="margin-top: 4px">
<el-space>
- <el-tag type="info" effect="plain" size="small">
+ <el-tag
+ v-if="item.extension1 == '1'"
+ type="success"
+ effect="plain"
+ size="small"
+ >
+ <el-icon :size="8"><Select /></el-icon>
+ <span>宸茬洃绠�</span>
+ </el-tag>
+ <el-tag
+ v-else-if="!item.extension1 || item.extension1 == '0'"
+ type="danger"
+ effect="plain"
+ size="small"
+ >
+ <el-icon :size="8"><CloseBold /></el-icon>
+ <span>鏈洃绠�</span>
+ </el-tag>
+ <el-tag v-else type="primary" effect="plain" size="small">
+ <el-icon :size="8"><Select /></el-icon>
+ <span>宸插鏍�</span>
+ </el-tag>
+ <!-- <el-tag type="info" effect="plain" size="small">
{{ item.sceneType }}
- </el-tag>
- <el-tag type="info" effect="plain" size="small">
- 璁″垝鐩戠锛歿{ item.monitornum }}
- </el-tag>
- <el-tag type="info" effect="plain" size="small">
- 宸茬洃绠★細{{ item.extension1 ? item.extension1 : '0' }}
- </el-tag>
+ </el-tag> -->
+ <el-space>
+ <el-tag type="info" size="small">
+ 璁″垝锛歿{ item.monitornum }}娆�
+ </el-tag>
+ <el-tag type="info" size="small">
+ 鐩戠锛歿{ item.extension1 ? item.extension1 : '0' }}娆�
+ </el-tag>
+ </el-space>
</el-space>
<slot :item="item"></slot>
<!-- <el-button size="small" type="success" @click="add">娣诲姞</el-button> -->
@@ -30,7 +59,7 @@
/**
* 鐩戠瀵硅薄
*/
-
+import { computed } from 'vue';
const props = defineProps({
item: {
@@ -40,6 +69,16 @@
});
const emit = defineEmits(['add']);
+
+const statusClass = computed(() => {
+ if (!props.item.extension1 || props.item.extension1 == '0') {
+ return 'border-bottom-danger';
+ } else if (props.item.extension1 == '1') {
+ return 'border-bottom-success';
+ } else {
+ return 'border-bottom-primary';
+ }
+});
function add() {
emit('add', props.item);
@@ -51,5 +90,29 @@
border: 1px solid var(--el-border-color);
border-radius: var(--el-border-radius-base);
padding: 4px 8px;
+ box-shadow: var(--el-box-shadow-light);
+}
+
+.text-line-2 {
+ width: 300px;
+ height: 40px;
+ display: -webkit-box;
+ line-clamp: 2;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.border-bottom-success {
+ border-left: 3px solid var(--el-color-success);
+}
+
+.border-bottom-danger {
+ border-left: 3px solid var(--el-color-danger);
+}
+
+.border-bottom-primary {
+ border-left: 3px solid var(--el-color-primary);
}
</style>
diff --git a/src/components/map/BaseMap.vue b/src/components/map/BaseMap.vue
index 2da91ff..11e34ed 100644
--- a/src/components/map/BaseMap.vue
+++ b/src/components/map/BaseMap.vue
@@ -3,12 +3,15 @@
</template>
<script setup>
-import { onMounted } from 'vue';
-import { createMap } from '@/utils/map/index_old';
+import { onMounted, onUnmounted } from 'vue';
+import { createMap, map } from '@/utils/map/index';
onMounted(() => {
// 楂樺痉鍦板浘鍒濆鍖�
createMap('container');
});
+onUnmounted(() => {
+ map?.destroy();
+});
</script>
<style>
#container {
diff --git a/src/components/map/SceneMap.vue b/src/components/map/SceneMap.vue
index 60e7038..7994a7f 100644
--- a/src/components/map/SceneMap.vue
+++ b/src/components/map/SceneMap.vue
@@ -1,12 +1,42 @@
<template>
- <div style="width: 70vw; height: 500px; background-color: aliceblue">
- <BaseMap></BaseMap>
- </div>
+ <BaseMap></BaseMap>
</template>
<script setup>
+import { watch } from 'vue';
+import { map, onMapMounted } from '@/utils/map/index';
+import marks from '@/utils/map/marks';
+import { sceneIcon } from '@/assets/scene-icon';
const props = defineProps({
// 鍦烘櫙鐐逛綅淇℃伅
data: Array
});
+
+var markViewList = [];
+
+watch(
+ () => props.data,
+ (nV, oV) => {
+ if (nV != oV) {
+ drawSceneMarks();
+ }
+ },
+ { immediate: true }
+);
+
+function drawSceneMarks() {
+ onMapMounted(() => {
+ markViewList = [];
+ props.data.forEach((d) => {
+ const mark = marks.createMarker({
+ position: [d.longitude, d.latitude],
+ icon: sceneIcon(d.typeid),
+ label: d.name,
+ extData: d.guid
+ });
+ markViewList.push(mark);
+ });
+ map.setFitView(markViewList);
+ });
+}
</script>
<style scoped></style>
diff --git a/src/utils/map/index.js b/src/utils/map/index.js
new file mode 100644
index 0000000..fe8b0ba
--- /dev/null
+++ b/src/utils/map/index.js
@@ -0,0 +1,114 @@
+import AMapLoader from '@amap/amap-jsapi-loader';
+
+var mapInitDone = false;
+var onMapMountedEvents = [];
+
+var AMap;
+// 鍦板浘瀵硅薄
+var map;
+// 鍗槦鍥惧眰
+var satellite;
+// 榧犳爣缁樺浘
+var mouseTool;
+// 3D鍥惧眰
+var object3Dlayer;
+// 鍦板浘鎷栧姩鐘舵��
+var isDragging = false;
+
+// 鍦板浘鍔犺浇瀹屾垚瑙﹀彂
+function onMapMounted(...events) {
+ if (mapInitDone) {
+ events.forEach((e) => {
+ e();
+ });
+ } else {
+ onMapMountedEvents = onMapMountedEvents.concat(events);
+ }
+}
+
+function createMap(id) {
+ AMapLoader.load({
+ key: '520c5e5cf44c7793104e500cbf0ed711', // 鐢宠濂界殑Web绔紑鍙戣�匥ey锛岄娆¤皟鐢� load 鏃跺繀濉�
+ version: '2.0', // 鎸囧畾瑕佸姞杞界殑 JS API 鐨勭増鏈紝缂虹渷鏃堕粯璁や负 1.4.15
+ // 闇�瑕佷娇鐢ㄧ殑鐨勬彃浠跺垪琛紝濡傛瘮渚嬪昂'AMap.Scale'绛�
+ plugins: [
+ 'AMap.ElasticMarker',
+ 'AMap.ControlBar',
+ 'AMap.ToolBar',
+ 'AMap.Scale',
+ // 'AMap.DragRoute',
+ // 'AMap.MouseTool',
+ // 'AMap.PolygonEditor'
+ ]
+ })
+ .then((_AMap) => {
+ AMap = _AMap;
+ _initMap(id);
+ mapInitDone = true;
+ onMapMountedEvents.forEach((e) => {
+ e();
+ });
+ onMapMountedEvents = [];
+ })
+ .catch((e) => {
+ console.log(e);
+ });
+}
+
+function _initMap(elementId) {
+ map = new AMap.Map(elementId, {
+ // mapStyle: 'amap://styles/e1e78509de64ddcd2efb4cb34c6fae2a',
+ features: ['bg', 'road'],
+ pitch: 45, // 鍦板浘淇话瑙掑害锛屾湁鏁堣寖鍥� 0 搴�- 83 搴�
+ viewMode: '2D', // 鍦板浘妯″紡
+ resizeEnable: true,
+ center: [121.6039283, 31.25295567],
+ zooms: [2, 26],
+ zoom: 14
+ });
+ // map = new AMap.Map(elementId);
+
+ // 娣诲姞鍗槦鍦板浘
+ satellite = new AMap.TileLayer.Satellite();
+ satellite.hide();
+ map.add([satellite]);
+
+ // _initMouseTool();
+ // _init3DLayer();
+ // _initDragEvent();
+}
+
+// 榧犳爣缁樺浘鍒濆鍖�
+function _initMouseTool() {
+ mouseTool = new AMap.MouseTool(map);
+}
+
+// 3D鍥惧眰鍒濆鍖�
+function _init3DLayer() {
+ object3Dlayer = new AMap.Object3DLayer();
+ map.add(object3Dlayer);
+}
+
+// 璁剧疆鍦板浘鎷栨嫿鐩戝惉浜嬩欢
+function _initDragEvent() {
+ let dragEndEvent;
+ map.on('dragstart', () => {
+ clearTimeout(dragEndEvent);
+ isDragging = true;
+ });
+ map.on('dragend', function () {
+ dragEndEvent = setTimeout(() => {
+ isDragging = false;
+ }, 8000);
+ });
+}
+
+export {
+ createMap,
+ onMapMounted,
+ map,
+ AMap,
+ mouseTool,
+ object3Dlayer,
+ isDragging
+};
diff --git a/src/utils/map/marks.js b/src/utils/map/marks.js
index a72dcdf..bf01656 100644
--- a/src/utils/map/marks.js
+++ b/src/utils/map/marks.js
@@ -2,7 +2,7 @@
* 楂樺痉鍦板浘鐐规爣璁扮粯鍒剁浉鍏�
*/
-import { map } from './index_old';
+import { map, AMap } from './index';
import { useToolboxStore } from '@/stores/toolbox';
const toolboxStore = useToolboxStore();
@@ -25,7 +25,7 @@
for (let i = 0; i < lnglats.length; i++) {
data.push({
lnglat: lnglats[i], //鐐规爣璁颁綅缃�
- name: `${fDatas.times[i]}<br/>${_factor.factorName}: ${_factor.datas[i].factorData} mg/m鲁`,
+ name: `${fDatas.times[i]}<br/>${_factor.factorName}: ${_factor.datas[i].factorData} 渭g/m鲁`,
id: i
});
}
@@ -34,12 +34,12 @@
var styleObject = {
url: 'https://a.amap.com/jsapi_demos/static/images/mass1.png',
// url: './asset/mipmap/ic_up_white.png', // 鍥炬爣鍦板潃
- // eslint-disable-next-line no-undef
+
size: new AMap.Size(11, 11), // 鍥炬爣澶у皬
- // eslint-disable-next-line no-undef
+
anchor: new AMap.Pixel(5, 5) // 鍥炬爣鏄剧ず浣嶇疆鍋忕Щ閲忥紝鍩哄噯鐐逛负鍥炬爣宸︿笂瑙�
};
- // eslint-disable-next-line no-undef
+
var massMarks = new AMap.MassMarks(data, {
zIndex: 5, // 娴烽噺鐐瑰浘灞傚彔鍔犵殑椤哄簭
zooms: [15, 18], // 鍦ㄦ寚瀹氬湴鍥剧缉鏀剧骇鍒寖鍥村唴灞曠ず娴烽噺鐐瑰浘灞�
@@ -50,11 +50,11 @@
// 3. 鑷畾涔夌偣鍑讳簨浠�
onClick(i);
});
- // eslint-disable-next-line no-undef
+
var marker = new AMap.Marker({
content: ' ',
map: map,
- // eslint-disable-next-line no-undef
+
offset: new AMap.Pixel(13, 12)
});
var timeout;
@@ -86,8 +86,7 @@
* @param {boolean} collision 鏍囨敞閬胯
* @returns
*/
- createLabelMarks(img, dataList, collision = true) {
- // eslint-disable-next-line no-undef
+ createLabelMarks(img, dataList, collision = true, showTxt = true) {
const layer = new AMap.LabelsLayer({
zooms: [3, 20],
zIndex: 1000,
@@ -119,7 +118,7 @@
retina: true
},
text: {
- content: data.name,
+ content: showTxt ? data.name : '',
direction: 'top',
offset: [0, -5],
style: {
@@ -136,7 +135,6 @@
index: i
};
- // eslint-disable-next-line no-undef
var labelMarker = new AMap.LabelMarker(curData);
// markers.push(labelMarker);
@@ -145,5 +143,21 @@
}
return layer;
+ },
+
+ createMarker({ position, icon, label, extData }) {
+ const marker = new AMap.Marker({
+ position: position,
+ offset: new AMap.Pixel(-10, -10),
+ icon: icon, //娣诲姞 icon 鍥炬爣 URL
+ title: label,
+ label: {
+ content: label,
+ direction: 'bottom'
+ },
+ extData
+ });
+ map.add(marker);
+ return marker;
}
};
diff --git a/src/views/fysp/task/MonitorObjEdit.vue b/src/views/fysp/task/MonitorObjEdit.vue
index 3479166..219bc98 100644
--- a/src/views/fysp/task/MonitorObjEdit.vue
+++ b/src/views/fysp/task/MonitorObjEdit.vue
@@ -1,5 +1,5 @@
<template>
- <el-affix :offset="60" target=".el-main">
+ <!-- <el-affix :offset="60" target=".el-main"> -->
<div class="page-header">
<el-page-header @back="goBack">
<template #content>
@@ -19,7 +19,7 @@
</el-page-header>
<el-divider />
</div>
- </el-affix>
+ <!-- </el-affix> -->
<CompMonitorObjEdit
ref="objEditRef"
:task="task"
diff --git a/src/views/fysp/task/TaskManage.vue b/src/views/fysp/task/TaskManage.vue
index 24129b6..07d98d9 100644
--- a/src/views/fysp/task/TaskManage.vue
+++ b/src/views/fysp/task/TaskManage.vue
@@ -43,6 +43,7 @@
<CompMonitorPlan
ref="planRef"
:task="curTask.data"
+ :day-task-list="dayTaskList"
@date-change="onDateChange"
></CompMonitorPlan>
</el-col>
@@ -51,7 +52,7 @@
create
v-model="curSubTaskList"
:loading="subTaskLoading"
- :create-loading="daytaskLoading"
+ :create-loading="daytaskCreateLoading"
height="56vh"
@add="handleAddSubtask"
@submit="handleSubtaskSubmit"
@@ -59,9 +60,9 @@
</el-col>
</el-row>
</el-tab-pane>
- <!-- <el-tab-pane label="鐩戠鍦板浘" name="second">
- <CompTaskMap></CompTaskMap>
- </el-tab-pane> -->
+ <el-tab-pane label="鐩戠鍦板浘" name="second">
+ <CompTaskMap :plans="curMonitorObjList"></CompTaskMap>
+ </el-tab-pane>
</el-tabs>
</el-row>
<el-divider></el-divider>
@@ -167,6 +168,9 @@
showMonitorObjList: [],
//褰撳墠閫変腑鐨勪换鍔�
curTask: {},
+ //褰撳墠閫変腑鐨勬棩浠诲姟
+ curDayTaskList: [],
+ daytaskLoading: false,
//鎿嶄綔鎸夐挳
buttons: [
{
@@ -186,7 +190,7 @@
// 褰撳墠閫夋嫨鐨勬棩浠诲姟
curDayTask: {},
curDay: undefined,
- daytaskLoading: false,
+ daytaskCreateLoading: false,
// 褰撳墠閫夋嫨鐨勬棩浠诲姟涓嬬殑瀛愪换鍔�
curSubTaskList: undefined,
subTaskLoading: false,
@@ -270,7 +274,18 @@
})
.finally(() => {
this.mainLoading = false;
+ this.fetchDayTasks();
});
+ },
+ fetchDayTasks() {
+ // 鑾峰彇鏃ヤ换鍔$粺璁′俊鎭�
+ this.dayTaskLoading = true;
+ return taskApi
+ .fetchDayTasks(this.curTask.data.tguid)
+ .then((res) => {
+ this.dayTaskList = res;
+ })
+ .finally(() => (this.dayTaskLoading = false));
},
editTask() {
this.$router.push({
@@ -340,7 +355,7 @@
_dayTask.settime = dayjs().toDate();
_dayTask.t1stverifytime = dayjs().toDate();
_dayTask.runingstatus = '鏈墽琛�';
- this.daytaskLoading = true;
+ this.daytaskCreateLoading = true;
taskApi
.putTask(_dayTask)
.then((res) => {
@@ -356,7 +371,7 @@
this.subTaskDrawer = true;
this.handleSubtaskSubmit();
})
- .finally(() => (this.daytaskLoading = false));
+ .finally(() => (this.daytaskCreateLoading = false));
}
}
},
diff --git a/src/views/fysp/task/components/CompMonitorObj.vue b/src/views/fysp/task/components/CompMonitorObj.vue
index 0047d9f..65da3fe 100644
--- a/src/views/fysp/task/components/CompMonitorObj.vue
+++ b/src/views/fysp/task/components/CompMonitorObj.vue
@@ -1,21 +1,45 @@
<template>
<div class="monitor-obj-wrapper">
<el-affix v-if="affix" :offset="60" target=".monitor-obj-wrapper">
- <div>
- <el-segmented
+ <el-scrollbar class="p-b-8" always>
+ <!-- <el-segmented
:model-value="activeName"
:options="activeTabs"
@change="tabChange"
- />
- </div>
+ /> -->
+ <el-tabs v-model="activeName" @tab-change="tabChange">
+ <el-tab-pane
+ v-for="item in activeTabs"
+ :key="item"
+ :label="item"
+ :name="item"
+ ></el-tab-pane>
+ </el-tabs>
+ </el-scrollbar>
</el-affix>
- <div v-else>
- <el-segmented
+ <el-scrollbar class="" always v-else>
+ <!-- <el-segmented
:model-value="activeName"
:options="activeTabs"
@change="tabChange"
- />
- </div>
+ /> -->
+ <el-tabs v-model="activeName" @tab-change="tabChange">
+ <el-tab-pane
+ v-for="item in activeTabs"
+ :key="item"
+ :label="item"
+ :name="item"
+ ></el-tab-pane>
+ </el-tabs>
+ </el-scrollbar>
+ <el-space size="large">
+ <el-tag type="info"> 鎬绘暟锛歿{ activeData.length }} </el-tag>
+ <el-checkbox-group v-model="checkList">
+ <el-checkbox label="鏈洃绠�" :value="0" />
+ <el-checkbox label="宸茬洃绠�" :value="1" />
+ <el-checkbox label="宸插鏍�" :value="2" />
+ </el-checkbox-group>
+ </el-space>
<el-scrollbar :height="height">
<el-space wrap>
<ItemMonitorObj v-for="obj in activeData" :key="obj.movid" :item="obj">
@@ -60,7 +84,7 @@
},
btnType: {
type: String,
- default: 'danger'
+ default: 'default'
},
// 澶撮儴閫夐」鏄惁鍚搁《
affix: Boolean,
@@ -70,16 +94,34 @@
data() {
return {
activeName: defaultTabName,
- tabs: []
+ tabs: [],
+ checkList: [0, 1, 2]
};
},
computed: {
activeData() {
const list = this.data.filter((v) => {
- return (
- this.activeName == defaultTabName || v.sceneType == this.activeName
- );
- // return this.tabName == defaultTabName || v.sceneType == this.tabName;
+ // 绛涢�夊綋鍓嶉�夋嫨鐨勬爣绛鹃〉瀵瑰簲鐨勫満鏅被鍨�
+ const b1 =
+ this.activeName == defaultTabName || v.sceneType == this.activeName;
+
+ // 璁$畻鍦烘櫙鐨勭洃绠$姸鎬�
+ let status;
+ if (v.extension1 == undefined || null) {
+ // 鏈洃绠�
+ status = 0;
+ } else {
+ const num = parseInt(v.extension1);
+ if (num >= 2) {
+ // 宸插鏍�
+ status = 2;
+ } else {
+ // 宸茬洃绠★紙1娆★級
+ status = num;
+ }
+ }
+ const b2 = this.checkList.indexOf(status) != -1;
+ return b1 && b2;
});
this.$emit('update:showData', list);
return list;
diff --git a/src/views/fysp/task/components/CompMonitorObjEdit.vue b/src/views/fysp/task/components/CompMonitorObjEdit.vue
index cccd5ea..01de63a 100644
--- a/src/views/fysp/task/components/CompMonitorObjEdit.vue
+++ b/src/views/fysp/task/components/CompMonitorObjEdit.vue
@@ -10,7 +10,7 @@
</div>
<el-divider />
<CompMonitorObj
- height="68vh"
+ height="62vh"
:data="curMonitorObjList"
show-btn
v-model:tabName="curSceneType"
@@ -21,14 +21,22 @@
</CompMonitorObj>
</el-col>
<el-col :span="8">
- <el-affix :offset="140">
+ <!-- <el-affix :offset="140"> -->
<div>
<el-text>鍙�夊満鏅�</el-text>
</div>
<el-divider />
- <div>
- <el-segmented v-model="curSceneType" :options="sceneTypeOptions" />
- </div>
+ <el-scrollbar class="scrollbar-flex-content" always >
+ <!-- <el-segmented v-model="curSceneType" :options="sceneTypeOptions" /> -->
+ <el-tabs v-model="curSceneType">
+ <el-tab-pane
+ v-for="item in sceneTypeOptions"
+ :key="item"
+ :label="item"
+ :name="item"
+ ></el-tab-pane>
+ </el-tabs>
+ </el-scrollbar>
<FYInfoSearch
placeholder="璇疯緭鍏ュ満鏅悕绉板叧閿瓧"
:data="showSceneList"
@@ -56,7 +64,7 @@
</ItemScene>
</template>
</FYInfoSearch>
- </el-affix>
+ <!-- </el-affix> -->
</el-col>
</el-row>
@@ -245,7 +253,7 @@
const total = this.curMonitorObjList.length;
const map = new Map();
this.curMonitorObjList.forEach((e) => {
- const d = e.scene
+ const d = e.scene;
if (!map.has(d.type)) {
map.set(d.type, { num: 0 });
}
@@ -274,7 +282,13 @@
});
},
deleteMov(item) {
- if (!(item.extension1 == null || item.extension1 == undefined || item.extension1 == '0')) {
+ if (
+ !(
+ item.extension1 == null ||
+ item.extension1 == undefined ||
+ item.extension1 == '0'
+ )
+ ) {
ElMessage({
message: '宸茬洃绠″満鏅棤娉曠Щ闄�',
type: 'error'
@@ -448,4 +462,10 @@
};
</script>
-<style scoped></style>
+<style scoped>
+.scrollbar-flex-content {
+ display: flex;
+ /* width: fit-content; */
+ height: min-content;
+}
+</style>
diff --git a/src/views/fysp/task/components/CompMonitorPlan.vue b/src/views/fysp/task/components/CompMonitorPlan.vue
index 3294472..c1e2856 100644
--- a/src/views/fysp/task/components/CompMonitorPlan.vue
+++ b/src/views/fysp/task/components/CompMonitorPlan.vue
@@ -1,6 +1,5 @@
<template>
<el-calendar
- v-loading="dayTaskLoading"
v-model="dateValue"
:range="dateRange"
@update:model-value="onDateChange"
@@ -53,6 +52,10 @@
task: {
type: Object,
default: () => {}
+ },
+ dayTaskList: {
+ type: Array,
+ default: () => []
}
});
const emit = defineEmits(['dateChange']);
@@ -98,22 +101,32 @@
/********************** 浠诲姟鏁版嵁 *********************************/
-// 鑾峰彇鏃ヤ换鍔$粺璁′俊鎭�
-const dayTaskLoading = ref(false);
-const dayTaskList = ref([]);
-function fetchDayTasks() {
- dayTaskLoading.value = true;
- return taskApi
- .fetchDayTasks(props.task.tguid)
- .then((res) => {
- dayTaskList.value = res;
- // 濡傛灉宸查�夋棩鏈熷瓨鍦紝鍦ㄩ噸鏂拌幏鍙栨棩浠诲姟缁熻淇℃伅鍚庯紝鍐嶆瑙﹀彂鐐瑰嚮浜嬩欢
- if (dateValue.value) {
- onDateChange(dateValue.value)
- }
- })
- .finally(() => (dayTaskLoading.value = false));
-}
+watch(
+ () => props.dayTaskList,
+ (nV, oV) => {
+ if (nV != oV && dateValue.value) {
+ onDateChange(dateValue.value);
+ }
+ },
+ { immediate: false }
+);
+
+// // 鑾峰彇鏃ヤ换鍔$粺璁′俊鎭�
+// const dayTaskLoading = ref(false);
+// const dayTaskList = ref([]);
+// function fetchDayTasks() {
+// dayTaskLoading.value = true;
+// return taskApi
+// .fetchDayTasks(props.task.tguid)
+// .then((res) => {
+// dayTaskList.value = res;
+// // 濡傛灉宸查�夋棩鏈熷瓨鍦紝鍦ㄩ噸鏂拌幏鍙栨棩浠诲姟缁熻淇℃伅鍚庯紝鍐嶆瑙﹀彂鐐瑰嚮浜嬩欢
+// if (dateValue.value) {
+// onDateChange(dateValue.value);
+// }
+// })
+// .finally(() => (dayTaskLoading.value = false));
+// }
// 鏃ヤ换鍔℃暟鎹睍绀�
const compMap = new Map();
@@ -123,7 +136,7 @@
return compMap.get(key).value;
}
const result = computed(() => {
- return dayTaskList.value.find((v) => {
+ return props.dayTaskList.find((v) => {
return dayjs(v.date).isSame(dayjs(day));
});
});
@@ -142,7 +155,7 @@
// 鎬讳换鍔$粺璁�
const taskStatistic = computed(() => {
const res = { total: 0, complete: 0, changed: 0 };
- dayTaskList.value.forEach((e) => {
+ props.dayTaskList.forEach((e) => {
res.total += e.totalTaskNum;
res.complete += e.completeTaskNum;
res.changed += e.changedTaskNum;
@@ -151,17 +164,17 @@
});
/********************** 鍒濆鍖� *********************************/
-watch(
- () => props.task,
- (nV) => {
- if (nV && nV.tguid) {
- fetchDayTasks();
- }
- },
- { immediate: true }
-);
+// watch(
+// () => props.task,
+// (nV) => {
+// if (nV && nV.tguid) {
+// fetchDayTasks();
+// }
+// },
+// { immediate: true }
+// );
-defineExpose({ fetchDayTasks });
+// defineExpose({ fetchDayTasks });
</script>
<style scoped>
.li-01 {
diff --git a/src/views/fysp/task/components/CompTaskMap.vue b/src/views/fysp/task/components/CompTaskMap.vue
index fb00bae..9079ab7 100644
--- a/src/views/fysp/task/components/CompTaskMap.vue
+++ b/src/views/fysp/task/components/CompTaskMap.vue
@@ -1,8 +1,25 @@
<template>
- <SceneMap></SceneMap>
+ <div style="width: 70vw; height: 600px; background-color: aliceblue">
+ <SceneMap :data="scenes"></SceneMap>
+ </div>
</template>
-
<script setup>
+import { computed } from 'vue';
+const props = defineProps({
+ // 鍦烘櫙璁″垝
+ plans: {
+ type: Array,
+ default: () => []
+ },
+ dayTasks: {
+ type: Array,
+ default: () => []
+ }
+});
-
-</script>
\ No newline at end of file
+const scenes = computed(() => {
+ return props.plans.map((p) => {
+ return p.scene;
+ });
+});
+</script>
diff --git a/vite.config.js b/vite.config.js
index 121fef6..87f98fa 100644
--- a/vite.config.js
+++ b/vite.config.js
@@ -24,10 +24,10 @@
resolvers: [
ElementPlusResolver({
importStyle: 'sass'
- }),
+ })
],
- dts: 'src/components.d.ts',
- }),
+ dts: 'src/components.d.ts'
+ })
// ElementPlus({
// useSource: true,
// }),
@@ -42,8 +42,8 @@
alias: [
{ find: /^@\//, replacement: `${pathSrc}/` },
- { find: /^~/, replacement: `` },
- ],
+ { find: /^~/, replacement: `` }
+ ]
// extensions: ['.js', '.mjs', '.vue', '.json', '.less', '.css']
},
build: {
@@ -52,14 +52,14 @@
input: path.resolve(__dirname, 'index.html'),
output: {
chunkFileNames: 'js/[name].[hash].js',
- entryFileNames: 'js/[name].[hash].js',
+ entryFileNames: 'js/[name].[hash].js'
// assetFileNames: "assets/[name].[hash].[ext]",
- },
- },
+ }
+ }
},
css: {
postcss: {
- plugins: [autoprefixer],
+ plugins: [autoprefixer]
},
preprocessorOptions: {
// less: {
@@ -67,11 +67,12 @@
// additionalData: `@import "${path.resolve(__dirname, 'src/styles/variable.less')}";`
// },
scss: {
- additionalData: `@use "@/styles/element/index.scss" as *;`,
- },
- },
+ additionalData: `@use "@/styles/element/index.scss" as *;`
+ }
+ }
},
server: {
- host: '0.0.0.0'
+ host: '0.0.0.0',
+ // port: 5174
}
});
--
Gitblit v1.9.3