|
@ -16,17 +16,25 @@ |
|
|
</picker> |
|
|
</picker> |
|
|
<view class="st-tip">{{curTypeInfo.rule_text || '-'}}</view> |
|
|
<view class="st-tip">{{curTypeInfo.rule_text || '-'}}</view> |
|
|
</view> |
|
|
</view> |
|
|
<view class="sh-date"> |
|
|
|
|
|
<picker mode="date"> |
|
|
|
|
|
|
|
|
<view class="sh-date" v-if="dateList.length"> |
|
|
|
|
|
<picker |
|
|
|
|
|
mode="date" |
|
|
|
|
|
:value="dateList[0].dateStr" |
|
|
|
|
|
data-type='start' |
|
|
|
|
|
@change="datePickerChange"> |
|
|
<view class="sd-box"> |
|
|
<view class="sd-box"> |
|
|
<text>2020年5月16日</text> |
|
|
|
|
|
|
|
|
<text>{{ dateList[0].ZhDateStr || '-' }}</text> |
|
|
<view></view> |
|
|
<view></view> |
|
|
</view> |
|
|
</view> |
|
|
</picker> |
|
|
</picker> |
|
|
<text>至</text> |
|
|
<text>至</text> |
|
|
<picker mode="date"> |
|
|
|
|
|
|
|
|
<picker |
|
|
|
|
|
mode="date" |
|
|
|
|
|
:value="dateList[dateList.length - 1].dateStr" |
|
|
|
|
|
data-type="end" |
|
|
|
|
|
@change="datePickerChange"> |
|
|
<view class="sd-box"> |
|
|
<view class="sd-box"> |
|
|
<text>2020年5月16日</text> |
|
|
|
|
|
|
|
|
<text>{{ dateList[dateList.length - 1].ZhDateStr || '-' }}</text> |
|
|
<view></view> |
|
|
<view></view> |
|
|
</view> |
|
|
</view> |
|
|
</picker> |
|
|
</picker> |
|
@ -59,19 +67,12 @@ |
|
|
</view> |
|
|
</view> |
|
|
<scroll-view class="sti-venue-list" enable-flex scroll-x :style="venueAreaSize"> |
|
|
<scroll-view class="sti-venue-list" enable-flex scroll-x :style="venueAreaSize"> |
|
|
<view class="svl-list" v-for="(e, i) in venueList" :key="i"> |
|
|
<view class="svl-list" v-for="(e, i) in venueList" :key="i"> |
|
|
<view class="sl-item">{{e.name || '-'}}</view> |
|
|
|
|
|
|
|
|
<view class="sl-item">{{e.venue_name || '-'}}</view> |
|
|
<view class="sl-item" v-for="(k,j) in e.items" :key="j" @click="venueSelect(i,j)"> |
|
|
<view class="sl-item" v-for="(k,j) in e.items" :key="j" @click="venueSelect(i,j)"> |
|
|
<view |
|
|
<view |
|
|
:class="[ |
|
|
|
|
|
k._isSelect?'cyan': |
|
|
|
|
|
k.is_take_up?'black': |
|
|
|
|
|
!k.is_valid?'grey':'' |
|
|
|
|
|
]" |
|
|
|
|
|
|
|
|
:class="[ k._isSelect? 'cyan' : '', getVenueStatusnInfo(k).className ]" |
|
|
> |
|
|
> |
|
|
{{ |
|
|
|
|
|
k.is_take_up?'已占用': |
|
|
|
|
|
!k.is_valid?'已售':`¥${k.price || 0}` |
|
|
|
|
|
}} |
|
|
|
|
|
|
|
|
{{ getVenueStatusnInfo(k).zh_text || '-' }} |
|
|
</view> |
|
|
</view> |
|
|
</view> |
|
|
</view> |
|
|
</view> |
|
|
</view> |
|
@ -87,8 +88,8 @@ |
|
|
</view> |
|
|
</view> |
|
|
<scroll-view class="sss-list" scroll-y> |
|
|
<scroll-view class="sss-list" scroll-y> |
|
|
<view class="sl-item" v-for="(e,i) in selectedVenueList" :key="i"> |
|
|
<view class="sl-item" v-for="(e,i) in selectedVenueList" :key="i"> |
|
|
<view class="si-time">{{e.time || '-'}}</view> |
|
|
|
|
|
<view class="si-name">{{e.parentObj.name || '-'}}</view> |
|
|
|
|
|
|
|
|
<view class="si-time">{{e.durations || '-'}}</view> |
|
|
|
|
|
<view class="si-name">{{e.parentObj.venue_name || '-'}}</view> |
|
|
</view> |
|
|
</view> |
|
|
</scroll-view> |
|
|
</scroll-view> |
|
|
</view> |
|
|
</view> |
|
@ -113,9 +114,7 @@ |
|
|
<view class="sm-fixed-tip" v-if="occupyTip!==''"> |
|
|
<view class="sm-fixed-tip" v-if="occupyTip!==''"> |
|
|
<text>{{occupyTip || '-'}}</text> |
|
|
<text>{{occupyTip || '-'}}</text> |
|
|
</view> |
|
|
</view> |
|
|
<view class="sm-fixed-order" v-if="false"> |
|
|
|
|
|
<order-modal></order-modal> |
|
|
|
|
|
</view> |
|
|
|
|
|
|
|
|
<order-modal @close="boardInfo=null" v-if="boardInfo!=null" :query-info="boardInfo"></order-modal> |
|
|
</view> |
|
|
</view> |
|
|
</template> |
|
|
</template> |
|
|
|
|
|
|
|
@ -149,16 +148,18 @@ export default { |
|
|
{ n: '固定场锁定', c: 'blue' }, |
|
|
{ n: '固定场锁定', c: 'blue' }, |
|
|
{ n: '已占用', c: 'black' }, |
|
|
{ n: '已占用', c: 'black' }, |
|
|
], |
|
|
], |
|
|
|
|
|
// 订场看板信息 |
|
|
|
|
|
boardInfo: null, // { brand_id,stadium_id, venue_id, date, duration } |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
}, |
|
|
}, |
|
|
computed: { |
|
|
computed: { |
|
|
// 场地时间间隔列表 |
|
|
// 场地时间间隔列表 |
|
|
venueTimeList(){ |
|
|
venueTimeList(){ |
|
|
let { venueList } = this; |
|
|
let { venueList } = this; |
|
|
console.warn(venueList) |
|
|
|
|
|
if(!venueList.length || !venueList[0] || !venueList[0].items || !venueList[0].items.length)return []; |
|
|
if(!venueList.length || !venueList[0] || !venueList[0].items || !venueList[0].items.length)return []; |
|
|
let _obj = {}; |
|
|
let _obj = {}; |
|
|
return ([].concat(...venueList[0].items.map(e=>e.time.split('-')))).filter(e=>{ |
|
|
|
|
|
|
|
|
return ([].concat(...venueList[0].items.map(e=>e.durations&&e.durations.split('-')))).filter(e=>{ |
|
|
let _bol = !!_obj[e]; |
|
|
let _bol = !!_obj[e]; |
|
|
!_bol?_obj[e] = true:''; |
|
|
!_bol?_obj[e] = true:''; |
|
|
return !_bol; |
|
|
return !_bol; |
|
@ -188,15 +189,10 @@ export default { |
|
|
let _dateArr = this.getDateList({}) || []; |
|
|
let _dateArr = this.getDateList({}) || []; |
|
|
this.dateList = _dateArr; |
|
|
this.dateList = _dateArr; |
|
|
this.curDateInfo = _dateArr[0] || {}; |
|
|
this.curDateInfo = _dateArr[0] || {}; |
|
|
|
|
|
console.warn(_dateArr,'_dateArr') |
|
|
util.hideLoad(); |
|
|
util.hideLoad(); |
|
|
return this.$nextTick(_=>this.refreshVenues()); |
|
|
return this.$nextTick(_=>this.refreshVenues()); |
|
|
// let _venueList = await this.getVenueList({ |
|
|
|
|
|
// type_key: _curType.key, |
|
|
|
|
|
// stadium_id: _curStore.id, |
|
|
|
|
|
// date: _dateArr[0].dateStr, |
|
|
|
|
|
// }) |
|
|
|
|
|
// if(!_venueList.length)return util.showNone('没有场地信息!') |
|
|
|
|
|
// this.venueList = _venueList || []; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}catch(err){ |
|
|
}catch(err){ |
|
|
util.hideLoad(); |
|
|
util.hideLoad(); |
|
@ -204,12 +200,57 @@ export default { |
|
|
} |
|
|
} |
|
|
}, |
|
|
}, |
|
|
methods: { |
|
|
methods: { |
|
|
|
|
|
getVenueStatusnInfo(info){ |
|
|
|
|
|
switch(info.type){ |
|
|
|
|
|
case 'no_price_venue': |
|
|
|
|
|
return { zh_text: '无法订场', type: info.type, className: 'grey', } |
|
|
|
|
|
case 'empty_venue': |
|
|
|
|
|
return { zh_text: info.message, type: info.type, className: '', } |
|
|
|
|
|
case 'mini_program': |
|
|
|
|
|
return { zh_text: '小程序订场', type: info.type, className: 'green', } |
|
|
|
|
|
case 'take_up_venue': |
|
|
|
|
|
return { zh_text: '管理员占用', type: info.type, className: 'black', } |
|
|
|
|
|
case 'course_venue': |
|
|
|
|
|
return { zh_text: '课程预定', type: info.type, className: 'pistac', } |
|
|
|
|
|
case 'pay_venue': |
|
|
|
|
|
return { zh_text: '约玩占用', type: info.type, className: 'black', } |
|
|
|
|
|
case 'fixed_venue': |
|
|
|
|
|
return { zh_text: '固定场', type: info.type, className: 'blue', } |
|
|
|
|
|
default: return {} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
// 20210726 时间范围选择,兼容旧逻辑 |
|
|
|
|
|
datePickerChange(e){ |
|
|
|
|
|
let { dateList } = this; |
|
|
|
|
|
let _type = e.currentTarget.dataset.type; |
|
|
|
|
|
let _value = e.detail.value; |
|
|
|
|
|
let _selectedDateTimestamp = new Date(_value.replace(/\-/g, '/')).getTime(); // 选择当天0点时间戳 |
|
|
|
|
|
let _todayTimestamp = new Date(new Date().toLocaleDateString().replace(/\-/g, '/')).getTime(); // 当天0点 |
|
|
|
|
|
let _oneDateTimestamp = 24*60*60*1000; |
|
|
|
|
|
if(_selectedDateTimestamp<_todayTimestamp)return util.showNone(`请选择${new Date().toLocaleDateString().replace(/\-/g, '/')}之后日期`); |
|
|
|
|
|
let _startTimestamp = _type == 'start' ? _selectedDateTimestamp : new Date(dateList[0].dateStr.replace(/\-/g, '/')).getTime(); |
|
|
|
|
|
let _endTimestamp = _type == 'end' ? _selectedDateTimestamp: new Date(dateList[dateList.length-1].dateStr.replace(/\-/g, '/')).getTime(); |
|
|
|
|
|
if(_endTimestamp<_startTimestamp)return util.showNone('请选择正常范围!'); |
|
|
|
|
|
let _dateLength = +(((_endTimestamp - _startTimestamp) /_oneDateTimestamp + 1).toFixed()); |
|
|
|
|
|
let _dateArr = this.getDateList({ |
|
|
|
|
|
startTimestamp: _startTimestamp, |
|
|
|
|
|
length: _dateLength |
|
|
|
|
|
}) || []; |
|
|
|
|
|
this.dateList = _dateArr; |
|
|
|
|
|
this.curDateInfo = _dateArr[0] || {}; |
|
|
|
|
|
this.$nextTick(_=>this.refreshVenues()); |
|
|
|
|
|
// if(_type=='end'&&_selectedDateTimestamp-_todayTimestamp<_oneDateTimestamp)return util.showNone('时间段最小一天!'); |
|
|
|
|
|
|
|
|
|
|
|
console.warn(e); |
|
|
|
|
|
}, |
|
|
timeSlotChange(e){ |
|
|
timeSlotChange(e){ |
|
|
console.log(e); |
|
|
console.log(e); |
|
|
let _timestamp = new Date(e.detail.value.replace(/\-/g, '/')).getTime(); // 当天0点时间 |
|
|
let _timestamp = new Date(e.detail.value.replace(/\-/g, '/')).getTime(); // 当天0点时间 |
|
|
if(new Date().getTime() - _timestamp > 24*60*60*1000)return util.showNone('请选择正确时间!'); // 一天前 |
|
|
if(new Date().getTime() - _timestamp > 24*60*60*1000)return util.showNone('请选择正确时间!'); // 一天前 |
|
|
let _dateArr = this.getDateList({ |
|
|
let _dateArr = this.getDateList({ |
|
|
dateTimeStamp: _timestamp, |
|
|
|
|
|
|
|
|
startTimestamp: _timestamp, |
|
|
}) || []; |
|
|
}) || []; |
|
|
this.dateList = _dateArr; |
|
|
this.dateList = _dateArr; |
|
|
this.curDateInfo = _dateArr[0] || {}; |
|
|
this.curDateInfo = _dateArr[0] || {}; |
|
@ -222,14 +263,15 @@ export default { |
|
|
try{ |
|
|
try{ |
|
|
util.showLoad(); |
|
|
util.showLoad(); |
|
|
this.venueList = []; |
|
|
this.venueList = []; |
|
|
let _venueList = await this.getVenueList({ |
|
|
|
|
|
|
|
|
let _res = await this.getVenueList({ |
|
|
type_key: curTypeInfo.key || '', |
|
|
type_key: curTypeInfo.key || '', |
|
|
stadium_id: curStoreInfo.id || '', |
|
|
stadium_id: curStoreInfo.id || '', |
|
|
date: curDateInfo.dateStr || '', |
|
|
date: curDateInfo.dateStr || '', |
|
|
}) |
|
|
}) |
|
|
if(!_venueList.length)return util.showNone('没有场地信息!'); |
|
|
|
|
|
|
|
|
let _list = _res.dashboard || []; |
|
|
|
|
|
if(!_list.length)return util.showNone('没有场地信息!'); |
|
|
|
|
|
|
|
|
this.venueList = _venueList || []; |
|
|
|
|
|
|
|
|
this.venueList = _list || []; |
|
|
this.$nextTick(_=>{ |
|
|
this.$nextTick(_=>{ |
|
|
this.getSelectedVenues(); |
|
|
this.getSelectedVenues(); |
|
|
this.setVenueAreaSize(); |
|
|
this.setVenueAreaSize(); |
|
@ -258,19 +300,33 @@ export default { |
|
|
let { venueList } = this; |
|
|
let { venueList } = this; |
|
|
let _venueList = venueList.slice(); |
|
|
let _venueList = venueList.slice(); |
|
|
let _curTarget = { ..._venueList[i].items[j] }; |
|
|
let _curTarget = { ..._venueList[i].items[j] }; |
|
|
if(_curTarget.is_take_up){ |
|
|
|
|
|
let _str = `操作人:${_curTarget.operator || '-'}\n收取金额: ${_curTarget.price || 0}\n原因: ${_curTarget.take_up_reason || '-'}`; |
|
|
|
|
|
this.showOccupyTip(_str) |
|
|
|
|
|
return |
|
|
|
|
|
|
|
|
// if(_curTarget.is_take_up){ |
|
|
|
|
|
// let _str = `操作人:${_curTarget.operator || '-'}\n收取金额: ${_curTarget.price || 0}\n原因: ${_curTarget.take_up_reason || '-'}`; |
|
|
|
|
|
// this.showOccupyTip(_str) |
|
|
|
|
|
// return |
|
|
|
|
|
// } |
|
|
|
|
|
// 设置看板信息 |
|
|
|
|
|
if(_curTarget.type !== 'empty_venue'&& _curTarget.type !== 'no_price_venue'){ |
|
|
|
|
|
let { curStoreInfo } = this; |
|
|
|
|
|
let _venueInfo = { ..._venueList[i] }; |
|
|
|
|
|
return this.boardInfo = { |
|
|
|
|
|
brand_id: curStoreInfo.curStoreInfo, |
|
|
|
|
|
stadium_id: curStoreInfo.id, |
|
|
|
|
|
venue_id: _venueInfo.venue_id, |
|
|
|
|
|
date: _venueInfo.date, |
|
|
|
|
|
duration: _curTarget.duration, |
|
|
|
|
|
venueInfo: {...this.getVenueStatusnInfo(_curTarget)}, |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
if(!_curTarget.is_valid)return; |
|
|
|
|
|
|
|
|
if(_curTarget.type !== 'empty_venue')return; |
|
|
_venueList[i].items[j]._isSelect = !_curTarget._isSelect; |
|
|
_venueList[i].items[j]._isSelect = !_curTarget._isSelect; |
|
|
let _ctnList = []; // 提示用, 连场列表 |
|
|
let _ctnList = []; // 提示用, 连场列表 |
|
|
|
|
|
|
|
|
// 连场判断, 需要循环当前列表 |
|
|
// 连场判断, 需要循环当前列表 |
|
|
_venueList[i].items = _venueList[i].items.map(e=>{ |
|
|
_venueList[i].items = _venueList[i].items.map(e=>{ |
|
|
|
|
|
|
|
|
let _flag = e.time_arrow_id&& // 不连场为空 |
|
|
let _flag = e.time_arrow_id&& // 不连场为空 |
|
|
e.is_valid&& // 已售为false |
|
|
|
|
|
|
|
|
// e.is_valid&& // 已售为false |
|
|
e.time_arrow_id == _curTarget.time_arrow_id; |
|
|
e.time_arrow_id == _curTarget.time_arrow_id; |
|
|
|
|
|
|
|
|
if(_flag)e._isSelect = !_curTarget._isSelect; |
|
|
if(_flag)e._isSelect = !_curTarget._isSelect; |
|
@ -314,10 +370,10 @@ export default { |
|
|
this.$nextTick(_=>this.refreshVenues()); |
|
|
this.$nextTick(_=>this.refreshVenues()); |
|
|
}, |
|
|
}, |
|
|
// 获取近7天列表 |
|
|
// 获取近7天列表 |
|
|
getDateList({ dateTimeStamp = new Date().getTime(), length = 8 }){ |
|
|
|
|
|
|
|
|
getDateList({ startTimestamp = new Date().getTime(), length = 8 }){ |
|
|
let _dayTimeStamp = 24*60*60*1000; |
|
|
let _dayTimeStamp = 24*60*60*1000; |
|
|
return new Array(length).fill(1).map((e,i)=>{ |
|
|
return new Array(length).fill(1).map((e,i)=>{ |
|
|
let _curStamp = dateTimeStamp + (i*_dayTimeStamp); |
|
|
|
|
|
|
|
|
let _curStamp = startTimestamp + (i*_dayTimeStamp); |
|
|
return { |
|
|
return { |
|
|
showDateStr: util.formatDate({date: _curStamp, partition: 'zh'}).substr(5), |
|
|
showDateStr: util.formatDate({date: _curStamp, partition: 'zh'}).substr(5), |
|
|
dateStr: util.formatDate({date: _curStamp}), |
|
|
dateStr: util.formatDate({date: _curStamp}), |
|
@ -353,10 +409,10 @@ export default { |
|
|
util.routeTo(`/pages/site/confirm/confirm`, 'rT'); |
|
|
util.routeTo(`/pages/site/confirm/confirm`, 'rT'); |
|
|
}, |
|
|
}, |
|
|
// 场馆列表 |
|
|
// 场馆列表 |
|
|
getVenueList({type_key,stadium_id,date}){ |
|
|
|
|
|
|
|
|
getVenueList({ type_key, stadium_id, date }){ |
|
|
return servers.get({ |
|
|
return servers.get({ |
|
|
url: API.venue.venueList, |
|
|
url: API.venue.venueList, |
|
|
data: {stadium_id,type_key,date}, |
|
|
|
|
|
|
|
|
data: { stadium_id, type_key, date }, |
|
|
failMsg: '加载分类失败!' |
|
|
failMsg: '加载分类失败!' |
|
|
}) |
|
|
}) |
|
|
}, |
|
|
}, |
|
@ -813,12 +869,5 @@ export default { |
|
|
line-height: 44upx; |
|
|
line-height: 44upx; |
|
|
color: #fff; |
|
|
color: #fff; |
|
|
} |
|
|
} |
|
|
.sm-fixed-order{ |
|
|
|
|
|
position: fixed; |
|
|
|
|
|
left: 0; |
|
|
|
|
|
bottom: 0; |
|
|
|
|
|
z-index: 2; |
|
|
|
|
|
width: 100%; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
</style> |
|
|
</style> |