index.vue 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. <script>
  2. import UserData from "../database/user";
  3. import ContactsData from "../database/contacts";
  4. import MessagesData from "../database/messages";
  5. import EmojiData from "../database/emoji";
  6. export default {
  7. name: "QqImui",
  8. components: {},
  9. data() {
  10. return {};
  11. },
  12. render() {
  13. return (
  14. <div class="qq-lemon-imui">
  15. <lemon-imui
  16. class="lemon-slot"
  17. user={UserData}
  18. width={900}
  19. avatar-cricle
  20. hide-message-name
  21. hide-message-time
  22. ref="IMUI"
  23. on={{
  24. "pull-messages": this.handlePullMessages,
  25. "change-contact": this.handleChangeContact,
  26. send: this.handleSend,
  27. }}
  28. scopedSlots={{
  29. "message-title": contact => {
  30. return (
  31. <div>
  32. <div style="display:flex;justify-content:space-between">
  33. <span>{contact.displayName}</span>
  34. <span style="font-size:12px;">
  35. <span>打开抽屉:</span>
  36. <span
  37. class="cursor:pointer;"
  38. on-click={() => this.openDrawer("right")}
  39. >
  40. 右侧 |{" "}
  41. </span>
  42. <span
  43. class="cursor:pointer;"
  44. on-click={() => this.openDrawer("rightInside")}
  45. >
  46. 右侧内部 |{" "}
  47. </span>
  48. <span
  49. class="cursor:pointer;"
  50. on-click={() => this.openDrawer("center")}
  51. >
  52. 居中
  53. </span>
  54. </span>
  55. </div>
  56. {contact.isGroup && (
  57. <div class="slot-group-menu">
  58. <span>聊天</span>
  59. <span>公告</span>
  60. <span>相册</span>
  61. <span>文件</span>
  62. <span>活动</span>
  63. <span
  64. v-lemon-contextmenu_click={[
  65. {
  66. text: "操作一",
  67. click(e, instance, hide) {
  68. hide();
  69. },
  70. },
  71. {
  72. text: "操作二",
  73. },
  74. ]}
  75. >
  76. 设置(左键弹出菜单)
  77. </span>
  78. </div>
  79. )}
  80. </div>
  81. );
  82. },
  83. "sidebar-contact-fixedtop": contact => {
  84. return (
  85. <div class="slot-contact-fixedtop">
  86. <input class="slot-search" placeholder="搜索通讯录" />
  87. </div>
  88. );
  89. },
  90. "message-side": contact => {
  91. if (contact.isGroup) {
  92. return (
  93. <div class="slot-group">
  94. <div class="slot-group-title">群通知</div>
  95. <div class="slot-group-notice">
  96. 进群请改备注,格式,工作地点-姓名,请大家配合谢谢
  97. </div>
  98. <div class="slot-group-title">群成员</div>
  99. <div class="slot-group-panel">
  100. <input class="slot-search" placeholder="搜索群成员" />
  101. <div class="slot-group-member">河南-96-十里青山</div>
  102. <div class="slot-group-member">河南-96-十里青山</div>
  103. <div class="slot-group-member">河南-96-十里青山</div>
  104. <div class="slot-group-member">河南-96-十里青山</div>
  105. <div class="slot-group-member">河南-96-十里青山</div>
  106. <div class="slot-group-member">河南-96-十里青山</div>
  107. <div class="slot-group-member">河南-96-十里青山</div>
  108. <div class="slot-group-member">河南-96-十里青山</div>
  109. <div class="slot-group-member">河南-96-十里青山</div>
  110. <div class="slot-group-member">河南-96-十里青山</div>
  111. </div>
  112. </div>
  113. );
  114. }
  115. },
  116. }}
  117. />
  118. </div>
  119. );
  120. },
  121. computed: {},
  122. watch: {},
  123. created() {},
  124. mounted() {
  125. const IMUI = this.$refs.IMUI;
  126. IMUI.initContacts(ContactsData);
  127. IMUI.initEmoji(EmojiData);
  128. IMUI.changeContact(13);
  129. },
  130. methods: {
  131. openDrawer(position) {
  132. const IMUI = this.$refs.IMUI;
  133. const params = {
  134. position,
  135. render: contact => {
  136. return (
  137. <div style="padding:15px">
  138. <h5>{contact.displayName}</h5>
  139. <span on-click={IMUI.closeDrawer}>关闭抽屉</span>
  140. </div>
  141. );
  142. },
  143. };
  144. if (position == "center") {
  145. params.width = "50%";
  146. params.height = "50%";
  147. } else if (position == "rightInside") {
  148. params.height = "90%";
  149. params.offsetY = "10%";
  150. }
  151. IMUI.openDrawer(params);
  152. },
  153. handlePullMessages(contact, next) {
  154. const { IMUI } = this.$refs;
  155. setTimeout(() => {
  156. next(MessagesData[contact.id], true);
  157. }, 3000);
  158. },
  159. handleChangeContact() {},
  160. handleSend(message, next, file) {
  161. console.log(message, next, file);
  162. setTimeout(() => {
  163. next();
  164. }, 1000);
  165. },
  166. },
  167. };
  168. </script>
  169. <style lang="stylus">
  170. .slot-group
  171. width 170px
  172. border-left 1px solid #ddd;
  173. height 100%
  174. box-sizing border-box
  175. padding 10px
  176. .slot-search
  177. margin 5px 0
  178. .slot-group-notice
  179. color #999
  180. padding 6px 0
  181. font-size 12px
  182. .slot-group-title
  183. font-size 12px
  184. .slot-group-member
  185. font-size 12px
  186. line-height 18px
  187. .slot-group-menu span
  188. display inline-block
  189. cursor pointer
  190. color #888
  191. margin 4px 10px 0 0
  192. border-bottom 2px solid transparent;
  193. &:hover
  194. color #000
  195. border-color #333
  196. .slot-contact-fixedtop
  197. padding 10px
  198. border-bottom 1px solid #ddd
  199. .slot-search
  200. width 100%
  201. box-sizing border-box
  202. font-size 14px
  203. border 1px solid #bbb
  204. padding 5px 10px
  205. </style>