Commit 022c736e authored by 罗超's avatar 罗超

Merge branch 'master' of http://gitlab.oytour.com/luochao/confucius into master

parents 2d48459d d8089de9
......@@ -12,7 +12,7 @@ export default {
<style>
@import url('~assets/css/font.css');
@import url('//at.alicdn.com/t/font_2077629_v5y4jdrtlx.css');
@import url('//at.alicdn.com/t/font_2077629_006c4joct5c8d.css');
html,
body,
......
......@@ -244,4 +244,16 @@ export function setVisitorReserveStatus(data) {
method: 'post',
data
})
}
/**
* 删除约课数据
* @param {JSON参数} data
*/
export function RemoveVisitorReserve(data) {
return request({
url: '/VisitorReserve/RemoveVisitorReserve',
method: 'post',
data
})
}
\ No newline at end of file
......@@ -47,29 +47,29 @@
<div class="drawerTop">
<div style="display:flex;align-items:center;">
<q-avatar size="md" style="background:#d4dfff;color:#2961FE;font-weight:bold;">
{{setingObj.ClassName.substring(0,1)}}
<template v-if="classObj.ClassName">{{classObj.ClassName.substring(0,1)}}</template>
</q-avatar>
<div class="className">
<div class="classFirst">{{setingObj.ClassName}}</div>
<div style="color:#666666;font-size:12px;">{{setingObj.CourseName}}</div>
<div class="classFirst">{{classObj.ClassName}}</div>
<div style="color:#666666;font-size:12px;">{{classObj.CourseName}}</div>
</div>
<div class="classStatus">{{setingObj.ClassStatusStr}}</div>
<div class="classStatus">{{classObj.ClassStatusStr}}</div>
</div>
</div>
<div style="margin:20px;font-size:12px;">
<div class="row wrap ">
<div class="col-6">
<span class="normalName">老师名称:</span>
<span class="normalInner">{{setingObj.TeacherName}}</span>
<span class="normalInner">{{classObj.TeacherName}}</span>
</div>
<div class="col-6">
<span class="normalName">开班时间:</span>
<span class="normalInner">
<template v-if="setingObj.NewPlanDateTime">
{{setingObj.NewPlanDateTime}}
<template v-if="classObj.NewPlanDateTime">
{{classObj.NewPlanDateTime}}
</template>
<template v-else>
{{setingObj.OpenTime}}
{{classObj.OpenTime}}
</template>
</span>
</div>
......@@ -77,9 +77,9 @@
<div class="row wrap" style="margin-top:20px;">
<div class="col-6" style="display:flex;align-items:center;">
<span class="normalName">课程进度:</span>
<q-linear-progress rounded size="20px" :value="getProgress(setingObj.CompleteProgress,100)"
<q-linear-progress rounded size="20px" :value="getProgress(classObj.CompleteProgress,100)"
style="background-color:#EEEEEF;color:#3FC4FF;display:inline-block;width:30%;margin-right:10px;" />
{{setingObj.CompleteProgress}}%
{{classObj.CompleteProgress}}%
</div>
</div>
</div>
......@@ -110,6 +110,9 @@
</template>
<script>
import {
getClassInfo
} from '../../api/school/index'
import lessForm from '../course/lesson-form';
import recordForm from '../course/record-form';
import classlogForm from '../course/classlog-form';
......@@ -132,15 +135,33 @@
persistent: true,
tabCheck: 'first', //默认选第一个
loading: false,
classObj:{},
}
},
created() {
},
watch: {
setingObj: {
handler(newValue) {
this.queryClassInfo();
},
immediate: true
}
},
mounted() {
// this.queryClassInfo();
},
methods: {
queryClassInfo() {
getClassInfo({
ClassId: this.setingObj.ClassId
}).then(res => {
if (res.Code == 1) {
this.classObj=res.Data;
}
})
},
closeShenheForm() {
this.persistent = false;
this.$emit('close');
......
......@@ -100,6 +100,10 @@
报价单:<span class="order_OfferId" @click="goQuotation(item.OfferId)"
style="font-size:14px;">{{item.OfferId}}</span>
</div>
<div style="margin-top:10px;" v-if="item.VisitorReserveId>0">
预约单号:<span class="order_OfferId" @click="goVisitorReser(item.VisitorReserveId)"
style="font-size:14px;">{{item.VisitorReserveId}}</span>
</div>
<template v-if="item.IsCommissionGive==1">
<div style="color:red" v-if="item.YFCommissionMoney>0">应发提成:{{item.YFCommissionMoney}}</div>
<div style="color:red;cursor: pointer;text-decoration: underline;" @click='gourltx(item.OrderId)'>已发提成:{{item.CommissionMoney}}</div>
......@@ -965,6 +969,12 @@
Id: Id
});
},
//跳转到预约单号
goVisitorReser(Id){
this.OpenNewUrl("/sale/appointManagement", {
Id: Id
});
},
//弹出退课名单
getTkshow(data) {
let Tkshow = false;
......
<style>
.editOrderDrawerTop {
width: 100%;
height: 50px;
display: flex;
justify-content: space-between;
background-color: #f0f5fb;
padding: 5px 10px;
align-items: center;
}
</style>
<!--订单操作-->
<template>
<q-dialog v-model="IsShowEditOrder" maximized full-height seamless position="right">
<q-card style="margin-top:61px;width:500px" class="no-border-radius classinfo_Dialog">
<div class="editOrderDrawerTop">
<div style="display:flex;align-items:center;margin-left:10px;">
<span class="drawer_Span">约课详情</span>
</div>
</div>
<div style="padding:20px 15px;">
<q-input filled stack-label maxlength="100" readonly :dense="false"
v-model="saveObj.VisitorName" class="col-12 q-pb-lg" label="客户名称" />
<q-input filled stack-label maxlength="100" readonly :dense="false"
v-model="saveObj.ClassDateStr" class="col-12 q-pb-lg" label="日期" />
<q-input filled stack-label maxlength="100" readonly :dense="false"
v-model="saveObj.TeacherName" class="col-12 q-pb-lg" label="老师" />
<q-input filled stack-label maxlength="100" readonly :dense="false"
v-model="saveObj.RoomName" class="col-12 q-pb-lg" label="教室" />
<q-input filled stack-label maxlength="100" readonly :dense="false"
v-model="saveObj.OrderId" class="col-12 q-pb-lg" label="订单编号" />
<q-input filled stack-label maxlength="100" readonly :dense="false"
v-model="saveObj.ReserveStatusStr" class="col-12 q-pb-lg" label="状态" />
<q-input filled stack-label :dense="false" readonly v-model="saveObj.ClassContent"
type="textarea" class="col-12 q-pb-lg" label="主讲内容" />
<div style="margin:30px 10px 70px 0;">
<q-btn class="q-mr-md" label="取消" @click="closeEditOrder" />
</div>
</div>
</q-card>
<div class="dialog-out-close" @click="closeEditOrder"
style="height:40px !important;border-top-left-radius: 4px !important;border-bottom-left-radius: 4px !important;">
<q-icon name="iconfont icon-jujue1" size="26px" />
</div>
</q-dialog>
</template>
<script>
export default {
props: {
saveObj: {
type: Object,
default: null,
}
},
data() {
return {
IsShowEditOrder: true
}
},
created() {
},
mounted() {
},
watch: {
},
methods: {
//关闭弹窗
closeEditOrder() {
this.IsShowEditOrder = false;
this.$emit('close')
},
}
}
</script>
......@@ -24,7 +24,8 @@
<div style="margin-bottom:20px;">
<div class="Appoint_Line"></div>预约申请
</div>
<q-input filled v-model="addMsg.ClassDate" class="col-6 q-pb-lg" :rules="[val => !!val || '请选择预约日期']" ref="ClassDate" mask="date" label="预约日期">
<q-input filled v-model="addMsg.ClassDate" class="col-6 q-pb-lg" :rules="[val => !!val || '请选择预约日期']"
ref="ClassDate" mask="date" label="预约日期">
<template v-slot:append>
<q-icon name="event" class="cursor-pointer">
<q-popup-proxy ref="qDateProxy1" transition-show="scale" transition-hide="scale">
......@@ -36,18 +37,26 @@
<div class="Sysuser_Date">
<q-field filled class="q-pb-lg">
  <template v-slot:control>
<el-time-select v-model="addMsg.ClassTime" ref="ClassTime" style="width:100%" :picker-options="{
start: '09:00',
step: '00:15',
end: '21:00'
}" placeholder="预约时间">
<el-time-select v-model="addMsg.ClassTime" ref="ClassTime" style="width:50%" :picker-options="{
start: '09:00',
step: '00:15',
end: '21:00',
maxTime:addMsg.EndTime
}" placeholder="预约开始时间">
</el-time-select>
<el-time-select v-model="addMsg.EndTime" ref="EndTime" style="width:50%" :picker-options="{
start: '09:00',
step: '00:15',
end: '21:00',
minTime:addMsg.ClassTime
}" placeholder="预约结束时间">
</el-time-select>
</template>
</q-field>
</div>
<q-select filled stack-label option-value="Name" option-label="Name"
v-model="addMsg.ClassContent" ref="ClassContent" :options="ContentList" :rules="[val => !!val || '请选择主讲内容']" label="主讲内容" :dense="false"
class="col-6 q-pb-lg" emit-value map-options />
<q-select filled stack-label option-value="Name" option-label="Name" v-model="addMsg.ClassContent"
ref="ClassContent" :options="ContentList" :rules="[val => !!val || '请选择主讲内容']" label="主讲内容" :dense="false"
class="col-6 q-pb-lg" emit-value map-options />
<div style="display:flex;align-items:center;">
<q-select filled stack-label option-value="TId" style="width:90%" option-label="TeacherName"
v-model="addMsg.TeacherId" ref="TeacherId" :options="TeacherList" label="选择教师" :dense="false"
......@@ -100,7 +109,8 @@
Visitor_Id: 0, //访客编号
ReserveClassId: 0, //选中的班级编号
ClassDate: "", //预约日期
ClassTime: "", //预约时间
ClassTime: "", //预约开始时间
EndTime: "", //预约结束时间
TeacherId: 0, //教师编号
ClassRoomId: 0, //教室编号
ClassContent: "", //主讲内容
......@@ -144,7 +154,7 @@
getTeacherDropDownList({}).then(res => {
if (res.Code == 1) {
this.TeacherList = res.Data;
var obj = {
var obj = {
TeacherName: '请选择',
TId: 0
}
......@@ -167,31 +177,55 @@
},
//保存
saveAppointForm() {
if(this.saveObj){
if (this.saveObj) {
this.addMsg.Visitor_Id = this.saveObj.Id;
}
this.$refs.ClassDate.validate();
this.$refs.ClassContent.validate();
if (!this.$refs.ClassDate.hasError && !this.$refs.ClassContent.hasError){
if (this.addMsg.ClassTime == '') {
this.$q.notify({
type: 'negative',
position: "top",
timeout: 2000,
message: '请选择预约开始时间!',
})
return;
}
if(this.addMsg.EndTime == ''){
this.$q.notify({
type: 'negative',
position: "top",
timeout: 2000,
message: '请选择预约结束时间!',
})
return;
}
if (!this.$refs.ClassDate.hasError && !this.$refs.ClassContent.hasError) {
SetVisitorReserve(this.addMsg).then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '数据保存成功!',
position: 'top'
})
this.$emit('success');
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: res.Message,
position: 'top'
})
this.$emit('success');
}else{
this.$q.notify({
type: 'negative',
position: "top",
timeout: 2000,
message: res.Message,
})
}
this.closeAppointForm();
}
})
})
}
},
//子组件选中传值
getchildInfo(obj){
getchildInfo(obj) {
this.addMsg.TeacherId = obj.TeacherId;
this.addMsg.ClassRoomId = obj.ClassRoomId;
this.addMsg.ReserveClassId = obj.ReserveClassId;
......
......@@ -24,11 +24,19 @@
<div class="Sysuser_Date col-6 q-pb-lg">
<q-field filled>
  <template v-slot:control>
<el-time-select v-model="objOption.ClassTime" ref="ClassTime" style="width:100%" :picker-options="{
<el-time-select v-model="objOption.ClassTime" ref="ClassTime" style="width:50%" :picker-options="{
start: '09:00',
step: '00:15',
end: '21:00'
}" placeholder="预约时间">
end: '21:00',
maxTime:objOption.EndTime
}" placeholder="预约开始时间">
</el-time-select>
<el-time-select v-model="objOption.EndTime" ref="EndTime" style="width:50%" :picker-options="{
start: '09:00',
step: '00:15',
end: '21:00',
minTime:objOption.ClassTime
}" placeholder="预约结束时间">
</el-time-select>
</template>
</q-field>
......@@ -36,6 +44,7 @@
<q-select filled stack-label option-value="TId" option-label="TeacherName" v-model="objOption.TeacherId"
ref="TeacherId" :options="TeacherList" label="选择教师" :dense="false" class="col-6 q-pr-lg q-pb-lg" emit-value
map-options />
<q-select filled stack-label option-value="RoomId" option-label="RoomName" v-model="objOption.ClassRoomId"
ref="ClassRoomId" :options="ClassRoomList" label="关联教室" :dense="false" class="col-6 q-pb-lg" emit-value
map-options />
......@@ -78,6 +87,7 @@
TeacherId: "",
ClassDate: "",
ClassTime: "",
EndTime: "",
ClassRoomId: "",
ClassContent: ''
},
......
......@@ -101,7 +101,7 @@
this.msg.ReserveStatus = 3;
}
if (this.ChoiceType == 2) {
this.msg.remark = this.chooseLiudan.toString();
this.msg.Remark = this.chooseLiudan.toString();
}
setVisitorReserveStatus(this.msg).then(res => {
if (res.Code == 1) {
......
......@@ -34,7 +34,7 @@
<template v-slot:top="props">
<q-space />
<div class="page-option">
<q-btn color="accent" size="sm" icon="add" @click="preservation()" ref="addBtn" label="保存规则" />
<q-btn color="accent" size="sm" v-if='isSalerule_preserve == true' @click="preservation()" ref="addBtn" label="保存规则" />
</div>
</template>
<template v-slot:body="props">
......@@ -181,9 +181,18 @@
pageCount: 0,
persistent: false,
listData: {},
isSalerule_preserve:false,
}
},
created() {},
created() {
let userinfo = this.getLocalStorage();
userinfo.ActionMenuList.map(x=>{//判断权限
if(x.FunctionCode == "Salerule_preserve"){//判断是否有保存的权限
this.isSalerule_preserve = true;
return
}
})
},
mounted() {
this.getRuleList(); //获取规则
......
<style>
.Sysuser_Date .el-input__inner {
background: transparent !important;
border: 0 !important;
}
</style>
<template>
<div class="page-body">
<div class="page-search row items-center">
<div class="col row wrap q-mr-lg q-col-gutter-md">
<div class="col-3">
<q-input @input="resetSearch" clearable standout="bg-primary text-white" v-model="msg.VisitorName"
label="客户名称" @clear="resetSearch" maxlength="20" />
</div>
<div class="col-3">
<q-select @input="resetSearch" filled stack-label option-value="TId" option-label="TeacherName"
v-model="msg.TeacherId" :options="TeacherList" emit-value map-options label="老师" clearable />
</div>
<div class="col-3">
<q-select @input="resetSearch" filled stack-label option-value="RoomId" option-label="RoomName"
v-model="msg.ClassRoomId" ref="ClassRoomId" :options="ClassRoomList" label="关联教室" clearable :dense="false"
class="col-6 q-pb-lg" emit-value map-options />
</div>
<div class="col-3">
<q-select @input="resetSearch" filled stack-label option-value="Id" option-label="Name"
v-model="msg.Q_ReserveStatus" ref="Q_ReserveStatus" :options="statusList" label="状态" clearable
:dense="false" class="col-6 q-pb-lg" emit-value map-options />
</div>
<div class="col-4">
<div class="col-4 Sysuser_Date">
<q-field filled>
......@@ -16,28 +41,53 @@
</q-field>
</div>
</div>
<div class="col-3">
<q-select @input="resetSearch" filled option-value="TId" option-label="TeacherName" v-model="msg.TeacherId"
:options="TeacherList" emit-value map-options label="老师" clearable />
</div>
<div class="col-3">
<q-select @input="resetSearch" filled stack-label option-value="RoomId" option-label="RoomName"
v-model="msg.ClassRoomId" ref="ClassRoomId" :options="ClassRoomList" label="关联教室" clearable :dense="false"
class="col-6 q-pb-lg" emit-value map-options />
</div>
</div>
</div>
<q-table :loading="loading" no-data-label="暂无相关数据" flat class="sticky-column-table sticky-right-column-table"
<q-table :pagination="msg" :loading="loading" no-data-label="暂无相关数据" flat class="sticky-column-table sticky-right-column-table"
separator="none" :data="dataList" :columns="columns" row-key="name">
<template v-slot:top="props">
<div class="col-2 q-table__title">约课管理</div>
<q-space />
</template>
<template v-slot:body-cell-OrderId="props">
<q-td :props="props">
<template v-if="props.row.OrderId && props.row.OrderId>0">
<span style="color:blue;cursor:pointer" @click="goOrderStatistics(props.row.OrderId)">{{props.row.OrderId}}</span>
</template>
</q-td>
</template>
<template v-slot:body-cell-ReserveStatusStr="props">
<q-td :props="props">
<template v-if="props.row.ReserveStatus==0">
{{props.row.ReserveStatusStr}}
</template>
<template v-if="props.row.ReserveStatus==1">
<span style="color:green;cursor:pointer;"> {{props.row.ReserveStatusStr}}</span>
</template>
<template v-if="props.row.ReserveStatus==2">
<span style="color:#ff00ff;cursor:pointer;"> {{props.row.ReserveStatusStr}}</span>
  <q-tooltip :offset="[10, 10]">
   {{props.row.Remark}}
 </q-tooltip>
</template>
<template v-if="props.row.ReserveStatus==3">
<span style="color:red;cursor:pointer;"> {{props.row.ReserveStatusStr}}</span>
  <q-tooltip :offset="[10, 10]">
   {{props.row.Remark}}
</q-tooltip>
</template>
</q-td>
</template>
<template v-slot:body-cell-Id="props">
<q-td :props="props">
<q-btn-dropdown flat size="xs" color="dark" label="更多" style="margin-left:10px;">
<q-btn flat size="xs" @click="getDetail(props.row)" icon="iconfont icon-View" color="accent"
style="font-weight:400" label="详情" />
<q-btn flat size="xs" icon="delete" color="negative" style="font-weight:400;" label="删除"
@click="deleteAppoint(props.row)" />
<q-btn-dropdown flat size="xs" color="dark" label="更多" style="margin-left:10px;"
v-if="props.row.ReserveStatus==0">
<q-list>
<q-item clickable v-close-popup @click="ExchangeOrder(props.row)">
<q-item-section>
......@@ -63,14 +113,19 @@
:input="true" @input="changePage" />
</template>
</q-table>
<yuekeForm v-if="isShowYue" :ChoiceType="ChoiceType" :save-obj="visitorItem" @close="closeYuekeForm" @success="refreshPage"></yuekeForm>
<exorderForm v-if="isShowExOrder" :save-obj="visitorItem" @close="closeOrderForm" @success="refreshPage"></exorderForm>
<yuekeForm v-if="isShowYue" :ChoiceType="ChoiceType" :save-obj="visitorItem" @close="closeYuekeForm"
@success="refreshPage"></yuekeForm>
<exorderForm v-if="isShowExOrder" :save-obj="orderObj" @close="closeOrderForm" @success="refreshPage"></exorderForm>
<appodetailForm v-if="isShowDetail" :save-obj="orderObj" @close="closeAppForm"></appodetailForm>
<exorderForm v-if="isShowExOrder" :save-obj="visitorItem" @close="closeOrderForm" @success="refreshPage">
</exorderForm>
</div>
</template>
<script>
import {
queryVisitorReservePage
queryVisitorReservePage,
RemoveVisitorReserve
} from '../../api/scheduling/schedu'
import {
getTeacherDropDownList,
......@@ -78,14 +133,15 @@
} from "../../api/school/index";
import yuekeForm from '../../components/schedul/yueke-form'
import exorderForm from '../../components/schedul/exorder-form'
import appodetailForm from '../../components/schedul/appodetail-form'
export default {
meta: {
title: "约课管理"
},
components: {
yuekeForm,
exorderForm
exorderForm,
appodetailForm
},
data() {
return {
......@@ -97,6 +153,8 @@
EndClassDate: "", //结束日期
TeacherId: "",
ClassRoomId: "",
Q_ReserveStatus: "", //状态
VisitorName: "", //客户名称
},
dataList: [],
loading: false,
......@@ -137,23 +195,50 @@
field: 'ClassContent',
align: 'left'
},
{
name: 'ReserveStatusStr',
label: '状态',
field: 'ReserveStatusStr',
align: 'left'
},
{
name: 'OrderId',
label: '订单编号',
field: 'OrderId',
align: 'left'
},
{
name: 'Id',
label: '操作',
field: 'Id'
}
],
isShowYue:false,
ChoiceType:0,
visitorItem:{},//选中的对象
isShowExOrder:false,
TeacherList: [],
ClassRoomList: [],
statusList: [{
Id: 0,
Name: "跟进中"
},
{
Id: 1,
Name: "成交"
},
{
Id: 2,
Name: "流单"
},
{
Id: 3,
Name: "取消"
},
],
isShowYue: false,
ChoiceType: 0,
visitorItem: {}, //选中的对象
isShowExOrder: false,
orderObj: {},
isShowDetail: false //显示详情
}
},
created() {
......@@ -206,18 +291,61 @@
},
//关闭弹窗
closeYuekeForm() {
this.isShowYue = false
this.isShowYue = false;
},
closeOrderForm() {
this.isShowExOrder = false
this.isShowExOrder = false;
},
closeAppForm() {
this.isShowDetail = false;
},
//刷新页面
refreshPage() {
this.getList();
},
ExchangeOrder(item){
ExchangeOrder(item) {
this.visitorItem = item;
this.isShowExOrder=true;
this.isShowExOrder = true;
},
//查看详情
getDetail(item) {
this.orderObj = item;
this.isShowDetail = true;
},
//跳转到报名统计
goOrderStatistics(id){
this.OpenNewUrl("/sale/orderStatistics", {
OrderId: id
});
},
//删除约课管理
deleteAppoint(item){
let delMsg = {
Id: item.Id
};
this.$q.dialog({
title: '提示信息',
message: '是否确定删除约课信息?',
cancel: true,
persistent: true,
ok: "确定",
cancel: "取消",
}).onOk(() => {
RemoveVisitorReserve(delMsg).then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '删除成功!',
position: 'top'
})
this.getList();
}
})
}).onCancel(() => {
});
}
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment