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>