Skip to content

组件:rebt-inline/REBT内联

字数
2675 字
阅读时间
12 分钟

理性情绪行为疗法(REBT)的内联编辑器组件,支持结构化情绪分析和认知重构,是MindGuard心理专业功能的核心组件。

位置与作用

出现页面

  • 主包:pages/journal/index - 心情随笔Tab页面
  • 分包:packages/journal/diary-detail/index - 日记详情页
  • 分包:packages/journal/diary-edit/index - 日记编辑页

承担任务

  • 提供A(诱发事件)-B(信念)-C(结果)-D(辩驳)-E(新信念)的结构化分析
  • 引导用户识别非理性信念并进行认知重构
  • 集成AI建议功能,提供专业的认知行为疗法指导
  • 支持语音输入和多媒体内容记录
  • 生成个性化的行动建议和任务

Props(属性)

名称类型必填默认说明
visibleBooleanfalse组件显示状态
dataObjectnullREBT分析数据对象
modeString'analysis'模式:'analysis' | 'guidance' | 'quick'
stepString'A'当前步骤:'A' | 'B' | 'C' | 'D' | 'E'
editableBooleantrue是否可编辑
showAIBooleantrue是否显示AI建议功能
themeString'light'主题:'light' | 'dark'

Slots(插槽)

插槽名用途说明
header组件头部自定义可替换默认的REBT标题区域
step-aA步骤自定义可自定义诱发事件输入区域
step-bB步骤自定义可自定义信念分析区域
step-cC步骤自定义可自定义结果描述区域
step-dD步骤自定义可自定义辩驳过程区域
step-eE步骤自定义可自定义新信念总结区域
footer底部操作区自定义可自定义底部按钮组

Events(事件)

事件名触发时机回调参数埋点映射
onClose用户点击关闭按钮{type: 'close', step: string, data: object}act_rebt_close
onSave用户点击保存按钮{type: 'save', data: object, completed: boolean}act_rebt_save
onStepChange步骤发生变化{type: 'stepChange', fromStep: string, toStep: string}act_rebt_step_change
onSuggest用户请求AI建议{type: 'suggest', step: string, context: object}act_rebt_ai_suggest
onVoiceStart开始语音录制{type: 'voiceStart', step: string}act_rebt_voice_start
onVoiceEnd结束语音录制{type: 'voiceEnd', step: string, duration: number}act_rebt_voice_end
onComplete完成REBT分析{type: 'complete', data: object, suggestions: array}act_rebt_complete

Methods(外部可调)

方法名入参与返回使用示例
show(step?: string)入参:步骤;返回:voidthis.selectComponent('#rebt').show('B')
hide()入参:无;返回:voidthis.selectComponent('#rebt').hide()
setData(data: object)入参:REBT数据;返回:voidthis.selectComponent('#rebt').setData({...})
getCurrentData()入参:无;返回:objectthis.selectComponent('#rebt').getCurrentData()
validateStep(step: string)入参:步骤;返回:booleanthis.selectComponent('#rebt').validateStep('A')
generateSuggestions()入参:无;返回:Promise<array>this.selectComponent('#rebt').generateSuggestions()
exportData()入参:无;返回:objectthis.selectComponent('#rebt').exportData()

Data Contract(数据契约)

输入字段

字段来源服务/集合说明
data.idjournals集合REBT记录唯一标识
data.journal_idjournals集合关联的日记ID
data.step_ajournals集合诱发事件描述
data.step_bjournals集合非理性信念分析
data.step_cjournals集合情绪和行为结果
data.step_djournals集合理性辩驳过程
data.step_ejournals集合新的理性信念
data.ai_suggestionsjournals集合AI生成的建议数组
data.completedjournals集合是否完成分析
data.created_atjournals集合创建时间
data.updated_atjournals集合更新时间

输出/回写

字段目标集合/接口权限说明
journals.rebt_structjournals集合REBT结构化数据
suggestions.contentsuggestions集合生成的建议内容
behavior_tasks.titlebehavior_tasks集合生成的行动任务
user_events.event_typeuser_events集合REBT分析完成事件
analytics_data.rebt_usageanalytics集合REBT使用分析数据

视觉与交互(对齐样式规范)

尺寸与间距

  • 组件容器:宽度 686rpx,最小高度 800rpx
  • 步骤指示器:高度 80rpx,圆角 40rpx
  • 内容区域:左右边距 32rpx,上下边距 24rpx
  • 输入框:高度 120rpx,圆角 16rpx
  • 按钮尺寸:88×88rpx(最小点击区域)

