Merge branch 'feature/2.9.9.2312.01-社保核算以及薪资账套查询优化' into release/2.9.9.2312.01

# Conflicts:
#	pc4mobx/hrmSalary/pages/calculate/calcOc/components/salaryCalcOcList.js
This commit is contained in:
黎永顺 2023-12-05 11:34:00 +08:00
commit 143e9503e1
28 changed files with 898 additions and 389 deletions

View File

@ -351,3 +351,9 @@ export const exportSiaccountWelfaresupplyimporttemplatetemplate = params => {
export const exportSiaccountWelfarebalanceimporttemplatetetemplate = params => {
return postExportFetch("/api/bs/hrmsalary/siaccount/welfare/balanceimporttemplate/export", params);
};
export const getBalancePaymentGroup = params => {
return postFetch("/api/bs/hrmsalary/siaccount/detail/getBalancePaymentGroup", params);
};
export const addNewBalance = params => {
return postFetch("/api/bs/hrmsalary/siaccount/detail/addNewBalance", params);
};

View File

@ -5,8 +5,8 @@
* Date: 2023/9/26
*/
import React, { Component } from "react";
import { WeaLocaleProvider, WeaTable } from "ecCom";
import { Alert } from "antd";
import { WeaLocaleProvider } from "ecCom";
import { Alert, Spin } from "antd";
import { comparisonResultList } from "../../../../apis/calculate";
const getLabel = WeaLocaleProvider.getLabel;
@ -21,9 +21,35 @@ class SalaryCalcOcList extends Component {
}
componentDidMount() {
this.comparisonResultList(this.props);
window.addEventListener("message", this.handleReceive, false);
}
componentWillUnmount() {
window.removeEventListener("message", this.handleReceive, false);
}
handleReceive = async ({ data }) => {
const { type, payload: { id, params } = {} } = data;
if (type === "init") {
this.comparisonResultList(this.props);
} else if (type === "turn") {
switch (id) {
case "PAGEINFO":
const { size: pageSize, pageNum: current } = params;
this.setState({
pageInfo: { ...this.state.pageInfo, current, pageSize }
}, () => this.comparisonResultList(this.props));
break;
case "FORMULA":
const { formulaDesc } = params;
this.setState({ formulaDesc });
break;
default:
break;
}
}
};
componentWillReceiveProps(nextProps, nextContext) {
if (
(nextProps.form.onlyDiffEmployee !== this.props.form.onlyDiffEmployee) ||
@ -34,6 +60,15 @@ class SalaryCalcOcList extends Component {
}
}
postMessageToChild = (payload = {}) => {
const i18n = {
"共": getLabel(18609, "共"), "条": getLabel(18256, "条"),
"总计": getLabel(523, "总计"), "系统值": getLabel(543280, "系统值"),
"线下值": getLabel(543281, "线下值"), "差值": getLabel(543282, "差值")
};
const childFrameObj = document.getElementById("atdTable");
childFrameObj.contentWindow.postMessage(JSON.stringify({ ...payload, i18n }), "*");
};
comparisonResultList = (props) => {
const { form, routeParams: { salaryAcctRecordId } } = props;
const { pageInfo } = this.state;
@ -42,85 +77,54 @@ class SalaryCalcOcList extends Component {
comparisonResultList(payload).then(({ status, data }) => {
this.setState({ loading: false });
if (status) {
const { list: dataSource, columns, pageNum: current, pageSize, total } = data;
const { columns, pageInfo: { pageNum: current, pageSize, total, list: dataSource } } = data;
this.setState({
dataSource, columns,
dataSource, columns: this.convertColumns(this.removeItem(columns)),
pageInfo: { ...pageInfo, current, pageSize, total }
}, () => {
const { pageInfo, dataSource, columns } = this.state;
this.postMessageToChild({ dataSource, pageInfo, columns });
});
}
}).catch(() => this.setState({ loading: false }));
};
removeItem = (cols) => {
return _.filter(cols, o => {
if (JSON.stringify(o.children) === "[]") {
return false;
} else {
this.removeItem(o.children);
return true;
}
});
};
convertColumns = (cols) => {
return _.map(cols, (item, index) => {
const col = { title: item.text, dataIndex: item.column };
if (_.isNaN(parseInt(item.column))) {
return { ...col, width: 150, fixed: item.fixed || false };
} else {
return { ...col, width: 180, children: this.convertColumns(item.children) };
}
});
};
render() {
const { dataSource, loading, columns, pageInfo, formulaDesc } = this.state;
const pagination = {
...pageInfo,
showTotal: total => `${getLabel(18609, "共")} ${total} ${getLabel(18256, "条")}`,
showQuickJumper: true,
showSizeChanger: true,
pageSizeOptions: ["10", "20", "50", "100"],
onShowSizeChange: (current, pageSize) => {
this.setState({
pageInfo: { ...pageInfo, current, pageSize }
}, () => this.comparisonResultList(this.props));
},
onChange: current => {
this.setState({
pageInfo: { ...pageInfo, current }
}, () => this.comparisonResultList(this.props));
}
};
const { loading, formulaDesc } = this.state;
return (
<React.Fragment>
<div className="wea-new-table ">
<Alert message={`${getLabel(18125, "公式")}${formulaDesc}`} type="info"/>
<WeaTable
rowKey="id" pagination={pagination} loading={loading} dataSource={dataSource}
scroll={{ x: 840, y: "calc(100vh - 246px)" }}
columns={_.map(columns, (o, i) => {
if (i > 1) {
if (i > 2) {
return {
...o, width: 180,
render: (__, record) => {
const formulaDesc = record["customParameters"][`${o["dataIndex"]}`];
const showDifference = record[`${o["dataIndex"]}_type`] === "number";
const { acctResultValue, excelResultValue } = record[o["dataIndex"]] || {};
return <div className="comparison-column-item-container"
onClick={() => this.setState({ formulaDesc })}>
<div className="comparison-single-row">
<span>{getLabel(543280, "系统值")}</span>
<span>{acctResultValue}</span>
</div>
<div className="comparison-single-row">
<span>{getLabel(543281, "线下值")}</span>
<span>{excelResultValue}</span>
</div>
{
showDifference &&
<div className="comparison-single-row danger">
<span>{getLabel(543282, "差值")}</span>
<span>{calculateDifference(acctResultValue, excelResultValue)}</span>
</div>
}
</div>;
}
};
}
return { ...o, width: 180 };
}
return { ...o, width: 150, fixed: "left" };
})}
/>
</React.Fragment>
<Spin spinning={loading}>
<iframe
style={{ border: 0, width: "100%", height: "100%" }}
// src="http://localhost:7607/#/OCTable"
src="/spa/hrmSalary/hrmSalaryCalculateDetail/index.html#/OCTable"
id="atdTable"
/>
</Spin>
</div>
);
}
}
export default SalaryCalcOcList;
// 计算差值
const calculateDifference = (systemValue, excelValue) => {
if (_.isNil(systemValue) || _.isNil(excelValue)) return "";
const systemNum = Number(systemValue);
const excelNum = Number(excelValue);
return (systemNum - excelNum).toFixed(2);
};

View File

@ -55,29 +55,12 @@
overflow-y: hidden;
.wea-new-table {
background: #FFF;
height: calc(100% - 44px);
.ant-table-tbody {
td {
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.ant-spin-nested-loading, .ant-spin-container {
height: 100% !important;
}
.comparison-column-item-container {
cursor: pointer;
.comparison-single-row {
margin: 4px 0;
}
.danger {
color: #ff4d4f;
}
}
}
}
}

View File

@ -38,7 +38,7 @@ class LedgerSalaryItemBaseInfo extends Component {
canDelete: true,
fieldId: key,
fieldName: showname,
id: dataSource.length,
id: key,
salarySobId: "",
sortedIndex: dataSource.length
};
@ -52,6 +52,9 @@ class LedgerSalaryItemBaseInfo extends Component {
render() {
const { dataSource, onChangeSortableList, onPreview } = this.props;
const { empFieldListOptions } = this.state;
const options = _.map(empFieldListOptions, o => ({
...o, disabled: _.map(dataSource, g => g.fieldId).includes(o.key)
}));
return (
<WeaSearchGroup needTigger={false} showGroup title={<TitleComp onPreview={onPreview}/>}>
<div className="userInfoWrapper">
@ -77,7 +80,7 @@ class LedgerSalaryItemBaseInfo extends Component {
/>
<WeaSelect
showSearch
options={empFieldListOptions}
options={options}
style={{ width: 150 }}
onChange={this.handleAddEmpList}
/>

View File

@ -0,0 +1,91 @@
/*
* Author: 黎永顺
* name: 薪资账套查询
* Description:
* Date: 2023/11/27
*/
import React, { Component } from "react";
import { inject, observer } from "mobx-react";
import { Button } from "antd";
import { WeaSwitch } from "comsMobx";
import { WeaFormItem, WeaLocaleProvider, WeaSearchGroup, WeaTools } from "ecCom";
import { searchConditions } from "../config";
import { getTaxAgentSelectList } from "../../../apis/taxAgent";
const getKey = WeaTools.getKey;
const getLabel = WeaLocaleProvider.getLabel;
@inject("ledgerStore")
@observer
class LedgerSearchComp extends Component {
constructor(props) {
super(props);
this.state = {
conditions: []
};
}
componentDidMount() {
this.getTaxAgentSelectList();
}
getTaxAgentSelectList = () => {
const { ledgerStore: { searchForm } } = this.props;
getTaxAgentSelectList().then(({ status, data }) => {
if (status) {
this.setState({
conditions: _.map(searchConditions, o => {
return {
...o,
items: _.map(o.items, j => {
if (getKey(j) === "taxAgentId") {
return {
...j,
options: _.map(data, g => ({ key: g.id, showname: g.content }))
};
}
return { ...j };
})
};
})
}, () => searchForm.initFormFields(this.state.conditions));
}
});
};
formRender = (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"
>
<WeaSwitch fieldConfig={fields} form={form} formParams={formParams}/>
</WeaFormItem>),
colSpan: 2
});
});
group.push(
<WeaSearchGroup col={2} needTigger={true} title={c.title} showGroup={c.defaultshow} center={false}
items={items}/>);
});
return group;
};
render() {
const { conditions } = this.state;
const { ledgerStore: { searchForm } } = this.props;
return (
<div className="ledgerSearch-Wrapper">
{this.formRender(searchForm, conditions)}
<Button type="primary" onClick={this.props.onSearch}>{getLabel(388113, "搜索")}</Button>
</div>
);
}
}
export default LedgerSearchComp;

