This is an automated email from the ASF dual-hosted git repository. pearl11594 pushed a commit to branch cks-enhancements-part2 in repository https://gitbox.apache.org/repos/asf/cloudstack.git
commit 95e37563f48573780b07a038a7f48c0bc04e9b64 Author: Pearl Dsilva <[email protected]> AuthorDate: Wed Jan 29 12:28:35 2025 -0500 Login to a specific Project view --- ui/src/views/auth/Login.vue | 44 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/ui/src/views/auth/Login.vue b/ui/src/views/auth/Login.vue index 47e2f34c57e..8610900f271 100644 --- a/ui/src/views/auth/Login.vue +++ b/ui/src/views/auth/Login.vue @@ -97,6 +97,18 @@ </template> </a-input> </a-form-item> + <a-form-item ref="project" name="project"> + <a-input + size="large" + type="text" + :placeholder="$t('label.project')" + v-model:value="form.project" + > + <template #prefix> + <block-outlined /> + </template> + </a-input> + </a-form-item> </a-tab-pane> <a-tab-pane key="saml" :disabled="idps.length === 0"> <template #tab> @@ -230,7 +242,8 @@ export default { loginType: 0 }, server: '', - forgotPasswordEnabled: false + forgotPasswordEnabled: false, + project: null } }, created () { @@ -255,7 +268,8 @@ export default { this.form = reactive({ server: (this.server.apiHost || '') + this.server.apiBase, username: this.$route.query?.username || '', - domain: this.$route.query?.domain || '' + domain: this.$route.query?.domain || '', + project: null }) this.rules = reactive({}) this.setRules() @@ -447,7 +461,7 @@ export default { }) }) }, - loginSuccess (res) { + async loginSuccess (res) { this.$notification.destroy() this.$store.commit('SET_COUNT_NOTIFY', 0) if (store.getters.twoFaEnabled === true && store.getters.twoFaProvider !== '' && store.getters.twoFaProvider !== undefined) { @@ -456,9 +470,33 @@ export default { this.$router.push({ path: '/setup2FA' }).catch(() => {}) } else { this.$store.commit('SET_LOGIN_FLAG', true) + const values = toRaw(this.form) + if (values.project) { + await this.getProject(values.project) + this.$store.dispatch('ProjectView', this.project.id) + this.$store.dispatch('SetProject', this.project) + this.$store.dispatch('ToggleTheme', this.project.id === undefined ? 'light' : 'dark') + } this.$router.push({ path: '/dashboard' }).catch(() => {}) } }, + getProject (projectName) { + return new Promise((resolve, reject) => { + api('listProjects', { + response: 'json', + domainId: this.selectedDomain, + details: 'min' + }).then((response) => { + const projects = response.listprojectsresponse.project + this.project = projects.filter(project => project.name === projectName)?.[0] || null + resolve(this.project) + }).catch((error) => { + this.$notifyError(error) + }).finally(() => { + this.loading = false + }) + }) + }, requestFailed (err) { if (err && err.response && err.response.data && err.response.data.loginresponse) { const error = err.response.data.loginresponse.errorcode + ': ' + err.response.data.loginresponse.errortext
