diff --git a/src/api/subscription.ts b/src/api/subscription.ts index e8a9be5..085b193 100644 --- a/src/api/subscription.ts +++ b/src/api/subscription.ts @@ -103,6 +103,20 @@ export interface SubscriptionMemberSaveResult { total: number } +/** 我的订阅条目(被订阅者视角;含提供者定制的远端页面入口) */ +export interface MySubscriptionItem { + SubscriptionGroupUUID: string + GroupName: string + GroupDesc: string + GroupStatus: number + Providers: SubscriptionCompanyItem[] + /** 提供者声明的定制页远端入口(空=提供者尚未提供定制页) */ + RemoteEntry: string + RemoteModule: string + /** 我在该产品下订阅的部门名(展示用) */ + MyDeptNames: string[] +} + /** 订阅式软件提供 API 客户端 */ export const subscriptionApi = { /** 订阅组(产品)列表(含提供者/消费者公司) */ @@ -166,4 +180,10 @@ export const subscriptionApi = { /** 删除一条订阅成员 */ deleteMember: (SubscriptionGroupUUID: string, SubscriptionMemberUUID: string): Promise => post('/API/Subscription/Member/Delete', { SubscriptionGroupUUID, SubscriptionMemberUUID }), + + // ==================== 我的订阅(被订阅者视角) ==================== + + /** 当前登录用户已订阅的产品(含提供者定制页远端入口) */ + mySubscriptions: (): Promise<{ list: MySubscriptionItem[]; total: number }> => + get<{ list: MySubscriptionItem[]; total: number }>('/API/Subscription/MySubscriptions'), } diff --git a/src/apps/remoteRoutes.ts b/src/apps/remoteRoutes.ts index eccec37..3eb6575 100644 --- a/src/apps/remoteRoutes.ts +++ b/src/apps/remoteRoutes.ts @@ -40,3 +40,30 @@ export function InstallRemoteAppRoutes(router: Router): void { meta: { title: '远端应用', requiresAuth: true }, }) } + +/** + * 为「产品定制页」登记远端应用模块,返回可直接用于 `/remote-app/:code` 的 AppCode + * + * 订阅式软件提供场景:提供者子服务器把定制页入口(RemoteEntry)声明到主服务器, + * 消费者在「我的订阅」里登记后点开,即由 RemoteAppHost 运行时加载并原生渲染。 + */ +export function RegisterProductRemoteApp( + GroupUUID: string, + Title: string, + RemoteEntry: string, + RemoteModule = 'default', +): string { + const Code = `sub-${GroupUUID}` + registerRemoteApp({ + AppCode: Code, + Title: Title || '定制页', + Icon: 'Star', + FrontendRoute: `/remote-app/${Code}`, + FrontendType: 'remote', + LegacySrc: '', + RemoteEntry, + RemoteModule: RemoteModule || 'default', + ServiceName: 'gvsd-service-server', + }) + return Code +} diff --git a/src/router/index.ts b/src/router/index.ts index 2ef73f1..2828eae 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -469,6 +469,12 @@ export const staticRoutes: RouteRecordRaw[] = [ component: () => import('@/views/subscription/Relation.vue'), meta: { title: '订阅关系', icon: 'Share', requiresAuth: true, menuGuarded: true }, }, + { + path: 'subscription/my', + name: 'SubscriptionMy', + component: () => import('@/views/subscription/MySubscriptions.vue'), + meta: { title: '我的订阅', icon: 'Star', requiresAuth: true, menuGuarded: true }, + }, // === OA 办公自动化流程(审批/请假/出差/会议/公告/汇报) === { path: 'oa/approval', diff --git a/src/views/subscription/MySubscriptions.vue b/src/views/subscription/MySubscriptions.vue new file mode 100644 index 0000000..98f1ac5 --- /dev/null +++ b/src/views/subscription/MySubscriptions.vue @@ -0,0 +1,177 @@ + + + + +