| | |
| | | data: BatteryGroupTemplateDto[] |
| | | } |
| | | |
| | | interface BatteryGroupTemplateCreatedResponse extends ApiResponse { |
| | | data: { templateId: number } |
| | | } |
| | | |
| | | export interface BatteryGroupTemplateOption { |
| | | id: number |
| | | name: string |
| | |
| | | |
| | | 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 }), |
| | | }) |
| | | } |
| | |
| | | }) |
| | | 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') { |
| | |
| | | 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"/) |
| | | }) |