| | |
| | | export function spliceSourceValue(segment: SpliceSegment, settings: SpliceSettings, field: SpliceField) { |
| | | const manual = settings.detailFieldValues?.[field.name]?.[spliceSourceKey(segment.source)] |
| | | if (manual !== undefined) return manual |
| | | // 控制台详情只有名称,没有共享字段身份;模板字段一旦带 ID,必须按 ID 取组值,不能被同名详情冒认。 |
| | | if (field.fieldDefinitionId) { |
| | | return segment.businessFields?.find(value => value.fieldDefinitionId === field.fieldDefinitionId)?.fieldValue ?? '' |
| | | } |
| | | const detail = segment.consoleDetail?.fieldValues[field.name] |
| | | if (detail !== undefined) return detail |
| | | if (segment.consoleDetail?.batteryFields.includes(field.name) || segment.consoleDetail?.specialFields.includes(field.name)) return '' |
| | | // 用户明确选择的共享字段仍按其身份提供组值,不冒充缺失的控制台人工字段。 |
| | | return field.fieldDefinitionId ? segment.businessFields?.find(value => value.fieldDefinitionId === field.fieldDefinitionId)?.fieldValue ?? '' : '' |
| | | return '' |
| | | } |
| | | export function spliceExperiment(segment: SpliceSegment, settings: SpliceSettings) { |
| | | return settings.sourceExperimentNames?.[spliceSourceKey(segment.source)] ?? segment.consoleDetail?.experimentName ?? '' |
| | |
| | | import { expect, test, type Page } from '@playwright/test' |
| | | import { Ticket04Stack } from './support/ticket04-stack' |
| | | import { spliceSourceValue } from '@/api/spliceReports' |
| | | |
| | | const stack = new Ticket04Stack() |
| | | const selection = (testBatteryId: number) => ({ testId: testBatteryId < 9703 ? 9701 : 9702, testBatteryId }) |
| | |
| | | } |
| | | }) |
| | | test.afterAll(async () => stack.stop()) |
| | | |
| | | test('同名控制台字段与共享字段按身份隔离', () => { |
| | | const segment: any = { |
| | | source: { selection: { testId: 1, testBatteryId: 2 }, batteryNo: '1号' }, |
| | | businessFields: [{ fieldDefinitionId: 10, fieldName: '质量', fieldValue: '共享值' }], |
| | | consoleDetail: { batteryFields: ['质量'], specialFields: [], fieldValues: { 质量: '控制台值' } }, |
| | | } |
| | | expect(spliceSourceValue(segment, {}, { name: '质量', category: 'battery', displayName: '质量', unit: 'kg', fieldDefinitionId: 10 })).toBe('共享值') |
| | | expect(spliceSourceValue(segment, {}, { name: '质量', category: 'battery', displayName: '质量', unit: '', fieldDefinitionId: null })).toBe('控制台值') |
| | | }) |
| | | async function login(page: Page) { |
| | | await page.goto('/login') |
| | | await page.locator('input[autocomplete="username"]').fill('admin') |