From 9e47e0ece28c6145638aecca5bdf86857c049cf9 Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期五, 31 五月 2024 18:23:34 +0800
Subject: [PATCH] ‘’
---
h5/pages/staff/meetingSub.vue | 619 ++++++++++++++++++++++++++++++++++----------------------
1 files changed, 376 insertions(+), 243 deletions(-)
diff --git a/h5/pages/staff/meetingSub.vue b/h5/pages/staff/meetingSub.vue
index 5dfd91e..c31b0cb 100644
--- a/h5/pages/staff/meetingSub.vue
+++ b/h5/pages/staff/meetingSub.vue
@@ -1,254 +1,387 @@
<template>
- <view class="main_app">
- <view class="heade_title">
- <image class="icon" src="../../static/staff/ar_left@2x.png" @click="changeDate(-1)" mode="widthFix"></image>
- <text class="date">{{ activeDateCum }}</text>
- <image class="icon" src="../../static/staff/ar_right@2x.png" @click="changeDate(1)" mode="widthFix"></image>
- </view>
- <!-- -->
- <view class="meeting_list">
- <view class="item" :class="{active: i === 0}" v-for="item,i in meetingList" :key="i">
- <view class="name">{{ item.name }}</view>
- <view class="line"></view>
- </view>
- </view>
- <!-- -->
- <view class="time_list">
- <view class="item" v-for="item,i in timeList" :key="i">{{ item.time }}</view>
- </view>
- <!-- -->
- <view class="main_footer">
- <view class="df_ac">
- <view>宸查�夋嫨锛�</view>
- <view class="sel_time">xxxxxx</view>
- </view>
- <view class="btns">
- <view class="left">
- <view class="item" v-for="item in colorOptions" :key="item.name">
- <view class="box" :style="{ background: item.color }"></view>
- <view class="">{{ item.name }}</view>
- </view>
- </view>
- <view class="sub" @click="$jump('/pages/staff/meetingSubOrder')">纭棰勭害</view>
- </view>
- </view>
- <!-- -->
- <u-popup :show="isShowDetail" :round="12" mode="bottom" @close="isShowDetail = false">
- <view class="detail_modal">
- <view class="title">浼氳瀹ら绾︽儏鍐�</view>
- <view class="h1">璁ㄨxxxxx閫夊瀷</view>
- <view class="line">
- <view class="label">浼氳鏃堕棿</view>
- <view class="value">00000</view>
- </view>
- <view class="line">
- <view class="label">浼氳瀹�</view>
- <view class="value">00000</view>
- </view>
- <view class="line">
- <view class="label">棰勭害浜�</view>
- <view class="value">00000</view>
- </view>
- <view class="btn" @click="isShowDetail = false">鍏抽棴</view>
- </view>
- </u-popup>
- </view>
+ <view class="main_app">
+ <view class="heade_title">
+ <image
+ class="icon"
+ src="../../static/staff/ar_left@2x.png"
+ @click="changeDate(-1)"
+ mode="widthFix"
+ ></image>
+ <text class="date">{{ activeDateCum }}</text>
+ <image
+ class="icon"
+ src="../../static/staff/ar_right@2x.png"
+ @click="changeDate(1)"
+ mode="widthFix"
+ ></image>
+ </view>
+ <!-- -->
+ <view class="meeting_list">
+ <view
+ @click="roomClick(item)"
+ class="item"
+ :class="{ active: activeRoom.roomId === item.id }"
+ v-for="(item, i) in meetingList"
+ :key="i"
+ >
+ <view class="name">{{ item.name }}</view>
+ <view class="line"></view>
+ </view>
+ </view>
+ <!-- -->
+ <view class="time_list">
+ <view
+ @click="datetimeClick(item, i)"
+ class="item"
+ :class="{ disable: item.isUse, active: item.checked == '1' }"
+ v-for="(item, i) in timeList"
+ :key="i"
+ >
+ {{ item.startTime }}-{{ item.endTime }}
+ </view>
+ </view>
+ <!-- -->
+ <view class="main_footer">
+ <view class="df_ac">
+ <view>宸查�夋嫨锛�</view>
+ <view class="sel_time">{{ selDatetime }}</view>
+ </view>
+ <view class="btns">
+ <view class="left">
+ <view class="item" v-for="item in colorOptions" :key="item.name">
+ <view class="box" :style="{ background: item.color }"></view>
+ <view class="">{{ item.name }}</view>
+ </view>
+ </view>
+ <view class="sub" @click="onSubmit"
+ >纭棰勭害</view
+ >
+ </view>
+ </view>
+ <!-- -->
+ <u-popup
+ :show="isShowDetail"
+ :round="12"
+ mode="bottom"
+ @close="isShowDetail = false"
+ >
+ <view class="detail_modal">
+ <view class="title">浼氳瀹ら绾︽儏鍐�</view>
+ <view class="h1">璁ㄨxxxxx閫夊瀷</view>
+ <view class="line">
+ <view class="label">浼氳鏃堕棿</view>
+ <view class="value">00000</view>
+ </view>
+ <view class="line">
+ <view class="label">浼氳瀹�</view>
+ <view class="value">00000</view>
+ </view>
+ <view class="line">
+ <view class="label">棰勭害浜�</view>
+ <view class="value">00000</view>
+ </view>
+ <view class="btn" @click="isShowDetail = false">鍏抽棴</view>
+ </view>
+ </u-popup>
+ </view>
</template>
<script>
- import dayjs from 'dayjs'
- export default {
- data() {
- return {
- activeDate: '',
- isShowDetail: false,
- meetingList: [
- { name: '201浼氳瀹�' },
- { name: '201浼氳瀹�' },
- { name: '201浼氳瀹�' },
- { name: '201浼氳瀹�' },
- ],
- timeList: [
- { time: '08:30-09:00' },
- { time: '08:30-09:00' },
- { time: '08:30-09:00' },
- { time: '08:30-09:00' },
- ],
-
- colorOptions: [
- { color: '#279BAA', name: '宸查�夋嫨' },
- { color: '#F7F7F7', name: '鍙绾�' },
- { color: '#cccccc', name: '涓嶅彲棰勭害' },
- ]
-
- };
- },
- computed: {
- activeDateCum(){
- const { activeDate } = this
- let weeks = ['鍛ㄦ棩', '鍛ㄤ竴','鍛ㄤ簩','鍛ㄤ笁','鍛ㄥ洓','鍛ㄤ簲','鍛ㄥ叚']
- return dayjs(activeDate).format('YYYY骞碝鏈圖鏃�') + ' ' + weeks[dayjs(activeDate).day()]
+import dayjs from 'dayjs'
+import {
+ roomsListPost,
+ getRoomUseTime,
+ meetingDetail
+} from '@/api'
+export default {
+ data() {
+ return {
+ activeRoom: {
+ yudingDate: ''
+ },
+ selDatetime: '',
+ isShowDetail: false,
+ meetingList: [],
+ timeList: [],
+
+ colorOptions: [
+ { color: '#279BAA', name: '宸查�夋嫨' },
+ { color: '#F7F7F7', name: '鍙绾�' },
+ { color: '#cccccc', name: '涓嶅彲棰勭害' },
+ ]
+
+ }
+ },
+ computed: {
+ activeDateCum() {
+ const yudingDate = this.activeRoom.yudingDate
+ let weeks = ['鍛ㄦ棩', '鍛ㄤ竴', '鍛ㄤ簩', '鍛ㄤ笁', '鍛ㄥ洓', '鍛ㄤ簲', '鍛ㄥ叚']
+ return dayjs(yudingDate).format('YYYY骞碝鏈圖鏃�') + ' ' + weeks[dayjs(yudingDate).day()]
+ }
+ },
+ onLoad() {
+ this.activeRoom.yudingDate = dayjs().format('YYYY-MM-DD')
+ this.getRoomList()
+ },
+ methods: {
+ roomClick(item) {
+ this.$set(this.activeRoom, 'roomId', item.id)
+ this.$set(this.activeRoom, 'roomName', item.name)
+ },
+ onSubmit() {
+ const { activeRoom } = this
+ const selTimeList = this.timeList.filter(i => i.checked == '1')
+ if (selTimeList.length == -1) {
+ return uni.showToast({
+ title: '璇峰厛閫夋嫨浼氳鏃舵',
+ icon: 'none'
+ })
+ }
+ const obj = {
+ startTime: selTimeList[0].startTime,
+ endTime: selTimeList[selTimeList.length - 1].endTime,
}
- },
- created() {
- this.activeDate = dayjs().format('YYYY-MM-DD')
- },
- methods: {
- changeDate(num){
- const { activeDate } = this
- let fn = num > 0 ? 'add' : 'subtract'
- this.activeDate = dayjs(activeDate)[fn](1, 'days').format('YYYY-MM-DD')
+ uni.navigateTo({
+ url: `/pages/staff/meetingSubOrder?yudingDate=${activeRoom.yudingDate}&roomName=${activeRoom.roomName}&roomId=${activeRoom.roomId}&startTime=${obj.startTime}&endTime=${obj.endTime}`
+ })
+ // this.$jump('/pages/staff/vehicle/apply')
+ },
+ getRoomList() {
+ roomsListPost({}).then(res => {
+ this.meetingList = res.data || []
+ if (this.meetingList.length > 0) {
+ this.$set(this.activeRoom, 'roomId', this.meetingList[0].id)
+ this.$set(this.activeRoom, 'roomName', this.meetingList[0].name)
+ this.getRoomTime()
+ }
+ })
+ },
+ getRoomTime() {
+ const { activeRoom } = this
+ getRoomUseTime({
+ ...activeRoom
+ }).then(res => {
+ this.timeList = res.data || []
+ this.timeList.forEach((i, j) => {
+ i.checked = '0',
+ i.index = j
+ })
+ })
+ },
+ datetimeClick(item, index) {
+ if (item.isUse == '1') return
+ if(item.isChoose){
+ this.getDetail(item.id)
+ return
}
- }
- }
+ const { timeList } = this
+ const selTimeList = timeList.filter(i => i.checked == '1')
+ if (selTimeList.length === 0) {
+ this.timeList.forEach((ite, i) => {
+ if (i === index) {
+ ite.checked = '1'
+ this.$forceUpdate()
+ }
+ })
+ } else {
+ const findIndex = selTimeList.findIndex(i => i.index === index)
+ console.log('findIndex', findIndex)
+ if (findIndex === -1) {
+ const startNum = index - selTimeList[0].index
+ const endNum = index - selTimeList[selTimeList.length - 1].index
+ if (startNum == 1 || startNum == -1 || endNum == 1 || endNum == -1) {
+ console.log('鐩搁偦')
+ item.checked = true
+ this.$forceUpdate()
+ } else {
+ return uni.showToast({
+ title: '璇烽�夋嫨鐩搁偦鐨勬椂闂存',
+ icon: 'none'
+ })
+ }
+ } else {
+ if (index === selTimeList[0].index || index === selTimeList[selTimeList.length - 1].index) {
+ item.checked = false
+ this.$forceUpdate()
+ } else {
+ return uni.showToast({
+ title: '璇峰厛鍙栨秷鏈�澶栧眰鐨勬椂闂存',
+ icon: 'none'
+ })
+ }
+
+ }
+ }
+ const selTimeLists = this.timeList.filter(i => i.checked == '1')
+ // console.log('selTimeList', selTimeList);
+ if (selTimeLists.length === 0) {
+ this.selDatetime = ''
+ } else {
+ this.selDatetime = this.activeRoom.roomName + ' | ' + selTimeLists[0].startTime + '-' + selTimeLists[selTimeLists.length - 1].endTime
+ }
+ },
+ changeDate(num) {
+ const yudingDate = this.activeRoom.yudingDate
+ let fn = num > 0 ? 'add' : 'subtract'
+ this.yudingDate = dayjs(yudingDate)[fn](1, 'days').format('YYYY-MM-DD')
+ this.getRoomList()
+ },
+ getDetail(id) {
+ meetingDetail({
+ id
+ })
+ },
+ }
+}
</script>
<style lang="scss">
- .detail_modal{
- padding: 40rpx 30rpx;
- .title{
- text-align: center;
- font-weight: 500;
- font-size: 32rpx;
- margin-bottom: 40rpx;
- }
- .h1{
- font-weight: 500;
- font-size: 32rpx;
- margin-bottom: 30rpx;
- }
- .line{
- display: flex;
- margin-bottom: 20rpx;
- .label{
- width: 140rpx;
- color: #888888;
- }
- .value{
- color: #333333;
- }
- }
- .btn{
- margin-top: 230rpx;
- width: 690rpx;
- height: 88rpx;
- line-height: 88rpx;
- text-align: center;
- background: #279BAA;
- border-radius: 44rpx;
- font-weight: 500;
- font-size: 32rpx;
- color: #FFFFFF;
- }
- }
- .main_footer{
- position: absolute;
- width: 100%;
- left: 0;
- bottom: 0;
- padding: 20rpx 30rpx 84rpx;
- box-shadow: 0rpx -3rpx 6rpx 0rpx #EEEEEE;
- .sel_time{
- color: #279BAA;
- }
- .btns{
- margin-top: 10rpx;
- display: flex;
- justify-content: space-between;
- align-items: center;
- .left{
- display: flex;
- .item{
- display: flex;
- align-items: center;
- margin-right: 20rpx;
- .box{
- margin-right: 10rpx;
- width: 32rpx;
- height: 32rpx;
- }
- }
- }
- .sub{
- width: 184rpx;
- height: 72rpx;
- line-height: 72rpx;
- text-align: center;
- background: #279BAA;
- box-shadow: 0rpx -1rpx 0rpx 0rpx #EEEEEE;
- border-radius: 36rpx;
- font-size: 30rpx;
- color: #FFFFFF;
- }
- }
- }
- .time_list{
- display: flex;
- justify-content: space-between;
- padding: 30rpx;
- flex-wrap: wrap;
- .item{
- width: 220rpx;
- height: 80rpx;
- line-height: 80rpx;
- text-align: center;
- background: #F7F7F7;
- border-radius: 4rpx;
- margin-bottom: 24rpx;
- font-size: 30rpx;
- }
- .active{
- background-color: #279BAA;
- color: #fff;
- }
- .disable{
- background-color: #cccccc;
- color: #999999;
- }
- }
- .meeting_list{
- display: flex;
- padding-left: 30rpx;
- width: 720rpx;
- overflow-x: auto;
- border-bottom: 1rpx solid #E5E5E5;
- .item{
- flex-shrink: 0;
- margin-right: 60rpx;
- padding: 30rpx 0 0;
- .line{
- width: 60rpx;
- height: 4rpx;
- background-color: #fff;
- margin: 26rpx auto 0;
- }
- }
- .active{
- color: #279BAA;
- font-weight: 600;
- font-size: 30rpx;
- .line{
- width: 60rpx;
- height: 4rpx;
- background-color: #279BAA;
- margin: 26rpx auto 0;
- }
- }
- }
- .main_app{
- padding: 0;
- }
-.heade_title{
- display: flex;
- justify-content: center;
- align-items: center;
- .date{
- margin: 0 24rpx;
- font-weight: 600;
- font-size: 32rpx;
- }
- .icon{
- width: 30rpx;
- }
+.detail_modal {
+ padding: 40rpx 30rpx;
+ .title {
+ text-align: center;
+ font-weight: 500;
+ font-size: 32rpx;
+ margin-bottom: 40rpx;
+ }
+ .h1 {
+ font-weight: 500;
+ font-size: 32rpx;
+ margin-bottom: 30rpx;
+ }
+ .line {
+ display: flex;
+ margin-bottom: 20rpx;
+ .label {
+ width: 140rpx;
+ color: #888888;
+ }
+ .value {
+ color: #333333;
+ }
+ }
+ .btn {
+ margin-top: 230rpx;
+ width: 690rpx;
+ height: 88rpx;
+ line-height: 88rpx;
+ text-align: center;
+ background: #279baa;
+ border-radius: 44rpx;
+ font-weight: 500;
+ font-size: 32rpx;
+ color: #ffffff;
+ }
+}
+.main_footer {
+ position: fixed;
+ width: 100%;
+ left: 0;
+ bottom: 0;
+ background-color: #fff;
+ padding: 20rpx 30rpx 84rpx;
+ box-shadow: 0rpx -3rpx 6rpx 0rpx #eeeeee;
+ .sel_time {
+ color: #279baa;
+ }
+ .btns {
+ margin-top: 10rpx;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ .left {
+ display: flex;
+ .item {
+ display: flex;
+ align-items: center;
+ margin-right: 20rpx;
+ .box {
+ margin-right: 10rpx;
+ width: 32rpx;
+ height: 32rpx;
+ }
+ }
+ }
+ .sub {
+ width: 184rpx;
+ height: 72rpx;
+ line-height: 72rpx;
+ text-align: center;
+ background: #279baa;
+ box-shadow: 0rpx -1rpx 0rpx 0rpx #eeeeee;
+ border-radius: 36rpx;
+ font-size: 30rpx;
+ color: #ffffff;
+ }
+ }
+}
+.time_list {
+ display: flex;
+ justify-content: space-between;
+ padding: 30rpx;
+ flex-wrap: wrap;
+ .item {
+ width: 220rpx;
+ height: 80rpx;
+ line-height: 80rpx;
+ text-align: center;
+ background: #f7f7f7;
+ border-radius: 4rpx;
+ margin-bottom: 24rpx;
+ font-size: 30rpx;
+ }
+ .active {
+ background-color: #279baa;
+ color: #fff;
+ }
+ .disable {
+ background-color: #cccccc;
+ color: #999999;
+ }
+}
+.meeting_list {
+ display: flex;
+ padding-left: 30rpx;
+ width: 720rpx;
+ overflow-x: auto;
+ border-bottom: 1rpx solid #e5e5e5;
+ .item {
+ flex-shrink: 0;
+ margin-right: 60rpx;
+ padding: 30rpx 0 0;
+ .line {
+ width: 60rpx;
+ height: 4rpx;
+ background-color: #fff;
+ margin: 26rpx auto 0;
+ }
+ }
+ .active {
+ color: #279baa;
+ font-weight: 600;
+ font-size: 30rpx;
+ .line {
+ width: 60rpx;
+ height: 4rpx;
+ background-color: #279baa;
+ margin: 26rpx auto 0;
+ }
+ }
+}
+.main_app {
+ padding: 0;
+}
+.heade_title {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ .date {
+ margin: 0 24rpx;
+ font-weight: 600;
+ font-size: 32rpx;
+ }
+ .icon {
+ width: 30rpx;
+ }
}
</style>
--
Gitblit v1.9.3