lion 1 year ago
parent fc4124f788
commit 8f20ea83ad

@ -24,7 +24,7 @@
<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'?'请选择无需预约的学员,不选则全部预约':'请选择学员'"
: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>
@ -304,7 +304,7 @@
})
this.user_options = res.list.data
if(this.user_options.length===0){
this.$Message.warning("当前课程下还没有学员")
this.$Message.warning("当前搜索没有学员")
}
this.loading = false
},

@ -36,10 +36,13 @@
<div>
<span>同行人</span>
<span v-if="submitObj.appointment_accompany&&submitObj.appointment_accompany.length>0">
<template v-for="item in submitObj.appointment_accompany">
{{item.name}},
<span>
<template v-if="submitObj.appointment_accompany&&submitObj.appointment_accompany.length>0">
<template v-for="item in submitObj.appointment_accompany">
{{item.name}},
</template>
</template>
</span>
</div>
<div>
@ -50,17 +53,55 @@
<span>状态</span>
<span>
<template v-for="item in book_status">
<el-tag style="width:auto" :type="item.type" v-if="submitObj.status===item.id">{{item.value}}</el-tag>
<el-tag style="width:auto" :type="item.type"
v-if="submitObj.status===item.id">{{item.value}}</el-tag>
</template>
</span>
</div>
<div v-if="type==='show'">
<span>审核意见</span>
<span>
{{submitObj.reason}}
</span>
</div>
<div v-if="type==='show'">
<span>审核意见</span>
<span>
{{submitObj.reason}}
</span>
<div style="text-align: left;width:800px;margin: 0 auto;">第三方记录</div>
<div style="width:100%">
<xy-table :list="thirdArr" style="width:800px;margin: 0 auto;" :isPage="false" :height="300" :table-item="table_item">
<template v-slot:finally>
<el-table-column align='center' label="预约结果" width="120" header-align="center">
<template slot-scope="scope">
<div v-if="scope.row.finally===1">
成功
</div>
<div v-else>
失败
</div>
</template>
</el-table-column>
</template>
<template v-slot:response_data>
<el-table-column align='center' label="第三方返回数据" width="120" header-align="center">
<template slot-scope="scope">
<div v-if="scope.row.response_data">
<!-- {{JSON.parse(scope.row.response_data).resMsg}} -->
{{JSON.parse(scope.row.response_data)}}
</div>
</template>
</el-table-column>
</template>
<template v-slot:btns>
<el-table-column align='center' label="操作" width="120" header-align="center">
<template slot-scope="scope">
<el-button type="primary" size="small" v-if="scope.row.finally!=1"
@click="sendBook(scope.row.appointment_id)">重新预约</el-button>
</template>
</el-table-column>
</template>
</xy-table>
</div>
</div>
</div>
<div v-if="type=='check'">
<lx-header icon="" text="审核意见" style="margin-bottom: 10px; border: 0px;text-align: left;">
</lx-header>
@ -72,35 +113,9 @@
<el-button type="primary" style='margin:15px;' @click="submit(2)"></el-button>
<el-button type="primary" plain style='margin:15px;' @click="submit(3)"></el-button>
</div>
</div>
<div style="text-align: left;">第三方记录</div>
<div>
<xy-table :list="thirdArr" :isPage="false" :height="300"
:table-item="table_item">
<template v-slot:finally>
<el-table-column align='center' label="预约结果" width="120" header-align="center">
<template slot-scope="scope">
<div v-if="scope.row.finally===1">
成功
</div>
<div v-else>
失败
</div>
</template>
</el-table-column>
</template>
<template v-slot:btns>
<el-table-column align='center' label="操作" width="120" header-align="center">
<template slot-scope="scope">
<el-button type="primary" size="small" v-if="scope.row.finally!=1"
@click="sendBook(scope.row.appointment_id)">重新预约</el-button>
</template>
</el-table-column>
</template>
</xy-table>
</div>
</div>
</div>
</template>
@ -118,7 +133,7 @@
import myMixins from "@/mixin/selectMixin.js";
import {
show,
save,
save,
retry
} from "@/api/book/index.js"
export default {
@ -131,20 +146,27 @@
isShow: false,
type: 'show',
id: '',
submitObj: {},
thirdArr:[],
submitObj: {},
thirdArr: [],
form: {
name: '',
},
table_item:[{
prop:'remark',
label:'预约内容'
},{
prop:'finally',
label:'预约结果'
},{
prop:'created_at',
label:'发送时间'
},
table_item: [{
prop: 'remark',
label: '预约内容',
width: 200
}, {
prop: 'finally',
label: '预约结果',
width: 200
}, {
prop: 'response_data',
label: '第三方返回数据',
width: 200
},{
prop: 'created_at',
label: '发送时间',
width: 200
}]
}
},
@ -160,32 +182,32 @@
this.isShow = false
this.$emit('refresh')
})
},
sendBook(id){
retry({
id:id
}).then(res=>{
this.$message({
type: 'success',
message: '重新发送预约成功'
})
this.getDetail()
})
},
formatHH(val){
if(val){
return this.$moment(val).format("HH:mm:ss")
}else{
return ''
}
sendBook(id) {
retry({
id: id
}).then(res => {
this.$message({
type: 'success',
message: '重新发送预约成功'
})
this.getDetail()
})
},
formatHH(val) {
if (val) {
return this.$moment(val).format("HH:mm:ss")
} else {
return ''
}
},
async getDetail() {
await show({
id: this.id,
show_relation: ['user', 'appointmentAccompany', 'appointmentConfig','third_appointment_logs']
show_relation: ['user', 'appointmentAccompany', 'appointmentConfig', 'third_appointment_logs']
}).then(res => {
this.submitObj = this.base.deepCopy(res, this.submitObj)
this.thirdArr = res.third_appointment_logs?res.third_appointment_logs:[]
this.submitObj = this.base.deepCopy(res, this.submitObj)
this.thirdArr = res.third_appointment_logs ? res.third_appointment_logs : []
})
}
},

