From 2b4fb46f9153b8a25d9e493279bfa722b653cd9e Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期四, 27 八月 2026 22:51:33 +0800
Subject: [PATCH] fix: connect battery group management APIs
---
src/views/BatteryGroupField.vue | 83 ++++++++++++++++++++++++++++++-----------
1 files changed, 60 insertions(+), 23 deletions(-)
diff --git a/src/views/BatteryGroupField.vue b/src/views/BatteryGroupField.vue
index 58fb81d..63e00c2 100644
--- a/src/views/BatteryGroupField.vue
+++ b/src/views/BatteryGroupField.vue
@@ -1,9 +1,9 @@
<script setup lang="ts">
-import { computed, reactive, ref } from 'vue'
+import { computed, onMounted, reactive, ref } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { useRouter } from 'vue-router'
-import { useBatteryGroupFields, type BatteryGroupField, type BatteryGroupFieldStatus } from '@/stores/batteryGroupFields'
-import type { FieldType } from '@/stores/batteryGroups'
+import { getUserInfo } from '@/api/auth'
+import { changeBatteryGroupFieldStatus, createBatteryGroupField, deleteBatteryGroupField, getBatteryGroupFields, updateBatteryGroupField, type BatteryGroupField, type BatteryGroupFieldStatus, type BatteryGroupFieldType } from '@/api/batteryGroupFields'
interface Filters {
id: string
@@ -12,17 +12,19 @@
}
const router = useRouter()
-const { fields, createField, updateField, removeField, saveChanges } = useBatteryGroupFields()
-const creators = ['张工', '李工', '周工', '王工', '赵工', '陈工', 'Admin']
+const fields = ref<BatteryGroupField[]>([])
+const creators = ref<string[]>([])
const statuses: BatteryGroupFieldStatus[] = ['启用', '禁用']
-const fieldTypes: FieldType[] = ['文本', '数字', '时间', '备注']
+const fieldTypes: BatteryGroupFieldType[] = ['文本']
const filters = reactive<Filters>({ id: '', name: '', status: '' })
const appliedFilters = ref<Filters>({ id: '', name: '', status: '' })
const currentPage = ref(1)
const pageSize = ref(10)
const dialogVisible = ref(false)
const editingId = ref<number | null>(null)
-const fieldForm = reactive<{ name: string, type: FieldType, creator: string, status: BatteryGroupFieldStatus }>({ name: '', type: '文本', creator: 'Admin', status: '启用' })
+const loading = ref(false)
+const saving = ref(false)
+const fieldForm = reactive<{ name: string, type: BatteryGroupFieldType, creator: string, status: BatteryGroupFieldStatus }>({ name: '', type: '文本', creator: '', status: '启用' })
const dialogTitle = computed(() => editingId.value ? '编辑电池组字段' : '新增电池组字段')
const filteredFields = computed(() => {
@@ -52,7 +54,7 @@
function openCreate() {
editingId.value = null
- Object.assign(fieldForm, { name: '', type: '文本', creator: 'Admin', status: '启用' })
+ Object.assign(fieldForm, { name: '', type: '文本', creator: creators.value[0] || '', status: '启用' })
dialogVisible.value = true
}
@@ -62,7 +64,7 @@
dialogVisible.value = true
}
-function saveField() {
+async function saveField() {
const name = fieldForm.name.trim()
if (!name) {
ElMessage.warning('请输入字段名称')
@@ -77,35 +79,70 @@
ElMessage.warning('字段名称已存在')
return
}
- const payload = { name, type: fieldForm.type, creator: fieldForm.creator, status: fieldForm.status }
- if (editingId.value) updateField(editingId.value, payload)
- else createField(payload)
- dialogVisible.value = false
- ElMessage.success(editingId.value ? '字段已更新' : '字段已添加')
+ saving.value = true
+ try {
+ const payload = { fieldName: name, fieldType: 'text', status: fieldForm.status === '启用' ? '0' as const : '1' as const }
+ if (editingId.value) await updateBatteryGroupField(editingId.value, payload)
+ else await createBatteryGroupField(payload)
+ dialogVisible.value = false
+ ElMessage.success(editingId.value ? '字段已更新' : '字段已添加')
+ await loadFields()
+ } catch (error) {
+ ElMessage.error(error instanceof Error ? error.message : '保存字段失败')
+ } finally {
+ saving.value = false
+ }
}
async function toggleStatus(item: BatteryGroupField) {
const nextStatus: BatteryGroupFieldStatus = item.status === '启用' ? '禁用' : '启用'
try {
await ElMessageBox.confirm(`确认${nextStatus}字段“${item.name}”?`, `${nextStatus}字段`, { confirmButtonText: nextStatus, cancelButtonText: '取消', type: 'warning' })
+ await changeBatteryGroupFieldStatus(item.id, nextStatus === '启用' ? '0' : '1')
item.status = nextStatus
- saveChanges()
ElMessage.success(`字段已${nextStatus}`)
- } catch {
- // 用户取消状态变更。
+ } catch (error) {
+ if (error instanceof Error) ElMessage.error(error.message || '更新字段状态失败')
}
}
async function deleteField(item: BatteryGroupField) {
try {
await ElMessageBox.confirm(`删除字段“${item.name}”后无法恢复,是否继续?`, '确认删除字段', { confirmButtonText: '删除', cancelButtonText: '取消', type: 'warning', confirmButtonClass: 'danger-confirm' })
- removeField(item.id)
+ await deleteBatteryGroupField(item.id)
+ fields.value = fields.value.filter(field => field.id !== item.id)
currentPage.value = Math.min(currentPage.value, Math.max(1, Math.ceil(filteredFields.value.length / pageSize.value)))
ElMessage.success('字段已删除')
- } catch {
- // 用户取消删除。
+ } catch (error) {
+ if (error instanceof Error) ElMessage.error(error.message || '删除字段失败')
}
}
+
+async function loadFields() {
+ loading.value = true
+ try {
+ fields.value = await getBatteryGroupFields()
+ } catch (error) {
+ fields.value = []
+ ElMessage.error(error instanceof Error ? error.message : '加载字段失败')
+ } finally {
+ loading.value = false
+ }
+}
+
+async function loadPage() {
+ try {
+ const userInfo = await getUserInfo()
+ const currentUser = userInfo.user.userName?.trim() || ''
+ creators.value = currentUser ? [currentUser] : []
+ fieldForm.creator = currentUser
+ } catch {
+ creators.value = []
+ }
+ await loadFields()
+}
+
+onMounted(loadPage)
</script>
<template>
@@ -122,7 +159,7 @@
</div>
</section>
- <section class="result-panel">
+ <section v-loading="loading" class="result-panel">
<div class="result-toolbar"><div><i></i><strong>电池组字段列表</strong><span>{{ filteredFields.length }} RESULTS · 按添加时间倒序</span></div><button class="primary-button" type="button" @click="openCreate"><el-icon><Plus /></el-icon>新增字段</button></div>
<div class="table-wrap">
<table>
@@ -140,10 +177,10 @@
<div class="field-form">
<label><span><b>*</b>字段名称</span><el-input v-model="fieldForm.name" maxlength="30" show-word-limit placeholder="输入字段名称" @keyup.enter="saveField" /></label>
<label><span><b>*</b>字段类型</span><el-select v-model="fieldForm.type" placeholder="选择字段类型"><el-option v-for="item in fieldTypes" :key="item" :label="item" :value="item" /></el-select></label>
- <label><span><b>*</b>添加人</span><el-select v-model="fieldForm.creator" placeholder="选择添加人"><el-option v-for="item in creators" :key="item" :label="item" :value="item" /></el-select></label>
+ <label><span><b>*</b>添加人</span><el-select v-model="fieldForm.creator" disabled placeholder="当前登录用户"><el-option v-for="item in creators" :key="item" :label="item" :value="item" /></el-select></label>
<label><span>状态</span><el-radio-group v-model="fieldForm.status"><el-radio-button value="启用">启用</el-radio-button><el-radio-button value="禁用">禁用</el-radio-button></el-radio-group></label>
</div>
- <template #footer><button class="secondary-button" type="button" @click="dialogVisible = false">取消</button><button class="primary-button" type="button" @click="saveField"><el-icon><Check /></el-icon>保存</button></template>
+ <template #footer><button class="secondary-button" type="button" @click="dialogVisible = false">取消</button><button class="primary-button" type="button" :disabled="saving" @click="saveField"><el-icon><Check /></el-icon>保存</button></template>
</el-dialog>
</div>
</template>
--
Gitblit v1.7.1