message.1.nvue 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962
  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. const globalEvent = weex.requireModule('globalEvent');
  178. export default {
  179. components:{Avatar},
  180. data() {
  181. return {
  182. num: "0",
  183. // 底部 相机 表情
  184. bottom:-2,
  185. hideEmoji:false, //隐藏表情 列表
  186. hideMore:false, //隐藏相册 拍摄 列表
  187. popupLayerShow: false,
  188. chat:{textMsg: ""},
  189. input_width: 480,
  190. is_keyboard:false,
  191. //文字消息
  192. is_textareaFocus:false,
  193. myuid:0,
  194. isVoice:false,
  195. voiceTis:'按住 说话',
  196. recordTis:"手指上滑 取消发送",
  197. list: [
  198. {type:"system",msg:{id:0,type:"text",content:{text:"欢迎进入HM-chat聊天室"}}},
  199. {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:"为什么温度会相差那么大?"}}},
  200. {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:"这个是有偏差的,两个温度相差十几二十度是很正常的,如果相差五十度,那即是质量问题了。"}}},
  201. {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"}}},
  202. {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"}}},
  203. {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}}},
  204. {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}}},
  205. {type:"system",msg:{id:7,type:"text",content:{text:"欢迎进入HM-chat聊天室"}}},
  206. {type:"system",msg:{id:9,type:"redEnvelope",content:{text:"售后客服008领取了你的红包"}}},
  207. {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}}},
  208. {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}}},
  209. ],
  210. emojiList:[
  211. [{"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:"[傲]"}],
  212. [{"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:"[累]"}],
  213. [{"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:"[刀子]"}],
  214. [{"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:"[跳舞]"}],
  215. [{"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:"[礼物]"},]
  216. ],
  217. funcList:[
  218. [{"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:"[我的收藏]"}],
  219. [{"url":"business-card.png",title:"名片",alt:"[名片]"},{"url":"file.png",title:"文件",alt:"[文件]"}]
  220. ],
  221. fontNameSearch: "\ue64e",
  222. }
  223. },
  224. onLoad(option) {
  225. setTimeout(() => {
  226. uni.getStorage({
  227. key:'list_id',
  228. success: (res) => {
  229. console.log("===获得上个页面传递的数据" + res.data)
  230. }
  231. })
  232. },200)
  233. },
  234. computed(){
  235. this.popupLayerShow = this.hideEmoji ? true: (this.hideMore?true:false);
  236. this.bottom=520;
  237. },
  238. created() {
  239. },
  240. methods:{
  241. // 计算文本信息是否长到绕行
  242. getStringLen(Str){
  243. let i,len,code;
  244. if(Str==null || Str == "") return 0;
  245. len = Str.length;
  246. for(i = 0;i < Str.length;i++)
  247. {
  248. code = Str.charCodeAt(i);
  249. if(code > 255) {len ++;}
  250. }
  251. return (len>18)?true:false;
  252. },
  253. // 接受消息(筛选处理)
  254. screenMsg(msg){
  255. //从长连接处转发给这个方法,进行筛选处理
  256. if(msg.type=='system'){
  257. // 系统消息
  258. switch (msg.msg.type){
  259. case 'text':
  260. this.addSystemTextMsg(msg);
  261. break;
  262. case 'redEnvelope':
  263. this.addSystemRedEnvelopeMsg(msg);
  264. break;
  265. }
  266. }else if(msg.type=='user'){
  267. // 用户消息
  268. switch (msg.msg.type){
  269. case 'text':
  270. this.addTextMsg(msg);
  271. break;
  272. case 'voice':
  273. this.addVoiceMsg(msg);
  274. break;
  275. case 'img':
  276. this.addImgMsg(msg);
  277. break;
  278. case 'redEnvelope':
  279. this.addRedEnvelopeMsg(msg);
  280. break;
  281. }
  282. console.log('用户消息');
  283. //非自己的消息震动
  284. if(msg.msg.userinfo.uid!=this.myuid){
  285. console.log('振动');
  286. uni.vibrateLong();
  287. }
  288. }
  289. this.$nextTick(function() {
  290. // 滚动到底
  291. this.scrollToView = 'msg'+msg.msg.id
  292. });
  293. },
  294. //更多功能(点击+弹出)
  295. showMore(){
  296. this.hideEmoji = false; //隐藏表情 列表
  297. this.hideMore = true;
  298. //this.popupLayerShow = this.hideMore ? true : false;
  299. //this.popupLayerShow = true;
  300. this.is_keyboard = false;
  301. this.is_textareaFocus = false;
  302. //this.bottom = 520;
  303. this.input_width = 480;
  304. this.isVoice = false;
  305. //this.hideEmoji = true;
  306. if(this.hideMore){
  307. //this.hideMore = false;
  308. this.openDrawer();
  309. }else{
  310. this.hideDrawer();
  311. }
  312. },
  313. // 切换语音/文字输入
  314. switchVoice(){
  315. this.input_width = 480;
  316. this.is_textareaFocus = false;
  317. this.hideDrawer();
  318. this.isVoice = true;
  319. this.is_keyboard = false;
  320. },
  321. keyboard_voice(){
  322. this.isVoice = false;
  323. },
  324. // 选择表情
  325. chooseEmoji(){
  326. this.hideEmoji = true; //隐藏表情 列表
  327. this.hideMore = false;
  328. //this.popupLayerShow = this.hideEmoji ? true: false;
  329. this.is_keyboard = true;
  330. //this.$refs.messagesInput.focus();
  331. if(this.hideEmoji){
  332. //this.hideEmoji = false;
  333. this.openDrawer();
  334. }else{
  335. this.hideDrawer();
  336. }
  337. },
  338. go_keyboard(){
  339. this.isVoice = false;
  340. this.$refs.messagesInput.focus();
  341. this.is_keyboard = false;
  342. this.hideEmoji = false; //隐藏表情 列表
  343. this.hideDrawer();
  344. },
  345. //添加表情
  346. addEmoji(em){
  347. this.chat.textMsg+=em.alt;
  348. },
  349. // 打开抽屉
  350. openDrawer(){
  351. this.bottom = 520;
  352. //this.popupLayerClass = true;
  353. this.popupLayerShow = true;
  354. },
  355. // 隐藏抽屉
  356. hideDrawer(){
  357. //this.popupLayerShow = this.hideEmoji ? true: false;
  358. this.popupLayerShow = false;
  359. this.hideMore = false;
  360. this.hideEmoji = false;
  361. this.bottom = -2;
  362. //this.popupLayerClass = false;
  363. setTimeout(()=>{
  364. //this.hideMore = true;
  365. //this.hideEmoji = true;
  366. },150);
  367. },
  368. // 发送文字消息
  369. sendText(){
  370. console.log("this.$refs.messages========",this.$refs.messages.value);
  371. console.log("11111========",this.chat.textMsg );
  372. this.hideDrawer();//隐藏抽屉
  373. if(!this.chat.textMsg){
  374. return;
  375. }
  376. //let content = this.replaceEmoji(this.chat.textMsg);
  377. let content = this.chat.textMsg ;//this.replaceEmoji(this.chat.textMsg);
  378. let msg = {text:content};
  379. console.log("$$$$====",this.chat.textMsg);
  380. //this.sendMsg(msg,'text');
  381. this.chat.textMsg = '';//清空输入框
  382. },
  383. // 发送消息
  384. sendMsg(content,type){
  385. //实际应用中,此处应该提交长连接,模板仅做本地处理。
  386. var nowDate = new Date();
  387. let lastid = this.msgList[this.msgList.length-1].msg.id;
  388. lastid++;
  389. 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}}
  390. // 发送消息
  391. this.screenMsg(msg);
  392. // 定时器模拟对方回复,三秒
  393. setTimeout(()=>{
  394. lastid = this.msgList[this.msgList.length-1].msg.id;
  395. lastid++;
  396. 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}}
  397. // 本地模拟发送消息
  398. this.screenMsg(msg);
  399. },3000)
  400. },
  401. //获取焦点,如果不是选表情ing,则关闭抽屉
  402. textareaFocus(){
  403. this.input_width = 400;
  404. this.is_textareaFocus = true;
  405. //this.hideEmoji = false; //隐藏表情 列表
  406. //this.hideMore = false; //隐藏表情 列表
  407. this.popupLayerShow = false; //隐藏表情 列表
  408. //this.bottom = -2;
  409. console.log('this.is_textareaFocus',this.is_textareaFocus);
  410. //if(this.popupLayerClass=='true' && this.hideMore == false){
  411. this.hideDrawer();
  412. //}
  413. },
  414. // 添加文字消息到列表
  415. addTextMsg(msg){
  416. this.msgList.push(msg);
  417. },
  418. // 添加语音消息到列表
  419. addVoiceMsg(msg){
  420. this.msgList.push(msg);
  421. },
  422. // 添加图片消息到列表
  423. addImgMsg(msg){
  424. msg.msg.content = this.setPicSize(msg.msg.content);
  425. this.msgImgList.push(msg.msg.content.url);
  426. this.msgList.push(msg);
  427. },
  428. addRedEnvelopeMsg(msg){
  429. this.msgList.push(msg);
  430. },
  431. // 添加系统文字消息到列表
  432. addSystemTextMsg(msg){
  433. this.msgList.push(msg);
  434. },
  435. // 添加系统红包消息到列表
  436. addSystemRedEnvelopeMsg(msg){
  437. this.msgList.push(msg);
  438. },
  439. scrollToBottom () {
  440. if (!this.$refs.messages) {
  441. return
  442. }
  443. const lastMessage = this.$refs.messages[this.$refs.messages.length - 1]
  444. setTimeout(() => {
  445. dom.scrollToElement(lastMessage, {
  446. offset: 0,
  447. animated: true
  448. })
  449. }, 0)
  450. },
  451. }
  452. }
  453. </script>
  454. <style>
  455. /*
  456. @font-face {font-family: "iconfont";
  457. src: url('http://at.alicdn.com/t/iconfont.eot?t=1564049771516');
  458. src: url('http://at.alicdn.com/t/iconfont.eot?t=1564049771516#iefix') format('embedded-opentype'),
  459. url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'),
  460. url('http://at.alicdn.com/t/iconfont.woff?t=1564049771516') format('woff'),
  461. url('http://at.alicdn.com/t/iconfont.ttf?t=1564049771516') format('truetype'),
  462. url('http://at.alicdn.com/t/iconfont.svg?t=1564049771516#iconfont') format('svg');
  463. }
  464. */
  465. @font-face {font-family: "iconfont";
  466. src: url('http://at.alicdn.com/t/iconfont.eot?t=1564049771516'); /* IE9 */
  467. src: url('http://at.alicdn.com/t/iconfont.eot?t=1564049771516#iefix') format('embedded-opentype'), /* IE6-IE8 */
  468. url('http://at.alicdn.com/t/iconfont.woff?t=1564049771516') format('woff'),
  469. url('http://at.alicdn.com/t/iconfont.ttf?t=1564049771516') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
  470. url('http://at.alicdn.com/t/iconfont.svg?t=1564049771516#iconfont') format('svg'); /* iOS 4.1- */
  471. }
  472. .iconfont {
  473. font-family: "iconfont" !important;
  474. font-size: 16px;
  475. font-style: normal;
  476. }
  477. .wrapper {
  478. justify-content: space-between;
  479. background-color: #F3F3F3;
  480. }
  481. .chat-list {
  482. background-color: #F3F3F3;
  483. }
  484. .pages{
  485. width: 730rpx;
  486. margin-top: 0rpx;
  487. margin-right: 10rpx;
  488. margin-bottom: 10rpx;
  489. margin-left: 10rpx;
  490. }
  491. .chat-time-container{
  492. flex-direction: row;
  493. }
  494. .A {
  495. width: 330rpx;
  496. }
  497. .B {
  498. align-items: center;
  499. margin-top: 30rpx;
  500. margin-bottom: 30rpx;
  501. background-color: #DEDEDE;
  502. padding: 10rpx;
  503. border-radius: 10rpx;
  504. }
  505. .C {
  506. width:260rpx;
  507. }
  508. .D {
  509. width:100rpx;
  510. background-color:red;
  511. }
  512. .chat-container{
  513. flex-direction: row;
  514. justify-content: flex-start;
  515. margin: 5rpx;
  516. }
  517. .chat-avatar {
  518. background-color:#FFFFFF;
  519. width: 90rpx;
  520. height:90rpx;
  521. }
  522. .chat-box {
  523. width: 552rpx;
  524. margin-left: 10rpx;
  525. align-items:flex-start;
  526. }
  527. .chat-msg {
  528. background-color: #FFFFFF;
  529. width: 542rpx;
  530. margin-left: 3rpx;
  531. margin-right: 5rpx;
  532. padding-left: 15rpx;
  533. padding-right: 15rpx;
  534. padding-top: 15rpx;
  535. padding-bottom: 15rpx;
  536. border-radius: 15rpx;
  537. align-items:stretch;
  538. }
  539. .chat-me-msg{
  540. background-color: #b2e281;
  541. }
  542. .chat-time {
  543. width: 160rpx;
  544. height: 100rpx;
  545. margin-left: 10rpx;
  546. }
  547. .text-line {
  548. align-items:flex-start;
  549. }
  550. .text-info{
  551. align-items:flex-start;
  552. color: #000000;
  553. font-size: 28rpx;
  554. padding: 1rpx;
  555. }
  556. .text-name{
  557. color: #000000;
  558. font-size: 28rpx;
  559. }
  560. .text-time{
  561. color: #FFFFFF;
  562. font-size: 28rpx;
  563. }
  564. .length{
  565. font-size: 28rpx;
  566. }
  567. .chat-image{
  568. width: 542rpx;
  569. height: 280rpx;
  570. border-radius: 15rpx;
  571. }
  572. /* ----------- */
  573. .popup-layer{
  574. position: fixed;
  575. z-index: 20;
  576. bottom:-2rpx;
  577. flex:2;
  578. }
  579. .popup-box{
  580. width: 750rpx;
  581. height: 522rpx;
  582. flex-direction: row;
  583. background-color: #f2f2f2;
  584. }
  585. .iconfont {
  586. font-family: iconfont;
  587. }
  588. .icon-like {
  589. width: 34rpx;
  590. height: 34rpx;
  591. font-size: 28rpx;
  592. }
  593. .operations {
  594. width: 750rpx;
  595. height: 120rpx;
  596. padding-top: 0rpx;
  597. padding-bottom: 0rpx;
  598. padding-left: 1rpx;
  599. padding-right: 1rpx;
  600. background-color: #f2f2f2;
  601. flex-direction: row;
  602. position: fixed;
  603. z-index: 20;
  604. bottom:520rpx;
  605. flex:2;
  606. }
  607. .emoji-box {
  608. width: 735rpx;
  609. height: 522rpx;
  610. margin-left: 15rpx;
  611. background-color: #f2f2f2;
  612. }
  613. .emoji-page{
  614. padding-top:50rpx;
  615. padding-bottom: 50rpx;
  616. flex-direction: row; flex-wrap:wrap;
  617. background-color: #f2f2f2;
  618. }
  619. .emoji-icon{
  620. padding-left: 20rpx;
  621. padding-right: 15rpx;
  622. padding-top:30rpx;
  623. padding-bottom: 30rpx;
  624. width: 90rpx;
  625. height:110rpx;
  626. }
  627. .box {
  628. background-color: #EEEEEE;
  629. height:120rpx;
  630. padding-top:5rpx;
  631. border-style: solid;
  632. border-top-width: 1rpx;
  633. border-top-color: #BEBEBE;
  634. }
  635. .box-A {
  636. justify-content: center;
  637. align-items: center;
  638. margin-left: 35rpx;
  639. margin-right: 20rpx;
  640. margin-top: 10rpx;
  641. margin-bottom: 10rpx;
  642. }
  643. .box-B{
  644. background-color: #ffffff;
  645. border-radius: 20rpx;
  646. padding-left: 30rpx;
  647. padding-right: 30rpx;
  648. padding-top: 30rpx;
  649. padding-bottom: 30rpx;
  650. }
  651. .box-icon-big-A{
  652. height: 180rpx;
  653. width: 120rpx;
  654. }
  655. .box-icon-big-B{
  656. height: 100rpx;
  657. }
  658. .text-box {
  659. height: 60rpx;
  660. width: 120rpx;
  661. font-size: 16rpx;
  662. align-items: center;
  663. }
  664. .text-L{
  665. padding-top:15rpx;
  666. padding-bottom: 15rpx;
  667. font-size: 20rpx;
  668. color:#6D6D72;
  669. }
  670. .btn-font{
  671. font-size: 28rpx;
  672. }
  673. .model {
  674. align-items:center;
  675. background-color: #FFFFFF;
  676. width: 72rpx;
  677. height:72rpx;
  678. margin-top: 20rpx;
  679. margin-left: 10rpx;
  680. margin-right: 10rpx;
  681. padding-top:10rpx;
  682. padding-bottom: 10rpx;
  683. border-radius: 36rpx;
  684. border-style: solid;
  685. border-width: 1rpx;
  686. border-color: #000000;
  687. }
  688. .inputbox {
  689. background-color:#FFFFFF;
  690. width: 400rpx;
  691. height: 80rpx;
  692. margin-top: 15rpx;
  693. border-radius: 80rpx;
  694. }
  695. .input-msg{
  696. font-size: 28rpx;
  697. color: #000000;
  698. margin-top: 10rpx;
  699. margin-left: 10rpx;
  700. margin-right: 10rpx;
  701. padding-left: 10px;
  702. padding-right: 20px;
  703. padding-top:10rpx;
  704. }
  705. .input-voice{
  706. font-size: 28rpx;
  707. color: #000000;
  708. margin-top: 10rpx;
  709. margin-left: 10rpx;
  710. margin-right: 10rpx;
  711. padding-left: 110px;
  712. padding-right: 20px;
  713. }
  714. .emjoicon {
  715. align-items:center;
  716. background-color: #FFFFFF;
  717. width: 72rpx;
  718. height:72rpx;
  719. margin-top: 20rpx;
  720. margin-left: 15rpx;
  721. margin-right: 15rpx;
  722. padding-top:10rpx;
  723. padding-bottom: 10rpx;
  724. border-radius: 36rpx;
  725. border-style: solid;
  726. border-width: 1rpx;
  727. border-color: #000000;
  728. }
  729. /*
  730. .send {
  731. align-items:center;
  732. background-color: #FFFFFF;
  733. width: 36rpx;
  734. height:36rpx;
  735. margin-top: 15rpx;
  736. margin-left: 5rpx;
  737. margin-right: 5rpx;
  738. padding-top:5rpx;
  739. padding-bottom: 10rpx;
  740. border-radius: 18rpx;
  741. border-style: solid;
  742. border-width: 1rpx;
  743. border-color: #000000;
  744. }
  745. */
  746. .right{
  747. /* justify-content:flex-end; */
  748. flex-direction:row-reverse;
  749. }
  750. .left{
  751. /* justify-content:flex-start; */
  752. flex-direction:row;
  753. }
  754. .send{
  755. /* #ifdef H5 */
  756. margin-left: 20rpx;
  757. /* #endif */
  758. align-items: center;
  759. }
  760. .btn{
  761. width: 150rpx;
  762. height: 70rpx;
  763. justify-content: center;
  764. align-items: center;
  765. background-color:forestgreen;
  766. border-radius: 10rpx;
  767. margin-top: 0rpx;
  768. padding-right: 10rpx;
  769. padding-left: 10rpx;
  770. }
  771. .btn-title{
  772. color:#FFFFFF;
  773. font-size: 28rpx;
  774. }
  775. .btn-icon-position{
  776. margin-top: 25rpx;
  777. margin-left:10rpx;
  778. margin-right:10rpx;
  779. }
  780. .my-voice{
  781. height: 90rpx;
  782. background-color: #b2e281;
  783. }
  784. .other-voice{
  785. height: 90rpx;
  786. background-color: #ffffff;
  787. }
  788. .voice-icon{
  789. width: 56rpx;
  790. height: 90rpx;
  791. padding-top: 25rpx;
  792. padding-right: 10rpx;
  793. padding-left: 10rpx;
  794. }
  795. .voice-length{
  796. height: 90rpx;
  797. padding-top: 28rpx;
  798. padding-right: 15rpx;
  799. padding-left: 15rpx;
  800. }
  801. .left-radius
  802. {
  803. border-top-left-radius: 15rpx;
  804. border-bottom-left-radius: 15rpx;
  805. height: 90rpx;
  806. }
  807. .right-radius
  808. {
  809. border-top-right-radius: 15rpx;
  810. border-bottom-right-radius: 15rpx;
  811. height: 90rpx;
  812. }
  813. .icon:after
  814. {
  815. border-style: solid;
  816. }
  817. .img{
  818. background-color: transparent;
  819. padding:0;
  820. overflow: hidden;
  821. width: 500rpx;
  822. height:616rpx;
  823. }
  824. .red-envelope{
  825. background-color: transparent;
  826. padding:0;
  827. overflow: hidden;
  828. justify-content: center;
  829. align-items: flex-start;
  830. }
  831. .tis{
  832. /*position: absolute;
  833. top: 6%;*/
  834. font-size: 12rpx;
  835. color: #9c1712;
  836. }
  837. .blessing{
  838. /*
  839. position: absolute;
  840. bottom: 14%;
  841. */
  842. justify-content:space-between;
  843. z-index:30;
  844. top:-160rpx;
  845. text-align: center;
  846. /*background-image:url(../../static/img/red-envelope.png); */
  847. color: #e9b874;
  848. width: 250rpx;
  849. height:160rpx;
  850. font-size: 12rpx;
  851. }
  852. </style>