黄何裕
2024-08-08 54e06ab83d8fbebf91f8e0c3a621da743ac5af26
src/views/rollCall/index.vue
@@ -1,115 +1,291 @@
<template>
    <div class="app-container">
      <el-tabs v-model="activeName" @tab-click="handleClick">
        <el-tab-pane label="按学员" name="first">
          <div style="display: flex; flex-direction: row-reverse">
            <div style="width: 300px">
              <el-input
                placeholder="按标题搜索"
                v-model="input3"
                class="input-with-select"
                size="small"
              >
                <el-button slot="append" icon="el-icon-search"></el-button>
              </el-input>
            </div>
  <div class="app-container">
    <el-tabs v-model="activeName" @tab-click="fetchData">
      <el-tab-pane label="按学员" name="student">
        <div style="display: flex; flex-direction: row-reverse">
          <div style="width: 300px">
            <el-input
              placeholder="按标题搜索"
              v-model="data.keyword"
              class="input-with-select"
              size="small"
            >
              <el-button
                slot="append"
                icon="el-icon-search"
                @click="fetchData"
              ></el-button>
            </el-input>
          </div>
        </div>
        <div style="height: calc(100vh - 248px)">
          <el-table
            v-loading="listLoading"
            :data="list"
            element-loading-text="Loading"
            fit
            height="100%"
          >
            <el-table-column label="姓名">
              <template slot-scope=""> xxxxx </template>
              <template slot-scope="scope">
                <el-link type="primary" :underline="false">{{
                  scope.row.player.name
                }}</el-link>
              </template>
            </el-table-column>
            <el-table-column label="课包/会员卡" width="80">
              <template slot-scope=""> 男 </template>
            <el-table-column label="课包/会员卡" width="">
              <template slot-scope="scope"
                >{{ scope.row.voucher.name }}
              </template>
            </el-table-column>
            <el-table-column label="上课日期" width="200">
              <template slot-scope=""> 10086 </template>
            <el-table-column label="余额" width="" prop="qty">
            </el-table-column>
            <el-table-column label="课程时长" width="200">
              <template slot-scope=""> 10086 </template>
            </el-table-column>
            <el-table-column label="开始时间" width="200">
              <template slot-scope=""> 10086 </template>
            </el-table-column>
            <el-table-column label="课消数量" width="200">
              <template slot-scope=""> 10086 </template>
            <el-table-column label="到期时间" width="" prop="endDate">
              <template slot-scope="scope"
                >{{ timeCompare(scope.row.endDate) }}
              </template>
            </el-table-column>
            <el-table-column label="操作" width="">
              <template slot-scope=""> 兑换 发放 </template>
              <template slot-scope=""> 点名 </template>
            </el-table-column>
          </el-table>
        </el-tab-pane>
        <el-tab-pane label="按班级" name="fourth">
          <div style="display: flex; flex-direction: row-reverse">
            <div style="width: 300px">
              <el-input
                placeholder="按学员名称搜索"
                v-model="input3"
                class="input-with-select"
                size="small"
              >
                <el-button slot="append" icon="el-icon-search"></el-button>
              </el-input>
            </div>
        </div>
        <div>
          <el-pagination
            @size-change="handleSizeChange"
            @current-change="handleCurrentChange"
            :current-page="data.pageIn.index + 1"
            :page-sizes="[10, 20, 30, 40]"
            :page-size="data.pageIn.size"
            layout="total, sizes, prev, pager, next, jumper"
            :total="total"
          >
          </el-pagination>
        </div>
      </el-tab-pane>
      <el-tab-pane label="按班级" name="class">
        <div style="display: flex; flex-direction: row-reverse">
          <div style="width: 300px">
            <el-input
              placeholder="按学员名称搜索"
              v-model="data.keyword"
              class="input-with-select"
              size="small"
            >
              <el-button
                slot="append"
                icon="el-icon-search"
                @click="fetchData"
              ></el-button>
            </el-input>
          </div>
        </div>
        <div style="height: calc(100vh - 248px)">
          <el-table
            v-loading="listLoading"
            :data="list"
            element-loading-text="Loading"
            fit
            height="100%"
          >
            <el-table-column label="班级">
              <template slot-scope=""> xxxxx </template>
            </el-table-column>
            <el-table-column label="学员人数" width="80">
              <template slot-scope=""> 男 </template>
              <template slot-scope="scope">
                <el-link type="primary" :underline="false">{{
                  scope.row.name
                }}</el-link>
              </template>
            </el-table-column>
            <el-table-column label="操作" width="">
              <template slot-scope=""> 发放 </template>
              <template slot-scope=""> 点名 </template>
            </el-table-column>
          </el-table>
        </el-tab-pane>
      </el-tabs>
    </div>
  </template>
  <script>
  import { getList } from "@/api/table";
  export default {
    filters: {
      statusFilter(status) {
        const statusMap = {
          published: "success",
          draft: "gray",
          deleted: "danger",
        };
        return statusMap[status];
      },
    },
    data() {
      return {
        list: null,
        listLoading: true,
        activeName: "first",
        </div>
        <div>
          <el-pagination
            @size-change="handleSizeChange"
            @current-change="handleCurrentChange"
            :current-page="data.pageIn.index + 1"
            :page-sizes="[10, 20, 30, 40]"
            :page-size="data.pageIn.size"
            layout="total, sizes, prev, pager, next, jumper"
            :total="total"
          >
          </el-pagination>
        </div>
      </el-tab-pane>
      <el-tab-pane label="按课程" name="course">
        <div style="display: flex; flex-direction: row-reverse">
          <div style="width: 300px">
            <el-input
              placeholder="按课程名称搜索"
              v-model="data.keyword"
              class="input-with-select"
              size="small"
            >
              <el-button
                slot="append"
                icon="el-icon-search"
                @click="fetchData"
              ></el-button>
            </el-input>
          </div>
        </div>
        <div style="height: calc(100vh - 248px)">
          <el-table
            v-loading="listLoading"
            :data="list"
            element-loading-text="Loading"
            fit
            height="100%"
          >
            <el-table-column label="课程">
              <template slot-scope="scope">
                <el-link type="primary" :underline="false">{{
                  scope.row.courseName
                }}</el-link>
              </template>
            </el-table-column>
            <el-table-column label="开始时间" width="" prop="beginTime">
            </el-table-column>
            <el-table-column label="结束时间" width="" prop="endTime">
            </el-table-column>
            <el-table-column label="学员人数" width="" prop="playerCount">
            </el-table-column>
            <el-table-column label="操作" width="">
              <template slot-scope=""> 点名 </template>
            </el-table-column>
          </el-table>
        </div>
        <div>
          <el-pagination
            @size-change="handleSizeChange"
            @current-change="handleCurrentChange"
            :current-page="data.pageIn.index + 1"
            :page-sizes="[10, 20, 30, 40]"
            :page-size="data.pageIn.size"
            layout="total, sizes, prev, pager, next, jumper"
            :total="total"
          >
          </el-pagination>
        </div>
      </el-tab-pane>
    </el-tabs>
  </div>
</template>
<script>
import {
  getPlayerAccByStaffWithRollCall,
  getTeamByStaffWithRollCall,
  getUnCompleteSession,
} from "@/api/rollCall";
export default {
  filters: {
    statusFilter(status) {
      const statusMap = {
        published: "success",
        draft: "gray",
        deleted: "danger",
      };
      return statusMap[status];
    },
    created() {
      this.fetchData();
  },
  data() {
    return {
      list: null,
      listLoading: true,
      activeName: "student",
      total: 0,
      data: {
        staffId: JSON.parse(localStorage.getItem("user")).staffs[0].id,
        keyword: "",
        pageIn: {
          //可选,如果是分页查询,需要加上。
          index: 0, //必选
          size: 10, //每页的大小。默认20
          sorts: [
            { name: "modifyTime", direction: "DESC" },
            { name: "player.name", direction: "ASC" },
          ],
        },
      },
    };
  },
  created() {
    this.fetchData();
  },
  methods: {
    handleSizeChange(val) {
      this.data.pageIn.size = val;
      this.fetchData("pageIn");
    },
    methods: {
      fetchData() {
    handleCurrentChange(val) {
      this.data.pageIn.index = val - 1;
      this.fetchData("pageIn");
    },
    fetchData(_val) {
      if (_val !== "pageIn") {
        this.data.pageIn.index = 0;
        this.data.pageIn.size = 10;
      }
      this.listLoading = true;
      if (this.activeName == "student") {
        this.listLoading = true;
        getList().then((response) => {
          this.list = response.data.items;
        getPlayerAccByStaffWithRollCall(this.data).then((response) => {
          this.list = response.data.findPlayerAccByStaffWithRollCall.ls;
          this.total =
            response.data.findPlayerAccByStaffWithRollCall.pageOut.total;
          this.listLoading = false;
        });
      },
      } else if (this.activeName == "class") {
        this.listLoading = true;
        let data = {
          types: ["NORMAL"],
          staffId: JSON.parse(localStorage.getItem("user")).staffs[0].id,
          keyword: this.data.keyword,
          pageIn: { ...this.data.pageIn },
        };
        data.pageIn.sorts = [
          { name: "modifyTime", direction: "DESC" },
          { name: "name", direction: "ASC" },
        ];
        getTeamByStaffWithRollCall(data).then((response) => {
          this.list = response.data.findTeamByStaffWithRollCall.ls;
          this.total = response.data.findTeamByStaffWithRollCall.pageOut.total;
          this.listLoading = false;
        });
      } else if (this.activeName == "course") {
        this.listLoading = true;
        let data = {
          completeTypes: ["ROLL_CALL"],
          staffId: JSON.parse(localStorage.getItem("user")).staffs[0].id,
          keyword: this.data.keyword,
          pageIn: { ...this.data.pageIn },
        };
        data.pageIn.sorts = [
          { name: "s.begin_time", direction: "DESC" },
          { name: "courseName", direction: "ASC" },
        ];
        getUnCompleteSession(data).then((response) => {
          this.list = response.data.findUnCompleteSession.ls;
          this.total = response.data.findUnCompleteSession.pageOut.total;
          this.listLoading = false;
        });
      }
    },
  };
  </script>
    timeCompare(time) {
      if (!time) {
        return "";
      }
      let timeDate = new Date(time);
      let nowTime = new Date();
      if (nowTime > timeDate) {
        return time + "(已过期)";
      } else {
        return time;
      }
    },
  },
};
</script>