From 3f1dc4c6e3c414685693604bd36fba172ca7496a Mon Sep 17 00:00:00 2001 From: ChenYi <296215406@outlook.com> Date: Wed, 22 Oct 2025 17:29:07 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E7=89=A9=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StandardThingModelCodeSelect.vue | 6 ++ .../devicemanagement/thingmodelinfo/schema.ts | 81 ++++++++++++++----- 2 files changed, 69 insertions(+), 18 deletions(-) diff --git a/apps/web-antd/src/views/devicemanagement/thingmodelinfo/StandardThingModelCodeSelect.vue b/apps/web-antd/src/views/devicemanagement/thingmodelinfo/StandardThingModelCodeSelect.vue index ae1bed1..116da3a 100644 --- a/apps/web-antd/src/views/devicemanagement/thingmodelinfo/StandardThingModelCodeSelect.vue +++ b/apps/web-antd/src/views/devicemanagement/thingmodelinfo/StandardThingModelCodeSelect.vue @@ -12,6 +12,7 @@ interface Props { placeholder?: string; disabled?: boolean; allowClear?: boolean; + onResolve?: (item: any | null) => void; } const props = withDefaults(defineProps(), { @@ -92,8 +93,10 @@ const onChange = (val?: string) => { if (val) { const found = options.value.find((o) => o.value === val) || null; emit('item-change', found); + props.onResolve && props.onResolve(found); } else { emit('item-change', null); + props.onResolve && props.onResolve(null); } }; @@ -105,6 +108,9 @@ watch( query.value.filter = ''; options.value = []; total.value = 0; + if (props.typeCode) { + fetchData(); + } }, { immediate: true }, ); diff --git a/apps/web-antd/src/views/devicemanagement/thingmodelinfo/schema.ts b/apps/web-antd/src/views/devicemanagement/thingmodelinfo/schema.ts index 47366b9..7fe0eef 100644 --- a/apps/web-antd/src/views/devicemanagement/thingmodelinfo/schema.ts +++ b/apps/web-antd/src/views/devicemanagement/thingmodelinfo/schema.ts @@ -97,7 +97,10 @@ export const addThingModelFormSchema = computed(() => [ component: 'ApiSelect', fieldName: 'filedType', label: $t('abp.thingModelInfos.FiledType'), - rules: z.preprocess((v) => (v == null ? '' : v), z.string().min(1, $t('common.required'))), + rules: z.preprocess( + (v) => (v == null ? '' : v), + z.string().min(1, $t('common.required')), + ), componentProps: { api: getCommonGetSelectList, params: { @@ -131,7 +134,10 @@ export const addThingModelFormSchema = computed(() => [ component: 'Input', fieldName: 'ioTPlatformRawFieldName', label: $t('abp.thingModelInfos.IoTPlatformRawFieldName'), - rules: z.preprocess((v) => (v == null ? '' : v), z.string().min(1, $t('common.required'))), + rules: z.preprocess( + (v) => (v == null ? '' : v), + z.string().min(1, $t('common.required')), + ), componentProps: { placeholder: $t('common.pleaseInput') + @@ -142,25 +148,38 @@ export const addThingModelFormSchema = computed(() => [ component: 'StandardThingModelCodeSelect', fieldName: 'standardFieldName', label: $t('abp.thingModelInfos.StandardFieldName'), - rules: z.preprocess((v) => (v == null ? '' : v), z.string().min(1, $t('common.required'))), + rules: z.preprocess( + (v) => (v == null ? '' : v), + z.string().min(1, $t('common.required')), + ), dependencies: { show(values: any) { return !!values?.filedType; }, triggerFields: ['filedType'], }, - componentProps: { - // 传入联动的类型编码 - typeCode: (formValues: any) => formValues?.filedType, + componentProps: (formValues: any) => ({ + // 传入联动的类型编码(运行时具体值) + typeCode: formValues?.filedType ?? null, + onResolve: (item: any | null) => { + // 选择后自动回填:名称=displayText,值类型=extendedAttribute(转大写) + formValues.standardFieldDisplayName = item?.displayText ?? ''; + formValues.standardFieldValueType = (item?.extendedAttribute ?? '') + .toString() + .toUpperCase(); + }, placeholder: $t('common.pleaseSelect') + $t('abp.thingModelInfos.StandardFieldName'), - }, + }), }, { component: 'ApiSelect', fieldName: 'standardFieldValueType', label: $t('abp.thingModelInfos.StandardFieldValueType'), - rules: z.preprocess((v) => (v == null ? '' : v), z.string().min(1, $t('common.required'))), + rules: z.preprocess( + (v) => (v == null ? '' : v), + z.string().min(1, $t('common.required')), + ), componentProps: { api: getCommonGetSelectList, params: { @@ -172,13 +191,21 @@ export const addThingModelFormSchema = computed(() => [ valueField: 'secondValue', optionsPropName: 'options', immediate: true, + allowClear: true, placeholder: $t('common.pleaseSelect') + $t('abp.thingModelInfos.StandardFieldValueType'), afterFetch: (res: any) => { - if (Array.isArray(res)) return res; - if (res && Array.isArray(res.items)) return res.items; - if (res && Array.isArray(res.data)) return res.data; + // 确保返回的是数组格式 + if (Array.isArray(res)) { + return res; + } + if (res && Array.isArray(res.items)) { + return res.items; + } + if (res && Array.isArray(res.data)) { + return res.data; + } return []; }, }, @@ -187,7 +214,10 @@ export const addThingModelFormSchema = computed(() => [ component: 'Input', fieldName: 'standardFieldDisplayName', label: $t('abp.thingModelInfos.StandardFieldDisplayName'), - rules: z.preprocess((v) => (v == null ? '' : v), z.string().min(1, $t('common.required'))), + rules: z.preprocess( + (v) => (v == null ? '' : v), + z.string().min(1, $t('common.required')), + ), componentProps: { placeholder: $t('common.pleaseInput') + @@ -211,7 +241,10 @@ export const editThingModelFormSchema = computed(() => [ component: 'ApiSelect', fieldName: 'filedType', label: $t('abp.thingModelInfos.FiledType'), - rules: z.preprocess((v) => (v == null ? '' : v), z.string().min(1, $t('common.required'))), + rules: z.preprocess( + (v) => (v == null ? '' : v), + z.string().min(1, $t('common.required')), + ), componentProps: { api: getCommonGetSelectList, params: { @@ -243,7 +276,10 @@ export const editThingModelFormSchema = computed(() => [ component: 'Input', fieldName: 'ioTPlatformRawFieldName', label: $t('abp.thingModelInfos.IoTPlatformRawFieldName'), - rules: z.preprocess((v) => (v == null ? '' : v), z.string().min(1, $t('common.required'))), + rules: z.preprocess( + (v) => (v == null ? '' : v), + z.string().min(1, $t('common.required')), + ), componentProps: { placeholder: $t('abp.thingModelInfos.PleaseInputIoTPlatformRawFieldName'), }, @@ -252,17 +288,26 @@ export const editThingModelFormSchema = computed(() => [ component: 'StandardThingModelCodeSelect', fieldName: 'standardFieldName', label: $t('abp.thingModelInfos.StandardFieldName'), - rules: z.preprocess((v) => (v == null ? '' : v), z.string().min(1, $t('common.required'))), + rules: z.preprocess( + (v) => (v == null ? '' : v), + z.string().min(1, $t('common.required')), + ), dependencies: { show(values: any) { return !!values?.filedType; }, triggerFields: ['filedType'], }, - componentProps: { - typeCode: (formValues: any) => formValues?.filedType, + componentProps: (formValues: any) => ({ + typeCode: formValues?.filedType ?? null, + onResolve: (item: any | null) => { + formValues.standardFieldDisplayName = item?.displayText ?? ''; + formValues.standardFieldValueType = (item?.extendedAttribute ?? '') + .toString() + .toUpperCase(); + }, placeholder: $t('abp.thingModelInfos.PleaseSelectStandardFieldName'), - }, + }), }, { component: 'ApiSelect',