1135 lines
23 KiB
JavaScript
1135 lines
23 KiB
JavaScript
|
|
import {
|
|||
|
|
observable,
|
|||
|
|
action,
|
|||
|
|
computed,
|
|||
|
|
} from 'mobx';
|
|||
|
|
import {
|
|||
|
|
WeaLocaleProvider,
|
|||
|
|
} from 'ecCom';
|
|||
|
|
import {
|
|||
|
|
WeaForm,
|
|||
|
|
WeaTableNew
|
|||
|
|
} from 'comsMobx';
|
|||
|
|
import {
|
|||
|
|
message,
|
|||
|
|
Button,
|
|||
|
|
Modal,
|
|||
|
|
} from 'antd';
|
|||
|
|
import * as api from '../apis/tax';
|
|||
|
|
const getLabel = WeaLocaleProvider.getLabel;
|
|||
|
|
const confirm = Modal.confirm;
|
|||
|
|
const {
|
|||
|
|
TableStore
|
|||
|
|
} = WeaTableNew;
|
|||
|
|
|
|||
|
|
class HrmTax {
|
|||
|
|
@observable cPage = 'main';
|
|||
|
|
|
|||
|
|
TAXDEDUCTIONITEMS = ['childEducation', 'continualEducation', 'loan', 'rent', 'supportOlder']; //专项附加扣除填报
|
|||
|
|
|
|||
|
|
BASICINFOITEMS = ['personalInfo', 'familyMember']; //基本信息
|
|||
|
|
|
|||
|
|
SEARCHGROUPS = [{
|
|||
|
|
title: getLabel(-1, '基本信息'),
|
|||
|
|
MENUS: [{
|
|||
|
|
src: '/images/tax/basic_info.png',
|
|||
|
|
label: getLabel(-1, '个人信息'),
|
|||
|
|
onMenuClick: () => this.handleMenuClick('personalInfo')
|
|||
|
|
}, {
|
|||
|
|
src: '/images/tax/basic_info.png',
|
|||
|
|
label: getLabel(-1, '家庭成员'),
|
|||
|
|
onMenuClick: () => this.handleMenuClick('familyMember')
|
|||
|
|
}]
|
|||
|
|
}, {
|
|||
|
|
title: getLabel(-1, '专项附加扣除填报'),
|
|||
|
|
MENUS: [{
|
|||
|
|
src: '/images/tax/child_edu.png',
|
|||
|
|
label: getLabel(-1, '子女教育'),
|
|||
|
|
onMenuClick: () => this.handleMenuClick('childEducation')
|
|||
|
|
}, {
|
|||
|
|
src: '/images/tax/c_edu.png',
|
|||
|
|
label: getLabel(-1, '继续教育'),
|
|||
|
|
onMenuClick: () => this.handleMenuClick('continualEducation')
|
|||
|
|
}, {
|
|||
|
|
src: '/images/tax/loan.png',
|
|||
|
|
label: getLabel(-1, '住房贷款利息'),
|
|||
|
|
onMenuClick: () => this.handleMenuClick('loan')
|
|||
|
|
}, {
|
|||
|
|
src: '/images/tax/rent.png',
|
|||
|
|
label: getLabel(-1, '住房租金'),
|
|||
|
|
onMenuClick: () => this.handleMenuClick('rent')
|
|||
|
|
}, {
|
|||
|
|
src: '/images/tax/support.png',
|
|||
|
|
label: getLabel(-1, '赡养老人'),
|
|||
|
|
onMenuClick: () => this.handleMenuClick('supportOlder')
|
|||
|
|
}]
|
|||
|
|
}];
|
|||
|
|
|
|||
|
|
TOP = {
|
|||
|
|
showDropIcon: true,
|
|||
|
|
iconBgcolor: '#217346',
|
|||
|
|
icon: <i className='icon-coms-hrm'/>,
|
|||
|
|
title: getLabel(-1, '个税专项附加扣除信息填报')
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@computed get breadcrumb() {
|
|||
|
|
let a;
|
|||
|
|
|
|||
|
|
const f = {
|
|||
|
|
name: getLabel(-1, '信息填报'),
|
|||
|
|
onClick: () => {
|
|||
|
|
this.cPage = 'main'
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
switch (this.cPage) {
|
|||
|
|
case 'main':
|
|||
|
|
a = [];
|
|||
|
|
break;
|
|||
|
|
case 'personalInfo':
|
|||
|
|
const {
|
|||
|
|
isEdit
|
|||
|
|
} = this.personalForm;
|
|||
|
|
|
|||
|
|
if (isEdit === '0') {
|
|||
|
|
a = [f, {
|
|||
|
|
name: getLabel(-1, '个人信息'),
|
|||
|
|
}]
|
|||
|
|
} else {
|
|||
|
|
a = [{
|
|||
|
|
name: getLabel(-1, '个税专项附加扣除信息填报'),
|
|||
|
|
onClick: () => {
|
|||
|
|
this.cPage = 'main'
|
|||
|
|
}
|
|||
|
|
}, {
|
|||
|
|
name: getLabel(-1, '基本信息填报'),
|
|||
|
|
}]
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 'familyMember':
|
|||
|
|
a = [f, {
|
|||
|
|
name: getLabel(-1, '家庭成员'),
|
|||
|
|
}]
|
|||
|
|
break;
|
|||
|
|
case 'childEducation':
|
|||
|
|
a = [f, {
|
|||
|
|
name: getLabel(-1, '子女教育'),
|
|||
|
|
}]
|
|||
|
|
break;
|
|||
|
|
case 'continualEducation':
|
|||
|
|
a = [f, {
|
|||
|
|
name: getLabel(-1, '继续教育'),
|
|||
|
|
}]
|
|||
|
|
break;
|
|||
|
|
case 'loan':
|
|||
|
|
a = [f, {
|
|||
|
|
name: getLabel(-1, '住房贷款利息'),
|
|||
|
|
}]
|
|||
|
|
break;
|
|||
|
|
case 'rent':
|
|||
|
|
a = [f, {
|
|||
|
|
name: getLabel(-1, '住房租金'),
|
|||
|
|
}]
|
|||
|
|
break;
|
|||
|
|
case 'supportOlder':
|
|||
|
|
a = [f, {
|
|||
|
|
name: getLabel(-1, '赡养老人'),
|
|||
|
|
}]
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return a;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@computed get pageLoading() {
|
|||
|
|
const {
|
|||
|
|
comsWeaTableStore
|
|||
|
|
} = this.table;
|
|||
|
|
|
|||
|
|
let loading;
|
|||
|
|
const hasTable = this.hasTable();
|
|||
|
|
|
|||
|
|
const hasPersonalForm = this.hasPersonalForm();
|
|||
|
|
|
|||
|
|
const hasConditionForm = this.hasConditionForm();
|
|||
|
|
|
|||
|
|
const tloading = comsWeaTableStore.loading;
|
|||
|
|
|
|||
|
|
const ploading = this.personalForm.loading;
|
|||
|
|
|
|||
|
|
const cloading = this.conditionForm.loading;
|
|||
|
|
|
|||
|
|
//页面中只包含纯列表
|
|||
|
|
if (hasTable && !hasConditionForm) {
|
|||
|
|
loading = tloading;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//页面中即包含列表,也包含条件表单
|
|||
|
|
if (hasTable && hasConditionForm) {
|
|||
|
|
loading = tloading || cloading;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//只包含个人信息表单
|
|||
|
|
if (hasPersonalForm && !hasConditionForm) {
|
|||
|
|
loading = ploading;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//不仅包含个人信息表单,也包含条件表单
|
|||
|
|
if (hasPersonalForm && hasConditionForm) {
|
|||
|
|
loading = ploading || cloading;
|
|||
|
|
}
|
|||
|
|
return loading;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//页面中是否包含列表
|
|||
|
|
hasTable = () => {
|
|||
|
|
const {
|
|||
|
|
currentIndex
|
|||
|
|
} = this.step;
|
|||
|
|
|
|||
|
|
if (this.cPage === 'familyMember') {
|
|||
|
|
return true
|
|||
|
|
}
|
|||
|
|
if (['childEducation', 'supportOlder'].includes(this.cPage) && currentIndex === 1) {
|
|||
|
|
return true
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//页面中是否包含个人信息表单
|
|||
|
|
hasPersonalForm = () => {
|
|||
|
|
const {
|
|||
|
|
currentIndex
|
|||
|
|
} = this.step;
|
|||
|
|
|
|||
|
|
if (this.cPage === 'personalInfo') {
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
if (this.TAXDEDUCTIONITEMS.includes(this.cPage)) {
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//页面中是否包含条件表单
|
|||
|
|
hasConditionForm = () => {
|
|||
|
|
const {
|
|||
|
|
currentIndex
|
|||
|
|
} = this.step;
|
|||
|
|
|
|||
|
|
if (this.cPage === 'loan') {
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
if (this.TAXDEDUCTIONITEMS.includes(this.cPage) && currentIndex > 0) {
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
@observable tConf = [];
|
|||
|
|
@observable rConf = [];
|
|||
|
|
|
|||
|
|
@action getRightMenu = (isEdit) => {
|
|||
|
|
const params = {};
|
|||
|
|
if (this.cPage === 'personalInfo') {
|
|||
|
|
if (isEdit !== undefined) {
|
|||
|
|
Object.assign(params, {
|
|||
|
|
edit: isEdit
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (this.TAXDEDUCTIONITEMS.includes(this.cPage)) {
|
|||
|
|
Object.assign(params, {
|
|||
|
|
step: this.step.currentIndex + 1
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
api.getRightMenu(this.cPage, params).then(data => {
|
|||
|
|
const {
|
|||
|
|
btnMenu
|
|||
|
|
} = data;
|
|||
|
|
|
|||
|
|
const {
|
|||
|
|
tConf,
|
|||
|
|
rConf
|
|||
|
|
} = this.filter(btnMenu);
|
|||
|
|
|
|||
|
|
this.tConf = tConf;
|
|||
|
|
this.rConf = rConf;
|
|||
|
|
}, error => {})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
filter = (datas) => {
|
|||
|
|
let tConf, rConf;
|
|||
|
|
tConf = datas.filter(item => {
|
|||
|
|
var bool = false;
|
|||
|
|
['isTop', 'isBatch'].forEach(prop => {
|
|||
|
|
const b = parseInt(item[prop]);
|
|||
|
|
if (b) {
|
|||
|
|
bool = true
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
return bool
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
rConf = datas;
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
tConf,
|
|||
|
|
rConf
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@computed get topButtons() {
|
|||
|
|
if (this.cPage !== 'main') {
|
|||
|
|
return this.tConf.map((item, index) => {
|
|||
|
|
const {
|
|||
|
|
menuFun,
|
|||
|
|
menuName
|
|||
|
|
} = item;
|
|||
|
|
|
|||
|
|
return (
|
|||
|
|
<Button
|
|||
|
|
type="primary"
|
|||
|
|
disabled={this.getDisabled(menuFun) }
|
|||
|
|
onClick={() => this[menuFun]()}
|
|||
|
|
>
|
|||
|
|
{menuName}
|
|||
|
|
</Button>
|
|||
|
|
)
|
|||
|
|
});
|
|||
|
|
} else {
|
|||
|
|
return [];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@computed get dropMenuDatas() {
|
|||
|
|
if (this.cPage !== 'main') {
|
|||
|
|
return this.rConf.map((item, index) => {
|
|||
|
|
const {
|
|||
|
|
menuFun,
|
|||
|
|
menuName,
|
|||
|
|
menuIcon
|
|||
|
|
} = item;
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
key: index.toString(),
|
|||
|
|
disabled: this.getDisabled(menuFun),
|
|||
|
|
icon: <i className={`${menuIcon}`} />,
|
|||
|
|
content: menuName,
|
|||
|
|
onClick: () => this[menuFun]()
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
} else {
|
|||
|
|
return [];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//编辑、保存个人信息表单CALLBACK
|
|||
|
|
operatePersonalForm = (isEdit) => {
|
|||
|
|
this.controlUnderline(isEdit);
|
|||
|
|
this.getRightMenu(isEdit);
|
|||
|
|
this.formType = 'PF';
|
|||
|
|
this.getForm(isEdit);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//编辑个人信息表单
|
|||
|
|
doEdit = () => {
|
|||
|
|
this.operatePersonalForm('1');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//保存个人信息表单
|
|||
|
|
doSave = () => {
|
|||
|
|
//表单验证通过后执行的逻辑
|
|||
|
|
const callback = () => {
|
|||
|
|
this.saveForm('personalForm', () => {
|
|||
|
|
this.operatePersonalForm('0');
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
this.validateForm('personalForm', callback);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//返回
|
|||
|
|
doCancel = () => {
|
|||
|
|
this.operatePersonalForm('0');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//新建家庭成员
|
|||
|
|
doCreate = () => {
|
|||
|
|
this.defineDialogTitle(getLabel(-1, '新建家庭成员'));
|
|||
|
|
this.callDialogForm('DG');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//上一步
|
|||
|
|
preStep = () => {
|
|||
|
|
this.changeStepComponentState(false);
|
|||
|
|
this.getRightMenu();
|
|||
|
|
if (this.step.currentIndex === 1) {
|
|||
|
|
this.formType = 'CD';
|
|||
|
|
this.getForm();
|
|||
|
|
} else {
|
|||
|
|
this.formType = 'PF';
|
|||
|
|
this.getForm();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//下一步
|
|||
|
|
nextStep = () => {
|
|||
|
|
this.changeStepComponentState(true);
|
|||
|
|
this.getRightMenu();
|
|||
|
|
this.formType = 'CD';
|
|||
|
|
this.getForm();
|
|||
|
|
(this.step.currentIndex === 1) && this.getSearchList();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@action changeStepComponentState = (isIncrease) => {
|
|||
|
|
if (isIncrease) {
|
|||
|
|
this.step.currentIndex++; //切换页面时,需要重置该变量
|
|||
|
|
} else {
|
|||
|
|
this.step.currentIndex--;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const {
|
|||
|
|
currentIndex,
|
|||
|
|
items,
|
|||
|
|
} = this.step;
|
|||
|
|
|
|||
|
|
items.forEach((item, index) => {
|
|||
|
|
if (index < currentIndex) {
|
|||
|
|
Object.assign(item, {
|
|||
|
|
status: 'finish'
|
|||
|
|
});
|
|||
|
|
} else if (index === currentIndex) {
|
|||
|
|
Object.assign(item, {
|
|||
|
|
status: 'process'
|
|||
|
|
});
|
|||
|
|
} else {
|
|||
|
|
Object.assign(item, {
|
|||
|
|
status: 'wait'
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//调用弹框内的表单
|
|||
|
|
//接收两个参数:表单的类型、当前编辑表单的ID
|
|||
|
|
callDialogForm = (formType, id) => {
|
|||
|
|
this.openDialog();
|
|||
|
|
this.formType = formType;
|
|||
|
|
this.getForm(id);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//批量删除
|
|||
|
|
doDelete = () => {
|
|||
|
|
const {
|
|||
|
|
comsWeaTableStore
|
|||
|
|
} = this.table, {
|
|||
|
|
selectedRowKeys
|
|||
|
|
} = comsWeaTableStore;
|
|||
|
|
|
|||
|
|
const callback = () => {
|
|||
|
|
const params = {
|
|||
|
|
ids: selectedRowKeys.toString(),
|
|||
|
|
};
|
|||
|
|
this.delLogic(params);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
this.delConfirm(true, callback);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//确认是否删除
|
|||
|
|
//接收两个参数:是否是批量删除、确认删除后执行的回调函数
|
|||
|
|
delConfirm = (isBatch, callback) => {
|
|||
|
|
let content;
|
|||
|
|
if (isBatch) {
|
|||
|
|
content = getLabel('385625', '确定要删除选择的记录吗?');
|
|||
|
|
} else {
|
|||
|
|
content = getLabel('83877', '确定要删除吗?');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
confirm({
|
|||
|
|
title: getLabel('131329', '信息确认'),
|
|||
|
|
content: content,
|
|||
|
|
okText: getLabel('33703', '确定'),
|
|||
|
|
cancelText: getLabel('32694', '取消'),
|
|||
|
|
onOk() {
|
|||
|
|
callback && callback();
|
|||
|
|
},
|
|||
|
|
onCancel() {
|
|||
|
|
return false;
|
|||
|
|
},
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//执行删除任务的具体逻辑
|
|||
|
|
delLogic = (params) => {
|
|||
|
|
api.del(this.cPage, params).then(data => {
|
|||
|
|
const {
|
|||
|
|
status
|
|||
|
|
} = data;
|
|||
|
|
|
|||
|
|
if (status === '1') {
|
|||
|
|
message.success(-1, '删除成功');
|
|||
|
|
this.getSearchList();
|
|||
|
|
} else {
|
|||
|
|
message.warning(-1, '删除失败');
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//保存表单分两种情况:保存页面表单、保存弹框内的表单
|
|||
|
|
//参数formType为要保存表单的类型、 callback为这两种情况保存成功后,具体执行的逻辑
|
|||
|
|
saveForm = (formType, callback) => {
|
|||
|
|
const {
|
|||
|
|
form
|
|||
|
|
} = this[formType];
|
|||
|
|
|
|||
|
|
//后端默认取当前登录人员的id,因此这里不需要传人员id。
|
|||
|
|
const params = {
|
|||
|
|
...form.getFormParams(),
|
|||
|
|
};
|
|||
|
|
api.save(this.cPage, params).then(data => {
|
|||
|
|
const {
|
|||
|
|
status
|
|||
|
|
} = data;
|
|||
|
|
|
|||
|
|
if (status === '1') {
|
|||
|
|
message.success(getLabel(-1, '保存成功'));
|
|||
|
|
callback && callback();
|
|||
|
|
} else {
|
|||
|
|
message.warning(getLabel(-1, '保存失败'));
|
|||
|
|
}
|
|||
|
|
}, error => {})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//获取顶部按钮组、右键菜单的状态(是否可点击)
|
|||
|
|
getDisabled = (func) => {
|
|||
|
|
const {
|
|||
|
|
loading
|
|||
|
|
} = this.personalForm, {
|
|||
|
|
comsWeaTableStore
|
|||
|
|
} = this.table;
|
|||
|
|
|
|||
|
|
let b;
|
|||
|
|
if (['doEdit'].includes(func)) {
|
|||
|
|
b = loading;
|
|||
|
|
}
|
|||
|
|
if (['doCreate'].includes(func)) {
|
|||
|
|
b = comsWeaTableStore.loading;
|
|||
|
|
}
|
|||
|
|
if (['doDelete'].includes(func)) {
|
|||
|
|
b = comsWeaTableStore.selectedRowKeys.length === 0;
|
|||
|
|
}
|
|||
|
|
return b;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
@action handleMenuClick = (type) => {
|
|||
|
|
if (this.BASICINFOITEMS.includes(type)) {
|
|||
|
|
this.cPage = type;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (type === 'personalInfo') {
|
|||
|
|
this.operatePersonalForm('0');
|
|||
|
|
}
|
|||
|
|
if (type === 'familyMember') {
|
|||
|
|
this.getRightMenu();
|
|||
|
|
this.getSearchList();
|
|||
|
|
}
|
|||
|
|
if (this.TAXDEDUCTIONITEMS.includes(type)) {
|
|||
|
|
this.storagePageType(type);
|
|||
|
|
this.defineDialogTitle(getLabel(-1, '填报前,您需要提前准备以下材料'));
|
|||
|
|
this.openDialog();
|
|||
|
|
this.getPreInfo(type);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//设置即将跳转页面的类型
|
|||
|
|
storagePageType = (type) => {
|
|||
|
|
this.temp = type;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//**********************NoLinkageForm、CollapseForm**********************
|
|||
|
|
formType = 'PF'; //PF: 个人信息表单 PFDG:弹框内的个人信息 DG:弹框内的表单 CD: 条件表单
|
|||
|
|
|
|||
|
|
callFormAPIParams = {}; //调用表单接口所需的参数
|
|||
|
|
|
|||
|
|
@observable personalForm = { //人员信息表单
|
|||
|
|
form: new WeaForm(),
|
|||
|
|
loading: false,
|
|||
|
|
isEdit: '0',
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@observable dialogForm = { //弹框内表单
|
|||
|
|
form: new WeaForm(),
|
|||
|
|
conditions: [],
|
|||
|
|
loading: false,
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@observable conditionForm = { //提交表单
|
|||
|
|
form: new WeaForm(),
|
|||
|
|
loading: false,
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@action getForm = (val) => {
|
|||
|
|
this.setParamsToCallFormAPI(val);
|
|||
|
|
|
|||
|
|
//判断是否调用个人信息表单
|
|||
|
|
const isCallPersonalForm = this.isCallPersonalForm();
|
|||
|
|
//判断是否调用弹框内表单
|
|||
|
|
const isCallDialogForm = this.isCallDialogForm();
|
|||
|
|
//判断是否调用条件表单
|
|||
|
|
const isCallCondtionForm = this.isCallCondtionForm();
|
|||
|
|
|
|||
|
|
if (isCallPersonalForm) {
|
|||
|
|
this.personalForm.loading = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (isCallDialogForm) {
|
|||
|
|
this.dialogForm.loading = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (isCallCondtionForm) {
|
|||
|
|
this.conditionForm.loading = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
api.getForm(this.cPage, this.callFormAPIParams, this.step.currentIndex, this.formType, this.subDialog.visible).then(data => {
|
|||
|
|
const {
|
|||
|
|
condition
|
|||
|
|
} = data;
|
|||
|
|
|
|||
|
|
if (isCallPersonalForm && !isCallDialogForm) {
|
|||
|
|
this.initForm('personalForm', condition);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (isCallDialogForm) {
|
|||
|
|
//表单上有添加按钮的,在配置数据上添加回调函数。
|
|||
|
|
if (this.hasAddBtn(condition)) {
|
|||
|
|
this.addAddBtnEventListener(condition)
|
|||
|
|
}
|
|||
|
|
this.initForm('dialogForm', condition);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (isCallCondtionForm) {
|
|||
|
|
this.initForm('conditionForm', condition);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}, error => {})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//设置调用表单接口的参数
|
|||
|
|
setParamsToCallFormAPI = (val) => {
|
|||
|
|
//判断是否调用个人信息表单
|
|||
|
|
const isCallPersonalForm = this.isCallPersonalForm();
|
|||
|
|
//判断是否调用弹框内表单
|
|||
|
|
const isCallDialogForm = this.isCallDialogForm();
|
|||
|
|
//判断是否调用条件表单
|
|||
|
|
const isCallCondtionForm = this.isCallCondtionForm();
|
|||
|
|
|
|||
|
|
if (isCallPersonalForm) {
|
|||
|
|
Object.assign(this.callFormAPIParams, {
|
|||
|
|
edit: val
|
|||
|
|
});
|
|||
|
|
this.personalForm.loading = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (isCallDialogForm) {
|
|||
|
|
if (val) {
|
|||
|
|
Object.assign(this.callFormAPIParams, {
|
|||
|
|
id: val
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
this.dialogForm.loading = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//判断调用的是否是个人信息表单
|
|||
|
|
isCallPersonalForm = (type) => {
|
|||
|
|
return ['PF', 'PFDG'].includes(this.formType)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
isEdit = (val) => {
|
|||
|
|
return val === '1'
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
isCallDialogForm = (type) => {
|
|||
|
|
return ['PFDG', 'DG'].includes(this.formType);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
isCallCondtionForm = () => {
|
|||
|
|
return this.formType === 'CD'
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
hasAddBtn = (conditions) => {
|
|||
|
|
let b = false;
|
|||
|
|
conditions.forEach(c => {
|
|||
|
|
c.items.forEach(item => {
|
|||
|
|
const {
|
|||
|
|
otherParams
|
|||
|
|
} = item;
|
|||
|
|
|
|||
|
|
if (otherParams && otherParams.hasAddBtn) {
|
|||
|
|
b = true;
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
});
|
|||
|
|
return b;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
addAddBtnEventListener = (conditions) => {
|
|||
|
|
conditions.forEach(c => {
|
|||
|
|
c.items.forEach(item => {
|
|||
|
|
const {
|
|||
|
|
otherParams
|
|||
|
|
} = item;
|
|||
|
|
if (otherParams && otherParams.hasAddBtn) {
|
|||
|
|
item.addOnClick = () => {
|
|||
|
|
this.defineDialogTitle(getLabel(-1, '新建家庭成员'));
|
|||
|
|
this.openDialog();
|
|||
|
|
this.formType = 'DG';
|
|||
|
|
this.getForm();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//初始化表单
|
|||
|
|
initForm = (obj, condition) => {
|
|||
|
|
this[obj].form = new WeaForm();
|
|||
|
|
this[obj].form.setCondition(condition);
|
|||
|
|
this[obj].conditions = condition;
|
|||
|
|
this[obj].loading = false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@computed get isRenderCollapseForm() {
|
|||
|
|
const {
|
|||
|
|
conditions
|
|||
|
|
} = this.dialogForm;
|
|||
|
|
return conditions.length > 1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//控制个人信息表单是否出现下划线
|
|||
|
|
controlUnderline = (isEdit) => {
|
|||
|
|
this.personalForm.isEdit = isEdit;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//********************Tab********************
|
|||
|
|
buttonsAds = [getLabel(82529, '搜索'), getLabel(27088, '重置'), getLabel(32694, '取消')];
|
|||
|
|
|
|||
|
|
TAB = {
|
|||
|
|
advanceHeight: 170,
|
|||
|
|
hasMask: false,
|
|||
|
|
keyParam: 'key',
|
|||
|
|
setShowSearchAd: bool => this.setShowSearchAd(bool),
|
|||
|
|
onSearch: () => this.onSearch(),
|
|||
|
|
onSearchChange: val => this.onSearchChange(val),
|
|||
|
|
onChange: key => this.onTabChange(key),
|
|||
|
|
buttonsAd: this.buttonsAds.map((name, index) => {
|
|||
|
|
const type = (index === 0) && "primary";
|
|||
|
|
let callback;
|
|||
|
|
if (index === 0) {
|
|||
|
|
callback = () => this.onSearch();
|
|||
|
|
} else if (index === 1) {
|
|||
|
|
callback = () => this.tab.form.resetConditionValue();
|
|||
|
|
} else {
|
|||
|
|
callback = this.setShowSearchAd
|
|||
|
|
}
|
|||
|
|
return <Button type={type} onClick={() => callback(index === 2 && false)}>{name}</Button>
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@observable tab = {
|
|||
|
|
showSearchAd: false,
|
|||
|
|
form: new WeaForm(),
|
|||
|
|
selectedKey: '0',
|
|||
|
|
value: ''
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@observable onSearchChange = (val) => {
|
|||
|
|
this.tab.value = val;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@action onSearch = () => {
|
|||
|
|
this.getSearchList();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@action onTabChange = (key) => {
|
|||
|
|
this.tab.selectedKey = key;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@action setShowSearchAd = (b) => {
|
|||
|
|
this.tab.showSearchAd = b;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@computed get searchsBaseValue() {
|
|||
|
|
if (this.cPage === 'main') {
|
|||
|
|
return ''
|
|||
|
|
}
|
|||
|
|
if (this.cPage === 'familyMember') {
|
|||
|
|
return this.tab.value;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@computed get tabDatas() {
|
|||
|
|
if (this.cPage === 'main') {
|
|||
|
|
return [{
|
|||
|
|
key: '0',
|
|||
|
|
title: getLabel(-1, '信息填报')
|
|||
|
|
}, {
|
|||
|
|
key: '1',
|
|||
|
|
title: getLabel(-1, '填报记录查询')
|
|||
|
|
}];
|
|||
|
|
}
|
|||
|
|
if (this.cPage === 'familyMember') {
|
|||
|
|
return [];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@computed get searchType() {
|
|||
|
|
let type;
|
|||
|
|
if (this.cPage === 'main') {
|
|||
|
|
type = ['base', 'advanced'];
|
|||
|
|
}
|
|||
|
|
if (this.cPage === 'familyMember') {
|
|||
|
|
type = ['base'];
|
|||
|
|
}
|
|||
|
|
return type;
|
|||
|
|
}
|
|||
|
|
//*********************Table*********************
|
|||
|
|
TABLE = {
|
|||
|
|
hasOrder: true,
|
|||
|
|
needScroll: true,
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@observable table = {
|
|||
|
|
comsWeaTableStore: new TableStore(),
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@action getSearchList = () => {
|
|||
|
|
const params = this.getParamsToCallTableAPI()
|
|||
|
|
api.getRecords(this.cPage, params).then(data => {
|
|||
|
|
const {
|
|||
|
|
sessionkey
|
|||
|
|
} = data;
|
|||
|
|
this.table.comsWeaTableStore = new TableStore();
|
|||
|
|
this.table.comsWeaTableStore.getDatas(sessionkey, 1);
|
|||
|
|
}, error => {})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
getParamsToCallTableAPI = () => {
|
|||
|
|
const params = {};
|
|||
|
|
if (this.cPage === 'familyMember') {
|
|||
|
|
Object.assign(params, {
|
|||
|
|
lastname: this.searchsBaseValue
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
if (this.cPage === 'childEducation') {
|
|||
|
|
const {
|
|||
|
|
form
|
|||
|
|
} = this.conditionForm;
|
|||
|
|
|
|||
|
|
Object.assign(params, {
|
|||
|
|
year: form.getFormParams().year
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
return params;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//编辑家庭成员
|
|||
|
|
edit = (id) => {
|
|||
|
|
this.defineDialogTitle(getLabel(-1, '编辑家庭成员'));
|
|||
|
|
this.callDialogForm('DG', id);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//删除家庭成员
|
|||
|
|
del = (id) => {
|
|||
|
|
//删除确认通过后,执行的回调函数
|
|||
|
|
const callback = () => {
|
|||
|
|
const params = {
|
|||
|
|
ids: id
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
this.delLogic(params);
|
|||
|
|
}
|
|||
|
|
this.delConfirm(false, callback);
|
|||
|
|
}
|
|||
|
|
//*********************Dialog*********************
|
|||
|
|
DIALOG = {
|
|||
|
|
hasScroll: true,
|
|||
|
|
onCancel: () => this.closeDialog(),
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@computed get dialogButtons() {
|
|||
|
|
let btns;
|
|||
|
|
if (this.cPage === 'main') {
|
|||
|
|
btns = [
|
|||
|
|
<Button type='primary' onClick={() => this.goToDetailPage()}>{getLabel(-1, '准备完毕,进入填报')}</Button>,
|
|||
|
|
<Button onClick={() => this.closeDialog()}>{getLabel(-1, '取消')}</Button>,
|
|||
|
|
];
|
|||
|
|
} else {
|
|||
|
|
btns = [<Button type='primary' onClick={() => this.saveDialogForm()}>{getLabel(30986, '保存')}</Button>]
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return btns;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@computed get moreBtn() {
|
|||
|
|
const btn = {};
|
|||
|
|
if (this.cPage !== 'main') {
|
|||
|
|
Object.assign(btn, {
|
|||
|
|
datas: []
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return btn;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@computed get icon() {
|
|||
|
|
let icon;
|
|||
|
|
if (this.cPage === 'main') {
|
|||
|
|
icon = 'icon-coms-Prompt'
|
|||
|
|
} else {
|
|||
|
|
icon = 'icon-coms-hrm'
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return icon;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@computed get iconBgcolor() {
|
|||
|
|
let color;
|
|||
|
|
if (this.cPage === 'main') {
|
|||
|
|
color = '#FF9900'
|
|||
|
|
} else {
|
|||
|
|
color = '#217346'
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return color;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@observable dialog = {
|
|||
|
|
visible: false,
|
|||
|
|
title: '',
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@observable subDialog = {
|
|||
|
|
visible: false,
|
|||
|
|
title: '',
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@computed get dialogLoading() {
|
|||
|
|
return this.dialogForm.loading
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@computed get dialogStyle() {
|
|||
|
|
let style;
|
|||
|
|
if (this.cPage === 'main') {
|
|||
|
|
style = {
|
|||
|
|
width: 560,
|
|||
|
|
height: 215
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (this.cPage === 'familyMember') {
|
|||
|
|
style = {
|
|||
|
|
width: 600,
|
|||
|
|
height: 350
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (this.cPage === 'childEducation') {
|
|||
|
|
style = {
|
|||
|
|
width: 600,
|
|||
|
|
height: 500
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return style;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@action openDialog = () => {
|
|||
|
|
if (!this.dialog.visible) {
|
|||
|
|
this.dialog.visible = true;
|
|||
|
|
} else {
|
|||
|
|
this.subDialog.visible = true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@action closeDialog = () => {
|
|||
|
|
if (this.subDialog.visible) {
|
|||
|
|
this.subDialog.visible = false;
|
|||
|
|
} else {
|
|||
|
|
this.dialog.visible = false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@action defineDialogTitle = (title) => {
|
|||
|
|
if (!this.dialog.visible) {
|
|||
|
|
this.dialog.title = title;
|
|||
|
|
} else {
|
|||
|
|
this.subDialog.title = title;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//准备完毕、进入填报
|
|||
|
|
@action goToDetailPage = () => {
|
|||
|
|
this.cPage = this.temp;
|
|||
|
|
this.closeDialog();
|
|||
|
|
this.getRightMenu();
|
|||
|
|
this.getStep();
|
|||
|
|
this.formType = 'PF';
|
|||
|
|
this.getForm('0');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//**********************PreInfo**********************
|
|||
|
|
@observable preInfo = [];
|
|||
|
|
|
|||
|
|
//获取提示信息
|
|||
|
|
@action getPreInfo = (type) => {
|
|||
|
|
this.dialog.loading = true;
|
|||
|
|
api.getPreInfo(type).then(data => {
|
|||
|
|
const {
|
|||
|
|
items
|
|||
|
|
} = data;
|
|||
|
|
|
|||
|
|
items.map((item, index) => {
|
|||
|
|
Object.assign(item, {
|
|||
|
|
imgSrc: this.getImgSrc(type, index)
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
this.preInfo = items;
|
|||
|
|
|
|||
|
|
this.dialog.loading = false;
|
|||
|
|
}, error => {})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//获取提示弹框内的图片地址
|
|||
|
|
getImgSrc = (type, index) => {
|
|||
|
|
let src;
|
|||
|
|
switch (type) {
|
|||
|
|
case 'childEducation':
|
|||
|
|
if (index === 0) {
|
|||
|
|
src = '/images/tax/cedu_01.png'
|
|||
|
|
} else {
|
|||
|
|
src = '/images/tax/cedu_02.png'
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return src;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//校验表单
|
|||
|
|
//包含两个参数:当前校验表单的类型、校验通过后执行的回调函数
|
|||
|
|
@action validateForm = (formType, callback) => {
|
|||
|
|
this[formType].form.validateForm().then(f => {
|
|||
|
|
if (f.isValid) {
|
|||
|
|
callback && callback();
|
|||
|
|
} else {
|
|||
|
|
f.showErrors();
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
saveDialogForm = () => {
|
|||
|
|
//弹框内表单校验通过后,执行的回调函数。
|
|||
|
|
const callback = () => {
|
|||
|
|
this.saveForm('dialogForm', () => {
|
|||
|
|
this.closeDialog();
|
|||
|
|
if (this.isRefreshTable()) {
|
|||
|
|
this.getSearchList();
|
|||
|
|
} else {
|
|||
|
|
this.controlUnderline('0');
|
|||
|
|
this.formType = 'PF';
|
|||
|
|
this.getForm('0');
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
this.validateForm('dialogForm', callback);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//判断保存弹框内表单后,刷新的是列表还是表单。
|
|||
|
|
isRefreshTable = () => {
|
|||
|
|
const {
|
|||
|
|
currentIndex
|
|||
|
|
} = this.step;
|
|||
|
|
|
|||
|
|
//保存家庭成员
|
|||
|
|
if (this.cPage === 'familyMember') {
|
|||
|
|
return true
|
|||
|
|
}
|
|||
|
|
//添加子女教育信息、新建家庭成员
|
|||
|
|
if (['childEducation', 'supportOlder'].includes(this.cPage) && currentIndex === 1) {
|
|||
|
|
return true
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//**********************Step**********************
|
|||
|
|
@observable step = {
|
|||
|
|
currentIndex: 0,
|
|||
|
|
items: []
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@action getStep = () => {
|
|||
|
|
api.getStep(this.cPage).then(data => {
|
|||
|
|
const {
|
|||
|
|
steps
|
|||
|
|
} = data;
|
|||
|
|
|
|||
|
|
steps.map((step, index) => {
|
|||
|
|
Object.assign(step, {
|
|||
|
|
status: (index === 0) ? 'process' : 'wait'
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
this.step.items = steps;
|
|||
|
|
}, error => {})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//*********************Title******************
|
|||
|
|
modify = () => {
|
|||
|
|
this.controlUnderline('1');
|
|||
|
|
this.defineDialogTitle(getLabel(-1, '修改个人信息'));
|
|||
|
|
this.openDialog();
|
|||
|
|
this.formType = 'PFDG';
|
|||
|
|
this.getForm('1');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//*****************ButtonIcons*****************
|
|||
|
|
buttonIcons = [{
|
|||
|
|
buttonType: 'add',
|
|||
|
|
type: 'primary',
|
|||
|
|
onClick: () => this.addChildEducationInfo()
|
|||
|
|
}, {
|
|||
|
|
buttonType: 'del',
|
|||
|
|
type: 'primary',
|
|||
|
|
disabled: true,
|
|||
|
|
onClick: () => this.delChildEducationInfo()
|
|||
|
|
}];
|
|||
|
|
|
|||
|
|
addChildEducationInfo = () => {
|
|||
|
|
this.defineDialogTitle(getLabel(-1, '添加子女教育信息'));
|
|||
|
|
this.openDialog();
|
|||
|
|
this.formType = 'DG';
|
|||
|
|
this.getForm();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
delChildEducationInfo = () => {
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
//********************TableUnderSearchGroup********************
|
|||
|
|
childrenReduceTip = [getLabel(-1, '有子女符合以下两个条件之一:'), getLabel(-1, '扣除年度有子女满3岁且处于小学入学前阶段;'), getLabel(-1, '扣除年度有子女正接受全日制学历教育。')];
|
|||
|
|
|
|||
|
|
@computed get searchGroupTitle() {
|
|||
|
|
if (this.cPage === 'childEducation') {
|
|||
|
|
return getLabel(-1, '子女教育信息');
|
|||
|
|
}
|
|||
|
|
if (this.cPage === 'supportOlder') {
|
|||
|
|
return getLabel(-1, '被赡养人信息');
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
export const hrmTax = new HrmTax();
|