diff --git a/app/performance-survey/PerformanceSurveyAdminConfig.test.tsx b/app/performance-survey/PerformanceSurveyAdminConfig.test.tsx
index 1898966e..e2281503 100644
--- a/app/performance-survey/PerformanceSurveyAdminConfig.test.tsx
+++ b/app/performance-survey/PerformanceSurveyAdminConfig.test.tsx
@@ -301,6 +301,49 @@ describe('PerformanceSurveyAdminConfig', () => {
expect(screen.queryByRole('button', { name: '复制岗位' })).not.toBeInTheDocument()
})
+ test('岗位模板搜索和已选考核项同步显示模板栏的最新名称', async () => {
+ const configuration = {
+ ...config,
+ groups: config.groups.map((group: any) => group.id === 'group-1'
+ ? {
+ ...group,
+ effectivePlan: {
+ ...group.effectivePlan,
+ templateVersionIds: [],
+ },
+ }
+ : group),
+ templates: config.templates.map((template: any) => template.id === 'template-1'
+ ? {
+ ...template,
+ versions: [{
+ ...template.versions[0],
+ id: 'version-draft-2',
+ version: 2,
+ status: 'draft',
+ effectiveMonth: null,
+ definition: {
+ ...template.versions[0].definition,
+ name: '品牌创意部门',
+ },
+ }, template.versions[0]],
+ }
+ : template),
+ }
+ const request = createRequest(configuration)
+ render()
+
+ await waitFor(() => expect(screen.getByRole('heading', { name: '岗位考核项' })).toBeInTheDocument())
+ fireEvent.change(screen.getByLabelText('添加考核项'), { target: { value: '品牌创意部门' } })
+
+ const option = screen.getByRole('button', { name: /品牌创意部门.*v1/ })
+ expect(option).toBeInTheDocument()
+ expect(screen.queryByRole('button', { name: /视觉案例评分.*v1/ })).not.toBeInTheDocument()
+
+ fireEvent.click(option)
+ expect(screen.getByText('品牌创意部门')).toBeInTheDocument()
+ })
+
test('新增岗位使用确定的 collection POST 契约', async () => {
const request = createRequest()
render()
diff --git a/app/performance-survey/PerformanceSurveyAdminConfig.tsx b/app/performance-survey/PerformanceSurveyAdminConfig.tsx
index 44b66560..c55d55b3 100644
--- a/app/performance-survey/PerformanceSurveyAdminConfig.tsx
+++ b/app/performance-survey/PerformanceSurveyAdminConfig.tsx
@@ -305,6 +305,10 @@ function getTemplateAvailability(template: TemplateRecord, month: string) {
}
}
+function getTemplateDisplayName(template: TemplateRecord) {
+ return template.versions[0]?.definition.name?.trim() || template.name
+}
+
function getTemplateListState(template: TemplateRecord, month: string): {
label: string
tone: StatusTone
@@ -891,7 +895,9 @@ function PositionConfigWorkspace({
return availableTemplateVersions.filter(({ template, version }) => (
!templateVersionIds.includes(version.id)
&& !selectedTemplateIds.has(template.id)
- && `${version.definition.name} ${template.name}`.toLocaleLowerCase('zh-CN').includes(keyword)
+ && `${getTemplateDisplayName(template)} ${version.definition.name} ${template.name}`
+ .toLocaleLowerCase('zh-CN')
+ .includes(keyword)
)).slice(0, 8)
}, [availableTemplateVersions, templateSearch, templateVersionIds, versionById])
@@ -1164,7 +1170,7 @@ function PositionConfigWorkspace({
className="flex min-h-11 w-full items-center justify-between gap-3 border-b border-[#eeeeee] px-3 py-2 text-left last:border-b-0 hover:bg-[#f4f6ff]"
>
- {version.definition.name}
+ {getTemplateDisplayName(template)}
v{version.version}
@@ -1181,7 +1187,7 @@ function PositionConfigWorkspace({
return (
-
{item?.version.definition.name || item?.template.name || '历史模板'}
+
{item ? getTemplateDisplayName(item.template) : '历史模板'}
第 {index + 1} 项{item ? ` · v${item.version.version}` : ''}
@@ -1449,7 +1455,7 @@ function TemplateConfigWorkspace({
}
const selectedTemplateName = selectedTemplate
- ? selectedTemplate.versions[0]?.definition.name || selectedTemplate.name
+ ? getTemplateDisplayName(selectedTemplate)
: '新建模板'
const selectedTemplateState = selectedTemplate
? getTemplateListState(selectedTemplate, month)
@@ -1482,7 +1488,7 @@ function TemplateConfigWorkspace({
{data.templates.map((template) => (
))}
@@ -1506,7 +1512,7 @@ function TemplateConfigWorkspace({
{data.templates.map((template) => {
const state = getTemplateListState(template, month)
- const templateName = template.versions[0]?.definition.name || template.name
+ const templateName = getTemplateDisplayName(template)
return (