| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <script lang="ts" setup> |
| | | import { computed } from 'vue' |
| | | |
| | | import { isPrivateConversation } from '#/views/im/utils/constants' |
| | | import { |
| | | type CardMessage, |
| | | type CardTarget, |
| | | getCardLabelInfo |
| | | } from '#/views/im/utils/message' |
| | | |
| | | import { UserAvatar } from '../user' |
| | | |
| | | defineOptions({ name: 'ImCardBubble' }) |
| | | |
| | | const props = withDefaults( |
| | | defineProps<{ |
| | | /** åçæ°æ®ï¼CardMessageï¼æ¥æ¶ä¾§æ¶æ¯ä½ï¼æ CardTargetï¼åéä¾§é¢è§ï¼å
±ç¨ç»æ */ |
| | | card: CardMessage | CardTarget |
| | | /** æ¯å¦æ¾ç¤º cursor: pointerï¼è°ç¨æ¹è´è´£ç» @click çå¬ */ |
| | | clickable?: boolean |
| | | }>(), |
| | | { clickable: false } |
| | | ) |
| | | |
| | | /** æ¯å¦ç¨æ·åçï¼å³å® UserAvatar æ¯å¦å¸¦ id 触å UserInfoCard */ |
| | | const isUser = computed(() => isPrivateConversation(props.card.targetType)) |
| | | /** åçæ ç¾ä¿¡æ¯ */ |
| | | const labelInfo = computed(() => getCardLabelInfo(props.card)) |
| | | </script> |
| | | |
| | | <template> |
| | | <!-- |
| | | åçæ¶æ¯æ°æ³¡ / åçé¢è§å¡ï¼240pxï¼ï¼ç¨æ·åç + 群åçéç¨ |
| | | - 头å + åå + 群æåæ°å¯æ é¢ï¼ä»
群åçï¼+ åºé¨åéæ¡ã群åç / 个人åçã |
| | | - ç¨æ·åçæ :id ä¼ ç» UserAvatar 让ç¹å» avatar å¼¹ UserInfoCardï¼ç¾¤åçä¸ä¼ id |
| | | - æ´å¡ click ç±è°ç¨æ¹çå¬ï¼@clickï¼ï¼ç»ä»¶ä¸å
åµä¸å¡é»è¾ |
| | | --> |
| | | <div |
| | | class="flex flex-col w-[240px] rounded-md overflow-hidden bg-[var(--ant-color-bg-container)] border border-solid border-[var(--im-border-color-lighter)]" |
| | | :class="{ 'cursor-pointer': clickable }" |
| | | > |
| | | <div class="flex gap-2.5 items-center px-3 py-2.5"> |
| | | <UserAvatar |
| | | :id="isUser ? card.targetId : undefined" |
| | | :url="card.avatar" |
| | | :name="card.name" |
| | | :size="40" |
| | | :clickable="false" |
| | | /> |
| | | <div class="flex flex-col flex-1 min-w-0"> |
| | | <div class="text-sm font-medium truncate text-[var(--ant-color-text)]"> |
| | | {{ card.name }} |
| | | </div> |
| | | <div |
| | | v-if="!isUser && card.memberCount" |
| | | class="text-12px truncate text-[var(--ant-color-text-placeholder)]" |
| | | > |
| | | {{ card.memberCount }} 人群è |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div |
| | | class="px-3 py-1 text-12px border-t border-t-solid text-[var(--ant-color-text-placeholder)] border-[var(--im-border-color-lighter)] bg-[var(--ant-color-fill-tertiary)]" |
| | | > |
| | | {{ labelInfo.label }} |
| | | </div> |
| | | </div> |
| | | </template> |