| 1 |
- "use strict";const e=require("../../common/vendor.js"),a=require("../../common/assets.js"),t=require("../../api/message.js"),o=require("../../api/student.js"),n=require("../../utils/request.js"),s={__name:"chat",setup(s){const i=e.ref(!0),r=e.ref([]),d=e.ref(""),l=e.ref("text"),u=e.ref("none"),c=e.ref("bottom-anchor"),v=e.ref(20),p=e.ref(null),m=e.ref(null),g=e.ref(""),y=e.ref(""),f=e.ref("job"),h=e.ref(""),I=e.ref(""),T=e.ref(""),w=e.ref(""),x=e.ref(""),S=e.ref(""),_=e.ref(null),C=e.ref(""),N=e.ref(""),P=e.ref(""),R=e.ref(""),U=e.ref("/static/images/hr_avatar.svg");function D(e){if(!e||""===e||"undefined"===e)return"";const a=String(e).trim();return a.startsWith("http://")||a.startsWith("https://")?a:/^\d+$/.test(a)?`${n.BASE_URL}/resource/oss/file/${a}`:a.startsWith("/static/")?"":a}const j=e.ref("/static/images/user_avatar.png"),$=["😀","😃","😄","😁","😆","😅","😂","🤣","😊","😇","🙂","🙃","😉","😌","😍","🥰","😘","😗","😙","😚","😋","😛","😝","😜","🤪","🤨","🧐","🤓","😎","🤩","🥳"];let b=null;e.onLoad((async a=>{try{const a=e.index.getSystemInfoSync();v.value=a.statusBarHeight||20}catch(d){}a.sessionId&&(p.value=a.sessionId),a.fromUserId&&(m.value=a.fromUserId),a.userName&&(g.value=decodeURIComponent(a.userName)),a.jobName&&(y.value=decodeURIComponent(a.jobName)),a.type&&(f.value=a.type),a.title&&(h.value=decodeURIComponent(a.title||"")),a.title&&"assessment"===a.type&&(I.value=decodeURIComponent(a.title||"")),a.cover&&(T.value=decodeURIComponent(a.cover||"")),a.level&&(w.value=decodeURIComponent(a.level||"")),a.assessmentId&&(x.value=a.assessmentId),a.price&&(S.value=a.price),a.positionId&&(_.value=a.positionId),a.salaryRange&&(C.value=decodeURIComponent(a.salaryRange)),a.companyName&&(N.value=decodeURIComponent(a.companyName)),a.workCity&&(P.value=decodeURIComponent(a.workCity)),a.workDistrict&&(R.value=decodeURIComponent(a.workDistrict));const n=e.index.getStorageSync("userInfo")||{},s=n.avatarUrl||n.avatar||"/static/images/user_avatar.png";if(j.value=D(s)||"/static/images/user_avatar.png",!m.value&&n.studentId&&(m.value=n.studentId),!p.value)return i.value=!1,void e.index.showToast({title:"会话参数缺失",icon:"none"});if(await async function(){try{const e=await t.getChatHistory({sessionId:p.value,pageNum:1,pageSize:50});if(e.rows){r.value=e.rows.slice().reverse().map(L),F();const a=e.rows.find((e=>2===e.senderType));if(a&&a.senderAvatar){const e=D(a.senderAvatar);e&&(U.value=e)}if(r.value.length>0){const e=r.value[r.value.length-1];e.id&&!e.id.toString().startsWith("temp")&&t.markChatRead({sessionId:p.value,lastReadMsgId:e.id})}}}catch(d){console.error("[Chat] 加载历史消息失败:",d)}finally{i.value=!1}if(m.value)try{const e=await o.getStudent(m.value);if(200===e.code&&e.data){const a=e.data,t=D(a.avatarUrl||a.avatar);t&&(j.value=t)}}catch(d){console.warn("[Chat] 获取学员头像失败:",d)}}(),M(),b=setInterval((()=>{p.value&&async function(){if(p.value)try{const e=await t.getChatHistory({sessionId:p.value,pageNum:1,pageSize:50,timestamp:(new Date).getTime()});if(e.rows){const a=e.rows.slice().reverse().map(L),o=a.map((e=>String(e.id)+String(e.content))).join("|");if(o!==r.value.filter((e=>e.id&&!String(e.id).startsWith("temp"))).map((e=>String(e.id)+String(e.content))).join("|")){r.value=a,F();const e=r.value[r.value.length-1];e&&e.id&&!String(e.id).startsWith("temp")&&t.markChatRead({sessionId:p.value,lastReadMsgId:e.id})}}}catch(d){console.error("[Chat] 轮询消息失败:",d)}}()}),3e3),"assessment"===f.value)setTimeout((async()=>{try{const a=e.index.getStorageSync("userInfo")||{},o=await t.autoCreateOrderCard({sessionId:p.value,studentId:a.studentId||m.value,orderName:I.value||y.value+"-测评服务费",orderPrice:S.value||"0",orderType:"测评咨询"});200===o.code&&o.data?z(o.data):console.error("自动创建结算单失败:",o)}catch(a){console.error("自动创建结算单异常:",a)}}),800);else if("job"===f.value&&_.value)try{const{getAssessmentList:a}=require("../../api/assessment.js"),o=await a({positionId:_.value,pageNum:1,pageSize:1});if(200===o.code&&o.rows&&o.rows.length>0){const a=o.rows[0];x.value||(x.value=String(a.id),console.log("[Chat] 岗位关联测评ID:",x.value)),setTimeout((async()=>{try{const o=e.index.getStorageSync("userInfo")||{},n=await t.autoCreateOrderCard({sessionId:p.value,studentId:o.studentId||m.value,orderName:(a.evaluationName||y.value)+"-测评服务费",orderPrice:a.price||S.value||"0",orderType:"岗位测评"});200===n.code&&n.data&&z(n.data)}catch(o){console.error("岗位结算单异常:",o)}}),800)}else console.log("[Chat] 该岗位无关联测评,不发送结算单")}catch(d){console.error("[Chat] 查询关联测评失败:",d)}}));let k=null;function M(){b&&(clearInterval(b),b=null)}function L(e){let a=null;if(e.payload)try{a="string"==typeof e.payload?JSON.parse(e.payload):e.payload}catch(t){}return{id:e.msgId,msgNo:e.msgNo,senderType:e.senderType,senderName:e.senderName,senderAvatar:e.senderAvatar,msgType:e.msgType||"text",content:e.content,fileUrl:e.fileUrl,fileName:e.fileName,fileSize:e.fileSize,payload:a,sendTime:e.sendTime,isPaid:a&&("paid"===a.status||"已支付"===a.status||!0===a.paid)}}async function O(){const a=d.value.trim();if(!a||!p.value)return;const o="MSG_"+Date.now()+"_"+Math.random().toString(36).slice(2,8),n="temp_"+Date.now();r.value.push({id:n,msgNo:o,senderType:1,msgType:"text",content:a,sendTime:(new Date).toISOString(),payload:null}),d.value="",F();try{await t.sendTextMessage({sessionId:p.value,msgNo:o,content:a,msgType:"text",senderId:m.value||void 0})}catch(s){r.value=r.value.filter((e=>e.id!==n)),e.index.showToast({title:"发送失败,请重试",icon:"none"})}}async function A(){u.value="none",e.index.chooseImage({count:1,success:async a=>{const o=a.tempFilePaths[0],n="temp_img_"+Date.now();r.value.push({id:n,senderType:1,msgType:"image",fileUrl:o,sendTime:(new Date).toISOString(),payload:null}),F();try{const e="MSG_"+Date.now()+"_"+Math.random().toString(36).slice(2,6);await t.sendImageMessage({sessionId:p.value,msgNo:e,filePath:o,senderId:m.value})}catch(s){r.value=r.value.filter((e=>e.id!==n)),e.index.showToast({title:"图片发送失败",icon:"none"})}}})}function q(){u.value="none",r.value.push({id:"manual_order_"+Date.now(),msgNo:"ORDER_"+Date.now(),senderType:2,msgType:"order_card",content:"为您推送测评费用结算单",payload:{id:1,name:I.value||"测评费用",amount:S.value||"680.00"},sendTime:(new Date).toISOString(),isPaid:!1}),F()}function z(e){r.value.some((a=>"order_card"===a.msgType&&a.payload&&a.payload.orderCardId===e.orderCardId))?console.log("[Chat] 已存在相同结算单消息,跳过推送"):(r.value.push({id:"order_"+e.orderCardId,msgNo:"ORDER_"+Date.now(),senderType:e.senderType||3,msgType:"order_card",content:"项目费用结算单",countdown:Math.floor(e.countdownSeconds||1800),payload:{orderCardId:e.orderCardId,id:e.orderCardId,name:e.orderName||I.value||y.value,amount:e.orderPrice||S.value||"0",price:e.orderPrice||S.value||"0",status:"pending"},sendTime:(new Date).toISOString(),isPaid:!1}),F(),k||(k=setInterval((()=>{r.value.forEach((e=>{"order_card"===e.msgType&&!e.isPaid&&e.countdown>0&&e.countdown--}))}),1e3)))}function B(){e.index.showLoading({title:"预约中..."}),setTimeout((()=>{e.index.hideLoading(),e.index.showToast({title:"预约成功",icon:"success"})}),1200)}e.onUnload((()=>{M(),k&&clearInterval(k)}));const W=e.computed((()=>`calc(100vh - 100rpx - ${"none"===u.value?120:520}rpx - env(safe-area-inset-top) - env(safe-area-inset-bottom))`));function F(){e.nextTick$1((()=>{c.value="",e.nextTick$1((()=>{c.value="bottom-anchor"}))}))}function E(){e.index.navigateBack()}function H(){l.value="text"===l.value?"voice":"text",u.value="none"}function J(e){u.value=u.value===e?"none":e,"none"!==u.value&&(l.value="text"),F()}function G(){u.value="none",F()}function K(e){if(!e)return"";const a=new Date(e);if(isNaN(a))return e;const t=e=>e.toString().padStart(2,"0");return`${t(a.getMonth()+1)}-${t(a.getDate())} ${t(a.getHours())}:${t(a.getMinutes())}`}function Q(e,a){if(0===a)return!0;const t=r.value[a-1];return!(!t.sendTime||!e.sendTime)&&new Date(e.sendTime)-new Date(t.sendTime)>3e5}function V(e){if(!e&&0!==e)return"—";const a="string"==typeof e?parseFloat(e):e;return isNaN(a)?"—":a.toFixed(2).replace(/\.?0+$/,"")}const X=()=>e.index.showToast({title:"录音中...",icon:"none"}),Y=()=>e.index.showToast({title:"语音功能暂未开放",icon:"none"});return(o,n)=>e.e({a:v.value+"px",b:e.o(E),c:e.t(g.value||"在线咨询"),d:i.value},(i.value,{}),{e:!i.value},i.value?{}:e.e({f:"assessment"===f.value},"assessment"===f.value?e.e({g:U.value,h:T.value||"/static/images/assess_cover.svg",i:e.t(I.value||"测评咨询"),j:w.value},w.value?{k:e.t(w.value)}:{},{l:e.t(S.value?"¥"+S.value:"咨询获取")}):"training"===f.value?{n:U.value,o:e.t(h.value||"审计员线下培训"),p:e.o(B)}:{q:U.value,r:e.t(y.value||"审计员"),s:e.t(C.value||"13K-23K"),t:a._imports_0$2,v:a._imports_1$1,w:a._imports_2$3,x:e.t(N.value||"华财仁合"),y:a._imports_2$1,z:e.t((P.value||"上海市")+"·"+(R.value||"黄浦区"))},{m:"training"===f.value}),{A:!i.value&&0===r.value.length},(i.value||r.value.length,{}),{B:e.f(r.value,((a,o,n)=>{return e.e({a:Q(a,o)},Q(a,o)?{b:e.t(K(a.sendTime))}:{},{c:1!==a.senderType},1!==a.senderType?{d:D(a.senderAvatar)||U.value}:{},{e:"text"===a.msgType},"text"===a.msgType?{f:e.t(a.content),g:e.n(1===a.senderType?"user-bubble":"shadow")}:"image"===a.msgType?{i:a.fileUrl,j:e.o((t=>{return o=a.fileUrl,void e.index.previewImage({urls:[o],current:o});var o}),a.id||o)}:"file"===a.msgType?{l:e.t(a.fileName||"文件"),m:e.t((s=a.fileSize,s?s<1024?s+"B":s<1048576?(s/1024).toFixed(1)+"KB":(s/1024/1024).toFixed(1)+"MB":""))}:"order_card"===a.msgType?e.e({o:!a.isPaid&&a.countdown>0},!a.isPaid&&a.countdown>0?{p:e.t(a.countdown)}:{},{q:a.isPaid},(a.isPaid,{}),{r:e.t(a.payload&&a.payload.name||"—"),s:e.t(V(a.payload&&a.payload.amount)),t:e.t(a.isPaid?"已支付":"立即支付"),v:a.isPaid?1:"",w:e.o((o=>async function(a){if(a.isPaid)return;const o=a.payload?a.payload.orderCardId||a.payload.id:null,n=e.index.getStorageSync("userInfo")||{};if(console.log("🔥 开始支付流程"),console.log("🔥 orderCardId:",o,"类型:",typeof o),console.log("🔥 fromUserId:",m.value,"类型:",typeof m.value),console.log("🔥 userInfo:",JSON.stringify(n)),console.log("🔥 msg.payload:",JSON.stringify(a.payload)),o)try{e.index.showLoading({title:"创建支付订单..."}),console.log("🔥 调用支付接口,参数:",{orderCardId:o,userId:m.value});const n=await t.createWxPayOrder(o,m.value);if(console.log("🔥 支付接口响应:",n),200!==n.code&&0!==n.code)return e.index.hideLoading(),e.index.showToast({title:n.msg||"创建支付订单失败",icon:"none"}),void console.log("🔥 支付接口调用失败:",n);if(n.data&&n.data.wechatPayParams){const t=n.data.wechatPayParams;e.index.hideLoading(),e.index.showLoading({title:"发起微信支付..."}),e.index.requestPayment({provider:"wxpay",timeStamp:t.timeStamp,nonceStr:t.nonceStr,package:t.package,signType:t.signType||"RSA",paySign:t.paySign,success:t=>{if(e.index.hideLoading(),console.log("微信支付成功:",t),a.isPaid=!0,e.index.showToast({title:"支付成功",icon:"success"}),x.value){const a=`audit_paid_${x.value}`;e.index.setStorageSync(a,!0),console.log("[Chat] 支付成功,写入 key:",a)}if("job"===f.value&&_.value){const a=`audit_paid_pos_${_.value}`;e.index.setStorageSync(a,!0),console.log("[Chat] 兜底写入 key:",a)}a.payload={...a.payload||{},orderCardId:o,orderId:n.data.orderId,orderNo:n.data.orderNo||"",status:"paid"},e.index.$emit("payment_done",{orderCardId:o,orderId:n.data.orderId,assessmentId:x.value,positionId:_.value,paid:!0}),"assessment"===f.value&&setTimeout((()=>{e.index.navigateTo({url:`/pages/assessment/training?title=${encodeURIComponent(I.value)}&assessmentId=${x.value}`})}),1200)},fail:a=>{e.index.hideLoading(),console.error("微信支付失败:",a),a.errMsg&&a.errMsg.includes("cancel")?e.index.showToast({title:"支付已取消",icon:"none"}):e.index.showToast({title:"支付失败,请重试",icon:"none"})}})}else e.index.hideLoading(),n.data&&n.data.success?(a.isPaid=!0,e.index.showToast({title:n.data.message||"支付成功",icon:"success"})):e.index.showToast({title:"支付处理异常",icon:"none"})}catch(s){e.index.hideLoading(),console.error("支付失败:",s),e.index.showToast({title:"支付失败:"+(s.message||"网络错误"),icon:"none"})}else e.index.showToast({title:"无效的结算单",icon:"none"})}(a)),a.id||o)}):"job_card"===a.msgType?e.e({y:e.t(a.payload&&a.payload.title||"岗位推荐"),z:e.t(a.payload&&a.payload.salaryRange||""),A:a.payload&&a.payload.workCity},a.payload&&a.payload.workCity?{B:e.t(a.payload.workCity)}:{}):3===a.senderType?{D:e.t(a.content)}:{E:e.t(a.content||"[消息]")},{h:"image"===a.msgType,k:"file"===a.msgType,n:"order_card"===a.msgType,x:"job_card"===a.msgType,C:3===a.senderType,F:1===a.senderType},1===a.senderType?{G:D(a.senderAvatar)||j.value}:{},{H:"msg-"+(a.id||o),I:e.n(1===a.senderType?"right":"left"),J:a.id||o});var s})),C:c.value,D:W.value,E:"text"===l.value?"/static/icons/audio_thin.svg":"/static/icons/keyboard.svg",F:e.o(H),G:"text"===l.value},"text"===l.value?{H:e.o(O),I:e.o(G),J:d.value,K:e.o((e=>d.value=e.detail.value))}:{L:e.o(X),M:e.o(Y)},{N:a._imports_4,O:"emoji"===u.value?1:"",P:e.o((e=>J("emoji"))),Q:"plus"===u.value?"/static/icons/plus_active.svg":"/static/icons/plus_thin.svg",R:e.o((e=>J("plus"))),S:"emoji"===u.value},"emoji"===u.value?{T:e.f($,((a,t,o)=>({a:e.t(a),b:a,c:e.o((e=>function(e){d.value+=e}(a)),a)})))}:{},{U:"plus"===u.value},"plus"===u.value?{V:a._imports_5,W:e.o(A),X:a._imports_6,Y:e.o(q)}:{},{Z:"none"!==u.value?1:"",aa:"none"!==u.value?1:""})}},i=e._export_sfc(s,[["__scopeId","data-v-b1eeb549"]]);wx.createPage(i);
|