From dffdaa3aa87cafd47b2fab668d03bc8fc3c55dba Mon Sep 17 00:00:00 2001
From: byteblogs168 <598092184@qq.com>
Date: Sun, 26 Nov 2023 11:36:27 +0800
Subject: [PATCH] =?UTF-8?q?feat:2.5.0=201.=20=E7=94=A8=E6=88=B7=E9=A1=B5?=
 =?UTF-8?q?=E9=9D=A2=E8=B0=83=E6=95=B4=E5=AE=8C=E6=88=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../src/components/GlobalHeader/Namespace.vue | 15 ++++-
 frontend/src/views/job/from/JobFrom.vue       |  1 -
 .../src/views/namespace/NamespaceList.vue     | 17 ++---
 frontend/src/views/user/UserForm.vue          | 64 +++++++++++--------
 4 files changed, 62 insertions(+), 35 deletions(-)

diff --git a/frontend/src/components/GlobalHeader/Namespace.vue b/frontend/src/components/GlobalHeader/Namespace.vue
index f489913d..94bdb87b 100644
--- a/frontend/src/components/GlobalHeader/Namespace.vue
+++ b/frontend/src/components/GlobalHeader/Namespace.vue
@@ -1,5 +1,5 @@
 <template>
-  <a-dropdown>
+  <a-dropdown v-if="namespaceIds && namespaceIds.length > 0">
     <a-menu slot="overlay" @click="handleMenuClick">
       <a-menu-item :key="item.uniqueId" v-for="item in namespaceIds">
         <a href="javascript:;">{{ item.name }}</a>
@@ -7,6 +7,9 @@
     </a-menu>
     <a-button shape="round">  {{ name }}  <a-icon type="down" /> </a-button>
   </a-dropdown>
+  <span v-else>
+    <a-spin size="small" :style="{ marginLeft: 8, marginRight: 8 }" />
+  </span>
 </template>
 <script>
 import namespaceMixin from '@/store/namespace-mixin'
@@ -20,6 +23,16 @@ export default {
       name: 'Default'
     }
   },
+  computed: {
+    refreshNamespace () {
+      return this.$store.getters.namespaces
+    }
+  },
+  watch: {
+    refreshNamespace (val) {
+      this.namespaceIds = val
+    }
+  },
   mounted () {
     setTimeout(() => {
       this.namespaceIds = this.$store.getters.namespaces
diff --git a/frontend/src/views/job/from/JobFrom.vue b/frontend/src/views/job/from/JobFrom.vue
index fc54c5ce..45de564e 100644
--- a/frontend/src/views/job/from/JobFrom.vue
+++ b/frontend/src/views/job/from/JobFrom.vue
@@ -389,7 +389,6 @@ export default {
       })
     },
     handleTaskTypeChange (value) {
-      console.log(value)
       this.taskTypeValue = value
     },
     handlerCron () {
diff --git a/frontend/src/views/namespace/NamespaceList.vue b/frontend/src/views/namespace/NamespaceList.vue
index 9d2e8a8d..e26228fe 100644
--- a/frontend/src/views/namespace/NamespaceList.vue
+++ b/frontend/src/views/namespace/NamespaceList.vue
@@ -45,14 +45,14 @@
         <span slot="action" slot-scope="text, record">
           <template>
             <a @click="handleEdit(record)">编辑</a>
-            <a-divider type="vertical" />
-            <a-popconfirm
-              title="命名空间删除后不可恢复,请确认是否删除这个空间?"
-              ok-text="删除"
-              cancel-text="取消"
-              @confirm="handleDel(record)">
-              <a href="javascript:;">删除</a>
-            </a-popconfirm>
+            <!--            <a-divider type="vertical" />-->
+            <!--            <a-popconfirm-->
+            <!--              title="命名空间删除后不可恢复,请确认是否删除这个空间?"-->
+            <!--              ok-text="删除"-->
+            <!--              cancel-text="取消"-->
+            <!--              @confirm="handleDel(record)">-->
+            <!--              <a href="javascript:;">删除</a>-->
+            <!--            </a-popconfirm>-->
 
           </template>
         </span>
@@ -158,6 +158,7 @@ export default {
       delNamespace(record.id).then(res => {
         this.$message.success('删除成功')
         this.$refs.table.refresh()
+        this.$store.dispatch('GetInfo')
       })
     },
     handleGoBack () {
diff --git a/frontend/src/views/user/UserForm.vue b/frontend/src/views/user/UserForm.vue
index 2282f09a..25fe8727 100644
--- a/frontend/src/views/user/UserForm.vue
+++ b/frontend/src/views/user/UserForm.vue
@@ -4,7 +4,7 @@
       <div></div>
     </page-header-wrapper>
     <a-card class="card" title="" :bordered="false">
-      <a-form @submit="handleSubmit" :form="form" :body-style="{padding: '24px 32px'}" v-bind="formItemLayout" :rules="rules">
+      <a-form @submit="handleSubmit" :form="form" :body-style="{padding: '24px 32px'}" v-bind="formItemLayout">
         <a-form-item>
           <a-input
             hidden
@@ -20,25 +20,32 @@
             ]" />
         </a-form-item>
         <a-form-item
-          label="密码">
+          label="修改密码"
+          v-if="formType === 'edit'">
+          <a-switch checked-children="修改" un-checked-children="不修改" @change="onChange" />
+        </a-form-item>
+        <a-form-item
+          label="密码"
+          v-if="updatePass">
           <a-input
             placeholder="请输入密码"
             type="password"
             autocomplete="off"
             v-decorator="[
               'password',
-              {rules: [{ required: formType === 'create', message: '请输入密码', whitespace: true}, {validator: validatePass, validateTrigger: ['change', 'blur']}]}
+              {rules: [{ required: true, message: '请输入密码', whitespace: true}, {validator: validatePass, trigger: ['change', 'blur']}]}
             ]"/>
         </a-form-item>
         <a-form-item
-          label="确认密码">
+          label="确认密码"
+          v-if="updatePass">
           <a-input
             placeholder="请输入确认密码"
             type="password"
             autocomplete="off"
             v-decorator="[
               'checkPassword',
-              {rules: [{ required: formType === 'create', message: '请输入密码', whitespace: true}, {validator: validateCheckPass, validateTrigger: ['change', 'blur']}]}
+              {rules: [{ required: true, message: '请输入确认密码', whitespace: true}, {validator: validateCheckPass, trigger: ['change', 'blur']}]}
             ]"/>
         </a-form-item>
         <a-form-item
