From fbc63e4eadbcfeded16a30ef32ed4a83aea81336 Mon Sep 17 00:00:00 2001 From: dataeaseShu Date: Fri, 11 Jul 2025 18:32:44 +0800 Subject: [PATCH] feat(user): user manage --- frontend/src/assets/svg/gou_icon.svg | 11 + .../src/assets/svg/icon-filter_outlined.svg | 3 + frontend/src/assets/svg/icon_ban_filled.svg | 3 + .../assets/svg/icon_ccm-upload_outlined.svg | 4 + .../src/assets/svg/icon_info_colorful.svg | 12 + .../src/assets/svg/icon_member_filled.svg | 4 + .../src/assets/svg/icon_upload_outlined.svg | 3 + frontend/src/components/layout/LayoutDsl.vue | 1 + frontend/src/components/layout/MenuItem.vue | 2 + frontend/src/i18n/en.json | 28 + frontend/src/i18n/zh-CN.json | 30 +- frontend/src/router/index.ts | 8 +- frontend/src/style.less | 5 + frontend/src/views/system/user/User.vue | 510 ++++++++++++++++++ 14 files changed, 622 insertions(+), 2 deletions(-) create mode 100644 frontend/src/assets/svg/gou_icon.svg create mode 100644 frontend/src/assets/svg/icon-filter_outlined.svg create mode 100644 frontend/src/assets/svg/icon_ban_filled.svg create mode 100644 frontend/src/assets/svg/icon_ccm-upload_outlined.svg create mode 100644 frontend/src/assets/svg/icon_info_colorful.svg create mode 100644 frontend/src/assets/svg/icon_member_filled.svg create mode 100644 frontend/src/assets/svg/icon_upload_outlined.svg create mode 100644 frontend/src/views/system/user/User.vue diff --git a/frontend/src/assets/svg/gou_icon.svg b/frontend/src/assets/svg/gou_icon.svg new file mode 100644 index 00000000..ef54599e --- /dev/null +++ b/frontend/src/assets/svg/gou_icon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/frontend/src/assets/svg/icon-filter_outlined.svg b/frontend/src/assets/svg/icon-filter_outlined.svg new file mode 100644 index 00000000..2cee5a99 --- /dev/null +++ b/frontend/src/assets/svg/icon-filter_outlined.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/assets/svg/icon_ban_filled.svg b/frontend/src/assets/svg/icon_ban_filled.svg new file mode 100644 index 00000000..fa22f12a --- /dev/null +++ b/frontend/src/assets/svg/icon_ban_filled.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/assets/svg/icon_ccm-upload_outlined.svg b/frontend/src/assets/svg/icon_ccm-upload_outlined.svg new file mode 100644 index 00000000..938f8ea2 --- /dev/null +++ b/frontend/src/assets/svg/icon_ccm-upload_outlined.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/src/assets/svg/icon_info_colorful.svg b/frontend/src/assets/svg/icon_info_colorful.svg new file mode 100644 index 00000000..633d6cc9 --- /dev/null +++ b/frontend/src/assets/svg/icon_info_colorful.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/frontend/src/assets/svg/icon_member_filled.svg b/frontend/src/assets/svg/icon_member_filled.svg new file mode 100644 index 00000000..fded3173 --- /dev/null +++ b/frontend/src/assets/svg/icon_member_filled.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/src/assets/svg/icon_upload_outlined.svg b/frontend/src/assets/svg/icon_upload_outlined.svg new file mode 100644 index 00000000..d38c9c33 --- /dev/null +++ b/frontend/src/assets/svg/icon_upload_outlined.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/components/layout/LayoutDsl.vue b/frontend/src/components/layout/LayoutDsl.vue index 082ab5aa..387a9a8c 100644 --- a/frontend/src/components/layout/LayoutDsl.vue +++ b/frontend/src/components/layout/LayoutDsl.vue @@ -149,6 +149,7 @@ const toWorkspace = () => { flex: 1; padding: 8px 8px 8px 0; max-height: 100vh; + overflow-x: auto; .content { width: 100%; diff --git a/frontend/src/components/layout/MenuItem.vue b/frontend/src/components/layout/MenuItem.vue index ea938bc1..147520bf 100644 --- a/frontend/src/components/layout/MenuItem.vue +++ b/frontend/src/components/layout/MenuItem.vue @@ -4,10 +4,12 @@ import { ElMenuItem, ElSubMenu, ElIcon } from 'element-plus-secondary' import model from '@/assets/svg/icon_dataset_filled.svg' import ds from '@/assets/svg/ds.svg' +import user from '@/assets/svg/icon_member_filled.svg' const iconMap = { icon_ai: model, ds, + user, } as { [key: string]: any } const titleWithIcon = (props: any) => { diff --git a/frontend/src/i18n/en.json b/frontend/src/i18n/en.json index 5920e24b..582b6c32 100644 --- a/frontend/src/i18n/en.json +++ b/frontend/src/i18n/en.json @@ -195,6 +195,34 @@ "parameter_type": "Parameter type", "verification_successful": "Verification successful" }, + "user": { + "workspace": "Workspace", + "creation_time": "Creation time", + "user_source": "User source", + "phone_number": "Phone number", + "email": "Email", + "user_status": "User status", + "account": "Account", + "name": "Name", + "selected_2_items": "Selected {msg} items", + "name_account_email": "Search name, account, email", + "user_management": "User management", + "filter": "Filter", + "batch_import": "Batch import", + "add_users": "Add users", + "selected_2_users": "Do you want to delete the selected 2 users?", + "filter_conditions": "Filter conditions", + "enable": "Enable", + "disable": "Disable", + "local_creation": "Local creation", + "feishu": "Feishu", + "dingtalk": "DingTalk", + "wechat_for_business": "WeChat for business", + "1240_results": "{msg} results", + "clear_conditions": "Clear conditions", + "disabled": "Disabled", + "enabled": "Enabled" + }, "chat": { "chart_type": { "table": "Table", diff --git a/frontend/src/i18n/zh-CN.json b/frontend/src/i18n/zh-CN.json index c2d248ad..3680f0c5 100644 --- a/frontend/src/i18n/zh-CN.json +++ b/frontend/src/i18n/zh-CN.json @@ -198,6 +198,34 @@ "del_default_warn": "该模型为系统默认模型,请先设置其他模型为系统默认模型,再删除此模型。", "del_warn_tip": "是否删除模型: {msg}?" }, + "user": { + "workspace": "工作空间", + "creation_time": "创建时间", + "user_source": "用户来源", + "phone_number": "手机号", + "email": "邮箱", + "user_status": "用户状态", + "account": "账号", + "name": "姓名", + "selected_2_items": "已选 {msg} 条", + "name_account_email": "搜索姓名、账号、邮箱", + "user_management": "用户管理", + "filter": "筛选", + "batch_import": "批量导入", + "add_users": "添加用户", + "selected_2_users": "是否删除选中的 {msg} 个用户?", + "filter_conditions": "筛选条件", + "enable": "启用", + "disable": "禁用", + "local_creation": "本地创建", + "feishu": "飞书", + "dingtalk": "钉钉", + "wechat_for_business": "企业微信", + "1240_results": "{msg} 个结果 ", + "clear_conditions": "清空条件", + "disabled": "已禁用", + "enabled": "已启用" + }, "chat": { "chart_type": { "table": "明细表", @@ -234,4 +262,4 @@ "back_community": "还原至社区版", "confirm_tips": "确定还原至社区版?" } -} +} \ No newline at end of file diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index aa4f4c5f..d8d6de25 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -10,7 +10,7 @@ import DashboardEditor from '@/views/dashboard/editor/index.vue' import DashboardPreview from '@//views/dashboard/preview/SQPreviewSingle.vue' import Dashboard from '@/views/dashboard/index.vue' import Model from '@/views/system/model/Model.vue' -// import User from "@/views/system/user/index.vue"; +import User from '@/views/system/user/User.vue' import { watchRouter } from './watch' const router = createRouter({ history: createWebHashHistory(), @@ -126,6 +126,12 @@ const router = createRouter({ component: Model, meta: { title: 'AI Model Configuration', icon: 'icon_ai' }, }, + { + path: 'user', + name: 'user', + component: User, + meta: { title: '用户管理', icon: 'user' }, + }, ], }, ], diff --git a/frontend/src/style.less b/frontend/src/style.less index 436f7f21..7bdf444f 100644 --- a/frontend/src/style.less +++ b/frontend/src/style.less @@ -26,6 +26,7 @@ --shadow: 0 1px 3px rgba(0, 0, 0, 0.1); --ed-color-primary: #1cba90 !important; + --ed-border-radius-base: 6px !important; } a { @@ -149,3 +150,7 @@ body { align-items: center; justify-content: center; } + +.ed-input__prefix-inner .ed-icon { + color: #646a73; +} diff --git a/frontend/src/views/system/user/User.vue b/frontend/src/views/system/user/User.vue new file mode 100644 index 00000000..f90494b8 --- /dev/null +++ b/frontend/src/views/system/user/User.vue @@ -0,0 +1,510 @@ + + + + +