重构:前端架构优化 - 消灭巨石文件,统一代码规范

Phase 1 - 消灭巨石页面:
- 拆分 AdminKuaishouCloudFulfillmentView (1,224行→kuaishou-cloud/子目录)
- 拆分 AdminFulfillmentBindingsView (989行→bindings/子目录)
- 拆分 AdminTaskDetailView (1,007行→9个子组件+2个composable)
- 合并去重 useClaimPage + useAdminManualRedeemPage (1,554行→共享模块+差异化薄层)
- 拆分 services/admin/platform-config.ts (477行→8个领域子模块)

Phase 2 - 架构收口:
- 拆分 types/admin.ts (925行→13个子文件+platform-config/子目录)
- 统一 API code 检查(http.ts拦截器统一处理业务错误)
- 修改 apiPost 签名消除 as unknown as 类型断言(6处)
- 新增 BusinessError 类型便于错误分类处理

所有改动通过 vue-tsc --noEmit 零错误和 vite build 验证
This commit is contained in:
yml2213
2026-05-17 09:26:13 +08:00
parent d8c411d67f
commit a77198b218
81 changed files with 6498 additions and 5248 deletions
@@ -1,476 +0,0 @@
import { apiGet, apiPost } from '@/lib/http'
import type {
AdminAgisoMessagingDefaults,
AdminAgisoObservedShopItem,
AdminAgisoShopConfigItem,
AdminCloudtentaclesLoginTestResult,
AdminCloudtentaclesPersistedSession,
AdminCloudtentaclesSkuListResult,
AdminCloudtentaclesSendSmsResult,
AdminCloudtentaclesSourceConfig,
AdminCloudtentaclesValidateSessionResult,
AdminFulfillmentBindingConfigItem,
AdminFulfillmentLookupResult,
AdminNinetyoneOrderActionResult,
AdminNinetyoneOrderListResult,
AdminNotificationConfig,
AdminNotificationTestResult,
AdminScheduledJobsConfig,
AdminScheduledJobsResponse,
AdminKuaishouCloudFulfillmentConfig,
AdminKuaishouEticketConsumeResult,
AdminKuaishouEticketDetailResult,
AdminKuaishouEticketShopInfoResult,
AdminKuaishouEticketSourceConfig,
AdminObservedProductItem,
} from '@/types/admin'
export function fetchAdminAgisoShopConfigs() {
return apiGet<{
filePath: string
defaults: AdminAgisoMessagingDefaults
shops: AdminAgisoShopConfigItem[]
observedShops: AdminAgisoObservedShopItem[]
}>('/api/v1/admin/platform-config/agiso-shops')
}
export function saveAdminAgisoShopConfigs(payload: {
defaults: AdminAgisoMessagingDefaults
shops: Array<Record<string, unknown>>
}) {
return apiPost<{
filePath: string
defaults: AdminAgisoMessagingDefaults
shops: AdminAgisoShopConfigItem[]
}>('/api/v1/admin/platform-config/agiso-shops', payload)
}
export function fetchAdminNotificationConfig() {
return apiGet<{
filePath: string
source: AdminNotificationConfig
}>('/api/v1/admin/platform-config/notifications')
}
export function saveAdminNotificationConfig(payload: AdminNotificationConfig) {
return apiPost<{
filePath: string
source: AdminNotificationConfig
}>('/api/v1/admin/platform-config/notifications', payload as unknown as Record<string, unknown>)
}
export function testAdminNotification(payload: { title?: string; body?: string; url?: string }) {
return apiPost<AdminNotificationTestResult>(
'/api/v1/admin/platform-config/notifications/test',
payload,
)
}
export function fetchAdminScheduledJobsConfig() {
return apiGet<AdminScheduledJobsResponse>('/api/v1/admin/platform-config/scheduled-jobs')
}
export function saveAdminScheduledJobsConfig(payload: AdminScheduledJobsConfig) {
return apiPost<AdminScheduledJobsResponse>(
'/api/v1/admin/platform-config/scheduled-jobs',
payload as unknown as Record<string, unknown>,
)
}
export function runAdminScheduledJob(jobId: string) {
return apiPost<{
result: Record<string, unknown>
runtime: AdminScheduledJobsResponse['runtime']
}>(`/api/v1/admin/platform-config/scheduled-jobs/${jobId}/run`, {})
}
export function fetchAdminNinetyoneOrders(
params: {
page?: number
pageSize?: number
status?: string
} = {},
) {
const searchParams = new URLSearchParams()
if (params.page) {
searchParams.set('page', String(params.page))
}
if (params.pageSize) {
searchParams.set('pageSize', String(params.pageSize))
}
if (params.status) {
searchParams.set('status', params.status)
}
const queryString = searchParams.toString()
return apiGet<AdminNinetyoneOrderListResult>(
`/api/v1/admin/platform-config/ninetyone/orders${queryString ? `?${queryString}` : ''}`,
)
}
export function retryAdminNinetyoneOrder(orderId: number | string) {
return apiPost<AdminNinetyoneOrderActionResult>(
`/api/v1/admin/platform-config/ninetyone/orders/${orderId}/retry`,
{},
)
}
export function failAdminNinetyoneOrder(orderId: number | string, payload: { reason?: string }) {
return apiPost<AdminNinetyoneOrderActionResult>(
`/api/v1/admin/platform-config/ninetyone/orders/${orderId}/fail`,
payload,
)
}
export function fetchAdminKuaishouEticketSourceConfig() {
return apiGet<{
filePath: string
source: AdminKuaishouEticketSourceConfig
}>('/api/v1/admin/platform-config/kuaishou-eticket-source')
}
export function saveAdminKuaishouEticketSourceConfig(payload: AdminKuaishouEticketSourceConfig) {
return apiPost<{
filePath: string
source: AdminKuaishouEticketSourceConfig
}>(
'/api/v1/admin/platform-config/kuaishou-eticket-source',
payload as unknown as Record<string, unknown>,
)
}
export function queryAdminKuaishouEticketDetail(payload: {
baseUrl?: string
shopId?: string
cookie?: string
eTicketId: string
}) {
return apiPost<AdminKuaishouEticketDetailResult>(
'/api/v1/admin/platform-config/kuaishou-eticket/query-detail',
payload,
)
}
export function queryAdminKuaishouEticketShopInfo(payload: {
baseUrl?: string
shopId?: string
cookie?: string
}) {
return apiPost<AdminKuaishouEticketShopInfoResult>(
'/api/v1/admin/platform-config/kuaishou-eticket/query-shop-info',
payload,
)
}
export function consumeAdminKuaishouEticket(payload: {
baseUrl?: string
shopId?: string
cookie?: string
eTicketId: string
oid?: string
formToken?: string
num?: number
storeId?: string
}) {
return apiPost<AdminKuaishouEticketConsumeResult>(
'/api/v1/admin/platform-config/kuaishou-eticket/consume',
payload,
)
}
export function fetchAdminCloudtentaclesSourceConfig() {
return apiGet<{
filePath: string
sessionFilePath: string
source: AdminCloudtentaclesSourceConfig
session: AdminCloudtentaclesPersistedSession
}>('/api/v1/admin/platform-config/cloudtentacles-source')
}
export function saveAdminCloudtentaclesSourceConfig(payload: AdminCloudtentaclesSourceConfig) {
return apiPost<{
filePath: string
sessionFilePath: string
source: AdminCloudtentaclesSourceConfig
session: AdminCloudtentaclesPersistedSession
}>(
'/api/v1/admin/platform-config/cloudtentacles-source',
payload as unknown as Record<string, unknown>,
)
}
export function sendAdminCloudtentaclesSmsCode(payload: {
baseUrl?: string
username?: string
phone?: string
deviceId?: string
deviceType?: number
}) {
return apiPost<AdminCloudtentaclesSendSmsResult>(
'/api/v1/admin/platform-config/cloudtentacles/send-sms-code',
payload,
)
}
export function testAdminCloudtentaclesLogin(payload: {
baseUrl?: string
username?: string
password?: string
phone?: string
code?: string
deviceId?: string
deviceType?: number
}) {
return apiPost<AdminCloudtentaclesLoginTestResult>(
'/api/v1/admin/platform-config/cloudtentacles/test-login',
payload,
)
}
export function validateAdminCloudtentaclesSession(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
}) {
return apiPost<AdminCloudtentaclesValidateSessionResult>(
'/api/v1/admin/platform-config/cloudtentacles/validate-session',
payload,
)
}
export function fetchAdminCloudtentaclesAsset(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
}) {
return apiPost<Record<string, unknown>>(
'/api/v1/admin/platform-config/cloudtentacles/asset',
payload,
)
}
export function fetchAdminCloudtentaclesCategories(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
}) {
return apiPost<Record<string, unknown>>(
'/api/v1/admin/platform-config/cloudtentacles/categories',
payload,
)
}
export function fetchAdminCloudtentaclesSkuList(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
}) {
return apiPost<AdminCloudtentaclesSkuListResult>(
'/api/v1/admin/platform-config/cloudtentacles/sku/list',
payload,
)
}
export function buyAdminCloudtentaclesSku(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
id?: number
count?: number
}) {
return apiPost<Record<string, unknown>>(
'/api/v1/admin/platform-config/cloudtentacles/sku/buy',
payload,
)
}
export function useAdminCloudtentaclesSku(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
id?: number
virtualNumberId?: number
phone?: string
}) {
return apiPost<Record<string, unknown>>(
'/api/v1/admin/platform-config/cloudtentacles/sku/use',
payload,
)
}
export function fetchAdminCloudtentaclesKnapsack(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
}) {
return apiPost<Record<string, unknown>>(
'/api/v1/admin/platform-config/cloudtentacles/knapsack',
payload,
)
}
export function fetchAdminCloudtentaclesVnList(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
key?: string
}) {
return apiPost<Record<string, unknown>>(
'/api/v1/admin/platform-config/cloudtentacles/vn/list',
payload,
)
}
export function appointAdminCloudtentaclesVn(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
key?: string
}) {
return apiPost<Record<string, unknown>>(
'/api/v1/admin/platform-config/cloudtentacles/vn/appoint',
payload,
)
}
export function generateAdminCloudtentaclesVnLoginCode(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
key?: string
id?: number
}) {
return apiPost<Record<string, unknown>>(
'/api/v1/admin/platform-config/cloudtentacles/vn/generate-login-code',
payload,
)
}
export function fetchAdminCloudtentaclesVnCode(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
key?: string
phone?: string
}) {
return apiPost<Record<string, unknown>>(
'/api/v1/admin/platform-config/cloudtentacles/vn/fetch-code',
payload,
)
}
export function verifyAdminCloudtentaclesVnCode(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
key?: string
id?: number
code?: string
}) {
return apiPost<Record<string, unknown>>(
'/api/v1/admin/platform-config/cloudtentacles/vn/verify-code',
payload,
)
}
export function fetchAdminCloudtentaclesBindUrl(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
key?: string
id?: number
}) {
return apiPost<Record<string, unknown>>(
'/api/v1/admin/platform-config/cloudtentacles/vn/bind-url',
payload,
)
}
export function backAdminCloudtentaclesVn(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
key?: string
id?: number
}) {
return apiPost<Record<string, unknown>>(
'/api/v1/admin/platform-config/cloudtentacles/vn/back',
payload,
)
}
export function runAdminCloudtentaclesFullFlow(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
skuId?: number
skuCount?: number
vnKey?: string
}) {
return apiPost<Record<string, unknown>>(
'/api/v1/admin/platform-config/cloudtentacles/debug/full-flow',
payload,
)
}
export function fetchAdminFulfillmentBindingConfigs() {
return apiGet<{
filePath: string
bindings: AdminFulfillmentBindingConfigItem[]
observedProducts: AdminObservedProductItem[]
}>('/api/v1/admin/platform-config/fulfillment-bindings')
}
export function lookupAdminFulfillmentBindingOrder(payload: {
provider?: string
platform?: string
shopId: string
platformOrderId: string
}) {
return apiPost<AdminFulfillmentLookupResult>(
'/api/v1/admin/platform-config/fulfillment-bindings/lookup-order',
payload,
)
}
export function saveAdminFulfillmentBindingConfigs(payload: {
bindings: Array<Record<string, unknown>>
}) {
return apiPost<{
filePath: string
bindings: AdminFulfillmentBindingConfigItem[]
}>('/api/v1/admin/platform-config/fulfillment-bindings', payload)
}
export function fetchAdminKuaishouCloudFulfillmentConfig() {
return apiGet<{
filePath: string
source: AdminKuaishouCloudFulfillmentConfig
}>('/api/v1/admin/platform-config/kuaishou-cloud-fulfillment')
}
export function saveAdminKuaishouCloudFulfillmentConfig(
payload: AdminKuaishouCloudFulfillmentConfig,
) {
return apiPost<{
filePath: string
source: AdminKuaishouCloudFulfillmentConfig
}>(
'/api/v1/admin/platform-config/kuaishou-cloud-fulfillment',
payload as unknown as Record<string, unknown>,
)
}
@@ -0,0 +1,26 @@
import { apiGet, apiPost } from '@/lib/http'
import type {
AdminAgisoMessagingDefaults,
AdminAgisoObservedShopItem,
AdminAgisoShopConfigItem,
} from '@/types/admin'
export function fetchAdminAgisoShopConfigs() {
return apiGet<{
filePath: string
defaults: AdminAgisoMessagingDefaults
shops: AdminAgisoShopConfigItem[]
observedShops: AdminAgisoObservedShopItem[]
}>('/api/v1/admin/platform-config/agiso-shops')
}
export function saveAdminAgisoShopConfigs(payload: {
defaults: AdminAgisoMessagingDefaults
shops: Array<Record<string, unknown>>
}) {
return apiPost<{
filePath: string
defaults: AdminAgisoMessagingDefaults
shops: AdminAgisoShopConfigItem[]
}>('/api/v1/admin/platform-config/agiso-shops', payload)
}
@@ -0,0 +1,256 @@
import { apiGet, apiPost } from '@/lib/http'
import type {
AdminCloudtentaclesLoginTestResult,
AdminCloudtentaclesPersistedSession,
AdminCloudtentaclesSkuListResult,
AdminCloudtentaclesSendSmsResult,
AdminCloudtentaclesSourceConfig,
AdminCloudtentaclesValidateSessionResult,
} from '@/types/admin'
export function fetchAdminCloudtentaclesSourceConfig() {
return apiGet<{
filePath: string
sessionFilePath: string
source: AdminCloudtentaclesSourceConfig
session: AdminCloudtentaclesPersistedSession
}>('/api/v1/admin/platform-config/cloudtentacles-source')
}
export function saveAdminCloudtentaclesSourceConfig(payload: AdminCloudtentaclesSourceConfig) {
return apiPost<{
filePath: string
sessionFilePath: string
source: AdminCloudtentaclesSourceConfig
session: AdminCloudtentaclesPersistedSession
}>('/api/v1/admin/platform-config/cloudtentacles-source', payload)
}
export function sendAdminCloudtentaclesSmsCode(payload: {
baseUrl?: string
username?: string
phone?: string
deviceId?: string
deviceType?: number
}) {
return apiPost<AdminCloudtentaclesSendSmsResult>(
'/api/v1/admin/platform-config/cloudtentacles/send-sms-code',
payload,
)
}
export function testAdminCloudtentaclesLogin(payload: {
baseUrl?: string
username?: string
password?: string
phone?: string
code?: string
deviceId?: string
deviceType?: number
}) {
return apiPost<AdminCloudtentaclesLoginTestResult>(
'/api/v1/admin/platform-config/cloudtentacles/test-login',
payload,
)
}
export function validateAdminCloudtentaclesSession(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
}) {
return apiPost<AdminCloudtentaclesValidateSessionResult>(
'/api/v1/admin/platform-config/cloudtentacles/validate-session',
payload,
)
}
export function fetchAdminCloudtentaclesAsset(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
}) {
return apiPost<Record<string, unknown>>(
'/api/v1/admin/platform-config/cloudtentacles/asset',
payload,
)
}
export function fetchAdminCloudtentaclesCategories(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
}) {
return apiPost<Record<string, unknown>>(
'/api/v1/admin/platform-config/cloudtentacles/categories',
payload,
)
}
export function fetchAdminCloudtentaclesSkuList(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
}) {
return apiPost<AdminCloudtentaclesSkuListResult>(
'/api/v1/admin/platform-config/cloudtentacles/sku/list',
payload,
)
}
export function buyAdminCloudtentaclesSku(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
id?: number
count?: number
}) {
return apiPost<Record<string, unknown>>(
'/api/v1/admin/platform-config/cloudtentacles/sku/buy',
payload,
)
}
export function useAdminCloudtentaclesSku(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
id?: number
virtualNumberId?: number
phone?: string
}) {
return apiPost<Record<string, unknown>>(
'/api/v1/admin/platform-config/cloudtentacles/sku/use',
payload,
)
}
export function fetchAdminCloudtentaclesKnapsack(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
}) {
return apiPost<Record<string, unknown>>(
'/api/v1/admin/platform-config/cloudtentacles/knapsack',
payload,
)
}
export function fetchAdminCloudtentaclesVnList(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
key?: string
}) {
return apiPost<Record<string, unknown>>(
'/api/v1/admin/platform-config/cloudtentacles/vn/list',
payload,
)
}
export function appointAdminCloudtentaclesVn(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
key?: string
}) {
return apiPost<Record<string, unknown>>(
'/api/v1/admin/platform-config/cloudtentacles/vn/appoint',
payload,
)
}
export function generateAdminCloudtentaclesVnLoginCode(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
key?: string
id?: number
}) {
return apiPost<Record<string, unknown>>(
'/api/v1/admin/platform-config/cloudtentacles/vn/generate-login-code',
payload,
)
}
export function fetchAdminCloudtentaclesVnCode(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
key?: string
phone?: string
}) {
return apiPost<Record<string, unknown>>(
'/api/v1/admin/platform-config/cloudtentacles/vn/fetch-code',
payload,
)
}
export function verifyAdminCloudtentaclesVnCode(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
key?: string
id?: number
code?: string
}) {
return apiPost<Record<string, unknown>>(
'/api/v1/admin/platform-config/cloudtentacles/vn/verify-code',
payload,
)
}
export function fetchAdminCloudtentaclesBindUrl(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
key?: string
id?: number
}) {
return apiPost<Record<string, unknown>>(
'/api/v1/admin/platform-config/cloudtentacles/vn/bind-url',
payload,
)
}
export function backAdminCloudtentaclesVn(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
key?: string
id?: number
}) {
return apiPost<Record<string, unknown>>(
'/api/v1/admin/platform-config/cloudtentacles/vn/back',
payload,
)
}
export function runAdminCloudtentaclesFullFlow(payload: {
baseUrl?: string
token?: string
deviceId?: string
deviceType?: number
skuId?: number
skuCount?: number
vnKey?: string
}) {
return apiPost<Record<string, unknown>>(
'/api/v1/admin/platform-config/cloudtentacles/debug/full-flow',
payload,
)
}
@@ -0,0 +1,35 @@
import { apiGet, apiPost } from '@/lib/http'
import type {
AdminFulfillmentBindingConfigItem,
AdminFulfillmentLookupResult,
AdminObservedProductItem,
} from '@/types/admin'
export function fetchAdminFulfillmentBindingConfigs() {
return apiGet<{
filePath: string
bindings: AdminFulfillmentBindingConfigItem[]
observedProducts: AdminObservedProductItem[]
}>('/api/v1/admin/platform-config/fulfillment-bindings')
}
export function lookupAdminFulfillmentBindingOrder(payload: {
provider?: string
platform?: string
shopId: string
platformOrderId: string
}) {
return apiPost<AdminFulfillmentLookupResult>(
'/api/v1/admin/platform-config/fulfillment-bindings/lookup-order',
payload,
)
}
export function saveAdminFulfillmentBindingConfigs(payload: {
bindings: Array<Record<string, unknown>>
}) {
return apiPost<{
filePath: string
bindings: AdminFulfillmentBindingConfigItem[]
}>('/api/v1/admin/platform-config/fulfillment-bindings', payload)
}
@@ -0,0 +1,8 @@
export * from './agiso'
export * from './notifications'
export * from './scheduled-jobs'
export * from './ninetyone'
export * from './kuaishou-eticket'
export * from './cloudtentacles'
export * from './fulfillment-bindings'
export * from './kuaishou-cloud-fulfillment'
@@ -0,0 +1,18 @@
import { apiGet, apiPost } from '@/lib/http'
import type { AdminKuaishouCloudFulfillmentConfig } from '@/types/admin'
export function fetchAdminKuaishouCloudFulfillmentConfig() {
return apiGet<{
filePath: string
source: AdminKuaishouCloudFulfillmentConfig
}>('/api/v1/admin/platform-config/kuaishou-cloud-fulfillment')
}
export function saveAdminKuaishouCloudFulfillmentConfig(
payload: AdminKuaishouCloudFulfillmentConfig,
) {
return apiPost<{
filePath: string
source: AdminKuaishouCloudFulfillmentConfig
}>('/api/v1/admin/platform-config/kuaishou-cloud-fulfillment', payload)
}
@@ -0,0 +1,60 @@
import { apiGet, apiPost } from '@/lib/http'
import type {
AdminKuaishouEticketConsumeResult,
AdminKuaishouEticketDetailResult,
AdminKuaishouEticketShopInfoResult,
AdminKuaishouEticketSourceConfig,
} from '@/types/admin'
export function fetchAdminKuaishouEticketSourceConfig() {
return apiGet<{
filePath: string
source: AdminKuaishouEticketSourceConfig
}>('/api/v1/admin/platform-config/kuaishou-eticket-source')
}
export function saveAdminKuaishouEticketSourceConfig(payload: AdminKuaishouEticketSourceConfig) {
return apiPost<{
filePath: string
source: AdminKuaishouEticketSourceConfig
}>('/api/v1/admin/platform-config/kuaishou-eticket-source', payload)
}
export function queryAdminKuaishouEticketDetail(payload: {
baseUrl?: string
shopId?: string
cookie?: string
eTicketId: string
}) {
return apiPost<AdminKuaishouEticketDetailResult>(
'/api/v1/admin/platform-config/kuaishou-eticket/query-detail',
payload,
)
}
export function queryAdminKuaishouEticketShopInfo(payload: {
baseUrl?: string
shopId?: string
cookie?: string
}) {
return apiPost<AdminKuaishouEticketShopInfoResult>(
'/api/v1/admin/platform-config/kuaishou-eticket/query-shop-info',
payload,
)
}
export function consumeAdminKuaishouEticket(payload: {
baseUrl?: string
shopId?: string
cookie?: string
eTicketId: string
oid?: string
formToken?: string
num?: number
storeId?: string
}) {
return apiPost<AdminKuaishouEticketConsumeResult>(
'/api/v1/admin/platform-config/kuaishou-eticket/consume',
payload,
)
}
@@ -0,0 +1,42 @@
import { apiGet, apiPost } from '@/lib/http'
import type {
AdminNinetyoneOrderActionResult,
AdminNinetyoneOrderListResult,
} from '@/types/admin'
export function fetchAdminNinetyoneOrders(
params: {
page?: number
pageSize?: number
status?: string
} = {},
) {
const searchParams = new URLSearchParams()
if (params.page) {
searchParams.set('page', String(params.page))
}
if (params.pageSize) {
searchParams.set('pageSize', String(params.pageSize))
}
if (params.status) {
searchParams.set('status', params.status)
}
const queryString = searchParams.toString()
return apiGet<AdminNinetyoneOrderListResult>(
`/api/v1/admin/platform-config/ninetyone/orders${queryString ? `?${queryString}` : ''}`,
)
}
export function retryAdminNinetyoneOrder(orderId: number | string) {
return apiPost<AdminNinetyoneOrderActionResult>(
`/api/v1/admin/platform-config/ninetyone/orders/${orderId}/retry`,
{},
)
}
export function failAdminNinetyoneOrder(orderId: number | string, payload: { reason?: string }) {
return apiPost<AdminNinetyoneOrderActionResult>(
`/api/v1/admin/platform-config/ninetyone/orders/${orderId}/fail`,
payload,
)
}
@@ -0,0 +1,23 @@
import { apiGet, apiPost } from '@/lib/http'
import type { AdminNotificationConfig, AdminNotificationTestResult } from '@/types/admin'
export function fetchAdminNotificationConfig() {
return apiGet<{
filePath: string
source: AdminNotificationConfig
}>('/api/v1/admin/platform-config/notifications')
}
export function saveAdminNotificationConfig(payload: AdminNotificationConfig) {
return apiPost<{
filePath: string
source: AdminNotificationConfig
}>('/api/v1/admin/platform-config/notifications', payload)
}
export function testAdminNotification(payload: { title?: string; body?: string; url?: string }) {
return apiPost<AdminNotificationTestResult>(
'/api/v1/admin/platform-config/notifications/test',
payload,
)
}
@@ -0,0 +1,20 @@
import { apiGet, apiPost } from '@/lib/http'
import type { AdminScheduledJobsConfig, AdminScheduledJobsResponse } from '@/types/admin'
export function fetchAdminScheduledJobsConfig() {
return apiGet<AdminScheduledJobsResponse>('/api/v1/admin/platform-config/scheduled-jobs')
}
export function saveAdminScheduledJobsConfig(payload: AdminScheduledJobsConfig) {
return apiPost<AdminScheduledJobsResponse>(
'/api/v1/admin/platform-config/scheduled-jobs',
payload,
)
}
export function runAdminScheduledJob(jobId: string) {
return apiPost<{
result: Record<string, unknown>
runtime: AdminScheduledJobsResponse['runtime']
}>(`/api/v1/admin/platform-config/scheduled-jobs/${jobId}/run`, {})
}