登录注册体系的源码级硬切换
This commit is contained in:
1 parent
73fcd4ed72
commit
af52f9e94d
72 files changed
+1666
-6576
No files matched your search
@@ -3,7 +3,6 @@ export const toolsApiMethods = {
|
||||
* 扩展&增强 / 备份&导入 (Extensions & Tools)
|
||||
* ================================================================ */
|
||||
|
||||
getHealthEmailVerification() { return this.request('/health/email-verification') },
|
||||
getUpdateInfo() { return this.request('/tools/update-info') },
|
||||
detectUpdate() { return this.request('/tools/update-check', { method: 'POST', body: JSON.stringify({}) }) },
|
||||
dismissUpdate(version) { return this.request('/tools/update-dismiss', { method: 'POST', body: JSON.stringify({ version }) }) },
|
||||
|
||||
@@ -41,7 +41,7 @@ export const toolsSection = {
|
||||
label: '健康检查',
|
||||
route: '/tools/health',
|
||||
title: '健康检查',
|
||||
desc: '查看主题环境、数据表、邮箱验证迁移和系统诊断状态。',
|
||||
desc: '查看主题环境、数据表和系统诊断状态。',
|
||||
component: 'ToolsHealth',
|
||||
}),
|
||||
customPage({
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div class="aksrt-page-container">
|
||||
<PageHeader
|
||||
title="健康检查"
|
||||
desc="集中查看运行环境、数据库表、邮箱验证迁移和系统诊断状态。"
|
||||
desc="集中查看运行环境、数据库表和系统诊断状态。"
|
||||
>
|
||||
<template #actions>
|
||||
<n-space>
|
||||
@@ -13,23 +13,6 @@
|
||||
</PageHeader>
|
||||
|
||||
<n-spin :show="loading" style="width: 100%; min-height: 200px;">
|
||||
<n-card class="aksrt-section-card">
|
||||
<div class="aksrt-section-header">
|
||||
<h3>邮箱验证状态</h3>
|
||||
</div>
|
||||
<n-space>
|
||||
<n-tag round :type="emailHealth.feature_enabled ? 'success' : 'default'">
|
||||
功能开关:{{ emailHealth.feature_enabled ? '已启用' : '未启用' }}
|
||||
</n-tag>
|
||||
<n-tag round :type="emailHealth.rest_blocking_active ? 'warning' : 'default'">
|
||||
REST 阻断:{{ emailHealth.rest_blocking_active ? '已开启' : '仅记录/关闭' }}
|
||||
</n-tag>
|
||||
<n-tag round type="info">
|
||||
待验证用户:{{ emailHealth.pending_users }}
|
||||
</n-tag>
|
||||
</n-space>
|
||||
</n-card>
|
||||
|
||||
<div class="aksrt-health-grid">
|
||||
<n-card v-for="check in checkItems" :key="check.key" class="aksrt-section-card">
|
||||
<div class="aksrt-section-header">
|
||||
@@ -55,11 +38,6 @@ const message = useMessage()
|
||||
|
||||
const loading = ref(true)
|
||||
const healthData = ref({})
|
||||
const emailHealth = ref({
|
||||
feature_enabled: false,
|
||||
pending_users: 0,
|
||||
rest_blocking_active: false,
|
||||
})
|
||||
|
||||
const checkItems = computed(() => {
|
||||
return Object.entries(healthData.value || {}).map(([key, value]) => ({
|
||||
@@ -86,12 +64,8 @@ function statusToTag(status) {
|
||||
async function load() {
|
||||
loading.value = true
|
||||
try {
|
||||
const [healthRes, emailRes] = await Promise.all([
|
||||
api.getHealthCheck(),
|
||||
api.getHealthEmailVerification(),
|
||||
])
|
||||
const healthRes = await api.getHealthCheck()
|
||||
healthData.value = extractData(healthRes).checks || {}
|
||||
emailHealth.value = extractData(emailRes)
|
||||
} catch (error) {
|
||||
message.error(error.message || '加载健康检查失败')
|
||||
} finally {
|
||||
|
||||
@@ -23,9 +23,6 @@
|
||||
<n-tag round :type="form.referral_reward_enabled ? 'success' : 'default'">
|
||||
推广奖励:{{ form.referral_reward_enabled ? '已启用' : '已关闭' }}
|
||||
</n-tag>
|
||||
<n-tag round :type="form.referral_registration_enabled ? 'info' : 'default'">
|
||||
推广码注册:{{ form.referral_registration_enabled ? '开启' : '关闭' }}
|
||||
</n-tag>
|
||||
<n-tag round :type="captchaSummary.register ? 'info' : 'default'">
|
||||
注册验证码:{{ captchaSummary.register ? '启用' : '未启用' }}
|
||||
</n-tag>
|
||||
@@ -82,43 +79,6 @@
|
||||
<n-switch v-model:value="form.referral_reward_enabled" />
|
||||
</n-form-item>
|
||||
|
||||
<n-form-item label="Ref 码长度">
|
||||
<n-input-number v-model:value="form.referral_code_length" :min="4" :max="12" style="width: 180px;" />
|
||||
<template #feedback>
|
||||
<span class="aksrt-hint-text">只影响新生成或管理员重新生成的推广码,已有 Ref 不会失效。</span>
|
||||
</template>
|
||||
</n-form-item>
|
||||
|
||||
<n-form-item label="首次触达窗口(天)">
|
||||
<n-input-number v-model:value="form.referral_window_days" :min="1" :max="365" style="width: 180px;" />
|
||||
</n-form-item>
|
||||
|
||||
<n-form-item label="开放推广码注册">
|
||||
<n-switch v-model:value="form.referral_registration_enabled" />
|
||||
<template #feedback>
|
||||
<span class="aksrt-hint-text">此开关只控制注册页推广码字段;现金返佣和积分奖励仍可独立使用同一 Ref 关系。</span>
|
||||
</template>
|
||||
</n-form-item>
|
||||
|
||||
<template v-if="form.referral_registration_enabled">
|
||||
<n-form-item label="注册页推广码字段">
|
||||
<n-radio-group v-model:value="form.referral_register_field">
|
||||
<n-space size="large">
|
||||
<n-radio value="hidden">隐藏</n-radio>
|
||||
<n-radio value="optional">选填</n-radio>
|
||||
<n-radio value="required">必填</n-radio>
|
||||
</n-space>
|
||||
</n-radio-group>
|
||||
</n-form-item>
|
||||
|
||||
<n-form-item label="无效推广码处理" v-if="form.referral_register_field === 'required'">
|
||||
<n-switch v-model:value="form.referral_reject_invalid" />
|
||||
<template #feedback>
|
||||
<span class="aksrt-hint-text">开启后,必填模式下无效推广码会直接拒绝注册。首次触达 Ref 始终优先于手填码。</span>
|
||||
</template>
|
||||
</n-form-item>
|
||||
</template>
|
||||
|
||||
<template v-if="form.referral_reward_enabled">
|
||||
<n-form-item label="推广人奖励">
|
||||
<n-input-number v-model:value="form.promoter_amount" :min="0" :max="100000" style="width: 180px;" />
|
||||
@@ -160,7 +120,6 @@ const message = useMessage()
|
||||
const loading = ref(true)
|
||||
const saving = ref(false)
|
||||
const creditSnapshot = ref({})
|
||||
const authSnapshot = ref({})
|
||||
|
||||
const captchaSummary = reactive({
|
||||
register: false,
|
||||
@@ -179,11 +138,6 @@ const form = reactive({
|
||||
level_points: 0,
|
||||
require_verify: true,
|
||||
ip_daily_cap: 3,
|
||||
referral_registration_enabled: true,
|
||||
referral_code_length: 12,
|
||||
referral_window_days: 30,
|
||||
referral_register_field: 'optional',
|
||||
referral_reject_invalid: true,
|
||||
})
|
||||
|
||||
const currencyLabel = computed(() => form.currency_name || '积分')
|
||||
@@ -229,14 +183,12 @@ function parseStreakText(value) {
|
||||
async function load() {
|
||||
loading.value = true
|
||||
try {
|
||||
const [creditRes, authRes, captchaRes] = await Promise.all([
|
||||
const [creditRes, captchaRes] = await Promise.all([
|
||||
api.getCreditSettings(),
|
||||
api.getAuthSettings(),
|
||||
api.getPermissionsLoginSettings(),
|
||||
])
|
||||
|
||||
const creditData = extractData(creditRes)
|
||||
const authData = extractData(authRes)
|
||||
const captchaData = extractData(captchaRes)
|
||||
const dailySignin = creditData.daily_signin || {}
|
||||
const referralReward = creditData.referral_reward || {}
|
||||
@@ -246,7 +198,6 @@ async function load() {
|
||||
const sceneOn = (key) => enabledScenarios.includes(key)
|
||||
|
||||
creditSnapshot.value = creditData
|
||||
authSnapshot.value = authData
|
||||
|
||||
form.credits_enabled = creditData.enabled !== false
|
||||
form.currency_name = creditData.currency_name || ''
|
||||
@@ -259,11 +210,6 @@ async function load() {
|
||||
form.level_points = Number(referralReward.level_points || 0)
|
||||
form.require_verify = referralReward.require_verify !== false
|
||||
form.ip_daily_cap = Number(referralReward.ip_daily_cap || 0)
|
||||
form.referral_registration_enabled = authData.referral_registration_enabled !== false
|
||||
form.referral_code_length = Number(authData.referral_code_length || 12)
|
||||
form.referral_window_days = Number(authData.referral_window_days || 30)
|
||||
form.referral_register_field = authData.referral_register_field || 'optional'
|
||||
form.referral_reject_invalid = authData.referral_reject_invalid !== false
|
||||
|
||||
captchaSummary.register = !!captchaData.enabled && !!captchaData.active_provider && sceneOn('register')
|
||||
captchaSummary.signin = !!captchaData.enabled && !!captchaData.active_provider && sceneOn('signin')
|
||||
@@ -296,22 +242,9 @@ async function handleSave() {
|
||||
},
|
||||
}
|
||||
|
||||
const nextAuth = {
|
||||
...authSnapshot.value,
|
||||
referral_registration_enabled: form.referral_registration_enabled,
|
||||
referral_code_length: Number(form.referral_code_length || 12),
|
||||
referral_window_days: Number(form.referral_window_days || 30),
|
||||
referral_register_field: form.referral_register_field,
|
||||
referral_reject_invalid: form.referral_reject_invalid,
|
||||
}
|
||||
|
||||
await Promise.all([
|
||||
api.saveCreditSettings(nextCredit),
|
||||
api.saveAuthSettings(nextAuth),
|
||||
])
|
||||
await api.saveCreditSettings(nextCredit)
|
||||
|
||||
creditSnapshot.value = nextCredit
|
||||
authSnapshot.value = nextAuth
|
||||
message.success('签到奖励配置已保存')
|
||||
} catch (error) {
|
||||
message.error(error.message || '保存失败')
|
||||
|
||||
@@ -18,7 +18,7 @@ export const permissionsSchemas = {
|
||||
mode: 'always',
|
||||
enabled_scenarios: [
|
||||
'comment', 'login', 'register', 'bind', 'bind_phone',
|
||||
'lostpassword', 'change_password', 'change_email', 'verify_email', 'download', 'signin',
|
||||
'lostpassword', 'change_password', 'change_email', 'download', 'signin',
|
||||
],
|
||||
tencent: {},
|
||||
aliyun: {},
|
||||
@@ -71,7 +71,6 @@ export const permissionsSchemas = {
|
||||
{ label: '找回密码', value: 'lostpassword' },
|
||||
{ label: '修改密码', value: 'change_password' },
|
||||
{ label: '更改邮箱', value: 'change_email' },
|
||||
{ label: '邮箱验证', value: 'verify_email' },
|
||||
{ label: '资源下载', value: 'download' },
|
||||
{ label: '每日签到', value: 'signin' },
|
||||
{ label: '前台投稿', value: 'front_submit' },
|
||||
|
||||
@@ -1,107 +1,118 @@
|
||||
const verificationOptions = [
|
||||
{ label: '邮箱验证', value: 'email' },
|
||||
{ label: '手机验证', value: 'phone' },
|
||||
{ label: '邮箱或手机验证', value: 'email_phone' },
|
||||
];
|
||||
|
||||
export const authSchema = {
|
||||
key: 'users.auth',
|
||||
title: '注册登录',
|
||||
icon: 'fa fas fa-sign-in-alt',
|
||||
description: '注册方式、登录限制、密码策略配置。',
|
||||
description: '登录注册入口、验证规则、协议与认证界面配置。',
|
||||
defaults: {
|
||||
close_sign: false,
|
||||
user_close_signup: false,
|
||||
close_signup: false,
|
||||
close_signin: false,
|
||||
user_agreement_s: true,
|
||||
user_agreement_page: '',
|
||||
user_privacy_s: true,
|
||||
user_privacy_page: '',
|
||||
user_agreement_check: true,
|
||||
no_repetition_name: false,
|
||||
user_nickname_out: '赌博,博彩,代发,代理,刷单,六合彩,admin,test,管理员,客服',
|
||||
user_email_limit_type: 'black',
|
||||
user_email_out: '@tempmail.com\n@throwaway.email\n@guerrillamail.com',
|
||||
user_close_login: false,
|
||||
user_sign_type: 'page',
|
||||
user_sign_type: 'modal',
|
||||
sign_modal_auto_s: false,
|
||||
sign_modal_auto_waiting_time: 5,
|
||||
sign_modal_auto_expires: 1,
|
||||
replace_wp_login: true,
|
||||
admin_sign_key: '',
|
||||
invit_code_s: 'close',
|
||||
invit_code_open_desc: '如您受到邀请,可填写推广码。部分推广码会有额外积分赠送',
|
||||
invit_code_must_desc: '<div>本站需使用推广码注册</div><div>获取推广码请与客服联系</div>',
|
||||
user_signin_phone_s: false,
|
||||
user_signin_nopas_s: false,
|
||||
user_signin_nopas_type: 'email',
|
||||
user_signin_nopas_active: 'nopas_first',
|
||||
user_signup_captch: true,
|
||||
user_signin_nopas_active: 'nopas',
|
||||
user_signup_captch: false,
|
||||
captch_type: 'email',
|
||||
user_signup_no_repas: true,
|
||||
user_repas_captch_type: 'email',
|
||||
user_agreement_s: false,
|
||||
user_agreement_page: '',
|
||||
user_privacy_s: false,
|
||||
user_privacy_page: '',
|
||||
user_agreement_check: false,
|
||||
no_repetition_name: true,
|
||||
user_nickname_out: '赌博,博彩,彩票,性爱,色情,做爱,爱爱,淫秽,傻b,妈的,妈b,admin,test',
|
||||
user_email_limit_type: 'not',
|
||||
user_email_out: '',
|
||||
bind_phone: false,
|
||||
bind_reminder: 'close',
|
||||
bind_reminder_text: '请绑定手机号以正常使用',
|
||||
bind_reminder_text: '为了您的账户安全,请务必完成账户绑定',
|
||||
bind_reminder_expires: 24,
|
||||
mandatory_bind: 'close',
|
||||
mandatory_bind_text: '为了您的账户安全,请先完成账户绑定',
|
||||
email_set_captch: true,
|
||||
referral_registration_enabled: true,
|
||||
referral_register_field: 'optional',
|
||||
referral_reject_invalid: true,
|
||||
referral_code_length: 12,
|
||||
referral_window_days: 30,
|
||||
referral_open_desc: '推广码为选填,没有推广码也可以注册',
|
||||
referral_required_desc: '请输入推广码',
|
||||
sign_page_background: [],
|
||||
sign_theme_mode: 'default',
|
||||
sign_theme_mode: 'no',
|
||||
sign_show_header: true,
|
||||
sign_card_position: 'center',
|
||||
sign_show_logo: true,
|
||||
sign_card_position: 'right',
|
||||
sign_show_logo: false,
|
||||
sign_page_footer: '',
|
||||
sign_modal_background: [],
|
||||
sign_modal_show_logo: true,
|
||||
sign_modal_show_logo: false,
|
||||
user_logo: [],
|
||||
user_logo_dark: [],
|
||||
},
|
||||
groups: [
|
||||
{
|
||||
key: 'register',
|
||||
title: '注册设置',
|
||||
icon: 'fa fas fa-user-plus',
|
||||
fields: [
|
||||
{ key: 'close_sign', label: '一键禁用登录注册', type: 'switch', default: false, help: '开启后前台禁用全部注册/登录入口(含社交登录),不影响后台登录' },
|
||||
{ key: 'user_close_signup', label: '关闭注册', type: 'switch', default: false },
|
||||
{ key: 'close_signin', label: '禁用账密登录', type: 'switch', default: false, help: '仅允许社交账号登录' },
|
||||
{ key: 'user_agreement_s', label: '用户协议', type: 'switch', default: true },
|
||||
{ key: 'user_agreement_page', label: '协议页面', type: 'input', default: '' },
|
||||
{ key: 'user_privacy_s', label: '隐私政策', type: 'switch', default: true },
|
||||
{ key: 'user_privacy_page', label: '隐私页面', type: 'input', default: '' },
|
||||
{ key: 'user_agreement_check', label: '强制勾选协议', type: 'switch', default: true },
|
||||
{ key: 'no_repetition_name', label: '禁止重复昵称', type: 'switch', default: false },
|
||||
{ key: 'user_nickname_out', label: '昵称黑名单关键词', type: 'textarea', default: '赌博,博彩,代发,代理,刷单,六合彩,admin,test,管理员,客服', help: '一行一个关键词,注册昵称包含关键词将被拒绝' },
|
||||
{ key: 'user_email_limit_type', label: '邮箱限制类型', type: 'radio', default: 'black', options: [{ label: '黑名单(拒绝以下后缀)', value: 'black' }, { label: '白名单(仅允许以下后缀)', value: 'white' }] },
|
||||
{ key: 'user_email_out', label: '邮箱限制后缀', type: 'textarea', default: '@tempmail.com\n@throwaway.email\n@guerrillamail.com', help: '一行一个邮箱后缀,如 @tempmail.com' },
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'login',
|
||||
title: '登录设置',
|
||||
key: 'entry',
|
||||
title: '登录注册',
|
||||
icon: 'fa fas fa-sign-in-alt',
|
||||
fields: [
|
||||
{ key: 'user_close_login', label: '关闭登录', type: 'switch', default: false },
|
||||
{ key: 'user_sign_type', label: '登录注册样式', type: 'radio', default: 'page', options: [{ label: '弹窗', value: 'modal' }, { label: '跳转页面', value: 'page' }] },
|
||||
{ key: 'sign_modal_auto_s', label: '自动弹出登录窗', type: 'switch', default: false, help: '仅在 user_sign_type=modal 时生效' },
|
||||
{ key: 'sign_modal_auto_waiting_time', label: '弹窗等待秒数', type: 'number', default: 5, min: 0, max: 60, dependsOn: { key: 'sign_modal_auto_s', value: true } },
|
||||
{ key: 'sign_modal_auto_expires', label: '弹窗周期(小时)', type: 'number', default: 1, min: 0, max: 720, dependsOn: { key: 'sign_modal_auto_s', value: true } },
|
||||
{ key: 'replace_wp_login', label: '替换WP登录页', type: 'switch', default: true },
|
||||
{ key: 'admin_sign_key', label: '应急登录 Key', type: 'input', default: '', help: '留空为禁用。管理员可通过 /wp-login.php?aksrt_bypass=<key> 绕过前台替换' },
|
||||
{ key: 'user_signin_phone_s', label: '手机号登录', type: 'switch', default: false, help: '允许用手机号作为用户名登录' },
|
||||
{ key: 'user_signin_nopas_s', label: '免密登录', type: 'switch', default: false },
|
||||
{ key: 'user_signin_nopas_type', label: '免密登录方式', type: 'radio', default: 'email', options: [{ label: '邮箱验证码', value: 'email' }, { label: '手机验证码', value: 'phone' }, { label: '邮箱或手机', value: 'email_phone' }], dependsOn: { key: 'user_signin_nopas_s', value: true } },
|
||||
{ key: 'user_signin_nopas_active', label: '免密显示模式', type: 'radio', default: 'nopas_first', options: [{ label: '优先免密', value: 'nopas_first' }, { label: '优先密码', value: 'password_first' }, { label: '仅免密', value: 'nopas_only' }], dependsOn: { key: 'user_signin_nopas_s', value: true } },
|
||||
{ key: 'close_sign', label: '禁用登录注册', type: 'switch', default: false, help: '关闭前台全部认证入口,不影响管理员后台应急登录' },
|
||||
{ key: 'close_signup', label: '禁用新用户注册', type: 'switch', default: false, dependsOn: { key: 'close_sign', value: false } },
|
||||
{ key: 'close_signin', label: '禁用账号登录/注册', type: 'switch', default: false, dependsOn: { key: 'close_sign', value: false }, help: '关闭账号密码和验证码登录注册,仅保留已启用的 OAuth 登录' },
|
||||
{ key: 'user_sign_type', label: '默认登录注册样式', type: 'radio', default: 'modal', options: [{ label: '弹窗显示', value: 'modal' }, { label: '独立页面', value: 'page' }] },
|
||||
{ key: 'sign_modal_auto_s', label: '自动弹出登录窗口', type: 'switch', default: false, dependsOn: { key: 'user_sign_type', value: 'modal' } },
|
||||
{ key: 'sign_modal_auto_waiting_time', label: '等待时间(秒)', type: 'number', default: 5, min: 1, max: 100, dependsOn: { key: 'sign_modal_auto_s', value: true } },
|
||||
{ key: 'sign_modal_auto_expires', label: '自动弹窗周期(小时)', type: 'number', default: 1, min: 0, max: 2000, dependsOn: { key: 'sign_modal_auto_s', value: true } },
|
||||
{ key: 'replace_wp_login', label: '代替 WP 自带登录页面', type: 'switch', default: true },
|
||||
{ key: 'admin_sign_key', label: '应急登录 Key', type: 'input', default: '', dependsOn: { key: 'replace_wp_login', value: true }, help: '通过 /wp-login.php?aksrt_bypass=<key> 使用 WP 登录页' },
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'signup_captcha',
|
||||
title: '注册验证',
|
||||
icon: 'fa fas fa-user',
|
||||
key: 'invitation',
|
||||
title: '推广码注册',
|
||||
icon: 'fa fas fa-ticket-alt',
|
||||
fields: [
|
||||
{ key: 'user_signup_captch', label: '注册需验证', type: 'switch', default: true, help: '注册时需完成邮箱或手机验证' },
|
||||
{ key: 'captch_type', label: '验证方式', type: 'radio', default: 'email', options: [{ label: '邮箱', value: 'email' }, { label: '手机', value: 'phone' }, { label: '邮箱或手机', value: 'email_phone' }], dependsOn: { key: 'user_signup_captch', value: true } },
|
||||
{ key: 'user_signup_no_repas', label: '无需重复密码', type: 'switch', default: true, help: '注册时不要求二次确认密码' },
|
||||
{ key: 'user_repas_captch_type', label: '找回密码验证方式', type: 'radio', default: 'email', options: [{ label: '邮箱', value: 'email' }, { label: '手机', value: 'phone' }, { label: '邮箱或手机', value: 'email_phone' }] },
|
||||
{ key: 'invit_code_s', label: '推广码注册', type: 'radio', default: 'close', options: [{ label: '关闭', value: 'close' }, { label: '选填推广码', value: 'open' }, { label: '必须填写推广码', value: 'must' }] },
|
||||
{ key: 'invit_code_open_desc', label: '选填提示文案', type: 'input', default: '如您受到邀请,可填写推广码。部分推广码会有额外积分赠送', dependsOn: { key: 'invit_code_s', value: 'open' } },
|
||||
{ key: 'invit_code_must_desc', label: '必填提示文案', type: 'textarea', default: '<div>本站需使用推广码注册</div><div>获取推广码请与客服联系</div>', dependsOn: { key: 'invit_code_s', value: 'must' }, help: '支持安全 HTML' },
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'verification',
|
||||
title: '登录与验证',
|
||||
icon: 'fa fas fa-shield-alt',
|
||||
fields: [
|
||||
{ key: 'user_signin_phone_s', label: '手机号登录', type: 'switch', default: false },
|
||||
{ key: 'user_signin_nopas_s', label: '免密登录', type: 'switch', default: false },
|
||||
{ key: 'user_signin_nopas_type', label: '免密登录方式', type: 'radio', default: 'email', options: verificationOptions, dependsOn: { key: 'user_signin_nopas_s', value: true } },
|
||||
{ key: 'user_signin_nopas_active', label: '登录方式显示模式', type: 'radio', default: 'nopas', options: [{ label: '优先免密登录', value: 'nopas' }, { label: '优先账号密码', value: 'pas' }, { label: '仅显示免密登录', value: 'only_nopas' }], dependsOn: { key: 'user_signin_nopas_s', value: true } },
|
||||
{ key: 'user_signup_captch', label: '注册需验证', type: 'switch', default: false },
|
||||
{ key: 'captch_type', label: '注册验证方式', type: 'radio', default: 'email', options: verificationOptions, dependsOn: { key: 'user_signup_captch', value: true } },
|
||||
{ key: 'user_signup_no_repas', label: '注册无需重复密码', type: 'switch', default: true, dependsOn: { key: 'user_signup_captch', value: true } },
|
||||
{ key: 'user_repas_captch_type', label: '找回密码验证方式', type: 'radio', default: 'email', options: verificationOptions },
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'agreements',
|
||||
title: '协议与账号限制',
|
||||
icon: 'fa fas fa-file-contract',
|
||||
fields: [
|
||||
{ key: 'user_agreement_s', label: '显示用户协议', type: 'switch', default: false },
|
||||
{ key: 'user_agreement_page', label: '用户协议页面', type: 'input', default: '', dependsOn: { key: 'user_agreement_s', value: true } },
|
||||
{ key: 'user_privacy_s', label: '显示隐私协议', type: 'switch', default: false },
|
||||
{ key: 'user_privacy_page', label: '隐私协议页面', type: 'input', default: '', dependsOn: { key: 'user_privacy_s', value: true } },
|
||||
{ key: 'user_agreement_check', label: '协议必须手动勾选', type: 'switch', default: false },
|
||||
{ key: 'no_repetition_name', label: '禁止重复昵称', type: 'switch', default: true },
|
||||
{ key: 'user_nickname_out', label: '禁止的昵称关键词', type: 'textarea', default: '赌博,博彩,彩票,性爱,色情,做爱,爱爱,淫秽,傻b,妈的,妈b,admin,test' },
|
||||
{ key: 'user_email_limit_type', label: '邮箱限制方式', type: 'radio', default: 'not', options: [{ label: '黑名单', value: 'not' }, { label: '白名单', value: 'allow' }] },
|
||||
{ key: 'user_email_out', label: '邮箱限制关键词', type: 'textarea', default: '' },
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -109,39 +120,13 @@ export const authSchema = {
|
||||
title: '绑定设置',
|
||||
icon: 'fa fas fa-link',
|
||||
fields: [
|
||||
{ key: 'bind_phone', label: '绑定手机', type: 'switch', default: false },
|
||||
{ key: 'bind_reminder', label: '绑定提醒', type: 'radio', default: 'close', options: [{ label: '提醒绑定邮箱', value: 'email' }, { label: '提醒绑定手机', value: 'phone' }, { label: '提醒绑定邮箱和手机', value: 'email_phone' }, { label: '关闭', value: 'close' }] },
|
||||
{ key: 'bind_reminder_text', label: '提醒文案', type: 'input', default: '请绑定手机号以正常使用' },
|
||||
{ key: 'bind_reminder_expires', label: '提醒周期(小时)', type: 'number', default: 24, min: 1, max: 720, help: '用户关闭提醒后多少小时内不再提醒' },
|
||||
{ key: 'mandatory_bind', label: '强制绑定', type: 'radio', default: 'close', options: [{ label: '强制绑定邮箱', value: 'email' }, { label: '强制绑定手机', value: 'phone' }, { label: '强制绑定邮箱和手机', value: 'email_phone' }, { label: '关闭', value: 'close' }] },
|
||||
{ key: 'email_set_captch', label: '绑定邮箱需验证', type: 'switch', default: true, help: '绑定邮箱时需发送验证码确认' },
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'referral_inline',
|
||||
title: '推广码注册',
|
||||
icon: 'fa fas fa-ticket-alt',
|
||||
fields: [
|
||||
{ key: 'referral_registration_enabled', label: '开放推广码注册', type: 'switch', default: true },
|
||||
{ key: 'referral_register_field', label: '注册页推广码字段', type: 'select', default: 'optional', options: [{ label: '隐藏', value: 'hidden' }, { label: '选填', value: 'optional' }, { label: '必填', value: 'required' }], dependsOn: { key: 'referral_registration_enabled', value: true } },
|
||||
{ key: 'referral_reject_invalid', label: '拒绝无效推广码', type: 'switch', default: true, dependsOn: { key: 'referral_registration_enabled', value: true } },
|
||||
{ key: 'referral_code_length', label: 'Ref 码长度', type: 'number', default: 12, min: 4, max: 12 },
|
||||
{ key: 'referral_window_days', label: '首次触达窗口(天)', type: 'number', default: 30, min: 1, max: 365 },
|
||||
{ key: 'referral_open_desc', label: '选填提示', type: 'input', default: '推广码为选填,没有推广码也可以注册', dependsOn: { key: 'referral_registration_enabled', value: true } },
|
||||
{ key: 'referral_required_desc', label: '必填提示', type: 'input', default: '请输入推广码', dependsOn: { key: 'referral_registration_enabled', value: true } },
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'sign_page_ui',
|
||||
title: '页面 UI 配置',
|
||||
icon: 'fa fas fa-paint-brush',
|
||||
fields: [
|
||||
{ key: 'sign_page_background', label: '页面背景图', type: 'gallery', default: [], help: '登录注册页背景图,多图随机' },
|
||||
{ key: 'sign_theme_mode', label: '主题模式', type: 'radio', default: 'default', options: [{ label: '默认', value: 'default' }, { label: '亮色', value: 'light' }, { label: '暗色', value: 'dark' }] },
|
||||
{ key: 'sign_show_header', label: '显示顶部导航', type: 'switch', default: true },
|
||||
{ key: 'sign_card_position', label: '卡片位置', type: 'radio', default: 'center', options: [{ label: '靠左', value: 'left' }, { label: '居中', value: 'center' }, { label: '靠右', value: 'right' }] },
|
||||
{ key: 'sign_show_logo', label: '显示 LOGO', type: 'switch', default: true },
|
||||
{ key: 'sign_page_footer', label: '页脚 HTML', type: 'textarea', default: '', help: '登录注册页自定义页脚内容,支持 HTML' },
|
||||
{ key: 'bind_phone', label: '手机绑定', type: 'switch', default: false },
|
||||
{ key: 'bind_reminder', label: '绑定提醒', type: 'radio', default: 'close', options: [{ label: '提醒绑定邮箱', value: 'email' }, { label: '提醒绑定手机', value: 'phone' }, { label: '提醒邮箱和手机', value: 'email_phone' }, { label: '关闭', value: 'close' }] },
|
||||
{ key: 'bind_reminder_text', label: '绑定提醒文案', type: 'textarea', default: '为了您的账户安全,请务必完成账户绑定' },
|
||||
{ key: 'bind_reminder_expires', label: '提醒周期(小时)', type: 'number', default: 24, min: 0, max: 2000 },
|
||||
{ key: 'mandatory_bind', label: '强制绑定', type: 'radio', default: 'close', options: [{ label: '必须绑定邮箱', value: 'email' }, { label: '必须绑定手机', value: 'phone' }, { label: '必须绑定邮箱和手机', value: 'email_phone' }, { label: '关闭', value: 'close' }] },
|
||||
{ key: 'mandatory_bind_text', label: '强制绑定文案', type: 'textarea', default: '为了您的账户安全,请先完成账户绑定' },
|
||||
{ key: 'email_set_captch', label: '绑定邮箱需验证', type: 'switch', default: true },
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -149,8 +134,21 @@ export const authSchema = {
|
||||
title: '弹窗 UI 配置',
|
||||
icon: 'fa fas fa-window-restore',
|
||||
fields: [
|
||||
{ key: 'sign_modal_background', label: '弹窗背景图', type: 'gallery', default: [], help: '弹窗左侧背景图,多图随机' },
|
||||
{ key: 'sign_modal_show_logo', label: '弹窗显示 LOGO', type: 'switch', default: true },
|
||||
{ key: 'sign_modal_background', label: '左侧图片', type: 'gallery', default: [], help: '多图时随机显示;移动端隐藏' },
|
||||
{ key: 'sign_modal_show_logo', label: '显示 LOGO', type: 'switch', default: false },
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'sign_page_ui',
|
||||
title: '页面 UI 配置',
|
||||
icon: 'fa fas fa-paint-brush',
|
||||
fields: [
|
||||
{ key: 'sign_page_background', label: '页面背景图', type: 'gallery', default: [] },
|
||||
{ key: 'sign_theme_mode', label: '自定义主题', type: 'radio', default: 'no', options: [{ label: '保持默认', value: 'no' }, { label: '日间亮色', value: 'white-theme' }, { label: '夜间深色', value: 'dark-theme' }] },
|
||||
{ key: 'sign_show_header', label: '显示顶部导航', type: 'switch', default: true },
|
||||
{ key: 'sign_card_position', label: '卡片位置', type: 'radio', default: 'right', options: [{ label: '靠左', value: 'left' }, { label: '居中', value: 'center' }, { label: '靠右', value: 'right' }] },
|
||||
{ key: 'sign_show_logo', label: '显示卡片 LOGO', type: 'switch', default: false },
|
||||
{ key: 'sign_page_footer', label: '页脚内容', type: 'textarea', default: '', help: '支持安全 HTML' },
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -158,9 +156,9 @@ export const authSchema = {
|
||||
title: '登录框 LOGO',
|
||||
icon: 'fa fas fa-image',
|
||||
fields: [
|
||||
{ key: 'user_logo', label: '日间 LOGO', type: 'gallery', default: [], help: '登录框专用日间 LOGO,留空使用站点全局 LOGO' },
|
||||
{ key: 'user_logo_dark', label: '夜间 LOGO', type: 'gallery', default: [], help: '登录框专用夜间 LOGO,留空使用站点全局夜间 LOGO' },
|
||||
{ key: 'user_logo', label: '日间 LOGO', type: 'gallery', default: [] },
|
||||
{ key: 'user_logo_dark', label: '夜间 LOGO', type: 'gallery', default: [] },
|
||||
],
|
||||
},
|
||||
],
|
||||
}
|
||||
};
|
||||
Reference in new issue
Block a user