Files
gjt_mini/pageSub/failure/index.vue
2025-12-30 09:44:46 +08:00

273 lines
7.1 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<view>
<u-sticky>
<u-button text="去上报" color="#7ba746" @click="addFailuer"></u-button>
<u-search
placeholder="请输入车牌号/上报人"
v-model="keyword"
:showAction="false"
@search="searchList()"
></u-search>
</u-sticky>
<view class="list">
<view class="item" v-for="item in dataList" :key="item.id">
<view
class="line"
v-if="item.failureStatusName == '已解决' && item.isSubmit != 0"
>
<u-badge :isDot="true" type="success"></u-badge>
<view class="text-normal" style="margin-left: 20rpx">已解决</view>
</view>
<view class="line" v-else>
<u-badge :isDot="true" type="error"></u-badge>
<view class="text-normal" style="margin-left: 20rpx">未解决</view>
</view>
<view class="line">
<view class="text-normal"
>上报人: {{ item.implementerName || "" }}</view
>
</view>
<view class="line" style="justify-content: space-between">
<view class="text-small left"
>上报时间: {{ formatDateTime(item.failureTime, "minute") }}</view
>
</view>
<view class="line" style="justify-content: space-between">
<view class="text-small left"
>解决时间: {{ formatDateTime(item.solutionTime, "minute") }}</view
>
</view>
<view class="line">
<view class="text-small"
>维修效率时长: {{ item.timeConsuming || "" }}</view
>
</view>
<view class="line">
<view class="text-small">故障来源: {{ item.faultSourceName }}</view>
</view>
<view class="line">
<view class="text-small">故障状态: {{ item.failureStatusName }}</view>
</view>
<view class="line" style="justify-content: space-between">
<view class="text-small left"
>故障类型: {{ item.typeName || item.type }}</view
>
<view class="text-small">车牌号: {{ item.plateNumber }}</view>
</view>
<view class="buttons">
<button
@tap="goto"
:data-url="`/pageSub/failure/detail?id=${item.id}`"
v-if="item.failureStatusName != '已解决' || item.isSubmit == 0"
>
编辑
</button>
<button
@tap="goto"
:data-url="`/pageSub/failure/detail?id=${item.id}&isRead=1`"
>
查看
</button>
</view>
</view>
<view class="no-more" v-if="noMoreData">没有更多数据了</view>
</view>
<u-loading-page
bg-color="#ffffff"
:loading="loading"
color="#7ba746"
font-size="24"
></u-loading-page>
</view>
</template>
<script>
import stora from "@/utils/storage";
export default {
options: {
styleIsolation: "shared", // 解除样式隔离
},
data() {
return {
keyword: "",
current: 0,
list: ["待交车", "全部"],
queryPage: {
pageNo: 1, // 页码
pageSize: 10, //每页查询条数
total: 0, //总页数
pages: -1, //总页数
keyword: "", // 新增车牌号查询条件
},
dataList: [],
pageNo: 1,
noMoreData: false,
loading: false,
};
},
methods: {
formatDateTime(obj, type = "data") {
if (obj == null) {
return "";
}
const date = new Date(obj);
if (type === "date") {
let y = 1900 + date.getYear();
let m = "0" + (date.getMonth() + 1);
let d = "0" + date.getDate();
return (
y +
"-" +
m.substring(m.length - 2, m.length) +
"-" +
d.substring(d.length - 2, d.length)
);
} else if (type === "minute") {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, "0"); // 月份从0开始
const day = String(date.getDate()).padStart(2, "0");
const hour = String(date.getHours()).padStart(2, "0");
const minute = String(date.getMinutes()).padStart(2, "0");
return `${year}-${month}-${day} ${hour}:${minute}`;
}
},
loadmore() {
this.loading = true;
this.$api.failure
.queryPageList(this.queryPage)
.then((res) => {
console.log(res);
this.queryPage.pageNo = res.current;
this.queryPage.pages = res.pages;
this.queryPage.total = res.total;
this.dataList.push(...(res.records || []));
this.loading = false;
})
.catch((errors) => {
this.loading = false;
});
},
// 新增的搜索方法
searchList() {
this.queryPage.keyword = this.keyword.trim(); // 设置车牌号条件
this.queryPage.pageNo = 1; // 重置页码为1
this.dataList = []; // 清空数据列表
this.noMoreData = false; // 重置没有更多数据的标志
this.loadmore(); // 重新加载数据
},
goto(e) {
uni.navigateTo({ url: e.target.dataset.url });
},
addFailuer() {
uni.navigateTo({ url: `/pageSub/failure/detail` });
},
},
onLoad() {},
onPullDownRefresh() {
this.queryPage.pageNo = 1;
this.dataList = [];
this.loadmore();
uni.stopPullDownRefresh(); //刷新数据之后停止刷新效果
},
onReachBottom() {
console.log("触底了");
//当前页数小于总页数
if (this.queryPage.pageNo < this.queryPage.pages) {
this.queryPage.pageNo++;
this.loadmore();
} else {
this.noMoreData = true;
console.log("没有更多数据了");
}
},
onShow() {
this.queryPage.pageNo = 1;
this.dataList = [];
this.loadmore();
},
};
</script>
<style lang="less" scoped>
/deep/ .u-search {
background: #d7d7d7 !important;
padding: 20rpx 10rpx !important;
}
// /deep/ .u-search__content__input {
// height: 50rpx !important;
// padding-top: 20rpx !important; /* 上边距 */
// padding-bottom: 20rpx !important; /* 下边距 */
// }
/deep/ .u-icon__icon {
font-size: 26rpx !important;
}
/deep/ .u-badge--error {
background-color: red !important;
}
/deep/ .u-badge--dot {
height: 20rpx !important;
width: 20rpx !important;
}
.list {
background: #d7d7d7;
padding: 0 20px 20rpx;
.item {
background: white;
width: calc(100% - 40rpx);
padding: 20rpx;
margin-bottom: 20rpx;
position: relative;
border-radius: 15rpx;
.line {
display: flex;
align-items: center;
margin-bottom: 15rpx;
.left {
margin-right: 50rpx;
width: 300rpx;
}
.text-small {
font-size: x-small;
}
.text-normal {
font-size: small;
}
}
.buttons {
position: absolute;
top: 20rpx;
right: 20rpx;
button {
width: 130rpx;
height: 50rpx;
padding: 12rpx 0;
font-size: 26rpx;
line-height: 26rpx;
margin-bottom: 10rpx;
}
}
}
.no-more {
width: 100%;
text-align: center;
font-size: xx-small;
color: white;
}
}
</style>