Showing
1 changed file
with
50 additions
and
38 deletions
| ... | @@ -272,6 +272,8 @@ | ... | @@ -272,6 +272,8 @@ |
| 272 | <el-tree | 272 | <el-tree |
| 273 | :data="item.data" | 273 | :data="item.data" |
| 274 | :props="state.defaultProps" | 274 | :props="state.defaultProps" |
| 275 | + node-key="id" | ||
| 276 | + :default-expanded-keys="state.currentNodeKey" | ||
| 275 | empty-text="暂无数据" | 277 | empty-text="暂无数据" |
| 276 | @node-click="handleNodeClick" | 278 | @node-click="handleNodeClick" |
| 277 | /> | 279 | /> |
| ... | @@ -302,12 +304,13 @@ | ... | @@ -302,12 +304,13 @@ |
| 302 | tab-position="left" | 304 | tab-position="left" |
| 303 | style="" | 305 | style="" |
| 304 | class="demo-tabs" | 306 | class="demo-tabs" |
| 305 | - v-model="activeTabContent" | 307 | + v-model="state.activeTabContent" |
| 306 | @tab-click="handleTabContentClick" | 308 | @tab-click="handleTabContentClick" |
| 307 | > | 309 | > |
| 308 | <el-tab-pane | 310 | <el-tab-pane |
| 309 | v-for="(role, idx) in item.data" | 311 | v-for="(role, idx) in item.data" |
| 310 | :key="idx" | 312 | :key="idx" |
| 313 | + :name="role.label" | ||
| 311 | :label="role.label" | 314 | :label="role.label" |
| 312 | > | 315 | > |
| 313 | <el-checkbox-group | 316 | <el-checkbox-group |
| ... | @@ -465,7 +468,9 @@ export default { | ... | @@ -465,7 +468,9 @@ export default { |
| 465 | } | 468 | } |
| 466 | ], | 469 | ], |
| 467 | userTags: [], | 470 | userTags: [], |
| 471 | + currentNodeKey: [], // 当前展开的节点 | ||
| 468 | activeTabId: "tab-1", // TODO: 需要获取默认第一个ID | 472 | activeTabId: "tab-1", // TODO: 需要获取默认第一个ID |
| 473 | + activeTabContent: '', | ||
| 469 | userTabs: [], | 474 | userTabs: [], |
| 470 | tabSelectData: [], | 475 | tabSelectData: [], |
| 471 | userTabType: "tree", | 476 | userTabType: "tree", |
| ... | @@ -590,15 +595,15 @@ export default { | ... | @@ -590,15 +595,15 @@ export default { |
| 590 | children: [], | 595 | children: [], |
| 591 | list: [ | 596 | list: [ |
| 592 | { | 597 | { |
| 593 | - id: "role-1-2", | 598 | + id: "user-1-1", |
| 594 | - label: "选项 A", | 599 | + label: "用户1-1", |
| 595 | - checked: false, | 600 | + checked: true, |
| 596 | disabled: false | 601 | disabled: false |
| 597 | }, | 602 | }, |
| 598 | { | 603 | { |
| 599 | - id: "role-1-3", | 604 | + id: "user-2-2", |
| 600 | - label: "选项 B", | 605 | + label: "用户2-2", |
| 601 | - checked: true, | 606 | + checked: false, |
| 602 | disabled: false | 607 | disabled: false |
| 603 | }, | 608 | }, |
| 604 | { | 609 | { |
| ... | @@ -637,6 +642,8 @@ export default { | ... | @@ -637,6 +642,8 @@ export default { |
| 637 | state.tabSelectData = tab.data; // tab选中数据提供给list类型使用 | 642 | state.tabSelectData = tab.data; // tab选中数据提供给list类型使用 |
| 638 | state.userList = []; // 清空用户列表 | 643 | state.userList = []; // 清空用户列表 |
| 639 | state.checkedUserList = []; // 清空选中用户列表 | 644 | state.checkedUserList = []; // 清空选中用户列表 |
| 645 | + state.activeTabContent = ''; // 清空侧边栏显示 | ||
| 646 | + state.currentNodeKey = []; // 清空树形的默认展开 | ||
| 640 | // console.log(tab, event); | 647 | // console.log(tab, event); |
| 641 | // 设置当前激活的tab | 648 | // 设置当前激活的tab |
| 642 | state.userTabType = tab.type; | 649 | state.userTabType = tab.type; |
| ... | @@ -650,21 +657,23 @@ export default { | ... | @@ -650,21 +657,23 @@ export default { |
| 650 | // 文字宽度 | 657 | // 文字宽度 |
| 651 | state.tabTextWidth = $("#" + tab.id).width() + "px"; | 658 | state.tabTextWidth = $("#" + tab.id).width() + "px"; |
| 652 | // 检查列表第一项是否有值 | 659 | // 检查列表第一项是否有值 |
| 653 | - if (tab?.data[0]?.list) { | 660 | + // if (tab?.data[0]?.list) { |
| 654 | - let list = tab.data[0].list; | 661 | + // let list = tab.data[0].list; |
| 655 | - state.userList = list; | 662 | + // state.userList = list; |
| 656 | - state.checkedUserList = list | 663 | + // state.checkedUserList = list |
| 657 | - .filter(ele => { | 664 | + // .filter(ele => { |
| 658 | - return ele.checked; | 665 | + // return ele.checked; |
| 659 | - }) | 666 | + // }) |
| 660 | - .map(ele => { | 667 | + // .map(ele => { |
| 661 | - return ele.id; | 668 | + // return ele.id; |
| 662 | - }); | 669 | + // }); |
| 663 | - } | 670 | + // } |
| 664 | }; | 671 | }; |
| 665 | 672 | ||
| 666 | const handleTabContentClick = (tab, event) => { | 673 | const handleTabContentClick = (tab, event) => { |
| 667 | // 侧边栏Tab点击回调 | 674 | // 侧边栏Tab点击回调 |
| 675 | + // console.log(state.activeTabContent); | ||
| 676 | + // console.log(tab); | ||
| 668 | // console.log(event); | 677 | // console.log(event); |
| 669 | state.tabSelectData.forEach(ele => { | 678 | state.tabSelectData.forEach(ele => { |
| 670 | if (ele.label === tab.props.label) { | 679 | if (ele.label === tab.props.label) { |
| ... | @@ -692,6 +701,7 @@ export default { | ... | @@ -692,6 +701,7 @@ export default { |
| 692 | return ele.id; | 701 | return ele.id; |
| 693 | }); | 702 | }); |
| 694 | // console.warn(state.checkedUserList); | 703 | // console.warn(state.checkedUserList); |
| 704 | + state.currentNodeKey = [data.id]; | ||
| 695 | } | 705 | } |
| 696 | }; | 706 | }; |
| 697 | 707 | ||
| ... | @@ -744,8 +754,12 @@ export default { | ... | @@ -744,8 +754,12 @@ export default { |
| 744 | }); | 754 | }); |
| 745 | // 合并成一维数组列表 | 755 | // 合并成一维数组列表 |
| 746 | userList = [...userList.flat()]; | 756 | userList = [...userList.flat()]; |
| 757 | + // 如果ID相同,需要数据去重 | ||
| 758 | + let uniqueArray = userList.filter((value, index, self) => | ||
| 759 | + index === self.findIndex(obj => obj.id === value.id) | ||
| 760 | + ); | ||
| 747 | // 勾选变化后同步到选中列表 | 761 | // 勾选变化后同步到选中列表 |
| 748 | - state.userTags = userList | 762 | + state.userTags = uniqueArray |
| 749 | .filter(ele => { | 763 | .filter(ele => { |
| 750 | return ele.checked; | 764 | return ele.checked; |
| 751 | }) | 765 | }) |
| ... | @@ -823,10 +837,26 @@ export default { | ... | @@ -823,10 +837,26 @@ export default { |
| 823 | .filter(ele => ele.checked) | 837 | .filter(ele => ele.checked) |
| 824 | .map(ele => ele.id); | 838 | .map(ele => ele.id); |
| 825 | }; | 839 | }; |
| 840 | + const checkUserStatus = () => { | ||
| 841 | + // 在搜索框中同步显示tag框选中的用户 | ||
| 842 | + state.userTags.forEach(ele => { | ||
| 843 | + state.userList.forEach(item => { | ||
| 844 | + if (ele.id === item.id) { | ||
| 845 | + item.checked = true; | ||
| 846 | + } | ||
| 847 | + }); | ||
| 848 | + }); | ||
| 849 | + // 显示选中tags的用户 | ||
| 850 | + state.checkedUserList = state.userList | ||
| 851 | + .filter(ele => ele.checked) | ||
| 852 | + .map(ele => ele.id); | ||
| 853 | + }; | ||
| 826 | 854 | ||
| 827 | const onClearSearch = () => { | 855 | const onClearSearch = () => { |
| 828 | // 清空搜索回调 | 856 | // 清空搜索回调 |
| 829 | state.is_active_search = !state.is_active_search; | 857 | state.is_active_search = !state.is_active_search; |
| 858 | + // 同步显示tag框选中的用户 | ||
| 859 | + checkUserStatus(); | ||
| 830 | }; | 860 | }; |
| 831 | const onSearch = () => { | 861 | const onSearch = () => { |
| 832 | // TODO: 搜索回调 | 862 | // TODO: 搜索回调 |
| ... | @@ -834,7 +864,7 @@ export default { | ... | @@ -834,7 +864,7 @@ export default { |
| 834 | { | 864 | { |
| 835 | id: "user-1-1", | 865 | id: "user-1-1", |
| 836 | label: "用户1-1", | 866 | label: "用户1-1", |
| 837 | - checked: true, | 867 | + checked: false, |
| 838 | disabled: false | 868 | disabled: false |
| 839 | }, | 869 | }, |
| 840 | { | 870 | { |
| ... | @@ -849,24 +879,6 @@ export default { | ... | @@ -849,24 +879,6 @@ export default { |
| 849 | checked: false, | 879 | checked: false, |
| 850 | disabled: true | 880 | disabled: true |
| 851 | }, | 881 | }, |
| 852 | - { | ||
| 853 | - id: "role-1-2", | ||
| 854 | - label: "选项 A", | ||
| 855 | - checked: false, | ||
| 856 | - disabled: false | ||
| 857 | - }, | ||
| 858 | - { | ||
| 859 | - id: "role-1-3", | ||
| 860 | - label: "选项 B", | ||
| 861 | - checked: true, | ||
| 862 | - disabled: false | ||
| 863 | - }, | ||
| 864 | - { | ||
| 865 | - id: "role-1-4", | ||
| 866 | - label: "选项 C", | ||
| 867 | - checked: false, | ||
| 868 | - disabled: true | ||
| 869 | - } | ||
| 870 | ]; | 882 | ]; |
| 871 | // console.log(state.userTags); | 883 | // console.log(state.userTags); |
| 872 | checkSearchStatus(); | 884 | checkSearchStatus(); | ... | ... |
-
Please register or login to post a comment