import { observable, action, toJS } from "mobx"; import { message } from "antd"; import { WeaForm, WeaTableNew } from "comsMobx"; import * as API from "../apis/ledger"; // 引入API接口文件 import { tempateColumns } from "../pages/payroll/columns"; import { notNull } from "../util/validate"; const { TableStore } = WeaTableNew; export class LedgerStore { @observable tableStore = new TableStore(); // new table @observable form = new WeaForm(); // nrew 一个form @observable condition = []; // 存储后台得到的form数据 @observable hasRight = true; // 判断用户是有权限查看当前页面: 没有权限渲染无权限页面,有权限渲染数据 @observable showSearchAd = false; // 高级搜索面板显示 @observable loading = true; // 数据加载状态 @observable salarySobId = ""; @observable includeType = 1; // 0:排除、1:包含 @observable userTableStore = {}; @observable addUserModalVisible = false; @observable itemGroups = [ { id: "default", name: "未分类", items: [], }, ]; @observable salaryItemTableStore = new TableStore(); @observable empBrowserList = []; @observable empFields = []; @observable excludeIds = []; @observable addCategoryVisible = false; // 薪资项目-添加分类Modal @observable ruleOptionList = []; // 第四步规则可选项目列表 @observable sobItemRuleDataSource = []; // 第四步规则列表 @observable ledgerRuleList = []; @observable baseInfoRequest = {}; @observable userSelectedList = []; // ** 薪资项目 ** // 添加薪资项目 @observable addSalaryItemColumns = []; @observable addSalaryItemDataSource = []; @observable addSalaryItemPageInfo = {}; // 分页信息 @action initSlideData = () => { this.salarySobId = ""; this.includeType = 1; this.userTableStore = {}; this.addUserModalVisible = false; this.itemGroups = [ { id: "default", name: "未分类", items: [], }, ]; this.empBrowserList = []; this.empFields = []; this.excludeIds = []; this.ruleOptionList = []; this.sobItemRuleDataSource = []; // 第四步规则列表 this.ledgerRuleList = []; this.baseInfoRequest = {}; this.userSelectedList = []; }; @observable columns = []; @observable pageObj = {}; //列表数据 @observable dataSource = []; //列表数据 @action setColumns = (columns) => (this.columns = columns); @action setPageObj = (pageObj) => (this.pageObj = pageObj); @action setDataSource = (dataSource) => (this.dataSource = dataSource); // 设置员工字段 @action setEmpFields = (empFields) => (this.empFields = empFields); @action setUserSelectedList = (userSelectedList) => (this.userSelectedList = userSelectedList); @action setBaseInfoRequest = (baseInfoRequest) => (this.baseInfoRequest = baseInfoRequest); @action setSobItemRuleDataSource = (sobItemRuleDataSource) => (this.sobItemRuleDataSource = sobItemRuleDataSource); @action setAddCategoryVisible = (addCategoryVisible) => (this.addCategoryVisible = addCategoryVisible); @action setExcludeIds = (excludeIds) => (this.excludeIds = excludeIds); @action addExcludeIds = (id) => { let excludeIds = [...this.excludeIds]; excludeIds.push(id); this.excludeIds = excludeIds; }; @action addEmpFields = (fieldId) => { let sortedIndex = 1; if (this.empFields.length > 0) { let lastSortedIndex = this.empFields[this.empFields.length - 1].sortedIndex; sortedIndex = parseInt(lastSortedIndex) + 1; } let item = { fieldId, sortedIndex, canDelete: true, }; let result = [...this.empFields]; result.push(item); this.empFields = result; this.userSelectedList = this.empFields.map((item) => { item = { ...item }; item.key = item.fieldId; if (!item.showname || item.showname == "") { this.empBrowserList.map((bitem) => { if (bitem.key == item.fieldId) { item.showname = bitem.showname; } }); } return item; }); }; @action setItemGroups = (itemGroups) => { itemGroups = itemGroups ? [...itemGroups] : [] itemGroups && itemGroups.map(item => { if(item.items) { item.items && item.items.map(i => {i.key = i.id}) } }) this.itemGroups = itemGroups }; @action addItemGroup = (name) => { if (!name || name == "" || name.trim() == "") { message.warning("分类名称不能为空"); return; } let itemGroups = [...this.itemGroups]; let flag = false; itemGroups.map((item) => { if (item.name == name) { flag = true; } }); if (flag) { message.warning("分类已存在"); return; } let item = { name, items: [] }; itemGroups.unshift(item); this.setItemGroups(itemGroups); this.addCategoryVisible = false; }; @action addItemsToGroup = (title, list) => { let itemGroups = [...this.itemGroups]; itemGroups.map((item) => { if (item.name == title) { item.items = item.items ? item.items.concat(list) : list; } }); this.setItemGroups(itemGroups); }; @action addCategoryList = (item) => { let list = [...this.categoryList]; list.push(item); this.categoryList = list; }; @action removeCategoryList = (item) => { let list = [...this.categoryList]; list.filter((i) => item.name != i.name); this.categoryList = list; }; @action setAddUserModalVisible = (addUserModalVisible) => (this.addUserModalVisible = addUserModalVisible); @action setUserTableStore = (userTableStore) => (this.userTableStore = userTableStore); @action setIncludeType = (includeType) => (this.includeType = includeType); @action setSalarySobId = (salarySobId) => (this.salarySobId = salarySobId); // 初始化操作 @action doInit = () => { // this.getCondition(); this.getTableDatas({}); this.setBaseInfoRequest({ name: "", taxableItems: "1", salaryCycleType: "1", salaryCycleFromDay: "1", taxCycleType: "1", attendCycleType: "1", attendCycleFromDay: "1", socialSecurityCycleType: "1", description: "", }); }; @action initBaseInfoRequest = () => { this.setBaseInfoRequest({ name: "", taxableItems: "1", salaryCycleType: "1", salaryCycleFromDay: "1", taxCycleType: "1", attendCycleType: "1", attendCycleFromDay: "1", socialSecurityCycleType: "1", description: "", }); }; // 获得高级搜索表单数据 @action getCondition = () => { API.getCondition().then( action((res) => { if (res.api_status) { // 接口请求成功/失败处理 this.condition = res.condition; this.form.initFormFields(res.condition); // 渲染高级搜索form表单 } else { message.error(res.errormsg || "接口调用失败!"); } }) ); }; // 渲染table数据 @action getTableDatas = (params) => { this.loading = true; API.getLedgerList(params).then( action(({ status, data, errormsg }) => { this.loading = false; if (status) { // 接口请求成功/失败处理 const { columns, list, total, pageNum: current, pageSize } = data; this.setColumns(columns); this.setDataSource(list); this.setPageObj({ total, current, pageSize, }); } else { this.setDataSource([]); this.setPageObj({ ...this.pageObj, total: 0, }); message.error(errormsg || "接口调用失败!"); } }) ); }; @action setShowSearchAd = (bool) => (this.showSearchAd = bool); // 高级搜索 - 搜索 @action doSearch = () => { this.getTableDatas(); this.showSearchAd = false; }; // 复制 @action doCopy = (id, name) => { return new Promise((resolve, reject) => { API.duplicateLedger({ id, name }).then((res) => { if (res.status) { message.success("复制成功"); this.getTableDatas({}); resolve(); } else { message.error(res.errormsg || "复制失败"); reject(); } }); }); }; //启用/禁用薪资帐套 @action changeLedgerStatus = (id, disable) => { API.changeLedgerStatus({ id, disable }).then((res) => { if (res.status) { this.getTableDatas({}); message.success("修改成功"); } else { message.error(res.errormsg || "修改失败"); } }); }; validateBaseFrom(params) { if (!notNull(params.name)) { message.warning("名称不能为空"); return false; } if (!notNull(params.taxableItems)) { message.warning("薪资类型不能为空"); return false; } if (!notNull(params.salaryCycleType)) { message.warning("薪资周期不能为空"); return false; } if (!notNull(params.salaryCycleFromDay)) { message.warning("薪资周期不能为空"); return false; } if (!notNull(params.taxCycleType)) { message.warning("税款所属期不能为空"); return false; } if (!notNull(params.attendCycleType)) { message.warning("考勤周期不能为空"); return false; } if (!notNull(params.attendCycleFromDay)) { message.warning("考勤周期不能为空"); return false; } if (!notNull(params.socialSecurityCycleType)) { message.warning("福利台账月份不能为空"); return false; } return true; } //保存薪资帐套基本信息 @action saveLedgerBasic = (params) => { if (!this.validateBaseFrom(params)) { return; } return new Promise((resolve, reject) => { API.saveLedgerBasic(params).then((res) => { if (res.status) { this.salarySobId = res.data; resolve(); this.getTableDatas({}); message.success("保存成功"); } else { reject(res.errormsg || "保存失败"); message.error(res.errormsg || "保存失败"); } }); }); }; //删除薪资帐套 @action deleteLedger = (params) => { API.deleteLedger(params).then((res) => { if (res.status) { message.success("删除成功"); this.getTableDatas({}); } else { message.error(res.errormsg || "删除失败"); } }); }; validateLedgerPersonRange(params) { if (!notNull(params.includeType)) { message.warning("对象类型不能为空"); return false; } if (!notNull(params.targetParams)) { message.warning("对象类型不能为空"); return false; } if (!notNull(params.employeeStatus)) { message.warning("选择员工状态不能为空"); return false; } return true; } //保存薪资帐套人员范围 @action saveLedgerPersonRange = (params) => { if (!this.validateLedgerPersonRange(params)) { return; } API.saveLedgerPersonRange(params).then((res) => { if (res.status) { if (this.includeType == 1) { this.getLedgerPersonRangeInclude({ salarySobId: this.salarySobId }); } else { this.getLedgerPersonRangeExclude({ salarySobId: this.salarySobId }); } this.addUserModalVisible = false; message.success("添加成功"); } else { message.error(res.errormsg || "添加失败"); } }); }; //薪资帐套人员范围(包含)列表 getLedgerPersonRangeInclude = (params) => { API.getLedgerPersonRangeInclude(params).then((res) => { if (res.status) { this.setUserTableStore(res.data); } else { message.error(res.errormsg || "获取失败"); } }); }; //薪资帐套人员范围(排除)列表 getLedgerPersonRangeExclude = (params) => { API.getLedgerPersonRangeExclude(params).then((res) => { if (res.status) { this.setUserTableStore(res.data); } else { message.error(res.errormsg || "获取失败"); } }); }; //删除薪资帐套人员范围 deleteLedgerPersonRange = (params) => { API.deleteLedgerPersonRange(params).then((res) => { if (res.status) { if (this.includeType == 1) { this.getLedgerPersonRangeInclude({ salarySobId: this.salarySobId }); } else { this.getLedgerPersonRangeExclude({ salarySobId: this.salarySobId }); } message.success("删除成功"); } else { message.error(res.errormsg || "删除失败"); } }); }; // 薪资项目可选列表 @action listSalaryItem = (searchValue = "", current = 1) => { let excludeIds = []; this.itemGroups && this.itemGroups.map((item) => { item.items && item.items.map((i) => { excludeIds.push(i.salaryItemId); }); }); this.loading = true; API.listSalaryItem({ name: searchValue, excludeIds, current }).then( (res) => { if (res.status) { if (res.data.list) { this.addSalaryItemDataSource = res.data.list.map((item) => { item = { ...item }; item.key = item.id; return item; }); } else { this.addSalaryItemDataSource = []; } this.addSalaryItemColumns = res.data.columns; this.addSalaryItemPageInfo = res.data; // this.salaryItemTableStore.getDatas(res.data.datas); } else { message.error(res.errormsg || "获取数据失败"); } this.loading = false; } ); }; @action empFieldList = () => { API.empFieldList().then((res) => { if (res.status) { this.empBrowserList = res.data.map((item) => { return { showname: item.name, key: item.id, selected: false }; }); } else { message.error(res.errormsg || "获取失败"); } }); }; @action saveLedgerItem = () => { let itemGroups = [...this.itemGroups]; itemGroups = itemGroups .map((item) => { let result = { ...item }; if (result.items) { result.items = result.items.map((i, index) => ({ salaryItemId: i.salaryItemId, sortedIndex: index + 1, formulaId: i.formulaId, })); return result; } }) .filter((item) => item); let params = { salarySobId: this.salarySobId, empFields: this.empFields, itemGroups: itemGroups.filter((item) => item.id != "default"), items: itemGroups.filter((item) => item.id == "default")[0].items, }; return new Promise((resolve, reject) => { API.saveLedgerItem(params).then((res) => { if (res.status) { resolve(); message.success("保存成功"); } else { reject(); message.error(res.errormsg || "保存失败"); } }); }); }; // 调薪计薪规则可选的薪资项目列表 @action listSalarySobItem = () => { let params = { salarySobId: this.salarySobId, excludeSalaryItemIds: this.sobItemRuleDataSource.map( (item) => item.salaryItemId ), }; return new Promise((resolve, reject) => { API.listSalarySobItem(params).then((res) => { if (res.status) { this.ruleOptionList = res.data.map((item) => { return { key: item.salaryItemId.toString(), showname: item.salaryItemName, selected: false, }; }); resolve(); } else { reject(); message.error(res.errormsg || "获取失败"); } }); }); }; // 调薪计薪规则保存 @action saveAdjustmentRule = () => { let params = { salarySobId: this.salarySobId, ruleParams: this.sobItemRuleDataSource, }; return new Promise((resolve, reject) => { API.saveAdjustmentRule(params).then((res) => { if (res.status) { resolve(); message.success("保存成功"); } else { reject(); message.error(res.errormsg || "获取失败"); } }); }); }; @action listAdjustmentRule = () => { let params = { salarySobId: this.salarySobId, }; API.listAdjustmentRule(params).then((res) => { if (res.status) { this.sobItemRuleDataSource = res.data; } }); }; // 保存薪资帐套校验规则 @action saveLedgerRule = (params) => { params.salarySobId = this.salarySobId; API.saveLedgerRule(params).then((res) => { if (res.status) { this.getLedgerRuleList(); message.success("保存成功"); } else { message.error(res.errormsg || "保存失败"); } }); }; //薪资帐套校验规则列表 @action getLedgerRuleList = (name = "") => { let params = { salarySobId: this.salarySobId, name, }; API.getLedgerRuleList(params).then((res) => { if (res.status) { this.ledgerRuleList = res.data; } else { message.error(res.errormsg || "获取数据失败"); } }); }; //删除薪资帐套校验规则 @action deleteLedgerRule = (ids) => { API.deleteLedgerRule(ids).then((res) => { if (res.status) { message.success("删除成功"); this.getLedgerRuleList(); } else { message.error(res.errormsg || "删除失败"); } }); }; // 获取基本信息 @action getLedgerBasicForm = () => { API.getLedgerBasicForm(this.salarySobId).then((res) => { if (res.status) { let basicForm = res.data.basicForm; Object.keys(basicForm).map((key) => { if (basicForm[key]) { basicForm[key] = basicForm[key].toString(); } }); this.baseInfoRequest = basicForm; } else { message.error(res.errormsg || "获取失败"); } }); }; //薪资帐套薪资项目详情 @action getLedgerItemForm = () => { API.getLedgerItemForm({ salarySobId: this.salarySobId }).then((res) => { if (res.status) { this.empFields = res.data.empFields; let itemGroups = res.data.itemGroups; let defaultItems = { id: "default", name: "未分类", items: res.data.items, }; itemGroups.unshift(defaultItems); this.setItemGroups(itemGroups) API.empFieldList().then((ires) => { if (res.status) { this.empBrowserList = ires.data.map((item) => { return { showname: item.name, key: item.id, selected: false }; }); this.userSelectedList = this.empFields.map((item) => { item = { ...item }; item.key = item.fieldId; this.empBrowserList.map((bitem) => { if (bitem.key == item.fieldId) { item.showname = bitem.showname; } }); return item; }); console.log("this.userSelectedList: ", toJS(this.userSelectedList)); } else { message.error(res.errormsg || "获取失败"); } }); } else { message.error(res.errormsg || "获取失败"); } }); }; }