| | |
| | | |
| | | /* 居中布局 */ |
| | | .contentBox { |
| | | width: 1200px; |
| | | width: 1369px; |
| | | margin: 0 auto; |
| | | } |
| | | |
| | |
| | | .avatar-uploader .el-upload:hover { |
| | | border-color: #019e58; |
| | | } |
| | | |
| | | .avatarCover { |
| | | display: block; |
| | | position: absolute; |
| | |
| | | |
| | | .el-input-group__append, |
| | | .el-input-group__prepend { |
| | | /* vertical-align: initial !important; */ |
| | | /* align-items: stretch !important; */ |
| | | vertical-align: initial !important; |
| | | align-items: stretch !important; |
| | | } |
| | | |
| | | .el-select__wrapper { |
| | | height: 40px !important; |
| | | } |
| | | |
| | | /* 个人中心页面公共样式 */ |
| | |
| | | .grey { |
| | | color: #949494; |
| | | } |
| | | .el-dialog__header { |
| | | padding: 0; /* 或者自定义的值 */ |
| | | } |
| | |
| | | <template> |
| | | <div class="pageFooter"> |
| | | <div class="footerContent contentBox flex"> |
| | | <div class="infoBox flex1"> |
| | | <div class="infoBox"> |
| | | <ul class="linkBox"> |
| | | <li class="link" @click="toAboutus(index)" v-for="(item, index) in linkList" :key="index"> |
| | | <li class="link" @click="innerLink(item)" v-for="(item, index) in linkList" :key="index"> |
| | | {{ item.name }} |
| | | </li> |
| | | </ul> |
| | | <ul class="linkBox"> |
| | | <li class="link" @click="toAboutus(index)" v-for="(item, index) in newList" :key="index"> |
| | | <li class="link" @click="innerLink(item)" v-for="(item, index) in newList" :key="index"> |
| | | {{ item.name }} |
| | | </li> |
| | | </ul> |
| | | <ul class="linkBox"> |
| | | <li |
| | | class="link" |
| | | @click="toAboutus(index)" |
| | | @click="toAboutus(item)" |
| | | v-for="(item, index) in serviceList" |
| | | :key="index" |
| | | > |
| | |
| | | </li> |
| | | </ul> |
| | | <ul class="linkBox"> |
| | | <li class="link" @click="toAboutus(index)">天猫旗舰店</li> |
| | | <li class="link" style="opacity: 1; font-size: 20px" @click="toAboutus(index)"> |
| | | <li class="link" @click="toAboutus({ name: '天猫旗舰店' })">天猫旗舰店</li> |
| | | <li |
| | | class="link" |
| | | style="opacity: 1; font-size: 16px" |
| | | @click="toAboutus({ name: '京东旗舰店' })" |
| | | > |
| | | 京东旗舰店 |
| | | </li> |
| | | </ul> |
| | | </div> |
| | | <div class="QRCodeBox"> |
| | | <div style="font-size: 16px; color: #fff">媒体矩阵</div> |
| | | <div class="codeItem"> |
| | | <img src="@/assets/images/pageFooter/wechatCode.png" /> |
| | | </div> |
| | | <div class="codeItem"> |
| | | <img src="@/assets/images/pageFooter/weiboCode.png" /> |
| | | <img src="@/assets/images/pageFooter/xieheCode.png" /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | > |
| | | <span style="display: block">Copyright©2013 中国协和医科大学出版社有限公司 版权所有!</span> |
| | | </div> |
| | | <teacherCertification :isShow="teacherDialog" @dialog-Change="dialogChange" /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { reactive } from 'vue' |
| | | import { inject, onMounted, reactive, ref } from 'vue' |
| | | import teacherCertification from '@/views/personalCenter/teacherCertification.vue' |
| | | const MG = inject('MG') |
| | | const config = inject('config') |
| | | import { useRouter, useRoute } from 'vue-router' |
| | | const router = useRouter() |
| | | import { ElMessage } from 'element-plus' |
| | | const logIn = inject('logIn') |
| | | const toLinkList = reactive([]) |
| | | const thirdPartyLink = reactive([]) |
| | | let teacherDialog = ref(false) |
| | | onMounted(() => { |
| | | getBanner() |
| | | getLinkList() |
| | | }) |
| | | |
| | | const toAboutus = () => {} |
| | | 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 getBanner = () => { |
| | | MG.resource |
| | | .getItem({ |
| | | path: 'friendshipLink', |
| | | fields: { link: [] }, |
| | | paging: { start: 0, size: 99 }, |
| | | }) |
| | | .then((res) => { |
| | | console.log(res, 'link') |
| | | toLinkList.push(...res.datas) |
| | | }) |
| | | } |
| | | const getLinkList = () => { |
| | | MG.resource |
| | | .getItem({ |
| | | path: 'purchaseMethod', |
| | | fields: { link: [] }, |
| | | paging: { start: 0, size: 99 }, |
| | | }) |
| | | .then((res) => { |
| | | toLinkList.push(...res.datas) |
| | | console.log(toLinkList, 'toLinkList') |
| | | }) |
| | | } |
| | | |
| | | const innerLink = (item) => { |
| | | console.log(item, 'item') |
| | | switch (item.name) { |
| | | case '关于我们': |
| | | router.push('/aboutUs') |
| | | break |
| | | case '联系我们': |
| | | router.push('/aboutUs') |
| | | break |
| | | case '意见反馈': |
| | | ElMessage({ |
| | | message: '建设中...', |
| | | type: 'warning', |
| | | }) |
| | | break |
| | | case '操作指南': |
| | | ElMessage({ |
| | | message: '建设中...', |
| | | type: 'warning', |
| | | }) |
| | | break |
| | | case '教师认证': |
| | | console.log(localStorage.getItem(config.tokenKey)) |
| | | |
| | | if (localStorage.getItem(config.tokenKey)) { |
| | | teacherDialog.value = true |
| | | } else { |
| | | logIn() |
| | | } |
| | | break |
| | | default: |
| | | break |
| | | } |
| | | } |
| | | |
| | | const toAboutus = (item) => { |
| | | console.log(item.name, 'item') |
| | | const currentLink = toLinkList.find((i) => i.name === item.name) |
| | | console.log(currentLink, 'currentLink') |
| | | console.log(toLinkList, 'toLinkList') |
| | | if (currentLink) { |
| | | window.open(currentLink.link) |
| | | } |
| | | } |
| | | |
| | | const linkList = reactive([ |
| | | { |
| | |
| | | url: '', |
| | | }, |
| | | { |
| | | name: '北京市卫健委', |
| | | name: '北京市卫生健康委', |
| | | url: '', |
| | | }, |
| | | ]) |
| | |
| | | .pageFooter { |
| | | background: #444444; |
| | | background-image: url('@/assets/images/xiehe/home/footer-bg.png'); |
| | | background-repeat: no-repeat; |
| | | background-size: 100% 100%; |
| | | .footerContent { |
| | | padding: 30px 0; |
| | | justify-content: start; |
| | | .infoBox { |
| | | display: flex; |
| | | .linkBox { |
| | |
| | | cursor: pointer; |
| | | color: #fff; |
| | | margin-top: 20px; |
| | | font-size: 14px; |
| | | |
| | | opacity: 0.7; |
| | | &::after { |
| | | margin-left: 15px; |
| | |
| | | &:first-child { |
| | | color: #fff; |
| | | opacity: 1; |
| | | font-size: 20px; |
| | | font-size: 16px; |
| | | margin-bottom: 10px; |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | .QRCodeBox { |
| | | margin-left: 240px; |
| | | |
| | | .codeItem { |
| | | display: inline-block; |
| | | text-align: center; |
| | | margin-left: 40px; |
| | | p { |
| | | font-size: 16px; |
| | | } |
| | |
| | | |
| | | height: 80px; |
| | | line-height: 40px; |
| | | font-size: 12px; |
| | | border-top: 1px solid #e6e6e6; |
| | | font-size: 14px; |
| | | border-top: 1px solid #ccc; |
| | | .beian { |
| | | cursor: pointer; |
| | | } |
| | |
| | | </div> |
| | | <div class="searchBox" v-show="!hideSerch"> |
| | | <el-input |
| | | style="width: 500px; height: 50px" |
| | | style="width: 500px; height: 36px" |
| | | placeholder="请输入内容" |
| | | v-model="searchKey" |
| | | :suffix-icon="Search" |
| | |
| | | > |
| | | </el-input> |
| | | <div class="loginInfoBox"> |
| | | <div v-if="!userInfo" class="loginBtnBox"> |
| | | <a |
| | | <div v-if="!userInfo" class="loginBtnBox" style="width: 200px"> |
| | | <div |
| | | class="loginBtn" |
| | | @click=" |
| | | () => { |
| | | console.log(loginRef.value) |
| | | loginRef.logIn() |
| | | } |
| | | " |
| | | >注册/登录</a |
| | | > |
| | | <el-icon><UserFilled /></el-icon> |
| | | 注册/登录 |
| | | </div> |
| | | </div> |
| | | <div v-else class="userInfoBox"> |
| | | <el-dropdown @command="handleCommand"> |
| | |
| | | <div |
| | | :class="{ |
| | | navItem: true, |
| | | active: $route.fullPath.indexOf(item.path) > -1, |
| | | // active: $route.fullPath.indexOf(item.path) > -1, |
| | | active: item.pathList.findIndex((citem) => citem == $route.path) > -1, |
| | | }" |
| | | v-for="(item, index) in navData" |
| | | :key="index" |
| | |
| | | import { onMounted, provide, ref } from 'vue' |
| | | import { Search, Avatar, SwitchButton } from '@element-plus/icons-vue' |
| | | import { useUserStore } from '@/store' |
| | | import { useRouter } from 'vue-router' |
| | | import { useRouter, useRoute } from 'vue-router' |
| | | import { ElMessage } from 'element-plus' |
| | | |
| | | const userStore = useUserStore() |
| | | const router = useRouter() |
| | | const route = useRoute() |
| | | |
| | | const loginRef = ref() |
| | | const props = defineProps({ |
| | |
| | | { |
| | | name: '首页', |
| | | path: '/home', |
| | | pathList: ['/home', '/search'], |
| | | }, |
| | | { |
| | | name: '教育出版', |
| | | path: '/bookStore', |
| | | pathList: ['/bookStore', '/bookdetail'], |
| | | }, |
| | | { |
| | | name: '读者服务', |
| | | path: '/teachingServices', |
| | | pathList: ['/teachingServices'], |
| | | }, |
| | | { |
| | | name: '关于我们', |
| | | path: '/aboutUs', |
| | | pathList: ['/aboutUs'], |
| | | }, |
| | | ]) |
| | | |
| | | onMounted(() => { |
| | | userInfo.value = userStore.userInfo |
| | | console.log(userInfo.value, 'userInfo') |
| | | console.log(route, 'route') |
| | | }) |
| | | |
| | | const gotoSearch = () => { |
| | |
| | | .pageHeader { |
| | | width: 100%; |
| | | background-color: #fff; |
| | | border-bottom: 1px solid #e6e6e6; |
| | | .topBar { |
| | | background: #e6e6e6; |
| | | color: #808080; |
| | |
| | | .loginInfoBox { |
| | | width: 200px; |
| | | margin-left: 20px; |
| | | .loginBtn { |
| | | width: 100px; |
| | | background-color: #144941; |
| | | height: 36px; |
| | | line-height: 36px; |
| | | text-align: center; |
| | | border-radius: 20px; |
| | | color: #ffffff; |
| | | cursor: pointer; |
| | | } |
| | | } |
| | | .logoBox { |
| | | padding: 25px 0; |
| | |
| | | } |
| | | } |
| | | </style> |
| | | <style> |
| | | <style scoped> |
| | | .pageHeader .searchBox .el-input-group__prepend { |
| | | background: #fff; |
| | | color: #444; |
| | | } |
| | | ::v-deep(.el-input__wrapper) { |
| | | border-radius: 50px !important; |
| | | height: 36px; |
| | | line-height: 36px; |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <el-dialog |
| | | align-center |
| | | append-to-body |
| | | v-model="dialogFormVisible" |
| | | @close="closeDialog" |
| | | @open="openDialog" |
| | | class="fansdialog" |
| | | style="padding: 0; padding-bottom: 0px" |
| | | > |
| | | <div style="display: flex; justify-content: space-around"> |
| | | <div style="display: flex; justify-content: space-between"> |
| | | <el-image :src="dialogLeftImg" class="leftImg" /> |
| | | |
| | | <div class="logIn"> |
| | |
| | | <li |
| | | @click="signUpWay = 'authSignUp'" |
| | | :style="{ |
| | | color: signUpWay == 'authSignUp' ? '#144941' : '#545C63', |
| | | color: signUpWay == 'authSignUp' ? '#019E58' : '#545C63', |
| | | }" |
| | | style="font-weight: 700" |
| | | > |
| | | 手机号登录 |
| | | </li> |
| | | <li>|</li> |
| | | <li |
| | | @click="wechatLoginOpen" |
| | | :style="{ color: signUpWay == 'wechat' ? '#144941' : '#545C63' }" |
| | | :style="{ color: signUpWay == 'wechat' ? '#019E58' : '#545C63' }" |
| | | style="font-weight: 700" |
| | | > |
| | | 微信登录 |
| | | </li> |
| | |
| | | } |
| | | .fansdialog { |
| | | width: 806px; |
| | | |
| | | padding: 0 !important; |
| | | margin: 0 !important; |
| | | .leftImg { |
| | | box-sizing: border-box; |
| | | width: 403px; |
| | | } |
| | | |
| | | .el-dialog__header { |
| | | padding: 0; |
| | | ::v-deep(.el-dialog__header) { |
| | | padding: 0 !important; |
| | | padding-bottom: 0 !important; |
| | | } |
| | | |
| | | .el-dialog__body { |
| | |
| | | height: 575px; |
| | | display: flex; |
| | | padding: 0 !important; |
| | | margin: 0 !important; |
| | | } |
| | | |
| | | .leftImg { |
| | |
| | | |
| | | .el-dialog__header { |
| | | padding: 0; |
| | | padding-bottom: 0 !important; |
| | | } |
| | | |
| | | .el-dialog__body { |
| | |
| | | |
| | | p span { |
| | | line-height: 24px; |
| | | } |
| | | |
| | | .el-dialog__header { |
| | | font-size: 18px; |
| | | color: #333; |
| | | } |
| | | |
| | | .el-dialog__body { |
| | |
| | | padding-top: 48px; |
| | | display: flex; |
| | | flex-direction: column; |
| | | justify-content: space-around; |
| | | justify-content: space-between; |
| | | |
| | | .signUpTitle { |
| | | width: 100%; |
| | |
| | | background: #fff; |
| | | } |
| | | |
| | | // .el-select { |
| | | // width: 100px; |
| | | // height: 30px; |
| | | // color: red; |
| | | // border: none !important; |
| | | ::v-deep(.el-select) { |
| | | width: 100px; |
| | | height: 30px; |
| | | color: red; |
| | | border: none !important; |
| | | |
| | | // /deep/ .select-trigger { |
| | | // height: 100%; |
| | | |
| | | // .el-input--suffix { |
| | | // height: 100%; |
| | | // background-color: #fff; |
| | | // } |
| | | // } |
| | | // } |
| | | ::v-deep(.select-trigger) { |
| | | height: 100%; |
| | | .el-input--suffix { |
| | | height: 100%; |
| | | background-color: #fff; |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | |
| | | <div class="titleBox1"> |
| | | <img class="autoImg" src="@/assets/images/xiehe/about/yinhao.png" alt="" /> |
| | | </div> |
| | | <div class="titleText">Publisher Introduction</div> |
| | | <div class="titleText">PUBLISHER INTRODUCTION</div> |
| | | </div> |
| | | <div class="textBox" v-html="publisherIntroduction"></div> |
| | | <div class="statisticsBox"> |
| | |
| | | <div class="CultureBox"> |
| | | <div class="brandCultureTitle"> |
| | | <div>理念与品牌文化</div> |
| | | <div class="enText">Philosophy & Brand Culture</div> |
| | | <div class="enText">PHILOSOPHY & BRAND CULTURE</div> |
| | | </div> |
| | | <div class="cultureList" v-loading="loading"> |
| | | <div class="cultureItem firstItem"> |
| | |
| | | text-align: center; |
| | | } |
| | | .enText { |
| | | font-size: 36px; |
| | | font-size: 28px; |
| | | opacity: 0.45; |
| | | margin-top: 20px; |
| | | } |
| | |
| | | src="@/assets/images/xiehe/detail/Collection_fill.png" |
| | | style="margin-right: 10px" |
| | | /> |
| | | <span |
| | | @click="collectBook" |
| | | v-else |
| | | class="iconfont icon-shoucang" |
| | | style="margin-right: 10px" |
| | | > |
| | | </span> |
| | | <span v-else class="iconfont icon-shoucang" style="margin-right: 10px"> </span> |
| | | <div class="collectText" @click="collectBook" v-if="bookInfo.isFavourite"> |
| | | 已收藏 |
| | | </div> |
| | | |
| | | <div class="collectText" @click="collectBook" v-else> |
| | | <img |
| | | @click="collectBook" |
| | | class="buyIcon" |
| | | src="@/assets/images/xiehe/detail/Collection.png" |
| | | style="margin-right: 10px" |
| | |
| | | <el-button v-if="currentRoute == 'teachingServices'" plain @click="addPaperBook" |
| | | >纸质样书</el-button |
| | | > |
| | | <el-button plain @click="applyTextBook">申请使用</el-button> |
| | | <el-button plain @click="applyTextBook">申请试用</el-button> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | <div class="resourcesBox"> |
| | | <el-empty v-if="!resourceHave" :image-size="150" description="暂无内容"></el-empty> |
| | | <div class="distribution" v-if="resourceHave"> |
| | | <div class="title">资源分布</div> |
| | | <div class="titleBorderBox">资源分布</div> |
| | | <div class="echartsBox"> |
| | | <div class="left"> |
| | | <div id="chartsContent" style="width: 600px; height: 400px"></div> |
| | |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-bottom: 20px; |
| | | margin-top: 20px; |
| | | } |
| | | .left { |
| | | } |
| | |
| | | <img class="autoimg" src="@/assets/images/bookStore/feblei.png" /> |
| | | </div> |
| | | <div class="classificationBox"> |
| | | <div style="width: 100px">分类:</div> |
| | | <div style="width: 100px; line-height: 60px">分类:</div> |
| | | <div class="classificaListBox"> |
| | | <div |
| | | class="classificaItem" |
| | |
| | | <div class="bookfilterList"> |
| | | <div class="listTitle"> |
| | | <div>结果:共计{{ total }}条</div> |
| | | <div style="width: 300px"> |
| | | <div style="width: 340px"> |
| | | <el-input |
| | | v-model="input3" |
| | | placeholder="输入教材名称、作者姓名、出品方名称搜索" |
| | |
| | | <div class="recommendBox"> |
| | | <div class="recommendTitle">推荐教材</div> |
| | | <div class="newRecommendList"> |
| | | <div class="recommendItem" v-for="item in recommendBookListData" :key="item.id"> |
| | | <div |
| | | class="recommendItem" |
| | | v-for="item in recommendBookListData" |
| | | :key="item.id" |
| | | @click="toDetail(item)" |
| | | > |
| | | <div class="recommendItemImg"> |
| | | <img class="autoImg" :src="item.icon" /> |
| | | </div> |
| | |
| | | text-align: center; |
| | | } |
| | | .enText { |
| | | font-size: 36px; |
| | | font-size: 28px; |
| | | opacity: 0.45; |
| | | margin-top: 20px; |
| | | } |
| | |
| | | margin-top: 30px; |
| | | .classificaListBox { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | flex-wrap: wrap; |
| | | .classificaItem { |
| | | display: flex; |
| | |
| | | &:last-child { |
| | | margin-right: 0; |
| | | } |
| | | } |
| | | .recommendItem:hover { |
| | | background-image: url(@/assets/images/Mouse_fill.png); |
| | | } |
| | | .recommendItemImg { |
| | | width: 150px; |
| | |
| | | color: #144941; |
| | | } |
| | | </style> |
| | | <style> |
| | | .el-input-group__append { |
| | | background-color: #144941; |
| | | color: #fff; |
| | | } |
| | | </style> |
| | |
| | | </div> |
| | | </el-carousel-item> |
| | | </el-carousel> |
| | | <div class="contentBox" style="margin-top: 50px"> |
| | | <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"> |
| | |
| | | <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 |
| | |
| | | 作者:{{ item.authorcaupress_author ? item.caupress_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> |
| | |
| | | /> |
| | | </el-tabs> |
| | | </div> |
| | | <div class="more" style="margin-left: 20px" @click="toMore">更多></div> |
| | | </div> |
| | | |
| | | <div class="more">更多></div> |
| | | </div> |
| | | <div class="recommendList"> |
| | | <div |
| | |
| | | 作者:{{ item.authorcaupress_author ? item.caupress_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> |
| | |
| | | |
| | | const MG = inject('MG') |
| | | const config = inject('config') |
| | | const logIn = inject('logIn') |
| | | const tool = inject('tool') |
| | | const toolClass = inject('toolClass') |
| | | const banner = reactive([]) |
| | |
| | | getBookList() |
| | | getNavBookList() |
| | | }) |
| | | |
| | | const toMore = () => { |
| | | router.push({ |
| | | path: '/bookStore', |
| | | }) |
| | | } |
| | | |
| | | const toDetail = (item) => { |
| | | router.push({ |
| | |
| | | |
| | | const toAuthentication = (type) => { |
| | | if (type) { |
| | | teacherDialog.value = true |
| | | if (localStorage.getItem(config.tokenKey)) { |
| | | teacherDialog.value = true |
| | | } else { |
| | | logIn() |
| | | } |
| | | } else { |
| | | ElMessage({ |
| | | message: '建设中...', |
| | |
| | | margin-right: 0; |
| | | } |
| | | } |
| | | .recommendItem:hover { |
| | | background-image: url(@/assets/images/Mouse_fill.png); |
| | | } |
| | | } |
| | | |
| | | .recommendItemImg { |
| | |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | .titleTabs { |
| | | margin-left: 50px; |
| | | width: 70%; |
| | | width: 75%; |
| | | } |
| | | .bookListTitle { |
| | | display: flex; |
| | |
| | | <div class="bookfilterList"> |
| | | <div class="listTitle"> |
| | | <div>结果:共计{{ total }}条</div> |
| | | <div style="width: 300px"> |
| | | <el-input |
| | | v-model="input3" |
| | | placeholder="输入教材名称、作者姓名、出品方名称搜索" |
| | | class="input-with-select" |
| | | > |
| | | <template #append> |
| | | <el-button :icon="Search" @click="getBookList" /> |
| | | </template> |
| | | </el-input> |
| | | </div> |
| | | </div> |
| | | |
| | | <div> |
| | |
| | | /> |
| | | </div> |
| | | </div> |
| | | <div class="recommendBox"> |
| | | <div class="recommendTitle">推荐教材</div> |
| | | <div class="newRecommendList"> |
| | | <div class="recommendItem" v-for="item in recommendBookListData" :key="item.id"> |
| | | <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="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> |
| | | <span class="price" v-else> 定价:<span class="freePrice">免费</span> </span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref, onBeforeMount, inject, reactive, onMounted } from 'vue' |
| | | import { ref, onBeforeMount, inject, reactive, onMounted, watch } from 'vue' |
| | | import { useRouter, useRoute } from 'vue-router' |
| | | |
| | | const MG = inject('MG') |
| | |
| | | const route = useRoute() |
| | | const router = useRouter() |
| | | let currentLevel = ref('all') |
| | | |
| | | watch( |
| | | () => route.query, // 监听 path 变化 |
| | | (newPath, oldPath) => { |
| | | console.log('路由路径从', oldPath, '变为', newPath) |
| | | input3.value = newPath.key |
| | | getBookList() |
| | | }, |
| | | ) |
| | | |
| | | const toDetail = (item) => { |
| | | router.push({ |
| | |
| | | padding: 20px; |
| | | |
| | | .bookfilterList { |
| | | width: 80%; |
| | | width: 100%; |
| | | border: 1px solid #e4e7ed; |
| | | height: 100%; |
| | | border-radius: 10px; |
| | |
| | | margin-right: 0; |
| | | } |
| | | } |
| | | .recommendItem:hover { |
| | | background-image: url(@/assets/images/Mouse_fill.png); |
| | | } |
| | | .recommendItemImg { |
| | | width: 150px; |
| | | height: 200px; |