hz-zhhq-app/pages/cars-management/cars-approval.vue

652 lines
17 KiB
Vue
Raw Normal View History

2025-01-22 10:53:47 +08:00
<template>
<view class="container">
<view class="banner-box">
<image src="/static/imgs/ycsq.jpg" mode=""></image>
</view>
<view class="main">
<view class="tab-box">
<view class="tab-item" :class="currentTabIndex == 0 ? 'active' : ''" @click="currentTabIndex = 0">未审批</view>
<view class="tab-item" :class="currentTabIndex == 1 ? 'active' : ''" @click="currentTabIndex = 1">已审批</view>
</view>
<view v-if="currentTabIndex == 0&&list0.length>0" style="height: 80upx;background: white;padding-left: 10upx;line-height: 68upx;border-bottom: 2upx solid #eee;">
<radio-group @change="checkRadioChange" style="width: 80%;float: left;"><!-- @change="checkRadioChange" -->
<label class="radio" style="margin-right: 10upx;font-size: 26upx;" v-for="(item, index) in items" :key="item.value" >
<radio :value="item.value" :checked="item.checked" style="transform:scale(0.9)" color="#00c277"/>
{{item.name}}
<!-- <view>
<radio :value="item.value" :checked="index === current" />
</view>
<view>{{item.name}}</view> -->
</label>
</radio-group>
<!-- <view style="float: right;width: 20%;height: 30upx;"><button @click="getCheckBoxList()" style="height: 60upx;margin-top: 8upx;background: #00c277;color: white;" class="mini-btn" type="warn" size="mini">审批</button></view> -->
</view>
<!-- 未审批列表 -->
<view class="list-box" v-if="currentTabIndex == 0">
<view
class="list-item"
v-for="(item, index) in list0"
:key="index"
>
<view style="position: relative;" class="title">
<text class="line"></text>
<text class="text">{{item.userName}}</text>
<checkbox @click="checkBox($event, item)" name="checkbox" :checked="item.checkValue" :value="item.detail_id+''" :color="item.checkValue?'#00c277':'white'" style="transform:scale(0.8); position: absolute;top: 16upx;" />
<text class="status2" v-if="item.approval_status==0">未审批</text>
<text class="status2" v-if="item.approval_status==1">已同意</text>
<text class="status2" v-if="item.approval_status==2">已拒绝</text>
</view>
<view class="content" >
<view class="info-item">
<view class="fl-text">联系人:</view>
<view class="fr-text">{{ item.userName ||item.username}}</view>
</view>
<view class="info-item">
<view class="fl-text">联系电话:</view>
<view class="fr-text">{{ item.telNumber }}</view>
</view>
<view class="info-item">
<view class="fl-text">用车时间:</view>
<view class="fr-text">{{ item.startTime}}</view>
</view>
<view class="info-item">
<view class="fl-text">用车事由:</view>
<view class="fr-text">{{ item.reason}}</view>
</view>
<view class="info-item">
<view class="fl-text">乘车人数:</view>
<view class="fr-text">{{ item.peopleNum }}</view>
</view>
<view class="info-item">
<view class="fl-text">目的地:</view>
<view class="fr-text">{{ item.destination }}</view>
</view>
</view>
</view>
</view>
<!-- 已审批列表 -->
<view class="list-box" v-if="currentTabIndex == 1">
<view class="list-item" v-for="(item, index) in list1" :key="index"
>
<view class="title">
<text class="line"></text>
<text class="text">{{item.userName}}</text>
<text class="status2" v-if="item.approval_status==0">未审批</text>
<text style="color: #00C277;" class="status2" v-if="item.approval_status==1">已同意</text>
<text class="status2" v-if="item.approval_status==2">已拒绝</text>
</view>
<view class="content">
<view class="info-item">
<view class="fl-text">联系人:</view>
<view class="fr-text">{{ item.userName ||item.username}}</view>
</view>
<view class="info-item">
<view class="fl-text">联系电话:</view>
<view class="fr-text">{{ item.telNumber }}</view>
</view>
<view class="info-item">
<view class="fl-text">用车时间:</view>
<view class="fr-text">{{ item.startTime}}</view>
</view>
<view class="info-item">
<view class="fl-text">用车事由:</view>
<view class="fr-text">{{ item.reason}}</view>
</view>
<view class="info-item">
<view class="fl-text">乘车人数:</view>
<view class="fr-text">{{ item.peopleNum }}</view>
</view>
<view class="info-item">
<view class="fl-text">目的地:</view>
<view class="fr-text">{{ item.destination }}</view>
</view>
<!-- <view class="comment-btn" @click.stop="del(item.detail_id,2,index)">删除</view> -->
</view>
</view>
</view>
<content-none v-if="currentTabIndex == 0 && list0.length == 0" :padTop="20"></content-none>
<content-none v-if="currentTabIndex == 1 && list1.length == 0" :padTop="20"></content-none>
</view>
<load-more v-show="currentTabIndex == 0" :loadingType="loadingType0" :contentText="contentText0"></load-more>
<load-more v-show="currentTabIndex == 1" :loadingType="loadingType1" :contentText="contentText1"></load-more>
<view v-if="checkedListId.length>0" style="position: fixed;bottom:0upx;height: 50upx;width: 100%;z-index: 9999;"><!-- uni-popup ref="butPopup" type="bottom" -->
<view >
<view class="footer-btn footer-btn-two batchBtn" >
<view class="btn btn-col btn1" @click="circulation()">拒绝</view>
<view class="btn btn-col1 btn2" @click="submit(1)">同意</view>
</view>
</view>
</view>
<uni-popup ref="popup" type="center" style="">
<view style="background: white;width: 80%;height: 540upx;width: 600upx;position: relative;border-radius: 10upx;padding: 14upx;">
<view style="color: #333;font-size: 30upx;font-weight: bold;padding: 10upx 0px;">
<text>审批意见</text>
</view>
<view style="width: 100%;border: 1px solid #E5E5E5;margin-top: 20upx;padding: 20upx;height: 300upx;color: #666;border-radius: 10upx;">
<textarea @blur="bindTextAreaBlur" v-model="approvalReason" placeholder="请输入审批意见"/>
</view>
<view class="footer-btn footer-btn-two" style="position: absolute;margin-bottom: 20upx;">
<view class="btn btn-col" style="width:40%;margin-left:7%;margin-right: 6%;border-radius: 10upx;" @click="closeCirculation()">取消</view>
<view class="btn btn-col1" style="width:40%;border-radius: 10upx" @click="submit(2)">确定</view>
</view>
</view>
</uni-popup>
</view>
</template>
<script>
import uniCalendar from '@/components/uni-calendar/uni-calendar.vue';
import { getUsecarApplyList,approvalUseCarApply } from '@/common/api.js';
import { callbackRequest, alertTip, getStorage } from '@/common/util.js';
import loadMore from '@/components/loadMore.vue';
import datetimePicker from '@/components/dateTime.vue';
import contentNone from '@/components/contentNone.vue';
import UniPopup from "@/components/uni-popup/uni-popup.vue"
export default {
data() {
return {
userId: getStorage('userInfo').userId,
deptId:getStorage('userInfo').deptId,
currentTabIndex:0,
page0: 1,
pageSize0: 10,
page1: 1,
pageSize1: 10,
list:[],
list0: [
],
list1: [
],
stateList: ['待审核', '已通过','已拒绝'],
loadingType0: 2, //0-loading前1-loading中2-没有更多了
contentText0: {
contentdown: '上拉加载更多',
contentrefresh: '正在加载...',
contentnomore: '没有更多数据了'
},
loadingType1: 2, //0-loading前1-loading中2-没有更多了
contentText1: {
contentdown: '上拉加载更多',
contentrefresh: '正在加载...',
contentnomore: '没有更多数据了'
},
items: [
{
value: '0',
name: '全选',
checked:false
},
{
value: '1',
name: '取消选择',
checked:false
},
],
objList:[],
paramsDataList:[],
checkedListId:[],
ids:"",
approvalReason:"",
};
},
components: {
loadMore,
contentNone,
UniPopup,
},
watch: {
currentTabIndex: function(newVal, oldVal) {
this.currentTabIndex = newVal;
if (this.currentTabIndex==0) {
this.page0 = 1;
this.loadingType0 = 0;
this.getApprovalList();
}else if (this.currentTabIndex==1) {
this.page1 = 1;
this.loadingType1 = 0;
this.getApprovalList();
}
}
},
onLoad(options) {
this.currentTabIndex = options.currentTabIndex || 0;
this.getApprovalList();
},
methods: {
getApprovalList() {
let params = {};
if(this.currentTabIndex==0){
params = {
method: getUsecarApplyList,
data: {
userid: this.userId,
deptid:this.deptId,
pageSize:this.pageSize0,
page:this.page0,
approvalStatus:'0'
}
};
}else{
params = {
method: getUsecarApplyList,
data: {
userid: this.userId,
deptid:this.deptId,
pageSize:this.pageSize0,
page:this.page0,
approvalStatus:'3'//0未审核 1已通过2已拒绝 3已通过已拒绝
}
};
}
callbackRequest(params).then(res => {
if (res.data.returnCode == 1) {
var list = res.data.returnData||[];
for(var i=0;i<list.length;i++){
list[i].checkValue = false;
}
if(this.currentTabIndex==0){
if (this.page0 == 1) {
this.list0 = list;
} else {
if (list.length > 0) {
this.list0 = [...this.list0, ...list];
this.loadingType0 = 0;
} else {
this.loadingType0 = 2;
}
}
}else if(this.currentTabIndex==1){
if (this.page1 == 1) {
this.list1 = list;
} else {
if (list.length > 0) {
this.list1 = [...this.list1, ...list];
this.loadingType1 = 0;
} else {
this.loadingType1 = 2;
}
}
}
}
});
},
checkBox(e, item) {
let that = this;
let box = (item.checkValue = !item.checkValue);
var arr=[];
if(item.checkValue){
that.checkedListId.push(item);
}else{
for(var i=0;i<that.checkedListId.length;i++){
if(item.id != that.checkedListId[i].id){
arr.push(that.checkedListId[i]);
}
}
that.checkedListId = arr;
}
},
checkRadio(e, item){
let that = this;
let box = (item.checked = !item.checked);
},
getCheckBoxList(){
for(var i=0;i<this.checkedListId.length;i++){
if(i==0){
this.ids+=this.checkedListId[i].id;
}else{
this.ids+=","+this.checkedListId[i].id;
}
}
},
submit(type){
this.getCheckBoxList();
let params = {
"method": approvalUseCarApply,// 申请的审批
"data": {
ids:this.ids,
approvalStatus:type,
approvalReason:this.approvalReason,
userId:this.userId,
}
};
var self = this;
var content="是否确认拒绝";
if(type==1){
content="是否确认同意";
}
uni.showModal({
title: '提示',
content: content,
success: function(res){
if (res.confirm) {
callbackRequest(params)
.then(res =>{
const url = '/pages/cars-management/cars-approval?currentTabIndex=0';
alertTip(res.data.returnMsg);
setTimeout(function() {
uni.redirectTo({
url
});
}, 2000);
})
}
}
})
},
checkRadioChange: function (e) {
let that = this;
var values = e.detail.value;
if(values==0){
for(var i=0;i<that.list0.length;i++){
that.list0[i].checkValue = true;
}
}else{
for(var i=0;i<that.list0.length;i++){
that.list0[i].checkValue = false;
}
}
var arr=[];
for(var i=0;i<that.list0.length;i++){
if(that.list0[i].checkValue){
arr.push(that.list0[i]);
}
}
that.checkedListId = arr;
},
circulation(){
this.$refs.popup.open();
//this.closeButPopup();
},
closeCirculation(){
this.$refs.popup.close()
},
bindTextAreaBlur: function (e) {
console.log(e.detail.value)
},
},
onReachBottom() {
if(this.currentTabIndex==0){
if (this.loadingType0 !== 0 ) {
return;
}
this.loadingType0 = 1;
this.page0 = this.page0 + 1;
this.getApprovalList();
}else{
if (this.loadingType1 !== 0 ) {
return;
}
this.loadingType1 = 1;
this.page1 = this.page1 + 1;
this.getApprovalList();
}
}
};
</script>
<style lang="scss">
@import '@/static/css/common.scss';
page {
// background: #f8f8f8;
}
.batchBtn{
position: absolute;height: 140upx; background: white;padding-top: 30upx;
.btn1{
width:40%;margin-left:7%;margin-right: 6%;border-radius: 10upx;
}
.btn2{
width:40%;border-radius: 10upx;
}
.btn3{
width: 28%;margin-left: 4%;border-radius: 10upx;
}
.btn4{
width: 28%;margin-left: 4%;border-radius: 10upx;
}
.btn5{
width: 28%;margin-left: 4%;border-radius: 10upx;
background: #348CF2;
}
}
.container {
position: relative;
overflow: hidden;
background: #f8f8f8;
min-height: 100vh;
.banner-box {
width: 100%;
height: 240upx;
position: absolute;
top: 0;
left: 0;
image {
width: 100%;
height: 100%;
}
}
.main {
margin: 172upx 40upx 0;
position: relative;
z-index: 10;
.tab-box {
overflow: hidden;
border-radius: 10upx 10upx 0 0;
background: rgba(132, 149, 167, 0.8);
height: 70upx;
.tab-item {
float: left;
height: 70upx;
width: 50%;
font-size: 30upx;
color: #e5f6ff;
text-align: center;
line-height: 70upx;
}
.active {
background: #fff;
color: #333;
border-radius: 10upx 10upx 0 0;
font-weight: bold;
}
}
.form-box {
padding: 20upx 30upx 0upx;
margin-bottom: 20upx;
background: #fff;
.form-item {
overflow: hidden;
border-bottom: 1px solid #eee;
padding: 30upx 0;
.label {
float: left;
width: 150upx;
font-size: 28upx;
color: #333;
font-weight: bold;
line-height: 50upx;
}
.ipt-box {
margin-left: 160upx;
input {
width: 100%;
height: 50upx;
line-height: 50upx;
font-size: 26upx;
color: #666;
}
.pic {
width: 60upx;
height: 60upx;
line-height: 80upx;
}
}
.select {
.arrow {
float: right;
width: 16upx;
height: 29upx;
margin-top: 10upx;
}
input {
width: 70%;
}
}
.jian {
width: 50upx;
height: 50upx;
margin-left: 280upx;
}
.select {
.arrow {
float: right;
width: 16upx;
height: 29upx;
margin-top: 10upx;
}
.picker {
height: 50upx;
line-height: 50upx;
font-size: 26upx;
color: #666;
}
}
}
.sure-btn {
width: 100%;
height: 80upx;
font-size: 28upx;
color: #fff;
text-align: center;
line-height: 80upx;
border-radius: 8upx;
background: #0066cc;
background: linear-gradient(to right, #ffc200, #ff9000); /*设置按钮为渐变颜色*/
margin-top: 50upx;
}
}
.list-box {
.list-item {
background: #fff;
margin-bottom: 10upx;
.title {
border-bottom: 1px solid #eee;
padding: 20upx 10upx;
overflow: hidden;
line-height: 40upx;
.line {
display: inline-block;
width: 10upx;
height: 32upx;
background: $assistColor;
margin-top: 4upx;
}
.text {
display: inline-block;
font-size: 28upx;
color: #444;
font-weight: bold;
margin-left: 10upx;
vertical-align: top;
}
.status {
font-size: 26upx;
color: $assistColor;
float: right;
}
.status1 {
font-size: 26upx;
color: #00c277;
float: right;
}
.status2 {
font-size: 26upx;
color: red;
float: right;
}
}
.content {
padding: 10upx 20upx;
// padding:10upx 10upx 60upx 10upx;
.info-item {
overflow: hidden;
padding-bottom: 10upx;
.fl-text {
float: left;
font-size: 26upx;
color: #444;
font-weight: bold;
line-height: 40upx;
}
.fr-text {
float: right;
font-size: 26upx;
color: #666;
line-height: 40upx;
}
}
}
}
.comment-btn {
float: right;
font-size: 24upx;
border-radius: 10upx;
color: #fff;
line-height: 50upx;
text-align: center;
min-width: 140upx;
background-color: #00c277;
}
}
}
}
#addbtn {
height: 120upx;
background-color: #ffffff;
padding: 30upx;
border-radius: 30upx;
color: #333333;
border-bottom: 0.033333rem solid #eee;
align-items: center;
position: relative;
margin-top: 20upx;
}
.addbtn view text:nth-child(1) {
font-size: 32upx;
margin-left: 220upx;
color: #00c277;
}
.addbtn view text:nth-child(2) {
font-size: 32upx;
margin-left: 180upx;
color: #00c277;
}
.tips {
font-size: 22upx;
// margin-left: 80upx;
margin-top: 20upx;
}
uni-radio .uni-radio-input {
-webkit-appearance: none;
appearance: none;
margin-right: 5px;
outline: 0;
border: 1px solid #d1d1d1;
background-color: #fff;
border-radius: 50%;
width: 18px!important;
height: 18px!important;
position: relative;
}
</style>