Преглед изворни кода

迎新系统管理平台新需求调整

hzj18279462576@163.com пре 10 месеци
родитељ
комит
d0fc7780b2

+ 1 - 1
index.html

@@ -4,7 +4,7 @@
     <meta charset="UTF-8" />
     <link rel="icon" type="image/svg+xml" href="./src/assets/img/logo.png" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <title>迎新宿舍管理系统</title>
+    <title>迎新系统管理平台</title>
   </head>
   <body>
     <div id="app"></div>

+ 1 - 1
src/layout/Navbar.vue

@@ -21,7 +21,7 @@
     /></el-icon>
     <div class="logo">
       <!-- <img src="@/assets/img/nanchang.png" style="width: 30px; height: 30px" /> -->
-      <span>迎新宿舍管理系统</span>
+      <span>迎新系统管理平台</span>
     </div>
     <div class="login">
       <span class="dateTime">{{ dateTime }}</span>

+ 54 - 11
src/views/bed/bed.vue

@@ -445,7 +445,6 @@
         <el-form-item label="寝室号 :" prop="dormitory">
           <el-select
             clearable
-            :disabled="dialongTitle == '编辑床位信息'"
             v-model="ruleForm.dormitory"
             @change="dormitoryFormChange"
             placeholder="请选择寝室号"
@@ -481,11 +480,10 @@
             @change="collegeFormChange"
             v-model="ruleForm.college"
             clearable
-            disabled
             placeholder="请选择所属学院"
           >
             <el-option
-              v-for="i in collegeData"
+              v-for="i in useCollegeData"
               :key="i.id"
               :label="i.name"
               :value="`${i.name},${i.id}`"
@@ -782,6 +780,7 @@
           class="queding"
           type="primary"
           @click="projectImportConfirm(buildRef)"
+          :loading="buildImportLoading"
         >
           &nbsp;&nbsp;确认导入&nbsp;&nbsp;
         </el-button>
