zhanghua
2024-10-08 b664e03064ea1fb6e2d8a4d9ace63c7a8cf8978d
src/views/student/index.vue
@@ -6,8 +6,22 @@
      <el-tab-pane label="已过期" name="expired" />
      <el-tab-pane label="已停用" name="deactivated" />
    </el-tabs>
    <div style="display: flex; justify-content: space-between;">
      <el-button type="primary" size="small" @click="showCreate">新建学员</el-button>
    <div style="display: flex; justify-content: space-between">
      <!-- <el-button type="primary" size="small" @click="showCreate">新建学员</el-button> -->
      <div>
        <el-button type="primary" size="small" @click="handleExport"
          >导出学员</el-button
        >
        <el-button type="primary" size="small" @click="handleImport"
          >导入学员</el-button
        >
      </div>
      <div style="width: 500px">
        <!-- <el-date-picker v-model="dateRange" type="daterange" range-separator="至" start-placeholder="开始日期"
        end-placeholder="结束日期" value-format="yyyy-MM-dd" style="margin-right: 10px">
      </el-date-picker>
      <el-button type="primary" @click="handleExport2">导出课包</el-button> -->
      </div>
      <div style="width: 300px">
        <el-input
          placeholder="按姓名搜索"
@@ -18,43 +32,82 @@
          <el-button
            slot="append"
            icon="el-icon-search"
            @click="fetchData"
            @click="handleClick"
          ></el-button>
        </el-input>
      </div>
    </div>
    <el-table
      v-loading="listLoading"
      :data="list"
      element-loading-text="Loading"
      fit
    >
      <el-table-column label="姓名" prop="">
        <template slot-scope="scope">
          <el-link
            type="primary"
            :underline="false"
            @click="goDetails(scope.row)"
            >{{ scope.row.name }}</el-link
          >
        </template>
      </el-table-column>
      <el-table-column label="性别" width="80">
        <template slot-scope="scope">
          {{ scope.row.gender == "FEMALE" ? "女" : "男" }}
        </template>
      </el-table-column>
      <el-table-column label="手机号" width="200" prop="mobile">
        <template slot-scope="scope">
          {{ scope.row.mobile ? scope.row.mobile : "--" }}
        </template>
      </el-table-column>
      <el-table-column label="是否绑定微信" width="200">
        <template slot-scope="scope">
          {{ scope.row.user ? "是" : "否" }}
        </template>
      </el-table-column>
    </el-table>
    <div style="height: calc(100vh - 248px)">
      <el-table
        v-loading="listLoading"
        :data="list"
        element-loading-text="Loading"
        fit
        height="100%"
      >
        <el-table-column label="姓名" prop="">
          <template slot-scope="scope">
            <el-link
              type="primary"
              :underline="false"
              @click="goDetails(scope.row)"
              >{{ scope.row.name }}</el-link
            >
            <!-- <el-link type="primary" :underline="false">{{
              scope.row.name
            }}</el-link> -->
          </template>
        </el-table-column>
        <el-table-column
          label="性别"
          width="80"
          v-if="activeName !== 'deactivated'"
        >
          <template slot-scope="scope">
            {{ scope.row.gender == "FEMALE" ? "女" : "男" }}
          </template>
        </el-table-column>
        <el-table-column
          label="手机号"
          width="200"
          prop="mobile"
          v-if="activeName !== 'deactivated'"
        >
          <template slot-scope="scope">
            {{ scope.row.mobile ? scope.row.mobile : "--" }}
          </template>
        </el-table-column>
        <el-table-column
          label="是否绑定微信"
          width="200"
          v-if="activeName !== 'deactivated'"
        >
          <template slot-scope="scope">
            {{ scope.row.user ? "是" : "否" }}
          </template>
        </el-table-column>
        <el-table-column
          label="操作"
          width="200"
          v-if="activeName == 'deactivated'"
        >
          <template slot-scope="">
            <el-link type="primary" :underline="false">删除</el-link>
            &nbsp;&nbsp;&nbsp;&nbsp;
            <el-link type="primary" :underline="false">恢复</el-link>
          </template>
        </el-table-column>
        <el-table-column
          label="停用时间"
          width="200"
          v-if="activeName == 'deactivated'"
        >
          <template slot-scope="scope">
            {{ scope.row.modifyTime }}
          </template>
        </el-table-column>
      </el-table>
    </div>
    <div>
      <el-pagination
        @size-change="handleSizeChange"
