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
@@ -0,0 +1,34 @@
const store = require('../../utils/store.js');
Component({
options: { addGlobalClass: true },
data: {
pets: [],
currentId: 0,
},
lifetimes: {
attached() {
this.refresh();
this._unsub = store.subscribe(() => this.refresh());
},
detached() {
if (this._unsub) this._unsub();
},
},
methods: {
refresh() {
this.setData({
pets: store.getPets(),
currentId: store.currentPetId() || 0,
});
},
onPick(e) {
const id = e.currentTarget.dataset.id;
store.switchPet(id);
this.triggerEvent('change', { id });
},
onAdd() {
this.triggerEvent('add');
},
},
});
@@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}
@@ -0,0 +1,10 @@
<scroll-view class="pet-switch" scroll-x="true" enhanced="{{true}}" show-scrollbar="{{false}}">
<view wx:for="{{pets}}" wx:key="id"
class="pet-chip {{item.id === currentId ? 'active' : ''}}"
data-id="{{item.id}}" bindtap="onPick">
<view class="mini-avatar">{{item.emoji}}</view>{{item.name}}
</view>
<view class="pet-chip" bindtap="onAdd">
<view class="mini-avatar"></view>添加
</view>
</scroll-view>
@@ -0,0 +1,5 @@
.pet-switch{
display:block;white-space:nowrap;width:100%;
}
.pet-switch .pet-chip{margin-right:20rpx}
.pet-switch .pet-chip:last-child{margin-right:0}