支持关闭网站

dev
truthhun 1 year ago
parent 47d9d56b27
commit 8bf7d7c1f3

@ -624,6 +624,10 @@ func (m *DBModel) SendMail(subject, email string, body string) error {
}
func (m *DBModel) initConfig() (err error) {
closeStatement := `<div></div>
<div>使<strong></strong> <span style="color:red">2024-10-24 06:00:00</span>访</div>
<div>使</div>
<div>便</div>`
// 初始化配置项
cfgs := []Config{
// 系统配置项
@ -652,8 +656,8 @@ func (m *DBModel) initConfig() (err error) {
{Category: ConfigCategorySecurity, Name: ConfigSecurityCommentInterval, Label: "评论时间间隔", Value: "10", Placeholder: "用户评论时间间隔单位为秒。0表示不限制。", InputType: "number", Sort: 2, Options: ""},
{Category: ConfigCategorySecurity, Name: ConfigSecurityDocumentRelatedDuration, Label: "文档的【相关文档】有效期", Value: "7", Placeholder: "文档的相关联文档的有效期默认为7即7天0或小于0表示不开启相关文档功能", InputType: "number", Sort: 15, Options: ""},
{Category: ConfigCategorySecurity, Name: ConfigSecurityDocumentAllowedExt, Label: "允许上传的文档类型", Value: "", Placeholder: "留空表示允许程序所支持的全部文档类型", InputType: "select-multi", Sort: 3, Options: strings.Join(filetil.GetDocumentExts(), "\n")},
{Category: ConfigCategorySecurity, Name: ConfigSecurityIsClose, Label: "【WIP】是否关闭网站", Value: "false", Placeholder: "请选择是否关闭网站", InputType: "switch", Sort: 160, Options: ""},
{Category: ConfigCategorySecurity, Name: ConfigSecurityCloseStatement, Label: "【WIP】闭站说明", Value: "false", Placeholder: "关闭网站后,页面提示内容", InputType: "textarea", Sort: 170, Options: ""},
{Category: ConfigCategorySecurity, Name: ConfigSecurityIsClose, Label: "是否关闭网站", Value: "false", Placeholder: "请选择是否关闭网站", InputType: "switch", Sort: 160, Options: ""},
{Category: ConfigCategorySecurity, Name: ConfigSecurityCloseStatement, Label: "闭站说明", Value: closeStatement, Placeholder: "关闭网站后,页面提示内容支持HTML", InputType: "textarea", Sort: 170, Options: ""},
{Category: ConfigCategorySecurity, Name: ConfigSecurityEnableRegister, Label: "是否允许注册", Value: "true", Placeholder: "请选择是否允许用户注册", InputType: "switch", Sort: 18, Options: ""},
{Category: ConfigCategorySecurity, Name: ConfigSecurityEnableCaptchaLogin, Label: "是否开启登录验证码", Value: "true", Placeholder: "请选择是否开启登录验证码", InputType: "switch", Sort: 19, Options: ""},
{Category: ConfigCategorySecurity, Name: ConfigSecurityEnableCaptchaRegister, Label: "是否开启注册验证码", Value: "true", Placeholder: "请选择是否开启注册验证码", InputType: "switch", Sort: 20, Options: ""},

@ -99,14 +99,12 @@ export default {
const res = await this.login(this.user)
if (res.status === 200) {
this.$message.success('登录成功')
setTimeout(() => {
if (this.redirect) {
this.$router.push(this.redirect)
} else {
this.$router.push({ name: 'index' })
}
this.loading = false
}, 2000)
if (this.redirect) {
this.$router.push(this.redirect)
} else {
this.$router.push({ name: 'index' })
}
this.loading = false
} else {
this.loading = false
}

@ -357,7 +357,7 @@ import { categoryToTrees } from '~/utils/utils'
import { getSignedToday, signToday } from '~/api/user'
export default {
components: { UserAvatar, FormUserinfo },
middleware: ['analytic'],
middleware: ['analytic', 'checkCloseSite'],
data() {
return {
search: {

@ -0,0 +1,18 @@
export default function ({ store, route, redirect }) {
const settings = store.getters['setting/settings']
const user = store.getters['user/user']
const permissions = store.getters['user/permissions'] || []
if (settings.security.is_close) {
// 1. 用户未登录,跳转到登录页面
if (user.id === 0 && route.name !== 'login') {
redirect('/login')
return
}
// 用户已登录,如果不是管理员
if (user.id !== 0 && permissions.length === 0 && route.name !== 'login') {
redirect('/login')
return
}
}
}

@ -1,6 +1,15 @@
export default function ({ store, route, redirect }) {
const user = store.getters['user/user'] || { id: 0 }
if (user.id) {
const settings = store.getters['setting/settings'] || {}
const permissions = store.getters['user/permissions'] || []
if (settings.security.is_close && permissions.length === 0) {
// 关站了,且不是管理员
if (route.name !== 'login') {
redirect('/login')
}
return
}
redirect(`/user/${user.id}`)
}
}

@ -10,11 +10,18 @@
"
>
<div>
<el-card shadow="never">
<el-card
shadow="never"
:class="settings.security.is_close ? 'close-box' : ''"
>
<div slot="header" class="clearfix">
<span>用户登录</span>
<span v-if="user.id > 0 && settings.security.is_close"></span>
<span v-else></span>
</div>
<form-login></form-login>
<div v-if="settings.security.is_close" class="close-tips">
<div v-html="settings.security.close_statement"></div>
</div>
<form-login v-if="!user.id"></form-login>
</el-card>
</div>
</div>
@ -44,6 +51,7 @@ export default {
},
computed: {
...mapGetters('setting', ['settings']),
...mapGetters('user', ['user']),
},
}
</script>
@ -62,6 +70,18 @@ export default {
max-width: 100%;
margin: 100px auto;
margin-right: 0;
&.close-box {
margin-right: auto;
width: 640px;
.close-tips {
margin-bottom: 20px;
border: 1px dashed #f60;
padding: 20px;
border-radius: 4px;
line-height: 180%;
font-size: 15px;
}
}
.el-card__body {
padding-bottom: 0;
}

@ -38,6 +38,7 @@ export const user = {
logout(state) {
state.user = {}
state.token = ''
state.permissions = []
localStorage.clear()
},
setPermissions(state, permissions) {

Loading…
Cancel
Save