在线修谱

在线修谱独立应用

版本 v1.0.01· 胡思乱想 · 2 次获取 · 独立应用
让家族关系可记录、可传承、可协作的在线族谱编修系统,支持家族树可视化、多角色协作、版本管理。
99.00原价
一次购买,永久使用

详情介绍

在线修谱(xiupu)插件使用说明

版本:1.0.0 作者:kuakeba.cn 分类:社区

一、插件简介

在线修谱(xiupu) 是一个让家族关系可记录、可传承、可协作的在线族谱编修系统。核心能力包括:

  • 家族树可视化:世代分层排布,支持缩放拖拽、祖先后裔高亮、按世代与地域筛选。
  • 世系与字辈:支系大宗小宗分房编修,自定义字辈诗,录入时自动提示当前辈分用字。
  • 复杂关系建模:父子、配偶、兄弟姐妹,兼顾过继、兼祧、离异再婚,自动检测循环与性别冲突。
  • 多人协作审核:族长、支系管理员、编辑员、成员、访客五级权限,修改留痕可追溯。
  • 一姓一谱:同姓宗亲共修一谱,全站按主姓氏统一展示。

image.png

二、安装与启用

2.1 安装

  1. 进入后台 插件管理,找到「在线修谱」插件,点击 安装。
  2. 安装过程会自动执行 install.sql,创建 8 张数据表,并注册后台菜单(家族、族员、支系、字辈、申请、日志、配置)。
  3. 安装完成后,插件的静态资源会从 plugins/xiupu/static/ 复制到 public/static/xiupu/。

2.2 启用与基础配置

进入后台 在线修谱 → 修谱配置(admin/xiupu_config),配置以下 9 项参数:

配置项类型默认值说明
谱系主姓氏 default_surname文本空本插件一姓一谱,同姓宗亲共修一谱。填写后建谱页自动预填姓氏与「某氏宗谱」,首页也按该姓氏展示;留空则自动取已有族谱的姓氏
启用在线修谱 enabled开关开关闭后前台不可访问(返回 404),后台管理仍可操作
允许访客浏览 allowvisitorview开关开关闭后仅登录成员可查看公开族谱
允许申请加入 allowapplyfamily开关开访客可申请加入家族,需管理员审核
允许前台创建族谱 allowcreatefamily开关开登录用户可在前台提交创建族谱,提交后由管理员审核通过才公开
新人物需审核 personauditrequired开关关开启后新添加的族员档案需管理员审核后才公开
已故者隐藏联系方式 deceasedhidecontact开关开默认隐藏已故族人的电话、身份证等敏感字段
单家族人数上限 maxpeopleper_family数字5000每个家族可登记的最大族人数(0 = 不限)
默认树图样式 defaulttreetype下拉tree家族树默认展示模式:tree 树状 / eu 欧式 / su 苏式 / ba 宝塔式

配置保存后即时生效。



三、前台使用

