From 0b6ec1423083f4b6666b091f931fafb4d790bab2 Mon Sep 17 00:00:00 2001 From: 13121765685 Date: Thu, 18 Dec 2025 15:53:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=80=E6=96=B0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...Points Consumption Rules to User Center.md | 24 + .../Implement Role Badge for User Status.md | 64 + .trae/documents/优化邀请码列表功能.md | 74 + .trae/documents/佣金管理功能实现计划.md | 48 + .trae/documents/修复邀请码列表数据获取.md | 28 + .trae/documents/实现佣金管理功能.md | 46 + .trae/documents/实现侧边栏权限管理功能.md | 112 + .trae/documents/实现积分充值页面.md | 35 + .trae/documents/实现积分管理功能.md | 121 ++ .../documents/实现邀请码复制带域名文案功能.md | 34 + .trae/documents/更新导航栏链接.md | 38 + .trae/documents/添加规则方格子四个角点.md | 47 +- .trae/documents/添加邀请码列表功能.md | 56 + .trae/documents/添加邀请规则到邀请信息区域.md | 79 + .trae/documents/用户中心页面重构.md | 37 + .../documents/角色管理和权限管理设计与对接.md | 76 + .trae/documents/邀请码样式重构.md | 42 + apps/FrontendDesigner/src/App.vue | 27 +- .../src/components/admin/AdminLayout.vue | 41 +- .../src/locales/lang/en-US.js | 139 +- .../src/locales/lang/zh-CN.js | 157 +- apps/FrontendDesigner/src/main.js | 5 +- apps/FrontendDesigner/src/router/index.js | 68 +- .../views/admin/AdminCommissionManagement.vue | 492 +++++ .../AdminPermissionDetail.vue | 230 +++ .../AdminPermissionManagement.vue | 284 +++ .../src/views/admin/AdminPointsManagement.vue | 288 +++ .../AdminRoleManagement/AdminRoleDetail.vue | 247 +++ .../AdminRoleManagement.vue | 271 +++ .../views/admin/AdminRoleManagement/index.js | 231 +++ .../src/views/admin/AdminRouteManagement.vue | 116 ++ .../src/views/admin/AdminUserList.vue | 203 ++ .../admin/AdminUsers/AdminUserInvites.vue | 385 +++- .../src/views/admin/AdminUsers/AdminUsers.vue | 98 +- .../src/views/admin/AdminUsers/index.js | 46 +- apps/frontend/src/App.vue | 7 +- apps/frontend/src/components/IPCard/index.vue | 2 +- .../src/components/auth/GoogleOAuthButton.vue | 7 +- .../src/components/auth/LoginForm.vue | 74 +- .../src/components/layout/AppSidebar.vue | 315 +-- .../src/components/layout/MainLayout.vue | 7 +- apps/frontend/src/locales/index.js | 290 ++- apps/frontend/src/main.js | 10 +- apps/frontend/src/router/index.js | 118 +- apps/frontend/src/stores/auth.js | 4 +- apps/frontend/src/views/Login/Login.vue | 15 +- apps/frontend/src/views/Login/login.js | 22 +- apps/frontend/src/views/NotFound.vue | 219 ++ apps/frontend/src/views/PointsRecharge.vue | 479 +++++ .../src/views/Project/CreateProject.vue | 4 +- apps/frontend/src/views/home/index copy.vue | 9 +- apps/frontend/src/views/home/index.vue | 135 +- apps/frontend/src/views/user/index.js | 56 + apps/frontend/src/views/user/index.vue | 1829 +++++++++++++++++ packages/ui/package.json | 1 + packages/ui/src/components/Button.vue | 153 -- packages/ui/src/components/Card.vue | 236 --- packages/ui/src/components/Loading.vue | 351 ---- .../ui}/src/components/LoadingCom/index.vue | 20 +- packages/ui/src/components/Modal.vue | 357 ---- packages/ui/src/index.js | 38 +- packages/ui/src/style.css | 19 + packages/ui/vite.config.js | 5 + .../utils/src/api/FrontendDesigner/index.js | 2 + .../src/api/FrontendDesigner/permission.js | 17 + .../utils/src/api/FrontendDesigner/user.js | 12 +- packages/utils/src/api/frontend/user.js | 2 + packages/utils/src/index.js | 3 + packages/utils/src/servers/fileserver.js | 9 +- packages/utils/src/servers/giminiserver.js | 6 +- packages/utils/src/utils/environment.js | 262 +++ packages/utils/src/utils/request.js | 5 +- 72 files changed, 7917 insertions(+), 1472 deletions(-) create mode 100644 .trae/documents/Add Points Consumption Rules to User Center.md create mode 100644 .trae/documents/Implement Role Badge for User Status.md create mode 100644 .trae/documents/优化邀请码列表功能.md create mode 100644 .trae/documents/佣金管理功能实现计划.md create mode 100644 .trae/documents/修复邀请码列表数据获取.md create mode 100644 .trae/documents/实现佣金管理功能.md create mode 100644 .trae/documents/实现侧边栏权限管理功能.md create mode 100644 .trae/documents/实现积分充值页面.md create mode 100644 .trae/documents/实现积分管理功能.md create mode 100644 .trae/documents/实现邀请码复制带域名文案功能.md create mode 100644 .trae/documents/更新导航栏链接.md create mode 100644 .trae/documents/添加邀请码列表功能.md create mode 100644 .trae/documents/添加邀请规则到邀请信息区域.md create mode 100644 .trae/documents/用户中心页面重构.md create mode 100644 .trae/documents/角色管理和权限管理设计与对接.md create mode 100644 .trae/documents/邀请码样式重构.md create mode 100644 apps/FrontendDesigner/src/views/admin/AdminCommissionManagement.vue create mode 100644 apps/FrontendDesigner/src/views/admin/AdminPermissionManagement/AdminPermissionDetail.vue create mode 100644 apps/FrontendDesigner/src/views/admin/AdminPermissionManagement/AdminPermissionManagement.vue create mode 100644 apps/FrontendDesigner/src/views/admin/AdminPointsManagement.vue create mode 100644 apps/FrontendDesigner/src/views/admin/AdminRoleManagement/AdminRoleDetail.vue create mode 100644 apps/FrontendDesigner/src/views/admin/AdminRoleManagement/AdminRoleManagement.vue create mode 100644 apps/FrontendDesigner/src/views/admin/AdminRoleManagement/index.js create mode 100644 apps/FrontendDesigner/src/views/admin/AdminRouteManagement.vue create mode 100644 apps/FrontendDesigner/src/views/admin/AdminUserList.vue create mode 100644 apps/frontend/src/views/NotFound.vue create mode 100644 apps/frontend/src/views/PointsRecharge.vue create mode 100644 apps/frontend/src/views/user/index.js create mode 100644 apps/frontend/src/views/user/index.vue delete mode 100644 packages/ui/src/components/Button.vue delete mode 100644 packages/ui/src/components/Card.vue delete mode 100644 packages/ui/src/components/Loading.vue rename {apps/frontend => packages/ui}/src/components/LoadingCom/index.vue (86%) delete mode 100644 packages/ui/src/components/Modal.vue create mode 100644 packages/ui/src/style.css create mode 100644 packages/utils/src/api/FrontendDesigner/permission.js create mode 100644 packages/utils/src/utils/environment.js diff --git a/.trae/documents/Add Points Consumption Rules to User Center.md b/.trae/documents/Add Points Consumption Rules to User Center.md new file mode 100644 index 0000000..c1d117e --- /dev/null +++ b/.trae/documents/Add Points Consumption Rules to User Center.md @@ -0,0 +1,24 @@ +## 实现计划 + +### 1. 更新国际化翻译 +- 在 `src/locales/index.js` 中添加积分消耗规则相关翻译 +- 包含中英文翻译 +- 添加以下翻译键: + - 消耗规则标题 + - 消耗规则表格标题(行为、积分消耗) + - 具体消耗规则(生成1张图片:1积分,生成1个3D模型:30积分) + +### 2. 修改用户中心组件 +- 在 `src/views/user/index.vue` 的积分列表后添加新的消耗规则区域 +- 创建包含指定数据的消耗规则表格 +- 使用现有样式模式保持设计一致性 +- 支持响应式设计 + +### 3. 更新样式 +- 为新的消耗规则区域添加CSS样式 +- 确保与现有积分区域样式一致 +- 添加与现有设计匹配的悬停效果和过渡 +- 支持明暗主题 + +## 预期结果 +用户中心积分区域将新增"积分消耗规则"部分,以表格形式展示指定的消耗规则,设计风格与现有界面保持一致。 \ No newline at end of file diff --git a/.trae/documents/Implement Role Badge for User Status.md b/.trae/documents/Implement Role Badge for User Status.md new file mode 100644 index 0000000..debd405 --- /dev/null +++ b/.trae/documents/Implement Role Badge for User Status.md @@ -0,0 +1,64 @@ +## 实施方案 + +### 概述 +将当前的绿色圆点在线状态指示器替换为角色标识,为'free'(免费会员)和'creator'(达人会员)用户显示不同样式的标识。 + +### 所需更改 + +1. **更新 AppSidebar.vue 模板** + - 将第39行和第52行的 `
` 元素替换为角色标识组件 + - 添加硬编码的角色属性(默认为'free')用于演示 + +2. **更新角色显示逻辑** + - 修改 `getRoleDisplayName` 函数,添加'free'和'creator'角色的映射 + - 根据需要为新角色添加翻译 + +3. **更新样式** + - 移除旧的 `.online-status` CSS 类 + - 为角色标识添加新的 CSS 样式,为'free'和'creator'角色设计不同样式 + - 确保角色标识在用户头像上正确定位 + +4. **测试实现** + - 验证角色标识在折叠和展开的侧边栏模式下都能正确显示 + - 检查'free'和'creator'角色的不同样式是否可见 + - 确保布局在不同屏幕尺寸下保持响应式 + +### 实现细节 + +#### 模板更改 +- 第39行:将 `
` 替换为角色标识 +- 第52行:将 `
` 替换为角色标识 +- 添加硬编码的 `userRole` 属性,设置为'free'或'creator' + +#### 角色映射更新 +- 更新 `getRoleDisplayName` 函数,包括: + ```javascript + const roleMap = { + 'free': '免费会员', + 'creator': '达人会员', + 'admin': t('roles.admin'), + 'viewer': t('roles.viewer') + } + ``` + +#### CSS 更改 +- 移除第450行的 `.online-status` 类定义 +- 添加新的 CSS 类用于角色标识: + - `.role-badge`:所有角色标识的基础样式 + - `.role-badge.free`:免费会员的样式 + - `.role-badge.creator`:达人会员的样式 + - 使用 `position: absolute` 和适当的 `bottom`/`right` 值确保正确定位 + +### 预期行为 +- 当用户为'free'角色时,标识将显示特定样式(例如灰色背景,简单设计) +- 当用户为'creator'角色时,标识将显示不同样式(例如紫色背景,特殊设计) +- 角色标识的位置与当前在线状态圆点相似 +- 标识在折叠和展开的侧边栏模式下都可见 + +### 技术考虑 +- 角色目前硬编码用于演示,但可以轻松连接到 auth store 中的实际用户角色 +- 实现保持与现有代码库的向后兼容性 +- 响应式设计在所有屏幕尺寸下都能保持 +- 样式遵循项目现有的设计系统 + +该方案将为免费会员和达人会员创建清晰的视觉区分,通过提供即时的角色识别来改善用户体验。 \ No newline at end of file diff --git a/.trae/documents/优化邀请码列表功能.md b/.trae/documents/优化邀请码列表功能.md new file mode 100644 index 0000000..84e1993 --- /dev/null +++ b/.trae/documents/优化邀请码列表功能.md @@ -0,0 +1,74 @@ +# 实现计划 + +## 1. 标签页切换时自动刷新列表 + +### 1.1 问题分析 +- 当前 `el-tabs` 组件没有添加 `tab-change` 事件监听 +- 切换标签页时,列表数据不会自动刷新 + +### 1.2 解决方案 +- 为 `el-tabs` 组件添加 `@tab-change` 事件监听 +- 在事件处理函数中,根据当前激活的标签页调用对应的获取数据方法 +- 邀请码列表调用 `getInviteCodeList()` +- 邀请用户列表调用 `getInviteList()` + +## 2. 隐藏用户id的筛选条件 + +### 2.1 问题分析 +- 当前用户id的筛选条件是可见的输入框 +- 需要隐藏该筛选条件,但保持使用路由传过来的id +- 保持其他查询条件不变 + +### 2.2 解决方案 +- 仅隐藏用户id的表单项,使用 `v-if="false"` 或 `style="display: none"` +- 保持现有的 `filterForm` 结构和查询逻辑不变 +- 确保获取邀请码列表时,默认使用路由传过来的 `userId` + +## 3. 添加删除二维码功能 + +### 3.1 问题分析 +- 当前邀请码列表没有删除功能 +- 需要调用 `deleteInviteCode` 方法删除邀请码 + +### 3.2 解决方案 +- 在邀请码列表中添加一列操作列 +- 操作列中添加删除按钮 +- 点击删除按钮时,弹出确认对话框 +- 确认后调用 `deleteInviteCode` 方法 +- 删除成功后刷新邀请码列表 + +## 4. 实现步骤 + +### 4.1 修改标签页组件 +- 添加 `@tab-change` 事件监听 +- 实现 `handleTabChange` 方法 + +### 4.2 隐藏用户id筛选条件 +- 在用户id的表单项上添加 `style="display: none"` 或 `v-if="false"` +- 保持其他查询条件不变 + +### 4.3 添加删除功能 +- 在邀请码列表中添加操作列 +- 添加删除按钮和确认对话框 +- 实现 `handleDeleteCode` 方法 + +### 4.4 优化样式 +- 调整操作列的宽度和样式 + +## 5. 文件修改 +- 仅修改 `d:/work/Aiproject/DeotalandAi/apps/FrontendDesigner/src/views/admin/AdminUsers/AdminUserInvites.vue` 文件 + +# 预期效果 + +- 切换标签页时,对应列表自动刷新数据 +- 邀请码列表中不再显示用户id筛选条件,但其他查询条件保持不变 +- 邀请码列表中添加删除按钮,点击可删除邀请码,删除前有确认提示 +- 删除成功后列表自动刷新 + +# 技术实现 + +- 使用 Vue 3 的 Composition API +- 使用 Element Plus 的组件和事件 +- 调用已有的 `deleteInviteCode` 方法 +- 使用 `ref` 管理响应式数据 +- 使用 `async/await` 处理异步操作 \ No newline at end of file diff --git a/.trae/documents/佣金管理功能实现计划.md b/.trae/documents/佣金管理功能实现计划.md new file mode 100644 index 0000000..bfcb265 --- /dev/null +++ b/.trae/documents/佣金管理功能实现计划.md @@ -0,0 +1,48 @@ +# 佣金管理功能实现计划 + +## 1. 路由配置 +- 在 `apps/FrontendDesigner/src/router/index.js` 中添加佣金管理页面路由 +- 导入佣金管理组件并配置路由参数 + +## 2. 侧边栏菜单配置 +- 在 `apps/FrontendDesigner/src/components/admin/AdminLayout.vue` 中添加佣金管理菜单项 +- 使用适当的图标和翻译文本 + +## 3. 国际化配置 +- 在 `apps/FrontendDesigner/src/locales/lang/zh-CN.js` 中添加佣金管理相关中文翻译 +- 在 `apps/FrontendDesigner/src/locales/lang/en-US.js` 中添加佣金管理相关英文翻译 + +## 4. 佣金管理页面开发 +- 创建 `apps/FrontendDesigner/src/views/admin/AdminCommissionManagement.vue` 页面组件 +- 实现佣金比例设置功能(默认15%) +- 实现佣金列表展示,包含达人名称、用户ID、实际支付金额、商品金额、佣金、状态等字段 +- 添加佣金审核功能(审核通过/拒绝按钮) +- 实现响应式设计,适配不同屏幕尺寸 + +## 5. 组件功能实现 +- 使用 Element Plus 组件库实现表格、表单、按钮等UI元素 +- 实现佣金计算逻辑(基于实际支付金额和佣金比例) +- 添加审核状态管理 +- 实现数据列表的分页、筛选功能 + +## 6. 数据模拟 +- 添加模拟数据,用于展示佣金列表 +- 实现模拟的审核功能 + +## 7. 样式优化 +- 确保页面样式与现有管理后台风格一致 +- 添加适当的动画和过渡效果 +- 优化表格和表单的用户体验 + +## 8. 测试验证 +- 确保页面能正常加载和显示 +- 测试佣金比例设置功能 +- 测试佣金审核功能 +- 验证响应式设计 + +## 技术栈 +- Vue 3 Composition API +- Element Plus UI组件库 +- Vue Router 4 +- Vue I18n 9 +- CSS 变量 + Scoped CSS \ No newline at end of file diff --git a/.trae/documents/修复邀请码列表数据获取.md b/.trae/documents/修复邀请码列表数据获取.md new file mode 100644 index 0000000..47f5f2a --- /dev/null +++ b/.trae/documents/修复邀请码列表数据获取.md @@ -0,0 +1,28 @@ +## 修复邀请码列表数据获取 + +### 问题分析 +当前邀请码列表使用的是硬编码数据,而不是通过调用`getCodes()`方法从API获取实际数据。 + +### 解决方案 +1. 修改`index.vue`组件,导入并使用`UserController`中的`getCodes()`方法 +2. 将硬编码的`userData`计算属性改为响应式数据,并添加数据获取逻辑 +3. 确保邀请码列表能够动态渲染从API获取的数据 + +### 实现步骤 +1. 在`index.vue`中导入`UserController` +2. 创建响应式的`userData`对象,替换当前的计算属性 +3. 添加`onMounted`钩子,在组件挂载时调用`getCodes()`方法获取邀请码数据 +4. 更新邀请码列表的渲染逻辑,确保与API返回的数据结构匹配 +5. 添加错误处理和加载状态 + +### 预期结果 +- 邀请码列表将显示从API获取的实际数据 +- 支持邀请码的过期状态显示 +- 保持现有的复制功能和样式不变 + +### 代码变更 +- 修改`d:/work/Aiproject/DeotalandAi/apps/frontend/src/views/user/index.vue`: + - 导入`UserController` + - 将`userData`从计算属性改为响应式数据 + - 添加数据获取逻辑 + - 调整数据结构映射 \ No newline at end of file diff --git a/.trae/documents/实现佣金管理功能.md b/.trae/documents/实现佣金管理功能.md new file mode 100644 index 0000000..9a54d8d --- /dev/null +++ b/.trae/documents/实现佣金管理功能.md @@ -0,0 +1,46 @@ +# 实现佣金管理功能 + +## 一、功能需求 +1. 在侧边栏添加佣金管理菜单 +2. 创建佣金管理页面,包含: + - 列表展示达人的佣金对应用户的实际支付金额和商品金额 + - 审核用户佣金的功能按钮 + - 页面上方可设置佣金比例,默认为15% + +## 二、实现步骤 + +### 1. 添加国际化支持 +- 在 `src/locales/index.js` 中添加佣金管理相关的中英文翻译 + +### 2. 更新侧边栏菜单 +- 在 `src/components/layout/AppSidebar.vue` 的 `coreMenuItems` 数组中添加佣金管理菜单 +- 配置菜单的ID、路径、标签和图标 + +### 3. 添加路由配置 +- 在 `src/router/index.js` 中添加佣金管理页面的路由配置 +- 导入佣金管理组件 +- 配置路由路径、名称和组件 + +### 4. 创建佣金管理页面组件 +- 在 `src/views/` 目录下创建 `CommissionManagement.vue` 文件 +- 实现页面布局和功能: + - 页面上方的佣金比例设置区域,默认值为15% + - 佣金列表展示区域,包含达人信息、用户实际支付金额、商品金额等字段 + - 每个佣金项的审核功能按钮 + +### 5. 实现页面功能 +- 添加佣金比例设置的双向绑定和保存功能 +- 实现佣金列表的数据展示 +- 添加审核功能按钮的点击事件处理 + +## 三、技术要点 +- 使用 Vue 3 的组合式 API +- 遵循现有的代码风格和组件设计模式 +- 使用 Element Plus 组件库实现 UI 元素 +- 实现响应式设计,适配不同屏幕尺寸 + +## 四、文件变更 +1. `src/locales/index.js` - 添加佣金管理相关的国际化翻译 +2. `src/components/layout/AppSidebar.vue` - 更新侧边栏菜单,添加佣金管理选项 +3. `src/router/index.js` - 添加佣金管理页面的路由配置 +4. `src/views/CommissionManagement.vue` - 创建佣金管理页面组件 \ No newline at end of file diff --git a/.trae/documents/实现侧边栏权限管理功能.md b/.trae/documents/实现侧边栏权限管理功能.md new file mode 100644 index 0000000..0e78f4f --- /dev/null +++ b/.trae/documents/实现侧边栏权限管理功能.md @@ -0,0 +1,112 @@ +# 实现侧边栏权限管理功能 + +## 功能需求 +在侧边栏新增权限管理功能,包含以下二级目录: +- 角色管理 +- 路由管理(每个路由可配置对应按钮权限) +- 用户列表(展示后台管理系统所有账号) + +## 实现步骤 + +### 1. 修改侧边栏菜单配置 +**文件**:`apps/FrontendDesigner/src/components/admin/AdminLayout.vue` +- 在侧边栏添加权限管理子菜单 +- 包含三个二级菜单项:角色管理、路由管理、用户列表 +- 使用Element Plus的`el-sub-menu`和`el-menu-item`组件 +- 添加对应的图标 + +### 2. 配置路由 +**文件**:`apps/FrontendDesigner/src/router/index.js` +- 添加权限管理相关路由 +- 角色管理:`/admin/role-management` +- 路由管理:`/admin/route-management` +- 用户列表:`/admin/user-list` +- 所有路由都需要认证 + +### 3. 创建页面组件 +**目录**:`apps/FrontendDesigner/src/views/admin/` +- 创建`AdminRoleManagement`组件 +- 创建`AdminRouteManagement`组件 +- 创建`AdminUserList`组件 +- 每个组件包含基本的模板结构和国际化支持 + +### 4. 更新子菜单映射 +**文件**:`apps/FrontendDesigner/src/components/admin/AdminLayout.vue` +- 在`submenuMap`中添加权限管理子菜单的映射关系 +- 确保路由切换时正确展开对应的父菜单 + +## 技术实现要点 + +### 菜单结构 +```vue + + + + + + + + + + + + + + + +``` + +### 路由配置 +```javascript +// 权限管理相关组件 +const AdminRoleManagement = () => import('@/views/admin/AdminRoleManagement.vue') +const AdminRouteManagement = () => import('@/views/admin/AdminRouteManagement.vue') +const AdminUserList = () => import('@/views/admin/AdminUserList.vue') + +// 添加到children数组中 +{ + path: 'role-management', + name: 'AdminRoleManagement', + component: AdminRoleManagement, + meta: { + title: '角色管理' + } +}, +{ + path: 'route-management', + name: 'AdminRouteManagement', + component: AdminRouteManagement, + meta: { + title: '路由管理' + } +}, +{ + path: 'user-list', + name: 'AdminUserList', + component: AdminUserList, + meta: { + title: '用户列表' + } +} +``` + +### 国际化支持 +- 在`locales/lang/zh-CN.js`和`en-US.js`中添加权限管理相关的翻译 +- 包括菜单名称和页面标题 + +## 预期效果 +- 侧边栏新增权限管理菜单,点击展开二级目录 +- 点击二级菜单项跳转到对应页面 +- 页面包含基本的布局结构 +- 支持中英文切换 +- 支持主题切换 + +## 后续优化方向 +- 实现角色管理功能(增删改查) +- 实现路由权限配置功能 +- 实现用户列表展示和管理功能 +- 添加表单验证和错误处理 +- 优化页面样式和交互体验 \ No newline at end of file diff --git a/.trae/documents/实现积分充值页面.md b/.trae/documents/实现积分充值页面.md new file mode 100644 index 0000000..59e3233 --- /dev/null +++ b/.trae/documents/实现积分充值页面.md @@ -0,0 +1,35 @@ +# 实现积分充值页面 + +## 1. 页面创建 +- 创建积分充值页面组件:`src/views/PointsRecharge.vue` +- 按照参考图2的设计风格实现页面布局 +- 包含两个积分套餐:300积分/$30/1年,1000积分/$80/1年 + +## 2. 路由配置 +- 在`src/router/index.js`中添加积分充值路由 +- 路径:`/points-recharge` +- 名称:`points-recharge` + +## 3. 翻译配置 +- 在`src/locales/index.js`中添加中英文翻译 +- 添加积分充值相关的翻译文本 +- 确保支持中英文切换 + +## 4. 页面设计 +- 实现深色主题的套餐卡片设计 +- 包含套餐名称、价格、有效期等信息 +- 添加购买按钮 +- 支持响应式设计 + +## 5. 功能实现 +- 套餐选择功能 +- 购买按钮交互 +- 支持中英文切换 + +## 6. 导航链接 +- 更新相关页面,确保"价格"链接指向积分充值页面 + +## 7. 测试 +- 测试页面显示效果 +- 测试中英文切换功能 +- 测试路由跳转 \ No newline at end of file diff --git a/.trae/documents/实现积分管理功能.md b/.trae/documents/实现积分管理功能.md new file mode 100644 index 0000000..c81875a --- /dev/null +++ b/.trae/documents/实现积分管理功能.md @@ -0,0 +1,121 @@ +# 实现积分管理功能 + +## 1. 侧边栏新增积分管理菜单 + +### 1.1 修改侧边栏组件 +- 文件:`d:\work\Aiproject\DeotalandAi\apps\FrontendDesigner\src\components\admin\AdminLayout.vue` +- 在侧边栏菜单中添加积分管理菜单项,使用合适的图标 +- 配置路由跳转至积分管理页面 + +### 1.2 更新路由配置 +- 文件:`d:\work\Aiproject\DeotalandAi\apps\FrontendDesigner\src\router\index.js` +- 新增积分管理路由,指向新创建的积分管理页面 +- 配置懒加载,优化性能 + +### 1.3 添加国际化翻译 +- 文件:`d:\work\Aiproject\DeotalandAi\apps\FrontendDesigner\src\locales\lang\zh-CN.js` +- 文件:`d:\work\Aiproject\DeotalandAi\apps\FrontendDesigner\src\locales\lang\en-US.js` +- 添加积分管理相关的翻译文本 + +## 2. 创建积分管理页面 + +### 2.1 创建页面文件 +- 文件:`d:\work\Aiproject\DeotalandAi\apps\FrontendDesigner\src\views\admin\AdminPointsManagement.vue` +- 使用 Element Plus 组件库构建页面 +- 实现积分包配置列表的展示 + +### 2.2 实现积分包配置列表 +- 表格展示:充值包、价格、有效期 +- 支持新增、编辑、删除操作 +- 实现分页、搜索功能 + +### 2.3 实现增删改查功能 +- 新增积分包配置表单 +- 编辑积分包配置弹窗 +- 删除确认功能 +- 数据模拟(或接口调用) + +## 3. 实现数据管理 + +### 3.1 模拟数据结构 +```javascript +const pointsPackages = [ + { + id: 1, + name: '300积分', + price: 30, + currency: '美金', + validityPeriod: '1年' + }, + { + id: 2, + name: '1000积分', + price: 80, + currency: '美金', + validityPeriod: '1年' + } +] +``` + +### 3.2 实现 CRUD 方法 +- 新增积分包 +- 编辑积分包 +- 删除积分包 +- 查询积分包列表 + +## 4. 样式优化 + +### 4.1 响应式设计 +- 确保页面在不同屏幕尺寸下正常显示 +- 表格列宽自适应 + +### 4.2 主题适配 +- 支持深色主题 +- 遵循现有项目的主题样式规范 + +## 5. 测试 + +### 5.1 功能测试 +- 验证新增、编辑、删除功能正常工作 +- 验证表格展示正确 +- 验证路由跳转正常 + +### 5.2 样式测试 +- 验证页面样式符合设计规范 +- 验证主题切换正常 + +## 6. 代码规范 + +### 6.1 遵循项目编码规范 +- 代码格式统一 +- 注释完整 +- 命名规范 + +### 6.2 优化性能 +- 合理使用组件缓存 +- 优化数据渲染 + +## 实施顺序 + +1. 添加国际化翻译 +2. 更新路由配置 +3. 修改侧边栏组件 +4. 创建积分管理页面 +5. 实现数据管理功能 +6. 样式优化 +7. 测试验证 + +## 预期效果 + +- 侧边栏新增积分管理菜单,点击可跳转至积分管理页面 +- 积分管理页面展示积分包配置列表,包含充值包、价格、有效期字段 +- 支持对积分包配置进行新增、编辑、删除操作 +- 页面样式美观,响应式设计,支持主题切换 + +## 技术栈 + +- Vue 3 + Composition API +- Element Plus +- Vue Router +- Vue I18n +- 模拟数据(或后端接口) \ No newline at end of file diff --git a/.trae/documents/实现邀请码复制带域名文案功能.md b/.trae/documents/实现邀请码复制带域名文案功能.md new file mode 100644 index 0000000..f1e6222 --- /dev/null +++ b/.trae/documents/实现邀请码复制带域名文案功能.md @@ -0,0 +1,34 @@ +## 实现邀请码复制带域名文案功能 + +### 问题分析 +当前点击复制邀请码按钮只会复制邀请码本身,而用户需要的是复制包含当前项目域名和邀请码参数的完整文案,以便分享给他人。 + +### 解决方案 +1. 修改 `copyInviteCode` 函数,使其生成包含域名和邀请码的文案 +2. 在 i18n 配置中添加相应的翻译项 +3. 确保文案格式支持中英文切换 +4. 实现动态获取当前项目域名 + +### 实现步骤 +1. 在 `index.vue` 中修改 `copyInviteCode` 函数,生成包含域名和邀请码的文案 +2. 在 `locales/index.js` 中添加中英文翻译项,用于生成邀请文案 +3. 实现动态获取当前项目域名的逻辑 +4. 测试复制功能,确保文案格式正确 +5. 确保中英文切换时文案格式正确 + +### 预期结果 +- 点击复制邀请码按钮时,会复制包含当前项目域名和邀请码参数的完整文案 +- 文案格式支持中英文切换 +- 保持现有的复制成功/失败提示 + +### 代码变更 +- 修改 `d:/work/Aiproject/DeotalandAi/apps/frontend/src/views/user/index.vue`: + - 更新 `copyInviteCode` 函数 + - 添加动态获取域名的逻辑 +- 修改 `d:/work/Aiproject/DeotalandAi/apps/frontend/src/locales/index.js`: + - 添加中文翻译项 `copyWithDomain` + - 添加英文翻译项 `copyWithDomain` + +### 文案格式示例 +- 中文:"邀请您使用Deotaland AI,注册时填写邀请码:{inviteCode},或直接点击链接注册:{domain}/register?inviteCode={inviteCode}" +- 英文:"Invite you to use Deotaland AI, fill in the invite code when registering: {inviteCode}, or click the link to register directly: {domain}/register?inviteCode={inviteCode}" \ No newline at end of file diff --git a/.trae/documents/更新导航栏链接.md b/.trae/documents/更新导航栏链接.md new file mode 100644 index 0000000..4b057a0 --- /dev/null +++ b/.trae/documents/更新导航栏链接.md @@ -0,0 +1,38 @@ +## 更新导航栏和添加Discord社交链接(使用注释) + +### 1. 分析当前结构 +- 导航栏:桌面版(第23-42行)和移动版(第64-89行) +- 国际化配置:第541-654行 +- 社交链接:footer部分(第460-468行) + +### 2. 实现步骤 + +#### 2.1 更新国际化配置 +- 修改第541-654行的i18n对象 +- **注释掉**nav对象中的现有键值对(不要删除) +- 添加新的导航项:Creator、D one、About us +- 确保中英文都更新 + +#### 2.2 更新桌面版导航栏 +- 修改第23-42行的导航链接 +- **注释掉**现有的三个导航项(创作者、社区、价格),不要删除 +- 添加新的三个导航项:Creator、D one、About us + +#### 2.3 更新移动版导航栏 +- 修改第64-89行的导航链接 +- **注释掉**现有的三个导航项(创作者、社区、价格),不要删除 +- 添加新的三个导航项:Creator、D one、About us + +#### 2.4 在社交链接中添加Discord +- 修改第462-467行的社交链接部分 +- 在TikTok链接后添加Discord链接 +- 使用合适的图标或文本显示 + +### 3. 注意事项 +- 使用HTML注释``注释现有导航项 +- 确保中英文替换正确 +- 保持代码结构清晰 +- 确保桌面版和移动版导航栏内容一致 +- 注意注释语法正确 +- 为Discord链接选择合适的显示方式(图标或文本) +- 保留所有现有代码,仅添加注释和新内容 \ No newline at end of file diff --git a/.trae/documents/添加规则方格子四个角点.md b/.trae/documents/添加规则方格子四个角点.md index 91f0b38..242f6d5 100644 --- a/.trae/documents/添加规则方格子四个角点.md +++ b/.trae/documents/添加规则方格子四个角点.md @@ -1,27 +1,38 @@ # 添加规则方格子四个角点 ## 实现目标 + 在画布上添加有规则的点,类似方格子但只展示四个角上的点,支持缩放、拖动交互,并适配亮色和暗色主题。 ## 实现步骤 ### 1. 修改.scene-container的背景样式 -- 将当前的随机装饰点替换为规则的方格子四个角点 -- 使用CSS radial-gradient创建点效果 -- 通过多个渐变层组合实现四个角的点 -- 设置合适的background-size控制方格大小 + +* 将当前的随机装饰点替换为规则的方格子四个角点 + +* 使用CSS radial-gradient创建点效果 + +* 通过多个渐变层组合实现四个角的点 + +* 设置合适的background-size控制方格大小 ### 2. 适配亮色主题 -- 为亮色主题设置合适的点颜色和大小 -- 确保点与背景对比度适中 + +* 为亮色主题设置合适的点颜色和大小 + +* 确保点与背景对比度适中 ### 3. 适配暗色主题 -- 为暗色主题单独设置点颜色 -- 保持与暗色背景的良好对比度 + +* 为暗色主题单独设置点颜色 + +* 保持与暗色背景的良好对比度 ### 4. 确保交互兼容性 -- 点网格应随画布缩放和拖动保持正确位置 -- 不影响现有卡片元素的交互 + +* 点网格应随画布缩放和拖动保持正确位置 + +* 不影响现有卡片元素的交互 ## 技术实现 @@ -58,8 +69,14 @@ html.dark .scene-container { ``` ## 预期效果 -- 画布上出现规则排列的方格子,每个方格的四个角上有一个点 -- 方格大小为50px x 50px,点大小为2px -- 点的颜色适配当前主题 -- 缩放和拖动画布时,点网格保持正确的位置关系 -- 不影响现有卡片元素的交互 \ No newline at end of file + +* 画布上出现规则排列的方格子,每个方格的四个角上有一个点 + +* 方格大小为50px x 50px,点大小为2px + +* 点的颜色适配当前主题 + +* 缩放和拖动画布时,点网格保持正确的位置关系 + +* 不影响现有卡片元素的交互 + diff --git a/.trae/documents/添加邀请码列表功能.md b/.trae/documents/添加邀请码列表功能.md new file mode 100644 index 0000000..66bd7bc --- /dev/null +++ b/.trae/documents/添加邀请码列表功能.md @@ -0,0 +1,56 @@ +# 实现计划 + +## 1. 组件结构调整 +- 在 `AdminUserInvites.vue` 组件中添加 Element Plus 的 `el-tabs` 组件,创建两个标签页 +- 标签页1:邀请码列表 +- 标签页2:邀请用户列表(现有功能) + +## 2. 邀请码列表实现 + +### 2.1 表格结构 +- 添加 `el-table` 组件,展示邀请码数据 +- 表格列包括:ID、用户名、邮箱、邀请码、使用状态、邀请用户、使用时间、创建时间 +- 使用 `el-loading` 处理加载状态 + +### 2.2 数据获取与分页 +- 使用 `getInviteCodeList` 方法获取邀请码数据 +- 添加分页组件,支持页码和每页条数调整 +- 实现分页相关的事件处理函数 + +### 2.3 筛选功能 +- 添加筛选表单,包含: + - 用户ID输入框 + - 邀请码输入框 + - 使用状态下拉选择器 + - 查询和重置按钮 + +### 2.4 生成邀请码功能 +- 添加"生成邀请码"按钮 +- 点击后弹出 `el-dialog` 对话框 +- 对话框中包含数量输入框和确认/取消按钮 +- 调用 `generateInviteCode` 方法生成邀请码 + +## 3. 邀请用户列表调整 +- 为现有列表添加"邀请用户列表"标题 +- 保持原有功能不变 + +## 4. 样式优化 +- 调整表格样式,确保两个列表视觉一致性 +- 优化筛选区域和按钮布局 +- 确保整体页面布局美观合理 + +## 5. 功能测试 +- 测试邀请码列表的数据加载和分页 +- 测试筛选功能是否正常工作 +- 测试生成邀请码功能是否正常 +- 测试邀请用户列表功能是否不受影响 + +## 6. 文件修改 +- 仅修改 `d:/work/Aiproject/DeotalandAi/apps/FrontendDesigner/src/views/admin/AdminUsers/AdminUserInvites.vue` 文件 + +# 预期效果 + +- 页面顶部显示两个标签页,可切换查看不同列表 +- 邀请码列表支持筛选和生成邀请码功能 +- 现有邀请用户列表功能保持不变 +- 整体布局美观,用户体验良好 \ No newline at end of file diff --git a/.trae/documents/添加邀请规则到邀请信息区域.md b/.trae/documents/添加邀请规则到邀请信息区域.md new file mode 100644 index 0000000..41d89ff --- /dev/null +++ b/.trae/documents/添加邀请规则到邀请信息区域.md @@ -0,0 +1,79 @@ +## 实现计划 + +### 1. 分析现有代码结构 +- 定位邀请信息区域:`invitation-section` 类名的 `div` +- 现有内容包括:邀请人数、邀请码卡片、邀请相关列表 +- 将在 `invitation-related-section` 后添加新的邀请规则区域 + +### 2. 设计HTML结构 +在 `invitation-related-section` 后添加新的邀请规则区域: +```html +
+

