From f481c5fe4fc2aa80c77a760f4161e4ab3912cb45 Mon Sep 17 00:00:00 2001 From: zhoushihao <zsh19950802@163.com> Date: 星期六, 06 七月 2024 15:07:01 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- UI-Project/src/views/User/rolelist.vue | 204 ++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 153 insertions(+), 51 deletions(-) diff --git a/UI-Project/src/views/User/rolelist.vue b/UI-Project/src/views/User/rolelist.vue index 5dcbb0b..df11be3 100644 --- a/UI-Project/src/views/User/rolelist.vue +++ b/UI-Project/src/views/User/rolelist.vue @@ -13,7 +13,7 @@ // import { ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' // import LanguageMixin from './lang/LanguageMixin' -const selectedProjectNoa = ref(''); // 褰撳墠閫変腑鐨勮鑹� +const selectedProjectNoa = ref(null); // 褰撳墠閫変腑鐨勮鑹� // const options = ref<any[]>([]); // 涓嬫媺閫夐」鍒楄〃 const name = ref(''); const tableData = ref([]) @@ -53,26 +53,34 @@ console.error('Error fetching options:', error); } }; -// 娣诲姞 +// 娣诲姞 const getTableRow = async () => { try { let menuList = []; - selectedOptions.value.forEach(array => { - if (array.length >= 2) { - let id = array[0]; - let parentId = array[1]; - menuList.push({ - id: id, - parentId: 0, - children: [ - { - id: parentId, - parentId: id, - } - ], - }); + let parentIdMap = {}; // 鐢ㄤ簬瀛樺偍宸茬粡娣诲姞鐨勭埗椤� + selectedOptions.value.forEach(array => { + if (array.length >= 2) { + let id = array[0]; + let parentId = array[1]; + // 濡傛灉id杩樻湭浣滀负鐖堕」娣诲姞锛屽垯娣诲姞瀹� + if (!parentIdMap[id]) { + menuList.push({ + id: id, + parentId: 0, // 閫氬父锛岄《绾ч」鐨刾arentId鍙兘鏄痭ull鎴栫壒瀹氱殑鏍笽D锛岃繖閲岃涓�0鍙兘鏄釜鐗规畩鐢ㄩ�� + children: [] + }); + parentIdMap[id] = menuList[menuList.length - 1]; // 鏇存柊鏄犲皠 + } + // 鍚戝搴旂殑鐖堕」娣诲姞瀛愰」 + if (!parentIdMap[id].children.some(child => child.id === parentId)) { + // 妫�鏌ユ槸鍚﹀凡瀛樺湪鐩稿悓鐨勫瓙椤癸紙鍩轰簬id锛夛紝閬垮厤閲嶅娣诲姞 + parentIdMap[id].children.push({ + id: parentId, + parentId: id + }); + } } - }); + }); const dataToSend = { name: name.value, menuList: menuList @@ -91,61 +99,155 @@ console.error(error); } }; -// 澶勭悊缂栬緫鎸夐挳鐐瑰嚮 + +// function buildCascaderOptions(menuList) { +// // 鍒涘缓涓�涓槧灏勬潵蹇�熸煡鎵剧埗椤� +// const parentIdMap = {}; +// // 鍒濆鍖栨渶缁堢殑绾ц仈閫夐」鏁扮粍 +// const options = []; +// // 閬嶅巻鎵�鏈夎彍鍗曢」锛屽皢瀹冧滑娣诲姞鍒版槧灏勪腑锛屽苟鏋勫缓椤剁骇鑿滃崟椤� +// menuList.forEach(item => { +// // 濡傛灉parentId涓�0锛屽垯涓洪《绾ц彍鍗曢」 +// if (item.parentId === 0) { +// // 鍒濆鍖朿hildren鏁扮粍 +// item.children = []; +// // 娣诲姞鍒版渶缁堢殑閫夐」涓� +// options.push({ +// value: item.id, +// label: item.menuName, +// children: item.children +// }); +// // 灏嗛《绾ц彍鍗曢」娣诲姞鍒版槧灏勪腑锛堣櫧鐒跺湪杩欎釜鐗瑰畾鍦烘櫙涓彲鑳戒笉鏄繀闇�鐨勶紝浣嗗彲浠ョ敤浜庡叾浠栫洰鐨勶級 +// parentIdMap[item.id] = item; +// } else { +// // 濡傛灉parentId涓嶆槸0锛屽垯鏌ユ壘鐖堕」骞舵坊鍔犲埌鍏禼hildren鏁扮粍涓� +// // 娉ㄦ剰锛氳繖閲屽亣璁緋arentIdMap鍦ㄤ箣鍓嶅凡缁忓~鍏呬簡鎵�鏈夐《绾ц彍鍗曢」 +// if (!parentIdMap[item.parentId]) { +// // 濡傛灉鐖堕」涓嶅瓨鍦紝鍒欏彲鑳芥槸鏁版嵁涓嶅畬鏁存垨閿欒锛岄渶瑕佸鐞嗚繖绉嶆儏鍐� +// console.error(`Parent item with ID ${item.parentId} not found for child item with ID ${item.id}`); +// } else { +// parentIdMap[item.parentId].children.push({ +// value: item.id, +// label: item.menuName +// // 杩欓噷涓嶉渶瑕佸祵濂楃殑children锛岄櫎闈炰綘鐨勮彍鍗曟湁澶氫簬涓ょ骇鐨勭粨鏋� +// }); +// } +// } +// }); +// return options; +// } function handleEdit(row) { - name.value = row.name; - selectedOptions.value = row.selectedOptions -// options.value = res.data.tree - adda.value = true; // 鏄剧ず瀵硅瘽妗� - window.localStorage.setItem('id', row.id) -} + name.value = row.name; + const parentIdMap = {}; + const menuItems = row.menuList.map(item => { + let parentId = item.parentId || null; // 鎴栬�呬娇鐢� 0锛屽鏋滀綘鐨勭郴缁熸槸杩欐牱璁捐鐨� + if (!parentIdMap[parentId]) { + parentIdMap[parentId] = []; + } + parentIdMap[parentId].push({ + id: item.id, + menuName: item.menuName, + children: [] // 鍒濆涓虹┖锛岀◢鍚庝細濉厖瀛愰」 + }); + return { id: item.id, menuName: item.menuName, parentId: parentId }; + }); + + // 鐜板湪锛屾垜浠亶鍘嗘墍鏈夐」锛屽苟灏嗗畠浠垎閰嶇粰瀹冧滑鐨勭埗椤癸紙濡傛灉鏈夌殑璇濓級 + menuItems.forEach(item => { + if (item.parentId !== null && parentIdMap[item.parentId]) { + // 灏嗗綋鍓嶉」娣诲姞鍒板叾鐖堕」鐨� children 鏁扮粍涓� + parentIdMap[item.parentId].push({ + ...item, // 澶嶅埗闄や簡 parentId 涔嬪鐨勬墍鏈夊睘鎬� + children: [] // 杩欓噷鎴戜滑涓嶉渶瑕佸啀娆℃坊鍔� children锛屽洜涓哄畠宸茬粡鍦� parentIdMap 涓鍒濆鍖栦簡 + }); + // 娉ㄦ剰锛氳繖閲屽疄闄呬笂鏄竴涓敊璇紝鍥犱负鎴戜滑涓嶅簲璇ュ悜 parentIdMap[item.parentId] 鏁扮粍涓坊鍔犳暣涓」锛� + // 鑰屽簲璇ュ彧鏇存柊瀹冪殑 children 鏁扮粍銆備絾涓婇潰鐨勪唬鐮佺ず渚嬩簡濡備綍璁块棶鐖堕」銆� + // 姝g‘鐨勫仛娉曟槸鍦ㄦ瀯寤� parentIdMap 鏃跺氨璁剧疆濂� children 鏁扮粍锛屽苟鍦ㄥ悗闈笉鍐嶄慨鏀� parentIdMap[item.parentId] 鏁扮粍銆� + } + // 娉ㄦ剰锛氫笂闈㈢殑浠g爜閫昏緫鏈夎锛屽洜涓烘垜浠湪鏋勫缓 parentIdMap 鏃跺凡缁忎负姣忎釜椤硅缃簡 children 鏁扮粍銆� + // 鎴戜滑搴旇鐩存帴淇敼杩欎簺 children 鏁扮粍锛岃�屼笉鏄悜 parentIdMap[item.parentId] 鏁扮粍娣诲姞鏂伴」銆� + }); + + // 浣嗘槸锛岀敱浜庢垜浠湪鏋勫缓 parentIdMap 鏃跺凡缁忎负姣忎釜椤癸紙鍖呮嫭鍏剁埗椤癸級璁剧疆浜� children 鏁扮粍锛� + // 鎴戜滑瀹為檯涓婁笉闇�瑕佷笂闈㈢殑寰幆鏉ラ噸鏂板垎閰嶅瓙椤广�� + // 鎴戜滑鍙渶瑕佹壘鍒伴《绾ч」锛坧arentId 涓� null 鎴� 0 鐨勯」锛夛紝骞跺皢瀹冧滑璁剧疆涓� selectedOptions.value + + // 鍋囪椤剁骇椤圭殑 parentId 涓� null锛堟垨 0锛屾牴鎹綘鐨勭郴缁燂級 + const topLevelItems = parentIdMap[null] || parentIdMap[0] || []; + + // selectedOptions.value 搴旇鏄《绾ч」鐨勬暟缁勶紝浣嗛鍏堟垜浠渶瑕佸皢瀹冧滑浠� parentIdMap 鐨勫�间腑鎻愬彇鍑烘潵 + // 鐢变簬鎴戜滑鍦ㄦ瀯寤� parentIdMap 鏃跺凡缁忎负姣忎釜椤剁骇椤硅缃簡 children锛屾墍浠ユ垜浠彲浠ョ洿鎺ヤ娇鐢ㄨ繖浜涢」 + selectedOptions.value = topLevelItems; + + // 娉ㄦ剰锛歴electedOptions.value 鐨勫叿浣撴牸寮忓簲璇ヤ笌浣犵殑绾ц仈閫夋嫨鍣ㄧ粍浠舵墍鏈熸湜鐨勬牸寮忕浉鍖归厤 + // 濡傛灉浣犵殑绾ц仈閫夋嫨鍣ㄧ粍浠舵湡鏈涚殑鏄竴涓寘鍚� value 鍜� label 鐨勬暟缁勬暟缁勶紝浣犲彲鑳借繕闇�瑕佽繘涓�姝ヨ浆鎹� topLevelItems + adda.value = true; // 鏄剧ず瀵硅瘽妗� + +} + +// 娉ㄦ剰锛氫笂闈㈢殑浠g爜鍙兘浠嶇劧闇�瑕佹牴鎹綘鐨勫叿浣撴暟鎹粨鏋勮繘琛岃皟鏁� +// 鐗瑰埆鏄叧浜� parentId 鐨勫鐞嗭紝浠ュ強濡備綍灏嗚彍鍗曢」姝g‘鍦板垎閰嶇粰瀹冧滑鐨勭埗椤� +// 澶勭悊缂栬緫鎸夐挳鐐瑰嚮 +// function handleEdit(row) { +// name.value = row.name; +// let cascaderOptions = buildCascaderOptions(row.menuList); +// selectedOptions.value = cascaderOptions; // 鍋囪selectedOptions鏄痸-model缁戝畾鐨勭骇鑱旈�夋嫨鍣ㄧ殑鍊� +// console.log(cascaderOptions); // 鏌ョ湅鏋勫缓鍚庣殑绾ц仈閫夐」 +// // let transformedMenuList = row.menuList.map(item => ({ +// // id: item.id, // 鍋囪姣忎釜椤归兘鏈変竴涓猧d浣滀负鍞竴鏍囪瘑 +// // menuName: item.menuName, // 鏄剧ず缁欑敤鎴风殑鏂囨湰 +// // // children: item.children ? item.children.map(child => ({ value: child.id, label: child.name })) : [] +// // })); +// // selectedOptions.value = transformedMenuList +// console.log(transformedMenuList); +// adda.value = true; // 鏄剧ず瀵硅瘽妗� +// window.localStorage.setItem('id', row.id) +// } // 缂栬緫 const getTableRowa = async () => { let id = window.localStorage.getItem('id') try { let menuList = []; - selectedOptions.value.forEach(array => { - if (array.length >= 2) { - let id = array[0]; - let parentId = array[1]; - menuList.push({ - id: id, - parentId: 0, - children: [ - { - id: parentId, - parentId: id, - } - ], - }); + let parentIdMap = {}; // 鐢ㄤ簬瀛樺偍宸茬粡娣诲姞鐨勭埗椤� + selectedOptions.value.forEach(array => { + if (array.length >= 2) { + let id = array[0]; + let parentId = array[1]; + // 濡傛灉id杩樻湭浣滀负鐖堕」娣诲姞锛屽垯娣诲姞瀹� + if (!parentIdMap[id]) { + menuList.push({ + id: id, + parentId: 0, // 閫氬父锛岄《绾ч」鐨刾arentId鍙兘鏄痭ull鎴栫壒瀹氱殑鏍笽D锛岃繖閲岃涓�0鍙兘鏄釜鐗规畩鐢ㄩ�� + children: [] + }); + parentIdMap[id] = menuList[menuList.length - 1]; // 鏇存柊鏄犲皠 + } + // 鍚戝搴旂殑鐖堕」娣诲姞瀛愰」 + if (!parentIdMap[id].children.some(child => child.id === parentId)) { + // 妫�鏌ユ槸鍚﹀凡瀛樺湪鐩稿悓鐨勫瓙椤癸紙鍩轰簬id锛夛紝閬垮厤閲嶅娣诲姞 + parentIdMap[id].children.push({ + id: parentId, + parentId: id + }); + } } - }); + }); const dataToSend = { id:id, name: name.value, menuList: menuList }; const response = await request.post('/loadGlass/sys/role/updateRole', dataToSend); - // try { - // const response = await request.post('/loadGlass/sys/role/updateRole', { - // id: id, - // name: name.value, - // }); - if (response.code == 200) { - // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫 ElMessage.success(response.message); adda.value = false; name.value = ''; - selectedOptions.value = ''; - fetchOptionsa() - tableData.value = response.data; + selectedOptions.value = ''; + fetchOptionsa(); } else { - // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭� ElMessage.error(response.message); } } catch (error) { - // 澶勭悊閿欒 console.error(error); } }; -- Gitblit v1.8.0