@ -11,16 +11,16 @@
<div>
<el-input v-model="select.name" placeholder="请输入姓名"></el-input>
</div>
<div>
<!-- <div>
<el-input v-model="select.course_name" placeholder="请输入课程名称"></el-input>
</div>
</div> -->
<div>
<el-select v-model="select.courses_ing" placeholder="请选择课程状态">
<el-select clearable v-model="select.courses_id" placeholder="请选择课程">
<el-option
v-for="item in course_options"
:key="item.value"
:label="item.label"
:value="item.value">
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</div>
@ -84,7 +84,10 @@
import showCount from './components/showCount.vue';
import {
indexStudy
} from '@/api/student/index.js'
} from '@/api/student/index.js'
import {
index as courseIndex
} from "@/api/course/index.js"
export default {
components: {
addCount,
@ -95,7 +98,7 @@
select: {
name: '',
course_name:'',
courses_ing:1,
courses_id:'',
page: 1,
page_size: 10,
},
@ -137,7 +140,8 @@
}
},
created() {
this.getList()
this.getList()
this.getCourseList()
},
methods: {
pageIndexChange(e) {
@ -148,6 +152,15 @@
this.select.page_size = e
this.select.page = 1
this.getList()
},
async getCourseList() {
const res = await courseIndex({
page: 1,
page_size: 999,
sort_name: 'id',
sort_type: 'DESC',
})
this.course_options = res.data
},
async getList() {
const res = await indexStudy({
@ -155,7 +168,7 @@
page_size: this.select.page_size,
name: this.select.name,
course_name:this.select.course_name,
courses_ing: this.select.courses_ing
courses_id: this.select.courses_id
})
this.list = res.list.data
this.total = res.list.total

@ -177,7 +177,7 @@
page: this.select.page,
page_size: this.select.page_size,
user_name: this.select.user_name,
show_relation: ['user', 'appointmentConfig', 'third_appointment_logs','third_plate_logs'],
show_relation: ['user', 'appointmentConfig', 'third_appointment_logs'],
filter: [{
key: 'date',
op: 'eq',

@ -96,11 +96,13 @@
value: '首页'
}, {
id: 2,
value: '课程'
}, {
id: 3,
value: '公告'
}],
value: '列表'
}
// , {
// id: 3,
// value: ''
// },
],
type_options: [{
id: 1,
value: '小程序'

@ -31,12 +31,25 @@
<span style="color: red;font-weight: bold;padding-right: 4px;"></span>跳转类型
</div>
<div class="xy-table-item-content">
<el-select v-model="form.jump_type" placeholder="请选择跳转类型" clearable style="width: 100%;">
<el-select v-model="form.jump_type" @change="changeType" placeholder="请选择跳转类型" clearable style="width: 100%;">
<el-option v-for="item in type_options" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
</div>
</template>
<template v-slot:course_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>跳转课程
</div>
<div class="xy-table-item-content">
<el-select v-model="form.course_id" :disabled="canSelect" @change="changeCourse" placeholder="请选择跳转课程" clearable style="width: 100%;">
<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:jump_url>
<div class="xy-table-item">
@ -62,11 +75,12 @@
<template v-slot:image_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>图片750*400
<span style="color: red;font-weight: bold;padding-right: 4px;">*</span>封面图690*400
</div>
<div class="xy-table-item-content">
<el-upload :action="action" class='upload-demo' :limit="1" list-type="picture-card" :file-list="imgList"
ref="pictureUpload" :before-upload="beforeUpload" :auto-upload="true" :on-success="uploadSuccess"
accept=".PNG,.jpg,.jpeg,.bmp,.svg"
ref="pictureUpload" :auto-upload="true" :on-success="uploadSuccess"
:on-remove="uploadRemove">
<i class="el-icon-plus"></i>
</el-upload>
@ -82,7 +96,10 @@
import {
show,
save
} from "@/api/info/banners.js"
} from "@/api/info/banners.js"
import {
index as courseIndex
} from "@/api/course/index.js"
export default {
components: {
@ -93,12 +110,15 @@
type: 'add',
action: `${process.env.VUE_APP_UPLOAD_API}`,
id: '',
type_options: [],
position_options: [],
type_options: [],
course_options:[],
position_options: [],
canSelect:false,
form: {
name: '',
position: '',
jump_type: '',
jump_type: '',
course_id:'',
jump_url: '',
sort: 0,
image_id: '',
@ -120,8 +140,49 @@
}
}
},
created() {},
methods: {
created() {
this.getCourseList()
},
methods: {
async getCourseList() {
const res = await courseIndex({
page: 1,
page_size: 999,
sort_name: 'id',
sort_type: 'DESC',
show_relation:['image']
})
this.course_options = res.data
},
changeType(e){
console.log("type",e)
if(e===2){
this.canSelect = true
this.form.course_id = ''
this.form.jump_url = ''
this.form.image_id = ''
this.imgList = []
}else{
this.canSelect = false
}
},
changeCourse(e){
console.log("course",e)
if(e){
this.form.jump_url = "/packages/course/detail?id="+e
this.form.course_id = e
this.course_options.map(item=>{
if(item.id===e){
if(item.image_id){
this.form.image_id = item.image_id
this.imgList = []
this.imgList.push(item.image)
}
}
})
}
},
setOptions(position, type) {
this.position_options = position ? position : []
this.type_options = type ? type : []
@ -146,7 +207,8 @@
uploadRemove(file, fileList) {
this.imgList = fileList
this.form.image_id = ''
},
},
submit() {
if (this.id) {
this.form.id = this.id

@ -106,7 +106,7 @@
async getCourseDetail() {
const res = await show({
id: this.id,
show_relation: ['teacher']
show_relation: ['teacher','type_detail']
})
this.subjectObj = {}
this.subjectObj = this.base.requestToForm(res, this.subjectObj)

@ -76,7 +76,7 @@
<template v-slot:sign_end_date v-if="active===0">
<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>报名截止日期
<span style="color: red;font-weight: bold;padding-right: 4px;">*</span>报名截止日期
</div>
<div class="xy-table-item-content">
<el-date-picker style="width: 100%;" v-model="form.sign_end_date" type="date" value-format="yyyy-MM-dd"
@ -126,14 +126,28 @@
</div>
</div>
</template>
<template v-slot:qun_image_id v-if="active===0 && form.is_fee===0">
<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>群聊二维码400*400
</div>
<div class="xy-table-item-content">
<el-upload :action="action" class='upload-demo' :on-exceed="onExceedQun" :limit="1" list-type="picture-card"
accept=".PNG,.jpg,.jpeg,.bmp,.svg" :file-list="qunList" ref="pictureUpload" :auto-upload="true"
:on-success="uploadSuccessQun" :on-remove="uploadRemoveQun">
<i class="el-icon-plus"></i>
</el-upload>
</div>
</div>
</template>
<template v-slot:image_id v-if="active===0">
<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>课程封面680*380
<span style="color: red;font-weight: bold;padding-right: 4px;"></span>课程封面690*400
</div>
<div class="xy-table-item-content">
<el-upload :action="action" class='upload-demo' :on-exceed="onExceed" :limit="1" list-type="picture-card"
:file-list="imgList" ref="pictureUpload" :before-upload="beforeUpload" :auto-upload="true"
accept=".PNG,.jpg,.jpeg,.bmp,.svg" :file-list="imgList" ref="pictureUpload" :auto-upload="true"
:on-success="uploadSuccess" :on-remove="uploadRemove">
<i class="el-icon-plus"></i>
</el-upload>
@ -251,6 +265,7 @@
showTinymce: false,
courseTypesList: [],
imgList: [],
qunList: [],
publicizeList: [],
form: {
step: '', //
@ -264,6 +279,7 @@
status: 0,
is_arrange: 1,
is_fee: 1,
qun_image_id: '',
image_id: '',
publicize_ids: [],
content: '',
@ -281,11 +297,19 @@
sign_start_date: [{
required: true,
message: '请选择报名开始日期'
}],
sign_end_date: [{
required: true,
message: '请选择报名截止日期'
}],
// image_id: [{
// required: true,
// message: ''
// }],
// }],
qun_image_id: [{
required: true,
message: '请上传群聊二维码'
}],
// content: [{
// required: true,
// message: ''
@ -305,13 +329,13 @@
methods: {
changeType(e) {
if (e == 1) {
this.form.is_arrange = 1
this.form.is_fee = 1
} else {
this.form.is_arrange = 0
this.form.is_fee = 0
}
// if (e == 1) {
// this.form.is_arrange = 1
// this.form.is_fee = 1
// } else {
// this.form.is_arrange = 0
// this.form.is_fee = 0
// }
},
saveContent(e) {
this.form.content = e
@ -349,6 +373,18 @@
this.form.image_id = ''
},
onExceedQun(file, fileList) {
this.$Message.warning("课程封面只需上传一张")
},
uploadSuccessQun(response, file, fileList) {
this.form.qun_image_id = response.id
this.qunList = fileList
},
uploadRemoveQun(file, fileList) {
this.qunList = fileList
this.form.qun_image_id = ''
},
uploadSuccesspublic(response, file, fileList) {
this.publicizeList = fileList
},
@ -415,14 +451,18 @@
getDetail() {
show({
id: this.id,
show_relation: ['image']
show_relation: ['image','qun_image']
}).then(res => {
this.form = this.base.requestToForm(res, this.form)
if (res.image) {
this.imgList.push(res.image)
}
}
if (res.qun_image) {
this.qunList.push(res.qun_image)
}
this.publicizeList = res.publicize
this.form.dateRange = [res.start_date, res.end_date]
this.form.dateRange = res.start_date ? [res.start_date, res.end_date] : ''
this.form.status = res.status ? res.status : 0
this.form.is_arrange = res.is_arrange ? res.is_arrange : 0
this.form.is_fee = res.is_fee ? res.is_fee : 0
@ -470,7 +510,8 @@
} else {
this.id = ''
this.showTinymce = false
this.imgList = []
this.imgList = []
this.qunList = []
this.publicizeList = []
this.active = 0
this.formList = []
@ -485,6 +526,7 @@
status: 0,
is_arrange: 1,
is_fee: 1,
qun_image_id: '',
image_id: '',
publicize_ids: [],
content: '',

@ -1,6 +1,13 @@
<template>
<div>
<el-dialog title="创建报名表单" :visible.sync="dialogVisible" :fullscreen="true" :modal='false'>
<el-dialog title="创建报名表单" :show-close="false" :visible.sync="dialogVisible" :fullscreen="true" :modal='false'>
<template v-slot:title>
<div style="display: flex;align-items: center;justify-content: space-between;font-size: 26px;">
<div>创建报名表单</div>
<div style="cursor: pointer;" @click="dialogVisible = false">X</div>
</div>
</template>
<div style="height: 100%">
<Split v-model="splitL" :min="0.05">
<template #left>
@ -14,9 +21,11 @@
<Split v-model="splitR" :min="0.2">
<template #left>
<div style="height: 100%">
<el-dialog id="template-dialog" :title="'模板表单'"
<el-dialog id="template-dialog" :title="'模板表单'"
:show-close="false"
style="position: relative; inset: 0 0 0 0; height: 100%" width="80%" top="40px" :visible="true"
:modal="false" :append-to-body="false" :modal-append-to-body="false">
:modal="false" :append-to-body="false" :modal-append-to-body="false">
<el-form style="min-height: 200px;display: flex;flex-wrap: wrap;" label-width="80px"
label-position="right" size="small">
<el-divider>基础字段</el-divider>
@ -49,9 +58,9 @@
</el-form>
<div slot="footer">
<div>
<!-- <div>
<el-button type="primary"> </el-button>
</div>
</div> -->
</div>
</el-dialog>
</div>

@ -69,7 +69,7 @@
<template slot-scope="scope">
<el-button type="primary" size="small" @click="showCourse('show',scope.row.id)"></el-button>
<el-button type="primary" size="small" @click="toTxl(scope.row)"></el-button>
<el-button type="primary" size="small" @click="toPay(scope.row)"></el-button>
<el-button v-if="scope.row.is_fee===1" type="primary" size="small" @click="toPay(scope.row)"></el-button>
</template>
</el-table-column>
</template>
@ -143,7 +143,7 @@
}
},
created() {
this.history_date = this.$moment().add(30, 'days').format('YYYY-MM-DD'),
this.history_date = this.$moment().add(-30, 'days').format('YYYY-MM-DD'),
this.getList()
this.getTypes()
@ -195,7 +195,7 @@
value: this.select.dateRange
},{
key: 'end_date',
op: 'gt',
op: 'lt',
value: this.history_date
}]
})
@ -227,7 +227,8 @@
title: row.name,
id: row.id,
date: row.start_date + '至' + row.end_date,
leibie: value
leibie: value,
is_history:true
}
})
},

@ -253,7 +253,8 @@
title: row.name,
id: row.id,
date: row.start_date ? row.start_date + '至' + row.end_date : '',
leibie: value
leibie: value,
is_history:row.course_status===40?true:false
}
})
},

