Explorar o código

基础管理批量删除

zhangjie %!s(int64=3) %!d(string=hai) anos
pai
achega
7fc8a01500

+ 2 - 2
src/mixins/common.js

@@ -1,8 +1,8 @@
 export default {
   methods: {
-    deletePageLastItem() {
+    deletePageLastItem(len = 1) {
       let page = this.current || 1;
-      if (this.$refs.TableList.data.length === 1) {
+      if (this.$refs.TableList.data.length === len) {
         page = page > 1 ? page - 1 : 1;
       }
       this.toPage && this.toPage(page);

+ 5 - 2
src/modules/base/api.js

@@ -180,6 +180,9 @@ export const studentListQuery = datas => {
 export const deleteStudent = idList => {
   return $postParam("/api/admin/basic/student/delete_batch", { idList });
 };
+export const deleteFilterStudent = datas => {
+  return $postParam("/api/admin/basic/student/delete_by_condition", datas);
+};
 export const updateStudent = datas => {
   return $post("/api/admin/basic/student/save", datas);
 };
@@ -218,8 +221,8 @@ export const semesterSetInUsed = id => {
 export const majorListQuery = datas => {
   return $postParam("/api/admin/basic/major/query", datas);
 };
-export const deleteMajor = id => {
-  return $postParam("/api/admin/basic/major/delete", { id });
+export const deleteMajor = idList => {
+  return $postParam("/api/admin/basic/major/delete", { idList });
 };
 export const updateMajor = datas => {
   return $post("/api/admin/basic/major/save", datas);

+ 39 - 1
src/modules/base/views/ClazzManage.vue

@@ -22,6 +22,13 @@
         </el-form-item>
       </el-form>
       <div class="part-box-action">
+        <el-button
+          v-if="checkPrivilege('button', 'delete')"
+          type="danger"
+          icon="el-icon-delete"
+          @click="toBatchDelete"
+          >批量删除</el-button
+        >
         <el-button
           v-if="checkPrivilege('button', 'add')"
           type="primary"
@@ -32,7 +39,16 @@
       </div>
     </div>
     <div class="part-box part-box-pad">
-      <el-table ref="TableList" :data="dataList">
+      <el-table
+        ref="TableList"
+        :data="dataList"
+        @selection-change="handleSelectionChange"
+      >
+        <el-table-column
+          type="selection"
+          width="55"
+          align="center"
+        ></el-table-column>
         <el-table-column
           type="index"
           label="序号"
@@ -103,6 +119,7 @@ export default {
       size: this.GLOBAL.pageSize,
       total: 0,
       dataList: [],
+      multipleSelection: [],
       curRow: {}
     };
   },
@@ -123,6 +140,7 @@ export default {
       this.total = data.total;
     },
     toPage(page) {
+      this.multipleSelection = [];
       this.current = page;
       this.getList();
     },
@@ -134,6 +152,26 @@ export default {
       this.curRow = row;
       this.$refs.ModifyClazz.open();
     },
+    handleSelectionChange(val) {
+      this.multipleSelection = val.map(item => item.id);
+    },
+    toBatchDelete() {
+      if (!this.multipleSelection.length) {
+        this.$message.error("请选择要删除的数据");
+        return;
+      }
+
+      this.$confirm(`确定要删除选中的这些数据吗?`, "提示", {
+        type: "warning"
+      })
+        .then(async () => {
+          await deleteClazz(this.multipleSelection);
+          this.$message.success("删除成功!");
+          this.deletePageLastItem(this.multipleSelection.length);
+          this.multipleSelection = [];
+        })
+        .catch(() => {});
+    },
     toDelete(row) {
       this.$confirm(`确定要删除班级【${row.clazzName}】吗?`, "提示", {
         type: "warning"

+ 40 - 2
src/modules/base/views/MajorManage.vue

@@ -21,6 +21,13 @@
         </el-form-item>
       </el-form>
       <div class="part-box-action">
+        <el-button
+          v-if="checkPrivilege('button', 'delete')"
+          type="danger"
+          icon="el-icon-delete"
+          @click="toBatchDelete"
+          >批量删除</el-button
+        >
         <el-button
           v-if="checkPrivilege('button', 'add')"
           type="primary"
@@ -31,7 +38,16 @@
       </div>
     </div>
     <div class="part-box part-box-pad">
-      <el-table ref="TableList" :data="dataList">
+      <el-table
+        ref="TableList"
+        :data="dataList"
+        @selection-change="handleSelectionChange"
+      >
+        <el-table-column
+          type="selection"
+          width="55"
+          align="center"
+        ></el-table-column>
         <el-table-column
           type="index"
           label="序号"
@@ -101,6 +117,7 @@ export default {
       size: this.GLOBAL.pageSize,
       total: 0,
       dataList: [],
+      multipleSelection: [],
       curRow: {}
     };
   },
@@ -121,6 +138,7 @@ export default {
       this.total = data.total;
     },
     toPage(page) {
+      this.multipleSelection = [];
       this.current = page;
       this.getList();
     },
@@ -132,12 +150,32 @@ export default {
       this.curRow = row;
       this.$refs.ModifyMajor.open();
     },
+    handleSelectionChange(val) {
+      this.multipleSelection = val.map(item => item.id);
+    },
+    toBatchDelete() {
+      if (!this.multipleSelection.length) {
+        this.$message.error("请选择要删除的数据");
+        return;
+      }
+
+      this.$confirm(`确定要删除选中的这些数据吗?`, "提示", {
+        type: "warning"
+      })
+        .then(async () => {
+          await deleteMajor(this.multipleSelection);
+          this.$message.success("删除成功!");
+          this.deletePageLastItem(this.multipleSelection.length);
+          this.multipleSelection = [];
+        })
+        .catch(() => {});
+    },
     toDelete(row) {
       this.$confirm(`确定要删除专业【${row.majorName}】吗?`, "提示", {
         type: "warning"
       })
         .then(async () => {
-          await deleteMajor(row.id);
+          await deleteMajor([row.id]);
           this.$message.success("删除成功!");
           this.deletePageLastItem();
         })

+ 52 - 5
src/modules/base/views/StudentManage.vue

@@ -18,13 +18,27 @@
             @change="campusChange"
           ></campus-select>
         </el-form-item>
+        <el-form-item label="学院:">
+          <college-select
+            v-model="filter.collegeId"
+            placeholder="学院"
+          ></college-select>
+        </el-form-item>
+        <el-form-item label="专业:">
+          <major-select
+            v-model="filter.majorId"
+            :college-id="filter.collegeId"
+            cascader
+            placeholder="专业"
+          ></major-select>
+        </el-form-item>
         <el-form-item label="班级:">
-          <clazz-select
+          <class-select
             v-model="filter.clazzId"
-            :campus-id="filter.campusId"
+            :major-id="filter.majorId"
+            cascader
             placeholder="班级"
-            clearable
-          ></clazz-select>
+          ></class-select>
         </el-form-item>
         <el-form-item>
           <el-button
@@ -36,6 +50,13 @@
         </el-form-item>
       </el-form>
       <div class="part-box-action">
+        <el-button
+          v-if="checkPrivilege('button', 'delete')"
+          type="danger"
+          icon="el-icon-delete"
+          @click="toBatchDelete"
+          >批量删除</el-button
+        >
         <el-button
           type="success"
           icon="el-icon-download"
@@ -127,7 +148,7 @@
 </template>
 
 <script>
-import { studentListQuery, deleteStudent } from "../api";
+import { studentListQuery, deleteStudent, deleteFilterStudent } from "../api";
 import ModifyStudent from "../components/ModifyStudent";
 import UploadButton from "../../../components/UploadButton";
 
@@ -139,6 +160,8 @@ export default {
       filter: {
         queryParams: "",
         campusId: "",
+        collegeId: "",
+        majorId: "",
         clazzId: ""
       },
       current: 1,
@@ -183,6 +206,30 @@ export default {
       this.curRow = row;
       this.$refs.ModifyStudent.open();
     },
+    toBatchDelete() {
+      const valid = Object.keys(this.filter).some(key => this.filter[key]);
+      if (!valid) {
+        this.$message.error("请设置筛选条件!");
+        return;
+      }
+
+      this.$confirm(`确定要根据设置的筛选条件删除所有数据吗?`, "提示", {
+        type: "warning"
+      })
+        .then(async () => {
+          await deleteFilterStudent(this.filter);
+          this.$message.success("删除成功!");
+          this.filter = {
+            queryParams: "",
+            campusId: "",
+            collegeId: "",
+            majorId: "",
+            clazzId: ""
+          };
+          this.toPage(1);
+        })
+        .catch(() => {});
+    },
     toDelete(row) {
       this.$confirm(`确定要删除学生【${row.studentName}】吗?`, "提示", {
         type: "warning"