Browse Source

02/03 回访记录课外训练

1
mo 4 years ago
parent
commit
83aafe4f3e

+ 10 - 9
src/views/stuRecodeManager/index.vue

@@ -290,15 +290,7 @@
             </template>
           </el-table-column>
         </el-table>
-        <el-dialog title="新增回访" width="500px" :visible.sync="visitVisible">
-          <visit
-            v-if="visitVisible && detail"
-            :detail="detail"
-            :username="detail.username"
-            @close="visitVisible = false"
-            @submited="getList"
-          />
-        </el-dialog>
+
         <pagination
           sync
           :total.sync="rules.total"
@@ -307,6 +299,15 @@
           :page-sizes="rules.page_size"
           @pagination="getList"
         />
+            <el-dialog title="新增回访" width="500px" :visible.sync="visitVisible">
+          <visit
+            v-if="visitVisible && detail"
+            :detail="detail"
+            :username="detail.username"
+            @close="visitVisible = false"
+            @submited="getList"
+          />
+        </el-dialog>
       </div>
     </div>
   </div>

+ 162 - 0
src/views/withdrawal-application/modals/afterWork.vue

@@ -0,0 +1,162 @@
+<template>
+  <div>
+    <el-form :inline="true" :model="searchForm">
+      <el-form-item prop="timer">
+        <el-date-picker
+          v-model.trim="searchForm.timer"
+          style="width: 400px"
+          type="daterange"
+          value-format="yyyy-MM-dd"
+          range-separator="至"
+          start-placeholder="布置开始日期"
+          end-placeholder="布置结束日期"
+          :picker-options="{
+            firstDayOfWeek: 1,
+          }"
+        ></el-date-picker>
+      </el-form-item>
+      <el-form-item prop="status">
+        <el-select placeholder="是否提交" v-model="searchForm.status" clearable>
+          <el-option label="是" value="1"></el-option>
+          <el-option label="否" value="0"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="isReplied">
+        <el-select
+          placeholder="是否回复"
+          v-model="searchForm.isReplied"
+          clearable
+        >
+          <el-option label="是" value="1"></el-option>
+          <el-option label="否" value="0"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="danger" @click="getList">搜索</el-button>
+        <el-button type="primary" @click="onReset">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <el-table
+      style="width: 100%"
+      :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+      :data="tableList"
+    >
+      <el-table-column
+        align="center"
+        prop="createTime"
+        label="布置时间"
+        width="150"
+      >
+        <template slot-scope="scope">{{
+          scope.row.createTime | dateForMinFormat
+        }}</template>
+      </el-table-column>
+      <el-table-column
+        align="center"
+        prop="teacherName"
+        label="布置老师"
+      ></el-table-column>
+      <el-table-column align="center" prop="title" label="训练标题">
+        <template slot-scope="scope">
+          <div>
+            <div v-if="scope.row.extracurricularExercises">
+              {{ scope.row.extracurricularExercises.title }}
+            </div>
+          </div>
+        </template>
+      </el-table-column>
+            <el-table-column align="center" prop="title" label="训练内容">
+        <template slot-scope="scope">
+          <div>
+            <div v-if="scope.row.extracurricularExercises">
+              {{ scope.row.extracurricularExercises.content }}
+            </div>
+          </div>
+        </template>
+      </el-table-column>
+      <!-- content -->
+      <el-table-column align="center" label="提交作业">
+        <template slot-scope="scope">
+          <div>{{ scope.row.status ? "是" : "否" }}</div>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" prop="isReplied" label="是否评价">
+        <template slot-scope="scope">
+          <div>{{ scope.row.isReplied ? "是" : "否" }}</div>
+        </template>
+      </el-table-column>
+      <!-- <el-table-column align="center"
+                           label="操作"
+                           fixed="right">
+            <template slot-scope="scope">
+              <div>
+                <el-button type="text"
+                           v-permission="'afterWorkList/look'"
+                           @click="lookDetail(scope.row)">查看</el-button>
+              </div>
+            </template>
+          </el-table-column> -->
+    </el-table>
+    <pagination
+      :total="rules.total"
+      :page.sync="rules.page"
+      :limit.sync="rules.limit"
+      :page-sizes="rules.page_size"
+      @pagination="getList"
+    />
+  </div>
+</template>
+<script>
+import { getTimes } from "@/utils";
+import pagination from "@/components/Pagination/index";
+import { extracurricularExercisesReply } from "@/api/afterSchool";
+import dayjs from 'dayjs'
+export default {
+  props: ["studentId"],
+  components: { pagination },
+  data() {
+    return {
+      searchForm: {
+        search: "",
+        timer: [],
+        status: null,
+        isReplied: null,
+        isRepliedTimely: null,
+        isView: null,
+      },
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+      tableList: [],
+    };
+  },
+  mounted() {
+    if (this.searchForm.timer?.length < 1) {
+      this.searchForm.timer = [dayjs(new Date().setDate(1)).format('YYYY-MM-DD'), dayjs(new Date()).format('YYYY-MM-DD')];
+    }
+    this.searchForm.search = this.studentId;
+  },
+  methods: {
+    onReset() {},
+    getList() {
+      const { timer, ...rest } = this.searchForm;
+      let obj = {
+        ...rest,
+        page: this.rules.page,
+        rows: this.rules.limit,
+        ...getTimes(timer, ["submitStartTime", "submitEndTime"], "YYYY-MM-DD"),
+      };
+      extracurricularExercisesReply(obj).then((res) => {
+        if (res.code == 200) {
+          this.tableList = res.data.rows;
+          this.rules.total = res.data.total;
+        }
+      });
+    },
+  },
+};
+</script>

