From 617284f5e6dacec218c49d99295f0295ea11bda7 Mon Sep 17 00:00:00 2001 From: IAMHERE <446961233@qq.com> Date: Fri, 29 Dec 2023 17:39:46 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix-=E5=9C=B0=E5=9B=BE=E7=82=B9=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/api/map/index.js | 12 + ruoyi-ui/src/assets/screen/xtb/xjbuttom.png | Bin 0 -> 2219 bytes ruoyi-ui/src/assets/screen/xtb/xjleft.png | Bin 0 -> 2267 bytes ruoyi-ui/src/assets/screen/xtb/xjright.png | Bin 0 -> 2319 bytes ruoyi-ui/src/assets/screen/xtb/xjtop.png | Bin 0 -> 2133 bytes ruoyi-ui/src/views/boardView/editInfo.vue | 5 +- .../views/components/videoPlayer/myVideo.vue | 167 +++++++++ ruoyi-ui/src/views/index.vue | 345 +++++++++++------- ruoyi-ui/src/views/map/Thumbnail/data.js | 192 ++++++++++ .../src/views/map/Thumbnail/images/bg.png | Bin 0 -> 31452 bytes .../src/views/map/Thumbnail/images/tag0.png | Bin 0 -> 1240 bytes .../src/views/map/Thumbnail/images/tag1.png | Bin 0 -> 1230 bytes .../src/views/map/Thumbnail/images/tag2.png | Bin 0 -> 1333 bytes .../src/views/map/Thumbnail/images/tag3.png | Bin 0 -> 1179 bytes .../src/views/map/Thumbnail/images/tag4.png | Bin 0 -> 1569 bytes ruoyi-ui/src/views/map/Thumbnail/index.vue | 176 +++++++++ ruoyi-ui/src/views/map/Thumbnail/utils.js | 20 + ruoyi-ui/src/views/map/index.vue | 28 +- 18 files changed, 800 insertions(+), 145 deletions(-) create mode 100644 ruoyi-ui/src/api/map/index.js create mode 100644 ruoyi-ui/src/assets/screen/xtb/xjbuttom.png create mode 100644 ruoyi-ui/src/assets/screen/xtb/xjleft.png create mode 100644 ruoyi-ui/src/assets/screen/xtb/xjright.png create mode 100644 ruoyi-ui/src/assets/screen/xtb/xjtop.png create mode 100644 ruoyi-ui/src/views/components/videoPlayer/myVideo.vue create mode 100644 ruoyi-ui/src/views/map/Thumbnail/data.js create mode 100644 ruoyi-ui/src/views/map/Thumbnail/images/bg.png create mode 100644 ruoyi-ui/src/views/map/Thumbnail/images/tag0.png create mode 100644 ruoyi-ui/src/views/map/Thumbnail/images/tag1.png create mode 100644 ruoyi-ui/src/views/map/Thumbnail/images/tag2.png create mode 100644 ruoyi-ui/src/views/map/Thumbnail/images/tag3.png create mode 100644 ruoyi-ui/src/views/map/Thumbnail/images/tag4.png create mode 100644 ruoyi-ui/src/views/map/Thumbnail/index.vue create mode 100644 ruoyi-ui/src/views/map/Thumbnail/utils.js diff --git a/ruoyi-ui/src/api/map/index.js b/ruoyi-ui/src/api/map/index.js new file mode 100644 index 00000000..c5b02931 --- /dev/null +++ b/ruoyi-ui/src/api/map/index.js @@ -0,0 +1,12 @@ + + +import request from '@/utils/request' + +// 地图 情报板接口 +export function getEnergyBoardAPi(params){ + return request({ + url:'/iot/board/list', + method:'get', + params + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/assets/screen/xtb/xjbuttom.png b/ruoyi-ui/src/assets/screen/xtb/xjbuttom.png new file mode 100644 index 0000000000000000000000000000000000000000..0f76beac0e9bff4254b1801c5f7deea44a4951fc GIT binary patch literal 2219 zcmV;c2vqlpP)Px-Wl2OqRCr$PoX>9?#}&uFj}$DSwkrlwL;VOW$^jw+K_mvSA;V52DiM|xy3e+Yar>=W9s= zki!*eE>|SAv^9VriJX~z`#$?--n@CUg1yr88W6X45WA;BXhkd|h^hekbUTFz1PRGt zA)qja79`>?%ADIipT~Myk8Ox%fSA@Jb!Zg<=9I#G5QxXSCE-R#6(Po!R4gqR2M}}9 zA%Fw~@n8m%ZiR5!Z&O#x>roJeLdfOK#G!EQX17c|t$taECw^4XUj|cwcbIQ3sdFM2S14GVtw-w6E(f|g&>rbU z$3VaRaU!TNR?a9&LLB)~T~HZZW-nVCn|LsD8;djF>c1T%rRTro_k`Iq{90a*r9c)zv;p3o{+H(q+tLu`q0yrV z4;^`?VLIVeJAzdr+%r6gmrtEE)h^xa5TU(jTP*c>Sx~N+1t$WLe$g*ayJReHiS(c#xJp50|NJ+v z{a4k_Ox(T42eCigX}2{?6yE?PxO5xNAb?Q-XY3^cJ6In{N?HfIcLs^GWTce!#K}CZt_@kA%bpgKUfGXRB;2FsYlq_+{EMMB-WOH z!ba*b)>a!>8VWWN_t~f>;aXG)o^&h@a7I-Yw6xS(N5CIgN)Z3X?Ljs4lAj zE-cR6#(%%KRqcvtW z@eLyt41O~RzE}LG0j`e;kYP%0wBHQNc}khz#V~UtKWs*j(U&@qT7QB>()~i+OPk$7 zTLcg&O4lgb6gImV6f}9~9`640dQ&Wl&mAAY)%V}h0LQLOy8?Ok_z_IKKZex$CSLgX zFT2IY)pcokum0g3vpKLW-)38S1}!omxXPiG;iqr^I_>)~)S1D4eD>knS|J4a`k(%; z;gl-|psxS(BlLgLnC&-L#2l6A#4t00mdJF*fWo`ZgsGB=QjG3r1lLV8zZv4H6Tdx* z@!w_hdFFmdV(jvCNsvx}tXItt>;;6EHiX6neJ(xzI%L zF0d7MIhgR{=iqQ9kj(-x)YqfaFti6MNM#fzZ&^7tPKp(ihwZ#c0^CXFmX{~8+BW4t zHUmJX^_3ewtA?nTAWJHe7F;!n#D2F*C&;OpJGlJ&Y^E6JKtB$lMb^g?5>FXEJwY^$ zPA;m8fgr{i-N`1y-uCStqz%%@??-^NzQdb1BW;zy1O#XK zou7wT8>HU=5*|HICI;(Fc|l5BU$^MQ?P^NZ5KZUKGX@OVaXZUzjt@Z&z0`?I|G4EF zFO>PCc6vTzph1Q6UJoF7hG-A5!GKPn)kn1aK3`Vzgx9)mDR@d@vYMf@swGA>H^3ow z3(%*3OgmcU{rD_W4a&!?M&3r&p0S{kMdb(GMT+jc=R}3 zFBiOAzwQui>*Ufz1fzC__1bb0s|yeGu1T}ZpE~cgFPqR@1TK5C1U4O9$5bPZ9Pok- zgJ?ftdhZfA2W#%+_sj+5kh_}8y!OkmOK1ne*<;uQ=NKxf#6(8n8UfbZ>gwj5dKm&t z8w1p7p#~~b=*@cqn6XW;^-TO_`a|~J0|&6b>o?lsirzy|xLFRBH!?wdZq5nrL=QV@ zyDOGhPT-t(%egZq0SqZsd>YBLGiN3ETc_f0Z0fl+o84X5N8DH~?DDs@7hVWqpy(q2 zp@2VwIM2eZHQo0fQX(? z-M>P_tsV;XEMO{tL^^=@zBMEoHNRCa@Gi}XUIew<86M%gmN!PDmv{%=%yWy t!{z&s?B9HelKwn^R9cYmJFIeg`#-pFOKN_YIH~{u002ovPDHLkV1nH6HkAMX literal 0 HcmV?d00001 diff --git a/ruoyi-ui/src/assets/screen/xtb/xjleft.png b/ruoyi-ui/src/assets/screen/xtb/xjleft.png new file mode 100644 index 0000000000000000000000000000000000000000..734de5917a138141d665dc6ccb70628dab39dc7b GIT binary patch literal 2267 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 literal 0 HcmV?d00001 diff --git a/ruoyi-ui/src/assets/screen/xtb/xjtop.png b/ruoyi-ui/src/assets/screen/xtb/xjtop.png new file mode 100644 index 0000000000000000000000000000000000000000..22e1e05b570e5fdd99b531aecf57995cd2024b06 GIT binary patch literal 2133 zcmV-b2&(sqP)Px-4@pEpRCr$PoZn9rR}{y;cZawuLS4JYMQj9Y3dE*B8;MO-SbWj8Nx_HOhyDOx z+BbouuZ{2*pg#7YuF*c2J_vni>qB*^wb5weLX#G3s*5Q<)<9eobusRo=G@s?huK+o z7xu@X-j`WmcIM9g%=g@L&p8)?Rn~mdR1HE?Ou#LGYI2|oq#Hi^ZK{{YL}RlH z3@R#47Ru!26=FhlK#%T_Fep~sWGv)*WV(8xjJ3ho;U@w%1H|eoi4;!3&R!BODx)>U+_ex3SL3-1-$2 z{keph6NqMbY%(XWjAH7_pU<`GGJPqvxw8)5#`>pIr$Aq>l(`~^JmuwC4PZ=dyPN#D99R}F-Zk@bbC4A8ySX-kkimh8=L+1a3n`?5B%89_9w zZ({hWt(_Jlz>}B9(D&0dT>^{eH!1(`HoW}(Wo5L;$wKv&;`nK_LA_$&Bm*JcLT zb?SobYPF}__8_^RCKDTiir$Nr&z>t&LW~EePv{GFUNYP~cge2oWWSDl(2TwhcgWAI zKpmjo>895_5~Q6?EBDpx_y~c%-@Kwf)!)3hj(;qAyz|{s)pDWq%;l{a5 z2jPHKkRS&9*x3VRGnz_)<~P`^$PHhAXIl%iuEK*i55BK^ zupx!eW(K(gqFnnC`uK_1dAU7&&9)C`>{v%b4bFbG-_nGpdH@|{ z`@#J(am}lxm;-Hp7%B}C5RD3C^T{#K)zsXjPDCDNmoQ$=cZxYC+xG2}OA!XC5Z=}m zDIrQH#)0dcF8cS}B}`ozEoNU|-uoFNQ2SAv45|YNT&xgn@%a+i6Q&a!|77*C3STz+ zjsVyHyz}M9+8jwZ#JNi0yG!oaBJOgxuO2^b%kY_fhqO37!CP$OEV=qNeReS7#SCRT|zn$;6Orzda!WIsH0HPWPt zJu}2{Dc|2`e#Y#0&MOC=(;+PWV^y{8z}D7g2tt1XBAZgXW+aL~WcKSpVqO&RGsLq1 zI##n1c`;n#TqEZQW05cao*O5vxk{WHSBYysFCsc$m}2C7yaHQxzJ+c3c0;H*CR(P+ zPXe7B+~y#+om-jLBcm2&6FD9kt)d?v!=rBZW8-Z4lz7V!o`mLd}U6ywcp-se7PPh1tyn6imq6WJeoVT$Sp89Q; z&=?l+{s+Pc!%|cP5k+Jr`yjYt;fV`P!U4C4!AA}>f_Gw>;4)P98SVtf5Giu`B~KI0 zhd-0=r1A(GWY|sjP>T^WWpJLl>g4)NR+vB#F$|M}fbtN5mB7l@vb}eQnv|H_ndK7# zt;Ri%#RkghDK6=Nfd8Ub9Fh=sPZM|a0(b8Ew?7m_jqa*SX(~50)|t1G@s_b6uAb7qS!`td> zUb+bduqC)uW5838O6Y+D?M8*NU%^203A47nO)ElVg2*)yRZ!EDzTR_CXMX#7&# zgXL&OwJ=092nfX#1k>Ft-vhN;uCI@yP_@XA9ugEW%#%Pc+p+u~A{<_Csa4!800000 LNkvXXu0mjf;TZ|; literal 0 HcmV?d00001 diff --git a/ruoyi-ui/src/views/boardView/editInfo.vue b/ruoyi-ui/src/views/boardView/editInfo.vue index e5481cb2..99fed844 100644 --- a/ruoyi-ui/src/views/boardView/editInfo.vue +++ b/ruoyi-ui/src/views/boardView/editInfo.vue @@ -437,13 +437,16 @@ export default { this.dialogVisible = true this.itemPropertyMap = new HashMap() this.alignmentNum = 2 + console.log('点击编辑按钮数据回显', this.boardEmitItem) this.dataForm = JSON.parse(JSON.stringify(this.boardEmitItem)) this.dataForm.formatStyle = this.formatStyle this.dataForm.COLOR = this.getColorValue(this.boardEmitItem.COLOR) console.log(this.dataForm, 'this.dataForm') // this.dataForm.FONT = this.getFont(this.boardEmitItem.FONT) this.dataForm.CONTENT = JSON.parse(JSON.stringify(this.boardEmitItem.CONTENT.replace('
', '\n').replace(/ /g, ' ').replace('', '\n'))) - this.dataForm.STAY = JSON.parse(JSON.stringify(Number(this.boardEmitItem.STAY) / 100)) + // this.dataForm.STAY = JSON.parse(JSON.stringify(Number(this.boardEmitItem.STAY) / 100)) + this.dataForm.STAY = Number(this.boardEmitItem.playbackDuration) / 10 + console.log('数据回显处理后的参数', this.dataForm) this.getFontSizeList() }, getColorValue(color) { diff --git a/ruoyi-ui/src/views/components/videoPlayer/myVideo.vue b/ruoyi-ui/src/views/components/videoPlayer/myVideo.vue new file mode 100644 index 00000000..c8bf7138 --- /dev/null +++ b/ruoyi-ui/src/views/components/videoPlayer/myVideo.vue @@ -0,0 +1,167 @@ + + + diff --git a/ruoyi-ui/src/views/index.vue b/ruoyi-ui/src/views/index.vue index a20a0098..7a71d96d 100644 --- a/ruoyi-ui/src/views/index.vue +++ b/ruoyi-ui/src/views/index.vue @@ -3,10 +3,6 @@
-
- -
-
@@ -22,7 +18,10 @@
-
+
@@ -55,31 +54,74 @@
信息模板
+
+ +
附近像机
+
- -
- - -
-
-
-
-
-
-
-
-
-
+ +
+ + +
+
+
+
+
+
+
+
+
- - - +
+
+
+
+ +
+
+
摄像机设备
+ + +
+
+
+ +
+
+
+
+
选择相机:
+
+ + + + +
+
+
+
{{ item.txt }}:
+
{{ item.val }}
+
+
+
+
+
+
+
+
+
+
- +
+
@@ -160,8 +202,7 @@
-
-
+
@@ -174,10 +215,23 @@ import editBoard from '@/views/boardView/editInfo.vue' import { invokedFunction, getDeviceRealtimeProperty } from '@/api/device/device.js' import { getAllVmsTemplate, deleteTemplate } from '@/api//board/template.js' import { getDicts } from '@/api/system/dict/data.js' +import roadView from '@/views/map/Thumbnail/index.vue' export default { name: 'indexView', data() { return { + cameraVal: '1', + cameraOptList: [ + { + value: '1', + label: '一号相机' + }, + { + value: '2', + label: '二号相机' + } + ], + editOutlineData: {}, formData: [], mapIds: '', screenDataSize: '', @@ -188,6 +242,7 @@ export default { dialogTit: '门架式可变信息标志YK16+270', dialogInfoLeft: false, dialogInfoRight: false, + dialogInfoCamera: false, mapDialogTop: '0px', mapDialogLeft: '0px', keyMonitoringList: [ @@ -247,13 +302,28 @@ export default { { id: 404, tit: '设备桩号', txt: 'K094+079', col: '#fff' }, { id: 405, tit: '设备厂商', txt: '光电比特', col: '#fff' }, { id: 406, tit: '设备状态', txt: '离线', col: '#888' } + ], + cameraDataList: [ + { id: 3001, txt: '设备名称', val: '疲劳唤醒设备1' }, + { id: 3002, txt: '设备编号', val: 'G00030497B0180001' }, + { id: 3003, txt: '设备桩号', val: 'K097+900' }, + { id: 3004, txt: '经/纬度', val: '117.071152/35.910659' }, + { id: 3005, txt: '道路名称', val: 'G35济菏高速' }, + { id: 3006, txt: '道路状况', val: '正常' }, + { id: 3007, txt: '方向', val: '菏泽' } + ], + cameraBtnList: [ + { id: 4001, dir: 'left', le: '26%', to: '33%', ro: 0 }, + { id: 4002, dir: 'up', le: '46%', to: '4%', ro: 90 }, + { id: 4003, dir: 'right', le: '65%', to: '33%', ro: 180 }, + { id: 4004, dir: 'downward', le: '46%', to: '62%', ro: 267 } ] } }, props: [], // 注册组件 - components: { GaoDeMap, carECharts, addBoard, editBoard }, + components: { GaoDeMap, carECharts, addBoard, editBoard, roadView }, // 计算属性 computed: {}, // 生命周期函数 @@ -282,9 +352,9 @@ export default { this.dialogInfoList = [] console.log('父组件地图点位', e) this.dialogInfoLeft = true - this.mapIds = e.target._opts.extData.ids - this.screenDataSize = e.target._opts.extData.screenSize - this.dialogTit = e.target._opts.extData.tit + this.mapIds = e.target._opts.extData.deviceId + this.screenDataSize = e.target._opts.extData.sceenSize + this.dialogTit = e.target._opts.extData.deviceName this.getTemplateHeaderFn() this.onSubmit(this.mapIds) // this.mapDialogTop = e.pixel.y + 'px' @@ -321,7 +391,7 @@ export default { let newArr = this.dialogInfoList.map(item => { let obj = {} - obj.STAY = item.stopTime + obj.STAY = item.STAY obj.ACTION = item.inScreenMode obj.SPEED = item.tcontents[0].fontSpacing obj.COORDINATE = item.screenSize.replace('*', '') @@ -344,33 +414,21 @@ export default { const param = { objectData: JSON.stringify(objAll) } - console.log('newArr11111', newArr) - - /* invokedFunction(65,'1B',{fileId:'1'}).then(res =>{ - debugger - console.log('发布消息,播放文件-----------------------------') - console.log(res) - }).catch(()=>{ - this.$modal.msgError("发布失败,请重试"); - })*/ invokedFunction(595, 11, { size: '65535', fileName: 'play099.lst' }) .then(res => { debugger - console.log('发布消息,校验文件名-------------------------------------') - console.log(res) + // console.log('发布消息,校验文件名-------------') if (res.data.result == '01') { invokedFunction(595, 13, { parameters: newArr }) .then(res => { debugger - console.log('发布消息,发送文件内容-----------------------------') - console.log(res) + // console.log('发布消息,发送文件内容-----') if (res.data.result == '01') { invokedFunction(595, '1B', { fileId: '99' }) .then(res => { debugger - console.log('发布消息,播放文件-----------------------------') - console.log(res) + // console.log('发布消息,播放文件-----') }) .catch(() => { this.$modal.msgError('发布失败,请重试') @@ -397,45 +455,15 @@ export default { }, // 回读 onSubmit(deviceId) { - // this.submitButton = true - // // this.loading = true - // this.contentList = [] - // // 获取情报板修改页面信息 - // const param = { - // deviceId: deviceId - // } - /* await getBoardContentData(param) - .then(res => { - console.log(res, 'onSubmit') - var contents = res.data.parameters - console.log(contents, 'onSubmit-----contents') - for (let i = 0; i < contents.length; i++) { - let item = contents[i] - item.COLOR = this.getColorStyle(item.COLOR) - item.FONT_SIZE = Number(item.FONT_SIZE.substring(0, 2)) + 'px' - item.ID = i - item.FONT = this.getFont(item.FONT) - this.contentList.push(item) - } - console.log(this.contentList, 'onSubmit-----this.contentList') - this.loading = false - this.submitButton = false - // this.rowDrop(); - }) - .catch(e => { - this.loading = false - this.submitButton = false - })*/ getDeviceRealtimeProperty(deviceId, '3A', { async: false }) .then(res => { - console.log('回读消息------------------------') var contentsA = res.data['3A'].content console.log('回读消息--1111111111---', contentsA) this.dialogInfoList = contentsA.map(item => { return { ...item, - stopTime: item.residenceTime, + STAY: item.playbackDuration, inScreenMode: item.screenEntryMethod, screenSize: item.displayAreaWidth + '*' + item.displayAreaHeight, tcontents: [ @@ -446,36 +474,13 @@ export default { fontType: item.font, fontColor: item.foregroundColor.toUpperCase(), formatStyle: item.horizontalAlignment, + STAY: item.playbackDuration / 10, content: item.textContent.replaceAll('\\,', ',').replaceAll('\\=', '=').replaceAll('\\\\n', '\n') } ] } }) - - console.log('回读处理后的数据', this.dialogInfoList) - - // for (let i = 0; i < contents.length; i++) { - // let item = contents[i] - // item.COLOR = item.foregroundColor - // item.FONT_SIZE = item.fontSize + 'px' - // item.ID = i - // item.FONT = item.font - // item.COORDINATE = this.covering(item.xCoordinate) + this.covering(item.yCoordinate) - // ;(item.screenSize = item.displayAreaWidth + '*' + item.displayAreaHeight), (item.CONTENT = item.textContent.replaceAll('\\,', ',')) - // item.CONTENT = item.CONTENT.replaceAll('\\=', '=') - // item.CONTENT = item.CONTENT.replaceAll('\\\\n', '\n') - // item.formatStyle = item.verticalAlignment - // this.contentList.push(item) - - // this.form.devicePixel = item.screenSize - // } - - // console.log(this.contentList, 'onSubmit-----this.contentList') - // this.rowDrop(); - - // this.loading = false - // this.submitButton = false }) .catch(e => { this.$modal.msgError('回读失败,请重试') @@ -522,7 +527,7 @@ export default { }, // 接收子组件新增待发模板 addInfo(form) { - console.log('待发新增', form) + // console.log('待发新增', form) this.dialogInfoList.push({ id: form.id, screenSize: form.screenSize, @@ -537,13 +542,6 @@ export default { ...this.processString(form.screenSize), ...this.processStrNum(form.COORDINATE) }) - console.log('新增模板111', this.dialogInfoList) - // this.getTemplateHeaderFn() - // console.log(this.dialogInfoList) - // form.ID = this.contentList.length - // this.contentList.push(deepClone(form)) - // this.$message.success('添加成功') - // this.$forceUpdate() }, // 打开添加信息弹窗 addMoDataInfoFn(type, mode) { @@ -556,6 +554,7 @@ export default { this.editType = type console.log('修改弹窗', item) this.boardEmitItem = { + ...item, FONT_SIZE: item.tcontents[0].fontSize + 'px', COLOR: item.tcontents[0].fontColor, CONTENT: item.tcontents[0].content, @@ -572,17 +571,7 @@ export default { tcontentsId: item.tcontents[0].id } }, - // // // 待下发 编辑 - // openQbbDrawer(item, index, type) { - // this.index_ = index - // console.log(item) - // this.boardEmitItem = item - // this.boardEmitItem.screenSize = this.form.devicePixel - // this.boardEmitItem.deviceId = this.deviceId - // this.boardEmitItem.type = type - // this.showEmit = true - // }, // 接收子组件form表单 修改 receiveForm(form) { console.log('接收子组件form表单 修改111111111', form) @@ -598,29 +587,11 @@ export default { // this.getTemplateHeaderFn() this.$forceUpdate() }, - dialogClose() { - this.showEmit = false - this.arrowRightVisible = false - // setTimeout(() => { - // this.allVmsTemplate('no') - // }, 500) - }, + delMoFn(item) { console.log(item) // deleteTemplate(item.tcontents[0].templateId) this.removeItemById(this.dialogInfoList, item.id) - - // this.$confirm('确认要删除吗?') - // .then(_ => { - // console.log(item) - // // deleteTemplate(item.tcontents[0].templateId) - // this.removeItemById(this.dialogInfoList, item.id) - // this.$message({ - // message: '删除成功!', - // type: 'success' - // }) - // }) - // .catch(_ => {}) }, putLeftFn(item) { console.log('点击事件', item) @@ -634,11 +605,27 @@ export default { this.dialogInfoRight = false }, showCeInfoFn() { + if (this.dialogInfoCamera) { + this.dialogInfoCamera = false + } this.dialogInfoRight = !this.dialogInfoRight }, + showCameraInfoFn() { + if (this.dialogInfoRight) { + this.dialogInfoRight = false + } + this.dialogInfoCamera = !this.dialogInfoCamera + }, subjectBtnFn(item) { this.subjectBtn = item.id }, + closeCameraBtnFn() { + this.dialogInfoCamera = false + }, + dialogClose() { + this.showEmit = false + this.arrowRightVisible = false + }, removeItemById(arr, id) { const index = arr.findIndex(item => item.id === id) // 找到要删除项的索引 if (index !== -1) { @@ -1091,6 +1078,7 @@ export default { background-color: #114c66; padding: 1vh 0.5vw; overflow-y: scroll; + position: relative; } .dialog_info_left_t { width: 100%; @@ -1283,6 +1271,78 @@ export default { opacity: 1; cursor: pointer; } +.info_right_camera { + width: 100%; + height: calc(100% - 4vh); + padding: 1vh 0.5vw; +} +.info_right_camera_top { + width: 100%; + height: 20vh; +} +.info_right_camera_bom { + width: 100%; + padding: 1vh 0; + height: calc(100% - 20vh); + display: flex; +} +.camera_bom_left { + width: 50%; + height: 100%; + border-right: 1px dashed #285a71; +} +.camera_bom_right { + width: 50%; + height: 100%; +} +.camera_bom_left_item { + width: 100%; + color: #fff; + display: flex; + font-size: 14px; + padding-bottom: 0.7vh; +} +.camera_bom_left_item_txt { + width: 31%; + color: #3de8ff; +} +.camera_bom_left_item_val { + color: #fff; + font-size: 13px; +} +.camera_bom_right_t { + width: 100%; + height: 60%; + position: relative; +} +.camera_bom_right_b { + width: 100%; + height: 40%; + // background-color: deeppink; +} +.camera_bom_right_t_box { + width: 2vw; + height: 4vh; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + background-color: #005f87; + border-radius: 50%; + border: 1px solid #2191b1; +} +.camera_bom_right_t_h_po { + width: 1vw; + height: 5vh; + position: absolute; + left: 27%; + top: 33%; + cursor: pointer; + background-image: url('~@/assets/screen/xtb/xjleft.png'); + background-size: 100% 100%; + background-repeat: no-repeat; + background-position: center; +} // background-color: #104b65; // background-image: url('~@/assets/screen/xtb/qbbtit.png'); // background-size: 100% 100%; @@ -1344,4 +1404,15 @@ export default { ::v-deep .el-collapse-item { margin-bottom: 1vh; } +::v-deep .el-input--mini .el-input__icon { + line-height: 20px; + color: #fff; +} +::v-deep .el-input--mini .el-input__inner { + height: 20px; + line-height: 20px; + background-color: #086d8f; + border: none; + color: #fff; +} \ No newline at end of file diff --git a/ruoyi-ui/src/views/map/Thumbnail/data.js b/ruoyi-ui/src/views/map/Thumbnail/data.js new file mode 100644 index 00000000..d10714f0 --- /dev/null +++ b/ruoyi-ui/src/views/map/Thumbnail/data.js @@ -0,0 +1,192 @@ +export const actualLocationList = [ + { + code: "K54", + name: "殷家林枢纽", + intervalDistance: 0.0, + lng: 116.865231, + lat: 36.57973, + }, + { + code: "K59", + name: "大学城收费站", + intervalDistance: 4.895, + lng: 116.814343, + lat: 36.581052, + }, + { + code: "K72", + name: "长清收费站", + lng: 116.865231, + intervalDistance: 13.558, + lat: 36.57973, + }, + + { + code: "K79", + name: "长清服务区", + intervalDistance: 6.163, + lng: 116.697041, + lat: 36.428953, + }, + { + code: "K83", + name: "松林枢纽", + intervalDistance: 4.875, + lng: 116.496503, + lat: 36.292459, + }, + { + code: "K86", + name: "孝里收费站", + intervalDistance: 2.614, + lng: 116.638217, + lat: 36.38667, + }, + { + code: "K99", + name: "*平阴北收费站", + intervalDistance: 13.251, + lng: 116.447305, + lat: 36.32884, + }, + { + code: "K105", + name: "平阴收费站", + intervalDistance: 6.154, + lng: 116.482042, + lat: 36.276899, + }, + { + code: "K114", + name: "平阴停车区", + intervalDistance: 8.501, + lng: 116.459654, + lat: 36.204811, + }, + { + code: "K117", + name: "孔村枢纽", + intervalDistance: 3.473, + lng: 116.454379, + lat: 36.173621, + }, + { + code: "K126", + name: "平阴南收费站", + intervalDistance: 8.345, + lng: 116.445836, + lat: 36.100732, + }, + { + code: "K139", + name: "东平服务区", + intervalDistance: 13.594, + lng: 116.417716, + lat: 35.984511, + }, + { + code: "K145", + name: "东平收费站", + intervalDistance: 6.116, + lng: 116.414862, + lat: 35.930073, + }, + { + code: "K155", + name: "东平湖枢纽", + intervalDistance: 9.719, + lng: 116.381047, + lat: 35.844376, + }, + { + code: "K159", + name: "沙河停车区", + lng: 116.366287, + intervalDistance: 3.504, + lat: 35.823098, + }, + { + code: "K173", + name: "*梁山东收费站", + intervalDistance: 14.794, + lng: 116.222211, + lat: 35.684336, + }, + { + code: "K179", + name: "梁山收费站", + intervalDistance: 5.446, + lng: 116.222163, + lat: 35.684368, + }, + { + code: "K186", + name: "梁山服务区", + intervalDistance: 6.665, + lng: 116.177576, + lat: 35.638136, + }, + { + code: "K190", + name: "嘉祥西收费站", + intervalDistance: 4.434, + lng: 116.142081, + lat: 35.610556, + }, + { + code: "K208", + name: "王官屯枢纽", + intervalDistance: 18.484, + lng: 116.073032, + lat: 35.462815, + }, +]; + +export const canvasList = [ + { + name: "殷家林枢纽", + code: "K54+394", + line: "G3京台高速", + isFoot: true, + distance: 171, + }, + { name: "大学城收费站", code: "K59+289", distance: 50.563 }, + { name: "长清收费站", code: "K72+847", distance: 140.05 }, + { name: "长清服务区", code: "K79+010", distance: 63.66 }, + { + name: "松竹枢纽", + code: "K83+885", + line: "S0101济南绕城高速二环西环段", + distance: 50.358, + }, + { name: "孝里收费站", code: "K86+499", distance: 27 }, + { name: "平阴北收费站", code: "K99+750", distance: 136.88 }, + { name: "平阴收费站", code: "K105+904", distance: 63.57 }, + { name: "平阴停车区", code: "K114+405", distance: 87.815 }, + { + name: "孔村枢纽", + code: "K117+878", + line: "G22青兰高速", + distance: 35.876, + }, + { name: "平阴南收费站", code: "K126+223", distance: 86.2 }, + { name: "东平服务区", code: "K139+817", distance: 140.42 }, + { name: "东平收费站", code: "K145+933", distance: 63 }, + { + name: "东平湖枢纽", + code: "K155+652", + line: "S30董梁高速", + distance: 70, + }, + { name: "沙河停车区", code: "K159+156", distance: 70 }, + { name: "梁山东收费站", code: "K173+950", distance: 70 }, + { name: "梁山收费站", code: "K179+396", distance: 70, icon: "tag4" }, + { name: "梁山服务区", code: "K186+061", distance: 70 }, + { name: "嘉祥西收费站", code: "K190+495", distance: 70 }, + { + name: "王官屯枢纽", + code: "K208+979", + line: "G1511日兰高速", + distance: 120, + }, +]; diff --git a/ruoyi-ui/src/views/map/Thumbnail/images/bg.png b/ruoyi-ui/src/views/map/Thumbnail/images/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..4ea3b3cf0194f9ff3afa6f1ea700f01cea567580 GIT binary patch literal 31452 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 E3wYCf2LJ#7 literal 0 HcmV?d00001 diff --git a/ruoyi-ui/src/views/map/Thumbnail/images/tag0.png b/ruoyi-ui/src/views/map/Thumbnail/images/tag0.png new file mode 100644 index 0000000000000000000000000000000000000000..6faa4e67e02b9f5cc46554174f1ab781552ad1ad GIT binary patch literal 1240 zcmV;}1Sk86P)Px(l1W5CRA@u(ntx1NRTRg+_r1bE))WW{3??)hu?2=Q)R>tpl1v9CvJhQ#;SY>i z^bg6L5sk_)M#L z;CAxYdI+-irnR4CWERm@$Z`wwx-+PM1axW~SX@{!HCrI$7eXkl04cvSLd3N0(2UR) ztRazjmIiFU#!5((I_a-NHmUy`U|}xV2d&)CGQ;#hJ%sWqA4?NzM{gnHF^5&K0>x7F zJGswcrI&x)7`W!Cu=8GsdmDn-l6HR#u7Z`%zp0SAq~6mudgW3Av>?ZVPhNfo?>YML zE?mOb1MUPLvHk#r%Id?U%ujozQy&WGY5fEN=`Xz{C4ld--3ohgk;b?n*Mfs} zH5eHE9er0kP_CbNa5tQT!+7rfkCTA?^2GA-_U*AMyV&(A3Uaek7KnFz3Qu>P!1Y;e zbrMSs(wbW*S2pj=$y(|gR$;dl6`&+PPXjK>%fXSx2K2i}@Wq7z%!k5Q2!){(PL6pi z0+TcF1SeG=p|l*P{ZBeq(rtL?nB@2@WsIGJS5@eqofXJ6Z(X%_j|H*+_2cTb`0!&8 z?zsCfvASlnGc&Sg)B;H&I=O?*KsLe8@`I+UnvF>rhyuZ^3c zaHhIPwIZY#*+#=w!o+_0{8=k?B`VxTX`(2bxTikIh+N~dX9g8pjnFG_K}heVUYAY! z*75JDk&J4#K&*KP;*M$`rOS0OXaZQdp=$Fs+Ro%?GxfSNnBN0-V;U^Bu~}vaMI~xl zDMu4Tu`@g+bZmGu#V<^iQ zxK?nj&=Uc!6lB0000Px(h)G02RA@u(nr%#*RTRhnw=Yjy%LZYfxQtK{x4QWOWbLx*GFjAN;s>`y9m8xP zGR;(mCb(o77$Uw!S+=pw88$=a0_6ix6QeLU-3$UjP)O!7HePJgEt~6B2W_Q&XnD+i zYN0Q*gVsb%?(?O|eQtmE+;h+Q-_!IEM0o^LZVDjZ0f7`kz#|~Y5T^>b0fJvaNCzgp zjbz);x8_2S@Ij$Lqr~F-_W7oTitaIwvfu2%@J%o7{5dU7U80sCD@_KShQr!yg`1P% z2*zzyq{QqFW`%%-*1Rl0*3mh_YmGm-V0Zap(Vk?L1Un3B7_zw`z*|VR3|InlXTTKd z6XfT==y7UJUkq71CY-)}@?j-P9!oMy$J~q^P4`LnC|^kW*rljDc)cJA>vB}@kuAMd zL}If0j-&lAVwas@u9`x2R&x|XdTMb85nA=uvS#}-n`1V#f?YvZdsM#x8B4Q7SA0}i0^7}N zAr{}ZUB~paPaLD}__R3nDiPZBQ`?T;l1&Sk-l*VU9|s^c2U<|~VR?kbd#aD4rLhiU!xuup*4G;C%Yw5k{O~9^ zPhWtFcRqvF92pTy(lW$dd|bT~>5Ih3psvuhA2{PE?ENkJ;ZgARS1Uy*4ZqT|ni*I8 z()&H?5ADU#Q(Y*2b_G^zI8;1M56`44@4UhvJbKQb9Dz6vcSXU*7w}T)UPz@_04^vFTefjR0x>PKem4l z2D?l+T$JkOyuM6-O1G}5=^Sxa23s9917f_`yK$lJR|c7|a#3B^ry0nQE1}g1I6>UYS-ft%$sHSyZs7U{MjH7G(*-5`-lPOOW~eTxD9p zw1Q~`(+Z{)^YH-F3Z@lIE9R3atgc{M@h@maM61bsVl~>F;J<_-Izkcw$Lt761RS#? sBoT1Tj*xi4v`vk5gs_f~=p7+{0X~tL1G`6De*gdg07*qoM6N<$f)9a4djJ3c literal 0 HcmV?d00001 diff --git a/ruoyi-ui/src/views/map/Thumbnail/images/tag2.png b/ruoyi-ui/src/views/map/Thumbnail/images/tag2.png new file mode 100644 index 0000000000000000000000000000000000000000..c414a625f1250df3e2c1f4fecf76da2863fc0033 GIT binary patch literal 1333 zcmV-51Px(?@2^KRA@u(nr%#5RT#(r=eG1^k(VeUEp#;7vJjcFRYw-H8AMcInk{5xW&{aK z{ICh3&N>J$(~YrcM1q-aY%CHoY9uole1SS9_`yuaHi;1<8Zm|Pwh0R_vcAxJkGZ$B zK%oR^^wYT?d(ZuybN=Uf{^v>h5CnMi^$`(ng*q1$X&_`9K%+fF$tWo80f9vz#5{ax zcx*WY@&8d@uUGL3XDJnk$!Vi1#}LKrJqp3$8Of=EkO%^044~3+4#@DK+@&bD=2_=P z%uT-#tTAiiWFQu2KaHRMMSx%rw4b?2R6yu<4oV$*c_3{hd!*m{g>S_oR8H~TR5#Vz z`{>FP z$DxXYk?0z=Z4=jpH0N+&@JmT)sLUzF;{|(=wAFylGhg7wAGh&*Std^Bl;ZXMM{)Mc zi!gnB0?Jr|@Lj}0V$E9Hcq<>v&&(_4zv8^qL&!-vh?J6j(jZf2J}Ps{Q1NLMUVY&e z6x1F^>#cUU1zw8t$QNaUq7<`tKNI9w5DZ@M(AY2xTM}`p-~$vjoI=~Jb_p!!WH4nG z;7G<{N&C-#_-cMt1c*AoxdVd50}>B!eCi&qc6Xp})Ve4LLq2qENl(ge03O~e8}uCBk3yPr zF!13m1jj|`&{cg6`L)M!<@**GHYZAlnf`W`G=Wk}5dIXgkd0jJ>T4)zI)$#N4u>FzZZ4%Y6^?$C zEnM|_ayxvN=yarNFnjpTITM1)tL;pStHY_c5QJ?f*4bJ5%xIn`E*IS(B3!QE+MEM4e)?y@cWVTaMa;6$$2chC zNUz%^q@VQ}l3zTBcm~hKan1iRE?_5WJqKSk;REGcc}xeyrXwU6@QNKF!GKrn2nhxpwv$`F rBP1B8*l-~JwaGd{SVze69U=b$YNkt17Ti7o00000NkvXXu0mjf3LJbm literal 0 HcmV?d00001 diff --git a/ruoyi-ui/src/views/map/Thumbnail/images/tag3.png b/ruoyi-ui/src/views/map/Thumbnail/images/tag3.png new file mode 100644 index 0000000000000000000000000000000000000000..b4b2c14416b6347c6740511c5efdd85d99b08399 GIT binary patch literal 1179 zcmV;M1Z4Y(P)Px(RY^oaRA@u(nr&=TRT#&Aw=2-GF(FwNSa3{5D6?@4Klnkwb>pRo5YRwK_%IEk z!QZpMPoM3`j|V`3u0j$W5H_LxwtcW4+Hknl%=D z+BXmHfSu;^X6kF9wSu}HXc(h2R4j=1$59|OYNz28qewj$3M+n z3^}XXnPSQg!2MwV=QmPqH`8>E)mabl)yo@6PMWTHfqTHio8@&J`1bVJXIV=ica;lI zXO?h_A6(!6J{Ow{`R;`Jv*Ysup8KehUt0d;amzfGE=uE6)9>o<2&MrPoo%1r=R%CJV zObcB%hYvKcLLBV#JKT8Pa}*i|cH;cC6#K~_AOPOE?omp&tq#r?eo@WA<3H>BU$xp& zpwQ4?#jy$-t-oo&GZRdFz3VAfWZutD7p}1Bz&CXF+|dUwSP1Jk+7;^ig&XE_>u(Ks za-lK2TDaqd7yl3z4|3=|BVMltTv@b*r5S0#c@YuMd~lo}8ZW7HW%+B#w>?7Fjb7$F zd&s{|F~F`@J-T4w>+wUtw;ZgXsqGp@gMsdz+jxe&^tuPef$QBJeDd+!(ODKayij2K z*;XuRDI~^ERY5EFe94(hS4ZBTbPsILS6xxXiK8}JE^1s63M`W2t@66??w|i4Y+?T$O?7<>+Ds?&wSO=>J&0y(+ucoi$w_;xj%#{dM} zXsE)~Y{pSTK$OD1L}c0WY@ui_Jl-_{s1~eR-ew{$bss~Xmx86~`t^}&GCcuOQ%6dZ z!BB#y^KJdoG}<&Fr$*COe=)^^!f-M5b)hK3#kB7*)>$`0eUY}9PRhCA7yl1n*;o9h zeMMA(F_FF^DzMlTsjr9{9I3B}8XUAbOkWWbSg)^$39Q#w!~`DISNJG-Hzt;5bKz@< z@-M+4T@j29=?duztN@r#3h35B>35))YOMo3Ixy&EAhf%R^L tL=BE~BP42Yq#Geof#r=5?)Ht4e*kzA!iI3a(C`2N002ovPDHLkV1g5%Fd_f| literal 0 HcmV?d00001 diff --git a/ruoyi-ui/src/views/map/Thumbnail/images/tag4.png b/ruoyi-ui/src/views/map/Thumbnail/images/tag4.png new file mode 100644 index 0000000000000000000000000000000000000000..beab68e6a3c0b50c9c5bd82e78d3d84c32ef44b7 GIT binary patch literal 1569 zcmV++2HyFJP)Px)+et)0RA@u(T3u)qR}}tkCc%v&t|Sjuw)sK9fFWd&h>J)X>cdv6F(_CGSVJpR zs6=SGEp9_B+mUDk73@QymEDTL2ty4W@w6WY5*(rt#}9buyW-}R904^y1II%prD`wfXEn|F=8bF ztEyT`n)LVgS6;ew2`^v1%yuB{`O>9Jv3>h?IGs*9!H0~o5&l8~SO@L9eED+OjT<*| z0;Vq3)zx9^)~&+;-s9jJuzvi=l`B`O!{IRU^Yc+vRfQ!>mZW`PZf*_(0|N=u@C~)K zwb-_8TMU4U%))`&BuP5b+1aV>Yiw+U-EPO|=x7=+J$E=9Xm4*vJRVP4-@A7&DRhJ} z_AR5^mu2~BdwaW$+w|D6WAJ*t+Dm)(?7`~QtMTyRLv(d@VRm*F2M-=ZFc`$x*jN&9 zQBe^*9?uIw5XuSo6G@VO;o8#9j*bqrw6tK;rcJ1?uTQ*87kcZ~E!b=}%*-S?L1GUn zvTohF&j>hp=FFKLu^5@>KjFY+XF47izuymXzg(if(?h_2i=tRIF)@(_Ob^zsU5iz# zR^jpE$1r|88~F0&%gKym1T1?zo_ym)aE&Pt=*NY71pSkgl$4;fv=mcQQ@D5Up7ty+ zFAv9$AD<&&)#LFb-7p6hMG=b@ElN^uaBvWTKmY{3e*JosmzQIDdK%r`-AN}V;HN&H zZ-p_+I57REiY&`oh(CJtNLz|TB1t|?(b(43_KbjkJ9X;R<_8ZRq}ezVaBpuf6h%p# zgaV552m!2Fvj+S3@Bf{EzlcO49TzTKFa>=5`gPDRo9x`V6E2tQYXUBto}T_o6vce* zo4HJp3z+=d>-EkQ78aKCkp8)^ukX{I9->&l=kwv@$&(;^rV3qDw&2jU{fRMlfCJm( z@%W#9zu!T&-neli+-|pa+w(~%6w+Kxw=KnZ4P)$?kv3~(Sq=pP0o%~f5Ed_9oaSno zK0+5q0km)5J|g|ijIrCaFO}%umu0yt91a)L?ejp$rZoiv(WTq%el7^YM~tyQ_})yZ zsqEhj^uy%j0%Br#*(Nm4VWXSs!9p8nUd+$ z)Rg1Zt5@0*@o`~cA%TPd1o+WYPn8wexKUNrVm(Xe0~pShnT_w50-nz^GOgz_1+OdI z04g)o6=VvkE1sJI))T8&QIwWgEM_xNSNsT|)l6LxibkUqSFc`ONL?`qz@4?OP!y%F zySuyW_HE6_P0NN28_>|uFf0f{#=1f}fBt;MojZ3-0~$9H4Ky?~kmgQfUGcpnNiD`q z{W|D+hW?H*)=IQlEX(rf(W6IgM#6p_U@907A3i)I2*NuA+I$mU-lkB_)Cv|0 z*fK@Ju`E+qrbuTQ%PTCeu)HEi_O$}U3J@zmtN<}npj%vFafQVd7FSqYVa5U$S6EzO zafO*kvFZwoD=e| z8@^~X`puhaO~YYMr?Z1G_N8$wO$r8s6$|Z2bNf+mde^R9$?aoWq#>DjJRZJy@nYFR zd(+gDuCK2j&dbZIV~o*2UD`wl4Q*VLB&mWXmF8Dq00000NkvXXu0mjfvAFG? literal 0 HcmV?d00001 diff --git a/ruoyi-ui/src/views/map/Thumbnail/index.vue b/ruoyi-ui/src/views/map/Thumbnail/index.vue new file mode 100644 index 00000000..b384be68 --- /dev/null +++ b/ruoyi-ui/src/views/map/Thumbnail/index.vue @@ -0,0 +1,176 @@ + + + + + diff --git a/ruoyi-ui/src/views/map/Thumbnail/utils.js b/ruoyi-ui/src/views/map/Thumbnail/utils.js new file mode 100644 index 00000000..db5df056 --- /dev/null +++ b/ruoyi-ui/src/views/map/Thumbnail/utils.js @@ -0,0 +1,20 @@ +import { actualLocationList, canvasList } from "./data.js"; + +export function getScaleByActualData() { + const actualDis = actualLocationList.reduce( + (count, item) => count + item.intervalDistance, + 0 + ); + + const idleCanvasWidth = 1440; + + const ratio = idleCanvasWidth / actualDis; + + return canvasList.map((item, index) => { + if (index) { + item.distance = actualLocationList[index].intervalDistance * ratio; + } + + return item; + }); +} diff --git a/ruoyi-ui/src/views/map/index.vue b/ruoyi-ui/src/views/map/index.vue index 8f815035..b18391c6 100644 --- a/ruoyi-ui/src/views/map/index.vue +++ b/ruoyi-ui/src/views/map/index.vue @@ -7,6 +7,7 @@ window._AMapSecurityConfig = { } import AMapLoader from '@amap/amap-jsapi-loader' import titImgSrc from '@/assets/screen/ltit.png' +import { getEnergyBoardAPi } from '@/api/map/index.js' export default { name: 'mapView', data() { @@ -14,6 +15,7 @@ export default { map: null, infoWindow: '', addMarkDataList: [], + markBoardDataList: [], markDataList: [ { id: 2001, @@ -22,7 +24,6 @@ export default { longitude: 116.86532, latitude: 36.57979, screenSize: '768*64', - imgUrl: require('@/assets/screen/xtb/fwqdot.png') }, { @@ -46,13 +47,24 @@ export default { ] } }, + // created() { + // this.getEnergyBoardFn() + // }, mounted() { - this.initAMap() + this.getEnergyBoardFn() + // this.initAMap() }, unmounted() { this.map?.destroy() }, methods: { + getEnergyBoardFn() { + getEnergyBoardAPi().then(res => { + console.log('地图首页情报板点位', res) + this.markBoardDataList = res + this.initAMap() + }) + }, initAMap() { AMapLoader.load({ key: '03669f433d77137fe6d048b428b00dd8', // 申请好的Web端开发者Key,首次调用 load 时必填 @@ -335,17 +347,18 @@ export default { this.addMarkDataList = [] this.infoWindow = new window.AMap.InfoWindow({ offset: new AMap.Pixel(0, 0), anchor: 'middle-right' }) - this.markDataList.forEach((item, index) => { + this.markBoardDataList.forEach((item, index) => { // 创建一个 Marker 实例:创建点标记 - const marker = new AMap.Marker({ - position: new AMap.LngLat(item.longitude, item.latitude), // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9] + let marker = new AMap.Marker({ + position: new AMap.LngLat(...item.lnp.split(',')), // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9] offset: new AMap.Pixel(0, 0), - title: item.tit, + title: item.deviceName, map: this.map, extData: item, icon: new AMap.Icon({ size: new AMap.Size(50, 50), // 图标尺寸 - image: item.imgUrl, // Icon的图像 + // image: item.imgUrl, // Icon的图像 + image: require('@/assets/screen/xtb/fwqdot.png'), // Icon的图像 imageOffset: new AMap.Pixel(0, 0), // 图像相对展示区域的偏移量,适于雪碧图等 imageSize: new AMap.Size(50, 50) // 根据所设置的大小拉伸或压缩图片 }) @@ -381,6 +394,7 @@ export default { // }) }) }) + console.log('地图动态获取后台参数', this.addMarkDataList) // 将创建的点标记添加到已有的地图实例: this.map.add(this.addMarkDataList) }) From da131e684c17ce4a1688ad955cef6a40b1c43952 Mon Sep 17 00:00:00 2001 From: IAMHERE <446961233@qq.com> Date: Fri, 29 Dec 2023 18:14:40 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix-=E8=A7=86=E9=A2=91=E6=92=AD=E6=94=BE?= =?UTF-8?q?=E5=99=A8=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json index 81d4998b..7d33f845 100644 --- a/ruoyi-ui/package.json +++ b/ruoyi-ui/package.json @@ -46,6 +46,7 @@ "echarts": "^5.2.2", "element-ui": "^2.15.6", "file-saver": "2.0.5", + "flv.js": "^1.6.2", "fuse.js": "6.4.3", "highlight.js": "9.18.5", "js-beautify": "1.13.0", From 68bee86d8fae556d9867941a8f4209c0c9072f02 Mon Sep 17 00:00:00 2001 From: IAMHERE <446961233@qq.com> Date: Fri, 29 Dec 2023 18:15:06 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix-=E6=9B=B4=E6=96=B0=E4=B8=80=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/views/index.vue | 6 +++--- ruoyi-ui/src/views/map/index.vue | 29 +++++++++++++++++++++-------- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/ruoyi-ui/src/views/index.vue b/ruoyi-ui/src/views/index.vue index 7a71d96d..b411e992 100644 --- a/ruoyi-ui/src/views/index.vue +++ b/ruoyi-ui/src/views/index.vue @@ -240,9 +240,9 @@ export default { boardEmitItem: {}, //修改弹窗的数据 activeName: 'first', dialogTit: '门架式可变信息标志YK16+270', - dialogInfoLeft: false, + dialogInfoLeft: true, dialogInfoRight: false, - dialogInfoCamera: false, + dialogInfoCamera: true, mapDialogTop: '0px', mapDialogLeft: '0px', keyMonitoringList: [ @@ -331,7 +331,7 @@ export default { this.getTemplateHeaderFn() // this.getTemplateFn() }, - // 侦听器 + // // 侦听器 // watch: { // data: { // // 自动触发,只能使用handler diff --git a/ruoyi-ui/src/views/map/index.vue b/ruoyi-ui/src/views/map/index.vue index b18391c6..a0b28de0 100644 --- a/ruoyi-ui/src/views/map/index.vue +++ b/ruoyi-ui/src/views/map/index.vue @@ -47,22 +47,35 @@ export default { ] } }, - // created() { - // this.getEnergyBoardFn() - // }, - mounted() { + created() { this.getEnergyBoardFn() - // this.initAMap() + }, + mounted() { + this.initAMap() }, unmounted() { this.map?.destroy() }, + // 侦听器 + watch: { + markBoardDataList: { + // 自动触发,只能使用handler + handler(newVal, oldVal) { + this.initAMap() + // console.log(newVal); + // console.log(oldVal); + }, + // true表示侦听器立即触发(immediate默认为false) + immediate: true + // true表示深度侦听,侦听对象属性的变化 + // deep: true + } + }, methods: { getEnergyBoardFn() { getEnergyBoardAPi().then(res => { console.log('地图首页情报板点位', res) this.markBoardDataList = res - this.initAMap() }) }, initAMap() { @@ -351,7 +364,7 @@ export default { // 创建一个 Marker 实例:创建点标记 let marker = new AMap.Marker({ position: new AMap.LngLat(...item.lnp.split(',')), // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9] - offset: new AMap.Pixel(0, 0), + offset: new AMap.Pixel(-25, -50), title: item.deviceName, map: this.map, extData: item, @@ -364,7 +377,7 @@ export default { }) }) marker.setLabel({ - offset: new AMap.Pixel(0, 10), // 设置文本标注偏移量 + offset: new AMap.Pixel(0, 0), // 设置文本标注偏移量 content: '', // 设置文本标注内容 // content: "
" + item.tit + '
', // 设置文本标注内容 direction: 'top' // 设置文本标注方位