From 7b9b78b2848702db1d44ba01aed514403a12c4bb Mon Sep 17 00:00:00 2001 From: "Jiuling.Lei" Date: Fri, 13 Mar 2026 06:49:57 +0000 Subject: [PATCH] feature-add-repo-settings-add-default-branch-update --- .../ApplicationSpaceDetail.vue | 10 +- .../ApplicationSpaceSettings.vue | 60 +++++++++++- .../src/components/codes/CodeSettings.vue | 54 ++++++++++- .../components/datasets/DatasetSettings.vue | 53 +++++++++- frontend/src/components/mcp/McpSettings.vue | 61 ++++++++++++ .../src/components/models/ModelSettings.vue | 53 +++++++++- .../src/components/shared/BranchDropdown.vue | 4 +- frontend/src/components/shared/FileList.vue | 97 ++++++++++--------- frontend/src/components/shared/RepoDetail.vue | 12 ++- .../src/components/shared/TabContainer.vue | 16 ++- .../src/components/skills/SkillSettings.vue | 41 ++++++++ frontend/src/locales/en_js/all.js | 1 + .../src/locales/en_js/application_spaces.js | 2 + frontend/src/locales/en_js/codes.js | 2 + frontend/src/locales/en_js/mcp_servers.js | 4 +- frontend/src/locales/en_js/models.js | 2 + frontend/src/locales/zh_hant_js/all.js | 1 + .../locales/zh_hant_js/application_spaces.js | 2 + frontend/src/locales/zh_hant_js/codes.js | 2 + frontend/src/locales/zh_hant_js/datasets.js | 2 + .../src/locales/zh_hant_js/mcp_servers.js | 4 +- frontend/src/locales/zh_hant_js/models.js | 4 +- frontend/src/locales/zh_js/all.js | 1 + .../src/locales/zh_js/application_spaces.js | 2 + frontend/src/locales/zh_js/codes.js | 2 + frontend/src/locales/zh_js/datasets.js | 6 ++ frontend/src/locales/zh_js/mcp_servers.js | 4 +- frontend/src/locales/zh_js/models.js | 4 +- 28 files changed, 432 insertions(+), 74 deletions(-) diff --git a/frontend/src/components/application_spaces/ApplicationSpaceDetail.vue b/frontend/src/components/application_spaces/ApplicationSpaceDetail.vue index 5e47accc0..11238c7ad 100644 --- a/frontend/src/components/application_spaces/ApplicationSpaceDetail.vue +++ b/frontend/src/components/application_spaces/ApplicationSpaceDetail.vue @@ -284,10 +284,12 @@ const repoData = data.value.data repoDetailStore.initialize(repoData, props.repoType) - - setRepoTab({ - currentBranch: props.currentBranch ? props.currentBranch : repoDetailStore.defaultBranch, - }) + + if (!isUpdate) { + setRepoTab({ + currentBranch: props.currentBranch || repoDetailStore.defaultBranch + }) + } return true } catch (error) { return false diff --git a/frontend/src/components/application_spaces/ApplicationSpaceSettings.vue b/frontend/src/components/application_spaces/ApplicationSpaceSettings.vue index 8d6edb557..bbd6faf49 100644 --- a/frontend/src/components/application_spaces/ApplicationSpaceSettings.vue +++ b/frontend/src/components/application_spaces/ApplicationSpaceSettings.vue @@ -119,6 +119,37 @@ /> + + +
+
+
+ {{ $t('application_spaces.edit.defaultBranch') }} +
+
+ {{ $t('application_spaces.edit.defaultBranchDesc') }} +
+
+
+ + + + +
+
@@ -600,6 +631,9 @@ theMinReplica: this.minReplica != null ? this.minReplica : 0, originalApplicationSpaceNickname: this.applicationSpaceNickname || '', originalApplicationSpaceDesc: this.applicationSpaceDesc || '', + originalDefaultBranch: this.default_branch || '', + theDefaultBranch: this.default_branch || '', + branchList: [], originalVariables: JSON.stringify(this.variables || {}), originalClusterId: this.clusterId || '', originalCloudResource: this.cloudResource != null ? String(this.cloudResource) : '', @@ -684,6 +718,9 @@ hasDescChanged() { return this.theApplicationSpaceDesc.trim() !== this.originalApplicationSpaceDesc.trim() }, + hasDefaultBranchChanged() { + return this.theDefaultBranch.trim() !== this.originalDefaultBranch.trim() + }, hasVariablesChanged() { return JSON.stringify(this.theVariables) !== this.originalVariables }, @@ -713,6 +750,10 @@ applicationSpaceDesc(newDesc, _) { this.theApplicationSpaceDesc = newDesc }, + default_branch(newBranch) { + this.theDefaultBranch = newBranch + this.originalDefaultBranch = newBranch + }, cloudResource(newResource, _) { this.theCloudResource = /^\d+$/.test(newResource) ? Number(newResource) : this.cloudResource }, @@ -737,8 +778,12 @@ emits: ['showSpaceLogs'], async mounted() { await this.fetchClusters() - // this.fetchSpaceResources() - this.fetchSpaceDetail() + // Fetch space detail first to get the latest cloudResource value + await this.fetchSpaceDetail() + // Then fetch resources with the updated cloudResource + await this.fetchSpaceResources() + await this.fetchBranches() + if (this.tags && Object.keys(this.tags).length > 0) { this.getSelectTags() } @@ -1135,6 +1180,17 @@ } }, + async updateDefaultBranch() { + const branch = this.theDefaultBranch.trim() + if (!branch) return + this.updateApplicationSpace({ default_branch: branch }, this.$t('application_spaces.edit.defaultBranch')) + }, + + async fetchBranches() { + const { data } = await useFetchApi(`/spaces/${this.path}/branches`).json() + this.branchList = data.value?.data || [] + }, + updateApplicationSpaceCloudResource() { const payload = { resource_id: this.theCloudResource } this.updateApplicationSpace(payload,this.$t('application_spaces.edit.cloudResource')) diff --git a/frontend/src/components/codes/CodeSettings.vue b/frontend/src/components/codes/CodeSettings.vue index 056c51e79..bc87f69aa 100644 --- a/frontend/src/components/codes/CodeSettings.vue +++ b/frontend/src/components/codes/CodeSettings.vue @@ -74,6 +74,35 @@ + +
+
+
+ {{ $t('codes.edit.defaultBranch') }} +
+
+ {{ $t('codes.edit.defaultBranchDesc') }} +
+
+
+ + + + +
+
+ @@ -179,6 +208,9 @@ codePath: this.path, originalCodeNickname: this.codeNickname || '', originalCodeDesc: this.codeDesc || '', + originalDefaultBranch: this.default_branch || '', + theDefaultBranch: this.default_branch || '', + branchList: [], options: [ { value: 'Private', label: this.$t('all.private') }, { value: 'Public', label: this.$t('all.public') } @@ -194,6 +226,9 @@ hasDescChanged() { return this.theCodeDesc.trim() !== this.originalCodeDesc.trim() }, + hasDefaultBranchChanged() { + return this.theDefaultBranch.trim() !== this.originalDefaultBranch.trim() + }, visibilityName: { get() { return !!this.privateVisibility ? 'Private' : 'Public' @@ -209,9 +244,15 @@ }, codeDesc(newDesc, _) { this.theCodeDesc = newDesc + }, + default_branch(newBranch) { + this.theDefaultBranch = newBranch + this.originalDefaultBranch = newBranch } }, - mounted() {}, + mounted() { + this.fetchBranches() + }, inject: ['fetchRepoDetail'], methods: { ...mapActions(useRepoDetailStore, ['updateVisibility']), @@ -294,6 +335,17 @@ } }, + async updateDefaultBranch() { + const branch = this.theDefaultBranch.trim() + if (!branch) return + this.updateCode({ default_branch: branch }) + }, + + async fetchBranches() { + const { data } = await useFetchApi(`/codes/${this.path}/branches`).json() + this.branchList = data.value?.data || [] + }, + async updateCode(payload) { const codeUpdateEndpoint = `/codes/${this.path}` const options = { diff --git a/frontend/src/components/datasets/DatasetSettings.vue b/frontend/src/components/datasets/DatasetSettings.vue index 288d0ac41..10366c3c6 100644 --- a/frontend/src/components/datasets/DatasetSettings.vue +++ b/frontend/src/components/datasets/DatasetSettings.vue @@ -75,6 +75,36 @@ + +
+
+
+ {{ $t('datasets.edit.defaultBranch') }} +
+
+ {{ $t('datasets.edit.defaultBranchDesc') }} +
+
+
+ + + + +
+
+ @@ -330,6 +360,9 @@ isUpdatingIndustryTags: false, originalDatasetNickname: this.datasetNickname || '', originalDatasetDesc: this.datasetDesc || '', + originalDefaultBranch: this.default_branch || '', + theDefaultBranch: this.default_branch || '', + branchList: [], originalTags: [], originalIndustryTags: [], options: [ @@ -347,6 +380,9 @@ hasDescChanged() { return this.theDatasetDesc.trim() !== this.originalDatasetDesc.trim() }, + hasDefaultBranchChanged() { + return this.theDefaultBranch.trim() !== this.originalDefaultBranch.trim() + }, hasTagsChanged() { if (this.originalTags.length !== this.selectedTags.length) return true const originalTagIds = this.originalTags.map(tag => tag.uid).sort() @@ -372,10 +408,10 @@ if (Object.keys(this.tags).length > 0) { this.getSelectTags() } - // 监听全局点击事件 document.addEventListener('click', this.collapseTagList) this.getIndustryTags() this.fetchReadme() + this.fetchBranches() }, watch: { datasetNickname(newNickname, _) { @@ -384,6 +420,10 @@ datasetDesc(newDesc, _) { this.theDatasetDesc = newDesc }, + default_branch(newBranch) { + this.theDefaultBranch = newBranch + this.originalDefaultBranch = newBranch + }, tagList(newTagList, _) { this.theTagList = newTagList }, @@ -742,6 +782,17 @@ } }, + async updateDefaultBranch() { + const branch = this.theDefaultBranch.trim() + if (!branch) return + this.updateDataset({ default_branch: branch }) + }, + + async fetchBranches() { + const { data } = await useFetchApi(`/datasets/${this.path}/branches`).json() + this.branchList = data.value?.data || [] + }, + async updateDataset(payload) { const datasetUpdateEndpoint = `/datasets/${this.path}` const options = { diff --git a/frontend/src/components/mcp/McpSettings.vue b/frontend/src/components/mcp/McpSettings.vue index ce53f9bd7..c927f289b 100644 --- a/frontend/src/components/mcp/McpSettings.vue +++ b/frontend/src/components/mcp/McpSettings.vue @@ -78,6 +78,40 @@ + +
+
+
+ {{ $t('mcps.edit.defaultBranch') }} +
+
+ {{ $t('mcps.edit.defaultBranchDesc') }} +
+
+
+ + + + +
+
+ + +
@@ -261,6 +295,9 @@ const delDesc = ref('') const theMcpNickname = ref(props.mcpNickname || '') const theMcpDesc = ref(props.mcpDesc || '') + const theDefaultBranch = ref(props.defaultBranch || '') + const originalDefaultBranch = ref(props.defaultBranch || '') + const branchList = ref([]) const mcpPath = ref(props.path) const readmeContent = ref('') const readmeSha = ref('') @@ -297,6 +334,7 @@ } document.addEventListener('click', collapseTagList) fetchReadme() + fetchBranches() }) onBeforeUnmount(() => { @@ -317,6 +355,14 @@ } ) + watch( + () => props.defaultBranch, + (newBranch) => { + theDefaultBranch.value = newBranch + originalDefaultBranch.value = newBranch + } + ) + watch( () => props.tagList, (newTagList) => { @@ -570,6 +616,21 @@ } } + const hasDefaultBranchChanged = computed(() => + theDefaultBranch.value.trim() !== originalDefaultBranch.value.trim() + ) + + const updateDefaultBranch = () => { + const branch = theDefaultBranch.value.trim() + if (!branch) return + updateMcp({ default_branch: branch }) + } + + const fetchBranches = async () => { + const { data } = await useFetchApi(`/mcps/${props.path}/branches`).json() + branchList.value = data.value?.data || [] + } + const updateMcp = async (payload) => { const mcpUpdateEndpoint = `/mcps/${props.path}` const options = { diff --git a/frontend/src/components/models/ModelSettings.vue b/frontend/src/components/models/ModelSettings.vue index b23fb9514..70523e0dd 100644 --- a/frontend/src/components/models/ModelSettings.vue +++ b/frontend/src/components/models/ModelSettings.vue @@ -73,6 +73,36 @@
+ +
+
+
+ {{ $t('models.edit.defaultBranch') }} +
+
+ {{ $t('models.edit.defaultBranchDesc') }} +
+
+
+ + + + +
+
+ @@ -323,6 +353,9 @@ isUpdatingIndustryTags: false, originalModelNickname: this.modelNickname || '', originalModelDesc: this.modelDesc || '', + originalDefaultBranch: this.default_branch || '', + theDefaultBranch: this.default_branch || '', + branchList: [], originalTags: [], originalIndustryTags: [], } @@ -336,6 +369,9 @@ hasDescChanged() { return this.theModelDesc.trim() !== this.originalModelDesc.trim() }, + hasDefaultBranchChanged() { + return this.theDefaultBranch.trim() !== this.originalDefaultBranch.trim() + }, hasTagsChanged() { if (this.originalTags.length !== this.selectedTags.length) return true const originalTagIds = this.originalTags.map(tag => tag.uid).sort() @@ -364,6 +400,7 @@ document.addEventListener('click', this.collapseTagList) this.getIndustryTags() this.fetchReadme() + this.fetchBranches() }, watch: { modelNickname(newNickname, _) { @@ -372,6 +409,10 @@ modelDesc(newDesc, _) { this.theModelDesc = newDesc }, + default_branch(newBranch) { + this.theDefaultBranch = newBranch + this.originalDefaultBranch = newBranch + }, tagList(newTagList, _) { this.theTagList = newTagList }, @@ -655,7 +696,6 @@ tags, license } - console.log(111, newMetadata) const newMetadataString = yaml.dump(newMetadata) const newContent = `---\n${newMetadataString}\n---\n\n${content}` await this.updateReadme(newContent) @@ -725,6 +765,17 @@ } }, + async updateDefaultBranch() { + const branch = this.theDefaultBranch.trim() + if (!branch) return + this.updateModel({ default_branch: branch }) + }, + + async fetchBranches() { + const { data } = await useFetchApi(`/models/${this.path}/branches`).json() + this.branchList = data.value?.data || [] + }, + async updateModel(payload) { const modelUpdateEndpoint = `/models/${this.path}` const options = { diff --git a/frontend/src/components/shared/BranchDropdown.vue b/frontend/src/components/shared/BranchDropdown.vue index 2b5d650ed..9ccb31eb6 100644 --- a/frontend/src/components/shared/BranchDropdown.vue +++ b/frontend/src/components/shared/BranchDropdown.vue @@ -60,9 +60,9 @@ if (data.value) { branches.value = data.value.data - + const branchExists = (branches.value || []).some(branch => branch.name === props.currentBranch) - + if (!branchExists && branches.value.length > 0) { const defaultBranch = branches.value[0].name emit('changeBranch', defaultBranch) diff --git a/frontend/src/components/shared/FileList.vue b/frontend/src/components/shared/FileList.vue index e8823b1e3..3d5a4fef3 100644 --- a/frontend/src/components/shared/FileList.vue +++ b/frontend/src/components/shared/FileList.vue @@ -154,7 +154,7 @@