Просмотр исходного кода

完成学期管理、学科管理接口,权限管理添加管理人员重新修改样式已完成

hzj18279462576@163.com 2 лет назад
Родитель
Сommit
9705c7a6f7

+ 7 - 5
package-lock.json

@@ -265,11 +265,6 @@
         "fastq": "^1.6.0"
       }
     },
-    "@popperjs/core": {
-      "version": "npm:@sxzz/popperjs-es@2.11.7",
-      "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
-      "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
-    },
     "@trysound/sax": {
       "version": "0.2.0",
       "resolved": "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz",
@@ -947,6 +942,13 @@
         "lodash-unified": "^1.0.2",
         "memoize-one": "^6.0.0",
         "normalize-wheel-es": "^1.2.0"
+      },
+      "dependencies": {
+        "@popperjs/core": {
+          "version": "npm:@sxzz/popperjs-es@2.11.7",
+          "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
+          "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
+        }
       }
     },
     "emojis-list": {

+ 3 - 0
src/App.vue

@@ -34,4 +34,7 @@ onBeforeMount(() => {
 #nprogress .bar {
   background-color: rgb(0, 97, 255) !important;
 }
+*{
+user-select:none;
+}
 </style>

+ 3 - 1
src/layout/sidebar/SidevarItem.vue

@@ -63,7 +63,9 @@
               v-if="
                 activeIndex == '/wanzai/class' ||
                 activeIndex == '/wanzai/grades' ||
-                activeIndex == '/wanzai/post'
+                activeIndex == '/wanzai/post' ||
+                activeIndex == '/wanzai/subject' ||
+                activeIndex == '/wanzai/semester' 
               "
               iconName="classGrade_s"
               class="iconClass"

+ 18 - 0
src/router/index.js

@@ -59,6 +59,24 @@ const routes = [
         component: () => import("@/views/post/post.vue"),
       },
       {
+        path: "subject",
+        name: "subject",
+        meta: { isAuth: true, title: "学科管理" },
+        component: () => import("@/views/subject/subject.vue"),
+      },
+      {
+        path: "semester",
+        name: "semester",
+        meta: { isAuth: true, title: "学期管理" },
+        component: () => import("@/views/semester/semester.vue"),
+      },
+      {
+        path: "exam",
+        name: "exam",
+        meta: { isAuth: true, title: "考试类型管理" },
+        component: () => import("@/views/exam/exam.vue"),
+      },
+      {
         path: "apply",
         name: "apply",
         meta: { isAuth: true, title: "应用管理" },

+ 12 - 0
src/store/modules/user.js

@@ -42,9 +42,21 @@ const state = {
           meta: { isAuth: true, title: "年级管理" },
         },
         {
+          name: "subject",
+          meta: { isAuth: true, title: "学科管理" },
+        },
+        {
+          name: "semester",
+          meta: { isAuth: true, title: "学期管理" },
+        },
+        {
           name: "post",
           meta: { isAuth: true, title: "职务管理" },
         },
+        {
+          name: "exam",
+          meta: { isAuth: true, title: "考试类型管理" },
+        },
       ],
     },
     // 授权管理

+ 8 - 3
src/views/apply/apply.vue

@@ -38,7 +38,11 @@
           />
           <el-table-column align="center" prop="name" label="名称" />
           <el-table-column align="center" prop="category" label="类别" />
-          <el-table-column align="center" prop="updateTime" label="创建时间" />
+          <el-table-column align="center" prop="updateTime" label="创建时间">
+            <template #default="{row}">
+              <span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
+            </template>
+          </el-table-column>
           <el-table-column align="center" label="操作" width="200">
             <template #default="scope">
               <div class="edit">
@@ -284,6 +288,7 @@ import { ElMessage, ElMessageBox, genFileId } from "element-plus";
 import { Calendar } from "@element-plus/icons-vue";
 import vidiconsApi from "@/api/vidicons.js";
 import { dayjs } from "element-plus";
+import eds from "@/utils/eds.js";
 import lodash from "lodash";
 import axios from "axios";
 import { useStore } from "vuex";
@@ -400,8 +405,8 @@ const getList = async () => {
   console.log(res, "应用管理分页数据");
   if (res.data.code == 200) {
     loading.value = false;
-    tableData.list = res.data.data.list;
-    total.value = res.data.data.totalCount;
+    tableData.list = JSON.parse(eds.decryptDes(res.data.data)).list;
+    total.value = JSON.parse(eds.decryptDes(res.data.data)).totalCount;
     // ElMessage({
     //   type: "success",
     //   showClose: true,

+ 3 - 2
src/views/caller/caller.vue

@@ -318,6 +318,7 @@ import vidiconsApi from "@/api/vidicons.js";
 import { dayjs } from "element-plus";
 import lodash from "lodash";
 import axios from "axios";
+import eds from "@/utils/eds.js";
 import { useStore } from "vuex";
 const store = useStore();
 const api = ref("");
@@ -446,8 +447,8 @@ const getList = async () => {
   console.log(res, "预约记录");
   if (res.data.code == 200) {
     loading.value = false;
-    tableData.list = res.data.data.list;
-    total.value = res.data.data.totalCount;
+    tableData.list = JSON.parse(eds.decryptDes(res.data.data)).list;
+    total.value = JSON.parse(eds.decryptDes(res.data.data)).totalCount;
     // ElMessage({
     //   type: "success",
     //   showClose: true,

+ 10 - 5
src/views/class/class.vue

@@ -255,6 +255,7 @@ import { useRouter } from "vue-router";
 import { ElMessage, ElMessageBox } from "element-plus";
 import { Calendar } from "@element-plus/icons-vue";
 import vidiconsApi from "@/api/vidicons.js";
+import eds from "@/utils/eds.js";
 import { dayjs } from "element-plus";
 import lodash from "lodash";
 import axios from "axios";
@@ -324,11 +325,11 @@ const getList = async () => {
     },
     params: data,
   });
-  console.log(res, "班级分页数据");
+  console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "班级分页数据");
   if (res.data.code == 200) {
     loading.value = false;
-    tableData.list = res.data.data.list;
-    total.value = res.data.data.totalCount;
+    tableData.list = JSON.parse(eds.decryptDes(res.data.data)).list;
+    total.value = JSON.parse(eds.decryptDes(res.data.data)).totalCount;
     // ElMessage({
     //   type: "success",
     //   showClose: true,
@@ -361,8 +362,12 @@ const applyList = async () => {
     },
     params: data,
   });
-  applyData.value = res.data.data.list;
-  console.log(res, "年级管理分页数据");
+  applyData.value = JSON.parse(eds.decryptDes(res.data.data)).list;
+  console.log(
+    res,
+    JSON.parse(eds.decryptDes(res.data.data)),
+    "年级管理分页数据"
+  );
 };
 
 // 搜索功能

+ 17 - 16
src/views/energy/energy.vue

@@ -264,6 +264,7 @@ import { useRouter } from "vue-router";
 import { ElMessage, ElMessageBox } from "element-plus";
 import { Calendar } from "@element-plus/icons-vue";
 import { dayjs } from "element-plus";
+import eds from "@/utils/eds.js";
 import lodash from "lodash";
 import axios from "axios";
 import { useStore } from "vuex";
