parent
							
								
									6bf257eb23
								
							
						
					
					
						commit
						ad8cf4f0fc
					
				|  | @ -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): | ||||
|  |  | |||
|  | @ -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 = [] | ||||
|  |  | |||
|  | @ -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": "请求成功", | ||||
|  |  | |||
|  | @ -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="获取成功") | ||||
| 
 | ||||
|  |  | |||
|  | @ -20,6 +20,7 @@ | |||
|         注销 | ||||
|       </el-dropdown-item> | ||||
|     </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> | ||||
| </template> | ||||
| 
 | ||||
|  |  | |||
|  | @ -20,6 +20,21 @@ | |||
|               :label-position="position" | ||||
|               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-input v-model="userInfo.name" clearable></el-input> | ||||
|               </el-form-item> | ||||
|  | @ -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; | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -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', | ||||
|  |  | |||
|  | @ -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') | ||||
|     }, | ||||
|  |  | |||
|  | @ -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 | ||||
|             } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 猿小天
						猿小天