index.vue
3.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<template>
<div>
<Form
ref="formRef"
:model="scriptForm"
name="basic"
:label-col="{ span: 4 }"
:wrapper-col="{ span: 16 }"
autocomplete="off"
style="margin-left: 2.4rem"
>
<Form.Item
label="类型"
:rules="[{ required: true, message: '请选择鉴权脚本' }]"
:wrapper-col="{ span: 10 }"
>
<Select
v-model:value="scriptForm.protocol"
:options="typeOptions"
:disabled="protocolStatus"
/>
</Form.Item>
<Form.Item
v-if="
scriptForm.protocol === TCPProtocolTypeEnum.CUSTOM && deviceTypeStr !== TypeEnum.SENSOR
"
label="鉴权脚本"
name="authScriptId"
:rules="[{ required: true, message: '请选择鉴权脚本' }]"
>
<ScriptSelectItem
ref="scriptSelectItemAuthRef"
v-model:value="scriptForm.authScriptId"
:scriptType="ScriptTypeEnum.TRANSPORT_TCP_AUTH"
/>
</Form.Item>
<Form.Item
v-if="scriptForm.protocol === TCPProtocolTypeEnum.CUSTOM"
label="上行脚本"
name="upScriptId"
:rules="[{ required: true, message: '请选择上行脚本' }]"
>
<ScriptSelectItem
ref="scriptSelectItemUpRef"
v-model:value="scriptForm.upScriptId"
:scriptType="ScriptTypeEnum.TRANSPORT_TCP_UP"
/>
</Form.Item>
</Form>
</div>
</template>
<script lang="ts" setup name="index">
import { reactive, ref } from 'vue';
import { Form, Select } from 'ant-design-vue';
import { useMessage } from '/@/hooks/web/useMessage';
import { ScriptSelectItem } from './components';
import { ScriptTypeEnum } from '/@/views/rule/script/TcpConversionScript/config';
import { TypeEnum } from '/@/views/device/list/config/data';
import { TCPProtocolTypeEnum, TCPProtocolTypeNameEnum } from '/@/enums/deviceEnum';
const props = defineProps({
deviceTypeStr: { type: String, default: '' },
});
const typeOptions = Object.keys(TCPProtocolTypeEnum).map((key) => ({
label: TCPProtocolTypeNameEnum[key],
value: TCPProtocolTypeEnum[key],
}));
const scriptForm = reactive({
authScriptId: '',
upScriptId: '',
protocol: TCPProtocolTypeEnum.MODBUS_RTU,
});
const { createMessage } = useMessage();
const scriptSelectItemAuthRef = ref<InstanceType<typeof ScriptSelectItem>>();
const scriptSelectItemUpRef = ref<InstanceType<typeof ScriptSelectItem>>();
const getFormData = async () => {
scriptForm.authScriptId = scriptSelectItemAuthRef.value?.getValue();
scriptForm.upScriptId = scriptSelectItemUpRef.value?.getValue();
//业务 网关子设备没有鉴权脚本
if (scriptForm.protocol === TCPProtocolTypeEnum.CUSTOM) {
if (props.deviceTypeStr === TypeEnum.SENSOR)
Reflect.deleteProperty(scriptForm, 'authScriptId');
if (Object.values(scriptForm).some((item) => !item)) {
createMessage.error('请先选择对应脚本');
throw new Error('请先选择对应脚本');
}
}
return {
...scriptForm,
type: 'TCP',
};
};
const resetFormData = () => {};
const setFormData = (data) => {
scriptForm.protocol = data?.protocol;
scriptForm.authScriptId = data?.authScriptId;
scriptForm.upScriptId = data?.upScriptId;
scriptSelectItemAuthRef.value?.setValue(data?.authScriptId);
scriptSelectItemUpRef.value?.setValue(data?.upScriptId);
};
const protocolStatus = ref(false);
const setProtocolStatus = (flag: boolean) => {
protocolStatus.value = flag;
};
defineExpose({
getFormData,
resetFormData,
setFormData,
setProtocolStatus,
});
</script>
<style lang="less" scoped></style>