33 <div class =" main-content" >
44 <el-scrollbar >
55 <div class =" content-wrapper" >
6- <Transition name = " fade-slide " mode = " out-in " >
7- < div
8- v-if = " activeTab === ' mcp' "
9- key = " mcp "
10- class = " view-container "
11- >
12- < mcp-page
13- :config = " mcpCfg "
14- :status = " mcpStatus "
15- :loading = " loading "
16- @refresh = " refreshData "
17- @save = " saveMcp "
18- / >
19- </ div >
20-
21- <div
22- v-else- if =" activeTab === 'skills'"
6+ <div
7+ v-if = " activeTab === 'mcp' "
8+ key = " mcp"
9+ class = " view-container "
10+ >
11+ < mcp-page
12+ :config = " mcpCfg "
13+ :status = " mcpStatus "
14+ :loading = " loading "
15+ @refresh = " refreshData "
16+ @save = " saveMcp "
17+ />
18+ </ div >
19+
20+ < KeepAlive >
21+ <skills-page
22+ v-if =" activeTab === 'skills'"
2323 key =" skills"
2424 class =" view-container"
25- >
26- <skills-page
27- :config =" skillsCfg"
28- :status =" skillsStatus"
29- :agents =" subAgentStatus?.catalog"
30- :computer =" computerStatus"
31- :loading =" loading"
32- @refresh =" refreshData"
33- @save =" (value) => saveSection('skills', value)"
34- />
35- </div >
36-
37- <div
38- v-else-if =" activeTab === 'computer'"
39- key =" computer"
40- class =" view-container"
41- >
42- <computer-page
43- :config =" computerCfg"
44- :status =" computerStatus"
45- :loading =" loading"
46- />
47- </div >
48-
49- <div
50- v-else-if =" activeTab === 'subAgent'"
25+ :config =" skillsCfg"
26+ :status =" skillsStatus"
27+ :agents =" subAgentStatus?.catalog"
28+ :computer =" computerStatus"
29+ :loading =" loading"
30+ @refresh =" refreshData"
31+ @save =" (value) => saveSection('skills', value)"
32+ />
33+ </KeepAlive >
34+
35+ <div
36+ v-if =" activeTab === 'computer'"
37+ key =" computer"
38+ class =" view-container"
39+ >
40+ <computer-page
41+ :config =" computerCfg"
42+ :status =" computerStatus"
43+ :loading =" loading"
44+ />
45+ </div >
46+
47+ <KeepAlive >
48+ <sub-agent-page
49+ v-if =" activeTab === 'subAgent'"
5150 key =" sub-agent"
5251 class =" view-container"
53- >
54- <sub-agent-page
55- :config =" subAgentCfg"
56- :status =" subAgentStatus"
57- :skills =" skillsStatus?.catalog"
58- :mcp =" mcpStatus?.servers"
59- :computer =" computerStatus"
60- :tools =" toolStatus?.catalog"
61- :loading =" loading"
62- @refresh =" refreshData"
63- @save ="
64- (value) => saveSection('subAgent', value)
65- "
66- />
67- </div >
68-
69- <div v-else key =" tool" class =" view-container" >
70- <tool-page
71- :config =" toolCfg"
72- :status =" toolStatus"
73- :agents =" subAgentStatus?.catalog"
74- :loading =" loading"
75- @refresh =" refreshData"
76- @save =" (value) => saveSection('tool', value)"
77- />
78- </div >
79- </Transition >
52+ :config =" subAgentCfg"
53+ :status =" subAgentStatus"
54+ :skills =" skillsStatus?.catalog"
55+ :mcp =" mcpStatus?.servers"
56+ :computer =" computerStatus"
57+ :tools =" toolStatus?.catalog"
58+ :loading =" loading"
59+ @refresh =" refreshData"
60+ @save =" (value) => saveSection('subAgent', value)"
61+ />
62+ </KeepAlive >
63+
64+ <KeepAlive >
65+ <tool-page
66+ v-if =" activeTab === 'tool'"
67+ key =" tool"
68+ class =" view-container"
69+ :config =" toolCfg"
70+ :status =" toolStatus"
71+ :agents =" subAgentStatus?.catalog"
72+ :loading =" loading"
73+ @refresh =" refreshData"
74+ @save =" (value) => saveSection('tool', value)"
75+ />
76+ </KeepAlive >
8077 </div >
8178 </el-scrollbar >
8279 </div >
@@ -99,10 +96,9 @@ import type { AgentConfig } from '../../../src/types'
9996
10097const activeTab = ref (' mcp' )
10198const pending = ref (false )
102- let refreshId = 0
99+ let refreshTask : Promise < void > | undefined
103100const data = computed (() => store .chatluna_agent_webui )
104101const config = computed (() => data .value ?.config )
105- const status = computed (() => data .value ?.status )
106102const mcpCfg = computed (() => data .value ?.config ?.mcp )
107103const skillsCfg = computed (() => data .value ?.config ?.skills )
108104const computerCfg = computed (() => data .value ?.config ?.computer )
@@ -116,17 +112,24 @@ const toolStatus = computed(() => data.value?.status?.tool)
116112const loading = computed (() => pending .value || ! data .value )
117113
118114const refreshData = async () => {
119- const id = ++ refreshId
120- try {
121- pending .value = true
122- await send (' chatluna-agent/refreshConsoleData' )
123- } catch {
124- ElMessage .error (' 刷新 Agent 数据失败' )
125- } finally {
126- if (id === refreshId ) {
115+ if (refreshTask ) {
116+ await refreshTask
117+ return
118+ }
119+
120+ refreshTask = (async () => {
121+ try {
122+ pending .value = true
123+ await send (' chatluna-agent/refreshConsoleData' )
124+ } catch {
125+ ElMessage .error (' 刷新 Agent 数据失败' )
126+ } finally {
127127 pending .value = false
128+ refreshTask = undefined
128129 }
129- }
130+ })()
131+
132+ await refreshTask
130133}
131134
132135const handleTabChange = (tab : string ) => {
0 commit comments