Merge branch 'release/2.8.3.2307.01' into feature/2.8.3.2307.02-工资单反馈
# Conflicts: # pc4mobx/hrmSalary/pages/mobilePayroll/index.js # pc4mobx/hrmSalary/pages/payroll/stepForm/baseInformForm.js # pc4mobx/hrmSalary/pages/ruleConfig/index.js
This commit is contained in:
commit
70bd93ef2f
|
|
@ -31,6 +31,15 @@ export const mySalaryBill = params => {
|
|||
export const isNeedSecondPwdVerify = params => {
|
||||
return WeaTools.callApi("/api/encrypt/secondauthsetting/isNeedSecondAuth", "POST", params);
|
||||
};
|
||||
export const getSecondAuthForm = params => {
|
||||
return WeaTools.callApi("/api/encrypt/secondauthsetting/getSecondAuthForm", "POST", params);
|
||||
};
|
||||
export const doSecondAuth = params => {
|
||||
return WeaTools.callApi("/api/encrypt/secondauthsetting/doSecondAuth", "POST", params);
|
||||
};
|
||||
export const checkPassword = params => {
|
||||
return WeaTools.callApi("/api/hrm/secondarypwd/checkPassword", "POST", params);
|
||||
};
|
||||
export const saveSecondaryPwd = params => {
|
||||
return WeaTools.callApi("/api/hrm/secondarypwd/saveSecondaryPwd", "POST", params);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -65,3 +65,11 @@ export const deletePendingTodo = (params) => {
|
|||
export const deleteSuspendTodo = (params) => {
|
||||
return postFetch('/api/bs/hrmsalary/salaryArchive/deleteSuspendTodo', params);
|
||||
}
|
||||
// 待定薪、停薪员工 是否允许删除薪资档案
|
||||
export const salaryArchiveDelete = (params) => {
|
||||
return WeaTools.callApi('/api/bs/hrmsalary/sys/conf/code?code=salaryArchiveDelete', 'GET', params);
|
||||
}
|
||||
// 删除薪资档案
|
||||
export const deleteSalaryArchive = (params) => {
|
||||
return postFetch('/api/bs/hrmsalary/salaryArchive/deleteSalaryArchive', params);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,6 +43,14 @@ export const getEncryptProgress = params => {
|
|||
export const operateTaxDeclarationFunction = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/sys/operateTaxDeclarationFunction", params);
|
||||
};
|
||||
//保存档案删除规则
|
||||
export const saveArchiveDelete = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/sys/saveArchiveDelete", params);
|
||||
};
|
||||
//保存个税申报撤回规则
|
||||
export const saveWithDrawTaxDeclaration = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/sys/saveWithDrawTaxDeclaration", params);
|
||||
};
|
||||
//保存匹配规则
|
||||
export const saveSalaryAcctEmployeeRule = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/sys/saveSalaryAcctEmployeeRule", params);
|
||||
|
|
|
|||
|
|
@ -1,146 +1,150 @@
|
|||
import { WeaTools } from 'ecCom';
|
||||
import { WeaTools } from "ecCom";
|
||||
import { postFetch } from "../util/request";
|
||||
|
||||
export const tips = params => {
|
||||
return WeaTools.callApi('/api/bs/hrmsalary/archives/tips', 'get', params);
|
||||
return WeaTools.callApi("/api/bs/hrmsalary/archives/tips", "get", params);
|
||||
};
|
||||
|
||||
export const getCondition = params => {
|
||||
return WeaTools.callApi('/api/bs/hrmsalary/archives/getSearchCondition', 'get', params);
|
||||
return WeaTools.callApi("/api/bs/hrmsalary/archives/getSearchCondition", "get", params);
|
||||
};
|
||||
|
||||
//社保福利档案列表
|
||||
export const queryList = (params) => {
|
||||
return postFetch('/api/bs/hrmsalary/archives/getTable', params);
|
||||
return postFetch("/api/bs/hrmsalary/archives/getTable", params);
|
||||
};
|
||||
//社保福利档案列表
|
||||
export const queryInsuranceTabTotal = (params) => {
|
||||
return WeaTools.callApi('/api/bs/hrmsalary/archives/queryInsuranceTabTotal', params);
|
||||
return WeaTools.callApi("/api/bs/hrmsalary/archives/queryInsuranceTabTotal", params);
|
||||
};
|
||||
//删除待办-待增员
|
||||
export const updateRunStatus = (params) => {
|
||||
return postFetch('/api/bs/hrmsalary/archives/updateRunStatus', params);
|
||||
return postFetch("/api/bs/hrmsalary/archives/updateRunStatus", params);
|
||||
};
|
||||
//删除待办-待减员
|
||||
export const cancelStayDel = (params) => {
|
||||
return postFetch('/api/bs/hrmsalary/archives/cancelStayDel', params);
|
||||
return postFetch("/api/bs/hrmsalary/archives/cancelStayDel", params);
|
||||
};
|
||||
//全量增员
|
||||
export const allStayAddToPay = (params) => {
|
||||
return WeaTools.callApi('/api/bs/hrmsalary/archives/allStayAddToPay', 'GET', params);
|
||||
return WeaTools.callApi("/api/bs/hrmsalary/archives/allStayAddToPay", "GET", params);
|
||||
};
|
||||
//全量减员
|
||||
export const allStayDelToStop = (params) => {
|
||||
return WeaTools.callApi('/api/bs/hrmsalary/archives/allStayDelToStop', 'GET', params);
|
||||
return WeaTools.callApi("/api/bs/hrmsalary/archives/allStayDelToStop", "GET", params);
|
||||
};
|
||||
//增员
|
||||
export const stayAddToPay = (params) => {
|
||||
return postFetch('/api/bs/hrmsalary/archives/stayAddToPay', params);
|
||||
return postFetch("/api/bs/hrmsalary/archives/stayAddToPay", params);
|
||||
};
|
||||
//减员
|
||||
export const stayDelToStop = (params) => {
|
||||
return postFetch('/api/bs/hrmsalary/archives/stayDelToStop', params);
|
||||
return postFetch("/api/bs/hrmsalary/archives/stayDelToStop", params);
|
||||
};
|
||||
//删除社保档案
|
||||
export const deleteArchive = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/archives/deleteArchive", params);
|
||||
};
|
||||
//取消停缴
|
||||
export const cancelStopPayment = (params) => {
|
||||
return postFetch('/api/bs/hrmsalary/archives/cancelStopPayment', params);
|
||||
return postFetch("/api/bs/hrmsalary/archives/cancelStopPayment", params);
|
||||
};
|
||||
export const getTable = params => {
|
||||
return fetch('/api/bs/hrmsalary/archives/getTable', {
|
||||
method: 'POST',
|
||||
mode: 'cors',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(params)
|
||||
}).then(res => res.json())
|
||||
return fetch("/api/bs/hrmsalary/archives/getTable", {
|
||||
method: "POST",
|
||||
mode: "cors",
|
||||
headers: {
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
body: JSON.stringify(params)
|
||||
}).then(res => res.json());
|
||||
};
|
||||
|
||||
export const getBaseForm = params => {
|
||||
return WeaTools.callApi('/api/bs/hrmsalary/archives/getBaseForm', 'get', params);
|
||||
return WeaTools.callApi("/api/bs/hrmsalary/archives/getBaseForm", "get", params);
|
||||
};
|
||||
|
||||
export const getPaymentForm = params => {
|
||||
return WeaTools.callApi('/api/bs/hrmsalary/archives/getPaymentForm', 'get', params);
|
||||
return WeaTools.callApi("/api/bs/hrmsalary/archives/getPaymentForm", "get", params);
|
||||
};
|
||||
|
||||
// 保存
|
||||
export const save = params => {
|
||||
return fetch('/api/bs/hrmsalary/archives/save', {
|
||||
method: 'POST',
|
||||
mode: 'cors',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(params)
|
||||
}).then(res => res.json())
|
||||
return fetch("/api/bs/hrmsalary/archives/save", {
|
||||
method: "POST",
|
||||
mode: "cors",
|
||||
headers: {
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
body: JSON.stringify(params)
|
||||
}).then(res => res.json());
|
||||
};
|
||||
|
||||
// 导出档案
|
||||
export const exportDocument = params => {
|
||||
return WeaTools.callApi('/api/bs/hrmsalary/archives/export', 'get', params);
|
||||
return WeaTools.callApi("/api/bs/hrmsalary/archives/export", "get", params);
|
||||
};
|
||||
|
||||
// 导入档案 - 获取组件的一些前置参数
|
||||
export const getImportDocumentParams = params => {
|
||||
return WeaTools.callApi('/api/bs/hrmsalary/archives/getImportParams', 'get', params);
|
||||
return WeaTools.callApi("/api/bs/hrmsalary/archives/getImportParams", "get", params);
|
||||
};
|
||||
|
||||
// 导入档案- 导出现有数据
|
||||
export const exportCurData = params => {
|
||||
fetch('/api/bs/hrmsalary/scheme/template/export',{
|
||||
method: 'POST',
|
||||
mode: 'cors',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(params)
|
||||
}).then(res => res.blob().then(blob => {
|
||||
var filename=`社保福利档案模板.xlsx`
|
||||
var a = document.createElement('a');
|
||||
var url = window.URL.createObjectURL(blob);
|
||||
a.href = url;
|
||||
a.download = filename;
|
||||
a.click();
|
||||
window.URL.revokeObjectURL(url);
|
||||
}))
|
||||
fetch("/api/bs/hrmsalary/scheme/template/export", {
|
||||
method: "POST",
|
||||
mode: "cors",
|
||||
headers: {
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
body: JSON.stringify(params)
|
||||
}).then(res => res.blob().then(blob => {
|
||||
var filename = `社保福利档案模板.xlsx`;
|
||||
var a = document.createElement("a");
|
||||
var url = window.URL.createObjectURL(blob);
|
||||
a.href = url;
|
||||
a.download = filename;
|
||||
a.click();
|
||||
window.URL.revokeObjectURL(url);
|
||||
}));
|
||||
};
|
||||
|
||||
// 导入档案-预览
|
||||
export const previewCurData = (params) => {
|
||||
return fetch('/api/bs/hrmsalary/scheme/preview', {
|
||||
method: 'POST',
|
||||
mode: 'cors',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(params)
|
||||
}).then(res => res.json())
|
||||
}
|
||||
return fetch("/api/bs/hrmsalary/scheme/preview", {
|
||||
method: "POST",
|
||||
mode: "cors",
|
||||
headers: {
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
body: JSON.stringify(params)
|
||||
}).then(res => res.json());
|
||||
};
|
||||
|
||||
// 档案导入
|
||||
export const importBatch = (params) => {
|
||||
return fetch('/api/bs/hrmsalary/scheme/importBatch', {
|
||||
method: 'POST',
|
||||
mode: 'cors',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(params)
|
||||
}).then(res => res.json())
|
||||
}
|
||||
return fetch("/api/bs/hrmsalary/scheme/importBatch", {
|
||||
method: "POST",
|
||||
mode: "cors",
|
||||
headers: {
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
body: JSON.stringify(params)
|
||||
}).then(res => res.json());
|
||||
};
|
||||
|
||||
// 导出档案
|
||||
export const exportArchives = (ids) => {
|
||||
fetch('/api/bs/hrmsalary/scheme/export?ids=' + ids).then(res => res.blob().then(blob => {
|
||||
var filename=`社保福利档案.xlsx`
|
||||
var a = document.createElement('a');
|
||||
var url = window.URL.createObjectURL(blob);
|
||||
a.href = url;
|
||||
a.download = filename;
|
||||
a.click();
|
||||
window.URL.revokeObjectURL(url);
|
||||
}))
|
||||
}
|
||||
fetch("/api/bs/hrmsalary/scheme/export?ids=" + ids).then(res => res.blob().then(blob => {
|
||||
var filename = `社保福利档案.xlsx`;
|
||||
var a = document.createElement("a");
|
||||
var url = window.URL.createObjectURL(blob);
|
||||
a.href = url;
|
||||
a.download = filename;
|
||||
a.click();
|
||||
window.URL.revokeObjectURL(url);
|
||||
}));
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ class Index extends Component {
|
|||
return { ...item, fixed: "left", width: 176 };
|
||||
}
|
||||
if (item.dataIndex === "operate") {
|
||||
return { ...item, fixed: "right", width: "120px" };
|
||||
return { ...item, fixed: "right", width: item.width || "120px" };
|
||||
}
|
||||
return { ...item, width: "33%" };
|
||||
});
|
||||
|
|
|
|||
|
|
@ -8,17 +8,17 @@
|
|||
}
|
||||
|
||||
.linkWapper {
|
||||
a {
|
||||
color: #4d7ad8;
|
||||
margin-right: 8px;
|
||||
}
|
||||
//a {
|
||||
// color: #4d7ad8;
|
||||
// margin-right: 8px;
|
||||
//}
|
||||
|
||||
i {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
//a:hover {
|
||||
// text-decoration: none;
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
import React from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { Button, DatePicker, Dropdown, Menu, message, Modal, Tag } from "antd";
|
||||
import { WeaInputSearch, WeaNewScroll, WeaTop } from "ecCom";
|
||||
import { renderNoright } from "../../util"; // 渲染form数据的方法:因为多个页面都会使用,所以抽的公共方法在util中
|
||||
import { WeaInputSearch, WeaLocaleProvider, WeaNewScroll, WeaTop } from "ecCom";
|
||||
import { renderNoright } from "../../util";
|
||||
import CustomTab from "../../components/customTab";
|
||||
import moment from "moment";
|
||||
import BaseFormModal from "./baseFormModal";
|
||||
|
|
@ -10,6 +10,7 @@ import CustomPaginationTable from "../../components/customPaginationTable";
|
|||
import ProgressModal from "../../components/progressModal";
|
||||
import "./index.less";
|
||||
|
||||
const { getLabel } = WeaLocaleProvider;
|
||||
const MonthPicker = DatePicker.MonthPicker;
|
||||
|
||||
@inject("calculateStore", "taxAgentStore")
|
||||
|
|
@ -185,16 +186,11 @@ export default class Calculate extends React.Component {
|
|||
</div>;
|
||||
};
|
||||
}
|
||||
if (item.title == "操作" && showOperateBtn) {
|
||||
if (item.dataIndex === "operate" && showOperateBtn) {
|
||||
item.width = 150;
|
||||
item.render = (text, record) => {
|
||||
const accountBtn = _.filter(
|
||||
record.operate,
|
||||
it => it.text == "核算" || it.text == "重新核算"
|
||||
);
|
||||
const notAccountBtn = _.filter(
|
||||
record.operate,
|
||||
it => it.text != "核算" && it.text != "重新核算"
|
||||
);
|
||||
const accountBtn = _.take(record.operate, 2);
|
||||
const notAccountBtn = _.drop(record.operate, 2);
|
||||
let operateBtn = [];
|
||||
if (!_.isEmpty(accountBtn)) {
|
||||
operateBtn.push(
|
||||
|
|
@ -206,13 +202,8 @@ export default class Calculate extends React.Component {
|
|||
style={{ display: "inline-block", marginRight: 8 }}>
|
||||
<a
|
||||
href="javascript:void(0);"
|
||||
onClick={() => {
|
||||
if (it.text == "核算" || it.text == "重新核算") {
|
||||
it.text == "核算"
|
||||
? this.handleAccount(record)
|
||||
: this.handleReaccount(record);
|
||||
}
|
||||
}}>
|
||||
style={(idx === 1 && it.text.length === 2) ? { padding: "0 12px" } : {}}
|
||||
onClick={() => this.handleOperateClick(it.index, record)}>
|
||||
{it.text}
|
||||
</a>
|
||||
</div>
|
||||
|
|
@ -228,31 +219,14 @@ export default class Calculate extends React.Component {
|
|||
{notAccountBtn.map(cz =>
|
||||
<Menu.Item>
|
||||
<a
|
||||
onClick={() => {
|
||||
if (cz.text == "核算") {
|
||||
this.handleAccount(record);
|
||||
} else if (cz.text == "删除") {
|
||||
this.handleDeleteItem(record);
|
||||
} else if (cz.text == "归档") {
|
||||
this.handleFile(record);
|
||||
} else if (cz.text == "重新核算") {
|
||||
this.handleReaccount(record);
|
||||
} else if (cz.text == "查看") {
|
||||
this.handleDetail(record);
|
||||
} else if (cz.text == "回算") {
|
||||
this.handleBackCalculate(record);
|
||||
}
|
||||
}}>
|
||||
onClick={() => this.handleOperateClick(cz.index, record)}>
|
||||
{cz.text}
|
||||
</a>
|
||||
</Menu.Item>
|
||||
)}
|
||||
</Menu>
|
||||
}>
|
||||
<i
|
||||
className="icon-coms-more"
|
||||
style={{ color: "#4d7ad8", cursor: "pointer" }}
|
||||
/>
|
||||
<a href="javascript:void(0);"><i className="icon-coms-more"/></a>
|
||||
</Dropdown>
|
||||
);
|
||||
}
|
||||
|
|
@ -260,7 +234,23 @@ export default class Calculate extends React.Component {
|
|||
};
|
||||
}
|
||||
});
|
||||
return showOperateBtn ? columns : _.filter(columns, it => it.title != "操作");
|
||||
return showOperateBtn ? columns : _.filter(columns, it => it.title !== "操作");
|
||||
};
|
||||
|
||||
handleOperateClick = (index, record) => {
|
||||
if (index === "0") {
|
||||
this.handleAccount(record);
|
||||
} else if (index === "1") {
|
||||
this.handleDeleteItem(record);
|
||||
} else if (index === "2") {
|
||||
this.handleFile(record);
|
||||
} else if (index === "4") {
|
||||
this.handleReaccount(record);
|
||||
} else if (index === "3") {
|
||||
this.handleDetail(record);
|
||||
} else if (index === "5") {
|
||||
this.handleBackCalculate(record);
|
||||
}
|
||||
};
|
||||
|
||||
// 分页
|
||||
|
|
@ -290,56 +280,13 @@ export default class Calculate extends React.Component {
|
|||
|
||||
render() {
|
||||
const { calculateStore, taxAgentStore: { showOperateBtn } } = this.props;
|
||||
const {
|
||||
salaryListDataSource,
|
||||
salaryListColumns,
|
||||
loading,
|
||||
hasRight,
|
||||
form,
|
||||
condition,
|
||||
tableStore,
|
||||
showSearchAd,
|
||||
getTableDatas,
|
||||
doSearch,
|
||||
setShowSearchAd,
|
||||
salaryListPageInfo
|
||||
} = calculateStore;
|
||||
const { salaryListDataSource, loading, hasRight, salaryListPageInfo } = calculateStore;
|
||||
const { modalParam } = this.state;
|
||||
if (!hasRight && !loading) {
|
||||
// 无权限处理
|
||||
return renderNoright();
|
||||
}
|
||||
|
||||
const rightMenu = [
|
||||
// 右键菜单
|
||||
{
|
||||
key: "BTN_COLUMN",
|
||||
icon: <i className="icon-coms-Custom"/>,
|
||||
content: "显示列定制",
|
||||
onClick: this.showColumn
|
||||
}
|
||||
];
|
||||
const collectParams = {
|
||||
// 收藏功能配置
|
||||
favname: "薪资核算",
|
||||
favouritetype: 1,
|
||||
objid: 0,
|
||||
link: "wui/index.html#/ns_demo03/index",
|
||||
importantlevel: 1
|
||||
};
|
||||
const adBtn = [
|
||||
// 高级搜索内部按钮
|
||||
<Button type="primary" onClick={doSearch}>
|
||||
搜索
|
||||
</Button>,
|
||||
<Button type="ghost" onClick={() => form.resetForm()}>
|
||||
重置
|
||||
</Button>,
|
||||
<Button type="ghost" onClick={() => setShowSearchAd(false)}>
|
||||
取消
|
||||
</Button>
|
||||
];
|
||||
|
||||
const renderRightOperation = () => {
|
||||
const { startDate, endDate } = this.state;
|
||||
return (
|
||||
|
|
@ -393,13 +340,10 @@ export default class Calculate extends React.Component {
|
|||
<div className="mySalaryBenefitsWrapper">
|
||||
{/* 收藏功能: 配置之后显示 收藏、帮助、显示页面地址 这3个功能 */}
|
||||
<WeaTop
|
||||
title="薪资核算" // 文字
|
||||
icon={<i className="icon-coms-fa"/>} // 左侧图标
|
||||
iconBgcolor="#F14A2D" // 左侧图标背景色
|
||||
showDropIcon={false} // 是否显示下拉按钮
|
||||
dropMenuDatas={rightMenu} // 下拉菜单(和页面的右键菜单相同)
|
||||
dropMenuProps={{ collectParams }}>
|
||||
{/* 收藏功能: 配置之后显示 收藏、帮助、显示页面地址 这3个功能 */}
|
||||
title="薪资核算"
|
||||
icon={<i className="icon-coms-fa"/>}
|
||||
iconBgcolor="#F14A2D"
|
||||
showDropIcon={false}>
|
||||
<CustomTab searchOperationItem={renderRightOperation()}/>
|
||||
<div className="tableWrapper">
|
||||
<WeaNewScroll height="100%">
|
||||
|
|
|
|||
|
|
@ -4,6 +4,12 @@
|
|||
}
|
||||
|
||||
.formItem {
|
||||
display: flex;
|
||||
|
||||
.ant-col-8 {
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
.wea-select, .ant-select {
|
||||
width: 100%;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ export default class CalculateDetail extends React.Component {
|
|||
departmentIds: "",
|
||||
positionIds: "",
|
||||
subcompanyIds: "",
|
||||
status: "",
|
||||
statuses: "",
|
||||
consolidatedTaxation: "0"
|
||||
},
|
||||
selectedKey: "0",
|
||||
|
|
@ -115,7 +115,7 @@ export default class CalculateDetail extends React.Component {
|
|||
);
|
||||
};
|
||||
Select = (value, key) => {
|
||||
const { status } = this.state.searchItemsValue;
|
||||
const { statuses } = this.state.searchItemsValue;
|
||||
return (
|
||||
<WeaFormItem
|
||||
label={value}
|
||||
|
|
@ -123,10 +123,13 @@ export default class CalculateDetail extends React.Component {
|
|||
wrapperCol={{ span: 18 }}
|
||||
>
|
||||
<WeaSelect
|
||||
value={status}
|
||||
multiple
|
||||
value={statuses}
|
||||
options={[
|
||||
{ key: "", showname: "" }, { key: "ALL", showname: "全部" },
|
||||
{ key: "NORMAL", showname: "在职" }, { key: "UNAVAILABLE", showname: "离职" }
|
||||
{ key: "0", showname: "试用" }, { key: "1", showname: "正式" },
|
||||
{ key: "2", showname: "临时" }, { key: "3", showname: "试用延期" },
|
||||
{ key: "4", showname: "解雇" }, { key: "5", showname: "离职" },
|
||||
{ key: "6", showname: "退休" }
|
||||
]}
|
||||
onChange={(val) => this.setState({ searchItemsValue: { ...this.state.searchItemsValue, [key]: val } })}/>
|
||||
</WeaFormItem>
|
||||
|
|
@ -338,7 +341,7 @@ export default class CalculateDetail extends React.Component {
|
|||
workcode: "",
|
||||
departmentIds: "",
|
||||
positionIds: "",
|
||||
status: "",
|
||||
statuses: "",
|
||||
consolidatedTaxation: "0"
|
||||
}
|
||||
})}>
|
||||
|
|
@ -356,7 +359,7 @@ export default class CalculateDetail extends React.Component {
|
|||
{ com: this.Browser("分部", "subcompanyIds") },
|
||||
{ com: this.Browser("部门", "departmentIds") },
|
||||
{ com: this.Browser("岗位", "positionIds") },
|
||||
{ com: this.Select("状态", "status") },
|
||||
{ com: this.Select("状态", "statuses") },
|
||||
{ com: this.Checkbox("合并计税", "consolidatedTaxation") }
|
||||
];
|
||||
return <WeaSearchGroup title={"基本信息"} items={searchItems} showGroup/>;
|
||||
|
|
@ -391,7 +394,7 @@ export default class CalculateDetail extends React.Component {
|
|||
/>
|
||||
{selectedKey == 0 && <UserSure/>}
|
||||
{selectedKey == 1 && <SalaryDetail onChangeAccountIds={(ids) => this.setState({ accountIds: ids })}
|
||||
employeeName={this.state.searchValue}/>}
|
||||
employeeName={this.state.searchItemsValue}/>}
|
||||
{acctResultImportVisiable &&
|
||||
<AcctResultImportModal
|
||||
visiable={acctResultImportVisiable}
|
||||
|
|
|
|||
|
|
@ -94,7 +94,7 @@ export default class SalaryDetail extends React.Component {
|
|||
url: "/api/bs/hrmsalary/salaryacct/acctresult/list",
|
||||
queryParams: {
|
||||
salaryAcctRecordId,
|
||||
employeeName: this.props.employeeName,
|
||||
...this.props.employeeName,
|
||||
current, pageSize
|
||||
}
|
||||
};
|
||||
|
|
@ -109,7 +109,7 @@ export default class SalaryDetail extends React.Component {
|
|||
url: "/api/bs/hrmsalary/salaryacct/acctresult/list",
|
||||
queryParams: {
|
||||
salaryAcctRecordId,
|
||||
employeeName: this.props.employeeName
|
||||
...this.props.employeeName
|
||||
}
|
||||
};
|
||||
type && childFrameObj.contentWindow.postMessage(JSON.stringify(payload), "*");
|
||||
|
|
@ -158,7 +158,7 @@ export default class SalaryDetail extends React.Component {
|
|||
url: "/api/bs/hrmsalary/salaryacct/acctresult/list",
|
||||
queryParams: {
|
||||
salaryAcctRecordId,
|
||||
employeeName: this.props.employeeName
|
||||
...this.props.employeeName
|
||||
}
|
||||
};
|
||||
childFrameObj.contentWindow.postMessage(JSON.stringify(payload), "*");
|
||||
|
|
@ -192,7 +192,7 @@ export default class SalaryDetail extends React.Component {
|
|||
url: "/api/bs/hrmsalary/salaryacct/acctresult/list",
|
||||
queryParams: {
|
||||
salaryAcctRecordId,
|
||||
employeeName: this.props.employeeName
|
||||
...this.props.employeeName
|
||||
}
|
||||
};
|
||||
childFrameObj.contentWindow.postMessage(JSON.stringify(payload), "*");
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ export default class UserSure extends React.Component {
|
|||
workcode: "",
|
||||
departmentIds: "",
|
||||
positionIds: "",
|
||||
status: ""
|
||||
statuses: ""
|
||||
},
|
||||
selectedKey: "0",
|
||||
selectedRowKeys: [], // table 选中项
|
||||
|
|
@ -78,7 +78,7 @@ export default class UserSure extends React.Component {
|
|||
);
|
||||
};
|
||||
Select = (value, key) => {
|
||||
const { status } = this.state.searchItemsValue;
|
||||
const { statuses } = this.state.searchItemsValue;
|
||||
return (
|
||||
<WeaFormItem
|
||||
label={value}
|
||||
|
|
@ -86,10 +86,13 @@ export default class UserSure extends React.Component {
|
|||
wrapperCol={{ span: 18 }}
|
||||
>
|
||||
<WeaSelect
|
||||
value={String(status)}
|
||||
multiple
|
||||
value={String(statuses)}
|
||||
options={[
|
||||
{ key: "", showname: "" }, { key: "ALL", showname: "全部" },
|
||||
{ key: "NORMAL", showname: "在职" }, { key: "UNAVAILABLE", showname: "离职" }
|
||||
{ key: "0", showname: "试用" }, { key: "1", showname: "正式" },
|
||||
{ key: "2", showname: "临时" }, { key: "3", showname: "试用延期" },
|
||||
{ key: "4", showname: "解雇" }, { key: "5", showname: "离职" },
|
||||
{ key: "6", showname: "退休" }
|
||||
]}
|
||||
onChange={(val) => this.setState({ searchItemsValue: { ...this.state.searchItemsValue, [key]: val } })}/>
|
||||
</WeaFormItem>
|
||||
|
|
@ -117,7 +120,7 @@ export default class UserSure extends React.Component {
|
|||
url: "/api/bs/hrmsalary/salaryacct/acctemployee/list",
|
||||
queryParams: {
|
||||
salaryAcctRecordId,
|
||||
employeeName: this.state.userListSearchValue
|
||||
...this.state.searchItemsValue,
|
||||
}
|
||||
};
|
||||
childFrameObj.contentWindow.postMessage(JSON.stringify(payload), "*"); //window.postMessage
|
||||
|
|
@ -137,7 +140,7 @@ export default class UserSure extends React.Component {
|
|||
url: "/api/bs/hrmsalary/salaryacct/acctemployee/list",
|
||||
queryParams: {
|
||||
salaryAcctRecordId,
|
||||
employeeName: this.state.userListSearchValue,
|
||||
...this.state.searchItemsValue,
|
||||
current,
|
||||
pageSize
|
||||
}
|
||||
|
|
@ -150,7 +153,7 @@ export default class UserSure extends React.Component {
|
|||
url: this.state.selectedKey === "1" ? "/api/bs/hrmsalary/salaryacct/reducedemployee/list" : "/api/bs/hrmsalary/salaryacct/addedemployee/list",
|
||||
queryParams: {
|
||||
salaryAcctRecordId,
|
||||
employeeName: this.state.userListSearchValue,
|
||||
...this.state.searchItemsValue,
|
||||
current, pageSize
|
||||
}
|
||||
};
|
||||
|
|
@ -177,7 +180,7 @@ export default class UserSure extends React.Component {
|
|||
url: "/api/bs/hrmsalary/salaryacct/acctemployee/list",
|
||||
queryParams: {
|
||||
salaryAcctRecordId,
|
||||
employeeName: this.state.userListSearchValue,
|
||||
...this.state.searchItemsValue,
|
||||
...this.pageInfo
|
||||
}
|
||||
};
|
||||
|
|
@ -224,7 +227,7 @@ export default class UserSure extends React.Component {
|
|||
url: "/api/bs/hrmsalary/salaryacct/acctemployee/list",
|
||||
queryParams: {
|
||||
salaryAcctRecordId,
|
||||
employeeName: this.state.userListSearchValue,
|
||||
...this.state.searchItemsValue,
|
||||
...this.pageInfo,
|
||||
current: 1
|
||||
}
|
||||
|
|
@ -255,7 +258,7 @@ export default class UserSure extends React.Component {
|
|||
url: "/api/bs/hrmsalary/salaryacct/acctemployee/list",
|
||||
queryParams: {
|
||||
salaryAcctRecordId,
|
||||
employeeName: this.state.userListSearchValue,
|
||||
...this.state.searchItemsValue,
|
||||
...this.pageInfo
|
||||
}
|
||||
};
|
||||
|
|
@ -281,7 +284,7 @@ export default class UserSure extends React.Component {
|
|||
url: "/api/bs/hrmsalary/salaryacct/acctemployee/list",
|
||||
queryParams: {
|
||||
salaryAcctRecordId,
|
||||
employeeName: this.state.userListSearchValue,
|
||||
...this.state.searchItemsValue,
|
||||
...this.pageInfo
|
||||
}
|
||||
};
|
||||
|
|
@ -342,7 +345,7 @@ export default class UserSure extends React.Component {
|
|||
employeeName: "",
|
||||
departmentIds: "",
|
||||
positionIds: "",
|
||||
status: ""
|
||||
statuses: ""
|
||||
}
|
||||
})}>
|
||||
重置
|
||||
|
|
@ -358,7 +361,7 @@ export default class UserSure extends React.Component {
|
|||
{ com: this.Input("工号", "workcode") },
|
||||
{ com: this.Browser("部门", "departmentIds") },
|
||||
{ com: this.Browser("岗位", "positionIds") },
|
||||
{ com: this.Select("状态", "status") }
|
||||
{ com: this.Select("状态", "statuses") }
|
||||
];
|
||||
return <WeaSearchGroup title={"基本信息"} items={searchItems} showGroup/>;
|
||||
};
|
||||
|
|
@ -427,7 +430,7 @@ export default class UserSure extends React.Component {
|
|||
url: "/api/bs/hrmsalary/salaryacct/acctemployee/list",
|
||||
queryParams: {
|
||||
salaryAcctRecordId,
|
||||
employeeName: this.state.userListSearchValue
|
||||
...this.state.searchItemsValue,
|
||||
}
|
||||
};
|
||||
childFrameObj.contentWindow.postMessage(JSON.stringify(payload), "*"); //window.postMessage
|
||||
|
|
@ -457,7 +460,7 @@ export default class UserSure extends React.Component {
|
|||
url: "/api/bs/hrmsalary/salaryacct/reducedemployee/list",
|
||||
queryParams: {
|
||||
salaryAcctRecordId,
|
||||
employeeName: this.state.userListSearchValue
|
||||
...this.state.searchItemsValue,
|
||||
}
|
||||
};
|
||||
childFrameObj.contentWindow.postMessage(JSON.stringify(payload), "*");
|
||||
|
|
@ -487,7 +490,7 @@ export default class UserSure extends React.Component {
|
|||
url: "/api/bs/hrmsalary/salaryacct/addedemployee/list",
|
||||
queryParams: {
|
||||
salaryAcctRecordId,
|
||||
employeeName: this.state.userListSearchValue
|
||||
...this.state.searchItemsValue,
|
||||
}
|
||||
};
|
||||
childFrameObj.contentWindow.postMessage(JSON.stringify(payload), "*");
|
||||
|
|
|
|||
|
|
@ -2,12 +2,12 @@
|
|||
.accumulated {
|
||||
.wea-form-cell-wrapper {
|
||||
& > div:first-child {
|
||||
width: 10% !important;
|
||||
height: 46px !important;
|
||||
line-height: 46px;
|
||||
}
|
||||
|
||||
& > div:nth-child(2) {
|
||||
width: 40% !important;
|
||||
//width: 40% !important;
|
||||
|
||||
.wea-form-item-wrapper {
|
||||
display: flex !important;
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
}
|
||||
|
||||
& > div:last-child {
|
||||
width: 40% !important;
|
||||
//width: 40% !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ class TableRecord extends Component {
|
|||
loading: {
|
||||
query: false
|
||||
},
|
||||
width: 0,
|
||||
dataSource: [],
|
||||
columns: [],
|
||||
selectedRowKeys: [],
|
||||
|
|
@ -37,13 +38,23 @@ class TableRecord extends Component {
|
|||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.setState({ width: window.innerWidth });
|
||||
this.convertData(this.props);
|
||||
window.addEventListener("resize", this.resizeWidth);
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
window.removeEventListener("resize", this.resizeWidth);
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps, nextContext) {
|
||||
this.convertData(nextProps);
|
||||
}
|
||||
|
||||
resizeWidth = (e) => {
|
||||
this.setState({ width: e.target.innerWidth });
|
||||
};
|
||||
|
||||
convertData = (props) => {
|
||||
const { recordPayload } = this.state;
|
||||
const { record, screenParams } = props;
|
||||
|
|
@ -116,7 +127,7 @@ class TableRecord extends Component {
|
|||
|
||||
render() {
|
||||
const { className, screenParams, taxAgentOption, record } = this.props;
|
||||
const { columns, dataSource, loading, selectedRowKeys, pageInfo, recordPayload } = this.state;
|
||||
const { columns, dataSource, loading, selectedRowKeys, pageInfo, recordPayload, width } = this.state;
|
||||
const rowSelection = {
|
||||
selectedRowKeys,
|
||||
onChange: (selectedRowKeys) => this.setState({ selectedRowKeys })
|
||||
|
|
@ -172,7 +183,7 @@ class TableRecord extends Component {
|
|||
<div className="tableRecordWrapper">
|
||||
{
|
||||
!_.isEmpty(screenParams) &&
|
||||
<WeaSearchGroup className={className} showGroup needTigger={false} items={items} col={3}/>
|
||||
<WeaSearchGroup className={className} showGroup needTigger={false} items={items} col={width > 1280 ? 3 : 2}/>
|
||||
}
|
||||
<UnifiedTable
|
||||
rowKey="id"
|
||||
|
|
|
|||
|
|
@ -399,66 +399,73 @@ export const dataCollectCondition = [
|
|||
{
|
||||
items: [
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["addUpChildEducation"],
|
||||
fieldcol: 14,
|
||||
label: "累计子女教育",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["addUpContinuingEducation"],
|
||||
fieldcol: 14,
|
||||
label: "累计继续教育",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["addUpHousingLoanInterest"],
|
||||
fieldcol: 14,
|
||||
label: "累计住房贷款利息",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["addUpHousingRent"],
|
||||
fieldcol: 14,
|
||||
label: "累计住房租金",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["addUpSupportElderly"],
|
||||
fieldcol: 14,
|
||||
label: "累计赡养老人",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["addUpIllnessMedical"],
|
||||
fieldcol: 14,
|
||||
label: "累计大病医疗",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["addUpInfantCare"],
|
||||
fieldcol: 14,
|
||||
label: "累计婴幼儿照护",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
}
|
||||
],
|
||||
|
|
|
|||
|
|
@ -45,18 +45,18 @@
|
|||
}
|
||||
|
||||
.linkWapper {
|
||||
a {
|
||||
color: #4d7ad8;
|
||||
margin-right: 8px;
|
||||
}
|
||||
//a {
|
||||
// color: #4d7ad8;
|
||||
// margin-right: 8px;
|
||||
//}
|
||||
|
||||
i {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
//a:hover {
|
||||
// text-decoration: none;
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -69,156 +69,173 @@ export const dataCollectCondition = [
|
|||
{
|
||||
items: [
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["addUpIncome"],
|
||||
fieldcol: 14,
|
||||
label: "累计收入额",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["addUpSubtraction"],
|
||||
fieldcol: 14,
|
||||
label: "累计减除费用",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["addUpSocialSecurityTotal"],
|
||||
fieldcol: 14,
|
||||
label: "累计社保个人合计",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["addUpAccumulationFundTotal"],
|
||||
fieldcol: 14,
|
||||
label: "累计公积金个人合计",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["addUpChildEducation"],
|
||||
fieldcol: 14,
|
||||
label: "累计子女教育",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["addUpContinuingEducation"],
|
||||
fieldcol: 14,
|
||||
label: "累计继续教育",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["addUpHousingLoanInterest"],
|
||||
fieldcol: 14,
|
||||
label: "累计住房贷款利息",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["addUpHousingRent"],
|
||||
fieldcol: 14,
|
||||
label: "累计住房租金",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["addUpSupportElderly"],
|
||||
fieldcol: 14,
|
||||
label: "累计赡养老人",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["addUpIllnessMedical"],
|
||||
fieldcol: 14,
|
||||
label: "累计大病医疗",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["addUpEnterpriseAndOther"],
|
||||
fieldcol: 14,
|
||||
label: "累计企业(职业)年金及其他福利",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["addUpOtherDeduction"],
|
||||
fieldcol: 14,
|
||||
label: "累计其他免税扣除",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["addUpTaxExemptIncome"],
|
||||
fieldcol: 14,
|
||||
label: "累计免税收入",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["addUpAllowedDonation"],
|
||||
fieldcol: 14,
|
||||
label: "累计准予扣除的捐赠额",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["addUpTaxSavings"],
|
||||
fieldcol: 14,
|
||||
label: "累计减免税额",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["addUpAdvanceTax"],
|
||||
fieldcol: 14,
|
||||
label: "累计已预扣预缴税额",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["addUpInfantCare"],
|
||||
fieldcol: 14,
|
||||
label: "累计婴幼儿照护",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
}
|
||||
],
|
||||
|
|
|
|||
|
|
@ -101,19 +101,22 @@ class DataTables extends Component {
|
|||
} else if (dataIndex === "operate") {
|
||||
return {
|
||||
...item,
|
||||
width: 150,
|
||||
render: (text, record) => (
|
||||
<div className="linkWapper">
|
||||
{
|
||||
!isSpecial &&
|
||||
<React.Fragment>
|
||||
<a href="javaScript:void(0);" onClick={() => onViewDetails(record)}>查看明细</a>
|
||||
<a href="javaScript:void(0);" style={{ marginRight: 12 }}
|
||||
onClick={() => onTableOperate({ key: "handleAddData" }, record)}>编辑</a>
|
||||
<a href="javaScript:void(0);" style={{ marginRight: 12 }}
|
||||
onClick={() => onViewDetails(record)}>查看明细</a>
|
||||
{
|
||||
showOperateBtn &&
|
||||
<Popover
|
||||
overlayClassName="moreIconWrapper"
|
||||
placement="bottomRight"
|
||||
content={<Menu onClick={(e) => onTableOperate(e, record)}>
|
||||
<Menu.Item key="handleAddData">编辑</Menu.Item>
|
||||
<Menu.Item key="deleteSelectAddUpDeduction">删除</Menu.Item>
|
||||
</Menu>} title="">
|
||||
<i className="icon-coms-more"/>
|
||||
|
|
@ -127,7 +130,7 @@ class DataTables extends Component {
|
|||
{
|
||||
showOperateBtn &&
|
||||
<React.Fragment>
|
||||
<a href="javaScript:void(0);"
|
||||
<a href="javaScript:void(0);" style={{ marginRight: 12 }}
|
||||
onClick={() => onTableOperate({ key: "handleAddData" }, record)}>编辑</a>
|
||||
<a href="javaScript:void(0);"
|
||||
onClick={() => onTableOperate({ key: "deleteSelectAddUpDeduction" }, record)}>删除</a>
|
||||
|
|
|
|||
|
|
@ -69,48 +69,53 @@ export const dataCollectCondition = [
|
|||
{
|
||||
items: [
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["businessHealthyInsurance"],
|
||||
fieldcol: 14,
|
||||
label: "商业健康保险",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["taxDelayEndowmentInsurance"],
|
||||
fieldcol: 14,
|
||||
label: "税延养老保险",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["otherDeduction"],
|
||||
fieldcol: 14,
|
||||
label: "其他",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["deductionAllowedDonation"],
|
||||
fieldcol: 14,
|
||||
label: "准予扣除的捐赠额",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["privatePension"],
|
||||
fieldcol: 14,
|
||||
label: "个人养老金",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
}
|
||||
],
|
||||
|
|
|
|||
|
|
@ -11,18 +11,18 @@
|
|||
}
|
||||
|
||||
.linkWapper {
|
||||
a {
|
||||
color: #4d7ad8;
|
||||
margin-right: 8px;
|
||||
}
|
||||
//a {
|
||||
// color: #4d7ad8;
|
||||
// margin-right: 8px;
|
||||
//}
|
||||
|
||||
i {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
//a:hover {
|
||||
// text-decoration: none;
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,66 +2,73 @@ export const condition = [
|
|||
{
|
||||
items: [
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["childrenEducation"],
|
||||
fieldcol: 14,
|
||||
label: "子女教育",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["continuingEducation"],
|
||||
fieldcol: 14,
|
||||
label: "继续教育",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["housingLoanInterest"],
|
||||
fieldcol: 14,
|
||||
label: "住房贷款利息",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["housingRent"],
|
||||
fieldcol: 14,
|
||||
label: "住房租金",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["supportingElder"],
|
||||
fieldcol: 14,
|
||||
label: "赡养老人",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["seriousIllnessTreatment"],
|
||||
fieldcol: 14,
|
||||
label: "大病医疗",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["infantCare"],
|
||||
fieldcol: 14,
|
||||
label: "婴幼儿照护",
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
precision: 2,
|
||||
viewAttr: 2
|
||||
}
|
||||
],
|
||||
|
|
|
|||
|
|
@ -222,13 +222,13 @@
|
|||
|
||||
.mySalaryBenefitsWrapper {
|
||||
.linkWapper {
|
||||
a {
|
||||
color: #4d7ad8;
|
||||
}
|
||||
//a {
|
||||
// color: #4d7ad8;
|
||||
//}
|
||||
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
//a:hover {
|
||||
// text-decoration: none;
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -304,7 +304,7 @@ export default class SlideBaseForm extends React.Component {
|
|||
<WeaCheckbox
|
||||
value={true}
|
||||
viewAttr={1}
|
||||
content="【入职日期≤薪资周期止】且【离职日期≥薪资周期起】"
|
||||
content="【起薪日期≤薪资周期止】且【最后发薪日期≥薪资周期起】"
|
||||
/>
|
||||
</Col>
|
||||
</Row>
|
||||
|
|
|
|||
|
|
@ -184,7 +184,7 @@ class LedgerBaseSetting extends Component {
|
|||
type === "CHECKBOX" ?
|
||||
<React.Fragment>
|
||||
<WeaCheckbox value={true} viewAttr={1}
|
||||
content="【入职日期≤薪资周期止】且【离职日期≥薪资周期起】"/>
|
||||
content="【起薪日期≤薪资周期止】且【最后发薪日期≥薪资周期起】"/>
|
||||
<WeaHelpfulTip width={200} title="提示:最后发薪日期为空,默认为无穷大" placement="topLeft"/>
|
||||
</React.Fragment> :
|
||||
type === "SELECT" ?
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ export default class LedgerSalaryItemPreviewModal extends React.Component {
|
|||
};
|
||||
})
|
||||
};
|
||||
columns.push(columnItem);
|
||||
columnItem.children.length > 0 && columns.push(columnItem);
|
||||
});
|
||||
return { columns };
|
||||
};
|
||||
|
|
|
|||
|
|
@ -38,10 +38,10 @@ class LedgerTable extends Component {
|
|||
}
|
||||
|
||||
componentWillReceiveProps(nextProps, nextContext) {
|
||||
if (nextProps.doSearch !== this.props.doSearch) this.getLedgerList({current: 1});
|
||||
if (nextProps.doSearch !== this.props.doSearch) this.getLedgerList({ current: 1 });
|
||||
}
|
||||
|
||||
getLedgerList = (extra={}) => {
|
||||
getLedgerList = (extra = {}) => {
|
||||
const { name } = this.props;
|
||||
const { pageInfo } = this.state;
|
||||
const payload = { name, ...pageInfo, ...extra };
|
||||
|
|
@ -74,17 +74,22 @@ class LedgerTable extends Component {
|
|||
/>;
|
||||
};
|
||||
} else if (dataIndex === "operate") {
|
||||
item.width = 120;
|
||||
item.width = 150;
|
||||
item.render = (text, record) => {
|
||||
return <div className="optWrapper">
|
||||
<a href="javascript:void(0);" className="mr10" onClick={()=> onEditLedger(record)}>{showOperateBtn ? "编辑" : "查看"}</a>
|
||||
<a href="javascript:void(0);" className="mr10"
|
||||
onClick={() => onEditLedger(record)}>{showOperateBtn ? "编辑" : "查看"}</a>
|
||||
{
|
||||
showOperateBtn &&
|
||||
<a href="javascript:void(0);" className="mr10"
|
||||
onClick={() => this.handleMenuClick({ key: "copy" }, record)}>复制</a>
|
||||
}
|
||||
{
|
||||
showOperateBtn &&
|
||||
<Popover
|
||||
overlayClassName="moreIconWrapper"
|
||||
placement="bottomRight"
|
||||
content={<Menu onClick={(e) => this.handleMenuClick(e, record)}>
|
||||
<Menu.Item key="copy">复制</Menu.Item>
|
||||
<Menu.Item key="delete">删除</Menu.Item>
|
||||
</Menu>} title="">
|
||||
<i className="icon-coms-more"/>
|
||||
|
|
|
|||
|
|
@ -9,20 +9,24 @@ import PhoneTemplate from "../payroll/templatePreview/phoneTemplate";
|
|||
import "../payroll/templatePreview/index.less";
|
||||
import * as API from "../../apis/mySalaryBenefits";
|
||||
import { confirmSalaryBill, feedBackSalaryBill, payrollCheckType } from "../../apis/payroll";
|
||||
import "./index.less";
|
||||
import CaptchaModal from "../../components/captchaModal";
|
||||
import PassSetDialog from "./passSetDialog";
|
||||
import { ConfirmBtns } from "../mySalary/mySalaryView";
|
||||
import "./index.less";
|
||||
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
|
||||
const { getLabel } = WeaLocaleProvider;
|
||||
@inject("mySalaryStore")
|
||||
@observer
|
||||
export default class MobilePayroll extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
pwdSetVisible: false,
|
||||
visible: false,
|
||||
captchaVisible: false,
|
||||
authCode: "",
|
||||
notSetting: false,
|
||||
mySalaryBillData: {
|
||||
employeeInformation: {},
|
||||
salaryTemplate: []
|
||||
|
|
@ -51,7 +55,11 @@ export default class MobilePayroll extends React.Component {
|
|||
// if (window.em) {
|
||||
API.isNeedSecondPwdVerify({ mouldCode: "HRM", itemCode: "SALARY" }).then(({ status, isNeedSecondAuth }) => {
|
||||
if (status && isNeedSecondAuth) {
|
||||
this.setState({ visible: true });
|
||||
this.setState({ visible: true }, () => {
|
||||
API.getSecondAuthForm({ mouldCode: "HRM", itemCode: "SALARY" }).then(({ status, notSetting }) => {
|
||||
this.setState({ notSetting });
|
||||
});
|
||||
});
|
||||
} else {
|
||||
this.getMySalaryBill(getQueryString("id"));
|
||||
setInitEmVerify();
|
||||
|
|
@ -136,8 +144,8 @@ export default class MobilePayroll extends React.Component {
|
|||
};
|
||||
|
||||
render() {
|
||||
const { mySalaryStore: { clearLoading } } = this.props;
|
||||
const { mySalaryBillData, visible, captchaVisible } = this.state;
|
||||
const { mySalaryStore: { clearLoading, pwdForm } } = this.props;
|
||||
const { mySalaryBillData, visible, captchaVisible, notSetting, pwdSetVisible } = this.state;
|
||||
const type = getQueryString("type");
|
||||
const employeeInformation = mySalaryBillData.employeeInformation ? mySalaryBillData.employeeInformation : {};
|
||||
const salaryGroups = mySalaryBillData.salaryGroups ? mySalaryBillData.salaryGroups : [];
|
||||
|
|
@ -156,9 +164,17 @@ export default class MobilePayroll extends React.Component {
|
|||
]}
|
||||
>
|
||||
<WeaError tipPosition="bottom" ref="weaError" error="此项必填">
|
||||
<WeaInput value={this.state.authCode} onChange={authCode => this.setState({ authCode })}/>
|
||||
<WeaInput value={this.state.authCode} viewAttr={3} onChange={authCode => this.setState({ authCode })}/>
|
||||
</WeaError>
|
||||
{
|
||||
notSetting &&
|
||||
<div style={{ clear: "both", paddingTop: 10 }} >
|
||||
{getLabel("514970", "您还未设置二次验证密码,点击")}
|
||||
<a href="javascript:void(0);" onClick={() => this.setState({ pwdSetVisible: true })}>{getLabel("30747", "设置")}</a>
|
||||
</div>
|
||||
}
|
||||
</WeaDialog>
|
||||
<PassSetDialog form={pwdForm} visible={pwdSetVisible} onCancel={() => this.setState({ pwdSetVisible: false })}/>
|
||||
{
|
||||
type === "phone" ?
|
||||
<Authority ecId={`${this && this.props && this.props.ecId || ""}_Authority@lulowc`}
|
||||
|
|
|
|||
|
|
@ -15,3 +15,27 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
.pwdSetWrapper {
|
||||
.ant-modal-content {
|
||||
width: 80vw !important;
|
||||
|
||||
.wea-dialog-body, .wea-new-scroll {
|
||||
height: 195px !important;
|
||||
|
||||
.wea-search-group .wea-form-cell {
|
||||
padding: 0 !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.validatecodeWrapper {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.wea-input-normal {
|
||||
width: 50% !important;
|
||||
margin-right: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,141 @@
|
|||
/*
|
||||
* Author: 黎永顺
|
||||
* name: 二次验证密码设置
|
||||
* Description:
|
||||
* Date: 2023/7/7
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { WeaDialog, WeaFormItem, WeaLocaleProvider, WeaSearchGroup } from "ecCom";
|
||||
import { WeaSwitch } from "comsMobx";
|
||||
import { condition, loginCondition } from "./pwdCondtion";
|
||||
import { Button, message } from "antd";
|
||||
import { RSAEcrypt } from "../../util/RSAUtil";
|
||||
import { checkPassword, saveSecondaryPwd } from "../../apis/mySalaryBenefits";
|
||||
import "./index.less";
|
||||
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
|
||||
class PassSetDialog extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
src: (window.ecologyContentPath || "") + "/weaver/weaver.file.MakeValidateCode?notneedvalidate=1&isView=1&validatetype=0&validatenum=4",
|
||||
num: 0,
|
||||
isPassLoginPassword: false
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.props.form.initFormFields(loginCondition);
|
||||
this.props.form.initFormFields(condition);
|
||||
}
|
||||
|
||||
getSearchs = (form, condition) => {
|
||||
const { isFormInit } = form, formParams = form.getFormParams();
|
||||
let group = [];
|
||||
isFormInit && condition && condition.map(c => {
|
||||
let items = [];
|
||||
c.items.map(fields => {
|
||||
items.push({
|
||||
com: (
|
||||
<WeaFormItem
|
||||
label={`${fields.label}`} labelCol={{ span: `${fields.labelcol}` }}
|
||||
wrapperCol={{ span: `${fields.fieldcol}` }} error={form.getError(fields)}
|
||||
tipPosition="bottom"
|
||||
>
|
||||
{
|
||||
fields.domkey[0] === "validatecode" ?
|
||||
<div className="validatecodeWrapper">
|
||||
<WeaSwitch fieldConfig={fields} form={form} formParams={formParams}/>
|
||||
<img
|
||||
style={{ height: 30, cursor: "pointer" }}
|
||||
src={this.state.src}
|
||||
onClick={() => {
|
||||
this.setState({ num: this.state.num + 1 }, () => {
|
||||
this.setState({ src: `${window.ecologyContentPath || ""}/weaver/weaver.file.MakeValidateCode?notneedvalidate=1&isView=1&validatetype=0&validatenum=4&seriesnum_=${this.state.num}` });
|
||||
});
|
||||
}}
|
||||
alt=""
|
||||
/>
|
||||
</div>
|
||||
: <WeaSwitch fieldConfig={fields} form={form} formParams={formParams}/>
|
||||
}
|
||||
</WeaFormItem>),
|
||||
colSpan: 1
|
||||
});
|
||||
});
|
||||
group.push(
|
||||
<WeaSearchGroup
|
||||
col={1} needTigger={false} title={c.title}
|
||||
showGroup={c.defaultshow} items={items}
|
||||
/>);
|
||||
});
|
||||
return group;
|
||||
};
|
||||
saveSecondaryPassword = () => {
|
||||
const { isPassLoginPassword } = this.state;
|
||||
const { form } = this.props;
|
||||
const { secondaryPwd1, secondaryPwd2, validatecode, password } = form.getFormParams();
|
||||
if (isPassLoginPassword) {
|
||||
if (!validatecode || !secondaryPwd1 || !secondaryPwd2) {
|
||||
message.error(getLabel(518702, "必要信息不完整,红色*为必填项!"));
|
||||
return;
|
||||
}
|
||||
if (secondaryPwd1 !== secondaryPwd2) {
|
||||
message.error(getLabel("504376", "密码确认不正确!"));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if (!password) {
|
||||
message.error(getLabel(518702, "必要信息不完整,红色*为必填项!"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
const params = isPassLoginPassword ? { secondaryPwd1, secondaryPwd2 } : { password };
|
||||
RSAEcrypt("1", params).then(RSAParam => {
|
||||
isPassLoginPassword ?
|
||||
saveSecondaryPwd({ ...RSAParam, validatecode }).then(({ sign, message: msg }) => {
|
||||
if (sign === "1") {
|
||||
message.success(msg);
|
||||
this.props.onCancel();
|
||||
form.resetForm();
|
||||
} else {
|
||||
message.warning(msg);
|
||||
this.setState({ num: this.state.num + 1 }, () => {
|
||||
this.setState({ src: `${window.ecologyContentPath || ""}/weaver/weaver.file.MakeValidateCode?notneedvalidate=1&isView=1&validatetype=0&validatenum=4&seriesnum_=${this.state.num}` });
|
||||
});
|
||||
}
|
||||
}) :
|
||||
checkPassword({ ...RSAParam }).then(({ result }) => {
|
||||
if (result) {
|
||||
this.setState({ isPassLoginPassword: true });
|
||||
form.resetForm();
|
||||
} else {
|
||||
message.error(getLabel(504343, "登录密码错误"));
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
render() {
|
||||
const { isPassLoginPassword } = this.state;
|
||||
return (
|
||||
<WeaDialog
|
||||
onCancel={this.props.onCancel}
|
||||
title={isPassLoginPassword ? getLabel(504332, "二次验证密码设置") : getLabel(504331, "请先输入登录密码")}
|
||||
visible={this.props.visible}
|
||||
initLoadCss className="pwdSetWrapper" hasScroll buttons={[
|
||||
<Button type="primary" size="small" onClick={this.saveSecondaryPassword}>{getLabel(537558, "保存")}</Button>
|
||||
]}
|
||||
>
|
||||
{
|
||||
isPassLoginPassword ?
|
||||
this.getSearchs(this.props.form, condition) :
|
||||
this.getSearchs(this.props.form, loginCondition)
|
||||
}
|
||||
</WeaDialog>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default PassSetDialog;
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
import { WeaLocaleProvider } from "ecCom";
|
||||
|
||||
const { getLabel } = WeaLocaleProvider;
|
||||
export const loginCondition = [
|
||||
{
|
||||
items: [
|
||||
{
|
||||
colSpan: 1,
|
||||
checkbox: false,
|
||||
checkboxValue: false,
|
||||
conditionType: "INPUT",
|
||||
domkey: ["password"],
|
||||
fieldcol: 18,
|
||||
label: getLabel(388431, "登录密码"),
|
||||
labelcol: 6,
|
||||
detailtype: 3,
|
||||
rules: "required|string",
|
||||
type: "password",
|
||||
viewAttr: 3
|
||||
}
|
||||
],
|
||||
title: "",
|
||||
defaultshow: true
|
||||
}
|
||||
];
|
||||
export const condition = [
|
||||
{
|
||||
items: [
|
||||
{
|
||||
colSpan: 1,
|
||||
checkbox: false,
|
||||
checkboxValue: false,
|
||||
conditionType: "INPUT",
|
||||
domkey: ["secondaryPwd1"],
|
||||
fieldcol: 18,
|
||||
label: getLabel(409, "密码"),
|
||||
labelcol: 6,
|
||||
detailtype: 3,
|
||||
rules: "required|string",
|
||||
viewAttr: 3,
|
||||
type: "password"
|
||||
},
|
||||
{
|
||||
colSpan: 1,
|
||||
conditionType: "INPUT",
|
||||
domkey: ["secondaryPwd2"],
|
||||
fieldcol: 18,
|
||||
label: getLabel(511112, "确认密码"),
|
||||
labelcol: 6,
|
||||
rules: "required|string",
|
||||
viewAttr: 3,
|
||||
type: "password"
|
||||
},
|
||||
{
|
||||
colSpan: 1,
|
||||
conditionType: "INPUT",
|
||||
domkey: ["validatecode"],
|
||||
fieldcol: 18,
|
||||
label: getLabel(511113, "验证码"),
|
||||
labelcol: 6,
|
||||
value: "",
|
||||
rules: "required|string",
|
||||
viewAttr: 3
|
||||
}
|
||||
],
|
||||
title: "",
|
||||
defaultshow: true
|
||||
}
|
||||
];
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
import React from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { message, Tag } from "antd";
|
||||
import { Dropdown, Menu, message, Tag } from "antd";
|
||||
import moment from "moment";
|
||||
import CustomPaginationTable from "../../components/customPaginationTable";
|
||||
import "../calculate/index.less";
|
||||
|
|
@ -88,6 +88,7 @@ export default class SalarySendList extends React.Component {
|
|||
{
|
||||
title: "操作",
|
||||
key: "operate",
|
||||
width: 150,
|
||||
render: (text, record) => {
|
||||
const { sendNum, sendTotal, salaryAcctType, haveBackCalc, canSeeDetail } = record;
|
||||
//显示发放
|
||||
|
|
@ -103,7 +104,14 @@ export default class SalarySendList extends React.Component {
|
|||
}
|
||||
{
|
||||
sendNum !== sendTotal && !showGrant &&
|
||||
<a href="javascript:void(0);" onClick={() => this.handleUpdateTemplate(record)}>更新模板</a>
|
||||
<Dropdown
|
||||
overlay={
|
||||
<Menu onClick={() => this.handleUpdateTemplate(record)}>
|
||||
<Menu.Item key="delete">更新模板</Menu.Item>
|
||||
</Menu>
|
||||
}>
|
||||
<i className="icon-coms-more more"/>
|
||||
</Dropdown>
|
||||
}
|
||||
</React.Fragment>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -6,13 +6,17 @@ import {
|
|||
WeaInputNumber,
|
||||
WeaLocaleProvider,
|
||||
WeaSearchGroup,
|
||||
WeaSelect
|
||||
WeaSelect,
|
||||
WeaTimePicker
|
||||
} from "ecCom";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { getReplenishRuleSetOptions } from "../../../apis/payroll";
|
||||
import { commonEnumList } from "../../../apis/payrollFiles";
|
||||
import moment from "moment";
|
||||
import { toJS } from "mobx";
|
||||
import "./index.less";
|
||||
|
||||
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
@inject("payrollStore")
|
||||
@observer
|
||||
|
|
@ -23,6 +27,7 @@ export default class BaseInformForm extends React.Component {
|
|||
inited: false,
|
||||
options: [],
|
||||
replenishRuleOptions: [],
|
||||
salaryMonthOptions: [],
|
||||
request: {}
|
||||
};
|
||||
}
|
||||
|
|
@ -31,6 +36,7 @@ export default class BaseInformForm extends React.Component {
|
|||
const { payrollStore } = this.props;
|
||||
const { getPayrollBaseForm } = payrollStore;
|
||||
const templateBaseData = window.localStorage.getItem("template-basedata") || "{}";
|
||||
this.commonEnumList();
|
||||
getPayrollBaseForm(this.props.id).then(data => {
|
||||
this.setState(
|
||||
{
|
||||
|
|
@ -43,7 +49,9 @@ export default class BaseInformForm extends React.Component {
|
|||
...data.templateBaseData,
|
||||
msgStatus: !this.props.id ? "1" : data.templateBaseData.msgStatus,
|
||||
reissueRule: data.templateBaseData.replenishRule ? "1" : "0",
|
||||
...JSON.parse(templateBaseData)
|
||||
...JSON.parse(templateBaseData),
|
||||
sendEmail: "",
|
||||
autoSendStatus: !_.isNil(data.templateBaseData.autoSendStatus) ? data.templateBaseData.autoSendStatus : false
|
||||
}
|
||||
}, () => {
|
||||
this.props.onChange && this.props.onChange(this.state.request);
|
||||
|
|
@ -78,12 +86,23 @@ export default class BaseInformForm extends React.Component {
|
|||
}
|
||||
});
|
||||
};
|
||||
commonEnumList = () => {
|
||||
commonEnumList({ enumClass: "com.engine.salary.enums.salarysend.SalaryAutoSendCycleTypeEnum" })
|
||||
.then(({ status, data }) => {
|
||||
if (status && !_.isEmpty(data)) {
|
||||
this.setState({
|
||||
salaryMonthOptions: _.map(data, it => ({ key: it.value.toString(), showname: it.defaultLabel }))
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
render() {
|
||||
const { request, options, replenishRuleOptions } = this.state;
|
||||
const { request, options, replenishRuleOptions, salaryMonthOptions } = this.state;
|
||||
const {
|
||||
salarySob, name, description, replenishName, replenishRule, reissueRule, msgStatus, emailStatus,
|
||||
ackFeedbackStatus, autoAckDays, feedbackUrl
|
||||
ackFeedbackStatus, autoAckDays, feedbackUrl, autoSendStatus, autoSendDayOfMonth, autoSendTimeOfDay,
|
||||
autoSendCycleType
|
||||
} = request;
|
||||
|
||||
return (
|
||||
|
|
@ -175,6 +194,31 @@ export default class BaseInformForm extends React.Component {
|
|||
<WeaCheckbox value={emailStatus ? "1" : "0"} display="switch"
|
||||
onChange={value => this.handleChange({ emailStatus: value === "1" })}/>
|
||||
</WeaFormItem>
|
||||
<WeaFormItem label={getLabel(111, "定时发送")} labelCol={{ span: 6 }} wrapperCol={{ span: 18 }}>
|
||||
<WeaCheckbox value={autoSendStatus ? "1" : "0"} display="switch"
|
||||
onChange={value => {
|
||||
this.handleChange({
|
||||
autoSendStatus: value === "1",
|
||||
autoSendDayOfMonth: value === "1" ? "1" : null,
|
||||
autoSendTimeOfDay: value === "1" ? "09:00" : null,
|
||||
autoSendCycleType: value === "1" ? 1 : null,
|
||||
});
|
||||
}}/>
|
||||
</WeaFormItem>
|
||||
{
|
||||
autoSendStatus &&
|
||||
<WeaFormItem label={getLabel(111, "发送时间")} labelCol={{ span: 6 }} wrapperCol={{ span: 18 }}>
|
||||
<SendTimeComp
|
||||
salaryMonthOptions={salaryMonthOptions}
|
||||
value={{
|
||||
autoSendDayOfMonth,
|
||||
autoSendTimeOfDay,
|
||||
autoSendCycleType
|
||||
}}
|
||||
onChange={this.handleChange}
|
||||
/>
|
||||
</WeaFormItem>
|
||||
}
|
||||
</WeaSearchGroup>
|
||||
<WeaSearchGroup title={getLabel(111, "工资单确认反馈设置")} showGroup needTigger col={1}
|
||||
className="payrollBaseInfoWrapper">
|
||||
|
|
@ -208,3 +252,44 @@ export default class BaseInformForm extends React.Component {
|
|||
);
|
||||
}
|
||||
}
|
||||
|
||||
const SendTimeComp = (props) => {
|
||||
const { value, onChange, salaryMonthOptions } = props;
|
||||
const { autoSendDayOfMonth, autoSendTimeOfDay, autoSendCycleType } = value;
|
||||
|
||||
const handleChangeSendtime = (key, val) => {
|
||||
onChange({ autoSendDayOfMonth, autoSendTimeOfDay, autoSendCycleType, [key]: val });
|
||||
};
|
||||
return <div className="customTimeCompWrapper">
|
||||
<div>
|
||||
<span>{getLabel(542604, "薪资所属月")}</span>
|
||||
<WeaSelect
|
||||
value={autoSendCycleType.toString()}
|
||||
options={salaryMonthOptions}
|
||||
onChange={v => handleChangeSendtime("autoSendCycleType", Number(v))}
|
||||
/>
|
||||
<WeaSelect
|
||||
value={!_.isNil(autoSendDayOfMonth) ? autoSendDayOfMonth : "1"}
|
||||
options={_.map(getDay(autoSendCycleType), item => ({ key: item, showname: item }))}
|
||||
onChange={v => handleChangeSendtime("autoSendDayOfMonth", v)}
|
||||
/>
|
||||
<span>{getLabel(16992, "号")}</span>
|
||||
</div>
|
||||
<WeaTimePicker value={!_.isNil(autoSendTimeOfDay) ? autoSendTimeOfDay : "09:00"} size="small"
|
||||
onChange={v => handleChangeSendtime("autoSendTimeOfDay", v)}/>
|
||||
</div>;
|
||||
};
|
||||
|
||||
const getDay = (num = 1) => {
|
||||
let days = [];
|
||||
let day = getDaysInMonth(moment().year(), moment().month() + num);
|
||||
for (let i = 1; i <= day; i++) {
|
||||
days.push(i);
|
||||
}
|
||||
return days;
|
||||
};
|
||||
const getDaysInMonth = (year, month) => {
|
||||
month = parseInt(month, 10);
|
||||
let d = new Date(year, month, 0);
|
||||
return d.getDate();
|
||||
};
|
||||
|
|
|
|||
|
|
@ -234,4 +234,20 @@
|
|||
border-bottom: 1px solid #e5e5e5;
|
||||
}
|
||||
}
|
||||
|
||||
.customTimeCompWrapper {
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
|
||||
& > div {
|
||||
margin-right: 10px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.wea-select {
|
||||
width: 80px;
|
||||
margin: 0 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ import React from "react";
|
|||
import { inject, observer } from "mobx-react";
|
||||
import { WeaLocaleProvider, WeaTable } from "ecCom";
|
||||
import { toJS } from "mobx";
|
||||
import { Radio, Spin } from "antd";
|
||||
import { Dropdown, Menu, Radio, Spin } from "antd";
|
||||
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
@inject("payrollStore")
|
||||
|
|
@ -93,8 +93,14 @@ export default class TemplateSettingList extends React.Component {
|
|||
onClick={() => this.onOperatesClick(record, "0")}>{getLabel(501169, "编辑")}</a>
|
||||
<a href="javascript:void(0);" style={{ marginRight: 10 }}
|
||||
onClick={() => this.onOperatesClick(record, "1")}>{getLabel(77, "复制")}</a>
|
||||
<a href="javascript:void(0);"
|
||||
onClick={() => this.onOperatesClick(record, "2")}>{getLabel(535052, "删除")}</a>
|
||||
<Dropdown
|
||||
overlay={
|
||||
<Menu onClick={() => this.onOperatesClick(record, "2")}>
|
||||
<Menu.Item key="delete">{getLabel(535052, "删除")}</Menu.Item>
|
||||
</Menu>
|
||||
}>
|
||||
<i className="icon-coms-more more"/>
|
||||
</Dropdown>
|
||||
</React.Fragment>;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ class WatermarkPreview extends Component {
|
|||
salaryBillBaseSetPreviewWaterMark = (payload) => {
|
||||
salaryBillBaseSetPreviewWaterMark(payload).then(({ status, data }) => {
|
||||
if (status) {
|
||||
const { wmHeight: height, wmWidth: width, wmNoTransparent, wmRotate } = payload;
|
||||
const { wmSetting: { wmHeight: height, wmWidth: width, wmNoTransparent, wmRotate } } = payload;
|
||||
watermark({
|
||||
text: data,
|
||||
src: "",
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ import {
|
|||
WeaFormItem,
|
||||
WeaHelpfulTip,
|
||||
WeaInput,
|
||||
WeaLocaleProvider,
|
||||
WeaPopoverHrm,
|
||||
WeaSearchGroup,
|
||||
WeaSelect,
|
||||
|
|
@ -32,6 +33,7 @@ import SalaryFileViewSlide from "../salaryFile/saralyFileViewSlide";
|
|||
import ChangeSalaryModal from "../salaryFile/changeSalaryModal";
|
||||
import "./index.less";
|
||||
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
const WeaTableComx = WeaTableNew.WeaTable;
|
||||
|
||||
@inject("payrollFilesStore", "taxAgentStore", "salaryFileStore")
|
||||
|
|
@ -68,7 +70,7 @@ class Index extends Component {
|
|||
workcode: "",
|
||||
departmentIds: "",
|
||||
positionIds: "",
|
||||
userstatus: "",
|
||||
statuses: "",
|
||||
// archiveStatus: "EFFICIENT",
|
||||
taxAgentId: "",
|
||||
subcompanyIds: ""
|
||||
|
|
@ -83,7 +85,8 @@ class Index extends Component {
|
|||
paysetParams: {
|
||||
payStartDate: "",
|
||||
payEndDate: ""
|
||||
}
|
||||
},
|
||||
salaryArchiveDelete: "" //待定薪、停薪员工 是否允许删除薪资档案 0: 否, 1: 是
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -125,9 +128,9 @@ class Index extends Component {
|
|||
};
|
||||
Select = (value, key) => {
|
||||
const { taxAgentStore } = this.props;
|
||||
const { userstatus, archiveStatus, taxAgentId } = this.state.searchItemsValue;
|
||||
const { statuses, archiveStatus, taxAgentId } = this.state.searchItemsValue;
|
||||
const { archiveStatusList, userStatusList } = this.state;
|
||||
const { taxAgentAdminOption } = taxAgentStore;
|
||||
const { taxAgentOption } = taxAgentStore;
|
||||
return (
|
||||
<WeaFormItem
|
||||
label={value}
|
||||
|
|
@ -135,11 +138,12 @@ class Index extends Component {
|
|||
wrapperCol={{ span: 18 }}
|
||||
>
|
||||
<WeaSelect
|
||||
value={key === "userstatus" ? userstatus : key === "taxAgentId" ? taxAgentId : archiveStatus}
|
||||
options={key === "userstatus" ? userStatusList : key === "taxAgentId" ? [{
|
||||
multiple={key === "statuses"}
|
||||
value={key === "statuses" ? statuses : key === "taxAgentId" ? taxAgentId : archiveStatus}
|
||||
options={key === "statuses" ? userStatusList : key === "taxAgentId" ? [{
|
||||
key: "",
|
||||
showname: ""
|
||||
}, ...taxAgentAdminOption] : archiveStatusList}
|
||||
}, ...taxAgentOption] : archiveStatusList}
|
||||
onChange={(val) => this.setState({ searchItemsValue: { ...this.state.searchItemsValue, [key]: val } })}/>
|
||||
</WeaFormItem>
|
||||
);
|
||||
|
|
@ -147,8 +151,8 @@ class Index extends Component {
|
|||
|
||||
componentDidMount() {
|
||||
const { taxAgentStore } = this.props;
|
||||
const { getTaxAgentSelectListAsAdmin } = taxAgentStore;
|
||||
getTaxAgentSelectListAsAdmin();
|
||||
const { fetchTaxAgentOption } = taxAgentStore;
|
||||
fetchTaxAgentOption();
|
||||
this.queryTabTotal();
|
||||
this.queryList("/api/bs/hrmsalary/salaryArchive/pendingList");
|
||||
const init = this.init();
|
||||
|
|
@ -163,7 +167,7 @@ class Index extends Component {
|
|||
const { payrollFilesStore: { tableStore }, taxAgentStore: { showOperateBtn } } = this.props;
|
||||
const columns = _.map(_.filter(toJS(tableStore.columns), (item) => item.display === "true"), (it, idx) => ({
|
||||
dataIndex: it.dataIndex,
|
||||
width: (it.dataIndex === "username" || it.dataIndex === "operate") ? 120 : it.dataIndex === "taxAgentName" ? 176 : 150,
|
||||
width: (it.dataIndex === "username" || it.dataIndex === "operate") ? 150 : it.dataIndex === "taxAgentName" ? 176 : 150,
|
||||
title: it.title, align: "left",
|
||||
fixed: (idx === 0 || idx === 1 || idx === 2) ? "left" : it.dataIndex === "operate" ? "right" : "",
|
||||
ellipsis: true
|
||||
|
|
@ -197,14 +201,16 @@ class Index extends Component {
|
|||
postMessageToChild = (payload) => {
|
||||
const childFrameObj = document.getElementById("atdTable");
|
||||
const { dataSource, columns, showSum, pageInfo, showOperateBtn, selectedKey, selectedRowKeys } = payload;
|
||||
const { salaryArchiveDelete } = this.state;
|
||||
childFrameObj && childFrameObj.contentWindow.postMessage(JSON.stringify({
|
||||
dataSource, columns, showSum, pageInfo, showOperateBtn, selectedKey, selectedRowKeys
|
||||
dataSource, columns, showSum, pageInfo, showOperateBtn, selectedKey, selectedRowKeys, salaryArchiveDelete
|
||||
}), "*");
|
||||
};
|
||||
|
||||
init = async () => {
|
||||
const { data: archiveStatusList } = await this.commonEnumList({ enumClass: "com.engine.salary.enums.salaryarchive.ArchiveStatusEnum" });
|
||||
const { data: userStatusList } = await this.commonEnumList({ enumClass: "com.engine.salary.enums.UserStatusEnum" });
|
||||
const { data: salaryArchiveDelete } = await this.salaryArchiveDelete();
|
||||
this.setState({
|
||||
archiveStatusList: [{
|
||||
key: "",
|
||||
|
|
@ -213,13 +219,11 @@ class Index extends Component {
|
|||
key: String(it.value),
|
||||
showname: it.defaultLabel
|
||||
}))],
|
||||
userStatusList: [{
|
||||
key: "",
|
||||
showname: ""
|
||||
}, ..._.map(userStatusList, it => ({
|
||||
userStatusList: [..._.map(userStatusList, it => ({
|
||||
key: String(it.value),
|
||||
showname: it.defaultLabel
|
||||
}))]
|
||||
}))],
|
||||
salaryArchiveDelete
|
||||
}, () =>
|
||||
this.getImportTypes());
|
||||
};
|
||||
|
|
@ -290,6 +294,9 @@ class Index extends Component {
|
|||
commonEnumList = (params) => {
|
||||
return API.commonEnumList(params);
|
||||
};
|
||||
salaryArchiveDelete = () => {
|
||||
return API.salaryArchiveDelete();
|
||||
};
|
||||
getImportTypes = () => {
|
||||
API.getImportTypes().then(({ data, status }) => {
|
||||
if (status) {
|
||||
|
|
@ -498,7 +505,7 @@ class Index extends Component {
|
|||
const { payrollFilesStore: { tableStore }, taxAgentStore: { showOperateBtn } } = this.props;
|
||||
const columns = _.map(_.filter(toJS(tableStore.columns), (item) => item.display === "true"), (it, idx) => ({
|
||||
dataIndex: it.dataIndex,
|
||||
width: (it.dataIndex === "username" || it.dataIndex === "operate") ? 120 : it.dataIndex === "taxAgentName" ? 176 : 150,
|
||||
width: (it.dataIndex === "username" || it.dataIndex === "operate") ? 150 : it.dataIndex === "taxAgentName" ? 176 : 150,
|
||||
title: it.title, align: "left",
|
||||
fixed: (idx === 0 || idx === 1 || idx === 2) ? "left" : it.dataIndex === "operate" ? "right" : "",
|
||||
ellipsis: true
|
||||
|
|
@ -548,6 +555,21 @@ class Index extends Component {
|
|||
this.deleteSuspendTodo([id]);
|
||||
} else if (key === "view") {
|
||||
this.handleEdit(id);
|
||||
} else if (key === "deleteAchives") {
|
||||
Modal.confirm({
|
||||
title: getLabel(131329, "信息确认"),
|
||||
content: getLabel(388758, "确认要删除吗?"),
|
||||
onOk: () => {
|
||||
API.deleteSalaryArchive([id]).then(({ status, errormsg }) => {
|
||||
if (status) {
|
||||
message.success(getLabel(30700, "操作成功"));
|
||||
this.query();
|
||||
} else {
|
||||
message.error(errormsg || getLabel(30651, "操作失败"));
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
// 查看 Slide 头部操作按钮
|
||||
|
|
@ -666,7 +688,7 @@ class Index extends Component {
|
|||
{ com: this.Browser("分部", "subcompanyIds") },
|
||||
{ com: this.Browser("部门", "departmentIds") },
|
||||
{ com: this.Browser("岗位", "positionIds") },
|
||||
{ com: this.Select("人员状态", "userstatus") },
|
||||
{ com: this.Select("人员状态", "statuses") },
|
||||
// { com: this.Select("档案状态", "archiveStatus") },
|
||||
{ com: this.Select("个税扣缴义务人", "taxAgentId") },
|
||||
{ com: this.Input("工号", "workcode") }
|
||||
|
|
@ -691,7 +713,7 @@ class Index extends Component {
|
|||
workcode: "",
|
||||
departmentIds: "",
|
||||
positionIds: "",
|
||||
userstatus: "",
|
||||
statuses: "",
|
||||
archiveStatus: ""
|
||||
}
|
||||
})}> 重置 </Button>,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,451 @@
|
|||
import { WeaLocaleProvider } from "ecCom";
|
||||
import { format_with_regex } from "../../../util";
|
||||
|
||||
const { getLabel } = WeaLocaleProvider;
|
||||
export const condition = [
|
||||
{
|
||||
items: [
|
||||
{
|
||||
colSpan: 2,
|
||||
checkbox: false,
|
||||
checkboxValue: false,
|
||||
conditionType: "SELECT",
|
||||
domkey: ["taxAgent"],
|
||||
fieldcol: 18,
|
||||
label: getLabel(111, "个税扣缴义务人"),
|
||||
labelcol: 6,
|
||||
options: [],
|
||||
multiple: true,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
browserConditionParam: {
|
||||
completeParams: {},
|
||||
conditionDataParams: {},
|
||||
dataParams: {},
|
||||
destDataParams: {},
|
||||
hasAddBtn: false,
|
||||
hasAdvanceSerach: true,
|
||||
idSeparator: ",",
|
||||
isAutoComplete: 1,
|
||||
isDetail: 0,
|
||||
isMultCheckbox: false,
|
||||
isSingle: false,
|
||||
linkUrl: "",
|
||||
pageSize: 10,
|
||||
quickSearchName: "",
|
||||
replaceDatas: [],
|
||||
title: getLabel(111, "分部"),
|
||||
type: "164",
|
||||
viewAttr: 2
|
||||
},
|
||||
colSpan: 2,
|
||||
conditionType: "BROWSER",
|
||||
domkey: ["subCompany"],
|
||||
fieldcol: 18,
|
||||
isQuickSearch: false,
|
||||
label: getLabel(111, "分部"),
|
||||
labelcol: 6,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
browserConditionParam: {
|
||||
completeParams: {},
|
||||
conditionDataParams: {},
|
||||
dataParams: {},
|
||||
destDataParams: {},
|
||||
hasAddBtn: false,
|
||||
hasAdvanceSerach: true,
|
||||
idSeparator: ",",
|
||||
isAutoComplete: 1,
|
||||
isDetail: 0,
|
||||
isMultCheckbox: false,
|
||||
isSingle: false,
|
||||
linkUrl: "",
|
||||
pageSize: 10,
|
||||
quickSearchName: "",
|
||||
replaceDatas: [],
|
||||
title: getLabel(111, "部门"),
|
||||
type: "57",
|
||||
viewAttr: 2
|
||||
},
|
||||
colSpan: 2,
|
||||
conditionType: "BROWSER",
|
||||
domkey: ["department"],
|
||||
fieldcol: 18,
|
||||
isQuickSearch: false,
|
||||
label: getLabel(111, "部门"),
|
||||
labelcol: 6,
|
||||
viewAttr: 2
|
||||
},
|
||||
// {
|
||||
// browserConditionParam: {
|
||||
// completeParams: {},
|
||||
// conditionDataParams: {},
|
||||
// dataParams: {},
|
||||
// destDataParams: {},
|
||||
// hasAddBtn: false,
|
||||
// hasAdvanceSerach: true,
|
||||
// idSeparator: ",",
|
||||
// isAutoComplete: 1,
|
||||
// isDetail: 0,
|
||||
// isMultCheckbox: false,
|
||||
// isSingle: false,
|
||||
// linkUrl: "",
|
||||
// pageSize: 10,
|
||||
// quickSearchName: "",
|
||||
// replaceDatas: [],
|
||||
// title: getLabel(111, "岗位"),
|
||||
// type: "278",
|
||||
// viewAttr: 2
|
||||
// },
|
||||
// colSpan: 2,
|
||||
// conditionType: "BROWSER",
|
||||
// domkey: ["position"],
|
||||
// fieldcol: 18,
|
||||
// isQuickSearch: false,
|
||||
// label: getLabel(111, "岗位"),
|
||||
// labelcol: 6,
|
||||
// viewAttr: 2
|
||||
// },
|
||||
{
|
||||
browserConditionParam: {
|
||||
completeParams: {},
|
||||
conditionDataParams: {},
|
||||
dataParams: {},
|
||||
destDataParams: {},
|
||||
hasAddBtn: false,
|
||||
hasAdvanceSerach: true,
|
||||
idSeparator: ",",
|
||||
isAutoComplete: 1,
|
||||
isDetail: 0,
|
||||
isMultCheckbox: false,
|
||||
isSingle: false,
|
||||
linkUrl: "",
|
||||
pageSize: 10,
|
||||
quickSearchName: "",
|
||||
replaceDatas: [],
|
||||
title: getLabel(111, "人员"),
|
||||
type: "17",
|
||||
viewAttr: 2
|
||||
},
|
||||
colSpan: 2,
|
||||
conditionType: "BROWSER",
|
||||
domkey: ["employee"],
|
||||
fieldcol: 18,
|
||||
isQuickSearch: false,
|
||||
label: getLabel(111, "人员"),
|
||||
labelcol: 6,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
colSpan: 2,
|
||||
conditionType: "RANGEPICKER",
|
||||
domkey: ["hiredate1", "hiredate2"],
|
||||
fieldcol: 18,
|
||||
label: getLabel(111, "入职日期"),
|
||||
labelcol: 6,
|
||||
viewAttr: 2
|
||||
}
|
||||
],
|
||||
title: "",
|
||||
defaultshow: true
|
||||
}
|
||||
];
|
||||
|
||||
const colorList = [
|
||||
"#709DF7", "#73DEB3", "#7585A2", "#F7C739", "#5FC3E3", "#AEE279", "#FF7F81", "#709DF7", "#73DEB3", "#7585A2", "#F7C739", "#5FC3E3", "#AEE279", "#FF7F81",
|
||||
"#709DF7", "#73DEB3", "#7585A2", "#F7C739", "#5FC3E3", "#AEE279", "#FF7F81", "#709DF7", "#73DEB3", "#7585A2", "#F7C739", "#5FC3E3", "#AEE279", "#FF7F81",
|
||||
"#709DF7", "#73DEB3", "#7585A2", "#F7C739", "#5FC3E3", "#AEE279", "#FF7F81", "#709DF7", "#73DEB3", "#7585A2", "#F7C739", "#5FC3E3", "#AEE279", "#FF7F81"
|
||||
];
|
||||
export const mapBarOptions = (params) => ({
|
||||
tooltip: {
|
||||
trigger: "axis",
|
||||
axisPointer: {
|
||||
type: "shadow"
|
||||
},
|
||||
backgroundColor: "#FFF",
|
||||
borderColor: "#FFF",
|
||||
borderWidth: "1",
|
||||
borderRadius: "5",
|
||||
textStyle: {
|
||||
color: "#333"
|
||||
},
|
||||
formatter: function (params) {
|
||||
let str = params[0].axisValue + "<br>";
|
||||
for (let item of params) {
|
||||
str += `<div>${item.marker}${item.seriesName}<span style='display:inline-block;width: 10px'></span><span style='font-weight: bold'>${format_with_regex(item.value)}</span></div>`;
|
||||
}
|
||||
return str;
|
||||
}
|
||||
},
|
||||
legend: {
|
||||
type: "scroll",
|
||||
icon: "rect",
|
||||
top: "0%",
|
||||
right: "center",
|
||||
itemGap: 10,
|
||||
textStyle: {
|
||||
fontSize: 12,//字体大小
|
||||
color: "#B8B8B8"//字体颜色
|
||||
}
|
||||
},
|
||||
grid: {
|
||||
top: "10%",
|
||||
right: "0%",
|
||||
left: "5%",
|
||||
bottom: "0%",
|
||||
containLabel: true
|
||||
},
|
||||
xAxis: params.xAxis.map((item, index) => {
|
||||
const data = Array(params.xAxis.length).fill("");
|
||||
data[index] = item;
|
||||
return {
|
||||
type: "category",
|
||||
position: "bottom",
|
||||
data: data,
|
||||
axisTick: {
|
||||
alignWithLabel: true,
|
||||
show: false
|
||||
},
|
||||
axisLabel: {
|
||||
interval: 0,
|
||||
margin: 10,
|
||||
textStyle: {
|
||||
fontSize: 11
|
||||
}
|
||||
}
|
||||
};
|
||||
}),
|
||||
yAxis: {
|
||||
name: params.name,
|
||||
type: "value",
|
||||
axisLabel: {
|
||||
padding: [3, 0, 0, 0],
|
||||
formatter: "{value}",
|
||||
color: "#666",
|
||||
textStyle: {
|
||||
fontSize: 11
|
||||
}
|
||||
},
|
||||
nameTextStyle: {
|
||||
color: "#787E95",
|
||||
fontSize: 12
|
||||
},
|
||||
axisLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
color: "transparent"
|
||||
}
|
||||
},
|
||||
axisTick: {
|
||||
show: false // 不显示坐标轴刻度线
|
||||
},
|
||||
splitLine: {
|
||||
show: false,
|
||||
lineStyle: {
|
||||
color: "rgba(66, 192, 255, 0.1)"
|
||||
}
|
||||
}
|
||||
},
|
||||
series: params.data.map(item => {
|
||||
return [...dealBar(_.map(item.data, (it) => parseFloat(it.replace(/,/g, ""))), item.name)];
|
||||
}).reduce((acc, cur) => acc.concat(cur), [])
|
||||
});
|
||||
export const mapLineOptions = (params) => ({
|
||||
tooltip: {
|
||||
// 坐标轴指示器,坐标轴触发有效
|
||||
trigger: "axis",
|
||||
axisPointer: {
|
||||
// 默认为直线,可选为:'line' | 'shadow'
|
||||
type: "line"
|
||||
}
|
||||
},
|
||||
legend: {
|
||||
type: "scroll",
|
||||
icon: "circle",
|
||||
top: "0%",
|
||||
right: "center",
|
||||
itemGap: 20,
|
||||
textStyle: {
|
||||
fontSize: 12,//字体大小
|
||||
color: "#787E95"//字体颜色
|
||||
}
|
||||
},
|
||||
grid: {
|
||||
top: "10%",
|
||||
left: "3%",
|
||||
right: "2%",
|
||||
bottom: "3%",
|
||||
containLabel: true
|
||||
},
|
||||
xAxis: [
|
||||
{
|
||||
type: "category",
|
||||
boundaryGap: false,
|
||||
data: params.xAxis,
|
||||
axisTick: {
|
||||
alignWithLabel: true,
|
||||
show: false
|
||||
},
|
||||
// 修改坐标值样式
|
||||
axisLabel: {
|
||||
color: "#B8B8B8",
|
||||
fontSize: 12,
|
||||
show: true
|
||||
},
|
||||
axisLine: {
|
||||
show: false
|
||||
}
|
||||
}
|
||||
],
|
||||
yAxis: [
|
||||
{
|
||||
type: "value",
|
||||
// 修改坐标值样式
|
||||
axisLabel: {
|
||||
color: "#787E95",
|
||||
fontSize: 14
|
||||
},
|
||||
nameTextStyle: {
|
||||
color: "#787E95",
|
||||
fontSize: 16
|
||||
},
|
||||
// 修改坐标轴线样式
|
||||
axisLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
color: "transparent"
|
||||
}
|
||||
},
|
||||
axisTick: {
|
||||
show: false // 不显示坐标轴刻度线
|
||||
},
|
||||
splitLine: {
|
||||
lineStyle: {
|
||||
color: "rgba(93,126,158,1)"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
series: _.map(params.data, (item, index) => {
|
||||
return {
|
||||
name: item.name,
|
||||
data: _.map(item.data, (it) => it.replace(/,/g, "")),
|
||||
type: "line",
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: function (params) {
|
||||
return colorList[params.seriesIndex] || colorList[Math.floor((Math.random() * colorList.length))];
|
||||
},
|
||||
lineStyle: {
|
||||
color: colorList[index] || colorList[Math.floor((Math.random() * colorList.length))]
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
})
|
||||
});
|
||||
export const mapPieOptions = (params) => ({
|
||||
tooltip: {
|
||||
show: true,
|
||||
formatter: function (params) {
|
||||
let str = params.seriesName + "<br>";
|
||||
str += params.marker + params.name + ":" + format_with_regex(params.value) + "(" + params.percent + "%" + ")" + "<br>";
|
||||
return str;
|
||||
}
|
||||
},
|
||||
legend: {
|
||||
type: "scroll",
|
||||
icon: "rect",
|
||||
top: "0%",
|
||||
left: "2%",
|
||||
orient: "vertical",
|
||||
itemGap: 10,
|
||||
textStyle: {
|
||||
fontSize: 12,//字体大小
|
||||
color: "#787E95"//字体颜色
|
||||
}
|
||||
},
|
||||
series: _.map(params.data, item => {
|
||||
return {
|
||||
name: item.name,
|
||||
data: _.map(item.data, (it) => ({ ...it, value: it.value.replace(/,/g, "") })),
|
||||
type: "pie",
|
||||
radius: "60%",
|
||||
avoidLabelOverlap: true,
|
||||
animation: false,
|
||||
labelLine: {
|
||||
show: true,
|
||||
normal: {
|
||||
length: 5,
|
||||
align: "center"
|
||||
}
|
||||
},
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: function (colors) {
|
||||
return colorList[colors.dataIndex] || colorList[Math.floor((Math.random() * colorList.length))];
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
})
|
||||
});
|
||||
|
||||
const dealBar = (arr, name) => {
|
||||
const bar = [];
|
||||
arr.forEach((item, index) => {
|
||||
const data = [];
|
||||
for (let i = 0; i < index; i++) {
|
||||
data.push("");
|
||||
}
|
||||
if (item) {
|
||||
data.push(item);
|
||||
bar.push({
|
||||
name,
|
||||
type: "bar",
|
||||
xAxisIndex: index,
|
||||
barWidth: 32,
|
||||
data,
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: function (params) {
|
||||
return colorList[params.seriesIndex] || colorList[Math.floor((Math.random() * colorList.length))];
|
||||
}
|
||||
}
|
||||
},
|
||||
label: {
|
||||
show: true,
|
||||
position: "insideBottom",
|
||||
distance: 15,
|
||||
align: "left",
|
||||
verticalAlign: "middle",
|
||||
rotate: "90",
|
||||
formatter: function (params) {
|
||||
if (parseInt(params.value) === 0) {
|
||||
return ``;
|
||||
} else {
|
||||
return [
|
||||
`{a|${format_with_regex(params.value)}} {b|${params.seriesName}}`
|
||||
];
|
||||
}
|
||||
},
|
||||
rich: {
|
||||
a: {
|
||||
fontWeight: "bold",
|
||||
fontSize: 14,
|
||||
color: "#333",
|
||||
marginRight: 10
|
||||
},
|
||||
b: {
|
||||
fontSize: 12,
|
||||
color: "#333"
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
return bar;
|
||||
};
|
||||
|
|
@ -176,6 +176,7 @@ export const mapBarOptions = (params) => ({
|
|||
}
|
||||
},
|
||||
legend: {
|
||||
type: "scroll",
|
||||
icon: "rect",
|
||||
top: "0%",
|
||||
right: "center",
|
||||
|
|
@ -188,8 +189,8 @@ export const mapBarOptions = (params) => ({
|
|||
grid: {
|
||||
top: "10%",
|
||||
right: "0%",
|
||||
left: "2%",
|
||||
bottom: "0%",
|
||||
left: "5%",
|
||||
bottom: "10%",
|
||||
containLabel: true
|
||||
},
|
||||
xAxis: {
|
||||
|
|
@ -209,6 +210,7 @@ export const mapBarOptions = (params) => ({
|
|||
},
|
||||
yAxis: {
|
||||
name: params.name,
|
||||
type: "value",
|
||||
axisLabel: {
|
||||
padding: [3, 0, 0, 0],
|
||||
formatter: "{value}",
|
||||
|
|
@ -241,6 +243,7 @@ export const mapBarOptions = (params) => ({
|
|||
return {
|
||||
name: item.name,
|
||||
barWidth: "32",
|
||||
barGap: "0%",
|
||||
data: _.map(item.data, (it) => it.replace(/,/g, "")),
|
||||
type: "bar",
|
||||
itemStyle: {
|
||||
|
|
@ -280,7 +283,18 @@ export const mapBarOptions = (params) => ({
|
|||
}
|
||||
}
|
||||
};
|
||||
})
|
||||
}),
|
||||
dataZoom: [
|
||||
{
|
||||
type: "inside"
|
||||
|
||||
},
|
||||
{
|
||||
type: "slider",
|
||||
show: true,
|
||||
bottom: 20,
|
||||
}
|
||||
]
|
||||
});
|
||||
export const mapLineOptions = (params) => ({
|
||||
tooltip: {
|
||||
|
|
@ -360,7 +374,7 @@ export const mapLineOptions = (params) => ({
|
|||
series: _.map(params.data, (item, index) => {
|
||||
return {
|
||||
name: item.name,
|
||||
data: _.map(item.data, (it) => it.replace(/,/g, "")),
|
||||
data: _.map(item.data, (it) => parseFloat(it.replace(/,/g, ""))),
|
||||
type: "line",
|
||||
itemStyle: {
|
||||
normal: {
|
||||
|
|
@ -385,6 +399,7 @@ export const mapPieOptions = (params) => ({
|
|||
}
|
||||
},
|
||||
legend: {
|
||||
type: "scroll",
|
||||
icon: "rect",
|
||||
top: "0%",
|
||||
left: "2%",
|
||||
|
|
|
|||
|
|
@ -26,6 +26,8 @@ export default class Index extends Component {
|
|||
enctry: "",
|
||||
operateTaxDeclaration: "",
|
||||
matchRule: "",
|
||||
confValue: "0",
|
||||
withDrawTaxDeclaration: "0"
|
||||
},
|
||||
showEncryptOperationButton: "",
|
||||
progressVisible: false,
|
||||
|
|
@ -54,6 +56,7 @@ export default class Index extends Component {
|
|||
isOpenEncrypt: enctry,
|
||||
isOpenTaxDeclaration: operateTaxDeclaration,
|
||||
salaryAcctEmployeeRule: matchRule,
|
||||
salaryArchiveDelete: confValue, withDrawTaxDeclaration
|
||||
}
|
||||
} = appSettings;
|
||||
this.setState({
|
||||
|
|
@ -61,7 +64,7 @@ export default class Index extends Component {
|
|||
showEncryptOperationButton,
|
||||
saveParams: {
|
||||
...saveParams,
|
||||
ascOrDesc, orderRule, rule, enctry, operateTaxDeclaration, matchRule
|
||||
ascOrDesc, orderRule, rule, enctry, operateTaxDeclaration, matchRule, confValue, withDrawTaxDeclaration
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -197,6 +200,26 @@ export default class Index extends Component {
|
|||
}
|
||||
});
|
||||
};
|
||||
saveArchiveDelete = () => {
|
||||
API.saveArchiveDelete(_.pick(this.state.saveParams, ["confValue"]))
|
||||
.then(({ status, errormsg }) => {
|
||||
if (status) {
|
||||
message.success(getLabel(22619, "保存成功!"));
|
||||
} else {
|
||||
message.error(errormsg || getLabel(22620, "保存失败!"));
|
||||
}
|
||||
});
|
||||
};
|
||||
withDrawTaxDeclaration = () => {
|
||||
API.saveWithDrawTaxDeclaration({ confValue: _.pick(this.state.saveParams, ["withDrawTaxDeclaration"]).withDrawTaxDeclaration })
|
||||
.then(({ status, errormsg }) => {
|
||||
if (status) {
|
||||
message.success(getLabel(22619, "保存成功!"));
|
||||
} else {
|
||||
message.error(errormsg || getLabel(22620, "保存失败!"));
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
handleChange = (key, val) => {
|
||||
const { saveParams } = this.state;
|
||||
|
|
@ -227,6 +250,12 @@ export default class Index extends Component {
|
|||
case "enctry":
|
||||
this.saveEncryptSetting();
|
||||
break;
|
||||
case "confValue":
|
||||
this.saveArchiveDelete();
|
||||
break;
|
||||
case "withDrawTaxDeclaration":
|
||||
this.withDrawTaxDeclaration();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
@ -252,7 +281,16 @@ export default class Index extends Component {
|
|||
employeeOptions,
|
||||
showEncryptOperationButton
|
||||
} = this.state;
|
||||
const { orderRule, ascOrDesc, rule, enctry, operateTaxDeclaration, matchRule } = saveParams;
|
||||
const {
|
||||
orderRule,
|
||||
ascOrDesc,
|
||||
rule,
|
||||
enctry,
|
||||
operateTaxDeclaration,
|
||||
matchRule,
|
||||
confValue,
|
||||
withDrawTaxDeclaration
|
||||
} = saveParams;
|
||||
return (
|
||||
<div className="ruleWrapper">
|
||||
<WeaTop
|
||||
|
|
@ -290,14 +328,24 @@ export default class Index extends Component {
|
|||
</WeaFormItem>
|
||||
</WeaSearchGroup>
|
||||
}
|
||||
<WeaSearchGroup title={getLabel(543359, "报税规则")} showGroup center>
|
||||
<WeaFormItem label={getLabel(543353, "个税申报")} labelCol={{ span: 8 }} wrapperCol={{ span: 16 }}>
|
||||
<WeaSearchGroup title={getLabel(111, "算税规则")} showGroup center>
|
||||
<WeaFormItem label={getLabel(111, "系统算税")} labelCol={{ span: 8 }} wrapperCol={{ span: 16 }}>
|
||||
<WeaCheckbox display="switch" value={operateTaxDeclaration}
|
||||
onChange={val => this.handleChange("operateTaxDeclaration", val)}/>
|
||||
</WeaFormItem>
|
||||
<WeaFormItem label={getLabel(111, "撤回申报表")} labelCol={{ span: 8 }} wrapperCol={{ span: 16 }}>
|
||||
<WeaCheckbox display="switch" value={withDrawTaxDeclaration}
|
||||
onChange={val => this.handleChange("withDrawTaxDeclaration", val)}/>
|
||||
</WeaFormItem>
|
||||
</WeaSearchGroup>
|
||||
<WeaSearchGroup title={getLabel(111, "薪资核算人员匹配规则")} showGroup center>
|
||||
<WeaFormItem label={getLabel(111, "匹配规则")} labelCol={{ span: 6 }} wrapperCol={{ span: 18 }}>
|
||||
<WeaSearchGroup title={getLabel(538004, "薪资档案")} showGroup center>
|
||||
<WeaFormItem label={getLabel(111, "允许删除档案")} labelCol={{ span: 8 }} wrapperCol={{ span: 16 }}>
|
||||
<WeaCheckbox display="switch" value={confValue}
|
||||
onChange={val => this.handleChange("confValue", val)}/>
|
||||
</WeaFormItem>
|
||||
</WeaSearchGroup>
|
||||
<WeaSearchGroup title={getLabel(538011, "薪资核算")} showGroup center>
|
||||
<WeaFormItem label={getLabel(111, "核算人员匹配规则")} labelCol={{ span: 6 }} wrapperCol={{ span: 18 }}>
|
||||
<WeaSelect options={matchRuleOptions} value={matchRule}
|
||||
onChange={val => this.handleChange("matchRule", val)}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import React from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { Button, Dropdown, Menu, message, Modal, Switch } from "antd";
|
||||
import { WeaInputSearch, WeaNewScroll, WeaSlideModal, WeaTop } from "ecCom";
|
||||
import { WeaInputSearch, WeaLocaleProvider, WeaNewScroll, WeaSlideModal, WeaTop } from "ecCom";
|
||||
import { renderLoading } from "../../util";
|
||||
import CustomTab from "../../components/customTab";
|
||||
import SystemSalaryItemModal from "./systemSalaryItemModal";
|
||||
|
|
@ -11,6 +11,7 @@ import CustomSalaryItemSlide from "./customSalaryItemSlide";
|
|||
import CustomPaginationTable from "../../components/customPaginationTable";
|
||||
import "../socialSecurityBenefits/programme/index.less";
|
||||
|
||||
const { getLabel } = WeaLocaleProvider;
|
||||
@inject("salaryItemStore", "taxAgentStore", "salaryFileStore")
|
||||
@observer
|
||||
export default class SalaryItem extends React.Component {
|
||||
|
|
@ -112,9 +113,9 @@ export default class SalaryItem extends React.Component {
|
|||
this.onEditItem(record, false);
|
||||
}}>{text}</a>;
|
||||
case "useInEmployeeSalary":
|
||||
return <Switch checked={text == 1} disabled/>;
|
||||
return <Switch checked={text === 1} disabled/>;
|
||||
case "useDefault":
|
||||
return <Switch checked={text == 1} disabled/>;
|
||||
return <Switch checked={text === 1} disabled/>;
|
||||
default:
|
||||
return <div dangerouslySetInnerHTML={{ __html: valueSpan }}/>;
|
||||
}
|
||||
|
|
@ -124,37 +125,22 @@ export default class SalaryItem extends React.Component {
|
|||
columns.push({
|
||||
key: "operate",
|
||||
title: "操作",
|
||||
width: 120,
|
||||
render: (text, record) => {
|
||||
return (
|
||||
<a onClick={() => {
|
||||
this.onEditItem(record, true);
|
||||
}}>{(showSalaryItemBtn || showOperateBtn) ? "编辑" : "查看"}</a>
|
||||
<React.Fragment>
|
||||
<a
|
||||
onClick={() => this.onEditItem(record, true)}>{(showSalaryItemBtn || showOperateBtn) ? "编辑" : "查看"}</a>
|
||||
{
|
||||
(record.canDelete && (showSalaryItemBtn || showOperateBtn)) &&
|
||||
<a href="javascript:void(0)" style={{ marginLeft: 10 }}
|
||||
onClick={() => this.handleDeleteItem(record)}
|
||||
>{getLabel(535052, "删除")}</a>
|
||||
}
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
});
|
||||
columns.push({
|
||||
title: "",
|
||||
key: "moreOperate",
|
||||
dataIndex: "moreOperate",
|
||||
render: (text, record) => {
|
||||
if (record.canDelete && (showSalaryItemBtn || showOperateBtn)) {
|
||||
return (
|
||||
<Dropdown overlay={<Menu>
|
||||
<Menu.Item>
|
||||
<a href="javascript: void(0);" onClick={() => {
|
||||
this.handleDeleteItem(record);
|
||||
}}>删除</a>
|
||||
</Menu.Item>
|
||||
</Menu>}>
|
||||
<a href="javascript:void(0)" style={{ textDecoration: "none" }}><i className="icon-coms-more"
|
||||
style={{ fontSize: 18 }}></i></a>
|
||||
</Dropdown>
|
||||
);
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
});
|
||||
return [
|
||||
// {
|
||||
// title: "序号",
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ import React from "react";
|
|||
import { inject, observer } from "mobx-react";
|
||||
import { toJS } from "mobx";
|
||||
import { Button, Dropdown, Menu, message, Modal, Popover } from "antd";
|
||||
import { WeaHelpfulTip, WeaNewScroll, WeaSlideModal, WeaTab, WeaTop } from "ecCom";
|
||||
import { WeaHelpfulTip, WeaLocaleProvider, WeaNewScroll, WeaSlideModal, WeaTab, WeaTop } from "ecCom";
|
||||
import { getSearchs, renderLoading } from "../../../util";
|
||||
import BaseForm from "./baseForm";
|
||||
import SlideModalTitle from "../../../components/slideModalTitle";
|
||||
|
|
@ -14,8 +14,11 @@ import * as API from "../../../apis/welfareArchive";
|
|||
import ImportModal from "../../../components/importModal";
|
||||
import TipLabel from "../../../components/TipLabel";
|
||||
import UnifiedTable from "../../../components/UnifiedTable";
|
||||
import { convertToUrlString } from "../../../util/url";
|
||||
import { salaryArchiveDelete } from "../../../apis/payrollFiles";
|
||||
import "./index.less";
|
||||
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
@inject("archivesStore", "taxAgentStore")
|
||||
@observer
|
||||
export default class Archives extends React.Component {
|
||||
|
|
@ -49,7 +52,8 @@ export default class Archives extends React.Component {
|
|||
current: 1,
|
||||
pageSize: 10,
|
||||
total: 0
|
||||
}
|
||||
},
|
||||
salaryArchiveDelete: "" //待定薪、停薪员工 是否允许删除薪资档案 0: 否, 1: 是
|
||||
};
|
||||
this.record = {};
|
||||
}
|
||||
|
|
@ -57,6 +61,7 @@ export default class Archives extends React.Component {
|
|||
componentDidMount() {
|
||||
const { archivesStore: { doInit } } = this.props;
|
||||
doInit();
|
||||
this.salaryArchiveDelete();
|
||||
this.queryList({ runStatuses: ["1"] });
|
||||
}
|
||||
|
||||
|
|
@ -92,6 +97,15 @@ export default class Archives extends React.Component {
|
|||
}
|
||||
});
|
||||
};
|
||||
salaryArchiveDelete = () => {
|
||||
salaryArchiveDelete().then(({ status, data }) => {
|
||||
if (status) {
|
||||
this.setState({
|
||||
salaryArchiveDelete: data
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
handleEdit = (record) => {
|
||||
this.record = record;
|
||||
|
|
@ -103,7 +117,7 @@ export default class Archives extends React.Component {
|
|||
};
|
||||
|
||||
getColumns = () => {
|
||||
const { columns, pageInfo, selectedKey } = this.state;
|
||||
const { columns, salaryArchiveDelete, selectedKey } = this.state;
|
||||
const { taxAgentStore: { showOperateBtn } } = this.props;
|
||||
let tmpV = _.map(columns.filter(item => item.display === "TRUE"), item => {
|
||||
return {
|
||||
|
|
@ -118,31 +132,68 @@ export default class Archives extends React.Component {
|
|||
return tmpV.length > 0 ? [
|
||||
...tmpV, {
|
||||
title: "操作",
|
||||
width: 150,
|
||||
dataIndex: "operate",
|
||||
render: (text, record) => {
|
||||
return (
|
||||
<div className="optWrapper">
|
||||
<a href="javascript:void(0);" className="mr10"
|
||||
onClick={() => this.handleEdit(record)}>{(showOperateBtn && selectedKey !== "stop") ? "编辑" : "查看"}</a>
|
||||
{
|
||||
showOperateBtn && selectedKey === "pending" &&
|
||||
<a href="javascript:void(0);" className="mr10"
|
||||
onClick={() => this.stayAddToPay([record.baseInfo])}>增员</a>
|
||||
}
|
||||
{
|
||||
showOperateBtn && selectedKey === "suspend" &&
|
||||
<a href="javascript:void(0);" className="mr10"
|
||||
onClick={() => this.stayDelToStop([record.baseInfo])}>减员</a>
|
||||
}
|
||||
{
|
||||
showOperateBtn && selectedKey === "stop" && salaryArchiveDelete === "1" &&
|
||||
<a href="javascript:void(0);" className="mr10"
|
||||
onClick={() => this.deleteSocialArchive([record.baseInfo])}>删除档案</a>
|
||||
}
|
||||
{
|
||||
showOperateBtn && selectedKey === "stop" && salaryArchiveDelete !== "1" &&
|
||||
<a href="javascript:void(0);"
|
||||
onClick={() => this.cancelStopPayment([record.baseInfo])}>取消停缴</a>
|
||||
}
|
||||
{
|
||||
showOperateBtn && selectedKey === "pending" &&
|
||||
<Popover
|
||||
overlayClassName="moreIconWrapper"
|
||||
placement="bottomRight"
|
||||
content={<Menu onClick={({ key }) => {
|
||||
if (key === "addMember") {
|
||||
this.stayAddToPay([record.baseInfo]);
|
||||
} else {
|
||||
Modal.warning({
|
||||
title: "信息确认",
|
||||
content: `确定要删除该条待办人员吗?`,
|
||||
onOk: () => this.deleteTodoList({ runStatus: "4", ids: [record.baseInfo] })
|
||||
});
|
||||
}
|
||||
}}>
|
||||
<Menu.Item key="addMember">增员</Menu.Item>
|
||||
<Menu.Item key="stopSalary">删除待办</Menu.Item>
|
||||
</Menu>} title="">
|
||||
content={
|
||||
salaryArchiveDelete === "1" ?
|
||||
<Menu onClick={({ key }) => {
|
||||
if (key === "deleteAchives") {
|
||||
this.deleteSocialArchive([record.baseInfo]);
|
||||
} else {
|
||||
Modal.warning({
|
||||
title: "信息确认",
|
||||
content: `确定要删除该条待办人员吗?`,
|
||||
onOk: () => this.deleteTodoList({ runStatus: "4", ids: [record.baseInfo] })
|
||||
});
|
||||
}
|
||||
}}>
|
||||
<Menu.Item key="deleteAchives">删除档案</Menu.Item>
|
||||
<Menu.Item key="stopSalary">删除待办</Menu.Item>
|
||||
</Menu> :
|
||||
<Menu onClick={({ key }) => {
|
||||
if (key === "deleteAchives") {
|
||||
this.deleteSocialArchive([record.baseInfo]);
|
||||
} else {
|
||||
Modal.warning({
|
||||
title: "信息确认",
|
||||
content: `确定要删除该条待办人员吗?`,
|
||||
onOk: () => this.deleteTodoList({ runStatus: "4", ids: [record.baseInfo] })
|
||||
});
|
||||
}
|
||||
}}>
|
||||
<Menu.Item key="stopSalary">删除待办</Menu.Item>
|
||||
</Menu>
|
||||
} title="">
|
||||
<i className="icon-coms-more"/>
|
||||
</Popover>
|
||||
}
|
||||
|
|
@ -158,18 +209,15 @@ export default class Archives extends React.Component {
|
|||
content: `确定要删除该条待办人员吗?`,
|
||||
onOk: () => this.cancelStayDel({ runStatus: "3", ids: [record.baseInfo] })
|
||||
});
|
||||
} else {
|
||||
this.stayDelToStop([record.baseInfo]);
|
||||
}
|
||||
}}>
|
||||
<Menu.Item key="stayDelToStop">减员</Menu.Item>
|
||||
<Menu.Item key="stopSalary">删除待办</Menu.Item>
|
||||
</Menu>} title="">
|
||||
<i className="icon-coms-more"/>
|
||||
</Popover>
|
||||
}
|
||||
{
|
||||
showOperateBtn && selectedKey === "stop" &&
|
||||
showOperateBtn && selectedKey === "stop" && salaryArchiveDelete === "1" &&
|
||||
<Popover
|
||||
overlayClassName="moreIconWrapper"
|
||||
placement="bottomRight"
|
||||
|
|
@ -427,7 +475,23 @@ export default class Archives extends React.Component {
|
|||
}
|
||||
});
|
||||
};
|
||||
|
||||
//删除社保档案
|
||||
deleteSocialArchive = (params) => {
|
||||
Modal.confirm({
|
||||
title: getLabel(131329, "信息确认"),
|
||||
content: getLabel(388758, "确认要删除吗?"),
|
||||
onOk: () => {
|
||||
API.deleteArchive(params).then(({ status, errormsg }) => {
|
||||
if (status) {
|
||||
message.success(getLabel(30700, "操作成功"));
|
||||
this.query();
|
||||
} else {
|
||||
message.error(errormsg || getLabel(30651, "操作失败"));
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
//取消停缴
|
||||
cancelStopPayment = (payload) => {
|
||||
API.cancelStopPayment(payload).then(({ status, errormsg }) => {
|
||||
|
|
@ -548,16 +612,16 @@ export default class Archives extends React.Component {
|
|||
let url = `${window.location.origin}/api/bs/hrmsalary/scheme/export?ids=`;
|
||||
switch (selectedKey) {
|
||||
case "pending":
|
||||
url = `${url}&runStatuses=1`;
|
||||
url = `${url}&runStatuses=1&${convertToUrlString(form.getFormParams())}`;
|
||||
break;
|
||||
case "fixed":
|
||||
url = `${url}&runStatuses=2,3`;
|
||||
url = `${url}&runStatuses=2,3&${convertToUrlString(form.getFormParams())}`;
|
||||
break;
|
||||
case "suspend":
|
||||
url = `${url}&runStatuses=3`;
|
||||
url = `${url}&runStatuses=3&${convertToUrlString(form.getFormParams())}`;
|
||||
break;
|
||||
default:
|
||||
url = `${url}&runStatuses=4,5`;
|
||||
url = `${url}&runStatuses=4,5&${convertToUrlString(form.getFormParams())}`;
|
||||
break;
|
||||
}
|
||||
window.open(url, "_self");
|
||||
|
|
|
|||
|
|
@ -1,10 +1,9 @@
|
|||
import React from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { toJS } from "mobx";
|
||||
import { Button, Dropdown, Menu, message, Modal, Switch } from "antd";
|
||||
import { WeaNewScroll, WeaSelect, WeaSlideModal, WeaTop } from "ecCom";
|
||||
import { WeaTableNew } from "comsMobx";
|
||||
import { renderNoright } from "../../../util"; // 渲染form数据的方法:因为多个页面都会使用,所以抽的公共方法在util中
|
||||
import { Button, Dropdown, Menu, message, Modal } from "antd";
|
||||
import { WeaLocaleProvider, WeaNewScroll, WeaSelect, WeaSlideModal, WeaTop } from "ecCom";
|
||||
import { renderNoright } from "../../../util";
|
||||
import CustomTab from "../../../components/customTab";
|
||||
import SlideModalTitle from "../../../components/slideModalTitle";
|
||||
import TipLabel from "../../../components/TipLabel";
|
||||
|
|
@ -14,11 +13,11 @@ import { paymentScopeEnum, welfareTypeEnum } from "./enum";
|
|||
import CustomPaginationTable from "../../../components/customPaginationTable";
|
||||
import TwoColContent from "../../../components/twoColContent";
|
||||
import CopySchemaModal from "./copySchemaModal";
|
||||
import "./index.less";
|
||||
import CustomBenefitsTable from "./customBenefitsTable";
|
||||
import "./index.less";
|
||||
|
||||
const WeaMobxTable = WeaTableNew.WeaTable;
|
||||
|
||||
const { getLabel } = WeaLocaleProvider;
|
||||
@inject("programmeStore", "taxAgentStore", "salaryFileStore")
|
||||
@observer
|
||||
export default class Programme extends React.Component {
|
||||
|
|
@ -57,25 +56,17 @@ export default class Programme extends React.Component {
|
|||
|
||||
newColumns = newColumns.map(column => {
|
||||
let newColumn = column;
|
||||
newColumn.render = (text, record, index) => {
|
||||
newColumn.render = (text, record) => {
|
||||
//前端元素转义
|
||||
let valueSpan =
|
||||
record[newColumn.dataIndex + "span"] !== undefined
|
||||
? record[newColumn.dataIndex + "span"]
|
||||
: record[newColumn.dataIndex];
|
||||
if (newColumn.dataIndex == "id") {
|
||||
newColumn.display = false;
|
||||
}
|
||||
if (newColumn.dataIndex === "id") newColumn.display = false;
|
||||
switch (newColumn.dataIndex) {
|
||||
case "operate":
|
||||
return (
|
||||
<a
|
||||
href="javascript: void(0);"
|
||||
onClick={() => {
|
||||
this.onEdit(record);
|
||||
}}>
|
||||
编辑
|
||||
</a>
|
||||
<a href="javascript: void(0);" onClick={() => this.onEdit(record)}>编辑</a>
|
||||
);
|
||||
default:
|
||||
return <div dangerouslySetInnerHTML={{ __html: valueSpan }}/>;
|
||||
|
|
@ -87,72 +78,38 @@ export default class Programme extends React.Component {
|
|||
newColumns.push({
|
||||
title: "操作",
|
||||
dataIndex: "operate",
|
||||
width: 120,
|
||||
render: (text, record) => {
|
||||
return (
|
||||
<a
|
||||
href="javascript:void(0);"
|
||||
onClick={() => {
|
||||
this.onEdit(record);
|
||||
}}>
|
||||
{showOperateBtn ? "编辑" : "查看"}
|
||||
</a>
|
||||
);
|
||||
}
|
||||
});
|
||||
showOperateBtn && newColumns.push({
|
||||
key: "moreOperate",
|
||||
dataIndex: "moreOperate",
|
||||
render: (text, record) => {
|
||||
return (
|
||||
<Dropdown
|
||||
overlay={
|
||||
<Menu>
|
||||
<Menu.Item>
|
||||
<a
|
||||
onClick={() => {
|
||||
this.onCopy(record);
|
||||
}}>
|
||||
复制
|
||||
</a>
|
||||
</Menu.Item>
|
||||
{/*暂时隐藏*/}
|
||||
<Menu.Item>
|
||||
<a
|
||||
onClick={() => {
|
||||
this.onDelete(record);
|
||||
}}>
|
||||
删除
|
||||
</a>
|
||||
</Menu.Item>
|
||||
</Menu>
|
||||
}>
|
||||
<a href="javascript:void(0)" style={{ textDecoration: "none" }}>
|
||||
<i
|
||||
className="icon-coms-more"
|
||||
style={{ fontSize: 18 }}>
|
||||
</i>
|
||||
</a>
|
||||
</Dropdown>
|
||||
<React.Fragment>
|
||||
<a href="javascript:void(0);" onClick={() => this.onEdit(record)}
|
||||
style={{ marginRight: 10 }}>{showOperateBtn ? "编辑" : "查看"}</a>
|
||||
{
|
||||
showOperateBtn &&
|
||||
<a href="javascript:void(0)" onClick={() => this.onCopy(record)}
|
||||
style={{ marginRight: 10 }}>{getLabel(77, "复制")}</a>
|
||||
}
|
||||
{
|
||||
showOperateBtn &&
|
||||
<Dropdown
|
||||
overlay={
|
||||
<Menu>
|
||||
<Menu.Item>
|
||||
<a href="javascript:void(0)" onClick={() => this.onDelete(record)}>{getLabel(535052, "删除")}</a>
|
||||
</Menu.Item>
|
||||
</Menu>
|
||||
}>
|
||||
<a href="javascript:void(0)"><i className="icon-coms-more"/></a>
|
||||
</Dropdown>
|
||||
}
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
});
|
||||
return newColumns;
|
||||
};
|
||||
|
||||
handleCategoryStatusChange(record, value) {
|
||||
const { programmeStore: { updateCustomCategoryStatus } } = this.props;
|
||||
Modal.confirm({
|
||||
title: "信息确认",
|
||||
content: `确认要${value ? "启用" : "停用"}吗`,
|
||||
onOk: () => {
|
||||
updateCustomCategoryStatus(record.id, value);
|
||||
},
|
||||
onCancel: () => {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
onEdit(record) {
|
||||
onEdit = (record) => {
|
||||
let id = record.id;
|
||||
const { programmeStore } = this.props;
|
||||
const { getForm, selectedKey } = programmeStore;
|
||||
|
|
@ -162,15 +119,15 @@ export default class Programme extends React.Component {
|
|||
}).then(() => {
|
||||
this.setState({ slideVisiable: true, customEdit: true, currentOperate: "update" });
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
onCopy(record) {
|
||||
onCopy = (record) => {
|
||||
this.setState({
|
||||
copyId: record.id,
|
||||
copyModalValue: record.schemeName,
|
||||
copyModalVisible: true
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
onDelete = (record) => {
|
||||
const { programmeStore: { deleteScheme, deleteLoading, selectedKey } } = this.props;
|
||||
|
|
@ -422,13 +379,6 @@ export default class Programme extends React.Component {
|
|||
welfareTypeEnum={customSelectkey}
|
||||
onCustomEdit={this.onCustomEdit}
|
||||
/>
|
||||
// <WeaMobxTable // table内部做了loading加载处理,页面就不需要再加了
|
||||
// comsWeaTableStore={tableStore} // table store
|
||||
// hasOrder={true} // 是否启用排序
|
||||
// needScroll={true} // 是否启用table内部列表滚动,将自适应到父级高度
|
||||
// getColumns={this.getCustomColumns}
|
||||
// onOperatesClick={this.onCustomOperatesClick.bind(this)}
|
||||
// />
|
||||
}
|
||||
rightContent={renderCustomRightContent()}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import React from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { Button, DatePicker, Dropdown, Menu, message, Modal } from "antd";
|
||||
import { WeaNewScroll, WeaTop } from "ecCom";
|
||||
import { WeaLocaleProvider, WeaNewScroll, WeaTop } from "ecCom";
|
||||
import { renderNoright } from "../../../util";
|
||||
import Accountdialog from "./components/accountDialog";
|
||||
import AbnormalDrawer from "./components/abnormalDrawer";
|
||||
|
|
@ -12,6 +12,7 @@ import { getCalculateProgress } from "../../../apis/calculate";
|
|||
import "./index.less";
|
||||
import UnifiedTable from "../../../components/UnifiedTable";
|
||||
|
||||
const { getLabel } = WeaLocaleProvider;
|
||||
const MonthPicker = DatePicker.MonthPicker;
|
||||
|
||||
@inject("standingBookStore", "taxAgentStore")
|
||||
|
|
@ -139,28 +140,54 @@ export default class StandingBook extends React.Component {
|
|||
{
|
||||
title: "操作",
|
||||
dataIndex: "operate",
|
||||
width: 150,
|
||||
key: "operate",
|
||||
render: (text, r) => {
|
||||
const { billStatus, billMonth, creator } = r;
|
||||
return (
|
||||
<React.Fragment>
|
||||
{billStatus === "未归档" && (
|
||||
{billStatus === "0" && (
|
||||
<a
|
||||
href="javascript:void(0);"
|
||||
className="linkTo"
|
||||
style={{ marginRight: 10 }}
|
||||
onClick={() => this.handleGoDetail(billMonth, "", r.paymentOrganizationId, creator)}>
|
||||
核算
|
||||
</a>
|
||||
)}
|
||||
{billStatus === "已归档" && (
|
||||
{billStatus === "0" && (
|
||||
<a
|
||||
href="javascript:void(0);"
|
||||
style={{ marginRight: 10 }}
|
||||
onClick={() => this.handleOperate({
|
||||
key: "archive",
|
||||
billMonth,
|
||||
paymentOrganizationId: r.paymentOrganizationId,
|
||||
creator
|
||||
})}>
|
||||
归档
|
||||
</a>
|
||||
)}
|
||||
{billStatus === "1" && (
|
||||
<a
|
||||
href="javascript:void(0);"
|
||||
style={{ marginRight: 10 }}
|
||||
onClick={() => this.handleOperate({
|
||||
key: "view",
|
||||
billMonth,
|
||||
paymentOrganizationId: r.paymentOrganizationId,
|
||||
creator
|
||||
})}>
|
||||
查看
|
||||
</a>
|
||||
)}
|
||||
{billStatus === "1" && (
|
||||
<a
|
||||
href="javascript:void(0);"
|
||||
className="linkTo"
|
||||
onClick={() => this.socialSecurityBenefitsRecalculate({ id: r.id })}>
|
||||
重新核算
|
||||
</a>
|
||||
)}
|
||||
{billStatus === "未归档" && (
|
||||
{billStatus === "0" && (
|
||||
<Dropdown
|
||||
overlay={
|
||||
<Menu
|
||||
|
|
@ -172,31 +199,10 @@ export default class StandingBook extends React.Component {
|
|||
creator
|
||||
})
|
||||
}>
|
||||
<Menu.Item key="archive">归档</Menu.Item>
|
||||
{/* <Menu.Item key="detail">异常详情</Menu.Item> */}
|
||||
<Menu.Item key="delete">删除</Menu.Item>
|
||||
{/* <Menu.Item key="operate">操作日志</Menu.Item> */}
|
||||
</Menu>
|
||||
}>
|
||||
<i className="icon-coms-more more"/>
|
||||
</Dropdown>
|
||||
)}
|
||||
{billStatus === "已归档" && (
|
||||
<Dropdown
|
||||
overlay={
|
||||
<Menu
|
||||
onClick={({ key }) =>
|
||||
this.handleOperate({
|
||||
key,
|
||||
billMonth,
|
||||
paymentOrganizationId: r.paymentOrganizationId,
|
||||
creator
|
||||
})
|
||||
}>
|
||||
<Menu.Item key="view">查看</Menu.Item>
|
||||
</Menu>
|
||||
}>
|
||||
<i className="icon-coms-more more"/>
|
||||
<i className="icon-coms-more" style={{ marginLeft: 10 }}/>
|
||||
</Dropdown>
|
||||
)}
|
||||
</React.Fragment>
|
||||
|
|
@ -490,14 +496,24 @@ export default class StandingBook extends React.Component {
|
|||
<UnifiedTable
|
||||
loading={loading}
|
||||
columns={_.filter(columns, (it) => it.dataIndex !== "id").map(item => {
|
||||
if (item.dataIndex !== "operate") {
|
||||
if (item.dataIndex !== "operate" && item.dataIndex !== "billStatus") {
|
||||
return {
|
||||
...item,
|
||||
width: 150,
|
||||
render: (text) => {
|
||||
return <span className="ellipsis" title={text}>{text}</span>;
|
||||
}
|
||||
};
|
||||
}
|
||||
if (item.dataIndex === "billStatus") {
|
||||
return {
|
||||
...item,
|
||||
render: (_, record) => {
|
||||
return <span
|
||||
className="ellipsis">{record.billStatus === "1" ? getLabel(18800, "已归档") : getLabel(17999, "未归档")}</span>;
|
||||
}
|
||||
};
|
||||
}
|
||||
return { ...item };
|
||||
})}
|
||||
dataSource={list}
|
||||
|
|
|
|||
|
|
@ -459,7 +459,7 @@ export default class NormalIndex extends Component {
|
|||
const { loading } = standingBookStore;
|
||||
const btn1 = [
|
||||
<Button type="primary" onClick={this.handleBatchDelete}>批量删除</Button>,
|
||||
<Button type="primary" onClick={this.handleAdd}>添加该月正常缴纳人员</Button>
|
||||
<Button type="primary" onClick={this.handleAdd}>添加缴纳人员</Button>
|
||||
];
|
||||
const btn2 = [
|
||||
<Button type="primary" onClick={this.handleCommonAccountClick}>核算</Button>,
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
import React from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { Button, Col, Dropdown, Menu, message, Modal, Row, Switch } from "antd";
|
||||
import { Button, Col, message, Modal, Row, Switch } from "antd";
|
||||
import { WeaFormItem, WeaInputSearch, WeaSearchGroup, WeaTable, WeaTop } from "ecCom";
|
||||
import { renderNoright } from "../../util"; // 渲染form数据的方法:因为多个页面都会使用,所以抽的公共方法在util中
|
||||
import { renderNoright } from "../../util";
|
||||
import EditModal from "./editModal";
|
||||
import TipLabel from "../../components/TipLabel";
|
||||
import { decentralizationConditions, editConditions } from "./editConditions";
|
||||
|
|
@ -357,22 +357,11 @@ export default class TaxAgent extends React.Component {
|
|||
onClick={() => this.showEditModal(record.id)}>
|
||||
编辑
|
||||
</a>
|
||||
<Dropdown
|
||||
overlay={
|
||||
<Menu>
|
||||
<Menu.Item key="0">
|
||||
<a
|
||||
href="javaScript:void(0);"
|
||||
onClick={() => this.deleteTaxAgent(record.id)}>
|
||||
删除
|
||||
</a>
|
||||
</Menu.Item>
|
||||
</Menu>
|
||||
}>
|
||||
<a className="ant-dropdown-link" href="javaScript:void(0);">
|
||||
<i className="icon-coms-more"/>
|
||||
</a>
|
||||
</Dropdown>
|
||||
<a
|
||||
href="javaScript:void(0);"
|
||||
onClick={() => this.deleteTaxAgent(record.id)}>
|
||||
删除
|
||||
</a>
|
||||
</div>
|
||||
}
|
||||
],
|
||||
|
|
|
|||
|
|
@ -39,12 +39,13 @@
|
|||
.operationWapper,
|
||||
.employeeRangeWapper {
|
||||
a {
|
||||
color: #4d7ad8;
|
||||
//color: #4d7ad8;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
//a:hover {
|
||||
// text-decoration: none;
|
||||
//}
|
||||
|
||||
a.ant-dropdown-link {
|
||||
margin-left: 18px;
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ const { TableStore } = WeaTableNew;
|
|||
export class MySalaryStore {
|
||||
@observable tableStore = new TableStore(); // new table
|
||||
@observable form = new WeaForm(); // nrew 一个form
|
||||
@observable pwdForm = new WeaForm(); // new 一个密码验证form
|
||||
@observable condition = []; // 存储后台得到的form数据
|
||||
@observable hasRight = false; // 判断用户是有权限查看当前页面: 没有权限渲染无权限页面,有权限渲染数据
|
||||
@observable showSearchAd = false; // 高级搜索面板显示
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import { action, observable } from "mobx";
|
||||
import { WeaTableNew } from "comsMobx";
|
||||
import * as API from "../apis/payrollFiles";
|
||||
import { statisticsEmployeeDetailList, getDataPerspective } from "../apis/statistics";
|
||||
import { getDataPerspective, statisticsEmployeeDetailList } from "../apis/statistics";
|
||||
|
||||
|
||||
const { TableStore } = WeaTableNew;
|
||||
|
|
@ -14,11 +14,12 @@ export class PayrollFilesStore {
|
|||
@action("薪资档案-列表查询")
|
||||
queryList = (payload = {}, searchItemsValue = {}, url = "") => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const { departmentIds, positionIds, subcompanyIds, ...extra } = searchItemsValue;
|
||||
const { departmentIds, positionIds, subcompanyIds, statuses, ...extra } = searchItemsValue;
|
||||
API.queryList({
|
||||
departmentIds: departmentIds ? departmentIds.split(",") : [],
|
||||
positionIds: positionIds ? positionIds.split(",") : [],
|
||||
subcompanyIds: subcompanyIds ? subcompanyIds.split(",") : [],
|
||||
statuses: statuses ? statuses.split(",") : [],
|
||||
...payload, ...extra, url
|
||||
}).then(res => {
|
||||
const { data, status } = res;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,32 @@
|
|||
import loadjs from "loadjs";
|
||||
|
||||
const RSAEcrypt = (openRSA, param) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
//异步加载ras文件
|
||||
loadjs.isDefined("rsa") ? loadjs.ready("rsa", () => {
|
||||
if (openRSA && openRSA == "1") {
|
||||
Object.keys(param).forEach(key => {
|
||||
param[key] = __RSAEcrypt__.rsa_data_encrypt(param[key]);
|
||||
});
|
||||
}
|
||||
resolve(param);
|
||||
}) : loadjs(["/js/rsa/jsencrypt.js", "/js/rsa/rsa.js"], "rsa", {
|
||||
async: false,
|
||||
success: () => {
|
||||
if (openRSA && openRSA == "1") {
|
||||
const callback = () => {
|
||||
Object.keys(param).forEach(key => {
|
||||
param[key] = __RSAEcrypt__.rsa_data_encrypt(param[key]);
|
||||
});
|
||||
resolve(param);
|
||||
};
|
||||
__RSAEcrypt__.initRsaCode(callback);
|
||||
} else {
|
||||
resolve(param);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
export { RSAEcrypt };
|
||||
Loading…
Reference in New Issue