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 | +}; |