Commit aeb569e5 authored by 黄奎's avatar 黄奎
parents 4105ff8d c03acaa7
......@@ -12,7 +12,7 @@ export default {
<style>
@import url('~assets/css/font.css');
@import url('//at.alicdn.com/t/font_2077629_9bdr67jqiee.css');
@import url('//at.alicdn.com/t/font_2077629_tknu7rklxe.css');
.q-scrollarea__thumb{
z-index: 999999!important;
}
......
......@@ -23,3 +23,28 @@ export function setStopClassApply(data) {
data
})
}
/**
* 临时上课邀请,获取学员列表
* @param {JSON参数} data
*/
export function getNotClassStudentList(data) {
return request({
url: '/TeacherClass/GetNotClassStudentList',
method: 'post',
data
})
}
/**
* 创建临时上课邀请申请单
* @param {JSON参数} data
*/
export function setStuInviteApply(data) {
return request({
url: 'TempInvitationClass/SetStudentTempInvitation',
method: 'post',
data
})
}
\ No newline at end of file
<style>
.changeClassProcess {
width: 350px;
}
.changeClassProcess .processList {
width: 100%;
height: auto;
}
.changeClassProcess .processTop {
width: 100%;
height: 54px;
background-color: #F1F1F1;
color: #000000;
text-align: center;
line-height: 54px;
border-radius: 2px;
cursor: pointer;
position: relative;
}
.changeClassProcess .processLine {
width: 100%;
height: 54px;
background-color: #fff;
color: #bbb6b6;
text-align: center;
line-height: 54px;
}
.changeClassProcess .processLine i {
font-size: 25px;
font-weight: bold;
}
.changeClassProcess .otherList {
background-color: #2961FE !important;
color: #fff;
font-weight: bold;
}
.changeClassProcess .process_TwoList {
display: flex;
background-color: #2961FE !important;
color: #fff;
font-weight: bold;
align-items: center;
justify-content: center;
}
.changeClassProcess .process_He {
width: 36px;
height: 36px;
background-color: #3FC4FF;
text-align: center;
line-height: 36px;
color: #fff;
border-radius: 50%;
}
.changeClassProcess .process_Left {
width: 40%;
height: 100%;
text-align: right;
}
.changeClassProcess .process_center {
width: 20%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
.changeClassProcess .process_Right {
width: 40%;
height: 100%;
text-align: left;
}
.changeClassProcess .process_OR {
background-color: #F28C1D;
}
.changeClassProcess .addProcessBtn {
width: 100%;
height: 45px;
text-align: center;
line-height: 45px;
color: #2961FE;
border: 1px dashed #2961FE;
border-radius: 2px;
cursor: pointer;
}
.changeClassProcess .process_BtnList {
margin-top: 30px;
width: 100%;
display: flex;
justify-content: center;
}
.changeClassProcess .process_BtnOne {
width: 90px;
height: 38px;
text-align: center;
line-height: 38px;
border-radius: 2px;
border: 1px solid #A1AAB2;
color: #000000;
cursor: pointer;
margin-right: 50px;
}
.changeClassProcess .SetShouSun {
display: inline-block;
border-radius: 2px;
background-color: #8175FB;
color: #fff;
position: absolute;
right: 10px;
width: 60px;
height: 27px;
left: 0;
top: 0;
line-height: 27px;
font-size: 13px;
}
.changeClassProcess .operationDiv {
position: absolute;
right: 0;
top: 0;
height: 30px;
line-height: 30px;
padding-right: 10px;
vertical-align: top;
}
.changeClassProcess .operationDiv i:first-child {
font-size: 13px;
}
.changeClassProcess .operationDiv i:hover {
color: red;
}
.changeClassProcess .justTwoClass {
margin-left: 8px;
}
</style>
<template>
<div class="changeClassProcess">
<div class="processList">
<div class="processTop">发起人</div>
<div class="processLine">
<i class="iconfont icon-down"></i>
</div>
</div>
<template v-for="(item,index) in flowObj.FlowNodeList">
<div class="processList" @click="getItem(index)">
<template v-if="item.FlowAduitList&&item.FlowAduitList.length==1">
<div class="processTop otherList">
{{item.FlowAduitList[0].AduitName}}
<template v-if="item.FlowAduitList&&item.FlowAduitList.length>0 && item.FlowAduitList[0].IsSpecNode==1">
<span class="SetShouSun">设定收损</span>
</template>
<div class="operationDiv">
<i class="iconfont icon-shanchu" style="position:relative;top:-2px;" @click.stop="DeleteNode(index)"></i>
<i style="margin:0 8px;" class="iconfont icon-shangyi2" v-if="index!=0"
@click.stop="moveDown(index,0)"></i>
<i class="iconfont icon-xiayi" :class="{'justTwoClass':index==0}" @click.stop="moveDown(index,1)"
v-if="index!=flowObj.FlowNodeList.length-1"></i>
</div>
</div>
<div class="processLine" v-if="index!=flowObj.FlowNodeList.length-1">
<i class="iconfont icon-down"></i>
</div>
</template>
<template v-else>
<div class="processTop process_TwoList">
<div class="process_Left">{{item.FlowAduitList[0].AduitName}}</div>
<div class="process_center">
<template v-if="item.FlowAduitList[0].AuditWay==2">
<div class="process_He"></div>
</template>
<template v-if="item.FlowAduitList[0].AuditWay==3">
<div class="process_He process_OR">或者</div>
</template>
</div>
<div class="process_Right">
<template v-for="(subItem,subIndex) in item.FlowAduitList" v-if="subIndex>0">
{{subItem.AduitName}}
</template>
</div>
<template v-if="item.FlowAduitList&&item.FlowAduitList.length>0 && item.FlowAduitList[0].IsSpecNode==1">
<span class="SetShouSun">设定收损</span>
</template>
<div class="operationDiv">
<i class="iconfont icon-shanchu" style="position:relative;top:-2px;" @click.stop="DeleteNode(index)"></i>
<i style="margin:0 8px;" class="iconfont icon-shangyi2" v-if="index!=0"
@click.stop="moveDown(index,0)"></i>
<i class="iconfont icon-xiayi" :class="{'justTwoClass':index==0}" @click.stop="moveDown(index,1)"
v-if="index!=flowObj.FlowNodeList.length-1"></i>
</div>
</div>
<div class="processLine" v-if="index!=flowObj.FlowNodeList.length-1">
<i class="iconfont icon-down"></i>
</div>
</template>
</div>
</template>
<br />
<div class="addProcessBtn" @click="AddNode">新增节点</div>
<div class="process_BtnList">
<q-btn label="保存" color="accent q-px-md" style="font-weight:400 !important" @click="setBackClassFlow" />
</div>
<process-form v-if="isShowProcess" :save-obj="processObj" :NodeIndex="ChooseNodeIndex" @close="closeProcessForm"
@success="refreshPage" :authObj="showObj">
</process-form>
</div>
</template>
<script>
import processForm from '../../components/flow/process-form';
import {
queryBackClassFlow,
saveBackClassFlow
} from '../../api/system/index'
export default {
meta: {
title: ""
},
components: {
processForm
},
data() {
return {
msg: {
FlowId: 4
},
isShowProcess: false, //显示旁边弹窗
processObj: {}, //传递子组件
flowObj: {
FlowId: 4,
FlowName: "临时上课邀请流程",
FlowNodeList: [], //审核节点列表
},
//显示对象
showObj: {
isShowShouSun: 0,//不显示收损
},
ChooseNodeIndex: 0,
}
},
created() {},
mounted() {
this.getBackClassFlow();
},
methods: {
//新增节点
AddNode() {
this.flowObj.FlowNodeList.push({
FlowId: 0,
NodeId: 0,
NodeName: "新增节点",
SortNum: 0,
FlowAduitList: [{
AduitName: "新增节点",
AuditType: 2,
AuditWay: 2,
CheckId: 0,
FlowId: 0,
IsSpecNode: 0,
NodeId: 8,
PostType: 0,
UserId: 0,
}]
});
},
//删除节点
DeleteNode(index) {
this.$q.dialog({
title: '提示信息',
message: '是否确定删除该流程',
cancel: true,
persistent: true,
ok: "确定",
cancel: "取消",
}).onOk(() => {
this.flowObj.FlowNodeList.splice(index, 1);
}).onCancel(() => {
});
},
getBackClassFlow() {
queryBackClassFlow(this.msg).then(res => {
if (res.Code == 1 && res.Data) {
this.flowObj = res.Data;
}
})
},
//点开旁边
getItem(nodeIndex) {
this.processObj = this.flowObj;
this.ChooseNodeIndex = nodeIndex;
this.isShowProcess = true;
},
//关闭
closeProcessForm() {
this.isShowProcess = false
},
//成功刷新
refreshPage() {
this.isShowProcess = false;
this.getBackClassFlow();
},
//保存退课流程
setBackClassFlow() {
saveBackClassFlow(this.flowObj).then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '操作成功',
position: 'top'
})
this.refreshPage();
}
})
},
//下移下移
moveDown(index, IsUp) {
var currentItem = this.flowObj.FlowNodeList[index];
if (IsUp == 0) {
if (index > 0) {
var upItem = this.flowObj.FlowNodeList[index - 1];
this.$set(this.flowObj.FlowNodeList, index - 1, currentItem);
this.$set(this.flowObj.FlowNodeList, index, upItem);
}
} else {
if (index != this.flowObj.FlowNodeList.length - 1) {
var downItem = this.flowObj.FlowNodeList[index + 1];
this.$set(this.flowObj.FlowNodeList, index + 1, currentItem);
this.$set(this.flowObj.FlowNodeList, index, downItem);
}
}
}
}
}
</script>
......@@ -166,7 +166,7 @@
<template v-else>
<div class="contiue_Top">
<span class="backContius" @click="isShowTuike=true">
<返回</span> <span style="margin-left:20px;">班级选择
<i style="font-size:18px;margin-left:15px;" title="返回" class="iconfont icon-fanhui"></i></span> <span style="margin-left:20px;">班级选择
</span>
</div>
<div class="col row wrap q-mr-lg q-col-gutter-md" style="margin:10px;">
......
......@@ -276,6 +276,7 @@
let val = item.ClassList.find(x => x.ClassId == item.ClassId);
if (val) {
item.ClassName = val.ClassName;
item.Teacher_Id = val.Teacher_Id;
}
} else {
item.ClassName = ""
......@@ -337,6 +338,16 @@
OfferType: this.obj.OfferType,
OfferDetails: this.model.OfferDetails
};
for(var i=0;i<sMsg.OfferDetails.length;i++){
if(sMsg.OfferDetails[i].Teacher_Id==0){
this.$q.notify({
type: 'negative',
position: "top",
message: `请联系班级管理员,关联${sMsg.OfferDetails[i].ClassName}班级老师后转单`
})
return
}
}
saveOfferToOrder(sMsg).then(res => {
if (res.Code == 1) {
this.$q.notify({
......
<!--临时上课邀请表单审核信息-->
<style>
.backbill-Dialog .drawerTop {
width: 100%;
height: 50px;
display: flex;
justify-content: space-between;
background-color: #F0F5FB;
padding: 5px 10px;
align-items: center;
}
.backbill-Dialog .classFirst {
color: #000000;
font-weight: bold;
}
.backbill-Dialog .className {
margin-left: 10px;
}
.backbill-Dialog .classStatus {
padding: 3px 8px;
background-color: #c8d7fc;
color: #2961FE;
font-size: 12px;
border-radius: 2px;
margin-left: 20px;
}
.backbill-Dialog .normalName {
color: #999999;
}
.backbill-Dialog .normalInner {
color: #111111;
}
.drop_NameDown {
margin-top: 20px;
width: 300px;
}
.backinfoContent {
margin: 10px;
padding-bottom: 80px;
}
.backinfoContent .role_Line {
width: 3px;
height: 11px;
margin-right: 10px;
background-color: #3FC4FF;
display: inline-block;
}
.backinfoContent .backinfo_Item {
color: #000000;
font-weight: bold;
}
.backinfoContent .backInfo_One {
margin: 20px 0;
}
.backinfoContent .backOtherInfo {
color: #111111;
}
.backinfoContent .backInfo_Title {
display: inline-block;
width: 75px;
text-align: left;
color: #999999;
}
.backinfoContent .replayReason {
width: 100%;
min-height: 100px;
background-color: #F0F5FB;
border-radius: 3px;
padding: 20px;
margin: 20px 0;
}
.backinfoContent .replay_Title {
font-weight: bold;
color: #111111;
}
.backinfoContent .chaosong_Peo {
display: inline-block;
padding: 2px 3px;
color: #fff;
border-radius: 3px;
margin: 0 5px 5px 0;
background-color: #9cf;
}
.backinfoContent .topBaseInfo {
/* height: 300px; */
overflow: auto;
}
.topBaseInfo::-webkit-scrollbar {
width: 3px;
height: 3px;
background-color: #F5F5F5;
}
/*!*定义滚动条轨道 内阴影+圆角*!*/
.topBaseInfo::-webkit-scrollbar-track {
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
border-radius: 10px;
background-color: #F5F5F5;
}
/*!*定义滑块 内阴影+圆角*!*/
.topBaseInfo::-webkit-scrollbar-thumb {
border-radius: 10px;
-webkit-box-shadow: -webkit-gradient(linear, 0 0, 0 100%, color-stop(.5, rgba(255, 255, 255, .2)), color-stop(.5, transparent), to(transparent));
background-color: #0ae;
}
</style>
<template>
<q-dialog v-model="persistent" maximized full-height seamless position="right" @hide="closeShenheForm">
<q-card style="margin-top:61px;width:850px" class="no-border-radius backbill-Dialog">
<div class="drawerTop">
<div style="display:flex;align-items:center;">
<div class="className">
<div class="classFirst">停课审批</div>
</div>
</div>
</div>
<q-tabs style="margin:15px;" v-model="tabCheck" narrow-indicator dense align="left" class="text-primary">
<q-tab :ripple="false" name="first" label="详细信息" />
<q-tab :ripple="false" name="second" label="审批记录" />
</q-tabs>
<div v-if="tabCheck=='first'" style="margin:0 15px;">
<div class="backinfoContent">
<div>
<div class="topBaseInfo">
<div class="backinfo_Item">
<span class="role_Line"></span>基本信息
</div>
<div class="row backInfo_One">
<div class="col-6">
<span class="backInfo_Title">停课编号:</span>
<span class="backOtherInfo">{{setingObj.Id}}</span>
</div>
<div class="col-6">
<span class="backInfo_Title">申请人:</span>
<span class="backOtherInfo">{{setingObj.CreateByName}}</span>
</div>
</div>
<div class="row backInfo_One">
<div class="col-6">
<span class="backInfo_Title">学员姓名:</span>
<span class="backOtherInfo">{{setingObj.DataObj.Order_Guest_ViewModel.GuestName}}</span>
</div>
<div class="col-6">
<span class="backInfo_Title">申请时间:</span>
<span class="backOtherInfo">{{setingObj.CreateTime}}</span>
</div>
</div>
<div class="backinfo_Item">
<span class="role_Line" style="background-color:#F28C1D"></span>教学信息
</div>
<div class="row backInfo_One">
<div class="col-6">
<span class="backInfo_Title">校区:</span>
<span class="backOtherInfo">{{setingObj.DataObj.Order_Guest_ViewModel.SchoolName}}</span>
</div>
<div class="col-6">
<span class="backInfo_Title">班级信息:</span>
<span class="backOtherInfo">
{{setingObj.DataObj.ClassName}}
<span style="color:#2961FE;cursor:pointer;"
@click="goClassManage(setingObj.DataObj.ClassName)">{{setingObj.ClassNo}}</span>
</span>
</div>
</div>
<div class="row backInfo_One">
<div class="col-6">
<span class="backInfo_Title">带班老师:</span>
<span class="backOtherInfo">{{setingObj.DataObj.Order_Guest_ViewModel.TeacherName}}</span>
</div>
<div class="col-6">
<span class="backInfo_Title">学习课程:</span>
<span class="backOtherInfo" style="color:#2961FE;cursor:pointer;" @click="goCourse(setingObj.DataObj.Order_Guest_ViewModel.CourseName)">{{setingObj.DataObj.Order_Guest_ViewModel.CourseName}}</span>
</div>
</div>
<div class="backinfo_Item">
<span class="role_Line" style="background-color:#02C499"></span>学习信息
</div>
<div class="row backInfo_One">
<div class="col-6">
<span class="backInfo_Title">总课时:</span>
<span class="backOtherInfo">{{setingObj.DataObj.Order_Guest_ViewModel.TotalPlanNum}} 课时</span>
</div>
<div class="col-6">
<span class="backInfo_Title">已学课时:</span>
<!-- <span class="backOtherInfo" style="color:#2961FE;cursor:pointer;" @click="goStudentsClassSee(setingObj.DataObj.Order_Guest_ViewModel)">{{setingObj.DataObj.Order_Guest_ViewModel.Ranks}} 课时</span> -->
<span class="backOtherInfo">{{setingObj.DataObj.Order_Guest_ViewModel.Ranks}} 课时</span>
</div>
</div>
<div class="row backInfo_One">
<div class="col-6">
<span class="backInfo_Title">剩余课时:</span>
<span
class="backOtherInfo">{{setingObj.DataObj.Order_Guest_ViewModel.TotalPlanNum-setingObj.DataObj.Order_Guest_ViewModel.Ranks}}
课时</span>
</div>
</div>
<div class="backinfo_Item">
<span class="role_Line" style="background-color:#8175FB"></span>其他信息
</div>
<div class="row backInfo_One">
<div class="col-6">
<span class="backInfo_Title">关联单号:</span>
<span class="backOtherInfo" style="color:#2961FE;cursor:pointer"
@click="goOrderStatic(setingObj.DataObj.Order_Guest_ViewModel.OrderId)">{{setingObj.DataObj.Order_Guest_ViewModel.OrderId}}</span>
</div>
<div class="col-6">
<span class="backInfo_Title">关联销售:</span>
<span class="backOtherInfo">{{setingObj.DataObj.Order_Guest_ViewModel.EnterName}}</span>
</div>
</div>
</div>
<div class="replayReason">
<div class="replay_Title">生效日期</div>
<div style="color:#666666;margin-top:5px;" class="q-mb-md">
{{handleDate(setingObj.DataObj.TakeEffectTime)}}
</div>
<div class="replay_Title">停课原因</div>
<div style="color:#666666;margin-top:5px;">
{{setingObj.DataObj.Remarks}}
</div>
</div>
<!-- <template v-if="setingObj.SpecialNode==1">
<span>
<q-input filled stack-label :dense="false" v-model="stopBillMsg.BackMoney" class="col-12"
label="退课金额" />
</span>
<span>
系统计算课时费为:{{(classPriceObj.ClassHours-classPriceObj.FinishHours)}}(课时)*{{classPriceObj.classHourPrice}}(课单价)={{classPriceObj.backMoney}}元,请你最终确认退款金额
</span>
</template> -->
<div v-if="showType==2">
<div style="display:flex;justify-content:space-between;align-items:center;margin-top:20px;">
<div>审批意见</div>
<div>
<q-radio v-model="stopBillMsg.AuditStatus" :val="2" label="通过" />
<q-radio v-model="stopBillMsg.AuditStatus" :val="3" label="驳回" />
</div>
</div>
<q-input filled stack-label :dense="false" v-model="stopBillMsg.Description" type="textarea"
label="审批意见" />
</div>
<div style="margin-top:20px;">
<div class="row">
<div class="col-6" style="display:flex;align-items:top;">
<template v-if="tempPeople.length>0">
<div style="display:inline-block;width:45px;">抄送:</div>
<!-- RecipientIds -->
<div style="display:inline-block;margin-left:5px;width:340px;">
<span class="chaosong_Peo" v-for="(childItem,cindex) in tempPeople">
{{getName(childItem)}}
</span>
</div>
</template>
</div>
<div class="col-6" style="justify-content: flex-end;display:flex;align-items:center;">
<i class="iconfont icon-aite" style="font-size:20px;margin:7px 20px 0 0;cursor:pointer;"
v-if="showType==2">
<q-popup-proxy>
<q-banner>
<div style="width:350px;">
<div style="margin:10px 0 15px 0;">抄送</div>
<q-select class="col-6 q-pb-lg q-pr-lg" multiple clearable filled stack-label use-input
option-value="Id" option-label="EmployeeName" v-model="tempPeople" ref="ManagerId"
:options="EmployeeList" label="选择人员" :dense="false" emit-value map-options
@filter="filterFn">
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
未找到相关数据
</q-item-section>
</q-item>
</template>
</q-select>
</div>
</q-banner>
</q-popup-proxy>
</i>
<q-btn class="q-mr-md" label="关闭" @click="closeBackInfo" />
<q-btn v-if="showType==2" color="accent q-px-md" label="确认" @click="saveBackClassInfo()" />
</div>
</div>
</div>
</div>
</div>
</div>
<div v-if="tabCheck=='second'">
 <flowinfoForm :seting-obj="setingObj" :showType="showType" @close="closeShenheForm" @success="refreshPage">
</flowinfoForm>
</div>
</q-card>
<div class="dialog-out-close" @click="closeShenheForm"
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>
import flowinfoForm from '../sale/flowinfo-form';
import {
saveBackBillAduit,
queryBackBillMoney
} from '../../api/sale/bill'
import {
queryEmployee
} from '../../api/users/user'
export default {
props: {
setingObj: {
type: Object,
default: null
},
showType: {
type: Number,
default: 1
},
},
components: {
flowinfoForm,
},
data() {
return {
persistent: true,
tabCheck: 'first', //默认选第一个
stopBillMsg: {
Id: 0,
// BackMoney: 0, //实际退款金额
Description: "", //审批意见
AuditStatus: 2, //审核状态
SpecialNode: 0, //是否特殊节点
RecipientIds: "", //抄送人
},
classPriceObj: {}, //课程价格信息
EmployeeList: [],
AllemployeeList: [],
tempPeople: [], //抄送人数组
}
},
created() {
this.getEmployee();
},
mounted() {
this.stopBillMsg.Id = this.setingObj.Id;
this.stopBillMsg.SpecialNode = this.setingObj.SpecialNode;
if (this.stopBillMsg.SpecialNode == 1) {
this.getBackBillMoney();
}
},
methods: {
getBackBillMoney() {
queryBackBillMoney({
BackId: this.setingObj.RelationId
}).then(res => {
if (res.Code == 1) {
this.classPriceObj = res.Data;
}
});
},
closeBackInfo() {
this.persistent = false;
this.$emit('close');
},
//停课单据审核
saveBackClassInfo() {
var str = "";
if (this.tempPeople && this.tempPeople.length > 0) {
this.tempPeople.forEach(item => {
str += "," + item;
})
}
if (str && str != '') {
str = str.substr(1);
}
this.stopBillMsg.RecipientIds = str;
saveBackBillAduit(this.stopBillMsg).then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '审核成功!',
position: 'top'
})
//调用父页面成功方法
this.$emit('success');
this.$emit('close');
}
})
},
//获取员工列表
getEmployee() {
var qMsg = {
EmployeeName: ""
}
queryEmployee(qMsg).then(res => {
if (res.Code == 1) {
var jsonData = res.Data;
if (jsonData && jsonData.length > 0) {
this.AllemployeeList = JSON.parse(JSON.stringify(jsonData));
this.EmployeeList = JSON.parse(JSON.stringify(jsonData));;
}
}
})
},
//筛选员工
filterFn(val, update) {
update(() => {
if (val === '') {
this.EmployeeList = JSON.parse(JSON.stringify(this.AllemployeeList))
} else {
const needle = val.toLowerCase()
this.EmployeeList = this.AllemployeeList.filter(v => v.EmployeeName.toLowerCase().indexOf(needle) > -1)
}
})
},
//获取员工姓名
getName(id) {
let str = ''
this.EmployeeList.forEach(x => {
if (id == x.Id) {
str = x.EmployeeName;
}
})
return str;
},
//跳转到班级管理
goClassManage(ClassName) {
this.OpenNewUrl('/course/classManage', {
'ClassName': ClassName
})
},
//跳转到报名统计
goOrderStatic(OrderId) {
this.OpenNewUrl('/sale/orderStatistics', {
'OrderId': OrderId
})
},
//跳转到课耗明细
goStudentsClassSee(item){
this.OpenNewUrl('/teacher/studentsClassSee', {
StudentId:item.Id,
TeacherId:item.Teacher_Id,
ClassId:item.ClassId,
})
},
//跳转到课程管理
goCourse(name){
this.OpenNewUrl('/course/course', {
Name:name
})
},
refreshPage() {
this.persistent = false;
this.$emit('success');
},
closeShenheForm() {
this.persistent = false;
this.$emit('close');
},
handleDate(T){
let date=T.split("T")
return date[0]
}
}
}
</script>
......@@ -195,7 +195,7 @@
<template v-else>
<div class="contiue_Top">
<span class="backContius" @click="isShowTuike=true">
<返回</span> <span style="margin-left:20px;">班级选择
<i style="font-size:18px;margin-left:15px;" title="返回" class="iconfont icon-fanhui"></i></span> <span style="margin-left:20px;">班级选择
</span>
</div>
<div class="col row wrap q-mr-lg q-col-gutter-md" style="margin:10px;">
......
<style>
.common_Style {
display: inline-block;
width: 30px;
height: 30px;
border-radius: 50%;
text-align: center;
line-height: 30px;
}
.classForm_monday {
background-color: #ced9f8;
color: #2961FE;
}
.classForm_tuesday {
background-color: #d9f3ff;
color: #3FC4FF;
}
.classForm_wednesday {
background-color: #f6e2cb;
color: #F28C1D;
}
.classForm_thursday {
background-color: #ccf3eb;
color: #02C499;
}
.classForm_friday {
background-color: #f7cfd6;
color: #F72E52;
}
.classForm_saturday {
background-color: #fff5cc;
color: #FFCC00;
}
.classForm_sunday {
background-color: #e6e3fe;
color: #8175FB;
}
.planTimeLi tbody::before {
content: '';
display: table-row;
height: 20px;
}
</style>
<template>
<q-dialog v-model="persistent" content-class="bg-grey-1" persistent transition-show="scale" transition-hide="scale">
<q-card style="width: 1000px;max-width:1000px;">
<q-card-section>
<div class="text-h6">创建临时上课邀请申请单</div>
</q-card-section>
<q-card-section class="q-pt-none" style="height: 80vh">
<q-scroll-area :thumb-style="thumbStyle" :content-style="contentStyle"
:content-active-style="contentActiveStyle" class="full-width full-height">
<div class="row q-col-gutter-lg">
<q-select filled stack-label option-value="ClassId" option-label="ClassName" v-model="msg.ClassId"
:options="classList" @input="changeClass" emit-value map-options label="班级" class="col-6" use-input
clearable @filter="filterFn">
<template v-slot:option="{ itemProps, itemEvents, opt, selected, toggleOption }">
<q-item v-bind="itemProps" v-on="itemEvents">
<q-item-section>
<q-item-label v-html="opt.ClassName"></q-item-label>
</q-item-section>
<q-item-section side>
<q-item-label v-html="opt.OpenTime"></q-item-label>
</q-item-section>
</q-item>
</template>
</q-select>
<q-input filled v-model="msg.GuestName" clearable class="col-6" label="学员姓名" maxlength="200">
<template v-slot:append>
<q-icon name="search" @click="getNotClassStudentList" @keyup.enter="getNotClassStudentList" />
</template>
</q-input>
</div>
<div class="row items-center q-ma-sm">
</div>
<!-- <div class="text-caption q-mb-lg q-px-md text-grey-6">上课时间</div> -->
<q-expansion-item expand-separator label="上课时间" :value="true">
<div class="col">
<q-table no-data-label="暂无相关数据" flat :pagination="pages"
class="sticky-column-table sticky-header-column-table" separator="none" :data="currentClass"
:columns="columns" row-key="index" selection="multiple" :selected.sync="selected">
<template v-slot:body-cell-TimeList="props">
<q-td auto-width :props="props">
{{props.row.StartTime}}-{{props.row.EndTime}}
</q-td>
</template>
<template v-slot:bottom></template>
</q-table>
</div>
</q-expansion-item>
<!-- <div class="text-caption q-mb-lg q-px-md text-grey-6">学员列表</div> -->
<q-expansion-item expand-separator label="学员列表" :value="true">
<div class="row items-center">
<div class="col">
<q-table no-data-label="暂无相关数据" flat :pagination="pages"
class="sticky-column-table sticky-header-column-table " :data="stuList" :columns="stuColumns"
row-key="Id" selection="multiple" :selected.sync="selectedStu">
<template v-slot:bottom></template>
</q-table>
</div>
</div>
</q-expansion-item>
<q-input filled type="textarea" :rows="3" style="margin-top:20px;" stack-label maxlength="2000"
v-model="msg.Remarks" :dense="false" class="col-12 q-pb-lg" label="备注" />
</q-scroll-area>
</q-card-section>
<q-separator />
<q-card-actions align="right" class="bg-white">
<q-btn label="取消" flat color="grey-10" style="font-weight:400 !important" @click="closeSaveForm" />
<q-btn label="立即提交" color="accent q-px-md" style="font-weight:400 !important" :loading="saveLoading"
@click="save" />
</q-card-actions>
</q-card>
</q-dialog>
</template>
<script>
import {
getClassDropDownList,
} from "../../api/school/index";
import {
getNotClassStudentList,
setStuInviteApply
} from '../../api/teacher/student'
import Lockr from 'lockr'
export default {
data() {
return {
pages: {
rowsPerPage: 0
},
persistent: true,
saveLoading: false,
contentStyle: {},
contentActiveStyle: {},
thumbStyle: {
right: '2px',
borderRadius: '5px',
backgroundColor: '#027be3',
width: '5px',
opacity: 0.75
},
msg: {
ClassId: 0,
GuestName: "",
Remarks: '' //备注
},
selected: [],
classList: [],
classListAll: [],
queryClass: {
CourseId: 0,
IsAddDefault: 1,
SchoolId: -1,
Teacher_Id: 0,
MoreStatus: "1,2",
IsQuerySurplusPlan: 1
},
currentClass: [],
columns: [{
name: 'RoomName',
label: '教室名称',
field: 'RoomName',
align: 'left',
}, {
name: 'ClassDate',
label: '上课日期',
field: 'ClassDate',
align: 'left'
},
{
name: 'TeacherName',
label: '老师',
field: 'TeacherName',
align: 'left'
},
{
name: 'TimeList',
label: '上课时间',
field: 'TimeList',
align: 'left'
},
],
classSetMsg: {
OpenTime: '', //开班时间
ClassStyle: 1, //排课方式(1-周,2-月,3-固定日期,4-约课)
ClassHours: '',
ClassHourMinute: '',
},
stuList: [],
selectedStu: [],
stuColumns: [{
name: 'GuestName',
label: '姓名',
field: 'GuestName',
align: 'left'
},
{
name: 'Mobile',
label: '电话',
field: 'Mobile',
align: 'left'
},
{
name: 'ClassName',
label: '班级',
field: 'ClassName',
align: 'left'
},
{
name: 'CourseName',
label: '课程',
field: 'CourseName',
align: 'left'
},
]
}
},
// watch: {
// selected: {
// handler(val) {
// console.log(302, val)
// },
// deep: true
// },
// selectedStu: {
// handler(val) {
// console.log(353, val)
// },
// deep: true
// }
// },
mounted() {
let u = Lockr.get("loginUserInfo")
if (u) {
this.queryClass.Teacher_Id = u.AccountId
}
this.getClass()
},
methods: {
closeSaveForm() {
this.$emit('close')
this.persistent = false
},
changeClass(val) {
if (!val) {
return
}
this.currentClass = []
let list = this.classList.find(x => {
return x.ClassId == val
}).PlanList
list.map(item => {
item.TimeList.map(_item => {
let obj = JSON.parse(JSON.stringify(item))
delete obj.TimeList
obj = {
...obj,
..._item
}
this.currentClass.push(obj)
})
})
this.currentClass.forEach((e, i) => {
e.index = i + 1
})
this.getNotClassStudentList()
},
getClass() {
getClassDropDownList(this.queryClass).then(res => {
this.classList = [];
this.msg.ClassId = 0
if (res.Code == 1) {
res.Data.forEach(x => {
x.PlanList.forEach(y => {
let newPlan = JSON.parse(JSON.stringify(y))
y.NewPlan = newPlan
})
})
this.classList = res.Data;
this.classListAll = res.Data;
var obj = {
ClassName: '请选择',
ClassId: 0
}
this.classList.unshift(obj);
}
});
},
//筛选班级
filterFn(val, update) {
update(() => {
if (val === '') {
this.classList = JSON.parse(JSON.stringify(this.classListAll))
} else {
const needle = val.toLowerCase();
this.classList = this.classListAll.filter(v => v.ClassName.toLowerCase().indexOf(
needle) > -1);
}
})
},
//获取除本班学生的列表
getNotClassStudentList() {
if (this.msg.ClassId < 0 || !this.msg.ClassId) {
this.$q.notify({
type: 'negative',
position: 'top',
message: "请选择班级"
})
return
}
if (!this.msg.GuestName) {
this.msg.GuestName = ""
}
let obj = {
ClassId: this.msg.ClassId,
GuestName: this.msg.GuestName
}
getNotClassStudentList(obj).then(res => {
if (res.Code === 1) {
this.stuList = res.Data
}
})
},
//提交
save() {
if (this.msg.ClassId <= 0) {
this.$q.notify({
type: 'negative',
position: 'top',
message: "请选择班级"
})
return
}
if (this.selected.length === 0) {
this.$q.notify({
type: 'negative',
position: 'top',
message: "至少选择一次上课时间"
})
return
}
if (this.selectedStu.length === 0) {
this.$q.notify({
type: 'negative',
position: 'top',
message: "至少选择一个学员"
})
return
}
let timesIds = this.selected.map(e => {
return e.ClassTimeId
}).toString()
let stuIds = this.selectedStu.map(e => {
return e.Id
}).toString()
let obj = {
Id: 0,
ClassId: this.msg.ClassId,
ClassTimeIds: timesIds,
OrderGuestIds: stuIds,
Remarks: this.msg.Remarks
}
console.log(366,obj)
this.saveLoading = true
setStuInviteApply(obj).then(res => {
this.saveLoading = false
if (res.Code === 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '操作成功!',
position: 'top'
})
this.persistent=false
this.$emit('success')
} else {
this.$q.notify({
type: 'negative',
position: 'top',
message: res.Message
})
}
}).catch(err => {
this.saveLoading = true
})
}
},
}
</script>
<style>
</style>
......@@ -122,7 +122,12 @@
</template>
<template v-slot:body-cell-TeacherName="props">
<q-td auto-width :props="props">
<span style="color:#3FC4FF;">{{props.row.TeacherName}}</span>
<template v-if="props.row.Teacher_Id==0">
<span style="color:red">未指定</span>
</template>
<template v-else>
<span style="color:#3FC4FF;">{{props.row.TeacherName}}</span>
</template>
</q-td>
</template>
<template v-slot:body-cell-ClassPersion="props">
......
......@@ -114,15 +114,20 @@
<div class="d2">
<div class="row" style="align-items: center ;margin:0;padding:0;">
<span class="d2-n">带课老师</span>
<q-avatar rounded size="sm" v-if="item.TeacherHead&&item.TeacherHead!=''">
<img :src="item.TeacherHead" />
</q-avatar>
<q-avatar v-else rounded size="sm" color="teal-10" text-color="white">
<template v-if="item.TeacherName&&item.TeacherName!=''">
{{item.TeacherName.substr(0,1)}}
</template>
</q-avatar>
&nbsp;{{item.TeacherName}}
<template v-if="item.Teacher_Id==0">
<span style="color:red">未指定</span>
</template>
<template v-else>
<q-avatar rounded size="sm" v-if="item.TeacherHead&&item.TeacherHead!=''">
<img :src="item.TeacherHead" />
</q-avatar>
<q-avatar v-else rounded size="sm" color="teal-10" text-color="white">
<template v-if="item.TeacherName&&item.TeacherName!=''">
{{item.TeacherName.substr(0,1)}}
</template>
</q-avatar>
&nbsp;{{item.TeacherName}}
</template>
</div>
<div><span class="d2-n">上课教室</span>{{item.RoomName}}</div>
<div><span class="d2-n">上课时间</span><span
......@@ -524,6 +529,14 @@
},
//立即报名和插班报名
placeAnorder(item, type) {
if(item.Teacher_Id==0){
this.$q.notify({
type: 'negative',
position: "top",
message: `请联系班级管理员,关联班级老师后报名`
})
return
}
this.isChaBan = type;
this.orderObj.ClassId = item.ClassId;
this.orderObj.Unit_Price = item.SellPrice;
......
......@@ -44,6 +44,16 @@
<q-btn color="accent" size="sm" class="q-mr-md" icon="add" label="添加试听" @click="editVisitor(null)" />
</div>
</template>
<template v-slot:body-cell-TeacherName="props">
<q-td>
<template v-if="props.row.TeacherId==0">
<span style="color:red">未指定</span>
</template>
<template>
{{props.row.TeacherName}}
</template>
</q-td>
</template>
<template v-slot:body-cell-ClassContent="props">
<q-td :props="props">
<div style="min-width: 150px;word-break: break-word;white-space: normal;">
......
......@@ -23,6 +23,10 @@
<!-- 转班流程 -->
<transfer-form></transfer-form>
</template>
<template v-if="tabCheck=='5'">
<!-- 临时上课邀请流程 -->
<temporaryClass-form></temporaryClass-form>
</template>
</div>
</div>
</template>
......@@ -31,6 +35,7 @@
import changeclassflowForm from '../../components/flow/changeclassflow-form';
import stopclassflowForm from '../../components/flow/stopclassflow-form';
import transferForm from '../../components/flow/transfer-form';
import temporaryClassForm from '../../components/flow/temporaryClass-form';
export default {
meta: {
title: "流程设置"
......@@ -39,7 +44,8 @@
backclassflowForm,
changeclassflowForm,
stopclassflowForm,
transferForm
transferForm,
temporaryClassForm
},
data() {
return {
......@@ -58,6 +64,10 @@
{
name: "4",
label: "转班流程"
},
{
name: "5",
label: "临时上课邀请流程"
}
],
tabCheck: '1',
......
......@@ -137,7 +137,6 @@
import stopbillForm from '../../components/sale/stopbill-form';
import createbackbillForm from '../../components/sale/createbackbill-form';
import ordertransForm from '../../components/sale/ordertrans-form';
export default {
meta: {
title: "退课单据"
......
......@@ -74,6 +74,8 @@
<template v-slot:top="props">
<div class="col-2 q-table__title">学员管理</div>
<q-space />
<q-btn color="accent" size="sm" class="q-mr-md" label="临时上课邀请"
@click="isShowProvisionalInvite=true" />
</template>
<!--课时-->
<template v-slot:body-cell-TotalPlanNum="props">
......@@ -109,6 +111,7 @@
</template>
</q-table>
<StopLesson-form v-if="isShowStopLesson" :setObj="stuObj" @success="reloadPage" @close="closeMenuSaveForm"/>
<ProvisionalInvite-form v-if="isShowProvisionalInvite" @close="closeMenuSaveForm"/>
</div>
......@@ -134,6 +137,7 @@
// import classinfoForm from '../../components/course/classinfo-form';
// import othercourseForm from '../../components/course/othercourse-form';
import StopLessonForm from '../../components/teacher/stopLessonForm'
import ProvisionalInviteForm from '../../components/teacher/provisionalInviteForm'
export default {
meta: {
title: "班级管理"
......@@ -142,7 +146,8 @@
// classForm,
// classinfoForm,
// othercourseForm,
StopLessonForm
StopLessonForm,
ProvisionalInviteForm
},
data() {
return {
......@@ -228,6 +233,7 @@
allClassList: [],
isShowStopLesson:false,
stuObj:{},
isShowProvisionalInvite:false,
}
},
created() {
......@@ -381,6 +387,7 @@
//关闭弹窗
closeMenuSaveForm() {
this.isShowStopLesson = false;
this.isShowProvisionalInvite=false;
},
//刷新页面
reloadPage() {
......
......@@ -149,6 +149,9 @@
<changebill-form v-if="isShowChangeBillForm" :seting-obj="billObj" :showType="showType" @close="closeBillForm"
@success="refreshPage">
</changebill-form>
<ordertrans-form v-if="isShowTransForm" :seting-obj="billObj" :showType="showType" @close="closeBillForm"
@success="refreshPage">
</ordertrans-form>
</div>
</div>
</template>
......@@ -166,6 +169,7 @@
import backbillForm from '../../components/sale/backbill-form';
import changebillForm from '../../components/sale/changebill-form';
import ordertransForm from '../../components/sale/ordertrans-form'
export default {
meta: {
......@@ -174,6 +178,7 @@
components: {
backbillForm,
changebillForm,
ordertransForm
},
data() {
return {
......@@ -268,6 +273,7 @@
EmployeeList: [],
AllemployeeList: [],
IsEditEduReceipAudit: false, //是否有修改审核人权限
isShowTransForm:false
}
},
created() {
......@@ -307,6 +313,7 @@
closeBillForm() {
this.isShowBackBillForm = false;
this.isShowChangeBillForm = false;
this.isShowTransForm = false;
this.billObj = {};
},
//显示表单
......@@ -319,6 +326,10 @@
else if (item.ReceiptType == 2) {
this.isShowBackBillForm = true;
}
//转班
else if(item.ReceiptType == 5){
this.isShowTransForm = true;
}
this.showType = type;
this.billObj = item;
this.isShowEdit = false;
......
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