From 231437fae11435864987262c6f8f28daeda7b22d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BC=BA?= <1206709430@qq.com> Date: Wed, 25 May 2022 15:25:59 +0800 Subject: [PATCH 01/16] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=8F=98=E5=8C=96:=20?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E6=A1=86=E6=9E=B6=E6=80=A7?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/components/importExcel/index.vue | 2 +- web/src/install.js | 24 +++++++++++++++++++----- web/src/plugin/d2admin/index.js | 2 -- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/web/src/components/importExcel/index.vue b/web/src/components/importExcel/index.vue index c806624..6c4c646 100644 --- a/web/src/components/importExcel/index.vue +++ b/web/src/components/importExcel/index.vue @@ -59,7 +59,7 @@ export default { // 设置上传的请求头部 headers: { Authorization: 'JWT ' + util.cookies.get('token') }, // 上传的地址 - url: process.env.VUE_APP_API + '/api/system/file/' + url: util.baseURL() + '/api/system/file/' } } }, diff --git a/web/src/install.js b/web/src/install.js index 9b48ce3..4219c02 100644 --- a/web/src/install.js +++ b/web/src/install.js @@ -18,8 +18,7 @@ import XEUtils from 'xe-utils' import store from '@/store/index' import { urlPrefix as deptPrefix } from '@/views/system/dept/api' import types from '@/config/d2p-extends/types' -import { checkPlugins } from '@/views/plugins' -const uploadUrl = util.baseURL() + 'api/system/file/' +import { checkPlugins, plugins } from '@/views/plugins' /** // vxe0 @@ -32,7 +31,8 @@ const uploadUrl = util.baseURL() + 'api/system/file/' // 按如下重命名引入可与官方版共存,index.vue中标签用使用加强版 // 不传name,则d2CrudX的标签仍为,不可与官方版共存 Vue.use(d2CrudX, { name: 'd2-crud-x' }) - +// 注册dvadmin插件 +Vue.use(plugins) // // 官方版【此处为演示与官方版共存而引入,全新项目中可以用d2-crud-x完全替代官方版】 // Vue.use(d2Crud) /** @@ -167,7 +167,7 @@ Vue.use(D2pUploader, { domain: 'http://d2p.file.veryreader.com' }, form: { - action: uploadUrl, + action: util.baseURL() + 'api/system/file/', name: 'file', data: {}, // 上传附加参数 headers () { @@ -180,7 +180,7 @@ Vue.use(D2pUploader, { if (ret.data === null || ret.data === '') { throw new Error('上传失败') } - return { url: util.baseURL() + ret.data.url, key: option.data.key } + return { url: util.baseURL() + ret.data.url, key: option.data.key, id: ret.data.id } }, withCredentials: false // 是否带cookie } @@ -368,6 +368,20 @@ Vue.prototype.commonEndColumns = function (param = {}) { title: '创建时间', key: 'create_datetime', width: 160, + search: { + disabled: !showData.create_datetime.showForm, + width: 240, + component: { // 查询框组件配置,默认根据form配置生成 + name: 'el-date-picker', + props: { + type: 'daterange', + 'range-separator': '至', + 'start-placeholder': '开始', + 'end-placeholder': '结束', + valueFormat: 'yyyy-MM-dd' + } + } + }, show: showData.create_datetime.showTable, type: 'datetime', sortable: true, diff --git a/web/src/plugin/d2admin/index.js b/web/src/plugin/d2admin/index.js index e2f20b5..311c347 100644 --- a/web/src/plugin/d2admin/index.js +++ b/web/src/plugin/d2admin/index.js @@ -16,7 +16,6 @@ import pluginError from '@/plugin/error' import pluginLog from '@/plugin/log' import pluginOpen from '@/plugin/open' import tableSelector from '@/components/table-selector/index' -import { plugins } from '@/views/plugins/index.js' export default { async install (Vue, options) { // 设置为 false 以阻止 vue 在启动时生成生产提示 @@ -40,6 +39,5 @@ export default { Vue.use(pluginLog) Vue.use(pluginOpen) Vue.use(tableSelector) - Vue.use(plugins) } } From a0ba9644781aaa2159b3a3dae9fd3d5b7859e2d6 Mon Sep 17 00:00:00 2001 From: Angelo Date: Wed, 25 May 2022 17:30:05 +0800 Subject: [PATCH 02/16] fix(dict): fixed system dictionary data's sync error --- backend/dvadmin/system/models.py | 5 +++ web/src/views/system/dept/crud.js | 1 + web/src/views/system/dictionary/index.vue | 39 +++++++++++-------- .../system/dictionary/subDictionary/index.vue | 7 +++- web/src/views/system/menu/crud.js | 4 +- 5 files changed, 35 insertions(+), 21 deletions(-) diff --git a/backend/dvadmin/system/models.py b/backend/dvadmin/system/models.py index b54ac27..a162bb1 100644 --- a/backend/dvadmin/system/models.py +++ b/backend/dvadmin/system/models.py @@ -320,6 +320,11 @@ class SystemConfig(CoreModel): def save(self, force_insert=False, force_update=False, using=None, update_fields=None): super().save(force_insert, force_update, using, update_fields) dispatch.refresh_system_config() # 有更新则刷新系统配置 + + def delete(self, using=None, keep_parents=False): + res = super().delete(using, keep_parents) + dispatch.refresh_dictionary() + return res class LoginLog(CoreModel): diff --git a/web/src/views/system/dept/crud.js b/web/src/views/system/dept/crud.js index 232386c..7357049 100644 --- a/web/src/views/system/dept/crud.js +++ b/web/src/views/system/dept/crud.js @@ -7,6 +7,7 @@ export const crudOptions = (vm) => { }, options: { tableType: 'vxe-table', + stripe: false, rowKey: true, // 必须设置,true or false rowId: 'id', height: '100%', // 表格高度100%, 使用toolbar必须设置 diff --git a/web/src/views/system/dictionary/index.vue b/web/src/views/system/dictionary/index.vue index 59872b6..8054851 100644 --- a/web/src/views/system/dictionary/index.vue +++ b/web/src/views/system/dictionary/index.vue @@ -1,15 +1,12 @@ - - + - - - 字典列表 - {{dictionaryRow.label}} - - + + + 字典列表 + {{ + dictionaryRow.label + }} + + + @@ -80,6 +81,10 @@ export default { dictionaryConfigure (scope) { this.drawer = true this.dictionaryRow = scope.row + }, + doAfterRowChange (row) { + this.doRefresh({ from: 'afterRowChange' }) + this.$store.dispatch('d2admin/dictionary/load') } } } diff --git a/web/src/views/system/dictionary/subDictionary/index.vue b/web/src/views/system/dictionary/subDictionary/index.vue index 649c068..684cd6b 100644 --- a/web/src/views/system/dictionary/subDictionary/index.vue +++ b/web/src/views/system/dictionary/subDictionary/index.vue @@ -44,8 +44,7 @@ export default { } }, data () { - return { - } + return {} }, methods: { getCrudOptions () { @@ -70,6 +69,10 @@ export default { }, delRequest (row) { return api.DelObj(row.id) + }, + doAfterRowChange (row) { + this.doRefresh({ from: 'afterRowChange' }) + this.$store.dispatch('d2admin/dictionary/load') } } } diff --git a/web/src/views/system/menu/crud.js b/web/src/views/system/menu/crud.js index 956c58b..2bbe558 100644 --- a/web/src/views/system/menu/crud.js +++ b/web/src/views/system/menu/crud.js @@ -170,7 +170,7 @@ export const crudOptions = (vm) => { } } }, - width: 180, + minWidth: 180, type: 'input', form: { rules: [ // 表单校验规则 @@ -389,7 +389,7 @@ export const crudOptions = (vm) => { search: { disabled: false }, - width: 50, + width: 60, type: 'radio', dict: { data: vm.dictionary('button_whether_bool') From d4e0563eb14e79218c86a47c41bda8960e8deebc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BC=BA?= <1206709430@qq.com> Date: Wed, 25 May 2022 17:41:30 +0800 Subject: [PATCH 03/16] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=8F=98=E5=8C=96:=20?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E6=97=B6=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/components/importExcel/index.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/components/importExcel/index.vue b/web/src/components/importExcel/index.vue index 6c4c646..5c85c81 100644 --- a/web/src/components/importExcel/index.vue +++ b/web/src/components/importExcel/index.vue @@ -59,7 +59,7 @@ export default { // 设置上传的请求头部 headers: { Authorization: 'JWT ' + util.cookies.get('token') }, // 上传的地址 - url: util.baseURL() + '/api/system/file/' + url: util.baseURL() + 'api/system/file/' } } }, From cdb07c5c238083d3548e8584734f1458c87b88e7 Mon Sep 17 00:00:00 2001 From: Angelo Date: Wed, 25 May 2022 19:27:36 +0800 Subject: [PATCH 04/16] fix(system.model): fixed Dictionary/SystemConfig model's delete method --- backend/dvadmin/system/models.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/backend/dvadmin/system/models.py b/backend/dvadmin/system/models.py index a162bb1..396296f 100644 --- a/backend/dvadmin/system/models.py +++ b/backend/dvadmin/system/models.py @@ -187,6 +187,11 @@ class Dictionary(CoreModel): def save(self, force_insert=False, force_update=False, using=None, update_fields=None): super().save(force_insert, force_update, using, update_fields) dispatch.refresh_dictionary() # 有更新则刷新字典配置 + + def delete(self, using=None, keep_parents=False): + res = super().delete(using, keep_parents) + dispatch.refresh_dictionary() + return res class OperationLog(CoreModel): @@ -323,7 +328,7 @@ class SystemConfig(CoreModel): def delete(self, using=None, keep_parents=False): res = super().delete(using, keep_parents) - dispatch.refresh_dictionary() + dispatch.refresh_system_config() return res From 131e73377ca15bbb1a26b124fbda57d561cbc4a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BC=BA?= <1206709430@qq.com> Date: Fri, 27 May 2022 01:25:29 +0800 Subject: [PATCH 05/16] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=8F=98=E5=8C=96:=20?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=AF=BC=E5=87=BA=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/dvadmin/utils/import_export_mixin.py | 2 -- backend/requirements.txt | 2 +- web/src/api/service.js | 2 +- web/src/components/importExcel/index.vue | 2 +- 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/backend/dvadmin/utils/import_export_mixin.py b/backend/dvadmin/utils/import_export_mixin.py index 66c6684..ee8cfdb 100644 --- a/backend/dvadmin/utils/import_export_mixin.py +++ b/backend/dvadmin/utils/import_export_mixin.py @@ -65,9 +65,7 @@ class ImportSerializerMixin: for ele in data: # 获取 unique 字段 filter_dic = {i: ele.get(i) for i in list(set(self.import_field_dict.keys()) & set(unique_list))} - print(11, ele) instance = filter_dic and queryset.filter(**filter_dic).first() - print(22, instance) if instance and not updateSupport: continue if not filter_dic: diff --git a/backend/requirements.txt b/backend/requirements.txt index b7f8dc0..497fa6c 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -4,7 +4,7 @@ chardet==4.0.0 coreapi==2.3.3 coreschema==0.0.4 Django==3.2.3 -django-comment-migrate==0.1.1 +django-comment-migrate==0.1.5 django-cors-headers==3.10.1 django-filter==21.1 django-ranged-response==0.2.0 diff --git a/web/src/api/service.js b/web/src/api/service.js index 381eaa5..4262a4c 100644 --- a/web/src/api/service.js +++ b/web/src/api/service.js @@ -42,7 +42,7 @@ export function getErrorMessage (msg) { function createService () { // 创建一个 axios 实例 const service = axios.create({ - baseURL: process.env.VUE_APP_API_URL, + baseURL: util.baseURL(), timeout: 20000, paramsSerializer: (params) => qs.stringify(params, { indices: false }) }) diff --git a/web/src/components/importExcel/index.vue b/web/src/components/importExcel/index.vue index 5c85c81..118e77b 100644 --- a/web/src/components/importExcel/index.vue +++ b/web/src/components/importExcel/index.vue @@ -78,7 +78,7 @@ export default { /** 下载模板操作 */ importTemplate () { downloadFile({ - url: process.env.VUE_APP_API + this.importApi, + url: util.baseURL() + this.importApi, params: {}, method: 'get' }) From 718a3ba7844978751a44f5e13d7a5a31ce8dc49f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BC=BA?= <1206709430@qq.com> Date: Fri, 27 May 2022 03:56:03 +0800 Subject: [PATCH 06/16] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=8F=98=E5=8C=96:=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E6=88=96?= =?UTF-8?q?=E5=9B=BE=E7=89=87=EF=BC=8C=E8=BF=9B=E8=A1=8C=E7=BB=84=E8=A3=85?= =?UTF-8?q?=E5=9C=B0=E5=9D=80=EF=BC=8C=E7=BA=A0=E6=AD=A3=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/config/d2p-extends/types.js | 33 +++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/web/src/config/d2p-extends/types.js b/web/src/config/d2p-extends/types.js index 35287e7..1488415 100644 --- a/web/src/config/d2p-extends/types.js +++ b/web/src/config/d2p-extends/types.js @@ -1,3 +1,4 @@ +import util from '@/libs/util.js' export default { 'image-uploader': { form: { component: { name: 'd2p-file-uploader', props: { elProps: { listType: 'picture-card', accept: '.png,.jpeg,.jpg,.ico,.bmp,.gif' } } } }, @@ -26,6 +27,14 @@ export default { const value = row[col.key] if (value != null && value) { row[col.key] = value.split(',') + // 进行组装地址,纠正地址 + row[col.key].map((val, index) => { + if (val.startsWith('/')) { + row[col.key][index] = util.baseURL() + val.slice(1) + } else { + row[col.key][index] = !val.startsWith('http') ? util.baseURL() + val : val + } + }) } } }, @@ -56,6 +65,14 @@ export default { const value = row[col.key] if (value != null && value) { row[col.key] = value.split(',') + // 进行组装地址,纠正地址 + row[col.key].map((val, index) => { + if (val.startsWith('/')) { + row[col.key][index] = util.baseURL() + val.slice(1) + } else { + row[col.key][index] = !val.startsWith('http') ? util.baseURL() + val : val + } + }) } } }, @@ -82,6 +99,14 @@ export default { const value = row[col.key] if (value != null && value) { row[col.key] = value.split(',') + // 进行组装地址,纠正地址 + row[col.key].map((val, index) => { + if (val.startsWith('/')) { + row[col.key][index] = util.baseURL() + val.slice(1) + } else { + row[col.key][index] = !val.startsWith('http') ? util.baseURL() + val : val + } + }) } } }, @@ -112,6 +137,14 @@ export default { const value = row[col.key] if (value != null && value) { row[col.key] = value.split(',') + // 进行组装地址,纠正地址 + row[col.key].map((val, index) => { + if (val.startsWith('/')) { + row[col.key][index] = util.baseURL() + val.slice(1) + } else { + row[col.key][index] = !val.startsWith('http') ? util.baseURL() + val : val + } + }) } } } From 9e5638bea36dd989d95e3b33d8e98d8cdc2bd93b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BC=BA?= <1206709430@qq.com> Date: Fri, 27 May 2022 04:11:30 +0800 Subject: [PATCH 07/16] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=8F=98=E5=8C=96:=20p?= =?UTF-8?q?ip=20=E6=9B=BF=E6=8D=A2=E6=88=90=E6=B8=85=E5=8D=8E=E9=95=9C?= =?UTF-8?q?=E5=83=8F=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker_env/celery/Dockerfile | 2 +- docker_env/django/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker_env/celery/Dockerfile b/docker_env/celery/Dockerfile index 394a108..e233371 100644 --- a/docker_env/celery/Dockerfile +++ b/docker_env/celery/Dockerfile @@ -2,6 +2,6 @@ FROM registry.cn-zhangjiakou.aliyuncs.com/dvadmin-pro/python38-base-backend:late WORKDIR /backend COPY ./backend/ . RUN awk 'BEGIN { cmd="cp -i ./conf/env.example.py ./conf/env.py "; print "n" |cmd; }' -RUN python3 -m pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt +RUN python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ -r requirements.txt CMD ["celery", "-A", "application", "worker", "-B", "--loglevel=info"] diff --git a/docker_env/django/Dockerfile b/docker_env/django/Dockerfile index 8fa0065..78547c7 100644 --- a/docker_env/django/Dockerfile +++ b/docker_env/django/Dockerfile @@ -2,5 +2,5 @@ FROM registry.cn-zhangjiakou.aliyuncs.com/dvadmin-pro/python38-base-backend:late WORKDIR /backend COPY ./backend/ . RUN awk 'BEGIN { cmd="cp -i ./conf/env.example.py ./conf/env.py "; print "n" |cmd; }' -RUN python3 -m pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt +RUN python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ -r requirements.txt CMD ["daphne","-b","0.0.0.0","-p","8000","application.asgi:application"] From 7cf8aca29a40fc3c66a01e97df6fa7e998e8af32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BC=BA?= <1206709430@qq.com> Date: Sat, 28 May 2022 09:56:22 +0800 Subject: [PATCH 08/16] =?UTF-8?q?=E4=BF=AE=E5=A4=8DBUG:=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E7=B3=BB=E7=BB=9F=E9=85=8D=E7=BD=AE=E5=9C=A8=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E9=A1=B5=E5=88=9D=E5=A7=8B=E4=BC=9A=E4=B8=BA=E7=A9=BA?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/application/dispatch.py | 4 ++-- .../store/modules/d2admin/modules/settings.js | 13 +++++++++- web/src/views/system/login/base.vue | 24 +++++++++++-------- 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/backend/application/dispatch.py b/backend/application/dispatch.py index 55c715e..ae77479 100644 --- a/backend/application/dispatch.py +++ b/backend/application/dispatch.py @@ -1,9 +1,9 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- from django.conf import settings -from django.db import ProgrammingError from django.db import connection + def is_tenants_mode(): """ 判断是否为租户模式 @@ -35,7 +35,7 @@ def _get_all_system_config(): system_config_obj = SystemConfig.objects.filter(status=True, parent_id__isnull=False).values( 'parent__key', 'key', 'value', 'form_item_type').order_by('sort') for system_config in system_config_obj: - value = system_config.get('value') or '' + value = system_config.get('value', '') if value and system_config.get('form_item_type') == 7: value = value[0].get('url') data[f"{system_config.get('parent__key')}.{system_config.get('key')}"] = value diff --git a/web/src/store/modules/d2admin/modules/settings.js b/web/src/store/modules/d2admin/modules/settings.js index cd01f1d..6953a94 100644 --- a/web/src/store/modules/d2admin/modules/settings.js +++ b/web/src/store/modules/d2admin/modules/settings.js @@ -35,12 +35,13 @@ export default { */ async load ({ state, dispatch, commit }) { // store 赋值 - state.data = await dispatch('d2admin/db/get', { + const data = await dispatch('d2admin/db/get', { dbName: 'sys', path: 'settings.init', defaultValue: {}, user: true }, { root: true }) + commit('set', data) } }, mutations: { @@ -52,6 +53,16 @@ export default { */ async get (state, key, value) { return state[key] + }, + /** + * @description 赋值系统配置 + * @param {Object} state state + * @param {Object} value active + */ + async set (state, value) { + state.data = value + state.keepRecord = value['login.keep_record'] + return state.data } } } diff --git a/web/src/views/system/login/base.vue b/web/src/views/system/login/base.vue index f5031eb..b6d7f42 100644 --- a/web/src/views/system/login/base.vue +++ b/web/src/views/system/login/base.vue @@ -3,7 +3,7 @@