提交 b306abd2 编写于 作者: Mosher's avatar Mosher

update:更新

上级 f1b77f76
...@@ -185,6 +185,21 @@ export class MainView extends ViewBase { ...@@ -185,6 +185,21 @@ export class MainView extends ViewBase {
}); });
} }
/**
* @description 处理部件事件
* @param {IActionParam} actionParam
* @memberof MainView
*/
public onCtrlEvent(actionParam: IActionParam) {
super.onCtrlEvent(actionParam);
const { tag, action, data } = actionParam;
if (tag === this.state.xDataControlName) {
if (action === 'save') {
this.emit('onViewEvent', { tag: this.state.viewName, action: 'viewsave', data: data });
}
}
}
/** /**
* @description 安装视图所有功能模块的方法 * @description 安装视图所有功能模块的方法
* *
......
...@@ -518,7 +518,7 @@ export class FormControl extends MainControl { ...@@ -518,7 +518,7 @@ export class FormControl extends MainControl {
* @protected * @protected
* @param [opt={}] * @param [opt={}]
*/ */
protected async save(opt: any = {}) { } protected async save(opt: any = {}, showResultInfo: boolean = true, isStateNext: boolean = true) { }
/** /**
* @description 使用加载功能模块 * @description 使用加载功能模块
...@@ -534,7 +534,7 @@ export class FormControl extends MainControl { ...@@ -534,7 +534,7 @@ export class FormControl extends MainControl {
* @param [opt={}] * @param [opt={}]
* @return {*} * @return {*}
*/ */
const save = async (opt: any = {}) => { const save = async (opt: any = {}, showResultInfo: boolean = true, isStateNext: boolean = true) => {
try { try {
// 获取需要的状态变量 // 获取需要的状态变量
const { controlService, context, viewParams, showBusyIndicator, data, formSubject } = this.state; const { controlService, context, viewParams, showBusyIndicator, data, formSubject } = this.state;
...@@ -548,6 +548,8 @@ export class FormControl extends MainControl { ...@@ -548,6 +548,8 @@ export class FormControl extends MainControl {
const arg: any = { ...opt }; const arg: any = { ...opt };
Object.assign(arg, data.getDo()); Object.assign(arg, data.getDo());
Object.assign(arg, _viewParams); Object.assign(arg, _viewParams);
if (isStateNext && this.state.drCount > 0) {
}
// 拷贝模式 // 拷贝模式
if (_viewParams && _viewParams.copyMode) { if (_viewParams && _viewParams.copyMode) {
data.srfuf = '0'; data.srfuf = '0';
...@@ -630,7 +632,7 @@ export class FormControl extends MainControl { ...@@ -630,7 +632,7 @@ export class FormControl extends MainControl {
const remove = async (opt: any = {}) => { const remove = async (opt: any = {}) => {
try { try {
// 获取需要的状态变量 // 获取需要的状态变量
const { controlService, context, viewParams, showBusyIndicator } = this.state; const { controlService, context, viewParams, showBusyIndicator, formSubject } = this.state;
// 判断实体行为 // 判断实体行为
const removeAction = this.state.controlAction.removeAction; const removeAction = this.state.controlAction.removeAction;
...@@ -652,9 +654,10 @@ export class FormControl extends MainControl { ...@@ -652,9 +654,10 @@ export class FormControl extends MainControl {
if (!response.status || response.status !== 200) { if (!response.status || response.status !== 200) {
return; return;
} }
// 请求后处理 // 请求后处理
this.state.data = response.data; // this.state.data = response.data;
formSubject.next({ type: 'remove', data: response.data });
// TODO 中心服务通知全局刷新
} catch (error) { } catch (error) {
// TODO 错误异常处理 // TODO 错误异常处理
console.log(error); console.log(error);
......
...@@ -17,6 +17,14 @@ export class GridControl extends MDControl { ...@@ -17,6 +17,14 @@ export class GridControl extends MDControl {
*/ */
public declare state: GridControlState; public declare state: GridControlState;
/**
* @description 表单组件引用(用于校验值规则)
* @private
* @type {*}
* @memberof GridControl
*/
private formRef: any;
/** /**
* @description * @description
* @param {GridControlProps} props * @param {GridControlProps} props
...@@ -153,6 +161,10 @@ export class GridControl extends MDControl { ...@@ -153,6 +161,10 @@ export class GridControl extends MDControl {
this.load({ sort: `${sorter.field},${sorter.order == 'descend' ? 'desc' : 'asc'}` }); this.load({ sort: `${sorter.field},${sorter.order == 'descend' ? 'desc' : 'asc'}` });
} }
} }
const useFormRef = () => {
this.formRef = ref(null);
return this.formRef;
}
return { return {
useScrollOption, useScrollOption,
useRowKey, useRowKey,
...@@ -162,7 +174,8 @@ export class GridControl extends MDControl { ...@@ -162,7 +174,8 @@ export class GridControl extends MDControl {
useRowSelectionOption, useRowSelectionOption,
onResizeColumn, onResizeColumn,
onGridChange, onGridChange,
onExpandedRowsChange onExpandedRowsChange,
formRef:useFormRef()
} }
} }
...@@ -778,6 +791,16 @@ export class GridControl extends MDControl { ...@@ -778,6 +791,16 @@ export class GridControl extends MDControl {
} }
} }
/**
* @description 校验值规则
* @protected
* @return {*} {Promise<boolean>}
* @memberof GridControl
*/
protected async validateAll(): Promise<boolean> {
return true;
}
/** /**
* @description 安装部件所有功能模块的方法 * @description 安装部件所有功能模块的方法
* @return {*} * @return {*}
......
...@@ -137,7 +137,10 @@ export class MDControl extends MainControl { ...@@ -137,7 +137,10 @@ export class MDControl extends MainControl {
try { try {
const { controlService, context, viewParams, showBusyIndicator, items, controlAction } = this.state; const { controlService, context, viewParams, showBusyIndicator, items, controlAction } = this.state;
this.setUpdateDefault(); this.setUpdateDefault();
// TODO 值规则校验处理 if (!(await this.validateAll())) {
this.showErrorMessages();
return;
}
for (const item of items) { for (const item of items) {
const { updateAction, createAction } = controlAction; const { updateAction, createAction } = controlAction;
const saveAction: any = const saveAction: any =
...@@ -619,6 +622,36 @@ export class MDControl extends MainControl { ...@@ -619,6 +622,36 @@ export class MDControl extends MainControl {
return this.state.selectedData; return this.state.selectedData;
} }
/**
* @description 校验值规则
* @protected
* @memberof MDControl
*/
protected async validateAll(): Promise<boolean> {
// 各部件重写此方法完成校验逻辑
return true;
}
/**
* @description 展示错误信息
* @private
* @memberof MDControl
*/
private showErrorMessages() {
const errorMessage = this.state.errorMessage;
if (errorMessage && errorMessage.length) {
const getMessage = () => {
const messages: any[] = [];
errorMessage.forEach((message: string) => {
messages.push(h('p', {}, message));
});
return messages;
}
const content = h('div', { class: 'error-messages', style: { 'display': 'flex', 'flex-direction': 'column' } }, getMessage());
App.getNotificationService().error({ message: '值规则错误', description: content });
}
}
/** /**
* @description 安装部件所有功能模块的方法 * @description 安装部件所有功能模块的方法
* @return {*} * @return {*}
......
import Schema from 'async-validator';
import { isEmpty, isExistAndNotEmpty } from "@core"; import { isEmpty, isExistAndNotEmpty } from "@core";
/** /**
...@@ -710,4 +711,23 @@ export class Verify { ...@@ -710,4 +711,23 @@ export class Verify {
// } // }
return rules; return rules;
} }
/**
* 校验项规则
*
* @static
* @param {string} property
* @param {*} data
* @param {*} rules
* @return {*}
* @memberof Verify
*/
public static validateItem(property: string, data: any, rules: any) {
// 1.获取数值和规则
const rule = rules[property];
// 2.创建校验规则
const schema = new Schema({ [property]: rule });
// 校验返回Promise
return schema.validate(data);
}
} }
...@@ -57,7 +57,10 @@ export const ctrlState = { ...@@ -57,7 +57,10 @@ export const ctrlState = {
appDeKeyFieldName: '{{#if ctrl.appEntity.keyPSAppDEField}}{{ctrl.appEntity.keyPSAppDEField.codeName}}{{/if}}', appDeKeyFieldName: '{{#if ctrl.appEntity.keyPSAppDEField}}{{ctrl.appEntity.keyPSAppDEField.codeName}}{{/if}}',
appDeMajorFieldName: '{{#if ctrl.appEntity.majorPSAppDEField}}{{ctrl.appEntity.majorPSAppDEField.codeName}}{{/if}}', appDeMajorFieldName: '{{#if ctrl.appEntity.majorPSAppDEField}}{{ctrl.appEntity.majorPSAppDEField.codeName}}{{/if}}',
enableAutoSave: {{ctrl.enableAutoSave}}, enableAutoSave: {{ctrl.enableAutoSave}},
// 错误信息
errorMessage: [], errorMessage: [],
// 关系界面计数器
drCount: 0,
// 新建默认值 // 新建默认值
createDefaultItems: [ createDefaultItems: [
{{#each ctrl.psDEFormItems as | formItem |}} {{#each ctrl.psDEFormItems as | formItem |}}
......
...@@ -54,6 +54,8 @@ export const ctrlState = { ...@@ -54,6 +54,8 @@ export const ctrlState = {
{{/if}} {{/if}}
{{/each}} {{/each}}
], ],
// 错误信息
errorMessages: [],
{{#if (and ctrl.psDEDataExport ctrl.psDEDataExport.psDEDataExportItems)}} {{#if (and ctrl.psDEDataExport ctrl.psDEDataExport.psDEDataExportItems)}}
// 数据导出 // 数据导出
exportItems: [ exportItems: [
......
...@@ -40,7 +40,7 @@ const emit = defineEmits<CtrlEmit>(); ...@@ -40,7 +40,7 @@ const emit = defineEmits<CtrlEmit>();
// 安装功能模块,提供状态和能力 // 安装功能模块,提供状态和能力
const { name, state, useCustom, onEditorEvent, onToolbarEvent, onActionColEvent, newRow, remove, save, load, refresh, getData, exportExcel } = new GridControl(ctrlState, props, emit).moduleInstall(); const { name, state, useCustom, onEditorEvent, onToolbarEvent, onActionColEvent, newRow, remove, save, load, refresh, getData, exportExcel } = new GridControl(ctrlState, props, emit).moduleInstall();
const { useScrollOption, useRowKey, useRowClassName, useCustomRow, useRowSelectionOption, onResizeColumn, onGridChange, useExpandedRowKeys, onExpandedRowsChange } = useCustom; const { useScrollOption, useRowKey, useRowClassName, useCustomRow, useRowSelectionOption, onResizeColumn, onGridChange, useExpandedRowKeys, onExpandedRowsChange, formRef } = useCustom;
{{#if ctrl.batchToolBarItems}} {{#if ctrl.batchToolBarItems}}
const renderBatchToolbar = (total: number, range: IParam[]) => { const renderBatchToolbar = (total: number, range: IParam[]) => {
return ( return (
...@@ -62,7 +62,7 @@ const renderBatchToolbar = (total: number, range: IParam[]) => { ...@@ -62,7 +62,7 @@ const renderBatchToolbar = (total: number, range: IParam[]) => {
defineExpose({ name, state, newRow, remove, save, load, refresh, getData, exportExcel }); defineExpose({ name, state, newRow, remove, save, load, refresh, getData, exportExcel });
</script> </script>
<template> <template>
<a-form name="{{ctrl.name}}" class="app-grid-form" > <a-form name="{{ctrl.name}}" class="app-grid-form" ref="formRef" >
<a-table <a-table
bordered bordered
sticky sticky
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册