hz-zhhq-app/pages/carport/carport.vue

693 lines
16 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/23441.png" 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="stat-box">
<text class="box-tip">当前剩余车位</text>
<view class="count-box"><text>50</text></view>
</view>
</view>
<!-- 预约记录列表 -->
<view v-else>
<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">{{ item.status }}</text>
</view>
<view class="detail_msg">
<view class="info-item">
<text>用车时间:</text>
<text class="infoSpan">{{ item.timeQ }}</text>
</view>
<view class="info-item">
<text>用车事由:</text>
<text class="infoSpan">{{ item.rerson }}</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.concatUserName }}</text>
</view>
<view class="info-item">
<text>联系方式:</text>
<text class="infoSpan">{{ item.concatPhone }}</text>
</view>
<view class="info-item">
<text>乘车人数:</text>
<text class="infoSpan">{{ item.numeberOfCar }}</text>
</view>
<view class="comment-btn" v-if="item.conmentStatus == 0" @click="goEvaluatePage(item.detailId)">评价</view>
<view class="comment-btn bg-ccc" v-if="item.conmentStatus == 1">已评价</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, initWashCar, applyWashCar, getMyWashCarList } from '@/common/api.js';
import loadMore from '@/components/loadMore.vue';
import contentNone from '@/components/contentNone.vue';
import datetimePicker from '@/components/dateTime.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,
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, //申请人手机
commentList: [
{ userName: '张三', level: 3, content: '服务一般吧,车内有异味' },
{ userName: '李四', level: 5, content: '司机技术娴熟不错' },
{ userName: '张飞', level: 4, content: '老司机,点赞' },
{ userName: '关羽', level: 2, content: '不错' }
],
reservationList: [
{
status: '申请成功',
timeQ: '2019-09-09 09:09',
rerson: '公务办事',
numeberOfCar: '4',
userName: '张三',
apply_time: '2020-01-06 16:18:43',
concatUserName: '张三',
concatPhone: '15220161881',
conmentStatus: '0'
},
{
status: '申请成功',
timeQ: '2019-10-09 09:09',
rerson: '出差送站',
numeberOfCar: '2',
userName: '李四',
apply_time: '2020-10-09 17:18:43',
concatUserName: '李四',
concatPhone: '12220161881',
conmentStatus: '0'
},
{
status: '申请成功',
timeQ: '2019-11-09 09:09',
rerson: '出差接站',
numeberOfCar: '1',
userName: '张飞',
apply_time: '2020-11-09 17:18:43',
concatUserName: '张飞',
concatPhone: '13320161881',
conmentStatus: '0'
},
{
status: '申请成功',
timeQ: '2019-12-09 09:09',
rerson: '公务接待',
numeberOfCar: '3',
userName: '王思',
apply_time: '2020-12-09 17:18:43',
concatUserName: '王思',
concatPhone: '19920161881',
conmentStatus: '0'
}
],
formatDate: formatDate,
defaultMinDate: currentTime, // 最小时间
minTime: new Date(currentTime + millisecond).getHours() + ':' + new Date(currentTime + millisecond).getMinutes(),
defaultMaxDate: new Date(currentTime + millisecond).getTime(), // 最大时间
maxTime: '18:00'
};
},
components: {
loadMore,
contentNone,
datetimePicker
},
onLoad(option) {
console.log('--');
this.currentTabIndex = option.currentTabIndex || 0;
// 部门
this.getDepartment();
if (this.currentTabIndex == 0) {
this.initData();
}
},
watch: {
currentTabIndex: function(newVal, oldVal) {
if (newVal == 1) {
this.page = 1;
this.loadingType = 0;
this.getReservationRecord();
} else {
this.initData();
}
}
},
methods: {
open() {
console.log(1111111);
this.$refs.calendar.open();
},
bindDateChange(e) {
this.selectedDate = e.detail.value;
},
getTime() {
var date1 = new Date();
var year = date1.getFullYear();
var month = date1.getMonth() + 1;
var day = date1.getDate();
var hours = date1.getHours();
var minutes = date1.getMinutes();
var seconds = date1.getSeconds();
// return year+"年"+month+"月"+day+"日"+hours+":"+minutes+":"+seconds
return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes;
},
initData() {
let params = {
method: initWashCar,
data: {
applyDate: this.date[this.chooseDateIndex].tiems,
userId: this.userId
}
};
/* callbackRequest(params)
.then(res => {
if (res.data.returnCode == 1) {
this.times = res.data.returnData.timeList;
// 部门列表下拉框 默认显示自己的部门
var deptId = res.data.returnData.deptId;
var that = this;
if (deptId) {
that.deptList.forEach(function(item, index) {
if (item.id == deptId) {
that.departmentIndex = index;
}
})
}
// 评论
that.commentList = res.data.returnData.comments;
}
}) */
},
//获取部门列表
getDepartment() {
let data = {
method: getAllDept,
data: {}
};
callbackRequest(data).then(res => {
if (res.data.returnCode == 1) {
this.deptList = res.data.returnData;
}
});
},
//获取事由列表
getRerson() {
let data = {
method: getAllDept,
data: {}
};
callbackRequest(data).then(res => {
if (res.data.returnCode == 1) {
this.rersonList = res.data.returnData;
}
});
},
//获取预约记录列表
getReservationRecord() {
let params = {
method: getMyWashCarList,
data: {
pageSize: this.pageSize,
pageNum: 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;
} */
let params = {
method: applyWashCar,
data: {
userId: this.userId,
applyDate: this.date[this.chooseDateIndex].tiems,
applyTime: this.times[this.chooseTimeIndex].time,
applyTimeId: this.times[this.chooseTimeIndex].timeId,
deptId: this.deptList[this.departmentIndex].id,
deptName: this.deptList[this.departmentIndex].name,
concatUserName: this.applyPersonName,
concatPhone: this.applyPersonMobile
}
};
callbackRequest(params).then(res => {
if (res.data.returnCode == 1) {
alertTip('预约成功');
this.page = 1;
this.loadingType = 0;
setTimeout(_ => {
this.applyPersonName = '';
this.applyPersonMobile = '';
this.chooseTimeIndex = null;
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.getReservationRecord();
}
};
</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;
width: 80%;
margin: 0 auto;
.tab-item {
float: left;
height: 70upx;
width: 100%;
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;
}
.stat-box{
margin-top: 20upx;
width: 100%;
text-align: center;
align-items: center;
padding-top: 100upx;
padding-bottom: 200upx;
.count-box {
width: 80%;
height: 200upx;
margin: 10upx auto;
background-color: #00c277;
border-radius: 10upx;
text {
// margin: 0 auto; /*水平居中*/
position: relative; /*脱离文档流*/
top: 30%; /*偏移*/
color: #FFFFFF;
font-size: 60upx;
}
}
}
}
}
.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>