306 lines
17 KiB
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="profile.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>
|