message1.nvue 46 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131
  1. <template>
  2. <view class="wrapper">
  3. <view class="chat-list pages">
  4. <view v-if="list.length">
  5. <scroll-view :scroll-top="scrollTop" scroll-y="true" class="scroll-Y">
  6. <view v-for="(row,index) of list" :key="index" :id="'msg'+row.msg.id">
  7. <block v-if="row.type=='user'" >
  8. <view class="my" v-if="row.msg.userinfo.uid==myuid">
  9. <!-- 别人发出的消息 -->
  10. <view class="chat-time-container">
  11. <view class="A"></view>
  12. <view class="B"><text class="text-info text-time" >{{row.msg.time}}</text></view>
  13. <view class="C"></view>
  14. </view>
  15. <!-- 文字消息 -->
  16. <view v-if="row.msg.type=='text'" class="chat-container left">
  17. <avatar :src="row.msg.userinfo.face"></avatar>
  18. <view class="chat-box ">
  19. <view v-if="row.msg.type=='text'" class="chat-msg text-line" style="{'height': getStringLen(row.msg.content.text)? 90:'' +'rpx'}">
  20. <text class="text-info">点击页面发送数据{{num}} {{row.msg.content.text}}</text>
  21. </view>
  22. </view>
  23. </view>
  24. <!-- 图片消息 -->
  25. <view v-if="row.msg.type=='img'" class="chat-container left" @tap="showPic(row.msg)">
  26. <avatar :src="row.msg.userinfo.face"></avatar>
  27. <view class="chat-image" style="margin-left: 10rpx;">
  28. <image resize="contain" :src="row.msg.content.url" :style="{'width': row.msg.content.w+'rpx','height': row.msg.content.h+'rpx'}" class="img" />
  29. </view>
  30. </view>
  31. <!-- 语言消息 -->
  32. <view v-if="row.msg.type=='voice'" class="chat-container left" @tap="playVoice(row.msg)" :class="playMsgid == row.msg.id?'play':''">
  33. <avatar :src="row.msg.userinfo.face"></avatar>
  34. <view class=" other-voice voice-icon left-radius" style="margin-left: 10rpx;">
  35. <image src="/static/theme/default/voice-right.png" style="width: 36rpx;height:36rpx;" />
  36. </view>
  37. <view class="other-voice voice-length right-radius">
  38. <text class="length"> {{row.msg.content.length}}</text>
  39. </view>
  40. </view> <!-- 语言消息 -->
  41. <!-- 红包 -->
  42. <!--
  43. <view v-if="row.msg.type=='redEnvelope'" class="chat-container left" @tap="openRedEnvelope(row.msg,index)">
  44. <avatar :src="row.msg.userinfo.face"></avatar>
  45. <image style="width: 250rpx; height: 313rpx;" src="/static/img/red-envelope.png"></image>
  46. <view class="tis">
  47. <!-- 点击开红包 --><!--
  48. </view>
  49. <view class="blessing">
  50. {{row.msg.content.blessing}}
  51. </view>
  52. </view>
  53. -->
  54. </view>
  55. <!-- 我发出的消息 -->
  56. <view class="other" v-if="row.msg.userinfo.uid!=myuid">
  57. <view class="chat-time-container ">
  58. <view class="A"></view>
  59. <view class="B"><text class="text-info text-time" >{{row.msg.time}}</text></view>
  60. <view class="C"></view>
  61. </view>
  62. <!-- 文字消息 -->
  63. <view v-if="row.msg.type=='text'" class="chat-container right">
  64. <avatar :src="row.msg.userinfo.face"></avatar>
  65. <view class="chat-box ">
  66. <view v-if="row.msg.type=='text'" class="chat-msg chat-me-msg text-line">
  67. <text class="text-info">{{row.msg.content.text}}</text>
  68. </view>
  69. </view>
  70. </view>
  71. <!-- 图片消息 -->
  72. <view v-if="row.msg.type=='img'" class="chat-container right" @tap="showPic(row.msg)">
  73. <avatar :src="row.msg.userinfo.face"></avatar>
  74. <view class="chat-image" style="margin-right: 10rpx;">
  75. <image resize="contain" :src="row.msg.content.url" :style="{'width': row.msg.content.w+'rpx','height': row.msg.content.h+'rpx'}" class="img" />
  76. </view>
  77. </view>
  78. <!-- 语言消息 -->
  79. <view v-if="row.msg.type=='voice'" class="chat-container right" @tap="playVoice(row.msg)" :class="playMsgid == row.msg.id?'play':''">
  80. <avatar :src="row.msg.userinfo.face"></avatar>
  81. <view class="my-voice voice-icon right-radius" style="margin-right: 10rpx;">
  82. <image src="/static/theme/default/voice.png" style="width: 36rpx;height:36rpx;" />
  83. </view>
  84. <view class="my-voice voice-length left-radius">
  85. <text class="length"> {{row.msg.content.length}}</text>
  86. </view>
  87. </view> <!-- 语言消息 -->
  88. <!-- 红包 -->
  89. <!--
  90. <view v-if="row.msg.type=='redEnvelope'" class="chat-container right " @tap="openRedEnvelope(row.msg,index)">
  91. <avatar :src="row.msg.userinfo.face"></avatar>
  92. <image style="width: 250rpx; height: 313rpx;" src="/static/img/red-envelope.png"></image>
  93. <view class="tis">
  94. <!-- 点击开红包 -->
  95. <!--
  96. </view>
  97. <view class="blessing">
  98. {{row.msg.content.blessing}}
  99. </view>
  100. </view>
  101. -->
  102. </view>
  103. </block>
  104. </view>
  105. </scroll-view>
  106. </view>
  107. <!-- 抽屉栏 -->
  108. <view class="popup-box popup-layer" v-if="popupLayerShow"
  109. :class="popupLayerClass" @touchmove.stop.prevent="discard">
  110. <!-- 表情 -->
  111. <swiper class="emoji-box" v-if="hideEmoji" indicator-dots="true" duration="150">
  112. <swiper-item class="emoji-page" v-for="(page,pid) in emojiList" :key="pid" >
  113. <view class="emoji-icon" v-for="(em,eid) in page" :key="eid" @tap="addEmoji(em)" >
  114. <image :src="'/static/img/emoji/'+em.url" style="width: 50rpx;height: 50rpx;"></image>
  115. </view>
  116. </swiper-item>
  117. </swiper>
  118. <!-- 更多功能 相册-拍照-红包 funcList-->
  119. <swiper class="emoji-box" v-esle-if="hideMore" indicator-dots="true" duration="40">
  120. <swiper-item class="emoji-page" v-for="(page,pid) in funcList" :key="pid" >
  121. <view class="box-A box-icon-big-A" v-for="(em,eid) in page" :key="eid" @tap="chooseImage">
  122. <view class="box-B box-icon-big-B">
  123. <image :src="'/static/theme/default/'+em.url" style="width: 50rpx;height: 50rpx;" />
  124. </view>
  125. <view class="text-box"><text class="text-L">{{em.title}}</text></view>
  126. </view>
  127. </swiper-item>
  128. </swiper>
  129. </view>
  130. <!-- 底部输入 -->
  131. <view class="operations box" :style="{'bottom': bottom +'rpx'}">
  132. <!--<view class=" model"><text class="btn-font">+</text></view>-->
  133. <view class="btn-icon-position">
  134. <!-- 键盘输入 -->
  135. <view v-if="isVoice" @tap="keyboard_voice">
  136. <image src="/static/theme/default/keyboard.png" style="width: 62rpx;height: 62rpx;" />
  137. </view>
  138. <!-- 语音录入 -->
  139. <view v-else @tap="switchVoice" >
  140. <image src="/static/theme/default/voice_circle.png" style="width: 62rpx;height: 62rpx;" />
  141. </view>
  142. </view>
  143. <!-- 录音输入 -->
  144. <view v-if="isVoice" class=" inputbox" :style="{'width': input_width+'rpx'}">
  145. <view class="inputbox" ><text class="input-voice">{{voiceTis}}</text></view>
  146. </view>
  147. <!-- 文字输入 -->
  148. <view v-else class=" inputbox" :style="{'width': input_width+'rpx'}">
  149. <input class="input-msg" type="text" ref="messagesInput"
  150. auto-height="true" @focus="textareaFocus"
  151. v-model="chat.textMsg" placeholder="" />
  152. </view>
  153. <!-- <view class=" emjoicon"><text class="btn-font">+</text></view> -->
  154. <!-- 添加表情按钮 -->
  155. <view v-if="is_keyboard" class="btn-icon-position" @click="go_keyboard">
  156. <image src="/static/theme/default/keyboard.png" style="width: 62rpx;height: 62rpx;" />
  157. </view>
  158. <view v-else class="btn-icon-position" @tap="chooseEmoji">
  159. <image src="/static/theme/default/emoji.png" style="width: 62rpx;height: 62rpx;" />
  160. </view>
  161. <view class="send btn-icon-position">
  162. <!-- 发送文字 -->
  163. <view class="btn" @tap="sendText" v-if="is_textareaFocus">
  164. <text class="btn-title" >发送</text>
  165. </view>
  166. <!-- 相册 拍摄 -->
  167. <view v-else @tap="showMore">
  168. <image src="/static/theme/default/add.png" style="width: 62rpx;height: 62rpx;" />
  169. </view>
  170. </view>
  171. </view>
  172. </view>
  173. </view>
  174. </template>
  175. <script>
  176. import Avatar from './Avatar'
  177. import uniLoadMore from "@dcloudio/uni-ui/lib/uni-load-more/uni-load-more.vue";
  178. import emoj_data from '../../static/js/message/emoji_data.js';
  179. import _get from '../../common/_get';
  180. import _hook from '../../common/_hook';
  181. import _action from '../../common/_action';
  182. import _data from '../../common/_data';
  183. const globalEvent = weex.requireModule('globalEvent');
  184. export default {
  185. components:{Avatar},
  186. data() {
  187. return {
  188. num: "0",
  189. // 底部 相机 表情
  190. bottom:-2,
  191. hideEmoji:false, //隐藏表情 列表
  192. hideMore:false, //隐藏相册 拍摄 列表
  193. popupLayerShow: false,
  194. chat:{textMsg: ""},
  195. input_width: 480,
  196. is_keyboard:false,
  197. //文字消息
  198. msgList: {
  199. show_name: '',
  200. list: [],
  201. type: 0,
  202. is_msg: 0,
  203. is_action: 0,
  204. },
  205. msgImgList: [],
  206. //录音相关参数
  207. RECORDER: uni.getRecorderManager(),
  208. AUDIO: uni.createInnerAudioContext(),
  209. is_textareaFocus:false,
  210. myuid:0,
  211. isVoice:false,
  212. voiceTis:'按住 说话',
  213. recordTis:"手指上滑 取消发送",
  214. list: [
  215. {type:"system",msg:{id:0,type:"text",content:{text:"欢迎进入HM-chat聊天室"}}},
  216. {type:"user",msg:{id:1,type:"text",time:"12:56",userinfo:{uid:0,username:"大黑哥",face:"http://shejiao123bb.767717.com/static/photo/user/26/90.jpg?_=0.25159282457642607"},content:{text:"为什么温度会相差那么大?"}}},
  217. {type:"user",msg:{id:2,type:"text",time:"12:57",userinfo:{uid:1,username:"售后客服008",face:"http://shejiao123bb.767717.com/static/photo//group_photo/4a2e329a104c8b3d15a743f508be8ce1/90.jpg?_=0.25159282457642607"},content:{text:"这个是有偏差的,两个温度相差十几二十度是很正常的,如果相差五十度,那即是质量问题了。"}}},
  218. {type:"user",msg:{id:3,type:"voice",time:"12:59",userinfo:{uid:1,username:"售后客服008",face:"http://shejiao123bb.767717.com/static/photo/user/68/90.jpg?_=0.25159282457642607"},content:{url:"/static/voice/1.mp3",length:"00:06"}}},
  219. {type:"user",msg:{id:4,type:"voice",time:"13:05",userinfo:{uid:0,username:"大黑哥",face:"http://shejiao123bb.767717.com/static/photo/user/68/90.jpg?_=0.25159282457642607"},content:{url:"/static/voice/2.mp3",length:"00:06"}}},
  220. {type:"user",msg:{id:5,type:"img",time:"13:05",userinfo:{uid:0,username:"大黑哥",face:"http://shejiao123bb.767717.com/static/photo/user/68/90.jpg?_=0.25159282457642607"},content:{url:"/static/img/p10.jpg",w:200,h:200}}},
  221. {type:"user",msg:{id:6,type:"img",time:"12:59",userinfo:{uid:1,username:"售后客服008",face:"http://shejiao123bb.767717.com/static/photo/user/68/90.jpg?_=0.25159282457642607"},content:{url:"/static/img/q.jpg",w:1920,h:1080}}},
  222. {type:"system",msg:{id:7,type:"text",content:{text:"欢迎进入HM-chat聊天室"}}},
  223. {type:"system",msg:{id:9,type:"redEnvelope",content:{text:"售后客服008领取了你的红包"}}},
  224. {type:"user",msg:{id:10,type:"redEnvelope",time:"12:56",userinfo:{uid:0,username:"大黑哥",face:"http://shejiao123bb.767717.com/static/photo/user/26/90.jpg?_=0.25159282457642607"},content:{blessing:"恭喜发财,大吉大利,万事如意",rid:0,isReceived:false}}},
  225. {type:"user",msg:{id:11,type:"redEnvelope",time:"12:56",userinfo:{uid:1,username:"售后客服008",face:"http://shejiao123bb.767717.com/static/photo/user/26/90.jpg?_=0.25159282457642607"},content:{blessing:"恭喜发财",rid:1,isReceived:false}}},
  226. ],
  227. emojiList:[
  228. [{"url":"100.gif",alt:"[微笑]"},{"url":"101.gif",alt:"[伤心]"},{"url":"102.gif",alt:"[美女]"},{"url":"103.gif",alt:"[发呆]"},{"url":"104.gif",alt:"[墨镜]"},{"url":"105.gif",alt:"[哭]"},{"url":"106.gif",alt:"[羞]"},{"url":"107.gif",alt:"[哑]"},{"url":"108.gif",alt:"[睡]"},{"url":"109.gif",alt:"[哭]"},{"url":"110.gif",alt:"[囧]"},{"url":"111.gif",alt:"[怒]"},{"url":"112.gif",alt:"[调皮]"},{"url":"113.gif",alt:"[笑]"},{"url":"114.gif",alt:"[惊讶]"},{"url":"115.gif",alt:"[难过]"},{"url":"116.gif",alt:"[酷]"},{"url":"117.gif",alt:"[汗]"},{"url":"118.gif",alt:"[抓狂]"},{"url":"119.gif",alt:"[吐]"},{"url":"120.gif",alt:"[笑]"},{"url":"121.gif",alt:"[快乐]"},{"url":"122.gif",alt:"[奇]"},{"url":"123.gif",alt:"[傲]"}],
  229. [{"url":"124.gif",alt:"[饿]"},{"url":"125.gif",alt:"[累]"},{"url":"126.gif",alt:"[吓]"},{"url":"127.gif",alt:"[汗]"},{"url":"128.gif",alt:"[高兴]"},{"url":"129.gif",alt:"[闲]"},{"url":"130.gif",alt:"[努力]"},{"url":"131.gif",alt:"[骂]"},{"url":"132.gif",alt:"[疑问]"},{"url":"133.gif",alt:"[秘密]"},{"url":"134.gif",alt:"[乱]"},{"url":"135.gif",alt:"[疯]"},{"url":"136.gif",alt:"[哀]"},{"url":"137.gif",alt:"[鬼]"},{"url":"138.gif",alt:"[打击]"},{"url":"139.gif",alt:"[bye]"},{"url":"140.gif",alt:"[汗]"},{"url":"141.gif",alt:"[抠]"},{"url":"142.gif",alt:"[鼓掌]"},{"url":"143.gif",alt:"[糟糕]"},{"url":"144.gif",alt:"[恶搞]"},{"url":"145.gif",alt:"[什么]"},{"url":"146.gif",alt:"[什么]"},{"url":"147.gif",alt:"[累]"}],
  230. [{"url":"148.gif",alt:"[看]"},{"url":"149.gif",alt:"[难过]"},{"url":"150.gif",alt:"[难过]"},{"url":"151.gif",alt:"[坏]"},{"url":"152.gif",alt:"[亲]"},{"url":"153.gif",alt:"[吓]"},{"url":"154.gif",alt:"[可怜]"},{"url":"155.gif",alt:"[刀]"},{"url":"156.gif",alt:"[水果]"},{"url":"157.gif",alt:"[酒]"},{"url":"158.gif",alt:"[篮球]"},{"url":"159.gif",alt:"[乒乓]"},{"url":"160.gif",alt:"[咖啡]"},{"url":"161.gif",alt:"[美食]"},{"url":"162.gif",alt:"[动物]"},{"url":"163.gif",alt:"[鲜花]"},{"url":"164.gif",alt:"[枯]"},{"url":"165.gif",alt:"[唇]"},{"url":"166.gif",alt:"[爱]"},{"url":"167.gif",alt:"[分手]"},{"url":"168.gif",alt:"[生日]"},{"url":"169.gif",alt:"[电]"},{"url":"170.gif",alt:"[炸弹]"},{"url":"171.gif",alt:"[刀子]"}],
  231. [{"url":"172.gif",alt:"[足球]"},{"url":"173.gif",alt:"[瓢虫]"},{"url":"174.gif",alt:"[翔]"},{"url":"175.gif",alt:"[月亮]"},{"url":"176.gif",alt:"[太阳]"},{"url":"177.gif",alt:"[礼物]"},{"url":"178.gif",alt:"[抱抱]"},{"url":"179.gif",alt:"[拇指]"},{"url":"180.gif",alt:"[贬低]"},{"url":"181.gif",alt:"[握手]"},{"url":"182.gif",alt:"[剪刀手]"},{"url":"183.gif",alt:"[抱拳]"},{"url":"184.gif",alt:"[勾引]"},{"url":"185.gif",alt:"[拳头]"},{"url":"186.gif",alt:"[小拇指]"},{"url":"187.gif",alt:"[拇指八]"},{"url":"188.gif",alt:"[食指]"},{"url":"189.gif",alt:"[ok]"},{"url":"190.gif",alt:"[情侣]"},{"url":"191.gif",alt:"[爱心]"},{"url":"192.gif",alt:"[蹦哒]"},{"url":"193.gif",alt:"[颤抖]"},{"url":"194.gif",alt:"[怄气]"},{"url":"195.gif",alt:"[跳舞]"}],
  232. [{"url":"196.gif",alt:"[发呆]"},{"url":"197.gif",alt:"[背着]"},{"url":"198.gif",alt:"[伸手]"},{"url":"199.gif",alt:"[耍帅]"},{"url":"200.png",alt:"[微笑]"},{"url":"201.png",alt:"[生病]"},{"url":"202.png",alt:"[哭泣]"},{"url":"203.png",alt:"[吐舌]"},{"url":"204.png",alt:"[迷糊]"},{"url":"205.png",alt:"[瞪眼]"},{"url":"206.png",alt:"[恐怖]"},{"url":"207.png",alt:"[忧愁]"},{"url":"208.png",alt:"[眨眉]"},{"url":"209.png",alt:"[闭眼]"},{"url":"210.png",alt:"[鄙视]"},{"url":"211.png",alt:"[阴暗]"},{"url":"212.png",alt:"[小鬼]"},{"url":"213.png",alt:"[礼物]"},{"url":"214.png",alt:"[拜佛]"},{"url":"215.png",alt:"[力量]"},{"url":"216.png",alt:"[金钱]"},{"url":"217.png",alt:"[蛋糕]"},{"url":"218.png",alt:"[彩带]"},{"url":"219.png",alt:"[礼物]"},]
  233. ],
  234. funcList:[
  235. [{"url":"Image.png",title:"相册",alt:"[微笑]"},{"url":"camera.png",title:"拍摄",alt:"[拍摄]"},{"url":"RedEnvelopes.png",title:"红包",alt:"[红包]"},{"url":"video-call.png",title:"视频通话",alt:"[视频通话]"},{"url":"position.png",title:"位置",alt:"[位置]"},{"url":"transfer-accounts.png",title:"转账",alt:"[转账]"},{"url":"voice-input.png",title:"语音输入",alt:"[语音输入]"},{"url":"my-collection.png",title:"我的收藏",alt:"[我的收藏]"}],
  236. [{"url":"business-card.png",title:"名片",alt:"[名片]"},{"url":"file.png",title:"文件",alt:"[文件]"}]
  237. ],
  238. fontNameSearch: "\ue64e",
  239. }
  240. },
  241. onLoad(option) {
  242. //语音自然播放结束
  243. this.AUDIO.onEnded((res)=>{
  244. this.playMsgid = null;
  245. });
  246. //录音开始事件
  247. this.RECORDER.onStart((e)=>{
  248. this.recordBegin(e);
  249. })
  250. //录音结束事件
  251. this.RECORDER.onStop((e)=>{
  252. this.recordEnd(e);
  253. })
  254. setTimeout(() => {
  255. uni.getStorage({
  256. key:'message_list_id',
  257. success: (res) => {
  258. this.list_id = res.data;
  259. console.log("===获得上个页面传递的数据" + res.data)
  260. }
  261. })
  262. },200)
  263. },
  264. onUnload(){
  265. /** 这里只保留最新的15条会话记录,以保证初次加载性能 */
  266. let chat_data = this.msgList;
  267. chat_data.list = chat_data.list.slice(-15);
  268. _data.localData(this.list_id,chat_data);
  269. /** 去除当前会话的list_id */
  270. _data.localData('message_list_id','');
  271. /** 暂停语音播放 */
  272. this.AUDIO.pause();
  273. /** 移除监听事件 */
  274. uni.$off('data_chat_data_unshift');
  275. uni.$off('data_chat_data_push');
  276. uni.$off('data_chat_data');
  277. uni.$off('data_user_info');
  278. uni.$off('data_chat_data_delete');
  279. },
  280. onShow(){
  281. _hook.routeSonHook();
  282. /** 先移除监听事件(避免重复触发消息) */
  283. uni.$off('data_chat_data_unshift');
  284. uni.$off('data_chat_data_push');
  285. uni.$off('data_chat_data');
  286. uni.$off('data_user_info');
  287. uni.$off('data_chat_data_delete');
  288. let _this = this,
  289. chat_data = _data.localData(_this.list_id);
  290. _this.my_data = _data.data('user_info');
  291. if(chat_data && chat_data.list.length){
  292. _this.scrollAnimation = false;
  293. uni.setNavigationBarTitle({
  294. title: chat_data.show_name,
  295. });
  296. _this.addMsgImgList(chat_data.list);
  297. _this.msgList = chat_data;
  298. /** 滚动到指定位置 */
  299. _this.$nextTick(function() {
  300. _this.scrollToView = 'msg' + chat_data.list[chat_data.list.length - 1].msg.id;
  301. });
  302. /** 如果是群聊要实时检测群有无禁言 */
  303. if(chat_data.type == 1){
  304. _this.$httpSend({
  305. path: '/im/action/groupState',
  306. data: { list_id: _this.list_id },
  307. success(res) {
  308. _this.msgList.is_msg = res.is_msg;
  309. _this.msgList.is_action = res.is_action;
  310. }
  311. });
  312. }
  313. }
  314. else {
  315. _get.getChatData({
  316. send_data: {
  317. list_id: _this.list_id,
  318. time: 0,
  319. is_up: 1,
  320. },
  321. is_action_data: 1,
  322. });
  323. }
  324. /** 添加当前的会话list_id */
  325. _data.localData('message_list_id',this.list_id);
  326. /** 监听会话数据变化 */
  327. uni.$on('data_chat_data_unshift',function(data){
  328. data = _this.msgDataHandle(data);
  329. _this.scrollAnimation = false;
  330. let position_id = _this.msgList.list[0].msg.id;
  331. _this.msgList.list.unshift(...data);
  332. /** 滚动到指定位置 */
  333. _this.$nextTick(function() {
  334. _this.scrollToView = 'msg' + position_id;
  335. });
  336. });
  337. /** 监听会话数据变化 */
  338. uni.$on('data_chat_data_push',function(all_data){
  339. let data = _this.msgDataHandle(all_data[0]);
  340. _this.scrollAnimation = true;
  341. //_this.msgList.list.push(...data);
  342. _this.msgList.list = all_data[1];
  343. /** 滚动到指定位置 */
  344. _this.$nextTick(function() {
  345. _this.scrollToView = 'msg' + data[data.length - 1].msg.id;
  346. });
  347. });
  348. /** 监听撤回消息 */
  349. uni.$on('data_chat_data_delete',function(list){
  350. //_this.msgList.list.splice(key,1);
  351. //_this.$forceUpdate();
  352. _this.msgList.list = list;
  353. });
  354. /** 监听会话数据变化 */
  355. uni.$on('data_chat_data',function(data){
  356. uni.setNavigationBarTitle({
  357. title: data.show_name,
  358. });
  359. data.list = _this.msgDataHandle(data.list);
  360. _this.scrollAnimation = false;
  361. _this.msgList = data;
  362. /** 滚动到指定位置 */
  363. _this.$nextTick(function() {
  364. _this.scrollToView = 'msg' + data.list[data.list.length - 1].msg.id;
  365. });
  366. });
  367. /** 监听新的个人数据 */
  368. uni.$on('data_user_info',function(data){
  369. _this.my_data = data;
  370. });
  371. return;
  372. //模板借由本地缓存实现发红包效果,实际应用中请不要使用此方法。
  373. uni.getStorage({
  374. key: 'redEnvelopeData',
  375. success: (res)=>{
  376. console.log(res.data);
  377. let nowDate = new Date();
  378. let lastid = this.msgList.list[this.msgList.list.length-1].msg.id;
  379. lastid++;
  380. let row = {type:"user",msg:{id:lastid,type:"redEnvelope",time:nowDate.getHours()+":"+nowDate.getMinutes(),user_info:{uid:0,username:"大黑哥",face:"/static/img/face.jpg"},content:{blessing:res.data.blessing,rid:Math.floor(Math.random()*1000+1),isReceived:false}}};
  381. this.screenMsg(row);
  382. uni.removeStorage({key: 'redEnvelopeData'});
  383. }
  384. });
  385. },
  386. computed(){
  387. this.popupLayerShow = this.hideEmoji ? true: (this.hideMore?true:false);
  388. this.bottom=520;
  389. },
  390. created() {
  391. },
  392. methods:{
  393. // 计算文本信息是否长到绕行
  394. getStringLen(Str){
  395. let i,len,code;
  396. if(Str==null || Str == "") return 0;
  397. len = Str.length;
  398. for(i = 0;i < Str.length;i++)
  399. {
  400. code = Str.charCodeAt(i);
  401. if(code > 255) {len ++;}
  402. }
  403. return (len>18)?true:false;
  404. },
  405. // 接受消息(筛选处理)
  406. screenMsg(msg){
  407. //从长连接处转发给这个方法,进行筛选处理
  408. if(msg.type=='system'){
  409. // 系统消息
  410. switch (msg.msg.type){
  411. case 'text':
  412. this.addSystemTextMsg(msg);
  413. break;
  414. case 'redEnvelope':
  415. this.addSystemRedEnvelopeMsg(msg);
  416. break;
  417. }
  418. }else if(msg.type=='user'){
  419. // 用户消息
  420. switch (msg.msg.type){
  421. case 'text':
  422. this.addTextMsg(msg);
  423. break;
  424. case 'voice':
  425. this.addVoiceMsg(msg);
  426. break;
  427. case 'img':
  428. this.addImgMsg(msg);
  429. break;
  430. case 'redEnvelope':
  431. this.addRedEnvelopeMsg(msg);
  432. break;
  433. }
  434. console.log('用户消息');
  435. //非自己的消息震动
  436. if(msg.msg.userinfo.uid!=this.myuid){
  437. console.log('振动');
  438. uni.vibrateLong();
  439. }
  440. }
  441. this.$nextTick(function() {
  442. // 滚动到底
  443. this.scrollToView = 'msg'+msg.msg.id
  444. });
  445. },
  446. //更多功能(点击+弹出)
  447. showMore(){
  448. this.hideEmoji = false; //隐藏表情 列表
  449. this.hideMore = true;
  450. //this.popupLayerShow = this.hideMore ? true : false;
  451. //this.popupLayerShow = true;
  452. this.is_keyboard = false;
  453. this.is_textareaFocus = false;
  454. //this.bottom = 520;
  455. this.input_width = 480;
  456. this.isVoice = false;
  457. //this.hideEmoji = true;
  458. if(this.hideMore){
  459. //this.hideMore = false;
  460. this.openDrawer();
  461. }else{
  462. this.hideDrawer();
  463. }
  464. },
  465. // 切换语音/文字输入
  466. switchVoice(){
  467. this.input_width = 480;
  468. this.is_textareaFocus = false;
  469. this.hideDrawer();
  470. this.isVoice = true;
  471. this.is_keyboard = false;
  472. },
  473. keyboard_voice(){
  474. this.isVoice = false;
  475. },
  476. // 选择表情
  477. chooseEmoji(){
  478. this.hideEmoji = true; //隐藏表情 列表
  479. this.hideMore = false;
  480. //this.popupLayerShow = this.hideEmoji ? true: false;
  481. this.is_keyboard = true;
  482. //this.$refs.messagesInput.focus();
  483. if(this.hideEmoji){
  484. //this.hideEmoji = false;
  485. this.openDrawer();
  486. }else{
  487. this.hideDrawer();
  488. }
  489. },
  490. go_keyboard(){
  491. this.isVoice = false;
  492. this.$refs.messagesInput.focus();
  493. this.is_keyboard = false;
  494. this.hideEmoji = false; //隐藏表情 列表
  495. this.hideDrawer();
  496. },
  497. //添加表情
  498. addEmoji(em){
  499. this.chat.textMsg+=em.alt;
  500. },
  501. // 打开抽屉
  502. openDrawer(){
  503. this.bottom = 520;
  504. //this.popupLayerClass = true;
  505. this.popupLayerShow = true;
  506. },
  507. // 隐藏抽屉
  508. hideDrawer(){
  509. //this.popupLayerShow = this.hideEmoji ? true: false;
  510. this.popupLayerShow = false;
  511. this.hideMore = false;
  512. this.hideEmoji = false;
  513. this.bottom = -2;
  514. //this.popupLayerClass = false;
  515. setTimeout(()=>{
  516. //this.hideMore = true;
  517. //this.hideEmoji = true;
  518. },150);
  519. },
  520. // 发送文字消息
  521. sendText(){
  522. console.log("this.$refs.messages========",this.$refs.messages.value);
  523. console.log("11111========",this.chat.textMsg );
  524. this.hideDrawer();//隐藏抽屉
  525. if(!this.chat.textMsg){
  526. return;
  527. }
  528. //let content = this.replaceEmoji(this.chat.textMsg);
  529. let content = this.chat.textMsg ;//this.replaceEmoji(this.chat.textMsg);
  530. let msg = {text:content};
  531. console.log("$$$$====",this.chat.textMsg);
  532. //this.sendMsg(msg,'text');
  533. this.chat.textMsg = '';//清空输入框
  534. },
  535. // 发送消息
  536. sendMsg(content,type){
  537. //实际应用中,此处应该提交长连接,模板仅做本地处理。
  538. var nowDate = new Date();
  539. let lastid = this.msgList[this.msgList.length-1].msg.id;
  540. lastid++;
  541. let msg = {type:'user',msg:{id:lastid,time:nowDate.getHours()+":"+nowDate.getMinutes(),type:type,userinfo:{uid:0,username:"大黑哥",face:"/static/img/face.jpg"},content:content}}
  542. // 发送消息
  543. this.screenMsg(msg);
  544. // 定时器模拟对方回复,三秒
  545. setTimeout(()=>{
  546. lastid = this.msgList[this.msgList.length-1].msg.id;
  547. lastid++;
  548. msg = {type:'user',msg:{id:lastid,time:nowDate.getHours()+":"+nowDate.getMinutes(),type:type,userinfo:{uid:1,username:"售后客服008",face:"/static/img/im/face/face_2.jpg"},content:content}}
  549. // 本地模拟发送消息
  550. this.screenMsg(msg);
  551. },3000)
  552. },
  553. //获取焦点,如果不是选表情ing,则关闭抽屉
  554. textareaFocus(){
  555. this.input_width = 400;
  556. this.is_textareaFocus = true;
  557. //this.hideEmoji = false; //隐藏表情 列表
  558. //this.hideMore = false; //隐藏表情 列表
  559. this.popupLayerShow = false; //隐藏表情 列表
  560. //this.bottom = -2;
  561. console.log('this.is_textareaFocus',this.is_textareaFocus);
  562. //if(this.popupLayerClass=='true' && this.hideMore == false){
  563. this.hideDrawer();
  564. //}
  565. },
  566. // 添加文字消息到列表
  567. addTextMsg(msg){
  568. this.msgList.push(msg);
  569. },
  570. // 添加语音消息到列表
  571. addVoiceMsg(msg){
  572. this.msgList.push(msg);
  573. },
  574. // 添加图片消息到列表
  575. addImgMsg(msg){
  576. msg.msg.content = this.setPicSize(msg.msg.content);
  577. this.msgImgList.push(msg.msg.content.url);
  578. this.msgList.push(msg);
  579. },
  580. addRedEnvelopeMsg(msg){
  581. this.msgList.push(msg);
  582. },
  583. // 添加系统文字消息到列表
  584. addSystemTextMsg(msg){
  585. this.msgList.push(msg);
  586. },
  587. // 添加系统红包消息到列表
  588. addSystemRedEnvelopeMsg(msg){
  589. this.msgList.push(msg);
  590. },
  591. scrollToBottom () {
  592. if (!this.$refs.messages) {
  593. return
  594. }
  595. const lastMessage = this.$refs.messages[this.$refs.messages.length - 1]
  596. setTimeout(() => {
  597. dom.scrollToElement(lastMessage, {
  598. offset: 0,
  599. animated: true
  600. })
  601. }, 0)
  602. },
  603. }
  604. }
  605. </script>
  606. <style>
  607. /*
  608. @font-face {font-family: "iconfont";
  609. src: url('http://at.alicdn.com/t/iconfont.eot?t=1564049771516');
  610. src: url('http://at.alicdn.com/t/iconfont.eot?t=1564049771516#iefix') format('embedded-opentype'),
  611. url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'),
  612. url('http://at.alicdn.com/t/iconfont.woff?t=1564049771516') format('woff'),
  613. url('http://at.alicdn.com/t/iconfont.ttf?t=1564049771516') format('truetype'),
  614. url('http://at.alicdn.com/t/iconfont.svg?t=1564049771516#iconfont') format('svg');
  615. }
  616. */
  617. @font-face {font-family: "iconfont";
  618. src: url('http://at.alicdn.com/t/iconfont.eot?t=1564049771516'); /* IE9 */
  619. src: url('http://at.alicdn.com/t/iconfont.eot?t=1564049771516#iefix') format('embedded-opentype'), /* IE6-IE8 */
  620. url('http://at.alicdn.com/t/iconfont.woff?t=1564049771516') format('woff'),
  621. url('http://at.alicdn.com/t/iconfont.ttf?t=1564049771516') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
  622. url('http://at.alicdn.com/t/iconfont.svg?t=1564049771516#iconfont') format('svg'); /* iOS 4.1- */
  623. }
  624. .iconfont {
  625. font-family: "iconfont" !important;
  626. font-size: 16px;
  627. font-style: normal;
  628. }
  629. .wrapper {
  630. justify-content: space-between;
  631. background-color: #F3F3F3;
  632. }
  633. .chat-list {
  634. background-color: #F3F3F3;
  635. }
  636. .pages{
  637. width: 730rpx;
  638. margin-top: 0rpx;
  639. margin-right: 10rpx;
  640. margin-bottom: 10rpx;
  641. margin-left: 10rpx;
  642. }
  643. .chat-time-container{
  644. flex-direction: row;
  645. }
  646. .A {
  647. width: 330rpx;
  648. }
  649. .B {
  650. align-items: center;
  651. margin-top: 30rpx;
  652. margin-bottom: 30rpx;
  653. background-color: #DEDEDE;
  654. padding: 10rpx;
  655. border-radius: 10rpx;
  656. }
  657. .C {
  658. width:260rpx;
  659. }
  660. .D {
  661. width:100rpx;
  662. background-color:red;
  663. }
  664. .chat-container{
  665. flex-direction: row;
  666. justify-content: flex-start;
  667. margin: 5rpx;
  668. }
  669. .chat-avatar {
  670. background-color:#FFFFFF;
  671. width: 90rpx;
  672. height:90rpx;
  673. }
  674. .chat-box {
  675. width: 552rpx;
  676. margin-left: 10rpx;
  677. align-items:flex-start;
  678. }
  679. .chat-msg {
  680. background-color: #FFFFFF;
  681. width: 542rpx;
  682. margin-left: 3rpx;
  683. margin-right: 5rpx;
  684. padding-left: 15rpx;
  685. padding-right: 15rpx;
  686. padding-top: 15rpx;
  687. padding-bottom: 15rpx;
  688. border-radius: 15rpx;
  689. align-items:stretch;
  690. }
  691. .chat-me-msg{
  692. background-color: #b2e281;
  693. }
  694. .chat-time {
  695. width: 160rpx;
  696. height: 100rpx;
  697. margin-left: 10rpx;
  698. }
  699. .text-line {
  700. align-items:flex-start;
  701. }
  702. .text-info{
  703. align-items:flex-start;
  704. color: #000000;
  705. font-size: 28rpx;
  706. padding: 1rpx;
  707. }
  708. .text-name{
  709. color: #000000;
  710. font-size: 28rpx;
  711. }
  712. .text-time{
  713. color: #FFFFFF;
  714. font-size: 28rpx;
  715. }
  716. .length{
  717. font-size: 28rpx;
  718. }
  719. .chat-image{
  720. width: 542rpx;
  721. height: 280rpx;
  722. border-radius: 15rpx;
  723. }
  724. /* ----------- */
  725. .popup-layer{
  726. position: fixed;
  727. z-index: 20;
  728. bottom:-2rpx;
  729. flex:2;
  730. }
  731. .popup-box{
  732. width: 750rpx;
  733. height: 522rpx;
  734. flex-direction: row;
  735. background-color: #f2f2f2;
  736. }
  737. .iconfont {
  738. font-family: iconfont;
  739. }
  740. .icon-like {
  741. width: 34rpx;
  742. height: 34rpx;
  743. font-size: 28rpx;
  744. }
  745. .operations {
  746. width: 750rpx;
  747. height: 120rpx;
  748. padding-top: 0rpx;
  749. padding-bottom: 0rpx;
  750. padding-left: 1rpx;
  751. padding-right: 1rpx;
  752. background-color: #f2f2f2;
  753. flex-direction: row;
  754. position: fixed;
  755. z-index: 20;
  756. bottom:520rpx;
  757. flex:2;
  758. }
  759. .emoji-box {
  760. width: 735rpx;
  761. height: 522rpx;
  762. margin-left: 15rpx;
  763. background-color: #f2f2f2;
  764. }
  765. .emoji-page{
  766. padding-top:50rpx;
  767. padding-bottom: 50rpx;
  768. flex-direction: row; flex-wrap:wrap;
  769. background-color: #f2f2f2;
  770. }
  771. .emoji-icon{
  772. padding-left: 20rpx;
  773. padding-right: 15rpx;
  774. padding-top:30rpx;
  775. padding-bottom: 30rpx;
  776. width: 90rpx;
  777. height:110rpx;
  778. }
  779. .box {
  780. background-color: #EEEEEE;
  781. height:120rpx;
  782. padding-top:5rpx;
  783. border-style: solid;
  784. border-top-width: 1rpx;
  785. border-top-color: #BEBEBE;
  786. }
  787. .box-A {
  788. justify-content: center;
  789. align-items: center;
  790. margin-left: 35rpx;
  791. margin-right: 20rpx;
  792. margin-top: 10rpx;
  793. margin-bottom: 10rpx;
  794. }
  795. .box-B{
  796. background-color: #ffffff;
  797. border-radius: 20rpx;
  798. padding-left: 30rpx;
  799. padding-right: 30rpx;
  800. padding-top: 30rpx;
  801. padding-bottom: 30rpx;
  802. }
  803. .box-icon-big-A{
  804. height: 180rpx;
  805. width: 120rpx;
  806. }
  807. .box-icon-big-B{
  808. height: 100rpx;
  809. }
  810. .text-box {
  811. height: 60rpx;
  812. width: 120rpx;
  813. font-size: 16rpx;
  814. align-items: center;
  815. }
  816. .text-L{
  817. padding-top:15rpx;
  818. padding-bottom: 15rpx;
  819. font-size: 20rpx;
  820. color:#6D6D72;
  821. }
  822. .btn-font{
  823. font-size: 28rpx;
  824. }
  825. .model {
  826. align-items:center;
  827. background-color: #FFFFFF;
  828. width: 72rpx;
  829. height:72rpx;
  830. margin-top: 20rpx;
  831. margin-left: 10rpx;
  832. margin-right: 10rpx;
  833. padding-top:10rpx;
  834. padding-bottom: 10rpx;
  835. border-radius: 36rpx;
  836. border-style: solid;
  837. border-width: 1rpx;
  838. border-color: #000000;
  839. }
  840. .inputbox {
  841. background-color:#FFFFFF;
  842. width: 400rpx;
  843. height: 80rpx;
  844. margin-top: 15rpx;
  845. border-radius: 80rpx;
  846. }
  847. .input-msg{
  848. font-size: 28rpx;
  849. color: #000000;
  850. margin-top: 10rpx;
  851. margin-left: 10rpx;
  852. margin-right: 10rpx;
  853. padding-left: 10px;
  854. padding-right: 20px;
  855. padding-top:10rpx;
  856. }
  857. .input-voice{
  858. font-size: 28rpx;
  859. color: #000000;
  860. margin-top: 10rpx;
  861. margin-left: 10rpx;
  862. margin-right: 10rpx;
  863. padding-left: 110px;
  864. padding-right: 20px;
  865. }
  866. .emjoicon {
  867. align-items:center;
  868. background-color: #FFFFFF;
  869. width: 72rpx;
  870. height:72rpx;
  871. margin-top: 20rpx;
  872. margin-left: 15rpx;
  873. margin-right: 15rpx;
  874. padding-top:10rpx;
  875. padding-bottom: 10rpx;
  876. border-radius: 36rpx;
  877. border-style: solid;
  878. border-width: 1rpx;
  879. border-color: #000000;
  880. }
  881. /*
  882. .send {
  883. align-items:center;
  884. background-color: #FFFFFF;
  885. width: 36rpx;
  886. height:36rpx;
  887. margin-top: 15rpx;
  888. margin-left: 5rpx;
  889. margin-right: 5rpx;
  890. padding-top:5rpx;
  891. padding-bottom: 10rpx;
  892. border-radius: 18rpx;
  893. border-style: solid;
  894. border-width: 1rpx;
  895. border-color: #000000;
  896. }
  897. */
  898. .right{
  899. /* justify-content:flex-end; */
  900. flex-direction:row-reverse;
  901. }
  902. .left{
  903. /* justify-content:flex-start; */
  904. flex-direction:row;
  905. }
  906. .send{
  907. /* #ifdef H5 */
  908. margin-left: 20rpx;
  909. /* #endif */
  910. align-items: center;
  911. }
  912. .btn{
  913. width: 150rpx;
  914. height: 70rpx;
  915. justify-content: center;
  916. align-items: center;
  917. background-color:forestgreen;
  918. border-radius: 10rpx;
  919. margin-top: 0rpx;
  920. padding-right: 10rpx;
  921. padding-left: 10rpx;
  922. }
  923. .btn-title{
  924. color:#FFFFFF;
  925. font-size: 28rpx;
  926. }
  927. .btn-icon-position{
  928. margin-top: 25rpx;
  929. margin-left:10rpx;
  930. margin-right:10rpx;
  931. }
  932. .my-voice{
  933. height: 90rpx;
  934. background-color: #b2e281;
  935. }
  936. .other-voice{
  937. height: 90rpx;
  938. background-color: #ffffff;
  939. }
  940. .voice-icon{
  941. width: 56rpx;
  942. height: 90rpx;
  943. padding-top: 25rpx;
  944. padding-right: 10rpx;
  945. padding-left: 10rpx;
  946. }
  947. .voice-length{
  948. height: 90rpx;
  949. padding-top: 28rpx;
  950. padding-right: 15rpx;
  951. padding-left: 15rpx;
  952. }
  953. .left-radius
  954. {
  955. border-top-left-radius: 15rpx;
  956. border-bottom-left-radius: 15rpx;
  957. height: 90rpx;
  958. }
  959. .right-radius
  960. {
  961. border-top-right-radius: 15rpx;
  962. border-bottom-right-radius: 15rpx;
  963. height: 90rpx;
  964. }
  965. .icon:after
  966. {
  967. border-style: solid;
  968. }
  969. .img{
  970. background-color: transparent;
  971. padding:0;
  972. overflow: hidden;
  973. width: 500rpx;
  974. height:616rpx;
  975. }
  976. .red-envelope{
  977. background-color: transparent;
  978. padding:0;
  979. overflow: hidden;
  980. justify-content: center;
  981. align-items: flex-start;
  982. }
  983. .tis{
  984. /*position: absolute;
  985. top: 6%;*/
  986. font-size: 12rpx;
  987. color: #9c1712;
  988. }
  989. .blessing{
  990. /*
  991. position: absolute;
  992. bottom: 14%;
  993. */
  994. justify-content:space-between;
  995. z-index:30;
  996. top:-160rpx;
  997. text-align: center;
  998. /*background-image:url(../../static/img/red-envelope.png); */
  999. color: #e9b874;
  1000. width: 250rpx;
  1001. height:160rpx;
  1002. font-size: 12rpx;
  1003. }
  1004. </style>