This commit is contained in:
@jyuhsin
2025-03-19 14:41:09 +08:00
parent 309b2069e0
commit ef30224867
7 changed files with 217 additions and 174 deletions
@@ -204,7 +204,7 @@ layout("/mobile/platform.html"){
</van-cell>
<van-cell title="预约地点">{{site.name}}</van-cell>
<van-field
<!--<van-field
v-model="joinUser"
rows="2"
autosize
@@ -213,7 +213,7 @@ layout("/mobile/platform.html"){
maxlength="50"
placeholder="请输入参加人员"
show-word-limit
></van-field>
></van-field>-->
<van-field
v-model="message"
rows="4"
@@ -295,10 +295,10 @@ layout("/mobile/platform.html"){
calendarFormatter() {
return (day) => {
// 休息日不能选择
let week = day.date.getDay()
/*let week = day.date.getDay()
if (week === 0 || week === 6) {
day.type = 'disabled'
}
}*/
return day
}
}
@@ -320,12 +320,23 @@ layout("/mobile/platform.html"){
//这里要排除掉休息日
setWeekList(startDate) {
const wk = []
let d = null
do {
d = moment(startDate).day()
if(!this.site.openWeekTime.includes(d)) {
startDate = moment(startDate).add(1, 'd')
}
} while (!this.site.openWeekTime.includes(d))
wk.push(moment(startDate))
let count = 1
while (wk.length < 7) {
const addDate = moment(startDate).add(count, 'd')
const nextDay = addDate.day()
//这里不是休息日才能加到数组里
if (addDate.day() !== 0 && addDate.day() !== 6 && !this.holidays.includes(moment(addDate).format('YYYY-MM-DD'))) {
/*if (addDate.day() !== 0 && addDate.day() !== 6 && !this.holidays.includes(moment(addDate).format('YYYY-MM-DD'))) {
wk.push(addDate)
}*/
if(this.site.openWeekTime.includes(nextDay)) {
wk.push(addDate)
}
count++
@@ -399,12 +410,11 @@ layout("/mobile/platform.html"){
async onLoad() {
this.loading = true
$.post('/mobile/activity/site/info/getDetail', {id: this.site_id}).then(res => {
if (res.code === 0) {
this.site = res.data
}
this.loading = false
})
const resp = await $.post('/mobile/activity/site/info/getDetail', {id: this.site_id})
if (resp.code === 0) {
this.site = resp.data
}
this.loading = false
},
async getReserve() {
const resp = await $.post('/mobile/activity/site/info/getReserve', {
@@ -446,9 +456,9 @@ layout("/mobile/platform.html"){
async created() {
this.site_id = getQueryString('id')
this.selectDate = this.getLatestWorkDay()
this.setWeekList(this.selectDate)
await this.getReserve()
await this.onLoad()
this.setWeekList(this.selectDate)
await this.getMyReservation()
}
@@ -457,4 +467,4 @@ layout("/mobile/platform.html"){
<!--#
}
#-->
#-->
@@ -91,13 +91,13 @@ layout("/layouts/platform.html"){
</template>
</el-table-column>
<el-table-column align="center" :show-overflow-tooltip="true" header-align="center" label="限定工作日预约"
<!--<el-table-column align="center" :show-overflow-tooltip="true" header-align="center" label="限定工作日预约"
prop="workday">
<template slot-scope="{row}">
<el-switch disabled v-model="row.workday" active-color="#13ce66"
inactive-color="#ff4949"></el-switch>
</template>
</el-table-column>
</el-table-column>-->
<el-table-column align="center" label="操作" width="250px">
<template slot-scope="{row}">
@@ -115,131 +115,146 @@ layout("/layouts/platform.html"){
<template #edit>
<vi-title title="填写场地信息"></vi-title>
<div style="padding: 0 5%">
<el-form :model="formData" ref="addForm" :rules="formRules" label-width="120px">
<el-form :model="formData" ref="addForm" :rules="formRules" label-width="120px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="create_username" label="创建人">
<el-input readonly v-model="formData.create_username" type="text"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="create_time" label="创建时间">
<el-input readonly v-model="formData.create_time" type="text"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="create_username" label="创建人">
<el-input readonly v-model="formData.create_username" type="text"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="create_time" label="创建时间">
<el-input readonly v-model="formData.create_time" type="text"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="name" label="场地名称">
<el-input maxlength="100" placeholder="请填写场地名称" v-model="formData.name"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="address" label="场地地址">
<el-input maxlength="100" placeholder="请填写场地地址" v-model="formData.address"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="name" label="场地名称">
<el-input maxlength="100" placeholder="请填写场地名称" v-model="formData.name"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="address" label="场地地址">
<el-input maxlength="100" placeholder="请填写场地地址" v-model="formData.address"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="contact_person" label="联系人">
<el-input v-model="formData.contact_person" placeholder="请填写联系人" type="text"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="contact_phone" label="联系方式">
<el-input v-model="formData.contact_phone" placeholder="请填写联系方式" type="text"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="contact_person" label="联系人">
<el-input v-model="formData.contact_person" placeholder="请填写联系人" type="text"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="contact_phone" label="联系方式">
<el-input v-model="formData.contact_phone" placeholder="请填写联系方式" type="text"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="4">
<el-form-item prop="state" label="开启状态">
<el-switch v-model="formData.state" active-color="#13ce66" inactive-color="#ff4949">
</el-switch>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item prop="state" label="是否多次预约">
<el-switch v-model="formData.multiple" active-color="#13ce66" inactive-color="#ff4949">
</el-switch>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item prop="state" label="限定工作日预约">
<el-switch v-model="formData.workday" active-color="#13ce66" inactive-color="#ff4949">
</el-switch>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="typeId" label="场地类型">
<el-select v-model="formData.typeId" style="width: 100%" filterable
placeholder="请选择场地类型">
<el-option v-for="item in activityTypeList" :label="item.meetingTypeName"
:value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="6">
<el-form-item prop="state" label="开启状态">
<el-radio-group v-model="formData.state" size="medium">
<el-radio-button :label="true">开启</el-radio-button>
<el-radio-button :label="false">禁用</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="state" label="是否多次预约">
<el-radio-group v-model="formData.multiple" size="medium">
<el-radio-button :label="true">允许</el-radio-button>
<el-radio-button :label="false">不允许</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>
<!--<el-col :span="4">
<el-form-item prop="state" label="限定工作日预约">
<el-switch v-model="formData.workday" active-color="#13ce66" inactive-color="#ff4949">
</el-switch>
</el-form-item>
</el-col>-->
<el-col :span="12">
<el-form-item prop="typeId" label="场地类型">
<el-select v-model="formData.typeId" style="width: 100%" filterable
placeholder="请选择场地类型">
<el-option v-for="item in activityTypeList" :label="item.meetingTypeName"
:value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="sexLimit" label="性别限制">
<el-radio-group v-model="formData.sexLimit" size="medium">
<el-radio-button label="0">不限制</el-radio-button>
<el-radio-button label="1">男</el-radio-button>
<el-radio-button label="2">女</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="sexLimit" label="性别限制">
<el-radio-group v-model="formData.sexLimit" size="medium">
<el-radio-button label="0">不限制</el-radio-button>
<el-radio-button label="1">男</el-radio-button>
<el-radio-button label="2">女</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="openWeekTime" label="预约时间">
<el-select v-model="formData.openWeekTime" style="width: 100%" filterable
placeholder="请选择预约时间" multiple>
<el-option label="周一" :value="1"></el-option>
<el-option label="周二" :value="2"></el-option>
<el-option label="周三" :value="3"></el-option>
<el-option label="周四" :value="4"></el-option>
<el-option label="周五" :value="5"></el-option>
<el-option label="周六" :value="6"></el-option>
<el-option label="周日" :value="0"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<vi-title2 title="添加场次">
<template #func>
<el-button type="primary" @click="formData.open_hours.push({})">
添加
</el-button>
</template>
</vi-title2>
<el-table :data="formData.open_hours" border size="mini">
<el-table-column prop="start_time" label="开始时间" align="center" header-align="center">
<template slot-scope="{row}">
<el-time-select
placeholder="开始时间"
v-model="row.start_time"
:picker-options="{ start: '00:00',step: '00:30',end: '24:00'}">
</el-time-select>
</template>
</el-table-column>
<el-form-item label="添加场次&emsp;" label-width="110px" class="view-header">
<el-button style="float: right;margin-bottom: 10px" icon="el-icon-plus" size="mini"
type="primary" @click="formData.open_hours.push({})">添加
</el-button>
<el-table-column prop="end_time" label="结束时间" align="center" header-align="center">
<template slot-scope="{row}">
<el-time-select
placeholder="结束时间"
v-model="row.end_time"
:picker-options="{start: '00:00',step: '00:30',end: '24:00',minTime: row.start_time }">
</el-time-select>
</template>
</el-table-column>
<el-table :data="formData.open_hours" border size="mini">
<el-table-column prop="start_time" label="开始时间" align="center" header-align="center">
<template slot-scope="{row}">
<el-time-select
placeholder="开始时间"
v-model="row.start_time"
:picker-options="{ start: '00:00',step: '00:30',end: '24:00'}">
</el-time-select>
</template>
</el-table-column>
<el-table-column label="操作" align="center" header-align="center" width="100px">
<template slot-scope="scope">
<el-button type="danger" icon="el-icon-delete" circle
:disabled="formData.open_hours.length==0"
@click="formData.open_hours.splice(scope.$index, 1)"></el-button>
</template>
</el-table-column>
<el-table-column prop="end_time" label="结束时间" align="center" header-align="center">
<template slot-scope="{row}">
<el-time-select
placeholder="结束时间"
v-model="row.end_time"
:picker-options="{start: '00:00',step: '00:30',end: '24:00',minTime: row.start_time }">
</el-time-select>
</template>
</el-table-column>
<el-table-column label="操作" align="center" header-align="center" width="100px">
<template slot-scope="scope">
<el-button type="danger" icon="el-icon-delete" circle
:disabled="formData.open_hours.length==0"
@click="formData.open_hours.splice(scope.$index, 1)"></el-button>
</template>
</el-table-column>
</el-table>
</el-form-item>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button type="primary" :disabled="subDis" @click="operation">确 定</el-button>
</div>
</el-table>
<div style="float: right;margin: 20px 0">
<el-button type="primary" :disabled="subDis" @click="operation">确 定</el-button>
</div>
</template>
@@ -281,6 +296,7 @@ layout("/layouts/platform.html"){
contact_phone: [{required: true, message: '请填写联系电话', trigger: ['blur', 'change']}],
state: [{required: true, message: '请选择开启状态', trigger: ['blur', 'change']}],
typeId: [{required: true, message: '请选择场地类型', trigger: ['blur', 'change']}],
openWeekTime: [{required: true, message: '请选择预约时间', trigger: ['blur', 'change']}],
}
}
},
@@ -319,9 +319,15 @@ layout("/layouts/platform.html"){
您正在预约【<span style="color: #409EFF">{{infoViewData.name}}</span>】活动场地
</div>
<div style="color:#909399;">
开放时间段为:<span v-for="(item,index) in infoViewData.open_hours" style="color: #303133">
<span v-if="infoViewData.workday === true && index === 0">工作日</span>
【{{item.start_time}} - {{item.end_time}}】
<span>开放日期为:</span>
<span style="color: #303133">
{{ infoViewData.openWeedTimeStr }}
</span>
<span>,开放时间段为:</span>
<span v-for="(item, index) in infoViewData.open_hours" style="color: #303133">
<span v-if="infoViewData.workday === true && index === 0">工作日</span>
【{{item.start_time}} - {{item.end_time}}】
</span>
</span>
</div>
</el-col>
@@ -627,9 +633,9 @@ layout("/layouts/platform.html"){
})
if (res.code === 0) {
await this.doSearch()
this.$notify.success({title: '提示', message: '操作成功!'});
this.$message.success(res.msg)
} else {
this.$notify.warning({title: '警告', message: '操作失败!'});
this.$message.warning(res.msg)
}
}).catch(() => {
});
@@ -680,7 +686,8 @@ layout("/layouts/platform.html"){
//判断预约时间是否在小于当前时间 若小于提示用户选择错误
if (mySelectStartTime < moment().format("YYYY-MM-DD HH:mm:ss")) {
this.$notify.warning({title: '警告', message: '您选中的预约时间已超过当前时间,请重新选择!'});
this.$message.warning('您选中的预约时间已超过当前时间,请重新选择')
this.$set(this.formData, 'start_time', '')
this.$set(this.formData, 'end_time', '')
return;
@@ -688,7 +695,7 @@ layout("/layouts/platform.html"){
//判断预约时间是否已被预约 若已预约提示用户选择错误
if (await this.checkReserve(reserve_day, start_time, end_time, site_id) > 0) {
this.$notify.warning({title: '警告', message: '该时段已被预约,请重新选择!'});
this.$message.warning('该时段已被预约,请重新选择')
this.$set(this.formData, 'start_time', '')
this.$set(this.formData, 'end_time', '')
return
@@ -696,7 +703,7 @@ layout("/layouts/platform.html"){
//判断预约时间是否开放 若未开放提示用户选择错误
if (!open_hours.some(v => start_time >= v.start_time && end_time <= v.end_time)) {
this.$notify.warning({title: '警告', message: '您选中预约时间暂未开放,请重新选择!'});
this.$message.warning('您选中预约时间暂未开放,请重新选择')
this.$set(this.formData, 'start_time', '')
this.$set(this.formData, 'end_time', '')
}
@@ -744,7 +751,7 @@ layout("/layouts/platform.html"){
if ("${@shiro.getPrincipalProperty('sex')}" === sex) {
this.openReserve(data)
} else {
this.$notify.warning({title: '警告', message: '抱歉,该场地仅限' + sex + '性会员预约'});
this.$message.warning('抱歉,该场地仅限' + sex + '性会员预约')
}
} else {
this.openReserve(data)
@@ -752,12 +759,19 @@ layout("/layouts/platform.html"){
},
pushDay(data) {
const d = new Date(data.day).getDay()
if (this.textData.workday === true && (d === 0 || d === 6 || this.holidays.includes(data.day))) {
/*if (this.textData.workday === true && (d === 0 || d === 6 || this.holidays.includes(data.day))) {
this.$notify.warning({title: '警告', message: '抱歉,该场地只能预约工作日'});
return
}*/
if(this.infoViewData.openweektime) {
const openWeedTime = JSON.parse(this.infoViewData.openweektime)
if(!openWeedTime.includes(d)) {
this.$message.warning('该场地只能预约' + this.infoViewData.openWeedTimeStr)
return
}
}
if (data.day < moment(new Date()).format('YYYY-MM-DD')) {
this.$notify.warning({title: '警告', message: '你选择的日期已过'});
this.$message.warning('你选择的日期已过')
return
}
if (this.dayArray.includes(data.day)) {
@@ -783,7 +797,7 @@ layout("/layouts/platform.html"){
})
}*/
if (this.dayArray && this.dayArray.length === 0) {
this.$notify.warning({title: '警告', message: '请选择预约日期!'});
this.$message.warning('请选择预约日期')
return
}
@@ -830,7 +844,7 @@ layout("/layouts/platform.html"){
if (op === 2) {
const res = await $.post(location.href + "/isCanRollBack", {id: id});
if (res === true) {
this.$notify.warning({title: '警告', message: '此预约状态下不能进行撤回操作!'});
this.$message.warning('此预约状态下不能进行撤回操作')
return
}
}
@@ -858,7 +872,7 @@ layout("/layouts/platform.html"){
},
async doAdd() {
if (!this.formData.time) {
this.$notify.warning({title: '警告', message: '未选择预约时间!'});
this.$message.warning('未选择预约时间')
return
}
const s = this.formData.time.split('-')[0]
@@ -867,11 +881,11 @@ layout("/layouts/platform.html"){
return x.start_time === s && x.end_time === e
})
if (t && t.disabled === true) {
this.$notify.warning({title: '警告', message: '该时间段已约满!'});
this.$message.warning('该时间段已约满')
return
}
if (moment().unix() >= moment(this.formData.reserve_day + ' ' + e + ':00').unix()) {
this.$notify.warning({title: '警告', message: '您预约的时间段已过!'});
this.$message.warning('您预约的时间段已过')
return
}
this.$refs["addForm"].validate(async (valid) => {
@@ -894,7 +908,7 @@ layout("/layouts/platform.html"){
this.pageData()
this.$refs.guava.index()
} else {
this.$notify.warning({title: '警告', message: msg});
this.$message.warning(msg)
}
loading.close()
this.subDis = false
@@ -918,6 +932,11 @@ layout("/layouts/platform.html"){
})
this.formData.site_id = data.id
this.infoViewData = data
if(this.infoViewData.openweektime) {
const openWeedTime = JSON.parse(this.infoViewData.openweektime)
const weekDays = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"]
this.infoViewData.openWeedTimeStr = openWeedTime.map((day) => weekDays[day]).join(",")
}
this.$refs.guava.edit()
},
async doSearch() {