@ -97,11 +97,10 @@
<template v-slot:btns>
<el-table-column align='left' fixed="right" label="操作" width="180" header-align="center">
<template slot-scope="scope">
<el-button type="primary" v-if="scope.row.status>0" size="small"
<el-button type="primary" v-if="scope.row.status>0 && !subjectObj.is_history" size="small"
@click="showDetail('setPosition',scope.row)">设置班委</el-button>
<el-button type="primary" v-if="scope.row.status>0" size="small"
@click="showDetail('checkshow',scope.row)">查看</el-button>
</template>
</el-table-column>
</template>
@ -181,7 +180,8 @@
}, {
prop: 'user.company_name',
label: '公司名称',
align: 'left',
align: 'left',
width: 240,
}, {
prop: 'user.company_position',
label: '职务',

@ -198,7 +198,7 @@
let that = this
this.$store.dispatch('user/loginMsg', this.loginForm).then(() => {
// this.$Message.success("")
this.base.showMessage("登录成功",'success')
// this.base.showMessage("",'success')
this.$router.push({
path: this.redirect || '/dashboard'
})
@ -216,7 +216,7 @@
this.loading = true
this.$store.dispatch('user/login', this.loginForm).then(() => {
// this.$Message.success("")
this.base.showMessage("登录成功",'success')
// this.base.showMessage("",'success')
this.$router.push({
path: this.redirect || '/dashboard'
})

@ -350,14 +350,17 @@
}).then(res => {
this.student_info = res.user
this.sign_result = res
this.form.position = res.position?res.position:''
if(res.data && Array.isArray(res.data)){
res.data.map(item=>{
if(!this.base.isNull(item.value) && item.value.indexOf("/storage/files/")!==-1){
item.submit_files = item.value.split(",")
}
})
}
this.sign_info = res.data
this.sign_info = res.data
}else{
this.sign_info = []
}
this.form.status = res.status?res.status:0
console.log("this.sign_info",this.sign_info)
})

@ -177,7 +177,8 @@
company_industry: '',
is_vip: '',
is_schoolmate: '',
courses_end_date: '',
courses_end_date: '',
education:'',
page: 1,
page_size: 10,
},
@ -280,7 +281,8 @@
company_industry: this.select.company_industry,
is_vip: this.select.is_vip,
courses_end_date: this.select.courses_end_date,
is_schoolmate: this.select.is_schoolmate
is_schoolmate: this.select.is_schoolmate,
education:this.select.education
})
this.list = res.list.data
this.total = res.list.total

@ -162,7 +162,8 @@
company_type: '',
company_industry: '',
is_vip: '',
courses_end_date: '',
courses_end_date: '',
education:'',
page: 1,
page_size: 10,
},
@ -252,7 +253,8 @@
company_type: this.select.company_type,
company_industry: this.select.company_industry,
is_vip: this.select.is_vip,
courses_end_date: this.select.courses_end_date
courses_end_date: this.select.courses_end_date,
education:this.select.education,
})
this.list = res.list.data
this.total = res.list.total
@ -289,6 +291,7 @@
company_industry: this.select.company_industry,
is_vip: this.select.is_vip,
courses_end_date: this.select.courses_end_date,
education:this.select.education,
is_export: 1,
page: 1,
page_size: 999

Loading…
Cancel
Save