登录页从路由中获取token登录
continuous-integration/drone/push Build is running Details

main
wangxiaoshuang 2025-04-01 15:35:16 +08:00
parent 42eeda29d2
commit 76252e50d1
3 changed files with 100 additions and 18 deletions

View File

@ -1,5 +1,5 @@
import { getToken, setToken, removeToken, setName, removeName } from '@/utils/auth' import { getToken, setToken, removeToken, setName, removeName } from '@/utils/auth'
import { login, getUserMenuTree, getUserPermissions, loginSelectUserRole } from '@/api/user' import { login, getUserMenuTree, getUserPermissions, loginSelectUserRole, TJUserLoginInfo } from '@/api/user'
import { getUser } from '@/api/admin' import { getUser } from '@/api/admin'
import { resetRouter } from '@/router' import { resetRouter } from '@/router'
import md5 from 'js-md5' import md5 from 'js-md5'
@ -142,6 +142,23 @@ const actions = {
}) })
}) })
}, },
loginByToken({ commit }, Token) {
return new Promise((resolve, reject) => {
TJUserLoginInfo({ Token }).then(async response => {
if (response.IsSuccess) {
zzSessionStorage.removeItem('lastWorkbench')
const data = response.Result
setToken(response.OtherInfo)
commit('SET_ROLES', data)
resolve(data)
} else {
reject(response.ErrorMessage)
}
}).catch(() => {
reject()
})
})
},
loginByRole({ commit }, userInfo) { loginByRole({ commit }, userInfo) {
const { UserId, UserTypeId } = userInfo const { UserId, UserTypeId } = userInfo
let params = { let params = {
@ -160,10 +177,12 @@ const actions = {
zzSessionStorage.setItem('userId', UserId) zzSessionStorage.setItem('userId', UserId)
const userString = decodeURIComponent(escape(window.atob(data.split('.')[1].replace(/-/g, '+').replace(/_/g, '/')))) const userString = decodeURIComponent(escape(window.atob(data.split('.')[1].replace(/-/g, '+').replace(/_/g, '/'))))
const user = JSON.parse(userString) const user = JSON.parse(userString)
// return console.log(user, user.realName)
zzSessionStorage.setItem('userTypeShortName', user.userTypeShortName) zzSessionStorage.setItem('userTypeShortName', user.userTypeShortName)
// commit('SET_USERTYPESHORTNAME', user.userTypeShortName) // commit('SET_USERTYPESHORTNAME', user.userTypeShortName)
commit('SET_NAME', user.fullName) commit('SET_NAME', user.realName)
setName(user.fullName) setName(user.realName)
zzSessionStorage.setItem('realName', user.realName)
zzSessionStorage.setItem('userTypeEnumInt', user.userTypeEnumInt) zzSessionStorage.setItem('userTypeEnumInt', user.userTypeEnumInt)
var permissions = await getUserPermissions() var permissions = await getUserPermissions()
var menuTree = await getUserMenuTree() var menuTree = await getUserMenuTree()

View File

@ -112,6 +112,8 @@
<el-button type="primary" @click="saveHospital">{{ $t("system:hospital:save") }}</el-button> <el-button type="primary" @click="saveHospital">{{ $t("system:hospital:save") }}</el-button>
</span> </span>
</el-dialog> </el-dialog>
<toggleRole v-if="toggleRoleVisible" :visible.sync="toggleRoleVisible" :loading="toggleRoleLoading"
@save="loginByRole" />
</div> </div>
</template> </template>
@ -124,11 +126,12 @@ import Img1 from '@/assets/pic-1.png'
import logoImg from '@/assets/zzlogo2.png' import logoImg from '@/assets/zzlogo2.png'
import { getHospital } from '@/api/hospital.js' import { getHospital } from '@/api/hospital.js'
import { getHIRHospitalList, updateDefaultHospital } from '@/api/admin' import { getHIRHospitalList, updateDefaultHospital } from '@/api/admin'
import { TJUserLoginInfo } from '@/api/user' import toggleRole from '@/components/toggleRole'
import { resetRouter } from '@/router'
export default { export default {
name: 'Login', name: 'Login',
components: { TopLang, Vcode }, components: { TopLang, Vcode, toggleRole },
data() { data() {
return { return {
config: WINDOW_CONFIG, config: WINDOW_CONFIG,
@ -176,7 +179,10 @@ export default {
hospitalList: [], hospitalList: [],
form: { form: {
Id: null Id: null
} },
toggleRoleVisible: false,
toggleRoleLoading: false,
} }
}, },
computed: { computed: {
@ -215,16 +221,74 @@ export default {
}, },
methods: { methods: {
...mapMutations({ setLanguage: 'lang/setLanguage' }), ...mapMutations({ setLanguage: 'lang/setLanguage' }),
loginByRole(row) {
let { UserId, UserTypeId } = row
if (this.$store.state.user.userId === UserId) {
this.toggleRoleVisible = false
this.toggleRoleLoading = false
return false
}
this.toggleRoleLoading = true
this.$store
.dispatch('user/loginByRole', { UserId, UserTypeId })
.then((res) => {
if (res) {
this.$store
.dispatch('permission/generateRoutes')
.then(async (res) => {
if (res && res.length > 0) {
resetRouter()
await this.$store.dispatch('global/getNoticeList')
this.$router.addRoutes(res)
this.toggleRoleLoading = false
if (this.loginType === 'DevOps') {
this.$router.replace({ path: res[0].path })
return
}
if (this.hasPermi(['role:radmin'])) {
this.$router.replace({ path: res[0].path })
return
}
if (
this.hasPermi(['role:pm', 'role:oa', 'role:admin', 'role:dev'])
) {
history.replaceState(null, null, '/trials/trials-inspection')
history.go(0)
} else {
history.replaceState(null, null, '/trials/trials-list')
history.go(0)
}
this.toggleRoleVisible = false
this.toggleRoleLoading = false
this.$EventBus.$emit('reload')
} else {
//
this.toggleRoleLoading = false
this.$message.warning(this.$t('login:message:login2'))
}
})
.catch((err) => {
this.toggleRoleLoading = false
})
} else {
this.toggleRoleLoading = false
}
})
.catch(() => {
this.toggleRoleLoading = false
})
},
// token // token
async TJUserLoginInfo(Token) { async TJUserLoginInfo(Token) {
try { this.$store
let params = { .dispatch('user/loginByToken', { Token }).then(res => {
Token if (res.length === 1) {
} return this.loginByRole(res[0])
let res = await TJUserLoginInfo(params) }
} catch (err) { this.toggleRoleVisible = true
console.log(err) }).catch(err => {
} console.log(err)
})
}, },
async saveHospital() { async saveHospital() {
if (this.form.Id === this.hospital.Id) return this.visible = false if (this.form.Id === this.hospital.Id) return this.visible = false

View File

@ -2,9 +2,8 @@
<div class="trials-navbar" style="position: relative"> <div class="trials-navbar" style="position: relative">
<div class="leftMenu"> <div class="leftMenu">
<!-- <img v-if="language === 'zh' && hospital.HospitalLogoPath" --> <!-- <img v-if="language === 'zh' && hospital.HospitalLogoPath" -->
<img v-if="hospital.HospitalLogoPath" <img v-if="hospital.HospitalLogoPath" :src="OSSclientConfig.basePath + hospital.HospitalLogoPath"
:src="OSSclientConfig.basePath + hospital.HospitalLogoPath" crossOrigin="anonymous" alt="" crossOrigin="anonymous" alt="" style="min-width: 170px;" />
style="min-width: 170px;" />
<div v-else style="width: 170px;"></div> <div v-else style="width: 170px;"></div>
<!-- <img v-else src="@/assets/zzlogo3.png" alt="" /> --> <!-- <img v-else src="@/assets/zzlogo3.png" alt="" /> -->
<span style="white-space: nowrap"> <span style="white-space: nowrap">
@ -74,7 +73,7 @@
</el-submenu> </el-submenu>
</el-menu> </el-menu>
<TopLang v-if="isDev" /> <TopLang v-if="isDev" />
<toggleRole v-if="toggleRoleVisible" :visible.sync="toggleRoleVisible" :loading="toggleRoleLoading" :roles="roles" <toggleRole v-if="toggleRoleVisible" :visible.sync="toggleRoleVisible" :loading="toggleRoleLoading"
@save="loginByRole" /> @save="loginByRole" />
</div> </div>
</div> </div>