Files
2025-12-30 09:44:46 +08:00

417 lines
12 KiB
Vue
Raw Permalink 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="新增" @click="addFailuer"></u-button>
<!-- <u-search placeholder="请输入车牌号" v-model="keyword" :showAction="false" @search="searchList()"></u-search> -->
<view style="background-color: #fff">
<u-subsection
mode="subsection"
:list="list"
:current="current"
@change="sectionChange"
activeColor="#7ba746"
:fontSize="30"
>
</u-subsection>
</view>
<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.approvalStatus == 10 && item.isSubmit != 0"
>
<u-badge :isDot="true" type="warning"></u-badge>
<view class="text-normal">待审批</view>
</view>
<view class="line" v-else-if="item.approvalStatus === 0">
<u-badge :isDot="true" type="warning"></u-badge>
<view class="text-normal">待提交</view>
</view>
<view class="line" v-else-if="item.approvalStatus == 40">
<u-badge :isDot="true" type="error"></u-badge>
<view class="text-normal">驳回</view>
</view>
<view class="line" v-else-if="item.approvalStatus === 60">
<u-badge :isDot="true" type="warning"></u-badge>
<view class="text-normal">异动超时</view>
</view>
<view class="line" v-else-if="item.approvalStatus == 99">
<u-badge :isDot="true" type="info"></u-badge>
<view class="text-normal">已撤销</view>
</view>
<view class="line" v-else-if="item.approvalStatus == 30">
<u-badge :isDot="true" type="error"></u-badge>
<view class="text-normal">进行中</view>
</view>
<view class="line" v-else-if="item.approvalStatus == 50">
<u-badge :isDot="true" type="success"></u-badge>
<view class="text-normal">异动完成</view>
</view>
<!-- <view class="line" v-else-if="item.approvalStatus == 30">
<u-badge
:isDot="true"
:type="item.transactionStatus === 2 ? 'success' : 'error'"
></u-badge>
<view class="text-normal">{{
item.transactionStatus === 2 ? "异动完成" : "进行中"
}}</view>
</view> -->
<view class="line">
<view class="text-small">车牌号: {{ item.plateNumber || "" }}</view>
</view>
<view class="line">
<view class="text-small">申请人: {{ item.applyUserName || "" }}</view>
</view>
<view
class="line"
v-if="![0, 10].includes(item.approvalStatus) && item.approvalName"
>
<view class="text-small">审批人: {{ item.approvalName || "" }}</view>
</view>
<view class="line">
<view class="text-small"
>开始时间:
{{ formatDateTime(item.transactionStartTime, "minute") }}</view
>
</view>
<view class="line">
<view class="text-small"
>异动目的地: {{ item.transactionAddressName || "" }}</view
>
</view>
<!-- <view class="line">
<view class="text-small"
>结束时间: {{ formatDateTime(item.approvalTime, "minute") }}</view
>
</view> -->
<view class="buttons">
<button
@tap="goto"
:data-url="`/pages/unusualActionApply/detail?id=${item.id}`"
v-if="editButton && [0, 30, 40, 60].includes(item.approvalStatus)"
>
<!-- 25.2.24 注释&&
![2, 3].includes(item.transactionStatus)
2现为approvalStatus50 3为99
去除异动状态沿用审批状态字段当做异动状态显示 仅在前端显示为异动
-->
<!--
item.applyUserId === userId 编辑按钮不跟申请人挂钩跟外勤挂钩
[30, 40].includes(item.approvalStatus) 30通过 40驳回
[2, 3].includes(item.transactionStatus) 2异动完成 3撤销 -->
编辑
</button>
<button
@tap="goto"
:data-url="`/pages/unusualActionApply/detail?id=${item.id}&isAudit=1`"
v-if="item.approvalStatus === 10 && auditButton"
>
审批
</button>
<button
@tap="goto"
:data-url="`/pages/unusualActionApply/detail?id=${item.id}&isRead=1`"
>
查看
</button>
<button
@tap="cancelApply(item.id)"
v-if="
item.applyUserId == userId &&
![50, 99].includes(item.approvalStatus)
"
>
撤销
</button>
<!-- 25.2.24 注释 ![2, 3].includes(item.transactionStatus) &&
item.approvalStatus !== 99
2现为approvalStatus50 3为99
去除异动状态,沿用审批状态字段当做异动状态显示 仅在前端显示为异动
-->
</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 { getUser } from "@/utils/auth.js";
import { checkButtonPermission } from "@/utils/permission.js";
export default {
options: {
styleIsolation: "shared", // 解除样式隔离
},
data() {
return {
keyword: "",
userId: null,
current: 0,
list: ["审批通过", "待审批"],
queryPage: {
pageNo: 1, // 页码
pageSize: 10, // 每页查询条数
total: 0, // 总页数
pages: -1, // 总页数
approvalStatusList: [30, 50, 60], // 审批状态集合
wxOrder: 2,
},
dataList: [],
pageNo: 1,
noMoreData: false,
loading: false,
pageCode: "transactionManagement",
};
},
computed: {
auditButton: function () {
console.log(checkButtonPermission("transactionAudit", this.pageCode));
return checkButtonPermission("transactionAudit", this.pageCode);
},
editButton: function () {
return checkButtonPermission("transactionEdit", this.pageCode);
},
},
methods: {
// 新增的搜索方法
searchList() {
this.queryPage.plateNumber = this.keyword.trim(); // 设置车牌号条件
this.queryPage.pageNo = 1; // 重置页码为1
this.dataList = []; // 清空数据列表
this.noMoreData = false; // 重置没有更多数据的标志
this.loadmore(); // 重新加载数据
},
sectionChange(index) {
console.log(index);
this.current = index;
this.queryPage.plateNumber = undefined; // 清空搜索关键字
this.keyword = ""; // 清空搜索关键字
if (index == 1) {
this.queryPage.approvalStatusList = [0, 10, 40, 99]; // 待提交,待审批,审批不通过,已撤销
this.queryPage.wxOrder = 1;
} else {
this.queryPage.approvalStatusList = [30, 50, 60]; //审批通过 60过期
this.queryPage.wxOrder = 2;
}
this.queryPage.pageNo = 1;
this.dataList = [];
this.loadmore();
},
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.unusualActionApply
.queryPageList(this.queryPage)
.then((res) => {
console.log(res);
this.queryPage.pageNo = res.data?.current;
this.queryPage.pages = res.data?.pages;
this.queryPage.total = res.data?.total;
this.dataList.push(...(res.data?.records || []));
this.loading = false;
})
.catch((errors) => {
this.loading = false;
});
},
onPullDownRefresh() {
this.sectionChange(this.current);
uni.stopPullDownRefresh(); //刷新数据之后停止刷新效果
},
// formatPlateNumber(plateNumbers) {
// if (!plateNumbers) return ""; // 如果为空,返回空字符串
// const plates = plateNumbers.split(","); // 将字符串按逗号分隔成数组
// if (plates.length > 1) {
// return `${plates[0]}...`; // 如果有多个车牌号,返回第一个加上“...”
// }
// return plates[0]; // 如果只有一个车牌号,直接返回
// },
goto(e) {
uni.navigateTo({ url: e.target.dataset.url });
},
cancelApply(id) {
uni.showModal({
title: "提示",
content: "是否撤销本次异动申请?",
success: (res) => {
if (res.confirm) {
this.cancelApplyApi(id);
}
},
});
},
//撤销异动申请
cancelApplyApi(id) {
if (id) {
this.$api.unusualActionApply.revokeTransaction({ id }).then((res) => {
if (res) {
uni.showToast({
title: "撤销成功",
icon: "success",
duration: 1500,
success: () => {
this.sectionChange(this.current);
},
});
}
});
}
},
addFailuer() {
uni.navigateTo({ url: `/pages/unusualActionApply/detail` });
},
},
onLoad() {
this.userInfo = getUser() || {};
this.userId = this.userInfo.id;
console.log("userId type:", typeof this.userId);
},
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--success {
background-color: #4cd964 !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 {
margin-left: 20rpx;
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>