From 75d1bec9bd5380a1170e7739d1f84b84cde4faec Mon Sep 17 00:00:00 2001 From: cuiwenlong7 Date: Thu, 9 Dec 2021 15:48:11 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=E5=8A=A8=E6=80=81=E5=AD=90?= =?UTF-8?q?=E8=A1=A8=E5=8D=95=E5=A2=9E=E5=8A=A0withConfig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../formFields/importSubform/index.tsx | 52 ++++++++++++++++--- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/src/components/formFields/importSubform/index.tsx b/src/components/formFields/importSubform/index.tsx index 9652e66..946792b 100644 --- a/src/components/formFields/importSubform/index.tsx +++ b/src/components/formFields/importSubform/index.tsx @@ -7,9 +7,21 @@ import { cloneDeep } from 'lodash' import ConditionHelper from '../../../util/condition' import InterfaceHelper, { InterfaceConfig } from '../../../util/interface' +/** + * 子表单配置项 + * - withConfig: 拓展配置 + * - * - enable: 是否开启 + * - * - dataField: (序列化)数据 + * - * - configField: (序列化)配置 + */ export interface ImportSubformFieldConfig extends FieldConfig { type: 'import_subform', interface?: InterfaceConfig + withConfig?: { + enable: boolean + dataField: string + configField: string + } } export interface IImportSubformField { @@ -17,6 +29,7 @@ export interface IImportSubformField { } interface IImportSubformFieldState { + withConfigPath: string // 动态子表单拓展路径 didMount: boolean fields: FieldConfigs[] formData: { status: 'normal' | 'error' | 'loading', message?: string }[] @@ -40,12 +53,22 @@ export default class ImportSubformField extends Field, prevState: IImportSubformFieldState) { + const withConfigPath = nextProps.config.withConfig?.enable && nextProps.config.withConfig?.dataField ? `${nextProps.config.withConfig.dataField}.` : '' + if (withConfigPath !== prevState.withConfigPath) { + return { withConfigPath } + } + return null + } + + didMount = async () => { await this.setState({ didMount: true @@ -187,7 +210,7 @@ export default class ImportSubformField extends Field { const formFieldConfig = (this.state.fields || [])[formFieldIndex] if (formFieldConfig) { - const fullPath = formFieldConfig.field === '' || path === '' ? `${formFieldConfig.field}${path}` : `${formFieldConfig.field}.${path}` + const fullPath = formFieldConfig.field === '' || path === '' ? `${this.state.withConfigPath}${formFieldConfig.field}${path}` : `${this.state.withConfigPath}${formFieldConfig.field}.${path}` await this.props.onValueSet(fullPath, value, true) const formData = cloneDeep(this.state.formData) @@ -206,7 +229,7 @@ export default class ImportSubformField extends Field { const formFieldConfig = (this.state.fields || [])[formFieldIndex] if (formFieldConfig) { - const fullPath = formFieldConfig.field === '' || path === '' ? `${formFieldConfig.field}${path}` : `${formFieldConfig.field}.${path}` + const fullPath = formFieldConfig.field === '' || path === '' ? `${this.state.withConfigPath}${formFieldConfig.field}${path}` : `${this.state.withConfigPath}${formFieldConfig.field}.${path}` await this.props.onValueUnset(fullPath, true) const formData = cloneDeep(this.state.formData) @@ -225,7 +248,7 @@ export default class ImportSubformField extends Field { const formFieldConfig = (this.state.fields || [])[formFieldIndex] if (formFieldConfig) { - const fullPath = formFieldConfig.field === '' || path === '' ? `${formFieldConfig.field}${path}` : `${formFieldConfig.field}.${path}` + const fullPath = formFieldConfig.field === '' || path === '' ? `${this.state.withConfigPath}${formFieldConfig.field}${path}` : `${this.state.withConfigPath}${formFieldConfig.field}.${path}` await this.props.onValueListAppend(fullPath, value, true) const formData = cloneDeep(this.state.formData) @@ -244,7 +267,7 @@ export default class ImportSubformField extends Field { const formFieldConfig = (this.state.fields || [])[formFieldIndex] if (formFieldConfig) { - const fullPath = formFieldConfig.field === '' || path === '' ? `${formFieldConfig.field}${path}` : `${formFieldConfig.field}.${path}` + const fullPath = formFieldConfig.field === '' || path === '' ? `${this.state.withConfigPath}${formFieldConfig.field}${path}` : `${this.state.withConfigPath}${formFieldConfig.field}.${path}` await this.props.onValueListSplice(fullPath, index, count, true) const formData = cloneDeep(this.state.formData) @@ -262,7 +285,7 @@ export default class ImportSubformField extends Field { const formFieldConfig = (this.state.fields || [])[formFieldIndex] if (formFieldConfig) { - const fullPath = formFieldConfig.field === '' || path === '' ? `${formFieldConfig.field}${path}` : `${formFieldConfig.field}.${path}` + const fullPath = formFieldConfig.field === '' || path === '' ? `${this.state.withConfigPath}${formFieldConfig.field}${path}` : `${this.state.withConfigPath}${formFieldConfig.field}.${path}` await this.props.onValueListSort(fullPath, index, sortType, true) const formData = cloneDeep(this.state.formData) @@ -311,9 +334,22 @@ export default class ImportSubformField extends Field { - if (JSON.stringify(data) !== JSON.stringify(this.state.fields)) { + let dataToUnstringfy = data + let dataToStringfy = JSON.stringify(data) + if (Object.prototype.toString.call(data) === "[object String]") { + try { + dataToStringfy = data + dataToUnstringfy = JSON.parse(data) + } catch (e) { + console.error('当前动态子表单接口响应数据格式不是合格的json字符串') + dataToUnstringfy = [] + dataToStringfy = '[]' + } + } + (this.props.config.withConfig?.enable && this.props.config.withConfig?.configField) && this.props.onValueSet(this.props.config.withConfig.configField, data, true) + if (dataToStringfy !== JSON.stringify(this.state.fields)) { this.setState({ - fields: data + fields: dataToUnstringfy }) } }) @@ -362,7 +398,7 @@ export default class ImportSubformField extends Field Date: Thu, 9 Dec 2021 17:25:26 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E5=AD=90=E8=A1=A8?= =?UTF-8?q?=E5=8D=95fullPath=E6=8B=BC=E6=8E=A5=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../formFields/importSubform/index.tsx | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/components/formFields/importSubform/index.tsx b/src/components/formFields/importSubform/index.tsx index 946792b..ba4f046 100644 --- a/src/components/formFields/importSubform/index.tsx +++ b/src/components/formFields/importSubform/index.tsx @@ -29,7 +29,6 @@ export interface IImportSubformField { } interface IImportSubformFieldState { - withConfigPath: string // 动态子表单拓展路径 didMount: boolean fields: FieldConfigs[] formData: { status: 'normal' | 'error' | 'loading', message?: string }[] @@ -53,22 +52,23 @@ export default class ImportSubformField extends Field, prevState: IImportSubformFieldState) { - const withConfigPath = nextProps.config.withConfig?.enable && nextProps.config.withConfig?.dataField ? `${nextProps.config.withConfig.dataField}.` : '' - if (withConfigPath !== prevState.withConfigPath) { - return { withConfigPath } + getFullpath (field: string, path?: string) { + const withConfigPath = this.props.config.withConfig?.enable && this.props.config.withConfig?.dataField ? `${this.props.config.withConfig.dataField}` : '' + if (path === undefined) { + const fullPath = field === '' || withConfigPath === '' ? `${withConfigPath}${field}` : `${withConfigPath}.${field}` + return fullPath } - return null + const path_ = field === '' || path === '' ? `${field}${path}` : `${field}.${path}` + const fullPath = path_ === '' || withConfigPath === '' ? `${withConfigPath}${path_}` : `${withConfigPath}.${path_}` + return fullPath } - didMount = async () => { await this.setState({ didMount: true @@ -210,7 +210,7 @@ export default class ImportSubformField extends Field { const formFieldConfig = (this.state.fields || [])[formFieldIndex] if (formFieldConfig) { - const fullPath = formFieldConfig.field === '' || path === '' ? `${this.state.withConfigPath}${formFieldConfig.field}${path}` : `${this.state.withConfigPath}${formFieldConfig.field}.${path}` + const fullPath = this.getFullpath(formFieldConfig.field, path) await this.props.onValueSet(fullPath, value, true) const formData = cloneDeep(this.state.formData) @@ -229,7 +229,7 @@ export default class ImportSubformField extends Field { const formFieldConfig = (this.state.fields || [])[formFieldIndex] if (formFieldConfig) { - const fullPath = formFieldConfig.field === '' || path === '' ? `${this.state.withConfigPath}${formFieldConfig.field}${path}` : `${this.state.withConfigPath}${formFieldConfig.field}.${path}` + const fullPath = this.getFullpath(formFieldConfig.field, path) await this.props.onValueUnset(fullPath, true) const formData = cloneDeep(this.state.formData) @@ -248,7 +248,7 @@ export default class ImportSubformField extends Field { const formFieldConfig = (this.state.fields || [])[formFieldIndex] if (formFieldConfig) { - const fullPath = formFieldConfig.field === '' || path === '' ? `${this.state.withConfigPath}${formFieldConfig.field}${path}` : `${this.state.withConfigPath}${formFieldConfig.field}.${path}` + const fullPath = this.getFullpath(formFieldConfig.field, path) await this.props.onValueListAppend(fullPath, value, true) const formData = cloneDeep(this.state.formData) @@ -267,7 +267,7 @@ export default class ImportSubformField extends Field { const formFieldConfig = (this.state.fields || [])[formFieldIndex] if (formFieldConfig) { - const fullPath = formFieldConfig.field === '' || path === '' ? `${this.state.withConfigPath}${formFieldConfig.field}${path}` : `${this.state.withConfigPath}${formFieldConfig.field}.${path}` + const fullPath = this.getFullpath(formFieldConfig.field, path) await this.props.onValueListSplice(fullPath, index, count, true) const formData = cloneDeep(this.state.formData) @@ -285,7 +285,7 @@ export default class ImportSubformField extends Field { const formFieldConfig = (this.state.fields || [])[formFieldIndex] if (formFieldConfig) { - const fullPath = formFieldConfig.field === '' || path === '' ? `${this.state.withConfigPath}${formFieldConfig.field}${path}` : `${this.state.withConfigPath}${formFieldConfig.field}.${path}` + const fullPath = this.getFullpath(formFieldConfig.field, path) await this.props.onValueListSort(fullPath, index, sortType, true) const formData = cloneDeep(this.state.formData) @@ -398,7 +398,7 @@ export default class ImportSubformField extends Field Date: Thu, 9 Dec 2021 19:48:40 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20fullpath=E8=8E=B7=E5=8F=96=E6=96=B9?= =?UTF-8?q?=E5=BC=8F=E6=94=B9=E7=94=A8=E6=AD=A3=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/formFields/importSubform/index.tsx | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/components/formFields/importSubform/index.tsx b/src/components/formFields/importSubform/index.tsx index ba4f046..ea2a323 100644 --- a/src/components/formFields/importSubform/index.tsx +++ b/src/components/formFields/importSubform/index.tsx @@ -58,14 +58,10 @@ export default class ImportSubformField extends Field