@@ -183,4 +190,31 @@ defineExpose({
margin-left: 5px;
margin-top: -4px;
}
+.release-settings {
+ margin-bottom: 16px;
+ padding: 14px 14px 10px;
+ border: 1px solid var(--el-border-color-light);
+ border-radius: 10px;
+}
+.compact-form-item {
+ margin-bottom: 12px;
+}
+.compact-form-item :deep(.el-form-item__label) {
+ padding-bottom: 6px;
+}
+.setting-control {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ max-width: 340px;
+ width: 100%;
+}
+.setting-control :deep(.el-input),
+.setting-control :deep(.el-input-number) {
+ flex: 1;
+ width: 100%;
+}
+.setting-action-btn {
+ min-width: 64px;
+}
diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts
index 8f0ef3879233..1a6e1497f062 100644
--- a/frontend/src/lang/modules/en.ts
+++ b/frontend/src/lang/modules/en.ts
@@ -2196,7 +2196,7 @@ const message = {
about: 'About',
versionItem: 'Current Version',
- backupCopies: 'Number of Copies to Keep',
+ backupCopies: 'Backup Copies',
backupCopiesHelper: 'Set the number of upgrade backup copies to keep for version rollback. 0 means keep all.',
backupCopiesRule: 'Please keep at least 3 upgrade backup records',
release: 'Release Notes',
@@ -3858,7 +3858,7 @@ const message = {
masterBackup: 'Master Node Backup',
backupNode: 'Backup Node',
backupFrequency: 'Backup Frequency (hours)',
- backupCopies: 'Backup Retention Copies',
+ backupCopies: 'Backup Copies',
noBackupNode: 'The backup node is currently empty. Select a backup node to save and try again!',
masterBackupAlert:
'Master node backup is not currently configured. To ensure data security, please set up a backup node as soon as possible to facilitate manual switching to a new master node in case of failure.',
diff --git a/frontend/src/lang/modules/es-es.ts b/frontend/src/lang/modules/es-es.ts
index 469197e0fa95..1536efde5439 100644
--- a/frontend/src/lang/modules/es-es.ts
+++ b/frontend/src/lang/modules/es-es.ts
@@ -2223,7 +2223,7 @@ const message = {
about: 'Acerca de',
versionItem: 'Versión Actual',
- backupCopies: 'Número de Copias a Conservar',
+ backupCopies: 'Copias de Respaldo',
backupCopiesHelper:
'Establezca el número de copias de respaldo de actualización para conservar para la reversión de versión. 0 significa conservar todas.',
backupCopiesRule: 'Conserve al menos 3 registros de respaldo de actualización',
@@ -3843,7 +3843,7 @@ const message = {
masterBackup: 'Respaldo del Nodo Principal',
backupNode: 'Nodo de Respaldo',
backupFrequency: 'Frecuencia de Respaldo (horas)',
- backupCopies: 'Copias de Retención de Respaldo',
+ backupCopies: 'Copias de Respaldo',
noBackupNode: 'Actualmente no hay nodo de respaldo configurado. Selecciona uno y vuelve a intentarlo.',
masterBackupAlert:
'No se ha configurado un respaldo del nodo principal. Para garantizar la seguridad de los datos, configura un nodo de respaldo lo antes posible y así facilitar el cambio manual en caso de fallo.',
diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts
index c6b720a41a51..0a3fc33cc257 100644
--- a/frontend/src/lang/modules/ja.ts
+++ b/frontend/src/lang/modules/ja.ts
@@ -2145,7 +2145,7 @@ const message = {
about: 'について',
versionItem: '現在のバージョン',
- backupCopies: '保持するバックアップ数',
+ backupCopies: 'バックアップ数',
backupCopiesHelper:
'バージョンロールバック用に保持するアップグレードバックアップの数を設定します。0はすべて保持を意味します。',
backupCopiesRule: '少なくとも3つのアップグレードバックアップ記録を保持してください',
@@ -3781,7 +3781,7 @@ const message = {
masterBackup: 'マスターノードバックアップ',
backupNode: 'バックアップノード',
backupFrequency: 'バックアップ頻度(時間)',
- backupCopies: 'バックアップ保持数',
+ backupCopies: 'バックアップ数',
noBackupNode: '現在バックアップノードが空です。保存するバックアップノードを選択して再試行してください!',
masterBackupAlert:
'現在マスターノードのバックアップが設定されていません。データセキュリティを確保するため、障害時に新しいマスターノードに手動で切り替えられるよう、速やかにバックアップノードを設定してください。',
diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts
index d1229d917ba1..d9129e442861 100644
--- a/frontend/src/lang/modules/ko.ts
+++ b/frontend/src/lang/modules/ko.ts
@@ -2108,7 +2108,7 @@ const message = {
about: '정보',
versionItem: '현재 버전',
- backupCopies: '보관할 백업 복사본 수',
+ backupCopies: '백업 수',
backupCopiesHelper:
'버전 롤백을 위해 보관할 업그레이드 백업 복사본 수를 설정합니다. 0은 모두 보관을 의미합니다.',
backupCopiesRule: '최소 3개의 업그레이드 백업 기록을 보관하세요',
@@ -3708,7 +3708,7 @@ const message = {
masterBackup: '마스터 노드 백업',
backupNode: '백업 노드',
backupFrequency: '백업 주기(시간)',
- backupCopies: '백업 기록 보관 수',
+ backupCopies: '백업 수',
noBackupNode: '현재 백업 노드가 비어 있습니다. 저장할 백업 노드를 선택한 후 다시 시도하십시오!',
masterBackupAlert:
'현재 마스터 노드 백업이 구성되지 않았습니다. 데이터 보안을 위해 장애 시 새로운 마스터 노드로 수동 전환이 가능하도록 가능한 빨리 백업 노드를 설정하십시오.',
diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts
index 420e24dc7269..d90f4ffb9fb5 100644
--- a/frontend/src/lang/modules/ms.ts
+++ b/frontend/src/lang/modules/ms.ts
@@ -2203,7 +2203,7 @@ const message = {
about: 'Mengenai',
versionItem: 'Versi Semasa',
- backupCopies: 'Bilangan Salinan untuk Disimpan',
+ backupCopies: 'Salinan Sandaran',
backupCopiesHelper:
'Tetapkan bilangan salinan sandaran naik taraf untuk disimpan untuk pemulihan versi. 0 bermakna simpan semua.',
backupCopiesRule: 'Sila simpan sekurang-kurangnya 3 rekod sandaran naik taraf',
@@ -3848,7 +3848,7 @@ const message = {
masterBackup: 'Sandaran Nod Master',
backupNode: 'Nod Sandaran',
backupFrequency: 'Kekerapan Sandaran (jam)',
- backupCopies: 'Bilangan salinan sandaran yang disimpan',
+ backupCopies: 'Salinan Sandaran',
noBackupNode: 'Nod sandaran kosong. Sila pilih nod sandaran untuk disimpan dan cuba lagi!',
masterBackupAlert:
'Sandaran nod master belum dikonfigurasikan. Untuk memastikan keselamatan data, sila sediakan nod sandaran secepat mungkin untuk memudahkan pertukaran manual ke nod master baru sekiranya berlaku kegagalan.',
diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts
index 55f665f3fa72..5bf2e6ba76f6 100644
--- a/frontend/src/lang/modules/pt-br.ts
+++ b/frontend/src/lang/modules/pt-br.ts
@@ -2192,7 +2192,7 @@ const message = {
about: 'Sobre',
versionItem: 'Versão Atual',
- backupCopies: 'Número de Cópias a Manter',
+ backupCopies: 'Cópias de Backup',
backupCopiesHelper:
'Defina o número de cópias de backup de atualização para manter para reversão de versão. 0 significa manter todas.',
backupCopiesRule: 'Mantenha pelo menos 3 registros de backup de atualização',
@@ -3867,7 +3867,7 @@ const message = {
masterBackup: 'Backup do Nó Mestre',
backupNode: 'Nó de Backup',
backupFrequency: 'Frequência de Backup (horas)',
- backupCopies: 'Número de cópias de backup a reter',
+ backupCopies: 'Cópias de Backup',
noBackupNode:
'O nó de backup está vazio atualmente. Selecione um nó de backup para salvar e tente novamente!',
masterBackupAlert:
diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts
index 4fc529c6ccfc..014377fd65bf 100644
--- a/frontend/src/lang/modules/ru.ts
+++ b/frontend/src/lang/modules/ru.ts
@@ -2189,7 +2189,7 @@ const message = {
about: 'О программе',
versionItem: 'Текущая Версия',
- backupCopies: 'Количество Копий для Сохранения',
+ backupCopies: 'Копии Бэкапа',
backupCopiesHelper:
'Установите количество копий резервных копий обновления для сохранения для отката версии. 0 означает сохранить все.',
backupCopiesRule: 'Пожалуйста, сохраните как минимум 3 записи резервных копий обновления',
@@ -3852,7 +3852,7 @@ const message = {
masterBackup: 'Резервная копия главного узла',
backupNode: 'Резервный узел',
backupFrequency: 'Частота резервного копирования (часы)',
- backupCopies: 'Количество сохраняемых резервных копий',
+ backupCopies: 'Копии Бэкапа',
noBackupNode:
'Резервный узел в настоящее время пуст. Выберите резервный узел для сохранения и повторите попытку!',
masterBackupAlert:
diff --git a/frontend/src/lang/modules/tr.ts b/frontend/src/lang/modules/tr.ts
index 16ee10f214e3..9efb3dcf4ed8 100644
--- a/frontend/src/lang/modules/tr.ts
+++ b/frontend/src/lang/modules/tr.ts
@@ -2228,7 +2228,7 @@ const message = {
about: 'Hakkında',
versionItem: 'Mevcut Sürüm',
- backupCopies: 'Saklanacak Kopya Sayısı',
+ backupCopies: 'Yedek Kopya',
backupCopiesHelper:
'Sürüm geri alma için saklanacak yükseltme yedek kopya sayısını ayarlayın. 0, tümünü sakla anlamına gelir.',
backupCopiesRule: 'Lütfen en az 3 yükseltme yedek kaydı saklayın',
@@ -3911,7 +3911,7 @@ const message = {
masterBackup: 'Ana Düğüm Yedekleme',
backupNode: 'Yedek Düğüm',
backupFrequency: 'Yedekleme Sıklığı (saat)',
- backupCopies: 'Saklanacak yedek kopya sayısı',
+ backupCopies: 'Yedek Kopya',
noBackupNode: 'Yedek düğüm şu anda boş. Lütfen kaydetmek için bir yedek düğüm seçin ve tekrar deneyin!',
masterBackupAlert:
'Ana düğüm yedeklemesi şu anda yapılandırılmamış. Veri güvenliği için, lütfen arıza durumunda yeni bir ana düğüme manuel geçiş yapabilmek amacıyla en kısa sürede bir yedek düğüm ayarlayın.',
diff --git a/frontend/src/lang/modules/zh-Hant.ts b/frontend/src/lang/modules/zh-Hant.ts
index ac1f0ba501ca..8785ed287fc2 100644
--- a/frontend/src/lang/modules/zh-Hant.ts
+++ b/frontend/src/lang/modules/zh-Hant.ts
@@ -2062,7 +2062,7 @@ const message = {
about: '關於',
versionItem: '當前版本',
- backupCopies: '保留份數',
+ backupCopies: '備份份數',
backupCopiesHelper: '設定用於版本回滾的升級備份保留份數。0 表示保留所有。',
backupCopiesRule: '請至少儲存 3 份升級備份記錄',
release: '版本更新日誌',
@@ -3580,7 +3580,7 @@ const message = {
masterBackup: '主節點備份',
backupNode: '備份節點',
backupFrequency: '備份頻率(小時)',
- backupCopies: '備份記錄保留份數',
+ backupCopies: '備份份數',
noBackupNode: '目前備份節點為空,請選擇備份節點儲存後重試',
masterBackupAlert:
'目前未設定主節點備份,為保障資料安全,請盡快設定備份節點,便於主節點故障時可人工切換新主節點。',
diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts
index 82b36f2ef76b..19d1c6fc585b 100644
--- a/frontend/src/lang/modules/zh.ts
+++ b/frontend/src/lang/modules/zh.ts
@@ -2032,7 +2032,7 @@ const message = {
about: '关于',
versionItem: '当前版本',
- backupCopies: '保留份数',
+ backupCopies: '备份份数',
backupCopiesHelper: '设置用于版本回滚的升级备份保留份数,为 0 则保留所有。',
backupCopiesRule: '请至少保存 3 份升级备份记录',
release: '版本更新日志',
@@ -3534,7 +3534,7 @@ const message = {
masterBackup: '主节点备份',
backupNode: '备份节点',
backupFrequency: '备份频率(小时)',
- backupCopies: '备份记录保留份数',
+ backupCopies: '备份份数',
noBackupNode: '当前备份节点为空,请选择备份节点保存后重试!',
masterBackupAlert:
'当前未配置主节点备份,为保障数据安全,请尽快设置备份节点,便于主节点故障时可人工切换新主节点。',
diff --git a/frontend/src/views/ai/agents/agent/add/index.vue b/frontend/src/views/ai/agents/agent/add/index.vue
index 42a913cd5351..52a301f50cfb 100644
--- a/frontend/src/views/ai/agents/agent/add/index.vue
+++ b/frontend/src/views/ai/agents/agent/add/index.vue
@@ -108,6 +108,7 @@ import { getAgentProviderDisplayName } from '@/utils/agent';
import { App } from '@/api/interface/app';
import AdvancedSetting from '@/components/advanced-setting/index.vue';
import AccountAddDialog from '@/views/ai/agents/model/add/index.vue';
+import { useGlobalStore } from '@/composables/useGlobalStore';
const emit = defineEmits(['search', 'task']);
@@ -121,6 +122,7 @@ const providerAccountCount = ref
>({});
const manualModel = ref(false);
const appInfo = ref();
const accountAddRef = ref();
+const { isIntl } = useGlobalStore();
const form = reactive({
name: '',
@@ -215,11 +217,13 @@ const loadProviders = async () => {
}
const res = await getAgentProviders();
const data = res.data || [];
- providerOptions.value = data.map((item) => ({
+ const blockedProviders = new Set(['ark-coding-plan', 'bailian-coding-plan']);
+ const filteredData = isIntl.value ? data.filter((item) => !blockedProviders.has(item.provider)) : data;
+ providerOptions.value = filteredData.map((item) => ({
value: item.provider,
label: getAgentProviderDisplayName(item.provider, item.displayName),
}));
- providerModels.value = data.reduce((acc, item) => {
+ providerModels.value = filteredData.reduce((acc, item) => {
acc[item.provider] = item.models || [];
return acc;
}, {} as Record);
diff --git a/frontend/src/views/ai/agents/agent/config/tabs/model.vue b/frontend/src/views/ai/agents/agent/config/tabs/model.vue
index 773bbd271d39..acd68d5c71d5 100644
--- a/frontend/src/views/ai/agents/agent/config/tabs/model.vue
+++ b/frontend/src/views/ai/agents/agent/config/tabs/model.vue
@@ -35,6 +35,7 @@ import { AI } from '@/api/interface/ai';
import { getAgentProviders, pageAgentAccounts, updateAgentModelConfig } from '@/api/modules/ai';
import { Rules } from '@/global/form-rules';
import { MsgSuccess } from '@/utils/message';
+import { useGlobalStore } from '@/composables/useGlobalStore';
const emit = defineEmits(['updated']);
const { t } = useI18n();
@@ -42,6 +43,8 @@ const { t } = useI18n();
const loading = ref(false);
const saving = ref(false);
const formRef = ref();
+const { isIntl } = useGlobalStore();
+const blockedProviders = new Set(['ark-coding-plan', 'bailian-coding-plan']);
const agentId = ref(0);
const providerModels = ref>({});
@@ -81,7 +84,8 @@ const loadProviders = async () => {
}
const res = await getAgentProviders();
const data = res.data || [];
- providerModels.value = data.reduce((acc, item) => {
+ const filteredData = isIntl.value ? data.filter((item) => !blockedProviders.has(item.provider)) : data;
+ providerModels.value = filteredData.reduce((acc, item) => {
acc[item.provider] = item.models || [];
return acc;
}, {} as Record);
@@ -94,7 +98,8 @@ const loadAccounts = async () => {
provider: '',
name: '',
});
- accountOptions.value = res.data.items || [];
+ const items = res.data.items || [];
+ accountOptions.value = isIntl.value ? items.filter((item) => !blockedProviders.has(item.provider)) : items;
};
const setModelsByProvider = (provider: string) => {
diff --git a/frontend/src/views/ai/agents/model/add/index.vue b/frontend/src/views/ai/agents/model/add/index.vue
index 02574c9daa8a..86439cf30f6b 100644
--- a/frontend/src/views/ai/agents/model/add/index.vue
+++ b/frontend/src/views/ai/agents/model/add/index.vue
@@ -76,6 +76,7 @@ import { Rules } from '@/global/form-rules';
import { createAgentAccount, getAgentProviders, updateAgentAccount } from '@/api/modules/ai';
import i18n from '@/lang';
import { getAgentProviderDisplayName } from '@/utils/agent';
+import { useGlobalStore } from '@/composables/useGlobalStore';
const emit = defineEmits(['search']);
@@ -85,6 +86,7 @@ const providerOptions = ref>([]);
const providerBaseURL = ref>({});
const loading = ref(false);
const editableBaseURLProviders = ['ollama', 'custom', 'zai'];
+const { isIntl } = useGlobalStore();
const form = reactive({
id: 0,
@@ -225,11 +227,13 @@ const openDrawer = async (params?: OpenParams) => {
const loadProviders = async () => {
const res = await getAgentProviders();
const data = res.data || [];
- providerOptions.value = data.map((item) => ({
+ const blockedProviders = new Set(['ark-coding-plan', 'bailian-coding-plan']);
+ const filteredData = isIntl.value ? data.filter((item) => !blockedProviders.has(item.provider)) : data;
+ providerOptions.value = filteredData.map((item) => ({
value: item.provider,
label: getAgentProviderDisplayName(item.provider, item.displayName),
}));
- providerBaseURL.value = data.reduce((acc, item) => {
+ providerBaseURL.value = filteredData.reduce((acc, item) => {
acc[item.provider] = item.baseUrl || '';
return acc;
}, {} as Record);