Community研究与数据分析github.com

校园服务台助手技能

维护、构建和扩展 Campus Helpdesk React 门户的综合指南与开发标准。涵盖组件架构、响应式 UI、问题验证、工单生命周期状态、分析和验证工作流。

校园服务台助手技能 是什么?

该技能为开发、增强和维护 Campus Helpdesk Web 应用程序提供了全面的技术标准、工作流和最佳实践。它适用于 Claude Code、Cursor 和 Codex 等 AI 代理,指导它们构建可复用的 React 组件、设计响应式可访问的 UI、实施严格的客户端表单验证、管理工单的完整生命周期(待处理→进行中→已解决)、动态计算仪表板 KPI,并确保通过 linting 和生产构建进行代码验证。技能强调诚实报告错误、避免掩盖失败,并维护 localStorage 持久化。通过遵循此指南,AI 代理可以高效地扩展和维护校园服务台门户。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/fatimaashar666-web/MCPpractice/tree/HEAD/.github/skills/campus-helpdesk

Installed? Explore more 研究与数据分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

校园服务台助手技能 是做什么的?

本技能定义了开发、增强和维护 Campus Helpdesk Web 应用程序的技术标准、工作流和最佳实践。在添加功能、重构组件、更新状态工作流或修改该项目中的数据模型时,请使用本指南。


1. 编写简洁、可复用的 React 组件

保持模块化、解耦的组件架构:

  • 单一职责原则:每个组件应专注于做好一件事。
    • 表单逻辑和输入字段属于 IssueForm.jsx。
    • 公共搜索、筛选和工单卡片显示属于 TicketList.jsx。
    • 分析指标、可视化进度条和管理表格属于 AdminDashboard.jsx。
    • 模态框检查和历史时间线属于 TicketModal.jsx。
    • 通知属于 Toast.jsx。
  • Props 与 State 设计:
    • 尽可能保持 state 局部化。仅在跨不同视图(例如全局 tickets、activeTab、toasts)共享时,才将 state 提升到 App.jsx。
    • 尽可能使用纯展示型子组件,并清晰地向下传递回调函数(如 onSelectTicket、onUpdateStatus、onDeleteTicket)。
    • 避免重复的 state;使用 useMemo 计算派生值(例如筛选后的工单、KPI 统计)。
  • 命名规范与整洁代码:
    • 组件文件使用 PascalCase(AdminDashboard.jsx、IssueForm.jsx)。
    • 工具和常量文件使用 camelCase(storage.js、constants.js)。
    • 事件处理程序应遵循 handle[Action] 模式(例如 handleSubmit、handleStatusChange)。
    • 保留注释和文档字符串。编写自解释的代码,使用清晰描述性的变量名称。
  • 零重量级外部依赖:
    • 保持轻量级架构:使用原生 React 钩子、纯内联 SVG 作为图标,以及作用域 CSS 类,避免引入庞大的第三方组件库。

2. 创建响应式且可访问的 UI

Campus Helpdesk 门户必须在所有设备(手机、平板、笔记本电脑、大显示器)上提供无摩擦的用户体验:

  • 流畅布局与断点:
    • 采用移动优先或桌面向下设计,使用一致的断点:
      • 桌面端:最大容器宽度 1240px,多列网格(5 个指标卡片、2 列分析、2 列表单)。
      • 平板端(<= 1024px):将 5 列指标网格折叠为 3 或 2 列;将分析图表堆叠为单列。
      • 移动端(<= 768px):将头部导航、表单输入堆叠为 1 列;在数据表上启用水平滚动。
      • 小屏幕(<= 480px):全宽指标卡片,堆叠操作按钮,并固定底部 Toast 通知。
  • 可访问性(a11y):
    • 所有交互元素必须使用适当的语义化 HTML(<button>、<input>、<select>、<textarea>)。
    • 表单控件必须有关联的 <label htmlFor="..."> 元素,并匹配 id 属性。
    • 模态对话框必须有 role="dialog"、aria-modal="true",并支持通过点击背景和按 Escape 键关闭。
    • 交互式图标或纯图标按钮必须包含描述性的 aria-label 或 title 属性。
    • 保持状态徽章和优先级标签上文本的可访问颜色对比度。
  • 视觉反馈与过渡:
    • 交互元素必须显示清晰的 :hover、:focus 和 :active 状态。
    • 聚焦的表单字段必须显示高对比度的聚焦环(var(--primary-ring))。
    • 使用微动画(Toast 滑入、模态框放大、按钮旋转器)向用户反馈后台操作,同时避免布局偏移。

3. 验证学生问题表单

所有通过 IssueForm.jsx 提交的问题都必须遵循严格的客户端验证规则,然后才能进行状态变更或存储:

验证规则矩阵

字段规则错误消息
全名必填,去除首尾空格,非空“请提供您的全名。”
校园邮箱必填,有效正则模式 /^[^\s@]+@[^\s@]+\.[^\s@]+$/“请输入有效的电子邮件地址。”
位置/房间必填,去除首尾空格,非空“请指定建筑、大厅或校园位置。”
类别必填,必须匹配 CATEGORIES 列表默认自动选择
优先级必填,必须匹配 PRIORITIES(低、中、高、紧急)默认为 '中'
问题主题/标题必填,去除首尾空格,最小长度 $\ge 5$ 个字符“标题至少需要 5 个字符。”
详细描述必填,去除首尾空格,最小长度 $\ge 15$ 个字符“描述至少需要 15 个字符。”

