xuhuajiao
1 year ago
17 changed files with 893 additions and 1204 deletions
-
BINlibrary-activity/src/assets/images/640.jpg
-
6library-activity/src/main.js
-
21library-activity/src/utils/api.js
-
5library-activity/src/views/bookList/bookList.vue
-
868library-activity/src/views/cart/cart.vue
-
13library-activity/src/views/index.vue
-
62library-activity/src/views/mine/mine.vue
-
72library-activity/src/views/myAddress/addAddress.vue
-
54library-activity/src/views/myAddress/myAddress.vue
-
353library-activity/src/views/myLending/myLending.vue
-
442library-activity/src/views/order/order.vue
-
82library-activity/src/views/orderDetail/orderDetail.vue
-
4library-activity/vite.config.js
-
84selfServiceMachine/src/api/bookshelf.js
-
2selfServiceMachine/src/utils/request.js
-
18selfServiceMachine/src/views/bookRecommend.vue
-
7selfServiceMachine/vue.config.js
After Width: 1080 | Height: 1080 | Size: 197 KiB |
@ -1,395 +1,589 @@ |
|||
<template> |
|||
<div class="main"> |
|||
<div class="cart-main"> |
|||
<div class="cart-top"> |
|||
<div class="cart-num">图书数量<span>({{list.length}})</span></div> |
|||
<span @click="cartDelt">{{ !isDeltHandle ? '管理' : '完成' }}</span> |
|||
</div> |
|||
<div class="cart-list"> |
|||
<div class="cart-item" v-if="list.length !== 0"> |
|||
<div class="list-top"> |
|||
<van-checkbox v-model="activeSelect" @change="handleselectedAll"></van-checkbox> |
|||
<div class="top-info"> |
|||
<p class="active-name">{{ list[0].selectName }}<i></i></p> |
|||
<p class="dealer">{{ list[0].supplierName }}</p> |
|||
<div class="cart-main"> |
|||
<div class="cart-top"> |
|||
<div class="cart-num"> |
|||
图书数量<span>({{ totalLength }})</span> |
|||
</div> |
|||
<span @click="cartDelt">{{ |
|||
!isDeltHandle ? '管理' : '完成' |
|||
}}</span> |
|||
</div> |
|||
<div class="cart-list"> |
|||
<div v-for="(bookItem, index) in list" :key="index" > |
|||
<div class="cart-item" v-if="bookItem.length !== 0"> |
|||
<div class="list-top"> |
|||
<van-checkbox v-model="bookItem.activeSelect" @change="handleselectedAll(index)"></van-checkbox> |
|||
<div class="top-info"> |
|||
<p class="active-name"> |
|||
{{ bookItem[0] && bookItem[0].selectName }}<i></i> |
|||
</p> |
|||
<p class="dealer">{{ bookItem[0] && bookItem[0].supplierName}}</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="product-list"> |
|||
<div v-for="(item,index) in list" :key="item.id" class="product-item" > |
|||
<van-checkbox v-model="item.checked" @change="handleSingle(index)"></van-checkbox> |
|||
<div class="product-cont" @click="getOnlineBookDetail(item.bookId)"> |
|||
<div class="product-img"><img :src="'http://192.168.99.67:8080/demoOnlineSelect/getBookCover.do?id='+item.bookId" alt="" /></div> |
|||
<div class="product-txt"> |
|||
<div class="product-info"> |
|||
<h4 class="overflow-txt-only">{{item.bookName}} </h4> |
|||
<div class="author-date"> |
|||
<p class="author overflow-txt-only">{{item.author}}</p> |
|||
<p class="date overflow-txt-only">{{item.createdDate}}</p> |
|||
</div> |
|||
<div class="intro overflow-txt">{{item.introduce}}</div> |
|||
<div class="product-list" v-for="(item, i) in bookItem" :key="item.id"> |
|||
<div class="product-item"> |
|||
<!-- @change="handleSingle(index)" --> |
|||
<van-checkbox v-model="item.checked"></van-checkbox> |
|||
<div |
|||
class="product-cont" |
|||
@click="getOnlineBookDetail(item.bookId)" |
|||
> |
|||
<div class="product-img"> |
|||
<img |
|||
:src=" |
|||
'http://192.168.99.67:8080/demoOnlineSelect/getBookCover.do?id=' + |
|||
item.bookId |
|||
" |
|||
alt="" |
|||
/> |
|||
</div> |
|||
<div class="product-bottom"> |
|||
<p class="product-price">实付款 <span><i class="rmb">¥</i>0</span><i><em>¥</em>{{item.price}}</i></p> |
|||
<span v-if="!isDeltHandle" class="product-num">x1</span> |
|||
<span v-else class="item-delt" @click.stop="deltCurrentItem(item.bookId)"></span> |
|||
<div class="product-txt"> |
|||
<div class="product-info"> |
|||
<h4 class="overflow-txt-only"> |
|||
{{ item.bookName }} |
|||
</h4> |
|||
<div class="author-date"> |
|||
<p class="author overflow-txt-only"> |
|||
{{ item.author }} |
|||
</p> |
|||
<p class="date overflow-txt-only"> |
|||
{{ item.createdDate }} |
|||
</p> |
|||
</div> |
|||
<div class="intro overflow-txt"> |
|||
{{ item.introduce }} |
|||
</div> |
|||
</div> |
|||
<div class="product-bottom"> |
|||
<p class="product-price"> |
|||
实付款 |
|||
<span><i class="rmb">¥</i>0</span |
|||
><i><em>¥</em>{{ item.price }}</i> |
|||
</p> |
|||
<span |
|||
v-if="!isDeltHandle" |
|||
class="product-num" |
|||
>x1</span |
|||
> |
|||
<span |
|||
v-else |
|||
class="item-delt" |
|||
@click.stop=" |
|||
deltCurrentItem(item.id) |
|||
" |
|||
></span> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="empty-data" v-if="list.length === 0"> |
|||
<img src="@assets/images/empty.png" alt="" /> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="empty-data" v-if="list.length === 0"> |
|||
<img src="@assets/images/empty.png" alt="" /> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="cart-pay" v-if="list.length !== 0"> |
|||
<van-checkbox v-model="activeSelect">全选</van-checkbox> |
|||
<div v-if="!isDeltHandle" class="payment-right"> |
|||
<div class="total-num">合计:<span><i class="rmb">¥</i>0</span></div> |
|||
<p class="pay-btn" @click="goPay">下单</p> |
|||
</div> |
|||
<div v-else class="payment-right"> |
|||
<p class="delt-btn" @click="confirmDelt">删除</p> |
|||
</div> |
|||
</div> |
|||
<div class="cart-pay" v-if="list.length !== 0"> |
|||
<van-checkbox v-model="allSelected">全选</van-checkbox> |
|||
<div v-if="!isDeltHandle" class="payment-right"> |
|||
<div class="total-num"> |
|||
合计:<span><i class="rmb">¥</i>0</span> |
|||
</div> |
|||
<p class="pay-btn" @click="goPay">下单</p> |
|||
</div> |
|||
<div v-else class="payment-right"> |
|||
<p class="delt-btn" @click="confirmDelt">删除</p> |
|||
</div> |
|||
</div> |
|||
|
|||
<TabBar :tabCur.sync="tabCur" /> |
|||
|
|||
<van-dialog v-model:show="showDetial" :show-confirm-button="false"> |
|||
<div class="bookItem-dialog-detail"> |
|||
<div class="list-top"> |
|||
<div class="top-info"> |
|||
<p class="active-name">你选书,我买单<i></i></p> |
|||
</div> |
|||
</div> |
|||
<div class="product-cont"> |
|||
<div class="product-cont-left"> |
|||
<div class="product-img"> |
|||
<img :src="'http://192.168.99.67:8080/demoOnlineSelect/getBookCover.do?id='+detailBook.id" alt="" /> |
|||
</div> |
|||
<div class="book-inventory"> |
|||
<p>剩余库存</p> |
|||
<span><i>{{ parseInt(detailBook.total)-parseInt(detailBook.purchase) }}</i>册</span> |
|||
</div> |
|||
</div> |
|||
<div class="product-txt"> |
|||
<div class="product-info"> |
|||
<h4>{{ detailBook.bookName }}</h4> |
|||
<div class="bookItem-txt"> |
|||
<span>著者:</span> |
|||
<p class="author">{{ detailBook.author }}</p> |
|||
</div> |
|||
<div class="bookItem-txt"> |
|||
<span>出版社:</span> |
|||
<p>{{ detailBook.publish }}</p> |
|||
</div> |
|||
<div class="bookItem-txt"> |
|||
<span>出版时间:</span> |
|||
<p>{{ detailBook.createdDate }}</p> |
|||
</div> |
|||
<div class="bookItem-txt"> |
|||
<!-- :style="{ width: detailBook.introduce !== '' ? '1.42rem' : 'auto' }" --> |
|||
<span class="txt-title">简介:</span> |
|||
<p class="intro-txt">{{ detailBook.introduce !== '' ? detailBook.introduce : '暂无简介'}}</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="order-dealer"> |
|||
<p class="dealer">{{ detailBook.supplierName }}</p> |
|||
<div class="order-pay"> |
|||
<p>实付款<span><i>¥</i>0</span></p> |
|||
<span class="yj-price"><i>¥</i><em>{{ detailBook.price }}</em></span> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="dialog-btn"> |
|||
<span @click="showDetial=false">关闭</span> |
|||
</div> |
|||
</van-dialog> |
|||
<van-dialog v-model:show="showDetial" :show-confirm-button="false"> |
|||
<div class="bookItem-dialog-detail"> |
|||
<div class="list-top"> |
|||
<div class="top-info"> |
|||
<p class="active-name">你选书,我买单<i></i></p> |
|||
</div> |
|||
</div> |
|||
<div class="product-cont"> |
|||
<div class="product-cont-left"> |
|||
<div class="product-img"> |
|||
<img |
|||
:src=" |
|||
$coverUrl+'/demoOnlineSelect/getBookCover.do?id=' + |
|||
detailBook.id |
|||
" |
|||
alt="" |
|||
/> |
|||
</div> |
|||
<div class="book-inventory"> |
|||
<p>剩余库存</p> |
|||
<span |
|||
><i>{{ |
|||
parseInt(detailBook.total) - |
|||
parseInt(detailBook.purchase) |
|||
}}</i |
|||
>册</span |
|||
> |
|||
</div> |
|||
</div> |
|||
<div class="product-txt"> |
|||
<div class="product-info"> |
|||
<h4>{{ detailBook.bookName }}</h4> |
|||
<div class="bookItem-txt"> |
|||
<span>著者:</span> |
|||
<p class="author">{{ detailBook.author }}</p> |
|||
</div> |
|||
<div class="bookItem-txt"> |
|||
<span>出版社:</span> |
|||
<p>{{ detailBook.publish }}</p> |
|||
</div> |
|||
<div class="bookItem-txt"> |
|||
<span>出版时间:</span> |
|||
<p>{{ detailBook.createdDate }}</p> |
|||
</div> |
|||
<div class="bookItem-txt"> |
|||
<span class="txt-title">简介:</span> |
|||
<p class="intro-txt"> |
|||
{{ |
|||
detailBook.introduce !== '' |
|||
? detailBook.introduce |
|||
: '暂无简介' |
|||
}} |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="order-dealer"> |
|||
<p class="dealer">{{ detailBook.supplierName }}</p> |
|||
<div class="order-pay"> |
|||
<p> |
|||
实付款<span><i>¥</i>0</span> |
|||
</p> |
|||
<span class="yj-price" |
|||
><i>¥</i><em>{{ detailBook.price }}</em></span |
|||
> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="dialog-btn"> |
|||
<span @click="showDetial = false">关闭</span> |
|||
</div> |
|||
</van-dialog> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { Toast } from 'vant' |
|||
import { reactive, computed, onMounted, getCurrentInstance, toRefs } from 'vue' |
|||
import { reactive, computed, watch, onMounted, getCurrentInstance, toRefs } from 'vue' |
|||
import TabBar from '@/components/tabBar/index.vue' |
|||
|
|||
export default { |
|||
name: 'Cart', |
|||
components: { TabBar }, |
|||
setup() { |
|||
const { proxy } = getCurrentInstance() |
|||
let data = reactive({ |
|||
tabCur: 1, |
|||
activeSelect: false, |
|||
allSelected: false, |
|||
isDeltHandle: false, |
|||
showDetial: false, |
|||
list:[], |
|||
checkedCount: [], |
|||
detailBook: null |
|||
tabCur: 1, |
|||
allSelected: false, |
|||
isDeltHandle: false, |
|||
showDetial: false, |
|||
list: [], |
|||
totalLength: 0, |
|||
checkedCount: [], |
|||
detailBook: null, |
|||
checkedBooks:[], |
|||
checkedBooksPay:[] |
|||
}) |
|||
watch(data.list, () => { |
|||
data.allSelected = allSelected; |
|||
}, { deep: true }); |
|||
|
|||
onMounted(() => { |
|||
getMyshoppingCart() |
|||
}) |
|||
getMyshoppingCart() |
|||
}) |
|||
|
|||
let getMyshoppingCart = () => { |
|||
let param = { |
|||
} |
|||
proxy.$http |
|||
.get(proxy.$API.MYSHOPPINGCART, |
|||
{ |
|||
params: param |
|||
} |
|||
) |
|||
.then(res => { |
|||
data.list = res.data[0] |
|||
}) |
|||
.catch((res) => { |
|||
console.log(res) |
|||
}) |
|||
} |
|||
const allSelected = computed({ |
|||
get() { |
|||
return data.list.every(bookItem => { |
|||
return bookItem.every(item => item.checked); |
|||
}); |
|||
}, |
|||
set(checked) { |
|||
data.list.forEach(bookItem => { |
|||
bookItem.forEach(item => { |
|||
item.checked = checked; |
|||
}); |
|||
}); |
|||
} |
|||
}); |
|||
|
|||
let getOnlineBookDetail = (bookId) => { |
|||
proxy.$http |
|||
.post(proxy.$API.BOOKONLINEDETAIL, |
|||
{ |
|||
bookId: bookId |
|||
}, |
|||
{ |
|||
headers: { |
|||
'Content-Type': 'application/x-www-form-urlencoded' |
|||
} |
|||
} |
|||
) |
|||
.then(res => { |
|||
data.detailBook = res.data.book |
|||
data.showDetial = true |
|||
}) |
|||
.catch((res) => { |
|||
console.log(res) |
|||
}) |
|||
} |
|||
let getMyshoppingCart = () => { |
|||
let param = {} |
|||
proxy.$http |
|||
.get(proxy.$API.MYSHOPPINGCART, { |
|||
params: param, |
|||
}) |
|||
.then((res) => { |
|||
if(res.data.length === 0){ |
|||
data.list = [] |
|||
}else{ |
|||
let allArraysEmpty = true; |
|||
for (let i = 0; i < res.data.length; i++) { |
|||
if (res.data[i].length !== 0) { // 如果当前子数组不为空 |
|||
allArraysEmpty = false; // 设置所有子数组都不为空的标记为 false |
|||
break; |
|||
} |
|||
} |
|||
if (allArraysEmpty) { |
|||
data.list = [] |
|||
console.log('都为空') |
|||
} else { |
|||
data.list = res.data |
|||
data.list.forEach(bookItem => { |
|||
watch(bookItem, () => { |
|||
bookItem.activeSelect = bookItem.every(item => item.checked); |
|||
}, { deep: true }); |
|||
}) |
|||
data.totalLength = data.list.map(books => books.length).reduce((total, length) => total + length, 0); |
|||
} |
|||
} |
|||
}) |
|||
.catch((res) => { |
|||
console.log(res) |
|||
}) |
|||
} |
|||
|
|||
let deltBookShoppingCart = (ids) => { |
|||
let param = { |
|||
ids: ids |
|||
} |
|||
proxy.$http |
|||
.post(proxy.$API.DELETBOOKTOSHOPPINGCART, |
|||
param,{ |
|||
headers: { |
|||
'Content-Type': 'application/x-www-form-urlencoded' |
|||
} |
|||
} |
|||
) |
|||
.then(res => { |
|||
let getOnlineBookDetail = (bookId) => { |
|||
proxy.$http |
|||
.post( |
|||
proxy.$API.BOOKONLINEDETAIL, |
|||
{ |
|||
bookId: bookId, |
|||
}, |
|||
{ |
|||
headers: { |
|||
'Content-Type': 'application/x-www-form-urlencoded', |
|||
}, |
|||
} |
|||
) |
|||
.then((res) => { |
|||
data.detailBook = res.data.book |
|||
data.showDetial = true |
|||
}) |
|||
.catch((res) => { |
|||
console.log(res) |
|||
}) |
|||
} |
|||
let deltBookShoppingCart = (ids) => { |
|||
let param = { |
|||
ids: ids, |
|||
} |
|||
proxy.$http |
|||
.put( |
|||
proxy.$API.DELETBOOKTOSHOPPINGCART, |
|||
param, |
|||
{ |
|||
headers: { |
|||
'Content-Type': 'application/x-www-form-urlencoded' |
|||
}, |
|||
} |
|||
) |
|||
.then((res) => { |
|||
getMyshoppingCart() |
|||
Toast("删除成功") |
|||
}) |
|||
.catch((res) => { |
|||
console.log(res) |
|||
}) |
|||
} |
|||
|
|||
}) |
|||
.catch((res) => { |
|||
console.log(res) |
|||
}) |
|||
} |
|||
let confirmDelt = () => { |
|||
// let ids = data.list.filter(item => item.checked).map(item => item.id); |
|||
// console.log('ids',ids) |
|||
// if(ids.length === 0){ |
|||
// Toast('请选择你需要删除的书籍') |
|||
// }else{ |
|||
// ids = ids.join(',') |
|||
// console.log(ids) |
|||
// deltBookShoppingCart(ids) |
|||
// } |
|||
data.checkedBooks = data.list |
|||
.flat() // 将二维数组转为一维数组 |
|||
.filter(item => item.checked === true) |
|||
.map(item => item.id); |
|||
|
|||
let goPay = () => { |
|||
proxy.$router.push({ path: '/CartResult' }) |
|||
} |
|||
let cartDelt = () =>{ |
|||
data.isDeltHandle = !data.isDeltHandle |
|||
} |
|||
let deltCurrentItem = (bookId) =>{ |
|||
// const targetList = type === 'active1' ? data.list : data.list2 |
|||
const index = data.list.findIndex(item => item.bookId === bookId) |
|||
if (index !== -1) { |
|||
// data.list.splice(index, 1) |
|||
let ids = []; |
|||
ids.push(data.list[index].bookId) |
|||
ids = ids.join(','); |
|||
if(data.checkedBooks.length === 0){ |
|||
Toast('请选择你需要删除的书籍') |
|||
}else{ |
|||
const ids = data.checkedBooks.join(',') |
|||
console.log(ids) |
|||
deltBookShoppingCart(ids) |
|||
} |
|||
} |
|||
} |
|||
|
|||
// 商品单选 |
|||
let handleSingle = (index) => { |
|||
const selectedProductsCount = data.list.filter(item => item.checked).length; |
|||
if (selectedProductsCount === 1 && !data.list.find(p => p.checked).checked) { |
|||
data.activeSelect = false; |
|||
} else { |
|||
data.activeSelect = selectedProductsCount === data.list.length; |
|||
} |
|||
} |
|||
let cartDelt = () => { |
|||
data.isDeltHandle = !data.isDeltHandle |
|||
} |
|||
|
|||
let deltCurrentItem = (bookId) => { |
|||
deltBookShoppingCart(bookId) |
|||
} |
|||
|
|||
// 商品单选 |
|||
let handleSingle = (index) => { |
|||
// const selectedProductsCount = data.list.filter((item) => item.checked).length |
|||
// if ( |
|||
// selectedProductsCount === 1 && !data.list.find((p) => p.checked).checked |
|||
// ) { |
|||
// data.activeSelect = false |
|||
// } else { |
|||
// data.activeSelect = selectedProductsCount === data.list.length |
|||
// } |
|||
} |
|||
|
|||
// 全选 |
|||
let handleselectedAll = () =>{ |
|||
data.list.forEach(item => { |
|||
item.checked = data.activeSelect; |
|||
// 全选 |
|||
let handleselectedAll = (index) => { |
|||
data.list[index].forEach(item=>{ |
|||
item.checked = data.list[index].activeSelect |
|||
}) |
|||
} |
|||
} |
|||
|
|||
let confirmDelt = () => { |
|||
if(data.activeSelect){ |
|||
// data.list = [] |
|||
// let ids = []; |
|||
// for (let i = 0; i < data.list.length; i++) { |
|||
// ids.push(data.list[i].bookId) |
|||
// } |
|||
// ids = parse.ids.join(','); |
|||
// deltBookShoppingCart(ids) |
|||
let goPay = () => { |
|||
// let bookIds = data.list.filter(item => item.checked).map(item => item.bookId); |
|||
// console.log('bookIds',bookIds) |
|||
// if(bookIds.length === 0){ |
|||
// Toast('请选择您需要下单的书籍') |
|||
// }else{ |
|||
// bookIds = bookIds.join(',') |
|||
// console.log(bookIds) |
|||
// getMyAddress() |
|||
// // addPlaceOrder(bookIds) |
|||
// } |
|||
data.checkedBooksPay = data.list |
|||
.flat() // 将二维数组转为一维数组 |
|||
.filter(item => item.checked === true) |
|||
.map(item => item); |
|||
console.log(data.checkedBooksPay) |
|||
if(data.checkedBooksPay.length === 0){ |
|||
Toast('请选择你需要下单的书籍') |
|||
}else{ |
|||
const index = data.list.findIndex(p => p.checked); |
|||
if (index !== -1) { |
|||
data.list.splice(index, 1); |
|||
}else{ |
|||
Toast('请选择你需要删除的书籍') |
|||
} |
|||
getMyAddress() |
|||
} |
|||
} |
|||
|
|||
let addPlaceOrder = (param) => { |
|||
proxy.$http |
|||
.put( |
|||
proxy.$API.PLACEORDER, |
|||
param, |
|||
{ |
|||
headers: { |
|||
'Content-Type': 'application/x-www-form-urlencoded', |
|||
}, |
|||
} |
|||
) |
|||
.then((res) => { |
|||
if(res.errCode === 0){ |
|||
proxy.$router.push({ path: '/CartResult' }) |
|||
} |
|||
}) |
|||
.catch((res) => { |
|||
console.log(res) |
|||
}) |
|||
} |
|||
|
|||
let getMyAddress = () => { |
|||
let param = { |
|||
openid: 'ocHu-sysUQ6-xb9knAJ5mATqCOJE' |
|||
} |
|||
} |
|||
proxy.$http |
|||
.get(proxy.$API.MYADDRESS, { |
|||
params: param, |
|||
}) |
|||
.then((res) => { |
|||
if(res.data.myAddress.length !== 0){ |
|||
const defaultAddress = res.data.myAddress.find(function(address) { |
|||
return address.isDefault === 1; |
|||
}); |
|||
|
|||
// 将数据按照 supplierName 进行分组 |
|||
const bookIdMap = new Map(); |
|||
for (const item of data.checkedBooksPay) { |
|||
if (!bookIdMap.has(item.supplierName)) { |
|||
bookIdMap.set(item.supplierName, []); |
|||
} |
|||
bookIdMap.get(item.supplierName).push(item.bookId); |
|||
} |
|||
|
|||
// 遍历每个 supplierName 对应的 bookId,进行相应的操作 |
|||
for (const [key, value] of bookIdMap) { |
|||
console.log(`SupplierName: ${key}`); |
|||
console.log(`BookId list: ${value}`); |
|||
let param = { |
|||
addressId: defaultAddress.id, |
|||
bookIds: value.join(',') |
|||
} |
|||
console.log(param) |
|||
addPlaceOrder(param) |
|||
} |
|||
|
|||
}else{ |
|||
Toast('请先添加收货地址后再下单') |
|||
} |
|||
}) |
|||
.catch((res) => { |
|||
console.log(res) |
|||
}) |
|||
} |
|||
|
|||
return { |
|||
...toRefs(data), |
|||
goPay, |
|||
cartDelt, |
|||
deltCurrentItem, |
|||
handleselectedAll, |
|||
handleSingle, |
|||
confirmDelt, |
|||
getMyshoppingCart, |
|||
getOnlineBookDetail, |
|||
deltBookShoppingCart |
|||
cartDelt, |
|||
deltCurrentItem, |
|||
handleselectedAll, |
|||
handleSingle, |
|||
confirmDelt, |
|||
getMyshoppingCart, |
|||
getOnlineBookDetail, |
|||
deltBookShoppingCart, |
|||
addPlaceOrder, |
|||
allSelected, |
|||
getMyAddress |
|||
} |
|||
} |
|||
}, |
|||
} |
|||
</script> |
|||
|
|||
<style scoped lang="scss"> |
|||
.cart-main{ |
|||
padding: 0 .16rem 2.2rem .16rem; |
|||
color: #191A1A; |
|||
.cart-top{ |
|||
position: fixed; |
|||
top: 0; |
|||
right: 0; |
|||
left: 0; |
|||
display: flex; |
|||
justify-content: space-between; |
|||
align-items: center; |
|||
font-size: .32rem; |
|||
height: 1rem; |
|||
padding: 0 .32rem; |
|||
background-color: #fff; |
|||
box-shadow: 0 0.06rem 0.1rem 1px #EFECEC; |
|||
z-index: 999; |
|||
.cart-num{ |
|||
font-size: .32rem; |
|||
opacity: 0.6; |
|||
span{ |
|||
font-size: 0.3rem; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
.cart-list{ |
|||
padding-top: 1.2rem; |
|||
} |
|||
.cart-item{ |
|||
padding: .24rem; |
|||
margin-bottom: .2rem; |
|||
box-shadow: 0px .03rem 0.6rem 1px rgba(0,0,0,0.08); |
|||
border-radius: 0.1rem; |
|||
background-color: #fff; |
|||
|
|||
} |
|||
.cart-main { |
|||
padding: 0 0.16rem 2.2rem 0.16rem; |
|||
color: #191a1a; |
|||
.cart-top { |
|||
position: fixed; |
|||
top: 0; |
|||
right: 0; |
|||
left: 0; |
|||
display: flex; |
|||
justify-content: space-between; |
|||
align-items: center; |
|||
font-size: 0.32rem; |
|||
height: 1rem; |
|||
padding: 0 0.32rem; |
|||
background-color: #fff; |
|||
box-shadow: 0 0.06rem 0.1rem 1px #efecec; |
|||
z-index: 999; |
|||
.cart-num { |
|||
font-size: 0.32rem; |
|||
opacity: 0.6; |
|||
span { |
|||
font-size: 0.3rem; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
.cart-list { |
|||
padding-top: 1.2rem; |
|||
} |
|||
.cart-item { |
|||
padding: 0.24rem; |
|||
margin-bottom: 0.2rem; |
|||
box-shadow: 0px 0.03rem 0.6rem 1px rgba(0, 0, 0, 0.08); |
|||
border-radius: 0.1rem; |
|||
background-color: #fff; |
|||
} |
|||
|
|||
.product-list{ |
|||
.product-item{ |
|||
display: flex; |
|||
justify-content: flex-start; |
|||
margin-top: .3rem; |
|||
} |
|||
} |
|||
.product-list { |
|||
.product-item { |
|||
display: flex; |
|||
justify-content: flex-start; |
|||
margin-top: 0.3rem; |
|||
} |
|||
} |
|||
|
|||
.cart-pay{ |
|||
position: fixed; |
|||
left: 0; |
|||
right: 0; |
|||
bottom: 0.98rem; |
|||
padding: 0 .32rem; |
|||
height: 1rem; |
|||
background: linear-gradient(#fff, #f1f1f1); |
|||
display: flex; |
|||
justify-content: space-between; |
|||
align-items: center; |
|||
.payment-right{ |
|||
display: flex; |
|||
justify-content: space-between; |
|||
align-items: center; |
|||
font-size: .28rem; |
|||
.total-num{ |
|||
font-size: 0.28rem; |
|||
span{ |
|||
font-size: .4rem; |
|||
font-weight: bold; |
|||
color: #FF3871; |
|||
.rmb{ |
|||
font-style: normal; |
|||
font-size: .28rem; |
|||
text-decoration: none; |
|||
} |
|||
} |
|||
} |
|||
.pay-btn{ |
|||
width: 1.5rem; |
|||
height: 0.6rem; |
|||
margin-left: 0.4rem; |
|||
line-height: 0.6rem; |
|||
text-align: center; |
|||
color: #fff; |
|||
background: url('@assets/images/btn3.png') no-repeat center center; |
|||
background-size: 100% 100%; |
|||
} |
|||
.delt-btn{ |
|||
width: 1.5rem; |
|||
height: 0.6rem; |
|||
line-height: 0.6rem; |
|||
font-size: .28rem; |
|||
color: #000; |
|||
text-align: center; |
|||
border: 0.02rem solid #000; |
|||
opacity: 0.6; |
|||
border-radius: .4rem; |
|||
} |
|||
} |
|||
} |
|||
.cart-pay { |
|||
position: fixed; |
|||
left: 0; |
|||
right: 0; |
|||
bottom: 0.98rem; |
|||
padding: 0 0.32rem; |
|||
height: 1rem; |
|||
background: linear-gradient(#fff, #f1f1f1); |
|||
display: flex; |
|||
justify-content: space-between; |
|||
align-items: center; |
|||
.payment-right { |
|||
display: flex; |
|||
justify-content: space-between; |
|||
align-items: center; |
|||
font-size: 0.28rem; |
|||
.total-num { |
|||
font-size: 0.28rem; |
|||
span { |
|||
font-size: 0.4rem; |
|||
font-weight: bold; |
|||
color: #ff3871; |
|||
.rmb { |
|||
font-style: normal; |
|||
font-size: 0.28rem; |
|||
text-decoration: none; |
|||
} |
|||
} |
|||
} |
|||
.pay-btn { |
|||
width: 1.5rem; |
|||
height: 0.6rem; |
|||
margin-left: 0.4rem; |
|||
line-height: 0.6rem; |
|||
text-align: center; |
|||
color: #fff; |
|||
background: url('@assets/images/btn3.png') no-repeat center center; |
|||
background-size: 100% 100%; |
|||
} |
|||
.delt-btn { |
|||
width: 1.5rem; |
|||
height: 0.6rem; |
|||
line-height: 0.6rem; |
|||
font-size: 0.28rem; |
|||
color: #000; |
|||
text-align: center; |
|||
border: 0.02rem solid #000; |
|||
opacity: 0.6; |
|||
border-radius: 0.4rem; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.van-checkbox{ |
|||
margin-right: .2rem; |
|||
} |
|||
.van-checkbox { |
|||
margin-right: 0.2rem; |
|||
} |
|||
|
|||
:deep(.van-checkbox__icon){ |
|||
height: .35rem; |
|||
} |
|||
:deep(.van-checkbox__icon .van-icon){ |
|||
width: .35rem; |
|||
height: .35rem; |
|||
border-color: rgba(0,0,0,.3); |
|||
} |
|||
:deep(.van-checkbox__icon--checked .van-icon){ |
|||
border: none; |
|||
background: url('@assets/images/selected.png') no-repeat transparent; |
|||
background-size: .35rem .35rem; |
|||
} |
|||
:deep(.van-icon-success:before){ |
|||
display: none; |
|||
} |
|||
:deep(.van-checkbox__label){ |
|||
font-size: .28rem; |
|||
} |
|||
:deep(.van-checkbox__icon) { |
|||
height: 0.35rem; |
|||
} |
|||
:deep(.van-checkbox__icon .van-icon) { |
|||
width: 0.35rem; |
|||
height: 0.35rem; |
|||
border-color: rgba(0, 0, 0, 0.3); |
|||
} |
|||
:deep(.van-checkbox__icon--checked .van-icon) { |
|||
border: none; |
|||
background: url('@assets/images/selected.png') no-repeat transparent; |
|||
background-size: 0.35rem 0.35rem; |
|||
} |
|||
:deep(.van-icon-success:before) { |
|||
display: none; |
|||
} |
|||
:deep(.van-checkbox__label) { |
|||
font-size: 0.28rem; |
|||
} |
|||
|
|||
.bookItem-dialog-detail{ |
|||
border-bottom: none; |
|||
.bookItem-dialog-detail { |
|||
border-bottom: none; |
|||
} |
|||
</style> |
@ -1,96 +1,26 @@ |
|||
import request from '@/utils/request' |
|||
// import qs from 'qs'
|
|||
|
|||
// 数字资源
|
|||
export function initNumberResoures(params) { |
|||
// 书单推荐二级页面
|
|||
export function FetchBookRecommendList(params) { |
|||
return request({ |
|||
url: '/dxhtsg/initNumberResoures', |
|||
url: '/frontDemoApi/bookRecommendList', |
|||
method: 'get', |
|||
params: params |
|||
}) |
|||
} |
|||
|
|||
// 新书推荐
|
|||
export function FetchNewBookRecommend(params) { |
|||
export function FetchbookOnlineList(params) { |
|||
return request({ |
|||
url: '/dxhtsg/newBookRecommend', |
|||
url: '/frontDemoApi/bookOnlineList', |
|||
method: 'get', |
|||
params: params |
|||
}) |
|||
} |
|||
|
|||
// 热门图书
|
|||
export function FetchHotBookRecommend(params) { |
|||
return request({ |
|||
url: '/dxhtsg/hotBookRecommend', |
|||
method: 'get', |
|||
params: params |
|||
}) |
|||
} |
|||
|
|||
// 通过isbn获取图书封面
|
|||
export function FetchCoverByISBN(params) { |
|||
return request({ |
|||
url: '/dxhtsg/getCoverByISBN', |
|||
method: 'get', |
|||
params: params |
|||
// responseType: 'blob'
|
|||
}) |
|||
} |
|||
|
|||
// 图书详情
|
|||
export function getBookDetailsByISBN(params) { |
|||
return request({ |
|||
url: '/dxhtsg/getBookDetailsByISBN', |
|||
method: 'get', |
|||
params: params |
|||
}) |
|||
} |
|||
|
|||
// 获取首页书架基本信息
|
|||
export function initSmartBookshelf(params) { |
|||
return request({ |
|||
url: '/dxhtsg/initSmartBookshelf', |
|||
method: 'get', |
|||
params |
|||
}) |
|||
} |
|||
|
|||
// 智能书架-书架详情
|
|||
export function FetchInitBookshelfDetails(params) { |
|||
return request({ |
|||
url: '/dxhtsg/initBookshelfDetails', |
|||
method: 'get', |
|||
params |
|||
}) |
|||
} |
|||
|
|||
// 作者推荐
|
|||
export function FetchProposeAuthor(params) { |
|||
return request({ |
|||
url: '/dxhtsg/proposeAuthor', |
|||
method: 'get', |
|||
params: params |
|||
}) |
|||
} |
|||
|
|||
// 作者推荐
|
|||
export function initBookshelfDetails(params) { |
|||
return request({ |
|||
url: '/dxhtsg/initBookshelfDetails', |
|||
method: 'get', |
|||
params |
|||
}) |
|||
} |
|||
|
|||
export default { |
|||
FetchNewBookRecommend, |
|||
FetchCoverByISBN, |
|||
initNumberResoures, |
|||
getBookDetailsByISBN, |
|||
initSmartBookshelf, |
|||
FetchInitBookshelfDetails, |
|||
FetchHotBookRecommend, |
|||
FetchProposeAuthor, |
|||
initBookshelfDetails |
|||
FetchBookRecommendList, |
|||
FetchbookOnlineList |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue