diff --git a/pc4mobx/hrmSalary/components/custom-title/weaReqTitle/index.js b/pc4mobx/hrmSalary/components/custom-title/weaReqTitle/index.js
index 69766076..7ff800ce 100644
--- a/pc4mobx/hrmSalary/components/custom-title/weaReqTitle/index.js
+++ b/pc4mobx/hrmSalary/components/custom-title/weaReqTitle/index.js
@@ -7,7 +7,7 @@ class Index extends Component {
render() {
return (
} iconBgcolor="#F14A2D"
+ title={this.props.title || getLabel(111, "编辑账套")} icon={} iconBgcolor="#F14A2D"
showDropIcon={false} tabDatas={this.props.tabDatas} {...this.props}
/>
);
diff --git a/pc4mobx/hrmSalary/components/custom-title/weaTopTitle/index.js b/pc4mobx/hrmSalary/components/custom-title/weaTopTitle/index.js
index d265c8eb..0e90c2e2 100644
--- a/pc4mobx/hrmSalary/components/custom-title/weaTopTitle/index.js
+++ b/pc4mobx/hrmSalary/components/custom-title/weaTopTitle/index.js
@@ -6,7 +6,7 @@ const getLabel = WeaLocaleProvider.getLabel;
class Index extends Component {
render() {
return (
- }
+ }
iconBgcolor="#F14A2D" {...this.props}/>
);
}
diff --git a/pc4mobx/hrmSalary/index.js b/pc4mobx/hrmSalary/index.js
index 7b5cf863..96d4af12 100644
--- a/pc4mobx/hrmSalary/index.js
+++ b/pc4mobx/hrmSalary/index.js
@@ -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/taxAgent";
+import TaxAgent from "./pages/salary/taxAgent";
import CalculateDetail from "./pages/calculateDetail";
import PlaceOnFileDetail from "./pages/calculateDetail/placeOnFileDetail";
import CompareDetail from "./pages/calculateDetail/compareDetail";
diff --git a/pc4mobx/hrmSalary/pages/roleManagement/index.less b/pc4mobx/hrmSalary/pages/roleManagement/index.less
index e911681c..8de15ad5 100644
--- a/pc4mobx/hrmSalary/pages/roleManagement/index.less
+++ b/pc4mobx/hrmSalary/pages/roleManagement/index.less
@@ -2,7 +2,7 @@
.rolemanagement-content {
height: 100%;
overflow-y: auto;
- padding: 16px 16px 0;
+ padding: 8px 16px 0;
background: rgb(246, 246, 246);
.wea-new-table {
diff --git a/pc4mobx/hrmSalary/pages/salary/components/baseSettings.js b/pc4mobx/hrmSalary/pages/salary/components/baseSettings.js
new file mode 100644
index 00000000..a534feb0
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/salary/components/baseSettings.js
@@ -0,0 +1,48 @@
+/*
+ * Author: 黎永顺
+ * name: 基础设置
+ * Description:
+ * Date: 2022/11/29
+ */
+import React, { Component } from "react";
+import { inject, observer } from "mobx-react";
+import { decentralizationConditions, editConditions } from "../../taxAgent/editConditions";
+import { getSearchs } from "../../../util";
+
+@inject("taxAgentStore")
+@observer
+class BaseSettings extends Component {
+
+ componentDidMount() {
+
+ }
+
+ render() {
+ const { taxAgentStore: { salarytaxAgentForm }, decentralization, isChief } = this.props;
+ return (
+
+ {
+ decentralization === "0" ?
+ getSearchs(salarytaxAgentForm, convertConditon(decentralizationConditions, !isChief), 1, false) :
+ getSearchs(salarytaxAgentForm, convertConditon(editConditions, !isChief), 1, false)
+ }
+
+ );
+ }
+}
+
+export default BaseSettings;
+
+export const convertConditon = (condition, bool) => {
+ return _.map(condition, item => {
+ return {
+ ...item,
+ items: _.map(item.items, child => {
+ return {
+ ...child,
+ viewAttr: bool ? 1 : child.viewAttr
+ };
+ })
+ };
+ });
+};
diff --git a/pc4mobx/hrmSalary/pages/salary/components/comHint.js b/pc4mobx/hrmSalary/pages/salary/components/comHint.js
new file mode 100644
index 00000000..aea13257
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/salary/components/comHint.js
@@ -0,0 +1,46 @@
+/*
+ * Author: 黎永顺
+ * name: 个税扣缴义务人小提示组件
+ * Description:
+ * Date: 2022/11/22
+ */
+import React, { Component } from "react";
+import { WeaLocaleProvider } from "ecCom";
+import "./index.less";
+
+const { getLabel } = WeaLocaleProvider;
+
+class ComHint extends Component {
+ /*
+ * Author: 黎永顺
+ * Description: 提示语注释
+ * Params: isChief=总管理员
+ * Date: 2022/11/22
+ */
+ renderTips = () => {
+ const { isChief = true } = this.props;
+ if (isChief) {
+ return [
+ {getLabel(111, "1、个税扣缴义务人与档案中的个税扣缴义务人匹配,修改个税扣缴义务人名称,薪资档案的个税扣缴义务人数据同步更新;")}
,
+ {getLabel(111, "2、删除个税扣缴义务人需先确认档案里无人员使用该个税扣缴义务人,否则不予删除;")}
,
+ {getLabel(111, "3、只有薪酬总管理员能够操作个税扣缴义务人的增减和开启/关闭分权;")}
,
+ {getLabel(111, "4、开启分权,需维护个税扣缴义务人的管理员;当前总管理员默认有管理员的权限;")}
+ ];
+ } else {
+ return [];
+ }
+ };
+
+ render() {
+ return (
+
+
{getLabel(111, "小提示")}
+
+ {this.renderTips()}
+
+
+ );
+ }
+}
+
+export default ComHint;
diff --git a/pc4mobx/hrmSalary/pages/salary/components/constants.js b/pc4mobx/hrmSalary/pages/salary/components/constants.js
new file mode 100644
index 00000000..dc2422a0
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/salary/components/constants.js
@@ -0,0 +1,440 @@
+export const fieldList = [
+ {
+ key: "name",
+ label: "名称",
+ lanId: 33439,
+ type: "TEXT",
+ viewAttr: 1
+ },
+ {
+ key: "taxCode",
+ label: "税号",
+ lanId: 111,
+ type: "TEXT",
+ viewAttr: 3
+ },
+ {
+ key: "city",
+ label: "报税所属区域",
+ lanId: 111,
+ type: "SELECT",
+ viewAttr: 3
+ },
+ {
+ key: "areaCode",
+ label: "行政区划代码",
+ lanId: 111,
+ type: "TEXT",
+ viewAttr: 3
+ },
+ {
+ key: "passwordType",
+ label: "密码校验类型",
+ lanId: 111,
+ type: "RADIO",
+ viewAttr: 3,
+ options: [
+ {
+ key: "TAX_NET_PASSWORD",
+ showname: "个税网报密码",
+ lanId: 111
+ },
+ {
+ key: "REAL_NAME_PASSWORD",
+ showname: "实名账号密码",
+ lanId: 111
+ }
+ ]
+ },
+ {
+ key: "account",
+ label: "实名账号",
+ lanId: 111,
+ type: "TEXT",
+ viewAttr: 3
+ },
+ {
+ key: "realNamePassword",
+ label: "实名账号密码",
+ lanId: 111,
+ type: "PASSWORD",
+ viewAttr: 3
+ },
+ {
+ key: "netPassword",
+ label: "个税网报密码",
+ lanId: 111,
+ type: "PASSWORD",
+ viewAttr: 3
+ },
+ {
+ key: "taxRegistrationNumber",
+ label: "登记序号",
+ type: "TEXT",
+ lanId: 111,
+ viewAttr: 1
+ },
+ {
+ key: "departmentCode",
+ label: "部门编码",
+ lanId: 111,
+ type: "TEXT",
+ viewAttr: 1
+ },
+ {
+ key: "checkStatus",
+ label: "报税信息验证状态",
+ lanId: 111,
+ type: "TEXT",
+ viewAttr: 1
+ }
+];
+
+export const taxFillCondition = [
+ {
+ items: [
+ {
+ colSpan: 1,
+ conditionType: "INPUT",
+ domkey: ["taxAgentName"],
+ fieldcol: 14,
+ label: "个税扣缴义务人",
+ lanId: 537996,
+ labelcol: 6,
+ value: "",
+ viewAttr: 1
+ },
+ {
+ colSpan: 1,
+ conditionType: "INPUT",
+ domkey: ["taxRegistrationNumber"],
+ fieldcol: 14,
+ label: "登记序号",
+ lanId: 545138,
+ labelcol: 6,
+ value: "",
+ viewAttr: 1
+ },
+ {
+ colSpan: 1,
+ conditionType: "INPUT",
+ domkey: ["taxpayerStatus"],
+ fieldcol: 14,
+ label: "纳税人状态",
+ lanId: 545139,
+ labelcol: 6,
+ value: "",
+ viewAttr: 1
+ },
+ {
+ colSpan: 1,
+ conditionType: "INPUT",
+ domkey: ["legalPersonName"],
+ fieldcol: 14,
+ label: "法人姓名",
+ lanId: 545140,
+ labelcol: 6,
+ value: "",
+ viewAttr: 1
+ },
+ {
+ colSpan: 1,
+ conditionType: "INPUT",
+ domkey: ["mobile"],
+ fieldcol: 14,
+ label: "联系电话",
+ lanId: 545141,
+ labelcol: 6,
+ value: "",
+ viewAttr: 1
+ },
+ {
+ colSpan: 1,
+ conditionType: "INPUT",
+ domkey: ["businessAddress"],
+ fieldcol: 14,
+ label: "生产经营地址",
+ lanId: 545142,
+ labelcol: 6,
+ value: "",
+ viewAttr: 1
+ },
+ {
+ colSpan: 1,
+ conditionType: "INPUT",
+ domkey: ["industryName"],
+ fieldcol: 14,
+ label: "行业名称",
+ lanId: 545143,
+ labelcol: 6,
+ value: "",
+ viewAttr: 1
+ },
+ {
+ colSpan: 1,
+ conditionType: "INPUT",
+ domkey: ["taxAuthorities"],
+ fieldcol: 14,
+ label: "主管税务机关",
+ lanId: 545144,
+ labelcol: 6,
+ value: "",
+ viewAttr: 1
+ },
+ {
+ colSpan: 1,
+ conditionType: "INPUT",
+ domkey: ["taxBranch"],
+ fieldcol: 14,
+ label: "主管税务科所",
+ lanId: 545145,
+ labelcol: 6,
+ value: "",
+ viewAttr: 1
+ },
+ {
+ colSpan: 1,
+ conditionType: "INPUT",
+ domkey: ["divideFiling"],
+ fieldcol: 14,
+ label: "是否分部门备案",
+ lanId: 111,
+ labelcol: 6,
+ value: "",
+ viewAttr: 1
+ }
+ ],
+ defaultshow: true
+ }
+];
+export const deptFillCondition = [
+ {
+ items: [
+ {
+ colSpan: 1,
+ conditionType: "INPUT",
+ domkey: ["departmentName"],
+ fieldcol: 14,
+ label: "部门名称",
+ lanId: 536641,
+ labelcol: 6,
+ value: "",
+ rules: "required|string",
+ viewAttr: 3
+ },
+ {
+ colSpan: 1,
+ conditionType: "INPUT",
+ domkey: ["departmentCode"],
+ fieldcol: 14,
+ label: "部门编码",
+ lanId: 111,
+ labelcol: 6,
+ value: "",
+ rules: "required|string",
+ viewAttr: 3
+ }
+ ],
+ defaultshow: true
+ }
+];
+export const taxFillColumns = [
+ {
+ dataIndex: "taxCode",
+ title: "税号",
+ titleId: "",
+ fixed: "left"
+ },
+ {
+ dataIndex: "taxAgentName",
+ title: "个税扣缴义务人",
+ titleId: "537996"
+ },
+ {
+ dataIndex: "taxRegistrationNumber",
+ title: "登记序号",
+ titleId: "545138"
+ },
+ {
+ dataIndex: "taxpayerStatus",
+ title: "纳税人状态",
+ titleId: "545139"
+ },
+ {
+ dataIndex: "taxAuthorities",
+ title: "主管税务机关",
+ titleId: "545144"
+ },
+ {
+ dataIndex: "taxBranch",
+ title: "主管税务科所",
+ titleId: "545145"
+ },
+ {
+ dataIndex: "businessAddress",
+ title: "生产经营地址",
+ titleId: "545142"
+ },
+ {
+ dataIndex: "industryName",
+ title: "行业名称",
+ titleId: "545143"
+ },
+ {
+ dataIndex: "legalPersonName",
+ title: "法人姓名",
+ titleId: "545140"
+ },
+ {
+ dataIndex: "mobile",
+ title: "联系电话",
+ titleId: "545141"
+ }
+];
+export const personScopeConditions = [
+ {
+ items: [
+ {
+ conditionType: "SELECT_LINKAGE",
+ domkey: ["targetType"],
+ fieldcol: 18,
+ label: "对象类型",
+ lanId: 111,
+ labelcol: 6,
+ options: [],
+ viewAttr: 3,
+ rules: "selectLinkageRequired",
+ selectLinkageDatas: {}
+ },
+ {
+ conditionType: "SELECT",
+ domkey: ["employeeStatus"],
+ fieldcol: 18,
+ label: "选择员工状态",
+ lanId: 111,
+ labelcol: 6,
+ value: "",
+ detailtype: "2",
+ rules: "required",
+ viewAttr: 3
+ },
+ ],
+ defaultshow: true
+ }
+];
+export const scopeSelectLinkageDatas = {
+ EMPLOYEE:{
+ browserConditionParam: {
+ completeParams: {},
+ dataParams: {},
+ hasAddBtn: false,
+ hasAdvanceSerach: true,
+ isAutoComplete: 1,
+ isDetail: 0,
+ isMultCheckbox: false,
+ isSingle: false,
+ pageSize: 10,
+ linkUrl: "",
+ type: "17",
+ viewAttr: 3,
+ rules:'required',
+ title: ""
+ },
+ conditionType: "BROWSER",
+ domkey: ["target"],
+ fieldcol: 24,
+ label: "",
+ labelcol: 0,
+ value: "",
+ rules: "required",
+ viewAttr: 3
+ },
+ DEPT:{
+ browserConditionParam: {
+ completeParams: {},
+ dataParams: {},
+ hasAddBtn: false,
+ hasAdvanceSerach: true,
+ isAutoComplete: 1,
+ isDetail: 0,
+ isMultCheckbox: false,
+ isSingle: false,
+ pageSize: 10,
+ linkUrl: "",
+ type: "57",
+ viewAttr: 3,
+ rules:'required',
+ title: ""
+ },
+ conditionType: "BROWSER",
+ domkey: ["target"],
+ fieldcol: 24,
+ label: "",
+ labelcol: 0,
+ value: "",
+ rules: "required",
+ viewAttr: 3
+ },
+ SUBCOMPANY:{
+ browserConditionParam: {
+ completeParams: {},
+ dataParams: {},
+ hasAddBtn: false,
+ hasAdvanceSerach: true,
+ isAutoComplete: 1,
+ isDetail: 0,
+ isMultCheckbox: false,
+ isSingle: false,
+ pageSize: 10,
+ linkUrl: "",
+ type: "164",
+ viewAttr: 3,
+ rules:'required',
+ title: ""
+ },
+ conditionType: "BROWSER",
+ domkey: ["target"],
+ fieldcol: 24,
+ label: "",
+ labelcol: 0,
+ value: "",
+ rules: "required",
+ viewAttr: 3
+ },
+ POSITION:{
+ browserConditionParam: {
+ completeParams: {},
+ dataParams: {},
+ hasAddBtn: false,
+ hasAdvanceSerach: true,
+ isAutoComplete: 1,
+ isDetail: 0,
+ isMultCheckbox: false,
+ isSingle: false,
+ pageSize: 10,
+ linkUrl: "",
+ type: "278",
+ viewAttr: 3,
+ rules:'required',
+ title: ""
+ },
+ conditionType: "BROWSER",
+ domkey: ["target"],
+ fieldcol: 24,
+ label: "",
+ labelcol: 0,
+ value: "",
+ rules: "required",
+ viewAttr: 3
+ },
+ SQL: {
+ conditionType: "TEXTAREA",
+ domkey: ["target"],
+ fieldcol: 24,
+ label: "",
+ labelcol: 0,
+ value: "",
+ rules: "required",
+ viewAttr: 3
+ }
+};
diff --git a/pc4mobx/hrmSalary/pages/salary/components/index.less b/pc4mobx/hrmSalary/pages/salary/components/index.less
new file mode 100644
index 00000000..9eed4669
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/salary/components/index.less
@@ -0,0 +1,165 @@
+.taxAgentSlideContent {
+ height: 100%;
+ background: #F6F6F6;
+
+ .ant-steps {
+ margin: 0 0 20px 0 !important;
+ padding-top: 20px;
+ }
+
+ .personal-scope {
+ padding: 8px 16px;
+ height: 100%;
+
+ .wea-tab, .wea-new-table {
+ background: #FFF;
+ }
+
+ .icon-refresh {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 20px;
+ height: 20px;
+ color: #fff;
+ background: #55a1f8;
+ cursor: pointer;
+ border-radius: 3px;
+ }
+ }
+
+ .baseSettingWrapper, .taxDeclarationInfoWrapper {
+ padding: 12px 12px 12px 20px;
+
+ .wea-search-group {
+ padding: 0;
+ border: 1px solid #e5e5e5;
+ border-bottom: none;
+
+ .wea-content {
+ padding: 0;
+
+ .wea-form-cell, .wea-form-item {
+ border-bottom: 1px solid #e5e5e5;
+ padding: 5px 10px 5px 30px;
+
+ .wea-form-item {
+ padding: 0 !important;
+ border-bottom: none !important;
+ }
+ }
+ }
+ }
+ }
+}
+
+.comHint {
+ width: 100%;
+ margin: 16px 0;
+ border: 1px solid #e5e5e5;
+ background: #FFF;
+
+ .hintHeader {
+ background: #f6f6f6;
+ height: 40px;
+ border-bottom: 1px solid #e5e5e5;
+ padding-left: 16px;
+ line-height: 40px;
+ }
+
+ .hintTips {
+ width: 100%;
+ color: #999;
+ line-height: 20px;
+ padding: 0 16px;
+ display: inline-block;
+
+ p {
+ margin: 1rem 0;
+ }
+ }
+}
+
+.slideOuterWrapper {
+ .wea-slide-modal-title {
+ height: initial;
+ line-height: initial;
+ text-align: left;
+ }
+
+ .rodal-close {
+ z-index: 99;
+ top: 10px !important;
+ }
+
+}
+
+@media (min-width: 1260px) {
+ .slideOuterWrapper {
+ .reqTopWrapper .wea-new-top-req-title > div:first-child > div {
+ max-width: 100% !important;
+ }
+ }
+}
+
+@media screen and (min-width: 1060px) and (max-width: 1260px) {
+ .slideOuterWrapper {
+ .reqTopWrapper .wea-new-top-req-title > div:first-child > div {
+ max-width: calc(100% - 96px) !important;
+ }
+ }
+}
+
+//添加关联人员弹框中的下拉框样式
+.personalScopeModalWrapper {
+ .wea-select, .ant-select-selection, .ant-select {
+ width: 100%;
+ }
+
+ .wea-select {
+ display: inline-block;
+ position: relative;
+ }
+
+ .ant-select-selection {
+ height: 30px;
+ border-radius: 0;
+ }
+}
+
+.taxfillingDialog {
+ .ant-modal-title {
+ .text-elli {
+ color: #111;
+ font-weight: 700;
+ }
+ }
+
+ .taxfillingDialogContent {
+ height: 100%;
+ padding: 16px;
+ background: #f6f6f6;
+ overflow-y: auto;
+
+ .wea-search-group {
+ padding: 0;
+ background: #FFF;
+ border: 1px solid #e5e5e5;
+ border-bottom: 0;
+
+ .ant-row, .wea-form-cell {
+ padding: 0;
+ }
+
+ .wea-form-item {
+ padding: 5px 16px;
+ border-bottom: 1px solid #e5e5e5;
+ }
+ }
+
+ .wea-new-table {
+ background: #FFF;
+ }
+
+ }
+}
diff --git a/pc4mobx/hrmSalary/pages/salary/components/personalScope.js b/pc4mobx/hrmSalary/pages/salary/components/personalScope.js
new file mode 100644
index 00000000..451fbda8
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/salary/components/personalScope.js
@@ -0,0 +1,231 @@
+/*
+ * Author: 黎永顺
+ * name: 人员范围
+ * Description:
+ * Date: 2022/11/30
+ */
+import React, { Component } from "react";
+import { message, Modal } from "antd";
+import { inject, observer } from "mobx-react";
+import { WeaButtonIcon, WeaInputSearch, WeaLocaleProvider, WeaTab } from "ecCom";
+import {
+ taxAgentRangeDelete,
+ taxAgentRangeExtDelete,
+ taxAgentRangeExtSave,
+ taxAgentRangeImportData
+} from "../../../apis/taxAgent";
+import { sysinfo } from "../../../apis/ruleconfig";
+import PersonalScopeTable from "./personalScopeTable";
+import PersonalScopeModal from "./personalScopeModal";
+import ImportDialog from "../../../components/importDialog";
+import ExternalPersonModal from "../../../components/externalPersonModal";
+
+const getLabel = WeaLocaleProvider.getLabel;
+
+@inject("taxAgentStore")
+@observer
+class PersonalScope extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ searchValue: "", selectedKey: "listInclude", rowKeys: [], loading: false,
+ extEmpsWitch: "1", //非系统人员开关, 1: 开启, 0:关闭
+ personalAddModal: { visible: false, externalVisible: false, title: getLabel(111, "关联人员"), includeType: "" },
+ importParams: {
+ visible: false, title: getLabel(111, "数据导入"), nextloading: false, importResult: {}, imageId: "",
+ link: `/api/bs/hrmsalary/taxAgent/range/downloadTemplate?taxAgentId=${props.taxAgentId}`,
+ previewUrl: "/api/bs/hrmsalary/taxAgent/range/preview"
+ }
+ };
+ this.personalScopeTableRef = null;
+ }
+
+ componentDidMount() {
+ const { taxAgentStore: { hasIconInTax } } = this.props;
+ hasIconInTax();
+ this.getSysinfo();
+ }
+
+ /*
+ * Author: 黎永顺
+ * Description:非系统人员开关查询
+ * Params:
+ * Date: 2023/11/9
+ */
+ getSysinfo = () => {
+ sysinfo().then(({ status, data }) => {
+ if (status) this.setState({ extEmpsWitch: data.extEmpsWitch });
+ });
+ };
+ /*
+ * Author: 黎永顺
+ * Description: 删除人员范围
+ * Params:
+ * Date: 2022/11/30
+ */
+ taxAgentRangeDelete = () => {
+ Modal.confirm({
+ title: "信息确认",
+ content: "确认要删除吗?",
+ onOk: () => {
+ const { selectedKey } = this.state;
+ const API = selectedKey === "listExt" ? taxAgentRangeExtDelete : taxAgentRangeDelete;
+ API(this.state.rowKeys).then(({ status, errormsg }) => {
+ if (status) {
+ message.success("删除成功");
+ this.setState({ rowKeys: [] }, () => {
+ this.personalScopeTableRef.clearRowkeys();
+ });
+ } else {
+ message.error(errormsg || "删除失败");
+ }
+ });
+ }
+ });
+ };
+ /*
+ * Author: 黎永顺
+ * Description:新增人员范围
+ * Params:
+ * Date: 2022/11/30
+ */
+ handleAddPersonal = () => {
+ const { personalAddModal, selectedKey } = this.state;
+ this.setState({
+ personalAddModal: {
+ ...personalAddModal,
+ visible: selectedKey !== "listExt",
+ externalVisible: selectedKey === "listExt",
+ includeType: selectedKey === "listInclude" ? 1 : 0
+ }
+ });
+ };
+ handleImportFile = (params) => {
+ const { taxAgentId } = this.props, { importParams } = this.state;
+ this.setState({ importParams: { ...importParams, nextloading: true } });
+ taxAgentRangeImportData({ ...params, taxAgentId }).then(({ status, errormsg, data }) => {
+ this.setState({ importParams: { ...importParams, nextloading: false } });
+ if (status) {
+ this.setState({ importParams: { ...importParams, importResult: data } });
+ } else {
+ message.warning(errormsg);
+ }
+ });
+ };
+ /*
+ * Author: 黎永顺
+ * Description: 保存非系统人员
+ * Params:
+ * Date: 2023/11/9
+ */
+ handleSaveExtPersons = (payload = {}) => {
+ const { taxAgentId } = this.props;
+ const { personalAddModal } = this.state;
+ this.setState({ loading: false });
+ taxAgentRangeExtSave({ taxAgentId, ...payload }).then(({ status, errormsg }) => {
+ this.setState({ loading: false });
+ if (status) {
+ message.success("新增成功");
+ this.setState({
+ personalAddModal: {
+ ...personalAddModal,
+ externalVisible: false
+ }
+ }, () => this.personalScopeTableRef.getPersonalScopeList());
+ } else {
+ message.error(errormsg);
+ }
+ }).catch(() => this.setState({ loading: false }));
+ };
+
+ render() {
+ const { selectedKey, searchValue, rowKeys, personalAddModal, importParams, extEmpsWitch, loading } = this.state;
+ const { taxAgentStore: { PageAndOptAuth }, taxAgentId } = this.props;
+ const showOperateBtn = PageAndOptAuth.opts.includes("admin");
+ const topTab = [
+ {
+ title: "管理范围",
+ viewcondition: "listInclude"
+ },
+ {
+ title: "从范围中排除",
+ viewcondition: "listExclude"
+ },
+ {
+ title: "非系统人员范围",
+ viewcondition: "listExt"
+ }
+ ];
+ const btns = showOperateBtn ? [
+ {
+ this.setState({ importParams: { ...importParams, visible: true } });
+ }}>,
+ ,
+ ,
+ this.setState({ searchValue })}
+ placeholder="请输入对象"
+ onSearch={() => this.personalScopeTableRef.getPersonalScopeList(selectedKey, 1)}
+ />
+ ] : [ this.setState({ searchValue })}
+ placeholder="请输入对象"
+ onSearch={() => this.personalScopeTableRef.getPersonalScopeList(selectedKey, 1)}
+ />];
+ (selectedKey === "listExclude" || selectedKey === "listExt") && btns.shift();
+ return (
+
+
this.setState({ selectedKey })}
+ />
+ this.personalScopeTableRef = dom}
+ taxAgentId={taxAgentId}
+ tabActive={selectedKey}
+ searchValue={searchValue}
+ onChangeSelectKey={rowKeys => this.setState({ rowKeys })}
+ />
+ {/*非系统人员添加*/}
+ this.setState({ personalAddModal: { ...personalAddModal, externalVisible: false } })}
+ onExternalPersonSave={this.handleSaveExtPersons}
+ />
+ this.personalScopeTableRef.getPersonalScopeList()}
+ onCancel={(callback) =>
+ this.setState({
+ personalAddModal: { ...personalAddModal, visible: false, includeType: "" }
+ }, () => callback && callback())
+ }
+ />
+ this.setState({ importParams: { ...importParams, imageId } })}
+ nextUplaodCallback={imageId => this.handleImportFile({ imageId })}
+ onResetImportResult={() => this.setState(({
+ importParams: { ...importParams, importResult: {}, imageId: "" }
+ }))}
+ onCancel={(callback) => this.setState({
+ importParams: { ...importParams, visible: false }
+ }, () => callback && this.personalScopeTableRef.getPersonalScopeList(selectedKey, 1))}/>
+
+ );
+ }
+}
+
+export default PersonalScope;
diff --git a/pc4mobx/hrmSalary/pages/salary/components/personalScopeModal.js b/pc4mobx/hrmSalary/pages/salary/components/personalScopeModal.js
new file mode 100644
index 00000000..3e649880
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/salary/components/personalScopeModal.js
@@ -0,0 +1,135 @@
+/*
+ * Author: 黎永顺
+ * name: 新增人员范围弹框
+ * Description:
+ * Date: 2022/11/30
+ */
+import React, { Component } from "react";
+import { inject, observer } from "mobx-react";
+import { WeaSwitch } from "comsMobx";
+import { WeaCheckbox, WeaDialog, WeaFormItem, WeaLocaleProvider, WeaSearchGroup, WeaTools } from "ecCom";
+import { Button, message } from "antd";
+import { getTaxAgentRangeForm, taxAgentRangeSave } from "../../../apis/taxAgent";
+import { personScopeConditions, scopeSelectLinkageDatas } from "./constants";
+
+const getKey = WeaTools.getKey;
+const getLabel = WeaLocaleProvider.getLabel;
+
+@inject("taxAgentStore")
+@observer
+class PersonalScopeModal extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ loading: false, conditions: [], employeeStatus: []
+ };
+ }
+
+ componentWillReceiveProps(nextProps, nextContext) {
+ if (nextProps.visible !== this.props.visible && nextProps.visible) this.getTaxAgentRangeForm();
+ if (nextProps.visible !== this.props.visible && !nextProps.visible) this.props.taxAgentStore.initPersonScopeForm();
+ }
+
+ getTaxAgentRangeForm = () => {
+ getTaxAgentRangeForm().then(({ status, data }) => {
+ if (status) {
+ const { employeeStatus, targetTypeList } = data;
+ this.setState({
+ employeeStatus, conditions: _.map(personScopeConditions, item => ({
+ ...item, items: _.map(item.items, o => {
+ if (getKey(o) === "employeeStatus") {
+ return {
+ ...o, label: getLabel(o.lanId, o.label),
+ options: _.map(employeeStatus, it => ({ key: it.id, showname: it.name }))
+ };
+ }
+ return {
+ ...o, label: getLabel(o.lanId, o.label),
+ options: _.map(targetTypeList, it => ({
+ key: it.id, showname: it.name, selected: it.id === "EMPLOYEE"
+ })),
+ selectLinkageDatas: { ...scopeSelectLinkageDatas }
+ };
+ })
+ }))
+ }, () => this.props.taxAgentStore.personScopeForm.initFormFields(this.state.conditions));
+ }
+ });
+ };
+ taxAgentRangeSave = () => {
+ const { taxAgentStore: { personScopeForm } } = this.props;
+ personScopeForm.validateForm().then(f => {
+ if (f.isValid) {
+ const { employeeStatus, targetType, target } = personScopeForm.getFormParams();
+ const { includeType, taxAgentId } = this.props;
+ const payload = {
+ includeType, taxAgentId, employeeStatus: employeeStatus.split(","),
+ targetParams: _.map(target.split(","), it => ({
+ targetType, targetId: targetType === "SQL" ? "0" : it,
+ target: targetType === "SQL" ? target : ""
+ }))
+ };
+ this.setState({ loading: true });
+ taxAgentRangeSave(payload).then(({ status, errormsg }) => {
+ this.setState({ loading: false });
+ if (status) {
+ message.success(getLabel(111, "操作成功!"));
+ this.props.onCancel(this.props.onSuccess);
+ } else {
+ message.error(errormsg);
+ }
+ }).catch(() => this.setState({ loading: true }));
+ } else {
+ f.showErrors();
+ }
+ });
+ };
+ renderForm = () => {
+ const { taxAgentStore: { personScopeForm } } = this.props;
+ const { conditions, employeeStatus } = this.state, { isFormInit } = personScopeForm,
+ formParams = personScopeForm.getFormParams();
+ const checked = formParams.employeeStatus && _.every(_.map(employeeStatus, o => o.id), k => formParams.employeeStatus.indexOf(k) !== -1);
+ let group = [];
+ isFormInit && conditions.map(c => {
+ let items = [];
+ c.items.map(fields => {
+ items.push({
+ com: (
+
+ {
+ getKey(fields) === "employeeStatus" &&
+
+ }
+
+ ),
+ hide: fields.hide
+ });
+ });
+ group.push();
+ });
+ return group;
+ };
+ handleChangeAll = (val) => {
+ const { taxAgentStore: { personScopeForm } } = this.props, { employeeStatus } = this.state;
+ val === "1" ? personScopeForm.updateFields({ employeeStatus: { value: _.map(employeeStatus, o => o.id).join(",") } }) :
+ personScopeForm.updateFields({ employeeStatus: { value: "" } });
+ };
+
+ render() {
+ const { title, taxAgentStore: { personScopeForm } } = this.props, { loading } = this.state;
+ const buttons = [
+ ,
+
+ ];
+ return (
+
+ {this.renderForm()}
+
+ );
+ }
+}
+
+export default PersonalScopeModal;
diff --git a/pc4mobx/hrmSalary/pages/salary/components/personalScopeTable.js b/pc4mobx/hrmSalary/pages/salary/components/personalScopeTable.js
new file mode 100644
index 00000000..87bf46cb
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/salary/components/personalScopeTable.js
@@ -0,0 +1,136 @@
+/*
+ * Author: 黎永顺
+ * name: 人员范围列表数据
+ * Description:
+ * Date: 2022/11/30
+ */
+import React, { Component } from "react";
+import { WeaTable } from "ecCom";
+import { getTaxAgentRangeListExclude, getTaxAgentRangeListInclude, taxAgentRangelistExt } from "../../../apis/taxAgent";
+import "./index.less";
+import { calcPageNo } from "../../../util";
+
+const APIFox = {
+ listInclude: getTaxAgentRangeListInclude,
+ listExclude: getTaxAgentRangeListExclude,
+ listExt: taxAgentRangelistExt
+};
+
+class PersonalScopeTable extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ loading: {
+ query: false
+ },
+ dataSource: [],
+ columns: [],
+ selectedRowKeys: [],
+ pageInfo: {
+ current: 1,
+ pageSize: 10,
+ total: 0
+ }
+ };
+ }
+
+ componentDidMount() {
+ this.getPersonalScopeList();
+ }
+
+ componentWillReceiveProps(nextProps, nextContext) {
+ if (nextProps.tabActive !== this.props.tabActive) {
+ this.setState({ selectedRowKeys: [] }, () => {
+ this.getPersonalScopeList(nextProps.tabActive);
+ nextProps.onChangeSelectKey([]);
+ });
+ }
+ }
+
+ getPersonalScopeList = (tabActive = this.props.tabActive, current) => {
+ const { searchValue, taxAgentId } = this.props;
+ const { pageInfo, loading } = this.state;
+ const payload = {
+ taxAgentId, targetName: searchValue, ...pageInfo, current: current || pageInfo.current
+ };
+ this.setState({ loading: { ...loading, query: true } });
+ APIFox[tabActive](payload).then(({ status, data }) => {
+ this.setState({ loading: { ...loading, query: false } });
+ if (status) {
+ const { pageNum: current, pageSize, total, columns, list: dataSource } = data;
+ this.setState({
+ pageInfo: { ...pageInfo, current, pageSize, total },
+ dataSource,
+ columns: _.map(columns, item => {
+ return {
+ ...item,
+ render: (text) => {
+ return {text};
+ }
+ };
+ })
+ });
+ }
+ }).catch(() => {
+ this.setState({ loading: { ...loading, query: false } });
+ });
+ };
+
+ /*
+ * Author: 黎永顺
+ * Description: 清空选中项
+ * Params:
+ * Date: 2022/11/30
+ */
+ clearRowkeys = () => {
+ const { pageInfo, selectedRowKeys } = this.state;
+ this.setState({
+ selectedRowKeys: [],
+ pageInfo: {
+ ...pageInfo,
+ current: calcPageNo(pageInfo.total, pageInfo.current, 10, selectedRowKeys.length)
+ }
+ }, () => {
+ this.getPersonalScopeList();
+ });
+ };
+
+ render() {
+ const { dataSource, columns, pageInfo, loading, selectedRowKeys } = this.state;
+ const { onChangeSelectKey } = this.props;
+ const pagination = {
+ ...pageInfo,
+ showTotal: total => `共 ${total} 条`,
+ showQuickJumper: true,
+ pageSizeOptions: ["10", "20", "50", "100"],
+ onChange: current => {
+ this.setState({
+ pageInfo: { ...pageInfo, current }
+ }, () => {
+ this.getPersonalScopeList();
+ });
+ }
+ };
+ const rowSelection = {
+ selectedRowKeys,
+ onChange: (selectedRowKeys) => {
+ this.setState({ selectedRowKeys }, () => {
+ onChangeSelectKey(this.state.selectedRowKeys);
+ });
+ }
+ };
+ return (
+
+ );
+ }
+}
+
+export default PersonalScopeTable;
diff --git a/pc4mobx/hrmSalary/pages/salary/components/taxAgentSlide.js b/pc4mobx/hrmSalary/pages/salary/components/taxAgentSlide.js
new file mode 100644
index 00000000..28085d47
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/salary/components/taxAgentSlide.js
@@ -0,0 +1,303 @@
+/*
+ * Author: 黎永顺
+ * name: 新增/编辑个税扣缴义务人
+ * Description:
+ * Date: 2022/11/29
+ */
+import React, { Component } from "react";
+import { inject, observer } from "mobx-react";
+import { Button, message, Modal } from "antd";
+import { WeaLocaleProvider, WeaSlideModal, WeaSteps } from "ecCom";
+import { decentralizationConditions, editConditions } from "../../taxAgent/editConditions";
+import BaseSettings, { convertConditon } from "./baseSettings";
+import PersonalScope from "./personalScope";
+import TaxDeclarationInfo from "./taxDeclarationInfo";
+import TaxFilingInfoDialofg from "./taxFillingInfoDialog";
+import WeaTopTitle from "../../../components/custom-title/weaTopTitle";
+import WeaReqTitle from "../../../components/custom-title/weaReqTitle";
+import * as API from "../../../apis/taxAgent";
+import { registrationCheck } from "../../../apis/taxAgent";
+import "./index.less";
+
+const { getLabel } = WeaLocaleProvider;
+const Step = WeaSteps.Step;
+
+@inject("taxAgentStore")
+@observer
+class TaxAgentSlide extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ current: 0, loading: false, verifyLoading: false, taxAgentId: "",
+ taxFilingInfoDialofg: {
+ visible: false, title: "", checkPayload: {},
+ isEdit: false, jumpAll: false, loading: false,
+ taxAgentTaxReturnCheckFormDTO: null
+ }
+ };
+ this.taxInfoRef = null;
+ }
+
+ componentWillReceiveProps(nextProps, nextContext) {
+ if (nextProps.visible !== this.props.visible || nextProps.decentralization !== this.props.decentralization) {
+ const { taxAgentStore: { salarytaxAgentForm }, decentralization, isChief } = nextProps;
+ decentralization === "0" ?
+ salarytaxAgentForm.setCondition(convertConditon(decentralizationConditions, !isChief), true) :
+ salarytaxAgentForm.setCondition(convertConditon(editConditions, !isChief), true);
+ this.setState({ current: nextProps.current, taxAgentId: nextProps.taxAgentId }, () => {
+ if (this.state.taxAgentId) this.getTaxAgentForm();
+ });
+ }
+ if (nextProps.visible !== this.props.visible && !nextProps.visible) this.props.taxAgentStore.setSalarytaxAgentForm();
+ }
+
+ getTaxAgentForm = () => {
+ const { taxAgentId } = this.state;
+ const { taxAgentStore: { salarytaxAgentForm } } = this.props;
+ API.getTaxAgentForm({ id: taxAgentId }).then(({ status, data }) => {
+ if (status) {
+ const { name, description, adminUserIds, sortedIndex } = data;
+ salarytaxAgentForm.updateFields({
+ name: { value: name },
+ adminUserIds: {
+ value: _.map(adminUserIds, it => it.id.toString()).join(","),
+ valueSpan: _.map(adminUserIds, it => it.content).join(",")
+ },
+ sortedIndex: { value: sortedIndex },
+ description: { value: description }
+ });
+ }
+ });
+ };
+ /*
+ * Author: 黎永顺
+ * Description: 保存个税扣缴义务人
+ * Params:
+ * Date: 2022/12/1
+ */
+ saveTaxAgent = (payload) => {
+ const { onOk, salaryOn } = this.props;
+ const { current } = this.state;
+ this.setState({ loading: true });
+ API.saveTaxAgent(payload).then(({ status, data, errormsg }) => {
+ this.setState({ loading: false });
+ if (status) {
+ message.success(getLabel(22619, "保存成功"));
+ this.setState({
+ current: !salaryOn ? current + 2 : current + 1,
+ taxAgentId: data
+ }, () => onOk());
+ } else {
+ message.error(errormsg || getLabel(22620, "保存失败"));
+ }
+ }).catch(() => this.setState({ loading: false }));
+ };
+ /*
+ * Author: 黎永顺
+ * Description: 编辑个税扣缴义务人
+ * Params:
+ * Date: 2022/12/1
+ */
+ updateTaxAgent = (payload) => {
+ const { onCancel } = this.props;
+ this.setState({ loading: true });
+ API.updateTaxAgent(payload).then(({ status, data, errormsg }) => {
+ this.setState({ loading: false });
+ if (status) {
+ message.success(getLabel(31439, "更新成功"));
+ onCancel(true);
+ } else {
+ message.error(errormsg || getLabel(31825, "更新失败"));
+ }
+ }).catch(() => this.setState({ loading: false }));
+ };
+ handleSave = () => {
+ const { taxAgentStore: { salarytaxAgentForm } } = this.props;
+ const { taxAgentId } = this.state;
+ salarytaxAgentForm.validateForm().then((f) => {
+ if (f.isValid) {
+ const formData = salarytaxAgentForm.getFormParams();
+ const payload = {
+ ...formData,
+ adminUserIds: formData.adminUserIds ? formData.adminUserIds.split(",") : []
+ };
+ taxAgentId ? this.updateTaxAgent({ ...payload, id: taxAgentId }) : this.saveTaxAgent(payload);
+ } else {
+ f.showErrors();
+ }
+ });
+ };
+ handleSaveAndVerify = (jumpAll = false) => {
+ const { isEdit } = this.props, { taxAgentId, taxFilingInfoDialofg } = this.state;
+ const { fieldForm, fieldItem } = this.taxInfoRef.state;
+ const { city: cityStr, cityVal = [], netPassword, realNamePassword, ...extra } = fieldForm;
+ const boolean = _.every(_.filter(fieldItem, item => item.viewAttr === 3), it => fieldForm[it.key]);
+ if (!boolean) {
+ Modal.warning({
+ title: getLabel(131329, "信息确认"),
+ content: getLabel(518702, "必要信息不完整,红色*为必填项!")
+ });
+ return;
+ }
+ const [nation, province, city] = cityStr ? cityStr.split("-") : [];
+ const proBool = _.every(cityStr ? cityStr.split("-") : [], it => it !== "undefined");
+ if (!proBool) {
+ Modal.warning({
+ title: getLabel(131329, "信息确认"),
+ content: getLabel(111, "请展开选择报税所属区域!")
+ });
+ return;
+ }
+ // requestType: 1:保存并验证 2:保存
+ const payload = {
+ ...extra, nation, province, city,
+ taxAgentId, requestType: 1, password: netPassword || realNamePassword,
+ cityname: !_.isEmpty(cityVal) ? _.head(cityVal).name : ""
+ };
+ this.setState({ verifyLoading: true });
+ API.saveAndCheck(_.omitBy(payload, val => _.isNil(val))).then(({ status, data, errormsg }) => {
+ this.setState({ verifyLoading: false });
+ if (status) {
+ message.success(getLabel(22619, "保存成功!"));
+ this.setState({
+ taxFilingInfoDialofg: {
+ ...taxFilingInfoDialofg, visible: true,
+ isEdit, jumpAll, title: fieldForm.name, checkPayload: payload,
+ taxAgentTaxReturnCheckFormDTO: data.TaxAgentTaxReturnCheckFormDTO || data.table.list
+ }
+ });
+ } else {
+ message.error(errormsg || getLabel(22620, "保存失败!"));
+ }
+ }).catch(() => this.setState({ verifyLoading: false }));
+ };
+ handleSubmit = (selectKey) => {
+ const { taxFilingInfoDialofg, taxAgentId } = this.state;
+ const { fieldForm } = this.taxInfoRef.state;
+ const { city: cityStr, cityVal = [], netPassword, realNamePassword, ...extra } = fieldForm;
+ const [nation, province, city] = cityStr ? cityStr.split("-") : [];
+ const { taxAgentTaxReturnCheckFormDTO } = taxFilingInfoDialofg;
+ this.setState({
+ taxFilingInfoDialofg: { ...taxFilingInfoDialofg, loading: true }
+ });
+ registrationCheck({
+ ...extra, nation, province, city,
+ taxAgentId, password: netPassword || realNamePassword,
+ cityname: !_.isEmpty(cityVal) ? _.head(cityVal).name : "",
+ ..._.find(taxAgentTaxReturnCheckFormDTO, it => it.index === selectKey)
+ }).then(({ status, data, errormsg }) => {
+ this.setState({
+ taxFilingInfoDialofg: { ...taxFilingInfoDialofg, loading: false }
+ });
+ if (status) {
+ message.success(getLabel(22619, "保存成功!"));
+ this.setState({
+ taxFilingInfoDialofg: {
+ ...taxFilingInfoDialofg,
+ taxAgentTaxReturnCheckFormDTO: data.TaxAgentTaxReturnCheckFormDTO
+ }
+ });
+ } else {
+ message.error(errormsg || getLabel(22620, "保存失败!"));
+ }
+ }).catch(() => {
+ this.setState({
+ taxFilingInfoDialofg: { ...taxFilingInfoDialofg, loading: false }
+ });
+ });
+ };
+
+ render() {
+ const {
+ isEdit, title, visible, onCancel, salaryOn, decentralization, isChief, taxAgentStore: { PageAndOptAuth }
+ } = this.props;
+ const { current, taxAgentId, taxFilingInfoDialofg, loading, verifyLoading } = this.state;
+ let tabs = [
+ {
+ key: 0, title: getLabel(82751, "基础设置"),
+ createBtns: [
+
+ ],
+ editBtns: [
+
+ ],
+ children:
+ },
+ {
+ key: 1, title: getLabel(544342, "报税信息"),
+ createBtns: [
+ ,
+
+ ],
+ editBtns: [
+
+ ],
+ children: this.taxInfoRef = dom} taxAgentId={taxAgentId} isChief={isChief}/>
+ },
+ {
+ key: 2, title: getLabel(124810, "人员范围"),
+ createBtns: [
+
+ ],
+ editBtns: [],
+ children:
+ }
+ ];
+ tabs = !salaryOn ? _.filter(tabs, it => it.key !== 1) : tabs;
+ const showOperateBtn = PageAndOptAuth.opts.includes("admin");
+ return (
+ current === o.key).createBtns}/> :
+ current === o.key).editBtns : []}
+ tabDatas={tabs} selectedKey={String(current)} title={title}
+ onChange={cur => this.setState({ current: parseInt(cur) })}/>
+ }
+ content={
+
+ {
+ !isEdit &&
+
+ {
+ _.map(tabs, item => {
+ const { key, title } = item;
+ return ;
+ })
+ }
+
+ }
+ {_.find(tabs, o => current === o.key).children}
+ {
+ const { jumpAll } = taxFilingInfoDialofg;
+ this.setState({
+ current: jumpAll ? this.state.current + 1 : this.state.current,
+ taxFilingInfoDialofg: {
+ ...taxFilingInfoDialofg, visible: false,
+ taxAgentTaxReturnCheckFormDTO: null
+ }
+ }, () => {
+ isRefresh && this.taxInfoRef.taxReturnGetForm();
+ jumpAll && this.props.onCancel(true);
+ });
+ }}
+ />
+
+ }
+ onClose={() => onCancel()}
+ />
+ );
+ }
+}
+
+export default TaxAgentSlide;
diff --git a/pc4mobx/hrmSalary/pages/salary/components/taxAgentTable.js b/pc4mobx/hrmSalary/pages/salary/components/taxAgentTable.js
new file mode 100644
index 00000000..5658e479
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/salary/components/taxAgentTable.js
@@ -0,0 +1,137 @@
+/*
+ * Author: 黎永顺
+ * name: 个税扣缴义务人列表
+ * Description:
+ * Date: 2022/11/29
+ */
+import React, { Component } from "react";
+import { WeaLocaleProvider, WeaTable } from "ecCom";
+import { Dropdown, Menu } from "antd";
+import * as API from "../../../apis/taxAgent";
+import "./index.less";
+
+const { getLabel } = WeaLocaleProvider;
+
+class TaxAgentTable extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ loading: {
+ query: false
+ },
+ dataSource: [],
+ columns: [],
+ pageInfo: {
+ current: 1,
+ pageSize: 10,
+ total: 0
+ }
+ };
+ }
+
+ componentDidMount() {
+ this.getTaxAgentList();
+ }
+
+ getTaxAgentList = () => {
+ const { pageInfo, loading } = this.state;
+ const { searchValue, onOperate } = this.props;
+ const payload = {
+ name: searchValue,
+ ...pageInfo
+ };
+ this.setState({ loading: { ...loading, query: true } });
+ API.getTaxAgentList(payload).then(({ status, data }) => {
+ this.setState({ loading: { ...loading, query: false } });
+ if (status) {
+ const { pageNum: current, pageSize, total, columns, list: dataSource } = data;
+ this.setState({
+ pageInfo: { ...pageInfo, current, pageSize, total },
+ dataSource,
+ columns: _.map(columns, item => {
+ if (item.dataIndex === "employeeRange") {
+ return {
+ ...item,
+ render: (text, record) => {
+ return onOperate("edit", record.id, 2)}>{text};
+ }
+ };
+ }
+ return {
+ ...item,
+ render: (text) => {
+ return {text};
+ }
+ };
+ })
+ });
+ }
+ }).catch(() => {
+ this.setState({ loading: { ...loading, query: false } });
+ });
+ };
+
+ render() {
+ const { dataSource, columns, pageInfo, loading } = this.state;
+ const { onOperate, isChief } = this.props;
+ const pagination = {
+ ...pageInfo,
+ showTotal: total => `${getLabel(18609, "共")} ${total} ${getLabel(18256, "条")}`,
+ showSizeChanger: true,
+ showQuickJumper: true,
+ pageSizeOptions: ["10", "20", "50", "100"],
+ onShowSizeChange: (current, pageSize) => {
+ this.setState({
+ pageInfo: { ...pageInfo, current, pageSize }
+ }, () => {
+ this.getTaxAgentList();
+ });
+ },
+ onChange: current => {
+ this.setState({
+ pageInfo: { ...pageInfo, current }
+ }, () => {
+ this.getTaxAgentList();
+ });
+ }
+ };
+ return (
+
+
+ }
+ ]}
+ />
+ );
+ }
+}
+
+export default TaxAgentTable;
diff --git a/pc4mobx/hrmSalary/pages/salary/components/taxDeclarationInfo.js b/pc4mobx/hrmSalary/pages/salary/components/taxDeclarationInfo.js
new file mode 100644
index 00000000..11f5e4d3
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/salary/components/taxDeclarationInfo.js
@@ -0,0 +1,146 @@
+/*
+ * Author: 黎永顺
+ * name: 报税信息
+ * Description:
+ * Date: 2022/12/1
+ */
+import React, { Component } from "react";
+import { WeaBrowser, WeaFormItem, WeaInput, WeaLocaleProvider, WeaSearchGroup, WeaSelect } from "ecCom";
+import { fieldList } from "./constants";
+import { taxReturnGetForm } from "../../../apis/taxAgent";
+
+const { getLabel } = WeaLocaleProvider;
+
+class TaxDeclarationInfo extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ fieldForm: {
+ name: "",
+ taxCode: "",
+ city: "",
+ cityVal: [],
+ areaCode: null,
+ passwordType: "TAX_NET_PASSWORD",
+ account: "",
+ realNamePassword: "",
+ netPassword: null,
+ taxRegistrationNumber: "",
+ departmentCode: "",
+ checkStatus: ""
+ },
+ fieldItem: []
+ };
+ }
+
+ componentDidMount() {
+ this.setState({
+ fieldItem: _.filter(_.map(fieldList, item => ({
+ ...item,
+ label: getLabel(item.lanId, item.label),
+ viewAttr: this.props.isChief ? item.viewAttr : 1
+ })), it => it.key !== "account" && it.key !== "realNamePassword")
+ }, () => {
+ this.taxReturnGetForm();
+ });
+ }
+
+ taxReturnGetForm = () => {
+ const { taxAgentId } = this.props;
+ taxReturnGetForm({ taxAgentId }).then(({ status, data }) => {
+ if (status) {
+ const { fieldForm } = this.state;
+ this.setState({
+ fieldForm: {
+ ...fieldForm,
+ ..._.reduce(_.keys(fieldForm), (pre, cur) => {
+ if (cur !== "city") {
+ if (cur === "checkStatus") {
+ const checkStatusMap = {
+ "NOT_COMMIT": getLabel(111, "未验证"),
+ "SUCCESS": getLabel(111, "成功"),
+ "FAIL": getLabel(111, "失败")
+ };
+ return { ...pre, [cur]: checkStatusMap[data[cur]] };
+ }
+ return { ...pre, [cur]: data[cur] };
+ }
+ return {
+ ...pre,
+ [cur]: `${data["nation"]}-${data["province"]}-${data[cur]}`
+ };
+ }, {}),
+ cityVal: (data["city"] && data["cityName"]) ? [{ id: data["city"], name: data["cityName"] }] : []
+ }
+ });
+ }
+ });
+ };
+ handleChangeValue = (key, value, cityVal = []) => {
+ const { fieldForm } = this.state;
+ this.setState({
+ fieldForm: !_.isEmpty(cityVal) ? {
+ ...fieldForm, [key]: value, cityVal
+ } : { ...fieldForm, [key]: value }
+ }, () => {
+ if (key === "passwordType" && this.state.fieldForm.passwordType === "REAL_NAME_PASSWORD") {
+ this.setState({
+ fieldItem: _.filter(fieldList, it => it.key !== "netPassword"),
+ fieldForm: { ...this.state.fieldForm, account: null, realNamePassword: null, netPassword: null }
+ });
+ } else if (key === "passwordType" && this.state.fieldForm.passwordType === "TAX_NET_PASSWORD") {
+ this.setState({
+ fieldItem: _.filter(fieldList, it => it.key !== "account" && it.key !== "realNamePassword"),
+ fieldForm: { ...this.state.fieldForm, netPassword: null, account: null, realNamePassword: null }
+ });
+ }
+ });
+ };
+
+ render() {
+ const { fieldItem, fieldForm } = this.state;
+ return (
+
+
+ {
+ _.map(fieldItem, item => {
+ const { key, label, type, viewAttr, options = [] } = item;
+ return
+ {
+ (type === "TEXT" || type === "PASSWORD") &&
+ this.handleChangeValue(key, v)}/>
+ }
+ {
+ type === "SELECT" &&
+ {
+ if (!_.isEmpty(datas)) {
+ this.handleChangeValue(key, `1-${datas[0].pid}-${datas[0].id}`, _.map(datas, it => ({
+ id: it.id,
+ name: it.name
+ })));
+ } else {
+ this.handleChangeValue(key, "", []);
+ }
+ }}
+ />
+ }
+ {
+ type === "RADIO" &&
+ ({ ...it, showname: getLabel(it.lanId, it.showname) }))}
+ viewAttr={viewAttr}
+ onChange={(v) => this.handleChangeValue(key, v)}/>
+ }
+ ;
+ })
+ }
+
+
+ );
+ }
+}
+
+export default TaxDeclarationInfo;
diff --git a/pc4mobx/hrmSalary/pages/salary/components/taxFillingInfoDialog.js b/pc4mobx/hrmSalary/pages/salary/components/taxFillingInfoDialog.js
new file mode 100644
index 00000000..3a02b4b7
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/salary/components/taxFillingInfoDialog.js
@@ -0,0 +1,132 @@
+/*
+ * Author: 黎永顺
+ * name: 个税申报-异常、失败详情
+ * Description:
+ * Date: 2023/8/18
+ */
+import React, { Component } from "react";
+import { inject, observer } from "mobx-react";
+import { WeaDialog, WeaLocaleProvider, WeaTable } from "ecCom";
+import { Button, message } from "antd";
+import { deptFillCondition, taxFillColumns, taxFillCondition } from "./constants";
+import { getSearchs } from "../../../util";
+import { saveDepartmentCodeAndCheck } from "../../../apis/taxAgent";
+
+const { getLabel } = WeaLocaleProvider;
+
+@inject("taxAgentStore")
+@observer
+class TaxFilingInfoDialofg extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ selectedRowKeys: [], checkLoading: false
+ };
+ }
+
+ componentWillReceiveProps(nextProps, nextContext) {
+ if (!_.isEmpty(nextProps.taxAgentTaxReturnCheckFormDTO) &&
+ Object.prototype.toString.call(nextProps.taxAgentTaxReturnCheckFormDTO) === "[object Object]"
+ ) {
+ const { taxAgentTaxReturnCheckFormDTO, taxAgentStore: { taxfillInfoForm, deptfillInfoForm } } = nextProps;
+ taxfillInfoForm.initFormFields(taxFillCondition);
+ deptfillInfoForm.initFormFields(deptFillCondition);
+ const fields = _.map(taxFillCondition[0].items, it => {
+ return it.domkey[0];
+ });
+ fields.map(item => {
+ taxfillInfoForm.updateFields({
+ [item]: item !== "divideFiling" ? (taxAgentTaxReturnCheckFormDTO[item] || "") : (taxAgentTaxReturnCheckFormDTO[item] === "ON" ? getLabel(538048, "是") : getLabel(30587, "否"))
+ });
+ });
+ }
+ if (nextProps.visible !== this.props.visible && !nextProps.visible) {
+ const { taxAgentStore: { setTaxfillInfoForm, initDeptfillInfoForm } } = nextProps;
+ setTaxfillInfoForm();
+ initDeptfillInfoForm();
+ }
+ }
+
+ handleSaveOrKnow = () => {
+ const { taxAgentStore: { taxfillInfoForm, deptfillInfoForm }, checkPayload } = this.props;
+ if (taxfillInfoForm.getFormParams().divideFiling === getLabel(538048, "是")) {
+ deptfillInfoForm.validateForm().then(f => {
+ if (f.isValid) {
+ this.setState({ checkLoading: true });
+ saveDepartmentCodeAndCheck(_.omitBy({ ...checkPayload, ...deptfillInfoForm.getFormParams() }, val => _.isNil(val)))
+ .then(({ status, errormsg }) => {
+ this.setState({ checkLoading: false });
+ if (status) {
+ message.success(getLabel(30700, "操作成功!"));
+ this.props.onCancel(true);
+ } else {
+ message.error(errormsg);
+ }
+ }).catch(() => this.setState({ checkLoading: false }));
+ } else {
+ f.showErrors();
+ }
+ });
+ } else {
+ this.props.onCancel();
+ }
+ };
+
+ render() {
+ const { selectedRowKeys, checkLoading } = this.state;
+ const { taxAgentStore: { taxfillInfoForm, deptfillInfoForm }, taxAgentTaxReturnCheckFormDTO, loading } = this.props;
+ const rowSelection = {
+ type: "radio",
+ selectedRowKeys,
+ onChange: selectedRowKeys => this.setState({ selectedRowKeys })
+ };
+ return (
+
+ {taxfillInfoForm.getFormParams().divideFiling === getLabel(538048, "是") ? getLabel(537558, "保存") : getLabel(545147, "知道了")}
+
+ ] : [
+
+ ]
+ }
+ style={{
+ width: 850,
+ height: 480,
+ minHeight: 200,
+ minWidth: 380,
+ maxHeight: "50%",
+ maxWidth: "50%",
+ overflow: "hidden",
+ transform: "translate(0px, 0px)"
+ }}
+ >
+
+ {
+ Object.prototype.toString.call(taxAgentTaxReturnCheckFormDTO) === "[object Object]" ?
+
+ {getSearchs(taxfillInfoForm, taxFillCondition, 1)}
+ {taxfillInfoForm.getFormParams().divideFiling === getLabel(538048, "是") && getSearchs(deptfillInfoForm, deptFillCondition, 1)}
+ :
+ ({
+ dataIndex: o.dataIndex,
+ width: 200,
+ title: getLabel(o.titleId, o.title)
+ }))}
+ scroll={{ x: 1200 }} rowSelection={rowSelection}
+ />
+ }
+
+
+ );
+ }
+}
+
+export default TaxFilingInfoDialofg;
diff --git a/pc4mobx/hrmSalary/pages/salary/index.less b/pc4mobx/hrmSalary/pages/salary/index.less
new file mode 100644
index 00000000..e6dacf00
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/salary/index.less
@@ -0,0 +1,101 @@
+.salaryAgentWrapper {
+ .wea-new-top-content {
+ background: #f6f6f6;
+ padding: 8px 16px 0;
+ }
+
+ .wea-new-top {
+ .wea-input-focus {
+ height: 31.36px;
+ line-height: 0;
+ }
+ }
+
+ .comContent {
+ .wea-search-group:first-child {
+ margin-bottom: 16px;
+ }
+
+ .wea-search-group {
+ padding: 0;
+ background: #fff;
+
+ .wea-title {
+ padding: 0 10px;
+ }
+
+ .wea-content {
+ padding: 0;
+
+ .wea-form-item {
+ padding-left: 18px;
+ }
+ }
+ }
+
+ .customTitleWrapper {
+ width: 100%;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+
+ .ant-btn {
+ margin-left: 10px;
+ border-radius: 0;
+ padding: 0;
+ background: transparent;
+ border: none;
+ font-size: 20px;
+ line-height: 20px;
+ }
+
+ .ant-btn.ant-btn-primary[disabled] {
+ color: #d8d8d8;
+ }
+
+ .ant-btn.ant-btn-primary {
+ color: #55a1f8;
+ }
+ }
+
+ .tdEllipsis {
+ display: inline-block;
+ width: 100%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+ }
+
+ .ant-col-10 {
+ span:nth-child(2) {
+ //margin-top: -6px;
+ }
+ }
+
+ .taxAgentSlide {
+ .wea-slide-modal-title {
+ height: auto;
+ line-height: normal;
+ text-align: left;
+ background: #FFF;
+
+ .wea-new-top .ant-col-10 {
+ padding-right: 45px !important;
+ }
+ }
+
+ .rodal-close {
+ z-index: 99;
+ top: 10px !important;
+ }
+
+ .wea-new-top-req-wapper .wea-new-top-req-title > div:last-child {
+ right: 45px !important;
+ }
+
+ .wea-slide-modal-content {
+ height: 100%;
+ }
+ }
+}
diff --git a/pc4mobx/hrmSalary/pages/salary/taxAgent.js b/pc4mobx/hrmSalary/pages/salary/taxAgent.js
new file mode 100644
index 00000000..300037c3
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/salary/taxAgent.js
@@ -0,0 +1,236 @@
+import React, { Component } from "react";
+import { inject, observer } from "mobx-react";
+import { Button, message, Modal } from "antd";
+import { WeaCheckbox, WeaFormItem, WeaInputSearch, WeaLocaleProvider, WeaSearchGroup, WeaTop } from "ecCom";
+import ComHint from "./components/comHint";
+import TaxAgentTable from "./components/taxAgentTable";
+import TaxAgentSlide from "./components/taxAgentSlide";
+import LogDialog from "../../components/logViewModal";
+import * as API from "../../apis/taxAgent";
+import "./index.less";
+
+const { getLabel } = WeaLocaleProvider;
+
+@inject("taxAgentStore")
+@observer
+class TaxAgent extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ syncLoading: false, //同步人员范围loading
+ searchValue: "",
+ decentralization: "0", //启用分权
+ taxAgentSlideProps: {
+ isEdit: false, visible: false, title: getLabel(543629, "新增个税扣缴义务人"),
+ taxAgentId: "", current: 0, salaryOn: false
+ },
+ logDialogVisible: false,
+ filterConditions: "[]"
+ };
+ this.taxAgentTableRef = null;
+ }
+
+ componentDidMount() {
+ this.getTaxAgentBaseForm();
+ }
+
+ getTaxAgentBaseForm = () => {
+ API.getTaxAgentBaseForm().then(({ status, data }) => {
+ if (status) {
+ const { devolutionStatus } = data;
+ this.setState({ decentralization: String(devolutionStatus || 0) });
+ }
+ });
+ };
+ /*
+ * Author: 黎永顺
+ * Description:开启关闭个税扣缴义务人开关
+ * Params:
+ * Date: 2022/11/29
+ */
+ taxAgentBaseSave = devolutionStatus => {
+ this.setState({ decentralization: this.state.decentralization }, () => {
+ Modal.confirm({
+ title: getLabel(131329, "信息确认"),
+ content: `${getLabel(33703, "确认")}${devolutionStatus === "0" ? getLabel(26471, "停用") : getLabel(26472, "启用")}${getLabel(524044, "分权")}?`,
+ onOk: () => {
+ const paylaod = { devolutionStatus };
+ const { taxAgentStore } = this.props;
+ const { taxAgentBaseSave, setSalarytaxAgentForm } = taxAgentStore;
+ taxAgentBaseSave(paylaod).then(({ status, errormsg }) => {
+ if (status) {
+ message.success(`${devolutionStatus === "0" ? "停用" : "启用"}分权成功`);
+ this.getTaxAgentBaseForm();
+ this.taxAgentTableRef.getTaxAgentList();
+ setSalarytaxAgentForm();
+ } else {
+ message.error(errormsg || `${devolutionStatus === "0" ? "停用" : "启用"}分权失败`);
+ }
+ });
+ }
+ });
+ });
+ };
+ /*
+ * Author: 黎永顺
+ * Description:
+ * Params:添加个税扣缴义务人
+ * Date: 2022/11/29
+ */
+ handleAddTaxAgent = () => {
+ this.setState({
+ taxAgentSlideProps: {
+ ...this.state.taxAgentSlideProps,
+ visible: true, current: 0
+ }
+ });
+ };
+ /*
+ * Author: 黎永顺
+ * Description:启用分权
+ * Params:
+ * Date: 2022/12/1
+ */
+ taxAgentRangeSync = () => {
+ const { taxAgentStore } = this.props;
+ const { taxAgentRangeSync } = taxAgentStore;
+ this.setState({ syncLoading: true });
+ taxAgentRangeSync({}).then(({ status, data, errormsg }) => {
+ this.setState({ syncLoading: false });
+ if (status) {
+ message.success(data || getLabel(30700, "操作成功"));
+ this.taxAgentTableRef.getTaxAgentList();
+ } else {
+ message.error(data || errormsg || getLabel(30651, "操作失败"));
+ }
+ });
+ };
+ handelResetSlide = (isUpdate = false) => {
+ const { taxAgentStore } = this.props;
+ const { salarytaxAgentForm } = taxAgentStore;
+ this.setState({
+ taxAgentSlideProps: {
+ ...this.state.taxAgentSlideProps,
+ isEdit: false,
+ visible: false,
+ title: getLabel(543629, "新增个税扣缴义务人"),
+ taxAgentId: "",
+ current: 0
+ }
+ }, () => {
+ isUpdate && this.taxAgentTableRef.getTaxAgentList();
+ salarytaxAgentForm.resetForm();
+ });
+ };
+ handleOperate = (type, itemId, current = 0) => {
+ switch (type) {
+ case "edit":
+ this.setState({
+ taxAgentSlideProps: {
+ ...this.state.taxAgentSlideProps,
+ visible: true, title: getLabel(543632, "编辑个税扣缴义务人"),
+ taxAgentId: itemId, current, isEdit: true
+ }
+ });
+ break;
+ case "delete":
+ Modal.confirm({
+ title: getLabel(131329, "信息确认"),
+ content: getLabel(388758, "确认要删除吗?"),
+ onOk: () => {
+ API.deleteTaxAgent([itemId]).then(({ status, errormsg }) => {
+ if (status) {
+ message.success(getLabel(502230, "删除成功"));
+ this.taxAgentTableRef.getTaxAgentList();
+ } else {
+ message.error(errormsg || getLabel(20462, "删除失败"));
+ }
+ });
+ }
+ });
+ break;
+ case "log":
+ this.setState({
+ logDialogVisible: true,
+ filterConditions: itemId ? `[{\"connectCondition\":\"AND\",\"columIndex\":\"targetid\",\"type\":\"=\",\"value\":\"${itemId}\"}]` : "[]"
+ });
+ break;
+ default:
+ break;
+ }
+ };
+
+ render() {
+ const { taxAgentStore: { PageAndOptAuth: permission } } = this.props;
+ const {
+ searchValue, decentralization, taxAgentSlideProps, syncLoading, logDialogVisible, filterConditions
+ } = this.state;
+ const btns = [
+ ,
+ this.setState({ searchValue })}
+ placeholder={getLabel(543634, "请输入个税扣缴义务人名称")}
+ onSearch={() => this.taxAgentTableRef.getTaxAgentList()}
+ />
+ ];
+ const customTitle =
+ {getLabel(537996, "个税扣缴义务人")}
+ {
+ permission.isChief &&
+
+ }
+
;
+ const showOperateBtn = permission.opts.includes("admin");
+ return (
+
+
}
+ iconBgcolor="#F14A2D"
+ buttons={showOperateBtn ? btns : btns.slice(1)}
+ showDropIcon onDropMenuClick={key => this.handleOperate(key)}
+ dropMenuDatas={[
+ {
+ key: "log", icon:
,
+ content: getLabel(545781, "操作日志")
+ }
+ ]}
+ >
+
+ {
+ permission.isChief &&
+
+
+
+
+
+ }
+
+ this.taxAgentTableRef = dom}/>
+
+
+
+
this.taxAgentTableRef.getTaxAgentList()}
+ onCancel={(isUpdate = false) => this.handelResetSlide(isUpdate)}
+ />
+ {/*操作日志*/}
+ this.setState({ logDialogVisible: false })}/>
+
+
+ );
+ }
+}
+
+export default TaxAgent;
diff --git a/pc4mobx/hrmSalary/stores/taxAgent.js b/pc4mobx/hrmSalary/stores/taxAgent.js
index 94d9898f..45fe8041 100644
--- a/pc4mobx/hrmSalary/stores/taxAgent.js
+++ b/pc4mobx/hrmSalary/stores/taxAgent.js
@@ -9,6 +9,13 @@ import { PAGE } from "../config";
const { TableStore } = WeaTableNew;
export class TaxAgentStore {
+ @observable salarytaxAgentForm = new WeaForm(); //新版个税扣缴义务人表单实体
+ @observable taxfillInfoForm = new WeaForm(); //报税信息查看form
+ @action setTaxfillInfoForm = () => this.taxfillInfoForm = new WeaForm(); //报税信息form初始化
+ @observable personScopeForm = new WeaForm(); //个税扣缴义务人新增人员form
+ @action initPersonScopeForm = () => this.personScopeForm = new WeaForm(); //个税扣缴义务人新增人员form初始化
+ @observable deptfillInfoForm = new WeaForm(); //报税信息部门备案form
+ @action initDeptfillInfoForm = () => this.deptfillInfoForm = new WeaForm(); //报税信息部门备案form初始化
@observable advanceForm = new WeaForm(); //权限-角色高级搜索form表单
@observable roleForm = new WeaForm(); //权限-角色form表单
@action initRoleForm = () => this.roleForm = new WeaForm();
@@ -52,6 +59,8 @@ export class TaxAgentStore {
@action setStatisticsReportBtn = bool => (this.statisticsReportBtn = bool);//薪酬统计报表权限
@action setPayrollPermission = bool => (this.payrollPermission = bool);// 薪资核算页面权限
+ @action setSalarytaxAgentForm = () => (this.salarytaxAgentForm = new WeaForm());//薪资项目权限
+
// 初始化操作
@action
doInit = params => {