添加头像上传功能,优化滚动条样式,调整Gallery页面下载按钮样式,新增自动登录API

This commit is contained in:
2025-12-29 15:53:12 +08:00
parent cec3974cf3
commit 42dcf4195a
6 changed files with 94 additions and 20 deletions

View File

@ -32,7 +32,7 @@
</n-dropdown>
<div v-else class="flex items-center" @click="toLogin">
<n-avatar round class="cursor-pointer"></n-avatar>
<div class="cursor-pointer ml-2 text-gray text-sm" >登录</div>
<div class="cursor-pointer ml-2 text-gray text-sm">登录</div>
</div>
</div>
<!-- 登录弹窗 -->
@ -56,6 +56,25 @@
</div>
</div>
</div>
<!-- 修改头像弹窗 -->
<masked v-if="usrLog.isLogin" :visible="editModal" :setVisible="handdleItemCancel">
<div class="w-[500px] bg-white p-8 rounded-md">
<div class="text-center text-lg mb-8">修改头像</div>
<n-upload class="flex justify-center items-center" action="https://www.hxyouzi.com/api/user/avaupload"
:headers="{ Authorization: `Bearer ${token}` }" @finish="handleUpload" @before-upload="beforeUpload"
:show-file-list="false" accept="image/*">
<div class="flex flex-col justify-center items-center">
<n-avatar :size="80" :src="userinfo.ava_url" round class="cursor-pointer" alt="用户的头" />
<em class="cursor-pointer mt-4 text-gray text-sm">点击头像上传不超过3m的图片</em>
</div>
</n-upload>
<div class="mt-8 flex justify-between">
<n-button class="w-[98%]" secondary @click="handdleItemCancel">取消</n-button>
</div>
</div>
</masked>
</template>
<script setup lang="ts">
@ -69,7 +88,7 @@ import picSvg from '@/icon/menu/pic.svg';
import settingSvg from '@/icon/menu/setting.svg';
import loginModal from '@/components/Login.vue'
import masked from '@/components/mask.vue'
import type { UploadFileInfo } from 'naive-ui'
import { onMounted, ref, watch } from 'vue';
import { useRoute, useRouter, RouterLink } from 'vue-router';
@ -131,11 +150,58 @@ const oprOp = ref([
label: '控制台',
},
{
key: 'setting',
label: '设置',
key: 'avatar',
label: '更换头像',
}
])
const editModal = ref<boolean>(false)
const token = ref<string>("")
function beforeUpload(data: { file: UploadFileInfo }) {
console.log('>>> --> beforeUpload --> data:', data.file.file?.size)
const size = data.file.file?.size || 4 * 1024 * 1024
if (size > 3 * 1024 * 1024) {
$msg.error('上传的图片大小不能超过3M')
return false
}
return true
}
function handleUpload(f: any) {
console.log('上传完成', JSON.parse(f.event.target.response));
const res = JSON.parse(f.event.target.response)
if (res.code === 200) {
// $msg.success(res.msg);
autoLogin()
} else {
$msg.error(res.msg);
}
editModal.value = false
}
async function autoLogin() {
const res = await $http.user.autologin()
if (res?.code !== 200) {
$msg.error('登录失败')
usrLog.setIsLogin(false)
$cookies.remove('token')
$cookies.remove('userinfo')
return
}
$cookies.set('token', res.data.token, '1d')
$cookies.set('userinfo', res.data.userinfo, '1d')
$msg.success(res.msg)
usrLog.setIsLogin(true)
userinfo.value = res.data.userinfo
}
function handdleItemCancel() {
editModal.value = false
}
function setVisible(v: any) {
visible.value = v
}
@ -150,6 +216,10 @@ function handleSelect(key: string) {
gotoConsole()
return
}
if (key == 'avatar') {
editModal.value = true
return
}
}
// 获取地理位置
@ -271,7 +341,7 @@ onMounted(() => {
const h: number = nav.value.clientHeight
if (h > 0) navx.setNavH(h)
token.value = $cookies.get('token')
});
@ -296,6 +366,4 @@ onBeforeUpdate(() => {
width: 16px !important;
height: 16px !important;
}
</style>