Commit 507ba137 authored by 罗超's avatar 罗超

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

parents 40d436c6 f7bebb55
......@@ -579,3 +579,16 @@ export function SetOrderChange(data) {
});
}
/**
* 保存分拆申请
*/
export function SetOrderSplit(data) {
return request({
url: '/OrderChange/SetOrderSplit',
method: 'post',
data
});
}
import request from '../../utils/request'
/**
* 获取部门分页列表
*/
export function getDeptPage(data) {
return request({
url: '/User/GetDeptPageList',
method: 'post',
data
});
}
<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: 6
},
isShowProcess: false, //显示旁边弹窗
processObj: {}, //传递子组件
flowObj: {
FlowId: 6,
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>
......@@ -452,10 +452,6 @@
if (!tempArray) {
tempArray = [];
}
tempArray.unshift({
SId: 0,
SName: "不限"
})
this.schoolList = tempArray;
}
})
......
......@@ -297,9 +297,14 @@
<q-item-label @click="showContinueClass(item)">续课</q-item-label>
</q-item-section>
</q-item>
<q-item clickable v-close-popup v-close-popup v-if="AuthorityObj.isShowTransOrder">
<q-item clickable v-close-popup v-close-popup v-if="AuthorityObj.isShowTransClassOrder">
<q-item-section>
<q-item-label @click="transferClass(item)">转班</q-item-label>
<q-item-label @click="transferClass(item,1)">转班</q-item-label>
</q-item-section>
</q-item>
<q-item clickable v-close-popup v-if="AuthorityObj.isShowSeparater">
<q-item-section>
<q-item-label @click="transferClass(item,2)">分拆</q-item-label>
</q-item-section>
</q-item>
</q-list>
......@@ -812,7 +817,7 @@
@success="refreshOrder"></continueclass-form>
<!-- 转班申请 -->
<transferclass-form v-if="isShowTransferClass" :save-obj="orderObj" @close="closeTransferClassForm"
<transferclass-form v-if="isShowTransferClass" :save-obj="orderObj" :ChangeType="ChangeType" @close="closeTransferClassForm"
@success="refreshOrder"></transferclass-form>
<!-- 查看报价单 -->
......@@ -936,6 +941,7 @@
isShowContract: true, //是否显示合同
isShowEdit: true, //是否显示修改订单按钮
isShowTransClassOrder: false, //是否显示转班按钮
isShowSeparater:false //是否显示分拆
},
isShowEduForm: false, //是否显示新增修改合同弹窗
......@@ -947,7 +953,8 @@
isEditOrder: false, //是否有【总经理】修改订单但权限
newModityOrderType: 0,
isChaBan: 0, //是否插班(0-正常报入,1-插班报入)
isShowTransferClass: false //是否显示转班
isShowTransferClass: false, //是否显示转班
ChangeType:1 //1-转班 2-分拆
}
},
created() {
......@@ -1038,6 +1045,9 @@
if (this.authObj.isShowTransClassOrder != null && this.authObj.isShowTransClassOrder) {
this.AuthorityObj.isShowTransClassOrder = this.authObj.isShowTransClassOrder;
}
if (this.authObj.isShowSeparater !=null && this.authObj.isShowSeparater){
this.AuthorityObj.isShowSeparater = this.authObj.isShowSeparater;
}
}
},
//关闭报价单
......@@ -1090,8 +1100,9 @@
},
//转班
transferClass(item) {
transferClass(item,type) {
this.orderObj = item;
this.ChangeType = type;
this.isShowTransferClass = true;
},
......
......@@ -110,7 +110,8 @@
<template v-if="isShowTuike">
<q-card-section>
<div class="text-h6">
转班申请<span class="Title_remark">注:找不到学员?请确认学员是否已退课或已续班</span>
{{transMsg.ChangeType==1?'转班申请':'分拆'}}
<span class="Title_remark">注:找不到学员?请确认学员是否已退课或已续班</span>
</div>
</q-card-section>
<div style="margin:20px;border-bottom:1px solid #E2E2E2">
......@@ -124,9 +125,13 @@
</span>
<span style="width:10%">{{item.GuestStateStr}}</span>
<span style="width:20%;" class="guest_Status">
<span v-if="item.GuestState==1" @click="clickItem(item)">转班</span>
<span v-if="item.GuestState==1" @click="clickItem(item)">
{{transMsg.ChangeType==1?'转班':'分拆'}}
</span>
<template v-if="chooseItem&&chooseItem.Id==item.Id">
<span style="margin-left:10px;" @click="cancelApply">取消转班</span>
<span style="margin-left:10px;" @click="cancelApply">
取消{{transMsg.ChangeType==1?'转班':'分拆'}}
</span>
</template>
</span>
</div>
......@@ -162,33 +167,35 @@
<td></td>
</tr>
</table>
<div class="row" style="margin-top:20px;">
<q-input filled v-model="transMsg.OutTime" class="col-6 q-pr-lg" 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="transMsg.OutTime" :options="optionsFn2" @input="getOutTime" />
</q-popup-proxy>
</q-icon>
</template>
</q-input>
<q-input filled v-model="transMsg.EffectiveDate" class="col-6" mask="date" label="生效日期">
<template v-slot:append>
<q-icon name="event" class="cursor-pointer">
<q-popup-proxy ref="qDateProxy2" transition-show="scale" transition-hide="scale">
<q-date v-model="transMsg.EffectiveDate" :options="optionsFn" @input="checkEffectDate()" />
</q-popup-proxy>
</q-icon>
</template>
</q-input>
</div>
<div class="row" style="margin-top:20px;">
<template v-if="transMsg.ChangeType==1">
<q-input filled v-model="transMsg.OutTime" class="col-6 q-pr-lg" 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="transMsg.OutTime" :options="optionsFn2" @input="getOutTime" />
</q-popup-proxy>
</q-icon>
</template>
</q-input>
</template>
<q-input filled v-model="transMsg.EffectiveDate" class="col-6" mask="date" label="生效日期">
<template v-slot:append>
<q-icon name="event" class="cursor-pointer">
<q-popup-proxy ref="qDateProxy2" transition-show="scale" transition-hide="scale">
<q-date v-model="transMsg.EffectiveDate" :options="optionsFn" @input="checkEffectDate()" />
</q-popup-proxy>
</q-icon>
</template>
</q-input>
</div>
<q-input filled stack-label :dense="false" v-model="transMsg.Remarks" style="margin-top: 20px" type="textarea"
class="col-12" label="转班原因" />
class="col-12" :label="transMsg.ChangeType==1?'转班原因':'分拆原因'" />
<q-separator />
</div>
<q-card-actions align="right" class="bg-white">
<q-btn label="取消" flat color="grey-10" style="font-weight:400 !important" @click="closeContinueClassForm" />
<q-btn label="确认转班" color="accent" class="q-px-md" style="font-weight:400 !important"
<q-btn :label="transMsg.ChangeType==1?'确认转班':'确认分拆'" color="accent" class="q-px-md" style="font-weight:400 !important"
@click="setRenewOrder" />
</q-card-actions>
</template>
......@@ -251,7 +258,7 @@
</div>
<div class="continu_Div" style="width:20%">
<div>价格</div>
<div style="margin:5px 0;">续费价格:{{cItem.SellPrice}}</div>
<div style="margin:5px 0;">售价:{{cItem.NewSellPrice}}</div>
<template v-if="cItem.ClassStepPriceList&&cItem.ClassStepPriceList.length>0">
更多优惠价格
<span class="iconfont icon-xiangxia" style="color: #2961FE;font-size: 10px"></span>
......@@ -292,7 +299,8 @@
<script>
import {
getSchoolDropdown,
SetOrderChange
SetOrderChange,
SetOrderSplit
} from '../../api/school/index'
import {
GetClassTypeList
......@@ -312,6 +320,10 @@
type: Object,
default: null,
},
ChangeType: {
type: Number,
default: null
}
},
data() {
return {
......@@ -367,6 +379,7 @@
this.continueClassMsg.OrderId = this.saveObj.OrderId;
this.continueClassMsg.ClassId = this.saveObj.ClassId;
this.classMsg.ClassId = this.saveObj.ClassId;
this.transMsg.ChangeType = this.ChangeType;
this.getSchool();
this.GetClassTypeList();
......@@ -485,13 +498,15 @@
})
return;
}
if (this.transMsg.OutTime=='') {
this.$q.notify({
type: 'negative',
position: "top",
message: `请选择转出日期`
})
return;
if(this.transMsg.ChangeType==1){
if (this.transMsg.OutTime=='') {
this.$q.notify({
type: 'negative',
position: "top",
message: `请选择转出日期`
})
return;
}
}
if (this.transMsg.EffectiveDate=='') {
this.$q.notify({
......@@ -501,20 +516,37 @@
})
return;
}
SetOrderChange(this.transMsg).then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '转班申请成功!',
position: 'top'
})
//调用父页面成功方法
this.$emit('success');
this.IsShowContinueClassDialog = false
}
})
if(this.transMsg.ChangeType==1){
SetOrderChange(this.transMsg).then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '保存成功!',
position: 'top'
})
//调用父页面成功方法
this.$emit('success');
this.IsShowContinueClassDialog = false
}
})
}else{
SetOrderSplit(this.transMsg).then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '保存成功!',
position: 'top'
})
//调用父页面成功方法
this.$emit('success');
this.IsShowContinueClassDialog = false
}
})
}
},
//获取校区列表
getSchool() {
......@@ -524,10 +556,6 @@
if (!tempArray) {
tempArray = [];
}
tempArray.unshift({
SId: 0,
SName: "不限"
})
this.schoolList = tempArray;
}
})
......@@ -581,13 +609,15 @@
this.transMsg.EffectiveDate=''
},
checkEffectDate(){
if(this.transMsg.OutTime==''){
this.$q.notify({
type: 'negative',
position: "top",
message: `请先选择转出日期`
})
this.transMsg.EffectiveDate=''
if(this.transMsg.ChangeType==1){
if(this.transMsg.OutTime==''){
this.$q.notify({
type: 'negative',
position: "top",
message: `请先选择转出日期`
})
this.transMsg.EffectiveDate=''
}
}
this.$refs.qDateProxy2.hide()
}
......
......@@ -686,7 +686,7 @@
<p>
关联单号:
<span style="border-bottom: 1px solid #111;height: 34px;line-height: 34px;">
<el-input type="text" v-model='msg.RelevanceFrId' placeholder="如:123,234" onkeyup="this.value=this.value.replace(/[^0-9\,]/,'')"/>
<input type="text" v-model='msg.RelevanceFrId' placeholder="如:123,234" onkeyup="this.value=this.value.replace(/[^\d\,]/g,'')"/>
</span>
</p>
<template v-if="GetDetail.FrID!=0">
......@@ -827,6 +827,29 @@
<el-button size="small" type="danger" @click="maxmoneyTips=false">确 定</el-button>
</span>
</el-dialog>
<q-dialog v-model="costmode" persistent transition-show="scale" transition-hide="scale" >
<q-card style="width: 700px;max-width:700px;">
<q-card-section>
<div class="text-h6">为规范财务管理工作,关于财务单据制单和报销,特作以下温馨提示</div>
</q-card-section>
<q-card-section>
<div class="text-">
1.正确选取财务单据的归属校区和部门。<br>
2.与班级或活动相关的收支单据,应相关联。<br>
3.财务单据请上传相关原始附件。支出单据请提供合法票据(发票),凭票报销。如无法提供发票请特殊备注说明原因并单独制单。办公用品请附入库清单。<br>
4.支出单尽量选择公对公走账,如必须公对私请特殊备注说明原由。<br>
5.支出单请详细备注:使用校区及用途。<br>
6.原则上凭票报销,因特殊情况如发票后补,请及时补回发票,如跨月才提供发票应走借款程序,做特殊处理。<br>
7.大于5000元以上的支出须提供合同,并上传至附件。
</div>
</q-card-section>
<q-card-actions align="right">
<q-btn color="primary" label="我知道了" @click="costmode = false" />
</q-card-actions>
</q-card>
</q-dialog>
</div>
</template>
<script>
......@@ -970,7 +993,8 @@
rowsPerPage: 12,
SName: "",
Status: '-1'
}
},
costmode:true,
}
},
methods: {
......@@ -2073,6 +2097,10 @@
if (this.$route.query.edit) {
// 编辑
this.msg.FrID = this.$route.query.FrID;
console.log(this.$route.query.FrID,'财务单据id')
if( this.msg.FrID>0){
this.costmode= false
}
this.Financial_post_Get(this.$route.query.FrID, 0);
} else {
if (this.$route.query.czmsg) {
......
......@@ -588,7 +588,7 @@
<p>
关联单号:
<span style="border-bottom: 1px solid #111;height: 34px;line-height: 34px;">
<el-input type="text" v-model='msg.RelevanceFrId' placeholder="如:123,234" onkeyup="this.value=this.value.replace(/[^0-9\,]/,'')"/>
<input type="text" v-model='msg.RelevanceFrId' placeholder="如:123,234" onkeyup="this.value=this.value.replace(/[^\d\,]/g,'')"/>
</span>
</p>
</div>
......@@ -672,6 +672,29 @@
</div>
</div>
</div>
<q-dialog v-model="costmode" persistent transition-show="scale" transition-hide="scale" >
<q-card style="width: 700px;max-width:700px;">
<q-card-section>
<div class="text-h6">为规范财务管理工作,关于财务单据制单和报销,特作以下温馨提示</div>
</q-card-section>
<q-card-section>
<div class="text-">
1.正确选取财务单据的归属校区和部门。<br>
2.与班级或活动相关的收支单据,应相关联。<br>
3.财务单据请上传相关原始附件。支出单据请提供合法票据(发票),凭票报销。如无法提供发票请特殊备注说明原因并单独制单。办公用品请附入库清单。<br>
4.支出单尽量选择公对公走账,如必须公对私请特殊备注说明原由。<br>
5.支出单请详细备注:使用校区及用途。<br>
6.原则上凭票报销,因特殊情况如发票后补,请及时补回发票,如跨月才提供发票应走借款程序,做特殊处理。<br>
7.大于5000元以上的支出须提供合同,并上传至附件。
</div>
</q-card-section>
<q-card-actions align="right">
<q-btn color="primary" label="我知道了" @click="costmode = false" />
</q-card-actions>
</q-card>
</q-dialog>
</div>
</template>
<script>
......@@ -830,7 +853,9 @@
rowsPerPage: 12,
SName: "",
Status: '-1'
}
},
costmode:true,
}
},
methods: {
......@@ -1855,6 +1880,9 @@
if (this.$route.query.edit) {
this.edit = this.$route.query.edit;
this.msg.FrID = this.$route.query.FrID;
if( this.msg.FrID>0){
this.costmode= false
}
this.Financial_post_Get(parseInt(this.$route.query.FrID), 0);
this.currentType = 1
this.currentId = this.$route.query.FrID
......
......@@ -222,7 +222,55 @@
<template v-for="(item,index) in DataList" v-loading="loading">
<tr>
<!-- -合同信息-- -->
<td @click="goUrl3('/sale/orderStatistics',item.OrderId)"><span style="cursor: pointer;text-decoration: underline;" >{{item.OrderId}}</span></td>
<td @click="goUrl3('/sale/orderStatistics',item.OrderId)">
<template v-if="item.JoinType==3">
<el-tooltip class="item" effect="dark" content="续费订单" placement="top-start">
<span style="cursor: pointer;text-decoration: underline;color:red" >
{{item.OrderId}}
</span>
</el-tooltip>
</template>
<template v-else-if="item.TargetJoinType==3">
<el-tooltip class="item" effect="dark" content="已续费" placement="top-start">
<span style="cursor: pointer;text-decoration: underline;color:green" >
{{item.OrderId}}
</span>
</el-tooltip>
</template>
<template v-else-if="item.TargetJoinType==4">
<el-tooltip class="item" effect="dark" :content="`已转班【${item.TargetClassName}】,关联订单号${item.TargetOrderId}`" placement="top-start">
<span style="cursor: pointer;text-decoration: underline;color:orange" >
{{item.OrderId}}
</span>
</el-tooltip>
</template>
<template v-else-if="item.TargetJoinType==1">
<template v-if="item.JoinType==3">
<el-tooltip class="item" effect="dark" :content="`原订单${item.SourceOrderId}`" placement="top-start">
<span style="cursor: pointer;text-decoration: underline;color:blue" >
{{item.OrderId}}
</span>
</el-tooltip>
</template>
<template v-else-if="item.JoinType==4">
<el-tooltip class="item" effect="dark" :content="`从【${item.SourceClassName}】转入,关联订单号${item.SourceOrderId}`" placement="top-start">
<span style="cursor: pointer;text-decoration: underline;color:blue" >
{{item.OrderId}}
</span>
</el-tooltip>
</template>
<template v-else>
<span style="cursor: pointer;text-decoration: underline;" >
{{item.OrderId}}
</span>
</template>
</template>
<template v-else>
<span style="cursor: pointer;text-decoration: underline;" >
{{item.OrderId}}
</span>
</template>
</td>
<td>{{item.CreateTime}}</td>
<td @click="goUrl('/sale/contractManage',item.ContractNo)"><span style="cursor: pointer;text-decoration: underline;" >{{item.ContractNo}}</span></td>
<td @click="goUrl('/course/course',item.CourseName)"><span style="cursor: pointer;text-decoration: underline;" >{{item.CourseName}}</span></td>
......
......@@ -130,9 +130,53 @@
:header-cell-style="{backgroundColor:'#f5f6f7', color: '#a8a8b3'}" border style="width: 100%">
<el-table-column prop="OrderId" label="订单号" width='90'>
<template slot-scope="scope">
<div style="text-decoration: underline;cursor: pointer;" @click='gobaoming(scope.row.OrderId)'>
{{scope.row.OrderId}}
</div>
<template v-if="scope.row.JoinType==3">
<el-tooltip class="item" effect="dark" content="续费订单" placement="top-start">
<div style="text-decoration: underline;cursor: pointer;color:red" @click='gobaoming(scope.row.OrderId)'>
{{scope.row.OrderId}}
</div>
</el-tooltip>
</template>
<template v-else-if="scope.row.TargetJoinType==3">
<el-tooltip class="item" effect="dark" content="已续费" placement="top-start">
<div style="text-decoration: underline;cursor: pointer;color:green" @click='gobaoming(scope.row.OrderId)'>
{{scope.row.OrderId}}
</div>
</el-tooltip>
</template>
<template v-else-if="scope.row.TargetJoinType==4">
<el-tooltip class="item" effect="dark" :content="`已转班【${scope.row.TargetClassName}】,关联订单号${scope.row.TargetOrderId}`" placement="top-start">
<div style="text-decoration: underline;cursor: pointer;color:orange" @click='gobaoming(scope.row.OrderId)'>
{{scope.row.OrderId}}
</div>
</el-tooltip>
</template>
<template v-else-if="scope.row.TargetJoinType==1">
<template v-if="scope.row.JoinType==3">
<el-tooltip class="item" effect="dark" :content="`原订单${scope.row.SourceOrderId}`" placement="top-start">
<div style="cursor: pointer;text-decoration: underline;color:blue" @click='gobaoming(scope.row.OrderId)'>
{{scope.row.OrderId}}
</div>
</el-tooltip>
</template>
<template v-else-if="scope.row.JoinType==4">
<el-tooltip class="item" effect="dark" :content="`从【${scope.row.SourceClassName}】转入,关联订单号${scope.row.SourceOrderId}`" placement="top-start">
<div style="cursor: pointer;text-decoration: underline;color:blue" @click='gobaoming(scope.row.OrderId)'>
{{scope.row.OrderId}}
</div>
</el-tooltip>
</template>
<template v-else>
<div style="cursor: pointer;text-decoration: underline;" @click='gobaoming(scope.row.OrderId)'>
{{scope.row.OrderId}}
</div>
</template>
</template>
<template v-else>
<div style="cursor: pointer;text-decoration: underline;" @click='gobaoming(scope.row.OrderId)'>
{{scope.row.OrderId}}
</div>
</template>
</template>
</el-table-column>
<el-table-column prop="ContractNo" width='150' label="合同号"></el-table-column>
......
......@@ -170,6 +170,7 @@
isShowBackClass: true, //显示退课按钮
isShowRenewClass: true, //显示续课按钮
isShowTransClassOrder:true,//现在转班按钮
isShowSeparater: true //显示分拆按钮
}
}
},
......
<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.CourseName" label="课程名称"
@clear="resetSearch" maxlength="20" />
</div>
<div class="col-3">
<select-tree :treeData="TreeCategoryList" :defaultArray="returnString" nodeKey="CateId" :multiple="true"
labelKey="CateName" childrenKey="ChildList" tipText="课程系列" @getChild="getChild"></select-tree>
</div>
<div class="col-3">
<q-input @input="resetSearch" clearable standout="bg-primary text-white" v-model="msg.GuestName" label="学生名称"
@clear="resetSearch" maxlength="20" />
</div>
</div>
</div>
<div class="page-content">
<q-table :pagination="msg" :loading="loading" no-data-label="暂无相关数据" flat
class="sticky-tow-column-table sticky-right-column-table" separator="none" :data="data" :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-CoverImg="props">
<q-td :props="props">
<q-img :src="props.value" spinner-color="white" style="height: 54px; max-width: 100px"
class="rounded-borders">
</q-img>
</q-td>
</template>
<template v-slot:body-cell-CourseIntro="props">
<q-td :props="props">
<span v-html="props.value"></span>
</q-td>
</template>
<template v-slot:body-cell-PreferentialList="props">
<q-td :props="props" style="padding-right:0px">
<div v-for="x in props.value">
<div class="border-bottom" v-if="x.PriceDiscountType == 1">
{{ x.BuyNum }}{{ x.SendNum }}
</div>
<div class="border-bottom" v-if="x.PriceDiscountType == 2">
单人报名享优惠{{x.PriceMoney }}%
</div>
<div class="border-bottom" v-if="x.PriceDiscountType == 3">
双人报名优惠{{x.PriceMoney }}%
</div>
<div class="border-bottom" v-if="x.PriceDiscountType == 4">
续费享优惠{{x.PriceMoney }}%
</div>
<div class="remark-font" v-if="x.PriceDiscountType == 0">
暂无优惠政策
</div>
</div>
<div v-if="!props.value || props.value.length == 0">
<div class="remark-font">暂无优惠政策</div>
</div>
</q-td>
</template>
<template v-slot:body-cell-PreferentialListSellCommission="props">
<q-td :props="props" style="padding-right:0px;padding-left:0px">
<div v-for="x in props.value">
<div class="border-bottom" style="padding-left: 16px;padding-right: 16px"
:class="{ 'text-red': x.SaleCommissionType == 1 }" v-if="x.PriceDiscountType != 0">
{{ x.SaleCommissionType == 1 ? "¥" : ""
}}{{ x.SaleCommissionMoney
}}{{ x.SaleCommissionType == 0 ? "%" : "" }}
</div>
<div v-if="x.PriceDiscountType == 0">
<div class="remark-font">暂无佣金信息</div>
</div>
</div>
<div v-if="!props.value || props.value.length == 0">
<div class="remark-font">暂无佣金信息</div>
</div>
</q-td>
</template>
<template v-slot:body-cell-PreferentialListB2BCommission="props">
<q-td :props="props" style="padding-left:0px">
<div v-for="x in props.value">
<div class="border-bottom" style="padding-left: 16px" :class="{ 'text-red': x.B2BCommissionType == 1 }"
v-if="x.PriceDiscountType != 0">
{{ x.B2BCommissionType == 1 ? "¥" : ""
}}{{ x.B2BCommissionMoney
}}{{ x.B2BCommissionType == 0 ? "%" : "" }}
</div>
<div v-if="x.PriceDiscountType == 0">
<div class="remark-font">暂无佣金信息</div>
</div>
</div>
<div v-if="!props.value || props.value.length == 0">
<div class="remark-font">暂无佣金信息</div>
</div>
</q-td>
</template>
<template v-slot:body-cell-EducationCommission="props">
<q-td :props="props" style="padding-left:0px">
<div v-for="x in props.value">
<div class="border-bottom" style="padding-left: 16px" :class="{ 'text-red': x.EduCommissionType == 1 }"
v-if="x.PriceDiscountType != 0">
{{ x.EduCommissionType == 1 ? "¥" : ""
}}{{ x.EduCommissionMoney
}}{{ x.EduCommissionType == 0 ? "%" : "" }}
</div>
<div v-if="x.PriceDiscountType == 0">
<div class="remark-font">暂无佣金信息</div>
</div>
</div>
<div v-if="!props.value || props.value.length == 0">
<div class="remark-font">暂无佣金信息</div>
</div>
</q-td>
</template>
<template v-slot:body-cell-Status="props">
<q-td :props="props">
<q-badge :color="props.value == 1 ? 'negative' : 'primary'" :label="props.value == 0 ? '正常' : '删除'" />
</q-td>
</template>
<template v-slot:bottom>
<q-pagination class="full-width justify-end" v-model="msg.pageIndex" color="primary" :max="pageCount"
:input="true" @input="changePage" />
</template>
<template v-slot:body-cell-optioned="props">
<q-td :props="props">
<q-btn flat size="xs" icon="edit" color="accent" style="font-weight:400" label="编辑"
@click="EditCourse(props.row, 1)" />
<q-btn flat size="xs" icon="edit" color="accent" style="font-weight:400" label="价格设置"
@click="EditCourse(props.row, 2)" v-if="isHavePriceAction" />
<q-btn-dropdown flat size="xs" color="dark" label="更多" style="margin-left:10px;">
<q-list>
<q-item clickable v-close-popup @click="DeleteCourse(props.row,1)" v-if="props.row.Status==0">
<q-item-section>
<q-item-label>删除</q-item-label>
</q-item-section>
</q-item>
<q-item clickable v-close-popup @click="DeleteCourse(props.row,0)" v-if="props.row.Status==1">
<q-item-section>
<q-item-label>恢复</q-item-label>
</q-item-section>
</q-item>
<q-item clickable v-close-popup @click="goMycourse(props.row)">
<q-item-section>
<q-item-label>课程详情</q-item-label>
</q-item-section>
</q-item>
</q-list>
</q-btn-dropdown>
</q-td>
</template>
</q-table>
</div>
</div>
</template>
<script>
import {
queryCoursePage,
queryCourseCategoryTree,
deleteCourseInfo
} from "../../api/course/index";
import selectTree from "../../components/common/select-tree";
import { openURL } from "quasar";
export default {
meta: {
title: "学员管理"
},
components: {
selectTree,
},
data() {
return {
currentUrl: "",
columns: [{
name: "CoverImg",
label: "课程封面",
field: "CoverImg",
align: "left"
},
{
name: "CourseName",
required: true,
label: "课程名称",
align: "left",
field: row => row.CourseName
},
{
name: "CateName",
required: true,
label: "系列",
align: "left",
field: row => row.CateName
},
{
name: "OriginalPrice",
required: true,
label: "原价",
align: "left",
field: row => row.OriginalPrice.toFixed(2)
},
{
name: "SellPrice",
required: true,
label: "售价",
align: "left",
field: row => row.SellPrice.toFixed(2)
},
{
name: "PreferentialList",
required: true,
label: "优惠政策",
align: "left",
field: row => row.PreferentialList
},
{
name: "PreferentialListSellCommission",
required: true,
label: "销售佣金",
align: "left",
field: row => row.PreferentialList
},
{
name: "PreferentialListB2BCommission",
required: true,
label: "同行佣金",
align: "left",
field: row => row.PreferentialList
},
{
name: "EducationCommission",
required: true,
label: "教育同行佣金",
align: "left",
field: row => row.PreferentialList
},
{
name: "ClassHours",
label: "课时长度",
field: "ClassHours",
align: "left",
format: (val, row) => `${val}课时`
},
{
name: "CreateByName",
label: "创建人",
field: "CreateByName",
align: "left"
},
{
name: "UpdateTimeStr",
label: "更新时间",
field: "UpdateTimeStr",
align: "left"
},
{
name: "Status",
label: "状态",
align: "left",
field: "Status"
},
{
name: "optioned",
label: "操作",
field: "CourseId"
}
],
data: [],
loading: true,
ShowOpts: [{
label: "全部",
value: "-1"
},
{
label: "正常",
value: "0"
},
{
label: "删除",
value: "1"
}
],
msg: {
StartDate:'',
School_Id:-1,
CouseId:'',
ClassId:'',
OrderGuestId:'',
GuestName:'',
},
//课程分类树形列表
TreeCategoryList: [],
returnString: [], //默认值
pageCount: 0,
isShowCourseForm: false, //是否显示课程表单
isShowCoursePriceForm: false, //是否显示课程价格表单
courseObjOption: null, //课程对象
isShowPriceEditBtn: 1 //是否显示价格设置
};
},
mounted() {
if(this.$route.query && this.$route.query.Name){//从订单完成统计跳转过来的带的参数
this.msg.CourseName = decodeURI(this.$route.query.Name)
}
this.getCategorytree();
this.currentUrl = this.$route.path;
this.getcourselist();
},
methods: {
//删除课程
DeleteCourse(item, status) {
let delMsg = {
CourseId: item.CourseId,
Status: status
};
var message = "是否要删除该课程?";
if (status == 0) {
message = "是否要恢复该课程?";
}
this.$q.dialog({
title: '提示信息',
message: message,
cancel: true,
persistent: true,
ok: "确定",
cancel: "取消",
}).onOk(() => {
deleteCourseInfo(delMsg).then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '删除成功!',
position: 'top'
})
this.getcourselist();
} else {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: res.Message,
position: 'top'
})
}
})
}).onCancel(() => {
});
},
gotoSub(obj, routeStr) {
var tempStr = "/course/" + routeStr + "?CourseId=" + obj.CourseId;
this.$router.push({
path: tempStr
});
},
//分类改变
getChild(cateObj) {
var tempStr = "";
if (cateObj && cateObj != "") {
tempStr = cateObj;
}
this.msg.QCateIds = tempStr;
this.msg.pageIndex = 1;
this.getcourselist();
},
getCategorytree() {
this.TreeCategoryList = [];
var qMsg = {};
queryCourseCategoryTree(qMsg).then(res => {
this.TreeCategoryList = res.Data;
});
},
//重新查询
resetSearch() {
this.getcourselist();
},
//翻页
changePage(val) {
this.msg.pageIndex = val;
this.getcourselist();
},
//获取菜单分页列表
getcourselist() {
this.loading = true;
queryCoursePage(this.msg)
.then(res => {
this.loading = false;
this.data = res.Data.PageData;
this.pageCount = res.Data.PageCount;
})
.catch(() => {
this.loading = false;
});
},
//刷新页面
refreshPage() {
this.isShowCourseForm = false;
this.isShowCoursePriceForm = false;
this.getcourselist();
},
//新增修改课程及价格
EditCourse(obj, type) {
if (obj) {
this.courseObjOption = obj;
} else {
this.courseObjOption = null;
}
if (type == 1) {
this.isShowCourseForm = true;
} else {
this.isShowCoursePriceForm = true;
}
},
//关闭弹窗
closeMenuSaveForm() {
this.isShowCourseForm = false;
this.isShowCoursePriceForm = false;
},
//跳转至我的课程
goMycourse(obj) {
var tempStr = window.location.origin +"/#/course/courseinfo?CourseId=" + obj.CourseId;
// this.$router.push({
// path: tempStr
// });
openURL(tempStr)
}
}
};
</script>
<style scoped>
.border-bottom {
border-bottom: 1px dashed #EEE;
padding-bottom: 5px;
margin-bottom: 5px;
}
</style>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
\ No newline at end of file
......@@ -23,10 +23,14 @@
<!-- 转班流程 -->
<transfer-form></transfer-form>
</template>
<template v-if="tabCheck=='5'">
<template v-if="tabCheck=='5'">
<!-- 临时上课邀请流程 -->
<temporaryClass-form></temporaryClass-form>
</template>
<template v-if="tabCheck=='6'">
<!-- 分拆 -->
<separate-form></separate-form>
</template>
</div>
</div>
</template>
......@@ -36,6 +40,7 @@
import stopclassflowForm from '../../components/flow/stopclassflow-form';
import transferForm from '../../components/flow/transfer-form';
import temporaryClassForm from '../../components/flow/temporaryClass-form';
import separateForm from '../../components/flow/separate-form'
export default {
meta: {
title: "流程设置"
......@@ -45,7 +50,8 @@
changeclassflowForm,
stopclassflowForm,
transferForm,
temporaryClassForm
temporaryClassForm,
separateForm
},
data() {
return {
......@@ -68,6 +74,10 @@
{
name: "5",
label: "临时上课邀请流程"
},
{
name: "6",
label: "分拆"
}
],
tabCheck: '1',
......
......@@ -297,7 +297,7 @@
this.isShowTemporaryClass =true;
}
//转班
else if (item.ReceiptType == 5){
else if (item.ReceiptType == 5 || item.ReceiptType==6){
this.isShowClassTrans =true;
}
this.showType = type;
......
......@@ -341,7 +341,7 @@
this.isShowBackBillForm = true;
}
//转班
else if(item.ReceiptType == 5){
else if(item.ReceiptType == 5||item.ReceiptType == 6){
this.isShowTransForm = true;
}
//停课
......
......@@ -1042,6 +1042,11 @@ const routes = [{
component: () =>
import("pages/stuMan/classRecord")
},
{
path: "/stuMan/studentManage",//学管 学员管理
component: () =>
import("pages/stuMan/studentManage")
},
],
},
......
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