@@ -82,7 +89,7 @@
               'permissions',
               {rules: [{ required: true, message: '请分配组'}]}
             ]">
-            <a-select-option v-for="(item, index) in groupNameList" :key="index" :value="item.groupName + '@@'+ item.namespaceId">
+            <a-select-option v-for="(item, index) in groupNameList" :key="index" :value="item.groupName + '@'+ item.namespaceId">
               {{ item.groupName }} ({{ item.namespaceId }})
             </a-select-option>
           </a-select>
@@ -125,7 +132,8 @@ export default {
         wrapperCol: { lg: { span: 10 }, sm: { span: 17 } }
       },
       groupNameList: [],
-      namespaceList: []
+      namespaceList: [],
+      updatePass: true
     }
   },
   mounted () {
@@ -135,6 +143,7 @@ export default {
 
     this.$nextTick(() => {
       if (this.$route.query.username) {
+        this.updatePass = false
         getSystemUserByUserName({ username: this.$route.query.username }).then(res => {
           this.loadEditInfo(res.data)
         })
@@ -159,16 +168,13 @@ export default {
           }
 
           if (values.permissions) {
-            const filteredData = values.permissions.map(input => {
-              const [groupName, namespaceId] = input.split('@@')
-
+            values['permissions'] = values.permissions.map(input => {
+              const [groupName, namespaceId] = input.split('@')
+              console.log(this.groupNameList)
               return this.groupNameList.filter(item =>
                 item.groupName === groupName && item.namespaceId === namespaceId
               )
             }).flat()
-
-            values['permissions'] = filteredData
-            console.log(filteredData)
           }
 
           values.role = parseInt(values.role)
@@ -180,22 +186,24 @@ export default {
       })
     },
     validatePass (rule, value, callback) {
-      if (value === '') {
-        callback(new Error('请输入密码'))
-      } else {
+      if (value) {
         if (this.form.getFieldValue('checkPassword') !== '') {
-          this.$refs.form.validateField('checkPassword')
+          this.form.validateFields(['checkPassword'], (errors, values) => {
+            console.log(errors)
+          })
         }
-        callback()
       }
+        callback()
     },
     validateCheckPass (rule, value, callback) {
-      if (value === '') {
-        callback(new Error('请再次输入密码'))
-      } else if (value !== this.form.getFieldValue('password')) {
-        callback(new Error('两次密码不匹配!'))
-      } else {
-        callback()
+      console.log(value)
+      if (value) {
+        console.log(value)
+        if (value !== this.form.getFieldValue('password')) {
+          callback(new Error('两次密码不匹配!'))
+        } else {
+          callback()
+        }
       }
     },
     loadEditInfo (data) {
@@ -207,11 +215,17 @@ export default {
       }).then(() => {
         const formData = pick(data, ['id', 'username', 'role', 'permissions', 'namespaceIds'])
         formData.role = formData.role.toString()
+        this.role = formData.role
         formData.namespaceIds = formData.namespaceIds.map(i => i.uniqueId)
-        formData.permissions = formData.permissions.map(i => i.groupName + '@@' + i.namespaceId)
+        formData.permissions = formData.permissions.map(i => i.groupName + '@' + i.namespaceId)
         form.setFieldsValue(formData)
+        this.handleNamespacesIdChange(formData.namespaceIds)
       })
+    },
+    onChange (checked) {
+      this.updatePass = checked
     }
+
   }
 }
 </script>