From d090edfef3884837b55263cc11e1c9462f724cbc Mon Sep 17 00:00:00 2001
From: wangfei <3597712270@qq.com>
Date: 星期三, 10 十二月 2025 17:01:27 +0800
Subject: [PATCH] 系统管理模块测试调整

---
 UI-Project/src/views/Slicecage/slicecage.vue |   10 
 UI-Project/src/lang/en.js                    |    6 
 UI-Project/src/lang/py.js                    |    6 
 UI-Project/src/lang/zh.js                    |    6 
 UI-Project/src/views/User/permissions.vue    |   42 +
 UI-Project/src/views/User/userlist.vue       |  787 ++++++++++++++++++++++++++++++++++------------------
 UI-Project/src/lang/kr.js                    |    6 
 UI-Project/src/views/User/userpageNo.vue     |   10 
 8 files changed, 578 insertions(+), 295 deletions(-)

diff --git a/UI-Project/src/lang/en.js b/UI-Project/src/lang/en.js
index b8d5f71..e041c92 100644
--- a/UI-Project/src/lang/en.js
+++ b/UI-Project/src/lang/en.js
@@ -412,6 +412,11 @@
         height: 'Height',
     },
     productStock: {
+        inconfirmpassword: 'Please enter the confirmation password',
+        passwordNotMatch: 'The passwords entered do not match',
+        confirmpassword: 'Confirm Password',
+        inputNewPassword: 'Please enter a new password',
+        userIdError: 'Failed to obtain user ID',
         configName: 'configure name',
         configNamea:'configure name锛�',
         configCode: 'Configuration Code',
@@ -805,6 +810,7 @@
         finegrinding: 'Fine grinding',
     },
     hellow: {
+        pleaseConfirm: 'Please double-click to confirm this fault after the issue has been resolved to ensure the system operates normally!',
         taskAlreadyClaimed: 'This task has already been claimed and cannot be performed again.',
         claimed: 'Already claimed',
         claimFailed: 'Failed to receive task',
diff --git a/UI-Project/src/lang/kr.js b/UI-Project/src/lang/kr.js
index b661dab..d90fc9c 100644
--- a/UI-Project/src/lang/kr.js
+++ b/UI-Project/src/lang/kr.js
@@ -409,6 +409,11 @@
           height:'雴掛澊',
       },
       productStock:{
+          inconfirmpassword: '牍勲皜氩堩樃毳� 頇曥澑頃� 鞛呺牓頃橃劯鞖�',
+          passwordNotMatch: '霊� 氩� 鞛呺牓頃� 牍勲皜氩堩樃臧� 鞚检箻頃橃 鞎婌姷雼堧嫟',
+          confirmpassword: '牍勲皜氩堩樃 頇曥澑',
+          inputNewPassword: '靸� 牍勲皜氩堩樃毳� 鞛呺牓頃橃劯鞖�',
+          userIdError: '靷毄鞛� ID 臧�鞝胳槫旮� 鞁ろ尐',
           addconfigName:'甑劚 於旉皜',
           editconfigName:'甑劚 靾橃爼',
           configName:'甑劚 鞚措',
@@ -806,6 +811,7 @@
           finegrinding: '鞝曣祼頃橁矊 臧堧嫟',
       },
     hellow: {
+        pleaseConfirm: '氍胳牅臧� 觳橂Μ霅� 頉勳棎 鞚� 鞛レ暊毳� 頇曥澑頃橂牑氅� 雿旊笖 韥措Ν頃橃棳 鞁滌姢韰滌澊 鞝曥儊鞝侅溂搿� 鞛戨彊頃橂弰搿� 頃橃劯鞖�!',
         taskAlreadyClaimed: '鞚� 鞛戩梾鞚� 鞚措 靾橂牴霅橃棃鞙茧┌, 氚橂车 靾橅枆頃� 靾� 鞐嗢姷雼堧嫟.',
         claimed: '氚涭潓',
         claimFailed: '鞛勲 氚涥赴 鞁ろ尐',
diff --git a/UI-Project/src/lang/py.js b/UI-Project/src/lang/py.js
index ed67e7d..2a73923 100644
--- a/UI-Project/src/lang/py.js
+++ b/UI-Project/src/lang/py.js
@@ -409,6 +409,11 @@
         height: '袙褘褋芯褌邪',
     },
     productStock: {
+        inconfirmpassword: '璇疯緭鍏ョ‘璁ゅ瘑鐮�',
+        passwordNotMatch: '涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鑷�',
+        confirmpassword: '纭瀵嗙爜',
+        inputNewPassword: '璇疯緭鍏ユ柊瀵嗙爜',
+        userIdError: '鐢ㄦ埛ID鑾峰彇澶辫触',
         configName:'閰嶇疆鍚�',
         configNamea:'閰嶇疆鍚嶏細',
         configCode:'閰嶇疆浠g爜',
@@ -725,6 +730,7 @@
         finegrinding: '绮剧(',
     },
     hellow: {
+        pleaseConfirm: '璇峰湪闂澶勭悊瀹屽悗锛屽弻鍑荤‘璁ゆ鏁呴殰锛屼繚璇佺郴缁熸甯歌繍琛岋紒',
         taskAlreadyClaimed: '璇ヤ换鍔″凡棰嗗彇锛屼笉鍙噸澶嶆搷浣�',
         claimed: '宸查鍙�',
         claimFailed: '棰嗗彇浠诲姟澶辫触',
diff --git a/UI-Project/src/lang/zh.js b/UI-Project/src/lang/zh.js
index 7a4d0e9..175fc1a 100644
--- a/UI-Project/src/lang/zh.js
+++ b/UI-Project/src/lang/zh.js
@@ -411,6 +411,11 @@
           height:'楂樺害',
       },
       productStock:{
+          inconfirmpassword: '璇疯緭鍏ョ‘璁ゅ瘑鐮�',
+          passwordNotMatch: '涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鑷�',
+          confirmpassword: '纭瀵嗙爜',
+          inputNewPassword: '璇疯緭鍏ユ柊瀵嗙爜',
+          userIdError: '鐢ㄦ埛ID鑾峰彇澶辫触',
           addconfigName:'娣诲姞閰嶇疆',
           editconfigName:'淇敼閰嶇疆',
           configName:'閰嶇疆鍚�',
@@ -814,6 +819,7 @@
           finegrinding: '绮剧(',
       },
     hellow: {
+        pleaseConfirm: '璇峰湪闂澶勭悊瀹屽悗锛屽弻鍑荤‘璁ゆ鏁呴殰锛屼繚璇佺郴缁熸甯歌繍琛岋紒',
         taskAlreadyClaimed: '璇ヤ换鍔″凡棰嗗彇锛屼笉鍙噸澶嶆搷浣�',
         claimed: '宸查鍙�',
         claimFailed: '棰嗗彇浠诲姟澶辫触',
diff --git a/UI-Project/src/views/Slicecage/slicecage.vue b/UI-Project/src/views/Slicecage/slicecage.vue
index eac6658..5d0d667 100644
--- a/UI-Project/src/views/Slicecage/slicecage.vue
+++ b/UI-Project/src/views/Slicecage/slicecage.vue
@@ -1248,6 +1248,7 @@
       <el-icon><WarnTriangleFilled /></el-icon>
       <span class="alert-text">
         {{ alertText }} (id:{{ alertMessage }})
+        <!-- <span class="confirm-text">{{ $t('hellow.pleaseConfirm') }}</span> -->
       </span>
     </div>
     <button @click="showAlert = false" class="close-btn">脳</button>
@@ -1265,7 +1266,7 @@
       style="width: 100%;"
     >
       <el-table-column prop="formattedCreateTime" align="center" :label="$t('film.createtime')" min-width="100" />
-      <el-table-column 
+      <el-table-column
        :label="$t('hellow.content')" 
        align="center" 
        min-width="220"
@@ -2035,4 +2036,11 @@
 .el-loading-mask {
   z-index: 2000 !important;
 }
+.confirm-text {
+  color: rgb(242, 121, 8);
+  display: block; /* 寮哄埗鎹㈣ */
+  text-align: center; /* 姘村钩灞呬腑 */
+  margin-top: 4px; /* 涓庝笂涓�琛屼繚鎸侀棿璺濓紝鍙�� */
+  font-weight: 500; /* 鍙�夛紝鍔犵矖绐佸嚭 */
+}
 </style>
\ No newline at end of file
diff --git a/UI-Project/src/views/User/permissions.vue b/UI-Project/src/views/User/permissions.vue
index e3445ad..4d40bda 100644
--- a/UI-Project/src/views/User/permissions.vue
+++ b/UI-Project/src/views/User/permissions.vue
@@ -20,17 +20,27 @@
 const currentRow = reactive({}); // 褰撳墠琛岀殑鏁版嵁 
 const tableData = ref([])
 const slot = ref('')
- request.get("/loadGlass/sys/menu/nav").then((res) => {
- if (res.code == 200) {
- tableData.value = res.data.tree
- } else {
- ElMessage.warning(res.msg)
- }
- });
+  const fetchList = async () => {  
+  try {  
+      const response = await request.get('/loadGlass/sys/menu/getMenuTree', {
+      params: {
+        key: -1
+      }
+    });
+    if (response.code === 200) {  
+    tableData.value = response.data
+    } else {  
+      ElMessage.warning(response.data);  
+    }  
+  } catch (error) {  
+    console.error('Error fetching options:', error);  
+  }  
+}; 
 const titleSelectJsona = ref({
   processType: [],
 })
 onMounted(() => {
+  fetchList()
   fetchOptionsa('');  
 }); 
   // 瑙掕壊涓嬫媺閫�  
@@ -96,12 +106,13 @@
       menuName: menuName.value,
       listSort: listSort.value,
       url: url.value,
+      parentId: 0
     }); 
  
     if (response.code === 200) {
       ElMessage.success(response.message);
       add.value = false;
-      tableData.value = response.data;
+      fetchList()
       menuName.value = '';
       listSort.value = '';
       url.value = '';
@@ -137,7 +148,7 @@
     if (response.code === 200) {
       ElMessage.success(response.message);
       addb.value = false;
-     tableData.value = response.data;
+      fetchList()
        menuName.value = '';
        listSort.value = '';
        url.value = '';
@@ -186,7 +197,7 @@
     if (response.code === 200) {
       ElMessage.success(response.message);
       adda.value = false;
-      tableData.value = response.data;
+      fetchList()
       menuName.value = '';
       listSort.value = '';
       url.value = '';
@@ -220,7 +231,7 @@
     if (response.code === 200) {
       ElMessage.success(response.message);
       addc.value = false;
-      tableData.value = response.data;
+      fetchList()
       menuName.value = '';
       listSort.value = '';
       url.value = '';
@@ -244,11 +255,14 @@
       } 
     );
     if (confirmResult === 'confirm') {
-      const response = await request.post("/loadGlass/sys/menu/deleteMenu", {
-        menuId: row.id,
-    })
+      const url = "/loadGlass/sys/menu/deleteMenu?menuId=" + row.id;
+      const response = await request.post(url);
+    //   const response = await request.post("/loadGlass/sys/menu/deleteMenu", {
+    //     menuId: row.id,
+    // })
     if (response.code === 200) {
       ElMessage.success(response.message);
+      fetchList()
       } else {
       ElMessage.error(response.msg);
       }  
diff --git a/UI-Project/src/views/User/userlist.vue b/UI-Project/src/views/User/userlist.vue
index 8395779..5d1f44b 100644
--- a/UI-Project/src/views/User/userlist.vue
+++ b/UI-Project/src/views/User/userlist.vue
@@ -1,363 +1,596 @@
 <script setup>
-import {Search} from "@element-plus/icons-vue";
-import {reactive} from "vue";
-import {useRouter} from "vue-router"
-const router = useRouter()
-const add = ref(false)
-const adda = ref(false)
-import request from "@/utils/request"
-import { ref, onMounted } from "vue";
-import { ElMessage, ElMessageBox } from 'element-plus'
-import { useI18n } from 'vue-i18n'
-const { t } = useI18n()
-let language = ref(localStorage.getItem('lang') || 'zh')
+import { Search, Lock } from "@element-plus/icons-vue"; // 鏂板Lock鍥炬爣瀵煎叆
+import { reactive, ref, onMounted } from "vue"; // 鍚堝苟瀵煎叆
+import { useRouter } from "vue-router";
+const router = useRouter();
+import request from "@/utils/request";
+import { ElMessage, ElMessageBox } from "element-plus";
+import { useI18n } from "vue-i18n";
+const { t } = useI18n();
+
+let language = ref(localStorage.getItem("lang") || "zh");
 const selectedProjectNoa = ref(null);
-const userName = ref('');
-const password = ref('');
-const tableData = ref([])
-const slot = ref('')
-// request.post("/loadGlass/sys/user/listByUserName",{
-//   key: ''
-// }).then((res) => {
-//    if (res.code == 200) {
-//    console.log(res.data);
-//    tableData.value = res.data
-//    } else {
-//    ElMessage.warning(res.msg)
-//    }
-//    });
-  const listByUserName = async () => {  
+const userName = ref("");
+const password = ref("");
+const confirmPassword = ref(""); // 鏂板锛氱‘璁ゅ瘑鐮�
+const editPassword = ref(""); // 鏂板锛氱紪杈戞椂鐨勫瘑鐮�
+const editConfirmPassword = ref(""); // 鏂板锛氱紪杈戞椂鐨勭‘璁ゅ瘑鐮�
+const tableData = ref([]);
+const slot = ref("");
+const add = ref(false); // 娣诲姞寮圭獥
+const adda = ref(false); // 缂栬緫寮圭獥
+
+// 鑾峰彇鐢ㄦ埛鍒楄〃
+const listByUserName = async () => {
   try {
-    const response = await request.post('/loadGlass/sys/user/listByUserName',{
-      key: ''
-     });  
-    if (response.code === 200) {  
-      tableData.value = response.data
-    } else {  
-      ElMessage.warning(response.data);  
-    }  
-  } catch (error) {
-  }  
-}; 
-// 閲嶇疆瀵嗙爜
- const open = async(row) => {  
-  try {
-    const confirmResult = await ElMessageBox.confirm(  
-      t('productStock.repassword'), 
-      t('productStock.prompt'),  
-      {  
-        confirmButtonText: t('productStock.yes'), 
-        cancelButtonText: t('productStock.cancel'),
-        type: 'warning',  
-      } 
-    );
-    if (confirmResult === 'confirm') {
-      var url="/loadGlass/sys/user/resetPassword?userId="+row.id;
-      const response = await request.post(url, {
-        esdId: row.esdId
-    })
+    const response = await request.post("/loadGlass/sys/user/listByUserName", {
+      key: "",
+    });
     if (response.code === 200) {
-      ElMessage.success(response.message);
+      tableData.value = response.data;
+    } else {
+      ElMessage.warning(response.msg);
+    }
+  } catch (error) {
+    ElMessage.error( );
+    console.error("鑾峰彇鐢ㄦ埛鍒楄〃澶辫触锛�", error);
+  }
+};
+
+// 閲嶇疆瀵嗙爜
+const open = async (row) => {
+  try {
+    const confirmResult = await ElMessageBox.confirm(
+      t("productStock.repassword"),
+      t("productStock.prompt"),
+      {
+        confirmButtonText: t("productStock.yes"),
+        cancelButtonText: t("productStock.cancel"),
+        type: "warning",
+      }
+    );
+    if (confirmResult === "confirm") {
+      const url = "/loadGlass/sys/user/resetPassword?userId=" + row.id;
+      const response = await request.post(url, {
+        esdId: row.esdId,
+      });
+      if (response.code === 200) {
+        ElMessage.success(response.message);
       } else {
-      ElMessage.error(response.msg);
-      }  
-    }  
+        ElMessage.error(response.msg);
+      }
+    }
   } catch (error) {
-  }  
-}; 
+    if (error !== "cancel") { // 鎺掗櫎鍙栨秷鎿嶄綔鐨勯敊璇�
+      ElMessage.error( );
+      console.error("閲嶇疆瀵嗙爜澶辫触锛�", error);
+    }
+  }
+};
+
 const titleSelectJsona = ref({
-  processType: [],
-})
-onMounted(() => {
-  fetchOptionsa('');
-  listByUserName('');
-}); 
-  // 瑙掕壊涓嬫媺閫�  
-  const fetchOptionsa = async () => {  
+  processTypea: [], // 淇瀛楁鍚嶆嫾鍐�
+});
+
+// 鑾峰彇瑙掕壊鍒楄〃
+const fetchOptionsa = async () => {
   try {
-    const response = await request.post('/loadGlass/sys/role/queryRole',{
-      key: ''
-     });  
-    if (response.code === 200) {  
-    titleSelectJsona.value.processTypea = response.data;
-    } else {  
-      ElMessage.warning(response.data);  
-    }  
+    const response = await request.post("/loadGlass/sys/role/queryRole", {
+      key: "",
+    });
+    if (response.code === 200) {
+      titleSelectJsona.value.processTypea = response.data;
+    } else {
+      ElMessage.warning(response.msg);
+    }
   } catch (error) {
-  }  
-}; 
-// 澶勭悊缂栬緫鎸夐挳鐐瑰嚮  
-function handleEdit(row) {  
+    ElMessage.error( );
+    console.error("鑾峰彇瑙掕壊鍒楄〃澶辫触锛�", error);
+  }
+};
+
+// 澶勭悊缂栬緫鎸夐挳鐐瑰嚮
+function handleEdit(row) {
   userName.value = row.userName;
-  if (row.roleList && row.roleList.length > 0) {  
-    const firstRole = row.roleList[0];  
-    selectedProjectNoa.value = firstRole.id; // 璁剧疆涓篒D锛岃�屼笉鏄痭ame  
-  }  
+  editPassword.value = ""; // 娓呯┖缂栬緫瀵嗙爜
+  editConfirmPassword.value = ""; // 娓呯┖缂栬緫纭瀵嗙爜
+  if (row.roleList && row.roleList.length > 0) {
+    const firstRole = row.roleList[0];
+    selectedProjectNoa.value = firstRole.id;
+  }
   adda.value = true;
-  window.localStorage.setItem('id', row.id)
-} 
-function closeDialog(row) {
-     add.value = false;
-     userName.value = '';
-     nickName.value = '';
-     password.value = '';
-     selectedProjectNoa.value = '';
+  window.localStorage.setItem("id", row.id);
 }
