Skip to content

Commit baa2e7c

Browse files
feat: change style for agent
1 parent e1e2b97 commit baa2e7c

4 files changed

Lines changed: 126 additions & 36 deletions

File tree

frontend/src/views/ai/agents/agent/add/index.vue

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,12 @@
1717
</el-form-item>
1818
<el-form-item :label="$t('aiTools.agents.provider')" prop="provider">
1919
<el-select v-model="form.provider" @change="handleProviderChange">
20-
<el-option v-for="item in providerOptions" :key="item" :label="item" :value="item" />
20+
<el-option
21+
v-for="item in providerOptions"
22+
:key="item.value"
23+
:label="item.label"
24+
:value="item.value"
25+
/>
2126
</el-select>
2227
</el-form-item>
2328
<el-form-item v-if="accountOptions.length > 0" :label="$t('aiTools.agents.account')" prop="accountId">
@@ -82,7 +87,7 @@ const open = ref(false);
8287
const formRef = ref<FormInstance>();
8388
const versions = ref<string[]>([]);
8489
const accountOptions = ref<AI.AgentAccountItem[]>([]);
85-
const providerOptions = ref<string[]>([]);
90+
const providerOptions = ref<Array<{ label: string; value: string }>>([]);
8691
const providerModels = ref<Record<string, AI.ProviderModelInfo[]>>({});
8792
const manualModel = ref(false);
8893
const appInfo = ref<App.AppDTO>();
@@ -146,16 +151,33 @@ const loadCompose = async () => {
146151
form.dockerCompose = res.data.dockerCompose || '';
147152
};
148153
154+
const providerLabelMap: Record<string, string> = {
155+
openai: 'OpenAI',
156+
ollama: 'Ollama',
157+
minimax: 'MiniMax',
158+
qwen: 'Qwen',
159+
deepseek: 'DeepSeek',
160+
anthropic: 'Anthropic',
161+
gemini: 'Gemini',
162+
};
163+
164+
const getProviderLabel = (value: string) => {
165+
return providerLabelMap[value] || value;
166+
};
167+
149168
const loadProviders = async () => {
150169
const res = await getAgentProviders();
151170
const data = res.data || [];
152-
providerOptions.value = data.map((item) => item.provider);
171+
providerOptions.value = data.map((item) => ({
172+
value: item.provider,
173+
label: getProviderLabel(item.provider),
174+
}));
153175
providerModels.value = data.reduce((acc, item) => {
154176
acc[item.provider] = item.models || [];
155177
return acc;
156178
}, {} as Record<string, AI.ProviderModelInfo[]>);
157-
if (!providerOptions.value.includes(form.provider) && providerOptions.value.length > 0) {
158-
form.provider = providerOptions.value[0];
179+
if (!providerOptions.value.find((item) => item.value === form.provider) && providerOptions.value.length > 0) {
180+
form.provider = providerOptions.value[0].value;
159181
}
160182
setDefaultModel();
161183
};

frontend/src/views/ai/agents/agent/index.vue

Lines changed: 52 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
<template>
22
<div>
33
<RouterMenu />
4-
<LayoutContent :title="$t('aiTools.agents.agentList')">
4+
<DockerStatus v-model:isActive="isActive" v-model:isExist="isExist" />
5+
<LayoutContent
6+
v-loading="loading"
7+
v-if="isExist"
8+
:class="{ mask: !isActive }"
9+
:title="$t('aiTools.agents.agentList')"
10+
>
511
<template #leftToolBar>
612
<el-button type="primary" @click="openCreate">{{ $t('aiTools.agents.createAgent') }}</el-button>
713
</template>
@@ -21,7 +27,11 @@
2127
</template>
2228
</el-table-column>
2329
<el-table-column :label="$t('aiTools.agents.bridgePort')" prop="bridgePort" width="120" />
24-
<el-table-column :label="$t('aiTools.agents.provider')" prop="provider" width="120" />
30+
<el-table-column :label="$t('aiTools.agents.provider')" prop="provider" width="120">
31+
<template #default="{ row }">
32+
{{ getProviderLabel(row.provider) }}
33+
</template>
34+
</el-table-column>
2535
<el-table-column :label="$t('aiTools.model.model')" prop="model" min-width="180" />
2636
<el-table-column :label="$t('aiTools.agents.token')" width="120">
2737
<template #default="{ row }">
@@ -42,10 +52,10 @@
4252
/>
4353
<fu-table-operations
4454
:buttons="buttons"
45-
min-width="300"
55+
min-width="200"
4656
:label="$t('commons.table.operate')"
4757
fixed="right"
48-
:ellipsis="5"
58+
:ellipsis="2"
4959
/>
5060
</ComplexTable>
5161
</template>
@@ -75,17 +85,42 @@ import ComposeLogs from '@/components/log/compose/index.vue';
7585
import TerminalDialog from '@/views/container/container/terminal/index.vue';
7686
import i18n from '@/lang';
7787
import PortJumpDialog from '@/components/port-jump/index.vue';
88+
import DockerStatus from '@/views/container/docker-status/index.vue';
7889
7990
const items = ref<AI.AgentItem[]>([]);
91+
const loading = ref(false);
8092
const addRef = ref();
8193
const taskLogRef = ref();
8294
const deleteRef = ref();
8395
const composeLogRef = ref();
8496
const dialogTerminalRef = ref();
8597
const dialogPortJumpRef = ref();
98+
const isActive = ref(false);
99+
const isExist = ref(false);
86100
const searchName = ref('');
101+
const providerLabelMap: Record<string, string> = {
102+
openai: 'OpenAI',
103+
ollama: 'Ollama',
104+
minimax: 'MiniMax',
105+
qwen: 'Qwen',
106+
deepseek: 'DeepSeek',
107+
anthropic: 'Anthropic',
108+
gemini: 'Gemini',
109+
};
110+
111+
const getProviderLabel = (value: string) => {
112+
return providerLabelMap[value] || value;
113+
};
87114
88115
const buttons = [
116+
{
117+
label: i18n.global.t('menu.terminal'),
118+
click: (row: AI.AgentItem) => openTerminal(row),
119+
},
120+
{
121+
label: i18n.global.t('commons.button.log'),
122+
click: (row: AI.AgentItem) => openLog(row),
123+
},
89124
{
90125
label: i18n.global.t('commons.operate.start'),
91126
click: (row: AI.AgentItem) => onOperate(row, 'start'),
@@ -100,14 +135,6 @@ const buttons = [
100135
label: i18n.global.t('commons.operate.restart'),
101136
click: (row: AI.AgentItem) => onOperate(row, 'restart'),
102137
},
103-
{
104-
label: i18n.global.t('commons.button.log'),
105-
click: (row: AI.AgentItem) => openLog(row),
106-
},
107-
{
108-
label: i18n.global.t('menu.terminal'),
109-
click: (row: AI.AgentItem) => openTerminal(row),
110-
},
111138
{
112139
label: i18n.global.t('commons.button.delete'),
113140
click: (row: AI.AgentItem) => onDelete(row),
@@ -121,14 +148,19 @@ const paginationConfig = reactive({
121148
});
122149
123150
const search = async () => {
124-
const req: SearchWithPage = {
125-
page: paginationConfig.currentPage,
126-
pageSize: paginationConfig.pageSize,
127-
info: searchName.value || '',
128-
};
129-
const res = await pageAgents(req);
130-
items.value = res.data.items || [];
131-
paginationConfig.total = res.data.total || 0;
151+
loading.value = true;
152+
try {
153+
const req: SearchWithPage = {
154+
page: paginationConfig.currentPage,
155+
pageSize: paginationConfig.pageSize,
156+
info: searchName.value || '',
157+
};
158+
const res = await pageAgents(req);
159+
items.value = res.data.items || [];
160+
paginationConfig.total = res.data.total || 0;
161+
} finally {
162+
loading.value = false;
163+
}
132164
};
133165
134166
const openCreate = () => {

frontend/src/views/ai/agents/model/add/index.vue

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
11
<template>
22
<DrawerPro v-model="open" :header="headerTitle" size="large" @close="handleClose">
33
<el-form ref="formRef" :model="form" :rules="rules" label-position="top" v-loading="loading">
4+
<el-form-item :label="$t('commons.table.name')" prop="name">
5+
<el-input v-model="form.name" />
6+
</el-form-item>
47
<el-form-item :label="$t('aiTools.agents.provider')" prop="provider">
58
<el-select v-model="form.provider" @change="handleProviderChange" :disabled="form.id > 0">
6-
<el-option v-for="item in providerOptions" :key="item" :label="item" :value="item" />
9+
<el-option
10+
v-for="item in providerOptions"
11+
:key="item.value"
12+
:label="item.label"
13+
:value="item.value"
14+
/>
715
</el-select>
816
</el-form-item>
9-
<el-form-item :label="$t('aiTools.agents.accountName')" prop="name">
10-
<el-input v-model="form.name" />
11-
</el-form-item>
1217
<el-form-item :label="$t('aiTools.agents.baseUrl')" prop="baseURL">
1318
<el-input v-model="form.baseURL" :disabled="form.provider !== 'ollama'" />
1419
</el-form-item>
@@ -39,16 +44,28 @@ import { computed, onMounted, reactive, ref } from 'vue';
3944
import { FormInstance } from 'element-plus';
4045
import { Rules } from '@/global/form-rules';
4146
import { createAgentAccount, getAgentProviders, updateAgentAccount } from '@/api/modules/ai';
42-
import { MsgSuccess } from '@/utils/message';
4347
import i18n from '@/lang';
4448
4549
const emit = defineEmits(['search']);
4650
4751
const open = ref(false);
4852
const formRef = ref<FormInstance>();
49-
const providerOptions = ref<string[]>([]);
53+
const providerOptions = ref<Array<{ label: string; value: string }>>([]);
5054
const providerBaseURL = ref<Record<string, string>>({});
5155
const loading = ref(false);
56+
const providerLabelMap: Record<string, string> = {
57+
openai: 'OpenAI',
58+
ollama: 'Ollama',
59+
minimax: 'MiniMax',
60+
qwen: 'Qwen',
61+
deepseek: 'DeepSeek',
62+
anthropic: 'Anthropic',
63+
gemini: 'Gemini',
64+
};
65+
66+
const getProviderLabel = (value: string) => {
67+
return providerLabelMap[value] || value;
68+
};
5269
5370
const form = reactive({
5471
id: 0,
@@ -95,7 +112,6 @@ const submit = async () => {
95112
remark: form.remark,
96113
});
97114
}
98-
MsgSuccess();
99115
emit('search');
100116
open.value = false;
101117
} finally {
@@ -147,13 +163,16 @@ const openDrawer = (params?: OpenParams) => {
147163
const loadProviders = async () => {
148164
const res = await getAgentProviders();
149165
const data = res.data || [];
150-
providerOptions.value = data.map((item) => item.provider);
166+
providerOptions.value = data.map((item) => ({
167+
value: item.provider,
168+
label: getProviderLabel(item.provider),
169+
}));
151170
providerBaseURL.value = data.reduce((acc, item) => {
152171
acc[item.provider] = item.baseUrl || '';
153172
return acc;
154173
}, {} as Record<string, string>);
155174
if (!form.provider && providerOptions.value.length > 0) {
156-
form.provider = providerOptions.value[0];
175+
form.provider = providerOptions.value[0].value;
157176
handleProviderChange();
158177
}
159178
};

frontend/src/views/ai/agents/model/index.vue

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,12 @@
1111
</template>
1212
<template #main>
1313
<ComplexTable :data="items" :pagination-config="paginationConfig" @search="search">
14-
<el-table-column :label="$t('aiTools.agents.provider')" prop="provider" width="120" />
15-
<el-table-column :label="$t('aiTools.agents.accountName')" prop="name" min-width="200" />
14+
<el-table-column :label="$t('commons.table.name')" prop="name" min-width="200" />
15+
<el-table-column :label="$t('aiTools.agents.provider')" prop="provider" width="120">
16+
<template #default="{ row }">
17+
{{ getProviderLabel(row.provider) }}
18+
</template>
19+
</el-table-column>
1620
<el-table-column :label="$t('aiTools.agents.baseUrl')" prop="baseUrl" min-width="200" />
1721
<el-table-column :label="$t('aiTools.agents.apiKey')" prop="apiKey" min-width="160">
1822
<template #default="{ row }">
@@ -53,6 +57,19 @@ import { dateFormat } from '@/utils/util';
5357
const items = ref<AI.AgentAccountItem[]>([]);
5458
const addRef = ref();
5559
const searchName = ref('');
60+
const providerLabelMap: Record<string, string> = {
61+
openai: 'OpenAI',
62+
ollama: 'Ollama',
63+
minimax: 'MiniMax',
64+
qwen: 'Qwen',
65+
deepseek: 'DeepSeek',
66+
anthropic: 'Anthropic',
67+
gemini: 'Gemini',
68+
};
69+
70+
const getProviderLabel = (value: string) => {
71+
return providerLabelMap[value] || value;
72+
};
5673
5774
const buttons = [
5875
{

0 commit comments

Comments
 (0)