From 36d90b35a628297ce7646278550e416762ed7907 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E6=B0=B8=E9=A1=BA?= <971387674@qq.com> Date: Thu, 8 Aug 2024 14:36:11 +0800 Subject: [PATCH 01/37] =?UTF-8?q?feature/2.15.1.2407.01-=E6=B5=AE=E5=8A=A8?= =?UTF-8?q?=E8=96=AA=E9=85=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pc4mobx/hrmSalary/apis/variableSalary.js | 10 +++ pc4mobx/hrmSalary/index.js | 11 ++- .../components/advanceInputBtn/index.js | 35 ++++++++ .../components/advanceInputBtn/index.less | 29 +++++++ .../components/salaryItemDialog/index.js | 79 +++++++++++++++++++ .../components/searchPannel/index.js | 70 ++++++++++++++++ .../pages/variableSalary/conditions.js | 52 ++++++++++++ .../hrmSalary/pages/variableSalary/index.js | 71 +++++++++++++++++ .../hrmSalary/pages/variableSalary/index.less | 45 +++++++++++ pc4mobx/hrmSalary/stores/baseTable.js | 26 +++--- 10 files changed, 413 insertions(+), 15 deletions(-) create mode 100644 pc4mobx/hrmSalary/apis/variableSalary.js create mode 100644 pc4mobx/hrmSalary/pages/variableSalary/components/advanceInputBtn/index.js create mode 100644 pc4mobx/hrmSalary/pages/variableSalary/components/advanceInputBtn/index.less create mode 100644 pc4mobx/hrmSalary/pages/variableSalary/components/salaryItemDialog/index.js create mode 100644 pc4mobx/hrmSalary/pages/variableSalary/components/searchPannel/index.js create mode 100644 pc4mobx/hrmSalary/pages/variableSalary/conditions.js create mode 100644 pc4mobx/hrmSalary/pages/variableSalary/index.js create mode 100644 pc4mobx/hrmSalary/pages/variableSalary/index.less diff --git a/pc4mobx/hrmSalary/apis/variableSalary.js b/pc4mobx/hrmSalary/apis/variableSalary.js new file mode 100644 index 00000000..cdfdde70 --- /dev/null +++ b/pc4mobx/hrmSalary/apis/variableSalary.js @@ -0,0 +1,10 @@ +import { postFetch } from "../util/request"; + +//浮动薪酬项目列表 +export const getVariableSalaryItemList = params => { + return postFetch("/api/bs/hrmsalary/variableSalaryItem/listPage", params); +}; +//保存/更新 浮动薪酬项目 +export const saveVariableSalaryItem = params => { + return postFetch("/api/bs/hrmsalary/variableSalaryItem/save", params); +}; diff --git a/pc4mobx/hrmSalary/index.js b/pc4mobx/hrmSalary/index.js index fff7a3d1..c11b384c 100644 --- a/pc4mobx/hrmSalary/index.js +++ b/pc4mobx/hrmSalary/index.js @@ -52,6 +52,7 @@ import ExternalPersonManage from "./pages/externalPersonManage"; import AdjustSalaryManage from "./pages/adjustSalaryManage"; import TopologyMap from "./pages/topologyMap"; import SupplementaryCalc from "./pages/supplementaryCalc"; +import VariableSalary from "./pages/variableSalary"; import stores from "./stores"; import "./style/index"; @@ -112,9 +113,10 @@ const DataAcquisition = (props) => props.children; // externalPersonManage 非系统人员管理 // adjustSalaryManage 档案管理 // supplementaryCalc 补算 +// variableSalary 浮动薪酬 const Routes = ( - + @@ -124,8 +126,8 @@ const Routes = ( - - + + @@ -152,7 +154,7 @@ const Routes = ( - + @@ -166,6 +168,7 @@ const Routes = ( + ); diff --git a/pc4mobx/hrmSalary/pages/variableSalary/components/advanceInputBtn/index.js b/pc4mobx/hrmSalary/pages/variableSalary/components/advanceInputBtn/index.js new file mode 100644 index 00000000..7e981704 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/variableSalary/components/advanceInputBtn/index.js @@ -0,0 +1,35 @@ +/* + * Author: 黎永顺 + * name:薪酬统计报表-高级搜索 + * Description: + * Date: 2024/3/26 + */ +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("baseTableStore") +@observer +class Index extends Component { + render() { + const { baseTableStore: { VSalryForm }, searchType } = this.props; + return ( +
+ VSalryForm.updateFields({ keyword: v })} + onSearch={this.props.onAdvanceSearch} + /> + { + searchType === "advance" && + } +
+ ); + } +} + +export default Index; diff --git a/pc4mobx/hrmSalary/pages/variableSalary/components/advanceInputBtn/index.less b/pc4mobx/hrmSalary/pages/variableSalary/components/advanceInputBtn/index.less new file mode 100644 index 00000000..9081d39f --- /dev/null +++ b/pc4mobx/hrmSalary/pages/variableSalary/components/advanceInputBtn/index.less @@ -0,0 +1,29 @@ +.achrive-advance-search { + display: flex; + align-items: center; + position: relative; + top: -1.5px; + + .wea-advanced-search { + top: 2px; + 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; + top: 1px; + } +} diff --git a/pc4mobx/hrmSalary/pages/variableSalary/components/salaryItemDialog/index.js b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryItemDialog/index.js new file mode 100644 index 00000000..71eba98b --- /dev/null +++ b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryItemDialog/index.js @@ -0,0 +1,79 @@ +import React, { Component } from "react"; +import { inject, observer } from "mobx-react"; +import { WeaDialog, WeaLocaleProvider, WeaTools } from "ecCom"; +import { Button, message } from "antd"; +import { getSearchs } from "../../../../util"; +import { salaryItemsConditions } from "../../conditions"; +import * as API from "../../../../apis/variableSalary"; + +const getKey = WeaTools.getKey; +const getLabel = WeaLocaleProvider.getLabel; + +@inject("baseTableStore") +@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) this.props.baseTableStore.initVSSalaryItemForm(); + } + + initForm = (props) => { + const { baseTableStore: { VSSalaryItemForm } } = props; + this.setState({ + conditions: _.map(salaryItemsConditions, item => ({ + ...item, + items: _.map(item.items, o => { + if (getKey(o) === "dataType") { + return { ...o, options: _.map(o.options, g => ({ ...g, showname: getLabel(g.lanId, g.showname) })) }; + } + return { ...o, label: getLabel(o.lanId, o.label) }; + }) + })) + }, () => VSSalaryItemForm.initFormFields(this.state.conditions)); + }; + save = () => { + const { baseTableStore: { VSSalaryItemForm }, onSearch } = this.props; + VSSalaryItemForm.validateForm().then(f => { + if (f.isValid) { + const payload = VSSalaryItemForm.getFormParams(); + this.setState({ loading: true }); + API.saveVariableSalaryItem({ ...payload }).then(({ status, errormsg }) => { + this.setState({ loading: false }); + if (status) { + message.success(getLabel(30700, "操作成功")); + this.props.onCancel(onSearch()); + } else { + message.error(errormsg); + } + }).catch(() => this.setState({ loading: false })); + } else { + f.showErrors(); + } + }); + }; + + render() { + const { conditions, loading } = this.state; + const { baseTableStore: { calculateForm } } = this.props; + return ( + {getLabel(111, "取消")}, + + ]} + > +
{getSearchs(calculateForm, conditions, 1, false)}
+
+ ); + } +} + +export default Index; diff --git a/pc4mobx/hrmSalary/pages/variableSalary/components/searchPannel/index.js b/pc4mobx/hrmSalary/pages/variableSalary/components/searchPannel/index.js new file mode 100644 index 00000000..d5b274a9 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/variableSalary/components/searchPannel/index.js @@ -0,0 +1,70 @@ +/* + * Author: 黎永顺 + * name:薪酬统计报薪资明细-高级查询 + * Description: + * Date: 2024/3/26 + */ +import React, { Component } from "react"; +import { WeaLocaleProvider, WeaTools } from "ecCom"; +import { Button } from "antd"; +import { inject, observer } from "mobx-react"; +import { getSearchs } from "../../../../util"; +import { conditions } from "../../conditions"; + +const getLabel = WeaLocaleProvider.getLabel; +const getKey = WeaTools.getKey; + +@inject("baseTableStore") +@observer +class VariableSalarySearchPannel extends Component { + constructor(props) { + super(props); + this.state = { + searchConditions: [] + }; + } + + componentDidMount() { + this.setState({ + searchConditions: _.map(conditions, item => { + return { + ...item, + items: _.map(item.items, child => { + return { ...child, label: getLabel(child.lanId, child.label) }; + }) + }; + }) + }, () => { + const { baseTableStore: { VSalryForm } } = this.props; + VSalryForm.initFormFields(this.state.searchConditions); + }); + } + + render() { + const { searchConditions } = this.state; + const { baseTableStore: { VSalryForm } } = this.props; + return ( + +
+ {getSearchs(VSalryForm, searchConditions, 2, false)} +
+
+
+ + + + + + + + + +
+
+
+ ); + } +} + +export default VariableSalarySearchPannel; + diff --git a/pc4mobx/hrmSalary/pages/variableSalary/conditions.js b/pc4mobx/hrmSalary/pages/variableSalary/conditions.js new file mode 100644 index 00000000..ae943a2d --- /dev/null +++ b/pc4mobx/hrmSalary/pages/variableSalary/conditions.js @@ -0,0 +1,52 @@ +export const conditions = [ + { + items: [ + { + conditionType: "INPUT", + domkey: ["dimName"], + fieldcol: 14, + label: "测试", + labelcol: 6, + value: "", + rules: "required|string", + viewAttr: 3 + } + ], + title: "", + defaultshow: true + } +]; +export const salaryItemsConditions = [ + { + items: [ + { + conditionType: "INPUT", + domkey: ["name"], + fieldcol: 14, + label: "名称", + lanId: 111, + labelcol: 6, + value: "", + rules: "required|string", + viewAttr: 3 + }, + { + conditionType: "SELECT", + domkey: ["dataType"], + fieldcol: 14, + label: "字段类型", + lanId: 111, + labelcol: 6, + value: "", + options: [ + { key: "number", showname: "数值", lanId: 111, selected: true }, + { key: "string", showname: "字符", lanId: 111, selected: false } + ], + rules: "required|string", + viewAttr: 3 + } + ], + title: "", + defaultshow: true + } +]; diff --git a/pc4mobx/hrmSalary/pages/variableSalary/index.js b/pc4mobx/hrmSalary/pages/variableSalary/index.js new file mode 100644 index 00000000..abf682d3 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/variableSalary/index.js @@ -0,0 +1,71 @@ +/* + * 浮动薪酬 + * + * @Author: 黎永顺 + * @Date: 2024/8/8 + * @Wechat: + * @Email: 971387674@qq.com + * @description: +*/ +import React, { Component } from "react"; +import { inject, observer } from "mobx-react"; +import { WeaLocaleProvider, WeaReqTop } from "ecCom"; +import AdvanceInputBtn from "./components/advanceInputBtn"; +import SearchPannel from "./components/searchPannel"; +import SalaryItemDialog from "./components/salaryItemDialog"; +import { Button } from "antd"; +import cs from "classnames"; + +const getLabel = WeaLocaleProvider.getLabel; + +@inject("taxAgentStore", "baseTableStore") +@observer +class Index extends Component { + constructor(props) { + super(props); + this.state = { + selectedKey: "salaryFile", isQuery: false, + SIDialog: { visible: false, title: "" } //薪资项目薪资编辑弹框 + }; + } + + handleAdvanceSearch = () => this.setState({ isQuery: !this.state.isQuery }); + + render() { + const { selectedKey, SIDialog } = this.state; + const { taxAgentStore: { showOperateBtn } } = this.props; + const tabs = [ + { + title: getLabel(111, "薪资档案"), key: "salaryFile", + buttons: showOperateBtn ? [] : [] + }, + { + title: getLabel(111, "薪资项目"), key: "salaryItem", + buttons: showOperateBtn ? [ + , + + ] : [] + } + ]; + return ( + } selectedKey={selectedKey} + iconBgcolor="#F14A2D" tabDatas={tabs} className="variable_salary_wrapper" + buttons={_.find(tabs, o => selectedKey === o.key).buttons} buttonSpace={10} + onChange={selectedKey => this.setState({ selectedKey })} + showDropIcon={false} + > +
+ this.setState({ showSearchAd: false })} onAdSearch={this.onAdSearch}/> +
+ this.setState({ + SIDialog: { ...SIDialog, visible: false } + }, () => callback && callback())}/> +
+ ); + } +} + +export default Index; diff --git a/pc4mobx/hrmSalary/pages/variableSalary/index.less b/pc4mobx/hrmSalary/pages/variableSalary/index.less new file mode 100644 index 00000000..a487afd7 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/variableSalary/index.less @@ -0,0 +1,45 @@ +.variable_salary_wrapper { + .searchAdvanced-condition-hide { + display: none; + } + + .searchAdvanced-condition-container { + background: #FFF; + margin-bottom: 10px; + border: 1px solid #e5e5e5; + + .wea-search-buttons { + border-top: 1px solid #dadada; + padding: 15px 0; + } + + .wea-advanced-searchsAd { + height: 155px; + overflow: hidden auto; + + .formItem-delete { + position: absolute; + top: 0; + right: -40px; + } + + .searchAdvanced-commonSelect { + border-top: 1px solid #ebebeb; + margin: 0 25px; + padding: 10px 0; + } + + .custom-advance-largeSpacing { + padding-left: 26px; + + .link { + border: none; + border-radius: 0; + padding: 12px 10px 12px 26px; + color: #2db7f5 + } + } + + } + } +} diff --git a/pc4mobx/hrmSalary/stores/baseTable.js b/pc4mobx/hrmSalary/stores/baseTable.js index cc639b54..75106e3a 100644 --- a/pc4mobx/hrmSalary/stores/baseTable.js +++ b/pc4mobx/hrmSalary/stores/baseTable.js @@ -1,8 +1,8 @@ -import { observable, action, toJS } from 'mobx'; -import { message } from 'antd'; -import { WeaForm, WeaTableNew } from 'comsMobx'; +import { action, observable } from "mobx"; +import { message } from "antd"; +import { WeaForm, WeaTableNew } from "comsMobx"; -import * as API from '../apis'; // 引入API接口文件 +import * as API from "../apis"; // 引入API接口文件 const { TableStore } = WeaTableNew; @@ -14,12 +14,16 @@ export class BaseTableStore { @observable showSearchAd = false; // 高级搜索面板显示 @observable loading = true; // 数据加载状态 + // 浮动薪酬相关 + @observable VSalryForm = new WeaForm(); // 浮动薪酬查询form + @observable VSSalaryItemForm = new WeaForm(); // 新增浮动薪酬项目form + @action initVSSalaryItemForm = () => this.VSSalaryItemForm = new WeaForm(); // 初始化操作 @action doInit = () => { this.getCondition(); this.getTableDatas(); - } + }; // 获得高级搜索表单数据 @action @@ -29,10 +33,10 @@ export class BaseTableStore { this.condition = res.condition; this.form.initFormFields(res.condition); // 渲染高级搜索form表单 } else { - message.error(res.msg || '接口调用失败!') + message.error(res.msg || "接口调用失败!"); } })); - } + }; // 渲染table数据 @action @@ -45,11 +49,11 @@ export class BaseTableStore { this.tableStore.getDatas(res.datas); // table 请求数据 this.hasRight = res.hasRight; } else { - message.error(res.msg || '接口调用失败!') + message.error(res.msg || "接口调用失败!"); } this.loading = false; })); - } + }; @action setShowSearchAd = bool => this.showSearchAd = bool; @@ -58,6 +62,6 @@ export class BaseTableStore { @action doSearch = () => { this.getTableDatas(); this.showSearchAd = false; - } + }; -} \ No newline at end of file +} From 70fe54efb74cf1a6a206e0580db144b278d091c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E6=B0=B8=E9=A1=BA?= <971387674@qq.com> Date: Thu, 8 Aug 2024 17:32:54 +0800 Subject: [PATCH 02/37] =?UTF-8?q?feature/2.15.1.2407.01-=E6=B5=AE=E5=8A=A8?= =?UTF-8?q?=E8=96=AA=E9=85=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pc4mobx/hrmSalary/apis/variableSalary.js | 13 ++ .../components/advanceInputBtn/index.js | 6 +- .../components/advanceInputBtn/index.less | 3 +- .../components/salaryFileDialog/index.js | 112 ++++++++++++++++ .../components/salaryItemDialog/index.js | 31 ++--- .../components/salaryItemList/index.js | 113 ++++++++++++++++ .../pages/variableSalary/conditions.js | 121 +++++++++++++++++- .../hrmSalary/pages/variableSalary/index.js | 49 ++++++- .../hrmSalary/pages/variableSalary/index.less | 64 ++++++++- pc4mobx/hrmSalary/stores/baseTable.js | 5 +- pc4mobx/hrmSalary/style/index.less | 7 + 11 files changed, 491 insertions(+), 33 deletions(-) create mode 100644 pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileDialog/index.js create mode 100644 pc4mobx/hrmSalary/pages/variableSalary/components/salaryItemList/index.js diff --git a/pc4mobx/hrmSalary/apis/variableSalary.js b/pc4mobx/hrmSalary/apis/variableSalary.js index cdfdde70..2f214881 100644 --- a/pc4mobx/hrmSalary/apis/variableSalary.js +++ b/pc4mobx/hrmSalary/apis/variableSalary.js @@ -4,7 +4,20 @@ import { postFetch } from "../util/request"; export const getVariableSalaryItemList = params => { return postFetch("/api/bs/hrmsalary/variableSalaryItem/listPage", params); }; +//删除浮动薪酬项目 +export const deleteVariableSalaryItem = params => { + return postFetch("/api/bs/hrmsalary/variableSalaryItem/delete", params); +}; +//获取浮动薪酬项目详情 +export const getVariableSalaryItemDetail = params => { + return postFetch("/api/bs/hrmsalary/variableSalaryItem/getDetail", params); +}; //保存/更新 浮动薪酬项目 export const saveVariableSalaryItem = params => { return postFetch("/api/bs/hrmsalary/variableSalaryItem/save", params); }; + +//创建浮动薪酬档案时获取项目信息 +export const getCreateForm = params => { + return postFetch("/api/bs/hrmsalary/variableSalary/getCreateForm", params); +}; diff --git a/pc4mobx/hrmSalary/pages/variableSalary/components/advanceInputBtn/index.js b/pc4mobx/hrmSalary/pages/variableSalary/components/advanceInputBtn/index.js index 7e981704..9ef6b2d2 100644 --- a/pc4mobx/hrmSalary/pages/variableSalary/components/advanceInputBtn/index.js +++ b/pc4mobx/hrmSalary/pages/variableSalary/components/advanceInputBtn/index.js @@ -18,9 +18,9 @@ class Index extends Component { render() { const { baseTableStore: { VSalryForm }, searchType } = this.props; return ( -
- VSalryForm.updateFields({ keyword: v })} +
+ VSalryForm.updateFields({ username: v })} onSearch={this.props.onAdvanceSearch} /> { diff --git a/pc4mobx/hrmSalary/pages/variableSalary/components/advanceInputBtn/index.less b/pc4mobx/hrmSalary/pages/variableSalary/components/advanceInputBtn/index.less index 9081d39f..ba4f56fc 100644 --- a/pc4mobx/hrmSalary/pages/variableSalary/components/advanceInputBtn/index.less +++ b/pc4mobx/hrmSalary/pages/variableSalary/components/advanceInputBtn/index.less @@ -1,4 +1,4 @@ -.achrive-advance-search { +.salaryItem-advance-search { display: flex; align-items: center; position: relative; @@ -24,6 +24,5 @@ overflow: hidden; white-space: nowrap; text-overflow: ellipsis; - top: 1px; } } diff --git a/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileDialog/index.js b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileDialog/index.js new file mode 100644 index 00000000..f29cae1a --- /dev/null +++ b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileDialog/index.js @@ -0,0 +1,112 @@ +/* + * 浮动薪酬 + * 新建编辑薪资档案 + * @Author: 黎永顺 + * @Date: 2024/8/8 + * @Wechat: + * @Email: 971387674@qq.com + * @description: +*/ +import React, { Component } from "react"; +import { inject, observer } from "mobx-react"; +import { WeaLocaleProvider, WeaSlideModal, WeaTools } from "ecCom"; +import { Button, message } from "antd"; +import { getSearchs } from "../../../../util"; +import { salaryFileConditions } from "../../conditions"; +import * as API from "../../../../apis/variableSalary"; + +const getKey = WeaTools.getKey; +const getLabel = WeaLocaleProvider.getLabel; + +@inject("baseTableStore") +@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) { + document.querySelector(".variable_salary_wrapper").classList.add("zIndex0-weaslide-title"); + this.initForm(nextProps); + } else if (nextProps.visible !== this.props.visible && !nextProps.visible) { + document.querySelector(".variable_salary_wrapper").classList.remove("zIndex0-weaslide-title"); + this.props.baseTableStore.initVSSalaryFileForm(); + } + } + + initForm = (props) => { + const { baseTableStore: { VSSalaryFileForm } } = props; + API.getCreateForm().then(({ status, data }) => { + this.setState({ + conditions: [ + ..._.map(salaryFileConditions, item => ({ + ...item, + items: _.map(item.items, o => ({ ...o, label: getLabel(o.lanId, o.label) })) + })), + { + items: _.map(data, o => ({ + conditionType: "INPUT", + domkey: [String(o.id)], + fieldcol: 14, + label: o.name, + labelcol: 6, + value: "", + viewAttr: 2 + })), + title: "", col: 2, + defaultshow: true + } + ] + }, () => VSSalaryFileForm.initFormFields(this.state.conditions)); + }); + }; + save = () => { + const { baseTableStore: { VSSalaryFileForm }, onSearch, id } = this.props; + VSSalaryFileForm.validateForm().then(f => { + if (f.isValid) { + const payload = VSSalaryFileForm.getFormParams(); + this.setState({ loading: true }); + API.saveVariableSalaryItem({ ...payload, id }) + .then(({ status, errormsg }) => { + this.setState({ loading: false }); + if (status) { + message.success(getLabel(30700, "操作成功")); + this.props.onCancel(onSearch()); + } else { + message.error(errormsg); + } + }).catch(() => this.setState({ loading: false })); + } else { + f.showErrors(); + } + }); + }; + renderTitle = () => { + const { loading } = this.state, { title } = this.props; + return
+
+
+
{title}
+
+
+ +
+
; + }; + + render() { + const { conditions, loading } = this.state; + const { baseTableStore: { VSSalaryFileForm }, onClose } = this.props; + return ( onClose()} + top={0} width={800} height={100} measureT="%" measureX="px" measureY="%" title={this.renderTitle()} + content={
{getSearchs(VSSalaryFileForm, conditions)}
} + />); + } +} + +export default Index; diff --git a/pc4mobx/hrmSalary/pages/variableSalary/components/salaryItemDialog/index.js b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryItemDialog/index.js index 71eba98b..cc4d456d 100644 --- a/pc4mobx/hrmSalary/pages/variableSalary/components/salaryItemDialog/index.js +++ b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryItemDialog/index.js @@ -39,20 +39,21 @@ class Index extends Component { }, () => VSSalaryItemForm.initFormFields(this.state.conditions)); }; save = () => { - const { baseTableStore: { VSSalaryItemForm }, onSearch } = this.props; + const { baseTableStore: { VSSalaryItemForm }, onSearch, id } = this.props; VSSalaryItemForm.validateForm().then(f => { if (f.isValid) { const payload = VSSalaryItemForm.getFormParams(); this.setState({ loading: true }); - API.saveVariableSalaryItem({ ...payload }).then(({ status, errormsg }) => { - this.setState({ loading: false }); - if (status) { - message.success(getLabel(30700, "操作成功")); - this.props.onCancel(onSearch()); - } else { - message.error(errormsg); - } - }).catch(() => this.setState({ loading: false })); + API.saveVariableSalaryItem({ ...payload, id }) + .then(({ status, errormsg }) => { + this.setState({ loading: false }); + if (status) { + message.success(getLabel(30700, "操作成功")); + this.props.onCancel(onSearch()); + } else { + message.error(errormsg); + } + }).catch(() => this.setState({ loading: false })); } else { f.showErrors(); } @@ -61,16 +62,16 @@ class Index extends Component { render() { const { conditions, loading } = this.state; - const { baseTableStore: { calculateForm } } = this.props; + const { baseTableStore: { VSSalaryItemForm } } = this.props; return ( {getLabel(111, "取消")}, - + , + ]} > -
{getSearchs(calculateForm, conditions, 1, false)}
+
{getSearchs(VSSalaryItemForm, conditions, 1, false)}
); } diff --git a/pc4mobx/hrmSalary/pages/variableSalary/components/salaryItemList/index.js b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryItemList/index.js new file mode 100644 index 00000000..210df203 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryItemList/index.js @@ -0,0 +1,113 @@ +/* + * 浮动薪酬 + * 薪资项目列表 + * @Author: 黎永顺 + * @Date: 2024/8/8 + * @Wechat: + * @Email: 971387674@qq.com + * @description: +*/ +import React, { Component } from "react"; +import { WeaLocaleProvider, WeaTable } from "ecCom"; +import { message, Modal } from "antd"; +import * as API from "../../../../apis/variableSalary"; + +const getLabel = WeaLocaleProvider.getLabel; + +class Index extends Component { + constructor(props) { + super(props); + this.state = { + pageInfo: { current: 1, pageSize: 10, total: 0 }, loading: false, dataSource: [], columns: [] + }; + } + + componentDidMount() { + this.getVariableSalaryItemList(); + } + + componentWillReceiveProps(nextProps, nextContext) { + if (nextProps.isQuery !== this.props.isQuery) this.setState({ + pageInfo: { ...this.state.pageInfo, current: 1 } + }, () => this.getVariableSalaryItemList()); + } + + getVariableSalaryItemList = () => { + const { baseTableStore: { VSalryForm } } = this.props; + const { pageInfo } = this.state; + const { username: itemName } = VSalryForm.getFormParams(); + this.setState({ loading: true }); + API.getVariableSalaryItemList({ ...pageInfo, itemName }).then(({ status, data }) => { + this.setState({ loading: false }); + if (status) { + const { list: dataSource, columns, pageNum: current, pageSize, total } = data; + this.setState({ + pageInfo: { ...pageInfo, current, pageSize, total }, dataSource, + columns: [ + ..._.filter(columns, o => o.dataIndex !== "id"), + { + title: getLabel(111, "操作"), dataIndex: "oprate", + render: (__, record) => ( + this.handleEdit(record.id)}>{getLabel(111, "编辑")} + { + record.canDelete && this.handleDelete([record.id])}>{getLabel(111, "删除")} + } + ) + } + ] + } + ); + } + }); + }; + handleEdit = (id) => { + API.getVariableSalaryItemDetail({ id }).then(({ status, data }) => { + if (status) this.props.onEditSalaryItem(data); + }); + }; + handleDelete = (itemIds) => { + Modal.confirm({ + title: getLabel(111, "信息确认"), + content: getLabel(111, "确认删除吗?"), + onOk: () => { + API.deleteVariableSalaryItem({ itemIds }).then(({ status, errormsg }) => { + if (status) { + message.success(getLabel(111, "删除成功")); + this.getVariableSalaryItemList(); + } else { + message.error(errormsg); + } + }); + } + }); + }; + + 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.getVariableSalaryItemList()); + }, + onChange: current => { + this.setState({ + pageInfo: { ...pageInfo, current } + }, () => this.getVariableSalaryItemList()); + } + }; + return ( + + ); + } +} + +export default Index; diff --git a/pc4mobx/hrmSalary/pages/variableSalary/conditions.js b/pc4mobx/hrmSalary/pages/variableSalary/conditions.js index ae943a2d..49ca43de 100644 --- a/pc4mobx/hrmSalary/pages/variableSalary/conditions.js +++ b/pc4mobx/hrmSalary/pages/variableSalary/conditions.js @@ -3,13 +3,75 @@ export const conditions = [ items: [ { conditionType: "INPUT", - domkey: ["dimName"], + domkey: ["itemName"], fieldcol: 14, - label: "测试", + label: "项目名称", + lanId: 111, labelcol: 6, value: "", - rules: "required|string", - viewAttr: 3 + hide: true, + viewAttr: 2 + }, + { + conditionType: "INPUT", + domkey: ["username"], + fieldcol: 14, + label: "名称", + lanId: 111, + labelcol: 6, + value: "", + viewAttr: 2 + }, + { + conditionType: "MONTHPICKER", + domkey: ["salaryMonth"], + fieldcol: 14, + label: "薪资所属月", + lanId: 111, + labelcol: 6, + value: "", + viewAttr: 2 + }, + { + browserConditionParam: { + completeParams: {}, + conditionDataParams: {}, + dataParams: {}, + destDataParams: {}, + hasAddBtn: false, + hasAdvanceSerach: false, + idSeparator: ",", + isAutoComplete: 1, + isDetail: 0, + isMultCheckbox: false, + isSingle: false, + icon: "icon-coms-hrm", + linkUrl: "", + pageSize: 10, + quickSearchName: "", + replaceDatas: [], + title: "", + type: "57", + viewAttr: 2 + }, + conditionType: "BROWSER", + domkey: ["departmentIds"], + fieldcol: 14, + label: "部门", + lanId: 111, + labelcol: 6, + value: "", + viewAttr: 2 + }, + { + conditionType: "INPUT", + domkey: ["workcode"], + fieldcol: 14, + label: "工号", + lanId: 111, + labelcol: 6, + value: "", + viewAttr: 2 } ], title: "", @@ -50,3 +112,54 @@ export const salaryItemsConditions = [ defaultshow: true } ]; +export const salaryFileConditions = [ + { + items: [ + { + conditionType: "MONTHPICKER", + domkey: ["salaryMonth"], + fieldcol: 14, + label: "薪资所属月", + lanId: 111, + labelcol: 6, + value: "", + rules: "required|string", + viewAttr: 3 + }, + { + browserConditionParam: { + completeParams: {}, + conditionDataParams: {}, + dataParams: {}, + destDataParams: {}, + hasAddBtn: false, + hasAdvanceSerach: false, + idSeparator: ",", + isAutoComplete: 1, + isDetail: 0, + isMultCheckbox: false, + isSingle: true, + icon: "icon-coms-hrm", + linkUrl: "", + pageSize: 10, + quickSearchName: "", + replaceDatas: [], + title: "", + type: "1", + viewAttr: 2 + }, + conditionType: "BROWSER", + domkey: ["employeeId"], + fieldcol: 14, + label: "人员", + lanId: 111, + labelcol: 6, + value: "", + rules: "required|string", + viewAttr: 3 + } + ], + title: "", col: 1, + defaultshow: true + } +]; diff --git a/pc4mobx/hrmSalary/pages/variableSalary/index.js b/pc4mobx/hrmSalary/pages/variableSalary/index.js index abf682d3..bc73021f 100644 --- a/pc4mobx/hrmSalary/pages/variableSalary/index.js +++ b/pc4mobx/hrmSalary/pages/variableSalary/index.js @@ -13,8 +13,11 @@ import { WeaLocaleProvider, WeaReqTop } from "ecCom"; import AdvanceInputBtn from "./components/advanceInputBtn"; import SearchPannel from "./components/searchPannel"; import SalaryItemDialog from "./components/salaryItemDialog"; +import SalaryFileDialog from "./components/salaryFileDialog"; +import SalaryItemList from "./components/salaryItemList"; import { Button } from "antd"; import cs from "classnames"; +import "./index.less"; const getLabel = WeaLocaleProvider.getLabel; @@ -24,29 +27,55 @@ class Index extends Component { constructor(props) { super(props); this.state = { - selectedKey: "salaryFile", isQuery: false, - SIDialog: { visible: false, title: "" } //薪资项目薪资编辑弹框 + selectedKey: "salaryFile", isQuery: false, showSearchAd: false, + SIDialog: { visible: false, title: "", id: "" }, //薪资项目薪资编辑弹框 + SFDialog: { visible: false, title: "", id: "" } //薪资档案编辑弹框 }; } handleAdvanceSearch = () => this.setState({ isQuery: !this.state.isQuery }); + openAdvanceSearch = () => this.setState({ showSearchAd: !this.state.showSearchAd }); + handleOperate = (type) => { + switch (type) { + case "create": + this.setState({ + SFDialog: { visible: true, id: "", title: getLabel(111, "新增薪资档案") } + }); + break; + default: + break; + } + }; render() { - const { selectedKey, SIDialog } = this.state; - const { taxAgentStore: { showOperateBtn } } = this.props; + const { selectedKey, SIDialog, SFDialog, showSearchAd, isQuery } = this.state; + const { taxAgentStore: { showOperateBtn }, baseTableStore: { VSSalaryItemForm } } = this.props; const tabs = [ { title: getLabel(111, "薪资档案"), key: "salaryFile", - buttons: showOperateBtn ? [] : [] + buttons: showOperateBtn ? [ + , + , + , + this.openAdvanceSearch()} + onAdvanceSearch={this.handleAdvanceSearch}/> + ] : [ this.openAdvanceSearch()} + onAdvanceSearch={this.handleAdvanceSearch}/>], + children: null }, { title: getLabel(111, "薪资项目"), key: "salaryItem", buttons: showOperateBtn ? [ , - ] : [] + ] : [], + children: this.setState({ + SIDialog: { visible: true, id: data.id, title: getLabel(111, "编辑薪资项目") } + }, () => VSSalaryItemForm.updateFields({ + name: data.name, dataType: data.dataType + }))}/> } ]; return ( @@ -60,9 +89,15 @@ class Index extends Component {
this.setState({ showSearchAd: false })} onAdSearch={this.onAdSearch}/>
+ {_.find(tabs, o => selectedKey === o.key).children} + {/*薪资项目*/} this.setState({ SIDialog: { ...SIDialog, visible: false } }, () => callback && callback())}/> + {/*薪资档案*/} + this.setState({ + SFDialog: { ...SFDialog, visible: false } + }, () => callback && callback())}/> ); } diff --git a/pc4mobx/hrmSalary/pages/variableSalary/index.less b/pc4mobx/hrmSalary/pages/variableSalary/index.less index a487afd7..1c1dd906 100644 --- a/pc4mobx/hrmSalary/pages/variableSalary/index.less +++ b/pc4mobx/hrmSalary/pages/variableSalary/index.less @@ -1,4 +1,17 @@ .variable_salary_wrapper { + .wea-new-top-req-title > div:last-child { + right: 16px !important; + } + + .wea-new-top-req-content { + padding: 16px; + + .wea-new-table { + background: #FFF; + } + + } + .searchAdvanced-condition-hide { display: none; } @@ -14,7 +27,7 @@ } .wea-advanced-searchsAd { - height: 155px; + height: 108px; overflow: hidden auto; .formItem-delete { @@ -42,4 +55,53 @@ } } + + .variable_salary_file_dialog { + .wea-slide-modal-title { + border-bottom: 1px solid #e5e5e5 !important; + } + + .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; + } + } + } + } } diff --git a/pc4mobx/hrmSalary/stores/baseTable.js b/pc4mobx/hrmSalary/stores/baseTable.js index 75106e3a..8598d0cb 100644 --- a/pc4mobx/hrmSalary/stores/baseTable.js +++ b/pc4mobx/hrmSalary/stores/baseTable.js @@ -16,8 +16,11 @@ export class BaseTableStore { // 浮动薪酬相关 @observable VSalryForm = new WeaForm(); // 浮动薪酬查询form - @observable VSSalaryItemForm = new WeaForm(); // 新增浮动薪酬项目form + @observable VSSalaryItemForm = new WeaForm(); // 新增编辑浮动薪酬项目form @action initVSSalaryItemForm = () => this.VSSalaryItemForm = new WeaForm(); + @observable VSSalaryFileForm = new WeaForm(); // 新增编辑薪资档案form + @action initVSSalaryFileForm = () => this.VSSalaryFileForm = new WeaForm(); + // 初始化操作 @action doInit = () => { diff --git a/pc4mobx/hrmSalary/style/index.less b/pc4mobx/hrmSalary/style/index.less index 4ce6ef7a..ea74c23c 100644 --- a/pc4mobx/hrmSalary/style/index.less +++ b/pc4mobx/hrmSalary/style/index.less @@ -83,3 +83,10 @@ } +//公共slide框标题样式 +.zIndex0-weaslide-title { + .wea-new-top-req { + z-index: 0 !important; + } +} + From 86de787ed4512759de1355401275a9c823a9e4ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E6=B0=B8=E9=A1=BA?= <971387674@qq.com> Date: Thu, 8 Aug 2024 18:24:45 +0800 Subject: [PATCH 03/37] =?UTF-8?q?feature/2.15.1.2407.01-=E6=B5=AE=E5=8A=A8?= =?UTF-8?q?=E8=96=AA=E9=85=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pc4mobx/hrmSalary/apis/variableSalary.js | 8 ++ .../components/salaryFileDialog/index.js | 12 +- .../components/salaryFileList/index.js | 118 ++++++++++++++++++ .../pages/variableSalary/conditions.js | 12 +- .../hrmSalary/pages/variableSalary/index.js | 17 ++- .../hrmSalary/pages/variableSalary/index.less | 4 + 6 files changed, 154 insertions(+), 17 deletions(-) create mode 100644 pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileList/index.js diff --git a/pc4mobx/hrmSalary/apis/variableSalary.js b/pc4mobx/hrmSalary/apis/variableSalary.js index 2f214881..04bbeb02 100644 --- a/pc4mobx/hrmSalary/apis/variableSalary.js +++ b/pc4mobx/hrmSalary/apis/variableSalary.js @@ -21,3 +21,11 @@ export const saveVariableSalaryItem = params => { export const getCreateForm = params => { return postFetch("/api/bs/hrmsalary/variableSalary/getCreateForm", params); }; +//创建浮动薪酬档案 +export const createVariableSalary = params => { + return postFetch("/api/bs/hrmsalary/variableSalary/createData", params); +}; +//创建浮动薪酬档案 +export const getVariableSalaryList = params => { + return postFetch("/api/bs/hrmsalary/variableSalary/list", params); +}; diff --git a/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileDialog/index.js b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileDialog/index.js index f29cae1a..6297a558 100644 --- a/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileDialog/index.js +++ b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileDialog/index.js @@ -64,13 +64,23 @@ class Index extends Component { }, () => VSSalaryFileForm.initFormFields(this.state.conditions)); }); }; + convertPayload = (payload) => { + return _.reduce(_.keys(payload), (pre, cur) => { + if (!_.isNaN(parseInt(cur))) { + return { ...pre, itemValueList: [{ variableItemId: cur, itemValue: payload[cur] }] }; + } + return { ...pre, [cur]: payload[cur] }; + }, {}); + }; save = () => { const { baseTableStore: { VSSalaryFileForm }, onSearch, id } = this.props; VSSalaryFileForm.validateForm().then(f => { if (f.isValid) { const payload = VSSalaryFileForm.getFormParams(); + console.log(payload); + return; this.setState({ loading: true }); - API.saveVariableSalaryItem({ ...payload, id }) + API.createVariableSalary({ ...payload, id }) .then(({ status, errormsg }) => { this.setState({ loading: false }); if (status) { diff --git a/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileList/index.js b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileList/index.js new file mode 100644 index 00000000..6ec040bb --- /dev/null +++ b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileList/index.js @@ -0,0 +1,118 @@ +/* + * 浮动薪酬 + * 薪资档案列表 + * @Author: 黎永顺 + * @Date: 2024/8/8 + * @Wechat: + * @Email: 971387674@qq.com + * @description: +*/ +import React, { Component } from "react"; +import { WeaLocaleProvider, WeaTable } from "ecCom"; +import { message, Modal } from "antd"; +import * as API from "../../../../apis/variableSalary"; + +const getLabel = WeaLocaleProvider.getLabel; + +class Index extends Component { + constructor(props) { + super(props); + this.state = { + pageInfo: { current: 1, pageSize: 10, total: 0 }, loading: false, dataSource: [], columns: [] + }; + } + + componentDidMount() { + this.getVariableSalaryList(); + } + + componentWillReceiveProps(nextProps, nextContext) { + if (nextProps.isQuery !== this.props.isQuery) this.setState({ + pageInfo: { ...this.state.pageInfo, current: 1 } + }, () => this.getVariableSalaryList()); + } + + getVariableSalaryList = () => { + const { baseTableStore: { VSalryForm }, salaryMonth } = this.props; + const { pageInfo } = this.state; + const { departmentIds } = VSalryForm.getFormParams(); + console.log(VSalryForm.getFormParams()); + this.setState({ loading: true }); + API.getVariableSalaryList({ + ...pageInfo, salaryMonth, ...VSalryForm.getFormParams(), + departmentIds: !_.isEmpty(departmentIds) ? departmentIds.split(",") : [] + }) + .then(({ status, data }) => { + this.setState({ loading: false }); + if (status) { + const { list: dataSource, columns, pageNum: current, pageSize, total } = data; + this.setState({ + pageInfo: { ...pageInfo, current, pageSize, total }, dataSource, + columns: [ + ..._.filter(columns, o => o.dataIndex !== "id"), + { + title: getLabel(111, "操作"), dataIndex: "oprate", + render: (__, record) => ( + this.handleEdit(record.id)}>{getLabel(111, "编辑")} + { + record.canDelete && this.handleDelete([record.id])}>{getLabel(111, "删除")} + } + ) + } + ] + } + ); + } + }); + }; + handleEdit = (id) => { + API.getVariableSalaryItemDetail({ id }).then(({ status, data }) => { + if (status) this.props.onEditSalaryItem(data); + }); + }; + handleDelete = (itemIds) => { + Modal.confirm({ + title: getLabel(111, "信息确认"), + content: getLabel(111, "确认删除吗?"), + onOk: () => { + API.deleteVariableSalaryItem({ itemIds }).then(({ status, errormsg }) => { + if (status) { + message.success(getLabel(111, "删除成功")); + this.getVariableSalaryItemList(); + } else { + message.error(errormsg); + } + }); + } + }); + }; + + 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.getVariableSalaryList()); + }, + onChange: current => { + this.setState({ + pageInfo: { ...pageInfo, current } + }, () => this.getVariableSalaryList()); + } + }; + return ( + + ); + } +} + +export default Index; diff --git a/pc4mobx/hrmSalary/pages/variableSalary/conditions.js b/pc4mobx/hrmSalary/pages/variableSalary/conditions.js index 49ca43de..98ecd684 100644 --- a/pc4mobx/hrmSalary/pages/variableSalary/conditions.js +++ b/pc4mobx/hrmSalary/pages/variableSalary/conditions.js @@ -22,16 +22,6 @@ export const conditions = [ value: "", viewAttr: 2 }, - { - conditionType: "MONTHPICKER", - domkey: ["salaryMonth"], - fieldcol: 14, - label: "薪资所属月", - lanId: 111, - labelcol: 6, - value: "", - viewAttr: 2 - }, { browserConditionParam: { completeParams: {}, @@ -145,7 +135,7 @@ export const salaryFileConditions = [ quickSearchName: "", replaceDatas: [], title: "", - type: "1", + type: "17", viewAttr: 2 }, conditionType: "BROWSER", diff --git a/pc4mobx/hrmSalary/pages/variableSalary/index.js b/pc4mobx/hrmSalary/pages/variableSalary/index.js index bc73021f..5035381c 100644 --- a/pc4mobx/hrmSalary/pages/variableSalary/index.js +++ b/pc4mobx/hrmSalary/pages/variableSalary/index.js @@ -9,12 +9,14 @@ */ import React, { Component } from "react"; import { inject, observer } from "mobx-react"; -import { WeaLocaleProvider, WeaReqTop } from "ecCom"; +import { WeaDatePicker, WeaLocaleProvider, WeaReqTop } from "ecCom"; import AdvanceInputBtn from "./components/advanceInputBtn"; import SearchPannel from "./components/searchPannel"; import SalaryItemDialog from "./components/salaryItemDialog"; import SalaryFileDialog from "./components/salaryFileDialog"; import SalaryItemList from "./components/salaryItemList"; +import SalaryFileList from "./components/salaryFileList"; +import moment from "moment"; import { Button } from "antd"; import cs from "classnames"; import "./index.less"; @@ -28,6 +30,7 @@ class Index extends Component { super(props); this.state = { selectedKey: "salaryFile", isQuery: false, showSearchAd: false, + salaryMonth: moment(new Date()).format("YYYY-MM"), SIDialog: { visible: false, title: "", id: "" }, //薪资项目薪资编辑弹框 SFDialog: { visible: false, title: "", id: "" } //薪资档案编辑弹框 }; @@ -48,7 +51,7 @@ class Index extends Component { }; render() { - const { selectedKey, SIDialog, SFDialog, showSearchAd, isQuery } = this.state; + const { selectedKey, SIDialog, SFDialog, showSearchAd, isQuery, salaryMonth } = this.state; const { taxAgentStore: { showOperateBtn }, baseTableStore: { VSSalaryItemForm } } = this.props; const tabs = [ { @@ -57,11 +60,15 @@ class Index extends Component { , , , + this.setState({ salaryMonth: val })}/>, this.openAdvanceSearch()} onAdvanceSearch={this.handleAdvanceSearch}/> - ] : [ this.openAdvanceSearch()} - onAdvanceSearch={this.handleAdvanceSearch}/>], - children: null + ] : [ + this.setState({ salaryMonth: val })}/>, + this.openAdvanceSearch()} + onAdvanceSearch={this.handleAdvanceSearch}/> + ], + children: }, { title: getLabel(111, "薪资项目"), key: "salaryItem", diff --git a/pc4mobx/hrmSalary/pages/variableSalary/index.less b/pc4mobx/hrmSalary/pages/variableSalary/index.less index 1c1dd906..26e8d09d 100644 --- a/pc4mobx/hrmSalary/pages/variableSalary/index.less +++ b/pc4mobx/hrmSalary/pages/variableSalary/index.less @@ -57,6 +57,10 @@ } .variable_salary_file_dialog { + .scroller { + background: #f6f6f6 !important; + } + .wea-slide-modal-title { border-bottom: 1px solid #e5e5e5 !important; } From 9d99557f4b65f04a5e82ef01dfa414c00836e5a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E6=B0=B8=E9=A1=BA?= <971387674@qq.com> Date: Mon, 12 Aug 2024 09:24:11 +0800 Subject: [PATCH 04/37] =?UTF-8?q?feature/2.15.1.2407.01-=E6=B5=AE=E5=8A=A8?= =?UTF-8?q?=E8=96=AA=E9=85=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pc4mobx/hrmSalary/apis/variableSalary.js | 13 ++ .../components/salaryFileDialog/index.js | 31 +++- .../salaryFileImportDialog/index.js | 94 +++++++++++ .../components/salaryFileList/index.js | 159 +++++++++++------- .../hrmSalary/pages/variableSalary/index.js | 40 ++++- .../hrmSalary/pages/variableSalary/index.less | 4 + pc4mobx/hrmSalary/stores/baseTable.js | 20 +++ 7 files changed, 288 insertions(+), 73 deletions(-) create mode 100644 pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileImportDialog/index.js diff --git a/pc4mobx/hrmSalary/apis/variableSalary.js b/pc4mobx/hrmSalary/apis/variableSalary.js index 04bbeb02..c3e3f20a 100644 --- a/pc4mobx/hrmSalary/apis/variableSalary.js +++ b/pc4mobx/hrmSalary/apis/variableSalary.js @@ -29,3 +29,16 @@ export const createVariableSalary = params => { export const getVariableSalaryList = params => { return postFetch("/api/bs/hrmsalary/variableSalary/list", params); }; +//导入浮动薪酬档案 +export const importVariableSalary = params => { + return postFetch("/api/bs/hrmsalary/variableSalary/importData", params); +}; +//删除浮动薪酬档案 +export const deleteVariableSalary = params => { + return postFetch("/api/bs/hrmsalary/variableSalary/deleteSelectData", params); +}; +//获取浮动薪酬档案明细 +export const getVariableSalaryDetail = params => { + return postFetch("/api/bs/hrmsalary/variableSalary/getDetail", params); +}; + diff --git a/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileDialog/index.js b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileDialog/index.js index 6297a558..f38f45a4 100644 --- a/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileDialog/index.js +++ b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileDialog/index.js @@ -39,13 +39,16 @@ class Index extends Component { } initForm = (props) => { - const { baseTableStore: { VSSalaryFileForm } } = props; + const { baseTableStore: { VSSalaryFileForm }, detail } = props; API.getCreateForm().then(({ status, data }) => { this.setState({ conditions: [ ..._.map(salaryFileConditions, item => ({ ...item, - items: _.map(item.items, o => ({ ...o, label: getLabel(o.lanId, o.label) })) + items: _.map(item.items, o => ({ + ...o, viewAttr: !_.isEmpty(detail) ? 1 : 2, label: getLabel(o.lanId, o.label), + value: detail[getKey(o)] || "" + })) })), { items: _.map(data, o => ({ @@ -54,14 +57,25 @@ class Index extends Component { fieldcol: 14, label: o.name, labelcol: 6, - value: "", - viewAttr: 2 + value: detail[`${String(o.id)}_variableItem`] || "", + viewAttr: !_.isEmpty(detail) ? 1 : 2 })), title: "", col: 2, defaultshow: true } ] - }, () => VSSalaryFileForm.initFormFields(this.state.conditions)); + }, () => { + VSSalaryFileForm.initFormFields(this.state.conditions); + if (!_.isEmpty(detail)) { + VSSalaryFileForm.updateFields({ + employeeId: { + value: detail["employeeId"], + valueSpan: detail["username"], + valueObj: [{ id: detail["employeeId"], name: detail["username"] }] + } + }); + } + }); }); }; convertPayload = (payload) => { @@ -96,14 +110,17 @@ class Index extends Component { }); }; renderTitle = () => { - const { loading } = this.state, { title } = this.props; + const { loading } = this.state, { title, detail } = this.props; return
{title}
- + { + _.isEmpty(detail) && + + }
; }; diff --git a/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileImportDialog/index.js b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileImportDialog/index.js new file mode 100644 index 00000000..5b8f023d --- /dev/null +++ b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileImportDialog/index.js @@ -0,0 +1,94 @@ +/* + * 浮动薪酬 + * 薪资档案导入 + * @Author: 黎永顺 + * @Date: 2024/8/8 + * @Wechat: + * @Email: 971387674@qq.com + * @description: +*/ +import React, { Component } from "react"; +import { WeaCheckbox, WeaLocaleProvider } from "ecCom"; +import ImportDialog from "../../../../components/importDialog"; +import * as API from "../../../../apis/variableSalary"; +import { convertToUrlString } from "../../../../util/url"; + +const getLabel = WeaLocaleProvider.getLabel; + +class Index extends Component { + constructor(props) { + super(props); + this.state = { + importDialog: { + nextloading: false, link: "/api/bs/hrmsalary/variableSalary/downloadTemplate", + importResult: {}, imageId: "", hasData: false, + previewUrl: "/api/bs/hrmsalary/variableSalary/preview" + } + }; + } + + componentWillReceiveProps(nextProps, nextContext) { + const { importDialog } = this.state; + if (nextProps.visible !== this.props.visible && nextProps.visible) { + const { baseTableStore: { VSalryForm }, salaryMonth } = nextProps; + const payload = { + salaryMonth, ...VSalryForm.getFormParams(), hasData: importDialog.hasData + }; + this.setState({ importDialog: { ...importDialog, link: `${importDialog.link}?${convertToUrlString(payload)}` } }); + } else { + this.setState({ + importDialog: { + nextloading: false, link: "/api/bs/hrmsalary/variableSalary/downloadTemplate", hasData: false, + importResult: {}, imageId: "", previewUrl: "/api/bs/hrmsalary/variableSalary/preview" + } + }); + } + } + + handleImport = (payload) => { + const { salaryMonth } = this.props; + const { importDialog } = this.state; + this.setState({ importDialog: { ...importDialog, nextloading: true } }); + API.importVariableSalary({ ...payload, salaryMonth }).then(({ data, status }) => { + this.setState({ importDialog: { ...importDialog, nextloading: false } }); + if (status) { + this.setState({ + importDialog: { ...importDialog, ...payload, importResult: data } + }); + } + }).catch(() => this.setState({ importDialog: { ...importDialog, nextloading: false } })); + }; + + render() { + const { importDialog } = this.state; + return ( + this.setState({ + importDialog: { ...importDialog, importResult: {}, imageId: "", link: null } + })} + exportDataDom={ + { + const { baseTableStore: { VSalryForm }, salaryMonth } = this.props; + const payload = { salaryMonth, ...VSalryForm.getFormParams(), hasData: val === "1" }; + this.setState({ + importDialog: { + ...importDialog, hasData: val === "1", + link: `/api/bs/hrmsalary/variableSalary/downloadTemplate?${convertToUrlString(payload)}` + } + }); + }} + /> + } + nextCallback={imageId => this.setState({ importDialog: { ...importDialog, imageId } })} + nextUplaodCallback={imageId => this.handleImport({ imageId })} + /> + ); + } +} + +export default Index; diff --git a/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileList/index.js b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileList/index.js index 6ec040bb..0756b644 100644 --- a/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileList/index.js +++ b/pc4mobx/hrmSalary/pages/variableSalary/components/salaryFileList/index.js @@ -8,10 +8,13 @@ * @description: */ import React, { Component } from "react"; -import { WeaLocaleProvider, WeaTable } from "ecCom"; -import { message, Modal } from "antd"; +import { WeaLocaleProvider } from "ecCom"; +import { WeaTableNew } from "comsMobx"; +import { message, Modal, Spin } from "antd"; import * as API from "../../../../apis/variableSalary"; +import { toJS } from "mobx"; +const WeaTableComx = WeaTableNew.WeaTable; const getLabel = WeaLocaleProvider.getLabel; class Index extends Component { @@ -23,64 +26,78 @@ class Index extends Component { } componentDidMount() { + window.addEventListener("message", this.handleReceive, false); + window.addEventListener("resize", this.handleResize, false); this.getVariableSalaryList(); } + componentWillUnmount() { + window.removeEventListener("message", this.handleReceive, false); + window.removeEventListener("resize", this.handleResize, false); + } + componentWillReceiveProps(nextProps, nextContext) { if (nextProps.isQuery !== this.props.isQuery) this.setState({ pageInfo: { ...this.state.pageInfo, current: 1 } }, () => this.getVariableSalaryList()); } + handleReceive = async ({ data }) => { + const { type, payload: { id, params } = {} } = data; + if (type === "init") { + this.getColumns(); + } else if (type === "turn") { + switch (id) { + case "PAGEINFO": + this.setState({ + pageInfo: { ...this.state.pageInfo, ...params } + }, () => this.getVariableSalaryList()); + break; + case "DEL": + this.handleDelete([params.id]); + break; + case "VIEW": + this.handleView(params.id); + break; + default: + break; + } + } + }; getVariableSalaryList = () => { - const { baseTableStore: { VSalryForm }, salaryMonth } = this.props; + const { baseTableStore: { VSalryForm, getVariableSalaryList }, salaryMonth } = this.props; const { pageInfo } = this.state; const { departmentIds } = VSalryForm.getFormParams(); - console.log(VSalryForm.getFormParams()); this.setState({ loading: true }); - API.getVariableSalaryList({ + getVariableSalaryList({ ...pageInfo, salaryMonth, ...VSalryForm.getFormParams(), departmentIds: !_.isEmpty(departmentIds) ? departmentIds.split(",") : [] - }) - .then(({ status, data }) => { - this.setState({ loading: false }); - if (status) { - const { list: dataSource, columns, pageNum: current, pageSize, total } = data; - this.setState({ - pageInfo: { ...pageInfo, current, pageSize, total }, dataSource, - columns: [ - ..._.filter(columns, o => o.dataIndex !== "id"), - { - title: getLabel(111, "操作"), dataIndex: "oprate", - render: (__, record) => ( - this.handleEdit(record.id)}>{getLabel(111, "编辑")} - { - record.canDelete && this.handleDelete([record.id])}>{getLabel(111, "删除")} - } - ) - } - ] - } - ); - } - }); - }; - handleEdit = (id) => { - API.getVariableSalaryItemDetail({ id }).then(({ status, data }) => { - if (status) this.props.onEditSalaryItem(data); + }).then(({ status, data }) => { + this.setState({ loading: false }); + if (status) { + const { pageInfo: result } = data; + const { list: dataSource, pageNum: current, pageSize, total } = result; + this.setState({ + pageInfo: { ...pageInfo, current, pageSize, total }, dataSource + } + ); + } }); }; - handleDelete = (itemIds) => { + handleView = (id) => { + API.getVariableSalaryDetail({ id }).then(({ status, data }) => { + if (status) this.props.onViewSalaryFile(data.data); + }); + }; + handleDelete = (ids) => { Modal.confirm({ title: getLabel(111, "信息确认"), content: getLabel(111, "确认删除吗?"), onOk: () => { - API.deleteVariableSalaryItem({ itemIds }).then(({ status, errormsg }) => { + API.deleteVariableSalary({ ids }).then(({ status, errormsg }) => { if (status) { message.success(getLabel(111, "删除成功")); - this.getVariableSalaryItemList(); + this.getVariableSalaryList(); } else { message.error(errormsg); } @@ -88,29 +105,57 @@ class Index extends Component { } }); }; + getColumns = () => { + const { baseTableStore: { SFTableStore }, showOperateBtn } = this.props; + const columns = _.map(_.filter(toJS(SFTableStore.columns), (item) => item.display === "true"), (it, idx) => ({ + dataIndex: it.dataIndex, title: it.title, align: "left", + width: 150, ellipsis: true + })); + if (!_.isEmpty(columns)) { + this.postMessageToChild({ + columns, showOperateBtn, dataSource: this.state.dataSource, scrollHeight: 100, + pageInfo: this.state.pageInfo, unitTableType: "variableSalary" + }); + } + return columns; + }; + postMessageToChild = (payload = {}) => { + const i18n = { + "操作": getLabel(30585, "操作"), "查看详情": getLabel(111, "查看详情"), + "共": getLabel(18609, "共"), "条": getLabel(18256, "条"), + "删除": getLabel(111, "删除") + }; + const childFrameObj = document.getElementById("unitTable"); + childFrameObj && childFrameObj.contentWindow.postMessage(JSON.stringify({ ...payload, i18n }), "*"); + }; 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.getVariableSalaryList()); - }, - onChange: current => { - this.setState({ - pageInfo: { ...pageInfo, current } - }, () => this.getVariableSalaryList()); - } - }; + const { loading, dataSource } = this.state; + const { baseTableStore: { SFTableStore } } = this.props; + const dom = document.querySelector(".wea-new-top-req-content"); + let height = 280; + if (dom && dataSource.length > 0) { + height = (parseFloat(dom.style.height) > 620 && dataSource.length === 10) ? dataSource.length * 39 + 113 : dataSource.length < 10 ? dataSource.length * 39 + 113 : parseFloat(dom.style.height) - 16; + } return ( - + +
+ +