Commit Graph

7 Commits

Author SHA1 Message Date
weicw-dshsa 2992f4ee49 fix(药分享): 修正 page-meta 位置并兜底接口返回,修复首屏报错
问题一:<page-meta> 渲染层报错“只能是页面内的第一个节点”
page-meta 原先嵌在根 view 内,位置在根节点的孙级。而编译器
uni-template-compiler/lib/template/generate.js 的 parsePageMeta 只检查
根节点的直接 children,匹配不到就不做“提升为第一个节点”的处理;
加上 webpack-uni-app-loader/page-meta.js 只要模板含 <page-meta 就会
无条件外包一层 <view>,最终渲染成
  <view class="data-v-xxx"><view class="share-page">...<page-meta>
导致微信报错。改为让 page-meta 与业务根 view 平级、放在最前,
经真实编译器验证产物第一个标签已是 <page-meta>。

问题二:onShow 抛 Cannot read properties of undefined (reading 'list')
直接诱因是后端 /yxe/yxe-share-detail/page?groupByProduct=true 报错
(见 yxe-java 侧提交),返回体 code=1 且不带 data,getProductList 里
data.list 抛异常并中断整个 onShow,页面数据全部不渲染。
本次在小程序侧做防御性兜底,避免任一接口失败就整页白屏:
- getProductList / getTodayShare / getShareUserData / getUserData /
  getRule / getShareData 均按要求校验再赋值
- getShareData 改用 slice() 排序,避免就地改动接口返回的数组;
  amount 缺失按 0 处理,避免 NaN 让排序结果不稳定
2026-10-12 14:49:18 +08:00
weicw-dshsa aff1e52e3e feat(自主填报): 拆分驻店/跑店填报并新增跑店填报页
「自主填报」原本只有一种表单。本次拆成两种类型:

1. 新增选择填报类型页 packageUser/self-report/select
   - 按设计稿:hero 页头 + 两张类型卡(驻店填报 / 跑店填报)+ 确认选择
   - 入口(首页、我的)由直接进 create 改为先进 select

2. 原自主填报页改为「驻店填报」
   - 仅改导航标题,表单内容不变

3. 新增跑店填报页 packageUser/self-report/visit
   - 复制现有跑店/巡店任务(pages/task/detail 的 cateId=4 分支)的填报页并改造:
     保留巡店列表与下方内容,去掉列表上方的任务卡片/总进度/任务详情;
     打卡、摆台照、销量、小票、门店评分一并不保留
   - 巡店列表内「连锁筛选」「门店筛选」是两个并列的独立输入框,
     各自弹各自的选择器(不串联),样式与驻店填报逐项对齐;
     换连锁会清空已选门店
   - 每条巡店可新增/删除,独立获取定位 + 打卡拍照(最多 9 张)
   - 定位不强制(巡店任务里是强制的,这里放开)
   - 底部「保存草稿」+「提交填报」,草稿交互与驻店填报一致:
     进页面询问是否加载、提交成功后清除;storage key 与驻店分开
   - 驳回后重新提交复用同一页面(mode=resubmit)

4. 填报记录页加「驻店 / 跑店」类型切换
   - 两表分表查询,各自分页;跑店卡片展示门店数、巡店列表(门店/定位/照片)
   - 连锁与门店关键词筛选落到巡店列表的每一行

5. 药审核加「跑店填报」类型
   - 新增 AuditVisitReportItem,展开时按 id 拉详情(列表不下发 store_list)
   - 跑店没有销量小计,审核通过需手填奖金,故补奖金输入弹层

顺带重构:
- 门店解析(扁平列表 / 连锁嵌套两种结构的兼容、门店明细不入页面 data
  的性能处理)抽到 util/store-picker,create 与 visit 共用一份,
  避免两页各自维护导致解析口径不一致
