fix: preserve battery field workflow
| | |
| | | - 新建路由:`/battery-group/new` |
| | | - 编辑路由:`/battery-group/:id/edit` |
| | | - 当前实现:`src/views/BatteryGroup.vue`、`src/views/BatteryGroupForm.vue` |
| | | - 状态:已开发,数据使用前端演示流程 |
| | | - 状态:已接入后端电池组、字段和模板接口 |
| | | |
| | | ## 页面目标 |
| | | |
| | |
| | | ## 数据结构 |
| | | |
| | | - 电池组:`id`、`name`、`model`、`purpose`、`remark`、`batteries`、`createdAt`、`status`、`creator`、`templateName`、`specs`、`customFields`。 |
| | | - 列表与表单通过 `src/stores/batteryGroups.ts` 共享数据,并保存到当前站点的 `localStorage`。 |
| | | - 列表与表单通过 `src/api/batteryGroups.ts` 读写后端数据,字段和模板分别通过对应 API 持久化。 |
| | | |
| | | ## 响应式行为 |
| | | |
| | |
| | | text: '文本', number: '数字', time: '时间', date: '时间', remark: '备注', |
| | | } |
| | | |
| | | export const fieldTypeCode: Record<BatteryGroupFieldType, string> = { |
| | | 文本: 'text', 数字: 'number', 时间: 'time', 备注: 'remark', |
| | | } |
| | | |
| | | export async function getBatteryGroupFields(): Promise<BatteryGroupField[]> { |
| | | const result = await request<BatteryGroupFieldListResponse>('/system/batteryGroupField/list?pageNum=1&pageSize=1000') |
| | | return (result.rows || []).map(item => ({ |
| | |
| | | import { ElMessage, ElMessageBox } from 'element-plus' |
| | | import { useRouter } from 'vue-router' |
| | | import { getUserInfo } from '@/api/auth' |
| | | import { changeBatteryGroupFieldStatus, createBatteryGroupField, deleteBatteryGroupField, getBatteryGroupFields, updateBatteryGroupField, type BatteryGroupField, type BatteryGroupFieldStatus, type BatteryGroupFieldType } from '@/api/batteryGroupFields' |
| | | import { changeBatteryGroupFieldStatus, createBatteryGroupField, deleteBatteryGroupField, fieldTypeCode, getBatteryGroupFields, updateBatteryGroupField, type BatteryGroupField, type BatteryGroupFieldStatus, type BatteryGroupFieldType } from '@/api/batteryGroupFields' |
| | | |
| | | interface Filters { |
| | | id: string |
| | |
| | | const fields = ref<BatteryGroupField[]>([]) |
| | | const creators = ref<string[]>([]) |
| | | const statuses: BatteryGroupFieldStatus[] = ['启用', '禁用'] |
| | | const fieldTypes: BatteryGroupFieldType[] = ['文本'] |
| | | const fieldTypes: BatteryGroupFieldType[] = ['文本', '数字', '时间', '备注'] |
| | | const filters = reactive<Filters>({ id: '', name: '', status: '' }) |
| | | const appliedFilters = ref<Filters>({ id: '', name: '', status: '' }) |
| | | const currentPage = ref(1) |
| | |
| | | } |
| | | saving.value = true |
| | | try { |
| | | const payload = { fieldName: name, fieldType: 'text', status: fieldForm.status === '启用' ? '0' as const : '1' as const } |
| | | const payload = { fieldName: name, fieldType: fieldTypeCode[fieldForm.type], status: fieldForm.status === '启用' ? '0' as const : '1' as const } |
| | | if (editingId.value) await updateBatteryGroupField(editingId.value, payload) |
| | | else await createBatteryGroupField(payload) |
| | | dialogVisible.value = false |
| | |
| | | const currentUser = userInfo.user.userName?.trim() || '' |
| | | creators.value = currentUser ? [currentUser] : [] |
| | | fieldForm.creator = currentUser |
| | | } catch { |
| | | } catch (error) { |
| | | creators.value = [] |
| | | ElMessage.error(error instanceof Error ? error.message : '加载当前登录用户失败') |
| | | } |
| | | await loadFields() |
| | | } |