From d3915927789f94f07af6cc1aa82412e0fc231a20 Mon Sep 17 00:00:00 2001 From: jiangweidong <1053570670@qq.com> Date: Thu, 23 Oct 2025 09:48:14 +0800 Subject: [PATCH 01/12] feat: Host cloud sync supports state cloud --- .../assets/Cloud/Account/components/AssetPanel.vue | 12 ++++++------ src/views/assets/Cloud/const.js | 11 ++++++++++- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/views/assets/Cloud/Account/components/AssetPanel.vue b/src/views/assets/Cloud/Account/components/AssetPanel.vue index edf8872cc..3953c0b47 100644 --- a/src/views/assets/Cloud/Account/components/AssetPanel.vue +++ b/src/views/assets/Cloud/Account/components/AssetPanel.vue @@ -77,7 +77,7 @@ export default { [this.$tc('Platform'), 'platform'], [this.$tc('Node'), 'node'], [this.$tc('Protocol'), 'protocols'], - [this.$tc('Region'), 'region_id'] + [this.$tc('Region'), 'region_name'] ], data: [] }, @@ -124,7 +124,7 @@ export default { this.ws.onmessage = e => { const data = JSON.parse(e.data) if (data.action === 'sync_region') { - this.addRegion(data.region_id) + this.addRegion(data.id, data.name) } else if (data.action === 'import') { data['@status'] = 'pending' this.$refs.importTable.addTableItem(data) @@ -140,10 +140,10 @@ export default { } } }, - addRegion(region) { - if (!this.alreadySync.includes(region)) { - this.alreadySync.push(region) - this.tip = `${this.$t('SyncRegion')}: ${this.alreadySync.at(-1)}` + addRegion(regionId, regionName) { + if (!this.alreadySync.includes(regionId)) { + this.alreadySync.push(regionId) + this.tip = `${this.$t('SyncRegion')}: ${regionName}` } }, showResult() { diff --git a/src/views/assets/Cloud/const.js b/src/views/assets/Cloud/const.js index 927ca2aef..ffd488563 100644 --- a/src/views/assets/Cloud/const.js +++ b/src/views/assets/Cloud/const.js @@ -17,6 +17,8 @@ export const ucloud = 'ucloud' export const volcengine = 'volcengine' +export const ctyun = 'ctyun' + export const qingcloud_private = 'qingcloud_private' export const huaweicloud_private = 'huaweicloud_private' export const ctyun_private = 'ctyun_private' @@ -46,7 +48,8 @@ export const publicHostProviders = [ gcp, ucloud, volcengine, - smartx + smartx, + ctyun ] export const publicDBProviders = [aliyun] @@ -141,6 +144,12 @@ export const ACCOUNT_PROVIDER_ATTRS_MAP = { attrs: ['access_key_id', 'access_key_secret'], image: require('@/assets/img/cloud/volcengine.svg') }, + [ctyun]: { + name: ctyun, + title: i18n.t('CTYun'), + attrs: ['access_key_id', 'access_key_secret'], + image: require('@/assets/img/cloud/state.svg') + }, [vmware]: { name: vmware, title: 'VMware', From a755b2ffa06eac7f6e3f3273f63955d45d61f01f Mon Sep 17 00:00:00 2001 From: jiangweidong <1053570670@qq.com> Date: Mon, 10 Nov 2025 17:02:28 +0800 Subject: [PATCH 02/12] perf: increase joint camp areas --- src/views/assets/Cloud/const.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/assets/Cloud/const.js b/src/views/assets/Cloud/const.js index ffd488563..fc8bd621e 100644 --- a/src/views/assets/Cloud/const.js +++ b/src/views/assets/Cloud/const.js @@ -147,7 +147,7 @@ export const ACCOUNT_PROVIDER_ATTRS_MAP = { [ctyun]: { name: ctyun, title: i18n.t('CTYun'), - attrs: ['access_key_id', 'access_key_secret'], + attrs: ['access_key_id', 'access_key_secret', 'project_id'], image: require('@/assets/img/cloud/state.svg') }, [vmware]: { From 4332dbcc1c44708e89d916152873894f76a9171c Mon Sep 17 00:00:00 2001 From: Bai Date: Mon, 1 Dec 2025 17:53:36 +0800 Subject: [PATCH 03/12] feat: add access token page --- package.json | 3 +- src/icons/svg/access-token.svg | 1 + src/router/profile/index.js | 10 ++++ src/views/profile/AccessToken.vue | 77 +++++++++++++++++++++++++++++++ 4 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 src/icons/svg/access-token.svg create mode 100644 src/views/profile/AccessToken.vue diff --git a/package.json b/package.json index 07192b2d9..741b556af 100644 --- a/package.json +++ b/package.json @@ -140,5 +140,6 @@ "src/**/*.{js,vue}": [ "eslint --fix" ] - } + }, + "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" } diff --git a/src/icons/svg/access-token.svg b/src/icons/svg/access-token.svg new file mode 100644 index 000000000..03402c68d --- /dev/null +++ b/src/icons/svg/access-token.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/router/profile/index.js b/src/router/profile/index.js index 6070c084b..676b0b03e 100644 --- a/src/router/profile/index.js +++ b/src/router/profile/index.js @@ -123,6 +123,16 @@ export default { permissions: ['authentication.view_connectiontoken'] } }, + { + path: '/profile/access-token', + component: () => import('@/views/profile/AccessToken'), + name: 'AccessToken', + meta: { + title: i18n.t('AccessToken'), + icon: 'access-token', + permissions: ['oauth2_provider.view_accesstoken'] + } + }, { path: '/profile/preferences', name: 'Preferences', diff --git a/src/views/profile/AccessToken.vue b/src/views/profile/AccessToken.vue new file mode 100644 index 000000000..f5f30b606 --- /dev/null +++ b/src/views/profile/AccessToken.vue @@ -0,0 +1,77 @@ + + + + + From 43e7e5cd747be977648ef67d9aa089f1fe179fb6 Mon Sep 17 00:00:00 2001 From: w940853815 <940853815@qq.com> Date: Thu, 4 Dec 2025 17:32:39 +0800 Subject: [PATCH 04/12] fix: Remove unused CAS_CREATE_USER attribute from options --- src/views/settings/Auth/CAS.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/settings/Auth/CAS.vue b/src/views/settings/Auth/CAS.vue index e6c44ccad..07289870a 100644 --- a/src/views/settings/Auth/CAS.vue +++ b/src/views/settings/Auth/CAS.vue @@ -29,7 +29,7 @@ export default { 'CAS_RENAME_ATTRIBUTES' ]], [this.$t('Other'), [ - 'CAS_ORG_IDS', 'CAS_CREATE_USER', 'CAS_LOGOUT_COMPLETELY' + 'CAS_ORG_IDS', 'CAS_LOGOUT_COMPLETELY' ]] ], fieldsMeta: { From 4ecaee36f9f4065725ead83a681ccc27e244669c Mon Sep 17 00:00:00 2001 From: w940853815 <940853815@qq.com> Date: Tue, 9 Dec 2025 14:39:30 +0800 Subject: [PATCH 05/12] fix: Remove unused relevant_system_user option from BaseTicketList --- src/views/tickets/BaseTicketList.vue | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/views/tickets/BaseTicketList.vue b/src/views/tickets/BaseTicketList.vue index 7954775fa..32752f280 100644 --- a/src/views/tickets/BaseTicketList.vue +++ b/src/views/tickets/BaseTicketList.vue @@ -189,10 +189,6 @@ export default { value: 'relevant_asset', label: this.$t('RelevantAsset') }, - { - value: 'relevant_system_user', - label: this.$t('RelevantCommand') - }, { value: 'relevant_command', label: this.$t('ApplyRunCommand') From 6350bdb42d1386a8d81d4edd94ca79a5c2671ae4 Mon Sep 17 00:00:00 2001 From: zhaojisen <1301338853@qq.com> Date: Wed, 10 Dec 2025 17:30:52 +0800 Subject: [PATCH 06/12] Fixed: Fix the issue where the remote application details page is lost and the account needs to be regenerated --- .../AppletHost/AppletHostDetail/Accounts.vue | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/views/settings/Applet/AppletHost/AppletHostDetail/Accounts.vue b/src/views/settings/Applet/AppletHost/AppletHostDetail/Accounts.vue index 70a9be13a..e895d7a29 100644 --- a/src/views/settings/Applet/AppletHost/AppletHostDetail/Accounts.vue +++ b/src/views/settings/Applet/AppletHost/AppletHostDetail/Accounts.vue @@ -1,36 +1,41 @@ From c2f7a9e8e2811401848cc640cb0308d09418feb8 Mon Sep 17 00:00:00 2001 From: w940853815 <940853815@qq.com> Date: Thu, 27 Nov 2025 16:39:28 +0800 Subject: [PATCH 09/12] feat: Implement secret readability control based on system settings --- .../Apps/AccountListTable/ViewSecret.vue | 8 ++ .../TableFormatters/SecretViewerFormatter.vue | 74 ++++++++++--------- 2 files changed, 49 insertions(+), 33 deletions(-) diff --git a/src/components/Apps/AccountListTable/ViewSecret.vue b/src/components/Apps/AccountListTable/ViewSecret.vue index 751b55f6f..d57b0cae2 100644 --- a/src/components/Apps/AccountListTable/ViewSecret.vue +++ b/src/components/Apps/AccountListTable/ViewSecret.vue @@ -62,6 +62,7 @@ import Dialog from '@/components/Dialog/index.vue' import PasswordHistoryDialog from './PasswordHistoryDialog.vue' import { SecretViewerFormatter } from '@/components/Table/TableFormatters' import { encryptPassword } from '@/utils/secure' +import { mapGetters } from 'vuex' export default { name: 'ShowSecretInfo', @@ -111,6 +112,9 @@ export default { } }, computed: { + ...mapGetters({ + publicSettings: 'publicSettings' + }), secretTypeLabel() { return this.account['secret_type'].label || 'Password' }, @@ -146,6 +150,10 @@ export default { }) }, showSecretDialog() { + if (!this.publicSettings.SECURITY_ACCOUNT_SECRET_READ) { + this.$message.warning(this.$tc('AccountSecretReadDisabled')) + return + } return this.$axios.get(this.url).then((res) => { this.secretInfo = res this.sshKeyFingerprint = res?.spec_info?.ssh_key_fingerprint || '-' diff --git a/src/components/Table/TableFormatters/SecretViewerFormatter.vue b/src/components/Table/TableFormatters/SecretViewerFormatter.vue index c469ed02f..d061e7cd6 100644 --- a/src/components/Table/TableFormatters/SecretViewerFormatter.vue +++ b/src/components/Table/TableFormatters/SecretViewerFormatter.vue @@ -38,6 +38,7 @@ From 56e07c85680e6a1ab29658d55462323993e0e1a7 Mon Sep 17 00:00:00 2001 From: w940853815 <940853815@qq.com> Date: Thu, 11 Dec 2025 16:59:20 +0800 Subject: [PATCH 10/12] fix: Remove 'Account' option from const.js --- src/views/perms/const.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/views/perms/const.js b/src/views/perms/const.js index 2d0cce55d..e391e2a4b 100644 --- a/src/views/perms/const.js +++ b/src/views/perms/const.js @@ -8,7 +8,6 @@ export const UserAssetPermissionListPageSearchConfigOptions = [ { label: i18n.t('UserGroups'), value: 'user_group' }, { label: i18n.t('AssetName'), value: 'asset_name' }, { label: i18n.t('AssetAddress'), value: 'address' }, - { label: i18n.t('Account'), value: 'accounts' }, { label: i18n.t('Valid'), value: 'is_valid', From 3d668502e1c2a191ba510cde8596d787ec1b5ac0 Mon Sep 17 00:00:00 2001 From: feng <1304903146@qq.com> Date: Fri, 12 Dec 2025 15:16:21 +0800 Subject: [PATCH 11/12] perf: chat ai custom model --- src/views/settings/Feature/Chat.vue | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/views/settings/Feature/Chat.vue b/src/views/settings/Feature/Chat.vue index d506129f5..11a66d033 100644 --- a/src/views/settings/Feature/Chat.vue +++ b/src/views/settings/Feature/Chat.vue @@ -53,7 +53,10 @@ export default { 'GPT_BASE_URL', 'GPT_API_KEY', 'GPT_PROXY', - 'GPT_MODEL' + 'GPT_MODEL', + 'IS_CUSTOM_MODEL', + 'CUSTOM_GPT_MODEL', + 'CUSTOM_DEEPSEEK_MODEL' ], fieldsMeta: { CHAT_AI_TYPE: { @@ -115,6 +118,16 @@ export default { }, CHAT_AI_EMBED_URL: { hidden: (formValue) => formValue.CHAT_AI_METHOD !== 'embed' + }, + CUSTOM_GPT_MODEL: { + hidden: (formValue) => { + return formValue.CHAT_AI_METHOD !== 'api' || formValue.CHAT_AI_TYPE !== 'gpt' || !formValue.IS_CUSTOM_MODEL + } + }, + CUSTOM_DEEPSEEK_MODEL: { + hidden: (formValue) => { + return formValue.CHAT_AI_METHOD !== 'api' || formValue.CHAT_AI_TYPE !== 'deep-seek' || !formValue.IS_CUSTOM_MODEL + } } }, submitMethod() { From 65706509b1d2bfddfa1037d9aabbc70e9bc3fc23 Mon Sep 17 00:00:00 2001 From: w940853815 <940853815@qq.com> Date: Thu, 18 Dec 2025 11:47:11 +0800 Subject: [PATCH 12/12] =?UTF-8?q?fix=EF=BC=9ADisabled=20assets=20have=20no?= =?UTF-8?q?=20audit=20records?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/assets/Asset/AssetDetail/Detail.vue | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/views/assets/Asset/AssetDetail/Detail.vue b/src/views/assets/Asset/AssetDetail/Detail.vue index a009b30b4..c4a68748c 100644 --- a/src/views/assets/Asset/AssetDetail/Detail.vue +++ b/src/views/assets/Asset/AssetDetail/Detail.vue @@ -61,8 +61,11 @@ export default { }, callbacks: { change: function(val) { + const category = this.object.category.value + const normalizedCategory = + category === 'ds' ? 'directorie' : category this.$axios.patch( - `/api/v1/assets/assets/${this.object.id}/`, + `/api/v1/assets/${normalizedCategory}s/${this.object.id}/`, { is_active: val } ).then(res => { this.$message.success(this.$tc('UpdateSuccessMsg'))