@@ -406,14 +407,14 @@ const echarts1 = async () => {
         },
         data: [
           {
-            value: getElcTj.value,
+            value: getElcTj.value, // getElcTj.value
             name: "用电",
             itemStyle: {
               color: "rgba(67, 181, 244, 1)",
             },
           },
           {
-            value: getWaterTj.value,
+            value: getWaterTj.value, // getWaterTj.value
             name: "用水",
             itemStyle: {
               color: "#D4EDFB",
@@ -421,7 +422,7 @@ const echarts1 = async () => {
           },
           {
             // make an record to fill the bottom 50%
-            value: getElcTj.value + getWaterTj.value,
+            value: getElcTj.value + getWaterTj.value, // getElcTj.value + getWaterTj.value
             itemStyle: {
               // stop the chart from rendering this piece
               color: "none",
@@ -453,7 +454,7 @@ const getWaterElc = async () => {
   });
   console.log(res, "用水量");
   if (res.data.code == 200) {
-    getWaterTj.value = res.data.data.num;
+    getWaterTj.value = JSON.parse(eds.decryptDes(res.data.data)).num;
     nextTick(() => {
       echarts1();
     });
@@ -471,8 +472,8 @@ const getWaterElc = async () => {
     data: data,
   });
   console.log(ress, "用电量");
-  if (res.data.code == 200) {
-    getElcTj.value = ress.data.data.num;
+  if (ress.data.code == 200) {
+    getElcTj.value = JSON.parse(eds.decryptDes(ress.data.data)).num;
     // ElMessage({
     //   type: "success",
     //   showClose: true,
@@ -509,19 +510,19 @@ const getMonWaterElc = async () => {
       data: data,
     });
   }
-  console.log(res, "水、电费查询");
+  console.log(res, JSON.parse(eds.decryptDes(res.data.data)),"水、电费查询");
   if (res.data.code == 200) {
-    areaData.value = res.data.data;
+    areaData.value = JSON.parse(eds.decryptDes(res.data.data));
     monthList.value = [];
     monthTypeValue.value = [];
-    let arr = res.data.data[0].lt;
+    let arr = JSON.parse(eds.decryptDes(res.data.data))[0].lt;
     let monthType = [];
     let monthValue = [];
     if (arr) {
       arr.forEach((item, index) => {
         monthType.push(item.name);
         monthValue[index] = [];
-        res.data.data.forEach((i) => {
+        JSON.parse(eds.decryptDes(res.data.data)).forEach((i) => {
           console.log(i);
           if (i.lt.length != 0) {
             monthValue[index].push(i.lt[index].num);
@@ -553,7 +554,7 @@ const getMonWaterElc = async () => {
     }
     console.log(monthTypeValue.value, "整合数据");
 
-    res.data.data.forEach((item) => {
+    JSON.parse(eds.decryptDes(res.data.data)).forEach((item) => {
       monthList.value.push(item.date);
     });
     console.log(monthList.value, "月份");
@@ -707,10 +708,10 @@ const energyDissipation = async () => {
     params: paramsData,
     data: data,
   });
-  console.log(res, "区域能耗统计");
+  console.log(res,JSON.parse(eds.decryptDes(res.data.data)), "区域能耗统计");
   if (res.data.code == 200) {
-    table1Data.list = res.data.data.list;
-    total1.value = res.data.data.total;
+    table1Data.list = JSON.parse(eds.decryptDes(res.data.data)).list;
+    total1.value = JSON.parse(eds.decryptDes(res.data.data)).total;
     // ElMessage({
     //   type: "success",
     //   showClose: true,
@@ -748,8 +749,8 @@ const meterReading = async () => {
   });
   console.log(res, "实时抄表");
   if (res.data.code == 200) {
-    table2Data.list = res.data.data.list;
-    total2.value = res.data.data.total;
+    table2Data.list = JSON.parse(eds.decryptDes(res.data.data)).list;
+    total2.value = JSON.parse(eds.decryptDes(res.data.data)).total;
     // ElMessage({
     //   type: "success",
     //   showClose: true,

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

@@ -0,0 +1,976 @@
+<template>
+  <div class="content-box">
+    <div class="left">
+      <!-- <el-icon :size="23" class="camera"><VideoCameraFilled /></el-icon> -->
+      <span class="cameratxt">考试类型管理</span>
+    </div>
+    <div class="scrollId">
+      <div class="middle">
+        <div class="filter">
+          <div class="condition">
+            <span>考试类型:&nbsp;&nbsp;</span>
+            <el-input
+              :clearable="true"
+              @clear="searchBtn"
+              v-model="searchInput.keyWord"
+              class="w-50 m-2"
+              placeholder="请输入考试类型"
+            />&nbsp;&nbsp;&nbsp;&nbsp;
+            <span>年级:&nbsp;&nbsp;</span>
+            <el-select
+              v-model="searchInput.grades"
+              placeholder="请选择年级"
+              style="width: 200px"
+              :clearable="true"
+              @clear="searchBtn"
+              @change="searchBtn"
+            >
+              <el-option
+                :label="i.name"
+                :value="i.id"
+                v-for="i in gradesData"
+              />
+            </el-select>
+          </div>
+          <!-- <div class="condition">
+            <span>创建时间&nbsp;&nbsp;</span>
+            <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="请选择日期"
+            />
+          </div> -->
+          <el-button
+            color="rgba(0, 97, 255, 1)"
+            type="primary"
+            class="search"
+            @click="searchBtn"
+            ><el-icon>
+              <Search />
+            </el-icon>
+            <span>查询</span></el-button
+          >
+        </div>
+        <!-- 按钮列表 -->
+        <div class="gongneng">
+          <el-button
+            type="primary"
+            color="rgba(0, 97, 255, 1)"
+            @click="addClick"
+            plain
+            >新增类型</el-button
+          >
+          <!-- <el-button type="primary" color="rgba(0, 97, 255, 1)" @click="addlist"
+            ><span>导出</span></el-button
+          > -->
+        </div>
+      </div>
+      <div class="footer" v-loading="loading">
+        <el-table
+          :row-class-name="tableRowClassName"
+          :data="tableData.list"
+          @selection-change="handleSelectionChange"
+          style="width: 100%"
+          :header-cell-style="{
+            background: 'rgba(240, 243, 247, 1)',
+            height: '50px',
+            border: 0,
+          }"
+        >
+          <!-- <el-table-column align="center" type="selection" width="80" /> -->
+          <el-table-column
+            width="150"
+            align="center "
+            type="index"
+            label="序号"
+          />
+          <el-table-column align="center" prop="grade" label="年级" />
+          <el-table-column align="center" prop="name" label="职务" />
+          <el-table-column align="center" prop="createTime" label="创建时间">
+            <template #default="{ row }">
+              <span>{{
+                dayjs(row.createTime).format("YYYY-MM-DD HH:mm:ss")
+              }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" label="操作" width="200">
+            <template #default="scope">
+              <div class="edit">
+                <div class="look" @click="editClick(scope.row)">编辑</div>
+                <el-popconfirm
+                  width="220"
+                  confirm-button-text="确认"
+                  cancel-button-text="取消"
+                  :icon="InfoFilled"
+                  icon-color="#f89626"
+                  title="是否删除此身份?"
+                  @confirm="del(scope.row)"
+                  @cancel="cancelEvent"
+                >
+                  <template #reference>
+                    <div class="del">删除</div>
+                  </template>
+                </el-popconfirm>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+
+      <!-- 分页组件 -->
+      <div class="pageSize">
+        <span></span>
+        <el-pagination
+          background
+          :current-page="currentPage"
+          :page-size="pageSize"
+          layout="total, prev, pager, next, jumper, slot"
+          :total="total"
+          @update:current-page="handleCurrentChange"
+        />
+      </div>
+
+      <!-- 编辑按钮 -->
+      <el-dialog
+        class="editDialog"
+        v-model="editVisible"
+        :close-on-click-modal="false"
+        :close-on-press-escape="false"
+        :title="titleDialog"
+        align-center
+        width="600"
+        :before-close="cancelEdit"
+      >
+        <el-form
+          ref="editRef"
+          :model="editRuleForm"
+          :rules="editRules"
+          label-width="90px"
+          class="demo-ruleForm"
+          :size="formSize"
+          label-position="left"
+          status-icon
+        >
+          <el-form-item label="年级 :" prop="grades">
+            <el-select
+              v-model="editRuleForm.grades"
+              placeholder="请选择年级"
+              style="width: 500px"
+            >
+              <el-option
+                :label="i.name"
+                :value="i.id"
+                v-for="i in gradesData"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="考试类型 :" prop="examType">
+            <el-input
+              v-model="editRuleForm.examType"
+              placeholder="请输入考试类型"
+              clearable
+              style="width: 500px"
+            />
+          </el-form-item>
+          <el-form-item label="是否综评 :" prop="attend">
+            <el-switch
+              v-model="editRuleForm.attend"
+              style="
+                --el-switch-on-color: rgba(41, 109, 227, 1);
+              "
+              active-value="1"
+              inactive-value="0"
+            />
+          </el-form-item>
+
+          <!-- <el-form-item label="用户角色 :" prop="userRoles">
+            <el-select
+              v-model="editRuleForm.userRoles"
+              class="m-2"
+              placeholder="请选择用户角色"
+              style="width: 500px"
+            >
+              <el-option label="清洁工" value="1" />
+              <el-option label="洗碗工" value="2" />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="微校卡号 :" prop="schoolCard">
+            <el-input
+              v-model="editRuleForm.schoolCard"
+              placeholder="请输入微校卡号"
+              clearable
+              style="width: 500px"
+            />
+          </el-form-item>
+          <el-form-item label="身份证号 :" prop="idNumber">
+            <el-input
+              v-model="editRuleForm.idNumber"
+              placeholder="请输入身份证号"
+              style="width: 500px"
+            >
+              <template #append>
+                <div @click="readCard">读卡</div>
+              </template>
+            </el-input>
+          </el-form-item>
+          <el-form-item label="指纹 :" prop="fingerprint">
+            <el-input
+              v-model="editRuleForm.fingerprint"
+              placeholder="请输入指纹"
+              style="width: 500px"
+            >
+              <template #append>
+                <div @click="entering">录入</div>
+              </template>
+            </el-input>
+          </el-form-item> -->
+          <el-form-item class="options">
+            <el-button
+              color="rgba(41, 109, 227, 1)"
+              class="queding"
+              type="primary"
+              @click="confirmEdit(editRef)"
+            >
+              确认
+            </el-button>
+            <el-button @click="cancelEdit(editRef)">取消</el-button>
+          </el-form-item>
+        </el-form>
+      </el-dialog>
+    </div>
+    <div class="bgImg" v-if="bgImg">
+      <el-carousel
+        @click="bgImg = false"
+        ref="bgImgs"
+        indicator-position
+        arrow="always"
+        :autoplay="false"
+        trigger
+      >
+        <el-carousel-item v-for="item in bgImgList" :key="item.id">
+          <img :src="item.url" alt="" />
+        </el-carousel-item>
+      </el-carousel>
+    </div>
+  </div>
+</template>
+
+<script setup>
+import {
+  ref,
+  reactive,
+  watch,
+  nextTick,
+  onBeforeMount,
+  onUnmounted,
+} from "vue";
+import { useRouter } from "vue-router";
+import { ElMessage, ElMessageBox } from "element-plus";
+import { Calendar } from "@element-plus/icons-vue";
+import vidiconsApi from "@/api/vidicons.js";
+import { dayjs } from "element-plus";
+import eds from "@/utils/eds.js";
+import lodash from "lodash";
+import axios from "axios";
+import { useStore } from "vuex";
+const store = useStore();
+const api = ref("");
+const router = useRouter();
+// 表格数据
+const loading = ref(false);
+const tableData = reactive({
+  list: [
+    {
+      userName: "张三",
+      userPhone: 15,
+      teamName: 12,
+    },
+  ],
+});
+const searchInput = reactive({
+  keyWord: "",
+  grades: "",
+}); // 搜索按钮数据
+
+const currentPage = ref(1); // 当前页
+const pageSize = ref(10);
+const total = ref(5); // 当前总数
+
+// 编辑功能
+const titleDialog = ref("");
+const editVisible = ref(false);
+const editRef = ref();
+const editRuleForm = reactive({
+  examType: "", // 考试类型
+  grades: "", // 年级
+  attend:"",// 是否综评
+  id: "",
+});
+const gradesData = ref(); // 年级列表
+
+// 表单验证
+const editRules = reactive({
+  examType: [{ required: true, message: "考试类型不能为空", trigger: "blur" }],
+  grades: [
+    {
+      required: true,
+      message: "年级不能为空",
+      trigger: "blur",
+    },
+  ],
+});
+
+// 身份分页列表
+const getList = async () => {
+  loading.value = true;
+  let data = {
+    currentPage: currentPage.value,
+    pageCount: pageSize.value,
+    name: searchInput.keyWord, // 关键字名称
+    gradeId:searchInput.grades
+  };
+  let res = await axios({
+    method: "get",
+    url: api.value + "/wanzai/api/smartExamtype/queryPageSmartExamtype",
+    headers: {
+      // token: sessionStorage.getItem("token"),
+      // user_head: sessionStorage.getItem("userhead"),
+    },
+    params: data,
+  });
+  console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "职务分页数据");
+  if (res.data.code == 200) {
+    loading.value = false;
+    tableData.list = JSON.parse(eds.decryptDes(res.data.data)).list;
+    total.value = JSON.parse(eds.decryptDes(res.data.data)).totalCount;
+    // ElMessage({
+    //   type: "success",
+    //   showClose: true,
+    //   message: res.data.message,
+    //   center: true,
+    // });
+  } else {
+    loading.value = false;
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.data.message,
+      center: true,
+    });
+  }
+};
+// 获取年级列表
+const gradesList = async () => {
+  let res = await axios({
+    method: "get",
+    url: api.value + "/wanzai/api/smartGrade/querySmartGrades",
+    headers: {
+      // token: sessionStorage.getItem("token"),
+      // user_head: sessionStorage.getItem("userhead"),
+    },
+  });
+  console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "年级列表");
+  gradesData.value = JSON.parse(eds.decryptDes(res.data.data));
+};
+
+// 搜索功能
+const searchBtn = lodash.debounce(async () => {
+  getList();
+}, 300);
+// 添加按钮 (-------------------------------------------)
+const addClick = async () => {
+  titleDialog.value = "新增";
+  editVisible.value = true;
+  editRuleForm.examType = "";
+  editRuleForm.grades = "";
+  editRuleForm.attend = "0";
+  editRuleForm.id = "";
+};
+
+//编辑按钮  (-------------------------------------------)
+const editClick = async (row) => {
+  titleDialog.value = "编辑";
+  editVisible.value = true;
+  console.log(row);
+
+  editRuleForm.examType = row.name;
+  editRuleForm.grades = row.gradeId;
+  editRuleForm.attend = `${row.isExam}`;
+  editRuleForm.id = row.id;
+};
+
+const cancelEdit = () => {
+  editVisible.value = false;
+  editRef.value.resetFields();
+  editRuleForm.examType = "";
+  editRuleForm.grades = "";
+  editRuleForm.attend = "0";
+  editRuleForm.id = "";
+};
+
+// 确定编辑
+const confirmEdit = (formEl) => {
+  if (!formEl) return;
+  formEl.validate(async (valid, fields) => {
+    if (valid) {
+      let data = {
+        name: editRuleForm.examType,
+        gradeId: editRuleForm.grades,
+        isExam: editRuleForm.attend,
+      };
+      let res = "";
+      // 根据id判断是编辑还是添加
+      if (editRuleForm.id) {
+        data.id = editRuleForm.id;
+        res = await axios({
+          method: "post",
+          url: api.value + "/wanzai/api/smartExamtype/updateSmartExamtypeById",
+          headers: {},
+          data: data,
+        });
+      } else {
+        res = await axios({
+          method: "post",
+          url: api.value + "/wanzai/api/smartExamtype/insertSmartExamtype",
+          headers: {},
+          data: data,
+        });
+      }
+      console.log(res, "添加成功");
+      if (res.data.code == 200) {
+        editVisible.value = false;
+        getList();
+        editRef.value.resetFields();
+        ElMessage({
+          type: "success",
+          showClose: true,
+          message: res.data.message,
+          center: true,
+        });
+      } else {
+        ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.data.message,
+          center: true,
+        });
+      }
+    }
+  });
+};
+
+//删除按钮
+const del = async (row) => {
+  let data = {
+    id: row.id,
+  };
+  let res = await axios({
+    method: "get",
+    url: api.value + "/wanzai/api/smartExamtype/deleteSmartExamtypeById",
+    headers: {
+      // token: sessionStorage.getItem("token"),
+      // user_head: sessionStorage.getItem("userhead"),
+    },
+    params: data,
+  });
+  if (res.data.code == 200) {
+    if (tableData.list.length == 1 && currentPage.value != 1) {
+      currentPage.value = currentPage.value - 1;
+    }
+    getList();
+    ElMessage({
+      type: "success",
+      showClose: true,
+      message: res.data.message,
+      center: true,
+    });
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.data.message,
+      center: true,
+    });
+  }
+  // console.log(res);
+};
+
+// 多选框功能
+const handleSelectionChange = (val) => {
+  console.log(val);
+  selectData.list = val;
+};
+//导出功能
+// const importExcel = async () => {
+//   if (searchInput.createTime == null) {
+//     searchInput.createTime = "";
+//   }
+//   let data = new FormData();
+//   data.set("car_number", searchInput.carnumber);
+//   data.set("create_time", searchInput.createTime);
+//   let res = await axios({
+//     method: "post",
+//     url: api.value + "/carBook/cinfotoExcel.action",
+//     headers: {
+//       token: sessionStorage.getItem("token"),
+//     },
+//     data: data,
+//   });
+//   // console.log(res, "导出账号");
+//   if (res.data.code == 200) {
+//     // const elt = document.createElement("a");
+//     // elt.setAttribute(
+//     //   "href",
+//     //   "https://chtech.ncjti.edu.cn/carstop" + res.data.downurl
+//     // );
+//     // elt.setAttribute("download", "file.png");
+//     // elt.style.display = "none";
+//     // document.body.appendChild(elt);
+//     // elt.click();
+//     var downloadPath = "https://chtech.ncjti.edu.cn/carstop" + res.data.downurl;
+//     console.log("获得地址数据:", downloadPath);
+//     var downloadLink = document.createElement("a");
+//     downloadLink.style.display = "none"; // 使其隐藏
+//     downloadLink.href = downloadPath;
+//     downloadLink.download = "";
+//     downloadLink.click();
+//     document.body.appendChild(downloadLink);
+//     document.body.removeChild(downloadLink);
+//     ElMessage({
+//       type: "success",
+//       showClose: true,
+//       message: res.data.message,
+//       center: true,
+//     });
+//   } else {
+//     ElMessage({
+//       type: "error",
+//       showClose: true,
+//       message: res.data.message,
+//       center: true,
+//     });
+//   }
+// };
+// 表格斑马纹颜色修改
+const tableRowClassName = ({ row, rowIndex }) => {
+  if (rowIndex % 2 === 0) {
+    return "even";
+  } else if (rowIndex % 2 !== 0) {
+    return "odd";
+  }
+  return "";
+};
+// 分页
+const handleCurrentChange = (value) => {
+  // console.log(value);
+  currentPage.value = value;
+  getList();
+};
+
+onBeforeMount(async () => {
+  api.value = store.state.user.api;
+  getList();
+  gradesList(); // 考试类型
+});
+onUnmounted(() => {
+  // document.removeEventListener("keyup", Enters);
+});
+</script>
+
+<style scoped lang="scss">
+.content-box {
+  min-width: 600px;
+  width: calc(100vw - 260px);
+  height: calc(100vh - 105px);
+  margin: 20px auto;
+  border-radius: 8px;
+  background-color: #fff;
+  color: #fff;
+  display: flex;
+  flex-direction: column;
+  box-shadow: 0px 3px 10px rgba(0, 97, 255, 0.2);
+
+  .left {
+    // width: calc(100wh - 40px);
+    display: flex;
+    align-items: center;
+
+    margin: 0 30px;
+    border-bottom: 1px solid #ccc;
+    color: rgb(0, 0, 0);
+    font-size: 18px;
+    font-weight: 600;
+
+    span {
+      display: block;
+      height: 60px;
+      line-height: 60px;
+      margin-right: 20px;
+    }
+
+    .is_active {
+      color: rgba(111, 182, 184, 1);
+    }
+  }
+  .scrollId {
+    overflow: auto;
+    height: calc(100% - 61px);
+  }
+  .middle {
+    width: 96%;
+    margin: 0 auto;
+
+    color: #000;
+
+    // border-bottom: 1px solid rgb(231, 231, 231);
+    .filter {
+      display: flex;
+      flex-wrap: wrap;
+      align-items: center;
+      margin: 10px 0 0 0;
+
+      .search {
+        color: #fff;
+      }
+
+      .condition {
+        display: flex;
+        align-items: center;
+        margin: 10px 30px 10px 0;
+
+        :deep(.el-input .el-input__inner) {
+          font-size: 14px;
+        }
+
+        span {
+          margin: 0 10px 0 0;
+        }
+      }
+    }
+
+    .gongneng {
+      margin: 10px 0 20px 0;
+
+      span {
+        color: #fff;
+      }
+      .el-button {
+        margin-right: 10px;
+      }
+    }
+
+    :deep(.cont) {
+      width: 60%;
+      margin: 20px auto;
+    }
+
+    :deep(.download) {
+      display: flex;
+      align-items: center;
+      margin: 10px;
+    }
+
+    :deep(.download span) {
+      font-size: 16px;
+      margin-left: 20px;
+    }
+
+    :deep(.cont .el-button) {
+      margin-left: 60px;
+      margin-bottom: 30px;
+    }
+
+    :deep(.cont .accomplish) {
+      width: 100%;
+      display: flex;
+      justify-content: center;
+    }
+
+    :deep(.cont .accomplish .el-button) {
+      width: 50%;
+      margin: 0;
+    }
+  }
+
+  .footer {
+    width: 96%;
+    height: calc(100% - 210px);
+    margin: 10px auto 30px;
+    min-height: 300px;
+    .el-table--fit {
+      height: 100% !important;
+
+      :deep(.el-table__header-wrapper) {
+        background-color: #000;
+        font-size: 14px;
+
+        tr {
+          // color: #000;
+        }
+      }
+
+      :deep(.el-table__row) {
+        height: 50px;
+        font-size: 14px;
+        // color: #000;
+        &:hover {
+          td {
+            background-color: rgba(223, 236, 254, 1);
+          }
+        }
+      }
+
+      :deep(.el-table__row):nth-child(2n) {
+        .el-table-fixed-column--right {
+          background-color: rgba(240, 243, 247, 1);
+        }
+      }
+
+      :deep(.el-table__row td) {
+        padding: 0;
+        border: 0;
+      }
+
+      .el-button--primary {
+        margin-left: 5px;
+      }
+
+      :deep(.el-table__body .even) {
+        background-color: #fff;
+      }
+
+      :deep(.el-table__body .odd) {
+        background-color: rgba(240, 243, 247, 1);
+      }
+
+      :deep(.edit) {
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        color: rgba(111, 182, 184, 1);
+      }
+
+      :deep(.look) {
+        padding: 0 10px;
+        cursor: pointer;
+        color: rgba(30, 125, 251, 1);
+      }
+
+      .del {
+        padding: 0 10px;
+        color: rgba(212, 48, 48, 1);
+        cursor: pointer;
+      }
+
+      // :deep(.look):hover {
+      //   color: red;
+      // }
+      // :deep(.del):hover {
+      //   color: red;
+      // }
+    }
+  }
+  // 编辑按钮
+  :deep(.editDialog) {
+    //   height: 420px;
+    border-radius: 11px;
+    .el-dialog__header {
+      border-radius: 11px 11px 0 0;
+      background: rgba(237, 241, 245, 1);
+      font-weight: 600;
+      margin: 0;
+      .el-dialog__headerbtn {
+        outline: none;
+      }
+    }
+    .el-dialog__body {
+      padding: 30px 30px 10px 30px;
+      .el-form-item__content {
+        width: 200px;
+        .el-input-group__append {
+          background-color: rgba(222, 234, 252, 1);
+          color: rgba(0, 97, 255, 1);
+          cursor: pointer;
+          user-select: none;
+        }
+      }
+      .options {
+        margin: 50px 20px 20px 0;
+        width: 100%;
+        .el-form-item__content {
+          display: flex;
+          flex-direction: row-reverse;
+        }
+        .queding {
+          color: #fff;
+          margin-left: 15px;
+        }
+      }
+    }
+  }
+
+  // 指纹弹窗
+  :deep(.fingerprint) {
+    width: 611px;
+    height: 486px;
+    border-radius: 11px;
+    .el-dialog__header {
+      border-radius: 11px 11px 0 0;
+      background: rgba(237, 241, 245, 1);
+      font-weight: 600;
+      margin: 0;
+
+      .el-dialog__headerbtn {
+        outline: none;
+      }
+    }
+    .el-dialog__body {
+      padding: 0;
+      .elbody {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        padding: 20px 20px;
+        font-size: 18px;
+        color: #000;
+        border-bottom: 0.5px solid #ccc;
+
+        i {
+          cursor: pointer;
+        }
+      }
+    }
+    .el-dialog__footer {
+      .el-button--primary {
+        background: rgba(41, 109, 227, 1);
+      }
+    }
+  }
+
+  // 身份证读取
+  :deep(.addIdentityCard) {
+    //   height: 420px;
+    border-radius: 11px;
+    .el-dialog__header {
+      border-radius: 11px 11px 0 0;
+      background: rgba(237, 241, 245, 1);
+      font-weight: 600;
+      margin: 0;
+      .el-dialog__headerbtn {
+        outline: none;
+      }
+    }
+    .el-dialog__body {
+      padding: 30px 20px 10px 20px;
+      height: 330px;
+      font-size: 16px;
+      font-weight: 600;
+      color: #000;
+      .el-steps {
+        width: 600px;
+        transform: translateX(90px);
+        margin: 0 0 40px 0;
+      }
+      .title {
+        text-align: center;
+      }
+      .icons {
+        display: flex;
+        justify-content: center;
+        img {
+          width: 70px;
+          margin: 40px 0;
+        }
+        .loading {
+          animation: move 3s linear;
+        }
+        @keyframes move {
+          0% {
+            transform: rotate(0);
+          }
+          100% {
+            transform: rotate(360deg);
+          }
+        }
+      }
+      .retry {
+        text-align: center;
+        span {
+          color: red;
+          padding: 0 8px;
+          cursor: pointer;
+        }
+      }
+    }
+  }
+
+  .pageSize {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    margin: 0 30px;
+
+    span {
+      color: #000;
+    }
+
+    .el-pagination {
+      // width: 1600px;
+      :deep(.el-pagination__total) {
+        color: #000;
+      }
+
+      :deep(.el-pagination__goto) {
+        color: #000;
+      }
+
+      :deep(.el-pagination__classifier) {
+        color: #000;
+      }
+
+      :deep(.el-input__wrapper) {
+        border: 1px solid rgba(0, 0, 0, 1);
+        border-radius: 5px;
+        box-shadow: none;
+      }
+
+      :deep(.el-pager li) {
+        margin: 0 5px;
+        border: 1px solid rgba(0, 0, 0, 1);
+        border-radius: 5px;
+        background-color: transparent;
+      }
+
+      :deep(.el-pager li.is-active) {
+        // background-color: rgba(0, 97, 255, 0.8);
+        border: 1px solid rgba(0, 97, 255, 1);
+        color: rgba(0, 97, 255, 1);
+      }
+
+      :deep(.btn-prev) {
+        margin-right: 5px;
+        border: 1px solid rgba(0, 0, 0, 1);
+        border-radius: 5px;
+        background-color: transparent;
+      }
+
+      :deep(.btn-next) {
+        margin-left: 5px;
+        border: 1px solid rgba(0, 0, 0, 1);
+        border-radius: 5px;
+        background-color: transparent;
+      }
+    }
+  }
+}
+
+.el-input {
+  width: 192px;
+}
+</style>

+ 298 - 108
src/views/grade/grade.vue

@@ -38,7 +38,11 @@
               @change="searchBtn"
               :clearable="true"
             >
-              <el-option :label="i" :value="i" v-for="i in semesterData" />
+              <el-option
+                :label="i.name"
+                :value="i.name"
+                v-for="i in semesterData"
+              />
             </el-select>
           </div>
           <div class="condition">
@@ -83,37 +87,50 @@
           </div>
           <div class="condition">
             <span class="title">学科 : </span>
-            <el-select
-              v-model="searchInput.subject"
-              class="sel"
-              placeholder="请选择学科"
-              style="width: 160px"
-              @change="searchBtn"
-              :clearable="true"
+            <el-tooltip
+              class="box-item"
+              effect="dark"
+              content="请先选择年级"
+              placement="top"
             >
-              <el-option
-                v-for="i in subjectData"
-                :label="i.name"
-                :value="i.name"
-              />
-            </el-select>
+              <el-select
+                v-model="searchInput.subject"
+                class="sel"
+                placeholder="请选择学科"
+                style="width: 160px"
+                @change="searchBtn"
+                :clearable="true"
+              >
+                <el-option
+                  v-for="i in subjectData"
+                  :label="i.name"
+                  :value="i.name"
+                />
+              </el-select>
+            </el-tooltip>
           </div>
           <div class="condition">
             <span class="title">考试类型 : </span>
-            <el-select
-              v-model="searchInput.examType"
-              class="sel"
-              placeholder="请选择考试类型"
-              style="width: 160px"
-              @change="searchBtn"
-              :clearable="true"
+            <el-tooltip
+              class="box-item"
+              effect="dark"
+              content="请先选择年级"
+              placement="top"
             >
-              <el-option
-                v-for="i in examTypeData"
-                :label="i.name"
-                :value="i.name"
-              />
-            </el-select>
+              <el-select
+                v-model="searchInput.examType"
+                class="sel"
+                placeholder="请选择考试类型"
+                style="width: 160px"
+                @change="searchBtn"
+                :clearable="true"
+              >
+                <el-option
+                  v-for="i in examTypeData"
+                  :label="i.name"
+                  :value="i.name"
+                /> </el-select
+            ></el-tooltip>
           </div>
           <div class="condition grade">
             <span class="title">成绩 : </span>
@@ -254,13 +271,45 @@
               placeholder="请选择学期"
               style="width: 400px"
             >
-              <el-option :label="i" :value="i" v-for="i in semesterData" />
+              <el-option
+                :label="i.name"
+                :value="`${i.name}-${i.id}`"
+                v-for="i in semesterData"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="姓名 :" prop="name">
+            <el-select
+              v-model="editRuleForm.name"
+              popper-class="gradeSelect"
+              filterable
+              :remote-method="studentMethod"
+              placeholder="请选择姓名"
+              style="width: 400px"
+              @change="changeName"
+            >
+              <el-option
+                v-for="item in studentData"
+                :label="`${item.name}·${item.id}`"
+                :value="`${item.name}·${item.id}`"
+              >
+                <span style="float: left">{{ item.name }}</span>
+                <span
+                  style="
+                    float: right;
+                    color: var(--el-text-color-secondary);
+                    font-size: 13px;
+                  "
+                  >{{ item.id }}</span
+                >
+              </el-option>
             </el-select>
           </el-form-item>
           <el-form-item label="年级 :" prop="yearClass">
             <el-select
               v-model="editRuleForm.yearClass"
               placeholder="请选择年级"
+              disabled
               style="width: 400px"
               @change="yearClassChange"
             >
@@ -281,6 +330,7 @@
             <el-select
               v-model="editRuleForm.class"
               placeholder="请选择班级"
+              disabled
               style="width: 400px"
             >
               <el-option
@@ -290,33 +340,7 @@
               />
             </el-select>
           </el-form-item>
-          <el-form-item label="姓名 :" prop="name">
-            <el-select
-              v-model="editRuleForm.name"
-              popper-class="gradeSelect"
-              filterable
-              :remote-method="studentMethod"
-              placeholder="请选择姓名"
-              style="width: 400px"
-              @change="changeName"
-            >
-              <el-option
-                v-for="item in studentData"
-                :label="item.name"
-                :value="item.id"
-              >
-                <span style="float: left">{{ item.name }}</span>
-                <span
-                  style="
-                    float: right;
-                    color: var(--el-text-color-secondary);
-                    font-size: 13px;
-                  "
-                  >{{ item.cardNo }}</span
-                >
-              </el-option>
-            </el-select>
-          </el-form-item>
+
           <el-form-item label="学号 :" prop="schoolNum">
             <el-input
               disabled
@@ -332,7 +356,7 @@
               style="width: 400px"
             >
               <el-option
-                v-for="i in subjectData"
+                v-for="i in studentSubDatas"
                 :label="i.name"
                 :value="i.id"
               />
@@ -345,7 +369,7 @@
               style="width: 400px"
             >
               <el-option
-                v-for="i in examTypeData"
+                v-for="i in studentExamTypeDatas"
                 :label="i.name"
                 :value="i.id"
               />
@@ -489,6 +513,7 @@ import { ElMessage, ElMessageBox } from "element-plus";
 import { Calendar } from "@element-plus/icons-vue";
 import vidiconsApi from "@/api/vidicons.js";
 import { dayjs } from "element-plus";
+import eds from "@/utils/eds.js";
 import lodash from "lodash";
 import axios from "axios";
 import { useStore } from "vuex";
@@ -540,7 +565,7 @@ const gradeNumWatch = () => {
         ElMessage({
           type: "warning",
           showClose: true,
-          message: "最低成绩大于最高成绩",
+          message: "最低成绩不能大于最高成绩",
           center: true,
         });
       }
@@ -566,6 +591,8 @@ const studentCurrentPage = ref(1);
 const studentPageSize = ref(10);
 const studentTotalPage = ref(); // 学生分页总共多少页,判断滚动到底是否还要加载
 const studentInput = ref(); // 学生分页下拉框中的搜索字段
+const studentExamTypeDatas = ref(); // 编辑中的考试类型数据
+const studentSubDatas = ref(); // 编辑中的学科数据
 
 // 编辑功能
 const titleDialog = ref("");
@@ -664,11 +691,15 @@ const semesterList = async () => {
     },
     // params: data,
   });
-  console.log(semester, "学期下拉数据");
-  semesterData.value = semester.data.data;
+  console.log(
+    semester,
+    JSON.parse(eds.decryptDes(semester.data.data)),
+    "学期下拉数据"
+  );
+  semesterData.value = JSON.parse(eds.decryptDes(semester.data.data));
 };
 
-// 年级数据下拉、、学科下拉、考试类型下拉
+// 年级数据下拉
 const classDataList = async () => {
   semesterList();
   let grade = await axios({
@@ -680,31 +711,13 @@ const classDataList = async () => {
     },
     // params: data,
   });
-  console.log(grade, "年级下拉数据");
-  gradeData.value = grade.data.data;
+  console.log(
+    grade,
+    JSON.parse(eds.decryptDes(grade.data.data)),
+    "年级下拉数据"
+  );
+  gradeData.value = JSON.parse(eds.decryptDes(grade.data.data));
   // classInfoList()// 班级下拉数据
-  let subject = await axios({
-    method: "get",
-    url: api.value + "/wanzai/api/smartScore/querySubjects",
-    headers: {
-      // token: sessionStorage.getItem("token"),
-      // user_head: sessionStorage.getItem("userhead"),
-    },
-    // params: data,
-  });
-  console.log(subject, "学科下拉数据");
-  subjectData.value = subject.data.data;
-  let examType = await axios({
-    method: "get",
-    url: api.value + "/wanzai/api/smartScore/queryExamTypes",
-    headers: {
-      // token: sessionStorage.getItem("token"),
-      // user_head: sessionStorage.getItem("userhead"),
-    },
-    // params: data,
-  });
-  console.log(examType, "考试类型下拉数据");
-  examTypeData.value = examType.data.data;
 };
 // 改变年级选择
 const yearClassChange = async (value) => {
@@ -727,14 +740,78 @@ const classInfoList = async (value) => {
     },
     params: data,
   });
-  console.log(classs, "班级下拉数据");
-  classsData.value = classs.data.data;
+
+  if (classs.data.code == 200) {
+    console.log(
+      classs,
+      JSON.parse(eds.decryptDes(classs.data.data)),
+      "班级下拉数据"
+    );
+    classsData.value = JSON.parse(eds.decryptDes(classs.data.data));
+  } else {
+    classsData.value = [];
+  }
+};
+// 考试类型数据
+const examTypeList = async (value) => {
+  if (searchInput.grade) {
+    let examType = await axios({
+      method: "get",
+      url: api.value + "/wanzai/api/smartScore/queryExamTypes",
+      headers: {
+        // token: sessionStorage.getItem("token"),
+        // user_head: sessionStorage.getItem("userhead"),
+      },
+      params: {
+        gradeId: value,
+      },
+    });
+    console.log(value);
+
+    console.log(
+      examType,
+      JSON.parse(eds.decryptDes(examType.data.data)),
+      "考试类型下拉数据"
+    );
+    if (examType.data.code == 200) {
+      examTypeData.value = JSON.parse(eds.decryptDes(examType.data.data));
+    }
+  } else {
+    examTypeData.value = [];
+  }
+};
+// 学科数据
+const subjectList = async (value) => {
+  if (searchInput.grade) {
+    let subject = await axios({
+      method: "get",
+      url: api.value + "/wanzai/api/smartScore/querySubjects",
+      headers: {
+        // token: sessionStorage.getItem("token"),
+        // user_head: sessionStorage.getItem("userhead"),
+      },
+      params: {
+        gradeId: value,
+      },
+    });
+    console.log(
+      subject,
+      JSON.parse(eds.decryptDes(subject.data.data)),
+      "学科下拉数据"
+    );
+
+    subjectData.value = JSON.parse(eds.decryptDes(subject.data.data));
+  } else {
+    subjectData.value = [];
+  }
 };
 
 // 获取成绩分页数据 (----------------------------------------------------------------)
 const getList = async () => {
   loading.value = true;
   classInfoList(searchInput.grade.split("-")[1]);
+  examTypeList(searchInput.grade.split("-")[1]);
+  subjectList(searchInput.grade.split("-")[1]);
   let data = {
     currentPage: currentPage.value,
     pageCount: pageSize.value,
@@ -756,11 +833,11 @@ const getList = async () => {
     },
     params: data,
   });
-  console.log(res, "成绩分页数据");
+  console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "成绩分页数据");
   if (res.data.code == 200) {
     loading.value = false;
-    tableData.list = res.data.data.list;
-    total.value = res.data.data.totalCount;
+    tableData.list = JSON.parse(eds.decryptDes(res.data.data)).list;
+    total.value = JSON.parse(eds.decryptDes(res.data.data)).totalCount;
     // ElMessage({
     //   type: "success",
     //   showClose: true,
@@ -793,6 +870,7 @@ const gradeClear = () => {
 const addClick = async () => {
   titleDialog.value = "新增成绩";
   editVisible.value = true;
+  studentCurrentPage.value = 1;
   studentList();
   studentListScroll();
   editRuleForm.semester = "";
@@ -822,9 +900,15 @@ const studentList = async () => {
     },
     params: data,
   });
-  console.log(student, "学生分页数据");
-  studentData.value = student.data.data.list;
-  studentTotalPage.value = student.data.data.totalPage;
+  console.log(
+    student,
+    JSON.parse(eds.decryptDes(student.data.data)),
+    "学生分页数据"
+  );
+  studentData.value = JSON.parse(eds.decryptDes(student.data.data)).list;
+  studentTotalPage.value = JSON.parse(
+    eds.decryptDes(student.data.data)
+  ).totalPage;
 };
 // 联系人下拉框搜索时加载
 const studentMethod = (query) => {
@@ -864,8 +948,15 @@ const studentListScroll = () => {
             },
             params: data,
           });
