feat(api): 添加帮助中心反馈系统和VIP服务功能

- 在ApiClient中新增submitFeedback、myFeedback、helpArticles、helpArticleDetail、
  siteArticles、promotions、vipPackages、createVipOrder、vipOrders等方法
- 添加帮助文章和站点资讯的参数验证逻辑
- 更新测试文件添加新的API方法测试用例
- 在HTML页面中添加反馈、帮助和VIP服务相关页面的脚本引用
- 更新加入家谱页面为完整的申请流程界面
- 修改资讯详情页面为站点资讯展示页面
- 更新AxiosRequestUtil中认证处理逻辑
- 添加世系树渲染的HTML生成函数用于页面复用
- 更新文档中的API契约说明和页面规划
This commit is contained in:
fizzleaf
2026-07-30 16:04:48 +08:00
parent fb1743aa2a
commit 309598bfa6
53 changed files with 6740 additions and 282 deletions
+33 -6
View File
@@ -7,7 +7,7 @@
<link rel="stylesheet" href="public/css/public.css" />
<link rel="stylesheet" href="public/css/join-genealogy.css" />
</head>
<body class="page-join-genealogy">
<body class="page-join-genealogy" data-join-apply-page>
<main class="auth-layout">
<a class="brand auth-page-brand" href="index.html"
><img class="brand-logo" src="public/images/logo.png" alt="我们的家谱,代代相传" /></a
@@ -18,11 +18,37 @@
>
<div class="eyebrow">Join Family</div>
<h1 id="join-title">加入家谱</h1>
<p class="lead">请从家谱广场或亲人分享的家谱详情进入申请流程,家谱编号由系统自动带入</p>
<div class="form-grid">
<a class="btn primary" href="plaza.html">前往家谱广场</a>
<a class="btn ghost" href="profile-families.html">返回我的家谱</a>
</div>
<p class="lead">搜索并选择要加入的家谱,再补充申请资料。家谱编号由系统自动处理</p>
<form class="form-grid" data-join-genealogy-search>
<label class="field">
<span>搜索家谱</span>
<input name="keyword" type="search" maxlength="50" placeholder="输入谱名或姓氏" />
</label>
<button class="btn ghost" type="submit">搜索</button>
</form>
<div class="module-list" data-join-genealogy-options></div>
<p class="form-note" data-join-selected-genealogy>尚未选择家谱</p>
<form class="form-grid" data-join-apply-form>
<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>
<p class="form-note" aria-live="polite" data-join-apply-status></p>
<button class="btn primary" type="submit" data-join-apply-submit>提交申请</button>
<a class="btn ghost" href="profile-join-family.html">查看我的申请</a>
</form>
</section>
</main>
<script src="config.js"></script>
@@ -30,5 +56,6 @@
<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>
</body>
</html>