From 9c3dcce4b913a8eb90883ee7837629327efdf6d9 Mon Sep 17 00:00:00 2001
From: wangfei <3597712270@qq.com>
Date: 星期四, 30 十月 2025 13:37:49 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10105/r/YiWuProject

---
 UI-Project/src/views/User/rolelist.vue |   84 ++++++++++++++++++------------------------
 1 files changed, 36 insertions(+), 48 deletions(-)

diff --git a/UI-Project/src/views/User/rolelist.vue b/UI-Project/src/views/User/rolelist.vue
index 5d180ed..830ec41 100644
--- a/UI-Project/src/views/User/rolelist.vue
+++ b/UI-Project/src/views/User/rolelist.vue
@@ -1,35 +1,29 @@
 <script setup>
 import {Search} from "@element-plus/icons-vue";
-import {reactive} from "vue";
+import {reactive, computed} from "vue";
 import {useRouter} from "vue-router"
-  import { useI18n } from 'vue-i18n'
-  const { t } = useI18n()
-  let language = ref(localStorage.getItem('lang') || 'zh')
+import { useI18n } from 'vue-i18n'
+const { t } = useI18n()
+let language = ref(localStorage.getItem('lang') || 'zh')
 const router = useRouter()
 const add = ref(false)
 const adda = ref(false)
 import request from "@/utils/request"
 import { ref, onMounted } from "vue";
-// import { ref } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
-//  import LanguageMixin from './lang/LanguageMixin'
 const selectedProjectNoa = ref(null); // 褰撳墠閫変腑鐨勮鑹� 
-// const options = ref<any[]>([]); // 涓嬫媺閫夐」鍒楄〃  
-  const name = ref('');
+const name = ref('');
 const tableData = ref([])
 const options = ref([])
 const selectedOptions = ref([])
-// 瀹氫箟绾ц仈閫夋嫨鍣ㄧ殑灞炴��  
 const cascaderProps = {
   value: 'id',  
   label: 'menuName',  
   multiple: true
 };  
 const slot = ref('')
-
 const titleSelectJsona = ref({
   processType: [],
- 
 })
 onMounted(() => {  
   fetchOptionsa('');  
@@ -44,8 +38,6 @@
      tableData.value = response.data
     // titleSelectJsona.value.processTypea = response.data.menuList;
     // options.value = response.data.menuList
-    console.log(response.data);
- 
     } else {  
       ElMessage.warning(response.data);  
     }  
@@ -53,6 +45,12 @@
     console.error('Error fetching options:', error);  
   }  
 }; 
+// 璁$畻灞炴�ф鏌ヨ〃鍗曟槸鍚︽湁鏁�
+const isFormValid = computed(() => {
+  return name.value.trim() !== '' && 
+         selectedOptions.value && 
+         selectedOptions.value.length > 0;
+});
 // 娣诲姞
 const getTableRow = async () => {
   try {  
@@ -66,7 +64,7 @@
         if (!parentIdMap[id]) {  
           menuList.push({  
             id: id,  
-            parentId: 0, // 閫氬父锛岄《绾ч」鐨刾arentId鍙兘鏄痭ull鎴栫壒瀹氱殑鏍笽D锛岃繖閲岃涓�0鍙兘鏄釜鐗规畩鐢ㄩ��  
+            parentId: 0,
             children: []  
           });  
           parentIdMap[id] = menuList[menuList.length - 1]; // 鏇存柊鏄犲皠  
@@ -80,11 +78,11 @@
           });  
         }  
       }  
-    });  
+    }); 
     const dataToSend = {  
       name: name.value,
       menuList: menuList
-    };  
+    };
     const response = await request.post('/loadGlass/sys/role/saveRole', dataToSend);
     if (response.code == 200) {
       ElMessage.success(response.message);
@@ -99,7 +97,7 @@
     console.error(error);
   }
 };
