Browse Source

在线选书/图书推荐 api逻辑last

master
xuhuajiao 2 years ago
parent
commit
1a2e1e80ad
  1. BIN
      library-activity/src/assets/images/book-img.png
  2. 3
      library-activity/src/utils/api.js
  3. 4
      library-activity/src/views/bookList/bookList.vue
  4. 89
      library-activity/src/views/cart/cart.vue
  5. 12
      library-activity/src/views/index.vue
  6. 22
      library-activity/src/views/logisticsInfo/logisticsInfo.vue
  7. 65
      library-activity/src/views/mine/mine.vue
  8. 42
      library-activity/src/views/myAddress/myAddress.vue
  9. 142
      library-activity/src/views/myLending/myLending.vue
  10. 189
      library-activity/src/views/order/order.vue
  11. 33
      library-activity/src/views/orderDetail/orderDetail.vue
  12. 3
      selfServiceMachine/package.json
  13. 7
      selfServiceMachine/src/api/book.js
  14. 4
      selfServiceMachine/src/assets/styles/index.scss
  15. 2
      selfServiceMachine/src/main.js
  16. 71
      selfServiceMachine/src/views/bookRecommend.vue
  17. 33
      selfServiceMachine/src/views/onlineBookSelection.vue

BIN
library-activity/src/assets/images/book-img.png

After

Width: 200  |  Height: 263  |  Size: 126 KiB

3
library-activity/src/utils/api.js

@ -43,6 +43,9 @@ API.ORDERDETAILS = '/orderDetails'
// 我的借阅 // 我的借阅
API.MYBORROWING = '/myBorrowing' API.MYBORROWING = '/myBorrowing'
// 确认收货
API.TASKGOODS = 'takeGoods'
export default API export default API

4
library-activity/src/views/bookList/bookList.vue

@ -362,4 +362,8 @@ export default {
} }
} }
input[type="search"]::-webkit-search-cancel-button{
display: none;
}
</style> </style>

89
library-activity/src/views/cart/cart.vue

