hookehuyr

fix 如果选中项ID相同需要去重

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();
......