颜色(Token映射)

元素Token色值用途
组件背景--color-ink-0#F7F9FC组件主体背景
步骤指示器--color-cbt-purple#6D28D9REBT专业功能色
已完成步骤--color-success-500#2AC28D已完成的步骤标记
当前步骤--color-brand-500#3A7BD5当前进行中的步骤
输入框边框--color-ink-200#D7DEE7输入框边框颜色
输入框聚焦--color-brand-400#6FA4FF输入框聚焦状态
按钮主色--color-brand-500#3A7BD5主要操作按钮
按钮次色--color-ink-600#5A6672次要操作按钮
AI建议背景--color-cbt-purple-50#EDE9FEAI建议区域背景
文字主色--color-ink-900#2C3640主要文字颜色
文字次色--color-ink-600#5A6672次要文字颜色

状态变化

  • normal: 默认展开状态,显示当前步骤内容
  • editing: 编辑状态,输入框获得焦点,显示输入工具栏
  • loading: AI建议生成中,显示加载动画
  • completed: 完成状态,所有步骤标记为已完成
  • disabled: 禁用状态,无法进行编辑操作
  • error: 错误状态,显示错误提示和重试按钮
  • voice-recording: 语音录制状态,显示录音动画和波形

可访问性

  • 对比度: 所有文本对比度 ≥ 4.5:1,REBT专用色对比度经过特殊优化
  • 步骤指示: 除了颜色变化,还提供图标和文字状态提示
  • 键盘导航: 支持Tab键在步骤间切换,Enter键确认
  • 屏幕阅读器: 完整的ARIA标签,描述每个步骤的作用和状态
  • 语音提示: 语音录制时提供音频和视觉双重反馈

性能与包体

性能优化

  • 懒加载: REBT内容在需要时才加载,避免首屏压力
  • 步骤缓存: 每个步骤的内容独立缓存,避免重复渲染
  • AI防抖: AI建议请求使用防抖,避免频繁调用
  • 语音优化: 语音录制使用Web Audio API,减少资源占用

包体控制

  • 主包归属: 位于主包,因为心情随笔是核心功能
  • 独立模块: REBT功能相对独立,便于后续拆分
  • CDN资源: 语音识别和AI处理使用云端服务,减少本地包体
  • 按需加载: 复杂的图表和可视化功能按需加载

埋点(来自数据分析需求)

场景事件名参数
REBT组件曝光exp_rebt_componentjournalId, mode, step
步骤切换act_rebt_step_changefromStep, toStep, timeSpent
内容输入act_rebt_content_inputstep, contentType, length
AI建议请求act_rebt_ai_suggeststep, context, responseTime
语音录制act_rebt_voice_recordstep, duration, success
保存操作act_rebt_savestep, completionRate, dataSize
完成分析act_rebt_completetotalTime, stepsCompleted, suggestionsCount
任务生成act_rebt_task_generatedtaskId, suggestionSource, priority

测试要点

单测

  • 步骤流程: 测试A-E五个步骤的完整流程
  • 数据验证: 测试输入数据的验证和错误处理
  • AI集成: 测试AI建议功能的正确调用和响应处理
  • 语音功能: 测试语音录制、转写和保存功能

E2E测试

  • 完整REBT流程: 从A步骤到E步骤的完整分析流程
  • AI建议体验: AI建议的生成、展示和应用流程
  • 数据同步: REBT数据与日记、任务的同步机制
  • 错误恢复: 网络异常、AI服务不可用时的降级处理

专业性测试

  • 心理学准确性: REBT模型的专业性和准确性验证
  • 建议质量: AI生成建议的专业性和有用性评估
  • 用户体验: 心理脆弱用户的使用体验和安全性评估
  • 隐私保护: 敏感心理数据的加密和保护机制

示例(WXML/WXSS 片段)

WXML 使用示例

xml
<!-- 基础使用 -->
<rebt-inline visible="{{showREBT}}" data="{{rebtdData}}" />

<!-- 完整配置 -->
<rebt-inline
  id="rebt-component"
  visible="{{showREBT}}"
  data="{{currentREBT}}"
  mode="analysis"
  step="{{currentStep}}"
  editable="{{true}}"
  showAI="{{true}}"
  theme="light"
  bind:close="onREBTClose"
  bind:save="onREBTSave"
  bind:stepChange="onStepChange"
  bind:suggest="onAISuggest"
  bind:complete="onREBTComplete"
