mirror of
https://github.com/certd/certd.git
synced 2026-05-06 05:47:25 +08:00
perf: 支持页脚自定义
This commit is contained in:
@@ -29,6 +29,7 @@ export class SysPublicSettings extends BaseSettings {
|
|||||||
managerOtherUserPipeline = false;
|
managerOtherUserPipeline = false;
|
||||||
icpNo?: string;
|
icpNo?: string;
|
||||||
mpsNo?: string;
|
mpsNo?: string;
|
||||||
|
customFooter?: string;
|
||||||
robots?: boolean = true;
|
robots?: boolean = true;
|
||||||
aiChatEnabled = true;
|
aiChatEnabled = true;
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.2 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.1 MiB |
@@ -3,7 +3,7 @@
|
|||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<span v-if="!settingStore.isComm">
|
<span v-if="!settingStore.isComm">
|
||||||
<span>Powered by</span>
|
<span>Powered by</span>
|
||||||
<a> handsfree.work </a>
|
<a href="https://certd.docmirror.cn/" target="_blank"> handfree.work </a>
|
||||||
<a-divider type="vertical" />
|
<a-divider type="vertical" />
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
@@ -21,7 +21,12 @@
|
|||||||
|
|
||||||
<span v-if="sysPublic.mpsNo">
|
<span v-if="sysPublic.mpsNo">
|
||||||
<a href="http://www.beian.gov.cn/portal/registerSystemInfo" target="_blank">{{ sysPublic.mpsNo }}</a>
|
<a href="http://www.beian.gov.cn/portal/registerSystemInfo" target="_blank">{{ sysPublic.mpsNo }}</a>
|
||||||
|
<a-divider type="vertical" />
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
|
<template v-if="sysPublic.customFooter && settingStore.isPlus">
|
||||||
|
<div v-html="sysPublic.customFooter"></div>
|
||||||
|
</template>
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-5">v{{ version }}</div>
|
<div class="ml-5">v{{ version }}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -75,7 +75,7 @@
|
|||||||
<div>
|
<div>
|
||||||
<span v-if="!settingStore.isComm">
|
<span v-if="!settingStore.isComm">
|
||||||
<span>Powered by</span>
|
<span>Powered by</span>
|
||||||
<a> handfree.work </a>
|
<a href="https://certd.docmirror.cn/" target="_blank"> handfree.work </a>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<template v-if="siteInfo.licenseTo">
|
<template v-if="siteInfo.licenseTo">
|
||||||
|
|||||||
@@ -802,6 +802,10 @@ export default {
|
|||||||
noticeHelper: "系统公告,将在首页显示",
|
noticeHelper: "系统公告,将在首页显示",
|
||||||
noticePlaceholder: "系统公告",
|
noticePlaceholder: "系统公告",
|
||||||
|
|
||||||
|
customFooter: "自定义页脚",
|
||||||
|
customFooterHelper: "自定义页脚,支持HTML",
|
||||||
|
customFooterPlaceholder: "自定义页脚",
|
||||||
|
|
||||||
reverseProxy: "反向代理列表",
|
reverseProxy: "反向代理列表",
|
||||||
reverseProxyHelper: "证书颁发机构ACME地址的反向代理,在申请证书时自动使用",
|
reverseProxyHelper: "证书颁发机构ACME地址的反向代理,在申请证书时自动使用",
|
||||||
reverseProxyPlaceholder: "http://le.px.handfree.work",
|
reverseProxyPlaceholder: "http://le.px.handfree.work",
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ export type SysPublicSetting = {
|
|||||||
managerOtherUserPipeline?: boolean;
|
managerOtherUserPipeline?: boolean;
|
||||||
icpNo?: string;
|
icpNo?: string;
|
||||||
mpsNo?: string;
|
mpsNo?: string;
|
||||||
|
customFooter?: string;
|
||||||
robots?: boolean;
|
robots?: boolean;
|
||||||
aiChatEnabled?: boolean;
|
aiChatEnabled?: boolean;
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import { LayoutFooter } from "./footer";
|
|||||||
import { LayoutHeader } from "./header";
|
import { LayoutHeader } from "./header";
|
||||||
import { LayoutExtraMenu, LayoutMenu, LayoutMixedMenu, useExtraMenu, useMixedMenu } from "./menu";
|
import { LayoutExtraMenu, LayoutMenu, LayoutMixedMenu, useExtraMenu, useMixedMenu } from "./menu";
|
||||||
import { LayoutTabbar } from "./tabbar";
|
import { LayoutTabbar } from "./tabbar";
|
||||||
|
import router from "/@/router";
|
||||||
|
|
||||||
defineOptions({ name: "BasicLayout" });
|
defineOptions({ name: "BasicLayout" });
|
||||||
|
|
||||||
@@ -160,7 +161,7 @@ const headerSlots = computed(() => {
|
|||||||
>
|
>
|
||||||
<!-- logo -->
|
<!-- logo -->
|
||||||
<template #logo>
|
<template #logo>
|
||||||
<VbenLogo v-if="preferences.logo.enable" :class="logoClass" :collapsed="logoCollapsed" :src="preferences.logo.source" :text="preferences.app.name" :theme="showHeaderNav ? headerTheme : theme" />
|
<VbenLogo v-if="preferences.logo.enable" class="pointer" :class="logoClass" :collapsed="logoCollapsed" :src="preferences.logo.source" :text="preferences.app.name" :theme="showHeaderNav ? headerTheme : theme" />
|
||||||
</template>
|
</template>
|
||||||
<!-- 头部区域 -->
|
<!-- 头部区域 -->
|
||||||
<template #header>
|
<template #header>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { VbenAvatar } from "../avatar";
|
import { VbenAvatar } from "../avatar";
|
||||||
|
import { useRouter } from "vue-router";
|
||||||
interface Props {
|
interface Props {
|
||||||
/**
|
/**
|
||||||
* @zh_CN 是否收起文本
|
* @zh_CN 是否收起文本
|
||||||
@@ -39,10 +39,15 @@ withDefaults(defineProps<Props>(), {
|
|||||||
src: "",
|
src: "",
|
||||||
theme: "light",
|
theme: "light",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
function handleLogoClick() {
|
||||||
|
router.push({ path: "/" });
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div :class="theme" class="flex h-full items-center text-lg">
|
<div :class="theme" class="flex h-full items-center text-lg pointer" @click="handleLogoClick">
|
||||||
<a :class="$attrs.class" :href="href" class="flex h-full items-center gap-2 overflow-hidden px-3 text-lg leading-normal transition-all duration-500">
|
<a :class="$attrs.class" :href="href" class="flex h-full items-center gap-2 overflow-hidden px-3 text-lg leading-normal transition-all duration-500">
|
||||||
<VbenAvatar v-if="src" :alt="text" :src="src" class="relative w-8 rounded-none bg-transparent" />
|
<VbenAvatar v-if="src" :alt="text" :src="src" class="relative w-8 rounded-none bg-transparent" />
|
||||||
<span v-if="!collapsed" class="text-foreground truncate text-nowrap font-semibold">
|
<span v-if="!collapsed" class="text-foreground truncate text-nowrap font-semibold">
|
||||||
|
|||||||
@@ -935,7 +935,7 @@ export default defineComponent({
|
|||||||
};
|
};
|
||||||
|
|
||||||
const historyCancel = () => {
|
const historyCancel = () => {
|
||||||
changeCurrentHistory();
|
// changeCurrentHistory();
|
||||||
console.log("currentPipeline", pipeline);
|
console.log("currentPipeline", pipeline);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<section class="hero-section">
|
<section class="hero-section bg-[#f7f7fc] dark:bg-[#000000]">
|
||||||
<div class="hero-container">
|
<div class="hero-container">
|
||||||
<div class="hero-content">
|
<div class="hero-content">
|
||||||
<h1 class="hero-title flex flex-col md:flex-row">
|
<h1 class="hero-title flex flex-col md:flex-row">
|
||||||
@@ -45,7 +45,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section id="features" class="features-section">
|
<section id="features" class="features-section">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="section-header">
|
<div class="section-header">
|
||||||
|
|||||||
@@ -25,6 +25,11 @@
|
|||||||
<div class="helper" v-html="t('certd.sys.setting.noticeHelper')"></div>
|
<div class="helper" v-html="t('certd.sys.setting.noticeHelper')"></div>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
|
|
||||||
|
<a-form-item :label="t('certd.sys.setting.customFooter')" :name="['public', 'customFooter']">
|
||||||
|
<a-textarea v-model:value="formState.public.customFooter" :placeholder="t('certd.sys.setting.customFooterPlaceholder')" :rows="5" />
|
||||||
|
<div class="helper" v-html="t('certd.sys.setting.customFooterHelper')"></div>
|
||||||
|
</a-form-item>
|
||||||
|
|
||||||
<a-form-item :label="t('certd.sys.setting.bindUrl')">
|
<a-form-item :label="t('certd.sys.setting.bindUrl')">
|
||||||
<a-button class="ml-2" type="primary" @click="settingsStore.openBindUrlModal({ closable: true })">{{ t("certd.sys.setting.bindUrl") }}</a-button>
|
<a-button class="ml-2" type="primary" @click="settingsStore.openBindUrlModal({ closable: true })">{{ t("certd.sys.setting.bindUrl") }}</a-button>
|
||||||
<div class="helper" v-html="t('certd.sys.setting.bindUrlHelper')"></div>
|
<div class="helper" v-html="t('certd.sys.setting.bindUrlHelper')"></div>
|
||||||
|
|||||||
@@ -702,11 +702,16 @@ export class PipelineService extends BaseService<PipelineEntity> {
|
|||||||
}
|
}
|
||||||
await doSaveHistory(latest);
|
await doSaveHistory(latest);
|
||||||
}
|
}
|
||||||
|
|
||||||
async start(){
|
async start(){
|
||||||
this.started = true
|
this.started = true
|
||||||
|
//先存一次,确保有数据
|
||||||
await this.save();
|
await this.save();
|
||||||
|
setTimeout(()=>{
|
||||||
|
//2秒后保存一次,尽快显示第一个任务的状态
|
||||||
|
this.save();
|
||||||
|
}, 1000 * 2);
|
||||||
this.interval = setInterval(()=>{
|
this.interval = setInterval(()=>{
|
||||||
|
//之后每5秒保存一次
|
||||||
this.save();
|
this.save();
|
||||||
}, 1000 * 5);
|
}, 1000 * 5);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user