-function closeDialoga(row) {
-     adda.value = false;
-     userName.value = '';
-     nickName.value = '';
-     password.value = '';
+
+// 鍏抽棴娣诲姞寮圭獥
+function closeDialog() {
+  add.value = false;
+  userName.value = "";
+  password.value = "";
+  confirmPassword.value = ""; // 娓呯┖纭瀵嗙爜
+  selectedProjectNoa.value = "";
 }
-// 娣诲姞 
+
+// 鍏抽棴缂栬緫寮圭獥
+function closeDialoga() {
+  adda.value = false;
+  userName.value = "";
+  editPassword.value = ""; // 娓呯┖缂栬緫瀵嗙爜
+  editConfirmPassword.value = ""; // 娓呯┖缂栬緫纭瀵嗙爜
+  selectedProjectNoa.value = "";
+}
+
+// 娣诲姞鐢ㄦ埛
 const getTableRow = async () => {
-   if (!userName.value) {
-    ElMessage.error(t('productStock.inusername'))
-    return
+  // 楠岃瘉鐢ㄦ埛鍚�
+  if (!userName.value) {
+    ElMessage.error(t("productStock.inusername"));
+    return;
   }
-   if (!selectedProjectNoa.value) {
-    ElMessage.error(t('productStock.inrole'))
-    return
+  // 楠岃瘉瑙掕壊
+  if (!selectedProjectNoa.value) {
+    ElMessage.error(t("productStock.inrole"));
+    return;
   }
-   if (!password.value) {
-    ElMessage.error(t('productStock.inpassword'))
-    return
+  // 楠岃瘉瀵嗙爜
+  if (!password.value) {
+    ElMessage.error(t("productStock.inpassword"));
+    return;
   }
+  // 楠岃瘉纭瀵嗙爜
+  if (!confirmPassword.value) {
+    ElMessage.error(t("productStock.inconfirmpassword")); // 闇�鍦╥18n涓坊鍔犺瀛楁
+    return;
+  }
+  // 楠岃瘉瀵嗙爜涓�鑷存��
+  if (password.value !== confirmPassword.value) {
+    ElMessage.error(t("productStock.passwordNotMatch")); // 闇�鍦╥18n涓坊鍔犺瀛楁
+    return;
+  }
+
   try {
-    const response = await request.post('/loadGlass/sys/user/saveUser', {
+    const response = await request.post("/loadGlass/sys/user/saveUser", {
       userName: userName.value,
       nickName: userName.value,
       password: password.value,
       roleList: [
-    {
-      id: selectedProjectNoa.value,
-    }]
-    }); 
+        {
+          id: selectedProjectNoa.value,
+        },
+      ],
+    });
     if (response.code === 200) {
       ElMessage.success(response.message);
-      add.value = false;
-      listByUserName('');
-  // tableData.value = response.data;
+      closeDialog(); // 鍏抽棴寮圭獥骞舵竻绌鸿〃鍗�
+      listByUserName(); // 鍒锋柊鍒楄〃
     } else {
       ElMessage.error(response.message);
     }
   } catch (error) {
+    ElMessage.error( );
+    console.error("娣诲姞鐢ㄦ埛澶辫触锛�", error);
   }
 };
-// 缂栬緫
+
+// 缂栬緫鐢ㄦ埛
 const getTableRowa = async () => {
-   if (!userName.value) {
-    ElMessage.error(t('productStock.inusername'))
-    return
+  // 楠岃瘉鐢ㄦ埛鍚�
+  if (!userName.value) {
+    ElMessage.error(t("productStock.inusername"));
+    return;
   }
-   if (!selectedProjectNoa.value) {
-    ElMessage.error(t('productStock.inrole'))
-    return
+  // 楠岃瘉瑙掕壊
+  if (!selectedProjectNoa.value) {
+    ElMessage.error(t("productStock.inrole"));
+    return;
   }
-   if (!password.value) {
-    ElMessage.error(t('productStock.inpassword'))
-    return
+  // 濡傛灉濉啓浜嗗瘑鐮侊紝楠岃瘉瀵嗙爜鍜岀‘璁ゅ瘑鐮�
+  if (editPassword.value || editConfirmPassword.value) {
+    if (!editPassword.value) {
+      ElMessage.error(t("productStock.inpassword"));
+      return;
+    }
+    if (!editConfirmPassword.value) {
+      ElMessage.error(t("productStock.inconfirmpassword"));
+      return;
+    }
+    if (editPassword.value !== editConfirmPassword.value) {
+      ElMessage.error(t("productStock.passwordNotMatch"));
+      return;
+    }
   }
-  let id = window.localStorage.getItem('id')
+
+  let id = window.localStorage.getItem("id");
+  if (!id) {
+    ElMessage.error(t("productStock.userIdError"));
+    return;
+  }
   try {
-    const response = await request.post('/loadGlass/sys/user/updateUser', {
+    // 鏋勫缓璇锋眰鍙傛暟
+    const requestData = {
       id: id,
       userName: userName.value,
       roleList: [
-    {
-      id: selectedProjectNoa.value,
-    }]
-  }
-  ); 
+        {
+          id: selectedProjectNoa.value,
+        },
+      ],
+    };
+    // 濡傛灉濉啓浜嗗瘑鐮侊紝娣诲姞鍒拌姹傚弬鏁颁腑
+    if (editPassword.value) {
+      requestData.password = editPassword.value;
+    }
+
+    const response = await request.post("/loadGlass/sys/user/updateUser", requestData);
     if (response.code === 200) {
       ElMessage.success(response.message);
-      adda.value = false;
-      listByUserName('');
-      tableData.value = response.data;
+      closeDialoga(); // 鍏抽棴寮圭獥骞舵竻绌鸿〃鍗�
+      listByUserName(); // 鍒锋柊鍒楄〃
     } else {
       ElMessage.error(response.message);
     }
   } catch (error) {
+    ElMessage.error( );
+    console.error("缂栬緫鐢ㄦ埛澶辫触锛�", error);
   }
 };
-// 鍒犻櫎 
- const opena = async(row) => {  
+
+// 鍒犻櫎鐢ㄦ埛
+const opena = async (row) => {
   try {
-    const confirmResult = await ElMessageBox.confirm(  
-      t('productStock.deusername'), 
-      t('productStock.prompt'),  
-      {  
-        confirmButtonText: t('productStock.yes'), 
-        cancelButtonText: t('productStock.cancel'),
-        type: 'warning',  
-      } 
+    const confirmResult = await ElMessageBox.confirm(
+      t("productStock.deusername"),
+      t("productStock.prompt"),
+      {
+        confirmButtonText: t("productStock.yes"),
+        cancelButtonText: t("productStock.cancel"),
+        type: "warning",
+      }
     );
-    if (confirmResult === 'confirm') {
-      const response = await request.post("/loadGlass/sys/user/deleteUser",  [row.id])
-    if (response.code === 200) {
-      ElMessage.success(response.message);
-      listByUserName('');
-    } else {
-      ElMessage.error(response.msg);
-      }  
-    }  
+    if (confirmResult === "confirm") {
+      const response = await request.post("/loadGlass/sys/user/deleteUser", [row.id]);
+      if (response.code === 200) {
+        ElMessage.success(response.message);
+        listByUserName(); // 鍒锋柊鍒楄〃
+      } else {
+        ElMessage.error(response.msg);
+      }
+    }
   } catch (error) {
-  }  
-};   
+    if (error !== "cancel") {
+      ElMessage.error( );
+      console.error("鍒犻櫎鐢ㄦ埛澶辫触锛�", error);
+    }
+  }
+};
+
+onMounted(() => {
+  fetchOptionsa();
+  listByUserName();
+});
 </script>
+
 <template>
   <div>
-     <el-button type="primary" style="margin-top: 10px;margin-left: 10px;"  id="searchButton" @click="add = true">{{ $t('productStock.addusers') }}</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="750" ref="table" 
-        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-          <el-table-column prop="userName" align="center" :label="$t('productStock.username')" min-width="180" />
-          <el-table-column align="center" :label="$t('productStock.role')" min-width="80">
-            <template #default="scope">  
-             <el-tag v-for="role in scope.row.roleList">  
-            {{role.name}}  
-           </el-tag>   
-         </template> 
-            </el-table-column>
-          <el-table-column fixed="right" :label="$t('productStock.operate')" align="center" width="270">
+    <el-button
+      type="primary"
+      style="margin-top: 10px; margin-left: 10px"
+      id="searchButton"
+      @click="add = true"
+    >
+      {{ $t("productStock.addusers") }}
+    </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="750"
+          ref="table"
+          :data="tableData"
+          :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }"
+        >
+          <el-table-column
+            prop="userName"
+            align="center"
+            :label="$t('productStock.username')"
+            min-width="180"
+          />
+          <el-table-column
+            align="center"
+            :label="$t('productStock.role')"
+            min-width="80"
+          >
             <template #default="scope">
-              <el-button type="text" plain @click="open(scope.row)">{{ $t('productStock.resetpassword') }}</el-button>
-              <el-button type="text" plain @click="handleEdit(scope.row)">{{ $t('productStock.exit') }}</el-button>
-              <el-button type="text" plain @click="opena(scope.row)">{{ $t('productStock.delete') }}</el-button>
+              <el-tag v-for="role in scope.row.roleList" :key="role.id">
+                {{ role.name }}
+              </el-tag>
             </template>
-        </el-table-column>
+          </el-table-column>
+          <el-table-column
+            fixed="right"
+            :label="$t('productStock.operate')"
+            align="center"
+            width="270"
+          >
+            <template #default="scope">
+              <el-button
+                type="text"
+                plain
+                @click="open(scope.row)"
+              >
+                {{ $t('productStock.resetpassword') }}
+              </el-button>
+              <el-button
+                type="text"
+                plain
+                @click="handleEdit(scope.row)"
+              >
+                {{ $t('productStock.exit') }}
+              </el-button>
+              <el-button
+                type="text"
+                plain
+                @click="opena(scope.row)"
+              >
+                {{ $t('productStock.delete') }}
+              </el-button>
+            </template>
+          </el-table-column>
         </el-table>
       </div>
     </el-card>
   </div>
-  <el-dialog v-model="add" top="23vh" width="37%" :title="$t('productStock.addusers')">
-    <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
-            <el-form  label-width="150px">
-      <el-form label-width="105px" 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('productStock.usernamea')" :required="true" style="width: 25vw">
-                <el-input v-model="userName" autocomplete="off" style="width: 350px;" :placeholder="$t('productStock.inusername')" />
-              </el-form-item></div></div>
-          </el-col>
-        </el-row>
-        <el-row style="margin-top: 10px;">
-          <el-col :span="6">
-              <div id="dt" style="font-size: 15px;">
-        <div>
-              <el-form-item :label="$t('productStock.rolea')" :required="true" style="width: 25vw;">
-                <el-select
-               v-model="selectedProjectNoa"
-               filterable
-               clearable
-               :placeholder="$t('productStock.inrole')"
-               style="width: 350px;"
-             >
-               <el-option
-            v-for="item in titleSelectJsona['processTypea']"  
-            :key="item.id"
-            :label="item.name"
-            :value="item.id"
-          />
-        </el-select>
-              </el-form-item></div></div>
-          </el-col>
-        </el-row>
-        <el-row style="margin-top: 10px;">
-          <el-col :span="6">
-              <div id="dt" style="font-size: 15px;">
-        <div>
-              <el-form-item :label="$t('productStock.password')" :required="true" style="width: 25vw;">
-                <el-input style="width: 350px;"
-                        v-model="password"
-                        :placeholder="$t('productStock.inpassword')"
-                        autocomplete="off"
-                        :prefix-icon="Lock"
-                        show-password/>
-              </el-form-item></div></div>
-          </el-col>
-        </el-row>
+
+  <!-- 娣诲姞鐢ㄦ埛寮圭獥 -->
+  <el-dialog
+    v-model="add"
+    top="23vh"
+    width="37%"
+    :title="$t('productStock.addusers')"
+    @close="closeDialog"
+  >
+    <div style="margin-left: -50px; margin-top: 10px; margin-bottom: 10px">
+      <el-form label-width="150px">
+        <el-form label-width="105px" label-position="right">
+          <el-row style="margin-top: -15px; margin-bottom: -2px">
+            <el-col :span="6">
+              <div id="dt" style="font-size: 15px">
+                <el-form-item
+                  :label="$t('productStock.usernamea')"
+                  :required="true"
+                  style="width: 25vw"
+                >
+                  <el-input
+                    v-model="userName"
+                    autocomplete="off"
+                    style="width: 350px"
+                    :placeholder="$t('productStock.inusername')"
+                  />
+                </el-form-item>
+              </div>
+            </el-col>
+          </el-row>
+          <el-row style="margin-top: 10px">
+            <el-col :span="6">
+              <div id="dt" style="font-size: 15px">
+                <el-form-item
+                  :label="$t('productStock.rolea')"
+                  :required="true"
+                  style="width: 25vw"
+                >
+                  <el-select
+                    v-model="selectedProjectNoa"
+                    filterable
+                    clearable
+                    :placeholder="$t('productStock.inrole')"
+                    style="width: 350px"
+                  >
+                    <el-option
+                      v-for="item in titleSelectJsona.processTypea"
+                      :key="item.id"
+                      :label="item.name"
+                      :value="item.id"
+                    />
+                  </el-select>
+                </el-form-item>
+              </div>
+            </el-col>
+          </el-row>
+          <el-row style="margin-top: 10px">
+            <el-col :span="6">
+              <div id="dt" style="font-size: 15px">
+                <el-form-item
+                  :label="$t('productStock.password')"
+                  :required="true"
+                  style="width: 25vw"
+                >
+                  <el-input
+                    v-model="password"
+                    :placeholder="$t('productStock.inpassword')"
+                    autocomplete="off"
+                    :prefix-icon="Lock"
+                    show-password
+                    style="width: 350px"
+                  />
+                </el-form-item>
+              </div>
+            </el-col>
+          </el-row>
+          <!-- 鏂板纭瀵嗙爜 -->
+          <el-row style="margin-top: 10px">
+            <el-col :span="6">
+              <div id="dt" style="font-size: 15px">
+                <el-form-item
+                  :label="$t('productStock.confirmpassword')"
+                  :required="true"
+                  style="width: 25vw"
+                >
+                  <el-input
+                    v-model="confirmPassword"
+                    :placeholder="$t('productStock.inconfirmpassword')" 
+                    autocomplete="off"
+                    :prefix-icon="Lock"
+                    show-password
+                    style="width: 350px"
+                  />
+                </el-form-item>
+              </div>
+            </el-col>
+          </el-row>
         </el-form>
-            </el-form>
-          </div>
+      </el-form>
+    </div>
     <template #footer>
       <div id="dialog-footer">
         <el-button type="primary" @click="getTableRow">
           {{ $t('productStock.sure') }}
         </el-button>
-        <el-button @click="closeDialog">{{ $t('productStock.cancel') }}</el-button>
+        <el-button @click="closeDialog">
+          {{ $t('productStock.cancel') }}
+        </el-button>
       </div>
     </template>
-  </el-dialog> 
-  <el-dialog v-model="adda" top="23vh" width="37%" :title="$t('productStock.reusername')" >
-    <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
-            <el-form ref="formRef" label-width="150px">
-      <el-form label-width="105px" 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('productStock.usernamea')" :required="true" style="width: 25vw">
-                <el-input :placeholder="$t('productStock.inusername')" v-model="userName" autocomplete="off" style="width: 350px;"/>
-              </el-form-item></div></div>
-          </el-col>
-        </el-row>
-        <el-row style="margin-top: 10px;">
-          <el-col :span="6">
-              <div id="dt" style="font-size: 15px;">
-        <div>
-              <el-form-item :label="$t('productStock.rolea')" :required="true" style="width: 25vw;">
-                <el-select
-               v-model="selectedProjectNoa"
-               filterable
-               clearable
-               :placeholder="$t('productStock.inrole')"
-               style="width: 350px;"
-             >
-               <el-option
-         v-for="item in titleSelectJsona['processTypea']"
-            :key="item.id"
-            :label="item.name"
-            :value="item.id"
-          />
-        </el-select>
-              </el-form-item></div></div>
-          </el-col>
-        </el-row>
+  </el-dialog>
+
+  <!-- 缂栬緫鐢ㄦ埛寮圭獥 -->
+  <el-dialog
+    v-model="adda"
+    top="23vh"
+    width="37%"
+    :title="$t('productStock.reusername')"
+    @close="closeDialoga"
+  >
+    <div style="margin-left: -50px; margin-top: 10px; margin-bottom: 10px">
+      <el-form ref="formRef" label-width="150px">
+        <el-form label-width="105px" label-position="right">
+          <el-row style="margin-top: -15px; margin-bottom: -2px">
+            <el-col :span="6">
+              <div id="dt" style="font-size: 15px">
+                <el-form-item
+                  :label="$t('productStock.usernamea')"
+                  :required="true"
+                  style="width: 25vw"
+                >
+                  <el-input
+                    v-model="userName"
+                    :placeholder="$t('productStock.inusername')"
+                    autocomplete="off"
+                    style="width: 350px"
+                  />
+                </el-form-item>
+              </div>
+            </el-col>
+          </el-row>
+          <el-row style="margin-top: 10px">
+            <el-col :span="6">
+              <div id="dt" style="font-size: 15px">
+                <el-form-item
+                  :label="$t('productStock.rolea')"
+                  :required="true"
+                  style="width: 25vw"
+                >
+                  <el-select
+                    v-model="selectedProjectNoa"
+                    filterable
+                    clearable
+                    :placeholder="$t('productStock.inrole')"
+                    style="width: 350px"
+                  >
+                    <el-option
+                      v-for="item in titleSelectJsona.processTypea"
+                      :key="item.id"
+                      :label="item.name"
+                      :value="item.id"
+                    />
+                  </el-select>
+                </el-form-item>
+              </div>
+            </el-col>
+          </el-row>
+          <!-- 鏂板缂栬緫瀵嗙爜 -->
+          <el-row style="margin-top: 10px">
+            <el-col :span="6">
+              <div id="dt" style="font-size: 15px">
+                <el-form-item
+                  :label="$t('productStock.password')"
+                  :required="false"
+                  style="width: 25vw"
+                >
+                  <el-input
+                    v-model="editPassword"
+                    :placeholder="$t('productStock.inputNewPassword')"
+                    autocomplete="off"
+                    :prefix-icon="Lock"
+                    show-password
+                    style="width: 350px"
+                  />
+                </el-form-item>
+              </div>
+            </el-col>
+          </el-row>
+          <!-- 鏂板缂栬緫纭瀵嗙爜 -->
+          <el-row style="margin-top: 10px">
+            <el-col :span="6">
+              <div id="dt" style="font-size: 15px">
+                <el-form-item
+                  :label="$t('productStock.confirmpassword')"
+                  :required="false"
+                  style="width: 25vw"
+                >
+                  <el-input
+                    v-model="editConfirmPassword"
+                    :placeholder="$t('productStock.inconfirmpassword')"
+                    autocomplete="off"
+                    :prefix-icon="Lock"
+                    show-password
+                    style="width: 350px"
+                  />
+                </el-form-item>
+              </div>
+            </el-col>
+          </el-row>
         </el-form>
-            </el-form>
-          </div>
+      </el-form>
+    </div>
     <template #footer>
       <div id="dialog-footer">
         <el-button type="primary" @click="getTableRowa">
           {{ $t('productStock.sure') }}
         </el-button>
-        <el-button @click="closeDialoga">{{ $t('productStock.cancel') }}</el-button>
+        <el-button @click="closeDialoga">
+          {{ $t('productStock.cancel') }}
+        </el-button>
       </div>
     </template>
-  </el-dialog> 
+  </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{
+#dt {
+  display: block;
+  float: left;
+  line-height: 20px;
+  margin-left: 100px;
+}
+#dta {
+  display: block;
+  float: left;
+  line-height: 20px;
+  margin-left: 80%;
+}
+#dialog-footer {
   text-align: center;
   margin-top: -15px;
 }
-#message{
+#message {
   text-align: center;
   align-items: center;
   color: black;
-   width: 200px;
-   height: 100px;
-   background-color: #337ecc;
-   margin-left: 28%;
+  width: 200px;
+  height: 100px;
+  background-color: #337ecc;
+  margin-left: 28%;
 }
-#awatch{
+#awatch {
   height: 460px;
-  /* margin-top: -60px; */
 }
 </style>
\ No newline at end of file
diff --git a/UI-Project/src/views/User/userpageNo.vue b/UI-Project/src/views/User/userpageNo.vue
index 7c115a2..31e51e3 100644
--- a/UI-Project/src/views/User/userpageNo.vue
+++ b/UI-Project/src/views/User/userpageNo.vue
@@ -134,10 +134,14 @@
     ElMessage.error(t('productStock.inconfigValue'))
     return
   }
-    if (!isEnable.value) {
-    ElMessage.error(t('searchOrder.choicestartstatus'))
-    return
+    if (isEnable.value === '' || isEnable.value === undefined || isEnable.value === null) {
+    ElMessage.error(t('searchOrder.choicestartstatus'));
+    return;
   }
+  //   if (!isEnable.value) {
+  //   ElMessage.error(t('searchOrder.choicestartstatus'))
+  //   return
+  // }
   try {
     const response = await request.post('/loadGlass/sys/sysConfig/updateConfig',{
       id: id,

--
Gitblit v1.8.0