Merge remote-tracking branch 'dva-origin/v2.x' into to_merge

pull/53/head
Angelo 2022-04-26 11:11:37 +08:00
commit 60f795cb49
9 changed files with 142 additions and 151 deletions

View File

@ -30,6 +30,8 @@ from conf.env import *
SECRET_KEY = 'django-insecure--z8%exyzt7e_%i@1+#1mm=%lb5=^fx_57=1@a+_y7bg5-w%)sm' SECRET_KEY = 'django-insecure--z8%exyzt7e_%i@1+#1mm=%lb5=^fx_57=1@a+_y7bg5-w%)sm'
# 初始化plugins插件路径到环境变量中 # 初始化plugins插件路径到环境变量中
PLUGINS_PATH = os.path.join(BASE_DIR, 'plugins') PLUGINS_PATH = os.path.join(BASE_DIR, 'plugins')
sys.path.insert(0, os.path.join(PLUGINS_PATH))
[sys.path.insert(0, os.path.join(PLUGINS_PATH, ele)) for ele in os.listdir(PLUGINS_PATH) if [sys.path.insert(0, os.path.join(PLUGINS_PATH, ele)) for ele in os.listdir(PLUGINS_PATH) if
os.path.isdir(os.path.join(PLUGINS_PATH, ele)) and not ele.startswith('__')] os.path.isdir(os.path.join(PLUGINS_PATH, ele)) and not ele.startswith('__')]

View File

@ -1,11 +1,3 @@
# -*- coding: utf-8 -*-
"""
@author: 猿小天
@contact: QQ:1638245306
@Created on: 2021/8/9 009 20:48
@Remark:
"""
from rest_framework import serializers from rest_framework import serializers
from dvadmin.system.models import FileList from dvadmin.system.models import FileList
@ -17,7 +9,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 'media/'+str(instance.url) return 'media/' + str(instance.url)
class Meta: class Meta:
model = FileList model = FileList

View File

@ -0,0 +1,103 @@
export default {
'image-uploader': {
form: { component: { name: 'd2p-file-uploader', props: { elProps: { listType: 'picture-card', accept: '.png,.jpeg,.jpg,.ico,.bmp,.gif' } } } },
component: { name: 'd2p-images-format' },
view: {
component: { props: { height: 100, width: 100 } }
},
align: 'center',
// 提交时,处理数据
valueResolve (row, col) {
const value = row[col.key]
if (value != null) {
if (value.length >= 0) {
if (value instanceof Array) {
row[col.key] = value.toString()
} else {
row[col.key] = value[0]
}
} else {
row[col.key] = null
}
}
},
// 接收时,处理数据
valueBuilder (row, col) {
const value = row[col.key]
if (value != null) {
row[col.key] = value.split(',')
}
}
},
'avatar-uploader': {
form: { component: { name: 'd2p-file-uploader', props: { elProps: { limit: 1, listType: 'avatar', accept: '.png,.jpeg,.jpg,.ico,.bmp,.gif', showFileList: false } } } },
component: { name: 'd2p-images-format' },
view: {
component: { props: { height: 100, width: 100 } }
},
align: 'center',
// 提交时,处理数据
valueResolve (row, col) {
const value = row[col.key]
if (value != null) {
if (value.length >= 0) {
if (value instanceof Array) {
row[col.key] = value.toString()
} else {
row[col.key] = value[0]
}
} else {
row[col.key] = null
}
}
},
// 接收时,处理数据
valueBuilder (row, col) {
const value = row[col.key]
if (value != null) {
row[col.key] = value.split(',')
}
}
},
'file-uploader': {
form: { component: { name: 'd2p-file-uploader', props: { elProps: { listType: 'text' } } } },
component: { name: 'd2p-files-format' },
// 提交时,处理数据
valueResolve (row, col) {
const value = row[col.key]
if (value != null) {
if (value.length >= 0) {
if (value instanceof Array) {
row[col.key] = value.toString()
} else {
row[col.key] = value[0]
}
} else {
row[col.key] = null
}
}
},
// 接收时,处理数据
valueBuilder (row, col) {
const value = row[col.key]
if (value != null) {
row[col.key] = value.split(',')
}
}
},
'avatar-cropper': {
form: { component: { name: 'd2p-cropper-uploader', props: { accept: '.png,.jpeg,.jpg,.ico,.bmp,.gif', cropper: { viewMode: 1 } } } },
component: { name: 'd2p-images-format' },
align: 'center',
view: {
component: { props: { height: 100, width: 100 } }
},
// 接收时,处理数据
valueBuilder (row, col) {
const value = row[col.key]
if (value != null) {
row[col.key] = value.split(',')
}
}
}
}

View File

