qingzhengli
7 months ago
5 changed files with 450 additions and 373 deletions
@ -0,0 +1,421 @@ |
|||
<template> |
|||
<div :style="{ |
|||
'max-height': isMultiControl ? '250px' : undefined, 'overflow-y': isMultiControl ? 'auto' : undefined, |
|||
'margin-left': isMultiControl ? '14px' : undefined |
|||
}"> |
|||
<ElTabs v-model="activeName" class="tabs" @tab-click="tabClick"> |
|||
<ElTabPane label="一般模式" name="first"> |
|||
<Form v-model="formData" class="form" ref="FormConfigRef" :formList="formList1" column="1" labelWidth="120px" /> |
|||
</ElTabPane> |
|||
<ElTabPane label="自定义模式" name="second"> |
|||
<!-- <div style="display: flex; margin: 20px 0"> |
|||
<p style="width: 115px">工作时长(分):</p> |
|||
<el-input-number v-model="onWorkStatus2" :min="0" :max="999" label="工作时长(s分):"></el-input-number> |
|||
</div> --> |
|||
<Table :data="tableData"> |
|||
<ElTableColumn prop="ds" label="段数"></ElTableColumn> |
|||
|
|||
<ElTableColumn prop="time" width="120" label="时间(毫秒)"> |
|||
<template slot-scope="scope"> |
|||
<div style="display: flex"> |
|||
<el-input-number style="width: 120px" v-model="scope.row.time" :min="0"></el-input-number> |
|||
</div> |
|||
</template> |
|||
</ElTableColumn> |
|||
|
|||
<ElTableColumn prop="A" label="线路A"> |
|||
<template slot-scope="scope"> |
|||
<el-switch active-value="1" inactive-value="0" v-model="scope.row.A" active-color="#13ce66" |
|||
inactive-color="#C9C9C9"> |
|||
</el-switch> |
|||
</template> |
|||
</ElTableColumn> |
|||
<ElTableColumn prop="B" label="线路B"> |
|||
<template slot-scope="scope"> |
|||
<el-switch active-value="1" inactive-value="0" v-model="scope.row.B" active-color="#13ce66" |
|||
inactive-color="#C9C9C9"> |
|||
</el-switch> |
|||
</template> |
|||
</ElTableColumn> |
|||
<ElTableColumn prop="C" label="线路C"> |
|||
<template slot-scope="scope"> |
|||
<el-switch active-value="1" inactive-value="0" v-model="scope.row.C" active-color="#13ce66" |
|||
inactive-color="#C9C9C9"> |
|||
</el-switch> |
|||
</template> |
|||
</ElTableColumn> |
|||
<ElTableColumn prop="D" label="线路D"> |
|||
<template slot-scope="scope"> |
|||
<el-switch active-value="1" inactive-value="0" v-model="scope.row.D" active-color="#13ce66" |
|||
inactive-color="#C9C9C9"> |
|||
</el-switch> |
|||
</template> |
|||
</ElTableColumn> |
|||
<ElTableColumn prop="E" label="线路E"> |
|||
<template slot-scope="scope"> |
|||
<el-switch active-value="1" inactive-value="0" v-model="scope.row.E" active-color="#13ce66" |
|||
inactive-color="#C9C9C9"> |
|||
</el-switch> |
|||
</template> |
|||
</ElTableColumn> |
|||
<ElTableColumn prop="F" label="线路F"> |
|||
<template slot-scope="scope"> |
|||
<el-switch active-value="1" inactive-value="0" v-model="scope.row.F" active-color="#13ce66" |
|||
inactive-color="#C9C9C9"> |
|||
</el-switch> |
|||
</template> |
|||
</ElTableColumn> |
|||
<ElTableColumn prop="G" label="线路G"> |
|||
<template slot-scope="scope"> |
|||
<el-switch active-value="1" inactive-value="0" v-model="scope.row.G" active-color="#13ce66" |
|||
inactive-color="#C9C9C9"> |
|||
</el-switch> |
|||
</template> |
|||
</ElTableColumn> |
|||
<ElTableColumn prop="H" label="线路H"> |
|||
<template slot-scope="scope"> |
|||
<el-switch active-value="1" inactive-value="0" v-model="scope.row.H" active-color="#13ce66" |
|||
inactive-color="#C9C9C9"> |
|||
</el-switch> |
|||
</template> |
|||
</ElTableColumn> |
|||
</Table> |
|||
</ElTabPane> |
|||
</ElTabs> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import Table from "@screen/components/Table.vue"; |
|||
import Dialog from "@screen/components/Dialog/index.vue"; |
|||
import Button from "@screen/components/Buttons/Button.vue"; |
|||
import Form from "@screen/components/FormConfig"; |
|||
import request from "@/utils/request"; |
|||
import { Message } from "element-ui"; |
|||
import { batchFunctions } from "@screen/pages/Home/components/RoadAndEvents/utils/httpList.js"; |
|||
import { multiResultShow } from "@screen/utils/common"; |
|||
export default { |
|||
name: "DeviceControlDialog", |
|||
components: { |
|||
Dialog, |
|||
Button, |
|||
Form, |
|||
Table, |
|||
}, |
|||
model: { |
|||
prop: "visible", |
|||
event: "update:value", |
|||
}, |
|||
props: { |
|||
visible: Boolean, |
|||
deviceId: String, |
|||
productId: String, |
|||
isMultiControl: Boolean, |
|||
selectItems: { |
|||
type: Array, |
|||
default: () => [] |
|||
} |
|||
}, |
|||
data() { |
|||
return { |
|||
submitting: false, |
|||
activeName: "first", |
|||
onWorkStatus2: 0, |
|||
formData: {}, |
|||
duan: [ |
|||
"A", |
|||
"B", |
|||
"C", |
|||
"D", |
|||
"E", |
|||
"F", |
|||
"G", |
|||
"H", |
|||
"I", |
|||
"J", |
|||
"K", |
|||
"L", |
|||
"M", |
|||
"N", |
|||
"O", |
|||
"P", |
|||
"Q", |
|||
"R", |
|||
"S", |
|||
"T", |
|||
], |
|||
tableData: [ |
|||
// { |
|||
// ds: 'A', |
|||
// time: 0, |
|||
// A: false, |
|||
// B: false, |
|||
// C: false, |
|||
// D: false, |
|||
// E: false, |
|||
// F: false, |
|||
// G: false, |
|||
// H: false, |
|||
// } |
|||
], |
|||
formList1: [ |
|||
{ |
|||
label: "工作模式:", |
|||
key: "controlType", |
|||
type: "select", |
|||
default: "1", |
|||
options: { |
|||
options: [ |
|||
{ |
|||
value: "0", |
|||
label: "激光关闭", |
|||
}, |
|||
{ |
|||
value: "1", |
|||
label: "常亮模式", |
|||
}, |
|||
{ |
|||
value: "2", |
|||
label: "间隔100ms闪烁模式", |
|||
}, |
|||
{ |
|||
value: "3", |
|||
label: "间隔200ms闪烁模式", |
|||
}, |
|||
{ |
|||
value: "4", |
|||
label: "间隔500ms闪烁模式", |
|||
}, |
|||
{ |
|||
value: "5", |
|||
label: "2次闪烁模式", |
|||
}, |
|||
{ |
|||
value: "6", |
|||
label: "SOS模式", |
|||
}, |
|||
{ |
|||
value: "7", |
|||
label: "自定义模式", |
|||
}, |
|||
], |
|||
}, |
|||
}, |
|||
{ |
|||
label: "工作时长(分):", |
|||
key: "onWorkStatus", |
|||
required: true, |
|||
default: 0, |
|||
type: "inputNumber", |
|||
options: { |
|||
min: 0, |
|||
max: 999, |
|||
}, |
|||
}, |
|||
], |
|||
formList2: [ |
|||
{ |
|||
label: "工作模式:", |
|||
key: "controlType", |
|||
type: "RadioGroup", |
|||
default: "00", |
|||
options: { |
|||
type: "circle", |
|||
options: [ |
|||
{ |
|||
key: "00", |
|||
label: "常量", |
|||
}, |
|||
{ |
|||
key: "01", |
|||
label: "闪烁", |
|||
}, |
|||
], |
|||
}, |
|||
}, |
|||
{ |
|||
label: "线路选择:", |
|||
key: "onWorkStatus2", |
|||
required: true, |
|||
type: "select", |
|||
options: { |
|||
placeholder: "请选择", |
|||
}, |
|||
}, |
|||
{ |
|||
label: "工作时长:", |
|||
key: "onWorkStatus", |
|||
required: true, |
|||
type: "select", |
|||
options: { |
|||
placeholder: "请选择", |
|||
}, |
|||
}, |
|||
], |
|||
rules: { |
|||
onWorkStatus: [ |
|||
{ required: true, message: "工作时长不能为空", trigger: "blur" }, |
|||
], |
|||
}, |
|||
}; |
|||
}, |
|||
mounted() { |
|||
if (!this.isMultiControl) |
|||
this.initData(); |
|||
}, |
|||
methods: { |
|||
async initData() { |
|||
//查询模式 |
|||
let result = await this.requestURL("ASKMD"); |
|||
// if (result.data == 7) { |
|||
// this.activeName = "second"; |
|||
// this.tabClick(); |
|||
// } else { |
|||
this.formData.controlType = result.data + "" || "1"; |
|||
//查询时间 |
|||
let resultTime = await this.requestURL("ASKTM"); |
|||
this.formData.onWorkStatus = resultTime.data || 0; |
|||
this.activeName = "first"; |
|||
// } |
|||
}, |
|||
async requestURL(functionId, options = {}) { |
|||
let result = await request({ |
|||
url: `/business/device/functions/${this.deviceId}/${functionId}`, |
|||
method: "post", |
|||
data: options, |
|||
}); |
|||
if (result.code != 200) return Message.error(result?.msg); |
|||
//模式设定:SETMD;模式查询:ASKMD;时间设定:SETTM;时间查询:ASKTM;自定义设置:SETDF;自定义查询:ASKDF |
|||
return result; |
|||
}, |
|||
async tabClick() { |
|||
if (this.activeName == "second") { |
|||
if (this.isMultiControl) |
|||
this.tableData = this.duan.map(item => { |
|||
return { |
|||
ds: item, |
|||
time: 0, |
|||
A: false, |
|||
B: false, |
|||
C: false, |
|||
D: false, |
|||
E: false, |
|||
F: false, |
|||
G: false, |
|||
H: false, |
|||
} |
|||
}); |
|||
else { |
|||
// 查询自定义模式 |
|||
let result = await request({ |
|||
url: `/business/device/properties/latest/${this.deviceId}`, |
|||
method: "get", |
|||
}); |
|||
if (result.code != 200) return Message.error(result?.msg); |
|||
|
|||
this.tableData = []; |
|||
let tData = []; |
|||
result.data.forEach((item) => { |
|||
if (item.property == "TM") { |
|||
this.onWorkStatus2 = item.value; |
|||
} else if (item.property == "MD") { |
|||
} else { |
|||
let data = JSON.parse(item.formatValue || {}); |
|||
|
|||
tData.push({ ...data, ds: item.property }); |
|||
} |
|||
}); |
|||
tData.sort((a, b) => a.ds.toUpperCase().localeCompare(b.ds.toUpperCase())); |
|||
this.tableData = tData; |
|||
} |
|||
} else { |
|||
if (!this.isMultiControl) { |
|||
//查询时间 |
|||
let resultTime = await this.requestURL("ASKTM"); |
|||
this.formData.onWorkStatus = resultTime.data || 0; |
|||
this.activeName = "first"; |
|||
} |
|||
} |
|||
}, |
|||
async handleSubmit() { |
|||
if (this.isMultiControl && !this.selectItems.length) { |
|||
return Message.error("请至少选择一个疲劳唤醒设备!"); |
|||
} |
|||
const selectItems = this.selectItems.map(item => JSON.parse(item)); |
|||
let devices; |
|||
if (this.isMultiControl) devices = selectItems; |
|||
else devices = [{ |
|||
iotDeviceId: this.deviceId, |
|||
id: this.productId, |
|||
deviceType: 10 |
|||
}] |
|||
if (this.activeName == "first") { |
|||
//一般模式 |
|||
this.$refs.FormConfigRef.validate().then(async (formData) => { |
|||
//设定模式 |
|||
// await this.requestURL("SETMD", { SET: formData.controlType }); |
|||
//设定时长 |
|||
// let res = await this.requestURL("SETTM", { |
|||
// SET: formData.onWorkStatus, |
|||
// }); |
|||
let res = await batchFunctions({ |
|||
devices: devices, |
|||
functions: [ |
|||
{ "functionId": "SETMD", "params": { SET: formData.controlType } },//设定模式 |
|||
{ |
|||
"functionId": "SETTM", "params": { //设定时长 |
|||
SET: formData.onWorkStatus, |
|||
} |
|||
} |
|||
] |
|||
}); |
|||
if (res.code == 200) { |
|||
Message.success("设置成功!"); |
|||
this.$emit("update:value", false); |
|||
} |
|||
}); |
|||
} else if (this.activeName == "second") { |
|||
//自定义模式 |
|||
let rData = []; |
|||
|
|||
this.tableData.forEach((it, index) => { |
|||
rData.push({ |
|||
functionId: "SETDF", |
|||
params: { |
|||
order: 7, |
|||
time: it.time, |
|||
numberOfSegments: it.ds || this.duan[index], |
|||
A: Number(it.A), |
|||
B: Number(it.B), |
|||
C: Number(it.C), |
|||
D: Number(it.D), |
|||
E: Number(it.E), |
|||
F: Number(it.F), |
|||
G: Number(it.G), |
|||
H: Number(it.H), |
|||
} |
|||
}); |
|||
}); |
|||
|
|||
//设定自定义模式 |
|||
let res = await batchFunctions({ |
|||
devices: devices, |
|||
functions: rData |
|||
}); |
|||
if (res.code == 200) { |
|||
Message.success("设置成功!"); |
|||
this.$emit("update:value", false); |
|||
} |
|||
//设定时长 |
|||
// let res = await this.requestURL("SETTM", { SET: this.onWorkStatus2 }); |
|||
// if (res.code == 200) { |
|||
// Message.success("设置成功!"); |
|||
// this.$emit("update:value", false); |
|||
// } |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="scss" scoped></style> |
Loading…
Reference in new issue