| event_payload |
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"ca4022d7692cfbd6b667348aae3bc4697fe523ca","after":"eccbba06b493fe3de7a10ea2522cd8ca9fd09bc9","compare_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/compare/ca4022d7692cfbd6b667348aae3bc4697fe523ca...eccbba06b493fe3de7a10ea2522cd8ca9fd09bc9","commits":[{"id":"eccbba06b493fe3de7a10ea2522cd8ca9fd09bc9","message":"feat(fission): 裂变屏补开团、代客参团、成员详情与转介绍绑定 / 手动发奖入口\n\n后端 /group-buys 与 /referrals 的写接口早已就绪并有并发防护,但裂变屏只调了\n列表、结算、退回三个接口,开团、参团、绑定邀请关系、手动发奖都没有界面入口。\n本次只动前端,不改后端与 api.js(五个方法原本就在)。\n\n- 发起拼团:选在售套餐、成团人数、团价、团名、奖励方式、招募有效期、可选团长;\n 校验口径同后端 createGroupBuySchema,非法值在页面拦下不发请求\n- 代客参团:招募中的团可替到店会员占名额,已在团内的会员不出现在选项里;\n 已过截止时间的团不再放行参团(后端目前不校验截止时间,见下)\n- 成员详情:展开时取 /group-buys/:id 的最新成员、团长与获奖标记、各时间点\n- 绑定邀请关系:邀请人 / 被邀人下拉,已选邀请人与已绑定过的会员不可选作被邀人\n- 手动发放转介绍奖励:列出被邀人的已核销订单作为首单凭据,没有则说明原因并禁用\n- 权限同后端 requireRole:店员只见代客参团与绑定,不见开团 / 结算 / 退回 / 发奖\n- 会员、套餐下拉在首次打开表单时才加载;加载失败明示,不显示成「暂无」\n- 写操作防重复提交;成功与失败后都重新拉列表;结果提示固定在视口内\n- 离线样例模式表单可打开,提交只提示、不发请求\n\n验证(一次性 PG + 本分支自起的后端与静态服,桌面 + 手机两个浏览器项目):\n- 前端 npm test / lint / build 通过\n- e2e 新增 4 条深度流程:开团到结算、绑定与无首单不可发奖、凭已核销订单手动发奖、\n 店员入口可见性\n- 基线 a244264 上全量 150 条:147 通过、1 条按设计跳过(种子里可手动发奖的那一对\n 同库只能发一次,第二个浏览器项目跳过)、2 条失败为 07-governance 自助注册用例缺\n ENABLE_SELF_REGISTRATION 开关,主线随后在 e4707f5 的 Playwright 配置里补上\n- rebase 到 ca4022d 后重跑深度流程 + 裂变冒烟 + 注册用例共 24 条:23 通过、\n 1 条按设计跳过;未在 ca4022d 上重跑全量\n\n未做(已另行登记):奖励券码无接口可查、后端不校验拼团截止时间也不自动过期、\n储值赠金团在获奖人无钱包时卡在已满员、团价无上限。\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/eccbba06b493fe3de7a10ea2522cd8ca9fd09bc9","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T17:17:45-07:00","added":[],"removed":[],"modified":["e2e/tests/02-deep-flows.spec.ts","团购本地生活AI运营App/screen-governance.generated.json","团购本地生活AI运营App/screens-fission.jsx"]}],"total_commits":0,"head_commit":{"id":"eccbba06b493fe3de7a10ea2522cd8ca9fd09bc9","message":"feat(fission): 裂变屏补开团、代客参团、成员详情与转介绍绑定 / 手动发奖入口\n\n后端 /group-buys 与 /referrals 的写接口早已就绪并有并发防护,但裂变屏只调了\n列表、结算、退回三个接口,开团、参团、绑定邀请关系、手动发奖都没有界面入口。\n本次只动前端,不改后端与 api.js(五个方法原本就在)。\n\n- 发起拼团:选在售套餐、成团人数、团价、团名、奖励方式、招募有效期、可选团长;\n 校验口径同后端 createGroupBuySchema,非法值在页面拦下不发请求\n- 代客参团:招募中的团可替到店会员占名额,已在团内的会员不出现在选项里;\n 已过截止时间的团不再放行参团(后端目前不校验截止时间,见下)\n- 成员详情:展开时取 /group-buys/:id 的最新成员、团长与获奖标记、各时间点\n- 绑定邀请关系:邀请人 / 被邀人下拉,已选邀请人与已绑定过的会员不可选作被邀人\n- 手动发放转介绍奖励:列出被邀人的已核销订单作为首单凭据,没有则说明原因并禁用\n- 权限同后端 requireRole:店员只见代客参团与绑定,不见开团 / 结算 / 退回 / 发奖\n- 会员、套餐下拉在首次打开表单时才加载;加载失败明示,不显示成「暂无」\n- 写操作防重复提交;成功与失败后都重新拉列表;结果提示固定在视口内\n- 离线样例模式表单可打开,提交只提示、不发请求\n\n验证(一次性 PG + 本分支自起的后端与静态服,桌面 + 手机两个浏览器项目):\n- 前端 npm test / lint / build 通过\n- e2e 新增 4 条深度流程:开团到结算、绑定与无首单不可发奖、凭已核销订单手动发奖、\n 店员入口可见性\n- 基线 a244264 上全量 150 条:147 通过、1 条按设计跳过(种子里可手动发奖的那一对\n 同库只能发一次,第二个浏览器项目跳过)、2 条失败为 07-governance 自助注册用例缺\n ENABLE_SELF_REGISTRATION 开关,主线随后在 e4707f5 的 Playwright 配置里补上\n- rebase 到 ca4022d 后重跑深度流程 + 裂变冒烟 + 注册用例共 24 条:23 通过、\n 1 条按设计跳过;未在 ca4022d 上重跑全量\n\n未做(已另行登记):奖励券码无接口可查、后端不校验拼团截止时间也不自动过期、\n储值赠金团在获奖人无钱包时卡在已满员、团价无上限。\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools/commit/eccbba06b493fe3de7a10ea2522cd8ca9fd09bc9","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-10-03T17:17:45-07:00","added":[],"removed":[],"modified":["e2e/tests/02-deep-flows.spec.ts","团购本地生活AI运营App/screen-governance.generated.json","团购本地生活AI运营App/screens-fission.jsx"]},"repository":{"id":51,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"yggdrasil-local-life-tools","full_name":"luoanwu/yggdrasil-local-life-tools","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":89987,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools/languages","html_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/yggdrasil-local-life-tools","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/yggdrasil-local-life-tools.git","clone_url":"https://gitea.g-hi.com/luoanwu/yggdrasil-local-life-tools.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":2,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-02T16:02:07+08:00","updated_at":"2026-10-04T08:24:29+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}... |