123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397 |
- <!--
- * @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 classTypeObj[userStoreHook.roles!]" :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 v-if="userStoreHook.roles !== 'KLX'" class="rightRouter" @click="handleRouterCurriculum" 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"
- @update="handleClassData"
- />
- <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"
- import { format } from "@/libs/tools"
- 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: "/cloudPractice"
- },
- {
- 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: "/cloudPractice"
- },
- {
- img: require("@/img/homePage/yjc.png"),
- name: "云课堂",
- url: "/cloudTextbooks"
- }
- ]
- const classTypes_klx = [
- {
- img: require("@/img/homePage/kb.png"),
- name: "课表",
- url: ""
- },
- {
- 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: "/cloudPractice"
- },
- {
- img: require("@/img/homePage/yjc.png"),
- name: "云课堂",
- url: "/cloudTextbooks"
- }
- ]
- const classTypeObj = {
- GYT: classTypes_gyt,
- GYM: classTypes_gym,
- KLX: classTypes_klx
- }
- /* 下次课程信息 */
- const classData = ref<Record<string, any>>({})
- const classDataLoading = ref(true)
- const isEmptyClassData = computed(() => {
- return !Object.keys(classData.value).length
- })
- // 现在酷乐秀没有课表功能
- if (userStoreHook.roles !== "KLX") {
- handleClassData()
- } else {
- classDataLoading.value = false
- }
- 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]
- })
- }
- function handleRouterCurriculum() {
- router.push({
- path: "/curriculum",
- query: {
- date: classData.value.classDate ? format(classData.value.classDate) : ""
- }
- })
- }
- </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;
- }
- }
- .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;
- &:hover {
- opacity: $opacity-hover;
- }
- }
- }
- .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>
|