当前位置: 首页 > news >正文

前端+AI项目学习笔记day12

三十、咨询记录详情

定义弹窗

获取每行数据

获取会话消息列表

定义接口

引入接口

调用

显示对话列表

样式

<style lang="scss" scoped> .session-title { font-weight: 500; color: #333; margin-bottom: 4px; } .session-preview { font-size: 13px; color: #666; margin-bottom: 4px; display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .session-detail { max-height: 70vh; overflow-y: auto; .detail-header { margin-bottom: 20px; padding: 16px; background: #f8f9fa; border-radius: 8px; border: 1px solid #e9ecef; } .detail-row { display: flex; align-items: center; margin-bottom: 8px; :last-child { margin-bottom: 0; } .detail-label { font-weight: 500; color: #495057; min-width: 80px; margin-right: 8px; } .detail-value { color: #333; } } } .messages-container { margin-top: 20px; .messages-header { margin-bottom: 16px; h4 { margin: 0; color: #333; font-size: 16px; font-weight: 500; } } .messages-list { max-height: 400px; overflow-y: auto; border: 1px solid #e9ecef; border-radius: 8px; padding: 16px; background: #fff; .message-item { margin-bottom: 12px; padding: 12px; border-radius: 8px; background: #f8f9fa; border: 1px solid #e9ecef; :last-child { margin-bottom: 0; } &.user-message { background: #e8f4fd; } &.ai-message { background: #f0f9f0; } } .message-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; .sender { font-weight: 500; color: #333; display: flex; align-items: center; gap: 4px; } .time { font-size: 12px; color: #999; } .message-content { color: #333; line-height: 1.6; white-space: pre-wrap; margin-top: 8px; font-size: 14px; } } } } </style>

添加loading

关闭按钮

三十一、情绪日志列表

定义接口

引入

<template> <div> <PageHead title="情绪日志" /> <TableSearch :formItem="formItem" @search="handleSearch" /> </div> <el-table :data="tableData" style="width: 100%"> <el-table-column prop="id" label="用户ID" width="80" /> <el-table-column label="会话ID" width="80"> <template #default="scope"> <el-avatar>{{ scope.row.nickname }}</el-avatar> </template> </el-table-column> <el-table-column prop="diaryDate" label="记录日期" width="120" /> <el-table-column label="情绪评分"> <template #default="scope"> <el-rate :model-value="scope.row.moodScore" :max="10" disabled /> </template> </el-table-column> <el-table-column label="生活指标" width="120"> <template #default="scope"> <div> <p> 睡眠:{{ scope.row.sleepQuality }} / 5 </p> <p> 压力:{{ scope.row.stressLevel }} / 5 </p> </div> </template> </el-table-column> <el-table-column prop="emotionTriggers" label="情绪触发因素" width="120" /> <el-table-column prop="diaryContent" label="日记内容" width="250" /> <el-table-column label="操作" width="240" fixed="right"> <template #default="scope"> <el-button type="primary" text>详情</el-button> <el-button type="danger" text>删除</el-button> </template> </el-table-column> </el-table> <el-pagination style="margin-top: 25px;" :page-size="pagination.size" layout="prev, pager, next" :total="pagination.total" @change="handleChange" /> </template> <script setup> import { ref,onMounted,reactive } from 'vue' import { getEmotionalPage } from '@/api/admin' import PageHead from '@/components/PageHead.vue' import TableSearch from '@/components/TableSearch.vue' const formItem = [ {comp:'input',prop:'userId',label:'用户ID',placeholder:'请输入用户ID'}, {comp:'select',prop:'moodScoreRange',label:'情绪评分',placeholder:'请选择评分',options:[ {label:'低分(1-3)',value:'1-3'}, {label:'中分(4-6)',value:'4-6'}, {label:'高分(7-10)',value:'7-10'} ]} ] //列表 const tableData = ref([]) //分页参数 const pagination = reactive({ currentPage: 1, size: 10, total: 0 }) const handleSearch = async (formData) => { const params = { ...formData, ...pagination } const {records,total} = await getEmotionalPage(params) tableData.value = records pagination.total = total } //分页 const handleChange = (page) => { pagination.currentPage = page handleSearch() } onMounted(() => { handleSearch() }) </script>

http://www.jsqmd.com/news/676104/

相关文章:

  • 常熟出租房消防升级:智能无线火灾报警系统首选立可安 - 今日热点
  • Premiere调色进阶:手把手教你用‘HSL辅助’和‘颜色匹配’,搞定人物肤色与多镜头统一
  • 思源宋体CN:7种字重免费开源字体如何快速提升你的中文设计效果
  • 别再只用PCA了!用sklearn的Isomap处理‘瑞士卷’这类非线性数据,实战避坑指南
  • 5分钟快速上手:用罗技鼠标宏掌控PUBG武器后坐力的完整指南
  • 从ETOPO1数据到精美地形图:手把手教你用Matlab和m_map绘制专业级海底地形
  • 深聊自动变速箱维修企业怎么选,服务不错的企业有哪些 - 工业品网
  • SuperMap iDesktop 11i实战:BIM+GIS项目中Revit模型性能优化的5个关键步骤
  • Spring Boot 4.0 Agent-Ready 架构落地 checklist(含GraalVM兼容矩阵、Instrumentation白名单、安全沙箱配置模板)
  • CO催化氧化炉生产厂家选购指南:如何选择靠谱供应商 - 速递信息
  • 新手避坑指南:在Vivado 2022.1上为Nexys A7-100T创建第一个流水灯项目
  • 2026年知网AIGC率高怎么破?实测6款降AI工具,这款真能保住格式(附对比图) - 降AI实验室
  • 保研选校实战:北大软微和中科院计算所,哪个更适合想进大厂搞钱的你?
  • 深聊公司报销员工车辆油费有啥途径、按什么比例、制度是怎样的 - 工业推荐榜
  • Z-Image开源镜像技术文档精读:Z-Image底座加载机制与LM权重注入钩子分析
  • 从‘算不出来’到‘一键出图’:工程师用MATLAB解决实际工程中的数学建模问题
  • qcow2镜像选off还是full?实测对比qemu-img四种预分配策略的性能与空间占用
  • 树莓派5到手别急着装Ubuntu,先看看这3个新手必踩的坑(附避坑指南)
  • Topit终极指南:如何在Mac上轻松实现窗口置顶,提升多任务效率
  • PyQt5界面美化秘籍:用QColor的alpha通道和预置颜色名,5分钟打造高级感透明与渐变效果
  • 推荐GEO优化公司哪家靠谱好一点 - 速递信息
  • 主流AI培训服务商横向评测:从技术栈到交付能力的多维度对比
  • 别再只会用空格了!这10个谷歌/百度搜索操作符,帮你精准找到技术文档和源码
  • FreeRTOS定时器选型指南:你的项目到底该用硬件定时器还是软件定时器?
  • 3步破解城通网盘限速:免费获取高速直连下载地址的终极方案
  • 5个高级VRM转换核心技术解析:Blender插件架构与实战优化方案
  • “幽灵外卖“被罚35亿,平台经济监管风暴真的来了!
  • 避坑指南:Three.js 贴图动画做流光效果时,offset重复计算的常见问题与修复
  • 深入理解 Java 并发编程:线程安全、锁机制与 volatile 的底层原理
  • SMUDebugTool完全指南:掌握AMD Ryzen硬件调试与性能调优的5大核心功能