交接文档

This commit is contained in:
2026-09-17 16:36:49 +08:00
parent d040507cb8
commit 24ccdf251e
338 changed files with 45 additions and 35566 deletions
-115
View File
@@ -1,115 +0,0 @@
# AGENTS.md
Behavioral guidelines to reduce common LLM coding mistakes. Merge with project-specific instructions as needed.
Tradeoff: These guidelines bias toward caution over speed. For trivial tasks, use judgment.
1. Think Before Coding
Don't assume. Don't hide confusion. Surface tradeoffs.
Before implementing:
State your assumptions explicitly. If uncertain, ask.
If multiple interpretations exist, present them instead of picking silently.
If a simpler approach exists, say so. Push back when warranted.
If something is unclear, stop. Name what is confusing. Ask.
2. Simplicity First
Minimum code that solves the problem. Nothing speculative.
No features beyond what was asked.
No abstractions for single-use code.
No "flexibility" or "configurability" that was not requested.
No error handling for impossible scenarios.
If you write 200 lines and it could be 50, rewrite it.
Ask yourself: "Would a senior engineer say this is overcomplicated?" If yes, simplify.
3. Surgical Changes
Touch only what you must. Clean up only your own mess.
When editing existing code:
Do not "improve" adjacent code, comments, or formatting.
Do not refactor things that are not broken.
Match existing style, even if you would do it differently.
If you notice unrelated dead code, mention it instead of deleting it.
When your changes create orphans:
Remove imports, variables, functions, files, docs, and references that YOUR changes made unused.
Do not remove pre-existing dead code unless asked.
The test: Every changed line should trace directly to the user's request.
4. Contract Discipline
When a new contract lands, make it the only contract in the same change.
A contract means any source-of-truth rule that code depends on: data shape, API boundary, schema, field name, config key, prompt format, file layout, runtime entrypoint, ownership boundary, or workflow.
When introducing or changing a contract, do all three in the same round:
Specify the single owner.
Identify the one module, function, schema, document, or service that owns the contract.
Do not leave the same rule duplicated across frontend, backend, scripts, prompts, docs, or tests.
If multiple places need the value, they should consume it from the owner rather than redefine it.
Delete old fields and old entrypoints.
Remove obsolete fields, fallback reads, compatibility branches, legacy routes, stale config keys, old scripts, and old docs.
Do not keep the old path "just in case" unless the user explicitly asks for a compatibility period.
If compatibility is required, name it as temporary, define the removal condition, and keep it narrow.
Tighten validators and runtime together.
Update schemas, validators, tests, fixtures, seed data, docs, and runtime code in the same change.
Make invalid old inputs fail early and loudly.
Do not allow runtime behavior to accept shapes that validators reject, or validators to allow shapes that runtime no longer supports.
The rule: New owner, old path removed, validator and runtime tightened. If one is missing, the contract migration is not complete.
5. Goal-Driven Execution
Define success criteria. Loop until verified.
Transform tasks into verifiable goals:
"Add validation" -> "Write tests for invalid inputs, then make them pass."
"Fix the bug" -> "Write a test that reproduces it, then make it pass."
"Refactor X" -> "Ensure tests pass before and after."
"Change a contract" -> "Identify owner, remove old paths, tighten validators and runtime, then verify old inputs fail."
For multi-step tasks, state a brief plan:
1. [Step] -> verify: [check]
2. [Step] -> verify: [check]
3. [Step] -> verify: [check]
Strong success criteria let you loop independently. Weak criteria like "make it work" require clarification.
6. Verification Before Closure
A change is not finished until the relevant behavior is checked.
Before reporting completion:
Run the smallest relevant test, script, typecheck, build, or manual verification.
Prefer focused verification over broad, noisy suites when the task is narrow.
If verification cannot be run, say exactly why.
If verification is only by inspection, say that clearly.
If the task changed a contract, verify both the new valid path and the old invalid path.
Do not claim success from intent. Claim success from evidence.
7. Reporting Results
Be concise, concrete, and honest.
When summarizing work:
Say what changed.
Say how it was verified.
Mention any remaining risk or skipped verification.
Do not bury important caveats in vague language.
Do not over-explain routine edits.
Good final answer shape:
Changed: [short summary]
Verified: [command/check]
Notes: [only if needed]
These guidelines are working if: fewer unnecessary changes in diffs, fewer rewrites due to overcomplication, fewer hidden compatibility paths, clearer ownership of contracts, and clarifying questions happen before implementation rather than after mistakes.
-8604
View File
File diff suppressed because it is too large Load Diff
-39
View File
@@ -1,39 +0,0 @@
# 首页设计还原 QA
## 对照基准
- 设计源:用户在当前对话提供的桌面首页设计图,红色文字和箭头作为替换与结构调整标注。
- 实现基线:原首页 `index-modern.html` 的品牌色、字体、卡片质感和 `public/js/page-effects.js` 交互。
- 桌面审查截图:`artifacts/homepage-final-review-full.png`CSS 视口 1440 × 2200DPR 1。
- 移动审查截图:`artifacts/homepage-final-review-mobile.png`CSS 视口 500 × 1600DPR 1。
- 页面状态:未登录初始状态。
## 结构对照
- 页面沿用原首页 1280px 宽屏容器,顺序为双层导航、首屏、四个主入口、第一条九格广告栏、六个内容入口、推荐与友情链接、第二条九格广告栏、页脚。
- 已删除设计图没有的家谱广场、文章列表、姓氏百科、相关推荐大卡、下载大区块。
- “我的家谱”是独立强调入口,链接 `profile-families.html`,承担查看、新建和管理全部家谱。
- 红色标注按替换文案处理;被替换的旧标题没有在同一卡片中保留。
## 视觉与交互对照
- 保留原首页的暖纸色、朱红渐变导航、宋体标题、黑体正文、宽屏留白、圆角卡片、层次阴影与半透明面板。
- 首屏按设计图重组为正文、二维码、原有蓝色家谱封面、祠堂和家族记忆图片。
- 保留原首页的 `tilt-card` 指针倾斜、按钮磁吸、图片悬停缩放、移动菜单和 reduced-motion 行为。
- 桌面页脚链接与备案信息已恢复居中,不受原全局链接布局影响。
- 主入口图片按左侧内容定位,避免服务、视频和相册标题被居中裁切;入口区、内容卡和广告栏已压缩无效留白。
- 两组九格广告栏均使用项目已有广告图片,不再显示文字占位块。
- 页脚链接区改为完整浅色横条,消除了深色背景在两侧提前露出的断层。
## 响应式与可访问性
- 1120px 以下主入口和广告栏分栏;720px 以下首屏、入口和内容卡改为单列。
- 浏览器导航结构专项检查通过,移动断点继续沿用原首页规则。
- 图片提供替代文本;二维码入口、导航、广告位和内容卡均使用链接语义;焦点样式沿用公共样式。
## 剩余差异
- P3:设计图右下角为多人家族合影,仓库没有对应素材,当前继续使用原有家族记忆图片。
- P3:原首页交互动效在截图中不可见,但已通过复用原脚本和交互类保留。
final result: passed
-95
View File
@@ -1,95 +0,0 @@
# Design · 代代相传家谱 PC
这是 PC 家谱项目的统一设计系统。所有页面沿用同一套品牌、排版、间距、状态和交互规则;新增规则先修改本文件,不在单个页面创建另一套视觉语言。
## 用户与任务
- 用户:家谱创建者、管理员、普通家人和浏览公开家谱的访客。
- 核心任务:创建或加入家谱,维护世系与成员,发布并浏览家族内容,处理邀请、消息与服务。
- 设计气质:中文编辑式、克制、可信。功能页以任务效率为先,公共页保留家族文化氛围。
## Genre
Editorial。登录后的应用页使用更紧凑的工作台表达,不采用营销页式的大标题和卡片堆叠。
## Macrostructure family
- 公开与营销页面:Content Portal。真实内容和图片优先,标题区只说明当前任务。
- 登录后应用页面:Workbench。固定页头、稳定的分组侧栏和单一内容画布;跨页面导航位置不改变。
- 内容与资料页面:Long Document / List Detail。列表进入独立详情页,桌面端需要连续比较时允许页内列表详情。
## Theme
- `--color-paper`: `oklch(97.5% 0.012 82)`
- `--color-paper-2`: `oklch(94.8% 0.024 78)`
- `--color-ink`: `oklch(31% 0.028 158)`
- `--color-ink-2`: `oklch(51% 0.022 158)`
- `--color-rule`: `oklch(86% 0.028 78)`
- `--color-accent`: `oklch(56% 0.185 29)`
- `--color-accent-strong`: `oklch(43% 0.13 29)`
- `--color-focus`: `oklch(61% 0.17 29)`
- 辅助绿色和金色仅用于状态与文化信息,不与主操作竞争。
## Typography
- Display`STSong`, `Songti SC`, `SimSun`, serif;字重 600;正常体。
- Body`Microsoft YaHei`, `PingFang SC`, system-ui, sans-serif;字重 400/600。
- Mono`Consolas`, `SFMono-Regular`, monospace,仅用于编号和技术值。
- 标题不得使用斜体,不保留无业务意义的英文眉题。
- 正文舒适行宽为 62~76 个中文字符。
## Spacing
使用根目录 `tokens.css` 中的 4px 命名刻度。新样式只能使用 `--space-*`,页面内容区桌面最大宽度统一为 `--layout-max`
## Motion
- 动效只表达悬停、焦点、展开和状态变化,最多使用透明度与 `transform`
- 默认 160~220ms,无弹跳和持续漂浮。
- `prefers-reduced-motion` 下关闭空间位移并将反馈压缩为短暂透明度变化。
## Interaction decisions
- 独立页面:多字段创建/编辑、详情阅读、支付、权限和安全设置。
- 对话框:删除/退出等不可逆确认、密码输入、单一短任务;统一使用站内对话框,不调用浏览器原生 `confirm`/`prompt`
- 图片灯箱:相册和内容图片预览;不改变当前列表位置。
- 页内展开:帮助问答、筛选、非关键补充信息。
- 抽屉:桌面端评论或需要保留主内容上下文的辅助任务;不承载长表单。
- 加载、空数据、错误、无权限:显示在对应内容区域,不使用弹窗打断。
- 成功反馈:优先更新页面状态;仅在用户可能看不到变化时使用短消息。
## Media rules
- 业务媒体只消费后端 `BusinessFileAccess.accessUrl`,不得拼接 OSS ID 或暴露内部路径。
- 家谱封面 16:9;相册封面 4:3;文章封面 16:9;头像 1:1;动态媒体根据原图比例限制最大高度。
- 有地址时显示真实图片;无图片时使用姓名首字或明确空状态,不使用伪造照片、CSS 图画或无意义占位块。
- 图片必须有与业务内容对应的替代文本;装饰图片使用空替代文本。
- 正文附件使用左对齐、最大 280px 的缩略图网格并完整显示原图;封面和视频预览按业务比例完整呈现,不把单张附件拉伸成整栏大图。
- 视频使用原生播放器,列表中只自动加载封面,不自动播放。
## Shared states
所有交互控件必须覆盖默认、悬停、键盘焦点、按下、禁用、加载、错误、成功状态。错误信息靠近问题区域,同时保留可恢复操作。
## Responsive
- 验证宽度:320、375、414、768、1024、1440。
- 768px 以下侧栏转为页内分组导航,主内容单列。
- `html``body` 使用 `overflow-x: clip`;按钮和主导航文字不得折成两行。
- 附件网格桌面端按 200–280px 自适应列展示,移动端保持最大 280px;标题允许长家谱名称安全换行。
## What pages MUST share
- 品牌标识、朱红主操作色、排版和按钮语气。
- 页头高度、内容最大宽度、侧栏位置、表单控件高度和状态样式。
- 图片比例、媒体错误回退、空状态和权限状态。
## Per-page allowances
- 公开页可使用仓库内已有的真实祠堂和服务图片。
- 应用页不增加装饰插画,数据与操作本身承担视觉层级。
- 内容页以标题、正文、真实封面和元信息为主。
## Exports
实际 CSS 变量以根目录 `tokens.css` 为准。项目为原生 HTML/CSS/JS,不启用 Tailwind 或 shadcn;如未来迁移,颜色、字体、间距必须从相同命名 token 映射,不得另建品牌值。
-116
View File
@@ -1,116 +0,0 @@
<!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/css/about.css" />
</head>
<body class="page-about">
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html"
><img class="brand-logo" src="public/images/logo.png" alt="我们的家谱,代代相传" /></a
>
<nav class="nav-links">
<a href="index.html">首页</a>
<a href="genealogy.html">数字家谱</a>
<a href="plaza.html">家谱广场</a>
<a href="culture.html">家族文化</a>
<a href="surname.html">姓氏百科</a>
<a href="app.html">应用下载</a>
<a href="help.html">帮助中心</a>
<a class="active" href="about.html">关于我们</a>
</nav>
<div class="nav-actions">
<a href="login.html">登录</a><a href="register.html">注册</a
><a class="btn primary magnetic" href="create-genealogy.html"
>创建家谱</a
>
</div>
</div>
</header>
<main>
<section class="inner-hero about-hero">
<div class="container">
<div class="hero-copy">
<div class="eyebrow">关于我们</div>
<h1>用数字化方式守护家族记忆</h1>
<p class="lead">
代代相传面向家庭、宗亲会与地方文化组织,提供家谱创建、资料管理、文化展示和亲人协作工具。
</p>
<div class="about-tags">
<span>数字家谱</span><span>亲人协作</span><span>文化传承</span>
</div>
</div>
<div class="hero-card about-seal tilt-card">
<div class="seal-orb"></div>
<span></span>
<p>记录家族,连接亲人,传承文化。</p>
</div>
</div>
</section>
<section class="section alt values-section">
<div class="container">
<div class="section-head">
<h2>我们重视</h2>
<p>让家族资料真实、清晰、可协作,也能长期传下去。</p>
</div>
<div class="grid-3">
<div class="card soft value-card tilt-card">
<div class="value-icon"></div>
<h3>真实</h3>
<p>尊重家族资料来源,鼓励记录出处与修订过程。</p>
</div>
<div class="card soft value-card tilt-card">
<div class="value-icon"></div>
<h3>协作</h3>
<p>让更多亲人参与补充资料,形成长期维护机制。</p>
</div>
<div class="card soft value-card tilt-card">
<div class="value-icon"></div>
<h3>传承</h3>
<p>把家族文化整理成可持续保存的数字档案。</p>
</div>
</div>
</div>
</section>
</main>
<footer class="footer">
<div class="container">
<div class="footer-grid">
<div>
<a class="brand" href="index.html"
><img class="brand-logo" src="public/images/logo-light.png" alt="我们的家谱,代代相传" /></a
>
<p>一个面向家庭和宗族的数字家谱与家族文化门户。</p>
</div>
<div>
<h4>产品入口</h4>
<a href="genealogy.html">数字家谱</a><a href="plaza.html">家谱广场</a><a href="app.html">应用下载</a><a href="help.html">帮助中心</a>
</div>
<div>
<h4>文化内容</h4>
<a href="culture.html">家族文化</a><a href="surname.html">姓氏百科</a><a href="article-detail.html">家谱知识</a><a href="notice-detail.html">平台公告</a>
</div>
<div>
<h4>服务支持</h4>
<a href="help.html">帮助中心</a>
<a href="submit-ticket.html">提交问题</a>
<a href="about.html">关于平台</a>
</div>
</div>
<div class="footer-legal">
<div>© 2026 代代相传. All rights reserved.</div>
<a href="https://beian.miit.gov.cn" target="_blank" rel="noopener">ICP备案:蜀ICP备2024044594号-1</a>
</div>
</div>
</footer>
<script src="config.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-154
View File
@@ -1,154 +0,0 @@
<!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/css/app.css" />
</head>
<body class="page-app" data-promotion-page>
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html"
><img class="brand-logo" src="public/images/logo.png" alt="我们的家谱,代代相传" /></a
>
<nav class="nav-links">
<a href="index.html">首页</a>
<a href="genealogy.html">数字家谱</a>
<a href="plaza.html">家谱广场</a>
<a href="culture.html">家族文化</a>
<a href="surname.html">姓氏百科</a>
<a class="active" href="app.html">应用下载</a>
<a href="help.html">帮助中心</a>
<a href="about.html">关于我们</a>
</nav>
<div class="nav-actions">
<a href="login.html">登录</a><a href="register.html">注册</a
><a class="btn primary magnetic" href="create-genealogy.html"
>创建家谱</a
>
</div>
</div>
</header>
<main>
<section class="inner-hero app-hero">
<div class="container">
<div class="hero-copy">
<div class="eyebrow">移动应用</div>
<h1>手机端随时记录,电脑端清晰浏览</h1>
<p class="lead">
家族成员可以在手机端上传照片、查看家谱、发布动态;电脑端适合浏览门户内容和公开家谱。
</p>
<div class="hero-buttons">
<a class="btn primary magnetic" href="download.html">下载应用</a
><a class="btn ghost magnetic" href="help.html">查看帮助</a>
</div>
<div class="app-stats">
<span>相册上传</span><span>视频发布</span><span>家谱查看</span>
</div>
</div>
<div class="hero-card app-shot-wrap tilt-card">
<div class="app-orbit"></div>
<img
class="phone-shot first"
src="public/images/app-home.png"
alt="APP首页截图"
/>
<img
class="phone-shot second"
src="public/images/app-family-home.png"
alt="家谱主页截图"
/>
</div>
</div>
</section>
<section class="section alt app-feature-section">
<div class="container">
<div class="section-head">
<h2>移动端能力</h2>
<p>
手机端适合随时记录家族资料、上传影像并与亲人共同维护。
</p>
</div>
<div class="grid-4">
<div class="card soft app-feature-card tilt-card">
<div class="app-icon"></div>
<h3>创建家谱</h3>
<p>手机上快速创建或加入家族空间。</p>
</div>
<div class="card soft app-feature-card tilt-card">
<div class="app-icon"></div>
<h3>宣传相册</h3>
<p>随手上传老照片、祖屋照片和聚会照片。</p>
</div>
<div class="card soft app-feature-card tilt-card">
<div class="app-icon"></div>
<h3>宣传视频</h3>
<p>发布家族活动与人物影像。</p>
</div>
<div class="card soft app-feature-card tilt-card">
<div class="app-icon"></div>
<h3>谱文详情</h3>
<p>阅读谱序、传记和家族文章。</p>
</div>
</div>
</div>
</section>
<section class="section app-promotion-section">
<div class="container">
<div class="section-head">
<h2>应用推广</h2>
<p>展示后台维护的应用推广、公告和下载引导内容。</p>
</div>
<div class="promotion-list" data-promotion-list>
<div class="api-state api-state--loading" data-api-state="loading" role="status" aria-live="polite" aria-busy="true">正在读取应用推广…</div>
</div>
</div>
</section>
</main>
<footer class="footer">
<div class="container">
<div class="footer-grid">
<div>
<a class="brand" href="index.html"
><img class="brand-logo" src="public/images/logo-light.png" alt="我们的家谱,代代相传" /></a
>
<p>一个面向家庭和宗族的数字家谱与家族文化门户。</p>
</div>
<div>
<h4>产品入口</h4>
<a href="genealogy.html">数字家谱</a><a href="plaza.html">家谱广场</a><a href="app.html">应用下载</a><a href="help.html">帮助中心</a>
</div>
<div>
<h4>文化内容</h4>
<a href="culture.html">家族文化</a><a href="surname.html">姓氏百科</a><a href="article-detail.html">家谱知识</a
><a href="notice-detail.html">平台公告</a>
</div>
<div>
<h4>服务支持</h4>
<a href="help.html">帮助中心</a>
<a href="submit-ticket.html">提交问题</a>
<a href="about.html">关于平台</a>
</div>
</div>
<div class="footer-legal">
<div>© 2026 代代相传. All rights reserved.</div>
<a href="https://beian.miit.gov.cn" target="_blank" rel="noopener">ICP备案:蜀ICP备2024044594号-1</a>
</div>
</div>
</footer>
<script src="public/js/profile-common.js"></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/page-effects.js"></script>
<script src="public/js/media-display.js"></script>
<script src="public/js/app-promotion-pages.js"></script>
</body>
</html>
-86
View File
@@ -1,86 +0,0 @@
<!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/css/article-detail.css" />
</head>
<body class="page-article-detail" data-site-article-page>
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html"
><img class="brand-logo" src="public/images/logo.png" alt="我们的家谱,代代相传" /></a
>
<nav class="nav-links">
<a href="index.html">首页</a>
<a href="genealogy.html">数字家谱</a>
<a href="plaza.html">家谱广场</a>
<a class="active" href="culture.html">家族文化</a>
<a href="surname.html">姓氏百科</a>
<a href="app.html">应用下载</a>
<a href="help.html">帮助中心</a>
<a href="about.html">关于我们</a>
</nav>
<div class="nav-actions">
<a href="login.html">登录</a><a href="register.html">注册</a>
<a class="btn primary magnetic" href="create-genealogy.html"
>创建家谱</a
>
</div>
</div>
</header>
<div class="container">
<div class="module-meta" data-site-article-status role="status" aria-live="polite"></div>
</div>
<main data-site-article-detail>
<div class="api-state api-state--loading" data-api-state="loading" role="status" aria-live="polite" aria-busy="true">正在读取资讯详情…</div>
</main>
<footer class="footer">
<div class="container">
<div class="footer-grid">
<div>
<a class="brand" href="index.html"
><img class="brand-logo" src="public/images/logo-light.png" alt="我们的家谱,代代相传" /></a
>
<p>一个面向家庭和宗族的数字家谱与家族文化门户。</p>
</div>
<div>
<h4>产品入口</h4>
<a href="genealogy.html">数字家谱</a
><a href="plaza.html">家谱广场</a><a href="app.html">应用下载</a
><a href="help.html">帮助中心</a>
</div>
<div>
<h4>文化内容</h4>
<a href="culture.html">家族文化</a
><a href="surname.html">姓氏百科</a
><a href="news.html">新闻资讯</a
><a href="about.html">平台公告</a>
</div>
<div>
<h4>服务支持</h4>
<a href="help.html">帮助中心</a>
<a href="submit-ticket.html">提交问题</a>
<a href="about.html">关于平台</a>
</div>
</div>
<div class="footer-legal">
<div>© 2026 代代相传. All rights reserved.</div>
<a href="https://beian.miit.gov.cn" target="_blank" rel="noopener">ICP备案:蜀ICP备2024044594号-1</a>
</div>
</div>
</footer>
<script src="public/js/profile-common.js"></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/page-effects.js"></script>
<script src="public/js/site-news-pages.js"></script>
</body>
</html>
-73
View File
@@ -1,73 +0,0 @@
<!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/css/site-info.css" />
</head>
<body>
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html">
<img class="brand-logo" src="public/images/logo.png" alt="我们的家谱,代代相传" />
</a>
<nav class="nav-links">
<a href="index.html">首页</a>
<a href="news.html">新闻资讯</a>
<a href="help.html">帮助中心</a>
<a href="about.html">关于我们</a>
</nav>
<div class="nav-actions">
<a href="login.html">登录</a>
<a href="register.html">注册</a>
</div>
</div>
</header>
<main>
<section class="site-info-hero">
<div class="container">
<div>
<div class="site-info-kicker">儿童隐私保护</div>
<h1>儿童个人信息处理规则</h1>
<p>用于说明儿童个人信息的处理边界、监护人权利和保护措施。</p>
</div>
<div class="site-info-mark"></div>
</div>
</section>
<section class="site-info-section">
<div class="container site-info-layout">
<article class="site-info-panel">
<div class="site-info-notice">
待法务确认:本页面仅建立儿童个人信息规则的访问入口,不构成已生效的规则。发布前必须由运营主体与法务确认适用年龄、监护人授权与完整文本。
</div>
<h2>正式文本应涵盖</h2>
<p>
儿童信息处理目的、必要性、监护人同意方式、信息访问更正删除渠道,以及发生个人信息安全事件时的告知安排。
</p>
</article>
<aside class="site-info-panel">
<h2>相关文档</h2>
<div class="site-info-links">
<a href="privacy.html">隐私政策</a>
<a href="terms.html">服务协议</a>
<a href="help.html">帮助中心</a>
</div>
</aside>
</div>
</section>
</main>
<footer class="footer">
<div class="container">
<div class="footer-legal">
<div>© 2026 代代相传. All rights reserved.</div>
<a href="privacy.html">隐私政策</a>
<a href="terms.html">服务协议</a>
</div>
</div>
</footer>
<script src="config.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-1
View File
@@ -1 +0,0 @@
(function(n,i){if(typeof module=="object"&&module.exports){module.exports=i;return}n.GenealogyConfig=i(n)})(typeof globalThis!="undefined"?globalThis:window,function(n){"use strict";var i="ced7e5f0498645c6ec642dcf450b036f",c="000000",p="genealogy_auth_token",o=/^(?:javascript|data|vbscript):/i;function u(){return{open:function(t){var e=String(t||"").trim();if(!e||o.test(e)||typeof n.open!="function")return null;var r=n.open(e,"_blank","noopener");return r&&(r.opener=null),r},replace:function(t){var e=String(t||"").trim();!e||o.test(e)||n.location&&typeof n.location.replace=="function"&&n.location.replace(e)}}}var f={development:{apiBaseUrl:"https://backend-api.ddxcjp.cn/"},production:{apiBaseUrl:"https://backend-api.ddxcjp.cn/"}};function a(){var t=n.location||{},e=t.hostname||"";return e==="localhost"||e==="127.0.0.1"||t.port?"development":"production"}function l(){return f[a()].apiBaseUrl}function d(){return{environment:a(),apiBaseUrl:l(),clientId:i,tenantId:c,tokenKey:p}}return n.NavigationUtil=n.NavigationUtil||u(),{getEnvironment:a,getApiBaseUrl:l,getConfig:d}});
-177
View File
@@ -1,177 +0,0 @@
<!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/css/create-genealogy.css" />
</head>
<body class="page-create-genealogy" data-genealogy-create-page>
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html"
><img class="brand-logo" src="public/images/logo.png" alt="我们的家谱,代代相传" /></a
>
<nav class="nav-links">
<a href="index.html">首页</a>
<a href="genealogy.html">数字家谱</a>
<a href="plaza.html">家谱广场</a>
<a href="culture.html">家族文化</a>
<a href="surname.html">姓氏百科</a>
<a href="app.html">应用下载</a>
<a href="help.html">帮助中心</a>
<a href="about.html">关于我们</a>
</nav>
<div class="nav-actions">
<a href="login.html">登录</a><a href="register.html">注册</a
><a class="btn primary magnetic active" href="create-genealogy.html"
>创建家谱</a
>
</div>
</div>
</header>
<main>
<section class="inner-hero create-hero">
<div class="container">
<div class="hero-copy">
<div class="eyebrow">创建家谱</div>
<h1>创建属于家族的数字空间</h1>
<p class="lead">
填写姓氏谱名、地区与简介,先建立家谱主页,再逐步邀请亲人共同完善资料。
</p>
<div class="create-tags">
<span>基础资料</span><span>成员世系</span><span>亲人共修</span>
</div>
</div>
<div class="hero-card process-card tilt-card">
<div class="process-orb"></div>
<h3>创建流程</h3>
<div class="step-list">
<p><b>1</b><span>填写基础信息</span></p>
<p><b>2</b><span>添加第一批成员</span></p>
<p><b>3</b><span>邀请亲人共修</span></p>
</div>
</div>
</div>
</section>
<section class="section alt create-form-section">
<div class="container">
<form class="card form-card create-form tilt-card" data-genealogy-create-form novalidate aria-describedby="public-create-status">
<div class="form-ornament"></div>
<h2>家谱信息</h2>
<p class="form-note">
标有 * 的字段为必填。登录后即可创建,成功后会进入新家谱主页。
</p>
<p class="form-note" data-genealogy-create-quota role="status" aria-live="polite">正在读取家谱额度…</p>
<div class="form-grid">
<label class="field" for="publicFamilyName">谱名 <b aria-hidden="true">*</b>
<input id="publicFamilyName" class="input" name="genealogyName" placeholder="例如:四川武胜汤氏族谱" required />
</label>
<label class="field" for="publicFamilySurname">主要姓氏 <b aria-hidden="true">*</b>
<input id="publicFamilySurname" class="input" name="surname" placeholder="例如:汤" required />
</label>
<div class="field" role="group" aria-labelledby="public-family-region-label" aria-describedby="public-region-status public-create-status">
<span id="public-family-region-label">家谱所在地 <b aria-hidden="true">*</b></span>
<div class="region-picker create-region-picker" data-region-picker>
<label for="publicFamilyProvince">
<select id="publicFamilyProvince" class="input" name="provinceCode" data-region-level="province">
<option value="">请选择省</option>
</select>
</label>
<label for="publicFamilyCity">
<select id="publicFamilyCity" class="input" name="cityCode" data-region-level="city">
<option value="">请选择市</option>
</select>
</label>
<label for="publicFamilyDistrict">区县
<select id="publicFamilyDistrict" class="input" name="districtCode" data-region-level="district">
<option value="">请选择区县</option>
</select>
</label>
<input type="hidden" name="regionCode" data-region-code />
</div>
<div id="public-region-status" class="form-note" data-region-picker-status role="status" aria-live="polite"></div>
</div>
<label class="field" for="publicAncestralHall">堂号/祠堂
<input id="publicAncestralHall" class="input" name="ancestralHall" placeholder="选填" />
</label>
<label class="field" for="publicOriginPlace">籍贯/起源地
<input id="publicOriginPlace" class="input" name="originPlace" placeholder="选填" />
</label>
<label class="field" for="publicAddressDetail">详细地址
<input id="publicAddressDetail" class="input" name="addressDetail" placeholder="选填" />
</label>
<label class="field" for="publicIntro">家谱简介
<textarea id="publicIntro" name="intro" placeholder="选填"></textarea>
</label>
<label class="field" for="publicVisibility">可见范围
<select id="publicVisibility" class="input" name="visibility">
<option value="1">公开</option>
<option value="2">成员可见</option>
<option value="0">私密</option>
</select>
</label>
<label class="field" for="publicJoinMode">加入方式
<select id="publicJoinMode" class="input" name="joinMode" aria-describedby="public-invite-mode-note">
<option value="1">审核加入</option>
<option value="2">邀请码加入</option>
<option value="0">关闭加入</option>
</select>
<span id="public-invite-mode-note" class="form-note">创建完成后,可在家谱首页的“邀请家人”中生成一次性邀请链接。</span>
</label>
<div id="public-create-status" class="form-note" data-genealogy-create-status role="status" aria-live="polite"></div>
<div>
<button class="btn primary magnetic submit-btn" type="submit" data-genealogy-create-submit>提交创建</button>
</div>
</div>
</form>
</div>
</section>
</main>
<footer class="footer">
<div class="container">
<div class="footer-grid">
<div>
<a class="brand" href="index.html"
><img class="brand-logo" src="public/images/logo-light.png" alt="我们的家谱,代代相传" /></a
>
<p>一个面向家庭和宗族的数字家谱与家族文化门户。</p>
</div>
<div>
<h4>产品入口</h4>
<a href="genealogy.html">数字家谱</a><a href="plaza.html">家谱广场</a><a href="app.html">应用下载</a><a href="help.html">帮助中心</a>
</div>
<div>
<h4>文化内容</h4>
<a href="culture.html">家族文化</a><a href="surname.html">姓氏百科</a><a href="article-detail.html">家谱知识</a><a href="notice-detail.html">平台公告</a>
</div>
<div>
<h4>服务支持</h4>
<a href="help.html">帮助中心</a>
<a href="submit-ticket.html">提交问题</a>
<a href="about.html">关于平台</a>
</div>
</div>
<div class="footer-legal">
<div>© 2026 代代相传. All rights reserved.</div>
<a href="https://beian.miit.gov.cn" target="_blank" rel="noopener">ICP备案:蜀ICP备2024044594号-1</a>
</div>
</div>
</footer>
<script src="public/js/jquery360.js"></script>
<script src="config.js"></script>
<script src="utils/StorageUtil.js"></script>
<script src="utils/FormUtil.js"></script>
<script src="utils/axios.js"></script>
<script src="utils/AxiosRequestUtil.js"></script>
<script src="utils/ApiClient.js"></script>
<script src="public/js/profile-common.js"></script>
<script src="public/js/region-pages.js"></script>
<script src="public/js/genealogy-entry-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-129
View File
@@ -1,129 +0,0 @@
<!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/css/culture.css" />
</head>
<body class="page-culture">
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html"
><img class="brand-logo" src="public/images/logo.png" alt="我们的家谱,代代相传" /></a
>
<nav class="nav-links">
<a href="index.html">首页</a>
<a href="genealogy.html">数字家谱</a>
<a href="plaza.html">家谱广场</a>
<a class="active" href="culture.html">家族文化</a>
<a href="surname.html">姓氏百科</a>
<a href="app.html">应用下载</a>
<a href="help.html">帮助中心</a>
<a href="about.html">关于我们</a>
</nav>
<div class="nav-actions">
<a href="login.html">登录</a><a href="register.html">注册</a
><a class="btn primary magnetic" href="create-genealogy.html"
>创建家谱</a
>
</div>
</div>
</header>
<main>
<section class="inner-hero culture-hero">
<div class="container">
<div class="hero-copy">
<div class="eyebrow">家族文化</div>
<h1>让家风、族训与故事被认真保存</h1>
<p class="lead">
家族文化承接新闻、知识、公告和故事,让谱文之外的记忆也能被阅读、分享和传承。
</p>
<div class="culture-stats">
<span>家风家训</span><span>谱文故事</span><span>使用指南</span>
</div>
</div>
<div class="hero-card culture-quote tilt-card">
<div class="quote-moon"></div>
<span>家风</span>
<p>
一张老照片、一段口述、一篇谱序,都可以成为后人理解家族的入口。
</p>
</div>
</div>
</section>
<section class="section alt article-section">
<div class="container">
<div class="section-head">
<h2>精选文章</h2>
<p>用可阅读的内容入口连接家谱知识、姓氏文化和平台使用指南。</p>
</div>
<div class="grid-3">
<a class="article-card tilt-card" href="article-detail.html">
<div class="article-cover"><span>家谱知识</span></div>
<div class="article-body">
<h3>为什么家谱不只是一本名册</h3>
<p>
家谱记录的是家族关系,也记录一个家庭如何理解自己的来处与传承。
</p>
<span>家谱知识 · 2026.05</span>
</div>
</a>
<a class="article-card tilt-card" href="article-detail.html">
<div class="article-cover"><span>姓氏文化</span></div>
<div class="article-body">
<h3>字辈在家族传承中的作用</h3>
<p>字辈让不同世代的人能找到自己的位置,也让同族称谓更清晰。</p>
<span>姓氏文化 · 2026.05</span>
</div>
</a>
<a class="article-card tilt-card" href="article-detail.html">
<div class="article-cover"><span>使用指南</span></div>
<div class="article-body">
<h3>如何邀请亲人共同完善家谱</h3>
<p>从创建家谱、生成邀请码到设置管理员,逐步建立协作流程。</p>
<span>使用指南 · 2026.05</span>
</div>
</a>
</div>
</div>
</section>
</main>
<footer class="footer">
<div class="container">
<div class="footer-grid">
<div>
<a class="brand" href="index.html"
><img class="brand-logo" src="public/images/logo-light.png" alt="我们的家谱,代代相传" /></a
>
<p>一个面向家庭和宗族的数字家谱与家族文化门户。</p>
</div>
<div>
<h4>产品入口</h4>
<a href="genealogy.html">数字家谱</a><a href="plaza.html">家谱广场</a><a href="app.html">应用下载</a><a href="help.html">帮助中心</a>
</div>
<div>
<h4>文化内容</h4>
<a href="culture.html">家族文化</a><a href="surname.html">姓氏百科</a><a href="article-detail.html">家谱知识</a><a href="notice-detail.html">平台公告</a>
</div>
<div>
<h4>服务支持</h4>
<a href="help.html">帮助中心</a>
<a href="submit-ticket.html">提交问题</a>
<a href="about.html">关于平台</a>
</div>
</div>
<div class="footer-legal">
<div>© 2026 代代相传. All rights reserved.</div>
<a href="https://beian.miit.gov.cn" target="_blank" rel="noopener">ICP备案:蜀ICP备2024044594号-1</a>
</div>
</div>
</footer>
<script src="config.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-105
View File
@@ -1,105 +0,0 @@
<!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/css/download.css" />
</head>
<body class="page-download" data-promotion-page>
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html"
><img class="brand-logo" src="public/images/logo.png" alt="我们的家谱,代代相传" /></a
>
<nav class="nav-links">
<a href="index.html">首页</a><a href="genealogy.html">数字家谱</a
><a href="plaza.html">家谱广场</a><a href="culture.html">家族文化</a
><a href="surname.html">姓氏百科</a
><a class="active" href="app.html">应用下载</a
><a href="help.html">帮助中心</a><a href="about.html">关于我们</a>
</nav>
<div class="nav-actions">
<a href="login.html">登录</a><a href="register.html">注册</a
><a class="btn primary magnetic" href="create-genealogy.html"
>创建家谱</a
>
</div>
</div>
</header>
<main>
<section class="inner-hero download-hero">
<div class="container">
<div class="hero-copy">
<div class="eyebrow">应用下载</div>
<h1>下载代代相传 APP</h1>
<p class="lead">
手机端适合日常上传宣传相册、发布宣传视频、查看家谱和补充资料。
</p>
<div class="detail-actions">
<a class="btn primary magnetic" href="app.html">查看应用介绍</a
><a class="btn ghost magnetic" href="help.html">安装帮助</a>
</div>
</div>
<div class="hero-card qr-card tilt-card">
<h3>选择下载方式</h3>
<p>请在下方选择平台当前提供的可用下载入口。</p>
</div>
</div>
</section>
<section class="section alt">
<div class="container">
<div class="section-head">
<h2>下载方式</h2>
<p>下载地址会根据平台当前配置显示;没有可用入口时会明确提示。</p>
</div>
<div class="grid-3" data-promotion-download-list>
<div class="api-empty">下载推广内容加载中</div>
</div>
</div>
</section>
</main>
<footer class="footer">
<div class="container">
<div class="footer-grid">
<div>
<a class="brand" href="index.html"
><img class="brand-logo" src="public/images/logo-light.png" alt="我们的家谱,代代相传" /></a
>
<p>一个面向家庭和宗族的数字家谱与家族文化门户。</p>
</div>
<div>
<h4>产品入口</h4>
<a href="genealogy.html">数字家谱</a
><a href="plaza.html">家谱广场</a><a href="app.html">应用下载</a
><a href="help.html">帮助中心</a>
</div>
<div>
<h4>文化内容</h4>
<a href="culture.html">家族文化</a
><a href="surname.html">姓氏百科</a
><a href="article-detail.html">家谱知识</a
><a href="notice-detail.html">平台公告</a>
</div>
<div>
<h4>服务支持</h4>
<a href="help.html">帮助中心</a>
<a href="submit-ticket.html">提交问题</a>
<a href="about.html">关于平台</a>
</div>
</div>
<div class="footer-legal">
<div>© 2026 代代相传. All rights reserved.</div>
<a href="https://beian.miit.gov.cn" target="_blank" rel="noopener">ICP备案:蜀ICP备2024044594号-1</a>
</div>
</div>
</footer>
<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/page-effects.js"></script>
</body>
</html>
-141
View File
@@ -1,141 +0,0 @@
<!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/css/family-detail.css" />
</head>
<body class="page-family-detail">
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html"
><img class="brand-logo" src="public/images/logo.png" alt="我们的家谱,代代相传" /></a
>
<nav class="nav-links">
<a href="index.html">首页</a>
<a href="genealogy.html">数字家谱</a>
<a class="active" href="plaza.html">家谱广场</a>
<a href="culture.html">家族文化</a>
<a href="surname.html">姓氏百科</a>
<a href="app.html">应用下载</a>
<a href="help.html">帮助中心</a>
<a href="about.html">关于我们</a>
</nav>
<div class="nav-actions">
<a href="login.html">登录</a><a href="register.html">注册</a>
<a class="btn primary magnetic" href="create-genealogy.html"
>创建家谱</a
>
</div>
</div>
</header>
<main data-family-detail>
<section class="inner-hero detail-hero">
<div class="container">
<div class="hero-copy">
<div class="eyebrow">家谱详情</div>
<h1 data-family-text="title">四川武胜汤氏族</h1>
<p class="lead" data-family-text="intro|description|summary" data-fallback="公开展示家族源流、世系概览、字辈排行、谱文资料和宣传相册,让访客快速理解这一本家谱的内容结构。">
公开展示家族源流、世系概览、字辈排行、谱文资料和宣传相册,让访客快速理解这一本家谱的内容结构。
</p>
<div class="detail-actions">
<a class="btn primary magnetic" href="join-genealogy.html" data-family-join-link
>申请加入</a
>
<a class="btn ghost magnetic" href="plaza.html">返回广场</a>
</div>
</div>
<div class="hero-card family-summary tilt-card">
<span class="summary-badge">公开家谱</span>
<h3 data-family-text="title">汤氏族谱</h3>
<div class="summary-grid" data-family-summary>
<span><b>128</b>成员</span>
<span><b>6</b>世代</span>
<span><b>18</b>谱文</span>
<span><b>7</b>相册</span>
</div>
</div>
</div>
</section>
<section class="section alt">
<div class="container detail-layout">
<aside class="detail-panel tilt-card">
<h3>家谱信息</h3>
<p><b>主要姓氏:</b><span data-family-text="surname" data-fallback="汤"></span></p>
<p><b>地区:</b><span data-family-text="addressDetail|regionName|originPlace" data-fallback="四川武胜">四川武胜</span></p>
<p><b>堂号:</b><span data-family-text="ancestralHall" data-fallback="中山堂">中山堂</span></p>
<p><b>维护方式:</b><span data-family-text="joinModeName|joinMode" data-fallback="多人共修">多人共修</span></p>
</aside>
<div class="detail-main">
<article class="content-card tilt-card">
<h2>家族简介</h2>
<p data-family-text="intro|description|summary" data-fallback="本谱以四川武胜汤氏族人为主体,整理始祖源流、迁徙线索、字辈排行、重要人物与家风故事。公开内容用于展示家族文化,完整成员资料需申请加入后查看。">
本谱以四川武胜汤氏族人为主体,整理始祖源流、迁徙线索、字辈排行、重要人物与家风故事。公开内容用于展示家族文化,完整成员资料需申请加入后查看。
</p>
</article>
<div class="grid-3">
<div class="mini-card tilt-card">
<h3>世系概览</h3>
<p>按代际关系梳理成员结构,帮助族人找到自己的位置。</p>
</div>
<div class="mini-card tilt-card">
<h3>谱文资料</h3>
<p>收录谱序、家训、修谱说明和公开纪念文章。</p>
</div>
<div class="mini-card tilt-card">
<h3>宣传相册</h3>
<p>展示祠堂祖屋、修谱活动、老照片和家族纪念内容。</p>
</div>
</div>
</div>
</div>
</section>
</main>
<footer class="footer">
<div class="container">
<div class="footer-grid">
<div>
<a class="brand" href="index.html"
><img class="brand-logo" src="public/images/logo-light.png" alt="我们的家谱,代代相传" /></a
>
<p>一个面向家庭和宗族的数字家谱与家族文化门户。</p>
</div>
<div>
<h4>产品入口</h4>
<a href="genealogy.html">数字家谱</a
><a href="plaza.html">家谱广场</a><a href="app.html">应用下载</a
><a href="help.html">帮助中心</a>
</div>
<div>
<h4>文化内容</h4>
<a href="culture.html">家族文化</a
><a href="surname.html">姓氏百科</a
><a href="article-detail.html">家谱知识</a
><a href="about.html">平台公告</a>
</div>
<div>
<h4>服务支持</h4>
<a href="help.html">帮助中心</a>
<a href="submit-ticket.html">提交问题</a>
<a href="about.html">关于平台</a>
</div>
</div>
<div class="footer-legal">
<div>© 2026 代代相传. All rights reserved.</div>
<a href="https://beian.miit.gov.cn" target="_blank" rel="noopener">ICP备案:蜀ICP备2024044594号-1</a>
</div>
</div>
</footer>
<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/page-effects.js"></script>
</body>
</html>
-54
View File
@@ -1,54 +0,0 @@
<!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/css/site-info.css" />
</head>
<body>
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html"
><img
class="brand-logo"
src="public/images/logo.png"
alt="我们的家谱,代代相传"
/></a>
<nav class="nav-links">
<a href="index.html">首页</a><a href="help.html">帮助中心</a
><a href="about.html">关于我们</a>
</nav>
<div class="nav-actions"><a href="login.html">登录</a></div>
</div>
</header>
<main>
<section class="site-info-section">
<div class="container">
<div class="site-info-status">
<div class="site-info-mark">!</div>
<h2>无访问权限</h2>
<p>
当前账号没有访问此内容的权限。请确认登录账号,或联系家谱管理员处理。
</p>
<div class="site-info-actions">
<a class="btn primary magnetic" href="index.html">返回首页</a
><a class="btn ghost magnetic" href="help.html">查看帮助</a>
</div>
</div>
</div>
</section>
</main>
<footer class="footer">
<div class="container">
<div class="footer-legal">
<div>© 2026 代代相传. All rights reserved.</div>
<a href="terms.html">服务协议</a>
</div>
</div>
</footer>
<script src="config.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-65
View File
@@ -1,65 +0,0 @@
<!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/layui/css/layui.css" />
<link rel="stylesheet" href="public/css/public.css" />
<link rel="stylesheet" href="public/tac/css/tac.css" />
<link rel="stylesheet" href="public/css/forgot-password.css" />
</head>
<body class="page-forgot-password">
<main class="auth-layout auth-scenic-layout recover-layout">
<a class="brand auth-page-brand" href="index.html"
><img class="brand-logo" src="public/images/logo.png" alt="我们的家谱,代代相传" /></a
>
<section
class="card form-card auth-card recover-card"
aria-labelledby="recover-title"
>
<div class="eyebrow">找回密码</div>
<h1 id="recover-title">找回密码</h1>
<p class="lead">输入注册手机号,获取验证码后重设登录密码。</p>
<form id="password-reset-form" class="form-grid" novalidate>
<label class="auth-field" for="reset-phone">
<span>手机号 <b aria-hidden="true">*</b></span>
<input id="reset-phone" class="input" name="phone" type="tel" inputmode="numeric" autocomplete="tel" maxlength="11" placeholder="请输入注册手机号" required />
</label>
<div class="auth-field">
<label for="reset-sms-code">短信验证码 <b aria-hidden="true">*</b></label>
<div class="code-row">
<input id="reset-sms-code" class="input" name="smsCode" autocomplete="one-time-code" inputmode="numeric" maxlength="4" pattern="\d{4}" placeholder="请输入四位验证码" required />
<button class="btn ghost" type="button" data-api-send-code>获取验证码</button>
</div>
</div>
<label class="auth-field" for="reset-password">
<span>新密码 <b aria-hidden="true">*</b></span>
<input id="reset-password" class="input" name="newPassword" type="password" autocomplete="new-password" placeholder="至少六位" required />
</label>
<label class="auth-field" for="reset-confirm-password">
<span>确认新密码 <b aria-hidden="true">*</b></span>
<input id="reset-confirm-password" class="input" name="confirmPassword" type="password" autocomplete="new-password" placeholder="请再次输入新密码" required />
</label>
<input type="hidden" name="validToken" />
<div id="reset-status" class="auth-form-status" role="status" aria-live="polite" data-auth-form-status></div>
<button class="btn primary" type="submit">重设密码</button>
</form>
</section>
</main>
<script src="public/js/md5.js"></script>
<script src="config.js"></script>
<script src="utils/StorageUtil.js"></script>
<script src="utils/FormUtil.js"></script>
<script src="utils/axios.js"></script>
<script src="utils/AxiosRequestUtil.js"></script>
<script src="utils/MessageUtil.js"></script>
<script src="utils/ApiClient.js"></script>
<script src="public/layui/layui.js"></script>
<script src="public/tac/js/tac.min.js"></script>
<script src="public/js/captcha-pages.js"></script>
<script src="public/js/profile-common.js"></script>
<script src="public/js/auth-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-157
View File
@@ -1,157 +0,0 @@
<!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/css/genealogy.css" />
</head>
<body class="page-genealogy">
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html"
><img class="brand-logo" src="public/images/logo.png" alt="我们的家谱,代代相传" /></a
>
<nav class="nav-links">
<a href="index.html">首页</a>
<a class="active" href="genealogy.html">数字家谱</a>
<a href="plaza.html">家谱广场</a>
<a href="culture.html">家族文化</a>
<a href="surname.html">姓氏百科</a>
<a href="app.html">应用下载</a>
<a href="help.html">帮助中心</a>
<a href="about.html">关于我们</a>
</nav>
<div class="nav-actions">
<a href="login.html">登录</a><a href="register.html">注册</a
><a class="btn primary magnetic" href="create-genealogy.html"
>创建家谱</a
>
</div>
</div>
</header>
<main>
<section class="inner-hero genealogy-hero">
<div class="container">
<div class="hero-copy">
<div class="eyebrow">数字家谱</div>
<h1>把成员关系整理成清晰可查的数字家谱</h1>
<p class="lead">
从始祖、分支、排行到个人资料,数字家谱帮助家族建立长期可维护的成员档案和世系关系。
</p>
<div class="genealogy-stats">
<div><strong>8</strong><span>资料模块</span></div>
<div><strong>3步</strong><span>快速建谱</span></div>
<div><strong>多人</strong><span>协作共修</span></div>
</div>
</div>
<div class="hero-card tree-preview tilt-card">
<div class="tree-glow"></div>
<div class="tree-row root"><span>始祖</span></div>
<div class="tree-line"></div>
<div class="tree-row branch">
<span>长房</span><span>二房</span><span>三房</span>
</div>
<div class="tree-line short"></div>
<div class="tree-row generation">
<span>第六世</span><span>第七世</span><span>第八世</span
><span>第九世</span>
</div>
</div>
</div>
</section>
<section class="section alt capability-section">
<div class="container">
<div class="section-head">
<h2>核心能力</h2>
<p>
围绕修谱、查谱和协作维护,把家族资料从零散记录整理成完整档案。
</p>
</div>
<div class="grid-4">
<div class="card soft feature-card tilt-card">
<div class="icon-word"></div>
<h3>世系图</h3>
<p>
以树谱方式展示成员关系,支持查看个人资料、添加亲属和调整排行。
</p>
</div>
<div class="card soft feature-card tilt-card">
<div class="icon-word"></div>
<h3>字辈谱</h3>
<p>记录各代字辈与人数,让世代脉络更加清楚。</p>
</div>
<div class="card soft feature-card tilt-card">
<div class="icon-word"></div>
<h3>谱文资料</h3>
<p>沉淀谱序、家训、人物传记和修谱说明。</p>
</div>
<div class="card soft feature-card tilt-card">
<div class="icon-word"></div>
<h3>权限管理</h3>
<p>设置管理员、内容可见范围与入谱审核,保护家族隐私。</p>
</div>
</div>
</div>
</section>
<section class="section coedit-section">
<div class="container grid-2">
<div class="card dark coedit-card tilt-card">
<h2>适合多人共修</h2>
<p>
家族成员可以分别补充照片、成员资料、谱文和故事,再由管理员统一审核,避免资料越传越散。
</p>
<a class="btn primary magnetic" href="create-genealogy.html"
>开始创建</a
>
</div>
<div class="card process-card tilt-card">
<h3>修谱流程</h3>
<div class="step-list">
<p><b>1</b><span>创建家谱并填写姓氏、地区、堂号</span></p>
<p><b>2</b><span>录入第一批成员,建立上下辈关系</span></p>
<p><b>3</b><span>邀请亲人加入,共同完善资料</span></p>
</div>
</div>
</div>
</section>
</main>
<footer class="footer">
<div class="container">
<div class="footer-grid">
<div>
<a class="brand" href="index.html"
><img class="brand-logo" src="public/images/logo-light.png" alt="我们的家谱,代代相传" /></a
>
<p>一个面向家庭和宗族的数字家谱与家族文化门户。</p>
</div>
<div>
<h4>产品入口</h4>
<a href="genealogy.html">数字家谱</a><a href="plaza.html">家谱广场</a><a href="app.html">应用下载</a><a href="help.html">帮助中心</a>
</div>
<div>
<h4>文化内容</h4>
<a href="culture.html">家族文化</a><a href="surname.html">姓氏百科</a><a href="article-detail.html">家谱知识</a><a href="notice-detail.html">平台公告</a>
</div>
<div>
<h4>服务支持</h4>
<a href="help.html">帮助中心</a>
<a href="submit-ticket.html">提交问题</a>
<a href="about.html">关于平台</a>
</div>
</div>
<div class="footer-legal">
<div>© 2026 代代相传. All rights reserved.</div>
<a href="https://beian.miit.gov.cn" target="_blank" rel="noopener">ICP备案:蜀ICP备2024044594号-1</a>
</div>
</div>
</footer>
<script src="config.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-117
View File
@@ -1,117 +0,0 @@
<!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/css/help.css" />
</head>
<body class="page-help">
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html"
><img class="brand-logo" src="public/images/logo.png" alt="我们的家谱,代代相传" /></a
>
<nav class="nav-links">
<a href="index.html">首页</a>
<a href="genealogy.html">数字家谱</a>
<a href="plaza.html">家谱广场</a>
<a href="culture.html">家族文化</a>
<a href="surname.html">姓氏百科</a>
<a href="app.html">应用下载</a>
<a class="active" href="help.html">帮助中心</a>
<a href="about.html">关于我们</a>
</nav>
<div class="nav-actions">
<a href="login.html">登录</a><a href="register.html">注册</a
><a class="btn primary magnetic" href="create-genealogy.html"
>创建家谱</a
>
</div>
</div>
</header>
<main>
<section class="inner-hero help-hero">
<div class="container">
<div class="hero-copy">
<div class="eyebrow">帮助中心</div>
<h1>从创建到协作,快速解决常见问题</h1>
<p class="lead">
帮助内容由平台持续维护,覆盖账号、家谱和内容使用中的常见问题。
</p>
<div class="help-tags">
<span>账号安全</span><span>家谱使用</span><span>内容管理</span>
</div>
</div>
<div class="hero-card help-card tilt-card">
<div class="help-orb"></div>
<div class="help-icon">?</div>
<h3>需要人工协助?</h3>
<p class="muted">
遇到资料导入、权限或账号问题,可以提交说明,客服会协助处理。
</p>
<a class="btn primary magnetic" href="submit-ticket.html"
>提交工单</a
>
<a class="btn ghost magnetic" href="my-tickets.html">我的工单</a>
</div>
</div>
</section>
<section class="section alt faq-section">
<div class="container">
<div class="section-head">
<h2>常见问题</h2>
<p>选择问题后读取平台发布的完整解答。</p>
<button class="btn ghost" type="button" data-help-refresh>刷新帮助</button>
</div>
<div class="muted" data-help-status role="status" aria-live="polite"></div>
<div class="faq-list is-loading" data-help-list>
<div class="api-state api-state--loading" data-api-state="loading" role="status" aria-live="polite" aria-busy="true">正在读取帮助文章…</div>
</div>
</div>
</section>
</main>
<footer class="footer">
<div class="container">
<div class="footer-grid">
<div>
<a class="brand" href="index.html"
><img class="brand-logo" src="public/images/logo-light.png" alt="我们的家谱,代代相传" /></a
>
<p>一个面向家庭和宗族的数字家谱与家族文化门户。</p>
</div>
<div>
<h4>产品入口</h4>
<a href="genealogy.html">数字家谱</a><a href="plaza.html">家谱广场</a><a href="app.html">应用下载</a><a href="help.html">帮助中心</a>
</div>
<div>
<h4>文化内容</h4>
<a href="culture.html">家族文化</a><a href="surname.html">姓氏百科</a><a href="article-detail.html">家谱知识</a><a href="notice-detail.html">平台公告</a>
</div>
<div>
<h4>服务支持</h4>
<a href="help.html">帮助中心</a>
<a href="submit-ticket.html">提交问题</a>
<a href="about.html">关于平台</a>
</div>
</div>
<div class="footer-legal">
<div>© 2026 代代相传. All rights reserved.</div>
<a href="https://beian.miit.gov.cn" target="_blank" rel="noopener">ICP备案:蜀ICP备2024044594号-1</a>
</div>
</div>
</footer>
<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/page-effects.js"></script>
<script src="public/js/profile-common.js"></script>
<script src="public/js/help-pages.js"></script>
</body>
</html>
-556
View File
@@ -1,556 +0,0 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>代代相传家谱_在线修家谱_家谱查询_姓氏寻根_祠堂祭祀</title>
<meta
name="keywords"
content="电子家谱,在线修家谱,家谱制作,家谱查询,中国家谱网,寻根,祠堂,祭祀,祭拜,中华传统文化,生命文化,儒释道,姓氏源流;敬祖睦族,忠孝两全,传承家风;族谱网,族记;清明节家谱,过年修家谱,海外寻根"
/>
<meta
name="description"
content="相传相传家谱网,大型生命文化平台,综合儒释道思想,弘扬中华传统文化,提供电子家谱_在线修家谱_网上修家谱,家谱制作_族谱制作_修谱软件,家谱查询_姓氏寻根_寻根问祖_姓氏源流,祠堂祭祀_祭拜_祭奠,弘扬孝敬_忠孝两全_相夫教子_敬祖睦族_慎终追远_传承家风,覆盖清明节家谱_过年修家谱_90后修家谱_海外华人寻根_老家谱电子化,代代相传_薪火相传"
/>
<link rel="stylesheet" href="public/css/public.css" />
<link rel="stylesheet" href="public/css/index.css" />
</head>
<body class="page-home">
<div class="company-bar">
<div class="container">富众鑫科技</div>
</div>
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html"
><img
class="brand-logo"
src="public/images/logo.png"
alt="我们的家谱,代代相传"
/></a>
<nav class="nav-links">
<a class="active" href="index.html">首页</a>
<a href="genealogy.html">数字家谱</a>
<a href="plaza.html">家谱广场</a>
<a href="culture.html">家族文化</a>
<a href="surname.html">姓氏百科</a>
<a href="app.html">应用下载</a>
<a href="help.html">帮助中心</a>
<a href="about.html">关于我们</a>
</nav>
<div class="nav-actions">
<a href="login.html">登录</a>
<a href="register.html">注册</a>
<a class="btn primary magnetic" href="create-genealogy.html"
>创建家谱</a
>
</div>
</div>
</header>
<main>
<div class="hero">
<div class="container hero-inner">
<div class="hero-copy">
<div class="eyebrow">数字家谱与家族文化门户</div>
<h1>
一部会生长的<br /><span class="hero-title-mark">数字家谱</span>
</h1>
<p class="lead">
把姓氏源流、世系关系、字辈排行、宣传相册、谱文故事与亲人动态整理在一起,让家族的来处清晰可见,让记忆可以继续传下去。
</p>
<div class="word-scroll-card">
<div class="word-scroll-label">正在记录</div>
<div class="word-window">
<div class="word-track">
<div class="word">寻根问祖</div>
<div class="word">字辈排行</div>
<div class="word">世系关系</div>
<div class="word">宣传相册</div>
<div class="word">谱文故事</div>
<div class="word">亲人动态</div>
<div class="word">寻根问祖</div>
<div class="word">字辈排行</div>
<div class="word">世系关系</div>
<div class="word">宣传相册</div>
<div class="word">谱文故事</div>
<div class="word">亲人动态</div>
</div>
</div>
</div>
<div class="hero-path">
<span>1</span>创建家谱<i></i><span>2</span>邀请亲人<i></i
><span>3</span>共同传承
</div>
<div class="hero-action-card">
<div class="cta">
<a class="btn primary magnetic" href="create-genealogy.html"
>立即创建家谱</a
>
<a class="btn ghost magnetic" href="plaza.html">查看家谱示例</a>
</div>
</div>
<div class="metrics">
<div class="metric"><strong>家谱广场</strong>浏览公开家族</div>
<div class="metric"><strong>姓氏百科</strong>了解姓氏源流</div>
<div class="metric"><strong>家族文化</strong>阅读传承故事</div>
</div>
</div>
<div class="hero-visual">
<div class="archive-stage"></div>
<div class="book-cover"></div>
<div class="hall">
<img src="public/images/ancestral-hall.png" alt="家族祠堂" />
</div>
<a class="video-card" href="promo-video.html">
<small>宣传影像</small>
<span>观看宣传视频</span>
</a>
<div class="search-panel">
<h3>查找公开家谱</h3>
<a class="search-box" href="search-result.html">
<span>输入姓氏、地区或家谱名称</span><b>搜索</b>
</a>
<div class="genealogy-list">
<div class="genealogy-item">
<strong>四川成都陈氏族</strong>共修入 128 人
</div>
<div class="genealogy-item">
<strong>湖广刘氏家谱</strong>收录 6 代字辈
</div>
<div class="genealogy-item">
<strong>岭南张氏宗谱</strong>开放谱文 18 篇
</div>
</div>
</div>
</div>
</div>
</div>
<div class="quick-strip">
<div class="container quick-inner">
<a class="quick-card tilt-card" href="create-genealogy.html">
<b>创建家谱</b><span>填写姓氏谱名,建立属于家族的数字空间。</span>
</a>
<a class="quick-card tilt-card" href="join-genealogy.html">
<b>加入家谱</b><span>通过邀请码加入亲人创建的家谱。</span>
</a>
<a class="quick-card tilt-card" href="plaza.html">
<b>浏览广场</b><span>查看公开家谱示例与家族故事。</span>
</a>
<a
class="quick-card tilt-card"
id="promo-video"
href="promo-video.html"
><b>宣传视频</b
><span>进入视频列表,查看宣传影像和纪念视频。</span></a
>
</div>
</div>
<section class="functions">
<div class="container">
<div class="section-head">
<h2>数字家谱核心功能</h2>
</div>
<div class="function-grid">
<div class="function-card tilt-card">
<div class="icon"></div>
<h3>世系图</h3>
<p>
以树谱方式展示成员关系,支持查看个人资料、添加亲属、调整排行。
</p>
</div>
<div class="function-card tilt-card">
<div class="icon"></div>
<h3>字辈谱</h3>
<p>记录各代字辈与人数,让家族世代脉络更加清楚。</p>
</div>
<a class="function-card tilt-card" href="promo-album.html">
<div class="icon"></div>
<h3>宣传相册</h3>
<p>按相册归档宣传影像,展示祖屋、活动、老照片和重要时刻。</p>
</a>
<div class="function-card tilt-card">
<div class="icon"></div>
<h3>谱文资料</h3>
<p>沉淀谱序、谱文、家训、恩荣录等文本内容。</p>
</div>
<div class="function-card tilt-card">
<div class="icon"></div>
<h3>家族圈</h3>
<p>发布动态、分享图片、评论互动,让亲人之间保持连接。</p>
</div>
<div class="function-card tilt-card">
<div class="icon"></div>
<h3>功德录</h3>
<p>记录家族贡献人物与事迹,让善行与纪念被看见。</p>
</div>
<div class="function-card tilt-card">
<div class="icon"></div>
<h3>贺礼邀请</h3>
<p>发布婚礼、生日、升学等家族喜事,通知相关成员。</p>
</div>
<div class="function-card tilt-card">
<div class="icon"></div>
<h3>权限管理</h3>
<p>设置管理员、内容可见范围与入谱审核,保护家族隐私。</p>
</div>
</div>
</div>
</section>
<section class="plaza">
<div class="container">
<div class="section-head">
<h2>家谱广场</h2>
</div>
<div class="plaza-layout">
<a class="featured-family tilt-card" href="family-detail.html">
<h3>四川成都陈氏族</h3>
<p>
已收录成员 128 人,整理字辈 6 代,公开谱文 18 篇,宣传相册 7
组。家族资料由成员共同维护,持续更新。
</p>
</a>
<div class="family-cards">
<a class="family-card tilt-card" href="family-detail.html">
<h4>湖广刘氏家谱</h4>
<p>从始祖世系到现代家庭分支,保留字辈与迁徙记录。</p>
<div class="tag-row">
<span class="tag">公开家谱</span
><span class="tag">字辈完整</span>
</div>
</a>
<a class="family-card tilt-card" href="family-detail.html">
<h4>岭南张氏宗谱</h4>
<p>以谱文、相册、家族动态为主,记录家风与重要纪念。</p>
<div class="tag-row">
<span class="tag">家族文化</span
><span class="tag">宣传相册</span>
</div>
</a>
<a class="family-card tilt-card" href="family-detail.html">
<h4>川东李氏家谱</h4>
<p>多人共同完善成员资料,形成清晰的家族成员档案。</p>
<div class="tag-row">
<span class="tag">多人共修</span
><span class="tag">成员资料</span>
</div>
</a>
</div>
</div>
</div>
</section>
<section class="culture">
<div class="container">
<div class="section-head">
<h2>家族文化</h2>
</div>
<div class="article-grid">
<a class="article-card tilt-card" href="article-detail.html">
<div class="article-cover"></div>
<div class="article-body">
<h3>为什么家谱不只是一本名册</h3>
<p>
家谱记录的是家族关系,也记录一个家庭如何理解自己的来处与传承。
</p>
<div class="article-meta">家谱知识 · 2026.05</div>
</div>
</a>
<a class="article-card tilt-card" href="article-detail.html">
<div class="article-cover"></div>
<div class="article-body">
<h3>字辈在家族传承中的作用</h3>
<p>字辈让不同世代的人能找到自己的位置,也让同族称谓更清晰。</p>
<div class="article-meta">姓氏文化 · 2026.05</div>
</div>
</a>
<a class="article-card tilt-card" href="article-detail.html">
<div class="article-cover"></div>
<div class="article-body">
<h3>如何邀请亲人共同完善家谱</h3>
<p>从创建家谱、生成邀请码到设置管理员,逐步建立协作流程。</p>
<div class="article-meta">使用指南 · 2026.05</div>
</div>
</a>
</div>
</div>
</section>
<section class="ad-slots">
<div class="container">
<div class="ad-grid">
<a
class="ad-card tilt-card"
href="https://3dyjs.cn/"
target="_blank"
rel="noopener"
aria-label="3D研究室广告"
>
<img src="public/images/mlogo.png" alt="3D研究室" />
</a>
<a
class="ad-card tilt-card"
href="promo-album.html"
aria-label="影像相册广告"
>
<img src="public/images/ad-album-small.png" alt="影像相册" />
</a>
<a
class="ad-card tilt-card"
href="promo-video.html"
aria-label="活动视频广告"
>
<img src="public/images/ad-video-small.png" alt="活动视频" />
</a>
<a
class="ad-card tilt-card"
href="genealogy.html"
aria-label="族谱印制广告"
>
<img src="public/images/ad-print.png" alt="族谱印制" />
</a>
<a
class="ad-card tilt-card"
href="culture.html"
aria-label="祠堂文化广告"
>
<img src="public/images/ad-hall.png" alt="祠堂文化" />
</a>
<a
class="ad-card tilt-card"
href="app.html"
aria-label="云端存档广告"
>
<img src="public/images/ad-cloud.png" alt="云端存档" />
</a>
<a
class="ad-card tilt-card"
href="culture.html"
aria-label="宗亲联谊广告"
>
<img src="public/images/ad-reunion.png" alt="宗亲联谊" />
</a>
<a
class="ad-card tilt-card"
href="surname.html"
aria-label="姓氏研究广告"
>
<img src="public/images/ad-research.png" alt="姓氏研究" />
</a>
<a
class="ad-card tilt-card"
href="culture.html"
aria-label="家风记忆广告"
>
<img src="public/images/ad-memory.png" alt="家风记忆" />
</a>
<a
class="ad-card tilt-card"
href="help.html"
aria-label="资料校对广告"
>
<img src="public/images/ad-data.png" alt="资料校对" />
</a>
</div>
</div>
</section>
<section class="surname">
<div class="container">
<div class="surname-panel tilt-card">
<div class="surname-intro">
<h2>姓氏百科</h2>
<p>
以姓氏为入口,整理姓氏源流、名人故事、地区分布、字辈参考和相关家谱。
</p>
<a class="btn primary magnetic" href="surname.html"
>进入姓氏百科</a
>
</div>
<div class="surname-grid">
<a class="surname-name" href="surname-detail.html"></a>
<a class="surname-name" href="surname-detail.html"></a>
<a class="surname-name" href="surname-detail.html"></a>
<a class="surname-name" href="surname-detail.html"></a>
<a class="surname-name" href="surname-detail.html"></a>
<a class="surname-name" href="surname-detail.html"></a>
<a class="surname-name" href="surname-detail.html"></a>
<a class="surname-name" href="surname-detail.html"></a>
<a class="surname-name" href="surname-detail.html"></a>
<a class="surname-name" href="surname-detail.html"></a>
<a class="surname-name" href="surname-detail.html"></a>
<a class="surname-name" href="surname-detail.html"></a>
<a class="surname-name" href="surname-detail.html"></a>
<a class="surname-name" href="surname-detail.html"></a>
<a class="surname-name" href="surname-detail.html"></a>
<a class="surname-name" href="surname-detail.html"></a>
<a class="surname-name" href="surname-detail.html"></a>
<a class="surname-name" href="surname-detail.html"></a>
<a class="surname-name" href="surname-detail.html"></a>
<a class="surname-name" href="surname-detail.html"></a>
<a class="surname-name" href="surname-detail.html"></a>
<a class="surname-name" href="surname-detail.html"></a>
<a class="surname-name" href="surname-detail.html"></a>
<a class="surname-name" href="surname-detail.html"></a>
</div>
</div>
</div>
</section>
<section class="recommend">
<div class="container">
<div class="section-head">
<h2>相关推荐</h2>
</div>
<div class="recommend-grid">
<a
class="recommend-card tilt-card"
href="article-detail.html"
>
<span>资料整理</span>
<h3>家庭档案整理指南</h3>
<p>参考照片、证件、谱牒、口述资料的归档方式。</p>
</a>
<a
class="recommend-card tilt-card"
href="surname.html"
>
<span>姓氏源流</span>
<h3>姓氏文化资料库</h3>
<p>查看姓氏源流、迁徙脉络、堂号和郡望参考资料。</p>
</a>
<a
class="recommend-card tilt-card"
href="culture.html"
>
<span>宗亲文化</span>
<h3>宗亲会活动参考</h3>
<p>了解宗亲联谊、祭祖活动和家风传播的组织方式。</p>
</a>
<a
class="recommend-card tilt-card"
href="help.html"
>
<span>工具服务</span>
<h3>修谱工具与服务</h3>
<p>查找谱书排版、影像扫描、云端存储等外部服务。</p>
</a>
<a
class="recommend-card tilt-card"
href="culture.html"
>
<span>地方志</span>
<h3>地方文献检索入口</h3>
<p>从地方志、县志和族群资料中寻找家族线索。</p>
</a>
<a
class="recommend-card tilt-card"
href="surname.html"
>
<span>人名研究</span>
<h3>字辈与命名参考</h3>
<p>参考传统字辈、排行、称谓和家族命名资料。</p>
</a>
<a
class="recommend-card tilt-card"
href="promo-album.html"
>
<span>影像修复</span>
<h3>老照片修复服务</h3>
<p>了解老照片扫描、修复、上色和数字归档服务。</p>
</a>
<a
class="recommend-card tilt-card"
href="article-detail.html"
>
<span>口述史</span>
<h3>家族故事采集方法</h3>
<p>参考长辈访谈、口述记录和家风故事整理方式。</p>
</a>
</div>
</div>
</section>
<section class="friend-links">
<div class="container">
<div class="friend-links-panel">
<h2>常用入口</h2>
<div class="friend-link-list">
<a href="https://3d.3dyjs.cn/" target="_blank" rel="noopener"
>3D研究室</a
>
<a href="surname.html">姓氏源流资料</a>
<a href="plaza.html">公开家谱资料</a>
<a href="article-detail.html">修谱知识库</a>
<a href="culture.html">地方文献</a>
<a href="promo-album.html">家族影像</a>
<a href="genealogy.html">数字家谱</a>
<a href="help.html">使用帮助</a>
</div>
</div>
</div>
</section>
<section class="download">
<div class="container">
<div class="download-panel tilt-card">
<div>
<h2>手机端随时记录,电脑端清晰浏览</h2>
<p>
家族成员可以在手机端上传照片、查看家谱、发布动态;电脑端适合浏览门户内容、查看公开家谱和进入家谱空间。
</p>
<div class="cta">
<a class="btn primary magnetic" href="download.html">下载应用</a
><a class="btn ghost magnetic" href="help.html">查看帮助</a>
</div>
</div>
</div>
</div>
</section>
</main>
<footer class="footer">
<div class="container">
<div class="footer-grid">
<div>
<a class="brand magnetic" href="index.html"
><img
class="brand-logo"
src="public/images/logo-light.png"
alt="我们的家谱,代代相传"
/></a>
<p>一个面向家庭和宗族的数字家谱与家族文化门户。</p>
</div>
<div>
<h4>产品入口</h4>
<a href="genealogy.html">数字家谱</a><a href="plaza.html">家谱广场</a><a href="app.html">应用下载</a><a href="help.html">帮助中心</a>
</div>
<div>
<h4>文化内容</h4>
<a href="culture.html">家族文化</a><a href="surname.html">姓氏百科</a><a href="article-detail.html">家谱知识</a
><a href="news.html">新闻资讯</a>
</div>
<div>
<h4>服务支持</h4>
<a href="help.html">帮助中心</a>
<a href="submit-ticket.html">提交问题</a>
<a href="about.html">关于平台</a>
</div>
</div>
<div class="footer-legal">
<div>© 2026 代代相传. All rights reserved.</div>
<a href="privacy.html">隐私政策</a>
<a href="children-privacy.html">儿童个人信息处理规则</a>
<a href="terms.html">服务协议</a>
<a href="https://beian.miit.gov.cn" target="_blank" rel="noopener"
>ICP备案:蜀ICP备2024044594号-1</a
>
</div>
</div>
</footer>
<script src="config.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-77
View File
@@ -1,77 +0,0 @@
<!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" />
<link rel="stylesheet" href="public/css/join-genealogy.css" />
</head>
<body class="page-profile-module page-join-genealogy" data-join-apply-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" aria-label="个人中心主导航"></nav>
<div class="nav-actions"><a href="profile-join-family.html">查看我的申请</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-join-family.html">查看我的申请</a>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav" aria-label="个人中心功能导航"></aside>
<div class="module-main">
<section class="module-panel">
<div class="join-page-grid">
<section class="join-search-panel" aria-labelledby="join-search-title">
<h2 id="join-search-title">选择家谱</h2>
<form class="form-grid" data-join-genealogy-search novalidate aria-describedby="join-options-status">
<label class="field"><span>搜索家谱</span><input name="keyword" type="search" maxlength="50" placeholder="输入谱名或姓氏" /></label>
<button class="btn ghost" type="submit">搜索</button>
</form>
<div id="join-options-status" class="form-note" data-join-options-status role="status" aria-live="polite"></div>
<div class="module-list" data-join-genealogy-options aria-live="polite"></div>
<p class="form-note" data-join-selected-genealogy role="status" aria-live="polite">尚未选择家谱</p>
</section>
<form class="form-grid join-apply-form" data-join-apply-form novalidate aria-describedby="join-apply-status">
<h2>补充申请资料</h2>
<p class="form-note">以下资料均为选填,审核人将据此确认您的加入申请。</p>
<label class="field"><span>申请人姓名(选填)</span><input name="applicantName" maxlength="50" autocomplete="name" /></label>
<label class="field"><span>联系电话(选填)</span><input name="phone" maxlength="30" autocomplete="tel" /></label>
<label class="field"><span>与家谱关系(选填)</span><input name="relationDesc" maxlength="100" placeholder="例如:族亲" /></label>
<label class="field"><span>申请理由(选填)</span><textarea name="applyReason" maxlength="500" rows="4"></textarea></label>
<div id="join-apply-status" class="form-note" data-join-apply-status role="status" aria-live="polite"></div>
<button class="btn primary" type="submit" data-join-apply-submit>提交申请</button>
</form>
</div>
</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="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/profile-common.js"></script>
<script src="public/js/join-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-88
View File
@@ -1,88 +0,0 @@
<!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/layui/css/layui.css" />
<link rel="stylesheet" href="public/css/public.css" />
<link rel="stylesheet" href="public/tac/css/tac.css" />
<link rel="stylesheet" href="public/css/login.css" />
</head>
<body class="page-login">
<main class="auth-layout auth-scenic-layout">
<a class="brand auth-page-brand" href="index.html"
><img class="brand-logo" src="public/images/logo.png" alt="我们的家谱,代代相传" /></a
>
<section class="card form-card auth-card" aria-labelledby="login-title">
<div class="eyebrow">欢迎回来</div>
<h1 id="login-title">登录账号</h1>
<p class="lead">登录后可创建、加入和维护家谱。</p>
<div class="login-mode-tabs" role="tablist" aria-label="登录方式">
<button class="login-mode-tab is-active" type="button" role="tab" aria-selected="true" aria-controls="login-password-form">
密码登录
</button>
<button class="login-mode-tab" type="button" role="tab" aria-selected="false" aria-controls="login-sms-form">
短信登录
</button>
</div>
<form
id="login-password-form"
class="form-grid login-mode-panel"
novalidate
>
<label class="auth-field" for="login-password-phone">
<span>手机号 <b aria-hidden="true">*</b></span>
<input id="login-password-phone" class="input" name="phone" type="tel" inputmode="numeric" autocomplete="tel" maxlength="11" placeholder="请输入手机号" required />
</label>
<label class="auth-field" for="login-password-value">
<span>密码 <b aria-hidden="true">*</b></span>
<input id="login-password-value" class="input" name="password" type="password" autocomplete="current-password" placeholder="请输入密码" required />
</label>
<input type="hidden" name="validToken" />
<div id="login-password-status" class="auth-form-status" role="status" aria-live="polite" data-auth-form-status></div>
<button class="btn primary" type="submit">登录</button>
</form>
<form
id="login-sms-form"
class="form-grid login-mode-panel"
hidden
novalidate
>
<label class="auth-field" for="login-sms-phone">
<span>手机号 <b aria-hidden="true">*</b></span>
<input id="login-sms-phone" class="input" name="phone" type="tel" inputmode="numeric" autocomplete="tel" maxlength="11" placeholder="请输入手机号" required />
</label>
<div class="auth-field">
<label for="login-sms-code">短信验证码 <b aria-hidden="true">*</b></label>
<div class="code-row">
<input id="login-sms-code" class="input" name="smsCode" autocomplete="one-time-code" inputmode="numeric" maxlength="4" pattern="\d{4}" placeholder="请输入四位验证码" required />
<button class="btn ghost" type="button" data-api-send-code>获取验证码</button>
</div>
</div>
<input type="hidden" name="validToken" />
<div id="login-sms-status" class="auth-form-status" role="status" aria-live="polite" data-auth-form-status></div>
<button class="btn primary" type="submit">短信登录</button>
</form>
<div class="auth-links">
<a href="register.html">注册新账号</a>
<a href="forgot-password.html">忘记密码</a>
</div>
</section>
</main>
<script src="public/js/md5.js"></script>
<script src="config.js"></script>
<script src="utils/StorageUtil.js"></script>
<script src="utils/FormUtil.js"></script>
<script src="utils/axios.js"></script>
<script src="utils/AxiosRequestUtil.js"></script>
<script src="utils/MessageUtil.js"></script>
<script src="utils/ApiClient.js"></script>
<script src="public/layui/layui.js"></script>
<script src="public/tac/js/tac.min.js"></script>
<script src="public/js/captcha-pages.js"></script>
<script src="public/js/profile-common.js"></script>
<script src="public/js/auth-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-54
View File
@@ -1,54 +0,0 @@
<!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/css/site-info.css" />
</head>
<body>
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html"
><img
class="brand-logo"
src="public/images/logo.png"
alt="我们的家谱,代代相传"
/></a>
<nav class="nav-links">
<a href="index.html">首页</a><a href="help.html">帮助中心</a
><a href="about.html">关于我们</a>
</nav>
<div class="nav-actions"><a href="login.html">登录</a></div>
</div>
</header>
<main>
<section class="site-info-section">
<div class="container">
<div class="site-info-status">
<div class="site-info-mark"></div>
<h2>系统维护中</h2>
<p>
我们正在进行必要的服务维护,请稍后再试。账号与家谱资料不会因维护而丢失。
</p>
<div class="site-info-actions">
<a class="btn primary magnetic" href="index.html">返回首页</a
><a class="btn ghost magnetic" href="news.html">查看新闻资讯</a>
</div>
</div>
</div>
</section>
</main>
<footer class="footer">
<div class="container">
<div class="footer-legal">
<div>© 2026 代代相传. All rights reserved.</div>
<a href="privacy.html">隐私政策</a>
</div>
</div>
</footer>
<script src="config.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-59
View File
@@ -1,59 +0,0 @@
<!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-feedback-list-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" aria-label="个人中心主导航"></nav>
<div class="nav-actions"><a href="help.html">帮助中心</a><a class="btn primary magnetic" href="submit-ticket.html">提交新工单</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 primary magnetic" href="submit-ticket.html">提交新工单</a>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav" aria-label="个人中心功能导航"></aside>
<div class="module-main">
<section class="module-panel">
<div class="module-title-row">
<div><h2>反馈记录</h2><p>选择记录可以查看完整说明和处理状态。</p></div>
<button class="btn ghost" type="button" data-feedback-refresh>刷新</button>
</div>
<div class="form-status" role="status" aria-live="polite" data-feedback-status></div>
<div class="module-list" data-feedback-list>
<div class="api-state api-state--loading" data-api-state="loading" role="status" aria-live="polite" aria-busy="true">正在读取反馈记录…</div>
</div>
</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"></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/feedback-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-82
View File
@@ -1,82 +0,0 @@
<!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/css/site-info.css" />
</head>
<body data-site-news-page>
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html"
><img
class="brand-logo"
src="public/images/logo.png"
alt="我们的家谱,代代相传"
/></a>
<nav class="nav-links">
<a href="index.html">首页</a><a href="genealogy.html">数字家谱</a
><a href="plaza.html">家谱广场</a
><a class="active" href="news.html">新闻资讯</a
><a href="help.html">帮助中心</a><a href="about.html">关于我们</a>
</nav>
<div class="nav-actions">
<a href="login.html">登录</a><a href="register.html">注册</a>
</div>
</div>
</header>
<main>
<section class="site-info-hero">
<div class="container">
<div>
<div class="site-info-kicker">资讯中心</div>
<h1>新闻资讯</h1>
<p>
集中阅读平台新闻、公告与下载内容。
</p>
</div>
<div class="site-info-mark"></div>
</div>
</section>
<section class="site-info-section">
<div class="container site-info-layout">
<div>
<div class="module-meta" data-site-news-status role="status" aria-live="polite"></div>
<div class="site-info-list" data-site-news-list>
<div class="api-state api-state--loading" data-api-state="loading" role="status" aria-live="polite" aria-busy="true">正在读取资讯…</div>
</div>
</div>
<aside class="site-info-panel">
<h2>新闻分类</h2>
<div class="site-info-links">
<a href="news.html">全部</a
><a href="news.html?articleType=news">新闻</a
><a href="news.html?articleType=notice">公告</a
><a href="news.html?articleType=download">下载</a>
</div>
</aside>
</div>
</section>
</main>
<footer class="footer">
<div class="container">
<div class="footer-legal">
<div>© 2026 代代相传. All rights reserved.</div>
<a href="privacy.html">隐私政策</a
><a href="children-privacy.html">儿童个人信息处理规则</a
><a href="terms.html">服务协议</a>
</div>
</div>
</footer>
<script src="public/js/profile-common.js"></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/page-effects.js"></script>
<script src="public/js/site-news-pages.js"></script>
</body>
</html>
-52
View File
@@ -1,52 +0,0 @@
<!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/css/site-info.css" />
</head>
<body>
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html"
><img
class="brand-logo"
src="public/images/logo.png"
alt="我们的家谱,代代相传"
/></a>
<nav class="nav-links">
<a href="index.html">首页</a><a href="help.html">帮助中心</a
><a href="about.html">关于我们</a>
</nav>
<div class="nav-actions"><a href="login.html">登录</a></div>
</div>
</header>
<main>
<section class="site-info-section">
<div class="container">
<div class="site-info-status">
<div class="site-info-mark">404</div>
<h2>页面不存在</h2>
<p>你访问的页面可能已移动、已删除或地址输入有误。</p>
<div class="site-info-actions">
<a class="btn primary magnetic" href="index.html">返回首页</a
><a class="btn ghost magnetic" href="help.html">前往帮助中心</a>
</div>
</div>
</div>
</section>
</main>
<footer class="footer">
<div class="container">
<div class="footer-legal">
<div>© 2026 代代相传. All rights reserved.</div>
<a href="privacy.html">隐私政策</a>
</div>
</div>
</footer>
<script src="config.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-116
View File
@@ -1,116 +0,0 @@
<!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/css/notice-detail.css" />
</head>
<body class="page-notice-detail" data-promotion-page>
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html"
><img class="brand-logo" src="public/images/logo.png" alt="我们的家谱,代代相传" /></a
>
<nav class="nav-links">
<a href="index.html">首页</a><a href="genealogy.html">数字家谱</a
><a href="plaza.html">家谱广场</a
><a class="active" href="culture.html">家族文化</a
><a href="surname.html">姓氏百科</a><a href="app.html">应用下载</a
><a href="help.html">帮助中心</a><a href="about.html">关于我们</a>
</nav>
<div class="nav-actions">
<a href="login.html">登录</a><a href="register.html">注册</a
><a class="btn primary magnetic" href="create-genealogy.html"
>创建家谱</a
>
</div>
</div>
</header>
<main>
<section class="inner-hero notice-hero">
<div class="container">
<div class="hero-copy">
<div class="eyebrow">平台公告</div>
<h1 data-promotion-title>平台内容公开展示规范说明</h1>
<p class="lead" data-promotion-summary>
为了保护家族资料安全,平台仅展示管理员确认公开的家谱介绍、文章、宣传相册和宣传视频。
</p>
<div class="article-meta">
<span>平台公告</span><span data-promotion-time>2026.05</span>
</div>
</div>
<div class="hero-card notice-card tilt-card">
<span></span>
<p>公开有边界,传承更长久。</p>
</div>
</div>
</section>
<section class="section alt">
<div class="container notice-layout">
<article class="notice-content tilt-card" data-promotion-content>
<p>
平台前台页面主要用于展示家族文化与公开资料。涉及成员联系方式、详细个人信息、未审核资料等内容,不会在公开页面直接呈现。
</p>
<h2>公开内容范围</h2>
<p>
可公开内容包括家族简介、姓氏源流、谱文节选、宣传相册、宣传视频、平台公告和管理员允许展示的纪念内容。
</p>
<h2>资料维护建议</h2>
<p>
建议由管理员先整理资料,再邀请亲人补充和校对。需要修改公开范围时,可以在权限设置中调整。
</p>
</article>
<aside class="notice-side tilt-card">
<h3>相关页面</h3>
<a href="help.html">帮助中心</a
><a href="article-detail.html">家谱知识</a
><a href="about.html">关于我们</a>
</aside>
</div>
</section>
</main>
<footer class="footer">
<div class="container">
<div class="footer-grid">
<div>
<a class="brand" href="index.html"
><img class="brand-logo" src="public/images/logo-light.png" alt="我们的家谱,代代相传" /></a
>
<p>一个面向家庭和宗族的数字家谱与家族文化门户。</p>
</div>
<div>
<h4>产品入口</h4>
<a href="genealogy.html">数字家谱</a
><a href="plaza.html">家谱广场</a><a href="app.html">应用下载</a
><a href="help.html">帮助中心</a>
</div>
<div>
<h4>文化内容</h4>
<a href="culture.html">家族文化</a
><a href="surname.html">姓氏百科</a
><a href="article-detail.html">家谱知识</a
><a href="notice-detail.html">平台公告</a>
</div>
<div>
<h4>服务支持</h4>
<a href="help.html">帮助中心</a>
<a href="submit-ticket.html">提交问题</a>
<a href="about.html">关于平台</a>
</div>
</div>
<div class="footer-legal">
<div>© 2026 代代相传. All rights reserved.</div>
<a href="https://beian.miit.gov.cn" target="_blank" rel="noopener">ICP备案:蜀ICP备2024044594号-1</a>
</div>
</div>
</footer>
<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/page-effects.js"></script>
</body>
</html>
-148
View File
@@ -1,148 +0,0 @@
<!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/css/plaza.css" />
</head>
<body class="page-plaza">
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html"
><img class="brand-logo" src="public/images/logo.png" alt="我们的家谱,代代相传" /></a
>
<nav class="nav-links">
<a href="index.html">首页</a>
<a href="genealogy.html">数字家谱</a>
<a class="active" href="plaza.html">家谱广场</a>
<a href="culture.html">家族文化</a>
<a href="surname.html">姓氏百科</a>
<a href="app.html">应用下载</a>
<a href="help.html">帮助中心</a>
<a href="about.html">关于我们</a>
</nav>
<div class="nav-actions">
<a href="login.html">登录</a><a href="register.html">注册</a
><a class="btn primary magnetic" href="create-genealogy.html"
>创建家谱</a
>
</div>
</div>
</header>
<main>
<section class="inner-hero plaza-hero">
<div class="container">
<div class="hero-copy">
<div class="eyebrow">家谱广场</div>
<h1>浏览公开家谱,寻找同宗线索</h1>
<p class="lead">
按姓氏、地区、堂号和家谱名称检索公开家谱,先看示例,再创建自己的家族空间。
</p>
<div class="plaza-stats">
<span><b>128+</b>公开家谱</span>
<span><b>36</b>地区线索</span>
<span><b>18</b>谱文示例</span>
</div>
</div>
<div class="hero-card search-card tilt-card">
<div class="search-ornament"></div>
<h3>查找公开家谱</h3>
<div class="toolbar search-toolbar">
<input class="input" placeholder="输入姓氏、地区或家谱名称" /><a
class="btn primary magnetic"
href="search-result.html"
>搜索</a
>
</div>
<div class="tag-row">
<span class="tag">公开家谱</span><span class="tag">字辈完整</span
><span class="tag">多人共修</span>
</div>
</div>
</div>
</section>
<section class="section alt plaza-list-section">
<div class="container">
<div class="section-head">
<h2>推荐家谱</h2>
<p>展示公开或示例家谱,让访问者理解数字家谱最终会呈现成什么样。</p>
</div>
<div class="grid-3" data-genealogy-list="public">
<a class="family-card featured tilt-card" href="family-detail.html">
<div class="family-card-shine"></div>
<div class="family-badge">推荐</div>
<h3>四川成都陈氏族</h3>
<p>
已收录成员 128 人,整理字辈 6 代,公开谱文 18 篇,宣传相册 7
组。
</p>
<div class="tag-row">
<span class="tag">四川</span><span class="tag">陈氏</span
><span class="tag">128人</span>
</div>
</a>
<a class="card family-lite tilt-card" href="family-detail.html">
<div class="family-icon"></div>
<h3>湖广刘氏家谱</h3>
<p>从始祖世系到现代家庭分支,保留字辈与迁徙记录。</p>
<div class="tag-row">
<span class="tag">公开家谱</span
><span class="tag">字辈完整</span>
</div>
</a>
<a class="card family-lite tilt-card" href="family-detail.html">
<div class="family-icon"></div>
<h3>岭南张氏宗谱</h3>
<p>以谱文、相册、家族动态为主,记录家风与重要纪念。</p>
<div class="tag-row">
<span class="tag">家族文化</span
><span class="tag">宣传相册</span>
</div>
</a>
</div>
</div>
</section>
</main>
<footer class="footer">
<div class="container">
<div class="footer-grid">
<div>
<a class="brand" href="index.html"
><img class="brand-logo" src="public/images/logo-light.png" alt="我们的家谱,代代相传" /></a
>
<p>一个面向家庭和宗族的数字家谱与家族文化门户。</p>
</div>
<div>
<h4>产品入口</h4>
<a href="genealogy.html">数字家谱</a><a href="plaza.html">家谱广场</a><a href="app.html">应用下载</a><a href="help.html">帮助中心</a>
</div>
<div>
<h4>文化内容</h4>
<a href="culture.html">家族文化</a><a href="surname.html">姓氏百科</a><a href="article-detail.html">家谱知识</a><a href="notice-detail.html">平台公告</a>
</div>
<div>
<h4>服务支持</h4>
<a href="help.html">帮助中心</a>
<a href="submit-ticket.html">提交问题</a>
<a href="about.html">关于平台</a>
</div>
</div>
<div class="footer-legal">
<div>© 2026 代代相传. All rights reserved.</div>
<a href="https://beian.miit.gov.cn" target="_blank" rel="noopener">ICP备案:蜀ICP备2024044594号-1</a>
</div>
</div>
</footer>
<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/page-effects.js"></script>
</body>
</html>
-73
View File
@@ -1,73 +0,0 @@
<!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/css/site-info.css" />
</head>
<body>
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html">
<img class="brand-logo" src="public/images/logo.png" alt="我们的家谱,代代相传" />
</a>
<nav class="nav-links">
<a href="index.html">首页</a>
<a href="news.html">新闻资讯</a>
<a href="help.html">帮助中心</a>
<a href="about.html">关于我们</a>
</nav>
<div class="nav-actions">
<a href="login.html">登录</a>
<a href="register.html">注册</a>
</div>
</div>
</header>
<main>
<section class="site-info-hero">
<div class="container">
<div>
<div class="site-info-kicker">隐私政策</div>
<h1>隐私政策</h1>
<p>说明平台处理个人信息的规则、用户权利与联系渠道。</p>
</div>
<div class="site-info-mark"></div>
</div>
</section>
<section class="site-info-section">
<div class="container site-info-layout">
<article class="site-info-panel">
<div class="site-info-notice">
待法务确认:本页面仅建立政策访问入口,不构成已生效的隐私政策。发布前必须由运营主体与法务确认完整文本、版本号和生效日期。
</div>
<h2>正式文本应涵盖</h2>
<p>
个人信息处理目的、收集范围、保存期限、共享规则、用户查阅更正删除权利,以及个人信息保护负责人的联系渠道。
</p>
</article>
<aside class="site-info-panel">
<h2>相关文档</h2>
<div class="site-info-links">
<a href="children-privacy.html">儿童个人信息处理规则</a>
<a href="terms.html">服务协议</a>
<a href="help.html">帮助中心</a>
</div>
</aside>
</div>
</section>
</main>
<footer class="footer">
<div class="container">
<div class="footer-legal">
<div>© 2026 代代相传. All rights reserved.</div>
<a href="news.html">新闻资讯</a>
<a href="terms.html">服务协议</a>
</div>
</div>
</footer>
<script src="config.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-81
View File
@@ -1,81 +0,0 @@
<!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-admin-permission-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">家族管理</a>
</nav>
<div class="nav-actions">
<a href="profile-family-admin.html" data-genealogy-context-link>返回管理</a
><a class="btn primary magnetic" href="profile-family-admin.html" data-genealogy-context-link>管理成员</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>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-family-admin.html" data-genealogy-context-link>家族管理</a
><a class="active" href="profile-admin-permissions.html"
>管理员权限</a
><a href="profile-join-review.html" data-genealogy-context-link>入谱审核</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>当前权限</h2>
<div data-admin-permission-current>
<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="module-list">
<article class="module-row"><div><h3>谱主</h3><p>可维护管理员、编辑和成员角色,并可转让谱主。</p></div></article>
<article class="module-row"><div><h3>管理员</h3><p>可维护编辑和成员角色,不能修改谱主或其他管理员。</p></div></article>
<article class="module-row"><div><h3>编辑、成员</h3><p>不显示成员角色编辑入口;最终权限由服务端校验。</p></div></article>
</div>
<div class="bottom-actions"><a class="btn primary magnetic" href="profile-family-admin.html" data-genealogy-context-link>进入成员名册管理</a></div>
</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"></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/admin-permission-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-125
View File
@@ -1,125 +0,0 @@
<!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-album-detail-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-content.html">内容发布</a>
<a class="active" href="profile-album.html">相册</a>
</nav>
<div class="nav-actions">
<a href="profile-album.html" data-genealogy-context-link>返回相册</a>
</div>
</div>
</header>
<main>
<section class="module-hero">
<div class="container">
<div class="module-kicker">相册详情</div>
<div class="module-title-row">
<div>
<h1 data-album-detail-title>相册详情</h1>
<p>查看相册信息和照片;照片暂不可在线预览时,仍会保留名称和上传记录。</p>
</div>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-content.html">内容发布</a>
<a href="profile-article.html">谱文</a>
<a class="active" href="profile-album.html">相册</a>
<a href="profile-video.html">视频</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>相册信息</h2>
<div data-album-detail>
<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="module-list" data-album-photo-list>
<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" data-album-photo-editor hidden>
<h2>添加照片</h2>
<form class="editor-form" data-album-photo-form novalidate>
<div class="editor-two">
<div class="editor-field">
<label for="albumPhotoFile">照片文件 <span class="field-required" aria-hidden="true">*</span></label>
<input id="albumPhotoOssId" name="ossId" type="hidden" />
<label class="upload-control" for="albumPhotoFile">选择照片</label>
<input id="albumPhotoFile" class="upload-input" type="file" accept="image/*" data-upload-target="#albumPhotoOssId" data-upload-status="#albumPhotoUploadStatus" />
<p id="albumPhotoUploadStatus" class="upload-status" role="status" aria-live="polite">未选择文件</p>
</div>
<div class="editor-field">
<label for="albumPhotoTitle">照片标题</label>
<input id="albumPhotoTitle" name="photoTitle" type="text" placeholder="请输入照片标题" />
</div>
</div>
<div class="editor-field">
<label for="albumPhotoDesc">照片说明</label>
<textarea id="albumPhotoDesc" name="photoDesc" placeholder="请输入照片说明"></textarea>
</div>
<div class="editor-two">
<div class="editor-field">
<label for="albumPhotographer">拍摄人</label>
<input id="albumPhotographer" name="photographer" type="text" placeholder="请输入拍摄人" />
</div>
<div class="editor-field">
<label for="albumShootTime">拍摄时间</label>
<input id="albumShootTime" name="shootTime" type="datetime-local" />
</div>
</div>
<div class="editor-field">
<label for="albumPhotoSortOrder">排序</label>
<input id="albumPhotoSortOrder" name="sortOrder" type="number" step="1" placeholder="数字越小越靠前" />
</div>
<input name="status" type="hidden" value="0" />
<div class="api-status" data-album-photo-status role="status" aria-live="polite"></div>
<div class="bottom-actions">
<button class="btn primary" type="submit">添加照片</button>
</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"></script>
<script src="config.js"></script>
<script src="utils/StorageUtil.js"></script>
<script src="utils/FormUtil.js"></script>
<script src="utils/axios.js"></script>
<script src="utils/AxiosRequestUtil.js"></script>
<script src="utils/ApiClient.js"></script>
<script src="public/js/md5.js"></script>
<script src="public/js/upload-pages.js"></script>
<script src="public/js/media-display.js"></script>
<script src="public/js/album-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-101
View File
@@ -1,101 +0,0 @@
<!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-album-edit-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-content.html">内容发布</a>
<a class="active" href="profile-album.html">相册</a>
</nav>
<div class="nav-actions">
<a href="profile-album.html" data-genealogy-context-link>返回相册</a>
<button class="btn primary magnetic" type="submit" form="album-edit-form" data-album-editor-action hidden>保存</button>
</div>
</div>
</header>
<main>
<section class="module-hero">
<div class="container">
<div class="module-kicker">编辑相册</div>
<div class="module-title-row">
<div>
<h1 data-album-editor-title>新建相册</h1>
<p>维护相册名称、说明和封面;封面编号由上传自动产生。</p>
</div>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-content.html">内容发布</a>
<a href="profile-article.html">谱文</a>
<a class="active" href="profile-album.html">相册</a>
<a href="profile-video.html">视频</a>
</aside>
<div class="module-main">
<section class="module-panel">
<div class="api-state api-state--loading" data-api-state="loading" data-album-editor-placeholder role="status" aria-live="polite" aria-busy="true">正在读取家谱权限...</div>
<form id="album-edit-form" class="editor-form" data-album-form data-album-editor hidden novalidate>
<div class="editor-field">
<label for="albumName">相册名称 <span class="field-required" aria-hidden="true">*</span></label>
<input id="albumName" name="albumName" type="text" required placeholder="请输入相册名称" />
</div>
<div class="editor-field">
<label for="albumDesc">相册说明</label>
<textarea id="albumDesc" name="albumDesc" placeholder="请输入相册说明"></textarea>
</div>
<div class="editor-two">
<div class="editor-field">
<label for="albumCoverFile">封面文件</label>
<input id="albumCoverOssId" name="coverOssId" type="hidden" />
<label class="upload-control" for="albumCoverFile">选择封面图片</label>
<input id="albumCoverFile" class="upload-input" type="file" accept="image/*" data-upload-target="#albumCoverOssId" data-upload-status="#albumCoverStatus" />
<p id="albumCoverStatus" class="upload-status" role="status" aria-live="polite">未选择文件</p>
</div>
<div class="editor-field">
<label for="albumSortOrder">排序</label>
<input id="albumSortOrder" name="sortOrder" type="number" step="1" placeholder="数字越小越靠前" />
</div>
</div>
<input name="status" type="hidden" value="0" />
<div class="api-status" data-album-form-status role="status" aria-live="polite"></div>
<div class="bottom-actions">
<button class="btn primary" type="submit">保存相册</button>
<a class="btn ghost" href="profile-album.html" data-genealogy-context-link>取消</a>
</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"></script>
<script src="config.js"></script>
<script src="utils/StorageUtil.js"></script>
<script src="utils/FormUtil.js"></script>
<script src="utils/axios.js"></script>
<script src="utils/AxiosRequestUtil.js"></script>
<script src="utils/ApiClient.js"></script>
<script src="public/js/md5.js"></script>
<script src="public/js/upload-pages.js"></script>
<script src="public/js/media-display.js"></script>
<script src="public/js/album-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-76
View File
@@ -1,76 +0,0 @@
<!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-album-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-content.html">内容发布</a>
<a class="active" href="profile-album.html">相册</a>
<a href="profile-video.html">视频</a>
</nav>
<div class="nav-actions">
<a href="profile-content.html">返回发布中心</a>
<a class="btn primary magnetic" href="profile-album-edit.html" data-album-create-link 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>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-content.html">内容发布</a>
<a href="profile-article.html">谱文</a>
<a class="active" href="profile-album.html">相册</a>
<a href="profile-video.html">视频</a>
<a href="profile-family-home.html">家谱主页</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>相册列表</h2>
<div class="module-list" data-album-list>
<div class="api-state api-state--loading" data-api-state="loading" role="status" aria-live="polite" aria-busy="true">
相册加载中...
</div>
</div>
</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"></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/media-display.js"></script>
<script src="public/js/album-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-141
View File
@@ -1,141 +0,0 @@
<!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" />
<link rel="stylesheet" href="public/js/wangeditor5/css/style.css" />
</head>
<body class="page-profile-module" data-article-edit-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-content.html">内容发布</a
><a class="active" href="profile-article.html">谱文</a>
</nav>
<div class="nav-actions">
<a href="profile-article.html">返回谱文</a
><button class="btn primary magnetic" type="submit" form="article-edit-form" data-article-editor-action hidden>保存</button>
</div>
</div>
</header>
<main>
<section class="module-hero">
<div class="container">
<div class="module-kicker">编辑谱文</div>
<div class="module-title-row">
<div>
<h1 data-article-editor-title>新建谱文</h1>
<p>
使用富文本编辑器撰写谱文、谱序、谱论和恩荣录,支持图片、表格与排版。
</p>
</div>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-content.html">内容发布</a
><a class="active" href="profile-article.html">谱文</a
><a href="profile-album.html">相册</a
><a href="profile-video.html">视频</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>谱文内容</h2>
<div data-article-editor-placeholder>
<div class="api-state api-state--loading" data-api-state="loading" role="status" aria-live="polite" aria-busy="true">正在读取家谱权限…</div>
</div>
<form id="article-edit-form" class="editor-form layui-form" data-article-form data-article-editor hidden novalidate>
<div class="editor-field">
<label for="articleTitle">谱文标题<span class="field-required" aria-hidden="true"> *</span></label
><input
id="articleTitle"
name="articleTitle"
type="text"
placeholder="请输入谱文标题"
required
/>
</div>
<div class="editor-two">
<div class="editor-field">
<label for="articleSignature">落款</label
><input
id="articleSignature"
name="authorName"
type="text"
placeholder="请输入落款"
/>
</div>
<div class="editor-field">
<label for="articleSortOrder">排序</label
><input
id="articleSortOrder"
name="sortOrder"
type="number"
step="1"
placeholder="数字越小越靠前"
/>
</div>
</div>
<div class="editor-field">
<label for="articleContent">正文<span class="field-required" aria-hidden="true"> *</span></label
><textarea
id="articleContent"
name="articleContent"
class="js-rich-editor"
placeholder="请输入谱文内容"
required
></textarea>
</div>
<div class="editor-field">
<label for="articleSummary">摘要</label>
<textarea id="articleSummary" name="articleSummary" placeholder="请输入谱文摘要"></textarea>
</div>
<div class="editor-field">
<label for="articleCoverFile">封面文件</label>
<input id="articleCoverOssId" name="coverOssId" type="hidden" />
<label class="upload-control" for="articleCoverFile">选择封面图片</label>
<input id="articleCoverFile" class="upload-input" type="file" accept="image/*" data-upload-target="#articleCoverOssId" data-upload-status="#articleCoverStatus" />
<p id="articleCoverStatus" class="upload-status" role="status" aria-live="polite">未选择文件</p>
</div>
<input name="status" type="hidden" value="0" />
<div class="form-status" data-article-form-status role="status" aria-live="polite"></div>
<div class="bottom-actions">
<button class="btn primary magnetic" type="submit">保存</button
><a class="btn ghost magnetic" href="profile-article.html"
>取消</a
>
</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/wangeditor5/index.js"></script>
<script src="public/js/rich-editor.js"></script>
<script src="public/js/profile-common.js"></script>
<script src="config.js"></script>
<script src="utils/StorageUtil.js"></script>
<script src="utils/FormUtil.js"></script>
<script src="utils/axios.js"></script>
<script src="utils/AxiosRequestUtil.js"></script>
<script src="utils/ApiClient.js"></script>
<script src="public/js/md5.js"></script>
<script src="public/js/upload-pages.js"></script>
<script src="public/js/media-display.js"></script>
<script src="public/js/article-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-81
View File
@@ -1,81 +0,0 @@
<!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-article-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-content.html">内容发布</a
><a class="active" href="profile-article.html">谱文</a>
</nav>
<div class="nav-actions">
<a href="profile-content.html">返回发布中心</a
><a class="btn primary magnetic" href="profile-article-edit.html" data-article-create-link 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>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-content.html">内容发布</a
><a class="active" href="profile-article.html">谱文</a
><a href="profile-album.html">相册</a
><a href="profile-video.html">视频</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>谱文列表</h2>
<div class="module-list" data-article-list>
<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 data-article-detail>
<div class="api-state api-state--empty" data-api-state="empty" role="status" aria-live="polite">请选择一篇谱文查看详情</div>
</div>
</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"></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/media-display.js"></script>
<script src="public/js/article-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-87
View File
@@ -1,87 +0,0 @@
<!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-ceremony-detail-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-content.html">内容发布</a><a class="active" href="profile-ceremony.html">祭祀活动</a></nav>
<div class="nav-actions"><a href="profile-ceremony.html">返回活动列表</a><a class="btn primary magnetic" href="profile-gift-edit.html" data-ceremony-editor-action 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 data-ceremony-detail-title>活动详情</h1><p>活动信息、祭品记录与管理员受邀名单。</p></div></div></div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav"><a href="profile-content.html">内容发布</a><a href="profile-gift.html">我的邀请</a><a class="active" href="profile-ceremony.html">祭祀活动</a><a href="profile-merit.html">功德录</a></aside>
<div class="module-main">
<section class="module-panel">
<h2>活动信息</h2>
<div data-ceremony-detail aria-live="polite">
<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="module-list" data-ceremony-gift-list aria-live="polite">
<div class="api-state api-state--loading" data-api-state="loading" role="status" aria-live="polite" aria-busy="true">
正在加载祭品…
</div>
</div>
<form class="editor-form" data-ceremony-gift-form data-ceremony-admin-editor hidden novalidate>
<div class="editor-two">
<div class="editor-field"><label for="ceremonyGiverName">赠送人姓名</label><input id="ceremonyGiverName" name="giverName" type="text" placeholder="可选" /></div>
<div class="editor-field"><label for="ceremonyGiftAmount">礼金金额 <span class="field-required" aria-hidden="true">*</span></label><input id="ceremonyGiftAmount" name="giftAmount" type="number" min="0" step="any" required /></div>
</div>
<div class="editor-field"><label for="ceremonyGiftMessage">祭品留言</label><textarea id="ceremonyGiftMessage" name="giftMessage" placeholder="可选"></textarea></div>
<div class="upload-status" data-ceremony-gift-status role="status" aria-live="polite"></div>
<div class="bottom-actions"><button class="btn primary magnetic" type="submit">添加祭品</button></div>
</form>
</section>
<section class="module-panel" data-ceremony-admin-editor hidden>
<h2>受邀名单</h2>
<div class="module-list" data-ceremony-invitation-list aria-live="polite">
<div class="api-state api-state--loading" data-api-state="loading" role="status" aria-live="polite" aria-busy="true">
正在加载邀请记录…
</div>
</div>
<form class="editor-form" data-ceremony-invitee-form data-ceremony-admin-editor hidden novalidate>
<p>仅显示当前家谱中已绑定业务账号的正常成员;提交完整勾选名单,取消勾选会撤销尚未响应的邀请。</p>
<div class="editor-choice-list" data-ceremony-invitee-options>
<div class="api-state api-state--loading" data-api-state="loading" role="status" aria-live="polite" aria-busy="true">
正在加载成员选项…
</div>
</div>
<div class="upload-status" data-ceremony-invitee-status role="status" aria-live="polite"></div>
<div class="bottom-actions"><button class="btn primary magnetic" type="submit">更新受邀名单</button></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"></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/media-display.js"></script>
<script src="public/js/ceremony-admin-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-55
View File
@@ -1,55 +0,0 @@
<!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-ceremony-list-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-content.html">内容发布</a><a class="active" href="profile-ceremony.html">祭祀活动</a></nav>
<div class="nav-actions"><a href="profile-content.html">返回发布中心</a><a class="btn primary magnetic" href="profile-gift-edit.html" data-ceremony-create-link data-genealogy-context-link 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></div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav"><a href="profile-content.html">内容发布</a><a href="profile-gift.html">我的邀请</a><a class="active" href="profile-ceremony.html">祭祀活动</a><a href="profile-merit.html">功德录</a></aside>
<div class="module-main">
<section class="module-panel">
<div class="module-panel-head"><h2>活动列表</h2><a class="pill" href="profile-gift-edit.html" data-ceremony-create-link data-genealogy-context-link hidden>创建活动</a></div>
<div class="module-list" data-ceremony-list aria-live="polite">
<div class="api-state api-state--loading" data-api-state="loading" role="status" aria-live="polite" aria-busy="true">
正在加载祭祀活动…
</div>
</div>
</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"></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/media-display.js"></script>
<script src="public/js/ceremony-admin-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-130
View File
@@ -1,130 +0,0 @@
<!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-content-page>
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html"
><img class="brand-logo" src="public/images/logo.png" alt="我们的家谱,代代相传" /></a
>
<nav class="nav-links">
<a href="profile.html">个人中心</a
><a href="profile-families.html">我的家谱</a
><a href="plaza.html">家谱广场</a
><a class="active" href="profile-content.html">家族文化</a
><a href="surname.html">姓氏百科</a><a href="app.html">应用下载</a
><a href="help.html">帮助中心</a><a href="about.html">关于我们</a>
</nav>
<div class="nav-actions">
<a href="profile-data.html">账户资料</a
><a class="btn primary magnetic" href="profile-create-family.html"
>创建家谱</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 primary magnetic" href="profile-article.html" data-feature-link="available" data-genealogy-context-link
>添加谱文</a
>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-families.html">我的家谱</a
><a href="profile-messages.html">消息中心</a
><a href="profile-family-admin.html" data-genealogy-context-link>家族管理</a
><a class="active" href="profile-content.html">内容发布</a
><a href="profile-data.html">个人资料</a
><a href="profile-services.html">帮助与服务</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>发布入口</h2>
<div class="module-grid">
<a class="module-card tilt-card" href="profile-article.html" data-feature-link="available" data-genealogy-context-link
><span class="icon"></span>
<h3>谱文</h3>
<p>添加谱文标题、内容、落款和图片质量设置。</p></a
>
<a class="module-card tilt-card" href="profile-album.html" data-feature-link="available" data-genealogy-context-link
><span class="icon"></span>
<h3>家族相册</h3>
<p>新建相册、编辑封面、上传照片。</p></a
>
<a class="module-card tilt-card" href="profile-video.html" data-feature-link="available" data-genealogy-context-link
><span class="icon"></span>
<h3>家族视频</h3>
<p>发布视频、编辑家族视频和视频描述。</p></a
>
<a class="module-card tilt-card" href="profile-merit.html" data-feature-link="available" data-genealogy-context-link
><span class="icon"></span>
<h3>功德录</h3>
<p>添加功德人,记录事迹和时间。</p></a
>
<a class="module-card tilt-card" href="profile-gift.html" data-feature-link="available" data-genealogy-context-link
><span class="icon"></span>
<h3>贺礼邀请</h3>
<p>创建婚礼、升学、生日等贺礼邀请。</p></a
>
<a class="module-card tilt-card" href="profile-feed.html" data-feature-link="available" data-genealogy-context-link
><span class="icon"></span>
<h3>发布动态</h3>
<p>向家族圈发布图文动态,可设置置顶和精华。</p></a
>
<a class="module-card tilt-card" href="profile-growth.html" data-feature-link="available" data-genealogy-context-link
><span class="icon"></span>
<h3>成长日志</h3>
<p>记录个人成长节点,支持照片附件。</p></a
>
<a class="module-card tilt-card" href="profile-relative.html" data-feature-link="available" data-genealogy-context-link
><span class="icon"></span>
<h3>亲友往来(贺礼簿)</h3>
<p>记录亲友关系、往来事项和礼金。</p></a
>
<a class="module-card tilt-card" href="profile-memo.html" data-feature-link="available" data-genealogy-context-link
><span class="icon"></span>
<h3>备忘录(家族恩人)</h3>
<p>以标题、内容和提醒记录家族恩人等事项,统一归入备忘录管理。</p></a
>
</div>
</section>
<section class="module-panel">
<h2>使用说明</h2>
<div class="api-state api-state--empty" data-api-state="empty" role="status" aria-live="polite">请选择上方功能,继续查看和维护当前家谱内容。</div>
</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/page-effects.js"></script>
</body>
</html>
-163
View File
@@ -1,163 +0,0 @@
<!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-genealogy-create-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 class="active" href="profile-families.html">我的家谱</a
><a href="profile-family-admin.html">家族管理</a
><a href="profile-content.html">内容发布</a>
</nav>
<div class="nav-actions">
<a href="profile-families.html">返回我的家谱</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>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-families.html">我的家谱</a
><a class="active" href="profile-create-family.html">创建家谱</a
><a href="profile-join-family.html">加入家谱</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>基础信息</h2>
<p class="upload-status" data-genealogy-create-quota role="status" aria-live="polite">正在读取家谱额度…</p>
<form class="editor-form profile-create-family-form" data-genealogy-create-form novalidate>
<div class="editor-two">
<div class="editor-field">
<label for="familySurname">姓氏 <span class="field-required" aria-hidden="true">*</span></label>
<input id="familySurname" name="surname" type="text" required placeholder="例如:王" />
</div>
<div class="editor-field">
<label for="familyName">谱名 <span class="field-required" aria-hidden="true">*</span></label>
<input id="familyName" name="genealogyName" type="text" required placeholder="例如:王氏家谱" />
</div>
</div>
<div class="editor-two">
<div class="editor-field">
<label for="ancestralHall">堂号/祠堂</label>
<input id="ancestralHall" name="ancestralHall" type="text" />
</div>
<div class="editor-field">
<label for="originPlace">籍贯/起源地</label>
<input id="originPlace" name="originPlace" type="text" />
</div>
</div>
<div class="editor-field" role="group" aria-labelledby="family-region-label" aria-describedby="family-create-status">
<span id="family-region-label" class="editor-label">家族所在地 <span class="field-required" aria-hidden="true">*</span></span>
<div class="profile-region-picker" data-region-picker>
<label for="familyProvinceCode">
<select id="familyProvinceCode" name="provinceCode" data-region-level="province">
<option value="">请选择省</option>
</select>
</label>
<label for="familyCityCode">
<select id="familyCityCode" name="cityCode" data-region-level="city">
<option value="">请选择市</option>
</select>
</label>
<label for="familyDistrictCode">区县
<select id="familyDistrictCode" name="districtCode" data-region-level="district">
<option value="">请选择区县</option>
</select>
</label>
<input type="hidden" name="regionCode" data-region-code />
</div>
<div class="upload-status" data-region-picker-status role="status" aria-live="polite"></div>
</div>
<div class="editor-field">
<label for="addressDetail">详细地址</label>
<input id="addressDetail" name="addressDetail" type="text" />
</div>
<div class="editor-field">
<label for="intro">家谱简介</label>
<textarea id="intro" name="intro"></textarea>
</div>
<div class="editor-field">
<label for="familyCoverFile">家谱封面</label>
<input id="familyCoverOssId" name="coverOssId" type="hidden" />
<label class="upload-control" for="familyCoverFile">选择封面图片</label>
<input
id="familyCoverFile"
class="upload-input"
type="file"
accept="image/*"
data-upload-target="#familyCoverOssId"
data-upload-status="#familyCoverStatus"
/>
<p id="familyCoverStatus" class="upload-status" role="status" aria-live="polite">未选择文件</p>
</div>
<div class="editor-two">
<div class="editor-field">
<label for="visibility">可见范围</label>
<select id="visibility" name="visibility">
<option value="1">公开</option>
<option value="2">成员可见</option>
<option value="0">私密</option>
</select>
</div>
<div class="editor-field">
<label for="joinMode">加入方式</label>
<select id="joinMode" name="joinMode" aria-describedby="family-invite-mode-note">
<option value="1">审核加入</option>
<option value="2">邀请码加入</option>
<option value="0">关闭加入</option>
</select>
<p id="family-invite-mode-note" class="form-status">创建完成后,可在家谱首页的“邀请家人”中生成一次性邀请链接。</p>
</div>
</div>
<div id="family-create-status" class="upload-status" data-genealogy-create-status role="status" aria-live="polite"></div>
<div class="bottom-actions">
<button class="btn primary magnetic" type="submit" data-genealogy-create-submit>确定创建</button>
<a class="btn ghost magnetic" href="profile-families.html">返回列表</a>
</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="config.js"></script>
<script src="utils/StorageUtil.js"></script>
<script src="utils/FormUtil.js"></script>
<script src="utils/axios.js"></script>
<script src="utils/AxiosRequestUtil.js"></script>
<script src="utils/ApiClient.js"></script>
<script src="public/js/profile-common.js"></script>
<script src="public/js/region-pages.js"></script>
<script src="public/js/md5.js"></script>
<script src="public/js/upload-pages.js"></script>
<script src="public/js/genealogy-entry-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-74
View File
@@ -1,74 +0,0 @@
<!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-profile-reminder-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-data.html">个人资料</a
><a href="profile-messages.html">消息中心</a
><a class="active" href="profile-data-reminders.html">资料提醒</a>
</nav>
<div class="nav-actions">
<a href="profile-messages.html">返回消息</a
><a class="btn primary magnetic" href="profile-data.html">完善资料</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>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-data.html">个人资料</a
><a class="active" href="profile-data-reminders.html">资料提醒</a
><a href="profile-join-review.html">入谱审核</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>待完善成员</h2>
<div class="module-list" data-profile-reminder-list>
<div class="api-state api-state--loading" data-api-state="loading" role="status" aria-live="polite" aria-busy="true">
正在读取资料提醒…
</div>
</div>
</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"></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/profile-reminder-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-259
View File
@@ -1,259 +0,0 @@
<!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-profile-page>
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html"
><img class="brand-logo" src="public/images/logo.png" alt="我们的家谱,代代相传" /></a
>
<nav class="nav-links">
<a href="profile.html">个人中心</a
><a href="profile-families.html">我的家谱</a
><a href="plaza.html">家谱广场</a
><a href="profile-content.html">家族文化</a
><a href="surname.html">姓氏百科</a><a href="app.html">应用下载</a
><a href="help.html">帮助中心</a><a href="about.html">关于我们</a>
</nav>
<div class="nav-actions">
<a class="active" href="profile-data.html">账户资料</a
><a class="btn primary magnetic" href="profile-create-family.html"
>创建家谱</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 primary magnetic" href="#profile-edit-form"
>编辑资料</a
>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-families.html">我的家谱</a
><a href="profile-messages.html">消息中心</a
><a href="profile-family-admin.html">家族管理</a
><a href="profile-content.html">内容发布</a
><a class="active" href="profile-data.html">个人资料</a
><a href="profile-services.html">帮助与服务</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>编辑资料</h2>
<form class="editor-form profile-data-form" id="profile-edit-form" data-profile-form novalidate>
<div class="editor-two">
<div class="editor-field">
<label for="profileNickName">昵称</label>
<input
id="profileNickName"
name="nickName"
type="text"
maxlength="30"
autocomplete="nickname"
placeholder="请输入昵称"
/>
</div>
<div class="editor-field">
<label for="profileRealName">真实姓名</label>
<input
id="profileRealName"
name="realName"
type="text"
maxlength="30"
autocomplete="name"
placeholder="请输入真实姓名"
/>
</div>
</div>
<div class="editor-two">
<div class="editor-field">
<label for="profileAvatarFile">头像</label>
<input
id="profileAvatar"
name="avatar"
type="hidden"
/>
<label class="upload-control" for="profileAvatarFile">选择头像文件</label>
<input
id="profileAvatarFile"
class="upload-input"
type="file"
accept="image/*"
data-upload-target="#profileAvatar"
data-upload-status="#profileAvatarStatus"
data-upload-mode="resumable"
data-upload-biz-type="avatar"
data-upload-usage-scene="profile_avatar"
/>
<p id="profileAvatarStatus" class="upload-status" role="status" aria-live="polite">请选择头像文件</p>
</div>
</div>
<div class="editor-two">
<div class="editor-field">
<label for="profileSex">性别</label>
<select id="profileSex" name="sex">
<option value="">请选择</option>
<option value="0"></option>
<option value="1"></option>
<option value="2">未知</option>
</select>
</div>
<div class="editor-field">
<label for="profileBirthday">出生日期</label>
<input id="profileBirthday" name="birthday" type="date" />
</div>
</div>
<div class="editor-field">
<label for="profileEmail">邮箱</label>
<input
id="profileEmail"
name="email"
type="email"
maxlength="100"
autocomplete="email"
placeholder="请输入邮箱"
/>
</div>
<div class="bottom-actions profile-form-actions">
<button class="btn primary magnetic" type="submit" data-profile-submit>保存资料</button>
<div class="form-status" data-profile-status role="status" aria-live="polite"></div>
</div>
</form>
</section>
<section class="module-panel">
<h2>基本资料</h2>
<div data-profile-load-status><div class="api-state api-state--loading" data-api-state="loading" role="status" aria-live="polite" aria-busy="true">正在读取账户资料…</div></div>
<div class="form-like">
<p>
<span>头像</span><b data-profile-text="avatarStatus">正在读取</b
><a class="link-btn" href="profile-data.html">更换</a>
</p>
<p>
<span>昵称</span><b data-profile-text="displayName">正在读取</b
><a class="link-btn" href="profile-data.html">编辑</a>
</p>
<p>
<span>真实姓名</span><b data-profile-text="realName">正在读取</b
><a class="link-btn" href="#profile-edit-form">编辑</a>
</p>
<p>
<span>绑定账号</span><b data-profile-text="phone">正在读取</b
><a class="link-btn" href="profile-security.html">安全设置</a>
</p>
<p>
<span>家谱关系</span><b>请在当前家谱中查看</b
><a class="link-btn" href="profile-family-admin.html" data-genealogy-context-link
>成员管理</a
>
</p>
</div>
</section>
<section class="module-panel">
<h2>个人信息</h2>
<div class="form-like">
<p>
<span>性别</span><b data-profile-text="sex">正在读取</b
><a class="link-btn" href="#profile-edit-form">编辑</a>
</p>
<p>
<span>出生日期</span><b data-profile-text="birthday">待选择</b
><a class="link-btn" href="#profile-edit-form">编辑</a>
</p>
<p>
<span>邮箱</span><b data-profile-text="email">正在读取</b
><a class="link-btn" href="#profile-edit-form">编辑</a>
</p>
</div>
</section>
<section class="module-panel">
<h2 id="profile-region-heading">现居地区</h2>
<div class="editor-form region-profile-form" role="group" aria-labelledby="profile-region-heading" aria-describedby="profile-region-contract-note profile-region-picker-status">
<div class="region-picker profile-region-picker" data-region-picker>
<label for="profileProvinceCode">
<select id="profileProvinceCode" class="input" name="provinceCode" data-region-level="province">
<option value="">请选择省</option>
</select>
</label>
<label for="profileCityCode">
<select id="profileCityCode" class="input" name="cityCode" data-region-level="city">
<option value="">请选择市</option>
</select>
</label>
<label for="profileDistrictCode">区县
<select id="profileDistrictCode" class="input" name="districtCode" data-region-level="district">
<option value="">请选择区县</option>
</select>
</label>
</div>
<div class="bottom-actions">
<button class="btn primary magnetic" type="button" disabled>暂不支持保存地区</button>
<span id="profile-region-contract-note" class="form-status">现居地区暂不支持保存到个人资料</span>
</div>
<div id="profile-region-picker-status" class="form-status" data-region-picker-status role="status" aria-live="polite"></div>
</div>
<form class="editor-form" data-region-search-form data-region-search-panel novalidate>
<div class="editor-two">
<div class="editor-field">
<label for="profileRegionKeyword">搜索地区</label>
<input id="profileRegionKeyword" name="regionKeyword" type="search" placeholder="地区名称或编码" aria-describedby="profile-region-search-status" required />
</div>
<div class="bottom-actions">
<button class="btn ghost magnetic" type="submit">搜索</button>
</div>
</div>
<div id="profile-region-search-status" class="form-status" data-region-search-status role="status" aria-live="polite"></div>
</form>
<p class="api-status" data-region-search-path></p>
<div class="module-list" data-region-search-results></div>
</section>
<section class="module-panel">
<h2>亲属关系</h2>
<div class="module-list">
<div class="api-state api-state--empty" data-api-state="empty" role="status" aria-live="polite">
个人资料页不单独维护亲属关系;请先选择家谱,再到成员管理或世系图中查看和维护。
</div>
</div>
<div class="bottom-actions"><a class="btn ghost magnetic" href="profile-family-admin.html" data-genealogy-context-link>前往成员管理</a></div>
</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="config.js"></script>
<script src="utils/StorageUtil.js"></script>
<script src="utils/FormUtil.js"></script>
<script src="utils/axios.js"></script>
<script src="utils/AxiosRequestUtil.js"></script>
<script src="utils/ApiClient.js"></script>
<script src="public/js/profile-common.js"></script>
<script src="public/js/md5.js"></script>
<script src="public/js/upload-pages.js"></script>
<script src="public/js/region-pages.js"></script>
<script src="public/js/media-display.js"></script>
<script src="public/js/profile-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-14
View File
@@ -1,14 +0,0 @@
<!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-person-document-page>
<header class="site-header"><div class="container nav"><a class="brand" 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-content.html" data-genealogy-context-link>家族文化</a></nav><div class="nav-actions"><a href="profile-family-home.html" data-genealogy-context-link>返回家谱主页</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></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 href="profile-content.html" data-genealogy-context-link>内容发布</a><a class="active" href="profile-documents.html" data-genealogy-context-link>重要证件</a></aside><div class="module-main">
<section class="module-panel"><h2>新增档案</h2><form class="editor-form" data-document-form novalidate><div class="editor-grid"><div class="editor-field"><label for="documentPerson">关联人物</label><select id="documentPerson" data-document-person><option>人物加载中</option></select></div><div class="editor-field"><label for="documentType">证件类型</label><select id="documentType" data-document-type><option>类型加载中</option></select></div><div class="editor-field"><label for="documentTitle">证件标题</label><input id="documentTitle" name="documentTitle" maxlength="100" /></div><div class="editor-field"><label for="maskedIdentifier">脱敏标识</label><input id="maskedIdentifier" name="maskedIdentifier" maxlength="100" placeholder="例如 310***********1234" /></div></div><div class="editor-field"><label for="documentDescription">说明</label><textarea id="documentDescription" name="description" maxlength="1000"></textarea></div><div class="editor-grid"><div class="editor-field"><label for="documentUsage">文件用途</label><select id="documentUsage" data-document-usage><option value="FRONT">正面</option><option value="BACK">反面</option><option value="ATTACHMENT">附件</option></select></div><div class="editor-field"><label for="documentFile">证件文件</label><input id="documentFile" type="file" accept="image/*,application/pdf" data-upload-target="#documentOssId" data-upload-status="#documentUploadStatus" /><input id="documentOssId" type="hidden" data-document-oss-id /><p id="documentUploadStatus" class="upload-status" role="status" aria-live="polite"></p></div></div><div class="bottom-actions"><button class="btn primary" type="submit">保存档案</button></div></form></section>
<section class="module-panel"><h2>档案列表</h2><div class="module-grid" data-document-list><div class="api-state api-state--loading" data-api-state="loading">正在读取重要证件…</div></div></section><div class="api-status" data-document-status role="status" aria-live="polite">正在初始化…</div>
</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"></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/person-document-pages.js"></script><script src="public/js/page-effects.js"></script>
</body>
</html>
-13
View File
@@ -1,13 +0,0 @@
<!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-earning-page>
<header class="site-header"><div class="container nav"><a class="brand" 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.html">个人中心</a><a class="active" href="profile-services.html">帮助与服务</a></nav><div class="nav-actions"><a href="profile-services.html">返回服务</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></div></div></section><section class="section"><div class="container module-layout"><aside class="module-nav"><a href="profile-services.html">帮助与服务</a><a class="active" href="profile-earnings.html">推广收益</a><a href="profile-share.html">应用分享</a></aside><div class="module-main">
<section class="module-panel"><h2>收益概览</h2><div data-earning-summary><div class="api-state api-state--loading" data-api-state="loading">正在读取收益…</div></div></section>
<section class="module-panel"><h2>申请提现</h2><form class="editor-form" data-withdrawal-form novalidate><div class="editor-grid"><div class="editor-field"><label for="withdrawalAmount">提现金额</label><input id="withdrawalAmount" name="amount" inputmode="decimal" placeholder="0.00" /></div><div class="editor-field"><label for="payoutAccountName">收款人姓名</label><input id="payoutAccountName" name="payoutAccountName" maxlength="64" /></div></div><div class="editor-field"><label for="payoutQrFile">微信收款码</label><input id="payoutQrFile" class="upload-input" type="file" accept="image/*" data-upload-target="#payoutQrOssId" data-upload-status="#payoutQrStatus" /><label class="upload-control" for="payoutQrFile">选择收款码图片</label><input id="payoutQrOssId" name="payoutQrOssId" type="hidden" /><p id="payoutQrStatus" class="upload-status" role="status" aria-live="polite"></p></div><div class="bottom-actions"><button class="btn primary" type="submit" data-withdrawal-submit>提交提现申请</button></div></form></section>
<section class="module-panel"><h2>提现记录</h2><div class="module-list" data-earning-withdrawals><div class="api-state api-state--loading" data-api-state="loading">正在读取提现记录…</div></div></section><section class="module-panel"><h2>收益流水</h2><div class="module-list" data-earning-ledger><div class="api-state api-state--loading" data-api-state="loading">正在读取收益流水…</div></div></section><div class="api-status" data-earning-status role="status" aria-live="polite">正在初始化…</div>
</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"></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/earning-pages.js"></script><script src="public/js/page-effects.js"></script>
</body>
</html>
-115
View File
@@ -1,115 +0,0 @@
<!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">
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html"
><img class="brand-logo" src="public/images/logo.png" alt="我们的家谱,代代相传" /></a
>
<nav class="nav-links">
<a href="profile.html">个人中心</a
><a class="active" href="profile-families.html">我的家谱</a
><a href="plaza.html">家谱广场</a
><a href="profile-content.html">家族文化</a
><a href="surname.html">姓氏百科</a><a href="app.html">应用下载</a
><a href="help.html">帮助中心</a><a href="about.html">关于我们</a>
</nav>
<div class="nav-actions">
<a href="profile-data.html">账户资料</a>
</div>
</div>
</header>
<main>
<section class="module-hero">
<div class="container">
<nav class="profile-path" aria-label="当前位置">
<a href="profile.html">个人中心</a><span aria-hidden="true">/</span><strong aria-current="page">我的家谱</strong>
</nav>
<div class="module-title-row">
<div>
<h1>我的家谱</h1>
<p>
从真实列表选择要进入的家谱,后续页面会持续使用同一个家谱上下文。
</p>
</div>
<a class="btn primary magnetic" href="profile-create-family.html"
>创建家谱</a
>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a class="active" href="profile-families.html">我的家谱</a
><a href="profile-messages.html">消息中心</a
><a href="profile-family-admin.html" data-genealogy-context-link>家族管理</a
><a href="profile-content.html">内容发布</a
><a href="profile-data.html">个人资料</a
><a href="profile-services.html">帮助与服务</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>家谱入口</h2>
<p>先选择要处理的家谱,再进入主页、成员、世系和内容管理。</p>
<div class="api-status" data-genealogy-entry-status role="status" aria-live="polite">正在读取家谱额度…</div>
<div class="module-list" data-genealogy-list="mine">
<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="module-grid two">
<a
class="module-card tilt-card"
href="profile-create-family.html"
><span class="icon"></span>
<h3>立即创建我的家谱</h3>
<p>创建新家谱,设置姓氏、谱名、堂号和访问权限。</p></a
>
<a class="module-card tilt-card" href="profile-join-family.html"
><span class="icon"></span>
<h3>加入家谱</h3>
<p>搜索并选择可加入的家谱,提交关系和申请说明等待审核。</p></a
>
<div class="module-card">
<span class="icon"></span>
<h3>家谱排序</h3>
<p>选择家谱后上移或下移,保存个人的家谱展示顺序。</p>
<label for="genealogySortSelect">选择家谱</label>
<select id="genealogySortSelect" data-genealogy-sort-select disabled><option value="">家谱加载中</option></select>
<div class="row-actions">
<button class="btn outline" type="button" data-genealogy-sort-up disabled>上移</button>
<button class="btn outline" type="button" data-genealogy-sort-down disabled>下移</button>
<button class="btn primary" type="button" data-genealogy-sort-save disabled>保存顺序</button>
</div>
</div>
</div>
</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="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/profile-common.js?v=20260725-entry"></script>
<script src="public/js/genealogy-entry-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-95
View File
@@ -1,95 +0,0 @@
<!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-member-admin-page>
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html"><img class="brand-logo" src="public/images/logo.png" alt="我们的家谱,代代相传" /></a>
<nav class="nav-links"><a href="profile.html">个人中心</a><a class="active" href="profile-families.html">我的家谱</a><a href="profile-content.html">家族文化</a></nav>
<div class="nav-actions"><a href="profile-data.html">账户资料</a><a class="btn primary magnetic" href="profile-tree.html" data-genealogy-context-link>世系人物</a></div>
</div>
</header>
<main>
<section class="module-hero">
<div class="container">
<div class="module-kicker">家族管理</div>
<div class="module-title-row">
<div><h1 data-member-title>家族管理</h1><p>查看家谱成员;具备管理权限时可调整成员信息、角色和世系人物绑定。</p></div>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav"><a href="profile-families.html">我的家谱</a><a href="profile-messages.html">消息中心</a><a class="active" href="profile-family-admin.html" data-genealogy-context-link>家族管理</a><a href="profile-tree.html" data-genealogy-context-link>世系图</a><a href="profile-generation.html" data-genealogy-context-link>字辈谱</a></aside>
<div class="module-main">
<section class="module-panel">
<h2>家谱概览</h2>
<div data-member-overview><div class="api-state api-state--loading" data-api-state="loading" role="status" aria-live="polite" aria-busy="true">正在加载家谱和当前权限…</div></div>
<div class="module-grid">
<a class="module-card tilt-card" href="profile-tree.html" data-feature-link="available" data-genealogy-context-link><span class="icon"></span><h3>世系图</h3><p>查看或维护世系人物与亲属关系。</p></a>
<a class="module-card tilt-card" href="profile-generation.html" data-feature-link="available" data-genealogy-context-link><span class="icon"></span><h3>字辈谱</h3><p>查看或维护家谱字辈。</p></a>
<a class="module-card tilt-card" href="profile-ceremony.html" data-genealogy-context-link><span class="icon"></span><h3>祭祀活动</h3><p>维护活动、祭品与受邀名单。</p></a>
<a class="module-card tilt-card" href="profile-article.html" data-genealogy-context-link><span class="icon"></span><h3>谱文</h3><p>查看或维护当前家谱谱文。</p></a>
<a class="module-card tilt-card" href="profile-join-review.html" data-genealogy-context-link><span class="icon"></span><h3>入谱审核</h3><p>审核当前家谱的待处理加入申请。</p></a>
</div>
</section>
<section class="module-panel">
<h2>正常成员</h2>
<p>成员新增必须通过后端已有的加入或邀请流程;本页不伪造直接新增成员。</p>
<div class="form-status" role="status" aria-live="polite" data-member-action-status></div>
<div class="module-list" data-member-list aria-live="polite"><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" data-member-management hidden>
<h2 data-member-form-title>编辑成员</h2>
<form class="editor-form" data-member-form novalidate hidden>
<div class="editor-two">
<div class="editor-field"><label for="memberAdminName">成员名称</label><input id="memberAdminName" name="memberName" type="text" maxlength="50" /></div>
<div class="editor-field"><label for="memberAdminRelation">与家谱关系</label><input id="memberAdminRelation" name="relationName" type="text" maxlength="100" /></div>
</div>
<div class="editor-two">
<div class="editor-field"><label for="memberAdminRole">成员角色</label><select id="memberAdminRole" name="roleType" data-member-role-options></select></div>
<div class="editor-field"><label for="memberAdminLineage">绑定世系人物</label><select id="memberAdminLineage" name="lineagePersonId" data-member-lineage-options><option value="">不修改世系人物绑定</option></select></div>
</div>
<p class="upload-status">留空表示保持原信息不变;只填写本次需要修改的内容。</p>
<div class="upload-status" role="status" aria-live="polite" data-member-form-status></div>
<div class="bottom-actions"><button class="btn primary magnetic" type="submit" data-member-submit>保存成员</button><button class="btn ghost" type="reset">取消</button></div>
</form>
</section>
<section class="module-panel" data-owner-transfer-section hidden>
<h2>转让谱主</h2>
<form class="editor-form" data-owner-transfer-form novalidate>
<div class="editor-field"><label for="ownerTransferTarget">新谱主 <span class="field-required" aria-hidden="true">*</span></label><select id="ownerTransferTarget" name="targetMemberId" data-owner-transfer-target required><option value="">请选择新谱主</option></select></div>
<p>只能选择当前正常成员。转让后当前账号变为管理员,新谱主受其账号家谱拥有额度约束。</p>
<div class="upload-status" role="status" aria-live="polite" data-owner-transfer-status></div>
<div class="bottom-actions"><button class="btn ghost" type="submit" data-owner-transfer-submit>确认转让谱主</button></div>
</form>
</section>
<section class="module-panel" data-member-leave-section hidden>
<h2>退出家谱</h2>
<p>退出只停用当前账号的成员关系,不删除世系人物资料;谱主必须先转让谱主。</p>
<div class="bottom-actions"><button class="btn ghost" type="button" data-member-leave>退出当前家谱</button></div>
</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/member-admin-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-199
View File
@@ -1,199 +0,0 @@
<!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-family-home-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 class="active" href="profile-families.html">我的家谱</a
><a href="profile-family-admin.html" data-genealogy-context-link>家族管理</a
><a href="profile-content.html" data-genealogy-context-link>内容发布</a
><a href="profile-data.html">个人资料</a
><a href="profile-services.html">帮助与服务</a>
</nav>
<div class="nav-actions">
<a href="profile.html">账户中心</a
><a class="btn primary magnetic" href="profile-feed.html" data-feature-link="available" data-genealogy-context-link>发布动态</a>
</div>
</div>
</header>
<main>
<section class="module-hero">
<div class="container">
<nav class="profile-path" aria-label="当前位置">
<a href="profile.html">个人中心</a><span aria-hidden="true">/</span><a href="profile-families.html">我的家谱</a><span aria-hidden="true">/</span><strong data-family-home-context aria-current="page">当前家谱</strong>
</nav>
<div class="module-title-row">
<div>
<h1 data-family-home-title>正在读取家谱</h1>
<p>
当前家谱的工作区,用于进入世系、相册、家族圈、内容管理和成员协作。
</p>
</div>
<a class="btn ghost magnetic" href="profile-family-admin.html" data-family-home-management data-genealogy-context-link hidden
>管理家谱</a
>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a class="active" href="profile-family-home.html" data-genealogy-context-link>家谱主页</a
><a href="profile-tree.html" data-genealogy-context-link>世系图</a
><a href="profile-album.html" data-feature-link="available" data-genealogy-context-link>相册</a
><a href="profile-content.html" data-genealogy-context-link>内容发布</a
><a href="profile-family-admin.html" data-family-home-management data-genealogy-context-link hidden>家族管理</a
><a href="profile-messages.html">消息中心</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>家谱概览</h2>
<div class="module-grid">
<div class="module-card" data-family-home-overview>
<div class="api-state api-state--loading" data-api-state="loading" role="status" aria-live="polite" aria-busy="true">
正在加载家谱概览…
</div>
</div>
<div class="module-card">
<span class="icon"></span>
<h3>家谱成员</h3>
<p><strong data-family-home-member-count>--</strong></p>
</div>
<div class="module-card">
<span class="icon"></span>
<h3>世系人物</h3>
<p><strong data-family-home-person-count>--</strong></p>
</div>
<a class="module-card tilt-card" href="profile-invite.html" data-family-home-management data-genealogy-context-link hidden>
<span class="icon"></span>
<h3>邀请家人</h3>
<p>生成一次性邀请链接,指定人物并查看邀请状态。</p>
</a>
</div>
<div class="api-status" data-family-home-status role="status" aria-live="polite">正在读取家谱概览</div>
</section>
<section class="module-panel">
<h2>世系预览</h2>
<!-- 家谱主页只展示世系树预览,完整维护进入世系图页面 -->
<div class="lineage-tree-wrap is-compact" data-lineage-home-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>
<p>围绕当前家谱集中维护谱文、影像与家族资料。</p>
<div class="module-grid">
<a class="module-card tilt-card" href="profile-article.html" data-feature-link="available" data-genealogy-context-link
><span class="icon"></span>
<h3>谱文</h3>
<p>管理谱文、谱序和族史。</p></a
><a class="module-card tilt-card" href="profile-album.html" data-feature-link="available" data-genealogy-context-link
><span class="icon"></span>
<h3>相册</h3>
<p>维护家族相册和照片。</p></a
><a class="module-card tilt-card" href="profile-video.html" data-feature-link="available" data-genealogy-context-link
><span class="icon"></span>
<h3>视频</h3>
<p>发布和编辑家族视频。</p></a
>
</div>
</section>
<section class="module-panel">
<h2>家族记录与协作</h2>
<p>按列表、详情和编辑页面管理动态、成长记录、亲友往来、备忘和活动。</p>
<div class="module-grid">
<a class="module-card tilt-card" href="profile-feed.html" data-feature-link="available" data-genealogy-context-link
><span class="icon"></span>
<h3>家族圈</h3>
<p>发布图文动态、查看评论和家族互动。</p></a
><a class="module-card tilt-card" href="profile-growth.html" data-feature-link="available" data-genealogy-context-link
><span class="icon"></span>
<h3>成长日志</h3>
<p>记录成员成长节点、日期和附件。</p></a
><a class="module-card tilt-card" href="profile-relative.html" data-feature-link="available" data-genealogy-context-link
><span class="icon"></span>
<h3>亲友往来(贺礼簿)</h3>
<p>记录亲友关系、往来事项和礼金。</p></a
><a class="module-card tilt-card" href="profile-memo.html" data-feature-link="available" data-genealogy-context-link
><span class="icon"></span>
<h3>备忘录(家族恩人)</h3>
<p>以标题、内容和提醒记录家族恩人等事项,统一归入备忘录管理。</p></a
><a class="module-card tilt-card" href="profile-merit.html" data-feature-link="available" data-genealogy-context-link
><span class="icon"></span>
<h3>功德录</h3>
<p>记录功德人、事迹和相关金额。</p></a
><a class="module-card tilt-card" href="profile-ceremony.html" data-feature-link="available" data-genealogy-context-link
><span class="icon"></span>
<h3>祭祀活动</h3>
<p>维护活动、祭品和受邀名单。</p></a
><a class="module-card tilt-card" href="profile-gift.html" data-feature-link="available" data-genealogy-context-link
><span class="icon"></span>
<h3>贺礼邀请</h3>
<p>查看和响应当前家谱的活动邀请。</p></a
>
<a class="module-card tilt-card" href="profile-documents.html" data-feature-link="available" data-genealogy-context-link>
<span class="icon"></span>
<h3>重要证件</h3>
<p>按人物维护证件档案、附件和密码保护。</p>
</a>
</div>
</section>
<section class="module-panel">
<h2>家谱维护</h2>
<p>世系、字辈和成员维护均与当前家谱绑定;管理权限始终以服务端结果为准。</p>
<div class="module-grid">
<a class="module-card tilt-card" href="profile-tree.html" data-feature-link="available" data-genealogy-context-link
><span class="icon"></span>
<h3>世系图</h3>
<p>查看世系结构并维护人物与关系。</p></a
><a class="module-card tilt-card" href="profile-generation.html" data-feature-link="available" data-genealogy-context-link
><span class="icon"></span>
<h3>字辈谱</h3>
<p>查询和维护家谱字辈。</p></a
><a class="module-card tilt-card" href="profile-family-admin.html" data-feature-link="available" data-family-home-management data-genealogy-context-link hidden
><span class="icon"></span>
<h3>家族管理</h3>
<p>管理成员、入谱审核和谱主转移。</p></a
><a class="module-card tilt-card" href="profile-services.html#membership" data-feature-link="available" data-genealogy-context-link
><span class="icon"></span>
<h3>会员与订单</h3>
<p>关联当前家谱创建会员订单,并查看已有订单。</p></a
><a class="module-card tilt-card" href="profile-family-settings.html" data-feature-link="available" data-family-home-management data-genealogy-context-link hidden>
<span class="icon"></span>
<h3>家谱维护</h3>
<p>归档、恢复或在身份校验后永久删除家谱。</p>
</a>
</div>
</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/media-display.js"></script>
<script src="public/js/lineage-pages.js"></script>
<script src="public/js/family-home-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-23
View File
@@ -1,23 +0,0 @@
<!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-genealogy-lifecycle-page>
<header class="site-header"><div class="container nav"><a class="brand" 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></nav><div class="nav-actions"><a href="profile-family-home.html" data-genealogy-context-link>返回家谱主页</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></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 href="profile-family-admin.html" data-genealogy-context-link>家族管理</a><a class="active" href="profile-family-settings.html" data-genealogy-context-link>家谱维护</a></aside><div class="module-main">
<section class="module-panel"><h2>归档与恢复</h2><p>归档用于暂时停止维护,不会永久删除数据。</p><div class="bottom-actions"><button class="btn outline" type="button" data-genealogy-archive>归档家谱</button><button class="btn outline" type="button" data-genealogy-restore>恢复家谱</button></div></section>
<section class="module-panel"><h2>永久删除</h2><p>此操作不可恢复。仅谱主且满足服务端删除条件时可执行。</p><form class="editor-form" data-genealogy-delete-form novalidate><div class="editor-field"><label for="deleteGenealogyName">家谱全名</label><input id="deleteGenealogyName" data-genealogy-delete-name autocomplete="off" /></div><div class="editor-field"><label for="deleteSmsCode">短信验证码</label><div class="bottom-actions"><input id="deleteSmsCode" data-genealogy-delete-sms inputmode="numeric" autocomplete="one-time-code" /><button class="btn outline" type="button" data-genealogy-delete-code>发送验证码</button></div></div><div class="bottom-actions"><button class="btn primary" type="submit" data-genealogy-delete-submit disabled>永久删除家谱</button></div></form></section>
<div class="api-status" data-lifecycle-status role="status" aria-live="polite">正在读取家谱维护能力…</div>
</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"></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/genealogy-lifecycle-pages.js"></script><script src="public/js/page-effects.js"></script>
</body>
</html>
-95
View File
@@ -1,95 +0,0 @@
<!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-feed-detail-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-family-home.html">家谱主页</a
><a class="active" href="profile-feed.html" data-feed-list-link data-genealogy-context-link>家族圈</a>
</nav>
<div class="nav-actions">
<a href="profile-feed.html" data-feed-list-link data-genealogy-context-link>返回动态列表</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>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-content.html">内容发布</a
><a class="active" href="profile-feed.html" data-feed-list-link data-genealogy-context-link>家族圈</a
><a href="profile-album.html">相册</a
><a href="profile-video.html">视频</a>
</aside>
<div class="module-main">
<section class="module-panel" data-feed-detail>
<div class="api-state api-state--loading" data-api-state="loading" role="status" aria-live="polite" aria-busy="true">
正在加载动态详情…
</div>
</section>
<section class="module-panel">
<h2>发表评论</h2>
<form class="editor-form" data-feed-comment-form novalidate>
<input name="parentCommentId" type="hidden" />
<p class="module-meta" data-feed-comment-form-target>发表公开评论</p>
<div class="editor-field">
<label for="feedCommentContent">评论内容 <span class="field-required" aria-hidden="true">*</span></label>
<textarea id="feedCommentContent" name="commentContent" rows="3" maxlength="1000" required disabled placeholder="写下想说的话"></textarea>
</div>
<div class="form-status" role="status" aria-live="polite" data-feed-comment-form-status>
<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">
<button class="btn primary magnetic" type="submit" disabled>发表评论</button>
<button class="btn ghost" type="button" data-feed-comment-cancel disabled>取消回复</button>
</div>
</form>
</section>
<section class="module-panel">
<h2>评论与回复</h2>
<div data-feed-detail-comments>
<div class="api-state api-state--loading" data-api-state="loading" role="status" aria-live="polite" aria-busy="true">
正在加载评论…
</div>
</div>
</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"></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/media-display.js"></script>
<script src="public/js/feed-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-113
View File
@@ -1,113 +0,0 @@
<!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" />
<link rel="stylesheet" href="public/js/wangeditor5/css/style.css" />
</head>
<body class="page-profile-module" data-feed-edit-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-family-home.html">家谱主页</a
><a class="active" href="profile-feed.html">发布动态</a>
</nav>
<div class="nav-actions">
<a href="profile-feed.html" data-feed-list-link data-genealogy-context-link>返回动态</a
><button class="btn primary magnetic" type="submit" form="feed-edit-form" data-feed-editor-action hidden disabled>发布</button>
</div>
</div>
</header>
<main>
<section class="module-hero">
<div class="container">
<div class="module-kicker" data-feed-editor-kicker>发布动态</div>
<div class="module-title-row">
<div>
<h1 data-feed-editor-title>发布动态</h1>
<p>面向家族圈发布文字和图片动态,与家人交流近况。</p>
</div>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-content.html">内容发布</a
><a class="active" href="profile-feed.html">发布动态</a
><a href="profile-album.html">相册</a
><a href="profile-video.html">视频</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>动态内容</h2>
<form id="feed-edit-form" class="editor-form layui-form" data-feed-form novalidate>
<input name="feedType" type="hidden" value="text" />
<div class="editor-field">
<label for="feedContent">内容 <span class="field-required" aria-hidden="true">*</span></label
><textarea
id="feedContent"
name="feedContent"
class="js-rich-editor"
placeholder="请输入动态内容"
required
></textarea>
</div>
<div class="editor-field">
<label for="feedMediaFile">动态图片</label>
<input id="feedMedia" name="mediaOssIds" type="hidden" />
<label class="upload-control" for="feedMediaFile">选择动态图片</label>
<input id="feedMediaFile" class="upload-input" type="file" accept="image/*" multiple data-upload-multiple="true" data-upload-target="#feedMedia" data-upload-status="#feedMediaStatus" />
<p id="feedMediaStatus" class="upload-status" role="status" aria-live="polite">未选择图片</p>
</div>
<div class="editor-two" data-feed-advanced hidden>
<div class="editor-field">
<label for="feedStatus">状态</label>
<select id="feedStatus" name="status" disabled>
<option value="0">正常</option>
<option value="1">停用</option>
</select>
</div>
<div class="editor-field">
<label for="feedSortOrder">排序值</label>
<input id="feedSortOrder" name="sortOrder" type="number" min="0" value="0" disabled />
</div>
</div>
<div class="upload-status" role="status" aria-live="polite" data-feed-form-status></div>
<div class="bottom-actions">
<button class="btn primary magnetic" type="submit" data-feed-editor-action hidden disabled>发布</button
><a class="btn ghost magnetic" href="profile-feed.html" data-feed-list-link data-genealogy-context-link
>取消</a
>
</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/wangeditor5/index.js"></script>
<script src="public/js/rich-editor.js"></script>
<script src="public/js/profile-common.js"></script>
<script src="config.js"></script>
<script src="utils/StorageUtil.js"></script>
<script src="utils/FormUtil.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/feed-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-104
View File
@@ -1,104 +0,0 @@
<!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-feed-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-family-home.html">家谱主页</a
><a href="profile-content.html">内容发布</a
><a class="active" href="profile-feed.html">家族圈</a>
</nav>
<div class="nav-actions">
<a href="profile-family-home.html">返回家谱主页</a
><a class="btn primary magnetic" href="profile-feed-edit.html" data-feed-create-link data-genealogy-context-link 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>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-content.html">内容发布</a
><a class="active" href="profile-feed.html">家族圈</a
><a href="profile-album.html">相册</a
><a href="profile-video.html">视频</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>发布动态</h2>
<div class="form-like">
<p>
<span>内容</span><b>在发布页填写</b
><a class="link-btn" href="profile-feed-edit.html" data-feed-create-link data-genealogy-context-link hidden>编辑</a>
</p>
<p>
<span>图片</span><b>可直接选择并上传多张图片</b
><a class="link-btn" href="profile-feed-edit.html" data-feed-create-link data-genealogy-context-link hidden>添加</a
>
</p>
<p>
<span>动态类型</span><b>图文动态</b
><a class="link-btn" href="profile-feed-edit.html" data-feed-create-link data-genealogy-context-link hidden>编辑</a
>
</p>
<p>
<span>发布状态</span><b>正常或停用</b
><a class="link-btn" href="profile-feed-edit.html" data-feed-create-link data-genealogy-context-link hidden>设置</a
>
</p>
</div>
</section>
<section class="module-panel">
<h2>最近动态</h2>
<!-- 动态列表由 /feeds/page 接口渲染,点赞和评论走对应子接口 -->
<div class="module-list" data-feed-list>
<div class="api-state api-state--loading" data-api-state="loading" role="status" aria-live="polite" aria-busy="true">正在加载家族动态…</div>
</div>
<div class="row-actions">
<button class="pill" type="button" data-feed-page-prev disabled>上一页</button>
<span data-feed-page-label>第 1 页</span>
<button class="pill" type="button" data-feed-page-next disabled>下一页</button>
</div>
</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"></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/media-display.js"></script>
<script src="public/js/feed-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-97
View File
@@ -1,97 +0,0 @@
<!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-feedback-page="profile">
<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-services.html">帮助与服务</a
><a class="active" href="profile-feedback.html">意见反馈</a>
</nav>
<div class="nav-actions">
<a href="profile-services.html">返回服务中心</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>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-services.html">帮助与服务</a
><span class="module-nav-unavailable">应用分享<small>即将开放</small></span
><a class="active" href="profile-feedback.html">意见反馈</a
><a href="profile-security.html">安全设置</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>提交反馈</h2>
<form class="editor-form" id="profileFeedbackForm" data-feedback-form novalidate>
<div class="editor-two">
<div class="editor-field">
<label for="feedbackType">反馈类型</label>
<select id="feedbackType" name="feedbackType" data-feedback-type-options>
<option value="">反馈类型加载中…</option>
</select>
</div>
<div class="editor-field">
<label for="contactInfo">联系方式</label>
<input id="contactInfo" name="contactInfo" type="text" placeholder="手机号 / 邮箱" />
</div>
</div>
<div class="editor-field">
<label for="feedbackContent">反馈描述 <span class="field-required" aria-hidden="true">*</span></label>
<textarea id="feedbackContent" name="feedbackContent" required placeholder="请描述问题、页面位置和期望结果"></textarea>
</div>
<div class="form-status" role="status" aria-live="polite" data-feedback-status></div>
<div class="bottom-actions">
<button class="btn primary magnetic" type="submit" data-feedback-submit>提交反馈</button>
</div>
</form>
</section>
<section class="module-panel">
<div class="module-title-row">
<h2>历史反馈</h2>
<button class="btn ghost" type="button" data-feedback-refresh>刷新</button>
</div>
<div class="module-list" data-feedback-list>
<div class="api-state api-state--loading" data-api-state="loading" role="status" aria-live="polite" aria-busy="true">正在读取反馈记录…</div>
</div>
</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="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/profile-common.js"></script>
<script src="public/js/feedback-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-146
View File
@@ -1,146 +0,0 @@
<!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-generation-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>
</nav>
<div class="nav-actions">
<a href="profile-family-admin.html" data-genealogy-context-link>返回管理</a
><a class="btn primary magnetic" href="#generation-content">管理</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>
<button
class="btn primary magnetic"
type="button"
data-generation-add
data-generation-management
hidden
disabled
>新增字辈</button>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-tree.html" data-genealogy-context-link>世系图</a
><a class="active" href="profile-generation.html" data-genealogy-context-link>字辈谱</a
><a href="profile-family-admin.html" data-genealogy-context-link>家族管理</a>
</aside>
<div id="generation-content" class="module-main">
<section class="module-panel generation-batch-panel" data-generation-management hidden>
<h2>批量字辈</h2>
<!-- 批量字辈表单:字段对应 Apifox 的 GenerationPoemBatchBody。 -->
<form class="editor-form generation-batch-form" data-generation-batch-form novalidate>
<div class="editor-field">
<label for="generationBatchContent">字辈内容 <span class="field-required" aria-hidden="true">*</span></label>
<textarea
id="generationBatchContent"
name="poemText"
rows="4"
placeholder="例如:德 承 家 亦(用空格或标点分隔)"
></textarea>
</div>
<label class="check-row generation-batch-check" for="generationStopMissing">
<input
id="generationStopMissing"
name="disableMissing"
type="checkbox"
/>
<span>保存时停用未出现在文本中的后续世代(不删除历史记录)</span>
</label>
<div class="bottom-actions generation-batch-actions">
<button
class="btn ghost"
type="button"
data-generation-batch-action="preview"
>批量预览</button>
<button
class="btn primary magnetic"
type="button"
data-generation-batch-action="save"
>批量保存</button>
<span class="form-status" role="status" aria-live="polite" data-generation-batch-status></span>
</div>
</form>
<div class="module-list generation-batch-preview" data-generation-batch-preview>
<div class="api-state api-state--empty" data-api-state="empty" role="status" aria-live="polite">批量预览结果将在这里显示。</div>
</div>
</section>
<section id="generation-editor" class="module-panel" data-generation-editor hidden>
<h2 data-generation-editor-title>新增字辈</h2>
<form class="editor-form" data-generation-form novalidate>
<input name="poemId" type="hidden" />
<input name="status" type="hidden" />
<div class="editor-two">
<div class="editor-field">
<label for="generationNo">世代序号 <span class="field-required" aria-hidden="true">*</span></label>
<input id="generationNo" name="generationNo" type="number" min="1" max="2147483647" step="1" required />
</div>
<div class="editor-field">
<label for="generationText">字辈文字 <span class="field-required" aria-hidden="true">*</span></label>
<input id="generationText" name="generationText" type="text" maxlength="50" required />
</div>
</div>
<div class="editor-field">
<label for="generationDescription">说明</label>
<textarea id="generationDescription" name="description" rows="3" maxlength="500" placeholder="可选,最多 500 个字符"></textarea>
</div>
<div class="editor-field">
<label for="generationSortOrder">排序值</label>
<input id="generationSortOrder" name="sortOrder" type="number" min="-2147483648" max="2147483647" step="1" placeholder="可留空,越小越靠前" />
</div>
<div class="form-status" role="status" aria-live="polite" data-generation-form-status></div>
<div class="bottom-actions">
<button class="btn primary magnetic" type="submit" data-generation-editor-submit>保存字辈</button>
<button class="btn ghost" type="button" data-generation-editor-cancel>取消</button>
</div>
</form>
</section>
<section class="module-panel">
<h2>字辈列表</h2>
<div class="module-list" data-generation-list>
<div class="api-state api-state--loading" data-api-state="loading" role="status" aria-live="polite" aria-busy="true">正在加载字辈记录…</div>
</div>
</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/generation-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-146
View File
@@ -1,146 +0,0 @@
<!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" />
<link rel="stylesheet" href="public/js/wangeditor5/css/style.css" />
</head>
<body class="page-profile-module" data-ceremony-edit-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-content.html">内容发布</a
><a class="active" href="profile-ceremony.html">祭祀活动</a>
</nav>
<div class="nav-actions">
<a href="profile-ceremony.html">返回活动列表</a
><button class="btn primary magnetic" type="submit" form="ceremony-edit-form" data-ceremony-editor-action hidden>确定创建</button>
</div>
</div>
</header>
<main>
<section class="module-hero">
<div class="container">
<div class="module-kicker">活动编辑</div>
<div class="module-title-row">
<div>
<h1 data-ceremony-editor-title>创建祭祀活动</h1>
<p>维护活动类型、标题、时间地点和说明;受邀名单在活动详情中选择家谱成员。</p>
</div>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-content.html">内容发布</a
><a href="profile-merit.html">功德录</a
><a class="active" href="profile-ceremony.html">祭祀活动</a
><a href="profile-feed.html">发布动态</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>活动信息</h2>
<div class="api-state api-state--loading" data-api-state="loading" data-ceremony-editor-placeholder role="status" aria-live="polite" aria-busy="true">正在加载活动编辑信息…</div>
<form id="ceremony-edit-form" class="editor-form layui-form" data-ceremony-form data-ceremony-editor hidden novalidate>
<div class="editor-two">
<div class="editor-field">
<label for="giftType">活动类型 <span class="field-required" aria-hidden="true">*</span></label
><input id="giftType" name="ceremonyType" type="text" placeholder="请输入后端约定的活动类型" required />
</div>
<div class="editor-field">
<label for="giftDate">举办时间</label
><input
id="giftDate"
name="ceremonyTime"
type="datetime-local"
placeholder="请选择时间"
/>
</div>
</div>
<div class="editor-field">
<label for="giftTitle">活动标题 <span class="field-required" aria-hidden="true">*</span></label
><input id="giftTitle" name="ceremonyTitle" type="text" placeholder="请输入标题" required />
</div>
<div class="editor-field">
<label for="giftAddress">举办地点</label
><input
id="giftAddress"
name="location"
type="text"
placeholder="请输入地点"
/>
</div>
<div class="editor-field">
<label for="giftLocationAddress">详细地址</label
><input id="giftLocationAddress" name="locationAddress" type="text" maxlength="300" placeholder="最多 300 个字符" />
</div>
<div class="editor-two">
<div class="editor-field">
<label for="giftLongitude">经度</label
><input id="giftLongitude" name="longitude" type="number" min="-180" max="180" step="any" placeholder="与纬度同时填写" />
</div>
<div class="editor-field">
<label for="giftLatitude">纬度</label
><input id="giftLatitude" name="latitude" type="number" min="-90" max="90" step="any" placeholder="与经度同时填写" />
</div>
</div>
<div class="editor-field">
<label for="giftContent">活动说明</label
><textarea class="js-rich-editor"
id="giftContent"
name="ceremonyDesc"
placeholder="请输入活动说明"
></textarea>
</div>
<div class="editor-field">
<label for="giftCoverFile">封面文件</label>
<input id="giftCoverOssId" name="coverOssId" type="hidden" />
<label class="upload-control" for="giftCoverFile">选择封面图片</label>
<input id="giftCoverFile" class="upload-input" type="file" accept="image/*" data-upload-target="#giftCoverOssId" data-upload-status="#giftCoverStatus" />
<p id="giftCoverStatus" class="upload-status" role="status" aria-live="polite">未选择文件</p>
</div>
<div class="editor-field">
<label for="giftSortOrder">排序值</label
><input id="giftSortOrder" name="sortOrder" type="number" step="1" placeholder="可选,数值越小越靠前" />
</div>
<input name="status" type="hidden" value="0" />
<div class="upload-status" data-ceremony-form-status role="status" aria-live="polite"></div>
<div class="bottom-actions">
<button class="btn primary magnetic" type="submit">确定创建</button
><a class="btn ghost magnetic" href="profile-ceremony.html"
>取消</a
>
</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/wangeditor5/index.js"></script>
<script src="public/js/rich-editor.js"></script>
<script src="public/js/profile-common.js"></script>
<script src="config.js"></script>
<script src="utils/StorageUtil.js"></script>
<script src="utils/FormUtil.js"></script>
<script src="utils/axios.js"></script>
<script src="utils/AxiosRequestUtil.js"></script>
<script src="utils/ApiClient.js"></script>
<script src="public/js/md5.js"></script>
<script src="public/js/upload-pages.js"></script>
<script src="public/js/media-display.js"></script>
<script src="public/js/ceremony-admin-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-88
View File
@@ -1,88 +0,0 @@
<!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-ceremony-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-content.html">内容发布</a
><a class="active" href="profile-gift.html">贺礼邀请</a>
</nav>
<div class="nav-actions">
<a href="profile-content.html">返回发布中心</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>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-content.html">内容发布</a
><a href="profile-merit.html">功德录</a
><a class="active" href="profile-gift.html">贺礼邀请</a
><a href="profile-feed.html">发布动态</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>我的邀请</h2>
<div class="module-list" data-my-invitation-list aria-live="polite">
<div class="api-state api-state--loading" data-api-state="loading" role="status" aria-live="polite" aria-busy="true">
正在加载我的邀请…
</div>
</div>
<div class="form-status" data-my-invitation-status role="status" aria-live="polite"></div>
</section>
<section class="module-panel">
<div class="module-panel-head">
<h2>关联活动</h2>
<a class="pill" href="profile-ceremony.html" data-genealogy-context-link>管理关联活动</a>
</div>
</section>
<section class="module-panel">
<h2>邀请详情</h2>
<div data-my-invitation-detail aria-live="polite">
<div class="api-state api-state--empty" data-api-state="empty" role="status" aria-live="polite">
请选择一条邀请查看详情
</div>
</div>
</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"></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/ceremony-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-145
View File
@@ -1,145 +0,0 @@
<!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" />
<link rel="stylesheet" href="public/js/wangeditor5/css/style.css" />
</head>
<body class="page-profile-module" data-growth-edit-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-content.html">内容发布</a
><a class="active" href="profile-growth.html" data-genealogy-context-link>成长记录</a>
</nav>
<div class="nav-actions">
<a href="profile-growth.html" data-genealogy-context-link>返回记录</a
><button class="btn primary magnetic" type="submit" form="growth-edit-form" data-growth-editor-action hidden>保存</button>
</div>
</div>
</header>
<main>
<section class="module-hero">
<div class="container">
<div class="module-kicker">编辑成长记录</div>
<div class="module-title-row">
<div>
<h1 data-growth-editor-title>新建成长记录</h1>
<p>人物从当前家谱世系中选择,附件由上传组件自动生成内部编号。</p>
</div>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-content.html">内容发布</a
><a href="profile-feed.html">发布动态</a
><a class="active" href="profile-growth.html" data-genealogy-context-link>成长记录</a
><a href="profile-memo.html">备忘录</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>记录内容</h2>
<form id="growth-edit-form" class="editor-form" data-growth-form data-growth-editor hidden novalidate>
<div class="editor-two">
<div class="editor-field">
<label for="growthPersonId">关联世系人物</label
><select
id="growthPersonId"
name="lineagePersonId"
data-growth-lineage-person
>
<option value="">正在加载世系人物…</option>
</select>
</div>
<div class="editor-field">
<label for="growthDate">日期</label
><input
id="growthDate"
name="recordDate"
type="date"
placeholder="请选择日期"
/>
</div>
</div>
<div class="editor-two">
<div class="editor-field">
<label for="growthTitle">标题<span class="field-required" aria-hidden="true"> *</span></label>
<input id="growthTitle" name="recordTitle" type="text" placeholder="请输入成长记录标题" required />
</div>
<div class="editor-field">
<label for="growthType">类型</label>
<input id="growthType" name="recordType" type="text" placeholder="可选;按后端定义填写类型" />
</div>
</div>
<div class="editor-field">
<label for="growthContent">内容</label
><textarea
id="growthContent"
name="recordContent"
class="js-rich-editor"
placeholder="请输入成长记录内容"
></textarea>
</div>
<div class="editor-field">
<label for="growthRemindTime">提醒时间</label>
<input id="growthRemindTime" name="remindTime" type="datetime-local" />
</div>
<div class="editor-two">
<div class="editor-field">
<label for="growthMediaFiles">附件文件</label>
<input id="growthMediaOssIds" name="mediaOssIds" type="hidden" />
<label class="upload-control" for="growthMediaFiles">选择附件</label>
<input id="growthMediaFiles" class="upload-input" type="file" multiple data-upload-multiple="true" data-upload-target="#growthMediaOssIds" data-upload-status="#growthMediaStatus" data-growth-media-input />
<p id="growthMediaStatus" class="upload-status" data-growth-media-status role="status" aria-live="polite">未选择文件</p>
<button class="pill" type="button" data-growth-clear-media>清除附件</button>
</div>
<div class="editor-field">
<label for="growthSortOrder">排序值</label>
<input id="growthSortOrder" name="sortOrder" type="number" step="1" placeholder="可选;安全整数" />
</div>
</div>
<input id="growthStatus" name="status" type="hidden" value="0" />
<div class="form-status" data-growth-form-status role="status" aria-live="polite"></div>
<div class="bottom-actions">
<button class="btn primary magnetic" type="submit">保存</button
><a class="btn ghost magnetic" href="profile-growth.html" data-genealogy-context-link
>取消</a
>
</div>
</form>
<div data-growth-editor-placeholder>
<div class="api-state api-state--loading" role="status" aria-live="polite" aria-busy="true">正在加载成长记录编辑信息…</div>
</div>
</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/wangeditor5/index.js"></script>
<script src="public/js/rich-editor.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/FormUtil.js"></script>
<script src="utils/axios.js"></script>
<script src="utils/AxiosRequestUtil.js"></script>
<script src="utils/ApiClient.js"></script>
<script src="public/js/md5.js"></script>
<script src="public/js/upload-pages.js"></script>
<script src="public/js/media-display.js"></script>
<script src="public/js/growth-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-79
View File
@@ -1,79 +0,0 @@
<!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-growth-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-content.html">内容发布</a
><a class="active" href="profile-growth.html" data-genealogy-context-link>成长记录</a>
</nav>
<div class="nav-actions">
<a href="profile-content.html">返回发布中心</a
><a class="btn primary magnetic" href="profile-growth-edit.html" data-genealogy-context-link data-growth-create-link 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>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-content.html">内容发布</a
><a href="profile-feed.html">发布动态</a
><a class="active" href="profile-growth.html" data-genealogy-context-link>成长记录</a
><a href="profile-memo.html">备忘录</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>记录列表</h2>
<div class="module-list" data-growth-list aria-live="polite">
<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 tabindex="-1" data-growth-detail-heading>记录详情</h2>
<div data-growth-detail aria-live="polite">
<div class="api-state api-state--empty" data-api-state="empty" role="status" aria-live="polite">请选择一条成长记录查看详情。</div>
</div>
</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/media-display.js"></script>
<script src="public/js/growth-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-79
View File
@@ -1,79 +0,0 @@
<!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-family-invite-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">家族管理</a>
</nav>
<div class="nav-actions">
<a href="profile-family-admin.html">返回管理</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-family-admin.html" data-feature-link="available" data-genealogy-context-link>返回家族管理</a>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-family-admin.html">家族管理</a
><a class="active" href="profile-invite.html">邀请家人</a
><a href="profile-messages.html">邀请消息</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>生成邀请</h2>
<form class="editor-form" data-invite-form novalidate>
<div class="editor-field"><label for="invitePerson">关联人物(可选)</label><select id="invitePerson" data-invite-person><option value="">人物加载中</option></select></div>
<div class="bottom-actions"><button class="btn primary" type="submit">生成邀请链接</button><div class="form-status" data-invite-status role="status" aria-live="polite">正在读取邀请服务…</div></div>
</form>
<div class="editor-form" data-invite-result hidden>
<div class="editor-field"><label for="inviteLink">一次性邀请链接</label><input id="inviteLink" data-invite-link readonly /></div>
<button class="btn outline" type="button" data-invite-copy>复制链接</button>
</div>
<div class="module-card" data-invite-redeem hidden><h3>接受家谱邀请</h3><p>邀请令牌:<span data-invite-token></span></p><button class="btn primary" type="button" data-invite-redeem-submit>确认加入</button></div>
</section>
<section class="module-panel">
<h2>我发出的邀请</h2>
<div class="module-list" data-invite-list><div class="api-state api-state--loading" data-api-state="loading">正在读取邀请记录…</div></div>
</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"></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/family-invite-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-75
View File
@@ -1,75 +0,0 @@
<!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-my-join-applies-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 class="active" href="profile-families.html">我的家谱</a
><a href="profile-messages.html">消息中心</a>
</nav>
<div class="nav-actions">
<a href="profile-families.html">返回我的家谱</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 primary magnetic"
href="join-genealogy.html"
>提交新申请</a
>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-families.html">我的家谱</a
><a href="profile-create-family.html">创建家谱</a
><a class="active" href="profile-join-family.html">加入家谱</a>
</aside>
<div class="module-main">
<section class="module-panel">
<div class="module-title-row">
<h2>我的加入申请</h2>
<button class="btn ghost" type="button" data-join-apply-refresh>刷新</button>
</div>
<div class="form-note" role="status" aria-live="polite" data-my-join-applies-status></div>
<div class="module-list" data-join-apply-list="mine"></div>
</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"></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/join-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-92
View File
@@ -1,92 +0,0 @@
<!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-join-review-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-messages.html">消息中心</a
><a href="profile-family-admin.html">家族管理</a
><a class="active" href="profile-join-review.html">入谱审核</a>
</nav>
<div class="nav-actions">
<a href="profile-family-admin.html" data-genealogy-context-link>返回家族管理</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>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-messages.html">消息中心</a
><a class="active" href="profile-join-review.html" data-genealogy-context-link>入谱审核</a
><span class="module-nav-unavailable">邀请家人<small>即将开放</small></span
><a href="profile-admin-permissions.html" data-genealogy-context-link>管理员权限</a>
</aside>
<div class="module-main">
<section class="module-panel">
<div class="module-title-row">
<h2>待审核申请</h2>
<button class="btn ghost" type="button" data-join-review-refresh>刷新</button>
</div>
<div class="form-note" role="status" aria-live="polite" data-join-review-status></div>
<div class="module-list" data-join-apply-list="pending">
<div class="api-state api-state--loading" data-api-state="loading" role="status" aria-live="polite" aria-busy="true">
正在读取待审核申请…
</div>
</div>
</section>
<section id="join-review-form" class="module-panel" data-join-review-editor hidden>
<h2 data-join-review-form-title>审核加入申请</h2>
<form class="editor-form" data-join-review-form novalidate>
<input name="applyId" type="hidden" />
<input name="status" type="hidden" />
<div class="editor-field">
<label for="joinAuditRemark">审核说明</label>
<textarea id="joinAuditRemark" name="auditRemark" rows="4" maxlength="500" disabled placeholder="可选;拒绝时可说明原因,最多 500 个字符"></textarea>
</div>
<div class="form-status" role="status" aria-live="polite" data-join-review-form-status></div>
<div class="bottom-actions">
<button class="btn primary magnetic" type="submit" data-join-review-submit disabled>提交审核</button>
<button class="btn ghost" type="button" data-join-review-cancel disabled>取消</button>
</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"></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/join-review-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-65
View File
@@ -1,65 +0,0 @@
<!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-memo-edit-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-content.html">内容发布</a><a class="active" href="profile-memo.html" data-genealogy-context-link>备忘录</a></nav>
<div class="nav-actions"><a href="profile-memo.html" data-genealogy-context-link>返回记录</a><button class="btn primary magnetic" type="submit" form="memo-edit-form" data-memo-editor-action hidden>保存</button></div>
</div>
</header>
<main>
<section class="module-hero">
<div class="container"><div class="module-kicker">编辑备忘录</div><div class="module-title-row"><div><h1 data-memo-editor-title>新建备忘录</h1><p>附件由上传组件自动生成内部编号,页面不允许手工填写。</p></div></div></div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav"><a href="profile-content.html">内容发布</a><a href="profile-growth.html" data-genealogy-context-link>成长记录</a><a href="profile-relative.html" data-genealogy-context-link>亲友往来</a><a class="active" href="profile-memo.html" data-genealogy-context-link>备忘录</a></aside>
<div class="module-main">
<section class="module-panel">
<h2>备忘内容</h2>
<form id="memo-edit-form" class="editor-form" data-memo-form data-memo-editor hidden novalidate>
<div class="editor-field"><label for="memoTitle">备忘标题<span class="field-required" aria-hidden="true"> *</span></label><input id="memoTitle" name="memoTitle" type="text" required /></div>
<div class="editor-field"><label for="memoContent">备忘内容</label><textarea id="memoContent" name="memoContent" placeholder="可选"></textarea></div>
<div class="editor-two">
<div class="editor-field"><label for="memoRemindTime">提醒时间</label><input id="memoRemindTime" name="remindTime" type="datetime-local" /></div>
<div class="editor-field"><label for="memoCompleted">完成状态</label><select id="memoCompleted" name="completed"><option value="0">未完成</option><option value="1">已完成</option></select></div>
</div>
<div class="editor-two">
<div class="editor-field"><label for="memoMediaFiles">附件文件</label><input id="memoMediaOssIds" name="mediaOssIds" type="hidden" /><label class="upload-control" for="memoMediaFiles">选择附件</label><input id="memoMediaFiles" class="upload-input" type="file" multiple data-upload-multiple="true" data-upload-target="#memoMediaOssIds" data-upload-status="#memoMediaStatus" data-memo-media-input /><p id="memoMediaStatus" class="upload-status" data-memo-media-status role="status" aria-live="polite">未选择文件</p><button class="pill" type="button" data-memo-clear-media>清除附件</button></div>
<div class="editor-field"><label for="memoSortOrder">排序值</label><input id="memoSortOrder" name="sortOrder" type="number" step="1" placeholder="可选;安全整数" /></div>
</div>
<input name="status" type="hidden" value="0" />
<div class="form-status" data-memo-form-status role="status" aria-live="polite"></div>
<div class="bottom-actions"><button class="btn primary magnetic" type="submit">保存</button><a class="btn ghost magnetic" href="profile-memo.html" data-genealogy-context-link>取消</a></div>
</form>
<div data-memo-editor-placeholder><div class="api-state api-state--loading" role="status" aria-live="polite" aria-busy="true">正在加载备忘录编辑信息…</div></div>
</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/md5.js"></script>
<script src="public/js/upload-pages.js"></script>
<script src="public/js/media-display.js"></script>
<script src="public/js/memo-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-59
View File
@@ -1,59 +0,0 @@
<!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-memo-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-content.html">内容发布</a><a class="active" href="profile-memo.html" data-genealogy-context-link>备忘录</a></nav>
<div class="nav-actions"><a href="profile-content.html">返回发布中心</a><a class="btn primary magnetic" href="profile-memo-edit.html" data-genealogy-context-link data-memo-create-link 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></div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav"><a href="profile-content.html">内容发布</a><a href="profile-growth.html" data-genealogy-context-link>成长记录</a><a href="profile-relative.html" data-genealogy-context-link>亲友往来</a><a class="active" href="profile-memo.html" data-genealogy-context-link>备忘录</a></aside>
<div class="module-main">
<section class="module-panel">
<h2>备忘列表</h2>
<div class="module-list" data-memo-list aria-live="polite">
<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 tabindex="-1" data-memo-detail-heading>备忘详情</h2>
<div data-memo-detail aria-live="polite">
<div class="api-state api-state--empty" data-api-state="empty" role="status" aria-live="polite">请选择一条备忘录查看详情。</div>
</div>
</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/media-display.js"></script>
<script src="public/js/memo-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-120
View File
@@ -1,120 +0,0 @@
<!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" />
<link rel="stylesheet" href="public/js/wangeditor5/css/style.css" />
</head>
<body class="page-profile-module" data-merit-edit-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-content.html">内容发布</a>
<a class="active" href="profile-merit.html" data-genealogy-context-link>功德录</a>
</nav>
<div class="nav-actions">
<a href="profile-merit.html" data-genealogy-context-link>返回功德录</a>
<button class="btn primary magnetic" type="submit" form="merit-edit-form" data-merit-editor-action hidden>保存</button>
</div>
</div>
</header>
<main>
<section class="module-hero">
<div class="container">
<div class="module-kicker">编辑功德记录</div>
<div class="module-title-row">
<div>
<h1 data-merit-editor-title>新增功德记录</h1>
<p>选择功德类型并填写金额和说明;标有 * 的项目为必填。</p>
</div>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-content.html">内容发布</a>
<a class="active" href="profile-merit.html" data-genealogy-context-link>功德录</a>
<a href="profile-gift.html" data-genealogy-context-link>贺礼邀请</a>
<a href="profile-growth.html" data-genealogy-context-link>成长日志</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>功德资料</h2>
<form id="merit-edit-form" class="editor-form" data-merit-form data-merit-editor hidden novalidate>
<div class="editor-two">
<div class="editor-field">
<label for="meritName">功德人姓名<span class="field-required" aria-hidden="true"> *</span></label>
<input id="meritName" name="donorName" type="text" placeholder="请输入功德人姓名" required />
</div>
<div class="editor-field">
<label for="meritTime">功德时间</label>
<input id="meritTime" name="meritTime" type="datetime-local" />
</div>
</div>
<div class="editor-field">
<label for="meritTitle">功德标题<span class="field-required" aria-hidden="true"> *</span></label>
<input id="meritTitle" name="meritTitle" type="text" placeholder="请输入功德标题" required />
</div>
<div class="editor-field">
<label for="meritContent">事迹内容</label>
<textarea id="meritContent" name="meritContent" class="js-rich-editor" placeholder="可选,记录功德事迹"></textarea>
</div>
<div class="editor-two">
<div class="editor-field">
<label for="meritType">功德类型</label>
<select id="meritType" name="meritType">
<option value="donation">捐赠</option>
<option value="repair">修缮</option>
<option value="public">公益</option>
<option value="other">其他</option>
</select>
</div>
<div class="editor-field">
<label for="meritAmount">金额</label>
<input id="meritAmount" name="amount" type="number" step="any" placeholder="可选;后端未限定精度、范围或正负" />
</div>
</div>
<div class="editor-field">
<label for="meritSortOrder">排序值</label>
<input id="meritSortOrder" name="sortOrder" type="number" step="1" placeholder="可选;安全整数" />
</div>
<input name="status" type="hidden" value="0" />
<div class="form-status" data-merit-form-status role="status" aria-live="polite"></div>
<div class="bottom-actions">
<button class="btn primary magnetic" type="submit">保存</button>
<a class="btn ghost magnetic" href="profile-merit.html" data-genealogy-context-link>取消</a>
</div>
</form>
<div data-merit-editor-placeholder>
<div class="api-state api-state--loading" role="status" aria-live="polite" aria-busy="true">正在加载功德记录编辑信息…</div>
</div>
</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/wangeditor5/index.js"></script>
<script src="public/js/rich-editor.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/media-display.js"></script>
<script src="public/js/merit-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-79
View File
@@ -1,79 +0,0 @@
<!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-merit-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-content.html">内容发布</a>
<a class="active" href="profile-merit.html" data-genealogy-context-link>功德录</a>
</nav>
<div class="nav-actions">
<a href="profile-content.html">返回发布中心</a>
<a class="btn primary magnetic" href="profile-merit-edit.html" data-genealogy-context-link data-merit-create-link 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>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-content.html">内容发布</a>
<a class="active" href="profile-merit.html" data-genealogy-context-link>功德录</a>
<a href="profile-gift.html" data-genealogy-context-link>贺礼邀请</a>
<a href="profile-growth.html" data-genealogy-context-link>成长日志</a>
<a href="profile-memo.html" data-genealogy-context-link>备忘录</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>功德记录</h2>
<div class="module-list" data-merit-list aria-live="polite">
<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 tabindex="-1" data-merit-detail-heading>记录详情</h2>
<div data-merit-detail aria-live="polite">
<div class="api-state api-state--empty" data-api-state="empty" role="status" aria-live="polite">请选择一条功德记录查看详情。</div>
</div>
</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/media-display.js"></script>
<script src="public/js/merit-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-114
View File
@@ -1,114 +0,0 @@
<!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">
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html">
<img class="brand-logo" src="public/images/logo.png" alt="我们的家谱,代代相传" />
</a>
<nav class="nav-links">
<a href="profile.html">个人中心</a>
<a href="profile-families.html">我的家谱</a>
<a href="plaza.html">家谱广场</a>
<a href="profile-content.html">家族文化</a>
<a href="surname.html">姓氏百科</a>
<a href="app.html">应用下载</a>
<a href="help.html">帮助中心</a>
<a href="about.html">关于我们</a>
</nav>
<div class="nav-actions">
<a class="active" href="profile-messages.html">消息中心</a>
<a class="btn primary magnetic" href="profile-create-family.html">创建家谱</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.html">返回个人中心</a>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-families.html">我的家谱</a>
<a class="active" href="profile-messages.html">消息中心</a>
<a href="profile-family-admin.html">家族管理</a>
<a href="profile-content.html">内容发布</a>
<a href="profile-data.html">个人资料</a>
<a href="profile-services.html">帮助与服务</a>
</aside>
<div class="module-main">
<section class="module-panel">
<div class="module-title-row">
<div>
<h2>通知列表</h2>
<p class="module-note">未读数量:<b data-notification-unread-count>0</b></p>
</div>
<label class="editor-field">
<span>阅读状态</span>
<select data-notification-filter>
<option value="">全部通知</option>
<option value="0">仅未读</option>
<option value="1">仅已读</option>
</select>
</label>
</div>
<div class="form-status" data-notification-status role="status" aria-live="polite"></div>
<div class="module-list" data-notification-list aria-live="polite">
<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 data-notification-detail aria-live="polite">
<div class="api-state api-state--empty" data-api-state="empty" role="status" aria-live="polite">请选择一条通知查看详情。</div>
</div>
</section>
<section class="module-panel">
<h2>阅读管理</h2>
<div class="module-grid two">
<button class="module-card module-action-card" type="button" data-notification-read-all>
<span class="icon"></span>
<h3>全部标记已读</h3>
<p>将当前账号所有未读通知标记为已读。</p>
</button>
<button class="module-card module-action-card" type="button" data-notification-refresh>
<span class="icon"></span>
<h3>刷新消息</h3>
<p>重新读取通知列表、详情与未读数量。</p>
</button>
</div>
</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/notification-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-133
View File
@@ -1,133 +0,0 @@
<!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-relative-edit-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-content.html">内容发布</a>
<a class="active" href="profile-relative.html" data-genealogy-context-link>亲友往来</a>
</nav>
<div class="nav-actions">
<a href="profile-relative.html" data-genealogy-context-link>返回记录</a>
<button class="btn primary magnetic" type="submit" form="relative-edit-form" data-relative-editor-action hidden>保存</button>
</div>
</div>
</header>
<main>
<section class="module-hero">
<div class="container">
<div class="module-kicker">编辑亲友往来</div>
<div class="module-title-row">
<div>
<h1 data-relative-editor-title>新建亲友记录</h1>
<p>附件由上传组件自动生成内部编号,页面不允许手工填写。</p>
</div>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-content.html">内容发布</a>
<a href="profile-growth.html" data-genealogy-context-link>成长记录</a>
<a class="active" href="profile-relative.html" data-genealogy-context-link>亲友往来</a>
<a href="profile-memo.html">备忘录</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>记录内容</h2>
<form id="relative-edit-form" class="editor-form" data-relative-form data-relative-editor hidden novalidate>
<div class="editor-two">
<div class="editor-field">
<label for="relativeName">亲友姓名<span class="field-required" aria-hidden="true"> *</span></label>
<input id="relativeName" name="relativeName" type="text" placeholder="请输入亲友姓名" required />
</div>
<div class="editor-field">
<label for="relationName">关系名称</label>
<input id="relationName" name="relationName" type="text" placeholder="可选,例如长辈、同学" />
</div>
</div>
<div class="editor-two">
<div class="editor-field">
<label for="eventName">事件名称</label>
<input id="eventName" name="eventName" type="text" placeholder="可选,例如寿宴、婚礼" />
</div>
<div class="editor-field">
<label for="eventTime">事件时间</label>
<input id="eventTime" name="eventTime" type="datetime-local" />
</div>
</div>
<div class="editor-two">
<div class="editor-field">
<label for="giftAmount">礼金金额</label>
<input id="giftAmount" name="giftAmount" type="number" step="any" placeholder="可选;后端未限定精度或正负" />
</div>
<div class="editor-field">
<label for="relativeSortOrder">排序值</label>
<input id="relativeSortOrder" name="sortOrder" type="number" step="1" placeholder="可选;安全整数" />
</div>
</div>
<div class="editor-field">
<label for="relativeContent">记录内容</label>
<textarea id="relativeContent" name="recordContent" placeholder="可选,记录往来详情"></textarea>
</div>
<div class="editor-field">
<label for="relativeMediaFiles">附件文件</label>
<input id="relativeMediaOssIds" name="mediaOssIds" type="hidden" />
<label class="upload-control" for="relativeMediaFiles">选择附件</label>
<input
id="relativeMediaFiles"
class="upload-input"
type="file"
multiple
data-upload-multiple="true"
data-upload-target="#relativeMediaOssIds"
data-upload-status="#relativeMediaStatus"
data-relative-media-input
/>
<p id="relativeMediaStatus" class="upload-status" data-relative-media-status role="status" aria-live="polite">未选择文件</p>
<button class="pill" type="button" data-relative-clear-media>清除附件</button>
</div>
<input name="status" type="hidden" value="0" />
<div class="form-status" data-relative-form-status role="status" aria-live="polite"></div>
<div class="bottom-actions">
<button class="btn primary magnetic" type="submit">保存</button>
<a class="btn ghost magnetic" href="profile-relative.html" data-genealogy-context-link>取消</a>
</div>
</form>
<div data-relative-editor-placeholder>
<div class="api-state api-state--loading" role="status" aria-live="polite" aria-busy="true">正在加载亲友记录编辑信息…</div>
</div>
</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/md5.js"></script>
<script src="public/js/upload-pages.js"></script>
<script src="public/js/media-display.js"></script>
<script src="public/js/relative-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-78
View File
@@ -1,78 +0,0 @@
<!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-relative-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-content.html">内容发布</a>
<a class="active" href="profile-relative.html" data-genealogy-context-link>亲友往来</a>
</nav>
<div class="nav-actions">
<a href="profile-content.html">返回发布中心</a>
<a class="btn primary magnetic" href="profile-relative-edit.html" data-genealogy-context-link data-relative-create-link 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>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-content.html">内容发布</a>
<a href="profile-growth.html" data-genealogy-context-link>成长记录</a>
<a class="active" href="profile-relative.html" data-genealogy-context-link>亲友往来</a>
<a href="profile-memo.html">备忘录</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>记录列表</h2>
<div class="module-list" data-relative-list aria-live="polite">
<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 tabindex="-1" data-relative-detail-heading>记录详情</h2>
<div data-relative-detail aria-live="polite">
<div class="api-state api-state--empty" data-api-state="empty" role="status" aria-live="polite">请选择一条亲友记录查看详情。</div>
</div>
</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/media-display.js"></script>
<script src="public/js/relative-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-163
View File
@@ -1,163 +0,0 @@
<!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-security-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-services.html">帮助与服务</a
><a class="active" href="profile-security.html">安全设置</a>
</nav>
<div class="nav-actions">
<a href="profile-services.html">返回服务中心</a
><button class="btn primary magnetic" type="button" data-security-logout>退出登录</button>
</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>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-services.html">帮助与服务</a
><a href="profile-data.html">个人资料</a
><a class="active" href="profile-security.html">安全设置</a
><a href="profile-feedback.html">意见反馈</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>账号安全</h2>
<!-- 修改密码表单:字段对应 PasswordChangeBody。 -->
<form class="editor-form security-form" data-security-form="password" novalidate>
<div class="editor-two">
<div class="editor-field">
<label for="oldPassword">当前密码 <span class="field-required" aria-hidden="true">*</span></label>
<input id="oldPassword" name="oldPassword" type="password" autocomplete="current-password" required />
</div>
<div class="editor-field">
<label for="newPassword">新密码 <span class="field-required" aria-hidden="true">*</span></label>
<input id="newPassword" name="newPassword" type="password" autocomplete="new-password" required />
</div>
</div>
<div class="editor-field">
<label for="confirmPassword">确认新密码 <span class="field-required" aria-hidden="true">*</span></label>
<input id="confirmPassword" name="confirmPassword" type="password" autocomplete="new-password" required />
</div>
<div class="bottom-actions">
<button class="btn primary magnetic" type="submit" data-security-submit>修改密码</button>
<div class="form-status" data-security-status role="status" aria-live="polite"></div>
</div>
</form>
</section>
<section class="module-panel">
<h2>换绑手机号</h2>
<!-- 换绑手机号表单:字段对应 PhoneChangeBody。 -->
<form class="editor-form security-form" data-security-form="phone" novalidate>
<div class="editor-two">
<div class="editor-field">
<label for="newPhone">新手机号 <span class="field-required" aria-hidden="true">*</span></label>
<input
id="newPhone"
name="phone"
type="tel"
inputmode="numeric"
maxlength="11"
autocomplete="tel"
required
/>
</div>
<div class="editor-field">
<label for="phoneSmsCode">短信验证码 <span class="field-required" aria-hidden="true">*</span></label>
<input
id="phoneSmsCode"
name="smsCode"
type="text"
inputmode="numeric"
maxlength="4"
pattern="\d{4}"
autocomplete="one-time-code"
required
/>
<button class="btn ghost magnetic" type="button" data-security-send-code>获取验证码</button>
</div>
</div>
<input id="phoneValidToken" name="validToken" type="hidden" />
<div class="bottom-actions">
<button class="btn primary magnetic" type="submit" data-security-submit>确认换绑</button>
<div class="form-status" data-security-status role="status" aria-live="polite"></div>
</div>
</form>
</section>
<section class="module-panel security-danger">
<h2>注销账号</h2>
<p>验证已绑定手机号的短信验证码后提交注销申请。</p>
<form class="editor-form security-form" data-security-form="deactivate" novalidate>
<div class="editor-field">
<label for="deactivateSmsCode">短信验证码 <span class="field-required" aria-hidden="true">*</span></label>
<input
id="deactivateSmsCode"
name="smsCode"
type="text"
inputmode="numeric"
maxlength="4"
pattern="\d{4}"
autocomplete="one-time-code"
required
/>
<button class="btn ghost magnetic" type="button" data-security-send-deactivate-code>
获取验证码
</button>
<div class="form-status" data-security-bound-phone role="status" aria-live="polite"><div class="api-state api-state--loading" data-api-state="loading" aria-busy="true">正在读取已绑定手机号…</div></div>
</div>
<div class="editor-field">
<label for="confirmText">确认文本 <span class="field-required" aria-hidden="true">*</span></label>
<input id="confirmText" name="confirmText" type="text" placeholder="请输入:确认注销" required />
</div>
<input name="validToken" type="hidden" />
<div class="bottom-actions">
<button class="btn danger magnetic" type="submit" data-security-submit>提交注销</button>
<div class="form-status" data-security-status role="status" aria-live="polite"></div>
</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/md5.js"></script>
<script src="config.js"></script>
<script src="utils/StorageUtil.js"></script>
<script src="utils/FormUtil.js"></script>
<script src="utils/axios.js"></script>
<script src="utils/AxiosRequestUtil.js"></script>
<script src="utils/ApiClient.js"></script>
<script src="public/js/profile-common.js"></script>
<script src="public/tac/js/tac.min.js"></script>
<script src="public/js/captcha-pages.js"></script>
<script src="public/js/security-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-196
View File
@@ -1,196 +0,0 @@
<!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-vip-page>
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html"
><img class="brand-logo" src="public/images/logo.png" alt="我们的家谱,代代相传" /></a
>
<nav class="nav-links">
<a href="profile.html">个人中心</a
><a href="profile-families.html">我的家谱</a
><a href="plaza.html">家谱广场</a
><a href="profile-content.html">家族文化</a
><a href="surname.html">姓氏百科</a><a href="app.html">应用下载</a
><a class="active" href="help.html">帮助中心</a
><a href="about.html">关于我们</a>
</nav>
<div class="nav-actions">
<a href="profile-data.html">账户资料</a
><a class="btn primary magnetic" href="profile-create-family.html"
>创建家谱</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 primary magnetic" href="profile-feedback.html" data-feature-link="available"
>提交反馈</a
>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-families.html">我的家谱</a
><a href="profile-messages.html">消息中心</a
><a href="profile-family-admin.html">家族管理</a
><a href="profile-content.html">内容发布</a
><a href="profile-data.html">个人资料</a
><a class="active" href="profile-services.html">帮助与服务</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>常用服务</h2>
<div class="module-grid">
<a class="module-card tilt-card" href="profile-earnings.html" data-feature-link="available">
<span class="icon"></span>
<h3>应用分享与收益</h3>
<p>查看推广收益、可用余额、流水和提现记录。</p>
</a>
<div class="module-card is-unavailable" aria-disabled="true">
<span class="icon"></span>
<h3>个性化推荐</h3>
<p>推荐设置正在完善,目前不会保存开关状态。</p>
<span class="pill">暂不可设置</span>
</div>
<a class="module-card tilt-card" href="profile-feedback.html" data-feature-link="available"
><span class="icon"></span>
<h3>意见反馈</h3>
<p>提交产品问题、资料异常和改进建议。</p></a
>
<a class="module-card tilt-card" href="profile-security.html"
><span class="icon"></span>
<h3>安全设置</h3>
<p>修改密码、找回账号、维护登录安全。</p></a
>
<a class="module-card tilt-card" href="help.html"
><span class="icon"></span>
<h3>帮助中心</h3>
<p>查看新手常见问题、家谱优势和编辑字辈说明。</p></a
>
<a class="module-card tilt-card" href="app.html"
><span class="icon"></span>
<h3>应用下载</h3>
<p>安装移动端,继续处理图片、视频和成员资料。</p></a
>
<a class="module-card tilt-card" href="about.html"
><span class="icon"></span>
<h3>联系我们</h3>
<p>查看平台介绍、客服信息和服务说明。</p></a
>
</div>
</section>
<section class="module-panel">
<h2>平台设置与协议</h2>
<p>集中查看平台说明、服务支持和协议入口;正式内容以平台发布版本为准。</p>
<div class="module-grid">
<a class="module-card tilt-card" href="about.html"
><span class="icon"></span>
<h3>关于我们与联系我们</h3>
<p>查看平台介绍、客服信息和服务说明。</p></a
>
<a class="module-card tilt-card" href="privacy.html"
><span class="icon"></span>
<h3>隐私政策</h3>
<p>查看个人信息处理说明。</p></a
>
<a class="module-card tilt-card" href="children-privacy.html"
><span class="icon"></span>
<h3>儿童信息保护</h3>
<p>查看儿童个人信息处理规则。</p></a
>
<a class="module-card tilt-card" href="terms.html"
><span class="icon"></span>
<h3>服务协议</h3>
<p>查看平台服务协议入口。</p></a
>
</div>
</section>
<section class="module-panel" id="membership" tabindex="-1">
<h2>会员服务</h2>
<p>选择适合的会员套餐并创建微信扫码支付订单。</p>
<div class="vip-package-list" data-vip-package-list>
<div class="api-state api-state--loading" data-api-state="loading" role="status" aria-live="polite" aria-busy="true">正在读取会员套餐…</div>
</div>
<form class="editor-form vip-order-form" data-vip-order-form novalidate>
<p class="form-status" data-vip-selected-package role="status" aria-live="polite">尚未选择套餐</p>
<div class="editor-field">
<label for="vipGenealogy">关联家谱(可选)</label>
<select id="vipGenealogy" data-vip-genealogy-options>
<option value="">家谱选项加载中</option>
</select>
</div>
<div class="bottom-actions">
<button class="btn primary magnetic" type="submit" data-vip-order-submit>创建会员订单</button>
<div class="form-status" data-vip-order-status role="status" aria-live="polite"></div>
</div>
</form>
</section>
<section class="module-panel" data-vip-payment-panel hidden>
<h2>微信扫码支付</h2>
<div data-vip-payment-qr></div>
<p data-vip-payment-text role="status" aria-live="polite"></p>
</section>
<section class="module-panel">
<div class="module-title-row">
<h2>会员订单</h2>
<button class="btn outline" type="button" data-vip-order-refresh>刷新订单</button>
</div>
<div class="module-list" data-vip-order-list>
<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="module-list">
<a class="module-row" href="help.html"
><div>
<h3>新手常见问题</h3>
<p>注册登录、创建家谱、邀请成员、资料审核等流程。</p>
</div>
<span class="pill">查看</span></a
><a class="module-row" href="profile-article.html"
><div>
<h3>为什么家谱不只是一本名册</h3>
<p>理解关系、故事和协作维护。</p>
</div>
<span class="pill">阅读</span></a
>
</div>
</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="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/qrcode.min.js"></script>
<script src="public/js/profile-common.js"></script>
<script src="public/js/vip-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-102
View File
@@ -1,102 +0,0 @@
<!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-family-share-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-services.html">帮助与服务</a
><a class="active" href="profile-share.html">应用分享与收益</a>
</nav>
<div class="nav-actions">
<a class="btn ghost magnetic" href="profile-services.html"
>返回服务中心</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>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-services.html">帮助与服务</a
><a class="active" href="profile-share.html">应用分享与收益</a
><a href="profile-feedback.html">意见反馈</a
><a href="help.html">帮助中心</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>邀请好友奖励</h2>
<div class="module-grid">
<div class="module-card is-unavailable" aria-disabled="true">
<span class="icon"></span>
<h3>每邀请一位好友</h3>
<p>邀请奖励规则正在完善,当前暂不展示奖励金额。</p>
</div>
<div class="module-card is-unavailable" aria-disabled="true">
<span class="icon"></span>
<h3>分享二维码</h3>
<p>分享链接和二维码暂未开放,请先使用移动端分享。</p>
</div>
</div>
</section>
<section class="module-panel">
<h2>分享记录</h2>
<div class="module-list">
<div class="api-state api-state--empty" data-api-state="empty" role="status" aria-live="polite">
分享记录暂未开放;推广收益和提现结果可在下方查看。
</div>
</div>
</section>
<section class="module-panel">
<h2>收益与提现</h2>
<div class="module-grid two">
<a class="module-card tilt-card" href="profile-earnings.html" data-feature-link="available">
<span class="icon"></span>
<h3>推广收益</h3>
<p>查看可用余额、冻结金额和不可变收益流水。</p>
</a>
<a class="module-card tilt-card" href="profile-earnings.html" data-feature-link="available">
<span class="icon"></span>
<h3>提现记录</h3>
<p>上传微信收款码,提交提现并跟踪处理状态。</p>
</a>
</div>
</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"></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/page-effects.js"></script>
</body>
</html>
-305
View File
@@ -1,305 +0,0 @@
<!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>
-129
View File
@@ -1,129 +0,0 @@
<!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-video-edit-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-content.html">内容发布</a>
<a class="active" href="profile-video.html" data-genealogy-context-link>视频</a>
</nav>
<div class="nav-actions">
<a href="profile-video.html" data-genealogy-context-link>返回视频列表</a>
<button class="btn primary magnetic" type="submit" form="video-edit-form" data-video-management hidden>保存视频</button>
</div>
</div>
</header>
<main>
<section class="module-hero">
<div class="container">
<div class="module-kicker">编辑视频</div>
<div class="module-title-row">
<div>
<h1 data-video-editor-title>发布视频</h1>
<p>视频文件由上传组件自动关联,无需填写内部编号。</p>
</div>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-content.html">内容发布</a>
<a class="active" href="profile-video.html" data-genealogy-context-link>视频</a>
<a href="profile-family-home.html" data-genealogy-context-link>家谱主页</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>视频内容</h2>
<form id="video-edit-form" class="editor-form" data-video-form data-video-management hidden novalidate>
<div class="editor-field">
<label for="video-title">视频标题 <span class="field-required" aria-hidden="true">*</span></label>
<input id="video-title" name="videoTitle" type="text" placeholder="请输入视频标题" required />
</div>
<div class="editor-field">
<label for="video-description">视频说明</label>
<textarea id="video-description" name="videoDesc" placeholder="可选,记录视频内容"></textarea>
</div>
<div class="editor-two">
<div class="editor-field">
<label for="video-file">视频文件 <span class="field-required" aria-hidden="true">*</span></label>
<input id="video-oss-id" name="videoOssId" type="hidden" />
<label class="upload-control" for="video-file">选择视频文件</label>
<input
id="video-file"
class="upload-input"
type="file"
accept="video/*"
data-upload-target="#video-oss-id"
data-upload-status="#video-file-status"
data-video-duration-target="#video-duration"
/>
<p id="video-file-status" class="upload-status" data-video-file-status role="status" aria-live="polite">请选择视频文件</p>
</div>
<div class="editor-field">
<label for="video-cover-file">封面图片</label>
<input id="video-cover-oss-id" name="coverOssId" type="hidden" />
<label class="upload-control" for="video-cover-file">选择封面图片</label>
<input
id="video-cover-file"
class="upload-input"
type="file"
accept="image/*"
data-upload-target="#video-cover-oss-id"
data-upload-status="#video-cover-status"
/>
<p id="video-cover-status" class="upload-status" data-video-cover-status role="status" aria-live="polite">未选择封面</p>
</div>
</div>
<div class="editor-two">
<div class="editor-field">
<label for="video-duration">视频时长(秒)</label>
<input id="video-duration" name="durationSeconds" type="number" step="1" min="0" readonly />
<p class="upload-status">选择视频后自动读取,不会要求手工填写。</p>
</div>
<div class="editor-field">
<label for="video-sort-order">排序值</label>
<input id="video-sort-order" name="sortOrder" type="number" step="1" placeholder="可选,数值越小越靠前" />
</div>
</div>
<input name="status" type="hidden" value="0" />
<div class="form-status" data-video-form-status role="status" aria-live="polite"></div>
<div class="bottom-actions">
<button class="btn primary magnetic" type="submit">保存视频</button>
<a class="btn ghost magnetic" href="profile-video.html" data-genealogy-context-link>取消</a>
</div>
</form>
<div class="api-state api-state--loading" data-api-state="loading" data-video-permission-placeholder role="status" aria-live="polite" aria-busy="true">正在核对视频维护权限…</div>
</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/md5.js"></script>
<script src="public/js/upload-pages.js"></script>
<script src="public/js/media-display.js"></script>
<script src="public/js/video-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-83
View File
@@ -1,83 +0,0 @@
<!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-video-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-content.html">内容发布</a>
<a href="profile-album.html">相册</a>
<a class="active" href="profile-video.html" data-genealogy-context-link>视频</a>
</nav>
<div class="nav-actions">
<a href="profile-content.html">返回发布中心</a>
<a class="btn primary magnetic" href="profile-video-edit.html" data-genealogy-context-link data-video-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>
</div>
</div>
</section>
<section class="section">
<div class="container module-layout">
<aside class="module-nav">
<a href="profile-content.html">内容发布</a>
<a href="profile-album.html">相册</a>
<a class="active" href="profile-video.html" data-genealogy-context-link>视频</a>
<a href="profile-family-home.html" data-genealogy-context-link>家谱主页</a>
</aside>
<div class="module-main">
<section class="module-panel">
<h2>视频列表</h2>
<div class="module-list" data-video-list aria-live="polite">
<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 data-video-detail aria-live="polite">
<div class="api-state api-state--empty" data-api-state="empty" role="status" aria-live="polite">
请选择一个视频查看详情
</div>
</div>
</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/media-display.js"></script>
<script src="public/js/video-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-199
View File
@@ -1,199 +0,0 @@
<!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.css" />
</head>
<body class="page-profile" data-profile-page>
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html"
><img class="brand-logo" src="public/images/logo.png" alt="我们的家谱,代代相传" /></a
>
<nav class="nav-links">
<a class="active" href="profile.html">个人中心</a>
<a href="profile-families.html">我的家谱</a>
<a href="plaza.html">家谱广场</a>
<a href="profile-content.html">家族文化</a>
<a href="surname.html">姓氏百科</a>
<a href="app.html">应用下载</a>
<a href="help.html">帮助中心</a>
<a href="about.html">关于我们</a>
</nav>
<div class="nav-actions">
<a href="profile-data.html">账户资料</a>
<a class="btn primary magnetic" href="profile-create-family.html">创建家谱</a>
</div>
</div>
</header>
<main>
<section class="profile-hero">
<div class="container profile-hero-grid">
<div class="profile-card">
<div class="avatar-wrap">
<div class="avatar" data-profile-avatar data-profile-text="avatarText"></div>
<span></span>
</div>
<div class="profile-info">
<div class="eyebrow">个人中心</div>
<h1 data-profile-text="displayName">正在加载账户</h1>
<p>账户资料与家谱工作区分开呈现。进入家谱后,再处理成员、内容和协作事务。</p>
<div class="profile-tags">
<span>已登录账户</span><span>资料与账号同步</span>
</div>
<div class="profile-load-status" data-profile-load-status role="status" aria-live="polite">正在读取账户资料…</div>
<div class="toolbar profile-hero-actions">
<a class="btn primary magnetic" href="profile-families.html">进入我的家谱</a>
<a class="btn ghost magnetic" href="profile-data.html">完善个人资料</a>
</div>
</div>
</div>
<div class="profile-next-card">
<div class="eyebrow">下一步</div>
<h2>从家谱开始</h2>
<p>没有家谱时可创建或申请加入;有多个家谱时,请先选择本次要处理的家谱。</p>
<div class="toolbar">
<a class="link-btn" href="profile-create-family.html">创建家谱</a>
<a class="link-btn" href="profile-join-family.html">申请加入</a>
</div>
</div>
</div>
</section>
<section class="section dashboard-section">
<div class="container dashboard-layout">
<aside class="dashboard-side">
<div class="side-card user-actions">
<h2>账户入口</h2>
<a href="profile-data.html"><span>个人资料</span><b>查看并更新账户资料</b></a>
<a href="profile-messages.html"><span>消息中心</span><b>查看真实通知与业务提醒</b></a>
<a href="profile-services.html"><span>帮助与服务</span><b>反馈、安全设置与会员服务</b></a>
<button class="logout-link" type="button" data-logout-open><span>退出登录</span><b>返回首页</b></button>
</div>
</aside>
<div class="dashboard-main">
<section class="panel my-family-panel">
<div class="panel-head">
<div>
<h2>我的家谱</h2>
<p>先从真实列表选择家谱,再进入对应的主页、世系图、成员和内容管理。</p>
</div>
<a class="link-btn" href="profile-families.html">查看全部</a>
</div>
<div class="family-grid">
<a class="family-card" href="profile-families.html">
<div class="book-cover">选 择<br />家 谱</div>
<div>
<h3>进入我的家谱</h3>
<p>列表只展示当前账户真实可访问的家谱,避免把示例数据当成自己的内容。</p>
<div class="mini-actions">
<span>选择家谱</span><span>进入主页</span><span>处理事务</span>
</div>
</div>
</a>
</div>
</section>
<section class="panel">
<div class="panel-head compact">
<div>
<h2>账户资料</h2>
<p>以下内容来自你的账户资料;未填写的信息会显示为“待填写”。</p>
</div>
<a class="link-btn" href="profile-data.html">编辑资料</a>
</div>
<div class="data-list">
<p><span>绑定账号</span><b data-profile-text="phone">加载中</b></p>
<p><span>昵称</span><b data-profile-text="displayName">加载中</b></p>
<p><span>真实姓名</span><b data-profile-text="realName">加载中</b></p>
<p><span>性别</span><b data-profile-text="sex">加载中</b></p>
<p><span>出生日期</span><b data-profile-text="birthday">加载中</b></p>
<p><span>邮箱</span><b data-profile-text="email">加载中</b></p>
</div>
</section>
<section class="panel">
<div class="panel-head compact">
<div>
<h2>账户与服务</h2>
<p>将 APP 的“我的”功能整理为桌面服务入口;家谱内容仍需从具体家谱进入。</p>
</div>
<a class="link-btn" href="profile-services.html">查看服务中心</a>
</div>
<div class="service-grid" aria-label="账户与服务入口">
<a href="profile-messages.html"><strong>消息中心</strong><span>查看真实通知与业务提醒</span></a>
<a href="profile-data.html"><strong>个人资料</strong><span>维护昵称、实名和联系方式</span></a>
<a href="profile-security.html"><strong>账户安全</strong><span>修改密码、换绑手机或注销账号</span></a>
<a href="profile-services.html#membership"><strong>会员服务</strong><span>查看套餐、订单、帮助与服务说明</span></a>
<a href="profile-feedback.html"><strong>意见反馈</strong><span>提交产品问题和改进建议</span></a>
<a href="app.html"><strong>移动端</strong><span>下载 APP,处理移动端场景</span></a>
</div>
</section>
</div>
</div>
</section>
</main>
<footer class="footer">
<div class="container">
<div class="footer-grid">
<div>
<a class="brand" href="index.html"
><img class="brand-logo" src="public/images/logo-light.png" alt="我们的家谱,代代相传" /></a
>
<p>一个面向家庭和宗族的数字家谱与家族文化门户。</p>
</div>
<div>
<h4>产品入口</h4>
<a href="profile-families.html">数字家谱</a><a href="plaza.html">家谱广场</a><a href="app.html">应用下载</a><a href="help.html">帮助中心</a>
</div>
<div>
<h4>文化内容</h4>
<a href="profile-content.html">家族文化</a><a href="surname.html">姓氏百科</a><a href="profile-article.html">家谱知识</a><a href="profile-messages.html">平台公告</a>
</div>
<div>
<h4>服务支持</h4>
<a href="help.html">帮助中心</a>
<a href="submit-ticket.html">提交问题</a>
<a href="about.html">关于平台</a>
</div>
</div>
<div class="footer-legal">
<div>© 2026 代代相传. All rights reserved.</div>
<a href="https://beian.miit.gov.cn" target="_blank" rel="noopener">ICP备案:蜀ICP备2024044594号-1</a>
</div>
</div>
</footer>
<div class="logout-modal" id="logoutModal" aria-hidden="true" hidden>
<div class="logout-modal-backdrop" data-logout-close></div>
<div class="logout-dialog" role="dialog" aria-modal="true" aria-labelledby="logoutTitle">
<button class="logout-close" type="button" data-logout-close aria-label="关闭">×</button>
<span class="logout-icon">退</span>
<h2 id="logoutTitle">确认退出登录?</h2>
<p>退出后需要重新登录,才能继续管理家谱、审核消息和编辑资料。</p>
<div class="logout-actions">
<button class="btn ghost magnetic" type="button" data-logout-close>取消</button>
<a class="btn primary magnetic" href="index.html" data-logout-confirm>确认退出</a>
</div>
</div>
</div>
<script src="public/js/jquery360.js"></script>
<script src="public/layui/layui.js"></script>
<script src="public/js/lay-config.js"></script>
<script src="config.js"></script>
<script src="utils/StorageUtil.js"></script>
<script src="utils/FormUtil.js"></script>
<script src="utils/axios.js"></script>
<script src="utils/AxiosRequestUtil.js"></script>
<script src="utils/ApiClient.js"></script>
<script src="public/js/profile-common.js?v=20260725-entry"></script>
<script src="public/js/media-display.js"></script>
<script src="public/js/profile-pages.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-103
View File
@@ -1,103 +0,0 @@
<!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/css/promo-album.css" />
</head>
<body class="page-promo-album" data-promo-album-page>
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html"
><img class="brand-logo" src="public/images/logo.png" alt="我们的家谱,代代相传" /></a
>
<nav class="nav-links">
<a href="index.html">首页</a><a href="genealogy.html">数字家谱</a
><a href="plaza.html">家谱广场</a><a href="culture.html">家族文化</a
><a href="surname.html">姓氏百科</a><a href="app.html">应用下载</a
><a href="help.html">帮助中心</a><a href="about.html">关于我们</a>
</nav>
<div class="nav-actions">
<a href="login.html">登录</a><a href="register.html">注册</a
><a class="btn primary magnetic" href="create-genealogy.html"
>创建家谱</a
>
</div>
</div>
</header>
<main>
<section class="inner-hero promo-hero">
<div class="container">
<div class="hero-copy">
<div class="eyebrow">宣传相册</div>
<h1>用公开相册展示家族故事</h1>
<p class="lead">
宣传相册用于前台展示祖屋、祠堂、家族活动、老照片和公开纪念内容,帮助访客更直观理解家族文化。
</p>
<div class="promo-tags">
<span>祖屋影像</span><span>活动纪念</span><span>公开展示</span>
</div>
</div>
<div class="hero-card album-preview tilt-card">
<div class="album-photo large"></div>
<div class="album-photo"></div>
<div class="album-photo warm"></div>
<div class="album-photo green"></div>
</div>
</div>
</section>
<section class="section alt">
<div class="container">
<div class="section-head">
<h2>相册分类</h2>
<p>把适合公开展示的影像整理成专题,让家族主页更有内容层次。</p>
</div>
<div class="grid-3">
<!-- 宣传相册复用 /albums 列表接口渲染公开展示内容 -->
<div data-promo-album-list>
<div class="api-empty">相册加载中...</div>
</div>
</div>
</div>
</section>
</main>
<footer class="footer">
<div class="container">
<div class="footer-grid">
<div>
<a class="brand" href="index.html"
><img class="brand-logo" src="public/images/logo-light.png" alt="我们的家谱,代代相传" /></a
>
<p>一个面向家庭和宗族的数字家谱与家族文化门户。</p>
</div>
<div>
<h4>产品入口</h4>
<a href="genealogy.html">数字家谱</a><a href="plaza.html">家谱广场</a><a href="app.html">应用下载</a><a href="help.html">帮助中心</a>
</div>
<div>
<h4>文化内容</h4>
<a href="culture.html">家族文化</a><a href="surname.html">姓氏百科</a><a href="article-detail.html">家谱知识</a><a href="notice-detail.html">平台公告</a>
</div>
<div>
<h4>服务支持</h4>
<a href="help.html">帮助中心</a>
<a href="submit-ticket.html">提交问题</a>
<a href="about.html">关于平台</a>
</div>
</div>
<div class="footer-legal">
<div>© 2026 代代相传. All rights reserved.</div>
<a href="https://beian.miit.gov.cn" target="_blank" rel="noopener">ICP备案:蜀ICP备2024044594号-1</a>
</div>
</div>
</footer>
<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/page-effects.js"></script>
</body>
</html>
-106
View File
@@ -1,106 +0,0 @@
<!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/css/promo-video.css" />
</head>
<body class="page-promo-video">
<header class="site-header">
<div class="container nav">
<a class="brand magnetic" href="index.html"
><img class="brand-logo" src="public/images/logo.png" alt="我们的家谱,代代相传" /></a
>
<nav class="nav-links">
<a href="index.html">首页</a><a href="genealogy.html">数字家谱</a
><a href="plaza.html">家谱广场</a><a href="culture.html">家族文化</a
><a href="surname.html">姓氏百科</a><a href="app.html">应用下载</a
><a href="help.html">帮助中心</a><a href="about.html">关于我们</a>
</nav>
<div class="nav-actions">
<a href="login.html">登录</a><a href="register.html">注册</a
><a class="btn primary magnetic" href="create-genealogy.html"
>创建家谱</a
>
</div>
</div>
</header>
<main>
<section class="inner-hero promo-hero">
<div class="container">
<div class="hero-copy">
<div class="eyebrow">宣传视频</div>
<h1>用宣传视频讲述家族文化</h1>
<p class="lead">
宣传视频用于前台展示家族活动、祠堂风貌、修谱故事和公开纪念内容,让访问者更快进入家族叙事。
</p>
<div class="promo-tags">
<span>家族介绍</span><span>活动纪念</span><span>修谱故事</span>
</div>
</div>
<div class="hero-card video-preview tilt-card">
<div class="play-button"></div>
<h3>四川成都陈氏族宣传片</h3>
<p>祠堂、谱文、人物与家风的公开展示。</p>
</div>
</div>
</section>
<section class="section alt">
<div class="container">
<div class="section-head">
<h2>视频专题</h2>
<p>把适合公开传播的视频整理成栏目,增强家谱主页的展示力。</p>
</div>
<div class="grid-3">
<div class="card soft video-card tilt-card">
<h3>家族介绍</h3>
<p>概述姓氏源流、家族分布和家风传承。</p>
</div>
<div class="card soft video-card tilt-card">
<h3>活动纪念</h3>
<p>展示祭祖、聚会、修谱仪式等重要时刻。</p>
</div>
<div class="card soft video-card tilt-card">
<h3>人物故事</h3>
<p>以影像记录家族人物、贡献与纪念内容。</p>
</div>
</div>
</div>
</section>
</main>
<footer class="footer">
<div class="container">
<div class="footer-grid">
<div>
<a class="brand" href="index.html"
><img class="brand-logo" src="public/images/logo-light.png" alt="我们的家谱,代代相传" /></a
>
<p>一个面向家庭和宗族的数字家谱与家族文化门户。</p>
</div>
<div>
<h4>产品入口</h4>
<a href="genealogy.html">数字家谱</a><a href="plaza.html">家谱广场</a><a href="app.html">应用下载</a><a href="help.html">帮助中心</a>
</div>
<div>
<h4>文化内容</h4>
<a href="culture.html">家族文化</a><a href="surname.html">姓氏百科</a><a href="article-detail.html">家谱知识</a><a href="notice-detail.html">平台公告</a>
</div>
<div>
<h4>服务支持</h4>
<a href="help.html">帮助中心</a>
<a href="submit-ticket.html">提交问题</a>
<a href="about.html">关于平台</a>
</div>
</div>
<div class="footer-legal">
<div>© 2026 代代相传. All rights reserved.</div>
<a href="https://beian.miit.gov.cn" target="_blank" rel="noopener">ICP备案:蜀ICP备2024044594号-1</a>
</div>
</div>
</footer>
<script src="config.js"></script>
<script src="public/js/page-effects.js"></script>
</body>
</html>
-1
View File
@@ -1 +0,0 @@
.about-hero .container{min-height:440px;padding-top:74px;padding-bottom:74px}.hero-copy{position:relative;padding-left:28px}.hero-copy:before{content:"";position:absolute;left:0;top:58px;width:4px;height:132px;border-radius:999px;background:linear-gradient(180deg,var(--red),var(--gold))}.about-tags{display:flex;gap:12px;margin-top:28px;flex-wrap:wrap}.about-tags span{padding:10px 14px;border:1px solid rgba(224,211,189,.78);border-radius:999px;color:#6d766f;background:#fffdf8bd;box-shadow:0 14px 32px #4839260f;font-weight:800;transition:transform .22s ease,color .22s ease,background .22s ease}.about-tags span:hover{color:#fff;background:var(--green);transform:translateY(-3px)}.about-seal{position:relative;min-height:260px;overflow:hidden;display:grid;place-items:center;text-align:center;color:#fff;background:linear-gradient(155deg,var(--green-dark),var(--green))}.about-seal:before{content:"";position:absolute;inset:0;background:linear-gradient(rgba(255,255,255,.08) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.08) 1px,transparent 1px);background-size:34px 34px;opacity:.34}.seal-orb{position:absolute;right:76px;top:40px;width:110px;height:110px;border-radius:50%;background:#ffffff29;box-shadow:0 0 40px #ffffff1a;animation:sealPulse 4s ease-in-out infinite}.about-seal span{position:relative;z-index:2;width:96px;height:96px;margin-bottom:20px;border-radius:50%;display:grid;place-items:center;color:var(--red);background:#fffffff0;font-family:SimSun,Songti SC,serif;font-size:48px;font-weight:800;transition:transform .24s ease,background .24s ease}.about-seal:hover span{transform:rotate(-8deg) scale(1.08)}.about-seal p{position:relative;z-index:2;margin:0;color:#ffffffd6;font-size:22px}.values-section{position:relative;overflow:hidden}.values-section:before{content:"";position:absolute;left:50%;top:58px;width:520px;height:180px;border-radius:50%;background:radial-gradient(circle,rgba(196,146,69,.09),transparent 68%);transform:translate(-50%)}.value-card{min-height:190px;position:relative;overflow:hidden}.value-card:after{content:"";position:absolute;left:-42%;top:0;width:36%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.54),transparent);transform:skew(-18deg);transition:left .56s ease}.value-card:hover:after{left:112%}.value-icon{width:48px;height:48px;margin-bottom:18px;border-radius:14px;display:grid;place-items:center;color:var(--red);background:#f7e4dc;font-family:SimSun,Songti SC,serif;font-size:22px;font-weight:900;transition:transform .26s ease,background .26s ease,color .26s ease}.value-card:hover .value-icon{color:#fff;background:var(--red);transform:rotate(-6deg) scale(1.08)}.tilt-card{transform:perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));transition:transform .18s ease,box-shadow .24s ease,border-color .24s ease}.tilt-card:hover{--lift: -6px}@keyframes sealPulse{0%,to{opacity:.55;transform:scale(.92)}50%{opacity:.9;transform:scale(1.08)}}@media(max-width:720px){.hero-copy{padding-left:0}.hero-copy:before{display:none}}
-1
View File
@@ -1 +0,0 @@
.app-hero .container{min-height:500px;padding-top:74px;padding-bottom:74px}.hero-copy{position:relative;padding-left:28px}.hero-copy:before{content:"";position:absolute;left:0;top:58px;width:4px;height:132px;border-radius:999px;background:linear-gradient(180deg,var(--red),var(--gold))}.hero-buttons{display:flex;gap:16px;flex-wrap:wrap;margin-top:28px}.app-stats{display:flex;gap:12px;margin-top:24px;flex-wrap:wrap}.app-stats span{padding:10px 14px;border:1px solid rgba(224,211,189,.78);border-radius:999px;color:#6d766f;background:#fffdf8bd;box-shadow:0 14px 32px #4839260f;font-weight:800;transition:transform .22s ease,color .22s ease,background .22s ease}.app-stats span:hover{color:#fff;background:var(--green);transform:translateY(-3px)}.app-shot-wrap{position:relative;min-height:390px;display:flex;align-items:center;justify-content:center;gap:30px;overflow:hidden;background:radial-gradient(circle at 18% 20%,rgba(200,59,50,.12),transparent 24%),radial-gradient(circle at 80% 24%,rgba(71,111,99,.16),transparent 30%),linear-gradient(135deg,#f7efe2,#edf4ef)}.app-shot-wrap:before{content:"";position:absolute;inset:22px;border:1px solid rgba(224,211,189,.62);border-radius:22px;pointer-events:none}.app-orbit{position:absolute;right:64px;top:44px;width:96px;height:96px;border-radius:50%;background:#c492452e;animation:appOrbit 4.2s ease-in-out infinite}.phone-shot{position:relative;z-index:2;width:185px;height:380px;object-fit:cover;object-position:top center;border:8px solid #252b28;border-radius:28px;box-shadow:0 26px 60px #211c1633;transition:transform .3s ease,box-shadow .3s ease}.phone-shot.first{animation:phoneFloatA 4s ease-in-out infinite}.phone-shot.second{transform:translateY(28px);animation:phoneFloatB 4s ease-in-out infinite}.app-shot-wrap:hover .phone-shot{box-shadow:0 34px 70px #211c1642}.app-feature-section{position:relative;overflow:hidden}.app-feature-section:before{content:"";position:absolute;left:50%;top:58px;width:520px;height:180px;border-radius:50%;background:radial-gradient(circle,rgba(196,146,69,.09),transparent 68%);transform:translate(-50%)}.app-feature-card{min-height:190px;position:relative;overflow:hidden}.app-feature-card:after{content:"";position:absolute;left:-42%;top:0;width:36%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.54),transparent);transform:skew(-18deg);transition:left .56s ease}.app-feature-card:hover:after{left:112%}.app-icon{width:48px;height:48px;margin-bottom:18px;border-radius:14px;display:grid;place-items:center;color:var(--red);background:#f7e4dc;font-family:SimSun,Songti SC,serif;font-size:22px;font-weight:900;transition:transform .26s ease,background .26s ease,color .26s ease}.app-feature-card:hover .app-icon{color:#fff;background:var(--red);transform:rotate(-6deg) scale(1.08)}.app-promotion-section{background:#fffdf8}.promotion-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.promotion-card{display:block;overflow:hidden;border:1px solid var(--line);border-radius:8px;background:#fffaf0;color:inherit;text-decoration:none;box-shadow:0 18px 42px #39302414;transition:transform .24s ease,border-color .24s ease,box-shadow .24s ease}.promotion-card:hover{border-color:#c492456b;box-shadow:0 24px 54px #3930241f;transform:translateY(-4px)}.promotion-card img{width:100%;aspect-ratio:16 / 9;object-fit:cover;display:block;background:#f3eadc}.promotion-card div{padding:18px}.promotion-card h3{margin-bottom:8px;color:var(--ink);font-size:22px}.promotion-card p{margin:0 0 12px;color:var(--muted);line-height:1.75}.promotion-card span{color:var(--red);font-weight:900}.tilt-card{transform:perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));transition:transform .18s ease,box-shadow .24s ease,border-color .24s ease}.tilt-card:hover{--lift: -6px}@keyframes phoneFloatA{0%,to{transform:translateY(0) rotate(-1deg)}50%{transform:translateY(-8px) rotate(1deg)}}@keyframes phoneFloatB{0%,to{transform:translateY(28px) rotate(1deg)}50%{transform:translateY(18px) rotate(-1deg)}}@keyframes appOrbit{0%,to{opacity:.5;transform:scale(.92)}50%{opacity:1;transform:scale(1.08)}}@media(max-width:720px){.hero-copy{padding-left:0}.hero-copy:before{display:none}.phone-shot.second{display:none}.promotion-list{grid-template-columns:1fr}}
-1
View File
@@ -1 +0,0 @@
.article-hero .container{min-height:440px;padding-top:74px;padding-bottom:74px}.hero-copy{position:relative;padding-left:28px}.hero-copy:before{content:"";position:absolute;left:0;top:58px;width:4px;height:132px;border-radius:999px;background:linear-gradient(180deg,var(--red),var(--gold))}.article-meta{display:flex;gap:12px;margin-top:28px;flex-wrap:wrap}.article-meta span{padding:10px 14px;border:1px solid rgba(224,211,189,.78);border-radius:999px;color:#6d766f;background:#fffdf8bd;font-weight:800}.article-cover-detail{position:relative;overflow:hidden;display:grid;place-items:center;text-align:center;color:#fff;background:radial-gradient(circle at 72% 24%,rgba(255,255,255,.35) 0 9%,transparent 10%),linear-gradient(135deg,#e7c89e,#b94135 48%,#143d57)}.article-cover-detail:after{content:"";position:absolute;left:-40%;top:0;width:34%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.3),transparent);transform:skew(-18deg);transition:left .58s ease}.article-cover-detail:hover:after{left:112%}.article-cover-detail span{width:86px;height:86px;border-radius:50%;display:grid;place-items:center;color:var(--red);background:#fffdf8f0;font-family:SimSun,Songti SC,serif;font-size:44px;font-weight:800}.article-cover-detail p{margin:18px 0 0;color:#ffffffe6;font-size:22px}.article-layout{display:grid;grid-template-columns:minmax(0,820px) 300px;gap:28px;align-items:start}.article-content,.article-side{border:1px solid var(--line);border-radius:18px;background:#fffdf8d1;box-shadow:0 20px 54px #39302414}.article-content{padding:42px}.article-content p{color:#5f665f;font-size:18px;line-height:2}.article-content h2{margin-top:34px;font-size:32px}.article-side{position:sticky;top:108px;padding:24px}.article-side a{display:block;margin-top:12px;padding:14px 16px;border:1px solid var(--line);border-radius:14px;color:#6f4a37;background:#fbf7ed;transition:transform .22s ease,color .22s ease,background .22s ease}.article-side a:hover{color:#fff;background:var(--green);transform:translate(5px)}.tilt-card{transform:perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));transition:transform .18s ease,box-shadow .24s ease,border-color .24s ease}.tilt-card:hover{--lift: -6px}@media(max-width:980px){.article-layout{grid-template-columns:1fr}.article-side{position:static}}@media(max-width:720px){.hero-copy{padding-left:0}.hero-copy:before{display:none}.article-content{padding:28px}}
-1
View File
@@ -1 +0,0 @@
.create-hero .container{min-height:440px;padding-top:74px;padding-bottom:74px}.hero-copy{position:relative;padding-left:28px}.hero-copy:before{content:"";position:absolute;left:0;top:58px;width:4px;height:132px;border-radius:999px;background:linear-gradient(180deg,var(--red),var(--gold))}.create-tags{display:flex;gap:12px;margin-top:28px;flex-wrap:wrap}.create-tags span{padding:10px 14px;border:1px solid rgba(224,211,189,.78);border-radius:999px;color:#6d766f;background:#fffdf8bd;box-shadow:0 14px 32px #4839260f;font-weight:800;transition:transform .22s ease,color .22s ease,background .22s ease}.create-tags span:hover{color:#fff;background:var(--green);transform:translateY(-3px)}.process-card{position:relative;overflow:hidden;display:grid;align-content:center}.process-card:before{content:"";position:absolute;inset:0;background:linear-gradient(rgba(196,146,69,.06) 1px,transparent 1px),linear-gradient(90deg,rgba(196,146,69,.06) 1px,transparent 1px);background-size:34px 34px;opacity:.72}.process-card h3,.process-card .step-list{position:relative;z-index:2}.process-orb{position:absolute;right:-70px;top:-80px;width:220px;height:220px;border-radius:50%;background:radial-gradient(circle,rgba(200,59,50,.13),transparent 62%);animation:createPulse 4s ease-in-out infinite}.step-list{display:grid;gap:16px;margin-top:18px}.step-list p{display:flex;gap:14px;align-items:center;margin:0;color:var(--muted);transition:transform .22s ease,color .22s ease}.step-list p:hover{color:var(--green-dark);transform:translate(6px)}.step-list b{width:38px;height:38px;border-radius:50%;display:grid;place-items:center;color:#fff;background:var(--green);flex:0 0 auto;box-shadow:0 12px 28px #476f632e;transition:transform .22s ease,background .22s ease}.step-list p:hover b{background:var(--red);transform:scale(1.08)}.create-form-section{position:relative;overflow:hidden}.create-form-section:before{content:"";position:absolute;left:50%;top:58px;width:520px;height:180px;border-radius:50%;background:radial-gradient(circle,rgba(196,146,69,.09),transparent 68%);transform:translate(-50%)}.create-form{max-width:720px;position:relative;overflow:hidden;padding:36px}.form-ornament{position:absolute;right:-82px;top:-88px;width:220px;height:220px;border-radius:50%;background:radial-gradient(circle,rgba(71,111,99,.12),transparent 66%)}.create-form h2,.create-form .form-note,.create-form .form-grid{position:relative;z-index:2}.form-note{margin-bottom:22px;color:var(--muted);line-height:1.8}.create-form .input,.create-form textarea{transition:border-color .22s ease,box-shadow .22s ease,background .22s ease,transform .22s ease}.create-form .field{display:grid;gap:8px;color:var(--ink);font-weight:800}.create-region-picker label{display:grid;gap:8px}.create-region-picker{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.create-form .input:focus,.create-form textarea:focus{outline:none;border-color:#c83b329e;background:#fffdf8;box-shadow:0 0 0 4px #c83b3214;transform:translateY(-2px)}.submit-btn{width:100%}.tilt-card{transform:perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));transition:transform .18s ease,box-shadow .24s ease,border-color .24s ease}.tilt-card:hover{--lift: -6px}@keyframes createPulse{0%,to{opacity:.5;transform:scale(.92)}50%{opacity:1;transform:scale(1.08)}}@media(max-width:720px){.hero-copy{padding-left:0}.hero-copy:before{display:none}.create-region-picker{grid-template-columns:1fr}}
-1
View File
@@ -1 +0,0 @@
.culture-hero .container{min-height:440px;padding-top:74px;padding-bottom:74px}.hero-copy{position:relative;padding-left:28px}.hero-copy:before{content:"";position:absolute;left:0;top:58px;width:4px;height:132px;border-radius:999px;background:linear-gradient(180deg,var(--red),var(--gold))}.culture-stats{display:flex;gap:12px;margin-top:28px;flex-wrap:wrap}.culture-stats span{padding:10px 14px;border:1px solid rgba(224,211,189,.78);border-radius:999px;color:#6d766f;background:#fffdf8bd;box-shadow:0 14px 32px #4839260f;font-weight:800;transition:transform .22s ease,color .22s ease,background .22s ease}.culture-stats span:hover{color:#fff;background:var(--green);transform:translateY(-3px)}.culture-quote{position:relative;min-height:260px;overflow:hidden;display:flex;flex-direction:column;justify-content:center;color:#fff;background:linear-gradient(180deg,#213f382e,#213f38db),linear-gradient(135deg,#476f63,#c49245 50%,#c83b32)}.culture-quote:before{content:"";position:absolute;inset:0;background:linear-gradient(rgba(255,255,255,.08) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.08) 1px,transparent 1px);background-size:34px 34px;opacity:.34}.quote-moon{position:absolute;right:72px;top:34px;width:92px;height:92px;border-radius:50%;background:#ffffff52;box-shadow:0 0 34px #ffffff1f;animation:moonFloat 4s ease-in-out infinite}.culture-quote span{position:relative;z-index:2;width:64px;height:64px;margin-bottom:24px;border-radius:50%;display:grid;place-items:center;color:var(--red);background:#fffffff0;font-family:SimSun,Songti SC,serif;font-size:30px;font-weight:800;transition:transform .24s ease,background .24s ease}.culture-quote:hover span{transform:rotate(-8deg) scale(1.08)}.culture-quote p{position:relative;z-index:2;margin:0;color:#ffffffdb;font-size:22px;line-height:1.7}.article-section{position:relative;overflow:hidden}.article-section:before{content:"";position:absolute;left:50%;top:58px;width:520px;height:180px;border-radius:50%;background:radial-gradient(circle,rgba(196,146,69,.09),transparent 68%);transform:translate(-50%)}.article-card{position:relative;overflow:hidden;border-radius:18px;background:#fff;border:1px solid var(--line);box-shadow:0 18px 48px #39302412;transition:transform .24s ease,box-shadow .24s ease,border-color .24s ease}.article-card:hover{border-color:#c492456b;box-shadow:0 24px 60px #3930241c}.article-cover{position:relative;height:190px;overflow:hidden;background:radial-gradient(circle at 74% 28%,rgba(255,255,255,.7) 0 8%,transparent 9%),linear-gradient(135deg,#e7c89e,#b94135 48%,#143d57)}.article-cover:after{content:"";position:absolute;left:-42%;top:0;width:36%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.34),transparent);transform:skew(-18deg);transition:left .58s ease}.article-card:hover .article-cover:after{left:112%}.article-cover span{position:absolute;left:22px;bottom:20px;padding:7px 12px;border-radius:999px;color:var(--green-dark);background:#fffdf8db;font-weight:800;font-size:13px}.article-card:nth-child(2) .article-cover{background:linear-gradient(135deg,#dfd1b5,#6b7f70 48%,#26302c)}.article-card:nth-child(3) .article-cover{background:linear-gradient(135deg,#f0d8ac,#c49245 45%,#7d342d)}.article-body{padding:24px}.article-body h3{transition:color .22s ease}.article-card:hover .article-body h3{color:var(--red)}.article-body p{color:var(--muted);line-height:1.75}.article-body span{color:#9a8f82;font-size:14px}.tilt-card{transform:perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));transition:transform .18s ease,box-shadow .24s ease,border-color .24s ease}.tilt-card:hover{--lift: -6px}@keyframes moonFloat{0%,to{transform:translateY(0) scale(1);opacity:.72}50%{transform:translateY(-8px) scale(1.04);opacity:.92}}@media(max-width:720px){.hero-copy{padding-left:0}.hero-copy:before{display:none}}
-1
View File
@@ -1 +0,0 @@
.download-hero .container{min-height:440px;padding-top:74px;padding-bottom:74px}.hero-copy{position:relative;padding-left:28px}.hero-copy:before{content:"";position:absolute;left:0;top:58px;width:4px;height:132px;border-radius:999px;background:linear-gradient(180deg,var(--red),var(--gold))}.detail-actions{display:flex;gap:14px;margin-top:30px;flex-wrap:wrap}.qr-card{display:grid;place-items:center;text-align:center}.qr-box{width:170px;height:170px;padding:16px;border-radius:24px;background:linear-gradient(90deg,var(--green) 12px,transparent 12px) 0 0 / 32px 32px,linear-gradient(var(--green) 12px,transparent 12px) 0 0 / 32px 32px,#fffdf8;border:1px solid var(--line);display:grid;place-items:center;box-shadow:inset 0 0 0 12px #fffdf8}.qr-box span{width:62px;height:62px;border-radius:50%;display:grid;place-items:center;color:#fff;background:var(--red);font-weight:900}.qr-card p,.download-card p{color:var(--muted);line-height:1.8}.download-card{transition:transform .24s ease,border-color .24s ease,box-shadow .24s ease}.download-card:hover{border-color:#c492456b}.tilt-card{transform:perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));transition:transform .18s ease,box-shadow .24s ease,border-color .24s ease}.tilt-card:hover{--lift: -6px}@media(max-width:720px){.hero-copy{padding-left:0}.hero-copy:before{display:none}}
-1
View File
@@ -1 +0,0 @@
.page-family-detail [data-family-detail].is-loading{opacity:.82}.detail-hero .container{min-height:440px;padding-top:74px;padding-bottom:74px}.hero-copy{position:relative;padding-left:28px}.hero-copy:before{content:"";position:absolute;left:0;top:58px;width:4px;height:132px;border-radius:999px;background:linear-gradient(180deg,var(--red),var(--gold))}.detail-actions{display:flex;gap:14px;margin-top:30px;flex-wrap:wrap}.family-summary{position:relative;overflow:hidden;display:grid;align-content:center;gap:24px;color:#fff;background:linear-gradient(180deg,#213f382e,#213f38e0),linear-gradient(135deg,#476f63,#c49245 52%,#8f4634)}.family-summary:before{content:"";position:absolute;inset:0;background:linear-gradient(rgba(255,255,255,.08) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.08) 1px,transparent 1px);background-size:34px 34px;opacity:.38}.family-summary>*{position:relative;z-index:2}.summary-badge{width:fit-content;padding:8px 14px;border-radius:999px;color:var(--green-dark);background:#fffdf8e0;font-weight:800}.summary-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.summary-grid span{min-height:84px;padding:16px;border-radius:16px;display:grid;place-items:center;background:#ffffff21;border:1px solid rgba(255,255,255,.18)}.summary-grid b{display:block;font-size:30px}.detail-layout{display:grid;grid-template-columns:330px 1fr;gap:26px;align-items:start}.detail-panel,.content-card,.mini-card{border:1px solid var(--line);border-radius:18px;background:#fffdf8c7;box-shadow:0 20px 54px #39302414}.detail-panel{padding:26px;position:sticky;top:108px}.detail-panel p,.content-card p,.mini-card p{color:var(--muted);line-height:1.8}.detail-main{display:grid;gap:24px}.content-card{padding:30px}.mini-card{min-height:170px;padding:24px;transition:transform .24s ease,border-color .24s ease,box-shadow .24s ease}.mini-card:hover{border-color:#c492456b;box-shadow:0 24px 60px #3930241c}.tilt-card{transform:perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));transition:transform .18s ease,box-shadow .24s ease,border-color .24s ease}.tilt-card:hover{--lift: -6px}@media(max-width:900px){.detail-layout{grid-template-columns:1fr}.detail-panel{position:static}.summary-grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:720px){.hero-copy{padding-left:0}.hero-copy:before{display:none}}
-1
View File
@@ -1 +0,0 @@
.recover-card{position:relative;overflow:hidden}.recover-card:before{content:"";position:absolute;right:-80px;top:-90px;width:220px;height:220px;border-radius:50%;background:radial-gradient(circle,rgba(200,59,50,.13),transparent 64%)}.recover-card>*{position:relative;z-index:2}@media(max-width:620px){.code-row{grid-template-columns:1fr}}
-1
View File
@@ -1 +0,0 @@
.page-genealogy{background:#fbf7ed}.genealogy-hero .container{min-height:470px;padding-top:76px;padding-bottom:76px}.hero-copy{position:relative;padding-left:28px}.hero-copy:before{content:"";position:absolute;left:0;top:58px;width:4px;height:136px;border-radius:999px;background:linear-gradient(180deg,var(--red),var(--gold))}.genealogy-stats{display:flex;gap:12px;margin-top:28px;padding:8px;border:1px solid rgba(224,211,189,.78);border-radius:18px;background:#fffdf8bd;box-shadow:0 16px 36px #48392612}.genealogy-stats div{min-width:118px;padding:12px 16px;border-radius:12px}.genealogy-stats div+div{border-left:1px solid rgba(218,201,174,.78)}.genealogy-stats strong{display:block;color:var(--green);font-size:24px;line-height:1.1}.genealogy-stats span{color:#6d766f;font-size:14px}.tree-preview{position:relative;min-height:300px;display:grid;gap:14px;align-content:center;overflow:hidden;background:linear-gradient(90deg,#fffdf8f2,#fffdf8c7),radial-gradient(circle at 78% 22%,rgba(196,146,69,.2),transparent 28%);transform-style:preserve-3d}.tree-glow{position:absolute;right:-70px;top:-80px;width:210px;height:210px;border-radius:50%;background:radial-gradient(circle,rgba(200,59,50,.13),transparent 62%);animation:treePulse 4.2s ease-in-out infinite}.tree-row{position:relative;z-index:2;display:flex;justify-content:center;gap:16px;flex-wrap:wrap}.tree-row span{min-width:110px;padding:14px 18px;border:1px solid #dac9ae;border-radius:14px;text-align:center;color:var(--green-dark);background:#fffaf1e6;box-shadow:0 12px 28px #4535230f;font-weight:800;transition:transform .24s ease,color .24s ease,background .24s ease,box-shadow .24s ease}.tree-preview:hover .tree-row span{animation:nodeFloat 1.9s ease-in-out infinite}.tree-row span:hover{color:#fff;background:var(--green);box-shadow:0 16px 32px #476f6338}.tree-row.branch span:nth-child(2){animation-delay:.08s}.tree-row.branch span:nth-child(3){animation-delay:.16s}.tree-row.generation span:nth-child(2){animation-delay:.08s}.tree-row.generation span:nth-child(3){animation-delay:.16s}.tree-row.generation span:nth-child(4){animation-delay:.24s}.tree-line{position:relative;z-index:1;width:min(360px,70%);height:1px;margin:0 auto;background:linear-gradient(90deg,transparent,rgba(196,146,69,.5),transparent)}.tree-line.short{width:min(500px,86%)}.capability-section{position:relative;overflow:hidden}.capability-section:before{content:"";position:absolute;left:50%;top:58px;width:520px;height:180px;border-radius:50%;background:radial-gradient(circle,rgba(196,146,69,.09),transparent 68%);transform:translate(-50%);pointer-events:none}.feature-card{min-height:210px;position:relative;overflow:hidden}.feature-card:after{content:"";position:absolute;left:-40%;top:0;width:36%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.48),transparent);transform:skew(-18deg);transition:left .56s ease}.feature-card:hover:after{left:110%}.icon-word{width:48px;height:48px;margin-bottom:18px;border-radius:14px;display:grid;place-items:center;color:var(--red);background:#f7e4dc;font-size:22px;font-weight:900;transition:transform .26s ease,background .26s ease,color .26s ease}.feature-card:hover .icon-word{color:#fff;background:var(--red);transform:rotate(-6deg) scale(1.08)}.coedit-section{background:radial-gradient(circle at 18% 20%,rgba(200,59,50,.08),transparent 24%),#f7efe2}.coedit-card{min-height:260px;padding:34px}.coedit-card .btn{margin-top:12px}.process-card{min-height:260px;padding:34px}.step-list{display:grid;gap:16px;margin-top:20px}.step-list p{display:flex;gap:14px;align-items:center;margin:0;color:var(--muted)}.step-list b{width:38px;height:38px;border-radius:50%;display:grid;place-items:center;color:#fff;background:var(--green);flex:0 0 auto;box-shadow:0 12px 28px #476f632e}.tilt-card{transform:perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));transition:transform .18s ease,box-shadow .24s ease,border-color .24s ease}.tilt-card:hover{--lift: -6px}@keyframes nodeFloat{0%,to{transform:translateY(0)}50%{transform:translateY(-5px)}}@keyframes treePulse{0%,to{opacity:.5;transform:scale(.92)}50%{opacity:1;transform:scale(1.08)}}@media(max-width:720px){.hero-copy{padding-left:0}.hero-copy:before{display:none}.genealogy-stats{flex-direction:column}.genealogy-stats div+div{border-left:0;border-top:1px solid rgba(218,201,174,.78)}}
-1
View File
@@ -1 +0,0 @@
.help-hero .container{min-height:440px;padding-top:74px;padding-bottom:74px}.hero-copy{position:relative;padding-left:28px}.hero-copy:before{content:"";position:absolute;left:0;top:58px;width:4px;height:132px;border-radius:999px;background:linear-gradient(180deg,var(--red),var(--gold))}.help-tags{display:flex;gap:12px;margin-top:28px;flex-wrap:wrap}.help-tags span{padding:10px 14px;border:1px solid rgba(224,211,189,.78);border-radius:999px;color:#6d766f;background:#fffdf8bd;box-shadow:0 14px 32px #4839260f;font-weight:800;transition:transform .22s ease,color .22s ease,background .22s ease}.help-tags span:hover{color:#fff;background:var(--green);transform:translateY(-3px)}.help-card{position:relative;overflow:hidden;display:grid;align-content:center;gap:14px}.help-card:before{content:"";position:absolute;inset:0;background:linear-gradient(rgba(196,146,69,.06) 1px,transparent 1px),linear-gradient(90deg,rgba(196,146,69,.06) 1px,transparent 1px);background-size:34px 34px;opacity:.72}.help-card h3,.help-card p,.help-card .btn,.help-icon{position:relative;z-index:2}.help-orb{position:absolute;right:-70px;top:-80px;width:220px;height:220px;border-radius:50%;background:radial-gradient(circle,rgba(200,59,50,.13),transparent 62%);animation:helpPulse 4s ease-in-out infinite}.help-icon{width:52px;height:52px;border-radius:16px;display:grid;place-items:center;color:#fff;background:var(--green);font-size:26px;font-weight:900;box-shadow:0 14px 32px #476f6333;transition:transform .26s ease,background .26s ease}.help-card:hover .help-icon{background:var(--red);transform:rotate(-8deg) scale(1.08)}.faq-section{position:relative;overflow:hidden}.faq-section:before{content:"";position:absolute;left:50%;top:58px;width:520px;height:180px;border-radius:50%;background:radial-gradient(circle,rgba(196,146,69,.09),transparent 68%);transform:translate(-50%)}.faq-list{position:relative;max-width:880px;margin:0 auto;display:grid;gap:14px}.faq-list details{padding:22px 24px;border:1px solid var(--line);border-radius:18px;background:#fffdf8;box-shadow:0 12px 34px #3930240f;transition:transform .24s ease,box-shadow .24s ease,border-color .24s ease,background .24s ease}.faq-list.is-loading{min-height:220px}.faq-list details:hover,.faq-list details[open]{border-color:#c492456b;box-shadow:0 22px 54px #3930241a}.faq-list summary{position:relative;cursor:pointer;color:var(--ink);font-size:20px;font-weight:800;list-style:none;padding-left:34px}.faq-list summary::-webkit-details-marker{display:none}.faq-list summary:before{content:"";position:absolute;left:0;top:8px;width:0;height:0;border-top:7px solid transparent;border-bottom:7px solid transparent;border-left:10px solid var(--green-dark);transition:transform .24s ease,border-left-color .24s ease}.faq-list details[open] summary:before{border-left-color:var(--red);transform:rotate(90deg)}.faq-list p{margin:14px 0 0;padding-left:34px;color:var(--muted);line-height:1.8;animation:faqReveal .24s ease both}.tilt-card{transform:perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));transition:transform .18s ease,box-shadow .24s ease,border-color .24s ease}.tilt-card:hover{--lift: -6px}@keyframes helpPulse{0%,to{opacity:.5;transform:scale(.92)}50%{opacity:1;transform:scale(1.08)}}@keyframes faqReveal{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@media(max-width:720px){.hero-copy{padding-left:0}.hero-copy:before{display:none}}
-1
View File
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
.page-join-genealogy .auth-card{width:min(1080px,100%)}.join-page-grid{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(340px,.85fr);gap:28px;align-items:start}.join-search-panel,.join-apply-form{display:grid;gap:16px}.join-page-grid .field{display:grid;gap:10px}.join-page-grid .field>span{color:var(--ink);font-weight:900}.join-page-grid .field input,.join-page-grid .field textarea{width:100%;min-height:48px;padding:12px 14px;border:1px solid var(--line);border-radius:8px;background:#fffdf8;color:var(--ink);font:inherit;outline:none;transition:border-color .2s ease,box-shadow .2s ease}.join-page-grid .field textarea{min-height:128px;resize:vertical}.join-page-grid .field input:focus,.join-page-grid .field textarea:focus{border-color:#c83b3273;box-shadow:0 0 0 4px #c83b3214}.join-search-panel{padding-right:28px;border-right:1px solid var(--line)}.join-page-grid h2{margin:0;font-size:22px}.join-page-grid .module-list{max-height:420px;overflow:auto}@media(max-width:800px){.page-join-genealogy .auth-card{width:min(500px,100%)}.join-page-grid{grid-template-columns:1fr}.join-search-panel{padding-right:0;padding-bottom:24px;border-right:0;border-bottom:1px solid var(--line)}}.invite-box{padding:14px;border:1px dashed var(--gold);border-radius:22px;background:#fffaf1}.page-join-genealogy textarea.input{min-height:112px;resize:vertical}
-1
View File
@@ -1 +0,0 @@
.page-login .auth-card{width:min(440px,100%)}.login-mode-tabs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px;margin:18px 0;padding:4px;border:1px solid rgba(200,59,50,.16);border-radius:999px;background:#fffaf1e0;box-shadow:inset 0 1px #ffffffc7}.login-mode-tab{min-height:42px;border:0;border-radius:999px;background:transparent;color:var(--muted);font:inherit;font-weight:800;text-align:center;cursor:pointer;transition:color .22s ease,background .22s ease,box-shadow .22s ease}.login-mode-tab.is-active{background:#c83b321c;color:var(--red);box-shadow:inset 0 0 0 1px #c83b3229,0 8px 18px #8a402a14}.login-mode-panel[hidden]{display:none}.page-login .code-row{display:grid;grid-template-columns:minmax(0,1fr) 124px;gap:10px}.page-login .auth-links{margin-top:14px}@media(max-width:720px){.page-login .auth-layout{align-items:start}}@media(max-width:620px){.page-login .code-row{grid-template-columns:1fr}}
-1
View File
@@ -1 +0,0 @@
.notice-hero .container{min-height:420px;padding-top:74px;padding-bottom:74px}.hero-copy{position:relative;padding-left:28px}.hero-copy:before{content:"";position:absolute;left:0;top:58px;width:4px;height:132px;border-radius:999px;background:linear-gradient(180deg,var(--red),var(--gold))}.article-meta{display:flex;gap:12px;margin-top:28px;flex-wrap:wrap}.article-meta span{padding:10px 14px;border:1px solid rgba(224,211,189,.78);border-radius:999px;color:#6d766f;background:#fffdf8bd;font-weight:800}.notice-card{display:grid;place-items:center;text-align:center;color:#fff;background:linear-gradient(145deg,var(--green-dark),var(--green))}.notice-card span{width:88px;height:88px;border-radius:50%;display:grid;place-items:center;color:var(--red);background:#fffdf8f0;font-family:SimSun,Songti SC,serif;font-size:42px;font-weight:900}.notice-card p{margin:18px 0 0;color:#ffffffe0;font-size:22px}.notice-layout{display:grid;grid-template-columns:minmax(0,820px) 300px;gap:28px;align-items:start}.notice-content,.notice-side{border:1px solid var(--line);border-radius:18px;background:#fffdf8d1;box-shadow:0 20px 54px #39302414}.notice-content{padding:42px}.notice-content p{color:#5f665f;font-size:18px;line-height:2}.notice-side{padding:24px}.notice-side a{display:block;margin-top:12px;padding:14px 16px;border:1px solid var(--line);border-radius:14px;color:#6f4a37;background:#fbf7ed;transition:transform .22s ease,color .22s ease,background .22s ease}.notice-side a:hover{color:#fff;background:var(--green);transform:translate(5px)}.tilt-card{transform:perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));transition:transform .18s ease,box-shadow .24s ease,border-color .24s ease}.tilt-card:hover{--lift: -6px}@media(max-width:900px){.notice-layout{grid-template-columns:1fr}}@media(max-width:720px){.hero-copy{padding-left:0}.hero-copy:before{display:none}}
-1
View File
@@ -1 +0,0 @@
.plaza-hero .container{min-height:440px;padding-top:74px;padding-bottom:74px}.hero-copy{position:relative;padding-left:28px}.hero-copy:before{content:"";position:absolute;left:0;top:58px;width:4px;height:132px;border-radius:999px;background:linear-gradient(180deg,var(--red),var(--gold))}.plaza-stats{display:flex;gap:12px;margin-top:28px;flex-wrap:wrap}.plaza-stats span{padding:12px 16px;border:1px solid rgba(224,211,189,.78);border-radius:16px;color:#6d766f;background:#fffdf8bd;box-shadow:0 14px 32px #4839260f}.plaza-stats b{margin-right:6px;color:var(--green);font-size:22px}.search-card{position:relative;display:grid;gap:20px;align-content:center;overflow:hidden}.search-card h3{position:relative;z-index:2}.search-ornament{position:absolute;right:-70px;top:-84px;width:220px;height:220px;border-radius:50%;background:radial-gradient(circle,rgba(200,59,50,.13),transparent 62%);animation:plazaPulse 4s ease-in-out infinite}.search-toolbar{position:relative;z-index:2;padding:8px;border:1px solid rgba(224,211,189,.78);border-radius:999px;background:#fffaf1d1}.search-card .input{flex:1 1 280px;border:0;background:transparent}.search-card .tag-row{position:relative;z-index:2}.family-card.featured{min-height:300px;position:relative;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end;color:#fff;background:linear-gradient(180deg,#1c302d2e,#153733d6),linear-gradient(135deg,#476f63,#a95c3e);border-radius:18px;padding:28px;box-shadow:0 22px 58px #2a413b29}.family-card.featured:before{content:"";position:absolute;inset:0;background:linear-gradient(rgba(255,255,255,.08) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.08) 1px,transparent 1px);background-size:34px 34px;opacity:.45}.family-card.featured h3,.family-card.featured p,.family-card.featured .tag-row,.family-badge{position:relative;z-index:2}.family-card.featured p{color:#ffffffd1}.family-badge{width:fit-content;margin-bottom:auto;padding:7px 12px;border-radius:999px;color:var(--green-dark);background:#fffdf8db;font-weight:800;font-size:13px}.family-card-shine{position:absolute;left:-40%;top:0;width:34%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.28),transparent);transform:skew(-18deg);transition:left .6s ease}.family-card.featured:hover .family-card-shine{left:112%}.family-lite{min-height:300px;position:relative;overflow:hidden}.family-lite:after{content:"";position:absolute;right:-60px;bottom:-70px;width:170px;height:170px;border-radius:50%;background:radial-gradient(circle,rgba(196,146,69,.13),transparent 68%);transition:transform .28s ease,opacity .28s ease}.family-lite:hover:after{transform:scale(1.25);opacity:.8}.family-icon{width:52px;height:52px;margin-bottom:24px;border-radius:16px;display:grid;place-items:center;color:var(--red);background:#f7e4dc;font-family:SimSun,Songti SC,serif;font-size:26px;font-weight:800;transition:transform .26s ease,background .26s ease,color .26s ease}.family-lite:hover .family-icon{color:#fff;background:var(--red);transform:rotate(-6deg) scale(1.08)}.tag{transition:transform .22s ease,color .22s ease,background .22s ease}.tag:hover{color:#fff;background:var(--green);transform:translateY(-2px)}.tilt-card{transform:perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));transition:transform .18s ease,box-shadow .24s ease,border-color .24s ease}.tilt-card:hover{--lift: -6px}@keyframes plazaPulse{0%,to{opacity:.5;transform:scale(.92)}50%{opacity:1;transform:scale(1.08)}}@media(max-width:720px){.hero-copy{padding-left:0}.hero-copy:before{display:none}.search-toolbar{border-radius:18px}}
File diff suppressed because one or more lines are too long
-1
View File
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
.promo-hero .container{min-height:440px;padding-top:74px;padding-bottom:74px}.hero-copy{position:relative;padding-left:28px}.hero-copy:before{content:"";position:absolute;left:0;top:58px;width:4px;height:132px;border-radius:999px;background:linear-gradient(180deg,var(--red),var(--gold))}.promo-tags{display:flex;gap:12px;margin-top:28px;flex-wrap:wrap}.promo-tags span{padding:10px 14px;border:1px solid rgba(224,211,189,.78);border-radius:999px;color:#6d766f;background:#fffdf8bd;font-weight:800;transition:transform .22s ease,color .22s ease,background .22s ease}.promo-tags span:hover{color:#fff;background:var(--green);transform:translateY(-3px)}.album-preview{display:grid;grid-template-columns:1.2fr 1fr;grid-template-rows:repeat(2,130px);gap:14px;overflow:hidden}.album-photo{border-radius:18px;background:radial-gradient(circle at 72% 24%,rgba(255,255,255,.75) 0 8%,transparent 9%),linear-gradient(135deg,#e7c89e,#b94135 48%,#143d57);box-shadow:0 16px 36px #39302414;transition:transform .26s ease}.album-photo.large{grid-row:1 / 3;background:linear-gradient(180deg,#1c302d1a,#153733b8),url(../images/ancestral-hall.png) center/cover}.album-photo.warm{background:linear-gradient(135deg,#f0d8ac,#c49245 45%,#7d342d)}.album-photo.green{background:linear-gradient(135deg,#dfd1b5,#6b7f70 48%,#26302c)}.album-preview:hover .album-photo{transform:scale(1.025)}.album-card{min-height:180px;position:relative;overflow:hidden}.album-card:after{content:"";position:absolute;left:-42%;top:0;width:36%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.54),transparent);transform:skew(-18deg);transition:left .56s ease}.album-card:hover:after{left:112%}.tilt-card{transform:perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));transition:transform .18s ease,box-shadow .24s ease,border-color .24s ease}.tilt-card:hover{--lift: -6px}@media(max-width:720px){.hero-copy{padding-left:0}.hero-copy:before{display:none}.album-preview{grid-template-columns:1fr;grid-template-rows:repeat(4,120px)}.album-photo.large{grid-row:auto}}
-1
View File
@@ -1 +0,0 @@
.promo-hero .container{min-height:440px;padding-top:74px;padding-bottom:74px}.hero-copy{position:relative;padding-left:28px}.hero-copy:before{content:"";position:absolute;left:0;top:58px;width:4px;height:132px;border-radius:999px;background:linear-gradient(180deg,var(--red),var(--gold))}.promo-tags{display:flex;gap:12px;margin-top:28px;flex-wrap:wrap}.promo-tags span{padding:10px 14px;border:1px solid rgba(224,211,189,.78);border-radius:999px;color:#6d766f;background:#fffdf8bd;font-weight:800;transition:transform .22s ease,color .22s ease,background .22s ease}.promo-tags span:hover{color:#fff;background:var(--green);transform:translateY(-3px)}.video-preview{min-height:300px;position:relative;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end;color:#fff;background:linear-gradient(180deg,#1f3f371a,#192722db),url(../images/ancestral-hall.png) center/cover}.video-preview:before{content:"";position:absolute;inset:0;background:linear-gradient(rgba(255,255,255,.08) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.08) 1px,transparent 1px);background-size:34px 34px;opacity:.35}.video-preview h3,.video-preview p,.play-button{position:relative;z-index:2}.video-preview p{color:#fffc}.play-button{width:64px;height:64px;margin-bottom:46px;border-radius:50%;background:#fffffff0;box-shadow:0 14px 34px #0003;transition:transform .24s ease}.play-button:after{content:"";position:absolute;left:26px;top:19px;border-top:13px solid transparent;border-bottom:13px solid transparent;border-left:20px solid var(--red)}.video-preview:hover .play-button{transform:scale(1.08)}.video-card{min-height:180px;position:relative;overflow:hidden}.video-card:after{content:"";position:absolute;left:-42%;top:0;width:36%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.54),transparent);transform:skew(-18deg);transition:left .56s ease}.video-card:hover:after{left:112%}.tilt-card{transform:perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));transition:transform .18s ease,box-shadow .24s ease,border-color .24s ease}.tilt-card:hover{--lift: -6px}@media(max-width:720px){.hero-copy{padding-left:0}.hero-copy:before{display:none}}
-1
View File
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
.page-register .auth-links{justify-content:center}@media(max-width:720px){.page-register .auth-layout{align-items:start}}
-1
View File
@@ -1 +0,0 @@
.result-hero .container{min-height:420px;padding-top:74px;padding-bottom:74px}.hero-copy{position:relative;padding-left:28px}.hero-copy:before{content:"";position:absolute;left:0;top:58px;width:4px;height:132px;border-radius:999px;background:linear-gradient(180deg,var(--red),var(--gold))}.result-search{display:grid;gap:18px;align-content:center}.result-search .toolbar{padding:8px;border:1px solid rgba(224,211,189,.78);border-radius:999px;background:#fffaf1d1}.result-search .input{flex:1 1 260px;border:0;background:transparent}.result-list{display:grid;gap:18px;max-width:920px;margin:0 auto}.result-card{position:relative;overflow:hidden;padding:26px;border:1px solid var(--line);border-radius:18px;background:#fffdf8d1;box-shadow:0 18px 48px #39302412;transition:transform .24s ease,border-color .24s ease,box-shadow .24s ease}.result-card:after{content:"";position:absolute;right:-70px;bottom:-80px;width:180px;height:180px;border-radius:50%;background:radial-gradient(circle,rgba(196,146,69,.13),transparent 68%);transition:transform .28s ease}.result-card:hover{border-color:#c492456b;box-shadow:0 24px 60px #3930241c}.result-card:hover:after{transform:scale(1.2)}.result-card span{display:inline-flex;margin-bottom:12px;padding:7px 12px;border-radius:999px;color:var(--green-dark);background:#e8f0eb;font-weight:800;font-size:13px}.result-card p{margin:0;color:var(--muted);line-height:1.8}.tilt-card{transform:perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));transition:transform .18s ease,box-shadow .24s ease,border-color .24s ease}.tilt-card:hover{--lift: -6px}@media(max-width:720px){.hero-copy{padding-left:0}.hero-copy:before{display:none}.result-search .toolbar{border-radius:18px}}
-1
View File
@@ -1 +0,0 @@
.site-info-hero{padding:78px 0 64px;background:radial-gradient(circle at 82% 18%,rgba(196,146,69,.2),transparent 24%),linear-gradient(135deg,#fffaf0,#f3eadc 62%,#edf4ef)}.site-info-hero .container{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(220px,.65fr);align-items:center;gap:44px}.site-info-kicker{margin-bottom:14px;color:var(--red);font-size:13px;font-weight:900;letter-spacing:.12em;text-transform:uppercase}.site-info-hero h1{margin:0;font-size:clamp(36px,5vw,58px);line-height:1.15}.site-info-hero p{max-width:680px;margin:20px 0 0;color:var(--muted);font-size:17px;line-height:1.9}.site-info-mark{min-height:180px;display:grid;place-items:center;border:1px solid rgba(196,146,69,.36);border-radius:28px;color:var(--red);background:#fffdf8c2;box-shadow:var(--shadow);font-size:62px;font-weight:900}.site-info-section{padding:72px 0}.site-info-section.alt{background:#f7efe2a3}.site-info-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(240px,.36fr);gap:28px}.site-info-list,.site-info-panel,.site-info-status{padding:30px;border:1px solid var(--line);border-radius:22px;background:var(--white);box-shadow:0 16px 46px #45352314}.site-info-list{display:grid;gap:16px}.site-info-item{display:block;padding:20px;border:1px solid rgba(234,223,206,.9);border-radius:16px;background:#fffaf2;transition:transform .2s ease,border-color .2s ease}.site-info-item:hover{border-color:#c83b3266;transform:translateY(-2px)}.site-info-item small,.site-info-panel small{color:var(--red);font-weight:800}.site-info-item h2,.site-info-panel h2,.site-info-status h2{margin:10px 0;font-size:22px}.site-info-item p,.site-info-panel p,.site-info-status p{margin:0;color:var(--muted);line-height:1.8}.site-info-links{display:grid;gap:12px;margin-top:18px}.site-info-links a{color:#8f4b31;font-weight:800}.site-info-links a:hover{color:var(--red)}.site-info-notice{margin-bottom:22px;padding:18px 20px;border:1px solid rgba(196,146,69,.42);border-radius:14px;color:#775227;background:#fff6e2;line-height:1.75}.site-info-status{max-width:760px;margin:0 auto;text-align:center}.site-info-status .site-info-mark{width:96px;min-height:96px;margin:0 auto 22px;border-radius:50%;font-size:34px}.site-info-actions{display:flex;justify-content:center;flex-wrap:wrap;gap:12px;margin-top:26px}@media(max-width:760px){.site-info-hero .container,.site-info-layout{grid-template-columns:1fr}.site-info-hero,.site-info-section{padding:52px 0}.site-info-mark{min-height:120px}}
-1
View File
@@ -1 +0,0 @@
.ticket-hero .container{min-height:420px;padding-top:74px;padding-bottom:74px}.hero-copy{position:relative;padding-left:28px}.hero-copy:before{content:"";position:absolute;left:0;top:58px;width:4px;height:132px;border-radius:999px;background:linear-gradient(180deg,var(--red),var(--gold))}.ticket-tip{display:grid;place-items:center;text-align:center;background:linear-gradient(145deg,var(--green-dark),var(--green));color:#fff}.ticket-tip span{width:88px;height:88px;border-radius:50%;display:grid;place-items:center;color:var(--red);background:#fffdf8f0;font-size:28px;font-weight:900}.ticket-tip p{max-width:360px;margin:18px 0 0;color:#ffffffdb;line-height:1.8}.ticket-layout{display:grid;grid-template-columns:minmax(0,720px) 320px;gap:26px;align-items:start}.ticket-form{max-width:none}.ticket-form textarea{min-height:150px;padding-top:16px;border-radius:18px;resize:vertical}.ticket-side{padding:26px;border:1px solid var(--line);border-radius:18px;background:#fffdf8d1;box-shadow:0 20px 54px #39302414}.ticket-side p{color:var(--muted);line-height:1.8}.ticket-side a{display:inline-flex;margin-top:10px;color:var(--red);font-weight:800}.tilt-card{transform:perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));transition:transform .18s ease,box-shadow .24s ease,border-color .24s ease}.tilt-card:hover{--lift: -6px}@media(max-width:900px){.ticket-layout{grid-template-columns:1fr}}@media(max-width:720px){.hero-copy{padding-left:0}.hero-copy:before{display:none}}
-1
View File
@@ -1 +0,0 @@
.surname-detail-hero .container{min-height:440px;padding-top:74px;padding-bottom:74px}.hero-copy{position:relative;padding-left:28px}.hero-copy:before{content:"";position:absolute;left:0;top:58px;width:4px;height:132px;border-radius:999px;background:linear-gradient(180deg,var(--red),var(--gold))}.detail-actions{display:flex;gap:14px;margin-top:30px;flex-wrap:wrap}.surname-emblem{position:relative;overflow:hidden;display:grid;place-items:center;text-align:center;color:#fff;background:radial-gradient(circle at 72% 24%,rgba(255,255,255,.28) 0 10%,transparent 11%),linear-gradient(135deg,#476f63,#c49245 54%,#8f4634)}.surname-emblem span{width:112px;height:112px;border-radius:50%;display:grid;place-items:center;color:var(--red);background:#fffdf8f2;font-family:SimSun,Songti SC,serif;font-size:58px;font-weight:800;transition:transform .24s ease}.surname-emblem:hover span{transform:rotate(-8deg) scale(1.08)}.surname-emblem p{margin:18px 0 0;color:#ffffffe6;font-size:22px}.surname-detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px}.content-card,.related-panel{border:1px solid var(--line);border-radius:18px;background:#fffdf8d1;box-shadow:0 20px 54px #39302414}.content-card{padding:30px}.content-card:first-child{grid-column:1 / -1}.content-card p{color:var(--muted);font-size:17px;line-height:1.9}.generation-row{display:flex;flex-wrap:wrap;gap:10px}.generation-row span{width:54px;height:54px;border-radius:14px;display:grid;place-items:center;color:#7c4a33;background:#fbf7ed;border:1px solid var(--line);font-family:SimSun,Songti SC,serif;font-size:24px;font-weight:800;transition:transform .22s ease,color .22s ease,background .22s ease}.generation-row span:hover{color:#fff;background:var(--red);transform:translateY(-5px)}.related-panel{padding:26px}.related-panel a{display:block;margin-top:12px;padding:14px 16px;border:1px solid var(--line);border-radius:14px;color:#6f4a37;background:#fbf7ed;transition:transform .22s ease,color .22s ease,background .22s ease}.related-panel a:hover{color:#fff;background:var(--green);transform:translate(5px)}.tilt-card{transform:perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));transition:transform .18s ease,box-shadow .24s ease,border-color .24s ease}.tilt-card:hover{--lift: -6px}@media(max-width:860px){.surname-detail-grid{grid-template-columns:1fr}.content-card:first-child{grid-column:auto}}@media(max-width:720px){.hero-copy{padding-left:0}.hero-copy:before{display:none}}
-1
View File
@@ -1 +0,0 @@
.surname-hero .container{min-height:440px;padding-top:74px;padding-bottom:74px}.hero-copy{position:relative;padding-left:28px}.hero-copy:before{content:"";position:absolute;left:0;top:58px;width:4px;height:132px;border-radius:999px;background:linear-gradient(180deg,var(--red),var(--gold))}.surname-stats{display:flex;gap:12px;margin-top:28px;flex-wrap:wrap}.surname-stats span{padding:11px 14px;border:1px solid rgba(224,211,189,.78);border-radius:999px;color:#6d766f;background:#fffdf8bd;box-shadow:0 14px 32px #4839260f}.surname-stats b{margin-right:6px;color:var(--green)}.surname-search-card{position:relative;overflow:hidden;display:grid;gap:18px;align-content:center}.search-ornament{position:absolute;right:-72px;top:-84px;width:220px;height:220px;border-radius:50%;background:radial-gradient(circle,rgba(200,59,50,.13),transparent 62%);animation:surnamePulse 4s ease-in-out infinite}.surname-search-card h3,.search-toolbar,.hot-query{position:relative;z-index:2}.search-toolbar{padding:8px;border:1px solid rgba(224,211,189,.78);border-radius:999px;background:#fffaf1d1}.search-toolbar .input{flex:1 1 280px;border:0;background:transparent}.hot-query{display:flex;gap:10px;flex-wrap:wrap}.hot-query span{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;color:#7c4a33;background:#fbf7ed;border:1px solid var(--line);font-family:SimSun,Songti SC,serif;font-weight:800;transition:transform .22s ease,color .22s ease,background .22s ease}.hot-query span:hover{color:#fff;background:var(--red);transform:translateY(-4px)}.surname-list-section{position:relative;overflow:hidden}.surname-list-section:before{content:"";position:absolute;left:50%;top:58px;width:520px;height:180px;border-radius:50%;background:radial-gradient(circle,rgba(196,146,69,.09),transparent 68%);transform:translate(-50%)}.surname-grid{position:relative;display:grid;grid-template-columns:repeat(8,1fr);gap:12px;padding:24px;border:1px solid rgba(224,211,189,.8);border-radius:24px;background:#fffdf8b8;box-shadow:0 22px 60px #39302414}.surname-grid a{height:64px;border-radius:14px;display:grid;place-items:center;color:#7c4a33;background:#fbf7ed;border:1px solid var(--line);font-family:SimSun,Songti SC,serif;font-size:24px;font-weight:800;transition:transform .24s ease,color .24s ease,background .24s ease,border-color .24s ease,box-shadow .24s ease;will-change:transform}.surname-grid a:hover{color:#fff;background:var(--red);border-color:#c83b32b8;box-shadow:0 16px 34px #c83b322e;transform:translateY(-6px) scale(1.03)}.surname-grid:hover a{animation:surnameFloat 1.9s ease-in-out infinite}.surname-grid:hover a:nth-child(2n){animation-delay:.08s}.surname-grid:hover a:nth-child(3n){animation-delay:.14s}.surname-grid:hover a:nth-child(4n){animation-delay:.2s}.tilt-card{transform:perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));transition:transform .18s ease,box-shadow .24s ease,border-color .24s ease}.tilt-card:hover{--lift: -6px}@keyframes surnameFloat{0%,to{transform:translateY(0)}50%{transform:translateY(-4px)}}@keyframes surnamePulse{0%,to{opacity:.5;transform:scale(.92)}50%{opacity:1;transform:scale(1.08)}}@media(max-width:720px){.hero-copy{padding-left:0}.hero-copy:before{display:none}.search-toolbar{border-radius:18px}.surname-grid{grid-template-columns:repeat(4,1fr);padding:14px}}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Some files were not shown because too many files have changed in this diff Show More