perf: 优化订阅刷新逻辑
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user