diff --git a/packages/app/src/pages/admin/members.vue b/packages/app/src/pages/admin/members.vue
index 0466a47..beaa605 100644
--- a/packages/app/src/pages/admin/members.vue
+++ b/packages/app/src/pages/admin/members.vue
@@ -115,11 +115,6 @@
-
-
- 加载中...
-
-
@@ -195,7 +190,13 @@
-
+
+
+ 加载中...
+
+
+
+
卡类型
@@ -303,6 +304,7 @@ const detailMembership = ref(null)
const editLoading = ref(false)
const editSubmitting = ref(false)
const editCardTypes = ref([])
+const formReady = ref(false)
const editForm = ref({
cardTypeIndex: 0,
@@ -394,6 +396,8 @@ function openDetail(m: MemberSummary) {
showDetail.value = true
detailMembership.value = null
activeTab.value = 'detail'
+ editLoading.value = false
+ formReady.value = false
loadDetailMembership(m.userId)
}
@@ -419,30 +423,36 @@ function statusLabel(status: string): string {
}
async function loadDetailMembership(userId: string) {
- detailMembership.value = null
- editLoading.value = true
try {
const result = await adminStore.getUserMembership(userId)
detailMembership.value = result.membership
} catch {
- } finally {
- editLoading.value = false
}
}
async function switchTab(tab: 'detail' | 'edit') {
activeTab.value = tab
if (tab === 'edit') {
- // Always fetch card types if not yet loaded
- if (!editCardTypes.value.length) {
- await adminStore.fetchCardTypes()
- editCardTypes.value = adminStore.cardTypes
- }
- // Load membership if not yet loaded
- if (!detailMembership.value) {
- await loadDetailMembership(detailMember.value!.userId)
- }
+ // Reset form state and show loading immediately
+ formReady.value = false
+ editLoading.value = true
+
+ // Load card types and membership in parallel
+ const loadCardTypes = editCardTypes.value.length
+ ? Promise.resolve()
+ : adminStore.fetchCardTypes().then(() => {
+ editCardTypes.value = adminStore.cardTypes
+ })
+
+ const loadMembership = detailMembership.value
+ ? Promise.resolve()
+ : loadDetailMembership(detailMember.value!.userId)
+
+ await Promise.all([loadCardTypes, loadMembership])
+
initEditForm()
+ editLoading.value = false
+ formReady.value = true
}
}
@@ -565,6 +575,7 @@ function closeModal() {
showDetail.value = false
activeTab.value = 'detail'
detailMembership.value = null
+ formReady.value = false
}
onMounted(() => loadMembers(true))