当前位置: 首页 > 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.cnnetsun.cn/news/2009605.html

相关文章:

  • E-Hentai下载器终极指南:如何快速批量下载并打包为ZIP文件
  • OriginPro 2021b 极坐标图保姆级教程:从数据导入到高级美化(含面积填充与刻度线避坑)
  • Thorium Reader架构解析:构建高性能跨平台电子书阅读器的技术实现
  • AXI-FULL协议实战:如何用SystemVerilog Assertions (SVA) 验证你的读写时序?
  • 5分钟搞定《经济研究》投稿格式:终极LaTeX模板完整指南
  • 基于 HelloAgents 框架开发智能减肥助理:从多智能体架构到 Streamlit 前端落地
  • 从零到一搭建企业级容器平台:我为什么选择KubeSphere 3.x而不是裸奔K8s?
  • 代购系统与 1688 采购对接:自动下单 API 的封装与异常处理
  • 鸿蒙中 文本测量
  • 避坑指南:Three.js 贴图动画做流光效果时,offset重复计算的常见问题与修复
  • Gemini3.1Pro推理能力全面爆发2026实测与选型指南
  • Wand-Enhancer:免费解锁WeMod Pro高级功能的终极完整指南
  • 华为OD机试真题 新系统 2026-04-19 JavaGo 实现【8位LED控制器】
  • 2026最权威的六大AI辅助论文工具横评
  • 思源黑体TTF:15分钟构建专业级多语言字体解决方案
  • Vivado高效工作流搭建指南:如何管理IP核、约束文件与Block Design复用
  • Real Anime Z开发者指南:CUDA碎片治理与CPU卸载机制详解
  • 别再被‘kernel source tree not found’卡住:一份给Linux新手的RPM包依赖关系排查指南
  • AI-Agent工具调用实战
  • CV炼丹新思路:用CBAM注意力机制让你的小模型在Kaggle竞赛里也能“卷”赢大模型
  • SpringBoot监听Redis键过期事件,实现订单超时自动关闭(附集群版避坑指南)
  • Hypnos-i1-8B实际作品:百度知道TOP10数学问题全自动解答(含markdown表格)
  • 别再只测TCP了!用iperf3的UDP模式给你的网络做个‘压力体检’(附丢包率与抖动分析指南)
  • 只需要一条命令,让所有 AI 应用工具共享 skills
  • 除了蓝桥杯,还有哪些能写进简历的硬核电子竞赛?附各赛事企业命题(华为/平头哥/TI)解析
  • 旧Mac升级指南:三步解锁苹果官方限制,让老设备运行最新macOS系统
  • 三步解锁RPG Maker加密资源:无需编程的浏览器解密工具全攻略
  • 小红书批量下载神器XHS-Downloader:一键获取无水印内容的终极指南
  • 告别Flutter打包APK的玄学报错:用`-vv`参数揪出真凶(附常见错误文件列表)
  • Zotero Citation终极指南:三步告别文献引用噩梦,让学术写作效率飙升90%