diff --git a/packages/ui/certd-client/src/views/sys/plugin/api.ts b/packages/ui/certd-client/src/views/sys/plugin/api.ts index 3c64a215c..99360b871 100644 --- a/packages/ui/certd-client/src/views/sys/plugin/api.ts +++ b/packages/ui/certd-client/src/views/sys/plugin/api.ts @@ -110,6 +110,7 @@ export type OnlinePluginBean = { downloadCount?: number; score?: number; aiCheckStatus?: string; + vip?: string; editable?: boolean; selfAuthored?: boolean; installed?: boolean; diff --git a/packages/ui/certd-client/src/views/sys/plugin/components/plugin-item-card.vue b/packages/ui/certd-client/src/views/sys/plugin/components/plugin-item-card.vue index d46859eee..95bc99b55 100644 --- a/packages/ui/certd-client/src/views/sys/plugin/components/plugin-item-card.vue +++ b/packages/ui/certd-client/src/views/sys/plugin/components/plugin-item-card.vue @@ -23,6 +23,9 @@ + + +
@@ -227,6 +230,10 @@ const isDisabled = computed(() => { return props.source === "local" ? props.plugin.disabled : props.plugin.localDisabled; }); +const requiresVip = computed(() => { + return props.plugin.vip === "plus" || props.plugin.needPlus === true; +}); + const canRemoveLocal = computed(() => { return isOwnImportedPlugin.value; }); @@ -626,6 +633,13 @@ function handleVersionClick() { margin-left: 8px; } + .plugin-card__vip-icon { + flex: none; + color: #faad14; + font-size: 16px; + line-height: 1; + } + .plugin-card__title { display: block; min-width: 0; diff --git a/packages/ui/certd-server/db/migration/v10053__plugin_installed.sql b/packages/ui/certd-server/db/migration/v10053__plugin_installed.sql index 09996405b..6df061852 100644 --- a/packages/ui/certd-server/db/migration/v10053__plugin_installed.sql +++ b/packages/ui/certd-server/db/migration/v10053__plugin_installed.sql @@ -3,3 +3,6 @@ ALTER TABLE "pi_plugin" ADD COLUMN "installed" boolean NOT NULL DEFAULT true; UPDATE "pi_plugin" SET "installed" = true; ALTER TABLE "pi_plugin" ADD COLUMN "ai_check_status" varchar(32) NOT NULL DEFAULT ''; + +ALTER TABLE "pi_plugin" ADD COLUMN "vip" varchar(50); + diff --git a/packages/ui/certd-server/src/modules/plugin/entity/plugin.ts b/packages/ui/certd-server/src/modules/plugin/entity/plugin.ts index f3ac0263b..23a109d09 100644 --- a/packages/ui/certd-server/src/modules/plugin/entity/plugin.ts +++ b/packages/ui/certd-server/src/modules/plugin/entity/plugin.ts @@ -77,6 +77,9 @@ export class PluginEntity { @Column({ name: "ai_check_status", comment: "最新版本AI审核状态", length: 32, default: "" }) aiCheckStatus: string; + @Column({ comment: "最低VIP等级", length: 50, nullable: true }) + vip: string; + @Column({ name: "sync_time", comment: "同步时间", nullable: true }) syncTime: number; diff --git a/packages/ui/certd-server/src/modules/plugin/service/plugin-service.ts b/packages/ui/certd-server/src/modules/plugin/service/plugin-service.ts index 14b0430ba..6c6372fb4 100644 --- a/packages/ui/certd-server/src/modules/plugin/service/plugin-service.ts +++ b/packages/ui/certd-server/src/modules/plugin/service/plugin-service.ts @@ -111,6 +111,7 @@ export type OnlinePluginBean = { downloadCount?: number; score?: number; aiCheckStatus?: string; + vip?: string; editable?: boolean; selfAuthored?: boolean; installed?: boolean; @@ -684,6 +685,7 @@ export class PluginService extends BaseService { downloadCount: item.downloadCount, score: item.score, aiCheckStatus: item.aiCheckStatus, + vip: item.vip, syncTime, type: old?.type || "store", disabled: old?.disabled ?? false, @@ -718,6 +720,7 @@ export class PluginService extends BaseService { downloadCount: item.downloadCount, score: item.score, aiCheckStatus: item.aiCheckStatus, + vip: item.vip, syncTime: item.syncTime, installed: isInstalled, localPluginId: isInstalled ? item.id : undefined,