init: 毛孩子计划 小程序 + Go 后端 + 内嵌后台

- pets-fe: 微信原生小程序(首页/计划/记录/报告/社区/引导),
  服务端驱动、无假数据;弹层改用 scroll-view,打开时隐藏自定义 tabBar
- pets-be: Gin + GORM(MySQL, sundynix_ 前缀) + MinIO,统一响应/分页,
  微信 code2session 登录,provider-neutral AI(DeepSeek),go:embed React 后台
- 修复:分段选择类型不匹配(字符串 vs 数字)导致选不中

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Blizzard
2026-07-03 15:33:31 +08:00
commit 609f7d06cf
180 changed files with 15259 additions and 0 deletions
+31
View File
@@ -0,0 +1,31 @@
const app = getApp();
Component({
options: { addGlobalClass: true },
properties: {
title: { type: String, value: '毛孩子计划' },
showBack: { type: Boolean, value: false }
},
data: {
statusBarHeight: 20,
navBarHeight: 44
},
lifetimes: {
attached() {
this.setData({
statusBarHeight: app.globalData.statusBarHeight,
navBarHeight: app.globalData.navBarHeight
});
}
},
methods: {
onBack() {
const pages = getCurrentPages();
if (pages.length > 1) {
wx.navigateBack();
} else {
wx.switchTab({ url: '/pages/home/home' });
}
}
}
});
+4
View File
@@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}
+8
View File
@@ -0,0 +1,8 @@
<view class="nav-wrap" style="padding-top:{{statusBarHeight}}px;height:{{statusBarHeight + navBarHeight}}px;">
<view class="nav-inner" style="height:{{navBarHeight}}px;">
<view wx:if="{{showBack}}" class="nav-back" bindtap="onBack"></view>
<view class="nav-title">{{title}}</view>
</view>
</view>
<!-- 占位,避免内容被固定导航栏遮挡 -->
<view style="height:{{statusBarHeight + navBarHeight}}px;"></view>
+19
View File
@@ -0,0 +1,19 @@
:host{display:block}
.nav-wrap{
position:fixed;top:0;left:0;right:0;z-index:100;
background:rgba(248,246,242,.82);
backdrop-filter:blur(28rpx);
-webkit-backdrop-filter:blur(28rpx);
}
.nav-inner{
position:relative;display:flex;align-items:center;justify-content:center;
}
.nav-title{
font-size:32rpx;font-weight:900;color:var(--text);
max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.nav-back{
position:absolute;left:20rpx;top:50%;transform:translateY(-50%);
width:64rpx;height:64rpx;display:flex;align-items:center;justify-content:center;
font-size:52rpx;line-height:1;color:var(--text);
}