You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
245 lines
5.9 KiB
245 lines
5.9 KiB
<template>
|
|
<view class="item-container">
|
|
<!-- 图书数量 + 右侧设置按钮 -->
|
|
<view class="count-text">
|
|
<text>图书数量 ({{ bookList.length }})</text>
|
|
<text class="edit-btn" @click="toggleEdit">{{ editMode ? "完成" : "管理" }}</text>
|
|
</view>
|
|
|
|
<checkbox-group @change="checkboxChange">
|
|
<view class="car-list" v-for="item in bookList" :key="item.isbn">
|
|
<checkbox :value="item.isbn" :checked="item.checked" />
|
|
<view class="book-item-box">
|
|
<view class="item-box-left">
|
|
<image class="img-item" :src="item.imgCover" mode="aspectFill" />
|
|
</view>
|
|
<view class="item-box-right">
|
|
<view class="item-title line-clamp-2">{{ item.title || '暂无标题' }}</view>
|
|
<view class="tag-box">
|
|
<text class="item-author">{{ item.nickname || '佚名' }}</text>
|
|
<text class="item-publish">{{ item.publish || '暂无出版社' }}</text>
|
|
</view>
|
|
<view class="item-desc line-clamp-2">{{ item.desc || '暂无简介' }}</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</checkbox-group>
|
|
|
|
<view class="bottom-placeholder"></view>
|
|
|
|
<view class="car-bottom">
|
|
<!-- 全选 -->
|
|
<view class="all-check" @click="handleAllCheck">
|
|
<checkbox :checked="isAllChecked" />
|
|
<text style="margin-left:6px">全选</text>
|
|
</view>
|
|
|
|
<!-- 根据编辑状态切换按钮:续借 / 删除 -->
|
|
<button
|
|
class="join-btn"
|
|
@click="editMode ? handleDelete() : handleRenew()"
|
|
:disabled="!hasChecked"
|
|
>
|
|
{{ editMode ? "删除选中" : "一键续借" }}
|
|
</button>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
data() {
|
|
return {
|
|
editMode: false, // 控制编辑/删除状态
|
|
bookList: [
|
|
{
|
|
imgCover: "https://qiniu.aiyxlib.com/1606124577077",
|
|
title: "名侦探柯南",
|
|
nickname: "青山刚昌",
|
|
publish: "长春出版社",
|
|
isbn: "1001",
|
|
desc: "测试图书简介",
|
|
checked: true,
|
|
},
|
|
{
|
|
imgCover: "https://qiniu.aiyxlib.com/1606124577077",
|
|
title: "测试图书",
|
|
nickname: "测试作者",
|
|
publish: "测试出版社",
|
|
isbn: "1002",
|
|
desc: "测试简介",
|
|
checked: true,
|
|
},
|
|
{
|
|
imgCover: "https://qiniu.aiyxlib.com/1606124577077",
|
|
title: "测试图书",
|
|
nickname: "测试作者",
|
|
publish: "测试出版社",
|
|
isbn: "1003",
|
|
desc: "测试简介",
|
|
checked: false,
|
|
}
|
|
],
|
|
};
|
|
},
|
|
computed: {
|
|
// 是否全选
|
|
isAllChecked() {
|
|
return this.bookList.every((item) => item.checked);
|
|
},
|
|
// 是否有选中
|
|
hasChecked() {
|
|
return this.bookList.some((item) => item.checked);
|
|
},
|
|
},
|
|
methods: {
|
|
// 切换编辑模式
|
|
toggleEdit() {
|
|
this.editMode = !this.editMode;
|
|
// 退出编辑时可以取消所有选中(可选)
|
|
if (!this.editMode) {
|
|
this.bookList.forEach(item => item.checked = false);
|
|
}
|
|
},
|
|
checkboxChange(e) {
|
|
console.log("checkbox选中value:", e.detail.value);
|
|
const values = e.detail.value;
|
|
const items = this.bookList;
|
|
|
|
for (let i = 0, lenI = items.length; i < lenI; ++i) {
|
|
items[i].checked = false;
|
|
for (let j = 0, lenJ = values.length; j < lenJ; ++j) {
|
|
if (items[i].isbn === values[j]) {
|
|
items[i].checked = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
this.bookList = items;
|
|
},
|
|
handleAllCheck() {
|
|
const isAll = this.isAllChecked;
|
|
this.bookList.forEach((item) => {
|
|
item.checked = !isAll;
|
|
});
|
|
},
|
|
|
|
// 一键续借
|
|
handleRenew() {
|
|
const checkedBooks = this.bookList.filter((item) => item.checked);
|
|
uni.showToast({
|
|
title: `已续借 ${checkedBooks.length} 本`,
|
|
icon: "success",
|
|
});
|
|
},
|
|
|
|
// 删除选中图书
|
|
handleDelete() {
|
|
const beforeLen = this.bookList.length;
|
|
// 过滤掉选中的项
|
|
this.bookList = this.bookList.filter(item => !item.checked);
|
|
const deleteCount = beforeLen - this.bookList.length;
|
|
|
|
uni.showToast({
|
|
title: `已删除 ${deleteCount} 本`,
|
|
icon: "success"
|
|
});
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.item-container {
|
|
padding: 10px;
|
|
background: #f5f6f7;
|
|
min-height: 100vh;
|
|
}
|
|
.count-text {
|
|
margin-bottom: 10px;
|
|
display: flex;
|
|
justify-content: space-between; /* 数量左,设置右 */
|
|
align-items: center;
|
|
}
|
|
.edit-btn {
|
|
color: #01a4fe;
|
|
font-size: 14px;
|
|
}
|
|
.car-list {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
margin-bottom: 10px;
|
|
checkbox {
|
|
margin-top: 15px;
|
|
padding: 0 10px;
|
|
}
|
|
}
|
|
.book-item-box {
|
|
flex: 1;
|
|
background: #fff;
|
|
border-radius: 8px;
|
|
padding: 12px;
|
|
display: flex;
|
|
.item-box-left {
|
|
margin-right: 12px;
|
|
.img-item {
|
|
width: 64px;
|
|
height: 90px;
|
|
border-radius: 6px;
|
|
}
|
|
}
|
|
.item-box-right {
|
|
flex: 1;
|
|
}
|
|
.item-title {
|
|
font-weight: bold;
|
|
margin-bottom: 4px;
|
|
}
|
|
.item-author,
|
|
.item-publish {
|
|
font-size: 12px;
|
|
background: #f4f6fc;
|
|
padding: 2px 6px;
|
|
border-radius: 4px;
|
|
margin-right: 6px;
|
|
}
|
|
.item-desc {
|
|
font-size: 12px;
|
|
color: #999;
|
|
margin-top: 6px;
|
|
}
|
|
}
|
|
.bottom-placeholder {
|
|
height: 60px;
|
|
}
|
|
.car-bottom {
|
|
position: fixed;
|
|
left: 0;
|
|
bottom: 0;
|
|
right: 0;
|
|
background: #fff;
|
|
padding: 12px 15px;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
box-shadow: 0 -2px 5px rgba(0, 0, 0, 0.05);
|
|
}
|
|
.all-check {
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
.join-btn {
|
|
font-size: 14px;
|
|
color: #fff;
|
|
margin: 0 !important;
|
|
background-color: #01a4fe !important;
|
|
border-radius: 23px;
|
|
padding: 0 30px;
|
|
&::after{
|
|
border: none !important;
|
|
}
|
|
&[disabled] {
|
|
background: #ccc !important;
|
|
}
|
|
}
|
|
</style>
|