Files
jiapu/profile-tree.html

306 lines
17 KiB
HTML

<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>世系图 - 个人中心 - 代代相传</title>
<link rel="stylesheet" href="public/css/public.css" />
<link rel="stylesheet" href="public/layui/css/layui.css" />
<link rel="stylesheet" href="public/css/profile-module.css" />
</head>
<body class="page-profile-module" data-lineage-page>
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html"
><img class="brand-logo brand-logo-mark" src="public/images/logo-mark.png" alt="" /><span class="brand-text">个人中心</span></a
>
<nav class="nav-links">
<a href="profile-families.html">我的家谱</a
><a class="active" href="profile-family-admin.html" data-genealogy-context-link>家族管理</a
><a href="profile-data.html">个人资料</a>
</nav>
<div class="nav-actions">
<a href="profile-family-home.html" data-genealogy-context-link>返回家谱主页</a
><a class="btn primary magnetic" href="#lineage-member-form" data-lineage-management hidden>添加成员</a>
</div>
</div>
</header>
<main>
<section class="module-hero">
<div class="container">
<div class="module-kicker">世系管理</div>
<div class="module-title-row">
<div>
<h1>世系图</h1>
<p>
个人中心内的树谱管理视图,用于查看成员关系、添加亲属和搜索成员。
</p>
</div>
<a class="btn ghost magnetic" href="profile-generation.html" data-genealogy-context-link
>管理字辈</a
>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-family-home.html" data-genealogy-context-link>家谱主页</a
><a class="active" href="profile-tree.html" data-genealogy-context-link>世系图</a
><a href="profile-generation.html" data-genealogy-context-link>字辈谱</a
><a href="profile-family-admin.html" data-genealogy-context-link>家族管理</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>树谱操作</h2>
<div class="lineage-toolbar lineage-current-toolbar">
<label for="lineageCurrentPerson">当前成员</label>
<select id="lineageCurrentPerson" data-lineage-person-options>
<option value="">请选择当前成员</option>
</select>
</div>
<div class="module-grid" data-lineage-management hidden>
<button class="module-card module-action-card tilt-card" type="button" data-lineage-relation="parents"
><span class="icon"></span>
<h3>添加父亲 / 母亲</h3>
<p>先选择成员,再为当前成员补充上一代关系。</p></button
><button class="module-card module-action-card tilt-card" type="button" data-lineage-relation="spouses"
><span class="icon"></span>
<h3>添加配偶</h3>
<p>先选择成员,再维护配偶关系。</p></button
><button
class="module-card module-action-card tilt-card"
type="button"
data-lineage-relation="children"
><span class="icon"></span>
<h3>添加子女</h3>
<p>先选择成员,再为当前成员补充下一代关系。</p></button
>
<button class="module-card module-action-card tilt-card" type="button" data-lineage-relation="siblings"
><span class="icon"></span>
<h3>添加兄弟姐妹</h3>
<p>先选择成员,再为当前成员新增同辈关系。</p></button
>
</div>
</section>
<section class="module-panel">
<h2>世系树</h2>
<!-- 世系树由 public/js/lineage-pages.js 按接口数据渲染 -->
<div class="lineage-tree-wrap" data-lineage-tree>
<div class="api-state api-state--loading" data-api-state="loading" role="status" aria-live="polite" aria-busy="true">世系树加载中…</div>
</div>
</section>
<section class="module-panel">
<h2>成员搜索</h2>
<div class="lineage-toolbar lineage-filter-toolbar">
<input type="search" data-lineage-keyword aria-label="按姓名、别名或人物编号搜索成员" placeholder="输入姓名、别名或人物编号搜索" />
<select data-lineage-generation-filter aria-label="按世代筛选">
<option value="">全部世代</option>
</select>
<select data-lineage-status-filter aria-label="按人物状态筛选">
<option value="">全部人物状态</option>
<option value="0">健在</option>
<option value="1">已故</option>
<option value="2">未知</option>
</select>
<button class="btn primary" type="button" data-lineage-search>搜索</button>
</div>
<p class="form-status" role="status" aria-live="polite" data-lineage-list-summary></p>
<div class="form-status" role="status" aria-live="polite" data-lineage-action-status></div>
<!-- 成员列表由世系人物分页接口渲染 -->
<div class="module-list" data-lineage-list>
<div class="api-state api-state--loading" data-api-state="loading" role="status" aria-live="polite" aria-busy="true">世系人物加载中…</div>
</div>
<div class="bottom-actions" data-lineage-pagination hidden>
<button class="btn ghost" type="button" data-lineage-page-action="previous">上一页</button>
<span class="form-status" data-lineage-page-status role="status" aria-live="polite"></span>
<button class="btn ghost" type="button" data-lineage-page-action="next">下一页</button>
</div>
</section>
<section class="module-panel">
<h2>成员详情</h2>
<!-- 点击成员列表或世系树节点后渲染详情 -->
<div data-lineage-detail>
<div class="api-state api-state--empty" data-api-state="empty" role="status" aria-live="polite">请选择一个成员查看资料</div>
</div>
</section>
<section class="module-panel" data-lineage-management hidden>
<h2>新增 / 编辑成员</h2>
<form id="lineage-member-form" class="editor-form" data-lineage-form novalidate>
<div class="editor-two">
<div class="editor-field">
<label for="lineage-binding-mode">账号绑定 <span class="field-required" aria-hidden="true">*</span></label>
<select id="lineage-binding-mode" name="bindingMode" required>
<option value="NONE" selected>不绑定账号</option>
<option value="SELF">绑定当前登录账号</option>
<option value="SPECIFIED">指定其他账号</option>
</select>
<div class="editor-field" data-lineage-specified-member hidden>
<label for="lineage-specified-member">指定账号</label>
<select id="lineage-specified-member" name="appUserId" data-lineage-member-options hidden>
<option value="">请选择已绑定账号的家谱成员</option>
</select>
</div>
<p class="upload-status" data-lineage-binding-status role="status" aria-live="polite">指定账号仅可从当前家谱正常成员中选择。</p>
</div>
<div class="editor-field">
<label for="lineage-avatar-file">头像</label>
<input id="lineage-avatar-oss-id" name="avatarOssId" type="hidden" />
<label class="upload-control" for="lineage-avatar-file">选择头像文件</label>
<input
id="lineage-avatar-file"
class="upload-input"
type="file"
accept="image/*"
data-upload-target="#lineage-avatar-oss-id"
data-upload-status="#lineage-avatar-status"
data-upload-mode="resumable"
data-upload-biz-type="avatar"
data-upload-usage-scene="lineage_avatar"
/>
<p id="lineage-avatar-status" class="upload-status" role="status" aria-live="polite">请选择头像文件</p>
</div>
</div>
<div class="editor-two">
<div class="editor-field">
<label for="lineage-person-name">姓名 <span class="field-required" aria-hidden="true">*</span></label>
<input id="lineage-person-name" name="name" type="text" placeholder="请输入成员姓名" required />
</div>
<div class="editor-field">
<label for="lineage-sex">性别</label>
<select id="lineage-sex" name="sex">
<option value="0"></option>
<option value="1"></option>
<option value="2" selected>未知</option>
</select>
</div>
</div>
<div class="editor-two">
<div class="editor-field">
<label for="lineage-generation-no">世代</label>
<select id="lineage-generation-no" name="generation" data-lineage-generation>
<option value="">请选择世代</option>
</select>
</div>
<div class="editor-field">
<label for="lineage-generation-name">字辈</label>
<input id="lineage-generation-name" name="generationName" type="text" readonly />
</div>
</div>
<div class="editor-two">
<div class="editor-field">
<label for="lineage-person-no">人物编号</label>
<input id="lineage-person-no" name="personNo" type="text" placeholder="可选;留空由系统生成" />
</div>
<div class="editor-field">
<label for="lineage-alias-name">别名</label>
<input id="lineage-alias-name" name="aliasName" type="text" placeholder="可选" />
</div>
</div>
<div class="editor-two">
<div class="editor-field">
<label for="lineage-father-id">父亲</label>
<select id="lineage-father-id" name="fatherId" data-lineage-parent-option data-empty-label="请选择父亲">
<option value="">请选择父亲</option>
</select>
</div>
<div class="editor-field">
<label for="lineage-mother-id">母亲</label>
<select id="lineage-mother-id" name="motherId" data-lineage-parent-option data-empty-label="请选择母亲">
<option value="">请选择母亲</option>
</select>
</div>
</div>
<div class="editor-two">
<div class="editor-field">
<label for="lineage-birth-date">出生时间</label>
<input id="lineage-birth-date" name="birthDate" type="datetime-local" />
</div>
<div class="editor-field">
<label for="lineage-birth-lunar">出生历法</label>
<select id="lineage-birth-lunar" name="birthLunar">
<option value="0" selected>公历</option>
<option value="1">农历</option>
</select>
</div>
</div>
<div class="editor-field">
<label for="lineage-birth-place">出生地</label>
<input id="lineage-birth-place" name="birthPlace" type="text" placeholder="可选" />
</div>
<div class="editor-two">
<div class="editor-field">
<label for="lineage-death-date">逝世时间</label>
<input id="lineage-death-date" name="deathDate" type="datetime-local" />
</div>
<div class="editor-field">
<label for="lineage-death-lunar">逝世历法</label>
<select id="lineage-death-lunar" name="deathLunar">
<option value="0" selected>公历</option>
<option value="1">农历</option>
</select>
</div>
</div>
<div class="editor-two">
<div class="editor-field">
<label for="lineage-death-place">逝世地</label>
<input id="lineage-death-place" name="deathPlace" type="text" placeholder="可选" />
</div>
<div class="editor-field">
<label for="lineage-burial-place">安葬地</label>
<input id="lineage-burial-place" name="burialPlace" type="text" placeholder="可选" />
</div>
</div>
<div class="editor-two">
<div class="editor-field">
<label for="lineage-person-status">人物状态</label>
<select id="lineage-person-status" name="personStatus">
<option value="0">健在</option>
<option value="1">已故</option>
<option value="2" selected>未知</option>
</select>
</div>
<div class="editor-field">
<label for="lineage-sort-order">排序值</label>
<input id="lineage-sort-order" name="sortOrder" type="number" step="1" placeholder="可选,数值越小越靠前" />
</div>
</div>
<div class="editor-field" data-lineage-spouse-field hidden>
<label for="lineage-relation-name">配偶关系称谓</label>
<input id="lineage-relation-name" name="relationName" type="text" placeholder="可选,例如 妻、夫" />
</div>
<div class="editor-field">
<label for="lineage-introduction">人物简介</label>
<textarea id="lineage-introduction" name="biography" placeholder="记录成员生平简介"></textarea>
</div>
<div class="editor-field">
<label for="lineage-remark">备注</label>
<textarea id="lineage-remark" name="remark" placeholder="可选"></textarea>
</div>
<div class="bottom-actions">
<button class="btn primary" type="submit" data-lineage-submit>保存成员</button>
<button class="btn ghost" type="reset">清空</button>
<span class="form-status" role="status" aria-live="polite" data-lineage-form-status></span>
</div>
</form>
</section>
</div>
</div>
</section>
</main>
<script src="public/js/jquery360.js"></script>
<script src="public/layui/layui.js"></script>
<script src="public/js/lay-config.js"></script>
<script src="public/js/profile-common.js?v=20260725-entry"></script>
<script src="config.js"></script>
<script src="utils/StorageUtil.js"></script>
<script src="utils/axios.js"></script>
<script src="utils/AxiosRequestUtil.js"></script>
<script src="utils/ApiClient.js"></script>
<script src="public/js/upload-pages.js"></script>
<script src="public/js/media-display.js"></script>
<script src="public/js/lineage-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>