feat: 企业版合作模式(后端、管理端、小程序)
- API:合作模式配置、用户选择、企业版入口与迁移 SQL - 管理端:合作方式管理、企业/用户侧设置与 CSV 导出等 - 小程序:合作模式弹窗与结果/简历等页对接;开发脚本小调整 Made-with: Cursor
This commit is contained in:
184
api/docs/企业版合作模式需求.md
Normal file
184
api/docs/企业版合作模式需求.md
Normal file
@@ -0,0 +1,184 @@
|
||||
# 企业版:简历上传 / 人脸 / MBTI → 合作模式(需完善资料)
|
||||
|
||||
> 文档用途:产品与开发对齐;可被 AI 直接读取用于分模块实现(小程序弹框、前置条件校验、`api` 接口与管理端配置)。
|
||||
> 关联:`miniprogram/utils/phoneAuth.js` 中 `isReportProfileComplete()`(昵称+头像+手机);后端与 `Test::isWechatProfileComplete` 对齐。
|
||||
|
||||
---
|
||||
|
||||
## 1. 背景与目标
|
||||
|
||||
- **目标**:在企业版业务中,用户须完成 **简历上传、人脸/面相分析、MBTI 测评**(**三者完成顺序不限,可被打乱**),全部完成后必须再 **选择「合作模式」**。
|
||||
- **说明(产品口径)**:第一环对用户表述为 **「简历上传」**;上传成功后服务端可异步生成「简历分析报告」。**什么叫「简历这一环算完成」**:按你们约定的业务规则判定,通常是 **上传成功且达到约定的完成态**(例如库里已有记录、报告可查看等),详见 §3。(文档里如出现「前置校验」三字,指的就是:**没到这一步就不让用户进下一步**。)
|
||||
- **约束**:**选择合作模式前,用户须已「完善资料」**(手机号 + 昵称 + 头像必填)。
|
||||
- **展示**:小程序侧合作模式以 **弹框(Modal)** 呈现;选项由 **管理端配置**。
|
||||
|
||||
---
|
||||
|
||||
## 2. 适用范围
|
||||
|
||||
| 维度 | 说明 |
|
||||
|------|------|
|
||||
| 客户端 | **企业版小程序**(实现时与现有企业上下文 `enterpriseId` / `enterprisePermissions` / 入口路由对齐) |
|
||||
| 用户身份 | 已登录;未完成资料则先引导 **`/pages/user-profile/index`** |
|
||||
| 非适用范围 | 个人版、分享落地访客;审核/提审模式沿用现有 `reviewMode` / `miniprogramAuditMode` 等合规策略 |
|
||||
|
||||
---
|
||||
|
||||
## 3. 端到端流程(三项完成顺序不限)
|
||||
|
||||
**前置条件(企业版)**:以下三项在用户维度均达到「已完成」状态(**不限先后**):
|
||||
|
||||
- **简历上传**完成(用户完成简历文件上传;是否要求报告已出齐由实现约定,建议在文档/接口层写死「完成事件」)
|
||||
- 人脸(面相)分析完成
|
||||
- MBTI 测评完成
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ 简历上传 / 人脸 / MBTI 三项可任意顺序完成(并行入口亦可) │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
↓
|
||||
三项均已标记完成?
|
||||
↓
|
||||
【校验】「完善资料」是否满足(硬性,见 §4)
|
||||
↓
|
||||
弹出「合作模式」弹框(§6)
|
||||
↓
|
||||
用户必选一项(或必选 + 备注,见 §10)
|
||||
↓
|
||||
提交成功 → 关闭弹框并进入后续业务(或停留提示)
|
||||
```
|
||||
|
||||
**实现锚点**
|
||||
|
||||
1. **简历上传**:现有简历上传与分析链路(如上传页 + `pages/result/resume`);以 **上传成功且业务认定该环节完成**(例如已持久化简历分析任务/结果)时写入 **`resumeDone`**(服务端为准更可靠)。
|
||||
2. **人脸**:现有拍照/分析链路(如 `pages/index/camera`、`pages/index/result`);完成时写入 **faceDone**。
|
||||
3. **MBTI**:现有测评与结果页(如 `pages/result/mbti`);完成时写入 **mbtiDone**。
|
||||
4. **合作模式**:当 **`resumeDone && faceDone && mbtiDone`**(命名可统一为 enterprise onboarding flags),且 §4「完善资料」校验通过时触发弹框;**最后一项完成的那一个页面**可作为「首次满足条件」的触发时机(避免重复弹窗需幂等标记)。
|
||||
|
||||
---
|
||||
|
||||
## 4. 「完善资料」前置条件(硬性)
|
||||
|
||||
> **用语说明**:不写「门禁」一词时,本节就是指——**头像、昵称、手机号不齐就不给弹出合作模式弹框**,须先去资料页补齐。
|
||||
|
||||
**判定**:与小程序 `isReportProfileComplete()` 一致——**昵称、头像、手机号均已非空**。
|
||||
|
||||
**未满足**:禁止打开合作模式弹框;`Toast` + 跳转 `pages/user-profile/index`(可加 query `from=cooperation_gate`)。
|
||||
|
||||
**满足后**:拉取 §5 配置的选项并展示弹框。
|
||||
|
||||
---
|
||||
|
||||
## 5. 管理端配置(暂定三种模式)
|
||||
|
||||
### 5.1 枚举(首期)
|
||||
|
||||
| modeCode (`code`) | 展示名 | 默认含义 |
|
||||
|-------------------|--------|----------|
|
||||
| `salary` | 工资 | 全职/薪资导向合作 |
|
||||
| `startup_equity` | 创业分红 | 合伙/股权激励类合作 |
|
||||
| `knowledge_pay` | 知识付费 | 课程/咨询/付费内容类合作 |
|
||||
|
||||
### 5.2 建议配置字段
|
||||
|
||||
| 字段 | 说明 |
|
||||
|------|------|
|
||||
| `enterpriseId` | 企业维度(平台默认模板可与某默认企业绑定或单独表) |
|
||||
| `modeCode` | `salary` \| `startup_equity` \| `knowledge_pay` |
|
||||
| `enabled` | 是否对用户展示 |
|
||||
| `sortOrder` | 弹框内排序 |
|
||||
| `title` / `description` | 可选覆盖默认文案 |
|
||||
| `updatedAt` | 审计 |
|
||||
|
||||
**权限**:仅管理员可改;终端只读列表。
|
||||
|
||||
---
|
||||
|
||||
## 6. 小程序:弹框交互
|
||||
|
||||
### 6.1 触发
|
||||
|
||||
- 满足 §3(**三项均完成,与完成顺序无关**)、§4 后 **自动弹出一次**(建议:`cooperationChoiceSubmitted` / 服务端状态双重判断)。
|
||||
- 可选:在任一相关结果页提供「选择合作模式」入口(若三项未齐则 Toast 引导未完成项);同样先走 §4。
|
||||
|
||||
### 6.2 内容结构
|
||||
|
||||
- 标题:如「请选择合作模式」。
|
||||
- 简要说明一行。
|
||||
- 纵向 **单选**列表,仅展示 `enabled=true` 的配置项。
|
||||
- **确认**:未选时可禁用主按钮或 Toast。
|
||||
- **稍后**(可选):是否允许跳过由产品决定;若企业版强制意愿收集,可不提供「稍后」。
|
||||
|
||||
### 6.3 反馈
|
||||
|
||||
- 成功:`showToast`,必要时更新本地与服务端扩展字段。
|
||||
- 失败:展示服务端 `message`,保留弹框内容便于重试。
|
||||
|
||||
---
|
||||
|
||||
## 7. 接口约定(草案)
|
||||
|
||||
以下路径为建议命名,落地时与现有路由风格统一。
|
||||
|
||||
### 7.1 获取可选合作模式
|
||||
|
||||
- **GET** `/api/enterprise/cooperation-modes`
|
||||
- 认证:Bearer;`enterpriseId` 从 Token 或 query 解析。
|
||||
- **响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"data": {
|
||||
"list": [
|
||||
{ "code": "salary", "title": "工资", "description": "…", "sortOrder": 10 }
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 7.2 提交用户选择
|
||||
|
||||
- **POST** `/api/user/cooperation-preference`
|
||||
- **Body**:`{ "modeCode": "salary" }`,可选 `{ "mbtiTestResultId": 123 }` 便于审计。
|
||||
- **校验**:`modeCode` 必须在该企业当前启用集合内。
|
||||
|
||||
### 7.3 幂等
|
||||
|
||||
同一用户同一企业重复提交:**覆盖最近一次** 或 **409 拒绝** —— 由产品拍板。
|
||||
|
||||
---
|
||||
|
||||
## 8. 数据与状态
|
||||
|
||||
- 用户维度存储:`cooperation_mode_code`、`cooperation_chosen_at`(表名实现时与 `wechat_users`/扩展表统一)。
|
||||
- 前端可选用 `storage` 缓存「已提交」以降低重复弹窗(须与服务端最终一致)。
|
||||
|
||||
---
|
||||
|
||||
## 9. 验收标准
|
||||
|
||||
1. 企业版路径:仅 **简历上传、人脸、MBTI 三项均完成**(**顺序任意**;完成事件以接口/状态为准;简历侧以「上传 + 约定完成态」为准)且 **资料完善** 后出现弹框。
|
||||
2. 资料不完善:**无法提交**合作模式并跳转资料页。
|
||||
3. 管理端关闭某模式:小程序 **不出现**该项。
|
||||
4. 提交成功:服务端可查;客户端符合「不重复骚扰」策略。
|
||||
5. 审核模式下是否与营销类入口同样隐藏:**待运营确认**,可与现有审核工具函数并列处理。
|
||||
|
||||
---
|
||||
|
||||
## 10. 待产品确认
|
||||
|
||||
- 「三项均完成」的精确定义(依赖哪些接口字段或页面生命周期;**与先后顺序无关**)。
|
||||
- 是否允许「稍后」、是否支持多选/备注。
|
||||
- 配置入口:**企业后台** 与 **超级管理后台** 的归属。
|
||||
- 与个人版路径并存时的降级策略。
|
||||
|
||||
---
|
||||
|
||||
## 修订记录
|
||||
|
||||
| 日期 | 说明 |
|
||||
|------|------|
|
||||
| (创建) | 初版需求草案,存放于 `api/docs` |
|
||||
| 修订 | 明确简历 / 人脸 / MBTI **完成顺序可打乱**,仅以三项均完成为必要条件 |
|
||||
| 修订 | 第一环产品口径改为 **简历上传**(与分析/报告异步关系在 §3 说明) |
|
||||
| 2026-04-20 | **已落地**:`mbti_enterprise_cooperation_modes` / `mbti_user_cooperation_choices`、小程序接口与弹框、企业后台与超管配置页 |
|
||||
Reference in New Issue
Block a user