diff --git a/src/components/DetailCard/ItemValue.vue b/src/components/DetailCard/ItemValue.vue index fe2dd1ab5..7642a8c61 100644 --- a/src/components/DetailCard/ItemValue.vue +++ b/src/components/DetailCard/ItemValue.vue @@ -32,6 +32,16 @@ export default { {this.toChoicesDisplay(this.value)} ) } + if (this.value instanceof Array) { + const newArr = this.value || [] + return ( + + { + newArr.map((item, index) =>
{item.key}:{item.value}
) + } +
+ ) + } return ( {this.value} ) diff --git a/src/components/FormFields/WeekCronSelect.vue b/src/components/FormFields/WeekCronSelect.vue index 3f9ec5e0b..c824cd618 100644 --- a/src/components/FormFields/WeekCronSelect.vue +++ b/src/components/FormFields/WeekCronSelect.vue @@ -1,250 +1,398 @@ + diff --git a/src/i18n/langs/cn.json b/src/i18n/langs/cn.json index e68f0864d..81f194afa 100644 --- a/src/i18n/langs/cn.json +++ b/src/i18n/langs/cn.json @@ -9,12 +9,15 @@ "name": "名称", "username": "用户名", "ip_group": "IP 组", + "ip_group_help_text": "格式为逗号分隔的字符串, * 表示匹配所有。例如: 192.168.10.1, 192.168.1.0/24, 10.1.1.1-10.1.1.20, 2001:db8:2de::e13, 2001:db8:1a:1110::/64", "action": "动作", + "Rules": "规则", + "Action": "动作", "priority": "优先级", "date_created": "创建时间", "created_by": "创建者", "asset": "资产信息", - "users":"用户信息", + "users":"用户", "system_user": "系统用户", "username_group":"用户名", "hostname_group":"资产名", @@ -25,6 +28,7 @@ "apply_login_asset": "申请登录资产", "apply_login_system_user": "申请登录系统用户", "apply_login_user": "申请登录用户", + "login_confirm_user": "登录复核 受理人", "RuleDetail": "规则详情" }, "applications": { @@ -427,6 +431,19 @@ }, "lastCannotBeDeleteMsg": "最后一项,不能被删除", "InvalidJson": "不是合法 JSON", + "time_period": "时段", + "WeekCronSelect": { + "Monday": "星期一", + "Tuesday": "星期二", + "Wednesday": "星期三", + "Thursday": "星期四", + "Friday": "星期五", + "Saturday": "星期六", + "Sunday": "星期天", + "ClearSelection": "清空选择", + "CanDragSelect": "可拖动鼠标选择时间段", + "WeekOrTime": "星期/时间" + }, "CronTab": { "newCron": "生成 cron", "timeExpression": "时间表达式", @@ -658,11 +675,11 @@ "KubernetesAppUpdate": "更新Kubernetes", "Acl": "访问控制", "UserAclList": "用户登录", - "UserAclCreate": "创建用户登录规则", + "UserLoginACLCreate": "创建用户登录规则", "UserAclLists": "用户登录规则", - "UserAclUpdate": "更新用户登录规则", + "UserLoginACLUpdate": "更新用户登录规则", "UserAclDetail": "用户登录规则详情", - "AssetAclList": "登录资产", + "AssetAclList": "资产登录", "AssetAclCreate": "创建资产登录规则", "AssetAclUpdate": "更新资产登录规则", "AssetAclDetail": "资产登录规则详情", @@ -738,7 +755,8 @@ "WebFTP": "文件管理", "WebTerminal": "Web终端", "Notifications": "通知", - "SiteMessageList": "站内信" + "SiteMessageList": "站内信", + "UserLoginACL": "用户登录" }, "sessions": { "SetToDefaultStorage": "设置为默认存储", diff --git a/src/i18n/langs/en.json b/src/i18n/langs/en.json index 1ed4d932e..fe3cf3f7a 100644 --- a/src/i18n/langs/en.json +++ b/src/i18n/langs/en.json @@ -418,6 +418,7 @@ }, "lastCannotBeDeleteMsg": "The last one can't be delete", "InvalidJson": "Not a valid json format", + "time_period": "Time period", "CronTab": { "newCron": "new cron", "timeExpression": "time expression", @@ -452,6 +453,19 @@ "runningTimes": "last 5 running times", "calculationResults": "calculationResults...", "failedConditions": "cron expression error" + }, + "Cycle": "Cycle", + "WeekCronSelect": { + "Monday": "Monday", + "Tuesday": "Tuesday", + "Wednesday": "Wednesday", + "Thursday": "Thursday", + "Friday": "Friday", + "Saturday": "Saturday", + "Sunday": "Sunday", + "ClearSelection": "Clear selection", + "CanDragSelect": "Can drag the mouse to select a time period", + "WeekOrTime": "Week/Time" } }, "dashboard": { @@ -722,7 +736,8 @@ "WebFTP": "WebFTP", "WebTerminal": "Web Terminal", "Notifications": "Notifications", - "SiteMessageList": "Site message" + "SiteMessageList": "Site message", + "UserLoginACL": "User Login ACL" }, "sessions": { "SetToDefaultStorage": "Set to default storage", diff --git a/src/router/acl.js b/src/router/acl.js index e5884c7cb..b765cbd9e 100644 --- a/src/router/acl.js +++ b/src/router/acl.js @@ -38,5 +38,33 @@ export default [ hidden: true } ] + }, + { + path: 'user-login-acl', + component: empty, + redirect: '', + children: [ + { + path: 'create', + name: 'UserLoginACLCreate', + component: () => import('@/views/acl/UserLoginACL/UserLoginACLCreateUpdate'), + meta: { title: i18n.t('route.UserLoginACLCreate'), activeMenu: '/users/users' }, + hidden: true + }, + { + path: ':id', + name: 'UserLoginACLDetail', + component: () => import('@/views/acl/UserLoginACL/UserDetail'), + meta: { title: i18n.t('route.UserLoginACL'), activeMenu: '/users/users' }, + hidden: true + }, + { + path: ':id/update', + name: 'UserLoginACLUpdate', + component: () => import('@/views/acl/UserLoginACL/UserLoginACLCreateUpdate'), + meta: { title: i18n.t('route.UserLoginACLUpdate'), activeMenu: '/users/users' }, + hidden: true + } + ] } ] diff --git a/src/router/users.js b/src/router/users.js index 1d087c004..6ea0aa177 100644 --- a/src/router/users.js +++ b/src/router/users.js @@ -1,5 +1,4 @@ import i18n from '@/i18n/i18n' -import empty from '@/layout/empty' export default [ { path: 'users', @@ -54,42 +53,5 @@ export default [ name: 'UserGroupDetail', hidden: true, meta: { title: i18n.t('route.UserGroupDetail'), activeMenu: '/users/groups' } - }, - { - path: 'user-acl', - component: empty, - redirect: '', - meta: { title: i18n.t('route.UserAclList') }, - hidden: true, - children: [ - { - path: '', - name: 'UserAclList', - component: () => import('@/views/acl/UserAcl/UserAclList'), - meta: { title: i18n.t('route.UserAclList'), activeMenu: '/users/users' }, - hidden: true - }, - { - path: 'create', - name: 'UserAclCreate', - component: () => import('@/views/acl/UserAcl/UserAclCreateUpdate'), - meta: { title: i18n.t('route.UserAclCreate'), activeMenu: '/users/users' }, - hidden: true - }, - { - path: ':id', - name: 'UserAclDetail', - component: () => import('@/views/acl/UserAcl/UserAclDetail'), - meta: { title: i18n.t('route.UserAclDetail'), activeMenu: '/users/users' }, - hidden: true - }, - { - path: ':id/update', - name: 'UserAclUpdate', - component: () => import('@/views/acl/UserAcl/UserAclCreateUpdate'), - meta: { title: i18n.t('route.UserAclUpdate') }, - hidden: true - } - ] } ] diff --git a/src/views/acl/UserAcl/UserAclCreateUpdate.vue b/src/views/acl/UserAcl/UserAclCreateUpdate.vue deleted file mode 100644 index d66645e1f..000000000 --- a/src/views/acl/UserAcl/UserAclCreateUpdate.vue +++ /dev/null @@ -1,94 +0,0 @@ - - - - - diff --git a/src/views/acl/UserAcl/UserAclDetail/Detail.vue b/src/views/acl/UserLoginACL/UserDetail/Detail.vue similarity index 56% rename from src/views/acl/UserAcl/UserAclDetail/Detail.vue rename to src/views/acl/UserLoginACL/UserDetail/Detail.vue index ac4909f41..b80814504 100644 --- a/src/views/acl/UserAcl/UserAclDetail/Detail.vue +++ b/src/views/acl/UserLoginACL/UserDetail/Detail.vue @@ -11,14 +11,11 @@ diff --git a/src/views/acl/UserAcl/UserAclDetail/index.vue b/src/views/acl/UserLoginACL/UserDetail/index.vue similarity index 99% rename from src/views/acl/UserAcl/UserAclDetail/index.vue rename to src/views/acl/UserLoginACL/UserDetail/index.vue index fe037e7a5..ff826782e 100644 --- a/src/views/acl/UserAcl/UserAclDetail/index.vue +++ b/src/views/acl/UserLoginACL/UserDetail/index.vue @@ -37,5 +37,4 @@ export default { diff --git a/src/views/acl/UserLoginACL/UserLoginACLCreateUpdate.vue b/src/views/acl/UserLoginACL/UserLoginACLCreateUpdate.vue new file mode 100644 index 000000000..68762d94f --- /dev/null +++ b/src/views/acl/UserLoginACL/UserLoginACLCreateUpdate.vue @@ -0,0 +1,152 @@ + + + + + diff --git a/src/views/acl/UserAcl/UserAclList.vue b/src/views/acl/UserLoginACL/UserLoginACLList.vue similarity index 73% rename from src/views/acl/UserAcl/UserAclList.vue rename to src/views/acl/UserLoginACL/UserLoginACLList.vue index 5c5fd9290..71d7126c2 100644 --- a/src/views/acl/UserAcl/UserAclList.vue +++ b/src/views/acl/UserLoginACL/UserLoginACLList.vue @@ -14,15 +14,15 @@ export default { return { tableConfig: { url: `/api/v1/acls/login-acls/?user=${this.$route.params.id}`, - columns: ['name', 'ip_group', 'priority', 'action', 'is_active', 'comment', 'actions'], + columns: ['name', 'ip_group', 'reviewers', 'priority', 'user_display', 'is_active', 'comment', 'actions'], columnsShow: { min: ['name', 'actions'], - default: ['name', 'ip_group', 'priority', 'action', 'is_active', 'comment', 'actions'] + default: ['name', 'priority', 'is_active', 'user_display', 'comment', 'actions'] }, columnsMeta: { name: { formatterArgs: { - route: 'UserAclDetail', + route: 'UserLoginACLDetail', routeQuery: { user: this.$route.params.id } @@ -35,10 +35,13 @@ export default { action: { prop: 'action_display' }, + reviewers: { + prop: 'reviewers_amount' + }, actions: { formatterArgs: { hasClone: false, - updateRoute: { name: 'UserAclUpdate', query: { user: this.$route.params.id }}, + updateRoute: { name: 'UserLoginACLUpdate', query: { user: this.$route.params.id }}, performDelete: ({ row, col }) => { const id = row.id const url = `/api/v1/acls/login-acls/${id}/?user=${this.$route.params.id}` @@ -49,7 +52,7 @@ export default { } }, headerActions: { - createRoute: { name: 'UserAclCreate', query: { user: this.$route.params.id }}, + createRoute: { name: 'UserLoginACLCreate', query: { user: this.$route.params.id }}, hasRefresh: true, hasExport: false, hasImport: false, diff --git a/src/views/users/User/UserDetail/UserInfo.vue b/src/views/users/User/UserDetail/UserInfo.vue index cd699cbf7..64aaaba67 100644 --- a/src/views/users/User/UserDetail/UserInfo.vue +++ b/src/views/users/User/UserDetail/UserInfo.vue @@ -6,7 +6,6 @@ - @@ -192,32 +191,6 @@ export default { }) return this.$axios.post(relationUrl, data) } - }, - loginConfirmSetting: { - icon: 'fa-user', - title: this.$t('users.LoginConfirm'), - objectsAjax: { - url: '/api/v1/users/users/' - }, - hasObjectsId: this.object.login_confirm_settings, - performDelete: (item) => { - const objectId = this.object.id - const relationUrl = `/api/v1/authentication/login-confirm-settings/${objectId}/` - const data = { - reviewers: this.object.login_confirm_settings.filter(approver => approver !== item.value) - } - return this.$axios.patch(relationUrl, data) - }, - performAdd: (items) => { - const objectId = this.object.id - const relationUrl = `/api/v1/authentication/login-confirm-settings/${objectId}/` - const data = { - reviewers: [...this.object.login_confirm_settings || [], ...items.map(v => { - return v.value - })] - } - return this.$axios.patch(relationUrl, data) - } } } }, diff --git a/src/views/users/User/UserDetail/index.vue b/src/views/users/User/UserDetail/index.vue index ebf663d48..1b8983fe9 100644 --- a/src/views/users/User/UserDetail/index.vue +++ b/src/views/users/User/UserDetail/index.vue @@ -15,7 +15,7 @@ import UserApplicationPermissionRules from './UserApplicationsPermissionRules' import UserGrantedDatabases from './UserGrantedDatabases' import UserGrantedK8Ss from './UserGrantedK8Ss' import UserK8SPermissionRules from './UserK8SPermissionRules' -import UserAclList from '@/views/acl/UserAcl/UserAclList' +import UserLoginACLList from '@/views/acl/UserLoginACL/UserLoginACLList' import UserDatabasePermissionRules from './UserDatabasePermissionRules' import UserInfo from './UserInfo' @@ -31,7 +31,7 @@ export default { UserDatabasePermissionRules, UserK8SPermissionRules, UserGrantedK8Ss, - UserAclList + UserLoginACLList }, data() { const vm = this @@ -66,7 +66,7 @@ export default { }, { title: this.$t('route.UserAclLists'), - name: 'UserAclList' + name: 'UserLoginACLList' } ] }