From fd989d2af98e1ba50d82bbe9db6ce0a24a074bbf Mon Sep 17 00:00:00 2001
From: zhanghua <314079846@qq.com>
Date: 星期三, 18 九月 2024 14:22:09 +0800
Subject: [PATCH] 学员导入功能
---
vue.config.js | 2
src/utils/cache.js | 10
public/static/学员导入模板.xlsx | 0
src/views/login/index.vue | 6
src/assets/login_backgroup.png | 0
src/layout/components/Navbar.vue | 299 ++++++++--------
src/views/student/components/upload-student.vue | 140 +++++++
src/views/student/index.vue | 507 ++++++++++++++-------------
src/components/drag-upload.vue | 90 +++++
9 files changed, 656 insertions(+), 398 deletions(-)
diff --git "a/public/static/\345\255\246\345\221\230\345\257\274\345\205\245\346\250\241\346\235\277.xlsx" "b/public/static/\345\255\246\345\221\230\345\257\274\345\205\245\346\250\241\346\235\277.xlsx"
new file mode 100644
index 0000000..142cc94
--- /dev/null
+++ "b/public/static/\345\255\246\345\221\230\345\257\274\345\205\245\346\250\241\346\235\277.xlsx"
Binary files differ
diff --git a/src/assets/login_backgroup.png b/src/assets/login_backgroup.png
index b286ba8..b8492e3 100644
--- a/src/assets/login_backgroup.png
+++ b/src/assets/login_backgroup.png
Binary files differ
diff --git a/src/components/drag-upload.vue b/src/components/drag-upload.vue
new file mode 100644
index 0000000..cbc2a45
--- /dev/null
+++ b/src/components/drag-upload.vue
@@ -0,0 +1,90 @@
+<template>
+ <div class="center">
+ <el-upload
+ class="upload-demo"
+ :action="action"
+ :headers="headers"
+ :data="{ staffId: staffId, orgId: orgId }"
+ :on-exceed="handleExceed"
+ :on-success="fileSuccess"
+ :on-error="fileSuccess"
+ :file-list="fileList"
+ :show-file-list="true"
+ multiple
+ :limit="limit"
+ accept=".xls,.xlsx"
+ :before-upload="beforeAvatarUpload"
+ >
+ <slot></slot>
+ <slot name="tip"></slot>
+ </el-upload>
+ </div>
+</template>
+
+<script>
+
+export default {
+ data() {
+ return {
+ msg: "鎷栧姩涓婁紶",
+ fileList: [],
+ headers: {
+ token: localStorage.getItem("token"),
+ },
+ };
+ },
+ props: {
+ limit: {
+ type: Number,
+ },
+ action: {
+ type: String,
+ },
+ type: {
+ type: String,
+ },
+ orgId: {
+ type: Number,
+ },
+ staffId: {
+ type: Number,
+ },
+ },
+ methods: {
+ // 瓒呭嚭鏂囦欢涓婁紶涓暟鍥炶皟
+ handleExceed(files, fileList) {
+ this.$message.warning(`褰撳墠闄愬埗閫夋嫨 1 涓枃浠禶);
+ },
+ // 绉婚櫎鏂囦欢寮瑰嚭灞�
+ beforeRemove(file, fileList) {
+ return this.$confirm(`纭畾绉婚櫎 ${file.name}锛焋);
+ },
+ // 涓婁紶鎴愬姛鍥炶皟
+ fileSuccess(res, f, fl) {
+ this.$emit("fileSuccess", res, this.type);
+ },
+
+ // 杩囨护鏂囦欢
+ beforeAvatarUpload(file) {
+ let fileName = file.name.substring(file.name.lastIndexOf(".") + 1);
+ const extension = fileName === "xls";
+ const extension2 = fileName === "xlsx";
+ if (!extension && !extension2) {
+ this.$message({
+ message: "涓婁紶鏂囦欢鍙兘鏄� xls銆亁lsx鏍煎紡!",
+ type: "warning",
+ });
+ return false;
+ }
+ },
+ },
+ mounted() {},
+};
+</script>
+
+<style lang="scss" scoped>
+.center {
+ float: left;
+}
+
+</style>
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
index 71a8aef..6330837 100644
--- a/src/layout/components/Navbar.vue
+++ b/src/layout/components/Navbar.vue
@@ -1,176 +1,181 @@
<template>
- <div class="navbar">
- <hamburger
- :is-active="sidebar.opened"
- class="hamburger-container"
- @toggleClick="toggleSideBar"
- />
+ <div class="navbar">
+ <hamburger
+ :is-active="sidebar.opened"
+ class="hamburger-container"
+ @toggleClick="toggleSideBar"
+ />
- <breadcrumb class="breadcrumb-container" />
- <!-- 鍥哄畾鍙充笂瑙� -->
- <!-- <h3 style="position: fixed; top: 0; font-size: 16px; color: #5a5e66; " :style="'right:' + orgCss() ">{{ getOrgName() }}</h3> -->
+ <breadcrumb class="breadcrumb-container" />
+ <!-- 鍥哄畾鍙充笂瑙� -->
+ <!-- <h3 style="position: fixed; top: 0; font-size: 16px; color: #5a5e66; " :style="'right:' + orgCss() ">{{ getOrgName() }}</h3> -->
- <div class="right-menu">
- <el-dropdown
- trigger="click"
- ref="eldrop"
- style="margin-right: 20px"
- >
- <div class="avatar-wrapper" style="font-size: 20px">
- {{ selectStaff.org.name }}
- <i class="el-icon-caret-bottom"></i>
- </div>
- <el-dropdown-menu slot="dropdown" align="center">
- <el-dropdown-item
- v-for="item in staffs"
- @click.native="changeStaff(item)"
- :key="item.id"
- >
- {{ item.org.name }}
- </el-dropdown-item>
- </el-dropdown-menu>
- </el-dropdown>
- <el-dropdown class="avatar-container" trigger="click">
- <div class="avatar-wrapper">
- {{ '鎮ㄥソ锛�' + getUserName() }}
- <i class="el-icon-caret-bottom"></i>
- </div>
- <el-dropdown-menu slot="dropdown" class="user-dropdown">
- <el-dropdown-item @click.native="logout">
- <span style="display: block">閫�鍑虹櫥褰�</span>
- </el-dropdown-item>
- </el-dropdown-menu>
- </el-dropdown>
+ <div class="right-menu">
+ <el-dropdown trigger="click" ref="eldrop" style="margin-right: 20px">
+ <div class="avatar-wrapper" style="font-size: 20px">
+ {{ selectStaff.org.name }}
+ <i class="el-icon-caret-bottom"></i>
</div>
+ <el-dropdown-menu slot="dropdown" align="center">
+ <el-dropdown-item
+ v-for="item in staffs"
+ @click.native="changeStaff(item)"
+ :key="item.id"
+ >
+ {{ item.org.name }}
+ </el-dropdown-item>
+ </el-dropdown-menu>
+ </el-dropdown>
+ <el-dropdown class="avatar-container" trigger="click">
+ <div class="avatar-wrapper">
+ {{ "鎮ㄥソ锛�" + getUserName() }}
+ <i class="el-icon-caret-bottom"></i>
+ </div>
+ <el-dropdown-menu slot="dropdown" class="user-dropdown">
+ <el-dropdown-item @click.native="logout">
+ <span style="display: block">閫�鍑虹櫥褰�</span>
+ </el-dropdown-item>
+ </el-dropdown-menu>
+ </el-dropdown>
</div>
+ </div>
</template>
<script>
-import { mapGetters } from 'vuex'
-import Breadcrumb from '@/components/Breadcrumb'
-import Hamburger from '@/components/Hamburger'
+import { mapGetters } from "vuex";
+import Breadcrumb from "@/components/Breadcrumb";
+import Hamburger from "@/components/Hamburger";
export default {
- inject: ['reload'], // 渚濊禆娉ㄥ叆
- data() {
- return {
- selectStaff: JSON.parse(localStorage.getItem("selectStaff")),
- staffs: JSON.parse(localStorage.getItem("staffs"))
- }
+ inject: ["reload"], // 渚濊禆娉ㄥ叆
+ data() {
+ return {
+ selectStaff: { org: {} },
+ staffs: [],
+ };
+ },
+ components: {
+ Breadcrumb,
+ Hamburger,
+ },
+ computed: {
+ ...mapGetters(["sidebar", "avatar"]),
+ },
+ methods: {
+ changeStaff(item) {
+ this.selectStaff = item;
+ localStorage.setItem("selectStaff", JSON.stringify(item));
+ // this.$router.go(0)
+ this.reload();
},
- components: {
- Breadcrumb,
- Hamburger
+ orgCss() {
+ return (
+ JSON.parse(localStorage.getItem("user")).name.length * 20 + 100 + "px"
+ );
},
- computed: {
- ...mapGetters([
- 'sidebar',
- 'avatar'
- ])
+ getOrgName() {
+ return JSON.parse(localStorage.getItem("selectStaff")).org.name;
},
- methods: {
- changeStaff(item) {
- this.selectStaff = item
- localStorage.setItem("selectStaff", JSON.stringify(item))
- // this.$router.go(0)
- this.reload()
- },
- orgCss() {
- return JSON.parse(localStorage.getItem("user")).name.length * 20 + 100 + 'px';
- },
- getOrgName() {
- return JSON.parse(localStorage.getItem("user")).staffs[0].org.name;
- },
- getUserName() {
- return JSON.parse(localStorage.getItem("user")).name;
- },
- toggleSideBar() {
- this.$store.dispatch('app/toggleSideBar')
- },
- async logout() {
- // await this.$store.dispatch('user/logout')
- this.$router.push(`/login`)
- }
+ getUserName() {
+ return JSON.parse(localStorage.getItem("user")).name;
+ },
+ toggleSideBar() {
+ this.$store.dispatch("app/toggleSideBar");
+ },
+ async logout() {
+ // await this.$store.dispatch('user/logout')
+ this.$router.push(`/login`);
+ },
+ },
+ created() {
+ const selectStaff = JSON.parse(localStorage.getItem("selectStaff"));
+ if (selectStaff) {
+ this.selectStaff = selectStaff;
}
-}
+ const staffs = JSON.parse(localStorage.getItem("staffs"));
+ if (staffs) {
+ this.staffs = staffs;
+ }
+ },
+};
</script>
<style lang="scss" scoped>
.navbar {
- height: 50px;
- overflow: hidden;
- position: relative;
- background: #fff;
- box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
+ height: 50px;
+ overflow: hidden;
+ position: relative;
+ background: #fff;
+ box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
- .hamburger-container {
- line-height: 46px;
- height: 100%;
- float: left;
+ .hamburger-container {
+ line-height: 46px;
+ height: 100%;
+ float: left;
+ cursor: pointer;
+ transition: background 0.3s;
+ -webkit-tap-highlight-color: transparent;
+
+ &:hover {
+ background: rgba(0, 0, 0, 0.025);
+ }
+ }
+
+ .breadcrumb-container {
+ float: left;
+ }
+
+ .right-menu {
+ float: right;
+ height: 100%;
+ line-height: 50px;
+
+ &:focus {
+ outline: none;
+ }
+
+ .right-menu-item {
+ display: inline-block;
+ padding: 0 8px;
+ height: 100%;
+ font-size: 18px;
+ color: #5a5e66;
+ vertical-align: text-bottom;
+
+ &.hover-effect {
cursor: pointer;
transition: background 0.3s;
- -webkit-tap-highlight-color: transparent;
&:hover {
- background: rgba(0, 0, 0, 0.025);
+ background: rgba(0, 0, 0, 0.025);
}
+ }
}
- .breadcrumb-container {
- float: left;
+ .avatar-container {
+ margin-right: 50px;
+
+ .avatar-wrapper {
+ margin-top: 5px;
+ position: relative;
+ cursor: pointer;
+
+ .user-avatar {
+ cursor: pointer;
+ width: 40px;
+ height: 40px;
+ border-radius: 10px;
+ }
+
+ .el-icon-caret-bottom {
+ cursor: pointer;
+ position: absolute;
+ right: -20px;
+ top: 25px;
+ font-size: 12px;
+ }
+ }
}
-
- .right-menu {
- float: right;
- height: 100%;
- line-height: 50px;
-
- &:focus {
- outline: none;
- }
-
- .right-menu-item {
- display: inline-block;
- padding: 0 8px;
- height: 100%;
- font-size: 18px;
- color: #5a5e66;
- vertical-align: text-bottom;
-
- &.hover-effect {
- cursor: pointer;
- transition: background 0.3s;
-
- &:hover {
- background: rgba(0, 0, 0, 0.025);
- }
- }
- }
-
- .avatar-container {
- margin-right: 50px;
-
- .avatar-wrapper {
- margin-top: 5px;
- position: relative;
- cursor: pointer;
-
- .user-avatar {
- cursor: pointer;
- width: 40px;
- height: 40px;
- border-radius: 10px;
- }
-
- .el-icon-caret-bottom {
- cursor: pointer;
- position: absolute;
- right: -20px;
- top: 25px;
- font-size: 12px;
- }
- }
- }
- }
+ }
}
</style>
diff --git a/src/utils/cache.js b/src/utils/cache.js
index 6b5c00b..9c641b0 100644
--- a/src/utils/cache.js
+++ b/src/utils/cache.js
@@ -1,20 +1,20 @@
const sessionCache = {
set (key, value) {
- if (!sessionStorage) {
+ if (!localStorage) {
return
}
if (key != null && value != null) {
- sessionStorage.setItem(key, value)
+ localStorage.setItem(key, value)
}
},
get (key) {
- if (!sessionStorage) {
+ if (!localStorage) {
return null
}
if (key == null) {
return null
}
- return sessionStorage.getItem(key)
+ return localStorage.getItem(key)
},
setJSON (key, jsonValue) {
if (jsonValue != null) {
@@ -28,7 +28,7 @@
}
},
remove (key) {
- sessionStorage.removeItem(key);
+ localStorage.removeItem(key);
}
}
const localCache = {
diff --git a/src/views/login/index.vue b/src/views/login/index.vue
index 5ede3fc..4ea32c9 100644
--- a/src/views/login/index.vue
+++ b/src/views/login/index.vue
@@ -88,9 +88,9 @@
login({
code: code,
}).then((res) => {
- sessionStorage.setItem("user", JSON.stringify(res));
- sessionStorage.setItem("staffs", JSON.stringify(res.staffs));
- sessionStorage.setItem("selectStaff", JSON.stringify(res.staffs[0]));
+ localStorage.setItem("user", JSON.stringify(res));
+ localStorage.setItem("staffs", JSON.stringify(res.staffs));
+ localStorage.setItem("selectStaff", JSON.stringify(res.staffs[0]));
this.$router.push("/student");
});
},
diff --git a/src/views/student/components/upload-student.vue b/src/views/student/components/upload-student.vue
new file mode 100644
index 0000000..5545545
--- /dev/null
+++ b/src/views/student/components/upload-student.vue
@@ -0,0 +1,140 @@
+<template>
+ <el-form class="demo-ruleForm">
+ <el-form-item label="" style="display: inline-block">
+ <div class="uploading-center">
+ <div class="uploading">
+ <dragUpload
+ :limit="1"
+ :orgId="parseInt(orgId)"
+ :staffId="parseInt(staffId)"
+ @fileSuccess="fatherMethod"
+ :type="'AUDIENCE'"
+ :action="'/dream_test/player/importPlayer'"
+ >
+ <div class="uploading-btn-to">
+ <i class="iconfont iconAdd"></i> 涓婁紶
+ </div>
+ <div class="el-upload__tip" slot="tip">鍙兘涓婁紶.xls,.xlsx鏂囦欢</div>
+ </dragUpload>
+ </div>
+ <div class="download-file">
+ <i class="iconfont iconFile"></i>
+ <a href="/static/瀛﹀憳瀵煎叆妯℃澘.xlsx" download>涓嬭浇瀛﹀憳妯℃澘</a>
+ </div>
+ </div>
+ <div style="font-size: 12px; color: #6993ff" v-if="hasAudience">
+ 宸蹭笂浼�,濡傞渶淇敼鐩存帴鐐瑰嚮涓婁紶
+ <i class="el-icon-close" title="鍒犻櫎" @click="clearaudience"></i>
+ </div>
+ </el-form-item>
+ </el-form>
+</template>
+
+<script>
+import dragUpload from "@/components/drag-upload";
+export default {
+ inject: ["reload"],
+ name: "Creation",
+ data() {
+ return {
+ orgId: 0,
+ staffId: 0,
+ hasAudience: false,
+ };
+ },
+ components: { dragUpload },
+ methods: {
+ downloadlist() {
+ window.open("../../../assets/瀛﹀憳瀵煎叆妯℃澘.xlsx", "_blank");
+ // this.download('downPlayerTemplate', '瀛﹀憳瀵煎叆妯℃澘.xlsx')
+ },
+ clearaudience() {
+ this.hasAudience = false;
+ },
+ fatherMethod(res, type) {
+ if (res.falseLst === null) {
+ this.$message.success("涓婁紶鏁版嵁鎴愬姛");
+ this.$emit("load-success");
+ } else if (res.falseLst.length >= 1) {
+ let errortips = "";
+ res.falseLst.map((item) => {
+ errortips += `${item.cause} \r\n`;
+ });
+ this.$message({
+ message: `瀵煎叆鏁版嵁鎴愬姛瀵煎叆${res.successNum}鏉�,閿欒淇℃伅:${errortips}`,
+ type: "error",
+ duration: 6000,
+ });
+ }
+ },
+ },
+ created() {
+ const selectStaff = JSON.parse(localStorage.getItem("selectStaff"));
+ this.orgId = selectStaff.org.id;
+ this.staffId = selectStaff.id;
+ },
+};
+</script>
+
+<style lang="scss" scoped>
+.demo-ruleForm {
+ text-align: center;
+}
+.creation-center {
+ padding: 40px 40px 40px 40px;
+}
+.uploading-center {
+ display: flex;
+ flex-direction: row;
+ > .uploading {
+ min-height: 40px;
+ line-height: 40px;
+ box-sizing: border-box;
+ border-radius: 4px;
+ }
+ .uploading-btn-to {
+ width: 100px;
+ line-height: 38px;
+ height: 38px;
+ border-radius: 3px;
+ text-align: center;
+ padding: 0 0px;
+ cursor: pointer;
+ user-select: none;
+ margin-left: 0;
+ color: #ffa800;
+ font-size: 14px;
+ border: 1px solid #ffbe41;
+ > i {
+ color: #ffbe41;
+ font-size: 12px;
+ margin-right: 5px;
+ }
+ }
+ > .download-file {
+ float: left;
+ display: flex;
+ flex-direction: row;
+ margin-left: 20px;
+ color: #6993ff;
+ font-size: 14px;
+ cursor: pointer;
+ user-select: none;
+ height: 40px;
+ > div {
+ width: 117px;
+ margin-left: 5px;
+ }
+ }
+}
+.uploading-center-style {
+ ::v-deep .upload-demo {
+ ::v-deep .el-upload {
+ line-height: 38px;
+ }
+ }
+}
+::v-deep .uploading-center > .uploading {
+ line-height: 37px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/student/index.vue b/src/views/student/index.vue
index e010ca1..c45ea31 100644
--- a/src/views/student/index.vue
+++ b/src/views/student/index.vue
@@ -1,264 +1,287 @@
<template>
- <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> -->
- <el-button type="primary" size="small" @click="handleExport"
- >瀵煎嚭瀛﹀憳</el-button
- >
- <div style="width: 500px">
- <!-- <el-date-picker v-model="dateRange" type="daterange" range-separator="鑷�" start-placeholder="寮�濮嬫棩鏈�"
+ <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%"
+ </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-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">{{
+ <!-- <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
- >
-
- <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>
- <StudentCreate ref="studentCreate" />
+ </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>
+
+ <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>
</template>
<script>
-import { getData, getRenew, getExpire, getDeleted, handleExport } from "@/api/student";
-import StudentCreate from "./components/create.vue";
-
+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];
+ },
+ },
+ 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`
+ );
},
- components: {
- StudentCreate,
+ 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`
+ );
},
- 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", //鎺掑簭鏂瑰悜
- },
- },
- },
+ 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;
+ });
+ }
},
- 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");
- }
+ goDetails(row) {
+ this.$router.push({
+ name: "StudentDetails",
+ query: {
+ id: row.id,
+ },
+ });
},
- methods: {
- handleExport() {
- this.download('exportPlayer?orgId=' + JSON.parse(localStorage.getItem("user")).staffs[0].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`)
- },
- 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();
- },
+ showCreate() {
+ this.$refs.studentCreate.showDialog();
},
+ },
};
</script>
diff --git a/vue.config.js b/vue.config.js
index e37ff00..6a30f9c 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -39,7 +39,7 @@
proxy: {
[process.env.VUE_APP_BASE_API]: {
// 鍖归厤鎵�鏈変互 '/dev-api'寮�澶寸殑璇锋眰璺緞
- target: "http://localhost:18081/dream_test", //绫讳技浜嶯ginx鍙嶅悜浠g悊
+ target: "http://localhost:18080/dream_test", //绫讳技浜嶯ginx鍙嶅悜浠g悊
changeOrigin: true, // 鏀寔璺ㄥ煙
pathRewrite: {
// 閲嶅啓璺緞: 鍘绘帀璺緞涓紑澶寸殑'/dev-api'
--
Gitblit v1.8.0