You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1477 lines
43 KiB
1477 lines
43 KiB
<template>
|
|
<Teleport>
|
|
<div class="mask">
|
|
<transition>
|
|
<div v-if="visible" class="dialog_info">
|
|
<div class="dialog_info_left">
|
|
<div class="dialog_head">
|
|
<div class="tit">{{ device.deviceName }}</div>
|
|
<img class="btnCls" src="@/assets/jihe/images/dialog/ibCls.png" alt="" @click="onClose">
|
|
<img class="deco" src="@/assets/jihe/images/dialog/ibHeadDeco.png" alt="">
|
|
</div>
|
|
<div class="dialogContent">
|
|
<div v-if="selectedBdMsg.length > 0" class="dialogContent_box" style="height: 100%;">
|
|
<vuescroll :ops="scrollOptions" class="templateBox">
|
|
<div v-for="(itm, indx) in selectedBdMsg" :key="indx" class="tplItem">
|
|
<!-- 模板内容 -->
|
|
<BoardPreview class="boardPreview" :boardWH="selectedSize" :tpl="itm"></BoardPreview>
|
|
<!-- 操作按钮 -->
|
|
<div class="infoBtnBox">
|
|
<el-tooltip content="编辑" placement="top">
|
|
<p @click="____onEditBoardItem(itm, indx)" class="btn btnEdit"></p>
|
|
</el-tooltip>
|
|
<el-tooltip content="删除" placement="top">
|
|
<p @click="____onDeleteBoardItem(indx)" class="btn btnDelete"></p>
|
|
</el-tooltip>
|
|
</div>
|
|
</div>
|
|
|
|
</vuescroll>
|
|
</div>
|
|
<div v-else class="dialogContent_box" style="height: 100%;">
|
|
<div class="dialogContent_box_empty">暂无数据</div>
|
|
</div>
|
|
<div class="dialogContent_bottom">
|
|
<el-tabs v-model="activeTab" @tab-click="tabClickFn">
|
|
<el-tab-pane label="详情信息" name="first">
|
|
<div class="show_bottom_tab_box">
|
|
<div class="deviceInfo">
|
|
<div class="deviceInfo_l">设备名称</div>
|
|
<div class="deviceInfo_r">{{ device.deviceName }}</div>
|
|
</div>
|
|
<div class="deviceInfo">
|
|
<div class="deviceInfo_l">设备桩号</div>
|
|
<div class="deviceInfo_r">{{ device.stakeMarkId }}</div>
|
|
</div>
|
|
<div class="deviceInfo">
|
|
<div class="deviceInfo_l">屏幕像素</div>
|
|
<div class="deviceInfo_r">{{ JSON.parse(device.otherConfig).screenSize }} px</div>
|
|
</div>
|
|
<!-- <div class="deviceInfo" v-for="item in tabDataInfoList" :key="item.id">
|
|
<div class="deviceInfo_l">{{ item.tit }}: </div>
|
|
<div class="deviceInfo_r" :style="{ 'color': item.col }"> {{ item.txt }}</div>
|
|
</div> -->
|
|
</div>
|
|
</el-tab-pane>
|
|
<el-tab-pane label="设备参数" name="second">设备参数</el-tab-pane>
|
|
</el-tabs>
|
|
</div>
|
|
<div class="dialogContent_bottom_btn">
|
|
<div class="show_bottom_btn_add" @click="____onAddDeviceItem">添加信息</div>
|
|
<div class="show_bottom_btn_del" @click="InformationReleaseFn">信息发布</div>
|
|
</div>
|
|
<div class="sideSwitch" @click="showSidePanel">
|
|
<img class="img" src="@/assets/screen/xtb/leftd.png" alt=""
|
|
:style="{ 'transform': isShowTemplate ? 'rotate(0deg)' : 'rotate(180deg)' }">
|
|
<div class="txt">信息模板</div>
|
|
</div>
|
|
|
|
<!-- 原型图上没有“附近相机”,代码里暂时关闭
|
|
<div class="sideSwitch" style="top:36%;" @click="showCameraInfoFn">
|
|
<img class="img" src="@/assets/screen/xtb/leftd.png" alt=""
|
|
:style="{ 'transform': dialogInfoCamera ? 'rotate(0deg)' : 'rotate(180deg)' }">
|
|
<div class="txt">附近像机</div>
|
|
</div> -->
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 信息模板 -->
|
|
<div v-if="isShowTemplate" class="dialog_info_right">
|
|
<vuescroll :ops="scrollOptions" class="templateBox">
|
|
<div v-for="(item, index) in templateAvailable" :key="item.dictValue">
|
|
<!-- 原来是<el-collapse v-model="activeNames"> -->
|
|
<h3>{{ item.dictLabel }}</h3>
|
|
<div v-for="(itm, indx) in item.list" :key="indx" class="tplItem">
|
|
<!-- 模板内容 -->
|
|
<BoardTplPreview class="boardPreview" :boardWH="selectedSize" :tpl="itm"></BoardTplPreview>
|
|
<!-- <div class="infoPreview">
|
|
<div class="infoBox" :style="____boardBgStyle">
|
|
<span class="infoTxt" :style="____boardTxtStyle(itm)" v-html="itm.content.replace(/\n|\r\n/g, '<br>').replace(/ /g, ' ')"></span>
|
|
</div>
|
|
</div> -->
|
|
<!-- 操作按钮 -->
|
|
<div class="infoBtnBox">
|
|
<el-tooltip content="加入待下发信息" placement="top">
|
|
<p @click="____onAddToDevice(itm)" class="btn btnApply"></p>
|
|
</el-tooltip>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</vuescroll>
|
|
</div>
|
|
|
|
|
|
<!-- 附近相机 -->
|
|
<div v-if="dialogInfoCamera" class="dialog_info_right" style="padding:0;">
|
|
<div class="dialog_head" style="height:4vh;">
|
|
<div class="tit">摄像机设备</div>
|
|
<img class="btnCls" src="@/assets/jihe/images/dialog/ibCls.png" alt="" @click="closeCameraBtnFn">
|
|
<img class="deco" src="@/assets/jihe/images/dialog/ibHeadDeco.png" alt="">
|
|
</div>
|
|
<div class="info_right_camera">
|
|
<div class="info_right_camera_top">
|
|
<!-- 视频组件 -->
|
|
<videoView :url="videoUrl" />
|
|
</div>
|
|
<div class="info_right_camera_bom">
|
|
<div class="camera_bom_left">
|
|
<div class="camera_bom_left_item">
|
|
<div class="camera_bom_left_item_txt">选择相机: </div>
|
|
<div class="camera_bom_left_item_val">
|
|
<el-select v-model="cameraVal" placeholder="请选择" size="mini" style="width:130px"
|
|
@change="cameraValChangeFn">
|
|
<el-option v-for="item in cameraOptList" :key="item.camId" :label="item.camName"
|
|
:value="item.camId">
|
|
</el-option>
|
|
</el-select>
|
|
</div>
|
|
</div>
|
|
<div class="camera_bom_left_item" v-for="item in cameraDataVideoList" :key="item.id">
|
|
<div class="camera_bom_left_item_txt">{{ item.txt }}: </div>
|
|
<div class="camera_bom_left_item_val">{{ item.val }}</div>
|
|
</div>
|
|
</div>
|
|
<div class="camera_bom_right">
|
|
<div class="camera_bom_right_t">
|
|
<div class="camera_bom_right_t_box"></div>
|
|
<div class="camera_bom_right_t_h_po" v-for="item in cameraBtnList" :key="item.id"
|
|
@click="cameraControlBtnFn(item)"
|
|
:style="{ 'left': item.le, top: item.to, 'transform': 'rotate(' + item.ro + 'deg)' }"></div>
|
|
</div>
|
|
<div class="camera_bom_right_b">
|
|
<div class="camera_bom_right_b_btn" v-for="item in cameraControlList" :key="item.id">
|
|
<div class="camera_bom_right_b_btn_l" @click="cameraControlLeFn(item.numL)"></div>
|
|
<div class="camera_bom_right_b_btn_c">{{ item.txt }}</div>
|
|
<div class="camera_bom_right_b_btn_r" @click="cameraControlLeFn(item.numR)"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</transition>
|
|
|
|
<BoardInfoEditor @afterSubmit="____onEditSubmit" :mode="editDialog.mode" :type="editDialog.type"
|
|
:visible.sync="editDialog.visible" :screenSize="selectedSize" :tpl="editDialog.tpl"></BoardInfoEditor>
|
|
|
|
<!-- 情报板弹框中的弹框 -->
|
|
<addBoard ref="addinfo" @addInfo="addInfo" />
|
|
<editBoard v-if="showEmit" :boardEmitItem="boardEmitItem" @receiveForm="receiveForm" @dialogClose="dialogClose" />
|
|
</div>
|
|
</Teleport>
|
|
</template>
|
|
|
|
<script>
|
|
import addBoard from './addinfo.vue'
|
|
import editBoard from './editInfo.vue'
|
|
import { listDevice, invokedFunction, getDeviceRealtimeProperty } from '@/api/device/device.js'
|
|
import infoBoardTestData from "@/common/infoBoardTestData.js"
|
|
import { getBoardDeviceInfo } from '@/api/board/board'
|
|
|
|
import BoardPreview from "@screen/components/infoBoard/BoardPreview.vue"
|
|
import BoardTplPreview from "@screen/components/infoBoard/BoardTplPreview.vue"
|
|
import BoardInfoEditor from '@screen/components/infoBoard/BoardInfoEditor'
|
|
|
|
import vuescroll from 'vuescroll'
|
|
import scrollOptions from '@/common/scrollbar.js'
|
|
import Teleport from '@screen/components/Teleport.vue'
|
|
|
|
import { getTemplateList } from '@/api/board/template'
|
|
|
|
export default {
|
|
name: 'InfoBoard',
|
|
data() {
|
|
return {
|
|
dialogTit: '门架式可变信息标志YK16+270',
|
|
isShowTemplate: false,
|
|
dialogInfoCamera: false,
|
|
dialogInfoList: [],
|
|
moBanList: [],
|
|
moBanDataHandList: [],
|
|
_moBanDataList: [
|
|
{
|
|
id: 1001,
|
|
bt: '日常通用',
|
|
mbList: [
|
|
{ id: 305, txt: '谨慎驾驶', w: 768, h: 64, col: '#FFFF00', fz: 48, pdl: 288, pdt: 8, fm: '黑体' },
|
|
{ id: 306, txt: '谨慎驾驶 注意安全', w: 768, h: 160, col: '#03FF00', fz: 60, pdl: 0, pdt: 0, fm: '黑体' },
|
|
{ id: 307, txt: '谨慎驾驶 注意安全', w: 768, h: 160, col: '#FF0000', fz: 60, pdl: 0, pdt: 0, fm: '黑体' },
|
|
{ id: 308, txt: '谨慎驾驶, <br/> 注意安全', w: 768, h: 160, col: '#03FF00', fz: 60, pdl: 0, pdt: 0, fm: '黑体' }
|
|
]
|
|
},
|
|
{ id: 1002, bt: '施工管控', mbList: [{ id: 309, txt: '道路施工, <br/> 谨慎驾驶', w: 768, h: 160, col: '#FFFF00', fz: 60, pdl: 0, pdt: 0, fm: '黑体' }] },
|
|
{ id: 1003, bt: '恶劣天气', mbList: [{ id: 309, txt: '救援 拨打96659', w: 768, h: 160, col: '#FFFF00', fz: 60, pdl: 0, pdt: 0, fm: '黑体' }] },
|
|
{ id: 1004, bt: '交通拥堵', mbList: [{ id: 309, txt: '救援 拨打96659', w: 768, h: 160, col: '#FFFF00', fz: 60, pdl: 0, pdt: 0, fm: '黑体' }] },
|
|
{ id: 1005, bt: '突发事件', mbList: [{ id: 309, txt: '救援 拨打96659', w: 768, h: 160, col: '#FFFF00', fz: 60, pdl: 0, pdt: 0, fm: '黑体' }] },
|
|
{ id: 1006, bt: '警情播报', mbList: [{ id: 309, txt: '救援 拨打96659', w: 768, h: 160, col: '#FFFF00', fz: 60, pdl: 0, pdt: 0, fm: '黑体' }] }
|
|
],
|
|
activeNames: [1001, 1002],
|
|
activeTab: "first",
|
|
moBanDataList: [{
|
|
dictCode: 1001,
|
|
dictLabel: "日常通用",
|
|
mbList: [
|
|
{
|
|
id: 3001,
|
|
screenSize: "200*80",
|
|
tcontents: [
|
|
{
|
|
content: "谨慎驾驶 注意安全",
|
|
formatStyle: 0,
|
|
fontSize: "24",
|
|
fontType: "微软雅黑",
|
|
fontColor: "0000FF"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}, {
|
|
dictCode: 1002,
|
|
dictLabel: "施工管理",
|
|
mbList: [
|
|
{
|
|
id: 3002,
|
|
screenSize: "800*90",
|
|
tcontents: [
|
|
{
|
|
content: "道路施工<br>缓慢驾驶",
|
|
formatStyle: 0,
|
|
fontSize: "18",
|
|
fontType: "微软雅黑",
|
|
fontColor: "FFFF00"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}],
|
|
tabDataInfoList: [],
|
|
tabInfoList: [
|
|
{ id: 401, tit: '设备名称', txt: '门架式可变信息标志', col: '#fff' },
|
|
{ id: 402, tit: '道路名称', txt: 'G35济菏高速', col: '#fff' },
|
|
{ id: 403, tit: '所属机构', txt: '山东高速济南发展公司', col: '#fff' },
|
|
{ id: 404, tit: '设备桩号', txt: 'K094+079', col: '#fff' },
|
|
{ id: 405, tit: '设备厂商', txt: '光电比特', col: '#fff' },
|
|
{ id: 406, tit: '设备状态', txt: '离线', col: '#888' }
|
|
],
|
|
cameraDataVideoList: [],
|
|
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, cmd: 23, dir: 'left', le: '26%', to: '33%', ro: 0 },
|
|
{ id: 4002, cmd: 21, dir: 'up', le: '46%', to: '4%', ro: 90 },
|
|
{ id: 4003, cmd: 24, dir: 'right', le: '65%', to: '33%', ro: 180 },
|
|
{ id: 4004, cmd: 22, dir: 'downward', le: '46%', to: '62%', ro: 267 }
|
|
],
|
|
cameraControlList: [
|
|
{ id: 5001, txt: '变倍', numL: 11, numR: 12 },
|
|
{ id: 5002, txt: '光圈', numL: 16, numR: 15 },
|
|
{ id: 5003, txt: '聚焦', numL: 14, numR: 13 }
|
|
],
|
|
showEmit: false,
|
|
|
|
selectedBdMsg: [],
|
|
selectedSize: "",
|
|
editDialog: {
|
|
mode: "",
|
|
type: "",
|
|
visible: false,
|
|
tpl: {}
|
|
},
|
|
scrollOptions,
|
|
templateAvailable: null,
|
|
tplCategory: [], //模板
|
|
templateAll: []
|
|
}
|
|
},
|
|
props: {
|
|
visible: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
device: {
|
|
type: Object,
|
|
default: null
|
|
}
|
|
},
|
|
watch: {
|
|
device: {
|
|
handler(newV) {
|
|
this.____getDeviceInfo();
|
|
},
|
|
immediate: true
|
|
}
|
|
},
|
|
components: { addBoard, editBoard, BoardPreview, BoardTplPreview, BoardInfoEditor, vuescroll, Teleport },
|
|
created() {
|
|
// this.____getTemplateCategory();
|
|
// this.____getAllTemplate();
|
|
// this.getTemplateSeries();
|
|
},
|
|
computed: {
|
|
},
|
|
mounted() {
|
|
//测试数据
|
|
this.dialogInfoList = this.boardDataConvert(infoBoardTestData);
|
|
this.templateList = this.moBanDataList;
|
|
let deviceState = "online";
|
|
this.tabDataInfoList = [
|
|
{ id: 401, tit: '设备名称', txt: "门架式可变信息标志", col: '#fff' },
|
|
{ id: 402, tit: '道路名称', txt: "G35济菏高速", col: '#fff' },
|
|
{ id: 403, tit: '所属机构', txt: "山东高速济南发展公司", col: '#fff' },
|
|
{ id: 404, tit: '设备桩号', txt: "K094+079", col: '#fff' },
|
|
{ id: 405, tit: '设备厂商', txt: "光电比特", col: '#fff' },
|
|
{ id: 406, tit: '设备状态', txt: deviceState == 'online' ? '在线' : '离线', col: deviceState == 'online' ? '#10d269' : '#888' }
|
|
]
|
|
},
|
|
methods: {
|
|
// 获取信息模板分类
|
|
____getTemplateCategory() {
|
|
return this.getDicts('iot_template_category').then(res => {
|
|
this.tplCategory = res.data;
|
|
})
|
|
},
|
|
|
|
____getAllTemplate() {
|
|
return getTemplateList().then((res) => {
|
|
this.templateAll = res.data;
|
|
});
|
|
},
|
|
|
|
____getDeviceInfo() {
|
|
this.selectedSize = JSON.parse(this.device.otherConfig).screenSize;
|
|
if(this.tplCategory.length && this.templateAll.length){
|
|
this.____setAvailableTemplate();
|
|
}else{
|
|
Promise.all([this.____getTemplateCategory(), this.____getAllTemplate()]).then(res=>{
|
|
this.____setAvailableTemplate();
|
|
})
|
|
}
|
|
|
|
getBoardDeviceInfo(this.device.iotDeviceId).then(res => {
|
|
this.selectedBdMsg = res.data["3A"].content;
|
|
}).catch(err => {
|
|
|
|
})
|
|
},
|
|
|
|
____setAvailableTemplate() {
|
|
this.templateAvailable = [];
|
|
this.tplCategory.forEach((item, index) => {
|
|
let arr = this.templateAll['' + index];
|
|
if (arr.length > 0) {
|
|
let temp = [];
|
|
arr.forEach(tpl => {
|
|
if (tpl.screenSize == this.selectedSize) {
|
|
temp.push(tpl);
|
|
}
|
|
})
|
|
if (temp.length > 0) {
|
|
this.templateAvailable.push({
|
|
...item,
|
|
list: temp
|
|
});
|
|
}
|
|
}
|
|
})
|
|
},
|
|
|
|
____onEditBoardItem(tpl, index) {
|
|
// type : board template
|
|
// mode : edit add toDevice toTemplate
|
|
this.boardItemEdtingIndex = index;
|
|
this.editDialog = {
|
|
visible: true,
|
|
mode: "edit",
|
|
type: "device",
|
|
tpl
|
|
}
|
|
},
|
|
|
|
____onDeleteBoardItem(index) {
|
|
if (index > -1) {
|
|
this.selectedBdMsg.splice(index, 1)
|
|
this.$message.success('删除成功,发布后才能生效。')
|
|
}
|
|
},
|
|
|
|
____onEditSubmit(para) {
|
|
this.editDialog.tpl = {};
|
|
this.editDialog.visible = false;
|
|
|
|
if (para.type == "device") {
|
|
if (para.mode == "edit") {
|
|
this.selectedBdMsg[this.boardItemEdtingIndex] = para.data;
|
|
} else {
|
|
this.selectedBdMsg.push(para.data);
|
|
}
|
|
} else if (para.mode == "toDevice") {
|
|
this.selectedBdMsg.push(para.data);
|
|
} else {
|
|
this.____refreshPageData(para);
|
|
}
|
|
},
|
|
|
|
____refreshPageData(para) { },
|
|
|
|
|
|
// 新增待下发
|
|
____onAddToDevice(item) {
|
|
let arr = this.selectedSize.split("*");
|
|
item.origin = {
|
|
displayAreaWidth: +arr[0],
|
|
displayAreaHeight: +arr[1]
|
|
}
|
|
this.editDialog = {
|
|
visible: true,
|
|
mode: "toDevice",
|
|
type: "template",
|
|
tpl: item,
|
|
}
|
|
},
|
|
|
|
____onAddDeviceItem() {
|
|
let arr = this.selectedSize.split("*");
|
|
this.editDialog = {
|
|
visible: true,
|
|
mode: "add",
|
|
type: "device",
|
|
tpl: {
|
|
"textContent": "",
|
|
origin: {
|
|
displayAreaWidth: +arr[0],
|
|
displayAreaHeight: +arr[1]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
|
|
|
|
|
|
boardBoxStyle(node) {
|
|
let arr = node.screenSize.split("*");
|
|
let scale = this.getScrollSz(+arr[0]);
|
|
let obj = {
|
|
'width': `${+arr[0] / scale}px`,
|
|
'height': `${+arr[1] / scale}px`,
|
|
'justify-content': this.getTextAlign(node.tcontents[0].formatStyle)
|
|
}
|
|
return obj;
|
|
},
|
|
boardConStyle(node) {
|
|
let fSize = +node.tcontents[0].fontSize;
|
|
let scale = this.getScrollSz(fSize);
|
|
let obj = {
|
|
'font-size': `${fSize / scale}px`,
|
|
'color': '#' + node.tcontents[0].fontColor,
|
|
'font-family': node.tcontents[0].fontType
|
|
}
|
|
return obj;
|
|
},
|
|
//情报板原始数据转化成目标格式
|
|
boardDataConvert(origin) {
|
|
let rst = origin.map(item => {
|
|
return {
|
|
...item,
|
|
STAY: item.playbackDuration,
|
|
inScreenMode: item.screenEntryMethod,
|
|
screenSize: item.displayAreaWidth + '*' + item.displayAreaHeight,
|
|
tcontents: [
|
|
{
|
|
...item,
|
|
fontSpacing: item.fontSpacing,
|
|
fontSize: parseInt(item.fontSize.replace(/\D/g, '')),
|
|
fontType: item.font,
|
|
fontColor: item.foregroundColor.toUpperCase(),
|
|
formatStyle: item.horizontalAlignment,
|
|
STAY: item.playbackDuration / 10,
|
|
content: item.textContent.replaceAll('\\,', ',').replaceAll('\\=', '=').replaceAll('\\\\n', '\n')
|
|
}
|
|
]
|
|
}
|
|
});
|
|
return rst;
|
|
},
|
|
// 地图点位
|
|
mapClickEvent(e) {
|
|
this.dialogInfoList = []
|
|
console.log('父组件地图点位', e)
|
|
this.videoUrl = ''
|
|
this.cameraOptList = []
|
|
this.mapIds = e.target._opts.extData.deviceId
|
|
this.screenDataSize = e.target._opts.extData.sceenSize
|
|
this.dialogTit = e.target._opts.extData.deviceName
|
|
// this.tabDataInfoList = e.target._opts.extData
|
|
this.tabDataInfoList = [
|
|
{ id: 401, tit: '设备名称', txt: e.target._opts.extData.deviceName, col: '#fff' },
|
|
{ id: 402, tit: '道路名称', txt: e.target._opts.extData.roadName, col: '#fff' },
|
|
{ id: 403, tit: '所属机构', txt: e.target._opts.extData.organization, col: '#fff' },
|
|
{ id: 404, tit: '设备桩号', txt: e.target._opts.extData.pileNumber, col: '#fff' },
|
|
{ id: 405, tit: '设备厂商', txt: e.target._opts.extData.brind, col: '#fff' },
|
|
{ id: 406, tit: '设备状态', txt: e.target._opts.extData.deviceState == 'online' ? '在线' : '离线', col: e.target._opts.extData.deviceState == 'online' ? '#10d269' : '#888' }
|
|
]
|
|
this.getTemplateSeries()
|
|
this.updateList(this.mapIds)
|
|
this.getEnergyCameraBoardFn(e.target._opts.extData.pileNumber)
|
|
// this.mapDialogTop = e.pixel.y + 'px'
|
|
// this.mapDialogLeft = e.pixel.x + 'px'
|
|
// this.$refs.mapDialog.style.top = e.pixel.y + 'px'
|
|
// this.$refs.mapDialog.style.left = e.pixel.x + 'px'
|
|
// console.log(this.$refs.mapDialog)
|
|
},
|
|
getEnergyCameraBoardFn(pileNumber) {
|
|
getEnergyCameraBoardAPi({ pileNum: pileNumber }).then(res => {
|
|
console.log('获取到附近的像机', res)
|
|
this.cameraVal = res.data[0].camId
|
|
this.cameraOptList = res.data
|
|
this.cameraValCha(this.cameraOptList, this.cameraVal)
|
|
this.getEnergyCameraVideoFn()
|
|
})
|
|
},
|
|
getEnergyCameraVideoFn() {
|
|
getEnergyCameraVideoAPi({ camId: this.cameraVal }).then(res => {
|
|
// console.log('获取到视频', res)
|
|
this.videoUrl = res.data.liveUrl
|
|
})
|
|
},
|
|
cameraControlBtnFn(item) {
|
|
this.getEnergyCameraControlFn(item.cmd, 5)
|
|
},
|
|
cameraControlLeFn(item) {
|
|
// console.log('按钮点击事件', item)
|
|
this.getEnergyCameraControlFn(item, 5)
|
|
},
|
|
getEnergyCameraControlFn(cmd, spe) {
|
|
getEnergyCameraControlAPi({ camId: this.cameraVal, cmdType: cmd, speed: spe }).then(res => {
|
|
// console.log('控制返回结果', res)
|
|
// this.videoUrl = res.data.liveUrl
|
|
})
|
|
},
|
|
cameraValChangeFn() {
|
|
console.log('点击切换按钮', this.cameraVal)
|
|
this.cameraValCha(this.cameraOptList, this.cameraVal)
|
|
},
|
|
// cameraDataVideoList
|
|
cameraValCha(date, num) {
|
|
let str = {
|
|
0: '正常',
|
|
1: '网络中断',
|
|
2: '网络正常无图像',
|
|
3: '有图像图可能存在问题'
|
|
}
|
|
date.forEach(i => {
|
|
if (i.camId === num) {
|
|
this.cameraDataVideoList = [
|
|
{ id: 3001, txt: '设备名称', val: i.camName },
|
|
{ id: 3002, txt: '设备编号', val: i.camId },
|
|
{ id: 3003, txt: '设备桩号', val: i.pileNum },
|
|
{ id: 3005, txt: '道路名称', val: i.deptName },
|
|
{ id: 3006, txt: '道路状况', val: i.status == '-1' ? '未启用' : str[Number(i.status)] }
|
|
]
|
|
}
|
|
})
|
|
},
|
|
// 信息发布
|
|
InformationReleaseFn() {
|
|
this.$confirm('是否确定发布情报板?', '提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
type: 'warning'
|
|
})
|
|
.then(() => {
|
|
return;
|
|
let loading = this.$loading({
|
|
lock: true,
|
|
text: 'Loading',
|
|
spinner: 'el-icon-loading',
|
|
background: 'rgba(0, 0, 0, 0.7)'
|
|
})
|
|
const objAll = {}
|
|
// objAll.deviceIds = this.checkedCities.toString()
|
|
objAll.deviceIds = this.mapIds
|
|
let that = this
|
|
|
|
// let devicePixel = this.form.devicePixel.split('*')
|
|
console.log('接口参数', this.dialogInfoList)
|
|
let newArr = this.dialogInfoList.map(item => {
|
|
let obj = {}
|
|
|
|
obj.STAY = item.STAY
|
|
obj.ACTION = item.inScreenMode
|
|
obj.SPEED = item.tcontents[0].fontSpacing
|
|
obj.COORDINATE = item.screenSize.replace('*', '')
|
|
obj.COLOR = item.tcontents[0].fontColor
|
|
obj.FONT = this.getFontValue(item.tcontents[0].fontType)
|
|
obj.FONT_SIZE = item.tcontents[0].fontSize
|
|
|
|
obj.CONTENT = item.tcontents[0].content.replaceAll(',', '\\,')
|
|
obj.CONTENT = item.tcontents[0].content.replaceAll('=', '\\=')
|
|
obj.CONTENT = item.tcontents[0].content.replace(/\n/g, '\\\\n')
|
|
|
|
// obj.CONTENT = item.tcontents[0].content.replace(/\n|\r\n/g, '<r><n>')
|
|
obj.width = this.processString(item.screenSize, 'w')
|
|
obj.height = this.processString(item.screenSize, 'h')
|
|
obj.formatStyle = item.tcontents[0].formatStyle
|
|
return obj
|
|
})
|
|
|
|
objAll.parameters = newArr
|
|
const param = {
|
|
objectData: JSON.stringify(objAll)
|
|
}
|
|
|
|
invokedFunction(595, 11, { size: '65535', fileName: 'play099.lst' })
|
|
.then(res => {
|
|
debugger
|
|
// console.log('发布消息,校验文件名-------------')
|
|
if (res.data.result == '01') {
|
|
invokedFunction(595, 13, { parameters: newArr })
|
|
.then(res => {
|
|
debugger
|
|
// console.log('发布消息,发送文件内容-----')
|
|
if (res.data.result == '01') {
|
|
invokedFunction(595, '1B', { fileId: '99' })
|
|
.then(res => {
|
|
debugger
|
|
// console.log('发布消息,播放文件-----')
|
|
})
|
|
.catch(() => {
|
|
this.$modal.msgError('发布失败,请重试')
|
|
})
|
|
}
|
|
})
|
|
.catch(() => {
|
|
this.$modal.msgError('发布失败,请重试')
|
|
})
|
|
}
|
|
})
|
|
.catch(() => {
|
|
this.$modal.msgError('发布失败,请重试')
|
|
})
|
|
loading.close()
|
|
})
|
|
.catch(() => {
|
|
this.$message({
|
|
type: 'info',
|
|
message: '已取消发布情报板'
|
|
})
|
|
loading.close()
|
|
})
|
|
this.updateList()
|
|
},
|
|
// 回读
|
|
updateList(deviceId) {
|
|
getDeviceRealtimeProperty(deviceId, '3A', { async: false })
|
|
.then(res => {
|
|
var contentsA = res.data['3A'].content
|
|
console.log('回读消息--1111111111---', contentsA)
|
|
|
|
this.dialogInfoList = this.boardDataConvert(contentsA);
|
|
|
|
console.log('hui1111111111111', this.dialogInfoList)
|
|
})
|
|
.catch(e => {
|
|
// this.$modal.msgError('回读失败,请重试')
|
|
})
|
|
// this.deviceId = deviceId
|
|
|
|
// 根据情报板id获取分辨率
|
|
/*getBoardInfo(deviceId).then(res => {
|
|
console.log(res, 'getBoardInfo')
|
|
this.form.devicePixel = res.data.pixel
|
|
if (res.data.deviceId) {
|
|
this.disabledButton = false
|
|
} else {
|
|
this.disabledButton = true
|
|
}
|
|
})*/
|
|
},
|
|
// 获取模板分类
|
|
getTemplateSeries() {
|
|
this.templateList = []
|
|
getDicts('iot_template_category').then(res => {
|
|
this.moBanDataHandList = res.data
|
|
this.activeNames = res.data.map(item => {
|
|
return item.dictCode
|
|
})
|
|
this.getBoardTemplate()
|
|
})
|
|
},
|
|
// 获取模板
|
|
getBoardTemplate() {
|
|
getAllVmsTemplate({ devicePixel: this.screenDataSize }).then(res => {
|
|
this.templateList = this.moBanDataHandList.map((item, index) => {
|
|
if (item.dictSort === index) {
|
|
return {
|
|
...item,
|
|
mbList: res.data[index]
|
|
}
|
|
}
|
|
})
|
|
})
|
|
},
|
|
panelChangeFn(val) {
|
|
console.log(val)
|
|
},
|
|
// 接收子组件新增待发模板
|
|
addInfo(form) {
|
|
// console.log('待发新增', form)
|
|
this.dialogInfoList.push({
|
|
id: form.id,
|
|
screenSize: form.screenSize,
|
|
COORDINATE: form.coordinate,
|
|
...form,
|
|
tcontents: [{ ...form, content: form.CONTENT, fontSize: parseInt(form.FONT_SIZE.replace(/\D/g, '')), fontType: form.FONT, fontColor: form.COLOR }],
|
|
id: Math.floor(Math.random() * 10000000000000000),
|
|
txt: form.CONTENT,
|
|
fz: parseInt(form.FONT_SIZE.replace(/\D/g, '')),
|
|
fm: form.FONT,
|
|
formatStyle: form.formatStyle,
|
|
...this.processString(form.screenSize),
|
|
...this.processStrNum(form.COORDINATE)
|
|
})
|
|
},
|
|
// 打开添加信息弹窗
|
|
addMoDataInfoFn(type, mode) {
|
|
this.$refs.addinfo.init('', type, mode)
|
|
},
|
|
// 修改弹窗
|
|
editOutline(item, index, type) {
|
|
this.showEmit = true
|
|
this.index = index
|
|
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,
|
|
COORDINATE: item.tcontents[0].coordinate,
|
|
FONT: this.getFont(item.tcontents[0].fontType),
|
|
SPEED: item.tcontents[0].fontSpacing,
|
|
formatStyle: item.tcontents[0].formatStyle,
|
|
ACTION: item.inScreenMode, //出屏方式
|
|
STAY: item.stopTime, //停留时间
|
|
type: type,
|
|
screenSize: item.screenSize,
|
|
category: item.category,
|
|
id: item.id,
|
|
tcontentsId: item.tcontents[0].id
|
|
}
|
|
},
|
|
|
|
// 接收子组件form表单 修改
|
|
receiveForm(form) {
|
|
console.log('接收子组件form表单 修改111111111', form)
|
|
this.formData = form
|
|
console.log('开始的数据', this.dialogInfoList)
|
|
this.dialogInfoList = this.dialogInfoList.map(item => {
|
|
if (item.id === form.id) {
|
|
return { ...item, tcontents: [{ ...item.tcontents[0], ...form, content: form.CONTENT, fontSize: parseInt(form.FONT_SIZE.replace(/\D/g, '')), fontType: form.FONT, fontColor: form.COLOR }] }
|
|
}
|
|
return item
|
|
})
|
|
console.log('修改后的数据', this.dialogInfoList)
|
|
// this.getTemplateSeries()
|
|
this.$forceUpdate()
|
|
},
|
|
|
|
delMoFn(index) {
|
|
console.log(index)
|
|
// deleteTemplate(item.tcontents[0].templateId)
|
|
this.dialogInfoList.splice(index, 1)
|
|
// this.removeItemById(this.dialogInfoList, item.id)
|
|
},
|
|
putLeftFn(item) {
|
|
console.log('点击事件', item)
|
|
this.dialogInfoList.push({ ...item, STAY: item.stopTime })
|
|
console.log('点击事件9990089089', this.dialogInfoList)
|
|
},
|
|
tabClickFn(tab, event) {
|
|
console.log(tab, event)
|
|
},
|
|
onClose() {
|
|
this.$emit("update:visible", false);
|
|
this.isShowTemplate = false
|
|
},
|
|
showSidePanel() {
|
|
if (this.dialogInfoCamera) {
|
|
this.dialogInfoCamera = false
|
|
}
|
|
this.isShowTemplate = !this.isShowTemplate
|
|
},
|
|
showCameraInfoFn() {
|
|
if (this.isShowTemplate) {
|
|
this.isShowTemplate = 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) {
|
|
arr.splice(index, 1) // 从数组中删除该项
|
|
}
|
|
},
|
|
getScrollSz(w) {
|
|
if (w > 760) {
|
|
return 3
|
|
} else if (w > 470) {
|
|
return 2
|
|
} else {
|
|
return 1
|
|
}
|
|
},
|
|
processString(str, x) {
|
|
const parts = str.split('*') // 将字符串按照 '*' 分割成数组
|
|
const w = parseInt(parts[0]) // 将第一个部分解析为整数
|
|
const h = parseInt(parts[1]) // 将第二个部分解析为整数
|
|
if (x === 'w') {
|
|
return w
|
|
} else if (x === 'h') {
|
|
return h
|
|
} else {
|
|
return { w, h } // 返回包含 w 和 h 属性的对象
|
|
}
|
|
},
|
|
processStrNum(str, x) {
|
|
const pdl = parseInt(str.slice(0, 3)) // 截取前三位并解析为整数
|
|
const pdt = parseInt(str.slice(3)) // 截取后三位并解析为整数
|
|
if (x === 'l') {
|
|
return pdl
|
|
} else if (x === 't') {
|
|
return pdt
|
|
} else {
|
|
return { pdl, pdt } // 返回包含 pdl 和 pdt 属性的对象
|
|
}
|
|
},
|
|
getFont(font) {
|
|
if (font == 'KaiTi' || font == 'k') {
|
|
return '楷体'
|
|
} else if (font == 'SimSun' || font == 's') {
|
|
return '宋体'
|
|
} else if (font == 'SimHei' || font == 'h') {
|
|
return '黑体'
|
|
} else if (font == 'FangSong' || font == 'f') {
|
|
return '仿宋'
|
|
} else if (font == 'LiSu' || font == 'l') {
|
|
return '隶书'
|
|
} else {
|
|
return font
|
|
}
|
|
},
|
|
// 转报文 字体
|
|
getFontValue(font) {
|
|
if (font == '黑体' || font == 'SimHei') return '1'
|
|
if (font == '楷体' || font == 'KaiTi') return '2'
|
|
if (font == '仿宋' || font == 'FangSong') return '4'
|
|
if (font == '隶书' || font == 'LiSu') return '5'
|
|
else return '3' //宋体
|
|
},
|
|
|
|
// 转报文 色号
|
|
getColorValue(color) {
|
|
if (color == '蓝色' || color == 'blue') return '0000FF'
|
|
if (color == '绿色' || color == '#00FF00' || color == 'GreenYellow') return '00FF00'
|
|
if (color == '红色' || color == 'red') return 'FF0000'
|
|
if (color == '黄色' || color == 'yellow') return 'FFFF00'
|
|
return 'FFFFFF' //白色
|
|
},
|
|
// 居中
|
|
getTextAlign(font) {
|
|
if (font == '0') {
|
|
return 'left'
|
|
} else if (font == '1') {
|
|
return 'right'
|
|
} else {
|
|
return 'center'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang='scss' scoped>
|
|
.templateBox {
|
|
width: 100%;
|
|
height: 100%;
|
|
|
|
.tplItem {
|
|
margin-right: 14px;
|
|
display: flex;
|
|
align-items: stretch;
|
|
padding-bottom: 10px;
|
|
|
|
.boardPreview {
|
|
border: 1px solid rgba(61, 232, 255, 0.5);
|
|
// width: 560px;
|
|
// height:80px;
|
|
flex: 1;
|
|
}
|
|
|
|
.infoBtnBox {
|
|
width: 110px;
|
|
height: 80px;
|
|
display: flex;
|
|
margin-left: 10px;
|
|
/* // border: solid 1px #05afe3; */
|
|
border: 1px solid rgba(61, 232, 255, 0.5);
|
|
display: flex;
|
|
justify-content: space-around;
|
|
align-items: center;
|
|
|
|
.btn {
|
|
background-repeat: no-repeat;
|
|
background-size: 100% 100%;
|
|
width: 30px;
|
|
height: 30px;
|
|
|
|
&.btnApply {
|
|
background-image: url(~@/assets/jihe/images/button/toLeft.png);
|
|
}
|
|
|
|
&.btnEdit {
|
|
background-image: url(~@/assets/jihe/images/button/edit.png);
|
|
}
|
|
|
|
&.btnDelete {
|
|
background-image: url(~@/assets/jihe/images/button/delete.png);
|
|
}
|
|
}
|
|
|
|
i {
|
|
font-size: 24px;
|
|
color: #666;
|
|
padding-left: 4px;
|
|
cursor: pointer;
|
|
caret-color: rgba(0, 0, 0, 0);
|
|
user-select: none;
|
|
}
|
|
|
|
i:hover {
|
|
color: #05afe3;
|
|
}
|
|
|
|
.disabledClass {
|
|
pointer-events: none;
|
|
cursor: auto !important;
|
|
color: #ccc;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
.controlBox {
|
|
margin-top: 10px;
|
|
margin-bottom: 10px;
|
|
display: flex;
|
|
justify-content: center;
|
|
}
|
|
|
|
.el-collapse {
|
|
max-height: 100% !important;
|
|
overflow: auto;
|
|
border-bottom: none;
|
|
border-top: none;
|
|
padding: 0 0.5vw;
|
|
}
|
|
}
|
|
|
|
.mask {
|
|
width: 100%;
|
|
height: 100%;
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
background: rgba(0, 0, 0, .36);
|
|
z-index: 1100;
|
|
}
|
|
|
|
.map_dialog {
|
|
width: 510px;
|
|
height: 550px;
|
|
background-color: pink;
|
|
position: absolute;
|
|
left: 0px;
|
|
top: 0px;
|
|
transform: translate(-110%, -110%);
|
|
}
|
|
|
|
.dialog_info {
|
|
width: 950px;
|
|
height: 600px;
|
|
position: absolute;
|
|
top: 12%;
|
|
left: 50%;
|
|
transform: translateX(-50%);
|
|
display: flex;
|
|
justify-content: space-around;
|
|
align-items: flex-end;
|
|
}
|
|
|
|
.dialog_info_left {
|
|
width: 510px;
|
|
height: 100%;
|
|
background-color: #114c66;
|
|
}
|
|
|
|
.dialog_info_right {
|
|
width: 430px;
|
|
height: 556px;
|
|
border: 2px solid #196980;
|
|
background-color: #114c66;
|
|
padding: 1vh 0.5vw;
|
|
overflow-y: scroll;
|
|
position: relative;
|
|
}
|
|
|
|
.dialog_head {
|
|
width: 100%;
|
|
height: 48px;
|
|
padding: 0 10px;
|
|
background-image: url('~@/assets/screen/xtb/qbbtit.png');
|
|
background-size: 100% 100%;
|
|
background-repeat: no-repeat;
|
|
background-position: center;
|
|
position: relative;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
|
|
.tit {
|
|
color: #3de8ff;
|
|
font-size: 18px;
|
|
}
|
|
|
|
.btnCls {
|
|
width: 13px;
|
|
height: 13px;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.deco {
|
|
width: 55%;
|
|
height: 5px;
|
|
position: absolute;
|
|
left: 0;
|
|
top: 0;
|
|
}
|
|
}
|
|
|
|
.dialogContent {
|
|
width: 100%;
|
|
height: 300px;
|
|
padding: 10px 40px 10px 10px;
|
|
position: relative;
|
|
}
|
|
|
|
.dialogContent_box {
|
|
width: 100%;
|
|
// height: 100%;
|
|
overflow-y: scroll;
|
|
}
|
|
|
|
.dialogContent_l {
|
|
width: 355px;
|
|
// height: 4.91vh;
|
|
border: 2px solid #1d7890;
|
|
padding: 1px 0;
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
}
|
|
|
|
.dialogContent_r {
|
|
width: 96px;
|
|
// height: 4.91vh;
|
|
border: 2px solid #1d7890;
|
|
display: flex;
|
|
justify-content: space-around;
|
|
align-items: center;
|
|
}
|
|
|
|
.dialogContent_l_xsq {
|
|
width: 256px;
|
|
height: 100%;
|
|
font-size: 18px;
|
|
color: #ff0000;
|
|
background-color: #000;
|
|
line-height: 1;
|
|
// text-align: center;
|
|
display: flex;
|
|
// justify-content: center;
|
|
align-items: center;
|
|
}
|
|
|
|
.show_r_btn {
|
|
width: 1.67vw;
|
|
height: 2.96vh;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.dialogContent_r_btn1 {
|
|
background-image: url('~@/assets/screen/xtb/gg.png');
|
|
background-size: 100% 100%;
|
|
background-repeat: no-repeat;
|
|
background-position: center;
|
|
}
|
|
|
|
.dialogContent_r_btn2 {
|
|
background-image: url('~@/assets/screen/xtb/xx.png');
|
|
background-size: 100% 100%;
|
|
background-repeat: no-repeat;
|
|
background-position: center;
|
|
}
|
|
|
|
.dialogContent_r_btn3 {
|
|
background-image: url('~@/assets/screen/xtb/zz.png');
|
|
background-size: 100% 100%;
|
|
background-repeat: no-repeat;
|
|
background-position: center;
|
|
}
|
|
|
|
.dialogContent_box_item {
|
|
margin-bottom: 0.5vh;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
}
|
|
|
|
.dialogContent_bottom {
|
|
width: 105%;
|
|
height: 16.52vh;
|
|
}
|
|
|
|
.deviceInfo {
|
|
width: 50%;
|
|
padding: 10px 0;
|
|
display: flex;
|
|
// flex-wrap: wrap;
|
|
align-items: stretch;
|
|
}
|
|
|
|
.show_bottom_tab_box {
|
|
width: 100%;
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-items: center;
|
|
}
|
|
|
|
.deviceInfo_l {
|
|
color: #3de8ff;
|
|
font-size: 14px;
|
|
width: 70px;
|
|
display: flex;
|
|
flex-direction: row;
|
|
align-items: center;
|
|
}
|
|
|
|
.deviceInfo_r {
|
|
width: 0;
|
|
flex: 1;
|
|
color: #fff;
|
|
font-size: 14px;
|
|
margin-left: 0.5vw;
|
|
}
|
|
|
|
.sideSwitch {
|
|
position: absolute;
|
|
right: 0%;
|
|
top: 0%;
|
|
width: 24px;
|
|
line-height: 1.2;
|
|
padding: 0.5vh 0;
|
|
background: linear-gradient(180deg, #005c79 0%, #009bcc 100%);
|
|
border-radius: 0px 0px 0px 0px;
|
|
opacity: 1;
|
|
text-align: center;
|
|
cursor: pointer;
|
|
|
|
.img {
|
|
width: 15px;
|
|
height: 10px;
|
|
border: none;
|
|
transition: transform 0.3s ease;
|
|
/* 过渡效果 */
|
|
}
|
|
|
|
.txt {
|
|
color: #fff;
|
|
font-size: 13px;
|
|
}
|
|
}
|
|
|
|
.dialogContent_box_empty {
|
|
font-size: 14px;
|
|
text-align: center;
|
|
color: #fff;
|
|
}
|
|
|
|
.dialog_info_right_tit {
|
|
color: #fff;
|
|
font-size: 14px;
|
|
margin-bottom: 0.5vh;
|
|
}
|
|
|
|
.dialog_info_right_show {
|
|
width: 100%;
|
|
// height: 28vh;
|
|
}
|
|
|
|
.dialogContent_bottom_btn {
|
|
width: 100%;
|
|
height: 5vh;
|
|
display: flex;
|
|
justify-content: flex-end;
|
|
align-items: center;
|
|
text-align: center;
|
|
}
|
|
|
|
.show_bottom_btn_add {
|
|
width: 90px;
|
|
height: 23px;
|
|
color: #fff;
|
|
font-size: 14px;
|
|
line-height: 23px;
|
|
background: #00b3cc;
|
|
border-radius: 48px 48px 48px 48px;
|
|
opacity: 1;
|
|
margin-right: 0.5vw;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.show_bottom_btn_del {
|
|
width: 90px;
|
|
height: 23px;
|
|
color: #fff;
|
|
font-size: 14px;
|
|
line-height: 23px;
|
|
background: #c87800;
|
|
border-radius: 48px 48px 48px 48px;
|
|
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%;
|
|
padding: 2vh 0;
|
|
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: 1.5vh;
|
|
}
|
|
|
|
.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;
|
|
}
|
|
|
|
.camera_bom_right_b_btn {
|
|
width: 100%;
|
|
padding: 0vh 2vw 1vh 2vw;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
}
|
|
|
|
.camera_bom_right_b_btn_l {
|
|
width: 1.2vw;
|
|
height: 2.4vh;
|
|
border-radius: 50%;
|
|
background-image: url('~@/assets/screen/xtb/jhbtn.png');
|
|
background-size: 100% 100%;
|
|
background-repeat: no-repeat;
|
|
background-position: center;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.camera_bom_right_b_btn_c {
|
|
color: #fff;
|
|
}
|
|
|
|
.camera_bom_right_b_btn_r {
|
|
width: 1.2vw;
|
|
height: 2.4vh;
|
|
border-radius: 50%;
|
|
background-image: url('~@/assets/screen/xtb/addbtn.png');
|
|
background-size: 100% 100%;
|
|
background-repeat: no-repeat;
|
|
background-position: center;
|
|
cursor: pointer;
|
|
}
|
|
|
|
// background-color: #104b65;
|
|
// background-image: url('~@/assets/screen/xtb/qbbtit.png');
|
|
// background-size: 100% 100%;
|
|
// background-repeat: no-repeat;
|
|
// background-position: center;
|
|
|
|
/* 通用滚动条样式 */
|
|
::-webkit-scrollbar {
|
|
width: 3px;
|
|
/* 设置滚动条宽度 */
|
|
height: 3px;
|
|
/* 设置滚动条高度 */
|
|
}
|
|
|
|
::-webkit-scrollbar-track {
|
|
background-color: #114c66;
|
|
/* 设置滚动条轨道颜色 */
|
|
}
|
|
|
|
::-webkit-scrollbar-thumb {
|
|
background-color: #9abce0;
|
|
/* 设置滚动条滑块颜色 */
|
|
border-radius: 4px;
|
|
/* 设置滚动条滑块圆角 */
|
|
}
|
|
|
|
::v-deep .el-tabs__nav-wrap::after {
|
|
background-color: #316076;
|
|
}
|
|
|
|
::v-deep .el-tabs__item.is-active {
|
|
color: #3de8ff !important;
|
|
}
|
|
|
|
::v-deep .el-tabs__item {
|
|
color: #fff !important;
|
|
}
|
|
|
|
::v-deep .el-tabs__active-bar {
|
|
background-color: #3de8ff !important;
|
|
}
|
|
|
|
::v-deep .el-collapse-item__header {
|
|
color: #fff;
|
|
height: 28px;
|
|
background-color: #053b4f;
|
|
border: none;
|
|
padding-left: 0.5vw;
|
|
}
|
|
|
|
::v-deep .el-collapse {
|
|
color: #fff;
|
|
border: none;
|
|
}
|
|
|
|
::v-deep .el-collapse-item__wrap {
|
|
color: #fff;
|
|
will-change: height;
|
|
background-color: #053b4f;
|
|
overflow: hidden;
|
|
-webkit-box-sizing: border-box;
|
|
box-sizing: border-box;
|
|
margin-top: 0.5vh;
|
|
border: none;
|
|
}
|
|
|
|
::v-deep .el-collapse-item__content {
|
|
margin-bottom: 0;
|
|
padding: 0.5vh 0.5vw;
|
|
}
|
|
|
|
::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;
|
|
}
|
|
</style>
|
|
|