import { createWebHistory, createRouter } from "vue-router"; import store from "@/store"; import _ from "lodash"; import cryptoJs from "crypto-js"; import { whitelistJoinMeeting, registerJoinUser, visitorJoinUser, panelistJoinMeeting, } from "@/api/meeting"; const router = createRouter({ history: createWebHistory(), routes: [ { path: "/appointment/:meetingId", name: "Appointment", component: () => import("@/views/appointment.vue"), }, { path: "/verify/:meetingId", name: "Verify", component: () => import("@/views/verify.vue"), }, { path: "/panelist-verify/:meetingId", name: "PanelistVerify", component: () => import("@/views/panelist-verify.vue"), }, { path: "/meeting/:meetingId", name: "Meeting", component: () => import("@/views/meeting.vue"), }, { path: "/panelist/:meetingId", name: "Panelist", component: () => import("@/views/meeting.vue"), }, // { // path: "/host/:meetingId/:hostinfo", // name: "Host", // component: () => import("@/views/host.vue"), // }, { path: "/host/:meetingId/:createEmail/:pwd/:username/:nickname", name: "Host", component: () => import("@/views/meeting.vue"), }, { path: "/:pathMatch(.*)*", name: "NotFound", component: () => import("@/views/NotFound.vue"), }, ], }); router.beforeEach(async (to) => { await store.dispatch("getMeetingSettings"); // 判断会议信息是否存在,不存在则请求数据 if (!store.state.meeting.id && to.params.meetingId) { await store.dispatch("getMeetingInfo", to.params.meetingId); } // 前往主持人页面 if (to.name === "Host") { console.log("host"); // const bytes = cryptoJs.AES.decrypt(to.params.hostinfo, "secret"); // const decryptedData = JSON.parse(bytes.toString(cryptoJs.enc.Utf8)); store.commit("setJoinUser", { nickname: to.params.nickname, username: to.params.username, email: to.params.createEmail, }); store.commit("setPassword", to.params.pwd); return true; } // 如果要前往参会页面 if (to.name === "Meeting") { // 如果要去的页面会议号于 vuex中的不一样,则清除数据 if (to.params.meetingId !== store.state.joinUser.meetingId) { store.commit("setJoinUser", {}); store.commit("setMessagesList", []); } // 如果参会方式发生更改,则清除数据 if ( store.state.joinType && store.state.meeting.joinType !== store.state.joinType ) { store.commit("setJoinUser", {}); store.commit("setJoinType", store.state.meeting.joinType); return `/verify/${to.params.meetingId}`; } if (store.state.meeting.joinType === "1") { // 如果是白名单模式 if (store.state.joinUser.icCard) { // 检测输入的IC卡号是否在白名单范围内,是则放行,否则返回原地址 try { const { meetingPassword, email } = await whitelistJoinMeeting({ meetingId: to.params.meetingId, icCard: store.state.joinUser.icCard, }); store.commit("setJoinUser", { ...store.state.joinUser, email: email.email, token: email.token, }); store.commit("setPassword", meetingPassword); return true; } catch (error) { store.commit("setJoinUser", {}); return `/verify/${to.params.meetingId}`; } } else { store.commit("setJoinUser", {}); return `/verify/${to.params.meetingId}`; } } else { if (_.isEmpty(store.state.joinUser)) { console.log("error"); return `/verify/${to.params.meetingId}`; } else { if (store.state.meeting.joinType === "2") { const { meetingPassword, email } = await registerJoinUser( store.state.joinUser ); store.commit("setJoinUser", { ...store.state.joinUser, email: email.email, token: email.token, }); store.commit("setPassword", meetingPassword); } else { const { meetingPassword, email } = await visitorJoinUser( store.state.joinUser ); store.commit("setJoinUser", { ...store.state.joinUser, email: email.email, token: email.token, }); store.commit("setPassword", meetingPassword); } return true; } } } if (to.name === "Panelist") { // 如果要去的页面会议号于 vuex中的不一样,则清除数据 if (to.params.meetingId !== store.state.joinUser.meetingId) { store.commit("setJoinUser", {}); store.commit("setMessagesList", []); } if (store.state.joinUser.icCard) { try { const { meetingPassword, email } = await panelistJoinMeeting({ meetingId: to.params.meetingId, icCard: store.state.joinUser.icCard, }); store.commit("setJoinUser", { ...store.state.joinUser, email: email.email, token: email.token, }); store.commit("setPassword", meetingPassword); return true; } catch (error) { store.commit("setJoinUser", {}); return `/panelist-verify/${to.params.meetingId}`; } } else { store.commit("setJoinUser", {}); return `/panelist-verify/${to.params.meetingId}`; } } }); export default router;