+ 43 - 0
src/views/withdrawal-application/modals/courseWork.vue

@@ -0,0 +1,43 @@
+<template>
+  <div>
+     <el-form
+        :inline="true"
+        :model="searchForm"
+      >
+        <el-form-item>
+          <el-date-picker
+            v-model.trim="searchForm.courseTimer"
+            style="width: 420px"
+            type="daterange"
+            value-format="yyyy-MM-dd"
+            range-separator="至"
+            start-placeholder="上课开始日期"
+            end-placeholder="上课结束日期"
+            :picker-options="{
+              firstDayOfWeek: 1,
+            }"
+          ></el-date-picker>
+        </el-form-item>
+        <el-form-item>
+          <el-button @click="search" type="danger">搜索</el-button>
+          <el-button @click="onReSet" type="primary">重置</el-button>
+        </el-form-item>
+      </el-form>
+  </div>
+</template>
+<script>
+export default {
+  data(){
+    return{
+
+    }
+  },
+  mounted(){
+
+  },
+  methods:{
+    search(){},
+    onReSet(){}
+  }
+}
+</script>

+ 178 - 0
src/views/withdrawal-application/modals/record.vue

@@ -0,0 +1,178 @@
+<template>
+  <div>
+    <el-form :inline="true" ref="searchForm" :model="searchForm">
+      <el-form-item prop="dates">
+        <el-date-picker
+          v-model="searchForm.dates"
+          type="daterange"
+          style="width: 405px"
+          range-separator="至"
+          start-placeholder="课程开始日期"
+          end-placeholder="课程结束日期"
+        >
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item prop="groupType">
+        <el-select
+          v-model.trim="searchForm.groupType"
+          placeholder="请选择课程组类型"
+        >
+          <el-option
+            v-for="(item, index) in courseListType"
+            :key="index"
+            :value="item.value"
+            :label="item.label"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="status">
+        <el-select
+          v-model.trim="searchForm.status"
+          placeholder="请选择考勤状态"
+          clearable
+        >
+          <el-option
+            v-for="(item, index) in attendanceStatus"
+            :key="index"
+            :value="item.value"
+            :label="item.label"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button @click="search" type="danger">搜索</el-button>
+        <el-button @click="onReSet" type="primary">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <el-table
+      style="width: 100%"
+      :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+      :data="tableList"
+    >
+      <el-table-column align="center" prop="courseScheduleId" label="课程编号">
+        <template slot-scope="scope">
+          <div>
+            <copy-text>{{ scope.row.courseScheduleId }}</copy-text>
+          </div>
+        </template>
+      </el-table-column>
+
+      <el-table-column
+        align="center"
+        prop="courseSchedule.name"
+        label="课程名称"
+      ></el-table-column>
+
+      <el-table-column
+        width="180px"
+        align="center"
+        prop="startClassTime"
+        label="上课时间"
+      >
+        <template slot-scope="scope">
+          <div>
+            {{ scope.row.courseSchedule.classDate | dayjsFormat }}
+            {{ scope.row.courseSchedule.startClassTime | dayjsFormatMinute }}-{{
+              scope.row.courseSchedule.endClassTime | dayjsFormatMinute
+            }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" prop="startClassTime" label="课程组类型">
+        <template slot-scope="scope">
+          <div>
+            {{ scope.row.groupType | coursesType }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" prop="startClassTime" label="课程类型">
+        <template slot-scope="scope">
+          <div>
+            {{ scope.row.courseSchedule.type | coursesType }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" label="考勤状态">
+        <template slot-scope="scope">
+          <div>
+            {{ scope.row.status | clockingIn }}
+          </div>
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination
+      :total.sync="rules.total"
+      :page.sync="rules.page"
+      :limit.sync="rules.limit"
+      :page-sizes="rules.page_size"
+      @pagination="getList"
+    />
+  </div>
+</template>
+<script>
+import { courseListType, stuAttendance } from "@/utils/searchArray";
+import pagination from "@/components/Pagination/index";
+import { findStudentAttendance } from "@/api/buildTeam";
+import { getTimes } from "@/utils";
+export default {
+  components: { pagination },
+  props:['studentId'],
+  data() {
+    return {
+      searchForm: {
+        studentID: "",
+        groupType: "",
+        status: "",
+        dates: [],
+      },
+      courseListType,
+      attendanceStatus: stuAttendance,
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+      tableList: [],
+    };
+  },
+  mounted() {
+    this.searchForm.studentID = this.studentId
+    if (this.searchForm.dates?.length < 1) {
+      this.searchForm.dates = [new Date().setDate(1), new Date()];
+    }
+    this.init();
+  },
+  methods: {
+    init(){
+      this.getList()
+    },
+    search() {
+      this.rules.page =1;
+      this.getList()
+    },
+    onReSet() {
+      this.$refs["searchForm"].resetFields();
+      this.search();
+    },
+    getList() {
+           const { dates, ...rest } = this.searchForm;
+      let obj =  {
+        ...rest,
+        page: this.rules.page,
+        rows: this.rules.limit,
+        ...getTimes(dates, ["startDateOfCourse", "endDateOfCourse"],  "YYYY-MM-DD"),
+      }
+       findStudentAttendance(obj).then((res) => {
+        if (res.code == 200) {
+          this.tableList = res.data.rows;
+          this.rules.total = res.data.total;
+        }
+      });
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+</style>

+ 28 - 0
src/views/withdrawal-application/modals/studentWork.vue

@@ -0,0 +1,28 @@
+<template>
+  <div>
+      <el-tabs v-model="activeName" type="card">
+    <el-tab-pane label="课程作业" name="first" lazy>
+      <courseWork  :studentId='studentId' v-if="studentId"/>
+    </el-tab-pane>
+    <el-tab-pane label="课外训练" name="second"  lazy>
+      <afterWork :studentId='studentId' v-if="studentId"/>
+    </el-tab-pane>
+
+  </el-tabs>
+  </div>
+</template>
+<script>
+import courseWork from './courseWork'
+import afterWork from './afterWork'
+export default {
+  props:['studentId'],
+  components:{courseWork,afterWork},
+  data(){
+    return{
+      activeName:'first'
+    }
+  },
+  mounted(){},
+  methods:{},
+}
+</script>

+ 45 - 19
src/views/withdrawal-application/modals/visit.vue

@@ -1,8 +1,8 @@
 <template>
   <div>
-    <div class='visitBtnWrap'>
-      <el-button type="text">学员考勤</el-button>
-       <el-button type="text">作业情况</el-button>
+    <div class="visitBtnWrap">
+      <el-button type="text" @click="recordVisible = true">学员考勤</el-button>
+      <el-button type="text" @click="workVisible=true">作业情况</el-button>
     </div>
     <el-form
       :model="visitForm"
@@ -58,18 +58,42 @@
         ></el-input>
       </el-form-item>
     </el-form>
-    <div slot="footer" class="dialog-footer" style="text-align: right;margin-right: 15%;">
+    <div
+      slot="footer"
+      class="dialog-footer"
+      style="text-align: right; margin-right: 15%"
+    >
       <el-button @click="$emit('close')">取 消</el-button>
       <el-button type="primary" @click="submitAddVisit">确 定</el-button>
     </div>
+    <el-dialog
+      title="学员考勤"
+      width="1020px"
+      :visible.sync="recordVisible"
+      append-to-body
+    >
+    <record  :studentId="this.detail.userId"/>
+    </el-dialog>
+
+    <el-dialog
+      title="作业列表"
+      width="1020px"
+      :visible.sync="workVisible"
+      append-to-body
+    >
+    <studentWork  :studentId="this.detail.userId"/>
+    </el-dialog>
   </div>
 </template>
 <script>
-import cleanDeep from 'clean-deep'
+import cleanDeep from "clean-deep";
 import { visitChiose } from "@/utils/searchArray";
-import { addVisit } from "@/views/returnVisitManager/api"
+import { addVisit } from "@/views/returnVisitManager/api";
+import record from './record'
+import studentWork from './studentWork'
 export default {
-  props: ['detail', 'username'],
+  props: ["detail", "username"],
+  components:{record,studentWork},
   data() {
     return {
       visitChiose,
@@ -90,18 +114,20 @@ export default {
         visitTime: [{ required: true, message: "请输入回访时间" }],
         visitType: [{ required: true, message: "请选择回访类型" }],
       },
-    }
+      recordVisible:false,
+      workVisible:false
+    };
   },
   computed: {
     userName() {
-      return this.username || this.detail.user?.username
-    }
+      return this.username || this.detail.user?.username;
+    },
   },
   methods: {
     submitAddVisit() {
       this.$refs.visitForm.validate((res) => {
         if (res) {
-          const { visitType, ...rest } = this.visitForm
+          const { visitType, ...rest } = this.visitForm;
           const data = {
             ...rest,
             objectId: this.detail.id,
@@ -110,25 +136,25 @@ export default {
             studentId: this.detail.userId,
             type: visitType[0],
             purpose: visitType[1],
-          }
+          };
           addVisit(cleanDeep(data)).then((res) => {
             if (res.code === 200) {
               this.$message.success("新增成功");
-              this.$emit('close')
-              this.$emit('submited')
+              this.$emit("close");
+              this.$emit("submited");
             }
           });
         }
       });
     },
-  }
-}
+  },
+};
 </script>
 <style lang="scss" scoped>
 .visitBtnWrap {
   position: absolute;
-  right: 0;
-  top:0;
+  right: 90px;
+  top: 82px;
+  z-index: 20;
 }
-
 </style>