View File

@ -112,7 +112,7 @@ class LedgerSlide extends Component {
const { editId: salarySobId } = this.props;
const payload = {
empFields: _.map(empFields, it => {
if (Object.prototype.toString.call(it.id) === "[object Number]") delete it.id;
if (!it.salarySobId) delete it.id;
return { ...it };
}),
itemGroups: _.map(_.filter(itemGroups, it => it.name !== "未分类"), item => {

View File

@ -12,7 +12,7 @@ import { changeLedgerStatus, deleteLedger, getLedgerList } from "../../../apis/l
import CopyLedgerModal from "./copyLedgerModal";
import "./index.less";
@inject("taxAgentStore")
@inject("taxAgentStore", "ledgerStore")
@observer
class LedgerTable extends Component {
constructor(props) {
@ -42,9 +42,9 @@ class LedgerTable extends Component {
}
getLedgerList = (extra = {}) => {
const { name } = this.props;
const { ledgerStore: { searchForm } } = this.props;
const { pageInfo } = this.state;
const payload = { name, ...pageInfo, ...extra };
const payload = { ...searchForm.getFormParams(), ...pageInfo, ...extra };
this.setState({ loading: true });
getLedgerList(payload).then(({ status, data }) => {
this.setState({ loading: false });

View File

@ -27,6 +27,38 @@ export const copyConditions = [
defaultshow: true
}
];
export const searchConditions = [
{
items: [
{
colSpan: 1,
conditionType: "INPUT",
domkey: ["name"],
fieldcol: 24,
otherParams: {
placeholder: "请输入薪资账套名称"
},
lanId: 543431,
labelcol: 0,
value: "",
viewAttr: 2
},
{
colSpan: 1,
conditionType: "SELECT",
domkey: ["taxAgentId"],
fieldcol: 24,
placeholder: "请选择个税扣缴义务人",
lanId: 543234,
label: "",
labelcol: 0,
value: "",
viewAttr: 2
}
],
defaultshow: true
}
];
export const categoryConditions = [
{
items: [

View File

@ -6,10 +6,11 @@
*/
import React, { Component } from "react";
import { inject, observer } from "mobx-react";
import { WeaInputSearch, WeaTop } from "ecCom";
import { WeaTop } from "ecCom";
import { Button } from "antd";
import LedgerTable from "./components/ledgerTable";
import LedgerSlide from "./components/ledgerSlide";
import LedgerSearchComp from "./components/ledgerSearchComp";
import "./index.less";
@inject("taxAgentStore")
@ -60,11 +61,7 @@ class Index extends Component {
type="primary"
onClick={() => this.setState({ slideparams: { ...slideparams, visible: true } })}
>新建</Button>,
<WeaInputSearch
value={searchVal} placeholder="请输入薪资账套名称"
onChange={searchVal => this.setState({ searchVal })}
onSearch={() => this.setState({ doSearch: !doSearch })}
/>
<LedgerSearchComp onSearch={() => this.setState({ doSearch: !doSearch })}/>
];
return (
<WeaTop
@ -75,7 +72,7 @@ class Index extends Component {
buttons={showOperateBtn ? btns : btns.slice(-1)}
>
<div className="ledgerWrapper">
<LedgerTable name={searchVal} doSearch={doSearch} onEditLedger={this.handleEditLedger}/>
<LedgerTable doSearch={doSearch} onEditLedger={this.handleEditLedger}/>
<LedgerSlide
{...slideparams}
onCancel={this.handleResetLedger}

View File

@ -19,3 +19,38 @@
white-space: nowrap;
}
}
.ledgerSearch-Wrapper {
min-width: 350px;
margin-top: 5px;
margin-right: 70px;
position: relative;
& > button {
position: absolute;
right: -70px;
top: 0;
}
.wea-search-group, .wea-content {
padding: 0;
}
.wea-form-cell-wrapper {
& > div.wea-form-cell {
padding: 0;
.wea-form-item {
padding: 0;
.ant-select-selection-selected-value {
width: 150px !important;
}
}
}
& > div.wea-form-cell:first-child {
padding-right: 10px;
}
}
}

View File

@ -5,19 +5,19 @@ 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
},
// {
// colSpan: 2,
// checkbox: false,
// checkboxValue: false,
// conditionType: "SELECT",
// domkey: ["taxAgent"],
// fieldcol: 18,
// label: getLabel(111, "个税扣缴义务人"),
// labelcol: 6,
// options: [],
// multiple: true,
// viewAttr: 2
// },
{
browserConditionParam: {
completeParams: {},

View File

@ -125,7 +125,7 @@ class StatisticalMicroSettingsSlide extends Component {
const { form, id, dimension, onClose } = this.props;
const [salaryStartMonth, salaryEndMonth] = salaryMonth;
const { department, employee, position, subCompany, taxAgent, ...extra } = form.getFormDatas();
const { value, valueSpan } = taxAgent;
// const { value, valueSpan } = taxAgent;
if (!salaryEndMonth || !salaryStartMonth) {
this.refs.weaError.showError();
return;
@ -137,7 +137,7 @@ class StatisticalMicroSettingsSlide extends Component {
employee: _.map(employee.valueObj, it => ({ id: it.id, name: it.name })),
// position: _.map(position.valueObj, it => ({ id: it.id, name: it.name })),
subCompany: _.map(subCompany.valueObj, it => ({ id: it.id, name: it.name })),
taxAgent: value ? _.map(value.split(","), (it, idx) => ({ id: it, name: valueSpan.split(",")[idx] })) : [],
// taxAgent: value ? _.map(value.split(","), (it, idx) => ({ id: it, name: valueSpan.split(",")[idx] })) : [],
items: dataSource,
salaryEndMonth: salaryEndMonth + "-01",
salaryStartMonth: salaryStartMonth + "-01"

View File

@ -5,7 +5,16 @@
* Date: 2022-09-19 18:15:32
*/
import React, { Component } from "react";
import { WeaCheckbox, WeaFormItem, WeaLocaleProvider, WeaNewScroll, WeaSearchGroup, WeaSelect, WeaTop } from "ecCom";
import {
WeaCheckbox,
WeaFormItem,
WeaInputNumber,
WeaLocaleProvider,
WeaNewScroll,
WeaSearchGroup,
WeaSelect,
WeaTop
} from "ecCom";
import { message, Modal } from "antd";
import * as API from "../../apis/ruleconfig";
import "./index.less";
@ -28,7 +37,8 @@ export default class Index extends Component {
matchRule: "",
confValue: "0",
withDrawTaxDeclaration: "0",
extEmpsWitch: "0"
extEmpsWitch: "0",
salaryAcctFixedColumns: 0
},
showEncryptOperationButton: "",
progressVisible: false,
@ -56,7 +66,7 @@ export default class Index extends Component {
ascOrDesc = "", orderRule = "", showEncryptOperationButton, matchEmployeeMode: rule = "",
taxDeclarationFunction: operateTaxDeclaration = "1", salaryArchiveDelete: confValue,
salaryAcctEmployeeRule: matchRule, WITHDRAW_TAX_DECLARATION: withDrawTaxDeclaration = "0",
OPEN_APPLICATION_ENCRYPT: enctry = "1", extEmpsWitch = "0"
OPEN_APPLICATION_ENCRYPT: enctry = "1", extEmpsWitch = "0", salaryAcctFixedColumns = "0"
}
} = sysInfo;
// const { data: { ascOrDesc, orderRule } } = orderRules;
@ -76,7 +86,7 @@ export default class Index extends Component {
showEncryptOperationButton,
saveParams: {
...saveParams,
ascOrDesc, orderRule, rule, enctry, matchRule, confValue, withDrawTaxDeclaration,
ascOrDesc, orderRule, rule, enctry, matchRule, confValue, withDrawTaxDeclaration, salaryAcctFixedColumns,
extEmpsWitch, operateTaxDeclaration: (operateTaxDeclaration && operateTaxDeclaration !== "0") ? "1" : "0"
}
});
@ -228,7 +238,7 @@ export default class Index extends Component {
});
};
saveSysOperate = (payload) => {
API.saveSysOperate({ ...payload, confValue: this.state.saveParams.extEmpsWitch })
API.saveSysOperate({ ...payload })
.then(({ status, errormsg }) => {
if (status) {
message.success(getLabel(22619, "保存成功!"));
@ -286,7 +296,15 @@ export default class Index extends Component {
case "extEmpsWitch":
this.saveSysOperate({
title: getLabel(111, "开启非系统人员"),
module: "basic", confKey: key
module: "basic", confKey: key,
confValue: val
});
break;
case "salaryAcctFixedColumns":
this.saveSysOperate({
title: getLabel(111, "薪资核算固定列头数"),
module: "basic", confKey: key,
confValue: !_.isNil(val) ? val.toString() : "0"
});
break;
default:
@ -323,7 +341,8 @@ export default class Index extends Component {
matchRule,
confValue,
withDrawTaxDeclaration,
extEmpsWitch
extEmpsWitch,
salaryAcctFixedColumns
} = saveParams;
return (
<div className="ruleWrapper">
@ -386,6 +405,16 @@ export default class Index extends Component {
/>
</WeaFormItem>
</WeaSearchGroup>
<WeaSearchGroup title={getLabel(111, "薪资核算固定列头数")} showGroup center>
<WeaFormItem label={getLabel(111, "固定数")} labelCol={{ span: 6 }} wrapperCol={{ span: 18 }}>
<WeaInputNumber min={0} value={salaryAcctFixedColumns}
onChange={v => this.setState({
saveParams: { ...saveParams, salaryAcctFixedColumns: v }
})}
onBlur={val => this.handleChange("salaryAcctFixedColumns", val)}
/>
</WeaFormItem>
</WeaSearchGroup>
<WeaSearchGroup title={getLabel(111, "非系统人员")} showGroup center>
<WeaFormItem label={getLabel(111, "开启非系统人员")} labelCol={{ span: 8 }} wrapperCol={{ span: 16 }}>
<WeaCheckbox display="switch" value={extEmpsWitch}

View File

@ -1,65 +1,43 @@
export const columns = [
{
title: "账单月份",
dataIndex: 'title',
key: 'title',
},
{
title: "状态",
dataIndex: 'title',
key: 'title',
},
{
title: "社保核算人数",
dataIndex: 'title',
key: 'title',
},
{
title: "公积金核算人数",
dataIndex: 'title',
key: 'title',
},
{
title: "其他福利核算人数",
dataIndex: 'title',
key: 'title',
},
{
title: "公积金缴费",
dataIndex: 'title',
key: 'title',
},
{
title: "其他福利缴费",
dataIndex: 'title',
key: 'title',
},
{
title: "核算人",
dataIndex: 'title',
key: 'title',
},
{
title: "最后操作时间",
dataIndex: 'title',
key: 'title',
},
{
title: "备注",
dataIndex: 'title',
key: 'title',
},
{
title: "操作",
dataIndex: 'title',
key: 'title',
}
]
export const dataSource = [];
export const socialAccountConditions = [
{
items: [
{
colSpan: 1,
conditionType: "MONTHPICKER",
domkey: ["billMonth"],
fieldcol: 14,
label: "账单月份",
lanId: 542443,
labelcol: 6,
value: "",
rules: "required|string",
viewAttr: 3
},
{
colSpan: 1,
conditionType: "SELECT",
domkey: ["paymentOrganization"],
fieldcol: 14,
label: "个税扣缴义务人",
lanId: 537996,
labelcol: 6,
options: [],
rules: "required|string",
viewAttr: 3
},
{
colSpan: 1,
conditionType: "INPUT",
domkey: ["remarks"],
fieldcol: 14,
label: "备注",
lanId: 536726,
labelcol: 6,
value: "",
viewAttr: 2
}
],
defaultshow: true,
title: ""
}
];

View File

@ -5,86 +5,73 @@
* LastEditTime: 2022-06-28 15:52:31
*/
import React, { Component } from "react";
import { Button, Form, Input } from "antd";
import { WeaDatePicker, WeaDialog, WeaSelect } from "ecCom";
import { inject, observer } from "mobx-react";
import { Button } from "antd";
import { WeaDialog, WeaLocaleProvider, WeaTools } from "ecCom";
import { socialAccountConditions } from "../columns";
import { getSearchs } from "../../../../util";
import "./index.less";
const createForm = Form.create;
const FormItem = Form.Item;
const getLabel = WeaLocaleProvider.getLabel;
const getKey = WeaTools.getKey;
@inject("standingBookStore")
@observer
class Accountdialog extends Component {
constructor(props) {
super(props);
this.state = {};
this.state = { conditions: [] };
}
handleSubmit = e => {
const { onOk } = this.props;
e.preventDefault();
this.props.form.validateFields((errors, values) => {
if (!!errors) {
return;
componentWillReceiveProps(nextProps, nextContext) {
if (nextProps.visible !== this.props.visible && nextProps.visible) this.init(nextProps);
if (nextProps.visible !== this.props.visible && !nextProps.visible) nextProps.standingBookStore.initAccountForm();
}
init = (props) => {
this.setState({
conditions: _.map(socialAccountConditions, item => ({
...item, items: _.map(item.items, o => {
if (getKey(o) === "paymentOrganization") {
return {
...o, label: getLabel(o.lanId, o.label),
options: this.props.options
};
}
return { ...o, label: getLabel(o.lanId, o.label) };
})
}))
}, () => props.standingBookStore.accountForm.initFormFields(this.state.conditions));
};
handleSubmit = () => {
const { onOk, standingBookStore: { accountForm } } = this.props;
accountForm.validateForm().then(f => {
if (f.isValid) {
onOk(accountForm.getFormParams());
} else {
f.showErrors();
}
onOk(values);
});
};
render() {
const { getFieldProps } = this.props.form;
const formItemLayout = {
labelCol: { span: 7 },
wrapperCol: { span: 12 }
};
const { conditions } = this.state;
const { standingBookStore: { accountForm }, loading } = this.props;
return (
<WeaDialog
{...this.props}
style={{ width: 520 }}
initLoadCss
className="accountDialogWrapper"
style={{ width: 520, height: 156 }}
initLoadCss className="accountDialogWrapper"
buttons={[
<Button
type="primary"
onClick={this.handleSubmit}
loading={this.props.loading}>
<Button type="primary" onClick={this.handleSubmit} loading={loading}>
保存并进入核算
</Button>
]}>
<Form horizontal form={this.props.form} style={{ marginTop: 16 }}>
<FormItem {...formItemLayout} label="账单月份">
<WeaDatePicker
viewAttr={3}
style={{ width: "100%" }}
format="YYYY-MM"
{...getFieldProps("billMonth", {
initialValue: new Date(),
rules: [{ required: true, message: "请选择日期" }]
})}
/>
</FormItem>
{/* {
this.props.isAdmin && */}
<FormItem {...formItemLayout} label="个税扣缴义务人">
<WeaSelect
style={{ width: "100%" }}
viewAttr={3}
options={this.props.options}
{...getFieldProps("paymentOrganization", {
initialValue: "",
rules: [{ required: true, message: "请选择个税扣缴义务人" }]
})}
/>
</FormItem>
{/* } */}
<FormItem {...formItemLayout} label="备注">
<Input
type="textarea"
{...getFieldProps("remarks", { initialValue: "" })}
/>
</FormItem>
</Form>
{getSearchs(accountForm, conditions, 1, false)}
</WeaDialog>
);
}
}
export default createForm()(Accountdialog);
export default Accountdialog;

View File

@ -22,12 +22,38 @@
}
}
.accountDialogWrapper{
.wea-select,.ant-select,.ant-select-selection{
.accountDialogWrapper {
.wea-dialog-body {
background: #f6f6f6;
padding: 16px;
.wea-search-group {
padding: 0;
background: #fff;
border: 1px solid #e5e5e5;
border-bottom: none;
.wea-form-item {
padding: 5px 16px;
border-bottom: 1px solid #e5e5e5;
}
.wea-content, .wea-form-cell {
padding: 0;
}
}
}
.wea-select, .ant-select, .ant-select-selection {
width: 100%;
}
.ant-select-selection{
.ant-select-selection {
height: 30px;
border-radius: 0;
.ant-select-selection-selected-value {
max-width: 238px !important;
}
}
}

View File

@ -1,7 +1,7 @@
import React from "react";
import { inject, observer } from "mobx-react";
import { Button, DatePicker, Dropdown, Menu, message, Modal } from "antd";
import { WeaLocaleProvider, WeaNewScroll, WeaTop } from "ecCom";
import { WeaLocaleProvider, WeaNewScroll, WeaSelect, WeaTop } from "ecCom";
import { renderNoright } from "../../../util";
import Accountdialog from "./components/accountDialog";
import AbnormalDrawer from "./components/abnormalDrawer";
@ -25,7 +25,8 @@ export default class StandingBook extends React.Component {
selectedKey: "0",
tableParams: {
startTime: moment(new Date()).startOf("year").format("YYYY-MM"),
endTime: moment(new Date()).startOf("month").format("YYYY-MM")
endTime: moment(new Date()).startOf("month").format("YYYY-MM"),
paymentOrganization: ""
},
current: 1,
dialogProps: {
@ -344,6 +345,7 @@ export default class StandingBook extends React.Component {
progressVisible: false,
progress: 0
});
message.error(data.message);
return;
}
if (this.state.progress !== 100) {
@ -423,7 +425,7 @@ export default class StandingBook extends React.Component {
tableStore
} = standingBookStore;
const { list, columns, total } = this.state.tableData;
const { startTime, endTime } = this.state.tableParams;
const { startTime, endTime, paymentOrganization } = this.state.tableParams;
const { dialogProps, drawerProps } = this.state;
const abnormalColumns = _.map(
_.filter(tableStore.columns, (it) => it.hide && it.hide === "false"),
@ -465,31 +467,32 @@ export default class StandingBook extends React.Component {
return (
<div className="standingbookWrapper">
<WeaTop
title="社保福利台账" // 文字
icon={<i className="icon-coms-fa"/>} // 左侧图标
iconBgcolor="#F14A2D" // 左侧图标背景色
buttons={showOperateBtn ? rightBtns : []}
<WeaTop title="社保福利台账" icon={<i className="icon-coms-fa"/>}
iconBgcolor="#F14A2D" buttons={showOperateBtn ? rightBtns : []}
>
<div className="billDateWrapper">
<div>账单月份</div>
<MonthPicker
value={startTime}
format="YYYY-MM"
disabledDate={(current) => {
return current && endTime && current.getTime() > new Date(endTime).getTime();
}}
onChange={(val) => this.handleChangeMonth("startTime", val)}
/>
<span className="to"></span>
<MonthPicker
value={endTime}
format="YYYY-MM"
disabledDate={(current) => {
return current && startTime && current.getTime() < new Date(startTime).getTime();
}}
onChange={(val) => this.handleChangeMonth("endTime", val)}
/>
<div className="filterWrapper">
<div className="billDateWrapper">
<div>账单月份</div>
<MonthPicker value={startTime} format="YYYY-MM"
disabledDate={current => (current && endTime && current.getTime() > new Date(endTime).getTime())}
onChange={(val) => this.handleChangeMonth("startTime", val)}
/>
<span className="to"></span>
<MonthPicker value={endTime} format="YYYY-MM"
disabledDate={current => (current && startTime && current.getTime() < new Date(startTime).getTime())}
onChange={(val) => this.handleChangeMonth("endTime", val)}
/>
</div>
<div className="billDateWrapper">
<span className="to">{getLabel(537996, "个税扣缴义务人")}</span>
<WeaSelect value={paymentOrganization} options={dialogProps.options} style={{ width: 200 }}
onChange={val => this.setState({
tableParams: { ...this.state.tableParams, paymentOrganization: val }
}, () => {
this.getCommonList({ ...this.state.tableParams, ...this.pageInfo });
})}
/>
</div>
</div>
<div className="tableWrapper">
<WeaNewScroll height="100%">
@ -522,15 +525,7 @@ export default class StandingBook extends React.Component {
/>
</WeaNewScroll>
</div>
{dialogProps.visible && (
<Accountdialog
{...dialogProps}
onCancel={() => this.handleClose()}
onOk={this.handleOk}
loading={loading}
/>
)}
<Accountdialog {...dialogProps} onCancel={() => this.handleClose()} onOk={this.handleOk} loading={loading}/>
{/*核算进度条*/}
{
this.state.progressVisible &&

View File

@ -38,14 +38,19 @@
}
}
.billDateWrapper {
.filterWrapper {
display: flex;
align-items: center;
height: 46px;
padding: 0 16px;
.to {
padding: 0 8px;
.billDateWrapper {
display: flex;
align-items: center;
height: 46px;
padding: 0 16px;
.to {
padding: 0 8px;
}
}
}
}

View File

@ -0,0 +1,223 @@
/*
* Author: 黎永顺
* name: 添加补差人员
* Description:
* Date: 2023/11/28
*/
import React, { Component } from "react";
import { inject, observer } from "mobx-react";
import { WeaDialog, WeaInputNumber, WeaLocaleProvider, WeaSearchGroup, WeaTableEdit } from "ecCom";
import * as API from "../../../../apis/standingBook";
import { Button, message } from "antd";
import { addPersonConditions } from "../constant";
import { getSearchs, toDecimal_n } from "../../../../util";
import { convertData } from "./supplementarySlide";
const getLabel = WeaLocaleProvider.getLabel;
@inject("standingBookStore")
@observer
class AddCompensationPersonnelDialog extends Component {
constructor(props) {
super(props);
this.state = {
conditions: [], paymentList: [
{ title: getLabel(538967, "社保"), titleSign: "social", payment: [] },
{ title: getLabel(538969, "公积金"), titleSign: "fund", payment: [] },
{ title: getLabel(542518, "企业年金及其它福利"), titleSign: "other", payment: [] }
], loading: false
};
}
componentWillReceiveProps(nextProps, nextContext) {
if (nextProps.visible !== this.props.visible && nextProps.visible) {
const { standingBookStore: { addCPForm } } = nextProps;
this.setState({
conditions: _.map(addPersonConditions, o => {
return {
...o,
items: _.map(o.items, g => ({
...g, label: getLabel(g.lanId, g.label)
})),
title: getLabel(111, "补差人员")
};
})
}, () => addCPForm.initFormFields(this.state.conditions));
}
if (nextProps.visible !== this.props.visible && !nextProps.visible) nextProps.standingBookStore.initAddCPForm();
}
getBalancePaymentGroup = () => {
const { standingBookStore: { addCPForm }, paymentOrganization } = this.props;
const payload = { ...addCPForm.getFormParams(), paymentOrganization };
API.getBalancePaymentGroup(payload).then(({ status, data }) => {
if (status && !_.isEmpty(data)) {
this.setState({
paymentList: [
{
title: getLabel(538967, "社保"), titleSign: "social",
payment: convertData(_.filter(data, it => it.titleSign === "social"))
},
{
title: getLabel(538969, "公积金"), titleSign: "fund",
payment: convertData(_.filter(data, it => it.titleSign === "fund"))
},
{
title: getLabel(542518, "企业年金及其它福利"), titleSign: "other",
payment: convertData(_.filter(data, it => it.titleSign === "other"))
}
]
});
} else {
message.error(getLabel(111, "数据不存在!"));
this.setState({
paymentList: [
{ title: getLabel(538967, "社保"), titleSign: "social", payment: [] },
{ title: getLabel(538969, "公积金"), titleSign: "fund", payment: [] },
{ title: getLabel(542518, "企业年金及其它福利"), titleSign: "other", payment: [] }
]
});
}
});
};
renderColumns = () => {
return [
{
title: getLabel(543262, "福利项"),
dataIndex: "insuranceName",
key: "insuranceName",
com: [
{ label: "", type: "INPUT", viewAttr: 1, key: "insuranceName" }
],
colSpan: 1,
width: "33%"
},
{
title: getLabel(543263, "个人缴纳金额"),
dataIndex: "custom",
key: "custom",
com: [
{
type: "custom",
key: "custom",
render: (text, record, index, onEdit) => (
<WeaInputNumber precision={2} value={record[`${record.insuranceId}_per`]} disabled={record.perDisabled}
onChange={v => onEdit({
record: { ...record, [`${record.insuranceId}_per`]: v },
index, key: "per", value: v
})}
/>
)
}
],
colSpan: 1,
width: "33%"
},
{
title: getLabel(543264, "单位缴纳金额"),
dataIndex: "custom",
key: "custom",
com: [
{
type: "custom",
key: "custom",
render: (text, record, index, onEdit) => (
<WeaInputNumber precision={2} value={record[`${record.insuranceId}_com`]} disabled={record.comDisabled}
onChange={v => onEdit({
record: { ...record, [`${record.insuranceId}_com`]: v },
index, key: "com", value: v
})}
/>
)
}
],
colSpan: 1,
width: "33%"
}
];
};
save = () => {
const { standingBookStore: { addCPForm }, paymentOrganization, billMonth } = this.props;
const { paymentList } = this.state;
addCPForm.validateForm().then(f => {
if (f.isValid) {
const payload = {
billMonth, paymentOrganization, ...addCPForm.getFormParams(),
...this.convertItemJSON(_.find(paymentList, i => i.titleSign === "social").payment, "social"),
...this.convertItemJSON(_.find(paymentList, i => i.titleSign === "fund").payment, "fund"),
...this.convertItemJSON(_.find(paymentList, i => i.titleSign === "other").payment, "other")
};
this.setState({ loading: true });
API.addNewBalance(payload).then(({ status, errormsg }) => {
this.setState({ loading: false });
if (status) {
message.success(getLabel(30700, "操作成功!"));
this.props.onCancel(true);
} else {
message.error(errormsg);
}
}).catch(() => this.setState({ loading: false }));
} else {
f.showErrors();
}
});
};
convertItemJSON = (list, type) => {
let perJson = {}, comJson = {};
_.forEach(list, o => {
if (!_.isNil(o.per)) {
perJson = _.assign(perJson, { [o.insuranceId]: toDecimal_n(o.per, 2) });
}
if (!_.isNil(o.com)) {
comJson = _.assign(comJson, { [o.insuranceId]: toDecimal_n(o.com, 2) });
}
});
return { [`${type}PerJson`]: JSON.stringify(perJson), [`${type}ComJson`]: JSON.stringify(comJson) };
};
getRowSelection = (rowSelection) => {
let sel = { ...rowSelection };
sel.getCheckboxProps = (record) => {
return { disabled: true };
};
return sel;
};
render() {
const { conditions, paymentList, loading } = this.state;
const { standingBookStore: { addCPForm } } = this.props;
return (
<WeaDialog {...this.props} scalable title={getLabel(111, "添加补差人员")} initLoadCss
className="add-comp-per-dialog"
buttons={[<Button type="primary" onClick={this.save}
loading={loading}>{getLabel(826, "确定")}</Button>]}
style={{
width: 800, height: 600, minHeight: 200, minWidth: 380, maxHeight: "90%",
maxWidth: "90%", overflow: "hidden", transform: "translate(0px, 0px)"
}}
>
<div className="add-comp-per-content">
<div className="form">{getSearchs(addCPForm, conditions, 1, false, this.getBalancePaymentGroup)}</div>
{
_.map(paymentList, item => (
<WeaSearchGroup title={item.title} showGroup needTigger>
<WeaTableEdit columns={this.renderColumns()} datas={item.payment} showTitle={false}
getRowSelection={this.getRowSelection}
onChange={payment => this.setState({
paymentList: _.map(paymentList, o => {
if (o.titleSign === item.titleSign) {
return { ...o, payment };
}
return { ...o };
})
})}
/>
</WeaSearchGroup>
))
}
</div>
</WeaDialog>
);
}
}
export default AddCompensationPersonnelDialog;

View File

@ -150,6 +150,67 @@
}
}
//补差添加人员弹框
.add-comp-per-dialog {
.wea-dialog-body {
overflow: hidden;
.add-comp-per-content {
height: 100%;
background: #F6F6F6;
padding: 16px;
overflow-y: auto;
.form {
margin-bottom: 10px;
.wea-search-group {
padding: 0;
background: #FFF;
.wea-title {
background: #f6f6f6;
border-bottom: none;
.text-elli {
font-weight: bold;
}
}
.wea-content {
padding: 0;
.wea-form-cell {
padding: 0;
.wea-form-item {
padding: 4px 16px;
border: 1px solid #e5e5e5;
}
}
}
}
}
.wea-search-group {
padding: 0;
.wea-title {
background: #f6f6f6;
.text-elli {
font-weight: bold;
}
}
.wea-table-edit {
background: #fff;
}
}
}
}
}
//退差人员选择框
.regSelectWrapper {
}

View File

@ -19,7 +19,7 @@ class InputPaymentAmount extends Component {
render: (text, record) => {
return (
<WeaInputNumber
value={record[`${record.insuranceId}_per`]}
value={record[`${record.insuranceId}_per`]} disabled={record.perDisabled}
precision={2} onChange={(val) => this.handleChangeBaseItem(record, val, type, "per")}
/>
);
@ -30,7 +30,7 @@ class InputPaymentAmount extends Component {
render: (text, record) => {
return (
<WeaInputNumber
value={record[`${record.insuranceId}_com`]}
value={record[`${record.insuranceId}_com`]} disabled={record.comDisabled}
precision={2} onChange={(val) => this.handleChangeBaseItem(record, val, type, "com")}
/>
);

View File

@ -14,23 +14,20 @@ import { calcPageNo } from "../../../../util";
import RegList from "./regList";
import RegEditDetial from "./regEditDetial";
import AcctResultImportModal from "../../../calculateDetail/acctResult/importModal/acctResultImportModal";
import AddCompensationPersonnelDialog from "./addCompensationPersonnelDialog";
import "./index.less";
class MakeupDifference extends Component {
constructor(props) {
super(props);
this.state = {
selectKey: [],
fieldData: {},
selectKey: [], fieldData: {}, loading: { save: false }, importDiffModal: { visible: false },
returnEditPersonSlide: {
title: "",
editId: "",
visible: false
title: "", editId: "", visible: false
},
importDiffModal: {
visible: false
},
loading: { save: false }
addPersonalDialog: {
visible: false, paymentOrganization: "", billMonth: ""
}
};
this.diffListRef = null;
this.regTopRef = null;
@ -54,7 +51,7 @@ class MakeupDifference extends Component {
});
};
handleChangeOpt = (key) => {
const { importDiffModal } = this.state;
const { importDiffModal, addPersonalDialog } = this.state;
const name = this.regTopRef.state.name;
const workcode = this.regTopRef.state.workcode;
const billMonth = getQueryString("billMonth");
@ -77,6 +74,13 @@ class MakeupDifference extends Component {
case "search":
this.diffListRef.recessionList({ userName: name, workcode, current: 1 });
break;
case "add":
this.setState({
addPersonalDialog: {
...addPersonalDialog, visible: true, paymentOrganization, billMonth
}
});
break;
default:
break;
}
@ -99,7 +103,7 @@ class MakeupDifference extends Component {
render() {
const billMonth = getQueryString("billMonth");
const { selectKey, importDiffModal, fieldData, returnEditPersonSlide } = this.state;
const { selectKey, importDiffModal, fieldData, returnEditPersonSlide, addPersonalDialog } = this.state;
return (
<div className="differenceWrapper">
<RegTop
@ -119,6 +123,15 @@ class MakeupDifference extends Component {
/>
{/*编辑弹框*/}
<RegEditDetial {...returnEditPersonSlide} onCancel={this.handleCloseModal}/>
{/*添加补差人员*/}
<AddCompensationPersonnelDialog {...addPersonalDialog}
onCancel={(isRefresh) => this.setState({
addPersonalDialog: {
...addPersonalDialog,
visible: false
}
}, () => isRefresh && this.diffListRef.recessionList())}
/>
{/*导入补差*/}
{
importDiffModal.visible &&

View File

@ -5,11 +5,14 @@
* Date: 2022/11/23
*/
import React, { Component } from "react";
import { WeaInputNumber, WeaSearchGroup, WeaSlideModal, WeaTable } from "ecCom";
import { WeaInputNumber, WeaLocaleProvider, WeaSearchGroup, WeaSlideModal, WeaTable } from "ecCom";
import { message } from "antd";
import * as API from "../../../../apis/standingBook";
import SlideModalTitle from "../../../../components/slideModalTitle";
import { regColumns } from "../constant";
import { toDecimal_n } from "../../../../util";
const getLabel = WeaLocaleProvider.getLabel;
class RegEditDetial extends Component {
constructor(props) {
@ -111,26 +114,26 @@ class RegEditDetial extends Component {
};
_.forEach(socialData.dataSource, item => {
if (item.personalPaymentAmount) {
payload["socialPerJson"][item["insuranceId"]] = item.personalPaymentAmount;
payload["socialPerJson"][item["insuranceId"]] = toDecimal_n(item.personalPaymentAmount, 2);
}
if (item.companyPaymentAmount) {
payload["socialComJson"][item["insuranceId"]] = item.companyPaymentAmount;
payload["socialComJson"][item["insuranceId"]] = toDecimal_n(item.companyPaymentAmount, 2);
}
});
_.forEach(foundData.dataSource, item => {
if (item.personalPaymentAmount) {
payload["fundPerJson"][item["insuranceId"]] = item.personalPaymentAmount;
payload["fundPerJson"][item["insuranceId"]] = toDecimal_n(item.personalPaymentAmount, 2);
}
if (item.companyPaymentAmount) {
payload["fundComJson"][item["insuranceId"]] = item.companyPaymentAmount;
payload["fundComJson"][item["insuranceId"]] = toDecimal_n(item.companyPaymentAmount, 2);
}
});
_.forEach(otherData.dataSource, item => {
if (item.personalPaymentAmount) {
payload["otherPerJson"][item["insuranceId"]] = item.personalPaymentAmount;
payload["otherPerJson"][item["insuranceId"]] = toDecimal_n(item.personalPaymentAmount, 2);
}
if (item.companyPaymentAmount) {
payload["otherComJson"][item["insuranceId"]] = item.companyPaymentAmount;
payload["otherComJson"][item["insuranceId"]] = toDecimal_n(item.companyPaymentAmount, 2);
}
});
_.forEach(Object.keys(payload), item => {
@ -198,13 +201,13 @@ class RegEditDetial extends Component {
let socialSecurity = [], accumulationFund = [], otherBenefits = [];
const { data: result } = data;
_.map(result, it => {
if (it.title.indexOf("社保") !== -1) {
if (it.titleSign === "social") {
socialSecurity.push(it);
}
if (it.title.indexOf("公积金") !== -1) {
if (it.titleSign === "fund") {
accumulationFund.push(it);
}
if (it.title.indexOf("其他") !== -1) {
if (it.titleSign === "other") {
otherBenefits.push(it);
}
});
@ -226,9 +229,9 @@ class RegEditDetial extends Component {
result = _.map(_.uniqWith(fieldItems, _.isEqual), item => {
let obj = { benefits: item };
_.forEach(data, it => {
if (item === it.insuranceName && it.paymentScope === "个人") {
if (item === it.insuranceName && it.paymentScopeSign === "per") {
obj = _.assign(obj, { ...it, personalPaymentAmount: it.insuranceValue });
} else if (item === it.insuranceName && it.paymentScope === "公司") {
} else if (item === it.insuranceName && it.paymentScopeSign === "com") {
obj = _.assign(obj, { ...it, companyPaymentAmount: it.insuranceValue });
}
});

View File

@ -1,8 +1,10 @@
import React, { Component } from "react";
import { Button } from "antd";
import { WeaFormItem, WeaHelpfulTip, WeaInput, WeaSearchGroup, WeaTab } from "ecCom";
import { WeaFormItem, WeaHelpfulTip, WeaInput, WeaLocaleProvider, WeaSearchGroup, WeaTab } from "ecCom";
import { getQueryString } from "../../../../util/url";
const getLabel = WeaLocaleProvider.getLabel;
class RegTop extends Component {
constructor(props) {
super(props);
@ -38,13 +40,16 @@ class RegTop extends Component {
if (!type) {
const [dom1, ...extra] = dom;
const domBtn = regtopType === "regression" ?
<Button type="primary" onClick={() => onChange("add")}>添加</Button> :
<Button type="primary" onClick={() => onChange("import")}>导入</Button>;
[<Button type="primary" onClick={() => onChange("add")}>添加</Button>] :
[
<Button type="primary" onClick={() => onChange("add")}>{getLabel(384113, "添加")}</Button>,
<Button type="primary" onClick={() => onChange("import")}>{getLabel(32935, "导入")}</Button>
];
dom = [
dom1,
<Button type="primary" disabled={_.isEmpty(selectKey)} onClick={() => onChange("delete")}>
删除
</Button>, domBtn, ...extra
</Button>, ...domBtn, ...extra
];
}
return dom;
@ -69,7 +74,7 @@ class RegTop extends Component {
{
title: `账单月份: ${billMonth}`,
viewcondition: "1"
},
}
]}
keyParam="viewcondition" selectedKey="" advanceHeight={200} searchsAd={this.getSearchs()}
searchType={["base", "advanced"]} showSearchAd={showSearchAd}

View File

@ -7,7 +7,7 @@
import React, { Component } from "react";
import { inject, observer } from "mobx-react";
import { message, Modal } from "antd";
import { WeaFormItem, WeaSearchGroup, WeaSelect, WeaSlideModal } from "ecCom";
import { WeaFormItem, WeaLocaleProvider, WeaSearchGroup, WeaSelect, WeaSlideModal } from "ecCom";
import SlideModalTitle from "../../../../components/slideModalTitle";
import { Picker, SelectWithAll } from "./regAddEmployee";
import { Browser } from "../../../dataAcquisition/addItems";
@ -15,6 +15,9 @@ import { getPaymentGroup, getSupplementPaymentForm, siaccountSupplementarySave }
import "./index.less";
import BusinessAccounting from "./businessAccounting";
import InputPaymentAmount from "./inputPaymentAmount";
import { toDecimal_n } from "../../../../util";
const getLabel = WeaLocaleProvider.getLabel;
@inject("taxAgentStore")
@observer
@ -88,8 +91,12 @@ class SupplementarySlide extends Component {
_.map(inputPaymentAmount[item], child => {
const key = child.insuranceId, valuePer = child[`${child.insuranceId}_per`],
valueCom = child[`${child.insuranceId}_com`];
_.assign(payload[`${item}PerString`], { [key]: valuePer ? valuePer.toString() : "0" });
_.assign(payload[`${item}ComString`], { [key]: valueCom ? valueCom.toString() : "0" });
if (!child.perDisabled) {
_.assign(payload[`${item}PerString`], { [key]: toDecimal_n(valuePer, 2) || "0" });
}
if (!child.comDisabled) {
_.assign(payload[`${item}ComString`], { [key]: toDecimal_n(valueCom, 2) || "0" });
}
});
});
for (let i in payload) {
@ -97,22 +104,6 @@ class SupplementarySlide extends Component {
}
return payload;
};
convertData = (dataSource) => {
let endList = [];
_.values(_.groupBy(dataSource, "insuranceName")).forEach((itemList) => {
let data = {};
itemList.forEach(d => {
const perKey = `${d.insuranceId}_per`, comKey = `${d.insuranceId}_com`;
data = _.assign(data, {
...d,
[perKey]: "",
[comKey]: ""
});
});
return endList.push(data);
});
return endList;
};
handleSaveSupplementSalary = () => {
const { billMonth, paymentOrganization, onCancel } = this.props;
const { baseInfo } = this.state;
@ -185,9 +176,9 @@ class SupplementarySlide extends Component {
if (status) {
this.setState({
businessAccounting: {
socialSecurityBase: _.filter(data, it => it.title === "社保"),
fundBase: _.filter(data, it => it.title === "公积金"),
otherBase: _.filter(data, it => it.title === "企业年金及其它福利")
socialSecurityBase: _.filter(data, it => it.titleSign === "social"),
fundBase: _.filter(data, it => it.titleSign === "fund"),
otherBase: _.filter(data, it => it.titleSign === "other")
}
});
} else {
@ -214,9 +205,9 @@ class SupplementarySlide extends Component {
if (status) {
this.setState({
inputPaymentAmount: {
socialPayment: this.convertData(_.filter(data, it => it.title === "社保")),
fundPayment: this.convertData(_.filter(data, it => it.title === "公积金")),
otherPayment: this.convertData(_.filter(data, it => it.title === "企业年金及其它福利"))
socialPayment: convertData(_.filter(data, it => it.titleSign === "social")),
fundPayment: convertData(_.filter(data, it => it.titleSign === "fund")),
otherPayment: convertData(_.filter(data, it => it.titleSign === "other"))
}
});
} else {
@ -348,6 +339,16 @@ class SupplementarySlide extends Component {
...baseInfo,
supplementType,
historyMonth: ""
},
businessAccounting: {
socialSecurityBase: [],
fundBase: [],
otherBase: []
},
inputPaymentAmount: {
socialPayment: [],
fundPayment: [],
otherPayment: []
}
}, () => this.handleChangeItem());
}
@ -431,3 +432,22 @@ export const SelectDetailType = payload => {
</WeaFormItem>
);
};
export const convertData = (dataSource) => {
let endList = [];
_.values(_.groupBy(dataSource, "insuranceName")).forEach((itemList) => {
let data = {};
itemList.forEach(d => {
const perKey = `${d.insuranceId}_per`, comKey = `${d.insuranceId}_com`;
data = _.assign(data, {
...d,
[perKey]: "",
[comKey]: "",
perDisabled: !_.includes(_.map(itemList, o => o.paymentScopeSign), "per"),
comDisabled: !_.includes(_.map(itemList, o => o.paymentScopeSign), "com")
});
});
return endList.push(data);
});
return endList;
};

View File

@ -1,50 +1,56 @@
export const unArchiveTabs = [
{
title: "正常缴纳",
viewcondition: "NORMAL",
},
{
title: "异动清单",
viewcondition: "LIST",
},
{
title: "补缴",
viewcondition: "PAY",
},
{
title: "总览",
viewcondition: "OVERVIEW",
},
];
export const archiveTabs = [
{
title: "正常缴纳",
viewcondition: "NORMAL",
},
{
title: "补缴",
viewcondition: "PAY",
},
{
title: "总览",
viewcondition: "OVERVIEW",
},
];
export const regColumns = [
{
title: '福利项',
dataIndex: 'benefits',
key: 'benefits',
title: "福利项",
dataIndex: "benefits",
key: "benefits"
},
{
title: '个人缴纳金额',
dataIndex: 'personalPaymentAmount',
key: 'personalPaymentAmount',
title: "个人缴纳金额",
dataIndex: "personalPaymentAmount",
key: "personalPaymentAmount"
},
{
title: '单位缴纳金额',
dataIndex: 'companyPaymentAmount',
key: 'companyPaymentAmount',
},
title: "单位缴纳金额",
dataIndex: "companyPaymentAmount",
key: "companyPaymentAmount"
}
];
export const addPersonConditions = [
{
items: [
{
colSpan: 1,
conditionType: "BROWSER",
browserConditionParam: {
completeParams: {},
conditionDataParams: {},
dataParams: {},
destDataParams: {},
hasAddBtn: false,
hasAdvanceSerach: true,
idSeparator: ",",
isAutoComplete: 1,
isDetail: 0,
isMultCheckbox: false,
isSingle: true,
linkUrl: "/hrm/resource/HrmResource.jsp?id=",
pageSize: 10,
quickSearchName: "",
replaceDatas: [],
title: "",
type: "1"
},
domkey: ["employeeId"],
fieldcol: 14,
label: "对象",
lanId: 106,
labelcol: 7,
rules: "required|string",
viewAttr: 3,
value: ""
}
],
defaultshow: true,
title: ""
}
];

View File

@ -7,6 +7,12 @@ import * as API from "../apis/standingBook";
const { TableStore } = WeaTableNew;
export class StandingBookStore {
@observable accountForm = new WeaForm(); // 社保台账核算Form
@action initAccountForm = () => this.accountForm = new WeaForm();
@observable addCPForm = new WeaForm(); // 社保台账详情页面添加补差人员form
@action initAddCPForm = () => this.addCPForm = new WeaForm();
@observable tableStore = new TableStore(); // new table
@observable form = new WeaForm(); // nrew 一个form
@observable ocForm = new WeaForm(); // 社保福利线下对比form

View File

@ -12,6 +12,7 @@ export class LedgerStore {
//重构薪资账套
@observable copyForm = new WeaForm(); // 复制form
@observable categoryForm = new WeaForm(); // 新增分类form
@observable searchForm = new WeaForm(); // 查询form
/*******************************************************/