import { ColumnProps } from "ant-design-vue/es/table"; import { DataType, Source, InputParams, OtherSetting, OutputParams, ConfigParams, TagsType } from './components' import SelectColumn from './components/Events/SelectColumn.vue'; import AsyncSelect from './components/Function/AsyncSelect.vue'; import { EventLevel } from "@/views/device/data"; import {MetadataType} from "@/views/device/Product/typings"; interface DataTableColumnProps extends ColumnProps { type?: string, components?: { name?: any [key: string]: any } form?: { rules?: any[] [key: string]: any }, options?: any[] doubleClick?: (record: any, index: number, dataIndex: string) => boolean } const SourceMap = { device: '设备', manual: '手动', rule: '规则', }; const type = { read: '读', write: '写', report: '上报', }; export const useColumns = (type?: MetadataType, target?: 'device' | 'product', dataSource?: any[], noEditor?: any[]) => { const BaseColumns: DataTableColumnProps[] = [ { title: '标识', dataIndex: 'id', type: 'text', form: { rules: [{ validator(_:any,value: any) { const hasId = dataSource?.find?.((item) => item.id === value) if (value) { if (hasId) { return Promise.reject('标识重复') } return Promise.resolve() } return Promise.reject('请输入标识') } }] } }, { title: '名称', dataIndex: 'name', width: 300, type: 'text', form: { rules: [{ required: true, message: '请输入名称' }] } }, ]; const EventColumns: DataTableColumnProps[] = BaseColumns.concat([ { title: '事件级别', dataIndex: 'expands', type: 'components', components: { name: SelectColumn, props: { options: EventLevel } } }, { title: '输出参数', dataIndex: 'outInput', }, { title: '配置参数', dataIndex: 'properties', type: 'components', components: { name: ConfigParams, } }, { title: '说明', dataIndex: 'description', type: 'text', }, { title: '操作', dataIndex: 'action', width: 120 } ]); const FunctionColumns: DataTableColumnProps[] = BaseColumns.concat([ { title: '是否异步', dataIndex: 'async', type: 'components', components: { name: AsyncSelect, props: { options: [ { label: '是', value: true }, { label: '否', value: false } ] } } }, { title: '输入参数', dataIndex: 'inputs', type: 'components', components: { name: InputParams, } }, { title: '输出参数', dataIndex: 'output', type: 'components', components: { name: OutputParams } }, { title: '说明', dataIndex: 'description', type: 'text', }, { title: '操作', dataIndex: 'action', width: 120 } // { // title: '读写类型', // dataIndex: 'expands', // render: (text: any) => (text?.type || []).map((item: string | number) => {type[item]}), // }, ]); const PropertyColumns: DataTableColumnProps[] = BaseColumns.concat([ { title: '数据类型', dataIndex: 'valueType', type: 'components', components: { name: DataType }, width: 230 }, { title: '属性来源', dataIndex: 'expands', type: 'components', components: { name: Source }, doubleClick(){ return target !== 'device' }, form: { required: true, rules: [ { validator: async (_: Record, value: any) => { if (value.source) { if(value.source !== 'rule') { if(value.type?.length) { return Promise.resolve(); } else { return Promise.reject('请选择读写类型'); } } else { if(value.virtualRule?.rule?.script) { return Promise.resolve(); }else { return Promise.reject('请配置规则'); } } } else { return Promise.reject('请选择属性来源'); } } }, ] }, width: 150 }, { title: '其它配置', dataIndex: 'other', width: 100, }, { title: '操作', dataIndex: 'action', width: 120 } ]); const TagColumns: DataTableColumnProps[] = BaseColumns.concat([ { title: '数据类型', dataIndex: 'valueType', type: 'components', components: { name: DataType, } }, { title: '读写类型', dataIndex: 'readType', type: 'components', components: { name: TagsType } }, { title: '说明', dataIndex: 'description', type: 'text', }, { title: '操作', dataIndex: 'action', width: 120 } ]); const columns = computed(() => { switch(type) { case 'properties': return PropertyColumns; case 'events': return EventColumns case 'tags': return TagColumns case 'functions': return FunctionColumns } }) return {columns} } // const MetadataMapping = new Map(); // MetadataMapping.set('properties', PropertyColumns); // MetadataMapping.set('events', EventColumns); // MetadataMapping.set('tags', TagColumns); // MetadataMapping.set('functions', FunctionColumns); // // export default MetadataMapping;