From 3f33e5c2f1f4d78e216f00fc6d7885163c30ec3e Mon Sep 17 00:00:00 2001 From: 18278715334 <18278715334@163.com> Date: Thu, 4 Dec 2025 12:44:54 +0800 Subject: [PATCH] 182878715334@163.com --- src/api/index.js | 10 +- src/components/product/ProductCard.vue | 39 ++++---- src/pages/api/ApiDebugger.vue | 123 +++++++++++++++++------- src/pages/products/detail.vue | 125 +++++++++++++++++++++++-- src/pages/products/index.vue | 86 +++++++++++++++-- src/pages/subscriptions/index.vue | 55 ++++++++++- src/router/index.js | 17 +++- src/stores/user.js | 91 ++++++++++++------ 8 files changed, 447 insertions(+), 99 deletions(-) diff --git a/src/api/index.js b/src/api/index.js index f152c8b..a190e06 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -57,6 +57,11 @@ export const productApi = { getProductApiConfigByCode: (productCode) => request.get(`/products/code/${productCode}/api-config`), getProductApiConfigsByProductIDs: (productIds) => request.get('/products/api-configs', { params: { product_ids: productIds.join(',') } + }), + + // 下载接口文档(支持PDF和Markdown) + downloadProductDocumentation: (productId) => request.get(`/products/${productId}/documentation/download`, { + responseType: 'blob' }) } @@ -81,7 +86,10 @@ export const subscriptionApi = { getMySubscriptionDetail: (id) => request.get(`/my/subscriptions/${id}`), // 获取我的订阅使用情况 (需认证) - getMySubscriptionUsage: (id) => request.get(`/my/subscriptions/${id}/usage`) + getMySubscriptionUsage: (id) => request.get(`/my/subscriptions/${id}/usage`), + + // 取消我的订阅 (需认证) + cancelMySubscription: (id) => request.post(`/my/subscriptions/${id}/cancel`) } // 财务相关接口 diff --git a/src/components/product/ProductCard.vue b/src/components/product/ProductCard.vue index 7a6705c..4709916 100644 --- a/src/components/product/ProductCard.vue +++ b/src/components/product/ProductCard.vue @@ -73,12 +73,12 @@ - 已订阅 + 取消订阅 @@ -104,10 +104,14 @@ const props = defineProps({ isSubscribed: { type: Boolean, default: false + }, + subscription: { + type: Object, + default: null } }) -const emit = defineEmits(['view-detail', 'subscribe']) +const emit = defineEmits(['view-detail', 'subscribe', 'cancel-subscribe']) // 格式化价格 const formatPrice = (price) => { @@ -134,6 +138,11 @@ const handleViewDetail = () => { const handleSubscribe = () => { emit('subscribe', props.product) } + +// 取消订阅 +const handleCancelSubscribe = () => { + emit('cancel-subscribe', props.product) +}