From 80889e7f32480ae76896f3bd042baa82a0fc9e9e Mon Sep 17 00:00:00 2001
From: luohairen <3399054449@qq.com>
Date: 星期四, 14 十一月 2024 11:39:07 +0800
Subject: [PATCH] 班级成绩图表分析

---
 src/views/class-management/ClassStaff.vue |  411 +++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 233 insertions(+), 178 deletions(-)

diff --git a/src/views/class-management/ClassStaff.vue b/src/views/class-management/ClassStaff.vue
index 2811374..99739bf 100644
--- a/src/views/class-management/ClassStaff.vue
+++ b/src/views/class-management/ClassStaff.vue
@@ -1,101 +1,103 @@
 <!-- 鐝骇浜哄憳绠$悊 -->
 <template>
-  <div class="c">
-    <div class="bg">
-      <div class="main">
-        <div class="content">
-          <!-- 鐝骇鍚嶇О -->
-          <div style="padding-bottom:20px; border-bottom: 3px solid #409EFF;margin-bottom: 20px;">
-            <span>{{title}}</span>
-            <el-button @click="handlerAddStudent" type="primary" size="small">鏂板瀛﹀憳</el-button>
-            <el-button @click="open = true" type="primary" size="small">瀛﹀憳璋冩暣</el-button>
-          </div>
-          <!-- 琛ㄦ牸 -->
-          <el-table
-            :header-cell-style="getRowClass"
-            :row-style="{height:'38px'}"
-            :cell-style="{padding: '0'}"
-            :data="tableData"
-            border
-            style="width: 100%;"
-          >
-            <el-table-column
-              align="center"
-              prop="id"
-              label="瀛﹀彿"
-            >
-            </el-table-column>
-            <el-table-column
-              align="center"
-              prop="realName"
-              label="濮撳悕"
-            >
-            </el-table-column>
-            <el-table-column
-              align="center"
-              prop="sex"
-              :formatter="sexFormatter"
-              label="鎬у埆"
-            >
-            </el-table-column>
-            <el-table-column
-              align="center"
-              prop="phone"
-              label="鐢佃瘽"
-            >
-            </el-table-column>
-            <el-table-column
-              label="鎿嶄綔"
-              align="center"
-              width="300px"
-            >
-              <template slot-scope="scope">
-                <el-button @click="handlerEditStudent(scope.row)" type="warning">缂栬緫</el-button>
-                <el-button @click="remove(scope.row.id)" type="danger">鍒犻櫎</el-button>
-                <el-button type="primary">鍒嗛厤瑙掕壊</el-button>
-              </template>
-            </el-table-column>
-          </el-table>
-          <div
-            class="block"
-            style="display: flex; margin-top: 40px;"
-          >
-            <pagination v-show="total>0" :total="total" :page.sync="searchForm.pageNum" :limit.sync="searchForm.pageSize"
-                        @pagination="page"/>
-          </div>
-        </div>
+  <div class="app-container">
+    <div style="display: flex; flex-direction: row">
+      <div style="padding-bottom:20px">
+        <span class="item">{{ this.$route.query.className }}</span>
+        <el-button class="item" @click="handlerAddStudent" type="primary" size="small">鏂板瀛﹀憳</el-button>
+        <el-button class="item" @click="openManage" type="primary" size="small">瀛﹀憳璋冩暣</el-button>
       </div>
-
+      <div>
+        <el-form :inline="true" :model="searchForm" class="demo-form-inline">
+          <el-form-item label="瀛﹀憳濮撳悕">
+            <el-input v-model="searchForm.studentName" size="small" clearable @clear="page" @input="page"
+                      placeholder="瀛﹀憳濮撳悕"></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="page" size="small">鏌ヨ</el-button>
+          </el-form-item>
+        </el-form>
+      </div>
     </div>
-    <PopUp
-      ref="popUp"
-      @children="parentGoods"
-    />
-
+    <!-- 琛ㄦ牸 -->
+    <el-table
+      :header-cell-style="getRowClass"
+      :row-style="{height:'38px'}"
+      :cell-style="{padding: '0'}"
+      :data="tableData"
+      border
+      style="width: 100%;"
+    >
+      <el-table-column
+        align="center"
+        prop="id"
+        label="瀛﹀彿"
+      >
+      </el-table-column>
+      <el-table-column
+        align="center"
+        prop="realName"
+        label="濮撳悕"
+      >
+      </el-table-column>
+      <el-table-column
+        align="center"
+        prop="sex"
+        :formatter="sexFormatter"
+        label="鎬у埆"
+      >
+      </el-table-column>
+      <el-table-column
+        align="center"
+        prop="phone"
+        label="鐢佃瘽"
+      >
+      </el-table-column>
+    </el-table>
+    <div
+      class="block"
+      style="display: flex; margin-top: 40px;"
+    >
+      <pagination v-show="total>0" :total="total" :page.sync="searchForm.currentPage"
+                  :limit.sync="searchForm.pageSize"
+                  @pagination="page"/>
+    </div>
     <el-dialog
       :title="studentTitle"
       :visible.sync="addOpen"
       width="700px"
