<template>
|
<div class="sso-redirect">
|
<div class="loading-container">
|
<el-alert
|
v-if="errorMessage"
|
:title="errorMessage"
|
type="error"
|
:closable="false"
|
show-icon
|
></el-alert>
|
<div v-else class="loading-content">
|
<i class="el-icon-loading"></i>
|
<p>单点登录中,请稍候...</p>
|
</div>
|
</div>
|
</div>
|
</template>
|
|
<script>
|
import { setToken } from "@/utils/auth";
|
|
export default {
|
name: "SSORedirect",
|
data() {
|
return {
|
errorMessage: "",
|
loading: true,
|
};
|
},
|
created() {
|
this.handleSSORedirect();
|
},
|
methods: {
|
// 匹配orgid
|
mateOrgid(orgid) {
|
if (orgid == "30001002") {
|
localStorage.setItem("orgname", "浙江省立同德医院翠苑院区");
|
localStorage.setItem("ZuHuID", "1400361376454545408");
|
localStorage.setItem("deptCode", "1017");
|
} else if (orgid == "30001003") {
|
localStorage.setItem("orgname", "浙江省立同德医院之江院区");
|
localStorage.setItem("ZuHuID", "1400360867068907520");
|
localStorage.setItem("deptCode", "01040201");
|
} else if (orgid == "30001004") {
|
localStorage.setItem("orgname", "浙江省立同德医院闲林院区");
|
localStorage.setItem("ZuHuID", "1429338802177000002");
|
localStorage.setItem("deptCode", "");
|
} else if (orgid == "30001005") {
|
localStorage.setItem("orgname", "浙江省立同德医院天目山路院区");
|
localStorage.setItem("ZuHuID", "1429338802177000003");
|
localStorage.setItem("deptCode", "");
|
} else if (orgid == "30001006") {
|
localStorage.setItem("orgname", "浙江省立同德医院青山湖院区");
|
localStorage.setItem("ZuHuID", "1429338802177000004");
|
localStorage.setItem("deptCode", "");
|
} else if (orgid == "30001007") {
|
localStorage.setItem("orgname", "测试院区");
|
localStorage.setItem("ZuHuID", "1429338802177000005");
|
localStorage.setItem("deptCode", "");
|
}
|
},
|
async handleSSORedirect() {
|
try {
|
console.log(11);
|
// 从URL参数中获取token和机构信息
|
let { token, orgid, orgname, ZuHuID, deptCode } = this.$route.query;
|
// token =
|
// "eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6Ijc5MWVkODNlLWE2MWYtNDI2MS05ZDZlLTNhOTVjYTU2YjZhMiJ9.q6jrRj8fwtb3FOqqwaxIFDr824hf85DW8heCj4qWYgRE55Pn0vkmcujFsYMrz9qqo047Gl7lv3rnok8pk7SKYQ"; // 验证必要参数
|
// orgid = "30001002";
|
if (!token) {
|
throw new Error("缺少认证令牌(token)");
|
}
|
console.log(token);
|
console.log(orgid);
|
console.log(orgname);
|
// console.log(redirect,'redirect');
|
|
this.mateOrgid(orgid);
|
setToken(token);
|
this.$store.commit("SET_TOKEN", token);
|
|
// 存储机构信息到localStorage
|
if (orgid) {
|
localStorage.setItem("orgid", orgid);
|
this.$store.dispatch("UpdateOrgId", orgid);
|
}
|
if (orgname) localStorage.setItem("orgname", orgname);
|
if (ZuHuID) localStorage.setItem("ZuHuID", ZuHuID);
|
if (deptCode) localStorage.setItem("deptCode", deptCode);
|
|
// 获取用户信息
|
await this.$store.dispatch("GetInfo");
|
|
// 确定重定向路径
|
let redirectPath = "/index";
|
// if (redirect) {
|
// console.log(redirect,'888');
|
|
// redirectPath = decodeURIComponent(redirect);
|
// } else {
|
// 根据用户角色决定默认跳转页面
|
const roles = this.$store.state.user.roles;
|
const username = this.$store.state.user.name;
|
|
if (roles.includes("admin") || username === "admin") {
|
redirectPath = "/index";
|
} else {
|
redirectPath = "/followvisit/discharge";
|
}
|
// }
|
|
// 跳转到目标页面
|
this.$router.replace({ path: redirectPath });
|
} catch (error) {
|
console.error("SSO登录失败:", error);
|
this.errorMessage = `单点登录失败: ${error.message || "未知错误"}`;
|
this.loading = false;
|
|
// 5秒后跳转到普通登录页
|
setTimeout(() => {
|
this.$router.replace("/login");
|
}, 5000);
|
}
|
},
|
},
|
};
|
</script>
|
|
<style scoped>
|
.sso-redirect {
|
display: flex;
|
justify-content: center;
|
align-items: center;
|
height: 100vh;
|
background-color: #f5f7fa;
|
}
|
|
.loading-container {
|
text-align: center;
|
padding: 20px;
|
background: white;
|
border-radius: 4px;
|
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
|
}
|
|
.loading-content {
|
padding: 20px;
|
}
|
|
.el-icon-loading {
|
font-size: 40px;
|
color: #409eff;
|
margin-bottom: 10px;
|
}
|
|
p {
|
margin: 0;
|
color: #606266;
|
}
|
</style>
|