@@ -67,13 +120,18 @@
      >
      </el-pagination>
    </div>
    <StudentCreate ref="studentCreate"/>
    <el-dialog :visible.sync="dialogVisible" width="560px" title="导入学员">
      <UploadStudent
        v-if="dialogVisible"
        @load-success="reloadData"
      ></UploadStudent>
    </el-dialog>
  </div>
</template>
<script>
import { getData, getRenew, getExpire, getDeleted } from "@/api/student";
import StudentCreate from './components/create.vue'
import UploadStudent from "./components/upload-student.vue";
export default {
  filters: {
@@ -86,17 +144,18 @@
      return statusMap[status];
    },
  },
  components:{
    StudentCreate,
  components: {
    UploadStudent,
  },
  data() {
    return {
      dateRange: [],
      list: null,
      listLoading: true,
      activeName: "all",
      total: 0,
      data: {
        staffId: JSON.parse(localStorage.getItem('user')).staffs[0].id,
        staffId: JSON.parse(localStorage.getItem("selectStaff")).id,
        keyword: "",
        pageIn: {
          //可选,如果是分页查询,需要加上。
@@ -108,12 +167,61 @@
          },
        },
      },
      dialogVisible: false,
    };
  },
  created() {
    this.fetchData();
    // 获取地址栏code
    // let code = this.$route.query.code;
    // if (code) {
    //   if (localStorage.getItem("code")) {
    //     if (code !== localStorage.getItem("code")) {
    //       this.getUserDate(code);
    //     }
    //   } else {
    //     this.getUserDate(code);
    //   }
    // } else {
    //   if (!localStorage.getItem("user")) {
    //     this.$router.push("/login");
    //   }
    // }
    if (localStorage.getItem("user")) {
      this.fetchData();
    } else {
      this.$router.push("/login");
    }
  },
  methods: {
    handleExport() {
      this.download(
        "exportPlayer?orgId=" +
          JSON.parse(localStorage.getItem("selectStaff")).org.id,
        {},
        `导出_${new Date().getTime()}.xlsx`
      );
    },
    handleExport2() {
      if (this.dateRange.length == 0) {
        this.$message.warning("请选择日期范围");
        return;
      }
      this.download(
        "exportReport?startDate=" +
          this.dateRange[0] +
          "&endDate=" +
          this.dateRange[1],
        {},
        `导出_${new Date().getTime()}.xlsx`
      );
    },
    handleImport() {
      this.dialogVisible = true;
    },
    reloadData() {
      this.dialogVisible = false;
      this.fetchData();
    },
    fetchData() {
      this.listLoading = true;
      getData(this.data).then((response) => {
@@ -124,13 +232,14 @@
    },
    handleSizeChange(val) {
      this.data.pageIn.size = val;
      this.fetchData();
      this.handleClick();
    },
    handleCurrentChange(val) {
      this.data.pageIn.index = val - 1;
      this.fetchData();
      this.handleClick();
    },
    handleClick(tab, event) {
      this.data.staffId = JSON.parse(localStorage.getItem("selectStaff")).id;
      if (this.activeName == "pendingFees") {
        this.listLoading = true;
        getRenew(this.data).then((response) => {
@@ -149,9 +258,15 @@
        this.fetchData();
      } else if (this.activeName == "deactivated") {
        this.listLoading = true;
        getExpire(this.data).then((response) => {
          this.list = response.data.findPlayerExpire.ls;
          this.total = response.data.findPlayerExpire.pageOut.total;
        let data = {
          itemType: "PLAYER",
          staffId: JSON.parse(localStorage.getItem("selectStaff")).id,
          keyword: this.data.keyword,
          pageIn: { ...this.data.pageIn },
        };
        getDeleted(data).then((response) => {
          this.list = response.data.findDeletedItem.ls;
          this.total = response.data.findDeletedItem.pageOut.total;
          this.listLoading = false;
        });
      }
@@ -164,9 +279,9 @@
        },
      });
    },
    showCreate(){
      this.$refs.studentCreate.showDialog()
    }
    showCreate() {
      this.$refs.studentCreate.showDialog();
    },
  },
};
</script>