diff --git a/console/mock/index.ts b/console/mock/index.ts
index 3c586b16d870c7cbad7d20cf309ad33fa55a1d89..b01a5205ec7d1c166ea1d4f669f004a9f24fd8a7 100644
--- a/console/mock/index.ts
+++ b/console/mock/index.ts
@@ -4,7 +4,7 @@ import { userList, phoneResource, phoneUserList, userPhoneList, taskList, appLis
export default [
{
- url: '/api/user/login',
+ url: '/api/user/admin/login',
method: 'post',
response: ({body}) => {
const { username, password } = body;
diff --git a/console/src/components/AppList.vue b/console/src/components/AppList.vue
index 82f3fdc242b00c41cdec3e7b6d7db40981c33804..e08e75c63466de434b9d48cd550b55e48939f53d 100644
--- a/console/src/components/AppList.vue
+++ b/console/src/components/AppList.vue
@@ -145,7 +145,7 @@
-
+
diff --git a/console/src/components/MenuList.vue b/console/src/components/MenuList.vue
new file mode 100644
index 0000000000000000000000000000000000000000..c1913eb133f5012c5974878bd4b4d1b6564c65b9
--- /dev/null
+++ b/console/src/components/MenuList.vue
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+ {{$t('menu_add')}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/console/src/components/PhoneList.vue b/console/src/components/PhoneList.vue
index dd6c0eee34a5445569e20a799db81a765b7e16b5..7a17197dd229c8305b0db5ad7a3a49a110493b2b 100644
--- a/console/src/components/PhoneList.vue
+++ b/console/src/components/PhoneList.vue
@@ -297,7 +297,7 @@
-
+
diff --git a/console/src/components/PhoneUserList.vue b/console/src/components/PhoneUserList.vue
index e66870b9317bc2884c8633852f8058aa8ae4f104..5032e071e72a5c358fc2f0a9e0517b75df318da6 100644
--- a/console/src/components/PhoneUserList.vue
+++ b/console/src/components/PhoneUserList.vue
@@ -1,5 +1,5 @@
+
+
+
+
+
+
+
+
+
+ {{$t('role_add')}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/console/src/components/custom/DeleteModal.vue b/console/src/components/custom/DeleteModal.vue
index fe55b3ad082d5b7daa0f3757205b2e44ffeb99d3..daf2629d030d939c4490a5907484646fb2ec0932 100644
--- a/console/src/components/custom/DeleteModal.vue
+++ b/console/src/components/custom/DeleteModal.vue
@@ -1,15 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{$t('confirm_btn_text')}}
+ {{$t('cancel_btn_text')}}
+
+
+
\ No newline at end of file
diff --git a/console/src/components/custom/EditRole.vue b/console/src/components/custom/EditRole.vue
new file mode 100644
index 0000000000000000000000000000000000000000..4bd8f03e5db28fc6286b57321170826848394458
--- /dev/null
+++ b/console/src/components/custom/EditRole.vue
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+
+
+
+ {{$t('role_authority_alert')}}
+
+
+
+
+
+
+
+ {{$t('confirm_btn_text')}}
+ {{$t('cancel_btn_text')}}
+
+
+
\ No newline at end of file
diff --git a/console/src/components/custom/UserAssignMenu.vue b/console/src/components/custom/UserAssignMenu.vue
new file mode 100644
index 0000000000000000000000000000000000000000..14002b1bb5e280e55c798bd9540f31b21e7bb43c
--- /dev/null
+++ b/console/src/components/custom/UserAssignMenu.vue
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+ {{$t('confirm_btn_text')}}
+ {{$t('cancel_btn_text')}}
+
+
+
\ No newline at end of file
diff --git a/console/src/i18n/index.ts b/console/src/i18n/index.ts
index 407edde779118b2cd3dcf4b579d11c4a9d4dbf41..adade4641015a055141668b942c9df8bcbc10638 100644
--- a/console/src/i18n/index.ts
+++ b/console/src/i18n/index.ts
@@ -16,6 +16,8 @@ export default (i18n: any) =>
left_menu_all_resource: '所有资源',
left_menu_phone_list: '手机列表',
left_menu_cloudphone_user: '用户列表',
+ left_menu_cloudphone_role: '角色列表',
+ left_menu_cloudphone_menu: '菜单列表',
left_menu_app_list: '应用列表',
left_menu_app_install_record: '安装卸载记录',
left_menu_task_list: '任务列表',
@@ -32,6 +34,7 @@ export default (i18n: any) =>
status_text: '状态',
connect_phone_btn: '接入云手机',
username: '用户名',
+ userRole: '用户角色',
refresh_table: '刷新表格',
phone_name_column:'云手机名称',
connect_status_column: '连接状态',
@@ -105,7 +108,41 @@ export default (i18n: any) =>
execute_state: '执行状态',
operate_time: '操作时间',
separator_text: '至',
- delete_btn_text: '删除'
+ confirm_btn_text: '确定',
+ delete_btn_text: '删除',
+ cancel_btn_text: '取消',
+ role_id: '角色ID',
+ authority_number: '权限级别',
+ role_name: '角色名称',
+ role_remark: '角色描述',
+ role_connect_menu: '分配菜单',
+ role_edit: '编辑',
+ role_update: '更新角色',
+ role_delete: '删除',
+ role_delete_text: '删除角色',
+ role_add: '新增角色',
+ role_authority_alert: '注:权限级别范围为90~98。90为普通用户,98为管理员',
+ role_name_placeholder: '请输入角色名称',
+ role_remark_placeholder: '请输入角色描述',
+ menu_add: '新增菜单',
+ update_menu: '更新菜单',
+ menu_number: '菜单编号',
+ menu_name: '菜单名称',
+ menu_path: '路由地址',
+ menu_path_name: '路由名称',
+ parent_menu: '上级菜单',
+ menu_create_time: '创建日期',
+ delete_menu: '删除菜单',
+ delete_cloudphone: '删除云手机',
+ delete_modal_content: '您确定要删除吗?',
+ menu_name_placeholder: '请输入菜单名称',
+ menu_path_placeholder: '请输入路由地址',
+ menu_path_name_placeholder: '请输入路由名称',
+ add_user_account: '新增用户',
+ modify_password: '修改密码',
+ update_user_role: '修改用户角色',
+ add_cloudphone: '添加云手机',
+ table_empty_text: '暂无数据'
},
enUS: {
}
diff --git a/console/src/request/request.ts b/console/src/request/request.ts
index 52aa5409fee51c3cf6dddbc01bbc46ac8addb9bc..b5d978481c1dff5c053c3059acf850f6cc901ff5 100644
--- a/console/src/request/request.ts
+++ b/console/src/request/request.ts
@@ -6,7 +6,7 @@ const userInfoStore = useUserInfoStore();
// 登录接口
export const login = (params: any) => {
return instance({
- url: '/user/login',
+ url: '/user/admin/login',
method: 'post',
data: params
});
@@ -74,4 +74,158 @@ export const getAppList = (params?: any) => {
method: 'post',
params
});
+}
+
+export const getRoleList = (params?: any) => {
+ return instance({
+ url: '/authority/role/list',
+ method: 'get',
+ headers: {
+ token: userInfoStore.token,
+ session_id: userInfoStore.sessionId
+ },
+ params
+ })
+}
+
+export const getMenuList = (params: any) => {
+ return instance({
+ url: '/authority/menu/list',
+ method: 'get',
+ headers: {
+ token: userInfoStore.token,
+ session_id: userInfoStore.sessionId
+ },
+ params
+ })
+}
+
+export const getMenuTreeList = (params?: any) => {
+ return instance({
+ url: '/authority/menu/tree',
+ method: 'get',
+ headers: {
+ token: userInfoStore.token,
+ session_id: userInfoStore.sessionId
+ },
+ params
+ })
+}
+
+export const addRole = (params?: any) => {
+ return instance({
+ url: '/authority/role',
+ method: 'post',
+ headers: {
+ token: userInfoStore.token,
+ session_id: userInfoStore.sessionId
+ },
+ data: params
+ })
+}
+
+export const updateRole = (params?: any) => {
+ return instance({
+ url: '/authority/role',
+ method: 'put',
+ headers: {
+ token: userInfoStore.token,
+ session_id: userInfoStore.sessionId
+ },
+ data: params
+ })
+}
+
+export const deleteRole = (params?: any) => {
+ return instance({
+ url: '/authority/role',
+ method: 'delete',
+ headers: {
+ token: userInfoStore.token,
+ session_id: userInfoStore.sessionId
+ },
+ params
+ })
+}
+
+export const getRoleMenu = (params?: any) => {
+ return instance({
+ url: '/authority/role-menu',
+ method: 'get',
+ headers: {
+ token: userInfoStore.token,
+ session_id: userInfoStore.sessionId
+ },
+ params
+ })
+}
+
+export const updateRoleMenu = (params?: any) => {
+ return instance({
+ url: '/authority/role-menu',
+ method: 'put',
+ headers: {
+ token: userInfoStore.token,
+ session_id: userInfoStore.sessionId
+ },
+ data: params
+ })
+}
+
+export const getRoleAuthorityMenu = () => {
+ return instance({
+ url: '/authority/menu/tree/role',
+ method: 'get',
+ headers: {
+ token: userInfoStore.token,
+ session_id: userInfoStore.sessionId
+ }
+ })
+}
+
+export const getAllMenu = () => {
+ return instance({
+ url: '/authority/menu/tree',
+ method: 'get',
+ headers: {
+ token: userInfoStore.token,
+ session_id: userInfoStore.sessionId
+ }
+ })
+}
+
+export const addMenu = (params?: any) => {
+ return instance({
+ url: '/authority/menu',
+ method: 'post',
+ headers: {
+ token: userInfoStore.token,
+ session_id: userInfoStore.sessionId
+ },
+ data: params
+ })
+}
+
+export const updateMenu = (params?: any) => {
+ return instance({
+ url: '/authority/menu',
+ method: 'put',
+ headers: {
+ token: userInfoStore.token,
+ session_id: userInfoStore.sessionId
+ },
+ data: params
+ })
+}
+
+export const deleteMenu = (params?: any) => {
+ return instance({
+ url: '/authority/menu',
+ method: 'delete',
+ headers: {
+ token: userInfoStore.token,
+ session_id: userInfoStore.sessionId
+ },
+ params
+ })
}
\ No newline at end of file
diff --git a/console/src/router/index.ts b/console/src/router/index.ts
index 8f3c860563849d802e627732c8e07ceea267b67d..9b4701ffed136e120015a4a8a5212f83971c19dd 100644
--- a/console/src/router/index.ts
+++ b/console/src/router/index.ts
@@ -41,6 +41,24 @@ const router = createRouter({
name: 'userList',
meta: {parent: 'user', label: '用户列表'},
component: () => import('../components/PhoneUserList.vue')
+ },
+ {
+ path: '/user/role',
+ name: 'roleList',
+ meta: {
+ parent: 'user',
+ label: '角色列表'
+ },
+ component: () => import('../components/RoleList.vue')
+ },
+ {
+ path: '/user/menu',
+ name: 'menuList',
+ meta: {
+ parent: 'user',
+ label: '菜单列表'
+ },
+ component: () => import('../components/MenuList.vue')
}
]
},
@@ -52,7 +70,10 @@ const router = createRouter({
{
path: '/app/list',
name: 'appList',
- meta: {parent: 'app', label: '应用列表'},
+ meta: {
+ parent: 'app',
+ label: '应用列表'
+ },
component: () => import('../components/AppList.vue')
}
]
diff --git a/console/src/views/Home.vue b/console/src/views/Home.vue
index 9620b394c77fe44342fc4cf4548d381eb37708b6..0524ac33f017cb7997a6331e8d3e41dd87b0f05e 100644
--- a/console/src/views/Home.vue
+++ b/console/src/views/Home.vue
@@ -1,7 +1,7 @@