From c1d214f87ebfa73895e5c7bc9476a9e631e62cc0 Mon Sep 17 00:00:00 2001 From: ZhaoYang <565837861@qq.com> Date: Wed, 11 Mar 2026 18:46:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=BD=E5=8C=BB=E7=AB=AF=E5=92=A8=E8=AF=A2?= =?UTF-8?q?=E5=88=97=E8=A1=A8=EF=BC=8C=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.json | 4 +- pages/images/kzt.png | Bin 0 -> 8661 bytes pages/personal/personal.js | 16 +- pagesA/images/add.png | Bin 0 -> 4458 bytes pagesA/images/cuo.png | Bin 0 -> 4686 bytes pagesA/images/duig.png | Bin 0 -> 2599 bytes pagesA/images/ps.png | Bin 0 -> 3372 bytes pagesA/images/zp.png | Bin 0 -> 2746 bytes pagesA/pages/advisory/advisory.js | 27 +- .../pages/askingSyDetails/askingSyDetails.js | 1 - pagesA/pages/expertChat/expertChat.js | 534 ++++++++++++++ pagesA/pages/expertChat/expertChat.json | 4 + pagesA/pages/expertChat/expertChat.wxml | 280 +++++++ pagesA/pages/expertChat/expertChat.wxss | 685 ++++++++++++++++++ .../serviceEvaluation/serviceEvaluation.js | 127 ++++ .../serviceEvaluation/serviceEvaluation.json | 4 + .../serviceEvaluation/serviceEvaluation.wxml | 53 ++ .../serviceEvaluation/serviceEvaluation.wxss | 146 ++++ pagesB/pages/publishAdd/publishAdd.js | 20 +- pagesB/pages/wzDetails/wzDetails.wxml | 2 +- project.private.config.json | 2 +- utils/api.js | 12 +- 22 files changed, 1871 insertions(+), 46 deletions(-) create mode 100644 pages/images/kzt.png create mode 100644 pagesA/images/add.png create mode 100644 pagesA/images/cuo.png create mode 100644 pagesA/images/duig.png create mode 100644 pagesA/images/ps.png create mode 100644 pagesA/images/zp.png create mode 100644 pagesA/pages/expertChat/expertChat.js create mode 100644 pagesA/pages/expertChat/expertChat.json create mode 100644 pagesA/pages/expertChat/expertChat.wxml create mode 100644 pagesA/pages/expertChat/expertChat.wxss create mode 100644 pagesA/pages/serviceEvaluation/serviceEvaluation.js create mode 100644 pagesA/pages/serviceEvaluation/serviceEvaluation.json create mode 100644 pagesA/pages/serviceEvaluation/serviceEvaluation.wxml create mode 100644 pagesA/pages/serviceEvaluation/serviceEvaluation.wxss diff --git a/app.json b/app.json index d9d1bba..215bdd4 100644 --- a/app.json +++ b/app.json @@ -15,7 +15,9 @@ "pages/advisory/advisory", "pages/releaseSuffer/releaseSuffer", "pages/precept/precept", - "pages/attestation/attestation" + "pages/attestation/attestation", + "pages/serviceEvaluation/serviceEvaluation", + "pages/expertChat/expertChat" ] }, { diff --git a/pages/images/kzt.png b/pages/images/kzt.png new file mode 100644 index 0000000000000000000000000000000000000000..39886b60a44d93598fa425ca4e517b5d047c924b GIT binary patch literal 8661 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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/duig.png b/pagesA/images/duig.png new file mode 100644 index 0000000000000000000000000000000000000000..41de07fc214b05f1aa9886e9cd563dc9c7b498e5 GIT binary patch literal 2599 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 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/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/advisory/advisory.js b/pagesA/pages/advisory/advisory.js index 2858aba..1bdf7a6 100644 --- a/pagesA/pages/advisory/advisory.js +++ b/pagesA/pages/advisory/advisory.js @@ -118,28 +118,11 @@ Page({ // 处理点击申请项 handleApply(e) { - const { id, user } = e.currentTarget.dataset; - wx.showActionSheet({ - itemList: ['接受并回复', '标记为已读', '稍后处理'], - success: (res) => { - if (res.tapIndex === 0) { - wx.showToast({ title: '已接受申请', icon: 'success' }); - // 模拟更新状态 - const newList = this.data.applyList.map(item => - item.id === id ? {...item, status: 'accepted'} : item - ); - this.setData({ applyList: newList }); - } else if (res.tapIndex === 1) { - const newList = this.data.applyList.map(item => - item.id === id ? {...item, unreadCount: 0} : item - ); - this.setData({ applyList: newList }); - wx.showToast({ title: '已标记已读', icon: 'none' }); - } else { - wx.showToast({ title: '已稍后处理', icon: 'none' }); - } - } - }); + console.log(111,e); + const id = e.currentTarget.dataset.id + wx.navigateTo({ + url: `/pagesA/pages/expertChat/expertChat?id=${id}`, + }) }, diff --git a/pagesA/pages/askingSyDetails/askingSyDetails.js b/pagesA/pages/askingSyDetails/askingSyDetails.js index 2594584..ad874a9 100644 --- a/pagesA/pages/askingSyDetails/askingSyDetails.js +++ b/pagesA/pages/askingSyDetails/askingSyDetails.js @@ -1,4 +1,3 @@ -// 第一个页面的完整JS代码 - pages/diagnosisDetail/diagnosisDetail.js import http from '../../../utils/api' const baseUrl = require('../../../utils/baseUrl') diff --git a/pagesA/pages/expertChat/expertChat.js b/pagesA/pages/expertChat/expertChat.js new file mode 100644 index 0000000..742ccab --- /dev/null +++ b/pagesA/pages/expertChat/expertChat.js @@ -0,0 +1,534 @@ +// 专家端聊天页面 - 纯模拟数据,无真实接口 +Page({ + data: { + // 专家信息 + expertInfo: { + id: 'expert_001', + name: '张医生', + avatar: '/pages/images/tx.png' + }, + expertAvatar: '/pages/images/tx.png', + + // 对话信息 + conversation: { + userId: 'user_001', + userName: '李华', + userAvatar: '/pages/images/tx.png' + }, + + // 在线状态 + onlineStatus: true, + + // 消息列表 + messageList: [], + scrollTop: 0, + scrollAnimate: true, + + // 输入相关 + inputValue: '', + inputFocus: false, + + // 多媒体面板 + showMediaSheet: false, + + + // 页面状态 + loadingMore: false, + hasMore: true, + page: 1, + + // 模拟数据 + mockMessages: [ + { + id: 'msg_1', + isMe: false, + type: 'text', + content: '医生您好,我想咨询一下皮肤问题', + timestamp: Date.now() - 3600000, + status: 'success', + avatar: '/pages/images/tx.png' + }, + { + id: 'msg_2', + isMe: true, + type: 'text', + content: '您好,请描述一下您的具体症状', + timestamp: Date.now() - 3500000, + status: 'success', + avatar: '/pages/images/tx.png' + }, + { + id: 'msg_3', + isMe: false, + type: 'text', + content: '脸上起了很多小红点,有点痒', + timestamp: Date.now() - 3400000, + status: 'success', + avatar: '/pages/images/tx.png' + }, + { + id: 'msg_4', + isMe: false, + type: 'image', + content: 'https://picsum.photos/200/200?random=1', + timestamp: Date.now() - 3300000, + status: 'success', + avatar: '/pages/images/tx.png' + }, + { + id: 'msg_5', + isMe: true, + type: 'text', + content: '看起来像是过敏反应,最近有接触什么新的东西吗?', + timestamp: Date.now() - 3200000, + status: 'success', + avatar: '/pages/images/tx.png' + } + ], + + // 定时器 + typingTimer: null, + mockUserTimer: null + }, + + onLoad: function(options) { + console.log('专家端聊天页面加载', options); + + // 获取传递的参数 + if (options.userId) { + this.setData({ + 'conversation.userId': options.userId, + 'conversation.userName': options.userName || '用户' + }); + } + + // 加载模拟消息 + this.loadMockMessages(); + + // 模拟用户在线状态变化 + this.simulateOnlineStatus(); + + // 模拟用户发送消息 + this.startMockUserTyping(); + }, + + onShow: function() { + // 滚动到底部 + setTimeout(() => { + this.scrollToBottom(false); + }, 200); + }, + + onUnload: function() { + // 清理定时器 + if (this.data.mockUserTimer) { + clearInterval(this.data.mockUserTimer); + } + if (this.data.typingTimer) { + clearTimeout(this.data.typingTimer); + } + }, + + // 返回上一页 + goBack: function() { + wx.navigateBack({ + delta: 1 + }); + }, + + + + // 加载模拟消息 + loadMockMessages: function() { + // 处理消息时间显示 + const messages = this.processMessageTimes(this.data.mockMessages); + + this.setData({ + messageList: messages, + hasMore: false + }); + }, + + // 加载更多消息(模拟) + loadMoreMessages: function() { + if (this.data.loadingMore || !this.data.hasMore) return; + + this.setData({ loadingMore: true }); + + // 模拟网络延迟 + setTimeout(() => { + // 模拟更早的消息 + const olderMessages = [ + { + id: 'old_' + Date.now(), + isMe: false, + type: 'text', + content: '之前也出现过类似情况', + timestamp: Date.now() - 86400000, + status: 'success', + avatar: '/pages/images/tx.png' + }, + { + id: 'old_' + (Date.now() + 1), + isMe: true, + type: 'text', + content: '那当时是怎么处理的呢?', + timestamp: Date.now() - 86000000, + status: 'success', + avatar: '/pages/images/tx.png' + } + ]; + + const processedOld = this.processMessageTimes(olderMessages); + const newList = [...processedOld, ...this.data.messageList]; + + this.setData({ + messageList: newList, + loadingMore: false, + hasMore: false // 模拟没有更多了 + }); + + // 调整滚动位置 + setTimeout(() => { + this.setData({ + scrollAnimate: false, + scrollTop: 300 + }, () => { + setTimeout(() => { + this.setData({ scrollAnimate: true }); + }, 100); + }); + }, 50); + }, 800); + }, + + // 模拟用户在线状态变化 + simulateOnlineStatus: function() { + setInterval(() => { + // 随机改变在线状态(模拟) + const random = Math.random(); + this.setData({ + onlineStatus: random > 0.3 // 70%时间在线 + }); + }, 30000); + }, + + // 模拟用户正在输入并发送消息 + startMockUserTyping: function() { + // 每45-90秒模拟用户发送一条消息 + const timer = setInterval(() => { + // 只有在线时才发送 + if (this.data.onlineStatus) { + this.simulateUserMessage(); + } + }, Math.random() * 45000 + 45000); // 45-90秒 + + this.setData({ mockUserTimer: timer }); + }, + + // 模拟用户发送消息 + simulateUserMessage: function() { + const messages = [ + '好的,我明白了', + '谢谢医生!', + '需要用什么药吗?', + '大概多久能好?', + '有没有什么需要注意的?', + '好的,我试试看', + '明白了,非常感谢!' + ]; + + const randomMsg = messages[Math.floor(Math.random() * messages.length)]; + + const newMsg = { + id: 'user_' + Date.now() + Math.random(), + isMe: false, + type: 'text', + content: randomMsg, + timestamp: Date.now(), + status: 'success', + avatar: this.data.conversation.userAvatar || '/pages/images/tx.png' + }; + + this.addMessageToList(newMsg); + + // 震动提示(可选) + wx.vibrateShort({ type: 'light' }); + }, + + // 发送文本消息 + sendTextMessage: function() { + const content = this.data.inputValue.trim(); + if (!content) return; + + const messageId = 'msg_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9); + + // 创建本地消息 + const newMessage = { + id: messageId, + isMe: true, + type: 'text', + content: content, + timestamp: Date.now(), + status: 'sending', + avatar: this.data.expertAvatar + }; + + // 添加到列表 + this.addMessageToList(newMessage); + + // 清空输入框 + this.setData({ inputValue: '' }); + + // 模拟发送延迟 + setTimeout(() => { + this.updateMessageStatus(messageId, 'success'); + }, 500); + }, + + // 添加消息到列表 + addMessageToList: function(message) { + const { messageList } = this.data; + + // 新消息添加到末尾 + messageList.push(message); + + // 重新处理时间显示 + const processedMessages = this.processMessageTimes(messageList); + + this.setData({ + messageList: processedMessages + }, () => { + this.scrollToBottom(true); + }); + }, + + // 更新消息状态 + updateMessageStatus: function(messageId, status) { + const { messageList } = this.data; + const index = messageList.findIndex(msg => msg.id === messageId); + + if (index !== -1) { + messageList[index].status = status; + this.setData({ messageList }); + } + }, + + // 重试发送 + retrySend: function(e) { + const messageId = e.currentTarget.dataset.id; + const { messageList } = this.data; + const msg = messageList.find(m => m.id === messageId); + + if (msg) { + msg.status = 'sending'; + this.setData({ messageList }); + + setTimeout(() => { + msg.status = 'success'; + this.setData({ messageList }); + }, 500); + } + }, + + // 处理消息时间显示 + processMessageTimes: function(messages) { + if (!messages || messages.length === 0) return []; + + const timeInterval = 5; // 5分钟间隔显示时间 + + return messages.map((msg, index) => { + const showTime = index === 0 || + (msg.timestamp - messages[index - 1].timestamp) > timeInterval * 60 * 1000; + + return { + ...msg, + showTime + }; + }); + }, + + // 格式化时间 + formatTime: function(timestamp) { + if (!timestamp) return ''; + + const date = new Date(Number(timestamp)); + const hours = date.getHours().toString().padStart(2, '0'); + const minutes = date.getMinutes().toString().padStart(2, '0'); + return `${hours}:${minutes}`; + }, + + // 格式化文件大小 + formatFileSize: function(bytes) { + if (!bytes || bytes === 0) return '0B'; + + const units = ['B', 'KB', 'MB', 'GB']; + let size = bytes; + let unitIndex = 0; + + while (size >= 1024 && unitIndex < units.length - 1) { + size /= 1024; + unitIndex++; + } + + return size.toFixed(1) + units[unitIndex]; + }, + + // 输入处理 + onInput: function(e) { + this.setData({ inputValue: e.detail.value }); + }, + + // 输入框获得焦点 + onInputFocus: function() { + this.setData({ inputFocus: true }, () => { + setTimeout(() => { + this.scrollToBottom(true); + }, 200); + }); + }, + + // 输入框失去焦点 + onInputBlur: function() { + this.setData({ inputFocus: false }); + }, + + // 清除输入 + clearInput: function() { + this.setData({ + inputValue: '', + inputFocus: true + }); + }, + + // 滚动事件 + onScroll: function(e) { + const scrollTop = e.detail.scrollTop; + this.setData({ lastScrollTop: scrollTop }); + + // 滚动到顶部加载更多 + if (scrollTop <= 30 && !this.data.loadingMore && this.data.hasMore) { + this.loadMoreMessages(); + } + }, + + // 滚动到底部 + scrollToBottom: function(animate = true) { + this.setData({ + scrollAnimate: animate + }, () => { + setTimeout(() => { + this.setData({ scrollTop: 999999 }); + }, 50); + }); + }, + + // 显示多媒体选择面板 + showMediaActionSheet: function() { + this.setData({ + showMediaSheet: true, + inputFocus: false + }); + }, + + // 隐藏多媒体选择面板 + hideMediaActionSheet: function() { + this.setData({ showMediaSheet: false }); + }, + + // 选择图片(模拟) + chooseImage: function() { + this.hideMediaActionSheet(); + + // 模拟选择图片 + const mockImages = [ + 'https://picsum.photos/200/200?random=2', + 'https://picsum.photos/200/200?random=3', + 'https://picsum.photos/200/200?random=4' + ]; + + const randomImage = mockImages[Math.floor(Math.random() * mockImages.length)]; + + const messageId = 'img_' + Date.now(); + + const newMessage = { + id: messageId, + isMe: true, + type: 'image', + content: randomImage, + timestamp: Date.now(), + status: 'uploading', + progress: 0, + avatar: this.data.expertAvatar + }; + + this.addMessageToList(newMessage); + + // 模拟上传进度 + let progress = 0; + const interval = setInterval(() => { + progress += 20; + + if (progress >= 100) { + clearInterval(interval); + this.updateMessageStatus(messageId, 'success'); + } else { + const msgIndex = this.data.messageList.findIndex(m => m.id === messageId); + if (msgIndex !== -1) { + this.data.messageList[msgIndex].progress = progress; + this.setData({ messageList: this.data.messageList }); + } + } + }, 200); + }, + + // 选择视频(模拟) + chooseVideo: function() { + this.hideMediaActionSheet(); + + const messageId = 'video_' + Date.now(); + + const newMessage = { + id: messageId, + isMe: true, + type: 'video', + content: 'https://example.com/video.mp4', + thumb: 'https://picsum.photos/200/200?random=5', + timestamp: Date.now(), + status: 'uploading', + progress: 0, + avatar: this.data.expertAvatar + }; + + this.addMessageToList(newMessage); + + // 模拟上传进度 + let progress = 0; + const interval = setInterval(() => { + progress += 25; + + if (progress >= 100) { + clearInterval(interval); + this.updateMessageStatus(messageId, 'success'); + } else { + const msgIndex = this.data.messageList.findIndex(m => m.id === messageId); + if (msgIndex !== -1) { + this.data.messageList[msgIndex].progress = progress; + this.setData({ messageList: this.data.messageList }); + } + } + }, 300); + }, + + // 预览图片 + previewImage: function(e) { + const url = e.currentTarget.dataset.url; + wx.previewImage({ + current: url, + urls: [url] + }); + }, + + // 阻止事件冒泡 + stopPropagation: function() {} +}); \ No newline at end of file diff --git a/pagesA/pages/expertChat/expertChat.json b/pagesA/pages/expertChat/expertChat.json new file mode 100644 index 0000000..73f6293 --- /dev/null +++ b/pagesA/pages/expertChat/expertChat.json @@ -0,0 +1,4 @@ +{ + "navigationBarTitleText":"咨询", + "usingComponents": {} +} \ No newline at end of file diff --git a/pagesA/pages/expertChat/expertChat.wxml b/pagesA/pages/expertChat/expertChat.wxml new file mode 100644 index 0000000..11c7c54 --- /dev/null +++ b/pagesA/pages/expertChat/expertChat.wxml @@ -0,0 +1,280 @@ + + + + + + + + + + + {{conversation.userName || '用户'}} + + + {{onlineStatus ? '在线' : '离线'}} + + + + + + + + + + + 加载中... + + + + + + + + + + + + + + + + {{item.content}} + + + + + + + + + + + + + + + + + + + + + + {{item.fileName}} + {{formatFileSize(item.fileSize)}} + + + + + {{formatTime(item.timestamp)}} + + + + + + + + + + + {{item.content}} + + + + + + + + + {{item.progress}}% + + + + + + + + + + + + + {{item.progress}}% + + + + + + + + + + + {{item.fileName}} + {{formatFileSize(item.fileSize)}} + + + + {{item.progress}}% + + + + + + + 发送中 + + + 发送失败 + 重试 + + + + {{formatTime(item.timestamp)}} + + + + + + + + + + + + + + 暂无聊天记录,开始咨询吧 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 发送内容 + + + + + + + + + + + 照片 + + + + + + + 视频 + + + + + 最多可选择9张照片 + + + + + + + + + 清空聊天记录 + + + 举报用户 + + + 拉黑用户 + + + + \ No newline at end of file diff --git a/pagesA/pages/expertChat/expertChat.wxss b/pagesA/pages/expertChat/expertChat.wxss new file mode 100644 index 0000000..392581c --- /dev/null +++ b/pagesA/pages/expertChat/expertChat.wxss @@ -0,0 +1,685 @@ +/* 专家端聊天样式 */ +.consult-page { + width: 100vw; + height: 100vh; + background: #f5f5f5; + display: flex; + flex-direction: column; + overflow: hidden; + } + + /* 头部样式 */ + .consult-header { + background: #ffffff; + border-bottom: 1rpx solid #e5e5e5; + position: relative; + z-index: 1000; + box-shadow: 0 1rpx 6rpx rgba(0, 0, 0, 0.05); + flex-shrink: 0; + } + + .header-content { + display: flex; + align-items: center; + padding: 12rpx 24rpx; + height: 96rpx; + } + + .back-btn, .header-right { + width: 48rpx; + height: 48rpx; + display: flex; + align-items: center; + justify-content: center; + } + + .back-icon, .more-icon { + width: 40rpx; + height: 40rpx; + } + + .header-center { + flex: 1; + display: flex; + justify-content: center; + } + + .expert-info { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + } + + .expert-name { + font-size: 32rpx; + font-weight: 600; + color: #000000; + line-height: 44rpx; + margin-bottom: 4rpx; + } + + .expert-status { + display: flex; + align-items: center; + justify-content: center; + } + + .status-dot { + width: 16rpx; + height: 16rpx; + border-radius: 50%; + margin-right: 8rpx; + } + + .status-dot.online { + background: #07c160; + animation: pulse 2s infinite; + } + + .status-dot.offline { + background: #cccccc; + } + + @keyframes pulse { + 0% { box-shadow: 0 0 0 0 rgba(7, 193, 96, 0.4); } + 70% { box-shadow: 0 0 0 8rpx rgba(7, 193, 96, 0); } + 100% { box-shadow: 0 0 0 0 rgba(7, 193, 96, 0); } + } + + .status-text { + font-size: 24rpx; + color: #666666; + } + + /* 聊天容器 */ + .chat-container { + flex: 1; + padding: 20rpx 0; + background: #f5f5f5; + overflow-y: auto; + position: relative; + height: 0; + } + + /* 消息项 */ + .message-item { + display: flex; + margin-bottom: 24rpx; + padding: 0 30rpx; + opacity: 0; + animation: fadeIn 0.3s ease forwards; + align-items: flex-start; + position: relative; + } + + @keyframes fadeIn { + from { opacity: 0; transform: translateY(10rpx); } + to { opacity: 1; transform: translateY(0); } + } + + .message-left { justify-content: flex-start; } + .message-right { justify-content: flex-end; } + + /* 头像 */ + .message-avatar { + width: 80rpx; + height: 80rpx; + border-radius: 8rpx; + overflow: hidden; + flex-shrink: 0; + background: #ffffff; + border: 1rpx solid #f0f0f0; + position: relative; + z-index: 1; + } + + .message-left .message-avatar { margin-right: 16rpx; } + .message-right .message-avatar { margin-left: 16rpx; } + + .avatar-img { + width: 100%; + height: 100%; + object-fit: cover; + } + + /* 消息内容包装器 */ + .message-content-wrapper { + max-width: 480rpx; + position: relative; + display: flex; + flex-direction: column; + z-index: 2; + } + + .message-left .message-content-wrapper { align-items: flex-start; } + .message-right .message-content-wrapper { align-items: flex-end; } + + /* 气泡箭头 */ + .message-arrow { + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 12rpx; + top: 30rpx; + 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: 60rpx; + display: flex; + align-items: center; + } + + .bubble-left { + background: #ffffff; + border-radius: 10rpx; + border-top-left-radius: 4rpx; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05); + } + + .bubble-right { + background: #95ec69; + border-radius: 10rpx; + border-top-right-radius: 4rpx; + box-shadow: 0 2rpx 8rpx rgba(149, 236, 105, 0.2); + } + + /* 文本消息 */ + .message-text { + font-size: 32rpx; + color: #000000; + line-height: 1.4; + } + + .bubble-right .message-text { color: #000000; } + + /* 媒体消息 */ + .media-bubble { + position: relative; + border-radius: 10rpx; + overflow: hidden; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05); + background: #ffffff; + min-height: 60rpx; + display: flex; + align-items: center; + justify-content: center; + } + + .message-left .media-bubble { border-top-left-radius: 4rpx; } + .message-right .media-bubble { border-top-right-radius: 4rpx; } + + .message-image { + width: 280rpx; + height: 280rpx; + display: block; + } + + .message-video { + width: 280rpx; + height: 280rpx; + background: #000000; + } + + .video-play-overlay { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 80rpx; + height: 80rpx; + border-radius: 50%; + background: rgba(0, 0, 0, 0.6); + display: flex; + align-items: center; + justify-content: center; + } + + .play-icon { + width: 40rpx; + height: 40rpx; + margin-left: 4rpx; + } + + /* 文件消息 */ + .message-file { + min-width: 280rpx; + padding: 20rpx; + display: flex; + align-items: center; + min-height: 60rpx; + } + + .file-icon-box { + width: 56rpx; + height: 72rpx; + margin-right: 16rpx; + position: relative; + flex-shrink: 0; + } + + .file-icon { + width: 100%; + height: 100%; + } + + .file-info { + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; + overflow: hidden; + } + + .file-name { + font-size: 28rpx; + font-weight: 500; + color: #000000; + margin-bottom: 6rpx; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + .file-size { + font-size: 24rpx; + color: #666666; + } + + /* 消息时间 */ + .message-time { + font-size: 22rpx; + color: #999999; + margin-top: 8rpx; + align-self: flex-start; + } + + .message-right .message-time { + align-self: flex-end; + } + + /* 消息状态 */ + .message-status { + font-size: 22rpx; + color: #999999; + margin-top: 4rpx; + display: flex; + align-items: center; + gap: 8rpx; + } + + .message-status .fail { + color: #ff4d4f; + } + + .retry-text { + color: #1890ff; + text-decoration: underline; + margin-left: 8rpx; + } + + /* 上传进度 */ + .upload-progress { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; + border-radius: inherit; + } + + .progress-circle { + width: 80rpx; + height: 80rpx; + border-radius: 50%; + border: 6rpx solid rgba(255, 255, 255, 0.3); + border-top-color: #ffffff; + animation: spin 1s linear infinite; + display: flex; + align-items: center; + justify-content: center; + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + + .progress-text { + font-size: 20rpx; + color: #ffffff; + font-weight: 600; + } + + /* 底部留白 */ + .chat-bottom-space { height: 40rpx; } + + /* 加载更多 */ + .load-more-tip { + display: flex; + justify-content: center; + align-items: center; + padding: 30rpx 0; + color: #999999; + font-size: 24rpx; + } + + /* 空状态 */ + .empty-tip { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 100rpx 0; + color: #999999; + } + + .empty-text { + font-size: 28rpx; + color: #999999; + } + + /* 输入区域 */ + .input-section { + background: #ffffff; + border-top: 1rpx solid #e5e5e5; + padding: 16rpx 30rpx; + position: relative; + z-index: 100; + box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.05); + flex-shrink: 0; + width: 100%; + box-sizing: border-box; + } + + .text-input-panel { + display: flex; + align-items: center; + gap: 16rpx; + min-height: 72rpx; + } + + .add-btn { + width: 72rpx; + height: 72rpx; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + } + + .add-icon { + width: 60rpx; + height: 60rpx; + } + + .input-wrapper { + flex: 1; + position: relative; + background: #f5f5f5; + border-radius: 10rpx; + min-height: 72rpx; + display: flex; + align-items: center; + padding: 0 24rpx; + transition: all 0.2s; + box-sizing: border-box; + } + + .input-wrapper:active { + background: #e8e8e8; + } + + .chat-textarea { + flex: 1; + width: 100%; + font-size: 30rpx; + color: #333333; + line-height: 1.4; + min-height: 48rpx; + max-height: 160rpx; + padding: 12rpx 0; + margin: 0; + background: transparent; + border: none; + box-sizing: border-box; + overflow-y: auto; + } + + .input-placeholder { + color: #999999; + font-size: 28rpx; + line-height: 1.4; + } + + .input-actions { + position: absolute; + right: 16rpx; + top: 50%; + transform: translateY(-50%); + z-index: 2; + flex-shrink: 0; + display: flex; + align-items: center; + justify-content: center; + } + + .clear-btn { + width: 36rpx; + height: 36rpx; + border: none; + background: transparent; + padding: 0; + margin: 0; + line-height: 1; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + } + + .clear-btn::after { + border: none; + } + + .clear-btn:active { + background: rgba(0, 0, 0, 0.1); + } + + .clear-icon { + width: 28rpx; + height: 28rpx; + } + + .send-btn { + background: linear-gradient(135deg, #07c160 0%, #06ae56 100%); + width: 112rpx; + height: 66rpx; + border-radius: 10rpx; + border: none; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.3s ease; + padding: 0; + margin: 0; + line-height: 1; + flex-shrink: 0; + box-shadow: 0 4rpx 8rpx rgba(7, 193, 96, 0.2); + position: relative; + overflow: hidden; + } + + .send-btn:active { + background: linear-gradient(135deg, #06ae56 0%, #059c4c 100%); + transform: scale(0.96); + box-shadow: 0 2rpx 4rpx rgba(7, 193, 96, 0.3); + } + + .send-text { + font-size: 28rpx; + color: #ffffff; + font-weight: 600; + letter-spacing: 2rpx; + } + + .send-placeholder { + width: 112rpx; + height: 72rpx; + flex-shrink: 0; + } + + /* 多媒体选择面板 */ + .media-action-sheet { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.5); + display: flex; + align-items: flex-end; + justify-content: center; + z-index: 2000; + animation: fadeIn 0.3s ease; + } + + .media-sheet-content { + width: 100%; + background: #F7F7F7; + border-radius: 40rpx 40rpx 0 0; + padding: 40rpx 30rpx calc(10rpx + env(safe-area-inset-bottom)); + animation: slideUp 0.3s ease; + box-sizing: border-box; + } + + @keyframes slideUp { + from { transform: translateY(100%); } + to { transform: translateY(0); } + } + + .media-sheet-header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 40rpx; + padding: 0 10rpx 20rpx; + border-bottom: 1px solid #E4E4E4; + } + + .sheet-title { + font-size: 32rpx; + font-weight: 600; + color: #000000; + } + + .close-sheet-btn image { + width: 60rpx; + height: 60rpx; + } + + .media-options-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 40rpx 30rpx; + margin-bottom: 40rpx; + } + + .media-option { + display: flex; + flex-direction: column; + align-items: center; + } + + .option-icon-box { + width: 120rpx; + height: 120rpx; + border-radius: 30rpx; + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 16rpx; + transition: transform 0.2s; + background-color: #fff; + } + + .media-option:active .option-icon-box { + transform: scale(0.95); + } + + .option-icon-box image { + width: 60rpx; + height: 60rpx; + } + + .option-text { + font-size: 26rpx; + color: #666666; + } + + .sheet-bottom { + text-align: center; + } + + .bottom-tip { + font-size: 24rpx; + color: #999999; + } + + /* 更多菜单 */ + .more-menu { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.3); + z-index: 2000; + } + + .menu-content { + position: absolute; + top: 96rpx; + right: 24rpx; + background: #ffffff; + border-radius: 12rpx; + padding: 16rpx 0; + min-width: 200rpx; + box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.15); + } + + .menu-item { + padding: 24rpx 32rpx; + font-size: 28rpx; + color: #333333; + border-bottom: 1rpx solid #f0f0f0; + } + + .menu-item:last-child { + border-bottom: none; + } + + .menu-item:active { + background: #f5f5f5; + } \ No newline at end of file diff --git a/pagesA/pages/serviceEvaluation/serviceEvaluation.js b/pagesA/pages/serviceEvaluation/serviceEvaluation.js new file mode 100644 index 0000000..0cd8d15 --- /dev/null +++ b/pagesA/pages/serviceEvaluation/serviceEvaluation.js @@ -0,0 +1,127 @@ +import http from '../../../utils/api' +const baseUrl = require('../../../utils/baseUrl') + +Page({ + data: { + baseUrl: baseUrl, + loadMoreText: '上拉加载更多', + evaluations: [], + pageNo: 1, + pageSize: 10, + total: 0, + isLoading: false, + hasMore: true + }, + + onLoad() { + this.getfeedback(true) + }, + + // 服务评价列表 + getfeedback(isRefresh = false) { + // 防止重复请求 + if (this.data.isLoading) return + + // 如果没有更多数据且不是刷新,直接返回 + if (!this.data.hasMore && !isRefresh) { + this.setData({ + loadMoreText: '—— 没有更多了 ——' + }) + return + } + + this.setData({ isLoading: true }) + + // 如果是刷新,重置为第一页 + if (isRefresh) { + this.setData({ + pageNo: 1, + hasMore: true + }) + } + + // 显示加载提示 + if (this.data.pageNo > 1) { + this.setData({ loadMoreText: '加载中...' }) + } + + http.feedback({ + data: { + type: '服务评价', + pageNo: this.data.pageNo, + pageSize: this.data.pageSize + }, + success: res => { + console.log('评价列表响应:', res) + + if (res && res.rows) { + const list = res.rows || [] + const total = res.total || 0 + + // 判断是否还有更多数据 + const hasMore = this.data.pageNo * this.data.pageSize < total + + this.setData({ + evaluations: isRefresh ? list : this.data.evaluations.concat(list), + total: total, + hasMore: hasMore, + loadMoreText: hasMore ? '上拉加载更多' : '—— 没有更多了 ——', + pageNo: this.data.pageNo + 1 + }) + } else { + // 处理异常情况 + if (isRefresh) { + this.setData({ + evaluations: [], + hasMore: false, + loadMoreText: '—— 没有更多了 ——' + }) + } + } + }, + fail: err => { + console.error('获取评价列表失败:', err) + wx.showToast({ + title: '加载失败', + icon: 'none' + }) + + // 加载失败时,恢复加载提示 + this.setData({ + loadMoreText: this.data.hasMore ? '点击重试' : '—— 没有更多了 ——' + }) + }, + complete: () => { + this.setData({ isLoading: false }) + wx.hideNavigationBarLoading() + wx.stopPullDownRefresh() + } + }) + }, + + // 下拉刷新 + onPullDownRefresh() { + wx.showNavigationBarLoading() + this.getfeedback(true) + }, + + // 上拉加载更多 + onReachBottom() { + if (this.data.hasMore && !this.data.isLoading) { + this.getfeedback() + } else if (!this.data.hasMore) { + this.setData({ + loadMoreText: '—— 没有更多了 ——' + }) + } + }, + + // 重新加载(可用于点击重试) + retryLoad() { + if (this.data.evaluations.length === 0) { + this.getfeedback(true) + } else if (this.data.hasMore) { + this.getfeedback() + } + } +}) \ No newline at end of file diff --git a/pagesA/pages/serviceEvaluation/serviceEvaluation.json b/pagesA/pages/serviceEvaluation/serviceEvaluation.json new file mode 100644 index 0000000..1e22034 --- /dev/null +++ b/pagesA/pages/serviceEvaluation/serviceEvaluation.json @@ -0,0 +1,4 @@ +{ + "navigationBarTitleText":"服务评价", + "usingComponents": {} +} \ No newline at end of file diff --git a/pagesA/pages/serviceEvaluation/serviceEvaluation.wxml b/pagesA/pages/serviceEvaluation/serviceEvaluation.wxml new file mode 100644 index 0000000..6b307b1 --- /dev/null +++ b/pagesA/pages/serviceEvaluation/serviceEvaluation.wxml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 暂无评价 + + + + + {{loadMoreText}} + + + \ No newline at end of file diff --git a/pagesA/pages/serviceEvaluation/serviceEvaluation.wxss b/pagesA/pages/serviceEvaluation/serviceEvaluation.wxss new file mode 100644 index 0000000..76f94f4 --- /dev/null +++ b/pagesA/pages/serviceEvaluation/serviceEvaluation.wxss @@ -0,0 +1,146 @@ +.page { + min-height: 100vh; + background-color: #ffffff; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; + } + + /* 列表容器 - 直接贴边 */ + .list-container { + padding: 0 16px; + } + + /* 评价卡片 - 极简风格 */ + .evaluation-card { + background-color: #ffffff; + padding: 20px 0; + position: relative; + transition: background-color 0.2s ease; + } + + .evaluation-card:active { + background-color: #f8f9fc; + } + + /* 用户信息行 */ + .user-row { + display: flex; + align-items: center; + margin-bottom: 12px; + } + + /* 头像区域 */ + .avatar-wrapper { + margin-right: 12px; + } + + .avatar { + width: 48px; + height: 48px; + border-radius: 50%; + background-color: #f0f2f6; + overflow: hidden; + flex-shrink: 0; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.03); + } + + .avatar-placeholder { + display: flex; + align-items: center; + justify-content: center; + } + + .avatar-text { + font-size: 20px; + font-weight: 500; + color: #ffffff; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); + } + + /* 用户信息区 */ + .user-info { + flex: 1; + } + + .name-row { + display: flex; + align-items: baseline; + justify-content: space-between; + margin-bottom: 4px; + } + + .user-name { + font-size: 16px; + font-weight: 600; + color: #1e2a3a; + letter-spacing: -0.2px; + } + + .time { + font-size: 12px; + color: #98a2b3; + font-weight: 400; + } + + + + /* 评价内容 */ + .content-section { + margin-bottom: 12px; + padding-right: 8px; + } + + .content-text { + font-size: 15px; + line-height: 1.5; + color: #1e2a3a; + word-break: break-word; + font-weight: 400; + } + + + + /* 卡片底部分隔线 */ + .card-footer { + margin-top: 8px; + } + + .divider { + height: 1px; + background-color: #eef1f4; + width: 100%; + } + + /* 空状态 */ + .empty-state { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 80px 20px; + background-color: #ffffff; + } + + .empty-icon { + width: 140px; + height: 140px; + margin-bottom: 20px; + opacity: 0.6; + } + + .empty-text { + font-size: 15px; + color: #9aa6b8; + font-weight: 400; + } + + /* 加载更多 */ + .load-more { + text-align: center; + padding: 24px 0 30px; + } + + .load-more-text { + font-size: 12px; + color: #b8c0cc; + font-weight: 400; + } \ No newline at end of file diff --git a/pagesB/pages/publishAdd/publishAdd.js b/pagesB/pages/publishAdd/publishAdd.js index 2639ad4..5e7b811 100644 --- a/pagesB/pages/publishAdd/publishAdd.js +++ b/pagesB/pages/publishAdd/publishAdd.js @@ -216,6 +216,8 @@ Page({ articleCoverTemp: tempPath, 'articleForm.coverImage': serverPath, isUploading: false + }, () => { + this.validateArticleForm(); }); } else { // 视频封面 @@ -277,9 +279,11 @@ Page({ maxDuration: 300, success: (res) => { if (res.tempFiles && res.tempFiles.length > 0) { + const tempFilePath = res.tempFiles[0].tempFilePath; + this.setData({ isUploading: true, - videoUrlTemp: res.tempFiles[0].tempFilePath // 先显示本地路径 + videoUrlTemp: tempFilePath // 先显示本地路径 }); // 显示加载提示 @@ -288,9 +292,18 @@ Page({ mask: true }); + console.log(111,tempFilePath); + // 上传视频 - this.uploadVideo(res.tempFiles[0].tempFilePath); + this.uploadVideo(tempFilePath); } + }, + fail: (error) => { + console.error('选择视频失败:', error); + wx.showToast({ + title: '选择视频失败', + icon: 'none' + }); } }); }, @@ -307,8 +320,9 @@ Page({ success: (uploadRes) => { try { const result = JSON.parse(uploadRes.data); + console.log(333,result) if (result.code === 200 || result.fileName) { - const serverPath = result.fileName || result.url; + const serverPath = result.fileName this.setData({ 'videoForm.videoUrl': serverPath, diff --git a/pagesB/pages/wzDetails/wzDetails.wxml b/pagesB/pages/wzDetails/wzDetails.wxml index d5c07b0..80c85a9 100644 --- a/pagesB/pages/wzDetails/wzDetails.wxml +++ b/pagesB/pages/wzDetails/wzDetails.wxml @@ -34,7 +34,7 @@ {{article.viewCount}} 阅读 - + diff --git a/project.private.config.json b/project.private.config.json index d4bd5d0..bcfa452 100644 --- a/project.private.config.json +++ b/project.private.config.json @@ -4,7 +4,7 @@ "setting": { "compileHotReLoad": true, "skylineRenderEnable": true, - "urlCheck": true, + "urlCheck": false, "coverView": true, "lazyloadPlaceholderEnable": false, "preloadBackgroundData": false, diff --git a/utils/api.js b/utils/api.js index 6a1fda2..7145fa1 100644 --- a/utils/api.js +++ b/utils/api.js @@ -139,13 +139,15 @@ function shareAdd(params) { http('/vet/article', 'post', params) } - // 制定方案新增 function fazdAdd(params) { http('/vet/plan', 'post', params) } - +// 个人中心服务评价 +function feedback(params) { + http('/muhu/feedback/list', 'get', params) +} @@ -162,12 +164,6 @@ function revise(params) { http('/muhu/user', 'put', params) } -// 个人中心反馈建议 -function feedback(params) { - http('/muhu/feedback', 'post', params) -} - - // 个人中心今日问诊 function today(params) { http('/muhu/consultation/today', 'get', params)