@@ -44,65 +44,63 @@ const contextMenuAsset = ref<AssetItem | null>(null);
4444const renameInputEl = ref <HTMLInputElement | null >(null );
4545const actionMenuOpen = reactive <Record <string , boolean >>({});
4646
47- /**
48- * @description 下拉菜单选项
49- * @param asset
50- */
51- const buildMenuItems = (asset : AssetItem ): MenuItem [] => {
52- const protocols = (asset .permedProtocols || []).map ((p : any ) => p .name );
53- const uniqueProtocols = Array .from (new Set (protocols ));
47+ const buildMenuItems = computed (() => {
48+ return (asset : AssetItem ): MenuItem [] => {
49+ const protocols = (asset .permedProtocols || []).map ((p : any ) => p .name );
50+ const uniqueProtocols = Array .from (new Set (protocols ));
5451
55- const items: MenuItem [] = [
56- {
57- value: " connect" ,
58- label: t (" ContextMenu.Connect" ),
59- icon: " i-lucide-plug" ,
60- onClick : () => emits (" connectTrigger" , asset )
61- },
62- {
63- label: t (" ContextMenu.Edit" ),
64- icon: " solar:pen-new-square-linear" ,
65- onClick : () => emits (" editTrigger" , asset )
66- },
67- {
68- label: t (" ContextMenu.Rename" ),
69- icon: " i-lucide-pencil" ,
70- onClick : () => handleRenameTrigger (asset )
71- },
72- {
73- label: asset .isFavorite ? t (" ContextMenu.Unfavorite" ) : t (" ContextMenu.Favorite" ),
74- icon: " i- lucide- star" ,
75- onClick : () => (asset .isFavorite ? handleAssetUnfavorite (asset . id ) : handleAssetFavorite (asset . id ))
76- }
77- ];
52+ const items: MenuItem [] = [
53+ {
54+ value: " connect" ,
55+ label: t (" ContextMenu.Connect" ),
56+ icon: " i-lucide-plug" ,
57+ onClick : () => emits (" connectTrigger" , asset )
58+ },
59+ {
60+ label: t (" ContextMenu.Edit" ),
61+ icon: " solar:pen-new-square-linear" ,
62+ onClick : () => emits (" editTrigger" , asset )
63+ },
64+ {
65+ label: t (" ContextMenu.Rename" ),
66+ icon: " i-lucide-pencil" ,
67+ onClick : () => handleRenameTrigger (asset )
68+ },
69+ {
70+ label: asset .isFavorite ? t (" ContextMenu.Unfavorite" ) : t (" ContextMenu.Favorite" ),
71+ icon: asset . isFavorite ? " lucide:star-off " : " lucide: star" ,
72+ onClick : () => (asset .isFavorite ? handleUnfavorite (asset ) : handleFavorite (asset ))
73+ }
74+ ];
7875
79- if (uniqueProtocols .length > 1 ) {
80- const protocolItems: MenuItem [] = uniqueProtocols .map ((name : string ) => ({
81- label: ` ${t (" ContextMenu.Use" )} ${name .toUpperCase ()} ` ,
82- icon: " i-lucide-plug" ,
83- onClick : () =>
84- handleAssetConnection (
85- displayUser (asset .id , asset .permedAccounts ! ),
86- asset .id ,
87- displayProtocol (asset .id , asset .permedProtocols ! ),
88- asset .permedAccounts ! ,
89- name
90- )
91- }));
76+ if (uniqueProtocols .length > 1 ) {
77+ const protocolItems: MenuItem [] = uniqueProtocols .map ((name : string ) => ({
78+ label: ` ${t (" ContextMenu.Use" )} ${name .toUpperCase ()} ` ,
79+ icon: " i-lucide-plug" ,
80+ onClick : () =>
81+ handleAssetConnection (
82+ displayUser (asset .id , asset .permedAccounts ! ),
83+ asset .id ,
84+ displayProtocol (asset .id , asset .permedProtocols ! ),
85+ asset .permedAccounts ! ,
86+ name
87+ )
88+ }));
9289
93- const moreConnect: MenuItem = {
94- value: " moreConnect" ,
95- label: t (" ContextMenu.MoreConnect" ),
96- icon: " i-lucide-ellipsis" ,
97- onClick : () => void 0 ,
98- children: protocolItems
99- };
90+ const moreConnect: MenuItem = {
91+ value: " moreConnect" ,
92+ label: t (" ContextMenu.MoreConnect" ),
93+ icon: " i-lucide-ellipsis" ,
94+ onClick : () => void 0 ,
95+ children: protocolItems
96+ };
10097
101- items .splice (1 , 0 , moreConnect );
102- }
98+ items .splice (1 , 0 , moreConnect );
99+ }
103100
104- return items ;
105- };
101+ return items ;
102+ };
103+ });
106104
107105/**
108106 * @description 处理上下文事件
@@ -111,6 +109,22 @@ const handleContextTrigger = (asset: AssetItem) => {
111109 emits (" contextTrigger" , asset );
112110};
113111
112+ const emitFavoriteChanged = (assetId : string , favorite : boolean ) => {
113+ try {
114+ useEventBus ().emit (" favoriteChanged" , { assetId , favorite });
115+ } catch {}
116+ };
117+
118+ const handleFavorite = (asset : AssetItem ) => {
119+ handleAssetFavorite (asset .id );
120+ emitFavoriteChanged (asset .id , true );
121+ };
122+
123+ const handleUnfavorite = (asset : AssetItem ) => {
124+ handleAssetUnfavorite (asset .id );
125+ emitFavoriteChanged (asset .id , false );
126+ };
127+
114128/**
115129 * @description 触发重命名
116130 */
@@ -229,7 +243,7 @@ const columns: TableColumn<AssetItem>[] = [
229243 id: " actions" ,
230244 header : () => t (" AssetCard.Actions" ),
231245 cell : ({ row }) => {
232- const menuItems = buildMenuItems (row .original );
246+ const menuItems = buildMenuItems . value (row .original );
233247
234248 return h (
235249 UFieldGroup ,
0 commit comments