@ -14,7 +14,7 @@
<div class="cart-item" v-if="bookItem.length !== 0"> <div class="cart-item" v-if="bookItem.length !== 0">
<div class="list-top"> <div class="list-top">
<van-checkbox v-model="bookItem.activeSelect" @change="handleselectedAll(index)"></van-checkbox> <van-checkbox v-model="bookItem.activeSelect" @change="handleselectedAll(index)"></van-checkbox>
<div class="top-info">
<div class="top-info" @click="toActive(bookItem[0].selectId)">
<p class="active-name"> <p class="active-name">
{{ bookItem[0] && bookItem[0].selectName }}<i></i> {{ bookItem[0] && bookItem[0].selectName }}<i></i>
</p> </p>
@ -104,8 +104,8 @@
<van-dialog v-model:show="showDetial" :show-confirm-button="false"> <van-dialog v-model:show="showDetial" :show-confirm-button="false">
<div class="bookItem-dialog-detail"> <div class="bookItem-dialog-detail">
<div class="list-top"> <div class="list-top">
<div class="top-info">
<p class="active-name">你选书我买单<i></i></p>
<div class="top-info" @click="toActive(detailBook.listId)">
<p class="active-name">{{ detailBook.listName }}<i></i></p>
</div> </div>
</div> </div>
<div class="product-cont"> <div class="product-cont">
@ -220,7 +220,16 @@ export default {
}); });
}); });
} }
});
})
let toActive = (id) =>{
proxy.$router.push({
path: '/BookList',
query: {
activeId: id
}
})
}
let getMyshoppingCart = () => { let getMyshoppingCart = () => {
let param = {} let param = {}
@ -231,6 +240,7 @@ export default {
.then((res) => { .then((res) => {
if(res.data.length === 0){ if(res.data.length === 0){
data.list = [] data.list = []
data.totalLength = 0
}else{ }else{
let allArraysEmpty = true; let allArraysEmpty = true;
for (let i = 0; i < res.data.length; i++) { for (let i = 0; i < res.data.length; i++) {
@ -241,7 +251,7 @@ export default {
} }
if (allArraysEmpty) { if (allArraysEmpty) {
data.list = [] data.list = []
console.log('都为空')
data.totalLength = 0
} else { } else {
data.list = res.data data.list = res.data
data.list.forEach(bookItem => { data.list.forEach(bookItem => {
@ -279,6 +289,7 @@ export default {
console.log(res) console.log(res)
}) })
} }
let deltBookShoppingCart = (ids) => { let deltBookShoppingCart = (ids) => {
let param = { let param = {
ids: ids, ids: ids,
@ -303,17 +314,8 @@ export default {
} }
let confirmDelt = () => { 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 data.checkedBooks = data.list
.flat() //
.flat()
.filter(item => item.checked === true) .filter(item => item.checked === true)
.map(item => item.id); .map(item => item.id);
@ -336,14 +338,6 @@ export default {
// //
let handleSingle = (index) => { 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
// }
} }
// //
@ -354,25 +348,19 @@ export default {
} }
let goPay = () => { 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 data.checkedBooksPay = data.list
.flat() //
.flat()
.filter(item => item.checked === true) .filter(item => item.checked === true)
.map(item => item); .map(item => item);
console.log(data.checkedBooksPay) console.log(data.checkedBooksPay)
if(data.checkedBooksPay.length === 0){ if(data.checkedBooksPay.length === 0){
Toast('请选择需要下单的书籍')
Toast('请选择需要下单的书籍')
}else{ }else{
getMyAddress()
if(data.checkedBooksPay.length > 3){
Toast('当前活动限选三本图书')
}else{
getMyAddress()
}
} }
} }
@ -410,28 +398,20 @@ export default {
const defaultAddress = res.data.myAddress.find(function(address) { const defaultAddress = res.data.myAddress.find(function(address) {
return address.isDefault === 1; 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}`);
data.list.forEach((group) => {
const checked_books = [];
group.forEach((item) => {
if (item.checked) {
checked_books.push(item.bookId);
}
});
var book_ids = checked_books.join(',');
let param = { let param = {
addressId: defaultAddress.id, addressId: defaultAddress.id,
bookIds: value.join(',')
bookIds: book_ids
} }
console.log(param)
addPlaceOrder(param) addPlaceOrder(param)
}
})
}else{ }else{
Toast('请先添加收货地址后再下单') Toast('请先添加收货地址后再下单')
} }
@ -443,6 +423,7 @@ export default {
return { return {
...toRefs(data), ...toRefs(data),
toActive,
goPay, goPay,
cartDelt, cartDelt,
deltCurrentItem, deltCurrentItem,

12
library-activity/src/views/index.vue

@ -63,23 +63,17 @@ export default {
console.log(res) console.log(res)
data.activeList = res.data.list data.activeList = res.data.list
data.activeList.forEach(item=>{ data.activeList.forEach(item=>{
const startDateStr = item.startTime
const endDateStr = item.endTime
const currentDate = new Date(); const currentDate = new Date();
const startDate = new Date(startDateStr);
const endDate = new Date(endDateStr);
const remainingDays = Math.ceil((endDate.getTime() - currentDate.getTime()) / (1000 * 3600 * 24));
const remainingDays = Math.ceil((new Date(item.endTime).getTime() - currentDate.getTime()) / (1000 * 3600 * 24));
if (currentDate >= startDate && currentDate <= endDate) {
if (currentDate >= new Date(item.startTime) && currentDate <= new Date(item.endTime)) {
item.activeStatusType = 1 item.activeStatusType = 1
if (remainingDays <= 3) { if (remainingDays <= 3) {
item.activeStatus = `活动仅剩最后 ${remainingDays}` item.activeStatus = `活动仅剩最后 ${remainingDays}`
} else { } else {
console.log('活动正在进行中'); console.log('活动正在进行中');
} }
} else if (currentDate < startDate) {
} else if (currentDate < new Date(item.startTime)) {
item.activeStatus = `活动 ${item.startTime} 开始` item.activeStatus = `活动 ${item.startTime} 开始`
item.activeStatusType = 0 item.activeStatusType = 0
} else { } else {

22
library-activity/src/views/logisticsInfo/logisticsInfo.vue

@ -48,11 +48,27 @@ export default {
setup() { setup() {
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
let data = reactive({ let data = reactive({
tabActive: 0
tabActive: 0,
orderType: null
}) })
onMounted(() => {})
onMounted(() => {
if(proxy.$route.query.tabActive !== undefined){
data.orderType = JSON.parse(proxy.$route.query.tabActive)
}else{
data.orderType = null
}
})
let toBack = () => { let toBack = () => {
proxy.$router.go(-1)
if(data.orderType){
proxy.$router.push({
path: '/Order',
query: {
tabActive: data.orderType
}
})
}else{
proxy.$router.go(-1)
}
} }
let copyLogisticsInfo = () => { let copyLogisticsInfo = () => {
const logisticsInfo = 'SF1629871960733'; const logisticsInfo = 'SF1629871960733';

65
library-activity/src/views/mine/mine.vue

@ -10,8 +10,8 @@
<div class="user-tip">欢迎来到东西湖图书馆</div> <div class="user-tip">欢迎来到东西湖图书馆</div>
</div> </div>
<div class="user-card"> <div class="user-card">
<p>NO.420112012002888</p>
<span @click="showCard=true">切换证号</span>
<p>NO.{{ cardNum }}</p>
<span @click="openChangeCard">切换证号</span>
</div> </div>
</div> </div>
</div> </div>
@ -25,42 +25,42 @@
<div class="order-item" @click="toOrder(1)"> <div class="order-item" @click="toOrder(1)">
<div class="order-icon"> <div class="order-icon">
<img src="@assets/images/d-she.png" alt="" /> <img src="@assets/images/d-she.png" alt="" />
<i v-if="orderStatus === 1">{{ orderNum }}</i>
<i v-if="status1">{{ status1 }}</i>
</div> </div>
<p>待审核</p> <p>待审核</p>
</div> </div>
<div class="order-item" @click="toOrder(2)"> <div class="order-item" @click="toOrder(2)">
<div class="order-icon"> <div class="order-icon">
<img src="@assets/images/d-fh.png" alt="" /> <img src="@assets/images/d-fh.png" alt="" />
<i v-if="orderStatus === 2">{{ orderNum }}</i>
<i v-if="status2">{{ status2 }}</i>
</div> </div>
<p>待发货</p> <p>待发货</p>
</div> </div>
<div class="order-item" @click="toOrder(3)"> <div class="order-item" @click="toOrder(3)">
<div class="order-icon"> <div class="order-icon">
<img src="@assets/images/d-shuo.png" alt="" /> <img src="@assets/images/d-shuo.png" alt="" />
<i v-if="orderStatus === 3">{{ orderNum }}</i>
<i v-if="status3">{{ status3 }}</i>
</div> </div>
<p>待收货</p> <p>待收货</p>
</div> </div>
<div class="order-item" @click="toOrder(4)"> <div class="order-item" @click="toOrder(4)">
<div class="order-icon"> <div class="order-icon">
<img src="@assets/images/y-wc.png" alt="" /> <img src="@assets/images/y-wc.png" alt="" />
<i v-if="orderStatus === 4">{{ orderNum }}</i>
<i v-if="status4">{{ status4 }}</i>
</div> </div>
<p>已完成</p> <p>已完成</p>
</div> </div>
<div class="order-item" @click="toOrder(5)"> <div class="order-item" @click="toOrder(5)">
<div class="order-icon"> <div class="order-icon">
<img src="@assets/images/y-qx.png" alt="" /> <img src="@assets/images/y-qx.png" alt="" />
<i v-if="orderStatus === 5">{{ orderNum }}</i>
<i v-if="status5">{{ status5 }}</i>
</div> </div>
<p>已取消</p> <p>已取消</p>
</div> </div>
</div> </div>
<div class="log-info" v-if="orderStatus === 3">
<div class="log-info" v-if="status3">
<div class="log-img"> <div class="log-img">
<img src="" alt="" />
<img src="@assets/images/book-img.png" alt="" />
</div> </div>
<div class="log-txt" @click="toLogisticsInfo"> <div class="log-txt" @click="toLogisticsInfo">
<div class="log-num">顺丰速运 SF1629871960733</div> <div class="log-num">顺丰速运 SF1629871960733</div>
@ -103,18 +103,18 @@
<van-dialog v-model:show="showCard" :show-confirm-button="false"> <van-dialog v-model:show="showCard" :show-confirm-button="false">
<div class="dialog-card"> <div class="dialog-card">
<h5>切换读者证</h5> <h5>切换读者证</h5>
<div class="card-item" @click="cardIndex=0">
<div class="card-item" v-for="(item,index) in cardData" :key="index" @click="cardIndex = index">
<img src="@assets/images/card-img2.png" alt="" /> <img src="@assets/images/card-img2.png" alt="" />
<div class="card-txt"> <div class="card-txt">
<span>读者证号</span> <span>读者证号</span>
<p>NO.420112012002888</p>
<p>NO.{{ item }}</p>
</div> </div>
<div :class="['select-card', cardIndex===0 ? 'active': '']"></div>
<div :class="['select-card', cardIndex===index ? 'active': '']"></div>
</div> </div>
</div> </div>
<div class="card-btn"> <div class="card-btn">
<span @click="changeCardComfired">确定</span> <span @click="changeCardComfired">确定</span>
<span @click="showCard=false">取消</span>
<span @click="cancelCard">取消</span>
</div> </div>
</van-dialog> </van-dialog>
</div> </div>
@ -132,11 +132,17 @@ export default {
let data = reactive({ let data = reactive({
tabCur: 2, tabCur: 2,
showCard: false, showCard: false,
cardNum:'',
cardIndex: 0, cardIndex: 0,
orderStatus: null,
orderNum: null
status1: null,
status2: null,
status3: null,
status4: null,
status5: null,
cardData: ['420112012002888','420112012002999']
}) })
onMounted(() => { onMounted(() => {
data.cardNum = data.cardData[data.cardIndex]
getMyOrderNum() getMyOrderNum()
}) })
let getMyOrderNum = () => { let getMyOrderNum = () => {
@ -149,8 +155,19 @@ export default {
}) })
.then((res) => { .then((res) => {
console.log(res) console.log(res)
data.orderStatus = res.data.myAddress.status
data.orderNum = res.data.myAddress.num
res.data.myAddress.forEach(item => {
if(item.status === 1){
data.status1 = item.num
}else if(item.status === 2){
data.status2 = item.num
}else if(item.status === 3){
data.status3 = item.num
}else if(item.status === 4){
data.status4 = item.num
}else if(item.status === 5){
data.status5 = item.num
}
});
}) })
.catch((res) => { .catch((res) => {
console.log(res) console.log(res)
@ -185,9 +202,19 @@ export default {
let toLogisticsInfo = () => { let toLogisticsInfo = () => {
proxy.$router.push({ path: '/LogisticsInfo' }) proxy.$router.push({ path: '/LogisticsInfo' })
} }
let openChangeCard = () => {
const index = data.cardData.indexOf(data.cardNum)
data.cardIndex = index
data.showCard = true
}
let changeCardComfired = () => { let changeCardComfired = () => {
data.cardNum = data.cardData[data.cardIndex]
data.showCard = false data.showCard = false
Toast('读者证切换成功') Toast('读者证切换成功')
}
let cancelCard = () => {
data.showCard = false
} }
onMounted(() => {}) onMounted(() => {})
return { return {
@ -199,7 +226,9 @@ export default {
toAboutUs, toAboutUs,
toFeedback, toFeedback,
toLogisticsInfo, toLogisticsInfo,
changeCardComfired
openChangeCard,
changeCardComfired,
cancelCard
} }
}, },
} }

42
library-activity/src/views/myAddress/myAddress.vue

@ -22,13 +22,12 @@
<span class="edit-btn" @click="toAddOrEdit('edit',item)"></span> <span class="edit-btn" @click="toAddOrEdit('edit',item)"></span>
</div> </div>
<div class="setting-handle" v-if="isSetting"> <div class="setting-handle" v-if="isSetting">
<span :class="item.isDefault == 1 ? 'active' :''">默认地址</span>
<span :class="item.isDefault == 1 ? 'active' :''" @click="setDefault(item)">默认地址</span>
<span @click="deleteMyAddress(item.id)">删除</span> <span @click="deleteMyAddress(item.id)">删除</span>
</div> </div>
<span v-if="item.isDefault == 1" class="mr-flag">默认</span> <span v-if="item.isDefault == 1" class="mr-flag">默认</span>
</div> </div>
</div> </div>
<div class="address-bottom" @click="toAddOrEdit('add',null)">添加收货地址</div> <div class="address-bottom" @click="toAddOrEdit('add',null)">添加收货地址</div>
</div> </div>
<!-- <TabBar :tabCur.sync="tabCur" /> --> <!-- <TabBar :tabCur.sync="tabCur" /> -->
@ -61,7 +60,41 @@ export default {
} }
}) })
} }
let setDefault = (item) => {
if(item.isDefault === 1){
return false
}
let param = {
address: item.address,
district: item.district,
id: item.id,
isDefault: !item.isDefault && 1,
name: item.name,
phone: item.phone
}
console.log(param)
proxy.$http
.post(proxy.$API.EDITMYADDRESS,
param,
{
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
}
)
.then(res => {
if(res.errCode === 0){
Toast('修改默认成功')
setTimeout(()=>{
getMyAddress()
data.isSetting = false
},500)
}
})
.catch((res) => {
console.log(res)
})
}
let getMyAddress = () => { let getMyAddress = () => {
let param = { let param = {
openid: 'ocHu-sysUQ6-xb9knAJ5mATqCOJE' openid: 'ocHu-sysUQ6-xb9knAJ5mATqCOJE'
@ -109,7 +142,8 @@ export default {
toBack, toBack,
toAddOrEdit, toAddOrEdit,
getMyAddress, getMyAddress,
deleteMyAddress
deleteMyAddress,
setDefault
} }
}, },
} }

142
library-activity/src/views/myLending/myLending.vue

@ -7,40 +7,46 @@
<div class="order-main"> <div class="order-main">
<van-tabs v-model:active="active" swipeable @click-tab="onClickTab"> <van-tabs v-model:active="active" swipeable @click-tab="onClickTab">
<van-tab v-for="item in tabTitle" :title="item.name"> <van-tab v-for="item in tabTitle" :title="item.name">
<div>
<div class="order-item">
<div class="list-top">
<div class="top-info">
<p class="active-name">
你选书我买单<i></i>
</p>
</div>
<div class="order-status jy">借阅中</div>
</div>
<div class="product-cont lending-cont">
<div class="product-img">
<img src="" alt="" />
</div>
<div class="product-txt">
<div class="product-info">
<h4 class="overflow-txt-only">秒懂AI提问让人工智能开发大脑</h4>
<div class="author-date">
<p class="author overflow-txt-only">秋叶 刘进新 姜梅 定秋枫</p>
<p class="date overflow-txt-only">2023年07月</p>
</div>
<div class="intro overflow-txt">精心提炼20种GPT提问方法及指令从入门到进阶再到精通100个案例带你玩</div>
</div>
</div>
</div>
<div class="mylending-info">
<p class="lending-date">借阅开始时间2023-11-18 10:15:30</p>
<p class="lending-date">最后归还时间2023-11-18 10:15:30</p>
<p class="actual-date">实际归还时间2023-11-18 10:15:30</p>
<div class="myLending-status lq-status"></div>
</div>
</div>
</div>
<van-list
v-model:loading="loading"
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
>
<div v-for="(item,i) in borrowingList" :key="i">
<div class="order-item">
<div class="list-top">
<div class="top-info">
<p class="active-name">
{{ item.seleceName }}<i></i>
</p>
</div>
<div :class="['order-status', !item.realityTime && 'jy']">{{ !item.realityTime ? '借阅中' : '已归还' }}</div>
</div>
<div class="product-cont lending-cont">
<div class="product-img">
<img :src="$coverUrl+'/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>
</div>
</div>
<div class="mylending-info">
<p class="lending-date">借阅开始时间{{ item.startTime }}</p>
<p class="lending-date">最后归还时间{{ item.returnTime }}</p>
<p v-if="item.realityTime" class="actual-date">实际归还时间{{ item.realityTime }}</p>
<div :class="['myLending-status', item.returnBook === 1 && 'lq-status', item.returnBook === 2 && 'zs-status', item.returnBook === 3 && 'yq-status']"></div>
</div>
</div>
</div>
</van-list>
</van-tab> </van-tab>
</van-tabs> </van-tabs>
</div> </div>
@ -72,38 +78,83 @@ export default {
name: '已归还', name: '已归还',
} }
], ],
page:{
pageNo: 1,
pageSize: 20
loading: false,
finished: false,
pagetTable: {
current: 1,
size: 10,
total: '',
} }
}) })
onMounted(() => { onMounted(() => {
data.active = JSON.parse(proxy.$route.query.tabActive) data.active = JSON.parse(proxy.$route.query.tabActive)
if(data.active){ if(data.active){
getMyBorrowing()
onLoad()
} }
}) })
let onClickTab = (item) => { let onClickTab = (item) => {
data.pagetTable.current = 1
data.loading = true
data.finished = false
data.active = item.name data.active = item.name
data.orderList = []
getMyBorrowing()
data.borrowingList = []
onLoad()
}
let onLoad = () => {
let timer = setTimeout(() => {
getMyBorrowing()
data.pagetTable.current ++
data.finished && clearTimeout(timer);//
}, 1000);
} }
let getMyBorrowing = () => { let getMyBorrowing = () => {
let param = { let param = {
openid: 'ocHu-sysUQ6-xb9knAJ5mATqCOJE', openid: 'ocHu-sysUQ6-xb9knAJ5mATqCOJE',
status: data.active, status: data.active,
pageNo: data.page.pageNo,
pageSize: data.page.pageSize
pageNo: data.pagetTable.current,
pageSize: data.pagetTable.size,
} }
proxy.$http proxy.$http
.get(proxy.$API.MYBORROWING, { .get(proxy.$API.MYBORROWING, {
params: param, params: param,
}) })
.then((res) => { .then((res) => {
if(res.data.length !== 0){
data.borrowingList = res.data
if(res.data !== null && res.data.length !== 0){
// data.borrowingList = res.data
// data.pagetTable.total = res.data.page.totalRows
data.borrowingList.push(...res.data.myBorrowing)
data.loading = false
data.finished = true
// if (data.list.length >= res.data.page.totalRows) {
// data.finished = true
// }
data.borrowingList.forEach(item=>{
if (item.realityTime) {
if (item.realityTime <= item.returnTime) {
item.returnBook = 2
console.log('准时1')
} else {
item.returnBook = 3
console.log('逾期')
}
} else {
const currentDate = new Date();
const remainingDays = Math.ceil((new Date(item.returnTime) - currentDate) / (1000 * 3600 * 24));
console.log(remainingDays)
if (remainingDays <= 3) {
item.returnBook = 1
console.log('临时')
} else {
// item.returnBook = 2
console.log('借阅中,还未到临期时间')
}
}
})
}else{ }else{
data.borrowingList = [] data.borrowingList = []
data.finished = true;
} }
}) })
.catch((res) => { .catch((res) => {
@ -117,7 +168,8 @@ export default {
...toRefs(data), ...toRefs(data),
toBack, toBack,
getMyBorrowing, getMyBorrowing,
onClickTab
onClickTab,
onLoad
} }
}, },
} }

189
library-activity/src/views/order/order.vue

@ -7,54 +7,55 @@
<div class="order-main"> <div class="order-main">
<van-tabs v-model:active="active" swipeable @click-tab="onClickTab" > <van-tabs v-model:active="active" swipeable @click-tab="onClickTab" >
<van-tab v-for="item in tabTitle" :title="item.name" > <van-tab v-for="item in tabTitle" :title="item.name" >
<div v-for="(orderItem,index) in orderList" :key="index">
<div class="order-item">
<div class="list-top">
<div class="top-info">
<p class="active-name">
{{ orderItem.books && orderItem.books[0].selectName}}<i></i>
</p>
</div>
<div :class="['order-status', orderItem.status === 1 && 'dshe', (orderItem.status===2 || orderItem.status===3) && 'dhuo']">{{ orderItem.orderName }}</div>
</div>
<div v-for="(item,i) in orderItem.books" :key="i">
<div class="product-cont" @click="toOrderDeatil(orderItem.status,orderItem.id)" >
<div class="product-img">
<img
:src="
$coverUrl+'/demoOnlineSelect/getBookCover.do?id=' +
item.id
"
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>
</div>
<div class="order-book-price">
<span><i></i>{{ item.price }}</span>
<span>X1</span>
<van-list
v-model:loading="loading"
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
>
<div v-for="(orderItem,index) in orderList" :key="index">
<div class="order-item">
<div class="list-top">
<div class="top-info">
<p class="active-name" @click="toActive(orderItem.books[0].selectId)">
{{ orderItem.books && orderItem.books[0].selectName}}<i></i>
</p>
</div> </div>
<div :class="['order-status', orderItem.status === 1 && 'dshe', (orderItem.status===2 || orderItem.status===3) && 'dhuo']">{{ orderItem.orderName }}</div>
</div> </div>
</div>
<div class="order-dealer">
<p class="dealer">{{ orderItem.books && orderItem.books[0].supplierName}}</p>
<p class="order-pay">实付款<span><i></i>0</span></p>
</div>
<div class="order-bottom">
<span v-if="orderItem.status===3 || orderItem.status === 4" class="order-btn01" @click="toLogisticsInfo">查看物流</span>
<span v-if="orderItem.status===3" class="order-btn02" @click="show = true">确认收货</span>
<span v-if="orderItem.status===5" class="order-btn01" @click="showDelt=true">删除订单</span>
<div v-for="(item,i) in orderItem.books" :key="i">
<div class="product-cont" @click="toOrderDeatil(orderItem.status,orderItem.id)" >
<div class="product-img">
<img :src="$coverUrl+'/demoOnlineSelect/getBookCover.do?id='+item.id" 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>
</div>
<div class="order-book-price">
<span><i></i>{{ item.price }}</span>
<span>X1</span>
</div>
</div>
</div>
<div class="order-dealer">
<p class="dealer">{{ orderItem.books && orderItem.books[0].supplierName}}</p>
<p class="order-pay">实付款<span><i></i>0</span></p>
</div> </div>
</div>
</div>
<div class="order-bottom">
<span v-if="orderItem.status===3 || orderItem.status === 4" class="order-btn01" @click="toLogisticsInfo">查看物流</span>
<span v-if="orderItem.status===3" class="order-btn02" @click="taskGoods(orderItem)">确认收货</span>
<span v-if="orderItem.status===5" class="order-btn01" @click="showDelt=true">删除订单</span>
</div>
</div>
</div>
</van-list>
</van-tab> </van-tab>
</van-tabs> </van-tabs>
</div> </div>
@ -100,6 +101,7 @@ export default {
show: false, show: false,
showDelt: false, showDelt: false,
orderList:[], orderList:[],
taskGoodsItem: null,
tabTitle: [ tabTitle: [
{ {
value: '0', value: '0',
@ -126,28 +128,55 @@ export default {
name: '已取消', name: '已取消',
}, },
], ],
page:{
pageNo: 1,
pageSize: 20
loading: false,
finished: false,
pagetTable: {
current: 1,
size: 10,
total: '',
} }
}) })
onMounted(() => { onMounted(() => {
data.active = JSON.parse(proxy.$route.query.tabActive) data.active = JSON.parse(proxy.$route.query.tabActive)
getMyOrder()
if(data.active){
onLoad()
}
}) })
let toBack = () => { let toBack = () => {
proxy.$router.go(-1)
proxy.$router.push({
path: '/Mine'
})
} }
let toActive = (id) =>{
proxy.$router.push({
path: '/BookList',
query: {
activeId: id
}
})
}
let onClickTab = (item) => { let onClickTab = (item) => {
data.pagetTable.current = 1
data.loading = true
data.finished = false
data.active = item.name data.active = item.name
data.orderList = [] data.orderList = []
getMyOrder()
onLoad()
}
let onLoad = () => {
let timer = setTimeout(() => {
getMyOrder()
data.pagetTable.current ++
data.finished && clearTimeout(timer);//
}, 1000);
} }
let getMyOrder = () => { let getMyOrder = () => {
let param = { let param = {
openid: 'ocHu-sysUQ6-xb9knAJ5mATqCOJE', openid: 'ocHu-sysUQ6-xb9knAJ5mATqCOJE',
pageNo: data.page.pageNo,
pageSize: data.page.pageSize,
pageNo: data.pagetTable.current,
pageSize: data.pagetTable.size,
status: data.active status: data.active
} }
proxy.$http proxy.$http
@ -156,7 +185,8 @@ export default {
}) })
.then((res) => { .then((res) => {
if(res.data.myOrder.length !== 0){ if(res.data.myOrder.length !== 0){
data.orderList = res.data.myOrder
// data.pagetTable.total = res.data.page.totalRows
data.orderList.push(...res.data.myOrder)
data.orderList.forEach(orderItem=>{ data.orderList.forEach(orderItem=>{
switch(orderItem.status){ switch(orderItem.status){
case 1 : case 1 :
@ -176,6 +206,14 @@ export default {
break; break;
} }
}) })
data.loading = false
data.finished = true
// if (data.orderList.length >= res.data.page.totalRows) {
// data.finished = true
// }
}else{
data.orderList = [];
data.finished = true;
} }
}) })
.catch((res) => { .catch((res) => {
@ -194,12 +232,44 @@ export default {
} }
let toLogisticsInfo = () => { let toLogisticsInfo = () => {
proxy.$router.push({ path: '/LogisticsInfo' })
proxy.$router.push({
path: '/LogisticsInfo',
query: {
tabActive: data.active
}
})
}
let taskGoods = (orderItem) => {
data.show = true
data.taskGoodsItem = orderItem
} }
let comfiredHandle = () =>{ let comfiredHandle = () =>{
data.show = false
Toast('确认收货成功')
console.log(data.taskGoodsItem.id)
proxy.$http
.post(proxy.$API.TASKGOODS,
{
id: data.taskGoodsItem.id
},
{
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
}
)
.then(res => {
if(res.errCode === 0){
data.show = false
Toast('确认收货成功')
getMyOrder()
}
})
.catch((res) => {
console.log(res)
})
} }
let deltHandle = () =>{ let deltHandle = () =>{
data.showDelt = false data.showDelt = false
Toast('删除订单成功') Toast('删除订单成功')
@ -207,12 +277,15 @@ export default {
return { return {
...toRefs(data), ...toRefs(data),
toBack, toBack,
toActive,
toOrderDeatil, toOrderDeatil,
toLogisticsInfo, toLogisticsInfo,
taskGoods,
comfiredHandle, comfiredHandle,
deltHandle, deltHandle,
onClickTab, onClickTab,
getMyOrder
getMyOrder,
onLoad
} }
}, },
} }

33
library-activity/src/views/orderDetail/orderDetail.vue

@ -8,8 +8,8 @@
<p>{{ orderName }}</p> <p>{{ orderName }}</p>
<span>{{ orderInfo }}</span> <span>{{ orderInfo }}</span>
</div> </div>
<div v-if="orderType==='2' || orderType==='3'" class="parcel-log" @click="toLogisticsInfo">
<p>共2个包裹运送中</p>
<div v-if="orderType==='3' || orderType==='4'" class="parcel-log" @click="toLogisticsInfo">
<p>共2个包裹</p>
<p>顺丰速运SF162987196073</p> <p>顺丰速运SF162987196073</p>
</div> </div>
<div class="user-location"> <div class="user-location">
@ -18,7 +18,7 @@
</div> </div>
<div class="order-item"> <div class="order-item">
<div class="list-top"> <div class="list-top">
<div class="top-info">
<div class="top-info" @click="toActive(orderBookList[0].selectId)">
<p class="active-name"> <p class="active-name">
{{ orderBookList.length !== 0 && orderBookList[0].selectName }}<i></i> {{ orderBookList.length !== 0 && orderBookList[0].selectName }}<i></i>
</p> </p>
@ -123,26 +123,25 @@ export default {
}), }),
orderInfo: computed(function(){ orderInfo: computed(function(){
switch(data.orderType){ switch(data.orderType){
case '0' :
case '1' :
return '您的订单已提交,请耐心等待审核' return '您的订单已提交,请耐心等待审核'
break; break;
case '1' :
case '2' :
return '您的订单已审核,马上安排发货' return '您的订单已审核,马上安排发货'
break; break;
case '2' :
case '3' :
return '快递马上就到,请及时查收' return '快递马上就到,请及时查收'
break; break;
case '3' :
case '4' :
return '您的订单已完成' return '您的订单已完成'
break; break;
case '4' :
case '5' :
return '您的订单已取消' return '您的订单已取消'
break; break;
} }
}) })
}) })
onMounted(async () => { onMounted(async () => {
console.log(proxy.$route.query.type)
data.orderType = proxy.$route.query.type data.orderType = proxy.$route.query.type
data.orderId = proxy.$route.query.orderId data.orderId = proxy.$route.query.orderId
if(data.orderId){ if(data.orderId){
@ -150,8 +149,21 @@ export default {
} }
}) })
let toBack = () => { let toBack = () => {
proxy.$router.go(-1)
proxy.$router.push({
path: '/Order',
query: {
tabActive: data.orderType
}
})
} }
let toActive = (id) =>{
proxy.$router.push({
path: '/BookList',
query: {
activeId: id
}
})
}
let getOrderDetail = () => { let getOrderDetail = () => {
let param = { let param = {
orderId: data.orderId orderId: data.orderId
@ -198,6 +210,7 @@ export default {
return { return {
...toRefs(data), ...toRefs(data),
toBack, toBack,
toActive,
getOrderDetail, getOrderDetail,
toLogisticsInfo, toLogisticsInfo,
copyOrderNum copyOrderNum

3
selfServiceMachine/package.json

@ -16,9 +16,12 @@
"core-js": "^3.6.4", "core-js": "^3.6.4",
"echarts": "^4.6.0", "echarts": "^4.6.0",
"element-ui": "^2.15.9", "element-ui": "^2.15.9",
"qrcode": "^1.5.3",
"qrcodejs2": "0.0.2",
"swiper": "^8.4.2", "swiper": "^8.4.2",
"vue": "^2.6.11", "vue": "^2.6.11",
"vue-awesome": "^4.0.2", "vue-awesome": "^4.0.2",
"vue-qrcode": "^2.2.0",
"vue-router": "^3.1.5", "vue-router": "^3.1.5",
"vuex": "^3.1.2" "vuex": "^3.1.2"
}, },

7
selfServiceMachine/src/api/book.js

@ -11,17 +11,14 @@ export function FetchBookRecommendList(params) {
} }
//书单推荐-书籍详情 //书单推荐-书籍详情
export function FetchBookRecommendDetails(parameter) {
export function FetchBookRecommendDetails(params) {
return request({ return request({
url: 'frontDemoApi/bookRecommendDetails', url: 'frontDemoApi/bookRecommendDetails',
method: 'post', method: 'post',
data: parameter
params: params
}) })
} }
export default { export default {
FetchBookRecommendList, FetchBookRecommendList,
FetchBookRecommendDetails FetchBookRecommendDetails

4
selfServiceMachine/src/assets/styles/index.scss

@ -24,11 +24,11 @@
height: calc(1920px - 60px); height: calc(1920px - 60px);
background: url('~@/assets/images/online.png') no-repeat left top; background: url('~@/assets/images/online.png') no-repeat left top;
background-size: 100% 100%; background-size: 100% 100%;
img{
.qrcode{
display: block; display: block;
position: absolute; position: absolute;
left: 134px; left: 134px;
bottom: 24px;
bottom: 26px;
width: 180px; width: 180px;
height: 180px; height: 180px;
} }

2
selfServiceMachine/src/main.js

@ -21,6 +21,8 @@ import echarts from 'echarts'
Vue.prototype.$echarts = echarts Vue.prototype.$echarts = echarts
Vue.prototype.coverUrl = 'http://192.168.99.67:8080' Vue.prototype.coverUrl = 'http://192.168.99.67:8080'
Vue.prototype.isLocal = 1
Vue.config.productionTip = false Vue.config.productionTip = false
new Vue({ new Vue({

71
selfServiceMachine/src/views/bookRecommend.vue

@ -37,16 +37,16 @@
> >
<el-carousel-item v-for="(item,index) in topThree" :key="index"> <el-carousel-item v-for="(item,index) in topThree" :key="index">
<div class="ranking-img"> <div class="ranking-img">
<img :src="coverUrl+'/demoOnlineSelect/getBookCover.do?id='+item.id" alt="" />
<img :src="coverUrl+'/demoRecommend/getBookCover.do?id='+item.id" alt="" />
</div> </div>
</el-carousel-item> </el-carousel-item>
</el-carousel> </el-carousel>
<div v-if="i === carIndex" class="ranking-book-detail" v-for="(item,i) in topThree" :key="i"> <div v-if="i === carIndex" class="ranking-book-detail" v-for="(item,i) in topThree" :key="i">
<div class="book-info"> <div class="book-info">
<h5 class="title-item-only">{{ item.bookName }}</h5> <h5 class="title-item-only">{{ item.bookName }}</h5>
<div class="book-author">
<span>{{ item.author }}</span>
<span>{{ item.publish }}</span>
<div class="book-author" style="display: flex; justify-content: flex-start;">
<span class="title-item-only">{{ item.author }}</span>
<span class="title-item-only">{{ item.publish }}</span>
</div> </div>
<p class="book-intro title-item"> <p class="book-intro title-item">
{{ item.introduce }} {{ item.introduce }}
@ -103,7 +103,7 @@
<div class="recommend-item" v-for="(item,index) in bookList" :key="index"> <div class="recommend-item" v-for="(item,index) in bookList" :key="index">
<div class="book-detail"> <div class="book-detail">
<div class="book-img"> <div class="book-img">
<img :src="coverUrl+'/demoOnlineSelect/getBookCover.do?id='+item.id" alt="" />
<img :src="coverUrl+'/demoRecommend/getBookCover.do?id='+item.id" alt="" />
</div> </div>
<div class="book-txt"> <div class="book-txt">
<h4> <h4>
@ -125,11 +125,11 @@
<div class="book-eval"> <div class="book-eval">
<span class="eval-num">{{item.clickNum}}</span> <span class="eval-num">{{item.clickNum}}</span>
<div class="eval-star"> <div class="eval-star">
<span class="active"></span>
<span class="active"></span>
<span></span>
<span></span>
<span></span>
<span :class="{ 'active': 1 <= item.recommendIndex }"></span>
<span :class="{ 'active': 2 <= item.recommendIndex }"></span>
<span :class="{ 'active': 3 <= item.recommendIndex }"></span>
<span :class="{ 'active': 4 <= item.recommendIndex }"></span>
<span :class="{ 'active': 5 <= item.recommendIndex }"></span>
</div> </div>
<div class="to-book-more" @click="getBookDetail(item)">查看详情</div> <div class="to-book-more" @click="getBookDetail(item)">查看详情</div>
</div> </div>
@ -145,7 +145,7 @@
<div class="dialog-book"> <div class="dialog-book">
<div class="book-detail"> <div class="book-detail">
<div class="book-img"> <div class="book-img">
<img :src="coverUrl+'/demoOnlineSelect/getBookCover.do?id='+detailData.id" alt="" />
<img :src="coverUrl+'/demoRecommend/getBookCover.do?id='+detailData.id" alt="" />
</div> </div>
<div class="book-txt"> <div class="book-txt">
<h4> <h4>
@ -167,11 +167,11 @@
<div class="book-eval"> <div class="book-eval">
<span class="eval-num"> {{ detailData.clickNum }}</span> <span class="eval-num"> {{ detailData.clickNum }}</span>
<div class="eval-star"> <div class="eval-star">
<span class="active"></span>
<span class="active"></span>
<span></span>
<span></span>
<span></span>
<span :class="{ 'active': 1 <= detailData.recommendIndex }"></span>
<span :class="{ 'active': 2 <= detailData.recommendIndex }"></span>
<span :class="{ 'active': 3 <= detailData.recommendIndex }"></span>
<span :class="{ 'active': 4 <= detailData.recommendIndex }"></span>
<span :class="{ 'active': 5 <= detailData.recommendIndex }"></span>
</div> </div>
</div> </div>
</div> </div>
@ -233,7 +233,7 @@ export default {
publishDate:[], publishDate:[],
topThree: [], topThree: [],
rankingOther: [], rankingOther: [],
keywordData:['人工智能','遥遥领先','ChatAPT','5G'],
keywordData:['余华','人工智能','5G', 'ChatAPT','遥遥领先',],
selectedIndex: null, selectedIndex: null,
selectedDateIndex: null, selectedDateIndex: null,
keyWordIndex: null, keyWordIndex: null,
@ -286,9 +286,14 @@ export default {
}, },
resetSearch(){ resetSearch(){
this.resetData() this.resetData()
this.keyWordIndex = null
this.selectedIndex = null
this.selectedDateIndex = null
this.addMoreData() this.addMoreData()
}, },
toSearch(){ toSearch(){
this.selectedIndex = null
this.selectedDateIndex = null
this.query = { this.query = {
title: null, title: null,
isbn: null, isbn: null,
@ -329,7 +334,6 @@ export default {
'publish':this.query.publish, 'publish':this.query.publish,
'createdDate':this.query.createdDate 'createdDate':this.query.createdDate
} }
console.log(params)
FetchBookRecommendList(params).then(res => { FetchBookRecommendList(params).then(res => {
console.log(res) console.log(res)
this.publish = res.publishGroup this.publish = res.publishGroup
@ -347,20 +351,22 @@ export default {
this.totalPages = res.page.totalPages; this.totalPages = res.page.totalPages;
if (this.pageIndex < 1) { if (this.pageIndex < 1) {
this.bookList = resData; this.bookList = resData;
} else {
this.bookList = this.bookList.concat(resData)
} }
this.bookList = this.bookList.concat(resData)
}).catch(() => { }).catch(() => {
this.$message.error('接口错误') this.$message.error('接口错误')
}) })
}, },
getBookDetail(item){ getBookDetail(item){
FetchBookRecommendDetails({bookId: item.id}).then(res => {
let param = {
'bookId': item.id
}
FetchBookRecommendDetails(param).then(res => {
console.log(res) console.log(res)
this.detailShow = true this.detailShow = true
if(Object.keys(res).length !== 0){ if(Object.keys(res).length !== 0){
this.detailData = res.book
}else{ }else{
this.detailData = item this.detailData = item
} }
@ -408,12 +414,31 @@ export default {
this.addMoreData() this.addMoreData()
}, },
selectKeyWord(index){ selectKeyWord(index){
this.addMoreData()
this.resetData()
if (this.keyWordIndex === index) { if (this.keyWordIndex === index) {
this.keyWordIndex = null; this.keyWordIndex = null;
} else { } else {
this.keyWordIndex = index; this.keyWordIndex = index;
this.keyword = this.keywordData[index]
switch(this.selectValue){
case 'title' :
this.query.title = this.keyword
break;
case 'isbn' :
this.query.isbn = this.keyword
break;
case 'author' :
this.query.author = this.keyword
break;
case 'publish' :
this.query.publish = this.keyword
break;
case 'createdDate' :
this.query.createdDate = this.keyword
break;
}
} }
this.addMoreData()
}, },
carouselChange(val) { carouselChange(val) {
this.carIndex = val this.carIndex = val

33
selfServiceMachine/src/views/onlineBookSelection.vue

@ -2,22 +2,51 @@
<div id="book"> <div id="book">
<div class="top-bg"></div> <div class="top-bg"></div>
<div class="online-active"> <div class="online-active">
<img src="~@/assets/images/code.png" alt="" />
<div class="qrcode" id="qrCodeUrl"></div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import QRCode from "qrcodejs2";
export default { export default {
name: 'OnlineBookSelection', name: 'OnlineBookSelection',
components: {},
components: {
QRCode
},
data() { data() {
return { return {
QRCode: '',
activeId: ''
} }
}, },
created() { created() {
this.activeId = this.$route.query.activeId
console.log(this.$route.query.activeId)
},
mounted(){
this.creatQrCode()
}, },
methods: { methods: {
creatQrCode() {
const that = this;
console.log(window.location.href);
if(this.isLocal){
that.QRCode = 'http://192.168.99.50:8089/BookList?activeId?activeId='+ this.activeId
}else{
that.QRCode = window.location.href+'BookList?activeId?activeId='+ this.activeId
}
console.log(that.QRCode)
that.$nextTick(function () {
let q = new QRCode("qrCodeUrl", {
text: that.QRCode,
width: 180,
height: 180,
colorDark: "#000000",
colorLight: "#ffffff",
})
})
}
} }
} }
</script> </script>

Loading…
Cancel
Save