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

652 lines
17 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 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>