Skip to content

enhancement(frontend): 课程评价举报界面增加强制文字说明(最小字数+防粘贴+固定格式)防止滥用 #157

Description

@yzxoi

用户反馈

目前举报功能有被滥用的嫌疑,之后应该在举报的界面加一个强制性的文字说明,可能40~50字以上即可,设置固定的格式,不允许黏贴,强制在文本框内输入,在 https://github.com/YourTongji/YourTJCourse-Serverless 这个 repo 里面记录为 issue,

用户反映课程评价的举报功能存在被滥用的风险(例如恶意提交无实质内容的举报),建议在举报界面增加一个强制填写的文字说明框,要求:

  1. 强制输入(不可跳过),不允许粘贴(防止批量提交相同内容)
  2. 最少 40~50 字以上
  3. 设置固定的输入格式
  4. 提交时校验字数

意图判断

  • 类型: feature_request (enhancement)
  • 相关仓库: YourTongji/YourTJCourse-Serverless
  • 相关模块: frontend (Vue) — 课程评价举报弹窗组件

去重检查

在 YourTongji/YourTJCourse-Serverless 仓库中未发现语义重复的 open issue。存在相关但不同的 issue:

在 YourTongji/YourTJ-Credit-Serverless 仓库中存在相似的 issue #1(closed)用于 Credit 市场举报功能,但 YourTJCourse-Serverless 的课程评价举报功能尚未进行同类改进,因此不视为重复。

代码静态扫描结果

当前课程评价举报功能实现在 scheduler/src/components/CourseReviewDrawer.vue

举报弹窗(第 164–191 行):

  • 弹窗只有 4 个预设原因按钮(垃圾广告、骚扰/人身攻击、虚假信息、其他)
  • 点击原因按钮直接调用 submitReport(item.key) 提交
  • 没有任何文字输入框,没有任何用户自行输入的字段

submitReport 方法(第 364–381 行):

  • 仅发送 { clientId, reason } 两个字段到 POST /api/review/:id/report
  • 无任何字数校验、格式校验或防滥用机制

举报原因定义(第 187–192 行):

const REPORT_REASONS = [
  { key: 'spam', label: '垃圾广告' },
  { key: 'harassment', label: '骚扰/人身攻击' },
  { key: 'misinformation', label: '虚假信息' },
  { key: 'other', label: '其他' },
]

整个流程中,用户只需点击一次即可提交举报,没有任何内容输入的障碍,容易被滥用。

Proposed Fix

  1. 增加强制文字输入框:在举报弹窗中增加一个 <textarea> 字段,要求用户输入举报说明
  2. 最小字数校验:设置 minLength: 40(或 50),提交时校验去除空白后的实际字符数
  3. 阻止粘贴:在 textarea 上添加 @paste.prevent 阻止从剪贴板粘贴内容
  4. 固定格式引导:添加 placeholder 示例格式,如:
    请说明举报原因及依据:
    1. 被举报内容:
    2. 违规说明:
    3. 补充证据/链接:
    
  5. 字数提示:显示已输入/最少字数提示
  6. 提交参数更新:将文字说明作为额外字段(如 description)一并发送到后端 API
  7. 后端接口兼容:确认 POST /api/review/:id/report 接口是否需要同时更新以接收 description 字段

Reporter: wendaining (QQ: 2215589975)
来源: QQ 反馈群

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions