Skip to content

Commit c938028

Browse files
committed
feat: 新增上传个人头像
1 parent 5f4ea2e commit c938028

File tree

12 files changed

+221
-130
lines changed

12 files changed

+221
-130
lines changed

src/apis/system/user-center.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@ import type * as System from '@/apis/system/type'
33

44
const BASE_URL = '/system/user'
55

6+
/** @desc 上传头像 */
7+
export function uploadAvatar(data: FormData) {
8+
return http.post(`${BASE_URL}/avatar`, data)
9+
}
10+
611
/** @desc 修改用户基本信息 */
712
export function updateUserBaseInfo(data: { nickname: string; gender: number }) {
813
return http.patch(`${BASE_URL}/basic/info`, data)

src/components/GiFooter/index.vue

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,11 @@
33
</template>
44

55
<script lang="ts" setup>
6-
import Dayjs from 'dayjs'
76
import { useAppStore } from '@/stores'
87
98
const appStore = useAppStore()
109
1110
defineOptions({ name: 'GiFooter' })
12-
13-
const year = Dayjs(new Date()).format('YYYY')
1411
</script>
1512

1613
<style lang="scss" scoped>

src/router/permission.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import router from '@/router'
2-
import { useUserStore, useRouteStore, useAppStore } from '@/stores'
2+
import { useUserStore, useRouteStore } from '@/stores'
33
import { getToken } from '@/utils/auth'
44
import { isHttp } from '@/utils/validate'
55

src/utils/downloadFile.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export function downloadByUrl({
2626
}): Promise<boolean> {
2727
// 是否同源
2828
const isSameHost = new URL(url).host == location.host
29-
return new Promise<boolean>((resolve, reject) => {
29+
return new Promise<boolean>((resolve) => {
3030
if (isSameHost) {
3131
const link = document.createElement('a')
3232
link.href = url

src/utils/http.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ const del = <T = any>(url: string, params?: object, config?: AxiosRequestConfig)
177177
...config
178178
})
179179
}
180-
const download = <T = any>(url: string, params?: object, config?: AxiosRequestConfig): Promise<AxiosResponse> => {
180+
const download = (url: string, params?: object, config?: AxiosRequestConfig): Promise<AxiosResponse> => {
181181
return requestNative({
182182
method: 'get',
183183
url,

src/views/login/components/account/index.vue

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ import { getImageCaptcha } from '@/apis'
3737
import { Message, type FormInstance } from '@arco-design/web-vue'
3838
import { useUserStore } from '@/stores'
3939
import { useStorage } from '@vueuse/core'
40-
import { useLoading } from '@/hooks'
4140
import { encryptByRsa } from '@/utils/encrypt'
4241
4342
const loginConfig = useStorage('login-config', {

src/views/setting/profile/AvatarModel.vue

Lines changed: 0 additions & 54 deletions
This file was deleted.
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<template>
2+
<a-modal v-model:visible="visible" title="修改基本信息" @before-ok="save" @close="reset">
3+
<GiForm ref="formRef" v-model="form" :options="options" :columns="columns" />
4+
</a-modal>
5+
</template>
6+
7+
<script setup lang="ts">
8+
import { updateUserBaseInfo } from '@/apis'
9+
import { Message } from '@arco-design/web-vue'
10+
import { GiForm, type Columns } from '@/components/GiForm'
11+
import { useForm } from '@/hooks'
12+
import { useUserStore } from '@/stores'
13+
14+
const options: Options = {
15+
form: {},
16+
col: { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 },
17+
btns: { hide: true }
18+
}
19+
20+
const columns: Columns = [
21+
{
22+
label: '昵称',
23+
field: 'nickname',
24+
type: 'input',
25+
rules: [{ required: true, message: '请输入昵称' }]
26+
},
27+
{
28+
label: '性别',
29+
field: 'gender',
30+
type: 'radio-group',
31+
options: [
32+
{ label: '', value: 1 },
33+
{ label: '', value: 2 },
34+
{ label: '未知', value: 0, disabled: true }
35+
],
36+
rules: [{ required: true, message: '请选择性别' }]
37+
}
38+
]
39+
40+
const userStore = useUserStore()
41+
const userInfo = computed(() => userStore.userInfo)
42+
const { form, resetForm } = useForm({
43+
nickname: userInfo.value.nickname,
44+
gender: userInfo.value.gender
45+
})
46+
47+
const formRef = ref<InstanceType<typeof GiForm>>()
48+
// 重置
49+
const reset = () => {
50+
formRef.value?.formRef?.resetFields()
51+
resetForm()
52+
}
53+
54+
const visible = ref(false)
55+
// 修改
56+
const onUpdate = async () => {
57+
reset()
58+
visible.value = true
59+
}
60+
61+
// 保存
62+
const save = async () => {
63+
const isInvalid = await formRef.value?.formRef?.validate()
64+
if (isInvalid) return false
65+
try {
66+
await updateUserBaseInfo(form)
67+
Message.success('修改成功')
68+
// 修改成功后,重新获取用户信息
69+
await userStore.getInfo()
70+
return true
71+
} catch (error) {
72+
return false
73+
}
74+
}
75+
76+
defineExpose({ onUpdate })
77+
</script>

0 commit comments

Comments
 (0)