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>