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 验证
60 lines
1.6 KiB
Vue
60 lines
1.6 KiB
Vue
<script setup lang="ts">
|
|
import { computed } from 'vue'
|
|
import { useRoute, useRouter } from 'vue-router'
|
|
|
|
import AdminFulfillmentBindingsView from './bindings/AdminFulfillmentBindingsView.vue'
|
|
import AdminKuaishouCloudFulfillmentView from './kuaishou-cloud/AdminKuaishouCloudFulfillmentView.vue'
|
|
|
|
type FulfillmentTabKey = 'legacy' | 'kuaishou-cloud'
|
|
|
|
const route = useRoute()
|
|
const router = useRouter()
|
|
|
|
const activeTab = computed<FulfillmentTabKey>({
|
|
get() {
|
|
const value = String(route.query.tab || '').trim()
|
|
return value === 'kuaishou-cloud' ? 'kuaishou-cloud' : 'legacy'
|
|
},
|
|
set(value) {
|
|
const next = value === 'kuaishou-cloud' ? 'kuaishou-cloud' : 'legacy'
|
|
void router.replace({
|
|
path: '/admin/platform-fulfillment',
|
|
query: next === 'legacy' ? {} : { tab: next },
|
|
})
|
|
},
|
|
})
|
|
</script>
|
|
|
|
<template>
|
|
<section class="hub-panel">
|
|
<AdminPageHeader
|
|
title="履约配置中心"
|
|
description="维护外部商品到内部 SKU 的映射规则,旧规则和快手 Cloud 新流程都在这里配置。"
|
|
/>
|
|
|
|
<el-tabs v-model="activeTab" class="hub-tabs">
|
|
<el-tab-pane label="旧履约规则" name="legacy">
|
|
<AdminFulfillmentBindingsView />
|
|
</el-tab-pane>
|
|
<el-tab-pane label="快手 Cloud 新履约" name="kuaishou-cloud">
|
|
<AdminKuaishouCloudFulfillmentView />
|
|
</el-tab-pane>
|
|
</el-tabs>
|
|
</section>
|
|
</template>
|
|
|
|
<style scoped>
|
|
.hub-panel {
|
|
display: grid;
|
|
gap: var(--space-4);
|
|
}
|
|
|
|
:deep(.hub-tabs .el-tabs__header) {
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
:deep(.hub-tabs .el-tabs__content) {
|
|
padding-top: var(--space-4);
|
|
}
|
|
</style>
|