qingzhengli
7 months ago
7 changed files with 343 additions and 248 deletions
@ -0,0 +1,307 @@ |
|||||
|
<template> |
||||
|
<div class="DeviceControlDialog" :style="{ |
||||
|
|
||||
|
'margin-top': isMultiControl ? '15px' : undefined, |
||||
|
'width': isMultiControl ? '100%' : undefined, |
||||
|
}"> |
||||
|
<Form v-model="formData" class="form" ref="FormConfigRef" :formList="formList" column="1" labelWidth="120px" /> |
||||
|
|
||||
|
<div class="tips" v-if="formData.controlType === '01'"> |
||||
|
说明: 定时控制模式下,诱导灯在开始时间自动打开,结束时间自动关闭 |
||||
|
</div> |
||||
|
<div class="tips" v-if="formData.controlType === '02'"> |
||||
|
说明: 万年历自动模式下,诱导灯在白天会自动关闭,夜晚会自动打开 |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
|
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import Dialog from "@screen/components/Dialog/index.vue"; |
||||
|
import Button from "@screen/components/Buttons/Button.vue"; |
||||
|
import Form from "@screen/components/FormConfig"; |
||||
|
|
||||
|
import { cloneDeep } from "lodash"; |
||||
|
import { delay } from "@screen/utils/common.js"; |
||||
|
import request from "@/utils/request"; |
||||
|
|
||||
|
import { Message } from "element-ui"; |
||||
|
// import { axiosIns } from "@screen/utils/axios/auth.js"; |
||||
|
import { handle3CResult } from "@screen/utils/deviceControl.js"; |
||||
|
import { batchFunctions } from "@screen/pages/Home/components/RoadAndEvents/utils/httpList.js"; |
||||
|
import { multiResultShow } from "@screen/utils/common"; |
||||
|
|
||||
|
const workStatus = [ |
||||
|
{ |
||||
|
key: "00", |
||||
|
label: "不更新状态", |
||||
|
disabled: false, |
||||
|
}, |
||||
|
{ |
||||
|
key: "01", |
||||
|
label: "常亮", |
||||
|
}, |
||||
|
{ |
||||
|
key: "02", |
||||
|
label: "流水", |
||||
|
}, |
||||
|
{ |
||||
|
key: "03", |
||||
|
label: "闪烁", |
||||
|
}, |
||||
|
{ |
||||
|
key: "04", |
||||
|
label: "关闭", |
||||
|
disabled: false, |
||||
|
}, |
||||
|
]; |
||||
|
|
||||
|
export default { |
||||
|
name: "DeviceControlDialog", |
||||
|
components: { |
||||
|
Dialog, |
||||
|
Button, |
||||
|
Form, |
||||
|
}, |
||||
|
model: { |
||||
|
prop: "visible", |
||||
|
event: "update:value", |
||||
|
}, |
||||
|
props: { |
||||
|
visible: Boolean, |
||||
|
deviceId: String, |
||||
|
id: String, |
||||
|
deviceType: String, |
||||
|
isMultiControl: Boolean, |
||||
|
selectItems: { |
||||
|
type: Array, |
||||
|
default: () => [] |
||||
|
} |
||||
|
}, |
||||
|
inject: ["requestURL"], |
||||
|
data() { |
||||
|
return { |
||||
|
formData: {}, |
||||
|
formList: [ |
||||
|
{ |
||||
|
label: "类型:", |
||||
|
key: "controlType", |
||||
|
type: "RadioGroup", |
||||
|
default: "00", |
||||
|
ons: { |
||||
|
input: (value, { data }) => { |
||||
|
const oldFormData = this.oldFormData; |
||||
|
if (!oldFormData) return; |
||||
|
|
||||
|
this.formList[1].options.options.splice(-1, 1, { |
||||
|
...workStatus.slice(-1)[0], |
||||
|
disabled: value != "00", |
||||
|
}); |
||||
|
|
||||
|
this.formList[1].options.options.splice(0, 1, { |
||||
|
...workStatus[0], |
||||
|
disabled: value != "00", |
||||
|
}); |
||||
|
|
||||
|
switch (value) { |
||||
|
case "01": |
||||
|
if (["04", "00"].includes(data.onWorkStatus)) |
||||
|
data.onWorkStatus = null; |
||||
|
if (["04", "00"].includes(data.inWorkStatus)) |
||||
|
data.inWorkStatus = null; |
||||
|
|
||||
|
Array.isArray(oldFormData.displayTime) && |
||||
|
(data.displayTime = [...oldFormData.displayTime]); |
||||
|
break; |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
options: { |
||||
|
type: "circle", |
||||
|
options: [ |
||||
|
{ |
||||
|
key: "00", |
||||
|
label: "手动控制", |
||||
|
}, |
||||
|
{ |
||||
|
key: "01", |
||||
|
label: "自动控制", |
||||
|
}, |
||||
|
{ |
||||
|
key: "02", |
||||
|
label: "万年历", |
||||
|
}, |
||||
|
], |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
label: "上行工作状态:", |
||||
|
key: "onWorkStatus", |
||||
|
required: true, |
||||
|
type: "select", |
||||
|
options: { |
||||
|
placeholder: "请选择", |
||||
|
options: workStatus, |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
label: "下行工作状态:", |
||||
|
key: "inWorkStatus", |
||||
|
required: true, |
||||
|
type: "select", |
||||
|
options: { |
||||
|
placeholder: "请选择", |
||||
|
options: workStatus, |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
label: "选择时间:", |
||||
|
key: "displayTime", |
||||
|
type: "timePicker", |
||||
|
required: true, |
||||
|
visible: (data) => data.controlType == "01", |
||||
|
options: { |
||||
|
isRange: true, |
||||
|
rangeSeparator: "至", |
||||
|
valueFormat: "HH:mm", |
||||
|
startPlaceholder: "开始时间", |
||||
|
endPlaceholder: "结束时间", |
||||
|
}, |
||||
|
}, |
||||
|
], |
||||
|
}; |
||||
|
}, |
||||
|
mounted() { |
||||
|
this.$emit("update:submitting", false); |
||||
|
if (!this.isMultiControl) |
||||
|
this.reDisplay(); |
||||
|
}, |
||||
|
methods: { |
||||
|
reDisplay() { |
||||
|
console.log(this.requestURL) |
||||
|
this.requestURL().then(async (data) => { |
||||
|
await delay(0); |
||||
|
const formData = this.$refs.FormConfigRef?.formData; |
||||
|
|
||||
|
formData.controlType = data.mode; |
||||
|
|
||||
|
await handle3CResult(data, formData, this.requestURL); |
||||
|
|
||||
|
this.oldFormData = { ...formData }; |
||||
|
}); |
||||
|
}, |
||||
|
handleSubmit() { |
||||
|
const result = {}, |
||||
|
formData = this.$refs.FormConfigRef?.formData; |
||||
|
|
||||
|
result.mode = formData.controlType; |
||||
|
|
||||
|
delete result.controlType; |
||||
|
|
||||
|
if (result.mode === "01") { |
||||
|
if (!formData.displayTime?.length) |
||||
|
return Message.error(`时间不能为空!`); |
||||
|
} |
||||
|
|
||||
|
if (!formData.onWorkStatus || !formData.inWorkStatus) |
||||
|
return Message.error(`工作状态不能为空!`); |
||||
|
|
||||
|
if (["01", "02"].includes(result.mode)) { |
||||
|
if (["04", "00"].includes(formData.onWorkStatus)) |
||||
|
return Message.error(`上行工作状态不能选择当前类型!`); |
||||
|
if (["04", "00"].includes(formData.inWorkStatus)) |
||||
|
return Message.error(`下行工作状态不能选择当前类型!`); |
||||
|
} |
||||
|
if (this.isMultiControl && !this.selectItems.length) { |
||||
|
return Message.error("请至少选择一个设备!"); |
||||
|
} |
||||
|
const selectItems = this.selectItems.map(item => JSON.parse(item)); |
||||
|
|
||||
|
result.onWorkStatus = formData.onWorkStatus; |
||||
|
result.inWorkStatus = formData.inWorkStatus; |
||||
|
|
||||
|
this.$emit("update:submitting", true); |
||||
|
|
||||
|
let devices; |
||||
|
if (this.isMultiControl) devices = selectItems; |
||||
|
else devices = [{ |
||||
|
iotDeviceId: this.deviceId, |
||||
|
id: this.id, |
||||
|
deviceType: this.deviceType |
||||
|
}] |
||||
|
const functions = []; |
||||
|
/** |
||||
|
* 接口 地址 |
||||
|
* |
||||
|
* https://www.showdoc.com.cn/2450725213006196/10877717880262686 |
||||
|
*/ |
||||
|
let promise = []; |
||||
|
|
||||
|
switch (result.mode) { |
||||
|
case "00": |
||||
|
// promise.push(this.requestURL("51", result)); |
||||
|
functions.push({ "functionId": "51", "params": result }) |
||||
|
break; |
||||
|
case "01": |
||||
|
case "02": |
||||
|
const options = { mode: result.mode }; |
||||
|
|
||||
|
if (result.mode === "01") { |
||||
|
options.startDisplayTime = formData.displayTime[0]; |
||||
|
options.endDisplayTime = formData.displayTime[1]; |
||||
|
} |
||||
|
functions.push({ |
||||
|
"functionId": "30", "params": { |
||||
|
onWorkStatus: result.onWorkStatus, |
||||
|
inWorkStatus: result.inWorkStatus, |
||||
|
} |
||||
|
}, |
||||
|
{ "functionId": "51", "params": options }) |
||||
|
// promise.push( |
||||
|
// this.requestURL("30", { |
||||
|
// onWorkStatus: result.onWorkStatus, |
||||
|
// inWorkStatus: result.inWorkStatus, |
||||
|
// }), |
||||
|
// this.requestURL("51", options) |
||||
|
// ); |
||||
|
break; |
||||
|
} |
||||
|
batchFunctions({ |
||||
|
devices: devices, |
||||
|
functions: functions |
||||
|
}) |
||||
|
// Promise.all(promise) |
||||
|
.then(() => { |
||||
|
this.$emit("update:value", false); // this.modelVisible = false; |
||||
|
Message.success(`操作成功`); |
||||
|
}) |
||||
|
.catch((err) => { |
||||
|
console.log( |
||||
|
"%c [ err ]-110-「DeviceControlDialog.vue」", |
||||
|
"font-size:15px; background:#547bf2; color:#98bfff;", |
||||
|
err |
||||
|
); |
||||
|
Message.error(`设备操作失败!`); |
||||
|
}) |
||||
|
.finally(() => { |
||||
|
this.$emit("update:submitting", false); |
||||
|
}); |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
.DeviceControlDialog { |
||||
|
width: 450px; |
||||
|
height: 210px; |
||||
|
display: flex; |
||||
|
flex-direction: column; |
||||
|
gap: 15px; |
||||
|
|
||||
|
.tips { |
||||
|
font-size: 12px; |
||||
|
} |
||||
|
} |
||||
|
</style> |
Loading…
Reference in new issue