Commit 60f89e9b authored by 罗超's avatar 罗超

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

# Conflicts:
#	src/router/routes.js
parents 754ce335 28e6a693
......@@ -20,7 +20,7 @@ export default {
</script>
<style>
@import url("//at.alicdn.com/t/font_2077629_dvjvubdhonm.css");
@import url("//at.alicdn.com/t/font_2077629_2mw9x18p9pv.css");
.q-scrollarea__thumb {
z-index: 999999 !important;
}
......
......@@ -322,4 +322,102 @@ export function getActivityCommissionPeriodsList(data) {
});
}
// 获取留学提成规则
export function getSellStudyAbroadRuleList(data) {
return request({
url: '/SellCommission/GetSellStudyAbroadRuleList',
method: 'post',
data
});
}
// 新增修改留学提成
export function setSellStudyAbroadRule(data) {
return request({
url: '/SellCommission/SetSellStudyAbroadRule',
method: 'post',
data
});
}
// 新增修改留学提成
export function getSellStudyAbroadPeriodsPageList(data) {
return request({
url: '/SellCommission/GetSellStudyAbroadPeriodsPageList',
method: 'post',
data
});
}
// 新增修改留学提成
export function getSellStudyAbroadUserList(data) {
return request({
url: '/SellCommission/GetSellStudyAbroadUserList',
method: 'post',
data
});
}
// 获取留学销售提成明细列表
export function getSellStudyAbroadUserDetailList(data) {
return request({
url: '/SellCommission/GetSellStudyAbroadUserDetailList',
method: 'post',
data
});
}
// 获取销售提成 - 订单跳转列表
export function getSellStudyAbroadForOrderList(data) {
return request({
url: '/SellCommission/GetSellStudyAbroadForOrderList',
method: 'post',
data
});
}
// 获取留学提成统计
export function getSellStudyAbroadStatistics(data) {
return request({
url: '/SellCommission/GetSellStudyAbroadStatistics',
method: 'post',
data
});
}
// 获取留学提成统计
export function getSellStudyAbroadPeriodsList(data) {
return request({
url: '/SellCommission/GetSellStudyAbroadPeriodsList',
method: 'post',
data
});
}
// 生成留学提成
export function setSellStudyAbroadInfo(data) {
return request({
url: '/SellCommission/SetSellStudyAbroadInfo',
method: 'post',
data
});
}
//获取提成发放人员
export function getSellStudyAbroadSendEmployeeList(data) {
return request({
url: '/SellCommission/GetSellStudyAbroadSendEmployeeList',
method: 'post',
data
});
}
//设置已制单人员
export function setSellStudyAbroadSendEmployee(data) {
return request({
url: '/SellCommission/SetSellStudyAbroadSendEmployee',
method: 'post',
data
});
}
......@@ -243,12 +243,24 @@ export function saveBatchQuestionLevel(data) {
}
/**
* 根据题库编号获取题库题型分类列表【试卷组卷使用】
* 根据题库编号获取题库题型列表(单选题、多选题、等)【试卷组卷使用】
* @param {*} data
*/
export function queryQuestionCategoryList(data) {
export function queryQuestionTypeStaticList(data) {
return request({
url: '/Question/GetQuestionCategoryList',
url: '/Question/GetQuestionTypeStaticList',
method: 'post',
data
})
}
/**
* 根据题库编号获取题库题型分类列表(读音选择题、汉字选择题等)【试卷组卷使用】
* @param {*} data
*/
export function queryQuestionCategoryStaticList(data) {
return request({
url: '/Question/GetQuestionCategoryStaticList',
method: 'post',
data
})
......
......@@ -367,3 +367,13 @@ export function regressSourceClass(data) {
data
})
}
// 留学订单确认完成
export function setStudyAboradOrderConfirm(data) {
return request({
url: '/SellCommission/SetStudyAboradOrderConfirm',
method: 'post',
data
});
}
......@@ -467,6 +467,41 @@ export function SetSynvEduEmployee(data) {
})
}
/**
* 获取客户阶段流程列表
*
*/
export function getCustomerStageFlowList(data) {
return request({
url: '/QYCustomer/GetCustomerStageFlowList',
method: 'post',
data
})
}
/**
* 获取客户阶段列表
*
*/
export function getCustomerStageList(data) {
return request({
url: '/QYCustomer/GetCustomerStageList',
method: 'post',
data
})
}
/**
* 新增修改客户阶段
*
*/
export function setCustomerStageInfo(data) {
return request({
url: '/QYCustomer/SetCustomerStageInfo',
method: 'post',
data
})
}
......
......@@ -342,12 +342,11 @@
insert(type) {
if(type==1){
this.addMsg.Content = this.addMsg.Content + '##客户名称##'
}else if(type==2){
this.addMsg.Content = this.addMsg.Content + '##员工名称##'
}else{
this.addMsg.Content = this.addMsg.Content + '##员工别名##'
}
// else if(type==2){
// this.addMsg.Content = this.addMsg.Content + '##员工名称##'
// }else{
// this.addMsg.Content = this.addMsg.Content + '##员工别名##'
// }
this.gettrigger()
},
selectimg() {//素材选择 图片模式
......
......@@ -314,9 +314,9 @@
methods: {
//是否可修改
isEdit(item) {
// if (this.currentUserInfo.Id == 1) {
// return true;
// }
if (this.currentUserInfo.Id == 1) {
return true;
}
return this.currentUserInfo.Id == item.CreateBy &&
(item.ExamineStatus == 0 || item.ExamineStatus == 3 || item.ExamineStatus == 4)
},
......
......@@ -20,7 +20,8 @@
</template>
<template v-slot:body-cell-optioned="props">
<q-td :props="props">
<q-btn flat size="xs" color="accent" style="font-weight: 400" label="修改" @click="publishExam(props.row)" />
<!--v-if="props.row.IsEdit==1"-->
<q-btn flat size="xs" color="accent" style="font-weight: 400" label="修改" @click="publishExam(props.row)" />
<q-btn-dropdown flat size="xs" color="dark" label="更多" style="margin-left: 10px">
<q-list>
<q-item clickable v-close-popup @click="submitExamAudit(props.row)"
......@@ -101,8 +102,14 @@
align: "left",
},
{
name: "ExamTimes",
name: "TestStatusStr",
label: "考试时长",
field: "TestStatusStr",
align: "left",
},
{
name: "ExamTimes",
label: "考试状态",
field: "ExamTimes",
align: "left",
},
......
......@@ -69,6 +69,12 @@
label: '模板名称',
field: 'TemplateName',
align: 'left',
},
{
name: 'GroupTypeName',
label: '组卷类型',
field: 'GroupTypeName',
align: 'left',
},
{
name: 'TemplateScore',
......
......@@ -37,7 +37,18 @@
.vClozeQuestionBold {
font-weight: bold;
}
.chooseOptionList:before{
content: "-";
display: block;
line-height: 1.5em;
color: transparent;
}
.chooseOptionList:after{
content: "-";
display: block;
line-height: 1em;
color: transparent;
}
</style>
<template>
<div class="vClozeQuestion">
......@@ -54,7 +65,7 @@
</thead>
<tbody class="chooseOptionList">
<tr v-for="(subItem,subIndex) in item.OptionList" :key="subIndex">
<td style="width:40px;text-align:center;">
<td style="width:40px;text-align:center;height:50px;">
<template v-if="isOperate">
<div class="Answer_List" @click="ChangeItem(item,subItem)" :class="{'Is_Answer':subItem.IsAnswer}">
{{subItem.Name}}
......
......@@ -48,15 +48,15 @@
<td colspan="2"><span v-if="data&&data.IsMutex==1" style="font-size:13px;">答案顺序打乱也判正确</span></td>
</tr>
<tr>
<td colspan="2">1. 一个空有多种答案时请用";"隔开。如:水;H2O</td>
<td colspan="2" style="height:40px;">1. 一个空有多种答案时请用";"隔开。如:水;H2O</td>
</tr>
<tr>
<td colspan="2">2. 若试题答案是数字,可设置范围,两个数字之间用"-"。如:1-9,学生填写1到9之间的数字都算正确(包括1和9)</td>
<td colspan="2" style="height:40px;">2. 若试题答案是数字,可设置范围,两个数字之间用"-"。如:1-9,学生填写1到9之间的数字都算正确(包括1和9)</td>
</tr>
</tbody>
<tfoot v-if="isShowAnswer">
<tr v-if="isShowStudentAnswer">
<td class="v_fillInBold">
<td class="v_fillInBold" style="height:40px;">
考生答案
</td>
<td>
......@@ -73,8 +73,8 @@
</tr>
</template>
<tr v-if="isShowStudentAnswer">
<td colspan="2">
<q-input v-if="isEditStudentScore" standout="bg-primary text-white" v-model="data.StudentScore" label="得分:"
<td colspan="2" style="height:70px;">
<q-input v-if="isEditStudentScore" filled style="width:180px;" v-model="data.StudentScore" label="得分:"
maxlength="20" @input="getQuestionScore" />
<span v-else class="v_fillInBold">考生得分:{{data.StudentScore}}</span>
</td>
......
......@@ -7,11 +7,17 @@
.v_judgeQuestionBold {
font-weight: bold
}
.v_judgeTable tfoot:before{
content: "-";
display: block;
line-height: 1em;
color: transparent;
}
</style>
<template>
<div class="v_judgeQuestion">
<table v-if="data&&data.QuestionContentObj&&data.QuestionContentObj.length>0" class="common_TiTable">
<table v-if="data&&data.QuestionContentObj&&data.QuestionContentObj.length>0" class="common_TiTable judgeTable">
<tbody v-for="(item,index) in data.QuestionContentObj" :key="index">
<tr>
<td style="width:50px;text-align:center;">
......@@ -34,15 +40,15 @@
</tbody>
<tfoot v-if="isShowAnswer">
<tr>
<td colspan="2" class="v_judgeQuestionBold">正确答案:{{data.Answer}}</td>
<td colspan="2" style="height:40px;" class="v_judgeQuestionBold">正确答案:{{data.Answer}}</td>
</tr>
<tr v-if="isShowStudentAnswer">
<td colspan="2" class="v_judgeQuestionBold" :style="{color:data.Answer ==data.StundetAnswer?'#67c23a':'red'}">
<td colspan="2" class="v_judgeQuestionBold" style="height:40px;" :style="{color:data.Answer ==data.StundetAnswer?'#67c23a':'red'}">
考生答案:{{data.StundetAnswer}}</td>
</tr>
<tr v-if="isShowStudentAnswer">
<td colspan="2">
<q-input v-if="isEditStudentScore" standout="bg-primary text-white" v-model="data.StudentScore" label="得分:"
<td colspan="2" style="height:70px;">
<q-input v-if="isEditStudentScore" filled style="width:180px" v-model="data.StudentScore" label="得分:"
maxlength="20" @input="getQuestionScore" />
<span v-else class="v_judgeQuestionBold">考生得分:{{data.StudentScore}}</span>
</td>
......
......@@ -23,11 +23,10 @@
.v_matchingQuestionBold {
font-weight: bold;
}
</style>
<template>
<div class="v_matchingQuestion">
<table v-if="data&&data.QuestionContentObj&&data.QuestionContentObj.length>0" class="common_TiTable">
<table v-if="data&&data.QuestionContentObj&&data.QuestionContentObj.length>0" class="common_TiTable" style="width:360px;">
<thead>
<tr>
<th colspan="2">第一组</th>
......@@ -58,12 +57,14 @@
<span class="line_center"></span>
</td>
<td>
<select v-model="data.QuestionContentObj[2][index].Content" class="selectBox2">
<template v-for="(cItem,cIndex) in data.QuestionContentObj[1]">
<option :key="cIndex" :label="cItem.Name" :value="cItem.Name">
</option>
</template>
</select>
<el-select v-model="data.QuestionContentObj[2][index].Content" style="width:100px" size="small" placeholder="请选择">
<el-option
v-for="(cItem,cIndex) in data.QuestionContentObj[1]"
:key="cIndex"
:label="cItem.Name"
:value="cItem.Name">
</el-option>
</el-select>
</td>
</tr>
</table>
......
......@@ -6,12 +6,19 @@
.v_multipleQuestionBold {
font-weight: bold;
height:40px;
}
.mutiTable tfoot:before{
content: "-";
display: block;
line-height: 1em;
color: transparent;
}
</style>
<template>
<div class="v_multipleQuestion">
<table v-if="data&&data.QuestionContentObj&&data.QuestionContentObj.length>0" class="common_TiTable">
<table v-if="data&&data.QuestionContentObj&&data.QuestionContentObj.length>0" class="common_TiTable mutiTable">
<tbody v-for="(item,index) in data.QuestionContentObj" :key="index">
<tr>
<td style="width:40px;text-align:center;">
......@@ -27,7 +34,7 @@
</div>
</template>
</td>
<td>
<td style="height:40px;">
<div class="InpDIV" style="border:0;" v-html="item.Content"></div>
</td>
</tr>
......@@ -41,18 +48,21 @@
:style="{color:data.Answer ==data.StundetAnswer?'#67c23a':'red'}">考生答案:{{data.StundetAnswer}}</td>
</tr>
<tr v-if="isShowStudentAnswer">
<td colspan="2">
<q-input v-if="isEditStudentScore" standout="bg-primary text-white" v-model="data.StudentScore" label="得分:"
<td colspan="2" style="height:70px;">
<q-input v-if="isEditStudentScore" style="width:180px;" filled v-model="data.StudentScore" label="得分:"
maxlength="20" @input="getQuestionScore" />
<span v-else class="v_multipleQuestionBold">考生得分:{{data.StudentScore}}</span>
</td>
</tr>
<tr>
<td colspan="2">
<span class="v_multipleQuestionBold">
解析:
</span>
<span v-html="data.AnswerParse"></span></td>
<div style="display:flex;">
<span class="v_multipleQuestionBold">
解析:
</span>
<span v-html="data.AnswerParse"></span>
</div>
</td>
</tr>
</tfoot>
</table>
......
......@@ -26,6 +26,7 @@
.v_readingComprehensioQuestionBold {
font-weight: bold;
height:40px;
}
</style>
......@@ -164,17 +165,17 @@
</tr>
</template>
<tr v-if="isShowAnswer">
<td colspan="2" class="v_readingComprehensioQuestionBold">
<td colspan="2" style="height:40px" class="v_readingComprehensioQuestionBold">
答案: {{data.QuestionAnswerList[index].SubAnswer}}
</td>
</tr>
<tr v-if="isShowStudentAnswer">
<td colspan="2" class="v_readingComprehensioQuestionBold" :style="{color:data.QuestionAnswerList[index].SubAnswer ==data.AnswerList[index].SubAnswer?'#67c23a':'red'}">
<td colspan="2" style="height:40px" class="v_readingComprehensioQuestionBold" :style="{color:data.QuestionAnswerList[index].SubAnswer ==data.AnswerList[index].SubAnswer?'#67c23a':'red'}">
学生答案: {{data.AnswerList[index].SubAnswer}}
</td>
</tr>
<tr v-if="isShowStudentAnswer">
<td colspan="2">
<td colspan="2" style="height:40px">
<q-input v-if="isEditStudentScore" standout="bg-primary text-white"
v-model="data.AnswerList[index].StudentScore" label="得分:" maxlength="20" @input="getQuestionScore" />
<span v-else class="v_readingComprehensioQuestionBold">考生得分:{{data.AnswerList[index].StudentScore}}</span>
......
......@@ -14,11 +14,16 @@
.v_sharingChooseQuestionBold {
font-weight: bold;
}
.shareChooseTable td{
vertical-align: middle!important;
}
.shareChooseTable td p{
margin:0!important;
}
</style>
<template>
<div class="v_sharingChooseQuestion">
<table v-if="data.QuestionContentObj&&data.QuestionContentObj.length>0" class="common_TiTable">
<table v-if="data.QuestionContentObj&&data.QuestionContentObj.length>0" class="common_TiTable shareChooseTable">
<thead>
<tr>
<th colspan="2" style="text-align:left;">
......@@ -29,7 +34,7 @@
</tr>
</thead>
<tr v-for="(item,index) in data.QuestionContentObj[0]" :key="index">
<td style="width:40px;text-align:center; ">
<td style="width:40px;text-align:center;height:40px; ">
{{item.Name}}
</td>
<td>
......@@ -37,10 +42,10 @@
</td>
</tr>
</table>
<table v-if="data.QuestionContentObj&&data.QuestionContentObj.length>0" class="common_TiTable">
<table v-if="data.QuestionContentObj&&data.QuestionContentObj.length>0" class="common_TiTable shareChooseTable">
<tbody v-for="(item,index) in data.QuestionContentObj[1]" :key="index">
<tr>
<td style="width:40px;text-align:center;">
<td style="width:40px;text-align:center;height:40px;">
({{index+1}})
</td>
<td>
......@@ -55,25 +60,27 @@
答案: {{data.QuestionContentObj[1][index].Name}}
</template>
<template v-if="isOperate">
<select v-model="item.Name" class="selectBox" style="margin:10px 0 0 0;outline:none;">
<template v-for="(cItem,cIndex) in data.QuestionContentObj[0]">
<option :key="cIndex" :label="cItem.Name" :value="cItem.Name">
</option>
</template>
</select>
<el-select v-model="item.Name" style="width:100px" size="small" placeholder="请选择">
<el-option
v-for="(cItem,cIndex) in data.QuestionContentObj[0]"
:key="cIndex"
:label="cItem.Name"
:value="cItem.Name">
</el-option>
</el-select>
</template>
</td>
</tr>
</tbody>
<tfoot v-if="isShowStudentAnswer">
<tr>
<td colspan="2" class="v_sharingChooseQuestionBold" :style="{color:data.Answer ==data.StundetAnswer?'#67c23a':'red'}">
<td colspan="2" class="v_sharingChooseQuestionBold" style="height:70px" :style="{color:data.Answer ==data.StundetAnswer?'#67c23a':'red'}">
考生答案:{{data.StundetAnswer}}
</td>
</tr>
<tr>
<td colspan="2">
<q-input v-if="isEditStudentScore" standout="bg-primary text-white" v-model="data.StudentScore" label="得分:"
<q-input v-if="isEditStudentScore" filled style="width:180px" v-model="data.StudentScore" label="得分:"
maxlength="20" @input="getQuestionScore" />
<span v-else class="v_sharingChooseQuestionBold">考生得分:{{data.StudentScore}}</span>
</td>
......
......@@ -20,11 +20,11 @@
<el-input v-model="data.Answer" placeholder="请填写问题答案"> </el-input>
</div>
<div v-if="isShowStudentAnswer" style="display:flex;">
<div class="v_shortAnswerQuestionBold">考生答案:</div>
<div class="v_shortAnswerQuestionBold" style="margin:20px 0">考生答案:</div>
<div v-html="data.StundetAnswer"></div>
</div>
<div v-if="isShowStudentAnswer" style="display:flex;">
<q-input v-if="isEditStudentScore" standout="bg-primary text-white" v-model="data.StudentScore" label="得分:"
<div v-if="isShowStudentAnswer" style="display:flex;;margin-bottom:20px;">
<q-input v-if="isEditStudentScore" filled v-model="data.StudentScore" label="得分:"
maxlength="20" @input="getQuestionScore" />
<span v-else class="v_shortAnswerQuestionBold">考生得分:{{data.StudentScore}}</span>
</div>
......
......@@ -5,6 +5,7 @@
.v_singleQuestionBold {
font-weight: bold;
height:40px;
}
</style>
......@@ -41,18 +42,21 @@
:style="{color:data.Answer ==data.StundetAnswer?'#67c23a':'red'}">考生答案:{{data.StundetAnswer}}</td>
</tr>
<tr v-if="isShowStudentAnswer">
<td colspan="2">
<q-input v-if="isEditStudentScore" standout="bg-primary text-white" v-model="data.StudentScore" label="得分:"
<td colspan="2" style="height:70px;">
<q-input v-if="isEditStudentScore" filled v-model="data.StudentScore" label="得分:"
maxlength="20" @input="getQuestionScore" />
<span v-else class="v_singleQuestionBold">考生得分:{{data.StudentScore}}</span>
</td>
</tr>
<tr>
<td colspan="2">
<span class="v_singleQuestionBold">
解析:
</span>
<span v-html="data.AnswerParse"></span></td>
<div style="display:flex;">
<span class="v_singleQuestionBold">
解析:
</span>
<span v-html="data.AnswerParse"></span>
</div>
</td>
</tr>
</tfoot>
</table>
......
......@@ -56,12 +56,14 @@
<tr>
<td>
<template v-for="(item,index) in data.QuestionContentObj[1]">
<select v-model="item.Name" class="selectBox" :key="index">
<template v-for="(cItem,cIndex) in data.QuestionContentObj[0]">
<option :key="cIndex" :label="cItem.Name" :value="cItem.Name">
</option>
</template>
</select>
<el-select v-model="item.Name" :key="index" style="width:100px;margin-right:20px;" size="small" placeholder="请选择">
<el-option
v-for="(cItem,cIndex) in data.QuestionContentObj[0]"
:key="cIndex"
:label="cItem.Name"
:value="cItem.Name">
</el-option>
</el-select>
</template>
</td>
</tr>
......
This diff is collapsed.
This diff is collapsed.
......@@ -400,12 +400,11 @@
insert(type) {
if(type==1){
this.addMsg.Content = this.addMsg.Content + '##客户名称##'
}else if(type==2){
this.addMsg.Content = this.addMsg.Content + '##员工名称##'
}else{
this.addMsg.Content = this.addMsg.Content + '##员工别名##'
}
// else if(type==2){
// this.addMsg.Content = this.addMsg.Content + '##员工名称##'
// }else{
// this.addMsg.Content = this.addMsg.Content + '##员工别名##'
// }
},
selectimg() {//素材选择 图片模式
this.materialType = 2;
......
<style>
@import "../../../financial/css/cssReset.css";
.addPhase {
padding: 20px;
}
.addPhase .box {
width: 100%;
border-radius: 6px;
background: #fff;
padding: 20px;
margin-bottom: 25px;
}
.addPhase .bold {
font-weight: 760;
font-size: 16px;
color: #333;
border-left: 3px solid #3470ff;
margin-bottom: 20px;
margin-left: -20px;
padding-left: 20px;
}
</style>
<template>
<div class="addPhase" style="background: transparent;">
<div class="box">
<div class="bold">名称</div>
<q-input clearable debounce filled maxlength="20" counter v-model="addMsg.FlowName" style="width:600px"
@input="$forceUpdate()" placeholder="名称" :rules="[val => !!val || '不能为空']" />
</div>
<div class="box">
<div class="bold">阶段适用范围</div>
<q-btn class="q-mr-md" label="选择部门/成员" @click="outerVisible = true" />
</div>
<div class="box">
<div class="bold">选择使用阶段</div>
<div style="display:flex;align-items: center;">
</div>
</div>
<div v-if="StageList">
<div class="box" v-for="(x,y) in StageList" v-if="x.Type==2">
<div class="bold" v-if="x.Name=='已输单'">选择输单原因</div>
<div class="bold" v-if="x.Name=='无效'">选择无效原因</div>
<div style="display:flex;align-items: center;flex-wrap: wrap;">
<q-checkbox v-model="addMsg.LoseCause" v-if="x.Name=='已输单'" v-for="(item,index) in x.OptionsList" :key='index'
:val="item.Id" :label="item.Name" />
<q-checkbox v-model="addMsg.InvalidCause" v-if="x.Name=='无效'" v-for="(item,index) in x.OptionsList"
:key='index' :val="item.Id" :label="item.Name" />
</div>
</div>
</div>
<div class="box">
<el-form label-width="120px">
</el-form>
<q-card-actions align="left" class="bg-white">
<q-btn color="accent" class="q-mr-md" label="保存" @click="savemove()" style="width: 100px;" :loading="loading" />
<q-btn class="q-mr-md" label="返回" @click="goblck()" style="width: 60px;" />
</q-card-actions>
</div>
<!-- 人员/部门选择 -->
<choiceapprovalorbranch v-if="outerVisible" @close="outerVisible = false" @success="getsuccess2" :byval='showMember'
cptype="1"></choiceapprovalorbranch>
</div>
</template>
<script>
import choiceapprovalorbranch from './components/choiceapprovalorbranch'
import {
getCustomerStageList,
} from '../../../../api/system/wechat';
export default {
meta: {
title: "阶段管理"
},
components: {
choiceapprovalorbranch
},
name: "addPhase",
data() {
return {
loading: false,
outerVisible: false,
addMsg: {
FlowName: '',
DeptEmpList: [],
UseStage: '',
LoseCause: [],
InvalidCause: [],
},
showMember: [],
StageList: [],
}
},
created() {
this.getCustomerStageList()
},
methods: {
goblck() { //返回上一个页面
this.$router.go(-1); //返回上一层
},
savemove() {},
getCustomerStageList() {
getCustomerStageList({}).then(res => {
this.loading = false
if (res.Code == 1) {
this.StageList = res.Data
}
})
},
getsuccess2(list, type) {
this.showMember = list
this.outerVisible = false
},
}
}
</script>
\ No newline at end of file
......@@ -17,10 +17,11 @@
<th>是否必填</th>
<th width="13%">操作信息</th>
<th width="12%">操作</th>
<th width="4%"></th>
</tr>
</thead>
<tr v-if="data.length==0">
<td :colspan="7" align="center">暂无数据</td>
<td :colspan="8" align="center">暂无数据</td>
</tr>
<draggable v-model="data" element="tbody" :move="getdata" @update="datadragEnd">
<tr v-for="(item,index) in data" :key="index">
......@@ -48,6 +49,9 @@
<q-btn v-if='item.IsDefault!=1' flat size="xs" icon="delete" color="negative" class="q-mr-xs"
label="删除" @click="godelete(item,3,index)" />
</td>
<td>
<i class="iconfont icon-weiyi" style="font-size: 14px;color: #777;"></i>
</td>
</tr>
</draggable>
</table>
......
<template>
<div class="customerPhase page-body">
<div style="display: flex;align-items: center;justify-content: space-between;">
<div style="display: flex;align-items: center;">
<q-btn v-if="data.length<20" color="accent" style="margin-bottom: 10px;" class="q-mr-md" label="创建阶段流程" @click="goestablish()"></q-btn>
<span style="margin-left: 20px;color: rgb(133, 133, 152);">已添加:{{data.length}}/20</span>
</div>
<q-btn color="white" text-color="black" style="margin-bottom: 10px;" class="q-mr-md" label="阶段管理"
@click="stageManagement()"></q-btn>
</div>
<div class="page-content">
<table class="payTable">
<thead>
<tr>
<th>名称</th>
<th>适用范围</th>
<th>启用</th>
<th>阶段</th>
<th width="13%">操作信息</th>
<th width="12%">操作</th>
</tr>
</thead>
<tr v-if="data.length==0">
<td :colspan="6" align="center">暂无数据</td>
</tr>
<tr v-for="(item,index) in data" :key="index">
<td><span>{{item.FlowName}}</span></td>
<td>
<span v-for="(x,y) in item.DeptEmpList" :key='y'>
<el-tag type="danger" v-if="x.Type==0">{{x.Name}}</el-tag>
<el-tag type="success" v-if="x.Type==1">{{x.Name}}</el-tag>
<el-tag v-if="x.Type==2">{{x.Name}}</el-tag>
</span>
</td>
<td>
<q-toggle v-if="item.IsDefault==1" v-model="item.Enable" :true-value="1" :false-value="2"
icon="lock" disable />
<q-toggle v-else v-model="item.Enable" :true-value="1" :false-value="2"
@input="godelete(item,1,index)" />
</td>
<td>
<span v-for="(x,y) in item.StageList" :key='y'>
{{x}}{{item.StageList.length!=y+1?'->':''}}
</span>
</td>
<td>
<div>{{item.UpdateByName}}</div>
<div>{{item.UpdateTime}}</div>
</td>
<td>
<q-btn v-if='item.IsDefault!=1' flat size="xs" icon="edit" style="font-weight:400;color: #3FC4FF" class="q-mr-xs"
label="编辑" @click="goedit(item)" />
<q-btn v-if='item.IsDefault!=1' flat size="xs" icon="delete" color="negative" class="q-mr-xs"
label="删除" @click="godelete(item,3,index)" />
</td>
</tr>
</table>
<div v-if="Isadd==true">
<addfield :obj='addMsg' :deptl='deptl' :tabsList='tabsList' :checkboxList='checkboxList'
@getcancel='getcancel'></addfield>
</div>
</div>
</div>
</template>
<script>
import addfield from "./components/addfield"
import {
getCustomerStageFlowList,
} from '../../../../api/system/wechat';
//部门
import {
getDeptTree
} from '../../../../api/system/dept'
export default {
components: {
addfield,
},
data() {
return {
loading: false,
data: [],
Isadd: false,
addMsg: null,
Enable: -1,
deptl: [],//部门下拉
tabsList: [],
checkboxList: [],//输入类型 数组
dragId: 0,//拖动的ID
}
},
created() {
this.getList()
this.getDepartList()
},
methods: {
goaddfield() {//新增字段
this.Isadd = true;
this.addMsg = null
},
goedit(item) {
this.Isadd = true;
this.addMsg = JSON.parse(JSON.stringify(item))
},
godelete(item, type, index) {//删除
let text = ''
if (type == 1) {//tyep等于1和2的时候 先让弹出提示 然后再给予掉接口 所以把原本的值暂时先赋值给本身
text = '确定修改启用状态'
if (item.Enable == 2) {
this.data[index].Enable = 1
} else {
this.data[index].Enable = 2
}
} else if (type == 2) {
text = '确定修改必填状态'
if (item.Required == 2) {
this.data[index].Required = 1
} else {
this.data[index].Required = 2
}
} else if (type == 3) {
text = '删除后字段不在显示,是否删除?'
}
this.$q.dialog({
title: "提示信息",
message: text,
cancel: {
label: "取消",
flat: true
},
ok: {
label: "确认",
flat: true,
focus: true
}
}).onOk(() => {
this.setFiledState(item, type)
});
},
setFiledState(item, Type) {
let msg = {
Type: Type,
FiledId: item.Id,
SortFiledId: 0,
}
setCustomerFiledState(msg).then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: res.Message,
position: 'top'
})
this.getList()
}
})
},
getcancel(type) {
this.Isadd = false;
this.tabsList.forEach(x => {
x.disable = false
})
if (type == 2) {//数据保存成功的处理
this.getList()
}
},
getList() {
this.loading = true
getCustomerStageFlowList({ Enable: 0 }).then(res => {
this.loading = false
if (res.Code == 1) {
this.data = res.Data;
}
})
},
//获取部门下拉数据
getDepartList(id) {
let msg = {
School_Id: 0
}
getDeptTree(msg).then(res => {
if (res.Code == 1) {
this.deptl = res.Data;
}
})
},
stageManagement() {//阶段管理
this.$router.push({
path: '/enterprise/customer/CSChild/stageManagement',
});
},
goestablish() {//创建阶段流程
this.$router.push({
path: '/enterprise/customer/CSChild/addPhase',
});
}
}
}
</script>
<style>
.customerPhase .payTable {
width: 100%;
border-collapse: collapse;
}
.customerPhase .payTable tr th {
background: #fff;
height: 40px;
font-size: 12px;
font-weight: bold;
color: #2D2D2D;
background: #DDDEE0;
}
.customerPhase .payTable tr {
background: #fff;
text-align: center;
height: 40px;
}
.customerPhase .payTable tr td {
font-size: 13px;
text-align: center;
color: #2D2D2D;
padding: 10px 0;
font-weight: bold;
border-bottom: 1px solid #E5E5E5;
}
</style>
\ No newline at end of file
<style>
@import "../../../financial/css/cssReset.css";
.stageManagement {
padding: 20px;
}
.stageManagement .box {
width: 100%;
border-radius: 6px;
background: #fff;
padding: 20px;
margin-bottom: 25px;
}
.stageManagement .bold {
font-weight: 700;
font-size: 14px;
color: #333;
}
.stageManagement ul li {
display: flex;
align-items: center;
}
.stageManagement .btn {
display: flex;
align-items: center;
margin-top: 24px;
margin-left: 56px;;
margin-bottom: 30px;
}
</style>
<template>
<div class="stageManagement" style="background: transparent;">
<div class="box">
<div class="bold" style="margin-bottom: 30px;">跟进阶段</div>
<ul v-for="(x,y) in addMsg" :key="y" v-if="x.Type==1">
<div v-if="x.IsDefault==0">
<draggable v-model="x.OptionsList">
<li v-for="(item,index) in x.OptionsList" :key="index">
<div style="width: 57px;">
<i class="iconfont icon-weiyi" style="font-size: 14px;color: #777;margin: 0 10px;"></i>
</div>
<q-input clearable debounce filled maxlength="10" counter v-model="item.Name" style="width:500px"
@input="$forceUpdate()" placeholder="名称" :rules="[val => !!val || '不能为空']" />
<q-btn flat size="sm" icon="delete" color="negative" class="q-mr-xs" style="margin-left: 10px;" label=""
@click="addMsg[y].OptionsList.splice(index,1)" />
</li>
</draggable>
<div class="btn">
<q-btn v-if="x.OptionsList.length<30" color="accent" class="q-mr-md" label="添加" icon='add'
@click="addMsg[y].OptionsList.push({Id:0,Name:'',disable:false}),$forceUpdate()" style="width: 100px;" />
<span style="color:#858598"> 已设/可设上限:{{x.OptionsList.length}}/30 </span>
</div>
</div>
<div v-if="x.IsDefault==1">
<li v-for="(item,index) in x.OptionsList" :key="index">
<div style="width: 57px;">
</div>
<q-input clearable debounce filled v-model="item.Name" style="width:500px" disable @input="$forceUpdate()"
placeholder="名称" :rules="[val => !!val || '不能为空']" />
</li>
</div>
</ul>
</div>
<div class="box">
<div class="bold">结束跟进</div>
<div v-for="(x,y) in addMsg" :key="y" v-if="x.Type==2">
<ul style="margin-left: 30px;margin-top: 10px;">
<li>
<q-input clearable filled debounce placeholder="名称" v-model="x.Name" style="width:500px" disable />
</li>
<li class="bold" style="margin: 10px 0 30px;" v-if="x.Name=='已输单'">输单原因</li>
<li class="bold" style="margin: 10px 0 30px;" v-if="x.Name=='无效'">无效原因</li>
<draggable v-model="x.OptionsList">
<li v-for="(item,index) in x.OptionsList" :key="index">
<div style="width: 31px;">
<i class="iconfont icon-weiyi" style="font-size: 14px;color: #777;margin: 0 10px;"></i>
</div>
<q-input clearable debounce filled maxlength="10" counter v-model="item.Name" style="width:500px"
@input="$forceUpdate()" placeholder="名称" :rules="[val => !!val || '不能为空']" />
<q-btn flat size="sm" icon="delete" color="negative" class="q-mr-xs" style="margin-left: 10px;" label=""
@click="addMsg[y].OptionsList.splice(index,1)" />
</li>
</draggable>
</ul>
<div class="btn" style="margin-left: 61px">
<q-btn v-if="x.OptionsList.length<30" color="accent" class="q-mr-md" label="添加" icon='add'
@click="addMsg[y].OptionsList.push({Id:0,Name:'',disable:false}),$forceUpdate()" style="width: 100px;" />
<span style="color:#858598"> 已设/可设上限:{{x.OptionsList.length}}/30 </span>
</div>
</div>
</div>
<div class="box">
<el-form label-width="120px">
</el-form>
<q-card-actions align="left" class="bg-white">
<q-btn color="accent" class="q-mr-md" label="保存" @click="savemove()" style="width: 100px;" :loading="loading" />
<q-btn class="q-mr-md" label="返回" @click="goblck()" style="width: 60px;" />
</q-card-actions>
</div>
</div>
</template>
<script>
import draggable from "vuedraggable"
import {
getCustomerStageList,
setCustomerStageInfo
} from '../../../../api/system/wechat';
export default {
meta: {
title: "阶段管理"
},
components: {
draggable,
},
name: "stageManagement",
data() {
return {
loading: false,
addMsg: [],
}
},
created() {
this.getList()
},
methods: {
getList() {
getCustomerStageList({}).then(res => {
this.loading = false
if (res.Code == 1) {
this.addMsg = res.Data
let num = 0
let isexistence = false
let orderEntered = false //判读是否有已输单
let invalid = false //无效
this.addMsg.forEach(x => {
if (x.Type == 1) {
num++
if (x.OptionsList && x.OptionsList.length > 0) {
for (let j = 0; j < x.OptionsList.length; j++) {
let z = x.OptionsList[j]
if (z.Name == '成交') { //判断是否有默认值
isexistence = true
break
}
}
}
}
if (x.Type == 2) {
if (x.Name == '已输单') {
orderEntered = true
}
if (x.Name == '无效') {
invalid = true
}
}
})
if (num == 0) { //判断没有type==1的时候加2条数据
let obj = [{
Id: 0,
IsDefault: 0,
Name: '跟进阶段',
OptionsList: [],
Sort: 0,
Type: 1
},
{
Id: 0,
IsDefault: 1,
Name: '跟进阶段',
OptionsList: [{
Id: 0,
Name: '成交'
}, {
Id: 0,
Name: '多次成交'
}, ],
Sort: 0,
Type: 1
},
]
this.addMsg = this.addMsg.concat(obj)
}
if (num > 0 && isexistence == false) { //判断type==1有 但是没有默认值
let obj = {
Id: 0,
IsDefault: 1,
Name: '跟进阶段',
OptionsList: [{
Id: 0,
Name: '成交'
}, {
Id: 0,
Name: '多次成交'
}, ],
Sort: 0,
Type: 1
};
this.addMsg.unshift(obj)
}
if (orderEntered == false) { //没有的话 加一个已输单
let obj = {
Id: 0,
IsDefault: 0,
Name: '已输单',
OptionsList: [],
Sort: 0,
Type: 2
};
this.addMsg.push(obj)
}
if (invalid == false) { //没有的话 加一个无效
let obj = {
Id: 0,
IsDefault: 0,
Name: '无效',
OptionsList: [],
Sort: 0,
Type: 2
};
this.addMsg.push(obj)
}
}
})
},
goblck() { //返回上一个页面
this.$router.go(-1); //返回上一层
},
savemove() {
let show = false
for (let i = 0; i < this.addMsg.length; i++) {
let x = this.addMsg[i]
if (show == true) {
break
}
for (let j = 0; j < x.OptionsList.length; j++) {
let z = x.OptionsList[j]
if (z.Name == '') {
let message = ''
if (x.Type == 1) {
message = '请填写跟进阶段列表选项值'
} else {
message = '请填写结束跟进列表选项值'
}
this.$q.notify({
type: 'negative',
message: message,
position: 'top'
})
show = true
break
}
}
}
this.loading = true
setCustomerStageInfo(this.addMsg).then(res => {
this.loading = false
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: res.Message,
position: 'top'
})
this.goblck()
}).catch((e) => {
this.loading = false
})
},
}
}
</script>
\ No newline at end of file
......@@ -16,9 +16,11 @@
 121212
