From 56fab901b298857ff4985b7429ef843c9a9d1471 Mon Sep 17 00:00:00 2001
From: wangfei <3597712270@qq.com>
Date: 星期三, 28 八月 2024 16:20:02 +0800
Subject: [PATCH] 钢化模块打印功能,新增表格字段

---
 UI-Project/src/views/User/rolelist.vue |  197 +++++++++++++++++++++++++++++++++++--------------
 1 files changed, 141 insertions(+), 56 deletions(-)

diff --git a/UI-Project/src/views/User/rolelist.vue b/UI-Project/src/views/User/rolelist.vue
index 14d1ad3..5d180ed 100644
--- a/UI-Project/src/views/User/rolelist.vue
+++ b/UI-Project/src/views/User/rolelist.vue
@@ -13,12 +13,12 @@
 // 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([])
 const options = ref([])
-const selectedOptions = ref('')
+const selectedOptions = ref([])
 // 瀹氫箟绾ц仈閫夋嫨鍣ㄧ殑灞炴��  
 const cascaderProps = {
   value: 'id',  
@@ -31,27 +31,19 @@
   processType: [],
  
 })
-// const handleInputChangea = async (value: string) => {  
-//   if (value) {  
-//     await fetchOptionsa(value);  
-//   } else {  
-//     options.value = []; // 娓呯┖閫夐」鍒楄〃  
-//   }  
-// };  
 onMounted(() => {  
-  // 鍦ㄧ粍浠舵寕杞藉悗璋冪敤 fetchOptions('') 鏉ュ姞杞藉垵濮嬫暟鎹紙濡傛灉闇�瑕侊級  
   fetchOptionsa('');  
 }); 
   // 瑙掕壊涓嬫媺閫�  
   const fetchOptionsa = async () => {  
   try {  
-    // 鍙戦�佽姹傚埌鍚庣鎺ュ彛  
     const response = await request.post('/loadGlass/sys/role/queryRole',{
   key: ''
 });  
     if (response.code == 200) {  
      tableData.value = response.data
     // titleSelectJsona.value.processTypea = response.data.menuList;
+    // options.value = response.data.menuList
     console.log(response.data);
  
     } else {  
@@ -61,77 +53,170 @@
     console.error('Error fetching options:', error);  
   }  
 }; 
-// 娣诲姞 
+// 娣诲姞
 const getTableRow = async () => {
-
-  const lastId = selectedOptions.value[selectedOptions.value.length - 1];  
-  // sendDataToServer(dataToSend);  
-  console.log(selectedOptions.value[selectedOptions.value.length - 1]);  
-  // 鍙互杩涗竴姝ュ鐞嗭紝濡傚彂閫佽姹傜瓑  
-  try {
+  try {  
+    let menuList = [];
+     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,
-      // id: selectedOptions.value,
-      menuList: [lastId]
-      // [  
-        // {  
-      // menuName: selectedOptions.value,
-      // selectedOptions.value,
-        // }  
-      // ]  
-    };
-    const response = await request.post('/loadGlass/sys/role/saveRole', dataToSend); 
+      menuList: menuList
+    };  
+    const response = await request.post('/loadGlass/sys/role/saveRole', dataToSend);
     if (response.code == 200) {
-      // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫
       ElMessage.success(response.message);
       add.value = false;
       name.value = '';
-       selectedOptions.value = '';
-       fetchOptionsa()
-      //  tableData.value = response.data;
+      selectedOptions.value = '';
+      fetchOptionsa();
     } else {
-      // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
       ElMessage.error(response.message);
     }
   } catch (error) {
-    // 澶勭悊閿欒
     console.error(error);
   }
 };
