mirror of
https://github.com/certd/certd.git
synced 2026-04-05 07:20:56 +08:00
Compare commits
24 Commits
65117ebdd7
...
v2-dev-buy
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c31eef6b82 | ||
|
|
0c99f41bd9 | ||
|
|
bcac810f71 | ||
|
|
feae105426 | ||
|
|
d46b9c54b1 | ||
|
|
d0b7162b6a | ||
|
|
c16660254b | ||
|
|
bbe0d52740 | ||
|
|
c4ebbaba74 | ||
|
|
81e588a896 | ||
|
|
b5d8161bc2 | ||
|
|
b497eda26e | ||
|
|
fe9dd7d23f | ||
|
|
6f8fbe3f09 | ||
|
|
6b7631ed5e | ||
|
|
1b56c0f191 | ||
|
|
94cbeba495 | ||
|
|
962f8233b0 | ||
|
|
31923d511e | ||
|
|
fdbb8300d3 | ||
|
|
203d8bca57 | ||
|
|
74c331eaf7 | ||
|
|
54365528a8 | ||
|
|
bc174f7054 |
@@ -11,6 +11,7 @@ services:
|
||||
# ↓↓↓↓↓ -------------------------------------------------------- 数据库以及证书存储路径,默认存在宿主机的/data/certd/目录下,【您需要定时备份此目录,以保障数据容灾】
|
||||
# 只要修改冒号前面的,冒号后面的/app/data不要动
|
||||
- /data/certd:/app/data
|
||||
#- /volume1/docker/certd:/app/data:delegated #群晖使用这个配置
|
||||
# ↓↓↓↓↓ -------------------------------------------------------- 如果走时不准,考虑挂载localtime文件
|
||||
#- /etc/localtime:/etc/localtime
|
||||
#- /etc/timezone:/etc/timezone
|
||||
|
||||
@@ -18,6 +18,12 @@
|
||||
### 3. 配置Certd项目
|
||||
|
||||