验证实现步骤

  1. 维护一个 errors 状态对象,将字段名称映射到错误字符串。
  2. 当用户修改其输入时(handleChange),清除该特定字段的错误。
  3. 在 handleSubmit 时检查所有规则。如果存在错误,阻止提交并使用 .input-error 和 .field-error 高亮无效字段。
  4. 成功时:
    • 生成唯一 ID(例如 TCK-XXXX)。
    • 分配初始状态 待处理。
    • 记录初始提交时间戳和历史节点。
    • 重置表单字段和错误状态。
    • 触发成功 Toast 并导航到工单跟踪器视图。

4. 管理待处理、进行中和已解决状态

Campus Helpdesk 遵循严格定义的 3 阶段生命周期:

[ 待处理 ]  ───►  [ 进行中 ]  ───►  [ 已解决 ]
    ▲                      ▲                     │
    └──────────────────────┴─────────────────────┘ (可按需重新打开)

状态定义与视觉设计系统

  1. 待处理:
    • 含义:学生/教职员工提交的新问题,等待分诊或分配。
    • 颜色主题:琥珀色(#d97706),背景 #fef3c7,边框 #fde68a。
    • 进度阶段:步骤 1 激活。
  2. 进行中:
    • 含义:技术人员或校园部门已认领工单,正在积极调查或维修。
    • 颜色主题:皇家蓝(#2563eb),背景 #dbeafe,边框 #bfdbfe。
    • 进度阶段:步骤 1 和 2 激活。
  3. 已解决:
    • 含义:修复完成,设备已更换,或服务已恢复。
    • 颜色主题:翡翠绿(#059669),背景 #d1fae5,边框 #a7f3d0。
    • 进度阶段:步骤 1、2 和 3 激活。

生命周期规则与审计历史

  • 每个状态转换必须向工单的 history 数组追加一条事件:
    {
      status: newStatus,
      timestamp: new Date().toISOString(),
      note: `状态已更新为 ${newStatus}`
    }
    
  • 更新内部工作人员注释必须更新 adminNote 和 updatedAt,且不重置工单原始的 createdAt。
  • 更新必须立即同步到 localStorage(campus_helpdesk_tickets_v1)。

5. 保持仪表板统计准确

管理仪表板提供实时操作可见性。所有 KPI 指标和图表计算必须从数据源 tickets 数组动态派生:

指标计算

  1. 总工单数: $$\text{总数} = \text{tickets.length}$$
  2. 待处理计数: $$\text{待处理} = \text{tickets.filter}(t \Rightarrow t.\text{status} === \text{STATUSES.PENDING}).\text{length}$$
  3. 进行中计数: $$\text{进行中} = \text{tickets.filter}(t \Rightarrow t.\text{status} === \text{STATUSES.IN_PROGRESS}).\text{length}$$
  4. 已解决计数: $$\text{已解决} = \text{tickets.filter}(t \Rightarrow t.\text{status} === \text{STATUSES.RESOLVED}).\text{length}$$
  5. 解决率(%): $$\text{解决率} = \begin{cases} \text{Math.round}\left(\frac{\text{已解决}}{\text{总数}} \times 100\right), & \text{如果总数} > 0 \ 0, & \text{否则} \end{cases}$$
  6. 高优先级与紧急优先级队列: $$\text{紧急/高} = \text{tickets.filter}(t \Rightarrow t.\text{priority} === '紧急' \lor t.\text{priority} === '高').\text{length}$$
  7. 类别与优先级分布:
    • 即使计数为 0,也要计算所有预定义类别和优先级的计数,以防止 UI 闪烁或除零错误。
    • 确保进度条宽度百分比总和始终 $\le 100%$。

将所有统计计算包装在 React 的 useMemo 钩子中,并将 [tickets] 作为依赖项,以保持性能。


6. 测试更改并运行构建

在提交任何代码更改或将任务标记为完成之前,通过静态分析和生产构建步骤验证应用程序:

验证协议

  1. 导航到项目目录:

    cd "campus-helpdesk"
    
  2. 运行静态代码检查:

    npm run lint
    
    • 必须以退出码 0 结束。
    • 确保没有未使用的导入、变量或未转义的 JSX 实体。
  3. 运行生产构建:

    npm run build
    
    • 验证 Vite 完成生产资产捆绑,且无错误或警告。
    • 验证 dist/index.html、dist/assets/*.css 和 dist/assets/*.js 是否已成功创建。
  4. 验证 localStorage 持久化:

    • 测试提交工单是否会更新 localStorage.getItem('campus_helpdesk_tickets_v1')。
    • 测试更新工单状态是否在页面刷新后保留。
    • 测试“重置示例数据”和“全部清除”功能。

7. 诚实报告错误

在报告系统状态或错误时,正直和诚实至关重要:

  • 不要掩盖失败:如果发生构建错误、语法错误或 lint 失败,请报告确切的错误消息、文件名和行号。
  • 根本原因解释:解释为什么发生错误(例如缺少导入、存储解析器中未处理的 null 情况、损坏的 prop 契约)。
  • 仅已验证修复:在未重新运行验证命令(npm run lint / npm run build)并确认退出码 0 的情况下,不要声称问题已修复。
  • 用户透明度:如果发生意外浏览器限制或 localStorage 配额问题,请主动向用户解释限制,并提供清晰的技术选项。

相关技能