feat(admin): host the ban/report settings page in the SPA schema

The users-interaction sidebar entry 禁封/举报 was a redirect stub; it is
now a schema-driven settings page replicating the reference theme
field-for-field:

- user_ban_s / user_report_s switches, ban_preset_reason and
  ban_appeal_keys as repeatable group rows ({t}), ban_appeal_desc and
  user_report_desc HTML textareas with the reference default copy, and
  user_report_img_s — keys, labels, help texts, defaults and ordering
  all mirrored in SchemaUsers.php and the SPA report.js schema
- UserRuntime::ban_settings()/report_settings() and
  BanAppeal::settings() read the new group-array values with fallback
  to the previous line/comma formats
- delete the self-built SPA queue pages (UsersBan, UsersReport,
  ReportDetailDrawer, UsersMessages) that the reference theme does not
  have; legacy /users/report bookmarks still redirect to the native page
- contract tests: lock the schema keys/labels, the schemaPage mount and
  the deleted-file state; drop reads of removed components
This commit is contained in:
kate522 committed 2026-09-19 22:24:55 +08:00
1 parent c0e0912eee
commit 381256ed59
12 files changed
+191 -1236

No files matched your search

@@ -1,57 +1,71 @@
// 字段集合、顺序、文案、默认值 1:1 对齐参考主题"用户&互动/禁封/举报"
export const reportSchema = {
key: 'users.report',
title: '禁封/举报',
icon: 'fa fas fa-flag',
description: '配置举报入口、公开限制提示和后续治理分类,为封禁/举报流程预留稳定结构。',
icon: 'fa fas fa-ban',
description: '禁封功能、举报入口、预置原因、申诉资料与举报说明配置。',
defaults: {
user_report_enabled: false,
user_report_public_entry: true,
user_report_public_notice: true,
user_report_ban_notice_text: '当前账号处于限制状态,部分互动能力已关闭。',
user_report_categories: 'spam|垃圾信息\nabuse|人身攻击\ncopyright|版权投诉',
ban_preset_reason: 'spam|垃圾信息\nabuse|人身攻击\nviolation|违规操作',
ban_appeal_desc: '',
ban_appeal_keys: '',
user_ban_s: true,
user_report_s: true,
ban_preset_reason: [
{ t: '发布色情、违法内容' },
{ t: '存在欺诈骗钱行为' },
{ t: '骚扰他人' },
{ t: '涉嫌侵权' },
{ t: '发布垃圾广告信息' },
],
ban_appeal_desc: '<div>为了良好的交流环境,申诉请阅读以下事项</div>\n<li>首次违规将拉入小黑屋7天</li>\n<li>3次违规后将直接禁封账号</li>\n<li>违规情节严重将无法提交申诉</li>\n<li>申诉提交后约2-3个工作日进行审核</li>\n<li>如有其它疑问请与客服联系</li>',
ban_appeal_keys: [
{ t: '真实姓名' },
{ t: '邮箱' },
{ t: '手机号' },
],
user_report_img_s: true,
user_report_desc: '',
user_report_desc: '<div>举报说明:</div>\n<li>请确保举报的内容属实</li>\n<li>我们将会在收到举报后2个工作日内进行处理</li>\n<li>举报属实我们将根据社区管理条例对该用户进行封号处理</li>\n<li>如有其它疑问请与客服联系</li>',
},
groups: [
{
key: 'entry',
title: '前台入口',
icon: 'fa fas fa-sign-in-alt',
fields: [
{ key: 'user_report_enabled', label: '启用举报/禁封结构', type: 'switch', default: false },
{ key: 'user_report_public_entry', label: '公开主页展示举报入口', type: 'switch', default: true, dependsOn: { key: 'user_report_enabled', value: true } },
{ key: 'user_report_public_notice', label: '公开显示限制提示', type: 'switch', default: true, dependsOn: { key: 'user_report_enabled', value: true } },
{ key: 'user_report_ban_notice_text', label: '限制提示文案', type: 'input', default: '当前账号处于限制状态,部分互动能力已关闭。', dependsOn: { key: 'user_report_public_notice', value: true } },
],
},
{
key: 'taxonomy',
title: '举报分类',
icon: 'fa fas fa-list',
fields: [
{ key: 'user_report_categories', label: '举报分类', type: 'textarea', default: 'spam|垃圾信息\nabuse|人身攻击\ncopyright|版权投诉', help: '每行一个分类:slug|显示名称', dependsOn: { key: 'user_report_enabled', value: true } },
],
},
{
key: 'ban',
title: '禁封设置',
key: 'main',
title: '',
icon: 'fa fas fa-ban',
fields: [
{ key: 'ban_preset_reason', label: '预设封禁原因', type: 'textarea', default: 'spam|垃圾信息\nabuse|人身攻击\nviolation|违规操作', help: '每行一条:slug|显示名称', dependsOn: { key: 'user_report_enabled', value: true } },
{ key: 'ban_appeal_desc', label: '申诉说明', type: 'textarea', default: '', dependsOn: { key: 'user_report_enabled', value: true } },
{ key: 'ban_appeal_keys', label: '申诉关键词', type: 'input', default: '', help: '逗号分隔', dependsOn: { key: 'user_report_enabled', value: true } },
],
},
{
key: 'image',
title: '图片举报',
icon: 'fa fas fa-image',
fields: [
{ key: 'user_report_img_s', label: '启用图片举报', type: 'switch', default: true, dependsOn: { key: 'user_report_enabled', value: true } },
{ key: 'user_report_desc', label: '举报说明', type: 'textarea', default: '', dependsOn: { key: 'user_report_img_s', value: true } },
{ key: 'user_ban_s', label: '禁封功能', type: 'switch', default: true, help: '启用后可以设置用户禁封,即小黑屋和封号的功能' },
{ key: 'user_report_s', label: '举报功能', type: 'switch', default: true, help: '前台显示举报按钮,用户可以举报其它不良信息', dependsOn: { key: 'user_ban_s', value: true } },
{
key: 'ban_preset_reason',
label: '预置原因',
type: 'group',
button_title: '添加原因',
help: '举报/禁封的时候可选择的原因',
default: [
{ t: '发布色情、违法内容' },
{ t: '存在欺诈骗钱行为' },
{ t: '骚扰他人' },
{ t: '涉嫌侵权' },
{ t: '发布垃圾广告信息' },
],
fields: [
{ key: 't', label: '原因', type: 'input', default: '' },
],
},
{ key: 'ban_appeal_desc', label: '申诉说明', type: 'textarea', rows: 5, help: '用户申诉时候显示的内容(支持HTML代码,请注意代码规范)', default: '<div>为了良好的交流环境,申诉请阅读以下事项</div>\n<li>首次违规将拉入小黑屋7天</li>\n<li>3次违规后将直接禁封账号</li>\n<li>违规情节严重将无法提交申诉</li>\n<li>申诉提交后约2-3个工作日进行审核</li>\n<li>如有其它疑问请与客服联系</li>' },
{
key: 'ban_appeal_keys',
label: '申诉所需资料',
type: 'group',
button_title: '添加申诉资料',
help: '用户提交申诉时候需要提供的资料;此处的信息收集,仅用于记录和申诉审核',
default: [
{ t: '真实姓名' },
{ t: '邮箱' },
{ t: '手机号' },
],
fields: [
{ key: 't', label: '资料项', type: 'input', default: '' },
],
},
{ key: 'user_report_img_s', label: '举报可上传图片', type: 'switch', default: true, help: '举报时允许上传图片进行举证(最多上传3张)', dependsOn: { key: 'user_report_s', value: true } },
{ key: 'user_report_desc', label: '举报说明', type: 'textarea', rows: 5, help: '举报时候显示的内容(支持HTML代码,请注意代码规范)', dependsOn: { key: 'user_report_s', value: true }, default: '<div>举报说明:</div>\n<li>请确保举报的内容属实</li>\n<li>我们将会在收到举报后2个工作日内进行处理</li>\n<li>举报属实我们将根据社区管理条例对该用户进行封号处理</li>\n<li>如有其它疑问请与客服联系</li>' },
],
},
],