From ad8cf4f0fc8302f97da36bfce5fe7127d4ff5785 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8C=BF=E5=B0=8F=E5=A4=A9?= <1638245306@qq.com> Date: Fri, 15 Apr 2022 21:26:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=8F=98=E5=8C=96:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化用户头像 --- backend/dvadmin/system/models.py | 2 +- backend/dvadmin/system/views/file_list.py | 3 +- backend/dvadmin/system/views/login.py | 1 + backend/dvadmin/system/views/user.py | 3 +- .../components/header-user/index.vue | 1 + .../components/header-user/userinfo.vue | 31 ++++++++++ web/src/router/routes.js | 56 +++++++++---------- .../store/modules/d2admin/modules/account.js | 2 +- web/src/views/system/user/crud.js | 7 +-- 9 files changed, 70 insertions(+), 36 deletions(-) diff --git a/backend/dvadmin/system/models.py b/backend/dvadmin/system/models.py index 6d0fcda..27dea49 100644 --- a/backend/dvadmin/system/models.py +++ b/backend/dvadmin/system/models.py @@ -206,7 +206,7 @@ class OperationLog(CoreModel): def media_file_name(instance, filename): h = instance.md5sum basename, ext = os.path.splitext(filename) - return os.path.join('media/files', h[0:1], h[1:2], h + ext.lower()) + return os.path.join('files', h[0:1], h[1:2], h + ext.lower()) class FileList(CoreModel): diff --git a/backend/dvadmin/system/views/file_list.py b/backend/dvadmin/system/views/file_list.py index e9f8b07..87c4355 100644 --- a/backend/dvadmin/system/views/file_list.py +++ b/backend/dvadmin/system/views/file_list.py @@ -17,7 +17,7 @@ class FileSerializer(CustomModelSerializer): url = serializers.SerializerMethodField(read_only=True) def get_url(self, instance): - return str(instance.url) + return 'media/'+str(instance.url) class Meta: model = FileList @@ -41,3 +41,4 @@ class FileViewSet(CustomModelViewSet): queryset = FileList.objects.all() serializer_class = FileSerializer filter_fields = ['name', ] + permission_classes = [] diff --git a/backend/dvadmin/system/views/login.py b/backend/dvadmin/system/views/login.py index 2c3e291..3a85d10 100644 --- a/backend/dvadmin/system/views/login.py +++ b/backend/dvadmin/system/views/login.py @@ -88,6 +88,7 @@ class LoginSerializer(TokenObtainPairSerializer): data = super().validate(attrs) data['name'] = self.user.name data['userId'] = self.user.id + data['avatar'] = self.user.avatar return { "code": 2000, "msg": "请求成功", diff --git a/backend/dvadmin/system/views/user.py b/backend/dvadmin/system/views/user.py index 5144952..36cb938 100644 --- a/backend/dvadmin/system/views/user.py +++ b/backend/dvadmin/system/views/user.py @@ -156,7 +156,8 @@ class UserViewSet(CustomModelViewSet): "name": user.name, "mobile": user.mobile, "gender": user.gender, - "email": user.email + "email": user.email, + 'avatar':user.avatar } return DetailResponse(data=result, msg="获取成功") diff --git a/web/src/layout/header-aside/components/header-user/index.vue b/web/src/layout/header-aside/components/header-user/index.vue index fd7a566..d60058d 100644 --- a/web/src/layout/header-aside/components/header-user/index.vue +++ b/web/src/layout/header-aside/components/header-user/index.vue @@ -20,6 +20,7 @@ 注销 + diff --git a/web/src/layout/header-aside/components/header-user/userinfo.vue b/web/src/layout/header-aside/components/header-user/userinfo.vue index e1cf799..67c8dff 100644 --- a/web/src/layout/header-aside/components/header-user/userinfo.vue +++ b/web/src/layout/header-aside/components/header-user/userinfo.vue @@ -20,6 +20,21 @@ :label-position="position" center > + + + + + + + @@ -130,6 +145,11 @@ export default { return { position: 'left', activeName: 'userInfo', + action: util.baseURL() + 'api/system/file/', + headers: { + Authorization: 'JWT ' + util.cookies.get('token') + }, + fileList:[], userInfo: { name: '', gender: '', @@ -177,6 +197,7 @@ export default { params: {} }).then((res) => { _self.userInfo = res.data + _self.fileList = [{name:'avatar.png',url:res.data.avatar}] }) }, /** @@ -251,6 +272,16 @@ export default { this.$message.error('表单校验失败,请检查') } }) + }, + /** + * 头像上传 + * @param res + * @param file + */ + handleAvatarSuccess(res, file) { + console.log(11,res) + this.fileList =[{ url: util.baseURL() + res.data.url, name:file.name }] + this.userInfo.avatar = util.baseURL() + res.data.url; } } } diff --git a/web/src/router/routes.js b/web/src/router/routes.js index 51916e0..7d9b192 100644 --- a/web/src/router/routes.js +++ b/web/src/router/routes.js @@ -88,25 +88,25 @@ const frameIn = [{ // component: _import('system/user') // }, // // 系统 按钮配置 - { - path: 'button', - name: 'button', - meta: { - title: '按钮', - auth: true - }, - component: _import('system/button') - }, - // // 系统 菜单权限 - { - path: 'menuButton/:id', - name: 'menuButton', - meta: { - title: '菜单按钮', - auth: true - }, - component: _import('system/menuButton') - }, + // { + // path: 'button', + // name: 'button', + // meta: { + // title: '按钮', + // auth: true + // }, + // component: _import('system/button') + // }, + // // // 系统 菜单权限 + // { + // path: 'menuButton/:id', + // name: 'menuButton', + // meta: { + // title: '菜单按钮', + // auth: true + // }, + // component: _import('system/menuButton') + // }, // // 系统 角色管理 // { // path: 'role', @@ -149,15 +149,15 @@ const frameIn = [{ // component: _import('system/log/operationLog') // }, // 系统 前端日志 - { - path: 'frontendLog', - name: 'frontendLog', - meta: { - title: '前端日志', - auth: true - }, - component: _import('system/log/frontendLog') - }, + // { + // path: 'frontendLog', + // name: 'frontendLog', + // meta: { + // title: '前端日志', + // auth: true + // }, + // component: _import('system/log/frontendLog') + // }, // 刷新页面 必须保留 { path: 'refresh', diff --git a/web/src/store/modules/d2admin/modules/account.js b/web/src/store/modules/d2admin/modules/account.js index e01badb..ce612c4 100644 --- a/web/src/store/modules/d2admin/modules/account.js +++ b/web/src/store/modules/d2admin/modules/account.js @@ -42,7 +42,7 @@ export default { util.cookies.set('token', res.access) util.cookies.set('refresh', res.refresh) // 设置 vuex 用户信息 - await dispatch('d2admin/user/set', { name: res.name, user_id: res.userId }, { root: true }) + await dispatch('d2admin/user/set', { name: res.name, user_id: res.userId,avatar:res.avatar }, { root: true }) // 用户登录后从持久化数据加载一系列的设置 await dispatch('load') }, diff --git a/web/src/views/system/user/crud.js b/web/src/views/system/user/crud.js index f0cd911..e151be8 100644 --- a/web/src/views/system/user/crud.js +++ b/web/src/views/system/user/crud.js @@ -3,7 +3,7 @@ import { BUTTON_STATUS_BOOL } from '@/config/button' import { urlPrefix as deptPrefix } from '../dept/api' import util from '@/libs/util' -const uploadUrl = util.baseURL() + 'api/system/img/' +const uploadUrl = util.baseURL() + 'api/system/file/' export const crudOptions = (vm) => { return { pageOptions: { @@ -261,7 +261,6 @@ export const crudOptions = (vm) => { props: { uploader: { action: uploadUrl, - name: 'url', headers: { Authorization: 'JWT ' + util.cookies.get('token') }, @@ -270,7 +269,7 @@ export const crudOptions = (vm) => { if (ret.data === null || ret.data === '') { throw new Error('上传失败') } - return { url: ret.data.data.url, key: option.data.key } + return { url: util.baseURL() + ret.data.url, key: option.data.key } } }, elProps: { // 与el-uploader 配置一致 @@ -297,7 +296,7 @@ export const crudOptions = (vm) => { props: { buildUrl (value, item) { if (value && value.indexOf('http') !== 0) { - return '/api/upload/form/download?key=' + value + return util.baseURL() + value } return value }