Files

249 lines
7.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { createWebHistory, createRouter } from "vue-router";
import store from "@/store";
import _ from "lodash";
import cryptoJs from "crypto-js";
import {
whitelistJoinMeeting,
registerJoinUser,
visitorJoinUser,
panelistJoinMeeting,
superviseJoinMeeting,
} from "@/api/meeting";
import dayjs from "dayjs";
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/:createEmail/:pwd/:username/:nickname",
name: "Host",
component: () => import("@/views/meeting.vue"),
},
{
path: "/supervisor/:meetingId/:username",
name: "Supervisor",
component: () => import("@/views/meeting.vue"),
},
{
path: "/error",
name: "Error",
component: () => import("@/views/error.vue"),
},
{
path: "/:pathMatch(.*)*",
name: "NotFound",
component: () => import("@/views/error.vue"),
// redirect: "/error?errorType=notfound",
},
// {
// path: "/:pathMatch(.*)*",
// name: "NotFound",
// // component: () => import("@/views/error.vue"),
// redirect: "/error?errorType=notfound",
// },
],
});
router.beforeEach(async (to) => {
await store.dispatch("getMeetingSettings");
// 判断会议信息是否存在,不存在则请求数据
if (!store.state.meeting.id && to.params.meetingId) {
await store.dispatch("getMeetingInfo", to.params.meetingId);
}
// 判断会议是否结束
if (
dayjs().isAfter(
dayjs(store.state.meeting.startTime).add(
store.state.meeting.duration,
"minute"
)
) &&
to.name !== "Error"
) {
return `/error?errorType=ended`;
}
if (["Meeting", "Host", "Panelist", "Supervisor"].includes(to.name)) {
// 当参会角色host,panelist,meeting,supervisor改变时,清空用户信息、消息列表
if (store.state.joinRole && store.state.joinRole !== to.name) {
store.commit("setJoinUser", {});
store.commit("setLiked", false);
store.commit("setMessagesList", []);
}
store.commit("setJoinRole", to.name);
}
// 如果前往页面的会议id于之前的不同就清除用户信息、消息列表
if (to.params.meetingId !== store.state.joinUser.meetingId) {
store.commit("setJoinUser", {});
store.commit("setMessagesList", []);
store.commit("setLiked", false);
}
// 前往主持人页面
if (to.name === "Host") {
// console.log("host");
// if (to.params.meetingId !== store.state.joinUser.meetingId) {
// store.commit("setMessagesList", []);
// }
store.commit("setJoinUser", {
meetingId: to.params.meetingId,
nickname: to.params.nickname,
username: to.params.username,
email: to.params.createEmail,
});
store.commit("setPassword", to.params.pwd);
return true;
}
// 如果要前往参会页面
else 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("setLiked", false);
store.commit("setMessagesList", []);
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", {});
store.commit("setLiked", false);
store.commit("setMessagesList", []);
return `/verify/${to.params.meetingId}`;
}
} else {
store.commit("setJoinUser", {});
store.commit("setLiked", false);
store.commit("setMessagesList", []);
return `/verify/${to.params.meetingId}`;
}
} else {
if (_.isEmpty(store.state.joinUser)) {
store.commit("setJoinUser", {});
store.commit("setLiked", false);
store.commit("setMessagesList", []);
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;
}
}
} else 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", {});
store.commit("setLiked", false);
store.commit("setMessagesList", []);
return `/panelist-verify/${to.params.meetingId}`;
}
} else {
store.commit("setJoinUser", {});
store.commit("setLiked", false);
store.commit("setMessagesList", []);
return `/panelist-verify/${to.params.meetingId}`;
}
} else if (to.name === "Supervisor") {
// 监管参会
if (to.params.meetingId !== store.state.joinUser.meetingId) {
store.commit("setMessagesList", []);
}
const { email, meetingPassword } = await superviseJoinMeeting({
icCard: to.params.username,
meetingId: to.params.meetingId,
});
store.commit("setJoinUser", {
meetingId: to.params.meetingId,
icCard: to.params.username,
email: email.email,
token: email.token,
});
store.commit("setPassword", meetingPassword);
return true;
}
});
export default router;