Procházet zdrojové kódy

build: :zap: 字符串过滤

chaooo před 2 roky
rodič
revize
8a580a5dd0

+ 2 - 2
src/api/auth/types.ts

@@ -33,9 +33,9 @@ export interface LoginResult {
    */
   num: string;
   /**
-   * 头像
+   * 学校id
    */
-  avatar: string;
+  school_id: number;
   /**
    * 角色
    */

+ 33 - 36
src/layout/components/Navbar/SchoolSelect.vue

@@ -1,8 +1,7 @@
 <script setup lang="ts">
-import { SchoolList } from "@/api/school/types";
-import { getSchoolSelect } from "@/api/school";
-import { watch } from "vue";
-import { useUserStore } from "@/store/modules/user";
+import {SchoolList} from "@/api/school/types";
+import {getSchoolSelect} from "@/api/school";
+import {useUserStore} from "@/store/modules/user";
 
 const userStore = useUserStore();
 /**
@@ -10,47 +9,37 @@ const userStore = useUserStore();
  */
 const schoolData = ref<SchoolList[]>();
 const schoolId = ref(userStore.schoolId || 0);
-const schoolNum = ref(userStore.schoolNum || "");
 async function getSchoolData() {
   getSchoolSelect()
-    .then(({ data }) => {
+    .then(({data}) => {
       schoolData.value = data;
-      if (userStore.schoolNum && userStore.schoolNum != "") {
-        schoolData.value?.some((item) => {
-          if (item.num == userStore.schoolNum) {
-            schoolId.value = item.school_id;
-            schoolNum.value = item.num;
-          }
-        });
-      } else {
+      if (userStore.schoolId == 0) {
         schoolId.value = data[0].school_id;
-        schoolNum.value = data[0].num;
+        //schoolNum.value = data[0].num;
+        userStore.changeSchool(schoolId.value, data[0].num);
       }
-      userStore.changeSchool(schoolId.value, schoolNum.value);
     })
     .catch((error) => {
       console.log(error);
     });
 }
+function changeMySchool() {
+  schoolData.value?.some((school) => {
+    if (schoolId.value == school.school_id) {
+      //schoolNum.value = school.num;
+      userStore.changeSchool(schoolId.value, school.num);
+      return true;
+    }
+  });
+}
 onMounted(() => {
   getSchoolData();
 });
-watch(
-  () => schoolId.value,
-  (newValue) => {
-    schoolData.value?.some((school) => {
-      if (newValue == school.school_id) {
-        userStore.changeSchool(newValue, school.num);
-        return true;
-      }
-    });
-  }
-);
 </script>
 <template>
   <!-- 学校选择下拉框 -->
   <div class="nav-select">
-    <el-select v-model="schoolId" size="large" placeholder="请选择学校">
+    <el-select v-model="schoolId" size="large" placeholder="请选择学校" @change="changeMySchool()">
       <el-option v-for="item in schoolData" :key="item.school_id" :label="item.name" :value="item.school_id" />
     </el-select>
     <span class="school">学校编码:{{ userStore.schoolNum }}</span>
@@ -61,16 +50,19 @@ watch(
   display: flex;
   align-items: center;
   justify-items: center;
+
   .school {
     padding-left: 15px;
   }
 }
+
 .svg-icon {
   margin-bottom: -2px;
 }
+
 .el-select {
-  padding: 15px 0;
   width: 280px;
+  padding: 15px 0;
   margin-left: 12px;
 }
 //移动端兼容
@@ -78,41 +70,46 @@ watch(
   .navbar {
     .nav-select {
       position: absolute;
-      left: 0;
       top: 100px;
+      left: 0;
       z-index: 1;
-      width: 100%;
       box-sizing: border-box;
+      width: 100%;
       padding: 0 30px;
+
       .el-select {
         width: 50%;
         padding: 0;
         margin: 0;
       }
+
       :deep(.el-input__wrapper) {
-        background: #ffffff;
+        background: #fff;
       }
     }
   }
 }
+
 /* 自定义 el-select 样式 */
 :deep(.el-input__wrapper) {
   background: #efefef;
   border-radius: 12px;
+  box-shadow: none !important;
 }
-/* el-select 各种边框线隐藏**/
+
+/* el-select 各种边框线隐藏 **/
 :deep(.el-select) {
   --el-select-input-focus-border-color: none !important;
 }
-:deep(.el-input__wrapper) {
-  box-shadow: none !important;
-}
+
 :deep(.el-select .el-input.is-focus .el-input__wrapper) {
   box-shadow: none !important;
 }
+
 :deep(.el-select .el-input__wrapper.is-focus) {
   box-shadow: none !important;
 }
+
 :deep(.el-select:hover:not(.el-select--disabled) .el-input__wrapper) {
   box-shadow: none !important;
 }

+ 1 - 0
src/store/modules/user.ts

@@ -52,6 +52,7 @@ export const useUserStore = defineStore("user", () => {
     token.value = data.token;
     nickname.value = data.name;
     phone.value = data.phone;
+    schoolId.value = data.school_id;
     schoolNum.value = data.num;
     role.value = data.role;
     //role.value = "ADMIN";

+ 11 - 1
src/utils/index.ts

@@ -10,7 +10,7 @@ export function isExternal(path: string) {
  * 获取URL参数值
  * @param name URL参数名称
  */
-export function getUrlParam(name: string) {
+export function getUrlParam(name: string): string {
   let value = "";
   const paramsStr = window.location.href.split("?")[1];
   const paramArr = paramsStr.split("&");
@@ -22,3 +22,13 @@ export function getUrlParam(name: string) {
   });
   return value;
 }
+
+/**
+ * 过滤特殊字符
+ */
+export function trimInput(value: string): string {
+  value = value
+    .replace(/[`~!@#$%^&*()_\-+=<>?:"{}|,./;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、]/g, "")
+    .replace(/\s/g, "");
+  return value;
+}

+ 6 - 1
src/views/equipment/index.vue

@@ -5,6 +5,7 @@ import {TeacherList, TeacherManage} from "@/api/teacher/types";
 import {getTeacherList} from "@/api/teacher";
 import {EquipmentManage, EquipmentParams} from "@/api/equipment/types";
 import {getEquipmentLists} from "@/api/equipment";
+import {trimInput} from "@/utils";
 const userStore = useUserStore();
 defineOptions({
   name: "EquipmentIndex",
@@ -105,7 +106,11 @@ watch(
       <el-select v-model="pageParams.teacher_id" placeholder="请选择使用者名称" size="large">
         <el-option v-for="item in teacherSelect" :key="item.id" :label="item.name" :value="item.id" />
       </el-select>
-      <el-input v-model="pageParams.sn" placeholder="请输入设备编号" size="large" />
+      <el-input
+        v-model="pageParams.sn"
+        placeholder="请输入设备编号"
+        size="large"
+        @input="(value) => (pageParams.sn = trimInput(value))" />
       <el-button size="large" type="primary" @click="getEquipmentSearch()">查找</el-button>
     </div>
     <template v-if="equipmentStatus">

+ 8 - 3
src/views/evaluation/index.vue

@@ -1,11 +1,12 @@
 <script setup lang="ts">
-import { watch } from "vue";
-import { useUserStore } from "@/store/modules/user";
+import {watch} from "vue";
+import {useUserStore} from "@/store/modules/user";
 import EvaluateCard from "@/views/evaluation/components/EvaluateCard.vue";
 import RadarChart from "@/components/Charts/RadarChart.vue";
 import FocusBarChart from "@/components/Charts/FocusBarChart.vue";
 import RelaxBarChart from "@/components/Charts/RelaxBarChart.vue";
 import IndicatorsBarChart from "@/components/Charts/IndicatorsBarChart.vue";
+import {trimInput} from "@/utils";
 
 defineOptions({
   name: "EvaluateIndex",
@@ -65,7 +66,11 @@ const indicatorsData = ref([
       <!-- 学生查找 -->
       <div class="student-search">
         <div class="search">
-          <el-input v-model="studentInfo" placeholder="请输入学生名称或手机号码" size="large" />
+          <el-input
+            v-model="studentInfo"
+            placeholder="请输入学生名称或手机号码"
+            size="large"
+            @input="(value) => (studentInfo = trimInput(value))" />
           <el-button size="large" type="primary">查找</el-button>
         </div>
         <div class="result">

+ 8 - 2
src/views/student/index.vue

@@ -4,7 +4,9 @@ import {watch} from "vue";
 import {useUserStore} from "@/store/modules/user";
 import {getGradeSelect} from "@/api/grade";
 import {getStudentLists} from "@/api/student";
-import {StudentItem, StudentList, StudentParams} from "@/api/student/types";
+import {StudentItem, StudentParams} from "@/api/student/types";
+import {trimInput} from "@/utils";
+
 const userStore = useUserStore();
 defineOptions({
   name: "StudentIndex",
@@ -84,7 +86,11 @@ watch(
       <el-select v-model="studentSearch.grade_id" placeholder="全部班级" size="large">
         <el-option v-for="item in gradeData" :key="item.id" :label="item.name" :value="item.id" />
       </el-select>
-      <el-input v-model="studentSearch.search" placeholder="请输入学生名称或手机号码" size="large" />
+      <el-input
+        v-model="studentSearch.search"
+        placeholder="请输入学生名称或手机号码"
+        size="large"
+        @input="(value) => (studentSearch.search = trimInput(value))" />
       <el-button size="large" type="primary" @click="getStudentSearch()">查找</el-button>
       <span
         >共<b>{{ studentCount }}</b

+ 13 - 8
src/views/teacher/index.vue

@@ -1,9 +1,10 @@
 <script setup lang="ts">
-import { watch } from "vue";
-import { useUserStore } from "@/store/modules/user";
+import {watch} from "vue";
+import {useUserStore} from "@/store/modules/user";
 
-import { getTeacherEquipment, getTeacherGrade, getTeacherManage } from "@/api/teacher";
-import { TeacherItem, TeacherManage } from "@/api/teacher/types";
+import {getTeacherEquipment, getTeacherGrade, getTeacherManage} from "@/api/teacher";
+import {TeacherItem, TeacherManage} from "@/api/teacher/types";
+import {trimInput} from "@/utils";
 
 const userStore = useUserStore();
 defineOptions({
@@ -23,7 +24,7 @@ let searchKeyword = ref("");
 // 获取教师
 async function getTeacherData(schoolId: number, keyword: string) {
   getTeacherManage(schoolId, keyword)
-    .then(({ data }) => {
+    .then(({data}) => {
       const temp: TeacherManage = data;
       teacherData.value = temp.lists;
       teacherCount.value = temp.count;
@@ -38,14 +39,14 @@ async function getTeacherData(schoolId: number, keyword: string) {
 async function getGradeAndEquipment(teacher: TeacherItem) {
   // 获取教师班级
   getTeacherGrade(teacher.id)
-    .then(({ data }) => {
+    .then(({data}) => {
       teacher.grades = data;
       if (teacher.grades && teacher.grades.length > 0) {
         teacher.lines = teacher.grades.length;
       }
       if (!teacher.equipment || Object.keys(teacher.equipment).length == 0) {
         // 获取教师设备
-        getTeacherEquipment(teacher.id).then(({ data }) => {
+        getTeacherEquipment(teacher.id).then(({data}) => {
           teacher.equipment = data;
         });
       }
@@ -82,7 +83,11 @@ watch(
   <div class="teacher-container">
     <!-- 教师查找 -->
     <div class="teacher-search">
-      <el-input v-model="searchKeyword" placeholder="请输入教师名称或手机号码" size="large" />
+      <el-input
+        v-model="searchKeyword"
+        placeholder="请输入教师名称或手机号码"
+        size="large"
+        @input="(value) => (searchKeyword = trimInput(value))" />
       <el-button size="large" type="primary" @click="teacherSearch()">查找</el-button>
       <span
         >共<b>{{ teacherCount }}</b

+ 17 - 12
src/views/training/index.vue

@@ -1,10 +1,11 @@
 <script setup lang="ts">
-import { watch } from "vue";
-import { useUserStore } from "@/store/modules/user";
-import { GradeList } from "@/api/grade/types";
-import { TrainingItem, TrainingParams } from "@/api/training/types";
-import { getGradeSelect } from "@/api/grade";
-import { getTrainingLists } from "@/api/training";
+import {watch} from "vue";
+import {useUserStore} from "@/store/modules/user";
+import {GradeList} from "@/api/grade/types";
+import {TrainingItem, TrainingParams} from "@/api/training/types";
+import {getGradeSelect} from "@/api/grade";
+import {getTrainingLists} from "@/api/training";
+import {trimInput} from "@/utils";
 
 const userStore = useUserStore();
 defineOptions({
@@ -24,13 +25,13 @@ const pageParams: TrainingParams = reactive({
 const gradeData = ref<GradeList[]>();
 async function getGradeData(schoolId: number) {
   getGradeSelect(schoolId)
-    .then(({ data }) => {
+    .then(({data}) => {
       gradeData.value = data;
-      gradeData.value?.unshift({ id: 0, name: "全部班级" });
+      gradeData.value?.unshift({id: 0, name: "全部班级"});
     })
     .catch((error) => {
       gradeData.value = [];
-      gradeData.value?.unshift({ id: 0, name: "全部班级" });
+      gradeData.value?.unshift({id: 0, name: "全部班级"});
       console.log(error);
     });
 }
@@ -39,8 +40,8 @@ const trainingCount = ref(0);
 async function getTrainingData(schoolId: number) {
   pageParams.school_id = schoolId;
   getTrainingLists(pageParams)
-    .then(({ data }) => {
-      const { count, lists } = data;
+    .then(({data}) => {
+      const {count, lists} = data;
       trainingData.value = lists;
       trainingCount.value = count;
     })
@@ -90,7 +91,11 @@ watch(
       <el-select v-model="pageParams.grade_id" placeholder="请选择班级" size="large">
         <el-option v-for="item in gradeData" :key="item.id" :label="item.name" :value="item.id" />
       </el-select>
-      <el-input v-model="pageParams.search" placeholder="请输入学生名称或手机号码" size="large" />
+      <el-input
+        v-model="pageParams.search"
+        placeholder="请输入学生名称或手机号码"
+        size="large"
+        @input="(value) => (pageParams.search = trimInput(value))" />
       <el-button size="large" type="primary" @click="getTrainingSearch()">查找</el-button>
     </div>
     <!-- 学生数据 -->