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