邀请规则

+ + +
+

免费会员邀请规则

+
    +
  • 每成功邀请 1 名用户注册:
  • +
      +
    • 奖励 300 积分
    • +
    +
+
+ + +
+

达人会员邀请规则

+

当达人邀请码成功邀请 1 名新用户注册:

+
    +
  1. 拥有免费会员全部权限
  2. +
  3. 额外具备带货佣金能力
  4. +
  5. 立即奖励 300 积分
  6. +
  7. 建立绑定关系(达人 ←→ 用户)
  8. +
  9. 被邀请用户后续下单:
  10. +
  11. 达人可获得 15% 佣金
  12. +
+
+ + +
+

成为达人会员

+
+ +
达人会员二维码
+
+
+
+``` + +### 3. 添加CSS样式 +- 为 `invitation-rules` 添加容器样式,保持与现有模块一致 +- 为 `role-rules` 添加基础样式,区分免费会员和达人会员规则 +- 为不同类型的列表(ul/ol)添加自定义样式 +- 为成为达人会员模块添加样式,包含二维码容器 +- 支持浅色和暗色主题 + +### 4. 样式设计要点 +- 保持与现有设计语言一致,使用紫色主题色 +- 免费会员规则使用蓝色调,达人会员规则使用紫色调 +- 添加适当的间距、圆角和边框 +- 列表项使用自定义项目符号增强视觉效果 +- 二维码容器添加占位样式 +- 支持响应式设计 + +### 5. 实现步骤 +1. 在模板中添加邀请规则HTML结构,同时展示两个规则 +2. 添加条件判断,仅对免费会员显示成为达人会员模块 +3. 在CSS部分添加对应的样式 +4. 确保支持暗色主题 +5. 检查响应式设计在不同屏幕尺寸下的表现 + +### 6. 预期效果 +- 同时展示免费会员和达人会员的邀请规则 +- 清晰区分两个规则区块 +- 仅免费会员能看到成为达人会员的二维码模块 +- 整体设计与现有界面风格统一 +- 支持深色模式切换 + +这个实现将清晰地向所有用户展示完整的邀请规则,同时根据用户角色提供个性化的升级入口。 \ No newline at end of file diff --git a/.trae/documents/用户中心页面重构.md b/.trae/documents/用户中心页面重构.md new file mode 100644 index 0000000..fc56733 --- /dev/null +++ b/.trae/documents/用户中心页面重构.md @@ -0,0 +1,37 @@ +# 用户中心页面重构计划 + +## 1. 布局调整 +- 将当前的 `grid-template-columns: 1fr 1fr` 两列卡片布局改为 `flex-direction: column` 垂直布局 +- 移除卡片样式,改为更简洁的区块划分,使用渐变背景和微动画增强灵动性 +- 调整间距和对齐方式,使内容垂直堆叠,一行一行清晰展示 + +## 2. 添加用户基本信息区域 +- **头像功能**:展示当前头像,添加点击修改功能(使用 Element Plus 的上传组件) +- **昵称功能**:展示当前昵称,添加编辑功能(使用可编辑文本组件) +- **邮箱展示**:显示当前绑定的邮箱账号 +- **角色标识**:添加角色徽章,参考 `.role-badge` 样式,显示"达人会员"或"免费会员" + +## 3. 优化现有功能区域 +- 保持积分信息、邀请信息、达人会员专属区域的原有功能 +- 将这些区域改为垂直排列,使用更灵动的样式 +- 添加标题和内容的视觉层次,增强可读性 + +## 4. 样式优化 +- 使用渐变色背景和圆角设计,增强灵动感 +- 添加悬停效果和过渡动画,提升交互体验 +- 保持暗色主题支持,确保在两种主题下都有良好表现 +- 优化表格样式,使其更符合新的设计风格 + +## 5. 国际化支持 +- 为新增的文本内容添加中英文翻译 +- 确保所有动态文本都使用 `$t()` 国际化标签 + +## 6. 响应式设计 +- 优化在不同屏幕尺寸下的布局和显示效果 +- 确保移动端有良好的用户体验 + +## 7. 技术实现 +- 使用 Vue 3 Composition API +- 集成 Element Plus 组件库的相关组件 +- 保持代码的可维护性和扩展性 +- 确保与现有项目结构和代码规范保持一致 \ No newline at end of file diff --git a/.trae/documents/角色管理和权限管理设计与对接.md b/.trae/documents/角色管理和权限管理设计与对接.md new file mode 100644 index 0000000..c86c356 --- /dev/null +++ b/.trae/documents/角色管理和权限管理设计与对接.md @@ -0,0 +1,76 @@ +# 角色管理和权限管理设计与对接计划(含详情页面) + +## 一、角色管理模块设计与对接 + +### 1. 页面设计优化 +- 修改现有角色管理页面,调整表格字段以匹配后端API返回数据 +- 新增角色详情展示页面,用于查看和编辑角色信息 +- 设计角色创建/编辑表单,支持完整的角色属性设置 + +### 2. API对接实现 +- 实现角色列表获取功能,对接`getRoleList`方法 +- 实现角色创建功能,对接`createRole`方法 +- 实现角色编辑功能,对接`updateRole`方法 +- 实现角色删除功能,对接`deleteRole`方法 +- 实现角色详情获取功能,对接`getRoleDetail`方法 + +### 3. 新增角色详情页面 +- 创建角色详情路由 `/admin/role-management/:roleId` +- 设计角色详情展示页面,包括角色基本信息和权限分配情况 +- 实现角色权限分配功能,对接`assignPermissionToRole`方法 + +## 二、权限管理模块设计与对接 + +### 1. 页面设计 +- 将现有路由管理页面替换为权限管理页面 +- 设计权限列表展示表格,显示权限的详细信息 +- 新增权限详情展示页面,用于查看和编辑权限信息 +- 设计权限创建/编辑表单,支持完整的权限属性设置 + +### 2. API对接实现 +- 实现权限列表获取功能,对接`getPermissionList`方法 +- 实现权限创建功能,对接`addPermission`方法 +- 实现权限编辑功能,对接`updatePermission`方法 +- 实现权限删除功能,对接`deletePermission`方法 +- 实现权限详情获取功能,对接`getPermissionDetail`方法 + +### 3. 新增权限详情页面 +- 创建权限详情路由 `/admin/permission-management/:permissionId` +- 设计权限详情展示页面,显示权限的完整信息 + +## 三、组件和工具准备 + +### 1. 组件设计 +- 设计角色创建/编辑对话框组件 +- 设计权限创建/编辑对话框组件 +- 设计权限分配树形选择组件 +- 设计角色详情和权限详情展示组件 + +### 2. 工具类调用 +- 确保AdminRoleManagement类的方法被正确调用 +- 处理API返回数据的格式化和错误处理 +- 实现响应式设计,适配不同屏幕尺寸 + +## 四、路由配置调整 + +### 1. 路由修改 +- 保留现有角色管理路由 `/admin/role-management` +- 将现有路由管理路由 `/admin/route-management` 替换为权限管理路由 `/admin/permission-management` +- 新增角色详情路由 `/admin/role-management/:roleId` +- 新增权限详情路由 `/admin/permission-management/:permissionId` + +## 五、实现步骤 + +1. 先完成角色管理页面的API对接和功能实现 +2. 新增角色详情页面并实现API对接 +3. 实现权限管理页面,替换现有路由管理页面 +4. 新增权限详情页面并实现API对接 +5. 实现角色权限分配功能 +6. 进行整体测试和优化 + +## 六、注意事项 + +- 保持代码风格与现有项目一致 +- 确保所有功能都有适当的错误处理 +- 遵循现有项目的国际化规范 +- 不对用户列表模块进行任何修改 \ No newline at end of file diff --git a/.trae/documents/邀请码样式重构.md b/.trae/documents/邀请码样式重构.md new file mode 100644 index 0000000..e824a10 --- /dev/null +++ b/.trae/documents/邀请码样式重构.md @@ -0,0 +1,42 @@ +# 邀请码样式重构计划 + +## 1. 数据结构修改 +- 将单个邀请码改为数组形式,包含3个邀请码 +- 更新用户数据模型,添加邀请码有效期等额外信息 + +## 2. 模板布局调整 +- 将当前的单个邀请码展示改为横向排列的卡片布局 +- 使用 flex 或 grid 布局实现3个邀请码的横向排列 +- 确保在不同屏幕尺寸下有良好的响应式表现 + +## 3. 样式设计 +- **卡片样式**:使用渐变背景,参考图中的蓝绿色渐变效果 +- **邀请码文本**:居中显示,大号字体,清晰易读 +- **复制按钮**:底部添加"复制邀请码"按钮,带有悬停效果 +- **品牌标识**:每个卡片底部添加品牌logo或名称 + +## 4. 功能实现 +- 添加邀请码复制功能,点击按钮自动复制到剪贴板 +- 显示复制成功的反馈信息 +- 添加悬停效果,提升交互体验 + +## 5. 响应式设计 +- 在桌面端显示3个横向排列的邀请码卡片 +- 在平板端根据屏幕宽度调整卡片大小 +- 在移动端改为垂直排列 + +## 6. 暗色主题支持 +- 确保在暗色主题下邀请码卡片有良好的视觉效果 +- 调整渐变颜色和文字颜色,适配暗色背景 + +## 7. 代码实现 +- 修改模板结构,使用 v-for 循环渲染3个邀请码 +- 添加复制功能的事件处理 +- 设计符合参考图风格的 CSS 样式 +- 确保与现有页面设计风格保持一致 + +## 8. 测试验证 +- 检查在不同屏幕尺寸下的显示效果 +- 测试复制功能是否正常工作 +- 验证暗色主题下的表现 +- 确保与页面其他元素的样式协调 \ No newline at end of file diff --git a/apps/FrontendDesigner/src/App.vue b/apps/FrontendDesigner/src/App.vue index 84ffbc2..eeb7561 100644 --- a/apps/FrontendDesigner/src/App.vue +++ b/apps/FrontendDesigner/src/App.vue @@ -115,6 +115,22 @@ onUnmounted(() => { unwatchLocale() unwatchTheme() }) +const loading = ref(false); +const qmLoading = ref(false); +const closeMethods = { + close: ()=>{ + loading.value = false + qmLoading.value = false; + } +} +window.setElLoading = (qp=false)=>{ + if(qp){ + qmLoading.value = true + }else{ + loading.value = true + } + return closeMethods +} diff --git a/apps/FrontendDesigner/src/components/admin/AdminLayout.vue b/apps/FrontendDesigner/src/components/admin/AdminLayout.vue index 743dfaa..60462a5 100644 --- a/apps/FrontendDesigner/src/components/admin/AdminLayout.vue +++ b/apps/FrontendDesigner/src/components/admin/AdminLayout.vue @@ -100,6 +100,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -139,7 +171,11 @@ import { Document, ShoppingCart, UserFilled, - EditPen + EditPen, + Lock, + Key, + List, + Coin } from '@element-plus/icons-vue' import { AdminLogin } from '../../views/AdminLogin/AdminLogin' const { t, locale } = useI18n(); @@ -158,7 +194,8 @@ const activeMenu = computed(() => route.path) // 定义子菜单映射(父菜单 index -> 子菜单 indexes) const submenuMap = { - '/admin/orders': ['/admin/content-review', '/admin/disassembly-orders', '/admin/orders'] + '/admin/orders': ['/admin/content-review', '/admin/disassembly-orders', '/admin/orders'], + '/admin/permission': ['/admin/role-management', '/admin/permission-management', '/admin/user-list'] } // 当前应该打开的父菜单 keys(响应式) diff --git a/apps/FrontendDesigner/src/locales/lang/en-US.js b/apps/FrontendDesigner/src/locales/lang/en-US.js index c5767a3..bb42afe 100644 --- a/apps/FrontendDesigner/src/locales/lang/en-US.js +++ b/apps/FrontendDesigner/src/locales/lang/en-US.js @@ -51,8 +51,15 @@ export default { preview: 'Preview Model', delete: 'Delete Model' }, + + // User Center + userCenter: { + points: { + pointsList: 'Points List' + } + }, - // 应用 + // App app: { title: 'Vue3 Frontend Designer Tool', description: 'Modern, responsive frontend design tool' @@ -227,7 +234,10 @@ export default { error: 'Error', success: 'Success', warning: 'Warning', - info: 'Info' + info: 'Info', + yes: 'Yes', + no: 'No', + action: 'Action' }, layout: { dashboard: 'Dashboard', @@ -236,10 +246,91 @@ export default { orders: 'Order Management', users: 'User Management', disassemblyOrders: 'Order Processing', + permission: 'Permission Management', + roleManagement: 'Role Management', + routeManagement: 'Route Management', + permissionManagement: 'Permission Management', + userList: 'User List', + pointsManagement: 'Points Management', + commissionManagement: 'Commission Management', logout: 'Logout', profile: 'Profile', settings: 'Settings' }, + roleManagement: { + title: 'Role Management', + roleList: 'Role List', + addRole: 'Add Role', + editRole: 'Edit Role', + roleName: 'Role Name', + roleCode: 'Role Code', + description: 'Description', + createTime: 'Create Time', + updateTime: 'Update Time', + isSystem: 'System Role', + isActive: 'Role Status', + roleNameRequired: 'Please enter role name', + roleCodeRequired: 'Please enter role code', + getListFailed: 'Failed to get role list', + getDetailFailed: 'Failed to get role detail', + deleteConfirm: 'Are you sure to delete role {roleName}?', + basicInfo: 'Basic Info' + }, + routeManagement: { + title: 'Route Management', + routeList: 'Route List', + path: 'Path', + name: 'Name', + title: 'Title', + requiresAuth: 'Requires Auth', + buttonPermissions: 'Button Permissions', + configure: 'Configure' + }, + permissionManagement: { + title: 'Permission Management', + permissionList: 'Permission List', + addPermission: 'Add Permission', + editPermission: 'Edit Permission', + permissionName: 'Permission Name', + permissionCode: 'Permission Code', + module: 'Module', + action: 'Action', + resource: 'Resource', + description: 'Description', + createTime: 'Create Time', + updateTime: 'Update Time', + isActive: 'Permission Status', + permissionNameRequired: 'Please enter permission name', + permissionCodeRequired: 'Please enter permission code', + moduleRequired: 'Please enter module', + actionRequired: 'Please enter action', + resourceRequired: 'Please enter resource', + getListFailed: 'Failed to get permission list', + getDetailFailed: 'Failed to get permission detail', + deleteConfirm: 'Are you sure to delete permission {permissionName}?', + assignPermission: 'Assign Permission', + permissionAssign: 'Permission Assign', + assignSuccess: 'Permission assigned successfully', + assignFailed: 'Failed to assign permission', + basicInfo: 'Basic Info' + }, + userList: { + title: 'User List Management', + userList: 'User List', + addUser: 'Add User', + searchPlaceholder: 'Search username, nickname or email', + username: 'Username', + nickname: 'Nickname', + email: 'Email', + phone: 'Phone', + role: 'Role', + status: 'Status', + createTime: 'Create Time', + admin: 'Admin', + user: 'User', + active: 'Active', + inactive: 'Inactive' + }, dashboard: { title: 'Dashboard', subtitle: 'System Overview and Key Metrics', @@ -573,6 +664,50 @@ export default { completeDisassemblySuccess: 'Disassembly completed successfully', completeDisassemblyError: 'Failed to complete disassembly, please try again' } + }, + pointsManagement: { + title: 'Points Management', + pointsPackageList: 'Points Package List', + addPointsPackage: 'Add Points Package', + editPointsPackage: 'Edit Points Package', + deletePointsPackage: 'Delete Points Package', + confirmDelete: 'Are you sure you want to delete this points package?', + pointsPackage: 'Points Package', + price: 'Price', + validityPeriod: 'Validity Period', + currency: 'Currency', + actions: 'Actions', + save: 'Save', + cancel: 'Cancel', + add: 'Add', + edit: 'Edit', + delete: 'Delete', + name: 'Package Name', + points: 'Points', + usd: 'USD', + year: 'Year' + }, + commissionManagement: { + title: 'Commission Management', + commissionRate: 'Commission Rate', + saveRate: 'Save', + defaultRate: '15%', + rateSaved: 'Commission rate saved successfully', + list: { + title: 'Commission List', + creatorName: 'Creator Name', + userId: 'User ID', + actualPayment: 'Actual Payment', + productAmount: 'Product Amount', + commission: 'Commission', + status: 'Status', + action: 'Action', + approve: 'Approve', + reject: 'Reject', + pending: 'Pending', + approved: 'Approved', + rejected: 'Rejected' + } } } } \ No newline at end of file diff --git a/apps/FrontendDesigner/src/locales/lang/zh-CN.js b/apps/FrontendDesigner/src/locales/lang/zh-CN.js index 5bb962b..0201cc3 100644 --- a/apps/FrontendDesigner/src/locales/lang/zh-CN.js +++ b/apps/FrontendDesigner/src/locales/lang/zh-CN.js @@ -245,19 +245,103 @@ orderManagement: { error: '错误', success: '成功', warning: '警告', - info: '信息' + info: '信息', + yes: '是', + no: '否', + action: '操作' }, layout: { - dashboard: '仪表板', - content: '内容审核', - contentReview: '订单审核', - orders: '订单管理', - users: '用户管理', - disassemblyOrders: '订单处理', - logout: '退出登录', - profile: '个人资料', - settings: '设置', - notifications: '通知' + dashboard: '仪表板', + content: '内容审核', + contentReview: '订单审核', + orders: '订单管理', + users: '用户管理', + disassemblyOrders: '订单处理', + permission: '权限管理', + roleManagement: '角色管理', + routeManagement: '路由管理', + permissionManagement: '权限管理', + userList: '用户列表', + pointsManagement: '充值包管理', + commissionManagement: '佣金管理', + logout: '退出登录', + profile: '个人资料', + settings: '设置', + notifications: '通知' + }, + roleManagement: { + title: '角色管理', + roleList: '角色列表', + addRole: '添加角色', + editRole: '编辑角色', + roleName: '角色名称', + roleCode: '角色代码', + description: '描述', + createTime: '创建时间', + updateTime: '更新时间', + isSystem: '系统角色', + isActive: '角色状态', + roleNameRequired: '请输入角色名称', + roleCodeRequired: '请输入角色代码', + getListFailed: '获取角色列表失败', + getDetailFailed: '获取角色详情失败', + deleteConfirm: '确定要删除角色{roleName}吗?', + basicInfo: '基本信息' + }, + routeManagement: { + title: '路由管理', + routeList: '路由列表', + path: '路径', + name: '名称', + title: '标题', + requiresAuth: '需要认证', + buttonPermissions: '按钮权限', + configure: '配置' + }, + permissionManagement: { + title: '权限管理', + permissionList: '权限列表', + addPermission: '添加权限', + editPermission: '编辑权限', + permissionName: '权限名称', + permissionCode: '权限代码', + module: '所属模块', + action: '操作类型', + resource: '资源名称', + description: '描述', + createTime: '创建时间', + updateTime: '更新时间', + isActive: '权限状态', + permissionNameRequired: '请输入权限名称', + permissionCodeRequired: '请输入权限代码', + moduleRequired: '请输入所属模块', + actionRequired: '请输入操作类型', + resourceRequired: '请输入资源名称', + getListFailed: '获取权限列表失败', + getDetailFailed: '获取权限详情失败', + deleteConfirm: '确定要删除权限{permissionName}吗?', + assignPermission: '分配权限', + permissionAssign: '权限分配', + assignSuccess: '权限分配成功', + assignFailed: '权限分配失败', + basicInfo: '基本信息' + }, + userList: { + title: '用户列表管理', + userList: '用户列表', + addUser: '添加用户', + searchPlaceholder: '搜索用户名、昵称或邮箱', + username: '用户名', + nickname: '昵称', + email: '邮箱', + phone: '电话', + role: '角色', + status: '状态', + createTime: '创建时间', + admin: '管理员', + user: '普通用户', + active: '活跃', + inactive: '非活跃' }, content: { title: '内容管理', @@ -525,6 +609,7 @@ orderManagement: { username: '用户名', email: '邮箱', phone: '手机号', + userRole: '用户角色', inviteCode: '邀请码', invitedBy: '邀请人', inviteList: '邀请列表', @@ -568,6 +653,50 @@ orderManagement: { master: '大师级创作者' }, selectCreatorLevel: '选择创作者等级' + }, + pointsManagement: { + title: '充值包管理', + pointsPackageList: '充值包配置列表', + addPointsPackage: '新增充值包', + editPointsPackage: '编辑充值包', + deletePointsPackage: '删除充值包', + confirmDelete: '确定要删除该充值包吗?', + pointsPackage: '充值包', + price: '价格', + validityPeriod: '有效期', + currency: '币种', + actions: '操作', + save: '保存', + cancel: '取消', + add: '新增', + edit: '编辑', + delete: '删除', + name: '充值包名称', + points: '积分数量', + usd: '美金', + year: '年' + }, + commissionManagement: { + title: '佣金管理', + commissionRate: '佣金比例', + saveRate: '保存', + defaultRate: '15%', + rateSaved: '佣金比例保存成功', + list: { + title: '佣金列表', + creatorName: '达人名称', + userId: '用户ID', + actualPayment: '实际支付金额', + productAmount: '商品金额', + commission: '佣金', + status: '状态', + action: '操作', + approve: '审核通过', + reject: '拒绝', + pending: '待审核', + approved: '已通过', + rejected: '已拒绝' + } } }, @@ -637,5 +766,11 @@ orderManagement: { loadError: '模型加载失败', preview: '预览', delete: '删除' + }, + // 用户中心 + userCenter: { + points: { + pointsList: '积分列表' + } } } \ No newline at end of file diff --git a/apps/FrontendDesigner/src/main.js b/apps/FrontendDesigner/src/main.js index b9d01e3..a4d92b1 100644 --- a/apps/FrontendDesigner/src/main.js +++ b/apps/FrontendDesigner/src/main.js @@ -9,15 +9,16 @@ import 'element-plus/theme-chalk/dark/css-vars.css' import './assets/styles/global.css' import './assets/styles/responsive.css' import './assets/styles/themes.css' - +import dtUI from '@deotaland/ui' +import '@deotaland/ui/style.css' // 导入Element Plus图标 import * as ElementPlusIconsVue from '@element-plus/icons-vue' // 导入i18n配置 import i18n from './locales/i18n' - // 创建应用实例 const app = createApp(App) +app.use(dtUI) window.setElMessage = (options={})=>{ ElMessage[options.type || 'info'](options.message || '请求失败') } diff --git a/apps/FrontendDesigner/src/router/index.js b/apps/FrontendDesigner/src/router/index.js index 93def76..555d5b6 100644 --- a/apps/FrontendDesigner/src/router/index.js +++ b/apps/FrontendDesigner/src/router/index.js @@ -13,6 +13,13 @@ const AdminUserInvites = () => import('@/views/admin/AdminUsers/AdminUserInvites const AdminContentReview = () => import('@/views/admin/AdminContentReview.vue') const AdminDisassemblyOrders = () => import('@/views/admin/AdminDisassemblyOrders.vue') const AdminDisassemblyDetail = () => import('@/views/admin/AdminDisassemblyDetail/AdminDisassemblyDetail.vue') +const AdminRoleManagement = () => import('@/views/admin/AdminRoleManagement/AdminRoleManagement.vue') +const AdminRoleDetail = () => import('@/views/admin/AdminRoleManagement/AdminRoleDetail.vue') +const AdminPermissionManagement = () => import('@/views/admin/AdminPermissionManagement/AdminPermissionManagement.vue') +const AdminPermissionDetail = () => import('@/views/admin/AdminPermissionManagement/AdminPermissionDetail.vue') +const AdminUserList = () => import('@/views/admin/AdminUserList.vue') +const AdminPointsManagement = () => import('@/views/admin/AdminPointsManagement.vue') +const AdminCommissionManagement = () => import('@/views/admin/AdminCommissionManagement.vue') const routes = [ { @@ -115,6 +122,62 @@ const routes = [ meta: { title: '拆件详情' } + }, + { + path: 'role-management', + name: 'AdminRoleManagement', + component: AdminRoleManagement, + meta: { + title: '角色管理' + } + }, + { + path: 'role-management/:roleId', + name: 'AdminRoleDetail', + component: AdminRoleDetail, + meta: { + title: '角色详情' + } + }, + { + path: 'permission-management', + name: 'AdminPermissionManagement', + component: AdminPermissionManagement, + meta: { + title: '权限管理' + } + }, + { + path: 'permission-management/:permissionId', + name: 'AdminPermissionDetail', + component: AdminPermissionDetail, + meta: { + title: '权限详情' + } + }, + { + path: 'user-list', + name: 'AdminUserList', + component: AdminUserList, + meta: { + title: '用户列表' + } + }, + { + path: 'points-management', + name: 'AdminPointsManagement', + component: AdminPointsManagement, + meta: { + title: '充值包管理' + } + }, + { + path: 'commission-management', + name: 'AdminCommissionManagement', + component: AdminCommissionManagement, + meta: { + title: '佣金管理' + } } ] }, @@ -140,7 +203,10 @@ const router = createRouter({ } } }) - +window.Redirectlogin = () => { + localStorage.removeItem('token') + router.push('/login') +} // 路由守卫 - 认证检查 router.beforeEach((to, from, next) => { // localStorage.setItem('token','123') diff --git a/apps/FrontendDesigner/src/views/admin/AdminCommissionManagement.vue b/apps/FrontendDesigner/src/views/admin/AdminCommissionManagement.vue new file mode 100644 index 0000000..dc4aa55 --- /dev/null +++ b/apps/FrontendDesigner/src/views/admin/AdminCommissionManagement.vue @@ -0,0 +1,492 @@ + + + + + \ No newline at end of file diff --git a/apps/FrontendDesigner/src/views/admin/AdminPermissionManagement/AdminPermissionDetail.vue b/apps/FrontendDesigner/src/views/admin/AdminPermissionManagement/AdminPermissionDetail.vue new file mode 100644 index 0000000..768e07a --- /dev/null +++ b/apps/FrontendDesigner/src/views/admin/AdminPermissionManagement/AdminPermissionDetail.vue @@ -0,0 +1,230 @@ + + + + + \ No newline at end of file diff --git a/apps/FrontendDesigner/src/views/admin/AdminPermissionManagement/AdminPermissionManagement.vue b/apps/FrontendDesigner/src/views/admin/AdminPermissionManagement/AdminPermissionManagement.vue new file mode 100644 index 0000000..448770d --- /dev/null +++ b/apps/FrontendDesigner/src/views/admin/AdminPermissionManagement/AdminPermissionManagement.vue @@ -0,0 +1,284 @@ + + + + + \ No newline at end of file diff --git a/apps/FrontendDesigner/src/views/admin/AdminPointsManagement.vue b/apps/FrontendDesigner/src/views/admin/AdminPointsManagement.vue new file mode 100644 index 0000000..84d5ef4 --- /dev/null +++ b/apps/FrontendDesigner/src/views/admin/AdminPointsManagement.vue @@ -0,0 +1,288 @@ + + + + + \ No newline at end of file diff --git a/apps/FrontendDesigner/src/views/admin/AdminRoleManagement/AdminRoleDetail.vue b/apps/FrontendDesigner/src/views/admin/AdminRoleManagement/AdminRoleDetail.vue new file mode 100644 index 0000000..11afed8 --- /dev/null +++ b/apps/FrontendDesigner/src/views/admin/AdminRoleManagement/AdminRoleDetail.vue @@ -0,0 +1,247 @@ + + + + + \ No newline at end of file diff --git a/apps/FrontendDesigner/src/views/admin/AdminRoleManagement/AdminRoleManagement.vue b/apps/FrontendDesigner/src/views/admin/AdminRoleManagement/AdminRoleManagement.vue new file mode 100644 index 0000000..f25833b --- /dev/null +++ b/apps/FrontendDesigner/src/views/admin/AdminRoleManagement/AdminRoleManagement.vue @@ -0,0 +1,271 @@ + + + + + \ No newline at end of file diff --git a/apps/FrontendDesigner/src/views/admin/AdminRoleManagement/index.js b/apps/FrontendDesigner/src/views/admin/AdminRoleManagement/index.js new file mode 100644 index 0000000..5ae5089 --- /dev/null +++ b/apps/FrontendDesigner/src/views/admin/AdminRoleManagement/index.js @@ -0,0 +1,231 @@ +import { adminApi,requestUtils} from '@deotaland/utils'; +export class AdminRoleManagement { + constructor() { + } + // 创建角色 + async createRole(data) { + let parmas = { + "roleCode": data.roleCode, + "roleName": data.roleName, + "description": data.description, + "isSystem": data.isSystem, + "isActive": data.isActive, +} + return await requestUtils.common(adminApi.default.addRole, parmas); + } + // 更新角色 + async updateRole(data) { + let parmas = { + "id": data.id, + "roleCode": data.roleCode, + "roleName": data.roleName, + "description": data.description, + "isSystem": data.isSystem, + "isActive": data.isActive, +} + return await requestUtils.common(adminApi.default.updateRole, parmas); + } + // 删除角色 + async deleteRole(data) { + // 角色ID数组,拼接成逗号分隔字符串作为路径参数 + let roleIds = data.roleIds.join(','); + let requestUrl = { + method: adminApi.default.deleteRole.method, + url: adminApi.default.deleteRole.url + '/' + roleIds, + } + return await requestUtils.common(requestUrl); + } + // 获取角色列表 + async getRoleList() { + return await requestUtils.common(adminApi.default.getRoleList); + /** + 返回示例: + { + "code": 0, + "success": true, + "data": [ + { + "id": 9007199254740991, + "roleCode": "string", + "roleName": "string", + "description": "string", + "isSystem": true, + "isActive": true, + "createdAt": "2025-12-18T05:10:16.550Z", + "updatedAt": "2025-12-18T05:10:16.550Z" + } + ], + "message": "操作成功" +} + */ + + } + //为用户分配角色 + async assignRoleToUser(data) { + let requestUrl = { + method: adminApi.default.assignRoleToUser.method, + url: adminApi.default.assignRoleToUser.url.replace('{userId}', data.userId), + } + return await requestUtils.common(requestUrl, data.roleIds); + } + //查询角色详情 + async getRoleDetail(data) { + let requestUrl = { + method: adminApi.default.getRoleDetail.method, + url: adminApi.default.getRoleDetail.url.replace('{roleId}', data.roleId), + } + return await requestUtils.common(requestUrl); + /** + 返回示例: + { + "code": 0, + "success": true, + "data": { + "id": 9007199254740991, + "roleCode": "string", + "roleName": "string", + "description": "string", + "isSystem": true, + "isActive": true, + "createdAt": "2025-12-18T05:14:59.476Z", + "updatedAt": "2025-12-18T05:14:59.476Z" + }, + "message": "操作成功" +} + */ + } + //根据用户ID查询角色列表 + async getRolesByUserId(data) { + let requestUrl = { + method: adminApi.default.getRolesByUserId.method, + url: adminApi.default.getRolesByUserId.url.replace('{userId}', data.userId), + } + return await requestUtils.common(requestUrl); + /** + 返回示例: + { + "code": 0, + "success": true, + "data": [ + { + "id": 9007199254740991, + "roleCode": "string", + "roleName": "string", + "description": "string", + "isSystem": true, + "isActive": true, + "createdAt": "2025-12-18T05:16:25.955Z", + "updatedAt": "2025-12-18T05:16:25.955Z" + } + ], + "message": "操作成功" +} + */ + } + //修改权限 + async updatePermission(data) { + return await requestUtils.common(adminApi.default.updatePermission, data); + } + //新增权限 + async addPermission(data) { + let parmas = { + permCode: data.permCode, + permName: data.permName, + description: data.description, + module: data.module, + action: data.action, + resource: data.resource, + isActive: data.isActive, +} + return await requestUtils.common(adminApi.default.addPermission, parmas); + } + //为角色分配权限 + async assignPermissionToRole(data) { + let requestUrl = { + method: adminApi.default.assignPermissionToRole.method, + url: adminApi.default.assignPermissionToRole.url.replace('{roleId}', data.roleId), + } + return await requestUtils.common(requestUrl, data.permissionIds); + } + //查询权限详情 + async getPermissionDetail(data) { + let requestUrl = { + method: adminApi.default.getPermissionDetail.method, + url: adminApi.default.getPermissionDetail.url.replace('{permissionId}', data.permissionId), + } + return await requestUtils.common(requestUrl); + /** + 返回示例: + { + "code": 0, + "success": true, + "data": { + "id": 9007199254740991, + "permCode": "string", + "permName": "string", + "description": "string", + "module": "string", + "action": "string", + "resource": "string", + "isActive": true, + "createdAt": "2025-12-18T05:19:03.577Z", + "updatedAt": "2025-12-18T05:19:03.577Z" + }, + "message": "操作成功" +} + */ + } + //删除权限 + async deletePermission(data) { + let requestUrl = { + method: adminApi.default.deletePermission.method, + url: adminApi.default.deletePermission.url.replace('{permissionId}', data.permissionId), + } + return await requestUtils.common(requestUrl); + } + //查询权限列表 + async getPermissionList() { + return await requestUtils.common(adminApi.default.getPermissionList); + /** + 返回示例: + { + "code": 0, + "success": true, + "data": [ + { + "id": 9007199254740991, + "permCode": "string", + "permName": "string", + "description": "string", + "module": "string", + "action": "string", + "resource": "string", + "isActive": true, + "createdAt": "2025-12-18T05:20:03.035Z", + "updatedAt": "2025-12-18T05:20:03.035Z" + } + ], + "message": "操作成功" +} + */ + } + //根据用户ID查询权限代码集合 + async getPermissionCodesByUserId(data) { + let requestUrl = { + method: adminApi.default.getPermissionCodesByUserId.method, + url: adminApi.default.getPermissionCodesByUserId.url.replace('{userId}', data.userId), + } + return await requestUtils.common(requestUrl); + /** + 返回示例: + { + "code": 0, + "success": true, + "data": [ + "string" + ], + "message": "操作成功" +} + */ + } +} \ No newline at end of file diff --git a/apps/FrontendDesigner/src/views/admin/AdminRouteManagement.vue b/apps/FrontendDesigner/src/views/admin/AdminRouteManagement.vue new file mode 100644 index 0000000..ab1ed5c --- /dev/null +++ b/apps/FrontendDesigner/src/views/admin/AdminRouteManagement.vue @@ -0,0 +1,116 @@ + + + + + \ No newline at end of file diff --git a/apps/FrontendDesigner/src/views/admin/AdminUserList.vue b/apps/FrontendDesigner/src/views/admin/AdminUserList.vue new file mode 100644 index 0000000..070ca72 --- /dev/null +++ b/apps/FrontendDesigner/src/views/admin/AdminUserList.vue @@ -0,0 +1,203 @@ + + + + + \ No newline at end of file diff --git a/apps/FrontendDesigner/src/views/admin/AdminUsers/AdminUserInvites.vue b/apps/FrontendDesigner/src/views/admin/AdminUsers/AdminUserInvites.vue index aa7e20b..837cd02 100644 --- a/apps/FrontendDesigner/src/views/admin/AdminUsers/AdminUserInvites.vue +++ b/apps/FrontendDesigner/src/views/admin/AdminUsers/AdminUserInvites.vue @@ -1,7 +1,7 @@ + + \ No newline at end of file diff --git a/apps/frontend/src/views/PointsRecharge.vue b/apps/frontend/src/views/PointsRecharge.vue new file mode 100644 index 0000000..6f7d313 --- /dev/null +++ b/apps/frontend/src/views/PointsRecharge.vue @@ -0,0 +1,479 @@ + + + + + \ No newline at end of file diff --git a/apps/frontend/src/views/Project/CreateProject.vue b/apps/frontend/src/views/Project/CreateProject.vue index b764cf2..f6ea572 100644 --- a/apps/frontend/src/views/Project/CreateProject.vue +++ b/apps/frontend/src/views/Project/CreateProject.vue @@ -171,8 +171,8 @@ const projectInfo = ref({}); //获取生图次数和模型次数 const getGenerateCount = async ()=>{ const {data} = await modernHome.getModelLimits(); - Limits.value.generateCount = data[0].model_count; - Limits.value.modelCount = data[1].model_count; + // Limits.value.generateCount = data[0].model_count; + // Limits.value.modelCount = data[1].model_count; } // 多个可拖动元素的数据 const cards = ref([ diff --git a/apps/frontend/src/views/home/index copy.vue b/apps/frontend/src/views/home/index copy.vue index f0bed7a..959c646 100644 --- a/apps/frontend/src/views/home/index copy.vue +++ b/apps/frontend/src/views/home/index copy.vue @@ -395,10 +395,11 @@

Socials

- - - - TikTok + + + + TikTok + Discord
diff --git a/apps/frontend/src/views/home/index.vue b/apps/frontend/src/views/home/index.vue index ec5b7d9..ddfa471 100644 --- a/apps/frontend/src/views/home/index.vue +++ b/apps/frontend/src/views/home/index.vue @@ -21,7 +21,7 @@
-
- - {{ t('nav.creator') }} - - - {{ t('nav.land') }} - - - {{ t('nav.pricing') }} - - -
+
+ + + {{ t('nav.creator') }} + + + {{ t('nav.done') }} + + + {{ t('nav.about') }} + + +
@@ -186,7 +222,7 @@ {{ t('hero.explore') }}