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