From 30bd077e93b07d2dfea763854fb4acfc025fb16a Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Fri, 2 Oct 2026 23:12:32 +0800 Subject: [PATCH] =?UTF-8?q?feat(gerp):=20=E9=85=8D=E7=BD=AE=E9=A1=B5?= =?UTF-8?q?=E6=B3=A8=E5=85=A5=E3=80=8C=E5=BA=94=E7=94=A8=E8=AE=A2=E9=98=85?= =?UTF-8?q?=E6=96=B9=E3=80=8D=E5=8D=A1=E7=89=87=EF=BC=8C=E8=AE=A2=E9=98=85?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E6=96=B0=E5=A2=9E=E8=BD=AF=E4=BB=B6=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ConfigPanel.vue 重写为可编辑卡片:按租户分组多选提供者/消费者公司(互斥),保存应用级订阅方(初始化引用) - apps/index.ts:subscription 入口改 /subscription/software,注入卡片改「应用订阅方」 - router:新增 /subscription/software(软件管理,与订阅组管理同页不同入口) - Group.vue:按路由切换页面标题(软件管理 / 订阅组管理) --- src/api/subscription.ts | 22 +++ src/apps/index.ts | 11 +- src/router/index.ts | 6 + src/views/subscription/ConfigPanel.vue | 215 ++++++++++++++----------- src/views/subscription/Group.vue | 5 +- 5 files changed, 159 insertions(+), 100 deletions(-) diff --git a/src/api/subscription.ts b/src/api/subscription.ts index b2f042a..7e6273b 100644 --- a/src/api/subscription.ts +++ b/src/api/subscription.ts @@ -45,6 +45,20 @@ export interface SubscriptionGroupPayload { Consumers: string[] } +/** 应用级订阅方(应用本身的两方公司,不分具体产品) */ +export interface SubscriptionAppParties { + AppUUID: string + Providers: SubscriptionCompanyItem[] + Consumers: SubscriptionCompanyItem[] +} + +/** 应用级订阅方保存入参(整体重写) */ +export interface SubscriptionAppPartyPayload { + AppUUID: string + Providers: string[] + Consumers: string[] +} + /** 订阅式软件提供 API 客户端 */ export const subscriptionApi = { /** 订阅组(产品)列表(含提供者/消费者公司) */ @@ -66,4 +80,12 @@ export const subscriptionApi = { /** 可选公司列表(当前管理员全部可管理公司,含所属租户名) */ companies: (): Promise<{ list: SubscriptionCompanyItem[]; total: number; Scope: string }> => get<{ list: SubscriptionCompanyItem[]; total: number; Scope: string }>('/API/Subscription/Companies'), + + /** 应用级订阅方(应用配置页注入卡片:提供者/消费者公司,不分产品) */ + appParties: (AppUUID: string): Promise => + get('/API/Subscription/AppParties', { AppUUID }), + + /** 保存应用级订阅方(整体重写) */ + saveAppParties: (data: SubscriptionAppPartyPayload): Promise => + post('/API/Subscription/AppParty/Save', data), } diff --git a/src/apps/index.ts b/src/apps/index.ts index c0b6f76..fe3c7b9 100644 --- a/src/apps/index.ts +++ b/src/apps/index.ts @@ -165,16 +165,15 @@ const builtin: Record = { AppCode: 'subscription', Title: '订阅式软件提供', Icon: 'Connection', - FrontendRoute: '/subscription/group', + FrontendRoute: '/subscription/software', FrontendType: 'vue', LegacySrc: '', - // 注入到「应用配置页」的自定义区块:展示当前范围作为提供者/消费者参与的产品 + // 注入到「应用配置页」的自定义卡片:确定本应用自身的提供者/消费者公司(初始化引用) ConfigPanels: [ { - Key: 'subscription-relation-overview', - Title: '订阅关系概览', - Sub: '当前范围作为提供者 / 消费者参与的产品(按公司隔离)', - CompanyOnly: true, + Key: 'subscription-app-party', + Title: '应用订阅方', + Sub: '确定本应用自身的提供者公司与消费者公司(不分具体产品),作为订阅关系的初始化引用', Component: () => import('@/views/subscription/ConfigPanel.vue'), }, ], diff --git a/src/router/index.ts b/src/router/index.ts index 61845dc..2ef73f1 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -451,6 +451,12 @@ export const staticRoutes: RouteRecordRaw[] = [ meta: { title: '绩效管理', icon: 'TrendCharts', requiresAuth: true, menuGuarded: true }, }, // === 订阅式软件提供(订阅组=产品:提供者/消费者公司) === + { + path: 'subscription/software', + name: 'SubscriptionSoftware', + component: () => import('@/views/subscription/Group.vue'), + meta: { title: '软件管理', icon: 'Management', requiresAuth: true, menuGuarded: true }, + }, { path: 'subscription/group', name: 'SubscriptionGroup', diff --git a/src/views/subscription/ConfigPanel.vue b/src/views/subscription/ConfigPanel.vue index 8029cbf..56ea2e6 100644 --- a/src/views/subscription/ConfigPanel.vue +++ b/src/views/subscription/ConfigPanel.vue @@ -1,20 +1,21 @@ diff --git a/src/views/subscription/Group.vue b/src/views/subscription/Group.vue index bb787c9..1b00689 100644 --- a/src/views/subscription/Group.vue +++ b/src/views/subscription/Group.vue @@ -7,6 +7,7 @@ * (跨租户管理员可选任意租户的公司)。 */ import { computed, onMounted, reactive, ref } from 'vue' +import { useRoute } from 'vue-router' import { ElMessage, ElMessageBox } from 'element-plus' import { setPageTitle } from '@/utils/serverScope' import { @@ -16,7 +17,9 @@ import { type SubscriptionGroupPayload, } from '@/api/subscription' -setPageTitle('订阅组管理') +// 同一页面挂两个菜单:软件管理(/subscription/software)与 订阅组管理(/subscription/group) +const route = useRoute() +setPageTitle(route.path.includes('/software') ? '软件管理' : '订阅组管理') const loading = ref(false) const saving = ref(false)