</div>
<div v-if="tabCheck=='1'" >
 
<customerField></customerField>
</div>
<div v-if="tabCheck=='6'" >
<customerPhase></customerPhase>
</div>
<q-inner-loading :showing="loading">
......@@ -35,9 +37,12 @@
} from '../../../api/system/wechat';
import customerField from './CSChild/customerField'
import customerPhase from './CSChild/customerPhase'
export default {
components: {
customerField,//客户字段
customerPhase,//客户阶段
},
meta: {
title: "客户设置"
......@@ -46,8 +51,8 @@
data() {
return {
loading: false,
MediumList:[{Name:'业务模式',Id:0},{Name:'客户字段',Id:1}],
tabCheck:1,
MediumList:[{Name:'业务模式',Id:0},{Name:'客户字段',Id:1},{Name:'客户阶段',Id:6}],
tabCheck:6,
}
},
created() {
......
......@@ -43,18 +43,23 @@
<template v-slot:top="props">
<div class="col-2 q-table__title">考生管理</div>
</template>
<template v-slot:body-cell-ExamStartTime="props">
<q-td :props="props">
{{props.row.ExamStartTime}} - {{props.row.EndTime}}
</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 v-if="props.row.ExamStatus==0||props.row.ExamStatus==2" flat color="primary" size="xs" style="font-weight:400;" class="q-mr-md" label="学员考试"
@click="gotoExamTest(props.row)" />
<q-btn v-if="props.row.ExamStatus==1" flat color="primary" size="xs" style="font-weight:400;" class="q-mr-md" label="阅卷"
@click="gotoExamTestReview(props.row)" />
<q-btn v-if="props.row.ExamStatus==3" flat color="primary" size="xs" style="font-weight:400;" class="q-mr-md" label="详情"
@click="gotoExamTestInfo(props.row)" />
<q-btn v-if="props.row.ExamStatus==1||props.row.ExamStatus==2" flat color="primary" size="xs"
style="font-weight:400;" class="q-mr-md" label="学员考试" @click="gotoExamTest(props.row)" />
<q-btn v-if="props.row.ExamStatus==3" flat color="primary" size="xs" style="font-weight:400;"
class="q-mr-md" label="阅卷" @click="gotoExamTestReview(props.row)" />
<q-btn v-if="props.row.ExamStatus==5" flat color="primary" size="xs" style="font-weight:400;"
class="q-mr-md" label="详情" @click="gotoExamTestInfo(props.row)" />
</q-td>
</template>
</q-table>
......@@ -95,7 +100,13 @@
field: "ClassName",
align: "left",
},
{
{
name: "ExamStartTime",
label: "考试时间",
field: "ExamStartTime",
align: "left",
},
{
name: "ExamStatusName",
label: "状态",
field: "ExamStatusName",
......
<style>
.ExamTest_Sysuser_Date .el-range-editor .el-range-input {
background-color: transparent;
}
.ExamTest_Sysuser_Date .el-range-editor.el-input__inner {
background-color: transparent;
}
</style>
<!--考试管理-->
......@@ -10,6 +17,18 @@
<q-input @change="getList" clearable filled v-model="msg.PaperName" @clear="getList" maxlength="20"
label="输入试卷名称" />
</div>
<div class="col-3 ExamTest_Sysuser_Date">
<q-field filled>
 <template v-slot:control>
<el-date-picker v-model="dateTimeList" @change="refreshPage" value-format="yyyy-MM-dd" type="daterange" style="border:none;" range-separator="至"
 start-placeholder="开始时间"  end-placeholder="结束时间"></el-date-picker>       
</template>
</q-field>
</div>
<div class="col-3">
<q-select @input="getList" clearable filled v-model="msg.QTestStatus" :options="StatusList" emit-value
map-options label="状态" />
</div>
</div>
<div class="page-option">
......@@ -43,7 +62,24 @@
pageSize: 10,
rowsPerPage: 10,
PaperName: "", //试卷名称
QTestStatus: "", //考试状态
QStartTime: "", //开始时间
QEndTime: "", //结束时间
},
StatusList: [{
value: 1,
label: "未开始"
},
{
value: 2,
label: "进行中"
},
{
value: 3,
label: "已结束"
}
],
dateTimeList: [],
pageCount: 0,
loading: false,
dataList: [],
......@@ -61,6 +97,13 @@
},
//获取菜单分页列表
getList() {
if (this.dateTimeList && this.dateTimeList.length > 0) {
this.msg.QStartTime = this.dateTimeList[0];
this.msg.QEndTime = this.dateTimeList[1];
} else {
this.msg.QStartTime = '';
this.msg.QEndTime = '';
}
this.loading = true;
this.dataList = [];
queryPublishExamPage(this.msg)
......
......@@ -241,16 +241,19 @@
.examPaperInfo_Top .vClozeQuestion .clozeTest_question_tit {
margin: 15px 0;
}
.Exam_PaperNameV2{
font-size:20px;
font-weight: bold;
margin-bottom:5px;
}
</style>
<template>
<div class="examPaper page-body">
<div class="examPaperInfo_Top">
<div>
<div>
{{DataObj.PaperName}} <br />
题量:{{examNum}} &nbsp;&nbsp;&nbsp; 满分:{{examScore}}
<div class="Exam_PaperNameV2">{{DataObj.PaperName}}</div>
<div>题量:{{examNum}} &nbsp;&nbsp;&nbsp; 满分:{{examScore}}</div>
</div>
</div>
<div style="width:20%;text-align:right;">
......@@ -264,11 +267,13 @@
<div class="pGNameDiv"><span class="pGroupName">{{NoToChinese(gIndex+1)}}{{gItem.GroupName}}</span> (共
{{gItem.DetailsList.length}} 题,{{gItem.GScore}}分)</div>
<div v-for="(dItem,dIndex) in gItem.DetailsList" :key="dIndex">
<span>{{dIndex+1}}</span>
<span class="paper_Title" v-html="dItem.Title"></span>
<span style="margin:10px 0;display:inline-block;">
({{dItem.Score}}分)
</span>
<div style="display:flex;margin:10px 0;">
<span>{{dIndex+1}}</span>
<span class="paper_Title" v-html="dItem.Title"></span>
<span style="margin-left:10px;display:inline-block;">
({{dItem.Score}}分)
</span>
</div>
<!--单选题-->
<v-single v-if="dItem.QuestionTypeKey=='single'||dItem.QuestionTypeKey=='single-number'"
:questionObj="dItem" :isShowAnswer="isShowAnswer" :isOperate="isOperate">
......
<style>
.examPaperInfo_Top {
height: 83px;
min-height: 83px;
border-bottom: 1px solid #d9d9d9;
display: flex;
align-items: center;
justify-content: space-between;
margin: 0 100px;
padding-bottom:15px;
}
.Exam-main {
......@@ -241,7 +241,14 @@
.examPaperInfo_Top .vClozeQuestion .clozeTest_question_tit {
margin: 15px 0;
}
.Exam_PaperNameV2{
font-size:20px;
font-weight: bold;
margin-bottom:5px;
}
.pGNameDiv:first-child{
margin-top:0;
}
</style>
<!--阅卷-->
<template>
......@@ -249,14 +256,15 @@
<div class="examPaperInfo_Top">
<div>
<div>
{{DataObj.PaperName}} <br />
题量:{{examNum}} &nbsp;&nbsp;&nbsp; 满分:{{examScore}}
<br />
学生总得分:{{studentScore}}<br />
<div class="Exam_PaperNameV2">{{DataObj.PaperName}}</div>
<div>
<span>题量:{{examNum}} &nbsp;&nbsp;&nbsp; 满分:{{examScore}} </span>
<span style="margin-left:30px;">学生总得分:{{studentScore}}</span>
</div>
评语:{{DataObj.StuComment}} <br/>
</div>
</div>
<div style="width:20%;text-align:right;">
<div style="width:20%;text-align:right;flex-shrink:0;">
<q-btn color="accent" size="sm" class="q-mr-md" @click="goBack()" label="返回" />
</div>
</div>
......
<style>
.examPaperInfo_Top {
height: 83px;
min-height: 83px;
border-bottom: 1px solid #d9d9d9;
display: flex;
align-items: center;
justify-content: space-between;
margin: 0 100px;
padding-bottom:20px;
}
.Exam-main {
......@@ -241,20 +241,25 @@
.examPaperInfo_Top .vClozeQuestion .clozeTest_question_tit {
margin: 15px 0;
}
.Exam_PaperNameV2{
font-size:20px;
font-weight: bold;
margin-bottom:5px;
}
</style>
<!--阅卷-->
<template>
<div class="examPaper page-body">
<div class="examPaperInfo_Top">
<div>
<div style="width:80%;">
<div>
{{DataObj.PaperName}} <br />
题量:{{examNum}} &nbsp;&nbsp;&nbsp; 满分:{{examScore}}
<br />
学生总得分:{{studentScore}}
<q-input filled stack-label maxlength="100" :dense="false" v-model="DataObj.StuComment"
class="col-6 q-pb-lg q-pr-lg" label="评语" />
<div class="Exam_PaperNameV2">{{DataObj.PaperName}}</div>
<div style="margin-bottom:10px;">
题量:{{examNum}} &nbsp;&nbsp;&nbsp; 满分:{{examScore}}
<span style="margin-left:30px;">学生总得分:{{studentScore}}</span>
</div>
<q-input v-model="DataObj.StuComment" filled type="textarea" placeholder="评语" />
</div>
</div>
<div style="width:20%;text-align:right;">
......
This diff is collapsed.
This diff is collapsed.
......@@ -791,6 +791,8 @@
@click="goassets2(GetDetail.ReFinanceId,GetDetail.OtherType)"> 教育活动:{{GetDetail.ReFinanceId}}</span>
<span class="fr" style="text-decoration: underline;cursor: pointer;" v-if="GetDetail.OtherType==42 "
@click="goassets2(GetDetail.ReFinanceId,GetDetail.OtherType)"> 活动提成:{{GetDetail.ReFinanceId}}</span>
<span class="fr" style="text-decoration: underline;cursor: pointer;" v-if="GetDetail.OtherType==44 "
@click="goassets2(GetDetail.ReFinanceId,GetDetail.OtherType)"> 留学销售提成:{{GetDetail.ReFinanceId}}</span>
<template v-if="GetDetail.RelevanceFrId">
<span class="fr" style="margin-right:10px;">
相关单据:<span @click="goFinancal(sItem)" v-for="(sItem,sIndex) in getRelevanArr(GetDetail.RelevanceFrId)" style="text-decoration:underline;cursor:pointer;margin-right:5px;">
......@@ -3428,6 +3430,8 @@
tempStr = '/sale/activityList?Id='+ID;
}else if(OtherType==42){
tempStr = '/financial/reportform/activityCommissionDetails?id='+ID +'&UserIds='+this.GetDetail.EduCommissionEmp;
}else if(OtherType==44){
tempStr = '/financial/studyabroad/sBuserCommissionDetails?preriodId='+ID;
}
this.$router.push({
......
......@@ -833,6 +833,8 @@
@click="goassets2(GetDetail.ReFinanceId,GetDetail.OtherType)"> 教育活动:{{GetDetail.ReFinanceId}}</span>
<span class="fr" style="text-decoration: underline;cursor: pointer;" v-if="GetDetail.OtherType==42 "
@click="goassets2(GetDetail.ReFinanceId,GetDetail.OtherType)"> 活动提成:{{GetDetail.ReFinanceId}}</span>
<span class="fr" style="text-decoration: underline;cursor: pointer;" v-if="GetDetail.OtherType==44 "
@click="goassets2(GetDetail.ReFinanceId,GetDetail.OtherType)"> 留学销售提成:{{GetDetail.ReFinanceId}}</span>
<template v-if="GetDetail.RelevanceFrId">
<span class="fr" style="margin-right:10px;">
相关单据:<span @click="goFinancal(sItem)" v-for="(sItem,sIndex) in getRelevanArr(GetDetail.RelevanceFrId)" style="text-decoration:underline;cursor:pointer;margin-right:5px;">
......@@ -2180,6 +2182,8 @@
tempStr = '/sale/activityList?Id='+ID;
}else if(OtherType==42){
tempStr = '/financial/reportform/activityCommissionDetails?id='+ID +'&UserIds='+this.GetDetail.EduCommissionEmp;
}else if(OtherType==44){
tempStr = '/financial/studyabroad/sBuserCommissionDetails?preriodId='+ID;
}
this.$router.push({
......
<style>
.baseSet_Title {
width: 120px !important;
padding: 18px 0 0 16px;
text-align: right;
}
.CommissionDetail .border-bottom {
/* border-bottom: 1px dashed #EEE; */
padding-bottom: 5px;
margin-bottom: 5px;
}
.CommissionDetail .text-bottom {
height: 32px;
line-height: 32px;
margin-bottom: 10px;
}
.CommissionDetail ._icon_btn i.icon-sousuo {
background-color: #47BF8C;
}
.CommissionDetail ._icon_btn i {
width: 26px;
height: 26px;
display: inline-block;
color: white !important;
border-radius: 50%;
text-align: center;
line-height: 26px;
margin-right: 10px;
cursor: pointer;
outline: none;
}
.CommissionDetail .el-table td,
.el-table th {
padding: 5px 0;
}
</style>
<template>
<div class="page-body CommissionDetail">
<div class="page-search row items-center">
<div class="col row wrap q-mr-lg q-col-gutter-md">
<div class="col-3">
<q-btn  color="primary"  size="11px"  label="返回"  @click="goreturn"  style="margin-left:10px" />
</div>
</div>
</div>
<template>
<el-table ref="filterTable" :data="tableData" v-loading='loading'
:header-cell-style="{backgroundColor:'#f5f6f7', color: '#a8a8b3'}" border style="width: 100%">
<el-table-column prop="SchoolName" label="校区" :filters='SchoolNamelist' :filter-method="filterHandler">
</el-table-column>
<el-table-column prop="DeptName" label="部门" :filters='DeptNamelist' :filter-method="filterHandler">
</el-table-column>
<el-table-column prop="UserName" label="销售" :filters='UserNamelist' :filter-method="filterHandler">
</el-table-column>
<el-table-column prop="StudentCount" label="客人数量" sortable :sort-method="StudentCount"> </el-table-column>
<el-table-column prop="CommissionMoney" label="订单提成" sortable :sort-method="CommissionMoney">
</el-table-column>
<el-table-column prop="OtherMoney" label="额外奖励" sortable :sort-method="OtherMoney"></el-table-column>
<el-table-column prop="BackMoney" label="额外扣除" sortable :sort-method="BackMoney"></el-table-column>
<el-table-column prop="FinalCommission" label="最终提成" sortable :sort-method="FinalCommission"> </el-table-column>
<!-- <el-table-column prop="Periods" label="周期"> </el-table-column> -->
<el-table-column label="操作">
<template slot-scope="scope">
<div class="_icon_btn">
<el-tooltip class="item" effect="dark" content="查看" placement="top">
<i class="iconfont icon-sousuo" @click="goUrl('studyabroad/sBuserCommissionDetails',scope.row.UserId)"></i>
</el-tooltip>
</div>
</template>
</el-table-column>
</el-table>
</template>
</div>
</template>
<script>
import {
GetClassTypePageList,
} from '../../../api/system/index';
import {
getSellStudyAbroadUserList,
} from '../../../api/finance/index'
import {
getClassDropDownList,
} from "../../../api/school/index";
export default {
meta: {
title: "销售提成详情"
},
props: {},
components: {},
data() {
return {
loading: false,
//列表数据参数
msg: {
PeriodId: 0,
UserId: 0,
SourceId: 0,
OrderId: '',
School_Id: '-1',
},
pageCount: 0,
persistent: false,
listData: {},
tableData: [],
company: [],
department: [],
see_tcdetailed: false,
SchoolNamelist: [],
DeptNamelist: [],
UserNamelist: [],
}
},
created() {
let userinfo = this.getLocalStorage();
userinfo.ActionMenuList.map(x => { //判断权限
if (x.FunctionCode == "see_tcdetailed") { //判断是否可以查看其他明细
this.see_tcdetailed = true;
}
})
if (this.see_tcdetailed == false) {
this.msg.UserId = userinfo.Id
}
},
mounted() {
if (this.$route.query && this.$route.query.id) {
this.msg.PeriodId = this.$route.query.id
}
if (this.$route.query && this.$route.query.School_Id) {
this.msg.School_Id = this.$route.query.School_Id
}
this.getList()
},
methods: {
getList() {
if (this.msg)
this.loading = true;
getSellStudyAbroadUserList(this.msg).then(res => {
if (res.Code == 1) {
this.loading = false;
this.tableData = res.Data;
this.SchoolNamelist = [];
this.DeptNamelist = [];
this.UserNamelist = [];
this.tableData.forEach(x => {
let obj = {
text: x.SchoolName,
value: x.SchoolName
}
let obj2 = {
text: x.DeptName,
value: x.DeptName
}
let obj3 = {
text: x.UserName,
value: x.UserName
}
this.SchoolNamelist.push(obj)
this.DeptNamelist.push(obj2)
this.UserNamelist.push(obj3)
})
this.SchoolNamelist = this.unique(this.SchoolNamelist)
this.DeptNamelist = this.unique(this.DeptNamelist)
this.UserNamelist = this.unique(this.UserNamelist)
}
})
},
unique(arr, Name) { //数组去重
const res = new Map();
return arr.filter(
(list) => !res.has(list.text) && res.set(list.text, 1)
);
},
goUrl(path, id) {
this.$router.push({
path: '/financial/' + path,
query: {
userId: id,
preriodId: this.$route.query.id,
blank: 'y',
}
})
},
filterHandler(value, row, column) {
const property = column['property'];
return row[property] === value;
},
StudentCount(a, b, c) {
return a.StudentCount - b.StudentCount;
},
BackMoney(a, b) {
return a.BackMoney - b.BackMoney;
},
OtherMoney(a, b) {
return a.OtherMoney - b.OtherMoney;
},
CommissionMoney(a, b) {
return a.CommissionMoney - b.CommissionMoney;
},
FinalCommission(a, b) {
return a.FinalCommission - b.FinalCommission;
},
goreturn() {
this.$router.go(-1);
}
},
}
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
\ No newline at end of file
This diff is collapsed.
<style>
.baseSet_Title {
width: 120px !important;
padding: 18px 0 0 16px;
text-align: right;
}
.userCommissionDetails .border-bottom {
/* border-bottom: 1px dashed #EEE; */
padding-bottom: 5px;
margin-bottom: 5px;
}
.userCommissionDetails .text-bottom {
height: 32px;
line-height: 32px;
margin-bottom: 10px;
}
.userCommissionDetails ._icon_btn i.icon-sousuo {
background-color: #47BF8C;
}
.userCommissionDetails ._icon_btn i {
width: 30px;
height: 30px;
display: inline-block;
color: white !important;
border-radius: 50%;
text-align: center;
line-height: 30px;
margin-right: 10px;
cursor: pointer;
outline: none;
}
.userCommissionDetails .el-table td,
.el-table th {
padding: 5px 0;
}
</style>
<template>
<div class="page-body userCommissionDetails">
<div class="page-search row items-center">
<div style="margin-right: 10px;">
<q-btn color="primary"  size="11px"  label="返回"  @click="goreturn"  style="margin-left:10px" />
</div>
<div class="col row wrap q-mr-lg q-col-gutter-md">
<div class="col-3">
<q-select filled stack-label use-input input-debounce="0" option-value="Id" clearable @input="getList"
option-label="Name" v-model="msg.SourceId" :options="StudyAbroadList" 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>
<div class="col-3">
<q-input filled v-model="msg.OrderId" @keyup.enter.native="getList()" label="订单号" />
</div>
</div>
</div>
<template>
<el-table ref="filterTable" :data="tableData" v-loading='loading'
:header-cell-style="{backgroundColor:'#f5f6f7', color: '#a8a8b3'}" border style="width: 100%">
<el-table-column prop="SchoolName" width='150' label="校区"></el-table-column>
<el-table-column prop="DeptName" label="部门"></el-table-column>
<el-table-column prop="UserName" label="销售"> </el-table-column>
<el-table-column prop="SourceName" label="项目名称"> </el-table-column>
<el-table-column width='170' prop="ClassName" label="客人信息">
<template slot-scope="scope">
<div v-if="scope.row.SourceType">类型: {{scope.row.SourceType==1?'留学':'就业'}}</div>
<div v-if="scope.row.StudentCount">客人数量:{{scope.row.StudentCount}}</div>
</template>
</el-table-column>
<el-table-column prop="OrderId" label="订单号">
<template slot-scope="scope">
<div v-if="scope.row.OrderId" style="cursor: pointer;text-decoration: underline;" @click="goUrlorderList('/sale/studyOrderStatistics',scope.row)">
{{scope.row.OrderId}}
</div>
</template>
</el-table-column>
<el-table-column prop="CommissionMoney" label="订单提成"></el-table-column>
<el-table-column prop="OtherMoney" label="额外奖励"></el-table-column>
<el-table-column prop="BackMoney" label="额外扣除"></el-table-column>
<el-table-column prop="YFMoney" label="最终发放">
<template slot-scope="scope">
<div style="color: rgb(233, 82, 82);">{{scope.row.YFMoney}}</div>
</template>
</el-table-column>
<el-table-column width='90' prop="Periods" label="期数"> </el-table-column>
<el-table-column prop="Remark" width='160' label="备注"> </el-table-column>
</el-table>
</template>
</div>
</template>
<script>
import {
GetClassTypePageList,
} from '../../../api/system/index';
import {
getSellStudyAbroadUserDetailList,
} from '../../../api/finance/index'
import {
getClassDropDownList,
} from "../../../api/school/index";
import {
queryStudyAbroadPage
} from '../../../api/studyabroad/index'
export default {
meta: {
title: "留学提成明细"
},
props: {},
components: {},
data() {
return {
loading: false,
//列表数据参数
msg: {
PeriodId: 0,
UserId: 0,
SourceId: '-1',
OrderId: '',
UserIds:'',
},
pageCount: 0,
persistent: false,
listData: {},
tableData: [],
company: [],
department: [],
StudyAbroadList: [],
allStudyAbroadList: [],
}
},
created() {},
mounted() {
if (this.$route.query && this.$route.query.userId) {
this.msg.UserId = this.$route.query.userId
}
if (this.$route.query && this.$route.query.preriodId) {
this.msg.PeriodId = this.$route.query.preriodId
}
if (this.$route.query && this.$route.query.UserIds) {
this.msg.UserIds = this.$route.query.UserIds
}
this.getList()
this.getStudyAbroad()
},
methods: {
getList() {
if (this.msg)
this.loading = true;
if(this.msg.SourceId==''|| this.msg.SourceId==null){
this.msg.SourceId='-1'
}
getSellStudyAbroadUserDetailList(this.msg).then(res => {
if (res.Code == 1) {
this.loading = false;
this.tableData = res.Data
if (this.tableData.length > 0) {
this.getAskfor()
}
}
})
},
getAskfor() { //求值
let obj = {
SchoolName: '合计',
YFMoney: 0,
}
this.tableData.forEach((x) => {
if (x.YFMoney) {
obj.YFMoney = this.accAdd(x.YFMoney, obj.YFMoney)
};
})
this.tableData.push(obj)
},
accAdd(arg1, arg2) { //js 加法精确计算
var r1, r2, m;
try {
r1 = arg1.toString().split(".")[1].length;
} catch (e) {
r1 = 0;
}
try {
r2 = arg2.toString().split(".")[1].length;
} catch (e) {
r2 = 0;
}
m = Math.pow(10, Math.max(r1, r2));
return (arg1 * m + arg2 * m) / m;
},
getStudyAbroad() {
let msg ={
pageIndex: 0,
pageSize: 9000,
Name: "",
IsQPrice: 1,
Type: -1, //项目类型
SaleState: 3, //已上架
}
queryStudyAbroadPage(msg).then(res => {
let data = res.Data.PageData
let obj = {
Name:'不限',
Id:'-1'
}
data.unshift(obj)
this.StudyAbroadList = data;
this.allStudyAbroadList = JSON.parse(JSON.stringify(data))
})
.catch(() => {
});
},
//筛选员工
filterFn(val, update) {
update(() => {
if (val === '') {
this.StudyAbroadList = JSON.parse(JSON.stringify(this.allStudyAbroadList))
} else {
const needle = val.toLowerCase()
this.StudyAbroadList = this.allStudyAbroadList.filter(v => v.Name.toLowerCase().indexOf(needle) > -1)
}
})
},
goUrl(path, id) {
this.$router.push({
path: '/financial/' + path,
query: {
"id": id,
blank: 'y',
tab: '单据详情'
}
})
},
filterHandler(value, row, column) {
const property = column['property'];
return row[property] === value;
},
StudentCount(a, b) {
return a.StudentCount - b.StudentCount;
},
goorderUrl(row) {
this.$router.push({
path: '/financial/cycleOrderList',
query: {
OrderId: row.OrderId,
UserId:row.UserId,
blank: 'y',
}
})
},
goreturn() {
this.$router.go(-1);
},
goUrlorderList(path,row){//订单跳转
this.OpenNewUrl(path, {
OrderId: row.OrderId,
// EnterID:row.UserId
});
},
goUrlclass(path,Names){//班级
let Name = encodeURI(Names)
this.OpenNewUrl(path, {
ClassName: Name,
});
},
goUrlkehao(path,row){//跳转到学生课耗
let StartMonth = ''
let EndMonth = ''
if(row.IsFirstCommission == 1){
EndMonth = row.Periods
}else{
if(row.Periods.indexOf('~')!=-1){
StartMonth = row.Periods.split('~')[0];
EndMonth = row.Periods.split('~')[1];
}else{
StartMonth = row.Periods;
EndMonth = row.Periods
}
}
this.OpenNewUrl(path, {
OrderId: row.OrderId,
StartMonth:StartMonth,
EndMonth:EndMonth,
comefrom:1,
});
}
},
}
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -172,6 +172,7 @@
isShowEdit:false,//不显示修改按钮
isShowBackClass:false,//不显示退课
isShowRenewClass:false,//不显示续课
isshoworderconfirm:false,//订单确认按钮
},
EmployeeList: [], //业务员
......@@ -181,6 +182,13 @@
if (this.$route.query.OrderId) {
this.msg.OrderId = this.$route.query.OrderId;
}
let userinfo = this.getLocalStorage();
userinfo.ActionMenuList.map(x=>{//判断权限
if(x.FunctionCode == "SA_Order_confirm"){//留学和就业订单确认按钮
this.authObj.isshoworderconfirm = true;
}
})
this.getOrderState();
this.getCourseList();
},
......
......@@ -46,6 +46,7 @@
isShowManagerRemark: true, //显示总经理备注
isShowCommissionEdit: true, //显示修改提成按钮
isShowRewardEdit: true, //显示修改额外提成按钮
isshoworderconfirm:false,//订单确认按钮
}
}
},
......@@ -53,6 +54,13 @@
if (this.$route.query.SourceId) {
this.msg.SourceId = this.$route.query.SourceId;
}
let userinfo = this.getLocalStorage();
userinfo.ActionMenuList.map(x=>{//判断权限
if(x.FunctionCode == "SA_Order_confirm"){//留学和就业订单确认按钮
this.authObj.isshoworderconfirm = true;
}
})
this.getList();
},
mounted() {
......
This diff is collapsed.
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