From 622181ac965250cc96ca6faddff9753b50c22a16 Mon Sep 17 00:00:00 2001 From: zk Date: Thu, 7 Dec 2023 18:44:15 +0800 Subject: [PATCH 1/3] =?UTF-8?q?update=20=E6=B7=BB=E5=8A=A0=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=20=E5=AE=8C=E5=96=84=E5=9C=B0=E5=9B=BE=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + src/assets/img/alarm-icon.png | Bin 0 -> 4409 bytes src/assets/img/helicopter.png | Bin 3706 -> 3109 bytes src/assets/img/position.png | Bin 0 -> 1217 bytes src/assets/less/index.less | 27 ++- src/assets/mapUtils/commonFun.ts | 29 ++- src/assets/mapUtils/map.ts | 238 +++++++++++--------- src/components/body-d-left/bodyLeftHooks.ts | 38 ++++ src/components/body-d-left/oneL.vue | 20 +- src/components/body-d-right/oneR.vue | 77 +++++-- src/components/chinaMap/chinaHooks.ts | 19 ++ src/components/chinaMap/chinaMap.vue | 84 +++++-- src/components/dialog/Dialog.vue | 12 +- src/utils/bus.ts | 5 + 14 files changed, 391 insertions(+), 159 deletions(-) create mode 100644 src/assets/img/alarm-icon.png create mode 100644 src/assets/img/position.png create mode 100644 src/utils/bus.ts diff --git a/package.json b/package.json index 437fe99..11506a6 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "@amap/amap-jsapi-loader": "^1.0.1", "axios": "^1.6.2", "dayjs": "^1.11.10", + "mitt": "^3.0.1", "path": "^0.12.7", "prettier": "^3.1.0", "vue": "^3.3.4", diff --git a/src/assets/img/alarm-icon.png b/src/assets/img/alarm-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..44333614ec7deaedea1866ea9d385413cd5cd972 GIT binary patch literal 4409 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 literal 3706 zcmaJ^dpwhW8y@CNA?L)*p(e9U%(hV2urkMCq{6l|Y-5{-aw?IELKH zLuS(Tyf!g()-qcLy<=${A7i^ifH!#H9s z|B1!hnShUTH~|R z0ys1#1GK5=<;@J@n1Fei{(S{{z;9Uw`=2uL3I+@I3V;G0+a1tbvuKa@`Yjb?Kk zssG9Me+sjSApumFBbChzVv%``JEpN2Dga}_qIz+dEFzQX|Er3YG!~W1Wcjf{7EVae zE>{|Z!sN0cf8hxP44%Q}crnOSJk|uvQ_!Q)C>R5ClmP+-#~Q#znN{LK&Iq|Kehq$Rmf*PU)xUzQIttf-7j*sHMwv;d-Eu6E@6qv#mlFwR7U^Tc$OaOoLOG%rgimTNdaZ5C08>u zY`SDF91x-P)r}COxb22*tk2yqPu&pY85KDtG1v*H6Z{ghdUg}@bhAQ9fX;B zBs;T2EFmCICxNajb>);bVI8+|$oVdNodeZx48=R0Y%{zbULAY42fi+OUItK!5+~&~ zbQdXplO8LiK+3<2_EfhU;1u}a8DF

^bHj^FCWMmWEl=)w!;kr{#9hMmP-lP>*jR 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 Ag8%>k diff --git a/src/assets/img/position.png b/src/assets/img/position.png new file mode 100644 index 0000000000000000000000000000000000000000..b719a87a8eaac2f684e31248d6c1460f8172f3ca GIT binary patch literal 1217 zcmV;y1U~zTP)Px(dr3q=RA@u(m|tidWfaBFokT(lg%%$KTfw|oL2bZlrJ_)=4=PqnVrH_Eoi(_# zF(LtdYHNa(YSSl$Aja&h#LNaaGig#WqCT`(P+F`;XjHJiRIm|zkQ53n#bmC`{=ph{ zcfLD2F%&v4%d+R5dw%oH-1&A0H~2v}cz)ajSnm~#Z3RXrysgdTcM-Hs2DX5B3xdzm zu>__i0+ty5%ra}!{V9Dh4)}%vvXj$K6Z_ADkq`wU6qvM+Gd*3OiRxB~BLftJ`+f$% zzD5E7m}5=LMg@rkU^`P|00rS=JUDBa-F;F+F@T+SzXxNdw2_jYFmEM|2b8pBkqE$c zT$Y$e)mo;ZoJ(0~=e=1lw?_>nsv|mXCG`%K8YKYR@rD83uVNUVhK^dMejv;*6ren9 z=E98D;&;}xePPon6u@@ePh%LBQTgU9(|D#{ab1A*Jo}Z5HX~ z=$Mt%yJ~sW1Q;DJ+}YfuU5FflFc0SWVm;B$MxGtZD}HN#Z{oLVS!x2<&eZDwy%hoA zENTA1bWh^s^|iUl!sF~~M*!@Sd-9-VcE2qG$T{BE41Pq`jHWG9*Xz~Tj^_bf^OC3@ zlDuhEXa9{tC9HDig;Hs50Hi`hU zj(d@Ss?^mRt8a&;+i?aKGp4ak1YkSf48Teos`6P<-U`dN$rmi99CZD z;8NB6y{pIP>iY6HJt6UBU?^i6RY!Ww=Rhv+KFf^bl12c|TBh+({W0o(D}5Fap*@{6 zJ`t_J$jC^`hRwH~1F&5NLDRm5!>h+>X?$Wx`V0VY{_3Sa+Xe;(u89Bwan5lES$G-! z+k_Vg+7H2ZhJU|kY+jd?fT47a%cnG9>m0V@wE`Th!Y0`&#HPLsP@84yHTPuU{|EBk z`(W;mEt15DXw*vTFV`yx1t`98gMR` z|6sz~-9&s^(kM*3!u0Sz 0) { + for (let i = 0; i < this.airMarkerList.length; i++) { + this.airMarkerList[i].setMap(null); + } + } + // this.map.remove(this.airMarkerList); + }, + // + /** + * @desc 创建覆盖物组,用于批量处理点 (控制显隐,点击事件等) + * @param result + */ + createOverlay(result) { + this.removeOverlayGroup(); this.overlayGroup = new AMap.OverlayGroup(); for (let i = 0; i < result.length; i++) { let { type, lon, lat } = result[i]; @@ -100,130 +127,125 @@ export const Map = { clearOverlay() { if (this.overlayGroup) { this.map.remove(this.overlayGroup); + this.overlayGroup.setMap(null); this.overlayGroup = null; } }, - //创建直升机marker + /** + * @desc 创建直升机marker + * @param result + */ createAircraft(result) { - this.clearAircraft(); - this.clearOverlay(); - // this.aircraftGroup = new AMap.OverlayGroup(); + this.removeOverlayGroup(); + this.clearActiveHospital(); if (!Array.isArray(result) && result.length == 0) return; - const content = ` -

-
-
-
-
-
-
- 4009-120-999 -
-
-
- `; - const markers = []; - for (let i = 0; i < result.length; i++) { - let { lon, lat } = result[i]; - const marker = new AMap.Marker({ - // 点的坐标 - position: [lon, lat], - //启用点击事件 如果需要点击事件,必须开启 - clickable: true, - title: `4009-120-999`, - content: content, - offset: new AMap.Pixel(-16, -30), - }); - markers.push(marker); - } - - // //将组 挂载到地图上 - // this.aircraftGroup.setMap(this.map); - // //将需要批量控制的点放到一个组中,通过控制组,就可以操作组内所有所有覆盖物 - // this.aircraftGroup.addOverlay(markers); - - if (this.cluster) { - // this.cluster.setMap(null); - this.map.remove(this.cluster); - // this.cluster = null; - this.cluster.setMap(null); - } - //使用renderCluserMarker属性实现聚合点的完全自定义绘制 - let sts = [ - { - url: mapbg, - size: new AMap.Size(32, 32), - offset: new AMap.Pixel(-16, -30), - textColor: '#fff', - textSize: 20, - }, - ]; + this.createAirRange(result); let that = this; - let arr = result.map((item) => ({ weight: 4, lnglat: [item.lon, item.lat] })); + let arr = result.map((item) => ({ weight: 4, lnglat: [item.lon, item.lat], params: item.name })); let count = 4; this.cluster = new AMap.MarkerClusterer( that.map, // 地图实例 arr, { renderMarker: (context) => { - var factor = Math.pow(context.count / count, 1 / 18); - var div = document.createElement('div'); - var Hue = 180 - factor * 180; - var bgColor = 'hsla(' + Hue + ',100%,50%,0.7)'; - var fontColor = 'hsla(' + Hue + ',100%,20%,1)'; - var borderColor = 'hsla(' + Hue + ',100%,40%,1)'; - var shadowColor = 'hsla(' + Hue + ',100%,50%,1)'; - var size = Math.round(30 + Math.pow(context.count / count, 1 / 5) * 20); + let factor = Math.pow(context.count / count, 1 / 18); + let div = document.createElement('div'); + div.className = 'render-air'; + let Hue = 180 - factor * 180; + let size = Math.round(30 + Math.pow(context.count / count, 1 / 5) * 20); div.style.width = div.style.height = size + 'px'; - div.innerHTML = content || context.count; - div.style.lineHeight = size + 'px'; - div.style.color = fontColor; + div.innerHTML = aircraftContent() || context.count; + div.style.color = '#fff'; div.style.fontSize = '14px'; - div.style.textAlign = 'center'; context.marker.setOffset(new AMap.Pixel(-size / 2, -size / 2)); context.marker.setContent(div); + this.airMarkerList.push(context.marker); + context.marker.on('click', () => { + console.log('data', context); + }); }, } ); - console.log('xx', this.cluster); this.cluster.setMap(this.map); - this.getRange(result); }, clearAircraft() { - if (this.aircraftGroup) { - this.map.remove(this.aircraftGroup); - this.aircraftGroup = null; + if (this.cluster) { + this.map.remove(this.cluster); + this.cluster = null; } }, - getRange(list) { - //绘制飞机的范围图 - var array = new Array(list.length); - for (var i = 0; i < list.length; i++) { - var circle = new AMap.Circle({ - center: [list[i].lon, list[i].lat], - radius: 100000, //半径 - borderWeight: 3, - strokeColor: '#FF33FF', - strokeOpacity: 1, - strokeWeight: 6, - strokeOpacity: 0.2, - fillOpacity: 0.4, - strokeStyle: 'dashed', - strokeDasharray: [10, 10], - // 线样式还支持 'dashed' - fillColor: '#1791fc', - zIndex: 50, - }); - circle.setMap(this.map); - array.push(circle); + /** + * @desc 飞机范围 + * @param list + */ + createAirRange(list) { + this.removeOverlayGroup(); + this.circleGroup = new AMap.OverlayGroup(); + for (let i = 0; i < list.length; i++) { + let circle = createCircle({ lon: list[i].lon, lat: list[i].lat }); + this.circleGroup.setMap(this.map); + this.circleGroup.addOverlay(circle); + } + }, + clearAirRange() { + if (this.circleGroup) { + this.map.remove(this.circleGroup); + this.circleGroup = null; + } + }, + /** + * @desc 地方医院医疗点显示 + * @param cityCode 城市code + * @param keywords 搜索名称 + */ + createActiveHospital(cityCode: string, keywords = '医院') { + this.removeOverlayGroup(); + this.clearActiveHospital(); + if (!cityCode) return; + // AMap.plugin(['AMap.PlaceSearch'], () => { + // //构造地点查询类 + // + // }); + this.placeSearch = new AMap.PlaceSearch({ + pageSize: 30, // 单页显示结果条数 + pageIndex: 1, // 页码 + city: cityCode, // 兴趣点城市 + citylimit: true, //是否强制限制在设置的城市内搜索 + map: this.map, // 展现结果的地图实例 + // panel: 'map_hospital', // 结果列表将在此容器中进行展示。 + autoFitView: false, // 是否自动调整地图视野使绘制的 Marker点都处于视口的可见范围 + }); + //关键字查询 + this.placeSearch.search(keywords); + }, + clearActiveHospital() { + if (this.placeSearch) { + // debugger; + this.placeSearch.clear(); + this.placeSearch = null; + } + }, + createMarker(option) { + this.clearMarker(); + let { lon, lat, zoom = 12 } = option; + const icon = createIcon({ icon: alarmIcon, iconSize: [36, 42], imageSize: [36, 42] }); + this.marker = new AMap.Marker({ + position: [lon, lat], + icon: icon, + offset: new AMap.Pixel(0, 0), //设置偏移量 + // label: { + // content: labelContent, + // offset: labelOffset, + // }, + }); + this.map.add(this.marker); + this.map.setZoomAndCenter(zoom, [lon, lat]); + }, + clearMarker() { + if (this.marker) { + this.marker.setMap(null); + this.marker = null; } - return array; }, }; diff --git a/src/components/body-d-left/bodyLeftHooks.ts b/src/components/body-d-left/bodyLeftHooks.ts index 27833ff..eb9f132 100644 --- a/src/components/body-d-left/bodyLeftHooks.ts +++ b/src/components/body-d-left/bodyLeftHooks.ts @@ -1,6 +1,44 @@ import { ref } from 'vue'; import * as echarts from 'echarts'; +export function useStatistics() { + const statistics = ref([ + { + name: '最新呼入电话', + value: '', + key: 'gross', + }, + { + name: '最新受理电话', + value: '', + key: 'alerdyreceive', + }, + { + name: '突发重大伤病应急', + value: '', + key: 'jqqz', + }, + { + name: '重大伤病应急就医', + value: '', + key: 'dbjy', + }, + ]); + + function setStatistics(data = {}) { + statistics.value.forEach((item) => { + const { key } = item; + item.value = data[key]; + }); + console.log('fffffff', statistics.value); + } + + return { + statistics, + setStatistics, + }; +} + export const timeTab = [ { name: '全部', diff --git a/src/components/body-d-left/oneL.vue b/src/components/body-d-left/oneL.vue index d1d2854..af9cc6d 100644 --- a/src/components/body-d-left/oneL.vue +++ b/src/components/body-d-left/oneL.vue @@ -12,9 +12,9 @@ >
-
- {{ item?.title }} - {{ item?.gross }} +
+ {{ item?.name }} + {{ item?.value }}
@@ -25,10 +25,10 @@ import { onMounted, ref } from 'vue'; import PublicTitle from '../publicTitle.vue'; import { list } from './left.api'; - import { timeTab, useSpin } from '/@/components/body-d-left/bodyLeftHooks.ts'; + import { timeTab, useSpin, useStatistics } from '/@/components/body-d-left/bodyLeftHooks.ts'; const typeTime = ref(timeTab); - const dataLists = ref([]); + const { statistics, setStatistics } = useStatistics(); const selectIndex = ref(0); const selectVal = ref('1'); const { setSpin, spinning } = useSpin(); @@ -42,10 +42,10 @@ try { const { code, result } = (await list({ condition: selectVal.value })) || {}; setSpin(!spinning.value); - if (code != 200) { + if (code != 200 || !Array.isArray(result)) { return; } - dataLists.value = result?.map((item) => ({ ...item, title: '最新呼入电话' })); + setStatistics(result[0]); } catch { setSpin(!spinning.value); } @@ -70,10 +70,6 @@ overflow-y: auto; position: relative; - > :nth-child(1) { - padding-top: 0 !important; - } - .spin { position: absolute; left: 50%; @@ -100,7 +96,7 @@ } } - .server-item:nth-child(2n) { + .server-item:nth-child(odd) { background-color: #0a0a0c; } } diff --git a/src/components/body-d-right/oneR.vue b/src/components/body-d-right/oneR.vue index 76e6521..77322ac 100644 --- a/src/components/body-d-right/oneR.vue +++ b/src/components/body-d-right/oneR.vue @@ -4,11 +4,12 @@
- {{ item?.realName }} - {{ item?.eventType_dictText }} + {{ item?.realName }} + {{ item?.eventType_dictText }}
{{ item?.warnTime }} +
@@ -25,23 +26,23 @@
姓名: - {{ userInfo.name }} + {{ userInfo?.realName }}
二级单位: - {{ userInfo.unit }} + {{ userInfo?.orgName1 }}
手机号码: - {{ userInfo.iphone }} + {{ userInfo?.phone }}
异常事件: - {{ userInfo.abnormal }} + {{ userInfo?.eventType_dictText }}
发生时间: - {{ userInfo.time }} + {{ userInfo?.warnTime }}
发生地点: @@ -54,23 +55,24 @@ + \ No newline at end of file diff --git a/src/utils/bus.ts b/src/utils/bus.ts new file mode 100644 index 0000000..5dc098c --- /dev/null +++ b/src/utils/bus.ts @@ -0,0 +1,5 @@ +// 引入mitt插件 index.ts +import mitt from "mitt" + +const $bus = mitt(); +export default $bus \ No newline at end of file From 190d69573f843e3bf48bba6a37624ce01a89c160 Mon Sep 17 00:00:00 2001 From: zk Date: Fri, 8 Dec 2023 14:20:35 +0800 Subject: [PATCH 2/3] =?UTF-8?q?update=20=E6=B7=BB=E5=8A=A0websocket?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E6=8E=A8=E9=80=81=E5=91=98=E5=B7=A5=E6=8A=A5?= =?UTF-8?q?=E8=AD=A6=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + src/api/request.ts | 14 +++- src/components/body-d-left/bodyLeftHooks.ts | 1 - src/components/body-d-left/oneL.vue | 3 + src/components/body-d-left/threeL.vue | 3 +- src/components/body-d-right/oneR.vue | 10 +-- src/components/chinaMap/chinaMap.vue | 14 +++- src/utils/socket.ts | 54 +++++++++++++++ src/utils/utils.ts | 25 +++++++ src/views/components/dialogHooks.ts | 20 ++++++ src/views/components/employeeDialog.vue | 76 +++++++++++++++++++++ src/views/index.api.ts | 8 +++ src/views/index.vue | 44 ++++++------ 13 files changed, 240 insertions(+), 33 deletions(-) create mode 100644 src/utils/socket.ts create mode 100644 src/utils/utils.ts create mode 100644 src/views/components/dialogHooks.ts create mode 100644 src/views/components/employeeDialog.vue create mode 100644 src/views/index.api.ts diff --git a/package.json b/package.json index 11506a6..4f81fce 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "mitt": "^3.0.1", "path": "^0.12.7", "prettier": "^3.1.0", + "qs": "^6.11.2", "vue": "^3.3.4", "vue-router": "^4.2.5", "vue3-seamless-scroll": "^2.0.1" diff --git a/src/api/request.ts b/src/api/request.ts index 58390ed..0360c96 100644 --- a/src/api/request.ts +++ b/src/api/request.ts @@ -1,5 +1,4 @@ import axios from 'axios'; -import requestURL from './url'; import { getAppEnvConfig } from '../utils/env.ts'; const { VITE_GLOB_API_URL } = getAppEnvConfig(); @@ -29,4 +28,15 @@ export const get = (url, params) => { reject(err.data); }); }); -}; \ No newline at end of file +}; +export const post = (url: string, params: any) => + new Promise((resolve, reject) => { + service + .post(url, params) + .then((res: any) => { + resolve(res.data); + }) + .catch((err: any) => { + reject(err); + }); + }); \ No newline at end of file diff --git a/src/components/body-d-left/bodyLeftHooks.ts b/src/components/body-d-left/bodyLeftHooks.ts index eb9f132..b3a0649 100644 --- a/src/components/body-d-left/bodyLeftHooks.ts +++ b/src/components/body-d-left/bodyLeftHooks.ts @@ -30,7 +30,6 @@ export function useStatistics() { const { key } = item; item.value = data[key]; }); - console.log('fffffff', statistics.value); } return { diff --git a/src/components/body-d-left/oneL.vue b/src/components/body-d-left/oneL.vue index af9cc6d..4fd57cb 100644 --- a/src/components/body-d-left/oneL.vue +++ b/src/components/body-d-left/oneL.vue @@ -23,6 +23,7 @@ + \ No newline at end of file diff --git a/src/views/index.api.ts b/src/views/index.api.ts new file mode 100644 index 0000000..f864e36 --- /dev/null +++ b/src/views/index.api.ts @@ -0,0 +1,8 @@ +import { get } from '/@/api/request'; + +export enum Api { + deleteWatchNo = 'health-watch/watch/watchMonitorData/delete', +} + +//获取全部部门 +export const deleteWatchNo = (params: any) => get(Api.deleteWatchNo, params); \ No newline at end of file diff --git a/src/views/index.vue b/src/views/index.vue index 00d655f..df30f7a 100644 --- a/src/views/index.vue +++ b/src/views/index.vue @@ -23,10 +23,11 @@
+
\ No newline at end of file diff --git a/src/views/components/employeeDialog.vue b/src/views/components/employeeDialog.vue index 0970f3a..b8647fe 100644 --- a/src/views/components/employeeDialog.vue +++ b/src/views/components/employeeDialog.vue @@ -2,6 +2,11 @@