-      :before-close="handleAddClose">
+      :before-close="handleAddClose"
+      :close-on-click-modal="false">
       <el-form :model="studentForm" :rules="studentRules" ref="studentForm" label-width="100px" class="demo-ruleForm">
-        <el-form-item label="濮撳悕" prop="realName">
-          <el-input v-model="studentForm.realName"></el-input>
-        </el-form-item>
-        <el-form-item label="鎬у埆" prop="sex">
-          <el-select v-model="studentForm.sex">
-            <el-option label="鐢�" value="N"></el-option>
-            <el-option label="濂�" value="V"></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鐢佃瘽" prop="phone">
-          <el-input v-model="studentForm.phone"></el-input>
-        </el-form-item>
-        <el-form-item label="鐧诲綍璐﹀彿" prop="account">
-          <el-input v-model="studentForm.account"></el-input>
-        </el-form-item>
-        <el-form-item label="鐧诲綍瀵嗙爜" prop="password">
-          <el-input v-model="studentForm.password" show-password placeholder="涓嶅~鍐欎細浣跨敤榛樿202406"></el-input>
-        </el-form-item>
+        <el-form-item label="鐪熷疄濮撳悕锛�" prop="realName">
+        <el-input v-model="studentForm.realName"></el-input>
+      </el-form-item>
+      <el-form-item label="鎵嬫満鍙风爜锛�" prop="phone">
+        <el-input v-model="studentForm.phone"></el-input>
+      </el-form-item>
+      <el-form-item label="鐧诲綍璐﹀彿锛�" prop="userName">
+        <el-input v-model="studentForm.userName" autocomplete="off"></el-input>
+      </el-form-item>
+      <el-form-item v-if="!studentForm.id" label="鐧诲綍瀵嗙爜锛�" prop="password">
+        <el-input v-model="studentForm.password" show-password autocomplete="off"></el-input>
+      </el-form-item>
+      <el-form-item label="骞撮緞锛�">
+        <el-input v-model="studentForm.age"></el-input>
+      </el-form-item>
+      <el-form-item label="鎬у埆锛�">
+        <el-select v-model="studentForm.sex" placeholder="鎬у埆" clearable>
+          <el-option v-for="item in sexEnum" :key="item.key" :value="item.key" :label="item.value"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="鍑虹敓鏃ユ湡锛�">
+        <el-date-picker v-model="studentForm.birthDay" type="date" value-format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡"/>
+      </el-form-item>
+
+      <el-form-item label="鐘舵�侊細">
+        <el-select v-model="studentForm.status" placeholder="鐘舵��">
+          <el-option v-for="item in statusEnum" :key="item.key" :value="item.key" :label="item.value"></el-option>
+        </el-select>
+      </el-form-item>
       </el-form>
       <span slot="footer" class="dialog-footer">
         <el-button @click="handleAddClose">鍙� 娑�</el-button>
@@ -131,46 +133,81 @@
 </template>
 <script>
 // 寮曞叆褰堝嚭绐楀彛绲勪欢
