From b02508ef19546c58220dc3e21fdf6a964cdc12f9 Mon Sep 17 00:00:00 2001 From: jym503558564 <503558564@qq.com> Date: Wed, 8 Apr 2020 19:37:20 +0800 Subject: [PATCH 01/15] =?UTF-8?q?[Update]=20=E4=BF=AE=E6=94=B9=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E5=88=97=E8=A1=A8=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../el-data-table/el-data-table.vue | 1 + src/i18n/langs/cn.js | 8 +- src/views/jobcenter/TaskList.vue | 83 ++++++++++++------- 3 files changed, 56 insertions(+), 36 deletions(-) diff --git a/src/components/DataTable/compenents/el-data-table/el-data-table.vue b/src/components/DataTable/compenents/el-data-table/el-data-table.vue index 74d78fd45..efe36b50a 100644 --- a/src/components/DataTable/compenents/el-data-table/el-data-table.vue +++ b/src/components/DataTable/compenents/el-data-table/el-data-table.vue @@ -910,6 +910,7 @@ export default { } this.data = data + console.log(this.data) // 树形结构逻辑 if (this.isTree) { diff --git a/src/i18n/langs/cn.js b/src/i18n/langs/cn.js index fc12efae1..28ec59499 100644 --- a/src/i18n/langs/cn.js +++ b/src/i18n/langs/cn.js @@ -384,10 +384,10 @@ const cn = { }, jobcenter: { 'RunTimes': '执行次数', - 'hosts': '主机', - 'success': '成功', - 'date': '日期', - 'time': '时间', + 'Hosts': '主机', + 'Success': '成功', + 'Date': '日期', + 'Time': '时间', 'run': '执行' }, tickets: { diff --git a/src/views/jobcenter/TaskList.vue b/src/views/jobcenter/TaskList.vue index 432e9bdaf..1946064de 100644 --- a/src/views/jobcenter/TaskList.vue +++ b/src/views/jobcenter/TaskList.vue @@ -3,8 +3,9 @@ + + diff --git a/src/components/ListTable/formatters/index.js b/src/components/ListTable/formatters/index.js index 00b5c18fc..d23db4cd5 100644 --- a/src/components/ListTable/formatters/index.js +++ b/src/components/ListTable/formatters/index.js @@ -2,4 +2,4 @@ export { default as DetailFormatter } from './DetailFormatter' export { default as DisplayFormatter } from './DisplayFormatter' export { default as BooleanFormatter } from './ChoicesFormatter' export { default as ActionsFormatter } from './ActionsFormatter' - +export { default as ExpandPreFormatter } from './ExpandPreFormatter' diff --git a/src/layout/components/GenericCreateUpdatePage/index.vue b/src/layout/components/GenericCreateUpdatePage/index.vue index 35498a75b..a8001c9b9 100644 --- a/src/layout/components/GenericCreateUpdatePage/index.vue +++ b/src/layout/components/GenericCreateUpdatePage/index.vue @@ -1,10 +1,7 @@ @@ -40,27 +37,45 @@ export default { default: null } }, - mounted() { - console.log('generic', this.$attrs) - console.log(this.fields) + data() { + return { + } + }, + computed: { }, methods: { - handleSubmit(values) { + getFormRef(comp) { + if (comp.$refs.form) { + return this.getFormRef(comp.$refs.form) + } + return comp + }, + handleSubmit(values, form) { let handler = this.onSubmit || this.defaultOnSubmit handler = handler.bind(this) + const fields = form.$refs.elForm.fields console.log('submit', values) - return handler(values) + console.log('form.fields', fields) + const field = fields[0] + field.error = '滴滴滴滴滴多滴滴滴' + return handler(values, form) }, - defaultOnSubmit(validValues) { - this.$axios.post(this.url, validValues).then( - () => { - const msg = this.$tc('Create success') - this.$message.success(msg) - setTimeout(() => { - this.$router.push({ name: 'UserList' }) - }, 500) + defaultOnSubmit(validValues, form) { + this.$axios.post(this.url, validValues).then(() => { + const msg = this.$tc('Create success') + this.$message.success(msg) + setTimeout(() => { + this.$router.push({ name: 'UserList' }) + }, 500) + }).catch(error => { + console.log(form) + const response = error.response + const data = response.data + if (response.status === 400) { + this.errors.name = '你报错了滴滴滴' + console.log(data) } - ) + }) } } } diff --git a/src/utils/request.js b/src/utils/request.js index e2261db4a..cc3000b44 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -53,37 +53,34 @@ service.interceptors.response.use( const res = response.data // if the custom code is not 20000, it is judged as an error. - if (response.status < 200 || response.status > 300) { + if (response.status >= 200 && response.status < 400) { + if (response.config.raw === 1) { + return response + } + return res + } else if (response.status === 50008 || response.status === 50012 || response.status === 50014) { + MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', { + confirmButtonText: 'Re-Login', + cancelButtonText: 'Cancel', + type: 'warning' + }).then(() => { + store.dispatch('user/resetToken').then(() => { + location.reload() + }) + }) + } else if (response.status === 400) { + console.log('status is 400') + return Promise.reject(res || 'Error') + } else { Message({ message: res.message || res.error || 'Error', type: 'error', duration: 5 * 1000 }) - - // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired; - // 自定义错误码 - if (response.status === 50008 || response.status === 50012 || response.status === 50014) { - // to re-login - MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', { - confirmButtonText: 'Re-Login', - cancelButtonText: 'Cancel', - type: 'warning' - }).then(() => { - store.dispatch('user/resetToken').then(() => { - location.reload() - }) - }) - } return Promise.reject(new Error(res.message || 'Error')) - } else { - if (response.config.raw === 1) { - return response - } - return res } }, error => { - console.log('err' + error) // for debug Message({ message: error.message, type: 'error', diff --git a/src/views/users/UserCreateUpdate.vue b/src/views/users/UserCreateUpdate.vue index 17c8dce4b..a0aa756c2 100644 --- a/src/views/users/UserCreateUpdate.vue +++ b/src/views/users/UserCreateUpdate.vue @@ -1,10 +1,5 @@ From 95a373ae68408fc853b0b54fe21fc447c6271ef5 Mon Sep 17 00:00:00 2001 From: Eric Date: Thu, 9 Apr 2020 10:56:17 +0800 Subject: [PATCH 10/15] command list view --- .../formatters/OutputExpandFormatter.vue | 21 +++++++ src/views/sessions/CommandList.vue | 57 ++++++++----------- 2 files changed, 45 insertions(+), 33 deletions(-) create mode 100644 src/components/ListTable/formatters/OutputExpandFormatter.vue diff --git a/src/components/ListTable/formatters/OutputExpandFormatter.vue b/src/components/ListTable/formatters/OutputExpandFormatter.vue new file mode 100644 index 000000000..1594ff04f --- /dev/null +++ b/src/components/ListTable/formatters/OutputExpandFormatter.vue @@ -0,0 +1,21 @@ + + + + + diff --git a/src/views/sessions/CommandList.vue b/src/views/sessions/CommandList.vue index c3544ff95..92bcf4400 100644 --- a/src/views/sessions/CommandList.vue +++ b/src/views/sessions/CommandList.vue @@ -4,6 +4,8 @@ + + diff --git a/src/components/ListTable/formatters/index.js b/src/components/ListTable/formatters/index.js index d92f9ba0f..3af4df17e 100644 --- a/src/components/ListTable/formatters/index.js +++ b/src/components/ListTable/formatters/index.js @@ -4,3 +4,5 @@ export { default as BooleanFormatter } from './ChoicesFormatter' export { default as ActionsFormatter } from './ActionsFormatter' export { default as ExpandPreFormatter } from './ExpandPreFormatter' export { default as LengthFormatter } from './LengthFormatter' +export { default as RouterFormatter } from './RouterFormatter' +export { default as OutputExpandFormatter } from './OutputExpandFormatter' diff --git a/src/i18n/langs/cn.js b/src/i18n/langs/cn.js index 28ec59499..572729fa0 100644 --- a/src/i18n/langs/cn.js +++ b/src/i18n/langs/cn.js @@ -87,6 +87,7 @@ const cn = { 'Sessions': '会话管理', 'SessionOnline': '在线会话', 'SessionOffline': '历史会话', + 'SessionDetail': '会话详情', 'Commands': '命令记录', 'WebTerminal': 'Web终端', 'FileManager': '文件管理', @@ -380,7 +381,8 @@ const cn = { 'active': '激活中', 'alive': '在线', 'StorageConfiguration': '存储配置', - 'join': '加入' + 'join': '加入', + 'goto': '转到' }, jobcenter: { 'RunTimes': '执行次数', diff --git a/src/i18n/langs/en.js b/src/i18n/langs/en.js index 1c8d7d64c..5359545ef 100644 --- a/src/i18n/langs/en.js +++ b/src/i18n/langs/en.js @@ -18,7 +18,11 @@ const en = { 'assets': 'Assets', 'applications': 'Applications', 'perms': 'Perms', - 'sessions': 'Sessions', + 'Sessions': 'Sessions', + 'SessionOnline': 'Session Online', + 'SessionOffline': 'Session Offline', + 'SessionDetail': 'Session Detail', + 'Goto': 'Goto', 'jobcenter': 'Job Center' }, users: { @@ -289,7 +293,8 @@ const en = { 'terminate_session': 'Terminate session', 'confirm': 'Confirm', 'commands': 'Commands', - 'join': 'join' + 'join': 'join', + 'goto': 'Goto' }, setting: { 'setting': 'System Setting', diff --git a/src/router/index.js b/src/router/index.js index f2d37a8be..b946eb853 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -274,6 +274,13 @@ export const constantRoutes = [ component: () => import('@/views/sessions/CommandList'), meta: { title: 'Commands' } }, + { + path: 'sessions/:id', + name: 'SessionDetail', + component: () => import('@/views/sessions/SessionDetail'), + meta: { title: 'SessionDetail' }, + hidden: true + }, { path: 'luna', name: 'WebTerminal', diff --git a/src/views/sessions/CommandList.vue b/src/views/sessions/CommandList.vue index 92bcf4400..48c6198b7 100644 --- a/src/views/sessions/CommandList.vue +++ b/src/views/sessions/CommandList.vue @@ -5,7 +5,7 @@ + + diff --git a/src/views/sessions/SessionOfflineList.vue b/src/views/sessions/SessionOfflineList.vue index a95a88080..a422fd538 100644 --- a/src/views/sessions/SessionOfflineList.vue +++ b/src/views/sessions/SessionOfflineList.vue @@ -22,8 +22,10 @@ export default { ], columnsMeta: { index: { - type: 'index', - label: this.$t('sessions.id') + label: this.$t('sessions.id'), + formatter: function(row, column, cellValue, index) { + return { index + 1} + } }, command_amount: { label: this.$t('sessions.command') diff --git a/src/views/sessions/SessionOnlineList.vue b/src/views/sessions/SessionOnlineList.vue index 9facf05a0..fc12c2ef4 100644 --- a/src/views/sessions/SessionOnlineList.vue +++ b/src/views/sessions/SessionOnlineList.vue @@ -22,8 +22,10 @@ export default { ], columnsMeta: { index: { - type: 'index', - label: this.$t('sessions.id') + label: this.$t('sessions.id'), + formatter: function(row, column, cellValue, index) { + return { index + 1} + } }, command_amount: { label: this.$t('sessions.command') From f16554bd8073e77760782d6a84bff9a56fcf93bd Mon Sep 17 00:00:00 2001 From: ibuler Date: Thu, 9 Apr 2020 19:37:02 +0800 Subject: [PATCH 12/15] =?UTF-8?q?[Update]=20=E8=B0=83=E6=95=B4ui?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/AutoDataForm/index.vue | 28 ++++++++--- src/components/AutoDataTable/index.vue | 2 +- src/components/ListTable/formatters/index.js | 38 ++++++++++++--- src/i18n/langs/cn.js | 4 +- .../GenericCreateUpdatePage/index.vue | 44 ++++++++++++++++-- src/router/index.js | 4 +- src/styles/element-ui.scss | 26 +++++++++++ src/styles/index.scss | 1 - src/views/users/UserCreateUpdate.vue | 46 ++++++++++--------- src/views/users/UserList.vue | 3 ++ 10 files changed, 153 insertions(+), 43 deletions(-) diff --git a/src/components/AutoDataForm/index.vue b/src/components/AutoDataForm/index.vue index 471333fb2..7350eafc0 100644 --- a/src/components/AutoDataForm/index.vue +++ b/src/components/AutoDataForm/index.vue @@ -75,23 +75,38 @@ export default { type = '' field.component = Select2 break + case 'string': + type = 'input' + if (!fieldMeta.max_length) { + field.el.type = 'textarea' + } + break default: type = 'input' break } + if (type === 'radio-group') { + const options = fieldMeta.choices.map(v => { + return { label: v.display_name, value: v.value } + }) + if (options.length > 4) { + type = 'select' + field.el.filterable = true + } + } field.type = type return field }, generateFieldByName(name, field) { switch (name) { case 'email': - field.el = { type: 'email' } + field.el.type = 'email' break case 'password': - field.el = { type: 'password' } + field.el.type = 'password' break case 'comment': - field.el = { type: 'textarea' } + field.el.type = 'textarea' break } return field @@ -109,15 +124,16 @@ export default { return field }, generateField(name) { - let field = {} + let field = { id: name, prop: name, el: {}} const fieldMeta = this.meta[name] || {} - field.id = name - field.prop = name field.label = fieldMeta.label field = this.generateFieldByType(fieldMeta.type, field, fieldMeta) field = this.generateFieldByName(name, field) field = this.generateFieldByOther(field, fieldMeta) field = Object.assign(field, this.fieldsMeta[name] || {}) + if (name === 'name') { + console.log(field) + } return field }, generateFieldGroup(data) { diff --git a/src/components/AutoDataTable/index.vue b/src/components/AutoDataTable/index.vue index d19895812..2cf6e663f 100644 --- a/src/components/AutoDataTable/index.vue +++ b/src/components/AutoDataTable/index.vue @@ -4,7 +4,7 @@ diff --git a/src/views/users/UserList.vue b/src/views/users/UserList.vue index 2715bbf43..ef816043d 100644 --- a/src/views/users/UserList.vue +++ b/src/views/users/UserList.vue @@ -16,6 +16,9 @@ export default { columns: [ 'name', 'username', 'role', 'groups_display', 'source', 'is_valid', 'actions' ], + columnsMeta: { + + }, detailRoute: 'UserDetail', actions: { updateRoute: 'UserUpdate' From 515964818be4089fb498467cce0d098c40028a42 Mon Sep 17 00:00:00 2001 From: jym503558564 <503558564@qq.com> Date: Thu, 9 Apr 2020 21:00:07 +0800 Subject: [PATCH 13/15] =?UTF-8?q?[Update]=20=E8=B5=84=E4=BA=A7=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E5=88=97=E8=A1=A8=E6=98=BE=E7=A4=BAexpand=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExpandAssetPermissionFormatter.vue | 37 +++++++++++++++++++ src/components/ListTable/formatters/index.js | 1 + src/i18n/langs/cn.js | 3 ++ .../perms/AssetPermissionCreateUpdate.vue | 12 +++--- src/views/perms/AssetPermissionList.vue | 5 ++- 5 files changed, 50 insertions(+), 8 deletions(-) create mode 100644 src/components/ListTable/formatters/ExpandAssetPermissionFormatter.vue diff --git a/src/components/ListTable/formatters/ExpandAssetPermissionFormatter.vue b/src/components/ListTable/formatters/ExpandAssetPermissionFormatter.vue new file mode 100644 index 000000000..bb18ad800 --- /dev/null +++ b/src/components/ListTable/formatters/ExpandAssetPermissionFormatter.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/src/components/ListTable/formatters/index.js b/src/components/ListTable/formatters/index.js index 3af4df17e..54117d71e 100644 --- a/src/components/ListTable/formatters/index.js +++ b/src/components/ListTable/formatters/index.js @@ -6,3 +6,4 @@ export { default as ExpandPreFormatter } from './ExpandPreFormatter' export { default as LengthFormatter } from './LengthFormatter' export { default as RouterFormatter } from './RouterFormatter' export { default as OutputExpandFormatter } from './OutputExpandFormatter' +export { default as ExpandAssetPermissionFormatter } from './ExpandAssetPermissionFormatter' diff --git a/src/i18n/langs/cn.js b/src/i18n/langs/cn.js index b4c32c16f..6f2e0ee7e 100644 --- a/src/i18n/langs/cn.js +++ b/src/i18n/langs/cn.js @@ -331,6 +331,9 @@ const cn = { 'User': '用户', 'Asset': '资产', 'Actions': '动作', + 'UserGroups': '用户组', + 'Node': '节点', + 'SystemUser': '系统用户', // 'RemoteApp': '远程应用', // diff --git a/src/views/perms/AssetPermissionCreateUpdate.vue b/src/views/perms/AssetPermissionCreateUpdate.vue index 61e70687e..d96d96037 100644 --- a/src/views/perms/AssetPermissionCreateUpdate.vue +++ b/src/views/perms/AssetPermissionCreateUpdate.vue @@ -12,6 +12,7 @@ export default { return { form: { is_active: true, + actions: ['all', 'connect', 'updownload', 'upload_file', 'download_file'], date_expired: '2099-12-31 00:00:00 +0800' }, fields: [ @@ -56,13 +57,12 @@ export default { actions: { label: this.$t('perms.Actions'), type: 'checkbox-group', - default: ['all', 'connect', 'updownload', 'upload_file', 'download_file'], options: [ - { label: 'all' }, - { label: 'connect' }, - { label: 'updownload' }, - { label: 'upload_file' }, - { label: 'download_file' } + { label: 'all', value: this.$t('perms.All') }, + { label: 'connect', value: this.$t('perms.Connect') }, + { label: 'updownload', value: this.$t('perms.UpDownload') }, + { label: 'upload_file', value: this.$t('perms.UploadFile') }, + { label: 'download_file', value: this.$t('perms.DownloadFile') } ] }, is_active: { diff --git a/src/views/perms/AssetPermissionList.vue b/src/views/perms/AssetPermissionList.vue index 9a876f59d..ab677c511 100644 --- a/src/views/perms/AssetPermissionList.vue +++ b/src/views/perms/AssetPermissionList.vue @@ -4,7 +4,7 @@ diff --git a/src/views/sessions/SessionOfflineList.vue b/src/views/sessions/SessionOfflineList.vue index a422fd538..3e9ead1fc 100644 --- a/src/views/sessions/SessionOfflineList.vue +++ b/src/views/sessions/SessionOfflineList.vue @@ -31,7 +31,7 @@ export default { label: this.$t('sessions.command') }, login_from: { - label: this.$t('sessions.loginForm') + label: this.$t('sessions.loginFrom') }, protocol: { label: this.$t('sessions.protocol'),