From 320e75460d2f5e517c902b87fcc5c4d220472f6f Mon Sep 17 00:00:00 2001
From: zhanghua <314079846@qq.com>
Date: 星期五, 20 十二月 2024 20:05:10 +0800
Subject: [PATCH] 学生导入优化

---
 src/views/student/index.vue |  371 ++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 281 insertions(+), 90 deletions(-)

diff --git a/src/views/student/index.vue b/src/views/student/index.vue
index 333ecdc..e743286 100644
--- a/src/views/student/index.vue
+++ b/src/views/student/index.vue
@@ -1,101 +1,292 @@
 <template>
-  <div class="app-container">
-    <el-tabs v-model="activeName" @tab-click="handleClick">
-      <el-tab-pane label="鍏ㄩ儴" name="first" />
-      <el-tab-pane label="寰呯画璐�" name="second" />
-      <el-tab-pane label="宸茶繃鏈�" name="third" />
-      <el-tab-pane label="宸插仠鐢�" name="fourth" />
-    </el-tabs>
-    <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="handleClick">
+            <el-tab-pane label="鍏ㄩ儴" name="all" />
+            <el-tab-pane label="寰呯画璐�" name="pendingFees" />
+            <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>
+                <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="鎸夊鍚嶆悳绱�"
+                    v-model="data.keyword"
+                    class="input-with-select"
+                    size="small"
+                >
+                    <el-button
+                        slot="append"
+                        icon="el-icon-search"
+                        @click="handleClick"
+                    ></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="濮撳悕" 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"
+                @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-dialog :visible.sync="dialogVisible" width="560px" title="瀵煎叆瀛﹀憳">
+            <UploadStudent
+                v-if="dialogVisible"
+                @load-success="reloadData"
+            ></UploadStudent>
+        </el-dialog>
     </div>
-    <el-table
-      v-loading="listLoading"
-      :data="list"
-      element-loading-text="Loading"
-      fit
-    >
-      <el-table-column label="濮撳悕">
-        <template slot-scope=""> xxxxx </template>
-      </el-table-column>
-      <el-table-column label="鎬у埆" width="80">
-        <template slot-scope=""> 鐢� </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=""> asfiaf </template>
-      </el-table-column>
-      <el-table-column label="璐︽埛" width="">
-        <template slot-scope=""> asfiaf </template>
-      </el-table-column>
-      <!-- <el-table-column label="Author" width="110" align="center">
-        <template slot-scope="scope">
-          <span>{{ scope.row.author }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="Pageviews" width="110" align="center">
-        <template slot-scope="scope">
-          {{ scope.row.pageviews }}
-        </template>
-      </el-table-column>
-      <el-table-column class-name="status-col" label="Status" width="110" align="center">
-        <template slot-scope="scope">
-          <el-tag :type="scope.row.status | statusFilter">{{ scope.row.status }}</el-tag>
-        </template>
-      </el-table-column>
-      <el-table-column align="center" prop="created_at" label="Display_time" width="200">
-        <template slot-scope="scope">
-          <i class="el-icon-time" />
-          <span>{{ scope.row.display_time }}</span>
-        </template>
-      </el-table-column> -->
-    </el-table>
-  </div>
 </template>
 
 <script>
-import { getList } from "@/api/table";
+import { getData, getRenew, getExpire, getDeleted } from "@/api/student";
+import UploadStudent from "./components/upload-student.vue";
 
 export default {
-  filters: {
-    statusFilter(status) {
-      const statusMap = {
-        published: "success",
-        draft: "gray",
-        deleted: "danger",
-      };
-      return statusMap[status];
+    filters: {
+        statusFilter(status) {
+            const statusMap = {
+                published: "success",
+                draft: "gray",
+                deleted: "danger",
+            };
+            return statusMap[status];
+        },
     },
-  },
-  data() {
-    return {
-      list: null,
-      listLoading: true,
-      activeName: "first",
-    };
-  },
-  created() {
-    this.fetchData();
-  },
-  methods: {
-    fetchData() {
-      this.listLoading = true;
-      getList().then((response) => {
-        this.list = response.data.items;
-        this.listLoading = false;
-      });
+    components: {
+        UploadStudent,
     },
-  },
+    data() {
+        return {
+            dateRange: [],
+            list: null,
+            listLoading: true,
+            activeName: "all",
+            total: 0,
+            data: {
+                staffId: JSON.parse(localStorage.getItem("selectStaff")).id,
+                keyword: "",
+                pageIn: {
+                    //鍙�夛紝濡傛灉鏄垎椤垫煡璇紝闇�瑕佸姞涓娿��
+                    index: 0, //蹇呴��
+                    size: 10, //姣忛〉鐨勫ぇ灏忋�傞粯璁�20
+                    sorts: {
+                        name: "name", //鎺掑簭瀛楁鍚嶇О
+                        direction: "ASC", //鎺掑簭鏂瑰悜
+                    },
+                },
+            },
+            dialogVisible: false,
+        };
+    },
+    created() {
+        // 鑾峰彇鍦板潃鏍廲ode
+        // 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) => {
+                this.list = response.data.findPlayerByStaff.ls;
+                this.total = response.data.findPlayerByStaff.pageOut.total;
+                this.listLoading = false;
+            });
+        },
+        handleSizeChange(val) {
+            this.data.pageIn.size = val;
+            this.handleClick();
+        },
+        handleCurrentChange(val) {
+            this.data.pageIn.index = val - 1;
+            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) => {
+                    this.list = response.data.findPlayerRenew.ls;
+                    this.total = response.data.findPlayerRenew.pageOut.total;
+                    this.listLoading = false;
+                });
+            } else if (this.activeName == "expired") {
+                this.listLoading = true;
+                getExpire(this.data).then((response) => {
+                    this.list = response.data.findPlayerExpire.ls;
+                    this.total = response.data.findPlayerExpire.pageOut.total;
+                    this.listLoading = false;
+                });
+            } else if (this.activeName == "all") {
+                this.fetchData();
+            } else if (this.activeName == "deactivated") {
+                this.listLoading = true;
+                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;
+                });
+            }
+        },
+        goDetails(row) {
+            this.$router.push({
+                name: "StudentDetails",
+                query: {
+                    id: row.id,
+                },
+            });
+        },
+        showCreate() {
+            this.$refs.studentCreate.showDialog();
+        },
+       
+    },
 };
 </script>

--
Gitblit v1.8.0