@ -16,6 +16,8 @@ import { request } from '@/api/service'
import util from '@/libs/util' import util from '@/libs/util'
import XEUtils from 'xe-utils' import XEUtils from 'xe-utils'
import { urlPrefix as deptPrefix } from '@/views/system/dept/api' import { urlPrefix as deptPrefix } from '@/views/system/dept/api'
import types from '@/config/d2p-extends/types'
const uploadUrl = util.baseURL() + 'api/system/file/'
/** /**
// vxe0 // vxe0
@ -105,7 +107,7 @@ Vue.use(D2pFullEditor, {
Vue.use(D2pDemoExtend) Vue.use(D2pDemoExtend)
Vue.use(D2pFileUploader) Vue.use(D2pFileUploader)
Vue.use(D2pUploader, { Vue.use(D2pUploader, {
defaultType: 'cos', defaultType: 'form',
cos: { cos: {
domain: 'https://d2p-demo-1251260344.cos.ap-guangzhou.myqcloud.com', domain: 'https://d2p-demo-1251260344.cos.ap-guangzhou.myqcloud.com',
bucket: 'd2p-demo-1251260344', bucket: 'd2p-demo-1251260344',
@ -159,11 +161,25 @@ Vue.use(D2pUploader, {
domain: 'http://d2p.file.veryreader.com' domain: 'http://d2p.file.veryreader.com'
}, },
form: { form: {
action: util.baseURL() + 'upload/form/upload', action: uploadUrl,
name: 'file' name: 'file',
data: {}, // 上传附加参数
headers () {
return {
Authorization: 'JWT ' + util.cookies.get('token')
}
},
type: 'form',
successHandle (ret, option) {
if (ret.data === null || ret.data === '') {
throw new Error('上传失败')
}
return { url: util.baseURL() + ret.data.url, key: option.data.key }
},
withCredentials: false // 是否带cookie
} }
}) })
d2CrudPlus.util.columnResolve.addTypes(types)
// 修改官方字段类型 // 修改官方字段类型
const selectType = d2CrudPlus.util.columnResolve.getType('select') const selectType = d2CrudPlus.util.columnResolve.getType('select')
selectType.component.props.color = 'auto' // 修改官方的字段类型设置为支持自动染色 selectType.component.props.color = 'auto' // 修改官方的字段类型设置为支持自动染色
@ -257,7 +273,7 @@ Vue.prototype.commonEndColumns = function (param = {}) {
type: 'table-selector', type: 'table-selector',
dict: { dict: {
cache: true, cache: true,
url: '/api/system/dept/?limit=999&status=1', url: deptPrefix + '?limit=999&status=1',
isTree: true, isTree: true,
value: 'id', // 数据字典中value字段的属性名 value: 'id', // 数据字典中value字段的属性名
label: 'name', // 数据字典中label字段的属性名 label: 'name', // 数据字典中label字段的属性名
@ -267,7 +283,7 @@ Vue.prototype.commonEndColumns = function (param = {}) {
component component
}) => { }) => {
return request({ return request({
url: url, url: url
}).then(ret => { }).then(ret => {
return ret.data.data return ret.data.data
}) })

View File

@ -149,7 +149,7 @@ export default {
headers: { headers: {
Authorization: 'JWT ' + util.cookies.get('token') Authorization: 'JWT ' + util.cookies.get('token')
}, },
fileList:[], fileList: [],
userInfo: { userInfo: {
name: '', name: '',
gender: '', gender: '',
@ -197,7 +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}] _self.fileList = [{ name: 'avatar.png', url: res.data.avatar }]
}) })
}, },
/** /**
@ -278,10 +278,10 @@ export default {
* @param res * @param res
* @param file * @param file
*/ */
handleAvatarSuccess(res, file) { handleAvatarSuccess (res, file) {
console.log(11,res) console.log(11, res)
this.fileList =[{ url: util.baseURL() + res.data.url, name:file.name }] this.fileList = [{ url: util.baseURL() + res.data.url, name: file.name }]
this.userInfo.avatar = util.baseURL() + res.data.url; this.userInfo.avatar = util.baseURL() + res.data.url
} }
} }
} }

View File

@ -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,avatar:res.avatar }, { 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')
}, },

View File

