From c937f5afc7df780bd548c22749f9aa8d045db7f4 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Wed, 25 Dec 2024 00:52:39 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E5=85=BC=E5=AE=B9=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../certd-client/src/api/modules/api.basic.ts | 5 +- .../src/router/source/modules/certd.ts | 2 +- .../src/store/modules/settings.ts | 9 +- .../src/views/certd/suite/buy.vue | 2 + .../framework/home/dashboard/suite-card.vue | 11 ++ .../src/views/sys/suite/setting/index.vue | 3 + .../db/migration-mysql/v10018__suite.sql | 137 ++++++++++++++++++ .../db/migration-pg/v10018__suite.sql | 137 ++++++++++++++++++ .../controller/basic/settings-controller.ts | 24 ++- 9 files changed, 326 insertions(+), 4 deletions(-) create mode 100644 packages/ui/certd-server/db/migration-mysql/v10018__suite.sql create mode 100644 packages/ui/certd-server/db/migration-pg/v10018__suite.sql diff --git a/packages/ui/certd-client/src/api/modules/api.basic.ts b/packages/ui/certd-client/src/api/modules/api.basic.ts index 3f251c4e..23b46021 100644 --- a/packages/ui/certd-client/src/api/modules/api.basic.ts +++ b/packages/ui/certd-client/src/api/modules/api.basic.ts @@ -35,7 +35,9 @@ export type SysPublicSetting = { managerOtherUserPipeline?: boolean; icpNo?: string; }; - +export type SuiteSetting = { + enabled?: boolean; +}; export type SysPrivateSetting = { httpProxy?: string; httpsProxy?: string; @@ -67,6 +69,7 @@ export type AllSettings = { siteInfo: SiteInfo; siteEnv: SiteEnv; headerMenus: HeaderMenus; + suiteSetting: SuiteSetting; }; export async function loadAllSettings(): Promise { diff --git a/packages/ui/certd-client/src/router/source/modules/certd.ts b/packages/ui/certd-client/src/router/source/modules/certd.ts index 8e1a2047..190d76a8 100644 --- a/packages/ui/certd-client/src/router/source/modules/certd.ts +++ b/packages/ui/certd-client/src/router/source/modules/certd.ts @@ -138,7 +138,7 @@ export const certdResources = [ meta: { show: () => { const settingStore = useSettingStore(); - return settingStore.isComm; + return settingStore.isComm && settingStore.isSuiteEnabled; }, icon: "ion:cart-outline", auth: true diff --git a/packages/ui/certd-client/src/store/modules/settings.ts b/packages/ui/certd-client/src/store/modules/settings.ts index 63b4b9ef..522633fd 100644 --- a/packages/ui/certd-client/src/store/modules/settings.ts +++ b/packages/ui/certd-client/src/store/modules/settings.ts @@ -5,7 +5,7 @@ import * as _ from "lodash-es"; import { LocalStorage } from "/src/utils/util.storage"; import * as basicApi from "/@/api/modules/api.basic"; -import { HeaderMenus, PlusInfo, SiteEnv, SiteInfo, SysInstallInfo, SysPublicSetting } from "/@/api/modules/api.basic"; +import { HeaderMenus, PlusInfo, SiteEnv, SiteInfo, SuiteSetting, SysInstallInfo, SysPublicSetting } from "/@/api/modules/api.basic"; import { useUserStore } from "/@/store/modules/user"; import { mitter } from "/@/utils/util.mitt"; import { env } from "/@/utils/util.env"; @@ -37,6 +37,7 @@ export interface SettingState { siteEnv?: SiteEnv; headerMenus?: HeaderMenus; inited?: boolean; + suiteSetting?: SuiteSetting; } const defaultThemeConfig = { @@ -88,6 +89,7 @@ export const useSettingStore = defineStore({ headerMenus: { menus: [] }, + suiteSetting: { enabled: false }, inited: false }), getters: { @@ -124,6 +126,10 @@ export const useSettingStore = defineStore({ getHeaderMenus() { // @ts-ignore return this.headerMenus?.menus || { menus: [] }; + }, + isSuiteEnabled() { + // @ts-ignore + return this.suiteSetting?.enabled === true; } }, actions: { @@ -142,6 +148,7 @@ export const useSettingStore = defineStore({ _.merge(this.siteEnv, allSettings.siteEnv || {}); _.merge(this.plusInfo, allSettings.plusInfo || {}); _.merge(this.headerMenus, allSettings.headerMenus || {}); + _.merge(this.suiteSetting, allSettings.suiteSetting || {}); //@ts-ignore this.initSiteInfo(allSettings.siteInfo || {}); }, diff --git a/packages/ui/certd-client/src/views/certd/suite/buy.vue b/packages/ui/certd-client/src/views/certd/suite/buy.vue index ffdc4969..a51598c7 100644 --- a/packages/ui/certd-client/src/views/certd/suite/buy.vue +++ b/packages/ui/certd-client/src/views/certd/suite/buy.vue @@ -22,6 +22,8 @@ + + diff --git a/packages/ui/certd-client/src/views/framework/home/dashboard/suite-card.vue b/packages/ui/certd-client/src/views/framework/home/dashboard/suite-card.vue index 489ab34a..c7718431 100644 --- a/packages/ui/certd-client/src/views/framework/home/dashboard/suite-card.vue +++ b/packages/ui/certd-client/src/views/framework/home/dashboard/suite-card.vue @@ -36,6 +36,9 @@ () +
+ 暂无套餐 去购买 +
@@ -48,6 +51,7 @@ import { ref } from "vue"; import ExpiresTimeText from "/@/components/expires-time-text.vue"; import api, { SuiteDetail } from "/@/views/certd/suite/mine/api"; import { FsIcon } from "@fast-crud/fast-crud"; +import { useRouter } from "vue-router"; defineOptions({ name: "SuiteCard" @@ -60,4 +64,11 @@ async function loadSuiteDetail() { } loadSuiteDetail(); + +const router = useRouter(); +function goBuy() { + router.push({ + path: "/certd/suite/buy" + }); +} diff --git a/packages/ui/certd-client/src/views/sys/suite/setting/index.vue b/packages/ui/certd-client/src/views/sys/suite/setting/index.vue index 98dc318c..3cd7c3be 100644 --- a/packages/ui/certd-client/src/views/sys/suite/setting/index.vue +++ b/packages/ui/certd-client/src/views/sys/suite/setting/index.vue @@ -45,6 +45,7 @@ import { notification } from "ant-design-vue"; import { request } from "/@/api/service"; import SuiteDurationSelector from "/@/views/sys/suite/setting/suite-duration-selector.vue"; import ProductManager from "/@/views/sys/suite/product/index.vue"; +import { useSettingStore } from "/@/store/modules/settings"; defineOptions({ name: "SettingsSuite" @@ -83,11 +84,13 @@ async function loadSettings() { merge(formState, data); } +const settingsStore = useSettingStore(); loadSettings(); const onClick = async () => { const form = await formRef.value.validateFields(); await api.SuiteSettingSave(form); await loadSettings(); + await settingsStore.loadSysSettings(); notification.success({ message: "保存成功" }); diff --git a/packages/ui/certd-server/db/migration-mysql/v10018__suite.sql b/packages/ui/certd-server/db/migration-mysql/v10018__suite.sql new file mode 100644 index 00000000..292554d6 --- /dev/null +++ b/packages/ui/certd-server/db/migration-mysql/v10018__suite.sql @@ -0,0 +1,137 @@ +CREATE TABLE `cd_product` +( + `id` bigint PRIMARY KEY AUTO_INCREMENT NOT NULL, + `icon` varchar(100), + `title` varchar(100), + `type` varchar(100), + `content` varchar(4096), + `duration_prices` varchar(4096), + `duration` bigint, + `price` bigint, + `intro` varchar(4096), + `order` bigint, + `support_buy` boolean, + `disabled` boolean NOT NULL DEFAULT false, + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +CREATE TABLE `cd_trade` +( + `id` bigint PRIMARY KEY AUTO_INCREMENT NOT NULL, + `trade_no` varchar(100), + `user_id` bigint, + `product_id` bigint, + `title` varchar(1024), + `desc` varchar(2048), + `num` bigint, + `duration` bigint, + `price` bigint, + `amount` bigint, + `remark` varchar(2048), + `status` varchar(100), + `pay_type` varchar(50), + `pay_time` bigint, + `pay_no` varchar(100), + `end_time` bigint, + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +CREATE INDEX `index_trade_user_id` ON `cd_trade` (`user_id`); +CREATE UNIQUE INDEX `index_trade_trade_no` ON `cd_trade` (`trade_no`); +CREATE INDEX `index_trade_pay_no` ON `cd_trade` (`pay_type`, `pay_no`); + + +CREATE TABLE `cd_user_suite` +( + `id` bigint PRIMARY KEY AUTO_INCREMENT NOT NULL, + `user_id` bigint, + `product_id` bigint, + `trade_id` bigint, + `icon` varchar(100), + `title` varchar(100), + `content` text, + `duration` bigint, + `product_type` varchar(50), + `deploy_count_used` bigint, + `is_present` boolean, + `is_bootstrap` boolean, + `is_empty` boolean, + `disabled` boolean NOT NULL DEFAULT false, + `active_time` bigint, + `expires_time` bigint, + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +CREATE INDEX `index_user_suite_user_id` ON `cd_user_suite` (`user_id`); + + +DROP TABLE IF EXISTS `cd_cert`; +DROP TABLE IF EXISTS `cd_cert_apply_history`; +DROP TABLE IF EXISTS `cd_cert_issuer`; +DROP TABLE IF EXISTS `cd_task`; +DROP TABLE IF EXISTS `cd_task_history`; + + + +CREATE TABLE `cd_cert_info` +( + `id` bigint PRIMARY KEY AUTO_INCREMENT NOT NULL, + `user_id` bigint, + `domain` varchar(100), + `domains` varchar(4096), + `domain_count` bigint, + `pipeline_id` bigint, + `apply_time` bigint, + `from_type` varchar(100), + `cert_provider` varchar(100), + `expires_time` bigint, + `cert_info` text, + `cert_file` varchar(100), + `disabled` boolean NOT NULL DEFAULT false, + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +CREATE INDEX `index_cert_info_user_id` ON `cd_cert_info` (`user_id`); +CREATE INDEX `index_cert_info_domain` ON `cd_cert_info` (`domain`); +CREATE INDEX `index_cert_info_domains` ON `cd_cert_info` (`domains`(200)); +CREATE INDEX `index_cert_info_pipeline` ON `cd_cert_info` (`pipeline_id`); + + +CREATE TABLE `cd_site_info` +( + `id` bigint PRIMARY KEY AUTO_INCREMENT NOT NULL, + `user_id` bigint, + + `name` varchar(100), + `domain` varchar(100), + + `https_port` bigint, + `cert_domains` varchar(4096), + `cert_info` varchar(4096), + `cert_provider` varchar(100), + `cert_status` varchar(100), + `cert_expires_time` bigint, + `last_check_time` bigint, + `check_status` varchar(100), + `error` varchar(4096), + `pipeline_id` bigint, + `cert_info_id` bigint, + `disabled` boolean NOT NULL DEFAULT false, + + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +CREATE INDEX `index_site_info_user_id` ON `cd_site_info` (`user_id`); +CREATE INDEX `index_site_info_domain` ON `cd_site_info` (`domain`); +CREATE INDEX `index_site_info_pipeline` ON `cd_site_info` (`pipeline_id`); + + +ALTER TABLE pi_pipeline + ADD COLUMN `type` varchar(50); +ALTER TABLE pi_pipeline + ADD COLUMN `from` varchar(50); diff --git a/packages/ui/certd-server/db/migration-pg/v10018__suite.sql b/packages/ui/certd-server/db/migration-pg/v10018__suite.sql new file mode 100644 index 00000000..1568bd18 --- /dev/null +++ b/packages/ui/certd-server/db/migration-pg/v10018__suite.sql @@ -0,0 +1,137 @@ +CREATE TABLE "cd_product" +( + "id" bigint PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY NOT NULL, + "icon" varchar(100), + "title" varchar(100), + "type" varchar(100), + "content" varchar(4096), + "duration_prices" varchar(10240), + "duration" bigint, + "price" bigint, + "intro" varchar(10240), + "order" bigint, + "support_buy" boolean, + "disabled" boolean NOT NULL DEFAULT (false), + "create_time" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP), + "update_time" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP) +); + +CREATE TABLE "cd_trade" +( + "id" bigint PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY NOT NULL, + "trade_no" varchar(100), + "user_id" bigint, + "product_id" bigint, + "title" varchar(1024), + "desc" varchar(2048), + "num" bigint, + "duration" bigint, + "price" bigint, + "amount" bigint, + "remark" varchar(2048), + "status" varchar(100), + "pay_type" varchar(50), + "pay_time" bigint, + "pay_no" varchar(100), + "end_time" bigint, + "create_time" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP), + "update_time" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP) +); + +CREATE INDEX "index_trade_user_id" ON "cd_trade" ("user_id"); +CREATE UNIQUE INDEX "index_trade_trade_no" ON "cd_trade" ("trade_no"); +CREATE INDEX "index_trade_pay_no" ON "cd_trade" ("pay_type", "pay_no"); + + +CREATE TABLE "cd_user_suite" +( + "id" bigint PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY NOT NULL, + "user_id" bigint, + "product_id" bigint, + "trade_id" bigint, + "icon" varchar(100), + "title" varchar(100), + "content" text, + "duration" bigint, + "product_type" varchar(50), + "deploy_count_used" bigint, + "is_present" boolean, + "is_bootstrap" boolean, + "is_empty" boolean, + "disabled" boolean NOT NULL DEFAULT (false), + "active_time" bigint, + "expires_time" bigint, + "create_time" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP), + "update_time" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP) +); + +CREATE INDEX "index_user_suite_user_id" ON "cd_user_suite" ("user_id"); + + +DROP TABLE IF EXISTS "cd_cert"; +DROP TABLE IF EXISTS "cd_cert_apply_history"; +DROP TABLE IF EXISTS "cd_cert_issuer"; +DROP TABLE IF EXISTS "cd_task"; +DROP TABLE IF EXISTS "cd_task_history"; + + + +CREATE TABLE "cd_cert_info" +( + "id" bigint PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY NOT NULL, + "user_id" bigint, + "domain" varchar(100), + "domains" varchar(10240), + "domain_count" bigint, + "pipeline_id" bigint, + "apply_time" bigint, + "from_type" varchar(100), + "cert_provider" varchar(100), + "expires_time" bigint, + "cert_info" text, + "cert_file" varchar(100), + "disabled" boolean NOT NULL DEFAULT (false), + "create_time" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP), + "update_time" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP) +); + +CREATE INDEX "index_cert_info_user_id" ON "cd_cert_info" ("user_id"); +CREATE INDEX "index_cert_info_domain" ON "cd_cert_info" ("domain"); +CREATE INDEX "index_cert_info_domains" ON "cd_cert_info" ("domains"); +CREATE INDEX "index_cert_info_pipeline" ON "cd_cert_info" ("pipeline_id"); + + +CREATE TABLE "cd_site_info" +( + "id" bigint PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY NOT NULL, + "user_id" bigint, + + "name" varchar(100), + "domain" varchar(100), + + "https_port" bigint, + "cert_domains" varchar(10240), + "cert_info" varchar(10240), + "cert_provider" varchar(100), + "cert_status" varchar(100), + "cert_expires_time" bigint, + "last_check_time" bigint, + "check_status" varchar(100), + "error" varchar(4096), + "pipeline_id" bigint, + "cert_info_id" bigint, + "disabled" boolean NOT NULL DEFAULT (false), + + "create_time" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP), + "update_time" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP) +); + +CREATE INDEX "index_site_info_user_id" ON "cd_site_info" ("user_id"); +CREATE INDEX "index_site_info_domain" ON "cd_site_info" ("domain"); +CREATE INDEX "index_site_info_pipeline" ON "cd_site_info" ("pipeline_id"); + + +ALTER TABLE pi_pipeline + ADD COLUMN "type" varchar(50); +ALTER TABLE pi_pipeline + ADD COLUMN "from" varchar(50); diff --git a/packages/ui/certd-server/src/controller/basic/settings-controller.ts b/packages/ui/certd-server/src/controller/basic/settings-controller.ts index e6af4863..d30c235d 100644 --- a/packages/ui/certd-server/src/controller/basic/settings-controller.ts +++ b/packages/ui/certd-server/src/controller/basic/settings-controller.ts @@ -1,5 +1,15 @@ import { Config, Controller, Get, Inject, Provide } from '@midwayjs/core'; -import { BaseController, Constants, SysHeaderMenus, SysInstallInfo, SysPublicSettings, SysSettingsService, SysSiteEnv, SysSiteInfo } from '@certd/lib-server'; +import { + BaseController, + Constants, + SysHeaderMenus, + SysInstallInfo, + SysPublicSettings, + SysSettingsService, + SysSiteEnv, + SysSiteInfo, + SysSuiteSetting, +} from '@certd/lib-server'; import { AppKey, getPlusInfo, isComm } from '@certd/plus-core'; /** @@ -34,6 +44,16 @@ export class BasicSettingsController extends BaseController { return await this.sysSettingsService.getSetting(SysHeaderMenus); } + public async getSuiteSetting() { + if (!isComm()) { + return { enabled: false }; + } + const setting = await this.sysSettingsService.getSetting(SysSuiteSetting); + return { + enabled: setting.enabled, + }; + } + public async getSiteEnv() { const env: SysSiteEnv = { agent: this.agentConfig, @@ -56,6 +76,7 @@ export class BasicSettingsController extends BaseController { const siteEnv = await this.getSiteEnv(); const plusInfo = await this.plusInfo(); const headerMenus = await this.getHeaderMenus(); + const suiteSetting = await this.getSuiteSetting(); return this.ok({ sysPublic, installInfo, @@ -63,6 +84,7 @@ export class BasicSettingsController extends BaseController { siteEnv, plusInfo, headerMenus, + suiteSetting, }); } }