WXL (wul)
3 天以前 3c802eaab73b17e802226ad198aea8818a31c56b
src/views/loginSSO.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,160 @@
<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>