KouJin пре 1 година
родитељ
комит
218c617613

+ 2 - 2
src/components/Form/src/Form.vue

@@ -203,7 +203,7 @@ export default defineComponent({
203 203
                       icon="ep:warning"
204 204
                       size={16}
205 205
                       color="var(--el-color-primary)"
206
-                      class="relative top-1px ml-2px"
206
+                      class="relative  top-1px ml-2px"
207 207
                     ></Icon>
208 208
                   )
209 209
                 }}
@@ -213,7 +213,7 @@ export default defineComponent({
213 213
         }
214 214
       }
215 215
       return (
216
-        <ElFormItem {...(item.formItemProps || {})} prop={item.field} label={item.label || ''}>
216
+        <ElFormItem class="mt-40px w-[70%]" {...(item.formItemProps || {})} prop={item.field} label={item.label || ''}>
217 217
           {{
218 218
             ...formItemSlots,
219 219
             default: () => {

Разлика између датотеке није приказан због своје велике величине
+ 7 - 7
src/views/Profile/Index.vue


+ 19 - 11
src/views/Profile/components/BasicInfo.vue

@@ -1,16 +1,24 @@
1 1
 <template>
2
-  <Form ref="formRef" :labelWidth="200" :rules="rules" :schema="schema">
3
-    <template #sex="form">
4
-      <el-radio-group v-model="form['sex']">
5
-        <el-radio :value="1">{{ t('profile.user.man') }}</el-radio>
6
-        <el-radio :value="2">{{ t('profile.user.woman') }}</el-radio>
7
-      </el-radio-group>
8
-    </template>
9
-  </Form>
10
-  <div style="text-align: center">
11
-    <XButton :title="t('common.save')" type="primary" @click="submit()" />
12
-    <XButton :title="t('common.reset')" type="danger" @click="init()" />
2
+  <div class="w-full h-full flex">
3
+    <div class="flex-1 flex justify-center items-center" >
4
+      <div class="w-150px h-150px flex justify-center items-center text-2xl">这是一个icon</div>
5
+    </div>
6
+    <div class="flex-1">
7
+      <Form ref="formRef"  :rules="rules" :schema="schema">
8
+        <template #sex="form">
9
+          <el-radio-group v-model="form['sex']">
10
+            <el-radio :value="1">{{ t('profile.user.man') }}</el-radio>
11
+            <el-radio :value="2">{{ t('profile.user.woman') }}</el-radio>
12
+          </el-radio-group>
13
+        </template>
14
+      </Form>
15
+      <div class="w-[70%] text-center mt-30px  mb-30px">
16
+        <XButton :title="t('common.save')" type="primary" @click="submit()" />
17
+        <XButton :title="t('common.reset')" type="danger" @click="init()" />
18
+      </div>
19
+    </div>
13 20
   </div>
21
+
14 22
 </template>
15 23
 <script lang="ts" setup>
16 24
 import type { FormRules } from 'element-plus'

+ 51 - 56
src/views/Profile/components/ProfileUser.vue

@@ -1,68 +1,67 @@
1 1
 <template>
2 2
   <div class="w-full h-full flex">
3 3
     <div class="flex-1">
4
-        <div class="text-center">
5
-          <UserAvatar :img="userInfo?.avatar" />
6
-          <div class="lh-100px font-20px text-center" style="font-size: 25px;font-family: '黑体'">用户头像</div>
7
-        </div>
4
+      <div class="text-center">
5
+        <UserAvatar :img="userInfo?.avatar"/>
6
+      </div>
8 7
     </div>
9 8
     <div class="flex-1">
10 9
       <div>
11
-      <ul class="list-group list-group-striped">
12
-        <li class="list-group-item">
13
-          <Icon class="mr-5px" icon="ep:user" />
14
-          {{ t('profile.user.username') }}
15
-          <div class="pull-right">{{ userInfo?.username }}</div>
16
-        </li>
17
-        <li class="list-group-item">
18
-          <Icon class="mr-5px" icon="ep:phone" />
19
-          {{ t('profile.user.mobile') }}
20
-          <div class="pull-right">{{ userInfo?.mobile }}</div>
21
-        </li>
22
-        <li class="list-group-item">
23
-          <Icon class="mr-5px" icon="fontisto:email" />
24
-          {{ t('profile.user.email') }}
25
-          <div class="pull-right">{{ userInfo?.email }}</div>
26
-        </li>
27
-        <li class="list-group-item">
28
-          <Icon class="mr-5px" icon="carbon:tree-view-alt" />
29
-          {{ t('profile.user.dept') }}
30
-          <div v-if="userInfo?.dept" class="pull-right">{{ userInfo?.dept.name }}</div>
31
-        </li>
32
-        <li class="list-group-item">
33
-          <Icon class="mr-5px" icon="ep:suitcase" />
34
-          {{ t('profile.user.posts') }}
35
-          <div v-if="userInfo?.posts" class="pull-right">
36
-            {{ userInfo?.posts.map((post) => post.name).join(',') }}
37
-          </div>
38
-        </li>
39
-        <li class="list-group-item">
40
-          <Icon class="mr-5px" icon="icon-park-outline:peoples" />
41
-          {{ t('profile.user.roles') }}
42
-          <div v-if="userInfo?.roles" class="pull-right">
43
-            {{ userInfo?.roles.map((role) => role.name).join(',') }}
44
-          </div>
45
-        </li>
46
-        <li class="list-group-item">
47
-          <Icon class="mr-5px" icon="ep:calendar" />
48
-          {{ t('profile.user.createTime') }}
49
-          <div class="pull-right">{{ formatDate(userInfo.createTime) }}</div>
50
-        </li>
51
-      </ul>
52
-    </div>
10
+        <ul class="list-group list-group-striped">
11
+          <li class="list-group-item">
12
+            <Icon class="mr-5px" icon="ep:user"/>
13
+            {{ t('profile.user.username') }}
14
+            <div class="pull-right">{{ userInfo?.username }}</div>
15
+          </li>
16
+          <li class="list-group-item">
17
+            <Icon class="mr-5px" icon="ep:phone"/>
18
+            {{ t('profile.user.mobile') }}
19
+            <div class="pull-right">{{ userInfo?.mobile }}</div>
20
+          </li>
21
+          <li class="list-group-item">
22
+            <Icon class="mr-5px" icon="fontisto:email"/>
23
+            {{ t('profile.user.email') }}
24
+            <div class="pull-right">{{ userInfo?.email }}</div>
25
+          </li>
26
+          <li class="list-group-item">
27
+            <Icon class="mr-5px" icon="carbon:tree-view-alt"/>
28
+            {{ t('profile.user.dept') }}
29
+            <div v-if="userInfo?.dept" class="pull-right">{{ userInfo?.dept.name }}</div>
30
+          </li>
31
+          <!--        <li class="list-group-item">-->
32
+          <!--          <Icon class="mr-5px" icon="ep:suitcase" />-->
33
+          <!--          {{ t('profile.user.posts') }}-->
34
+          <!--          <div v-if="userInfo?.posts" class="pull-right">-->
35
+          <!--            {{ userInfo?.posts.map((post) => post.name).join(',') }}-->
36
+          <!--          </div>-->
37
+          <!--        </li>-->
38
+          <li class="list-group-item">
39
+            <Icon class="mr-5px" icon="icon-park-outline:peoples"/>
40
+            {{ t('profile.user.roles') }}
41
+            <div v-if="userInfo?.roles" class="pull-right">
42
+              {{ userInfo?.roles.map((role) => role.name).join(',') }}
43
+            </div>
44
+          </li>
45
+          <li class="list-group-item">
46
+            <Icon class="mr-5px" icon="ep:calendar"/>
47
+            {{ t('profile.user.createTime') }}
48
+            <div class="pull-right">{{ formatDate(userInfo.createTime) }}</div>
49
+          </li>
50
+        </ul>
51
+      </div>
53 52
     </div>
54 53
   </div>
55 54
 
56 55
 </template>
57 56
 <script lang="ts" setup>
58
-import { formatDate } from '@/utils/formatTime'
57
+import {formatDate} from '@/utils/formatTime'
59 58
 import UserAvatar from './UserAvatar.vue'
60 59
 
61
-import { getUserProfile, ProfileVO } from '@/api/system/user/profile'
60
+import {getUserProfile, ProfileVO} from '@/api/system/user/profile'
62 61
 
63
-defineOptions({ name: 'ProfileUser' })
62
+defineOptions({name: 'ProfileUser'})
64 63
 
65
-const { t } = useI18n()
64
+const {t} = useI18n()
66 65
 const userInfo = ref({} as ProfileVO)
67 66
 const getUserInfo = async () => {
68 67
   const users = await getUserProfile()
@@ -74,11 +73,7 @@ onMounted(async () => {
74 73
 </script>
75 74
 
76 75
 <style scoped>
77
-.text-center {
78
-  position: relative;
79
-  height: 120px;
80
-  text-align: center;
81
-}
76
+
82 77
 
83 78
 .list-group-striped > .list-group-item {
84 79
   padding-right: 0;
@@ -94,7 +89,7 @@ onMounted(async () => {
94 89
 }
95 90
 
96 91
 .list-group-item {
97
-  padding: 11px 0;
92
+  padding: 25px 0;
98 93
   margin-bottom: 10px;
99 94
   font-size: 13px;
100 95
 

+ 39 - 26
src/views/Profile/components/ResetPwd.vue

@@ -1,29 +1,42 @@
1 1
 <template>
2
-  <el-form ref="formRef" :model="password" :rules="rules" :label-width="200">
3
-    <el-form-item :label="t('profile.password.oldPassword')" prop="oldPassword">
4
-      <InputPassword v-model="password.oldPassword" />
5
-    </el-form-item>
6
-    <el-form-item :label="t('profile.password.newPassword')" prop="newPassword">
7
-      <InputPassword v-model="password.newPassword" strength />
8
-    </el-form-item>
9
-    <el-form-item :label="t('profile.password.confirmPassword')" prop="confirmPassword">
10
-      <InputPassword v-model="password.confirmPassword" strength />
11
-    </el-form-item>
12
-    <el-form-item>
13
-      <XButton :title="t('common.save')" type="primary" @click="submit(formRef)" />
14
-      <XButton :title="t('common.reset')" type="danger" @click="reset(formRef)" />
15
-    </el-form-item>
16
-  </el-form>
2
+  <div class="w-full h-full flex">
3
+    <div class="flex-1 flex justify-center items-center" >
4
+      <div class="w-150px h-150px flex justify-center items-center text-2xl">这是一个icon</div>
5
+    </div>
6
+    <div class="flex-1">
7
+      <el-form ref="formRef" :model="password" :rules="rules" label-width="80">
8
+        <el-form-item :label="t('profile.password.oldPassword')" class="mt-40px w-[70%]"
9
+                      prop="oldPassword">
10
+          <InputPassword v-model="password.oldPassword" class="w-full"/>
11
+        </el-form-item>
12
+        <el-form-item :label="t('profile.password.newPassword')" class="mt-50px w-[70%] "
13
+                      prop="newPassword">
14
+          <InputPassword v-model="password.newPassword" class="w-full" strength/>
15
+        </el-form-item>
16
+        <el-form-item :label="t('profile.password.confirmPassword')" class="mt-40px w-[70%]"
17
+                      prop="confirmPassword">
18
+          <InputPassword v-model="password.confirmPassword" class="w-full" strength/>
19
+        </el-form-item>
20
+
21
+          <div class="mt-50px w-[70%] text-center  mb-30px mb-30px">
22
+            <XButton :title="t('common.save')" type="primary" @click="submit(formRef)"/>
23
+            <XButton :title="t('common.reset')" type="danger" @click="reset(formRef)"/>
24
+          </div>
25
+
26
+
27
+      </el-form>
28
+    </div>
29
+  </div>
17 30
 </template>
18 31
 <script lang="ts" setup>
19
-import type { FormInstance, FormRules } from 'element-plus'
32
+import type {FormInstance, FormRules} from 'element-plus'
20 33
 
21
-import { InputPassword } from '@/components/InputPassword'
22
-import { updateUserPassword } from '@/api/system/user/profile'
34
+import {InputPassword} from '@/components/InputPassword'
35
+import {updateUserPassword} from '@/api/system/user/profile'
23 36
 
24
-defineOptions({ name: 'ResetPwd' })
37
+defineOptions({name: 'ResetPwd'})
25 38
 
26
-const { t } = useI18n()
39
+const {t} = useI18n()
27 40
 const message = useMessage()
28 41
 const formRef = ref<FormInstance>()
29 42
 const password = reactive({
@@ -43,16 +56,16 @@ const equalToPassword = (_rule, value, callback) => {
43 56
 
44 57
 const rules = reactive<FormRules>({
45 58
   oldPassword: [
46
-    { required: true, message: t('profile.password.oldPwdMsg'), trigger: 'blur' },
47
-    { min: 6, max: 20, message: t('profile.password.pwdRules'), trigger: 'blur' }
59
+    {required: true, message: t('profile.password.oldPwdMsg'), trigger: 'blur'},
60
+    {min: 6, max: 20, message: t('profile.password.pwdRules'), trigger: 'blur'}
48 61
   ],
49 62
   newPassword: [
50
-    { required: true, message: t('profile.password.newPwdMsg'), trigger: 'blur' },
51
-    { min: 6, max: 20, message: t('profile.password.pwdRules'), trigger: 'blur' }
63
+    {required: true, message: t('profile.password.newPwdMsg'), trigger: 'blur'},
64
+    {min: 6, max: 20, message: t('profile.password.pwdRules'), trigger: 'blur'}
52 65
   ],
53 66
   confirmPassword: [
54
-    { required: true, message: t('profile.password.cfPwdMsg'), trigger: 'blur' },
55
-    { required: true, validator: equalToPassword, trigger: 'blur' }
67
+    {required: true, message: t('profile.password.cfPwdMsg'), trigger: 'blur'},
68
+    {required: true, validator: equalToPassword, trigger: 'blur'}
56 69
   ]
57 70
 })
58 71
 

+ 4 - 1
src/views/Profile/components/UserAvatar.vue

@@ -1,5 +1,5 @@
1 1
 <template>
2
-  <div class="change-avatar">
2
+  <div class="change-avatar mt-100px mb-150px mr-120px relative">
3 3
     <CropperAvatar
4 4
       ref="cropperRef"
5 5
       :btnProps="{ preIcon: 'ant-design:cloud-upload-outlined' }"
@@ -8,6 +8,9 @@
8 8
       width="120px"
9 9
       @change="handelUpload"
10 10
     />
11
+     <div class="text-2xl absolute right-50px bottom-0px text-[#000000]">超级管理员
12
+      <div class="text-sm lh-50px text-[#000000bd]">超级管理员,普通角色</div>
13
+     </div>
11 14
   </div>
12 15
 </template>
13 16
 <script lang="ts" setup>

+ 4 - 14
src/views/system/user/UserForm.vue

@@ -96,7 +96,7 @@
96 96
 
97 97
 
98 98
         <el-col :span="8">
99
-          <el-form-item label="省" prop="shengCode">
99
+          <el-form-item :prop="shengCodeProps" label="省">
100 100
             <el-select v-model="formData.shengCode"
101 101
                        clearable
102 102
                        placeholder="所属省份">
@@ -327,23 +327,13 @@ watch(() => formData.value.shiCode, async (newValue) => {
327 327
     xianList.value = []
328 328
   }
329 329
 });
330
+let shengCodeProps = ref('shengCode')
330 331
 watch(
331 332
   () => formData.value.deptId,
332 333
   async (newValue) => {
333
-    if (newValue == '112') {
334
-      // 当 deptId 为 '112' 时,shengCode 不是必填
335
-      formRules.shengCode[0].required = false;
336
-      // 清除 shengCode 的校验状态
337
-      await formRef.value?.clearValidate('shengCode');
338
-
339
-    } else {
340
-      // 否则,shengCode 是必填的
341
-      formRules.shengCode[0].required = true;
342
-      // 重新校验 shengCode 字段
343
-      await formRef.value?.validateField('shengCode');
344
-    }
334
+    shengCodeProps.value = newValue == '112' ? '' : 'shengCode';
345 335
   },
346
-  { deep: true }
336
+  {deep: true}
347 337
 );
348 338
 onMounted(async () => {
349 339