Showing
1 changed file
with
313 additions
and
311 deletions
1 | -import { FormSchema } from '/@/components/Form'; | |
2 | -import { findDictItemByCode } from '/@/api/system/dict'; | |
3 | -import { h, unref } from 'vue'; | |
4 | -import { getDeviceProfile } from '/@/api/alarm/position'; | |
5 | -import { BasicColumn, BasicTableProps } from '/@/components/Table'; | |
6 | -import { devicePage } from '/@/api/device/deviceManager'; | |
7 | -import { Tag } from 'ant-design-vue'; | |
8 | -import { DeviceRecord } from '/@/api/device/model/deviceModel'; | |
9 | -import { FETCH_SETTING } from '/@/components/Table/src/const'; | |
10 | -import { useMessage } from '/@/hooks/web/useMessage'; | |
11 | -import { | |
12 | - BasicInfoFormField, | |
13 | - DataSourceType, | |
14 | - DeviceStatusEnum, | |
15 | - DeviceStatusNameEnum, | |
16 | - DeviceTypeNameEnum, | |
17 | -} from '../enum'; | |
18 | -import { useClipboard } from '@vueuse/core'; | |
19 | - | |
20 | -export const stepConfig = ['选择流转方式', '完善配置参数']; | |
21 | - | |
22 | -export const removeFieldByModeForm = ['name', 'description']; | |
23 | - | |
24 | -//表单通用配置 | |
25 | -export const modelFormPublicConfig = { | |
26 | - labelWidth: 120, | |
27 | - actionColOptions: { | |
28 | - span: 14, | |
29 | - }, | |
30 | - showResetButton: false, | |
31 | - showSubmitButton: false, | |
32 | -}; | |
33 | - | |
34 | -const handleGroupDevice = (options: DeviceRecord[]) => { | |
35 | - const map = new Map<string, string[]>(); | |
36 | - options.forEach((item) => { | |
37 | - if (map.has(item.profileId)) { | |
38 | - const deviceList = map.get(item.profileId)!; | |
39 | - deviceList.push(item.tbDeviceId); | |
40 | - } else { | |
41 | - map.set(item.profileId, [item.tbDeviceId]); | |
42 | - } | |
43 | - }); | |
44 | - const value = Array.from(map.entries()).map(([product, devices]) => ({ product, devices })); | |
45 | - | |
46 | - return value; | |
47 | -}; | |
48 | - | |
49 | -const deviceTableFormSchema: FormSchema[] = [ | |
50 | - { | |
51 | - field: 'name', | |
52 | - label: '设备名称', | |
53 | - component: 'Input', | |
54 | - colProps: { span: 9 }, | |
55 | - componentProps: { | |
56 | - placeholder: '请输入设备名称', | |
57 | - }, | |
58 | - }, | |
59 | - { | |
60 | - field: 'deviceType', | |
61 | - label: '设备类型', | |
62 | - component: 'ApiSelect', | |
63 | - colProps: { span: 9 }, | |
64 | - componentProps: { | |
65 | - placeholder: '请选择设备类型', | |
66 | - api: findDictItemByCode, | |
67 | - params: { | |
68 | - dictCode: 'device_type', | |
69 | - }, | |
70 | - labelField: 'itemText', | |
71 | - valueField: 'itemValue', | |
72 | - }, | |
73 | - }, | |
74 | -]; | |
75 | - | |
76 | -const { copied, copy } = useClipboard({ legacy: true }); | |
77 | - | |
78 | -const { createMessage } = useMessage(); | |
79 | - | |
80 | -const deviceTableColumn: BasicColumn[] = [ | |
81 | - { | |
82 | - title: '状态', | |
83 | - dataIndex: 'deviceState', | |
84 | - customRender: ({ text }) => { | |
85 | - return h( | |
86 | - Tag, | |
87 | - { | |
88 | - color: | |
89 | - text === DeviceStatusEnum.INACTIVE | |
90 | - ? 'warning' | |
91 | - : text === DeviceStatusEnum.OFFLINE | |
92 | - ? 'error' | |
93 | - : 'success', | |
94 | - }, | |
95 | - () => DeviceStatusNameEnum[text] | |
96 | - ); | |
97 | - }, | |
98 | - }, | |
99 | - { | |
100 | - title: '别名/设备名称', | |
101 | - dataIndex: 'name', | |
102 | - customRender: ({ record }) => { | |
103 | - return h('div', [ | |
104 | - h( | |
105 | - 'div', | |
106 | - { | |
107 | - class: 'cursor-pointer', | |
108 | - onClick: async () => { | |
109 | - await copy(record.name); | |
110 | - if (unref(copied)) createMessage.success('复制成功~'); | |
111 | - }, | |
112 | - }, | |
113 | - [ | |
114 | - record.alias && h('div', { class: 'truncate' }, record.alias), | |
115 | - h('div', { class: 'text-blue-400 truncate' }, record.name), | |
116 | - ] | |
117 | - ), | |
118 | - ]); | |
119 | - }, | |
120 | - }, | |
121 | - { | |
122 | - title: '设备类型', | |
123 | - dataIndex: 'deviceType', | |
124 | - customRender: ({ text }) => { | |
125 | - return h(Tag, { color: 'success' }, () => DeviceTypeNameEnum[text]); | |
126 | - }, | |
127 | - }, | |
128 | - { | |
129 | - title: '所属产品', | |
130 | - dataIndex: 'deviceProfile.name', | |
131 | - }, | |
132 | - { | |
133 | - title: '所属组织', | |
134 | - dataIndex: 'organizationDTO.name', | |
135 | - }, | |
136 | -]; | |
137 | - | |
138 | -const TransferTableProps: BasicTableProps = { | |
139 | - formConfig: { | |
140 | - layout: 'inline', | |
141 | - labelWidth: 80, | |
142 | - schemas: deviceTableFormSchema, | |
143 | - actionColOptions: { span: 6 }, | |
144 | - }, | |
145 | - size: 'small', | |
146 | - maxHeight: 240, | |
147 | - useSearchForm: true, | |
148 | - columns: deviceTableColumn, | |
149 | - showIndexColumn: false, | |
150 | - fetchSetting: FETCH_SETTING, | |
151 | -} as BasicTableProps; | |
152 | - | |
153 | -export const modeForm = (submitFn?: Function): FormSchema[] => { | |
154 | - return [ | |
155 | - { | |
156 | - field: BasicInfoFormField.CONVERT_CONFIG_ID, | |
157 | - label: '', | |
158 | - component: 'Input', | |
159 | - show: false, | |
160 | - }, | |
161 | - { | |
162 | - field: BasicInfoFormField.DATA_SOURCE_TYPE, | |
163 | - label: '数据源', | |
164 | - component: 'RadioGroup', | |
165 | - defaultValue: DataSourceType.ALL, | |
166 | - componentProps: { | |
167 | - options: [ | |
168 | - { label: '全部', value: DataSourceType.ALL }, | |
169 | - { label: '产品', value: DataSourceType.PRODUCT }, | |
170 | - { label: '设备', value: DataSourceType.DEVICE }, | |
171 | - ], | |
172 | - }, | |
173 | - }, | |
174 | - { | |
175 | - field: BasicInfoFormField.DATA_SOURCE_PRODUCT, | |
176 | - label: '数据源产品', | |
177 | - component: 'TransferModal', | |
178 | - ifShow: ({ model }) => { | |
179 | - return model[BasicInfoFormField.DATA_SOURCE_TYPE] !== DataSourceType.ALL; | |
180 | - }, | |
181 | - valueField: 'value', | |
182 | - changeEvent: 'update:value', | |
183 | - componentProps: ({ formActionType }) => { | |
184 | - const { setFieldsValue } = formActionType; | |
185 | - return { | |
186 | - api: getDeviceProfile, | |
187 | - labelField: 'name', | |
188 | - valueField: 'tbProfileId', | |
189 | - transferProps: { | |
190 | - listStyle: { height: '400px' }, | |
191 | - showSearch: true, | |
192 | - filterOption: (inputValue: string, option: Recordable) => { | |
193 | - const upperCaseInputValue = inputValue.toUpperCase(); | |
194 | - const upperCaseOptionValue = option.name.toUpperCase(); | |
195 | - return upperCaseOptionValue.includes(upperCaseInputValue); | |
196 | - }, | |
197 | - }, | |
198 | - onChange: () => { | |
199 | - setFieldsValue({ [BasicInfoFormField.DATA_SOURCE_DEVICE]: [] }); | |
200 | - }, | |
201 | - }; | |
202 | - }, | |
203 | - }, | |
204 | - { | |
205 | - field: BasicInfoFormField.DATA_SOURCE_DEVICE, | |
206 | - label: '数据源设备', | |
207 | - component: 'TransferTableModal', | |
208 | - ifShow: ({ model }) => { | |
209 | - return model[BasicInfoFormField.DATA_SOURCE_TYPE] === DataSourceType.DEVICE; | |
210 | - }, | |
211 | - valueField: 'value', | |
212 | - changeEvent: 'update:value', | |
213 | - componentProps: ({ formActionType }) => { | |
214 | - const { getFieldsValue } = formActionType; | |
215 | - const values = getFieldsValue(); | |
216 | - const convertConfigId = Reflect.get(values, BasicInfoFormField.CONVERT_CONFIG_ID); | |
217 | - const devices = Reflect.get(values, BasicInfoFormField.DATA_SOURCE_DEVICE); | |
218 | - | |
219 | - return { | |
220 | - labelField: 'name', | |
221 | - valueField: 'tbDeviceId', | |
222 | - primaryKey: 'tbDeviceId', | |
223 | - pendingTableProps: { | |
224 | - ...TransferTableProps, | |
225 | - api: devicePage, | |
226 | - beforeFetch: (params) => { | |
227 | - const values = getFieldsValue(); | |
228 | - const deviceProfileIds = Reflect.get(values, BasicInfoFormField.DATA_SOURCE_PRODUCT); | |
229 | - const convertConfigId = Reflect.get(values, BasicInfoFormField.CONVERT_CONFIG_ID); | |
230 | - if (convertConfigId) { | |
231 | - Object.assign(params, { convertConfigId, selected: false }); | |
232 | - } | |
233 | - return { ...params, deviceProfileIds }; | |
234 | - }, | |
235 | - } as BasicTableProps, | |
236 | - selectedTableProps: { | |
237 | - ...TransferTableProps, | |
238 | - // api | |
239 | - api: !!(convertConfigId && devices) ? devicePage : undefined, | |
240 | - beforeFetch: (params) => { | |
241 | - const values = getFieldsValue(); | |
242 | - const deviceProfileIds = Reflect.get(values, BasicInfoFormField.DATA_SOURCE_PRODUCT); | |
243 | - const convertConfigId = Reflect.get(values, BasicInfoFormField.CONVERT_CONFIG_ID); | |
244 | - if (convertConfigId) { | |
245 | - Object.assign(params, { convertConfigId, selected: true }); | |
246 | - } | |
247 | - return { ...params, deviceProfileIds }; | |
248 | - }, | |
249 | - } as BasicTableProps, | |
250 | - initSelectedOptions: async ({ setSelectedTotal }) => { | |
251 | - const values = getFieldsValue(); | |
252 | - const convertConfigId = Reflect.get(values, BasicInfoFormField.CONVERT_CONFIG_ID); | |
253 | - const deviceProfileIds = Reflect.get(values, BasicInfoFormField.DATA_SOURCE_PRODUCT); | |
254 | - const devices = Reflect.get(values, BasicInfoFormField.DATA_SOURCE_DEVICE); | |
255 | - if (convertConfigId && devices) { | |
256 | - const { items, total } = await devicePage({ | |
257 | - page: 1, | |
258 | - pageSize: 10, | |
259 | - convertConfigId: values[BasicInfoFormField.CONVERT_CONFIG_ID], | |
260 | - deviceProfileIds, | |
261 | - selected: true, | |
262 | - }); | |
263 | - setSelectedTotal(total); | |
264 | - return items; | |
265 | - } | |
266 | - return []; | |
267 | - }, | |
268 | - onSelectedAfter: async () => { | |
269 | - submitFn && (await submitFn(false)); | |
270 | - }, | |
271 | - onRemoveAfter: async ({ reloadSelected }) => { | |
272 | - submitFn && (await submitFn(false)); | |
273 | - reloadSelected(); | |
274 | - }, | |
275 | - transformValue: (_selectedRowKeys: string[], selectedRows: DeviceRecord[]) => { | |
276 | - return handleGroupDevice(selectedRows); | |
277 | - }, | |
278 | - }; | |
279 | - }, | |
280 | - }, | |
281 | - { | |
282 | - field: 'type', | |
283 | - label: '转换方式', | |
284 | - component: 'ApiSelect', | |
285 | - required: true, | |
286 | - colProps: { | |
287 | - span: 24, | |
288 | - }, | |
289 | - componentProps({}) { | |
290 | - return { | |
291 | - api: findDictItemByCode, | |
292 | - params: { | |
293 | - dictCode: 'convert_data_to', | |
294 | - }, | |
295 | - labelField: 'itemText', | |
296 | - valueField: 'itemValue', | |
297 | - }; | |
298 | - }, | |
299 | - }, | |
300 | - { | |
301 | - field: 'remark', | |
302 | - label: '描述', | |
303 | - colProps: { span: 24 }, | |
304 | - component: 'Input', | |
305 | - componentProps: { | |
306 | - maxLength: 255, | |
307 | - placeholder: '请输入描述', | |
308 | - }, | |
309 | - }, | |
310 | - ]; | |
311 | -}; | |
1 | +import { FormSchema } from '/@/components/Form'; | |
2 | +import { findDictItemByCode } from '/@/api/system/dict'; | |
3 | +import { h, unref } from 'vue'; | |
4 | +import { getDeviceProfile } from '/@/api/alarm/position'; | |
5 | +import { BasicColumn, BasicTableProps } from '/@/components/Table'; | |
6 | +import { devicePage } from '/@/api/device/deviceManager'; | |
7 | +import { Tag } from 'ant-design-vue'; | |
8 | +import { DeviceRecord } from '/@/api/device/model/deviceModel'; | |
9 | +import { FETCH_SETTING } from '/@/components/Table/src/const'; | |
10 | +import { useMessage } from '/@/hooks/web/useMessage'; | |
11 | +import { | |
12 | + BasicInfoFormField, | |
13 | + DataSourceType, | |
14 | + DeviceStatusEnum, | |
15 | + DeviceStatusNameEnum, | |
16 | + DeviceTypeNameEnum, | |
17 | +} from '../enum'; | |
18 | +import { useClipboard } from '@vueuse/core'; | |
19 | + | |
20 | +export const stepConfig = ['选择流转方式', '完善配置参数']; | |
21 | + | |
22 | +export const removeFieldByModeForm = ['name', 'description']; | |
23 | + | |
24 | +//表单通用配置 | |
25 | +export const modelFormPublicConfig = { | |
26 | + labelWidth: 120, | |
27 | + actionColOptions: { | |
28 | + span: 14, | |
29 | + }, | |
30 | + showResetButton: false, | |
31 | + showSubmitButton: false, | |
32 | +}; | |
33 | + | |
34 | +const handleGroupDevice = (options: DeviceRecord[]) => { | |
35 | + const map = new Map<string, string[]>(); | |
36 | + options.forEach((item) => { | |
37 | + if (map.has(item.profileId)) { | |
38 | + const deviceList = map.get(item.profileId)!; | |
39 | + deviceList.push(item.tbDeviceId); | |
40 | + } else { | |
41 | + map.set(item.profileId, [item.tbDeviceId]); | |
42 | + } | |
43 | + }); | |
44 | + const value = Array.from(map.entries()).map(([product, devices]) => ({ product, devices })); | |
45 | + | |
46 | + return value; | |
47 | +}; | |
48 | + | |
49 | +const deviceTableFormSchema: FormSchema[] = [ | |
50 | + { | |
51 | + field: 'name', | |
52 | + label: '设备名称', | |
53 | + component: 'Input', | |
54 | + colProps: { span: 9 }, | |
55 | + componentProps: { | |
56 | + placeholder: '请输入设备名称', | |
57 | + }, | |
58 | + }, | |
59 | + { | |
60 | + field: 'deviceType', | |
61 | + label: '设备类型', | |
62 | + component: 'ApiSelect', | |
63 | + colProps: { span: 9 }, | |
64 | + componentProps: { | |
65 | + placeholder: '请选择设备类型', | |
66 | + api: findDictItemByCode, | |
67 | + params: { | |
68 | + dictCode: 'device_type', | |
69 | + }, | |
70 | + labelField: 'itemText', | |
71 | + valueField: 'itemValue', | |
72 | + }, | |
73 | + }, | |
74 | +]; | |
75 | + | |
76 | +const { copied, copy } = useClipboard({ legacy: true }); | |
77 | + | |
78 | +const { createMessage } = useMessage(); | |
79 | + | |
80 | +const deviceTableColumn: BasicColumn[] = [ | |
81 | + { | |
82 | + title: '状态', | |
83 | + dataIndex: 'deviceState', | |
84 | + customRender: ({ text }) => { | |
85 | + return h( | |
86 | + Tag, | |
87 | + { | |
88 | + color: | |
89 | + text === DeviceStatusEnum.INACTIVE | |
90 | + ? 'warning' | |
91 | + : text === DeviceStatusEnum.OFFLINE | |
92 | + ? 'error' | |
93 | + : 'success', | |
94 | + }, | |
95 | + () => DeviceStatusNameEnum[text] | |
96 | + ); | |
97 | + }, | |
98 | + }, | |
99 | + { | |
100 | + title: '别名/设备名称', | |
101 | + dataIndex: 'name', | |
102 | + customRender: ({ record }) => { | |
103 | + return h('div', [ | |
104 | + h( | |
105 | + 'div', | |
106 | + { | |
107 | + class: 'cursor-pointer', | |
108 | + onClick: async () => { | |
109 | + await copy(record.name); | |
110 | + if (unref(copied)) createMessage.success('复制成功~'); | |
111 | + }, | |
112 | + }, | |
113 | + [ | |
114 | + record.alias && h('div', { class: 'truncate' }, record.alias), | |
115 | + h('div', { class: 'text-blue-400 truncate' }, record.name), | |
116 | + ] | |
117 | + ), | |
118 | + ]); | |
119 | + }, | |
120 | + }, | |
121 | + { | |
122 | + title: '设备类型', | |
123 | + dataIndex: 'deviceType', | |
124 | + customRender: ({ text }) => { | |
125 | + return h(Tag, { color: 'success' }, () => DeviceTypeNameEnum[text]); | |
126 | + }, | |
127 | + }, | |
128 | + { | |
129 | + title: '所属产品', | |
130 | + dataIndex: 'deviceProfile.name', | |
131 | + }, | |
132 | + { | |
133 | + title: '所属组织', | |
134 | + dataIndex: 'organizationDTO.name', | |
135 | + }, | |
136 | +]; | |
137 | + | |
138 | +const TransferTableProps: BasicTableProps = { | |
139 | + formConfig: { | |
140 | + layout: 'inline', | |
141 | + labelWidth: 80, | |
142 | + schemas: deviceTableFormSchema, | |
143 | + actionColOptions: { span: 6 }, | |
144 | + }, | |
145 | + size: 'small', | |
146 | + maxHeight: 240, | |
147 | + useSearchForm: true, | |
148 | + columns: deviceTableColumn, | |
149 | + showIndexColumn: false, | |
150 | + fetchSetting: FETCH_SETTING, | |
151 | +} as BasicTableProps; | |
152 | + | |
153 | +export const modeForm = (submitFn?: Function): FormSchema[] => { | |
154 | + return [ | |
155 | + { | |
156 | + field: BasicInfoFormField.CONVERT_CONFIG_ID, | |
157 | + label: '', | |
158 | + component: 'Input', | |
159 | + show: false, | |
160 | + }, | |
161 | + { | |
162 | + field: BasicInfoFormField.DATA_SOURCE_TYPE, | |
163 | + label: '数据源', | |
164 | + component: 'RadioGroup', | |
165 | + defaultValue: DataSourceType.ALL, | |
166 | + componentProps: { | |
167 | + options: [ | |
168 | + { label: '全部', value: DataSourceType.ALL }, | |
169 | + { label: '产品', value: DataSourceType.PRODUCT }, | |
170 | + { label: '设备', value: DataSourceType.DEVICE }, | |
171 | + ], | |
172 | + }, | |
173 | + }, | |
174 | + { | |
175 | + field: BasicInfoFormField.DATA_SOURCE_PRODUCT, | |
176 | + label: '数据源产品', | |
177 | + component: 'TransferModal', | |
178 | + rules: [{ required: true, message: '数据源产品为必选项', type: 'array' }], | |
179 | + ifShow: ({ model }) => { | |
180 | + return model[BasicInfoFormField.DATA_SOURCE_TYPE] !== DataSourceType.ALL; | |
181 | + }, | |
182 | + valueField: 'value', | |
183 | + changeEvent: 'update:value', | |
184 | + componentProps: ({ formActionType }) => { | |
185 | + const { setFieldsValue } = formActionType; | |
186 | + return { | |
187 | + api: getDeviceProfile, | |
188 | + labelField: 'name', | |
189 | + valueField: 'tbProfileId', | |
190 | + transferProps: { | |
191 | + listStyle: { height: '400px' }, | |
192 | + showSearch: true, | |
193 | + filterOption: (inputValue: string, option: Recordable) => { | |
194 | + const upperCaseInputValue = inputValue.toUpperCase(); | |
195 | + const upperCaseOptionValue = option.name.toUpperCase(); | |
196 | + return upperCaseOptionValue.includes(upperCaseInputValue); | |
197 | + }, | |
198 | + }, | |
199 | + onChange: () => { | |
200 | + setFieldsValue({ [BasicInfoFormField.DATA_SOURCE_DEVICE]: [] }); | |
201 | + }, | |
202 | + }; | |
203 | + }, | |
204 | + }, | |
205 | + { | |
206 | + field: BasicInfoFormField.DATA_SOURCE_DEVICE, | |
207 | + label: '数据源设备', | |
208 | + component: 'TransferTableModal', | |
209 | + ifShow: ({ model }) => { | |
210 | + return model[BasicInfoFormField.DATA_SOURCE_TYPE] === DataSourceType.DEVICE; | |
211 | + }, | |
212 | + valueField: 'value', | |
213 | + changeEvent: 'update:value', | |
214 | + rules: [{ required: true, message: '数据源设备为必选项', type: 'array' }], | |
215 | + componentProps: ({ formActionType }) => { | |
216 | + const { getFieldsValue } = formActionType; | |
217 | + const values = getFieldsValue(); | |
218 | + const convertConfigId = Reflect.get(values, BasicInfoFormField.CONVERT_CONFIG_ID); | |
219 | + const devices = Reflect.get(values, BasicInfoFormField.DATA_SOURCE_DEVICE); | |
220 | + | |
221 | + return { | |
222 | + labelField: 'name', | |
223 | + valueField: 'tbDeviceId', | |
224 | + primaryKey: 'tbDeviceId', | |
225 | + pendingTableProps: { | |
226 | + ...TransferTableProps, | |
227 | + api: devicePage, | |
228 | + beforeFetch: (params) => { | |
229 | + const values = getFieldsValue(); | |
230 | + const deviceProfileIds = Reflect.get(values, BasicInfoFormField.DATA_SOURCE_PRODUCT); | |
231 | + const convertConfigId = Reflect.get(values, BasicInfoFormField.CONVERT_CONFIG_ID); | |
232 | + if (convertConfigId) { | |
233 | + Object.assign(params, { convertConfigId, selected: false }); | |
234 | + } | |
235 | + return { ...params, deviceProfileIds }; | |
236 | + }, | |
237 | + } as BasicTableProps, | |
238 | + selectedTableProps: { | |
239 | + ...TransferTableProps, | |
240 | + // api | |
241 | + api: !!(convertConfigId && devices) ? devicePage : undefined, | |
242 | + beforeFetch: (params) => { | |
243 | + const values = getFieldsValue(); | |
244 | + const deviceProfileIds = Reflect.get(values, BasicInfoFormField.DATA_SOURCE_PRODUCT); | |
245 | + const convertConfigId = Reflect.get(values, BasicInfoFormField.CONVERT_CONFIG_ID); | |
246 | + if (convertConfigId) { | |
247 | + Object.assign(params, { convertConfigId, selected: true }); | |
248 | + } | |
249 | + return { ...params, deviceProfileIds }; | |
250 | + }, | |
251 | + } as BasicTableProps, | |
252 | + initSelectedOptions: async ({ setSelectedTotal }) => { | |
253 | + const values = getFieldsValue(); | |
254 | + const convertConfigId = Reflect.get(values, BasicInfoFormField.CONVERT_CONFIG_ID); | |
255 | + const deviceProfileIds = Reflect.get(values, BasicInfoFormField.DATA_SOURCE_PRODUCT); | |
256 | + const devices = Reflect.get(values, BasicInfoFormField.DATA_SOURCE_DEVICE); | |
257 | + if (convertConfigId && devices) { | |
258 | + const { items, total } = await devicePage({ | |
259 | + page: 1, | |
260 | + pageSize: 10, | |
261 | + convertConfigId: values[BasicInfoFormField.CONVERT_CONFIG_ID], | |
262 | + deviceProfileIds, | |
263 | + selected: true, | |
264 | + }); | |
265 | + setSelectedTotal(total); | |
266 | + return items; | |
267 | + } | |
268 | + return []; | |
269 | + }, | |
270 | + onSelectedAfter: async () => { | |
271 | + submitFn && (await submitFn(false)); | |
272 | + }, | |
273 | + onRemoveAfter: async ({ reloadSelected }) => { | |
274 | + submitFn && (await submitFn(false)); | |
275 | + reloadSelected(); | |
276 | + }, | |
277 | + transformValue: (_selectedRowKeys: string[], selectedRows: DeviceRecord[]) => { | |
278 | + return handleGroupDevice(selectedRows); | |
279 | + }, | |
280 | + }; | |
281 | + }, | |
282 | + }, | |
283 | + { | |
284 | + field: 'type', | |
285 | + label: '转换方式', | |
286 | + component: 'ApiSelect', | |
287 | + required: true, | |
288 | + colProps: { | |
289 | + span: 24, | |
290 | + }, | |
291 | + componentProps({}) { | |
292 | + return { | |
293 | + api: findDictItemByCode, | |
294 | + params: { | |
295 | + dictCode: 'convert_data_to', | |
296 | + }, | |
297 | + labelField: 'itemText', | |
298 | + valueField: 'itemValue', | |
299 | + }; | |
300 | + }, | |
301 | + }, | |
302 | + { | |
303 | + field: 'remark', | |
304 | + label: '描述', | |
305 | + colProps: { span: 24 }, | |
306 | + component: 'Input', | |
307 | + componentProps: { | |
308 | + maxLength: 255, | |
309 | + placeholder: '请输入描述', | |
310 | + }, | |
311 | + }, | |
312 | + ]; | |
313 | +}; | ... | ... |