Commit 8f2d2ccb authored by 黄奎's avatar 黄奎

新增页面

parent 4629790c
......@@ -397,12 +397,9 @@
} else{
this.OrderMsg.PreferPrice = Number(guestNum * unit_price).toFixed(2) - this.OrderMsg.LessPrice;
}
}
//留学就业订单
if (this.OrderMsg.OrderType == 2) {
console.log("我进来了2");
this.OrderMsg.OldPreferPrice = Number(guestNum * unit_price).toFixed(2);
}
},
......@@ -413,7 +410,6 @@
}).then(res => {
if (res.Code == 1) {
var tempData = res.Data.OrderInfo;
console.log("tempData",tempData);
this.OrderMsg.ClassId = tempData.ClassId;
this.OrderMsg.GuestNum = tempData.GuestNum;
this.OrderMsg.Unit_Price = tempData.Unit_Price;
......
......@@ -208,7 +208,6 @@
},
//编辑试听
editVisitor(obj) {
console.log("reserveObj",obj);
this.reserveObj = obj
this.isShowReserve = true;
},
......@@ -219,8 +218,6 @@
refreshPage() {
this.$emit('success');
},
//删除试听
DeleteVisitorReserve(Id) {
let that = this;
......
......@@ -527,7 +527,6 @@
this.getStudentDorpDown();
this.getGetNeedsList();
this.queryStuTelType();
console.log("this.StudentType",this.StudentType);
if (this.saveObj) {
if (this.saveObj.StuId > 0) {
this.customMsg.StuId = this.saveObj.StuId;
......
......@@ -12,19 +12,13 @@
<div class="row q-mb-md">
<div class="col-10 flex">
<div v-for="(item, index) in stuData.StuList">
<q-chip icon="person" class="primary"
>{{ item.StuName }}
<q-chip icon="person" class="primary">{{ item.StuName }}
<span v-if="item.IsRenewGuest === 1">(续费)</span>
</q-chip>
</div>
</div>
<div class="col-2" v-if="mode == 1">
<q-toggle
v-model="OrderMsg.IsChaBan"
:true-value="1"
:false-value="0"
label="插班报入"
/>
<q-toggle v-model="OrderMsg.IsChaBan" :true-value="1" :false-value="0" label="插班报入" />
</div>
</div>
<!-- 多个约课 -->
......@@ -34,168 +28,50 @@
<span class="q-ml-md text-primary">课程:</span>{{item.CourseName}}
</div>
<div class="col row wrap q-mr-lg q-ml-lg q-col-gutter-md">
<q-input
filled
stack-label
maxlength="3"
:dense="false"
v-model="item.GuestNum"
label="人数"
:rules="[val => !!val || '请填写人数']"
disable
class="col-6 q-py-sm"
/>
<q-input
filled
stack-label
:dense="false"
v-model="item.Class_Price"
:disable="true"
class="col-6 q-py-sm"
label="单价(课程售价)"
style="display:none;"
/>
<q-input filled stack-label maxlength="3" :dense="false" v-model="item.GuestNum" label="人数"
:rules="[val => !!val || '请填写人数']" disable class="col-6 q-py-sm" />
<q-input filled stack-label :dense="false" v-model="item.Class_Price" :disable="true" class="col-6 q-py-sm"
label="单价(课程售价)" style="display:none;" />
<template v-if="modityOrderType == 1">
<q-input
filled
stack-label
:dense="false"
v-model="item.Unit_Price"
:disable="IsShowUpPrice == true ? false : true"
class="col-6 q-py-sm"
label="成交单价"
:rules="[val => !!val || '请填成交单价']"
/>
<q-toggle
v-model="IsShowUpPrice"
label="高于定价收生"
class="q-mb-md"
style="display:none;"
/>
<q-input filled stack-label :dense="false" v-model="item.Unit_Price"
:disable="IsShowUpPrice == true ? false : true" class="col-6 q-py-sm" label="成交单价"
:rules="[val => !!val || '请填成交单价']" />
<q-toggle v-model="IsShowUpPrice" label="高于定价收生" class="q-mb-md" style="display:none;" />
</template>
<template v-if="modityOrderType == 2">
<q-input
filled
stack-label
:dense="false"
v-model="item.Unit_Price"
:disable="true"
class="col-6 q-py-sm"
label="成交单价"
:rules="[val => !!val || '请填成交单价']"
/>
<q-input filled stack-label :dense="false" v-model="item.Unit_Price" :disable="true" class="col-6 q-py-sm"
label="成交单价" :rules="[val => !!val || '请填成交单价']" />
</template>
<q-input
v-if="false"
filled
stack-label
:dense="false"
v-model="item.DiscountMoney"
:disable="true"
class="col-6 q-py-sm"
label="优惠金额"
/>
<q-input v-if="false" filled stack-label :dense="false" v-model="item.DiscountMoney" :disable="true"
class="col-6 q-py-sm" label="优惠金额" />
<template v-if="item.Unit_PriceType==2">
<q-input
filled
stack-label
:dense="false"
type="number"
:min="1"
@input="totalCourseFee(1)"
v-model="item.TotalClassHours"
class="col-6 q-py-sm"
label="总课时数"
/>
<q-input filled stack-label :dense="false" type="number" :min="1" @input="totalCourseFee(1)"
v-model="item.TotalClassHours" class="col-6 q-py-sm" label="总课时数" />
</template>
<q-input
filled
stack-label
:dense="false"
type="number"
:min="0"
@input="totalCourseFee(0)"
v-model="item.TextbookFee"
class="col-6 q-py-sm"
label="课件费"
/>
<q-input
filled
stack-label
:dense="false"
type="number"
:min="0"
@input="totalCourseFee(0)"
v-model="item.CoursewareFee"
class="col-6 q-py-sm"
label="教材费"
/>
<q-input filled stack-label :dense="false" type="number" :min="0" @input="totalCourseFee(0)"
v-model="item.TextbookFee" class="col-6 q-py-sm" label="课件费" />
<q-input filled stack-label :dense="false" type="number" :min="0" @input="totalCourseFee(0)"
v-model="item.CoursewareFee" class="col-6 q-py-sm" label="教材费" />
<template v-if="modityOrderType == 3">
<q-input
filled
min
stack-label
:dense="false"
v-model="item.Unit_Price"
class="col-6 q-py-sm"
label="成交单价"
:rules="[val => !!val || '请填成交单价']"
/>
<q-input filled min stack-label :dense="false" v-model="item.Unit_Price" class="col-6 q-py-sm" label="成交单价"
:rules="[val => !!val || '请填成交单价']" />
</template>
<q-input
filled
stack-label
:disable="modityOrderType != 3"
:dense="false"
maxlength="10"
v-model="item.PreferPrice"
class="col-6 q-py-sm"
label="应收"
/>
<q-select
v-if="mode == 2"
standout="bg-primary text-white"
option-value="SId"
option-label="SName"
v-model="item.ScrollSchoolId"
:options="newSchoolList"
emit-value
map-options
class="col-6 q-py-sm"
label="校区"
/>
<q-select style="display:none;"
:disable="modityOrderType == 2"
standout="bg-primary text-white"
option-value="Id"
option-label="Name"
v-model="item.OrderSource"
:options="SourceEnumList"
emit-value
map-options
class="col-6 q-py-sm"
label="客人来源"
/>
<q-select v-if="false"
:disable="
<q-input filled stack-label :disable="modityOrderType != 3" :dense="false" maxlength="10"
v-model="item.PreferPrice" class="col-6 q-py-sm" label="应收" />
<q-select v-if="mode == 2" standout="bg-primary text-white" option-value="SId" option-label="SName"
v-model="item.ScrollSchoolId" :options="newSchoolList" emit-value map-options class="col-6 q-py-sm"
label="校区" />
<q-select style="display:none;" :disable="modityOrderType == 2" standout="bg-primary text-white"
option-value="Id" option-label="Name" v-model="item.OrderSource" :options="SourceEnumList" emit-value
map-options class="col-6 q-py-sm" label="客人来源" />
<q-select v-if="false" :disable="
modityOrderType == 2 ||
item.JoinType == 3 ||
CourseConsultantDisable
"
v-model="item.CourseConsultantId"
:options="EmployeeList2"
filled
use-input
label="课程顾问"
option-label="EmployeeName"
option-value="Id"
ref="EmployeeName2"
class="col-6 q-py-sm"
emit-value
map-options
@filter="filterFn2"
>
" v-model="item.CourseConsultantId" :options="EmployeeList2" filled use-input label="课程顾问"
option-label="EmployeeName" option-value="Id" ref="EmployeeName2" class="col-6 q-py-sm" emit-value
map-options @filter="filterFn2">
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
......@@ -204,310 +80,102 @@
</q-item>
</template>
</q-select>
<q-input
:disable="modityOrderType == 2"
v-if="item.OrderSource == 3"
filled
stack-label
:dense="false"
maxlength="50"
v-model="item.GeneralOccupation"
class="col-6 q-py-sm"
label="一般同行"
/>
<q-input
:disable="modityOrderType == 2"
v-if="item.OrderSource == 7"
filled
stack-label
:dense="false"
maxlength="50"
v-model="item.EduOccupation"
class="col-6 q-py-sm"
label="教育同行"
/>
<q-input
:disable="modityOrderType == 2"
v-if="item.IsLessPrice == 1"
maxlength="10"
filled
stack-label
:dense="false"
v-model="item.PerLessMoney"
class="col-6 q-py-sm"
label="少价金额(每人)"
:hint="'总少价金额:' + item.PerLessMoney * item.GuestNum"
/>
<q-input
disable
v-if="item.EnterId > 0"
filled
stack-label
v-model="EnterName"
class="col-6 q-py-sm"
label="市场人员"
/>
<q-input
v-if="OrderMsg.HelpEnterId>0"
filled
stack-label
disable
:dense="false"
maxlength="10"
v-model="AssistName"
class="col-6 q-py-sm"
label="协助老师"
/>
<q-input
filled
stack-label
:dense="false"
v-model="item.SaleRemark"
type="textarea"
class="col-12 q-py-sm"
label="备注"
/>
<q-input :disable="modityOrderType == 2" v-if="item.OrderSource == 3" filled stack-label :dense="false"
maxlength="50" v-model="item.GeneralOccupation" class="col-6 q-py-sm" label="一般同行" />
<q-input :disable="modityOrderType == 2" v-if="item.OrderSource == 7" filled stack-label :dense="false"
maxlength="50" v-model="item.EduOccupation" class="col-6 q-py-sm" label="教育同行" />
<q-input :disable="modityOrderType == 2" v-if="item.IsLessPrice == 1" maxlength="10" filled stack-label
:dense="false" v-model="item.PerLessMoney" class="col-6 q-py-sm" label="少价金额(每人)"
:hint="'总少价金额:' + item.PerLessMoney * item.GuestNum" />
<q-input disable v-if="item.EnterId > 0" filled stack-label v-model="EnterName" class="col-6 q-py-sm"
label="市场人员" />
<q-input v-if="OrderMsg.HelpEnterId>0" filled stack-label disable :dense="false" maxlength="10"
v-model="AssistName" class="col-6 q-py-sm" label="协助老师" />
<q-input filled stack-label :dense="false" v-model="item.SaleRemark" type="textarea" class="col-12 q-py-sm"
label="备注" />
</div>
</div>
</div>
<!-- 一个约课、班课 -->
<div v-else class="column items-center">
<div class="col row wrap q-mr-lg q-col-gutter-md">
<q-input
filled
stack-label
maxlength="3"
:dense="false"
@keyup.native="checkInteger(OrderMsg, 'GuestNum')"
v-model="OrderMsg.GuestNum"
@input="calcPrice()"
label="人数"
:rules="[val => !!val || '请填写人数']"
disable
class="col-6 q-py-sm"
/>
<q-input filled stack-label maxlength="3" :dense="false" @keyup.native="checkInteger(OrderMsg, 'GuestNum')"
v-model="OrderMsg.GuestNum" @input="calcPrice()" label="人数" :rules="[val => !!val || '请填写人数']" disable
class="col-6 q-py-sm" />
<template v-if="OrderMsg.IsChaBan == 1">
<q-select
filled
option-value="CourseId"
:disable="modityOrderType == 2"
option-label="CourseName"
ref="CourseId"
v-model="OrderMsg.CourseId"
:options="CourseList"
emit-value
map-options
class="col-6 q-py-sm"
:rules="[val => !!val || '请选择课程']"
label="选择课程"
@input="calcPrice()"
/>
<q-input
filled
stack-label
:dense="false"
v-model="OrderMsg.StartClassHours"
:disable="modityOrderType == 2"
@keyup.native="checkInteger(OrderMsg, 'StartClassHours')"
ref="StartClassHours"
@input="calcPrice()"
class="col-6 q-py-sm"
label="起始课时"
/>
<q-input
filled
v-model="OrderMsg.EffectTime"
ref="EffectTime"
:rules="[val => !!val || '请填生效时间']"
class="col-6 q-py-sm"
:disable="modityOrderType == 2"
mask="date"
label="生效时间"
>
<q-select filled option-value="CourseId" :disable="modityOrderType == 2" option-label="CourseName"
ref="CourseId" v-model="OrderMsg.CourseId" :options="CourseList" emit-value map-options
class="col-6 q-py-sm" :rules="[val => !!val || '请选择课程']" label="选择课程" @input="calcPrice()" />
<q-input filled stack-label :dense="false" v-model="OrderMsg.StartClassHours" :disable="modityOrderType == 2"
@keyup.native="checkInteger(OrderMsg, 'StartClassHours')" ref="StartClassHours" @input="calcPrice()"
class="col-6 q-py-sm" label="起始课时" />
<q-input filled v-model="OrderMsg.EffectTime" ref="EffectTime" :rules="[val => !!val || '请填生效时间']"
class="col-6 q-py-sm" :disable="modityOrderType == 2" 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"
>
<q-date
v-model="OrderMsg.EffectTime"
@input="() => $refs.qDateProxy1.hide()"
/>
<q-popup-proxy ref="qDateProxy1" transition-show="scale" transition-hide="scale">
<q-date v-model="OrderMsg.EffectTime" @input="() => $refs.qDateProxy1.hide()" />
</q-popup-proxy>
</q-icon>
</template>
</q-input>
<q-select
filled
option-value="OrderId"
option-label="CourseName"
class="col-6 q-py-sm"
:disable="modityOrderType == 2"
v-model="OrderMsg.UpOrderId"
:options="beforeOrderList"
emit-value
map-options
label="前置订单"
>
<template
v-slot:option="{
<q-select filled option-value="OrderId" option-label="CourseName" class="col-6 q-py-sm"
:disable="modityOrderType == 2" v-model="OrderMsg.UpOrderId" :options="beforeOrderList" emit-value
map-options label="前置订单">
<template v-slot:option="{
itemProps,
itemEvents,
opt,
selected,
toggleOption
}"
>
}">
<q-item v-bind="itemProps" v-on="itemEvents">
<q-item-section>
<q-item-label
><span style="color:blue">{{ opt.OrderId }}</span>
<q-item-label><span style="color:blue">{{ opt.OrderId }}</span>
{{ opt.CourseName }} {{ opt.ClassName }}
{{ getStudent(opt.GuestList) }}</q-item-label
>
{{ getStudent(opt.GuestList) }}</q-item-label>
</q-item-section>
</q-item>
</template>
</q-select>
</template>
<q-input
filled
stack-label
:dense="false"
v-model="OrderMsg.Class_Price"
:disable="true"
class="col-6 q-py-sm"
label="单价(课程售价)"
style="display:none;"
/>
<q-input filled stack-label :dense="false" v-model="OrderMsg.Class_Price" :disable="true" class="col-6 q-py-sm"
label="单价(课程售价)" style="display:none;" />
<template v-if="modityOrderType == 1">
<q-input
filled
stack-label
:dense="false"
v-model="OrderMsg.Unit_Price"
:disable="IsShowUpPrice == true ? false : true"
@blur="calcPrice()"
class="col-6 q-py-sm"
label="成交单价"
:rules="[val => !!val || '请填成交单价']"
/>
<q-toggle
v-model="IsShowUpPrice"
label="高于定价收生"
class="q-mb-md"
style="display:none;"
/>
<q-input filled stack-label :dense="false" v-model="OrderMsg.Unit_Price"
:disable="IsShowUpPrice == true ? false : true" @blur="calcPrice()" class="col-6 q-py-sm" label="成交单价"
:rules="[val => !!val || '请填成交单价']" />
<q-toggle v-model="IsShowUpPrice" label="高于定价收生" class="q-mb-md" style="display:none;" />
</template>
<template v-if="modityOrderType == 2">
<q-input
filled
stack-label
:dense="false"
v-model="OrderMsg.Unit_Price"
:disable="true"
@input="calcPrice()"
class="col-6 q-py-sm"
label="成交单价"
:rules="[val => !!val || '请填成交单价']"
/>
<q-input filled stack-label :dense="false" v-model="OrderMsg.Unit_Price" :disable="true" @input="calcPrice()"
class="col-6 q-py-sm" label="成交单价" :rules="[val => !!val || '请填成交单价']" />
</template>
<q-input
v-if="false"
filled
stack-label
:dense="false"
v-model="OrderMsg.DiscountMoney"
:disable="true"
class="col-6 q-py-sm"
label="优惠金额"
/>
<q-input v-if="false" filled stack-label :dense="false" v-model="OrderMsg.DiscountMoney" :disable="true"
class="col-6 q-py-sm" label="优惠金额" />
<template v-if="OrderMsg.Unit_PriceType==2">
<q-input
filled
stack-label
:dense="false"
type="number"
:min="1"
@input="oneTotalCourseFee(1)"
v-model="OrderMsg.TotalClassHours"
class="col-6 q-py-sm"
label="总课时数"
/>
<q-input filled stack-label :dense="false" type="number" :min="1" @input="oneTotalCourseFee(1)"
v-model="OrderMsg.TotalClassHours" class="col-6 q-py-sm" label="总课时数" />
</template>
<q-input
filled
stack-label
:dense="false"
type="number"
:min="0"
@input="oneTotalCourseFee(0)"
v-model="OrderMsg.TextbookFee"
class="col-6 q-py-sm"
label="课件费"
/>
<q-input
filled
stack-label
:dense="false"
type="number"
:min="0"
@input="oneTotalCourseFee(0)"
v-model="OrderMsg.CoursewareFee"
class="col-6 q-py-sm"
label="教材费"
/>
<q-input filled stack-label :dense="false" type="number" :min="0" @input="oneTotalCourseFee(0)"
v-model="OrderMsg.TextbookFee" class="col-6 q-py-sm" label="课件费" />
<q-input filled stack-label :dense="false" type="number" :min="0" @input="oneTotalCourseFee(0)"
v-model="OrderMsg.CoursewareFee" class="col-6 q-py-sm" label="教材费" />
<!-- <q-input filled stack-label :dense="false" v-model="OrderMsg.PerDiscountMoney" :disable="true"
class="col-6 q-py-sm" label="优惠金额(每人)" :hint="'总优惠金额:'+(OrderMsg.PerDiscountMoney*OrderMsg.GuestNum)" /> -->
<template v-if="modityOrderType == 3">
<q-input
filled
stack-label
:dense="false"
v-model="OrderMsg.Unit_Price"
@input="calcPrice()"
class="col-6 q-py-sm"
label="成交单价"
:rules="[val => !!val || '请填成交单价']"
/>
<q-input filled stack-label :dense="false" v-model="OrderMsg.Unit_Price" @input="calcPrice()"
class="col-6 q-py-sm" label="成交单价" :rules="[val => !!val || '请填成交单价']" />
</template>
<q-input
filled
stack-label
:disable="modityOrderType != 3"
:dense="false"
maxlength="10"
@keyup.native="checkPrice(OrderMsg, 'PreferPrice')"
v-model="OrderMsg.PreferPrice"
class="col-6 q-py-sm"
label="应收"
/>
<q-select
v-if="mode == 2"
standout="bg-primary text-white"
option-value="SId"
option-label="SName"
v-model="OrderMsg.ScrollSchoolId"
:options="newSchoolList"
emit-value
map-options
class="col-6 q-py-sm"
label="校区"
/>
<q-select style="display:none;"
:disable="modityOrderType == 2"
standout="bg-primary text-white"
option-value="Id"
option-label="Name"
v-model="OrderMsg.OrderSource"
:options="SourceEnumList"
emit-value
map-options
class="col-6 q-py-sm"
label="客人来源"
/>
<q-input filled stack-label :disable="modityOrderType != 3" :dense="false" maxlength="10"
@keyup.native="checkPrice(OrderMsg, 'PreferPrice')" v-model="OrderMsg.PreferPrice" class="col-6 q-py-sm"
label="应收" />
<q-select v-if="mode == 2" standout="bg-primary text-white" option-value="SId" option-label="SName"
v-model="OrderMsg.ScrollSchoolId" :options="newSchoolList" emit-value map-options class="col-6 q-py-sm"
label="校区" />
<q-select style="display:none;" :disable="modityOrderType == 2" standout="bg-primary text-white"
option-value="Id" option-label="Name" v-model="OrderMsg.OrderSource" :options="SourceEnumList" emit-value
map-options class="col-6 q-py-sm" label="客人来源" />
<!-- <q-select
:disable="
modityOrderType == 2 || OrderMsg.JoinType == 3 || HelpEnterDisable
......@@ -533,25 +201,13 @@
</q-item>
</template>
</q-select> -->
<q-select v-if="false"
:disable="
<q-select v-if="false" :disable="
modityOrderType == 2 ||
OrderMsg.JoinType == 3 ||
CourseConsultantDisable
"
v-model="OrderMsg.CourseConsultantId"
:options="EmployeeList2"
filled
use-input
label="课程顾问"
option-label="EmployeeName"
option-value="Id"
ref="EmployeeName2"
class="col-6 q-py-sm"
emit-value
map-options
@filter="filterFn2"
>
" v-model="OrderMsg.CourseConsultantId" :options="EmployeeList2" filled use-input label="课程顾问"
option-label="EmployeeName" option-value="Id" ref="EmployeeName2" class="col-6 q-py-sm" emit-value map-options
@filter="filterFn2">
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
......@@ -560,81 +216,27 @@
</q-item>
</template>
</q-select>
<q-input
:disable="modityOrderType == 2"
v-if="OrderMsg.OrderSource == 3"
filled
stack-label
:dense="false"
maxlength="50"
v-model="OrderMsg.GeneralOccupation"
class="col-6 q-py-sm"
label="一般同行"
/>
<q-input
:disable="modityOrderType == 2"
v-if="OrderMsg.OrderSource == 7"
filled
stack-label
:dense="false"
maxlength="50"
v-model="OrderMsg.EduOccupation"
class="col-6 q-py-sm"
label="教育同行"
/>
<q-input :disable="modityOrderType == 2" v-if="OrderMsg.OrderSource == 3" filled stack-label :dense="false"
maxlength="50" v-model="OrderMsg.GeneralOccupation" class="col-6 q-py-sm" label="一般同行" />
<q-input :disable="modityOrderType == 2" v-if="OrderMsg.OrderSource == 7" filled stack-label :dense="false"
maxlength="50" v-model="OrderMsg.EduOccupation" class="col-6 q-py-sm" label="教育同行" />
<!-- <q-toggle :disable="(modityOrderType==2)" v-model="OrderMsg.IsLessPrice" :false-value="0" :true-value="1"
label="是否少价" class="q-mb-md" /> -->
<q-input
:disable="modityOrderType == 2"
v-if="OrderMsg.IsLessPrice == 1"
@input="calcPrice()"
@keyup.native="checkPrice(OrderMsg, 'PerLessMoney')"
maxlength="10"
filled
stack-label
:dense="false"
v-model="OrderMsg.PerLessMoney"
class="col-6 q-py-sm"
label="少价金额(每人)"
:hint="'总少价金额:' + OrderMsg.PerLessMoney * OrderMsg.GuestNum"
/>
<q-input
disable
v-if="OrderMsg.EnterId > 0"
filled
stack-label
v-model="EnterName"
class="col-6 q-py-sm"
label="市场人员"
/>
<q-input
v-if="OrderMsg.HelpEnterId>0"
filled
stack-label
disable
:dense="false"
maxlength="10"
v-model="AssistName"
class="col-6 q-py-sm"
label="协助老师"
/>
<q-input
filled
stack-label
:dense="false"
v-model="OrderMsg.SaleRemark"
type="textarea"
class="col-12 q-py-sm"
label="备注"
/>
<q-input :disable="modityOrderType == 2" v-if="OrderMsg.IsLessPrice == 1" @input="calcPrice()"
@keyup.native="checkPrice(OrderMsg, 'PerLessMoney')" maxlength="10" filled stack-label :dense="false"
v-model="OrderMsg.PerLessMoney" class="col-6 q-py-sm" label="少价金额(每人)"
:hint="'总少价金额:' + OrderMsg.PerLessMoney * OrderMsg.GuestNum" />
<q-input disable v-if="OrderMsg.EnterId > 0" filled stack-label v-model="EnterName" class="col-6 q-py-sm"
label="市场人员" />
<q-input v-if="OrderMsg.HelpEnterId>0" filled stack-label disable :dense="false" maxlength="10"
v-model="AssistName" class="col-6 q-py-sm" label="协助老师" />
<q-input filled stack-label :dense="false" v-model="OrderMsg.SaleRemark" type="textarea" class="col-12 q-py-sm"
label="备注" />
</div>
</div>
<div
class="dialog-out-close"
@click="closeEditOrder"
style="height:40px !important;border-top-left-radius: 4px !important;border-bottom-left-radius: 4px !important;"
>
<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 v-model="inception">
......@@ -649,30 +251,28 @@
<q-card-actions align="right" class="text-primary">
<q-btn flat label="取消" size="sm" v-close-popup />
<q-btn
label="立即查看"
size="sm"
color="accent q-px-md"
style="font-weight:400 !important"
@click="goorder"
/>
<q-btn label="立即查看" size="sm" color="accent q-px-md" style="font-weight:400 !important" @click="goorder" />
</q-card-actions>
</q-card>
</q-dialog>
</div>
</template>
<script>
import {
import {
getClassOrderInfo, //获取订单操作日志列表
getOrderSourceEnumList, //获取订单来源 枚举
setClassOrder, //修改订单
SetClassOrderBatch, //多个约课订单
queryChaClassInfo,
GetSelectClassOrderList //获取前置下拉
} from "../../../../api/sale/sale";
import { GetStudentAssistList } from "../../../../api/sale/sale"; //获取协助人员
import { queryEmployee } from "../../../../api/users/user"; //获取员工
export default {
} from "../../../../api/sale/sale";
import {
GetStudentAssistList
} from "../../../../api/sale/sale"; //获取协助人员
import {
queryEmployee
} from "../../../../api/users/user"; //获取员工
export default {
props: {
saveObj: {
type: Object,
......@@ -709,8 +309,8 @@ export default {
},
data() {
return {
courseInformationList:[],//存储多个课程
AssistName:"",//协助老师名称
courseInformationList: [], //存储多个课程
AssistName: "", //协助老师名称
IsShowEditOrder: true,
OrderMsg: {
ClassId: 0, //班级编号
......@@ -722,10 +322,10 @@ export default {
OrderSource: 0,
SaleRemark: "",
Class_Price: 0, //单价
Unit_PriceType:1,//价格类型:1-总课时费,2-课时单价 2024-08-26 add by:W
TotalClassHours:0,//总课时数 2024-08-26 add by:W
CoursewareFee:0,//教材费
TextbookFee:0,//课件费
Unit_PriceType: 1, //价格类型:1-总课时费,2-课时单价 2024-08-26 add by:W
TotalClassHours: 0, //总课时数 2024-08-26 add by:W
CoursewareFee: 0, //教材费
TextbookFee: 0, //课件费
OrderId: 0,
OrderType: 0, //订单类型(1-班级课程订单,2-留学就业订单)
SourceId: 0, //来源编号
......@@ -803,15 +403,14 @@ export default {
this.EnterName = this.stuData.EnterName;
// 判断是否续费协助老师赋值
if (this.stuData.StuList[0].IsRenewGuest!=1){
if (this.stuData.StuList[0].IsRenewGuest != 1) {
this.OrderMsg.HelpEnterId = this.stuData.StuList[0].STTeacherId;
this.AssistName = this.stuData.StuList[0].STTeacherName
}
console.log("this.selectedCourseList",this.selectedCourseList);
if(this.selectedCourseList.length>1){
if (this.selectedCourseList.length > 1) {
this.selectedCourseList.forEach(item => {
let dataObj = {
CourseName: "",//课程名称
CourseName: "", //课程名称
ClassId: 0, //班级编号
GuestNum: 1, //人数
B2CRatio: 0,
......@@ -821,10 +420,10 @@ export default {
OrderSource: 0,
SaleRemark: "",
Class_Price: 0, //单价
Unit_PriceType:1,//价格类型:1-总课时费,2-课时单价 2024-08-26 add by:W
TotalClassHours:0,//总课时数 2024-08-26 add by:W
CoursewareFee:0,//教材费
TextbookFee:0,//课件费
Unit_PriceType: 1, //价格类型:1-总课时费,2-课时单价 2024-08-26 add by:W
TotalClassHours: 0, //总课时数 2024-08-26 add by:W
CoursewareFee: 0, //教材费
TextbookFee: 0, //课件费
OrderId: 0,
OrderType: 0, //订单类型(1-班级课程订单,2-留学就业订单)
SourceId: 0, //来源编号
......@@ -852,9 +451,9 @@ export default {
// NormalCommission:'',//正常返佣金额
// RenewCommission:"",// 预计返佣金额
ScrollSchoolId: -1,
OrderType:1
OrderType: 1
}
if(item.CourseName){
if (item.CourseName) {
dataObj.CourseName = item.CourseName
}
if (item.ClassId) {
......@@ -907,19 +506,21 @@ export default {
methods: {
//单个课程计算
oneTotalCourseFee(type){
if(this.OrderMsg.Unit_PriceType==2){
if(type==1){
this.OrderMsg.TextbookFee=Number((this.OrderMsg.TotalClassHours*this.OrderMsg.Unit_Price*this.OrderMsg.GuestNum)*(20/100)).toFixed(2);
oneTotalCourseFee(type) {
if (this.OrderMsg.Unit_PriceType == 2) {
if (type == 1) {
this.OrderMsg.TextbookFee = Number((this.OrderMsg.TotalClassHours * this.OrderMsg.Unit_Price * this.OrderMsg
.GuestNum) * (20 / 100)).toFixed(2);
}
this.OrderMsg.PreferPrice = this.OrderMsg.GuestNum*this.OrderMsg.Unit_Price*this.OrderMsg.TotalClassHours+Number(this.OrderMsg.TextbookFee)+Number(this.OrderMsg.CoursewareFee)
this.OrderMsg.PreferPrice = this.OrderMsg.GuestNum * this.OrderMsg.Unit_Price * this.OrderMsg
.TotalClassHours + Number(this.OrderMsg.TextbookFee) + Number(this.OrderMsg.CoursewareFee)
}
},
// 多个课程计算
totalCourseFee(type){
this.courseInformationList.forEach((item)=>{
if(this.stuData.StuList[0].IsRenewGuest==1){
totalCourseFee(type) {
this.courseInformationList.forEach((item) => {
if (this.stuData.StuList[0].IsRenewGuest == 1) {
item.DiscountMoney = this.accAdd(
item.DiscountMoney,
this.accMul(
......@@ -927,27 +528,29 @@ export default {
item.B2CReNewRatio / 100
)
);
if(item.Unit_PriceType==1){
item.PreferPrice = item.GuestNum*item.Unit_Price
if (item.Unit_PriceType == 1) {
item.PreferPrice = item.GuestNum * item.Unit_Price
} else if (item.Unit_PriceType == 2) {
if (type == 1) {
item.TextbookFee = Number((item.TotalClassHours * item.Unit_Price * item.GuestNum) * (20 / 100))
.toFixed(2);
}
else if(item.Unit_PriceType==2){
if(type==1){
item.TextbookFee=Number((item.TotalClassHours*item.Unit_Price*item.GuestNum)*(20/100)).toFixed(2);
}
item.PreferPrice = (item.GuestNum*item.Unit_Price*item.TotalClassHours)+Number(item.TextbookFee)+Number(item.CoursewareFee)
item.PreferPrice = (item.GuestNum * item.Unit_Price * item.TotalClassHours) + Number(item
.TextbookFee) + Number(item.CoursewareFee)
}
}else{
} else {
item.DiscountMoney = this.accAdd(
item.DiscountMoney,
this.accMul(item.Class_Price, item.B2CRatio / 100)
);
if(item.Unit_PriceType==1){
item.PreferPrice = item.GuestNum*item.Unit_Price
}
else if(item.Unit_PriceType==2){
item.TextbookFee=Number((item.TotalClassHours*item.Unit_Price*item.GuestNum)*(20/100)).toFixed(2);
item.PreferPrice = item.GuestNum*item.Unit_Price*item.TotalClassHours+Number(item.TextbookFee)+Number(item.CoursewareFee)
if (item.Unit_PriceType == 1) {
item.PreferPrice = item.GuestNum * item.Unit_Price
} else if (item.Unit_PriceType == 2) {
item.TextbookFee = Number((item.TotalClassHours * item.Unit_Price * item.GuestNum) * (20 / 100))
.toFixed(2);
item.PreferPrice = item.GuestNum * item.Unit_Price * item.TotalClassHours + Number(item.TextbookFee) +
Number(item.CoursewareFee)
}
//item.PreferPrice = item.GuestNum*item.Unit_Price
}
......@@ -956,11 +559,13 @@ export default {
//获取协助人员
getAssistList() {
const ids = this.stuData.StuList.map(e => e.StuId).toString();
GetStudentAssistList({ StuId: ids }).then(res => {
GetStudentAssistList({
StuId: ids
}).then(res => {
if (res.Code == 1) {
res.Data.map(e => {
if (e.AssistType == 4) {
if(this.stuData.StuList[0].IsRenewGuest==1){
if (this.stuData.StuList[0].IsRenewGuest == 1) {
this.OrderMsg.HelpEnterId = e.AssistId;
this.AssistName = e.AssistName
}
......@@ -969,8 +574,8 @@ export default {
if (e.AssistType == 2) {
this.OrderMsg.CourseConsultantId = e.AssistId;
this.CourseConsultantDisable = true;
if(this.selectedCourseList.length>1){
this.courseInformationList.forEach(item=>{
if (this.selectedCourseList.length > 1) {
this.courseInformationList.forEach(item => {
return item.CourseConsultantId = e.AssistId
})
}
......@@ -990,8 +595,7 @@ export default {
queryChaClassInfo(qMsg).then(res => {
if (res.Code == 1) {
this.CourseList = res.Data.otherCourse;
if (this.saveObj && this.saveObj.OrderId > 0) {
} else {
if (this.saveObj && this.saveObj.OrderId > 0) {} else {
this.OrderMsg.StartClassHours = res.Data.finishHours;
}
if (this.OrderMsg && this.OrderMsg.CourseId) {
......@@ -1010,8 +614,9 @@ export default {
if (this.OrderMsg.GuestNum && this.OrderMsg.GuestNum > 0) {
guestNum = Number(this.OrderMsg.GuestNum);
}
if(this.saveObj.SellPriceType==2){
this.OrderMsg.TextbookFee=((Number(this.OrderMsg.TotalClassHours) * Number(this.OrderMsg.Unit_Price) * Number(this.OrderMsg.GuestNum)) * (20/100)).toFixed(2);
if (this.saveObj.SellPriceType == 2) {
this.OrderMsg.TextbookFee = ((Number(this.OrderMsg.TotalClassHours) * Number(this.OrderMsg.Unit_Price) *
Number(this.OrderMsg.GuestNum)) * (20 / 100)).toFixed(2);
}
let temp = this.CourseList.find(
x => x.CourseId == this.OrderMsg.CourseId
......@@ -1105,24 +710,23 @@ export default {
this.courseObj.CourseId &&
this.courseObj.CourseId > 0
) {
if(this.OrderMsg.Unit_PriceType==1){
newPreferPrice= chaBanPrice * guestNum
}
else if(this.OrderMsg.Unit_PriceType==2){
newPreferPrice = chaBanPrice * guestNum*this.OrderMsg.TotalClassHours
if (this.OrderMsg.Unit_PriceType == 1) {
newPreferPrice = chaBanPrice * guestNum
} else if (this.OrderMsg.Unit_PriceType == 2) {
newPreferPrice = chaBanPrice * guestNum * this.OrderMsg.TotalClassHours
}
}
this.OrderMsg.PreferPrice =
Number(newPreferPrice).toFixed(2) - this.OrderMsg.LessPrice;
} else {
if(this.OrderMsg.Unit_PriceType==1){
if (this.OrderMsg.Unit_PriceType == 1) {
this.OrderMsg.PreferPrice =
Number(guestNum * unit_price).toFixed(2) - this.OrderMsg.LessPrice ;
}
else if(this.OrderMsg.Unit_PriceType==2){
Number(guestNum * unit_price).toFixed(2) - this.OrderMsg.LessPrice;
} else if (this.OrderMsg.Unit_PriceType == 2) {
this.OrderMsg.PreferPrice =
Number((guestNum * unit_price*this.OrderMsg.TotalClassHours)+Number(this.OrderMsg.TextbookFee)+Number(this.OrderMsg.CoursewareFee)).toFixed(2) - this.OrderMsg.LessPrice;
Number((guestNum * unit_price * this.OrderMsg.TotalClassHours) + Number(this.OrderMsg.TextbookFee) +
Number(this.OrderMsg.CoursewareFee)).toFixed(2) - this.OrderMsg.LessPrice;
}
}
//留学就业订单
......@@ -1177,7 +781,6 @@ export default {
if (this.OrderMsg.OrderType == 2) {
this.OrderMsg.OrderNature = 1;
}
console.log("saveObj",this.saveObj);
if (this.saveObj) {
if (this.saveObj.ClassId) {
this.OrderMsg.ClassId = this.saveObj.ClassId;
......@@ -1214,7 +817,7 @@ export default {
if (this.saveObj.B2CReNewRatio) {
this.OrderMsg.B2CReNewRatio = this.saveObj.B2CReNewRatio;
}
if(this.selectedCourseList.length>1){
if (this.selectedCourseList.length > 1) {
return
}
......@@ -1301,8 +904,8 @@ export default {
var tempArray = res.Data;
this.SourceEnumList = tempArray;
this.OrderMsg.OrderSource = tempArray[0].Id;
if(this.selectedCourseList.length>0){
this.courseInformationList.forEach(item=>{
if (this.selectedCourseList.length > 0) {
this.courseInformationList.forEach(item => {
return item.OrderSource = this.OrderMsg.OrderSource
})
}
......@@ -1311,16 +914,16 @@ export default {
},
//修改订单
saveOrderInfo() {
if(this.selectedCourseList.length>1){
if (this.selectedCourseList.length > 1) {
this.multipleAppointmentsFun()
}else{
} else {
this.singleAppointmentsFun()
}
},
// 多个约课
multipleAppointmentsFun(){
multipleAppointmentsFun() {
//插班验证课程和生效时间
this.courseInformationList.forEach(item=>{
this.courseInformationList.forEach(item => {
item.StuIds = this.stuData.StuList.map(e => e.StuId).toString();
item.HelpEnterId = this.OrderMsg.HelpEnterId
item.CustomerId = this.stuData.CustomerId;
......@@ -1359,7 +962,7 @@ export default {
});
},
// 单个班课、约课
singleAppointmentsFun(){
singleAppointmentsFun() {
//插班验证课程和生效时间
if (this.OrderMsg.IsChaBan == 1) {
this.$refs.CourseId.validate();
......@@ -1444,5 +1047,6 @@ export default {
return str;
}
}
};
};
</script>
......@@ -744,34 +744,24 @@
newPreferPrice = chaBanPrice * guestNum * this.OrderMsg.TotalClassHours
}
}
console.log("我进来了1");
this.OrderMsg.PreferPrice =
Number(newPreferPrice).toFixed(2) - this.OrderMsg.LessPrice;
} else {
if (this.OrderMsg.Unit_PriceType == 1) {
console.log("guestNum", guestNum);
console.log("unit_price", unit_price);
console.log("this.OrderMsg.LessPrice", this.OrderMsg.LessPrice);
this.OrderMsg.PreferPrice =
Number(guestNum * unit_price).toFixed(2) - this.OrderMsg.LessPrice;
console.log("我进来了2");
} else if (this.OrderMsg.Unit_PriceType == 2) {
this.OrderMsg.PreferPrice =
Number((guestNum * unit_price * this.OrderMsg.TotalClassHours) + Number(this.OrderMsg.TextbookFee) +
Number(this.OrderMsg.CoursewareFee)).toFixed(2) - this.OrderMsg.LessPrice;
console.log("我进来了3");
}
}
//留学就业订单
if (this.OrderMsg.OrderType == 2) {
this.OrderMsg.OldPreferPrice = Number(guestNum * unit_price).toFixed(2);
}
this.OrderMsg.DiscountMoney = 0;
this.stuData.StuList.map(e => {
if (e.IsRenewGuest == 0) {
this.OrderMsg.DiscountMoney = this.accAdd(
......@@ -817,7 +807,6 @@
if (this.OrderMsg.OrderType == 2) {
this.OrderMsg.OrderNature = 1;
}
console.log("saveObj", this.saveObj);
if (this.saveObj) {
if (this.saveObj.ClassId) {
this.OrderMsg.ClassId = this.saveObj.ClassId;
......
......@@ -3,7 +3,7 @@
<q-dialog v-model="show" persistent transition-show="scale" transition-hide="scale" @input="changeDig">
<q-card style="width: 800px;max-width:900px;">
<q-card-section class="row items-center q-pb-none">
<div class="text-h6">{{ editType == 1 ? "新增约课" : "详情" }}</div>
<div class="text-h6">{{ editType == 1 ? "新增约课" : "详情" }} editType:{{editType}}</div>
<q-space />
<q-btn icon="close" flat round dense @click="changeDig(false)" />
</q-card-section>
......@@ -19,12 +19,35 @@
<Detail :dateObj="dateObj" :saveObj="saveObj" :auth="auth" :CourseChapterName="CourseChapterName"
@success="detailSuccessHandle" @close="detailCloseHandle" />
</div>
<div class="row col-12 q-col-gutter-md">
<q-select v-show="editType == 1" filled v-model="saveMsg.TeacherId" option-value="TId"
option-label="TeacherName" :options="teacherList" emit-value map-options label="老师" class="col-6" />
<q-select v-show="editType == 1" filled v-model="saveMsg.RoomId" option-value="RoomId"
option-label="RoomName" :options="ClassRoomList" emit-value map-options label="教室"
:disable="addStuList.length > 0" class="col-6">
<template v-slot:selected-item="scope">
<div class="row col-12 flex justify-between">
<span>{{scope.opt.RoomName}}</span><span>{{ scope.opt.SchoolName}}</span></div>
</template>
<template v-slot:option="scope">
<q-item v-bind="scope.itemProps" v-on="scope.itemEvents">
<q-item-section>
<q-item-label class="row flex justify-between">
<span>{{scope.opt.RoomName}}</span><span>{{ scope.opt.SchoolName}}</span></q-item-label>
</q-item-section>
</q-item>
</template>
</q-select>
</div>
<template v-if="editType==1">
<q-select filled v-model="saveMsg.ShiftSort" option-value="Id" option-label="Name"
:options="teacherTimeList" emit-value map-options label="上课时段" class="col-12" />
</template>
<!-- 详情显示内容 end -->
<q-select filled stack-label use-input option-value="CourseId" option-label="CourseName"
v-model="saveMsg.CourseId" ref="CourseId" :options="CourseList" label="课程" :dense="false" class="col-12"
emit-value map-options @filter="filterCourse"
@input="changeCourse(),getChapterTree(),getCanTeacherTimeList() " v-if="editType == 1"
:rules="[val => !!val || '请选择课程']">
emit-value map-options @filter="filterCourse" @input="changeCourse(),getChapterTree() "
v-if="editType == 1" :rules="[val => !!val || '请选择课程']">
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
......@@ -46,61 +69,6 @@
:defaultArray="returnString" nodeKey="ChapterId" labelKey="ChapterName" childrenKey="ChildList"
tipText="章节" @getChild="getChapter" class="col-12" ref="selectTree"></select-tree>
<div class="row col-12 q-col-gutter-md">
<q-select v-show="saveMsg.CourseId > 0 && editType == 1" filled v-model="saveMsg.TeacherId"
option-value="TId" option-label="TeacherName" :options="teacherList" emit-value map-options label="老师"
class="col-6" @input="getCanTeacherTimeList" />
<q-select v-show="saveMsg.CourseId > 0 && editType == 1" filled v-model="saveMsg.RoomId"
option-value="RoomId" option-label="RoomName" :options="ClassRoomList" emit-value map-options label="教室"
:disable="addStuList.length > 0" class="col-6">
<template v-slot:selected-item="scope">
<div class="row col-12 flex justify-between">
<span>{{scope.opt.RoomName}}</span><span>{{ scope.opt.SchoolName}}</span></div>
</template>
<template v-slot:option="scope">
<q-item v-bind="scope.itemProps" v-on="scope.itemEvents">
<q-item-section>
<q-item-label class="row flex justify-between">
<span>{{scope.opt.RoomName}}</span><span>{{ scope.opt.SchoolName}}</span></q-item-label>
</q-item-section>
</q-item>
</template>
</q-select>
</div>
<template v-if="editType==1">
<q-field filled label-slot stack-label class="col-12" v-if="editType==1 ">
<template #label>
<div class="row flex">
上课时段
<span style="color:#f5576c;font-size:13px;margin-left:5px;font-weight:500">(按顺序选择)</span>
<div style="color:#333;font-size:13px;margin-left:10px;font-weight:500">
需选课时:{{ checkChapter.StudyMinutes }}分钟
</div>
</div>
</template>
<template v-slot:control>
<div v-if="teacherTimeList.length > 0">
<div v-for="(item, index) in teacherTimeList" :key="index">
<div v-if="
item.CourseTimeList && item.CourseTimeList.length > 0
">
<div v-for="(_item, _index) in item.CourseTimeList" :key="_index" class="timeItem">
<q-checkbox v-model="courseCheckList" :val="_item">
{{ _item.StartTime }}-{{ _item.EndTime }}
</q-checkbox>
</div>
</div>
<div v-else>
暂无可约课程
</div>
</div>
</div>
<div v-else>
暂无可约课程
</div>
</template>
</q-field>
</template>
<div class="row col-12" v-if="(saveObj&& saveObj.ClassType==3)||editType==1">
<div class="row col-12">
<div class="col-9">
......@@ -130,7 +98,6 @@
</q-select>
</div>
<div class="col-3 q-pt-md q-pl-md">
<q-btn v-if="(saveObj.State==1||saveObj.State==2||editType==1)||currentUser.Id==1" size="sm"
color="accent" label="添加" @click="subscribeCourse" />
</div>
......@@ -175,10 +142,9 @@
{{item.CourseChapterNoName}}
</template>
<template v-else>
<!--@change="changeChapter(item)"-->
<q-select filled stack-label use-input option-value="ChapterGradeNo" option-label="ChapterName"
<q-select filled stack-label use-input option-value="ChapterNo" option-label="ChapterName"
v-model="item.CourseGradeNo" ref="ChapterGradeNo" :options="item.CourseChapterList"
label="消课章节" :dense="false" emit-value map-options class="col-4" >
label="消课章节" :dense="false" emit-value map-options class="col-4">
<template v-slot:option="{ itemProps, itemEvents, opt, }">
<q-item v-bind="itemProps" v-on="itemEvents">
<q-item-section>
......@@ -250,6 +216,9 @@
import {
queryClassRoomList
} from "../../../api/school/index";
import {
queryGetTimeList
} from "../../../api/stuMan/index";
import selectTree from "./select-tree";
import Detail from "./detail.vue";
export default {
......@@ -301,7 +270,6 @@
this.saveMsg.CourseId = 0;
this.saveMsg.TeacherId = 0;
this.chapterList = [];
this.teacherTimeList = [];
this.courseCheckList = [];
this.stuList = [];
this.allStuList = [];
......@@ -326,6 +294,7 @@
this.saveMsg.CourseGradeNo = this.saveObj.Ranks;
this.saveMsg.CourseGradeId = this.saveObj.CourseGradeId;
this.saveMsg.ChapterNo = this.saveObj.ChapterNo;
this.saveMsg.ChooseStuList = [];
if (this.saveObj.GuestList && this.saveObj.GuestList.length > 0) {
this.saveObj.GuestList.forEach(gItem => {
......@@ -390,11 +359,29 @@
this.currentUser = this.getLocalStorage();
this.getCourseList();
this.getClassRoomList();
this.getTimeList();
},
mounted() {
},
methods: {
//获取可约时间段
getTimeList() {
this.teacherTimeList = [];
queryGetTimeList({}).then(res => {
if (res.Code == 1) {
var tempData = res.Data;
if (tempData && tempData.length > 0) {
tempData.forEach(item => {
this.teacherTimeList.push({
Id: item.Sort,
Name: item.StartTime + '~' + item.EndTime,
});
})
}
}
})
},
//获取教室下拉
getClassRoomList() {
queryClassRoomList({}).then(res => {
......@@ -430,7 +417,6 @@
});
},
changeCourse() {
this.saveMsg.TeacherId = 0;
this.checkChapter = {};
this.checkStuList = [];
this.stuInfo = "";
......@@ -449,25 +435,7 @@
}
});
},
//获取老师的空闲上课时段
getCanTeacherTimeList() {
this.saveMsg.Date = this.dateObj.date;
this.courseCheckList = [];
this.stuInfo = "";
var qMsg = {
Date: this.saveMsg.Date,
TeacherId: this.saveMsg.TeacherId,
CourseId: this.saveMsg.CourseId
};
GetCanTeacherClassTimeList(qMsg).then(res => {
this.teacherTimeList = res.Data;
if (res.Data.length > 0) {
this.saveMsg.RoomId = res.Data[0].RoomId;
} else {
this.saveMsg.RoomId = 0;
}
});
},
//筛选学生
filterStu(val, update) {
update(() => {
......@@ -539,11 +507,9 @@
this.saveMsg.ChapterNo = this.checkChapter.ChapterNo;
// HK 2024-09-06 注释,可以不选老师,不选老师就默认通班的时间段
// this.saveMsg.TeacherId = 0;
// this.teacherTimeList = [];
//获取学生列表
this.getStu_V2();
},
//添加学员
subscribeCourse() {
if (this.editType == 1) {
......@@ -586,14 +552,7 @@
})
return;
}
if (this.courseCheckList.length === 0) {
this.$q.notify({
message: "请选择上课时段",
position: "top",
type: "negative"
});
return;
}
if (!this.stuInfo) {
this.$q.notify({
message: "请选择学员",
......@@ -602,54 +561,25 @@
});
return;
}
const totalTime = this.courseCheckList.reduce((pre, cur) => {
return (pre += cur.Minutes);
}, 0);
if (this.checkChapter.StudyMinutes !== totalTime) {
this.$q.notify({
message: "课时不匹配,请重新上课时段",
position: "top",
type: "negative"
});
return;
}
let newCourseCheckList = this.courseCheckList.sort((a, b) => {
return a.Sort - b.Sort;
});
for (let i = 0; i < newCourseCheckList.length; i++) {
if (i > 0) {
const cur = newCourseCheckList[i].Sort;
const pre = newCourseCheckList[i - 1].Sort;
if (cur - pre > 1) {
this.$q.notify({
message: "请按顺序选择上课时段",
position: "top",
type: "negative"
});
return;
}
}
}
this.saveMsg.Date = this.dateObj.date;
this.saveMsg.CourseGradeNo = this.checkChapter.ChapterGradeNo;
this.saveMsg.CourseGradeId = this.checkChapter.CourseRate;
this.saveMsg.ShiftSort = newCourseCheckList.map(e => e.Sort).toString();
}
var sObj = {
StuId: this.stuInfo.StuId,
StuName: this.stuInfo.StuName,
GuestId: this.stuInfo.GuestId,
OrderId:this.stuInfo.OrderId,
OrderId: this.stuInfo.OrderId,
LearnCourseId: this.stuInfo.CourseId,
CourseName: this.stuInfo.CourseName,
FinishChapterNoName: this.stuInfo.FinishChapterNoName,
AppointmentId: 0,
//学员消课编号
CourseChapterList: [],
CourseGradeId : this.checkChapter.CourseRate,
CourseGradeNo:""
};
sObj.CourseGradeId = this.stuInfo.CourseRate;
sObj.CourseGradeNo = "";
// 对比是否存在改学员
if (this.saveMsg.ChooseStuList.length > 0) {
......@@ -671,10 +601,6 @@
this.saveMsg.ChooseStuList.push(sObj);
}
},
// changeChapter(item)
// {
// console.log("changeItem",item);
// },
//保存约课
SaveStuAppointment() {
var tipStr = ""
......@@ -703,6 +629,8 @@
message: "操作成功",
position: "top"
});
// this.$emit("success");
this.detailCloseHandle();
}
})
......@@ -714,9 +642,8 @@
getCourseChapterList(item) {
queryChapterList({
CourseId: item.LearnCourseId,
OrderId:item.OrderId,
OrderId: item.OrderId,
IsQRoot: 1,
CourseGradeId:item.CourseGradeId,
}).then(res => {
if (res.Code == 1) {
item.CourseChapterList = res.Data;
......
......@@ -609,7 +609,6 @@
this.currentMaxId = y.nodeId > this.currentMaxId ? y.nodeId : this.currentMaxId
})
let reg = /^http(s)?:\/\/(.*?)\//
console.log("getMyAdDetail",data.pictureUrl);
let getBlob = this.getAnyFileBlob(data.pictureUrl.replace(reg, ''))
let that = this
getBlob.then(blob => {
......
......@@ -359,6 +359,46 @@ var commonUtils = {
//返回年月日
return year + '-' + month + "-" + day;
},
//获取指定日期的上一周,下一周
getWeeks(date, type) {
// 将传入的日期字符串转换为 Date 对象,如果已经是 Date 对象则直接使用
const currentDate = new Date(date instanceof Date ? date : date);
const oneDay = 24 * 60 * 60 * 1000;
var weekStart;
var weekEnd;
//上一周
if (type == 1) {
weekStart = new Date(currentDate.getTime() - 7 * oneDay);
weekEnd = new Date(weekStart.getTime() + 6 * oneDay);
}
//下一周
else if (type == 2) {
weekStart = new Date(currentDate.getTime() + 7 * oneDay);
weekEnd = new Date(weekStart.getTime() + 6 * oneDay);
}//本周
else {
const dayOfWeek = currentDate.getDay();
weekStart = new Date(currentDate);
if (dayOfWeek === 0) {
weekStart.setDate(currentDate.getDate() - 6);
} else {
weekStart.setDate(currentDate.getDate() - (dayOfWeek - 1));
}
// 计算本周结束日期(周日)
weekEnd = new Date(weekStart.getTime() + 6 * oneDay);
}
const formatDate = (d) => {
const year = d.getFullYear();
const month = ('0' + (d.getMonth() + 1)).slice(-2);
const day = ('0' + d.getDate()).slice(-2);
return `${year}-${month}-${day}`;
};
return {
start: formatDate(weekStart),
end: formatDate(weekEnd)
};
},
//格式化日期
getFormatDate(dateStr) {
var myDate = new Date(dateStr);
......
......@@ -615,7 +615,6 @@ export default {
showStuRight(obj) {
if (obj) {
this.$q.loading.show();
console.log(obj.StuId);
getStudentInfo({ StuId: obj.StuId })
.then(r => {
this.stuOption = r.Data;
......
......@@ -497,7 +497,6 @@ export default {
});
},
getPlan(){
console.log(this.planTime)
const p = this.planTime
getStuAppointPlan({AccountId:p.AccountId,Date:p.Date,ShiftSort:p.ShiftSort}).then(r=>{
if(r.Code==1){
......
<template>
<div class="page-body">
<div class="col row wrap q-mr-lg q-col-gutter-md searchBox">
<div class="col-2">
<q-select filled dense v-model="msg.TeacherId" option-value="TId" option-label="TeacherName"
:options="TeacherList2" emit-value map-options label="老师" @input="getData" />
</div>
<div class="col-2">
<q-select filled dense v-model="msg.ClassRoomId" option-value="RoomId" option-label="RoomName"
:options="classroomList" emit-value map-options label="教室" @input="getData" />
</div>
<div class="col-2">
<q-select filled dense v-model="msg.ClassType" option-value="Id" option-label="label" :options="ClassTypeList"
emit-value map-options label="课程类型" @input="getData" />
</div>
<div class="col-2">
<q-select filled dense v-model="msg.AppointState" option-value="Id" option-label="label"
:options="AppointStateList" emit-value map-options label="约课状态" @input="getData" />
</div>
<div class="col-2">
<q-field filled dense label="选择日期" stack-label>
<template v-slot:control>
<el-date-picker v-model="selectedDate" type="date" size="mini" placeholder="开始日期" format="yyyy-MM-dd"
value-format="yyyy-MM-dd" :clearable="false" @change="changeDate">
</el-date-picker>
</template>
</q-field>
</div>
</div>
<div class="row justify-center items-center q-mt-sm">
<font style="color:blue;">{{msg.StartDate}}~{{msg.EndDate}} 排课计划</font>
<q-btn dense text-color="primary" flat unelevated :label="viewType == 'day' ? '上一天' : '上一周'"
@click="calendarPrev" />
<q-separator vertical />
<q-btn dense text-color="primary" flat unelevated :label="viewType == 'day' ? '下一天' : '下一周'"
@click="calendarNext" />
<q-separator vertical />
<div style="margin-left:10px;">
<q-btn dense text-color="primary" flat unelevated class="q-mr-md" size="sm" icon="download" label="老师排课表"
@click="DownLoadStuLearnChapterStatic" />
</div>
<q-separator vertical />
<div style="margin-left:10px;">
<q-btn dense text-color="primary" flat unelevated class="q-mr-md" size="sm" icon="download" label="学生发课表"
@click="DownLoadPlanStudentExcel" />
</div>
</div>
<div class="viewbox">
<table class="appointtable">
<template v-for="(rootItem,rootIndex) in dataList">
<thead :key="`r_th_`+rootIndex">
<tr>
<th style="width:120px;">
{{rootItem.ClassDate}}<br />({{rootItem.WeekStr}})
</th>
<template v-for="(item, index) in rootItem.RList">
<th :key="`r_teacher_`+rootIndex+index" style="width:100px;">
{{item.TeacherName}}
</th>
</template>
</tr>
</thead>
<tbody :key="`r_tb_`+rootIndex">
<template v-for="(timeItem,timeIndex) in TimeList">
<tr :key="`r_time_`+rootIndex+timeIndex">
<td style="width:120px;">
{{timeItem.Name}}({{timeItem.ClassHours}}课时)
<br />
{{timeItem.StartTime}}~{{timeItem.EndTime}}
</td>
<template v-for="(aItem, aIndex) in rootItem.RList">
<td :key="`r_a_`+rootIndex+aIndex" style="width:100px;cursor:pointer;"
@click="showDetail(aItem,rootItem.ClassDate,aItem.TeacherId,timeItem)"
:class="getAppointItemClass(aItem,timeItem)">
<template v-if="getAppointItem(aItem,timeItem)&&getAppointItem(aItem,timeItem).CourseId">
<font style="font-weight:bold;">{{getAppointItem(aItem,timeItem).ChapterName}}</font>
<br />
<div style="display: flex;flex-wrap: wrap;">
<template v-for="(gItem,gIndex) in getAppointItem(aItem,timeItem).GuestList">
<div :key="`r_g_`+rootIndex+timeIndex+aIndex+gIndex"
style="flex-basis:30px;margin:3px; flex-grow: 0;flex-shrink: 0;">
{{gItem.GuestName}}</div>
</template>
</div>
</template>
</td>
</template>
</tr>
</template>
</tbody>
</template>
</table>
</div>
<SubscribeForm v-model="showForm" :editType="editType" :dateObj="dateObj" :saveObj="saveObj" :auth="auth"
:teacherList="TeacherList2" @success="successHandle" />
</div>
</template>
<script>
import {
GetAppointmentPlanStat,
SetSureAppointment,
GetAppointmentConfig
} from "../../api/studyabroad/subscribe.js";
import {
getTeacherDropDownList,
queryClassRoomList
} from "../../api/school/index";
import {
EduDownLoad
} from "../../api/common/common.js";
import {
queryGetTimeList
} from "../../api/stuMan/index";
import SubscribeForm from "../../components/stuMan/subscribe/subscribeForm";
export default {
meta: {
title: "新约课中心",
},
data() {
return {
config: {
AdvanceDay: 0,
AppointDay: 7
},
viewType: "week",
showForm: false,
editType: 1,
selectedDate: "",
msg: {
StartDate: "",
EndDate: "",
TeacherId: 0,
ClassRoomId: 0,
ClassType: 0,
AppointState: 0
},
classroomList: [],
ClassTypeList: [{
label: "全部",
Id: 0
},
{
label: "跟班课",
Id: 1
},
{
label: "试听课",
Id: 2
},
{
label: "预约课",
Id: 3
}
],
AppointStateList: [{
label: "全部",
Id: 0
},
{
label: "待确认",
Id: 1
},
{
label: "已确认",
Id: 2
}
],
TeacherList2: [],
dateObj: {},
saveObj: {},
auth: {
IsEdit: false,
addBefore: false, //新增今天以前的约课
},
saveLoading: false,
dataList: [],
TimeList: [], //时段
};
},
components: {
SubscribeForm
},
created() {
this.getAppointmentConfig();
this.selectedDate = this.$commonUtils.getCurrentDate();
var weekObj = this.$commonUtils.getWeeks(this.selectedDate, 0);
this.getTeacherList();
this.getclassroom();
this.msg.StartDate = weekObj.start;
this.msg.EndDate = weekObj.end;
this.getTimeList();
},
mounted() {
this.getData();
const ActionMenuList = JSON.parse(localStorage.getItem("loginUserInfo"))
.data.ActionMenuList;
const res = ActionMenuList.find(e => {
return e.FunctionCode == "subscribe_edit";
});
if (res) {
this.auth.IsEdit = true;
} else {
this.auth.IsEdit = false;
}
const res2 = ActionMenuList.find(e => {
return e.FunctionCode == "subscribe_addBefore";
});
if (res2) {
this.auth.addBefore = true;
} else {
this.auth.addBefore = false;
}
},
methods: {
//获取可约时间段
getTimeList() {
this.TimeList = [];
queryGetTimeList({}).then(res => {
if (res.Code == 1) {
var tempData = res.Data;
if (tempData && tempData.length > 0) {
tempData.forEach(item => {
this.TimeList.push({
Id: item.Sort,
Name: '第' + item.Sort + "节课",
StartTime: item.StartTime,
EndTime: item.EndTime,
ClassHours: item.ClassHours,
});
})
}
}
})
},
getAppointItemClass(appointItem, timeItem) {
var str = "";
var obj = {};
if (appointItem.SubList && appointItem.SubList.length > 0) {
appointItem.SubList.forEach(qitem => {
if (qitem.ShiftSort == timeItem.Id) {
obj = qitem;
}
})
}
if (obj && obj.CourseId && obj.CourseId > 0) {
if (obj.State == 1) {
str = "unsure";
} else if (obj.State == 2) {
str = "unstudy";
} else if (obj.State == 3) {
str = "study-normal";
}
}
return str;
},
//获取约课数据
getAppointItem(appointItem, timeItem) {
var obj = {};
if (appointItem.SubList && appointItem.SubList.length > 0) {
appointItem.SubList.forEach(qitem => {
if (qitem.ShiftSort == timeItem.Id) {
obj = qitem;
}
})
}
return obj;
},
//下载课表
DownLoadStuLearnChapterStatic() {
let dateStartDate = new Date(this.msg.StartDate);
let dateEndDate = new Date(this.msg.EndDate);
EduDownLoad("/TeacherClass/GetAppointmentPlanStatExcel", this.msg, (dateStartDate.getMonth() + 1) + "月" +
dateStartDate.getDate() + "日-" + (dateEndDate.getMonth() + 1) + "月" + dateEndDate.getDate() + "日老师排课统计.xls",
res => {});
},
//下载课表
DownLoadPlanStudentExcel() {
let dateStartDate = new Date(this.msg.StartDate);
let dateEndDate = new Date(this.msg.EndDate);
EduDownLoad("/TeacherClass/GetAppointmentPlanStudentExcel", this.msg, (dateStartDate.getMonth() + 1) + "月" +
dateStartDate.getDate() + "日-" + (dateEndDate.getMonth() + 1) + "月" + dateEndDate.getDate() + "日学生排课统计.xls",
res => {});
},
calendarNext() {
setTimeout(() => {
var weekObj = this.$commonUtils.getWeeks(this.selectedDate, 2);
this.msg.StartDate = weekObj.start;
this.msg.EndDate = weekObj.end;
this.selectedDate = weekObj.start;
this.getData();
}, 100);
},
calendarPrev() {
setTimeout(() => {
var weekObj = this.$commonUtils.getWeeks(this.selectedDate, 1);
this.msg.StartDate = weekObj.start;
this.msg.EndDate = weekObj.end;
this.selectedDate = weekObj.start;
this.getData();
}, 100);
},
//时间切换
changeDate() {
setTimeout(() => {
var weekObj = this.$commonUtils.getWeeks(this.selectedDate, 0);
this.msg.StartDate = weekObj.start;
this.msg.EndDate = weekObj.end;
this.selectedDate = weekObj.start;
this.getData();
}, 100);
},
getTeacherList() {
getTeacherDropDownList({
LeaveStatus: 1,
}).then(res => {
if (res.Code == 1) {
this.TeacherList2 = JSON.parse(JSON.stringify(res.Data));
this.TeacherList2.unshift({
TeacherName: "请选择",
TId: 0
});
}
});
},
getclassroom() {
queryClassRoomList({}).then(res => {
if (res.Code == 1) {
this.classroomList = res.Data;
var obj = {
RoomName: "不限",
RoomId: 0
};
this.classroomList.unshift(obj);
}
});
},
getData() {
GetAppointmentPlanStat(this.msg).then(res => {
let data = JSON.parse(JSON.stringify(res.Data));
this.dataList = data;
});
},
showDetail(appointItem, date, tid, timeItem) {
var newData = {};
if (appointItem.SubList && appointItem.SubList.length > 0) {
appointItem.SubList.forEach(qitem => {
if (qitem.ShiftSort == timeItem.Id) {
newData = qitem;
}
})
}
this.editType = 1;
if (newData && newData.CourseId) {
this.editType = 2;
}
//小于今天不显示弹窗,有权限除外
else if ((this.showAddStu(date) || this.auth.addBefore) && this.auth.IsEdit) {
this.editType = 1;
}
this.showForm = true;
this.dateObj.date = date;
this.saveObj = newData;
this.saveObj.Tid = tid;
this.saveObj.ShiftSort = timeItem.Id;
},
showAddStu(date) {
var today = this.$commonUtils.getCurrentDate()
if (new Date(date).getTime() < new Date(today).getTime()) {
return false;
} else {
return true;
}
},
confirmSub(date, id, item) {
if (item.EnrollNum < item.ScrollMinNum) {
// this.$q.notify({
// message: `最小开班人数为${item.ScrollMinNum}`,
// position: "top",
// type: "negative"
// });
// return;
}
this.saveLoading = true;
const msg = {
Date: date,
TeacherId: id,
ShiftSort: item.ShiftSort
};
SetSureAppointment(msg).then(res => {
this.saveLoading = false;
if (res.Code == 1) {
this.$q.notify({
message: "操作成功",
position: "top",
type: "positive"
});
this.getData();
}
});
},
successHandle() {
this.getData();
},
isShowTag(arr, min) {
let n = 0;
arr.map(e => {
if (e.AppointType !== 3) {
n += 1;
}
});
if (n < min) {
return true;
} else {
return false;
}
},
getAppointmentConfig() {
GetAppointmentConfig({}).then(res => {
this.config = res.Data;
});
},
}
};
</script>
<style lang="scss">
.viewbox {
overflow-x: auto;
box-sizing: border-box;
}
.viewbox .appointtable {
border-collapse: collapse;
border: 1px solid #2a363b;
min-width: 100%;
}
.viewbox .appointtable td,
.viewbox .appointtable th {
border-right: 1px solid #2a363b;
border-bottom: 1px solid #2a363b;
white-space: nowrap;
text-align: center;
color: #000;
position: relative;
}
.viewbox .appointtable .unsure {
background: #eb3b5a;
}
.viewbox .appointtable .unstudy {
background: yellow;
}
.viewbox .appointtable .study-normal {
background: #20bf6b;
}
.calendar-container {
position: relative;
overflow: auto;
}
.searchBox .el-input__inner {
border: none;
background-color: transparent;
}
.searchBox .el-input .el-input__inner,
.el-select .el-input {
border-radius: 0;
}
.courseItem {
height: 100%;
}
.detailLabel {
width: 35px;
white-space: nowrap;
}
.detailValue {
width: 100%;
display: inline-block;
}
</style>
......@@ -209,7 +209,6 @@
getSurveyShowList() {
this.loading = true;
querySurveyShowList(this.msg).then(res => {
console.log(res);
this.loading = false
this.data = res.Data.subList;
this.pageTitle = res.Data.Title;
......
......@@ -2031,6 +2031,11 @@ const routes = [{
component: () =>
import("pages/studyAbroad/subscribe")
},
{
path: "/stu/subappoint", //新版预约
component: () =>
import("pages/studyAbroad/subappoint")
},
{
path: "/financial/Language/languagePeriodsList", // 小语种业绩提成 分期列表
component: () =>
......
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