Selaa lähdekoodia

登录页面实现扫描二维码登录

hzj18279462576@163.com 1 vuosi sitten
vanhempi
commit
db927ccc21

+ 1 - 1
index.html

@@ -13,8 +13,8 @@
 
   <body>
     <div id="app"></div>
-    <!-- <script src="https://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script> -->
     <script type="module" src="/src/main.js"></script>
+    <script src="https://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>
     <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.1/gsap.min.js"></script>
     <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.2.6/MotionPathPlugin.min.js"></script>
   </body>

+ 2 - 0
src/layout/sidebar/Navbar.vue

@@ -327,10 +327,12 @@ const loginOut = () => {
       sessionStorage.removeItem("token");
       sessionStorage.removeItem("userhead");
       sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
       router.removeRoute("wanzai");
       router.push({
         path: `/login`,
       });
+      window.location.reload()
       ElMessage({
         type: "success",
         message: "退出成功",

+ 4 - 4
src/layout/sidebar/SidevarItem.vue

@@ -19,11 +19,11 @@
       <div v-for="item in roles" class="items">
         <!-- 系统首页 -->
         <el-menu-item
-          v-if="item.name == 'home'"
+          v-if="item.name == 'systemHome'"
           :index="`/wanzai/${item.name}`"
         >
           <svg-icon
-            v-if="activeIndex == '/wanzai/home'"
+            v-if="activeIndex == '/wanzai/systemHome'"
             iconName="home_s"
             class="iconClass"
           ></svg-icon>
@@ -333,7 +333,7 @@ const roleListChange = async () => {
         item.routeName = list[2];
       });
       let flag = roleList.some((item) => {
-        return item.route == "/wanzai/home";
+        return item.route == "/wanzai/systemHome";
       });
       let address = roleList[0].route;
       console.log(flag, address);
@@ -461,7 +461,7 @@ const roleListChange = async () => {
         arr.forEach((i, index) => {
           // console.log(i);
           // 首页
-          if (i.name == "home") {
+          if (i.name == "systemHome") {
             // roleArr.push(i);
             roleArr[0] = i;
           }

+ 4 - 8
src/router/index.js

@@ -163,7 +163,6 @@ const routes = [
       // },
     ],
   },
-  
 ];
 const router = createRouter({
   // history: createWebHistory("/smartManage"), // 线上地址
@@ -181,13 +180,10 @@ router.beforeEach(async (to, from, next) => {
   // sessionStorage.setItem("userhead", userhead);
 
   let hasRoutes = store.state.user.hasRoutes;
-  if(to.path == "/wanzai/home"){
-    next()
-  }else{
-    if (
-      sessionStorage.getItem("token") &&
-      sessionStorage.getItem("userhead") 
-    ) {
+  if (to.path == "/wanzai/home") {
+    next();
+  } else {
+    if (sessionStorage.getItem("token") && sessionStorage.getItem("userhead")) {
       if (!hasRoutes) {
         store.commit("ROLELIST", "");
         store.commit("SET_ROUTES_STATE", true);

+ 5 - 5
src/store/modules/user.js

@@ -342,11 +342,11 @@ const mutations = {
         };
         router.addRoute("wanzai", arr);
       });
-      router.addRoute("wanzai", {
-        path: "/:pathMatch(.*)*",
-        name: "notFound",
-        component: () => import("@/views/notFound/notFound.vue"),
-      });
+      // router.addRoute("wanzai", {
+      //   path: "/:pathMatch(.*)*",
+      //   name: "notFound",
+      //   component: () => import("@/views/notFound/notFound.vue"),
+      // });
     }
   },
 };

+ 9 - 0
src/views/account/account.vue

@@ -433,6 +433,15 @@ const getList = async () => {
     // });
   } else {
     loading.value = false;
+    if(res.data.message=='登录凭证已过期,请重新登录'){
+      sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
+      router.push({
+        path: `/login`,
+      });
+    }
     ElMessage({
       type: "error",
       showClose: true,

+ 4 - 0
src/views/apply/apply.vue

@@ -408,6 +408,10 @@ const getList = async () => {
   } else {
     loading.value = false;
     if(res.data.message=='登录凭证已过期,请重新登录'){
+      sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
       router.push({
         path: `/login`,
       });

+ 4 - 0
src/views/attendanceRecord/attendanceRecord.vue

@@ -678,6 +678,10 @@ const getAdminId=async ()=>{
      adminClassDataList()
   }else{
     if(res.data.message=='登录凭证已过期,请重新登录'){
+      sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
       router.push({
         path: `/login`,
       });

+ 4 - 0
src/views/caller/caller.vue

@@ -1228,6 +1228,10 @@ const getAdminId = async () => {
     adminClassDataList();
   } else {
     if(res.data.message=='登录凭证已过期,请重新登录'){
+      sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
       router.push({
         path: `/login`,
       });

+ 4 - 0
src/views/class/class.vue

@@ -339,6 +339,10 @@ const getList = async () => {
   } else {
     loading.value = false;
     if(res.data.message=='登录凭证已过期,请重新登录'){
+      sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
       router.push({
         path: `/login`,
       });

+ 4 - 0
src/views/exam/exam.vue

@@ -356,6 +356,10 @@ const getList = async () => {
   } else {
     loading.value = false;
     if(res.data.message=='登录凭证已过期,请重新登录'){
+      sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
       router.push({
         path: `/login`,
       });

+ 4 - 0
src/views/faceRecord/faceRecord.vue

@@ -584,6 +584,10 @@ const getAdminId = async () => {
     adminClassDataList();
   }else{
     if(res.data.message=='登录凭证已过期,请重新登录'){
+      sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
       router.push({
         path: `/login`,
       });

+ 4 - 0
src/views/grade/grade.vue

@@ -1137,6 +1137,10 @@ const getList = async () => {
   } else {
     loading.value = false;
     if(res.data.message=='登录凭证已过期,请重新登录'){
+      sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
       router.push({
         path: `/login`,
       });

+ 4 - 0
src/views/grades/grades.vue

@@ -608,6 +608,10 @@ onBeforeMount(async () => {
     getList();
   }else{
     if(res.data.message=='登录凭证已过期,请重新登录'){
+      sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
       router.push({
         path: `/login`,
       });

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 5 - 1673
src/views/home/home.vue


+ 4 - 0
src/views/identity/identity.vue

@@ -353,6 +353,10 @@ const getList = async () => {
   } else {
     loading.value = false;
     if(res.data.message=='登录凭证已过期,请重新登录'){
+      sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
       router.push({
         path: `/login`,
       });

+ 4 - 0
src/views/info/info.vue

@@ -218,6 +218,10 @@ const getList = async () => {
   } else {
     // loading.value = false;
     if(res.data.message=='登录凭证已过期,请重新登录'){
+      sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
       router.push({
         path: `/login`,
       });

+ 4 - 0
src/views/leave/leave.vue

@@ -364,6 +364,10 @@ const userTypeChange = async (value) => {
     classList()
   }else{
     if(res.data.message=='登录凭证已过期,请重新登录'){
+      sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
       router.push({
         path: `/login`,
       });

+ 4 - 0
src/views/log/log.vue

@@ -464,6 +464,10 @@ const debugPage = reactive({
     } else {
       debugPage.loading = false;
       if(res.data.message=='登录凭证已过期,请重新登录'){
+        sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
       router.push({
         path: `/login`,
       });

+ 655 - 0
src/views/login/index 1.vue

@@ -0,0 +1,655 @@
+<template>
+  <div class="box">
+    <div class="top">
+      <div class="box_img"></div>
+      <div class="box_school">万载三中</div>
+    </div>
+    <div class="content">
+      <div class="box_wel">
+        <span>欢迎使用智慧校园管理平台</span>
+      </div>
+      <div class="box_login" v-if="bindShow">
+        <!-- <div class="login_title">微信扫码登录</div>
+        <div class="login_tips">请使用微信扫描二维码登录</div> -->
+
+        <div class="login_title">登录</div>
+        <div class="login_tips">点击微信登录扫码授权登录</div>
+        <div class="login_code">
+          <!-- <qrcode-vue
+            value="https://www.campussmartlife.com/smartApi/wanzai/api/wechat/login"
+            :size="codeSize"
+            level="H"
+            @callback="handleScan"
+          /> -->
+          <!-- <div id="weixin"></div> -->
+          <!-- <wxlogin
+            :appid="appid"
+            :scope="'snsapi_login'"
+            :theme="'black'"
+            :redirect_uri="redirect_uri"
+            :href="bast64css"
+          >
+          </wxlogin> -->
+        </div>
+
+        <div class="login_btn">
+          <div class="btn">
+            <a
+              href="https://www.campussmartlife.com/smartApi/wanzai/api/wechat/login"
+              >微信登录</a
+            >
+          </div>
+          <!-- <div class="btn" @click="loginClick">统一认证</div> -->
+        </div>
+      </div>
+      <div class="box_login" v-else>
+        <div class="login_title">绑定手机号</div>
+        <div class="bind_code">
+          <el-form
+            ref="ruleFormRef"
+            :model="ruleForm"
+            status-icon
+            :rules="rules"
+            class="login-container"
+          >
+            <!-- <div class="title">绑定后可以使用账号登录,账号更加安全</div> -->
+            <div class="title">用户绑定手机号获取登录权限</div>
+            <el-form-item label="手机号" prop="user">
+              <el-input v-model="ruleForm.user" placeholder="请输入手机号">
+              </el-input>
+            </el-form-item>
+            <el-form-item label="验证码" prop="pass">
+              <el-input v-model="ruleForm.pass" placeholder="请输入验证码">
+                <template #append
+                  ><span @click="sendPhone">{{ sendTitle }}</span></template
+                >
+              </el-input>
+            </el-form-item>
+            <!-- <el-checkbox v-model="checked" class="remeberPwd el-form-item"
+              >记住密码</el-checkbox
+            > -->
+            <el-form-item>
+              <!-- <el-button
+                :loading="loading"
+                type="primary"
+                @click="submitForm(ruleFormRef)"
+                color="rgba(0, 97, 255, 1)"
+                >确认绑定</el-button
+              > -->
+              <div class="btn" @click="bindClick(ruleFormRef)">
+                <a :href="bindWX">绑定</a>
+              </div>
+            </el-form-item>
+          </el-form>
+        </div>
+      </div>
+    </div>
+    <div class="footer">
+      <span
+        >赣公网安备36010602000314号&nbsp;&nbsp;&nbsp;&nbsp;赣ICP备17015482号-4</span
+      >
+    </div>
+  </div>
+</template>
+
+<script setup>
+import {
+  ref,
+  reactive,
+  watch,
+  nextTick,
+  onBeforeMount,
+  onMounted,
+  onUnmounted,
+} from "vue";
+import { useRouter } from "vue-router";
+import { ElMessage, ElMessageBox } from "element-plus";
+import { dayjs } from "element-plus";
+import lodash from "lodash";
+import axios from "axios";
+import wxlogin from "vue-wxlogin";
+import { useStore } from "vuex";
+import eds from "@/utils/eds.js";
+
+const store = useStore();
+const router = useRouter();
+const api = ref();
+const bindWX = ref(); // 绑定手机号的跳转链接
+const bindShow = ref(true); // 判断用户是否绑定
+const ruleFormRef = ref();
+const ruleForm = reactive({
+  user: "",
+  pass: "",
+});
+const sendTime = ref(60); // 验证码时间
+const sendTitle = ref("发送短信");
+
+var checkPhone = (rule, value, callback) => {
+  if (!value) {
+    return callback(new Error("手机号不能为空"));
+  } else {
+    const reg = /^1[3-9][0-9]\d{8}$/;
+    // 这里定义的reg变量没有加引号,所以是一种特殊的数据类型,即正则,可以直接用test()方法
+    if (reg.test(value)) {
+      callback();
+    } else {
+      // 具体错误信息没有提示
+      return callback(new Error("请输入正确的手机号"));
+    }
+  }
+};
+const rules = reactive({
+  user: [
+    { required: true, min: 11, message: "手机号不足11位", trigger: "blur" },
+    { validator: checkPhone, trigger: "blur" },
+  ],
+  pass: [{ required: true, message: "请填写验证码", trigger: "blur" }],
+});
+const submitForm = (formEl) => {
+  if (!formEl) return;
+  formEl.validate(async (valid) => {
+    if (valid) {
+      // loading.value = true;
+      // let data = {
+      //   account: ruleForm.user,
+      //   password: ruleForm.pass,
+      // };
+      // let res = await axios({
+      //   method: "post",
+      //   url: api.value + "/login/Login",
+      //   headers: {
+      //   token: sessionStorage.getItem("token"),
+      //   user_head: sessionStorage.getItem("userhead"),
+      // },
+      //   data: data,
+      // });
+      // console.log(res);
+      // if (res.data.code == 200) {
+      //   if (checked.value) {
+      //     localStorage.setItem("user", ruleForm.user);
+      //     localStorage.setItem("pass", ruleForm.pass);
+      //   } else {
+      //     localStorage.removeItem("user", ruleForm.user);
+      //     localStorage.removeItem("pass", ruleForm.user);
+      //   }
+      //   sessionStorage.setItem("token", res.data.data.token);
+      //   sessionStorage.setItem("userhead", res.data.data.userhead);
+      //   sessionStorage.setItem("schoolId", res.data.data.schoolId);
+      //   sessionStorage.setItem("username", res.data.data.userName);
+      //   sessionStorage.setItem("sidevarItem", 1);
+      //   store.commit("indexUp", 1);
+      //   store.commit("userName", ruleForm.user);
+      //   store.commit("passWord", ruleForm.user);
+      //   router.push({
+      //     path: `/repairs/home`,
+      //   });
+      //   ElMessage({
+      //     type: "success",
+      //     showClose: true,
+      //     message: "登录成功",
+      //     center: true,
+      //   });
+      // } else {
+      //   ElMessage({
+      //     type: "error",
+      //     showClose: true,
+      //     message: "登录失败",
+      //     center: true,
+      //   });
+      //   loading.value = false;
+      // }
+    } else {
+      return false;
+    }
+  });
+};
+
+const loginClick = () => {
+  // router.push({ path: `/wanzai/home` });
+  // sessionStorage.setItem("sidevarItem", "/wanzai/home");
+};
+// 绑定点击微信
+const bindClick = (formEl) => {
+  // if (ruleForm.user) {
+  //   bindWX.value =
+  //     "https://www.campussmartlife.com/smartApi//wanzai/api/wechat/bind?cardNo=" +
+  //     ruleForm.user;
+  // }
+  if (!formEl) return;
+  formEl.validate(async (valid) => {
+    if (valid) {
+      bindWX.value =
+        "https://www.campussmartlife.com/smartApi/wanzai/api/wechat/bind?" +
+        `phone=${ruleForm.user}&messageCode=${ruleForm.pass}`;
+    } else {
+      return false;
+    }
+  });
+};
+// 发送短信
+const sendPhone = async () => {
+  if (ruleForm.user) {
+    var formData = new FormData();
+    // var psw = formData.get("psw"); // 获取密码
+    formData.append("phone", ruleForm.user);
+    let res = await axios({
+      method: "post",
+      url: api.value + "/wanzai/api/wechat/sendMessage",
+      headers: {
+        token: sessionStorage.getItem("token"),
+        user_head: sessionStorage.getItem("userhead"),
+      },
+      data: formData,
+    });
+    console.log(res, "发送短信");
+    if (res.data.code == 200) {
+      sendTitle.value = 60;
+      let timer = setInterval(() => {
+        sendTitle.value--;
+        if (sendTitle.value == 0) {
+          sendTitle.value = "重新发送";
+          clearInterval(timer);
+        }
+      }, 1000);
+      ElMessage({
+        type: "success",
+        showClose: true,
+        message: res.data.message,
+        center: true,
+      });
+    } else {
+      ElMessage({
+        type: "error",
+        showClose: true,
+        message: res.data.message,
+        center: true,
+      });
+    }
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: "请输入手机号",
+      center: true,
+    });
+  }
+};
+// 实例微信js对象
+const setWxerwma = async () => {
+  let res = await axios({
+    method: "get",
+    url: api.value + "/wanzai/api/login/getAesStr",
+    headers: {
+      token: sessionStorage.getItem("token"),
+      user_head: sessionStorage.getItem("userhead"),
+    },
+    params: data,
+  });
+  console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "state");
+  if (res.data.code == 200) {
+    let state=JSON.parse(eds.decryptDes(res.data.data));
+    //生成微信扫码登录二维码页面
+    var obj = new WxLogin({
+      self_redirect: true,
+      id: "weixin",
+      appid: 'wxa94836d74473fe5c',
+      scope: "snsapi_login",
+      // redirect_uri: 'https%3A%2F%2Fwww.campussmartlife.com%2FsmartApi%2Fwanzai%2Fapi%2Fwechat%2Fcallback',
+      redirect_uri: 'https%3A%2F%2Fwww.campussmartlife.com%2FsmartManage%2F%23%2Fwanzai%2Fhome',
+      state: state,
+      style: "black",
+      // href: `data:text/css;base64,${bast64css.value}`,
+      href: '',
+    });
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: "获取二维码失败,请刷新重试",
+      center: true,
+    });
+  }
+};
+onMounted(() => {
+  // setWxerwma();
+  // console.log(router.currentRoute.value.query);
+  // console.log(window.location.href);
+  if (router.currentRoute.value.query.message == "请绑定信息") {
+    ElMessage({
+      type: "warning",
+      showClose: true,
+      message: "当前用户未绑定手机号,请先绑定",
+      center: true,
+    });
+    bindShow.value = false;
+  } else if (router.currentRoute.value.query.message == "无登录权限") {
+    bindShow.value = true;
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: "暂无登录权限,请联系管理添加权限",
+      center: true,
+    });
+  }
+});
+onBeforeMount(() => {
+  api.value = store.state.user.api;
+});
+</script>
+
+<style lang="scss" scoped>
+.box {
+  // position: relative;
+  min-width: 1300px;
+  min-height: 750px;
+  width: 100vw;
+  height: 100vh;
+  color: #000;
+  background-image: url(@/assets/school/login_bg.png);
+  background-size: 100% 100%;
+  .top {
+    display: flex;
+    align-items: center;
+    padding: 54px 0 0 62px;
+
+    .box_img {
+      // position: absolute;
+      // top: 54px;
+      // left: 62px;
+      width: 56px;
+      height: 56px;
+      border-radius: 50%;
+      background-color: skyblue;
+      margin-right: 20px;
+    }
+
+    .box_school {
+      // position: absolute;
+      // top: 61px;
+      // left: 141px;
+      font-size: 29px;
+      font-weight: bold;
+    }
+  }
+
+  .content {
+    width: 100%;
+    height: calc(100% - 130px);
+    // margin-top: 40px;
+    display: flex;
+    // justify-content: space-between;
+    .box_wel {
+      font-size: 52.5px;
+      font-weight: bold;
+      margin-top: 20px;
+      width: 66%;
+      height: 40%;
+      span {
+        display: block;
+        text-align: center;
+      }
+    }
+
+    .box_login {
+      // position: absolute;
+      // top: 223px;
+      // left: 1286px;
+      width: 24%;
+      height: 70%;
+      box-shadow: 0px 3px 10px rgba(0, 97, 255, 0.2);
+      background-color: #fff;
+      // border: 1px solid red;
+      // margin-top: 100px;
+      padding: 80px 0 0 0;
+      box-sizing: border-box;
+      display: flex;
+      flex-direction: column;
+      // justify-content: space-between;
+      align-items: center;
+
+      // width: 426px;
+      // height: 536px;
+
+      .login_title {
+        font-size: 24px;
+        font-weight: bold;
+      }
+
+      .login_tips {
+        color: #a6a6a6;
+        font-size: 16px;
+      }
+
+      .login_code {
+        width: 200px;
+        height: 250px;
+        // background-color: skyblue;
+        .el-form {
+          width: 280px;
+          display: flex;
+          flex-direction: column;
+          justify-content: center;
+          align-items: center;
+          padding: 35px 0;
+          border-radius: 16px;
+          // background: rgba(255, 255, 255, 1);
+
+          .title {
+            color: rgba(0, 185, 170, 1);
+            font-size: 14px;
+            margin: 0 0 10px 0;
+          }
+
+          .el-divider {
+            width: 85%;
+            margin: 20px 0 30px;
+          }
+
+          .el-form-item {
+            width: 280px;
+            height: 40px;
+            // margin-bottom: 0;
+
+            :deep(.el-form-item__content) {
+              margin-left: 0 !important;
+
+              .el-input {
+                height: 40px;
+
+                .el-input__wrapper {
+                  border-radius: 12px;
+
+                  .el-input__prefix {
+                    margin: 0 10px 0 12px;
+                  }
+                }
+
+                // .el-icon {
+                //   width: 24px;
+                //   height: 24px;
+
+                //   svg {
+                //     width: 24px;
+                //     height: 24px;
+                //   }
+                // }
+
+                .el-input__inner {
+                  height: 100%;
+                  font-size: 14px;
+                }
+              }
+
+              // .el-form-item__error {
+              //   font-size: 16px;
+              // }
+
+              .el-button {
+                width: 100%;
+                height: 40px;
+                font-size: 16px;
+                border-radius: 12px;
+              }
+            }
+
+            .el-button--primary {
+              width: 280px;
+            }
+          }
+
+          .remeberPwd {
+            height: 30px;
+            margin-bottom: 30px;
+
+            // :deep(.el-checkbox__input) {
+            //   .el-checkbox__inner {
+            //     width: 15px;
+            //     height: 15px;
+            //   }
+
+            //   .el-checkbox__inner::after {
+            //     width: 6px;
+            //     height: 12px;
+            //     top: 0px;
+            //   }
+            // }
+
+            :deep(.el-checkbox__label) {
+              font-size: 14px;
+            }
+          }
+        }
+      }
+      .bind_code {
+        .el-form {
+          width: 300px;
+          display: flex;
+          flex-direction: column;
+          justify-content: center;
+          align-items: center;
+          padding: 80px 0 0 0;
+          border-radius: 16px;
+          // background: rgba(255, 255, 255, 1);
+
+          .title {
+            color: rgba(0, 185, 170, 1);
+            font-size: 14px;
+            margin: 0 0 10px 0;
+          }
+
+          .el-divider {
+            width: 85%;
+            margin: 20px 0 30px;
+          }
+
+          .el-form-item {
+            width: 300px;
+            height: 40px;
+            margin-bottom: 25px;
+            display: flex;
+            align-items: center;
+
+            :deep(.el-form-item__content) {
+              margin-left: 0 !important;
+              border-bottom: 1px solid #ccc;
+              .btn {
+                display: flex;
+                justify-content: center;
+                align-items: center;
+                width: 300px;
+                height: 40px;
+                color: #fff;
+                font-size: 16px;
+                border-radius: 8px;
+                background-color: #0061ff;
+                cursor: pointer;
+                a {
+                  color: #fff;
+                  width: 300px;
+                height: 40px;
+                text-align: center;
+                line-height: 40px;
+                }
+              }
+              .el-input {
+                height: 40px;
+
+                .el-input__wrapper {
+                  // border-radius: 12px;
+                  box-shadow: none;
+
+                  .el-input__prefix {
+                    margin: 0 10px 0 12px;
+                  }
+                }
+                .el-input-group__append {
+                  cursor: pointer;
+                  box-shadow: none;
+                  background-color: transparent;
+                  padding: 0 10px;
+                }
+
+                // .el-icon {
+                //   width: 24px;
+                //   height: 24px;
+
+                //   svg {
+                //     width: 24px;
+                //     height: 24px;
+                //   }
+                // }
+
+                .el-input__inner {
+                  height: 100%;
+                  font-size: 14px;
+                }
+              }
+            }
+            &:nth-child(4) {
+              :deep(.el-form-item__content) {
+                border: none;
+              }
+            }
+          }
+        }
+      }
+
+      .login_btn {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        width: 210px;
+        height: 40px;
+        // display: none;
+
+        .btn {
+          display: flex;
+          justify-content: center;
+          align-items: center;
+          width: 210px;
+          height: 40px;
+          color: #fff;
+          font-size: 16px;
+          border-radius: 8px;
+          background-color: #0061ff;
+          cursor: pointer;
+          a {
+            width: 210px;
+        height: 40px;
+            color: #fff;
+            text-align: center;
+            line-height: 40px;
+          }
+        }
+      }
+    }
+  }
+  .footer {
+    width: 100%;
+    height: 20px;
+    display: flex;
+    justify-content: center;
+    font-size: 12px;
+  }
+}
+</style>

+ 183 - 59
src/views/login/index.vue

@@ -9,38 +9,7 @@
         <span>欢迎使用智慧校园管理平台</span>
       </div>
       <div class="box_login" v-if="bindShow">
-        <!-- <div class="login_title">微信扫码登录</div>
-        <div class="login_tips">请使用微信扫描二维码登录</div> -->
-
-        <div class="login_title">登录</div>
-        <div class="login_tips">点击微信登录扫码授权登录</div>
-        <div class="login_code">
-          <!-- <qrcode-vue
-            value="https://www.campussmartlife.com/smartApi/wanzai/api/wechat/login"
-            :size="codeSize"
-            level="H"
-            @callback="handleScan"
-          /> -->
-          <!-- <div id="weixin"></div> -->
-          <!-- <wxlogin
-            :appid="appid"
-            :scope="'snsapi_login'"
-            :theme="'black'"
-            :redirect_uri="redirect_uri"
-            :href="bast64css"
-          >
-          </wxlogin> -->
-        </div>
-
-        <div class="login_btn">
-          <div class="btn">
-            <a
-              href="https://www.campussmartlife.com/smartApi/wanzai/api/wechat/login"
-              >微信登录</a
-            >
-          </div>
-          <!-- <div class="btn" @click="loginClick">统一认证</div> -->
-        </div>
+        <div id="weixin"></div>
       </div>
       <div class="box_login" v-else>
         <div class="login_title">绑定手机号</div>
@@ -85,8 +54,15 @@
       </div>
     </div>
     <div class="footer">
-      <span
-        >赣公网安备36010602000314号&nbsp;&nbsp;&nbsp;&nbsp;赣ICP备17015482号-4</span
+      <a
+        target="_blank"
+        href="https://beian.mps.gov.cn/#/query/webSearch?recordcode=36010602000314"
+        >赣公网安备36010602000314号</a
+      >&nbsp;&nbsp;&nbsp;&nbsp;
+      <a
+        target="_blank"
+        href="https://beian.mps.gov.cn/#/query/webSearch?recordcode=36010602000314"
+        >赣ICP备17015482号-4</a
       >
     </div>
   </div>
@@ -109,6 +85,7 @@ import lodash from "lodash";
 import axios from "axios";
 import wxlogin from "vue-wxlogin";
 import { useStore } from "vuex";
+import eds from "@/utils/eds.js";
 
 const store = useStore();
 const router = useRouter();
@@ -207,6 +184,45 @@ const loginClick = () => {
   // router.push({ path: `/wanzai/home` });
   // sessionStorage.setItem("sidevarItem", "/wanzai/home");
 };
+
+// 实例微信js对象
+const setWxerwma = async () => {
+  let res = await axios({
+    method: "get",
+    url: api.value + "/wanzai/api/login/getAesStr",
+    headers: {
+      token: sessionStorage.getItem("token"),
+      user_head: sessionStorage.getItem("userhead"),
+    },
+    params: data,
+  });
+  console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "state");
+  if (res.data.code == 200) {
+    let state = JSON.parse(eds.decryptDes(res.data.data));
+    //生成微信扫码登录二维码页面
+    var obj = new WxLogin({
+      self_redirect: true,
+      id: "weixin",
+      appid: "wxa94836d74473fe5c",
+      scope: "snsapi_login",
+      redirect_uri:
+        "https%3A%2F%2Fwww.campussmartlife.com%2FsmartApi%2Fwanzai%2Fapi%2Fwechat%2Fcallback",
+      // redirect_uri: 'https%3A%2F%2Fwww.campussmartlife.com%2FsmartManage%2F%23%2Fwanzai%2Fhome',
+      state: state,
+      style: "black",
+      // href: `data:text/css;base64,${bast64css.value}`,
+      href: "",
+    });
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: "获取二维码失败,请刷新重试",
+      center: true,
+    });
+  }
+};
+
 // 绑定点击微信
 const bindClick = (formEl) => {
   // if (ruleForm.user) {
@@ -220,6 +236,36 @@ const bindClick = (formEl) => {
       bindWX.value =
         "https://www.campussmartlife.com/smartApi/wanzai/api/wechat/bind?" +
         `phone=${ruleForm.user}&messageCode=${ruleForm.pass}`;
+      // let data = {
+      //   phone: ruleForm.user,
+      //   messageCode: ruleForm.pass,
+      //   // managerId: sessionStorage.getItem("token"),
+      // };
+      // let res = await axios({
+      //   method: "post",
+      //   url: api.value + "/wanzai/api/wechat/bind",
+      //   headers: {
+      //     token: sessionStorage.getItem("token"),
+      //     user_head: sessionStorage.getItem("userhead"),
+      //   },
+      //   params: data,
+      // });
+      // if (res.data.code == 200) {
+      //   setWxerwma();
+      //   ElMessage({
+      //     type: "success",
+      //     showClose: true,
+      //     message: res.data.message,
+      //     center: true,
+      //   });
+      // } else {
+      //   ElMessage({
+      //     type: "error",
+      //     showClose: true,
+      //     message: res.data.message,
+      //     center: true,
+      //   });
+      // }
     } else {
       return false;
     }
@@ -273,45 +319,119 @@ const sendPhone = async () => {
     });
   }
 };
-// 实例微信js对象
-const setWxerwma = async () => {
-  //生成微信扫码登录二维码页面
-  // var obj = new WxLogin({
-  //   self_redirect: true,
-  //   id: "weixin",
-  //   appid: appid.value,
-  //   scope: "snsapi_login",
-  //   redirect_uri: redirect_uri.value,
-  //   state: "",
-  //   style: "black",
-  //   href: `data:text/css;base64,${bast64css.value}`,
-  // });
-};
-onMounted(() => {
-  // setWxerwma();
-  // console.log(router.currentRoute.value.query);
-  // console.log(window.location.href);
-  if (router.currentRoute.value.query.message == "请绑定信息") {
+
+// const token = ref(sessionStorage.getItem("token") || '')
+const handleStorageChange = async (event) => {
+  if (sessionStorage.getItem("token") && sessionStorage.getItem("userhead")) {
+    console.log("登录也判断token是否存在");
+    // store.commit("indexUp", sessionStorage.getItem("sidevarItem"));
+    // sessionStorage.removeItem("message");
+    // router.replace({
+    //   path: `${sessionStorage.getItem("sidevarItem")}`,
+    // });
+    const formDatas = new FormData();
+    formDatas.append("userId", "");
+    let resData = await axios({
+      method: "post",
+      url: api.value + "/wanzai/api/smartAuthorGroup/queryUserAuthor",
+      headers: {
+        token: sessionStorage.getItem("token"),
+        user_head: sessionStorage.getItem("userhead"),
+      },
+      data: formDatas,
+    });
+    console.log(resData, "查看当前用户权限");
+    if (resData.data.code == 200) {
+      let roleList = resData.data.data[0].treAuthor;
+      sessionStorage.setItem("roleList", JSON.stringify(roleList));
+      // store.commit("ROLELIST", "");
+      let flag = roleList.some((item) => {
+        return item.route == "/wanzai/systemHome";
+      });
+      console.log("触发跳转页面");
+      let address = roleList[0].route;
+      console.log(flag, address);
+      setTimeout(() => {
+        store.commit("indexUp", address);
+        router.push({
+          path: `${address}`,
+        });
+      }, 100);
+
+      // if (!flag) {
+      //   store.commit("indexUp", address);
+      //   router.push({
+      //     path: `${address}`,
+      //   });
+      // } else {
+      //   store.commit("indexUp", "/wanzai/systemHome");
+      //   router.push({
+      //     path: `/wanzai/systemHome`,
+      //   });
+      // }
+    } else {
+    }
+  }
+  if (sessionStorage.getItem("message") == "请绑定信息") {
+    bindShow.value = false;
     ElMessage({
       type: "warning",
       showClose: true,
       message: "当前用户未绑定手机号,请先绑定",
       center: true,
     });
-    bindShow.value = false;
-  } else if (router.currentRoute.value.query.message == "无登录权限") {
+  } else if (sessionStorage.getItem("message") == "无登录权限") {
     bindShow.value = true;
+    setWxerwma();
     ElMessage({
       type: "error",
       showClose: true,
       message: "暂无登录权限,请联系管理添加权限",
       center: true,
     });
+  } else if (sessionStorage.getItem("message") == "请勿非法进入") {
+    bindShow.value = true;
+    setWxerwma();
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: "请勿非法进入",
+      center: true,
+    });
+  }
+};
+onMounted(() => {
+  setWxerwma();
+  // console.log(router.currentRoute.value.query);
+  // console.log(window.location.href);
+  sessionStorage.removeItem("message");
+  window.addEventListener("storage", handleStorageChange);
+  if (router.currentRoute.value.query.message == "请绑定信息") {
+    sessionStorage.setItem("message", router.currentRoute.value.query.message);
+    // ElMessage({
+    //   type: "warning",
+    //   showClose: true,
+    //   message: "当前用户未绑定手机号,请先绑定",
+    //   center: true,
+    // });
+    bindShow.value = false;
+  } else if (router.currentRoute.value.query.message == "无登录权限") {
+    sessionStorage.setItem("message", router.currentRoute.value.query.message);
+    bindShow.value = true;
+    // ElMessage({
+    //   type: "error",
+    //   showClose: true,
+    //   message: "暂无登录权限,请联系管理添加权限",
+    //   center: true,
+    // });
   }
 });
 onBeforeMount(() => {
   api.value = store.state.user.api;
 });
+onUnmounted(() => {
+  window.removeEventListener("storage", handleStorageChange);
+});
 </script>
 
 <style lang="scss" scoped>
@@ -543,9 +663,9 @@ onBeforeMount(() => {
                 a {
                   color: #fff;
                   width: 300px;
-                height: 40px;
-                text-align: center;
-                line-height: 40px;
+                  height: 40px;
+                  text-align: center;
+                  line-height: 40px;
                 }
               }
               .el-input {
@@ -612,7 +732,7 @@ onBeforeMount(() => {
           cursor: pointer;
           a {
             width: 210px;
-        height: 40px;
+            height: 40px;
             color: #fff;
             text-align: center;
             line-height: 40px;
@@ -627,6 +747,10 @@ onBeforeMount(() => {
     display: flex;
     justify-content: center;
     font-size: 12px;
+    a {
+      color: #000;
+      text-decoration: none;
+    }
   }
 }
 </style>

+ 52 - 0
src/views/notFound/notFound copy.vue

@@ -0,0 +1,52 @@
+<template>
+  <div class="content-box">页面找不到,请刷新页面</div>
+</template>
+
+<script setup>
+import { ref, reactive, nextTick, onBeforeMount, onUnmounted } from "vue";
+import { useRouter } from "vue-router";
+import { ElMessage, ElMessageBox } from "element-plus";
+import { Calendar } from "@element-plus/icons-vue";
+import { dayjs } from "element-plus";
+import lodash, { reduce } from "lodash";
+import axios from "axios";
+import { useStore } from "vuex";
+const store = useStore();
+const router = useRouter();
+
+onBeforeMount(() => {
+  // router.push({ path: `/wanzai/NotFound` });
+  let roleList = JSON.parse(sessionStorage.getItem("roleList"));
+  let flag = roleList.some((item) => {
+    return item.route == "/wanzai/home";
+  });
+  let address = roleList[0].route;
+  console.log(flag, address);
+  if (!flag) {
+    store.commit("indexUp", address);
+    router.push({
+      path: `${address}`,
+    });
+    location.reload();
+  }
+});
+onUnmounted(() => {
+  // document.removeEventListener("keyup", Enters);
+});
+</script>
+
+<style scoped lang="scss">
+.content-box {
+  width: 97.5%;
+  height: 89%;
+  margin: 20px auto;
+  background-color: #fff;
+  color: #fff;
+  display: flex;
+  flex-direction: column;
+  box-shadow: 0px 3px 10px rgba(0, 97, 255, 0.2);
+}
+.el-input {
+  width: 192px;
+}
+</style>

+ 12 - 2
src/views/notFound/notFound.vue

@@ -21,14 +21,24 @@ onBeforeMount(() => {
     return item.route == "/wanzai/home";
   });
   let address = roleList[0].route;
-  console.log(flag, address);
+  console.log(flag, address, "notFound中间界面");
+  // store.commit("indexUp", address);
+  // router.push({
+  //   path: `${address}`,
+  // });
+  // location.reload();
   if (!flag) {
     store.commit("indexUp", address);
     router.push({
       path: `${address}`,
     });
-    location.reload();
+  } else {
+    store.commit("indexUp", "/wanzai/home");
+    router.push({
+      path: `/wanzai/home`,
+    });
   }
+  location.reload();
 });
 onUnmounted(() => {
   // document.removeEventListener("keyup", Enters);

+ 4 - 0
src/views/post/post.vue

@@ -333,6 +333,10 @@ const getList = async () => {
   } else {
     loading.value = false;
     if(res.data.message=='登录凭证已过期,请重新登录'){
+      sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
       router.push({
         path: `/login`,
       });

+ 4 - 0
src/views/safety/safety.vue

@@ -463,6 +463,10 @@ const getList = async () => {
   } else {
     loading.value = false;
     if(res.data.message=='登录凭证已过期,请重新登录'){
+      sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
       router.push({
         path: `/login`,
       });

+ 4 - 0
src/views/screenShot/screenShot.vue

@@ -495,6 +495,10 @@ const getList = async () => {
     } else {
       loading.value = false;
       if(res.data.message=='登录凭证已过期,请重新登录'){
+        sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
         router.push({
           path: `/login`,
         });

+ 4 - 0
src/views/semester/semester.vue

@@ -295,6 +295,10 @@ const getList = async () => {
   } else {
     loading.value = false;
     if(res.data.message=='登录凭证已过期,请重新登录'){
+      sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
       router.push({
         path: `/login`,
       });

+ 4 - 0
src/views/source/source.vue

@@ -688,6 +688,10 @@ const getList = async () => {
   } else {
     loading.value = false;
     if(res.data.message=='登录凭证已过期,请重新登录'){
+      sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
       router.push({
         path: `/login`,
       });

+ 4 - 0
src/views/statistic/statistic.vue

@@ -694,6 +694,10 @@ const getAdminId = async () => {
     adminClassDataList();
   } else {
     if(res.data.message=='登录凭证已过期,请重新登录'){
+      sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
       router.push({
         path: `/login`,
       });

+ 8 - 0
src/views/student/student.vue

@@ -662,6 +662,10 @@ const getList = async () => {
   } else {
     loading.value = false;
     if(res.data.message=='登录凭证已过期,请重新登录'){
+      sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
       router.push({
         path: `/login`,
       });
@@ -694,6 +698,10 @@ const semesterList = async () => {
     semesterData.value = JSON.parse(eds.decryptDes(semester.data.data));
   } else {
     if(res.data.message=='登录凭证已过期,请重新登录'){
+      sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
       router.push({
         path: `/login`,
       });

+ 4 - 0
src/views/subject/subject.vue

@@ -326,6 +326,10 @@ const getList = async () => {
   } else {
     loading.value = false;
     if(res.data.message=='登录凭证已过期,请重新登录'){
+      sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
       router.push({
         path: `/login`,
       });

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1677 - 0
src/views/systemHome/systemHome.vue


+ 4 - 0
src/views/task/task.vue

@@ -1584,6 +1584,10 @@ const mPage = reactive({
     } else {
       mPage.loading = false;
       if(res.data.message=='登录凭证已过期,请重新登录'){
+        sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
       router.push({
         path: `/login`,
       });

+ 4 - 0
src/views/teacher/teacher.vue

@@ -866,6 +866,10 @@ const getList = async () => {
     } else {
       loading.value=false
       if(res.data.message=='登录凭证已过期,请重新登录'){
+        sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
         router.push({
           path: `/login`,
         });

+ 217 - 208
src/views/trackSearch/trackSearch.vue

@@ -4,77 +4,7 @@
       <!-- <el-icon :size="23" class="camera"><VideoCameraFilled /></el-icon> -->
       <div class="left_title">轨迹查询</div>
     </div>
-    <div class="middle">
-      <div class="filter">
-        <div class="condition">
-          <el-select
-            v-model="searchInput.keyWord"
-            popper-class="more-tag-data"
-            filterable
-            :clearable="false"
-            remote
-            :remote-method="keyWordMethod"
-            :loading="conteactLoading"
-            placeholder="请选择姓名"
-            style="width: 200px"
-            @change="searchBtn"
-          >
-            <el-option
-              v-for="item in gradeData"
-              :key="item.id"
-              :label="item.name"
-              :value="item.id"
-            >
-              <span style="float: left">{{ item.name }}-{{ item.cardNo }}</span>
-            </el-option>
-            <template #footer>
-              <div class="addStudentMore">
-                <el-button
-                  v-if="currentPage < totalPage && totalPage != 0"
-                  @click="addGradeMore"
-                  >加载更多+</el-button
-                >
-              </div>
-            </template>
-          </el-select>
-        </div>
-        <div class="condition">
-          <el-date-picker
-            v-model="searchInput.createTime"
-            type="daterange"
-            range-separator="-"
-            start-placeholder="起始时间"
-            end-placeholder="结束时间"
-            format="YYYY-MM-DD"
-            value-format="YYYY-MM-DD"
-            :prefix-icon="Calendar"
-            placeholder="请选择日期"
-            style="width: 280px"
-            @change="searchBtn"
-            :clearable="false"
-          />
-        </div>
-      </div>
-    </div>
-    <div class="trackInfo">
-      <el-timeline style="max-width: 600px">
-        <el-timeline-item
-          v-for="i in tableData.list"
-          center
-          color="rgba(30, 125, 251, 1)"
-          :timestamp="`${i.type} ( ${i.dateTime} )`"
-          placement="top"
-        >
-          <el-card>
-            <h4>{{ i.location }}</h4>
-            <p>{{ i.name }}</p>
-            <div v-viewer v-if="i.image">
-              <img :src="i.image" alt="" />
-            </div>
-          </el-card>
-        </el-timeline-item>
-      </el-timeline>
-    </div>
+
     <div class="scroll" v-loading="loading">
       <div class="map" @click="xy">
         <svg width="1620" height="974" viewBox="0 0 1620 974">
@@ -158,6 +88,80 @@
           <text x="800" y="573" fill="#fff">学校大门</text>
           <text x="561" y="241" fill="#fff">地下停车场出口</text> -->
         </svg>
+        <div class="middle">
+          <div class="filter">
+            <div class="condition">
+              <el-select
+                v-model="searchInput.keyWord"
+                popper-class="more-tag-data"
+                filterable
+                :clearable="false"
+                remote
+                :remote-method="keyWordMethod"
+                :loading="conteactLoading"
+                placeholder="请选择姓名"
+                style="width: 200px"
+                @change="searchBtn"
+              >
+                <el-option
+                  v-for="item in gradeData"
+                  :key="item.id"
+                  :label="item.name"
+                  :value="item.id"
+                >
+                  <span style="float: left"
+                    >{{ item.name }} {{ item.className }}
+                    {{ item.cardNo }}</span
+                  >
+                </el-option>
+                <template #footer>
+                  <div class="addStudentMore">
+                    <el-button
+                      v-if="currentPage < totalPage && totalPage != 0"
+                      @click="addGradeMore"
+                      >加载更多+</el-button
+                    >
+                  </div>
+                </template>
+              </el-select>
+            </div>
+            <div class="condition">
+              <el-date-picker
+                v-model="searchInput.createTime"
+                type="daterange"
+                range-separator="-"
+                start-placeholder="起始时间"
+                end-placeholder="结束时间"
+                format="YYYY-MM-DD"
+                value-format="YYYY-MM-DD"
+                :prefix-icon="Calendar"
+                placeholder="请选择日期"
+                style="width: 280px"
+                @change="searchBtn"
+                :clearable="false"
+              />
+            </div>
+          </div>
+        </div>
+        <div class="trackInfo">
+          <el-timeline style="max-width: 600px">
+            <el-timeline-item
+              v-for="i in tableData.list"
+              center
+              color="rgba(30, 125, 251, 1)"
+              :timestamp="`${i.type} ( ${i.dateTime} )`"
+              placement="top"
+            >
+              <el-card>
+                <h4>{{ i.location }}</h4>
+                <p>{{ i.name }}</p>
+                <div v-viewer v-if="i.image">
+                  <img :src="i.image" alt="" />
+                </div>
+              </el-card>
+            </el-timeline-item>
+          </el-timeline>
+        </div>
         <img
           id="circle"
           style="width: 24px; height: 24px"
@@ -166,7 +170,7 @@
         />
         <img
           id="origin"
-          :style="`left: ${originX-15}px; top: ${originY-35}px;`"
+          :style="`left: ${originX - 15}px; top: ${originY - 45}px;`"
           src="@/assets/origin.png"
           alt=""
         />
@@ -233,8 +237,8 @@ const pageCount = ref(10);
 const total = ref(5); // 当前总数
 const totalPage = ref(100); // 总页数
 
-const originX=ref(0) // 起点
-const originY=ref(0) // 起点
+const originX = ref(0); // 起点
+const originY = ref(0); // 起点
 
 // 预约记录分页数据
 const getList = async () => {
@@ -303,7 +307,7 @@ const getList = async () => {
               alignOrigin: [0.5, 0.5],
             },
           });
-        },100);
+        }, 100);
       });
     } else {
       loading.value = false;
@@ -353,7 +357,7 @@ const gradeList = async () => {
   if (!searchInput.keyWord) {
     searchInput.keyWord = gradeData.value[0].id;
   }
-  console.log(currentPage.value,totalPage.value);
+  console.log(currentPage.value, totalPage.value);
   getList();
 };
 // 联系人下拉框搜索时加载
@@ -417,7 +421,11 @@ const getAdminId = async () => {
     classId.value = classIds;
     gradeList();
   } else {
-    if(res.data.message=='登录凭证已过期,请重新登录'){
+    if (res.data.message == "登录凭证已过期,请重新登录") {
+      sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
       router.push({
         path: `/login`,
       });
@@ -479,145 +487,19 @@ onUnmounted(() => {
     }
   }
 
-  .middle {
-    width: calc(100% - 60px);
-    margin: 0 auto;
-    position: absolute;
-    z-index: 999;
-    top: 100px;
-    left: 50px;
-    color: #000;
-
-    // border-bottom: 1px solid rgb(231, 231, 231);
-    .filter {
-      display: flex;
-      flex-wrap: wrap;
-      align-items: center;
-
-      .search {
-        color: #fff;
-      }
-
-      .condition {
-        display: flex;
-        align-items: center;
-        margin: 0 25px 0 0;
-        :deep(.el-select) {
-          .el-select__wrapper {
-            box-shadow: none;
-            background-color: rgba(133, 191, 242, 0.8);
-          }
-          .el-select__selected-item {
-            color: rgba(255, 255, 255, 0.9);
-          }
-          .el-select__suffix {
-            .el-icon {
-              color: rgba(255, 255, 255, 0.9);
-            }
-          }
-        }
-        :deep(.el-date-editor) {
-          background-color: rgba(133, 191, 242, 0.8);
-          box-shadow: none;
-          .el-icon {
-            color: rgba(255, 255, 255, 0.7);
-          }
-          .el-range-input {
-            color: #fff;
-            &::placeholder {
-              color: rgba(255, 255, 255, 0.7); /* 更改为你想要的颜色代码 */
-            }
-          }
-          .el-range-separator {
-            color: rgba(255, 255, 255, 0.7);
-          }
-        }
-      }
-    }
-
-    .gongneng {
-      margin: 10px 0 10px 0;
-    }
-  }
-
-  .trackInfo {
-    position: absolute;
-    width: 357px;
-    height: calc(100% - 141px);
-    background: rgba(0, 0, 0, 0.5);
-    right: 40px;
-    top: 101px;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    :deep(.el-timeline) {
-      height: calc(100% - 30px);
-      overflow: auto;
-      padding-left: 5px;
-      padding-right: 25px;
-      max-width: 335px !important;
-      // 整个滚动条
-      &::-webkit-scrollbar-track {
-        background-color: rgba(255, 255, 255, 1);
-        border-radius: 4px;
-      }
-      // 滚动条的滚动区域(轨道)
-      &::-webkit-scrollbar {
-        background-color: #0888f8;
-        height: 3px;
-        width: 4px;
-        border-radius: 4px;
-      }
-      // 滚动条的可拖拽部分(滑块)
-      &::-webkit-scrollbar-thumb {
-        background: rgba(30, 125, 251, 1);
-        border-radius: 4px;
-      }
-      .el-timeline-item__tail {
-        border-left: 2px dashed rgba(173, 173, 173, 1);
-      }
-      h4 {
-        margin: 0 0 10px 0;
-        color: rgba(255, 255, 255, 0.6);
-      }
-      .el-timeline-item__wrapper {
-        .el-timeline-item__timestamp {
-          color: #fff;
-          font-size: 16px;
-        }
-        h4 {
-          color: rgba(255, 255, 255, 0.6);
-          font-size: 14px;
-        }
-        p {
-          color: rgba(255, 255, 255, 0.6);
-          font-size: 14px;
-        }
-        img {
-          width: 100px;
-        }
-      }
-      .el-card {
-        background-color: transparent;
-        border: none;
-        .el-card__body {
-          padding: 10px;
-        }
-      }
-    }
-  }
   .scroll {
     width: calc(100% - 40px);
     height: calc(100% - 61px);
     overflow: auto;
     margin: 0 auto;
-    position: relative;
+
     display: flex;
     align-items: center;
     justify-content: center;
     .map {
       width: 1620px;
       height: 715px;
+      position: relative;
       overflow: hidden;
       background: url("@/assets/trackImg.jpg");
       background-repeat: no-repeat; //是否平铺
@@ -626,12 +508,139 @@ onUnmounted(() => {
       svg {
         // border: 3px solid rgba(255, 255, 255, 1);
       }
-      #origin{
+      #origin {
         position: absolute;
         // left: 0;
         // top: 0;
-        width: 30px; 
-        height: 34px
+        width: 30px;
+        height: 34px;
+      }
+      .middle {
+        width: calc(100% - 60px);
+        margin: 0 auto;
+        position: absolute;
+        z-index: 999;
+        top: 20px;
+        left: 30px;
+        color: #000;
+
+        // border-bottom: 1px solid rgb(231, 231, 231);
+        .filter {
+          display: flex;
+          flex-wrap: wrap;
+          align-items: center;
+
+          .search {
+            color: #fff;
+          }
+
+          .condition {
+            display: flex;
+            align-items: center;
+            margin: 0 25px 0 0;
+            :deep(.el-select) {
+              .el-select__wrapper {
+                box-shadow: none;
+                background-color: rgba(133, 191, 242, 0.8);
+              }
+              .el-select__selected-item {
+                color: rgba(255, 255, 255, 0.9);
+              }
+              .el-select__suffix {
+                .el-icon {
+                  color: rgba(255, 255, 255, 0.9);
+                }
+              }
+            }
+            :deep(.el-date-editor) {
+              background-color: rgba(133, 191, 242, 0.8);
+              box-shadow: none;
+              .el-icon {
+                color: rgba(255, 255, 255, 0.7);
+              }
+              .el-range-input {
+                color: #fff;
+                &::placeholder {
+                  color: rgba(255, 255, 255, 0.7); /* 更改为你想要的颜色代码 */
+                }
+              }
+              .el-range-separator {
+                color: rgba(255, 255, 255, 0.7);
+              }
+            }
+          }
+        }
+
+        .gongneng {
+          margin: 10px 0 10px 0;
+        }
+      }
+      .trackInfo {
+        position: absolute;
+        width: 357px;
+        height: calc(100% - 40px);
+        background: rgba(0, 0, 0, 0.5);
+        right: 40px;
+        top: 20px;
+        z-index:999;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        :deep(.el-timeline) {
+          height: calc(100% - 30px);
+          overflow: auto;
+          padding-left: 5px;
+          padding-right: 25px;
+          max-width: 335px !important;
+          // 整个滚动条
+          &::-webkit-scrollbar-track {
+            background-color: rgba(255, 255, 255, 1);
+            border-radius: 4px;
+          }
+          // 滚动条的滚动区域(轨道)
+          &::-webkit-scrollbar {
+            background-color: #0888f8;
+            height: 3px;
+            width: 4px;
+            border-radius: 4px;
+          }
+          // 滚动条的可拖拽部分(滑块)
+          &::-webkit-scrollbar-thumb {
+            background: rgba(30, 125, 251, 1);
+            border-radius: 4px;
+          }
+          .el-timeline-item__tail {
+            border-left: 2px dashed rgba(173, 173, 173, 1);
+          }
+          h4 {
+            margin: 0 0 10px 0;
+            color: rgba(255, 255, 255, 0.6);
+          }
+          .el-timeline-item__wrapper {
+            .el-timeline-item__timestamp {
+              color: #fff;
+              font-size: 16px;
+            }
+            h4 {
+              color: rgba(255, 255, 255, 0.6);
+              font-size: 14px;
+            }
+            p {
+              color: rgba(255, 255, 255, 0.6);
+              font-size: 14px;
+            }
+            img {
+              width: 100px;
+            }
+          }
+          .el-card {
+            background-color: transparent;
+            border: none;
+            .el-card__body {
+              padding: 10px;
+            }
+          }
+        }
       }
     }
   }

+ 4 - 0
src/views/trafficRecord/trafficRecord.vue

@@ -680,6 +680,10 @@ const getAdminId = async () => {
     adminClassDataList();
   }else{
     if(res.data.message=='登录凭证已过期,请重新登录'){
+      sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
       router.push({
         path: `/login`,
       });

+ 4 - 0
src/views/user/user.vue

@@ -1949,6 +1949,10 @@ const getDepartment = async () => {
   } else {
     loading.value = false;
     if(res.data.message=='登录凭证已过期,请重新登录'){
+      sessionStorage.removeItem("token");
+      sessionStorage.removeItem("userhead");
+      sessionStorage.removeItem("roleList");
+      sessionStorage.removeItem("message");
       router.push({
         path: `/login`,
       });