>
  <!-- 自定义头部 -->
  <view slot="header" class="custom-header">
    <text>理性情绪行为疗法分析</text>
    <text>让我们一起识别和改变非理性信念</text>
  </view>

  <!-- 自定义底部 -->
  <view slot="footer" class="custom-footer">
    <button bindtap="onSaveProgress">保存进度</button>
    <button bindtap="onGetHelp">需要帮助</button>
  </view>
</rebt-inline>

WXSS 样式示例

scss
/* 组件基础样式 */
.rebt-inline {
  width: 686rpx;
  min-height: 800rpx;
  background: var(--color-ink-0);
  border-radius: 32rpx;
  margin: 16rpx 32rpx;
  box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.08);
}

/* 步骤指示器 */
.step-indicator {
  display: flex;
  justify-content: space-between;
  padding: 24rpx 32rpx;
  margin-bottom: 32rpx;
}

.step-item {
  flex: 1;
  text-align: center;
  position: relative;
}

.step-item::after {
  content: '';
  position: absolute;
  top: 20rpx;
  left: 50%;
  width: 100%;
  height: 2rpx;
  background: var(--color-ink-200);
  z-index: 1;
}

.step-item:last-child::after {
  display: none;
}

.step-icon {
  width: 40rpx;
  height: 40rpx;
  border-radius: 50%;
  background: var(--color-ink-200);
  color: var(--color-ink-600);
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 0 auto 8rpx;
  position: relative;
  z-index: 2;
  transition: all 0.3s ease;
}

.step-item.active .step-icon {
  background: var(--color-brand-500);
  color: white;
  transform: scale(1.1);
}

.step-item.completed .step-icon {
  background: var(--color-success-500);
  color: white;
}

/* 内容区域 */
.step-content {
  padding: 0 32rpx 32rpx;
}

.step-input {
  width: 100%;
  min-height: 120rpx;
  background: white;
  border: 2rpx solid var(--color-ink-200);
  border-radius: 16rpx;
  padding: 16rpx;
  font-size: 28rpx;
  line-height: 40rpx;
  transition: all 0.3s ease;
}

.step-input:focus {
  border-color: var(--color-brand-400);
  box-shadow: 0 0 0 4rpx rgba(58, 123, 213, 0.1);
}

/* AI建议区域 */
.ai-suggestions {
  background: var(--color-cbt-purple-50);
  border-radius: 16rpx;
  padding: 24rpx;
  margin: 24rpx 0;
}

.ai-suggestion-item {
  background: white;
  border-radius: 12rpx;
  padding: 16rpx;
  margin-bottom: 12rpx;
  border-left: 4rpx solid var(--color-cbt-purple);
}

/* 语音录制动画 */
.voice-recording {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 16rpx;
  padding: 24rpx;
  background: var(--color-brand-50);
  border-radius: 16rpx;
}

.voice-wave {
  width: 200rpx;
  height: 60rpx;
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.voice-bar {
  width: 4rpx;
  height: 20rpx;
  background: var(--color-brand-500);
  border-radius: 2rpx;
  animation: wave 1s ease-in-out infinite;
}

.voice-bar:nth-child(2) { animation-delay: 0.1s; }
.voice-bar:nth-child(3) { animation-delay: 0.2s; }
.voice-bar:nth-child(4) { animation-delay: 0.3s; }
.voice-bar:nth-child(5) { animation-delay: 0.4s; }

@keyframes wave {
  0%, 100% { height: 20rpx; }
  50% { height: 40rpx; }
}

版本与变更记录

版本历史

  • v1.0.0 (2025-09-22): 初始版本,支持基本REBT分析流程
  • v1.1.0 (计划): 集成更先进的AI模型,提升建议质量
  • v1.2.0 (计划): 支持多语言和跨文化适应
  • v2.0.0 (计划): 增强可视化分析,添加图表展示

变更说明

  • v1.0.0: 实现REBT的A-E五个步骤的完整分析流程
  • v1.1.0: 升级AI模型,提供更个性化和专业化的认知重构建议
  • v1.2.0: 支持多语言界面,适应不同文化背景的用户需求
  • v2.0.0: 添加情绪趋势图表、信念变化轨迹等可视化功能

组件维护者: MindGuard前端团队 + 心理学专业团队 最后更新: 2025-09-22 相关文档: REBT疗法说明, AI工作流配置

贡献者

The avatar of contributor named as Cai Hongyu Cai Hongyu

文件历史

撰写