-// 澶勭悊缂栬緫鎸夐挳鐐瑰嚮  
 function handleEdit(row) {  
-  name.value = row.name; 
-  selectedOptions.value = row.selectedOptions; 
-  adda.value = true; // 鏄剧ず瀵硅瘽妗�  
-  window.localStorage.setItem('id', row.id)
+  name.value = row.name;  
+  adda.value = true;
+  window.localStorage.setItem('ids', row.id);
+  const parentIdMap = {};  
+  const menuItemsById = {}; // 蹇�熸煡鎵捐彍鍗曢」  
+  let topLevelItems = []; // 瀛樺偍椤剁骇鑿滃崟椤� 
+  row.menuList.forEach(item => {  
+    const parentId = item.parentId === 0 ? null : item.parentId;
+    const menuItem = {  
+      id: item.id,  
+      parentId: parentId,  
+      menuName: item.menuName,  
+      children: []  
+    };  
+    menuItemsById[item.id] = menuItem;  
+    // 鍒濆鍖栨垨鏇存柊parentIdMap涓殑鏁扮粍  
+    if (!parentIdMap[parentId]) {  
+      parentIdMap[parentId] = [];  
+    }  
+    if (parentId === null) {  
+      // 椤剁骇鑿滃崟椤圭洿鎺ユ坊鍔犲埌topLevelItems  
+      topLevelItems.push(menuItem);  
+    } else {  
+      // 闈為《绾ц彍鍗曢」娣诲姞鍒皃arentIdMap涓�  
+      parentIdMap[parentId].push(menuItem);  
+    }  
+  });  
+  for (const parentId in parentIdMap) {  
+    if (parentId !== 'null') { // 璺宠繃椤剁骇鑿滃崟椤�  
+      parentIdMap[parentId].forEach(child => {  
+        // 鏌ユ壘鐖堕」骞舵坊鍔犲瓙椤�  
+        if (menuItemsById[parentId]) {  
+          menuItemsById[parentId].children.push(child);  
+        }  
+      });  
+    }  
+  }  
+  if (selectedOptions.value !== topLevelItems) {  
+    selectedOptions.value = topLevelItems;  
+  }  
+  console.log(topLevelItems);
+  // selectedOptions.value = topLevelItems;
+const topLevelItemsWithChildren = topLevelItems; // 鍖呭惈椤剁骇鑿滃崟椤瑰強鍏跺瓙鑿滃崟椤圭殑鏁扮粍 聽
+ let selectedPath = [];
+// 寰幆閬嶅巻 topLevelItemsWithChildren 鏁扮粍
+for (let i = 0; i < topLevelItemsWithChildren.length; i++) {
+ // 娣诲姞椤剁骇鑿滃崟椤圭殑 id
+ selectedPath.push(topLevelItemsWithChildren[i].id);
+ // 濡傛灉鏈夊瓙鑿滃崟椤癸紝娣诲姞绗竴涓瓙鑿滃崟椤圭殑 id
+ if (topLevelItemsWithChildren[i].children && topLevelItemsWithChildren[i].children.length > 0) {
+  for (let j = 0; j < topLevelItemsWithChildren[i].children.length; j++) {  
+            // 灏嗘瘡涓瓙鑿滃崟椤圭殑 id 娣诲姞鍒� selectedPath 涓�  
+            selectedPath.push(topLevelItemsWithChildren[i].children[j].id);  
+        }  
+    }  
+}
+ console.log(selectedPath);
+selectedOptions.value = selectedPath;
 }
 // 缂栬緫
 const getTableRowa = async () => {
-  let id = window.localStorage.getItem('id')
-  
-  try {
-    const response = await request.post('/loadGlass/sys/role/updateRole', {
-      id: id,
+  let ids = window.localStorage.getItem('ids')
+  try {  
+    let menuList = [];
+     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:ids,
       name: name.value,
-    }); 
- 
+      menuList: menuList
+    };  
+    const response = await request.post('/loadGlass/sys/role/updateRole', dataToSend);
     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);
   }
 };
+function closeDialog(row) {
+     add.value = false;
+      name.value = '';
+      selectedOptions.value = '';
+}
+function closeDialoga(row) {
+     adda.value = false;
+      name.value = '';
+      selectedOptions.value = '';
+}
 // 鍒犻櫎 
  const opena = async(row) => {  
   try {
@@ -177,7 +262,7 @@
      <el-button type="primary" style="margin-top: 10px;margin-left: 10px;"  size="mini" id="searchButton" @click="add = true">{{ $t('delivery.addrole') }}</el-button>
     <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
       <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
-        <el-table height="240" ref="table" 
+        <el-table height="500" ref="table" 
         @selection-change="handleSelectionChange"
         :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
           <el-table-column prop="name" align="center" :label="$t('delivery.role')" min-width="180" />
@@ -227,7 +312,7 @@
         <el-button type="primary" @click="getTableRow">
           {{ $t('delivery.sure') }}
         </el-button>
-        <el-button @click="add = false"> {{ $t('delivery.cancel') }}</el-button>
+        <el-button @click="closeDialog"> {{ $t('delivery.cancel') }}</el-button>
       </div>
     </template>
   </el-dialog> 
@@ -248,7 +333,7 @@
           <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
         <div>
-              <el-form-item :label="$t('delivery.choice')" :required="true" style="width: 25vw;">
+       <el-form-item :label="$t('delivery.choice')" :required="true" style="width: 25vw;">
         <el-cascader 
          v-model="selectedOptions"  
          :placeholder="$t('delivery.inchoice')"
@@ -267,7 +352,7 @@
         <el-button type="primary" @click="getTableRowa">
           {{ $t('delivery.sure') }}
         </el-button>
-        <el-button @click="adda = false">{{ $t('delivery.cancel') }}</el-button>
+        <el-button @click="closeDialoga">{{ $t('delivery.cancel') }}</el-button>
       </div>
     </template>
   </el-dialog> 

--
Gitblit v1.8.0