From ecf34e4886ec3bb3f73632be8f7113142bbfab91 Mon Sep 17 00:00:00 2001
From: lys <971387674@qq.com>
Date: Tue, 11 Feb 2025 14:17:56 +0800
Subject: [PATCH 1/2] release/2.19.1.2501.01
---
.../salaryEditCalc/calcAnchorList.js | 110 ++++++++++++++++++
.../salaryEditCalc/editCalcTable.js | 15 +--
.../salaryEditCalc/editSalaryCalcSlide.js | 21 ++--
.../components/salaryEditCalc/index.less | 104 +++++++++++++++++
.../calculateDetail/issuedAndReissueTable.js | 3 +-
.../calculateDetail/payrollItemsTable.js | 6 +-
6 files changed, 240 insertions(+), 19 deletions(-)
create mode 100644 pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/calcAnchorList.js
diff --git a/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/calcAnchorList.js b/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/calcAnchorList.js
new file mode 100644
index 00000000..a8cecca3
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/calcAnchorList.js
@@ -0,0 +1,110 @@
+/*
+ * 核算编辑
+ * 数据查看锚点
+ * @Author: 黎永顺
+ * @Date: 2025/2/10
+ * @Wechat:
+ * @Email: 971387674@qq.com
+ * @description:
+*/
+import React, { Component } from "react";
+import { WeaLocaleProvider } from "ecCom";
+import classnames from "classnames";
+
+const getLabel = WeaLocaleProvider.getLabel;
+
+class CalcAnchorList extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ collapsed: false, currentIndex: 0
+ };
+ this.isClickRef = null;
+ this.timerRef = null;
+ }
+
+ componentDidMount() {
+ document.getElementById("salary_anchor_area").addEventListener("scroll", this.handlerScroll);
+ }
+
+ componentWillReceiveProps(nextProps, nextContext) {
+ if (nextProps.visible !== this.props.visible && !nextProps.visible) this.setState({
+ collapsed: false,
+ currentIndex: 0
+ });
+ }
+
+ componentWillUnmount() {
+ document.getElementById("salary_anchor_area").removeEventListener("scroll", this.handlerScroll);
+ }
+
+ handlerScroll = () => {
+ // 点击锚点时,不执行滚动函数
+ if (this.isClickRef) return;
+ // 获取滚动容器的滚动高度(这里相对于#salary_anchor_area滚动的)
+ const scrollTop = document.getElementById("salary_anchor_area").scrollTop;
+ // 获取所有wea-search-group anchor_开头的元素集合
+ const contentList = document.querySelectorAll("[class^='wea-search-group anchor_']");
+ const offsetTopArr = [];
+ contentList.forEach((item) => {
+ // 获取每个wea-search-group anchor_开头的元素的offsetTop
+ offsetTopArr.push(item.offsetTop);
+ });
+ for (let i = 0; i < offsetTopArr.length; i++) {
+ // 当滚动条高度达到对应wea-search-group anchor_开头的元素的滚动高度、则将锚点设置为高亮状态
+ if (scrollTop + 190 >= offsetTopArr[i]) this.setState({ currentIndex: i });
+ }
+ };
+ onClickAnchor = (item, index) => {
+ const anchorElement = document.getElementById("salary_anchor_area");
+ const el = document.querySelector(`.anchor_${item.salarySobItemGroupId}`);
+ if (el) {
+ anchorElement.scroll({ top: el.offsetTop, behavior: "smooth" });
+ }
+ this.setState({ currentIndex: index });
+ // 点击时设置为true,为了防止同时执行滚动事件
+ this.isClickRef = true;
+ // 清除定时器,防止滚动事件触发、出现走马灯闪烁问题
+ if (this.timerRef) clearTimeout(this.timerRef);
+ this.timerRef = setTimeout(() => {
+ this.isClickRef = false;
+ }, 1000);
+ };
+
+ render() {
+ const { collapsed, currentIndex } = this.state, { datas } = this.props;
+ return (
+
+
+ {
+ collapsed ?
+
+ this.setState({ collapsed: !collapsed })}/>
+
:
+
+
+ this.setState({ collapsed: !collapsed })}/>
+
+
+
+
+
+ {_.map(datas, (o, i) => (
+
this.onClickAnchor(o, i)}>
+ {o.salarySobItemGroupName}
+
)
+ )}
+
+
+ }
+
+
+ );
+ }
+}
+
+export default CalcAnchorList;
diff --git a/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/editCalcTable.js b/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/editCalcTable.js
index aa6baf65..c84dce5f 100644
--- a/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/editCalcTable.js
+++ b/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/editCalcTable.js
@@ -30,7 +30,7 @@ class EditCalcTable extends Component {
this.state = {
loading: false, pageInfo: { current: 1, pageSize: 10, total: 0 },
selectedRowKeys: [], progressVisible: false, progress: 0,
- salaryCalcSlide: { visible: false, id: "" }, originPayloadData: {},
+ salaryCalcSlide: { visible: false, id: "", viewAttr: 2 }, originPayloadData: {},
batchUpdateDialog: {
visible: false, salaryAcctRecordId: "", idList: [], salaryItemId: "",
conditions: [], pattern: 0, dataType: ""
@@ -73,9 +73,9 @@ class EditCalcTable extends Component {
this.updateEmpLockStatus({ ...params });
break;
case "EDIT":
- const { id: salaryCalcId } = params;
+ const { id: salaryCalcId, showSee } = params;
this.setState({
- salaryCalcSlide: { visible: true, id: salaryCalcId }
+ salaryCalcSlide: { visible: true, id: salaryCalcId, viewAttr: showSee ? 1 : 2 }
});
break;
case "DIAGRAM":
@@ -238,7 +238,7 @@ class EditCalcTable extends Component {
"总计": getLabel(523, "总计"), "批量解锁": getLabel(111, "批量解锁"),
"批量锁定": getLabel(111, "批量锁定"), "批量更新": getLabel(111, "批量更新"),
"查看拓扑图": getLabel(111, "查看拓扑图"), "锁定": getLabel(111, "锁定"),
- "解锁": getLabel(111, "解锁")
+ "解锁": getLabel(111, "解锁"), "查看": getLabel(111, "查看")
};
this.setState({ originPayloadData: { ...payload, i18n } });
const childFrameObj = document.getElementById("atdTable");
@@ -269,7 +269,7 @@ class EditCalcTable extends Component {
const sumRowlistUrl = this.props.showTotalCell ? "/api/bs/hrmsalary/salaryacct/acctresult/sum" : "";
this.postMessageToChild({
dataSource, pageInfo, selectedRowKeys, showTotalCell: this.props.showTotalCell, sumRowlistUrl, payload,
- calcDetail,
+ calcDetail, showSee: true,
columns: _.every(traverse(columns, calcDetail), (it, idx) => !it.fixed) ? _.map(traverse(columns, calcDetail), (it, idx) => ({
...it,
fixed: idx < 2 ? "left" : false
@@ -304,10 +304,7 @@ class EditCalcTable extends Component {
/>
this.setState({
- salaryCalcSlide: {
- visible: false,
- id: ""
- }
+ salaryCalcSlide: { visible: false, id: "", viewAttr: 2 }
}, () => isFresh === "true" && this.queryCalcResultList())}/>
{
progressVisible &&
diff --git a/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/editSalaryCalcSlide.js b/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/editSalaryCalcSlide.js
index 235bac13..9da20706 100644
--- a/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/editSalaryCalcSlide.js
+++ b/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/editSalaryCalcSlide.js
@@ -12,9 +12,9 @@ import PayrollItemsTable from "../../../../calculateDetail/payrollItemsTable";
import IssuedAndReissueTable from "../../../../calculateDetail/issuedAndReissueTable";
import { acctresultDetail, saveAcctResult } from "../../../../../apis/calculate";
import { toDecimal_n } from "../../../../../util";
+import CalcAnchorList from "./calcAnchorList";
import "./index.less";
-
const getLabel = WeaLocaleProvider.getLabel;
class EditSalaryCalcSlide extends Component {
@@ -29,7 +29,7 @@ class EditSalaryCalcSlide extends Component {
componentWillReceiveProps(nextProps, nextContext) {
if (nextProps.visible !== this.props.visible && nextProps.visible) this.acctresultDetail(nextProps.id);
- if (nextProps.visible !== this.props.visible && !nextProps.visible) this.setState({ selectedKey: "0" });
+ if (nextProps.visible !== this.props.visible && !nextProps.visible) this.setState({ selectedKey: "0" }, () => document.getElementById("salary_anchor_area").scrollTop = 0);
}
acctresultDetail = (id) => {
@@ -43,14 +43,17 @@ class EditSalaryCalcSlide extends Component {
});
};
renderTitle = () => {
- const { loading } = this.state;
+ const { loading } = this.state, { viewAttr } = this.props;
return
-
{getLabel(543559, "编辑薪资")}
+
{viewAttr === 2 ? getLabel(543559, "编辑薪资") : getLabel(111, "查看薪资")}
-
+ {
+ viewAttr === 2 &&
+
+ }
;
};
@@ -139,7 +142,9 @@ class EditSalaryCalcSlide extends Component {
className="salary-calculate-esf-layout" {...this.props}
top={0} width={60} height={100} measure={"%"}
direction={"right"} title={this.renderTitle()}
- content={
+ content={
+ {/*锚点*/}
+
this.setState({ baseInfo })}/>
{
selectedKey === "0" && _.map(itemsByGroup, item => {
- return ;
+ return ;
})
}
{
selectedKey === "1" &&
diff --git a/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/index.less b/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/index.less
index e2d8ce9b..4e3fb3b4 100644
--- a/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/index.less
+++ b/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/index.less
@@ -142,6 +142,7 @@
height: 100%;
.salary-calculate-esf-area {
+ position: relative;
background: #f6f6f6;
height: 100%;
overflow-y: auto;
@@ -191,6 +192,109 @@
.wea-search-group {
padding: 0;
}
+
+ //锚点按钮
+ .anchor-list-collapsed {
+ padding: 0 !important;
+ }
+
+ .anchor-list-wrapper {
+ position: absolute;
+ right: 0;
+ margin: 10px 15px 20px;
+ padding: 8px 10px;
+ overflow: auto;
+ background-color: #fff;
+ box-shadow: 0 3px 12px 0 rgba(0, 0, 0, .12);
+ border-radius: 3px;
+ cursor: pointer;
+
+ .anchor-list-collapsed-btn {
+ opacity: .5;
+ background: #000;
+ color: #fff;
+ border-radius: 3px;
+ width: 30px;
+ height: 30px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 16px;
+ }
+
+ .anchor-list-header {
+ display: flex;
+ align-items: center;
+ justify-content: flex-end;
+ min-width: 130px;
+ padding: 5px;
+ }
+
+ .anchor-list {
+ padding: 0 10px;
+ position: relative;
+ margin-top: 10px;
+ transition: margin-top .3s;
+
+ .anchor-list-ink {
+ position: absolute;
+ top: 0;
+ left: 5px;
+ height: 100%;
+
+ .anchor-list-ink-ball.visible {
+ display: inline-block;
+ }
+
+ .anchor-list-ink-ball {
+ position: absolute;
+ left: 50%;
+ display: none;
+ width: 3px;
+ height: 8px;
+ background-color: #5d9cec;
+ border: 1.5px solid #5d9cec;
+ border-radius: 8px;
+ transform: translateX(-50%);
+ transition: top .3s ease-in-out;
+ }
+ }
+
+ .anchor-list-ink:before {
+ position: relative;
+ display: block;
+ width: 1px;
+ height: 100%;
+ margin: 0 auto;
+ background-color: #f0f0f0;
+ content: " ";
+ }
+
+ .anchor-list-link {
+ padding: 7px 0 7px 10px;
+ line-height: 1.143;
+
+ .anchor-list-link-title {
+ position: relative;
+ display: block;
+ overflow: hidden;
+ color: #666;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ transition: all .3s;
+ cursor: pointer;
+ outline: none;
+ text-decoration: none;
+ background-color: transparent;
+ }
+ }
+
+ .anchor-list-link-active > .anchor-list-link-title {
+ color: #5d9cec;
+ }
+ }
+ }
+
}
}
}
diff --git a/pc4mobx/hrmSalary/pages/calculateDetail/issuedAndReissueTable.js b/pc4mobx/hrmSalary/pages/calculateDetail/issuedAndReissueTable.js
index bf1c1286..65189b7e 100644
--- a/pc4mobx/hrmSalary/pages/calculateDetail/issuedAndReissueTable.js
+++ b/pc4mobx/hrmSalary/pages/calculateDetail/issuedAndReissueTable.js
@@ -29,10 +29,11 @@ class IssuedAndReissueTable extends Component {
/>
,
render: (text, record) => {
- const { canEdit, pattern } = record;
+ const { canEdit, pattern } = record, { viewAttr } = this.props;
return onChangeIssueReissueValue(record.salaryItemName, value, "issuedAndReissueItems")}
diff --git a/pc4mobx/hrmSalary/pages/calculateDetail/payrollItemsTable.js b/pc4mobx/hrmSalary/pages/calculateDetail/payrollItemsTable.js
index 9d2ddfce..9f196d5f 100644
--- a/pc4mobx/hrmSalary/pages/calculateDetail/payrollItemsTable.js
+++ b/pc4mobx/hrmSalary/pages/calculateDetail/payrollItemsTable.js
@@ -37,8 +37,9 @@ class PayrollItemsTable extends Component {
,
width: "20%",
render: (text, record) => {
- const { canEdit, dataType, pattern } = record;
+ const { canEdit, dataType, pattern } = record, { viewAttr } = this.props;
return dataType === "number" ? : onChangeIssueReissueValue(record.salaryItemId, value, "itemsByGroup", salarySobItemGroupId)}
/>;
}
@@ -66,7 +68,7 @@ class PayrollItemsTable extends Component {
}
];
return (
-
+
Date: Tue, 11 Feb 2025 14:32:53 +0800
Subject: [PATCH 2/2] release/2.19.1.2501.01
---
.../calculate/doCalc/components/salaryEditCalc/baseInfo.js | 3 ++-
.../doCalc/components/salaryEditCalc/editCalcTable.js | 2 +-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/baseInfo.js b/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/baseInfo.js
index 2380cfae..1e6eaac0 100644
--- a/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/baseInfo.js
+++ b/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/baseInfo.js
@@ -46,7 +46,8 @@ class EditSalaryBaseInfo extends Component {
default:
break;
}
- return this.props.onChange(_.map(this.props.baseInfo, it => {
if (fieldCode === it.fieldCode) {
return { ...it, fieldValue: value, fieldValueObj: { id: value, name: valueSpan } };
diff --git a/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/editCalcTable.js b/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/editCalcTable.js
index c84dce5f..986bb1bb 100644
--- a/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/editCalcTable.js
+++ b/pc4mobx/hrmSalary/pages/calculate/doCalc/components/salaryEditCalc/editCalcTable.js
@@ -269,7 +269,7 @@ class EditCalcTable extends Component {
const sumRowlistUrl = this.props.showTotalCell ? "/api/bs/hrmsalary/salaryacct/acctresult/sum" : "";
this.postMessageToChild({
dataSource, pageInfo, selectedRowKeys, showTotalCell: this.props.showTotalCell, sumRowlistUrl, payload,
- calcDetail, showSee: true,
+ calcDetail, showSee: calcDetail,
columns: _.every(traverse(columns, calcDetail), (it, idx) => !it.fixed) ? _.map(traverse(columns, calcDetail), (it, idx) => ({
...it,
fixed: idx < 2 ? "left" : false