Commit 7bed3985 authored by youjie's avatar youjie

上传到访表、是否邀约、财务流程 业绩提成规则调整

parent f878f94a
...@@ -292,6 +292,17 @@ export function getStudentDorpDownList(data) { ...@@ -292,6 +292,17 @@ export function getStudentDorpDownList(data) {
}) })
} }
/**
* 确认邀约咨询30分钟以上
*/
export function SetStudentSureConsult(data) {
return request({
url: '/CustomerStudent/SetStudentSureConsult',
method: 'post',
data
})
}
/** /**
* 添加修改学员 * 添加修改学员
......
...@@ -150,8 +150,12 @@ ...@@ -150,8 +150,12 @@
</div> </div>
<div>
<div style="margin-bottom: 80px;"> <span style="width: 75px;">提成类型:</span>
<q-radio v-model="addMsg.SendType" val="1" label="业绩比例" />
<q-radio v-model="addMsg.SendType" val="2" label="固定金额" />
</div>
<div style="margin-bottom: 80px;" v-if="addMsg.SendType=='1'">
<div>业绩比例</div> <div>业绩比例</div>
<div <div
...@@ -206,6 +210,39 @@ ...@@ -206,6 +210,39 @@
/> />
</div> </div>
</div> </div>
<div style="margin-bottom: 80px;" v-if="addMsg.SendType=='2'">
<div>固定金额</div>
<div style="display: flex;align-items: center;margin-bottom: 10px;">
<q-input
clearable
filled
v-model="addMsg.PeopleMoney"
style="width: 190px;margin-right: 5px;"
type="number"
@input="$forceUpdate()"
label="提成金额">
<template v-slot:append>
<span class="fz14">/人</span>
</template>
</q-input>
<q-input
clearable
filled
v-model="addMsg.ExtraMoney"
style="width: 190px;margin-right: 5px;"
type="number"
@input="$forceUpdate()"
label="额外奖励">
<template v-slot:append>
<span class="fz14">/人</span>
</template>
</q-input>
<div>
<span class="fz14 text-negative">注释:额外奖励需确认邀约咨询30分钟以上</span>
</div>
</div>
</div>
<div style="width: 100%;height: 50px;position: absolute;left: 0;bottom: 0;background: #FFF;display: flex;align-items: center;padding: 0 20px;justify-content: flex-end;"> <div style="width: 100%;height: 50px;position: absolute;left: 0;bottom: 0;background: #FFF;display: flex;align-items: center;padding: 0 20px;justify-content: flex-end;">
<q-btn <q-btn
color="accent" color="accent"
...@@ -288,7 +325,10 @@ export default { ...@@ -288,7 +325,10 @@ export default {
FirstRate:'',//首次发放比例 FirstRate:'',//首次发放比例
RateList: [ RateList: [
{ StartValue: '', EndValue: '', Rate: '' } { StartValue: '', EndValue: '', Rate: '' }
] ],
SendType: '1',
PeopleMoney: 0,
ExtraMoney: 0
} }
} else {//修改 } else {//修改
this.addMsg = JSON.parse(JSON.stringify(this.selectData)) this.addMsg = JSON.parse(JSON.stringify(this.selectData))
...@@ -298,6 +338,9 @@ export default { ...@@ -298,6 +338,9 @@ export default {
this.addMsg.CourseList = this.getId(this.selectData.CourseList,2) this.addMsg.CourseList = this.getId(this.selectData.CourseList,2)
this.addMsg.EmpList = this.getId(this.selectData.EmpList,3) this.addMsg.EmpList = this.getId(this.selectData.EmpList,3)
this.addMsg.ChildEmpList = this.getId(this.selectData.ChildEmpList,3) this.addMsg.ChildEmpList = this.getId(this.selectData.ChildEmpList,3)
this.addMsg.SendType = this.addMsg.SendType?String(this.addMsg.SendType):'1'
this.addMsg.PeopleMoney = this.addMsg.PeopleMoney?this.addMsg.PeopleMoney:0
this.addMsg.ExtraMoney = this.addMsg.ExtraMoney?this.addMsg.ExtraMoney:0
if(this.addMsg.EmpList.length== this.employeeList.length){ if(this.addMsg.EmpList.length== this.employeeList.length){
this.personnel=true this.personnel=true
...@@ -310,7 +353,9 @@ export default { ...@@ -310,7 +353,9 @@ export default {
}else{ }else{
this.branch=false this.branch=false
} }
if(this.addMsg.RateList.length==0){
this.addMsg.RateList.push({ StartValue: '', EndValue: '', Rate: '' })
}
} }
}, },
...@@ -367,7 +412,17 @@ export default { ...@@ -367,7 +412,17 @@ export default {
this.$refs.Name.validate(); this.$refs.Name.validate();
this.$refs.CourseRate.validate(); this.$refs.CourseRate.validate();
this.$refs.FirstRate.validate(); this.$refs.FirstRate.validate();
if(this.addMsg.SendType=='1'){
this.addMsg.PeopleMoney = 0
this.addMsg.ExtraMoney = 0
}else{
this.addMsg.RateList = []
if(this.addMsg.PeopleMoney==''){
this.addMsg.PeopleMoney = 0
}if(this.addMsg.ExtraMoney==''){
this.addMsg.ExtraMoney = 0
}
}
if (!this.$refs.Name.hasError && !this.$refs.CourseRate.hasError && !this.$refs.FirstRate.hasError) { if (!this.$refs.Name.hasError && !this.$refs.CourseRate.hasError && !this.$refs.FirstRate.hasError) {
let msg = JSON.parse(JSON.stringify(this.addMsg)) let msg = JSON.parse(JSON.stringify(this.addMsg))
......
...@@ -276,6 +276,27 @@ ...@@ -276,6 +276,27 @@
</div> </div>
</div> </div>
</div> </div>
<div class="customer_info_component">
<div class="customer_info_Stage">
<div class="stage_label">
到访表
</div>
<div class="stage_value row">
<div class="q-pr-lg text-blue" v-if="customObj.FileVoucher">
<a :href="customObj.FileVoucher" target="_blank" rel="noopener noreferrer"
style="color:inherit;">
查看
</a>
</div>
<el-upload :before-upload="uploadVisitTableFile" :multiple="false"
action="" :show-file-list="false">
<q-btn color="primary" size="xs" unelevated label="上传">
<i class="el-icon-upload q-pl-xs"></i>
</q-btn>
</el-upload>
</div>
</div>
</div>
<div class="custom_Line"></div> <div class="custom_Line"></div>
<div class="info_title">基本资料</div> <div class="info_title">基本资料</div>
<div class="info_content"> <div class="info_content">
...@@ -339,7 +360,7 @@ ...@@ -339,7 +360,7 @@
saveStudent, //保存学员信息 saveStudent, //保存学员信息
GetStudentTypeList, GetStudentTypeList,
getStudentDorpDownList, getStudentDorpDownList,
GetNeedsList GetNeedsList,
} from "../../../api/school/index"; } from "../../../api/school/index";
import { import {
getGuestBasicsEnumList, getGuestBasicsEnumList,
...@@ -415,6 +436,7 @@ ...@@ -415,6 +436,7 @@
StuType: "", //客户类型 StuType: "", //客户类型
StuNeeds: 0, //客户需求 StuNeeds: 0, //客户需求
StuTel: "", //显示使用 StuTel: "", //显示使用
FileVoucher: ""//http://192.168.10.214:8130/EduSystem/Test/Upload/SetStudentVoucher/202303221126306360000000004.png
}, },
//日语基础列表 //日语基础列表
basicList: [], basicList: [],
...@@ -448,6 +470,7 @@ ...@@ -448,6 +470,7 @@
}, },
created() { created() {
this.userInfo = this.getLocalStorage(); this.userInfo = this.getLocalStorage();
let userInfo = this.getLocalStorage();
this.getStuStageList(); this.getStuStageList();
this.getBasicList(); this.getBasicList();
this.queryGuestEducationEnumList(); this.queryGuestEducationEnumList();
...@@ -476,6 +499,13 @@ ...@@ -476,6 +499,13 @@
} }
}, },
methods: { methods: {
UploadImage(file) {
UploadSelfFile("SetStudentVoucher", files, res => {
if (res.Code == 1) {
this.customObj.StuIcon = res.FileUrl;
}
});
},
//是否显示关联来源人信息 //是否显示关联来源人信息
IsShowStuSourceIdName(item) { IsShowStuSourceIdName(item) {
var isHaveAuth = false; var isHaveAuth = false;
...@@ -495,6 +525,16 @@ ...@@ -495,6 +525,16 @@
return false; return false;
} }
}, },
// 上传到访表
uploadVisitTableFile(files) {
UploadSelfFile("FileVoucher", files, res => {
if (res.Code == 1) {
this.customObj.FileVoucher = res.FileUrl
}else{
this.$message.error('上传文件失败,请重新上传');
}
});
},
uploadFile(files) { uploadFile(files) {
UploadSelfFile("studentIcon", files, res => { UploadSelfFile("studentIcon", files, res => {
if (res.Code == 1) { if (res.Code == 1) {
...@@ -617,6 +657,7 @@ ...@@ -617,6 +657,7 @@
} }
}); });
}, },
//获取员工列表 //获取员工列表
getEmployeeList() { getEmployeeList() {
queryEmployee({ queryEmployee({
...@@ -764,6 +805,7 @@ ...@@ -764,6 +805,7 @@
this.customObj.WeChatNo = tempDate.WeChatNo; this.customObj.WeChatNo = tempDate.WeChatNo;
this.customObj.StuNeeds = tempDate.StuNeeds; this.customObj.StuNeeds = tempDate.StuNeeds;
this.customObj.StuTel = tempDate.StuTel; this.customObj.StuTel = tempDate.StuTel;
this.customObj.FileVoucher = tempDate.FileVoucher;
//有订单 //有订单
if (tempDate.OrderCount && tempDate.OrderCount > 0) { if (tempDate.OrderCount && tempDate.OrderCount > 0) {
this.isHaveOrder = true; this.isHaveOrder = true;
......
...@@ -237,6 +237,23 @@ ...@@ -237,6 +237,23 @@
</template> </template>
</q-td> </q-td>
</template> </template>
<template v-slot:body-cell-CreateByName="props">
<q-td :props="props">
<div class="row no-wrap items-center">
<div>
<template v-if="isInvite">
<q-toggle v-model="props.row.IsSureConsultTime" :false-value="0" :true-value="1"
@input="setInvite(props.row)"/>
<q-tooltip>{{props.row.IsSureConsultTime?'取消邀约':'确认邀约咨询30分钟以上'}}</q-tooltip>
</template>
<span v-else class="q-pr-sm text-grey-7">
{{props.row.IsSureConsultTime?'已邀约':'未邀约'}}
</span>
</div>
<span>{{props.row.CreateByName}}</span>
</div>
</q-td>
</template>
</q-table> </q-table>
<student-form v-if="isShowStuForm" :save-obj="stuOption" @close="closeStuForm" @success="refreshStuList"> <student-form v-if="isShowStuForm" :save-obj="stuOption" @close="closeStuForm" @success="refreshStuList">
</student-form> </student-form>
...@@ -270,6 +287,10 @@ ...@@ -270,6 +287,10 @@
import { import {
queryEmployee queryEmployee
} from "../../../api/users/user"; } from "../../../api/users/user";
import {
SetStudentSureConsult, //邀约
} from "../../../api/school/index";
import { date } from 'quasar'
export default { export default {
props: { props: {
...@@ -473,6 +494,12 @@ ...@@ -473,6 +494,12 @@
field: "CreateTimeStr", field: "CreateTimeStr",
align: "left" align: "left"
}, },
// {
// name: "IsSureConsultTime",
// label: "是否邀约",
// align: "left",
// field: "IsSureConsultTime"
// },
{ {
name: "CreateByName", name: "CreateByName",
label: "负责人", label: "负责人",
...@@ -504,7 +531,8 @@ ...@@ -504,7 +531,8 @@
}, },
//员工列表 //员工列表
employeeList: [], employeeList: [],
myEmployeeList: [] myEmployeeList: [],
isInvite: false
}; };
}, },
watch: { watch: {
...@@ -518,6 +546,20 @@ ...@@ -518,6 +546,20 @@
}, },
created() { created() {
this.userInfo = this.getLocalStorage(); this.userInfo = this.getLocalStorage();
// 邀约功能权限
this.isInvite = false;
if (
this.userInfo &&
this.userInfo.ActionMenuList &&
this.userInfo.ActionMenuList.length > 0
) {
this.userInfo.ActionMenuList.forEach(x => {
if (x.FunctionCode == "isInvite") {
this.isInvite = true;
}
});
}
this.formatAssistList(); this.formatAssistList();
}, },
mounted() { mounted() {
...@@ -527,6 +569,18 @@ ...@@ -527,6 +569,18 @@
...mapGetters(["logo", "name"]) ...mapGetters(["logo", "name"])
}, },
methods: { methods: {
setInvite(row){
if(!this.isInvite) return
let msg = {
StuId: row.StuId,
IsSureConsultTime: row.IsSureConsultTime
}
SetStudentSureConsult(msg).then(res => {
if (res.Code == 1) {
this.$emit("success");
}
});
},
//是否有下载客户资料权限 //是否有下载客户资料权限
IsDownLoadStu() { IsDownLoadStu() {
var isHaveAuth = false; var isHaveAuth = false;
...@@ -737,6 +791,15 @@ ...@@ -737,6 +791,15 @@
}, },
//转订单 //转订单
transferOrder() { transferOrder() {
let CreateTimeStr = date.formatDate(new Date(this.selection[0].CreateTimeStr), 'YYYY-MM-DD')
let CreateTimeStr2 = date.formatDate(new Date('2023-03-22'), 'YYYY-MM-DD')
console.log(CreateTimeStr>=CreateTimeStr2,CreateTimeStr,CreateTimeStr2)
if(CreateTimeStr>=CreateTimeStr2){
if(!this.selection[0].FileVoucher){
this.$message.error('需先上传学员到访表')
return
}
}
const firstId = this.selection[0].CustomerId; const firstId = this.selection[0].CustomerId;
const flag = this.selection.every(e => { const flag = this.selection.every(e => {
return e.CustomerId == firstId; return e.CustomerId == firstId;
...@@ -753,6 +816,15 @@ ...@@ -753,6 +816,15 @@
}, },
//转留学 //转留学
transferAbroad() { transferAbroad() {
let CreateTimeStr = date.formatDate(new Date(this.selection[0].CreateTimeStr), 'YYYY-MM-DD')
let CreateTimeStr2 = date.formatDate(new Date('2023-03-22'), 'YYYY-MM-DD')
console.log(CreateTimeStr>=CreateTimeStr2,CreateTimeStr,CreateTimeStr2)
if(CreateTimeStr>=CreateTimeStr2){
if(!this.selection[0].FileVoucher){
this.$message.error('需先上传学员到访表')
return
}
}
this.isShowAbroad = true; this.isShowAbroad = true;
}, },
getCurseManager(row) { getCurseManager(row) {
......
...@@ -68,11 +68,11 @@ ...@@ -68,11 +68,11 @@
<tr> <tr>
<th width="100" style="min-width: 100px;max-width: 100px;">方案名称</th> <th width="100" style="min-width: 100px;max-width: 100px;">方案名称</th>
<th width="5%">类型</th> <th width="5%">类型</th>
<th width="15%">校区</th> <th width="10%">校区</th>
<th width="5%">课程类型</th> <th width="5%">课程类型</th>
<th width="">课程</th> <th width="">课程</th>
<th width="7%">首次发放比例</th> <th width="7%">首次发放比例</th>
<th width="5%">课程比例</th> <th width="10%">课程比例</th>
<th width="10%">提成人员</th> <th width="10%">提成人员</th>
<th width="10%">部门人员</th> <th width="10%">部门人员</th>
<th width="10%">操作</th> <th width="10%">操作</th>
...@@ -113,6 +113,7 @@ ...@@ -113,6 +113,7 @@
<td> <td>
<span >{{ item.CourseRate + '%' }}</span> <span >{{ item.CourseRate + '%' }}</span>
</td> </td>
<td style="padding: 0 10px;"> <td style="padding: 0 10px;">
<span v-for="( son , sIndex ) in item.EmpList" :key="sIndex"> <span v-for="( son , sIndex ) in item.EmpList" :key="sIndex">
<span v-if="sIndex<8">{{ son.EmployeeName }}{{item.EmpList.length==sIndex+1?'':'、'}}</span> <span v-if="sIndex<8">{{ son.EmployeeName }}{{item.EmpList.length==sIndex+1?'':'、'}}</span>
...@@ -127,6 +128,7 @@ ...@@ -127,6 +128,7 @@
<el-button slot="reference" style="border: none;" type="text">查看更多</el-button> <el-button slot="reference" style="border: none;" type="text">查看更多</el-button>
</el-popover> </el-popover>
</td> </td>
<td style="padding: 0 10px;"> <td style="padding: 0 10px;">
<span v-for="( son , sIndex ) in item.ChildEmpList" :key="sIndex"> <span v-for="( son , sIndex ) in item.ChildEmpList" :key="sIndex">
<span v-if="sIndex<8">{{ son.EmployeeName }}{{item.ChildEmpList.length==sIndex+1?'':'、'}}</span> <span v-if="sIndex<8">{{ son.EmployeeName }}{{item.ChildEmpList.length==sIndex+1?'':'、'}}</span>
...@@ -174,7 +176,7 @@ ...@@ -174,7 +176,7 @@
</tr> </tr>
</table> --> </table> -->
<div style="width:100%;overflow-x: auto;"> <div style="width:100%;overflow-x: auto;">
<table <table v-if="item.RateList.length>0||item.SendType=='1'"
class="po_content singeRowTable" class="po_content singeRowTable"
style="border:1px solid #E6E6E6;" style="border:1px solid #E6E6E6;"
cellspacing="0" cellspacing="0"
...@@ -193,6 +195,25 @@ ...@@ -193,6 +195,25 @@
</tr> </tr>
</table> </table>
<table v-if="item.SendType=='2'"
class="po_content singeRowTable"
style="border:1px solid #E6E6E6;"
cellspacing="0"
cellpadding="0"
>
<tr>
<td rowspan="2" width="100" style="min-width: 100px;">固定金额</td>
<th style="min-width: 220px;"
>提成金额/人</th>
<th style="min-width: 220px;"
>额外奖励/人</th>
</tr>
<tr style="">
<td style="min-width: 220px;">{{ item.PeopleMoney }}</td>
<td style="min-width: 220px;">{{ item.ExtraMoney }}</td>
</tr>
</table>
</div> </div>
</div> </div>
......
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