文档目录
个人信息管理

简介

本开发文档面向 DouPHP 小程序“个人信息管理”模块,覆盖用户个人资料的查看与编辑、头像上传、昵称设置、社交账号绑定(微信等)、工作信息列表与权限控制、表单验证、图片上传、数据同步、隐私保护与用户体验优化等方面。文档以代码级为依据,提供端到端的数据流与调用时序说明,并给出可落地的实现建议与排错指引。

项目结构

个人信息管理在小程序前端位于 miniprogram/company/pages/user 目录,后端 API 位于 api/controller/user 目录。主要涉及:

  • 个人资料编辑:edit.ts + UserController::edit / editPost / uploadAvatar
  • 社交账号绑定:sns.ts / sns_link.ts + UserController::sns / WeixinController::login
  • 工作信息列表:work.ts + WorkController::index
graph TB
subgraph "小程序前端"
E["pages/user/edit.ts"]
S["pages/user/sns.ts"]
SL["pages/user/sns_link.ts"]
W["pages/user/work.ts"]
end
subgraph "API 控制器"
UC["UserController.php"]
WC["WeixinController.php"]
WK["WorkController.php"]
end
E --> UC
S --> UC
S --> WC
SL --> UC
W --> WK

图表来源

  • edit.ts:20-37
  • sns.ts:35-47
  • sns_link.ts:20-31
  • work.ts:54-81
  • UserController.php:421-496
  • WeixinController.php:108-379
  • WorkController.php:62-108

章节来源

  • edit.ts:20-37
  • sns.ts:35-47
  • sns_link.ts:20-31
  • work.ts:54-81
  • UserController.php:421-496
  • WeixinController.php:108-379
  • WorkController.php:62-108

核心组件

  • 个人资料编辑
    • 前端:edit.ts 负责加载资料、提交基本信息、选择并上传头像
    • 后端:UserController::edit 返回可编辑字段;editPost 校验并更新;uploadAvatar 处理头像存储与回写
  • 社交账号绑定
    • 前端:sns.ts 展示已绑定的第三方平台,发起微信授权登录;sns_link.ts 获取绑定入口页数据
    • 后端:UserController::sns 列出插件列表并支持解绑;WeixinController::login 完成 code 换 session、绑定 user_sns、发放 token
  • 工作信息列表
    • 前端:work.ts 分页拉取用户列表,带权限检查
    • 后端:WorkController::index 校验工作端权限后返回用户列表及统计

章节来源

  • edit.ts:20-101
  • UserController.php:421-496
  • UserController.php:731-745
  • sns.ts:35-130
  • WeixinController.php:108-379
  • work.ts:20-99
  • WorkController.php:62-108

架构总览

个人信息管理采用前后端分离的 REST 风格交互:小程序通过 http 服务调用路由对应的 API 控制器方法,控制器内组合多个 Service/Facade 完成业务逻辑,最终统一以 ApiResponse 返回结果。

sequenceDiagram
participant U as "用户"
participant FE as "小程序前端<br/>edit.ts"
participant API as "API 控制器<br/>UserController.php"
participant SVC as "服务层<br/>ProfileService/Attachment"
participant DB as "数据库"
U->>FE : 打开个人资料编辑页
FE->>API : GET user.edit
API->>SVC : 构建可编辑资料
SVC-->>API : 资料数据
API-->>FE : 返回 title, user_info
U->>FE : 修改昵称/手机/地址等
FE->>API : POST user.edit_post
API->>DB : 校验并更新用户资料
DB-->>API : 成功
API-->>FE : 成功消息
U->>FE : 选择头像并上传
FE->>API : POST user.upload_avatar (multipart)
API->>SVC : 存储头像并生成URL
SVC-->>API : 返回 file_url
API-->>FE : 返回 file_url

图表来源

  • edit.ts:20-37
  • edit.ts:45-70
  • edit.ts:72-101
  • UserController.php:421-496
  • UserController.php:731-745

详细组件分析

个人资料编辑与头像上传

  • 功能要点
    • 页面加载时请求 user.edit 获取可编辑字段与标题
    • 提交 user.edit_post 进行字段校验(昵称、联系方式、手机、地址、邮编等),并通过 ProfileService 更新资料
    • 头像上传使用 wx.chooseImage + wx.uploadFile 调用 user.upload_avatar,后端将图片写入存储并回写 user.avatar 字段,返回新 URL
  • 数据流与校验
    • 后端对 nickname/contact/phone/address/postcode 等进行非法字符校验
    • 昵称唯一性校验避免重复
    • 头像上传限制尺寸(宽度 200)并记录上传者
  • 错误处理
    • 前端统一通过 douMsg 提示错误
    • 后端抛出 DomainException 携带错误信息
flowchart TD
Start(["进入编辑页"]) --> Load["请求 user.edit"]
Load --> EditUI["渲染表单"]
EditUI --> Submit{"提交表单?"}
Submit -- 否 --> Avatar{"上传头像?"}
Avatar -- 是 --> Upload["wx.uploadFile -> user.upload_avatar"]
Upload --> UpdateAvatar["后端存储并更新 avatar"]
UpdateAvatar --> ReturnUrl["返回 file_url"]
ReturnUrl --> EditUI
Avatar -- 否 --> End(["结束"])
Submit -- 是 --> Validate["后端校验字段"]
Validate --> Valid{"校验通过?"}
Valid -- 否 --> ShowErr["显示错误"]
ShowErr --> EditUI
Valid -- 是 --> Save["保存资料"]
Save --> Success["提示成功并跳转"]
Success --> End

图表来源

  • edit.ts:20-37
  • edit.ts:45-70
  • edit.ts:72-101
  • UserController.php:421-496
  • UserController.php:731-745

章节来源

  • edit.ts:20-101
  • UserController.php:421-496
  • UserController.php:731-745

社交账号绑定(微信)

  • 功能要点
    • sns.ts 展示已绑定平台列表,支持解绑
    • 微信授权流程:获取 userInfo 与 login code,调用 user.weixin.login 完成绑定或自动注册
    • WeixinController::login 根据 openid/unionid 匹配用户,必要时创建新用户并绑定 user_sns,发放 API token
  • 安全与幂等
    • IP 限频防止暴力登录
    • unionid/openid 优先匹配,避免多账号分裂
    • 未绑定场景支持仅返回 sns 信息供前端引导
sequenceDiagram
participant FE as "小程序前端<br/>sns.ts"
participant WX as "微信客户端"
participant API as "WeixinController.php"
participant DB as "数据库"
FE->>WX : 获取用户授权与登录code
FE->>API : GET user.weixin.login(code, rawData, signature, iv, encryptedData)
API->>API : 校验IP限频/参数
API->>DB : 按openid/unionid查找用户
alt 找到用户
API->>DB : 更新登录次数/可选绑定手机号
API-->>FE : 返回user_id与token
else 未找到用户
API->>DB : 创建新用户并插入user_sns
API-->>FE : 返回user_id与token
end

图表来源

  • sns.ts:49-112
  • WeixinController.php:108-379

章节来源

  • sns.ts:35-130
  • sns_link.ts:20-31
  • UserController.php:555-582
  • WeixinController.php:108-379

工作信息列表与权限控制

  • 功能要点
    • work.ts 在 onShow 中执行鉴权与权限检查 checkWorkPermission('user')
    • 分页拉取 user.work,后端 WorkController::index 校验权限后返回用户列表、等级、积分、金额、最后登录时间等
  • 数据展示
    • 前端支持上拉加载更多,后端分页返回
sequenceDiagram
participant FE as "小程序前端<br/>work.ts"
participant API as "WorkController.php"
participant DB as "数据库"
FE->>FE : onShow 鉴权+权限检查
FE->>API : GET user.work?page=1
API->>API : 检查工作端权限
API->>DB : 分页查询用户表
DB-->>API : 用户列表
API-->>FE : 返回user_list
FE->>API : 上拉加载更多 page++
API-->>FE : 追加数据

