You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

374 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div>
<xy-dialog ref="dialog" :width="60" @reset="resetForm" :is-show.sync="isShow" :type="'form'" :title="typeName"
:form="form" @submit="submit" :rules='rules' :okText="type==='editor'?'确定':'预约并通过'">
<template v-slot:course_id v-if="type==='more'">
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: bold;padding-right: 4px;"></span>班级(课程)
</div>
<div class="xy-table-item-content">
<el-select v-model="form.course_id" @change="changeCourse" style="width:100%" placeholder="可选择课程获取学员">
<el-option v-for="item in course_options" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</div>
</div>
</template>
<template v-slot:user_id>
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: bold;padding-right: 4px;">*</span>{{type==='more'?'无需预约人':'预约人'}}
</div>
<div class="xy-table-item-content">
<el-select v-model="form.user_id" @change="changeUser" style="width:100%"
:multiple="type==='more'?true:false" filterable remote reserve-keyword
:allow-create="type==='more'?false:true" :placeholder="type==='more'?'请选择无需预约的学员,不选则全部预约':'请选择学员'"
:remote-method="remoteMethod" :loading="loading">
<el-option v-for="item in user_options" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</div>
</div>
</template>
<template v-slot:name v-if="type==='add'">
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: bold;padding-right: 4px;"></span>非学员预约:
</div>
<div class="xy-table-item-content">
<el-input @change="changeInput" v-model="form.name" placeholder="请输入预约人姓名"></el-input>
</div>
</div>
</template>
<template v-slot:mobile v-if="type==='add'">
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: bold;padding-right: 4px;">*</span>联系方式:
</div>
<div class="xy-table-item-content">
<el-input v-model="form.mobile" placeholder="请输入预约人联系方式"></el-input>
</div>
</div>
</template>
<template v-slot:date>
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: bold;padding-right: 4px;">*</span>预约日期:
</div>
<div class="xy-table-item-content">
<el-date-picker v-model="form.date" type="date" style="width:100%" placeholder="预约日期"
value-format="yyyy-MM-dd" format="yyyy-MM-dd">
</el-date-picker>
</div>
</div>
</template>
<template v-slot:timeRange>
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: bold;padding-right: 4px;">*</span>时间段:
</div>
<div class="xy-table-item-content">
<el-time-picker is-range v-model="form.timeRange" style="width:100%" range-separator="至"
start-placeholder="开始时间" end-placeholder="结束时间" placeholder="选择时间范围" value-format="HH:mm:ss"
format="HH:mm:ss">
</el-time-picker>
</div>
</div>
</template>
<template v-slot:site>
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: bold;padding-right: 4px;">*</span>预约场地:
</div>
<div class="xy-table-item-content">
<el-select v-model="form.site" placeholder="请选择预约场地" clearable style="width:100%">
<el-option v-for="item in site_options" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</div>
</div>
</template>
<template v-slot:content v-if="type==='add'">
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: bold;padding-right: 4px;"></span>预约事项:
</div>
<div class="xy-table-item-content">
<el-input v-model="form.content" placeholder="请输入预约事项" clearable style="width: 100%;"></el-input>
</div>
</div>
</template>
<template v-slot:plate>
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: bold;padding-right: 4px;"></span>车牌:
</div>
<div class="xy-table-item-content">
<el-input v-model="form.plate" placeholder="请输入车牌,多个车牌中间以英文,分隔" clearable style="width: 100%;"></el-input>
</div>
</div>
</template>
<template v-slot:accompany_total v-if="type==='add'">
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: bold;padding-right: 4px;"></span>同行人数:
</div>
<div class="xy-table-item-content">
<el-input v-model="form.accompany_total" type="number" placeholder="请输入同行人数" clearable
style="width: 100%;"></el-input>
</div>
</div>
</template>
<!-- <template v-slot:footerContent>
<Button type="primary" @click="submit">预约并通过</Button>
<Button type="primary" @click="isShow = false">取消</Button>
</template> -->
</xy-dialog>
</div>
</template>
<script>
import myMixins from "@/mixin/selectMixin.js";
import {
show,
save
} from "@/api/book/index.js"
import {
indexStudy
} from '@/api/student/index.js'
import {
index as courseIndex
} from "@/api/course/index.js"
export default {
mixins: [myMixins],
components: {
},
data() {
return {
isShow: false,
type: 'add',
typeName: '手动预约',
id: '',
form: {
course_id: '',
user_id: '',
name: '',
mobile: '',
date: '',
timeRange: '',
start_time: '',
end_time: '',
content: '',
site: '',
plate: '',
accompany_total: 0,
status: 1,
reason: ''
},
loading: false,
user_options: [],
site_options: [],
course_options: [],
rules: {
// user_id: [{
// required: true,
// message: '请选择预约人'
// }],
date: [{
required: true,
message: '请选择预约日期'
}],
mobile: [{
required: true,
message: '请输入联系方式'
}],
timeRange: [{
required: true,
message: '请选择时间段'
}],
site: [{
required: true,
message: '请选择预约场地'
}],
}
}
},
created() {
this.getCourseList()
this.getUserList('')
},
methods: {
submit(status) {
this.form.status = 1
this.form.start_time = this.form.date + " " + this.form.timeRange[0]
this.form.end_time = this.form.date + " " + this.form.timeRange[1]
console.log(this.form)
if (this.type === 'add') {
if (this.base.isNull(this.form.user_id) && this.base.isNull(this.form.name)) {
this.$Message.warning('请选择学员或输入预约人姓名')
return
}
}
if (this.type === 'more') {
let _arr = []
if (this.base.isNull(this.form.user_id)) {
this.user_options.map(item => {
_arr.push(item.id)
})
} else {
_arr = this.user_options.filter(item => !this.form.user_id.includes(item.id))
_arr = _arr.map(item => item.id)
}
console.log("_arr", _arr)
if(_arr.length===0){
this.$Message.warning('当前没有筛选出学员')
return
}
this.form.user_id = _arr.join(",")
}
if (this.type === "editor") {
this.form.status = 0
}
save(this.form).then(res => {
if (res.success < res.total) {
this.$Message.warning(res.err.join("。"))
} else {
this.$message({
type: 'success',
message: '预约成功'
})
}
this.isShow = false
this.$emit('refresh')
})
},
getDetail() {
show({
id: this.id,
show_relation: ['user', 'appointmentConfig']
}).then(res => {
this.form = this.base.requestToForm(res, this.form)
this.form.status = res.status ? res.status : 0
this.form.timeRange = [this.formatHH(res.start_time), this.formatHH(res.end_time)]
})
},
formatHH(val) {
if (val) {
return this.$moment(val).format("HH:mm:ss")
} else {
return ''
}
},
changeUser(e) {
if (e) {
this.form.user_id = e
if (this.type === "add") {
this.user_options.map(item => {
if (item.id === e) {
this.form.mobile = item.mobile
this.form.name = item.name
}
})
}
}
console.log(this.form.user_id, this.form.name)
},
changeInput(e) {
console.log("input", e)
if(e){
this.form.name = e
this.form.user_id = 0
}
console.log(this.form.user_id, this.form.name)
},
remoteMethod(query) {
if (query !== '') {
this.loading = true;
this.getUserList(query)
} else {
this.user_options = [];
}
},
async getUserList(query) {
const res = await indexStudy({
page: 1,
page_size: 99999,
name: query,
course_id: this.form.course_id,
})
this.user_options = res.list.data
if(this.user_options.length===0){
this.$Message.warning("当前课程下还没有学员")
}
this.loading = false
},
changeCourse(e) {
if (e) {
this.form.course_id = e
this.getUserList('')
} else {
this.form.course_id = ''
this.getUserList('')
}
},
async getCourseList() {
const res = await courseIndex({
page: 1,
page_size: 9999
})
this.course_options = res.data
},
resetForm() {
this.form.timeRange = ""
}
},
watch: {
isShow(newVal) {
if (newVal) {
if (this.type === 'editor') {
this.getDetail()
this.typeName = '编辑'
} else if (this.type === 'more') {
this.typeName = '批量预约'
} else {
this.typeName = '手动预约'
}
} else {
this.id = ''
this.type = "add"
this.typeName = '手动预约'
this.course_id = ''
this.$refs['dialog'].reset()
}
},
}
}
</script>
<style scoped lang="scss">
.bookInfo {
&>div {
span {
display: inline-block;
}
span:first-child {
width: 20%;
text-align: right;
}
span:last-child {
width: 80%;
text-align: left;
}
}
}
</style>