parent
6bf257eb23
commit
ad8cf4f0fc
|
@ -206,7 +206,7 @@ class OperationLog(CoreModel):
|
||||||
def media_file_name(instance, filename):
|
def media_file_name(instance, filename):
|
||||||
h = instance.md5sum
|
h = instance.md5sum
|
||||||
basename, ext = os.path.splitext(filename)
|
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):
|
class FileList(CoreModel):
|
||||||
|
|
|
@ -17,7 +17,7 @@ class FileSerializer(CustomModelSerializer):
|
||||||
url = serializers.SerializerMethodField(read_only=True)
|
url = serializers.SerializerMethodField(read_only=True)
|
||||||
|
|
||||||
def get_url(self, instance):
|
def get_url(self, instance):
|
||||||
return str(instance.url)
|
return 'media/'+str(instance.url)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = FileList
|
model = FileList
|
||||||
|
@ -41,3 +41,4 @@ class FileViewSet(CustomModelViewSet):
|
||||||
queryset = FileList.objects.all()
|
queryset = FileList.objects.all()
|
||||||
serializer_class = FileSerializer
|
serializer_class = FileSerializer
|
||||||
filter_fields = ['name', ]
|
filter_fields = ['name', ]
|
||||||
|
permission_classes = []
|
||||||
|
|
|
@ -88,6 +88,7 @@ class LoginSerializer(TokenObtainPairSerializer):
|
||||||
data = super().validate(attrs)
|
data = super().validate(attrs)
|
||||||
data['name'] = self.user.name
|
data['name'] = self.user.name
|
||||||
data['userId'] = self.user.id
|
data['userId'] = self.user.id
|
||||||
|
data['avatar'] = self.user.avatar
|
||||||
return {
|
return {
|
||||||
"code": 2000,
|
"code": 2000,
|
||||||
"msg": "请求成功",
|
"msg": "请求成功",
|
||||||
|
|
|
@ -156,7 +156,8 @@ class UserViewSet(CustomModelViewSet):
|
||||||
"name": user.name,
|
"name": user.name,
|
||||||
"mobile": user.mobile,
|
"mobile": user.mobile,
|
||||||
"gender": user.gender,
|
"gender": user.gender,
|
||||||
"email": user.email
|
"email": user.email,
|
||||||
|
'avatar':user.avatar
|
||||||
}
|
}
|
||||||
return DetailResponse(data=result, msg="获取成功")
|
return DetailResponse(data=result, msg="获取成功")
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
注销
|
注销
|
||||||
</el-dropdown-item>
|
</el-dropdown-item>
|
||||||
</el-dropdown-menu>
|
</el-dropdown-menu>
|
||||||
|
<el-image v-if="info.avatar" :src="info.avatar" :preview-src-list="[info.avatar]" style="width: 20px;height: 20px" alt="头像"></el-image>
|
||||||
</el-dropdown>
|
</el-dropdown>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,21 @@
|
||||||
:label-position="position"
|
:label-position="position"
|
||||||
center
|
center
|
||||||
>
|
>
|
||||||
|
<el-form-item prop="avatar" required label="头像">
|
||||||
|
<el-upload
|
||||||
|
class="avatar-uploader"
|
||||||
|
list-type="picture-card"
|
||||||
|
:file-list="fileList"
|
||||||
|
:action="action"
|
||||||
|
:headers="headers"
|
||||||
|
:limit="1"
|
||||||
|
:disabled="fileList.length===1"
|
||||||
|
:on-success="handleAvatarSuccess">
|
||||||
|
<!-- <el-image v-if="userInfo.avatar" :src="userInfo.avatar" :preview-src-list="[userInfo.avatar]" style="width: 100px;height: 100px" alt="头像"></el-image>-->
|
||||||
|
<!-- <i v-else class="el-icon-plus avatar-uploader-icon" style="width: 100px;height: 100px"></i>-->
|
||||||
|
<i class="el-icon-plus"></i>
|
||||||
|
</el-upload>
|
||||||
|
</el-form-item>
|
||||||
<el-form-item prop="name" required label="昵称">
|
<el-form-item prop="name" required label="昵称">
|
||||||
<el-input v-model="userInfo.name" clearable></el-input>
|
<el-input v-model="userInfo.name" clearable></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
@ -130,6 +145,11 @@ export default {
|
||||||
return {
|
return {
|
||||||
position: 'left',
|
position: 'left',
|
||||||
activeName: 'userInfo',
|
activeName: 'userInfo',
|
||||||
|
action: util.baseURL() + 'api/system/file/',
|
||||||
|
headers: {
|
||||||
|
Authorization: 'JWT ' + util.cookies.get('token')
|
||||||
|
},
|
||||||
|
fileList:[],
|
||||||
userInfo: {
|
userInfo: {
|
||||||
name: '',
|
name: '',
|
||||||
gender: '',
|
gender: '',
|
||||||
|
@ -177,6 +197,7 @@ export default {
|
||||||
params: {}
|
params: {}
|
||||||
}).then((res) => {
|
}).then((res) => {
|
||||||
_self.userInfo = res.data
|
_self.userInfo = res.data
|
||||||
|
_self.fileList = [{name:'avatar.png',url:res.data.avatar}]
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
|
@ -251,6 +272,16 @@ export default {
|
||||||
this.$message.error('表单校验失败,请检查')
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,25 +88,25 @@ const frameIn = [{
|
||||||
// component: _import('system/user')
|
// component: _import('system/user')
|
||||||
// },
|
// },
|
||||||
// // 系统 按钮配置
|
// // 系统 按钮配置
|
||||||
{
|
// {
|
||||||
path: 'button',
|
// path: 'button',
|
||||||
name: 'button',
|
// name: 'button',
|
||||||
meta: {
|
// meta: {
|
||||||
title: '按钮',
|
// title: '按钮',
|
||||||
auth: true
|
// auth: true
|
||||||
},
|
// },
|
||||||
component: _import('system/button')
|
// component: _import('system/button')
|
||||||
},
|
// },
|
||||||
// // 系统 菜单权限
|
// // // 系统 菜单权限
|
||||||
{
|
// {
|
||||||
path: 'menuButton/:id',
|
// path: 'menuButton/:id',
|
||||||
name: 'menuButton',
|
// name: 'menuButton',
|
||||||
meta: {
|
// meta: {
|
||||||
title: '菜单按钮',
|
// title: '菜单按钮',
|
||||||
auth: true
|
// auth: true
|
||||||
},
|
// },
|
||||||
component: _import('system/menuButton')
|
// component: _import('system/menuButton')
|
||||||
},
|
// },
|
||||||
// // 系统 角色管理
|
// // 系统 角色管理
|
||||||
// {
|
// {
|
||||||
// path: 'role',
|
// path: 'role',
|
||||||
|
@ -149,15 +149,15 @@ const frameIn = [{
|
||||||
// component: _import('system/log/operationLog')
|
// component: _import('system/log/operationLog')
|
||||||
// },
|
// },
|
||||||
// 系统 前端日志
|
// 系统 前端日志
|
||||||
{
|
// {
|
||||||
path: 'frontendLog',
|
// path: 'frontendLog',
|
||||||
name: 'frontendLog',
|
// name: 'frontendLog',
|
||||||
meta: {
|
// meta: {
|
||||||
title: '前端日志',
|
// title: '前端日志',
|
||||||
auth: true
|
// auth: true
|
||||||
},
|
// },
|
||||||
component: _import('system/log/frontendLog')
|
// component: _import('system/log/frontendLog')
|
||||||
},
|
// },
|
||||||
// 刷新页面 必须保留
|
// 刷新页面 必须保留
|
||||||
{
|
{
|
||||||
path: 'refresh',
|
path: 'refresh',
|
||||||
|
|
|
@ -42,7 +42,7 @@ export default {
|
||||||
util.cookies.set('token', res.access)
|
util.cookies.set('token', res.access)
|
||||||
util.cookies.set('refresh', res.refresh)
|
util.cookies.set('refresh', res.refresh)
|
||||||
// 设置 vuex 用户信息
|
// 设置 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')
|
await dispatch('load')
|
||||||
},
|
},
|
||||||
|
|
|
@ -3,7 +3,7 @@ import { BUTTON_STATUS_BOOL } from '@/config/button'
|
||||||
import { urlPrefix as deptPrefix } from '../dept/api'
|
import { urlPrefix as deptPrefix } from '../dept/api'
|
||||||
import util from '@/libs/util'
|
import util from '@/libs/util'
|
||||||
|
|
||||||
const uploadUrl = util.baseURL() + 'api/system/img/'
|
const uploadUrl = util.baseURL() + 'api/system/file/'
|
||||||
export const crudOptions = (vm) => {
|
export const crudOptions = (vm) => {
|
||||||
return {
|
return {
|
||||||
pageOptions: {
|
pageOptions: {
|
||||||
|
@ -261,7 +261,6 @@ export const crudOptions = (vm) => {
|
||||||
props: {
|
props: {
|
||||||
uploader: {
|
uploader: {
|
||||||
action: uploadUrl,
|
action: uploadUrl,
|
||||||
name: 'url',
|
|
||||||
headers: {
|
headers: {
|
||||||
Authorization: 'JWT ' + util.cookies.get('token')
|
Authorization: 'JWT ' + util.cookies.get('token')
|
||||||
},
|
},
|
||||||
|
@ -270,7 +269,7 @@ export const crudOptions = (vm) => {
|
||||||
if (ret.data === null || ret.data === '') {
|
if (ret.data === null || ret.data === '') {
|
||||||
throw new Error('上传失败')
|
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 配置一致
|
elProps: { // 与el-uploader 配置一致
|
||||||
|
@ -297,7 +296,7 @@ export const crudOptions = (vm) => {
|
||||||
props: {
|
props: {
|
||||||
buildUrl (value, item) {
|
buildUrl (value, item) {
|
||||||
if (value && value.indexOf('http') !== 0) {
|
if (value && value.indexOf('http') !== 0) {
|
||||||
return '/api/upload/form/download?key=' + value
|
return util.baseURL() + value
|
||||||
}
|
}
|
||||||
return value
|
return value
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue