留氏族谱数字化项目的移动端前端,面向宗亲提供成员录入、世系查询、个人录入管理等功能。数据与后台管理系统共用同一套 MySQL 数据库,通过 Flask 后端提供的 REST API 交互。
配套后台: genealogy_app(Flask + Jinja2 管理端)
生产 API: https://familial.yunzhixue.cn/manager
AppID: wx98f5cf1c60f793b8
| 类别 | 技术 |
|---|---|
| 框架 | 微信小程序原生(WXML / WXSS / JS) |
| 基础库 | 3.8.12(见 project.private.config.json) |
| 导航 | 自定义 Tab Bar(custom-tab-bar/) |
| 模板辅助 | WXS 模块(utils/helpers.wxs) |
| 后端 | Flask REST API(Bearer Token 鉴权) |
genealogy-min-program/
├── app.js # 全局逻辑:登录态、baseUrl、token 持久化
├── app.json # 页面路由、Tab Bar、窗口样式
├── project.config.json # 小程序工程配置(AppID 等)
├── project.private.config.json # 本地私有配置(基础库版本、urlCheck 等)
├── sitemap.json
│
├── custom-tab-bar/ # 自定义底部导航(首页 / 世系查询 / 我的录入 / 家族圈)
├── utils/
│ └── helpers.wxs # WXS 工具:关系文案、字辈排序、姓名展示
│
└── pages/
├── index/ # 首页(功能入口、修谱委员会信息)
├── lineage/ # 世系查询(搜索 + 多代祖先 / 同辈 / 子女)
├── my_entries/ # 我的录入(列表、查看、编辑、删除)
├── add_member/ # 成员录入(关联成员搜索、同名检测)
├── login/ # 微信登录(手机号授权 + 用户协议)
├── policy/ # 用户服务协议 / 隐私政策
├── member_detail/ # 成员详情(独立页)
├── family_circle/ # 家族圈(静态展示,部分功能预留)
└── test/ # 开发调试页
| Tab | 页面 | 说明 |
|---|---|---|
| 首页 | pages/index |
录入信息、我的录入、家族相册/文化(预留) |
| 世系查询 | pages/lineage |
按姓名搜索,展示祖先链、同辈、子女 |
| 我的录入 | pages/my_entries |
当前用户通过小程序录入的成员 |
| 家族圈 | pages/family_circle |
家族动态与活动(当前为静态数据) |
首页 index
水墨风格 UI,提供「录入信息」「我的录入」快捷入口;未登录时引导至登录页。
世系查询 lineage
GET /api/members/search 搜索成员GET /api/lineage/<id> 加载完整世系child_order(长幼序)排序,自动滚动至查询人物/祖先位置录入信息 add_member
GET /api/members/check_duplicate 检测同名POST /api/members/add,data_source=miniprogram我的录入 my_entries
GET /api/members/my 拉取当前用户录入列表PUT /api/member/<id> 编辑DELETE /api/members/<id> 删除登录 login
open-type="getRealtimePhoneNumber" 获取手机号wx.login 获取 code,一并 POST 至 /api/wechat/loginpages/policy)所有需鉴权接口在请求头携带:
Authorization: Bearer <token>
| 方法 | 路径 | 用途 | 使用页面 |
|---|---|---|---|
| POST | /api/wechat/login |
微信登录,返回 token 与用户信息 | login |
| GET | /api/members/search?keyword= |
成员搜索 | lineage, add_member |
| GET | /api/members/check_duplicate?name= |
同名检测 | add_member |
| GET | /api/members/<id> |
成员详情 | member_detail |
| POST | /api/members/add |
新增成员 | add_member |
| GET | /api/members/my |
当前用户录入列表 | my_entries |
| PUT | /api/member/<id> |
编辑成员 | my_entries |
| DELETE | /api/members/<id> |
删除成员 | my_entries |
| GET | /api/lineage/<id> |
世系树(祖先、同辈、子女) | lineage |
完整后台路由与数据库说明见 genealogy_app/README.md。
cd ../genealogy_app
pip install -r requirements.txt
python3 app.py
# 默认监听 0.0.0.0:5001
编辑 app.js 中的 globalData.baseUrl:
// 生产环境
baseUrl: 'https://familial.yunzhixue.cn/manager'
// 本地真机调试(使用电脑局域网 IP,勿用 127.0.0.1 或 USB 虚拟网卡 198.18.x.x)
baseUrl: 'http://192.168.x.x:5001/manager'
wx98f5cf1c60f793b8(或与后台 WECHAT_APP_ID 一致的小程序)project.private.config.json 中已设 urlCheck: falsebaseUrl 必须为电脑局域网 IP(如 192.168.124.37)baseUrl 后可在开发者工具「清缓存 → 全部清除」避免旧地址残留用户点击登录
→ wx.login() 获取 code
→ getRealtimePhoneNumber 获取 phoneCode
→ POST /api/wechat/login { code, phoneCode }
→ 服务端 jscode2session + 解密手机号,写入 mp_users,返回 token
→ 小程序 wx.setStorageSync('token' / 'userInfo')
→ 后续请求 Header: Authorization: Bearer <token>
app.js 在 onLaunch 时从本地存储恢复登录态。退出登录调用 app.logout() 清除 token。
微信手机号授权后的短信验证码为平台安全策略,无法在应用层关闭。
#f5f2e9、古铜 #8b6e4e,与后台首页设计统一custom-tab-bar/index.wxss| 路径 | 类型 | 导航栏标题 |
|---|---|---|
pages/index/index |
Tab | 留家族谱 |
pages/lineage/lineage |
Tab | 世系查询 |
pages/my_entries/my_entries |
Tab | 我的录入 |
pages/family_circle/family_circle |
Tab | 家族圈 |
pages/add_member/add_member |
普通页 | 录入信息 |
pages/login/login |
普通页 | 登录 |
pages/member_detail/member_detail |
普通页 | 成员详情 |
pages/policy/policy |
普通页 | 协议 |
pages/test/test |
普通页 | 测试 |
成员录入与后台 family_member_info 对齐,主要字段:
| 字段 | 说明 |
|---|---|
name / simplified_name |
繁体名 / 简体名 |
sex |
1=男,2=女 |
birthday |
日期字符串 YYYY-MM-DD(服务端转 Unix 时间戳) |
name_word_generation |
字辈 |
family_rank |
排行 |
is_pass_away |
0=健在,1=已故,2=未知 |
marital_status |
0~3 |
relation_type / sub_relation_type |
与关联成员的关系类型 |
parent_mid |
关联成员 ID(录入页 selectedMemberId) |
data_source |
固定为 miniprogram(服务端写入) |
app.js 中 baseUrl 指向生产域名https://familial.yunzhixue.cnpages/policy)| 现象 | 处理 |
|---|---|
| 真机请求失败 / timeout | 检查 baseUrl 是否为局域网 IP;防火墙是否放行 5001 |
| 登录成功但搜索 401 | 确认请求头携带 Authorization: Bearer |
| 世系图左侧被裁切 | 横向 scroll 勿用 justify-content: center(已在 lineage.wxss 修复) |
| WXS 报错 | WXS 对象键须为字符串,见 helpers.wxs |
| 编译基础库异常 | 固定使用 3.8.12,勿跟随灰度 3.16.x |
┌─────────────────────┐ HTTPS/HTTP ┌─────────────────────┐
│ genealogy-min-program │ ── Bearer Token API ──▶ │ genealogy_app │
│ (微信小程序) │ │ Flask @ :5001 │
└─────────────────────┘ └──────────┬──────────┘
│
▼
MySQL (csqz-client)
family_member_info
family_relation_info
mp_users
最后更新:2026-07-07