<template> <div class="m-chat-emoji"> <div class="emoji-content"> <div class="cnt"> <span class="emoji-item" :class="{'pinup-item':item.type==='pinup'}" v-for="item in currEmoji.list" @click.stop="selectEmoji(item)"> <img :src="item.img"> </span> </div> </div> <div class="emoji-channel"> <span class="emoji-album" :class="{active: item.name==currAlbum}" v-for="item in emoji" @click.stop="selectAlbum(item)"> <img :src="item.album"> </span><span v-if="type==='session'" class="emoji-album" :class="{active: item.name==currAlbum}" v-for="item in pinup" @click.stop="selectAlbum(item)"> <img :src="item.album"> </span> </div> </div> </template> <script> import emojiObj from '../../configs/emoji' import util from '../../utils' import config from '../../configs' import pageUtil from '../../utils/page' function genEmojiList (type, emojiList) { let result = {} for (let name in emojiList) { let emojiMap = emojiList[name] let list = [] for (let key in emojiMap) { list.push({ type, name, key, img: emojiMap[key].img }) } if (list.length > 0) { result[name] = { type, name, list, album: list[0].img } } } return result } export default { props: { type: String, scene: String, to: String }, data () { return { currType: 'emoji', currAlbum: 'emoji' } }, computed: { emoji () { return genEmojiList('emoji', emojiObj.emojiList) }, pinup () { return genEmojiList('pinup', emojiObj.pinupList) }, currEmoji () { if (this.currType === 'emoji') { return this.emoji[this.currAlbum] } else if (this.currType === 'pinup') { return this.pinup[this.currAlbum] } return [] } }, methods: { selectAlbum (album) { this.currType = album.type this.currAlbum = album.name }, selectEmoji (emoji) { if (this.currType === 'emoji') { // 由触发父组件事件,增加表情文案 this.$emit('add-emoji', emoji.key) } else if (this.currType === 'pinup') { if (this.type === 'session') { this.$store.dispatch('sendMsg', { type: 'custom', scene: util.parseSession(window.localStorage.sessionId).scene, to: util.parseSession(window.localStorage.sessionId).to, pushContent: '[贴图表情]', content: { type: 3, data: { catalog: this.currAlbum, chartlet: emoji.key } } }) } else if (this.type === 'chatroom') { this.$store.dispatch('sendChatroomMsg', { type: 'custom', pushContent: '[贴图表情]', content: { type: 3, data: { catalog: this.currAlbum, chartlet: emoji.key } } }) } this.$emit('hide-emoji') } pageUtil.scrollChatListDown() } } } </script> <style type="text/css"> .m-chat-emoji { position: absolute; top: -200px; height: 200px; left: 0; width: 100%; border-top: 1px solid #ccc; border-bottom: 1px solid #ccc; background-color: #fff; z-index: 2017; } .m-chat-emoji .emoji-channel { position: relative; width: 100%; height: auto; margin: 0 5px; } .m-chat-emoji .emoji-channel .emoji-album { display: inline-block; width: 30px; height: 30px; margin-right: 10px; margin-top: 5px; cursor: pointer; } .m-chat-emoji .emoji-channel .emoji-album img { margin: 0; display: block; width: 30px; height: 30px; } .m-chat-emoji .emoji-channel .emoji-album img.active { background-color: #f0f0f0; } .emoji-content { position: relative; width: 100%; height: 10rem; background-color: #f0f0f0; overflow-y: auto; } .emoji-content .cnt { position: relative; display: block; margin: 0.4rem auto; text-align: left; } .emoji-content::-webkit-scrollbar{ width: 4px; height: 4px; background-color: #F5F5F5; } /*定义滚动条的轨道,内阴影及圆角*/ .emoji-content::-webkit-scrollbar-track{ background-color: #F5F5F5; } /*定义滑块,内阴影及圆角*/ .emoji-content::-webkit-scrollbar-thumb{ border-radius: 20px; background-color: transparent; margin-bottom: 24px; } .emoji-content:hover::-webkit-scrollbar-thumb{ border-radius: 20px; background-color: #aaa; margin-bottom: 24px; } .emoji-item { display: inline-block; width: 28px; height: 28px; padding: 2px; vertical-align: middle; margin: 3px 5px; /*border: 1px solid #fff;*/ /*margin-left: -1px;*/ /*margin-bottom: -1px;*/ } .emoji-item img { width: inherit; height: inherit; } .pinup-item { width: 44px; height: 44px; } </style>