@@ -1153,6 +1152,7 @@ const cancelChangeBed = () => {
 const buildImportVisible = ref(false);
 const buildRef = ref();
 const buildFile = ref();
+const buildImportLoading = ref(false);
 
 // 校区数据
 const schoolData = ref([]);
@@ -1164,6 +1164,7 @@ const dormitoryData = ref([]);
 const dormitoryFormData = ref([]);
 // 学院
 const collegeData = ref([]);
+const useCollegeData = ref([]); // 根据床位号获取学院
 // 专业
 const majorData = ref([]);
 const majorFormData = ref([]);
@@ -1389,14 +1390,24 @@ const buildFormChange = async (val) => {
 const dormitoryFormChange = (val) => {
   // 选择寝室号 时判断是 所属学院和性别
   if (val) {
-    dormitoryFormData.value.forEach((i) => {
-      if (i.id == val.split(",")[1]) {
-        ruleForm.college = `${i.college},${i.collegeId}`;
-        collegeFormChange(ruleForm.college);
-        ruleForm.sex = i.sex;
-        ruleForm.retentionState = i.retentionState;
-      }
+    useCollegeList(val.split(",")[1]).then(() => {
+      dormitoryFormData.value.forEach((i) => {
+        if (i.id == val.split(",")[1]) {
+          ruleForm.college = `${i.college.split(',')[0]},${i.collegeId.split(',')[0]}`;
+          collegeFormChange(ruleForm.college);
+          ruleForm.sex = i.sex;
+          ruleForm.retentionState = i.retentionState;
+        }
+      });
     });
+    // dormitoryFormData.value.forEach((i) => {
+    //   if (i.id == val.split(",")[1]) {
+    //     ruleForm.college = `${i.college},${i.collegeId}`;
+    //     collegeFormChange(ruleForm.college);
+    //     ruleForm.sex = i.sex;
+    //     ruleForm.retentionState = i.retentionState;
+    //   }
+    // });
   } else {
     ruleForm.college = null;
     ruleForm.sex = null;
@@ -1531,6 +1542,8 @@ const addlist = () => {
   ruleForm.dormitory = null;
   dormitoryFormData.value = null;
   ruleForm.sex = null;
+
+  useCollegeData.value = [];
   ruleForm.college = null;
   ruleForm.major = null;
   majorFormData.value = null;
@@ -1544,6 +1557,29 @@ const addlist = () => {
   ruleForm.retentionState = null;
   ruleForm.id = null;
 };
+
+const useCollegeList = async (dormitoryId) => {
+  let params = {
+    dormitoryId: dormitoryId,
+  };
+
+  let res = await https.get(
+    "/welcome/api/welcome-dormitory/getColleges",
+    "params",
+    params
+  );
+  console.log(res, "根据寝室号获取学院");
+  if (res.code == 200) {
+    useCollegeData.value = res.data;
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.message,
+      center: true,
+    });
+  }
+};
 // 添加账号
 const updateS = (row) => {
   console.log(row);
@@ -1575,11 +1611,15 @@ const updateS = (row) => {
     ruleForm.dormitory = null;
   }
   ruleForm.sex = row.sex;
+
   if (row.college && row.collegeId) {
-    ruleForm.college = `${row.college},${row.collegeId}`;
+    useCollegeList(row.dormitoryId).then(() => {
+      ruleForm.college = `${row.college},${row.collegeId}`;
+    });
   } else {
     ruleForm.college = null;
   }
+
   majorList(row.collegeId).then(() => {
     if (row.major && row.majorId) {
       ruleForm.major = `${row.major},${row.majorId}`;
@@ -1982,6 +2022,7 @@ const projectImportExceed = (files) => {
 };
 // 导入项目
 const projectImportConfirm = async () => {
+  buildImportLoading.value = true;
   let data = new FormData();
   data.set("file", buildFile.value);
   let res = await https.post(
@@ -1992,6 +2033,8 @@ const projectImportConfirm = async () => {
   console.log(res, "导入项目");
   if (res.code == 200) {
     buildImportVisible.value = false;
+
+    buildImportLoading.value = false;
     getList();
     ElMessage({
       type: "success",

+ 15 - 2
src/views/building/building.vue

@@ -108,9 +108,17 @@
             index="1"
           />
           <el-table-column align="center" prop="schoolName" label="校区名称" />
-          <el-table-column align="center" prop="build" label="楼栋名称" />
+          <el-table-column
+            align="center"
+            prop="build"
+            label="楼栋名称"
+          />
           <el-table-column align="center" prop="sex" label="楼栋性别" />
-          <el-table-column align="center" prop="floors" label="楼栋层数">
+          <el-table-column
+            align="center"
+            prop="floors"
+            label="楼栋层数"
+          >
             <template #default="{ row }">
               <span>{{ row.floors }}</span>
             </template>
@@ -287,6 +295,7 @@
           class="queding"
           type="primary"
           @click="projectImportConfirm(buildRef)"
+          :loading="buildImportLoading"
         >
           &nbsp;&nbsp;确认导入&nbsp;&nbsp;
         </el-button>
@@ -376,6 +385,7 @@ const buildData = ref([]);
 const buildImportVisible = ref(false);
 const buildRef = ref();
 const buildFile = ref();
+const buildImportLoading = ref(false);
 
 const schoolList = async () => {
   let res = await https.get("/welcome/api/welcome-build/schoolGroup", "params");
@@ -710,6 +720,7 @@ const projectImportExceed = (files) => {
 };
 // 导入项目
 const projectImportConfirm = async () => {
+  buildImportLoading.value = true;
   let data = new FormData();
   data.set("file", buildFile.value);
   let res = await https.post(
@@ -720,6 +731,8 @@ const projectImportConfirm = async () => {
   console.log(res, "导入项目");
   if (res.code == 200) {
     buildImportVisible.value = false;
+
+    buildImportLoading.value = false;
     getList();
     ElMessage({
       type: "success",

+ 63 - 12
src/views/dataOverview/dataOverview.vue

@@ -86,9 +86,28 @@
         <div class="system_title">
           <h4>学院新生报到情况</h4>
         </div>
-        <div class="total">
-          <span>总数 : </span
-          ><span style="font-size: 20px">{{ studentTotal }}</span>
+        <div
+          class="total"
+          style="width: 88%; display: flex; justify-content: space-between"
+        >
+          <span>
+            <span>总数 : </span>
+            <span style="font-size: 20px">{{ studentTotal }} / {{ studentTotalP }}%</span>
+          </span>
+          <el-select
+            @change="collegeChange"
+            v-model="searchInput.college"
+            placeholder="请选择院系"
+            clearable
+            style="width: 250px"
+          >
+            <el-option
+              v-for="i in collegeData"
+              :key="i.id"
+              :label="i.name"
+              :value="i.id"
+            />
+          </el-select>
         </div>
         <div id="echarts_register"></div>
       </div>
@@ -149,7 +168,7 @@ const pageSize = ref(10);
 const total = ref(0); // 当前总数
 
 // 为避免解构时失去响应性
-const { name, age, isCollapse, realAge } = storeToRefs(store);
+const { name, age, isCollapse, realAge, collegeRole } = storeToRefs(store);
 
 // 处置情况
 const disposeList = ref([
@@ -161,7 +180,7 @@ const disposeList = ref([
   {
     icon: "yubao",
     num: 1,
-    title: "预报到人数",
+    title: "预报到人数/缴费率",
   },
   {
     icon: "jiaofei",
@@ -201,7 +220,28 @@ const carSchoolChange = (title) => {
 
 // 学院新生报到情况
 let registerEcharts = null;
+const searchInput = reactive({
+  college: "",
+});
 const studentTotal = ref();
+const studentTotalP=ref()
+// 学院
+const collegeData = ref([]);
+const collegeList = async () => {
+  // collegeData.value = collegeRole.value;
+  let res = await https.get("/welcome/api/welcomeOrg/getColleges", "params");
+  console.log(res, "学院数据");
+  if (res.code == 200) {
+    collegeData.value = res.data;
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.message,
+      center: true,
+    });
+  }
+};
 
 // 学院新生报到情况
 let trafficEcharts = null;
@@ -240,13 +280,14 @@ const studentOverview = async () => {
       {
         icon: "jiaofei",
         num: res.data.payCount,
-        title: "已缴费人数",
+        numTotal: `${res.data.payRate}%`,
+        title: "已缴费人数 / 缴费率",
       },
       {
         icon: "ruzhu",
         num: res.data.checkInBedTotal,
         numTotal: `${res.data.registrationRate}%`,
-        title: "已入住床位数 / 报到率",
+        title: "已入住床位数 / 入住率",
       },
     ];
   } else {
@@ -268,14 +309,19 @@ const callerClick = () => {
 const register = async () => {
   let dom = document.getElementById("echarts_register");
   registerEcharts = echarts.init(dom);
+  let params = {
+    collegeId: searchInput.college,
+  };
   let res = await https.get(
     "/welcome/api/welcomeStudent/studentRegister",
-    "params"
+    "params",
+    params
   );
   console.log(res, "新生报到情况");
   if (res.code == 200) {
     if (res.data.length) {
       studentTotal.value = res.data[res.data.length - 1].count;
+      studentTotalP.value = res.data[res.data.length - 1].rate;
     }
     // const data = genData(20);
     const data = {
@@ -286,9 +332,9 @@ const register = async () => {
     let manTotal = 0;
     data.seriesData = arr.map((i) => {
       manTotal += i.count;
-      data.legendData.push(i.collegeName);
+      data.legendData.push(i.name);
       return {
-        name: i.collegeName,
+        name: i.name,
         value: i.count,
       };
     });
@@ -364,6 +410,10 @@ const register = async () => {
     });
   }
 };
+const collegeChange=()=>{
+  register()
+} 
+
 const traffic = async () => {
   var chartDom = document.getElementById("echarts_traffic");
   trafficEcharts = echarts.init(chartDom);
@@ -412,7 +462,7 @@ const traffic = async () => {
             rich: {
               time: {
                 // fontSize: 10,
-                color: "#999",
+                color: "#000",
               },
               percent: {
                 // fontSize: 10,
@@ -578,6 +628,7 @@ onMounted(() => {
   traffic();
   gender();
   studentStay();
+  collegeList();
   window.addEventListener("resize", updateChartSize);
 });
 
@@ -661,7 +712,7 @@ onBeforeUnmount(() => {
       margin: 0 10px;
       height: 133px;
       border: 1px solid rgba(143, 143, 143, 1);
-      border-radius: 6.98px;
+      border-radius: 0.98px;
       background: rgba(250, 252, 255, 1);
       display: flex;
       align-items: center;

+ 90 - 54
src/views/dormitory/dormitory.vue

@@ -188,16 +188,8 @@
           }"
         >
           <el-table-column type="selection" align="center" width="55" />
-          <el-table-column
-            align="center"
-            prop="school"
-            label="校区名称"
-          />
-          <el-table-column
-            align="center"
-            prop="build"
-            label="楼栋名称"
-          />
+          <el-table-column align="center" prop="school" label="校区名称" />
+          <el-table-column align="center" prop="build" label="楼栋名称" />
           <el-table-column align="center" prop="dormitory" label="寝室号" />
           <el-table-column
             width="100"
@@ -205,11 +197,7 @@
             prop="sex"
             label="寝室性别"
           />
-          <el-table-column
-            align="center"
-            prop="college"
-            label="所属学院"
-          />
+          <el-table-column align="center" prop="college" label="所属学院" />
           <!-- <el-table-column align="center" prop="major" label="专业" /> -->
           <el-table-column
             width="100"
@@ -347,7 +335,7 @@
         </el-form-item>
         <el-form-item label="楼栋名称 :" prop="build">
           <el-select
-          :disabled="dialongTitle == '编辑寝室信息'"
+            :disabled="dialongTitle == '编辑寝室信息'"
             clearable
             v-model="ruleForm.build"
             placeholder="请选择楼栋名称"
@@ -384,6 +372,10 @@
             @change="collegeFormChange"
             v-model="ruleForm.college"
             clearable
+            multiple
+            collapse-tags
+            collapse-tags-tooltip
+            :max-collapse-tags="2"
             placeholder="请选择所属学院"
           >
             <el-option
@@ -474,6 +466,7 @@
           class="queding"
           type="primary"
           @click="projectImportConfirm(buildRef)"
+          :loading="buildImportLoading"
         >
           &nbsp;&nbsp;确认导入&nbsp;&nbsp;
         </el-button>
@@ -564,6 +557,7 @@ const rules = reactive({
 const buildImportVisible = ref(false);
 const buildRef = ref();
 const buildFile = ref();
+const buildImportLoading = ref(false);
 
 // 校区数据
 const schoolData = ref([]);
@@ -621,7 +615,7 @@ const dormitoryList = async () => {
   let params = {
     schoolId: searchInput.schoolId,
     buildId: searchInput.buildId,
-    accountId:sessionStorage.getItem("accountId"),
+    accountId: sessionStorage.getItem("accountId"),
   };
   let res = await https.get(
     "/welcome/api/welcome-dormitory/dormitoryTGroup",
@@ -640,31 +634,31 @@ const dormitoryList = async () => {
     });
   }
 };
-const majorList = async (flag) => {
-  let params = {
-    collegeId: flag ? flag : searchInput.collegeId,
-  };
-  let res = await https.get(
-    "/welcome/api/welcomeOrg/getMajors",
-    "params",
-    params
-  );
-  console.log(res, "专业数据");
-  if (res.code == 200) {
-    if (flag) {
-      majorFormData.value = res.data;
-    } else {
-      majorData.value = res.data;
-    }
-  } else {
-    ElMessage({
-      type: "error",
-      showClose: true,
-      message: res.message,
-      center: true,
-    });
-  }
-};
+// const majorList = async (flag) => {
+//   let params = {
+//     collegeId: flag ? flag : searchInput.collegeId,
+//   };
+//   let res = await https.get(
+//     "/welcome/api/welcomeOrg/getMajors",
+//     "params",
+//     params
+//   );
+//   console.log(res, "专业数据");
+//   if (res.code == 200) {
+//     if (flag) {
+//       majorFormData.value = res.data;
+//     } else {
+//       majorData.value = res.data;
+//     }
+//   } else {
+//     ElMessage({
+//       type: "error",
+//       showClose: true,
+//       message: res.message,
+//       center: true,
+//     });
+//   }
+// };
 const collegeList = async () => {
   collegeData.value = collegeRole.value;
   // let res = await https.get("/welcome/api/welcomeOrg/getColleges", "params");
@@ -739,18 +733,35 @@ const collegeChange = async (val) => {
   } else {
     majorData.value = null;
   }
-  majorList();
+  // majorList();
 };
+
+// 冒泡排序
+function bubbleSortById(arr) {
+  const n = arr.length;
+  for (let i = 0; i < n - 1; i++) {
+    for (let j = 0; j < n - 1 - i; j++) {
+      if (arr[j].id > arr[j + 1].id) {
+        // 只改这一行
+        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
+      }
+    }
+  }
+  return arr;
+}
 const collegeFormChange = async (val) => {
   console.log(val);
+
+  console.log(ruleForm.college);
+
   // ruleForm.major = null;
-  if (!val) {
-    majorFormData.value = null;
-    return;
-  } else {
-    majorFormData.value = null;
-  }
-  majorList(val.split(",")[1]);
+  // if (!val) {
+  //   majorFormData.value = null;
+  //   return;
+  // } else {
+  //   majorFormData.value = null;
+  // }
+  // majorList(val.split(",")[1]);
 };
 
 // 获取账户列表
@@ -834,7 +845,11 @@ const updateS = (row) => {
   ruleForm.dormitory = row.dormitory;
   ruleForm.sex = row.sex;
   // collegeList().then(()=>{
-  ruleForm.college = `${row.college},${row.collegeId}`;
+  let arr=[]
+  row.college.split(",").forEach((i,ind) => {
+    arr.push(`${i},${row.collegeId.split(',')[ind]}`)
+  });
+  ruleForm.college =arr;
   // })
   // majorList(row.collegeId).then(() => {
   //   ruleForm.major = `${row.major},${row.majorId}`;
@@ -964,6 +979,24 @@ const submitAdd = lodash.debounce(async (formEl) => {
   if (!formEl) return;
   await formEl.validate(async (valid, fields) => {
     if (valid) {
+      let arr = [];
+      ruleForm.college.forEach((i) => {
+        if (i) {
+          arr.push({
+            id: Number(i.split(",")[1]),
+            name: i.split(",")[0],
+          });
+        }
+      });
+      let collegeList = bubbleSortById(arr);
+      let college = [];
+      let collegeId = [];
+      collegeList.forEach((i) => {
+        college.push(i.name);
+        collegeId.push(i.id);
+      });
+      console.log(college.join(","), collegeId.join(","));
+
       let data = {
         school: ruleForm.school.split(",")[0],
         schoolId: ruleForm.school.split(",")[1],
@@ -971,8 +1004,8 @@ const submitAdd = lodash.debounce(async (formEl) => {
         buildId: ruleForm.build.split(",")[1],
         dormitory: ruleForm.dormitory,
         sex: ruleForm.sex,
-        college: ruleForm.college.split(",")[0],
-        collegeId: ruleForm.college.split(",")[1],
+        college: college.join(","),
+        collegeId: collegeId.join(","),
         // major: ruleForm.major.split(",")[0],
         // majorId: ruleForm.major.split(",")[1],
         bedNumber: ruleForm.bedNumber,
@@ -1155,6 +1188,7 @@ const projectImportExceed = (files) => {
 };
 // 导入项目
 const projectImportConfirm = async () => {
+  buildImportLoading.value = true;
   let data = new FormData();
   data.set("file", buildFile.value);
   let res = await https.post(
@@ -1165,6 +1199,8 @@ const projectImportConfirm = async () => {
   console.log(res, "导入项目");
   if (res.code == 200) {
     buildImportVisible.value = false;
+
+    buildImportLoading.value = false;
     getList();
     ElMessage({
       type: "success",
@@ -1183,7 +1219,7 @@ const projectImportConfirm = async () => {
 };
 const cancelProjectImport = () => {
   buildImportVisible.value = false;
-   if (buildRef.value) {
+  if (buildRef.value) {
     buildRef.value.clearFiles();
     buildFile.value = null;
   }

+ 5 - 0
src/views/moneySetting/moneySetting.vue

@@ -285,6 +285,7 @@
           class="queding"
           type="primary"
           @click="projectImportConfirm(buildRef)"
+          :loading="buildImportLoading"
         >
           &nbsp;&nbsp;确认导入&nbsp;&nbsp;
         </el-button>
@@ -388,6 +389,7 @@ const majorFormData = ref([]);
 const buildImportVisible = ref(false);
 const buildRef = ref();
 const buildFile = ref();
+const buildImportLoading=ref(false)
 
 const collegeList = async () => {
   collegeData.value = collegeRole.value;
@@ -737,6 +739,7 @@ const projectImportExceed = (files) => {
 };
 // 导入项目
 const projectImportConfirm = async () => {
+  buildImportLoading.value=true;
   let data = new FormData();
   data.set("file", buildFile.value);
   let res = await https.post(
@@ -747,6 +750,8 @@ const projectImportConfirm = async () => {
   console.log(res, "导入项目");
   if (res.code == 200) {
     buildImportVisible.value = false;
+
+    buildImportLoading.value=false;
     getList();
     ElMessage({
       type: "success",

+ 11 - 9
src/views/role/role.vue

@@ -260,7 +260,7 @@
         <span>角色名称 : &nbsp;&nbsp;</span>
         <el-input
           :clearable="true"
-          :disabled="addRolesTitle=='编辑角色'"
+          :disabled="addRolesTitle == '编辑角色'"
           v-model="addRoles.roleName"
           class="w-50 m-2"
           style="width: 450px"
@@ -435,8 +435,8 @@
                   />
                 </td>
               </tr>
-               <!-- 选宿舍金额设置 -->
-               <tr align="center">
+              <!-- 选宿舍金额设置 -->
+              <tr align="center">
                 <td>选宿舍金额设置</td>
                 <td>/</td>
                 <td>
@@ -495,7 +495,7 @@
                   />
                 </td>
               </tr>
-             
+
               <!-- 系统设置 11 -->
               <tr align="center">
                 <td rowspan="2">系统设置</td>
@@ -627,6 +627,7 @@ const addRolesList2 = reactive({
         { name: "编辑", id: 5 },
         { name: "删除", id: 6 },
         { name: "查看页面", id: 7 },
+        { name: "现场报到", id: 8 },
       ],
     },
   ],
@@ -1056,11 +1057,12 @@ const updateS = async (row) => {
     }
     // 选宿舍金额设置 12
     if (addRolesData12.value) {
-      addRoles.dormitoryMoneySetting =
-        row.dormitoryMoneySetting.split(",");
-      addRolesData12.value.setCheckedKeys(
-        row.dormitoryMoneySetting.split(",")
-      );
+      if (row.dormitoryMoneySetting) {
+        addRoles.dormitoryMoneySetting = row.dormitoryMoneySetting.split(",");
+        addRolesData12.value.setCheckedKeys(
+          row.dormitoryMoneySetting.split(",")
+        );
+      }
     }
 
     // 门锁管理 11

+ 135 - 19
src/views/studentInfo/studentInfo.vue

@@ -80,6 +80,17 @@
             </el-select>
           </div>
           <div class="condition">
+            <span>现场报到 :</span>
+            <el-select
+              clearable
+              v-model="searchInput.isRegistered"
+              placeholder="请选择现场报到"
+            >
+              <el-option label="已报到" value="1" />
+              <el-option label="未报到" value="2" />
+            </el-select>
+          </div>
+          <div class="condition">
             <span>姓名 :</span>
             <el-input
               clearable
@@ -271,12 +282,22 @@
               <span v-else>{{ row.dormitory }}</span>
             </template>
           </el-table-column>
-
+          <el-table-column
+            width="160"
+            align="center"
+            prop="isRegistered"
+            label="现在报到"
+          >
+            <template #default="{ row }">
+              <span v-if="row.isRegistered == 1" style="color: #2279ec">已报到</span>
+              <span v-else>未报到</span>
+            </template>
+          </el-table-column>
           <el-table-column
             align="center"
             label="操作"
             fixed="right"
-            min-width="180"
+            min-width="230"
           >
             <template #default="{ row }">
               <div class="options">
@@ -298,6 +319,26 @@
                   @click="deleteS(row)"
                   >删除</span
                 >
+                <span
+                  class="delete"
+                  style="color: #c003a2; margin-left: 15px"
+                  v-if="
+                    store.BtnRole('studentManagementSetting8') &&
+                    row.isRegistered != 1
+                  "
+                  @click="registerS(row, 1)"
+                  >现场报到</span
+                >
+                <span
+                  class="delete"
+                  style="color: #c003a2; margin-left: 15px"
+                  v-if="
+                    store.BtnRole('studentManagementSetting8') &&
+                    row.isRegistered == 1
+                  "
+                  @click="registerS(row, 2)"
+                  >取消报到</span
+                >
               </div>
             </template>
           </el-table-column>
@@ -421,13 +462,13 @@
                 clearable
               />
             </el-form-item>
-            <el-form-item label="毕业中学 :" prop="graduationSchool">
+            <!-- <el-form-item label="毕业中学 :" prop="graduationSchool">
               <el-input
                 v-model.trim="ruleForm.graduationSchool"
                 placeholder="请输入毕业中学"
                 clearable
               />
-            </el-form-item>
+            </el-form-item> -->
             <el-form-item label="政治面貌 :" prop="politicalStatu">
               <el-input
                 v-model.trim="ruleForm.politicalStatu"
@@ -973,10 +1014,10 @@
               <span class="title">考生号 :</span>
               <span class="title_content">{{ ruleForm.examNum }}</span>
             </div>
-            <div class="el-form-item" prop="graduationSchool">
+            <!-- <div class="el-form-item" prop="graduationSchool">
               <span class="title">毕业中学 :</span>
               <span class="title_content">{{ ruleForm.graduationSchool }}</span>
-            </div>
+            </div> -->
             <div class="el-form-item">
               <span class="title">政治面貌 :</span>
               <span class="title_content">{{ ruleForm.politicalStatu }}</span>
@@ -1325,6 +1366,7 @@
           class="queding"
           type="primary"
           @click="projectImportConfirm(buildRef)"
+          :loading="buildImportLoading"
         >
           &nbsp;&nbsp;确认导入&nbsp;&nbsp;
         </el-button>
@@ -1373,8 +1415,9 @@ const searchInput = reactive({
   major: "",
   classstr: "",
   trafficMethod: "",
-  fillStatus:"",
+  fillStatus: "",
   name: "",
+  isRegistered:"",
 }); // 搜索按钮数据
 
 const currentPage = ref(1); // 当前页
@@ -1955,6 +1998,7 @@ const dormitoryChange = async (val) => {
 const buildImportVisible = ref(false);
 const buildRef = ref();
 const buildFile = ref();
+const buildImportLoading = ref(false);
 
 // 获取账户列表
 const getList = async () => {
@@ -1967,7 +2011,8 @@ const getList = async () => {
     classstrId: searchInput.classstr,
     trafficMethod: searchInput.trafficMethod,
     name: searchInput.name,
-    fillStatus:searchInput.fillStatus
+    fillStatus: searchInput.fillStatus,
+    isRegistered: searchInput.isRegistered,
   };
   console.log(params);
 
@@ -2005,7 +2050,8 @@ const resetBtn = lodash.debounce(async () => {
   classstrData.value = null;
   searchInput.trafficMethod = null;
   searchInput.name = null;
-  searchInput.fillStatus=null
+  searchInput.fillStatus = null;
+  searchInput.isRegistered = null;
   getList();
 }, 300);
 
@@ -2164,10 +2210,10 @@ const updateS = async (row) => {
     majorList(resData.collegeId).then(() => {
       ruleForm.major = `${resData.major},${resData.majorId}`;
       classstrList(resData.majorId).then(() => {
-        if(resData.classstr){
+        if (resData.classstr) {
           ruleForm.classstr = `${resData.classstr},${resData.classstrId}`;
-        }else{
-          ruleForm.classstr = null
+        } else {
+          ruleForm.classstr = null;
         }
       });
     });
@@ -2182,13 +2228,13 @@ const updateS = async (row) => {
     // 填报明细
     ruleForm.phone = resData.phone;
 
-    if (ruleForm.oprovince) {
+    if (resData.oprovince) {
       ruleForm.oprovince = `${resData.oprovince},${resData.oprovinceId}`;
       cityList("籍贯").then(() => {
-        if (ruleForm.ocity) {
+        if (resData.ocity) {
           ruleForm.ocity = `${resData.ocity},${resData.ocityId}`;
           districtList("籍贯").then(() => {
-            if (ruleForm.odistrict) {
+            if (resData.odistrict) {
               ruleForm.odistrict = `${resData.odistrict},${resData.odistrictId}`;
             }
           });
@@ -2196,13 +2242,13 @@ const updateS = async (row) => {
       });
     }
 
-    if (ruleForm.province) {
+    if (resData.province) {
       ruleForm.province = `${resData.province},${resData.provinceId}`;
       cityList().then(() => {
-        if (ruleForm.city) {
+        if (resData.city) {
           ruleForm.city = `${resData.city},${resData.cityId}`;
           districtList().then(() => {
-            if (ruleForm.district) {
+            if (resData.district) {
               ruleForm.district = `${resData.district},${resData.districtId}`;
             }
           });
@@ -2271,6 +2317,71 @@ const deleteS = async (row) => {
       loading.value = false;
     });
 };
+const registerS = async (row, flag) => {
+  if (flag == 1) {
+    let data = {
+      id: row.id,
+      isRegistered: flag, //已报到:1,未报到:2,为空默认是未报到
+    };
+    let res = await https.post(
+      "/welcome/api/welcomeStudent/isRegistered",
+      "data",
+      data
+    );
+    if (res.code == 200) {
+      ElMessage({
+        type: "success",
+        showClose: true,
+        message: res.message,
+        center: true,
+      });
+      getList();
+    } else {
+      ElMessage({
+        type: "error",
+        showClose: true,
+        message: res.message,
+        center: true,
+      });
+    }
+  } else if (flag != 1) {
+    ElMessageBox.confirm("是否取消报到?", "提示!!!", {
+      confirmButtonText: "确认",
+      cancelButtonText: "取消",
+      type: "warning",
+    })
+      .then(async () => {
+        let data = {
+          id: row.id,
+          isRegistered: flag, //已报到:1,未报到:2,为空默认是未报到
+        };
+        let res = await https.post(
+          "/welcome/api/welcomeStudent/isRegistered",
+          "data",
+          data
+        );
+        if (res.code == 200) {
+          ElMessage({
+            type: "success",
+            showClose: true,
+            message: res.message,
+            center: true,
+          });
+          getList();
+        } else {
+          ElMessage({
+            type: "error",
+            showClose: true,
+            message: res.message,
+            center: true,
+          });
+        }
+      })
+      .catch(() => {
+        loading.value = false;
+      });
+  }
+};
 const arriveTimeChange = (val) => {
   console.log(val);
 };
@@ -2626,7 +2737,8 @@ const buildExportbtn = async () => {
     classstrId: searchInput.classstr,
     trafficMethod: searchInput.trafficMethod,
     name: searchInput.name,
-    fillStatus:searchInput.fillStatus
+    fillStatus: searchInput.fillStatus,
+    isRegistered: searchInput.isRegistered,
   };
   let res = await https.getBlob(
     "/welcome/api/welcomeStudent/welcomeStudentExport",
@@ -2703,6 +2815,8 @@ const projectImportExceed = (files) => {
 };
 // 导入项目
 const projectImportConfirm = async () => {
+  buildImportLoading.value = true;
+
   let data = new FormData();
   data.set("file", buildFile.value);
   let res = await https.post(
@@ -2713,6 +2827,8 @@ const projectImportConfirm = async () => {
   console.log(res, "导入项目");
   if (res.code == 200) {
     buildImportVisible.value = false;
+
+    buildImportLoading.value = false;
     getList();
     ElMessage({
       type: "success",