Commit f517ac95aa0eebe702aa49fc3b02c8b2ee00be50
Merge branch 'ft' into 'main'
fix:修复设备取消客户不能编辑,fix:修复告警管理批量删除,feat:新增设备列表和设备配置表格图片显示 See merge request huang/yun-teng-iot-front!179
Showing
13 changed files
with
441 additions
and
26 deletions
... | ... | @@ -90,7 +90,7 @@ |
90 | 90 | ContactDrawer, |
91 | 91 | }, |
92 | 92 | setup() { |
93 | - const selectArray: any = ref([]); | |
93 | + let selectArray: any = []; | |
94 | 94 | const hasBatchDelete = ref(true); |
95 | 95 | const searchInfo = reactive<Recordable>({}); |
96 | 96 | const { organizationIdTreeRef, resetFn } = useResetOrganizationTree(searchInfo); |
... | ... | @@ -140,17 +140,20 @@ |
140 | 140 | } |
141 | 141 | }; |
142 | 142 | const useSelectionChange = () => { |
143 | - selectArray.value = getSelectRows() | |
144 | - .filter((f) => f.status !== 1) | |
145 | - .map((m) => m.id); | |
146 | - if (selectArray.value.length > 0) { | |
147 | - hasBatchDelete.value = false; | |
148 | - } else { | |
143 | + let getRows = getSelectRows(); | |
144 | + getRows.forEach((f) => { | |
145 | + if (f.status == 1 && f.status !== 0) { | |
146 | + hasBatchDelete.value = true; | |
147 | + } else if (f.status == 0 && f.status !== 1) { | |
148 | + hasBatchDelete.value = false; | |
149 | + } else if (f.status == 0 && f.status == 1) { | |
150 | + hasBatchDelete.value = true; | |
151 | + } | |
152 | + }); | |
153 | + selectArray = getRows.filter((f) => f.status !== 1).map((m) => m.id); | |
154 | + if (selectArray.length == 0) { | |
149 | 155 | hasBatchDelete.value = true; |
150 | 156 | } |
151 | - // const isJude = getSelectRows().some((s) => { | |
152 | - // if (s.status == 1) return createMessage.error('不能删除已经启用的,请选择未启用的'); | |
153 | - // }); | |
154 | 157 | }; |
155 | 158 | // 删除或批量删除 |
156 | 159 | const handleDeleteOrBatchDelete = async (record: Recordable | null) => { |
... | ... | @@ -160,17 +163,19 @@ |
160 | 163 | createMessage.success('删除成功'); |
161 | 164 | handleSuccess(); |
162 | 165 | } catch (e: any) { |
163 | - createMessage.error(e.msg); | |
166 | + // createMessage.error(e.msg); | |
164 | 167 | } |
165 | 168 | } else { |
166 | 169 | try { |
167 | - await deleteAlarmConfig(selectArray.value); | |
170 | + await deleteAlarmConfig(selectArray); | |
168 | 171 | createMessage.success('批量删除成功'); |
169 | 172 | handleSuccess(); |
170 | - selectArray.value.length = 0; | |
173 | + selectArray.length = 0; | |
171 | 174 | } catch (e: any) { |
172 | - createMessage.error(e.msg); | |
173 | - selectArray.value.length = 0; | |
175 | + // createMessage.error(e.msg); | |
176 | + selectArray.length = 0; | |
177 | + } finally { | |
178 | + selectArray.length = 0; | |
174 | 179 | } |
175 | 180 | } |
176 | 181 | }; | ... | ... |
... | ... | @@ -11,6 +11,12 @@ export const columns: BasicColumn[] = [ |
11 | 11 | width: 120, |
12 | 12 | }, |
13 | 13 | { |
14 | + title: '设备图片', | |
15 | + dataIndex: 'deviceInfo.avatar', | |
16 | + width: 120, | |
17 | + slots: { customRender: 'img' }, | |
18 | + }, | |
19 | + { | |
14 | 20 | title: '设备类型', |
15 | 21 | dataIndex: 'deviceType', |
16 | 22 | width: 100, | ... | ... |
... | ... | @@ -18,6 +18,20 @@ |
18 | 18 | 批量删除 |
19 | 19 | </a-button> |
20 | 20 | </template> |
21 | + <template #img="{ record }"> | |
22 | + <TableImg | |
23 | + :size="30" | |
24 | + :showBadge="false" | |
25 | + :simpleShow="true" | |
26 | + :imgList=" | |
27 | + typeof record.deviceInfo.avatar !== 'undefined' && | |
28 | + record.deviceInfo.avatar !== '' && | |
29 | + record.deviceInfo.avatar != null | |
30 | + ? [record.deviceInfo.avatar] | |
31 | + : null | |
32 | + " | |
33 | + /> | |
34 | + </template> | |
21 | 35 | <template #deviceProfile="{ record }"> |
22 | 36 | <a-button type="link" class="ml-2" @click="goDeviceProfile(record.deviceProfile.name)"> |
23 | 37 | {{ record.deviceProfile.name }} |
... | ... | @@ -83,7 +97,7 @@ |
83 | 97 | { |
84 | 98 | label: '编辑', |
85 | 99 | icon: 'clarity:note-edit-line', |
86 | - ifShow: authBtn(role), | |
100 | + ifShow: authBtn(role) && record.customerId === undefined, | |
87 | 101 | onClick: handleEdit.bind(null, record), |
88 | 102 | }, |
89 | 103 | { |
... | ... | @@ -109,7 +123,7 @@ |
109 | 123 | <script lang="ts"> |
110 | 124 | import { defineComponent, reactive } from 'vue'; |
111 | 125 | import { DeviceState, DeviceTypeEnum } from '/@/api/device/model/deviceModel'; |
112 | - import { BasicTable, useTable, TableAction } from '/@/components/Table'; | |
126 | + import { BasicTable, useTable, TableAction, TableImg } from '/@/components/Table'; | |
113 | 127 | import { columns, searchFormSchema } from './config/device.data'; |
114 | 128 | import { Tag } from 'ant-design-vue'; |
115 | 129 | import { |
... | ... | @@ -145,6 +159,7 @@ |
145 | 159 | DeviceModal, |
146 | 160 | DeviceDetailDrawer, |
147 | 161 | CustomerModal, |
162 | + TableImg, | |
148 | 163 | }, |
149 | 164 | setup(_) { |
150 | 165 | const go = useGo(); | ... | ... |
... | ... | @@ -15,6 +15,18 @@ |
15 | 15 | 批量删除 |
16 | 16 | </a-button> |
17 | 17 | </template> |
18 | + <template #img="{ record }"> | |
19 | + <TableImg | |
20 | + :size="30" | |
21 | + :showBadge="false" | |
22 | + :simpleShow="true" | |
23 | + :imgList=" | |
24 | + typeof record.image !== 'undefined' && record.image !== '' && record.image != null | |
25 | + ? [record.image] | |
26 | + : null | |
27 | + " | |
28 | + /> | |
29 | + </template> | |
18 | 30 | <template #action="{ record }"> |
19 | 31 | <TableAction |
20 | 32 | :actions="[ |
... | ... | @@ -62,8 +74,8 @@ |
62 | 74 | </div> |
63 | 75 | </template> |
64 | 76 | <script lang="ts"> |
65 | - import { defineComponent, ref, reactive, nextTick, onUnmounted } from 'vue'; | |
66 | - import { BasicTable, useTable, TableAction, BasicColumn } from '/@/components/Table'; | |
77 | + import { defineComponent, ref, nextTick, onUnmounted } from 'vue'; | |
78 | + import { BasicTable, TableImg, useTable, TableAction, BasicColumn } from '/@/components/Table'; | |
67 | 79 | import { columns, searchFormSchema } from './device.profile.data'; |
68 | 80 | import { useMessage } from '/@/hooks/web/useMessage'; |
69 | 81 | import { |
... | ... | @@ -78,10 +90,10 @@ |
78 | 90 | |
79 | 91 | export default defineComponent({ |
80 | 92 | name: 'DeviceProfileManagement', |
81 | - components: { BasicTable, DeviceProfileModal, TableAction, ImpExcel }, | |
93 | + components: { BasicTable, DeviceProfileModal, TableAction, ImpExcel, TableImg }, | |
82 | 94 | setup() { |
83 | 95 | const deviceDetailRef = ref(null); |
84 | - let selectedRowKeys: string[] = reactive([]); | |
96 | + let selectedRowKeys: any = []; | |
85 | 97 | const getPathUrl = ref(''); |
86 | 98 | const getPathUrlName = ref(''); |
87 | 99 | const disabled = ref(true); |
... | ... | @@ -90,7 +102,7 @@ |
90 | 102 | const { createMessage } = useMessage(); |
91 | 103 | const [registerModal, { openModal }] = useModal(); |
92 | 104 | const [registerModalDetail] = useModal(); |
93 | - const [registerTable, { reload, getSelectRowKeys, setTableData, getForm }] = useTable({ | |
105 | + const [registerTable, { reload, getSelectRows, setTableData, getForm }] = useTable({ | |
94 | 106 | title: '设备配置列表', |
95 | 107 | clickToRowSelect: false, |
96 | 108 | api: deviceConfigGetQuery, |
... | ... | @@ -212,7 +224,7 @@ |
212 | 224 | }, 10); |
213 | 225 | } |
214 | 226 | const useSelectionChange = () => { |
215 | - selectedRowKeys = getSelectRowKeys(); | |
227 | + selectedRowKeys = getSelectRows(); | |
216 | 228 | if (selectedRowKeys.length > 0) { |
217 | 229 | disabled.value = false; |
218 | 230 | } else { |
... | ... | @@ -220,6 +232,9 @@ |
220 | 232 | } |
221 | 233 | }; |
222 | 234 | async function handleTableDel() { |
235 | + selectedRowKeys = selectedRowKeys | |
236 | + .filter((f: any) => f.default !== true) | |
237 | + .map((m: any) => m.id); | |
223 | 238 | await deviceConfigDelete(selectedRowKeys); |
224 | 239 | createMessage.success('删除成功'); |
225 | 240 | handleSuccess(); | ... | ... |
... | ... | @@ -11,6 +11,9 @@ |
11 | 11 | <div v-else-if="isMqttType == 'LWM2M'"> |
12 | 12 | <Lwm2mCpns ref="lwm2mRef" /> |
13 | 13 | </div> |
14 | + <div v-else-if="isMqttType == 'SNMP1'"> | |
15 | + <SnmpCpns ref="snmpRef" /> | |
16 | + </div> | |
14 | 17 | <div |
15 | 18 | style=" |
16 | 19 | display: flex; |
... | ... | @@ -40,6 +43,7 @@ |
40 | 43 | import MqttCpns from '../step/cpns/mqtt/Mqtt.vue'; |
41 | 44 | import CoapCpns from '../step/cpns/coap/Coap.vue'; |
42 | 45 | import Lwm2mCpns from '../step/cpns/lwm2m/index.vue'; |
46 | + import SnmpCpns from '../step/cpns/snmp/index.vue'; | |
43 | 47 | |
44 | 48 | export default defineComponent({ |
45 | 49 | components: { |
... | ... | @@ -52,6 +56,7 @@ |
52 | 56 | MqttCpns, |
53 | 57 | CoapCpns, |
54 | 58 | Lwm2mCpns, |
59 | + SnmpCpns, | |
55 | 60 | }, |
56 | 61 | emits: ['next', 'prev', 'register'], |
57 | 62 | setup(_, { emit }) { |
... | ... | @@ -59,6 +64,7 @@ |
59 | 64 | const mqttRef = ref(null); |
60 | 65 | const coapRef = ref(null); |
61 | 66 | const lwm2mRef = ref(null); |
67 | + const snmpRef = ref(null); | |
62 | 68 | const isMqttType = ref(''); |
63 | 69 | let step2Data = reactive({ |
64 | 70 | transportConfiguration: {}, |
... | ... | @@ -104,6 +110,7 @@ |
104 | 110 | { label: 'MQTT', value: 'MQTT' }, |
105 | 111 | { label: 'CoAP', value: 'COAP' }, |
106 | 112 | { label: 'LWM2M', value: 'LWM2M' }, |
113 | + // { label: 'SNMP', value: 'SNMP' }, | |
107 | 114 | ], |
108 | 115 | onChange(e) { |
109 | 116 | isMqttType.value = e; |
... | ... | @@ -139,6 +146,7 @@ |
139 | 146 | mqttRef, |
140 | 147 | coapRef, |
141 | 148 | lwm2mRef, |
149 | + snmpRef, | |
142 | 150 | }; |
143 | 151 | }, |
144 | 152 | }); | ... | ... |
... | ... | @@ -78,6 +78,7 @@ |
78 | 78 | observe: [], |
79 | 79 | telemetry: [], |
80 | 80 | }); |
81 | + | |
81 | 82 | const [ |
82 | 83 | registerModel, |
83 | 84 | { resetFields: resetObjectListValue, getFieldsValue: getObjectListValue }, |
... | ... | @@ -147,7 +148,11 @@ |
147 | 148 | port1: allEchoObj?.bootstrap?.lwm2mServer?.port, |
148 | 149 | serverId1: allEchoObj?.bootstrap?.lwm2mServer?.serverId, |
149 | 150 | securityMode1: allEchoObj?.bootstrap?.lwm2mServer?.securityMode, |
150 | - serverPublicKey1: allEchoObj?.bootstrap?.lwm2mServer?.serverPublicKey, | |
151 | + serverPublicKey1: | |
152 | + allEchoObj?.bootstrap?.lwm2mServer?.serverPublicKey == null | |
153 | + ? `3059301306072a8648ce3d020106082a8648ce3d03010703420004e353af009b814ee2f9ab393a975e0c | |
154 | + 39e2fff60e3603fd6ee54a43b89a4f56258a7aa9c7e4a577760edb289dc955d91968473ee8a1bfc2b9c423563796113009` | |
155 | + : allEchoObj?.bootstrap?.lwm2mServer?.serverPublicKey, | |
151 | 156 | clientHoldOffTime1: allEchoObj?.bootstrap?.lwm2mServer?.clientHoldOffTime, |
152 | 157 | bootstrapServerAccountTimeout1: |
153 | 158 | allEchoObj?.bootstrap?.lwm2mServer?.bootstrapServerAccountTimeout, |
... | ... | @@ -157,7 +162,11 @@ |
157 | 162 | port: allEchoObj?.bootstrap?.bootstrapServer?.port, |
158 | 163 | serverId: allEchoObj?.bootstrap?.bootstrapServer?.serverId, |
159 | 164 | securityMode: allEchoObj?.bootstrap?.bootstrapServer?.securityMode, |
160 | - serverPublicKey: allEchoObj?.bootstrap?.bootstrapServer?.serverPublicKey, | |
165 | + serverPublicKey: | |
166 | + allEchoObj?.bootstrap?.bootstrapServer?.serverPublicKey == null | |
167 | + ? `3059301306072a8648ce3d020106082a8648ce3d03010703420004e353af009b814ee2f9ab393a975e0c | |
168 | + 39e2fff60e3603fd6ee54a43b89a4f56258a7aa9c7e4a577760edb289dc955d91968473ee8a1bfc2b9c423563796113009` | |
169 | + : allEchoObj?.bootstrap?.bootstrapServer?.serverPublicKey, | |
161 | 170 | clientHoldOffTime: allEchoObj?.bootstrap?.bootstrapServer?.clientHoldOffTime, |
162 | 171 | bootstrapServerAccountTimeout2: |
163 | 172 | allEchoObj?.bootstrap?.servers?.bootstrapServerAccountTimeout, | ... | ... |
1 | +<template> | |
2 | + <div style="display: flex; flex-direction: row; width: 30vw"> | |
3 | + <div style="width: 9vw"> | |
4 | + <BasicForm | |
5 | + :showResetButton="false" | |
6 | + :showSubmitButton="false" | |
7 | + @register="registerRightSelect" | |
8 | + /> | |
9 | + </div> | |
10 | + <div style="width: 20vw"> | |
11 | + <BasicForm :showResetButton="false" :showSubmitButton="false" @register="registerRightInput" | |
12 | + /></div> | |
13 | + <div style="width: 1vw; margin-left: -0.8vw"> | |
14 | + <span @click="handleDelScopeAndKeyAndVal" style="color: red; cursor: pointer">X</span> | |
15 | + </div> | |
16 | + </div> | |
17 | +</template> | |
18 | +<script lang="ts"> | |
19 | + import { defineComponent } from 'vue'; | |
20 | + import { BasicForm, useForm } from '/@/components/Form'; | |
21 | + import { snmpRightSelectSchemas, snmpRightInputSchemas } from '../index'; | |
22 | + | |
23 | + export default defineComponent({ | |
24 | + components: { | |
25 | + BasicForm, | |
26 | + }, | |
27 | + | |
28 | + emits: ['next', 'prev', 'register', 'clear'], | |
29 | + setup(_, { emit }) { | |
30 | + const [registerRightSelect] = useForm({ | |
31 | + labelWidth: 80, | |
32 | + schemas: snmpRightSelectSchemas, | |
33 | + actionColOptions: { | |
34 | + span: 14, | |
35 | + }, | |
36 | + }); | |
37 | + const [registerRightInput] = useForm({ | |
38 | + labelWidth: 80, | |
39 | + schemas: snmpRightInputSchemas, | |
40 | + actionColOptions: { | |
41 | + span: 14, | |
42 | + }, | |
43 | + }); | |
44 | + const handleDelScopeAndKeyAndVal = () => { | |
45 | + emit('clear'); | |
46 | + }; | |
47 | + return { | |
48 | + registerRightSelect, | |
49 | + registerRightInput, | |
50 | + handleDelScopeAndKeyAndVal, | |
51 | + }; | |
52 | + }, | |
53 | + }); | |
54 | +</script> | |
55 | +<style lang="less" scoped></style> | ... | ... |
1 | +import { FormSchema } from '/@/components/Form'; | |
2 | + | |
3 | +export const snmpSchemas: FormSchema[] = [ | |
4 | + { | |
5 | + field: 'timeoutMs', | |
6 | + component: 'InputNumber', | |
7 | + label: 'Timeout,ns', | |
8 | + required: true, | |
9 | + defaultValue: 500, | |
10 | + colProps: { span: 11 }, | |
11 | + }, | |
12 | + { | |
13 | + field: 'retries', | |
14 | + component: 'InputNumber', | |
15 | + label: 'Retries', | |
16 | + required: true, | |
17 | + defaultValue: 0, | |
18 | + colProps: { span: 11 }, | |
19 | + }, | |
20 | + { | |
21 | + field: 'noknown', | |
22 | + component: 'Input', | |
23 | + label: '', | |
24 | + slot: 'add', | |
25 | + colProps: { span: 11 }, | |
26 | + }, | |
27 | +]; | |
28 | + | |
29 | +export const snmpLeftSchemas: FormSchema[] = [ | |
30 | + { | |
31 | + field: 'spec', | |
32 | + component: 'Select', | |
33 | + label: 'Scope', | |
34 | + defaultValue: 'CLIENT_ATTRIBUTES_QUERYING', | |
35 | + componentProps: { | |
36 | + options: [ | |
37 | + { | |
38 | + label: 'Telemetry', | |
39 | + value: 'TELEMETRY_QUERYING', | |
40 | + }, | |
41 | + { | |
42 | + label: 'Client attributes', | |
43 | + value: 'CLIENT_ATTRIBUTES_QUERYING', | |
44 | + }, | |
45 | + { | |
46 | + label: 'Shared attributes', | |
47 | + value: 'SHARED_ATTRIBUTES_SETTING', | |
48 | + }, | |
49 | + { | |
50 | + label: 'RPC request', | |
51 | + value: 'TO_DEVICE_RPC_REQUEST', | |
52 | + }, | |
53 | + ], | |
54 | + }, | |
55 | + colProps: { span: 11 }, | |
56 | + }, | |
57 | +]; | |
58 | + | |
59 | +export const snmpRightSchemas: FormSchema[] = [ | |
60 | + { | |
61 | + field: 'queryingFrequencyMs', | |
62 | + component: 'InputNumber', | |
63 | + label: '查询频率,毫秒', | |
64 | + required: true, | |
65 | + defaultValue: 5000, | |
66 | + colProps: { span: 22 }, | |
67 | + }, | |
68 | +]; | |
69 | + | |
70 | +export const snmpRightSelectSchemas: FormSchema[] = [ | |
71 | + { | |
72 | + field: 'dataType', | |
73 | + component: 'Select', | |
74 | + label: 'Type', | |
75 | + defaultValue: '字符串', | |
76 | + componentProps: { | |
77 | + options: [ | |
78 | + { | |
79 | + label: '字符串', | |
80 | + value: '字符串', | |
81 | + }, | |
82 | + { | |
83 | + label: '数字', | |
84 | + value: '数字', | |
85 | + }, | |
86 | + { | |
87 | + label: '布尔值', | |
88 | + value: '布尔值', | |
89 | + }, | |
90 | + { | |
91 | + label: '双精度小数', | |
92 | + value: '双精度小数', | |
93 | + }, | |
94 | + { | |
95 | + label: 'JSON', | |
96 | + value: 'JSON', | |
97 | + }, | |
98 | + ], | |
99 | + }, | |
100 | + colProps: { span: 11 }, | |
101 | + }, | |
102 | +]; | |
103 | + | |
104 | +export const snmpRightInputSchemas: FormSchema[] = [ | |
105 | + { | |
106 | + field: 'key', | |
107 | + component: 'Input', | |
108 | + label: 'Data key', | |
109 | + required: true, | |
110 | + colProps: { span: 11 }, | |
111 | + }, | |
112 | + { | |
113 | + field: 'oid', | |
114 | + component: 'Input', | |
115 | + label: 'OID', | |
116 | + required: true, | |
117 | + colProps: { span: 11 }, | |
118 | + }, | |
119 | +]; | ... | ... |
1 | +<template> | |
2 | + <div | |
3 | + style=" | |
4 | + margin-top: -5vh; | |
5 | + border: 0.5px solid gray; | |
6 | + margin-left: 0.1vw; | |
7 | + border-radius: 5px; | |
8 | + padding-left: 1.5vw; | |
9 | + " | |
10 | + > | |
11 | + <div style="margin-top: 1.2vh"> | |
12 | + <BasicForm :showResetButton="false" :showSubmitButton="false" @register="register"> | |
13 | + <template #add> | |
14 | + <div> | |
15 | + <template v-for="(item, index) in scopeData" :key="item.id1"> | |
16 | + <span style="display: none">{{ item }}</span> | |
17 | + <div | |
18 | + style=" | |
19 | + display: flex; | |
20 | + width: 45vw; | |
21 | + flex-direction: row; | |
22 | + border: 0.5px solid gray; | |
23 | + border-radius: 5px; | |
24 | + margin-left: -1.5vw; | |
25 | + " | |
26 | + > | |
27 | + <div | |
28 | + style=" | |
29 | + width: 14vw; | |
30 | + border: 0.5px solid gray; | |
31 | + border-radius: 5px; | |
32 | + margin-left: -2vw; | |
33 | + " | |
34 | + > | |
35 | + <BasicForm | |
36 | + :showResetButton="false" | |
37 | + :showSubmitButton="false" | |
38 | + @register="registerLeft" | |
39 | + /> | |
40 | + </div> | |
41 | + <div style="width: 29.3vw; border: 0.5px solid gray; border-radius: 5px"> | |
42 | + <BasicForm | |
43 | + :showResetButton="false" | |
44 | + :showSubmitButton="false" | |
45 | + @register="registerRight" | |
46 | + /> | |
47 | + <div> | |
48 | + <template v-for="(item1, index1) in item.mappings" :key="item1.id2"> | |
49 | + <span style="display: none">{{ index1 }}</span> | |
50 | + <span style="display: none">{{ item1 }}</span> | |
51 | + <KeyAndValVue @clear="clearFun(index, index1)" /> | |
52 | + </template> | |
53 | + <div | |
54 | + style=" | |
55 | + margin-top: -3.8vh; | |
56 | + margin-left: 2.3vw; | |
57 | + position: relative; | |
58 | + top: -1.5vh; | |
59 | + " | |
60 | + > | |
61 | + <a-button size="small" type="default" @click="handleAddMapping(index)"> | |
62 | + Add mapping | |
63 | + </a-button> | |
64 | + </div> | |
65 | + </div> | |
66 | + </div> | |
67 | + <div style="width: 1vw; margin-top: 8.5vh; margin-left: 0.5vw"> | |
68 | + <span @click="handleDelScope(index)" style="color: red; cursor: pointer">X</span> | |
69 | + </div> | |
70 | + </div> | |
71 | + <div style="height: 2vh"></div> | |
72 | + </template> | |
73 | + <div style="margin-left: -1vw"> | |
74 | + <a-button size="small" type="default" @click="handleAddScope"> | |
75 | + Add communication config | |
76 | + </a-button> | |
77 | + </div> | |
78 | + </div> | |
79 | + </template> | |
80 | + </BasicForm> | |
81 | + </div> | |
82 | + </div> | |
83 | +</template> | |
84 | +<script lang="ts"> | |
85 | + import { defineComponent, ref } from 'vue'; | |
86 | + import { BasicForm, useForm } from '/@/components/Form'; | |
87 | + import { snmpSchemas, snmpLeftSchemas, snmpRightSchemas } from './index'; | |
88 | + import { Alert, Divider, Descriptions } from 'ant-design-vue'; | |
89 | + import KeyAndValVue from './cpns/KeyAndVal.vue'; | |
90 | + | |
91 | + export default defineComponent({ | |
92 | + components: { | |
93 | + BasicForm, | |
94 | + [Alert.name]: Alert, | |
95 | + [Divider.name]: Divider, | |
96 | + [Descriptions.name]: Descriptions, | |
97 | + [Descriptions.Item.name]: Descriptions.Item, | |
98 | + KeyAndValVue, | |
99 | + }, | |
100 | + | |
101 | + emits: ['next', 'prev', 'register'], | |
102 | + setup() { | |
103 | + const scopeData: any = ref([ | |
104 | + { | |
105 | + id1: 1, | |
106 | + mappings: [ | |
107 | + { | |
108 | + id2: 2, | |
109 | + }, | |
110 | + ], | |
111 | + }, | |
112 | + ]); | |
113 | + | |
114 | + const [register] = useForm({ | |
115 | + labelWidth: 150, | |
116 | + schemas: snmpSchemas, | |
117 | + actionColOptions: { | |
118 | + span: 14, | |
119 | + }, | |
120 | + }); | |
121 | + const [registerLeft] = useForm({ | |
122 | + labelWidth: 100, | |
123 | + schemas: snmpLeftSchemas, | |
124 | + actionColOptions: { | |
125 | + span: 14, | |
126 | + }, | |
127 | + }); | |
128 | + const [registerRight] = useForm({ | |
129 | + labelWidth: 150, | |
130 | + schemas: snmpRightSchemas, | |
131 | + actionColOptions: { | |
132 | + span: 14, | |
133 | + }, | |
134 | + }); | |
135 | + | |
136 | + const handleAddMapping = (i) => { | |
137 | + scopeData.value[i].mappings.push({ | |
138 | + id2: Date.now() + 3, | |
139 | + }); | |
140 | + }; | |
141 | + const clearFun = (i1, i2) => { | |
142 | + scopeData.value[i1].mappings.splice(i2, 1); | |
143 | + }; | |
144 | + | |
145 | + const handleDelScope = (i) => { | |
146 | + scopeData.value.splice(i, 1); | |
147 | + }; | |
148 | + | |
149 | + const handleAddScope = () => { | |
150 | + if (scopeData.value.length < 4) { | |
151 | + scopeData.value.push({ | |
152 | + id1: Date.now() + 1, | |
153 | + mappings: [ | |
154 | + { | |
155 | + id2: Date.now() + 2, | |
156 | + }, | |
157 | + ], | |
158 | + }); | |
159 | + } | |
160 | + }; | |
161 | + | |
162 | + return { | |
163 | + register, | |
164 | + registerLeft, | |
165 | + registerRight, | |
166 | + handleAddMapping, | |
167 | + scopeData, | |
168 | + handleDelScope, | |
169 | + handleAddScope, | |
170 | + clearFun, | |
171 | + }; | |
172 | + }, | |
173 | + }); | |
174 | +</script> | |
175 | +<style lang="less" scoped></style> | ... | ... |
... | ... | @@ -46,7 +46,7 @@ |
46 | 46 | //编辑 |
47 | 47 | if (data.isUpdate) { |
48 | 48 | noticeId.value = data.record.id; |
49 | - Reflect.set(data.record, 'receiverType', data.record.receiverType === '全部' ? 0 : 1); | |
49 | + Reflect.set(data.record, 'receiverType', data.record.receiverType === 0 ? 0 : 1); | |
50 | 50 | if (data.record.receiverType === 1) { |
51 | 51 | if (!data.record.pointId.length) return; |
52 | 52 | const organizationId = data.record.pointId.split(','); | ... | ... |