|
@@ -0,0 +1,348 @@
|
|
|
+<!--
|
|
|
+* @FileDescription: 首页
|
|
|
+* @Author: 黄琪勇
|
|
|
+* @Date:2024-03-29 17:20:39
|
|
|
+-->
|
|
|
+<template>
|
|
|
+ <navContainer class="homePageNav" :headImg="headImg" :navs="navs">
|
|
|
+ <div class="homePage">
|
|
|
+ <ElScrollbar class="elScrollbar">
|
|
|
+ <div class="classTypes">
|
|
|
+ <div
|
|
|
+ class="classType"
|
|
|
+ v-for="item in userStoreHook.roles === 'GYM' ? classTypes_gym : classTypes_gyt"
|
|
|
+ :key="item.name"
|
|
|
+ @click="handleRouter(item.url)"
|
|
|
+ >
|
|
|
+ <img :src="item.img" />
|
|
|
+ <div>{{ item.name }}</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="courseBoard" :class="{ isEmpty: isEmptyClassData && !classDataLoading }">
|
|
|
+ <div class="details">
|
|
|
+ <div class="head">
|
|
|
+ <div class="leftCon">
|
|
|
+ <div class="line"></div>
|
|
|
+ <div class="title">下次课程</div>
|
|
|
+ </div>
|
|
|
+ <img class="rightRouter" @click="handleRouter('/curriculum')" src="@/img/homePage/back.png" />
|
|
|
+ </div>
|
|
|
+ <el-skeleton class="elSkeleton" :loading="classDataLoading">
|
|
|
+ <template #template>
|
|
|
+ <el-skeleton-item class="elSkeletonItem" variant="p" />
|
|
|
+ <el-skeleton-item class="elSkeletonItem" variant="p" />
|
|
|
+ <el-skeleton-item class="elSkeletonItem" variant="h1" />
|
|
|
+ <el-skeleton-item class="elSkeletonItem" variant="h1" />
|
|
|
+ <div class="elSkeletonBtnCon">
|
|
|
+ <el-skeleton-item class="elSkeletonItem" variant="button" />
|
|
|
+ <el-skeleton-item class="elSkeletonItem" variant="button" />
|
|
|
+ </div>
|
|
|
+ <el-skeleton-item class="elSkeletonItem" variant="button" />
|
|
|
+ </template>
|
|
|
+ <template #default>
|
|
|
+ <component
|
|
|
+ v-if="!isEmptyClassData"
|
|
|
+ :classData="classData"
|
|
|
+ :is="userStoreHook.roles === 'GYM' ? curriculum_gym : curriculum_gyt"
|
|
|
+ />
|
|
|
+ <el-empty v-else class="empty" :image="require('@/img/layout/empty1.png')" description="您还没有待上课程哦~" />
|
|
|
+ </template>
|
|
|
+ </el-skeleton>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </ElScrollbar>
|
|
|
+ </div>
|
|
|
+ </navContainer>
|
|
|
+</template>
|
|
|
+<script setup lang="ts">
|
|
|
+import navContainer from "@/businessComponents/navContainer"
|
|
|
+import { useRouter } from "vue-router"
|
|
|
+import { ref, computed } from "vue"
|
|
|
+import useDialogConfirm from "@/hooks/useDialogConfirm"
|
|
|
+import userStore from "@/store/modules/user"
|
|
|
+import curriculum_gym from "./components/curriculum/curriculum_gym.vue"
|
|
|
+import curriculum_gyt from "./components/curriculum/curriculum_gyt.vue"
|
|
|
+import { getRemind_gyt, getRecentCourseSchedule_gym } from "@/api/homePage.api"
|
|
|
+import { httpAjax } from "@/plugin/httpAjax"
|
|
|
+
|
|
|
+const userStoreHook = userStore()
|
|
|
+const router = useRouter()
|
|
|
+
|
|
|
+const headImg = {
|
|
|
+ img: require("@/img/homePage/home.png")
|
|
|
+}
|
|
|
+const navs = [
|
|
|
+ {
|
|
|
+ name: "主页"
|
|
|
+ }
|
|
|
+]
|
|
|
+const classTypes_gym = [
|
|
|
+ {
|
|
|
+ img: require("@/img/homePage/kb.png"),
|
|
|
+ name: "课表",
|
|
|
+ url: "/curriculum"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ img: require("@/img/homePage/xl.png"),
|
|
|
+ name: "训练",
|
|
|
+ url: ""
|
|
|
+ },
|
|
|
+ {
|
|
|
+ img: require("@/img/homePage/jdcp.png"),
|
|
|
+ name: "进度测评",
|
|
|
+ url: ""
|
|
|
+ },
|
|
|
+ {
|
|
|
+ img: require("@/img/homePage/xltj.png"),
|
|
|
+ name: "训练统计",
|
|
|
+ url: ""
|
|
|
+ },
|
|
|
+ {
|
|
|
+ img: require("@/img/homePage/yjl.png"),
|
|
|
+ name: "云教练",
|
|
|
+ url: ""
|
|
|
+ },
|
|
|
+ {
|
|
|
+ img: require("@/img/homePage/yjc.png"),
|
|
|
+ name: "云教程",
|
|
|
+ url: "/cloudTextbooks"
|
|
|
+ }
|
|
|
+]
|
|
|
+const classTypes_gyt = [
|
|
|
+ {
|
|
|
+ img: require("@/img/homePage/kb.png"),
|
|
|
+ name: "课表",
|
|
|
+ url: "/curriculum"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ img: require("@/img/homePage/xl.png"),
|
|
|
+ name: "课后作业",
|
|
|
+ url: ""
|
|
|
+ },
|
|
|
+ {
|
|
|
+ img: require("@/img/homePage/jdzc.png"),
|
|
|
+ name: "阶段自测",
|
|
|
+ url: ""
|
|
|
+ },
|
|
|
+ {
|
|
|
+ img: require("@/img/homePage/xltj.png"),
|
|
|
+ name: "练习情况",
|
|
|
+ url: ""
|
|
|
+ },
|
|
|
+ {
|
|
|
+ img: require("@/img/homePage/yjl.png"),
|
|
|
+ name: "云练习",
|
|
|
+ url: ""
|
|
|
+ },
|
|
|
+ {
|
|
|
+ img: require("@/img/homePage/yjc.png"),
|
|
|
+ name: "云教材",
|
|
|
+ url: "/cloudTextbooks"
|
|
|
+ }
|
|
|
+]
|
|
|
+
|
|
|
+const classData = ref<Record<string, any>>({})
|
|
|
+const classDataLoading = ref(true)
|
|
|
+const isEmptyClassData = computed(() => {
|
|
|
+ return !Object.keys(classData.value).length
|
|
|
+})
|
|
|
+handleClassData()
|
|
|
+function handleClassData() {
|
|
|
+ if (userStoreHook.roles === "GYM") {
|
|
|
+ classDataLoading.value = true
|
|
|
+ httpAjax(getRecentCourseSchedule_gym).then(res => {
|
|
|
+ classDataLoading.value = false
|
|
|
+ if (res.code === 200) {
|
|
|
+ classData.value = res.data || {}
|
|
|
+ }
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ classDataLoading.value = true
|
|
|
+ httpAjax(getRemind_gyt).then(res => {
|
|
|
+ classDataLoading.value = false
|
|
|
+ if (res.code === 200) {
|
|
|
+ classData.value = res.data || {}
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function handleRouter(url?: string) {
|
|
|
+ url
|
|
|
+ ? router.push(url)
|
|
|
+ : useDialogConfirm({
|
|
|
+ headImg: require("@/img/homePage/ts.png"),
|
|
|
+ text: "该功能暂未开放,请敬请期待哦~",
|
|
|
+ btnShow: [true]
|
|
|
+ })
|
|
|
+}
|
|
|
+</script>
|
|
|
+<style lang="scss" scoped>
|
|
|
+.homePageNav.navContainer {
|
|
|
+ &:deep(.navCon) {
|
|
|
+ .navImg {
|
|
|
+ margin-left: 50px;
|
|
|
+ > img {
|
|
|
+ width: 91px;
|
|
|
+ height: 92px;
|
|
|
+ top: 70%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .nav {
|
|
|
+ font-size: 28px;
|
|
|
+ font-family: AlimamaFangYuanTiVF, AlimamaFangYuanTiVF;
|
|
|
+ &:last-child {
|
|
|
+ margin-right: 30px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+.homePage {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ & > :deep(.elScrollbar) {
|
|
|
+ .el-scrollbar__view {
|
|
|
+ width: 100%;
|
|
|
+ display: flex;
|
|
|
+ padding: 50px 50px 0;
|
|
|
+ }
|
|
|
+ .el-scrollbar__wrap {
|
|
|
+ overflow-x: hidden;
|
|
|
+ }
|
|
|
+ .el-scrollbar__bar.is-vertical {
|
|
|
+ width: 4px;
|
|
|
+ right: 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .classTypes {
|
|
|
+ flex-grow: 1;
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ justify-content: space-between;
|
|
|
+ height: 729px;
|
|
|
+ align-content: space-between;
|
|
|
+ .classType {
|
|
|
+ background: #feffff;
|
|
|
+ box-shadow: 0px 2px 14px 0 #f1e3cc;
|
|
|
+ border-radius: 34px;
|
|
|
+ width: 360px;
|
|
|
+ height: 350px;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ flex-direction: column;
|
|
|
+ cursor: pointer;
|
|
|
+ padding: 44px 53px;
|
|
|
+ &:hover {
|
|
|
+ transform: scale(1.02);
|
|
|
+ box-shadow: 0px 2px 14px 0px #e4d7c2;
|
|
|
+ }
|
|
|
+ > div {
|
|
|
+ margin-top: 10px;
|
|
|
+ font-family: AlimamaFangYuanTiVF, AlimamaFangYuanTiVF;
|
|
|
+ font-weight: bold;
|
|
|
+ font-size: 28px;
|
|
|
+ color: #393939;
|
|
|
+ }
|
|
|
+ > img {
|
|
|
+ width: 100%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .courseBoard {
|
|
|
+ flex-shrink: 0;
|
|
|
+ margin-left: 50px;
|
|
|
+ margin-top: -35px;
|
|
|
+ width: 572px;
|
|
|
+ height: 764px;
|
|
|
+ background: url("@/img/homePage/bg1.png") no-repeat;
|
|
|
+ background-size: 100% 100%;
|
|
|
+ position: relative;
|
|
|
+ &.isEmpty {
|
|
|
+ background: url("@/img/homePage/bg.png") no-repeat;
|
|
|
+ background-size: 100% 100%;
|
|
|
+ }
|
|
|
+ .details {
|
|
|
+ width: 100%;
|
|
|
+ position: absolute;
|
|
|
+ top: 88px;
|
|
|
+ left: 0;
|
|
|
+ padding: 0 30px;
|
|
|
+ .head {
|
|
|
+ height: 81px;
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ padding: 0 30px;
|
|
|
+ .leftCon {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ .line {
|
|
|
+ width: 8px;
|
|
|
+ height: 28px;
|
|
|
+ background: linear-gradient(180deg, #ffcb35 0%, #fea60a 100%), #ff6a67;
|
|
|
+ border-radius: 7px;
|
|
|
+ }
|
|
|
+ .title {
|
|
|
+ margin-left: 12px;
|
|
|
+ font-family: AlimamaFangYuanTiVF, AlimamaFangYuanTiVF;
|
|
|
+ font-weight: bold;
|
|
|
+ font-size: 28px;
|
|
|
+ color: #994d1c;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .rightRouter {
|
|
|
+ width: 38px;
|
|
|
+ height: 38px;
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .elSkeleton {
|
|
|
+ padding: 0 30px;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ align-items: center;
|
|
|
+ > .elSkeletonItem {
|
|
|
+ &:nth-child(1) {
|
|
|
+ margin-top: 25px;
|
|
|
+ height: 34px;
|
|
|
+ }
|
|
|
+ &:nth-child(2) {
|
|
|
+ width: 50%;
|
|
|
+ margin-top: 58px;
|
|
|
+ height: 60px;
|
|
|
+ }
|
|
|
+ &:nth-child(3) {
|
|
|
+ margin-top: 34px;
|
|
|
+ }
|
|
|
+ &:nth-child(4) {
|
|
|
+ margin-top: 34px;
|
|
|
+ }
|
|
|
+ &:nth-child(6) {
|
|
|
+ width: 100%;
|
|
|
+ height: 74px;
|
|
|
+ margin-top: 58px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .elSkeletonBtnCon {
|
|
|
+ width: 100%;
|
|
|
+ margin-top: 76px;
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ > .elSkeletonItem {
|
|
|
+ width: 216px;
|
|
|
+ height: 65px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ :deep(.empty) {
|
|
|
+ margin-top: 114px;
|
|
|
+ padding: 0;
|
|
|
+ .el-empty__image {
|
|
|
+ width: 360px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|