fix(admin): 优化管理后台英文菜单多语言文案杜绝截断并修复各业务页面与API错误
这个提交包含在:
@@ -97,6 +97,7 @@ type UseLeadDetailModule = {
|
||||
},
|
||||
api?: SaveNoteApi
|
||||
) => Promise<LeadEntity>;
|
||||
resolveLeadDetailText: (key: string) => string;
|
||||
};
|
||||
|
||||
const EMOJI_RE = /[\u2600-\u27BF\uFE0F]|[\uD83C-\uDBFF][\uDC00-\uDFFF]/;
|
||||
@@ -262,22 +263,48 @@ describe('OmniCard AI 名片主潜客详情业务逻辑 (useLeadDetail.uts)', ()
|
||||
expect(result.status).toBe('hot');
|
||||
});
|
||||
});
|
||||
|
||||
describe('4. resolveLeadDetailText 只增文案', () => {
|
||||
it('4.1 话术与上传说明有文案,保存语义仍可用', () => {
|
||||
const { resolveLeadDetailText } = loadUseLeadDetail();
|
||||
|
||||
expect(resolveLeadDetailText('aiScript').length).toBeGreaterThan(0);
|
||||
expect(resolveLeadDetailText('comingSoon')).toBe('即将提供');
|
||||
expect(resolveLeadDetailText('uploadHint').length).toBeGreaterThan(0);
|
||||
expect(resolveLeadDetailText('save').length).toBeGreaterThan(0);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('OmniCard AI 名片主潜客详情页契约 (leads-detail.uvue)', () => {
|
||||
it('页面存在,足迹用 scroll-view,备忘用 textarea,单一主 CTA', () => {
|
||||
it('页面存在,足迹用 list-view,备忘用 textarea,单一主 CTA', () => {
|
||||
expect(fs.existsSync(DETAIL_PAGE)).toBe(true);
|
||||
expect(fs.existsSync(DETAIL_UTS)).toBe(true);
|
||||
|
||||
const pageSource = fs.readFileSync(DETAIL_PAGE, 'utf8');
|
||||
const logicSource = fs.readFileSync(DETAIL_UTS, 'utf8');
|
||||
const combined = `${pageSource}\n${logicSource}`;
|
||||
const template = pageSource.split('<script')[0];
|
||||
|
||||
expect(pageSource.includes('script setup lang="uts"')).toBe(true);
|
||||
expect(pageSource.includes('getOmniText')).toBe(true);
|
||||
expect(pageSource.includes('<scroll-view')).toBe(true);
|
||||
expect(pageSource.includes('<list-view')).toBe(true);
|
||||
expect(pageSource.includes('<list-item')).toBe(true);
|
||||
expect(/<view[^>]*v-for=/.test(pageSource)).toBe(false);
|
||||
expect(pageSource.includes('<textarea')).toBe(true);
|
||||
expect(pageSource.includes('min-height: 88px')).toBe(true);
|
||||
expect(pageSource.includes('primary-cta-btn')).toBe(true);
|
||||
expect(template.includes('WhatsApp')).toBe(false);
|
||||
expect(pageSource.includes('calc(88px + env(safe-area-inset-bottom, 0px))')).toBe(
|
||||
true
|
||||
);
|
||||
expect(pageSource.includes('lead-status-hot')).toBe(true);
|
||||
expect(pageSource.includes('#F04438')).toBe(true);
|
||||
expect(pageSource.includes('aiScript')).toBe(true);
|
||||
expect(pageSource.includes('comingSoon')).toBe(true);
|
||||
expect(pageSource.includes('uploadHint')).toBe(true);
|
||||
expect(pageSource.includes('image-uploader')).toBe(true);
|
||||
expect(logicSource.includes('async function submitLeadNote')).toBe(true);
|
||||
expect(
|
||||
combined.includes('fetchOwnerLeadInfo') || combined.includes('loadDetail')
|
||||
).toBe(true);
|
||||
|
||||
@@ -407,8 +407,19 @@ describe('OmniCard AI 展会团队战报页契约 (overview.uvue)', () => {
|
||||
expect(pageSource.includes('<list-view')).toBe(true);
|
||||
expect(pageSource.includes('<list-item')).toBe(true);
|
||||
expect(pageSource.includes('length > 5') || logicSource.includes('length > 5')).toBe(
|
||||
true
|
||||
false
|
||||
);
|
||||
expect((pageSource.match(/<list-view/g) || []).length).toBe(2);
|
||||
expect(pageSource.includes('gap: 12px')).toBe(true);
|
||||
expect(pageSource.includes('48%')).toBe(false);
|
||||
expect(pageSource.includes('statusLabel')).toBe(true);
|
||||
expect(pageSource.includes('lead-status-hot')).toBe(true);
|
||||
expect(pageSource.includes(' · ')).toBe(true);
|
||||
expect(pageSource.includes('isRtl')).toBe(true);
|
||||
expect(pageSource.includes('overview-rtl')).toBe(true);
|
||||
expect(pageSource.includes('--oc-error')).toBe(true);
|
||||
expect(pageSource.includes('metric-country-long')).toBe(true);
|
||||
expect(pageSource.includes('chart') || pageSource.includes('bar-chart')).toBe(false);
|
||||
expect(combined.includes('summarize')).toBe(true);
|
||||
expect(combined.includes('loadOverview')).toBe(true);
|
||||
expect(combined.includes('fetchOwnerLeadPage')).toBe(true);
|
||||
|
||||
在新工单中引用
屏蔽一个用户