From 91c82965b2d987452ca276e3a03b48c8dcda2ae9 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 19 八月 2026 11:47:26 +0800
Subject: [PATCH] config(env): 更新生产环境配置和公司名称
---
src/views/im/home/components/friend/friend-item.vue | 79 +++++++++++++++++++++++++++++++++++++++
1 files changed, 79 insertions(+), 0 deletions(-)
diff --git a/src/views/im/home/components/friend/friend-item.vue b/src/views/im/home/components/friend/friend-item.vue
new file mode 100644
index 0000000..9feebab
--- /dev/null
+++ b/src/views/im/home/components/friend/friend-item.vue
@@ -0,0 +1,79 @@
+<script lang="ts" setup>
+import type { FriendLite } from '../../types'
+
+import { useImUiStore } from '../../store/uiStore'
+import { UserAvatar } from '../user'
+
+defineOptions({ name: 'ImFriendItem' })
+
+const props = withDefaults(
+ defineProps<{
+ active?: boolean
+ friend: FriendLite
+ menu?: boolean // 鏄惁鍚敤鍙抽敭鑿滃崟锛涘湪閫夋嫨鍣ㄥ脊绐楅噷涓�鑸叧闂�
+ }>(),
+ {
+ active: false,
+ menu: true
+ }
+)
+
+const emit = defineEmits<{
+ chat: [friend: FriendLite]
+ click: [friend: FriendLite]
+ delete: [friend: FriendLite]
+}>()
+
+const uiStore = useImUiStore()
+
+/** 鍙抽敭鑿滃崟锛氬彂閫佹秷鎭� / 鍒犻櫎濂藉弸 */
+function handleContextMenu(event: MouseEvent) {
+ if (!props.menu) {
+ return
+ }
+ uiStore.openContextMenu(
+ { x: event.clientX, y: event.clientY },
+ [
+ { key: 'chat', name: '鍙戦�佹秷鎭�' },
+ { key: 'delete', name: '鍒犻櫎濂藉弸' }
+ ],
+ (item) => {
+ if (item.key === 'chat') emit('chat', props.friend)
+ else if (item.key === 'delete') emit('delete', props.friend)
+ }
+ )
+}
+</script>
+
+<template>
+ <!--
+ 濂藉弸鍗曡椤�
+ - 澶村儚 + 鏄电О
+ - 閫変腑鎬� active
+ - 鍙抽敭鑿滃崟锛堝彂娑堟伅 / 鍒犻櫎濂藉弸锛夌敱鍏ㄥ眬 ContextMenu 鎵挎帴
+ -->
+ <div
+ class="relative flex items-center gap-2.5 px-4 py-3 cursor-pointer transition-colors hover:bg-[var(--ant-color-fill)]"
+ :class="{ '!bg-[#d9ecff] dark:!bg-[var(--ant-color-primary-bg-hover)]': active }"
+ @click="$emit('click', friend)"
+ @contextmenu.prevent="handleContextMenu"
+ >
+ <!-- prefix slot锛氭斁鍦ㄥご鍍忓墠锛岀粰閫夋嫨绫诲脊绐楃殑 checkbox / 鍦嗙偣鐢紝涓嶄紶鍒欎笉娓叉煋 -->
+ <slot name="prefix"></slot>
+ <!-- 澶村儚 -->
+ <UserAvatar
+ :id="friend.id"
+ :url="friend.avatar"
+ :name="friend.nickname"
+ :size="42"
+ :clickable="false"
+ />
+ <!-- 鍗曡灞曠ず displayName 浼樺厛锛涙樀绉颁粎鍦ㄥソ鍙嬭鎯呴潰鏉垮睍绀猴紝鍒楄〃閲屼笉閲嶅 -->
+ <div class="flex flex-1 min-w-0">
+ <div class="overflow-hidden text-sm truncate text-[var(--ant-color-text)]">
+ {{ friend.displayName || friend.nickname }}
+ </div>
+ </div>
+ <slot></slot>
+ </div>
+</template>
--
Gitblit v1.9.3