Compare commits
14 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
40c7a4f7a0 | |
|
|
fad6c3a2b1 | |
|
|
04b3415353 | |
|
|
e539f7b040 | |
|
|
e9d301927f | |
|
|
dee1059ca7 | |
|
|
9a50947d8a | |
|
|
d652b2cdc6 | |
|
|
0b081877f4 | |
|
|
51ac08d6fc | |
|
|
ae7785ff6e | |
|
|
cd0706fe23 | |
|
|
babbf88c15 | |
|
|
83607e1c0d |
|
|
@ -1,46 +0,0 @@
|
|||
import { WeaTools } from "ecCom";
|
||||
import { postFetch } from "../util/request";
|
||||
// 推送配置列表
|
||||
export const getPushSettingList = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/push/setting/list", params);
|
||||
};
|
||||
// 保存推送配置
|
||||
export const savePushSetting = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/push/setting/save", params);
|
||||
};
|
||||
// 删除推送配置
|
||||
export const deletePushSetting = (params) => {
|
||||
return WeaTools.callApi("/api/bs/hrmsalary/push/setting/delete", "GET", params);
|
||||
};
|
||||
// 推送配置明细列表
|
||||
export const getPushItemList = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/push/item/list", params);
|
||||
};
|
||||
// 保存推送配置明细
|
||||
export const savePushItemList = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/push/item/save", params);
|
||||
};
|
||||
// 删除推送配置明细
|
||||
export const deletePushItemList = (params) => {
|
||||
return WeaTools.callApi("/api/bs/hrmsalary/push/item/delete", "GET", params);
|
||||
};
|
||||
// 推送记录列表
|
||||
export const getPushRecordList = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/push/record/list", params);
|
||||
};
|
||||
// 推送记录详细列表
|
||||
export const getPushRecordDetail = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/push/record/detail", params);
|
||||
};
|
||||
// 推送记录-推送
|
||||
export const pushRecords = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/push/record/push", params);
|
||||
};
|
||||
// 推送记录-撤回
|
||||
export const withdrawRecords = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/push/record/withdraw", params);
|
||||
};
|
||||
//创建推送记录
|
||||
export const createPushRecords = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/push/record/create", params);
|
||||
};
|
||||
|
|
@ -202,12 +202,21 @@ export const salaryBillSendSum = (params) => {
|
|||
return postFetch("/api/bs/hrmsalary/salaryBill/send/sum", params);
|
||||
};
|
||||
//工资单发放-发送短信验证码
|
||||
export const sendMobileCode = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/salaryBill/sendMobileCode", params);
|
||||
export const sendMobileCode = (params, header = {}) => {
|
||||
return postFetch("/api/bs/hrmsalary/salaryBill/sendMobileCode", params, header);
|
||||
};
|
||||
//工资单发放-发送短信验证码
|
||||
export const checkMobileCode = (params, header = {}) => {
|
||||
return postFetch("/api/bs/hrmsalary/salaryBill/checkMobileCode", params, header);
|
||||
};
|
||||
//工资单-验证方式
|
||||
export const payrollCheckType = params => {
|
||||
return WeaTools.callApi("/api/bs/hrmsalary/salaryBill/payrollCheckType", "GET", params);
|
||||
export const payrollCheckType = async header => {
|
||||
const res = await fetch(`/api/bs/hrmsalary/salaryBill/payrollCheckType`, {
|
||||
method: "GET",
|
||||
mode: "cors",
|
||||
headers: { "Content-Type": "application/json", ...header }
|
||||
});
|
||||
return await res.json();
|
||||
};
|
||||
//工资单-反馈验证
|
||||
export const feedBackSalaryBill = async params => {
|
||||
|
|
|
|||
|
|
@ -15,18 +15,10 @@ export const getTabList = (params) => {
|
|||
export const getNormalList = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/siaccount/detail/common/list", params);
|
||||
};
|
||||
//社会福利台账-获取正常缴纳列表合计行
|
||||
export const getNormalListSum = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/siaccount/detail/common/list/sum", params);
|
||||
};
|
||||
//社会福利台账-获取补缴列表
|
||||
export const getSupplementaryList = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/siaccount/detail/supplementary/list", params);
|
||||
};
|
||||
//社会福利台账-获取补缴列表合计
|
||||
export const getSupplementaryListSum = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/siaccount/detail/supplementary/list/sum", params);
|
||||
};
|
||||
|
||||
//社会福利台账-获取总览列表
|
||||
export const getOverViewList = (params) => {
|
||||
|
|
@ -130,18 +122,10 @@ export const saveRecession = (params) => {
|
|||
export const recessionList = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/siaccount/detail/recession/list", params);
|
||||
};
|
||||
//查询退差列表合计行
|
||||
export const recessionListSum = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/siaccount/detail/recession/list/sum", params);
|
||||
};
|
||||
//查询补差列表
|
||||
export const balanceList = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/siaccount/detail/balance/list", params);
|
||||
};
|
||||
//查询补差列表合计行
|
||||
export const balanceListSum = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/siaccount/detail/balance/list/sum", params);
|
||||
};
|
||||
//删除退差数据
|
||||
export const delRecession = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/siaccount/delRecession", params);
|
||||
|
|
@ -221,11 +205,3 @@ export const cacheWelfareListField = (params) => {
|
|||
export const cacheBalanceWelfareList = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/siaccount/cacheBalanceWelfareList", params);
|
||||
};
|
||||
// 社保福利台账正常缴纳-增加人员并核算
|
||||
export const addSocialAcctEmp = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/siaccount/addSocialAcctEmp", params);
|
||||
};
|
||||
// 社保福利台账正常缴纳-增加人员并核算
|
||||
export const deleteSocialAcctEmp = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/siaccount/deleteSocialAcctEmp", params);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ export const taxAgentRangeSync = (params) => {
|
|||
|
||||
// 系统管理员权限
|
||||
export const getPermission = (params) => {
|
||||
return WeaTools.callApi("/api/bs/hrmsalary/auth/permission", "GET", params);
|
||||
return WeaTools.callApi("/api/bs/hrmsalary/taxAgent/permission", "GET", params);
|
||||
};
|
||||
|
||||
//获取个税扣缴义务人表单
|
||||
|
|
@ -102,73 +102,3 @@ export const getTaxAgentSelectListAsAdmin = (params) => {
|
|||
export const hasIconInTax = (params) => {
|
||||
return WeaTools.callApi("/api/bs/hrmsalary/sys/conf/code?code=hideIconInTax", "GET", params);
|
||||
};
|
||||
|
||||
/**权限-角色相关*/
|
||||
//同步业务线
|
||||
export const syncAuth = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/auth/sync", params);
|
||||
};
|
||||
//角色列表
|
||||
export const getRoleList = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/auth/role/list", params);
|
||||
};
|
||||
//保存角色
|
||||
export const saveAuthRole = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/auth/role/save", params);
|
||||
};
|
||||
//删除角色
|
||||
export const deleteAuthRole = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/auth/role/delete", params);
|
||||
};
|
||||
//成员列表
|
||||
export const authMemberList = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/auth/member/list", params);
|
||||
};
|
||||
//保存成员
|
||||
export const saveAuthMember = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/auth/member/save", params);
|
||||
};
|
||||
//数据列表
|
||||
export const authDataList = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/auth/data/list", params);
|
||||
};
|
||||
//删除成员
|
||||
export const deleteAuthMember = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/auth/member/delete", params);
|
||||
};
|
||||
//删除数据
|
||||
export const deleteAuthData = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/auth/data/delete", params);
|
||||
};
|
||||
//保存数据
|
||||
export const saveAuthData = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/auth/data/save", params);
|
||||
};
|
||||
//同步数据
|
||||
export const syncAuthData = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/auth/data/sync", params);
|
||||
};
|
||||
//同步成员
|
||||
export const syncAuthMember = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/auth/member/sync", params);
|
||||
};
|
||||
//保存权限
|
||||
export const saveAuthOpt = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/auth/opt/save", params);
|
||||
};
|
||||
//权限项
|
||||
export const getAuthOptTree = (params) => {
|
||||
return WeaTools.callApi("/api/bs/hrmsalary/auth/opt/tree", "GET", params);
|
||||
};
|
||||
//业务线详情
|
||||
export const getRole = (params) => {
|
||||
return WeaTools.callApi("/api/bs/hrmsalary/auth/role/getRole", "GET", params);
|
||||
};
|
||||
//成员明细列表
|
||||
export const authMemberDetail = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/auth/member/detail", params);
|
||||
};
|
||||
//数据明细列表
|
||||
export const authDataDetail = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/auth/data/detail", params);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -33,17 +33,18 @@ class AssociativeSearchMult extends Component {
|
|||
}
|
||||
}
|
||||
|
||||
handleSearch = (value) => this.getData(value);
|
||||
handleSearch = (value) => {
|
||||
this.setState({ loading: true });
|
||||
this.getData(value);
|
||||
};
|
||||
getData = (name = "") => {
|
||||
const { browserConditionParam, tags } = this.props;
|
||||
if (tags) return;
|
||||
const { browserConditionParam } = this.props;
|
||||
const {
|
||||
completeURL, filterByName, searchParamsKey, convertDatasource, dataParams = {}
|
||||
} = browserConditionParam;
|
||||
if (_.trim(name)) {
|
||||
let payload = { ...dataParams };
|
||||
searchParamsKey && (payload = { ...payload, [searchParamsKey]: name, current: 1, pageSize: 9999 });
|
||||
this.setState({ loading: true });
|
||||
postFetch(completeURL, payload).then(({ status, data }) => {
|
||||
this.setState({ loading: false });
|
||||
if (status && data.list) {
|
||||
|
|
@ -104,7 +105,7 @@ class AssociativeSearchMult extends Component {
|
|||
|
||||
render() {
|
||||
const { data, dropdownWidth } = this.state;
|
||||
const { viewAttr, selectedValues, datas, isSingle, browserConditionParam = {}, tags } = this.props;
|
||||
const { viewAttr, selectedValues, datas, isSingle, browserConditionParam = {} } = this.props;
|
||||
const clsname = classNames({
|
||||
"required": (viewAttr === 3 || viewAttr === "3") && _.isEmpty(selectedValues),
|
||||
"mr12": viewAttr === "3" && _.isEmpty(selectedValues),
|
||||
|
|
@ -126,7 +127,7 @@ class AssociativeSearchMult extends Component {
|
|||
);
|
||||
}
|
||||
let options = data.map(d => <Option key={d.id} title={d.name}>{d.name}</Option>);
|
||||
!tags && selectedValues && selectedValues.map((v) => {
|
||||
selectedValues && selectedValues.map((v) => {
|
||||
v && options.unshift(<Option key={v} title={datas[v].name}>{datas[v].name}</Option>);
|
||||
});
|
||||
const select = <Select
|
||||
|
|
|
|||
|
|
@ -62,8 +62,6 @@ class CustomBrowserDialog extends Component {
|
|||
listDatas: convertDatasource ? convertDatasource(data.list) : data.list,
|
||||
pageInfo: { ...pageInfo, current, pageSize, total }
|
||||
});
|
||||
} else if (status && data.modeList) {
|
||||
this.setState({ listDatas: _.map(data.modeList, o => ({ ...o, id: o.name })) });
|
||||
} else {
|
||||
this.setState({ listDatas: _.map(data, o => ({ ...o, id: String(o.id) })) });
|
||||
}
|
||||
|
|
|
|||
|
|
@ -97,11 +97,17 @@ class Index extends Component {
|
|||
}, () => {
|
||||
this.props.onChange && this.props.onChange(values.join(","));
|
||||
this.props.onCustomChange && this.props.onCustomChange(this.state.selectedData);
|
||||
if (form) form.updateFields({ [getKey(fieldConfig)]: { value: this.state.searchKeys.join(",") } });
|
||||
if (form) {
|
||||
form.updateFields({
|
||||
[getKey(fieldConfig)]: { value: this.state.searchKeys.join(",") }
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
onBrowerClick = (keys, selectedObj) => {
|
||||
if (_.isEmpty(keys)) this.setState({ searchKeys: [], selectedData: {}, rightDatas: [] });
|
||||
if (_.isEmpty(keys)) {
|
||||
this.setState({ searchKeys: [], selectedData: {}, rightDatas: [] });
|
||||
}
|
||||
this.setState({ browserDialog: { visible: true } });
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ class PersonalScopeTable extends Component {
|
|||
|
||||
render() {
|
||||
const { dataSource, columns, pageInfo, loading, selectedRowKeys } = this.state;
|
||||
const { onChangeSelectKey, showOperateBtn } = this.props;
|
||||
const { onChangeSelectKey } = this.props;
|
||||
const pagination = {
|
||||
...pageInfo,
|
||||
showTotal: total => `共 ${total} 条`,
|
||||
|
|
@ -128,7 +128,7 @@ class PersonalScopeTable extends Component {
|
|||
return (
|
||||
<WeaTable
|
||||
rowKey="id"
|
||||
rowSelection={showOperateBtn ? rowSelection : null}
|
||||
rowSelection={rowSelection}
|
||||
dataSource={dataSource}
|
||||
pagination={pagination}
|
||||
loading={loading.query}
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ class Index extends Component {
|
|||
} else if (index === 1) {
|
||||
return { ...item, fixed: "left", width: 176 };
|
||||
}
|
||||
if (item.dataIndex === "operate" || item.dataIndex === "opts") {
|
||||
if (item.dataIndex === "operate") {
|
||||
return { ...item, fixed: "right", width: item.width || "120px" };
|
||||
}
|
||||
return { ...item, width: "33%" };
|
||||
|
|
|
|||
|
|
@ -6,35 +6,36 @@
|
|||
*/
|
||||
import React, { Component } from "react";
|
||||
import { WeaDialog, WeaError, WeaFormItem, WeaInput, WeaLocaleProvider, WeaSearchGroup } from "ecCom";
|
||||
import { sendMobileCode } from "../../apis/payroll";
|
||||
import { Button } from "antd";
|
||||
import { WeaForm, WeaSwitch } from "comsMobx";
|
||||
import { checkMobileCode, sendMobileCode } from "../../apis/payroll";
|
||||
import { getQueryString } from "../../util/url";
|
||||
import FormInfo from "../FormInfo";
|
||||
import { captchaCondition } from "../../pages/mobilePayroll/pwdCondtion";
|
||||
import MobileModal from "../../pages/mobilePayroll/mobileModal";
|
||||
import { Button, message } from "antd";
|
||||
import "./index.less";
|
||||
|
||||
const form = new WeaForm();
|
||||
const { getLabel } = WeaLocaleProvider;
|
||||
|
||||
class Index extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
captcha: "",
|
||||
time: 60
|
||||
};
|
||||
this.state = { captcha: "", time: 60 };
|
||||
this.timeRef = null;
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
form.initFormFields(captchaCondition);
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
clearInterval(this.timeRef);
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps, nextContext) {
|
||||
if (nextProps.visible !== this.props.visible && !nextProps.visible) {
|
||||
clearInterval(this.timeRef);
|
||||
this.setState({ captcha: "", time: 60 });
|
||||
}
|
||||
this.setState({ captcha: "", time: 60 });
|
||||
}
|
||||
|
||||
handleSendCaptcha = () => {
|
||||
sendMobileCode({ id: this.props.id }).then(({ status, data }) => {
|
||||
sendMobileCode({ id: this.props.id }, this.props.salaryBillToken).then(({ status }) => {
|
||||
if (status) {
|
||||
this.timeRef = setInterval(() => {
|
||||
const { time } = this.state;
|
||||
|
|
@ -48,44 +49,74 @@ class Index extends Component {
|
|||
}
|
||||
});
|
||||
};
|
||||
handleConfirm = () => {
|
||||
if (!this.state.captcha) {
|
||||
handleConfirm = async () => {
|
||||
const type = getQueryString("type"), f = await form.validateForm();
|
||||
if (!this.state.captcha && type !== "phone") {
|
||||
this.refs.weaError.showError();
|
||||
// return
|
||||
return;
|
||||
} else if (!f.isValid && type === "phone") {
|
||||
f.showErrors();
|
||||
return;
|
||||
}
|
||||
this.props.onCancel();
|
||||
this.props.onConfirm();
|
||||
checkMobileCode({ id: this.props.id, mobileCode: this.state.captcha }, this.props.salaryBillToken)
|
||||
.then(({ status, errormsg }) => {
|
||||
if (status) {
|
||||
this.props.onCancel();
|
||||
this.props.onConfirm();
|
||||
} else {
|
||||
message.error(errormsg);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
render() {
|
||||
const { captcha, time } = this.state;
|
||||
return (
|
||||
<WeaDialog
|
||||
initLoadCss {...this.props} style={{ width: 550 }}
|
||||
className="captchaWrapper" title={getLabel(111, "验证码验证")}
|
||||
buttons={[
|
||||
<Button type="primary" onClick={this.handleConfirm}>{getLabel(826, "确定")}</Button>
|
||||
]}
|
||||
>
|
||||
<WeaSearchGroup needTigger={false} title="" showGroup>
|
||||
<WeaFormItem
|
||||
label={getLabel(111, "验证码")}
|
||||
labelCol={{ span: 8 }}
|
||||
wrapperCol={{ span: 16 }}
|
||||
>
|
||||
<WeaError tipPosition="bottom" ref="weaError" error={getLabel(826, "验证码未填写")}>
|
||||
<div className="captchaInputBox">
|
||||
<WeaInput value={captcha} onChange={captcha => this.setState({ captcha })}/>
|
||||
<Button type="primary" onClick={this.handleSendCaptcha} disabled={time !== 60}>
|
||||
{
|
||||
time === 60 ? getLabel(111, "发送验证码") : `${time}S`
|
||||
}
|
||||
</Button>
|
||||
</div>
|
||||
</WeaError>
|
||||
</WeaFormItem>
|
||||
</WeaSearchGroup>
|
||||
</WeaDialog>
|
||||
const { captcha, time } = this.state, type = getQueryString("type");
|
||||
const itemRender = {
|
||||
mobileCode: (field, textAreaProps, form, formParams) => {
|
||||
return (<div className="captchaInputBox">
|
||||
<WeaSwitch fieldConfig={{ ...field, ...textAreaProps }} form={form} formParams={formParams}
|
||||
onChange={() => this.setState({ captcha: form.getFormParams().mobileCode })}/>
|
||||
<Button type="primary" onClick={this.handleSendCaptcha} disabled={time !== 60}>
|
||||
{
|
||||
time === 60 ? getLabel(111, "发送验证码") : `${time}S`
|
||||
}
|
||||
</Button>
|
||||
</div>);
|
||||
}
|
||||
};
|
||||
return (<React.Fragment>
|
||||
{
|
||||
type === "phone" ? <MobileModal title={getLabel(111, "验证码验证")} onConfirm={this.handleConfirm}>
|
||||
<FormInfo center={false} itemRender={itemRender} form={form} formFields={captchaCondition}/>
|
||||
</MobileModal> :
|
||||
<WeaDialog
|
||||
initLoadCss {...this.props} style={{ width: 550 }}
|
||||
className="captchaWrapper" title={getLabel(111, "验证码验证")}
|
||||
buttons={[
|
||||
<Button type="primary" onClick={this.handleConfirm}>{getLabel(826, "确定")}</Button>
|
||||
]}
|
||||
>
|
||||
<WeaSearchGroup needTigger={false} title="" showGroup>
|
||||
<WeaFormItem
|
||||
label={getLabel(111, "验证码")}
|
||||
labelCol={{ span: 8 }}
|
||||
wrapperCol={{ span: 16 }}
|
||||
>
|
||||
<WeaError tipPosition="bottom" ref="weaError" error={getLabel(111, "验证码未填写")}>
|
||||
<div className="captchaInputBox">
|
||||
<WeaInput value={captcha} onChange={captcha => this.setState({ captcha })}/>
|
||||
<Button type="primary" onClick={this.handleSendCaptcha} disabled={time !== 60}>
|
||||
{
|
||||
time === 60 ? getLabel(111, "发送验证码") : `${time}S`
|
||||
}
|
||||
</Button>
|
||||
</div>
|
||||
</WeaError>
|
||||
</WeaFormItem>
|
||||
</WeaSearchGroup>
|
||||
</WeaDialog>
|
||||
}
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,25 +5,25 @@
|
|||
.wea-form-item-wrapper {
|
||||
.wea-error {
|
||||
width: 100%;
|
||||
|
||||
.captchaInputBox {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.wea-input-normal {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
button {
|
||||
padding: 8px 10px;
|
||||
border-radius: 0;
|
||||
min-width: 80px;
|
||||
text-align: center;
|
||||
height: 30px;
|
||||
line-height: 15px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.captchaInputBox {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.wea-input-normal {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
button {
|
||||
padding: 8px 10px;
|
||||
border-radius: 0;
|
||||
min-width: 80px;
|
||||
text-align: center;
|
||||
height: 30px;
|
||||
line-height: 15px;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ class Index extends Component {
|
|||
render() {
|
||||
return (
|
||||
<WeaReqTop
|
||||
title={this.props.title || getLabel(111, "编辑账套")} icon={<i className="icon-coms-fa"/>} iconBgcolor="#F14A2D"
|
||||
title={getLabel(111, "编辑账套")} icon={<i className="icon-coms-fa"/>} iconBgcolor="#F14A2D"
|
||||
showDropIcon={false} tabDatas={this.props.tabDatas} {...this.props}
|
||||
/>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ const getLabel = WeaLocaleProvider.getLabel;
|
|||
class Index extends Component {
|
||||
render() {
|
||||
return (
|
||||
<WeaTop title={this.props.title || getLabel(111, "新建账套")} icon={<i className="icon-coms-fa"/>}
|
||||
<WeaTop title={getLabel(111, "新建账套")} icon={<i className="icon-coms-fa"/>}
|
||||
iconBgcolor="#F14A2D" {...this.props}/>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,111 @@
|
|||
import React from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { toJS } from "mobx";
|
||||
|
||||
import { Button } from "antd";
|
||||
import { WeaLogView } from "comsMobx";
|
||||
import { WeaLocaleProvider, WeaNewScroll, WeaTop } from "ecCom";
|
||||
|
||||
import { getSearchs, renderLoading, renderNoright } from "../util"; // 从util文件引入公共的方法
|
||||
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
const WeaLogViewComp = WeaLogView.Component;
|
||||
|
||||
@inject("baseFormStore")
|
||||
@observer
|
||||
export default class BaseForm extends React.Component {
|
||||
componentWillMount() { // 初始化渲染页面
|
||||
const { baseFormStore: { doInit } } = this.props;
|
||||
doInit();
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps) {
|
||||
const { baseFormStore: { doInit } } = this.props;
|
||||
if (this.props.location.key !== nextProps.location.key) { // 手动刷新、切换菜单 重新初始化
|
||||
doInit();
|
||||
}
|
||||
}
|
||||
|
||||
// 渲染右键菜单和顶部下拉菜单
|
||||
getRightMenu() {
|
||||
const { baseFormStore: { setLogVisible, saveForm } } = this.props;
|
||||
let btnArr = [
|
||||
{
|
||||
key: "BTN_SAVE",
|
||||
icon: <i className="icon-coms-Preservation"/>,
|
||||
content: `${getLabel(86, "保存")}`,
|
||||
onClick: () => saveForm()
|
||||
},
|
||||
{
|
||||
key: "log",
|
||||
content: getLabel(83, "日志"),
|
||||
icon: <i className="icon-coms-Print-log"/>,
|
||||
onClick: () => setLogVisible(true)
|
||||
}];
|
||||
return btnArr;
|
||||
}
|
||||
|
||||
render() {
|
||||
/* 页面渲染说明:
|
||||
1、判断是否无权限: 是显示无权限页面
|
||||
2、渲染form页面:
|
||||
2-1: WeaRightMenu 右键菜单
|
||||
2-2: WeaTop: 顶部: 包括下拉菜单
|
||||
2-3: renderLoading: 加载数据中的loading效果(统一封装在util中)
|
||||
2-4: WeaNewScroll 顶部以下超长滚动处理
|
||||
2-5: 通过getSearchs方法渲染form
|
||||
*/
|
||||
const { baseFormStore } = this.props;
|
||||
const {
|
||||
loading,
|
||||
hasRight,
|
||||
form,
|
||||
condition,
|
||||
logVisible,
|
||||
logStore,
|
||||
saveLoading,
|
||||
setLogVisible,
|
||||
saveForm
|
||||
} = baseFormStore; // 从后台取数据 和 方法
|
||||
|
||||
if (!hasRight && !loading) { // 无权限处理
|
||||
return renderNoright();
|
||||
}
|
||||
|
||||
const btns = [ // 顶部按钮
|
||||
<Button type="primary" loading={saveLoading} onClick={() => saveForm()}>保存</Button>
|
||||
];
|
||||
const collectParams = { // 收藏功能配置
|
||||
favname: "基础表单",
|
||||
favouritetype: 1,
|
||||
objid: 0,
|
||||
link: "wui/index.html#/ns_demo01/index",
|
||||
importantlevel: 1
|
||||
};
|
||||
return (
|
||||
<WeaTop
|
||||
title="基础表单" // title
|
||||
icon={<i className="icon-coms-fa"/>} // 左侧图标
|
||||
iconBgcolor="#F14A2D" // 左侧图标背景色
|
||||
buttons={btns} // 顶部按钮: 这里是保存按钮,不需要可以不显示
|
||||
buttonSpace={10} // 按钮之间的间隔
|
||||
showDropIcon={true} // 是否显示右侧下拉按钮
|
||||
dropMenuDatas={this.getRightMenu()} // 下拉菜单(和页面的右键菜单相同)
|
||||
dropMenuProps={{ collectParams }} // 收藏功能: 配置之后显示 收藏、帮助、显示页面地址 这3个功能
|
||||
>
|
||||
{loading ? renderLoading() :
|
||||
<WeaNewScroll height="100%">
|
||||
{getSearchs(form, toJS(condition), 1)}
|
||||
</WeaNewScroll>
|
||||
}
|
||||
<WeaLogViewComp // 日志功能(一般后端的应用设置是需要的)
|
||||
visible={logVisible} // 日志弹框的显示隐藏
|
||||
onCancel={() => setLogVisible(false)} // 关闭日志弹框时的操作:设置logVisible属性为false
|
||||
logStore={logStore} // 日志的store
|
||||
logType="1" // 模块编码: 该参数要根据模块来给
|
||||
logSmallType="1" // 细分模块编码: 该参数要根据模块来给
|
||||
/>
|
||||
</WeaTop>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
export const PAGE = {
|
||||
"salaryArchive": ["/hrmSalary/salaryFile"], //薪资档案
|
||||
"salarySob": ["/hrmSalary/ledger"], //薪资账套
|
||||
"salaryAcct": ["/hrmSalary/calculate", "/hrmSalary/calcView"], //薪资核算
|
||||
"salaryBill": ["/hrmSalary/payroll", "/hrmSalary/payrollGrant", "/hrmSalary/payrollDetail"], //工资单
|
||||
"taxDeclaration": ["/hrmSalary/declare", "/hrmSalary/generateDeclarationDetail"], //个税
|
||||
"addUpDeduction": ["/dataAcquisition/cumDeduct"], //累计专项附加扣除
|
||||
"specialAddDeduction": ["/dataAcquisition/specialAddDeduction"], //专项附加扣除
|
||||
"otherDeduction": ["/dataAcquisition/otherDeduct"], //其他免税扣除
|
||||
"addUpSituation": ["/dataAcquisition/cumSituation"], //往期累计情况
|
||||
"attendQuote": ["/dataAcquisition/attendance"], //考勤引用
|
||||
"myBill": ["/hrmSalary/mySalary", "/hrmSalary/mySalaryMobile"], //薪资福利
|
||||
"taxAgent": ["/hrmSalary/taxAgent"], //个税扣缴义务人
|
||||
"auth": ["/hrmSalary/roleManagement"], //业务管理线
|
||||
"variableArchive": ["/hrmSalary/variableSalary"], //浮动薪酬
|
||||
"siAccount": ["/socialSecurityBenefits/standingBook", "/socialSecurityBenefits/standingBookDetail", "/socialSecurityBenefits/sbofflineComparison"], //社保福利台账
|
||||
"siArchive": ["/socialSecurityBenefits/archives"], //社保档案
|
||||
"salaryField": ["/hrmSalary/fieldManagement"], //字段管理
|
||||
"salaryItem": ["/hrmSalary/salaryItem"], //薪资项目管理
|
||||
"siScheme": ["/socialSecurityBenefits/programme"], //社保福利方案
|
||||
"report": ["/hrmSalary/analysisOfSalaryStatistics", "/hrmSalary/reportView"], //报表
|
||||
"dataPush": ["/hrmSalary/datapush"], //数据推送
|
||||
"adjustRecord": ["/hrmSalary/adjustSalaryManage"] //调薪管理
|
||||
};
|
||||
export const EXCLUDE_PAGE = ["mobilepayroll"];
|
||||
|
|
@ -28,7 +28,7 @@ import PayrollDetail from "./pages/payroll/payrollDetail/payrollDetail";
|
|||
// import Declare from "./pages/declare";
|
||||
import Declare from "./pages/declare/declare"; //重构的个税申报表
|
||||
import TaxRate from "./pages/taxRate";
|
||||
import TaxAgent from "./pages/salary/taxAgent";
|
||||
import TaxAgent from "./pages/taxAgent";
|
||||
import CalculateDetail from "./pages/calculateDetail";
|
||||
import PlaceOnFileDetail from "./pages/calculateDetail/placeOnFileDetail";
|
||||
import CompareDetail from "./pages/calculateDetail/compareDetail";
|
||||
|
|
@ -42,7 +42,6 @@ import MobilePayroll from "./pages/mobilePayroll";
|
|||
import SysConfig from "./pages/sysConfig";
|
||||
import RuleConfig from "./pages/ruleConfig/ruleConfig";
|
||||
import Appconfig from "./pages/appConfig";
|
||||
import RoleManagement from "./pages/roleManagement";
|
||||
import FieldManagement from "./pages/fieldManagement";
|
||||
import AnalysisOfSalaryStatistics from "./pages/analysisOfSalaryStatistics";
|
||||
import EmployeeList from "./pages/employeeView";
|
||||
|
|
@ -54,7 +53,6 @@ import AdjustSalaryManage from "./pages/adjustSalaryManage";
|
|||
import TopologyMap from "./pages/topologyMap";
|
||||
import SupplementaryCalc from "./pages/supplementaryCalc";
|
||||
import VariableSalary from "./pages/variableSalary";
|
||||
import Datapush from "./pages/datapush";
|
||||
import Layout from "./layout";
|
||||
import stores from "./stores";
|
||||
import "./style/index";
|
||||
|
|
@ -66,7 +64,6 @@ getLocaleLabel = function (nextState, replace, callback) {
|
|||
};
|
||||
const SocialSecurityBenefits = (props) => props.children;
|
||||
const DataAcquisition = (props) => props.children;
|
||||
|
||||
const Routes = (
|
||||
<Route key="hrmSalary" path="hrmSalary" onEnter={getLocaleLabel} component={Layout}>
|
||||
<Route key="historicalPayroll" path="historicalPayroll" component={HistoricalPayroll}/>
|
||||
|
|
@ -113,11 +110,9 @@ const Routes = (
|
|||
<Route key="sysconfig" path="sysconfig" component={SysConfig}/>
|
||||
<Route key="sysconfig-1" path="sysconfig-1" component={RuleConfig}/>
|
||||
<Route key="appconfig" path="appconfig" component={Appconfig}/>
|
||||
<Route key="roleManagement" path="roleManagement" component={RoleManagement}/>
|
||||
<Route key="fieldManagement" path="fieldManagement" component={FieldManagement}/>
|
||||
<Route key="analysisOfSalaryStatistics" path="analysisOfSalaryStatistics" component={AnalysisOfSalaryStatistics}/>
|
||||
<Route key="analysisOfSalaryStatisticsId" path="analysisOfSalaryStatistics/:employeeId" component={EmployeeList}/>
|
||||
<Route key="datapush" path="datapush" component={Datapush}/>
|
||||
<Route key="reportView" path="reportView" component={ReportView}/>
|
||||
<Route key="externalPersonManage" path="externalPersonManage" component={ExternalPersonManage}/>
|
||||
<Route key="topologyView" path="topologyView/:salarySobId/:salaryItemId" component={TopologyMap}/>
|
||||
|
|
|
|||
|
|
@ -8,17 +8,12 @@
|
|||
* @description:
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { WeaLocaleProvider, WeaTools } from "ecCom";
|
||||
import Authority from "./pages/mySalary/authority";
|
||||
import { EXCLUDE_PAGE } from "./config";
|
||||
import stores from "./stores";
|
||||
|
||||
const { ls } = WeaTools;
|
||||
const { getLabel } = WeaLocaleProvider;
|
||||
|
||||
@inject("taxAgentStore")
|
||||
@observer
|
||||
class Layout extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
|
@ -47,11 +42,7 @@ class Layout extends Component {
|
|||
let header = document.getElementById("container");
|
||||
header.appendChild(link);
|
||||
top.$(".ant-message").remove();
|
||||
if (_.every(EXCLUDE_PAGE, page => window.location.hash.indexOf(page) === -1)) {
|
||||
stores.taxAgentStore.getPermission();
|
||||
} else {
|
||||
stores.taxAgentStore.initPageAndOptAuth();
|
||||
}
|
||||
window.location.hash.indexOf("mobilepayroll") === -1 && stores.taxAgentStore.getPermission();
|
||||
}
|
||||
window.addEventListener("storage", this.setFontSize);
|
||||
}
|
||||
|
|
@ -79,10 +70,9 @@ class Layout extends Component {
|
|||
};
|
||||
|
||||
render() {
|
||||
const { taxAgentStore: { PageAndOptAuth, loading } } = this.props;
|
||||
return (<WeaLocaleProvider>
|
||||
<Authority store={{ loading, hasRight: PageAndOptAuth.able }}>{this.props.children}</Authority>
|
||||
</WeaLocaleProvider>);
|
||||
return (
|
||||
<WeaLocaleProvider>{this.props.children}</WeaLocaleProvider>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -166,7 +166,7 @@ class SalaryDetails extends Component {
|
|||
this.postMessageToChild({
|
||||
dataSource, pageInfo, selectedRowKeys, showTotalCell, calcDetail: true, tableScrollHeight: 154, sumRow,
|
||||
columns: _.map(columns, (it, idx) => ({
|
||||
dataIndex: it.column || it.dataIndex, title: it.text || it.title, calcDetail: true,
|
||||
dataIndex: it.column || it.dataIndex, title: it.text || it.title, calcDetail: true, showSee: false,
|
||||
width: (it.dataIndex === "taxAgent" || it.dataIndex === "salarySob") ? 176 : (it.width || it.oldWidth),
|
||||
fixed: (idx === 1 || idx === 0 || idx === 2) ? "left" : "",
|
||||
ellipsis: true
|
||||
|
|
|
|||
|
|
@ -271,7 +271,7 @@ class Index extends Component {
|
|||
|
||||
render() {
|
||||
const {
|
||||
taxAgentStore: { PageAndOptAuth },
|
||||
taxAgentStore: { statisticsReportBtn, PageAndOptAuth },
|
||||
attendanceStore: { statisticsForm, reportForm, tableStore }
|
||||
} = this.props;
|
||||
const {
|
||||
|
|
@ -279,7 +279,6 @@ class Index extends Component {
|
|||
reportName, keyword, year, logDialogVisible, filterConditions,
|
||||
dateRange, showSearchAd, isQuery
|
||||
} = this.state;
|
||||
const statisticsReportBtn = PageAndOptAuth.opts.includes("admin");
|
||||
const buttons = selectedKey === "statistics" ? [
|
||||
<Button type="primary" onClick={() => this.handleReqBtnsClick("addReport")}>{getLabel(111, "新建报表")}</Button>,
|
||||
<Button type="ghost"
|
||||
|
|
@ -290,7 +289,7 @@ class Index extends Component {
|
|||
onSearch={() => this.handleReqBtnsClick("search")}/>
|
||||
] : selectedKey === "detail" ? [
|
||||
<span className="employeeYearWrapper">
|
||||
<span>{getLabel(111, "年度:")}</span>
|
||||
<span>{getLabel(111, "年薪资核算人员明细:")}</span>
|
||||
<WeaDatePicker value={year} format="YYYY" onChange={year => this.setState({ year })}/>
|
||||
</span>,
|
||||
<WeaInputSearch placeholder={getLabel(111, "请输入姓名、工号、身份证号")} className="search"
|
||||
|
|
|
|||
|
|
@ -94,8 +94,8 @@ class AppConfig extends Component {
|
|||
} = this.state;
|
||||
const btns = [
|
||||
<Button type="primary" loading={loading} onClick={this.appSettingSave}>保存</Button>,
|
||||
<Button type="ghost" onClick={() => this.handleOperate("import")}>{getLabel(111, "迁入")}</Button>,
|
||||
<Button type="ghost" onClick={() => this.handleOperate("export")}>{getLabel(111, "迁出")}</Button>
|
||||
// <Button type="ghost" onClick={() => this.handleOperate("import")}>{getLabel(111, "迁入")}</Button>,
|
||||
// <Button type="ghost" onClick={() => this.handleOperate("export")}>{getLabel(111, "迁出")}</Button>
|
||||
];
|
||||
const items = [
|
||||
{
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ import LogDialog from "../../components/logViewModal";
|
|||
import { backCalculate, deleteSalaryacct, fileSalaryAcct, reAccounting } from "../../apis/calculate";
|
||||
import FormInfo from "../../components/FormInfo";
|
||||
import { queryConditions } from "./config";
|
||||
import { postFetch } from "../../util/request";
|
||||
import { getTaxAgentSelectList } from "../../apis/taxAgent";
|
||||
import cs from "classnames";
|
||||
import "./index.less";
|
||||
|
||||
|
|
@ -47,13 +47,13 @@ class Calculate extends Component {
|
|||
}
|
||||
|
||||
async componentDidMount() {
|
||||
const { data } = await postFetch("/api/bs/hrmsalary/taxAgent/listAuth", { filterType: "QUERY_DATA" });
|
||||
const { data } = await getTaxAgentSelectList();
|
||||
this.setState({
|
||||
conditions: _.map(queryConditions, item => ({
|
||||
...item, items: _.map(item.items, o => {
|
||||
o = { ...o, label: getLabel(o.lanId, o.label) };
|
||||
if (getKey(o) === "taxAgentIds") {
|
||||
return { ...o, options: _.map(data, k => ({ key: k.id + "", showname: k.name })) };
|
||||
return { ...o, options: _.map(data, k => ({ key: k.id, showname: k.content })) };
|
||||
}
|
||||
return { ...o };
|
||||
})
|
||||
|
|
@ -62,9 +62,8 @@ class Calculate extends Component {
|
|||
}
|
||||
|
||||
renderCalculateOpts = () => {
|
||||
const { taxAgentStore: { PageAndOptAuth } } = this.props;
|
||||
const { taxAgentStore: { showOperateBtn } } = this.props;
|
||||
const { queryParams, isRefresh, showAdvance } = this.state;
|
||||
const admin = PageAndOptAuth.opts.includes("admin");
|
||||
let calculateOpts = [
|
||||
<Button type="primary" onClick={() => this.setState({
|
||||
calcDaialog: {
|
||||
|
|
@ -78,7 +77,7 @@ class Calculate extends Component {
|
|||
queryParams: { ...queryParams, ...v }
|
||||
})} onSearch={() => this.setState({ isRefresh: !isRefresh })}/>
|
||||
];
|
||||
return !admin ? calculateOpts.slice(1) : calculateOpts;
|
||||
return !showOperateBtn ? calculateOpts.slice(1) : calculateOpts;
|
||||
};
|
||||
handleCalcOpts = ({ key }, record) => {
|
||||
const { isRefresh, progressModule } = this.state, { id } = record;
|
||||
|
|
@ -224,7 +223,8 @@ class Calculate extends Component {
|
|||
key: "log", icon: <i className="iconfont icon-caozuorizhi32"/>,
|
||||
content: getLabel(545781, "操作日志")
|
||||
}
|
||||
]}>
|
||||
]}
|
||||
>
|
||||
<div className="calculate-body">
|
||||
<div className={cs("advance-calc", { "show-advance-calc": showAdvance })}>
|
||||
<FormInfo center={false} itemRender={{}} form={form} formFields={conditions} colCount={2}/>
|
||||
|
|
|
|||
|
|
@ -75,12 +75,7 @@ class Index extends Component {
|
|||
</span>,
|
||||
render: (__, record) => {
|
||||
const { operate: opts = [] } = record;
|
||||
const admin = record.opts.includes("admin");
|
||||
const operate = admin ? [...opts, { index: "log", text: getLabel(30586, "查看日志") }] : [
|
||||
{ index: "3", text: getLabel(111, "查看") },
|
||||
{ index: "null", text: "" },
|
||||
{ index: "log", text: getLabel(30586, "查看日志") }
|
||||
];
|
||||
const operate = [...opts, { index: "log", text: getLabel(30586, "查看日志") }];
|
||||
return <React.Fragment>
|
||||
{
|
||||
_.map(operate.slice(0, 2), f => (
|
||||
|
|
|
|||
|
|
@ -18,21 +18,23 @@ class Layout extends Component {
|
|||
}
|
||||
|
||||
salaryacctAcctresultCheckAuth = () => {
|
||||
const { taxAgentStore: { PageAndOptAuth } } = this.props;
|
||||
const { isOpenDevolution } = PageAndOptAuth;
|
||||
if (isOpenDevolution) {
|
||||
const { routeParams: { salaryAcctRecordId } } = this.props;
|
||||
this.setState({ store: { ...this.state.store, loading: true } });
|
||||
salaryacctAcctresultCheckAuth({ salaryAcctRecordId }).then(({ status, data }) => {
|
||||
this.setState({ store: { ...this.state.store, loading: false, hasRight: status && data } }, () => {
|
||||
this.state.store.hasRight && this.props.init && this.props.init();
|
||||
const { taxAgentStore: { getPermission } } = this.props;
|
||||
this.setState({ store: { ...this.state.store, loading: true } });
|
||||
getPermission().then(({ data }) => {
|
||||
const { isOpenDevolution } = data;
|
||||
if (isOpenDevolution) {
|
||||
const { routeParams: { salaryAcctRecordId } } = this.props;
|
||||
salaryacctAcctresultCheckAuth({ salaryAcctRecordId }).then(({ status, data }) => {
|
||||
this.setState({ store: { ...this.state.store, loading: false, hasRight: status && data } }, () => {
|
||||
this.state.store.hasRight && this.props.init && this.props.init();
|
||||
});
|
||||
});
|
||||
});
|
||||
} else {
|
||||
this.setState({ store: { ...this.state.store, loading: false, hasRight: true } }, () => {
|
||||
this.props.init && this.props.init();
|
||||
});
|
||||
}
|
||||
} else {
|
||||
this.setState({ store: { ...this.state.store, loading: false, hasRight: true } }, () => {
|
||||
this.props.init && this.props.init();
|
||||
});
|
||||
}
|
||||
}).catch(() => this.setState({ store: { ...this.state.store, loading: false } }));
|
||||
};
|
||||
|
||||
render() {
|
||||
|
|
|
|||
|
|
@ -36,19 +36,21 @@ export default class CompareDetail extends React.Component {
|
|||
current: 1
|
||||
};
|
||||
fetchComparisonResultList(params);
|
||||
this.salaryacctAcctresultCheckAuth({ salaryAcctRecordId: getQueryString("id") });
|
||||
this.salaryacctAcctresultCheckAuth({ salaryAcctRecordId: getQueryString("id") })
|
||||
}
|
||||
|
||||
salaryacctAcctresultCheckAuth = (params) => {
|
||||
const { taxAgentStore: { PageAndOptAuth } } = this.props;
|
||||
const { isOpenDevolution } = PageAndOptAuth;
|
||||
if (isOpenDevolution) {
|
||||
salaryacctAcctresultCheckAuth(params).then(({ status, data }) => {
|
||||
this.setState({ calculateAuth: data && status });
|
||||
});
|
||||
} else {
|
||||
this.setState({ calculateAuth: true });
|
||||
}
|
||||
const { taxAgentStore: { getPermission } } = this.props;
|
||||
getPermission().then(({ data }) => {
|
||||
const { isOpenDevolution } = data;
|
||||
if (isOpenDevolution) {
|
||||
salaryacctAcctresultCheckAuth(params).then(({ status, data }) => {
|
||||
this.setState({ calculateAuth: data && status });
|
||||
});
|
||||
} else {
|
||||
this.setState({ calculateAuth: true });
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
getColumns = (columns) => {
|
||||
|
|
|
|||
|
|
@ -69,15 +69,17 @@ export default class CalculateDetail extends React.Component {
|
|||
}
|
||||
|
||||
salaryacctAcctresultCheckAuth = (params) => {
|
||||
const { taxAgentStore: { PageAndOptAuth } } = this.props;
|
||||
const { isOpenDevolution } = PageAndOptAuth;
|
||||
if (isOpenDevolution) {
|
||||
salaryacctAcctresultCheckAuth(params).then(({ status, data }) => {
|
||||
this.setState({ calculateAuth: data && status });
|
||||
});
|
||||
} else {
|
||||
this.setState({ calculateAuth: true });
|
||||
}
|
||||
const { taxAgentStore: { getPermission } } = this.props;
|
||||
getPermission().then(({ data }) => {
|
||||
const { isOpenDevolution } = data;
|
||||
if (isOpenDevolution) {
|
||||
salaryacctAcctresultCheckAuth(params).then(({ status, data }) => {
|
||||
this.setState({ calculateAuth: data && status });
|
||||
});
|
||||
} else {
|
||||
this.setState({ calculateAuth: true });
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
Input = (value, key) => {
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import {
|
|||
deleteAttendance,
|
||||
getAttendanceFieldSettingList,
|
||||
getAttendanceList,
|
||||
getLedgerList,
|
||||
getSalaryCycleAndAttendCycle,
|
||||
importAttendQuoteData,
|
||||
returnToAttendanceFieldSettingDefault,
|
||||
|
|
@ -25,7 +26,6 @@ import moment from "moment";
|
|||
import SelectItemsWrapper from "../../../../components/selectItemsModal/selectItemsWrapper";
|
||||
import AttendanceRefrenceDataModal from "./attendanceRefrenceDataModal";
|
||||
import AttendanceDataViewSlide from "./attendanceDataViewSlide";
|
||||
import { postFetch } from "../../../../util/request";
|
||||
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
|
||||
|
|
@ -51,7 +51,7 @@ class AttendanceDataComp extends Component {
|
|||
},
|
||||
fieldSetPayload: { visible: false, title: "", children: null },
|
||||
attendanceReferencePayload: { visible: false, title: "" },
|
||||
attendanceViewPayload: { visible: false, attendQuoteId: "", salaryYearMonth: "", showOperateBtn: false }
|
||||
attendanceViewPayload: { visible: false, attendQuoteId: "", salaryYearMonth: "" }
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -85,26 +85,25 @@ class AttendanceDataComp extends Component {
|
|||
};
|
||||
getLedgerList = (importData) => {
|
||||
const { importFormPayload } = this.state;
|
||||
postFetch("/api/bs/hrmsalary/salarysob/listAuth", { filterType: "ADMIN_DATA" })
|
||||
.then(({ status, data }) => {
|
||||
if (status) {
|
||||
getLedgerList().then(({ status, data }) => {
|
||||
if (status) {
|
||||
this.setState({
|
||||
importFormPayload: {
|
||||
...importFormPayload, salarySobId: _.head(data).id,
|
||||
salarySobList: _.map(data, it => ({ key: it.id, showname: it.content }))
|
||||
}
|
||||
}, async () => {
|
||||
const { importFormPayload } = this.state;
|
||||
const { salaryYearMonth, salarySobId } = importFormPayload;
|
||||
const payload = { salaryYearMonthStr: salaryYearMonth, salarySobId };
|
||||
const { data } = await getSalaryCycleAndAttendCycle(payload);
|
||||
this.setState({
|
||||
importFormPayload: {
|
||||
...importFormPayload, salarySobId: String(_.head(data).id),
|
||||
salarySobList: _.map(data, it => ({ key: String(it.id), showname: it.name }))
|
||||
}
|
||||
}, async () => {
|
||||
const { importFormPayload } = this.state;
|
||||
const { salaryYearMonth, salarySobId } = importFormPayload;
|
||||
const payload = { salaryYearMonthStr: salaryYearMonth, salarySobId };
|
||||
const { data } = await getSalaryCycleAndAttendCycle(payload);
|
||||
this.setState({
|
||||
importData: { ...importData, params: { salaryYearMonth, salarySobId } },
|
||||
importFormPayload: { ...importFormPayload, ...data }
|
||||
});
|
||||
importData: { ...importData, params: { salaryYearMonth, salarySobId } },
|
||||
importFormPayload: { ...importFormPayload, ...data }
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
handleChangeImportPayload = (key, value) => {
|
||||
const { importFormPayload, importData } = this.state;
|
||||
|
|
@ -150,11 +149,11 @@ class AttendanceDataComp extends Component {
|
|||
}
|
||||
});
|
||||
};
|
||||
handleViewAttendanceData = ({ id, attendCycle, opts = [] }) => {
|
||||
handleViewAttendanceData = ({ id, attendCycle }) => {
|
||||
const { attendanceViewPayload } = this.state;
|
||||
this.setState({
|
||||
attendanceViewPayload: {
|
||||
...attendanceViewPayload, showOperateBtn: opts.includes("admin"),
|
||||
...attendanceViewPayload,
|
||||
visible: true, attendQuoteId: id,
|
||||
salaryYearMonth: attendCycle
|
||||
}
|
||||
|
|
@ -288,7 +287,7 @@ class AttendanceDataComp extends Component {
|
|||
dataSource, columns, pageInfo, loading, importData, importFormPayload, fieldSetPayload,
|
||||
attendanceReferencePayload, attendanceViewPayload
|
||||
} = this.state;
|
||||
const { salaryYearMonth } = this.props;
|
||||
const { showOperateBtn, salaryYearMonth } = this.props;
|
||||
const pagination = {
|
||||
...pageInfo,
|
||||
showTotal: total => `共 ${total} 条`,
|
||||
|
|
@ -316,11 +315,10 @@ class AttendanceDataComp extends Component {
|
|||
width: 120,
|
||||
dataIndex: "operate",
|
||||
render: (_, record) => {
|
||||
const { opts = [] } = record;
|
||||
return (
|
||||
<div className="linkWapper">
|
||||
<a href="javascript: void(0);" onClick={() => this.handleViewAttendanceData(record)}>查看</a>
|
||||
{opts.includes("admin") &&
|
||||
{showOperateBtn &&
|
||||
<React.Fragment>
|
||||
<a href="javascript: void(0);" style={{ marginRight: 10 }}
|
||||
onClick={() => this.handleDeleteAttendanceData(record)}>删除</a>
|
||||
|
|
@ -338,18 +336,9 @@ class AttendanceDataComp extends Component {
|
|||
</React.Fragment>
|
||||
}
|
||||
{
|
||||
!opts.includes("admin") &&
|
||||
<Dropdown
|
||||
overlay={
|
||||
<Menu>
|
||||
<Menu.Item>
|
||||
<a href="javascript:void(0)"
|
||||
onClick={() => this.props.onFilterLog("log", record.id)}>{getLabel(545781, "操作日志")}</a>
|
||||
</Menu.Item>
|
||||
</Menu>
|
||||
}>
|
||||
<a href="javascript:void(0)"><i className="icon-coms-more"/></a>
|
||||
</Dropdown>
|
||||
!showOperateBtn &&
|
||||
<a href="javascript:void(0)"
|
||||
onClick={() => this.props.onFilterLog("log", record.id)}>{getLabel(545781, "操作日志")}</a>
|
||||
}
|
||||
</div>
|
||||
);
|
||||
|
|
@ -372,13 +361,14 @@ class AttendanceDataComp extends Component {
|
|||
{/* 考勤数据引用 */}
|
||||
<AttendanceRefrenceDataModal {...attendanceReferencePayload} onCancel={this.handleCloseQuoteModal}/>
|
||||
{/* 考勤数据查看 */}
|
||||
<AttendanceDataViewSlide {...attendanceViewPayload} onClose={() => this.setState({
|
||||
attendanceViewPayload: {
|
||||
...attendanceViewPayload,
|
||||
visible: false,
|
||||
attendQuoteId: ""
|
||||
}
|
||||
})}/>
|
||||
<AttendanceDataViewSlide {...attendanceViewPayload} showOperateBtn={showOperateBtn}
|
||||
onClose={() => this.setState({
|
||||
attendanceViewPayload: {
|
||||
...attendanceViewPayload,
|
||||
visible: false,
|
||||
attendQuoteId: ""
|
||||
}
|
||||
})}/>
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,9 +5,9 @@
|
|||
* Date: 2023/3/7
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { WeaInputSearch, WeaLocaleProvider, WeaSlideModal, WeaTable, WeaTop } from "ecCom";
|
||||
import { Button } from "antd";
|
||||
import { WeaInputSearch, WeaLocaleProvider, WeaSlideModal, WeaTop } from "ecCom";
|
||||
import { viewAttendQuote } from "../../../../apis/attendance";
|
||||
import { Button, Spin } from "antd";
|
||||
import "./index.less";
|
||||
|
||||
const { getLabel } = WeaLocaleProvider;
|
||||
|
|
@ -16,11 +16,31 @@ class AttendanceDataViewSlide extends Component {
|
|||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
loading: { query: false }, keyword: "", dataSource: [], columns: [],
|
||||
pageInfo: { current: 1, pageSize: 10, total: 0 }
|
||||
loading: { query: false }, keyword: "", dataSource: [], pageInfo: { current: 1, pageSize: 10, total: 0 }
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
window.addEventListener("message", this.handleReceive, false);
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
window.removeEventListener("message", this.handleReceive, false);
|
||||
}
|
||||
|
||||
handleReceive = async ({ data }) => {
|
||||
const { type, payload: { id, params } = {} } = data;
|
||||
if (type === "turn") {
|
||||
switch (id) {
|
||||
case "PAGEINFO":
|
||||
this.setState({ pageInfo: { ...this.state.pageInfo, ...params } }, () => this.viewAttendQuote());
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
componentWillReceiveProps(nextProps, nextContext) {
|
||||
if (nextProps.visible !== this.props.visible && nextProps.visible) {
|
||||
document.querySelector(".attendanceRefWrapper").classList.add("zIndex0-attendance");
|
||||
|
|
@ -33,19 +53,29 @@ class AttendanceDataViewSlide extends Component {
|
|||
|
||||
viewAttendQuote = (extraPayload = {}, props) => {
|
||||
const { loading, pageInfo, keyword } = this.state;
|
||||
const { attendQuoteId } = props;
|
||||
const { attendQuoteId } = props || this.props;
|
||||
this.setState({ loading: { ...loading, query: true } });
|
||||
viewAttendQuote({ ...pageInfo, attendQuoteId, keyword, ...extraPayload }).then(({ status, data }) => {
|
||||
this.setState({ loading: { ...loading, query: false } });
|
||||
if (status) {
|
||||
const { columns, list: dataSource, pageNum: current, pageSize, total } = data.pageInfo;
|
||||
this.setState({
|
||||
pageInfo: { ...pageInfo, current, pageSize, total }, dataSource,
|
||||
columns: _.map(columns, (o, i) => ({ ...o, width: 150, fixed: i === 0 ? "left" : null }))
|
||||
});
|
||||
pageInfo: { ...pageInfo, current, pageSize, total }, dataSource
|
||||
}, () => this.postMessageToChild({
|
||||
pageInfo: this.state.pageInfo, dataSource, showRowSelection: false, unitTableType: "attendanceView",
|
||||
columns: _.map(columns, (o, i) => ({ ...o, width: 150, fixed: i === 0 ? "left" : false }))
|
||||
}));
|
||||
}
|
||||
}).catch(() => this.setState({ loading: { ...loading, query: false } }));
|
||||
};
|
||||
postMessageToChild = (payload = {}) => {
|
||||
const i18n = {
|
||||
"操作": getLabel(30585, "操作"), "编辑": getLabel(111, "编辑"), "共": getLabel(18609, "共"),
|
||||
"条": getLabel(18256, "条")
|
||||
};
|
||||
const childFrameObj = document.getElementById("attendanceViewTable");
|
||||
childFrameObj && childFrameObj.contentWindow.postMessage(JSON.stringify({ ...payload, i18n }), "*");
|
||||
};
|
||||
handleExportAttendQuote = () => {
|
||||
if (!this.handleDebounce) {
|
||||
this.handleDebounce = _.debounce(() => {
|
||||
|
|
@ -60,24 +90,7 @@ class AttendanceDataViewSlide extends Component {
|
|||
|
||||
render() {
|
||||
const { showOperateBtn, salaryYearMonth, ...extra } = this.props;
|
||||
const { columns, dataSource, loading, pageInfo, keyword } = this.state;
|
||||
const pagination = {
|
||||
...pageInfo,
|
||||
showTotal: (total) => `共 ${total} 条`,
|
||||
pageSizeOptions: ["10", "20", "50", "100"],
|
||||
showSizeChanger: true,
|
||||
showQuickJumper: true,
|
||||
onShowSizeChange: (current, pageSize) => {
|
||||
this.setState({
|
||||
pageInfo: { ...pageInfo, current, pageSize }
|
||||
}, () => this.viewAttendQuote({}, this.props));
|
||||
},
|
||||
onChange: (current) => {
|
||||
this.setState({
|
||||
pageInfo: { ...pageInfo, current }
|
||||
}, () => this.viewAttendQuote({}, this.props));
|
||||
}
|
||||
};
|
||||
const { loading, keyword } = this.state;
|
||||
const btns = [
|
||||
<Button type="primary" onClick={this.handleExportAttendQuote}>{getLabel(81272, "导出全部")}</Button>,
|
||||
<WeaInputSearch
|
||||
|
|
@ -100,9 +113,16 @@ class AttendanceDataViewSlide extends Component {
|
|||
<div>{getLabel(543376, "考勤周期")}:{salaryYearMonth}</div>
|
||||
<div></div>
|
||||
</div>
|
||||
<WeaTable
|
||||
columns={columns} dataSource={dataSource} bordered pagination={pagination}
|
||||
loading={loading.query} scroll={{ x: 1200, y: `calc(100vh - 240px)` }}/>
|
||||
<div style={{ height: `calc(100% - 40px)` }}>
|
||||
<Spin spinning={loading.query}>
|
||||
<iframe
|
||||
style={{ border: 0, width: "100%", height: "100%" }}
|
||||
// src="http://localhost:7607/#/unitTable"
|
||||
src="/spa/hrmSalary/hrmSalaryCalculateDetail/index.html#/unitTable"
|
||||
id="attendanceViewTable"
|
||||
/>
|
||||
</Spin>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import { getSearchs } from "../../../../util";
|
|||
import {
|
||||
checkOperation,
|
||||
getAttendanceFieldSettingList,
|
||||
getLedgerList,
|
||||
returnToAttendanceFieldSettingDefault,
|
||||
saveAttendanceFieldSetting,
|
||||
saveAttendanceFieldSettingAsDefault,
|
||||
|
|
@ -20,7 +21,6 @@ import {
|
|||
} from "../../../../apis/attendance";
|
||||
import SelectItemModal from "../../../../components/selectItemsModal";
|
||||
import SelectItemsWrapper from "../../../../components/selectItemsModal/selectItemsWrapper";
|
||||
import { postFetch } from "../../../../util/request";
|
||||
import "./index.less";
|
||||
|
||||
@inject("attendanceStore")
|
||||
|
|
@ -46,26 +46,25 @@ class AttendanceRefrenceDataModal extends Component {
|
|||
|
||||
getLedgerList = () => {
|
||||
const { attendanceStore: { refenceform } } = this.props;
|
||||
postFetch("/api/bs/hrmsalary/salarysob/listAuth", { filterType: "ADMIN_DATA" })
|
||||
.then(({ status, data }) => {
|
||||
if (status) {
|
||||
this.setState({
|
||||
condition: _.map(reFrenceConditions, (item) => {
|
||||
const { items } = item;
|
||||
return {
|
||||
...item,
|
||||
items: _.map(items, child => {
|
||||
const { domkey } = child;
|
||||
if (domkey[0] === "salarySobIds") {
|
||||
return { ...child, options: _.map(data, it => ({ key: String(it.id), showname: it.name })) };
|
||||
}
|
||||
return { ...child };
|
||||
})
|
||||
};
|
||||
})
|
||||
}, () => refenceform.initFormFields(this.state.condition));
|
||||
}
|
||||
});
|
||||
getLedgerList().then(({ status, data }) => {
|
||||
if (status) {
|
||||
this.setState({
|
||||
condition: _.map(reFrenceConditions, (item) => {
|
||||
const { items } = item;
|
||||
return {
|
||||
...item,
|
||||
items: _.map(items, child => {
|
||||
const { domkey } = child;
|
||||
if (domkey[0] === "salarySobIds") {
|
||||
return { ...child, options: _.map(data, it => ({ key: it.id, showname: it.content })) };
|
||||
}
|
||||
return { ...child };
|
||||
})
|
||||
};
|
||||
})
|
||||
}, () => refenceform.initFormFields(this.state.condition));
|
||||
}
|
||||
});
|
||||
};
|
||||
/*
|
||||
* Author: 黎永顺
|
||||
|
|
|
|||
|
|
@ -54,8 +54,8 @@
|
|||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.wea-new-table {
|
||||
background: #FFF;
|
||||
.ant-spin-nested-loading, .ant-spin-container {
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -78,8 +78,7 @@ class Index extends Component {
|
|||
|
||||
render() {
|
||||
const { selectedKey, salaryMonth, fieldName, logDialogVisible, filterConditions } = this.state;
|
||||
const { taxAgentStore: { PageAndOptAuth } } = this.props;
|
||||
const showOperateBtn = PageAndOptAuth.opts.includes("admin");
|
||||
const { taxAgentStore: { showOperateBtn } } = this.props;
|
||||
const topTab = [
|
||||
{ title: "考勤数据", key: "DATA" },
|
||||
{ title: "字段管理", key: "FIELD" }
|
||||
|
|
@ -116,6 +115,7 @@ class Index extends Component {
|
|||
selectedKey === "DATA" ?
|
||||
<AttendanceDataComp
|
||||
ref={dom => this.attendanceTableRef = dom}
|
||||
showOperateBtn={showOperateBtn}
|
||||
salaryYearMonth={salaryMonth}
|
||||
onFilterLog={(type, targetid) => this.onDropMenuClick(type, targetid)}
|
||||
/> :
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@ import TableRecord from "../components/tableRecord";
|
|||
import { dataCollectCondition } from "./columns";
|
||||
import { removePropertyCondition } from "../../../util/response";
|
||||
import { convertToUrlString } from "../../../util/url";
|
||||
import { postFetch } from "../../../util/request";
|
||||
import { getDomkes } from "../../../util";
|
||||
import Layout from "../layout";
|
||||
import moment from "moment";
|
||||
|
|
@ -67,8 +66,7 @@ class Index extends Component {
|
|||
exportPayloadUrl: "",
|
||||
exportPayloadType: false,
|
||||
advanceCondition: null,
|
||||
targetid: "",
|
||||
taxAgentOption: []
|
||||
targetid: ""
|
||||
};
|
||||
this.tableRef = null;
|
||||
this.addItemRef = null;
|
||||
|
|
@ -105,15 +103,11 @@ class Index extends Component {
|
|||
* Params:
|
||||
* Date: 2023/2/20
|
||||
*/
|
||||
getAdvanceCondition = async () => {
|
||||
getAdvanceCondition = () => {
|
||||
const { cumDeductStore: { form } } = this.props;
|
||||
const { data: authTaxAgent } = await postFetch("/api/bs/hrmsalary/taxAgent/listAuth", { filterType: "QUERY_DATA" });
|
||||
getCumDeductSaCondition().then(({ status, data }) => {
|
||||
if (status) {
|
||||
this.setState({
|
||||
advanceCondition: removePropertyCondition(data.condition),
|
||||
taxAgentOption: _.map(authTaxAgent, g => ({ key: String(g.id), showname: g.name }))
|
||||
});
|
||||
this.setState({ advanceCondition: removePropertyCondition(data.condition) });
|
||||
form.initFormFields(removePropertyCondition(data.condition));
|
||||
}
|
||||
});
|
||||
|
|
@ -242,8 +236,7 @@ class Index extends Component {
|
|||
}
|
||||
};
|
||||
handleSaveData = () => {
|
||||
const { cumDeductStore: { addForm } } = this.props, { slidePayload } = this.state;
|
||||
const taxAgentOption = slidePayload.children.props.taxAgentOption;
|
||||
const { cumDeductStore: { addForm }, taxAgentStore: { taxAgentOption } } = this.props;
|
||||
addForm.validateForm().then(f => {
|
||||
if (f.isValid) {
|
||||
const payload = {
|
||||
|
|
@ -267,11 +260,10 @@ class Index extends Component {
|
|||
* Params: screenParams规则:日期必须放在数组最后一位,人员信息必须第一位
|
||||
* Date: 2023/2/20
|
||||
*/
|
||||
handleAddData = async (title = "新建", editId = {}) => {
|
||||
const { data } = await postFetch("/api/bs/hrmsalary/taxAgent/listAuth", { filterType: "ADMIN_DATA" });
|
||||
const taxAgentOption = _.map(data, o => ({ key: String(o.id), showname: o.name }));
|
||||
const { cumDeductStore: { addForm } } = this.props;
|
||||
handleAddData = (title = "新建", editId = {}) => {
|
||||
const { taxAgentStore, cumDeductStore: { addForm } } = this.props;
|
||||
const { slidePayload } = this.state;
|
||||
const { taxAgentOption } = taxAgentStore;
|
||||
const conditions = _.map(dataCollectCondition, (it, idx) => {
|
||||
if (idx === 0) {
|
||||
return {
|
||||
|
|
@ -357,7 +349,8 @@ class Index extends Component {
|
|||
* Date: 2023/2/17
|
||||
*/
|
||||
getScreen = () => {
|
||||
const { declareMonth, taxAgentId, innerWidth, taxAgentOption } = this.state;
|
||||
const { taxAgentStore: { taxAgentOption } } = this.props;
|
||||
const { declareMonth, taxAgentId, innerWidth } = this.state;
|
||||
const items = [
|
||||
{
|
||||
com: DataCollectionDatePicker({
|
||||
|
|
@ -470,11 +463,10 @@ class Index extends Component {
|
|||
* Params:
|
||||
* Date: 2023/2/20
|
||||
*/
|
||||
handleOpenImport = async () => {
|
||||
const { data } = await postFetch("/api/bs/hrmsalary/taxAgent/listAuth", { filterType: "ADMIN_DATA" });
|
||||
const taxAgentOption = _.map(data, o => ({ key: String(o.id), showname: o.name }));
|
||||
handleOpenImport = () => {
|
||||
const { importPayload } = this.state;
|
||||
const { importOpts } = importPayload;
|
||||
const { taxAgentStore: { taxAgentOption } } = this.props;
|
||||
this.setState({
|
||||
importPayload: {
|
||||
...importPayload,
|
||||
|
|
@ -506,7 +498,7 @@ class Index extends Component {
|
|||
};
|
||||
|
||||
render() {
|
||||
const { cumDeductStore: { form } } = this.props;
|
||||
const { taxAgentStore: { showOperateBtn }, cumDeductStore: { form } } = this.props;
|
||||
const {
|
||||
declareMonth, taxAgentId, slidePayload, saveLoading, exportPayloadUrl, advanceCondition,
|
||||
importPayload, exportPayloadType, targetid
|
||||
|
|
@ -527,6 +519,7 @@ class Index extends Component {
|
|||
ref={dom => this.tableRef = dom}
|
||||
url="/api/bs/hrmsalary/addUpDeduction/list"
|
||||
payload={tablePayload}
|
||||
showOperateBtn={showOperateBtn}
|
||||
onTableOperate={this.handleTableOperate}
|
||||
onViewDetails={(record) => this.handleAddData("累计专项附加扣除记录", record)}
|
||||
form={form}
|
||||
|
|
|
|||
|
|
@ -27,7 +27,6 @@ import { dataCollectCondition, taxOptions } from "./columns";
|
|||
import AddItems from "../addItems";
|
||||
import TableRecord from "../components/tableRecord";
|
||||
import { convertToUrlString } from "../../../util/url";
|
||||
import { postFetch } from "../../../util/request";
|
||||
import { getDomkes } from "../../../util";
|
||||
|
||||
const getKey = WeaTools.getKey;
|
||||
|
|
@ -64,8 +63,7 @@ class Index extends Component {
|
|||
exportPayloadUrl: "",
|
||||
exportPayloadType: false,
|
||||
advanceCondition: null,
|
||||
targetid: "",
|
||||
taxAgentOption: []
|
||||
targetid: ""
|
||||
};
|
||||
this.tableRef = null;
|
||||
this.addItemRef = null;
|
||||
|
|
@ -82,15 +80,11 @@ class Index extends Component {
|
|||
* Params:
|
||||
* Date: 2023/2/20
|
||||
*/
|
||||
getAdvanceCondition = async () => {
|
||||
const { data: authTaxAgent } = await postFetch("/api/bs/hrmsalary/taxAgent/listAuth", { filterType: "QUERY_DATA" });
|
||||
getAdvanceCondition = () => {
|
||||
const { cumSituationStore: { form } } = this.props;
|
||||
getCumSituationSaCondition().then(({ status, data }) => {
|
||||
if (status) {
|
||||
this.setState({
|
||||
advanceCondition: removePropertyCondition(data.condition),
|
||||
taxAgentOption: _.map(authTaxAgent, g => ({ key: String(g.id), showname: g.name }))
|
||||
});
|
||||
this.setState({ advanceCondition: removePropertyCondition(data.condition) });
|
||||
form.initFormFields(removePropertyCondition(data.condition));
|
||||
}
|
||||
});
|
||||
|
|
@ -148,11 +142,10 @@ class Index extends Component {
|
|||
* Params: screenParams规则:日期必须放在数组最后一位,人员信息必须第一位
|
||||
* Date: 2023/2/20
|
||||
*/
|
||||
handleAddData = async (title = "新建", editId = {}) => {
|
||||
const { data } = await postFetch("/api/bs/hrmsalary/taxAgent/listAuth", { filterType: "ADMIN_DATA" });
|
||||
const taxAgentOption = _.map(data, o => ({ key: String(o.id), showname: o.name }));
|
||||
const { cumSituationStore: { addForm } } = this.props;
|
||||
handleAddData = (title = "新建", editId = {}) => {
|
||||
const { taxAgentStore, cumSituationStore: { addForm } } = this.props;
|
||||
const { slidePayload } = this.state;
|
||||
const { taxAgentOption } = taxAgentStore;
|
||||
const conditions = _.map(dataCollectCondition, (it, idx) => {
|
||||
if (idx === 0) {
|
||||
return {
|
||||
|
|
@ -331,7 +324,8 @@ class Index extends Component {
|
|||
* Date: 2023/2/17
|
||||
*/
|
||||
getScreen = () => {
|
||||
const { declareMonth, year, taxAgentId, innerWidth, taxAgentOption } = this.state;
|
||||
const { taxAgentStore: { taxAgentOption } } = this.props;
|
||||
const { declareMonth, year, taxAgentId, innerWidth } = this.state;
|
||||
const items = [
|
||||
{
|
||||
com: DataCollectionDatePicker({
|
||||
|
|
@ -395,8 +389,7 @@ class Index extends Component {
|
|||
this.props.cumSituationStore.initAddForm();
|
||||
};
|
||||
handleSaveData = () => {
|
||||
const { cumSituationStore: { addForm } } = this.props, { slidePayload } = this.state;
|
||||
const taxAgentOption = slidePayload.children.props.taxAgentOption;
|
||||
const { cumSituationStore: { addForm }, taxAgentStore: { taxAgentOption } } = this.props;
|
||||
addForm.validateForm().then(f => {
|
||||
if (f.isValid) {
|
||||
const payload = {
|
||||
|
|
|
|||
|
|
@ -27,6 +27,8 @@ class Layout extends Component {
|
|||
}
|
||||
|
||||
componentDidMount() {
|
||||
const { taxAgentStore: { fetchTaxAgentOption } } = this.props;
|
||||
fetchTaxAgentOption();
|
||||
window.addEventListener("resize", this.resizeUpdate);
|
||||
}
|
||||
|
||||
|
|
@ -89,7 +91,7 @@ class Layout extends Component {
|
|||
render() {
|
||||
const { showSearchAd, logDialogVisible, filterConditions } = this.state;
|
||||
const {
|
||||
title, btns, leftComp, children, taxAgentStore: { PageAndOptAuth },
|
||||
title, btns, leftComp, children, taxAgentStore: { showOperateBtn },
|
||||
slidePayload, onClose, form, condition, onImportFile,
|
||||
onAdSearch, onCancel, importPayload, logFunction, onClearTargrtid
|
||||
} = this.props;
|
||||
|
|
@ -98,7 +100,6 @@ class Layout extends Component {
|
|||
visible: importVisiable, importFormComponent, importOpts,
|
||||
importResult, templateLink, previewUrl
|
||||
} = importPayload;
|
||||
const showOperateBtn = PageAndOptAuth.opts.includes("admin");
|
||||
return (
|
||||
<div className="layoutWrapper">
|
||||
<WeaTop title={title} buttons={showOperateBtn ? btns : []}
|
||||
|
|
|
|||
|
|
@ -29,7 +29,6 @@ import { dataCollectCondition } from "./columns";
|
|||
import AddItems from "../addItems";
|
||||
import TableRecord from "../components/tableRecord";
|
||||
import { convertToUrlString } from "../../../util/url";
|
||||
import { postFetch } from "../../../util/request";
|
||||
import { getDomkes } from "../../../util";
|
||||
|
||||
const getKey = WeaTools.getKey;
|
||||
|
|
@ -65,8 +64,7 @@ class Index extends Component {
|
|||
exportPayloadUrl: "",
|
||||
exportPayloadType: false,
|
||||
advanceCondition: null,
|
||||
targetid: "",
|
||||
taxAgentOption: []
|
||||
targetid: ""
|
||||
};
|
||||
this.tableRef = null;
|
||||
this.addItemRef = null;
|
||||
|
|
@ -83,15 +81,11 @@ class Index extends Component {
|
|||
* Params:
|
||||
* Date: 2023/2/20
|
||||
*/
|
||||
getAdvanceCondition = async () => {
|
||||
const { data: authTaxAgent } = await postFetch("/api/bs/hrmsalary/taxAgent/listAuth", { filterType: "QUERY_DATA" });
|
||||
getAdvanceCondition = () => {
|
||||
const { otherDeductStore: { form } } = this.props;
|
||||
getOtherDeductSaCondition().then(({ status, data }) => {
|
||||
if (status) {
|
||||
this.setState({
|
||||
advanceCondition: removePropertyCondition(data.condition),
|
||||
taxAgentOption: _.map(authTaxAgent, g => ({ key: String(g.id), showname: g.name }))
|
||||
});
|
||||
this.setState({ advanceCondition: removePropertyCondition(data.condition) });
|
||||
form.initFormFields(removePropertyCondition(data.condition));
|
||||
}
|
||||
});
|
||||
|
|
@ -276,11 +270,10 @@ class Index extends Component {
|
|||
* Params: screenParams规则:日期必须放在数组最后一位,人员信息必须第一位
|
||||
* Date: 2023/2/20
|
||||
*/
|
||||
handleAddData = async (title = "新建", editId = {}) => {
|
||||
const { data } = await postFetch("/api/bs/hrmsalary/taxAgent/listAuth", { filterType: "ADMIN_DATA" });
|
||||
const taxAgentOption = _.map(data, o => ({ key: String(o.id), showname: o.name }));
|
||||
const { otherDeductStore: { addForm } } = this.props;
|
||||
handleAddData = (title = "新建", editId = {}) => {
|
||||
const { taxAgentStore, otherDeductStore: { addForm } } = this.props;
|
||||
const { slidePayload } = this.state;
|
||||
const { taxAgentOption } = taxAgentStore;
|
||||
const conditions = _.map(dataCollectCondition, (it, idx) => {
|
||||
if (idx === 0) {
|
||||
return {
|
||||
|
|
@ -366,7 +359,8 @@ class Index extends Component {
|
|||
* Date: 2023/2/17
|
||||
*/
|
||||
getScreen = () => {
|
||||
const { declareMonth, taxAgentId, innerWidth, taxAgentOption } = this.state;
|
||||
const { taxAgentStore: { taxAgentOption } } = this.props;
|
||||
const { declareMonth, taxAgentId, innerWidth } = this.state;
|
||||
const items = [
|
||||
{
|
||||
com: DataCollectionDatePicker({
|
||||
|
|
@ -410,8 +404,7 @@ class Index extends Component {
|
|||
this.props.otherDeductStore.initAddForm();
|
||||
};
|
||||
handleSaveData = () => {
|
||||
const { otherDeductStore: { addForm } } = this.props, { slidePayload } = this.state;
|
||||
const taxAgentOption = slidePayload.children.props.taxAgentOption;
|
||||
const { otherDeductStore: { addForm }, taxAgentStore: { taxAgentOption } } = this.props;
|
||||
addForm.validateForm().then(f => {
|
||||
if (f.isValid) {
|
||||
const payload = {
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@ import { condition } from "./components/condition";
|
|||
import AddItems from "../addItems";
|
||||
import TableRecord from "../components/tableRecord";
|
||||
import { convertToUrlString } from "../../../util/url";
|
||||
import { postFetch } from "../../../util/request";
|
||||
import { getDomkes } from "../../../util";
|
||||
|
||||
const getKey = WeaTools.getKey;
|
||||
|
|
@ -54,8 +53,7 @@ class Index extends Component {
|
|||
exportPayloadUrl: "",
|
||||
exportPayloadType: false,
|
||||
advanceCondition: null,
|
||||
targetid: "",
|
||||
taxAgentOption: []
|
||||
targetid: ""
|
||||
};
|
||||
this.tableRef = null;
|
||||
this.addItemRef = null;
|
||||
|
|
@ -107,15 +105,11 @@ class Index extends Component {
|
|||
* Params:
|
||||
* Date: 2023/2/20
|
||||
*/
|
||||
getAdvanceCondition = async () => {
|
||||
const { data: authTaxAgent } = await postFetch("/api/bs/hrmsalary/taxAgent/listAuth", { filterType: "QUERY_DATA" });
|
||||
getAdvanceCondition = () => {
|
||||
const { specialAddStore: { advanceForm } } = this.props;
|
||||
getSearchCondition().then(({ status, data }) => {
|
||||
if (status) {
|
||||
this.setState({
|
||||
advanceCondition: removePropertyCondition(data.condition),
|
||||
taxAgentOption: _.map(authTaxAgent, g => ({ key: String(g.id), showname: g.name }))
|
||||
});
|
||||
this.setState({ advanceCondition: removePropertyCondition(data.condition) });
|
||||
advanceForm.initFormFields(removePropertyCondition(data.condition));
|
||||
}
|
||||
});
|
||||
|
|
@ -214,7 +208,8 @@ class Index extends Component {
|
|||
* Date: 2023/2/17
|
||||
*/
|
||||
getScreen = () => {
|
||||
const { taxAgentId, taxAgentOption } = this.state;
|
||||
const { taxAgentStore: { taxAgentOption } } = this.props;
|
||||
const { taxAgentId } = this.state;
|
||||
const items = [
|
||||
{
|
||||
com: DataCollectionSelect({
|
||||
|
|
@ -263,11 +258,10 @@ class Index extends Component {
|
|||
* Params: screenParams规则:日期必须放在数组最后一位,人员信息必须第一位
|
||||
* Date: 2023/2/20
|
||||
*/
|
||||
handleAddData = async (title = "新建", editId = {}) => {
|
||||
const { data } = await postFetch("/api/bs/hrmsalary/taxAgent/listAuth", { filterType: "ADMIN_DATA" });
|
||||
const taxAgentOption = _.map(data, o => ({ key: String(o.id), showname: o.name }));
|
||||
const { specialAddStore: { addForm } } = this.props;
|
||||
handleAddData = (title = "新建", editId = {}) => {
|
||||
const { taxAgentStore, specialAddStore: { addForm } } = this.props;
|
||||
const { slidePayload } = this.state;
|
||||
const { taxAgentOption } = taxAgentStore;
|
||||
const conditions = _.map(condition, (it, idx) => {
|
||||
if (idx === 0) {
|
||||
return {
|
||||
|
|
@ -348,8 +342,7 @@ class Index extends Component {
|
|||
this.props.specialAddStore.initAddForm();
|
||||
};
|
||||
handleSaveData = () => {
|
||||
const { specialAddStore: { addForm } } = this.props, { slidePayload } = this.state;
|
||||
const taxAgentOption = slidePayload.children.props.taxAgentOption;
|
||||
const { specialAddStore: { addForm }, taxAgentStore: { taxAgentOption } } = this.props;
|
||||
addForm.validateForm().then(f => {
|
||||
if (f.isValid) {
|
||||
const payload = {
|
||||
|
|
@ -378,11 +371,10 @@ class Index extends Component {
|
|||
* Params:
|
||||
* Date: 2023/2/20
|
||||
*/
|
||||
handleOpenImport = async () => {
|
||||
const { data } = await postFetch("/api/bs/hrmsalary/taxAgent/listAuth", { filterType: "ADMIN_DATA" });
|
||||
const taxAgentOption = _.map(data, o => ({ key: String(o.id), showname: o.name }));
|
||||
handleOpenImport = () => {
|
||||
const { importPayload } = this.state;
|
||||
const { importOpts } = importPayload;
|
||||
const { taxAgentStore: { taxAgentOption } } = this.props;
|
||||
this.setState({
|
||||
importPayload: {
|
||||
...importPayload,
|
||||
|
|
@ -413,7 +405,7 @@ class Index extends Component {
|
|||
};
|
||||
|
||||
render() {
|
||||
const { specialAddStore: { advanceForm } } = this.props;
|
||||
const { taxAgentStore: { showOperateBtn }, specialAddStore: { advanceForm } } = this.props;
|
||||
const {
|
||||
taxAgentId, slidePayload, saveLoading, exportPayloadUrl, advanceCondition, importPayload,
|
||||
exportPayloadType, targetid
|
||||
|
|
@ -435,6 +427,7 @@ class Index extends Component {
|
|||
url="/api/bs/hrmsalary/specialAddDeduction/list"
|
||||
payload={tablePayload}
|
||||
isSpecial
|
||||
showOperateBtn={showOperateBtn}
|
||||
onTableOperate={this.handleTableOperate}
|
||||
onViewDetails={(record) => this.handleAddData("专项附加扣除记录", record)}
|
||||
form={advanceForm}
|
||||
|
|
|
|||
|
|
@ -1,171 +0,0 @@
|
|||
/*
|
||||
* 数据推送
|
||||
* 新增编辑
|
||||
* @Author: 黎永顺
|
||||
* @Date: 2024/11/19
|
||||
* @Wechat:
|
||||
* @Email: 971387674@qq.com
|
||||
* @description:
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { WeaButtonIcon, WeaLocaleProvider, WeaSearchGroup, WeaSlideModal, WeaTable, WeaTools } from "ecCom";
|
||||
import PDetailDialog from "../PDDialog";
|
||||
import { postFetch } from "../../../../util/request";
|
||||
import * as API from "../../../../apis/datapush";
|
||||
import { conditions } from "../../conditions";
|
||||
import { Button, message, Modal } from "antd";
|
||||
import { formRender } from "../../formRender";
|
||||
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
const getKey = WeaTools.getKey;
|
||||
|
||||
@inject("baseFormStore") @observer
|
||||
class Index extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
conditions: [], loading: false, columns: [], dataSource: [],
|
||||
PDDialog: { visible: false, title: "", settingId: "", detail: {} } //推送明细弹框
|
||||
};
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps, nextContext) {
|
||||
if (nextProps.visible !== this.props.visible && nextProps.visible) {
|
||||
document.querySelector(".datapush_wrapper").classList.add("zIndex0-weaslide-title");
|
||||
this.initForm(nextProps);
|
||||
}
|
||||
if (nextProps.visible !== this.props.visible && !nextProps.visible) {
|
||||
document.querySelector(".datapush_wrapper").classList.remove("zIndex0-weaslide-title");
|
||||
this.props.baseFormStore.initForm();
|
||||
}
|
||||
}
|
||||
|
||||
initForm = async (props) => {
|
||||
const { detail } = props;
|
||||
const { data: salarySobList } = await postFetch("/api/bs/hrmsalary/salarysob/listAuth", { filterType: "ADMIN_DATA" });
|
||||
this.setState({
|
||||
conditions: _.map(conditions, item => ({
|
||||
...item, title: getLabel(item.lanId, item.title), items: _.map(item.items, o => {
|
||||
o = { ...o, label: getLabel(o.lanId, o.label), value: detail[getKey(o)] || "" };
|
||||
if (getKey(o) === "salarySobIds") {
|
||||
return {
|
||||
...o, value: detail[getKey(o)] ? detail[getKey(o)] : "",
|
||||
options: _.map(salarySobList, o => ({ key: String(o.id), showname: o.name }))
|
||||
};
|
||||
} else if (getKey(o) === "able") {
|
||||
return { ...o, value: !_.isEmpty(detail) ? String(detail[getKey(o)]) : o.value };
|
||||
}
|
||||
return { ...o };
|
||||
})
|
||||
}))
|
||||
}, () => {
|
||||
props.baseFormStore.form.initFormFields(this.state.conditions);
|
||||
!_.isEmpty(detail) && this.getPushItemList(props);
|
||||
});
|
||||
};
|
||||
getPushItemList = (props) => {
|
||||
const { detail } = props || this.props;
|
||||
const { id: settingId } = detail;
|
||||
API.getPushItemList({ settingId }).then(({ status, data }) => {
|
||||
if (status) {
|
||||
const { columns, list: dataSource } = data;
|
||||
this.setState({
|
||||
dataSource, columns: [...columns, {
|
||||
title: getLabel(111, "操作"), width: 120, render: (__, record) => (<React.Fragment>
|
||||
<a href="javascript: void(0);" style={{ marginRight: 10 }}
|
||||
onClick={() => this.handleOpts("edit", record)}>{getLabel(111, "编辑")}</a>
|
||||
<a href="javascript: void(0);" style={{ marginRight: 10 }}
|
||||
onClick={() => this.handleOpts("del", record.id)}>{getLabel(111, "删除")}</a>
|
||||
</React.Fragment>)
|
||||
}],
|
||||
PDDialog: { ...this.state.PDDialog, settingId }
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
handleOpts = (type, detail = {}) => {
|
||||
switch (type) {
|
||||
case "edit":
|
||||
const { PDDialog } = this.state;
|
||||
this.setState({ PDDialog: { ...PDDialog, visible: true, title: getLabel(111, "编辑"), detail } });
|
||||
break;
|
||||
case "del":
|
||||
Modal.confirm({
|
||||
title: getLabel(111, "信息确认"),
|
||||
content: getLabel(111, "确认要删除吗?"),
|
||||
onOk: () => {
|
||||
API.deletePushItemList({ id: detail }).then(({ status, errormsg }) => {
|
||||
if (status) {
|
||||
message.success(getLabel(111, "删除成功"));
|
||||
this.getPushItemList();
|
||||
} else {
|
||||
message.error(errormsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
};
|
||||
save = () => {
|
||||
const { baseFormStore: { form }, detail } = this.props;
|
||||
form.validateForm().then(f => {
|
||||
if (f.isValid) {
|
||||
const { salarySobIds, ...payload } = form.getFormParams();
|
||||
this.setState({ loading: true });
|
||||
API.savePushSetting({ ...payload, salarySobIds: salarySobIds.split(","), id: detail.id })
|
||||
.then(({ status, errormsg }) => {
|
||||
this.setState({ loading: false });
|
||||
if (status) {
|
||||
message.success(getLabel(30700, "操作成功"));
|
||||
this.props.onClose(this.props.onSearch());
|
||||
} else {
|
||||
message.error(errormsg);
|
||||
}
|
||||
}).catch(() => this.setState({ loading: false }));
|
||||
} else {
|
||||
f.showErrors();
|
||||
}
|
||||
});
|
||||
};
|
||||
renderTitle = () => {
|
||||
const { loading } = this.state, { title } = this.props;
|
||||
return <div className="titleDialog">
|
||||
<div className="titleCol titleLeftBox">
|
||||
<div className="titleIcon"><i className="icon-coms-fa"/></div>
|
||||
<div className="title">{title}</div>
|
||||
</div>
|
||||
<div className="titleCol titleRightBox">
|
||||
<Button type="primary" loading={loading} onClick={this.save}>{getLabel(537558, "保存")}</Button>
|
||||
</div>
|
||||
</div>;
|
||||
};
|
||||
|
||||
render() {
|
||||
const { baseFormStore: { form }, detail } = this.props, { conditions, columns, dataSource, PDDialog } = this.state;
|
||||
return (<WeaSlideModal
|
||||
className="pushdata_create_dialog" {...this.props} direction="right"
|
||||
top={0} width={800} height={100} measureT="%" measureX="px" measureY="%" title={this.renderTitle()}
|
||||
content={<div className="form-dialog-layout">
|
||||
{formRender(form, conditions)}
|
||||
{!_.isEmpty(detail) &&
|
||||
<WeaSearchGroup title={getLabel(111, "推送明细")} showGroup needTigger className="pushdata_detail">
|
||||
<div className="opts">
|
||||
<WeaButtonIcon buttonType="add" type="primary" title={getLabel(111, "添加")}
|
||||
onClick={() => this.setState({
|
||||
PDDialog: { ...PDDialog, visible: true, title: getLabel(111, "新建") }
|
||||
})}/>
|
||||
</div>
|
||||
<WeaTable pagination={false} columns={columns} dataSource={dataSource} bordered/>
|
||||
<PDetailDialog {...PDDialog} onSearch={this.getPushItemList}
|
||||
onCancel={() => this.setState({ PDDialog: { ...PDDialog, visible: false, detail: {} } })}/>
|
||||
</WeaSearchGroup>}
|
||||
</div>}
|
||||
/>);
|
||||
}
|
||||
}
|
||||
|
||||
export default Index;
|
||||
|
|
@ -1,90 +0,0 @@
|
|||
/*
|
||||
* 数据推送
|
||||
* 自定义薪资项目选择树
|
||||
* @Author: 黎永顺
|
||||
* @Date: 2024/11/20
|
||||
* @Wechat:
|
||||
* @Email: 971387674@qq.com
|
||||
* @description:
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { WeaLocaleProvider } from "ecCom";
|
||||
import { TreeSelect } from "antd";
|
||||
import { formualSearchField, formualSearchGroup } from "../../../../apis/item";
|
||||
import cs from "classnames";
|
||||
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
const TreeNode = TreeSelect.TreeNode;
|
||||
|
||||
class CustomTreeSelect extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = { sourceList: [] };
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
formualSearchGroup({ referenceType: "sql" }).then(({ status, data }) => {
|
||||
if (status) this.setState({ sourceList: _.map(data, o => ({ ...o, isLeaf: true })) });
|
||||
});
|
||||
}
|
||||
|
||||
getSourceItem = (sourceId) => {
|
||||
formualSearchField({ sourceId, extendParam: { referenceType: "sql" } }).then(({ status, data }) => {
|
||||
if (status) {
|
||||
this.setState({
|
||||
sourceList: _.map(this.state.sourceList, o => {
|
||||
if (o.key === sourceId) return {
|
||||
...o,
|
||||
children: _.map(data, k => ({ key: k.fieldId, value: k.name, fieldType: k.fieldType, isLeaf: false }))
|
||||
};
|
||||
return { ...o };
|
||||
})
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
generateTreeNodes = (data) => {
|
||||
const treeNodes = [], showData = [...data];
|
||||
showData.map((item) => {
|
||||
let title = (
|
||||
<div className="weapp-excel-code-action-list-variable">
|
||||
<span className="weapp-excel-code-action-list-variable-name">{item.value}</span>
|
||||
{
|
||||
item.fieldType ?
|
||||
<span
|
||||
className={cs("weapp-excel-code-action-list-variable-tip", { "danger": item.fieldType === "string" })}>{item.fieldType === "number" ? getLabel(111, "数字") : getLabel(111, "文本")}</span> :
|
||||
<span></span>
|
||||
}
|
||||
</div>
|
||||
);
|
||||
treeNodes.push(<TreeNode className="no-child-item" title={title} key={item.key} value={item.key}/>);
|
||||
});
|
||||
return treeNodes;
|
||||
};
|
||||
handleSelect = (nodeValue) => {
|
||||
const { form } = this.props, { sourceList } = this.state;
|
||||
const [source, __] = nodeValue.split("_");
|
||||
const itemName = _.find(_.find(sourceList, o => o.key === source).children, k => k.key === nodeValue).value;
|
||||
form.updateFields({ item: nodeValue, itemName, source });
|
||||
};
|
||||
|
||||
render() {
|
||||
const { sourceList } = this.state, { detail } = this.props;
|
||||
const { itemName } = detail;
|
||||
return (
|
||||
<TreeSelect dropdownStyle={{ maxHeight: 320, overflow: "auto" }} defaultValue={itemName}
|
||||
dropdownMatchSelectWidth className="custom_item_treeselect"
|
||||
loadData={(node) => this.getSourceItem(node.props.value)}
|
||||
onSelect={this.handleSelect}>
|
||||
{
|
||||
_.map(sourceList, o => (
|
||||
<TreeNode title={o.value} key={o.key} value={o.key} isLeaf={o.isLeaf} selectable={false}>
|
||||
{this.generateTreeNodes(o.children || [])}
|
||||
</TreeNode>))
|
||||
}
|
||||
</TreeSelect>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default CustomTreeSelect;
|
||||
|
|
@ -1,96 +0,0 @@
|
|||
/*
|
||||
* 数据推送
|
||||
* 推送明细新增编辑
|
||||
* @Author: 黎永顺
|
||||
* @Date: 2024/11/20
|
||||
* @Wechat:
|
||||
* @Email: 971387674@qq.com
|
||||
* @description:
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { WeaDialog, WeaLocaleProvider, WeaTools } from "ecCom";
|
||||
import { commonEnumList } from "../../../../apis/ruleconfig";
|
||||
import * as API from "../../../../apis/datapush";
|
||||
import { PDConditions } from "../../conditions";
|
||||
import { Button, message } from "antd";
|
||||
import { formRender } from "../../formRender";
|
||||
|
||||
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
const getKey = WeaTools.getKey;
|
||||
|
||||
@inject("baseFormStore")
|
||||
@observer
|
||||
class Index extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
conditions: [], loading: false
|
||||
};
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps, nextContext) {
|
||||
if (nextProps.visible !== this.props.visible && nextProps.visible) this.initForm(nextProps);
|
||||
if (nextProps.visible !== this.props.visible && !nextProps.visible) nextProps.baseFormStore.initFormExtra();
|
||||
}
|
||||
|
||||
initForm = async (props) => {
|
||||
const { detail = {} } = props;
|
||||
const { data: fieldType } = await commonEnumList({ enumClass: "com.engine.salary.enums.push.PushItemFieldEnum" });
|
||||
this.setState({
|
||||
conditions: _.map(PDConditions, item => ({
|
||||
...item, items: _.map(item.items, o => {
|
||||
o = { ...o, label: getLabel(o.lanId, o.label), value: detail[getKey(o)] || "" };
|
||||
if (getKey(o) === "fieldType") {
|
||||
return {
|
||||
...o, value: detail[getKey(o)] ? String(detail[getKey(o)]) : "",
|
||||
options: _.map(fieldType, o => ({ key: o.enum, showname: o.defaultLabel }))
|
||||
};
|
||||
}
|
||||
return { ...o };
|
||||
})
|
||||
}))
|
||||
}, () => {
|
||||
props.baseFormStore.formExtra.initFormFields(this.state.conditions);
|
||||
});
|
||||
};
|
||||
save = () => {
|
||||
const { baseFormStore: { formExtra }, detail: { id }, settingId } = this.props;
|
||||
formExtra.validateForm().then(f => {
|
||||
if (f.isValid) {
|
||||
const payload = formExtra.getFormParams();
|
||||
this.setState({ loading: true });
|
||||
API.savePushItemList({ ...payload, settingId, id })
|
||||
.then(({ status, errormsg }) => {
|
||||
this.setState({ loading: false });
|
||||
if (status) {
|
||||
message.success(getLabel(30700, "操作成功"));
|
||||
this.props.onCancel(this.props.onSearch());
|
||||
} else {
|
||||
message.error(errormsg);
|
||||
}
|
||||
}).catch(() => this.setState({ loading: false }));
|
||||
} else {
|
||||
f.showErrors();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
render() {
|
||||
const { baseFormStore: { formExtra }, detail } = this.props, { loading, conditions } = this.state;
|
||||
return (
|
||||
<WeaDialog
|
||||
{...this.props} style={{ width: 480, height: 174 }} initLoadCss className="Pdetail_dialog"
|
||||
buttons={[
|
||||
<Button onClick={this.props.onCancel}>{getLabel(111, "取消")}</Button>,
|
||||
<Button type="primary" onClick={this.save} loading={loading}>{getLabel(111, "保存")}</Button>
|
||||
]}
|
||||
>
|
||||
<div className="form-dialog-layout">{formRender(formExtra, conditions, detail)}</div>
|
||||
</WeaDialog>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default Index;
|
||||
|
|
@ -1,86 +0,0 @@
|
|||
/*
|
||||
* 数据推送列表
|
||||
*
|
||||
* @Author: 黎永顺
|
||||
* @Date: 2024/11/19
|
||||
* @Wechat:
|
||||
* @Email: 971387674@qq.com
|
||||
* @description:
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { WeaCheckbox, WeaLocaleProvider, WeaTable } from "ecCom";
|
||||
import * as API from "../../../../apis/datapush";
|
||||
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
|
||||
class Index extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
columns: [], dataSource: [], loading: false, pageInfo: { current: 1, pageSize: 10, total: 0 }
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.getPushSettingList();
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps, nextContext) {
|
||||
if (nextProps.isQuery !== this.props.isQuery) this.setState({
|
||||
pageInfo: { ...this.state.pageInfo, current: 1 }
|
||||
}, () => this.getPushSettingList(nextProps));
|
||||
}
|
||||
|
||||
getPushSettingList = (props) => {
|
||||
const { pageInfo } = this.state, { query } = props || this.props;
|
||||
const payload = { ...pageInfo, ...query };
|
||||
this.setState({ loading: true });
|
||||
API.getPushSettingList(payload).then(({ status, data }) => {
|
||||
this.setState({ loading: false });
|
||||
if (status) {
|
||||
const { columns, list: dataSource, pageNum: current, pageSize, total } = data;
|
||||
this.setState({
|
||||
pageInfo: { ...pageInfo, current, pageSize, total },
|
||||
dataSource: _.map(dataSource, o => ({
|
||||
...o, salarySobs: _.map(o.salarySobs, k => k.name).join(","),
|
||||
salarySobIds: _.map(o.salarySobs, k => k.id).join(",")
|
||||
})),
|
||||
columns: [..._.map(columns, o => {
|
||||
if (o.dataIndex === "able") return {
|
||||
...o, render: v => (<WeaCheckbox value={String(v)} disabled display="switch"/>)
|
||||
};
|
||||
return { ...o };
|
||||
}), {
|
||||
title: getLabel(111, "操作"), dataIndex: "opts", width: 120, render: (__, record) => (<React.Fragment>
|
||||
<a href="javascript: void(0);" style={{ marginRight: 10 }}
|
||||
onClick={() => this.props.onChange("edit", record)}>{getLabel(111, "编辑")}</a>
|
||||
<a href="javascript: void(0);" style={{ marginRight: 10 }}
|
||||
onClick={() => this.props.onChange("del", record.id)}>{getLabel(111, "删除")}</a>
|
||||
</React.Fragment>)
|
||||
}]
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
render() {
|
||||
const { columns, dataSource, loading, pageInfo } = 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.getPushSettingList());
|
||||
},
|
||||
onChange: current => {
|
||||
this.setState({ pageInfo: { ...pageInfo, current } }, () => this.getPushSettingList());
|
||||
}
|
||||
};
|
||||
return (<WeaTable loading={loading} dataSource={dataSource} columns={columns} pagination={pagination}
|
||||
scroll={{ y: `calc(100vh - 182px)` }}/>);
|
||||
}
|
||||
}
|
||||
|
||||
export default Index;
|
||||
|
|
@ -1,149 +0,0 @@
|
|||
/*
|
||||
* 数据推送记录
|
||||
* 创建
|
||||
* @Author: 黎永顺
|
||||
* @Date: 2025/4/15
|
||||
* @Wechat:
|
||||
* @Email: 971387674@qq.com
|
||||
* @description:
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { WeaDialog, WeaFormItem, WeaLocaleProvider, WeaTable, WeaTools } from "ecCom";
|
||||
import FormInfo from "../../../../components/FormInfo";
|
||||
import { RQconditions } from "../../conditions";
|
||||
import { MonthRangePicker } from "../../../reportView/components/statisticalMicroSettingsSlide";
|
||||
import { getSalaryAcctList } from "../../../../apis/calculate";
|
||||
import { createPushRecords } from "../../../../apis/datapush";
|
||||
import { WeaForm, WeaSwitch } from "comsMobx";
|
||||
import { Button, message } from "antd";
|
||||
import moment from "moment";
|
||||
|
||||
const form = new WeaForm();
|
||||
const getKey = WeaTools.getKey;
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
|
||||
class CreatePushRecordDialog extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
dataSource: [], columns: [], loading: false, pageInfo: { current: 1, pageSize: 10, total: 0 },
|
||||
conditions: []
|
||||
};
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps, nextContext) {
|
||||
if (nextProps.visible !== this.props.visible && nextProps.visible) {
|
||||
this.setState({
|
||||
conditions: _.map(RQconditions, item => ({
|
||||
...item,
|
||||
items: _.map(item.items, o => {
|
||||
o = { ...o, label: getLabel(o.lanId, o.label) };
|
||||
if (getKey(o) === "startMonthStr") {
|
||||
return {
|
||||
...o, value: moment(new Date()).subtract(1, "year").startOf("year").format("YYYY-MM")
|
||||
};
|
||||
} else if (getKey(o) === "endMonthStr") {
|
||||
return {
|
||||
...o, value: moment(new Date()).endOf("year").format("YYYY-MM")
|
||||
};
|
||||
}
|
||||
return o;
|
||||
})
|
||||
}))
|
||||
}, () => {
|
||||
form.initFormFields(this.state.conditions);
|
||||
this.getSalaryAcctList();
|
||||
});
|
||||
} else {
|
||||
form.resetForm();
|
||||
}
|
||||
}
|
||||
|
||||
getSalaryAcctList = () => {
|
||||
const { pageInfo } = this.state, payload = { ...pageInfo, ...form.getFormParams() };
|
||||
this.setState({ loading: true });
|
||||
getSalaryAcctList(payload).then(({ status, data }) => {
|
||||
this.setState({ loading: false });
|
||||
if (status) {
|
||||
const { columns, list: dataSource, pageNum: current, pageSize, total } = data;
|
||||
this.setState({
|
||||
dataSource, pageInfo: { current, pageSize, total },
|
||||
columns: _.filter(columns, it => (it.dataIndex !== "backCalcStatus" && it.dataIndex !== "acctTimes" && it.dataIndex !== "operate"))
|
||||
});
|
||||
}
|
||||
}).catch(() => this.setState({ loading: false }));
|
||||
};
|
||||
save = (record) => {
|
||||
this.setState({ loading: true });
|
||||
createPushRecords({ salaryAcctRecordIds: [record.id] }).then(({ status, errormsg }) => {
|
||||
this.setState({ loading: false });
|
||||
if (status) {
|
||||
message.success(getLabel(111, "操作成功!"));
|
||||
this.props.onCancel(this.props.onSuccess);
|
||||
} else {
|
||||
message.error(errormsg);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
render() {
|
||||
const { loading, conditions, dataSource, columns, pageInfo } = 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.getSalaryAcctList());
|
||||
},
|
||||
onChange: current => {
|
||||
this.setState({ pageInfo: { ...pageInfo, current } }, () => this.getSalaryAcctList());
|
||||
}
|
||||
};
|
||||
const itemRender = {
|
||||
name: (field, textAreaProps, form, formParams) => {
|
||||
return (<WeaSwitch fieldConfig={{ ...field, ...textAreaProps }} form={form} formParams={formParams}
|
||||
onChange={_.debounce(() => this.getSalaryAcctList(), 500)}/>);
|
||||
},
|
||||
startMonthStr: () => null,
|
||||
endMonthStr: () => null
|
||||
};
|
||||
const childrenComponents = {
|
||||
startMonthStr: () => {
|
||||
const { startMonthStr, endMonthStr } = form.getFormParams();
|
||||
const coms = [], { fieldMap } = form;
|
||||
const dateRange = [startMonthStr, endMonthStr];
|
||||
coms.push(
|
||||
<WeaFormItem label={<span>{fieldMap["startMonthStr"].label}</span>} labelCol={{ span: 6 }}
|
||||
wrapperCol={{ span: 14 }}>
|
||||
<MonthRangePicker dateRange={dateRange} viewAttr={2} onChange={v => {
|
||||
const [v1, v2] = v;
|
||||
form.updateFields({ startMonthStr: v1, endMonthStr: v2 });
|
||||
this.getSalaryAcctList();
|
||||
}}/>
|
||||
</WeaFormItem>
|
||||
);
|
||||
return [{ com: coms, col: 2 }];
|
||||
}
|
||||
};
|
||||
const scrollHeight = this.refs.recordRef ? this.refs.recordRef.state.height - 162 : 606;
|
||||
|
||||
return (<WeaDialog {...this.props} initLoadCss className="record-dialog" title={getLabel(111, "创建推送记录")}
|
||||
ref="recordRef"
|
||||
style={{
|
||||
width: 1000, height: 580, minHeight: 200, minWidth: 380, maxHeight: "70%", maxWidth: "90%",
|
||||
overflow: "hidden", transform: "translate(0px, 0px)"
|
||||
}} buttons={[
|
||||
<Button onClick={() => this.props.onCancel()}>{getLabel(111, "取消")}</Button>
|
||||
]}>
|
||||
<FormInfo className="record-form" center={false} itemRender={itemRender} colCount={2}
|
||||
form={form} formFields={conditions} childrenComponents={childrenComponents}/>
|
||||
<WeaTable className="wea-browser-table-cursor" rowKey="id" scroll={{ y: scrollHeight + "px" }}
|
||||
dataSource={dataSource} loading={loading} pagination={pagination} columns={columns}
|
||||
onRowClick={this.save}/>
|
||||
</WeaDialog>);
|
||||
}
|
||||
}
|
||||
|
||||
export default CreatePushRecordDialog;
|
||||
|
|
@ -1,88 +0,0 @@
|
|||
/*
|
||||
* 数据推送
|
||||
* 推送记录
|
||||
* @Author: 黎永顺
|
||||
* @Date: 2025/4/1
|
||||
* @Wechat:
|
||||
* @Email: 971387674@qq.com
|
||||
* @description:
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { WeaLocaleProvider, WeaTable } from "ecCom";
|
||||
import * as API from "../../../../apis/datapush";
|
||||
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
|
||||
class Index extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
columns: [], dataSource: [], loading: false, pageInfo: { current: 1, pageSize: 10, total: 0 },
|
||||
selectedRowKeys: []
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.getPushRecordList();
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
this.setState({ selectedRowKeys: [] }, () => this.props.onChange("rowKey", []));
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps, nextContext) {
|
||||
if (nextProps.isQuery !== this.props.isQuery) this.setState({
|
||||
pageInfo: { ...this.state.pageInfo, current: 1 }
|
||||
}, () => this.getPushRecordList(nextProps));
|
||||
}
|
||||
|
||||
getPushRecordList = (props) => {
|
||||
const { pageInfo } = this.state, { query } = props || this.props;
|
||||
const payload = { ...pageInfo, ...query };
|
||||
this.setState({ loading: true });
|
||||
API.getPushRecordList(payload).then(({ status, data }) => {
|
||||
this.setState({ loading: false });
|
||||
if (status) {
|
||||
const { columns, list: dataSource, pageNum: current, pageSize, total } = data;
|
||||
this.setState({
|
||||
pageInfo: { ...pageInfo, current, pageSize, total }, dataSource,
|
||||
columns: [...columns, {
|
||||
title: getLabel(111, "操作"), dataIndex: "opts", width: 140, render: (__, record) => (<React.Fragment>
|
||||
<a href="javascript: void(0);" style={{ marginRight: 10 }}
|
||||
onClick={_.debounce(() => this.props.onChange("push", record), 300)}>{getLabel(111, "推送")}</a>
|
||||
<a href="javascript: void(0);" style={{ marginRight: 10 }}
|
||||
onClick={_.debounce(() => this.props.onChange("withdraw", record), 300)}>{getLabel(111, "撤回")}</a>
|
||||
<a href="javascript: void(0);"
|
||||
onClick={() => this.props.onChange("view", record)}>{getLabel(111, "查看详情")}</a>
|
||||
</React.Fragment>)
|
||||
}]
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
render() {
|
||||
const { columns, dataSource, loading, pageInfo, selectedRowKeys } = 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.getPushRecordList());
|
||||
},
|
||||
onChange: current => {
|
||||
this.setState({ pageInfo: { ...pageInfo, current } }, () => this.getPushRecordList());
|
||||
}
|
||||
};
|
||||
const rowSelection = {
|
||||
selectedRowKeys,
|
||||
onChange: v => this.setState({ selectedRowKeys: v }, () => this.props.onChange("rowKey", v))
|
||||
};
|
||||
return (<WeaTable rowKey="id" loading={loading} dataSource={dataSource} columns={columns} pagination={pagination}
|
||||
rowSelection={rowSelection} scroll={{ y: `calc(100vh - 182px)` }}/>);
|
||||
}
|
||||
}
|
||||
|
||||
export default Index;
|
||||
|
|
@ -1,77 +0,0 @@
|
|||
/*
|
||||
* 推送记录
|
||||
* 查看详情
|
||||
* @Author: 黎永顺
|
||||
* @Date: 2025/4/2
|
||||
* @Wechat:
|
||||
* @Email: 971387674@qq.com
|
||||
* @description:
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { WeaInputSearch, WeaLocaleProvider, WeaSlideModal, WeaTable, WeaTop } from "ecCom";
|
||||
import { getPushRecordDetail } from "../../../../apis/datapush";
|
||||
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
|
||||
class PushDetailDialog extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
query: { name: "" }, dataSource: [], columns: [], pageInfo: { current: 1, pageSize: 10, total: 0 }, loading: false
|
||||
};
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps, nextContext) {
|
||||
if (nextProps.visible !== this.props.visible && nextProps.visible) this.getPushRecordDetail(nextProps);
|
||||
if (nextProps.visible !== this.props.visible && !nextProps.visible) this.setState({
|
||||
query: { name: "" }, pageInfo: { current: 1, pageSize: 10, total: 0 }
|
||||
});
|
||||
}
|
||||
|
||||
getPushRecordDetail = (props) => {
|
||||
const { recordId } = props || this.props, { pageInfo, query } = this.state;
|
||||
const payload = { ...query, ...pageInfo, recordId };
|
||||
this.setState({ loading: true });
|
||||
getPushRecordDetail(payload).then(({ status, data }) => {
|
||||
this.setState({ loading: false });
|
||||
if (status) {
|
||||
const { columns, list: dataSource, pageNum: current, pageSize, total } = data;
|
||||
this.setState({ columns, dataSource, pageInfo: { current, pageSize, total } });
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
render() {
|
||||
const { query, loading, dataSource, columns, pageInfo } = 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.getPushRecordDetail());
|
||||
},
|
||||
onChange: current => {
|
||||
this.setState({ pageInfo: { ...pageInfo, current } }, () => this.getPushRecordDetail());
|
||||
}
|
||||
};
|
||||
return (<WeaSlideModal
|
||||
{...this.props} className="pushDetailDialog"
|
||||
title={<WeaTop title={getLabel(111, "推送详情")} icon={<i className="icon-coms-fa"/>} iconBgcolor="#F14A2D"
|
||||
buttons={[<WeaInputSearch value={query.name} onSearch={() => this.setState({
|
||||
pageInfo: { ...pageInfo, current: 1 }
|
||||
}, () => this.getPushRecordDetail())}
|
||||
onChange={v => this.setState({ query: { ...query, name: v } })}/>]}/>
|
||||
}
|
||||
direction="right" top={0} width={800} height={100}
|
||||
measureT="%" measureX="px" measureY="%"
|
||||
content={<div className="pushDetail_content">
|
||||
<WeaTable loading={loading} dataSource={dataSource} columns={columns} pagination={pagination}
|
||||
scroll={{ y: `calc(100vh - 182px)` }}/>
|
||||
</div>}
|
||||
/>);
|
||||
}
|
||||
}
|
||||
|
||||
export default PushDetailDialog;
|
||||
|
|
@ -1,187 +0,0 @@
|
|||
// 推送配置表单
|
||||
export const conditions = [
|
||||
{
|
||||
items: [
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
domkey: ["name"],
|
||||
fieldcol: 14,
|
||||
label: "任务名称",
|
||||
lanId: 111,
|
||||
labelcol: 6,
|
||||
value: "",
|
||||
rules: "required|string",
|
||||
viewAttr: 3
|
||||
},
|
||||
{
|
||||
conditionType: "SWITCH",
|
||||
domkey: ["able"],
|
||||
fieldcol: 14,
|
||||
label: "是否启用",
|
||||
lanId: 111,
|
||||
labelcol: 6,
|
||||
value: "0",
|
||||
rules: "required|string",
|
||||
viewAttr: 3
|
||||
},
|
||||
{
|
||||
conditionType: "SELECT",
|
||||
domkey: ["salarySobIds"],
|
||||
fieldcol: 14,
|
||||
label: "薪资账套",
|
||||
lanId: 111,
|
||||
labelcol: 6,
|
||||
value: "",
|
||||
multiple: true,
|
||||
options: [],
|
||||
rules: "required|string",
|
||||
viewAttr: 3
|
||||
},
|
||||
{
|
||||
browserConditionParam: {
|
||||
completeURL: "/api/bs/hrmsalary/push/mode/list",
|
||||
dataParams: {},
|
||||
filterByName: true,
|
||||
tableProps: {},
|
||||
isSingle: true,
|
||||
searchParamsKey: "name",
|
||||
replaceDatas: [{}]
|
||||
},
|
||||
tags: true,
|
||||
conditionType: "INPUT",
|
||||
domkey: ["modeName"],
|
||||
fieldcol: 14,
|
||||
label: "建模名称",
|
||||
lanId: 111,
|
||||
labelcol: 6,
|
||||
value: "",
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
domkey: ["tableName"],
|
||||
fieldcol: 14,
|
||||
label: "数据表名",
|
||||
lanId: 111,
|
||||
labelcol: 6,
|
||||
value: "",
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
domkey: ["modeId"],
|
||||
fieldcol: 14,
|
||||
label: "建模ID",
|
||||
lanId: 111,
|
||||
labelcol: 6,
|
||||
value: "",
|
||||
viewAttr: 2
|
||||
}
|
||||
],
|
||||
title: "基础信息",
|
||||
lanId: 111,
|
||||
col: 2,
|
||||
defaultshow: true
|
||||
}
|
||||
];// 推送配置表单
|
||||
export const PDConditions = [
|
||||
{
|
||||
items: [
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
domkey: ["item"],
|
||||
fieldcol: 14,
|
||||
label: "薪资项目",
|
||||
lanId: 111,
|
||||
labelcol: 6,
|
||||
value: "",
|
||||
rules: "required|string",
|
||||
viewAttr: 3
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
domkey: ["itemName"],
|
||||
fieldcol: 14,
|
||||
label: "薪资名称",
|
||||
lanId: 111,
|
||||
labelcol: 6,
|
||||
viewAttr: 2,
|
||||
hide: true
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
domkey: ["source"],
|
||||
fieldcol: 14,
|
||||
label: "薪资资源",
|
||||
lanId: 111,
|
||||
labelcol: 6,
|
||||
viewAttr: 2,
|
||||
hide: true
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
domkey: ["fieldName"],
|
||||
fieldcol: 14,
|
||||
label: "字段名称",
|
||||
lanId: 111,
|
||||
labelcol: 6,
|
||||
rules: "required|string",
|
||||
viewAttr: 3
|
||||
},
|
||||
{
|
||||
conditionType: "SELECT",
|
||||
domkey: ["fieldType"],
|
||||
fieldcol: 14,
|
||||
label: "字段类型",
|
||||
lanId: 111,
|
||||
labelcol: 6,
|
||||
value: "",
|
||||
options: [],
|
||||
rules: "required|string",
|
||||
viewAttr: 3
|
||||
}
|
||||
],
|
||||
title: "",
|
||||
defaultshow: true
|
||||
}
|
||||
];// 推送详细配置表单
|
||||
|
||||
|
||||
export const RQconditions = [
|
||||
{
|
||||
items: [
|
||||
{
|
||||
conditionType: "MONTHPICKER",
|
||||
domkey: ["startMonthStr"],
|
||||
fieldcol: 14,
|
||||
label: "薪资所属月",
|
||||
lanId: 111,
|
||||
labelcol: 6,
|
||||
value: "",
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "MONTHPICKER",
|
||||
domkey: ["endMonthStr"],
|
||||
fieldcol: 14,
|
||||
label: "薪资所属月",
|
||||
lanId: 111,
|
||||
labelcol: 6,
|
||||
value: "",
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
domkey: ["name"],
|
||||
fieldcol: 14,
|
||||
label: "薪资账套",
|
||||
lanId: 111,
|
||||
labelcol: 6,
|
||||
value: "",
|
||||
viewAttr: 2
|
||||
}
|
||||
],
|
||||
title: "",
|
||||
defaultshow: true
|
||||
}
|
||||
];// 推送记录查询表单
|
||||
|
|
@ -1,51 +0,0 @@
|
|||
import React from "react";
|
||||
import { WeaFormItem, WeaSearchGroup, WeaTools } from "ecCom";
|
||||
import { WeaSwitch } from "comsMobx";
|
||||
import CustomTreeSelect from "./components/PDDialog/customTreeSelect";
|
||||
import CustomBrowser from "../../components/CustomBrowser";
|
||||
|
||||
const getKey = WeaTools.getKey;
|
||||
export const formRender = (form, conditions, params) => {
|
||||
const { isFormInit } = form;
|
||||
const formParams = form.getFormParams();
|
||||
let group = [];
|
||||
isFormInit && conditions && conditions.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">
|
||||
{
|
||||
getKey(fields) === "item" ?
|
||||
<React.Fragment>
|
||||
<CustomTreeSelect
|
||||
detail={params} fieldConfig={fields} form={form} formParams={formParams}/>
|
||||
{
|
||||
_.isEmpty(formParams.item) &&
|
||||
<span className="wea-required-e9" style={{ verticalAlign: "middle" }}>
|
||||
<img src="/images/BacoError_wev9.png" alt=""/>
|
||||
</span>
|
||||
}
|
||||
</React.Fragment>
|
||||
:
|
||||
getKey(fields) === "modeName" ?
|
||||
<CustomBrowser fieldConfig={fields} form={form} formParams={formParams}
|
||||
onCustomChange={(v) => !!_.values(v)[0] && form.updateFields({
|
||||
tableName: _.values(v)[0].subname,
|
||||
modeId: _.values(v)[0].domid
|
||||
})}/>
|
||||
: <WeaSwitch fieldConfig={fields} form={form} formParams={formParams}/>
|
||||
}
|
||||
</WeaFormItem>),
|
||||
colSpan: 1,
|
||||
hide: fields.hide
|
||||
});
|
||||
});
|
||||
!_.isEmpty(items) && group.push(
|
||||
<WeaSearchGroup col={c.col || 1} needTigger={true} showGroup={c.defaultshow} items={items} center={false}
|
||||
title={c.title}/>);
|
||||
});
|
||||
return group;
|
||||
};
|
||||
|
|
@ -1,175 +0,0 @@
|
|||
/*
|
||||
* 数据推送
|
||||
*
|
||||
* @Author: 黎永顺
|
||||
* @Date: 2024/11/19
|
||||
* @Wechat:
|
||||
* @Email: 971387674@qq.com
|
||||
* @description:
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { WeaInputSearch, WeaLocaleProvider, WeaReqTop } from "ecCom";
|
||||
import * as API from "../../apis/datapush";
|
||||
import DatapushList from "./components/datapushList";
|
||||
import PushRecord from "./components/pushRecord";
|
||||
import DatapushDialog from "./components/DPDialog";
|
||||
import PushDetailDialog from "./components/pushRecord/pushDetailDialog";
|
||||
import { Button, message, Modal } from "antd";
|
||||
import cs from "classnames";
|
||||
import "./index.less";
|
||||
import CreatePushRecordDialog from "./components/pushRecord/createPushRecordDialog";
|
||||
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
|
||||
@inject("taxAgentStore", "baseFormStore")
|
||||
@observer
|
||||
class Index extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
selectedKey: "pushRecord", isQuery: false, query: { name: "" }, selectedRowKeys: [],
|
||||
loading: { push: false, withdraw: false }, visible: false,
|
||||
DPDialog: { visible: false, title: "", detail: {} }, //数据推送弹框
|
||||
pushDetailDialog: { visible: false, recordId: "" } //数据推送记录查看推送详情弹框
|
||||
};
|
||||
}
|
||||
|
||||
handleAdvanceSearch = () => this.setState({ isQuery: !this.state.isQuery });
|
||||
handleOperate = (type, detail = {}) => {
|
||||
switch (type) {
|
||||
case "create":
|
||||
case "edit":
|
||||
const title = type === "create" ? getLabel(111, "新建") : getLabel(111, "编辑");
|
||||
this.setState({ DPDialog: { visible: true, title, detail } });
|
||||
break;
|
||||
case "del":
|
||||
Modal.confirm({
|
||||
title: getLabel(111, "信息确认"),
|
||||
content: getLabel(111, "确认要删除吗?"),
|
||||
onOk: () => {
|
||||
API.deletePushSetting({ id: detail }).then(({ status, errormsg }) => {
|
||||
if (status) {
|
||||
message.success(getLabel(111, "删除成功"));
|
||||
this.handleAdvanceSearch();
|
||||
} else {
|
||||
message.error(errormsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
break;
|
||||
case "view":
|
||||
this.setState({ pushDetailDialog: { visible: true, recordId: detail.id } });
|
||||
break;
|
||||
case "rowKey":
|
||||
this.setState({ selectedRowKeys: detail });
|
||||
break;
|
||||
case "addRecord":
|
||||
this.setState({ visible: true });
|
||||
break;
|
||||
case "push":
|
||||
case "batchpush":
|
||||
if (type === "batchpush" && _.isEmpty(this.state.selectedRowKeys)) {
|
||||
message.warning(getLabel(111, "请选择数据"));
|
||||
return;
|
||||
}
|
||||
this.pushRecords(type === "push" ? [detail.id] : this.state.selectedRowKeys);
|
||||
break;
|
||||
case "withdraw":
|
||||
case "batchwithdraw":
|
||||
if (type === "batchwithdraw" && _.isEmpty(this.state.selectedRowKeys)) {
|
||||
message.warning(getLabel(111, "请选择数据"));
|
||||
return;
|
||||
}
|
||||
this.withdrawRecords(type === "withdraw" ? [detail.id] : this.state.selectedRowKeys);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
};
|
||||
pushRecords = (ids) => {
|
||||
this.setState({ loading: { ...this.state.loading, push: true } });
|
||||
API.pushRecords({ ids }).then(({ status, errormsg }) => {
|
||||
this.setState({ loading: { ...this.state.loading, push: false } });
|
||||
if (status) {
|
||||
this.handleAdvanceSearch();
|
||||
message.success(getLabel(111, "推送成功!"));
|
||||
} else {
|
||||
message.error(errormsg);
|
||||
}
|
||||
});
|
||||
};
|
||||
withdrawRecords = (ids) => {
|
||||
this.setState({ loading: { ...this.state.loading, withdraw: true } });
|
||||
API.withdrawRecords({ ids }).then(({ status, errormsg }) => {
|
||||
this.setState({ loading: { ...this.state.loading, withdraw: false } });
|
||||
if (status) {
|
||||
this.handleAdvanceSearch();
|
||||
message.success(getLabel(111, "撤回成功!"));
|
||||
} else {
|
||||
message.error(errormsg);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
render() {
|
||||
const { selectedKey, DPDialog, isQuery, query, pushDetailDialog, loading, visible } = this.state;
|
||||
const { taxAgentStore: { PageAndOptAuth } } = this.props;
|
||||
const showOperateBtn = PageAndOptAuth.opts.includes("admin");
|
||||
const tabs = [
|
||||
{
|
||||
title: getLabel(111, "推送记录"), key: "pushRecord", showDropIcon: false, dropMenuDatas: [],
|
||||
buttons: showOperateBtn ? [
|
||||
<Button type="primary" onClick={() => this.handleOperate("addRecord")}
|
||||
loading={loading.add}>{getLabel(111, "创建")}</Button>,
|
||||
<Button type="primary" onClick={() => this.handleOperate("batchpush")}
|
||||
loading={loading.push}>{getLabel(111, "批量推送")}</Button>,
|
||||
<Button type="ghost" loading={loading.withdraw}
|
||||
onClick={() => this.handleOperate("batchwithdraw")}>{getLabel(111, "批量撤回")}</Button>,
|
||||
<WeaInputSearch style={{ top: -3 }} value={query.name} onSearch={this.handleAdvanceSearch}
|
||||
onChange={v => this.setState({ query: { ...query, name: v } })}/>
|
||||
] : [<WeaInputSearch style={{ top: -3 }} value={query.name} onSearch={this.handleAdvanceSearch}
|
||||
onChange={v => this.setState({ query: { ...query, name: v } })}/>],
|
||||
children: <PushRecord isQuery={isQuery} query={query} onChange={this.handleOperate}/>
|
||||
},
|
||||
{
|
||||
title: getLabel(111, "数据推送"), key: "datapush", showDropIcon: false, dropMenuDatas: [],
|
||||
buttons: showOperateBtn ? [
|
||||
<Button type="primary" onClick={() => this.handleOperate("create")}>{getLabel(111, "新建")}</Button>,
|
||||
<WeaInputSearch style={{ top: -3 }} value={query.name} onSearch={this.handleAdvanceSearch}
|
||||
onChange={v => this.setState({ query: { ...query, name: v } })}/>
|
||||
] : [<WeaInputSearch style={{ top: -3 }} value={query.name} onSearch={this.handleAdvanceSearch}
|
||||
onChange={v => this.setState({ query: { ...query, name: v } })}/>],
|
||||
children: <DatapushList isQuery={isQuery} query={query} onChange={this.handleOperate}/>
|
||||
}
|
||||
];
|
||||
return (
|
||||
<WeaReqTop
|
||||
title={getLabel(111, "数据推送")} icon={<i className="icon-coms-fa"/>} selectedKey={selectedKey}
|
||||
iconBgcolor="#F14A2D" tabDatas={tabs}
|
||||
className={cs("datapush_wrapper", { "reqZindex0": pushDetailDialog.visible })}
|
||||
buttonSpace={10} buttons={_.find(tabs, o => selectedKey === o.key).buttons}
|
||||
onChange={selectedKey => this.setState({
|
||||
selectedKey, pushDetailDialog: { ...pushDetailDialog, visible: false },
|
||||
DPDialog: { ...DPDialog, visible: false }
|
||||
})}
|
||||
showDropIcon={_.find(tabs, o => selectedKey === o.key).showDropIcon} onDropMenuClick={this.handleOperate}
|
||||
dropMenuDatas={_.find(tabs, o => selectedKey === o.key).dropMenuDatas}
|
||||
>
|
||||
{_.find(tabs, o => selectedKey === o.key).children}
|
||||
{/*数据推送框*/}
|
||||
<DatapushDialog {...DPDialog} onClose={() => this.setState({ DPDialog: { ...DPDialog, visible: false } })}
|
||||
onSearch={this.handleAdvanceSearch}/>
|
||||
{/*推送记录查看详情*/}
|
||||
<PushDetailDialog {...pushDetailDialog} onClose={() => this.setState({
|
||||
pushDetailDialog: { ...pushDetailDialog, visible: false }
|
||||
})}/>
|
||||
<CreatePushRecordDialog visible={visible} onSuccess={this.handleAdvanceSearch}
|
||||
onCancel={(callback) => this.setState({ visible: false }, () => callback && callback())}/>
|
||||
</WeaReqTop>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default Index;
|
||||
|
|
@ -1,194 +0,0 @@
|
|||
.datapush_wrapper {
|
||||
.wea-new-top-req-title > div:last-child {
|
||||
right: 16px !important;
|
||||
}
|
||||
|
||||
.wea-new-top-req-content {
|
||||
padding: 8px 16px 0 16px;
|
||||
|
||||
.wea-new-table {
|
||||
background: #FFF;
|
||||
}
|
||||
|
||||
.ant-spin-nested-loading, .ant-spin-container {
|
||||
height: 100% !important;
|
||||
}
|
||||
|
||||
.pushdata_create_dialog {
|
||||
.scroller {
|
||||
background: #f6f6f6;
|
||||
}
|
||||
|
||||
.pushdata_detail {
|
||||
.opts {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
padding: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
.wea-slide-modal-title {
|
||||
border-bottom: 1px solid #ebebeb;
|
||||
}
|
||||
|
||||
.titleDialog {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 0 46px 0 16px;
|
||||
|
||||
.titleCol {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.titleLeftBox {
|
||||
.titleIcon {
|
||||
color: #fff;
|
||||
margin: 0;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
font-size: 22px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: #F14A2D;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 14px;
|
||||
color: #333;
|
||||
padding-left: 6px;
|
||||
}
|
||||
}
|
||||
|
||||
.titleRightBox {
|
||||
justify-content: flex-end;
|
||||
|
||||
button:last-child {
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.pushDetailDialog {
|
||||
.wea-slide-modal-content {
|
||||
height: 100%;
|
||||
|
||||
.wea-new-table {
|
||||
background: #FFF;
|
||||
}
|
||||
|
||||
.pushDetail_content {
|
||||
height: 100%;
|
||||
background: #F6F6F6;
|
||||
padding: 8px 16px;
|
||||
}
|
||||
}
|
||||
|
||||
.wea-slide-modal-title {
|
||||
background: #FFF;
|
||||
text-align: left;
|
||||
height: 44px;
|
||||
}
|
||||
|
||||
.wea-new-top {
|
||||
background: #FFF;
|
||||
|
||||
.ant-col-10 {
|
||||
padding-right: 50px !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.reqZindex0 {
|
||||
.wea-new-top-req {
|
||||
z-index: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
.custom_item_treeselect {
|
||||
.weapp-excel-code-action-list-variable-tip {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.no-child-item {
|
||||
.ant-select-tree-switcher {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.ant-select-tree-node-content-wrapper {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.weapp-excel-code-action-list-variable {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
|
||||
.weapp-excel-code-action-list-variable-name {
|
||||
height: 20px;
|
||||
line-height: 18px;
|
||||
-webkit-flex: 1 1;
|
||||
flex: 1 1;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
word-break: keep-all;
|
||||
white-space: nowrap;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.danger {
|
||||
color: rgb(255, 102, 106) !important;
|
||||
border: 1px solid rgb(255, 193, 195) !important;
|
||||
background-color: rgb(255, 223, 224) !important;
|
||||
}
|
||||
|
||||
.weapp-excel-code-action-list-variable-tip {
|
||||
width: 40px;
|
||||
height: 20px;
|
||||
line-height: 18px;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
color: rgb(255, 205, 80);
|
||||
border: 1px solid rgb(255, 222, 138);
|
||||
background-color: rgb(255, 245, 219);
|
||||
border-radius: 2px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.record-dialog {
|
||||
.wea-dialog-body {
|
||||
background: #f6f6f6;
|
||||
padding: 8px 16px;
|
||||
|
||||
.record-form {
|
||||
background: #FFF;
|
||||
margin-bottom: 8px;
|
||||
|
||||
.wea-search-group, .wea-content {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.rangePickerBox {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
|
||||
.wea-new-table {
|
||||
background: #FFF;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -9,9 +9,9 @@ import { inject, observer } from "mobx-react";
|
|||
import { WeaDialog, WeaLocaleProvider, WeaTools } from "ecCom";
|
||||
import { Button, message } from "antd";
|
||||
import { getSearchs } from "../../../../util";
|
||||
import { getTaxAgentSelectListAsAdmin } from "../../../../apis/taxAgent";
|
||||
import { saveDeclare } from "../../../../apis/declare";
|
||||
import { declareConditions } from "./condition";
|
||||
import { postFetch } from "../../../../util/request";
|
||||
import * as API from "../../../../apis/ruleconfig";
|
||||
|
||||
const getKey = WeaTools.getKey;
|
||||
|
|
@ -35,31 +35,29 @@ class Index extends Component {
|
|||
getTaxAgentSelectListAsAdmin = async (props) => {
|
||||
const { data: sysinfo } = await API.sysinfo();
|
||||
const { declareStore: { declareForm } } = props;
|
||||
postFetch("/api/bs/hrmsalary/taxAgent/listAuth", { filterType: "ADMIN_DATA" })
|
||||
.then(({ status, data }) => {
|
||||
if (status) {
|
||||
this.setState({
|
||||
conditions: _.map(declareConditions, item => ({
|
||||
...item,
|
||||
items: _.map(item.items, o => {
|
||||
if (getKey(o) === "taxAgentId") {
|
||||
return {
|
||||
...o, label: getLabel(o.lanId, o.label),
|
||||
options: _.map(data, g => ({ key: String(g.id), showname: g.name }))
|
||||
// helpfulTitle: getLabel(563420, "提示:可选择单个个税扣缴义务人进行申报,若不选择,则批量对管理下的所有个税扣缴义务人进行申报;")
|
||||
};
|
||||
} else if (getKey(o) === "salaryMonthStr") {
|
||||
return {
|
||||
...o,
|
||||
label: sysinfo["TAX_DECLARATION_DATE_TYPE"] === "1" ? getLabel(111, "税款所属期") : getLabel(111, "薪资所属月")
|
||||
};
|
||||
}
|
||||
return { ...o, label: getLabel(o.lanId, o.label) };
|
||||
})
|
||||
}))
|
||||
}, () => declareForm.initFormFields(this.state.conditions));
|
||||
}
|
||||
});
|
||||
getTaxAgentSelectListAsAdmin().then(({ status, data }) => {
|
||||
if (status) {
|
||||
this.setState({
|
||||
conditions: _.map(declareConditions, item => ({
|
||||
...item,
|
||||
items: _.map(item.items, o => {
|
||||
if (getKey(o) === "taxAgentId") {
|
||||
return {
|
||||
...o, options: _.map(data, g => ({ key: g.id, showname: g.content }))
|
||||
// helpfulTitle: getLabel(563420, "提示:可选择单个个税扣缴义务人进行申报,若不选择,则批量对管理下的所有个税扣缴义务人进行申报;")
|
||||
};
|
||||
} else if (getKey(o) === "salaryMonthStr") {
|
||||
return {
|
||||
...o,
|
||||
label: sysinfo["TAX_DECLARATION_DATE_TYPE"] === "1" ? getLabel(111, "税款所属期") : getLabel(111, "薪资所属月")
|
||||
};
|
||||
}
|
||||
return { ...o };
|
||||
})
|
||||
}))
|
||||
}, () => declareForm.initFormFields(this.state.conditions));
|
||||
}
|
||||
});
|
||||
};
|
||||
save = () => {
|
||||
const { declareStore: { declareForm } } = this.props;
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ class Index extends Component {
|
|||
return (
|
||||
<div className="salary-btn-flex">
|
||||
<div className="mounth-range">
|
||||
<span className="label">{getLabel(543549, "薪资所属月:")}</span>
|
||||
<span className="label">{getLabel(111, "税款所属期:")}</span>
|
||||
<MonthRangePicker dateRange={dateRange} viewAttr={2}
|
||||
onChange={v => this.props.onChange({ dateRange: v })}/>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import React, { Component } from "react";
|
|||
import { WeaLocaleProvider, WeaTable } from "ecCom";
|
||||
import { Dropdown, Menu, message, Modal } from "antd";
|
||||
import { getDeclareList, withDrawTaxDeclaration } from "../../../../apis/declare";
|
||||
import { sysConfCodeRule } from "../../../../apis/ruleconfig";
|
||||
import { sysConfCodeRule, sysinfo } from "../../../../apis/ruleconfig";
|
||||
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
|
||||
|
|
@ -35,18 +35,19 @@ class Index extends Component {
|
|||
if (status && data === "1") this.setState({ showWithDrawBtn: data === "1" });
|
||||
});
|
||||
};
|
||||
getDeclareList = (props) => {
|
||||
const { pageInfo } = this.state;
|
||||
const { queryParams } = props;
|
||||
getDeclareList = async (props) => {
|
||||
const { data: sysData } = await sysinfo();
|
||||
const { pageInfo } = this.state, { queryParams } = props;
|
||||
const { dateRange, ...extra } = queryParams;
|
||||
const [fromSalaryMonthStr, endSalaryMonthStr] = dateRange || [];
|
||||
const params = { fromSalaryMonthStr, endSalaryMonthStr, ...extra };
|
||||
const [fromSalaryMonth, endSalaryMonth] = dateRange || [];
|
||||
const params = { fromSalaryMonth: fromSalaryMonth + "-01", endSalaryMonth: endSalaryMonth + "-01", ...extra };
|
||||
const payload = { ...pageInfo, ...params };
|
||||
this.setState({ loading: true });
|
||||
getDeclareList(payload).then(({ status, data }) => {
|
||||
this.setState({ loading: false });
|
||||
if (status) {
|
||||
const { columns, list: dataSource, pageNum, pageSize, total } = data;
|
||||
let { columns, list: dataSource, pageNum, pageSize, total } = data;
|
||||
sysData["TAX_DECLARATION_DATE_TYPE"] === "1" && (columns = _.filter(columns, o => o.dataIndex !== "salaryMonth"));
|
||||
this.setState({
|
||||
dataSource, pageInfo: { ...pageInfo, pageNum, pageSize, total },
|
||||
columns: _.map(columns, o => {
|
||||
|
|
@ -109,7 +110,7 @@ class Index extends Component {
|
|||
{
|
||||
dataIndex: "operate", title: getLabel(30585, "操作"),
|
||||
width: 170, render: (__, record) => {
|
||||
const { id, opts = [] } = record;
|
||||
const { id } = record;
|
||||
return <React.Fragment>
|
||||
<a
|
||||
href={`${window.ecologyContentPath || ""}/spa/hrmSalary/static/index.html#/main/hrmSalary/generateDeclarationDetail?id=${id}`}
|
||||
|
|
@ -122,7 +123,7 @@ class Index extends Component {
|
|||
onClick={() => this.props.onFilterLog("log", record.id)}>{getLabel(545781, "操作日志")}</a>
|
||||
}
|
||||
{
|
||||
showWithDrawBtn && opts.includes("admin") &&
|
||||
showWithDrawBtn &&
|
||||
<a
|
||||
href="javascript:void(0);" style={{ marginLeft: 10 }}
|
||||
onClick={() => {
|
||||
|
|
|
|||
|
|
@ -37,8 +37,7 @@ class Calculate extends Component {
|
|||
}
|
||||
|
||||
renderCalculateOpts = () => {
|
||||
const { taxAgentStore: { PageAndOptAuth } } = this.props;
|
||||
const showOperateBtn = PageAndOptAuth.opts.includes("admin");
|
||||
const { taxAgentStore: { showOperateBtn } } = this.props;
|
||||
const { queryParams, isRefresh } = this.state;
|
||||
let calculateOpts = [
|
||||
<Button type="primary" onClick={() => this.setState({
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ import { Spin } from "antd";
|
|||
import { inject, observer } from "mobx-react";
|
||||
import { MonthRangePicker } from "../reportView/components/statisticalMicroSettingsSlide";
|
||||
import { optionAddWhole } from "../../util/options";
|
||||
import { postFetch } from "../../util/request";
|
||||
import moment from "moment";
|
||||
import "./index.less";
|
||||
|
||||
|
|
@ -25,8 +24,11 @@ class Index extends Component {
|
|||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
loading: false, taxAgentId: "", countResult: {}, dataSource: [], taxAgentOption: [],
|
||||
loading: false,
|
||||
taxAgentId: "",
|
||||
countResult: {},
|
||||
salaryMonth: [moment().startOf("year").format("YYYY-MM"), moment().format("YYYY-MM")],
|
||||
dataSource: [],
|
||||
pageInfo: {
|
||||
current: 1,
|
||||
pageSize: 10,
|
||||
|
|
@ -36,10 +38,8 @@ class Index extends Component {
|
|||
}
|
||||
|
||||
componentWillMount() {
|
||||
postFetch("/api/bs/hrmsalary/taxAgent/listAuth", { filterType: "QUERY_DATA" })
|
||||
.then(({ status, data }) => {
|
||||
if (status) this.setState({ taxAgentOption: _.map(data, o => ({ key: String(o.id), showname: o.name })) });
|
||||
});
|
||||
const { taxAgentStore: { fetchTaxAgentOption } } = this.props;
|
||||
fetchTaxAgentOption();
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
|
|
@ -76,6 +76,7 @@ class Index extends Component {
|
|||
dataSource, columns, showSum, pageInfo, countResult
|
||||
}), "*");
|
||||
};
|
||||
|
||||
statisticsEmployeeDetailList = () => {
|
||||
const { params: { employeeId }, payrollFilesStore: { statisticsEmployeeDetailList } } = this.props;
|
||||
const { taxAgentId, salaryMonth, pageInfo } = this.state;
|
||||
|
|
@ -103,6 +104,7 @@ class Index extends Component {
|
|||
}
|
||||
}).catch(() => this.setState({ loading: false }));
|
||||
};
|
||||
|
||||
getColumns = () => {
|
||||
const { dataSource, pageInfo, countResult } = this.state;
|
||||
const { payrollFilesStore: { employeeTableStore } } = this.props;
|
||||
|
|
@ -119,10 +121,13 @@ class Index extends Component {
|
|||
};
|
||||
|
||||
render() {
|
||||
const { location, taxAgentStore: { PageAndOptAuth }, payrollFilesStore: { employeeTableStore } } = this.props;
|
||||
const { salaryMonth, taxAgentId, loading, taxAgentOption } = this.state;
|
||||
const {
|
||||
location,
|
||||
taxAgentStore: { showOperateBtn, taxAgentOption },
|
||||
payrollFilesStore: { employeeTableStore }
|
||||
} = this.props;
|
||||
const { salaryMonth, taxAgentId, loading } = this.state;
|
||||
const { query: { dept, name } } = location;
|
||||
const showOperateBtn = PageAndOptAuth.opts.includes("admin");
|
||||
const btns = [
|
||||
<MonthRangePicker viewAttr={2} dateRange={salaryMonth}
|
||||
onChange={v => this.setState({ salaryMonth: v }, () => this.statisticsEmployeeDetailList())}/>,
|
||||
|
|
|
|||
|
|
@ -22,7 +22,6 @@ import SlideModalTitle from "../../../components/slideModalTitle";
|
|||
import { getSalaryFieldForm, saveSalaryField } from "../../../apis/fieldManage";
|
||||
import { commonEnumList } from "../../../apis/payrollFiles";
|
||||
import { dataTypeOptions, patternOptions, roundingModeOptions } from "../../salaryItem/options";
|
||||
import { postFetch } from "../../../util/request";
|
||||
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
|
||||
|
|
@ -45,17 +44,15 @@ class FieldSlide extends Component {
|
|||
pattern: "2",
|
||||
sortedIndex: "",
|
||||
width: "",
|
||||
description: "",
|
||||
taxAgentOption: []
|
||||
description: ""
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
const { taxAgentStore } = this.props;
|
||||
this.commonEnumList();
|
||||
postFetch("/api/bs/hrmsalary/taxAgent/listAuth", { filterType: "ADMIN_DATA" })
|
||||
.then(({ status, data }) => {
|
||||
if (status) this.setState({ taxAgentOption: _.map(data, o => ({ key: String(o.id), showname: o.name })) });
|
||||
});
|
||||
const { fetchTaxAgentOption } = taxAgentStore;
|
||||
fetchTaxAgentOption();
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps, nextContext) {
|
||||
|
|
@ -206,8 +203,13 @@ class FieldSlide extends Component {
|
|||
};
|
||||
|
||||
render() {
|
||||
const { title, visible, record: { id: editId }, onCancel, taxAgentStore: { PageAndOptAuth } } = this.props;
|
||||
const admin = PageAndOptAuth.opts.includes("admin");
|
||||
const {
|
||||
title,
|
||||
visible,
|
||||
record: { id: editId },
|
||||
taxAgentStore: { taxAgentOption, showSalaryItemBtn, showOperateBtn },
|
||||
onCancel
|
||||
} = this.props;
|
||||
const {
|
||||
loading,
|
||||
name,
|
||||
|
|
@ -222,8 +224,7 @@ class FieldSlide extends Component {
|
|||
pattern,
|
||||
sortedIndex,
|
||||
width,
|
||||
description,
|
||||
taxAgentOption
|
||||
description
|
||||
} = this.state;
|
||||
return (
|
||||
<WeaSlideModal
|
||||
|
|
@ -240,7 +241,7 @@ class FieldSlide extends Component {
|
|||
tabs={[]}
|
||||
loading={loading}
|
||||
showOperateBtn={true}
|
||||
editable={admin}
|
||||
editable={(showSalaryItemBtn || showOperateBtn)}
|
||||
onSave={this.saveFieldInfo}
|
||||
/>
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,8 +57,7 @@ class FieldTable extends Component {
|
|||
getColumns = () => {
|
||||
const { columns } = this.state;
|
||||
const { taxAgentStore, onEditLedger, onDeleteLedger } = this.props;
|
||||
const { PageAndOptAuth } = taxAgentStore;
|
||||
const admin = PageAndOptAuth.opts.includes("admin");
|
||||
const { showSalaryItemBtn, showOperateBtn } = taxAgentStore;
|
||||
return _.map([...columns, {
|
||||
dataIndex: "operate",
|
||||
display: true,
|
||||
|
|
@ -73,9 +72,9 @@ class FieldTable extends Component {
|
|||
item.render = (text, record) => {
|
||||
return <div className="optWrapper">
|
||||
<a href="javascript:void(0);" className="mr10"
|
||||
onClick={() => onEditLedger(record)}>{admin ? "编辑" : "查看"}</a>
|
||||
onClick={() => onEditLedger(record)}>{(showSalaryItemBtn || showOperateBtn) ? "编辑" : "查看"}</a>
|
||||
{
|
||||
record.canDelete && admin &&
|
||||
record.canDelete && (showSalaryItemBtn || showOperateBtn) &&
|
||||
<a href="javascript:void(0);" className="mr10" onClick={() => onDeleteLedger(record)}>删除</a>
|
||||
}
|
||||
<Dropdown
|
||||
|
|
|
|||
|
|
@ -85,8 +85,7 @@ class FieldManagement extends Component {
|
|||
render() {
|
||||
const { searchVal, doSearch, slideparams, logDialogVisible, filterConditions } = this.state;
|
||||
const { taxAgentStore } = this.props;
|
||||
const { PageAndOptAuth } = taxAgentStore;
|
||||
const admin = PageAndOptAuth.opts.includes("admin");
|
||||
const { showSalaryItemBtn, showOperateBtn } = taxAgentStore;
|
||||
const btns = [
|
||||
<Button
|
||||
type="primary"
|
||||
|
|
@ -101,7 +100,7 @@ class FieldManagement extends Component {
|
|||
return (
|
||||
<WeaTop
|
||||
title="字段管理" icon={<i className="icon-coms-fa"/>} iconBgcolor="#F14A2D" className="fieldManageWrapper"
|
||||
buttons={admin ? btns : btns.slice(-1)}
|
||||
buttons={(showSalaryItemBtn || showOperateBtn) ? btns : btns.slice(-1)}
|
||||
showDropIcon onDropMenuClick={this.onDropMenuClick}
|
||||
dropMenuDatas={[
|
||||
{
|
||||
|
|
|
|||
|
|
@ -6,8 +6,11 @@
|
|||
*/
|
||||
import React, { Component } from "react";
|
||||
import { WeaTable } from "ecCom";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import LedgerBackCalcEditSlide from "./ledgerBackCalcEditSlide";
|
||||
|
||||
@inject("taxAgentStore")
|
||||
@observer
|
||||
class LedgerBackCalculatedSalaryItemTable extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
|
@ -53,8 +56,7 @@ class LedgerBackCalculatedSalaryItemTable extends Component {
|
|||
|
||||
render() {
|
||||
const { backCalcEditSlide } = this.state;
|
||||
const { record, dataSource, editId, saveSalarySobId, key } = this.props;
|
||||
const showOperateBtn = editId ? record.opts.includes("admin") : true;
|
||||
const { taxAgentStore: { showOperateBtn }, dataSource, editId, saveSalarySobId, key } = this.props;
|
||||
const columns = [
|
||||
{
|
||||
dataIndex: "name",
|
||||
|
|
@ -76,7 +78,7 @@ class LedgerBackCalculatedSalaryItemTable extends Component {
|
|||
width: 80,
|
||||
render: (text, record, index) => {
|
||||
const { canEdit } = record;
|
||||
return showOperateBtn ?
|
||||
return (showOperateBtn && canEdit) ?
|
||||
<a href="javascript: void(0);" onClick={() => this.handleEditBackCalc(record)}>编辑</a> :
|
||||
<span></span>;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,10 +11,9 @@ import { duplicateLedger } from "../../../apis/ledger";
|
|||
import { WeaDialog } from "ecCom";
|
||||
import { Button, message } from "antd";
|
||||
import { getSearchs } from "../../../util";
|
||||
import { postFetch } from "../../../util/request";
|
||||
import "./index.less";
|
||||
|
||||
@inject("ledgerStore")
|
||||
@inject("ledgerStore", "taxAgentStore")
|
||||
@observer
|
||||
class CopyLedgerModal extends Component {
|
||||
constructor(props) {
|
||||
|
|
@ -32,39 +31,42 @@ class CopyLedgerModal extends Component {
|
|||
if (nextProps.visible !== this.props.visible && nextProps.visible) {
|
||||
const { ledgerStore, name, taxAgentId } = nextProps;
|
||||
const { copyForm: form } = ledgerStore;
|
||||
form.updateFields({ name: { value: name }, taxAgentId: { value: taxAgentId } });
|
||||
form.updateFields({
|
||||
name: { value: name },
|
||||
taxAgentId: { value: taxAgentId.toString() }
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
getTaxAgentSelectListAsAdmin = () => {
|
||||
const { ledgerStore } = this.props;
|
||||
const { taxAgentStore, ledgerStore } = this.props;
|
||||
const { copyForm: form } = ledgerStore;
|
||||
postFetch("/api/bs/hrmsalary/taxAgent/listAuth", { filterType: "QUERY_DATA" })
|
||||
.then(({ status, data }) => {
|
||||
if (status) {
|
||||
const conditions = _.map(copyConditions, it => {
|
||||
it.items = _.map(it.items, child => {
|
||||
if (child.domkey[0] === "taxAgentId") {
|
||||
return {
|
||||
...child, options: _.map(data, it => ({ key: String(it.id), showname: it.name }))
|
||||
};
|
||||
} else {
|
||||
return { ...child };
|
||||
}
|
||||
});
|
||||
return { ...it };
|
||||
const { getTaxAgentSelectListAsAdmin } = taxAgentStore;
|
||||
getTaxAgentSelectListAsAdmin().then(({ status, data }) => {
|
||||
if (status) {
|
||||
const conditions = _.map(copyConditions, it => {
|
||||
it.items = _.map(it.items, child => {
|
||||
if (child.domkey[0] === "taxAgentId") {
|
||||
return {
|
||||
...child,
|
||||
options: _.map(data, it => ({ key: it.id, showname: it.content }))
|
||||
};
|
||||
} else {
|
||||
return { ...child };
|
||||
}
|
||||
});
|
||||
form.initFormFields(conditions);
|
||||
}
|
||||
});
|
||||
return { ...it };
|
||||
});
|
||||
form.initFormFields(conditions);
|
||||
}
|
||||
});
|
||||
};
|
||||
handleSubmit = () => {
|
||||
const { ledgerStore, id, onRefreshList, onCancel } = this.props;
|
||||
const { copyForm: form } = ledgerStore;
|
||||
form.validateForm().then(f => {
|
||||
if (f.isValid) {
|
||||
const { taxAgentId, ...formParams } = form.getFormParams();
|
||||
const payload = { id, ...formParams, taxAgentIds: taxAgentId.split(",") };
|
||||
const payload = { id, ...form.getFormParams() };
|
||||
this.setState({ loading: true });
|
||||
duplicateLedger(payload).then(({ status, errormsg }) => {
|
||||
this.setState({ loading: false });
|
||||
|
|
@ -82,6 +84,7 @@ class CopyLedgerModal extends Component {
|
|||
});
|
||||
};
|
||||
|
||||
|
||||
render() {
|
||||
const { onCancel, ledgerStore, ...extra } = this.props;
|
||||
const { loading } = this.state;
|
||||
|
|
|
|||
|
|
@ -95,14 +95,39 @@
|
|||
|
||||
//调薪计薪规则弹框
|
||||
.adjustRuleModalWrapper {
|
||||
.calcRules .cust {
|
||||
line-height: 30px;
|
||||
.titleTipWrapper {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.child {
|
||||
.title {
|
||||
margin-right: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
.adjustRuleDetailWrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
.adjustSalaryFlex {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.wea-select, .ant-select-selection, .ant-select {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.wea-select {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.ant-select-selection {
|
||||
height: 30px;
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
|
||||
// 回算薪资项目
|
||||
|
|
@ -151,10 +176,6 @@
|
|||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.wea-ignore-node i {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.wea-sortable-grid-item {
|
||||
display: inline-block;
|
||||
border: none;
|
||||
|
|
@ -198,10 +219,6 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
.wea-new-table.wea-new-table-draggable table {
|
||||
table-layout: fixed
|
||||
}
|
||||
}
|
||||
|
||||
.titleWrapper {
|
||||
|
|
|
|||
|
|
@ -61,11 +61,10 @@ class LedgerAccountApprRule extends Component {
|
|||
}
|
||||
|
||||
renderForm = (form, conditions) => {
|
||||
const { saveSalarySobId, editId, record } = this.props;
|
||||
const { saveSalarySobId, editId } = this.props;
|
||||
const { approvalItemGroup } = this.state;
|
||||
const { isFormInit } = form;
|
||||
const formParams = form.getFormParams();
|
||||
const showOperateBtn = editId ? record.opts.includes("admin") : true;
|
||||
let group = [];
|
||||
isFormInit && conditions && conditions.map(c => {
|
||||
let items = [];
|
||||
|
|
@ -77,8 +76,8 @@ class LedgerAccountApprRule extends Component {
|
|||
wrapperCol={{ span: `${fields.fieldcol}` }} error={form.getError(fields)}
|
||||
tipPosition="bottom"
|
||||
>
|
||||
<WeaSwitch fieldConfig={{ ...fields, viewAttr: showOperateBtn ? fields.viewAttr : 1 }} form={form}
|
||||
formParams={formParams} onChange={this.handleFormItemChange}/>
|
||||
<WeaSwitch fieldConfig={fields} form={form} formParams={formParams}
|
||||
onChange={this.handleFormItemChange}/>
|
||||
</WeaFormItem>),
|
||||
hide: fields.hide
|
||||
});
|
||||
|
|
@ -90,7 +89,6 @@ class LedgerAccountApprRule extends Component {
|
|||
tipPosition="bottom"
|
||||
>
|
||||
<LedgerAccountSalaryItemsSet datas={approvalItemGroup} salarySobId={editId || saveSalarySobId}
|
||||
showOperateBtn={showOperateBtn}
|
||||
onAddItems={(groupId, items) => this.setState({
|
||||
approvalItemGroup: _.map(approvalItemGroup, o => ({
|
||||
...o,
|
||||
|
|
|
|||
|
|
@ -55,29 +55,26 @@ class LedgerAccountSalaryItemsSet extends Component {
|
|||
|
||||
render() {
|
||||
const { editDialog, salaryItemDialog } = this.state;
|
||||
const { datas, showOperateBtn = true } = this.props;
|
||||
const { datas } = this.props;
|
||||
return (
|
||||
<div>
|
||||
<div style={{ textAlign: "right", padding: "10px 0" }}>
|
||||
{
|
||||
showOperateBtn && <WeaButtonIcon buttonType="add" type="primary"
|
||||
onClick={() => this.setState({
|
||||
editDialog: { visible: true, title: getLabel(111, "添加分类") }
|
||||
})}/>
|
||||
}
|
||||
<WeaButtonIcon buttonType="add" type="primary"
|
||||
onClick={() => this.setState({
|
||||
editDialog: { visible: true, title: getLabel(111, "添加分类") }
|
||||
})}/>
|
||||
|
||||
</div>
|
||||
<div className={cs("salaryItemSettingWrapper", { required: _.isEmpty(datas) })}>
|
||||
<WeaSortable
|
||||
datas={_.map(datas, o => ({ ...o, filter: !showOperateBtn }))}
|
||||
datas={datas}
|
||||
onChange={list => this.props.onChange(list)}
|
||||
renderNodeItem={(item) => {
|
||||
return <div className="salaryItemWrapper">
|
||||
<div className="salaryItemHeader">
|
||||
<span className="titleWrapper">
|
||||
<span className="salaryClassTitle">{item.groupName}</span>
|
||||
{
|
||||
showOperateBtn &&
|
||||
<span className="iconWrapper">
|
||||
<span className="iconWrapper">
|
||||
<i className="icon-coms-edit" onClick={() => this.setState({
|
||||
editDialog: {
|
||||
visible: true, groupName: item.groupName, groupId: item.id, title: getLabel(111, "分类名称编辑")
|
||||
|
|
@ -85,17 +82,14 @@ class LedgerAccountSalaryItemsSet extends Component {
|
|||
})}/>
|
||||
<i className="icon-coms-Delete" onClick={() => this.handleDeleteClick(item)}/>
|
||||
</span>
|
||||
}
|
||||
</span>
|
||||
{
|
||||
showOperateBtn && <i className="icon-coms-Add-to" onClick={() => this.handleAddSalaryItems(item)}/>
|
||||
}
|
||||
<i className="icon-coms-Add-to" onClick={() => this.handleAddSalaryItems(item)}/>
|
||||
</div>
|
||||
<div className="salaryItemContent">
|
||||
{
|
||||
!_.isEmpty(item.approvalItems) ?
|
||||
<WeaSortable
|
||||
datas={_.map(item.approvalItems, o => ({ ...o, filter: !showOperateBtn }))}
|
||||
datas={item.approvalItems}
|
||||
onChange={(items) => this.props.onChange(
|
||||
_.map(datas, child => {
|
||||
if (child.id === item.id) {
|
||||
|
|
@ -108,10 +102,7 @@ class LedgerAccountSalaryItemsSet extends Component {
|
|||
return <div className="salaryItemList">
|
||||
<div className="salaryItem" title={filed.salaryItemName}>
|
||||
<div className="salaryItemName">{filed.salaryItemName}</div>
|
||||
{
|
||||
showOperateBtn &&
|
||||
<Icon type="cross" onClick={() => this.handleDeleteClick(item, filed)}/>
|
||||
}
|
||||
<Icon type="cross" onClick={() => this.handleDeleteClick(item, filed)}/>
|
||||
</div>
|
||||
</div>;
|
||||
}}
|
||||
|
|
|
|||
|
|
@ -5,139 +5,170 @@
|
|||
* Date: 2022/12/12
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { WeaDialog, WeaFormItem, WeaHelpfulTip, WeaLocaleProvider, WeaSelect, WeaTools } from "ecCom";
|
||||
import FormInfo from "../../../components/FormInfo";
|
||||
import { WeaSwitch } from "comsMobx";
|
||||
import { Button } from "antd";
|
||||
import { WeaDialog, WeaFormItem, WeaHelpfulTip, WeaSearchGroup, WeaSelect } from "ecCom";
|
||||
import { Button, Modal, Radio } from "antd";
|
||||
import { monthDays } from "../config";
|
||||
import { listSalarySobItem } from "../../../apis/ledger";
|
||||
import { monthDays, ruleConditions } from "../config";
|
||||
import "./index.less";
|
||||
|
||||
const { getLabel } = WeaLocaleProvider;
|
||||
const getKey = WeaTools.getKey;
|
||||
|
||||
@inject("ledgerStore")
|
||||
@observer
|
||||
class LedgerAdjustRuleAddModal extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = { conditions: [] };
|
||||
this.state = {
|
||||
beforeAdjustmentType: 2,
|
||||
afterAdjustmentType: 1,
|
||||
salaryItemId: "",
|
||||
salaryItemName: "",
|
||||
dayOfMonth: "1",
|
||||
salaryItemOptions: []
|
||||
};
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps, nextContext) {
|
||||
if (nextProps.visible !== this.props.visible && nextProps.visible) this.listSalarySobItem(nextProps.salarySobId);
|
||||
if (nextProps.visible !== this.props.visible && !nextProps.visible) this.props.ledgerStore.initRuleForm();
|
||||
if (nextProps.visible !== this.props.visible && nextProps.salarySobId) this.listSalarySobItem(nextProps.salarySobId);
|
||||
}
|
||||
|
||||
listSalarySobItem = (salarySobId) => {
|
||||
const { salaryRuleItemsList } = this.props;
|
||||
const payload = {
|
||||
excludeSalaryItemIds: _.map(salaryRuleItemsList, item => item.salaryItemId), salarySobId
|
||||
excludeSalaryItemIds: _.map(salaryRuleItemsList, item => item.salaryItemId),
|
||||
salarySobId
|
||||
};
|
||||
listSalarySobItem(payload).then(({ status, data }) => {
|
||||
if (status) {
|
||||
this.setState({
|
||||
conditions: _.map(ruleConditions, item => ({
|
||||
...item, items: _.map(item.items, o => {
|
||||
o = { ...o, label: getLabel(o.lanId, o.label) };
|
||||
if (getKey(o) === "salaryItemId") {
|
||||
return {
|
||||
...o, options: _.map(data, it => ({ key: it.salaryItemId.toString(), showname: it.salaryItemName }))
|
||||
};
|
||||
} else if (getKey(o) === "dayOfMonth") {
|
||||
return { ...o, options: monthDays };
|
||||
} else if (getKey(o) === "beforeAdjustmentType" || getKey(o) === "afterAdjustmentType") {
|
||||
return {
|
||||
...o,
|
||||
options: _.map(o.options, k => ({
|
||||
...k,
|
||||
showname: !k.helpfultip ? getLabel(k.lanId, k.showname) : <span>
|
||||
<span style={{ marginRight: 4 }}>{getLabel(k.lanId, k.showname)}</span>
|
||||
<WeaHelpfulTip title={`=${getLabel(k.helpfultiplanId, k.helpfultip)}`}/>
|
||||
</span>
|
||||
}))
|
||||
};
|
||||
}
|
||||
return o;
|
||||
})
|
||||
}))
|
||||
}, () => this.props.ledgerStore.ruleForm.initFormFields(this.state.conditions));
|
||||
salaryItemOptions: _.map(data, it => ({ key: it.salaryItemId.toString(), showname: it.salaryItemName }))
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
handleSave = () => {
|
||||
const { salaryRuleItemsList, onSave, ledgerStore: { ruleForm } } = this.props;
|
||||
ruleForm.validateForm().then(f => {
|
||||
if (f.isValid) {
|
||||
const { salaryItemId } = ruleForm.getFormParams(), { fieldMap } = ruleForm;
|
||||
const fields = _.map(salaryItemId.split(","), o => ({
|
||||
...ruleForm.getFormParams(),
|
||||
salaryItemId: o,
|
||||
salaryItemName: _.find(fieldMap["salaryItemId"]["options"], k => k.key === o).showname
|
||||
}));
|
||||
this.props.onCancel(onSave([...salaryRuleItemsList, ...fields]));
|
||||
} else {
|
||||
f.showErrors();
|
||||
}
|
||||
const { salaryRuleItemsList, onSave } = this.props;
|
||||
const { salaryItemOptions, ...extraItems } = this.state;
|
||||
if (_.isEmpty(extraItems.salaryItemId)) {
|
||||
Modal.warning({
|
||||
title: "信息确认",
|
||||
content: "必要信息不完整,红色*为必填项!"
|
||||
});
|
||||
return;
|
||||
}
|
||||
const items = { ...extraItems, salaryItemName: this.state.salaryItemName };
|
||||
const { salaryItemName, salaryItemId, ...extraFileds } = items;
|
||||
const salaryItemNameFiled = salaryItemName.split(","), salaryItemIdFiled = salaryItemId.split(",");
|
||||
const fields = _.map(salaryItemNameFiled, (item, index) => {
|
||||
return {
|
||||
...extraFileds,
|
||||
salaryItemName: item,
|
||||
salaryItemId: salaryItemIdFiled[index]
|
||||
};
|
||||
});
|
||||
this.handleReset();
|
||||
onSave([...salaryRuleItemsList, ...fields]);
|
||||
};
|
||||
handleReset = () => {
|
||||
this.setState({
|
||||
beforeAdjustmentType: 2,
|
||||
afterAdjustmentType: 1,
|
||||
salaryItemId: "",
|
||||
salaryItemName: "",
|
||||
dayOfMonth: "1",
|
||||
salaryItemOptions: []
|
||||
}, () => {
|
||||
const { onCancel } = this.props;
|
||||
onCancel();
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
render() {
|
||||
const { ledgerStore: { ruleForm } } = this.props, { conditions } = this.state;
|
||||
const buttons = [<Button type="primary" onClick={this.handleSave}>{getLabel(111, "保存")}</Button>];
|
||||
const itemRender = {
|
||||
salaryItemId: (field, textAreaProps, form, formParams) => {
|
||||
return (<WeaSwitch fieldConfig={{ ...field, ...textAreaProps }} form={form} formParams={formParams}/>);
|
||||
},
|
||||
dayOfMonth: () => null,
|
||||
beforeAdjustmentType: () => null,
|
||||
afterAdjustmentType: () => null
|
||||
};
|
||||
const childrenComponents = {
|
||||
salaryItemId: () => {
|
||||
const { dayOfMonth, beforeAdjustmentType, afterAdjustmentType } = ruleForm.getFormParams();
|
||||
const coms = [], { fieldMap } = ruleForm;
|
||||
coms.push(
|
||||
<WeaFormItem label={<span>
|
||||
<span className="title">{getLabel(111, "计薪规则")}</span>
|
||||
<WeaHelpfulTip
|
||||
title={getLabel(111, "该规则适用于一个薪资核算周期内只调整一次薪资或个税扣缴义务人的情况,其他情况默认按照分段计薪规则核算")}/>
|
||||
</span>} labelCol={{ span: 6 }} wrapperCol={{ span: 18 }}>
|
||||
<div className="cust">
|
||||
<div className="child">
|
||||
<div className="lbl">{fieldMap["dayOfMonth"].label}</div>
|
||||
<WeaSelect value={dayOfMonth} options={monthDays} style={{ width: 100 }}
|
||||
onChange={v => ruleForm.updateFields({ dayOfMonth: { value: v } })}/>
|
||||
<div className="rbl">{getLabel(111, "(含)之前")}</div>
|
||||
const {
|
||||
salaryItemId,
|
||||
salaryItemOptions,
|
||||
dayOfMonth,
|
||||
beforeAdjustmentType,
|
||||
afterAdjustmentType
|
||||
} = this.state;
|
||||
const { title, visible } = this.props;
|
||||
const buttons = [<Button type="primary" onClick={this.handleSave}>保存</Button>];
|
||||
return (
|
||||
<WeaDialog
|
||||
initLoadCss
|
||||
className="adjustRuleModalWrapper"
|
||||
title={title}
|
||||
visible={visible}
|
||||
style={{ width: 750 }}
|
||||
buttons={buttons}
|
||||
onCancel={this.handleReset}
|
||||
>
|
||||
<WeaSearchGroup col={1} needTigger title="" showGroup center>
|
||||
<WeaFormItem label="薪资项目" labelCol={{ span: 4 }} wrapperCol={{ span: 20 }}
|
||||
style={{ tableLayout: "fixed" }}>
|
||||
<WeaSelect
|
||||
multiple
|
||||
viewAttr={3}
|
||||
style={{ width: "350px" }}
|
||||
options={salaryItemOptions}
|
||||
value={salaryItemId}
|
||||
onChange={(salaryItemId, salaryItemName) => this.setState({ salaryItemId, salaryItemName })}
|
||||
/>
|
||||
</WeaFormItem>
|
||||
<WeaFormItem label={<AdjustTitle/>} labelCol={{ span: 4 }} wrapperCol={{ span: 20 }} colon={false}>
|
||||
<div className="adjustRuleDetailWrapper">
|
||||
<div className="adjustSalaryFlex">
|
||||
<span>如果:调薪生效日期在</span>
|
||||
<WeaSelect
|
||||
viewAttr={3}
|
||||
style={{ width: 60, margin: "0 6px" }}
|
||||
value={dayOfMonth}
|
||||
options={monthDays}
|
||||
onChange={(dayOfMonth) => this.setState({ dayOfMonth })}
|
||||
/>
|
||||
<span>(含)之前</span>
|
||||
</div>
|
||||
<div className="child">
|
||||
<div className="lbl">{fieldMap["beforeAdjustmentType"].label}</div>
|
||||
<WeaSelect value={beforeAdjustmentType} detailtype={fieldMap["beforeAdjustmentType"]["detailtype"]}
|
||||
options={fieldMap["beforeAdjustmentType"]["options"]} style={{ flex: 1 }}
|
||||
onChange={v => ruleForm.updateFields({ beforeAdjustmentType: { value: v } })}/>
|
||||
<div className="adjustSalaryFlex">
|
||||
<span>计薪规则为:</span>
|
||||
<Radio.Group onChange={(e) => this.setState({ beforeAdjustmentType: e.target.value })}
|
||||
value={beforeAdjustmentType}>
|
||||
<Radio value={2}>取调整后薪资</Radio>
|
||||
<Radio value={4}>分段计薪<WeaHelpfulTip
|
||||
style={{ marginLeft: "10px" }}
|
||||
width={200}
|
||||
title="=调整前薪资/当月自然日天数*调整前自然日天数+调整后薪资/当月自然日天数*调整后自然日天数"
|
||||
placement="topLeft"
|
||||
/></Radio>
|
||||
<Radio value={3}>取平均<WeaHelpfulTip
|
||||
style={{ marginLeft: "10px" }}
|
||||
width={200}
|
||||
title="=(调整前薪资+调整后薪资)/2"
|
||||
placement="topLeft"
|
||||
/>
|
||||
</Radio>
|
||||
</Radio.Group>
|
||||
</div>
|
||||
<div className="child">
|
||||
<div className="lbl">{getLabel(111, "否则:调薪生效日期在10号之后")}</div>
|
||||
</div>
|
||||
<div className="child">
|
||||
<div className="lbl">{fieldMap["afterAdjustmentType"].label}</div>
|
||||
<WeaSelect value={afterAdjustmentType} detailtype={fieldMap["afterAdjustmentType"]["detailtype"]}
|
||||
options={fieldMap["afterAdjustmentType"]["options"]} style={{ flex: 1 }}
|
||||
onChange={v => ruleForm.updateFields({ afterAdjustmentType: { value: v } })}/>
|
||||
<div style={{ marginBottom: 10 }}>否则:调薪生效日期在{dayOfMonth}号之后</div>
|
||||
<div className="adjustSalaryFlex">
|
||||
<span>计薪规则为:</span>
|
||||
<Radio.Group onChange={(e) => this.setState({ afterAdjustmentType: e.target.value })}
|
||||
value={afterAdjustmentType}>
|
||||
<Radio value={1}>取调整前薪资</Radio>
|
||||
<Radio value={4}>分段计薪<WeaHelpfulTip
|
||||
style={{ marginLeft: "10px" }}
|
||||
width={200}
|
||||
title="=调整前薪资/当月自然日天数*调整前自然日天数+调整后薪资/当月自然日天数*调整后自然日天数"
|
||||
placement="topLeft"
|
||||
/></Radio>
|
||||
<Radio value={3}>取平均<WeaHelpfulTip
|
||||
style={{ marginLeft: "10px" }}
|
||||
width={200}
|
||||
title="=(调整前薪资+调整后薪资)/2"
|
||||
placement="topLeft"
|
||||
/>
|
||||
</Radio>
|
||||
</Radio.Group>
|
||||
</div>
|
||||
</div>
|
||||
</WeaFormItem>
|
||||
);
|
||||
return [{ com: <div className="calcRules">{coms}</div>, col: 1 }];
|
||||
}
|
||||
};
|
||||
return (
|
||||
<WeaDialog {...this.props} initLoadCss style={{ width: 750, height: 236 }} buttons={buttons}
|
||||
className="adjustRuleModalWrapper">
|
||||
<FormInfo className="form-dialog-layout" center={false} itemRender={itemRender}
|
||||
childrenComponents={childrenComponents} form={ruleForm} formFields={conditions}/>
|
||||
</WeaSearchGroup>
|
||||
</WeaDialog>
|
||||
);
|
||||
}
|
||||
|
|
@ -145,3 +176,14 @@ class LedgerAdjustRuleAddModal extends Component {
|
|||
|
||||
export default LedgerAdjustRuleAddModal;
|
||||
|
||||
const AdjustTitle = () => {
|
||||
return <div className="titleTipWrapper">
|
||||
<span className="title">计薪规则</span>
|
||||
<WeaHelpfulTip
|
||||
width={200}
|
||||
title="该规则适用于一个薪资核算周期内只调整一次薪资或个税扣缴义务人的情况,其他情况默认按照分段计薪规则核算"
|
||||
placement="topLeft"
|
||||
/>
|
||||
<span className="title">:</span>
|
||||
</div>;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
* Date: 2022/12/12
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { Button, message, Modal } from "antd";
|
||||
import { WeaButtonIcon, WeaInputSearch, WeaTab } from "ecCom";
|
||||
import PersonalScopeTable from "../../../components/PersonalScopeTable";
|
||||
|
|
@ -36,6 +37,8 @@ const APISaveFox = {
|
|||
edit: editLedgerPersonRange
|
||||
};
|
||||
|
||||
@inject("taxAgentStore")
|
||||
@observer
|
||||
class LedgerAssociatedPersonnel extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
|
@ -221,8 +224,7 @@ class LedgerAssociatedPersonnel extends Component {
|
|||
externalPersonModalVisible,
|
||||
loading, extEmpsWitch
|
||||
} = this.state;
|
||||
const { record, editId, saveSalarySobId } = this.props;
|
||||
const admin = editId ? record.opts.includes("admin") : true;
|
||||
const { taxAgentStore: { showOperateBtn }, editId, saveSalarySobId } = this.props;
|
||||
const topTab = [
|
||||
{
|
||||
title: "关联人员范围",
|
||||
|
|
@ -237,7 +239,7 @@ class LedgerAssociatedPersonnel extends Component {
|
|||
viewcondition: "externalList"
|
||||
}
|
||||
];
|
||||
const btns = admin ? [
|
||||
const btns = showOperateBtn ? [
|
||||
<Button
|
||||
className="icon-coms-leading-in-btn"
|
||||
type="primary"
|
||||
|
|
@ -278,7 +280,7 @@ class LedgerAssociatedPersonnel extends Component {
|
|||
datas={(extEmpsWitch === "0" || !extEmpsWitch) ? _.dropRight(topTab) : topTab}
|
||||
keyParam="viewcondition" //主键
|
||||
selectedKey={selectedKey}
|
||||
buttons={admin && selectedKey === "listInclude" ? btns : btns.slice(1)}
|
||||
buttons={showOperateBtn && selectedKey === "listInclude" ? btns : btns.slice(1)}
|
||||
onChange={selectedKey => this.setState({ selectedKey })}
|
||||
/>
|
||||
<PersonalScopeTable
|
||||
|
|
@ -287,7 +289,7 @@ class LedgerAssociatedPersonnel extends Component {
|
|||
APIFox={APIFox}
|
||||
tabActive={selectedKey}
|
||||
searchValue={searchValue}
|
||||
showOperateBtn={admin}
|
||||
showOperateBtn={showOperateBtn}
|
||||
onChangeSelectKey={rowKeys => this.setState({ rowKeys })}
|
||||
onEditScope={this.handleAddPersonal}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -67,8 +67,14 @@ class LedgerBackCalculatedSalaryItem extends Component {
|
|||
_.map(backCalcItems, item => {
|
||||
const { key, label, helpContent, dataSource } = item;
|
||||
return (
|
||||
<WeaSearchGroup key={key} needTigger showGroup
|
||||
title={<TitleComp title={label} helpContent={helpContent}/>}>
|
||||
<WeaSearchGroup
|
||||
key={key}
|
||||
needTigger
|
||||
title={
|
||||
<TitleComp title={label} helpContent={helpContent}/>
|
||||
}
|
||||
showGroup
|
||||
>
|
||||
<LedgerBackCalculatedSalaryItemTable
|
||||
{...this.props} dataSource={dataSource}
|
||||
key={key} onRefresh={this.getAggregate}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
import React, { Component } from "react";
|
||||
import { WeaCheckbox, WeaFormItem, WeaHelpfulTip, WeaInput, WeaSelect, WeaTextarea } from "ecCom";
|
||||
import { Col, Row } from "antd";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { baseSettingFormItem } from "../config";
|
||||
import { getLedgerBasicForm } from "../../../apis/ledger";
|
||||
import {
|
||||
|
|
@ -18,10 +19,11 @@ import {
|
|||
prefixAddZero
|
||||
} from "../../../util/date";
|
||||
import { commonEnumList } from "../../../apis/ruleconfig";
|
||||
import { postFetch } from "../../../util/request";
|
||||
import moment from "moment";
|
||||
import "./index.less";
|
||||
|
||||
@inject("taxAgentStore")
|
||||
@observer
|
||||
class LedgerBaseSetting extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
|
@ -88,11 +90,7 @@ class LedgerBaseSetting extends Component {
|
|||
const { settingBaseInfo } = this.state;
|
||||
let tmpV = {};
|
||||
_.map(Object.keys(settingBaseInfo), key => {
|
||||
if (key === "taxAgentId") {
|
||||
tmpV[key] = _.map(basicForm["taxAgentIds"], it => it.toString()).join(",");
|
||||
} else {
|
||||
tmpV[key] = !_.isNil(basicForm[key]) ? basicForm[key].toString() : "";
|
||||
}
|
||||
tmpV[key] = !_.isNil(basicForm[key]) ? basicForm[key].toString() : "";
|
||||
});
|
||||
this.setState({
|
||||
settingBaseInfo: {
|
||||
|
|
@ -106,21 +104,23 @@ class LedgerBaseSetting extends Component {
|
|||
});
|
||||
};
|
||||
getTaxAgentSelectListAsAdmin = () => {
|
||||
postFetch("/api/bs/hrmsalary/taxAgent/listAuth", { filterType: "QUERY_DATA" })
|
||||
.then(({ status, data }) => {
|
||||
if (status) {
|
||||
this.setState({
|
||||
baseForm: _.map(baseSettingFormItem, it => {
|
||||
if (it.key === "taxAgentId") {
|
||||
return {
|
||||
...it, options: _.map(data, o => ({ key: String(o.id), showname: o.name }))
|
||||
};
|
||||
}
|
||||
return { ...it };
|
||||
})
|
||||
}, () => this.commonEenumList());
|
||||
}
|
||||
});
|
||||
const { taxAgentStore } = this.props;
|
||||
const { getTaxAgentSelectListAsAdmin } = taxAgentStore;
|
||||
getTaxAgentSelectListAsAdmin().then(({ status, data }) => {
|
||||
if (status) {
|
||||
this.setState({
|
||||
baseForm: _.map(baseSettingFormItem, it => {
|
||||
if (it.key === "taxAgentId") {
|
||||
return {
|
||||
...it,
|
||||
options: _.map(data, it => ({ key: it.id, showname: it.content }))
|
||||
};
|
||||
}
|
||||
return { ...it };
|
||||
})
|
||||
}, () => this.commonEenumList());
|
||||
}
|
||||
});
|
||||
};
|
||||
commonEenumList = () => {
|
||||
const payload = {
|
||||
|
|
@ -157,19 +157,18 @@ class LedgerBaseSetting extends Component {
|
|||
};
|
||||
|
||||
render() {
|
||||
const { editId, record, PageAndOptAuth } = this.props;
|
||||
const { editId, taxAgentStore: { taxAgentOption } } = this.props;
|
||||
const { baseForm, settingBaseInfo } = this.state;
|
||||
const { canEdit, taxAgentId } = settingBaseInfo;
|
||||
let taxAgentIdDisabled = false, taxableItemsDisabled = false;
|
||||
const admin = editId ? record.opts.includes("admin") : true;
|
||||
return (
|
||||
<div className="baseSettingWrapper">
|
||||
<Row gutter={20}>
|
||||
<Col span={18} className="baseSettingLeft">
|
||||
{
|
||||
_.map(baseForm, item => {
|
||||
const { key, label, type, options = [], children = [], multiple = false } = item;
|
||||
taxAgentIdDisabled = key === "taxAgentId" && editId && !PageAndOptAuth.isChief;
|
||||
const { key, label, type, options = [], children = [] } = item;
|
||||
taxAgentIdDisabled = key === "taxAgentId" && editId && taxAgentId;
|
||||
taxableItemsDisabled = key === "taxableItems" && editId;
|
||||
return <WeaFormItem
|
||||
key={key} label={label}
|
||||
|
|
@ -177,10 +176,10 @@ class LedgerBaseSetting extends Component {
|
|||
>
|
||||
{
|
||||
type === "INPUT" ?
|
||||
<WeaInput value={settingBaseInfo[key]} viewAttr={3} disabled={!admin}
|
||||
<WeaInput value={settingBaseInfo[key]} viewAttr={3} disabled={canEdit !== "true"}
|
||||
onChange={(v) => this.handleChangeField(key, v)}/> :
|
||||
type === "TEXTAREA" ?
|
||||
<WeaTextarea value={settingBaseInfo[key]} disabled={!admin}
|
||||
<WeaTextarea value={settingBaseInfo[key]} disabled={canEdit !== "true"}
|
||||
onChange={(v) => this.handleChangeField(key, v)}/> :
|
||||
type === "CHECKBOX" ?
|
||||
<React.Fragment>
|
||||
|
|
@ -190,11 +189,12 @@ class LedgerBaseSetting extends Component {
|
|||
</React.Fragment> :
|
||||
type === "SELECT" ?
|
||||
<WeaSelect value={settingBaseInfo[key]}
|
||||
options={options} viewAttr={taxAgentIdDisabled ? 1 : 3} multiple={multiple}
|
||||
disabled={!admin || taxableItemsDisabled}
|
||||
options={((canEdit !== "true" || taxAgentIdDisabled || taxableItemsDisabled) && key === "taxAgentId") ? taxAgentOption : options}
|
||||
viewAttr={3}
|
||||
disabled={canEdit !== "true" || taxAgentIdDisabled || taxableItemsDisabled}
|
||||
onChange={(v) => this.handleChangeField(key, v)}/> :
|
||||
type === "CUSTOM" ?
|
||||
<CustomSelect list={children} baseInfo={settingBaseInfo} inputStr={key} admin={admin}
|
||||
<CustomSelect list={children} baseInfo={settingBaseInfo} inputStr={key}
|
||||
onChange={(key, v) => this.handleChangeField(key, v)}/> : null
|
||||
}
|
||||
</WeaFormItem>;
|
||||
|
|
@ -211,7 +211,8 @@ class LedgerBaseSetting extends Component {
|
|||
export default LedgerBaseSetting;
|
||||
|
||||
const CustomSelect = (props) => {
|
||||
const { list, baseInfo, onChange, inputStr, admin } = props;
|
||||
const { list, baseInfo, onChange, inputStr } = props;
|
||||
const { canEdit } = baseInfo;
|
||||
const selectInfo = buildEditBasicInfo(baseInfo);
|
||||
return <Row gutter={10} key={inputStr}>
|
||||
{
|
||||
|
|
@ -219,7 +220,8 @@ const CustomSelect = (props) => {
|
|||
const { key, options = [] } = item;
|
||||
return <Col span={6}>
|
||||
<WeaSelect value={baseInfo[key]} options={options} viewAttr={3}
|
||||
disabled={!admin} onChange={(v) => onChange(key, v)}/>
|
||||
disabled={canEdit !== "true"}
|
||||
onChange={(v) => onChange(key, v)}/>
|
||||
</Col>;
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,11 +5,14 @@
|
|||
* Date: 2022/12/12
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { WeaButtonIcon, WeaTab, WeaTable } from "ecCom";
|
||||
import { Modal } from "antd";
|
||||
import LedgerAdjustRuleAddModal from "./ledgerAdjustRuleAddModal";
|
||||
import { listAdjustmentRule } from "../../../apis/ledger";
|
||||
|
||||
@inject("taxAgentStore")
|
||||
@observer
|
||||
class LedgerSalaryAdjustmentRules extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
|
@ -89,10 +92,9 @@ class LedgerSalaryAdjustmentRules extends Component {
|
|||
};
|
||||
|
||||
render() {
|
||||
const { record, editId, onSaveParams } = this.props;
|
||||
const { taxAgentStore: { showOperateBtn }, editId, onSaveParams } = this.props;
|
||||
const { adjustRuleAddModal } = this.state;
|
||||
const { dataSource } = this.state;
|
||||
const showOperateBtn = editId ? record.opts.includes("admin") : true;
|
||||
const btns = showOperateBtn ? [
|
||||
<WeaButtonIcon buttonType="add" type="primary" onClick={this.handleAddAdjustRule}/>
|
||||
] : [];
|
||||
|
|
|
|||
|
|
@ -50,8 +50,7 @@ class LedgerSalaryItemBaseInfo extends Component {
|
|||
};
|
||||
|
||||
render() {
|
||||
const { dataSource, onChangeSortableList, onPreview, editId, record } = this.props;
|
||||
const admin = editId ? record.opts.includes("admin") : true;
|
||||
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)
|
||||
|
|
@ -61,7 +60,7 @@ class LedgerSalaryItemBaseInfo extends Component {
|
|||
<WeaSearchGroup needTigger={false} showGroup title={<TitleComp onPreview={onPreview}/>}>
|
||||
<div className="userInfoWrapper">
|
||||
<WeaSortable
|
||||
datas={_.map(dataSource, o => ({ ...o, filter: !admin }))}
|
||||
datas={dataSource}
|
||||
draggableType="icon"
|
||||
onChange={onChangeSortableList}
|
||||
renderNodeItem={(item) => {
|
||||
|
|
@ -81,7 +80,6 @@ class LedgerSalaryItemBaseInfo extends Component {
|
|||
className="wea-sortable-grid-item"
|
||||
/>
|
||||
<WeaSelect
|
||||
disabled={!admin}
|
||||
showSearch
|
||||
options={options}
|
||||
style={{ width: 150 }}
|
||||
|
|
|
|||
|
|
@ -140,9 +140,9 @@ class LedgerSalaryItemNormal extends Component {
|
|||
onChangeSelectedRowKeys,
|
||||
onAddSalaryItems,
|
||||
incomeCategoriesTitleName,
|
||||
record
|
||||
taxAgentStore
|
||||
} = this.props;
|
||||
const showOperateBtn = editId ? record.opts.includes("admin") : true;
|
||||
const { showOperateBtn } = taxAgentStore;
|
||||
const { categoryModal, addCategoryItemsVisible, moveModalPayload, salaryItemKeywords } = this.state;
|
||||
const newDateSource = _.map(dataSource, item => {
|
||||
return {
|
||||
|
|
@ -182,7 +182,6 @@ class LedgerSalaryItemNormal extends Component {
|
|||
>
|
||||
<LedgerSalaryItemTable
|
||||
tableData={items}
|
||||
showOperateBtn={showOperateBtn}
|
||||
dataSource={_.find(dataSource, childItem => childItem.uuid === uuid).items}
|
||||
salarySobId={editId || saveSalarySobId}
|
||||
selectedRowKeys={field.selectedRowKeys || []}
|
||||
|
|
|
|||
|
|
@ -231,7 +231,7 @@ class LedgerSalaryItemTable extends Component {
|
|||
|
||||
render() {
|
||||
const { salaryItemPayload, editFormulModal, originRecord } = this.state;
|
||||
const { onHandleItemhide, showOperateBtn } = this.props;
|
||||
const { onHandleItemhide } = this.props;
|
||||
const {
|
||||
tableData, dataSource, onDropCategoryItem,
|
||||
onChangeSelectedRowKeys, selectedRowKeys, onMoveTo
|
||||
|
|
@ -315,16 +315,16 @@ class LedgerSalaryItemTable extends Component {
|
|||
<React.Fragment>
|
||||
<WeaTable
|
||||
rowKey={record => record.id || record.key}
|
||||
rowSelection={showOperateBtn ? rowSelection : null}
|
||||
rowSelection={rowSelection}
|
||||
dataSource={tableData}
|
||||
columns={showOperateBtn ? columns : _.filter(columns, o => (o.dataIndex !== "operate" && o.dataIndex !== "itemHide"))}
|
||||
columns={columns}
|
||||
onRow={(record, index) => ({
|
||||
index,
|
||||
moveRow: record
|
||||
})}
|
||||
pagination={false}
|
||||
onDrop={onDropCategoryItem}
|
||||
draggable={dataSource.length === tableData.length && showOperateBtn}
|
||||
draggable={dataSource.length === tableData.length}
|
||||
/>
|
||||
<LedgerSalaryItemEditSlide
|
||||
{...salaryItemPayload}
|
||||
|
|
|
|||
|
|
@ -10,13 +10,12 @@ import { Button } from "antd";
|
|||
import { WeaSwitch } from "comsMobx";
|
||||
import { WeaFormItem, WeaLocaleProvider, WeaSearchGroup, WeaTools } from "ecCom";
|
||||
import { searchConditions } from "../config";
|
||||
import { postFetch } from "../../../util/request";
|
||||
import { getTaxAgentSelectList } from "../../../apis/taxAgent";
|
||||
|
||||
const getKey = WeaTools.getKey;
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
|
||||
@inject("ledgerStore")
|
||||
@observer
|
||||
@inject("ledgerStore") @observer
|
||||
class LedgerSearchComp extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
|
@ -31,28 +30,26 @@ class LedgerSearchComp extends Component {
|
|||
|
||||
getTaxAgentSelectList = () => {
|
||||
const { ledgerStore: { searchForm } } = this.props;
|
||||
postFetch("/api/bs/hrmsalary/taxAgent/listAuth", { filterType: "QUERY_DATA" })
|
||||
.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: [{ key: "", showname: getLabel(332, "全部") }, ..._.map(data, g => ({
|
||||
key: String(g.id), showname: g.name
|
||||
}))]
|
||||
};
|
||||
}
|
||||
return { ...j };
|
||||
})
|
||||
};
|
||||
})
|
||||
}, () => searchForm.initFormFields(this.state.conditions));
|
||||
}
|
||||
});
|
||||
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: [{ key: "", showname: getLabel(332, "全部") }, ..._.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();
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ import "./index.less";
|
|||
const { getLabel } = WeaLocaleProvider;
|
||||
const Step = WeaSteps.Step;
|
||||
|
||||
@inject("ledgerStore")
|
||||
@inject("taxAgentStore", "ledgerStore")
|
||||
@observer
|
||||
class LedgerSlide extends Component {
|
||||
constructor(props) {
|
||||
|
|
@ -67,18 +67,17 @@ class LedgerSlide extends Component {
|
|||
return false;
|
||||
}
|
||||
this.setState({ loading: true });
|
||||
saveLedgerBasic({ ...extra, description, id: editId, taxAgentIds: extra.taxAgentId.split(",") })
|
||||
.then(({ status, data, errormsg }) => {
|
||||
this.setState({ loading: false });
|
||||
if (status) {
|
||||
const { onRefreshList } = this.props;
|
||||
message.success("保存成功");
|
||||
onRefreshList();
|
||||
!editId && this.setState({ current: current + 1, saveSalarySobId: data });
|
||||
} else {
|
||||
message.error(errormsg || "保存失败");
|
||||
}
|
||||
}).catch(() => this.setState({ loading: false }));
|
||||
saveLedgerBasic({ ...extra, description, id: editId }).then(({ status, data, errormsg }) => {
|
||||
this.setState({ loading: false });
|
||||
if (status) {
|
||||
const { onRefreshList } = this.props;
|
||||
message.success("保存成功");
|
||||
onRefreshList();
|
||||
!editId && this.setState({ current: current + 1, saveSalarySobId: data });
|
||||
} else {
|
||||
message.error(errormsg || "保存失败");
|
||||
}
|
||||
}).catch(() => this.setState({ loading: false }));
|
||||
};
|
||||
/*
|
||||
* Author: 黎永顺
|
||||
|
|
@ -199,7 +198,7 @@ class LedgerSlide extends Component {
|
|||
};
|
||||
|
||||
render() {
|
||||
const { visible, editId, record } = this.props;
|
||||
const { visible, editId, taxAgentStore: { showOperateBtn } } = this.props;
|
||||
const { current, saveSalarySobId, loading, salaryApprovalStatus } = this.state;
|
||||
let tabs = [
|
||||
{
|
||||
|
|
@ -297,7 +296,7 @@ class LedgerSlide extends Component {
|
|||
measure="%"
|
||||
title={
|
||||
!editId ? <WeaTopTitle buttons={_.find(tabs, o => current === o.key).createBtns}/> :
|
||||
<WeaReqTitle buttons={record.opts.includes("admin") ? _.find(tabs, o => current === o.key).editBtns : []}
|
||||
<WeaReqTitle buttons={showOperateBtn ? _.find(tabs, o => current === o.key).editBtns : []}
|
||||
tabDatas={tabs} selectedKey={String(current)}
|
||||
onChange={cur => this.setState({ current: parseInt(cur) })}/>
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ class LedgerTable extends Component {
|
|||
return <WeaCheckbox
|
||||
value={text === 0 ? "1" : "0"}
|
||||
display="switch"
|
||||
disabled={!record.opts.includes("admin")}
|
||||
disabled={!showOperateBtn}
|
||||
onChange={(disable) => this.changeLedgerStatus({ id: record.id, disable: disable === "0" ? 1 : 0 })}
|
||||
/>;
|
||||
};
|
||||
|
|
@ -80,14 +80,14 @@ class LedgerTable extends Component {
|
|||
item.render = (text, record) => {
|
||||
return <div className="optWrapper">
|
||||
<a href="javascript:void(0);" className="mr10"
|
||||
onClick={() => onEditLedger(record)}>{record.opts.includes("admin") ? "编辑" : "查看"}</a>
|
||||
onClick={() => onEditLedger(record)}>{showOperateBtn ? "编辑" : "查看"}</a>
|
||||
{
|
||||
record.opts.includes("admin") &&
|
||||
showOperateBtn &&
|
||||
<a href="javascript:void(0);" className="mr10"
|
||||
onClick={() => this.handleMenuClick({ key: "copy" }, record)}>复制</a>
|
||||
}
|
||||
{
|
||||
record.opts.includes("admin") &&
|
||||
showOperateBtn &&
|
||||
<Popover
|
||||
overlayClassName="moreIconWrapper"
|
||||
placement="bottomRight"
|
||||
|
|
@ -148,15 +148,11 @@ class LedgerTable extends Component {
|
|||
};
|
||||
handleMenuClick = ({ key }, record) => {
|
||||
const { copyLedgerModal } = this.state;
|
||||
const { id, name, taxAgentIds } = record;
|
||||
const { id, name, taxAgentId } = record;
|
||||
switch (key) {
|
||||
case "copy":
|
||||
this.setState({
|
||||
copyLedgerModal: {
|
||||
...copyLedgerModal,
|
||||
visible: true, id, name,
|
||||
taxAgentId: _.map(taxAgentIds, o => String(o)).join(",")
|
||||
}
|
||||
copyLedgerModal: { ...copyLedgerModal, visible: true, id, name, taxAgentId }
|
||||
});
|
||||
break;
|
||||
case "delete":
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@ export const copyConditions = [
|
|||
fieldcol: 14,
|
||||
rules: "required|string",
|
||||
label: "个税扣缴义务人",
|
||||
multiple: true,
|
||||
labelcol: 6,
|
||||
value: "",
|
||||
viewAttr: 3
|
||||
|
|
@ -87,7 +86,6 @@ export const baseSettingFormItem = [
|
|||
key: "taxAgentId",
|
||||
label: "个税扣缴义务人",
|
||||
type: "SELECT",
|
||||
multiple: true,
|
||||
options: []
|
||||
},
|
||||
{
|
||||
|
|
@ -859,76 +857,3 @@ export const classifyConditions = [
|
|||
defaultshow: true
|
||||
}
|
||||
];
|
||||
export const ruleConditions = [//调薪计薪规则项表单
|
||||
{
|
||||
items: [
|
||||
{
|
||||
conditionType: "SELECT",
|
||||
domkey: ["salaryItemId"],
|
||||
fieldcol: 8,
|
||||
rules: "required|string",
|
||||
label: "薪资项目",
|
||||
lanId: 111,
|
||||
labelcol: 6,
|
||||
value: "",
|
||||
multiple: true,
|
||||
viewAttr: 3
|
||||
},
|
||||
{
|
||||
conditionType: "SELECT",
|
||||
domkey: ["dayOfMonth"],
|
||||
fieldcol: 6,
|
||||
label: "如果:调薪生效日期在",
|
||||
lanId: 111,
|
||||
labelcol: 0,
|
||||
value: "1",
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "SELECT",
|
||||
domkey: ["beforeAdjustmentType"],
|
||||
fieldcol: 6,
|
||||
label: "计薪规则为:",
|
||||
lanId: 111,
|
||||
labelcol: 0,
|
||||
value: "2",
|
||||
options: [
|
||||
{ key: "2", showname: "取调整后薪资", lanId: 111 },
|
||||
{
|
||||
key: "4", showname: "分段计薪", lanId: 111, helpfultiplanId: 111,
|
||||
helpfultip: "调整前薪资/当月自然日天数*调整前自然日天数+调整后薪资/当月自然日天数*调整后自然日天数"
|
||||
},
|
||||
{
|
||||
key: "3", showname: "取平均", lanId: 111,
|
||||
helpfultip: "(调整前薪资+调整后薪资)/2", helpfultiplanId: 111
|
||||
}
|
||||
],
|
||||
detailtype: 3,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "SELECT",
|
||||
domkey: ["afterAdjustmentType"],
|
||||
fieldcol: 6,
|
||||
label: "计薪规则为:",
|
||||
lanId: 111,
|
||||
labelcol: 0,
|
||||
value: "1",
|
||||
options: [
|
||||
{ key: "1", showname: "取调整前薪资", lanId: 111 },
|
||||
{
|
||||
key: "4", showname: "分段计薪", lanId: 111, helpfultiplanId: 111,
|
||||
helpfultip: "调整前薪资/当月自然日天数*调整前自然日天数+调整后薪资/当月自然日天数*调整后自然日天数"
|
||||
},
|
||||
{
|
||||
key: "3", showname: "取平均", lanId: 111,
|
||||
helpfultip: "(调整前薪资+调整后薪资)/2", helpfultiplanId: 111
|
||||
}
|
||||
],
|
||||
detailtype: 3,
|
||||
viewAttr: 2
|
||||
}
|
||||
],
|
||||
defaultshow: true
|
||||
}
|
||||
];
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
import React, { Component } from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { WeaLocaleProvider, WeaTop } from "ecCom";
|
||||
import { Button, Modal } from "antd";
|
||||
import { Button } from "antd";
|
||||
import LedgerTable from "./components/ledgerTable";
|
||||
import LedgerSlide from "./components/ledgerSlide";
|
||||
import LedgerSearchComp from "./components/ledgerSearchComp";
|
||||
|
|
@ -23,19 +23,34 @@ class Index extends Component {
|
|||
super(props);
|
||||
this.state = {
|
||||
searchVal: "", doSearch: false, logDialogVisible: false, filterConditions: "[]",
|
||||
slideparams: { visible: false, title: "新建账套", editId: "", record: {} }
|
||||
slideparams: {
|
||||
visible: false,
|
||||
title: "新建账套",
|
||||
editId: ""
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
const { taxAgentStore } = this.props;
|
||||
const { fetchTaxAgentOption } = taxAgentStore;
|
||||
fetchTaxAgentOption();
|
||||
}
|
||||
|
||||
handleEditLedger = (record) => {
|
||||
const { slideparams } = this.state;
|
||||
const { id } = record;
|
||||
this.setState({ slideparams: { ...slideparams, visible: true, title: "编辑账套", editId: id, record } });
|
||||
this.setState({ slideparams: { ...slideparams, visible: true, title: "编辑账套", editId: id } });
|
||||
};
|
||||
handleResetLedger = () => {
|
||||
const { slideparams } = this.state;
|
||||
this.setState({
|
||||
slideparams: { ...slideparams, visible: false, title: "新建账套", editId: "", record: {} }
|
||||
slideparams: {
|
||||
...slideparams,
|
||||
visible: false,
|
||||
title: "新建账套",
|
||||
editId: ""
|
||||
}
|
||||
});
|
||||
};
|
||||
onDropMenuClick = (key, targetid = "") => {
|
||||
|
|
@ -50,33 +65,21 @@ class Index extends Component {
|
|||
break;
|
||||
}
|
||||
};
|
||||
handleNewBuild = () => {
|
||||
const { taxAgentStore } = this.props;
|
||||
const { PageAndOptAuth } = taxAgentStore;
|
||||
if (!PageAndOptAuth.isAdminEnable && !PageAndOptAuth.isChief) {
|
||||
Modal.info({
|
||||
title: getLabel(111, "提示"),
|
||||
content: getLabel(111, "业务线人员新建账套后,需联系总管理员,将该账套加入所属业务线。"),
|
||||
onOk: () => this.setState({ slideparams: { ...this.state.slideparams, visible: true } })
|
||||
});
|
||||
} else {
|
||||
this.setState({ slideparams: { ...this.state.slideparams, visible: true } });
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const { logDialogVisible, filterConditions, doSearch, slideparams } = this.state;
|
||||
const { taxAgentStore } = this.props;
|
||||
const { PageAndOptAuth } = taxAgentStore;
|
||||
const admin = PageAndOptAuth.opts.includes("admin");
|
||||
const { showOperateBtn } = taxAgentStore;
|
||||
const btns = [
|
||||
<Button type="primary" onClick={this.handleNewBuild}>{getLabel(111, "新建")}</Button>,
|
||||
<Button type="primary" onClick={() => this.setState({ slideparams: { ...slideparams, visible: true } })}>
|
||||
{getLabel(111, "新建")}
|
||||
</Button>,
|
||||
<LedgerSearchComp onSearch={() => this.setState({ doSearch: !doSearch })}/>
|
||||
];
|
||||
return (
|
||||
<WeaTop
|
||||
title="薪资账套" className="ledgerOuter" icon={<i className="icon-coms-fa"/>} iconBgcolor="#F14A2D"
|
||||
buttons={admin ? btns : btns.slice(-1)}
|
||||
buttons={showOperateBtn ? btns : btns.slice(-1)}
|
||||
showDropIcon onDropMenuClick={this.onDropMenuClick}
|
||||
dropMenuDatas={[
|
||||
{
|
||||
|
|
@ -89,7 +92,7 @@ class Index extends Component {
|
|||
<LedgerTable doSearch={doSearch} onEditLedger={this.handleEditLedger}
|
||||
onFilterLog={(type, targetid) => this.onDropMenuClick(type, targetid)}/>
|
||||
<LedgerSlide
|
||||
{...slideparams} PageAndOptAuth={PageAndOptAuth}
|
||||
{...slideparams}
|
||||
onCancel={this.handleResetLedger}
|
||||
onRefreshList={() => this.setState({ doSearch: !doSearch })}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,105 @@
|
|||
/*
|
||||
* pc端工资单查看启用二次验证弹框
|
||||
* @Author: 黎永顺
|
||||
* @Date: 2025/4/15
|
||||
* @Wechat:
|
||||
* @Email: 971387674@qq.com
|
||||
* @description:
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { WeaDialog, WeaLocaleProvider } from "ecCom";
|
||||
import { WeaForm, WeaSwitch } from "comsMobx";
|
||||
import { Button, message } from "antd";
|
||||
import * as API from "../../apis/mySalaryBenefits";
|
||||
import FormInfo from "../../components/FormInfo";
|
||||
import LoginVerifyPC from "./loginVerifyPC";
|
||||
import SecondarypwdVerifyPC from "./secondarypwdVerifyPC";
|
||||
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
const form = new WeaForm();
|
||||
|
||||
class CheckSecondaryVerifyDialog extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
loading: false, conditions: [], notSetting: false, loginVerify: false, secondaryVerify: false
|
||||
};
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps, nextContext) {
|
||||
if (nextProps.visible !== this.props.visible && nextProps.visible) this.initForm();
|
||||
if (nextProps.visible !== this.props.visible && !nextProps.visible) form.resetForm();
|
||||
}
|
||||
|
||||
initForm = () => {
|
||||
const { salaryBillToken } = this.props;
|
||||
API.getSecondAuthForm({ mouldCode: "HRM", itemCode: "SALARY" }, salaryBillToken)
|
||||
.then(({ conditions, notSetting }) => {
|
||||
this.setState({ conditions: [{ title: "", items: conditions }], notSetting }, () => {
|
||||
form.initFormFields(this.state.conditions);
|
||||
});
|
||||
});
|
||||
};
|
||||
save = () => {
|
||||
const { salaryBillToken } = this.props;
|
||||
form.validateForm().then(f => {
|
||||
if (f.isValid) {
|
||||
const payload = { ...form.getFormParams() };
|
||||
API.doSecondAuth({ ...payload, mouldCode: "HRM", itemCode: "SALARY" }, salaryBillToken)
|
||||
.then(({ status, checkStatus, checkMsg }) => {
|
||||
if (status && checkStatus === "1") {
|
||||
message.success(checkMsg);
|
||||
this.props.onCancel(this.props.onSuccess);
|
||||
} else {
|
||||
message.error(checkMsg);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
f.showErrors();
|
||||
}
|
||||
}).catch(() => this.setState({ loading: false }));
|
||||
};
|
||||
|
||||
render() {
|
||||
const {
|
||||
conditions, loading, notSetting, loginVerify, secondaryVerify
|
||||
} = this.state, { salaryBillToken } = this.props;
|
||||
const itemRender = {
|
||||
authCode: (field, textAreaProps, form, formParams) => {
|
||||
return (<React.Fragment>
|
||||
<WeaSwitch fieldConfig={{ ...field, ...textAreaProps }} form={form} formParams={formParams}/>
|
||||
{
|
||||
notSetting && <div style={{ clear: "both", paddingTop: 10 }}>
|
||||
{getLabel("111", "您还未设置二次验证密码,点击")}
|
||||
<a href="javascript:void(0);"
|
||||
onClick={() => this.setState({ loginVerify: true })}>{getLabel("30747", "设置")}</a>
|
||||
</div>
|
||||
}
|
||||
</React.Fragment>);
|
||||
}
|
||||
};
|
||||
return (
|
||||
<WeaDialog
|
||||
{...this.props} style={{ width: 550, height: notSetting ? 80 + 26 : 80 }} initLoadCss
|
||||
title={getLabel(111, "身份验证")} buttons={[
|
||||
<Button type="primary" onClick={this.save} loading={loading}>{getLabel(111, "确认")}</Button>
|
||||
]}>
|
||||
<div className="form-dialog-layout">
|
||||
<FormInfo className="form-dialog-layout" center={false} itemRender={itemRender}
|
||||
form={form} formFields={conditions}/>
|
||||
</div>
|
||||
{/*登录密码验证弹框*/}
|
||||
<LoginVerifyPC salaryBillToken={salaryBillToken} visible={loginVerify}
|
||||
onCancel={() => this.setState({ loginVerify: false })}
|
||||
onSetPwdSet={() => this.setState({ secondaryVerify: true })}/>
|
||||
{/*二次密码设置*/}
|
||||
<SecondarypwdVerifyPC salaryBillToken={salaryBillToken} visible={secondaryVerify}
|
||||
onCancel={() => this.setState({ secondaryVerify: false })}
|
||||
onSuccess={this.initForm}/>
|
||||
</WeaDialog>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default CheckSecondaryVerifyDialog;
|
||||
|
||||
|
|
@ -16,18 +16,22 @@ import MobileTemplate from "../../components/mobileTemplate";
|
|||
import SecondaryVerify from "./secondaryVerify";
|
||||
import LoginVerify from "./loginVerify";
|
||||
import SecondarypwdVerify from "./secondarypwdVerify";
|
||||
import CheckSecondaryVerifyDialog from "./checkSecondaryVerifyDialog";
|
||||
import "../mySalary/index.less";
|
||||
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
|
||||
@inject("mySalaryStore") @observer
|
||||
@inject("mySalaryStore")
|
||||
@observer
|
||||
export default class MobilePayroll extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
visible: false, captchaVisible: false, loginVisible: false, pwdSetVisible: false,
|
||||
mySalaryBillData: { employeeInformation: {}, salaryTemplate: [] },
|
||||
salaryBillToken: {}
|
||||
salaryBillToken: {},
|
||||
// 统一二次验证
|
||||
checkSecVerify: false
|
||||
};
|
||||
this.id = "";
|
||||
}
|
||||
|
|
@ -37,17 +41,37 @@ export default class MobilePayroll extends React.Component {
|
|||
this.id = getQueryString("id");
|
||||
const { mySalaryStore: { init, setMySalaryBill } } = this.props;
|
||||
setMySalaryBill({});
|
||||
if (type !== "phone") {
|
||||
const { data, status } = await payrollCheckType();
|
||||
if (status && data === "PWD") {
|
||||
init(false, () => this.getMySalaryBill(this.id));
|
||||
} else {
|
||||
this.setState({ captchaVisible: true });
|
||||
}
|
||||
}
|
||||
//统一调用token
|
||||
type !== "phone" && await this.initPC();
|
||||
type === "phone" && await this.initMobile();
|
||||
}
|
||||
|
||||
initPC = async () => {
|
||||
const { mySalaryStore: { setInitEmVerify } } = this.props;
|
||||
const params = this.getUrlkey();
|
||||
const { data } = await salaryBillGetToken({
|
||||
id: _.pick(params, ["id"]).id,
|
||||
recipient: _.pick(params, ["recipient"]).recipient,
|
||||
salaryCode: _.pick(params, ["salaryCode"]).salaryCode
|
||||
});
|
||||
this.setState({ salaryBillToken: data }, () => {
|
||||
payrollCheckType(this.state.salaryBillToken).then(({ data, status }) => {
|
||||
if (status && data === "PWD") {
|
||||
API.isNeedSecondPwdVerify({ mouldCode: "HRM", itemCode: "SALARY" }, this.state.salaryBillToken)
|
||||
.then(({ status, isNeedSecondAuth }) => {
|
||||
if (status && isNeedSecondAuth) {
|
||||
this.setState({ checkSecVerify: true });
|
||||
} else {
|
||||
this.getMySalaryBill(getQueryString("id"));
|
||||
setInitEmVerify();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
this.setState({ captchaVisible: true });
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
initMobile = async () => {
|
||||
const { mySalaryStore: { setInitEmVerify } } = this.props;
|
||||
if (window.em) {
|
||||
|
|
@ -68,15 +92,21 @@ export default class MobilePayroll extends React.Component {
|
|||
salaryCode: _.pick(params, ["salaryCode"]).salaryCode
|
||||
});
|
||||
this.setState({ salaryBillToken: data }, () => {
|
||||
API.isNeedSecondPwdVerify({ mouldCode: "HRM", itemCode: "SALARY" }, this.state.salaryBillToken)
|
||||
.then(({ status, isNeedSecondAuth }) => {
|
||||
if (status && isNeedSecondAuth) {
|
||||
this.setState({ visible: true });
|
||||
} else {
|
||||
this.getMySalaryBill(getQueryString("id"));
|
||||
setInitEmVerify();
|
||||
}
|
||||
});
|
||||
payrollCheckType(this.state.salaryBillToken).then(({ data, status }) => {
|
||||
if (status && data === "PWD") {
|
||||
API.isNeedSecondPwdVerify({ mouldCode: "HRM", itemCode: "SALARY" }, this.state.salaryBillToken)
|
||||
.then(({ status, isNeedSecondAuth }) => {
|
||||
if (status && isNeedSecondAuth) {
|
||||
this.setState({ visible: true });
|
||||
} else {
|
||||
this.getMySalaryBill(getQueryString("id"));
|
||||
setInitEmVerify();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
this.setState({ captchaVisible: true });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
|
@ -141,7 +171,7 @@ export default class MobilePayroll extends React.Component {
|
|||
|
||||
render() {
|
||||
const { mySalaryStore: { setInitEmVerify } } = this.props, {
|
||||
captchaVisible, visible, loginVisible, pwdSetVisible
|
||||
captchaVisible, visible, loginVisible, pwdSetVisible, checkSecVerify
|
||||
} = this.state;
|
||||
const type = getQueryString("type");
|
||||
if (_.isEmpty(toJS(this.props.mySalaryStore.mySalaryBill))) return <React.Fragment>
|
||||
|
|
@ -155,12 +185,24 @@ export default class MobilePayroll extends React.Component {
|
|||
onSetPwdSet={() => this.setState({ loginVisible: false, pwdSetVisible: true })}/>}
|
||||
{pwdSetVisible && <SecondarypwdVerify {...this.props} salaryBillToken={this.state.salaryBillToken}
|
||||
onSuccess={() => this.setState({ pwdSetVisible: false }, () => this.initMobile())}/>}
|
||||
{/*统一外部调用token*/}
|
||||
<CheckSecondaryVerifyDialog visible={checkSecVerify} salaryBillToken={this.state.salaryBillToken}
|
||||
onCancel={(callback) => this.setState({ checkSecVerify: false }, () => callback && callback())}
|
||||
onSuccess={() => {
|
||||
this.getMySalaryBill(getQueryString("id"));
|
||||
setInitEmVerify();
|
||||
}}/>
|
||||
{/*发送验证码*/}
|
||||
<CaptchaModal
|
||||
visible={captchaVisible} id={getQueryString("id")}
|
||||
onCancel={() => this.setState({ captchaVisible: false })}
|
||||
onConfirm={() => this.props.mySalaryStore.setInitEmVerify()}
|
||||
/>
|
||||
{
|
||||
captchaVisible && <CaptchaModal
|
||||
visible={captchaVisible} id={getQueryString("id")} salaryBillToken={this.state.salaryBillToken}
|
||||
onCancel={() => this.setState({ captchaVisible: false })}
|
||||
onConfirm={() => {
|
||||
setInitEmVerify();
|
||||
this.getMySalaryBill(getQueryString("id"));
|
||||
}}
|
||||
/>
|
||||
}
|
||||
</React.Fragment>;
|
||||
const {
|
||||
salaryTemplate, salaryGroups, employeeInformation, sendTime, confirmStatus, showAck, showFeedback
|
||||
|
|
|
|||
|
|
@ -168,3 +168,13 @@
|
|||
position: relative;
|
||||
border-left: 1px solid #ddd;
|
||||
}
|
||||
|
||||
.secondarypwd-form {
|
||||
.wea-form-cell-wrapper {
|
||||
& > div:last-child {
|
||||
.ant-col-16 {
|
||||
width: 37.5% !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,72 @@
|
|||
/*
|
||||
* 二次验证
|
||||
* 登录密码验证
|
||||
* @Author: 黎永顺
|
||||
* @Date: 2025/4/23
|
||||
* @Wechat:
|
||||
* @Email: 971387674@qq.com
|
||||
* @description:
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { WeaDialog, WeaLocaleProvider } from "ecCom";
|
||||
import { WeaForm } from "comsMobx";
|
||||
import { Button } from "antd";
|
||||
import FormInfo from "../../components/FormInfo";
|
||||
import { loginCondition } from "./pwdCondtion";
|
||||
import { RSAEcrypt } from "../../util/RSAUtil";
|
||||
import * as API from "../../apis/mySalaryBenefits";
|
||||
|
||||
const form = new WeaForm();
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
|
||||
class LoginVerifyPC extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = { loading: false };
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps, nextContext) {
|
||||
if (nextProps.visible !== this.props.visible && nextProps.visible) {
|
||||
form.initFormFields(loginCondition);
|
||||
} else {
|
||||
form.resetForm();
|
||||
}
|
||||
}
|
||||
|
||||
save = async () => {
|
||||
form.validateForm().then(f => {
|
||||
if (f.isValid) {
|
||||
RSAEcrypt("1", { ...form.getFormParams() }, this.props.salaryBillToken)
|
||||
.then(RSAParam => {
|
||||
API.checkPassword({ ...RSAParam }).then(({ result }) => {
|
||||
if (result) {
|
||||
this.props.onCancel();
|
||||
this.props.onSetPwdSet();
|
||||
} else {
|
||||
form.showError("password", getLabel(504343, "登录密码错误"));
|
||||
}
|
||||
});
|
||||
});
|
||||
} else {
|
||||
f.showErrors();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
render() {
|
||||
const { loading } = this.state;
|
||||
return (
|
||||
<WeaDialog
|
||||
{...this.props}
|
||||
style={{ width: 550, height: _.reduce(loginCondition, (pre, cur) => (pre += cur.items.length), 0) * 47 + 33 }}
|
||||
initLoadCss title={getLabel(111, "请先输入登录密码")} buttons={[
|
||||
<Button type="primary" onClick={this.save} loading={loading}>{getLabel(111, "下一步")}</Button>
|
||||
]}>
|
||||
<FormInfo className="form-dialog-layout" center={false} itemRender={{}} form={form}
|
||||
formFields={loginCondition}/>
|
||||
</WeaDialog>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default LoginVerifyPC;
|
||||
|
|
@ -1,6 +1,25 @@
|
|||
import { WeaLocaleProvider } from "ecCom";
|
||||
|
||||
const { getLabel } = WeaLocaleProvider;
|
||||
export const captchaCondition = [
|
||||
{
|
||||
items: [
|
||||
{
|
||||
colSpan: 1,
|
||||
conditionType: "INPUT",
|
||||
domkey: ["mobileCode"],
|
||||
fieldcol: 18,
|
||||
label: getLabel(111, "验证码"),
|
||||
labelcol: 6,
|
||||
detailtype: 1,
|
||||
rules: "required|string",
|
||||
viewAttr: 3
|
||||
}
|
||||
],
|
||||
title: "",
|
||||
defaultshow: true
|
||||
}
|
||||
];
|
||||
export const loginCondition = [
|
||||
{
|
||||
items: [
|
||||
|
|
|
|||
|
|
@ -0,0 +1,96 @@
|
|||
/*
|
||||
* 二次验证密码设置
|
||||
*
|
||||
* @Author: 黎永顺
|
||||
* @Date: 2025/4/17
|
||||
* @Wechat:
|
||||
* @Email: 971387674@qq.com
|
||||
* @description:
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { WeaDialog, WeaLocaleProvider } from "ecCom";
|
||||
import { Button, message } from "antd";
|
||||
import { WeaForm, WeaSwitch } from "comsMobx";
|
||||
import FormInfo from "../../components/FormInfo";
|
||||
import { secondarypwdCondition } from "./conditions";
|
||||
import * as API from "../../apis/mySalaryBenefits";
|
||||
import { RSAEcrypt } from "../../util/RSAUtil";
|
||||
|
||||
const form = new WeaForm();
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
|
||||
class SecondarypwdVerifyPC 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
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
form.initFormFields(secondarypwdCondition);
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
form.resetForm();
|
||||
}
|
||||
|
||||
save = async () => {
|
||||
form.validateForm().then(f => {
|
||||
if (f.isValid) {
|
||||
const { secondaryPwd1, secondaryPwd2, validatecode } = form.getFormParams();
|
||||
if (secondaryPwd1 !== secondaryPwd2) {
|
||||
form.showError("secondaryPwd2", getLabel(504376, "密码确认不正确!"));
|
||||
return;
|
||||
}
|
||||
RSAEcrypt("1", { secondaryPwd1, secondaryPwd2 }).then(RSAParam => {
|
||||
API.saveSecondaryPwd({ ...RSAParam, validatecode }, this.props.salaryBillToken)
|
||||
.then(({ sign, message: msg }) => {
|
||||
if (sign === "1") {
|
||||
message.success(msg);
|
||||
this.props.onCancel();
|
||||
this.props.onSuccess();
|
||||
} else {
|
||||
form.showError("validatecode", 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}` });
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
} else {
|
||||
f.showErrors();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
render() {
|
||||
const itemRender = {
|
||||
validatecode: (field, textAreaProps, form, formParams) => {
|
||||
return (<React.Fragment>
|
||||
<WeaSwitch fieldConfig={{ ...field, ...textAreaProps }} form={form} formParams={formParams}/>
|
||||
<img
|
||||
style={{ height: 30, cursor: "pointer", position: "absolute", left: "118%" }}
|
||||
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=""/>
|
||||
</React.Fragment>);
|
||||
}
|
||||
};
|
||||
return (<WeaDialog
|
||||
{...this.props} style={{
|
||||
width: 550, height: _.reduce(secondarypwdCondition, (pre, cur) => (pre += cur.items.length), 0) * 47 + 33
|
||||
}} initLoadCss title={getLabel(111, "二次验证密码设置")} buttons={[
|
||||
<Button type="primary" onClick={this.save}>{getLabel(111, "保存")}</Button>
|
||||
]}>
|
||||
<FormInfo className="form-dialog-layout secondarypwd-form" center={false} itemRender={itemRender} form={form}
|
||||
formFields={secondarypwdCondition}/>
|
||||
</WeaDialog>);
|
||||
}
|
||||
}
|
||||
|
||||
export default SecondarypwdVerifyPC;
|
||||
|
|
@ -14,6 +14,8 @@ import { confirmSalaryBill, feedBackSalaryBill, payrollCheckType } from "../../a
|
|||
import CaptchaModal from "../../components/captchaModal";
|
||||
import "./index.less";
|
||||
|
||||
const isIPhone = new RegExp("\\biPhone\\b|\\biPod\\b", "i").test(window.navigator.userAgent);
|
||||
const isEm = window.navigator.userAgent.indexOf("E-Mobile7") >= 0;
|
||||
const { getLabel } = WeaLocaleProvider;
|
||||
|
||||
@inject("mySalaryStore")
|
||||
|
|
@ -123,7 +125,7 @@ export const ConfirmBtns = (props) => {
|
|||
<Button type="primary" onClick={props.confirmSalaryBill}>{getLabel(111, "确认")}</Button>
|
||||
}
|
||||
{
|
||||
props.showFeedback === "1" &&
|
||||
((props.showFeedback === "1" && !isIPhone) || (props.showFeedback === "1" && isIPhone && isEm)) &&
|
||||
<Button type="ghost" onClick={props.goFeedback}>{getLabel(111, "反馈")}</Button>
|
||||
}
|
||||
</div>;
|
||||
|
|
|
|||
|
|
@ -90,7 +90,7 @@ class WaterMarkSetModal extends Component {
|
|||
};
|
||||
|
||||
render() {
|
||||
const { wmClassify, wmNoTransparent, wmRotate, wmImg, wmcontSet } = this.state, { showOperateBtn } = this.props;
|
||||
const { wmClassify, wmNoTransparent, wmRotate, wmImg, wmcontSet } = this.state;
|
||||
return (
|
||||
<WeaSlideModal
|
||||
{...this.props} className="waterMarkSetWrapper"
|
||||
|
|
@ -103,7 +103,7 @@ class WaterMarkSetModal extends Component {
|
|||
<WeaFormItem label={getLabel(111, "水印类型")} labelCol={{ span: 5 }} wrapperCol={{ span: 10 }}>
|
||||
<div style={{ display: "flex", alignItems: "center" }}>
|
||||
<WeaSelect
|
||||
value={wmClassify} detailtype={3} viewAttr={showOperateBtn ? 2 : 1}
|
||||
value={wmClassify} detailtype={3}
|
||||
options={[
|
||||
{ key: "text", showname: getLabel(111, "文本") },
|
||||
{ key: "image", showname: getLabel(111, "图片") }
|
||||
|
|
@ -119,11 +119,8 @@ class WaterMarkSetModal extends Component {
|
|||
wmClassify === "text" ?
|
||||
<WeaError tipPosition="bottom" ref="watermarkContError" error={getLabel(385869, "此项必填")}>
|
||||
<div className="textSetting">
|
||||
{
|
||||
showOperateBtn &&
|
||||
<i className="icon-coms-Flow-setting"
|
||||
onClick={() => this.setState({ wmcontSet: { ...wmcontSet, visible: true } })}/>
|
||||
}
|
||||
<i className="icon-coms-Flow-setting"
|
||||
onClick={() => this.setState({ wmcontSet: { ...wmcontSet, visible: true } })}/>
|
||||
{
|
||||
_.isEmpty(wmcontSet.textSet) ? <img src="/images/BacoError_wev9.png" alt=""/> :
|
||||
<span className="previewBtn txtPrew"
|
||||
|
|
@ -162,24 +159,21 @@ class WaterMarkSetModal extends Component {
|
|||
</WeaFormItem>
|
||||
<WeaFormItem label={getLabel(111, "不透明(百分比)")} labelCol={{ span: 5 }} wrapperCol={{ span: 10 }}>
|
||||
<WeaInputNumber
|
||||
min={0} max={80} precision={2} value={wmNoTransparent} disabled={!showOperateBtn}
|
||||
min={0} max={80} precision={2} value={wmNoTransparent}
|
||||
onChange={wmNoTransparent => this.setState({ wmNoTransparent })}
|
||||
/>
|
||||
</WeaFormItem>
|
||||
<WeaFormItem label={getLabel(111, "旋转角度(逆时针)")} labelCol={{ span: 5 }} wrapperCol={{ span: 10 }}>
|
||||
<WeaInputNumber
|
||||
min={0} max={360} precision={2} value={wmRotate} disabled={!showOperateBtn}
|
||||
min={0} max={360} precision={2} value={wmRotate}
|
||||
onChange={wmRotate => this.setState({ wmRotate })}
|
||||
/>
|
||||
</WeaFormItem>
|
||||
</WeaSearchGroup>
|
||||
{
|
||||
showOperateBtn &&
|
||||
<div className="slideBottom">
|
||||
<Button type="primary" onClick={this.handleCustomSave}>{getLabel(111, "确定")}</Button>
|
||||
<Button type="ghost" onClick={this.props.onClose}>{getLabel(111, "取消")}</Button>
|
||||
</div>
|
||||
}
|
||||
<div className="slideBottom">
|
||||
<Button type="primary" onClick={this.handleCustomSave}>{getLabel(111, "确定")}</Button>
|
||||
<Button type="ghost" onClick={this.props.onClose}>{getLabel(111, "取消")}</Button>
|
||||
</div>
|
||||
{/* 水印内容设置弹框*/}
|
||||
<WmContentSetModal {...wmcontSet}
|
||||
onClose={textSet => this.setState({
|
||||
|
|
|
|||
|
|
@ -104,7 +104,6 @@ class TemplateBaseSettings extends Component {
|
|||
};
|
||||
|
||||
render() {
|
||||
const { showOperateBtn } = this.props;
|
||||
const { watermarkStatus, watermark, watermarkSet, ackFeedbackSetting, salaryBillViewingLimitSetting } = this.state;
|
||||
const { ackStatus, feedbackStatus, autoAckDays, feedBackUrl, mobileFeedbackUrl } = ackFeedbackSetting;
|
||||
const { monthType = "SALARY_DATE", limitMonth, burningAfterReadingMin } = salaryBillViewingLimitSetting;
|
||||
|
|
@ -112,14 +111,14 @@ class TemplateBaseSettings extends Component {
|
|||
<React.Fragment>
|
||||
<WeaSearchGroup title={getLabel(111, "水印设置")} showGroup needTigger className="waterMarkWrapper">
|
||||
<WeaFormItem label={getLabel(111, "启用水印")} labelCol={{ span: 2 }} wrapperCol={{ span: 4 }}>
|
||||
<WeaCheckbox value={watermarkStatus} display="switch" viewAttr={showOperateBtn ? 2 : 1}
|
||||
<WeaCheckbox value={watermarkStatus} display="switch"
|
||||
onChange={watermarkStatus => this.setState({ watermarkStatus, watermark: "DEFAULT" })}/>
|
||||
</WeaFormItem>
|
||||
{
|
||||
watermarkStatus === "1" &&
|
||||
<WeaFormItem label={getLabel(111, "水印类型")} labelCol={{ span: 2 }} wrapperCol={{ span: 4 }}>
|
||||
<WeaSelect
|
||||
value={watermark} viewAttr={showOperateBtn ? 2 : 1}
|
||||
value={watermark}
|
||||
options={[
|
||||
{ key: "DEFAULT", showname: getLabel(111, "系统默认水印") },
|
||||
{ key: "CUSTOM", showname: getLabel(111, "自定义水印") }
|
||||
|
|
@ -135,7 +134,7 @@ class TemplateBaseSettings extends Component {
|
|||
}
|
||||
})}>{getLabel(111, "水印设置")}</span>
|
||||
}
|
||||
<WaterMarkSetModal {...watermarkSet} showOperateBtn={showOperateBtn}
|
||||
<WaterMarkSetModal {...watermarkSet}
|
||||
onClose={() => this.setState({ watermarkSet: { ...watermarkSet, visible: false } })}
|
||||
onChange={wmSetting => this.setState({ wmSetting })}
|
||||
/>
|
||||
|
|
@ -144,7 +143,7 @@ class TemplateBaseSettings extends Component {
|
|||
</WeaSearchGroup>
|
||||
<WeaSearchGroup title={getLabel(111, "工资单确认反馈设置")} showGroup needTigger className="waterMarkWrapper">
|
||||
<WeaFormItem label={getLabel(111, "启用工资单确认")} labelCol={{ span: 2 }} wrapperCol={{ span: 4 }}>
|
||||
<WeaCheckbox value={ackStatus} display="switch" viewAttr={showOperateBtn ? 2 : 1}
|
||||
<WeaCheckbox value={ackStatus} display="switch"
|
||||
onChange={ackStatus => this.setState({
|
||||
ackFeedbackSetting: {
|
||||
...ackFeedbackSetting, ackStatus, autoAckDays: 7
|
||||
|
|
@ -156,7 +155,7 @@ class TemplateBaseSettings extends Component {
|
|||
<React.Fragment>
|
||||
<WeaFormItem label={getLabel(111, "自动确认超时天数")} labelCol={{ span: 2 }} wrapperCol={{ span: 4 }}>
|
||||
<WeaInputNumber
|
||||
min={1} value={autoAckDays} viewAttr={3} disabled={!showOperateBtn}
|
||||
min={1} value={autoAckDays} viewAttr={3}
|
||||
style={{ width: "90%" }}
|
||||
onChange={autoAckDays => this.setState({
|
||||
ackFeedbackSetting: {
|
||||
|
|
@ -171,7 +170,7 @@ class TemplateBaseSettings extends Component {
|
|||
</React.Fragment>
|
||||
}
|
||||
<WeaFormItem label={getLabel(111, "启用工资单反馈")} labelCol={{ span: 2 }} wrapperCol={{ span: 4 }}>
|
||||
<WeaCheckbox value={feedbackStatus} display="switch" viewAttr={showOperateBtn ? 2 : 1}
|
||||
<WeaCheckbox value={feedbackStatus} display="switch"
|
||||
onChange={feedbackStatus => this.setState({
|
||||
ackFeedbackSetting: {
|
||||
...ackFeedbackSetting, feedbackStatus
|
||||
|
|
@ -183,7 +182,7 @@ class TemplateBaseSettings extends Component {
|
|||
<React.Fragment>
|
||||
<WeaFormItem label={getLabel(111, "PC端反馈流程地址")} labelCol={{ span: 2 }} wrapperCol={{ span: 4 }}>
|
||||
<WeaInput
|
||||
value={feedBackUrl} viewAttr={3} disabled={!showOperateBtn}
|
||||
value={feedBackUrl} viewAttr={3}
|
||||
onChange={feedBackUrl => this.setState({
|
||||
ackFeedbackSetting: {
|
||||
...ackFeedbackSetting, feedBackUrl
|
||||
|
|
@ -192,7 +191,7 @@ class TemplateBaseSettings extends Component {
|
|||
</WeaFormItem>
|
||||
<WeaFormItem label={getLabel(111, "移动端反馈流程地址")} labelCol={{ span: 2 }} wrapperCol={{ span: 4 }}>
|
||||
<WeaInput
|
||||
value={mobileFeedbackUrl} viewAttr={3} disabled={!showOperateBtn}
|
||||
value={mobileFeedbackUrl} viewAttr={3}
|
||||
onChange={mobileFeedbackUrl => this.setState({
|
||||
ackFeedbackSetting: {
|
||||
...ackFeedbackSetting, mobileFeedbackUrl
|
||||
|
|
@ -208,12 +207,12 @@ class TemplateBaseSettings extends Component {
|
|||
<WeaSelect
|
||||
value={monthType} onChange={monthType => this.setState({
|
||||
salaryBillViewingLimitSetting: { ...salaryBillViewingLimitSetting, monthType }
|
||||
})} viewAttr={2} disabled={!showOperateBtn}
|
||||
})}
|
||||
options={[
|
||||
{ key: "SALARY_DATE", showname: getLabel(111, "薪资所属月"), selected: true },
|
||||
{ key: "SEND_DATE", showname: getLabel(111, "发放日期") }
|
||||
]}/>
|
||||
<WeaInputNumber min={0} value={limitMonth} viewAttr={2} disabled={!showOperateBtn}
|
||||
<WeaInputNumber min={0} value={limitMonth}
|
||||
onChange={limitMonth => this.setState({
|
||||
salaryBillViewingLimitSetting: {
|
||||
...salaryBillViewingLimitSetting, limitMonth
|
||||
|
|
@ -227,7 +226,7 @@ class TemplateBaseSettings extends Component {
|
|||
</div>
|
||||
<div className="agingBox">
|
||||
<span>{getLabel(111, "首次查看")}</span>
|
||||
<WeaInputNumber min={0} value={burningAfterReadingMin} viewAttr={2} disabled={!showOperateBtn}
|
||||
<WeaInputNumber min={0} value={burningAfterReadingMin}
|
||||
onChange={burningAfterReadingMin => this.setState({
|
||||
salaryBillViewingLimitSetting: {
|
||||
...salaryBillViewingLimitSetting, burningAfterReadingMin
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import { inject, observer } from "mobx-react";
|
|||
import { getSearchs } from "../../../../util";
|
||||
import * as API from "../../../../apis/payrollFiles";
|
||||
import { salaryFileSearchConditions } from "../../config";
|
||||
import { postFetch } from "../../../../util/request";
|
||||
import { getTaxAgentSelectList } from "../../../../apis/taxAgent";
|
||||
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
const getKey = WeaTools.getKey;
|
||||
|
|
@ -29,7 +29,7 @@ class salaryFileAdvanceSearchPannel extends Component {
|
|||
async componentDidMount() {
|
||||
const [{ data: userStatusList }, { data: taxAgentList }] = await Promise.all([
|
||||
API.commonEnumList({ enumClass: "com.engine.salary.enums.UserStatusEnum" }),
|
||||
postFetch("/api/bs/hrmsalary/taxAgent/listAuth", { filterType: "QUERY_DATA" })
|
||||
getTaxAgentSelectList()
|
||||
]);
|
||||
this.setState({
|
||||
searchConditions: _.map(salaryFileSearchConditions, item => {
|
||||
|
|
@ -44,7 +44,7 @@ class salaryFileAdvanceSearchPannel extends Component {
|
|||
} else if (getKey(child) === "taxAgentIds") {
|
||||
return {
|
||||
...child,
|
||||
options: _.map(taxAgentList, o => ({ key: String(o.id), showname: o.name }))
|
||||
options: _.map(taxAgentList, o => ({ key: o.id, showname: o.content }))
|
||||
};
|
||||
}
|
||||
return { ...child };
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ const APILIST = {
|
|||
cancelSalarySuspension: API.cancelStop //取消停薪
|
||||
};
|
||||
|
||||
@inject("payrollFilesStore")
|
||||
@inject("payrollFilesStore", "taxAgentStore")
|
||||
@observer
|
||||
class Index extends Component {
|
||||
constructor(props) {
|
||||
|
|
@ -100,12 +100,12 @@ class Index extends Component {
|
|||
case "CHANGE-SALARY":
|
||||
case "VIEW":
|
||||
case "EDIT":
|
||||
const { selectedKey: runStatuses } = this.props;
|
||||
const { record: { id: salaryArchiveId, opts } } = params;
|
||||
const { taxAgentStore: { showOperateBtn }, selectedKey: runStatuses } = this.props;
|
||||
const { record: { id: salaryArchiveId } } = params;
|
||||
this.setState({
|
||||
salaryFilesEditSlide: {
|
||||
...this.state.salaryFilesEditSlide, visible: true, salaryArchiveId,
|
||||
runStatuses, showOperateBtn: opts.includes("admin")
|
||||
runStatuses, showOperateBtn
|
||||
}
|
||||
});
|
||||
break;
|
||||
|
|
@ -172,7 +172,7 @@ class Index extends Component {
|
|||
}).catch(() => this.setState({ loading: false }));
|
||||
};
|
||||
getColumns = () => {
|
||||
const { payrollFilesStore: { tableStore } } = this.props;
|
||||
const { payrollFilesStore: { tableStore }, taxAgentStore: { showOperateBtn } } = this.props;
|
||||
const columns = _.map(_.filter(toJS(tableStore.columns), (item) => item.display === "true"), (it, idx) => ({
|
||||
dataIndex: it.dataIndex, title: it.title, align: "left",
|
||||
width: (it.dataIndex === "taxAgentName" || it.dataIndex === "operate") ? 185 : 150,
|
||||
|
|
@ -181,7 +181,7 @@ class Index extends Component {
|
|||
}));
|
||||
if (!_.isEmpty(columns)) {
|
||||
this.postMessageToChild({
|
||||
columns, selectedKey: this.props.selectedKey,
|
||||
columns, showOperateBtn, selectedKey: this.props.selectedKey,
|
||||
showDelSalaryFileBtn: this.props.showDelSalaryFileBtn,
|
||||
dataSource: this.state.dataSource, selectedRowKeys: this.state.selectedRowKeys,
|
||||
showSum: false, pageInfo: this.state.pageInfo
|
||||
|
|
|
|||
|
|
@ -209,7 +209,7 @@ export const renderDropMenuDatas = (selectedKey, showOperateBtn) => {
|
|||
default:
|
||||
break;
|
||||
}
|
||||
return showOperateBtn ? menus : _.filter(menus, o => (o.key === "custom_cols" || o.key === "log"));
|
||||
return showOperateBtn ? menus : _.filter(menus, o => o.key === "custom_cols");
|
||||
};
|
||||
|
||||
export const salaryFileSearchConditions = [
|
||||
|
|
@ -449,7 +449,7 @@ export const salaryFilesConditions = [
|
|||
},
|
||||
{
|
||||
defaultshow: true, title: getLabel(543329, "发薪设置"),
|
||||
col: 1, lanId: 543329,
|
||||
col: 1,lanId: 543329,
|
||||
items: [
|
||||
{
|
||||
colSpan: 1,
|
||||
|
|
@ -480,7 +480,7 @@ export const salaryFilesConditions = [
|
|||
defaultshow: true, title: getLabel(538004, "薪资档案"),
|
||||
titleHelpful: getLabel(543330, "提示:显示已生效的最新数据"),
|
||||
titleHelpfulLanId: 543330,
|
||||
col: 2, salaryFile: true, lanId: 538004,
|
||||
col: 2, salaryFile: true,lanId: 538004,
|
||||
items: []
|
||||
}
|
||||
];
|
||||
|
|
|
|||
|
|
@ -247,16 +247,15 @@ class SalaryFiles extends Component {
|
|||
selectedKey, topTabCount, showSearchAd, isQuery, showDelSalaryFileBtn, showExtEmpsWitch,
|
||||
salaryFileImpDialog, salaryImportTypes, logDialogVisible, filterConditions
|
||||
} = this.state;
|
||||
const { taxAgentStore: { PageAndOptAuth } } = this.props;
|
||||
const { taxAgentStore: { showOperateBtn } } = this.props;
|
||||
const tabs = _.map(tabList, o => ({ ...o, title: getLabel(o.lanId, o.title) }));
|
||||
const admin = PageAndOptAuth.opts.includes("admin");
|
||||
return (
|
||||
<div className="salary-files-wrapper">
|
||||
<WeaReqTop
|
||||
title={getLabel(538004, "薪资档案")} buttonSpace={10} icon={<i className="icon-coms-fa"/>}
|
||||
iconBgcolor="#F14A2D" showDropIcon onDropMenuClick={this.onDropMenuClick}
|
||||
dropMenuDatas={renderDropMenuDatas(selectedKey, admin)}
|
||||
buttons={renderReqBtns(selectedKey, salaryImportTypes, this.handleReqBtnsCLick, admin)}
|
||||
iconBgcolor="#F14A2D" showDropIcon dropMenuDatas={renderDropMenuDatas(selectedKey, showOperateBtn)}
|
||||
onDropMenuClick={this.onDropMenuClick}
|
||||
buttons={renderReqBtns(selectedKey, salaryImportTypes, this.handleReqBtnsCLick, showOperateBtn)}
|
||||
replaceTab={
|
||||
<WeaTab
|
||||
datas={!showExtEmpsWitch ? _.dropRight(tabs) : tabs} autoCalculateWidth
|
||||
|
|
@ -275,7 +274,7 @@ class SalaryFiles extends Component {
|
|||
</div>
|
||||
{/*列表*/}
|
||||
<SalaryFileList isQuery={isQuery} ref={dom => this.salaryFileListRef = dom}
|
||||
selectedKey={selectedKey} showOperateBtn={admin}
|
||||
selectedKey={selectedKey} showOperateBtn={showOperateBtn}
|
||||
showDelSalaryFileBtn={showDelSalaryFileBtn}
|
||||
onChangeTopTabCount={this.queryInsuranceTabTotal}
|
||||
onFilterLog={(type, targetid) => this.onDropMenuClick(type, targetid)}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
* Date: 2023/10/12
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { WeaLocaleProvider, WeaTable } from "ecCom";
|
||||
import { Dropdown, Menu, message, Tag } from "antd";
|
||||
import { getPayrollList } from "../../../../apis/payroll";
|
||||
|
|
@ -12,6 +13,8 @@ import moment from "moment";
|
|||
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
|
||||
@inject("taxAgentStore")
|
||||
@observer
|
||||
class Index extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
|
@ -97,6 +100,7 @@ class Index extends Component {
|
|||
|
||||
render() {
|
||||
const { loading, dataSource, columns, pageInfo } = this.state;
|
||||
const { taxAgentStore: { showOperateBtn } } = this.props;
|
||||
const pagination = {
|
||||
...pageInfo,
|
||||
showTotal: total => `${getLabel(18609, "共")} ${total} ${getLabel(18256, "条")}`,
|
||||
|
|
@ -128,7 +132,7 @@ class Index extends Component {
|
|||
const showGrant = haveBackCalc === 1 && salaryAcctType === 0;
|
||||
return <React.Fragment>
|
||||
{
|
||||
record.opts.includes("admin") &&
|
||||
showOperateBtn &&
|
||||
<a
|
||||
href={`/spa/hrmSalary/static/index.html#/main/hrmSalary/payrollGrant?id=${id}&ackFeedbackStatus=${ackFeedbackStatus}`}
|
||||
style={{ marginRight: 10 }} target="_blank">{getLabel(542702, "发放")}</a>
|
||||
|
|
@ -140,7 +144,7 @@ class Index extends Component {
|
|||
>{getLabel(83110, "查看详情")}</a>
|
||||
}
|
||||
{
|
||||
(!record.opts.includes("admin") || (sendNum === sendTotal && !showGrant)) &&
|
||||
sendNum === sendTotal && !showGrant &&
|
||||
<Dropdown
|
||||
overlay={<Menu onClick={e => this.handleOpts(e, record)}>
|
||||
<Menu.Item key="log">{getLabel(545781, "操作日志")}</Menu.Item>
|
||||
|
|
@ -151,7 +155,7 @@ class Index extends Component {
|
|||
</Dropdown>
|
||||
}
|
||||
{
|
||||
sendNum !== sendTotal && !showGrant && record.opts.includes("admin") &&
|
||||
sendNum !== sendTotal && !showGrant &&
|
||||
<Dropdown
|
||||
overlay={<Menu onClick={e => this.handleOpts(e, record)}>
|
||||
<Menu.Item key="template">{getLabel(543603, "更新模板")}</Menu.Item>
|
||||
|
|
|
|||
|
|
@ -8,10 +8,9 @@ import React, { Component } from "react";
|
|||
import { inject, observer } from "mobx-react";
|
||||
import { WeaDialog, WeaLocaleProvider, WeaTools } from "ecCom";
|
||||
import { Button, message } from "antd";
|
||||
import { postFetch } from "../../../../util/request";
|
||||
import { getSearchs } from "../../../../util";
|
||||
import { copyConditions } from "../conditions";
|
||||
import { duplicatePayroll } from "../../../../apis/payroll";
|
||||
import { duplicatePayroll, getPayrollTemplateLedgerList } from "../../../../apis/payroll";
|
||||
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
const getKey = WeaTools.getKey;
|
||||
|
|
@ -32,30 +31,29 @@ class Index extends Component {
|
|||
}
|
||||
|
||||
getPayrollTemplateLedgerList = (props) => {
|
||||
postFetch("/api/bs/hrmsalary/salarysob/listAuth", { filterType: "ADMIN_DATA" })
|
||||
.then(({ status, data }) => {
|
||||
if (status) {
|
||||
this.setState({
|
||||
conditions: _.map(copyConditions, item => {
|
||||
return {
|
||||
...item, items: _.map(item.items, o => {
|
||||
if (getKey(o) === "salarySobId") {
|
||||
return {
|
||||
...o, label: getLabel(o.lanId, o.label),
|
||||
options: _.map(data, d => ({ key: String(d.id), showname: d.name }))
|
||||
};
|
||||
} else {
|
||||
return { ...o, label: getLabel(o.lanId, o.label) };
|
||||
}
|
||||
})
|
||||
};
|
||||
})
|
||||
}, () => {
|
||||
props.payrollStore.payrollCopyForm.initFormFields(this.state.conditions);
|
||||
props.payrollStore.payrollCopyForm.updateFields({ salarySobId: { value: props.salarySobId } });
|
||||
});
|
||||
}
|
||||
});
|
||||
getPayrollTemplateLedgerList().then(({ status, data }) => {
|
||||
if (status) {
|
||||
this.setState({
|
||||
conditions: _.map(copyConditions, item => {
|
||||
return {
|
||||
...item, items: _.map(item.items, o => {
|
||||
if (getKey(o) === "salarySobId") {
|
||||
return {
|
||||
...o, label: getLabel(o.lanId, o.label),
|
||||
options: _.map(data, d => ({ key: d.id, showname: d.content }))
|
||||
};
|
||||
} else {
|
||||
return { ...o, label: getLabel(o.lanId, o.label) };
|
||||
}
|
||||
})
|
||||
};
|
||||
})
|
||||
}, () => {
|
||||
props.payrollStore.payrollCopyForm.initFormFields(this.state.conditions);
|
||||
props.payrollStore.payrollCopyForm.updateFields({ salarySobId: { value: props.salarySobId } });
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
save = () => {
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
* Date: 2023/10/13
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { WeaLocaleProvider, WeaSelect, WeaTable } from "ecCom";
|
||||
import { Dropdown, Menu, message, Modal } from "antd";
|
||||
import { changePayrollDefaultUse, deletePayroll, getPayrollTemplateList } from "../../../../apis/payroll";
|
||||
|
|
@ -13,6 +14,8 @@ import UpdatePayrollTemplateSlide from "../updatePayrollTemplateSlide";
|
|||
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
|
||||
@inject("taxAgentStore")
|
||||
@observer
|
||||
class Index extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
|
@ -123,7 +126,7 @@ class Index extends Component {
|
|||
|
||||
render() {
|
||||
const { loading, dataSource, columns, pageInfo, copyDialog, tmplSlide, selectedRowKeys } = this.state;
|
||||
const { forceUpdate } = this.props;
|
||||
const { taxAgentStore: { showOperateBtn }, forceUpdate } = this.props;
|
||||
const pagination = {
|
||||
...pageInfo,
|
||||
showTotal: total => `${getLabel(18609, "共")} ${total} ${getLabel(18256, "条")}`,
|
||||
|
|
@ -157,23 +160,23 @@ class Index extends Component {
|
|||
render: (__, record) => {
|
||||
const {} = record;
|
||||
//显示更新模板
|
||||
return record.opts.includes("admin") ? <React.Fragment>
|
||||
<a href="javascript:void(0);" onClick={() => this.handleOpts({ key: "edit" }, record)}
|
||||
style={{ marginRight: 10 }}>{getLabel(501169, "编辑")}</a>
|
||||
<a href="javascript:void(0);" style={{ marginRight: 10 }}
|
||||
onClick={() => this.handleOpts({ key: "copy" }, record)}
|
||||
>{getLabel(77, "复制")}</a>
|
||||
<Dropdown
|
||||
overlay={<Menu onClick={e => this.handleOpts(e, record)}>
|
||||
<Menu.Item key="del">{getLabel(535052, "删除")}</Menu.Item>
|
||||
<Menu.Item key="log">{getLabel(545781, "操作日志")}</Menu.Item>
|
||||
</Menu>
|
||||
}
|
||||
>
|
||||
<a href="javascript:void(0);"><i className="icon-coms-more"/></a>
|
||||
</Dropdown>
|
||||
</React.Fragment> : <a href="javascript:void(0);"
|
||||
onClick={() => this.handleOpts({ key: "view" }, record)}>{getLabel(83110, "查看详情")}</a>;
|
||||
return showOperateBtn ? <React.Fragment>
|
||||
<a href="javascript:void(0);" onClick={() => this.handleOpts({ key: "edit" }, record)}
|
||||
style={{ marginRight: 10 }}>{getLabel(501169, "编辑")}</a>
|
||||
<a href="javascript:void(0);" style={{ marginRight: 10 }}
|
||||
onClick={() => this.handleOpts({ key: "copy" }, record)}
|
||||
>{getLabel(77, "复制")}</a>
|
||||
<Dropdown
|
||||
overlay={<Menu onClick={e => this.handleOpts(e, record)}>
|
||||
<Menu.Item key="del">{getLabel(535052, "删除")}</Menu.Item>
|
||||
<Menu.Item key="log">{getLabel(545781, "操作日志")}</Menu.Item>
|
||||
</Menu>
|
||||
}>
|
||||
<a href="javascript:void(0);"><i className="icon-coms-more"/></a>
|
||||
</Dropdown>
|
||||
</React.Fragment> :
|
||||
<a href="javascript:void(0);"
|
||||
onClick={() => this.handleOpts({ key: "view" }, record)}>{getLabel(83110, "查看详情")}</a>;
|
||||
}
|
||||
}
|
||||
]}
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ class Index extends Component {
|
|||
} = payrollTempForm.getFormParams(),
|
||||
{ ackFeedbackStatus, feedbackStatus, autoAckDays, ...extraFb } = payrollTempFeedbackForm.getFormParams(),
|
||||
{ formData, smsSettingDialog } = this.tmpBaseSetRef.state;
|
||||
if (autoSendStatus !== "1" && emailStatus !== "1" && msgStatus !== "1" && smsStatus !== 1) {
|
||||
if (autoSendStatus !== "1" && emailStatus !== "1" && msgStatus !== "1" && smsStatus !== "1") {
|
||||
message.warning(getLabel(111, "工资单模板至少开启一个发送通道"));
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,9 +39,8 @@ class Index extends Component {
|
|||
}
|
||||
|
||||
renderReqBtns = () => {
|
||||
const { taxAgentStore: { PageAndOptAuth } } = this.props;
|
||||
const { taxAgentStore: { showOperateBtn } } = this.props;
|
||||
const { selectedKey, isRefresh, queryParams } = this.state;
|
||||
const showOperateBtn = PageAndOptAuth.opts.includes("admin");
|
||||
let reqBtns = [];
|
||||
switch (selectedKey) {
|
||||
case "grant":
|
||||
|
|
@ -54,14 +53,14 @@ class Index extends Component {
|
|||
];
|
||||
break;
|
||||
case "template":
|
||||
const loading = this.templateRef ? this.templateRef.state.delLoading : false;
|
||||
const delDisabled = !this.templateRef || _.isEmpty(this.templateRef.state.selectedRowKeys);
|
||||
const loading = this.templateRef ? this.templateRef.wrappedInstance.state.delLoading : false;
|
||||
const delDisabled = !this.templateRef || _.isEmpty(this.templateRef.wrappedInstance.state.selectedRowKeys);
|
||||
const btns = [
|
||||
<Button type="primary" onClick={() => {
|
||||
this.templateRef.handleOpts({ key: "edit" }, {});
|
||||
this.templateRef.wrappedInstance.handleOpts({ key: "edit" }, {});
|
||||
}}>{getLabel(365, "新建")}</Button>,
|
||||
<Button type="ghost" loading={loading} disabled={delDisabled} onClick={() => {
|
||||
this.templateRef.handleOpts({ key: "del" }, {});
|
||||
this.templateRef.wrappedInstance.handleOpts({ key: "del" }, {});
|
||||
}}>{getLabel(32136, "批量删除")}</Button>
|
||||
];
|
||||
const queryBtns = [
|
||||
|
|
@ -75,10 +74,10 @@ class Index extends Component {
|
|||
break;
|
||||
case "watermark":
|
||||
const { baseSetSaveLoading } = this.state;
|
||||
reqBtns = showOperateBtn ? [
|
||||
reqBtns = [
|
||||
<Button type="primary" loading={baseSetSaveLoading}
|
||||
onClick={() => this.baseSetRef.salaryBillBaseSetSave()}>{getLabel(537558, "保存")}</Button>
|
||||
] : [];
|
||||
];
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
@ -86,15 +85,13 @@ class Index extends Component {
|
|||
return reqBtns;
|
||||
};
|
||||
renderContent = () => {
|
||||
const { taxAgentStore: { PageAndOptAuth } } = this.props;
|
||||
const { selectedKey, queryParams, isRefresh } = this.state;
|
||||
const showOperateBtn = PageAndOptAuth.opts.includes("admin");
|
||||
let dom = null;
|
||||
switch (selectedKey) {
|
||||
case "grant":
|
||||
dom = <GrantTableList queryParams={queryParams} isRefresh={isRefresh}
|
||||
onUpdateTemp={(id) => this.setState({ selectedKey: "template" }, () => {
|
||||
this.templateRef.handleOpts({ key: "edit" }, { id });
|
||||
this.templateRef.wrappedInstance.handleOpts({ key: "edit" }, { id });
|
||||
})}
|
||||
onFilterLog={(type, targetid) => this.onDropMenuClick(type, targetid)}
|
||||
/>;
|
||||
|
|
@ -106,7 +103,7 @@ class Index extends Component {
|
|||
break;
|
||||
case "watermark":
|
||||
dom = <TemplateBaseSettings
|
||||
ref={dom => this.baseSetRef = dom} showOperateBtn={showOperateBtn}
|
||||
ref={dom => this.baseSetRef = dom}
|
||||
onChangeLoading={loading => this.setState({ baseSetSaveLoading: loading })}
|
||||
/>;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
}
|
||||
|
||||
.wea-new-top-req {
|
||||
//z-index: 0 !important;
|
||||
z-index: 0 !important;
|
||||
}
|
||||
|
||||
.wea-new-top-req-wapper .wea-new-top-req-title > div:last-child {
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
import React, { Component } from "react";
|
||||
import { Button, message, Modal } from "antd";
|
||||
import {
|
||||
WeaBrowser,
|
||||
WeaCheckbox,
|
||||
WeaDialog,
|
||||
WeaError,
|
||||
|
|
@ -18,7 +19,6 @@ import {
|
|||
WeaTable
|
||||
} from "ecCom";
|
||||
import { reportStatisticsItemSave, statisticsItemChangetab, statisticsItemGetform } from "../../../apis/statistics";
|
||||
import CustomBrowser from "../../../components/CustomBrowser";
|
||||
import "../index.less";
|
||||
|
||||
const { getLabel } = WeaLocaleProvider;
|
||||
|
|
@ -263,22 +263,23 @@ class CustomStatisticsItemsModal extends Component {
|
|||
})
|
||||
});
|
||||
};
|
||||
handleChangeStatisticalItems = (data) => {
|
||||
const itemValue = _.keys(data)[0], datas = _.values(data);
|
||||
handleChangeStatisticalItems = (itemValue, _names, datas) => {
|
||||
const { formData } = this.state;
|
||||
this.setState({
|
||||
formData: {
|
||||
...formData,
|
||||
itemValue,
|
||||
itemValueSpan: _.map(datas, it => it.name).join(","),
|
||||
itemName: datas.length === 1 ? _.map(datas, it => it.name).join(",") : ""
|
||||
itemName: datas.length === 1 ? _.map(datas, it => it.names).join(",") : ""
|
||||
}
|
||||
}, () => {
|
||||
statisticsItemChangetab({ itemId: itemValue }).then(({ status, data }) => {
|
||||
if (status) {
|
||||
const { ruleData } = data;
|
||||
const { columns, data: dataSource } = ruleData;
|
||||
this.setState({ columns, dataSource });
|
||||
this.setState({
|
||||
columns, dataSource
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
@ -367,37 +368,52 @@ class CustomStatisticsItemsModal extends Component {
|
|||
className="statisticItemsWrapper"
|
||||
>
|
||||
<div className="statisticItemsBox">
|
||||
{
|
||||
!_.isEmpty(columns) && <React.Fragment>
|
||||
<WeaFormItem label={getLabel(111, "统计项目")} labelCol={{ span: 6 }} wrapperCol={{ span: 18 }}>
|
||||
<WeaError tipPosition="bottom" ref="proError" error={getLabel(111, "此项必填")}>
|
||||
<CustomBrowser
|
||||
fieldConfig={{
|
||||
viewAttr: !isShare ? 3 : 1,
|
||||
browserConditionParam: {
|
||||
isSingle: true, completeURL: "/api/bs/hrmsalary/salaryitem/listAuth", tableProps: {},
|
||||
replaceDatas: itemValue ? _.map(itemValue.split(","), (it, idx) => ({
|
||||
id: it, name: itemValueSpan.split(",")[idx]
|
||||
})) : [], dataParams: { filterType: "QUERY_DATA" }, searchParamsKey: "", filterByName: true
|
||||
}
|
||||
}} value={itemValue} onCustomChange={this.handleChangeStatisticalItems}/>
|
||||
</WeaError>
|
||||
</WeaFormItem>
|
||||
<WeaFormItem label={getLabel(111, "统计项名称")} labelCol={{ span: 6 }} wrapperCol={{ span: 18 }}>
|
||||
<WeaError tipPosition="bottom" ref="nameError" error={getLabel(111, "此项必填")}>
|
||||
<WeaInput value={itemName} viewAttr={!isShare ? 3 : 1}
|
||||
onChange={itemName => this.setState({ formData: { ...formData, itemName } })}/>
|
||||
</WeaError>
|
||||
</WeaFormItem>
|
||||
<div className="customRuleTableWrapper">
|
||||
<WeaTable
|
||||
dataSource={dataSource}
|
||||
columns={cols}
|
||||
pagination={false}
|
||||
/>
|
||||
</div>
|
||||
</React.Fragment>
|
||||
}
|
||||
<WeaFormItem label={getLabel(111, "统计项目")} labelCol={{ span: 6 }} wrapperCol={{ span: 18 }}>
|
||||
<WeaError tipPosition="bottom" ref="proError" error={getLabel(111, "此项必填")}>
|
||||
<WeaBrowser
|
||||
title={getLabel(111, "统计项目")} type={162} viewAttr={!isShare ? 3 : 1} isSingle
|
||||
value={itemValue}
|
||||
replaceDatas={itemValue ? _.map(itemValue.split(","), (it, idx) => ({
|
||||
id: it,
|
||||
name: itemValueSpan.split(",")[idx]
|
||||
})) : []}
|
||||
completeParams={{
|
||||
type: 162,
|
||||
fielddbtype: "browser.salaryItemBrowser",
|
||||
f_weaver_belongto_usertype: "0"
|
||||
}}
|
||||
conditionDataParams={{
|
||||
type: "browser.salaryItemBrowser",
|
||||
fielddbtype: "browser.salaryItemBrowser",
|
||||
f_weaver_belongto_usertype: "0"
|
||||
}}
|
||||
dataParams={{
|
||||
type: "browser.salaryItemBrowser",
|
||||
f_weaver_belongto_usertype: "0"
|
||||
}}
|
||||
destDataParams={{
|
||||
type: "browser.salaryItemBrowser",
|
||||
f_weaver_belongto_usertype: "0"
|
||||
}}
|
||||
// isMultCheckbox
|
||||
inputStyle={{ width: "100%" }}
|
||||
onChange={this.handleChangeStatisticalItems}
|
||||
/>
|
||||
</WeaError>
|
||||
</WeaFormItem>
|
||||
<WeaFormItem label={getLabel(111, "统计项名称")} labelCol={{ span: 6 }} wrapperCol={{ span: 18 }}>
|
||||
<WeaError tipPosition="bottom" ref="nameError" error={getLabel(111, "此项必填")}>
|
||||
<WeaInput value={itemName} viewAttr={!isShare ? 3 : 1}
|
||||
onChange={itemName => this.setState({ formData: { ...formData, itemName } })}/>
|
||||
</WeaError>
|
||||
</WeaFormItem>
|
||||
<div className="customRuleTableWrapper">
|
||||
<WeaTable
|
||||
dataSource={dataSource}
|
||||
columns={cols}
|
||||
pagination={false}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</WeaDialog>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -30,7 +30,8 @@ import {
|
|||
statisticsItemList
|
||||
} from "../../../apis/statistics";
|
||||
import { commonEnumList } from "../../../apis/ruleconfig";
|
||||
import { postFetch } from "../../../util/request";
|
||||
import { getTaxAgentSelectList } from "../../../apis/taxAgent";
|
||||
import { getSalarysobListAll } from "../../../apis";
|
||||
import { condition } from "./condition";
|
||||
import cs from "classnames";
|
||||
import "../index.less";
|
||||
|
|
@ -69,44 +70,40 @@ class StatisticalMicroSettingsSlide extends Component {
|
|||
}
|
||||
|
||||
getTaxAgentSelectList = async (props) => {
|
||||
const [salarySobList, empStatusList] = await Promise.all([
|
||||
postFetch("/api/bs/hrmsalary/salarysob/listAuth", { filterType: "QUERY_DATA" }),
|
||||
commonEnumList({ enumClass: "com.engine.salary.enums.salarysob.SalaryEmployeeStatusEnum" })
|
||||
]);
|
||||
postFetch("/api/bs/hrmsalary/taxAgent/listAuth", { filterType: "QUERY_DATA" })
|
||||
.then(({ status, data }) => {
|
||||
if (status) {
|
||||
const conditions = _.map(condition, item => {
|
||||
return {
|
||||
...item,
|
||||
items: _.map(item.items, child => {
|
||||
if (getKey(child) === "taxAgent") {
|
||||
return {
|
||||
...child, viewAttr: props.isShare ? 1 : child.viewAttr,
|
||||
options: _.map(data, o => ({ key: String(o.id), showname: o.name }))
|
||||
};
|
||||
} else if (getKey(child) === "salarySob") {
|
||||
return {
|
||||
...child, viewAttr: props.isShare ? 1 : child.viewAttr,
|
||||
options: _.map(salarySobList.data, o => ({ key: String(o.id), showname: o.name }))
|
||||
};
|
||||
} else if (getKey(child) === "status") {
|
||||
return {
|
||||
...child, viewAttr: props.isShare ? 1 : child.viewAttr,
|
||||
options: _.map(empStatusList.data, o => ({ key: o.value.toString(), showname: o.defaultLabel }))
|
||||
};
|
||||
}
|
||||
return { ...child, viewAttr: props.isShare ? 1 : child.viewAttr };
|
||||
})
|
||||
};
|
||||
});
|
||||
this.setState({ conditions }, () => {
|
||||
props.form.initFormFields(this.state.conditions);
|
||||
props.id && this.reportStatisticsGetSearchCondition(props.id);
|
||||
});
|
||||
const [salarySobList, empStatusList] = await Promise.all([getSalarysobListAll(), commonEnumList({ enumClass: "com.engine.salary.enums.salarysob.SalaryEmployeeStatusEnum" })]);
|
||||
getTaxAgentSelectList(props.isShare).then(({ status, data }) => {
|
||||
if (status) {
|
||||
const conditions = _.map(condition, item => {
|
||||
return {
|
||||
...item,
|
||||
items: _.map(item.items, child => {
|
||||
if (getKey(child) === "taxAgent") {
|
||||
return {
|
||||
...child, viewAttr: props.isShare ? 1 : child.viewAttr,
|
||||
options: _.map(data, o => ({ key: o.id, showname: o.content }))
|
||||
};
|
||||
} else if (getKey(child) === "salarySob") {
|
||||
return {
|
||||
...child, viewAttr: props.isShare ? 1 : child.viewAttr,
|
||||
options: _.map(salarySobList.data, o => ({ key: String(o.id), showname: o.name }))
|
||||
};
|
||||
} else if (getKey(child) === "status") {
|
||||
return {
|
||||
...child, viewAttr: props.isShare ? 1 : child.viewAttr,
|
||||
options: _.map(empStatusList.data, o => ({ key: o.value.toString(), showname: o.defaultLabel }))
|
||||
};
|
||||
}
|
||||
return { ...child, viewAttr: props.isShare ? 1 : child.viewAttr };
|
||||
})
|
||||
};
|
||||
});
|
||||
this.setState({ conditions }, () => {
|
||||
props.form.initFormFields(this.state.conditions);
|
||||
props.id && this.reportStatisticsGetSearchCondition(props.id);
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
reportStatisticsGetSearchCondition = (id) => {
|
||||
const { conditions } = this.state;
|
||||
|
|
|
|||
|
|
@ -109,8 +109,7 @@ class Index extends Component {
|
|||
render() {
|
||||
const { report, dimensionList, statisticalPayload } = this.state;
|
||||
const { isShare } = report;
|
||||
const { attendanceStore: { settingForm }, taxAgentStore: { PageAndOptAuth } } = this.props;
|
||||
const showOperateBtn = PageAndOptAuth.opts.includes("admin");
|
||||
const { attendanceStore: { settingForm }, taxAgentStore: { taxAgentOption, showOperateBtn } } = this.props;
|
||||
return (
|
||||
<WeaTop
|
||||
title={getLabel(111, "报表查看")} icon={<i className="icon-coms-fa"/>}
|
||||
|
|
@ -159,7 +158,8 @@ class Index extends Component {
|
|||
</div>
|
||||
{/*统计数据范围及规则设置弹框*/}
|
||||
<StatisticalMicroSettingsSlide
|
||||
{...statisticalPayload} form={settingForm} isShare={isShare}
|
||||
{...statisticalPayload} form={settingForm}
|
||||
taxAgentAdminOption={taxAgentOption} isShare={isShare}
|
||||
onClose={(isRefresh) => this.setState({
|
||||
statisticalPayload: { visible: false, id: "", dimension: "" }
|
||||
}, () => isRefresh && this.leftTabRef.reportStatisticsReportList())}
|
||||
|
|
|
|||
|
|
@ -214,7 +214,6 @@
|
|||
|
||||
.wea-form-item .wea-form-item-wrapper .wea-field-readonly {
|
||||
white-space: pre-wrap !important;
|
||||
line-height: 28px;
|
||||
}
|
||||
|
||||
.wea-slide-modal-title {
|
||||
|
|
|
|||
|
|
@ -1,91 +0,0 @@
|
|||
/*
|
||||
* 角色新增
|
||||
*
|
||||
* @Author: 黎永顺
|
||||
* @Date: 2024/8/5
|
||||
* @Wechat:
|
||||
* @Email: 971387674@qq.com
|
||||
* @description:
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { WeaDialog, WeaLocaleProvider } from "ecCom";
|
||||
import { Button, message } from "antd";
|
||||
import { getSearchs } from "../../../../util";
|
||||
import { roleConditions } from "../conditions";
|
||||
import * as API from "../../../../apis/taxAgent";
|
||||
import "../index.less";
|
||||
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
|
||||
@inject("taxAgentStore")
|
||||
@observer
|
||||
class Index extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
conditions: [], loading: false, formData: { taxAgentIds: [], sobIds: [] }
|
||||
};
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps, nextContext) {
|
||||
if (nextProps.visible !== this.props.visible && nextProps.visible) {
|
||||
this.setState({
|
||||
conditions: _.map(roleConditions, item => ({
|
||||
...item, items: _.map(item.items, o => ({ ...o, label: getLabel(o.lanId, o.label) }))
|
||||
}))
|
||||
}, () => nextProps.taxAgentStore.roleForm.initFormFields(this.state.conditions));
|
||||
}
|
||||
if (nextProps.visible !== this.props.visible && !nextProps.visible) nextProps.taxAgentStore.initRoleForm();
|
||||
}
|
||||
|
||||
save = (isSetting) => {
|
||||
const { taxAgentStore: { roleForm } } = this.props;
|
||||
const { formData } = this.state;
|
||||
roleForm.validateForm().then(f => {
|
||||
if (f.isValid) {
|
||||
const payload = roleForm.getFormParams();
|
||||
this.setState({ loading: true });
|
||||
API.saveAuthRole({ ...payload, ...formData }).then(({ status, data, errormsg }) => {
|
||||
this.setState({ loading: false });
|
||||
if (status) {
|
||||
message.success(getLabel(111, "操作成功!"));
|
||||
this.props.onCancel(() => this.props.onSearch());
|
||||
isSetting && this.props.showRoleSetDialog({
|
||||
id: data, name: payload.name, selectedKey: "auth.MemberTargetTypeEnum"
|
||||
});
|
||||
} else {
|
||||
message.error(errormsg);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
f.showErrors();
|
||||
}
|
||||
});
|
||||
};
|
||||
handleFormChange = (val) => {
|
||||
const key = _.keys(val)[0];
|
||||
if (key === "taxAgentIds" || key === "sobIds") {
|
||||
this.setState({ formData: { ...this.state.formData, ...val } });
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const { conditions, loading, roleSetDialog } = this.state;
|
||||
const { taxAgentStore: { roleForm } } = this.props;
|
||||
return (
|
||||
<WeaDialog
|
||||
{...this.props} style={{ width: 520 }} initLoadCss title={getLabel(111, "添加业务线")} className="role-dialog"
|
||||
buttons={[
|
||||
<Button type="primary" loading={loading} onClick={() => this.save()}>{getLabel(111, "保存")}</Button>,
|
||||
<Button type="primary" loading={loading}
|
||||
onClick={() => this.save(true)}>{getLabel(111, "保存并进入详细设置")}</Button>
|
||||
]}
|
||||
>
|
||||
<div className="form-dialog-layout">{getSearchs(roleForm, conditions, 1, false, this.handleFormChange)}</div>
|
||||
</WeaDialog>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default Index;
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
/*
|
||||
* 业务线管理
|
||||
* 高级搜索
|
||||
* @Author: 黎永顺
|
||||
* @Date: 2024/9/24
|
||||
* @Wechat:
|
||||
* @Email: 971387674@qq.com
|
||||
* @description:
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { Button } from "antd";
|
||||
import { WeaInputSearch, WeaLocaleProvider } from "ecCom";
|
||||
import "./index.less";
|
||||
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
|
||||
@inject("taxAgentStore")
|
||||
@observer
|
||||
class Index extends Component {
|
||||
render() {
|
||||
const { taxAgentStore: { advanceForm } } = this.props;
|
||||
return (
|
||||
<div className="role-advance-search">
|
||||
<WeaInputSearch value={advanceForm.getFormParams().name}
|
||||
onChange={v => advanceForm.updateFields({ name: v })}
|
||||
onSearch={this.props.onAdvanceSearch}
|
||||
/>
|
||||
<Button type="ghost" className="wea-advanced-search text-elli"
|
||||
onClick={this.props.onOpenAdvanceSearch}>{getLabel(545754, "高级搜索")}</Button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default Index;
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
.role-advance-search {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
|
||||
.wea-advanced-search {
|
||||
top: 0;
|
||||
left: -1px;
|
||||
height: 28px;
|
||||
line-height: 1;
|
||||
border-radius: 0;
|
||||
position: relative;
|
||||
color: #474747;
|
||||
padding: 4px 15px;
|
||||
}
|
||||
|
||||
.wea-advanced-search:hover {
|
||||
border: 1px solid #dadada;
|
||||
color: #474747;
|
||||
}
|
||||
|
||||
.text-elli {
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,115 +0,0 @@
|
|||
/*
|
||||
* 业务线管理
|
||||
* 高级搜索面板
|
||||
* @Author: 黎永顺
|
||||
* @Date: 2024/9/24
|
||||
* @Wechat:
|
||||
* @Email: 971387674@qq.com
|
||||
* @description:
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { WeaLocaleProvider, WeaTools } from "ecCom";
|
||||
import { roleSearchConditions } from "../conditions";
|
||||
import { getAuthOptTree } from "../../../../apis/taxAgent";
|
||||
import { getSearchs } from "../../../../util";
|
||||
import { Button } from "antd";
|
||||
|
||||
const getKey = WeaTools.getKey;
|
||||
const getLabel = WeaLocaleProvider.getLabel;
|
||||
|
||||
@inject("taxAgentStore")
|
||||
@observer
|
||||
class AdvanceSearchPannel extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = { conditions: [] };
|
||||
}
|
||||
|
||||
async componentDidMount() {
|
||||
const { taxAgentStore: { advanceForm } } = this.props;
|
||||
const { data } = await getAuthOptTree();
|
||||
this.setState({
|
||||
conditions: _.map(roleSearchConditions, item => ({
|
||||
...item, title: getLabel(item.lanId, item.title),
|
||||
items: _.map(item.items, o => {
|
||||
if (getKey(o) === "opts") {
|
||||
return {
|
||||
...o, label: getLabel(o.lanId, o.label),
|
||||
options: _.map(o.options, k => ({ ...k, showname: getLabel(k.lanId, k.showname) }))
|
||||
};
|
||||
} else if (getKey(o) === "pages") {
|
||||
return {
|
||||
...o, label: getLabel(o.lanId, o.label),
|
||||
treeData: [{
|
||||
label: data.name, value: data.key, key: data.key, id: data.key, name: data.name,
|
||||
children: _.map(data.modules, i => ({
|
||||
label: i.name, value: `${data.key}-${i.key}`, key: `${data.key}-${i.key}`,
|
||||
id: `${data.key}-${i.key}`, name: i.name,
|
||||
children: _.map(i.pages, k => ({
|
||||
label: k.name, value: k.key, key: k.key, selectable: true,
|
||||
id: k.key, name: k.name
|
||||
}))
|
||||
}))
|
||||
}]
|
||||
};
|
||||
}
|
||||
return { ...o, label: getLabel(o.lanId, o.label) };
|
||||
})
|
||||
}))
|
||||
}, () => advanceForm.initFormFields(this.state.conditions));
|
||||
}
|
||||
|
||||
handleReset = () => {
|
||||
const { taxAgentStore: { advanceForm } } = this.props;
|
||||
this.setState({
|
||||
conditions: _.map(this.state.conditions, item => ({
|
||||
...item, items: _.map(item.items, o => ({ ...o, value: "" }))
|
||||
}))
|
||||
}, () => advanceForm.resetForm());
|
||||
};
|
||||
handleFormChange = (val) => {
|
||||
const key = _.keys(val)[0];
|
||||
const { taxAgentStore: { advanceForm } } = this.props;
|
||||
if (key === "taxAgentIds" || key === "sobIds" || key === "pages") {
|
||||
this.setState({
|
||||
conditions: _.map(this.state.conditions, item => ({
|
||||
...item, items: _.map(item.items, o => {
|
||||
if (key === getKey(o)) {
|
||||
return { ...o, value: _.map(val[key], o => o.id).join(",") };
|
||||
}
|
||||
return { ...o, value: advanceForm.getFormParams()[getKey(o)] };
|
||||
})
|
||||
}))
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const { taxAgentStore: { advanceForm } } = this.props;
|
||||
const { conditions } = this.state;
|
||||
return (
|
||||
<React.Fragment>
|
||||
<div className="wea-advanced-searchsAd">
|
||||
{getSearchs(advanceForm, conditions, 2, false, this.handleFormChange)}
|
||||
</div>
|
||||
<div className="wea-search-buttons">
|
||||
<div style={{ textAlign: "center" }}>
|
||||
<span style={{ marginLeft: 15 }}>
|
||||
<Button type="primary" onClick={this.props.onAdSearch}>{getLabel(388113, "搜索")}</Button>
|
||||
</span>
|
||||
<span style={{ marginLeft: 15 }}>
|
||||
<Button type="ghost" onClick={this.handleReset}>{getLabel(2022, "重置")}</Button>
|
||||
</span>
|
||||
<span style={{ marginLeft: 15 }}>
|
||||
<Button type="ghost" onClick={this.props.onCancel}>{getLabel(31129, "取消")}</Button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default AdvanceSearchPannel;
|
||||
|
||||
|
|
@ -1,261 +0,0 @@
|
|||
export const roleConditions = [
|
||||
{
|
||||
items: [
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
domkey: ["name"],
|
||||
fieldcol: 16,
|
||||
label: "名称",
|
||||
lanId: 111,
|
||||
labelcol: 6,
|
||||
value: "",
|
||||
rules: "required|string",
|
||||
viewAttr: 3
|
||||
},
|
||||
{
|
||||
browserConditionParam: {
|
||||
completeURL: "/api/bs/hrmsalary/taxAgent/listAuth",
|
||||
dataParams: { filterType: "QUERY_DATA" },
|
||||
filterByName: true,
|
||||
tableProps: {},
|
||||
isSingle: false,
|
||||
searchParamsKey: "name"
|
||||
},
|
||||
conditionType: "CUSTOMBROWSER",
|
||||
domkey: ["taxAgentIds"],
|
||||
fieldcol: 16,
|
||||
label: "个税扣缴义务人",
|
||||
lanId: 111,
|
||||
labelcol: 6,
|
||||
rules: "required|string",
|
||||
viewAttr: 3
|
||||
},
|
||||
{
|
||||
browserConditionParam: {
|
||||
completeURL: "/api/bs/hrmsalary/salarysob/listAuth",
|
||||
dataParams: { filterType: "QUERY_DATA" },
|
||||
filterByName: true,
|
||||
tableProps: {},
|
||||
isSingle: false,
|
||||
searchParamsKey: "name"
|
||||
},
|
||||
conditionType: "CUSTOMBROWSER",
|
||||
domkey: ["sobIds"],
|
||||
fieldcol: 16,
|
||||
label: "薪资账套",
|
||||
lanId: 111,
|
||||
labelcol: 6,
|
||||
rules: "required|string",
|
||||
viewAttr: 3
|
||||
},
|
||||
{
|
||||
conditionType: "TEXTAREA",
|
||||
domkey: ["description"],
|
||||
fieldcol: 16,
|
||||
label: "描述",
|
||||
lanId: 111,
|
||||
labelcol: 6,
|
||||
value: "",
|
||||
viewAttr: 2
|
||||
}
|
||||
],
|
||||
defaultshow: true,
|
||||
title: ""
|
||||
}
|
||||
];
|
||||
export const roleOperatorConditions = [
|
||||
{
|
||||
items: [
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
domkey: ["targetTypeName"],
|
||||
fieldcol: 18,
|
||||
label: "对象类型",
|
||||
lanId: 111,
|
||||
labelcol: 6,
|
||||
value: "",
|
||||
viewAttr: 1
|
||||
},
|
||||
{
|
||||
conditionType: "BROWSER",
|
||||
domkey: ["targetName"],
|
||||
fieldcol: 18,
|
||||
label: "对象",
|
||||
lanId: 111,
|
||||
labelcol: 6,
|
||||
value: "",
|
||||
rules: "required",
|
||||
viewAttr: 3
|
||||
},
|
||||
{
|
||||
conditionType: "SELECT",
|
||||
domkey: ["link"],
|
||||
fieldcol: 18,
|
||||
label: "连接符",
|
||||
lanId: 111,
|
||||
labelcol: 6,
|
||||
value: "",
|
||||
rules: "required|string",
|
||||
viewAttr: 3
|
||||
},
|
||||
{
|
||||
conditionType: "INPUTNUMBER",
|
||||
domkey: ["sortedIndex"],
|
||||
fieldcol: 18,
|
||||
label: "批次",
|
||||
lanId: 111,
|
||||
labelcol: 6,
|
||||
value: "",
|
||||
rules: "required",
|
||||
viewAttr: 3
|
||||
}
|
||||
],
|
||||
defaultshow: true,
|
||||
title: ""
|
||||
}
|
||||
];
|
||||
export const roleSearchConditions = [
|
||||
{
|
||||
items: [
|
||||
{
|
||||
conditionType: "INPUT",
|
||||
domkey: ["name"],
|
||||
fieldcol: 16,
|
||||
label: "名称",
|
||||
lanId: 111,
|
||||
labelcol: 8,
|
||||
value: "",
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
browserConditionParam: {
|
||||
completeURL: "/api/bs/hrmsalary/taxAgent/listAuth",
|
||||
dataParams: { filterType: "QUERY_DATA" },
|
||||
filterByName: true,
|
||||
tableProps: {},
|
||||
isSingle: false,
|
||||
searchParamsKey: "name"
|
||||
},
|
||||
conditionType: "CUSTOMBROWSER",
|
||||
domkey: ["taxAgentIds"],
|
||||
fieldcol: 16,
|
||||
label: "个税扣缴义务人",
|
||||
lanId: 111,
|
||||
labelcol: 8,
|
||||
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: [],
|
||||
type: "17"
|
||||
},
|
||||
conditionType: "BROWSER",
|
||||
domkey: ["roleEmpIds"],
|
||||
fieldcol: 16,
|
||||
isQuickSearch: false,
|
||||
label: "成员",
|
||||
lanId: 111,
|
||||
labelcol: 8,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
browserConditionParam: {
|
||||
completeURL: "/api/bs/hrmsalary/salarysob/listAuth",
|
||||
dataParams: { filterType: "QUERY_DATA" },
|
||||
filterByName: true,
|
||||
tableProps: {},
|
||||
isSingle: false,
|
||||
searchParamsKey: "name"
|
||||
},
|
||||
conditionType: "CUSTOMBROWSER",
|
||||
domkey: ["sobIds"],
|
||||
fieldcol: 16,
|
||||
label: "薪资账套",
|
||||
lanId: 111,
|
||||
labelcol: 8,
|
||||
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: [],
|
||||
type: "17"
|
||||
},
|
||||
conditionType: "BROWSER",
|
||||
domkey: ["employeeIds"],
|
||||
fieldcol: 16,
|
||||
isQuickSearch: false,
|
||||
label: "数据",
|
||||
lanId: 111,
|
||||
labelcol: 8,
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
conditionType: "SELECT",
|
||||
domkey: ["opts"],
|
||||
fieldcol: 16,
|
||||
label: "权限项",
|
||||
lanId: 111,
|
||||
labelcol: 8,
|
||||
multiple: true,
|
||||
options: [
|
||||
{ key: "query", showname: "查询", lanId: 111 },
|
||||
{ key: "admin", showname: "管理", lanId: 111 }
|
||||
],
|
||||
value: "",
|
||||
viewAttr: 2
|
||||
},
|
||||
{
|
||||
browserConditionParam: {
|
||||
completeURL: "",
|
||||
dataParams: { filterType: "" },
|
||||
filterByName: true,
|
||||
tableProps: {},
|
||||
isSingle: false,
|
||||
treeSelect: true,
|
||||
searchParamsKey: "name"
|
||||
},
|
||||
conditionType: "CUSTOMBROWSER",
|
||||
domkey: ["pages"],
|
||||
fieldcol: 16,
|
||||
label: "页面",
|
||||
lanId: 111,
|
||||
labelcol: 8,
|
||||
treeData: [],
|
||||
value: "",
|
||||
viewAttr: 2
|
||||
}
|
||||
],
|
||||
defaultshow: true,
|
||||
title: "基本信息",
|
||||
lanId: 111,
|
||||
col: 2
|
||||
}
|
||||
];
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue