From a7e8433b27a5d4ceb4b4d06c7fb0cb3110c934e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=89=E6=B5=A9=E6=B5=A9?= <1036606149@qq.com> Date: Sat, 27 Apr 2024 23:10:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E5=AF=B9=E8=AF=9D?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 3 +- src/assets/imgs/avatar/inform.png | Bin 0 -> 9226 bytes src/assets/imgs/avatar/jiaqun2x.png | Bin 0 -> 27661 bytes src/assets/imgs/avatar/theme2x.png | Bin 0 -> 9633 bytes src/components/UserStatus/index.vue | 41 ++ src/constant/emojis.js | 322 +++++++++++ src/constant/errorCode.js | 77 +++ src/constant/index.js | 14 + src/constant/informType.js | 52 ++ src/constant/messageType.js | 43 ++ src/constant/onLineStatus.js | 11 + src/constant/warningText.js | 39 ++ src/router/modules/remaining.ts | 2 +- src/styles/iconfont/demo.css | 539 ++++++++++++++++++ src/styles/iconfont/demo_index.html | 345 +++++++++++ src/styles/iconfont/iconfont.css | 41 ++ src/styles/iconfont/iconfont.js | 73 +++ src/styles/iconfont/iconfont.json | 58 ++ src/styles/iconfont/iconfont.ttf | Bin 0 -> 3468 bytes .../components/ConversationList.vue | 214 ++++--- src/views/im/Conversation/index.vue | 20 +- src/views/im/InformDetails/index.vue | 10 +- .../im/Message/components/inputBox/index.scss | 107 ++++ .../im/Message/components/inputBox/index.vue | 453 +++++++++++++++ .../Message/components/messageList/index.scss | 303 ++++++++++ .../Message/components/messageList/index.vue | 303 ++++++++++ .../im/Message/components/suit/audio.vue | 237 ++++++++ .../Message/components/suit/modifyMessage.vue | 120 ++++ .../im/Message/components/suit/msgQuote.vue | 155 +++++ .../components/suit/previewSendImg.vue | 68 +++ .../Message/components/suit/reportMessage.vue | 145 +++++ src/views/im/Message/index.scss | 129 +++++ src/views/im/Message/index.vue | 175 +++++- 33 files changed, 4008 insertions(+), 91 deletions(-) create mode 100644 src/assets/imgs/avatar/inform.png create mode 100644 src/assets/imgs/avatar/jiaqun2x.png create mode 100644 src/assets/imgs/avatar/theme2x.png create mode 100644 src/components/UserStatus/index.vue create mode 100644 src/constant/emojis.js create mode 100644 src/constant/errorCode.js create mode 100644 src/constant/index.js create mode 100644 src/constant/informType.js create mode 100644 src/constant/messageType.js create mode 100644 src/constant/onLineStatus.js create mode 100644 src/constant/warningText.js create mode 100644 src/styles/iconfont/demo.css create mode 100644 src/styles/iconfont/demo_index.html create mode 100644 src/styles/iconfont/iconfont.css create mode 100644 src/styles/iconfont/iconfont.js create mode 100644 src/styles/iconfont/iconfont.json create mode 100644 src/styles/iconfont/iconfont.ttf create mode 100644 src/views/im/Message/components/inputBox/index.scss create mode 100644 src/views/im/Message/components/inputBox/index.vue create mode 100644 src/views/im/Message/components/messageList/index.scss create mode 100644 src/views/im/Message/components/messageList/index.vue create mode 100644 src/views/im/Message/components/suit/audio.vue create mode 100644 src/views/im/Message/components/suit/modifyMessage.vue create mode 100644 src/views/im/Message/components/suit/msgQuote.vue create mode 100644 src/views/im/Message/components/suit/previewSendImg.vue create mode 100644 src/views/im/Message/components/suit/reportMessage.vue create mode 100644 src/views/im/Message/index.scss diff --git a/package.json b/package.json index 737e7ec95..5e7179a7f 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,6 @@ "benz-amr-recorder": "^1.1.5", "bpmn-js-token-simulation": "^0.10.0", "camunda-bpmn-moddle": "^7.0.1", - "components": "link:@/components", "cropperjs": "^1.6.1", "crypto-js": "^4.2.0", "dayjs": "^1.11.10", @@ -51,6 +50,7 @@ "fast-xml-parser": "^4.3.2", "highlight.js": "^11.9.0", "jsencrypt": "^3.3.2", + "lodash": "^4.17.21", "lodash-es": "^4.17.21", "min-dash": "^4.1.1", "mitt": "^3.0.1", @@ -63,6 +63,7 @@ "url": "^0.11.3", "video.js": "^7.21.5", "vue": "3.4.20", + "vue-at": "3.0.0-alpha.2", "vue-dompurify-html": "^4.1.4", "vue-i18n": "9.9.1", "vue-router": "^4.3.0", diff --git a/src/assets/imgs/avatar/inform.png b/src/assets/imgs/avatar/inform.png new file mode 100644 index 0000000000000000000000000000000000000000..ec3166a5bf17a034cf67eb1102fbb9e8740acf2c GIT binary patch literal 9226 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 literal 0 HcmV?d00001 diff --git a/src/assets/imgs/avatar/jiaqun2x.png b/src/assets/imgs/avatar/jiaqun2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ecf6f155b92243b0f2140373020ed4ad532f474c GIT binary patch literal 27661 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 X`&X&Zt31g500000NkvXXu0mjfBjWF; literal 0 HcmV?d00001 diff --git a/src/components/UserStatus/index.vue b/src/components/UserStatus/index.vue new file mode 100644 index 000000000..404e6f700 --- /dev/null +++ b/src/components/UserStatus/index.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/src/constant/emojis.js b/src/constant/emojis.js new file mode 100644 index 000000000..c2e201983 --- /dev/null +++ b/src/constant/emojis.js @@ -0,0 +1,322 @@ +const emojis = [ + '😀', + '😃', + '😄', + '😁', + '😆', + '😅', + '🤣', + '😂', + '🙂', + '🙃', + '😉', + '😊', + '😇', + '😍', + '🤩', + '😘', + '😗', + '😚', + '😙', + '😋', + '😛', + '😜', + '🤪', + '😝', + '🤑', + '🤗', + '🤭', + '🤫', + '🤔', + '🤐', + '🤨', + '😐', + '😑', + '😶', + '😏', + '😒', + '🙄', + '😬', + '🤥', + '😌', + '😔', + '😪', + '🤤', + '😴', + '😷', + '🤒', + '🤕', + '🤢', + '🤮', + '🤧', + '😵', + '🤯', + '🤠', + '😎', + '🤓', + '🧐', + '😕', + '😟', + '🙁', + '😮', + '😯', + '😲', + '😳', + '😦', + '😧', + '😨', + '😰', + '😥', + '😢', + '😭', + '😱', + '😖', + '😣', + '😞', + '😓', + '😩', + '😫', + '😤', + '😡', + '😠', + '🤬', + '😈', + '👿', + '💀', + '💩', + '🤡', + '👹', + '👺', + '👻', + '👽', + '👾', + '🤖', + '😺', + '😸', + '😹', + '😻', + '😼', + '😽', + '🙀', + '😿', + '😾', + '💋', + '👋', + '🤚', + '🖐', + '✋', + '🖖', + '👌', + '🤞', + '🤟', + '🤘', + '🤙', + '👈', + '👉', + '👆', + '🖕', + '👇', + '👍', + '👎', + '✊', + '👊', + '🤛', + '🤜', + '👏', + '🙌', + '👐', + '🤲', + '🤝', + '🙏', + '💅', + '🤳', + '💪', + '👂', + '👃', + '🧠', + '👀', + '👁', + '👅', + '👄', + '👶', + '🧒', + '👦', + '👧', + '🧑', + '👱', + '👨', + '🧔', + '👱‍', + '👨‍', + '👨‍', + '👩', + '👱‍', + '👩‍', + '👩‍', + '👩‍', + '👩‍', + '🧓', + '👴', + '👵', + '🙍', + '🙅', + '🙆', + '💁', + '🙋', + '🙇', + '🙇‍', + '🙇‍', + '🤦', + '🤷', + '🤷‍', + '🤷‍', + '👨‍⚕️', + '👩‍⚕️', + '👨‍🎓', + '👩‍🎓', + '👨‍🏫', + '👩‍🏫', + '👨‍⚖️', + '👩‍⚖️', + '👨‍🌾', + '👩‍🌾', + '👨‍🍳', + '👩‍🍳', + '👨‍🔧', + '👩‍🔧', + '👨‍🏭', + '👩‍🏭', + '👨‍💼', + '👩‍💼', + '👨‍🔬', + '👩‍🔬', + '👨‍💻', + '👩‍💻', + '👨‍🎤', + '👩‍🎤', + '👨‍🎨', + '👩‍🎨', + '👨‍✈️', + '👩‍✈️', + '👨‍🚀', + '👩‍🚀', + '👨‍🚒', + '👩‍🚒', + '👮', + '👮‍♂️', + '👮‍♀️', + '🕵', + '🕵️‍♂️', + '🕵️‍♀️', + '💂', + '💂‍', + '💂‍', + '👷', + '👷‍', + '👷‍', + '🤴', + '👸', + '👳', + '👳‍', + '👳‍', + '👲', + '🧕', + '🤵', + '👰', + '🤰', + '🤱', + '👼', + '🎅', + '🤶', + '🧙', + '🧚', + '🧛', + '🧜', + '🧝', + '🧞', + '🧟', + '💆', + '💇', + '🚶', + '🏃', + '💃', + '🕺', + '🕴', + '👯', + '🧖', + '🧖‍', + '🧖‍', + '🧘', + '👭', + '👫', + '👬', + '💏', + '👨‍', + '👩‍', + '💑', + '👨‍', + '👩‍', + '👪', + '👨‍👩‍👦', + '👨‍👩‍👧', + '👨‍👩‍👧‍👦', + '👨‍👩‍👦‍👦', + '👨‍👩‍👧‍👧', + '👨‍👨‍👦', + '👨‍👨‍👧', + '👨‍👨‍👧‍👦', + '👩‍👩‍👦', + '👩‍👩‍👧', + '👩‍👩‍👧‍👦', + '👩‍👩‍👦‍👦', + '👩‍👩‍👧‍👧', + '👨‍👦', + '👨‍👦‍👦', + '👨‍👧', + '👨‍👧‍👦', + '👨‍👧‍👧', + '👩‍👦', + '👩‍👦‍👦', + '👩‍👧', + '👩‍👧‍👦', + '👩‍👧‍👧', + '🗣', + '👤', + '👥', + '👣', + '🌂', + '☂', + '👓', + '🕶', + '👔', + '👕', + '👖', + '🧣', + '🧤', + '🧥', + '🧦', + '👗', + '👘', + '👙', + '👚', + '👛', + '👜', + '👝', + '🎒', + '👞', + '👟', + '👠', + '👡', + '👢', + '👑', + '👒', + '🎩', + '🎓', + '🧢', + '⛑', + '💄', + '💍', + '💼', +] + +export default emojis diff --git a/src/constant/errorCode.js b/src/constant/errorCode.js new file mode 100644 index 000000000..afea9a837 --- /dev/null +++ b/src/constant/errorCode.js @@ -0,0 +1,77 @@ +// const ERROR_TYPE = { +// login: 1, +// }; + +export default { + /* 登陆相关 + */ + 0: { + 'none': '未知错误!' + }, + 1: { + 'invalid password': '密码错误!', + 'login failed': '登陆失败!', + 'user not found': '该用户不存在!', + }, + 17: { + 'duplicate_unique_property_exists': 'id已存在!', + 'resource_limited': '注册已达上限请开通企业版!', + 'unauthorized': '未开放授权注册!', + 'resource_not_found': '账号不存在!', + }, + 28: { + 'appkey or token error': '未登录!', + }, + 101: { + 'file exceeding maximum limit': '文件大小超出限制(默认10M)!', + 'none': '文件相关未知错误!' + }, + 217: { + 'the user was kicked by other device': '其他端踢出了该账号!', + }, + /* 群组相关 */ + 602: { + 'not in group or chatroom': '已不再该群组中!', + }, + 605: { + 'The chat room dose not exist.': '此群不存在!', + }, + /* 消息相关 */ + 221: { + 'not contact': '非好友关系,不可发送消息!', + }, + 400: { + 'UserId password error.': '用户密码错误!', + 'Please wait a moment while trying to send.': '验证码在有效期内,请勿重复发送!', + 'Image verification code error.': '图片验证码错误,请更换验证码或重新输入!', + 'Image code id cannot be empty.': '请填入图片验证码!', + 'Phone number cannot be empty.': '获取图片验证码请填入手机号!', + 'UserId hfp already exists.': '用户已注册!', + 'phone number illegal': '手机号不合法!', + 'Please send SMS to get mobile phone verification code.': '请发送短信获取手机验证码!', + 'SMS verification code error.': '验证码错误!' + }, + 603: { + 'blocked': '对方已将您加入黑名单!', + 'blacklist': '已在该群黑名单当中!无法加入该群。', + 'already': '已加入该群!' + }, + 504: { + 'exceed recall time limit': '消息超过可撤回时间!', + }, + 507: { + 'muted': '已被禁言!' + }, + 508: { + 'moderation': '内容审核不通过!请检查发送内容。' + } + // e.type === '603' 被拉黑 + // e.type === '605' 群组不存在 + // e.type === '602' 不在群组或聊天室中 + // e.type === '504' 撤回消息时超出撤回时间 + // e.type === '505' 未开通消息撤回 + // e.type === '506' 没有在群组或聊天室白名单 + // e.type === '501' 消息包含敏感词 + // e.type === '502' 被设置的自定义拦截捕获 + // e.type === '503' 未知错误 +} diff --git a/src/constant/index.js b/src/constant/index.js new file mode 100644 index 000000000..5457b4036 --- /dev/null +++ b/src/constant/index.js @@ -0,0 +1,14 @@ +import errorCode from './errorCode' +import onLineStatus from './onLineStatus' +import messageType from './messageType' +import informType from './informType' +import emojis from './emojis' +import warningText from './warningText' +export { + errorCode, + onLineStatus, + messageType, + informType, + emojis, + warningText, +} diff --git a/src/constant/informType.js b/src/constant/informType.js new file mode 100644 index 000000000..a979573a8 --- /dev/null +++ b/src/constant/informType.js @@ -0,0 +1,52 @@ +const INFORM_NAME = { + FRIEND_INVITE: '好友申请', + FRIEND_BUILD: '已成为好友', + FRIEND_DELETED: '好友关系解除', + FRIEND_APPLY_REFUSE: '好友申请被拒绝', + FRIEND_APPLY_AGREE: '好友申请已通过', + GROUP_JOIN_SUCCESS: '成员入群成功', + GROUP_QUIT_SUCCESS: '成员退出群组成功', + GROUP_INVITE_JOIN: '邀请加入群组', + GROUP_REQUESTTOJOIN: '申请加入群组', + GROUP_REMOVE_MEMBER: '移出了群成员', + GROUP_DIRECT_MEMBER: '被直接拉入群组', + GROUP_UPDATE_ANNOUNCEMENT: '更新了群组公告', + GROUP_SET_ADMIN: '设定为管理员', + GROUP_REMOVE_ADMIN: '移除管理员', + GROUP_MUTE_MEMBER: '禁言成员', + GROUP_UNMUTE_MEMBER: '移除成员禁言', + GROUP_DESTORY: '解散群组', + GROUP_ACCEPTREQUEST: '同意入群申请', + GROUP_UPDATE_INFO: '更新群组信息', + GROUP_UPDATE_MEMBER_ATTRIBUTES: '群组成员属性更新' +} +const INFORM_TYPE = { + subscribe: INFORM_NAME.FRIEND_INVITE, + subscribed: INFORM_NAME.FRIEND_BUILD, + unsubscribed: INFORM_NAME.FRIEND_DELETED, + other_person_refuse: INFORM_NAME.FRIEND_APPLY_REFUSE, + other_person_agree: INFORM_NAME.FRIEND_APPLY_AGREE, + memberPresence: INFORM_NAME.GROUP_JOIN_SUCCESS, + memberAbsence: INFORM_NAME.GROUP_QUIT_SUCCESS, + inviteToJoin: INFORM_NAME.GROUP_INVITE_JOIN, + removeMember: INFORM_NAME.GROUP_REMOVE_MEMBER, + directJoined: INFORM_NAME.GROUP_DIRECT_MEMBER, + updateAnnouncement: INFORM_NAME.GROUP_UPDATE_ANNOUNCEMENT, + setAdmin: INFORM_NAME.GROUP_SET_ADMIN, + removeAdmin: INFORM_NAME.GROUP_REMOVE_ADMIN, + muteMember: INFORM_NAME.GROUP_MUTE_MEMBER, + unmuteMember: INFORM_NAME.GROUP_UNMUTE_MEMBER, + destroy: INFORM_NAME.GROUP_DESTORY, + requestToJoin: INFORM_NAME.GROUP_REQUESTTOJOIN, + acceptRequest: INFORM_NAME.GROUP_ACCEPTREQUEST, + updateInfo: INFORM_NAME.GROUP_UPDATE_INFO, + memberAttributesUpdate: INFORM_NAME.GROUP_UPDATE_MEMBER_ATTRIBUTES +} +const INFORM_FROM = { + FRIEND: 'friend', + GROUP: 'group' +} +export default { + INFORM_TYPE, + INFORM_FROM +} diff --git a/src/constant/messageType.js b/src/constant/messageType.js new file mode 100644 index 000000000..4164797d3 --- /dev/null +++ b/src/constant/messageType.js @@ -0,0 +1,43 @@ +const SESSION_MESSAGE_TYPE = { + img: '[图片]', + file: '[文件]', + audio: '[语音]', + loc: '[位置]' +} + +const CUSTOM_TYPE = { + userCard: '个人名片' +} +const ALL_MESSAGE_TYPE = { + TEXT: 'txt', + IMAGE: 'img', + AUDIO: 'audio', + LOCAL: 'loc', + VIDEO: 'video', + FILE: 'file', + CUSTOM: 'custom', + CMD: 'cmd', + INFORM: 'inform' //这个类型不在环信消息类型内,属于自己定义的一种系统通知类的消息。 +} +const CHAT_TYPE = { + SINGLE: 'singleChat', + GROUP: 'groupChat' +} + +const MENTION_ALL = { + TEXT: '所有人', + VALUE: 'ALL' +} +const CHANGE_MESSAGE_BODAY_TYPE = { + RECALL: 0, + DELETE: 1, + MODIFY: 2 +} +export default { + SESSION_MESSAGE_TYPE, + CUSTOM_TYPE, + ALL_MESSAGE_TYPE, + CHAT_TYPE, + MENTION_ALL, + CHANGE_MESSAGE_BODAY_TYPE +} diff --git a/src/constant/onLineStatus.js b/src/constant/onLineStatus.js new file mode 100644 index 000000000..19b5e70b7 --- /dev/null +++ b/src/constant/onLineStatus.js @@ -0,0 +1,11 @@ +const onLineStatus = { + Online: { label: '在线', style: 'background-color:#49FD1D' }, + Leave: { label: '离开', style: 'background-color:#4E4239' }, + Cloaking: { + label: '勿扰', + style: 'background-color:#F27014', + }, + Offline: { label: '离线', style: 'background-color:#BEC1BD' }, +} + +export default onLineStatus diff --git a/src/constant/warningText.js b/src/constant/warningText.js new file mode 100644 index 000000000..536864c34 --- /dev/null +++ b/src/constant/warningText.js @@ -0,0 +1,39 @@ +const SWINDLER_GO_DIE = [ + '时刻绷紧防范之弦,谨防新型电信诈骗。', + '号码陌⽣勿轻接,虚拟电话设陷阱。', + '飞来⼤奖莫惊喜,让您掏钱洞⽆底。', + '不存贪婪⼼,诈骗难得逞。', + '提⾼防骗意识,增强防范能⼒,构筑电信诈骗“防⽕墙。', + '骗⼈之⼼不可有,防骗之⼼不可⽆。', + '⽹上汇款需警惕,电话核实莫⼤意。', + '执法办案有规范,怎会汇款到个⼈。', + '不明电话及时挂,可疑短信不要回。', + '⽹络购物便利多,⽀付流程要仔细。', + '投资理财和股票,多是骗⼦设的套。', + '不信陌⽣短信,拒接陌⽣来电,让骗⼦⽆从下⼿。', + '⼀不贪⼆不占,诈骗再诡玩不转。', + '遇到恐吓要淡定,说你违法莫慌张,⼀旦难分真与假,警方电话110。', + '陌⽣来电要提防,多⽅确认防上当。', + '致富⼗年功,诈骗⼀场空。', + '积极加强⾃我防范意识,共同提⾼识骗防骗能⼒。', + '防范⽹络的骗术,不贪便宜要记住。', + ' 和谐⽹络你我共享,电信诈骗⼤家共防。', + '真假⽹店难分辨,购物不慎就被骗。', + '个⼈信息顶重要,密码账号保管好。', + '飞来⼤奖莫惊喜,让你掏钱洞⽆底。', + '安全账户⼦虚有,⼤额汇款要三思。', + '异地刷卡消费现,不要着急忙给钱。', + '电话通知接传票,实为骗钱设圈套。', + '刷卡消费莫离眼,防⽌盗刷盯着点。', + '⼼中⽆贪念,骗局远⾝边。', + '转账汇款须谨慎,万元以上到柜⾯。', + '陌⽣电话勿轻信,对⽅⾝份要核清。', + '电信诈骗不难防,不给不要不上当。', + '陌⽣信息不要理,以防害⼈⼜害⼰。', +] + +const EASEIM_HINT = + '【安全提示】本应用仅用于环信产品功能开发测试,请勿用于非法用途。任何涉及转账、汇款、裸聊、网恋、网购退款、投资理财等统统都是诈骗,请勿相信!' + +const WARM_TIP = '【温馨提示】该群仅供试用,72小时后将被删除!' +export default { SWINDLER_GO_DIE, EASEIM_HINT, WARM_TIP } diff --git a/src/router/modules/remaining.ts b/src/router/modules/remaining.ts index 64148b83c..d4e129f33 100644 --- a/src/router/modules/remaining.ts +++ b/src/router/modules/remaining.ts @@ -593,7 +593,7 @@ const remainingRouter: AppRouteRecordRaw[] = [ children: [ { // 会话详情 - path: 'informdetails', + path: 'informDetails', name: 'InformDetails', meta: { title: '通知详情', diff --git a/src/styles/iconfont/demo.css b/src/styles/iconfont/demo.css new file mode 100644 index 000000000..a67054a0a --- /dev/null +++ b/src/styles/iconfont/demo.css @@ -0,0 +1,539 @@ +/* Logo 字体 */ +@font-face { + font-family: "iconfont logo"; + src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834'); + src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg'); +} + +.logo { + font-family: "iconfont logo"; + font-size: 160px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* tabs */ +.nav-tabs { + position: relative; +} + +.nav-tabs .nav-more { + position: absolute; + right: 0; + bottom: 0; + height: 42px; + line-height: 42px; + color: #666; +} + +#tabs { + border-bottom: 1px solid #eee; +} + +#tabs li { + cursor: pointer; + width: 100px; + height: 40px; + line-height: 40px; + text-align: center; + font-size: 16px; + border-bottom: 2px solid transparent; + position: relative; + z-index: 1; + margin-bottom: -1px; + color: #666; +} + + +#tabs .active { + border-bottom-color: #f00; + color: #222; +} + +.tab-container .content { + display: none; +} + +/* 页面布局 */ +.main { + padding: 30px 100px; + width: 960px; + margin: 0 auto; +} + +.main .logo { + color: #333; + text-align: left; + margin-bottom: 30px; + line-height: 1; + height: 110px; + margin-top: -50px; + overflow: hidden; + *zoom: 1; +} + +.main .logo a { + font-size: 160px; + color: #333; +} + +.helps { + margin-top: 40px; +} + +.helps pre { + padding: 20px; + margin: 10px 0; + border: solid 1px #e7e1cd; + background-color: #fffdef; + overflow: auto; +} + +.icon_lists { + width: 100% !important; + overflow: hidden; + *zoom: 1; +} + +.icon_lists li { + width: 100px; + margin-bottom: 10px; + margin-right: 20px; + text-align: center; + list-style: none !important; + cursor: default; +} + +.icon_lists li .code-name { + line-height: 1.2; +} + +.icon_lists .icon { + display: block; + height: 100px; + line-height: 100px; + font-size: 42px; + margin: 10px auto; + color: #333; + -webkit-transition: font-size 0.25s linear, width 0.25s linear; + -moz-transition: font-size 0.25s linear, width 0.25s linear; + transition: font-size 0.25s linear, width 0.25s linear; +} + +.icon_lists .icon:hover { + font-size: 100px; +} + +.icon_lists .svg-icon { + /* 通过设置 font-size 来改变图标大小 */ + width: 1em; + /* 图标和文字相邻时,垂直对齐 */ + vertical-align: -0.15em; + /* 通过设置 color 来改变 SVG 的颜色/fill */ + fill: currentColor; + /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示 + normalize.css 中也包含这行 */ + overflow: hidden; +} + +.icon_lists li .name, +.icon_lists li .code-name { + color: #666; +} + +/* markdown 样式 */ +.markdown { + color: #666; + font-size: 14px; + line-height: 1.8; +} + +.highlight { + line-height: 1.5; +} + +.markdown img { + vertical-align: middle; + max-width: 100%; +} + +.markdown h1 { + color: #404040; + font-weight: 500; + line-height: 40px; + margin-bottom: 24px; +} + +.markdown h2, +.markdown h3, +.markdown h4, +.markdown h5, +.markdown h6 { + color: #404040; + margin: 1.6em 0 0.6em 0; + font-weight: 500; + clear: both; +} + +.markdown h1 { + font-size: 28px; +} + +.markdown h2 { + font-size: 22px; +} + +.markdown h3 { + font-size: 16px; +} + +.markdown h4 { + font-size: 14px; +} + +.markdown h5 { + font-size: 12px; +} + +.markdown h6 { + font-size: 12px; +} + +.markdown hr { + height: 1px; + border: 0; + background: #e9e9e9; + margin: 16px 0; + clear: both; +} + +.markdown p { + margin: 1em 0; +} + +.markdown>p, +.markdown>blockquote, +.markdown>.highlight, +.markdown>ol, +.markdown>ul { + width: 80%; +} + +.markdown ul>li { + list-style: circle; +} + +.markdown>ul li, +.markdown blockquote ul>li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown>ul li p, +.markdown>ol li p { + margin: 0.6em 0; +} + +.markdown ol>li { + list-style: decimal; +} + +.markdown>ol li, +.markdown blockquote ol>li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown code { + margin: 0 3px; + padding: 0 5px; + background: #eee; + border-radius: 3px; +} + +.markdown strong, +.markdown b { + font-weight: 600; +} + +.markdown>table { + border-collapse: collapse; + border-spacing: 0px; + empty-cells: show; + border: 1px solid #e9e9e9; + width: 95%; + margin-bottom: 24px; +} + +.markdown>table th { + white-space: nowrap; + color: #333; + font-weight: 600; +} + +.markdown>table th, +.markdown>table td { + border: 1px solid #e9e9e9; + padding: 8px 16px; + text-align: left; +} + +.markdown>table th { + background: #F7F7F7; +} + +.markdown blockquote { + font-size: 90%; + color: #999; + border-left: 4px solid #e9e9e9; + padding-left: 0.8em; + margin: 1em 0; +} + +.markdown blockquote p { + margin: 0; +} + +.markdown .anchor { + opacity: 0; + transition: opacity 0.3s ease; + margin-left: 8px; +} + +.markdown .waiting { + color: #ccc; +} + +.markdown h1:hover .anchor, +.markdown h2:hover .anchor, +.markdown h3:hover .anchor, +.markdown h4:hover .anchor, +.markdown h5:hover .anchor, +.markdown h6:hover .anchor { + opacity: 1; + display: inline-block; +} + +.markdown>br, +.markdown>p>br { + clear: both; +} + + +.hljs { + display: block; + background: white; + padding: 0.5em; + color: #333333; + overflow-x: auto; +} + +.hljs-comment, +.hljs-meta { + color: #969896; +} + +.hljs-string, +.hljs-variable, +.hljs-template-variable, +.hljs-strong, +.hljs-emphasis, +.hljs-quote { + color: #df5000; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-type { + color: #a71d5d; +} + +.hljs-literal, +.hljs-symbol, +.hljs-bullet, +.hljs-attribute { + color: #0086b3; +} + +.hljs-section, +.hljs-name { + color: #63a35c; +} + +.hljs-tag { + color: #333333; +} + +.hljs-title, +.hljs-attr, +.hljs-selector-id, +.hljs-selector-class, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #795da3; +} + +.hljs-addition { + color: #55a532; + background-color: #eaffea; +} + +.hljs-deletion { + color: #bd2c00; + background-color: #ffecec; +} + +.hljs-link { + text-decoration: underline; +} + +/* 代码高亮 */ +/* PrismJS 1.15.0 +https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"]::-moz-selection, +pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, +code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} + +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} + +@media print { + + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} + +:not(pre)>code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} + +/* Inline code */ +:not(pre)>code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: #999; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + background: hsla(0, 0%, 100%, .5); +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} + +.token.function, +.token.class-name { + color: #DD4A68; +} + +.token.regex, +.token.important, +.token.variable { + color: #e90; +} + +.token.important, +.token.bold { + font-weight: bold; +} + +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} diff --git a/src/styles/iconfont/demo_index.html b/src/styles/iconfont/demo_index.html new file mode 100644 index 000000000..763e27377 --- /dev/null +++ b/src/styles/iconfont/demo_index.html @@ -0,0 +1,345 @@ + + + + + iconfont Demo + + + + + + + + + + + + + +
+

+ + +

+ +
+
+
    + +
  • + +
    emoji
    +
    &#xe64a;
    +
  • + +
  • + 󰈃 +
    3.1电话
    +
    &#xf0203;
    +
  • + +
  • + +
    语音
    +
    &#xe610;
    +
  • + +
  • + +
    视频
    +
    &#xe61f;
    +
  • + +
  • + +
    垃圾桶
    +
    &#xe615;
    +
  • + +
  • + +
    文件
    +
    &#xe69f;
    +
  • + +
  • + +
    图库
    +
    &#xe712;
    +
  • + +
+
+

Unicode 引用

+
+ +

Unicode 是字体在网页端最原始的应用方式,特点是:

+
    +
  • 支持按字体的方式去动态调整图标大小,颜色等等。
  • +
  • 默认情况下不支持多色,直接添加多色图标会自动去色。
  • +
+
+

注意:新版 iconfont 支持两种方式引用多色图标:SVG symbol 引用方式和彩色字体图标模式。(使用彩色字体图标需要在「编辑项目」中开启「彩色」选项后并重新生成。)

+
+

Unicode 使用步骤如下:

+

第一步:拷贝项目下面生成的 @font-face

+
@font-face {
+  font-family: 'iconfont';
+  src: url('iconfont.ttf?t=1654496599109') format('truetype');
+}
+
+

第二步:定义使用 iconfont 的样式

+
.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+

第三步:挑选相应图标并获取字体编码,应用于页面

+
+<span class="iconfont">&#x33;</span>
+
+
+

"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

+
+
+
+
+
    + +
  • + +
    + emoji +
    +
    .icon-emoji +
    +
  • + +
  • + +
    + 3.1电话 +
    +
    .icon-31dianhua +
    +
  • + +
  • + +
    + 语音 +
    +
    .icon-01 +
    +
  • + +
  • + +
    + 视频 +
    +
    .icon-video +
    +
  • + +
  • + +
    + 垃圾桶 +
    +
    .icon-lajitong +
    +
  • + +
  • + +
    + 文件 +
    +
    .icon-wenjian +
    +
  • + +
  • + +
    + 图库 +
    +
    .icon-tuku +
    +
  • + +
+
+

font-class 引用

+
+ +

font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。

+

与 Unicode 使用方式相比,具有如下特点:

+
    +
  • 相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。
  • +
  • 因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。
  • +
+

使用步骤如下:

+

第一步:引入项目下面生成的 fontclass 代码:

+
<link rel="stylesheet" href="./iconfont.css">
+
+

第二步:挑选相应图标并获取类名,应用于页面:

+
<span class="iconfont icon-xxx"></span>
+
+
+

" + iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

+
+
+
+
+
    + +
  • + +
    emoji
    +
    #icon-emoji
    +
  • + +
  • + +
    3.1电话
    +
    #icon-31dianhua
    +
  • + +
  • + +
    语音
    +
    #icon-01
    +
  • + +
  • + +
    视频
    +
    #icon-video
    +
  • + +
  • + +
    垃圾桶
    +
    #icon-lajitong
    +
  • + +
  • + +
    文件
    +
    #icon-wenjian
    +
  • + +
  • + +
    图库
    +
    #icon-tuku
    +
  • + +
+
+

Symbol 引用

+
+ +

这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章 + 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:

+
    +
  • 支持多色图标了,不再受单色限制。
  • +
  • 通过一些技巧,支持像字体那样,通过 font-size, color 来调整样式。
  • +
  • 兼容性较差,支持 IE9+,及现代浏览器。
  • +
  • 浏览器渲染 SVG 的性能一般,还不如 png。
  • +
+

使用步骤如下:

+

第一步:引入项目下面生成的 symbol 代码:

+
<script src="./iconfont.js"></script>
+
+

第二步:加入通用 CSS 代码(引入一次就行):

+
<style>
+.icon {
+  width: 1em;
+  height: 1em;
+  vertical-align: -0.15em;
+  fill: currentColor;
+  overflow: hidden;
+}
+</style>
+
+

第三步:挑选相应图标并获取类名,应用于页面:

+
<svg class="icon" aria-hidden="true">
+  <use xlink:href="#icon-xxx"></use>
+</svg>
+
+
+
+ +
+
+ + + diff --git a/src/styles/iconfont/iconfont.css b/src/styles/iconfont/iconfont.css new file mode 100644 index 000000000..3ebf9f529 --- /dev/null +++ b/src/styles/iconfont/iconfont.css @@ -0,0 +1,41 @@ +@font-face { + font-family: "iconfont"; /* Project id */ + src: url('iconfont.ttf?t=1654496599109') format('truetype'); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-emoji:before { + content: "\e64a"; +} + +.icon-31dianhua:before { + content: "\f0203"; +} + +.icon-01:before { + content: "\e610"; +} + +.icon-video:before { + content: "\e61f"; +} + +.icon-lajitong:before { + content: "\e615"; +} + +.icon-wenjian:before { + content: "\e69f"; +} + +.icon-tuku:before { + content: "\e712"; +} + diff --git a/src/styles/iconfont/iconfont.js b/src/styles/iconfont/iconfont.js new file mode 100644 index 000000000..979bc0375 --- /dev/null +++ b/src/styles/iconfont/iconfont.js @@ -0,0 +1,73 @@ +/* eslint-disable */ +!(function (c) { + var t, + e, + l, + o, + n, + a = + '', + i = (i = document.getElementsByTagName('script'))[ + i.length - 1 + ].getAttribute('data-injectcss'), + h = function (c, t) { + t.parentNode.insertBefore(c, t) + } + if (i && !c.__iconfont__svg__cssinject__) { + c.__iconfont__svg__cssinject__ = !0 + try { + document.write( + '' + ) + } catch (c) { + console && console.log(c) + } + } + function d() { + n || ((n = !0), l()) + } + function s() { + try { + o.documentElement.doScroll('left') + } catch (c) { + return void setTimeout(s, 50) + } + d() + } + ;(t = function () { + var c, + t = document.createElement('div') + ;(t.innerHTML = a), + (a = null), + (t = t.getElementsByTagName('svg')[0]) && + (t.setAttribute('aria-hidden', 'true'), + (t.style.position = 'absolute'), + (t.style.width = 0), + (t.style.height = 0), + (t.style.overflow = 'hidden'), + (t = t), + (c = document.body).firstChild + ? h(t, c.firstChild) + : c.appendChild(t)) + }), + document.addEventListener + ? ~['complete', 'loaded', 'interactive'].indexOf( + document.readyState + ) + ? setTimeout(t, 0) + : ((e = function () { + document.removeEventListener('DOMContentLoaded', e, !1), + t() + }), + document.addEventListener('DOMContentLoaded', e, !1)) + : document.attachEvent && + ((l = t), + (o = c.document), + (n = !1), + s(), + (o.onreadystatechange = function () { + 'complete' == o.readyState && + ((o.onreadystatechange = null), d()) + })) +})(window) +/* eslint-disable */ diff --git a/src/styles/iconfont/iconfont.json b/src/styles/iconfont/iconfont.json new file mode 100644 index 000000000..5ef211ee1 --- /dev/null +++ b/src/styles/iconfont/iconfont.json @@ -0,0 +1,58 @@ +{ + "id": "", + "name": "", + "font_family": "iconfont", + "css_prefix_text": "icon-", + "description": "", + "glyphs": [ + { + "icon_id": "29929", + "name": "emoji", + "font_class": "emoji", + "unicode": "e64a", + "unicode_decimal": 58954 + }, + { + "icon_id": "201577", + "name": "3.1电话", + "font_class": "31dianhua", + "unicode": "f0203", + "unicode_decimal": 983555 + }, + { + "icon_id": "1236846", + "name": "语音", + "font_class": "01", + "unicode": "e610", + "unicode_decimal": 58896 + }, + { + "icon_id": "3878694", + "name": "视频", + "font_class": "video", + "unicode": "e61f", + "unicode_decimal": 58911 + }, + { + "icon_id": "7587956", + "name": "垃圾桶", + "font_class": "lajitong", + "unicode": "e615", + "unicode_decimal": 58901 + }, + { + "icon_id": "20710439", + "name": "文件", + "font_class": "wenjian", + "unicode": "e69f", + "unicode_decimal": 59039 + }, + { + "icon_id": "27334037", + "name": "图库", + "font_class": "tuku", + "unicode": "e712", + "unicode_decimal": 59154 + } + ] +} diff --git a/src/styles/iconfont/iconfont.ttf b/src/styles/iconfont/iconfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..76f389da60d6754d5d9c291e259a29f9165b3f8a GIT binary patch literal 3468 zcmd@XX>S|Xao*eIa=GO4zOqBhK+yE~&@U}w#D>uiDbOMaiUKVPRA^E3ON#VEfqV&ECm(2_EeiAk+9D!5Z}0APk4;NZ~7a~B>}zZQEQfXpKI{FCRhxpI8v9i(4H`pW87 zwKIGCnJWO)g1kS}n>W@!|Ct)nJkr9CHfq&1^?SenKFZ$1S=vB`@hLE%j2gwb5?*z6QH}`*5hm1Gx9#B@|;e zJQ$Q+_`fD@Vs)ZmTL;7S%?Jwz*WvTzV zK3QGecj^YQb8M%;WVi@|3i0}aBv+cLkRUNy2{PwNp_KDZ5VsKiI6;Qb zZ`8{3^X1yc-x@m7xUq5hV!lwwU%dR=%ggyjEli{B>W6hHwkT9Mf_!SNsUsd*MjItk^l};M7#o%-I!lagNY{djYll zH_&1<{5$s@&IO-^*8pOZ)9755#-p0&Hew}OTqfh_{Ub#GRY;bwNMs0#k~j+y6ATiJ z2>W^STCgxQ#ZrvX>|s1qFq3CQ2!n*jtR$*yXPVffNw5rrFuW|lAz~v;lF4$f%2tm} zQ4Y&?S+YCLCNF0(b59f=^Al#R5-yu;rqrwiGhRUmA1+r;HV>sH#(6#* z;_aer6$DP=MVr;B$Q-W-R)@tcndooqHmAkyiWqspXSF8<6P?N}&T=v}7>FncyeP>B z>?UgWxRsLAOa-e|G>dlbz@;-^dh}#_Ix}aWK3mXgcgNiRzeGP7I0_jOu@aBN9VA?#LUKWdV~#VV7>;TsuO*}y)oR}7$rmeRrbJ=BUM|;P zSTC2?S5k|Y7E>Ca>Owko>huqm7L)0PZ05PGuhp8eV#yt30H>fB)OMnC(=Vm zFC~*p>E+X>QfYQ_dG*4%LP@-HN8CJjLGQ@;lGFDg4AXEJ`(!j?BgH~I8rF^W=ELa4 zJXX{kzIy0QoJ8Wdl#uU5M}%lBI$4}7&g8k>z_|0`Y+~=0l2&FD^a?H)o#TP=SnR{E z$}X2ouP{hJ-BE9;bl16@NX(+l0JLTDf-A02G9KHzg`&Vj2M9wuMBTl`I{0wFouWgC zK^E;?gvasiK?g__jZKk=FoBjMaHE|LAxJc{i;jG*ggqi2E0oZDY!p#^3(z(6AUvaE ztc7U481jy&Ycx6YvoYl@CHCxCG&+VxO^uV&3IZet9gFELljS{fI_w+#*cT>0otKPz ze>UQqK%GWu@WoVWJDKdJQuMW`5{oIQAU+lytd379Ov6o$jG8PKQ*`fFK2`ORn`L%5 z&cF``zaSNTYPrFl+2oF5&s5NBFoaprIIxJ&U|+uIV|B!Nn9H6hZq1YUOgJK7R#?_b zMf%~u7|I8O`4Bl1^zrwCg>R_-PA7yk8NBHWhkfKI3KJ8qX{Tp`X(`2+vrf1>`bq(CAk-Z){_Y4j zfEVtMZ~^&yBV2-IB9Cx0#L4Q>Zmrs@t*I+F)W&MNwcc*^_Sdtu`qgH&yHD<~%eC%y zquo-cGl%wBCu^-*cVEr+wR*1CTUXb+?Je~L>Z>)IZMD;FZ`M|OnT=krb0nK(_b`5D zwY>#Lp$j#rLJ#2@w#*f{fv^Fq(1sSQYq0kT`YcM<;VLxoWcL%h51(E}=`L)e9Mh>{ zlgr?z^}|vpQL3d$K5Wf4T*KRPXk!m8QgL=s(-vYUM)uXvk|yFRCXnrIqMlWh&cKFt zssl&x<;{NN&%S&{^K import { formatDate } from '@/utils/formatTime' import { reactive } from 'vue' -//取好友列表(主要使用好友下的用户属性相关) -const friendList = reactive([ - { - friendKey: { - avatarurl: '', - nickName: '' +/* 头像相关 */ +import informIcon from '@/assets/imgs/avatar/inform.png' +/* route */ +const route = useRoute() +/* router */ +const router = useRouter() +//取系统通知数据 +const informDetail = computed(() => { + const informDetailArr = reactive([ + { + from: '系统通知', + desc: '您有一条新的通知', + time: new Date(), + untreated: 1 } - } -]) -//取会话数据 -const conversationList = reactive({ - conversationKey: { - conversationInfo: { - avatarUrl: '', - name: '', - conversationType: 0 - }, - latestMessage: { - msg: '' - }, - latestSendTime: 0, - unreadMessageNum: 0, - isMention: false + ]) + const lastInformDeatail = informDetailArr[0] || {} + const untreated = 1 + return { untreated, lastInformDeatail } +}) + +//取好友列表(主要使用好友下的用户属性相关) +const friendList = reactive({ + 1: { + avatarurl: 'https://img.yzcdn.cn/vant/cat.jpeg' } }) +//取会话数据 +const conversationList = reactive([ + { + conversationKey: 1, + conversationInfo: { avatarUrl: 'https://img.yzcdn.cn/vant/cat.jpeg' }, + + name: '好友1', + conversationType: 2, + latestMessage: { + msg: 'hello word!' + }, + latestSendTime: new Date(), + unreadMessageNum: 5, + isMention: false + } +]) //处理会话name const handleConversationName = computed(() => { @@ -35,74 +53,112 @@ const handleConversationName = computed(() => { const handleLastMsgNickName = computed(() => { return '' }) +const emit = defineEmits(['toInformDetails', 'toChatMessage']) //普通会话 const checkedConverItemIndex = ref(null) const toChatMessage = (item, itemKey, index) => { checkedConverItemIndex.value = index + console.log('选中的会话key', itemKey) + //跳转至对应的消息界面 + emit('toChatMessage', itemKey, item.conversationType) } //删除某条会话 -const deleteConversation = (itemKey) => {} +const deleteConversation = (itemKey) => { + console.log('选中的会话key', itemKey) +} + diff --git a/src/views/im/Message/components/inputBox/index.scss b/src/views/im/Message/components/inputBox/index.scss new file mode 100644 index 000000000..4cb5c3845 --- /dev/null +++ b/src/views/im/Message/components/inputBox/index.scss @@ -0,0 +1,107 @@ +.chat_func_box { + position: relative; + display: flex; + align-items: center; + height: 42px; + width: 100%; + background-color: #f7f7f7; + border-top: 1px solid #e6e6e6; + border-bottom: 1px solid #e6e6e6; + line-height: 12px; + + .chat_func_icon { + width: 25px; + height: 25px; + } + + .emojis_box { + position: absolute; + left: 15px; + top: -180px; + width: 330px; + height: 150px; + border-radius: 5px; + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + background: #fff; + padding: 15px 5px; + + .emoji { + display: inline-block; + width: 25px; + height: 25px; + text-align: center; + line-height: 25px; + cursor: pointer; + transition: all 0.3s ease; + + &:hover { + transform: scale(1.2); + } + } + } + + .loading_box { + position: absolute; + right: 5px; + top: 0; + width: 50px; + height: 100%; + font-size: 15px; + } +} + +/* loading svg大小调整 */ +::v-deep .circular { + margin-top: 8px; + width: 25px; + height: 25px; +} + +.chat_content_editable { + font-family: 'PingFang SC'; + width: 100%; + box-sizing: border-box; + min-height: 100px; + border: none; + background: none; + letter-spacing: 0.5px; + resize: none; + padding: 10px 20px; + font-size: 14px; + line-height: 10px; +} + +.no_content_send_btn { + position: absolute; + bottom: 20px; + right: 20px; + width: 80px; + opacity: 0.5; +} + +.chat_send_btn { + position: absolute; + bottom: 20px; + right: 20px; + width: 80px; +} + +.iconfont { + margin-right: 12px; + transition: all 0.3s ease; + cursor: pointer; + + &:hover { + transform: scale(1.2); + color: #1b83f9; + } +} + +.record_box { + width: 250px; + height: 180px; +} diff --git a/src/views/im/Message/components/inputBox/index.vue b/src/views/im/Message/components/inputBox/index.vue new file mode 100644 index 000000000..7ea2d2ee4 --- /dev/null +++ b/src/views/im/Message/components/inputBox/index.vue @@ -0,0 +1,453 @@ + + + + diff --git a/src/views/im/Message/components/messageList/index.scss b/src/views/im/Message/components/messageList/index.scss new file mode 100644 index 000000000..da1d21024 --- /dev/null +++ b/src/views/im/Message/components/messageList/index.scss @@ -0,0 +1,303 @@ +.messageList_box { + width: 100%; + + .message_box_item { + position: relative; + display: flex; + margin: 32px auto; + font-weight: 400; + font-size: 14px; + line-height: 20px; + letter-spacing: 0.4px; + color: #333333; + + .message_item_time { + position: absolute; + top: -25px; + left: 0; + right: 0; + margin: auto; + width: 74px; + height: 20px; + color: #adadad; + font-weight: 400; + font-size: 10px; + line-height: 20px; + } + + .message_item_avator { + width: 38px; + height: 38px; + } + .message_box_card { + display: flex; + flex-direction: column; + max-width: 50%; + min-height: 34px; + } + .message_box_nickname { + font-size: 14px; + line-height: 20px; + letter-spacing: 0.4px; + color: #9a9a9a; + margin: 0 10px; + } + .message_box_content { + display: flex; + align-items: center; + margin: 0 6px; + word-break: break-all; + /* 通用音频播放样式 */ + .message_box_content_audio { + display: flex; + justify-content: flex-end; + align-items: center; + max-width: 250px; + min-width: 80px; + font-size: 12px; + + .audio_length_text { + font-family: 'Avenir'; + font-style: normal; + font-weight: 400; + font-size: 12px; + } + } + + /* 对方音频播放样式 */ + .message_box_content_audio_other { + flex-direction: row; + + @keyframes other_play_icon { + 0% { + background: url('@/assets/images/playAudio/msg_recv_audio02@3x.png') + no-repeat; + + background-size: 100% 100%; + } + + 50% { + background: url('@/assets/images/playAudio/msg_recv_audio01@3x.png') + no-repeat; + + background-size: 100% 100%; + } + + 100% { + background: url('@/assets/images/playAudio/msg_recv_audio@3x.png') + no-repeat; + background-size: 100% 100%; + } + } + + .play_audio_icon_other { + width: 30px; + height: 30px; + background: url('@/assets/images/playAudio/msg_recv_audio@3x.png') + no-repeat; + margin-right: 10px; + } + + .start_play_audio { + animation: other_play_icon 2s; + animation-iteration-count: infinite; + } + } + + /* 己方音频播放样式 */ + .message_box_content_audio_mine { + flex-direction: row-reverse; + + @keyframes mine_play_icon { + 0% { + background: url('@/assets/images/playAudio/msg_send_audio02@3x.png') + no-repeat; + + background-size: 100% 100%; + } + + 50% { + background: url('@/assets/images/playAudio/msg_send_audio01@3x.png') + no-repeat; + + background-size: 100% 100%; + } + + 100% { + background: url('@/assets/images/playAudio/msg_send_audio@3x.png') + no-repeat; + background-size: 100% 100%; + } + } + + .play_audio_icon_mine { + width: 30px; + height: 30px; + background-size: 100% 100%; + background: url('@/assets/images/playAudio/msg_send_audio@3x.png') + no-repeat; + margin-left: 10px; + } + + .start_play_audio { + animation: mine_play_icon 2s; + animation-iteration-count: infinite; + } + } + + /* 文件消息样式 */ + .message_box_content_file { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + width: 200px; + min-height: 60px; + max-height: 120px; + padding: 10px; + + .file_text_box { + width: 75%; + height: 80%; + display: flex; + flex-direction: column; + justify-content: space-around; + + .file_name { + width: 120px; + white-space: wrap; + overflow: hidden; + text-overflow: ellipsis; + font-size: 15px; + font-weight: bold; + } + + .file_size { + font-size: 13px; + } + + .file_download { + width: 100%; + color: #333333; + font-size: 13px; + cursor: pointer; + transition: all 0.3s ease; + + &:hover { + transform: scale(0.9); + } + } + } + + .icon-wenjian { + font-size: 50px; + color: #8d8a8a; + } + } + + /* 自定义消息 */ + .message_box_content_custom { + display: flex; + flex-direction: column; + justify-content: space-between; + width: 200px; + min-height: 60px; + max-height: 120px; + padding: 10px; + overflow: hidden; + + .user_card_main { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + color: #333333; + font-size: 17px; + + .nickname { + display: inline-block; + // width: 100%; + margin-left: 10px; + height: 35px; + line-height: 35px; + } + } + } + + /* 个人名片 */ + } + .quote_msg_avtive { + animation: twinkle 0.4s infinite alternate; + } + .quote_msg_avtive ::before { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border-radius: 5px; + background-color: rgba(247, 169, 35, 0.5); + } + @keyframes twinkle { + 0% { + opacity: 0.3; + } + 50% { + opacity: 0.6; + } + 100% { + opacity: 0.9; + } + } + .message_box_content_other { + background: #fff; + border-radius: 8px 8px 8px 0px; + } + + .message_box_content_mine { + background: #c1e3fc; + border-radius: 8px 0px 8px 8px; + } + } + + /* 撤回或者系统通知类消息 */ + .recall_style, + .inform_style { + height: 60px; + text-align: center; + color: #aaaaaa; + font-size: 10px; + margin: 5px 0; + + .reEdit { + color: #3e91fa; + margin-left: 3px; + cursor: pointer; + } + } +} +.message_quote_box { + padding: 5px 10px; + font-size: 7px; + background-color: #e7e7e7; + border-radius: 5px; + margin-top: 5px; + color: #a0a0a0; + cursor: pointer; + p { + word-break: break-all; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + } +} +:deep(.el-input__wrapper) { + border-radius: 5px; +} + +:deep(.el-dialog__header) { + background: #f2f2f2; + margin: 0; +} diff --git a/src/views/im/Message/components/messageList/index.vue b/src/views/im/Message/components/messageList/index.vue new file mode 100644 index 000000000..ae992f325 --- /dev/null +++ b/src/views/im/Message/components/messageList/index.vue @@ -0,0 +1,303 @@ + + + + diff --git a/src/views/im/Message/components/suit/audio.vue b/src/views/im/Message/components/suit/audio.vue new file mode 100644 index 000000000..6d4e6b727 --- /dev/null +++ b/src/views/im/Message/components/suit/audio.vue @@ -0,0 +1,237 @@ + + + + diff --git a/src/views/im/Message/components/suit/modifyMessage.vue b/src/views/im/Message/components/suit/modifyMessage.vue new file mode 100644 index 000000000..61c3b942b --- /dev/null +++ b/src/views/im/Message/components/suit/modifyMessage.vue @@ -0,0 +1,120 @@ + + + + + diff --git a/src/views/im/Message/components/suit/msgQuote.vue b/src/views/im/Message/components/suit/msgQuote.vue new file mode 100644 index 000000000..98e3a9a53 --- /dev/null +++ b/src/views/im/Message/components/suit/msgQuote.vue @@ -0,0 +1,155 @@ + + + + + diff --git a/src/views/im/Message/components/suit/previewSendImg.vue b/src/views/im/Message/components/suit/previewSendImg.vue new file mode 100644 index 000000000..e4538c4ce --- /dev/null +++ b/src/views/im/Message/components/suit/previewSendImg.vue @@ -0,0 +1,68 @@ + + + + diff --git a/src/views/im/Message/components/suit/reportMessage.vue b/src/views/im/Message/components/suit/reportMessage.vue new file mode 100644 index 000000000..c4b0db70e --- /dev/null +++ b/src/views/im/Message/components/suit/reportMessage.vue @@ -0,0 +1,145 @@ + + + + + + \ No newline at end of file diff --git a/src/views/im/Message/index.scss b/src/views/im/Message/index.scss new file mode 100644 index 000000000..90941a550 --- /dev/null +++ b/src/views/im/Message/index.scss @@ -0,0 +1,129 @@ +.app_container { + height: 100%; + border-left: 1px solid #e6e6e6; +} + +.chat_message_header { + position: relative; + display: flex; + align-items: center; + flex-direction: row; + justify-content: space-between; + height: 61px; + background: #f9f9f9; + border-radius: 0 3px 0 0; + border-bottom: 1px solid #e6e6e6; + + .chat_user_box { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + height: 20px; + max-width: 80%; + + .chat_user_name { + font-family: 'PingFang SC'; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-style: normal; + font-weight: 400; + font-size: 17px; + line-height: 20px; + letter-spacing: 0.3px; + color: #333333; + } + } + + .more { + display: flex; + width: 35px; + height: 100%; + align-items: center; + justify-content: center; + font-size: 20px; + cursor: pointer; + transition: all 0.3s; + + &:hover { + transform: scale(1.1); + } + } +} + +.easeim_safe_tips { + position: relative; + padding: 12px 20px; + background-color: #fff4e6; + color: #ff8c39; + line-height: 18px; + font-family: PingFang SC; + font-style: normal; + font-weight: 400; + text-align: justify; + font-size: 12px; + border: none; + + .easeim_close_tips { + position: absolute; + right: 10px; + top: 10px; + } +} + +.chat_message_main { + padding: 0; + background: #f9f9f9; + + .main_container { + padding: 0 20px; + height: 100%; + // overflow-y: scroll; + + .chat_message_tips { + margin-top: 5px; + width: 100%; + height: 30px; + text-align: center; + line-height: 30px; + + .load_more_msg { + width: 200px; + height: 30px; + border-radius: 20px; + margin: 0 auto; + background: rgba(114, 112, 112, 0.143); + font-size: 13px; + letter-spacing: 0.5px; + // box-shadow: 1px 1px 1px 1px rgba(128, 128, 128, 0.193); + } + } + } +} + +.chat_message_inputbar { + position: relative; + width: 100%; + height: 25%; + padding: 0; + background-color: #f9f9f9; + border-radius: 0 0 3px 0; +} + +::v-deep .el-drawer { + margin-top: 60px; + width: 150px; + height: calc(100% - 60px); + border-radius: 5px 0 0 5px; + + .el-drawer__header { + margin-bottom: 0; + padding-top: 0; + } + + .el-drawer__body { + padding: 0; + // padding-left: 16px; + } +} diff --git a/src/views/im/Message/index.vue b/src/views/im/Message/index.vue index 63cf316ba..9af02c232 100644 --- a/src/views/im/Message/index.vue +++ b/src/views/im/Message/index.vue @@ -1,11 +1,182 @@