Merge branch 'release/2.9.42308.02' into release/2.9.42308.02-个税

# Conflicts:
#	pc4mobx/hrmSalary/pages/calculateDetail/index.less
This commit is contained in:
黎永顺 2023-09-04 09:32:57 +08:00
commit dac0ec3197
23 changed files with 186 additions and 117 deletions

View File

@ -139,16 +139,8 @@ const Routes = (
</Route> </Route>
<Route key="ledger" path="ledger" component={Ledger}/> <Route key="ledger" path="ledger" component={Ledger}/>
<Route key="calculate" path="calculate" component={Calculate}/> <Route key="calculate" path="calculate" component={Calculate}/>
<Route <Route key="calculateDetail" path="calculateDetail" component={CalculateDetail}/>
key="calculateDetail" <Route key="placeOnFileDetail" path="placeOnFileDetail" component={PlaceOnFileDetail}/>
path="calculateDetail"
component={CalculateDetail}
/>
<Route
key="placeOnFileDetail"
path="placeOnFileDetail"
component={PlaceOnFileDetail}
/>
<Route key="compareDetail" path="compareDetail" component={CompareDetail}/> <Route key="compareDetail" path="compareDetail" component={CompareDetail}/>
<Route key="payroll" path="payroll" component={Payroll}/> <Route key="payroll" path="payroll" component={Payroll}/>
<Route key="watermarkPreview" path="payroll/watermark/preview" component={WatermarkPreview}/> <Route key="watermarkPreview" path="payroll/watermark/preview" component={WatermarkPreview}/>

View File

@ -353,18 +353,10 @@ export default class CalculateDetail extends React.Component {
onClick={() => this.downloadTxtfile(accountExceptInfo)}/>); onClick={() => this.downloadTxtfile(accountExceptInfo)}/>);
return buttons; return buttons;
}; };
const topTab = [ const topTab = [
{ { title: "人员确认", viewcondition: "0" },
title: "人员确认", { title: "薪资核算", viewcondition: "1" }
viewcondition: "0"
},
{
title: "薪资核算",
viewcondition: "1"
}
]; ];
const adBtn = [ const adBtn = [
// 高级搜索内部按钮 // 高级搜索内部按钮
<Button type="primary" onClick={() => { <Button type="primary" onClick={() => {
@ -407,19 +399,19 @@ export default class CalculateDetail extends React.Component {
return ( return (
<Authority ecId={`${this && this.props && this.props.ecId || ""}_Authority@lulowc`} <Authority ecId={`${this && this.props && this.props.ecId || ""}_Authority@lulowc`}
store={{ loading: false, hasRight: payrollPermission && calculateAuth }}> store={{ loading: false, hasRight: payrollPermission && calculateAuth }}>
<div style={{ overflowY: "hidden", height: "100%" }}> <div className="calculate-layout">
<WeaTab <WeaTab
datas={topTab} datas={topTab}
selectedKey={selectedKey} selectedKey={selectedKey}
keyParam="viewcondition" keyParam="viewcondition"
onChange={v => this.setState({ selectedKey: v })} onChange={v => this.setState({ selectedKey: v })}
searchType={selectedKey == 1 ? ["base", "advanced"] : []} // base基础搜索框 advanced显示高级搜索按钮 searchType={selectedKey === "1" ? ["base", "advanced"] : []} // base基础搜索框 advanced显示高级搜索按钮
showSearchAd={showSearchAd} // 是否展开高级搜索面板 showSearchAd={showSearchAd} // 是否展开高级搜索面板
setShowSearchAd={(bool) => this.setState({ showSearchAd: bool })} //高级搜索面板受控 setShowSearchAd={(bool) => this.setState({ showSearchAd: bool })} //高级搜索面板受控
searchsAd={renderSearch()} // 高级搜索内部数据getSearchs(form, toJS(condition), 2) searchsAd={renderSearch()} // 高级搜索内部数据getSearchs(form, toJS(condition), 2)
buttonsAd={adBtn} // 高级搜索内部按钮 buttonsAd={adBtn} // 高级搜索内部按钮
onSearch={() => this.handleSearch(this.state.searchItemsValue)} // 点搜索按钮时的回调 onSearch={() => this.handleSearch(this.state.searchItemsValue)} // 点搜索按钮时的回调
buttons={selectedKey == 1 ? renderRightOperation() : []} buttons={selectedKey === "1" ? renderRightOperation() : []}
searchsBasePlaceHolder={"请输入姓名"} searchsBasePlaceHolder={"请输入姓名"}
onSearchChange={(v) => onSearchChange={(v) =>
this.setState({ this.setState({
@ -431,8 +423,8 @@ export default class CalculateDetail extends React.Component {
} // 在搜索框中输入的文字改变时的回调: 这里需要同步高级搜索和外部搜索框的值form.updateFields({ username: v }) } // 在搜索框中输入的文字改变时的回调: 这里需要同步高级搜索和外部搜索框的值form.updateFields({ username: v })
searchsBaseValue={this.state.searchItemsValue.employeeName} // 外部input搜索值受控: 这里和高级搜索的requestname同步form.getFormParams().username searchsBaseValue={this.state.searchItemsValue.employeeName} // 外部input搜索值受控: 这里和高级搜索的requestname同步form.getFormParams().username
/> />
{selectedKey == 0 && <UserSure/>} {selectedKey === "0" && <UserSure/>}
{selectedKey == 1 && <SalaryDetail onChangeAccountIds={(ids) => this.setState({ accountIds: ids })} {selectedKey === "1" && <SalaryDetail onChangeAccountIds={(ids) => this.setState({ accountIds: ids })}
employeeName={this.state.searchItemsValue}/>} employeeName={this.state.searchItemsValue}/>}
{acctResultImportVisiable && {acctResultImportVisiable &&
<AcctResultImportModal <AcctResultImportModal

View File

@ -1,3 +1,17 @@
.calculate-layout {
height: 100%;
overflow-y: hidden;
background: #f6f6f6;
.wea-tab .wea-tab-right {
background: #f6f6f6;
}
.wea-input-focus {
background: transparent;
}
}
.userSure { .userSure {
padding: 20px; padding: 20px;
@ -9,6 +23,7 @@
.formWrapper { .formWrapper {
line-height: 40px; line-height: 40px;
border: 1px solid #eee; border: 1px solid #eee;
background: #fff;
.ant-col-12 { .ant-col-12 {
padding: 0 16px; padding: 0 16px;
@ -71,8 +86,8 @@
} }
.salaryDetail { .salaryDetail {
padding: 10px 20px; padding: 10px;
overflow-y: scroll; overflow-y: auto;
.salaryBarWrapper { .salaryBarWrapper {
padding: 10px; padding: 10px;
@ -152,7 +167,8 @@
.placeOnFileDetail { .placeOnFileDetail {
height: 100%; height: 100%;
overflow-y: auto; overflow-y: hidden;
background: #f6f6f6;
.tabWrapper { .tabWrapper {
height: 47px; height: 47px;
@ -254,3 +270,9 @@
} }
} }
} }
.salaryMonthTip-layout{
display: flex;
flex-direction: column;
}

View File

@ -29,11 +29,11 @@ class IssuedAndReissueTable extends Component {
/> />
</span>, </span>,
render: (text, record) => { render: (text, record) => {
const { canEdit } = record; const { canEdit, pattern } = record;
return <WeaInputNumber return <WeaInputNumber
disabled={!canEdit} disabled={!canEdit}
min={0} min={0}
precision={2} precision={pattern || 2}
value={text || 0} value={text || 0}
onChange={(value) => onChangeIssueReissueValue(record.salaryItemName, value, "issuedAndReissueItems")} onChange={(value) => onChangeIssueReissueValue(record.salaryItemName, value, "issuedAndReissueItems")}
/>; />;

View File

@ -37,10 +37,10 @@ class PayrollItemsTable extends Component {
</span>, </span>,
width: "20%", width: "20%",
render: (text, record) => { render: (text, record) => {
const { canEdit, dataType } = record; const { canEdit, dataType, pattern } = record;
return dataType === "number" ? <WeaInputNumber return dataType === "number" ? <WeaInputNumber
disabled={!canEdit} disabled={!canEdit}
precision={2} precision={pattern || 2}
value={text || 0} value={text || 0}
onChange={(value) => onChangeIssueReissueValue(record.salaryItemId, value, "itemsByGroup", salarySobItemGroupId)} onChange={(value) => onChangeIssueReissueValue(record.salaryItemId, value, "itemsByGroup", salarySobItemGroupId)}
/> : <WeaInput /> : <WeaInput

View File

@ -162,7 +162,6 @@ export default class PlaceOnFileDetail extends React.Component {
}; };
return ( return (
<div className="placeOnFileDetail"> <div className="placeOnFileDetail">
<CustomTab <CustomTab
searchOperationItem={ searchOperationItem={
@ -170,7 +169,7 @@ export default class PlaceOnFileDetail extends React.Component {
} }
/> />
<div className="tabWrapper" style={{ borderBottom: "none" }}> <div className="tabWrapper" style={{ borderBottom: "none" }}>
<span>薪资所属月{baseSalarySobCycle.salaryMonth}</span> <span style={{ marginRight: 10 }}>薪资所属月{baseSalarySobCycle.salaryMonth}</span>
<WeaHelpfulTip <WeaHelpfulTip
width={100} width={100}
title={`薪资周期\n title={`薪资周期\n

View File

@ -6,9 +6,10 @@ import EditSalaryDetail from "./editSalaryDetail";
import SlideModalTitle from "../../components/slideModalTitle"; import SlideModalTitle from "../../components/slideModalTitle";
import { getQueryString } from "../../util/url"; import { getQueryString } from "../../util/url";
import { inject, observer } from "mobx-react"; import { inject, observer } from "mobx-react";
import ProgressModal from "../../components/progressModal";
import { SalaryMonthTip } from "./userSure";
import { toJS } from "mobx"; import { toJS } from "mobx";
import "./index.less"; import "./index.less";
import ProgressModal from "../../components/progressModal";
@inject("calculateStore", "taxAgentStore") @inject("calculateStore", "taxAgentStore")
@observer @observer
@ -151,6 +152,7 @@ export default class SalaryDetail extends React.Component {
progressVisible: false, progressVisible: false,
progress: 0 progress: 0
}, () => { }, () => {
const { current, pageSize } = this.pageInfo;
const childFrameObj = document.getElementById("atdTable"); const childFrameObj = document.getElementById("atdTable");
const payload = { const payload = {
type: "PR", type: "PR",
@ -158,7 +160,8 @@ export default class SalaryDetail extends React.Component {
url: "/api/bs/hrmsalary/salaryacct/acctresult/list", url: "/api/bs/hrmsalary/salaryacct/acctresult/list",
queryParams: { queryParams: {
salaryAcctRecordId, salaryAcctRecordId,
...this.props.employeeName ...this.props.employeeName,
current, pageSize
} }
}; };
childFrameObj.contentWindow.postMessage(JSON.stringify(payload), "*"); childFrameObj.contentWindow.postMessage(JSON.stringify(payload), "*");
@ -186,13 +189,15 @@ export default class SalaryDetail extends React.Component {
this.setState({ loading: false }); this.setState({ loading: false });
const childFrameObj = document.getElementById("atdTable"); const childFrameObj = document.getElementById("atdTable");
const salaryAcctRecordId = getQueryString("id"); const salaryAcctRecordId = getQueryString("id");
const { current, pageSize } = this.pageInfo;
const payload = { const payload = {
type: "PR", type: "PR",
listType: "", listType: "",
url: "/api/bs/hrmsalary/salaryacct/acctresult/list", url: "/api/bs/hrmsalary/salaryacct/acctresult/list",
queryParams: { queryParams: {
salaryAcctRecordId, salaryAcctRecordId,
...this.props.employeeName ...this.props.employeeName,
current, pageSize
} }
}; };
childFrameObj.contentWindow.postMessage(JSON.stringify(payload), "*"); childFrameObj.contentWindow.postMessage(JSON.stringify(payload), "*");
@ -211,17 +216,9 @@ export default class SalaryDetail extends React.Component {
<div className="salaryBarWrapper"> <div className="salaryBarWrapper">
<span>薪资所属月{baseSalarySobCycle.salaryMonth}</span> <span>薪资所属月{baseSalarySobCycle.salaryMonth}</span>
<WeaHelpfulTip <WeaHelpfulTip
style={{ marginLeft: "10px" }} style={{ marginLeft: 10 }}
width={200} title={!_.isEmpty(baseSalarySobCycle) ?
title={ <SalaryMonthTip baseSalarySobCycle={baseSalarySobCycle}/> : ""}
`薪资周期\n
${baseSalarySobCycle.salaryCycle && baseSalarySobCycle.salaryCycle.fromDate}至${baseSalarySobCycle.salaryCycle && baseSalarySobCycle.salaryCycle.endDate}\n
税款所属期\n
${baseSalarySobCycle.taxCycle}\n
考勤取值周期\n
${baseSalarySobCycle.attendCycle && baseSalarySobCycle.attendCycle.fromDate}至${baseSalarySobCycle.attendCycle && baseSalarySobCycle.attendCycle.endDate}\n
福利台账月份\n
引用${baseSalarySobCycle.socialSecurityCycle}的福利台账数据`}
placement="topLeft" placement="topLeft"
/> />
{/*暂时隐藏*/} {/*暂时隐藏*/}

View File

@ -1,10 +1,20 @@
import React from "react"; import React from "react";
import { Button, Col, Icon, message, Modal, Row } from "antd"; import { Button, Col, Icon, message, Modal, Row } from "antd";
import { WeaBrowser, WeaFormItem, WeaHelpfulTip, WeaInput, WeaSearchGroup, WeaSelect, WeaTab } from "ecCom"; import {
WeaBrowser,
WeaFormItem,
WeaHelpfulTip,
WeaInput,
WeaLocaleProvider,
WeaSearchGroup,
WeaSelect,
WeaTab
} from "ecCom";
import { inject, observer } from "mobx-react"; import { inject, observer } from "mobx-react";
import "./index.less";
import { getQueryString } from "../../util/url"; import { getQueryString } from "../../util/url";
import "./index.less";
const { getLabel } = WeaLocaleProvider;
@inject("calculateStore", "salaryFileStore") @inject("calculateStore", "salaryFileStore")
@observer @observer
export default class UserSure extends React.Component { export default class UserSure extends React.Component {
@ -120,7 +130,7 @@ export default class UserSure extends React.Component {
url: "/api/bs/hrmsalary/salaryacct/acctemployee/list", url: "/api/bs/hrmsalary/salaryacct/acctemployee/list",
queryParams: { queryParams: {
salaryAcctRecordId, salaryAcctRecordId,
...this.state.searchItemsValue, ...this.state.searchItemsValue
} }
}; };
childFrameObj.contentWindow.postMessage(JSON.stringify(payload), "*"); //window.postMessage childFrameObj.contentWindow.postMessage(JSON.stringify(payload), "*"); //window.postMessage
@ -375,12 +385,8 @@ export default class UserSure extends React.Component {
<Row> <Row>
<Col span={6}> <Col span={6}>
薪资所属月<WeaHelpfulTip 薪资所属月<WeaHelpfulTip
width={100} title={!_.isEmpty(baseSalarySobCycle) ?
title={`薪资周期\n${baseSalarySobCycle.salaryCycle && <SalaryMonthTip baseSalarySobCycle={baseSalarySobCycle}/> : ""}
baseSalarySobCycle.salaryCycle.fromDate}至${baseSalarySobCycle.salaryCycle &&
baseSalarySobCycle.salaryCycle.endDate}\n税款所属期\n${baseSalarySobCycle.taxCycle}\n考勤取值周期\n${baseSalarySobCycle.attendCycle &&
baseSalarySobCycle.attendCycle.fromDate}至${baseSalarySobCycle.attendCycle &&
baseSalarySobCycle.attendCycle.endDate}\n福利台账月份\n引用${baseSalarySobCycle.socialSecurityCycle}的福利台账数据`}
placement="topLeft" placement="topLeft"
/> />
</Col> </Col>
@ -430,7 +436,7 @@ export default class UserSure extends React.Component {
url: "/api/bs/hrmsalary/salaryacct/acctemployee/list", url: "/api/bs/hrmsalary/salaryacct/acctemployee/list",
queryParams: { queryParams: {
salaryAcctRecordId, salaryAcctRecordId,
...this.state.searchItemsValue, ...this.state.searchItemsValue
} }
}; };
childFrameObj.contentWindow.postMessage(JSON.stringify(payload), "*"); //window.postMessage childFrameObj.contentWindow.postMessage(JSON.stringify(payload), "*"); //window.postMessage
@ -460,7 +466,7 @@ export default class UserSure extends React.Component {
url: "/api/bs/hrmsalary/salaryacct/reducedemployee/list", url: "/api/bs/hrmsalary/salaryacct/reducedemployee/list",
queryParams: { queryParams: {
salaryAcctRecordId, salaryAcctRecordId,
...this.state.searchItemsValue, ...this.state.searchItemsValue
} }
}; };
childFrameObj.contentWindow.postMessage(JSON.stringify(payload), "*"); childFrameObj.contentWindow.postMessage(JSON.stringify(payload), "*");
@ -490,7 +496,7 @@ export default class UserSure extends React.Component {
url: "/api/bs/hrmsalary/salaryacct/addedemployee/list", url: "/api/bs/hrmsalary/salaryacct/addedemployee/list",
queryParams: { queryParams: {
salaryAcctRecordId, salaryAcctRecordId,
...this.state.searchItemsValue, ...this.state.searchItemsValue
} }
}; };
childFrameObj.contentWindow.postMessage(JSON.stringify(payload), "*"); childFrameObj.contentWindow.postMessage(JSON.stringify(payload), "*");
@ -587,3 +593,32 @@ export default class UserSure extends React.Component {
); );
} }
} }
export const SalaryMonthTip = (props) => {
const { baseSalarySobCycle } = props;
const { salaryCycle, taxCycle, attendCycle, socialSecurityCycle } = baseSalarySobCycle;
const { fromDate: salaryCycleFromDate, endDate: salaryCycleEndDate } = salaryCycle;
const { fromDate: attendCycleFromDate, endDate: attendCycleEndDate } = attendCycle;
return (
<div className="salaryMonthTip-layout">
<div className="salaryMonthTipItem">
<div className="label">{getLabel(543375, "薪资周期")}</div>
<div className="value">{`${salaryCycleFromDate}${getLabel(15322, "至")}${salaryCycleEndDate}`}</div>
</div>
<div className="salaryMonthTipItem">
<div className="label">{getLabel(542240, "税款所属期")}</div>
<div className="value">{taxCycle}</div>
</div>
<div className="salaryMonthTipItem">
<div className="label">{getLabel(543475, "考勤取值周期")}</div>
<div className="value">{`${attendCycleFromDate}${getLabel(15322, "至")}${attendCycleEndDate}`}</div>
</div>
<div className="salaryMonthTipItem">
<div className="label">{getLabel(543466, "福利台账月份")}</div>
<div className="value">
{`${getLabel(19422, "引用")}${socialSecurityCycle}${getLabel(543476, "的福利台账数据")}`}
</div>
</div>
</div>
);
};

View File

@ -23,7 +23,7 @@ class LedgerSalaryItemEditSlide extends Component {
const key = Object.keys(params)[0]; const key = Object.keys(params)[0];
this.props.onUpdateRequest(request, key); this.props.onUpdateRequest(request, key);
}; };
handleShowFormal = () => this.props.onEditFormnul(); handleShowFormal = (salaryItemName) => this.props.onEditFormnul(salaryItemName);
render() { render() {
return ( return (

View File

@ -147,7 +147,7 @@ class LedgerSalaryItemNormal extends Component {
const newDateSource = _.map(dataSource, item => { const newDateSource = _.map(dataSource, item => {
return { return {
...item, ...item,
items: _.filter(item.items || [], child => child.name.indexOf(salaryItemKeywords) !== -1) items: _.filter(item.items || [], child => (child.name.indexOf(salaryItemKeywords) !== -1 || child.formulaContent.indexOf(salaryItemKeywords) !== -1))
}; };
}); });
return ( return (
@ -262,7 +262,7 @@ const TitleComp = (props) => {
<Button type="ghost" onClick={() => onAddCategory()} style={{ marginRight: 10 }}>新增分类</Button> <Button type="ghost" onClick={() => onAddCategory()} style={{ marginRight: 10 }}>新增分类</Button>
} }
<WeaInputSearch value={salaryItemKeywords} onChange={onChange} <WeaInputSearch value={salaryItemKeywords} onChange={onChange}
placeholder={getLabel(111, "请输入薪资项目名称")} placeholder={getLabel(111, "请输入薪资项目名称或者公式名称")}
/> />
</div> </div>
</div>; </div>;

View File

@ -28,7 +28,8 @@ class LedgerSalaryItemTable extends Component {
visible: false, visible: false,
formulaId: "", formulaId: "",
valueType: "", valueType: "",
dataType: "" dataType: "",
name: ""
} }
}; };
} }
@ -163,13 +164,13 @@ class LedgerSalaryItemTable extends Component {
originSqlContent: ((valueType.toString() === "2" && (!originFormulaContent || originFormulaContent === " ")) || (valueType.toString() === "1") || (valueType.toString() === "2" && originFormulaContent)) ? " " : originSqlContent originSqlContent: ((valueType.toString() === "2" && (!originFormulaContent || originFormulaContent === " ")) || (valueType.toString() === "1") || (valueType.toString() === "2" && originFormulaContent)) ? " " : originSqlContent
}, salaryItemId); }, salaryItemId);
}; };
handleEditFormnul = () => { handleEditFormnul = (salaryItemName) => {
const { salaryItemPayload, editFormulModal } = this.state; const { salaryItemPayload, editFormulModal } = this.state;
const { record } = salaryItemPayload; const { record } = salaryItemPayload;
const { valueType, formulaId, dataType, originFormulaContent, originSqlContent } = record; const { valueType, formulaId, dataType, originFormulaContent, originSqlContent } = record;
this.setState({ this.setState({
editFormulModal: { editFormulModal: {
...editFormulModal, visible: true, valueType, dataType, ...editFormulModal, visible: true, valueType, dataType, name: salaryItemName,
formulaId: ((valueType.toString() === "2" && (originFormulaContent || originFormulaContent !== " ")) || valueType.toString() === "3" && (originSqlContent || originSqlContent === " ")) ? formulaId : "" formulaId: ((valueType.toString() === "2" && (originFormulaContent || originFormulaContent !== " ")) || valueType.toString() === "3" && (originSqlContent || originSqlContent === " ")) ? formulaId : ""
} }
}); });
@ -180,7 +181,7 @@ class LedgerSalaryItemTable extends Component {
editFormulModal: { editFormulModal: {
...editFormulModal, ...editFormulModal,
visible: false, visible: false,
formulaId: "", formulaId: "", name: "",
valueType: "", dataType: "" valueType: "", dataType: ""
} }
}); });
@ -255,9 +256,9 @@ class LedgerSalaryItemTable extends Component {
dataIndex: "valueType", dataIndex: "valueType",
key: "valueType", key: "valueType",
render: (e, record) => { render: (e, record) => {
const { valueType } = record; const { valueType, formulaContent } = record;
const key = !_.isNil(valueType) ? valueType : ""; const key = !_.isNil(valueType) ? valueType : "";
return <span> {key.toString() === "1" ? "输入" : key.toString() === "2" ? "自定义公式" : key.toString() === "3" ? "SQL" : ""} </span>; return <span> {key.toString() === "1" ? "输入" : key.toString() === "2" ? formulaContent : key.toString() === "3" ? formulaContent : ""} </span>;
} }
}, },
{ {

View File

@ -189,7 +189,7 @@ export default class MobilePayroll extends React.Component {
salaryItemSet={!_.isEmpty(salaryGroups) ? JSON.stringify([employeeInformation, ...salaryGroups]) : []} salaryItemSet={!_.isEmpty(salaryGroups) ? JSON.stringify([employeeInformation, ...salaryGroups]) : []}
> >
{ {
(_.isNil(mySalaryBillData.confirmStatus) || mySalaryBillData.confirmStatus === "0") && (!_.isEmpty(salaryGroups) && (_.isNil(mySalaryBillData.confirmStatus) || mySalaryBillData.confirmStatus === "0")) &&
<ConfirmBtns <ConfirmBtns
confirmSalaryBill={this.confirmSalaryBill} confirmSalaryBill={this.confirmSalaryBill}
goFeedback={this.handleGoFeedback} goFeedback={this.handleGoFeedback}
@ -210,7 +210,7 @@ export default class MobilePayroll extends React.Component {
salaryItemSet={!_.isEmpty(salaryGroups) ? JSON.stringify([employeeInformation, ...salaryGroups]) : JSON.stringify([])} salaryItemSet={!_.isEmpty(salaryGroups) ? JSON.stringify([employeeInformation, ...salaryGroups]) : JSON.stringify([])}
> >
{ {
(_.isNil(mySalaryBillData.confirmStatus) || mySalaryBillData.confirmStatus === "0") && (!_.isEmpty(salaryGroups) && (_.isNil(mySalaryBillData.confirmStatus) || mySalaryBillData.confirmStatus === "0")) &&
<ConfirmBtns <ConfirmBtns
confirmSalaryBill={this.confirmSalaryBill} confirmSalaryBill={this.confirmSalaryBill}
goFeedback={this.handleGoFeedback} goFeedback={this.handleGoFeedback}

View File

@ -99,7 +99,7 @@ class MySalaryView extends Component {
salaryItemSet={!_.isEmpty(salaryGroups) ? JSON.stringify([employeeInformation, ...salaryGroups]) : []} salaryItemSet={!_.isEmpty(salaryGroups) ? JSON.stringify([employeeInformation, ...salaryGroups]) : []}
> >
{ {
(_.isNil(mySalaryStore.confirmStatus) || mySalaryStore.confirmStatus === "0") && (!_.isEmpty(salaryGroups) && (_.isNil(mySalaryStore.confirmStatus) || mySalaryStore.confirmStatus === "0")) &&
<ConfirmBtns <ConfirmBtns
confirmSalaryBill={this.confirmSalaryBill} confirmSalaryBill={this.confirmSalaryBill}
goFeedback={this.handleGoFeedback} goFeedback={this.handleGoFeedback}

View File

@ -3,6 +3,7 @@ import ImportModal from "../../../components/importModal";
import * as API from "../../../apis/payrollFiles"; import * as API from "../../../apis/payrollFiles";
import { Menu, Modal } from "antd"; import { Menu, Modal } from "antd";
import "../index.less"; import "../index.less";
import { convertToUrlString } from "../../../util/url";
class ImportMenu extends Component { class ImportMenu extends Component {
constructor(props) { constructor(props) {
@ -114,7 +115,7 @@ class ImportMenu extends Component {
}; };
render() { render() {
const { importType, refreshList, isExtEmp } = this.props; const { importType, refreshList, isExtEmp, searchItemsValue = {} } = this.props;
const { importParams, previewColumns, previewDataSource } = this.state; const { importParams, previewColumns, previewDataSource } = this.state;
let params = ""; let params = "";
if (importParams.importType === "init" || importParams.importType === "salaryItemAdjust") { if (importParams.importType === "init" || importParams.importType === "salaryItemAdjust") {
@ -153,8 +154,7 @@ class ImportMenu extends Component {
}} }}
previewImport={(params) => this.salaryArchivePreview(params)} previewImport={(params) => this.salaryArchivePreview(params)}
importFile={(params) => this.handleImportFile(params)} importFile={(params) => this.handleImportFile(params)}
templateLink={ templateLink={`/api/bs/hrmsalary/salaryArchive/downloadTemplate?importType=${params}&${convertToUrlString(searchItemsValue)}`
"/api/bs/hrmsalary/salaryArchive/downloadTemplate?importType=" + params
} }
visiable={importParams.visible} visiable={importParams.visible}
onCancel={() => { onCancel={() => {

View File

@ -433,6 +433,7 @@ class Index extends Component {
<Dropdown overlay={ <Dropdown overlay={
<ImportMenu <ImportMenu
importType={importType} importType={importType}
searchItemsValue={searchItemsValue}
refreshList={() => { refreshList={() => {
this.query(); this.query();
this.setState({ selectedRowKeys: [] }); this.setState({ selectedRowKeys: [] });
@ -523,6 +524,7 @@ class Index extends Component {
<Dropdown overlay={ <Dropdown overlay={
<ImportMenu <ImportMenu
isExtEmp importType={importType} isExtEmp importType={importType}
searchItemsValue={searchItemsValue}
refreshList={() => { refreshList={() => {
this.query(); this.query();
this.setState({ selectedRowKeys: [] }); this.setState({ selectedRowKeys: [] });
@ -834,6 +836,7 @@ class Index extends Component {
<div style={{ display: "none" }}> <div style={{ display: "none" }}>
<ImportMenu <ImportMenu
ref={(dom) => this.importRef = dom} ref={(dom) => this.importRef = dom}
searchItemsValue={this.state.searchItemsValue}
refreshList={() => { refreshList={() => {
this.query(); this.query();
this.setState({ selectedRowKeys: [] }); this.setState({ selectedRowKeys: [] });

View File

@ -152,7 +152,7 @@ export default class SalaryFileViewSlide extends React.Component {
item.dataType === "number" ? item.dataType === "number" ?
<WeaInputNumber <WeaInputNumber
value={!_.isNil(item.value) ? item.value : 0} value={!_.isNil(item.value) ? item.value : 0}
precision={2} precision={item.pattern || 2}
viewAttr={selectedKey === "pending" ? 2 : 1} viewAttr={selectedKey === "pending" ? 2 : 1}
onChange={value => { onChange={value => {
item.value = value; item.value = value;

View File

@ -8,7 +8,8 @@ export default class CustomSalaryItemSlide extends React.Component {
super(props); super(props);
this.state = { this.state = {
showForm: false, showForm: false,
formalModalVisible: false formalModalVisible: false,
salaryItemName: ""
}; };
} }
@ -16,9 +17,10 @@ export default class CustomSalaryItemSlide extends React.Component {
this.props.onChange({ ...this.props.request, ...params }); this.props.onChange({ ...this.props.request, ...params });
}; };
handleShowFormal = () => { handleShowFormal = (salaryItemName) => {
this.setState({ this.setState({
formalModalVisible: true formalModalVisible: true,
salaryItemName
}); });
}; };
@ -34,12 +36,13 @@ export default class CustomSalaryItemSlide extends React.Component {
render() { render() {
const { request } = this.props; const { request } = this.props;
const { valueType, dataType, formulaId } = request; const { valueType, dataType, formulaId } = request;
const { formalModalVisible } = this.state; const { formalModalVisible, salaryItemName } = this.state;
return ( return (
<div className="customSalaryItemSlide"> <div className="customSalaryItemSlide">
<SalaryItemForm {...this.props} onChangeFieldsItem={this.handleChange} onShowFormal={this.handleShowFormal}/> <SalaryItemForm {...this.props} onChangeFieldsItem={this.handleChange} onShowFormal={this.handleShowFormal}/>
{formalModalVisible && {formalModalVisible &&
<FormalFormModal <FormalFormModal
name={salaryItemName}
formulaId={formulaId} formulaId={formulaId}
visible={formalModalVisible} visible={formalModalVisible}
valueType={valueType} valueType={valueType}
@ -49,7 +52,8 @@ export default class CustomSalaryItemSlide extends React.Component {
}} }}
onCancel={() => onCancel={() =>
this.setState({ this.setState({
formalModalVisible: false formalModalVisible: false,
salaryItemName: ""
})} })}
/>} />}
</div> </div>

View File

@ -208,7 +208,7 @@ export default class FormalFormModal extends React.Component {
}); });
this.parameters = result; this.parameters = result;
let params = { let params = {
name: "公式1", name: this.props.name || "公式1",
description: "备注", description: "备注",
module: "salary", module: "salary",
useFor: "salaryitem", useFor: "salaryitem",

View File

@ -133,7 +133,7 @@ class SalaryItemForm extends Component {
(type === "INPUT" && display) ? (type === "INPUT" && display) ?
<WeaFormItem label={label} labelCol={{ span: 6 }} wrapperCol={{ span: 12 }}> <WeaFormItem label={label} labelCol={{ span: 6 }} wrapperCol={{ span: 12 }}>
<WeaInput viewAttr={viewAttr} value={value} <WeaInput viewAttr={viewAttr} value={value}
onClick={() => (key === "originSqlContent" || key === "originFormulaContent") && onShowFormal()} onClick={() => (key === "originSqlContent" || key === "originFormulaContent") && onShowFormal(request["name"])}
onChange={v => this.handleChangeSalaryFiledItems(key, v)}/></WeaFormItem> : onChange={v => this.handleChangeSalaryFiledItems(key, v)}/></WeaFormItem> :
(type === "SWITCH" && display) ? (type === "SWITCH" && display) ?
<WeaFormItem label={label} labelCol={{ span: 6 }} wrapperCol={{ span: 12 }}> <WeaFormItem label={label} labelCol={{ span: 6 }} wrapperCol={{ span: 12 }}>

View File

@ -293,8 +293,10 @@ export default class Archives extends React.Component {
// 模板点击 // 模板点击
handleTemplateLinkClick = (exportData) => { handleTemplateLinkClick = (exportData) => {
const { archivesStore: { form } } = this.props;
const formParams = form.getFormParams() || {};
const { selectedKey } = this.state; const { selectedKey } = this.state;
let url = `/api/bs/hrmsalary/scheme/template/export?exportData=${exportData}&runStatuses=${selectedKey === "pending" ? "1" : "2,3"}`; let url = `/api/bs/hrmsalary/scheme/template/export?exportData=${exportData}&runStatuses=${selectedKey === "pending" ? "1" : "2,3"}&${convertToUrlString(formParams)}`;
window.open(`${window.location.origin}${url}`); window.open(`${window.location.origin}${url}`);
}; };

View File

@ -203,7 +203,7 @@ export default class DefaultSlideForm extends React.Component {
return ( return (
<WeaInputNumber <WeaInputNumber
min={0} min={0}
precision={3} precision={4}
value={text} value={text}
onChange={v => { onChange={v => {
this.updateDataSource(record, v, "paymentProportion"); this.updateDataSource(record, v, "paymentProportion");

View File

@ -2,12 +2,26 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
height: 100%; height: 100%;
background: #f6f6f6;
.wea-new-top-req-wapper .wea-new-top-req-main {
background: #f6f6f6 !important;
}
.wea-new-top-req-wapper .wea-new-top-req {
z-index: 0 !important;
}
.wea-search-tab, .wea-input-focus {
background: #f6f6f6;
}
.normalWapper { .normalWapper {
flex: 1; height: 100%;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
overflow: hidden; overflow: hidden;
padding: 0 16px;
.tableWrapper { .tableWrapper {
flex: 1; flex: 1;
@ -16,12 +30,18 @@
.ant-spin-nested-loading, .ant-spin-container { .ant-spin-nested-loading, .ant-spin-container {
height: 100%; height: 100%;
} }
.wea-new-table {
background: #fff;
}
} }
.topContent { .topContent {
padding: 8px 20px; padding: 8px 20px;
display: flex; display: flex;
align-items: center; align-items: center;
background: #fff;
margin-top: 16px;
.month { .month {
margin-right: 26px; margin-right: 26px;
@ -69,14 +89,16 @@
//退差;补差 //退差;补差
.regressionWrapper, .differenceWrapper { .regressionWrapper, .differenceWrapper {
flex: 1; height: 100%;
overflow: hidden; overflow: hidden;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
padding: 16px;
.tableWrapper { .tableWrapper {
flex: 1; flex: 1;
overflow: hidden; overflow: hidden;
.ant-spin-nested-loading, .ant-spin-container { .ant-spin-nested-loading, .ant-spin-container {
height: 100%; height: 100%;
} }

View File

@ -6,13 +6,15 @@
*/ */
import React, { Component } from "react"; import React, { Component } from "react";
import { inject, observer } from "mobx-react"; import { inject, observer } from "mobx-react";
import { WeaTab } from "ecCom"; import { WeaLocaleProvider, WeaReqTop } from "ecCom";
import NormalIndex from "./components/normal"; import NormalIndex from "./components/normal";
import OverViewIndex from "./components/overView"; import OverViewIndex from "./components/overView";
import AbnormalListIndex from "./components/abnormalList"; import AbnormalListIndex from "./components/abnormalList";
import Regression from "./components/regression"; import Regression from "./components/regression";
import MakeupDifference from "./components/makeupDifference"; import MakeupDifference from "./components/makeupDifference";
const { getLabel } = WeaLocaleProvider;
@inject("standingBookStore") @inject("standingBookStore")
@observer @observer
class StandingBookDetail extends Component { class StandingBookDetail extends Component {
@ -43,7 +45,7 @@ class StandingBookDetail extends Component {
newTabList.push(newTabList.splice(_.findIndex(newTabList, it => it.id === "4"), 1)[0]); newTabList.push(newTabList.splice(_.findIndex(newTabList, it => it.id === "4"), 1)[0]);
this.setState({ this.setState({
selectedKey: newTabList[0].id, selectedKey: newTabList[0].id,
tabList: _.map(newTabList, it => ({ title: it.content, viewcondition: it.id })), tabList: _.map(newTabList, it => ({ title: it.content, key: it.id })),
remarks, billMonth remarks, billMonth
}); });
}); });
@ -53,14 +55,11 @@ class StandingBookDetail extends Component {
const { selectedKey, tabList, remarks, billMonth } = this.state; const { selectedKey, tabList, remarks, billMonth } = this.state;
return ( return (
<div className="standingBookDetailWapper"> <div className="standingBookDetailWapper">
<WeaTab <WeaReqTop
datas={tabList} title={getLabel(538002, "社保福利台账")} icon={<i className="icon-coms-fa"/>}
keyParam="viewcondition" //主键 iconBgcolor="#F14A2D" showDropIcon={false} tabDatas={tabList} selectedKey={selectedKey}
selectedKey={selectedKey} onChange={selectedKey => this.setState({ selectedKey })}
onChange={(selectedKey) => { >
this.setState({ selectedKey });
}}
/>
{ {
(selectedKey === "1" || selectedKey === "3") && (selectedKey === "1" || selectedKey === "3") &&
<NormalIndex selectedKey={selectedKey} remarks={remarks} billMonth={billMonth} type={this.type} <NormalIndex selectedKey={selectedKey} remarks={remarks} billMonth={billMonth} type={this.type}
@ -80,6 +79,7 @@ class StandingBookDetail extends Component {
{ {
selectedKey === "6" && <MakeupDifference/> selectedKey === "6" && <MakeupDifference/>
} }
</WeaReqTop>
</div> </div>
); );
} }