yeg
2026-08-29 220e41fd36cc09826d5fbfa8825f889370426fe9
修复另存模板后电池组模板绑定
3个文件已修改
24 ■■■■■ 已修改文件
src/api/batteryGroupTemplates.ts 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/BatteryGroupForm.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tests/battery-group-persistence.contract.test.mjs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/batteryGroupTemplates.ts
@@ -20,6 +20,10 @@
  data: BatteryGroupTemplateDto[]
}
interface BatteryGroupTemplateCreatedResponse extends ApiResponse {
  data: { templateId: number }
}
export interface BatteryGroupTemplateOption {
  id: number
  name: string
@@ -31,20 +35,20 @@
export async function getBatteryGroupTemplateOptions(): Promise<BatteryGroupTemplateOption[]> {
  const result = await request<BatteryGroupTemplateOptionsResponse>('/system/batteryGroupTemplate/options')
  return (result.data || []).map(item => ({ id: item.templateId, name: item.templateName || `模板${item.templateId}` }))
  return (result.data || []).map(item => ({ id: Number(item.templateId), name: item.templateName || `模板${item.templateId}` }))
}
export async function getBatteryGroupTemplate(templateId: number): Promise<BatteryGroupTemplateDetail> {
  const result = await request<BatteryGroupTemplateResponse>(`/system/batteryGroupTemplate/${templateId}`)
  return {
    id: result.data.templateId,
    id: Number(result.data.templateId),
    name: result.data.templateName || `模板${result.data.templateId}`,
    fieldIds: (result.data.fields || []).map(field => field.fieldId),
  }
}
export function createBatteryGroupTemplate(templateName: string, fieldIds: number[]): Promise<ApiResponse> {
  return request<ApiResponse>('/system/batteryGroupTemplate', {
export function createBatteryGroupTemplate(templateName: string, fieldIds: number[]): Promise<BatteryGroupTemplateCreatedResponse> {
  return request<BatteryGroupTemplateCreatedResponse>('/system/batteryGroupTemplate', {
    method: 'POST', body: JSON.stringify({ templateName, fieldIds }),
  })
}
src/views/BatteryGroupForm.vue
@@ -180,13 +180,13 @@
    })
    const name = result.value.trim()
    templateSaving.value = true
    await createBatteryGroupTemplate(name, selectedFieldIds.value)
    templateOptions.value = await getBatteryGroupTemplateOptions()
    const created = templateOptions.value.find(item => item.name === name)
    if (!created) throw new Error('模板已保存,但未能重新加载')
    form.templateId = created.id
    const createdResult = await createBatteryGroupTemplate(name, selectedFieldIds.value)
    const createdId = Number(createdResult.data?.templateId)
    if (!Number.isInteger(createdId) || createdId <= 0) throw new Error('模板已保存,但服务端未返回有效模板 ID')
    form.templateId = createdId
    currentTemplateName.value = name
    loadedTemplateFieldIds.value = [...selectedFieldIds.value]
    templateOptions.value = await getBatteryGroupTemplateOptions()
    ElMessage.success(`已另存为“${name}”`)
  } catch (error) {
    if (error instanceof Error && error.message !== 'cancel') {
tests/battery-group-persistence.contract.test.mjs
@@ -59,6 +59,8 @@
  const source = fs.readFileSync(new URL('../src/views/BatteryGroupForm.vue', import.meta.url), 'utf8')
  assert.match(source, /currentTemplateName/)
  assert.match(source, /updateBatteryGroupTemplate\(form\.templateId, name, selectedFieldIds\.value\)/)
  assert.match(source, /createdResult\.data\?\.templateId/)
  assert.doesNotMatch(source, /find\(item => item\.name === name\)/)
  assert.doesNotMatch(source, /<el-option label="自定义" :value="0"/)
  assert.match(source, /<el-option label="默认" :value="0"/)
})