From ef831bacb01ff0efa6574a5f83664a6fcf98d804 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BC=BA?= <1206709430@qq.com> Date: Mon, 25 Apr 2022 10:08:36 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E9=87=8D=E6=9E=84:=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=85=A8=E5=B1=80=E6=96=87=E4=BB=B6=E5=8F=8A=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/application/settings.py | 2 ++ web/src/install.js | 25 ++++++++++++---- .../components/header-user/userinfo.vue | 12 ++++---- .../store/modules/d2admin/modules/account.js | 2 +- web/src/views/demo/page1/crud.js | 30 ------------------- web/src/views/system/user/crud.js | 14 --------- 6 files changed, 28 insertions(+), 57 deletions(-) diff --git a/backend/application/settings.py b/backend/application/settings.py index 8c60b21..bee5dfc 100644 --- a/backend/application/settings.py +++ b/backend/application/settings.py @@ -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' # 初始化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 os.path.isdir(os.path.join(PLUGINS_PATH, ele)) and not ele.startswith('__')] diff --git a/web/src/install.js b/web/src/install.js index b3e7c80..131ed75 100644 --- a/web/src/install.js +++ b/web/src/install.js @@ -15,7 +15,8 @@ import { import { request } from '@/api/service' import util from '@/libs/util' import XEUtils from 'xe-utils' -import { urlPrefix as deptPrefix } from '@/views/system/dept/api' +import { urlPrefix as deptPrefix } from '@/views/system/dept/' +const uploadUrl = util.baseURL() + 'api/system/file/' /** // vxe0 @@ -105,7 +106,7 @@ Vue.use(D2pFullEditor, { Vue.use(D2pDemoExtend) Vue.use(D2pFileUploader) Vue.use(D2pUploader, { - defaultType: 'cos', + defaultType: 'form', cos: { domain: 'https://d2p-demo-1251260344.cos.ap-guangzhou.myqcloud.com', bucket: 'd2p-demo-1251260344', @@ -159,8 +160,20 @@ Vue.use(D2pUploader, { domain: 'http://d2p.file.veryreader.com' }, form: { - action: util.baseURL() + 'upload/form/upload', - name: 'file' + action: uploadUrl, + name: 'file', + data: {}, // 上传附加参数 + 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 } + }, + withCredentials: false // 是否带cookie } }) @@ -257,7 +270,7 @@ Vue.prototype.commonEndColumns = function (param = {}) { type: 'table-selector', dict: { cache: true, - url: '/api/system/dept/?limit=999&status=1', + url: deptPrefix + '?limit=999&status=1', isTree: true, value: 'id', // 数据字典中value字段的属性名 label: 'name', // 数据字典中label字段的属性名 @@ -267,7 +280,7 @@ Vue.prototype.commonEndColumns = function (param = {}) { component }) => { return request({ - url: url, + url: url }).then(ret => { return ret.data.data }) 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 67c8dff..d8d3fd2 100644 --- a/web/src/layout/header-aside/components/header-user/userinfo.vue +++ b/web/src/layout/header-aside/components/header-user/userinfo.vue @@ -149,7 +149,7 @@ export default { headers: { Authorization: 'JWT ' + util.cookies.get('token') }, - fileList:[], + fileList: [], userInfo: { name: '', gender: '', @@ -197,7 +197,7 @@ export default { params: {} }).then((res) => { _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 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; + 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/store/modules/d2admin/modules/account.js b/web/src/store/modules/d2admin/modules/account.js index ce612c4..2fdc0b1 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,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') }, diff --git a/web/src/views/demo/page1/crud.js b/web/src/views/demo/page1/crud.js index 4829999..5919f81 100644 --- a/web/src/views/demo/page1/crud.js +++ b/web/src/views/demo/page1/crud.js @@ -1,6 +1,4 @@ import { request } from '@/api/service' -import util from '@/libs/util' -const uploadUrl = process.env.VUE_APP_API + '/api/system/img/' export const crudOptions = (vm) => { return { pageOptions: { @@ -85,20 +83,6 @@ export const crudOptions = (vm) => { form: { component: { 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 配置一致 multiple: false, limit: 5 // 限制5个文件 @@ -139,20 +123,6 @@ export const crudOptions = (vm) => { form: { component: { 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 配置一致 multiple: false, limit: 5 // 限制5个文件 diff --git a/web/src/views/system/user/crud.js b/web/src/views/system/user/crud.js index ec101c7..ca46425 100644 --- a/web/src/views/system/user/crud.js +++ b/web/src/views/system/user/crud.js @@ -3,7 +3,6 @@ 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/file/' export const crudOptions = (vm) => { return { pageOptions: { @@ -264,19 +263,6 @@ export const crudOptions = (vm) => { form: { component: { 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 配置一致 multiple: true, limit: 5 // 限制5个文件 From 614adf6d742809f25c3303f5e846fe91fe7e020c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BC=BA?= <1206709430@qq.com> Date: Mon, 25 Apr 2022 14:32:46 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E9=87=8D=E6=9E=84:=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=85=A8=E5=B1=80=E6=96=87=E4=BB=B6=E5=8F=8A=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/install.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/install.js b/web/src/install.js index 131ed75..9254a2f 100644 --- a/web/src/install.js +++ b/web/src/install.js @@ -171,7 +171,7 @@ Vue.use(D2pUploader, { if (ret.data === null || ret.data === '') { throw new Error('上传失败') } - return { url: ret.data.data.url, key: option.data.key } + return { url: util.baseURL() + 'media/' + ret.data.data.url, key: option.data.key } }, withCredentials: false // 是否带cookie } From add1f3a47b95e4b78f25308d0134bc484f1f08dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BC=BA?= <1206709430@qq.com> Date: Mon, 25 Apr 2022 15:55:23 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BC=98=E5=8C=96:=20=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=8F=8A=E5=9B=BE=E7=89=87=E4=B8=8A=E4=BC=A0=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/dvadmin/system/views/file_list.py | 10 +- web/src/config/d2p-extends/types.js | 118 ++++++++++++++++++++++ web/src/install.js | 13 ++- web/src/views/demo/page1/crud.js | 40 -------- web/src/views/system/fileList/crud.js | 19 +--- web/src/views/system/user/crud.js | 25 +---- 6 files changed, 130 insertions(+), 95 deletions(-) create mode 100644 web/src/config/d2p-extends/types.js diff --git a/backend/dvadmin/system/views/file_list.py b/backend/dvadmin/system/views/file_list.py index 87c4355..82fc757 100644 --- a/backend/dvadmin/system/views/file_list.py +++ b/backend/dvadmin/system/views/file_list.py @@ -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 dvadmin.system.models import FileList @@ -17,7 +9,7 @@ class FileSerializer(CustomModelSerializer): url = serializers.SerializerMethodField(read_only=True) def get_url(self, instance): - return 'media/'+str(instance.url) + return 'media/' + str(instance.url) class Meta: model = FileList diff --git a/web/src/config/d2p-extends/types.js b/web/src/config/d2p-extends/types.js new file mode 100644 index 0000000..aaf9622 --- /dev/null +++ b/web/src/config/d2p-extends/types.js @@ -0,0 +1,118 @@ +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 } } + }, + // 提交时,处理数据 + 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(',') + } + } + } +} diff --git a/web/src/install.js b/web/src/install.js index 9254a2f..0b895d7 100644 --- a/web/src/install.js +++ b/web/src/install.js @@ -15,7 +15,8 @@ import { import { request } from '@/api/service' import util from '@/libs/util' import XEUtils from 'xe-utils' -import { urlPrefix as deptPrefix } from '@/views/system/dept/' +import { urlPrefix as deptPrefix } from '@/views/system/dept/api' +import types from '@/config/d2p-extends/types' const uploadUrl = util.baseURL() + 'api/system/file/' /** @@ -163,20 +164,22 @@ Vue.use(D2pUploader, { action: uploadUrl, name: 'file', data: {}, // 上传附加参数 - headers: { - Authorization: 'JWT ' + util.cookies.get('token') + 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() + 'media/' + ret.data.data.url, key: option.data.key } + 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') selectType.component.props.color = 'auto' // 修改官方的字段类型,设置为支持自动染色 diff --git a/web/src/views/demo/page1/crud.js b/web/src/views/demo/page1/crud.js index 5919f81..b373b1d 100644 --- a/web/src/views/demo/page1/crud.js +++ b/web/src/views/demo/page1/crud.js @@ -92,26 +92,6 @@ export const crudOptions = (vm) => { span: 24 }, 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 - } - } } }, { @@ -132,26 +112,6 @@ export const crudOptions = (vm) => { span: 24 }, 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 - } - } } }, { diff --git a/web/src/views/system/fileList/crud.js b/web/src/views/system/fileList/crud.js index d987be9..b4f009c 100644 --- a/web/src/views/system/fileList/crud.js +++ b/web/src/views/system/fileList/crud.js @@ -1,5 +1,3 @@ -import util from '@/libs/util' - export const crudOptions = (vm) => { return { pageOptions: { @@ -92,11 +90,7 @@ export const crudOptions = (vm) => { search: { disabled: true }, - width: 220, - valueBuilder (row, key) { - console.log(row, key) - row.url = `${util.baseURL()}media/${row.url}` - } + width: 220 }, { title: '文件MD5', @@ -107,18 +101,7 @@ export const crudOptions = (vm) => { }, form: { 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: '备注', diff --git a/web/src/views/system/user/crud.js b/web/src/views/system/user/crud.js index ca46425..a105645 100644 --- a/web/src/views/system/user/crud.js +++ b/web/src/views/system/user/crud.js @@ -1,7 +1,6 @@ import { request } from '@/api/service' import { BUTTON_STATUS_BOOL } from '@/config/button' import { urlPrefix as deptPrefix } from '../dept/api' -import util from '@/libs/util' export const crudOptions = (vm) => { return { @@ -267,31 +266,11 @@ export const crudOptions = (vm) => { multiple: true, limit: 5 // 限制5个文件 }, - sizeLimit: 100 * 1024 // 不能超过限制 + sizeLimit: 500 * 1024 // 不能超过限制 }, span: 24 }, - 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 util.baseURL() + value - } - return value - } - } + helper: '限制文件大小不能超过500k' } }, { From b84a1d1aee899c14a90022ed0ec2405faddbf957 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BC=BA?= <1206709430@qq.com> Date: Tue, 26 Apr 2022 08:13:55 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BC=98=E5=8C=96:=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=A4=B4=E5=83=8F=E5=89=AA=E5=88=87=E5=9B=BE?= =?UTF-8?q?=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/config/d2p-extends/types.js | 15 --------------- web/src/views/system/user/crud.js | 8 ++++---- 2 files changed, 4 insertions(+), 19 deletions(-) diff --git a/web/src/config/d2p-extends/types.js b/web/src/config/d2p-extends/types.js index aaf9622..c4b0043 100644 --- a/web/src/config/d2p-extends/types.js +++ b/web/src/config/d2p-extends/types.js @@ -92,21 +92,6 @@ export default { view: { component: { props: { height: 100, width: 100 } } }, - // 提交时,处理数据 - 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] diff --git a/web/src/views/system/user/crud.js b/web/src/views/system/user/crud.js index a105645..0e9a97b 100644 --- a/web/src/views/system/user/crud.js +++ b/web/src/views/system/user/crud.js @@ -40,7 +40,7 @@ export const crudOptions = (vm) => { text: '', size: 'small', type: 'warning', - icon: 'el-icon-refresh-left', + icon: 'el-icon-key', show () { return vm.hasPermissions('ResetPwd') }, @@ -256,15 +256,15 @@ export const crudOptions = (vm) => { { title: '头像', key: 'avatar', - type: 'avatar-uploader', + type: 'avatar-cropper', width: 100, align: 'left', form: { component: { props: { elProps: { // 与el-uploader 配置一致 - multiple: true, - limit: 5 // 限制5个文件 + multiple: false, + limit: 1 // 限制5个文件 }, sizeLimit: 500 * 1024 // 不能超过限制 },