From 35cff55bb8ca6c12d254908ad07cefd6d071c318 Mon Sep 17 00:00:00 2001 From: ZhaoYang <565837861@qq.com> Date: Fri, 16 Jan 2026 19:16:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=93=E5=AE=B6=E5=88=97=E8=A1=A8=EF=BC=8C?= =?UTF-8?q?=E8=81=8A=E5=A4=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pagesA/images/add.png | Bin 0 -> 4458 bytes pagesA/images/cuo.png | Bin 0 -> 4686 bytes pagesA/images/ps.png | Bin 0 -> 3372 bytes pagesA/images/wj.png | Bin 0 -> 2061 bytes pagesA/images/xjp.png | Bin 0 -> 4690 bytes pagesA/images/yy.png | Bin 0 -> 5009 bytes pagesA/images/zp.png | Bin 0 -> 2746 bytes pagesA/pages/expert/expert.js | 151 +++----- pagesA/pages/expert/expert.wxml | 51 ++- pagesA/pages/expert/expert.wxss | 2 +- pagesA/pages/expertChat/expertChat.js | 435 +++++++++++++++--------- pagesA/pages/expertChat/expertChat.wxml | 125 +++---- pagesA/pages/expertChat/expertChat.wxss | 228 ++++--------- project.config.json | 2 +- utils/baseUrl.js | 2 +- 15 files changed, 453 insertions(+), 543 deletions(-) create mode 100644 pagesA/images/add.png create mode 100644 pagesA/images/cuo.png create mode 100644 pagesA/images/ps.png create mode 100644 pagesA/images/wj.png create mode 100644 pagesA/images/xjp.png create mode 100644 pagesA/images/yy.png create mode 100644 pagesA/images/zp.png diff --git a/pagesA/images/add.png b/pagesA/images/add.png new file mode 100644 index 0000000000000000000000000000000000000000..5f1f5ab5d8eca640c4b568ab15dc6e4964b13276 GIT binary patch literal 4458 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 literal 0 HcmV?d00001 diff --git a/pagesA/images/cuo.png b/pagesA/images/cuo.png new file mode 100644 index 0000000000000000000000000000000000000000..560f3d56dbc720960da826a86b039b7653e05def GIT binary patch literal 4686 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 I|60`l011+Cq5uE@ literal 0 HcmV?d00001 diff --git a/pagesA/images/ps.png b/pagesA/images/ps.png new file mode 100644 index 0000000000000000000000000000000000000000..c0f3103391a343a03631f3b626edf06de4ed6144 GIT binary patch literal 3372 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 literal 0 HcmV?d00001 diff --git a/pagesA/images/wj.png b/pagesA/images/wj.png new file mode 100644 index 0000000000000000000000000000000000000000..5ad13168a4a7908e370e86eec6502fbc5ad9af9d GIT binary patch literal 2061 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yF%}28J29*~C-ahlf&I9ri(^Pd z+}k-93vc;IxNa>Hmip*qb#UsDl`4L!8?`y-wus+0X%v}aD5)+yVb8wZLgoJR{>_xH zy<{7nUdGxM@R6TMz`|SM02`3tMtx(X&&{R_i#jnla%s+* zQOF`dIoCnS|FZtrl6@JDVXLpkUN4>R%rRSt^IPry zwXc7DEU?I#c=S78#dd|mS%KHTeqXifO?c1Bt?dH)Y;0|9eQIsj@0MeFFZ3j|PyV{F z{_ClBC9&Uouc~N&exg2Ghoi{n)uVqufBw9^B>dB&)d~il6P9IOD~x53?(o{w7)+=j94nH*_5- zjJ_4PxM{=Qu5~%rOYiDNug$3IwkYUQIGiq5-o4}2>)jmNqOM=R86V!G(8-;$da6Xh zqmLYuBtCq2CqKV;N&B2vJRFm{-pt;)MoCgZ-HNqIh3WVC2)P@d3#QFyb$sG+o)4&} zf9o3`4kc$xyNnLz(sDq2t&x$u<<$*eYxjJK6m8O3uCp#hjcNM6 zKWz%eQx9cMcTW&l`u?|mez*urWSoD@#XT(ls*VdfKGSX9tUvjHyr)3QOxD8C&%!_c zZnJ4R6VDR9A%N-d?N1z=E)?xp^OKWje^|4^=kEqJdYk6{H#)VmY2W+niY*V*SL^*N zx%&S6+G88GI`@vady2?#O50#jYiGSu!lXx+uFnFJC zw?eQ-S_SWF54IEk=Oq33d1v4IcG*ie>p3RvpI)5)#Q%|Td85M2MsC03VcraduQ*s{ zdSyATPhLHBJrB#t<587rVS=h>xi<@_2xolFjBvf;^534{@l%0cp_tr_;DD#GYj{FF z&uv;8mUL~6LMP*Lx$|M#x``~Fr_GO-giUOjBB-KxCuVV^>!pcq6H0Q5{hl@23g)tS zvXr%L%-JgB;68yR;JMVvFmHc3$1gtVb5HP}_x$+2&&FJ_eCk@P*I38Wos9eG#;Lx;085l@@7vhR-)Sl{@gL8<`Z)8c#nY5nKsuC5p=g>fgX5`p^S>yw2((1AFo|<0aBOD> zva1=G3Rxl?AMGd%QDhNVGGS4tq&vd^aUY0h@JCj#i*HyBtlt?tUHx3vIVCg!0Qzr6 AegFUf literal 0 HcmV?d00001 diff --git a/pagesA/images/xjp.png b/pagesA/images/xjp.png new file mode 100644 index 0000000000000000000000000000000000000000..e9d2e8b8479e0dcd98fec5e7d29c0a365177dbf1 GIT binary patch literal 4690 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 literal 0 HcmV?d00001 diff --git a/pagesA/images/yy.png b/pagesA/images/yy.png new file mode 100644 index 0000000000000000000000000000000000000000..689d08bbcb52f0a800e7bdf8493ed31283685cd1 GIT binary patch literal 5009 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 literal 0 HcmV?d00001 diff --git a/pagesA/images/zp.png b/pagesA/images/zp.png new file mode 100644 index 0000000000000000000000000000000000000000..7309fb4a2a14ede73af79883d04ec2e2fe39b91a GIT binary patch literal 2746 zcmdT`YdDnY8=skdjUnZoDI!BJF(O-$9fa}@F=K}oO{#UusT|8-lJiUlCWJu;q5nn> zV^ghlSjVYh9Me)cG)SS8!;r&hr^CMc@&D!jZ9n`!JkRgCe$RbB_j5hhef{nq_a|qE zjf&e8Q7F_#8r9Af!Onjc4vXyfj#U*QfR1!^prESyi0@G-#VDE`d?dzezHsckxSn96 z(4fFg94_HS8`3Z>7izv<(*V6;JcpFgN?1Tyh1uGhu26f}0)O3w|irUH0 zr7iiU0RU(x$~bxnw8^3Qbz;-RaW2$tERO-6AFc8Es}3l z{13FjjrX7|EW1TAL?-z4It)dBJHn_L53fr}YFukHpguF*Bg5VgDmkBlcG?A8k(b236m64PFVF zNkX|^G8Fuy!-O`{4!G`>U#_7z<=<`(w{ zya4Y;ciNY^^a1IYebwBHUgKfEf&PDZv}E4+A)FC47Cp9Aw<}JN`NX*yDw;BnoNZXx z$4l3={}g`z1o(Hxbvh&XYy8;;Gu^I`#YX>P`>a$Z(VTg&Ex>%bE<+La z?TK(CW9)I!i zn=$!zU=7d6qEGuQ6$u1uDil+gd2RBJxzTt+#&fESt3%ah7W^0+pDW$rn(>~6VNY;! zNgap6jx`-tD}R`eRVneYa9#~q(h4crAlpd7F+aCbM#+1K71{Z6c);RodALiOw4{u`AC)f;?Y&pnFIT#<*~hevufi5t#&N~337E=`68-+oSC z14O@appJxtk&V`enAJhuDTUPv9HMl(-b$D!Ow%saax7c#@KuFNoAl2;f6#q;GWXk+ z2A{QcdE<&_ug4Kd5>=U1C9(u^QLn}29!+t%lkxkl@-z-KD{_clD@XOZo(uVCUs|v3 zIAB5Q?tR^!&39ai`7C`-#6CT;tzR#qv;RFyS^=F-DzsTan;f}ebKmbuHwqqb-`7>Q zAA115*@*zqytAgl4@an(M*ftc!?mp<`aW?9dvqY@c$1mavgC~SCe@N1!2}NifPZ1& zRXm&~6{H*;vXRdN;5Qko2G;VLx@9(+*q+=1(eE3twc7R(eKRUN1Ys8r{!EzpHE-8r zhzF&HSP({cPt6i`_D+`lec)}djBEK78o9XZf| zNy%8B<42=}!Jqq2zPM)?lLNp5S~G6N8qxRcx;UeG+^xv1Ds=<%b2Yq%s-!tqW9BcC zCjHn#Kf~279@P1qFcaKrBKjPu{;}D8dB#x^{CkcroTX%sG8ol^t^x4EZvhwRxKxCr z^AB%x2JC<2K+YZ`J9l7;5iZ^Euwfripa+AeN<(j`qxET^ZZ$urZztxQ9-QT3HDYdy zxxj;{msRxd_5psE%VCRmn~`QgPB8L=@h!(JTPZAc2GNY&4iF-gz1GIc0RkWh=}qX zI-s70;mz}%_YC(J+M%|uoKyv;#20)2L#bzAI+Wa-5_uaT{Q ziS}YJViepwha@+3?Y4o7_CDWYUH#_9kCn&ybzl9ceKsaZ0)v6s@q9;;7w%Va?Uzt# z6gXv`_CR&%@wLL!`hP}`U7u&kmeL>xT8lel)hUkCri?Z~`}HmdRv#~XdHWO?NHB1H zIZc^hzO6UtY|n4&BYB*BdiSp>V>_RJ1~#j)=C8=M8;w}A#bgv`FBXD!2$cSpSNhj2+Gl0Y{aA6$mzrh7jG}0Vob9S8KAgV+3_QBi literal 0 HcmV?d00001 diff --git a/pagesA/pages/expert/expert.js b/pagesA/pages/expert/expert.js index a57582b..2628932 100644 --- a/pagesA/pages/expert/expert.js +++ b/pagesA/pages/expert/expert.js @@ -1,16 +1,15 @@ import http from '../../../utils/api' - +const baseUr = require('../../../utils/baseUrl') Page({ data: { // 搜索关键词 searchKeyword: '', - + // 当前筛选条件 - currentFilter: 'all', - + currentFilter: '全部', + // 所有专家数据 - allExperts: [ - { + allExperts: [{ id: 1, name: '张建国', title: '畜牧学博士', @@ -155,54 +154,50 @@ Page({ avatar: '/pagesA/images/3.png' } ], - + baseUr: baseUr, + + formzj: { + isOnline: null, + realName: null, + expert: null, + expertiseArea: null + }, + // 筛选后的专家列表 filteredExperts: [], - + // 在线专家数量 onlineCount: 0, - + // 当前选中的专家 currentExpert: null, - + // 是否显示联系方式弹窗 showContactDialog: false }, onLoad() { - this.sortAndFilterExperts() this.getexpertsList() }, onShow() { - // 页面显示时随机更新一些专家的在线状态(模拟实时状态) - this.updateOnlineStatus(); + }, // 专家列表 - getexpertsList(){ - http.expertsList({ - data:{}, - success:res=>{ - console.log(111,res); - } - }) + getexpertsList() { + http.expertsList({ + data: this.data.formzj, + success: res => { + console.log(111, res); + this.setData({ + allExperts: res.rows + }) + } + }) }, - // 更新在线状态 - updateOnlineStatus() { - const experts = this.data.allExperts.map(expert => ({ - ...expert, - online: Math.random() > 0.4 // 60%的概率在线 - })); - - this.setData({ - allExperts: experts - }, () => { - this.sortAndFilterExperts(); - }); - }, // 处理搜索输入 onSearchInput(e) { @@ -223,81 +218,28 @@ Page({ // 更改筛选条件 changeFilter(e) { + console.log(2222, e); const filter = e.currentTarget.dataset.filter; this.setData({ currentFilter: filter }); - this.sortAndFilterExperts(); - }, - - // 排序和筛选专家 - sortAndFilterExperts() { - const { allExperts, searchKeyword, currentFilter } = this.data; - - let filtered = [...allExperts]; - - // 关键词搜索 - if (searchKeyword.trim()) { - const keyword = searchKeyword.toLowerCase(); - filtered = filtered.filter(expert => - expert.name.toLowerCase().includes(keyword) || - expert.expertise.toLowerCase().includes(keyword) || - expert.tags.some(tag => tag.toLowerCase().includes(keyword)) || - expert.institution.toLowerCase().includes(keyword) - ); + if (filter == '全部') { + this.data.formzj.isOnline = null + this.getexpertsList() + } else { + this.data.formzj.isOnline = filter + this.getexpertsList() } - - // 筛选条件 - switch (currentFilter) { - case 'online': - filtered = filtered.filter(expert => expert.online); - break; - case 'offline': - filtered = filtered.filter(expert => !expert.online); - break; - case 'senior': - filtered = filtered.filter(expert => expert.senior); - break; - case 'veterinary': - filtered = filtered.filter(expert => - expert.expertise.includes('病') || - expert.tags.some(tag => tag.includes('病') || tag.includes('医')) - ); - break; - } - - // 排序:在线优先 > 资深专家 > 经验丰富 > 解决率高 - filtered.sort((a, b) => { - // 在线状态优先 - if (a.online !== b.online) { - return a.online ? -1 : 1; - } - // 资深专家优先 - if (a.senior !== b.senior) { - return a.senior ? -1 : 1; - } - // 经验丰富优先 - if (a.experience !== b.experience) { - return b.experience - a.experience; - } - // 解决率高优先 - return (b.successRate || 0) - (a.successRate || 0); - }); - - // 计算在线人数 - const onlineCount = filtered.filter(expert => expert.online).length; - - this.setData({ - filteredExperts: filtered, - onlineCount: onlineCount - }); }, + // 显示专家联系方式 showContactInfo(e) { + console.log(234,e); const index = e.currentTarget.dataset.index; - const expert = this.data.filteredExperts[index]; - + const expert = this.data.allExperts[index]; + console.log(33333,expert); + this.setData({ currentExpert: expert, showContactDialog: true @@ -320,7 +262,7 @@ Page({ makePhoneCall(e) { const phone = e.currentTarget.dataset.phone; const cleanPhone = phone.replace(/-/g, ''); - + wx.showModal({ title: '拨打电话', content: `确定要拨打 ${phone} 吗?`, @@ -350,7 +292,7 @@ Page({ // 复制邮箱 copyEmail(e) { const email = e.currentTarget.dataset.email; - + wx.setClipboardData({ data: email, success: () => { @@ -382,12 +324,11 @@ Page({ // 开始咨询 startConsultation() { const expert = this.data.currentExpert; - + wx.showModal({ title: '咨询确认', - content: expert.online - ? `确定要立即咨询 ${expert.name} 专家吗?` - : `确定要预约咨询 ${expert.name} 专家吗?`, + content: expert.online ? + `确定要立即咨询 ${expert.name} 专家吗?` : `确定要预约咨询 ${expert.name} 专家吗?`, success: (res) => { if (res.confirm) { if (expert.online) { @@ -396,7 +337,7 @@ Page({ icon: 'loading', duration: 2000 }); - + setTimeout(() => { // 跳转一对一咨询专家 wx.navigateTo({ diff --git a/pagesA/pages/expert/expert.wxml b/pagesA/pages/expert/expert.wxml index aa1f18e..857f01f 100644 --- a/pagesA/pages/expert/expert.wxml +++ b/pagesA/pages/expert/expert.wxml @@ -54,29 +54,20 @@ - + 全部专家 {{allExperts.length}} - + 在线专家 {{onlineCount}} - + 离线专家 {{allExperts.length - onlineCount}} - - - 资深专家 - - - - - 兽医专家 - @@ -86,13 +77,13 @@ 专家列表 - 已为您找到 {{filteredExperts.length}} 位专家 + 已为您找到 {{allExperts.length}} 位专家 - + 暂无相关专家 换个关键词试试,或联系客服为您推荐 @@ -100,14 +91,14 @@ - + - - - {{item.online ? '在线' : '离线'}} + + + {{item.isOnline}} @@ -115,27 +106,27 @@ - {{item.name}} - {{item.title}} + {{item.realName}} + {{item.expert}} 擅长领域: - {{item.expertise}} + {{item.expertiseArea}} 从业经验: - {{item.experience}}年 + {{item.workExperience}} - - {{item.online ? '立即咨询' : '查看联系'}} + + {{item.isOnline=='在线' ? '立即咨询' : '查看联系'}} @@ -154,13 +145,13 @@ - {{currentExpert.name}} - {{currentExpert.title}} + {{currentExpert.realName}} + {{currentExpert.expert}} - + - {{currentExpert.online ? '在线可咨询' : '暂时离线'}} + {{currentExpert.isOnline=='在线' ? '在线可咨询' : '暂时离线'}} @@ -184,10 +175,10 @@ 联系电话 - {{currentExpert.phone}} + {{currentExpert.iphone}} 可直接拨打电话咨询 - diff --git a/pagesA/pages/expert/expert.wxss b/pagesA/pages/expert/expert.wxss index d87dcfa..b520d44 100644 --- a/pagesA/pages/expert/expert.wxss +++ b/pagesA/pages/expert/expert.wxss @@ -198,7 +198,7 @@ .filter-tag { display: inline-flex; align-items: center; - padding: 16rpx 28rpx; + padding: 16rpx 24rpx; margin-right: 20rpx; background: #f8faf9; border-radius: 30rpx; diff --git a/pagesA/pages/expertChat/expertChat.js b/pagesA/pages/expertChat/expertChat.js index dd9cb30..ab284fe 100644 --- a/pagesA/pages/expertChat/expertChat.js +++ b/pagesA/pages/expertChat/expertChat.js @@ -1,6 +1,4 @@ -// pages/consult/consult.js -// import http from '../../../utils/api' // 您的注释代码保留 - +// import http from '../../../utils/api' Page({ data: { // 专家信息 @@ -48,6 +46,7 @@ Page({ showDateDivider: true, todayDate: '', loading: false, + loadingMore: false, // 滚动相关 isScrolling: false, @@ -64,8 +63,11 @@ Page({ pageSize: 20, hasMore: true, - // 时间显示间隔(分钟) - timeInterval: 5 + // 时间显示间隔(分钟) - 微信默认为5分钟 + timeInterval: 5, + + // 用于存储最后一条显示时间的消息的时间戳 + lastShowTimeStamp: 0 }, onLoad: function(options) { @@ -258,6 +260,51 @@ Page({ // this.loadDefaultExpertInfo(expertId); // } // }); + + // 模拟数据 + setTimeout(() => { + const experts = [ + { + id: 1, + name: '张明专家', + title: '资深畜牧兽医', + expertise: '牛羊疾病防治', + avatar: '/images/avatars/expert1.png', + online: true, + phone: '13800138000' + }, + { + id: 2, + name: '李华专家', + title: '高级畜牧师', + expertise: '饲料营养', + avatar: '/images/avatars/expert2.png', + online: false, + phone: '13800138001' + }, + { + id: 3, + name: '王强专家', + title: '兽医专家', + expertise: '疾病防治', + avatar: '/images/avatars/expert3.png', + online: true, + phone: '13800138002' + } + ]; + + const expertInfo = experts.find(e => e.id == expertId) || experts[0]; + + this.setData({ + expertInfo, + loading: false + }); + + wx.hideLoading(); + + // 加载聊天记录 + this.loadChatHistory(); + }, 500); }, // 加载默认专家信息(当接口失败时使用) @@ -331,9 +378,17 @@ Page({ // const messages = res.data.list || []; // if (messages.length > 0) { - // // 处理消息时间显示 + // // 处理消息时间显示 - 使用完全修复的时间处理逻辑 // const processedMessages = this.processMessageTimes(messages); + // // 调试:查看处理后的消息 + // console.log('处理后的消息数据:', processedMessages.map(msg => ({ + // id: msg.id, + // showTime: msg.showTime, + // time: this.formatTime(msg.timestamp), + // timestamp: msg.timestamp + // }))); + // this.setData({ // messageList: processedMessages, // loading: false, @@ -359,6 +414,114 @@ Page({ // this.loadMockChatHistory(); // } // }); + + // 模拟数据 - 修复时间戳问题 + setTimeout(() => { + const now = Date.now(); + let mockMessages = []; + + if (page === 1) { + // 第一页数据 - 测试不同时间间隔的消息 + mockMessages = [ + { + id: 'msg-1', + sender: 'expert', + type: 'text', + content: '您好,我是张明专家,有什么可以帮您?', + timestamp: now - 10 * 60 * 1000, // 10分钟前 - 应该显示时间 + status: 'success' + }, + { + id: 'msg-2', + sender: 'user', + type: 'text', + content: '您好,我养的牛最近食欲不振,请问是什么原因?', + timestamp: now - 9 * 60 * 1000, // 9分钟前 - 不显示时间(与上条间隔1分钟) + status: 'success' + }, + { + id: 'msg-3', + sender: 'expert', + type: 'text', + content: '可能是饲料问题或环境变化引起的,请描述一下具体情况。', + timestamp: now - 7 * 60 * 1000, // 7分钟前 - 显示时间(与上条间隔2分钟,但与第一条间隔3分钟) + status: 'success' + }, + { + id: 'msg-4', + sender: 'user', + type: 'text', + content: '具体症状是拉稀,体温偏高,精神状态不好。', + timestamp: now - 2 * 60 * 1000, // 2分钟前 - 显示时间(与上条间隔5分钟) + status: 'success' + }, + { + id: 'msg-5', + sender: 'expert', + type: 'text', + content: '明白了,建议您调整饲料配方,添加一些益生菌。', + timestamp: now - 1 * 60 * 1000, // 1分钟前 - 不显示时间(与上条间隔1分钟) + status: 'success' + } + ]; + } else { + // 更多数据 + mockMessages = [ + { + id: 'msg-6', + sender: 'user', + type: 'text', + content: '之前喂的是玉米秸秆,需要换饲料吗?', + timestamp: now - 30 * 60 * 1000, // 30分钟前 + status: 'success' + }, + { + id: 'msg-7', + sender: 'expert', + type: 'text', + content: '可以尝试添加一些豆粕和麦麸,改善营养结构。', + timestamp: now - 25 * 60 * 1000, // 25分钟前 + status: 'success' + } + ]; + } + + if (mockMessages.length > 0) { + // 处理消息时间显示 - 使用完全修复的时间处理逻辑 + const processedMessages = this.processMessageTimes(mockMessages); + + // 调试:查看处理后的消息 + console.log('处理后的消息数据:', processedMessages.map(msg => ({ + id: msg.id, + showTime: msg.showTime, + time: this.formatTime(msg.timestamp), + timestamp: msg.timestamp, + sender: msg.sender + }))); + + let newMessageList = []; + if (page === 1) { + newMessageList = processedMessages; + } else { + newMessageList = [...processedMessages, ...this.data.messageList]; + } + + this.setData({ + messageList: newMessageList, + loading: false, + loadingMore: false, + hasMore: mockMessages.length >= pageSize + }, () => { + if (page === 1) { + // 滚动到底部 + this.scrollToBottom(true); + } + }); + } else { + // 如果没有历史记录,添加一条欢迎消息 + this.addWelcomeMessage(); + } + }, 800); }, // 加载模拟聊天记录(当接口失败时使用) @@ -371,42 +534,40 @@ Page({ sender: 'expert', type: 'text', content: '您好,我是张明专家,有什么可以帮您?', - timestamp: now - 3600000, // 1小时前 - showTime: true + timestamp: now - 10 * 60 * 1000, // 10分钟前 + status: 'success' }, { id: 'msg-2', sender: 'user', type: 'text', content: '您好,我养的牛最近食欲不振,请问是什么原因?', - timestamp: now - 1800000, // 30分钟前 - status: 'success', - showTime: false + timestamp: now - 8 * 60 * 1000, // 8分钟前 + status: 'success' }, { id: 'msg-3', sender: 'expert', type: 'text', content: '可能是饲料问题或环境变化引起的,请描述一下具体情况。', - timestamp: now - 1200000, // 20分钟前 - showTime: false + timestamp: now - 6 * 60 * 1000, // 6分钟前 + status: 'success' }, { id: 'msg-4', sender: 'user', type: 'text', content: '具体症状是...', - timestamp: now - 600000, // 10分钟前 - status: 'success', - showTime: true + timestamp: now - 4 * 60 * 1000, // 4分钟前 + status: 'success' }, { id: 'msg-5', sender: 'expert', type: 'text', content: '明白了,建议您调整饲料配方。', - timestamp: now - 300000, // 5分钟前 - showTime: false + timestamp: now - 2 * 60 * 1000, // 2分钟前 + status: 'success' } ]; @@ -430,11 +591,13 @@ Page({ type: 'text', content: `您好,我是${this.data.expertInfo.name},有什么可以帮您?`, timestamp: Date.now(), - showTime: true + status: 'success' }; + const processedMessage = this.processSingleMessageTime(welcomeMessage, []); + this.setData({ - messageList: [welcomeMessage], + messageList: [processedMessage], loading: false }, () => { // 滚动到底部 @@ -442,15 +605,15 @@ Page({ }); }, - // 处理消息时间显示 - 优化微信样式 + // 完全修复:处理消息时间显示逻辑(类似微信) processMessageTimes: function(messages) { if (!messages || messages.length === 0) return []; // 按时间排序(从早到晚) const sortedMessages = [...messages].sort((a, b) => a.timestamp - b.timestamp); - let lastShowTime = 0; const processedMessages = []; + let lastShowTime = null; // 最后一条显示时间消息的时间戳 for (let i = 0; i < sortedMessages.length; i++) { const msg = { ...sortedMessages[i] }; @@ -465,23 +628,62 @@ Page({ msg.showTime = true; lastShowTime = msg.timestamp; } else { - // 计算与上一条显示时间的时间差(分钟) + // 计算与最后一条显示时间的消息的时间差(分钟) const timeDiffMinutes = (msg.timestamp - lastShowTime) / (1000 * 60); - // 超过5分钟显示时间(微信默认5分钟) - msg.showTime = timeDiffMinutes >= this.data.timeInterval; - - if (msg.showTime) { + // 超过5分钟显示时间 + if (timeDiffMinutes >= this.data.timeInterval) { + msg.showTime = true; lastShowTime = msg.timestamp; + } else { + msg.showTime = false; } } processedMessages.push(msg); } + // 存储最后一条显示时间的消息的时间戳 + if (lastShowTime) { + this.setData({ lastShowTimeStamp: lastShowTime }); + } + return processedMessages; }, + // 处理单条消息的时间显示(添加新消息时调用) + processSingleMessageTime: function(message, messageList) { + const msg = { ...message }; + + // 确保时间戳是有效数字 + if (!msg.timestamp || isNaN(msg.timestamp) || msg.timestamp <= 0) { + msg.timestamp = Date.now(); + } + + if (messageList.length === 0) { + // 第一条消息 + msg.showTime = true; + this.setData({ lastShowTimeStamp: msg.timestamp }); + return msg; + } + + // 获取最后一条显示时间的消息 + const lastShowTime = this.data.lastShowTimeStamp; + + // 计算时间差(分钟) + const timeDiffMinutes = (msg.timestamp - lastShowTime) / (1000 * 60); + + // 超过5分钟显示时间 + if (timeDiffMinutes >= this.data.timeInterval) { + msg.showTime = true; + this.setData({ lastShowTimeStamp: msg.timestamp }); + } else { + msg.showTime = false; + } + + return msg; + }, + // 返回上一页 goBack: function() { wx.navigateBack(); @@ -555,11 +757,10 @@ Page({ type: 'text', content: content, timestamp: Date.now(), - status: 'sending', - showTime: this.shouldShowTime() + status: 'sending' }; - // 添加到消息列表 + // 处理时间显示并添加到消息列表 this.addMessageToList(newMessage); // 清空输入框 @@ -605,46 +806,27 @@ Page({ // }); // } // }); - }, - - // 判断是否显示时间(基于时间间隔) - shouldShowTime: function() { - const { messageList, timeInterval } = this.data; - if (messageList.length === 0) return true; - - const lastMessage = messageList[messageList.length - 1]; - - // 如果上一条消息显示了时间,检查时间间隔 - if (lastMessage.showTime) { - const timeDiff = Date.now() - lastMessage.timestamp; - const timeDiffMinutes = timeDiff / (1000 * 60); - return timeDiffMinutes >= timeInterval; - } - return true; + // 模拟发送成功 + setTimeout(() => { + this.updateMessageStatus(newMessage.id, 'success'); + + // 模拟专家回复 + setTimeout(() => { + this.receiveExpertReply(); + }, 1000 + Math.random() * 1000); + }, 500); }, // 添加消息到列表 addMessageToList: function(message) { - const { messageList, timeInterval } = this.data; - - // 确保时间戳有效 - if (!message.timestamp || isNaN(message.timestamp) || message.timestamp <= 0) { - message.timestamp = Date.now(); - } + const { messageList } = this.data; - if (messageList.length > 0) { - const lastMessage = messageList[messageList.length - 1]; - const timeDiff = message.timestamp - lastMessage.timestamp; - const timeDiffMinutes = timeDiff / (1000 * 60); - - // 根据时间间隔判断是否显示时间 - message.showTime = timeDiffMinutes >= timeInterval; - } else { - message.showTime = true; - } + // 处理消息时间显示 + const processedMessage = this.processSingleMessageTime(message, messageList); - messageList.push(message); + // 添加到列表 + messageList.push(processedMessage); this.setData({ messageList @@ -685,7 +867,7 @@ Page({ type: 'text', content: randomReply, timestamp: Date.now(), - showTime: this.shouldShowTime() + status: 'success' }; this.addMessageToList(newMessage); @@ -735,22 +917,27 @@ Page({ }, 200); // 检查是否需要加载更多 - if (scrollTop <= 100 && !this.data.loading && this.data.hasMore) { + if (scrollTop <= 100 && !this.data.loadingMore && this.data.hasMore && this.data.page > 1) { this.loadMoreMessages(); } }, // 加载更多消息 loadMoreMessages: function() { - if (this.data.loading || !this.data.hasMore) return; + if (this.data.loadingMore || !this.data.hasMore) return; this.setData({ - page: this.data.page + 1, - loading: true + loadingMore: true }); // 加载更多聊天记录 - this.loadChatHistory(); + setTimeout(() => { + this.setData({ + page: this.data.page + 1 + }, () => { + this.loadChatHistory(); + }); + }, 500); }, // 滚动到底部 @@ -761,9 +948,11 @@ Page({ scrollAnimate: animate }, () => { // 设置一个足够大的值确保滚动到底部 - this.setData({ - scrollTop: 999999 - }); + setTimeout(() => { + this.setData({ + scrollTop: 999999 + }); + }, 100); }); }, @@ -818,32 +1007,11 @@ Page({ }); }, - // 拍照 - takePhoto: function() { - this.hideMediaActionSheet(); - - wx.chooseImage({ - count: 1, - sizeType: ['compressed'], - sourceType: ['camera'], - success: (res) => { - console.log('拍照成功:', res.tempFilePaths); - this.uploadImages(res.tempFilePaths); - }, - fail: (err) => { - console.error('拍照失败:', err); - wx.showToast({ - title: '拍照失败', - icon: 'none' - }); - } - }); - }, + // 选择视频 chooseVideo: function() { this.hideMediaActionSheet(); - wx.chooseVideo({ sourceType: ['album'], compressed: true, @@ -862,11 +1030,6 @@ Page({ }); }, - // 录制语音 - recordAudio: function() { - this.hideMediaActionSheet(); - this.startVoiceRecord(); - }, // 选择文件 chooseFile: function() { @@ -924,8 +1087,7 @@ Page({ extension: extension, timestamp: Date.now(), status: 'uploading', - progress: 0, - showTime: this.shouldShowTime() + progress: 0 }; this.addMessageToList(message); @@ -997,7 +1159,7 @@ Page({ type: 'text', content: randomReply, timestamp: Date.now(), - showTime: this.shouldShowTime() + status: 'success' }; this.addMessageToList(newMessage); @@ -1069,8 +1231,7 @@ Page({ content: tempFilePath, duration: duration, timestamp: Date.now(), - status: 'sending', - showTime: this.shouldShowTime() + status: 'sending' }; this.addMessageToList(message); @@ -1087,7 +1248,7 @@ Page({ type: 'text', content: '语音收到了,我会仔细听取分析。', timestamp: Date.now(), - showTime: this.shouldShowTime() + status: 'success' }; this.addMessageToList(reply); }, 1500); @@ -1151,71 +1312,35 @@ Page({ }); }, - // 优化:微信样式时间格式化 + // 修复:时间格式化函数 - 确保正确显示 formatTime: function(timestamp) { + // 调试日志 + console.log('formatTime 接收到的timestamp:', timestamp, '类型:', typeof timestamp); + if (!timestamp || timestamp <= 0) { console.warn('无效的时间戳:', timestamp); - return ''; + return '未知时间'; } const timeNum = Number(timestamp); if (isNaN(timeNum)) { - return ''; + console.warn('时间戳不是有效数字:', timestamp); + return '未知时间'; } const date = new Date(timeNum); if (isNaN(date.getTime())) { - return ''; + console.warn('无法创建有效日期对象:', timeNum); + return '未知时间'; } - const now = new Date(); - const today = new Date(now.getFullYear(), now.getMonth(), now.getDate()); - const yesterday = new Date(today.getTime() - 86400000); - - const msgDate = new Date(date.getFullYear(), date.getMonth(), date.getDate()); - + // 只显示小时和分钟 const hours = date.getHours().toString().padStart(2, '0'); const minutes = date.getMinutes().toString().padStart(2, '0'); - const timeStr = `${hours}:${minutes}`; - - // 今天 - if (msgDate.getTime() === today.getTime()) { - // 小于1分钟显示"刚刚" - const diffMinutes = (now.getTime() - date.getTime()) / (1000 * 60); - if (diffMinutes < 1) { - return '刚刚'; - } - // 小于1小时显示"X分钟前" - else if (diffMinutes < 60) { - return `${Math.floor(diffMinutes)}分钟前`; - } - // 今天超过1小时显示时间 - else { - return timeStr; - } - } - // 昨天 - else if (msgDate.getTime() === yesterday.getTime()) { - return `昨天 ${timeStr}`; - } - // 本周内(7天内) - else { - const diffDays = (today.getTime() - msgDate.getTime()) / (1000 * 60 * 60 * 24); - if (diffDays < 7) { - const weekDays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']; - return `${weekDays[date.getDay()]} ${timeStr}`; - } - // 今年内 - else if (date.getFullYear() === now.getFullYear()) { - const month = date.getMonth() + 1; - const day = date.getDate(); - return `${month}月${day}日 ${timeStr}`; - } - // 更早 - else { - return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')} ${timeStr}`; - } - } + + const result = `${hours}:${minutes}`; + console.log('formatTime 结果:', result); + return result; }, // 格式化文件大小 diff --git a/pagesA/pages/expertChat/expertChat.wxml b/pagesA/pages/expertChat/expertChat.wxml index e0dde15..c8f2b5d 100644 --- a/pagesA/pages/expertChat/expertChat.wxml +++ b/pagesA/pages/expertChat/expertChat.wxml @@ -1,14 +1,7 @@ - - - - - {{expertInfo.name}} @@ -18,12 +11,6 @@ - - - - @@ -45,24 +32,20 @@ - - - - {{formatTime(item.timestamp)}} - - - + + + + {{item.content}} - @@ -74,7 +57,6 @@ bindtap="previewImage" data-url="{{item.content}}" > - @@ -89,7 +71,6 @@ - @@ -103,7 +84,6 @@ {{item.duration || 0}}'' - @@ -115,18 +95,19 @@ {{item.fileName}} {{formatFileSize(item.fileSize)}} - - + - + + + + {{item.content}} - @@ -143,7 +124,6 @@ {{item.progress}}% - @@ -163,7 +143,6 @@ {{item.progress}}% - @@ -177,7 +156,6 @@ {{item.duration || 0}}'' - @@ -194,16 +172,18 @@ {{item.progress}}% - - + + + + 加载中... @@ -221,36 +201,35 @@ - + + + - + + + + + - - - + + + @@ -279,17 +258,17 @@ - + --> - + + + @@ -298,46 +277,32 @@ 发送内容 - + + + - - - + - - - + - + diff --git a/pagesA/pages/expertChat/expertChat.wxss b/pagesA/pages/expertChat/expertChat.wxss index b7fe11d..31b5b40 100644 --- a/pagesA/pages/expertChat/expertChat.wxss +++ b/pagesA/pages/expertChat/expertChat.wxss @@ -1,4 +1,3 @@ -/* pages/consult/consult.wxss */ /* 页面整体样式 */ .consult-page { @@ -7,16 +6,15 @@ background: #f5f5f5; display: flex; flex-direction: column; - font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', Arial, sans-serif; } -/* ========== 头部样式 ========== */ +/* 头部样式 */ .consult-header { background: #ffffff; - border-bottom: 1px solid #e5e5e5; + border-bottom: 1rpx solid #e5e5e5; position: relative; z-index: 1000; - box-shadow: 0 1px 6px rgba(0, 0, 0, 0.05); + box-shadow: 0 1rpx 6rpx rgba(0, 0, 0, 0.05); } .header-content { @@ -26,9 +24,6 @@ height: 96rpx; } -.header-left { - width: 80rpx; -} .header-center { flex: 1; @@ -36,30 +31,8 @@ justify-content: center; } -.header-right { - width: 80rpx; -} - -.back-btn { - width: 72rpx; - height: 72rpx; - border: none; - background: transparent; - padding: 0; - margin: 0; - line-height: 1; - border-radius: 50%; - transition: background-color 0.2s; -} -.back-btn:active { - background-color: rgba(0, 0, 0, 0.05); -} -.back-icon { - width: 36rpx; - height: 36rpx; -} .expert-info { display: flex; @@ -115,31 +88,12 @@ color: #666666; } -.header-action-btn { - width: 72rpx; - height: 72rpx; - border: none; - background: transparent; - padding: 0; - margin: 0; - line-height: 1; - border-radius: 50%; - transition: background-color 0.2s; -} - -.header-action-btn:active { - background-color: rgba(0, 0, 0, 0.05); -} -.header-action-icon { - width: 40rpx; - height: 40rpx; -} -/* ========== 聊天容器 ========== */ +/* 聊天容器 */ .chat-container { flex: 1; - padding: 20rpx 0 0; + padding: 20rpx 0; background: #f5f5f5; overflow-y: auto; position: relative; @@ -162,36 +116,9 @@ background-color: #d8d8d8; } -/* 微信样式时间分隔 */ -.time-divider { - display: flex; - justify-content: center; - align-items: center; - margin: 40rpx 0; - padding: 0 30rpx; -} - -.time-line { - flex: 1; - height: 1rpx; - background: rgba(0, 0, 0, 0.1); - margin: 0 20rpx; -} -.time-text { - display: inline-block; - padding: 4rpx 16rpx; - border-radius: 20rpx; - font-size: 22rpx; - color: #999999; - background-color: rgba(0, 0, 0, 0.05); - line-height: 1.5; - text-align: center; - word-break: keep-all; - white-space: nowrap; -} -/* 消息项 - 修复对齐 */ +/* 消息项 */ .message-item { display: flex; margin-bottom: 24rpx; @@ -221,7 +148,7 @@ justify-content: flex-end; } -/* 头像 - 修复对齐 */ +/* 头像 */ .message-avatar { width: 80rpx; height: 80rpx; @@ -248,12 +175,13 @@ object-fit: cover; } -/* 消息内容包装器 */ +/* 消息内容包装器 */ .message-content-wrapper { max-width: 480rpx; position: relative; display: flex; flex-direction: column; + z-index: 2; } .message-left .message-content-wrapper { @@ -264,16 +192,38 @@ align-items: flex-end; } +/* 气泡箭头*/ +.message-arrow { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 12rpx; + top: 30rpx; /* 固定在头像中间位置 (80rpx/2 = 40rpx) */ + z-index: 1; +} + +/* 左侧箭头(专家) */ +.arrow-left { + left: -24rpx; + border-color: transparent #ffffff transparent transparent; +} + +/* 右侧箭头(用户) */ +.arrow-right { + right: -24rpx; + border-color: transparent transparent transparent #95ec69; +} + /* 消息气泡通用样式 */ .message-bubble { position: relative; padding: 16rpx 20rpx; word-break: break-word; box-sizing: border-box; - min-height: 80rpx; /* 与头像高度一致 */ + min-height: 60rpx; display: flex; align-items: center; - justify-content: center; } /* 左侧气泡(专家) */ @@ -292,28 +242,6 @@ box-shadow: 0 2rpx 8rpx rgba(149, 236, 105, 0.2); } -/* 气泡箭头 - 固定在头像中间位置 */ -.message-arrow { - position: absolute; - width: 0; - height: 0; - border-style: solid; - border-width: 12rpx; - top: 50%; - margin-top: -12rpx; /* 箭头高度的一半 */ - z-index: 2; -} - -.arrow-left { - left: -24rpx; - border-color: transparent #ffffff transparent transparent; -} - -.arrow-right { - right: -24rpx; - border-color: transparent transparent transparent #95ec69; -} - /* 文本消息 */ .message-text { font-size: 32rpx; @@ -332,7 +260,7 @@ overflow: hidden; box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05); background: #ffffff; - min-height: 80rpx; /* 与头像高度一致 */ + min-height: 60rpx; display: flex; align-items: center; justify-content: center; @@ -386,7 +314,7 @@ padding: 20rpx; display: flex; align-items: center; - min-height: 80rpx; + min-height: 60rpx; } .audio-icon-left, @@ -447,7 +375,7 @@ padding: 20rpx; display: flex; align-items: center; - min-height: 80rpx; + min-height: 60rpx; } .file-icon-box { @@ -527,6 +455,11 @@ font-weight: 600; } +/* 底部留白区域 */ +.chat-bottom-space { + height: 40rpx; +} + /* 加载更多提示 */ .load-more-tip { display: flex; @@ -559,7 +492,7 @@ color: #999999; } -/* ========== 输入区域 ========== */ +/* 输入区域 */ .input-section { background: #ffffff; border-top: 1rpx solid #e5e5e5; @@ -589,26 +522,15 @@ .voice-input-btn { width: 80rpx; height: 80rpx; - border-radius: 50%; - border: none; - background: transparent; display: flex; align-items: center; justify-content: center; transition: all 0.2s; - padding: 0; - margin: 0; - line-height: 1; - flex-shrink: 0; -} - -.voice-input-btn:active { - background: rgba(0, 0, 0, 0.05); } .voice-btn-icon { - width: 40rpx; - height: 40rpx; + width: 70rpx; + height: 70rpx; } /* 输入框包装器 */ @@ -625,13 +547,13 @@ min-width: 0; } -/* 语音输入模式下的输入框包装器 */ +/* 语音输入模式下的输入框 */ .voice-input-panel .input-wrapper { padding: 0; background: #f5f5f5; } -/* 文字输入模式下的输入框包装器 */ +/* 文字输入模式下的输入框 */ .text-input-panel .input-wrapper { padding: 0 30rpx; } @@ -644,27 +566,18 @@ .voice-record-btn { width: 100%; height: 100%; - background: transparent; - border: none; border-radius: 40rpx; display: flex; flex-direction: column; align-items: center; justify-content: center; transition: all 0.2s; - padding: 0; - margin: 0; } .voice-record-btn:active { background: #e0e0e0; } -.mic-icon { - width: 36rpx; - height: 36rpx; - margin-bottom: 6rpx; -} .voice-tip { font-size: 24rpx; @@ -683,7 +596,7 @@ .input-placeholder { color: #999999; - font-size: 30rpx; + font-size: 24rpx; } .input-actions { @@ -738,8 +651,8 @@ } .more-icon { - width: 36rpx; - height: 36rpx; + width: 70rpx; + height: 70rpx; } /* 发送按钮 */ @@ -770,7 +683,7 @@ font-weight: 500; } -/* ========== 多媒体选择面板 ========== */ +/* 多媒体选择面板 */ .media-action-sheet { position: fixed; top: 0; @@ -787,9 +700,9 @@ .media-sheet-content { width: 100%; - background: #ffffff; + background: #F7F7F7; border-radius: 40rpx 40rpx 0 0; - padding: 40rpx 30rpx calc(80rpx + env(safe-area-inset-bottom)); + padding: 40rpx 30rpx calc(10rpx + env(safe-area-inset-bottom)); animation: slideUp 0.3s ease; box-sizing: border-box; } @@ -808,7 +721,8 @@ align-items: center; justify-content: space-between; margin-bottom: 40rpx; - padding: 0 10rpx; + padding: 0 10rpx 20rpx; + border-bottom: 1px solid #E4E4E4; } .sheet-title { @@ -818,22 +732,14 @@ } .close-sheet-btn { - width: 60rpx; - height: 60rpx; - border-radius: 50%; - border: none; - background: #f5f5f5; display: flex; align-items: center; justify-content: center; - padding: 0; - margin: 0; - line-height: 1; } .close-sheet-btn image { - width: 24rpx; - height: 24rpx; + width: 60rpx; + height: 60rpx; } .media-options-grid { @@ -863,31 +769,13 @@ justify-content: center; margin-bottom: 16rpx; transition: transform 0.2s; + background-color: #fff; } .media-option:active .option-icon-box { transform: scale(0.95); } -.photo-icon { - background: linear-gradient(135deg, #e3f2fd 0%, #bbdefb 100%); -} - -.camera-icon { - background: linear-gradient(135deg, #f3e5f5 0%, #e1bee7 100%); -} - -.video-icon { - background: linear-gradient(135deg, #e8f5e9 0%, #c8e6c9 100%); -} - -.audio-icon { - background: linear-gradient(135deg, #fff3e0 0%, #ffe0b2 100%); -} - -.file-icon { - background: linear-gradient(135deg, #f5f5f5 0%, #e0e0e0 100%); -} .option-icon-box image { width: 60rpx; @@ -908,7 +796,7 @@ color: #999999; } -/* ========== 录音模态框 ========== */ +/* 录音模态框 */ .recording-modal { position: fixed; top: 0; diff --git a/project.config.json b/project.config.json index 93802f9..6ae1375 100644 --- a/project.config.json +++ b/project.config.json @@ -1,5 +1,5 @@ { - "appid": "wxb5becc8d6d8123a6", + "appid": "wx9bf7f4e81a1b2d6b", "compileType": "miniprogram", "libVersion": "3.13.0", "packOptions": { diff --git a/utils/baseUrl.js b/utils/baseUrl.js index 0011836..77f7221 100644 --- a/utils/baseUrl.js +++ b/utils/baseUrl.js @@ -1,4 +1,4 @@ -// var baseUrl = 'https://wx.chenhaitech.com/guoziwei-prod-api' +// var baseUrl = 'https://wx.chenhaitech.com/ymtx-prod-api' var baseUrl = 'http://192.168.101.109:8080' // var baseUrl = 'http://192.168.101.111:8081' module.exports = baseUrl