From 49a435043b0b1a289a24606e35253365d7ab3956 Mon Sep 17 00:00:00 2001 From: QYF-GitLab1 <1940665526@qq.com> Date: 星期一, 25 八月 2025 17:51:57 +0800 Subject: [PATCH] 首页、及教学出版样式修改 --- src/views/bookStore/index.vue | 305 ++++++++++++++++++++++++++++++++------------------ 1 files changed, 192 insertions(+), 113 deletions(-) diff --git a/src/views/bookStore/index.vue b/src/views/bookStore/index.vue index 0c89bff..c568d39 100644 --- a/src/views/bookStore/index.vue +++ b/src/views/bookStore/index.vue @@ -4,7 +4,7 @@ <img class="bannerImg" :src="banner[0]?.icon" @click="bannerLink(item)" /> <div class="bannerText"> <div>鏁板瓧鏁欐潗</div> - <div class="enText">ABOUT US</div> + <div class="enText">TEXT BOOK</div> </div> </div> <div class="contentBox" style="margin-top: 50px"> @@ -12,9 +12,10 @@ <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" v-for="(item, index) in classfeild" :key="index"> + <div class="classificaItem" :class="{ active: currentLevel == item.value }" + v-for="(item, index) in classfeild" :key="index" @click="changeLevel(item)"> {{ item.name }} </div> </div> @@ -23,15 +24,11 @@ <div class="bookList"> <div class="bookfilterList"> <div class="listTitle"> - <div>缁撴灉锛氬叡璁�***鏉�</div> - <div style="width: 300px"> - <el-input - v-model="input3" - placeholder="杈撳叆鏁欐潗鍚嶇О銆佷綔鑰呭鍚嶃�佸嚭鍝佹柟鍚嶇О鎼滅储" - class="input-with-select" - > + <div>缁撴灉锛氬叡璁{ total }}鏉�</div> + <div style="width: 340px"> + <el-input v-model="input3" placeholder="杈撳叆涔﹀悕銆佷綔鑰呫�佷功鍙锋悳绱�" class="input-with-select"> <template #append> - <el-button :icon="Search" /> + <el-button :icon="Search" @click="getBookList" /> </template> </el-input> </div> @@ -39,27 +36,20 @@ <div> <div class="recommendList"> - <div - class="recommendItem" - v-for="item in bookListData" - :key="item.id" - @click="toDetail(item)" - > + <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 > 0">楼 {{ item.oldPrice }}</span> + <span class="price" v-if="item.price && item.price == 0"> <span class="freePrice">鍏嶈垂</span> + </span> </div> </div> </div> @@ -70,35 +60,27 @@ </div> <div class="pagingBox"> - <el-pagination - layout="total, prev, pager, next" - :total="total" - v-model:current-page="currentPage1" - :page-size="20" - @current-change="handleCurrentChange" - hide-on-single-page="true" - /> + <el-pagination layout="total, prev, pager, next" :total="total" v-model:current-page="currentPage1" + :page-size="20" @current-change="handleCurrentChange" hide-on-single-page="true" /> </div> </div> <div class="recommendBox"> <div class="recommendTitle">鎺ㄨ崘鏁欐潗</div> <div class="newRecommendList"> - <div class="recommendItem" v-for="item in bookListData" :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> <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 > 0">楼 {{ item.oldPrice }}</span> + <span class="price" v-if="item.price && item.price == 0"> <span class="freePrice">鍏嶈垂</span> + </span> </div> </div> </div> @@ -121,9 +103,11 @@ import { Search } from '@element-plus/icons-vue' const input3 = ref('') let bookListData = ref([]) -const total = ref(50) +let recommendBookListData = ref([]) +const total = ref(0) const currentPage1 = ref(1) const router = useRouter() +let currentLevel = ref('all') const toDetail = (item) => { router.push({ @@ -134,12 +118,17 @@ }) } +const changeLevel = (item) => { + currentLevel.value = item.value + getBookList() +} + const getBanner = () => { MG.resource .getItem({ path: 'banner\\educationPublishing', fields: { link: [] }, - paging: { start: 0, size: 9 }, + paging: { start: 0, size: 20 }, }) .then((res) => { banner.push(...res.datas) @@ -152,7 +141,7 @@ getBookList() } -const getBookList = () => { +const getRecommendBookList = () => { MG.store .getProductList({ path: 'recommendedTextbooks', @@ -165,9 +154,47 @@ }, }) .then((res) => { - console.log(res, '鎺ㄨ崘鏁欐潗') - bookListData.value = res.datas + recommendBookListData.value = res.datas?.map(item => { + return { + ...item, + price: toolClass.toDecimal2(item.price), + oldPrice: toolClass.toDecimal2(item.oldPrice), + } + }) }) +} + +const getBookList = () => { + const query = { + path: '*', + queryType: '*', + storeInfo: 'defaultGoodsStore1', + paging: { + start: (currentPage1.value - 1) * 20, + size: 20, + }, + fields: { + author: [], + }, + } + if (currentLevel.value !== 'all') { + query.fields['teachingLevel='] = currentLevel.value + } + if (input3.value) { + query.fields['||Name*'] = input3.value + query.fields['||author*'] = input3.value + query.fields['||isbn*'] = input3.value + } + MG.store.getProductList(query).then((res) => { + bookListData.value = res.datas?.map(item => { + return { + ...item, + price: toolClass.toDecimal2(item.price), + oldPrice: toolClass.toDecimal2(item.oldPrice), + } + }) + total.value = res.total + }) } const classifList = () => { @@ -175,21 +202,19 @@ refCodes: ['digitalTextbooks'], } MG.resource.getCmsTypeByRefCode(query).then((res) => { - console.log(res, 'res') const types = toolClass.handleTypeList(res) const typeData = types[0].cmsTypeLinks[0].children feildList.push(...typeData) const temp_classfeild = typeData.find((item) => item.typeField.refCode === 'teachingLevel') ?.typeField.cfg.option classfeild.push({ name: '鍏ㄩ儴', value: 'all' }, ...temp_classfeild) - console.log(typeData, 'typeData') - console.log(classfeild, 'classfeild') }) } onMounted(() => { getBanner() classifList() getBookList() + getRecommendBookList() }) </script> @@ -203,6 +228,7 @@ .bannerBox { height: 380px; position: relative; + .bannerText { position: absolute; top: 50%; @@ -214,8 +240,9 @@ text-shadow: 0px 0px 10px #000000; text-align: center; } + .enText { - font-size: 36px; + font-size: 28px; opacity: 0.45; margin-top: 20px; } @@ -225,9 +252,12 @@ display: flex; justify-content: space-between; margin-top: 30px; + .classificaListBox { display: flex; + justify-content: space-between; flex-wrap: wrap; + .classificaItem { display: flex; align-items: center; @@ -242,6 +272,7 @@ } } } + .bookList { display: flex; justify-content: space-between; @@ -252,6 +283,7 @@ border: 1px solid #e4e7ed; height: 100%; border-radius: 10px; + .listTitle { display: flex; justify-content: space-between; @@ -259,21 +291,27 @@ padding: 20px 30px; } } + .recommendBox { width: 19%; border: 1px solid #e4e7ed; border-radius: 10px; + .recommendTitle { - height: 50px; - line-height: 50px; - padding-left: 20px; - border-bottom: 1px solid #e4e7ed; + height: 29px; + font-family: PingFang SC, PingFang SC; + font-weight: bold; + font-size: 16px; color: #333333; - font-weight: 700; + line-height: 29px; + border-bottom: 1px solid #e4e7ed; + padding: 0px 10px; + box-sizing: border-box; } } } } + .recommendList { display: flex; padding: 20px; @@ -282,46 +320,84 @@ justify-content: start; .recommendItem { - margin-right: 20px; - width: 22%; - height: 300px; + margin-right: 10px; + width: 240px; + height: 357px; background-repeat: no-repeat; background-size: 100% 100%; cursor: pointer; border: 1px solid #dedede; - background-color: #fff; + background: rgba(255, 255, 255, 0.73); + border-radius: 8px 8px 8px 8px; + border: 1px solid #DEDEDE; padding-top: 10px; - margin-top: 10px; + padding: 30px 0; + box-sizing: border-box; + margin-bottom: 10px; + &:last-child { margin-right: 0; } - } - .recommendItemImg { - width: 150px; - height: 200px; - position: relative; - margin: 0 auto; - } - .infoBox { - text-align: center; - margin-top: 10px; - } - .author { - margin-top: 10px; - } - .priceBox { - margin-top: 10px; - .oldPrice { - font-size: 16px; - color: #444444; - text-decoration: line-through; - margin-right: 20px; + + + &:hover { + background-image: url(@/assets/images/Mouse_fill.png); + background-position: center; + background-size: 100% 100%; + background-repeat: no-repeat; } - .price { - span { - font-weight: bold; - font-size: 14px; - } + + .recommendItemImg { + width: 139px; + height: 189px; + position: relative; + margin: 0 auto; + } + + } +} + +.infoBox { + text-align: center; + padding: 20px 0; + box-sizing: border-box; + font-family: Microsoft YaHei UI, Microsoft YaHei UI; + box-sizing: border-box; +} + +.bookName { + font-weight: bold; + font-size: 18px; + color: #000000; + font-weight: 700; +} + +.author { + font-weight: 400; + font-size: 16px; + color: #333333; + padding: 15px 0; + box-sizing: border-box; +} + +.priceBox { + font-family: DIN, DIN; + font-weight: 500; + font-size: 18px; + color: #D91523; + padding: 15px 0; + box-sizing: border-box; + + .oldPrice { + color: #999999; + text-decoration: line-through; + margin-left: 20px; + } + + .price { + span { + font-weight: bold; + color: #d91523; } } } @@ -332,52 +408,55 @@ flex-direction: column; justify-content: center; align-items: center; + .recommendItem { - margin-right: 20px; - height: 300px; + margin-right: 1%; + width: 240px; + height: 357px; background-repeat: no-repeat; background-size: 100% 100%; cursor: pointer; background-color: #fff; padding-top: 10px; margin-top: 10px; + &:last-child { margin-right: 0; } - } - .recommendItemImg { - width: 150px; - height: 200px; - position: relative; - margin: 0 auto; - } - .infoBox { - text-align: center; - margin-top: 10px; - } - .author { - margin-top: 10px; - } - .priceBox { - margin-top: 10px; - .oldPrice { - font-size: 16px; - color: #444444; - text-decoration: line-through; - margin-right: 20px; + + .recommendItemImg { + width: 150px; + height: 200px; + position: relative; + margin: 0 auto; } - .price { - span { - font-weight: bold; - font-size: 14px; - } + + .recommendItem:hover { + background-image: url(@/assets/images/Mouse_fill.png); + background-position: center; + background-size: 100% 100%; + background-repeat: no-repeat; } } + } + .pagingBox { display: flex; justify-content: center; margin: 20px 0; padding-bottom: 30px; } + +.active { + background-color: #ebf8f8; + border: 1px solid #144941; + color: #144941; +} +</style> +<style> +.el-input-group__append { + background-color: #144941; + color: #fff; +} </style> -- Gitblit v1.9.1