perf: 优化订阅刷新逻辑

This commit is contained in:
richarjiang
2026-09-07 14:06:19 +08:00
parent 88cd8419c8
commit f5c7b7eaac
27 changed files with 3248 additions and 1060 deletions

View File

@@ -18,6 +18,12 @@ import type {
UpdateFlashSaleDto,
CreateStudioUploadCredentialDto,
StudioUploadCredential,
AdminMemberSummary,
AdminMemberDetail,
UpdateAdminMemberProfileDto,
AdminArrangeBookingDto,
MembershipWithCardType,
BookingWithDetails,
} from '@mp-pilates/shared'
interface LegacyPaginatedData<T> {
@@ -53,16 +59,7 @@ export interface AdminStats {
totalBookings: number
}
export interface MemberSummary {
userId: string
openid: string
nickname: string
phone: string | null
avatarUrl: string | null
totalBookings: number
completedBookings: number
cancelledBookings: number
}
export type MemberSummary = AdminMemberSummary
export interface UserMembership {
userId: string
@@ -176,20 +173,38 @@ export const useAdminStore = defineStore('admin', () => {
return get<UserMembership>(`/admin/members/${userId}/membership`)
}
async function fetchMemberDetail(userId: string): Promise<AdminMemberDetail> {
return get<AdminMemberDetail>(`/admin/members/${userId}`)
}
async function updateMemberProfile(
userId: string,
dto: UpdateAdminMemberProfileDto,
): Promise<AdminMemberDetail> {
return put<AdminMemberDetail>(`/admin/members/${userId}`, dto as unknown as Record<string, unknown>)
}
async function arrangeMemberBooking(dto: AdminArrangeBookingDto): Promise<BookingWithDetails> {
return post<BookingWithDetails>('/admin/bookings', dto as unknown as Record<string, unknown>)
}
async function updateUserMembership(
userId: string,
dto: {
membershipId?: string
cardTypeId: string
remainingTimes?: number | null
startDate: string
expireDate: string
},
): Promise<any> {
return put<any>(`/admin/members/${userId}/membership`, dto)
): Promise<MembershipWithCardType> {
return put<MembershipWithCardType>(`/admin/members/${userId}/membership`, dto)
}
async function deleteUserMembership(userId: string): Promise<void> {
return del<void>(`/admin/members/${userId}/membership`)
async function deleteUserMembership(userId: string, membershipId: string): Promise<void> {
return del<void>(
`/admin/members/${userId}/membership?membershipId=${encodeURIComponent(membershipId)}`,
)
}
// ── Time slots ───────────────────────────────────────────────────
@@ -216,7 +231,7 @@ export const useAdminStore = defineStore('admin', () => {
async function fetchSchedulePreview(date: string): Promise<ScheduleSlotPreview[]> {
scheduleLoading.value = true
try {
const data = await get<ScheduleSlotPreview[]>('/admin/schedule/preview', { date })
const data = await previewScheduleByDate(date)
schedulePreview.value = data
return data
} finally {
@@ -224,6 +239,10 @@ export const useAdminStore = defineStore('admin', () => {
}
}
async function previewScheduleByDate(date: string): Promise<ScheduleSlotPreview[]> {
return get<ScheduleSlotPreview[]>('/admin/schedule/preview', { date })
}
async function publishDaySlots(dto: PublishDaySlotsDto): Promise<void> {
await post('/admin/schedule/publish', dto as unknown as Record<string, unknown>)
await fetchSchedulePreview(dto.date)
@@ -275,6 +294,9 @@ export const useAdminStore = defineStore('admin', () => {
fetchAdminBookings,
// Members
fetchMembers,
fetchMemberDetail,
updateMemberProfile,
arrangeMemberBooking,
getUserMembership,
updateUserMembership,
deleteUserMembership,
@@ -285,6 +307,7 @@ export const useAdminStore = defineStore('admin', () => {
generateSlots,
// Schedule
fetchSchedulePreview,
previewScheduleByDate,
publishDaySlots,
// Stats
fetchDashboardStats,