WXL (wul)
17 小时以前 7a3bba9960237ef9b9714ff3fa7a4f9499601443
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
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>