Commit 400760d8a437a705b9fbda04d8a4d08113cfa7e2
Merge branch 'ft_local_dev' into 'main'
refractor:重构设备配置代码 See merge request huang/yun-teng-iot-front!345
Showing
12 changed files
with
948 additions
and
1313 deletions
@@ -41,7 +41,6 @@ export function useBatchDelete( | @@ -41,7 +41,6 @@ export function useBatchDelete( | ||
41 | 41 | ||
42 | // 全选按钮 | 42 | // 全选按钮 |
43 | const onSelectAll = (_, selectedRows, __) => { | 43 | const onSelectAll = (_, selectedRows, __) => { |
44 | - console.log(selectedRows); | ||
45 | const selectedRowKeys = selectedRows.map((item) => item.id); | 44 | const selectedRowKeys = selectedRows.map((item) => item.id); |
46 | selectedRowIds.value = selectedRowKeys; | 45 | selectedRowIds.value = selectedRowKeys; |
47 | }; | 46 | }; |
1 | <template> | 1 | <template> |
2 | <div> | 2 | <div> |
3 | <BasicModal | 3 | <BasicModal |
4 | + :maskClosable="false" | ||
4 | v-bind="$attrs" | 5 | v-bind="$attrs" |
5 | width="55rem" | 6 | width="55rem" |
6 | @register="register" | 7 | @register="register" |
7 | - :title="getTitle" | ||
8 | @ok="handleSubmit" | 8 | @ok="handleSubmit" |
9 | @cancel="handleCancel" | 9 | @cancel="handleCancel" |
10 | - :showOkBtn="isShowOkBtnFalse" | ||
11 | > | 10 | > |
12 | <div class="step-form-form"> | 11 | <div class="step-form-form"> |
13 | <a-steps :current="current"> | 12 | <a-steps :current="current"> |
14 | - <a-step title="设备配置" /> | ||
15 | - <a-step title="传输配置" /> | 13 | + <a-step v-for="item in steps" :key="item.title" :title="item.title" /> |
16 | </a-steps> | 14 | </a-steps> |
17 | </div> | 15 | </div> |
18 | <div class="mt-5"> | 16 | <div class="mt-5"> |
19 | - <!-- 设备配置 --> | ||
20 | - <div v-show="current === 0"> | ||
21 | - <DeviceProfileStep1 ref="DeviceProfileStep1Ref" @next="handleStepNext1" /> | ||
22 | - </div> | ||
23 | - <!-- 设备配置 --> | ||
24 | - <!-- 传输配置 --> | ||
25 | - <div v-show="current === 1"> | ||
26 | - <DeviceProfileStep2 ref="DeviceProfileStep2Ref" @prev="handleStepPrev" /> | ||
27 | - </div> | ||
28 | - <!-- 传输配置 --> | 17 | + <DeviceConfigurationStep |
18 | + v-show="current === 0" | ||
19 | + ref="DevConStRef" | ||
20 | + @next="handleStepNext(true, null)" | ||
21 | + /> | ||
22 | + <TransportConfigurationStep | ||
23 | + v-show="current === 1" | ||
24 | + ref="TransConStRef" | ||
25 | + @prev="handleStepPrev" | ||
26 | + /> | ||
29 | </div> | 27 | </div> |
30 | </BasicModal> | 28 | </BasicModal> |
31 | </div> | 29 | </div> |
32 | </template> | 30 | </template> |
33 | -<script lang="ts"> | ||
34 | - import { | ||
35 | - defineComponent, | ||
36 | - nextTick, | ||
37 | - ref, | ||
38 | - computed, | ||
39 | - unref, | ||
40 | - getCurrentInstance, | ||
41 | - reactive, | ||
42 | - } from 'vue'; | 31 | +<script lang="ts" setup> |
32 | + import { ref, unref, reactive } from 'vue'; | ||
43 | import { BasicModal, useModalInner } from '/@/components/Modal'; | 33 | import { BasicModal, useModalInner } from '/@/components/Modal'; |
44 | - import DeviceProfileStep1 from '/@/views/device/profiles/step/DeviceProfileStep1.vue'; | ||
45 | - import DeviceProfileStep2 from '/@/views/device/profiles/step/DeviceProfileStep2.vue'; | ||
46 | - import { Steps } from 'ant-design-vue'; | 34 | + import DeviceConfigurationStep from './step/DeviceConfigurationStep.vue'; |
35 | + import TransportConfigurationStep from './step/TransportConfigurationStep.vue'; | ||
47 | import { deviceConfigAddOrEdit, deviceConfigGetDetail } from '/@/api/device/deviceConfigApi'; | 36 | import { deviceConfigAddOrEdit, deviceConfigGetDetail } from '/@/api/device/deviceConfigApi'; |
48 | import { useMessage } from '/@/hooks/web/useMessage'; | 37 | import { useMessage } from '/@/hooks/web/useMessage'; |
38 | + import { steps } from './device.profile.data'; | ||
39 | + import { isEmpty } from '/@/utils/is'; | ||
49 | 40 | ||
50 | - export default defineComponent({ | ||
51 | - name: 'DeviceModal', | ||
52 | - components: { | ||
53 | - BasicModal, | ||
54 | - DeviceProfileStep1, | ||
55 | - DeviceProfileStep2, | ||
56 | - [Steps.name]: Steps, | ||
57 | - [Steps.Step.name]: Steps.Step, | ||
58 | - }, | ||
59 | - props: { | ||
60 | - userData: { type: Object }, | ||
61 | - }, | ||
62 | - emits: ['success', 'register', 'handleStepPrev', 'handleStep3Next', 'handleRedo'], | ||
63 | - setup(_, { emit }) { | ||
64 | - const { proxy } = getCurrentInstance() as any; | ||
65 | - const DeviceProfileStep1Ref = ref(null); | ||
66 | - const DeviceProfileStep2Ref = ref(null); | ||
67 | - const { createMessage } = useMessage(); | ||
68 | - let postDeviceConfogData: any = reactive({}); | ||
69 | - let getStepOneData: any = reactive({}); | ||
70 | - let getStepTwoData: any = reactive({}); | ||
71 | - const editData: any = ref({}); | ||
72 | - const postEditId = ref(''); | ||
73 | - const postDefault = ref(false); | ||
74 | - const createTime = ref(''); | ||
75 | - const current = ref(0); | ||
76 | - const isUpdate = ref(0); | ||
77 | - const isShowOkBtnFalse = ref(true); | ||
78 | - const isNextStatus = ref(false); | ||
79 | - let transportTypeObj = reactive({ | ||
80 | - transportType: '', | ||
81 | - }); | ||
82 | - let profileDataObj: any = reactive({ | ||
83 | - profileData: null, | ||
84 | - }); | ||
85 | - let isEdit = ref(true); | ||
86 | - let noEditObj: any = reactive({}); | ||
87 | - const getTitle = computed(() => | ||
88 | - isUpdate.value == 1 ? '新增设备配置' : isUpdate.value == 2 ? '编辑设备配置' : '设备配置详情' | ||
89 | - ); | ||
90 | - const editTransportType = ref(''); | ||
91 | - const getViewTitle = computed(() => (!unref(isShowOkBtnFalse) ? '设备配置详情' : '')); | ||
92 | - const [register, { closeModal }] = useModalInner(async (data) => { | ||
93 | - isUpdate.value = data.isUpdate; | ||
94 | - if (isUpdate.value == 1) { | ||
95 | - handleCancel(); | ||
96 | - isShowOkBtnFalse.value = true; | ||
97 | - current.value = 0; | ||
98 | - isEdit.value = false; | ||
99 | - proxy.$refs.DeviceProfileStep1Ref.editOrAddNameStatus(false); | ||
100 | - } else if (isUpdate.value == 2) { | ||
101 | - isEdit.value = true; | ||
102 | - handleCancel(); | ||
103 | - isShowOkBtnFalse.value = true; | ||
104 | - current.value = 0; | ||
105 | - postEditId.value = data.record.id; | ||
106 | - postDefault.value = data.record.default; | ||
107 | - createTime.value = data.record.createTime; | ||
108 | - editTransportType.value = data.record.transportType; | ||
109 | - editData.value = await deviceConfigGetDetail(postEditId.value); | ||
110 | - proxy.$refs.DeviceProfileStep1Ref.setStepOneFieldsValueFunc({ | ||
111 | - name: editData.value.name, | ||
112 | - defaultRuleChainId: editData.value.defaultRuleChainId, | ||
113 | - defaultQueueName: editData.value.defaultQueueName, | ||
114 | - description: editData.value.description, | ||
115 | - image: editData.value.image, | ||
116 | - }); | ||
117 | - if (editData.value.default) { | ||
118 | - proxy.$refs.DeviceProfileStep1Ref.editOrAddNameStatus(true); | ||
119 | - } else { | ||
120 | - proxy.$refs.DeviceProfileStep1Ref.editOrAddNameStatus(false); | ||
121 | - } | ||
122 | - noEditObj = { | ||
123 | - name: editData.value?.name, | ||
124 | - createTime: createTime.value, | ||
125 | - transportType: editTransportType.value, | ||
126 | - type: editData.value?.type, | ||
127 | - profileData: editData.value?.profileData, | ||
128 | - defaultQueueName: editData.value.defaultQueueName, | ||
129 | - id: editData.value.id, | ||
130 | - defaultRuleChainId: editData.value.defaultRuleChainId, | ||
131 | - tenantId: editData.value.tenantId, | ||
132 | - image: editData.value.image, | ||
133 | - description: editData.value.description, | ||
134 | - default: editData.value.default, | ||
135 | - }; | ||
136 | - } else if (isUpdate.value == 3) { | ||
137 | - handleCancel(); | ||
138 | - isShowOkBtnFalse.value = false; | ||
139 | - current.value = 0; | ||
140 | - postEditId.value = data.record.id; | ||
141 | - createTime.value = data.record.createTime; | ||
142 | - editData.value = await deviceConfigGetDetail(postEditId.value); | ||
143 | - proxy.$refs.DeviceProfileStep1Ref.setStepOneFieldsValueFunc({ | ||
144 | - name: editData.value.name, | ||
145 | - defaultRuleChainId: editData.value.defaultRuleChainId, | ||
146 | - defaultQueueName: editData.value.defaultQueueName, | ||
147 | - description: editData.value.description, | ||
148 | - image: editData.value.image, | ||
149 | - }); | ||
150 | - } | ||
151 | - }); | ||
152 | - function handleStepPrev() { | ||
153 | - current.value--; | ||
154 | - if (isUpdate.value == 2) { | ||
155 | - isEdit.value = true; | ||
156 | - noEditObj = { | ||
157 | - id: editData.value.id, | ||
158 | - name: editData.value?.name, | ||
159 | - createTime: createTime.value, | ||
160 | - transportType: editTransportType.value, | ||
161 | - type: editData.value?.type, | ||
162 | - profileData: editData.value?.profileData, | ||
163 | - defaultQueueName: editData.value.defaultQueueName, | ||
164 | - image: editData.value.image, | ||
165 | - defaultRuleChainId: editData.value.defaultRuleChainId, | ||
166 | - description: editData.value.description, | ||
167 | - tenantId: editData.value.tenantId, | ||
168 | - default: editData.value.default, | ||
169 | - }; | ||
170 | - nextTick(async () => { | ||
171 | - let getPic = null; | ||
172 | - const getStep1Obj = await proxy.$refs.DeviceProfileStep1Ref?.getStep1Func(); | ||
173 | - getPic = getStep1Obj.icon; | ||
174 | - getStepOneData = { | ||
175 | - ...getStep1Obj.key, | ||
176 | - ...{ image: getPic }, | ||
177 | - }; | ||
178 | - Object.assign(noEditObj, getStepOneData); | ||
179 | - }); | ||
180 | - } | ||
181 | - } | ||
182 | - //第一步 | ||
183 | - function handleStepNext1(v, v1) { | ||
184 | - isNextStatus.value = true; | ||
185 | - if (isNextStatus.value) { | ||
186 | - getStepOneData = { | ||
187 | - ...v, | ||
188 | - ...{ image: v1 }, | ||
189 | - }; | ||
190 | - } | ||
191 | - current.value++; | ||
192 | - if (isUpdate.value == 2) { | ||
193 | - isEdit.value = false; | ||
194 | - proxy.$refs.DeviceProfileStep2Ref?.setStepTwoFieldsValueFunc(editData.value); | ||
195 | - } else if (isUpdate.value == 3) { | ||
196 | - proxy.$refs.DeviceProfileStep2Ref?.setStepTwoFieldsValueFunc(editData.value); | ||
197 | - } | ||
198 | - } | ||
199 | - const handleSubmit = async () => { | ||
200 | - let getPic = null; | ||
201 | - getStepTwoData = await proxy.$refs.DeviceProfileStep2Ref?.getStep2DataFunc(); | ||
202 | - profileDataObj.profileData = getStepTwoData; | ||
203 | - transportTypeObj.transportType = getStepTwoData?.transportConfiguration?.transportType; | ||
204 | - delete profileDataObj?.profileData?.transportConfiguration?.transportType; | ||
205 | - //没有点击下一步 | ||
206 | - if (!isNextStatus.value) { | ||
207 | - const getStep1Obj = await proxy.$refs.DeviceProfileStep1Ref?.getStep1Func(); | ||
208 | - getPic = getStep1Obj.icon; | ||
209 | - getStepOneData = { | ||
210 | - ...getStep1Obj.key, | ||
211 | - ...{ image: getPic }, | ||
212 | - }; | ||
213 | - Object.assign(noEditObj, getStepOneData); | ||
214 | - } | ||
215 | - const id = isUpdate.value == 1 ? '' : postEditId.value; | ||
216 | - const postDefaultVal = | ||
217 | - isUpdate.value == 1 ? { default: false } : { default: postDefault.value }; | ||
218 | - const createTimePost = isUpdate.value == 1 ? {} : { createTime: createTime.value }; | ||
219 | - | ||
220 | - if (Object.keys(getStepTwoData?.transportConfiguration).length == 0) { | ||
221 | - profileDataObj.profileData = null; | ||
222 | - } | ||
223 | - postDeviceConfogData = { | ||
224 | - ...getStepOneData, | ||
225 | - ...profileDataObj, | ||
226 | - ...transportTypeObj, | ||
227 | - id, | ||
228 | - ...postDefaultVal, | ||
229 | - ...createTimePost, | ||
230 | - }; | ||
231 | - if (isUpdate.value == 1) { | ||
232 | - delete postDeviceConfogData.id; | ||
233 | - } | ||
234 | - let isMappingsKey = ref(false); | ||
235 | - let isMappingValue = ref(false); | ||
236 | - let isQueryings = ref(false); | ||
237 | - let isOIDRepet = ref(false); | ||
238 | - postDeviceConfogData?.profileData?.transportConfiguration?.communicationConfigs?.forEach( | ||
239 | - (f: any) => { | ||
240 | - if (f.spec == 'TELEMETRY_QUERYING' || f.spec == 'CLIENT_ATTRIBUTES_QUERYING') { | ||
241 | - if (f.queryingFrequencyMs == null) { | ||
242 | - isQueryings.value = true; | ||
243 | - return createMessage.error('请填写查询频率'); | ||
244 | - } else { | ||
245 | - isQueryings.value = false; | ||
246 | - } | ||
247 | - } | ||
248 | - if (f.mappings.length == 0) { | ||
249 | - isMappingsKey.value = true; | ||
250 | - isMappingValue.value = true; | ||
251 | - } else { | ||
252 | - f.mappings.forEach((f1) => { | ||
253 | - const findNoneKey = Object.keys(f1).includes(''); | ||
254 | - if (findNoneKey) { | ||
255 | - isMappingsKey.value = true; | ||
256 | - } | ||
257 | - }); | ||
258 | - f.mappings.forEach((f2) => { | ||
259 | - const findNoneVal = Object.values(f2).includes(''); | ||
260 | - if (findNoneVal) { | ||
261 | - isMappingValue.value = true; | ||
262 | - } | ||
263 | - }); | ||
264 | - //新增OID不能重复=====同一层级的OID不能重复 | ||
265 | - f.mappings.forEach((item, _) => { | ||
266 | - if (f.mappings.some((citem) => citem !== item && citem.oid === item.oid)) { | ||
267 | - isOIDRepet.value = true; | ||
268 | - } | ||
269 | - }); | ||
270 | - } | ||
271 | - } | ||
272 | - ); | ||
273 | - if (isQueryings.value) return createMessage.error('请填写查询频率'); | ||
274 | - if (isMappingsKey.value) return createMessage.error('请填写Date key和OID'); | ||
275 | - if (isMappingValue.value) return createMessage.error('请填写Date key和OID'); | ||
276 | - if (isOIDRepet.value) return createMessage.error('OID不能重复'); | ||
277 | - deviceConfigAddOrEdit(isEdit.value ? noEditObj : postDeviceConfogData) | ||
278 | - .then((res) => { | ||
279 | - if (!res) return; | ||
280 | - createMessage.success(isUpdate.value == 1 ? '新增' + '成功' : '编辑' + '成功'); | ||
281 | - closeModal(); | ||
282 | - emit('success'); | ||
283 | - isNextStatus.value = false; | ||
284 | - }) | ||
285 | - .catch((e) => { | ||
286 | - // createMessage.error(e); | ||
287 | - }); | ||
288 | - }; | ||
289 | - const handleCancel = () => { | ||
290 | - nextTick(() => { | ||
291 | - proxy.$refs.DeviceProfileStep1Ref?.customResetStepOneFunc(); | ||
292 | - proxy.$refs.DeviceProfileStep2Ref?.customClearStepTwoValueFunc(); | ||
293 | - }); | ||
294 | - }; | ||
295 | - function handleRedo() { | ||
296 | - current.value = 0; | 41 | + const emits = defineEmits(['success', 'register']); |
42 | + const isEditId = ref(''); | ||
43 | + const isEditCreatTime = ref(''); | ||
44 | + const { createMessage } = useMessage(); | ||
45 | + const isViewDetail = ref(false); | ||
46 | + const isUpdate = ref(false); | ||
47 | + const current = ref(0); | ||
48 | + const DevConStRef = ref<InstanceType<typeof DeviceConfigurationStep>>(); | ||
49 | + const TransConStRef = ref<InstanceType<typeof TransportConfigurationStep>>(); | ||
50 | + const postSubmitFormData: any = reactive({ | ||
51 | + deviceConfData: {}, | ||
52 | + }); | ||
53 | + const transportConfData: any = reactive({ | ||
54 | + profileData: {}, | ||
55 | + }); | ||
56 | + const transportTypeStr = ref(''); | ||
57 | + const [register, { closeModal, setModalProps }] = useModalInner(async (data) => { | ||
58 | + setModalProps({ confirmLoading: false }); | ||
59 | + current.value = 0; | ||
60 | + isUpdate.value = data.isUpdate; | ||
61 | + isViewDetail.value = data.isView; | ||
62 | + const res = data.record !== undefined ? await deviceConfigGetDetail(data.record.id) : {}; | ||
63 | + isEditId.value = data.record !== undefined ? data.record.id : null; | ||
64 | + isEditCreatTime.value = data.record !== undefined ? data.record.createTime : null; | ||
65 | + if (!unref(isViewDetail)) { | ||
66 | + const title = !unref(isUpdate) ? '编辑设备配置' : '新增设备配置'; | ||
67 | + setModalProps({ title, showOkBtn: true, showCancelBtn: true }); | ||
68 | + if (!unref(isUpdate)) { | ||
69 | + await setDeviceConfEditFormData(res); | ||
70 | + await setTransConfEditFormData(res); | ||
71 | + handleStepNext(false, res); | ||
297 | } | 72 | } |
298 | - return { | ||
299 | - isShowOkBtnFalse, | ||
300 | - DeviceProfileStep2Ref, | ||
301 | - DeviceProfileStep1Ref, | ||
302 | - editData, | ||
303 | - handleSubmit, | ||
304 | - handleCancel, | ||
305 | - register, | ||
306 | - getTitle, | ||
307 | - getViewTitle, | ||
308 | - current, | ||
309 | - handleStepPrev, | ||
310 | - handleStepNext1, | ||
311 | - handleRedo, | ||
312 | - }; | ||
313 | - }, | 73 | + } else { |
74 | + setModalProps({ showOkBtn: false, showCancelBtn: false, title: '查看设备配置' }); | ||
75 | + await setDeviceConfEditFormData(res); | ||
76 | + await setTransConfEditFormData(res); | ||
77 | + handleStepNext(false, res); | ||
78 | + } | ||
314 | }); | 79 | }); |
80 | + const handleStepNext = (e, data) => { | ||
81 | + if (e) { | ||
82 | + current.value++; | ||
83 | + } else { | ||
84 | + setTransConfEditFormData(data); | ||
85 | + } | ||
86 | + }; | ||
87 | + const handleStepPrev = () => { | ||
88 | + current.value--; | ||
89 | + }; | ||
90 | + | ||
91 | + const setDeviceConfEditFormData = async (res) => { | ||
92 | + await DevConStRef.value?.setFormData(res); | ||
93 | + }; | ||
94 | + const setTransConfEditFormData = async (res) => { | ||
95 | + await TransConStRef.value?.setFormData(res); | ||
96 | + }; | ||
97 | + | ||
98 | + const getDeviceConfFormData = async () => { | ||
99 | + postSubmitFormData.deviceConfData = await DevConStRef.value?.getFormData(); | ||
100 | + }; | ||
101 | + const getTransConfData = async () => { | ||
102 | + transportConfData.profileData = await TransConStRef.value?.getFormData(); | ||
103 | + transportTypeStr.value = transportConfData.profileData.transportConfiguration.type; | ||
104 | + Reflect.deleteProperty(transportConfData.profileData?.transportConfiguration, 'transportType'); | ||
105 | + }; | ||
106 | + | ||
107 | + const handleSubmit = async () => { | ||
108 | + await getDeviceConfFormData(); | ||
109 | + await getTransConfData(); | ||
110 | + const isEmptyObj = isEmpty(transportConfData.profileData.transportConfiguration); | ||
111 | + await deviceConfigAddOrEdit({ | ||
112 | + ...postSubmitFormData.deviceConfData, | ||
113 | + ...{ transportType: !isEmptyObj ? transportTypeStr.value : 'DEFAULT' }, | ||
114 | + ...{ profileData: !isEmptyObj ? transportConfData.profileData : null }, | ||
115 | + ...{ id: isUpdate.value ? null : isEditId.value }, | ||
116 | + ...{ createTime: isUpdate.value ? null : isEditCreatTime.value }, | ||
117 | + }); | ||
118 | + createMessage.success(isUpdate.value ? `新增成功` : `编辑成功`); | ||
119 | + handleCancel(); | ||
120 | + emits('success'); | ||
121 | + }; | ||
122 | + | ||
123 | + const handleCancel = () => { | ||
124 | + closeModal(); | ||
125 | + DevConStRef.value?.resetFormData(); | ||
126 | + TransConStRef.value?.resetFormData(); | ||
127 | + }; | ||
315 | </script> | 128 | </script> |
129 | + | ||
130 | +<style lang="less" scope> | ||
131 | + :deep(.ant-modal-content) { | ||
132 | + height: 700px !important; | ||
133 | + } | ||
134 | +</style> |
@@ -43,6 +43,34 @@ export const columns: BasicColumn[] = [ | @@ -43,6 +43,34 @@ export const columns: BasicColumn[] = [ | ||
43 | width: 120, | 43 | width: 120, |
44 | }, | 44 | }, |
45 | ]; | 45 | ]; |
46 | +export const steps = [ | ||
47 | + { | ||
48 | + title: '设备配置', | ||
49 | + content: 'First-content', | ||
50 | + }, | ||
51 | + { | ||
52 | + title: '传输配置', | ||
53 | + content: 'Second-content', | ||
54 | + }, | ||
55 | +]; | ||
56 | + | ||
57 | +export const defaultObj = { | ||
58 | + headers: { | ||
59 | + normalizedNames: {}, | ||
60 | + lazyUpdate: null, | ||
61 | + }, | ||
62 | + params: { | ||
63 | + updates: null, | ||
64 | + cloneFrom: null, | ||
65 | + encoder: {}, | ||
66 | + map: null, | ||
67 | + interceptorConfig: { | ||
68 | + ignoreLoading: false, | ||
69 | + ignoreErrors: false, | ||
70 | + resendRequest: false, | ||
71 | + }, | ||
72 | + }, | ||
73 | +}; | ||
46 | 74 | ||
47 | export const searchFormSchema: FormSchema[] = [ | 75 | export const searchFormSchema: FormSchema[] = [ |
48 | { | 76 | { |
@@ -3,7 +3,6 @@ | @@ -3,7 +3,6 @@ | ||
3 | <BasicTable | 3 | <BasicTable |
4 | class="devide-profiles" | 4 | class="devide-profiles" |
5 | @register="registerTable" | 5 | @register="registerTable" |
6 | - @selection-change="useSelectionChange" | ||
7 | :rowSelection="{ type: 'checkbox' }" | 6 | :rowSelection="{ type: 'checkbox' }" |
8 | :clickToRowSelect="false" | 7 | :clickToRowSelect="false" |
9 | > | 8 | > |
@@ -96,10 +95,10 @@ | @@ -96,10 +95,10 @@ | ||
96 | /> | 95 | /> |
97 | </div> | 96 | </div> |
98 | </template> | 97 | </template> |
99 | -<script lang="ts"> | ||
100 | - import { defineComponent, ref, nextTick, onUnmounted } from 'vue'; | 98 | +<script lang="ts" setup> |
99 | + import { ref, nextTick, onUnmounted } from 'vue'; | ||
101 | import { BasicTable, TableImg, useTable, TableAction, BasicColumn } from '/@/components/Table'; | 100 | import { BasicTable, TableImg, useTable, TableAction, BasicColumn } from '/@/components/Table'; |
102 | - import { columns, searchFormSchema } from './device.profile.data'; | 101 | + import { columns, searchFormSchema, defaultObj } from './device.profile.data'; |
103 | import { useMessage } from '/@/hooks/web/useMessage'; | 102 | import { useMessage } from '/@/hooks/web/useMessage'; |
104 | import { | 103 | import { |
105 | deviceConfigGetQuery, | 104 | deviceConfigGetQuery, |
@@ -114,285 +113,200 @@ | @@ -114,285 +113,200 @@ | ||
114 | import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; | 113 | import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; |
115 | import { Popconfirm } from 'ant-design-vue'; | 114 | import { Popconfirm } from 'ant-design-vue'; |
116 | 115 | ||
117 | - export default defineComponent({ | ||
118 | - name: 'DeviceProfileManagement', | ||
119 | - components: { | ||
120 | - BasicTable, | ||
121 | - DeviceProfileModal, | ||
122 | - TableAction, | ||
123 | - ImpExcel, | ||
124 | - TableImg, | ||
125 | - Authority, | ||
126 | - ExpExcelModal, | ||
127 | - Popconfirm, | 116 | + const exportData: any = ref([]); |
117 | + const expExcelModalRef: any = ref(null); | ||
118 | + const getPathUrl = ref(''); | ||
119 | + const getPathUrlName = ref(''); | ||
120 | + const disabled = ref(true); | ||
121 | + const onCloseVal = ref(0); | ||
122 | + const immediateStatus = ref(false); | ||
123 | + const { createMessage } = useMessage(); | ||
124 | + const [registerModal, { openModal }] = useModal(); | ||
125 | + const [registerExportModal, { openModal: openModalExcel }] = useModal(); | ||
126 | + const [registerTable, { setProps, reload, setTableData, getForm }] = useTable({ | ||
127 | + title: '设备配置列表', | ||
128 | + clickToRowSelect: false, | ||
129 | + api: deviceConfigGetQuery, | ||
130 | + immediate: immediateStatus.value, | ||
131 | + columns, | ||
132 | + formConfig: { | ||
133 | + labelWidth: 120, | ||
134 | + schemas: searchFormSchema, | ||
128 | }, | 135 | }, |
129 | - setup() { | ||
130 | - const exportData: any = ref([]); | ||
131 | - const expExcelModalRef = ref(null); | ||
132 | - let selectedRowKeys: any = []; | ||
133 | - const deviceDetailRef = ref(null); | ||
134 | - const getPathUrl = ref(''); | ||
135 | - const getPathUrlName = ref(''); | ||
136 | - const disabled = ref(true); | ||
137 | - const onCloseVal = ref(0); | ||
138 | - const immediateStatus = ref(false); | ||
139 | - const { createMessage } = useMessage(); | ||
140 | - const [registerModal, { openModal }] = useModal(); | ||
141 | - const [registerExportModal, { openModal: openModalExcel }] = useModal(); | ||
142 | - const [ | ||
143 | - registerTable, | ||
144 | - { setProps, reload, getSelectRows, setTableData, getForm, getSelectRowKeys }, | ||
145 | - ] = useTable({ | ||
146 | - title: '设备配置列表', | ||
147 | - clickToRowSelect: false, | ||
148 | - api: deviceConfigGetQuery, | ||
149 | - immediate: immediateStatus.value, | ||
150 | - columns, | ||
151 | - formConfig: { | ||
152 | - labelWidth: 120, | ||
153 | - schemas: searchFormSchema, | ||
154 | - }, | ||
155 | - rowKey: 'id', | ||
156 | - useSearchForm: true, | ||
157 | - showTableSetting: true, | ||
158 | - bordered: true, | ||
159 | - showIndexColumn: false, | ||
160 | - actionColumn: { | ||
161 | - width: 240, | ||
162 | - title: '操作', | ||
163 | - dataIndex: 'action', | ||
164 | - slots: { customRender: 'action' }, | ||
165 | - fixed: 'right', | ||
166 | - }, | ||
167 | - }); | ||
168 | - const { hasBatchDelete, handleDeleteOrBatchDelete, selectionOptions } = useBatchDelete( | ||
169 | - deviceConfigDelete, | ||
170 | - handleSuccess, | ||
171 | - setProps | ||
172 | - ); | ||
173 | - selectionOptions.rowSelection.getCheckboxProps = (record: Recordable) => { | ||
174 | - // Demo:status为1的选择框禁用 | ||
175 | - if (record.default === true) { | ||
176 | - return { disabled: true }; | ||
177 | - } else if (record.name == 'default') { | ||
178 | - return { disabled: true }; | ||
179 | - } else { | ||
180 | - return { disabled: false }; | ||
181 | - } | ||
182 | - }; | ||
183 | - nextTick(() => { | ||
184 | - setProps(selectionOptions); | ||
185 | - }); | ||
186 | - /** | ||
187 | - *@param url,name | ||
188 | - **/ | ||
189 | - function getParam(url, name) { | ||
190 | - try { | ||
191 | - let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)'); | ||
192 | - let r = url.split('?')[1].match(reg); | ||
193 | - if (r != null) { | ||
194 | - return r[2]; | ||
195 | - } | ||
196 | - return ''; //如果此处只写return;则返回的是undefined | ||
197 | - } catch (e) { | ||
198 | - return ''; //如果此处只写return;则返回的是undefined | ||
199 | - } | 136 | + rowKey: 'id', |
137 | + useSearchForm: true, | ||
138 | + showTableSetting: true, | ||
139 | + bordered: true, | ||
140 | + showIndexColumn: false, | ||
141 | + actionColumn: { | ||
142 | + width: 240, | ||
143 | + title: '操作', | ||
144 | + dataIndex: 'action', | ||
145 | + slots: { customRender: 'action' }, | ||
146 | + fixed: 'right', | ||
147 | + }, | ||
148 | + }); | ||
149 | + const { hasBatchDelete, handleDeleteOrBatchDelete, selectionOptions } = useBatchDelete( | ||
150 | + deviceConfigDelete, | ||
151 | + handleSuccess, | ||
152 | + setProps | ||
153 | + ); | ||
154 | + selectionOptions.rowSelection.getCheckboxProps = (record: Recordable) => { | ||
155 | + // Demo:status为1的选择框禁用 | ||
156 | + if (record.default === true) { | ||
157 | + return { disabled: true }; | ||
158 | + } else if (record.name == 'default') { | ||
159 | + return { disabled: true }; | ||
160 | + } else { | ||
161 | + return { disabled: false }; | ||
162 | + } | ||
163 | + }; | ||
164 | + nextTick(() => { | ||
165 | + setProps(selectionOptions); | ||
166 | + }); | ||
167 | + /** | ||
168 | + *@param url,name | ||
169 | + **/ | ||
170 | + function getParam(url, name) { | ||
171 | + try { | ||
172 | + let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)'); | ||
173 | + let r = url.split('?')[1].match(reg); | ||
174 | + if (r != null) { | ||
175 | + return r[2]; | ||
200 | } | 176 | } |
201 | - getPathUrl.value = window.location.href; | ||
202 | - const name = 'name'; | ||
203 | - const getName = getParam(getPathUrl.value, name); | ||
204 | - getPathUrlName.value = decodeURIComponent(getName); | 177 | + return ''; //如果此处只写return;则返回的是undefined |
178 | + } catch (e) { | ||
179 | + return ''; //如果此处只写return;则返回的是undefined | ||
180 | + } | ||
181 | + } | ||
182 | + getPathUrl.value = window.location.href; | ||
183 | + const name = 'name'; | ||
184 | + const getName = getParam(getPathUrl.value, name); | ||
185 | + getPathUrlName.value = decodeURIComponent(getName); | ||
205 | 186 | ||
206 | - const setRowClassName = async () => { | ||
207 | - if (getPathUrlName.value !== '') { | ||
208 | - const { items } = await deviceConfigGetQuery({ | ||
209 | - page: 1, | ||
210 | - pageSize: 10, | ||
211 | - name: getPathUrlName.value, | ||
212 | - }); | ||
213 | - nextTick(() => { | ||
214 | - setTableData(items); | ||
215 | - const { setFieldsValue, resetFields } = getForm(); | ||
216 | - setFieldsValue({ | ||
217 | - name: getPathUrlName.value, | ||
218 | - }); | ||
219 | - if (onCloseVal.value == 1) { | ||
220 | - resetFields(); | ||
221 | - } | ||
222 | - }); | ||
223 | - } else { | ||
224 | - setTimeout(() => { | ||
225 | - reload(); | ||
226 | - }, 80); | ||
227 | - } | ||
228 | - }; | ||
229 | - setRowClassName(); | ||
230 | - onUnmounted(() => { | ||
231 | - getPathUrlName.value = ''; | ||
232 | - onCloseVal.value = 1; | 187 | + const setRowClassName = async () => { |
188 | + if (getPathUrlName.value !== '') { | ||
189 | + const { items } = await deviceConfigGetQuery({ | ||
190 | + page: 1, | ||
191 | + pageSize: 10, | ||
192 | + name: getPathUrlName.value, | ||
233 | }); | 193 | }); |
234 | - const tableListRef = ref< | ||
235 | - { | ||
236 | - title: string; | ||
237 | - columns?: any[]; | ||
238 | - dataSource?: any[]; | ||
239 | - }[] | ||
240 | - >([]); | ||
241 | - | ||
242 | - function loadDataSuccess(excelDataList: ExcelData[]) { | ||
243 | - tableListRef.value = []; | ||
244 | - console.log(excelDataList); | ||
245 | - for (const excelData of excelDataList) { | ||
246 | - const { | ||
247 | - header, | ||
248 | - results, | ||
249 | - meta: { sheetName }, | ||
250 | - } = excelData; | ||
251 | - const columns: BasicColumn[] = []; | ||
252 | - for (const title of header) { | ||
253 | - columns.push({ title, dataIndex: title }); | ||
254 | - } | ||
255 | - tableListRef.value.push({ title: sheetName, dataSource: results, columns }); | ||
256 | - } | ||
257 | - } | ||
258 | - | ||
259 | - function handleCreate() { | ||
260 | - setTimeout(() => { | ||
261 | - openModal(true, { | ||
262 | - isUpdate: 1, | ||
263 | - }); | ||
264 | - }, 10); | ||
265 | - } | ||
266 | - | ||
267 | - function handleEdit(record: Recordable) { | ||
268 | - setTimeout(() => { | ||
269 | - openModal(true, { | ||
270 | - record, | ||
271 | - isUpdate: 2, | ||
272 | - isLostFocuxStatus: true, | ||
273 | - }); | ||
274 | - }, 10); | ||
275 | - } | ||
276 | - async function handleDetailView(record: Recordable) { | ||
277 | - setTimeout(() => { | ||
278 | - openModal(true, { | ||
279 | - record, | ||
280 | - isUpdate: 3, | ||
281 | - isLostFocuxStatus: true, | ||
282 | - }); | ||
283 | - }, 10); | ||
284 | - } | ||
285 | - const useSelectionChange = () => { | ||
286 | - selectedRowKeys = getSelectRowKeys(); | ||
287 | - if (selectedRowKeys.length > 0) { | ||
288 | - disabled.value = false; | ||
289 | - } | ||
290 | - const isJudge = getSelectRows().map((m) => m.default); | ||
291 | - if (isJudge.includes(true)) { | ||
292 | - disabled.value = true; | ||
293 | - } else { | ||
294 | - disabled.value = false; | ||
295 | - } | ||
296 | - if (isJudge.length === 0) { | ||
297 | - disabled.value = true; | 194 | + nextTick(() => { |
195 | + setTableData(items); | ||
196 | + const { setFieldsValue, resetFields } = getForm(); | ||
197 | + setFieldsValue({ | ||
198 | + name: getPathUrlName.value, | ||
199 | + }); | ||
200 | + if (onCloseVal.value == 1) { | ||
201 | + resetFields(); | ||
298 | } | 202 | } |
299 | - }; | 203 | + }); |
204 | + } else { | ||
205 | + setTimeout(() => { | ||
206 | + reload(); | ||
207 | + }, 80); | ||
208 | + } | ||
209 | + }; | ||
210 | + setRowClassName(); | ||
211 | + onUnmounted(() => { | ||
212 | + getPathUrlName.value = ''; | ||
213 | + onCloseVal.value = 1; | ||
214 | + }); | ||
215 | + const tableListRef = ref< | ||
216 | + { | ||
217 | + title: string; | ||
218 | + columns?: any[]; | ||
219 | + dataSource?: any[]; | ||
220 | + }[] | ||
221 | + >([]); | ||
300 | 222 | ||
301 | - function handleDelete(record: Recordable) { | ||
302 | - let ids = [record.id]; | ||
303 | - deviceConfigDelete(ids).then(() => { | ||
304 | - createMessage.success('删除设备配置成功'); | ||
305 | - handleSuccess(); | ||
306 | - }); | 223 | + function loadDataSuccess(excelDataList: ExcelData[]) { |
224 | + tableListRef.value = []; | ||
225 | + console.log(excelDataList); | ||
226 | + for (const excelData of excelDataList) { | ||
227 | + const { | ||
228 | + header, | ||
229 | + results, | ||
230 | + meta: { sheetName }, | ||
231 | + } = excelData; | ||
232 | + const columns: BasicColumn[] = []; | ||
233 | + for (const title of header) { | ||
234 | + columns.push({ title, dataIndex: title }); | ||
307 | } | 235 | } |
236 | + tableListRef.value.push({ title: sheetName, dataSource: results, columns }); | ||
237 | + } | ||
238 | + } | ||
239 | + //新增 | ||
240 | + function handleCreate() { | ||
241 | + openModal(true, { | ||
242 | + isUpdate: true, | ||
243 | + isView: false, | ||
244 | + }); | ||
245 | + } | ||
246 | + //编辑 | ||
247 | + function handleEdit(record: Recordable) { | ||
248 | + openModal(true, { | ||
249 | + record, | ||
250 | + isUpdate: false, | ||
251 | + isView: false, | ||
252 | + }); | ||
253 | + } | ||
254 | + //详情 | ||
255 | + function handleDetailView(record: Recordable) { | ||
256 | + openModal(true, { | ||
257 | + record, | ||
258 | + isUpdate: false, | ||
259 | + isView: true, | ||
260 | + }); | ||
261 | + } | ||
308 | 262 | ||
309 | - function defaultHeader({ filename, bookType }: ExportModalResult) { | ||
310 | - // 默认Object.keys(data[0])作为header | ||
311 | - const data = exportData.value; | ||
312 | - jsonToSheetXlsx({ | ||
313 | - data, | ||
314 | - filename, | ||
315 | - write2excelOpts: { | ||
316 | - bookType, | ||
317 | - }, | ||
318 | - }); | ||
319 | - } | ||
320 | - //导出 | ||
321 | - const handleExport = (record: Recordable) => { | ||
322 | - exportData.value = []; | ||
323 | - exportData.value.push({ | ||
324 | - createTime: record.createTime, | ||
325 | - description: record.description, | ||
326 | - name: record.name, | ||
327 | - }); | ||
328 | - nextTick(() => { | ||
329 | - openModalExcel(); | ||
330 | - expExcelModalRef.value?.clearFieldFunc(); | ||
331 | - }); | ||
332 | - }; | ||
333 | - //导入 | ||
334 | - function handleImport() { | ||
335 | - console.log('record'); | ||
336 | - } | ||
337 | - function handleSuccess() { | ||
338 | - reload(); | ||
339 | - } | 263 | + function defaultHeader({ filename, bookType }: ExportModalResult) { |
264 | + // 默认Object.keys(data[0])作为header | ||
265 | + const data = exportData.value; | ||
266 | + jsonToSheetXlsx({ | ||
267 | + data, | ||
268 | + filename, | ||
269 | + write2excelOpts: { | ||
270 | + bookType, | ||
271 | + }, | ||
272 | + }); | ||
273 | + } | ||
274 | + //导出 | ||
275 | + const handleExport = (record: Recordable) => { | ||
276 | + exportData.value = []; | ||
277 | + exportData.value.push({ | ||
278 | + createTime: record.createTime, | ||
279 | + description: record.description, | ||
280 | + name: record.name, | ||
281 | + }); | ||
282 | + nextTick(() => { | ||
283 | + openModalExcel(); | ||
284 | + expExcelModalRef.value?.clearFieldFunc(); | ||
285 | + }); | ||
286 | + }; | ||
287 | + //导入 | ||
288 | + function handleImport() { | ||
289 | + console.log('record'); | ||
290 | + } | ||
291 | + function handleSuccess() { | ||
292 | + reload(); | ||
293 | + } | ||
340 | 294 | ||
341 | - const handleSetDefault = async (record: Recordable) => { | ||
342 | - let id = record.id; | ||
343 | - const obj = { | ||
344 | - headers: { | ||
345 | - normalizedNames: {}, | ||
346 | - lazyUpdate: null, | ||
347 | - }, | ||
348 | - params: { | ||
349 | - updates: null, | ||
350 | - cloneFrom: null, | ||
351 | - encoder: {}, | ||
352 | - map: null, | ||
353 | - interceptorConfig: { | ||
354 | - ignoreLoading: false, | ||
355 | - ignoreErrors: false, | ||
356 | - resendRequest: false, | ||
357 | - }, | ||
358 | - }, | ||
359 | - }; | ||
360 | - const data = await setDeviceProfileIsDefaultApi(id, 'default', obj); | ||
361 | - if (!data) return createMessage.error('设置该设备配置为默认失败'); | ||
362 | - createMessage.success('设置该设备配置为默认成功'); | ||
363 | - reload(); | ||
364 | - disabled.value = true; | ||
365 | - }; | ||
366 | - return { | ||
367 | - handleSetDefault, | ||
368 | - disabled, | ||
369 | - deviceDetailRef, | ||
370 | - registerExportModal, | ||
371 | - defaultHeader, | ||
372 | - useSelectionChange, | ||
373 | - tableListRef, | ||
374 | - loadDataSuccess, | ||
375 | - handleImport, | ||
376 | - handleExport, | ||
377 | - handleDetailView, | ||
378 | - registerTable, | ||
379 | - handleCreate, | ||
380 | - handleEdit, | ||
381 | - handleDelete, | ||
382 | - handleSuccess, | ||
383 | - registerModal, | ||
384 | - hasBatchDelete, | ||
385 | - handleDeleteOrBatchDelete, | ||
386 | - expExcelModalRef, | ||
387 | - }; | ||
388 | - }, | ||
389 | - }); | 295 | + const handleSetDefault = async (record: Recordable) => { |
296 | + let id = record.id; | ||
297 | + const data = await setDeviceProfileIsDefaultApi(id, 'default', defaultObj); | ||
298 | + if (!data) return createMessage.error('设置该设备配置为默认失败'); | ||
299 | + createMessage.success('设置该设备配置为默认成功'); | ||
300 | + reload(); | ||
301 | + disabled.value = true; | ||
302 | + }; | ||
390 | </script> | 303 | </script> |
391 | 304 | ||
392 | <style lang="css"> | 305 | <style lang="css"> |
393 | .devide-profiles .rowcolor { | 306 | .devide-profiles .rowcolor { |
394 | color: red; | 307 | color: red; |
395 | } | 308 | } |
309 | + | ||
396 | .devide-profiles .rowcolor2 { | 310 | .devide-profiles .rowcolor2 { |
397 | background: #a2c3e6; | 311 | background: #a2c3e6; |
398 | } | 312 | } |
src/views/device/profiles/step/DeviceConfigurationStep.vue
renamed from
src/views/device/profiles/step/DeviceProfileStep1.vue
@@ -4,9 +4,21 @@ | @@ -4,9 +4,21 @@ | ||
4 | <div> | 4 | <div> |
5 | <BasicForm @register="register"> | 5 | <BasicForm @register="register"> |
6 | <template #imageSelect> | 6 | <template #imageSelect> |
7 | - <Upload style="width: 20vw" name="avatar" list-type="picture-card" class="avatar-uploader" | ||
8 | - :show-upload-list="false" :customRequest="customUploadqrcodePic" :before-upload="beforeUploadqrcodePic"> | ||
9 | - <img v-if="peresonalPic" :src="peresonalPic" alt="avatar" style="width: 6.25rem; height: 6.25rem" /> | 7 | + <Upload |
8 | + style="width: 20vw" | ||
9 | + name="avatar" | ||
10 | + list-type="picture-card" | ||
11 | + class="avatar-uploader" | ||
12 | + :show-upload-list="false" | ||
13 | + :customRequest="customUploadqrcodePic" | ||
14 | + :before-upload="beforeUploadqrcodePic" | ||
15 | + > | ||
16 | + <img | ||
17 | + v-if="deviceConfigPic" | ||
18 | + :src="deviceConfigPic" | ||
19 | + alt="" | ||
20 | + style="width: 6.25rem; height: 6.25rem" | ||
21 | + /> | ||
10 | <div v-else> | 22 | <div v-else> |
11 | <LoadingOutlined v-if="loading" /> | 23 | <LoadingOutlined v-if="loading" /> |
12 | <PlusOutlined v-else /> | 24 | <PlusOutlined v-else /> |
@@ -19,162 +31,95 @@ | @@ -19,162 +31,95 @@ | ||
19 | </div> | 31 | </div> |
20 | </div> | 32 | </div> |
21 | </template> | 33 | </template> |
22 | -<script lang="ts"> | ||
23 | -import { defineComponent, ref } from 'vue'; | ||
24 | -import { BasicForm, useForm } from '/@/components/Form'; | ||
25 | -import { step1Schemas } from './data'; | ||
26 | -import { Select, Input, Divider } from 'ant-design-vue'; | ||
27 | -import { uploadApi } from '/@/api/personal/index'; | ||
28 | -import { Upload } from 'ant-design-vue'; | ||
29 | -import { PlusOutlined, LoadingOutlined } from '@ant-design/icons-vue'; | ||
30 | -import { useMessage } from '/@/hooks/web/useMessage'; | ||
31 | -import type { FileItem } from '/@/components/Upload/src/typing'; | 34 | +<script lang="ts" setup> |
35 | + import { ref } from 'vue'; | ||
36 | + import { BasicForm, useForm } from '/@/components/Form'; | ||
37 | + import { step1Schemas } from './data'; | ||
38 | + import { uploadApi } from '/@/api/personal/index'; | ||
39 | + import { Upload } from 'ant-design-vue'; | ||
40 | + import { PlusOutlined, LoadingOutlined } from '@ant-design/icons-vue'; | ||
41 | + import { useMessage } from '/@/hooks/web/useMessage'; | ||
42 | + import type { FileItem } from '/@/components/Upload/src/typing'; | ||
32 | 43 | ||
33 | -export default defineComponent({ | ||
34 | - components: { | ||
35 | - BasicForm, | ||
36 | - [Select.name]: Select, | ||
37 | - [Input.name]: Input, | ||
38 | - [Input.Group.name]: Input.Group, | ||
39 | - [Divider.name]: Divider, | ||
40 | - Upload, | ||
41 | - PlusOutlined, | ||
42 | - LoadingOutlined, | ||
43 | - }, | ||
44 | - emits: ['next', 'resetFunc', 'register'], | ||
45 | - setup(_, { emit }) { | ||
46 | - const loading = ref(false); | 44 | + const emits = defineEmits(['next']); |
45 | + const loading = ref(false); | ||
46 | + const { createMessage } = useMessage(); | ||
47 | + const deviceConfigPic = ref(''); | ||
47 | 48 | ||
48 | - const { createMessage } = useMessage(); | ||
49 | - const peresonalPic = ref(''); | ||
50 | - | ||
51 | - const [register, { validate, setFieldsValue, resetFields, updateSchema }] = useForm({ | ||
52 | - labelWidth: 100, | ||
53 | - schemas: step1Schemas, | ||
54 | - actionColOptions: { | ||
55 | - span: 14, | ||
56 | - }, | ||
57 | - showResetButton: false, | ||
58 | - submitButtonOptions: { | ||
59 | - text: '下一步', | 49 | + const [register, { validate, setFieldsValue, resetFields, updateSchema }] = useForm({ |
50 | + labelWidth: 100, | ||
51 | + schemas: step1Schemas, | ||
52 | + actionColOptions: { | ||
53 | + span: 14, | ||
54 | + }, | ||
55 | + showResetButton: false, | ||
56 | + submitButtonOptions: { | ||
57 | + text: '下一步', | ||
58 | + }, | ||
59 | + submitFunc: customSubmitFunc, | ||
60 | + }); | ||
61 | + const editOrAddNameStatus = (nameStatus) => | ||
62 | + updateSchema({ | ||
63 | + field: 'name', | ||
64 | + componentProps: { | ||
65 | + disabled: nameStatus, | ||
60 | }, | 66 | }, |
61 | - submitFunc: customSubmitFunc, | ||
62 | }); | 67 | }); |
63 | - const editOrAddNameStatus = (nameStatus) => updateSchema({ | ||
64 | - field: 'name', componentProps: { | ||
65 | - disabled: nameStatus | ||
66 | - } | ||
67 | - }) | ||
68 | - //回显数据 | ||
69 | - const setStepOneFieldsValueFunc = (v) => { | ||
70 | - setFieldsValue(v); | ||
71 | - peresonalPic.value = v.image; | ||
72 | - }; | ||
73 | - const customUploadqrcodePic = async ({ file }) => { | ||
74 | - if (beforeUploadqrcodePic(file)) { | ||
75 | - peresonalPic.value = ''; | ||
76 | - loading.value = true; | ||
77 | - const formData = new FormData(); | ||
78 | - formData.append('file', file); | ||
79 | - const response = await uploadApi(formData); | ||
80 | - if (response.fileStaticUri) { | ||
81 | - peresonalPic.value = response.fileStaticUri; | ||
82 | - loading.value = false; | ||
83 | - } | 68 | + const customUploadqrcodePic = async ({ file }) => { |
69 | + if (beforeUploadqrcodePic(file)) { | ||
70 | + deviceConfigPic.value = ''; | ||
71 | + loading.value = true; | ||
72 | + const formData = new FormData(); | ||
73 | + formData.append('file', file); | ||
74 | + const response = await uploadApi(formData); | ||
75 | + if (response.fileStaticUri) { | ||
76 | + deviceConfigPic.value = response.fileStaticUri; | ||
77 | + loading.value = false; | ||
84 | } | 78 | } |
85 | - }; | ||
86 | - const beforeUploadqrcodePic = (file: FileItem) => { | ||
87 | - const isJpgOrPng = | ||
88 | - file.type === 'image/jpeg' || file.type === 'image/png' || file.type === 'image/jpg'; | ||
89 | - if (!isJpgOrPng) { | ||
90 | - createMessage.error('只能上传图片文件!'); | ||
91 | - } | ||
92 | - const isLt2M = (file.size as number) / 1024 / 1024 < 5; | ||
93 | - if (!isLt2M) { | ||
94 | - createMessage.error('图片大小不能超过5MB!'); | ||
95 | - } | ||
96 | - return isJpgOrPng && isLt2M; | ||
97 | - }; | ||
98 | - | ||
99 | - async function customSubmitFunc() { | ||
100 | - const values = await validate(); | ||
101 | - emit('next', values, peresonalPic.value); | ||
102 | } | 79 | } |
103 | - //清空数据 | ||
104 | - const customResetStepOneFunc = () => { | ||
105 | - resetFields(); | ||
106 | - peresonalPic.value = ''; | ||
107 | - }; | ||
108 | - const getStep1Func = async () => { | ||
109 | - const valueStep1 = await validate(); | ||
110 | - const pic = peresonalPic.value; | ||
111 | - return { | ||
112 | - key: valueStep1, | ||
113 | - icon: pic, | ||
114 | - }; | ||
115 | - }; | ||
116 | - return { | ||
117 | - register, | ||
118 | - setStepOneFieldsValueFunc, | ||
119 | - customResetStepOneFunc, | ||
120 | - uploadApi, | ||
121 | - peresonalPic, | ||
122 | - beforeUploadqrcodePic, | ||
123 | - customUploadqrcodePic, | ||
124 | - getStep1Func, | ||
125 | - loading, | ||
126 | - editOrAddNameStatus | ||
127 | - }; | ||
128 | - }, | ||
129 | -}); | ||
130 | -</script> | ||
131 | -<style lang="less" scoped> | ||
132 | -.step1 { | ||
133 | - &-form { | ||
134 | - width: 500px; | ||
135 | - margin: 0 auto; | ||
136 | - } | ||
137 | - | ||
138 | - h3 { | ||
139 | - margin: 0 0 12px; | ||
140 | - font-size: 16px; | ||
141 | - line-height: 32px; | ||
142 | - color: @text-color; | ||
143 | - } | ||
144 | - | ||
145 | - h4 { | ||
146 | - margin: 0 0 4px; | ||
147 | - font-size: 14px; | ||
148 | - line-height: 22px; | ||
149 | - color: @text-color; | ||
150 | - } | ||
151 | - | ||
152 | - p { | ||
153 | - color: @text-color; | ||
154 | - } | ||
155 | - | ||
156 | - .device-icon-style { | ||
157 | - :deep .ant-upload-select-picture-card { | ||
158 | - display: inherit; | ||
159 | - float: none; | ||
160 | - width: 4.9vw; | ||
161 | - height: 9.5vh; | ||
162 | - margin-right: 8px; | ||
163 | - text-align: center; | ||
164 | - vertical-align: top; | ||
165 | - background-color: #fafafa; | ||
166 | - border: 1px dashed #d9d9d9; | ||
167 | - cursor: pointer; | ||
168 | - transition: border-color 0.3s ease; | 80 | + }; |
81 | + const beforeUploadqrcodePic = (file: FileItem) => { | ||
82 | + const isJpgOrPng = | ||
83 | + file.type === 'image/jpeg' || file.type === 'image/png' || file.type === 'image/jpg'; | ||
84 | + if (!isJpgOrPng) { | ||
85 | + createMessage.error('只能上传图片文件!'); | ||
169 | } | 86 | } |
87 | + const isLt2M = (file.size as number) / 1024 / 1024 < 5; | ||
88 | + if (!isLt2M) { | ||
89 | + createMessage.error('图片大小不能超过5MB!'); | ||
90 | + } | ||
91 | + return isJpgOrPng && isLt2M; | ||
92 | + }; | ||
93 | + //回显数据 | ||
94 | + const setFormData = (v) => { | ||
95 | + setFieldsValue(v); | ||
96 | + deviceConfigPic.value = v.image; | ||
97 | + }; | ||
98 | + async function customSubmitFunc() { | ||
99 | + const values = await validate(); | ||
100 | + if (!values) return; | ||
101 | + emits('next', true, null); | ||
170 | } | 102 | } |
171 | -} | ||
172 | - | ||
173 | -.pay-select { | ||
174 | - width: 20%; | ||
175 | -} | 103 | + //获取数据 |
104 | + async function getFormData() { | ||
105 | + const values = await validate(); | ||
106 | + if (!values) return; | ||
107 | + Reflect.set(values, 'image', deviceConfigPic.value); | ||
108 | + return values; | ||
109 | + } | ||
110 | + //清空数据 | ||
111 | + const resetFormData = () => { | ||
112 | + resetFields(); | ||
113 | + deviceConfigPic.value = ''; | ||
114 | + }; | ||
176 | 115 | ||
177 | -.pay-input { | ||
178 | - width: 70%; | ||
179 | -} | 116 | + defineExpose({ |
117 | + editOrAddNameStatus, | ||
118 | + setFormData, | ||
119 | + resetFormData, | ||
120 | + getFormData, | ||
121 | + }); | ||
122 | +</script> | ||
123 | +<style lang="less" scoped> | ||
124 | + @import url('./common/DeviceConfigurationSetp.less'); | ||
180 | </style> | 125 | </style> |
src/views/device/profiles/step/TransportConfigurationStep.vue
renamed from
src/views/device/profiles/step/DeviceProfileStep2.vue
@@ -27,17 +27,7 @@ | @@ -27,17 +27,7 @@ | ||
27 | <div style="margin-top: 5vh" v-else-if="isMqttType == 'SNMP'"> | 27 | <div style="margin-top: 5vh" v-else-if="isMqttType == 'SNMP'"> |
28 | <SnmpCpns ref="snmpRef" /> | 28 | <SnmpCpns ref="snmpRef" /> |
29 | </div> | 29 | </div> |
30 | - <div | ||
31 | - style=" | ||
32 | - display: flex; | ||
33 | - width: 11vw; | ||
34 | - height: 8vh; | ||
35 | - flex-direction: row; | ||
36 | - justify-content: space-between; | ||
37 | - margin-left: 19vw; | ||
38 | - margin-top: -0.35vh; | ||
39 | - " | ||
40 | - > | 30 | + <div class="btn-style"> |
41 | <div style="display: flex; width: 4vw; height: 4vh; margin-top: 1.65vh"> | 31 | <div style="display: flex; width: 4vw; height: 4vh; margin-top: 1.65vh"> |
42 | <Button type="default" style="border-radius: 2px" class="mt-5" @click="customResetFunc" | 32 | <Button type="default" style="border-radius: 2px" class="mt-5" @click="customResetFunc" |
43 | >上一步</Button | 33 | >上一步</Button |
@@ -47,137 +37,101 @@ | @@ -47,137 +37,101 @@ | ||
47 | </div> | 37 | </div> |
48 | </div> | 38 | </div> |
49 | </template> | 39 | </template> |
50 | -<script lang="ts"> | ||
51 | - import { defineComponent, reactive, ref, getCurrentInstance, onUnmounted, nextTick } from 'vue'; | 40 | +<script lang="ts" setup> |
41 | + import { reactive, ref, onUnmounted, nextTick } from 'vue'; | ||
52 | import { BasicForm, useForm } from '/@/components/Form'; | 42 | import { BasicForm, useForm } from '/@/components/Form'; |
53 | import { step2Schemas } from './data'; | 43 | import { step2Schemas } from './data'; |
54 | - import { Alert, Divider, Descriptions } from 'ant-design-vue'; | ||
55 | import { Button } from '/@/components/Button'; | 44 | import { Button } from '/@/components/Button'; |
56 | - import MqttCpns from '../step/cpns/mqtt/Mqtt.vue'; | ||
57 | - import CoapCpns from '../step/cpns/coap/Coap.vue'; | ||
58 | - import Lwm2mCpns from '../step/cpns/lwm2m/index.vue'; | ||
59 | - import SnmpCpns from '../step/cpns/snmp/index.vue'; | 45 | + import MqttCpns from './cpns/mqtt/Mqtt.vue'; |
46 | + import CoapCpns from './cpns/coap/Coap.vue'; | ||
47 | + import Lwm2mCpns from './cpns/lwm2m/index.vue'; | ||
48 | + import SnmpCpns from './cpns/snmp/index.vue'; | ||
60 | 49 | ||
61 | - export default defineComponent({ | ||
62 | - components: { | ||
63 | - BasicForm, | ||
64 | - [Alert.name]: Alert, | ||
65 | - [Divider.name]: Divider, | ||
66 | - [Descriptions.name]: Descriptions, | ||
67 | - [Descriptions.Item.name]: Descriptions.Item, | ||
68 | - Button, | ||
69 | - MqttCpns, | ||
70 | - CoapCpns, | ||
71 | - Lwm2mCpns, | ||
72 | - SnmpCpns, | 50 | + const emits = defineEmits(['prev']); |
51 | + const mqttRef = ref<InstanceType<typeof MqttCpns>>(); | ||
52 | + const coapRef = ref<InstanceType<typeof CoapCpns>>(); | ||
53 | + const lwm2mRef = ref<InstanceType<typeof Lwm2mCpns>>(); | ||
54 | + const snmpRef = ref<InstanceType<typeof SnmpCpns>>(); | ||
55 | + const isMqttType = ref(''); | ||
56 | + let step2Data = reactive({ | ||
57 | + transportConfiguration: {}, | ||
58 | + }); | ||
59 | + const [register, { validate, resetFields, setFieldsValue, updateSchema }] = useForm({ | ||
60 | + labelWidth: 80, | ||
61 | + schemas: step2Schemas, | ||
62 | + actionColOptions: { | ||
63 | + span: 14, | ||
73 | }, | 64 | }, |
74 | - emits: ['next', 'prev', 'register'], | ||
75 | - setup(_, { emit }) { | ||
76 | - const { proxy } = getCurrentInstance() as any; | ||
77 | - const mqttRef = ref(null); | ||
78 | - const coapRef = ref(null); | ||
79 | - const lwm2mRef = ref(null); | ||
80 | - const snmpRef = ref(null); | ||
81 | - const isMqttType = ref(''); | ||
82 | - let step2Data = reactive({ | ||
83 | - transportConfiguration: {}, | ||
84 | - }); | ||
85 | - const [register, { validate, resetFields, setFieldsValue, updateSchema }] = useForm({ | ||
86 | - labelWidth: 80, | ||
87 | - schemas: step2Schemas, | ||
88 | - actionColOptions: { | ||
89 | - span: 14, | ||
90 | - }, | ||
91 | - }); | ||
92 | - const setStepTwoFieldsValueFunc = (v) => { | ||
93 | - setFieldsValue({ | ||
94 | - transportType: v?.profileData?.transportConfiguration?.type, | ||
95 | - }); | ||
96 | - isMqttType.value = v?.profileData?.transportConfiguration?.type; | ||
97 | - setTimeout(() => { | ||
98 | - proxy.$refs.mqttRef?.setStepFieldsValueFunc(v?.profileData?.transportConfiguration); | ||
99 | - proxy.$refs.coapRef?.setStepFieldsValueFunc(v?.profileData?.transportConfiguration); | ||
100 | - proxy.$refs.lwm2mRef?.setStepFieldsValueFunc(v?.profileData?.transportConfiguration); | ||
101 | - proxy.$refs.snmpRef?.setStepFieldsValueFunc(v?.profileData?.transportConfiguration); | ||
102 | - }, 100); | ||
103 | - }; | 65 | + }); |
66 | + const setFormData = (v) => { | ||
67 | + setFieldsValue({ | ||
68 | + transportType: v?.profileData?.transportConfiguration?.type, | ||
69 | + }); | ||
70 | + isMqttType.value = v?.profileData?.transportConfiguration?.type; | ||
71 | + mqttRef.value?.setFormData(v?.profileData?.transportConfiguration); | ||
72 | + coapRef.value?.setFormData(v?.profileData?.transportConfiguration); | ||
73 | + lwm2mRef.value?.setFormData(v?.profileData?.transportConfiguration); | ||
74 | + snmpRef.value?.setFormData(v?.profileData?.transportConfiguration); | ||
75 | + }; | ||
104 | 76 | ||
105 | - const customClearStepTwoValueFunc = () => { | ||
106 | - isMqttType.value = ''; | ||
107 | - resetFields(); | ||
108 | - nextTick(() => { | ||
109 | - proxy.$refs.mqttRef?.resetStepFieldsValueFunc(); | ||
110 | - proxy.$refs.coapRef?.resetStepFieldsValueFunc(); | ||
111 | - proxy.$refs.lwm2mRef?.resetStepFieldsValueFunc(); | ||
112 | - }); | ||
113 | - }; | ||
114 | - async function customResetFunc() { | ||
115 | - emit('prev'); | ||
116 | - } | ||
117 | - nextTick(() => { | ||
118 | - updateSchema({ | ||
119 | - field: 'transportType', | ||
120 | - componentProps() { | ||
121 | - return { | ||
122 | - options: [ | ||
123 | - { label: '默认', value: 'DEFAULT' }, | ||
124 | - { label: 'MQTT', value: 'MQTT' }, | ||
125 | - { label: 'CoAP', value: 'COAP' }, | ||
126 | - { label: 'LWM2M', value: 'LWM2M' }, | ||
127 | - { label: 'SNMP', value: 'SNMP' }, | ||
128 | - ], | ||
129 | - onChange(e) { | ||
130 | - isMqttType.value = e; | ||
131 | - }, | ||
132 | - }; | 77 | + const resetFormData = () => { |
78 | + isMqttType.value = ''; | ||
79 | + resetFields(); | ||
80 | + nextTick(() => { | ||
81 | + mqttRef.value?.resetFormData(); | ||
82 | + coapRef.value?.resetFormData(); | ||
83 | + lwm2mRef.value?.resetFormData(); | ||
84 | + snmpRef.value?.resetFormData(); | ||
85 | + }); | ||
86 | + }; | ||
87 | + async function customResetFunc() { | ||
88 | + emits('prev'); | ||
89 | + } | ||
90 | + nextTick(() => { | ||
91 | + updateSchema({ | ||
92 | + field: 'transportType', | ||
93 | + componentProps() { | ||
94 | + return { | ||
95 | + options: [ | ||
96 | + { label: '默认', value: 'DEFAULT' }, | ||
97 | + { label: 'MQTT', value: 'MQTT' }, | ||
98 | + { label: 'CoAP', value: 'COAP' }, | ||
99 | + { label: 'LWM2M', value: 'LWM2M' }, | ||
100 | + { label: 'SNMP', value: 'SNMP' }, | ||
101 | + ], | ||
102 | + onChange(e) { | ||
103 | + isMqttType.value = e; | ||
133 | }, | 104 | }, |
134 | - }); | ||
135 | - }); | ||
136 | - onUnmounted(() => { | ||
137 | - isMqttType.value = ''; | ||
138 | - }); | ||
139 | - const getStep2DataFunc = async () => { | ||
140 | - const val = await validate(); | ||
141 | - if (!val) return; | ||
142 | - const getMqttVal = await proxy.$refs.mqttRef?.getDataFunc(); | ||
143 | - const getCoapVal = await proxy.$refs.coapRef?.getDataFunc(); | ||
144 | - const getLwm2mVal = await proxy.$refs.lwm2mRef?.getDataFunc(); | ||
145 | - const getSnmpVal = await proxy.$refs.snmpRef?.getSnmpForm(); | ||
146 | - step2Data.transportConfiguration = { | ||
147 | - ...getMqttVal, | ||
148 | - ...getCoapVal, | ||
149 | - ...getLwm2mVal, | ||
150 | - ...getSnmpVal, | ||
151 | - ...val, | ||
152 | }; | 105 | }; |
153 | - return step2Data; | ||
154 | - }; | ||
155 | - return { | ||
156 | - customResetFunc, | ||
157 | - register, | ||
158 | - setStepTwoFieldsValueFunc, | ||
159 | - customClearStepTwoValueFunc, | ||
160 | - getStep2DataFunc, | ||
161 | - isMqttType, | ||
162 | - mqttRef, | ||
163 | - coapRef, | ||
164 | - lwm2mRef, | ||
165 | - snmpRef, | ||
166 | - }; | ||
167 | - }, | 106 | + }, |
107 | + }); | ||
108 | + }); | ||
109 | + onUnmounted(() => { | ||
110 | + isMqttType.value = ''; | ||
111 | + }); | ||
112 | + const getFormData = async () => { | ||
113 | + const val = await validate(); | ||
114 | + if (!val) return; | ||
115 | + const getMqttVal = await mqttRef.value?.getFormData(); | ||
116 | + const getCoapVal = await coapRef.value?.getFormData(); | ||
117 | + const getLwm2mVal = await lwm2mRef.value?.getFormData(); | ||
118 | + const getSnmpVal = await snmpRef.value?.getFormData(); | ||
119 | + step2Data.transportConfiguration = { | ||
120 | + ...getMqttVal, | ||
121 | + ...getCoapVal, | ||
122 | + ...getLwm2mVal, | ||
123 | + ...getSnmpVal, | ||
124 | + ...val, | ||
125 | + }; | ||
126 | + return step2Data; | ||
127 | + }; | ||
128 | + | ||
129 | + defineExpose({ | ||
130 | + getFormData, | ||
131 | + resetFormData, | ||
132 | + setFormData, | ||
168 | }); | 133 | }); |
169 | </script> | 134 | </script> |
170 | <style lang="less" scoped> | 135 | <style lang="less" scoped> |
171 | - .step2-style { | ||
172 | - margin: 0vh 0.6vw; | ||
173 | - border-radius: 4px; | ||
174 | - } | ||
175 | - | ||
176 | - ::-webkit-scrollbar { | ||
177 | - display: none; | ||
178 | - } | ||
179 | - :deep(.ant-btn) { | ||
180 | - color: white; | ||
181 | - background: #377dff; | ||
182 | - } | 136 | + @import url('./common/TransportConfigurationStep.less'); |
183 | </style> | 137 | </style> |
1 | +.step1 { | ||
2 | + &-form { | ||
3 | + width: 500px; | ||
4 | + margin: 0 auto; | ||
5 | + } | ||
6 | + | ||
7 | + h3 { | ||
8 | + margin: 0 0 12px; | ||
9 | + font-size: 16px; | ||
10 | + line-height: 32px; | ||
11 | + color: @text-color; | ||
12 | + } | ||
13 | + | ||
14 | + h4 { | ||
15 | + margin: 0 0 4px; | ||
16 | + font-size: 14px; | ||
17 | + line-height: 22px; | ||
18 | + color: @text-color; | ||
19 | + } | ||
20 | + | ||
21 | + p { | ||
22 | + color: @text-color; | ||
23 | + } | ||
24 | + | ||
25 | + .device-icon-style { | ||
26 | + :deep .ant-upload-select-picture-card { | ||
27 | + display: inherit; | ||
28 | + float: none; | ||
29 | + width: 4.9vw; | ||
30 | + height: 9.5vh; | ||
31 | + margin-right: 8px; | ||
32 | + text-align: center; | ||
33 | + vertical-align: top; | ||
34 | + background-color: #fafafa; | ||
35 | + border: 1px dashed #d9d9d9; | ||
36 | + cursor: pointer; | ||
37 | + transition: border-color 0.3s ease; | ||
38 | + } | ||
39 | + } | ||
40 | +} | ||
41 | + | ||
42 | +.pay-select { | ||
43 | + width: 20%; | ||
44 | +} | ||
45 | + | ||
46 | +.pay-input { | ||
47 | + width: 70%; | ||
48 | +} |
1 | +.step2-style { | ||
2 | + margin: 0 0.6vw; | ||
3 | + border-radius: 4px; | ||
4 | + | ||
5 | + .btn-style { | ||
6 | + display: flex; | ||
7 | + width: 11vw; | ||
8 | + height: 8vh; | ||
9 | + flex-direction: row; | ||
10 | + justify-content: space-between; | ||
11 | + margin-left: 19vw; | ||
12 | + margin-top: -0.35vh; | ||
13 | + } | ||
14 | +} | ||
15 | + | ||
16 | +::-webkit-scrollbar { | ||
17 | + display: none; | ||
18 | +} | ||
19 | + | ||
20 | +:deep(.ant-btn) { | ||
21 | + color: white; | ||
22 | + background: #377dff; | ||
23 | +} |
@@ -5,129 +5,87 @@ | @@ -5,129 +5,87 @@ | ||
5 | </div> | 5 | </div> |
6 | </div> | 6 | </div> |
7 | </template> | 7 | </template> |
8 | -<script lang="ts"> | ||
9 | - import { defineComponent, reactive } from 'vue'; | 8 | +<script lang="ts" setup> |
9 | + import { reactive } from 'vue'; | ||
10 | import { BasicForm, useForm } from '/@/components/Form'; | 10 | import { BasicForm, useForm } from '/@/components/Form'; |
11 | import { | 11 | import { |
12 | CoapSchemas, | 12 | CoapSchemas, |
13 | - deviceTelemetryProtoSchemaData, | ||
14 | - deviceAttributesProtoSchemaData, | ||
15 | - deviceRpcRequestProtoSchemaData, | ||
16 | - deviceRpcResponseProtoSchemaData, | 13 | + // deviceTelemetryProtoSchemaData, |
14 | + // deviceAttributesProtoSchemaData, | ||
15 | + // deviceRpcRequestProtoSchemaData, | ||
16 | + // deviceRpcResponseProtoSchemaData, | ||
17 | } from './Coap'; | 17 | } from './Coap'; |
18 | - import { Alert, Divider, Descriptions } from 'ant-design-vue'; | ||
19 | 18 | ||
20 | - export default defineComponent({ | ||
21 | - components: { | ||
22 | - BasicForm, | ||
23 | - [Alert.name]: Alert, | ||
24 | - [Divider.name]: Divider, | ||
25 | - [Descriptions.name]: Descriptions, | ||
26 | - [Descriptions.Item.name]: Descriptions.Item, | 19 | + const emits = defineEmits(['prev']); |
20 | + let coapAllData = reactive({}); | ||
21 | + const transportCoapData: any = reactive({ | ||
22 | + coapDeviceTypeConfiguration: { | ||
23 | + coapDeviceType: null, | ||
24 | + transportPayloadTypeConfiguration: { | ||
25 | + transportPayloadType: null, | ||
26 | + deviceTelemetryProtoSchema: null, | ||
27 | + deviceAttributesProtoSchema: null, | ||
28 | + deviceRpcRequestProtoSchema: null, | ||
29 | + deviceRpcResponseProtoSchema: null, | ||
30 | + }, | ||
27 | }, | 31 | }, |
32 | + clientSettings: { | ||
33 | + powerMode: null, | ||
34 | + edrxCycle: null, | ||
35 | + pagingTransmissionWindow: null, | ||
36 | + psmActivityTimer: null, | ||
37 | + }, | ||
38 | + type: 'COAP', | ||
39 | + }); | ||
28 | 40 | ||
29 | - emits: ['next', 'prev', 'register'], | ||
30 | - setup(_, { emit }) { | ||
31 | - let coapAllData = reactive({}); | ||
32 | - const transportCoapData: any = reactive({ | ||
33 | - coapDeviceTypeConfiguration: { | ||
34 | - coapDeviceType: null, | ||
35 | - transportPayloadTypeConfiguration: { | ||
36 | - transportPayloadType: null, | ||
37 | - deviceTelemetryProtoSchema: null, | ||
38 | - deviceAttributesProtoSchema: null, | ||
39 | - deviceRpcRequestProtoSchema: null, | ||
40 | - deviceRpcResponseProtoSchema: null, | ||
41 | - }, | ||
42 | - }, | ||
43 | - clientSettings: { | ||
44 | - powerMode: null, | ||
45 | - edrxCycle: null, | ||
46 | - pagingTransmissionWindow: null, | ||
47 | - psmActivityTimer: null, | ||
48 | - }, | ||
49 | - type: 'COAP', | ||
50 | - }); | ||
51 | - | ||
52 | - const [register, { validate, resetFields, setFieldsValue }] = useForm({ | ||
53 | - labelWidth: 200, | ||
54 | - schemas: CoapSchemas, | ||
55 | - actionColOptions: { | ||
56 | - span: 14, | ||
57 | - }, | ||
58 | - }); | ||
59 | - const setStepFieldsValueFunc = (v) => { | ||
60 | - setFieldsValue({ | ||
61 | - coapDeviceType: v?.coapDeviceTypeConfiguration?.coapDeviceType, | ||
62 | - transportPayloadType: | ||
63 | - v?.coapDeviceTypeConfiguration?.transportPayloadTypeConfiguration?.transportPayloadType, | ||
64 | - powerMode: v?.clientSettings.powerMode, | ||
65 | - psmActivityTimer: v.clientSettings?.psmActivityTimer, | ||
66 | - edrxCycle: v?.clientSettings.edrxCycle, | ||
67 | - pagingTransmissionWindow: v.clientSettings?.pagingTransmissionWindow, | ||
68 | - deviceTelemetryProtoSchema: | ||
69 | - v?.coapDeviceTypeConfiguration?.transportPayloadTypeConfiguration | ||
70 | - ?.deviceTelemetryProtoSchema == null | ||
71 | - ? deviceTelemetryProtoSchemaData | ||
72 | - : v?.coapDeviceTypeConfiguration?.transportPayloadTypeConfiguration | ||
73 | - ?.deviceTelemetryProtoSchema, | ||
74 | - deviceAttributesProtoSchema: | ||
75 | - v?.coapDeviceTypeConfiguration?.transportPayloadTypeConfiguration | ||
76 | - ?.deviceAttributesProtoSchema == null | ||
77 | - ? deviceAttributesProtoSchemaData | ||
78 | - : v?.coapDeviceTypeConfiguration?.transportPayloadTypeConfiguration | ||
79 | - ?.deviceAttributesProtoSchema, | ||
80 | - deviceRpcRequestProtoSchema: | ||
81 | - v?.coapDeviceTypeConfiguration?.transportPayloadTypeConfiguration | ||
82 | - ?.deviceRpcRequestProtoSchema == null | ||
83 | - ? deviceRpcRequestProtoSchemaData | ||
84 | - : v?.coapDeviceTypeConfiguration?.transportPayloadTypeConfiguration | ||
85 | - ?.deviceRpcRequestProtoSchema, | ||
86 | - deviceRpcResponseProtoSchema: | ||
87 | - v?.coapDeviceTypeConfiguration?.transportPayloadTypeConfiguration | ||
88 | - ?.deviceRpcResponseProtoSchema == null | ||
89 | - ? deviceRpcResponseProtoSchemaData | ||
90 | - : v?.coapDeviceTypeConfiguration?.transportPayloadTypeConfiguration | ||
91 | - ?.deviceRpcResponseProtoSchema, | ||
92 | - }); | ||
93 | - }; | ||
94 | - const resetStepFieldsValueFunc = () => { | ||
95 | - resetFields(); | ||
96 | - }; | ||
97 | - async function customResetFunc() { | ||
98 | - emit('prev'); | ||
99 | - } | ||
100 | - const getDataFunc = async () => { | ||
101 | - const val = await validate(); | ||
102 | - if (!val) return; | ||
103 | - transportCoapData.coapDeviceTypeConfiguration.coapDeviceType = val.coapDeviceType; | ||
104 | - transportCoapData.coapDeviceTypeConfiguration.transportPayloadTypeConfiguration.transportPayloadType = | ||
105 | - val.transportPayloadType; | ||
106 | - transportCoapData.coapDeviceTypeConfiguration.transportPayloadTypeConfiguration.deviceTelemetryProtoSchema = | ||
107 | - val.deviceTelemetryProtoSchema; | ||
108 | - transportCoapData.coapDeviceTypeConfiguration.transportPayloadTypeConfiguration.deviceAttributesProtoSchema = | ||
109 | - val.deviceAttributesProtoSchema; | ||
110 | - transportCoapData.coapDeviceTypeConfiguration.transportPayloadTypeConfiguration.deviceRpcRequestProtoSchema = | ||
111 | - val.deviceRpcRequestProtoSchema; | ||
112 | - transportCoapData.coapDeviceTypeConfiguration.transportPayloadTypeConfiguration.deviceRpcResponseProtoSchema = | ||
113 | - val.deviceRpcResponseProtoSchema; | ||
114 | - transportCoapData.clientSettings.powerMode = val.powerMode; | ||
115 | - transportCoapData.clientSettings.edrxCycle = val.edrxCycle; | ||
116 | - transportCoapData.clientSettings.pagingTransmissionWindow = val.pagingTransmissionWindow; | ||
117 | - transportCoapData.clientSettings.psmActivityTimer = val.psmActivityTimer; | ||
118 | - coapAllData = { | ||
119 | - ...transportCoapData, | ||
120 | - }; | ||
121 | - return coapAllData; | ||
122 | - }; | ||
123 | - return { | ||
124 | - customResetFunc, | ||
125 | - register, | ||
126 | - resetStepFieldsValueFunc, | ||
127 | - getDataFunc, | ||
128 | - setStepFieldsValueFunc, | ||
129 | - }; | 41 | + const [register, { validate, resetFields, setFieldsValue }] = useForm({ |
42 | + labelWidth: 200, | ||
43 | + schemas: CoapSchemas, | ||
44 | + actionColOptions: { | ||
45 | + span: 14, | ||
130 | }, | 46 | }, |
131 | }); | 47 | }); |
48 | + const setFormData = (v) => { | ||
49 | + setFieldsValue({ | ||
50 | + ...v?.clientSettings, | ||
51 | + ...v?.coapDeviceTypeConfiguration, | ||
52 | + ...v?.coapDeviceTypeConfiguration?.transportPayloadTypeConfiguration, | ||
53 | + }); | ||
54 | + }; | ||
55 | + const resetFormData = () => { | ||
56 | + resetFields(); | ||
57 | + }; | ||
58 | + function customResetFunc() { | ||
59 | + emits('prev'); | ||
60 | + } | ||
61 | + const getFormData = async () => { | ||
62 | + const val = await validate(); | ||
63 | + if (!val) return; | ||
64 | + transportCoapData.coapDeviceTypeConfiguration.coapDeviceType = val.coapDeviceType; | ||
65 | + transportCoapData.coapDeviceTypeConfiguration.transportPayloadTypeConfiguration.transportPayloadType = | ||
66 | + val.transportPayloadType; | ||
67 | + transportCoapData.coapDeviceTypeConfiguration.transportPayloadTypeConfiguration.deviceTelemetryProtoSchema = | ||
68 | + val.deviceTelemetryProtoSchema; | ||
69 | + transportCoapData.coapDeviceTypeConfiguration.transportPayloadTypeConfiguration.deviceAttributesProtoSchema = | ||
70 | + val.deviceAttributesProtoSchema; | ||
71 | + transportCoapData.coapDeviceTypeConfiguration.transportPayloadTypeConfiguration.deviceRpcRequestProtoSchema = | ||
72 | + val.deviceRpcRequestProtoSchema; | ||
73 | + transportCoapData.coapDeviceTypeConfiguration.transportPayloadTypeConfiguration.deviceRpcResponseProtoSchema = | ||
74 | + val.deviceRpcResponseProtoSchema; | ||
75 | + transportCoapData.clientSettings.powerMode = val.powerMode; | ||
76 | + transportCoapData.clientSettings.edrxCycle = val.edrxCycle; | ||
77 | + transportCoapData.clientSettings.pagingTransmissionWindow = val.pagingTransmissionWindow; | ||
78 | + transportCoapData.clientSettings.psmActivityTimer = val.psmActivityTimer; | ||
79 | + coapAllData = { | ||
80 | + ...transportCoapData, | ||
81 | + }; | ||
82 | + return coapAllData; | ||
83 | + }; | ||
84 | + defineExpose({ | ||
85 | + getFormData, | ||
86 | + resetFormData, | ||
87 | + setFormData, | ||
88 | + customResetFunc, | ||
89 | + }); | ||
132 | </script> | 90 | </script> |
133 | <style lang="less" scoped></style> | 91 | <style lang="less" scoped></style> |
1 | <template> | 1 | <template> |
2 | - <div style=""> | 2 | + <div> |
3 | <Tabs | 3 | <Tabs |
4 | v-model:activeKey="currentKey" | 4 | v-model:activeKey="currentKey" |
5 | :size="currentSize" | 5 | :size="currentSize" |
@@ -14,8 +14,8 @@ | @@ -14,8 +14,8 @@ | ||
14 | <Checkbox | 14 | <Checkbox |
15 | @change="handleCheckChange($event)" | 15 | @change="handleCheckChange($event)" |
16 | v-model:checked="bootstrapServerUpdateEnable" | 16 | v-model:checked="bootstrapServerUpdateEnable" |
17 | - >包括引导服务器更新</Checkbox | ||
18 | - > | 17 | + >包括引导服务器更新 |
18 | + </Checkbox> | ||
19 | <CollapseContainer | 19 | <CollapseContainer |
20 | v-for="(item, index) in dynamicBOOTSTRAP.bootstrap" | 20 | v-for="(item, index) in dynamicBOOTSTRAP.bootstrap" |
21 | :key="item" | 21 | :key="item" |
@@ -29,7 +29,9 @@ | @@ -29,7 +29,9 @@ | ||
29 | type="text" | 29 | type="text" |
30 | @click="handleRemove(index)" | 30 | @click="handleRemove(index)" |
31 | > | 31 | > |
32 | - <template #icon> <DeleteOutlined /> </template> | 32 | + <template #icon> |
33 | + <DeleteOutlined /> | ||
34 | + </template> | ||
33 | </Button> | 35 | </Button> |
34 | </template> | 36 | </template> |
35 | <div style="border: 1px solid #d9d9d9; width: 100%"> | 37 | <div style="border: 1px solid #d9d9d9; width: 100%"> |
@@ -80,9 +82,9 @@ | @@ -80,9 +82,9 @@ | ||
80 | </div> | 82 | </div> |
81 | </template> | 83 | </template> |
82 | 84 | ||
83 | -<script lang="ts"> | ||
84 | - import { defineComponent, ref, reactive, nextTick, unref } from 'vue'; | ||
85 | - import { Tabs, Card } from 'ant-design-vue'; | 85 | +<script lang="ts" setup> |
86 | + import { ref, reactive, nextTick, unref } from 'vue'; | ||
87 | + import { Tabs, TabPane } from 'ant-design-vue'; | ||
86 | import { BasicForm, useForm } from '/@/components/Form'; | 88 | import { BasicForm, useForm } from '/@/components/Form'; |
87 | import { modelSchemas, settingsSchemas, deviceSchemas } from './index'; | 89 | import { modelSchemas, settingsSchemas, deviceSchemas } from './index'; |
88 | import BootStrapForm from './cpns/BootStrapForm.vue'; | 90 | import BootStrapForm from './cpns/BootStrapForm.vue'; |
@@ -92,237 +94,214 @@ | @@ -92,237 +94,214 @@ | ||
92 | import { useModal } from '/@/components/Modal'; | 94 | import { useModal } from '/@/components/Modal'; |
93 | import ServerConfigModal from './cpns/ServerConfigModal.vue'; | 95 | import ServerConfigModal from './cpns/ServerConfigModal.vue'; |
94 | 96 | ||
95 | - export default defineComponent({ | ||
96 | - name: 'index', | ||
97 | - components: { | ||
98 | - Tabs, | ||
99 | - TabPane: Tabs.TabPane, | ||
100 | - BasicForm, | ||
101 | - BootStrapForm, | ||
102 | - DeleteOutlined, | ||
103 | - Card, | ||
104 | - PlusCircleOutlined, | ||
105 | - Button, | ||
106 | - Checkbox, | ||
107 | - CollapseContainer, | ||
108 | - ServerConfigModal, | 97 | + const collapseTitle = (item) => { |
98 | + return `LwM2M Server Short server ID: ${item.shortServerId} Security config mode: ${item.securityMode}`; | ||
99 | + }; | ||
100 | + const bootstrapServerUpdateEnable = ref(false); | ||
101 | + const dynamicBOOTSTRAP: any = reactive({ | ||
102 | + bootstrap: [{ securityMode: 'NO_SEC', shortServerId: 1234 }], | ||
103 | + }); | ||
104 | + const dynamicBindRef: any = { | ||
105 | + BootStrapFormItemRef: ref([]), | ||
106 | + }; | ||
107 | + const currentKey = ref('1'); | ||
108 | + const currentSize = ref('large'); | ||
109 | + let allObj: any = reactive({}); | ||
110 | + let allEchoObj: any = reactive({}); | ||
111 | + let allEchoStatus = ref(false); | ||
112 | + let clientLwM2mSettingsObj = reactive({}); | ||
113 | + let observeAttrObj = reactive({ | ||
114 | + attribute: [], | ||
115 | + attributeLwm2m: {}, | ||
116 | + keyName: {}, | ||
117 | + observe: [], | ||
118 | + telemetry: [], | ||
119 | + }); | ||
120 | + | ||
121 | + const [registerModel, { resetFields: resetObjectListValue, getFieldsValue: getObjectListValue }] = | ||
122 | + useForm({ | ||
123 | + labelWidth: 100, | ||
124 | + schemas: modelSchemas, | ||
125 | + actionColOptions: { | ||
126 | + span: 14, | ||
127 | + }, | ||
128 | + }); | ||
129 | + const [ | ||
130 | + registerSettings, | ||
131 | + { | ||
132 | + resetFields: resetSettingsValue, | ||
133 | + validate: settingsValidate, | ||
134 | + setFieldsValue: settingsSetFieldsValueFunc, | ||
109 | }, | 135 | }, |
110 | - setup() { | ||
111 | - const collapseTitle = (item) => { | ||
112 | - return `LwM2M Server Short server ID: ${item.shortServerId} Security config mode: ${item.securityMode}`; | ||
113 | - }; | ||
114 | - const bootstrapServerUpdateEnable = ref(false); | ||
115 | - const dynamicBOOTSTRAP: any = reactive({ | ||
116 | - bootstrap: [{ securityMode: 'NO_SEC', shortServerId: 1234 }], | ||
117 | - }); | ||
118 | - const dynamicBindRef: any = { | ||
119 | - BootStrapFormItemRef: ref([]), | ||
120 | - }; | ||
121 | - const currentKey = ref('1'); | ||
122 | - const currentSize = ref('large'); | ||
123 | - let allObj: any = reactive({}); | ||
124 | - let allEchoObj: any = reactive({}); | ||
125 | - let allEchoStatus = ref(false); | ||
126 | - let clientLwM2mSettingsObj = reactive({}); | ||
127 | - let observeAttrObj = reactive({ | ||
128 | - attribute: [], | ||
129 | - attributeLwm2m: {}, | ||
130 | - keyName: {}, | ||
131 | - observe: [], | ||
132 | - telemetry: [], | ||
133 | - }); | 136 | + ] = useForm({ |
137 | + labelWidth: 180, | ||
138 | + schemas: settingsSchemas, | ||
139 | + actionColOptions: { | ||
140 | + span: 14, | ||
141 | + }, | ||
142 | + }); | ||
143 | + const [registerDevice, { resetFields: resetDeviceValue, getFieldsValue: getDeviceValue }] = | ||
144 | + useForm({ | ||
145 | + labelWidth: 100, | ||
146 | + schemas: deviceSchemas, | ||
147 | + actionColOptions: { | ||
148 | + span: 14, | ||
149 | + }, | ||
150 | + }); | ||
151 | + const [registerModal, { openModal }] = useModal(); | ||
134 | 152 | ||
135 | - const [ | ||
136 | - registerModel, | ||
137 | - { resetFields: resetObjectListValue, getFieldsValue: getObjectListValue }, | ||
138 | - ] = useForm({ | ||
139 | - labelWidth: 100, | ||
140 | - schemas: modelSchemas, | ||
141 | - actionColOptions: { | ||
142 | - span: 14, | ||
143 | - }, | 153 | + const handleAdd = () => { |
154 | + //TODO 如果是server config 则只弹窗一次 | ||
155 | + if (selectCheckStatus.value) { | ||
156 | + openModal(true, { | ||
157 | + isUpdate: true, | ||
144 | }); | 158 | }); |
145 | - const [ | ||
146 | - registerSettings, | ||
147 | - { | ||
148 | - resetFields: resetSettingsValue, | ||
149 | - validate: settingsValidate, | ||
150 | - setFieldsValue: settingsSetFieldsValueFunc, | ||
151 | - }, | ||
152 | - ] = useForm({ | ||
153 | - labelWidth: 180, | ||
154 | - schemas: settingsSchemas, | ||
155 | - actionColOptions: { | ||
156 | - span: 14, | ||
157 | - }, | 159 | + } else { |
160 | + dynamicBOOTSTRAP.bootstrap.push({ | ||
161 | + securityMode: 'NO_SEC', | ||
162 | + shortServerId: 1234, | ||
158 | }); | 163 | }); |
159 | - const [registerDevice, { resetFields: resetDeviceValue, getFieldsValue: getDeviceValue }] = | ||
160 | - useForm({ | ||
161 | - labelWidth: 100, | ||
162 | - schemas: deviceSchemas, | ||
163 | - actionColOptions: { | ||
164 | - span: 14, | ||
165 | - }, | ||
166 | - }); | ||
167 | - const [registerModal, { openModal }] = useModal(); | ||
168 | - | ||
169 | - const handleAdd = () => { | ||
170 | - //TODO 如果是server config 则只弹窗一次 | ||
171 | - if (selectCheckStatus.value) { | ||
172 | - openModal(true, { | ||
173 | - isUpdate: true, | ||
174 | - }); | ||
175 | - } else { | ||
176 | - dynamicBOOTSTRAP.bootstrap.push({ | ||
177 | - securityMode: 'NO_SEC', | ||
178 | - shortServerId: 1234, | ||
179 | - }); | ||
180 | - } | ||
181 | - }; | ||
182 | - const handleRemove = (index) => { | ||
183 | - dynamicBOOTSTRAP.bootstrap.splice(index, 1); | ||
184 | - }; | ||
185 | - const handleChange = (e) => { | ||
186 | - if (allEchoStatus.value) { | ||
187 | - switch (e) { | ||
188 | - case '1': | ||
189 | - break; | ||
190 | - case '2': | ||
191 | - nextTick(() => { | ||
192 | - bootstrapServerUpdateEnable.value = allEchoObj.bootstrapServerUpdateEnable; | ||
193 | - dynamicBOOTSTRAP.bootstrap = allEchoObj.bootstrap; | ||
194 | - dynamicBOOTSTRAP.bootstrap.forEach((bootstrap, index: number) => { | ||
195 | - nextTick(() => { | ||
196 | - unref(dynamicBindRef.BootStrapFormItemRef)[index]?.editBootStrapFormFunc( | ||
197 | - bootstrap | ||
198 | - ); | ||
199 | - }); | ||
200 | - }); | ||
201 | - }); | ||
202 | - break; | ||
203 | - case '3': | 164 | + } |
165 | + }; | ||
166 | + const handleRemove = (index) => { | ||
167 | + dynamicBOOTSTRAP.bootstrap.splice(index, 1); | ||
168 | + }; | ||
169 | + const handleChange = (e) => { | ||
170 | + if (allEchoStatus.value) { | ||
171 | + switch (e) { | ||
172 | + case '1': | ||
173 | + break; | ||
174 | + case '2': | ||
175 | + nextTick(() => { | ||
176 | + bootstrapServerUpdateEnable.value = allEchoObj.bootstrapServerUpdateEnable; | ||
177 | + dynamicBOOTSTRAP.bootstrap = allEchoObj.bootstrap; | ||
178 | + dynamicBOOTSTRAP.bootstrap.forEach((bootstrap, index: number) => { | ||
204 | nextTick(() => { | 179 | nextTick(() => { |
205 | - settingsSetFieldsValueFunc({ | ||
206 | - powerMode: allEchoObj?.clientLwM2mSettings?.powerMode, | ||
207 | - psmActivityTimer: allEchoObj?.clientLwM2mSettings?.psmActivityTimer, | ||
208 | - edrxCycle: allEchoObj?.clientLwM2mSettings?.edrxCycle, | ||
209 | - pagingTransmissionWindow: | ||
210 | - allEchoObj?.clientLwM2mSettings?.pagingTransmissionWindow, | ||
211 | - fwUpdateStrategy: allEchoObj?.clientLwM2mSettings?.fwUpdateStrategy, | ||
212 | - swUpdateStrategy: allEchoObj?.clientLwM2mSettings?.swUpdateStrategy, | ||
213 | - clientOnlyObserveAfterConnect: | ||
214 | - allEchoObj?.clientLwM2mSettings?.clientOnlyObserveAfterConnect, | ||
215 | - fwUpdateResource: allEchoObj?.clientLwM2mSettings?.fwUpdateResource, | ||
216 | - swUpdateResource: allEchoObj?.clientLwM2mSettings?.swUpdateResource, | ||
217 | - compositeOperationsSupport: | ||
218 | - allEchoObj?.clientLwM2mSettings?.compositeOperationsSupport, | ||
219 | - }); | 180 | + unref(dynamicBindRef.BootStrapFormItemRef)[index]?.editBootStrapFormFunc(bootstrap); |
220 | }); | 181 | }); |
221 | - break; | ||
222 | - case '4': | ||
223 | - break; | ||
224 | - } | ||
225 | - } | ||
226 | - }; | ||
227 | - const setStepFieldsValueFunc = (v) => { | ||
228 | - if (v) { | ||
229 | - allEchoObj = v; | ||
230 | - allEchoStatus.value = true; | ||
231 | - } | ||
232 | - }; | ||
233 | - const tempBootStrap: any = []; | ||
234 | - const getBootStrapFormValue = () => { | ||
235 | - //获取BootStrap的值 | ||
236 | - unref(dynamicBindRef.BootStrapFormItemRef)?.map((item: any) => | ||
237 | - tempBootStrap.push(item.getBootStrapFormFunc()) | ||
238 | - ); | ||
239 | - }; | 182 | + }); |
183 | + }); | ||
184 | + break; | ||
185 | + case '3': | ||
186 | + nextTick(() => { | ||
187 | + settingsSetFieldsValueFunc({ | ||
188 | + powerMode: allEchoObj?.clientLwM2mSettings?.powerMode, | ||
189 | + psmActivityTimer: allEchoObj?.clientLwM2mSettings?.psmActivityTimer, | ||
190 | + edrxCycle: allEchoObj?.clientLwM2mSettings?.edrxCycle, | ||
191 | + pagingTransmissionWindow: allEchoObj?.clientLwM2mSettings?.pagingTransmissionWindow, | ||
192 | + fwUpdateStrategy: allEchoObj?.clientLwM2mSettings?.fwUpdateStrategy, | ||
193 | + swUpdateStrategy: allEchoObj?.clientLwM2mSettings?.swUpdateStrategy, | ||
194 | + clientOnlyObserveAfterConnect: | ||
195 | + allEchoObj?.clientLwM2mSettings?.clientOnlyObserveAfterConnect, | ||
196 | + fwUpdateResource: allEchoObj?.clientLwM2mSettings?.fwUpdateResource, | ||
197 | + swUpdateResource: allEchoObj?.clientLwM2mSettings?.swUpdateResource, | ||
198 | + compositeOperationsSupport: | ||
199 | + allEchoObj?.clientLwM2mSettings?.compositeOperationsSupport, | ||
200 | + }); | ||
201 | + }); | ||
202 | + break; | ||
203 | + case '4': | ||
204 | + break; | ||
205 | + } | ||
206 | + } | ||
207 | + }; | ||
208 | + const setFormData = (v) => { | ||
209 | + if (v) { | ||
210 | + allEchoObj = v; | ||
211 | + allEchoStatus.value = true; | ||
212 | + } | ||
213 | + }; | ||
214 | + const tempBootStrap: any = []; | ||
215 | + const getBootStrapFormValue = () => { | ||
216 | + //获取BootStrap的值 | ||
217 | + unref(dynamicBindRef.BootStrapFormItemRef)?.map((item: any) => | ||
218 | + tempBootStrap.push(item.getBootStrapFormFunc()) | ||
219 | + ); | ||
220 | + }; | ||
240 | 221 | ||
241 | - const getDataFunc = async () => { | ||
242 | - const objectListVal = getObjectListValue(); | ||
243 | - const deviceVal = getDeviceValue(); | ||
244 | - console.log('第一个tab', objectListVal); | ||
245 | - console.log('第四个tab', deviceVal); | ||
246 | - getBootStrapFormValue(); | ||
247 | - const settingsVal = await settingsValidate(); | ||
248 | - if (!settingsVal) return; | ||
249 | - delete settingsVal.unit; | ||
250 | - delete settingsVal.unit2; | ||
251 | - clientLwM2mSettingsObj = { | ||
252 | - ...settingsVal, | ||
253 | - }; | ||
254 | - allObj = { | ||
255 | - ...{ | ||
256 | - clientLwM2mSettings: clientLwM2mSettingsObj, | ||
257 | - }, | ||
258 | - ...{ | ||
259 | - bootstrap: tempBootStrap, | ||
260 | - }, | ||
261 | - ...{ bootstrapServerUpdateEnable: bootstrapServerUpdateEnable.value }, | ||
262 | - ...{ | ||
263 | - observeAttr: observeAttrObj, | ||
264 | - }, | ||
265 | - type: 'LWM2M', | ||
266 | - }; | ||
267 | - return allObj; | ||
268 | - }; | 222 | + const getFormData = async () => { |
223 | + const objectListVal = getObjectListValue(); | ||
224 | + const deviceVal = getDeviceValue(); | ||
225 | + console.log('第一个tab', objectListVal); | ||
226 | + console.log('第四个tab', deviceVal); | ||
227 | + getBootStrapFormValue(); | ||
228 | + const settingsVal = await settingsValidate(); | ||
229 | + if (!settingsVal) return; | ||
230 | + delete settingsVal.unit; | ||
231 | + delete settingsVal.unit2; | ||
232 | + clientLwM2mSettingsObj = { | ||
233 | + ...settingsVal, | ||
234 | + }; | ||
235 | + allObj = { | ||
236 | + ...{ | ||
237 | + clientLwM2mSettings: clientLwM2mSettingsObj, | ||
238 | + }, | ||
239 | + ...{ | ||
240 | + bootstrap: tempBootStrap, | ||
241 | + }, | ||
242 | + ...{ bootstrapServerUpdateEnable: bootstrapServerUpdateEnable.value }, | ||
243 | + ...{ | ||
244 | + observeAttr: observeAttrObj, | ||
245 | + }, | ||
246 | + type: 'LWM2M', | ||
247 | + }; | ||
248 | + return allObj; | ||
249 | + }; | ||
269 | 250 | ||
270 | - const resetStepFieldsValueFunc = () => { | ||
271 | - allEchoStatus.value = false; | ||
272 | - nextTick(() => { | ||
273 | - resetObjectListValue(); | ||
274 | - resetSettingsValue(); | ||
275 | - resetDeviceValue(); | 251 | + const resetFormData = () => { |
252 | + allEchoStatus.value = false; | ||
253 | + nextTick(() => { | ||
254 | + resetObjectListValue(); | ||
255 | + resetSettingsValue(); | ||
256 | + resetDeviceValue(); | ||
257 | + }); | ||
258 | + }; | ||
259 | + const selectCheckStatus = ref(false); | ||
260 | + const handleCheckChange = (e) => { | ||
261 | + selectCheckStatus.value = e.target.checked; | ||
262 | + if (!selectCheckStatus.value) { | ||
263 | + const findIndex = dynamicBOOTSTRAP.bootstrap.findIndex((o) => o.type == 'Bootstrap'); | ||
264 | + if (findIndex !== -1) { | ||
265 | + dynamicBOOTSTRAP.bootstrap.splice(findIndex, 1); | ||
266 | + } | ||
267 | + } | ||
268 | + }; | ||
269 | + const acceptEmitFunc = (e) => { | ||
270 | + switch (e) { | ||
271 | + case 'LwM2M': | ||
272 | + dynamicBOOTSTRAP.bootstrap.push({ | ||
273 | + securityMode: 'NO_SEC', | ||
274 | + shortServerId: 1234, | ||
276 | }); | 275 | }); |
277 | - }; | ||
278 | - const selectCheckStatus = ref(false); | ||
279 | - const handleCheckChange = (e) => { | ||
280 | - selectCheckStatus.value = e.target.checked; | ||
281 | - if (!selectCheckStatus.value) { | ||
282 | - const findIndex = dynamicBOOTSTRAP.bootstrap.findIndex((o) => o.type == 'Bootstrap'); | ||
283 | - if (findIndex !== -1) { | ||
284 | - dynamicBOOTSTRAP.bootstrap.splice(findIndex, 1); | ||
285 | - } | ||
286 | - } | ||
287 | - }; | ||
288 | - const acceptEmitFunc = (e) => { | ||
289 | - switch (e) { | ||
290 | - case 'LwM2M': | ||
291 | - dynamicBOOTSTRAP.bootstrap.push({ | ||
292 | - securityMode: 'NO_SEC', | ||
293 | - shortServerId: 1234, | ||
294 | - }); | ||
295 | - break; | ||
296 | - case 'Bootstrap': | ||
297 | - dynamicBOOTSTRAP.bootstrap.push({ | ||
298 | - securityMode: 'NO_SEC', | ||
299 | - shortServerId: 1234, | ||
300 | - }); | ||
301 | - break; | ||
302 | - } | ||
303 | - }; | ||
304 | - return { | ||
305 | - currentKey, | ||
306 | - currentSize, | ||
307 | - registerModel, | ||
308 | - registerSettings, | ||
309 | - registerDevice, | ||
310 | - getDataFunc, | ||
311 | - setStepFieldsValueFunc, | ||
312 | - handleChange, | ||
313 | - resetStepFieldsValueFunc, | ||
314 | - dynamicBOOTSTRAP, | ||
315 | - dynamicBindRef, | ||
316 | - handleAdd, | ||
317 | - handleRemove, | ||
318 | - bootstrapServerUpdateEnable, | ||
319 | - collapseTitle, | ||
320 | - handleCheckChange, | ||
321 | - registerModal, | ||
322 | - acceptEmitFunc, | ||
323 | - selectCheckStatus, | ||
324 | - }; | ||
325 | - }, | 276 | + break; |
277 | + case 'Bootstrap': | ||
278 | + dynamicBOOTSTRAP.bootstrap.push({ | ||
279 | + securityMode: 'NO_SEC', | ||
280 | + shortServerId: 1234, | ||
281 | + }); | ||
282 | + break; | ||
283 | + } | ||
284 | + }; | ||
285 | + defineExpose({ | ||
286 | + currentKey, | ||
287 | + currentSize, | ||
288 | + registerModel, | ||
289 | + registerSettings, | ||
290 | + registerDevice, | ||
291 | + getFormData, | ||
292 | + setFormData, | ||
293 | + handleChange, | ||
294 | + resetFormData, | ||
295 | + dynamicBOOTSTRAP, | ||
296 | + dynamicBindRef, | ||
297 | + handleAdd, | ||
298 | + handleRemove, | ||
299 | + bootstrapServerUpdateEnable, | ||
300 | + collapseTitle, | ||
301 | + handleCheckChange, | ||
302 | + registerModal, | ||
303 | + acceptEmitFunc, | ||
304 | + selectCheckStatus, | ||
326 | }); | 305 | }); |
327 | </script> | 306 | </script> |
328 | 307 |
@@ -29,15 +29,15 @@ | @@ -29,15 +29,15 @@ | ||
29 | </p> | 29 | </p> |
30 | </div> | 30 | </div> |
31 | </template> | 31 | </template> |
32 | - <template #desc2> | 32 | + <template #desc2> |
33 | <div style="width: 47rem; margin-left: 2rem"> | 33 | <div style="width: 47rem; margin-left: 2rem"> |
34 | <p> | 34 | <p> |
35 | - 启用后,平台将使用Json负载格式通过以下主题推送属性 | ||
36 | - 和RPC:v1/devices/me/attributes/response/$request\u id、v1/devices/me/attributes、 | ||
37 | - v1/devices/me/RPC/request/$request\u id、v1/devices/me/RPC/response/$request\u id。 | ||
38 | - 此设置不会影响使用新(v2)主题发送的属性和rpc订阅: | ||
39 | - v2/a/res/$request\u id、v2/a、v2/r/req/$request\u id、v2/r/res/$request\u id。 | ||
40 | - 其中,$request\u id是整数请求标识符。 | 35 | + 启用后,平台将使用Json负载格式通过以下主题推送属性 |
36 | + 和RPC:v1/devices/me/attributes/response/$request\u id、v1/devices/me/attributes、 | ||
37 | + v1/devices/me/RPC/request/$request\u id、v1/devices/me/RPC/response/$request\u id。 | ||
38 | + 此设置不会影响使用新(v2)主题发送的属性和rpc订阅: v2/a/res/$request\u | ||
39 | + id、v2/a、v2/r/req/$request\u id、v2/r/res/$request\u id。 其中,$request\u | ||
40 | + id是整数请求标识符。 | ||
41 | </p> | 41 | </p> |
42 | </div> | 42 | </div> |
43 | </template> | 43 | </template> |
@@ -45,125 +45,88 @@ | @@ -45,125 +45,88 @@ | ||
45 | </div> | 45 | </div> |
46 | </div> | 46 | </div> |
47 | </template> | 47 | </template> |
48 | -<script lang="ts"> | ||
49 | - import { defineComponent, reactive } from 'vue'; | 48 | +<script lang="ts" setup> |
49 | + import { reactive } from 'vue'; | ||
50 | import { BasicForm, useForm } from '/@/components/Form'; | 50 | import { BasicForm, useForm } from '/@/components/Form'; |
51 | import { | 51 | import { |
52 | MqttSchemas, | 52 | MqttSchemas, |
53 | - deviceTelemetryProtoSchemaData, | ||
54 | - deviceAttributesProtoSchemaData, | ||
55 | - deviceRpcRequestProtoSchemaData, | ||
56 | - deviceRpcResponseProtoSchemaData, | 53 | + // deviceTelemetryProtoSchemaData, |
54 | + // deviceAttributesProtoSchemaData, | ||
55 | + // deviceRpcRequestProtoSchemaData, | ||
56 | + // deviceRpcResponseProtoSchemaData, | ||
57 | } from './Mqtt'; | 57 | } from './Mqtt'; |
58 | - import { Alert, Divider, Descriptions } from 'ant-design-vue'; | ||
59 | 58 | ||
60 | - export default defineComponent({ | ||
61 | - components: { | ||
62 | - BasicForm, | ||
63 | - [Alert.name]: Alert, | ||
64 | - [Divider.name]: Divider, | ||
65 | - [Descriptions.name]: Descriptions, | ||
66 | - [Descriptions.Item.name]: Descriptions.Item, | ||
67 | - }, | 59 | + const emits = defineEmits(['prev']); |
68 | 60 | ||
69 | - emits: ['next', 'prev', 'register'], | ||
70 | - setup(_, { emit }) { | ||
71 | - let allMqttData: any = reactive({}); | ||
72 | - const transportMqttData: any = reactive({ | ||
73 | - transportPayloadTypeConfiguration: { | ||
74 | - transportPayloadType: null, | ||
75 | - enableCompatibilityWithJsonPayloadFormat: false, | ||
76 | - useJsonPayloadFormatForDefaultDownlinkTopics: false, | ||
77 | - deviceAttributesProtoSchema: null, | ||
78 | - deviceRpcRequestProtoSchema: null, | ||
79 | - deviceRpcResponseProtoSchema: null, | ||
80 | - deviceTelemetryProtoSchema: null, | ||
81 | - }, | ||
82 | - type: 'MQTT', | ||
83 | - }); | 61 | + let allMqttData: any = reactive({}); |
62 | + const transportMqttData: any = reactive({ | ||
63 | + transportPayloadTypeConfiguration: { | ||
64 | + transportPayloadType: null, | ||
65 | + enableCompatibilityWithJsonPayloadFormat: false, | ||
66 | + useJsonPayloadFormatForDefaultDownlinkTopics: false, | ||
67 | + deviceAttributesProtoSchema: null, | ||
68 | + deviceRpcRequestProtoSchema: null, | ||
69 | + deviceRpcResponseProtoSchema: null, | ||
70 | + deviceTelemetryProtoSchema: null, | ||
71 | + }, | ||
72 | + type: 'MQTT', | ||
73 | + }); | ||
84 | 74 | ||
85 | - const [register, { validate, resetFields, setFieldsValue }] = useForm({ | ||
86 | - labelWidth: 180, | ||
87 | - schemas: MqttSchemas, | ||
88 | - actionColOptions: { | ||
89 | - span: 14, | ||
90 | - }, | ||
91 | - }); | ||
92 | - const setStepFieldsValueFunc = (v) => { | ||
93 | - setFieldsValue(v); | ||
94 | - setFieldsValue({ | ||
95 | - transportPayloadType: v?.transportPayloadTypeConfiguration?.transportPayloadType, | ||
96 | - deviceTelemetryProtoSchema: | ||
97 | - v?.transportPayloadTypeConfiguration?.deviceTelemetryProtoSchema == null | ||
98 | - ? deviceTelemetryProtoSchemaData | ||
99 | - : v?.transportPayloadTypeConfiguration?.deviceTelemetryProtoSchema, | ||
100 | - deviceAttributesProtoSchema: | ||
101 | - v?.transportPayloadTypeConfiguration?.deviceAttributesProtoSchema == null | ||
102 | - ? deviceAttributesProtoSchemaData | ||
103 | - : v?.transportPayloadTypeConfiguration?.deviceAttributesProtoSchema, | ||
104 | - deviceRpcRequestProtoSchema: | ||
105 | - v?.transportPayloadTypeConfiguration?.deviceRpcRequestProtoSchema == null | ||
106 | - ? deviceRpcRequestProtoSchemaData | ||
107 | - : v?.transportPayloadTypeConfiguration?.deviceRpcRequestProtoSchema, | ||
108 | - deviceRpcResponseProtoSchema: | ||
109 | - v?.transportPayloadTypeConfiguration?.deviceRpcResponseProtoSchema == null | ||
110 | - ? deviceRpcResponseProtoSchemaData | ||
111 | - : v?.transportPayloadTypeConfiguration?.deviceRpcResponseProtoSchema, | ||
112 | - enableCompatibilityWithJsonPayloadFormat: | ||
113 | - v?.transportPayloadTypeConfiguration?.enableCompatibilityWithJsonPayloadFormat, | ||
114 | - useJsonPayloadFormatForDefaultDownlinkTopics: | ||
115 | - v?.transportPayloadTypeConfiguration?.useJsonPayloadFormatForDefaultDownlinkTopics, | ||
116 | - }); | ||
117 | - }; | ||
118 | - const resetStepFieldsValueFunc = () => { | ||
119 | - resetFields(); | ||
120 | - }; | ||
121 | - async function customResetFunc() { | ||
122 | - emit('prev'); | ||
123 | - } | ||
124 | - const getDataFunc = async () => { | ||
125 | - let val = await validate(); | ||
126 | - if (!val) return; | ||
127 | - delete val.desc; | ||
128 | - transportMqttData.transportPayloadTypeConfiguration.transportPayloadType = | ||
129 | - val.transportPayloadType; | ||
130 | - transportMqttData.transportPayloadTypeConfiguration.enableCompatibilityWithJsonPayloadFormat = | ||
131 | - val.enableCompatibilityWithJsonPayloadFormat; | ||
132 | - transportMqttData.transportPayloadTypeConfiguration.useJsonPayloadFormatForDefaultDownlinkTopics = | ||
133 | - val.useJsonPayloadFormatForDefaultDownlinkTopics; | ||
134 | - transportMqttData.transportPayloadTypeConfiguration.deviceAttributesProtoSchema = | ||
135 | - val.deviceAttributesProtoSchema; | ||
136 | - transportMqttData.transportPayloadTypeConfiguration.deviceRpcRequestProtoSchema = | ||
137 | - val.deviceRpcRequestProtoSchema; | ||
138 | - transportMqttData.transportPayloadTypeConfiguration.deviceRpcResponseProtoSchema = | ||
139 | - val.deviceRpcResponseProtoSchema; | ||
140 | - transportMqttData.transportPayloadTypeConfiguration.deviceTelemetryProtoSchema = | ||
141 | - val.deviceTelemetryProtoSchema; | ||
142 | - allMqttData = { | ||
143 | - ...val, | ||
144 | - ...transportMqttData, | ||
145 | - }; | ||
146 | - delete allMqttData.deviceTelemetryProtoSchema; | ||
147 | - delete allMqttData.deviceAttributesProtoSchema; | ||
148 | - delete allMqttData.deviceRpcRequestProtoSchema; | ||
149 | - delete allMqttData.deviceRpcResponseProtoSchema; | ||
150 | - delete allMqttData.useJsonPayloadFormatForDefaultDownlinkTopics; | ||
151 | - delete allMqttData.enableCompatibilityWithJsonPayloadFormat; | ||
152 | - delete allMqttData.transportPayloadType; | ||
153 | - return allMqttData; | ||
154 | - }; | ||
155 | - return { | ||
156 | - customResetFunc, | ||
157 | - register, | ||
158 | - resetStepFieldsValueFunc, | ||
159 | - getDataFunc, | ||
160 | - setStepFieldsValueFunc, | ||
161 | - }; | 75 | + const [register, { validate, resetFields, setFieldsValue }] = useForm({ |
76 | + labelWidth: 180, | ||
77 | + schemas: MqttSchemas, | ||
78 | + actionColOptions: { | ||
79 | + span: 14, | ||
162 | }, | 80 | }, |
163 | }); | 81 | }); |
82 | + const setFormData = (v) => { | ||
83 | + setFieldsValue(v); | ||
84 | + setFieldsValue({ | ||
85 | + ...v?.transportPayloadTypeConfiguration, | ||
86 | + }); | ||
87 | + }; | ||
88 | + const resetFormData = () => { | ||
89 | + resetFields(); | ||
90 | + }; | ||
91 | + function customResetFunc() { | ||
92 | + emits('prev'); | ||
93 | + } | ||
94 | + const getFormData = async () => { | ||
95 | + let val = await validate(); | ||
96 | + if (!val) return; | ||
97 | + delete val.desc; | ||
98 | + transportMqttData.transportPayloadTypeConfiguration.transportPayloadType = | ||
99 | + val.transportPayloadType; | ||
100 | + transportMqttData.transportPayloadTypeConfiguration.enableCompatibilityWithJsonPayloadFormat = | ||
101 | + val.enableCompatibilityWithJsonPayloadFormat; | ||
102 | + transportMqttData.transportPayloadTypeConfiguration.useJsonPayloadFormatForDefaultDownlinkTopics = | ||
103 | + val.useJsonPayloadFormatForDefaultDownlinkTopics; | ||
104 | + transportMqttData.transportPayloadTypeConfiguration.deviceAttributesProtoSchema = | ||
105 | + val.deviceAttributesProtoSchema; | ||
106 | + transportMqttData.transportPayloadTypeConfiguration.deviceRpcRequestProtoSchema = | ||
107 | + val.deviceRpcRequestProtoSchema; | ||
108 | + transportMqttData.transportPayloadTypeConfiguration.deviceRpcResponseProtoSchema = | ||
109 | + val.deviceRpcResponseProtoSchema; | ||
110 | + transportMqttData.transportPayloadTypeConfiguration.deviceTelemetryProtoSchema = | ||
111 | + val.deviceTelemetryProtoSchema; | ||
112 | + allMqttData = { | ||
113 | + ...val, | ||
114 | + ...transportMqttData, | ||
115 | + }; | ||
116 | + delete allMqttData.deviceTelemetryProtoSchema; | ||
117 | + delete allMqttData.deviceAttributesProtoSchema; | ||
118 | + delete allMqttData.deviceRpcRequestProtoSchema; | ||
119 | + delete allMqttData.deviceRpcResponseProtoSchema; | ||
120 | + delete allMqttData.useJsonPayloadFormatForDefaultDownlinkTopics; | ||
121 | + delete allMqttData.enableCompatibilityWithJsonPayloadFormat; | ||
122 | + delete allMqttData.transportPayloadType; | ||
123 | + return allMqttData; | ||
124 | + }; | ||
125 | + defineExpose({ | ||
126 | + getFormData, | ||
127 | + resetFormData, | ||
128 | + setFormData, | ||
129 | + customResetFunc, | ||
130 | + }); | ||
164 | </script> | 131 | </script> |
165 | -<style lang="less" scoped> | ||
166 | - // :deep(.ant-row) { | ||
167 | - // column-gap: 33px !important; | ||
168 | - // } | ||
169 | -</style> | 132 | +<style lang="less" scoped></style> |
@@ -32,7 +32,7 @@ | @@ -32,7 +32,7 @@ | ||
32 | </template> | 32 | </template> |
33 | <div | 33 | <div |
34 | v-if="dynamicSNMP.communicationConfigs.length < 4" | 34 | v-if="dynamicSNMP.communicationConfigs.length < 4" |
35 | - style="margin-left: 0vw; margin-top: 2vh" | 35 | + style="margin-left: 0; margin-top: 2vh" |
36 | > | 36 | > |
37 | <Button size="middle" type="text" @click="handleAdd"> | 37 | <Button size="middle" type="text" @click="handleAdd"> |
38 | <template #icon> | 38 | <template #icon> |
@@ -121,7 +121,7 @@ | @@ -121,7 +121,7 @@ | ||
121 | }, | 121 | }, |
122 | ], | 122 | ], |
123 | }); | 123 | }); |
124 | - const [register, { validate, setFieldsValue }] = useForm({ | 124 | + const [register, { validate, setFieldsValue, resetFields }] = useForm({ |
125 | labelWidth: 150, | 125 | labelWidth: 150, |
126 | schemas: snmpSchemas, | 126 | schemas: snmpSchemas, |
127 | actionColOptions: { | 127 | actionColOptions: { |
@@ -151,7 +151,7 @@ | @@ -151,7 +151,7 @@ | ||
151 | }; | 151 | }; |
152 | 152 | ||
153 | //回显表单值 | 153 | //回显表单值 |
154 | - const setStepFieldsValueFunc = (v) => { | 154 | + const setFormData = (v) => { |
155 | setFieldsValue({ | 155 | setFieldsValue({ |
156 | timeoutMs: v.timeoutMs, | 156 | timeoutMs: v.timeoutMs, |
157 | retries: v.retries, | 157 | retries: v.retries, |
@@ -166,7 +166,7 @@ | @@ -166,7 +166,7 @@ | ||
166 | }; | 166 | }; |
167 | 167 | ||
168 | //获取表单值 | 168 | //获取表单值 |
169 | - const getSnmpForm = async () => { | 169 | + const getFormData = async () => { |
170 | let value = await validate(); | 170 | let value = await validate(); |
171 | if (!value) return; | 171 | if (!value) return; |
172 | let tempObj: any = {}; | 172 | let tempObj: any = {}; |
@@ -181,9 +181,14 @@ | @@ -181,9 +181,14 @@ | ||
181 | }; | 181 | }; |
182 | return tempObj; | 182 | return tempObj; |
183 | }; | 183 | }; |
184 | + const resetFormData = () => { | ||
185 | + resetFields(); | ||
186 | + dynamicBindRef.SnmpFormItemRef = []; | ||
187 | + }; | ||
184 | defineExpose({ | 188 | defineExpose({ |
185 | - getSnmpForm, | ||
186 | - setStepFieldsValueFunc, | 189 | + getFormData, |
190 | + setFormData, | ||
191 | + resetFormData, | ||
187 | }); | 192 | }); |
188 | </script> | 193 | </script> |
189 | <style lang="less" scoped></style> | 194 | <style lang="less" scoped></style> |