public/static/学员导入模板.xlsx | 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/assets/login_backgroup.png | 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/drag-upload.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/layout/components/Navbar.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/utils/cache.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/login/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/student/components/upload-student.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/student/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
vue.config.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
public/static/ѧԱµ¼ÈëÄ£°å.xlsxBinary files differ
src/assets/login_backgroup.pngsrc/components/drag-upload.vue
New file @@ -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ãxlsxæ ¼å¼!", type: "warning", }); return false; } }, }, mounted() {}, }; </script> <style lang="scss" scoped> .center { float: left; } </style> 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> 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 = { 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"); }); }, src/views/student/components/upload-student.vue
New file @@ -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> 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() { // è·åå°åæ 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` ); }, 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() { // è·åå°åæ 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"); } 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> vue.config.js
@@ -39,7 +39,7 @@ proxy: { [process.env.VUE_APP_BASE_API]: { // å¹é ææä»¥ '/dev-api'å¼å¤´ç请æ±è·¯å¾ target: "http://localhost:18081/dream_test", //类似äºNginxåå代ç target: "http://localhost:18080/dream_test", //类似äºNginxåå代ç changeOrigin: true, // æ¯æè·¨å pathRewrite: { // éåè·¯å¾: å»æè·¯å¾ä¸å¼å¤´ç'/dev-api'