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
48a17a59f7
feat(diy-card): 名片 DIY 组件 2.0 视觉与功能升级(原生渲染, 禁 webview)
...
- diy-card-common.js(新): 设计 token 层 —— 颜色/字阶/间距/圆角/阴影/动效/
触达尺寸 + px2rpx/flagOn/initialOf/avatarBg/themeGradient/visibleRows 助手
- diy-card-mini.vue(新): 共享名片卡基件 —— 封面+遮罩/渐变饰条/Logo/主题色
头像(首字兜底)/资料行折叠(showRows 总开关+maxRows 上限+展开收起)/快捷操作
芯片(首个主动作实心, 72rpx 触达)/二维码/详情按钮/骨架屏 shimmer/badge 插槽
- diy-card-entry.vue: 三预设(gradient/solid/minimal)×两布局(left/center)×
图标装饰(内置字形/图片)×按钮四变体(solid/ghost/link/none)
- diy-card-list.vue: 三布局(grid 双列/list/scroll 横滑)+骨架屏+逐项 fade-up
入场+标题行(计数/更多)+企业徽章+空态
- diy-card-show.vue / diy-card-self.vue: 改为基件包装; self 管登录态
(hasToken watch 刷新)+兜底(fallbackMode)+空态 CTA+「我的名片」角标
- 修复死配置: 面板「显示资料行」showRows 此前被 C 端丢弃, 现由基件消费
(历史配置无此字段时默认显示, 兼容 1.0)
- 规范: 禁 CSS 变量, 动态样式走 $util.objToStyle, rpx 尺寸
2026-10-21 09:56:51 +08:00
cc96e2ca13
Merge branch 'dev/1.0' into feat/camcard
2026-10-21 09:24:29 +08:00
d0fe005c4a
diy: 名片 DIY 组件原生渲染(禁 webview) + diy-group 分发
...
- 新增 diy-card-entry/list/show/self.vue(easycom 自动加载):
头像/资料行/快捷操作原生渲染, tel 走 makePhoneCall,
wx/mail/web 走复制, 点击卡片跳 pages_tool/card/detail
- diy-card-self 登录态自适应: hasToken watch 自动刷新,
未登录兜底(企业卡/指定卡/登录引导)由后端 /card/api/diy/mycard 决定
- diy-group.vue: DiyCard* 四个 componentName 分发分支
2026-10-21 09:13:56 +08:00
c9a4673203
chore:已经登录了企业名片刷新不会出现登录提示
2026-10-20 15:17:54 +08:00
bdd0935fab
chore:新增一个企业微信名片
2026-10-20 14:07:05 +08:00
9d3cd2b65e
chore:titel改为名片
2026-10-20 10:06:16 +08:00
22b33c45ad
chore:名片删除按钮功能正常
2026-10-20 08:48:50 +08:00
699787528c
feat(card): PAGE_CARD_ENTERPRISE 页面链接映射——企业名片(后端 2.11.94 link 注册配套)
...
路径约定 /pages_tool/card/enterprise(页面由前端开发, 数据走
/card/api/enterprise/* 企业名片 API)。diy 链接管理的企业名片
节点已在后端 lucky_link 注册(name=CARD_ENTERPRISE)。
2026-10-19 18:09:57 +08:00
a2bf8d6c25
chore:增加名片删除按钮
2026-10-19 16:58:04 +08:00
8635f9795f
chore:title改成名片
2026-10-19 16:44:02 +08:00
166450f6ce
chore:浏览
2026-10-19 15:28:02 +08:00
b4509e3092
chore:
2026-10-19 15:18:30 +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
1f87b23e7b
merge dev/1.0 into feat/camcard: resolve card list/detail conflicts keeping feat/camcard implementation
2026-10-19 09:55:21 +08:00
421dad516c
chore:名片选择样式最后两个调换颜色
2026-10-19 09:46:11 +08:00
ab8dff4b93
chore:微信小程序名片样式选择颜色对应
2026-10-19 09:41:58 +08:00
8999dd3f25
chore:微信小程序 名片眼视光可以前端调节
2026-10-19 09:16:08 +08:00
91ce0b582b
chore:名片的全部页面下面删除提交申请
2026-10-19 09:00:38 +08:00
7daa3afdc2
chore:微信小程序分享名片给好友正常
2026-10-17 17:22:57 +08:00
21b3247547
chore:
...
微信小程序正常名片
2026-10-17 17:02:22 +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
33cd21cf78
chore:待跟进和已完成页面正常
2026-10-17 14:51:29 +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
77b1a3372c
feat:一键导出鸿蒙工程包,支持换机编译
...
把 stub-app-projects/mp-harmony 中编译所需的文件导成 zip, 供没有本仓库/没有
HBuilderX 的电脑解压后直接用 DevEco 编译上传。
用法:
npm run pack:harmony # 默认: 含证书, 不含 node_modules
npm run pack:harmony -- --no-certs # 不含签名证书
npm run pack:harmony -- --with-node-modules # 含 hvigor/node_modules(320MB), 离线机
npm run pack:harmony -- --out <dir> # 自定义输出目录
输出 unpackage/dist/harmony-export/mp-harmony-project-*.zip, 内含一层 mp-harmony/。
实现要点:
- 全程只读源目录: 先复制到暂存目录再压缩, 不修改 stub 下任何文件
- 采用「全量复制 - 排除清单」而非白名单, 避免漏掉新增必需文件
- 包含 ascf/ascf_src (uniapp 编译产物快照), 目标机因此无需本仓库和 HBuilderX
- 包含 cert-profile 签名证书, 否则 hvigor 无法签名, 产不出可上传的 .app
- 排除 node_modules(320M)/oh_modules/build/.preview(22M)/.idea/.hvigor/local.properties
ZIP 由纯 Node 实现 (zlib + 手写 ZIP 头), 未用系统命令, 因为本机两种方案都产出
不合规 zip 且失败是静默的:
- PowerShell Compress-Archive / ZipFile::CreateFromDirectory 写反斜杠条目名, 非
ZIP 规范, macOS/Linux 解压出畸形路径
- 本机 tar 是 GNU tar 1.35, 不支持创建 zip 且 exit 0, try/catch 拦不住
已验证: 解压后骨架齐全(AppScope/build-profile/entry/ascf_src/证书/README),
排除项均不存在, unzip -t 无错误, 中文文件名改 ASCII 规避工具编码差异。
2026-10-17 14:19:54 +08:00
373db1fb73
docs:修正鸿蒙产物构成描述(1 HAP + 5 HSP)
...
原描述「共 6 个 HAP」不准确。module.json5 中 type: "entry" 编成 HAP,
type: "shared" 编成 HSP(共享包, 动态下发), 本工程实际是 1 个 HAP + 5 个 HSP。
同步修正:
- 两步流程描述改为「逐个 module 编译出包, 再打成 APP」, 产物路径扩展名
改为 {hap|hsp}
- 包列表新增扩展名列, 标明哪些是 .hap、哪些是 .hsp
- 单模块调试说明改为「只产出分包、不打 APP」
另补充实测体积: 主包 entry-default.hap 约 2.37 MiB(超官方单包 2MB 限制),
总包约 6.39 MiB(在 10MB 以内)。
2026-10-17 13:55:54 +08:00
d4457e58d4
chore:交换名片框的颜色要随着后台更改名片样式的颜色改变而改变
2026-10-17 12:00:31 +08:00
550ec72bb7
fix:麦克风权限 Permissions 类型用法修正
...
上一提交写成 Permissions.MICROPHONE 导致 CompileArkTS 失败:
'Permissions' only refers to a type, but is being used as a value here
Permissions 在 @ohos.permissions 中是 export type 字符串联合类型, 不是枚举,
只能用在类型位置。改为类型标注 + 权限名字面量:
const PERMISSION_MICROPHONE: Permissions = 'ohos.permission.MICROPHONE';
注意 abilityAccessCtrl 里的 SwitchType.MICROPHONE(=1) 是开关类型枚举,
与权限名无关, 容易误用。
readme 4.3.3 补充该类型坑说明。
2026-10-17 11:53:44 +08:00
1276a44b6b
chore:名片导航栏颜色改成白色”名片“这两个字改成黑色
2026-10-17 11:51:10 +08:00
9086f1665c
feat:鸿蒙元服务接入麦克风运行时权限申请
...
MICROPHONE 是 user_grant 权限, 上一提交补了 module.json5 的 reason 只解决
了编译校验, 运行时仍需弹窗申请, 否则录音功能不可用。
在 EntryAbility.onCreate 中调用 abilityAccessCtrl.requestPermissionsFromUser。
关键点:
- AscfUIAbility 父类已定义 onCreate, 重写时必须调 super.onCreate(want,
launchParam), 否则跳过 ascf runtime 初始化导致元服务白屏
- 选 onCreate 而非按需触发: 权限状态在 JS 侧 (uni.getRecorderManager) 读不到,
项目无现成 JS<->ArkTS 通道; 且 requestPermissionsFromUser 对已授权应用
直接 resolve 不弹窗, 实际只有首次启动打扰用户一次
- 降级: 未授权不影响浏览/下单/卡片, 仅语音不可用, 前端 voice-panel 会
showToast 提示
readme 4.3.3 补充该实现与踩坑说明, 4.3.4 移除已解决项。
2026-10-17 11:46:57 +08:00
a9f3c7acc2
docs:清理文档中的本机绝对路径
...
绝对路径与本机目录绑定,换机器即失效,改为相对表述。
- docs/theme-multi-platform.md:删掉 cd 到绝对路径的命令行,
改为注释说明「在项目根目录(含 package.json)下执行」
- docs/i18n-audit-report.md:审计范围改为「项目根目录」
- docs/ai-agent-integration.md:适用前端改为「本仓库」;
WB Cloud SDK 协议约束矩阵原指向外部 refs 仓的绝对路径,
改为相对文件名并标注「WB Cloud SDK 参考仓内」
2026-10-17 11:35:44 +08:00
53b5b725a5
docs:鸿蒙元服务发布独立为 4.3 章节
...
原先作为 4.1.2 嵌在「小程序发布」下,实际产出的是 atomicService 元服务包,
与小程序流程差异较大,拆为独立的 4.3 章节,排在 4.2 快应用之后。
新增 4.3.2 DevEco Studio 编译与产物:说明 assembleApp 是两步串联
(先编译 HAP,再打包成 APP),列出 HAP / APP 产物路径与 pack.info 中
6 个 HAP 的构成,并注明元服务上架 AppGallery Connect 上传的是 .app。
新增 4.3.3 常见错误:hvigor 00303218 Configuration Error 的成因与修法
(user_grant 权限必须同时声明 reason 和 usedScene),附 user_grant /
system_grant 权限速查表。
新增 4.3.4 待完善:运行时权限申请未接入、release 签名仍指向 debug 证书。
2026-10-17 11:35:38 +08:00
fe3f059f58
chore:我的人脉--添加--可以正常保存
2026-10-17 11:24:08 +08:00
add384916c
fix:鸿蒙元服务麦克风权限补充 reason 字段
...
ohos.permission.MICROPHONE 是 user_grant 权限,必须同时声明
reason 和 usedScene,缺失导致 hvigor 报 00303218 配置错误、
entry:default@PreBuild 失败。
补充 reason 引用,并新增 permission_microphone_reason 字符串资源。
其余 INTERNET / GET_NETWORK_INFO / VIBRATE 均为 system_grant,无需改动。
2026-10-17 11:23:36 +08:00
f2997f5401
chore:前端名片样式和后台名片样式更改同步
2026-10-17 11:15:47 +08:00
4439df7c9b
chore:名片样式上面的标语删除
2026-10-16 16:49:18 +08:00
5290271017
chore:名片样式和后端同步
2026-10-16 16:41:13 +08:00
d358bb55ba
chore:认领码正常
2026-10-16 10:52:27 +08:00
2f750dbb99
chore:点击交换名片中的同意按钮,进去到对方名片,左上角返回按钮,返回到名片首页
2026-10-15 15:41:28 +08:00
591ce742a9
chore:交换名片正常
2026-10-15 14:59:59 +08:00
f41057a9ad
chore:名片删人脉解锁重新申请+收藏
2026-10-15 11:11:09 +08:00
5a009130e6
chore:名片样式第一个背景
2026-10-15 10:18:04 +08:00
e8fc1aca06
chore:对方与我交换名片,我这里弹出交换名片框,点击有一人请求与您交换名片,进入到图片中的页面,删除红色框中的“示例交换”四个字
2026-10-15 09:16:59 +08:00
e60b3e2e52
chore:名片样式的名片模板第一个模板
2026-10-14 16:53:03 +08:00
022a8bb5bb
chore:和后端发的文档同步
2026-10-14 16:29:56 +08:00
6309a5bb4b
feat: 优化名片详情加载逻辑,处理未登录和卡片不存在的情况,新增公开页跳转功能
2026-10-14 13:50:28 +08:00