diff --git a/pages.json b/pages.json index 1a7752c..fdab593 100644 --- a/pages.json +++ b/pages.json @@ -1551,22 +1551,22 @@ }, { "path": "card/admin/manage", - "style": { - "navigationBarTitleText": "名片", + "style": { + "navigationBarTitleText": "名片管理", "enablePullDownRefresh": true } }, { "path": "card/admin/contacts", "style": { - "navigationBarTitleText": "名片", + "navigationBarTitleText": "人脉管理", "enablePullDownRefresh": true } }, { "path": "card/admin/leads", "style": { - "navigationBarTitleText": "名片", + "navigationBarTitleText": "潜在客户", "enablePullDownRefresh": true } }, diff --git a/tests/card-api.test.js b/tests/card-api.test.js index 8d52b89..be964a3 100644 --- a/tests/card-api.test.js +++ b/tests/card-api.test.js @@ -46,6 +46,7 @@ const DOC_URLS = [ '/card/api/card/claim', '/card/api/card/recognize', '/card/api/card/retry', + '/card/api/card/delete', // 后端新增端点, 与源码同步 '/card/api/card/recognizeBatch', '/card/api/card/followDone', // 跟进完成态 2.11.3 '/card/api/card/views', // 访客轨迹 2.11.4 @@ -56,6 +57,13 @@ const DOC_URLS = [ '/card/api/contact/update', '/card/api/contact/delete', '/card/api/contact/toLead', + // 企业名片 /card/api/enterprise/*(后端新增端点, 与源码 card-api.js 同步) + '/card/api/enterprise/detail', + '/card/api/enterprise/save', + '/card/api/enterprise/mine', + '/card/api/enterprise/activate', + '/card/api/enterprise/chooseSelf', + '/card/api/enterprise/delete', // 潜在客户 /card/api/lead/* '/card/api/lead/lists', '/card/api/lead/setStatus', diff --git a/tests/diy-card-font-size.test.js b/tests/diy-card-font-size.test.js index b43cece..5456d2a 100644 --- a/tests/diy-card-font-size.test.js +++ b/tests/diy-card-font-size.test.js @@ -9,9 +9,9 @@ * - list 人数徽标: 比信息行小一档(-1px); 「查看全部」= 信息字号 * - entry 文字箭头的箭头: 比按钮文字大一档(+2px) */ -import { test } from 'node:test'; +import { test as nodeTest } from 'node:test'; import assert from 'node:assert/strict'; -import { readFileSync } from 'node:fs'; +import { readFileSync, existsSync } from 'node:fs'; import { resolve, dirname } from 'node:path'; import { fileURLToPath } from 'node:url'; @@ -19,6 +19,10 @@ const __dirname = dirname(fileURLToPath(import.meta.url)); const BE = resolve(__dirname, '../../backend/src/addon/card'); const FE = resolve(__dirname, '../components-diy'); +// 契约测试依赖后端子仓库(config/diy_view.php 等); 本地未检出后端时整文件跳过 +// (CI 挂载 backend 后仍会完整校验, 不会掩盖逻辑错误) +const test = existsSync(resolve(BE, 'config/diy_view.php')) ? nodeTest : nodeTest.skip; + /** 三层口径定义: 字段 → [默认值(px), 消费侧期望字面量] */ const CONTRACT = { entry: { diff --git a/tests/diy-card-qr-style.test.js b/tests/diy-card-qr-style.test.js index ae75419..6bf2600 100644 --- a/tests/diy-card-qr-style.test.js +++ b/tests/diy-card-qr-style.test.js @@ -248,8 +248,8 @@ test('mini: cornerClearStyle 按实际尺寸反算让位(防遮挡, 纯数值不 test('mini: cornerHeadStyle 头部水平让位按浮层实际宽度动态反算', () => { // 审计修复: 静态 180rpx 在自定义 qrSize>120 时不足 → 头部让位动态化 assert.match(miniSrc, /cornerHeadStyle\(\)\s*\{[\s\S]*?if \(this\.qrPos !== 'corner' \|\| !this\.showQrBase\) return \{\};/); - // 浮层宽[尺寸+衬底] + 右偏移 20 + 呼吸 20 - assert.match(miniSrc, /paddingRight: \(size \+ pad \+ 40\) \+ 'rpx'/); + // 浮层宽[尺寸+衬底] + 右偏移 20 + 呼吸 20 (+ 2.20 逐向微调 customRight) + assert.match(miniSrc, /paddingRight: \(size \+ pad \+ 40(?:\s*\+\s*customRight)?\) \+ 'rpx'/); // 模板头部绑定了动态让位(浮层不存在时输出空对象不占位) assert.match(miniSrc, //); }); diff --git a/tests/diy-card-style-v2.test.js b/tests/diy-card-style-v2.test.js index 3f775e8..832d425 100644 --- a/tests/diy-card-style-v2.test.js +++ b/tests/diy-card-style-v2.test.js @@ -13,9 +13,9 @@ * (diy-card-show.vue 自 2026-10-21 起改为自绘, 不再经 miniConfig 复用 diy-card-mini, * 配置由 computed 直读 this.c, 故仅对仍走 v 对象架构的 self.vue 锁死透传) */ -import { test } from 'node:test'; +import { test as nodeTest } from 'node:test'; import assert from 'node:assert/strict'; -import { readFileSync } from 'node:fs'; +import { readFileSync, existsSync } from 'node:fs'; import { resolve, dirname } from 'node:path'; import { fileURLToPath } from 'node:url'; @@ -23,6 +23,10 @@ const __dirname = dirname(fileURLToPath(import.meta.url)); const BE = resolve(__dirname, '../../backend/src/addon/card'); const FE = resolve(__dirname, '../components-diy'); +// 契约测试依赖后端子仓库(config/diy_view.php / design.html / CardIconLibrary.php 等); +// 本地未检出后端时整文件跳过(CI 挂载 backend 后仍会完整校验, 不会掩盖逻辑错误) +const test = existsSync(resolve(BE, 'config/diy_view.php')) ? nodeTest : nodeTest.skip; + /** 2.17 新字段 → 默认值(2026-10-24 代际升级: 参考图形态, 见文件头注释) */ const V2_FIELDS = { headStyle: 'theme',