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

680 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>
<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_tab' : ''" @click="currentTabIndex = 0">用车申请</view>
<view class="tab-item" :class="currentTabIndex == 1 ? 'active_tab' : ''" @click="currentTabIndex = 1">用车记录</view>
</view>
<!-- 预约表单 -->
<view class="reservation-box" v-if="currentTabIndex == 0">
<view class="form-box">
<!-- <view class="form-item">
<text class="label">联系人</text>
<view class="ipt-box"><input type="text" placeholder="请填写申请人姓名" v-model="applyPersonName" /></view>
</view>
<view class="form-item">
<text class="label">部门</text>
<view class="ipt-box select">
<image class="arrow" src="/static/icons/right-arrow.png" mode=""></image>
<picker class="picker" v-if="deptList.length > 0" :range="deptList" @change="changeDepartment" range-key="name">
<view>{{ deptList[departmentIndex].name }}</view>
</picker>
</view>
</view>
<view class="form-item">
<text class="label">联系方式</text>
<view class="ipt-box"><input type="number" placeholder="请填写联系人手机号" v-model="applyPersonMobile" /></view>
</view>-->
<view class="form-item">
<text class="label">用车时间</text>
<view class="ipt-box select">
<image class="arrow" src="/static/icons/right-arrow.png" mode=""></image>
<!-- <datetime-Picker class="picker" :placeholder="'请选择用车时间'" :value="selectedDate"
:maxDate="defaultMaxDate"
:minDate="defaultMinDate"
:minTime="minTime"
:maxTime="maxTime"
:pickerIndex="1"
@getData="chooseDate" >
</datetime-Picker> -->
<hTimePicker class="picker" sTime="8" cTime="20" interval="5" dayNum="30" @changeTime="changeTime">
<view slot="pCon" class="changeTime">
{{selectedDate}}
</view>
</hTimePicker>
</view>
</view>
<view class="form-item">
<text class="label">乘车人数</text>
<view class="ipt-box"><input type="number" placeholder="输入乘车人数" v-model="peoplenum"/></view>
</view>
<view class="form-item">
<text class="label">用车事由</text>
<view class="ipt-box select">
<image class="arrow" src="/static/icons/right-arrow.png" mode=""></image>
<picker class="picker" v-if="rersonList.length > 0" :range="rersonList" @change="changeRerson" range-key="name">
<view>{{ rersonList[RersonIndex] }}</view>
</picker>
</view>
</view>
<view class="form-item">
<text class="label">目的地</text>
<view class="ipt-box"><input placeholder="请输入目的地" v-model="destination"/></view>
</view>
<view class="form-item">
<text class="label">备注</text>
<view class="ipt-box"><input placeholder="请输入备注(选填)" v-model="remark"/></view>
</view>
</view>
<view style="font-size: 28upx;color: red;background: #f8f8f8;padding:20upx 30upx">
提示:提交申请后请提醒本部门领导审批。
</view>
<!-- <view class="evaluate">
<view class="title">用户评价</view>
<view class="evaluate_item" v-for="(item,index) in commentList" :key="index">
<view class="user">
<text class="username input_left">{{item.userName}}</text>
<text>
<image v-for="(star,index) in item.level" :key="index" src="../../static/imgs/showstar.png" alt="">
</text>
</view>
<view class="text">{{item.content}}</view>
</view>
</view> -->
</view>
<!-- 预约记录列表 -->
<view v-if="currentTabIndex ==1">
<view class="list-box" v-if="reservationList.length > 0">
<view class="detail" v-for="(item, index) in reservationList" :key="index">
<view class="detail_header">
<text class="blueSign"></text>
<text class="font-tilte">申请记录</text>
<!-- <text class="slect_icon"></text> -->
<text class="font-result" v-if="item.status==0&&item.approval_status==0">预约成功</text>
<text class="font-result" v-if="item.status==0&&item.approval_status==1">审核通过</text>
<text class="font-result" v-if="item.status==0&&item.approval_status==2" style="color: red;">已拒绝</text>
<text class="font-result" v-if="item.status==1">用车中</text>
<text class="font-result" v-if="item.status==2">已用车</text>
</view>
<view class="detail_msg">
<view class="info-item">
<text>用车时间:</text>
<text class="infoSpan">{{ item.startTime }}</text>
</view>
<view class="info-item">
<text>用车事由:</text>
<text class="infoSpan">{{ item.reason }}</text>
</view>
<view class="info-item">
<text>目的地:</text>
<text class="infoSpan">{{ item.destination }}</text>
</view>
<view class="info-item" v-if="item.assignId">
<text>司机: </text>
<text class="infoSpan">{{item.assignName}}</text>
</view>
<!-- <view class="info-item">
<text>申请时间: </text>
<text class="infoSpan">{{formatDate(item.apply_time,'dateTime')}}</text>
</view> -->
<!-- <view class="info-item">
<text>联系人:</text>
<text class="infoSpan">{{ item.userName }}</text>
</view>
<view class="info-item">
<text>联系方式:</text>
<text class="infoSpan">{{ item.telNumber }}</text>
</view> -->
<!-- <view class="info-item">
<text>乘车人数:</text>
<text class="infoSpan">{{ item.peopleNum }}</text>
</view> -->
<view class="comment-btn" v-if="item.isEvaluate == 0 &&item.status==2" @click="goEvaluatePage(item.id)">评价</view>
<view class="comment-btn bg-ccc" v-if="item.isEvaluate != 0">已评价</view>
</view>
</view>
</view>
<content-none v-else :padTop="20"></content-none>
</view>
<view v-if="currentTabIndex == 0">
<view class="occupied"></view>
<view class="footer-btn"><view class="btn" @click="submit">提交申请</view></view>
</view>
<load-more v-if="currentTabIndex == 1" :loadingType="loadingType" :contentText="contentText"></load-more>
</view>
</view>
</view>
</template>
<script>
import { getDate, alertTip, callbackRequest, getStorage, regPhone, formatDate } from '@/common/util.js';
import { getAllDept, submitUseCarApply,getMyUsecarApplyList } from '@/common/api.js';
import loadMore from '@/components/loadMore.vue';
import contentNone from '@/components/contentNone.vue';
import hTimePicker from "@/components/h-timePicker/h-timePicker.vue";
let currentTime = new Date().getTime();
let millisecond = 24 * 7 * 60 * 60 * 1000;
export default {
data() {
return {
page: 1,
pageSize: 10,
loadingType: 0, //0-loading前1-loading中2-没有更多了
contentText: {
contentdown: '上拉加载更多',
contentrefresh: '正在加载...',
contentnomore: '没有更多数据了'
},
userId: getStorage('userInfo').id,
user: getStorage('userInfo'),
currentTabIndex: 0,
date: getDate(), //获取近30天日期
selectedDate: this.getTime(),
chooseDateIndex: 0, //选中的日期
times: [],
chooseTimeIndex: null,
deptList: ['财务部', '会计部', '广告部', '研发部'], //部门列表
rersonList: ['生产用车','公务办事','公务接待', '出差送站', '出差接站', '机要取件', '其它'], //事由列表
RersonIndex: 0,
departmentIndex: 0, //选择的部门下标
applyPersonName: getStorage('userInfo').username, //申请人姓名
applyPersonMobile: getStorage('userInfo').telnumber, //申请人手机
reservationList: [
],
formatDate: formatDate,
peoplenum:1,
remark:"",
destination:"",
};
},
components: {
loadMore,
contentNone,
hTimePicker
},
onLoad(option) {
this.currentTabIndex = option.currentTabIndex || 0;
},
onShow() {
if (this.currentTabIndex == 0) {
this.getDepartment();
//this.initData();
}else{
this.getMyUsecarApplyList();
}
},
watch: {
currentTabIndex: function(newVal, oldVal) {
if (newVal == 1) {
this.page = 1;
this.loadingType = 0;
this.getMyUsecarApplyList();
} else {
this.getDepartment();
}
}
},
methods: {
changeTime(a,e){
this.selectedDate = this.formatDate(e,'m_Time');
},
open() {
this.$refs.calendar.open();
},
getTime() {
var date1 = new Date();
var year = date1.getFullYear();
var mount = date1.getMonth() + 1;
var day = date1.getDate();
var h = date1.getHours();
var m = date1.getMinutes();
var s = date1.getSeconds();
// return year+"年"+month+"月"+day+"日"+hours+":"+minutes+":"+seconds
//return year + '/' + month + '/' + day + ' ' + hours + ':' + minutes;
var newVal = year + '-' + format(mount) + '-' + format(day) + ' ' + format(h) + ':' + format(m);
function format(data) {
return data > 9 ? data : '0' + data
}
return newVal;
},
//获取部门列表
getDepartment() {
let data = {
method: getAllDept,
data: {}
};
callbackRequest(data).then(res => {
if (res.data.returnCode == 1) {
this.deptList = res.data.returnData;
for(var i=0;i<this.deptList.length;i++){
if(this.deptList[i].id==this.user.deptId){
this.departmentIndex = i;
}
}
}
});
},
//获取预约记录列表
getMyUsecarApplyList() {
let params = {
method: getMyUsecarApplyList,
data: {
pageSize: this.pageSize,
page: this.page,
userid: this.userId
}
};
callbackRequest(params)
.then(res => {
if (res.data.returnCode == 1) {
if (this.page == 1) {
this.reservationList = res.data.returnData;
} else {
if (res.data.returnData.length > 0) {
this.reservationList = [...this.reservationList, ...res.data.returnData];
this.loadingType = 0;
} else {
this.loadingType = 2;
}
}
}
})
},
//选择日期
switchTab(index) {
this.chooseDateIndex = index;
//this.initData();
},
//选择部门
changeDepartment(e) {
this.departmentIndex = e.detail.value;
},
//选择出车事由
changeRerson(b) {
this.RersonIndex = b.detail.value;
},
//提交预约
submit() {
/* if (this.chooseTimeIndex == null) {
alertTip('请选择申请时间');
return false;
} else if (!this.applyPersonName) {
alertTip('请输入申请人姓名');
return false;
} else if (!regPhone.test(this.applyPersonMobile)) {
alertTip('请输入正确的手机号');
return false;
} */
if (this.peoplenum == ""||this.peoplenum == 0) {
alertTip('请输入乘车人数');
return false;
}
if (this.destination == "") {
alertTip('请输入目的地');
return false;
}
let params = {
method: submitUseCarApply,
data: {
userid: this.userId,
username:this.applyPersonName,
deptname:this.deptList[this.departmentIndex].name,
deptid:this.deptList[this.departmentIndex].id,
telnumber:this.applyPersonMobile,
starttime:this.selectedDate,
peoplenum:this.peoplenum,
reason:this.rersonList[this.RersonIndex],
destination:this.destination,
remark:this.remark,
}
};
callbackRequest(params).then(res => {
if (res.data.returnCode == 1) {
alertTip('申请成功');
setTimeout(_ => {
this.currentTabIndex=1;
}, 2000);
} else {
alertTip(res.data.returnMsg);
}
});
},
//去评价页面
goEvaluatePage(id) {
uni.navigateTo({
url: `/pages/cars-management/cars-evaluate?type=5&typeId=${id}`
});
}
},
onReachBottom() {
if (this.loadingType !== 0 || this.currentTabIndex != 1) {
return;
}
this.loadingType = 1;
this.page = this.page + 1;
this.getMyUsecarApplyList();
}
};
</script>
<style lang="scss">
@import '@/static/css/common.scss';
.container {
position: relative;
overflow: hidden;
min-height: 100vh;
background: #f8f8f8;
.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_tab {
background: #fff;
color: #333;
border-radius: 10upx 10upx 0 0;
font-weight: bold;
}
}
.reservation-box {
background: #fff;
.time-box {
overflow: hidden;
padding-top: 20rpx;
.time-item {
float: left;
width: 196rpx;
margin: 0 0rpx 20rpx 20rpx;
font-size: 26rpx;
text-align: center;
line-height: 32rpx;
padding: 10rpx 0;
position: relative;
border: 1px solid #ccc;
box-sizing: border-box;
.time-text {
color: #666;
text {
padding: 0 6rpx;
color: #00c277;
}
.color-666 {
color: #666;
}
}
.icon {
position: absolute;
right: 0;
bottom: 0;
width: 36rpx;
height: 36rpx;
display: none;
}
}
.active {
border: 1px solid #00c277;
.icon {
display: block;
}
}
}
.form-box {
// padding: 20upx 30upx 50upx;
background: #fff;
.form-item {
overflow: hidden;
border-bottom: 1px solid #eee;
padding: 30upx;
.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;
}
}
.select {
.arrow {
float: right;
width: 16upx;
height: 29upx;
margin-top: 10upx;
}
.picker {
height: 50upx;
line-height: 50upx;
font-size: 26upx;
color: #666;
}
}
}
.form-item:last-child {
border-bottom: 0px;
}
}
/* 评论 */
.evaluate {
padding-top: 30upx;
border-top: 1px solid #eee;
}
.evaluate .title {
font-size: 28upx;
color: #333;
font-weight: bold;
line-height: 40upx;
padding: 0 30rpx 30rpx;
}
.evaluate .evaluate_item {
border-bottom: 1px solid #eeeeee;
padding: 0 0 30upx 50upx;
}
.evaluate .evaluate_item:last-child {
border: none;
}
.evaluate .evaluate_item .user {
padding: 20upx 0;
}
.evaluate .evaluate_item .user .username {
font-size: 28rpx;
color: #666;
display: inline-block;
vertical-align: top;
padding-right: 20upx;
}
.evaluate .evaluate_item .user span image {
width: 40upx;
height: 40upx;
margin-right: 5upx;
}
.evaluate .evaluate_item .text {
font-size: 28upx;
color: #666;
line-height: 40upx;
}
}
}
.scroll-view {
padding-top: 30upx;
white-space: nowrap;
width: 100%;
height: 120upx;
.time-item-box {
padding: 0 10upx;
margin: 0 16upx;
display: inline-block;
.time {
display: block;
width: 100%;
font-size: 28upx;
color: #666;
}
.week {
display: block;
width: 100%;
font-size: 28upx;
color: #666;
}
}
.time-active {
.time {
color: #00c277;
}
.week {
color: #00c277;
}
}
}
}
.list-box {
.detail {
// margin-top: 10upx;
margin-bottom: 14upx;
background: #ffffff;
border-radius: 4upx;
}
.detail_header {
padding: 15upx 30upx;
border-bottom: 1px solid #eee;
}
.detail_header .blueSign {
height: 30upx;
width: 10upx;
background: #00c277;
display: inline-block;
margin: 10upx 14upx 0 0;
}
.detail_header .font-tilte {
display: inline-block;
font-size: 28upx;
color: #333;
line-height: 50upx;
vertical-align: top;
}
.detail_header .font-result {
display: inline-block;
float: right;
font-size: 26upx;
color: #00c277;
line-height: 50upx;
vertical-align: top;
}
.detail_msg {
padding: 20upx 30upx;
overflow: hidden;
}
.detail_msg .info-item {
margin-bottom: 10upx;
font-size: 28upx;
text {
display: inline-block;
width: 140upx;
}
.infoSpan {
width: auto;
font-size: 28upx;
color: #666;
float: right;
}
}
.comment-btn {
float: right;
font-size: 24upx;
border-radius: 10upx;
color: #fff;
line-height: 50upx;
text-align: center;
min-width: 140upx;
background-color: #00c277;
}
}
</style>