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