Commit 22f37fa0f40b6c740e7f296c34f3dafe9a8513a4
1 parent
feaa7fa5
1.主页kpi导航增加保存树形节点到浏览器缓存功能,退出登录后,从已保存的树形节点拿数据
Showing
2 changed files
with
94 additions
and
14 deletions
src/components/IndexCenter/IndexCenter.js
| 1 | /* eslint-disable */ | 1 | /* eslint-disable */ |
| 2 | /* eslint-disable function-paren-newline */ | 2 | /* eslint-disable function-paren-newline */ |
| 3 | import React, { Component } from 'react'; | 3 | import React, { Component } from 'react'; |
| 4 | -import { BankOutlined, CloseOutlined, FolderFilled, FolderOpenFilled } from '@ant-design/icons'; | 4 | +import { BankOutlined, CloseOutlined, FolderFilled, FolderOpenFilled, SaveOutlined } from '@ant-design/icons'; |
| 5 | import { Layout, Card, Checkbox, Button, Table, Menu, Tabs, message, Tree, Input } from 'antd-v4'; | 5 | import { Layout, Card, Checkbox, Button, Table, Menu, Tabs, message, Tree, Input } from 'antd-v4'; |
| 6 | import logo from '@/assets/foot_logo.png'; | 6 | import logo from '@/assets/foot_logo.png'; |
| 7 | import config from '@/utils/config'; | 7 | import config from '@/utils/config'; |
| @@ -88,12 +88,42 @@ class IndexCenter extends Component { | @@ -88,12 +88,42 @@ class IndexCenter extends Component { | ||
| 88 | tableData: [], | 88 | tableData: [], |
| 89 | bFilter: 'Pending,PendingCheck,MyWarning', | 89 | bFilter: 'Pending,PendingCheck,MyWarning', |
| 90 | app: props.app, | 90 | app: props.app, |
| 91 | + expandedKeys: [], | ||
| 91 | }; | 92 | }; |
| 92 | this.activeTree = ''; | 93 | this.activeTree = ''; |
| 93 | this.treeId = ''; | 94 | this.treeId = ''; |
| 94 | } | 95 | } |
| 95 | 96 | ||
| 96 | componentWillMount() { | 97 | componentWillMount() { |
| 98 | + // 从localStorage读取展开状态 | ||
| 99 | + try { | ||
| 100 | + const { userinfo } = this.props.app; | ||
| 101 | + | ||
| 102 | + const sUserNo = userinfo?.sUserNo; | ||
| 103 | + | ||
| 104 | + if (sUserNo) { | ||
| 105 | + const key = `xlybusinessExpandKeys_${sUserNo}`; | ||
| 106 | + | ||
| 107 | + const xlybusinessExpandKeys = localStorage.getItem(key); | ||
| 108 | + | ||
| 109 | + if (xlybusinessExpandKeys) { | ||
| 110 | + try { | ||
| 111 | + const expandedKeys = JSON.parse(xlybusinessExpandKeys); | ||
| 112 | + | ||
| 113 | + this.setState({ expandedKeys }); | ||
| 114 | + } catch (error) { | ||
| 115 | + console.error('解析展开节点失败:', error); | ||
| 116 | + } | ||
| 117 | + } else { | ||
| 118 | + console.log('localStorage中没有保存的展开节点'); | ||
| 119 | + } | ||
| 120 | + } else { | ||
| 121 | + console.error('用户编号不存在,无法读取展开状态'); | ||
| 122 | + } | ||
| 123 | + } catch (error) { | ||
| 124 | + console.error('读取展开状态失败:', error); | ||
| 125 | + } | ||
| 126 | + | ||
| 97 | setTimeout(() => { | 127 | setTimeout(() => { |
| 98 | this.handleGetModelCenter('init'); | 128 | this.handleGetModelCenter('init'); |
| 99 | const commonUrl = `${config.server_host}parameter/getParameter?sModelsId=100`; | 129 | const commonUrl = `${config.server_host}parameter/getParameter?sModelsId=100`; |
| @@ -198,6 +228,20 @@ class IndexCenter extends Component { | @@ -198,6 +228,20 @@ class IndexCenter extends Component { | ||
| 198 | disabled: true, | 228 | disabled: true, |
| 199 | }]; | 229 | }]; |
| 200 | 230 | ||
| 231 | + let expandedKeys = this.state.expandedKeys; | ||
| 232 | + // 重新读取展开状态,确保应用到新构建的树结构上 | ||
| 233 | + if (sUserNo) { | ||
| 234 | + const key = `xlybusinessExpandKeys_${sUserNo}`; | ||
| 235 | + const xlybusinessExpandKeys = localStorage.getItem(key); | ||
| 236 | + if (xlybusinessExpandKeys) { | ||
| 237 | + try { | ||
| 238 | + expandedKeys = JSON.parse(xlybusinessExpandKeys); | ||
| 239 | + | ||
| 240 | + } catch (error) { | ||
| 241 | + console.error('解析展开节点失败:', error); | ||
| 242 | + } | ||
| 243 | + } | ||
| 244 | + } | ||
| 201 | if (model !== undefined && !this.treeId) { | 245 | if (model !== undefined && !this.treeId) { |
| 202 | // if (this.tableTree) { | 246 | // if (this.tableTree) { |
| 203 | // this.tableTree.scrollTop = 0; | 247 | // this.tableTree.scrollTop = 0; |
| @@ -440,10 +484,20 @@ class IndexCenter extends Component { | @@ -440,10 +484,20 @@ class IndexCenter extends Component { | ||
| 440 | } | 484 | } |
| 441 | } | 485 | } |
| 442 | this.setState({ | 486 | this.setState({ |
| 443 | - tabsPanes, tableTreeData, ...addState | 487 | + tabsPanes, tableTreeData, ...addState, |
| 488 | + expandedKeys | ||
| 489 | + }); | ||
| 490 | + } else { | ||
| 491 | + // 如果没有重新构建树结构,也更新展开状态 | ||
| 492 | + this.setState({ | ||
| 493 | + comParameterList, | ||
| 494 | + comThirdAppList, | ||
| 495 | + dToDayNumSum, | ||
| 496 | + dTobeDoneSum, | ||
| 497 | + logoImageInfo, | ||
| 498 | + expandedKeys | ||
| 444 | }); | 499 | }); |
| 445 | } | 500 | } |
| 446 | - this.setState({ comParameterList, comThirdAppList, dToDayNumSum, dTobeDoneSum, logoImageInfo }); | ||
| 447 | } | 501 | } |
| 448 | componentDidMount() { | 502 | componentDidMount() { |
| 449 | if (this.kpiTable && this.kpiTable.querySelector('.ant-table-body')) { | 503 | if (this.kpiTable && this.kpiTable.querySelector('.ant-table-body')) { |
| @@ -501,6 +555,27 @@ class IndexCenter extends Component { | @@ -501,6 +555,27 @@ class IndexCenter extends Component { | ||
| 501 | localStorage.setItem(`xlybusinessActiveTree_${sUserNo}`, `${this.activeTree},${this.tableTreeScrollTop || 0},${this.kpiTableScrollTop || 0}`); | 555 | localStorage.setItem(`xlybusinessActiveTree_${sUserNo}`, `${this.activeTree},${this.tableTreeScrollTop || 0},${this.kpiTableScrollTop || 0}`); |
| 502 | } | 556 | } |
| 503 | 557 | ||
| 558 | + handleSaveExpandState = () => { | ||
| 559 | + try { | ||
| 560 | + const { userinfo } = this.props.app; | ||
| 561 | + const sUserNo = userinfo?.sUserNo; | ||
| 562 | + const { expandedKeys } = this.state; | ||
| 563 | + if (sUserNo) { | ||
| 564 | + const key = `xlybusinessExpandKeys_${sUserNo}`; | ||
| 565 | + localStorage.setItem(key, JSON.stringify(expandedKeys)); | ||
| 566 | + // 验证存储是否成功 | ||
| 567 | + const storedValue = localStorage.getItem(key); | ||
| 568 | + message.success('展开状态已保存'); | ||
| 569 | + } else { | ||
| 570 | + console.error('用户编号不存在,无法保存展开状态'); | ||
| 571 | + message.error('保存失败:用户信息不完整'); | ||
| 572 | + } | ||
| 573 | + } catch (error) { | ||
| 574 | + console.error('保存展开状态失败:', error); | ||
| 575 | + message.error('保存失败:' + error.message); | ||
| 576 | + } | ||
| 577 | + } | ||
| 578 | + | ||
| 504 | handleDoubleClick = (record) => { | 579 | handleDoubleClick = (record) => { |
| 505 | const newsId = record.sId; /* 表格行的sId */ | 580 | const newsId = record.sId; /* 表格行的sId */ |
| 506 | const newKey = new Date().getTime().toString(); | 581 | const newKey = new Date().getTime().toString(); |
| @@ -849,7 +924,10 @@ class IndexCenter extends Component { | @@ -849,7 +924,10 @@ class IndexCenter extends Component { | ||
| 849 | </div> | 924 | </div> |
| 850 | <div className={styles.indexTabs}> | 925 | <div className={styles.indexTabs}> |
| 851 | <div className={styles.navType}> | 926 | <div className={styles.navType}> |
| 852 | - <div className={styles.tableTreeTitle}>{NavigationType}</div> | 927 | + <div className={styles.tableTreeTitle} style={{ display: 'flex', alignItems: 'center', marginBottom: '8px' }}> |
| 928 | + <span style={{marginRight: '10px'}}>{NavigationType}</span> | ||
| 929 | + <Button size="middle" type="text" icon={<SaveOutlined />} onClick={this.handleSaveExpandState} style={{ background:'none', border: 'none', padding: '0 4px' }} /> | ||
| 930 | + </div> | ||
| 853 | <div className={styles.tableTree} ref={(ref) => { | 931 | <div className={styles.tableTree} ref={(ref) => { |
| 854 | this.tableTree = ref; | 932 | this.tableTree = ref; |
| 855 | if (this.tableTree && this.tableTreeScrollTop) { | 933 | if (this.tableTree && this.tableTreeScrollTop) { |
| @@ -857,9 +935,7 @@ class IndexCenter extends Component { | @@ -857,9 +935,7 @@ class IndexCenter extends Component { | ||
| 857 | } | 935 | } |
| 858 | }}> | 936 | }}> |
| 859 | <Tree | 937 | <Tree |
| 860 | - key={ | ||
| 861 | - commonUtils.isNotEmptyArr(tableTreeData) ? this.treeId : Math.random() | ||
| 862 | - } | 938 | + key="navigationTree" |
| 863 | className={"hide-file-icon"} | 939 | className={"hide-file-icon"} |
| 864 | // switcherIcon={<img src={file} alt="svg" />} | 940 | // switcherIcon={<img src={file} alt="svg" />} |
| 865 | onSelect={(e, select) => { | 941 | onSelect={(e, select) => { |
| @@ -893,8 +969,12 @@ class IndexCenter extends Component { | @@ -893,8 +969,12 @@ class IndexCenter extends Component { | ||
| 893 | tableData: data | 969 | tableData: data |
| 894 | }) | 970 | }) |
| 895 | }} | 971 | }} |
| 896 | - defaultSelectedKeys={[this.activeTree]} | ||
| 897 | - defaultExpandAll={true} | 972 | + onExpand={(expandedKeys) => { |
| 973 | + this.setState({ expandedKeys }); | ||
| 974 | + }} | ||
| 975 | + expandedKeys={this.state.expandedKeys} | ||
| 976 | + selectedKeys={[this.activeTree]} | ||
| 977 | + defaultExpandAll={false} | ||
| 898 | > | 978 | > |
| 899 | {this.renderTreeNodes(tableTreeData)} | 979 | {this.renderTreeNodes(tableTreeData)} |
| 900 | </Tree> | 980 | </Tree> |
src/components/login/Login.js
| @@ -150,16 +150,16 @@ class LoginForm extends Component { | @@ -150,16 +150,16 @@ class LoginForm extends Component { | ||
| 150 | 150 | ||
| 151 | handleLogin = async (values = {}, bSsoLogin = false) => { | 151 | handleLogin = async (values = {}, bSsoLogin = false) => { |
| 152 | this.setState({ loginLoading: true }); | 152 | this.setState({ loginLoading: true }); |
| 153 | - /* 点击登录按钮时 清空localStorage,保留左侧树定位 */ | ||
| 154 | - const xlybusinessActiveTreeArr = []; | 153 | + /* 点击登录按钮时 清空localStorage,保留左侧树定位和展开状态 */ |
| 154 | + const xlybusinessDataArr = []; | ||
| 155 | for (let i = 0; i < localStorage.length; i++) { | 155 | for (let i = 0; i < localStorage.length; i++) { |
| 156 | const key = localStorage.key(i); | 156 | const key = localStorage.key(i); |
| 157 | - if (key && key.includes("xlybusinessActiveTree")) { | ||
| 158 | - xlybusinessActiveTreeArr.push([key, localStorage.getItem(key)]); | 157 | + if (key && (key.includes("xlybusinessActiveTree") || key.includes("xlybusinessExpandKeys"))) { |
| 158 | + xlybusinessDataArr.push([key, localStorage.getItem(key)]); | ||
| 159 | } | 159 | } |
| 160 | } | 160 | } |
| 161 | localStorage.clear(); | 161 | localStorage.clear(); |
| 162 | - xlybusinessActiveTreeArr.forEach(item => { | 162 | + xlybusinessDataArr.forEach(item => { |
| 163 | localStorage.setItem(item[0], item[1]); | 163 | localStorage.setItem(item[0], item[1]); |
| 164 | }); | 164 | }); |
| 165 | const value = values; | 165 | const value = values; |