From d2d05f2d394f7e337f129315b336f169475e8344 Mon Sep 17 00:00:00 2001 From: cuiwenlong7 Date: Sat, 7 May 2022 11:02:11 +0800 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20=E8=A1=A8=E5=8D=95=E6=AD=A5?= =?UTF-8?q?=E9=AA=A4=EF=BC=88=E4=B8=8D=E6=B6=89=E5=8F=8A=E7=AD=9B=E9=80=89?= =?UTF-8?q?=E6=AD=A5=E9=AA=A4=EF=BC=89=E3=80=81formFields=E5=8C=85?= =?UTF-8?q?=E8=A3=B9=E7=BB=84=E4=BB=B6=E5=A2=9EsubLabelConfig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/formFields/common.tsx | 26 ++++++++++++++++++- src/components/formFields/form/index.tsx | 2 ++ src/components/formFields/group/index.tsx | 1 + .../formFields/importSubform/index.tsx | 1 + src/components/formFields/tabs/index.tsx | 2 ++ src/steps/common.tsx | 21 +++++++++++++++ src/steps/form/index.tsx | 2 ++ 7 files changed, 54 insertions(+), 1 deletion(-) diff --git a/src/components/formFields/common.tsx b/src/components/formFields/common.tsx index 3bc88d3..320797e 100644 --- a/src/components/formFields/common.tsx +++ b/src/components/formFields/common.tsx @@ -1,11 +1,12 @@ import React from 'react' +import marked from 'marked' import { ColumnsConfig, ParamConfig } from '../../interface' import { FieldConfigs as getFieldConfigs } from './' import ParamHelper from '../../util/param' import { updateCommonPrefixItem } from '../../util/value' import { ConditionConfig } from '../../util/condition' -import { StatementConfig } from '../../util/statement' +import StatementHelper, { StatementConfig} from '../../util/statement' import { PageListItem } from '../../main' import { isEqual, get } from 'lodash' @@ -37,6 +38,11 @@ export interface FieldConfig { disabled?: boolean display?: 'none' defaultValue?: ParamConfig, + subLabelConfig?: { + enable: boolean + mode: 'plain' | 'markdown' | 'html' + content: StatementConfig + } condition?: ConditionConfig extra?: StatementConfig columns?: ColumnsConfig @@ -174,6 +180,24 @@ export class Field extends React.Component< didMount: () => Promise = async () => { } + /** + * 根据mode不同,处理subLabel内容 + * @param config 子项config + * @returns + */ + + handleSubLabelContent (config) { + const content = StatementHelper({ statement: config.subLabelConfig?.content?.statement || '', params: config.subLabelConfig?.content?.params || [] }, { data: this.props.data, step: this.props.step }).replace(/(^\s*)|(\s*$)/g, '') + const mode = config.subLabelConfig?.mode + switch (mode) { + case 'markdown': + return
+ case 'html': + return
+ } + return
{content}
+ } + /** * 上报param依赖字段名称 * @param field diff --git a/src/components/formFields/form/index.tsx b/src/components/formFields/form/index.tsx index f5c0f57..9459012 100644 --- a/src/components/formFields/form/index.tsx +++ b/src/components/formFields/form/index.tsx @@ -45,6 +45,7 @@ export interface IFormFieldItem { export interface IFormFieldItemField { index: number label: string + subLabel?: React.ReactNode required: boolean status: 'normal' | 'error' | 'loading' description?: string @@ -488,6 +489,7 @@ export default class FormField extends Field extends Field extends React.Component< } }; + +/** + * 步骤 根据mode不同,处理subLabel内容\ + * @param config 子项config + * @returns + */ + + handleSubLabelContent (config) { + const content = StatementHelper({ statement: config.subLabelConfig?.content?.statement || '', params: config.subLabelConfig?.content?.params || [] }, { data: this.props.data, step: this.props.step }).replace(/(^\s*)|(\s*$)/g, '') + const mode = config.subLabelConfig?.mode + switch (mode) { + case 'markdown': + return
+ case 'html': + return
+ } + return
{content}
+ } + stepPush = () => { this.props.onMount() } diff --git a/src/steps/form/index.tsx b/src/steps/form/index.tsx index cd077f1..c456641 100644 --- a/src/steps/form/index.tsx +++ b/src/steps/form/index.tsx @@ -154,6 +154,7 @@ export interface IButtonProps { export interface IFormItem { key: string | number, label: string, + subLabel?: React.ReactNode status: 'normal' | 'error' | 'loading' required: boolean description?: string @@ -699,6 +700,7 @@ export default class FormStep extends Step { // ts对clas const renderData = { key: formFieldIndex, label: formFieldConfig.label, + subLabel: formFieldConfig?.subLabelConfig?.enable ? this.handleSubLabelContent(formFieldConfig) : undefined, columns: columns?.enable ? { type: formFieldConfig.columns?.type || columns?.type || 'span', -- Gitee From 651d9b1f924410ce6342416a7e152e5c1805c058 Mon Sep 17 00:00:00 2001 From: cuiwenlong7 Date: Sat, 7 May 2022 11:06:00 +0800 Subject: [PATCH 2/4] =?UTF-8?q?feat:=20code=E7=BC=96=E8=BE=91=E5=99=A8?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/formFields/code/index.tsx | 51 +++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/src/components/formFields/code/index.tsx b/src/components/formFields/code/index.tsx index 09d8f27..17a0087 100644 --- a/src/components/formFields/code/index.tsx +++ b/src/components/formFields/code/index.tsx @@ -8,6 +8,10 @@ import { getBoolean } from '../../../util/value' * - height: 代码编辑器高度 * - theme: 编辑器主题风格 * - fullScreen: 是否支持全屏 + * - maxLength: 最大字符长度 + * - minLength: 最小字符长度 + * - cjkLength: 中文占字符数 + * - regExp: 正则校验配置 */ export interface CodeFieldConfig extends FieldConfig { type: 'code' @@ -15,6 +19,10 @@ export interface CodeFieldConfig extends FieldConfig { height: number theme: 'white' | 'black' fullScreen: boolean + maxLength?: number + minLength?: number + cjkLength?: number + regExp?: { expression: string, message?: string } } export interface ICodeField { @@ -61,7 +69,11 @@ export default class CodeField extends Field= 0 && valueMaxLength.length > maxLength) { + errors.push(new FieldError(`最长可输入${maxLength}个字符。`)) + } + } + + if (minLength !== undefined) { + let valueMinLength = value + if (cjkLength !== undefined) { + let valueMinCJKLength = '' + for (let valueMinCJKIndex = 0; valueMinCJKIndex < cjkLength; valueMinCJKIndex++) { + valueMinCJKLength += '*' + } + valueMinLength = valueMinLength.replace(/[\u4e00-\u9fa5]/g, valueMinCJKLength) + } + if (valueMinLength && minLength >= 0 && valueMinLength.length < minLength) { + errors.push(new FieldError(`最短需输入${minLength}个字符。`)) + } + } + + if (regExp !== undefined) { + if (!(new RegExp(regExp.expression)).test(value)) { + if (regExp.message) { + errors.push(new FieldError(regExp.message)) + } else { + errors.push(new FieldError('格式错误')) + } + } + } return errors.length ? errors : true } -- Gitee From 7715d1a3338ed6e1d996fe5094fcc724b0b3ccdb Mon Sep 17 00:00:00 2001 From: cuiwenlong7 Date: Mon, 9 May 2022 17:52:43 +0800 Subject: [PATCH 3/4] =?UTF-8?q?perf:=20enable=E5=88=A4=E6=96=AD=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E6=94=BE=E5=85=A5handleSubLabelContent=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/formFields/common.tsx | 23 +++++++++++-------- src/components/formFields/form/index.tsx | 2 +- src/components/formFields/group/index.tsx | 2 +- .../formFields/importSubform/index.tsx | 2 +- src/components/formFields/tabs/index.tsx | 2 +- src/steps/common.tsx | 19 ++++++++------- src/steps/form/index.tsx | 2 +- 7 files changed, 29 insertions(+), 23 deletions(-) diff --git a/src/components/formFields/common.tsx b/src/components/formFields/common.tsx index 320797e..7cb767b 100644 --- a/src/components/formFields/common.tsx +++ b/src/components/formFields/common.tsx @@ -185,17 +185,20 @@ export class Field extends React.Component< * @param config 子项config * @returns */ - - handleSubLabelContent (config) { - const content = StatementHelper({ statement: config.subLabelConfig?.content?.statement || '', params: config.subLabelConfig?.content?.params || [] }, { data: this.props.data, step: this.props.step }).replace(/(^\s*)|(\s*$)/g, '') - const mode = config.subLabelConfig?.mode - switch (mode) { - case 'markdown': - return
- case 'html': - return
+ + handleSubLabelContent (config) { + if (config?.subLabelConfig?.enable) { + const content = StatementHelper({ statement: config.subLabelConfig?.content?.statement || '', params: config.subLabelConfig?.content?.params || [] }, { data: this.props.data, step: this.props.step }).replace(/(^\s*)|(\s*$)/g, '') + const mode = config.subLabelConfig?.mode + switch (mode) { + case 'markdown': + return
+ case 'html': + return
+ } + return
{content}
} - return
{content}
+ return undefined } /** diff --git a/src/components/formFields/form/index.tsx b/src/components/formFields/form/index.tsx index 9459012..25a229f 100644 --- a/src/components/formFields/form/index.tsx +++ b/src/components/formFields/form/index.tsx @@ -489,7 +489,7 @@ export default class FormField extends Field extends Field extends React.Component< */ handleSubLabelContent (config) { - const content = StatementHelper({ statement: config.subLabelConfig?.content?.statement || '', params: config.subLabelConfig?.content?.params || [] }, { data: this.props.data, step: this.props.step }).replace(/(^\s*)|(\s*$)/g, '') - const mode = config.subLabelConfig?.mode - switch (mode) { - case 'markdown': - return
- case 'html': - return
+ if (config?.subLabelConfig?.enable) { + const content = StatementHelper({ statement: config.subLabelConfig?.content?.statement || '', params: config.subLabelConfig?.content?.params || [] }, { data: this.props.data, step: this.props.step }).replace(/(^\s*)|(\s*$)/g, '') + const mode = config.subLabelConfig?.mode + switch (mode) { + case 'markdown': + return
+ case 'html': + return
+ } + return
{content}
} - return
{content}
+ return undefined } stepPush = () => { diff --git a/src/steps/form/index.tsx b/src/steps/form/index.tsx index c456641..1685d11 100644 --- a/src/steps/form/index.tsx +++ b/src/steps/form/index.tsx @@ -700,7 +700,7 @@ export default class FormStep extends Step { // ts对clas const renderData = { key: formFieldIndex, label: formFieldConfig.label, - subLabel: formFieldConfig?.subLabelConfig?.enable ? this.handleSubLabelContent(formFieldConfig) : undefined, + subLabel: this.handleSubLabelContent(formFieldConfig), columns: columns?.enable ? { type: formFieldConfig.columns?.type || columns?.type || 'span', -- Gitee From 8e8c8264a3856541f169cc28b6cde0e19f53f580 Mon Sep 17 00:00:00 2001 From: cuiwenlong7 Date: Mon, 9 May 2022 17:58:14 +0800 Subject: [PATCH 4/4] =?UTF-8?q?style:=20=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/steps/common.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/steps/common.tsx b/src/steps/common.tsx index ae16174..de4853a 100644 --- a/src/steps/common.tsx +++ b/src/steps/common.tsx @@ -55,8 +55,8 @@ export default class Step extends React.Component< * @returns */ - handleSubLabelContent (config) { - if (config?.subLabelConfig?.enable) { + handleSubLabelContent (config) { + if (config?.subLabelConfig?.enable) { const content = StatementHelper({ statement: config.subLabelConfig?.content?.statement || '', params: config.subLabelConfig?.content?.params || [] }, { data: this.props.data, step: this.props.step }).replace(/(^\s*)|(\s*$)/g, '') const mode = config.subLabelConfig?.mode switch (mode) { -- Gitee