@ -1,6 +1,4 @@
import { request } from '@/api/service' import { request } from '@/api/service'
import util from '@/libs/util'
const uploadUrl = process.env.VUE_APP_API + '/api/system/img/'
export const crudOptions = (vm) => { export const crudOptions = (vm) => {
return { return {
pageOptions: { pageOptions: {
@ -85,20 +83,6 @@ export const crudOptions = (vm) => {
form: { form: {
component: { component: {
props: { props: {
uploader: {
action: uploadUrl,
name: 'file',
headers: {
Authorization: 'JWT ' + util.cookies.get('token')
},
type: 'form',
successHandle (ret, option) {
if (ret.data == null || ret.data === '') {
throw new Error('上传失败')
}
return { url: ret.data.data.url, key: option.data.key }
}
},
elProps: { // 与el-uploader 配置一致 elProps: { // 与el-uploader 配置一致
multiple: false, multiple: false,
limit: 5 // 限制5个文件 limit: 5 // 限制5个文件
@ -108,26 +92,6 @@ export const crudOptions = (vm) => {
span: 24 span: 24
}, },
helper: '限制文件大小不能超过50k' helper: '限制文件大小不能超过50k'
},
valueResolve (row, col) {
const value = row[col.key]
if (value != null && value instanceof Array) {
if (value.length >= 0) {
row[col.key] = value[0]
} else {
row[col.key] = null
}
}
},
component: {
props: {
buildUrl (value, item) {
if (value && value.indexOf('http') !== 0) {
return '/api/upload/form/download?key=' + value
}
return value
}
}
} }
}, },
{ {
@ -139,20 +103,6 @@ export const crudOptions = (vm) => {
form: { form: {
component: { component: {
props: { props: {
uploader: {
action: uploadUrl,
name: 'file',
headers: {
Authorization: 'JWT ' + util.cookies.get('token')
},
type: 'form',
successHandle (ret, option) {
if (ret.data == null || ret.data === '') {
throw new Error('上传失败')
}
return { url: ret.data.data.url, key: option.data.key }
}
},
elProps: { // 与el-uploader 配置一致 elProps: { // 与el-uploader 配置一致
multiple: false, multiple: false,
limit: 5 // 限制5个文件 limit: 5 // 限制5个文件
@ -162,26 +112,6 @@ export const crudOptions = (vm) => {
span: 24 span: 24
}, },
helper: '限制文件大小不能超过50k' helper: '限制文件大小不能超过50k'
},
valueResolve (row, col) {
const value = row[col.key]
if (value != null && value instanceof Array) {
if (value.length >= 0) {
row[col.key] = value[0]
} else {
row[col.key] = null
}
}
},
component: {
props: {
buildUrl (value, item) {
if (value && value.indexOf('http') !== 0) {
return '/api/upload/form/download?key=' + value
}
return value
}
}
} }
}, },
{ {

View File

@ -1,5 +1,3 @@
import util from '@/libs/util'
export const crudOptions = (vm) => { export const crudOptions = (vm) => {
return { return {
pageOptions: { pageOptions: {
@ -92,11 +90,7 @@ export const crudOptions = (vm) => {
search: { search: {
disabled: true disabled: true
}, },
width: 220, width: 220
valueBuilder (row, key) {
console.log(row, key)
row.url = `${util.baseURL()}media/${row.url}`
}
}, },
{ {
title: '文件MD5', title: '文件MD5',
@ -107,18 +101,7 @@ export const crudOptions = (vm) => {
}, },
form: { form: {
disabled: false disabled: false
},
valueResolve (row, col) {
const value = row[col.key]
if (value != null && value instanceof Array) {
if (value.length >= 0) {
row[col.key] = value[0]
} else {
row[col.key] = null
}
}
} }
}, },
{ {
title: '备注', title: '备注',

View File

@ -1,9 +1,7 @@
import { request } from '@/api/service' import { request } from '@/api/service'
import { BUTTON_STATUS_BOOL } from '@/config/button' 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'
const uploadUrl = util.baseURL() + 'api/system/file/'
export const crudOptions = (vm) => { export const crudOptions = (vm) => {
return { return {
pageOptions: { pageOptions: {
@ -42,7 +40,7 @@ export const crudOptions = (vm) => {
text: '', text: '',
size: 'small', size: 'small',
type: 'warning', type: 'warning',
icon: 'el-icon-refresh-left', icon: 'el-icon-key',
show () { show () {
return vm.hasPermissions('ResetPwd') return vm.hasPermissions('ResetPwd')
}, },
@ -258,54 +256,21 @@ export const crudOptions = (vm) => {
{ {
title: '头像', title: '头像',
key: 'avatar', key: 'avatar',
type: 'avatar-uploader', type: 'avatar-cropper',
width: 100, width: 100,
align: 'left', align: 'left',
form: { form: {
component: { component: {
props: { props: {
uploader: {
action: uploadUrl,
headers: {
Authorization: 'JWT ' + util.cookies.get('token')
},
type: 'form',
successHandle (ret, option) {
if (ret.data === null || ret.data === '') {
throw new Error('上传失败')
}
return { url: util.baseURL() + ret.data.url, key: option.data.key }
}
},
elProps: { // 与el-uploader 配置一致 elProps: { // 与el-uploader 配置一致
multiple: true, multiple: false,
limit: 5 // 限制5个文件 limit: 1 // 限制5个文件
}, },
sizeLimit: 100 * 1024 // 不能超过限制 sizeLimit: 500 * 1024 // 不能超过限制
}, },
span: 24 span: 24
}, },
helper: '限制文件大小不能超过50k' helper: '限制文件大小不能超过500k'
},
valueResolve (row, col) {
const value = row[col.key]
if (value != null && value instanceof Array) {
if (value.length >= 0) {
row[col.key] = value[0]
} else {
row[col.key] = null
}
}
},
component: {
props: {
buildUrl (value, item) {
if (value && value.indexOf('http') !== 0) {
return util.baseURL() + value
}
return value
}
}
} }
}, },
{ {