180 lines
4.2 KiB
Vue
180 lines
4.2 KiB
Vue
<template>
|
||
<view class="app-container">
|
||
<HeaderBar title="车辆信息" text-align="center" enable-back />
|
||
|
||
<view class="car-list">
|
||
<view
|
||
v-for="item in carList"
|
||
:key="item.id"
|
||
class="car-item"
|
||
@click="selectCar(item)"
|
||
>
|
||
<image :src="item.picture" class="car-img" mode="aspectFill" />
|
||
<view class="car-info">
|
||
<view class="no">
|
||
{{ item.no | dv}}
|
||
<view v-if="item.isDefault" class="default-tag">默认</view>
|
||
</view>
|
||
<view class="name">{{ item.name | dv}}</view>
|
||
<view class="mobile">{{ item.mobile | dv}}</view>
|
||
</view>
|
||
<view class="car-actions">
|
||
<view class="action-btn edit" @click.stop="editCar(item)">
|
||
<u-icon name="edit-pen" size="32" color="#2979ff"></u-icon>
|
||
</view>
|
||
<view class="action-btn delete" @click.stop="deleteCar(item)">
|
||
<u-icon name="trash" size="32" color="#f56c6c"></u-icon>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="car-item add-placeholder" @click="addCar">
|
||
<view class="add-content">
|
||
<u-icon name="plus" size="40" color="#2979ff"></u-icon>
|
||
<text class="add-text">添加新车辆</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import { appGetCarList, appDeleteCar } from '@/api/app/car'
|
||
import HeaderBar from '@/components/HeaderBar.vue'
|
||
import { appUpdateTask } from '@/api/app/task'
|
||
|
||
export default {
|
||
name: 'CarIndex',
|
||
components: { HeaderBar },
|
||
data() {
|
||
return {
|
||
carList: [],
|
||
taskId: null,
|
||
queryParams: {
|
||
orderByColumn: "createTime",
|
||
isAsc: "desc"
|
||
}
|
||
}
|
||
},
|
||
onLoad(options) {
|
||
this.taskId = options.taskId
|
||
},
|
||
onShow() {
|
||
this.getCarList()
|
||
},
|
||
methods: {
|
||
getCarList() {
|
||
appGetCarList(this.queryParams).then(res => {
|
||
this.carList = res.data
|
||
})
|
||
},
|
||
// 选择车辆,如果taskId不为空,则更新task表
|
||
selectCar(car) {
|
||
if (this.taskId == null || car == null) {
|
||
return;
|
||
}
|
||
this.$modal.loading("加载中");
|
||
appUpdateTask({
|
||
id: this.taskId,
|
||
carId: car.id,
|
||
carNo: car.no,
|
||
createName: car.name,
|
||
createMobile: car.mobile,
|
||
}).then(res => {
|
||
this.$modal.closeLoading();
|
||
uni.navigateBack();
|
||
})
|
||
},
|
||
deleteCar(car) {
|
||
uni.showModal({
|
||
title: '提示',
|
||
content: '确定要删除该车辆吗?',
|
||
success: (res) => {
|
||
if (res.confirm) {
|
||
appDeleteCar(car.id).then(() => {
|
||
uni.showToast({ title: '删除成功', icon: 'success' })
|
||
this.getCarList()
|
||
})
|
||
}
|
||
}
|
||
})
|
||
},
|
||
editCar(car) {
|
||
uni.navigateTo({
|
||
url: `/pages/car/edit?id=${car.id}`
|
||
})
|
||
},
|
||
addCar() {
|
||
uni.navigateTo({
|
||
url: '/pages/car/edit'
|
||
})
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
.car-list {
|
||
margin-top: 30rpx;
|
||
padding: 0 20rpx;
|
||
}
|
||
.car-item {
|
||
background: #fff;
|
||
border-radius: 20rpx;
|
||
padding: 30rpx;
|
||
margin-bottom: 20rpx;
|
||
display: flex;
|
||
align-items: center;
|
||
position: relative;
|
||
&.add-placeholder {
|
||
background: #ffffff71;
|
||
border: 2rpx dashed #fff;
|
||
justify-content: center;
|
||
padding: 40rpx;
|
||
.add-content {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
gap: 10rpx;
|
||
.add-text {
|
||
font-size: 28rpx;
|
||
color: #2979ff;
|
||
}
|
||
}
|
||
}
|
||
.car-img {
|
||
width: 100rpx;
|
||
height: 100rpx;
|
||
border-radius: 10rpx;
|
||
margin-right: 20rpx;
|
||
background: #f7f8fa;
|
||
}
|
||
.car-info {
|
||
flex: 1;
|
||
.no { font-size: 32rpx; color: #333; }
|
||
.mobile, .name { font-size: 28rpx; color: #666; }
|
||
.default-tag {
|
||
display: inline-block;
|
||
background: #2979ff;
|
||
color: #fff;
|
||
border-radius: 8rpx;
|
||
font-size: 22rpx;
|
||
padding: 2rpx 10rpx;
|
||
margin-left: 10rpx;
|
||
}
|
||
}
|
||
.car-actions {
|
||
display: flex;
|
||
gap: 20rpx;
|
||
.action-btn {
|
||
width: 60rpx;
|
||
height: 60rpx;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
border-radius: 50%;
|
||
background: #f7f8fa;
|
||
}
|
||
}
|
||
}
|
||
</style>
|