杨磊
3 天以前 81a132f7b5d022e8d55dc1fefe2a7357f5bcbafa
src/views/home/index.vue
@@ -1,17 +1,13 @@
<template>
  <div class="homePage">
    <el-carousel :height="screenheight + 'px'">
      <el-carousel-item v-for="(item, index) in banner" :key="index">
        <div class="bannerBox imgBox">
          <img id="autoHeight" class="bannerImg" :src="item.icon" @click="bannerLink(item)" />
        </div>
      </el-carousel-item>
    </el-carousel>
    <div class="contentBox" style="margin-top: 50px">
    <div class="bannerBox imgBox">
      <img class="bannerImg" :src="banner[0]?.icon" @click="bannerLink(item)" />
    </div>
    <div v-if="informationList.length > 0" class="contentBox" style="margin-top: 50px">
      <div class="informationBox">
        <div class="bookListTitle">
          <div class="title">新闻资讯</div>
          <div class="more">更多></div>
          <div class="more" @click="toMore">更多></div>
        </div>
        <div class="informationList">
          <div class="informationItem" v-for="(item, index) in informationList" :key="index">
@@ -29,25 +25,26 @@
      <div class="contentBox">
        <div class="bookListTitle">
          <div class="title">推荐教材</div>
          <div class="more">更多></div>
          <div class="more" @click="toMore">更多></div>
        </div>
        <div class="recommendList">
          <div class="recommendItem" v-for="item in bookListData" :key="item.id">
          <div
            class="recommendItem"
            v-for="item in bookListData"
            :key="item.id"
            @click="toDetail(item)"
          >
            <div class="recommendItemImg">
              <img class="autoImg" :src="item.icon" />
            </div>
            <div class="infoBox">
              <div class="bookName">{{ item.name }}</div>
              <div class="author">
                作者:{{ item.authorcaupress_author ? item.caupress_author : '-' }}
              </div>
              <div class="author">作者:{{ item.author ? item.author : '-' }}</div>
              <div class="priceBox">
                <span class="oldPrice" v-if="item.oldPrice">原价:¥{{ item.oldPrice }}</span>
                <span class="price" v-if="item.price && item.price > 0">
                  定价:¥
                  <span>{{ item.price }}</span>
                  <span> ¥{{ item.price }}</span>
                </span>
                <span class="price" v-else> 定价:<span class="freePrice">免费</span> </span>
                <span class="oldPrice" v-if="item.oldPrice"> ¥{{ item.oldPrice }}</span>
              </div>
            </div>
          </div>
@@ -56,62 +53,93 @@
    </div>
    <div class="contentBox">
      <div class="funBox">
        <div class="authentication"></div>
        <div class="manual"></div>
        <div class="authentication">
          <div class="cardNav" @click="toAuthentication(true)">
            <div class="cardTitle">教师认证</div>
            <div class="cardText">
              学校任课老师上传教师证明文件,通过认证后,可进行样书与教学资源下载申请
            </div>
          </div>
        </div>
        <div class="manual">
          <div class="cardNav" @click="toAuthentication(false)">
            <div class="cardTitle">操作手册</div>
            <div class="cardText">快速了解使用步骤,轻松开启教学支持之旅。</div>
          </div>
        </div>
      </div>
      <div class="bookListTitle">
        <div class="title" style="display: flex; line-height: 50px">
          <div>新闻资讯</div>
          <div class="titleTabs">
            <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
              <el-tab-pane label="高等职业教材" name="first"> </el-tab-pane>
              <el-tab-pane label="专升本教材" name="second"></el-tab-pane>
              <el-tab-pane label="协和医学院教材" name="third"></el-tab-pane>
          <div>教学导航</div>
          <div class="titleTabs" v-if="classfeild.length > 0">
            <el-tabs v-model="activeName" @tab-change="handleClick">
              <el-tab-pane
                v-for="item in classfeild"
                :key="item.value"
                :label="item.name"
                :name="item.value"
              />
            </el-tabs>
          </div>
          <div class="more" style="margin-left: 30px; font-weight: normal" @click="toMore">
            更多>
          </div>
        </div>
        <div class="more">更多></div>
      </div>
      <div class="recommendList">
        <div class="recommendItem" v-for="item in bookListData" :key="item.id">
        <div
          class="recommendItem"
          v-for="item in navBookList"
          :key="item.id"
          @click="toDetail(item)"
        >
          <div class="recommendItemImg">
            <img class="autoImg" :src="item.icon" />
          </div>
          <div class="infoBox">
            <div class="bookName">{{ item.name }}</div>
            <div class="author">
              作者:{{ item.authorcaupress_author ? item.caupress_author : '-' }}
            </div>
            <div class="author">作者:{{ item.author ? item.author : '-' }}</div>
            <div class="priceBox">
              <span class="oldPrice" v-if="item.oldPrice">原价:¥{{ item.oldPrice }}</span>
              <span class="price" v-if="item.price && item.price > 0">
                定价:¥
                <span>{{ item.price }}</span>
                <span>¥{{ item.price }}</span>
              </span>
              <span class="price" v-else> 定价:<span class="freePrice">免费</span> </span>
              <span class="oldPrice" v-if="item.oldPrice">¥{{ item.oldPrice }}</span>
            </div>
          </div>
        </div>
      </div>
    </div>
    <teacherCertification :isShow="teacherDialog" @dialog-Change="dialogChange" />
  </div>