前台入口地址:/xiupu(例如 http://admin.zz/xiupu)。

3.1 首页(家族列表)

  • 展示主姓氏徽章(如「张氏宗谱 · 一姓一谱」)。
  • 统计卡片:家族数、族员数、最大世代、已故先人数。
  • 若无族谱且开放了建谱权限,显示「创建族谱」按钮。
  • 已有族谱时点击「浏览家族谱系」进入家族列表。

3.2 创建族谱

路径:/xiupu/family/create(需登录,且配置项 allowcreatefamily 开启)。

填写字段:

  • 家族名称:如「清河张氏宗谱」
  • 主姓氏:自动预填配置中的主姓氏
  • 始祖名:本族可追溯的一世祖
  • 祖籍/起源地:郡望或发祥地
  • 家训/堂号:如「百忍堂」
  • 家族简介:家族历史与修谱说明
  • 封面图

提交后进入 待审核 状态,需管理员在后台审核通过后才对前台公开。

3.3 家族详情

路径:/xiupu/family/detail?id=家族ID

展示家族简介、始祖、祖籍、家训、封面,以及「查看家族树」「族员列表」「我要入谱」等操作入口。

3.4 族员管理

#### 新增族员

路径:/xiupu/person/add?family_id=家族ID(需 edit 及以上权限)

核心字段:

  • 姓名、字号、性别
  • 所属支系、第几世、字辈用字
  • 出生日期(公历/农历)、逝世日期
  • 民族、籍贯、现居地、学历、职业、职务
  • 电话、微信、邮箱、身份证(敏感字段加密存储)
  • 头像、生平简介(富文本)
  • 可见范围:公开 / 私密 / 仅本支
  • 已故者隐藏敏感信息开关

#### 编辑族员

路径:/xiupu/person/edit?id=族员ID

#### 族员详情

路径:/xiupu/person/detail?id=族员ID

展示完整档案、亲属关系(父母、配偶、子女、兄弟姐妹)、多媒体档案。已故者按配置自动隐藏联系方式。

#### 搜索族员

路径:/xiupu/person/search?keyword=姓名

3.5 关系管理

在族员详情页可添加亲属关系,支持以下类型:

关系类型 type说明
parent_child父子(含方向:A 是 B 的父 / B 是 A 的父)
spouse配偶(互指)
sibling兄弟姐妹
adoptive收养/过继
step继父母/继子女
sworn结拜
master_disciple师徒

接口:

  • 保存关系:POST /xiupu/relationship/save
  • 删除关系:POST /xiupu/relationship/delete
  • 关系列表:GET /xiupu/relationship/list

3.6 支系浏览

路径:/xiupu/branch?family_id=家族ID

以树形展示大宗、小宗及各房支结构。

3.7 入谱申请

路径:/xiupu/invite/apply?familyid=家族ID(需配置项 allowapply_family 开启)

访客/登录用户填写:

  • 自述关系(如「张三的曾孙」)
  • 关系证明图片

提交后进入 待审核,管理员在后台「入谱申请」中审核通过后,用户即成为该家族成员。



四、家族树操作指南

路径:/xiupu/tree?family_id=家族ID

家族树是本插件的核心可视化模块,基于自研的 XiupuFamilyTree 渲染器(SVG 连线 + DOM 节点)。

4.1 视图操作

操作方式
放大工具栏 + 按钮,或鼠标滚轮向上
缩小工具栏 − 按钮,或鼠标滚轮向下
重置视图工具栏 ⟲ 按钮,恢复初始缩放与位置
平移画布在空白处按住鼠标左键拖动
查看族员详情点击任意节点卡片,跳转到该族员详情页

4.2 布局样式

工具栏下拉切换:

  • 树状图(tree,默认):自上而下的宝塔式布局
  • 宝塔式(ba)
后台配置 defaulttreetype 可设置默认样式(tree / eu / su / ba)。

4.3 根节点切换

工具栏「自动(始祖)」下拉框会列出世代最小的前 15 位先人,选择后以该人为根重新绘制子树,便于聚焦某一房支。

4.4 搜索与筛选

搜索框输入姓名可高亮匹配节点。下方筛选标签:

  • 全部世代
  • 仅男性 / 仅女性
  • 在世 / 已故

点击画布空白处可取消高亮。

4.5 导出

点击「📥 导出 JSON」,下载当前家族树的完整节点与关系数据(/xiupu/tree/export?family_id=家族ID),可用于备份或二次开发。

4.6 数据接口

家族树数据由后端 FamilyTreeService::build() 构建,接口为:

GET /xiupu/tree/data?family_id=家族ID[&root_id=根节点ID]

返回结构:

{
  "code": 0,
  "data": {
    "nodes": [
      { "id": 1, "name": "张三", "gender": 1, "gen": 1, "deceased": 1,
        "avatar": "", "birth": "1900-01-01", "death": "1980-01-01",
        "native": "河北清河", "branch_id": 0,
        "detail_url": "/xiupu/person/detail?id=1" }
    ],
    "edges": [
      { "source": 1, "target": 2, "type": "parent_child" },
      { "source": 1, "target": 3, "type": "spouse" }
    ],
    "root_id": 1,
    "generations": []
  }
}


五、后台管理

后台入口:/admin/xiupu_family(菜单「在线修谱」)。

5.1 家族管理 xiupu_family

  • 家族列表:查看所有家族,按状态筛选(正常/禁用)。
  • 新增/编辑:后台可直接创建或编辑家族,无需审核。
  • 审核:前台用户提交的建谱申请在此审核通过/驳回。
  • 删除:删除家族会级联清理关联数据。

5.2 族员管理 xiupu_person

  • 族员列表:按家族、支系、世代、姓名筛选。
  • 新增/编辑:直接录入或修改族员档案。
  • 审核:当配置 personauditrequired 开启时,新录入族员在此审核。
  • 批量操作:批量调整支系、世代、可见性等。
  • 删除:软删除(status = -1)。

5.3 支系管理 xiupu_branch

  • 管理家族的大宗/小宗/各房支,支持 parent_id 树形层级。
  • 字段:支系名称(如「长房」「二房」)、本支始祖人物、排序、说明。

5.4 字辈管理 xiupu_generation

  • 维护家族的字辈诗与世代称谓。
  • 字段:第几世、字辈用字、世系称谓(如「世祖」「二世祖」)。
  • 同一(家族, 支系, 世代)唯一,录入族员时自动提示当前辈分用字。

5.5 入谱申请 xiupu_invite

  • 审核用户的加入申请,分配角色(member / edit / branch_admin / admin)。
  • 可限定支系管理员的管辖支系(branch_id)。

5.6 编辑日志 xiupu_log

  • 记录所有 create / update / delete / relationshipadd / relationshipdel / branch_add 等操作。
  • 含操作人、IP、字段新旧值、审核状态,便于追溯与版本回滚参考。

5.7 修谱配置 xiupu_config

即第二章所述的 9 项配置。



六、角色与权限

系统采用 5 级角色 权限模型,角色判定顺序如下:

  1. 族长(admin):xiupufamily.adminuser_id 等于当前用户 ID。
  2. 邀请/认证角色:xiupuinvite 表中 status=1 记录的 role 字段(member / edit / branchadmin / admin)。
  3. 关联族员(member):xiupuperson 表中 userid 等于当前用户且 status=1。
  4. 访客(guest):以上都不满足。

权限矩阵

操作访客 guest成员 member编辑 edit支系管理员 branch_admin族长 admin
浏览 view✓✓✓✓✓
编辑 edit✓✓✓✓
管理支系 manage_branch✓✓
审核 audit✓✓
管理家族 manage_family✓
配置 config✓
删除 delete✓

支系管理员范围限制

支系管理员(branchadmin)在 xiupuinvite.branchid 字段限定的支系内行使权限;若 branchid = 0,则为全局支系管理员,可管理所有支系。具体由 PermissionService::canEditBranch() 校验。



七、数据表结构

插件共使用 8 张数据表(表名由框架自动加前缀):

7.1 xiupu_family 家族主表

字段类型说明
idint主键
namevarchar(100)家族名称
surnamevarchar(50)主姓氏
ancestorvarchar(100)始祖名
originvarchar(255)祖籍/起源地
mottovarchar(255)家训/堂号
descriptiontext家族简介
covervarchar(255)封面图
adminuseridint族长/总编用户ID
statustinyint1 正常 / 0 禁用

7.2 xiupu_branch 家族支系

字段类型说明
idint主键
family_idint所属家族
parent_idint父支系,0 = 大宗
namevarchar(100)支系名称(如「长房」「二房」)
ancestorpersonidint本支始祖人物ID
sortint排序

7.3 xiupu_generation 字辈世代

字段类型说明
idint主键
family_idint所属家族
branch_idint所属支系,0 = 全局
generation_noint第几世(从始祖起算)
charactervarchar(10)字辈用字
titlevarchar(50)世系称谓(如「世祖」「二世祖」)

唯一键:(familyid, branchid, generation_no)。

7.4 xiupu_person 族员(核心表)

字段类型说明
idint主键
familyid / branchidint所属家族 / 支系
generation_noint第几世(冗余,便于排序)
name / courtesy_namevarchar姓名 / 字号
generation_charvarchar(10)字辈用字(冗余)
gendertinyint0 未知 / 1 男 / 2 女
is_deceasedtinyint0 在世 / 1 已故
birthdate / deathdatedate出生 / 逝世日期
birthdatetype / deathdatetypevarcharsolar 公历 / lunar 农历
ethnicity / native_place / residencevarchar民族 / 籍贯 / 现居地
education / occupation / titlevarchar学历 / 职业 / 职务
phone / wechat / email / id_cardvarchar联系方式(phone、id_card 加密存储)
avatarvarchar(255)头像
biotext生平简介(富文本)
user_idint关联系统会员ID
visibilityvarchar(20)public 公开 / private 私密 / branch 仅本支
privacy_deceasedtinyint已故者隐藏敏感信息
statustinyint1 正常 / 0 待审核 / -1 删除

7.5 xiupu_relationship 族员关系(邻接表)

字段类型说明
idint主键
family_idint所属家族
personida / personidbint关系主体 A / B
typevarchar(30)parentchild / spouse / sibling / adoptive / step / sworn / masterdisciple
directionvarchar(10)atob(A是B的父)/ btoa(B是A的父)/ mutual(配偶互指)
relation_detailvarchar(50)附加信息:过继/兼祧/二婚等

唯一键:(personida, personidb, type, direction)。

7.6 xiupu_invite 成员邀请/认证

字段类型说明
idint主键
familyid / useridint家族 / 申请用户
person_idint关联的族员档案ID
relation_proofvarchar(255)关系证明图片
relation_descvarchar(255)自述关系
rolevarchar(20)member / edit / branch_admin / admin
branch_idint管辖支系(仅 branch_admin 有效,0=全局)
statustinyint0 待审核 / 1 通过 / 2 拒绝

7.7 xiupueditlog 编辑日志

字段类型说明
idint主键
familyid / personidint家族 / 关联人物(0=家族级操作)
operatoruseridint操作人
actionvarchar(30)create / update / delete / relationship_add 等
field_namevarchar(50)修改字段
oldvalue / newvaluetext旧值 / 新值
audit_statustinyint1 已生效 / 0 待审核 / 2 已驳回
ipvarchar(45)操作IP

7.8 xiupu_media 人物多媒体档案

字段类型说明
idint主键
familyid / personidint家族 / 人物
typevarchar(20)photo / video / audio / document
titlevarchar(100)标题
urlvarchar(255)资源地址
is_primarytinyint1 = 主照片


八、前台公共模板变量

前台控制器基类 FrontBase::assignCommon() 会向所有模板注入以下变量:

变量说明
$xiupu_enabled插件是否启用
$xiupu_cfg插件配置数组
$xiupu_user当前登录用户信息
$xiupuuserid当前用户ID(0 = 访客)
$xiupu_families状态正常的家族列表
$xiupu_asset静态资源路径,固定为 /static/xiupu
$xiupu_surname当前主姓氏
$xiupu_brand品牌标题,如「张氏宗谱」或「在线修谱」


九、常见问题

9.1 修改了 CSS/JS 但前台没变化?

框架的 PluginService::copyStaticAssets 只在插件安装时 将 plugins/xiupu/static/ 复制到 public/static/xiupu/。开发阶段修改静态资源后,需手动同步:

Copy-Item -Path "plugins\xiupu\static\*" -Destination "public\static\xiupu\" -Recurse -Force

此外,Nginx 对 css/js/png/jpg 等静态文件配置了 Cache-Control: public, max-age=2592000, immutable(强缓存 30 天),修改后必须 升级版本号 query string(如 xiupu.css?v=12)才能强制浏览器刷新。

9.2 前台访问 /xiupu 返回 404?

请检查后台 修谱配置 中「启用在线修谱」开关是否打开。关闭时前台所有路由返回 404,仅后台可操作。

9.3 访客看不到族谱?

检查配置项「允许访客浏览」(allowvisitorview)。关闭后未登录用户访问会返回 403「请先登录」。

9.4 新建的族谱前台不显示?

前台用户提交的建谱申请默认进入 待审核 状态,需管理员在后台「在线修谱 → 家族管理」中审核通过后才公开。

9.5 家族树节点点击后跳转 404?

节点的 detail_url 由 FamilyTreeService::build() 生成,格式为 /xiupu/person/detail?id=族员ID。请确认路由 xiupu/person/detail$ 已注册(见 routes.php)。

9.6 拖拽家族树后第一次点击节点没反应?

此问题已在 xiupu-tree.js 中修复:mousedown 事件中 moved = false 的重置已提前到节点判断之前,确保拖拽结束后首次点击节点不会被误判为移动操作。



十、路由速查

前台路由

方法路径说明
GETxiupu首页/家族列表
GETxiupu/family家族列表
GETxiupu/family/detail家族详情
GETxiupu/family/create创建族谱页
POSTxiupu/family/store提交族谱
GETxiupu/tree家族树页
GETxiupu/tree/data家族树数据(JSON)
GETxiupu/tree/export导出家族树JSON
GETxiupu/person族员列表
GETxiupu/person/detail族员详情
GETxiupu/person/add新增族员
GETxiupu/person/edit编辑族员
POSTxiupu/person/save保存族员
POSTxiupu/person/delete删除族员
GETxiupu/person/search搜索族员
POSTxiupu/relationship/save保存关系
POSTxiupu/relationship/delete删除关系
GETxiupu/relationship/list关系列表
GETxiupu/branch支系列表页
GETxiupu/branch/list支系列表数据
GETxiupu/invite/apply入谱申请页
POSTxiupu/invite/submit提交入谱申请

后台路由

菜单路由前缀说明
家族管理xiupu_family家族列表/新增/编辑/审核/删除
族员管理xiupu_person族员列表/保存/删除/审核/批量
支系管理xiupu_branch支系列表/保存/删除
字辈管理xiupu_generation字辈列表/保存/删除
入谱申请xiupu_invite申请列表/审核
编辑日志xiupu_log日志列表
修谱配置xiupu_config配置查看/保存


文档基于插件源码(XiupuPlugin.php / routes.php / install.sql / PermissionService.php / FamilyTreeService.php / FrontBase.php)整理,若插件升级请以实际代码为准。

更新记录 (2)

  • v1.0.01 2026-10-30
    完善css
  • v1.0.0 2026-10-28
    正式发布
微信客服 微信客服 QQ官方交流群 QQ官方交流群