From 32dc5250916a883bcdf0de618266d02ece1b998f Mon Sep 17 00:00:00 2001 From: Moxun Date: Fri, 6 Mar 2020 20:32:09 +0800 Subject: [PATCH] 2.5dev (#81) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 同一界面内,多CRUD共存 * 解决多crud,对inject修改造成注入混乱,弃用Vue注入方式 * 自定义数据id字段名 * 以$options.cruds()方式实例化crud,避免多组件实例共享crud --- src/components/Crud/crud.js | 29 ++++++++++++++++++------- src/views/generator/index.vue | 7 +++--- src/views/mnt/app/index.vue | 8 ++++--- src/views/mnt/database/index.vue | 8 ++++--- src/views/mnt/deploy/index.vue | 9 +++++--- src/views/mnt/deployHistory/index.vue | 8 ++++--- src/views/mnt/server/index.vue | 8 ++++--- src/views/monitor/log/errorLog.vue | 7 +++--- src/views/monitor/log/index.vue | 7 +++--- src/views/monitor/online/index.vue | 7 +++--- src/views/monitor/server/index.vue | 7 +++--- src/views/system/dept/index.vue | 7 +++--- src/views/system/job/index.vue | 18 +++++++-------- src/views/system/menu/index.vue | 6 +++-- src/views/system/role/index.vue | 7 +++--- src/views/system/timing/index.vue | 7 +++--- src/views/system/user/index.vue | 7 +++--- src/views/tools/picture/index.vue | 7 +++--- src/views/tools/storage/local/index.vue | 7 +++--- src/views/tools/storage/qiniu/index.vue | 7 +++--- 20 files changed, 108 insertions(+), 70 deletions(-) diff --git a/src/components/Crud/crud.js b/src/components/Crud/crud.js index 0f0e7da..133f01e 100644 --- a/src/components/Crud/crud.js +++ b/src/components/Crud/crud.js @@ -593,15 +593,24 @@ function lookupCrud(vm, tag) { * crud主页 */ function presenter(crud) { + if (crud) { + console.warn('[CRUD warn]: ' + 'please use $options.cruds() { return CRUD(...) or [CRUD(...), ...] }') + } return { beforeCreate() { this.$crud = this.$crud || {} - if (this.$crud[crud.tag]) { - console.error('[CRUD error]: ' + 'crud with tag [' + crud.tag + ' is already exist') + let cruds = this.$options.cruds instanceof Function ? this.$options.cruds() : crud + if (!(cruds instanceof Array)) { + cruds = [cruds] } - this.$crud[crud.tag] = crud - this.crud = crud - crud.registerVM('presenter', this, 0) + cruds.forEach(ele => { + if (this.$crud[ele.tag]) { + console.error('[CRUD error]: ' + 'crud with tag [' + ele.tag + ' is already exist') + } + this.$crud[ele.tag] = ele + ele.registerVM('presenter', this, 0) + }) + this.crud = this.$crud['defalut'] || cruds.length > 0 ? cruds[0] : null }, data() { return { @@ -612,12 +621,16 @@ function presenter(crud) { parseTime }, created() { - if (crud.queryOnPresenterCreated) { - crud.toQuery() + for (const k in this.$crud) { + if (this.$crud[k].queryOnPresenterCreated) { + this.$crud[k].toQuery() + } } }, destroyed() { - crud.unregisterVM(this) + for (const k in this.$crud) { + this.$crud[k].unregisterVM(this) + } }, mounted() { const columns = [] diff --git a/src/views/generator/index.vue b/src/views/generator/index.vue index a6404db..9c7448e 100644 --- a/src/views/generator/index.vue +++ b/src/views/generator/index.vue @@ -63,12 +63,13 @@ import rrOperation from '@crud/RR.operation' import crudOperation from '@crud/CRUD.operation' import pagination from '@crud/Pagination' -// crud交由presenter持有 -const defaultCrud = CRUD({ url: 'api/generator/tables' }) export default { name: 'GeneratorIndex', components: { pagination, crudOperation, rrOperation }, - mixins: [presenter(defaultCrud), header()], + cruds() { + return CRUD({ url: 'api/generator/tables' }) + }, + mixins: [presenter(), header()], data() { return { syncLoading: false diff --git a/src/views/mnt/app/index.vue b/src/views/mnt/app/index.vue index 921ca12..75b36eb 100644 --- a/src/views/mnt/app/index.vue +++ b/src/views/mnt/app/index.vue @@ -95,13 +95,15 @@ import rrOperation from '@crud/RR.operation' import crudOperation from '@crud/CRUD.operation' import udOperation from '@crud/UD.operation' import pagination from '@crud/Pagination' -// crud交由presenter持有 -const defaultCrud = CRUD({ title: '应用', url: 'api/app', crudMethod: { ...crudApp }}) + const defaultForm = { id: null, name: null, port: 8080, uploadPath: '/opt/upload', deployPath: '/opt/app', backupPath: '/opt/backup', startScript: null, deployScript: null } export default { name: 'App', components: { pagination, crudOperation, rrOperation, udOperation }, - mixins: [presenter(defaultCrud), header(), form(defaultForm), crud()], + cruds() { + return CRUD({ title: '应用', url: 'api/app', crudMethod: { ...crudApp }}) + }, + mixins: [presenter(), header(), form(defaultForm), crud()], data() { return { currentRow: null, diff --git a/src/views/mnt/database/index.vue b/src/views/mnt/database/index.vue index 89faaec..fb31149 100644 --- a/src/views/mnt/database/index.vue +++ b/src/views/mnt/database/index.vue @@ -89,13 +89,15 @@ import rrOperation from '@crud/RR.operation' import crudOperation from '@crud/CRUD.operation' import udOperation from '@crud/UD.operation' import pagination from '@crud/Pagination' -// crud交由presenter持有 -const defaultCrud = CRUD({ title: '数据库', url: 'api/database', crudMethod: { ...crudDatabase }}) + const defaultForm = { id: null, name: null, jdbcUrl: 'jdbc:mysql://', userName: null, pwd: null } export default { name: 'DataBase', components: { eForm, pagination, crudOperation, rrOperation, udOperation }, - mixins: [presenter(defaultCrud), header(), form(defaultForm), crud()], + cruds() { + return CRUD({ title: '数据库', url: 'api/database', crudMethod: { ...crudDatabase }}) + }, + mixins: [presenter(), header(), form(defaultForm), crud()], data() { return { currentRow: {}, diff --git a/src/views/mnt/deploy/index.vue b/src/views/mnt/deploy/index.vue index 14f7017..c57a0e8 100644 --- a/src/views/mnt/deploy/index.vue +++ b/src/views/mnt/deploy/index.vue @@ -128,12 +128,15 @@ import rrOperation from '@crud/RR.operation' import crudOperation from '@crud/CRUD.operation' import udOperation from '@crud/UD.operation' import pagination from '@crud/Pagination' -// crud交由presenter持有 -const defaultCrud = CRUD({ title: '部署', url: 'api/deploy', crudMethod: { ...crudDeploy }}) + const defaultForm = { id: null, app: { id: null }, deploys: [] } export default { + name: 'Deploy', components: { dForm, fForm, pagination, crudOperation, rrOperation, udOperation }, - mixins: [presenter(defaultCrud), header(), form(defaultForm), crud()], + cruds() { + return CRUD({ title: '部署', url: 'api/deploy', crudMethod: { ...crudDeploy }}) + }, + mixins: [presenter(), header(), form(defaultForm), crud()], data() { return { currentRow: {}, selectIndex: '', appName: '', urlHistory: '', diff --git a/src/views/mnt/deployHistory/index.vue b/src/views/mnt/deployHistory/index.vue index c9cb61c..14c2d9a 100644 --- a/src/views/mnt/deployHistory/index.vue +++ b/src/views/mnt/deployHistory/index.vue @@ -61,12 +61,14 @@ import CRUD, { presenter, header } from '@crud/crud' import rrOperation from '@crud/RR.operation' import crudOperation from '@crud/CRUD.operation' import pagination from '@crud/Pagination' -// crud交由presenter持有 -const defaultCrud = CRUD({ title: '部署历史', url: 'api/deployHistory', crudMethod: { del }}) + export default { name: 'DeployHistory', components: { pagination, crudOperation, rrOperation }, - mixins: [presenter(defaultCrud), header()], + cruds() { + return CRUD({ title: '部署历史', url: 'api/deployHistory', crudMethod: { del }}) + }, + mixins: [presenter(), header()], data() { return { delLoading: false, diff --git a/src/views/mnt/server/index.vue b/src/views/mnt/server/index.vue index 3d1be0d..e19938f 100644 --- a/src/views/mnt/server/index.vue +++ b/src/views/mnt/server/index.vue @@ -81,13 +81,15 @@ import rrOperation from '@crud/RR.operation' import crudOperation from '@crud/CRUD.operation' import udOperation from '@crud/UD.operation' import pagination from '@crud/Pagination' -// crud交由presenter持有 -const defaultCrud = CRUD({ title: '服务器', url: 'api/serverDeploy', crudMethod: { ...crudServer }}) + const defaultForm = { id: null, name: null, ip: null, port: 22, account: 'root', password: null } export default { name: 'Server', components: { pagination, crudOperation, rrOperation, udOperation }, - mixins: [presenter(defaultCrud), header(), form(defaultForm), crud()], + cruds() { + return CRUD({ title: '服务器', url: 'api/serverDeploy', crudMethod: { ...crudServer }}) + }, + mixins: [presenter(), header(), form(defaultForm), crud()], data() { return { accountList: [], diff --git a/src/views/monitor/log/errorLog.vue b/src/views/monitor/log/errorLog.vue index fe473ed..30a7fb8 100644 --- a/src/views/monitor/log/errorLog.vue +++ b/src/views/monitor/log/errorLog.vue @@ -61,12 +61,13 @@ import CRUD, { presenter } from '@crud/crud' import crudOperation from '@crud/CRUD.operation' import pagination from '@crud/Pagination' -// crud交由presenter持有 -const defaultCrud = CRUD({ title: '异常日志', url: 'api/logs/error' }) export default { name: 'ErrorLog', components: { Search, crudOperation, pagination }, - mixins: [presenter(defaultCrud)], + cruds() { + return CRUD({ title: '异常日志', url: 'api/logs/error' }) + }, + mixins: [presenter()], data() { return { errorInfo: '', dialog: false diff --git a/src/views/monitor/log/index.vue b/src/views/monitor/log/index.vue index 323805b..15d70fe 100644 --- a/src/views/monitor/log/index.vue +++ b/src/views/monitor/log/index.vue @@ -60,12 +60,13 @@ import CRUD, { presenter } from '@crud/crud' import crudOperation from '@crud/CRUD.operation' import pagination from '@crud/Pagination' -// crud交由presenter持有 -const defaultCrud = CRUD({ title: '日志', url: 'api/logs' }) export default { name: 'Log', components: { Search, crudOperation, pagination }, - mixins: [presenter(defaultCrud)], + cruds() { + return CRUD({ title: '日志', url: 'api/logs' }) + }, + mixins: [presenter()], created() { this.crud.optShow = { add: false, diff --git a/src/views/monitor/online/index.vue b/src/views/monitor/online/index.vue index 11fcda1..2de95ad 100644 --- a/src/views/monitor/online/index.vue +++ b/src/views/monitor/online/index.vue @@ -64,12 +64,13 @@ import rrOperation from '@crud/RR.operation' import crudOperation from '@crud/CRUD.operation' import pagination from '@crud/Pagination' -// crud交由presenter持有 -const defaultCrud = CRUD({ url: 'auth/online', title: '在线用户' }) export default { name: 'OnlineUser', components: { pagination, crudOperation, rrOperation }, - mixins: [presenter(defaultCrud), header(), crud()], + cruds() { + return CRUD({ url: 'auth/online', title: '在线用户' }) + }, + mixins: [presenter(), header(), crud()], data() { return { delLoading: false, diff --git a/src/views/monitor/server/index.vue b/src/views/monitor/server/index.vue index 3f0b3d5..ca3f3a5 100644 --- a/src/views/monitor/server/index.vue +++ b/src/views/monitor/server/index.vue @@ -107,13 +107,14 @@ import crudOperation from '@crud/CRUD.operation' import udOperation from '@crud/UD.operation' import pagination from '@crud/Pagination' -// crud交由presenter持有 -const defaultCrud = CRUD({ title: '监控', url: 'api/server', sort: 'sort,asc', crudMethod: { ...crudServer }}) const defaultForm = { id: null, address: 'localhost', name: null, ip: null, port: 8777, state: null, cpuRate: null, cpuCore: null, memTotal: null, memUsed: null, diskTotal: null, diskUsed: null, swapTotal: null, swapUsed: null, sort: 999 } export default { name: 'ServerMonitor', components: { pagination, crudOperation, rrOperation, udOperation }, - mixins: [presenter(defaultCrud), header(), form(defaultForm), crud()], + cruds() { + return CRUD({ title: '监控', url: 'api/server', sort: 'sort,asc', crudMethod: { ...crudServer }}) + }, + mixins: [presenter(), header(), form(defaultForm), crud()], data() { return { permission: { diff --git a/src/views/system/dept/index.vue b/src/views/system/dept/index.vue index 2b92f1d..3fdd313 100644 --- a/src/views/system/dept/index.vue +++ b/src/views/system/dept/index.vue @@ -84,13 +84,14 @@ import rrOperation from '@crud/RR.operation' import crudOperation from '@crud/CRUD.operation' import udOperation from '@crud/UD.operation' -// crud交由presenter持有 -const defaultCrud = CRUD({ title: '部门', url: 'api/dept', crudMethod: { ...crudDept }}) const defaultForm = { id: null, name: null, pid: 1, enabled: 'true' } export default { name: 'Dept', components: { Treeselect, crudOperation, rrOperation, udOperation }, - mixins: [presenter(defaultCrud), header(), form(defaultForm), crud()], + cruds() { + return CRUD({ title: '部门', url: 'api/dept', crudMethod: { ...crudDept }}) + }, + mixins: [presenter(), header(), form(defaultForm), crud()], // 设置数据字典 dicts: ['dept_status'], data() { diff --git a/src/views/system/job/index.vue b/src/views/system/job/index.vue index e068619..d62ab4c 100644 --- a/src/views/system/job/index.vue +++ b/src/views/system/job/index.vue @@ -66,18 +66,18 @@ import crudOperation from '@crud/CRUD.operation' import pagination from '@crud/Pagination' import udOperation from '@crud/UD.operation' -// crud交由presenter持有 -const crud = CRUD({ - title: '岗位', - url: 'api/job', - sort: ['sort,asc', 'id,desc'], - crudMethod: { ...crudJob } -}) - export default { name: 'Job', components: { eHeader, eForm, crudOperation, pagination, udOperation }, - mixins: [presenter(crud)], + cruds() { + return CRUD({ + title: '岗位', + url: 'api/job', + sort: ['sort,asc', 'id,desc'], + crudMethod: { ...crudJob } + }) + }, + mixins: [presenter()], // 数据字典 dicts: ['job_status'], data() { diff --git a/src/views/system/menu/index.vue b/src/views/system/menu/index.vue index 3fd7eaf..213e87b 100644 --- a/src/views/system/menu/index.vue +++ b/src/views/system/menu/index.vue @@ -156,12 +156,14 @@ import crudOperation from '@crud/CRUD.operation' import udOperation from '@crud/UD.operation' // crud交由presenter持有 -const defaultCrud = CRUD({ title: '菜单', url: 'api/menus', crudMethod: { ...crudMenu }}) const defaultForm = { id: null, name: null, sort: 999, path: null, component: null, componentName: null, iframe: false, roles: [], pid: 0, icon: null, cache: false, hidden: false, type: 0, permission: null } export default { name: 'Menu', components: { Treeselect, IconSelect, crudOperation, rrOperation, udOperation }, - mixins: [presenter(defaultCrud), header(), form(defaultForm), crud()], + cruds() { + return CRUD({ title: '菜单', url: 'api/menus', crudMethod: { ...crudMenu }}) + }, + mixins: [presenter(), header(), form(defaultForm), crud()], data() { return { menus: [], diff --git a/src/views/system/role/index.vue b/src/views/system/role/index.vue index 3b7e274..38962cf 100644 --- a/src/views/system/role/index.vue +++ b/src/views/system/role/index.vue @@ -133,13 +133,14 @@ import pagination from '@crud/Pagination' import Treeselect from '@riophae/vue-treeselect' import '@riophae/vue-treeselect/dist/vue-treeselect.css' -// crud交由presenter持有 -const defaultCrud = CRUD({ title: '角色', url: 'api/roles', sort: 'level,asc', crudMethod: { ...crudRoles }}) const defaultForm = { id: null, name: null, depts: [], remark: null, dataScope: '全部', level: 3, permission: null } export default { name: 'Role', components: { Treeselect, pagination, crudOperation, rrOperation, udOperation }, - mixins: [presenter(defaultCrud), header(), form(defaultForm), crud()], + cruds() { + return CRUD({ title: '角色', url: 'api/roles', sort: 'level,asc', crudMethod: { ...crudRoles }}) + }, + mixins: [presenter(), header(), form(defaultForm), crud()], data() { return { defaultProps: { children: 'children', label: 'label' }, diff --git a/src/views/system/timing/index.vue b/src/views/system/timing/index.vue index eb35270..e01bbc5 100644 --- a/src/views/system/timing/index.vue +++ b/src/views/system/timing/index.vue @@ -117,13 +117,14 @@ import rrOperation from '@crud/RR.operation' import crudOperation from '@crud/CRUD.operation' import pagination from '@crud/Pagination' -// crud交由presenter持有 -const defaultCrud = CRUD({ title: '定时任务', url: 'api/jobs', crudMethod: { ...crudJob }}) const defaultForm = { id: null, jobName: null, beanName: null, methodName: null, params: null, cronExpression: null, isPause: false, remark: null } export default { name: 'Timing', components: { Log, pagination, crudOperation, rrOperation }, - mixins: [presenter(defaultCrud), header(), form(defaultForm), crud()], + cruds() { + return CRUD({ title: '定时任务', url: 'api/jobs', crudMethod: { ...crudJob }}) + }, + mixins: [presenter(), header(), form(defaultForm), crud()], data() { return { delLoading: false, diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue index 1d4c0f2..78ed191 100644 --- a/src/views/system/user/index.vue +++ b/src/views/system/user/index.vue @@ -209,13 +209,14 @@ import { mapGetters } from 'vuex' import '@riophae/vue-treeselect/dist/vue-treeselect.css' let userRoles = [] -// crud交由presenter持有 -const defaultCrud = CRUD({ title: '用户', url: 'api/users', crudMethod: { ...crudUser }}) const defaultForm = { id: null, username: null, nickName: null, sex: '男', email: null, enabled: 'false', roles: [], job: { id: null }, dept: { id: null }, phone: null } export default { name: 'User', components: { Treeselect, crudOperation, rrOperation, udOperation, pagination }, - mixins: [presenter(defaultCrud), header(), form(defaultForm), crud()], + cruds() { + return CRUD({ title: '用户', url: 'api/users', crudMethod: { ...crudUser }}) + }, + mixins: [presenter(), header(), form(defaultForm), crud()], // 数据字典 dicts: ['user_status'], data() { diff --git a/src/views/tools/picture/index.vue b/src/views/tools/picture/index.vue index 7ece3f8..39cbf36 100644 --- a/src/views/tools/picture/index.vue +++ b/src/views/tools/picture/index.vue @@ -102,12 +102,13 @@ import rrOperation from '@crud/RR.operation' import crudOperation from '@crud/CRUD.operation' import pagination from '@crud/Pagination' -// crud交由presenter持有 -const defaultCrud = CRUD({ title: '图片', url: 'api/pictures', crudMethod: { ...crudPic }}) export default { name: 'Pictures', components: { pagination, crudOperation, rrOperation }, - mixins: [presenter(defaultCrud), header(), crud()], + cruds() { + return CRUD({ title: '图片', url: 'api/pictures', crudMethod: { ...crudPic }}) + }, + mixins: [presenter(), header(), crud()], data() { return { dialog: false, diff --git a/src/views/tools/storage/local/index.vue b/src/views/tools/storage/local/index.vue index 9058f28..7dbed91 100644 --- a/src/views/tools/storage/local/index.vue +++ b/src/views/tools/storage/local/index.vue @@ -124,12 +124,13 @@ import rrOperation from '@crud/RR.operation' import crudOperation from '@crud/CRUD.operation' import pagination from '@crud/Pagination' -// crud交由presenter持有 -const defaultCrud = CRUD({ title: '文件', url: 'api/localStorage', crudMethod: { ...crudFile }}) const defaultForm = { id: null, name: '' } export default { components: { pagination, crudOperation, rrOperation }, - mixins: [presenter(defaultCrud), header(), form(defaultForm), crud()], + cruds() { + return CRUD({ title: '文件', url: 'api/localStorage', crudMethod: { ...crudFile }}) + }, + mixins: [presenter(), header(), form(defaultForm), crud()], data() { return { delAllLoading: false, diff --git a/src/views/tools/storage/qiniu/index.vue b/src/views/tools/storage/qiniu/index.vue index aa6ec13..9f22d52 100644 --- a/src/views/tools/storage/qiniu/index.vue +++ b/src/views/tools/storage/qiniu/index.vue @@ -89,11 +89,12 @@ import rrOperation from '@crud/RR.operation' import crudOperation from '@crud/CRUD.operation' import pagination from '@crud/Pagination' -// crud交由presenter持有 -const defaultCrud = CRUD({ title: '七牛云文件', url: 'api/qiNiuContent', crudMethod: { ...crudQiNiu }}) export default { components: { eForm, pagination, crudOperation, rrOperation }, - mixins: [presenter(defaultCrud), header(), crud()], + cruds() { + return CRUD({ title: '七牛云文件', url: 'api/qiNiuContent', crudMethod: { ...crudQiNiu }}) + }, + mixins: [presenter(), header(), crud()], data() { return { permission: {