2026-10-11 22:50:15 +08:00
weicw-dshsa 4fa29ea4c6 refactor(visit): 拜访对象类型「门店」改为「地点」
- 类型选项:门店 -> 地点(图标改用 map)
- 字段标签:姓名/门店 -> 姓名/地点
- 默认 visitType 同步为「地点」,与 tab 的 value 保持一致
- placeholder、校验提示、顶部提示文案一并调整
「门店经理」选项保留不变。
2026-10-11 20:51:48 +08:00
weicw-dshsa da5bf8733e feat(visit): 客户拜访页按新原型重构为多卡片表单
参照设计稿将 pages/visit/index 拆分为 4 张表单卡片 + 历史记录卡片:
- 我的信息:姓名,进页面自动带出账号 realName,可编辑
- 拜访对象:类型(门店/门店经理/其他 胶囊 tab)、姓名/门店、连锁
- 拜访信息:定位信息(点击重新定位 + 经纬度副行)、拜访日期(默认当天)
- 其他信息:沟通内容(500 字 + 实时计数)、拍照上传、活动小结

一并修复:
- 必填星号原用 ::before 伪元素,小程序对 <text> 伪元素支持不稳,改为
  显式 <text class="field-star">
- 必填标签原复用全局类名 .required,而 common.scss 中的 .required 经
  @extend .pos-a 带上 position:absolute / left:-9px / top:15px,导致标签
  脱离文档流堆叠到卡片左上角。改用 .is-required 并在样式处加注释说明。

配色沿用项目主题变量,未照搬设计稿颜色。历史记录展开详情增加拜访
类型与拜访日期两行。
2026-10-11 20:47:31 +08:00
weicw-dshsa 4556114b4d fix(审核): 阻断位置型 chainId 占位符写入 yxe_self_report
normalizeMerchantChain 的兜底链以 `chain_${index}` 结尾,该值是数组下标而非
连锁标识。审核员改门店时 saveMerchantEdit 会把 chain.id 直接写入 chainId,
落库后按连锁筛选(YxeSelfReportMapper.xml: a.chain_id = #{param.chainId}
等值匹配)就再也筛不出这条记录。

存量数据已出现 chain_3/chain_6 等脏值,导致 5 条已通过记录按连锁筛选时
永久漏查。本次修复:

- 兜底链结尾改用连锁名(与提交端 create.vue 的 `?? chainName` 对齐)
- saveMerchantEdit 写入前拦截 `chain_` 前缀,退回连锁名

后端 MerchantServiceImpl.groupByChain 已返回稳定 chainId,正常路径不再回退。
2026-10-11 16:34:30 +08:00
weicw-dshsa 575b4a723a perf(门店选择): 门店明细移出页面 data,修复首屏卡顿
门店接口 /shop/merchant/groupByChain 一次返回 8105 家门店(约 1.1MB)。
此前把门店明细原样放进页面 data,data 树膨胀到 1118KB,导致此后每次
setData 都要重新 diff/序列化整棵树——即使载荷只有 1 个字段,耗时也从
约 490ms 涨到约 1000ms,首屏因此多花约 3.5s。

改为把明细挂在实例属性 merchantStore 上(不进页面 data),
merchantChainList 只保留 {id, text, merchantCount} 骨架,
新增 getMerchantsByChainId() / getVisibleMerchants() 按需取数。

涉及页面:
- packageUser/self-report/create.vue
- packageUser/chronic/index.vue
- pages/task/detail.vue
- pages/share/create.vue
- pages/share/index.vue
- pages/audit/components/AuditShareItem.vue

实测(微信开发者工具自动化):
- 页面 data 门店明细 1118KB -> 1KB
- 单字段 setData 998ms -> 10~53ms
- self-report/create 首屏 9055ms -> 5341ms
- 门店 picker 选项数不变(大参林 2700 项),搜索与选中回填均正常
2026-10-11 15:18:06 +08:00
b2894lxlx 69e6ed8c59 20260929 2026-09-29 15:17:13 +08:00