diff --git a/packages/runtime/CHANGELOG.md b/packages/runtime/CHANGELOG.md index 78a34f4d6ebde982bc7133a3ba4987a3a792847b..135647f309d243339f29d17ddbad2594c0d6dcdc 100644 --- a/packages/runtime/CHANGELOG.md +++ b/packages/runtime/CHANGELOG.md @@ -13,6 +13,7 @@ - 新增移动端mobGetSignMethod全局参数,控制移动端授权签名数据获取方式 - 新增移动端mobWeChatDebug全局参数,控制是否开启微信js-sdk的debug模式 - 新增微信工具类,包含获取签名getSign、配置微信授权config方法 +- 新增表单全局参数validateMode与表单部件参数validatemode,为notification时表单项错误信息以通知方式显示 ### Fixed diff --git a/packages/runtime/src/config/global-config.ts b/packages/runtime/src/config/global-config.ts index fa1a56102ef7a97fd65f3576587217ce6a1d6522..7f77d2564f695768e68e9e271123954f61fd1e31 100644 --- a/packages/runtime/src/config/global-config.ts +++ b/packages/runtime/src/config/global-config.ts @@ -66,6 +66,7 @@ export class GlobalConfig implements IGlobalConfig { mobShowEditorBorder: false, emptyHiddenUnit: true, showTipsIcon: true, + validateMode: 'default', }; // 全局看板配置 diff --git a/packages/runtime/src/controller/control/form/form-detail/form-item/form-item.controller.ts b/packages/runtime/src/controller/control/form/form-detail/form-item/form-item.controller.ts index 86765ac49cdd784d310a5efab58ddf49b63f365a..688d9e486848d10ac9a9ebedf3e37dd26ffa039a 100644 --- a/packages/runtime/src/controller/control/form/form-detail/form-item/form-item.controller.ts +++ b/packages/runtime/src/controller/control/form/form-detail/form-item/form-item.controller.ts @@ -307,7 +307,18 @@ export class FormItemController // 刚加载初始化时的值不校验,只校验值项和自身值变更 if (name.includes(this.name) || name.includes(this.valueItemName!)) { - this.validate(); + const bol = await this.validate(); + // 值变更且未校验通过时提示错误信息 + if ( + this.form.validateMode === 'notification' && + !bol && + this.state.error + ) { + ibiz.notification.error({ + title: ibiz.i18n.t('app.error'), + desc: this.state.error, + }); + } } // 有表单项更新,且是自身变更时,触发表单项更新 diff --git a/packages/runtime/src/controller/control/form/form/form.controller.ts b/packages/runtime/src/controller/control/form/form/form.controller.ts index 39f1917fe1965f5c87aec3462ae01c859803a1ef..3624368f5bcee1972bf64d1a2695688ace8aeaba 100644 --- a/packages/runtime/src/controller/control/form/form/form.controller.ts +++ b/packages/runtime/src/controller/control/form/form/form.controller.ts @@ -136,6 +136,19 @@ export abstract class FormController< return this.state.data; } + /** + * @description 校验模式 + * @readonly + * @type {('default' | 'notification')} + * @memberof FormController + */ + get validateMode(): 'default' | 'notification' { + if (this.controlParams.validatemode) { + return this.controlParams.validatemode; + } + return ibiz.config.form.validateMode; + } + protected initState(): void { super.initState(); this.state.activeTab = this.model.deformPages?.[0]?.id || ''; @@ -487,7 +500,21 @@ export abstract class FormController< ); // 找不到value为false即全部是true - return values.findIndex(value => !value) === -1; + const result = values.findIndex(value => !value) === -1; + // 校验模式为通知时提示错误信息 + if (this.validateMode === 'notification' && !result) { + // 此处只处理表单项错误信息,多数据部件与关系界面由其内部部件提示错误信息 + const errorItems = [...this.formItems].filter( + formItem => formItem.state.error, + ); + const errors = errorItems.map(formItem => formItem.state.error!); + ibiz.notification.error({ + title: ibiz.i18n.t('runtime.controller.control.form.formCompletion'), + desc: errors.join('
'), + isHtmlDesc: true, + }); + } + return result; } /** diff --git a/packages/runtime/src/interface/api/common/global-config/i-api-global-form-config.ts b/packages/runtime/src/interface/api/common/global-config/i-api-global-form-config.ts index a03fc103039d0a0d1394f104bd2377fe45104d68..d78355d2a95ac6848145b4c06127cb3cbbf3a96e 100644 --- a/packages/runtime/src/interface/api/common/global-config/i-api-global-form-config.ts +++ b/packages/runtime/src/interface/api/common/global-config/i-api-global-form-config.ts @@ -50,4 +50,12 @@ export interface IApiGlobalFormConfig { * @memberof IApiGlobalFormConfig */ showTipsIcon: boolean; + + /** + * @description 校验模式(default:默认模式,错误信息显示在表单项下方;notification:通知模式,错误信息显示在页面右上角弹框中) + * @type {('default' | 'notification')} + * @default 'default' + * @memberof IApiGlobalFormConfig + */ + validateMode: 'default' | 'notification'; }