Commit 11b31233759209b38c5e9b10b518ef63866eaa0c
Merge branch 'feat/object-model-enums-type' into 'main_dev'
feat: 物模型新增枚举类型 See merge request yunteng/thingskit-scada!200
Showing
4 changed files
with
52 additions
and
9 deletions
1 | -import type { FunctionType, TransportTypeEnum } from '@/enums/datasource' | 1 | +import type { DataTypeEnum, FunctionType, TransportTypeEnum } from '@/enums/datasource' |
2 | 2 | ||
3 | export interface DeviceProfileItemType { | 3 | export interface DeviceProfileItemType { |
4 | id: string | 4 | id: string |
@@ -147,6 +147,7 @@ export interface Detail { | @@ -147,6 +147,7 @@ export interface Detail { | ||
147 | export interface DataType { | 147 | export interface DataType { |
148 | type: string | 148 | type: string |
149 | specs: Specs | StructJSON[] | 149 | specs: Specs | StructJSON[] |
150 | + specsList: Specs[] | ||
150 | } | 151 | } |
151 | 152 | ||
152 | export interface Specs { | 153 | export interface Specs { |
@@ -158,6 +159,9 @@ export interface Specs { | @@ -158,6 +159,9 @@ export interface Specs { | ||
158 | length?: string | 159 | length?: string |
159 | min: string | 160 | min: string |
160 | max: string | 161 | max: string |
162 | + name?: string | ||
163 | + value?: string | ||
164 | + dataType?: DataTypeEnum | ||
161 | } | 165 | } |
162 | 166 | ||
163 | export interface ValueRange { | 167 | export interface ValueRange { |
@@ -93,6 +93,27 @@ export const getFormSchemas = ({ structJSON: structJson, required, transportType | @@ -93,6 +93,27 @@ export const getFormSchemas = ({ structJSON: structJson, required, transportType | ||
93 | } | 93 | } |
94 | } | 94 | } |
95 | 95 | ||
96 | + const createEnumSelect = ({ identifier, functionName, dataType }: StructJSON): FormSchema => { | ||
97 | + const { specsList } = dataType || {} | ||
98 | + | ||
99 | + return { | ||
100 | + field: identifier, | ||
101 | + label: functionName, | ||
102 | + component: ComponentEnum.SELECT, | ||
103 | + rules: [ | ||
104 | + { | ||
105 | + required, | ||
106 | + message: `${functionName}是必填项`, | ||
107 | + type: 'number', | ||
108 | + }, | ||
109 | + ], | ||
110 | + componentProps: { | ||
111 | + options: specsList, | ||
112 | + fieldNames: { label: 'name', value: 'value' }, | ||
113 | + }, | ||
114 | + } | ||
115 | + } | ||
116 | + | ||
96 | const createStructJson = ({ identifier, functionName, dataType }: StructJSON): FormSchema => { | 117 | const createStructJson = ({ identifier, functionName, dataType }: StructJSON): FormSchema => { |
97 | return { | 118 | return { |
98 | field: identifier, | 119 | field: identifier, |
@@ -129,6 +150,8 @@ export const getFormSchemas = ({ structJSON: structJson, required, transportType | @@ -129,6 +150,8 @@ export const getFormSchemas = ({ structJSON: structJson, required, transportType | ||
129 | schemas.push(createTCPServiceCommandInput(item)) | 150 | schemas.push(createTCPServiceCommandInput(item)) |
130 | if (type === DataTypeEnum.BOOL) | 151 | if (type === DataTypeEnum.BOOL) |
131 | schemas.push(createSelect(item)) | 152 | schemas.push(createSelect(item)) |
153 | + else if (type === DataTypeEnum.ENUM) | ||
154 | + schemas.push(createEnumSelect(item)) | ||
132 | else if (type === DataTypeEnum.NUMBER_INT) | 155 | else if (type === DataTypeEnum.NUMBER_INT) |
133 | schemas.push(createInputNumber(item)) | 156 | schemas.push(createInputNumber(item)) |
134 | else if (type === DataTypeEnum.NUMBER_DOUBLE) | 157 | else if (type === DataTypeEnum.NUMBER_DOUBLE) |
@@ -29,7 +29,7 @@ const thingsModelFormListElMap = reactive<Record<string, { el: InstanceType<type | @@ -29,7 +29,7 @@ const thingsModelFormListElMap = reactive<Record<string, { el: InstanceType<type | ||
29 | const [register, formActionType] = useForm({ | 29 | const [register, formActionType] = useForm({ |
30 | schemas: getFormSchemas({ structJSON: props.inputData || [], required: props.required, transportType: props.transportType }), | 30 | schemas: getFormSchemas({ structJSON: props.inputData || [], required: props.required, transportType: props.transportType }), |
31 | showActionButtonGroup: false, | 31 | showActionButtonGroup: false, |
32 | - // labelWidth: getLabelWidth() || 80, | 32 | + labelWidth: 100, |
33 | labelAlign: FormLabelAlignEnum.RIGHT, | 33 | labelAlign: FormLabelAlignEnum.RIGHT, |
34 | layout: FormLayoutEnum.HORIZONTAL, | 34 | layout: FormLayoutEnum.HORIZONTAL, |
35 | }) | 35 | }) |
@@ -105,19 +105,34 @@ defineExpose<ComponentExposeType>({ | @@ -105,19 +105,34 @@ defineExpose<ComponentExposeType>({ | ||
105 | <Card class="!border-2 !border-dashed" :title="title"> | 105 | <Card class="!border-2 !border-dashed" :title="title"> |
106 | <BasicForm class="things-model-form" @register="register"> | 106 | <BasicForm class="things-model-form" @register="register"> |
107 | <template v-for="item in getStructFormItem" #[item.identifier]="{ model, field }" :key="item.identifier"> | 107 | <template v-for="item in getStructFormItem" #[item.identifier]="{ model, field }" :key="item.identifier"> |
108 | - <ThingsModelForm :ref="(el) => setFormElRef(el as InstanceType<typeof ThingsModelForm>, item) " v-model:value="model[field]" :input-data="(item.dataType?.specs as StructJSON[]) || []" :title="item.functionName" /> | 108 | + <ThingsModelForm |
109 | + :ref="(el) => setFormElRef(el as InstanceType<typeof ThingsModelForm>, item)" | ||
110 | + v-model:value="model[field]" :input-data="(item.dataType?.specs as StructJSON[]) || []" | ||
111 | + :title="item.functionName" | ||
112 | + /> | ||
109 | </template> | 113 | </template> |
110 | </BasicForm> | 114 | </BasicForm> |
111 | </Card> | 115 | </Card> |
112 | </template> | 116 | </template> |
113 | 117 | ||
114 | <style lang="less" scoped> | 118 | <style lang="less" scoped> |
115 | - .things-model-form { | ||
116 | - :deep(.ant-input-number) { | ||
117 | - width: 100%; | ||
118 | - } | 119 | +.things-model-form { |
120 | + :deep(.ant-input-number) { | ||
121 | + width: 100%; | ||
119 | } | 122 | } |
120 | - :deep(.ant-form-item-control){ | ||
121 | - margin-left: 6px; | 123 | + |
124 | + :deep(.ant-form-item-label) { | ||
125 | + >label { | ||
126 | + display: block; | ||
127 | + text-align: right; | ||
128 | + white-space: nowrap; | ||
129 | + text-overflow: ellipsis; | ||
130 | + overflow: hidden; | ||
131 | + } | ||
122 | } | 132 | } |
133 | +} | ||
134 | + | ||
135 | +:deep(.ant-form-item-control) { | ||
136 | + margin-left: 6px; | ||
137 | +} | ||
123 | </style> | 138 | </style> |
@@ -314,6 +314,7 @@ export enum DataTypeEnum { | @@ -314,6 +314,7 @@ export enum DataTypeEnum { | ||
314 | STRING = 'TEXT', | 314 | STRING = 'TEXT', |
315 | STRUCT = 'STRUCT', | 315 | STRUCT = 'STRUCT', |
316 | BOOL = 'BOOL', | 316 | BOOL = 'BOOL', |
317 | + ENUM = 'ENUM', | ||
317 | } | 318 | } |
318 | 319 | ||
319 | export enum AggregateTypeEnum { | 320 | export enum AggregateTypeEnum { |