feat(fe): 隐藏「我的帖子」入口 + 设置新增用户协议/隐私政策页

- mine 页「我的帖子」入口随社区下线隐藏(代码注释保留,恢复社区时解开)
- 新增 pages/agreement:一页两用(type=user/privacy),含完整协议/政策文案
- 设置页新增「用户协议」「隐私政策」两个入口

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Blizzard
2026-08-04 10:03:20 +08:00
parent b49bf0f0f9
commit d3a3e9ad1e
8 changed files with 186 additions and 1 deletions
+1
View File
@@ -17,6 +17,7 @@
"pages/mine/mine",
"pages/decorate/decorate",
"pages/settings/settings",
"pages/agreement/agreement",
"pages/user/user",
"pages/relations/relations"
],
+133
View File
@@ -0,0 +1,133 @@
// 用户协议 / 隐私协议。两份都放这一个页面,靠 query.type 切换。
// 文案是通用模板,正式上线前请让法务/运营按主体信息再核对一遍。
const UPDATED = '2026年8月4日';
const DOCS = {
user: {
title: '用户协议',
intro:
'欢迎使用「肉垫计划」(以下简称"本小程序")。本协议是您与本小程序之间就使用本服务所订立的协议。请您在使用前仔细阅读,一旦您开始使用本小程序,即视为您已阅读并同意本协议的全部内容。',
sections: [
{
h: '一、服务内容',
ps: [
'本小程序是一款面向养宠人群的养护助手,提供养护日历、健康记录、提醒、成长报告等功能,帮助你更好地照顾宠物。',
'本小程序提供的养护建议、健康提示等内容仅供参考,不构成任何专业兽医诊断或治疗方案。当宠物出现异常时,请及时咨询专业宠物医院。',
],
},
{
h: '二、账号与登录',
ps: [
'本小程序通过微信授权登录,你无需单独注册账号。你应对通过你的微信账号进行的操作负责。',
'你承诺提供真实、准确的宠物及个人信息。因信息不实导致的养护建议偏差,由你自行承担。',
],
},
{
h: '三、用户行为规范',
ps: [
'你在使用本小程序(包括社区发帖、评论等功能)时,不得发布任何违反法律法规、侵犯他人权益、含有暴力、色情、谣言、广告等违规内容。',
'本小程序有权对涉嫌违规的内容进行审核、屏蔽或删除,并可视情况限制相关功能的使用。',
],
},
{
h: '四、内容与知识产权',
ps: [
'你在本小程序中创建的宠物档案、记录、图片等内容归你所有;你授予本小程序在提供服务所必需的范围内使用这些内容的权利。',
'本小程序的界面、图标、文案、代码等由开发者享有知识产权,未经许可不得复制、传播或用于商业用途。',
],
},
{
h: '五、免责声明',
ps: [
'本小程序按"现状"提供服务。对于因不可抗力、网络故障、第三方服务中断等非本小程序原因导致的服务中断或数据丢失,本小程序在法律允许范围内不承担责任。',
'你理解并同意,养护建议仅为辅助参考,最终的养护及医疗决策应由你结合专业意见作出。',
],
},
{
h: '六、服务变更与协议修改',
ps: [
'本小程序可能根据运营需要调整、暂停或终止部分功能。我们会尽量提前告知。',
'本协议可能不时更新,更新后将在本页面公示。若你在协议更新后继续使用,即视为接受修改后的协议。',
],
},
{
h: '七、联系我们',
ps: ['如对本协议有任何疑问,可通过「设置 → 意见反馈」与我们联系。'],
},
],
},
privacy: {
title: '隐私政策',
intro:
'「肉垫计划」(以下简称"本小程序")非常重视你的个人信息与隐私保护。本政策说明我们如何收集、使用、存储和保护你的信息。请你仔细阅读并了解相关内容。',
sections: [
{
h: '一、我们收集的信息',
ps: [
'账号信息:经你授权,我们可能获取你的微信昵称、头像;在你使用需要手机号的功能(如身份卡)时,经你授权获取你的手机号。',
'宠物与养护数据:你主动填写的宠物档案(名字、品种、生日、体重等)、健康记录、提醒、账单及上传的图片。',
'设备与日志信息:为保障服务稳定与安全,我们可能收集必要的设备型号、系统版本、操作日志等信息。',
],
},
{
h: '二、我们如何使用信息',
ps: [
'用于向你提供养护日历、健康记录、提醒、成长报告等核心功能。',
'用于生成宠物身份卡、成长报告卡片等由你主动发起的功能。',
'用于内容安全审核、故障排查、服务优化与安全防护。',
],
},
{
h: '三、信息的存储',
ps: [
'你的信息存储于我们的服务器,存储期限为提供服务所必需的期间,法律法规另有规定的除外。',
'你上传的图片等文件存储于对象存储服务,仅用于向你及(在社区等公开功能中)你选择公开的对象展示。',
],
},
{
h: '四、信息的共享与披露',
ps: [
'我们不会向第三方出售你的个人信息。',
'为实现内容安全合规,你发布的文字与图片会调用微信官方内容安全接口进行检测;该过程由微信提供,遵循微信的相关规则。',
'在法律法规要求、或为保护本小程序及用户合法权益的必要情形下,我们可能依法披露相关信息。',
],
},
{
h: '五、信息安全',
ps: [
'我们采取合理的技术与管理措施保护你的信息安全,防止未经授权的访问、泄露或篡改。',
'但请理解,任何措施都无法保证百分之百的安全,请你妥善保管好自己的设备与账号。',
],
},
{
h: '六、你的权利',
ps: [
'你可以随时在小程序内查看、修改你的宠物档案与记录,也可以删除你创建的记录、帖子与评论。',
'如需注销账号或删除全部数据,可通过「设置 → 意见反馈」与我们联系,我们将在核实后依法处理。',
],
},
{
h: '七、未成年人保护',
ps: [
'本小程序主要面向成年人。若你是未成年人,请在监护人的陪同与同意下使用,并在监护人指导下提供个人信息。',
],
},
{
h: '八、本政策的更新',
ps: [
'本政策可能不时更新,更新后将在本页面公示。重大变更我们会以适当方式提醒你。',
'如对本政策有任何疑问,可通过「设置 → 意见反馈」与我们联系。',
],
},
],
},
};
Page({
data: { doc: null, updated: UPDATED },
onLoad(q) {
const doc = DOCS[q && q.type === 'privacy' ? 'privacy' : 'user'];
this.setData({ doc });
wx.setNavigationBarTitle && wx.setNavigationBarTitle({ title: doc.title });
},
});
+5
View File
@@ -0,0 +1,5 @@
{
"usingComponents": {
"nav-bar": "/components/nav-bar/nav-bar"
}
}
+17
View File
@@ -0,0 +1,17 @@
<nav-bar title="{{doc.title}}" show-back="{{true}}"></nav-bar>
<scroll-view class="page-scroll" scroll-y="{{true}}" enhanced="{{true}}" show-scrollbar="{{false}}">
<view class="page-body no-fab ag-body">
<view class="ag-title">{{doc.title}}</view>
<view class="ag-updated">最后更新:{{updated}}</view>
<view class="ag-intro">{{doc.intro}}</view>
<view wx:for="{{doc.sections}}" wx:key="h" class="ag-sec">
<view class="ag-h">{{item.h}}</view>
<view wx:for="{{item.ps}}" wx:for-item="p" wx:key="*this" class="ag-p">{{p}}</view>
</view>
<view class="ag-foot">感谢你对「肉垫计划」的信任 🐾</view>
</view>
</scroll-view>
+18
View File
@@ -0,0 +1,18 @@
.ag-body{padding:var(--sp-4) var(--pad-x) 60rpx}
.ag-title{font-size:var(--fs-2xl);font-weight:var(--fw-b);letter-spacing:-.6rpx}
.ag-updated{margin-top:var(--sp-2);color:var(--muted2);font-size:var(--fs-cap)}
.ag-intro{
margin-top:var(--sp-4);padding:var(--sp-4);border-radius:var(--r-md);
background:var(--primary-soft);color:var(--primary-ink);
font-size:var(--fs-sm);line-height:1.75;
}
.ag-sec{margin-top:var(--sp-5)}
.ag-h{font-size:var(--fs-lg);font-weight:var(--fw-b);color:var(--text);margin-bottom:var(--sp-2)}
.ag-p{
color:var(--text-2);font-size:var(--fs-md);line-height:1.8;
margin-top:var(--sp-2);text-align:justify;
}
.ag-foot{margin-top:var(--sp-6);text-align:center;color:var(--muted2);font-size:var(--fs-sm)}
+3 -1
View File
@@ -35,13 +35,15 @@
<view wx:if="{{!pets.length}}" class="empty">还没有毛孩子,先建一份档案</view>
</view>
<!-- 档案/计划/多宠都从首页和宠物卡进,这里留「我的帖子」+ 设置 -->
<!-- 档案/计划/多宠都从首页和宠物卡进,这里留「设置-->
<view class="profile-list">
<!-- 社区下线期间隐藏「我的帖子」入口(goMyPosts 代码保留,恢复社区时把这块解开即可)
<view class="profile-row" bindtap="goMyPosts">
<view class="pr-ic"><pt-icon name="community" size="{{34}}"></pt-icon></view>
<text class="pr-label">我的帖子</text><text class="pr-val">看审核状态</text>
<view class="pr-arrow"><pt-icon name="next" size="{{28}}"></pt-icon></view>
</view>
-->
<view class="profile-row" bindtap="goSettings">
<view class="pr-ic"><pt-icon name="settings" size="{{34}}"></pt-icon></view>
<text class="pr-label">设置</text><view class="pr-arrow"><pt-icon name="next" size="{{28}}"></pt-icon></view>
+4
View File
@@ -40,6 +40,10 @@ Page({
openSheet(e) {
this.setData({ sheetType: e.currentTarget.dataset.type, sheetShow: true });
},
// 用户协议 / 隐私政策
goAgreement(e) {
wx.navigateTo({ url: '/pages/agreement/agreement?type=' + e.currentTarget.dataset.type });
},
// 自己的关注/粉丝。之前只有帖子上的「+关注」按钮,关注完没有任何地方能看
goRelations(e) {
const uid = (this.data.user && this.data.user.id) || '';
+5
View File
@@ -13,6 +13,11 @@
<view class="profile-row" data-type="about" bindtap="openSheet"><view class="pr-ic"><pt-icon name="book" size="{{34}}"></pt-icon></view><text class="pr-label">关于我们</text><text class="pr-val">v0.2</text><view class="pr-arrow"><pt-icon name="next" size="{{28}}"></pt-icon></view></view>
</view>
<view class="profile-list">
<view class="profile-row" data-type="user" bindtap="goAgreement"><view class="pr-ic"><pt-icon name="doc" size="{{34}}"></pt-icon></view><text class="pr-label">用户协议</text><view class="pr-arrow"><pt-icon name="next" size="{{28}}"></pt-icon></view></view>
<view class="profile-row" data-type="privacy" bindtap="goAgreement"><view class="pr-ic"><pt-icon name="note" size="{{34}}"></pt-icon></view><text class="pr-label">隐私政策</text><view class="pr-arrow"><pt-icon name="next" size="{{28}}"></pt-icon></view></view>
</view>
</view>
</scroll-view>