From f5ec9870fd6af1f0c9099852bbdb4d07813ccce8 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Wed, 25 Dec 2024 17:05:24 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=85=8D=E8=B4=B9=E5=A5=97=E9=A4=90?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=B4=AD=E4=B9=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/store/modules/settings.ts | 5 +- .../certd-client/src/views/certd/suite/api.ts | 8 ++ .../src/views/certd/suite/buy.vue | 15 +++ .../src/views/certd/suite/mine/crud.tsx | 2 +- .../src/views/certd/suite/mine/index.vue | 11 +- .../src/views/certd/suite/product-info.vue | 2 +- .../src/views/certd/trade/crud.tsx | 9 +- .../framework/home/dashboard/suite-card.vue | 4 +- .../src/views/sys/suite/setting/index.vue | 1 + .../suite/setting/suite-duration-selector.vue | 4 + .../src/views/sys/suite/trade/crud.tsx | 12 +- .../src/views/sys/suite/user-suite/api.ts | 113 +++++++++--------- .../src/views/sys/suite/user-suite/crud.tsx | 60 +++++++--- .../src/views/sys/suite/user-suite/index.vue | 4 +- 14 files changed, 158 insertions(+), 92 deletions(-) diff --git a/packages/ui/certd-client/src/store/modules/settings.ts b/packages/ui/certd-client/src/store/modules/settings.ts index 522633fd..b2aff967 100644 --- a/packages/ui/certd-client/src/store/modules/settings.ts +++ b/packages/ui/certd-client/src/store/modules/settings.ts @@ -122,12 +122,11 @@ export const useSettingStore = defineStore({ }; return vipLabelMap[this.plusInfo?.vipType || "free"]; }, - // @ts-ignore - getHeaderMenus() { + getHeaderMenus(): { menus: any[] } { // @ts-ignore return this.headerMenus?.menus || { menus: [] }; }, - isSuiteEnabled() { + isSuiteEnabled(): boolean { // @ts-ignore return this.suiteSetting?.enabled === true; } diff --git a/packages/ui/certd-client/src/views/certd/suite/api.ts b/packages/ui/certd-client/src/views/certd/suite/api.ts index a2e27f68..e0bccade 100644 --- a/packages/ui/certd-client/src/views/certd/suite/api.ts +++ b/packages/ui/certd-client/src/views/certd/suite/api.ts @@ -52,6 +52,14 @@ export async function TradeCreate(form: TradeCreateReq) { }); } +export async function TradeCreateFree(form: TradeCreateReq) { + return await request({ + url: "/suite/trade/createFree", + method: "POST", + data: form + }); +} + export async function GetPaymentTypes() { return await request({ url: "/suite/trade/payments", 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 a51598c7..c3567e56 100644 --- a/packages/ui/certd-client/src/views/certd/suite/buy.vue +++ b/packages/ui/certd-client/src/views/certd/suite/buy.vue @@ -35,6 +35,7 @@ import { ref } from "vue"; import * as api from "./api"; import ProductInfo from "/@/views/certd/suite/product-info.vue"; import OrderModal from "/@/views/certd/suite/order-modal.vue"; +import { notification } from "ant-design-vue"; const suites = ref([]); const addons = ref([]); @@ -48,6 +49,20 @@ async function loadProducts() { loadProducts(); const orderModalRef = ref(null); async function doOrder(req: any) { + if (req.price === 0) { + //如果是0,直接请求创建订单 + await api.TradeCreateFree({ + productId: req.productId, + duration: req.duration, + num: 1, + payType: "free" + }); + notification.success({ + message: "套餐购买成功" + }); + return; + } + await orderModalRef.value.open({ ...req }); diff --git a/packages/ui/certd-client/src/views/certd/suite/mine/crud.tsx b/packages/ui/certd-client/src/views/certd/suite/mine/crud.tsx index 06fe62c6..8f4cb242 100644 --- a/packages/ui/certd-client/src/views/certd/suite/mine/crud.tsx +++ b/packages/ui/certd-client/src/views/certd/suite/mine/crud.tsx @@ -263,7 +263,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat userSuite: compute(({ row }) => { return row; }), - currentSuite: context.detail + currentSuite: context.currentSuite }, conditionalRender: { match() { diff --git a/packages/ui/certd-client/src/views/certd/suite/mine/index.vue b/packages/ui/certd-client/src/views/certd/suite/mine/index.vue index d8eee35a..0a36aa01 100644 --- a/packages/ui/certd-client/src/views/certd/suite/mine/index.vue +++ b/packages/ui/certd-client/src/views/certd/suite/mine/index.vue @@ -15,7 +15,7 @@ diff --git a/packages/ui/certd-client/src/views/certd/trade/crud.tsx b/packages/ui/certd-client/src/views/certd/trade/crud.tsx index 67cca250..af1a312b 100644 --- a/packages/ui/certd-client/src/views/certd/trade/crud.tsx +++ b/packages/ui/certd-client/src/views/certd/trade/crud.tsx @@ -162,7 +162,8 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat ] }), column: { - width: 100 + width: 100, + align: "center" } }, payType: { @@ -173,14 +174,16 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat data: [ { label: "聚合支付", value: "yizhifu" }, { label: "支付宝", value: "alipay" }, - { label: "微信", value: "wxpay" } + { label: "微信", value: "wxpay" }, + { label: "免费", value: "free" } ] }), column: { width: 100, component: { color: "auto" - } + }, + align: "center" } }, payTime: { 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 c7718431..e6f62472 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,8 +36,8 @@ () -
- 暂无套餐 去购买 +
+ 暂无套餐 去购买
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 3cd7c3be..d193724d 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 @@ -17,6 +17,7 @@
+
不建议设置免费套餐,可以在下方配置注册赠送套餐
diff --git a/packages/ui/certd-client/src/views/sys/suite/setting/suite-duration-selector.vue b/packages/ui/certd-client/src/views/sys/suite/setting/suite-duration-selector.vue index 271bfe6c..569477a2 100644 --- a/packages/ui/certd-client/src/views/sys/suite/setting/suite-duration-selector.vue +++ b/packages/ui/certd-client/src/views/sys/suite/setting/suite-duration-selector.vue @@ -7,6 +7,10 @@ import { ref, watch } from "vue"; import { dict } from "@fast-crud/fast-crud"; import { request } from "/@/api/service"; +defineOptions({ + name: "SuiteDurationSelector" +}); + const props = defineProps<{ modelValue?: { productId?: number; diff --git a/packages/ui/certd-client/src/views/sys/suite/trade/crud.tsx b/packages/ui/certd-client/src/views/sys/suite/trade/crud.tsx index 8b627535..3536e904 100644 --- a/packages/ui/certd-client/src/views/sys/suite/trade/crud.tsx +++ b/packages/ui/certd-client/src/views/sys/suite/trade/crud.tsx @@ -155,7 +155,8 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat component: { name: DurationValue, vModel: "modelValue" - } + }, + align: "center" } }, amount: { @@ -182,7 +183,8 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat ] }), column: { - width: 100 + width: 100, + align: "center" } }, payType: { @@ -193,14 +195,16 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat data: [ { label: "聚合支付", value: "yizhifu" }, { label: "支付宝", value: "alipay" }, - { label: "微信", value: "wxpay" } + { label: "微信", value: "wxpay" }, + { label: "免费", value: "free" } ] }), column: { width: 100, component: { color: "auto" - } + }, + align: "center" } }, payTime: { diff --git a/packages/ui/certd-client/src/views/sys/suite/user-suite/api.ts b/packages/ui/certd-client/src/views/sys/suite/user-suite/api.ts index 682a3f0e..f8f8b79e 100644 --- a/packages/ui/certd-client/src/views/sys/suite/user-suite/api.ts +++ b/packages/ui/certd-client/src/views/sys/suite/user-suite/api.ts @@ -1,62 +1,65 @@ import { request } from "/src/api/service"; -export function createApi() { - const apiPrefix = "/sys/suite/user-suite"; - return { - async GetList(query: any) { - return await request({ - url: apiPrefix + "/page", - method: "post", - data: query - }); - }, +const apiPrefix = "/sys/suite/user-suite"; +export const sysUserSuiteApi = { + async GetList(query: any) { + return await request({ + url: apiPrefix + "/page", + method: "post", + data: query + }); + }, - async AddObj(obj: any) { - return await request({ - url: apiPrefix + "/add", - method: "post", - data: obj - }); - }, + async AddObj(obj: any) { + return await request({ + url: apiPrefix + "/add", + method: "post", + data: obj + }); + }, - async UpdateObj(obj: any) { - return await request({ - url: apiPrefix + "/update", - method: "post", - data: obj - }); - }, + async UpdateObj(obj: any) { + return await request({ + url: apiPrefix + "/update", + method: "post", + data: obj + }); + }, - async DelObj(id: number) { - return await request({ - url: apiPrefix + "/delete", - method: "post", - params: { id } - }); - }, + async DelObj(id: number) { + return await request({ + url: apiPrefix + "/delete", + method: "post", + params: { id } + }); + }, - async GetObj(id: number) { - return await request({ - url: apiPrefix + "/info", - method: "post", - params: { id } - }); - }, - async ListAll() { - return await request({ - url: apiPrefix + "/all", - method: "post" - }); - }, + async GetObj(id: number) { + return await request({ + url: apiPrefix + "/info", + method: "post", + params: { id } + }); + }, + async ListAll() { + return await request({ + url: apiPrefix + "/all", + method: "post" + }); + }, - async GetSimpleUserByIds(ids: number[]) { - return await request({ - url: "/sys/authority/user/getSimpleUserByIds", - method: "post", - data: { ids } - }); - } - }; -} - -export const pipelineGroupApi = createApi(); + async GetSimpleUserByIds(ids: number[]) { + return await request({ + url: "/sys/authority/user/getSimpleUserByIds", + method: "post", + data: { ids } + }); + }, + async PresentSuite(form: any) { + return await request({ + url: apiPrefix + "/presentSuite", + method: "post", + data: form + }); + } +}; diff --git a/packages/ui/certd-client/src/views/sys/suite/user-suite/crud.tsx b/packages/ui/certd-client/src/views/sys/suite/user-suite/crud.tsx index db494247..55fe5a4c 100644 --- a/packages/ui/certd-client/src/views/sys/suite/user-suite/crud.tsx +++ b/packages/ui/certd-client/src/views/sys/suite/user-suite/crud.tsx @@ -1,15 +1,14 @@ import { AddReq, compute, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud"; -import { pipelineGroupApi } from "./api"; +import { sysUserSuiteApi } from "./api"; import { useRouter } from "vue-router"; import SuiteValueEdit from "/@/views/sys/suite/product/suite-value-edit.vue"; import SuiteValue from "/@/views/sys/suite/product/suite-value.vue"; import DurationValue from "/@/views/sys/suite/product/duration-value.vue"; -import dayjs from "dayjs"; import createCrudOptionsUser from "/@/views/sys/authority/user/crud"; import UserSuiteStatus from "/@/views/certd/suite/mine/user-suite-status.vue"; - +import SuiteDurationSelector from "../setting/suite-duration-selector.vue"; export default function ({ crudExpose, context }: CreateCrudOptionsProps): CreateCrudOptionsRet { - const api = pipelineGroupApi; + const api = sysUserSuiteApi; const pageRequest = async (query: UserPageQuery): Promise => { return await api.GetList(query); }; @@ -26,7 +25,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat const addRequest = async (req: AddReq) => { const { form } = req; - const res = await api.AddObj(form); + const res = await api.PresentSuite(form); return res; }; @@ -57,16 +56,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat }, actionbar: { buttons: { - add: { show: false } - // buy: { - // text: "购买", - // type: "primary", - // click() { - // router.push({ - // path: "/certd/suite/buy" - // }); - // } - // } + add: { text: "赠送套餐" } } }, toolbar: { show: false }, @@ -112,7 +102,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat show: true }, form: { - rules: [{ required: true, message: "此项必填" }] + show: false }, column: { width: 200 @@ -143,6 +133,27 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat } } }, + //赠送 + presentSuiteId: { + title: "赠送套餐", + type: "dict-select", + column: { show: false }, + addForm: { + component: { + name: SuiteDurationSelector, + vModel: "modelValue" + }, + rules: [{ required: true, message: "请选择套餐" }] + }, + valueResolve({ form, value }) { + if (value) { + const arr = value.splict("_"); + form.productId = parseInt(arr[0]); + form.duration = parseInt(arr[1]); + } + }, + form: { show: false } + }, productType: { title: "类型", type: "dict-select", @@ -158,7 +169,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat ] }), form: { - rules: [{ required: true, message: "此项必填" }] + show: false }, column: { width: 80, @@ -179,6 +190,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat title: "域名数量", type: "text", form: { + show: false, key: ["content", "maxDomainCount"], component: { name: SuiteValueEdit, @@ -201,6 +213,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat title: "流水线数量", type: "text", form: { + show: false, key: ["content", "maxPipelineCount"], component: { name: SuiteValueEdit, @@ -223,6 +236,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat title: "部署次数", type: "text", form: { + show: false, key: ["content", "maxDeployCount"], component: { name: SuiteValueEdit, @@ -248,6 +262,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat title: "证书监控数量", type: "text", form: { + show: false, key: ["content", "maxMonitorCount"], component: { name: SuiteValueEdit, @@ -269,7 +284,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat duration: { title: "时长", type: "text", - form: {}, + form: { show: false }, column: { component: { name: DurationValue, @@ -304,11 +319,17 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat type: "date", column: { width: 150 + }, + form: { + show: false } }, expiresTime: { title: "过期时间", type: "date", + form: { + show: false + }, column: { width: 150, component: { @@ -328,7 +349,8 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat ] }), form: { - value: true + value: true, + show: false }, column: { width: 100, diff --git a/packages/ui/certd-client/src/views/sys/suite/user-suite/index.vue b/packages/ui/certd-client/src/views/sys/suite/user-suite/index.vue index ff54f9f6..3aa5016c 100644 --- a/packages/ui/certd-client/src/views/sys/suite/user-suite/index.vue +++ b/packages/ui/certd-client/src/views/sys/suite/user-suite/index.vue @@ -11,10 +11,10 @@