hzj18279462576@163.com 11 месяцев назад
Родитель
Сommit
61ceabdc90

+ 3 - 1
src/layout/Navbar.vue

@@ -274,7 +274,9 @@ const loginOut = () => {
   })
     .then(() => {
       localStorage.removeItem("token");
-      localStorage.removeItem("userhead");
+      localStorage.removeItem("userName");
+      sessionStorage.removeItem("accountId");
+      sessionStorage.removeItem("sidevarItem");
       router.push({
         path: `/login`,
       });

+ 10 - 9
src/layout/SidevarItem.vue

@@ -16,7 +16,7 @@
           ><img src="@/assets/img/logo.png" style="width: 40px; height: 40px"
         /></el-icon>
       </div>
-      <div v-for="i in roles.list" :key="i.path">
+      <div v-for="i in roles.list" :key="i.path" style="margin-bottom: 20px;">
         <el-sub-menu
           v-if="i.name == '房源管理' || i.name == '权限管理'"
           :index="i.index"
@@ -233,16 +233,17 @@ onBeforeMount(() => {
 
   .el-sub-menu {
     padding: 0 14px;
-    margin-bottom:20px ;
+    // margin-bottom:20px ;
+    
     .el-sub-menu__title {
       height: 40px;
-      // margin: 0 0 20px 0;
-      margin: 0;
+      margin: 0 0 20px 0;
       border-radius: 10px;
     }
     .el-menu-item {
       height: 40px;
-      margin: 20px 0 !important;
+      margin:0 0 20px;
+      // margin: 20px 0 !important;
       border-radius: 10px;
       .el-menu-tooltip__trigger {
         display: flex;
@@ -250,7 +251,7 @@ onBeforeMount(() => {
         justify-content: center;
       }
       &:last-child {
-        margin: 20px 0 0 0 !important;
+        // margin: 20px 0 0 0 !important;
       }
       &.is-active {
         background: linear-gradient(
@@ -264,7 +265,7 @@ onBeforeMount(() => {
       box-shadow: none;
       background-color: rgba(48, 65, 86, 1);
     }
-    &.is-active.is-opened {
+    &.is-active {
       .el-sub-menu__title {
         background: linear-gradient(
           90deg,
@@ -277,7 +278,7 @@ onBeforeMount(() => {
 
   .el-menu-item {
     height: 40px;
-    margin: 20px 14px;
+    margin: 0 14px;
     border-radius: 10px;
     .el-menu-tooltip__trigger {
       display: flex;
@@ -327,7 +328,7 @@ onBeforeMount(() => {
     .el-sub-menu__title {
       width: 40px;
       padding: 0 20px;
-      // margin: 0 0 20px 0;
+      margin: 0 0 20px 0;
       display: flex;
       align-items: center;
       justify-content: center;

+ 366 - 0
src/layout/SidevarItem1.vue

@@ -0,0 +1,366 @@
+<template>
+  <div class="box-item">
+    <el-menu
+      class="el-menu-vertical-demo"
+      background-color="#293749"
+      text-color="#fff"
+      active-text-color="#fff"
+      :default-active="sidevarItem"
+      :collapse="isCollapse"
+      @open="handleOpen"
+      @close="handleClose"
+      @select="handleSelect"
+    >
+      <div class="logo el-menu-item">
+        <el-icon :size="20"
+          ><img src="@/assets/img/logo.png" style="width: 40px; height: 40px"
+        /></el-icon>
+      </div>
+      <div v-for="i in roles.list" :key="i.path">
+        <el-sub-menu
+          v-if="i.name == '房源管理' || i.name == '权限管理'"
+          :index="i.index"
+          popper-class="ceshi"
+          :teleported="true"
+        >
+          <template #title>
+            <SvgIcon :name="i.icon" color="#fff" size="22"></SvgIcon>
+            <span>{{ i.name }}</span>
+          </template>
+          <el-menu-item
+            v-for="item in i.children"
+            :index="item.path"
+            :key="item.paht"
+          >
+            <template #title>{{ item.name }}</template>
+          </el-menu-item>
+        </el-sub-menu>
+        <el-menu-item v-else :index="i.path">
+          <SvgIcon :name="i.icon" color="#fff" size="22"></SvgIcon>
+          <template #title>{{ i.name }}</template>
+        </el-menu-item>
+      </div>
+
+      <!-- <el-menu-item index="/dataOverview">
+        <SvgIcon name="dataOverview" color="#fff" size="22"></SvgIcon>
+        <template #title>数据总览</template>
+      </el-menu-item>
+
+      <el-menu-item index="/studentInfo">
+        <SvgIcon name="studentInfo" color="#fff" size="22"></SvgIcon>
+        <template #title>学生信息管理</template>
+      </el-menu-item>
+
+      <el-sub-menu index="1" popper-class="ceshi" :teleported="true">
+        <template #title>
+          <SvgIcon name="building" color="#fff" size="22"></SvgIcon>
+          <span>房源管理</span>
+        </template>
+        <el-menu-item index="/building">
+          <template #title>楼栋信息管理</template>
+        </el-menu-item>
+        <el-menu-item index="/dormitory">
+          <template #title>寝室信息管理</template>
+        </el-menu-item>
+        <el-menu-item index="/bed">
+          <template #title>床位信息管理</template>
+        </el-menu-item>
+      </el-sub-menu>
+
+      <el-menu-item index="/student">
+        <SvgIcon name="student" color="#fff" size="22"></SvgIcon>
+        <template #title>学生住宿信息</template>
+      </el-menu-item>
+      <el-menu-item index="/quarterage">
+        <SvgIcon name="quarterage" color="#fff" size="22"></SvgIcon>
+        <template #title>住宿信息统计</template>
+      </el-menu-item>
+      <el-menu-item index="/caller">
+        <SvgIcon name="caller" color="#fff" size="22"></SvgIcon>
+        <template #title>访客信息管理</template>
+      </el-menu-item>
+      <el-sub-menu index="2" popper-class="ceshi" :teleported="true">
+        <template #title>
+          <SvgIcon name="role" color="#fff" size="22"></SvgIcon>
+          <span>权限管理</span>
+        </template>
+        <el-menu-item index="/user">
+          <template #title>用户管理</template>
+        </el-menu-item>
+        <el-menu-item index="/role">
+          <template #title>角色管理</template>
+        </el-menu-item>
+      </el-sub-menu>
+      <el-menu-item index="/system">
+        <SvgIcon name="system" color="#fff" size="22"></SvgIcon>
+        <template #title>系统设置</template>
+      </el-menu-item> -->
+    </el-menu>
+  </div>
+</template>
+
+<script setup>
+import { ref, onBeforeMount, onMounted, watch, reactive } from "vue";
+import {
+  Fold,
+  Expand,
+  Service,
+  Position,
+  View,
+  Open,
+} from "@element-plus/icons-vue";
+import { useRouter } from "vue-router";
+import { storeToRefs } from "pinia";
+import { useCounterStore } from "@/stores/index";
+
+const store = useCounterStore();
+const { isCollapse, sidevarItem, roleList } = storeToRefs(store);
+
+const router = useRouter();
+const roles = reactive({
+  list: [],
+});
+
+const acitveItems = reactive({ list: [] });
+
+const handleSelect = (key) => {
+  console.log(key);
+
+  store.setItem(key);
+  router.push({
+    path: `${key}`,
+  });
+};
+const handleOpen = () => {};
+const handleClose = () => {};
+onMounted(() => {
+  console.log(roleList.value);
+  roleList.value.forEach((i) => {
+    if (i.path == "/building" || i.path == "/dormitory" || i.path == "/bed") {
+      const exists = roles.list.some((item) => item.name === "房源管理");
+      if (exists) {
+        roles.list.forEach((j) => {
+          if (j.name == "房源管理") {
+            j.children.push({
+              name: i.name,
+              path: i.path,
+              icon: i.icon,
+            });
+          }
+        });
+      } else {
+        roles.list.push({
+          name: "房源管理",
+          index: 1,
+          icon: "building",
+          children: [
+            {
+              name: i.name,
+              path: i.path,
+              icon: i.icon,
+            },
+          ],
+        });
+      }
+    } else if (i.path == "/user" || i.path == "/role") {
+      const exists = roles.list.some((item) => item.name === "权限管理");
+      if (exists) {
+        roles.list.forEach((j) => {
+          if (j.name == "权限管理") {
+            j.children.push({
+              name: i.name,
+              path: i.path,
+              icon: i.icon,
+            });
+          }
+        });
+      } else {
+        roles.list.push({
+          name: "权限管理",
+          index: 2,
+          icon: "role",
+          children: [
+            {
+              name: i.name,
+              path: i.path,
+              icon: i.icon,
+            },
+          ],
+        });
+      }
+    } else {
+      roles.list.push({
+        name: i.name,
+        path: i.path,
+        icon: i.icon,
+      });
+    }
+  });
+  console.log(roles.list);
+});
+onBeforeMount(() => {
+  // console.log("SidevarItem/onBeforeMount");
+});
+</script>
+
+<style lang="scss" scoped>
+.el-menu-vertical-demo:not(.el-menu--collapse) {
+  width: 200px;
+  // min-height: 400px;
+  user-select: none;
+}
+.box-item {
+  height: 100vh;
+}
+:deep(.el-menu--vertical) {
+  height: 100%;
+  overflow: auto;
+  background-color: rgba(48, 65, 86, 1);
+  box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.16);
+
+  .logo {
+    height: 65px;
+    color: rgb(255, 255, 255);
+    cursor: default;
+    display: flex;
+    justify-content: space-around;
+    align-items: center;
+    margin: 20px 0 !important;
+  }
+  .logo:hover {
+    background-color: transparent !important;
+  }
+
+  .el-sub-menu {
+    padding: 0 14px;
+    margin-bottom:20px ;
+    .el-sub-menu__title {
+      height: 40px;
+      // margin: 0 0 20px 0;
+      margin: 0;
+      border-radius: 10px;
+    }
+    .el-menu-item {
+      height: 40px;
+      margin: 20px 0 !important;
+      border-radius: 10px;
+      .el-menu-tooltip__trigger {
+        display: flex;
+        align-items: center;
+        justify-content: center;
+      }
+      &:last-child {
+        margin: 20px 0 0 0 !important;
+      }
+      &.is-active {
+        background: linear-gradient(
+          90deg,
+          rgba(38, 151, 255, 1) 0%,
+          rgba(102, 182, 255, 1) 100%
+        );
+      }
+    }
+    .el-menu.el-menu--inline {
+      box-shadow: none;
+      background-color: rgba(48, 65, 86, 1);
+    }
+    &.is-active.is-opened {
+      .el-sub-menu__title {
+        background: linear-gradient(
+          90deg,
+          rgba(38, 151, 255, 1) 0%,
+          rgba(102, 182, 255, 1) 100%
+        );
+      }
+    }
+  }
+
+  .el-menu-item {
+    height: 40px;
+    margin: 20px 14px;
+    border-radius: 10px;
+    .el-menu-tooltip__trigger {
+      display: flex;
+      align-items: center;
+      justify-content: center;
+    }
+    &.is-active {
+      background: linear-gradient(
+        90deg,
+        rgba(38, 151, 255, 1) 0%,
+        rgba(102, 182, 255, 1) 100%
+      );
+    }
+  }
+}
+:deep(.el-menu--collapse) {
+  .el-sub-menu {
+    padding: 0;
+    margin: 20px 10px;
+    .el-sub-menu__title {
+      span {
+        display: none;
+      }
+      .el-icon {
+        margin-right: 0;
+      }
+      .el-sub-menu__icon-arrow {
+        display: none;
+      }
+    }
+  }
+  .el-sub-menu.is-active {
+    .el-sub-menu__title {
+      background: linear-gradient(
+        90deg,
+        rgba(38, 151, 255, 1) 0%,
+        rgba(102, 182, 255, 1) 100%
+      );
+      span {
+        display: none;
+      }
+    }
+  }
+  .el-sub-menu {
+    padding: 0;
+    margin: 0 10px 20px !important;
+    .el-sub-menu__title {
+      width: 40px;
+      padding: 0 20px;
+      // margin: 0 0 20px 0;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+    }
+  }
+  .el-sub-menu {
+    .el-menu-item {
+      border: 1px solid red;
+    }
+  }
+  .el-menu-item {
+    width: 40px;
+    margin: 20px 10px;
+    .el-menu-tooltip__trigger {
+      .el-icon {
+        margin-right: 0;
+      }
+    }
+  }
+}
+</style>
+
+<style lang="scss">
+.ceshi {
+  &.is-light {
+    border: none !important;
+  }
+  .el-menu-item.is-active {
+    background: linear-gradient(
+      90deg,
+      rgba(38, 151, 255, 1) 0%,
+      rgba(102, 182, 255, 1) 100%
+    );
+  }
+}
+</style>

+ 13 - 12
src/router/index.js

@@ -18,11 +18,10 @@ const routes = [
     path: "/",
     redirect: "/login",
   },
-  ,
-  {
-    path: "/:pathMatch(.*)*",
-    redirect: "/404",
-  },
+  // {
+  //   path: "/:pathMatch(.*)*",
+  //   redirect: "/404",
+  // },
   // {
   //   path: "/dataOverview",
   //   component: () => import("@/views/dataOverview/dataOverview.vue"),
@@ -98,14 +97,16 @@ router.beforeEach(async (to, from, next) => {
     if (token) {
       next();
     } else {
-      ElMessage({
-        type: "error",
-        showClose: true,
-        message: "无权限进入此页面",
-        center: true,
-      });
+      // ElMessage({
+      //   type: "error",
+      //   showClose: true,
+      //   message: "无权限进入此页面",
+      //   center: true,
+      // });
       localStorage.removeItem("token");
-      localStorage.removeItem("userhead");
+      localStorage.removeItem("userName");
+      sessionStorage.removeItem("accountId");
+      sessionStorage.removeItem("sidevarItem");
       next("/login");
     }
   }

+ 19 - 29
src/stores/index.js

@@ -1,7 +1,7 @@
 // src/stores/counter.ts
 import { defineStore } from "pinia";
 import { https } from "@/utils/request"; // 绝对路径
-import router from "@/router";
+import router from "../router";
 import { ElMessage } from "element-plus";
 export const useCounterStore = defineStore("user", {
   state: () => {
@@ -13,7 +13,7 @@ export const useCounterStore = defineStore("user", {
       roleList: [], // 权限列表
       btnRole: [], // 功能按钮权限
       collegeRole: [], // 院系权限
-      roleId:'' // 角色id
+      roleId: "", // 角色id
     };
   },
   getters: {
@@ -61,11 +61,11 @@ export const useCounterStore = defineStore("user", {
         "params",
         datas
       ); // 使用封装的 get 方法
+      console.log(res, "获取菜单权限列表");
       if (res.code == 200) {
-        console.log(res, "获取菜单权限列表");
         this.collegeRole = res.data.welcomeOrgList;
         let roles = res.data.welcomeRole;
-        this.roleId=res.data.welcomeRole.id
+        this.roleId = res.data.welcomeRole.id;
         let btn = [];
         // 数据总览
         if (roles.dataManagementSetting) {
@@ -240,38 +240,28 @@ export const useCounterStore = defineStore("user", {
             name: "NotFound",
             component: () => import("@/views/404/404.vue"),
           });
-
+          router.addRoute({
+            path: "/:pathMatch(.*)*",
+            redirect: "/404",
+          });
           console.log("动态添加路由");
         }
+
         router.push({
           path: roleList[0].path,
         });
       } else {
-        console.log("获取角色权限失败,请重新登录");
-        // router.push({
-        //   path: '/login',
-        // });
-        // ElMessage({
-        //   type: "error",
-        //   showClose: true,
-        //   message: "获取角色权限失败,请重新登录",
-        //   center: true,
-        // });
+        console.log("动态添加路由失败");
+        router.addRoute({
+          path: "/404",
+          name: "NotFound",
+          component: () => import("@/views/404/404.vue"),
+        });
+        router.addRoute({
+          path: "/:pathMatch(.*)*",
+          redirect: "/404",
+        });
       }
-      // const modules = import.meta.glob("../views/**/*.vue");
-      // let roleList = this.roleList;
-      // if (roleList) {
-      //   roleList.forEach((item) => {
-      //     let arr = {
-      //       path: item.path,
-      //       name: item.path,
-      //       meta: { isAuth: true, title: item.name, showHeader: true },
-      //       component: modules[`../views${item.path}${item.path}.vue`],
-      //     };
-      //     router.addRoute(arr);
-      //   });
-      //   console.log("动态添加路由");
-      // }
     },
     BtnRole(flag) {
       let show = this.btnRole.some((i) => {

+ 8 - 7
src/utils/request.js

@@ -1,7 +1,6 @@
-// utils/request.ts
 import axios from "axios";
 import { ElMessage, ElMessageBox } from "element-plus";
-import router from "@/router"; // 确保路径正确
+import router from "../router"; // 确保路径正确
 
 const instance = axios.create({
   baseURL: import.meta.env.VITE_API_BASE_URL,
@@ -32,23 +31,25 @@ instance.interceptors.request.use(
 // 响应拦截器
 instance.interceptors.response.use(
   (response) => {
-    // console.log(response);
     if (
       response.data.message == "登录凭证已过期,请重新登录!" ||
       response.data.message == "无效token"
     ) {
+      localStorage.removeItem("token");
+      localStorage.removeItem("userName");
+      sessionStorage.removeItem("accountId");
+      sessionStorage.removeItem("sidevarItem");
       router.push({
         path: `/login`,
       });
+      console.log(response.data.message);
     }
     return response.data;
   },
   (error) => {
     // 统一错误处理
-    if (error.response?.status === 401) {
-      // 处理未授权情况
-    }
-    return Promise.reject(error);
+    console.log(error.response.data.message); // 查看错误信息
+    return Promise.reject(error); // 返回拒绝的 Promise
   }
 );
 

+ 11 - 5
src/views/404/404.vue

@@ -55,9 +55,16 @@ const router = useRouter();
 const store = useCounterStore();
 const { isCollapse, sidevarItem, roleList } = storeToRefs(store);
 const goHome = () => {
-  router.push({
-    path: roleList.value[0].path,
-  });
+  console.log(roleList);
+  if (roleList.value.length) {
+    router.push({
+      path: roleList.value[0].path,
+    });
+  } else {
+    router.push({
+      path: "/login",
+    });
+  }
 };
 
 const goBack = () => {
@@ -78,7 +85,7 @@ const goBack = () => {
   flex-direction: row-reverse;
   align-items: center;
   // justify-content: space-around;
-  
+
   background-image: url("../../assets/img/404.png");
   /* 不重复平铺 */
   background-repeat: no-repeat;
@@ -95,7 +102,6 @@ const goBack = () => {
   padding: 40px;
   background-color: transparent;
 
-
   // border-radius: 12px;
   // box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
 }

+ 30 - 11
src/views/building/building.vue

@@ -64,14 +64,14 @@
         <!-- 按钮列表 -->
         <div class="gongneng">
           <el-button
-          v-if="store.BtnRole('buildingManagementSetting1')"
+            v-if="store.BtnRole('buildingManagementSetting1')"
             type="primary"
             color="rgba(38, 151, 255, 1)"
             @click="buildImportBtn"
             >导入</el-button
           >
           <el-button
-          v-if="store.BtnRole('buildingManagementSetting2')"
+            v-if="store.BtnRole('buildingManagementSetting2')"
             type="primary"
             style="margin-left: 0"
             color="rgba(48, 201, 191, 1)"
@@ -79,7 +79,7 @@
             >导出</el-button
           >
           <el-button
-          v-if="store.BtnRole('buildingManagementSetting3')"
+            v-if="store.BtnRole('buildingManagementSetting3')"
             type="primary"
             style="margin-left: 0"
             color="rgba(38, 151, 255, 1)"
@@ -116,12 +116,27 @@
             </template>
           </el-table-column>
           <el-table-column align="center" prop="startFloor" label="起始层数" />
-          <el-table-column align="center" prop="remark" show-overflow-tooltip label="备注" />
+          <el-table-column
+            align="center"
+            prop="remark"
+            show-overflow-tooltip
+            label="备注"
+          />
           <el-table-column align="center" label="操作" fixed="right">
             <template #default="{ row }">
               <div class="options">
-                <span v-if="store.BtnRole('buildingManagementSetting4')" class="edit" @click="updateS(row)">编辑</span>
-                <span v-if="store.BtnRole('buildingManagementSetting5')" class="delete" @click="deleteS(row)">删除</span>
+                <span
+                  v-if="store.BtnRole('buildingManagementSetting4')"
+                  class="edit"
+                  @click="updateS(row)"
+                  >编辑</span
+                >
+                <span
+                  v-if="store.BtnRole('buildingManagementSetting5')"
+                  class="delete"
+                  @click="deleteS(row)"
+                  >删除</span
+                >
               </div>
             </template>
           </el-table-column>
@@ -188,7 +203,11 @@
           />
         </el-form-item>
         <el-form-item label="楼栋性别 :" prop="sex">
-          <el-select v-model="ruleForm.sex" placeholder="请选择楼栋性别">
+          <el-select
+            :disabled="dialongTitle == '编辑楼栋信息'"
+            v-model="ruleForm.sex"
+            placeholder="请选择楼栋性别"
+          >
             <el-option label="男" value="男" />
             <el-option label="女" value="女" />
           </el-select>
@@ -343,7 +362,7 @@ const rules = reactive({
   floors: [{ required: true, message: "楼栋层数不能为空", trigger: "blur" }],
   startFloor: [
     { required: true, message: "起始层数不能为空", trigger: "blur" },
-    { type: 'number', message: '请输入数字' },
+    { type: "number", message: "请输入数字" },
   ],
 });
 
@@ -401,7 +420,7 @@ const schoolChange = async (val) => {
   if (!val) {
     buildData.value = null;
     return;
-  }else{
+  } else {
     buildData.value = null;
   }
   buildList();
@@ -522,8 +541,8 @@ const submitAdd = lodash.debounce(async (formEl) => {
   await formEl.validate(async (valid, fields) => {
     if (valid) {
       let data = {
-        school:ruleForm.schoolId.split(',')[0],
-        schoolId: ruleForm.schoolId.split(',')[1],
+        school: ruleForm.schoolId.split(",")[0],
+        schoolId: ruleForm.schoolId.split(",")[1],
         build: ruleForm.build,
         sex: ruleForm.sex,
         floors: ruleForm.floors,

+ 28 - 6
src/views/caller/caller.vue

@@ -105,7 +105,7 @@
             align="center"
             width="220"
             prop="studentCard"
-            label="学号/录取号"
+            label="身份证号"
           />
           <el-table-column
             align="center"
@@ -227,10 +227,10 @@
             clearable
           />
         </el-form-item>
-        <el-form-item label="学号/录取号 :" prop="studentCard">
+        <el-form-item label="身份证号 :" prop="studentCard">
           <el-input
             v-model.trim="ruleForm.studentCard"
-            placeholder="请输入学号或录取号"
+            placeholder="请输入身份证号"
             clearable
           />
         </el-form-item>
@@ -265,6 +265,8 @@
             format="YYYY-MM-DD HH:mm:ss"
             value-format="YYYY-MM-DD HH:mm:ss"
             placeholder="请选择日期"
+            :default-time="defaultTime"
+            :disabled-date="disabledDate"
           />
         </el-form-item>
         <el-form-item label="车牌号 :" prop="carNumber">
@@ -387,9 +389,15 @@ const rules = reactive({
   ],
   name: [{ required: true, message: "学生姓名不能为空", trigger: "blur" }],
   studentCard: [
-    { required: true, message: "学生证件号不能为空", trigger: "blur" },
+    { required: true, message: "身份证号不能为空", trigger: "blur" },
+    {
+      min: 8,
+      max: 20,
+      pattern: /^(?:\d{15}|\d{17}[\dX])$/,
+      message: "身份证号码格式有误,请重新输入",
+      trigger: "blur",
+    },
   ],
-  cardId: [{ required: true, message: "学号/录取号不能为空", trigger: "blur" }],
   school: [{ required: true, message: "校区名称不能为空", trigger: "blur" }],
   startTime: [{ required: true, message: "到访时间不能为空", trigger: "blur" }],
   carNumber: [{ required: true, message: "车牌号不能为空", trigger: "blur" }],
@@ -399,6 +407,19 @@ const rules = reactive({
   ],
 });
 
+const defaultTime = [
+  new Date(2000, 1, 1, 0, 0, 0),
+  new Date(2000, 2, 1, 23, 59, 59),
+] // '12:00:00', '08:00:00'
+const disabledDate = (time) => {
+  const today = new Date();
+  // 获取当前日期的开始时间
+  const startOfToday = new Date(today.setHours(0, 0, 0, 0));
+  // 获取当前日期的结束时间
+  const endOfToday = new Date(today.setHours(23, 59, 59, 999));
+  return time < startOfToday || time > endOfToday;
+};
+
 const schoolData = ref();
 
 // 获取账户列表
@@ -417,7 +438,7 @@ const getList = async () => {
     "params",
     params
   );
-  console.log(res, "驾驶员信息管理");
+  console.log(res, "访客信息管理");
   if (res.code == 200) {
     tableData.list = res.data.list;
     total.value = res.data.totalCount;
@@ -470,6 +491,7 @@ const addlist = () => {
   ruleForm.peerNum = null; // 同行人数不能为空
   ruleForm.visitorReason = null; // 访问事由
   // ruleForm.remark = null; // 访问事由
+  ruleForm.id = null;
 };
 // 添加账号
 const updateS = (row) => {

+ 1 - 1
src/views/login/login.vue

@@ -131,7 +131,7 @@ const submitForm = (formEl) => {
         }
         localStorage.setItem("token", res.data.token);
         localStorage.setItem("userName", res.data.userName);
-        store.ROLEAdd()
+        store.ROLEAdd() 
         
         ElMessage({
           type: "success",

+ 101 - 5
src/views/role/role.vue

@@ -46,7 +46,7 @@
         <!-- 按钮列表 -->
         <div class="gongneng">
           <el-button
-          v-if="store.BtnRole('roleManagementSetting1')"
+            v-if="store.BtnRole('roleManagementSetting1')"
             type="primary"
             style="margin-left: 0"
             color="rgba(38, 151, 255, 1)"
@@ -78,10 +78,106 @@
           <el-table-column align="center" prop="createTime" label="创建时间" />
           <el-table-column align="center" label="操作" fixed="right">
             <template #default="{ row }">
-              <div class="options" >
-                <span class="edit"  v-if="store.BtnRole('roleManagementSetting2') && row.id!=1" @click="updateS(row)">编辑</span>
-                <span class="delete" v-if="store.BtnRole('roleManagementSetting3') && (row.id!=1 && row.id!=2 && row.id!=3 && row.id!=4)" @click="deleteS(row)">删除</span>
+              <div class="options" v-if="roleId == 1">
+                <div v-if="row.id == 1"></div>
+                <div v-else-if="row.id == 10">
+                  <span
+                    class="edit"
+                    v-if="store.BtnRole('roleManagementSetting2')"
+                    @click="updateS(row)"
+                    >编辑</span
+                  >
+                </div>
+                <div v-else-if="row.id == 2">
+                  <span
+                    class="edit"
+                    v-if="store.BtnRole('roleManagementSetting2')"
+                    @click="updateS(row)"
+                    >编辑</span
+                  >
+                </div>
+                <div v-else>
+                  <span
+                    class="edit"
+                    v-if="store.BtnRole('roleManagementSetting2')"
+                    @click="updateS(row)"
+                    >编辑</span
+                  >
+                  <span
+                    class="delete"
+                    v-if="store.BtnRole('roleManagementSetting3')"
+                    @click="deleteS(row)"
+                    >删除</span
+                  >
+                </div>
               </div>
+              <div class="options" v-if="roleId == 10">
+                <div v-if="row.id == 1"></div>
+                <div v-else-if="row.id == 10">
+                  <span
+                    class="edit"
+                    v-if="store.BtnRole('roleManagementSetting2')"
+                    @click="updateS(row)"
+                    >编辑</span
+                  >
+                </div>
+                <div v-else-if="row.id == 2">
+                  <span
+                    class="edit"
+                    v-if="store.BtnRole('roleManagementSetting2')"
+                    @click="updateS(row)"
+                    >编辑</span
+                  >
+                </div>
+                <div v-else>
+                  <span
+                    class="edit"
+                    v-if="store.BtnRole('roleManagementSetting2')"
+                    @click="updateS(row)"
+                    >编辑</span
+                  >
+                  <span
+                    class="delete"
+                    v-if="store.BtnRole('roleManagementSetting3')"
+                    @click="deleteS(row)"
+                    >删除</span
+                  >
+                </div>
+              </div>
+              <div class="options" v-if="roleId == 2">
+                <div v-if="row.id == 1"></div>
+                <div v-else-if="row.id == 10">
+                  <span
+                    class="edit"
+                    v-if="store.BtnRole('roleManagementSetting2')"
+                    @click="updateS(row)"
+                    >编辑</span
+                  >
+                </div>
+                <div v-else-if="row.id == 2">
+                  <span
+                    class="edit"
+                    v-if="store.BtnRole('roleManagementSetting2')"
+                    @click="updateS(row)"
+                    >编辑</span
+                  >
+                </div>
+                <div v-else>
+                  <span
+                    class="edit"
+                    v-if="store.BtnRole('roleManagementSetting2')"
+                    @click="updateS(row)"
+                    >编辑</span
+                  >
+                  <span
+                    class="delete"
+                    v-if="store.BtnRole('roleManagementSetting3')"
+                    @click="deleteS(row)"
+                    >删除</span
+                  >
+                </div>
+              </div>
+              <div class="options" v-else></div>
             </template>
           </el-table-column>
         </el-table>
@@ -393,7 +489,7 @@ const router = useRouter();
 const store = useCounterStore();
 
 // 为避免解构时失去响应性
-const { name, age, isCollapse, realAge,roleId } = storeToRefs(store);
+const { name, age, isCollapse, realAge, roleId } = storeToRefs(store);
 
 // 表格数据
 const loading = ref(false);

+ 1 - 1
src/views/studentInfo/studentInfo.vue

@@ -354,7 +354,7 @@
           </div>
           <!-- 中间 -->
           <div class="photo_middle">
-            <el-form-item label="校区 " prop="school">
+            <el-form-item label="校区 :" prop="school">
               <el-select
                 clearable
                 :disabled="ruleForm.fillStatus == '已填报'"

+ 4 - 4
src/views/system/system.vue

@@ -367,7 +367,7 @@
         <el-input
           v-model="params.arriveSchool"
           placeholder="请输入内容"
-          :autosize="{ minRows: 4, maxRows: 8 }"
+          :autosize="{ minRows: 5, maxRows: 8 }"
           type="textarea"
           :disabled="updateShow"
           style="margin-left: 15px"
@@ -378,13 +378,13 @@
         <el-input
           v-model="params.chooseDormitory"
           placeholder="请输入内容"
-          :autosize="{ minRows: 4, maxRows: 8 }"
+          :autosize="{ minRows: 4, maxRows: 10 }"
           type="textarea"
           :disabled="updateShow"
           style="margin-left: 15px"
         />
       </li>
-      <!-- <li>
+      <li>
         <div class="warning_title">未缴费车牌预约:</div>
         <el-input
           v-model="params.carOrder"
@@ -394,7 +394,7 @@
           :disabled="updateShow"
           style="margin-left: 15px"
         />
-      </li> -->
+      </li>
     </ul>
     <ul
       style="margin: 15px 0"

+ 57 - 20
src/views/user/user.vue

@@ -120,26 +120,61 @@
             fixed="right"
           >
             <template #default="{ row }">
-              <div class="options" v-if="row.id != 1">
-                <span
-                  v-if="
-                    store.BtnRole('accountManagementSetting2') &&
-                    ((roleId ==1 || roleId == 2) && roleId != row.roleId)
-                  "
-                  class="edit"
-                  @click="updateS(row)"
-                  >编辑</span
-                >
-                <span
-                  v-if="
-                    store.BtnRole('accountManagementSetting3') &&
-                    ((roleId ==1 || roleId == 2) && roleId != row.roleId)
-                  "
-                  class="delete"
-                  @click="deleteS(row)"
-                  >删除</span
-                >
+              <div class="options" v-if="roleId == 1">
+                <div v-if="row.id == 1"></div>
+                <div v-else>
+                  <span
+                    v-if="store.BtnRole('accountManagementSetting2')"
+                    class="edit"
+                    @click="updateS(row)"
+                    >编辑</span
+                  >
+                  <span
+                    v-if="store.BtnRole('accountManagementSetting3')"
+                    class="delete"
+                    @click="deleteS(row)"
+                    >删除</span
+                  >
+                </div>
+              </div>
+              <div class="options" v-else-if="roleId == 10">
+                <div v-if="row.id == 1"></div>
+                <div v-else-if="row.roleId == 10"></div>
+                <div v-else>
+                  <span
+                    v-if="store.BtnRole('accountManagementSetting2')"
+                    class="edit"
+                    @click="updateS(row)"
+                    >编辑</span
+                  >
+                  <span
+                    v-if="store.BtnRole('accountManagementSetting3')"
+                    class="delete"
+                    @click="deleteS(row)"
+                    >删除</span
+                  >
+                </div>
+              </div>
+              <div class="options" v-else-if="roleId == 2">
+                <div v-if="row.id == 1"></div>
+                <div v-else-if="row.roleId == 10"></div>
+                <div v-else-if="row.roleId == 2"></div>
+                <div v-else>
+                  <span
+                    v-if="store.BtnRole('accountManagementSetting2')"
+                    class="edit"
+                    @click="updateS(row)"
+                    >编辑</span
+                  >
+                  <span
+                    v-if="store.BtnRole('accountManagementSetting3')"
+                    class="delete"
+                    @click="deleteS(row)"
+                    >删除</span
+                  >
+                </div>
               </div>
+              <div class="options" v-else></div>
             </template>
           </el-table-column>
         </el-table>
@@ -402,7 +437,9 @@ const roleList = async () => {
       if (roleId.value == 1) {
         return i.id != 1;
       } else if (roleId.value == 2) {
-        return i.id != 1 && i.id != 2;
+        return i.id != 1 && i.id != 10 && i.id != 2;
+      } else if (roleId.value == 10) {
+        return i.id != 1 && i.id != 10;
       } else {
         return [];
       }