-          console.log(res, "联系人数据");
-          studentData.value = [...studentData.value, ...res.data.data.list];
+          console.log(
+            res,
+            JSON.parse(eds.decryptDes(res.data.data)),
+            "联系人数据"
+          );
+          studentData.value = [
+            ...studentData.value,
+            ...JSON.parse(eds.decryptDes(res.data.data)).list,
+          ];
         } else {
           console.log("数据全部加载完成");
         }
@@ -878,15 +969,54 @@ const studentListScroll = () => {
 const editClick = async (row) => {
   editVisible.value = true;
   console.log(row, "编辑信息");
-
   titleDialog.value = "编辑成绩";
+  studentCurrentPage.value = 1;
   studentList(); // 学生分页
   studentListScroll(); // 学生分页触底加载更多
   classInfoList(row.gradeId); // 班级下拉
-  editRuleForm.semester = row.semester;
+  // 考试类型
+  let examType = await axios({
+    method: "get",
+    url: api.value + "/wanzai/api/smartScore/queryExamTypes",
+    headers: {
+      // token: sessionStorage.getItem("token"),
+      // user_head: sessionStorage.getItem("userhead"),
+    },
+    params: {
+      gradeId: row.gradeId,
+    },
+  });
+  if (examType.data.code == 200) {
+    studentExamTypeDatas.value = JSON.parse(eds.decryptDes(examType.data.data));
+  } else {
+    studentExamTypeDatas.value = [];
+  }
+  // 学科数据
+  let subject = await axios({
+    method: "get",
+    url: api.value + "/wanzai/api/smartScore/querySubjects",
+    headers: {
+      // token: sessionStorage.getItem("token"),
+      // user_head: sessionStorage.getItem("userhead"),
+    },
+    params: {
+      gradeId: row.gradeId,
+    },
+  });
+  console.log(
+    subject,
+    JSON.parse(eds.decryptDes(subject.data.data)),
+    "学科下拉数据"
+  );
+  if (subject.data.code == 200) {
+    studentSubDatas.value = JSON.parse(eds.decryptDes(subject.data.data));
+  } else {
+    studentSubDatas.value = [];
+  }
+  editRuleForm.semester = `${row.semester}-${row.semesterId}`;
   editRuleForm.yearClass = `${row.grade}-${row.gradeId}`;
   editRuleForm.class = `${row.schoolClass}-${row.schoolClassId}`;
-  editRuleForm.name = row.userId;
+  editRuleForm.name = `${row.name}·${row.userId}`;
   editRuleForm.schoolNum = row.cardNo;
   editRuleForm.subject = row.subject;
   editRuleForm.examType = row.examType;
@@ -899,13 +1029,71 @@ const cancelEdit = () => {
   editRef.value.resetFields();
 };
 // 编辑中选择了姓名学号 默认填写
-const changeName = (value) => {
+const changeName = async (value) => {
   console.log(value);
-  studentData.value.forEach((item) => {
-    if (value == item.id) {
-      editRuleForm.schoolNum = item.cardNo;
-    }
+  editRuleForm.subject = "";
+  editRuleForm.examType = "";
+  editRuleForm.grade = "";
+  let data = { id: value.split("·")[1] };
+  let res = await axios({
+    method: "get",
+    url: api.value + "/wanzai/api/smartUser/queryUserData",
+    headers: {
+      // token: sessionStorage.getItem("token"),
+      // user_head: sessionStorage.getItem("userhead"),
+    },
+    params: data,
+  });
+  if (res.data.code == 200) {
+    console.log(
+      JSON.parse(eds.decryptDes(res.data.data)),
+      "切换id获取学生信息"
+    );
+    let data = JSON.parse(eds.decryptDes(res.data.data));
+    editRuleForm.yearClass = data.grade + "-" + data.gradeId;
+    classInfoList(data.gradeId);
+    editRuleForm.class = data.schoolClass + "-" + data.schoolClassId;
+    editRuleForm.schoolNum = data.cardNo;
+  }
+
+  let examType = await axios({
+    method: "get",
+    url: api.value + "/wanzai/api/smartScore/queryExamTypes",
+    headers: {
+      // token: sessionStorage.getItem("token"),
+      // user_head: sessionStorage.getItem("userhead"),
+    },
+    params: {
+      gradeId: editRuleForm.yearClass.split("-")[1],
+    },
+  });
+  if (examType.data.code == 200) {
+    studentExamTypeDatas.value = JSON.parse(eds.decryptDes(examType.data.data));
+  } else {
+    studentExamTypeDatas.value = [];
+  }
+
+  let subject = await axios({
+    method: "get",
+    url: api.value + "/wanzai/api/smartScore/querySubjects",
+    headers: {
+      // token: sessionStorage.getItem("token"),
+      // user_head: sessionStorage.getItem("userhead"),
+    },
+    params: {
+      gradeId: editRuleForm.yearClass.split("-")[1],
+    },
   });
+  console.log(
+    subject,
+    JSON.parse(eds.decryptDes(subject.data.data)),
+    "学科下拉数据"
+  );
+  if (subject.data.code == 200) {
+    studentSubDatas.value = JSON.parse(eds.decryptDes(subject.data.data));
+  } else {
+    studentSubDatas.value = [];
+  }
 };
 // 确定编辑
 const confirmEdit = (formEl) => {
@@ -914,13 +1102,14 @@ const confirmEdit = (formEl) => {
     if (valid) {
       if (titleDialog.value == "新增成绩") {
         let data = {
-          semester: editRuleForm.semester, //  学期
+          semester: editRuleForm.semester.split("-")[0], //  学期
+          semesterId: editRuleForm.semester.split("-")[1], //  学期id
           grade: editRuleForm.yearClass.split("-")[0], // 年级
           gradeId: editRuleForm.yearClass.split("-")[1], // 年级
           schoolClass: editRuleForm.class.split("-")[0], // 班级
           schoolClassId: editRuleForm.class.split("-")[1], // 班级
           cardNo: editRuleForm.schoolNum, // 学号
-          userId: editRuleForm.name, // 用户ID
+          userId: editRuleForm.name.split("·")[1], // 用户ID
           subjectId: editRuleForm.subject, // 学科ID
           examType: editRuleForm.examType, // 考试类型
           score: editRuleForm.grade, // 成绩
@@ -956,13 +1145,14 @@ const confirmEdit = (formEl) => {
         }
       } else if (titleDialog.value == "编辑成绩") {
         let data = {
-          semester: editRuleForm.semester, //  学期
+          semester: editRuleForm.semester.split("-")[0], //  学期
+          semesterId: editRuleForm.semester.split("-")[1], //  学期id
           grade: editRuleForm.yearClass.split("-")[0], // 年级
           gradeId: editRuleForm.yearClass.split("-")[1], // 年级
           schoolClass: editRuleForm.class.split("-")[0], // 班级
           schoolClassId: editRuleForm.class.split("-")[1], // 班级
           cardNo: editRuleForm.schoolNum, // 学号
-          userId: editRuleForm.name, // 用户ID
+          userId: editRuleForm.name.split("·")[1], // 用户ID
           subjectId: editRuleForm.subject, // 学科ID
           examType: editRuleForm.examType, // 考试类型
           score: editRuleForm.grade, // 成绩
@@ -1138,7 +1328,7 @@ const importTemp = async () => {
   });
   console.log(res, "导出模板");
   if (res.status == 200) {
-    var downloadPath = res.data.data;
+    var downloadPath = JSON.parse(eds.decryptDes(res.data.data));
     window.location.href = downloadPath;
     var downloadLink = document.createElement("a");
     downloadLink.style.display = "none"; // 使其隐藏

Разница между файлами не показана из-за своего большого размера
+ 1783 - 0
src/views/grade/grade_1.vue


+ 63 - 5
src/views/grades/grades.vue

@@ -77,7 +77,18 @@
           />
           <el-table-column align="center" prop="name" label="年级名称" />
           <el-table-column align="center" prop="gradeNo" label="年级序号" />
-          <el-table-column align="center" prop="createTime" label="创建时间" />
+          <el-table-column align="center" prop="gradeNo" label="关联学科">
+            <template #default="{ row }">
+              <span>{{ row.subjectName }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="createTime" label="创建时间">
+            <template #default="{ row }">
+              <span>{{
+                dayjs(row.createTime).format("YYYY-MM-DD HH:mm:ss")
+              }}</span>
+            </template>
+          </el-table-column>
           <el-table-column align="center" label="操作" width="200">
             <template #default="scope">
               <div class="edit">
@@ -164,6 +175,21 @@
               style="width: 500px"
             />
           </el-form-item>
+          <el-form-item label="关联学科 :" prop="useSubject">
+            <el-select
+              v-model="editRuleForm.useSubject"
+              multiple
+              placeholder="请选择关联学科"
+              style="width: 500px"
+            >
+              <el-option
+                v-for="item in useSubjectData"
+                :key="item.id"
+                :label="item.name"
+                :value="`${item.id}`"
+              />
+            </el-select>
+          </el-form-item>
           <!-- <el-form-item label="用户角色 :" prop="userRoles">
             <el-select
               v-model="editRuleForm.userRoles"
@@ -249,6 +275,7 @@ import { useRouter } from "vue-router";
 import { ElMessage, ElMessageBox } from "element-plus";
 import { Calendar } from "@element-plus/icons-vue";
 import vidiconsApi from "@/api/vidicons.js";
+import eds from "@/utils/eds.js";
 import { dayjs } from "element-plus";
 import lodash from "lodash";
 import axios from "axios";
@@ -283,9 +310,10 @@ const editRef = ref();
 const editRuleForm = reactive({
   identity: "", // 年级名称
   apply: "", // 年级序号
+  useSubject: "", // 关联学科
   id: "",
 });
-const applyData = ref(); // 应用管理数据
+const useSubjectData = ref(); // 学科管理数据
 
 // 表单验证
 const editRules = reactive({
@@ -297,6 +325,13 @@ const editRules = reactive({
       trigger: "blur",
     },
   ],
+  useSubject: [
+    {
+      required: true,
+      message: "关联学科不能为空",
+      trigger: "blur",
+    },
+  ],
 });
 
 // 年级分页列表
@@ -316,11 +351,15 @@ const getList = async () => {
     },
     params: data,
   });
-  console.log(res, "年级分页数据");
+  console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "年级分页数据");
   if (res.data.code == 200) {
     loading.value = false;
-    tableData.list = res.data.data.list;
-    total.value = res.data.data.totalCount;
+    let data = JSON.parse(eds.decryptDes(res.data.data));
+    data.list.forEach((item) => {
+      item.subjectName = item.subjectStrs.join("、");
+    });
+    tableData.list = data.list;
+    total.value = data.totalCount;
     // ElMessage({
     //   type: "success",
     //   showClose: true,
@@ -348,6 +387,7 @@ const addClick = async () => {
   editVisible.value = true;
   editRuleForm.identity = "";
   editRuleForm.apply = "";
+  editRuleForm.useSubject = "";
   editRuleForm.id = "";
 };
 
@@ -357,6 +397,7 @@ const editClick = async (row) => {
   editVisible.value = true;
   editRuleForm.identity = row.name;
   editRuleForm.apply = row.gradeNo;
+  editRuleForm.useSubject = row.subjectIds;
   editRuleForm.id = row.id;
 };
 
@@ -376,6 +417,7 @@ const confirmEdit = (formEl) => {
       let data = {
         gradeName: editRuleForm.identity,
         gradeNo: editRuleForm.apply,
+        subjectIds: editRuleForm.useSubject,
       };
       let res = "";
       // 根据id判断是编辑还是添加
@@ -528,6 +570,22 @@ const handleCurrentChange = (value) => {
 
 onBeforeMount(async () => {
   api.value = store.state.user.api;
+  let data = {
+    currentPage: 1,
+    pageCount: 100,
+    // name: searchInput.keyWord, // 关键字名称
+  };
+  let res = await axios({
+    method: "get",
+    url: api.value + "/wanzai/api/smartSubject/queryPageSmartSubject",
+    headers: {
+      // token: sessionStorage.getItem("token"),
+      // user_head: sessionStorage.getItem("userhead"),
+    },
+    params: data,
+  });
+  console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "学科分页数据");
+  useSubjectData.value = JSON.parse(eds.decryptDes(res.data.data)).list;
   getList();
 });
 onUnmounted(() => {

+ 15 - 11
src/views/home/home.vue

@@ -305,6 +305,7 @@ const getList = async () => {
   });
   console.log(res, "加密参数测试");
   console.log(JSON.parse(eds.decryptDes(res.data.data)), "EDS解密");
+  //                import eds from "@/utils/eds.js";
 };
 
 // 用户类别占比(------------------------------)
@@ -323,7 +324,7 @@ const cartogram = async () => {
     },
     // params: data,
   });
-  console.log(res, "用户类别占比");
+  console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "用户类别占比");
   let data = [];
   let color = [
     "rgba(67, 181, 244, 1)",
@@ -331,7 +332,7 @@ const cartogram = async () => {
     "rgba(180, 226, 251, 1)",
     "rgba(212, 237, 251, 1)",
   ];
-  res.data.data.forEach((item, index) => {
+  JSON.parse(eds.decryptDes(res.data.data)).forEach((item, index) => {
     let arr = {
       value: item.num,
       name: item.name,
@@ -349,8 +350,8 @@ const cartogram = async () => {
     },
     // params: data,
   });
-  console.log(ress, "用户总计");
-  personNum.value = ress.data.data.total;
+  console.log(ress, JSON.parse(eds.decryptDes(ress.data.data)), "用户总计");
+  personNum.value = JSON.parse(eds.decryptDes(ress.data.data)).total;
 
   echarts1.value = echarts.init(document.getElementById("annulus"));
   echarts1.value.setOption({
@@ -766,7 +767,7 @@ const behaviorClick = async () => {
     },
     params: data,
   });
-  console.log(res, "行为统计");
+  console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "行为统计");
   let color = [
     "rgba(67, 181, 244, 1)",
     "rgba(137, 207, 245, 1)",
@@ -775,7 +776,7 @@ const behaviorClick = async () => {
     "rgba(171, 249, 255, 1)",
   ];
   let typeData = [];
-  let typeName = res.data.data.forEach((item, index) => {
+  JSON.parse(eds.decryptDes(res.data.data)).forEach((item, index) => {
     let arr = {
       value: item.typeCount,
       name: item.typeName,
@@ -785,7 +786,6 @@ const behaviorClick = async () => {
     };
     typeData.push(arr);
   });
-  let totalCount = res.data.data[0].totalCount;
   echarts4.value = echarts.init(document.getElementById("behavior6"));
   echarts4.value.setOption({
     // title: {
@@ -878,7 +878,7 @@ const classClick = async () => {
       user_head: sessionStorage.getItem("userhead"),
     },
   });
-  console.log(res, "圆环 班级考勤");
+  console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "圆环 班级考勤");
   let colorSel = [
     "rgba(67, 181, 244, 1)",
     "rgba(137, 207, 245, 1)",
@@ -887,7 +887,7 @@ const classClick = async () => {
     "rgba(171, 249, 255, 1)",
   ];
   let data = [];
-  res.data.data.forEach((item, index) => {
+  JSON.parse(eds.decryptDes(res.data.data)).forEach((item, index) => {
     let aug = {
       value: item.proportion,
       name: item.name,
@@ -947,8 +947,12 @@ const greetTeaClick = async () => {
     },
     params: data,
   });
-  console.log(res, "最受欢迎老师TOP6");
-  greetTeaData.value = res.data.data;
+  console.log(
+    res,
+    JSON.parse(eds.decryptDes(res.data.data)),
+    "最受欢迎老师TOP6"
+  );
+  greetTeaData.value = JSON.parse(eds.decryptDes(res.data.data));
 };
 // 9 资源大数据
 const resourceClick = async () => {

+ 15 - 6
src/views/identity/identity.vue

@@ -77,7 +77,11 @@
           />
           <el-table-column align="center" prop="name" label="身份" />
           <el-table-column align="center" prop="id" label="身份id" />
-          <el-table-column align="center" prop="createTime" label="创建时间" />
+          <el-table-column align="center" prop="createTime" label="创建时间">
+            <template #default="{row}">
+              <span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
+            </template>
+          </el-table-column>
           <el-table-column align="center" label="操作" width="200">
             <template #default="scope">
               <div class="edit">
@@ -265,6 +269,7 @@ import { useRouter } from "vue-router";
 import { ElMessage, ElMessageBox } from "element-plus";
 import { Calendar } from "@element-plus/icons-vue";
 import vidiconsApi from "@/api/vidicons.js";
+import eds from "@/utils/eds.js";
 import { dayjs } from "element-plus";
 import lodash from "lodash";
 import axios from "axios";
@@ -332,11 +337,11 @@ const getList = async () => {
     },
     params: data,
   });
-  console.log(res, "身份分页数据");
+  console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "身份分页数据");
   if (res.data.code == 200) {
     loading.value = false;
-    tableData.list = res.data.data.list;
-    total.value = res.data.data.totalCount;
+    tableData.list = JSON.parse(eds.decryptDes(res.data.data)).list;
+    total.value = JSON.parse(eds.decryptDes(res.data.data)).totalCount;
     // ElMessage({
     //   type: "success",
     //   showClose: true,
@@ -369,8 +374,12 @@ const applyList = async () => {
     },
     params: data,
   });
-  applyData.value = res.data.data.list;
-  console.log(res, "应用管理分页数据");
+  applyData.value = JSON.parse(eds.decryptDes(res.data.data)).list;
+  console.log(
+    res,
+    JSON.parse(eds.decryptDes(res.data.data)),
+    "应用管理分页数据"
+  );
 };
 
 // 搜索功能

+ 9 - 8
src/views/info/info.vue

@@ -152,6 +152,7 @@ import { ElMessage, ElMessageBox, genFileId } from "element-plus";
 import { Camera } from "@element-plus/icons-vue";
 import { dayjs } from "element-plus";
 import lodash from "lodash";
+import eds from "@/utils/eds.js";
 import axios from "axios";
 import { useStore } from "vuex";
 const store = useStore();
@@ -204,14 +205,14 @@ const getList = async () => {
   });
   console.log(res, "学校基本信息");
   if (res.data.code == 200) {
-    schoolCode.value = res.data.data.schoolCode;
-    schoolImg.value = res.data.data.schoolBadge;
-    schoolName.value = res.data.data.name;
-    logoImg.value = res.data.data.logoImage;
-    appName.value = res.data.data.officialName;
-    appAppid.value = res.data.data.appid;
-    appOldId.value = res.data.data.originalId;
-    infoId.value = res.data.data.id;
+    schoolCode.value = JSON.parse(eds.decryptDes(res.data.data)).schoolCode;
+    schoolImg.value = JSON.parse(eds.decryptDes(res.data.data)).schoolBadge;
+    schoolName.value = JSON.parse(eds.decryptDes(res.data.data)).name;
+    logoImg.value = JSON.parse(eds.decryptDes(res.data.data)).logoImage;
+    appName.value = JSON.parse(eds.decryptDes(res.data.data)).officialName;
+    appAppid.value = JSON.parse(eds.decryptDes(res.data.data)).appid;
+    appOldId.value = JSON.parse(eds.decryptDes(res.data.data)).originalId;
+    infoId.value = JSON.parse(eds.decryptDes(res.data.data)).id;
   } else {
     // loading.value = false;
     ElMessage({

+ 37 - 23
src/views/log/log.vue

@@ -438,7 +438,13 @@
               prop="logActionCreateTime"
               label="操作时间"
               width="160"
-            />
+            >
+            <template #default="{ row }">
+              <span>{{
+                dayjs(row.logActionCreateTime).format("YYYY-MM-DD HH:mm:ss")
+              }}</span>
+            </template>
+          </el-table-column>
           </el-table>
         </div>
 
@@ -537,29 +543,32 @@
             />
             <el-table-column
               align="center"
-              prop="etaskName"
+              prop="ETaskName"
               label="任务名称"
               width="150"
             />
-            <el-table-column prop="emsg" label="信息" header-align="center" />
+            <el-table-column prop="EMsg" label="信息" header-align="center" />
             <el-table-column
               align="center"
-              prop="enum"
+              prop="ENum"
               label="次数"
               width="88"
             />
             <el-table-column
               align="center"
-              prop="eDateTime"
+              prop="EDateTime"
               label="发生时间"
               width="150"
             />
             <el-table-column
               align="center"
-              prop="eCreateTime"
+              prop="ECreateTime"
               label="创建时间"
               width="150"
-            />
+            ><template #default="{row}">
+              <span>{{ dayjs(row.ECreateTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
+            </template>
+          </el-table-column>
           </el-table>
         </div>
 
@@ -649,9 +658,10 @@ import {
 import { ElMessage, ElMessageBox } from "element-plus";
 // import { Calendar } from "@element-plus/icons-vue";
 // import vidiconsApi from "@/api/vidicons.js";
-// import { dayjs } from "element-plus";
+import { dayjs } from "element-plus";
 import lodash from "lodash";
 import axios from "axios";
+import eds from "@/utils/eds.js";
 import { useStore } from "vuex";
 const store = useStore();
 const api = ref("");
@@ -761,7 +771,7 @@ const debugPage = reactive({
     // console.log(res, "业务日志");
     if (res.data.code == 200) {
       debugPage.taskId = reactive([]);
-      res.data.data.list.forEach((element) => {
+      JSON.parse(eds.decryptDes(res.data.data)).list.forEach((element) => {
         let item = {
           value: element.tkId,
           label: element.tkName,
@@ -799,13 +809,14 @@ const debugPage = reactive({
       },
       params: data,
     });
-    // console.log(res, "业务日志");
+    console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "业务日志");
     if (res.data.code == 200) {
       debugPage.loading = false;
       debugPage.tableData = reactive([]);
-      debugPage.tableTotal = res.data.data.total || 0;
+      debugPage.tableTotal =
+        JSON.parse(eds.decryptDes(res.data.data)).total || 0;
       let i = 1;
-      res.data.data.list.forEach((element) => {
+      JSON.parse(eds.decryptDes(res.data.data)).list.forEach((element) => {
         element.xuhao = (debugPage.currentPage - 1) * debugPage.pageSize + i;
         debugPage.tableData.push(element);
         i++;
@@ -838,7 +849,7 @@ const debugPage = reactive({
     if (res.data.code == 200) {
       debugPage.debugTableData = reactive([]);
       let i = 1;
-      res.data.data.forEach((element) => {
+      JSON.parse(eds.decryptDes(res.data.data)).forEach((element) => {
         element.xuhao = i;
         debugPage.debugTableData.push(element);
         i++;
@@ -996,7 +1007,7 @@ const bPage = reactive({
     if (res.data.code == 200) {
       bPage.actionName = reactive([]);
       let i = 1;
-      res.data.data.list.forEach((element) => {
+      JSON.parse(eds.decryptDes(res.data.data)).list.forEach((element) => {
         let item = {
           value: i,
           label: element,
@@ -1028,7 +1039,7 @@ const bPage = reactive({
     if (res.data.code == 200) {
       bPage.actionPeople = reactive([]);
       let i = 1;
-      res.data.data.list.forEach((element) => {
+      JSON.parse(eds.decryptDes(res.data.data)).list.forEach((element) => {
         let item = {
           value: i,
           label: element,
@@ -1060,7 +1071,7 @@ const bPage = reactive({
     if (res.data.code == 200) {
       bPage.actionModule = reactive([]);
       let i = 1;
-      res.data.data.list.forEach((element) => {
+      JSON.parse(eds.decryptDes(res.data.data)).list.forEach((element) => {
         let item = {
           value: i,
           label: element,
@@ -1093,7 +1104,7 @@ const bPage = reactive({
     if (res.data.code == 200) {
       bPage.actionBusiness = reactive([]);
       let i = 1;
-      res.data.data.list.forEach((element) => {
+      JSON.parse(eds.decryptDes(res.data.data)).list.forEach((element) => {
         let item = {
           value: i,
           label: element,
@@ -1141,9 +1152,10 @@ const bPage = reactive({
     if (res.data.code == 200) {
       bPage.loading = false;
       bPage.tableData = reactive([]);
-      bPage.tableTotal = res.data.data.totalCount || 0;
+      bPage.tableTotal =
+        JSON.parse(eds.decryptDes(res.data.data)).totalCount || 0;
       let i = 1;
-      res.data.data.list.forEach((element) => {
+      JSON.parse(eds.decryptDes(res.data.data)).list.forEach((element) => {
         element.xuhao = (bPage.currentPage - 1) * bPage.pageSize + i;
         bPage.tableData.push(element);
         i++;
@@ -1286,9 +1298,9 @@ const mPage = reactive({
     if (res.data.code == 200) {
       mPage.loading = false;
       mPage.tableData = reactive([]);
-      mPage.tableTotal = res.data.data.total || 0;
+      mPage.tableTotal = JSON.parse(eds.decryptDes(res.data.data)).total || 0;
       let i = 1;
-      res.data.data.list.forEach((element) => {
+      JSON.parse(eds.decryptDes(res.data.data)).list.forEach((element) => {
         element.xuhao = (mPage.currentPage - 1) * mPage.pageSize + i;
         mPage.tableData.push(element);
         i++;
@@ -1321,7 +1333,7 @@ const mPage = reactive({
     });
     if (res.data.code == 200) {
       mPage.selectTaskOptions = reactive([]);
-      res.data.data.list.forEach((element) => {
+      JSON.parse(eds.decryptDes(res.data.data)).list.forEach((element) => {
         mPage.selectTaskOptions.push({
           value: element.tkId,
           label: element.tkName,
@@ -1352,10 +1364,12 @@ const mPage = reactive({
       },
       params: data,
     });
+    console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "获取数据源");
+
     if (res.data.code == 200) {
       mPage.selectDsSourceOptions = reactive([]);
       mPage.selectDsDestinationOptions = reactive([]);
-      res.data.data.list.forEach((element) => {
+      JSON.parse(eds.decryptDes(res.data.data)).list.forEach((element) => {
         mPage.selectDsSourceOptions.push({
           value: element.dsId,
           label: element.dsName,

+ 15 - 6
src/views/post/post.vue

@@ -82,7 +82,11 @@
               <span v-if="scope.row.categoryId == 2">老师</span>
             </template>
           </el-table-column>
-          <el-table-column align="center" prop="createTime" label="创建时间" />
+          <el-table-column align="center" prop="createTime" label="创建时间">
+            <template #default="{row}">
+              <span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
+            </template>
+          </el-table-column>
           <el-table-column align="center" label="操作" width="200">
             <template #default="scope">
               <div class="edit">
@@ -245,6 +249,7 @@ import { ElMessage, ElMessageBox } from "element-plus";
 import { Calendar } from "@element-plus/icons-vue";
 import vidiconsApi from "@/api/vidicons.js";
 import { dayjs } from "element-plus";
+import eds from "@/utils/eds.js";
 import lodash from "lodash";
 import axios from "axios";
 import { useStore } from "vuex";
@@ -311,11 +316,11 @@ const getList = async () => {
     },
     params: data,
   });
-  console.log(res, "职务分页数据");
+  console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "职务分页数据");
   if (res.data.code == 200) {
     loading.value = false;
-    tableData.list = res.data.data.list;
-    total.value = res.data.data.totalCount;
+    tableData.list = JSON.parse(eds.decryptDes(res.data.data)).list;
+    total.value = JSON.parse(eds.decryptDes(res.data.data)).totalCount;
     // ElMessage({
     //   type: "success",
     //   showClose: true,
@@ -348,8 +353,12 @@ const applyList = async () => {
     },
     params: data,
   });
-  applyData.value = res.data.data.list;
-  console.log(res, "应用管理分页数据");
+  console.log(
+    res,
+    JSON.parse(eds.decryptDes(res.data.data)),
+    "应用管理分页数据"
+  );
+  applyData.value = JSON.parse(eds.decryptDes(res.data.data)).list;
 };
 
 // 搜索功能

Разница между файлами не показана из-за своего большого размера
+ 1029 - 760
src/views/roles/roles.vue


Разница между файлами не показана из-за своего большого размера
+ 2586 - 0
src/views/roles/roles1.vue


+ 29 - 11
src/views/safety/safety.vue

@@ -118,7 +118,14 @@
             prop="createTime"
             width="200"
             label="时间"
-          />
+          >
+            <template #default="{ row }">
+              <span>{{
+                dayjs(row.createTime).format("YYYY-MM-DD HH:mm:ss")
+              }}</span>
+            </template>
+            </el-table-column
+          >
           <el-table-column align="center" label="操作" width="200">
             <template #default="scope">
               <div class="edit" v-if="scope.row.statu == 0">
@@ -324,6 +331,7 @@ import { Calendar } from "@element-plus/icons-vue";
 import vidiconsApi from "@/api/vidicons.js";
 import { dayjs } from "element-plus";
 import lodash from "lodash";
+import eds from "@/utils/eds.js";
 import axios from "axios";
 import { useStore } from "vuex";
 const store = useStore();
@@ -412,11 +420,15 @@ const getList = async () => {
     },
     params: data,
   });
-  console.log(res, "预警信息分页数据");
+  console.log(
+    res,
+    JSON.parse(eds.decryptDes(res.data.data)),
+    "预警信息分页数据"
+  );
   if (res.data.code == 200) {
     loading.value = false;
-    tableData.list = res.data.data.list;
-    total.value = res.data.data.totalCount;
+    tableData.list = JSON.parse(eds.decryptDes(res.data.data)).list;
+    total.value = JSON.parse(eds.decryptDes(res.data.data)).totalCount;
     // ElMessage({
     //   type: "success",
     //   showClose: true,
@@ -581,11 +593,13 @@ const pushData = async () => {
     headers: {},
     params: data,
   });
-  console.log(res, "推送人");
+  console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "推送人");
   if (res.data.code == 200) {
-    pushSetDatas.value = res.data.data.list;
-    dataLength.value = res.data.data.totalCount;
-    pushSetPageTotal.value = res.data.data.totalPage;
+    pushSetDatas.value = JSON.parse(eds.decryptDes(res.data.data)).list;
+    dataLength.value = JSON.parse(eds.decryptDes(res.data.data)).totalCount;
+    pushSetPageTotal.value = JSON.parse(
+      eds.decryptDes(res.data.data)
+    ).totalPage;
     // if (pushSetTree.value) {
     //   pushSetTree.value.scrollTop = 0;
     // }
@@ -631,11 +645,15 @@ const pushDataScroll = () => {
               headers: {},
               params: data,
             });
-            console.log(res, "推送人滚动数据");
+            console.log(
+              res,
+              JSON.parse(eds.decryptDes(res.data.data)),
+              "推送人滚动数据"
+            );
             if (res.data.code == 200) {
               pushSetDatas.value = [
                 ...pushSetDatas.value,
-                ...res.data.data.list,
+                ...JSON.parse(eds.decryptDes(res.data.data)).list,
               ];
               nextTick(() => {
                 pushSetTree.value.setCheckedNodes(pushSetLiCount.value);
@@ -666,7 +684,7 @@ const PushedData = async () => {
   });
   console.log(res, "已推送人员");
   if (res.data.code == 200) {
-    pushSetLiCount.value = res.data.data;
+    pushSetLiCount.value = JSON.parse(eds.decryptDes(res.data.data));
     if (pushSetDatas.value && pushSetLiCount.value) {
       nextTick(() => {
         pushSetTree.value.setCheckedNodes(pushSetLiCount.value);

+ 17 - 8
src/views/screenShot/screenShot.vue

@@ -108,7 +108,13 @@
                   align="center"
                   prop="createTime"
                   label="创建时间"
-                />
+                >
+                  <template #default="{ row }">
+                    <span>{{
+                      dayjs(row.createTime).format("YYYY-MM-DD HH:mm:ss")
+                    }}</span>
+                  </template>
+                </el-table-column>
                 <el-table-column align="center" label="操作" width="200">
                   <template #default="scope">
                     <div
@@ -376,6 +382,7 @@ import { Calendar } from "@element-plus/icons-vue";
 import vidiconsApi from "@/api/vidicons.js";
 import { dayjs } from "element-plus";
 import lodash from "lodash";
+import eds from "@/utils/eds.js";
 import axios from "axios";
 import { useStore } from "vuex";
 const store = useStore();
@@ -477,8 +484,8 @@ const getList = async () => {
     console.log(res, "规则");
     if (res.data.code == 200) {
       loading.value = false;
-      ruleData.list = res.data.data.list;
-      totalRule.value = res.data.data.totalCount;
+      ruleData.list = JSON.parse(eds.decryptDes(res.data.data)).list;
+      totalRule.value = JSON.parse(eds.decryptDes(res.data.data)).totalCount;
       // ElMessage({
       //   type: "success",
       //   showClose: true,
@@ -512,8 +519,8 @@ const getList = async () => {
     });
     console.log(res, "截屏记录分页");
     if (res.data.code == 200) {
-      recordData.list = res.data.data.list;
-      totalRecord.value = res.data.data.totalCount;
+      recordData.list = JSON.parse(eds.decryptDes(res.data.data)).list;
+      totalRecord.value = JSON.parse(eds.decryptDes(res.data.data)).totalCount;
       // ElMessage({
       //   type: "success",
       //   showClose: true,
@@ -545,8 +552,10 @@ const getList = async () => {
     });
     console.log(res, "已冻结名单分页");
     if (res.data.code == 200) {
-      freezeListData.list = res.data.data.list;
-      totalFreezeList.value = res.data.data.totalCount;
+      freezeListData.list = JSON.parse(eds.decryptDes(res.data.data)).list;
+      totalFreezeList.value = JSON.parse(
+        eds.decryptDes(res.data.data)
+      ).totalCount;
       // ElMessage({
       //   type: "success",
       //   showClose: true,
@@ -640,7 +649,7 @@ const getRules = async () => {
   });
   console.log(res, "规则列表");
   if (res.data.code == 200) {
-    ruleList.value = res.data.data;
+    ruleList.value = JSON.parse(eds.decryptDes(res.data.data));
   } else {
     loading.value = false;
     ElMessage({

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

@@ -0,0 +1,917 @@
+<template>
+  <div class="content-box">
+    <div class="left">
+      <!-- <el-icon :size="23" class="camera"><VideoCameraFilled /></el-icon> -->
+      <span class="cameratxt">学期管理</span>
+    </div>
+    <div class="scrollId">
+      <div class="middle">
+        <div class="filter">
+          <div class="condition">
+            <span>学期名称:&nbsp;&nbsp;</span>
+            <el-input
+              :clearable="true"
+              @clear="searchBtn"
+              v-model="searchInput.keyWord"
+              class="w-50 m-2"
+              placeholder="请输入学期名称"
+            />
+          </div>
+          <!-- <div class="condition">
+            <span>创建时间&nbsp;&nbsp;</span>
+            <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="请选择日期"
+            />
+          </div> -->
+          <el-button
+            color="rgba(0, 97, 255, 1)"
+            type="primary"
+            class="search"
+            @click="searchBtn"
+            ><el-icon>
+              <Search />
+            </el-icon>
+            <span>查询</span></el-button
+          >
+        </div>
+        <!-- 按钮列表 -->
+        <div class="gongneng">
+          <el-button
+            type="primary"
+            color="rgba(0, 97, 255, 1)"
+            @click="addClick"
+            plain
+            >新增学期</el-button
+          >
+          <!-- <el-button type="primary" color="rgba(0, 97, 255, 1)" @click="addlist"
+            ><span>导出</span></el-button
+          > -->
+        </div>
+      </div>
+      <div class="footer" v-loading="loading">
+        <el-table
+          :row-class-name="tableRowClassName"
+          :data="tableData.list"
+          @selection-change="handleSelectionChange"
+          style="width: 100%"
+          :header-cell-style="{
+            background: 'rgba(240, 243, 247, 1)',
+            height: '50px',
+            border: 0,
+          }"
+        >
+          <!-- <el-table-column align="center" type="selection" width="80" /> -->
+          <el-table-column
+            width="150"
+            align="center "
+            type="index"
+            label="序号"
+          />
+          <el-table-column align="center" prop="name" label="学期名称" />
+          <el-table-column align="center" prop="categoryId" label="时间段">
+            <template #default="{row}">
+              <span>{{ dayjs(row.startTime).format('YYYY-MM-DD') }}&nbsp; ~ &nbsp;{{ dayjs(row.endTime).format('YYYY-MM-DD') }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="createTime" label="创建时间">
+            <template #default="{row}">
+              <span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" label="操作" width="200">
+            <template #default="scope">
+              <div class="edit">
+                <div class="look" @click="editClick(scope.row)">编辑</div>
+                <el-popconfirm
+                  width="220"
+                  confirm-button-text="确认"
+                  cancel-button-text="取消"
+                  :icon="InfoFilled"
+                  icon-color="#f89626"
+                  title="是否删除此学期?"
+                  @confirm="del(scope.row)"
+                  @cancel="cancelEvent"
+                >
+                  <template #reference>
+                    <div class="del">删除</div>
+                  </template>
+                </el-popconfirm>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+
+      <!-- 分页组件 -->
+      <div class="pageSize">
+        <span></span>
+        <el-pagination
+          background
+          :current-page="currentPage"
+          :page-size="pageSize"
+          layout="total, prev, pager, next, jumper, slot"
+          :total="total"
+          @update:current-page="handleCurrentChange"
+        />
+      </div>
+
+      <!-- 编辑按钮 -->
+      <el-dialog
+        class="editDialog"
+        v-model="editVisible"
+        :close-on-click-modal="false"
+        :close-on-press-escape="false"
+        :title="titleDialog"
+        align-center
+        width="600"
+        :before-close="cancelEdit"
+      >
+        <el-form
+          ref="editRef"
+          :model="editRuleForm"
+          :rules="editRules"
+          label-width="90px"
+          class="demo-ruleForm"
+          :size="formSize"
+          label-position="left"
+          status-icon
+        >
+          <el-form-item label="学期 :" prop="identity">
+            <el-input
+              v-model="editRuleForm.identity"
+              placeholder="请输入学期名称"
+              clearable
+              style="width: 500px"
+            />
+          </el-form-item>
+          <el-form-item label="时间段 :" prop="time">
+            <el-date-picker
+              v-model="editRuleForm.time"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              :size="size"
+            />
+          </el-form-item>
+          <el-form-item class="options">
+            <el-button
+              color="rgba(41, 109, 227, 1)"
+              class="queding"
+              type="primary"
+              @click="confirmEdit(editRef)"
+            >
+              确认
+            </el-button>
+            <el-button @click="cancelEdit(editRef)">取消</el-button>
+          </el-form-item>
+        </el-form>
+      </el-dialog>
+    </div>
+    <div class="bgImg" v-if="bgImg">
+      <el-carousel
+        @click="bgImg = false"
+        ref="bgImgs"
+        indicator-position
+        arrow="always"
+        :autoplay="false"
+        trigger
+      >
+        <el-carousel-item v-for="item in bgImgList" :key="item.id">
+          <img :src="item.url" alt="" />
+        </el-carousel-item>
+      </el-carousel>
+    </div>
+  </div>
+</template>
+
+<script setup>
+import {
+  ref,
+  reactive,
+  watch,
+  nextTick,
+  onBeforeMount,
+  onUnmounted,
+} from "vue";
+import { useRouter } from "vue-router";
+import { ElMessage, ElMessageBox } from "element-plus";
+import { Calendar } from "@element-plus/icons-vue";
+import vidiconsApi from "@/api/vidicons.js";
+import { dayjs } from "element-plus";
+import eds from "@/utils/eds.js";
+import lodash from "lodash";
+import axios from "axios";
+import { useStore } from "vuex";
+const store = useStore();
+const api = ref("");
+const router = useRouter();
+// 表格数据
+const loading = ref(false);
+const tableData = reactive({
+  list: [
+    {
+      userName: "张三",
+      userPhone: 15,
+      teamName: 12,
+    },
+  ],
+});
+const searchInput = reactive({
+  keyWord: "",
+  createTime: "",
+}); // 搜索按钮数据
+
+const currentPage = ref(1); // 当前页
+const pageSize = ref(10);
+const total = ref(5); // 当前总数
+
+// 编辑功能
+const titleDialog = ref("");
+const editVisible = ref(false);
+const editRef = ref();
+const editRuleForm = reactive({
+  identity: "", // 学期
+  time: "", // 时间段
+  id: "",
+});
+const applyData = ref(); // 应用管理数据
+
+// 表单验证
+const editRules = reactive({
+  identity: [{ required: true, message: "职务不能为空", trigger: "blur" }],
+  time: [
+    {
+      required: true,
+      message: "时间段不能为空",
+      trigger: "blur",
+    },
+  ],
+});
+
+// 学期分页列表
+const getList = async () => {
+  loading.value = true;
+  let data = {
+    currentPage: currentPage.value,
+    pageCount: pageSize.value,
+    name: searchInput.keyWord, // 关键字名称
+  };
+  let res = await axios({
+    method: "get",
+    url: api.value + "/wanzai/api/smartSemester/queryPageSmartSemester",
+    headers: {
+      // token: sessionStorage.getItem("token"),
+      // user_head: sessionStorage.getItem("userhead"),
+    },
+    params: data,
+  });
+  console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "学期分页数据");
+  if (res.data.code == 200) {
+    loading.value = false;
+    tableData.list = JSON.parse(eds.decryptDes(res.data.data)).list;
+    total.value = JSON.parse(eds.decryptDes(res.data.data)).totalCount;
+    // ElMessage({
+    //   type: "success",
+    //   showClose: true,
+    //   message: res.data.message,
+    //   center: true,
+    // });
+  } else {
+    loading.value = false;
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.data.message,
+      center: true,
+    });
+  }
+};
+// 获取应用列表
+const applyList = async () => {
+  let data = {
+    currentPage: 1,
+    pageCount: 100,
+    // managerId: sessionStorage.getItem("token"),
+  };
+  let res = await axios({
+    method: "get",
+    url: api.value + "/wanzai/api/smartApply/queryPageSmartApply",
+    headers: {
+      // token: sessionStorage.getItem("token"),
+      // user_head: sessionStorage.getItem("userhead"),
+    },
+    params: data,
+  });
+  console.log(
+    res,
+    JSON.parse(eds.decryptDes(res.data.data)),
+    "应用管理分页数据"
+  );
+  applyData.value = JSON.parse(eds.decryptDes(res.data.data)).list;
+};
+
+// 搜索功能
+const searchBtn = lodash.debounce(async () => {
+  getList();
+}, 300);
+// 添加按钮 (-------------------------------------------)
+const addClick = async () => {
+  titleDialog.value = "新增";
+  editVisible.value = true;
+  editRuleForm.identity = "";
+  editRuleForm.time = "";
+  editRuleForm.id = "";
+};
+
+//编辑按钮  (-------------------------------------------)
+const editClick = async (row) => {
+  titleDialog.value = "编辑";
+  editVisible.value = true;
+  console.log(row);
+
+  editRuleForm.identity = row.name;
+  editRuleForm.time = [dayjs(row.startTime).format('YYYY-MM-DD'),dayjs(row.endTime).format('YYYY-MM-DD')];
+  editRuleForm.id = row.id;
+  console.log(editRuleForm.time);
+  
+};
+
+const cancelEdit = () => {
+  editVisible.value = false;
+  editRef.value.resetFields();
+  editRuleForm.identity = "";
+  editRuleForm.time = "";
+  editRuleForm.id = "";
+};
+
+// 确定编辑
+const confirmEdit = (formEl) => {
+  if (!formEl) return;
+  formEl.validate(async (valid, fields) => {
+    if (valid) {
+      let data = {
+        name: editRuleForm.identity,
+        startTime: editRuleForm.time[0],
+        endTime: editRuleForm.time[1],
+      };
+      let res = "";
+      // 根据id判断是编辑还是添加
+      if (editRuleForm.id) {
+        data.id = editRuleForm.id;
+        res = await axios({
+          method: "post",
+          url: api.value + "/wanzai/api/smartSemester/updateSmartSemesterById",
+          headers: {},
+          data: data,
+        });
+      } else {
+        res = await axios({
+          method: "post",
+          url: api.value + "/wanzai/api/smartSemester/insertSmartSemester",
+          headers: {},
+          data: data,
+        });
+      }
+      console.log(res, "添加成功");
+      if (res.data.code == 200) {
+        editVisible.value = false;
+        getList();
+        editRef.value.resetFields();
+        ElMessage({
+          type: "success",
+          showClose: true,
+          message: res.data.message,
+          center: true,
+        });
+      } else {
+        ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.data.message,
+          center: true,
+        });
+      }
+    }
+  });
+};
+
+//删除按钮
+const del = async (row) => {
+  let data = {
+    id: row.id,
+  };
+  let res = await axios({
+    method: "get",
+    url: api.value + "/wanzai/api/smartSemester/deleteSmartSemesterById",
+    headers: {
+      // token: sessionStorage.getItem("token"),
+      // user_head: sessionStorage.getItem("userhead"),
+    },
+    params: data,
+  });
+  if (res.data.code == 200) {
+    if (tableData.list.length == 1 && currentPage.value != 1) {
+      currentPage.value = currentPage.value - 1;
+    }
+    getList();
+    ElMessage({
+      type: "success",
+      showClose: true,
+      message: res.data.message,
+      center: true,
+    });
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.data.message,
+      center: true,
+    });
+  }
+  // console.log(res);
+};
+
+// 多选框功能
+const handleSelectionChange = (val) => {
+  console.log(val);
+  selectData.list = val;
+};
+//导出功能
+// const importExcel = async () => {
+//   if (searchInput.createTime == null) {
+//     searchInput.createTime = "";
+//   }
+//   let data = new FormData();
+//   data.set("car_number", searchInput.carnumber);
+//   data.set("create_time", searchInput.createTime);
+//   let res = await axios({
+//     method: "post",
+//     url: api.value + "/carBook/cinfotoExcel.action",
+//     headers: {
+//       token: sessionStorage.getItem("token"),
+//     },
+//     data: data,
+//   });
+//   // console.log(res, "导出账号");
+//   if (res.data.code == 200) {
+//     // const elt = document.createElement("a");
+//     // elt.setAttribute(
+//     //   "href",
+//     //   "https://chtech.ncjti.edu.cn/carstop" + res.data.downurl
+//     // );
+//     // elt.setAttribute("download", "file.png");
+//     // elt.style.display = "none";
+//     // document.body.appendChild(elt);
+//     // elt.click();
+//     var downloadPath = "https://chtech.ncjti.edu.cn/carstop" + res.data.downurl;
+//     console.log("获得地址数据:", downloadPath);
+//     var downloadLink = document.createElement("a");
+//     downloadLink.style.display = "none"; // 使其隐藏
+//     downloadLink.href = downloadPath;
+//     downloadLink.download = "";
+//     downloadLink.click();
+//     document.body.appendChild(downloadLink);
+//     document.body.removeChild(downloadLink);
+//     ElMessage({
+//       type: "success",
+//       showClose: true,
+//       message: res.data.message,
+//       center: true,
+//     });
+//   } else {
+//     ElMessage({
+//       type: "error",
+//       showClose: true,
+//       message: res.data.message,
+//       center: true,
+//     });
+//   }
+// };
+// 表格斑马纹颜色修改
+const tableRowClassName = ({ row, rowIndex }) => {
+  if (rowIndex % 2 === 0) {
+    return "even";
+  } else if (rowIndex % 2 !== 0) {
+    return "odd";
+  }
+  return "";
+};
+// 分页
+const handleCurrentChange = (value) => {
+  // console.log(value);
+  currentPage.value = value;
+  getList();
+};
+
+onBeforeMount(async () => {
+  api.value = store.state.user.api;
+  getList();
+  // applyList(); // 应用列表
+});
+onUnmounted(() => {
+  // document.removeEventListener("keyup", Enters);
+});
+</script>
+
+<style scoped lang="scss">
+.content-box {
+  min-width: 600px;
+  width: calc(100vw - 260px);
+  height: calc(100vh - 105px);
+  margin: 20px auto;
+  border-radius: 8px;
+  background-color: #fff;
+  color: #fff;
+  display: flex;
+  flex-direction: column;
+  box-shadow: 0px 3px 10px rgba(0, 97, 255, 0.2);
+
+  .left {
+    // width: calc(100wh - 40px);
+    display: flex;
+    align-items: center;
+
+    margin: 0 30px;
+    border-bottom: 1px solid #ccc;
+    color: rgb(0, 0, 0);
+    font-size: 18px;
+    font-weight: 600;
+
+    span {
+      display: block;
+      height: 60px;
+      line-height: 60px;
+      margin-right: 20px;
+    }
+
+    .is_active {
+      color: rgba(111, 182, 184, 1);
+    }
+  }
+  .scrollId {
+    overflow: auto;
+    height: calc(100% - 61px);
+  }
+  .middle {
+    width: 96%;
+    margin: 0 auto;
+
+    color: #000;
+
+    // border-bottom: 1px solid rgb(231, 231, 231);
+    .filter {
+      display: flex;
+      flex-wrap: wrap;
+      align-items: center;
+      margin: 10px 0 0 0;
+
+      .search {
+        color: #fff;
+      }
+
+      .condition {
+        display: flex;
+        align-items: center;
+        margin: 10px 30px 10px 0;
+
+        :deep(.el-input .el-input__inner) {
+          font-size: 14px;
+        }
+
+        span {
+          margin: 0 10px 0 0;
+        }
+      }
+    }
+
+    .gongneng {
+      margin: 10px 0 20px 0;
+
+      span {
+        color: #fff;
+      }
+      .el-button {
+        margin-right: 10px;
+      }
+    }
+
+    :deep(.cont) {
+      width: 60%;
+      margin: 20px auto;
+    }
+
+    :deep(.download) {
+      display: flex;
+      align-items: center;
+      margin: 10px;
+    }
+
+    :deep(.download span) {
+      font-size: 16px;
+      margin-left: 20px;
+    }
+
+    :deep(.cont .el-button) {
+      margin-left: 60px;
+      margin-bottom: 30px;
+    }
+
+    :deep(.cont .accomplish) {
+      width: 100%;
+      display: flex;
+      justify-content: center;
+    }
+
+    :deep(.cont .accomplish .el-button) {
+      width: 50%;
+      margin: 0;
+    }
+  }
+
+  .footer {
+    width: 96%;
+    height: calc(100% - 210px);
+    margin: 10px auto 30px;
+    min-height: 300px;
+    .el-table--fit {
+      height: 100% !important;
+
+      :deep(.el-table__header-wrapper) {
+        background-color: #000;
+        font-size: 14px;
+
+        tr {
+          // color: #000;
+        }
+      }
+
+      :deep(.el-table__row) {
+        height: 50px;
+        font-size: 14px;
+        // color: #000;
+        &:hover {
+          td {
+            background-color: rgba(223, 236, 254, 1);
+          }
+        }
+      }
+
+      :deep(.el-table__row):nth-child(2n) {
+        .el-table-fixed-column--right {
+          background-color: rgba(240, 243, 247, 1);
+        }
+      }
+
+      :deep(.el-table__row td) {
+        padding: 0;
+        border: 0;
+      }
+
+      .el-button--primary {
+        margin-left: 5px;
+      }
+
+      :deep(.el-table__body .even) {
+        background-color: #fff;
+      }
+
+      :deep(.el-table__body .odd) {
+        background-color: rgba(240, 243, 247, 1);
+      }
+
+      :deep(.edit) {
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        color: rgba(111, 182, 184, 1);
+      }
+
+      :deep(.look) {
+        padding: 0 10px;
+        cursor: pointer;
+        color: rgba(30, 125, 251, 1);
+      }
+
+      .del {
+        padding: 0 10px;
+        color: rgba(212, 48, 48, 1);
+        cursor: pointer;
+      }
+
+      // :deep(.look):hover {
+      //   color: red;
+      // }
+      // :deep(.del):hover {
+      //   color: red;
+      // }
+    }
+  }
+  // 编辑按钮
+  :deep(.editDialog) {
+    //   height: 420px;
+    border-radius: 11px;
+    .el-dialog__header {
+      border-radius: 11px 11px 0 0;
+      background: rgba(237, 241, 245, 1);
+      font-weight: 600;
+      margin: 0;
+      .el-dialog__headerbtn {
+        outline: none;
+      }
+    }
+    .el-dialog__body {
+      padding: 30px 30px 10px 30px;
+      .el-form-item__content {
+        width: 200px;
+        .el-input-group__append {
+          background-color: rgba(222, 234, 252, 1);
+          color: rgba(0, 97, 255, 1);
+          cursor: pointer;
+          user-select: none;
+        }
+      }
+      .options {
+        margin: 50px 20px 20px 0;
+        width: 100%;
+        .el-form-item__content {
+          display: flex;
+          flex-direction: row-reverse;
+        }
+        .queding {
+          color: #fff;
+          margin-left: 15px;
+        }
+      }
+    }
+  }
+
+  // 指纹弹窗
+  :deep(.fingerprint) {
+    width: 611px;
+    height: 486px;
+    border-radius: 11px;
+    .el-dialog__header {
+      border-radius: 11px 11px 0 0;
+      background: rgba(237, 241, 245, 1);
+      font-weight: 600;
+      margin: 0;
+
+      .el-dialog__headerbtn {
+        outline: none;
+      }
+    }
+    .el-dialog__body {
+      padding: 0;
+      .elbody {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        padding: 20px 20px;
+        font-size: 18px;
+        color: #000;
+        border-bottom: 0.5px solid #ccc;
+
+        i {
+          cursor: pointer;
+        }
+      }
+    }
+    .el-dialog__footer {
+      .el-button--primary {
+        background: rgba(41, 109, 227, 1);
+      }
+    }
+  }
+
+  // 身份证读取
+  :deep(.addIdentityCard) {
+    //   height: 420px;
+    border-radius: 11px;
+    .el-dialog__header {
+      border-radius: 11px 11px 0 0;
+      background: rgba(237, 241, 245, 1);
+      font-weight: 600;
+      margin: 0;
+      .el-dialog__headerbtn {
+        outline: none;
+      }
+    }
+    .el-dialog__body {
+      padding: 30px 20px 10px 20px;
+      height: 330px;
+      font-size: 16px;
+      font-weight: 600;
+      color: #000;
+      .el-steps {
+        width: 600px;
+        transform: translateX(90px);
+        margin: 0 0 40px 0;
+      }
+      .title {
+        text-align: center;
+      }
+      .icons {
+        display: flex;
+        justify-content: center;
+        img {
+          width: 70px;
+          margin: 40px 0;
+        }
+        .loading {
+          animation: move 3s linear;
+        }
+        @keyframes move {
+          0% {
+            transform: rotate(0);
+          }
+          100% {
+            transform: rotate(360deg);
+          }
+        }
+      }
+      .retry {
+        text-align: center;
+        span {
+          color: red;
+          padding: 0 8px;
+          cursor: pointer;
+        }
+      }
+    }
+  }
+
+  .pageSize {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    margin: 0 30px;
+
+    span {
+      color: #000;
+    }
+
+    .el-pagination {
+      // width: 1600px;
+      :deep(.el-pagination__total) {
+        color: #000;
+      }
+
+      :deep(.el-pagination__goto) {
+        color: #000;
+      }
+
+      :deep(.el-pagination__classifier) {
+        color: #000;
+      }
+
+      :deep(.el-input__wrapper) {
+        border: 1px solid rgba(0, 0, 0, 1);
+        border-radius: 5px;
+        box-shadow: none;
+      }
+
+      :deep(.el-pager li) {
+        margin: 0 5px;
+        border: 1px solid rgba(0, 0, 0, 1);
+        border-radius: 5px;
+        background-color: transparent;
+      }
+
+      :deep(.el-pager li.is-active) {
+        // background-color: rgba(0, 97, 255, 0.8);
+        border: 1px solid rgba(0, 97, 255, 1);
+        color: rgba(0, 97, 255, 1);
+      }
+
+      :deep(.btn-prev) {
+        margin-right: 5px;
+        border: 1px solid rgba(0, 0, 0, 1);
+        border-radius: 5px;
+        background-color: transparent;
+      }
+
+      :deep(.btn-next) {
+        margin-left: 5px;
+        border: 1px solid rgba(0, 0, 0, 1);
+        border-radius: 5px;
+        background-color: transparent;
+      }
+    }
+  }
+}
+
+.el-input {
+  width: 192px;
+}
+</style>

+ 30 - 9
src/views/source/source.vue

@@ -115,13 +115,18 @@
             label="创建时间"
             width="150"
           >
+          <template #default="{row}">
+              <span>{{ dayjs(row.dsCreateTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
+            </template>
           </el-table-column>
           <el-table-column
             align="center"
             prop="dsUpdateTime"
             label="修改时间"
             width="150"
-          >
+          ><template #default="{row}">
+              <span>{{ dayjs(row.dsUpdateTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
+            </template>
           </el-table-column>
           <el-table-column align="center" label="操作" width="120">
             <template #default="scope">
@@ -367,13 +372,26 @@
               width="180"
               label="创建时间"
               align="center"
-            />
+            >
+            <template #default="{ row }">
+              <span>{{
+                dayjs(row.dsClsCreateTime).format("YYYY-MM-DD HH:mm:ss")
+              }}</span>
+            </template>
+          </el-table-column>
+            
             <el-table-column
               prop="dsClsUpdateTime"
               width="180"
               label="修改时间"
               align="center"
-            />
+            >
+            <template #default="{ row }">
+              <span>{{
+                dayjs(row.dsClsUpdateTime).format("YYYY-MM-DD HH:mm:ss")
+              }}</span>
+            </template>
+          </el-table-column>
             <el-table-column align="center" width="120" label="操作">
               <template #default="scope">
                 <div style="display: flex">
@@ -479,9 +497,10 @@ import {
 } from "vue";
 // import { useRouter } from "vue-router";
 import { ElMessage } from "element-plus";
+import eds from "@/utils/eds.js";
 // import { Calendar } from "@element-plus/icons-vue";
 // import vidiconsApi from "@/api/vidicons.js";
-// import { dayjs } from "element-plus";
+import { dayjs } from "element-plus";
 import lodash from "lodash";
 import axios from "axios";
 import { useStore } from "vuex";
@@ -674,8 +693,10 @@ const managerDSClass = async () => {
   // console.log(res, "数据源类别");
   if (res.data.code == 200) {
     dsClassLoading.value = false;
-    dsClassTableData.list = res.data.data.list;
-    dsClassTableTotal.value = res.data.data.totalCount;
+    dsClassTableData.list = JSON.parse(eds.decryptDes(res.data.data)).list;
+    dsClassTableTotal.value = JSON.parse(
+      eds.decryptDes(res.data.data)
+    ).totalCount;
   } else {
     dsClassLoading.value = false;
     ElMessage({
@@ -749,7 +770,7 @@ const getDsClass = async () => {
   // console.log(res, "数据源类别");
   if (res.data.code == 200) {
     dsClass.list = [];
-    res.data.data.list.forEach((item) => {
+    JSON.parse(eds.decryptDes(res.data.data)).list.forEach((item) => {
       dsClass.list.push({
         label: item.dsClsName,
         value: item.dsClsId,
@@ -917,8 +938,8 @@ const getList = async () => {
   // console.log(res, "数据源");
   if (res.data.code == 200) {
     loading.value = false;
-    tableData.list = res.data.data.list;
-    tableTotal.value = res.data.data.total || 0;
+    tableData.list = JSON.parse(eds.decryptDes(res.data.data)).list;
+    tableTotal.value = JSON.parse(eds.decryptDes(res.data.data)).total || 0;
   } else {
     loading.value = false;
     ElMessage({

+ 84 - 42
src/views/student/student.vue

@@ -33,7 +33,7 @@
                 @change="searchBtn"
                 :clearable="true"
               >
-                <el-option :label="i" :value="i" v-for="i in semesterData" />
+                <el-option :label="i.name" :value="i.id" v-for="i in semesterData" />
               </el-select>
             </div>
             <div class="condition">
@@ -55,19 +55,26 @@
             </div>
             <div class="condition">
               <span class="title">班级 :</span>
-              <el-select
-                v-model="searchInput.class"
-                placeholder="请选择班级"
-                style="width: 160px"
-                @change="searchBtn"
-                :clearable="true"
+              <el-tooltip
+                class="box-item"
+                effect="dark"
+                content="请先选择年级"
+                placement="top"
               >
-                <el-option
-                  v-for="i in classsData"
-                  :label="i.name"
-                  :value="i.name"
-                />
-              </el-select>
+                <el-select
+                  v-model="searchInput.class"
+                  placeholder="请选择班级"
+                  style="width: 160px"
+                  @change="searchBtn"
+                  :clearable="true"
+                >
+                  <el-option
+                    v-for="i in classsData"
+                    :label="i.name"
+                    :value="i.name"
+                  />
+                </el-select>
+              </el-tooltip>
             </div>
             <div class="condition">
               <span class="title">测评等级 :</span>
@@ -203,7 +210,7 @@
                     }}{{ studentInfo.className }}</span
                   >
                 </div>
-                <div class="info_object">
+                <!-- <div class="info_object">
                   出生日期: 1996.03.16&nbsp;&nbsp;&nbsp;学工号:
                   {{ studentInfo.cardNo }}&nbsp;&nbsp;&nbsp;政治面貌 : 团员
                 </div>
@@ -213,7 +220,7 @@
                 </div>
                 <div class="info_object">
                   家庭住址: 山西省太原市小店区南中环小区12-2-2
-                </div>
+                </div> -->
               </div>
             </div>
             <!-- <div class="score_right"><span class="num">93</span>分</div> -->
@@ -441,7 +448,7 @@
     >
       <div class="criterion">
         <div class="selObject">
-          <span class="warning">注:只能选择6个维度进行展示</span>
+          <!-- <span class="warning">注:只能选择6个维度进行展示</span> -->
           <el-button
             color="rgba(0, 97, 255, 1)"
             class="queding"
@@ -804,6 +811,7 @@ import { Calendar } from "@element-plus/icons-vue";
 import vidiconsApi from "@/api/vidicons.js";
 import { dayjs } from "element-plus";
 import lodash from "lodash";
+import eds from "@/utils/eds.js";
 import axios from "axios";
 import { useStore } from "vuex";
 const store = useStore();
@@ -1019,11 +1027,11 @@ const getList = async () => {
     params: params,
     data: data,
   });
-  console.log(res, "学生信息分页");
+  console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "学生信息分页");
   if (res.data.code == 200) {
     loading.value = false;
-    tableData.list = res.data.data.list;
-    total.value = res.data.data.totalCount;
+    tableData.list = JSON.parse(eds.decryptDes(res.data.data)).list;
+    total.value = JSON.parse(eds.decryptDes(res.data.data)).totalCount;
     // ElMessage({
     //   type: "success",
     //   showClose: true,
@@ -1051,8 +1059,12 @@ const semesterList = async () => {
     },
     // params: data,
   });
-  console.log(semester, "学期下拉数据");
-  semesterData.value = semester.data.data;
+  console.log(
+    semester,
+    JSON.parse(eds.decryptDes(semester.data.data)),
+    "学期下拉数据"
+  );
+  semesterData.value = JSON.parse(eds.decryptDes(semester.data.data));
 };
 
 // 年级数据下拉、、学科下拉、考试类型下拉
@@ -1067,8 +1079,12 @@ const classDataList = async () => {
     },
     // params: data,
   });
-  console.log(grade, "年级下拉数据");
-  gradeData.value = grade.data.data;
+  console.log(
+    grade,
+    JSON.parse(eds.decryptDes(grade.data.data)),
+    "年级下拉数据"
+  );
+  gradeData.value = JSON.parse(eds.decryptDes(grade.data.data));
   // classInfoList()// 班级下拉数据
   let subject = await axios({
     method: "get",
@@ -1079,8 +1095,12 @@ const classDataList = async () => {
     },
     // params: data,
   });
-  console.log(subject, "学科下拉数据");
-  subjectData.value = subject.data.data;
+  console.log(
+    subject,
+    JSON.parse(eds.decryptDes(subject.data.data)),
+    "学科下拉数据"
+  );
+  subjectData.value = JSON.parse(eds.decryptDes(subject.data.data));
   let examType = await axios({
     method: "get",
     url: api.value + "/wanzai/api/smartScore/queryExamTypes",
@@ -1090,8 +1110,12 @@ const classDataList = async () => {
     },
     // params: data,
   });
-  console.log(examType, "考试类型下拉数据");
-  examTypeData.value = examType.data.data;
+  console.log(
+    examType,
+    JSON.parse(eds.decryptDes(examType.data.data)),
+    "考试类型下拉数据"
+  );
+  examTypeData.value = JSON.parse(eds.decryptDes(examType.data.data));
 };
 // 改变年级选择
 const yearClassChange = async (value) => {
@@ -1114,8 +1138,12 @@ const classInfoList = async (value) => {
     },
     params: data,
   });
-  console.log(classs, "班级下拉数据");
-  classsData.value = classs.data.data;
+  console.log(
+    classs,
+    JSON.parse(eds.decryptDes(classs.data.data)),
+    "班级下拉数据"
+  );
+  classsData.value = JSON.parse(eds.decryptDes(classs.data.data));
 };
 
 // 搜索功能
@@ -1193,10 +1221,12 @@ const teacherInfoClick = async (row) => {
     },
     data: formData,
   });
-  console.log(res, "点击查看详情");
+  console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "点击查看详情");
   if (res.data.code == 200) {
-    studentInfoScore.value = res.data.data.scoreList; // 学生评分信息
-    traComment.value = res.data.data.scoreComment; // 教师评语
+    studentInfoScore.value = JSON.parse(
+      eds.decryptDes(res.data.data)
+    ).scoreList; // 学生评分信息
+    traComment.value = JSON.parse(eds.decryptDes(res.data.data)).scoreComment; // 教师评语
     studentObjectList.value = [];
     studentObjectListScore.value = [];
     studentInfoScore.value.forEach((item) => {
@@ -1365,9 +1395,13 @@ const scoreInfo = async () => {
     },
     data: formData,
   });
-  console.log(res, "查看学生信息得分");
+  console.log(
+    res,
+    JSON.parse(eds.decryptDes(res.data.data)),
+    "查看学生信息得分"
+  );
   if (res.data.code == 200) {
-    goScoreData.list = res.data.data.scoreList; // 学生评分信息
+    goScoreData.list = JSON.parse(eds.decryptDes(res.data.data)).scoreList; // 学生评分信息
   } else {
     ElMessage({
       type: "error",
@@ -1505,12 +1539,18 @@ const criterionDataList = async (value) => {
   console.log(res, "评分标准数据");
   if (res.data.code == 200) {
     objectList.list = [];
-    res.data.data.smartSubjectRuleInLists.forEach((item) => {
-      objectList.list.push(item.subjectName);
-    });
-    allScoreData.list = res.data.data.smartSubjectRuleInLists;
+    JSON.parse(eds.decryptDes(res.data.data)).smartSubjectRuleInLists.forEach(
+      (item) => {
+        objectList.list.push(item.subjectName);
+      }
+    );
+    allScoreData.list = JSON.parse(
+      eds.decryptDes(res.data.data)
+    ).smartSubjectRuleInLists;
     scoreScope.list = allScoreData.list[objectIndex.value].subjectRuleList;
-    criterionTerm.value = res.data.data.smartSubjectRuleInLists[0].term;
+    criterionTerm.value = JSON.parse(
+      eds.decryptDes(res.data.data)
+    ).smartSubjectRuleInLists[0].term;
     console.log(scoreScope.list, "标准评分表格");
   } else {
     ElMessage({
@@ -1636,10 +1676,12 @@ const objectDataList = async () => {
       // user_head: sessionStorage.getItem("userhead"),
     },
   });
-  console.log(res, "学科管理");
+  console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "学科管理");
   if (res.data.code == 200) {
-    objectData.list = res.data.data.subjectList;
-    addObjectTerm.value = res.data.data.subjectList[0].term;
+    objectData.list = JSON.parse(eds.decryptDes(res.data.data)).subjectList;
+    addObjectTerm.value = JSON.parse(
+      eds.decryptDes(res.data.data)
+    ).subjectList[0].term;
   } else {
     ElMessage({
       type: "error",

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

@@ -0,0 +1,948 @@
+<template>
+  <div class="content-box">
+    <div class="left">
+      <!-- <el-icon :size="23" class="camera"><VideoCameraFilled /></el-icon> -->
+      <span class="cameratxt">学科管理</span>
+    </div>
+    <div class="scrollId">
+      <div class="middle">
+        <div class="filter">
+          <div class="condition">
+            <span>学科名称:&nbsp;&nbsp;</span>
+            <el-input
+              :clearable="true"
+              @clear="searchBtn"
+              v-model="searchInput.keyWord"
+              class="w-50 m-2"
+              placeholder="请输入学科名称"
+            />
+          </div>
+          <!-- <div class="condition">
+            <span>创建时间&nbsp;&nbsp;</span>
+            <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="请选择日期"
+            />
+          </div> -->
+          <el-button
+            color="rgba(0, 97, 255, 1)"
+            type="primary"
+            class="search"
+            @click="searchBtn"
+            ><el-icon>
+              <Search />
+            </el-icon>
+            <span>查询</span></el-button
+          >
+        </div>
+        <!-- 按钮列表 -->
+        <div class="gongneng">
+          <el-button
+            type="primary"
+            color="rgba(0, 97, 255, 1)"
+            @click="addClick"
+            plain
+            >新增学科</el-button
+          >
+          <!-- <el-button type="primary" color="rgba(0, 97, 255, 1)" @click="addlist"
+            ><span>导出</span></el-button
+          > -->
+        </div>
+      </div>
+      <div class="footer" v-loading="loading">
+        <el-table
+          :row-class-name="tableRowClassName"
+          :data="tableData.list"
+          @selection-change="handleSelectionChange"
+          style="width: 100%"
+          :header-cell-style="{
+            background: 'rgba(240, 243, 247, 1)',
+            height: '50px',
+            border: 0,
+          }"
+        >
+          <!-- <el-table-column align="center" type="selection" width="80" /> -->
+          <el-table-column
+            width="150"
+            align="center "
+            type="index"
+            label="序号"
+          />
+          <el-table-column align="center" prop="name" label="学科名称" />
+          <el-table-column align="center" prop="createTime" label="创建时间">
+            <template #default="{row}">
+              <span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" label="操作" width="200">
+            <template #default="scope">
+              <div class="edit">
+                <div class="look" @click="editClick(scope.row)">编辑</div>
+                <el-popconfirm
+                  width="220"
+                  confirm-button-text="确认"
+                  cancel-button-text="取消"
+                  :icon="InfoFilled"
+                  icon-color="#f89626"
+                  title="是否删除此学科?"
+                  @confirm="del(scope.row)"
+                  @cancel="cancelEvent"
+                >
+                  <template #reference>
+                    <div class="del">删除</div>
+                  </template>
+                </el-popconfirm>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+
+      <!-- 分页组件 -->
+      <div class="pageSize">
+        <span></span>
+        <el-pagination
+          background
+          :current-page="currentPage"
+          :page-size="pageSize"
+          layout="total, prev, pager, next, jumper, slot"
+          :total="total"
+          @update:current-page="handleCurrentChange"
+        />
+      </div>
+
+      <!-- 编辑按钮 -->
+      <el-dialog
+        class="editDialog"
+        v-model="editVisible"
+        :close-on-click-modal="false"
+        :close-on-press-escape="false"
+        :title="titleDialog"
+        align-center
+        width="600"
+        :before-close="cancelEdit"
+      >
+        <el-form
+          ref="editRef"
+          :model="editRuleForm"
+          :rules="editRules"
+          label-width="90px"
+          class="demo-ruleForm"
+          :size="formSize"
+          label-position="left"
+          status-icon
+        >
+          <el-form-item label="学科名称 :" prop="identity">
+            <el-input
+              v-model="editRuleForm.identity"
+              placeholder="请输入学科名称"
+              clearable
+              style="width: 500px"
+            />
+          </el-form-item>
+          <!-- <el-form-item label="类型 :" prop="apply">
+            <el-select
+              v-model="editRuleForm.apply"
+              placeholder="请选择类型"
+              style="width: 500px"
+            >
+              <el-option label="学生" :value="1" />
+              <el-option label="老师" :value="2" />
+            </el-select>
+          </el-form-item> -->
+          <!-- <el-form-item label="用户角色 :" prop="userRoles">
+            <el-select
+              v-model="editRuleForm.userRoles"
+              class="m-2"
+              placeholder="请选择用户角色"
+              style="width: 500px"
+            >
+              <el-option label="清洁工" value="1" />
+              <el-option label="洗碗工" value="2" />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="微校卡号 :" prop="schoolCard">
+            <el-input
+              v-model="editRuleForm.schoolCard"
+              placeholder="请输入微校卡号"
+              clearable
+              style="width: 500px"
+            />
+          </el-form-item>
+          <el-form-item label="身份证号 :" prop="idNumber">
+            <el-input
+              v-model="editRuleForm.idNumber"
+              placeholder="请输入身份证号"
+              style="width: 500px"
+            >
+              <template #append>
+                <div @click="readCard">读卡</div>
+              </template>
+            </el-input>
+          </el-form-item>
+          <el-form-item label="指纹 :" prop="fingerprint">
+            <el-input
+              v-model="editRuleForm.fingerprint"
+              placeholder="请输入指纹"
+              style="width: 500px"
+            >
+              <template #append>
+                <div @click="entering">录入</div>
+              </template>
+            </el-input>
+          </el-form-item> -->
+          <el-form-item class="options">
+            <el-button
+              color="rgba(41, 109, 227, 1)"
+              class="queding"
+              type="primary"
+              @click="confirmEdit(editRef)"
+            >
+              确认
+            </el-button>
+            <el-button @click="cancelEdit(editRef)">取消</el-button>
+          </el-form-item>
+        </el-form>
+      </el-dialog>
+    </div>
+    <div class="bgImg" v-if="bgImg">
+      <el-carousel
+        @click="bgImg = false"
+        ref="bgImgs"
+        indicator-position
+        arrow="always"
+        :autoplay="false"
+        trigger
+      >
+        <el-carousel-item v-for="item in bgImgList" :key="item.id">
+          <img :src="item.url" alt="" />
+        </el-carousel-item>
+      </el-carousel>
+    </div>
+  </div>
+</template>
+
+<script setup>
+import {
+  ref,
+  reactive,
+  watch,
+  nextTick,
+  onBeforeMount,
+  onUnmounted,
+} from "vue";
+import { useRouter } from "vue-router";
+import { ElMessage, ElMessageBox } from "element-plus";
+import { Calendar } from "@element-plus/icons-vue";
+import vidiconsApi from "@/api/vidicons.js";
+import { dayjs } from "element-plus";
+import eds from "@/utils/eds.js";
+import lodash from "lodash";
+import axios from "axios";
+import { useStore } from "vuex";
+const store = useStore();
+const api = ref("");
+const router = useRouter();
+// 表格数据
+const loading = ref(false);
+const tableData = reactive({
+  list: [
+    {
+      userName: "张三",
+      userPhone: 15,
+      teamName: 12,
+    },
+  ],
+});
+const searchInput = reactive({
+  keyWord: "",
+  createTime: "",
+}); // 搜索按钮数据
+
+const currentPage = ref(1); // 当前页
+const pageSize = ref(10);
+const total = ref(5); // 当前总数
+
+// 编辑功能
+const titleDialog = ref("");
+const editVisible = ref(false);
+const editRef = ref();
+const editRuleForm = reactive({
+  identity: "", // 学科
+  // apply: "", // 类型
+  id: "",
+});
+const applyData = ref(); // 应用管理数据
+
+// 表单验证
+const editRules = reactive({
+  identity: [{ required: true, message: "学科不能为空", trigger: "blur" }],
+  // apply: [
+  //   {
+  //     required: true,
+  //     message: "类型不能为空",
+  //     trigger: "blur",
+  //   },
+  // ],
+});
+
+// 身份分页列表
+const getList = async () => {
+  loading.value = true;
+  let data = {
+    currentPage: currentPage.value,
+    pageCount: pageSize.value,
+    name: searchInput.keyWord, // 关键字名称
+  };
+  let res = await axios({
+    method: "get",
+    url: api.value + "/wanzai/api/smartSubject/queryPageSmartSubject",
+    headers: {
+      // token: sessionStorage.getItem("token"),
+      // user_head: sessionStorage.getItem("userhead"),
+    },
+    params: data,
+  });
+  console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "学科分页数据");
+  if (res.data.code == 200) {
+    loading.value = false;
+    tableData.list = JSON.parse(eds.decryptDes(res.data.data)).list;
+    total.value = JSON.parse(eds.decryptDes(res.data.data)).totalCount;
+    // ElMessage({
+    //   type: "success",
+    //   showClose: true,
+    //   message: res.data.message,
+    //   center: true,
+    // });
+  } else {
+    loading.value = false;
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.data.message,
+      center: true,
+    });
+  }
+};
+// 获取应用列表
+const applyList = async () => {
+  let data = {
+    currentPage: 1,
+    pageCount: 100,
+    // managerId: sessionStorage.getItem("token"),
+  };
+  let res = await axios({
+    method: "get",
+    url: api.value + "/wanzai/api/smartApply/queryPageSmartApply",
+    headers: {
+      // token: sessionStorage.getItem("token"),
+      // user_head: sessionStorage.getItem("userhead"),
+    },
+    params: data,
+  });
+  console.log(
+    res,
+    JSON.parse(eds.decryptDes(res.data.data)),
+    "应用管理分页数据"
+  );
+  applyData.value = JSON.parse(eds.decryptDes(res.data.data)).list;
+};
+
+// 搜索功能
+const searchBtn = lodash.debounce(async () => {
+  getList();
+}, 300);
+// 添加按钮 (-------------------------------------------)
+const addClick = async () => {
+  titleDialog.value = "新增";
+  editVisible.value = true;
+  editRuleForm.identity = "";
+  editRuleForm.apply = "";
+  editRuleForm.id = "";
+};
+
+//编辑按钮  (-------------------------------------------)
+const editClick = async (row) => {
+  titleDialog.value = "编辑";
+  editVisible.value = true;
+  console.log(row);
+
+  editRuleForm.identity = row.name;
+  // editRuleForm.apply = row.categoryId;
+  editRuleForm.id = row.id;
+};
+
+const cancelEdit = () => {
+  editVisible.value = false;
+  editRef.value.resetFields();
+  editRuleForm.identity = "";
+  // editRuleForm.apply = "";
+  editRuleForm.id = "";
+};
+
+// 确定编辑
+const confirmEdit = (formEl) => {
+  if (!formEl) return;
+  formEl.validate(async (valid, fields) => {
+    if (valid) {
+      let data = {
+        name: editRuleForm.identity,// 学科名称
+        // categoryId: editRuleForm.apply,
+      };
+      let res = "";
+      // 根据id判断是编辑还是添加
+      if (editRuleForm.id) {
+        data.id = editRuleForm.id;
+        res = await axios({
+          method: "post",
+          url: api.value + "/wanzai/api/smartSubject/updateSmartSubjectById",
+          headers: {},
+          data: data,
+        });
+      } else {
+        res = await axios({
+          method: "post",
+          url: api.value + "/wanzai/api/smartSubject/insertSmartSubject",
+          headers: {},
+          data: data,
+        });
+      }
+      console.log(res, "添加成功");
+      if (res.data.code == 200) {
+        editVisible.value = false;
+        getList();
+        editRef.value.resetFields();
+        ElMessage({
+          type: "success",
+          showClose: true,
+          message: res.data.message,
+          center: true,
+        });
+      } else {
+        ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.data.message,
+          center: true,
+        });
+      }
+    }
+  });
+};
+
+//删除按钮
+const del = async (row) => {
+  let data = {
+    id: row.id,
+  };
+  let res = await axios({
+    method: "get",
+    url: api.value + "/wanzai/api/smartSubject/deleteSmartSubjectById",
+    headers: {
+      // token: sessionStorage.getItem("token"),
+      // user_head: sessionStorage.getItem("userhead"),
+    },
+    params: data,
+  });
+  if (res.data.code == 200) {
+    if (tableData.list.length == 1 && currentPage.value != 1) {
+      currentPage.value = currentPage.value - 1;
+    }
+    getList();
+    ElMessage({
+      type: "success",
+      showClose: true,
+      message: res.data.message,
+      center: true,
+    });
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.data.message,
+      center: true,
+    });
+  }
+  // console.log(res);
+};
+
+// 多选框功能
+const handleSelectionChange = (val) => {
+  console.log(val);
+  selectData.list = val;
+};
+//导出功能
+// const importExcel = async () => {
+//   if (searchInput.createTime == null) {
+//     searchInput.createTime = "";
+//   }
+//   let data = new FormData();
+//   data.set("car_number", searchInput.carnumber);
+//   data.set("create_time", searchInput.createTime);
+//   let res = await axios({
+//     method: "post",
+//     url: api.value + "/carBook/cinfotoExcel.action",
+//     headers: {
+//       token: sessionStorage.getItem("token"),
+//     },
+//     data: data,
+//   });
+//   // console.log(res, "导出账号");
+//   if (res.data.code == 200) {
+//     // const elt = document.createElement("a");
+//     // elt.setAttribute(
+//     //   "href",
+//     //   "https://chtech.ncjti.edu.cn/carstop" + res.data.downurl
+//     // );
+//     // elt.setAttribute("download", "file.png");
+//     // elt.style.display = "none";
+//     // document.body.appendChild(elt);
+//     // elt.click();
+//     var downloadPath = "https://chtech.ncjti.edu.cn/carstop" + res.data.downurl;
+//     console.log("获得地址数据:", downloadPath);
+//     var downloadLink = document.createElement("a");
+//     downloadLink.style.display = "none"; // 使其隐藏
+//     downloadLink.href = downloadPath;
+//     downloadLink.download = "";
+//     downloadLink.click();
+//     document.body.appendChild(downloadLink);
+//     document.body.removeChild(downloadLink);
+//     ElMessage({
+//       type: "success",
+//       showClose: true,
+//       message: res.data.message,
+//       center: true,
+//     });
+//   } else {
+//     ElMessage({
+//       type: "error",
+//       showClose: true,
+//       message: res.data.message,
+//       center: true,
+//     });
+//   }
+// };
+// 表格斑马纹颜色修改
+const tableRowClassName = ({ row, rowIndex }) => {
+  if (rowIndex % 2 === 0) {
+    return "even";
+  } else if (rowIndex % 2 !== 0) {
+    return "odd";
+  }
+  return "";
+};
+// 分页
+const handleCurrentChange = (value) => {
+  // console.log(value);
+  currentPage.value = value;
+  getList();
+};
+
+onBeforeMount(async () => {
+  api.value = store.state.user.api;
+  getList();
+  // applyList(); // 应用列表
+});
+onUnmounted(() => {
+  // document.removeEventListener("keyup", Enters);
+});
+</script>
+
+<style scoped lang="scss">
+.content-box {
+  min-width: 600px;
+  width: calc(100vw - 260px);
+  height: calc(100vh - 105px);
+  margin: 20px auto;
+  border-radius: 8px;
+  background-color: #fff;
+  color: #fff;
+  display: flex;
+  flex-direction: column;
+  box-shadow: 0px 3px 10px rgba(0, 97, 255, 0.2);
+
+  .left {
+    // width: calc(100wh - 40px);
+    display: flex;
+    align-items: center;
+
+    margin: 0 30px;
+    border-bottom: 1px solid #ccc;
+    color: rgb(0, 0, 0);
+    font-size: 18px;
+    font-weight: 600;
+
+    span {
+      display: block;
+      height: 60px;
+      line-height: 60px;
+      margin-right: 20px;
+    }
+
+    .is_active {
+      color: rgba(111, 182, 184, 1);
+    }
+  }
+  .scrollId {
+    overflow: auto;
+    height: calc(100% - 61px);
+  }
+  .middle {
+    width: 96%;
+    margin: 0 auto;
+
+    color: #000;
+
+    // border-bottom: 1px solid rgb(231, 231, 231);
+    .filter {
+      display: flex;
+      flex-wrap: wrap;
+      align-items: center;
+      margin: 10px 0 0 0;
+
+      .search {
+        color: #fff;
+      }
+
+      .condition {
+        display: flex;
+        align-items: center;
+        margin: 10px 30px 10px 0;
+
+        :deep(.el-input .el-input__inner) {
+          font-size: 14px;
+        }
+
+        span {
+          margin: 0 10px 0 0;
+        }
+      }
+    }
+
+    .gongneng {
+      margin: 10px 0 20px 0;
+
+      span {
+        color: #fff;
+      }
+      .el-button {
+        margin-right: 10px;
+      }
+    }
+
+    :deep(.cont) {
+      width: 60%;
+      margin: 20px auto;
+    }
+
+    :deep(.download) {
+      display: flex;
+      align-items: center;
+      margin: 10px;
+    }
+
+    :deep(.download span) {
+      font-size: 16px;
+      margin-left: 20px;
+    }
+
+    :deep(.cont .el-button) {
+      margin-left: 60px;
+      margin-bottom: 30px;
+    }
+
+    :deep(.cont .accomplish) {
+      width: 100%;
+      display: flex;
+      justify-content: center;
+    }
+
+    :deep(.cont .accomplish .el-button) {
+      width: 50%;
+      margin: 0;
+    }
+  }
+
+  .footer {
+    width: 96%;
+    height: calc(100% - 210px);
+    margin: 10px auto 30px;
+    min-height: 300px;
+    .el-table--fit {
+      height: 100% !important;
+
+      :deep(.el-table__header-wrapper) {
+        background-color: #000;
+        font-size: 14px;
+
+        tr {
+          // color: #000;
+        }
+      }
+
+      :deep(.el-table__row) {
+        height: 50px;
+        font-size: 14px;
+        // color: #000;
+        &:hover {
+          td {
+            background-color: rgba(223, 236, 254, 1);
+          }
+        }
+      }
+
+      :deep(.el-table__row):nth-child(2n) {
+        .el-table-fixed-column--right {
+          background-color: rgba(240, 243, 247, 1);
+        }
+      }
+
+      :deep(.el-table__row td) {
+        padding: 0;
+        border: 0;
+      }
+
+      .el-button--primary {
+        margin-left: 5px;
+      }
+
+      :deep(.el-table__body .even) {
+        background-color: #fff;
+      }
+
+      :deep(.el-table__body .odd) {
+        background-color: rgba(240, 243, 247, 1);
+      }
+
+      :deep(.edit) {
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        color: rgba(111, 182, 184, 1);
+      }
+
+      :deep(.look) {
+        padding: 0 10px;
+        cursor: pointer;
+        color: rgba(30, 125, 251, 1);
+      }
+
+      .del {
+        padding: 0 10px;
+        color: rgba(212, 48, 48, 1);
+        cursor: pointer;
+      }
+
+      // :deep(.look):hover {
+      //   color: red;
+      // }
+      // :deep(.del):hover {
+      //   color: red;
+      // }
+    }
+  }
+  // 编辑按钮
+  :deep(.editDialog) {
+    //   height: 420px;
+    border-radius: 11px;
+    .el-dialog__header {
+      border-radius: 11px 11px 0 0;
+      background: rgba(237, 241, 245, 1);
+      font-weight: 600;
+      margin: 0;
+      .el-dialog__headerbtn {
+        outline: none;
+      }
+    }
+    .el-dialog__body {
+      padding: 30px 30px 10px 30px;
+      .el-form-item__content {
+        width: 200px;
+        .el-input-group__append {
+          background-color: rgba(222, 234, 252, 1);
+          color: rgba(0, 97, 255, 1);
+          cursor: pointer;
+          user-select: none;
+        }
+      }
+      .options {
+        margin: 50px 20px 20px 0;
+        width: 100%;
+        .el-form-item__content {
+          display: flex;
+          flex-direction: row-reverse;
+        }
+        .queding {
+          color: #fff;
+          margin-left: 15px;
+        }
+      }
+    }
+  }
+
+  // 指纹弹窗
+  :deep(.fingerprint) {
+    width: 611px;
+    height: 486px;
+    border-radius: 11px;
+    .el-dialog__header {
+      border-radius: 11px 11px 0 0;
+      background: rgba(237, 241, 245, 1);
+      font-weight: 600;
+      margin: 0;
+
+      .el-dialog__headerbtn {
+        outline: none;
+      }
+    }
+    .el-dialog__body {
+      padding: 0;
+      .elbody {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        padding: 20px 20px;
+        font-size: 18px;
+        color: #000;
+        border-bottom: 0.5px solid #ccc;
+
+        i {
+          cursor: pointer;
+        }
+      }
+    }
+    .el-dialog__footer {
+      .el-button--primary {
+        background: rgba(41, 109, 227, 1);
+      }
+    }
+  }
+
+  // 身份证读取
+  :deep(.addIdentityCard) {
+    //   height: 420px;
+    border-radius: 11px;
+    .el-dialog__header {
+      border-radius: 11px 11px 0 0;
+      background: rgba(237, 241, 245, 1);
+      font-weight: 600;
+      margin: 0;
+      .el-dialog__headerbtn {
+        outline: none;
+      }
+    }
+    .el-dialog__body {
+      padding: 30px 20px 10px 20px;
+      height: 330px;
+      font-size: 16px;
+      font-weight: 600;
+      color: #000;
+      .el-steps {
+        width: 600px;
+        transform: translateX(90px);
+        margin: 0 0 40px 0;
+      }
+      .title {
+        text-align: center;
+      }
+      .icons {
+        display: flex;
+        justify-content: center;
+        img {
+          width: 70px;
+          margin: 40px 0;
+        }
+        .loading {
+          animation: move 3s linear;
+        }
+        @keyframes move {
+          0% {
+            transform: rotate(0);
+          }
+          100% {
+            transform: rotate(360deg);
+          }
+        }
+      }
+      .retry {
+        text-align: center;
+        span {
+          color: red;
+          padding: 0 8px;
+          cursor: pointer;
+        }
+      }
+    }
+  }
+
+  .pageSize {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    margin: 0 30px;
+
+    span {
+      color: #000;
+    }
+
+    .el-pagination {
+      // width: 1600px;
+      :deep(.el-pagination__total) {
+        color: #000;
+      }
+
+      :deep(.el-pagination__goto) {
+        color: #000;
+      }
+
+      :deep(.el-pagination__classifier) {
+        color: #000;
+      }
+
+      :deep(.el-input__wrapper) {
+        border: 1px solid rgba(0, 0, 0, 1);
+        border-radius: 5px;
+        box-shadow: none;
+      }
+
+      :deep(.el-pager li) {
+        margin: 0 5px;
+        border: 1px solid rgba(0, 0, 0, 1);
+        border-radius: 5px;
+        background-color: transparent;
+      }
+
+      :deep(.el-pager li.is-active) {
+        // background-color: rgba(0, 97, 255, 0.8);
+        border: 1px solid rgba(0, 97, 255, 1);
+        color: rgba(0, 97, 255, 1);
+      }
+
+      :deep(.btn-prev) {
+        margin-right: 5px;
+        border: 1px solid rgba(0, 0, 0, 1);
+        border-radius: 5px;
+        background-color: transparent;
+      }
+
+      :deep(.btn-next) {
+        margin-left: 5px;
+        border: 1px solid rgba(0, 0, 0, 1);
+        border-radius: 5px;
+        background-color: transparent;
+      }
+    }
+  }
+}
+
+.el-input {
+  width: 192px;
+}
+</style>

+ 43 - 22
src/views/task/task.vue

@@ -1082,9 +1082,11 @@ import { ElMessage, ElMessageBox } from "element-plus";
 // import vidiconsApi from "@/api/vidicons.js";
 // import { dayjs } from "element-plus";
 import lodash from "lodash";
+import eds from "@/utils/eds.js";
 import axios from "axios";
 import { useStore } from "vuex";
 const store = useStore();
+
 const api = ref("");
 // const router = useRouter();
 const editOneRef = ref();
@@ -1277,11 +1279,11 @@ const mPage = reactive({
       },
       params: data,
     });
-    // console.log(res, "数据源");
+    console.log(res,JSON.parse(eds.decryptDes(res.data.data)), "数据源");
     if (res.data.code == 200) {
       mPage.dsSourceData = reactive([]);
       mPage.dsDestinationData = reactive([]);
-      res.data.data.list.forEach((element) => {
+      JSON.parse(eds.decryptDes(res.data.data)).list.forEach((element) => {
         let item = {
           value: element.dsId,
           label: element.dsName,
@@ -1328,7 +1330,7 @@ const mPage = reactive({
       data,
     });
     if (res.data.code == 200) {
-      res.data.data.forEach((element) => {
+      JSON.parse(eds.decryptDes(res.data.data)).forEach((element) => {
         let item = {
           label: element,
         };
@@ -1381,7 +1383,7 @@ const mPage = reactive({
       data,
     });
     if (res.data.code == 200) {
-      res.data.data.forEach((element) => {
+      JSON.parse(eds.decryptDes(res.data.data)).forEach((element) => {
         let item = {
           label: element,
         };
@@ -1434,7 +1436,7 @@ const mPage = reactive({
       data,
     });
     if (res.data.code == 200) {
-      res.data.data.forEach((element) => {
+      JSON.parse(eds.decryptDes(res.data.data)).forEach((element) => {
         let item = {
           label: element,
         };
@@ -1471,7 +1473,7 @@ const mPage = reactive({
       ElMessage({
         type: "success",
         showClose: true,
-        message: res.data.data,
+        message: JSON.parse(eds.decryptDes(res.data.data)),
         center: true,
       });
     } else {
@@ -1587,23 +1589,29 @@ const mPage = reactive({
           },
           data: JSON.stringify(data),
         });
+        console.log(res, "11111");
+
         if (res.data.code == 200) {
           ElMessage({
             type: "success",
             showClose: true,
-            message: res.data.data.msg,
+            message: JSON.parse(eds.decryptDes(res.data.data)).msg,
             center: true,
           });
           mPage.dsDestinationMetaData = reactive([]);
           // 保存成功后返回任务id
           if (mPage.titleDialog == "新增任务") {
-            mPage.tkId = res.data.data.tkId;
+            mPage.tkId = JSON.parse(eds.decryptDes(res.data.data)).tkId;
           }
-          res.data.data.dsDestinationMetaData.forEach((element) => {
+          JSON.parse(
+            eds.decryptDes(res.data.data)
+          ).dsDestinationMetaData.forEach((element) => {
             element.disabled = false;
             mPage.dsDestinationMetaData.push(element);
           });
-          mPage.dsSourceMetaData = res.data.data.dsSourceMetaData;
+          mPage.dsSourceMetaData = JSON.parse(
+            eds.decryptDes(res.data.data)
+          ).dsSourceMetaData;
           mPage.dsSourceMetaDataOptions = reactive([]);
           mPage.dsSourceMetaData.forEach((element) => {
             let item = {
@@ -1645,11 +1653,15 @@ const mPage = reactive({
           if (mPage.titleDialog == "编辑任务") {
             // 即使未修改数据也可以跳到第2步
             mPage.dsDestinationMetaData = reactive([]);
-            res.data.data.dsDestinationMetaData.forEach((element) => {
+            JSON.parse(
+              eds.decryptDes(res.data.data)
+            ).dsDestinationMetaData.forEach((element) => {
               element.disabled = false;
               mPage.dsDestinationMetaData.push(element);
             });
-            mPage.dsSourceMetaData = res.data.data.dsSourceMetaData;
+            mPage.dsSourceMetaData = JSON.parse(
+              eds.decryptDes(res.data.data)
+            ).dsSourceMetaData;
             mPage.dsSourceMetaDataOptions = reactive([]);
             mPage.dsSourceMetaData.forEach((element) => {
               let item = {
@@ -1794,11 +1806,13 @@ const mPage = reactive({
         },
         data: JSON.stringify(data),
       });
+      console.log(res, "222222222222");
+
       if (res.data.code == 200) {
         ElMessage({
           type: "success",
           showClose: true,
-          message: res.data.data,
+          message: JSON.parse(eds.decryptDes(res.data.data)),
           center: true,
         });
         // 保存成功后跳到第3步
@@ -1918,11 +1932,13 @@ const mPage = reactive({
           },
           data: JSON.stringify(data),
         });
+        console.log(res, 333333333);
+
         if (res.data.code == 200) {
           ElMessage({
             type: "success",
             showClose: true,
-            message: res.data.data,
+            message: JSON.parse(eds.decryptDes(res.data.data)),
             center: true,
           });
           // 保存成功后关闭
@@ -2024,13 +2040,13 @@ const mPage = reactive({
       },
       params: data,
     });
-    // console.log(res, "任务列表数据");
+    console.log(res,JSON.parse(eds.decryptDes(res.data.data)), "任务列表数据");
     if (res.data.code == 200) {
       mPage.loading = false;
-      mPage.total = res.data.data.totalCount;
+      mPage.total = JSON.parse(eds.decryptDes(res.data.data)).totalCount;
       mPage.tableData = ref([]);
       let i = 1;
-      res.data.data.list.forEach((element) => {
+      JSON.parse(eds.decryptDes(res.data.data)).list.forEach((element) => {
         element.xuhao = (mPage.currentPage - 1) * mPage.pageCount + i;
         mPage.tableData.push(element);
         i++;
@@ -2063,7 +2079,7 @@ const mPage = reactive({
     if (res.data.code == 200) {
       mPage.taskList = ref([]);
       mPage.destinationTable = ref([]);
-      res.data.data.forEach((element) => {
+      JSON.parse(eds.decryptDes(res.data.data)).forEach((element) => {
         let itemTask = {
           value: element.tkId,
           label: element.tkName,
@@ -2162,8 +2178,13 @@ const mPage = reactive({
     });
     if (res.data.code == 200) {
       if (diraction == "from")
-        mPage.lookDialogData.tkDsSourceName = res.data.data.dsName;
-      else mPage.lookDialogData.tkDsDestinationName = res.data.data.dsName;
+        mPage.lookDialogData.tkDsSourceName = JSON.parse(
+          eds.decryptDes(res.data.data)
+        ).dsName;
+      else
+        mPage.lookDialogData.tkDsDestinationName = JSON.parse(
+          eds.decryptDes(res.data.data)
+        ).dsName;
     } else {
       ElMessage({
         type: "error",
@@ -2233,12 +2254,12 @@ const mPage = reactive({
       },
       data: JSON.stringify(data),
     });
-    // console.log(res, "任务启动");
+    console.log(res, "任务启动");
     if (res.data.code == 200) {
       ElMessage({
         type: "success",
         showClose: true,
-        message: res.data.data,
+        message: JSON.parse(eds.decryptDes(res.data.data)),
         center: true,
       });
       mPage.getList();

+ 75 - 39
src/views/teacher/teacher.vue

@@ -33,7 +33,7 @@
                 @change="searchBtn"
                 :clearable="true"
               >
-                <el-option :label="i" :value="i" v-for="i in semesterData" />
+                <el-option :label="i.name" :value="i.id" v-for="i in semesterData" />
               </el-select>
             </div>
             <div class="condition">
@@ -72,19 +72,26 @@
             </div>
             <div class="condition">
               <span class="title">班级 :</span>
-              <el-select
-                v-model="searchInput.class"
-                placeholder="请选择班级"
-                style="width: 160px"
-                @change="searchBtn"
-                :clearable="true"
+              <el-tooltip
+                class="box-item"
+                effect="dark"
+                content="请先选择年级"
+                placement="top"
               >
-                <el-option
-                  v-for="i in classsData"
-                  :label="i.name"
-                  :value="i.name"
-                />
-              </el-select>
+                <el-select
+                  v-model="searchInput.class"
+                  placeholder="请选择班级"
+                  style="width: 160px"
+                  @change="searchBtn"
+                  :clearable="true"
+                >
+                  <el-option
+                    v-for="i in classsData"
+                    :label="i.name"
+                    :value="i.name"
+                  />
+                </el-select>
+              </el-tooltip>
             </div>
           </div>
           <!-- 按钮列表 -->
@@ -555,6 +562,7 @@ import { Calendar } from "@element-plus/icons-vue";
 import vidiconsApi from "@/api/vidicons.js";
 import { dayjs } from "element-plus";
 import lodash from "lodash";
+import eds from "@/utils/eds.js";
 import axios from "axios";
 import { useStore } from "vuex";
 const store = useStore();
@@ -653,8 +661,12 @@ const semesterList = async () => {
     },
     // params: data,
   });
-  console.log(semester, "学期下拉数据");
-  semesterData.value = semester.data.data;
+  console.log(
+    semester,
+    JSON.parse(eds.decryptDes(semester.data.data)),
+    "学期下拉数据"
+  );
+  semesterData.value = JSON.parse(eds.decryptDes(semester.data.data));
 };
 
 // 年级数据下拉、、学科下拉、考试类型下拉
@@ -669,8 +681,12 @@ const classDataList = async () => {
     },
     // params: data,
   });
-  console.log(grade, "年级下拉数据");
-  gradeData.value = grade.data.data;
+  console.log(
+    grade,
+    JSON.parse(eds.decryptDes(grade.data.data)),
+    "年级下拉数据"
+  );
+  gradeData.value = JSON.parse(eds.decryptDes(grade.data.data));
   // classInfoList()// 班级下拉数据
   let subject = await axios({
     method: "get",
@@ -681,8 +697,12 @@ const classDataList = async () => {
     },
     // params: data,
   });
-  console.log(subject, "学科下拉数据");
-  subjectData.value = subject.data.data;
+  console.log(
+    subject,
+    JSON.parse(eds.decryptDes(subject.data.data)),
+    "学科下拉数据"
+  );
+  subjectData.value = JSON.parse(eds.decryptDes(subject.data.data));
   let examType = await axios({
     method: "get",
     url: api.value + "/wanzai/api/smartScore/queryExamTypes",
@@ -692,8 +712,12 @@ const classDataList = async () => {
     },
     // params: data,
   });
-  console.log(examType, "考试类型下拉数据");
-  examTypeData.value = examType.data.data;
+  console.log(
+    examType,
+    JSON.parse(eds.decryptDes(examType.data.data)),
+    "考试类型下拉数据"
+  );
+  examTypeData.value = JSON.parse(eds.decryptDes(examType.data.data));
 };
 // 改变年级选择
 const yearClassChange = async (value) => {
@@ -716,8 +740,12 @@ const classInfoList = async (value) => {
     },
     params: data,
   });
-  console.log(classs, "班级下拉数据");
-  classsData.value = classs.data.data;
+  console.log(
+    classs,
+    JSON.parse(eds.decryptDes(classs.data.data)),
+    "班级下拉数据"
+  );
+  classsData.value = JSON.parse(eds.decryptDes(classs.data.data));
 };
 
 // 教师综合素质评价/详情 页面 (----------------------------------------------------)
@@ -756,9 +784,9 @@ const getList = async () => {
       params: params,
       data: data,
     });
-    console.log(res, "教师分页");
+    console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "教师分页");
     if (res.data.code == 200) {
-      res.data.data.list.forEach((item) => {
+      JSON.parse(eds.decryptDes(res.data.data)).list.forEach((item) => {
         if (item.evaluateDetail) {
           console.log(JSON.parse(item.evaluateDetail));
           evaluateDetail.value = [];
@@ -771,10 +799,10 @@ const getList = async () => {
           }
         }
       });
-      tableData.list = res.data.data.list;
+      tableData.list = JSON.parse(eds.decryptDes(res.data.data)).list;
       console.log(tableData.list);
 
-      total.value = res.data.data.totalCount;
+      total.value = JSON.parse(eds.decryptDes(res.data.data)).totalCount;
       // ElMessage({
       //   type: "success",
       //   showClose: true,
@@ -801,9 +829,11 @@ const getList = async () => {
       },
       data: formData,
     });
-    console.log(res, "评分列表");
+    console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "评分列表");
     if (res.data.code == 200) {
-      teacherList.value = res.data.data.simpleScoreList.simpleScoreDetailList;
+      teacherList.value = JSON.parse(
+        eds.decryptDes(res.data.data)
+      ).simpleScoreList.simpleScoreDetailList;
 
       // ElMessage({
       //   type: "success",
@@ -829,13 +859,13 @@ const getList = async () => {
       },
       data: formData,
     });
-    console.log(ress, "评分对比");
+    console.log(ress, JSON.parse(eds.decryptDes(ress.data.data)), "评分对比");
     if (ress.data.code == 200) {
       if (ress.data.data) {
         teacherComparison.name = [];
         teacherComparison.avgScore = [];
         teacherComparison.ownScore = [];
-        ress.data.data.forEach((item) => {
+        JSON.parse(eds.decryptDes(ress.data.data)).forEach((item) => {
           teacherComparison.name.push(item.name);
           teacherComparison.avgScore.push(item.avgScore);
           teacherComparison.ownScore.push(item.ownScore);
@@ -873,9 +903,9 @@ const rankSel = async () => {
     },
     data: formDatass,
   });
-  console.log(resss, "评分排行榜");
+  console.log(resss, JSON.parse(eds.decryptDes(resss.data.data)), "评分排行榜");
   if (resss.data.code == 200) {
-    rankData.value = resss.data.data.list;
+    rankData.value = JSON.parse(eds.decryptDes(resss.data.data)).list;
   } else {
     ElMessage({
       type: "error",
@@ -1136,9 +1166,11 @@ const goScore = async (row) => {
   });
   console.log(res, "评分列表");
   if (res.data.code == 200) {
-    scoreData.list = res.data.data.simpleScoreList.simpleScoreDetailList;
-    lowingScore.value = res.data.data.lowingScore;
-    totalScore.value = res.data.data.totalScore;
+    scoreData.list = JSON.parse(
+      eds.decryptDes(res.data.data)
+    ).simpleScoreList.simpleScoreDetailList;
+    lowingScore.value = JSON.parse(eds.decryptDes(res.data.data)).lowingScore;
+    totalScore.value = JSON.parse(eds.decryptDes(res.data.data)).totalScore;
 
     // ElMessage({
     //   type: "success",
@@ -1273,10 +1305,14 @@ const getAllData = async () => {
       // user_head: sessionStorage.getItem("userhead"),
     },
   });
-  console.log(res, "评分项管理");
+  console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "评分项管理");
   if (res.data.code == 200) {
-    adjustData.value = res.data.data.simpleScoreList;
-    addItemRuleForm.term = res.data.data.simpleScoreList[0].term;
+    adjustData.value = JSON.parse(
+      eds.decryptDes(res.data.data)
+    ).simpleScoreList;
+    addItemRuleForm.term = JSON.parse(
+      eds.decryptDes(res.data.data)
+    ).simpleScoreList[0].term;
     adjustItem();
   } else {
     ElMessage({

+ 432 - 84
src/views/user/user.vue

@@ -24,7 +24,7 @@
             <div class="title" @click="nodeClick(node, data)">
               <img src="@/assets/images/folder.png" alt="" />
               <!-- <img src="@/assets/images/document.png" alt="" /> -->
-              <span :class="data.name == treeNodeName ? 'nodeClick' : ''">{{
+              <span :class="data.id == departmentId ? 'nodeClick' : ''">{{
                 data.name
               }}</span>
             </div>
@@ -111,9 +111,9 @@
                   <el-dropdown-item @click="addBatchClick"
                     >批量导入</el-dropdown-item
                   >
-                  <el-dropdown-item @click="delBatchClick"
+                  <!-- <el-dropdown-item @click="delBatchClick"
                     >批量删除</el-dropdown-item
-                  >
+                  > -->
                 </el-dropdown-menu>
               </template>
             </el-dropdown>
@@ -145,6 +145,13 @@
                 >导出用户</el-button
               >
             </el-tooltip>
+            <el-button
+              type="primary"
+              color="rgba(0, 97, 255, 1)"
+              @click="DelRecordClick"
+              plain
+              >删除记录</el-button
+            >
           </div>
         </div>
         <div class="footer" v-loading="loading">
@@ -253,7 +260,13 @@
               label="职务 :"
               :prop="addMemberRuleForm.identity == 3 ? 'duty' : ''"
             >
-              <el-select
+            <el-tooltip
+        class="box-item"
+        effect="dark"
+        content="请先选择身份"
+        placement="top-start"
+      >
+      <el-select
                 v-model="addMemberRuleForm.duty"
                 placeholder="请选择职务"
                 style="width: 500px"
@@ -264,6 +277,8 @@
                   :value="`${i.id}`"
                 />
               </el-select>
+      </el-tooltip>
+           
             </el-form-item>
             <el-form-item label="身份证号 :" prop="icCard">
               <el-input
@@ -276,7 +291,7 @@
             <el-form-item label="性别 :" prop="sex">
               <el-radio-group v-model="addMemberRuleForm.sex">
                 <el-radio :label="1">男</el-radio>
-                <el-radio :label="0">女</el-radio>
+                <el-radio :label="2">女</el-radio>
               </el-radio-group>
             </el-form-item>
             <el-form-item label="部门 :" prop="department">
@@ -336,7 +351,7 @@
             <el-form-item
               v-if="addMemberRuleForm.identity != 1"
               label="年级 :"
-              :prop="addMemberRuleForm.identity == 3 ? '' : 'grade'"
+              :prop="(addMemberRuleForm.identity == 3 && addMemberRuleForm.duty!=1) ? '' : 'grade'"
             >
               <el-select
                 v-model="addMemberRuleForm.grade"
@@ -354,7 +369,7 @@
             <el-form-item
               v-if="addMemberRuleForm.identity != 1"
               label="班级 :"
-              :prop="addMemberRuleForm.identity == 3 ? '' : 'class'"
+              :prop="(addMemberRuleForm.identity == 3&& addMemberRuleForm.duty!=1) ? '' : 'class'"
             >
               <el-select
                 v-model="addMemberRuleForm.class"
@@ -464,8 +479,8 @@
                 <el-option
                   v-for="item in conteactListData"
                   :key="item.id"
-                  :label="item.name"
-                  :value="`${item.id}`"
+                  :label="`${item.name}·${item.id}`"
+                  :value="`${item.name}·${item.id}`"
                 >
                   <span style="float: left">{{ item.name }}</span>
                   <span
@@ -547,7 +562,7 @@
       </div>
       <div class="content">
         <div class="form">
-          <div class="imgUpload">
+          <div class="imgUpload" v-loading="allImgShow"  element-loading-text="导入中...">
             <el-upload
               style="width: 500px"
               class="upload-demo"
@@ -580,11 +595,13 @@
               drag
               action="#"
               multiple
+              ref="allImgUpload"
               :on-preview="handlePreviewImgUpload"
               :on-remove="handleRemoveImgUpload"
               :on-change="handleChangeImgUpload"
               :http-request="handleUploadImgUpload"
               :before-upload="beforeAvatarUploadImgUpload"
+              :on-success="handleSuccessImgUpload"
             >
               <el-icon class="el-icon--upload"><upload-filled /></el-icon>
               <div class="el-upload__text">
@@ -612,9 +629,14 @@
               plain
               >开始导入</el-button
             >
+            <span
+            style="width: 120px;margin-left:20px;cursor: pointer;color:rgba(0, 97, 255, 1)"
+              @click="resetImport"
+              >重置</span
+            >
             <span class="downLoad" @click="downLoadtempAdd">下载模板</span>
           </div>
-          <div class="tableTitle">导入历史</div>
+          <!-- <div class="tableTitle">导入历史</div>
           <div class="footer">
             <el-table
               :row-class-name="tableRowClassName"
@@ -654,20 +676,6 @@
                     <div class="look" @click="lookClick(scope.row)">
                       点击查看
                     </div>
-                    <!-- <el-popconfirm
-                      width="220"
-                      confirm-button-text="确认"
-                      cancel-button-text="取消"
-                      :icon="InfoFilled"
-                      icon-color="#f89626"
-                      title="是否删除此房型?"
-                      @confirm="del(scope.row)"
-                      @cancel="cancelEvent"
-                    >
-                      <template #reference>
-                        <div class="del">删除</div>
-                      </template>
-                    </el-popconfirm> -->
                   </div>
                 </template>
               </el-table-column>
@@ -683,7 +691,61 @@
                 @update:current-page="handleAddBatch"
               />
             </div>
-          </div>
+          </div> -->
+        </div>
+      </div>
+    </div>
+     <!-- 删除记录页面 -->
+     <div class="delRecord" v-if="delRecordShow">
+      <div class="left">
+        <img src="@/assets/images/close.png" alt="" @click="delRecordClose" />
+        <span class="add">{{ addMemberTitle }}</span>
+      </div>
+      <div class="scorll">
+        <div class="footer" v-loading="loading">
+          <el-table
+            :row-class-name="tableRowClassName"
+            :data="delRecordDatas"
+            @selection-change="handleSelectionChange"
+            style="width: 100%"
+            :header-cell-style="{
+              background: 'rgba(240, 243, 247, 1)',
+              height: '50px',
+              border: 0,
+            }"
+          >
+            <el-table-column align="center" prop="name" label="姓名" />
+            <el-table-column align="center" prop="identityStr" label="身份" />
+            <el-table-column align="center" prop="departmentStr" label="部门" />
+            <el-table-column align="center" prop="cardNo" label="学号" />
+            <el-table-column align="center" prop="img" label="人脸照片">
+              <template #default="{ row }">
+                <div class="img">
+                  <img @click="imgClick(row)" :src="row.headImage" alt="" />
+                </div>
+              </template>
+            </el-table-column>
+            <!-- <el-table-column align="center" label="操作" width="200">
+              <template #default="scope">
+                <div class="edit">
+                  <div class="look" @click="editClick(scope.row)">编辑</div>
+                </div>
+              </template>
+            </el-table-column> -->
+          </el-table>
+        </div>
+
+        <!-- 分页组件 -->
+        <div class="pageSize">
+          <span></span>
+          <el-pagination
+            background
+            :current-page="delRecordCurrentPage"
+            :page-size="delRecordPageSize"
+            layout="total, prev, pager, next, jumper, slot"
+            :total="delRecordTotal"
+            @update:current-page="handleCurrentChange"
+          />
         </div>
       </div>
     </div>
@@ -1052,6 +1114,7 @@ import { dayjs } from "element-plus";
 import lodash from "lodash";
 import axios from "axios";
 import compressImg from "@/utils/compressImg.js";
+import eds from "@/utils/eds.js";
 import { useStore } from "vuex";
 const store = useStore();
 const api = ref("");
@@ -1238,11 +1301,27 @@ const conteactLoading = ref(false); // 联系人下拉框搜索时加载
 
 const upload = ref(); // 人脸照片
 // 表单验证
+const checkPhone=(rule, value, callback)=>{
+  var reg = /^(0|\+?86|17951)?(13[0-9]|15[012356789]|17[013678]|18[0-9]|14[57])[0-9]{8}$/
+      if (!reg.test(value)) {
+      callback(new Error("手机号格式不对"));
+    } else {
+      callback();
+    }
+}
+const checkIccard=(rule, value, callback)=>{
+  var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
+    if (!reg.test(value)) {
+      callback(new Error("身份证号格式不对"));
+    } else {
+      callback();
+    }
+}
 const addMemberRules = reactive({
   serialNumber: [{ required: true, message: "学号不能为空", trigger: "blur" }],
   name: [{ required: true, message: "姓名不能为空", trigger: "blur" }],
   identity: [{ required: true, message: "身份不能为空", trigger: "change" }],
-  icCard: [{ required: true, message: "身份证号不能为空", trigger: "blur" }],
+  icCard: [{ required: true, message: "身份证号不能为空", trigger: "blur" },{ validator: checkIccard, trigger: "blur" }],
   sex: [{ required: true, message: "性别不能为空", trigger: "blur" }],
   department: [{ required: true, message: "部门不能为空", trigger: "change" }],
   facePhoto: [{ required: true, message: "人脸照片不能为空", trigger: "blur" }],
@@ -1252,7 +1331,8 @@ const addMemberRules = reactive({
   class: [{ required: true, message: "班级不能为空", trigger: "change" }],
   // school: [{ required: true, message: "校区不能为空", trigger: "blur" }],
   // dormitory: [{ required: true, message: "宿舍号不能为空", trigger: "blur" }],
-  phone: [{ required: true, message: "手机号不能为空", trigger: "blur" }],
+  phone: [{ required: true, message: "手机号不能为空", trigger: "blur" },
+  { validator: checkPhone, trigger: "blur" }],
   contact: [{ required: true, message: "关联人不能为空", trigger: "blur" }],
   // jobName: [{ required: true, message: "职称不能为空", trigger: "blur" }],
   houseAddress: [
@@ -1313,6 +1393,9 @@ const addBatch_currentPage = ref(1); // 当前页
 const addBatch_pageSize = ref(7);
 const addBatch_total = ref(8); // 当前总数
 const upload2 = ref(); // ref 导入文件ref
+const allImgUpload = ref(); // ref 导入图片ref
+const allImgNum = ref(0); // 导入图片的数量
+const allImgShow = ref(false); // 导入时的加载
 const upload2File = ref(); // 批量导入的文件
 const uploadImgList = ref(); // 批量导入的图片列表
 
@@ -1369,8 +1452,12 @@ const moveTree = ref();
 const moveSearchInput = ref(); // 移动部门中关键字搜索
 const treeSelData = reactive({ list: [] }); //
 
-// 注销账号
-// const closeAccountVisible = ref(false);
+// 删除记录页面
+const delRecordDatas=ref() // 删除记录
+const delRecordTotal=ref()// 删除记录数量
+const delRecordCurrentPage=ref(1)
+const delRecordPageSize=ref(8)
+const delRecordShow = ref(false);
 
 // 勾选删除
 const selDelVisible = ref(false);
@@ -1407,11 +1494,11 @@ const getList = async () => {
     },
     params: data,
   });
-  console.log(res, "用户列表");
+  console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "用户列表");
   if (res.data.code == 200) {
     loading.value = false;
-    tableData.list = res.data.data.list;
-    total.value = res.data.data.totalCount;
+    tableData.list = JSON.parse(eds.decryptDes(res.data.data)).list;
+    total.value = JSON.parse(eds.decryptDes(res.data.data)).totalCount;
     // ElMessage({
     //   type: "success",
     //   showClose: true,
@@ -1442,16 +1529,16 @@ const getDepartment = async () => {
     },
     params: data,
   });
-  console.log(res, "部门树形数据");
+  console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "部门树形数据");
   if (res.data.code == 200) {
     loading.value = false;
     if (treeNodeId.value && treeNodeName.value) {
     } else {
-      treeNodeId.value = res.data.data[0].id;
-      treeNodeName.value = res.data.data[0].name;
+      treeNodeId.value = JSON.parse(eds.decryptDes(res.data.data))[0].id;
+      treeNodeName.value = JSON.parse(eds.decryptDes(res.data.data))[0].name;
       getList();
     }
-    dataSource.value = res.data.data;
+    dataSource.value = JSON.parse(eds.decryptDes(res.data.data));
     // ElMessage({
     //   type: "success",
     //   showClose: true,
@@ -1644,8 +1731,8 @@ const classDataList = async () => {
     },
     // params: data,
   });
-  console.log(identity, "身份下拉数据");
-  identityData.value = identity.data.data;
+  console.log(identity,JSON.parse(eds.decryptDes(identity.data.data)), "身份下拉数据");
+  identityData.value = JSON.parse(eds.decryptDes(identity.data.data));
   let grade = await axios({
     method: "get",
     url: api.value + "/wanzai/api/smartGrade/querySmartGrades",
@@ -1656,7 +1743,7 @@ const classDataList = async () => {
     // params: data,
   });
   console.log(grade, "年级下拉数据");
-  gradeData.value = grade.data.data;
+  gradeData.value = JSON.parse(eds.decryptDes(grade.data.data));
 
   let timeGroupId = await axios({
     method: "get",
@@ -1668,7 +1755,7 @@ const classDataList = async () => {
     // params: data,
   });
   console.log(timeGroupId, "时间组下拉数据");
-  timeGroupList.value = timeGroupId.data.data;
+  timeGroupList.value = JSON.parse(eds.decryptDes(timeGroupId.data.data));
 };
 // 联系人分页数据
 const studentList = async () => {
@@ -1688,9 +1775,11 @@ const studentList = async () => {
     },
     params: data,
   });
-  console.log(res, "联系人数据");
-  conteactListData.value = res.data.data.list;
-  conteactListTotalPage.value = res.data.data.totalPage;
+  console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "联系人数据");
+  conteactListData.value = JSON.parse(eds.decryptDes(res.data.data)).list;
+  conteactListTotalPage.value = JSON.parse(
+    eds.decryptDes(res.data.data)
+  ).totalPage;
 };
 // 职务分页数据
 const postList = async () => {
@@ -1706,8 +1795,17 @@ const postList = async () => {
     },
     params: data,
   });
-  console.log(post, "职务下拉数据");
-  postData.value = post.data.data;
+  console.log(post);
+  if (post.data.code == 200) {
+    console.log(
+      post,
+      JSON.parse(eds.decryptDes(post.data.data)),
+      "职务下拉数据"
+    );
+    postData.value = JSON.parse(eds.decryptDes(post.data.data));
+  } else {
+    postData.value = [];
+  }
 };
 // 班级下拉数据
 const classsList = async () => {
@@ -1724,7 +1822,9 @@ const classsList = async () => {
     params: data,
   });
   console.log(classs, "班级下拉数据");
-  classsData.value = classs.data.data;
+  if(classs.data.code==200){
+    classsData.value = JSON.parse(eds.decryptDes(classs.data.data));
+  }
 };
 // 改变身份加载职务数据
 const identityChange = () => {
@@ -1779,7 +1879,7 @@ const addStudentListScroll = () => {
             console.log(res, "联系人数据");
             conteactListData.value = [
               ...conteactListData.value,
-              ...res.data.data.list,
+              ...JSON.parse(eds.decryptDes(res.data.data)).list,
             ];
           } else {
             console.log("数据全部加载完成");
@@ -1799,8 +1899,10 @@ const conteactMethod = (query) => {
 // 添加成员弹窗
 const addMemberClick = () => {
   addMemberTitle.value = "添加成员";
+  conteactListCurrentPage.value=1 // 联系人分页重新赋值为1
   homeShow.value = false;
   addMemberShow.value = true;
+  delRecordShow.value=false
   studentList();
   addStudentListScroll();
   addMemberRuleForm.serialNumber = "";
@@ -1833,8 +1935,10 @@ const addMemberClick = () => {
 // 编辑成员弹窗
 const editClick = (row) => {
   addMemberTitle.value = "编辑成员";
+  conteactListCurrentPage.value=1  // 联系人分页重新赋值为1
   homeShow.value = false;
   addMemberShow.value = true;
+  delRecordShow.value=false
   studentList();
   addStudentListScroll();
   console.log(row, "编辑");
@@ -1860,7 +1964,11 @@ const editClick = (row) => {
   addMemberRuleForm.dormitory = row.dormitoryNumber; // 宿舍号
   addMemberRuleForm.phone = row.phone; // 手机号
   if (row.affiliate) {
-    addMemberRuleForm.contact = row.affiliate.split(","); // 联系人
+    let arr=[]
+    row.affiliates.forEach(item=>{
+arr.push(`${item.name}·${item.id}`)
+    })
+    addMemberRuleForm.contact = arr; // 联系人
   } else {
     addMemberRuleForm.contact = [];
   }
@@ -1877,6 +1985,13 @@ const confirmAddMember = async (formEl) => {
   if (!formEl) return;
   await formEl.validate(async (valid, fields) => {
     if (valid) {
+    console.log( addMemberRuleForm.contact);
+      let arr=[]
+      addMemberRuleForm.contact.forEach(item=>{
+        let index = item.split("·")
+        arr.push(index[1])
+      })
+      console.log(arr);
       let data = {
         cardNo: addMemberRuleForm.serialNumber, // 学号
         name: addMemberRuleForm.name, // 姓名
@@ -1893,7 +2008,7 @@ const confirmAddMember = async (formEl) => {
         campus: addMemberRuleForm.school, // 校区
         dormitoryNumber: addMemberRuleForm.dormitory, // 宿舍号
         phone: addMemberRuleForm.phone, // 手机号
-        affiliate: addMemberRuleForm.contact, // 联系人
+        affiliate: arr, // 联系人
         title: addMemberRuleForm.jobName, // 职称
         address: addMemberRuleForm.houseAddress, // 家庭住址
         nation: addMemberRuleForm.nation, // 民族
@@ -1936,6 +2051,7 @@ const confirmAddMember = async (formEl) => {
         });
         homeShow.value = true;
         addMemberShow.value = false;
+        delRecordShow.value=false
         addMemberRef.value.resetFields();
         getList();
       } else {
@@ -1954,6 +2070,7 @@ const confirmAddMember = async (formEl) => {
 const addMemberConcel = () => {
   addMemberShow.value = false;
   homeShow.value = true;
+  delRecordShow.value=false
   addMemberRef.value.resetFields();
   addMemberRuleForm.id = "";
 };
@@ -2074,6 +2191,7 @@ const handleExceed = (files) => {
 const addBatchClick = () => {
   addBatchShow.value = true;
   homeShow.value = false;
+  delRecordShow.value=false
   nextTick(() => {
     const Ele = document.querySelector(".img-upload-demo .el-upload__input");
     Ele["webkitdirectory"] = true;
@@ -2082,34 +2200,36 @@ const addBatchClick = () => {
 const addBatchConcel = () => {
   homeShow.value = true;
   addBatchShow.value = false;
+  delRecordShow.value=false
+  upload2File.value = "";
+  uploadImgList.value = "";
+  allImgUpload.value.clearFiles();
+  upload2.value.clearFiles();
 };
-// 批量导入按钮
-const bulkImport = async () => {
-  uploadImgList.value = uploadImgList.value.slice(0);
-  console.log(uploadImgList.value, "拼接好的图片地址");
-  console.log(upload2File.value, "导入的文件");
-
-  const formData = new FormData();
-  formData.append("file", upload2File.value);
-  formData.append("headImage", uploadImgList.value);
 
+// 打开删除记录页面
+const DelRecordClick=async ()=>{
+  delRecordShow.value=true
+  delBatchShow.value = false;
+  homeShow.value = false;
+  addMemberTitle.value='删除记录'
+  let data = {
+    currentPage:delRecordCurrentPage.value,
+    pageCount:delRecordPageSize.value,
+  };
   let res = await axios({
-    method: "post",
-    url: api.value + "/wanzai/api/smartUser/importExcelUsers",
+    method: "get",
+    url: api.value + "/wanzai/api/smartUser/queryUserDeletePage",
     headers: {
       // token: sessionStorage.getItem("token"),
       // user_head: sessionStorage.getItem("userhead"),
     },
-    data: formData,
+    params: data,
   });
-  console.log(res, "确定批量导入");
+  console.log(res, JSON.parse(eds.decryptDes(res.data.data)), "删除记录分页");
   if (res.data.code == 200) {
-    ElMessage({
-      type: "success",
-      showClose: true,
-      message: res.data.message,
-      center: true,
-    });
+    delRecordDatas.value = JSON.parse(eds.decryptDes(res.data.data)).list;
+    delRecordTotal.value = JSON.parse(eds.decryptDes(res.data.data)).totalCount;
   } else {
     ElMessage({
       type: "error",
@@ -2118,7 +2238,14 @@ const bulkImport = async () => {
       center: true,
     });
   }
-};
+}
+// 关闭删除记录页面
+const delRecordClose=()=>{
+  delRecordShow.value=false
+  delBatchShow.value = false;
+  homeShow.value = true;
+}
+
 // 批量导入模板下载
 const downLoadtempAdd = async () => {
   let res = await axios({
@@ -2130,10 +2257,14 @@ const downLoadtempAdd = async () => {
     },
     // params: data,
   });
-  console.log(res, "批量导入模板下载");
+  console.log(
+    res,
+    JSON.parse(eds.decryptDes(res.data.data)),
+    "批量导入模板下载"
+  );
 
   if (res.data.code == 200) {
-    var downloadPath = res.data.data;
+    var downloadPath = JSON.parse(eds.decryptDes(res.data.data));
     // window.open(downloadPath);
     window.location.href = downloadPath;
     var downloadLink = document.createElement("a");
@@ -2247,25 +2378,30 @@ const handlePreviewImgUpload = (file) => {
 };
 // 限制上传图片的大小
 const beforeAvatarUploadImgUpload = (rawFile) => {
-  console.log(rawFile.type, "文件类型");
-  if (rawFile.type !== "image/jpeg" && rawFile.type !== "image/png") {
+  // console.log(rawFile.type, "文件类型");
+  // console.log(rawFile.type == "image/jpeg",rawFile.type == "image/png");
+  
+  if (rawFile.type == "image/jpeg" || rawFile.type == "image/png") {
+    if (rawFile.size / 1024 / 1024 > 2) {
+      ElMessage.error("图片的大小不能超过2MB!");
+      return false;
+    }
+  } else {
     ElMessage.error("文件格式必须为jpg或png格式!");
     return false;
-  } else if (rawFile.size / 1024 / 1024 > 2) {
-    ElMessage.error("图片的大小不能超过2MB!");
-    return false;
   }
   return true;
 };
 // 添加照片时往fileList列表中添加图片信息
 const handleChangeImgUpload = async (file, fileLists) => {
-  console.log(file, "1111");
+  // console.log(file, "重新上传图片");
   // fileList.list.push(file);
   uploadImgList.value = "";
+  // allImgUpload.value.clearFiles();
 };
 // 可以获取图片参数
 const handleUploadImgUpload = async (file) => {
-  console.log(file, "22222222");
+  // console.log(file, "22222222");
   const cos = new COS({
     SecretId: "AKIDCPVZdcWIxgHpy5FYxVyPiqkZGrhdXUBg",
     SecretKey: "NkyCN3cz97qKaeXLvHOGxOcdS8f184pL",
@@ -2274,7 +2410,7 @@ const handleUploadImgUpload = async (file) => {
     Region: "ap-shanghai",
   });
   const files = file.file;
-  console.log(files);
+  // console.log(files);
   const compressKey = file.file.name; // 设置上传到 COS 后的文件名
   cos.putObject(
     {
@@ -2283,14 +2419,15 @@ const handleUploadImgUpload = async (file) => {
       Key: compressKey,
       Body: files,
       onProgress: function (progressData) {
-        console.log(JSON.stringify(progressData));
+        // console.log(JSON.stringify(progressData));
       },
     },
     function (err, data) {
       if (err) {
         console.error(err);
       } else {
-        console.log(data, "图片获取成功");
+        // console.log(data, "图片获取成功");
+
         uploadImgList.value =
           uploadImgList.value + "," + "https://" + data.Location;
         // 成功
@@ -2299,6 +2436,74 @@ const handleUploadImgUpload = async (file) => {
   );
 };
 
+// 文件上传成功时的钩子
+const handleSuccessImgUpload = (response, uploadFile, uploadFiles) => {
+  // console.log(response,uploadFile,uploadFiles,"上传成功");
+  console.log(uploadFiles.length, "上传成功");
+};
+// 重置按钮 重置上传文件
+const resetImport=()=>{
+  upload2File.value = "";
+  uploadImgList.value = "";
+  allImgUpload.value.clearFiles();
+  upload2.value.clearFiles();
+}
+// 批量导入按钮
+const bulkImport = async () => {
+  allImgShow.value=true;
+  if (upload2File.value && uploadImgList.value) {
+  } else {
+    allImgShow.value=false;
+    ElMessage({
+      type: "warning",
+      showClose: true,
+      message: "上传文件或图片不能为空",
+      center: true,
+    });
+    return false;
+  }
+  // uploadImgList.value = uploadImgList.value.slice(1);
+  console.log(uploadImgList.value, "拼接好的图片地址");
+  console.log(upload2File.value, "导入的文件");
+
+  const formData = new FormData();
+  formData.append("file", upload2File.value);
+  formData.append("headImage", uploadImgList.value);
+
+  let res = await axios({
+    method: "post",
+    url: api.value + "/wanzai/api/smartUser/importExcelUsers",
+    headers: {
+      // token: sessionStorage.getItem("token"),
+      // user_head: sessionStorage.getItem("userhead"),
+    },
+    data: formData,
+  });
+  console.log(res, "确定批量导入");
+  if (res.data.code == 200) {
+    getList();
+    upload2File.value = "";
+    uploadImgList.value = "";
+    allImgUpload.value.clearFiles();
+    upload2.value.clearFiles();
+    allImgShow.value=false;
+    ElMessage({
+      type: "success",
+      showClose: true,
+      message: res.data.message,
+      center: true,
+    });
+  } else {
+    allImgShow.value=false;
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.data.message,
+      center: true,
+    });
+  }
+};
+
 // 分页
 const handleAddBatch = (value) => {
   // console.log(value);
@@ -2309,10 +2514,12 @@ const handleAddBatch = (value) => {
 const delBatchClick = () => {
   delBatchShow.value = true;
   homeShow.value = false;
+  delRecordShow.value=false
 };
 const delBatchConcel = () => {
   homeShow.value = true;
   delBatchShow.value = false;
+  delRecordShow.value=false
 };
 // 移出照片
 const handleRemove3 = (uploadFile, uploadFiles) => {
@@ -2404,7 +2611,7 @@ const getMoveData = async () => {
   });
   console.log(res, "部门树形数据");
   if (res.data.code == 200) {
-    moveData.value = res.data.data;
+    moveData.value = JSON.parse(eds.decryptDes(res.data.data));
     // 判断有没有右边有没有勾选好的部门,有就重新给树形图自动勾上
     if (treeSelData.list.length) {
       moveTree.value.setCheckedNodes(treeSelData.list);
@@ -2691,7 +2898,8 @@ onUnmounted(() => {
     box-shadow: 0px 3px 10px rgba(0, 97, 255, 0.2);
     background-color: #fff;
 
-    .el-tree-node__content {
+    :deep(.el-tree-node__content) {
+      cursor: auto;
       .custom-tree-node {
         flex: 1;
         display: flex;
@@ -2702,6 +2910,7 @@ onUnmounted(() => {
         .title {
           display: flex;
           align-items: center;
+          cursor: pointer;
         }
         .nodeClick {
           color: rgb(0, 97, 255);
@@ -2987,6 +3196,18 @@ onUnmounted(() => {
           .img-upload-demo {
             :deep(.el-upload-list) {
               // display: none;
+              max-height: 130px;
+              overflow: auto;
+              // 整个滚动条
+              &::-webkit-scrollbar-track {
+                background-color: #daeeff;
+              }
+              // 滚动条的滚动区域(轨道)
+              &::-webkit-scrollbar {
+                background-color: #0888f8;
+                height: 3px;
+                width: 4px;
+              }
             }
           }
         }
@@ -3162,6 +3383,133 @@ onUnmounted(() => {
       // }
     }
   }
+   // 删除记录页面
+   .delRecord {
+    flex: 1;
+    height: 100%;
+    border-radius: 8px;
+    box-shadow: 0px 3px 10px rgba(0, 97, 255, 0.2);
+    background-color: #fff;
+
+    .scorll {
+      overflow: auto;
+      height: calc(100% - 61px);
+    }
+    .left {
+      // width: calc(100wh - 40px);
+      display: flex;
+      align-items: center;
+      height: 60px;
+      padding: 0 30px;
+      border-bottom: 1px solid #ccc;
+      color: rgb(0, 0, 0);
+      font-size: 20px;
+      font-weight: 600;
+      img{
+        width: 18px;
+        height: 18px;
+      }
+      .add{
+        margin-left: 20px;
+      }
+    }
+
+    .middle {
+      width: 96%;
+      margin: 0 auto;
+      color: #000;
+    }
+      
+    .footer {
+      width: 96%;
+      height: calc(100% - 100px);
+      margin: 15px auto 25px;
+      min-height: 300px;
+
+      .el-table--fit {
+        height: 100% !important;
+        :deep(.el-table__header-wrapper) {
+          background-color: #000;
+          font-size: 14px;
+
+          tr {
+            // color: #000;
+          }
+        }
+
+        :deep(.el-table__row) {
+          height: 50px;
+          font-size: 14px;
+          // color: #000;
+          &:hover {
+            td {
+              background-color: rgba(223, 236, 254, 1);
+            }
+          }
+        }
+
+        :deep(.el-table__row):nth-child(2n) {
+          .el-table-fixed-column--right {
+            background-color: rgba(240, 243, 247, 1);
+          }
+        }
+
+        :deep(.el-table__row td) {
+          padding: 0;
+          border: 0;
+          .img {
+            display: flex;
+            align-items: center;
+            justify-content: center;
+            margin: 5px 0;
+            img {
+              width: 60px;
+              height: 60px;
+              cursor: pointer;
+            }
+          }
+        }
+
+        .el-button--primary {
+          margin-left: 5px;
+        }
+
+        :deep(.el-table__body .even) {
+          background-color: #fff;
+        }
+
+        :deep(.el-table__body .odd) {
+          background-color: rgba(240, 243, 247, 1);
+        }
+
+        :deep(.edit) {
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          color: rgba(111, 182, 184, 1);
+        }
+
+        :deep(.look) {
+          padding: 0 10px;
+          cursor: pointer;
+          color: rgba(30, 125, 251, 1);
+        }
+
+        .del {
+          padding: 0 10px;
+          color: rgba(212, 48, 48, 1);
+          cursor: pointer;
+        }
+
+        // :deep(.look):hover {
+        //   color: red;
+        // }
+        // :deep(.del):hover {
+        //   color: red;
+        // }
+      }
+    }
+  }
   .bgImg {
     position: absolute;
     left: 0;

Разница между файлами не показана из-за своего большого размера
+ 3738 - 0
src/views/user/user1.vue