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 01/25] 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 ( +