8.7 KiB
8.7 KiB
2026-08-17 工作日志
杜康好客 v3.4.18 门店体验与登录态优化(含 F 项)
已实现并发布
- A mini-user 门店座机脱敏:改
apps/mini-user/src/lib/phone.ts的maskPhone座机分支,中间四位****(保留区号+首2+末2)。 - B 套餐详情图 1/5 计数 + 自动轮播:
ProductCarousel.tsxdetail 变体加 autoplay(3.5s) + 右下角1/N计数。 - C 合伙人暂停禁止登录:
auth.service.ts三处非 ACTIVE 抛「该账号已暂停使用,请联系客服人员」;h5-partner/LoginPage.tsx同步文案;复用DISABLED枚举,无迁移。 - D 门店端提现/筛选栏留白对齐:
h5-shop/styles.css补--space-page。 - E 休息中核销→是否开启营业:
PhoneRedeemPage/RedeemConfirmPage弹「是否开启营业?」,确认调PUT /shop/store/status开张后继续。 - F(本次新增) 门店套餐图片自适应完整显示:
ProductCarousel新增imageFit="adaptive"(mode="widthFix"+ 按真实比例动态算 Swiper 高度),product-detail.css加.detail-carousel-wrap--adaptive覆盖固定 1:1 裁剪;仅store-package-detail使用。根因:原.detail-carousel-wrap固定aspect-ratio:1+overflow:hidden+aspectFill裁掉非正方形图。
发布状态
- 文档:
杜康好客-v3.4.18-门店体验与登录态优化.md(含 A–F 范围、实现位置、验收清单)。 - git:本地
dev_jacy提交 v3.4.18 各功能 + F 修复;已git push origin dev_jacy:main(干净快进984dec7..18147e1)。 - 生产部署:后台运行
deploy/deploy-prod.sh --host dukang-server(/opt/dukang, main)。SSH 配置主机dukang-server即生产机;deploy.env缺失,用--host覆盖。
注意
- 本次 git 发布前曾遇 origin/main 比本地新、working tree 异常删除 503 文件(已
reset --hard HEAD还原,提交完好);最终 fetch 后确认本地领先可快进,安全发布。 - 四端 tsc 仅余项目既有环境类报错(CSS 导入/ImportMeta.env),本次改动文件无新增类型错误。
F 项方案 A 改写(22:18)
- 放弃手算高度逻辑(SelectorQuery + onLoad 测自然宽高),改用 swiper 原生
autoHeight:海报有多高轮播就有多高,无裁切。 ProductCarousel.tsx:删wrapWidth/imgHeights/handleImageLoad/swiperStyle,adaptive 模式加autoHeight={isAdaptive},image 保持mode="widthFix"。product-detail.css:.detail-carousel-wrap--adaptive覆盖(删aspect-ratio:1/overflow:hidden),并给.detail-carousel/.detail-carousel-item/.detail-carousel-image在 adaptive 下height:auto。- 已提交
cd1e9ae并git push origin dev_jacy:main(干净快进18147e1..cd1e9ae)。 - 重要:F 是原生微信小程序端改动,服务器部署只覆盖 H5-user 构建;真机小程序用户需经「微信开发者工具上传 + 微信审核」才能生效。
E 项缺陷修复(22:46 测试不通过)
- 根因:门店非 OPEN 时,后端
redeem.service.ts:loadOpenStoreAccount(previewRedeem/confirmRedeem 共用)抛「门店未营业」,导致RedeemConfirmPage的preview拉取失败 →preview为 null → 「确认核销」按钮disabled={!preview}→ 点击不了 → 开张弹窗永远不触发。手机号路径因弹窗在「发送验证码」时触发故未暴露。 - 修复:
RedeemConfirmPage把 preview 拉取抽成loadPreview();确认按钮改为disabled={loading || (!preview && !storeClosed)}(闭店时仍可点→弹框);openStoreAndContinue开张成功后await loadPreview()再doConfirm()。 - 弹窗文案对齐需求:「门店目前休息中无法核销,是否开启营业」(两页 modal title=门店休息中 / desc=该句;内联提示改为「门店目前休息中无法核销,开启营业后可继续」)。
- 提交
3ac008a,git push origin dev_jacy:main(快进cd1e9ae..3ac008a),生产重新部署中(deploy-prod.sh --host dukang-server)。 - 注意:后端
updateShopStatus对 CLOSED(永久关闭) 门店拒绝开张(抛「门店已永久关闭...」),属预期;需求针对 闭店/休息中(PAUSED) 场景,OK。
E 项方案二次修正(23:00 用户纠正:前置到点击扫码)
- 用户新要求:门店 PAUSED 时,点击「扫码核销」按钮那一刻就弹窗,而不是扫完码进确认页才弹。
- 改动:
apps/h5-shop/src/pages/HomePage.tsx(门店端首页)。- 复用 dashboard 已加载的
status(dash?.store?.status,L384status = String(store?.status||''))。 handleScan()开头:if (status !== 'OPEN') { setShowOpenModal(true); return; }—— 不进入 isWechatEnv/scanQrCode 流程。- 新增
openStoreAndContinue():PUT /shop/store/status {OPEN},成功后loadDashboard()刷新状态(开关/扫码按钮同步),用户可再次点击扫码。 - 弹窗复用全局
.shop-redeem-modal样式(与确认页一致),文案「门店目前休息中无法核销,是否开启营业?」。 RedeemConfirmPage的弹窗保留为带码直入确认页的兜底。
- 复用 dashboard 已加载的
- 提交
c0d04ee,git push origin dev_jacy:main(快进3ac008a..c0d04ee),生产重新部署中(deploy-prod.sh --host dukang-server)。文档 E 节已同步更新方案描述。
C 项缺陷修复(合伙人端 DISABLED 仍登录 - 微信路径)
- 现象:手机号(短信)路径已正确拦截(login 前先
POST /partner/auth/phone/check校验非 ACTIVE 即拒),但微信 OAuth 路径报错被吞 → 用户无任何提示。 - 根因:
apps/h5-partner/src/contexts/PartnerSessionContext.tsxL118catch { stripOAuthParamsFromLocation(); }把微信回调里processPartnerWechatOAuthCallback抛出的「该账号已暂停使用」错误吞掉。 - 修复:
catch (e) { stripOAuthParamsFromLocation(); toastError(e); }(toastError从@/lib/toast引入),让微信登录被暂停时同样弹「该账号已暂停使用,请联系客服人员」。 - 提交
5ca9aa0,git push origin dev_jacy:main(快进c0d04ee..5ca9aa0)。 - 生产部署完成(deploy-prod.sh --host dukang-server, 38s):dukang-api 200、各 h5/partner 服务 online。mini-user(h5) 健康检查 FAIL 与本次无关(非 v3.4.18 改动范围,本次改 native 小程序 + h5-shop + h5-partner)。
- 验收状态:A/B/C/D/E/F 全部提交并发布生产;C 项的短信 + 微信两条路径拦截逻辑均已落地,建议真机/微信环境复测一次确认 toast 文案展示。
C 项双拦截增强(23:37 用户要求“两个都要拦”)
- 澄清:city 合伙人有两个独立状态字段,别混:
partner_account.status(AccountStatus: ACTIVE/DISABLED)= 登录账号启用态,feature 原拦截查的就是它(子账号自身)。partner_account.bindingStatus(CityPartnerStatus: ACTIVE/PAUSED)= 城市合伙人绑定态,主账号为准;子账号取父主账号的此字段。
- 需求:子账号
status=DISABLED与 主账号bindingStatus=PAUSED都要拦。 - 实现:
auth.service.ts新增统一闸门assertPartnerAccountActive(account)(L313),同时拦上述两种;替换三处旧校验:assertPartnerAccountByPhone(L334) /loginPartner(L1086) /loginPartnerWechat(L1748)。- 自身非 ACTIVE → 「该账号已暂停使用,请联系客服人员」
- 主账号 bindingStatus 非 ACTIVE → 「该合伙人合作已暂停,请联系客服人员」
- 文档:
杜康好客-v3.4.18-...mdC 节重写为双拦截;顶部范围表 + 验收清单同步。 - 提交
48d6900,git push origin dev_jacy:main(快进5ca9aa0..48d6900),生产部署完成(task I2mWSU, 37s):commit=48d6900、api 200、各服务 online。 - 生产实测双拦截均生效:
status=DISABLED(id=7 临时翻转→测试→已还原 ACTIVE):phone/check返回 400「该账号已暂停使用,请联系客服人员」;还原后 201 ok:true。bindingStatus=PAUSED(18049821889 等 3 个主账号):phone/check返回 400「该合伙人合作已暂停,请联系客服人员」(修复前为 200 ok:true)。- 库内 status!=ACTIVE 数量=0;binding_status!=ACTIVE 数量=3(均为主账号 PAUSED)。
- 遗留未提交文件(非本次改动,需用户决策):
apps/h5-shop/src/styles.css:shop-records-status-chips由padding:0→padding-bottom:10px(D 项后续微调,未提交)。apps/mini-user/src/styles/product-detail.css:工作区版本把方案A(aspect-ratio:auto/height:auto)改回固定 4:3(aspect-ratio:1.33/height:100%),与已上线方案A矛盾,疑似另一轮实验性改动。已与用户确认前暂不提交。