</template>
<script setup>
import moment from 'moment'
import { ref, onBeforeMount, inject, reactive, onMounted } from 'vue'
import { ElMessage } from 'element-plus'
import teacherCertification from '@/views/personalCenter/teacherCertification.vue'
import { ref, onBeforeMount, inject, reactive, onMounted, watch } from 'vue'
let screenheight = ref(document.documentElement.clientHeight / 2)
import { useRouter, useRoute } from 'vue-router'
const router = useRouter()
const route = useRoute()
const MG = inject('MG')
const config = inject('config')
const logIn = inject('logIn')
const tool = inject('tool')
const toolClass = inject('toolClass')
const banner = reactive([])
const informationList = reactive([])
let classfeild = ref([])
let activeName = ref('A1')
let callbackLink = ref(null)
let bookListData = ref([])
let navBookList = ref([])
let teacherDialog = ref(false)
onBeforeMount(() => {
  console.log(document.documentElement.clientWidth / 2.628)
  window.onresize = () => {
    let c = 2.628
    if (document.documentElement.clientWidth >= 1220) {
@@ -121,11 +149,160 @@
  }
})
// 获取url参数
const getUrlParams = () => {
  let url = window.location.href
  let params = url.split('?')[1]
  let paramsObj = {}
  if (params) {
    paramsObj = params.split('&').reduce((pre, cur) => {
      pre[cur.split('=')[0]] = cur.split('=')[1]
      return pre
    }, {})
  }
  return paramsObj
}
onMounted(() => {
  // 监听是否来自数字阅读
  const params = getUrlParams()
  if (params.login) {
    localStorage.setItem('loginBack', decodeURIComponent(params.callBackUrl))
    logIn()
  }
  getBanner()
  classifList()
  getInformationList()
  getBookList()
  getNavBookList()
})
watch(
  () => route, // 监听 path 变化
  (newPath, oldPath) => {
    console.log('路由路径从', oldPath, '变为', newPath)
  },
)
const toMore = () => {
  router.push({
    path: '/bookStore',
  })
}
const toDetail = (item) => {
  router.push({
    path: '/bookdetail',
    query: {
      bookId: item.id,
    },
  })
}
const handleClick = (tab, event) => {
  console.log(tab)
  activeName.value = tab
  getNavBookList()
}
const classifList = () => {
  const query = {
    refCodes: ['digitalTextbooks'],
  }
  MG.resource.getCmsTypeByRefCode(query).then((res) => {
    const types = toolClass.handleTypeList(res)
    const typeData = types[0].cmsTypeLinks[0].children
    const temp_classfeild = typeData.find((item) => item.typeField.refCode === 'teachingLevel')
      ?.typeField.cfg.option
    const noCheck = temp_classfeild.map((item) => {
      return {
        name: item.name,
        value: item.value,
      }
    })
    console.log(noCheck, 'noCheck')
    classfeild.value = noCheck
    console.log(classfeild, 'classfeild')
  })
}
const getNavBookList = () => {
  MG.store
    .getProductList({
      path: '*',
      queryType: '*',
      storeInfo: 'defaultGoodsStore1',
      paging: {
        start: 0,
        size: 5,
      },
      fields: {
        'teachingLevel=': activeName.value,
        author: [],
      },
    })
    .then((res) => {
      console.log(res, '11111111111')
      navBookList.value = res.datas
    })
}
const dialogChange = (val) => {
  getTeacherInfo()
  if (val == false) {
    teacherDialog.value = false
  } else {
    teacherDialog.value = true
  }
}
//教师信息
function getTeacherInfo() {
  const data = {
    start: 0,
    size: 10,
    topicIdOrRefCode: 'teacherRoleApproval',
    appRefCode: config.appRefCode,
    sort: {
      type: 'Desc',
      field: 'CreateDate',
    },
  }
  MG.ugc.getTopicMessageList(data).then((res) => {
    try {
      const resData = res.datas.find((i) => i.appUserCreator.userId == userId.value)
      if (resData) {
        teacherState.value = resData.state
        if (resData.feedBack != null) {
          reasonTxt.value = JSON.parse(resData.feedBack).reason
        }
      } else {
        teacherState.value = ''
      }
      loading.value = false
    } catch (error) {
      loading.value = false
    }
  })
}
const toAuthentication = (type) => {
  if (type) {
    if (localStorage.getItem(config.tokenKey)) {
      teacherDialog.value = true
    } else {
      logIn()
    }
  } else {
    ElMessage({
      message: '建设中...',
      type: 'warning',
    })
  }
}
const getBookList = () => {
  MG.store
@@ -178,6 +355,27 @@
  min-height: calc(100vh - 61.8%);
  background-color: #fff;
  padding-bottom: 100px;
  .bannerBox {
    height: 615px;
    position: relative;
    .bannerText {
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      font-size: 36px;
      font-weight: 700;
      color: #fff;
      text-shadow: 0px 0px 10px #000000;
      text-align: center;
    }
    .enText {
      font-size: 28px;
      opacity: 0.45;
      margin-top: 10px;
    }
  }
}
.el-carousel__item h3 {
  color: #475669;
@@ -249,7 +447,6 @@
.bookListBox {
  width: 100%;
  padding: 80px 0;
  margin-top: 30px;
  background-repeat: no-repeat;
  background-size: 100% 100%;
  background-image: url('@/assets/images/tuijian-bg.png');
@@ -275,6 +472,9 @@
      margin-right: 0;
    }
  }
  .recommendItem:hover {
    background-image: url(@/assets/images/Mouse_fill.png);
  }
}
.recommendItemImg {
@@ -288,21 +488,26 @@
  text-align: center;
  margin-top: 10px;
}
.bookName {
  font-weight: 700;
}
.author {
  margin-top: 10px;
  color: #333333;
}
.priceBox {
  margin-top: 10px;
  .oldPrice {
    font-size: 16px;
    color: #444444;
    color: #999999;
    text-decoration: line-through;
    margin-right: 20px;
    margin-left: 20px;
  }
  .price {
    span {
      font-weight: bold;
      font-size: 14px;
      color: #d91523;
    }
  }
}
@@ -314,23 +519,24 @@
  margin-top: 60px;
  margin-bottom: 60px;
  .authentication {
    width: 40%;
    height: 80px;
    width: 48%;
    height: 123px;
    background-repeat: no-repeat;
    background-size: 100% 100%;
    background-image: url('@/assets/images/xiehe/home/jiaoshirenzheng.png');
  }
  .manual {
    width: 40%;
    height: 80px;
    width: 48%;
    height: 123px;
    background-repeat: no-repeat;
    background-size: 100% 100%;
    background-image: url('@/assets/images/xiehe/home/jiaoshirenzheng.png');
    background-image: url('@/assets/images/xiehe/home/caozuoshouce.png');
  }
}
.titleTabs {
  margin-left: 50px;
  width: 85%;
}
.bookListTitle {
  display: flex;
@@ -351,4 +557,28 @@
    cursor: pointer;
  }
}
.cardNav {
  margin-left: 30%;
  margin-top: 20px;
  padding-right: 20px;
  cursor: pointer;
  .cardTitle {
    font-size: 28px;
    color: #ffffff;
  }
  .cardText {
    font-size: 14px;
    color: #ccc;
    margin-top: 10px;
    line-height: 20px;
  }
}
::v-deep(.el-tabs__item) {
  align-items: stretch;
  height: 60px !important;
  line-height: 20px;
  text-align: center;
  white-space: pre-wrap !important;
}
</style>