-import PopUp from "../../../components/PopUp/Question.vue";
-import UserApi from "@/api/user";
-import { updateClassesUser, getClassesUsers, deleteClassesUserById, addClassesUser, edit } from "@/api/classesUser";
+import UserApi from '@/api/user'
+import { mapGetters, mapState } from 'vuex'
+import {
+  updateClassesUser,
+  getClassesUsers,
+  deleteClassesUserById,
+  addClassesUser,
+  editClassesUser
+} from '@/api/classesUser'
+import Pagination from '@/components/Pagination'
+
 export default {
-  // 娉ㄥ唽
-  components: {
-    PopUp,
-  },
-  data() {
+  components: { Pagination },
+  data () {
+    var validatePassword = (rule, value, callback) => {
+      if (value === '') {
+        callback(new Error('璇疯緭鍏ョ櫥褰曞瘑鐮�'))
+      } else if (!/[A-Z]/.test(value)) {
+        callback(new Error('瀵嗙爜蹇呴』鍖呭惈鑷冲皯涓�涓ぇ鍐欏瓧姣�'))
+      } else if (!/[a-z]/.test(value)) {
+        callback(new Error('瀵嗙爜蹇呴』鍖呭惈鑷冲皯涓�涓皬鍐欏瓧姣�'))
+      } else if (!/[0-9]/.test(value)) {
+        callback(new Error('瀵嗙爜蹇呴』鍖呭惈鑷冲皯涓�涓暟瀛�'))
+      } else {
+        callback()
+      }
+    }
+    var validatePhone = (rule, value, callback) => {
+      // 鎵嬫満鍙峰拰搴ф満鍙烽獙璇侀�昏緫
+      const phoneRegex = /^1[3-9]\d{9}$/; // 鎵嬫満鍙锋牸寮�
+      const landlineRegex = /^\d{3,4}-?\d{7,8}$/; // 搴ф満鍙锋牸寮忥紝鍙互鍖呭惈鍖哄彿鍜屽彲閫夌殑杩炲瓧绗�
+
+      if (!value) {
+        callback(new Error('璇疯緭鍏ユ墜鏈哄彿鎴栧骇鏈哄彿'));
+      } else if (!phoneRegex.test(value)) {
+        if (!landlineRegex.test(value)){
+          callback(new Error('鎵嬫満鍙锋垨搴ф満鍙锋牸寮忎笉姝g‘'));
+        }
+      } else {
+        callback();
+      }
+    }
     return {
       studentForm: {
-        realName: "",
-        sex: "",
-        phone: "",
+        id: null,
+        realName: '',
+        sex: 1,
+        phone: '',
+        birthDay: '',
         age: null,
-        account: "",
-        password: ""
+        userName: '',
+        password: ''
       },
       studentRules: {
-        realName: [
-          { required: true, message: '璇峰~鍐欏鍛樺鍚�', trigger: 'blur' },
+        userName: [
+          { required: true, message: '璇疯緭鍏ョ櫥褰曡处鍙�', trigger: 'blur' }
         ],
-        sex: [
-          { required: true, message: '璇烽�夋嫨瀛﹀憳鎬у埆', trigger: 'change' },
+        realName: [
+          { required: true, message: '璇疯緭鍏ョ湡瀹炲鍚�', trigger: 'blur' }
+        ],
+        password: [
+          { validator: validatePassword, trigger: 'blur' }
         ],
         phone: [
-          { required: true, message: '璇峰~鍐欏鍛樼數璇�', trigger: 'blur' },
-        ],
-        account: [
-          { required: true, message: '璇峰~鍐欏鍛樼櫥褰曡处鍙�', trigger: 'blur' },
+          { validator: validatePhone, trigger: 'blur' }
         ]
       },
-      studentTitle: "鏂板瀛﹀憳",
+      studentTitle: '鏂板瀛﹀憳',
       addOpen: false,
       total: 0,
       studentList: [],
       searchForm: {
-        examName: "",
+        studentName: '',
         pageSize: 10,
-        pageNum: 1,
+        currentPage: 1,
         classesId: null
       },
       classes: {
@@ -179,78 +216,86 @@
       },
       open: false,
       // 鐝骇鍚嶇О
-      title: "19绾ц蒋浠跺洓鐝�",
+      title: '19绾ц蒋浠跺洓鐝�',
       formLabelAlign: {
-        type: "",
-        user: "",
-        region: "",
+        type: '',
+        user: '',
+        region: ''
       },
-      tableData: [
-      ],
-    };
+      tableData: []
+    }
   },
-  mounted() {
-    this.classes.id = this.$route.query.classesId;
+  mounted () {
+    this.classes.id = this.$route.query.classesId
     this.page()
     this.getClassesCurrentUserList(this.classes.id)
     this.getStudentList()
   },
   methods: {
-    handlerEditStudent(row) {
+    openManage () {
+      this.getClassesCurrentUserList(this.classes.id)
+      this.open = true
+    },
+    handlerEditStudent (row) {
       this.studentForm = row
-      this.studentTitle = "缂栬緫瀛﹀憳"
+      this.studentTitle = '缂栬緫瀛﹀憳'
       this.addOpen = true
     },
-    handlerAddStudent() {
-      this.studentTitle = "娣诲姞瀛﹀憳"
+    handlerAddStudent () {
+      this.studentTitle = '娣诲姞瀛﹀憳'
       this.addOpen = true
     },
-    submitStudentForm() {
+    submitStudentForm () {
       this.$refs['studentForm'].validate((valid) => {
+        console.log(this.studentForm)
         if (valid) {
-          this.studentForm.classes = this.classes.id
-          if (this.studentForm.id) {
-            edit(this.studentForm).then(res => {
-              this.addOpen = false
-              this.$message.success(res.data.message)
-              this.page()
-            })
-          }
+          this.studentForm.classesId = this.classes.id
           addClassesUser(this.studentForm).then(res => {
             this.addOpen = false
             this.$message.success(res.data.message)
             this.page()
+            this.resetStudentForm()
           })
         }
       })
     },
-    resetStudentForm() {
+    resetStudentForm () {
       this.studentForm = {
-        realName: "",
-        sex: "",
-        phone: "",
-        age: null
+        id: null,
+        realName: '',
+        sex: 1,
+        phone: '',
+        birthDay: '',
+        age: null,
+        userName: '',
+        password: ''
       }
     },
-    handleAddClose() {
+    handleAddClose () {
       this.addOpen = false
       this.resetStudentForm()
     },
-    remove(id) {
-      deleteClassesUserById(id).then(res => {
-        this.$message.success(res.data.message)
-        this.page()
+    remove (id) {
+      this.$confirm('纭鏄惁鍒犻櫎?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        deleteClassesUserById(id).then(res => {
+          this.$message.success(res.data.message)
+          this.page()
+        })
       })
     },
-    sexFormatter(row) {
+    sexFormatter (row) {
       if (row.sex === 1) {
-        return "鐢�"
+        return '鐢�'
       }
       if (row.sex === 2) {
-        return "濂�"
+        return '濂�'
       }
     },
-    getClassesCurrentUserList(classesId) {
+    getClassesCurrentUserList (classesId) {
       let param = {
         classesId: classesId
       }
@@ -258,75 +303,85 @@
         this.classes.studentList = res.data.map(item => item.id)
       })
     },
-    getStudentList() {
+    getStudentList () {
       UserApi.studentList().then(res => {
-        this.studentList = res.data;
+        this.studentList = res.data
       })
     },
     // 鑾峰彇褰撳墠鐝骇瀛﹀憳鍒嗛〉
-    page() {
+    page () {
       this.searchForm.classesId = this.classes.id
       getClassesUsers(this.searchForm).then(res => {
         this.tableData = res.data.data
+        this.total = res.data.total
+        this.loading = false
       })
     },
-    submitForm() {
+    submitForm () {
       updateClassesUser(this.classes).then(res => {
         this.$message.success(res.data.message)
-        this.page();
+        this.page()
+        this.open = false
       })
     },
-    handleClose() {
+    handleClose () {
       this.open = false
     },
-    filterMethod(query, item) {
-      if (! item.realName) {
+    filterMethod (query, item) {
+      if (!item.realName) {
         return null
       }
-      return item.realName.indexOf(query) > -1;
+      return item.realName.indexOf(query) > -1
     },
     // 杩斿洖涓婁竴涓〉闈�
-    goBack() {
-      this.$router.back();
+    goBack () {
+      this.$router.back()
     },
     // 淇敼琛ㄥ崟澶撮儴鐨勯鑹�
-    getRowClass() {
-      return "background:#d2d3d6";
+    getRowClass () {
+      return 'background:#d2d3d6'
     },
 
     // 鐢熸垚璇曞嵎
-    getCreate() {
+    getCreate () {
       // 璺宠浆鍒扮敓鎴愰〉闈�
-      //璺宠浆鍒板搴旂殑绠$悊椤甸潰
+      // 璺宠浆鍒板搴旂殑绠$悊椤甸潰
       this.$router.push({
-        path: "/manage/test-paper-generation",
-      });
-    },
-
-    // 鐐瑰嚮鍚庤皟鐢ㄥ脊绐楃粍浠剁殑鏂规硶,寮�鍚脊绐�
-    getDialogFormVisible() {
-      this.$refs.popUp.showDialog();
+        path: '/manage/test-paper-generation'
+      })
     },
     // 寮圭獥
     // 鎺ユ敹寮圭獥缁勪欢杩斿洖鐨勮〃鍗曞��
-    parentGoods(obj) {
-      console.log(obj, "寮圭獥缁勪欢鐨勮〃鍗曞��");
-    },
+    parentGoods (obj) {
+      console.log(obj, '寮圭獥缁勪欢鐨勮〃鍗曞��')
+    }
   },
-};
+  computed: {
+    ...mapGetters('enumItem', [
+      'enumFormat'
+    ]),
+    ...mapState('enumItem', {
+      sexEnum: state => state.user.sexEnum,
+      roleEnum: state => state.user.roleEnum,
+      statusEnum: state => state.user.statusEnum,
+      levelEnum: state => state.user.levelEnum
+    })
+  }
+}
 </script>
 <style scoped lang="scss">
 .flex {
   display: flex;
 }
+
 // 鍐呭
 .content {
-  width: 1262px;
   margin-bottom: 80px;
   background-color: #fff;
   padding: 20px 40px;
   border-radius: 10px;
 }
+.item {
+  margin-right: 5px;
+}
 </style>
-
-

--
Gitblit v1.8.0