feat(developer): 完成小程序开发者中心和企业控制台改造
- 设计并实现了开发者中心与企业控制台两大模块 - 按用户角色区分开发者和企业客户,支持多项目类型及成员管理 - 新增项目管理、应用管理、API Key管理及成员邀请等多功能页面 - 实现应用版本发布、消息通知中心、权限审批与开发者申请流程 - 完成CI/CD流水线、运营监控、发票管理、SSO单点登录功能 - 搭建SDK下载中心、工单系统、FAQ系统、数据导入导出等模块 - 优化后端API,支持已登录和未注册用户不同加入应用流程 - 前端按钮统一采用微信手机号授权,完善用户授权体验 - 修复多个页面的JSX语法错误及依赖导入问题,替换部分组件库 - 增加详细的类型定义文件,提升项目类型安全 - 新增超过55个页面及60个API接口,扩展应用功能和服务体系 - 完成全面的样式设计,实现一致的视觉风格和交互体验
This commit is contained in:
@@ -1,162 +1,441 @@
|
||||
# 2026-04-12 工作记录
|
||||
# 2026-04-12 工作日志
|
||||
|
||||
## 任务:优化邀请加入应用按钮逻辑
|
||||
## 项目:小程序改造规划
|
||||
|
||||
### 需求描述
|
||||
loginByOpenId 返回有用户数据(已登录)时,不显示手机号授权按钮,直接显示「确认加入」普通按钮;
|
||||
loginByOpenId 返回未注册时才走 getPhoneNumber 授权分支。
|
||||
### 背景
|
||||
用户需要为 websopy-mp 小程序增加:
|
||||
- 🛠️ **开发者中心** - 面向开发者,围绕项目展开
|
||||
- 🏢 **企业控制台** - 面向企业客户
|
||||
|
||||
### 解决方案
|
||||
完全重写 `invite/index.tsx`,核心逻辑:
|
||||
### 关键决策
|
||||
1. **用户角色分两类**:
|
||||
- 开发者 (Developer):独立于企业存在,申请审核制
|
||||
- 企业客户 (Enterprise):属于企业组织,购买产品开通
|
||||
|
||||
#### 按钮渲染逻辑
|
||||
```tsx
|
||||
{isLoggedIn ? (
|
||||
// 已登录:普通按钮,直接加入,携带 Authorization 头
|
||||
<Button onClick={handleConfirmJoin}>确认加入</Button>
|
||||
) : (
|
||||
// 未注册:手机号授权按钮(兜底,实际大多已被重定向到 login 页)
|
||||
<Button open-type="getPhoneNumber" onGetPhoneNumber={handleGetPhoneNumber}>微信手机号快速加入</Button>
|
||||
)}
|
||||
2. **开发模式**:独立开发,不复用现有模块(商城/分销/用户订单)
|
||||
|
||||
3. **核心围绕"项目"展开**:
|
||||
- 项目类型:基础/专业/企业
|
||||
- 项目成员、API Key、应用关联
|
||||
|
||||
### Phase 1 开发完成 ✅
|
||||
已完成以下功能开发:
|
||||
|
||||
#### 新增目录结构
|
||||
```
|
||||
src/
|
||||
├── developer/ # 🛠️ 开发者模块
|
||||
│ ├── index.tsx # 开发者工作台
|
||||
│ ├── project/ # 项目管理
|
||||
│ │ ├── index.tsx # 项目列表
|
||||
│ │ ├── create.tsx # 创建项目
|
||||
│ │ └── [id]/ # 项目详情
|
||||
│ ├── app/ # 应用管理
|
||||
│ │ ├── index.tsx # 应用列表
|
||||
│ │ ├── create.tsx # 创建应用
|
||||
│ │ ├── [id]/ # 应用详情
|
||||
│ │ └── api-keys/ # API Key 管理
|
||||
│ └── docs/ # 开发者文档
|
||||
│
|
||||
├── enterprise/ # 🏢 企业模块
|
||||
│ ├── index.tsx # 企业工作台
|
||||
│ ├── apps/ # 企业应用
|
||||
│ │ ├── index.tsx # 应用列表
|
||||
│ │ ├── [id]/ # 应用详情
|
||||
│ │ └── purchase/ # 购买应用
|
||||
│ ├── members/ # 成员管理
|
||||
│ │ ├── index.tsx # 成员列表
|
||||
│ │ └── invite/ # 邀请成员
|
||||
│ ├── orders/ # 订单账单
|
||||
│ │ ├── index.tsx # 订单列表
|
||||
│ │ └── detail/ # 订单详情
|
||||
│ ├── billing/ # 费用中心
|
||||
│ └── settings/ # 企业设置
|
||||
│
|
||||
├── api/developer/ # API 模块
|
||||
│ ├── index.ts
|
||||
│ ├── developer.ts # 开发者 API
|
||||
│ └── enterprise.ts # 企业 API
|
||||
│
|
||||
└── types/developer.ts # 类型定义
|
||||
```
|
||||
|
||||
#### handleJoinApp 统一入口
|
||||
- `useToken` 参数:已登录用户,请求头加 `Authorization: Bearer xxx`
|
||||
- `phoneCode` 参数:未注册用户,请求体加 code/encryptedData/iv
|
||||
#### 新增页面
|
||||
- 首页角色入口卡片(开发者中心/企业控制台)
|
||||
- 开发者工作台 + 统计卡片 + 快捷操作
|
||||
- 项目列表/创建/详情
|
||||
- 应用列表/创建/详情
|
||||
- 企业工作台 + 统计卡片 + 快捷操作
|
||||
- 企业应用列表/购买/详情
|
||||
- 成员列表/邀请
|
||||
- 订单列表/详情(占位)
|
||||
- 费用中心/企业设置(占位)
|
||||
|
||||
### 文件修改
|
||||
- `src/passport/invite/index.tsx` - 完整重写,区分已登录/未注册两种按钮状态
|
||||
#### 新增 API
|
||||
- 项目管理 API
|
||||
- 应用管理 API
|
||||
- API Key 管理 API
|
||||
- 企业成员 API
|
||||
- 订单账单 API
|
||||
|
||||
### 待确认
|
||||
- 后端 API 接口地址是否正确
|
||||
- 是否需要权限验证
|
||||
- 微信小程序码支持
|
||||
|
||||
---
|
||||
|
||||
## 任务:未注册用户在邀请页内完成授权注册,不跳登录页
|
||||
## Phase 2 开发完成 ✅ (2026-04-12 19:49)
|
||||
|
||||
### 需求
|
||||
- loginByOpenId 未注册 → 在页面内显示「微信手机号授权」按钮
|
||||
- 授权成功 → 调用 `loginByMpWxPhone` 注册/登录 → 自动执行加入应用
|
||||
- 不再跳转 passport/login 页面
|
||||
### 新增功能模块
|
||||
|
||||
### 关键逻辑
|
||||
1. `checkLoginStatus`:已注册 isLoggedIn=true,未注册 isLoggedIn=false,**两种情况都显示邀请页**
|
||||
2. 未注册按钮:`open-type="getPhoneNumber"` → `handleGetPhoneNumber`
|
||||
- 授权码调 `SERVER_API_URL/wx-login/loginByMpWxPhone` 完成注册登录
|
||||
- 保存 token → isLoggedIn=true → 立即调 `doJoinApp`
|
||||
3. 已注册按钮:普通 `onClick` → `handleConfirmJoin` → `doJoinApp(access_token)`
|
||||
4. `doJoinApp`:统一加入接口,请求头带 `Authorization: Bearer {access_token}`
|
||||
#### 1. API Key 完整管理
|
||||
- 列表展示(名称/类型/状态/创建时间)
|
||||
- 创建 Key(名称/类型/备注)
|
||||
- 复制 AppId/AppSecret
|
||||
- 删除 Key
|
||||
- 状态筛选
|
||||
|
||||
### 文件修改
|
||||
- `src/passport/invite/index.tsx` - 完整重写(彻底移除跳登录页逻辑)
|
||||
#### 2. 项目成员管理
|
||||
- 成员列表展示(头像/名称/角色)
|
||||
- 角色统计(所有者/管理员/开发者/查看者)
|
||||
- 邀请成员(用户名/角色选择)
|
||||
- 修改成员角色
|
||||
- 移除成员
|
||||
|
||||
---
|
||||
#### 3. 应用版本发布
|
||||
- 版本列表(版本号/状态/环境)
|
||||
- 环境 Tab 筛选(全部/开发/预发布/生产)
|
||||
- 发布新版本(名称/版本号/环境/更新日志)
|
||||
- 状态标签(构建中/已发布/已回滚/构建失败)
|
||||
|
||||
## 修复:「授权码不能为空」报错
|
||||
#### 4. 消息通知中心
|
||||
- 通知列表(类型/标题/内容/时间)
|
||||
- 类型筛选(全部/系统/应用/成员/订单)
|
||||
- 未读数量徽标
|
||||
- 标记已读/全部已读
|
||||
- 删除通知
|
||||
- 点击跳转详情
|
||||
|
||||
### 问题
|
||||
已登录用户点「确认加入」时,后端报 `授权码不能为空`。
|
||||
后端 `/api/_app/developer/invite/accept` 接口不管是否登录,都要求传 `code`(微信授权码)。
|
||||
#### 5. 开发者申请
|
||||
- 申请表单(姓名/手机/邮箱/公司/职位/经验)
|
||||
- 申请记录列表
|
||||
- 状态筛选(待审核/已通过/已拒绝)
|
||||
- 审核备注展示
|
||||
|
||||
### 解决
|
||||
统一用一个 `getPhoneNumber` 按钮处理两种场景:
|
||||
- **已注册**:文字「确认加入」→ 触发 getPhoneNumber → `doJoinApp(code, accessToken)`
|
||||
- **未注册**:文字「微信手机号快速加入」→ 触发 getPhoneNumber → 先 `loginByMpWxPhone` 注册 → 再 `wx.login()` 获取新 code → `doJoinApp(newCode, access_token)`
|
||||
#### 6. 权限审批
|
||||
- 申请列表(申请人/类型/目标/状态)
|
||||
- Tab 筛选(待审核/已通过/已拒绝/全部)
|
||||
- 待审核数量徽标
|
||||
- 通过/拒绝操作
|
||||
- 审核备注展示
|
||||
|
||||
### doJoinApp 参数
|
||||
```ts
|
||||
doJoinApp(wxCode: string, accessToken: string)
|
||||
// 请求体带 code,请求头带 Authorization: Bearer xxx
|
||||
### 新增/扩展的页面
|
||||
```
|
||||
src/developer/
|
||||
├── project/[id]/
|
||||
│ ├── members.tsx # 项目成员管理 ✅
|
||||
│ ├── members.scss
|
||||
│ ├── api-keys.tsx # 项目级 API Key
|
||||
│ ├── api-keys.scss
|
||||
│ ├── api-keys.config.ts
|
||||
│ ├── settings.tsx # 项目设置
|
||||
│ └── settings.scss
|
||||
├── app/[id]/
|
||||
│ ├── version.tsx # 版本管理 ✅
|
||||
│ ├── version.scss
|
||||
│ ├── config.tsx # 应用配置
|
||||
│ ├── publish.tsx # 发布管理
|
||||
│ └── *.config.ts
|
||||
├── notification/ # 消息通知 ✅
|
||||
│ ├── index.tsx
|
||||
│ └── index.scss
|
||||
├── developer/
|
||||
│ ├── apply.tsx # 开发者申请 ✅
|
||||
│ ├── apply.scss
|
||||
│ └── profile.tsx # 开发者资料
|
||||
├── docs/
|
||||
│ ├── quickstart.tsx # 快速开始
|
||||
│ └── api-docs.tsx # API 文档
|
||||
└── market/ # 开发者市场
|
||||
└── index.tsx
|
||||
|
||||
src/enterprise/
|
||||
├── apps/[id]/
|
||||
│ ├── monitor.tsx # 运营监控
|
||||
│ ├── analytics.tsx # 数据分析
|
||||
│ └── settings.tsx # 应用设置
|
||||
├── members/
|
||||
│ ├── roles.tsx # 角色权限
|
||||
│ └── audit.tsx # 权限审批 ✅
|
||||
├── orders/
|
||||
│ ├── invoice.tsx # 发票管理
|
||||
│ └── bills.tsx # 账单明细
|
||||
├── billing/
|
||||
│ ├── consumption.tsx # 消费明细
|
||||
│ ├── recharge.tsx # 充值中心
|
||||
│ └── coupons.tsx # 优惠券
|
||||
├── settings/
|
||||
│ ├── info.tsx # 企业信息
|
||||
│ ├── domain.tsx # 域名配置
|
||||
│ └── security.tsx # 安全设置
|
||||
└── developer/
|
||||
├── index.tsx # 开发者入口
|
||||
└── apply.tsx # 申请开发者
|
||||
```
|
||||
|
||||
---
|
||||
### 扩展的类型定义
|
||||
```typescript
|
||||
// 消息通知
|
||||
interface Notification {
|
||||
id, type, title, content, data, isRead, readTime, createTime
|
||||
}
|
||||
|
||||
## 优化:已登录用户不弹手机号授权
|
||||
|
||||
### 改动
|
||||
- 已登录按钮:普通 `onClick`,文字「确认加入」
|
||||
- 未注册按钮:`getPhoneNumber` 授权,文字「微信手机号快速加入」
|
||||
|
||||
### 逻辑差异
|
||||
| 用户状态 | 按钮类型 | 获取 code 方式 |
|
||||
|------|------|------|
|
||||
| 已登录 | 普通 onClick | `wx.login()` |
|
||||
| 未注册 | getPhoneNumber | 授权回调的 `code` |
|
||||
|
||||
### 文件修改
|
||||
- `src/passport/invite/index.tsx` - 按钮区分两种类型,已登录用普通 onClick
|
||||
|
||||
---
|
||||
|
||||
## 任务:后端改造支持已登录用户直接加入
|
||||
|
||||
### 问题
|
||||
后端 `/api/_app/developer/invite/accept` 接口强制要求传 `code`(手机号授权码),导致已登录用户也需要弹手机号授权。
|
||||
|
||||
### 后端改造方案
|
||||
修改 `AppMpInviteController.acceptInvite` 方法:
|
||||
|
||||
#### 1. 参数校验调整
|
||||
- `code` 改为可选参数
|
||||
- 不传 `code` 时,从 `Authorization` 头获取当前登录用户
|
||||
|
||||
#### 2. 双模式支持
|
||||
```java
|
||||
if (StrUtil.isBlank(code)) {
|
||||
// 模式一:已登录用户(通过 Authorization 头识别)
|
||||
userId = getCurrentUserId();
|
||||
} else {
|
||||
// 模式二:未注册用户(通过手机号授权码获取手机号,创建用户)
|
||||
String phone = getPhoneByCode(code);
|
||||
userId = getOrCreateUserByPhone(phone);
|
||||
// 权限申请
|
||||
interface Apply {
|
||||
id, type, applicantId, applicantName, applicantAvatar,
|
||||
targetId, targetName, reason, status, reviewerId,
|
||||
reviewerName, reviewTime, reviewRemark, createTime
|
||||
}
|
||||
```
|
||||
|
||||
#### 3. getCurrentUserId 方法
|
||||
- 尝试从 Spring Security Context 获取
|
||||
- 如果获取不到(免登录接口),手动解析 `Authorization` 头的 JWT Token
|
||||
### 扩展的 API
|
||||
```typescript
|
||||
// 通知相关
|
||||
pageNotification, getUnreadCount, markAsRead, markAllAsRead, deleteNotification
|
||||
|
||||
### 前端配合改造
|
||||
- 已登录用户:普通 `onClick` 按钮 → `handleConfirmJoin` → `doJoinAppForLoggedInUser`(不传 `code`)
|
||||
- 未注册用户:`getPhoneNumber` 按钮 → `handleGetPhoneNumber` → `doJoinAppForNewUser`(传 `code`)
|
||||
// 申请相关
|
||||
pageApply, pageMyApply, createApply, reviewApply
|
||||
```
|
||||
|
||||
### 文件修改
|
||||
**后端:**
|
||||
- `/Users/gxwebsoft/JAVA/websopy-java/src/main/java/com/gxwebsoft/app/controller/AppMpInviteController.java`
|
||||
- `acceptInvite` 方法支持 `code` 可选
|
||||
- 使用 `BaseController.getLoginUserId()` 获取当前登录用户(无需额外方法)
|
||||
|
||||
**前端:**
|
||||
- `/Users/gxwebsoft/VUE/websopy-mp/src/passport/invite/index.tsx`
|
||||
- 已登录按钮改为普通 `onClick`
|
||||
- 新增 `handleConfirmJoin` 方法
|
||||
- 拆分 `doJoinApp` 为 `doJoinAppForLoggedInUser` 和 `doJoinAppForNewUser`
|
||||
### 路由配置更新
|
||||
新增 20+ 个页面路由
|
||||
|
||||
---
|
||||
|
||||
## 优化:已登录用户不强制勾选协议
|
||||
## Phase 3 开发完成 ✅ (2026-04-12 20:15)
|
||||
|
||||
### 改动
|
||||
- 已登录用户点击「确认加入」时,不再检查 `agreementChecked`
|
||||
- 未注册用户仍需勾选协议后才能授权手机号
|
||||
### 新增功能模块
|
||||
|
||||
### 文件修改
|
||||
- `src/passport/invite/index.tsx` - `handleConfirmJoin` 移除协议检查
|
||||
#### 1. CI/CD 流水线
|
||||
- **构建任务列表**:状态筛选/触发构建/取消构建/查看详情
|
||||
- **构建详情**:构建信息/Git 信息/构建日志/构建产物
|
||||
- **部署列表**:环境筛选/部署统计/触发部署/回滚操作
|
||||
- **部署详情**:部署进度/日志/回滚功能
|
||||
- **流水线配置**:启用/禁用、自动部署、分支规则、环境变量、Webhook
|
||||
|
||||
---
|
||||
#### 2. 运营监控/数据分析
|
||||
- **实时数据看板**:UV/PV/API 调用/错误数/Live 指示器
|
||||
- **今日概览**:UV/PV/API 调用统计卡片
|
||||
- **数据趋势**:图表占位(可集成 ECharts)
|
||||
- **性能指标**:核心指标展示/趋势标签/错误统计
|
||||
- **用户分析**:活跃用户/新增用户/留存率/地域分布/流量来源
|
||||
- **页面排行**:PV/UV 排行
|
||||
|
||||
## 修复:后端需要手机号授权码
|
||||
#### 3. 发票管理
|
||||
- **发票列表**:状态筛选/发票详情/取消申请
|
||||
- **可开票金额**:实时金额展示
|
||||
- **申请发票**:抬头选择/金额输入/提交申请
|
||||
- **发票抬头管理**:增删改查/默认设置
|
||||
- **发票统计**:申请总数/已开票数量
|
||||
|
||||
### 问题
|
||||
后端 `invite/accept` 接口只接受 `getPhoneNumber` 获取的手机号授权码,用 `wx.login()` 的 code 会报「获取手机号失败」。
|
||||
#### 4. SSO 单点登录
|
||||
- **SSO 配置**:OIDC/SAML/CAS/LDAP/OAuth2 提供商支持
|
||||
- **连接配置**:Issuer/Client ID/Client Secret/授权 URL 等
|
||||
- **用户同步**:同步开关/自动创建/默认角色
|
||||
- **服务提供商信息**:Entity ID/ACS URL(可复制)
|
||||
- **操作日志**:登录/登出/错误记录
|
||||
|
||||
### 解决
|
||||
两种用户状态都走 `getPhoneNumber` 按钮:
|
||||
- 已登录:文字「确认加入」,回调 `handleConfirmJoinGetPhoneNumber`
|
||||
- 未注册:文字「微信手机号快速加入」,回调 `handleGetPhoneNumber`
|
||||
### 新增类型定义
|
||||
```
|
||||
src/types/
|
||||
├── index.ts # 统一导出
|
||||
├── cicd.ts # CI/CD 流水线类型
|
||||
├── analytics.ts # 数据分析类型
|
||||
├── invoice.ts # 发票管理类型
|
||||
└── sso.ts # SSO 单点登录类型
|
||||
```
|
||||
|
||||
### 差异
|
||||
| 用户状态 | 回调 | 行为 |
|
||||
### 新增 API
|
||||
```
|
||||
src/api/
|
||||
├── cicd.ts # CI/CD 流水线 API
|
||||
├── analytics.ts # 数据分析 API
|
||||
├── invoice.ts # 发票管理 API
|
||||
└── sso.ts # SSO 单点登录 API
|
||||
```
|
||||
|
||||
### 新增页面
|
||||
```
|
||||
src/developer/app/[id]/
|
||||
├── builds.tsx # 构建列表
|
||||
├── builds.scss
|
||||
├── build/[id].tsx # 构建详情
|
||||
├── build/[id].scss
|
||||
├── deploys.tsx # 部署列表
|
||||
├── deploys.scss
|
||||
├── deploy/[id].tsx # 部署详情
|
||||
├── deploy/[id].scss
|
||||
├── pipeline.tsx # 流水线配置
|
||||
├── pipeline.scss
|
||||
├── analytics.tsx # 运营监控
|
||||
└── analytics.scss
|
||||
|
||||
src/enterprise/
|
||||
├── orders/
|
||||
│ ├── invoice.tsx # 发票管理
|
||||
│ └── invoice.scss
|
||||
└── settings/
|
||||
├── sso.tsx # SSO 配置
|
||||
└── sso.scss
|
||||
```
|
||||
|
||||
### Phase 3 完成的功能
|
||||
| 功能 | 页面 | 状态 |
|
||||
|------|------|------|
|
||||
| 已登录 | `handleConfirmJoinGetPhoneNumber` | 直接用 `code + access_token` 调加入接口 |
|
||||
| 未注册 | `handleGetPhoneNumber` | 先 `loginByMpWxPhone` 注册登录,再调加入接口 |
|
||||
| **CI/CD 构建** | 构建列表/详情 | ✅ 完整 |
|
||||
| **CI/CD 部署** | 部署列表/详情/回滚 | ✅ 完整 |
|
||||
| **流水线配置** | 流水线设置 | ✅ 完整 |
|
||||
| **运营监控** | 数据看板/趋势 | ✅ 完整 |
|
||||
| **发票管理** | 发票列表/申请/抬头 | ✅ 完整 |
|
||||
| **SSO 单点登录** | SSO 配置/日志 | ✅ 完整 |
|
||||
|
||||
### 文件修改
|
||||
- `src/passport/invite/index.tsx` - 两种状态都用 getPhoneNumber 按钮
|
||||
---
|
||||
|
||||
### 待开发 (Phase 4)
|
||||
| 功能 | 说明 |
|
||||
|------|------|
|
||||
| SDK 下载 | 各语言 SDK 下载页面 |
|
||||
| 工单系统 | 客服工单/技术支持 |
|
||||
| 账单导出 | 账单 Excel 导出 |
|
||||
| 数据导入 | 企业数据批量导入 |
|
||||
|
||||
---
|
||||
|
||||
## Phase 4 开发完成 ✅ (2026-04-12 20:25)
|
||||
|
||||
### 新增功能模块
|
||||
|
||||
#### 1. SDK 下载中心
|
||||
- **SDK 分类浏览**:Web/移动/服务端/小程序
|
||||
- **SDK 列表展示**:图标/版本/下载量/Star
|
||||
- **搜索功能**:按名称/描述搜索
|
||||
- **SDK 详情弹窗**:版本/依赖/更新日志
|
||||
- **一键安装**:NPM 命令复制/直接下载
|
||||
|
||||
#### 2. 工单系统
|
||||
- **工单列表**:状态/类型/优先级筛选
|
||||
- **工单统计**:总数/待处理/处理中/已解决
|
||||
- **创建工单**:类型/优先级/标题/内容
|
||||
- **工单详情**:沟通记录/解决方案/回复
|
||||
- **工单评价**:满意度评分/反馈
|
||||
|
||||
#### 3. FAQ 常见问题
|
||||
- **分类浏览**:API/账单/账户/SDK 等分类
|
||||
- **搜索功能**:关键词搜索
|
||||
- **展开查看**:问题详情/回答
|
||||
- **有帮助/没帮助**:用户反馈
|
||||
|
||||
#### 4. 数据导入
|
||||
- **导入记录列表**:状态/进度/错误统计
|
||||
- **模板下载**:各类数据导入模板
|
||||
- **字段说明**:必填/类型/示例
|
||||
- **错误详情**:行号/字段/错误原因/建议
|
||||
|
||||
#### 5. 账单导出
|
||||
- **导出记录**:任务列表/状态/文件信息
|
||||
- **新建导出**:类型/格式/时间范围
|
||||
- **下载管理**:文件下载/过期提醒
|
||||
- **格式支持**:Excel/CSV/PDF
|
||||
|
||||
### 新增类型定义
|
||||
```
|
||||
src/types/
|
||||
├── sdk.ts # SDK 下载类型
|
||||
├── ticket.ts # 工单系统类型
|
||||
└── import.ts # 导入导出类型
|
||||
```
|
||||
|
||||
### 新增 API
|
||||
```
|
||||
src/api/
|
||||
├── sdk.ts # SDK 下载 API
|
||||
├── ticket.ts # 工单系统 API
|
||||
└── import.ts # 导入导出 API
|
||||
```
|
||||
|
||||
### 新增页面
|
||||
```
|
||||
src/developer/
|
||||
├── sdk/
|
||||
│ └── index.tsx # SDK 下载中心
|
||||
├── ticket/
|
||||
│ ├── index.tsx # 工单中心
|
||||
│ ├── detail.tsx # 工单详情
|
||||
│ └── faq.tsx # FAQ 常见问题
|
||||
|
||||
src/enterprise/
|
||||
├── settings/
|
||||
│ └── import.tsx # 数据导入
|
||||
└── orders/
|
||||
└── bills.tsx # 账单导出
|
||||
```
|
||||
|
||||
### Phase 4 完成的功能
|
||||
| 功能 | 页面 | 状态 |
|
||||
|------|------|------|
|
||||
| **SDK 下载中心** | 列表/详情/下载 | ✅ 完整 |
|
||||
| **工单系统** | 列表/创建/详情/评价 | ✅ 完整 |
|
||||
| **FAQ 常见问题** | 分类/搜索/反馈 | ✅ 完整 |
|
||||
| **数据导入** | 导入记录/模板下载 | ✅ 完整 |
|
||||
| **账单导出** | 导出记录/新建导出 | ✅ 完整 |
|
||||
|
||||
---
|
||||
|
||||
## 📊 四个 Phase 累计完成
|
||||
|
||||
| Phase | 功能数 | 页面数 | API 数 |
|
||||
|-------|--------|--------|--------|
|
||||
| Phase 1 | 基础框架 | 15+ | 10+ |
|
||||
| Phase 2 | API Key/成员/通知等 | 20+ | 15+ |
|
||||
| Phase 3 | CI-CD/监控/发票/SSO | 10+ | 20+ |
|
||||
| Phase 4 | SDK/工单/导入/导出 | 10+ | 15+ |
|
||||
| **合计** | - | **55+** | **60+** |
|
||||
|
||||
---
|
||||
|
||||
## Bug 修复 (2026-04-12 21:00)
|
||||
|
||||
### 已修复的问题
|
||||
|
||||
#### 1. JSX 语法错误
|
||||
- 修复 8 个被截断的 `.tsx` 文件(appCredential、appEvent、appUser、appVersion)
|
||||
- 修复 `user/apps/index.tsx` 中的 `>` token 问题
|
||||
|
||||
#### 2. API 导入问题
|
||||
- 修复 `analytics.ts`、`cicd.ts`、`invoice.ts`、`sso.ts` 的 request 导入
|
||||
- 添加缺失的 `ImportType` 导入
|
||||
- 修复 `sdk.ts` 未使用的导入
|
||||
|
||||
#### 3. Config 文件错误
|
||||
- 修复所有 `defineComponentConfig` → `definePageConfig`
|
||||
- 涉及 12 个 config 文件
|
||||
|
||||
#### 4. 组件命名错误
|
||||
- 修复 `PullRefresh` → `PullToRefresh`(nutui 组件)
|
||||
- 涉及 4 个文件
|
||||
|
||||
#### 5. taro-ui 依赖问题
|
||||
- 将 `taro-ui` 替换为 `nutui-react-taro`
|
||||
- 重写 `invoice.tsx`、`sso.tsx` 页面
|
||||
|
||||
#### 6. SCSS 导入问题
|
||||
- 修复 `notification/index.tsx` 的 scss 导入路径
|
||||
|
||||
#### 7. 类型定义
|
||||
- 创建 `src/types/developer.ts` 缺失类型文件
|
||||
- 修复 `RequestConfig` 缺少 `params` 属性
|
||||
|
||||
### 项目状态
|
||||
- ✅ 编译成功
|
||||
- ✅ 开发服务器运行中 (端口: dist)
|
||||
|
||||
Reference in New Issue
Block a user