|
||||
建议加上 `:delegated` 提升性能
|
||||
```yaml
|
||||
volumes:
|
||||
↓↓↓↓------加上这个提升性能
|
||||
- /volume1/docker/certd:/app/data:delegated
|
||||
```
|
||||
|
||||
### 4. 外网访问设置
|
||||
|
||||
|
||||
@@ -130,12 +130,15 @@ export class PlusService {
|
||||
return res.accessToken;
|
||||
}
|
||||
|
||||
async getVipTrial() {
|
||||
async getVipTrial(vipType= "plus") {
|
||||
await this.register();
|
||||
const plusRequestService = await this.getPlusRequestService();
|
||||
const res = await plusRequestService.request({
|
||||
url: '/activation/subject/vip/trialGet',
|
||||
method: 'POST',
|
||||
data:{
|
||||
vipType
|
||||
}
|
||||
});
|
||||
if (res.license) {
|
||||
await this.updateLicense(res.license);
|
||||
|
||||
@@ -10,4 +10,4 @@ VITE_APP_LOGO=static/images/logo/logo.svg
|
||||
VITE_APP_LOGIN_LOGO=static/images/logo/rect-black.svg
|
||||
VITE_APP_PROJECT_PATH=https://github.com/certd/certd
|
||||
VITE_APP_NAMESPACE=fs
|
||||
VITE_APP_VIP_PRODUCT_URL=http://localhost:1017/subject#/product/list
|
||||
VITE_APP_VIP_PRODUCT_URL="http://localhost:1017/subject#/app/certd/product"
|
||||
@@ -1,3 +1,6 @@
|
||||
VITE_APP_API=api
|
||||
#登录与权限开启
|
||||
VITE_APP_PM_ENABLED=true
|
||||
|
||||
|
||||
VITE_APP_VIP_PRODUCT_URL="https://app.handfree.work/subject#/app/certd/product"
|
||||
@@ -33,11 +33,11 @@
|
||||
"@aws-sdk/s3-request-presigner": "^3.535.0",
|
||||
"@certd/vue-js-cron-light": "^4.0.14",
|
||||
"@ctrl/tinycolor": "^4.1.0",
|
||||
"@fast-crud/editor-code": "^1.26.6",
|
||||
"@fast-crud/fast-crud": "^1.26.6",
|
||||
"@fast-crud/fast-extends": "^1.26.6",
|
||||
"@fast-crud/ui-antdv4": "^1.26.6",
|
||||
"@fast-crud/ui-interface": "^1.26.6",
|
||||
"@fast-crud/editor-code": "^1.27.4",
|
||||
"@fast-crud/fast-crud": "^1.27.4",
|
||||
"@fast-crud/fast-extends": "^1.27.4",
|
||||
"@fast-crud/ui-antdv4": "^1.27.4",
|
||||
"@fast-crud/ui-interface": "^1.27.4",
|
||||
"@iconify/tailwind": "^1.2.0",
|
||||
"@iconify/vue": "^4.1.1",
|
||||
"@manypkg/get-packages": "^2.2.2",
|
||||
|
||||
@@ -8,10 +8,10 @@ export async function doActive(form: any) {
|
||||
});
|
||||
}
|
||||
|
||||
export async function getVipTrial() {
|
||||
export async function getVipTrial(vipType: string) {
|
||||
return await request({
|
||||
url: "/sys/plus/getVipTrial",
|
||||
method: "post",
|
||||
data: {},
|
||||
data: { vipType },
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div v-if="!settingStore.isComm || userStore.isAdmin" class="layout-vip isPlus" @click="openUpgrade">
|
||||
<div v-if="!settingStore.isComm || userStore.isAdmin" class="layout-vip isPlus" :class="{ isForever: settingStore.isForever }" @click="openUpgrade">
|
||||
<contextHolder />
|
||||
<fs-icon icon="mingcute:vip-1-line" :title="text.title" />
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
</div>
|
||||
</template>
|
||||
<script lang="tsx" setup>
|
||||
import { computed, onMounted, reactive } from "vue";
|
||||
import { computed, onMounted, reactive, ref } from "vue";
|
||||
import dayjs from "dayjs";
|
||||
import { message, Modal } from "ant-design-vue";
|
||||
import * as api from "./api";
|
||||
@@ -21,7 +21,7 @@ import { useRouter } from "vue-router";
|
||||
import { useUserStore } from "/@/store/user";
|
||||
import { mitter } from "/@/utils/util.mitt";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
import { env } from "/@/utils/util.env";
|
||||
const { t } = useI18n();
|
||||
|
||||
const settingStore = useSettingStore();
|
||||
@@ -106,7 +106,7 @@ const text = computed<Text>(() => {
|
||||
|
||||
const expireTime = computed(() => {
|
||||
if (settingStore.isPlus) {
|
||||
return dayjs(settingStore.plusInfo.expireTime).format("YYYY-MM-DD");
|
||||
return settingStore.expiresText;
|
||||
}
|
||||
return "";
|
||||
});
|
||||
@@ -165,34 +165,38 @@ function goAccount() {
|
||||
router.push("/sys/account");
|
||||
}
|
||||
|
||||
async function getVipTrial() {
|
||||
const res = await api.getVipTrial();
|
||||
async function getVipTrial(vipType = "plus") {
|
||||
const res = await api.getVipTrial(vipType);
|
||||
message.success(t("vip.congratulations_vip_trial", { duration: res.duration }));
|
||||
await settingStore.init();
|
||||
}
|
||||
|
||||
function openTrialModal() {
|
||||
function openTrialModal(vipType = "plus") {
|
||||
Modal.destroyAll();
|
||||
|
||||
modal.confirm({
|
||||
title: t("vip.trial_modal_title"),
|
||||
okText: t("vip.trial_modal_ok_text"),
|
||||
onOk() {
|
||||
getVipTrial();
|
||||
getVipTrial(vipType);
|
||||
},
|
||||
width: 600,
|
||||
content: () => {
|
||||
return (
|
||||
<div class="flex-col mt-10 mb-10">
|
||||
<div>{t("vip.trial_modal_thanks")}</div>
|
||||
<div>{t("vip.trial_modal_click_confirm")}</div>
|
||||
<div>{t("vip.trial_modal_click_confirm", { vipType })}</div>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
function openStarModal() {
|
||||
function openStarModal(vipType: string) {
|
||||
if (settingStore.isPlus) {
|
||||
message.error(t("vip.already_vip"));
|
||||
return;
|
||||
}
|
||||
Modal.destroyAll();
|
||||
const goGithub = () => {
|
||||
window.open("https://github.com/certd/certd/");
|
||||
@@ -203,7 +207,7 @@ function openStarModal() {
|
||||
okText: t("vip.star_now"),
|
||||
onOk() {
|
||||
goGithub();
|
||||
openTrialModal();
|
||||
openTrialModal(vipType);
|
||||
},
|
||||
width: 600,
|
||||
content: () => {
|
||||
@@ -231,7 +235,49 @@ function openUpgrade() {
|
||||
title = t("vip.renew_pro_upgrade_business");
|
||||
}
|
||||
|
||||
// const goBuyUrl = "https://afdian.com/a/greper"
|
||||
const subjectId = settingStore.installInfo.siteId;
|
||||
const appKey = settingStore.installInfo.appKey;
|
||||
const location = window.location;
|
||||
const callbackUrl = encodeURIComponent(`${location.origin}${location.pathname}#/sys/account`);
|
||||
const goBuyUrl = `${env.VIP_PRODUCT_URL}?appKey=${appKey}&subjectId=${subjectId}&callback=${callbackUrl}`;
|
||||
const goBuyCommUrl = `${goBuyUrl}&vipType=comm`;
|
||||
const productInfo = settingStore.productInfo;
|
||||
|
||||
function checkPerpetualPlus() {
|
||||
if (settingStore.isPerpetual) {
|
||||
Modal.warn({
|
||||
title: t("vip.already_perpetual_plus"),
|
||||
okText: t("vip.confirm"),
|
||||
});
|
||||
throw new Error(t("vip.already_perpetual_plus"));
|
||||
}
|
||||
}
|
||||
function goBuyPlusPage() {
|
||||
checkPerpetualPlus();
|
||||
if (settingStore.isComm) {
|
||||
Modal.warn({
|
||||
title: t("vip.already_comm"),
|
||||
okText: t("vip.confirm"),
|
||||
});
|
||||
return;
|
||||
}
|
||||
window.open(goBuyUrl);
|
||||
}
|
||||
function goBuyCommPage() {
|
||||
checkPerpetualPlus();
|
||||
if (settingStore.isPlus && !settingStore.isComm) {
|
||||
Modal.confirm({
|
||||
title: t("vip.already_plus"),
|
||||
okText: t("vip.confirm"),
|
||||
onOk() {
|
||||
window.open(goBuyCommUrl);
|
||||
},
|
||||
});
|
||||
return;
|
||||
}
|
||||
window.open(goBuyCommUrl);
|
||||
}
|
||||
const vipTypeDefine = {
|
||||
free: {
|
||||
title: t("vip.basic_edition"),
|
||||
@@ -248,7 +294,7 @@ function openUpgrade() {
|
||||
trial: {
|
||||
title: t("vip.click_to_get_7_day_trial"),
|
||||
click: () => {
|
||||
openStarModal();
|
||||
openStarModal("plus");
|
||||
},
|
||||
},
|
||||
icon: "stash:thumb-up",
|
||||
@@ -258,7 +304,7 @@ function openUpgrade() {
|
||||
get() {
|
||||
return (
|
||||
<a-tooltip title={t("vip.afdian_support_vip")}>
|
||||
<a-button size="small" type="primary" href="https://afdian.com/a/greper" target="_blank">
|
||||
<a-button size="small" type="primary" onClick={goBuyPlusPage}>
|
||||
{t("vip.get_after_support")}
|
||||
</a-button>
|
||||
</a-tooltip>
|
||||
@@ -274,30 +320,57 @@ function openUpgrade() {
|
||||
price: productInfo.comm.price,
|
||||
price3: `¥${productInfo.comm.price3}/3${t("vip.years")}`,
|
||||
tooltip: productInfo.comm.tooltip,
|
||||
trial: {
|
||||
title: t("vip.click_to_get_7_day_trial"),
|
||||
click: () => {
|
||||
openStarModal("comm");
|
||||
},
|
||||
},
|
||||
get() {
|
||||
return <a-button size="small">{t("vip.contact_author_for_trial")}</a-button>;
|
||||
return (
|
||||
<a-button size="small" type="primary" onClick={goBuyCommPage}>
|
||||
{t("vip.buy")}
|
||||
</a-button>
|
||||
);
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const modalRef = modal.confirm({
|
||||
const manualActiveFlag = ref();
|
||||
function showManualActivation() {
|
||||
manualActiveFlag.value = true;
|
||||
}
|
||||
const modalRef = modal.success({
|
||||
title,
|
||||
async onOk() {
|
||||
return await doActive();
|
||||
},
|
||||
maskClosable: true,
|
||||
okText: t("vip.activate"),
|
||||
okText: t("vip.close"),
|
||||
width: 1100,
|
||||
content: () => {
|
||||
let activationCodeGetWay = (
|
||||
<span>
|
||||
<a href="https://afdian.com/a/greper" target="_blank">
|
||||
{t("vip.get_pro_code_after_support")}
|
||||
</a>
|
||||
<span> {t("vip.business_contact_author")}</span>
|
||||
</span>
|
||||
);
|
||||
let manualActiveBlock: any = "";
|
||||
if (manualActiveFlag.value) {
|
||||
manualActiveBlock = (
|
||||
<div>
|
||||
<div class="mt-10">
|
||||
<a-input-search class="w-2/6" v-model:value={formState.code} placeholder={placeholder} enter-button={t("vip.activate")} onSearch={doActive}></a-input-search>
|
||||
</div>
|
||||
<div class="mt-10">
|
||||
{t("vip.activation_code_one_use")}
|
||||
<a onClick={goAccount}>{t("vip.bind_account")}</a>,{t("vip.transfer_vip")}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
const vipLabel = settingStore.vipLabel;
|
||||
let plusInfo: any = "";
|
||||
if (isPlus) {
|
||||
plusInfo = (
|
||||
<div class="mt-10">
|
||||
{t("vip.current")} {vipLabel} {t("vip.activated_expire_time")}
|
||||
{settingStore.expiresText}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
const slots = [];
|
||||
for (const key in vipTypeDefine) {
|
||||
// @ts-ignore
|
||||
@@ -363,26 +436,19 @@ function openUpgrade() {
|
||||
<a-row gutter={20}>{slots}</a-row>
|
||||
</div>
|
||||
<div class="mt-10">
|
||||
<h3 class="block-header">{isPlus ? t("vip.renew") : t("vip.activate_immediately")}</h3>
|
||||
<div>{isPlus ? `${t("vip.current")} ${vipLabel} ${t("vip.activated_expire_time")}` + dayjs(settingStore.plusInfo.expireTime).format("YYYY-MM-DD") : ""}</div>
|
||||
<div class="mt-10">
|
||||
<div class="flex-o w-100">
|
||||
<span>{t("vip.site_id")}:</span>
|
||||
<fs-copyable class="flex-1" v-model={computedSiteId.value}></fs-copyable>
|
||||
</div>
|
||||
<a-input class="mt-10" v-model:value={formState.code} placeholder={placeholder} />
|
||||
<a-input class="mt-10" v-model:value={formState.inviteCode} placeholder={t("vip.invite_code_optional")} />
|
||||
</div>
|
||||
|
||||
<div class="mt-10">
|
||||
{t("vip.no_activation_code")}
|
||||
{activationCodeGetWay}
|
||||
</div>
|
||||
<div class="mt-10">
|
||||
{t("vip.activation_code_one_use")}
|
||||
<a onClick={goAccount}>{t("vip.bind_account")}</a>,{t("vip.transfer_vip")}
|
||||
<div class="flex-o w-100">
|
||||
<span>{t("vip.site_id")}:</span>
|
||||
<fs-copyable v-model={computedSiteId.value}></fs-copyable>
|
||||
</div>
|
||||
</div>
|
||||
{plusInfo}
|
||||
<div class="mt-10">
|
||||
{t("vip.have_activation_code")}
|
||||
<span>
|
||||
<a onClick={showManualActivation}>{t("vip.manual_activation")}</a>
|
||||
</span>
|
||||
</div>
|
||||
<div class="mt-10">{manualActiveBlock}</div>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
@@ -406,6 +472,10 @@ onMounted(() => {
|
||||
|
||||
&.isPlus {
|
||||
color: #c5913f;
|
||||
|
||||
&.isForever {
|
||||
color: #ff2e83;
|
||||
}
|
||||
}
|
||||
|
||||
.text {
|
||||
@@ -420,6 +490,11 @@ onMounted(() => {
|
||||
border: 1px solid #eee;
|
||||
border-radius: 5px;
|
||||
height: 275px;
|
||||
line-height: 24px;
|
||||
|
||||
.privilege {
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
//background-color: rgba(250, 237, 167, 0.79);
|
||||
&.current {
|
||||
|
||||
@@ -32,13 +32,14 @@ export default {
|
||||
successContent: "You have successfully activated {vipLabel}, valid until: {expireDate}",
|
||||
bindAccountTitle: "Bind Your Account",
|
||||
bindAccountContent: "Binding your account helps prevent license loss. Strongly recommended.",
|
||||
congratulations_vip_trial: "Congratulations, you have received a Pro version {duration} days trial",
|
||||
trial_modal_title: "7-day Pro version trial acquisition",
|
||||
congratulations_vip_trial: "Congratulations, you have received a VIP version {duration} days trial",
|
||||
trial_modal_title: "7-day VIP version trial acquisition",
|
||||
trial_modal_ok_text: "Get now",
|
||||
trial_modal_thanks: "Thank you for supporting the open source project",
|
||||
trial_modal_click_confirm: "Click confirm to get a 7-day Pro version trial",
|
||||
get_7_day_pro_trial: "7-day professional version trial",
|
||||
trial_modal_click_confirm: "Click confirm to get a 7-day VIP({vipType}) version trial",
|
||||
get_7_day_pro_trial: "7-day VIP version trial",
|
||||
star_now: "Star Now",
|
||||
already_vip: "Already VIP version, can't trial ",
|
||||
please_help_star: "Could you please help by starring? Thanks a lot!",
|
||||
admin_only_operation: "Admin operation only",
|
||||
enter_activation_code: "Please enter the activation code",
|
||||
@@ -61,7 +62,7 @@ export default {
|
||||
plugins_fully_open: "All plugins open, including Synology and more",
|
||||
click_to_get_7_day_trial: "Click to get 7-day trial",
|
||||
years: "years",
|
||||
afdian_support_vip: 'Get a one-year professional activation code after supporting "VIP membership" on Afdian, open source needs your support',
|
||||
afdian_support_vip: "Obtain the permanent professional version coupon",
|
||||
get_after_support: "Get after sponsoring",
|
||||
|
||||
business_edition: "Business Edition",
|
||||
@@ -72,9 +73,9 @@ export default {
|
||||
plugin_management: "Plugin management",
|
||||
unlimited_multi_users: "Unlimited multi-users",
|
||||
support_user_payment: "Supports user payments",
|
||||
contact_author_for_trial: "Please contact the author for trial",
|
||||
contact_author_for_trial: "Buy It Now",
|
||||
activate: "Activate",
|
||||
get_pro_code_after_support: 'Get a one-year professional activation code after supporting "VIP membership" on Afdian',
|
||||
get_pro_code_after_support: "Go to sponsoring",
|
||||
business_contact_author: "Business edition please contact the author directly",
|
||||
year: "year",
|
||||
freee: "Free",
|
||||
@@ -88,4 +89,12 @@ export default {
|
||||
activation_code_one_use: "Activation code can only be used once. To change site, please ",
|
||||
bind_account: "bind account",
|
||||
transfer_vip: ' then "Transfer VIP"',
|
||||
manual_activation: "Manual activation use code",
|
||||
close: "Close",
|
||||
have_activation_code: "Already have activation code?",
|
||||
buy: "Buy",
|
||||
already_plus: "Already Professional Edition, will upgrade to Business Edition, Professional Edition time will be lost",
|
||||
already_comm: "Already Business Edition, can't change to Professional Edition",
|
||||
already_perpetual_plus: "You already have a perpetual Professional Edition, can't upgrade",
|
||||
confirm: "Confirm",
|
||||
};
|
||||
|
||||
@@ -32,13 +32,14 @@ export default {
|
||||
successContent: "您已成功激活{vipLabel},有效期至:{expireDate}",
|
||||
bindAccountTitle: "是否绑定袖手账号",
|
||||
bindAccountContent: "绑定账号后,可以避免License丢失,强烈建议绑定",
|
||||
congratulations_vip_trial: "恭喜,您已获得专业版{duration}天试用",
|
||||
trial_modal_title: "7天专业版试用获取",
|
||||
congratulations_vip_trial: "恭喜,您已获得VIP{duration}天试用",
|
||||
trial_modal_title: "7天VIP试用获取",
|
||||
trial_modal_ok_text: "立即获取",
|
||||
trial_modal_thanks: "感谢您对开源项目的支持",
|
||||
trial_modal_click_confirm: "点击确认,即可获取7天专业版试用",
|
||||
get_7_day_pro_trial: "7天专业版试用获取",
|
||||
trial_modal_click_confirm: "点击确认,即可获取7天VIP({vipType})试用",
|
||||
get_7_day_pro_trial: "7天VIP试用获取",
|
||||
star_now: "立即去Star",
|
||||
already_vip: "您已经是VIP了,不能试用",
|
||||
please_help_star: "可以先请您帮忙点个star吗?感谢感谢",
|
||||
admin_only_operation: "仅限管理员操作",
|
||||
enter_activation_code: "请输入激活码",
|
||||
@@ -61,8 +62,8 @@ export default {
|
||||
plugins_fully_open: "插件全开放,群辉等更多插件",
|
||||
click_to_get_7_day_trial: "点击获取7天试用",
|
||||
years: "年",
|
||||
afdian_support_vip: "爱发电赞助“VIP会员”后获取一年期专业版激活码,开源需要您的支持",
|
||||
get_after_support: "爱发电赞助后获取",
|
||||
afdian_support_vip: "新用户开通永久专业版立享50优惠券",
|
||||
get_after_support: "立即赞助",
|
||||
|
||||
business_edition: "商业版",
|
||||
commercial_license: "商业授权,可对外运营",
|
||||
@@ -72,10 +73,9 @@ export default {
|
||||
plugin_management: "插件管理",
|
||||
unlimited_multi_users: "多用户无限制",
|
||||
support_user_payment: "支持用户支付",
|
||||
contact_author_for_trial: "请联系作者获取试用",
|
||||
activate: "激活",
|
||||
get_pro_code_after_support: "爱发电赞助“VIP会员”后获取一年期专业版激活码",
|
||||
business_contact_author: "商业版请直接联系作者",
|
||||
get_pro_code_after_support: "前往获取",
|
||||
business_contact_author: "",
|
||||
year: "年",
|
||||
freee: "免费",
|
||||
renew: "续期",
|
||||
@@ -88,4 +88,12 @@ export default {
|
||||
activation_code_one_use: "激活码使用过一次之后,不可再次使用,如果要更换站点,请",
|
||||
bind_account: "绑定账号",
|
||||
transfer_vip: ',然后"转移VIP"即可',
|
||||
manual_activation: "激活码手动激活",
|
||||
close: "关闭",
|
||||
have_activation_code: "已经有激活码了?",
|
||||
buy: "立即购买",
|
||||
already_plus: "已经是专业版了,是否升级为商业版?注意:专业版时长将被覆盖",
|
||||
already_comm: "已经是商业版了,不能降级为专业版",
|
||||
already_perpetual_plus: "您已经是永久专业版了,无法继续升级",
|
||||
confirm: "确认",
|
||||
};
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { request } from "/src/api/service";
|
||||
// import "/src/mock";
|
||||
import { ColumnCompositionProps, CrudOptions, FastCrud, PageQuery, PageRes, setLogger, TransformResProps, useColumns, UseCrudProps, UserPageQuery, useTypes, utils } from "@fast-crud/fast-crud";
|
||||
import { ColumnCompositionProps, CrudOptions, FastCrud, PageQuery, PageRes, setLogger, TransformResProps, useColumns, UseCrudProps, UserPageQuery, useTypes, utils, forEachTableColumns } from "@fast-crud/fast-crud";
|
||||
import "@fast-crud/fast-crud/dist/style.css";
|
||||
import { FsExtendsCopyable, FsExtendsEditor, FsExtendsJson, FsExtendsTime, FsExtendsUploader, FsExtendsInput } from "@fast-crud/fast-extends";
|
||||
import "@fast-crud/fast-extends/dist/style.css";
|
||||
@@ -17,22 +17,24 @@ import { FsEditorCode } from "@fast-crud/editor-code";
|
||||
import "@fast-crud/editor-code/dist/style.css";
|
||||
|
||||
class ColumnSizeSaver {
|
||||
save: (key: string, size: number) => void;
|
||||
constructor() {
|
||||
this.save = debounce((key: string, size: number) => {
|
||||
type: string;
|
||||
save: (key: string, value: any) => void;
|
||||
constructor(type: string = "columnSize") {
|
||||
this.type = type;
|
||||
this.save = debounce((key: string, value: any) => {
|
||||
const saveKey = this.getKey();
|
||||
let data = LocalStorage.get(saveKey);
|
||||
if (!data) {
|
||||
data = {};
|
||||
}
|
||||
data[key] = size;
|
||||
data[key] = value;
|
||||
LocalStorage.set(saveKey, data);
|
||||
});
|
||||
}
|
||||
getKey() {
|
||||
const loc = window.location;
|
||||
const currentUrl = `${loc.pathname}${loc.search}${loc.hash}`;
|
||||
return `columnSize-${currentUrl}`;
|
||||
return `${this.type}-${currentUrl}`;
|
||||
}
|
||||
get(key: string) {
|
||||
const saveKey = this.getKey();
|
||||
@@ -45,6 +47,7 @@ class ColumnSizeSaver {
|
||||
}
|
||||
}
|
||||
const columnSizeSaver = new ColumnSizeSaver();
|
||||
const tableSortSaver = new ColumnSizeSaver("tableSorter");
|
||||
|
||||
function install(app: App, options: any = {}) {
|
||||
app.use(UiAntdv);
|
||||
@@ -63,6 +66,8 @@ function install(app: App, options: any = {}) {
|
||||
commonOptions(props: UseCrudProps): CrudOptions {
|
||||
utils.logger.debug("commonOptions:", props);
|
||||
const crudBinding = props.crudExpose?.crudBinding;
|
||||
const crudExpose = props.crudExpose;
|
||||
|
||||
const { isMobile } = usePreferences();
|
||||
const opts: CrudOptions = {
|
||||
settings: {
|
||||
@@ -74,6 +79,20 @@ function install(app: App, options: any = {}) {
|
||||
},
|
||||
},
|
||||
},
|
||||
onUseCrud(bindings: any) {
|
||||
const oldSorter = tableSortSaver.get("sorter");
|
||||
if (oldSorter) {
|
||||
const { prop, order } = oldSorter;
|
||||
forEachTableColumns(bindings.table.columns, (column: any) => {
|
||||
if (column.key === prop) {
|
||||
column.sortOrder = order;
|
||||
} else {
|
||||
column.sortOrder = false;
|
||||
}
|
||||
});
|
||||
bindings.table.sort = oldSorter;
|
||||
}
|
||||
},
|
||||
},
|
||||
table: {
|
||||
scroll: {
|
||||
@@ -104,6 +123,30 @@ function install(app: App, options: any = {}) {
|
||||
return "-";
|
||||
},
|
||||
},
|
||||
onSortChange: (sortChange: any) => {
|
||||
const { isServerSort, prop, asc, order } = sortChange;
|
||||
const oldSort = crudBinding.value.table.sort;
|
||||
const newSorter = isServerSort ? { prop, order, asc } : null;
|
||||
|
||||
forEachTableColumns(crudBinding.value.table.columns, (column: any) => {
|
||||
if (column.key === prop) {
|
||||
column.sortOrder = order;
|
||||
} else {
|
||||
column.sortOrder = false;
|
||||
}
|
||||
});
|
||||
|
||||
crudBinding.value.table.sort = newSorter;
|
||||
if (newSorter) {
|
||||
tableSortSaver.save("sorter", newSorter);
|
||||
} else {
|
||||
tableSortSaver.clear();
|
||||
}
|
||||
|
||||
if (isServerSort || oldSort != null) {
|
||||
crudExpose.doRefresh();
|
||||
}
|
||||
},
|
||||
},
|
||||
toolbar: {
|
||||
export: {
|
||||
@@ -189,6 +232,10 @@ function install(app: App, options: any = {}) {
|
||||
},
|
||||
wrapperCol: {
|
||||
span: null,
|
||||
buttons: {
|
||||
copy: { show: false },
|
||||
paste: { show: false },
|
||||
},
|
||||
},
|
||||
wrapper: {
|
||||
saveRemind: true,
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import { defineStore } from "pinia";
|
||||
import { Modal, notification } from "ant-design-vue";
|
||||
import * as _ from "lodash-es";
|
||||
import * as basicApi from "./api.basic";
|
||||
import { AppInfo, HeaderMenus, PlusInfo, SiteEnv, SiteInfo, SuiteSetting, SysInstallInfo, SysPublicSetting } from "./api.basic";
|
||||
import { useUserStore } from "../user";
|
||||
@@ -11,6 +10,7 @@ import { useTitle } from "@vueuse/core";
|
||||
import { utils } from "/@/utils";
|
||||
import { cloneDeep, merge } from "lodash-es";
|
||||
import { useI18n } from "/src/locales";
|
||||
import dayjs from "dayjs";
|
||||
export interface SettingState {
|
||||
skipReset?: boolean; // 注销登录时,不清空此store的状态
|
||||
sysPublic?: SysPublicSetting;
|
||||
@@ -126,11 +126,14 @@ export const useSettingStore = defineStore({
|
||||
getInstallInfo(): SysInstallInfo {
|
||||
return this.installInfo;
|
||||
},
|
||||
isPerpetual(): boolean {
|
||||
return this.plusInfo?.isPlus && this.plusInfo?.expireTime === -1;
|
||||
},
|
||||
isPlus(): boolean {
|
||||
return this.plusInfo?.isPlus && this.plusInfo?.expireTime > new Date().getTime();
|
||||
return this.plusInfo?.isPlus && (this.plusInfo?.expireTime === -1 || this.plusInfo?.expireTime > new Date().getTime());
|
||||
},
|
||||
isComm(): boolean {
|
||||
return this.plusInfo?.isComm && this.plusInfo?.expireTime > new Date().getTime();
|
||||
return this.plusInfo?.isComm && (this.plusInfo?.expireTime === -1 || this.plusInfo?.expireTime > new Date().getTime());
|
||||
},
|
||||
isAgent(): boolean {
|
||||
return this.siteEnv?.agent?.enabled === true;
|
||||
@@ -138,6 +141,18 @@ export const useSettingStore = defineStore({
|
||||
isCommOrAgent() {
|
||||
return this.isComm || this.isAgent;
|
||||
},
|
||||
expiresText() {
|
||||
if (this.plusInfo?.expireTime == null) {
|
||||
return "";
|
||||
}
|
||||
if (this.plusInfo?.expireTime === -1) {
|
||||
return "永久";
|
||||
}
|
||||
return dayjs(this.plusInfo?.expireTime).format("YYYY-MM-DD");
|
||||
},
|
||||
isForever() {
|
||||
return this.isPlus && this.plusInfo?.expireTime === -1;
|
||||
},
|
||||
vipLabel(): string {
|
||||
const { t } = useI18n();
|
||||
const vipLabelMap: any = {
|
||||
@@ -181,12 +196,12 @@ export const useSettingStore = defineStore({
|
||||
},
|
||||
async loadSysSettings() {
|
||||
const allSettings = await basicApi.loadAllSettings();
|
||||
_.merge(this.sysPublic, allSettings.sysPublic || {});
|
||||
_.merge(this.installInfo, allSettings.installInfo || {});
|
||||
_.merge(this.siteEnv, allSettings.siteEnv || {});
|
||||
_.merge(this.plusInfo, allSettings.plusInfo || {});
|
||||
_.merge(this.headerMenus, allSettings.headerMenus || {});
|
||||
_.merge(this.suiteSetting, allSettings.suiteSetting || {});
|
||||
merge(this.sysPublic, allSettings.sysPublic || {});
|
||||
merge(this.installInfo, allSettings.installInfo || {});
|
||||
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 || {});
|
||||
this.initAppInfo(allSettings.app || {});
|
||||
@@ -206,7 +221,7 @@ export const useSettingStore = defineStore({
|
||||
siteInfo.loginLogo = `api/basic/file/download?key=${siteInfo.loginLogo}`;
|
||||
}
|
||||
}
|
||||
this.siteInfo = _.merge({}, defaultSiteInfo, siteInfo);
|
||||
this.siteInfo = merge({}, defaultSiteInfo, siteInfo);
|
||||
|
||||
if (this.siteInfo.logo) {
|
||||
updatePreferences({
|
||||
|
||||
@@ -6,22 +6,28 @@ export function getEnvValue(key: string) {
|
||||
|
||||
export class EnvConfig {
|
||||
MODE: string = import.meta.env.MODE;
|
||||
API: string = import.meta.env.VITE_APP_API;
|
||||
STORAGE: string = import.meta.env.VITE_APP_STORAGE;
|
||||
TITLE: string = import.meta.env.VITE_APP_TITLE;
|
||||
SLOGAN: string = import.meta.env.VITE_APP_SLOGAN;
|
||||
LOGO: string = import.meta.env.VITE_APP_LOGO;
|
||||
LOGIN_LOGO: string = import.meta.env.VITE_APP_LOGIN_LOGO;
|
||||
ICP_NO: string = import.meta.env.VITE_APP_ICP_NO;
|
||||
COPYRIGHT_YEAR: string = import.meta.env.VITE_APP_COPYRIGHT_YEAR;
|
||||
COPYRIGHT_NAME: string = import.meta.env.VITE_APP_COPYRIGHT_NAME;
|
||||
COPYRIGHT_URL: string = import.meta.env.VITE_APP_COPYRIGHT_URL;
|
||||
PM_ENABLED: string = import.meta.env.VITE_APP_PM_ENABLED;
|
||||
API: string;
|
||||
STORAGE: string;
|
||||
TITLE: string;
|
||||
SLOGAN: string;
|
||||
LOGO: string;
|
||||
LOGIN_LOGO: string;
|
||||
ICP_NO: string;
|
||||
COPYRIGHT_YEAR: string;
|
||||
COPYRIGHT_NAME: string;
|
||||
COPYRIGHT_URL: string;
|
||||
PM_ENABLED: string;
|
||||
VIP_PRODUCT_URL: string;
|
||||
|
||||
init(env: any) {
|
||||
constructor() {
|
||||
this.init();
|
||||
}
|
||||
init() {
|
||||
const env = import.meta.env;
|
||||
for (const key in this) {
|
||||
if (this.hasOwnProperty(key)) {
|
||||
this[key] = env[key];
|
||||
const metaKey = "VITE_APP_" + key;
|
||||
if (this.hasOwnProperty(key) && env.hasOwnProperty(metaKey)) {
|
||||
this[key] = env[metaKey];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -830,10 +830,6 @@ export default defineComponent({
|
||||
saveLoading.value = true;
|
||||
try {
|
||||
if (props.options.doSave) {
|
||||
if (pipeline.value.version == null) {
|
||||
pipeline.value.version = 0;
|
||||
}
|
||||
pipeline.value.version++;
|
||||
currentPipeline.value = pipeline.value;
|
||||
|
||||
//移除空阶段
|
||||
|
||||
@@ -375,7 +375,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat
|
||||
},
|
||||
},
|
||||
createTime: {
|
||||
title: t("certd.create_time"),
|
||||
title: t("certd.createTime"),
|
||||
type: "datetime",
|
||||
form: {
|
||||
show: false,
|
||||
@@ -387,7 +387,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat
|
||||
},
|
||||
},
|
||||
updateTime: {
|
||||
title: t("certd.update_time"),
|
||||
title: t("certd.updateTime"),
|
||||
type: "datetime",
|
||||
form: {
|
||||
show: false,
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
typeorm:
|
||||
dataSource:
|
||||
default:
|
||||
database: './data/db-plus-dev-1.sqlite'
|
||||
database: './data/db-plus-dev.sqlite'
|
||||
|
||||
# plus server: 'http://127.0.0.1:11007'
|
||||
account:
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { ALL, Body, Controller, Inject, Post, Provide } from '@midwayjs/core';
|
||||
import { BaseController, PlusService, SysInstallInfo, SysSettingsService } from '@certd/lib-server';
|
||||
import { logger } from '@certd/basic';
|
||||
|
||||
/**
|
||||
*/
|
||||
@@ -31,15 +32,20 @@ export class SysPlusController extends BaseController {
|
||||
installInfo.bindUrl = url;
|
||||
await this.sysSettingsService.saveSetting(installInfo);
|
||||
|
||||
//重新验证配置
|
||||
await this.plusService.verify();
|
||||
//重新验证vip
|
||||
try{
|
||||
await this.plusService.verify();
|
||||
}catch(e){
|
||||
logger.error(`验证配置失败:${e}`);
|
||||
}
|
||||
|
||||
|
||||
return this.ok(true);
|
||||
}
|
||||
|
||||
@Post('/getVipTrial', { summary: 'sys:settings:edit' })
|
||||
async getVipTrial(@Body(ALL) body) {
|
||||
const res = await this.plusService.getVipTrial();
|
||||
async getVipTrial(@Body("vipType") vipType?:string) {
|
||||
const res = await this.plusService.getVipTrial(vipType);
|
||||
return this.ok(res);
|
||||
}
|
||||
//
|
||||
|
||||
@@ -134,6 +134,8 @@ export class CnameRecordService extends BaseService<CnameRecordEntity> {
|
||||
if (!param.id) {
|
||||
throw new ValidateException("id不能为空");
|
||||
}
|
||||
//hostRecord包含所有权校验信息,不允许用户修改hostRecord
|
||||
delete param.hostRecord
|
||||
|
||||
const old = await this.info(param.id);
|
||||
if (!old) {
|
||||
|
||||
@@ -255,6 +255,11 @@ export class PipelineService extends BaseService<PipelineEntity> {
|
||||
bean.title = pipeline.title;
|
||||
}
|
||||
pipeline.id = bean.id;
|
||||
|
||||
if (pipeline.version == null) {
|
||||
pipeline.version = 0;
|
||||
}
|
||||
pipeline.version++;
|
||||
bean.content = JSON.stringify(pipeline);
|
||||
await this.addOrUpdate(bean);
|
||||
await this.registerTrigger(bean);
|
||||
|
||||
169
pnpm-lock.yaml
generated
169
pnpm-lock.yaml
generated
@@ -46,7 +46,7 @@ importers:
|
||||
packages/core/acme-client:
|
||||
dependencies:
|
||||
'@certd/basic':
|
||||
specifier: ^1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: link:../basic
|
||||
'@peculiar/x509':
|
||||
specifier: ^1.11.0
|
||||
@@ -207,11 +207,11 @@ importers:
|
||||
packages/core/pipeline:
|
||||
dependencies:
|
||||
'@certd/basic':
|
||||
specifier: ^1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: link:../basic
|
||||
'@certd/plus-core':
|
||||
specifier: ^1.37.2
|
||||
version: 1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: 1.37.4
|
||||
dayjs:
|
||||
specifier: ^1.11.7
|
||||
version: 1.11.13
|
||||
@@ -415,7 +415,7 @@ importers:
|
||||
packages/libs/lib-k8s:
|
||||
dependencies:
|
||||
'@certd/basic':
|
||||
specifier: ^1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: link:../../core/basic
|
||||
'@kubernetes/client-node':
|
||||
specifier: 0.21.0
|
||||
@@ -455,20 +455,20 @@ importers:
|
||||
packages/libs/lib-server:
|
||||
dependencies:
|
||||
'@certd/acme-client':
|
||||
specifier: ^1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: link:../../core/acme-client
|
||||
'@certd/basic':
|
||||
specifier: ^1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: link:../../core/basic
|
||||
'@certd/pipeline':
|
||||
specifier: ^1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: link:../../core/pipeline
|
||||
'@certd/plugin-lib':
|
||||
specifier: ^1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: link:../../plugins/plugin-lib
|
||||
'@certd/plus-core':
|
||||
specifier: ^1.37.2
|
||||
version: 1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: 1.37.4
|
||||
'@midwayjs/cache':
|
||||
specifier: 3.14.0
|
||||
version: 3.14.0
|
||||
@@ -613,16 +613,16 @@ importers:
|
||||
packages/plugins/plugin-cert:
|
||||
dependencies:
|
||||
'@certd/acme-client':
|
||||
specifier: ^1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: link:../../core/acme-client
|
||||
'@certd/basic':
|
||||
specifier: ^1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: link:../../core/basic
|
||||
'@certd/pipeline':
|
||||
specifier: ^1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: link:../../core/pipeline
|
||||
'@certd/plugin-lib':
|
||||
specifier: ^1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: link:../plugin-lib
|
||||
'@google-cloud/publicca':
|
||||
specifier: ^1.3.0
|
||||
@@ -701,10 +701,10 @@ importers:
|
||||
specifier: ^3.787.0
|
||||
version: 3.810.0(aws-crt@1.26.2)
|
||||
'@certd/basic':
|
||||
specifier: ^1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: link:../../core/basic
|
||||
'@certd/pipeline':
|
||||
specifier: ^1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: link:../../core/pipeline
|
||||
'@kubernetes/client-node':
|
||||
specifier: 0.21.0
|
||||
@@ -789,19 +789,19 @@ importers:
|
||||
packages/pro/commercial-core:
|
||||
dependencies:
|
||||
'@certd/basic':
|
||||
specifier: ^1.37.1
|
||||
specifier: ^1.37.2
|
||||
version: link:../../core/basic
|
||||
'@certd/lib-server':
|
||||
specifier: ^1.37.1
|
||||
specifier: ^1.37.2
|
||||
version: link:../../libs/lib-server
|
||||
'@certd/pipeline':
|
||||
specifier: ^1.37.1
|
||||
specifier: ^1.37.2
|
||||
version: link:../../core/pipeline
|
||||
'@certd/plugin-plus':
|
||||
specifier: ^1.37.1
|
||||
specifier: ^1.37.2
|
||||
version: link:../plugin-plus
|
||||
'@certd/plus-core':
|
||||
specifier: ^1.37.1
|
||||
specifier: ^1.37.2
|
||||
version: link:../plus-core
|
||||
'@midwayjs/core':
|
||||
specifier: 3.20.11
|
||||
@@ -886,22 +886,22 @@ importers:
|
||||
specifier: ^1.0.2
|
||||
version: 1.0.3
|
||||
'@certd/basic':
|
||||
specifier: ^1.37.1
|
||||
specifier: ^1.37.2
|
||||
version: link:../../core/basic
|
||||
'@certd/lib-k8s':
|
||||
specifier: ^1.37.1
|
||||
specifier: ^1.37.2
|
||||
version: link:../../libs/lib-k8s
|
||||
'@certd/pipeline':
|
||||
specifier: ^1.37.1
|
||||
specifier: ^1.37.2
|
||||
version: link:../../core/pipeline
|
||||
'@certd/plugin-cert':
|
||||
specifier: ^1.37.1
|
||||
specifier: ^1.37.2
|
||||
version: link:../../plugins/plugin-cert
|
||||
'@certd/plugin-lib':
|
||||
specifier: ^1.37.1
|
||||
specifier: ^1.37.2
|
||||
version: link:../../plugins/plugin-lib
|
||||
'@certd/plus-core':
|
||||
specifier: ^1.37.1
|
||||
specifier: ^1.37.2
|
||||
version: link:../plus-core
|
||||
ali-oss:
|
||||
specifier: ^6.21.0
|
||||
@@ -1004,7 +1004,7 @@ importers:
|
||||
packages/pro/plus-core:
|
||||
dependencies:
|
||||
'@certd/basic':
|
||||
specifier: ^1.37.1
|
||||
specifier: ^1.37.2
|
||||
version: link:../../core/basic
|
||||
dayjs:
|
||||
specifier: ^1.11.7
|
||||
@@ -1086,20 +1086,20 @@ importers:
|
||||
specifier: ^4.1.0
|
||||
version: 4.1.0
|
||||
'@fast-crud/editor-code':
|
||||
specifier: ^1.26.6
|
||||
version: 1.26.6
|
||||
specifier: ^1.27.4
|
||||
version: 1.27.4
|
||||
'@fast-crud/fast-crud':
|
||||
specifier: ^1.26.6
|
||||
version: 1.26.6(vue@3.5.14(typescript@5.8.3))
|
||||
specifier: ^1.27.4
|
||||
version: 1.27.4(vue@3.5.14(typescript@5.8.3))
|
||||
'@fast-crud/fast-extends':
|
||||
specifier: ^1.26.6
|
||||
version: 1.26.6(aws-crt@1.26.2)(vue@3.5.14(typescript@5.8.3))
|
||||
specifier: ^1.27.4
|
||||
version: 1.27.4(aws-crt@1.26.2)(vue@3.5.14(typescript@5.8.3))
|
||||
'@fast-crud/ui-antdv4':
|
||||
specifier: ^1.26.6
|
||||
version: 1.26.6
|
||||
specifier: ^1.27.4
|
||||
version: 1.27.4
|
||||
'@fast-crud/ui-interface':
|
||||
specifier: ^1.26.6
|
||||
version: 1.26.6
|
||||
specifier: ^1.27.4
|
||||
version: 1.27.4
|
||||
'@iconify/tailwind':
|
||||
specifier: ^1.2.0
|
||||
version: 1.2.0
|
||||
@@ -1300,10 +1300,10 @@ importers:
|
||||
version: 0.1.3(zod@3.24.4)
|
||||
devDependencies:
|
||||
'@certd/lib-iframe':
|
||||
specifier: ^1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: link:../../libs/lib-iframe
|
||||
'@certd/pipeline':
|
||||
specifier: ^1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: link:../../core/pipeline
|
||||
'@rollup/plugin-commonjs':
|
||||
specifier: ^25.0.7
|
||||
@@ -1486,47 +1486,47 @@ importers:
|
||||
specifier: ^3.705.0
|
||||
version: 3.810.0(aws-crt@1.26.2)
|
||||
'@certd/acme-client':
|
||||
specifier: ^1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: link:../../core/acme-client
|
||||
'@certd/basic':
|
||||
specifier: ^1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: link:../../core/basic
|
||||
'@certd/commercial-core':
|
||||
specifier: ^1.37.2
|
||||
version: 1.37.2(better-sqlite3@11.10.0)(encoding@0.1.13)(mysql2@3.14.1)(pg@8.16.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@types/node@18.19.100)(typescript@5.8.3))
|
||||
specifier: ^1.37.4
|
||||
version: 1.37.4(better-sqlite3@11.10.0)(encoding@0.1.13)(mysql2@3.14.1)(pg@8.16.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@types/node@18.19.100)(typescript@5.8.3))
|
||||
'@certd/cv4pve-api-javascript':
|
||||
specifier: ^8.4.2
|
||||
version: 8.4.2
|
||||
'@certd/jdcloud':
|
||||
specifier: ^1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: link:../../libs/lib-jdcloud
|
||||
'@certd/lib-huawei':
|
||||
specifier: ^1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: link:../../libs/lib-huawei
|
||||
'@certd/lib-k8s':
|
||||
specifier: ^1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: link:../../libs/lib-k8s
|
||||
'@certd/lib-server':
|
||||
specifier: ^1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: link:../../libs/lib-server
|
||||
'@certd/midway-flyway-js':
|
||||
specifier: ^1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: link:../../libs/midway-flyway-js
|
||||
'@certd/pipeline':
|
||||
specifier: ^1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: link:../../core/pipeline
|
||||
'@certd/plugin-cert':
|
||||
specifier: ^1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: link:../../plugins/plugin-cert
|
||||
'@certd/plugin-lib':
|
||||
specifier: ^1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: link:../../plugins/plugin-lib
|
||||
'@certd/plugin-plus':
|
||||
specifier: ^1.37.2
|
||||
version: 1.37.2(encoding@0.1.13)
|
||||
specifier: ^1.37.4
|
||||
version: 1.37.4(encoding@0.1.13)
|
||||
'@certd/plus-core':
|
||||
specifier: ^1.37.2
|
||||
version: 1.37.2
|
||||
specifier: ^1.37.4
|
||||
version: 1.37.4
|
||||
'@huaweicloud/huaweicloud-sdk-cdn':
|
||||
specifier: ^3.1.120
|
||||
version: 3.1.149
|
||||
@@ -2769,17 +2769,17 @@ packages:
|
||||
'@better-scroll/zoom@2.5.1':
|
||||
resolution: {integrity: sha512-aGvFY5ooeZWS4RcxQLD+pGLpQHQxpPy0sMZV3yadcd2QK53PK9gS4Dp+BYfRv8lZ4/P2LoNEhr6Wq1DN6+uPlA==}
|
||||
|
||||
'@certd/commercial-core@1.37.2':
|
||||
resolution: {integrity: sha512-fhDA3sr+iNPEj7xf9D2bJHIl6SzOhahJJ65wJID1HHHSKl8/o+QYpaa0vLfoxE7gmem7H+BoIDe2zB54/JVdFw==}
|
||||
'@certd/commercial-core@1.37.4':
|
||||
resolution: {integrity: sha512-Axx1yBekqPy6D9LjjrijVbmO8Ck6E9Fv0+Jcy8cuua269sSpME8k3nj0U8Y4ec0JwfE6GbQYF9gaUE0kSSNexg==}
|
||||
|
||||
'@certd/cv4pve-api-javascript@8.4.2':
|
||||
resolution: {integrity: sha512-udGce7ewrVl4DmZvX+17PjsnqsdDIHEDatr8QP0AVrY2p+8JkaSPW4mXCKiLGf82C9K2+GXgT+qNIqgW7tfF9Q==}
|
||||
|
||||
'@certd/plugin-plus@1.37.2':
|
||||
resolution: {integrity: sha512-mlhlNe3ft9DAt3sL01f5MbVnSqWprXdwW6G6Pvn1XZW+ZdvFK+/jDXcn4DwKKeBbQvbijB7VsdWMEooK8GWgoQ==}
|
||||
'@certd/plugin-plus@1.37.4':
|
||||
resolution: {integrity: sha512-h3oSqMBSBYAz8dPcZ4fexrUk32Y2pJcixZMycOZi5onaM9Q5skkWqW3X625B7kdyYaIsojWQzETerXmwJzTBxQ==}
|
||||
|
||||
'@certd/plus-core@1.37.2':
|
||||
resolution: {integrity: sha512-UIugZvzmTt6OSJnKdPv6q4/06SRxPxFfPXyekLNLwGIB/LkG3qjqZyu98xOT/ytI0k/DT9WerM5X7EAyxD9oEw==}
|
||||
'@certd/plus-core@1.37.4':
|
||||
resolution: {integrity: sha512-7RFOBjZW98hgsTqoq2T8E6ANhWkuNP7Yi3Y1rZ7m5aXAOgn2H1Aci/Jz9bmD6MZgawfU7j2MLoBXFLEPLpwruQ==}
|
||||
|
||||
'@certd/vue-js-cron-core@6.0.3':
|
||||
resolution: {integrity: sha512-kqzoAMhYz9j6FGNWEODRYtt4NpUEUwjpkU89z5WVg2tCtOcI5VhwyUGOd8AxiBCRfd6PtXvzuqw85PaOps9wrQ==}
|
||||
@@ -3420,20 +3420,20 @@ packages:
|
||||
resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
|
||||
'@fast-crud/editor-code@1.26.6':
|
||||
resolution: {integrity: sha512-Dq51jO3ACkJJB3eIfyyQ/cU14Sn5jBG5qui2ZTaibs16mpE1cSMLJNl1kk5VXucHeMAlaa5QEJWuuYO/dEKZcA==}
|
||||
'@fast-crud/editor-code@1.27.4':
|
||||
resolution: {integrity: sha512-syuSxpNc/So5xoGGZkiC4Iqa8MdrQpeHJRqs6/A8pRUDh9UEN1iBFm8PPxmSluHc7sFXZdt0IIRfJE6sDBhRiA==}
|
||||
|
||||
'@fast-crud/fast-crud@1.26.6':
|
||||
resolution: {integrity: sha512-m44F0qPUaswEBAn+bUqpjNm/+zn/icsTEpr4rGnDd692eZKzx7uPP1szVFwCc0nZeVteI5hNNAioIKB/6Xns1w==}
|
||||
'@fast-crud/fast-crud@1.27.4':
|
||||
resolution: {integrity: sha512-wwTqwETgcgBa8v2P/C2MGFfAxZGvAPDFiyrg3b9k+6eMePR//RbY9+M1knsTVaHTTkabAmgwZ+OnnCJzpmnK/A==}
|
||||
|
||||
'@fast-crud/fast-extends@1.26.6':
|
||||
resolution: {integrity: sha512-OHWxN7ZWmE0I0rGyqLjgx9RfZxHakWO68cAX5b6ADwFfFlGR2zfQuj6VjfYayPe6VSt5p3ZoUSsxQgmLbHYnKA==}
|
||||
'@fast-crud/fast-extends@1.27.4':
|
||||
resolution: {integrity: sha512-GVWmwondzouPsDD2mCLmxbR7RV5Cf1pJQS0nracQZfrwKsJdNcKlIZ3F3SULklAELMtW01hFbwt7VC+ZehjvAQ==}
|
||||
|
||||
'@fast-crud/ui-antdv4@1.26.6':
|
||||
resolution: {integrity: sha512-VeTt75ejjhIzii5wcQFWY5ugEizLGZhU2cowLNTGskCBmMEAP3GGUwn4TP33dtmQWvTu7FMjwaKtyWnFaiYmuA==}
|
||||
'@fast-crud/ui-antdv4@1.27.4':
|
||||
resolution: {integrity: sha512-WcDYmlc06/BIpOnpfN7cZuWqW2kxZC5EfazVw1IaY+kxx3eLRdWX1dShh23oZEsKdwKwGcgY7xeiptFgEpel+Q==}
|
||||
|
||||
'@fast-crud/ui-interface@1.26.6':
|
||||
resolution: {integrity: sha512-C6lWTWs8Vl76qQjORGbPmOy53clo3rO5KnVX2FhTcu5TTecR9JOc85IcQPSWRnWEn+dCdted2wXR83TgQK41eA==}
|
||||
'@fast-crud/ui-interface@1.27.4':
|
||||
resolution: {integrity: sha512-hZJiABhXOZma6kaxes9waKMdVEjaEMUtEGZ7TIXXJuExynNOMK1AVtfgACSP5uwTj8mKxUEa7iBKx2vr9EcfFA==}
|
||||
|
||||
'@fidm/asn1@1.0.4':
|
||||
resolution: {integrity: sha512-esd1jyNvRb2HVaQGq2Gg8Z0kbQPXzV9Tq5Z14KNIov6KfFD6PTaRIO8UpcsYiTNzOqJpmyzWgVTrUwFV3UF4TQ==}
|
||||
@@ -15385,13 +15385,13 @@ snapshots:
|
||||
dependencies:
|
||||
'@better-scroll/core': 2.5.1
|
||||
|
||||
'@certd/commercial-core@1.37.2(better-sqlite3@11.10.0)(encoding@0.1.13)(mysql2@3.14.1)(pg@8.16.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@types/node@18.19.100)(typescript@5.8.3))':
|
||||
'@certd/commercial-core@1.37.4(better-sqlite3@11.10.0)(encoding@0.1.13)(mysql2@3.14.1)(pg@8.16.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@types/node@18.19.100)(typescript@5.8.3))':
|
||||
dependencies:
|
||||
'@certd/basic': link:packages/core/basic
|
||||
'@certd/lib-server': link:packages/libs/lib-server
|
||||
'@certd/pipeline': link:packages/core/pipeline
|
||||
'@certd/plugin-plus': 1.37.2(encoding@0.1.13)
|
||||
'@certd/plus-core': 1.37.2
|
||||
'@certd/plugin-plus': 1.37.4(encoding@0.1.13)
|
||||
'@certd/plus-core': 1.37.4
|
||||
'@midwayjs/core': 3.20.11
|
||||
'@midwayjs/koa': 3.20.13
|
||||
'@midwayjs/logger': 3.4.2
|
||||
@@ -15430,7 +15430,7 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@certd/plugin-plus@1.37.2(encoding@0.1.13)':
|
||||
'@certd/plugin-plus@1.37.4(encoding@0.1.13)':
|
||||
dependencies:
|
||||
'@alicloud/pop-core': 1.8.0
|
||||
'@baiducloud/sdk': 1.0.3
|
||||
@@ -15438,7 +15438,8 @@ snapshots:
|
||||
'@certd/lib-k8s': link:packages/libs/lib-k8s
|
||||
'@certd/pipeline': link:packages/core/pipeline
|
||||
'@certd/plugin-cert': link:packages/plugins/plugin-cert
|
||||
'@certd/plus-core': 1.37.2
|
||||
'@certd/plugin-lib': link:packages/plugins/plugin-lib
|
||||
'@certd/plus-core': 1.37.4
|
||||
ali-oss: 6.23.0
|
||||
baidu-aip-sdk: 4.16.16
|
||||
basic-ftp: 5.0.5
|
||||
@@ -15457,7 +15458,7 @@ snapshots:
|
||||
- proxy-agent
|
||||
- supports-color
|
||||
|
||||
'@certd/plus-core@1.37.2':
|
||||
'@certd/plus-core@1.37.4':
|
||||
dependencies:
|
||||
'@certd/basic': link:packages/core/basic
|
||||
dayjs: 1.11.13
|
||||
@@ -15973,14 +15974,14 @@ snapshots:
|
||||
|
||||
'@eslint/js@8.57.0': {}
|
||||
|
||||
'@fast-crud/editor-code@1.26.6':
|
||||
'@fast-crud/editor-code@1.27.4':
|
||||
dependencies:
|
||||
js-yaml: 4.1.0
|
||||
lodash-es: 4.17.21
|
||||
monaco-editor: 0.52.2
|
||||
monaco-yaml: 5.4.0(monaco-editor@0.52.2)
|
||||
|
||||
'@fast-crud/fast-crud@1.26.6(vue@3.5.14(typescript@5.8.3))':
|
||||
'@fast-crud/fast-crud@1.27.4(vue@3.5.14(typescript@5.8.3))':
|
||||
dependencies:
|
||||
'@iconify/types': 2.0.0
|
||||
file-saver: 2.0.5
|
||||
@@ -15990,7 +15991,7 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- vue
|
||||
|
||||
'@fast-crud/fast-extends@1.26.6(aws-crt@1.26.2)(vue@3.5.14(typescript@5.8.3))':
|
||||
'@fast-crud/fast-extends@1.27.4(aws-crt@1.26.2)(vue@3.5.14(typescript@5.8.3))':
|
||||
dependencies:
|
||||
'@aws-sdk/client-s3': 3.810.0(aws-crt@1.26.2)
|
||||
'@aws-sdk/s3-request-presigner': 3.810.0
|
||||
@@ -16020,9 +16021,9 @@ snapshots:
|
||||
- utf-8-validate
|
||||
- vue
|
||||
|
||||
'@fast-crud/ui-antdv4@1.26.6': {}
|
||||
'@fast-crud/ui-antdv4@1.27.4': {}
|
||||
|
||||
'@fast-crud/ui-interface@1.26.6':
|
||||
'@fast-crud/ui-interface@1.27.4':
|
||||
dependencies:
|
||||
lodash-es: 4.17.21
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
01:26
|
||||
01:52
|
||||
|
||||
Reference in New Issue
Block a user