feat(users): rewrite medal catalog + verify apply SPA contract
Replace user_badge_dictionary textarea with structured user_medal_* catalog (categories/items/get_type). Expand verify SPA/PHP to Zibll apply fields. Reader derives badge.dictionary from medal catalog for existing AKSRT_User_Badges wear/grant runtime. No dual-read of old pipe dictionary. audit-admin-contracts: 0 errors.
This commit is contained in:
@@ -1,13 +1,75 @@
|
||||
/**
|
||||
* User medal catalog (SPA route remains /users/badge).
|
||||
* Storage keys: user_medal_* (Zibll user_medal_s / user_medal_args parity).
|
||||
*/
|
||||
|
||||
export const MEDAL_GET_TYPES = [
|
||||
{ label: '注册天数', value: 'registration_time' },
|
||||
{ label: '累计签到天数', value: 'checkin_all_day' },
|
||||
{ label: '发布文章数', value: 'new_post' },
|
||||
{ label: '论坛发帖数', value: 'bbs_post' },
|
||||
{ label: '评论数', value: 'comment' },
|
||||
{ label: '粉丝数', value: 'followed' },
|
||||
{ label: '文章获赞', value: 'like' },
|
||||
{ label: '评论获赞', value: 'comment_like' },
|
||||
{ label: '回复被采纳', value: 'bbs_adopt' },
|
||||
{ label: '神评次数', value: 'bbs_comment_hot' },
|
||||
{ label: '热帖次数', value: 'bbs_post_hot' },
|
||||
{ label: '精华帖数', value: 'bbs_essence' },
|
||||
{ label: '帖子评分累计', value: 'bbs_score' },
|
||||
{ label: '内容阅读量', value: 'views' },
|
||||
{ label: '创作分成累计(元)', value: 'pay_income' },
|
||||
{ label: '推广佣金累计(元)', value: 'pay_rebate' },
|
||||
{ label: '仅手动授予', value: 'manually_add' },
|
||||
]
|
||||
|
||||
export const defaultMedalArgs = () => [
|
||||
{
|
||||
cat_name: '成长',
|
||||
items: [
|
||||
{
|
||||
slug: 'rookie',
|
||||
name: '初出茅庐',
|
||||
desc: '注册时间超过30天',
|
||||
icon: '',
|
||||
get_type: 'registration_time',
|
||||
get_val: 30,
|
||||
},
|
||||
{
|
||||
slug: 'checkin-30',
|
||||
name: '签到达人',
|
||||
desc: '累计签到30天',
|
||||
icon: '',
|
||||
get_type: 'checkin_all_day',
|
||||
get_val: 30,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
cat_name: '限定',
|
||||
items: [
|
||||
{
|
||||
slug: 'annual-star',
|
||||
name: '年度人气达人',
|
||||
desc: '活动限定徽章',
|
||||
icon: '',
|
||||
get_type: 'manually_add',
|
||||
get_val: 0,
|
||||
},
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
export const badgeSchema = {
|
||||
key: 'users.badge',
|
||||
title: '用户徽章',
|
||||
icon: 'fas fa-award',
|
||||
description: '配置徽章字典、公开展示数量和前台挂点,具体授予逻辑后续扩展。',
|
||||
description: '配置勋章分类、自动授予条件与前台展示。路由仍为 /users/badge;存储键为 user_medal_*。',
|
||||
defaults: {
|
||||
user_badge_enabled: false,
|
||||
user_badge_public_display: true,
|
||||
user_badge_limit: 3,
|
||||
user_badge_dictionary: 'founder|创始成员|warning\nstaff|站务团队|info',
|
||||
user_medal_s: false,
|
||||
user_medal_public_display: true,
|
||||
user_medal_limit: 3,
|
||||
user_medal_args: defaultMedalArgs(),
|
||||
},
|
||||
groups: [
|
||||
{
|
||||
@@ -15,23 +77,37 @@ export const badgeSchema = {
|
||||
title: '徽章展示',
|
||||
icon: 'fas fa-medal',
|
||||
fields: [
|
||||
{ key: 'user_badge_enabled', label: '启用徽章系统', type: 'switch', default: false },
|
||||
{ key: 'user_badge_public_display', label: '公开页显示徽章', type: 'switch', default: true, dependsOn: { key: 'user_badge_enabled', value: true } },
|
||||
{ key: 'user_badge_limit', label: '最多显示数量', type: 'number', default: 3, min: 1, max: 8, dependsOn: { key: 'user_badge_enabled', value: true } },
|
||||
{ key: 'user_medal_s', label: '启用徽章/勋章系统', type: 'switch', default: false },
|
||||
{
|
||||
key: 'user_medal_public_display',
|
||||
label: '公开页显示徽章',
|
||||
type: 'switch',
|
||||
default: true,
|
||||
dependsOn: { key: 'user_medal_s', value: true },
|
||||
},
|
||||
{
|
||||
key: 'user_medal_limit',
|
||||
label: '最多显示数量',
|
||||
type: 'number',
|
||||
default: 3,
|
||||
min: 1,
|
||||
max: 8,
|
||||
dependsOn: { key: 'user_medal_s', value: true },
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'dictionary',
|
||||
title: '徽章字典',
|
||||
icon: 'fas fa-bookmark',
|
||||
key: 'catalog',
|
||||
title: '徽章明细',
|
||||
icon: 'fas fa-trophy',
|
||||
fields: [
|
||||
{
|
||||
key: 'user_badge_dictionary',
|
||||
label: '徽章列表',
|
||||
type: 'textarea',
|
||||
default: 'founder|创始成员|warning\nstaff|站务团队|info',
|
||||
help: '每行一个徽章:slug|显示文案|色调(neutral/info/success/warning/brand)|图标URL(可选)。有 icon_url 时前台显示勋章图;用户 meta aksrt_wear_badge 指定当前佩戴一枚。',
|
||||
dependsOn: { key: 'user_badge_enabled', value: true },
|
||||
key: 'user_medal_args',
|
||||
label: '分类与条目',
|
||||
type: 'json',
|
||||
default: defaultMedalArgs(),
|
||||
help: '由自定义页编辑:分类 → 条目(slug/名称/描述/图标/get_type/get_val)。仅手动授予用 manually_add。',
|
||||
dependsOn: { key: 'user_medal_s', value: true },
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
@@ -2,13 +2,20 @@ export const verifySchema = {
|
||||
key: 'users.verify',
|
||||
title: '身份认证',
|
||||
icon: 'fas fa-id-card',
|
||||
description: '配置公开认证徽标、审核策略,以及是否复用现有邮箱验证状态。',
|
||||
description: '配置公开认证徽标、申请门槛与审核策略(审核队列在 用户 → 身份认证 原生菜单)。',
|
||||
defaults: {
|
||||
user_verify_enabled: true,
|
||||
user_verify_public_display: true,
|
||||
user_verify_badge_text: '已认证',
|
||||
user_verify_accept_email_verified: true,
|
||||
user_verify_require_manual_review: false,
|
||||
user_verify_allow_apply: true,
|
||||
user_verify_disable_desc:
|
||||
'由于系统正在维护,暂时无法申请身份认证\n详情请联系管理员',
|
||||
user_verify_limit_level: 2,
|
||||
user_verify_desc:
|
||||
'认证用户会在昵称后显示认证徽章,同时享受多种优先待遇。申请请确保信息属实。',
|
||||
user_verify_apply_option: 'real_name|实名认证\norganization|企业认证',
|
||||
},
|
||||
groups: [
|
||||
{
|
||||
@@ -16,9 +23,21 @@ export const verifySchema = {
|
||||
title: '公开展示',
|
||||
icon: 'fas fa-eye',
|
||||
fields: [
|
||||
{ key: 'user_verify_enabled', label: '启用身份认证结构', type: 'switch', default: true },
|
||||
{ key: 'user_verify_public_display', label: '公开页显示认证徽标', type: 'switch', default: true, dependsOn: { key: 'user_verify_enabled', value: true } },
|
||||
{ key: 'user_verify_badge_text', label: '认证徽标文案', type: 'input', default: '已认证', dependsOn: { key: 'user_verify_public_display', value: true } },
|
||||
{ key: 'user_verify_enabled', label: '启用身份认证', type: 'switch', default: true },
|
||||
{
|
||||
key: 'user_verify_public_display',
|
||||
label: '公开页显示认证徽标',
|
||||
type: 'switch',
|
||||
default: true,
|
||||
dependsOn: { key: 'user_verify_enabled', value: true },
|
||||
},
|
||||
{
|
||||
key: 'user_verify_badge_text',
|
||||
label: '认证徽标文案',
|
||||
type: 'input',
|
||||
default: '已认证',
|
||||
dependsOn: { key: 'user_verify_public_display', value: true },
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -26,8 +45,66 @@ export const verifySchema = {
|
||||
title: '审核流程',
|
||||
icon: 'fas fa-tasks',
|
||||
fields: [
|
||||
{ key: 'user_verify_accept_email_verified', label: '邮箱验证通过视为已认证', type: 'switch', default: true, dependsOn: { key: 'user_verify_enabled', value: true } },
|
||||
{ key: 'user_verify_require_manual_review', label: '保留人工审核位', type: 'switch', default: false, dependsOn: { key: 'user_verify_enabled', value: true } },
|
||||
{
|
||||
key: 'user_verify_accept_email_verified',
|
||||
label: '邮箱验证通过视为已认证',
|
||||
type: 'switch',
|
||||
default: true,
|
||||
dependsOn: { key: 'user_verify_enabled', value: true },
|
||||
},
|
||||
{
|
||||
key: 'user_verify_require_manual_review',
|
||||
label: '保留人工审核位',
|
||||
type: 'switch',
|
||||
default: false,
|
||||
dependsOn: { key: 'user_verify_enabled', value: true },
|
||||
},
|
||||
{
|
||||
key: 'user_verify_apply_option',
|
||||
label: '申请类型选项',
|
||||
type: 'textarea',
|
||||
default: 'real_name|实名认证\norganization|企业认证',
|
||||
help: '每行:slug|显示名称',
|
||||
dependsOn: { key: 'user_verify_enabled', value: true },
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'apply',
|
||||
title: '申请设置',
|
||||
icon: 'fas fa-file-signature',
|
||||
fields: [
|
||||
{
|
||||
key: 'user_verify_allow_apply',
|
||||
label: '允许用户前台申请',
|
||||
type: 'switch',
|
||||
default: true,
|
||||
dependsOn: { key: 'user_verify_enabled', value: true },
|
||||
},
|
||||
{
|
||||
key: 'user_verify_disable_desc',
|
||||
label: '停用申请说明',
|
||||
type: 'textarea',
|
||||
default: '由于系统正在维护,暂时无法申请身份认证\n详情请联系管理员',
|
||||
dependsOn: { key: 'user_verify_allow_apply', value: false },
|
||||
},
|
||||
{
|
||||
key: 'user_verify_limit_level',
|
||||
label: '申请要求等级',
|
||||
type: 'number',
|
||||
default: 2,
|
||||
min: 0,
|
||||
max: 99,
|
||||
help: '0 表示不限制;依赖用户等级功能',
|
||||
dependsOn: { key: 'user_verify_allow_apply', value: true },
|
||||
},
|
||||
{
|
||||
key: 'user_verify_desc',
|
||||
label: '申请介绍',
|
||||
type: 'textarea',
|
||||
default: '认证用户会在昵称后显示认证徽章,同时享受多种优先待遇。申请请确保信息属实。',
|
||||
dependsOn: { key: 'user_verify_allow_apply', value: true },
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user