-function handleEdit(row) {  
+function handleEdit(row) {
   name.value = row.name;  
   adda.value = true;
   window.localStorage.setItem('ids', row.id);
@@ -139,8 +137,7 @@
   }  
   if (selectedOptions.value !== topLevelItems) {  
     selectedOptions.value = topLevelItems;  
-  }  
-  console.log(topLevelItems);
+  }
   // selectedOptions.value = topLevelItems;
 const topLevelItemsWithChildren = topLevelItems; // 鍖呭惈椤剁骇鑿滃崟椤瑰強鍏跺瓙鑿滃崟椤圭殑鏁扮粍 聽
  let selectedPath = [];
@@ -156,7 +153,6 @@
         }  
     }  
 }
- console.log(selectedPath);
 selectedOptions.value = selectedPath;
 }
 // 缂栬緫
@@ -164,7 +160,7 @@
   let ids = window.localStorage.getItem('ids')
   try {  
     let menuList = [];
-     let parentIdMap = {}; // 鐢ㄤ簬瀛樺偍宸茬粡娣诲姞鐨勭埗椤�  
+    let parentIdMap = {}; // 鐢ㄤ簬瀛樺偍宸茬粡娣诲姞鐨勭埗椤�  
     selectedOptions.value.forEach(array => {  
       if (array.length >= 2) {  
         let id = array[0];  
@@ -173,7 +169,7 @@
         if (!parentIdMap[id]) {  
           menuList.push({  
             id: id,  
-            parentId: 0, // 閫氬父锛岄《绾ч」鐨刾arentId鍙兘鏄痭ull鎴栫壒瀹氱殑鏍笽D锛岃繖閲岃涓�0鍙兘鏄釜鐗规畩鐢ㄩ��  
+            parentId: 0, 
             children: []  
           });  
           parentIdMap[id] = menuList[menuList.length - 1]; // 鏇存柊鏄犲皠  
@@ -229,47 +225,39 @@
         type: 'warning',  
       } 
     ); 
-    if (confirmResult === 'confirm') {  
-      // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛  
+    if (confirmResult === 'confirm') {
       const response = await request.post("/loadGlass/sys/role/delete",[row.id])
     if (response.code === 200) {
       ElMessage.success(response.message);
       fetchOptionsa()
-      } else {  
-        // 鍒犻櫎澶辫触锛屾偍鍙互澶勭悊閿欒鎴栨樉绀洪敊璇俊鎭粰鐢ㄦ埛  
+      } else {
       ElMessage.error(response.message);
-        // alert('鍒犻櫎澶辫触锛�' + deleteResponse.message); 
       }  
     }  
-  } catch (error) {  
-    // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑  
+  } catch (error) {
     console.error('鍙戠敓閿欒:', error);  
   }  
 };
 request.get("/loadGlass/sys/menu/nav").then((res) => {
  if (res.code == 200) {
- console.log(res.data);
  options.value = res.data.tree
- console.log( options.value);
  } else {
  ElMessage.warning(res.msg)
  }
  });
 </script>
-
 <template>
   <div>
-     <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">
+     <el-button type="primary" style="margin-top: 10px;margin-left: 10px;"  id="searchButton" @click="add = true">{{ $t('delivery.addrole') }}</el-button>
+    <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;">
       <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
-        <el-table height="500" ref="table" 
-        @selection-change="handleSelectionChange"
+        <el-table height="750" ref="table"
         :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
           <el-table-column prop="name" align="center" :label="$t('delivery.role')" min-width="180" />
           <el-table-column fixed="right" :label="$t('delivery.operate')" align="center" width="200">
             <template #default="scope">
-              <el-button size="mini" type="text" plain  @click="handleEdit(scope.row)">{{ $t('delivery.edit') }}</el-button>
-              <el-button size="mini" type="text" plain @click="opena(scope.row)">{{ $t('delivery.delete') }}</el-button>
+              <el-button type="text" plain  @click="handleEdit(scope.row)">{{ $t('delivery.edit') }}</el-button>
+              <el-button type="text" plain @click="opena(scope.row)">{{ $t('delivery.delete') }}</el-button>
             </template>
         </el-table-column>
         </el-table>
@@ -278,14 +266,14 @@
   </div>
   <el-dialog v-model="add" top="23vh" width="37%" :title="$t('productStock.addusername')" >
     <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
-            <el-form ref="formRef" size="mini" label-width="150px">
+            <el-form ref="formRef" label-width="150px">
       <el-form label-width="100px" label-position="right">
         <el-row style="margin-top: -15px;margin-bottom: -2px;">
           <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
         <div>
           <el-form-item :label="$t('delivery.rolea')" :required="true" style="width: 25vw">
-                <el-input :placeholder="$t('delivery.inrole')" v-model="name" autocomplete="off" />
+                <el-input :placeholder="$t('delivery.inrole')" v-model="name" autocomplete="off" :class="{ 'is-required': !name }" style="width: 350px"/>
               </el-form-item></div></div>
           </el-col>
         </el-row>
@@ -296,10 +284,11 @@
               <el-form-item :label="$t('delivery.choice')" :required="true" style="width: 25vw;">
         <el-cascader 
          v-model="selectedOptions" 
+         :class="{ 'is-required': !selectedOptions || selectedOptions.length === 0 }"
          :placeholder="$t('delivery.inchoice')"
          :props="cascaderProps"  
          :options="options" 
-               style="width: 330px"
+               style="width: 350px"
                clearable />
               </el-form-item></div></div>
           </el-col>
@@ -309,7 +298,7 @@
           </div>
     <template #footer>
       <div id="dialog-footer">
-        <el-button type="primary" @click="getTableRow">
+        <el-button type="primary" @click="getTableRow" :disabled="!isFormValid">
           {{ $t('delivery.sure') }}
         </el-button>
         <el-button @click="closeDialog"> {{ $t('delivery.cancel') }}</el-button>
@@ -318,14 +307,14 @@
   </el-dialog> 
   <el-dialog v-model="adda" top="23vh" width="37%" :title="$t('delivery.editrole')">
     <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
-            <el-form ref="formRef" size="mini" label-width="150px">
+            <el-form ref="formRef" label-width="150px">
               <el-form label-width="100px" label-position="right">
         <el-row style="margin-top: -15px;margin-bottom: -2px;">
           <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
         <div>
           <el-form-item :label="$t('delivery.rolea')" :required="true" style="width: 25vw">
-                <el-input :placeholder="$t('delivery.inrole')" v-model="name" autocomplete="off" />
+                <el-input :placeholder="$t('delivery.inrole')" v-model="name" autocomplete="off" :class="{ 'is-required': !name }" style="width: 350px"/>
               </el-form-item></div></div>
           </el-col>
         </el-row>
@@ -336,10 +325,11 @@
        <el-form-item :label="$t('delivery.choice')" :required="true" style="width: 25vw;">
         <el-cascader 
          v-model="selectedOptions"  
+         :class="{ 'is-required': !selectedOptions || selectedOptions.length === 0 }"
          :placeholder="$t('delivery.inchoice')"
          :props="cascaderProps"  
          :options="options" 
-               style="width: 330px"
+                style="width: 350px"
                clearable />
               </el-form-item></div></div>
           </el-col>
@@ -349,7 +339,7 @@
           </div>
     <template #footer>
       <div id="dialog-footer">
-        <el-button type="primary" @click="getTableRowa">
+        <el-button type="primary" @click="getTableRowa" :disabled="!isFormValid">
           {{ $t('delivery.sure') }}
         </el-button>
         <el-button @click="closeDialoga">{{ $t('delivery.cancel') }}</el-button>
@@ -357,9 +347,7 @@
     </template>
   </el-dialog> 
 </template>
-
 <style scoped>
-
 #dt { display:block; float:left;line-height: 20px;margin-left: 100px;}
 #dta { display:block; float:left;line-height: 20px;margin-left: 80%;}
 #dialog-footer{

--
Gitblit v1.8.0