ff530cd6a2
chore:二维码外观
2026-10-24 08:39:32 +08:00
c9d77e901d
chore:我的名片组件二维码外观正常
2026-10-23 15:17:25 +08:00
a595a4ae1b
chore:微信小程序分享正常
2026-10-23 14:01:20 +08:00
ecc81b9b31
chore:我的名片组件发送名片正常
2026-10-23 10:44:03 +08:00
8348cbb179
chore:我的名片组件,隐藏我的名片组件的下面登录后即可展示我的名片隐藏,
2026-10-23 10:21:25 +08:00
cb454db326
chore:我的名片样式
2026-10-23 09:59:12 +08:00
5f4a0ecea1
chore:精选名片的快捷按钮样式改变
2026-10-23 09:01:20 +08:00
f26d11f38a
chore:我的名片组件网站的图标显示正常
2026-10-22 18:31:46 +08:00
efa7c736f9
chore:主题渐变饰条正常
2026-10-22 18:25:00 +08:00
31f67c109b
chore:我的名片快捷按钮样式
2026-10-22 16:01:32 +08:00
df9db2e2ed
chore:精选名片发送名片正常
2026-10-22 14:38:09 +08:00
6c2619a33c
chore:开启隐藏精选名片的资料行图标可控
2026-10-22 14:20:44 +08:00
3bcf0c8c87
chore:二维码微调值可以正常调动
2026-10-22 11:26:43 +08:00
3d144a7492
chore:二维码的尺寸可以调
2026-10-22 10:52:47 +08:00
b294fc3640
chore:“发送名片”按钮功能正常
2026-10-22 09:53:27 +08:00
6f9ac29aa6
chore:二维码位置和后台同步
2026-10-21 18:16:49 +08:00
a1d8ee8d7a
chore:二维码精选名片后台控制开启显示
2026-10-21 17:32:30 +08:00
724e7ac134
chore:精选名片组件可以支持头像开启关闭
2026-10-21 16:05:59 +08:00
37cd3c2f30
chore:新增精选名片组件,样式
2026-10-21 15:53:15 +08:00
f1bd606e0b
fix(diy-card): 审计修复——corner 档头部水平让位动态化 + self 首载骨架屏
...
- 修复 P1: corner 档自定义 qrSize>120 时静态 padding-right:180rpx
让位不足, 浮层压住头部姓名区 → 新增 cornerHeadStyle 按浮层实际
宽度(尺寸+衬底+右偏移20+呼吸20)动态反算, 与 cornerClearStyle
垂直让位同口径; 废弃静态 CSS 值(负断言锁定)
- 修复: self.vue 已登录首次加载三分支都不渲染(loading 且无 card)
→ 白屏闪烁; 改 v-else-if="loading || card" 挂上 mini 骨架屏
- 契约测试: 新增 cornerHeadStyle 断言 + resolveQrSize 三处口径 +
静态让位废弃负断言; 3 项变异验证全抓住; 四文件 67 项全绿
2026-10-21 14:09:56 +08:00
805bbb9598
feat(diy-card): 4.0 头像开关 + 二维码四档外观/自定义尺寸/微调位移/提示开关
...
- common.js: QR_STYLES 四档枚举 + normalizeQrStyle(未知回落 card) +
resolveQrSize(自定义 px×2>档位自动 rpx) + qrTransform(位移经
translate, WXSS 不支持 calc)
- mini.vue 基件: 头像可隐藏(默认显示, 兼容历史配置); qrBlockStyle
统一四档外观(plain 原图/card 白卡/theme 主题色/gradient 渐变,
多彩只装饰外围衬底, 码黑白保可扫); cornerClearStyle 按实际尺寸
反算让位(自定义大尺寸/关 tip 自动跟随); 扫码提示可关
- show/self: 6 新字段透传; ab-visual 测试 corner 断言改锚动态让位
- 新增 qr-style 契约测试 20 项(纯函数真值 + 基件 + 透传 + 两个
design.html 面板控件绑定与预览消费 + 反例), 9 项变异验证全抓住
- 前端四测试文件共 66 项全绿; E2E 143 项; 三回归 79/41/56 全绿
2026-10-21 12:28:18 +08:00
8bdd9f1291
fix(diy-card): 修复两处 WXSS 不兼容 calc() + MP 兼容契约测试
...
微信小程序 WXSS 不支持 calc(), 两处布局在小程序上会失效:
- mini.vue corner 档: max-width: calc(100% - 170rpx) →
.mini-head { padding-right: 180rpx }(固定值, 浮层宽 120+偏移 20+呼吸 20)
- list.vue 网格: itemStyle width calc(50% - gap/2) →
布局盒 50% 宽 + 左右各 half-gap padding, 视觉移入内层 .item-card
(border/圆角/padding 随之下移, 布局盒透明只算 gutter)
- 新增 tests/diy-card-mp-compat.test.js 20 项: 全组件禁 calc()/var(--)
(先剥注释再断言) + template 标签配平(栈式匹配, 兼容插槽嵌套 template)
+ 反例自测
注: 渐变角度 linear-gradient(deg,...) 有生产先例(detail/enterprise/
forward 均在生产小程序运行), 不在禁项; 真机渲染需 HBuilderX 构建验证。
验证: 46/46(三个名片测试文件) + npm test 仅剩两个存量失败
2026-10-21 11:58:35 +08:00
a841af8f5b
feat(diy-card): A+B 视觉升级(资料行图标/可点 + 二维码四档任意位)
...
配合后端 f031476, 组件内直接复刻参考图视觉, 功能仍归详情页(路径A):
- common.js: rowIconFor(field→iconfont glyph, 无字形退化空串) +
rowActOf(href 派生 tel/mail/copy, 空 href 不可点) +
normalizeQrPosition/QR_SIZES(四档归一化+尺寸表)
- mini.vue: 资料行图标列(与文字标签列同宽, 值列左缘对齐) +
行点击 emit row-act; 二维码四档渲染:
rows 行下(默认) / head 头部右侧(三段 flex 零遮挡) /
corner 右上浮层(白底衬底+Logo 避让+资料行让位 108rpx) /
bottom 主按钮上方; 二维码尺寸随档位(180/120/120/180)
- show/self: miniConfig 透传 showRowIcons/rowTap/qrPosition,
模板挂 @row-act="doAct" 复用既有动作分发
- 新增 tests/diy-card-ab-visual.test.js 13 项(真函数+源码断言,
7 项变异验证全抓住)
node --test tests/diy-card-ab-visual.test.js → 13/13
2026-10-21 11:44:37 +08:00
35137ae814
test(diy-card): 路径A链路契约测试(组件卡跳完整名片页)
...
参考图(名片卡+二维码+发名片)的完整功能在详情页, 组件靠「查看完整名片」
全宽主按钮把用户送过去。固化为 13 项断言(先剥注释再断言, 7 项变异验证):
- show/self: miniConfig 透传 showDetailBtn/detailBtnText
- show/self: 模板挂 @detail="goDetail"; goDetail 跳
/pages_tool/card/detail 带 card_id + 空 id 守卫
- mini 基件: showDetailBtn flagOn 默认开 + mini-detail emit('detail')
- detail.vue: 错误信封带 wap_url → fallbackToPublicPage
(H5 直跳/非 H5 走 share 中转 web-view, 游客不死路)
- 反例: 虚构字段/错误落点必须查不到
node --test tests/diy-card-detail-jump.test.js → 13/13
2026-10-21 11:24:50 +08:00
8fa16d9b14
chore:保留test
2026-10-19 10:12:44 +08:00
9c9d1a412f
Merge remote-tracking branch 'origin/dev/1.0' into feat/camcard
2026-10-19 09:55:43 +08:00
7909cf2b22
test:导出脚本增加零漏拷/零多拷硬保证
...
质疑"某个目录有没有被打进 zip"时, 原先只能人工逐目录核对。现在把这个检查做进
脚本, 每次导出都跑:
copyDir 记录每个被复制文件在 zip 中应有的条目名, verifyZipFile 把它与实际 zip
条目做**逐个双向比对** —— 少一个报"漏拷"并列出文件名, 多一个报"多拷"。这样
漏拷会当场失败, 而不是等在别的电脑上解压缩时才发现。
自检输出新增一行, 例如:
自检: 零漏拷 ✅ (1381/1381) / CRC 逐条 ✅ / 偏移一致 ✅ / ...
同时把 copyDir 的条目名拼接由"从 nameOfParent 反推"改为显式传 relBase, 去掉
原先那段绕的 split/map 逻辑。
新增 3 条测试(漏拷拒绝 / 多拷拒绝 / 清单吻合时放行且 README.txt 豁免), 本
测试文件 19/19 通过, npm test 全量 17 个测试文件通过。
2026-10-17 16:13:09 +08:00
336b4d21da
test:鸿蒙工程包导出增加产出自检与单元测试
...
手写 ZIP 编码器的典型 bug 都是静默的 —— 包能生成、看着正常, 但某些机器上
解不开或解出畸形路径。开发期已真实踩过两次(中央目录偏移漏算文件数据长度、
localOffset 记成数据区起点), 两次都只有靠 unzip -t 才发现, 因此加两层保障。
一、脚本内产出自检 (每次导出都跑)
新增 verifyZipFile(), 把写好的 zip 重新解析一遍, 任一项不符直接抛错、不输出
「完成」。刻意用独立解析实现, 不复用写入端逻辑, 避免自证其说:
- EOCD / 中央目录: 签名、条目数、偏移与长度边界一致
- localOffset: 每条必须真的指向本地文件头, 且文件名与中央目录一致
- CRC: 逐条解压后重算 CRC32 比对
- 条目名: 必须正斜杠、必须置 UTF-8 标志位、必须可逆解码为合法 UTF-8
- 内容断言: 必需文件齐全; node_modules/build/.preview 等排除项不得混入
二、单元测试 tests/pack-harmony-project.test.js (16 条)
正向用例写夹具目录打包再独立解析还原, 校验内容/目录/中文名/零字节/空目录/
可压缩与不可压缩内容; 反向用例故意篡改 zip 断言自检能抓到 —— 反向用例一旦
失效自检就形同虚设, 故必须保持通过。
过程中自检抓到自身一条误判: 排除校验原先用子串匹配, 把合法源码
entry/src/ohosTest/ets/test/Ability.test.ets 当成 .test 构建产物。已改为按
路径分段精确匹配, 并加了一条反向用例锁定。
同时修掉两个隐患: stats 是模块级累加器(同进程重复调用会翻倍), main() 原先
无条件执行(require 脚本就会跑一遍打包), 现加 require.main 守卫并导出内部
实现供测试使用。
已验证: 本测试文件 16/16 通过, npm test 全量 17 个测试文件通过, 实打包
2.99MiB 包自检通过且 unzip -t 交叉验证无错误。
2026-10-17 14:42:28 +08:00
5290271017
chore:名片样式和后端同步
2026-10-16 16:41:13 +08:00
e60b3e2e52
chore:名片样式的名片模板第一个模板
2026-10-14 16:53:03 +08:00
389d87b82c
chore:名片样式更改
2026-10-13 15:39:56 +08:00
15b0d2a18a
chore:接口
2026-10-13 10:38:08 +08:00
b92f474ac8
feat(card): 员工端「我的人脉」页 + 与潜在客户导航互链
...
- 新增 contacts.vue: 搜索/来源筛选/列表卡(来源徽标)/编辑/转潜在客户/删除
- 新增 contact-edit.vue: 新增编辑复用, 姓名红星必填, 其余(选填)
- leads.vue 顶部互链「我的人脉 ›」(导航合并第一步)
- pages.json 注册两页; PAGE_KEY_MAP 补 PAGE_CARD_CONTACTS
- card-platform.test.js 追加 4 测试(25/25)
2026-10-12 17:35:16 +08:00
8cf70b617d
feat(card): 更新名片夹相关文本和导航,优化用户体验
2026-10-12 15:56:40 +08:00
053cb00826
feat(card): 个人中心新增「我的名片夹」固定入口 + 平台导航 page_key 测试
...
- member/index.vue: 非装修分支兜底入口, 跳转 /pages_tool/card/list
- card-platform.test.js: PAGE_KEY_MAP 含 PAGE_CARD_LIST/PAGE_CARD_LEADS 断言对齐
2026-10-12 15:27:06 +08:00
9e6dc8665f
feat(card): add leads and share pages with platform-specific handling
...
- Implemented leads.vue for managing lead statuses and displaying lead information.
- Added share.vue for sharing card links with platform-specific web-view handling for WeChat Mini Programs, HarmonyOS, and H5.
- Introduced tests for cross-platform compatibility, ensuring proper handling of conditional compilation and API usage across WeChat, H5, and HarmonyOS.
- Ensured that sharing functionality correctly encodes and decodes URLs for different platforms.
2026-10-12 14:32:20 +08:00
fe2d3dcfe2
fix(ai-chat): 全面修复前端图片附件 4 个 P0 + 3 个 P1 + 3 个 P2 bug
...
PR-FRONTEND-MEDIA-UPLOAD-FIX (2026-09-16)
配合后端 PR-WB-MP-UPLOAD-EXT (HEIC/AVIF/BMP/TIFF 双层修复), 前端用户上传链路全面打通:
**4 个 P0 (阻塞用户上传)**:
- pendingImage 单数 → pendingImages 数组: 选 9 张图只发 1 张 → 全部一起发
- 每个图独立 localId 独立上传独立失败
- 失败给删除按钮 (用户不再卡死)
- MP-WEIXIN 不压缩 HEIC → H5+MP-WEIXIN 双端都压缩
- 微信 chooseImage 默认 compressed 不支持 HEIC, 必须本地 uni.compressImage
- getFileSize 失败兜底 0 → 失败抛错, 探测完全失败时兜底走 STS
- 0 > 2MB = false 让 auto 模式永远走 PHP 中转, 大文件 OOM
- 现: totallyUnknown → 兜底 STS
- guessMime 缺 HEIC 等 → 与后端 guessMimeFromPath 对齐 26 个 mime
**3 个 P1 (业务级)**:
- selectFile 微信小程序死按钮 → 加 #ifdef MP-WEIXIN 分支 (uni.chooseMessageFile/wx.chooseMessageFile)
- 兼容检测两个 API 哪个可用
- 上传失败后 pendingImage 永远卡住 → 失败时给 删除 按钮 (pending-retry-delete)
- URL.createObjectURL 永不释放 → upload 完成后 (成功/失败都) revokeObjectURL
**3 个 P2 (优化)**:
- filePath.split('.').pop() 在 blob URL 翻车 → 用 lastSegment + 正则提取 + 兜底 'bin'
- STS MP-WEIXIN size 永远 0 → 用已知 detectedSize + pathToFile 再探测
- H5 压缩阈值 10MB → 3MB
**新增**:
- tests/media-upload-fix.test.js (12 个单测全过): guessMime 现代格式 / extractExt blob URL / decideSts 兜底 STS 决策
2026-09-16 16:52:49 +08:00
f5f893b445
refactor(splash&diy): 重构启动页逻辑,优化白屏问题
...
1. 统一全平台启动页为strict模式,仅在12s兜底超时才强制关闭
2. 新增网络自适应超时策略,根据网络环境调整兜底时长
3. 补充diy加载失败时的启动页关闭逻辑,避免严格模式下无限等待
4. 优化代码格式与注释,修复部分代码细节问题
2026-07-24 16:11:41 +08:00
45c0c2afb1
refactor(鸿蒙元服务): 适配鸿蒙平台隐私托管与启动屏时序优化
...
1. 适配鸿蒙元服务平台隐私托管,由系统自动弹出隐私弹窗,应用层不再弹出自建弹窗
2. 新增启动屏strict模式,鸿蒙场景下严格等待首页DIY渲染完成再关闭启动屏,避免白屏
3. 新增splash-state单元测试覆盖新旧模式与鸿蒙场景
4. 清理隐私相关冗余代码与注释,统一平台逻辑分支
2026-07-24 15:10:49 +08:00
f4a770e246
refactor(mp-harmony): 完善隐私协议配置同步流程与鸿蒙双轨适配
...
1. 新增隐私配置同步脚本,自动从manifest和site.js同步真实隐私协议URL到鸿蒙构建产物
2. 补充鸿蒙元服务隐私托管双轨制适配逻辑
3. 新增完整的隐私弹窗组件单元测试覆盖
4. 修复构建产物隐私配置被占位符覆盖的问题
2026-07-24 14:43:02 +08:00
ff0d26908c
fix(member): 修复账号注销/退出登录后无法正常跳转到微信原生授权登录的问题
...
修复背景:
账号注销成功后, 用户被重定向到 native 登录页 (手机号+验证码表单风格, 像 H5),
而不是微信小程序原生授权登录 (ns-login 弹窗 + getPhoneNumber 授权).
此外, 微信小程序下短时间内连发 reLaunch 会触发 native 错误:
appLaunch with non-empty page stack
以及历史遗留的 navigateTo push 登录页 + 旧页面在栈中导致的死循环问题.
主要修复:
1. util.js redirectTo reLaunch 分支 (4 平台兼容):
- H5 平台: window.location.replace (真正清空 history, 避免 history.back + router.replace 假清栈)
- 小程序平台 (mp-weixin/mp-harmony/...): 加 300ms 全局跳转锁 + setTimeout(0) 包裹
解决 appLaunch with non-empty page stack 错误
- APP/其他: 保留原生 uni.reLaunch
2. util.js redirectTo 入口智能默认 (跨平台兜底):
- 目标 == LOGIN_PAGE_URL && mode 是默认 navigateTo && 没传 back 参数
→ 自动改成 reLaunch (避免注销后死循环)
- 显式传 mode 或带 back 参数的场景保持原行为 (不影响登录后回原页面)
3. member-public.js mixin 增强:
- getLoginEntryUrl(): 跨平台登录入口智能分流
微信小程序/鸿蒙/其他小程序 → INDEX_PAGE_URL (首页, 走 ns-login 原生授权弹窗)
H5/快应用/APP → LOGIN_PAGE_URL (原生登录页)
- redirectToLoginOnce(): 统一封装 clearLoginState + 跳登录入口, 带 800ms 组件级防抖锁
- logout / getCancelStatus 兜底 / submitCancelApply 三个地方都改用 redirectToLoginOnce()
4. 5 个注销/退出流程页面改造:
- cancelsuccess.vue / cancelstatus.vue / cancellation.vue / cancelrefuse.vue
/ assets.vue: 跳登录入口全部用 redirectToLoginOnce (不再直接 redirectTo(LOGIN_PAGE_URL))
- cancellation.vue / cancelrefuse.vue: 加 memberPublic mixin (原本没有)
5. 取消了在 pages/index/public/js/index.js 中 onShow 自动弹登录弹窗的尝试
(因触发 Vue 框架的 dataset of null pre-existing 错误, 改由其他途径处理)
测试覆盖 (300+ 测试用例全部通过):
- tests/member-cancel-flow.test.js (28 个测试, 9 个用户故事场景)
- tests/redirectTo-relaunch-h5.test.js (11 个测试, 9 个跨平台场景)
- tests/redirectTo-real.test.js (12 个)
- tests/util.test.js (30 个)
- 其他 8 个测试文件全部通过
2026-07-23 17:26:00 +08:00
acbac773db
fix(member): 修复退出登录后可返回旧页面的问题
...
1. 退出登录和注销流程兜底分支都改用reLaunch跳转登录页,清空页面栈防止返回旧会员页
2. 新增完整的单元测试覆盖logout和getCancelStatus的异常分支、调用顺序和跳转模式
2026-07-23 15:17:08 +08:00
b9cb6bf75b
fix(member-cancel): 修复注销成功后仍能回退查看旧账号信息的问题
...
1. 注销申请成功后立即调用clearLoginState清除登录态,避免残留账号信息
2. 所有跳转均改用reLaunch模式清空页面栈,防止用户通过回退键回到历史页面
3. 新增完整的注销流程行为测试用例覆盖所有场景
2026-07-23 15:14:01 +08:00
70a01bfd2b
fix: 修复多页面国际化文案调用路径错误
...
将多处误用的 common.前缀国际化调用改为顶层路径,同时新增语言调用错误的回归测试用例,防止后续再次出现类似的命名空间误用问题
2026-07-23 10:37:22 +08:00
94142268a0
refactor(i18n): 完成全量硬编码中文文案替换为多语言方案
...
1. 替换所有页面/组件中的硬编码中文提示文案为$lang调用,包括支付、帮助中心、公告等页面
2. 重构diy.js加载失败文案处理逻辑,支持参数化替换
3. 新增多语言混入逻辑,实现导航标题随语种动态切换
4. 重构支付组件初始化逻辑,优化平台适配代码
5. 添加多语言单元测试和硬编码扫描脚本
6. 更新语言包,新增缺失的翻译词条
2026-07-23 09:46:16 +08:00
cd2705e5b9
fix(test): 修复沙箱环境下tabbar测试的依赖和调试flag问题
...
1. 移除沙箱不支持的ESM import语句
2. 内联注入依赖的_toParamValueString函数
3. 将globalThis.__TABBAR_DEBUG__替换为global以穿透沙箱
4. 修复全局调试flag无法在沙箱内生效的问题
2026-07-18 18:31:00 +08:00
02b8966a91
fix(mp-harmony): 修正鸿蒙元服务的url编码逻辑,对齐微信小程序行为
...
更新了鸿蒙元服务的_safeEncodeForPlatform实现和相关测试:
1. 修正此前错误的"鸿蒙整体encode url"假设,实际鸿蒙行为和微信一致,按&=分隔解析query
2. JS侧不再完全不编码,而是仅对&=?#和空格做encode,保留中文/字母数字等
3. 更新所有相关测试用例和文档注释,同步修复微信平台的编码逻辑说明
2026-07-18 18:23:39 +08:00
1143ef7b72
fix(util-navigate): 完善鸿蒙元服务编码逻辑注释与说明
...
更新了util-navigate和对应测试文件的注释,补充鸿蒙原生编码的细节,说明双重编码的问题以及&符号的处理逻辑,修正了注释里的重复表述
2026-07-18 09:24:10 +08:00
f3032a6004
fix(util-navigate): 修复多平台搜索关键词编码乱码问题
...
重构跨平台参数编码逻辑:
1. 微信小程序/鸿蒙元服务:仅处理编码边界符和decode roundtrip,不主动编码,交由平台原生处理
2. H5/华为快应用:保留主动编码逻辑,适配浏览器query解析规则
3. 新增专项测试用例覆盖搜索关键词跨端流转场景,修复商品分类页跳转列表页关键词显示乱码的bug
2026-07-18 08:34:43 +08:00
cbf91fa905
feat(util,navigate): add uniacid stale check for wap url
...
新增租户uniacid一致性校验逻辑,修复装修外链携带过期租户ID导致的跳转错误问题:
1. 新增pickCurrentUniacid和hasStaleUniacidInUrl工具函数
2. 在链接处理逻辑中校验wap_url内的uniacid与当前系统租户ID是否一致
3. 脏数据场景下强制走外链模式而非内部跳转
4. 补充完整的单元测试覆盖
2026-07-17 11:37:53 +08:00