Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 574 B After Width: | Height: | Size: 797 B |
@ -1,521 +0,0 @@ |
|||
<template> |
|||
<Dialog v-model="modelVisible" :title="title" width="880px"> |
|||
<div class="EventAddPlanDialog"> |
|||
<div class="first"> |
|||
<el-radio-group v-model="planName" @input="changeRadio"> |
|||
<el-radio-button |
|||
v-for="item in info" |
|||
:key="item.id" |
|||
:label="item.planName" |
|||
></el-radio-button> |
|||
</el-radio-group> |
|||
</div> |
|||
|
|||
<div class="second"> |
|||
<el-row> |
|||
<el-col :span="2"> |
|||
<div class="text">联动设备:</div> |
|||
</el-col> |
|||
<el-col :span="22"> |
|||
<FormTable |
|||
ref="secondFormTable" |
|||
:tableData="secondFormData" |
|||
:type="1" |
|||
></FormTable> |
|||
</el-col> |
|||
</el-row> |
|||
</div> |
|||
<div class="third"> |
|||
<el-row> |
|||
<el-col :span="2"> |
|||
<div class="text">恢复操作:</div> |
|||
</el-col> |
|||
<el-col :span="22"> |
|||
<FormTable |
|||
ref="thirdFormTable" |
|||
:tableData="thirdFormData" |
|||
:type="2" |
|||
></FormTable> |
|||
</el-col> |
|||
</el-row> |
|||
</div> |
|||
</div> |
|||
|
|||
<template #footer> |
|||
<!-- <Button v-if="isDisBtn" style="padding:0 24px; pointer-events: none; background-color: #C9C9C9;" |
|||
@click.native="handleRestore" :loading="submitting">强制恢复</Button> --> |
|||
<Button |
|||
style="padding: 0 24px" |
|||
@click.native="handleSubmit(2)" |
|||
:loading="submitting" |
|||
>强制恢复</Button |
|||
> |
|||
<Button |
|||
style="padding: 0 24px" |
|||
@click.native="handleSubmit(1)" |
|||
:loading="submitting" |
|||
>确认</Button |
|||
> |
|||
<Button |
|||
style="background: #c9c9c9; padding: 0 24px" |
|||
@click.native="(modelVisible = false), (submitting = false)" |
|||
>取消</Button |
|||
> |
|||
</template> |
|||
</Dialog> |
|||
</template> |
|||
|
|||
<script> |
|||
import Dialog from "@screen/components/Dialog/index"; |
|||
import FormTable from "../formTable/index.vue"; |
|||
import Button from "@screen/components/Buttons/Button.vue"; |
|||
import request from "@/utils/request"; |
|||
import { Message } from "element-ui"; |
|||
import { throttle } from "lodash"; |
|||
|
|||
export default { |
|||
name: "eventPlanDialog", |
|||
components: { |
|||
Dialog, |
|||
Button, |
|||
FormTable, |
|||
}, |
|||
model: { |
|||
prop: "visible", |
|||
event: "close", |
|||
}, |
|||
provide() { |
|||
return { |
|||
loadData: throttle(this.loadData, 1000), |
|||
getAutomatic: this.getTemplateAutomatic, |
|||
getOriginal: this.getBoardOriginal, |
|||
}; |
|||
}, |
|||
props: { |
|||
visible: Boolean, |
|||
activeName: String, |
|||
info: { |
|||
type: Array, |
|||
default: () => [], |
|||
}, |
|||
eventFormData: { |
|||
type: Object, |
|||
default: () => {}, |
|||
}, |
|||
}, |
|||
data() { |
|||
return { |
|||
title: "事件确认", |
|||
isDisBtn: true, |
|||
dialogType: 1, |
|||
planId: 0, |
|||
planInfo: {}, |
|||
submitting: false, |
|||
secondFormData: [ |
|||
{ |
|||
deviceType: 1, |
|||
searchRule: 1, |
|||
qbb: "", |
|||
}, |
|||
], |
|||
thirdFormData: [ |
|||
{ |
|||
deviceType: 1, |
|||
searchRule: 1, |
|||
qbb: "", |
|||
}, |
|||
], |
|||
planName: "", |
|||
automaticInfo: {}, |
|||
dcExecuteAction: [], |
|||
deviceData: [], |
|||
automaticData: {}, |
|||
boardOriginalData: {}, |
|||
eventOptions: [ |
|||
{ |
|||
value: 1, |
|||
label: "异常天气", |
|||
}, |
|||
{ |
|||
value: 2, |
|||
label: "交通事故", |
|||
}, |
|||
{ |
|||
value: 3, |
|||
label: "非法上路", |
|||
}, |
|||
{ |
|||
value: 4, |
|||
label: "车辆故障", |
|||
}, |
|||
{ |
|||
value: 5, |
|||
label: "交通拥堵", |
|||
}, |
|||
{ |
|||
value: 6, |
|||
label: "交通管制", |
|||
}, |
|||
{ |
|||
value: 7, |
|||
label: "服务区异常", |
|||
}, |
|||
{ |
|||
value: 8, |
|||
label: "施工建设", |
|||
}, |
|||
{ |
|||
value: 9, |
|||
label: "路障清除", |
|||
}, |
|||
], |
|||
mechanismOptions: [ |
|||
{ |
|||
value: 1, |
|||
label: "雨", |
|||
}, |
|||
{ |
|||
value: 2, |
|||
label: "雪", |
|||
}, |
|||
{ |
|||
value: 3, |
|||
label: "雾", |
|||
}, |
|||
{ |
|||
value: 4, |
|||
label: "大风", |
|||
}, |
|||
{ |
|||
value: 5, |
|||
label: "低温寒潮", |
|||
}, |
|||
{ |
|||
value: 6, |
|||
label: "路面积雪", |
|||
}, |
|||
{ |
|||
value: 7, |
|||
label: "路面结冰", |
|||
}, |
|||
{ |
|||
value: 8, |
|||
label: "路面积水", |
|||
}, |
|||
{ |
|||
value: 9, |
|||
label: "其他", |
|||
}, |
|||
], |
|||
conditionOptions: [ |
|||
// { |
|||
// value: 1, |
|||
// label: '大于(>)' |
|||
// }, |
|||
{ |
|||
value: 1, |
|||
label: "小于(<)", |
|||
}, |
|||
], |
|||
}; |
|||
}, |
|||
mounted() {}, |
|||
computed: { |
|||
modelVisible: { |
|||
get() { |
|||
if (this.visible) { |
|||
if (this.info.length > 0) { |
|||
this.planName = this.info[0]?.planName || ""; |
|||
this.planInfo = this.info[0]; |
|||
this.initData(this.info[0]); |
|||
} |
|||
} |
|||
return this.visible; |
|||
}, |
|||
set(val) { |
|||
this.$emit("close", val); |
|||
}, |
|||
}, |
|||
}, |
|||
methods: { |
|||
initData(data) { |
|||
console.log("data", data); |
|||
if (!data) return; |
|||
// this.planId = data.id; |
|||
let dcExecuteAction = data.dcExecuteAction; |
|||
let secondFormData = []; |
|||
let thirdFormData = []; |
|||
dcExecuteAction.forEach((it) => { |
|||
let action = { ...it }; |
|||
if (it.otherConfig) { |
|||
let config = JSON.parse(it.otherConfig); |
|||
let qbb = ""; |
|||
if (config.id) { |
|||
qbb = config.content; |
|||
config = { dcInfoBoardTemplate: config }; |
|||
} |
|||
// if (config.state) { |
|||
// config.gzms = config.state |
|||
// } |
|||
action = { ...it, ...config, qbb: qbb }; |
|||
} |
|||
if (it.deviceList) { |
|||
action.deviceList = it.deviceList |
|||
.split(",") |
|||
.map((str) => Number(str)); |
|||
} |
|||
if (it.actionType == 1) { |
|||
secondFormData.push(action); |
|||
} else if (it.actionType == 2) { |
|||
thirdFormData.push({ |
|||
...action, |
|||
qbb: "默认恢复该情报板上次常态化信息", |
|||
}); |
|||
} |
|||
}); |
|||
this.secondFormData = secondFormData; |
|||
this.thirdFormData = thirdFormData; |
|||
}, |
|||
async loadData() { |
|||
if (this.deviceData.length <= 0) { |
|||
let result = await request({ |
|||
url: `business/device/query?deviceType=2`, |
|||
method: "get", |
|||
}); |
|||
if (result.code != 200) return Message.error(result?.msg); |
|||
// console.log('123'); |
|||
this.deviceData = result.data; |
|||
// return result.data; |
|||
} |
|||
return this.deviceData; |
|||
}, |
|||
async getTemplateAutomatic() { |
|||
let url = ""; |
|||
let data = {}; |
|||
let otherConfig = {}; |
|||
let plan = this.info.find((it) => it.planName == this.planName); |
|||
console.log("plan", plan); |
|||
let action = plan.dcExecuteAction.find( |
|||
(it) => it.actionType == 1 && it.deviceType == 2 |
|||
); |
|||
if (action) { |
|||
otherConfig = JSON.parse(action.otherConfig); |
|||
if (this.activeName == "-1") { |
|||
//感知 |
|||
url = "/business/plans/warning/confirm"; |
|||
data = { |
|||
dcInfoBoardTemplate: otherConfig, |
|||
dcWarning: this.eventFormData, |
|||
}; |
|||
} else { |
|||
//交通 |
|||
url = "/business/plans/event/automatic"; |
|||
data = { |
|||
dcInfoBoardTemplate: otherConfig, |
|||
dcEvent: this.eventFormData, |
|||
}; |
|||
} |
|||
const result = await request({ |
|||
url: url, |
|||
method: "post", |
|||
data: data, |
|||
}); |
|||
if (result.code != 200) return Message.error(result?.msg); |
|||
this.automaticData = result.data; |
|||
} else { |
|||
console.log("没有情报板,不调用接口"); |
|||
this.automaticData = {}; |
|||
} |
|||
return this.automaticData; |
|||
}, |
|||
async getBoardOriginal() { |
|||
let url = ""; |
|||
let data = {}; |
|||
let plan = this.info.find((it) => it.planName == this.planName); |
|||
console.log("plan1", plan); |
|||
let action = plan.dcExecuteAction.find( |
|||
(it) => it.actionType == 1 && it.deviceType == 2 |
|||
); |
|||
if (action) { |
|||
if (this.activeName == "-1") { |
|||
//感知 |
|||
url = "/business/plans/warning/board/confirm"; |
|||
data = { |
|||
dcEmergencyPlans: { |
|||
...plan, |
|||
executeAction: action, |
|||
}, |
|||
dcWarning: this.eventFormData, |
|||
}; |
|||
} else { |
|||
//交通 |
|||
url = "/business/plans/event/board/confirm"; |
|||
data = { |
|||
dcEmergencyPlans: { |
|||
...plan, |
|||
executeAction: action, |
|||
}, |
|||
dcEvent: this.eventFormData, |
|||
}; |
|||
} |
|||
const result = await request({ |
|||
url: url, |
|||
method: "post", |
|||
data: data, |
|||
}); |
|||
if (result.code != 200) return Message.error(result?.msg); |
|||
this.boardOriginalData = result.data; |
|||
} else { |
|||
console.log("没有情报板,不调用接口"); |
|||
this.boardOriginalData = {}; |
|||
} |
|||
return this.boardOriginalData; |
|||
}, |
|||
changeRadio(value) { |
|||
let plan = this.info.find((it) => it.planName == value); |
|||
this.planInfo = plan; |
|||
this.initData(plan); |
|||
}, |
|||
formatData(it, value = 1) { |
|||
let data = { ...it, actionType: value, emergencyPlansId: id }; |
|||
if ( |
|||
it.deviceList && |
|||
typeof it.deviceList !== "string" && |
|||
it.deviceList.length > 0 |
|||
) { |
|||
data.deviceList = it.deviceList.join(","); |
|||
} else { |
|||
data.deviceList = ""; |
|||
} |
|||
if (it.content) { |
|||
data.otherConfig = JSON.stringify({ content: it.content }); |
|||
} |
|||
if (it.controlModel) { |
|||
let other = { |
|||
controlModel: it.controlModel, |
|||
controlModelName: inducerModeDic[it.controlModel], |
|||
state: it.state, |
|||
name: inducerWorkTypeDic[it.state], |
|||
}; |
|||
if (it.time && it?.time[0]) { |
|||
other = { |
|||
controlModel: it.controlModel, |
|||
controlModelName: inducerModeDic[it.controlModel], |
|||
state: it.state, |
|||
name: inducerWorkTypeDic[it.state], |
|||
startTime: it.time[0], |
|||
endTime: it.time[1], |
|||
}; |
|||
} |
|||
data.otherConfig = JSON.stringify(other); |
|||
} |
|||
if (it.gzms) { |
|||
data.otherConfig = JSON.stringify({ |
|||
state: it.gzms, |
|||
name: gzmsMap[it.gzms], |
|||
operationDuration: it.operationDuration, |
|||
}); |
|||
} |
|||
return data; |
|||
}, |
|||
handleSubmit(value = 1) { |
|||
// this.submitting = false; |
|||
let plan = { ...this.planInfo }; |
|||
let actions = plan.dcExecuteAction.filter((it) => it.actionType == value); |
|||
plan.dcExecuteAction = actions; |
|||
|
|||
let reqData = { |
|||
operationType: value, //1-执行操作 2-恢复操作 |
|||
dcEmergencyPlans: plan, |
|||
dcEvent: this.eventFormData, |
|||
}; |
|||
|
|||
let url = ""; |
|||
if (this.activeName == "-1") { |
|||
//感知 |
|||
url = "/business/plans/warning/confirm"; |
|||
reqData = { ...reqData, dcWarning: { ...reqData.dcEvent } }; |
|||
} else { |
|||
//交通 |
|||
url = "/business/plans/event/confirm"; |
|||
} |
|||
console.log("reqData", reqData); |
|||
// return; |
|||
request({ |
|||
url: url, |
|||
method: "post", |
|||
data: reqData, |
|||
}) |
|||
.then((result) => { |
|||
if (result.code != 200) return Message.error(result?.msg); |
|||
Message.success("提交成功"); |
|||
this.$emit("close", false); |
|||
setTimeout(() => { |
|||
this.$emit("reInitData", true); |
|||
}, 100); |
|||
}) |
|||
.catch(() => { |
|||
Message.error("提交失败"); |
|||
}) |
|||
.finally(() => { |
|||
this.submitting = false; |
|||
}); |
|||
}, |
|||
handleRestore() {}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.fade-enter-active, |
|||
.fade-leave-active { |
|||
transition: opacity 0.24s; |
|||
} |
|||
|
|||
.fade-enter, |
|||
.fade-leave-to { |
|||
opacity: 0; |
|||
} |
|||
|
|||
.EventAddPlanDialog { |
|||
gap: 9px; |
|||
width: 1280px; |
|||
height: 310px; |
|||
display: flex; |
|||
flex-direction: column; |
|||
|
|||
.first, |
|||
.second, |
|||
.third { |
|||
padding: 5px 10px 8px; |
|||
background-color: #296887; |
|||
margin-bottom: 15px; |
|||
|
|||
.text { |
|||
margin-top: 12px; |
|||
} |
|||
} |
|||
|
|||
.form { |
|||
flex: 1; |
|||
overflow-y: auto; |
|||
} |
|||
|
|||
.footer { |
|||
display: flex; |
|||
justify-content: end; |
|||
gap: 15px; |
|||
} |
|||
|
|||
// .disabledBtn { |
|||
// height: 24px; |
|||
// border-radius: 48px; |
|||
// background: #C9C9C9; |
|||
// padding: 0 24px; |
|||
// color: white !important; |
|||
// display: flex; |
|||
// align-items: center; |
|||
// justify-content: center; |
|||
// } |
|||
} |
|||
</style> |
@ -1,336 +0,0 @@ |
|||
<template> |
|||
<div class="EventDetail"> |
|||
<Table :data="tableData" :show-header="false"> |
|||
<ElTableColumn prop="deviceType" width="160"> |
|||
<template slot-scope="scope"> |
|||
<el-select v-model="scope.row.deviceType" placeholder="请选择设备类型" @change="changeDeviceType"> |
|||
<el-option v-for="item in deviceOptions" :key="item.value" :label="item.label" |
|||
:value="item.value"> |
|||
</el-option> |
|||
</el-select> |
|||
</template> |
|||
</ElTableColumn> |
|||
|
|||
<ElTableColumn prop="searchRule" width="230"> |
|||
<template slot-scope="scope"> |
|||
<div class="plhx"> |
|||
<el-select v-model="scope.row.searchRule" placeholder="检索规则条件"> |
|||
<el-option v-for="item in zyOptions" :key="item.value" :label="item.label" |
|||
:value="item.value"> |
|||
</el-option> |
|||
</el-select> |
|||
|
|||
<el-input-number v-if="scope.row.searchRule == 2 || scope.row.searchRule == 3" |
|||
v-model="scope.row.number" :min="0" :max="9999" style="width: 130px;"></el-input-number> |
|||
<p v-if="scope.row.searchRule == 2 || scope.row.searchRule == 3">个</p> |
|||
|
|||
<el-input-number v-if="scope.row.searchRule == 4" v-model="scope.row.number" :min="0" |
|||
:max="9999" style="width: 130px;"></el-input-number> |
|||
<p v-if="scope.row.searchRule == 4" style="width: 56px;">公里</p> |
|||
</div> |
|||
|
|||
</template> |
|||
</ElTableColumn> |
|||
|
|||
<ElTableColumn prop="deviceList" width="400"> |
|||
<template slot-scope="scope"> |
|||
<div class="mjs"> |
|||
<el-select v-if="scope.row.searchRule == 1" v-model="scope.row.deviceList" placeholder="请选择设备" |
|||
multiple collapse-tags> |
|||
<el-option v-for="item in sbOptions" :key="item.id" :label="item.deviceName" |
|||
:value="item.id"> |
|||
</el-option> |
|||
</el-select> |
|||
<!-- 情报板 --> |
|||
<el-input @click.native="clickQbb(scope.$index)" v-if="scope.row.deviceType == 2" |
|||
placeholder="请选择" v-model="scope.row.qbb" readonly> |
|||
<i slot="suffix" class="el-input__icon el-icon-search"></i> |
|||
</el-input> |
|||
|
|||
<el-select v-if="scope.row.deviceType == 10" v-model="scope.row.gzms" placeholder="工作模式"> |
|||
<el-option v-for="item in gzmsOptions" :key="item.value" :label="item.label" |
|||
:value="item.value"></el-option> |
|||
</el-select> |
|||
<el-input-number v-if="scope.row.deviceType == 10" placeholder="时长(分钟)" |
|||
v-model="scope.row.operationDuration" :min="0" :max="999"></el-input-number> |
|||
|
|||
<el-select v-if="scope.row.deviceType == 12" v-model="scope.row.controlModel" |
|||
placeholder="请选择模式"> |
|||
<el-option label="手动模式" value="00"></el-option> |
|||
<el-option label="自动模式" value="01"></el-option> |
|||
<el-option label="万年历" value="02"></el-option> |
|||
</el-select> |
|||
<el-time-picker v-if="scope.row.controlModel == '01' && scope.row.deviceType == 12" |
|||
v-model="scope.row.time" is-range style="" range-separator="-" placeholder="选择时间" |
|||
value-format="HH:mm" format="HH:mm"> |
|||
</el-time-picker> |
|||
<el-select v-if="scope.row.deviceType == 12" v-model="scope.row.state" placeholder="工作状态"> |
|||
<el-option v-for="item in gzztOptions" :key="item.value" :label="item.label" |
|||
:value="item.value"></el-option> |
|||
</el-select> |
|||
|
|||
<el-input v-if="scope.row.deviceType == 5" v-model="scope.row.content" |
|||
placeholder="请输入发布内容"></el-input> |
|||
|
|||
</div> |
|||
</template> |
|||
</ElTableColumn> |
|||
|
|||
|
|||
<ElTableColumn label="操作" width="100"> |
|||
<template slot-scope="scope"> |
|||
<ElButton class="elButton" icon="el-icon-plus" plain size="mini" |
|||
@click.native="onAdd(scope.row.id)" /> |
|||
<ElButton class="elButton" icon="el-icon-delete" plain size="mini" |
|||
@click.native="onDel(scope.$index)" /> |
|||
</template> |
|||
</ElTableColumn> |
|||
</Table> |
|||
|
|||
<!-- 情报板弹窗 --> |
|||
<QbbDialog :visible="isShowDialog" :info="qbbData" :type="type" @close="onCloseDialog" |
|||
@dialogSubmit="dialogSubmit" /> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import Table from '@screen/components/Table.vue'; |
|||
import Button from '@screen/components/Buttons/Button.vue'; |
|||
import request from "@/utils/request"; |
|||
import QbbDialog from "../qbbDialog/index.vue"; |
|||
import { Message } from 'element-ui' |
|||
import { planDeviceOptions } from "@screen/utils/enum.js"; |
|||
|
|||
|
|||
export default { |
|||
name: 'formTable', |
|||
components: { |
|||
Button, |
|||
Table, |
|||
QbbDialog |
|||
}, |
|||
// model: { |
|||
// prop: 'visible', |
|||
// event: 'update:value' |
|||
// }, |
|||
inject: ['loadData'], |
|||
props: { |
|||
eventType: Number, |
|||
type: Number, |
|||
tableData: { |
|||
type: Array, |
|||
default: () => [{ |
|||
deviceType: 1, |
|||
searchRule: 1, |
|||
qbb: '' |
|||
}] |
|||
} |
|||
}, |
|||
data() { |
|||
return { |
|||
// tableData: [ |
|||
// { |
|||
// deviceType: 1, |
|||
// searchRule: 1, |
|||
// qbb: '安全行驶' |
|||
// } |
|||
// ], |
|||
isShowDialog: false, |
|||
deviceOptions: planDeviceOptions, |
|||
zyOptions: [ |
|||
{ |
|||
value: 1, |
|||
label: '指定设备资源' |
|||
}, |
|||
{ |
|||
value: 2, |
|||
label: '事发上游最近' |
|||
}, |
|||
{ |
|||
value: 3, |
|||
label: '事发下游最近' |
|||
}, |
|||
{ |
|||
value: 4, |
|||
label: '最近公里数' |
|||
}, |
|||
], |
|||
gzztOptions: [ |
|||
{ |
|||
value: "01", |
|||
label: "常亮" |
|||
}, |
|||
{ |
|||
value: "02", |
|||
label: "流水" |
|||
}, |
|||
{ |
|||
value: "03", |
|||
label: "闪烁" |
|||
}, |
|||
{ |
|||
value: "04", |
|||
label: "关闭", |
|||
} |
|||
], |
|||
gzmsOptions: [ |
|||
{ |
|||
value: "SETMD0", |
|||
label: "激光关闭" |
|||
}, |
|||
{ |
|||
value: "SETMD1", |
|||
label: "常亮模式" |
|||
}, |
|||
{ |
|||
value: "SETMD2", |
|||
label: "间隔100ms闪烁模式" |
|||
}, |
|||
{ |
|||
value: "SETMD3", |
|||
label: "间隔200ms闪烁模式", |
|||
}, |
|||
{ |
|||
value: "SETMD4", |
|||
label: "间隔500ms闪烁模式", |
|||
}, |
|||
{ |
|||
value: "SETMD5", |
|||
label: "2次闪烁模式" |
|||
}, |
|||
{ |
|||
value: "SETMD6", |
|||
label: "SOS模式" |
|||
}, |
|||
{ |
|||
value: "SETMD7", |
|||
label: "自定义模式1", |
|||
}, |
|||
{ |
|||
value: "SETMD8", |
|||
label: "自定义模式2", |
|||
}, |
|||
{ |
|||
value: "SETMD9", |
|||
label: "自定义模式3", |
|||
} |
|||
], |
|||
qbbData: {}, |
|||
sbOptions: [], |
|||
deviceType: 1, |
|||
index: 1 |
|||
} |
|||
}, |
|||
async created() { |
|||
let loadData = await this.loadData(1); |
|||
// console.log('aa',loadData) |
|||
this.sbOptions = loadData; |
|||
}, |
|||
methods: { |
|||
initData() { |
|||
// request({ |
|||
// url: `business/device/query?deviceType=2`, |
|||
// method: "get", |
|||
// }).then((result) => { |
|||
// if (result.code != 200) return Message.error(result?.msg); |
|||
// this.sbOptions = result.data; |
|||
|
|||
// }).catch(() => { |
|||
// Message.error("查询可变信息标识失败"); |
|||
// }) |
|||
|
|||
}, |
|||
async changeDeviceType(value) { |
|||
this.deviceType = value; |
|||
console.log('value', value) |
|||
this.sbOptions = await this.loadData(value); |
|||
}, |
|||
onAdd(id) { |
|||
this.tableData.push({ |
|||
deviceType: 1, |
|||
searchRule: 1, |
|||
qbb: '' |
|||
}) |
|||
}, |
|||
onDel(index) { |
|||
if (this.tableData.length <= 1) { |
|||
return Message.warning('最后一项不可删除!'); |
|||
} |
|||
this.tableData.splice(index, 1) |
|||
}, |
|||
clickQbb(index) { |
|||
this.index = index; |
|||
// this.qbbData = this.tableData[index].dcInfoBoardTemplate; |
|||
console.log('this.type', this.type) |
|||
this.isShowDialog = true; |
|||
}, |
|||
onCloseDialog() { |
|||
this.isShowDialog = false; |
|||
}, |
|||
dialogSubmit(data) { |
|||
this.tableData[this.index].qbb = data.content; |
|||
this.tableData[this.index].otherConfig = JSON.stringify(data); |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.EventDetail { |
|||
display: flex; |
|||
gap: 9px; |
|||
width: 100%; |
|||
// height: 768px; |
|||
min-height: 50px; |
|||
margin-top: 5px; |
|||
flex-direction: column; |
|||
|
|||
::v-deep { |
|||
.el-table .el-table__cell { |
|||
padding: 0 5px; |
|||
} |
|||
} |
|||
|
|||
.mjs { |
|||
display: flex; |
|||
|
|||
>div { |
|||
margin-right: 10px; |
|||
} |
|||
} |
|||
|
|||
.ms { |
|||
width: 160px; |
|||
} |
|||
|
|||
.plhx { |
|||
display: flex; |
|||
} |
|||
|
|||
::v-deep { |
|||
.el-tag.el-tag--info { |
|||
max-width: 100px; |
|||
} |
|||
|
|||
.el-range-editor--medium .el-range__icon, |
|||
.el-range-editor--medium .el-range__close-icon { |
|||
display: none; |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
.elButton { |
|||
background: #2ba8c3; |
|||
border-radius: 2px 2px 2px 2px; |
|||
color: #FFFFFF; |
|||
} |
|||
|
|||
.elButton:hover, |
|||
.elButton:focus { |
|||
background: #2ba8c3; |
|||
border-radius: 2px 2px 2px 2px; |
|||
border-color: #FFFFFF; |
|||
color: #FFFFFF; |
|||
} |
|||
</style> |
@ -1,381 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
|
|||
|
|||
<Dialog v-model="modelVisible" title="情报板确认"> |
|||
<div v-if="type == 1" class="EventAddPlanDialog"> |
|||
<h4>预案内容</h4> |
|||
<dev class="listBox disPid"> |
|||
<div class="tplItem"> |
|||
<BoardTplPreview class="boardPreview" boardWH="1400*200" :tpl="automaticData"></BoardTplPreview> |
|||
<div class="infoBtnBox infoBtnBoxSm"> |
|||
<p class="btn"> |
|||
<el-radio v-model="radio1" :label="1" @input="changeRadio(automaticData)" /> |
|||
</p> |
|||
<!-- <p @click="____onEditTemplate(automaticData)" class="btn btnEdit" /> --> |
|||
</div> |
|||
</div> |
|||
</dev> |
|||
<h4>自动生成</h4> |
|||
<dev class="listBox disPid"> |
|||
<div class="tplItem"> |
|||
<BoardTplPreview class="boardPreview" boardWH="1400*200" :tpl="automaticData"></BoardTplPreview> |
|||
<div class="infoBtnBox infoBtnBoxSm"> |
|||
<p class="btn"> |
|||
<el-radio v-model="radio1" :label="2" @input="changeRadio(automaticData)" /> |
|||
</p> |
|||
<!-- <p @click="____onEditTemplate(automaticData)" class="btn btnEdit" /> --> |
|||
</div> |
|||
</div> |
|||
</dev> |
|||
<h4>情报板模版</h4> |
|||
<vuescroll :ops="scrollOptions" class="listBox"> |
|||
<div v-for="(item) in templateAvailable" :key="item.dictValue"> |
|||
<h5>{{ item.dictLabel }}</h5> |
|||
<div v-for="(itm, indx) in item.list" :key="indx" class="tplItem"> |
|||
<BoardTplPreview class="boardPreview" boardWH="1400*200" :tpl="itm"></BoardTplPreview> |
|||
<div class="infoBtnBox infoBtnBoxSm"> |
|||
<!-- <p class="btn"> |
|||
<el-radio v-model="radio1" :label="itm.id" @input="changeRadio(itm)" /> |
|||
</p> --> |
|||
<p @click="____onEditTemplate(itm)" class="btn btnEdit" /> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</vuescroll> |
|||
</div> |
|||
<div v-if="type == 2" class="EventAddPlanDialog"> |
|||
<div v-for="(item, index) in Object.keys(originalData)" :key="index"> |
|||
<h4>{{ item }}</h4> |
|||
<dev class="listBox disPid"> |
|||
<div v-for="(it, idx) in originalData[item]" :key="idx" class="tplItem"> |
|||
<BoardTplPreview class="boardPreview" boardWH="1400*200" :tpl="it"></BoardTplPreview> |
|||
</div> |
|||
</dev> |
|||
</div> |
|||
|
|||
</div> |
|||
<template #footer v-if="type == 1"> |
|||
<Button style="background: #C9C9C9;padding:0 24px;" |
|||
@click.native="modelVisible = false, submitting = false">取消</Button> |
|||
<Button style="padding:0 24px;" @click.native="handleSubmit" :loading="submitting">确认</Button> |
|||
</template> |
|||
</Dialog> |
|||
|
|||
<BoardInfoEditor @afterSubmit="____onEditSubmit" :mode="editDialog.mode" :type="editDialog.type" |
|||
:visible.sync="editDialog.visible" :screenSize="selectedSize" :tpl="editDialog.tpl"></BoardInfoEditor> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import vuescroll from "vuescroll"; |
|||
import scrollOptions from "@/common/scrollbar.js"; |
|||
import BoardTplPreview from "@screen/components/infoBoard/BoardTplPreview.vue"; |
|||
import BoardInfoEditor from "@screen/components/infoBoard/BoardInfoEditor"; |
|||
import Dialog from "@screen/components/Dialog/index"; |
|||
import Button from '@screen/components/Buttons/Button.vue'; |
|||
import { getTemplateList } from "@/api/board/template"; |
|||
|
|||
export default { |
|||
name: 'qbbDialog', |
|||
components: { |
|||
Dialog, |
|||
Button, |
|||
vuescroll, |
|||
BoardTplPreview, |
|||
BoardInfoEditor |
|||
}, |
|||
model: { |
|||
prop: 'visible', |
|||
event: 'close' |
|||
}, |
|||
inject: ['getAutomatic', 'getOriginal'], |
|||
props: { |
|||
visible: Boolean, |
|||
type: { |
|||
type: Number, |
|||
default: 1 |
|||
}, |
|||
info: { |
|||
type: Object, |
|||
default: () => { } |
|||
} |
|||
}, |
|||
data() { |
|||
return { |
|||
submitting: false, |
|||
selectedSize: "", |
|||
scrollOptions, |
|||
templateAvailable: null, |
|||
tplCategory: [], |
|||
templateAll: [], |
|||
radio1: '', |
|||
itmData: {}, |
|||
automaticData: {}, |
|||
originalData: {}, |
|||
editDialog: { |
|||
mode: "", |
|||
type: "", |
|||
visible: false, |
|||
tpl: {}, |
|||
}, |
|||
} |
|||
}, |
|||
mounted() { |
|||
if (this.type == 1) { |
|||
this.initData(); |
|||
} else if (this.type == 2) { |
|||
this.getBoardOriginal(); |
|||
} |
|||
}, |
|||
computed: { |
|||
modelVisible: { |
|||
get() { |
|||
// if (this.visible2) { |
|||
// if (this.info && this.info.id) { |
|||
// this.radio1 = Number(this.info.id); |
|||
// } |
|||
// console.log('123', this.getTemplateAutomatic()); |
|||
// } |
|||
return this.visible; |
|||
}, |
|||
set(val) { |
|||
this.$emit('close', val) |
|||
} |
|||
}, |
|||
}, |
|||
methods: { |
|||
initData() { |
|||
if (this.tplCategory.length && this.templateAll.length) { |
|||
this.____setAvailableTemplate(); |
|||
} else { |
|||
Promise.all([ |
|||
this.____getTemplateCategory(), |
|||
this.____getAllTemplate(), |
|||
]).then((res) => { |
|||
this.____setAvailableTemplate(); |
|||
}); |
|||
this.getTemplateAutomatic(); |
|||
} |
|||
|
|||
}, |
|||
// 获取信息模板分类 |
|||
____getTemplateCategory() { |
|||
return this.getDicts("iot_template_category").then((res) => { |
|||
this.tplCategory = res.data; |
|||
}); |
|||
}, |
|||
//获取全部模版 |
|||
____getAllTemplate() { |
|||
return getTemplateList().then((res) => { |
|||
this.templateAll = res.data; |
|||
}); |
|||
}, |
|||
// 设置当前设备可用的模板 |
|||
____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) { |
|||
temp.push(tpl); |
|||
} |
|||
}); |
|||
if (temp.length > 0) { |
|||
this.templateAvailable.push({ |
|||
...item, |
|||
list: temp, |
|||
}); |
|||
} |
|||
} |
|||
}); |
|||
}, |
|||
____onEditTemplate(tpl) { |
|||
this.editDialog = { |
|||
visible: true, |
|||
mode: "edit", |
|||
type: "template", |
|||
tpl, |
|||
}; |
|||
}, |
|||
//提交之后的回调 |
|||
____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(_.cloneDeep(para.data)); |
|||
} |
|||
} else if (para.mode == "toDevice") { |
|||
this.selectedBdMsg.push(_.cloneDeep(para.data)); |
|||
} else { |
|||
this.____refreshPageData(para); |
|||
} |
|||
}, |
|||
____refreshPageData(para) { |
|||
if (para.type == "template") { |
|||
this.____getAllTemplate().then((res) => { |
|||
this.____setAvailableTemplate(); |
|||
}); |
|||
} else { |
|||
} |
|||
}, |
|||
async getTemplateAutomatic() { |
|||
let data = await this.getAutomatic(); |
|||
console.log('dataaaa', data); |
|||
this.automaticData = data; |
|||
}, |
|||
async getBoardOriginal() { |
|||
let data = await this.getOriginal(); |
|||
console.log('datbbbbb', data); |
|||
this.originalData = data; |
|||
}, |
|||
changeRadio(data) { |
|||
this.itmData = data; |
|||
}, |
|||
handleSubmit() { |
|||
this.modelVisible = false; |
|||
this.$emit('dialogSubmit', this.itmData); |
|||
} |
|||
|
|||
|
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.listBox { |
|||
padding: 20px; |
|||
|
|||
.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 { |
|||
&.infoBtnBoxSm { |
|||
width: 60px; |
|||
} |
|||
|
|||
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: 15px; |
|||
height: 30px; |
|||
|
|||
&.btnApply { |
|||
background-image: url(~@/assets/jihe/images/button/toLeft.svg); |
|||
} |
|||
|
|||
&.btnEdit { |
|||
background-image: url(~@/assets/jihe/images/button/edit.svg); |
|||
} |
|||
|
|||
&.btnDelete { |
|||
background-image: url(~@/assets/jihe/images/button/delete.svg); |
|||
} |
|||
} |
|||
|
|||
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; |
|||
} |
|||
} |
|||
|
|||
.disPid { |
|||
padding: 0 20px !important; |
|||
} |
|||
|
|||
.fade-enter-active, |
|||
.fade-leave-active { |
|||
transition: opacity .24s; |
|||
} |
|||
|
|||
.fade-enter, |
|||
.fade-leave-to { |
|||
opacity: 0; |
|||
} |
|||
|
|||
.EventAddPlanDialog { |
|||
gap: 9px; |
|||
width: 650px; |
|||
height: 700px; |
|||
display: flex; |
|||
flex-direction: column; |
|||
|
|||
h4 { |
|||
margin: 0 0 5px 0; |
|||
} |
|||
|
|||
::v-deep { |
|||
.el-radio__label { |
|||
display: none; |
|||
} |
|||
} |
|||
|
|||
.form { |
|||
flex: 1; |
|||
overflow-y: auto; |
|||
} |
|||
|
|||
.footer { |
|||
display: flex; |
|||
justify-content: end; |
|||
gap: 15px; |
|||
} |
|||
} |
|||
</style> |