935 lines
20 KiB
JavaScript
935 lines
20 KiB
JavaScript
import {
|
||
observable,
|
||
action,
|
||
computed
|
||
} from 'mobx';
|
||
import {
|
||
WeaForm,
|
||
WeaTableNew,
|
||
} from 'comsMobx';
|
||
import {
|
||
WeaLocaleProvider,
|
||
} from 'ecCom';
|
||
import {
|
||
Modal,
|
||
Button,
|
||
message,
|
||
} from 'antd';
|
||
import {
|
||
toJS
|
||
} from 'mobx';
|
||
import {
|
||
fetch,
|
||
getMenusCreationConfig,
|
||
getTopButtons,
|
||
getDropMenuDatas,
|
||
getSearchButtons,
|
||
callback,
|
||
componentReset,
|
||
string,
|
||
executeFunction,
|
||
page,
|
||
} from '../util/save-time-util.js';
|
||
import {
|
||
SearchForm
|
||
} from '../public/sweet-form.js';
|
||
const getLabel = WeaLocaleProvider.getLabel;
|
||
|
||
const confirm = Modal.confirm;
|
||
const {
|
||
TableStore
|
||
} = WeaTableNew;
|
||
|
||
class CommonStore {
|
||
hasOrgTree = true; //页面是否包含组织树
|
||
hasAdvancedSearch = true; //页面是否包含高级搜索
|
||
hasTable = true; //页面是否包含列表
|
||
hasRadioGroup = false; //页面是否包含单选组合
|
||
hasTab = false; //页面是否包含标签页
|
||
isOrgTreeInfluenceForm = false; //组织树是否影响表单的生成
|
||
|
||
asyncFetch; //异步请求
|
||
customizedStore; //各个页面的store
|
||
permissAsyncName; //权限接口名称
|
||
menusAsyncName; //功能按钮接口名称
|
||
searchAsyncName; //高级搜索接口名称
|
||
tableAsyncName; //列表接口名称
|
||
delAsyncName; //删除接口名称
|
||
formAsyncName; //表单接口名称
|
||
secondFormAsyncName; //同步设置表单接口名称
|
||
addAsyncName; //新建保存接口名称
|
||
editAsyncName; //编辑保存接口名称
|
||
saveSecondFormAsyncName; //同步设置保存接口名称
|
||
tabAsyncName; //标签页接口名称
|
||
radioGroupAsyncName; //单选组合接口名称
|
||
editIdPropertyName; //编辑保存id名称
|
||
delIdPropertyName; //删除id名称
|
||
searchLinkageFieldName; //高级搜索表单需要联动的表单域
|
||
|
||
@action setPageConfig = (params) => {
|
||
page.initConfig(params, this);
|
||
}
|
||
|
||
//************权限*************
|
||
@observable pageAccessPermission = {
|
||
hasRight: false,
|
||
loading: true,
|
||
}
|
||
//获取页面权限
|
||
@action getPermissionInfo = () => {
|
||
fetch({
|
||
asyncFetch: this.asyncFetch,
|
||
name: this.permissAsyncName,
|
||
logic: (cb) => {
|
||
const {
|
||
hasRight
|
||
} = cb;
|
||
|
||
if (hasRight) {
|
||
this.pageAccessPermission.hasRight = true;
|
||
}
|
||
this.pageAccessPermission.loading = false;
|
||
|
||
const {
|
||
receivePermissionInfo
|
||
} = this.customizedStore;
|
||
|
||
receivePermissionInfo && receivePermissionInfo(cb);
|
||
}
|
||
});
|
||
}
|
||
|
||
@action resetAccessPermissionProps = () => {
|
||
['hasRight', 'loading'].map((v, i) => {
|
||
this.pageAccessPermission[v] = (i === 0) ? false : true;
|
||
});
|
||
}
|
||
|
||
//*************头部**************
|
||
topComponentStaticProps = {
|
||
icon: <i className='icon-coms-hrm'/>,
|
||
iconBgcolor: '#217346',
|
||
showDropIcon: true
|
||
};
|
||
|
||
@observable top = {
|
||
btnMenu: [],
|
||
}
|
||
|
||
//获取按钮、下拉菜单和右键菜单的复合数据
|
||
@action getMenus = () => {
|
||
const {
|
||
menusParams,
|
||
setButtonSelectDatas,
|
||
} = this.customizedStore;
|
||
|
||
fetch({
|
||
asyncFetch: this.asyncFetch,
|
||
name: this.menusAsyncName,
|
||
fetchParams: menusParams,
|
||
logic: (cb) => {
|
||
const {
|
||
btnMenu,
|
||
buttonSelect,
|
||
} = cb;
|
||
|
||
this.top.btnMenu = btnMenu;
|
||
//页面存在下拉菜单
|
||
if (buttonSelect) {
|
||
setButtonSelectDatas ? setButtonSelectDatas(buttonSelect) : console.error(`setButtonSelectDatas(function) is not defined,it should be defined in customizedStore! `);
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
//根据btnMenu,计算出topMenu和rightMenu
|
||
@computed get menusCreationConfig() {
|
||
const {
|
||
btnMenu
|
||
} = this.top;
|
||
|
||
return getMenusCreationConfig(btnMenu);
|
||
}
|
||
|
||
//Top组件的按钮
|
||
get topButtons() {
|
||
const {
|
||
topMenu
|
||
} = this.menusCreationConfig;
|
||
|
||
const {
|
||
menuStatus
|
||
} = this.customizedStore;
|
||
|
||
return getTopButtons.call(this.customizedStore, {
|
||
datas: topMenu,
|
||
disabled: menuStatus ? menuStatus : console.error(`menuStatus is not defined,it should be defined in customizedStore! `),
|
||
})
|
||
}
|
||
|
||
//获取右键菜单和top组件下拉菜单的数据
|
||
get dropMenuDatas() {
|
||
const {
|
||
rightMenu
|
||
} = this.menusCreationConfig;
|
||
|
||
const {
|
||
menuStatus
|
||
} = this.customizedStore;
|
||
|
||
return getDropMenuDatas.call(this.customizedStore, {
|
||
datas: rightMenu,
|
||
disabled: menuStatus ? menuStatus : console.error(`menuStatus is not defined,it should be defined in customizedStore! `),
|
||
});
|
||
|
||
}
|
||
|
||
@action resetMenusConfig = () => {
|
||
this.top.btnMenu = [];
|
||
}
|
||
|
||
//**************组织树******************
|
||
@observable orgTree = {
|
||
triggerRefresh: false,
|
||
organizationId: '',
|
||
organizationType: '0', //默认总部
|
||
}
|
||
|
||
//组织树点击事件的回调函数
|
||
@action handleOrgTreeNodeClick = (params) => {
|
||
const {
|
||
id,
|
||
type,
|
||
name
|
||
} = params;
|
||
|
||
const {
|
||
changeSpinning,
|
||
resetTableEditableDatas,
|
||
isNeedCallMenusAsyncFetch,
|
||
} = this.customizedStore;
|
||
|
||
//设置当前节点的类型
|
||
this.orgTree.organizationType = type;
|
||
//设置当前节点的ID
|
||
this.orgTree.organizationId = id;
|
||
//触发页面的加载状态
|
||
changeSpinning && changeSpinning(true);
|
||
//是否需要重新调用Menus接口
|
||
isNeedCallMenusAsyncFetch && this.getMenus();
|
||
//初始化高级搜索
|
||
this.hasAdvancedSearch && this.initAdvanceSearch();
|
||
//获取标签页数据、初始化标签页
|
||
this.hasTab && this.getTabDatas();
|
||
//重置单选组合
|
||
this.hasRadioGroup && this.resetRadioGroup();
|
||
//重置可编辑列表保存参数
|
||
resetTableEditableDatas && resetTableEditableDatas();
|
||
//刷新列表
|
||
if (this.hasTable && !this.hasTab && !this.hasRadioGroup) {
|
||
this.getSearchList();
|
||
}
|
||
}
|
||
|
||
//手动刷新组织树
|
||
@action triggerRefresh = () => {
|
||
this.orgTree.triggerRefresh = !this.orgTree.triggerRefresh;
|
||
}
|
||
|
||
@action resetOrgTreeProps = () => {
|
||
['organizationType', 'organizationId'].map((v, i) => {
|
||
this.orgTree[v] = (i === 0) ? '0' : ''
|
||
});
|
||
}
|
||
|
||
@computed get orgTreeBaseCallbackParamsCollector() {
|
||
const {
|
||
organizationType,
|
||
organizationId
|
||
} = this.orgTree;
|
||
|
||
const callbackParams = {
|
||
organizationType,
|
||
organizationId,
|
||
};
|
||
|
||
return callbackParams;
|
||
}
|
||
|
||
//***************高级搜索*****************
|
||
@observable search = {
|
||
isPanelShow: false,
|
||
conditions: [],
|
||
form: new WeaForm(),
|
||
}
|
||
|
||
//获取生成高级搜索表单的数据
|
||
@action getSearchCondition = () => {
|
||
fetch({
|
||
asyncFetch: this.asyncFetch,
|
||
name: this.searchAsyncName,
|
||
logic: (cb) => {
|
||
const {
|
||
condition
|
||
} = cb;
|
||
|
||
this.search.conditions = condition;
|
||
this.search.form.initFormFields(condition);
|
||
}
|
||
});
|
||
}
|
||
|
||
//获取高级搜索基本值
|
||
@computed get searchBaseValue() {
|
||
const {
|
||
form
|
||
} = this.search;
|
||
|
||
return form.isFormInit ? form.getFormParams()[this.searchLinkageFieldName] : '';
|
||
}
|
||
|
||
//获取高级搜索表单
|
||
get searchsAd() {
|
||
const {
|
||
form
|
||
} = this.search;
|
||
|
||
return <div
|
||
onKeyDown={(e) =>( e.keyCode == 13 && e.target.tagName === "INPUT") && ['changeSearchPanelStatus', 'getSearchList'].map((f, i) => this[f](i === 0 && false))}
|
||
>{<SearchForm ecId={`${this && this.props && this.props.ecId || ''}_SearchForm@mqzc7p`} {...this.search} isFormInit={form.isFormInit}/>}</div>
|
||
}
|
||
|
||
//获取高级搜索按钮组
|
||
get buttonsAd() {
|
||
const {
|
||
form
|
||
} = this.search;
|
||
|
||
const buttons = getSearchButtons({
|
||
form,
|
||
search: () => ['changeSearchPanelStatus', 'getSearchList'].map((f, i) => this[f](i === 0 && false)),
|
||
cancel: () => this.changeSearchPanelStatus(false),
|
||
});
|
||
|
||
return buttons;
|
||
}
|
||
|
||
//获取高级搜索下拉面板的高度
|
||
@computed get advanceHeight() {
|
||
const {
|
||
conditions
|
||
} = this.search;
|
||
|
||
const length = conditions.length > 0 ? conditions[0].items.length : 0;
|
||
|
||
return Math.ceil(length / 2) * 52 + 20;
|
||
}
|
||
|
||
//改变下拉面板的状态
|
||
@action changeSearchPanelStatus = (bool) => {
|
||
this.search.isPanelShow = bool;
|
||
}
|
||
|
||
//联动高级搜索表单中的字段
|
||
@action changeAdvanceSearchField = (val) => {
|
||
const {
|
||
form
|
||
} = this.search;
|
||
|
||
form.isFormInit && form.updateFields({
|
||
[this.searchLinkageFieldName]: {
|
||
value: val
|
||
}
|
||
})
|
||
}
|
||
|
||
//初始化高级搜索
|
||
@action initAdvanceSearch = () => {
|
||
const {
|
||
form,
|
||
isPanelShow,
|
||
} = this.search;
|
||
|
||
if (isPanelShow) this.changeSearchPanelStatus(false);
|
||
|
||
if (form.isFormInit) {
|
||
form.reset(); //点击当前菜单
|
||
} else {
|
||
this.search.form = new WeaForm(); //切换菜单
|
||
}
|
||
}
|
||
|
||
@action resetSearchProps = () => {
|
||
['conditions', 'form', 'isPanelShow'].map((v, i) => {
|
||
this.search[v] = (i === 0) ? [] : (i === 1) ? new WeaForm() : false;
|
||
});
|
||
}
|
||
|
||
//***************页签*****************
|
||
@observable tab = {
|
||
activeKey: '0',
|
||
datas: [],
|
||
ids: [],
|
||
}
|
||
|
||
//切换标签页
|
||
@action setTabActiveKey = (key) => {
|
||
const {
|
||
handleTabClick
|
||
} = this.customizedStore;
|
||
|
||
this.tab.activeKey = key;
|
||
handleTabClick && handleTabClick();
|
||
}
|
||
|
||
@action getTabDatas = () => {
|
||
if (!this.tabAsyncName) return
|
||
|
||
const {
|
||
organizationType,
|
||
organizationId
|
||
} = this.orgTree;
|
||
|
||
const params = {};
|
||
|
||
if (this.hasOrgTree) {
|
||
Object.assign(params, {
|
||
organizationType,
|
||
organizationId
|
||
});
|
||
}
|
||
|
||
fetch({
|
||
asyncFetch: this.asyncFetch,
|
||
name: this.tabAsyncName,
|
||
fetchParams: params,
|
||
logic: (cb) => {
|
||
const datas = callback.getArrayDatas(cb)
|
||
const ids = callback.getTabId(cb);
|
||
|
||
this.tab.datas = datas;
|
||
this.tab.ids = ids;
|
||
|
||
this.setTabActiveKey(0);
|
||
}
|
||
});
|
||
}
|
||
|
||
@action resetTabProps = () => {
|
||
['activeKey', 'datas', 'ids'].map((v, i) => {
|
||
this.tab[v] = (i === 0) ? '0' : [];
|
||
})
|
||
}
|
||
|
||
//***************单选组合(RadioGroup)*****************
|
||
@observable radioGroup = {
|
||
config: [],
|
||
activeParams: '',
|
||
}
|
||
|
||
@action getRadioGroupConfig = () => {
|
||
const {
|
||
radioGroupAsyncFetchParams
|
||
} = this.customizedStore;
|
||
|
||
fetch({
|
||
asyncFetch: this.asyncFetch,
|
||
name: this.radioGroupAsyncName,
|
||
fetchParams: radioGroupAsyncFetchParams,
|
||
logic: (cb) => {
|
||
//RadioGroup组件初始化的时候,会触发一次onChange事件,因此会调用一次列表接口,所以这里不需要重复调用列表接口。
|
||
const {
|
||
condition: conditions
|
||
} = cb;
|
||
|
||
const {
|
||
addCustomizedConfig,
|
||
} = this.customizedStore;
|
||
|
||
addCustomizedConfig && addCustomizedConfig(conditions, cb);
|
||
|
||
if (conditions) {
|
||
this.dataRectification(conditions, {
|
||
labelcol: 4,
|
||
fieldcol: 20
|
||
});
|
||
|
||
this.radioGroup.config = conditions[0].items;
|
||
}
|
||
|
||
}
|
||
});
|
||
}
|
||
|
||
dataRectification = (conditions, obj) => {
|
||
conditions.map(c => {
|
||
c.items.map(item => {
|
||
Object.keys(obj).map(key => {
|
||
if (Object.keys(item).includes(key)) {
|
||
item[key] = obj[key];
|
||
}
|
||
});
|
||
});
|
||
});
|
||
}
|
||
|
||
@action exportActiveParams = (params) => {
|
||
const {
|
||
isRequiredElementComplete
|
||
} = this.customizedStore;
|
||
|
||
this.radioGroup.activeParams = params;
|
||
|
||
if (isRequiredElementComplete && isRequiredElementComplete(params)) {
|
||
this.getSearchList();
|
||
} else {
|
||
console.warn('isRequiredElementComplete(function) should be defined in customizedStore!');
|
||
}
|
||
}
|
||
|
||
@action resetRadioGroup = () => {
|
||
const {
|
||
handleBrowserChange
|
||
} = this.customizedStore;
|
||
|
||
handleBrowserChange && handleBrowserChange('', false);
|
||
//这里重置单选组合(RadioGroup)会连续触发两次onChange事件,因此会调用两次列表接口。
|
||
['radioGroup', 'browser'].map(type => {
|
||
this[`${type}_ref`] && componentReset[`reset${string.capitalize(type)}`](this[`${type}_ref`]);
|
||
});
|
||
}
|
||
|
||
@action resetRadioGroupProps = () => {
|
||
['config', 'activeParams'].map((v, i) => {
|
||
this.radioGroup[v] = (i === 0) ? [] : '';
|
||
});
|
||
['radioGroup', 'browser'].map(v => {
|
||
this[`${v}_ref`] = null;
|
||
});
|
||
}
|
||
|
||
@computed get rgBaseCallbackParamsCollector() {
|
||
const callParams = {
|
||
...this.radioGroup.activeParams
|
||
}
|
||
|
||
return callParams;
|
||
}
|
||
|
||
//***************列表*****************
|
||
@observable table = {
|
||
id: '',
|
||
tableStore: new TableStore(),
|
||
canViewTable: true,
|
||
}
|
||
|
||
@computed get radioGroupParams() {
|
||
const {
|
||
radioGroupCustomizedComParams
|
||
} = this.customizedStore;
|
||
|
||
return {
|
||
...this.radioGroup.activeParams,
|
||
...(radioGroupCustomizedComParams ? radioGroupCustomizedComParams : {})
|
||
}
|
||
}
|
||
|
||
//获取列表数据
|
||
@action getSearchList = () => {
|
||
const {
|
||
isRequiredElementComplete
|
||
} = this.customizedStore, {
|
||
activeParams
|
||
} = this.radioGroup;
|
||
|
||
if (isRequiredElementComplete && !isRequiredElementComplete(activeParams)) return
|
||
|
||
const {
|
||
organizationId,
|
||
organizationType
|
||
} = this.orgTree;
|
||
|
||
const params = {};
|
||
|
||
if (this.search.form.isFormInit) {
|
||
Object.assign(params, this.search.form.getFormParams());
|
||
}
|
||
|
||
if (this.hasOrgTree) {
|
||
Object.assign(params, {
|
||
organizationId,
|
||
organizationType,
|
||
});
|
||
}
|
||
|
||
if (this.hasRadioGroup) {
|
||
Object.assign(params, this.radioGroupParams);
|
||
}
|
||
|
||
if (this.hasTab) {
|
||
const {
|
||
ids,
|
||
activeKey
|
||
} = this.tab;
|
||
|
||
Object.assign(params, getTabParam && getTabParam.call(this));
|
||
}
|
||
|
||
this.resetTable();
|
||
|
||
fetch({
|
||
asyncFetch: this.asyncFetch,
|
||
name: this.tableAsyncName,
|
||
fetchParams: params,
|
||
logic: (cb) => {
|
||
const {
|
||
sessionkey,
|
||
status,
|
||
} = cb;
|
||
|
||
if (status && status === '-1') {
|
||
this.table.canViewTable = false;
|
||
return;
|
||
}
|
||
this.table.canViewTable = true;
|
||
this.table.tableStore.getDatas(sessionkey, 1);
|
||
|
||
const {
|
||
receiveTableAsyncCallback
|
||
} = this.customizedStore;
|
||
|
||
receiveTableAsyncCallback && receiveTableAsyncCallback(cb);
|
||
|
||
}
|
||
});
|
||
}
|
||
|
||
//获取table参数
|
||
@action getListParams = () => {
|
||
const {
|
||
isRequiredElementComplete
|
||
} = this.customizedStore, {
|
||
activeParams
|
||
} = this.radioGroup;
|
||
|
||
if (isRequiredElementComplete && !isRequiredElementComplete(activeParams)) return
|
||
|
||
const {
|
||
organizationId,
|
||
organizationType
|
||
} = this.orgTree;
|
||
|
||
const params = {};
|
||
|
||
if (this.search.form.isFormInit) {
|
||
Object.assign(params, this.search.form.getFormParams());
|
||
}
|
||
|
||
if (this.hasOrgTree) {
|
||
Object.assign(params, {
|
||
organizationId,
|
||
organizationType,
|
||
});
|
||
}
|
||
|
||
if (this.hasRadioGroup) {
|
||
Object.assign(params, this.radioGroupParams);
|
||
}
|
||
|
||
if (this.hasTab) {
|
||
const {
|
||
ids,
|
||
activeKey
|
||
} = this.tab;
|
||
|
||
Object.assign(params, getTabParam && getTabParam.call(this));
|
||
}
|
||
return params
|
||
}
|
||
|
||
//删除列表数据
|
||
delTableRows = (type) => {
|
||
const {
|
||
id,
|
||
tableStore
|
||
} = this.table;
|
||
|
||
fetch({
|
||
asyncFetch: this.asyncFetch,
|
||
name: this.delAsyncName,
|
||
fetchParams: {
|
||
[this.delIdPropertyName]: (type === 1) ? tableStore.selectedRowKeys.toString() : id,
|
||
},
|
||
logic: (cb) => {
|
||
const {
|
||
sign
|
||
} = cb;
|
||
|
||
if (sign === '1') {
|
||
message.success(cb.message);
|
||
this.getSearchList();
|
||
} else {
|
||
message.warning(cb.message);
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
@action setSelectedRowId = (id) => {
|
||
this.table.id = id;
|
||
}
|
||
|
||
@action setSelectedRowIndex = (index) => {
|
||
this.table.index = index;
|
||
}
|
||
|
||
@action resetTable = () => {
|
||
this.table.tableStore = new TableStore();
|
||
}
|
||
|
||
//**************弹框****************
|
||
//弹框组件的常量参数
|
||
dialogStaticProps = {
|
||
icon: 'icon-coms-hrm',
|
||
iconBgcolor: '#217346',
|
||
hasScroll: true,
|
||
}
|
||
|
||
@observable dialog = {
|
||
title: '',
|
||
visible: false,
|
||
type: 0,
|
||
}
|
||
|
||
@action openDialog = (params) => {
|
||
const {
|
||
title,
|
||
type,
|
||
} = params;
|
||
|
||
['title', 'type', 'visible'].map((v, i) => {
|
||
this.dialog[v] = (i < 2) ? params[v] : true;
|
||
});
|
||
//调用表单接口
|
||
this.getFormMaterial();
|
||
}
|
||
|
||
@action closeDialog = () => {
|
||
const {
|
||
closeDialog
|
||
} = this.customizedStore;
|
||
|
||
//设置弹框隐藏
|
||
this.dialog.visible = false;
|
||
//重置表单数据
|
||
this.resetForm();
|
||
//不同页面,关闭弹框时,除了重置表单之外,还有其他的重置项。
|
||
closeDialog && closeDialog();
|
||
}
|
||
|
||
//**************表单****************
|
||
@observable formElements = {
|
||
conditions: [],
|
||
form: new WeaForm(),
|
||
loading: true,
|
||
date: new Date(), //用来刷新form组件
|
||
}
|
||
|
||
//获取表单数据
|
||
@action getFormMaterial = () => {
|
||
const {
|
||
id,
|
||
index,
|
||
} = this.table, {
|
||
type,
|
||
} = this.dialog, {
|
||
organizationType,
|
||
organizationId
|
||
} = this.orgTree;
|
||
|
||
const fetchParams = (type === 1) ? {
|
||
[this.editIdPropertyName]: id
|
||
} : {};
|
||
|
||
if (this.hasOrgTree && this.isOrgTreeInfluenceForm) {
|
||
Object.assign(fetchParams, {
|
||
organizationType,
|
||
organizationId,
|
||
});
|
||
}
|
||
|
||
const {
|
||
isMainForm,
|
||
setAdditionalFormDatas
|
||
} = this.customizedStore;
|
||
|
||
if (!isMainForm) {
|
||
console.error(`isMainForm(function) is not defined,it should be defined in customizedStore!`);
|
||
return
|
||
}
|
||
|
||
fetch({
|
||
asyncFetch: this.asyncFetch,
|
||
name: isMainForm() ? this.formAsyncName : this.secondFormAsyncName,
|
||
fetchParams: fetchParams,
|
||
logic: (cb) => {
|
||
const {
|
||
condition,
|
||
} = cb;
|
||
|
||
['loading', 'conditions', 'form'].map((v, i) => {
|
||
if (i < 2) {
|
||
this.formElements[v] = (i === 0) ? false : condition
|
||
} else {
|
||
this.formElements[v].initFormFields(condition);
|
||
}
|
||
});
|
||
|
||
setAdditionalFormDatas && setAdditionalFormDatas(cb);
|
||
}
|
||
});
|
||
}
|
||
|
||
//保存表单信息
|
||
saveFormDatas = () => {
|
||
const {
|
||
form
|
||
} = this.formElements, {
|
||
id
|
||
} = this.table, {
|
||
type
|
||
} = this.dialog, {
|
||
organizationType
|
||
} = this.orgTree;
|
||
|
||
const {
|
||
neglectHiddenField,
|
||
furtherValidate,
|
||
isRepeat,
|
||
isFieldRepeat,
|
||
getAdditionalParams,
|
||
} = this.customizedStore;
|
||
|
||
//不检验隐藏的表单元素
|
||
neglectHiddenField && neglectHiddenField();
|
||
|
||
form.validateForm().then(f => {
|
||
if (f.isValid) {
|
||
//除了校验表单之外,不同的页面还有其他的校验项。
|
||
if (furtherValidate && !furtherValidate()) return;
|
||
|
||
//校验字段是否重复
|
||
if (isRepeat) {
|
||
isFieldRepeat && isFieldRepeat();
|
||
return
|
||
}
|
||
//保存的参数包含:表单生成的参数和其他参数
|
||
const fetchParams = Object.assign(form.getFormParams(), getAdditionalParams && getAdditionalParams());
|
||
|
||
if (this.hasOrgTree) {
|
||
Object.assign(fetchParams, {
|
||
organizationType,
|
||
});
|
||
}
|
||
|
||
(type === 1) && Object.assign(fetchParams, {
|
||
[this.editIdPropertyName]: id
|
||
});
|
||
|
||
this.canOperateForm(false);
|
||
|
||
fetch({
|
||
asyncFetch: this.asyncFetch,
|
||
name: (type === 0) ? this.addAsyncName : this.editAsyncName,
|
||
fetchParams,
|
||
logic: (cb) => {
|
||
const {
|
||
sign
|
||
} = cb;
|
||
|
||
if (sign === '1') {
|
||
message.success(cb.message);
|
||
this.closeDialog();
|
||
this.getSearchList();
|
||
} else {
|
||
this.canOperateForm(true);
|
||
message.warning(cb.message);
|
||
}
|
||
}
|
||
});
|
||
} else {
|
||
f.showErrors();
|
||
this.forceUpdateForm();
|
||
}
|
||
});
|
||
}
|
||
|
||
@action canOperateForm = (bool) => {
|
||
this.formElements.loading = !bool;
|
||
}
|
||
|
||
@action forceUpdateForm = () => {
|
||
this.formElements.date = new Date();
|
||
}
|
||
|
||
//重置表单
|
||
@action resetForm = () => {
|
||
['loading', 'conditions', 'form'].map((v, i) => {
|
||
this.formElements[v] = (i === 0) ? true : (i === 1) ? [] : new WeaForm();
|
||
});
|
||
}
|
||
|
||
setRef = (ref, type) => {
|
||
this[`${type}_ref`] = ref;
|
||
}
|
||
|
||
refreshPage = () => {
|
||
const {
|
||
refreshPage
|
||
} = this.customizedStore;
|
||
|
||
//强制刷新左侧树
|
||
this.hasOrgTree && this.triggerRefresh();
|
||
|
||
this.handleOrgTreeNodeClick({
|
||
id: '',
|
||
type: '0'
|
||
});
|
||
|
||
//不同页面会有个性化的重置项
|
||
refreshPage && refreshPage();
|
||
}
|
||
|
||
//重置页面配置项
|
||
resetPageConfig = () => {
|
||
['hasOrgTree', 'hasAdvancedSearch', 'hasTable'].map(v => {
|
||
this[v] = true;
|
||
});
|
||
['hasRadioGroup', 'hasTab', 'isOrgTreeInfluenceForm'].map(v => {
|
||
this[v] = false;
|
||
});
|
||
}
|
||
|
||
//页面最高层级的组件在要挂起的时候调用这个函数,重置store中的属性
|
||
//这里,不需要重置对象formElements内的属性,因为上个页面在关闭弹框时,会执行这一操作
|
||
//不需要重置对象dialog内的属性,因为在打开弹框的时候,会对dialog对象内的属性进行赋值操作
|
||
//不需要重置对象table内的属性,首先属性id不作为判断条件,其次在每次执行tableStore.getDatas()函数时,tableStore都会被重新new一次
|
||
resetStorePropertys = () => {
|
||
const {
|
||
form
|
||
} = this.formElements;
|
||
|
||
['resetAccessPermissionProps', 'resetMenusConfig', 'resetOrgTreeProps', 'resetSearchProps',
|
||
'resetTabProps', 'resetRadioGroupProps', 'resetPageConfig', 'resetForm'
|
||
].map(f => {
|
||
this[f]();
|
||
});
|
||
}
|
||
|
||
}
|
||
|
||
const commonStore = new CommonStore();
|
||
|
||
export {
|
||
commonStore
|
||
} |