123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- <template>
- <div class="studentList">
- <van-sticky>
- <Search @onSearch="onSearch" />
- <van-dropdown-menu active-color="#01C1B5">
- <van-dropdown-item
- v-model="value1"
- :options="option1"
- @change="onChange"
- />
- <van-dropdown-item
- v-model="value2"
- :options="option2"
- @change="onChange"
- />
- <van-dropdown-item
- v-model="value3"
- :options="option3"
- @change="onChange"
- />
- </van-dropdown-menu>
- </van-sticky>
- <van-list
- v-model="loading"
- v-if="dataShow"
- :finished="finished"
- :immediate-check="false"
- finished-text="- 没有更多内容 -"
- @load="getStudent"
- >
- <van-cell-group
- inset
- style="margin-top: 0.1rem"
- v-for="(item, index) in dataList"
- :key="index"
- @click="onDetail(item)"
- >
- <van-cell is-link center>
- <template #icon>
- <van-image class="studentLogo" :src="item.avatar || iconStudent" />
- </template>
- <template #title>
- <div style="display: flex; align-items: center; font-size: 0.16rem">
- {{ item.username }}
- <img
- v-if="item.memberRankSettingId > 0"
- style="width: 16px; height: 16px; margin-left: 3px"
- src="./images/icon_member.png"
- alt=""
- />
- </div>
- </template>
- <template #label>
- {{ item.subjectName }}
- </template>
- </van-cell>
- </van-cell-group>
- </van-list>
- <m-empty class="empty" v-else />
- </div>
- </template>
- <script>
- import MEmpty from "@/components/MEmpty";
- import Search from "@/components/Search";
- import { findSubSubjects } from "@/api/teacher";
- import { queryStudentList, queryOrganList } from "./api";
- export default {
- name: "studentList",
- components: {
- MEmpty,
- Search,
- },
- data() {
- return {
- iconStudent: require("@/assets/images/icon_student.png"),
- value1: "",
- value2: "",
- value3: "",
- option1: [{ text: "全部分部", value: "" }],
- option2: [{ text: "全部声部", value: "" }],
- option3: [
- { text: "全部学员", value: "" },
- { text: "会员", value: "1" },
- { text: "非会员", value: "0" },
- { text: "未生效会员", value: "2" },
- ],
- loading: false,
- finished: false,
- params: {
- search: null,
- page: 1,
- rows: 20,
- },
- dataShow: true, // 是否有数据
- dataList: [],
- };
- },
- mounted() {
- document.title = "学员列表";
- this.__init();
- this.getStudent();
- },
- methods: {
- onDetail(item) {
- this.$router.push({
- path: "/studentDetail",
- query: {
- id: item.userId,
- avatar: item.avatar,
- username: item.username,
- subjectName: item.subjectName,
- phone: item.parentsPhone,
- organName: item.organName,
- currentGrade: item.currentGrade,
- currentClass: item.currentClass,
- memberRankSettingId: item.memberRankSettingId,
- membershipDay: item.membershipDay,
- },
- });
- },
- async getStudent() {
- let params = this.params;
- params.search = params.search ? params.search : null;
- params.organId = this.value1;
- params.subjectId = this.value2;
- params.hasMember = this.value3;
- try {
- let studentList = await queryStudentList(params);
- let result = studentList.data;
- this.loading = false;
- // 重点这句,判断是不是重复请求了
- if (this.dataList.length > 0 && result.pageNo == 1) {
- return;
- }
- params.page = result.pageNo;
- this.dataList = this.dataList.concat(result.rows);
- if (params.page >= result.totalPage) {
- this.finished = true;
- }
- this.params.page++;
- // 判断是否有数据
- if (this.dataList.length <= 0) {
- this.dataShow = false;
- }
- } catch {
- //
- this.finished = true;
- this.dataShow = false;
- }
- },
- onChange() {
- this.params.page = 1;
- this.dataShow = true;
- this.loading = true;
- this.dataList = [];
- this.finished = false;
- this.getStudent();
- },
- async __init() {
- try {
- let organList = await queryOrganList();
- let result = organList.data || [];
- result.forEach((item) => {
- this.option1.push({
- text: item.value,
- value: item.key,
- });
- });
- // 声部列表
- await findSubSubjects().then((res) => {
- let result = res.data;
- if (result.code == 200 && result.data.length > 0) {
- let tempArr = [];
- result.data.forEach((item) => {
- item.value = item.id;
- item.text = item.name;
- tempArr.push(item);
- });
- this.option2.push(...tempArr);
- } else {
- this.$toast("暂无科目列表");
- }
- });
- } catch {
- //
- }
- },
- onSearch(val) {
- this.params.search = val;
- this.onChange();
- },
- },
- };
- </script>
- <style lang="less" scoped>
- .studentList {
- min-height: 100vh;
- }
- .studentLogo {
- width: 0.48rem;
- height: 0.48rem;
- border-radius: 50%;
- margin-right: 10px;
- overflow: hidden;
- }
- </style>
|