图表来源

  • work.ts:36-99
  • WorkController.php:62-108

章节来源

  • work.ts:20-99
  • WorkController.php:62-108

概念总览

以下为个人信息管理的概念流程图,帮助理解整体交互与职责边界:

flowchart LR
A["用户操作"] --> B["小程序页面"]
B --> C["HTTP 请求"]
C --> D["API 控制器"]
D --> E["服务层/存储"]
E --> F["数据库/对象存储"]
F --> E
E --> D
D --> C
C --> B

[此图为概念图,不直接映射具体源码]

依赖关系分析

  • 前端依赖
    • stores/authStore、commonStore 用于鉴权与站点配置
    • services/http 封装网络请求
    • utils/route 生成路由路径
    • utils/ui 提供统一提示
  • 后端依赖
    • ProfileService、UserService、UserAuthService、ApiTokenService 等
    • Storage/Attachment 处理文件存储
    • DB Facade 进行数据访问
    • ApiResponse 统一响应格式
graph LR
FE["小程序前端<br/>edit.ts/sns.ts/work.ts"] --> HTTP["http 服务"]
HTTP --> Route["route 工具"]
Route --> API["UserController/WeixinController/WorkController"]
API --> SVC["ProfileService/UserService/..."]
API --> ATT["Attachment/Storage"]
API --> DB["DB Facade"]

图表来源

  • edit.ts:2-6
  • sns.ts:2-6
  • work.ts:2-8
  • UserController.php:17-43
  • WeixinController.php:17-35
  • WorkController.php:17-26

章节来源

  • edit.ts:2-6
  • sns.ts:2-6
  • work.ts:2-8
  • UserController.php:17-43
  • WeixinController.php:17-35
  • WorkController.php:17-26

性能考虑

  • 前端
    • 头像上传前压缩与选择原图/压缩图,减少带宽占用
    • 列表分页加载,避免一次性拉取大量数据
  • 后端
    • 头像存储时限制图片宽度,降低存储与传输成本
    • 登录接口 IP 限频,防止滥用
    • 使用分页与只取必要字段,减少数据库压力

故障排查指南

  • 常见问题
    • 登录态失效:检查 Authorization 头是否携带有效 token,必要时重新登录
    • 头像上传失败:确认文件类型与大小,检查后端存储路径与权限
    • 微信绑定失败:核对 appid/appsecret 配置,检查 code 有效性
    • 工作端无权限:确认当前用户是否具备工作端角色
  • 定位方法
    • 前端:通过 douMsg 捕获的错误信息进行初步判断
    • 后端:关注 DomainException 抛出的错误信息与日志

章节来源

  • edit.ts:31-36
  • edit.ts:66-68
  • sns.ts:44-46
  • WeixinController.php:116-134
  • WorkController.php:64-67

结论

个人信息管理模块围绕“资料编辑、头像上传、社交绑定、工作信息”四大能力展开,前后端职责清晰、数据流明确。通过严格的字段校验、权限控制与统一的错误处理,保障了功能的稳定性与安全性。建议在后续迭代中继续完善隐私脱敏展示、更细粒度的权限策略以及更丰富的交互反馈,以提升用户体验。

附录

  • 关键接口与用途
    • user.edit / user.edit_post:获取与更新个人资料
    • user.upload_avatar:上传头像并更新用户头像字段
    • user.sns / user.sns_link:第三方账号管理与绑定入口
    • user.weixin.login:微信小程序登录与绑定
    • user.work:工作端子用户列表(需权限)
  • 推荐实践
    • 表单侧做基础校验,服务端再做强校验
    • 敏感信息(如手机号、邮箱)在列表页进行脱敏展示
    • 所有写操作均需在鉴权后进行,并对异常进行统一处理
    • 图片上传增加类型与大小限制,并在前端预览提升体验
添加日期:2026-10-05