feat: add COPYRIGHT (#183)

This commit is contained in:
Dream Hunter
2024-04-30 22:58:28 +08:00
committed by GitHub
parent 64bcf7d019
commit 32ce446a27
9 changed files with 59 additions and 6 deletions
+2
View File
@@ -5,6 +5,8 @@
- `ENABLE_USER_CREATE_EMAIL` 是否允许用户创建邮件 - `ENABLE_USER_CREATE_EMAIL` 是否允许用户创建邮件
- 允许 admin 创建无前缀的邮件 - 允许 admin 创建无前缀的邮件
- 添加 `SMTP proxy server`,支持 SMTP 发送邮件 - 添加 `SMTP proxy server`,支持 SMTP 发送邮件
- 修复某些情况浏览器无法加载 `wasm` 时使用 js 解析邮件
- 页脚添加 `COPYRIGHT`
## v0.3.0 ## v0.3.0
+7 -3
View File
@@ -1,11 +1,12 @@
<script setup> <script setup>
import { darkTheme, NGlobalStyle, zhCN } from 'naive-ui' import { darkTheme, NGlobalStyle, zhCN } from 'naive-ui'
import { computed, onMounted } from 'vue' import { computed, onMounted } from 'vue'
import { useDark, useToggle } from '@vueuse/core'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { useGlobalState } from './store' import { useGlobalState } from './store'
import { useIsMobile } from './utils/composables' import { useIsMobile } from './utils/composables'
import Header from './views/Header.vue'; import Header from './views/Header.vue';
import Footer from './views/Footer.vue';
const { localeCache, isDark, loading } = useGlobalState() const { localeCache, isDark, loading } = useGlobalState()
const theme = computed(() => isDark.value ? darkTheme : null) const theme = computed(() => isDark.value ? darkTheme : null)
@@ -42,8 +43,11 @@ onMounted(async () => {
<n-gi :span="isMobile ? 12 : 10"> <n-gi :span="isMobile ? 12 : 10">
<div class="main"> <div class="main">
<n-space vertical> <n-space vertical>
<Header /> <n-layout style="min-height: 80vh;">
<router-view></router-view> <Header />
<router-view></router-view>
</n-layout>
<Footer />
</n-space> </n-space>
</div> </div>
</n-gi> </n-gi>
+3 -2
View File
@@ -49,7 +49,7 @@ const apiFetch = async (path, options = {}) => {
const getOpenSettings = async (message) => { const getOpenSettings = async (message) => {
try { try {
const res = await api.fetch("/open_api/settings"); const res = await api.fetch("/open_api/settings");
openSettings.value = { Object.assign(openSettings.value, {
prefix: res["prefix"] || "", prefix: res["prefix"] || "",
needAuth: res["needAuth"] || false, needAuth: res["needAuth"] || false,
domains: res["domains"].map((domain) => { domains: res["domains"].map((domain) => {
@@ -62,7 +62,8 @@ const getOpenSettings = async (message) => {
enableUserCreateEmail: res["enableUserCreateEmail"] || false, enableUserCreateEmail: res["enableUserCreateEmail"] || false,
enableUserDeleteEmail: res["enableUserDeleteEmail"] || false, enableUserDeleteEmail: res["enableUserDeleteEmail"] || false,
enableAutoReply: res["enableAutoReply"] || false, enableAutoReply: res["enableAutoReply"] || false,
}; copyright: res["copyright"] || openSettings.value.copyright,
});
if (openSettings.value.needAuth) { if (openSettings.value.needAuth) {
showAuth.value = true; showAuth.value = true;
} }
+2 -1
View File
@@ -14,7 +14,8 @@ export const useGlobalState = createGlobalState(
enableUserCreateEmail: false, enableUserCreateEmail: false,
enableUserDeleteEmail: false, enableUserDeleteEmail: false,
enableAutoReply: false, enableAutoReply: false,
domains: [] domains: [],
copyright: 'Dream Hunter',
}) })
const settings = ref({ const settings = ref({
fetched: false, fetched: false,
+38
View File
@@ -0,0 +1,38 @@
<script setup>
import { useI18n } from 'vue-i18n'
import { useGlobalState } from '../store'
const { localeCache, openSettings } = useGlobalState()
const { t } = useI18n({
locale: localeCache.value || 'zh',
messages: {
en: {
copyright: "Copyright"
},
zh: {
copyright: "版权所有"
}
}
});
</script>
<template>
<div>
<n-divider class="footer-divider" />
<div style="text-align: center; padding: 20px">
<n-text depth="3">
{{ t('copyright') }} © 2023-{{ new Date().getFullYear() }} {{ openSettings.copyright }}
</n-text>
</div>
</div>
</template>
<style scoped>
.footer-divider {
margin: 0;
padding: 0 var(--x-padding);
}
</style>
+2
View File
@@ -79,6 +79,8 @@ ENABLE_USER_CREATE_EMAIL = true
ENABLE_USER_DELETE_EMAIL = true ENABLE_USER_DELETE_EMAIL = true
# Allow automatic replies to emails # Allow automatic replies to emails
ENABLE_AUTO_REPLY = false ENABLE_AUTO_REPLY = false
# Footer text
# COPYRIGHT = "Dream Hunter"
# default send balance, if not set, it will be 0 # default send balance, if not set, it will be 0
# DEFAULT_SEND_BALANCE = 1 # DEFAULT_SEND_BALANCE = 1
# dkim config # dkim config
@@ -37,6 +37,8 @@ ENABLE_USER_CREATE_EMAIL = true
ENABLE_USER_DELETE_EMAIL = true ENABLE_USER_DELETE_EMAIL = true
# 允许自动回复邮件 # 允许自动回复邮件
ENABLE_AUTO_REPLY = false ENABLE_AUTO_REPLY = false
# 前端界面页脚文本
# COPYRIGHT = "Dream Hunter"
# 默认发送邮件余额,如果不设置,将为 0 # 默认发送邮件余额,如果不设置,将为 0
# DEFAULT_SEND_BALANCE = 1 # DEFAULT_SEND_BALANCE = 1
# dkim config # dkim config
+1
View File
@@ -156,6 +156,7 @@ api.get('/open_api/settings', async (c) => {
"enableUserCreateEmail": getBooleanValue(c.env.ENABLE_USER_CREATE_EMAIL), "enableUserCreateEmail": getBooleanValue(c.env.ENABLE_USER_CREATE_EMAIL),
"enableUserDeleteEmail": getBooleanValue(c.env.ENABLE_USER_DELETE_EMAIL), "enableUserDeleteEmail": getBooleanValue(c.env.ENABLE_USER_DELETE_EMAIL),
"enableAutoReply": getBooleanValue(c.env.ENABLE_AUTO_REPLY), "enableAutoReply": getBooleanValue(c.env.ENABLE_AUTO_REPLY),
"copyright": c.env.COPYRIGHT,
}); });
}) })
+2
View File
@@ -24,6 +24,8 @@ ENABLE_USER_CREATE_EMAIL = true
ENABLE_USER_DELETE_EMAIL = true ENABLE_USER_DELETE_EMAIL = true
# Allow automatic replies to emails # Allow automatic replies to emails
ENABLE_AUTO_REPLY = false ENABLE_AUTO_REPLY = false
# Footer text
# COPYRIGHT = "Dream Hunter"
# default send balance, if not set, it will be 0 # default send balance, if not set, it will be 0
# DEFAULT_SEND_BALANCE = 1 # DEFAULT_SEND_BALANCE = 1
# dkim config # dkim config