Commit 59da7374 authored by Mac's avatar Mac

市场提成规则

parent 06e5a420
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
@hide="closeCutomer" @hide="closeCutomer"
transition-show="slide-left" transition-show="slide-left"
> >
<div class="customMain"> <div class="customMain" v-if="addMsg">
<div class="cycle_Title">市场顾问教师提成规则</div> <div class="cycle_Title">市场顾问教师提成规则</div>
<div style="margin-top: 10px;"> <div style="margin-top: 10px;">
<q-input <q-input
...@@ -16,34 +16,188 @@ ...@@ -16,34 +16,188 @@
stack-label stack-label
:dense="false" :dense="false"
v-model="addMsg.Name" v-model="addMsg.Name"
style="width: 640px;"
ref="Name" ref="Name"
class="col-12 q-pb-lg" class="col-12 q-pb-lg"
label="方案名称" label="方案名称"
:rules="[val => !!val || '请填写平台名称']" :rules="[val => !!val || '请填写方案名称']"
/> />
</div> </div>
<q-select
filled
stack-label
option-value="SId"
option-label="SName"
v-model="addMsg.SchoolIds"
use-chips
:options="SchoolList"
label="校区"
:dense="false"
class="col-6 q-pr-lg q-pb-lg"
emit-value
multiple
map-options
@input="$forceUpdate()"
/>
<q-select
filled
stack-label
option-value="CourseId"
option-label="CourseName"
v-model="addMsg.CourseList"
use-chips
use-input
:options="myCourseList"
label="课程"
:dense="false"
class="col-6 q-pr-lg q-pb-lg"
emit-value
multiple
map-options
@filter="filterFn"
/>
<div style="display: flex;align-items: center;"> <div style="display: flex;align-items: center;">
类型: <span style="width: 75px;">类型:</span>
<q-radio v-model="addMsg.Type" val="1" label="市场" /> <q-radio v-model="addMsg.Type" val="1" label="市场" />
<q-radio v-model="addMsg.Type" val="2" label="顾问" /> <q-radio v-model="addMsg.Type" val="2" label="顾问" />
<q-radio v-model="addMsg.Type" val="3" label="教师" /> <q-radio v-model="addMsg.Type" val="3" label="教师" />
</div> </div>
<div style="display: flex;align-items: center;"> <div style="display: flex;align-items: center;">
课程类型: <span style="width: 75px;">课程类型:</span>
<q-radio v-model="addMsg.CourseType" val="1" label="包含" /> <q-radio v-model="addMsg.CourseType" val="1" label="包含" />
<q-radio v-model="addMsg.CourseType" val="2" label="不包含" /> <q-radio v-model="addMsg.CourseType" val="2" label="不包含" />
</div> </div>
<q-select filled stack-label option-value="CourseId" option-label="CourseName" v-model="addMsg.CourseList"
ref="CouseId" :options="CourseList" label="课程" :dense="false" class="col-6 q-pr-lg q-pb-lg" emit-value multiple use-input
map-options />
<q-btn
label="确认" <div style="margin-top: 10px;" >
color="accent q-px-md" <q-input
size="sm" filled
style="font-weight:400 !important" style="width: 640px;"
@click="setCheckStatus()" stack-label
type="number"
:dense="false"
v-model="addMsg.FirstRate"
ref="FirstRate"
class="col-12 q-pb-lg"
label="首次发放比例(%)"
:rules="[val => !!val || '请填写首次发放比例']"
/>
</div>
<div style="margin-top: 10px;" >
<q-input
filled
style="width: 640px;"
stack-label
type="number"
:dense="false"
v-model="addMsg.CourseRate"
ref="CourseRate"
class="col-12 q-pb-lg"
label="课程比例(%)"
:rules="[val => !!val || '请填写课程比例']"
/>
</div>
<q-select
filled
stack-label
option-value="Id"
option-label="EmployeeName"
v-model="addMsg.EmpList"
use-chips
use-input
:options="myEmployeeList"
label="提成人员"
:dense="false"
class="col-6 q-pr-lg q-pb-lg"
emit-value
multiple
map-options
@filter="filterEmployee"
/>
<q-select
filled
stack-label
option-value="Id"
option-label="EmployeeName"
v-model="addMsg.ChildEmpList"
use-chips
use-input
:options="myEmployeeList"
label="部门人员"
:dense="false"
class="col-6 q-pr-lg q-pb-lg"
emit-value
multiple
map-options
@filter="filterEmployee"
/> />
<div style="margin-bottom: 80px;">
<div>业绩比例</div>
<div
v-for="(x,y) in addMsg.RateList"
:key="y"
style="display: flex;align-items: center;margin-bottom: 10px;"
>
<q-input
clearable
filled
v-model="x.StartValue"
style="width: 190px;margin-right: 5px;"
type="number"
@input="$forceUpdate()"
label="初始值"
/>
<q-input
clearable
filled
v-model="x.EndValue"
style="width: 190px;margin-right: 5px;"
type="number"
@input="$forceUpdate()"
label="结束值"
/>
<q-input
clearable
filled
v-model="x.Rate"
style="width: 190px;margin-right: 5px;"
type="number"
@input="$forceUpdate()"
label="提成比例(%)"
/>
<q-btn
round
size="xs"
color="deep-orange"
icon="delete"
v-if="addMsg.RateList.length > 1"
@click="addMsg.RateList.splice(y, 1)"
style="margin-left: 10px;"
/>
<q-btn
round
size="xs"
color="primary"
icon="add"
v-if="addMsg.RateList.length == y + 1"
@click="addMsg.RateList.push({ StartValue: '', EndValue: '', Rate: '' })"
style="margin-left: 10px;"
/>
</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;">
<q-btn
color="accent"
size="sm"
class="q-mr-md"
label="保存"
@click="setAdd()"
></q-btn>
</div>
<div class="dialog-out-close" @click="closeCutomer"> <div class="dialog-out-close" @click="closeCutomer">
<i class="iconfont icon-close" style="font-size:26px;" /> <i class="iconfont icon-close" style="font-size:26px;" />
...@@ -55,6 +209,7 @@ ...@@ -55,6 +209,7 @@
import { import {
queryEmployee queryEmployee
} from '../../api/users/user' } from '../../api/users/user'
import recruitFormVue from '../system/recruit-form.vue'
export default { export default {
...@@ -77,6 +232,14 @@ export default { ...@@ -77,6 +232,14 @@ export default {
CourseList: {//课程下拉列表 CourseList: {//课程下拉列表
type: Array, type: Array,
default: [] default: []
},
SchoolList:{//校区下拉列表
type: Array,
default: []
},
selectData:{//修改带过来的对象
type: Object,
default: {}
} }
}, },
data() { data() {
...@@ -86,41 +249,64 @@ export default { ...@@ -86,41 +249,64 @@ export default {
//员工列表 //员工列表
employeeList: [], employeeList: [],
myEmployeeList: [], myEmployeeList: [],
allCourseList: [],
myCourseList:[],
} }
}, },
created() { created() {
this.employeeList = JSON.parse(JSON.stringify(this.loyeeList)) this.employeeList = JSON.parse(JSON.stringify(this.loyeeList))
this.myEmployeeList = JSON.parse(JSON.stringify(this.loyeeList)) this.myEmployeeList = JSON.parse(JSON.stringify(this.loyeeList))
this.allCourseList = JSON.parse(JSON.stringify(this.CourseList))
this.myCourseList = JSON.parse(JSON.stringify(this.CourseList))
if (this.isAdd == true) {//新增 if (this.isAdd == true) {//新增
this.addMsg = { this.addMsg = {
Id: 0, Id: 0,
Name: '', Name: '',
Type: '1', Type: '1',
SchoolIds: '', CourseType: '1',
CourseType: 1,
CourseIds: '',
SchoolIds: '', SchoolIds: '',
CourseList: [],//课程列表 CourseList: [],//课程列表
CommissionType: 1, EmpList: [],//提现人员
EmpIds: '', ChildEmpList: [],//部门人员
EmpList: [], CourseRate: '',//课程比例
ChildEmpIds: '', FirstRate:'',//首次发放比例
ChildEmpList: [],
CourseRate: '',
RateList: [ RateList: [
{ StartValue: '', EndValue: '', Rate: '' } { StartValue: '', EndValue: '', Rate: '' }
] ]
} }
} else {//修改 } else {//修改
this.addMsg = JSON.parse(JSON.stringify(this.selectData))
this.addMsg.Type = this.addMsg.Type.toString()
this.addMsg.CourseType = this.addMsg.CourseType.toString()
this.addMsg.SchoolIds = this.selectData.SchoolIds?this.selectData.SchoolIds.split(',').map(Number):[] ;
console.log(this.addMsg.SchoolIds)
this.addMsg.CourseList = this.getId(this.selectData.CourseList,2)
this.addMsg.EmpList = this.getId(this.selectData.EmpList,3)
this.addMsg.ChildEmpList = this.getId(this.selectData.ChildEmpList,3)
console.log(this.addMsg)
} }
}, },
mounted() { mounted() {
}, },
methods: { methods: {
getId(arr,type){
let list = [];
let Id = 'Id';
if(type==1){
Id = 'SId';
}else if(type==2){
Id = 'CourseId';
}else if(type==3){
Id = 'Id';
}
if(arr && arr.length>0){
arr.forEach(x=>{
list.push(x[Id])
})
}
return list
},
closeCutomer() { closeCutomer() {
this.$emit('close') this.$emit('close')
}, },
...@@ -129,14 +315,137 @@ export default { ...@@ -129,14 +315,137 @@ export default {
//筛选员工 //筛选员工
filterEmployee(val, update, abort) { filterEmployee(val, update, abort) {
update(() => { update(() => {
this.myEmployeeList = this.employeeList.filter( if (val === '') {
v => v.EmployeeName.indexOf(val) > -1 this.myEmployeeList = this.employeeList
); }
}); else {
const needle = val.toLowerCase();
this.myEmployeeList = this.employeeList.filter(v => v.EmployeeName.toLowerCase().indexOf(needle) > -1);
}
})
}, },
changeCourse(){ filterFn(val, update) {//课程的栓选
update(() => {
if (val === '') {
this.myCourseList = this.allCourseList
}
else {
const needle = val.toLowerCase();
this.myCourseList = this.allCourseList.filter(v => v.CateName.toLowerCase().indexOf(needle) > -1);
}
})
},
setAdd() {
this.$refs.Name.validate();
this.$refs.CourseRate.validate();
this.$refs.FirstRate.validate();
if (!this.$refs.Name.hasError && !this.$refs.CourseRate.hasError && !this.$refs.FirstRate.hasError) {
console.log(this.addMsg)
let msg = JSON.parse(JSON.stringify(this.addMsg))
if (this.addMsg.SchoolIds && this.addMsg.SchoolIds.length == 0) {
this.$q.notify({
type: 'negative',
message: `请选择校区`,
position: 'top'
})
return
}else{
msg.SchoolIds = this.addMsg.SchoolIds.join(',')
}
if (this.addMsg.CourseList.length == 0) {
this.$q.notify({
type: 'negative',
message: `请选择课程`,
position: 'top'
})
return
}else{
msg.CourseList = this.getList(this.allCourseList,this.addMsg.CourseList,2,'CourseId','CourseName')
}
if (this.addMsg.EmpList.length == 0) {
this.$q.notify({
type: 'negative',
message: `请选择提成人员`,
position: 'top'
})
return
}else{
msg.EmpList = this.getList(this.employeeList,this.addMsg.EmpList,3,)
}
if (this.addMsg.ChildEmpList.length == 0) {
this.$q.notify({
type: 'negative',
message: `请选择部门人员`,
position: 'top'
})
return
}else{
msg.ChildEmpList = this.getList(this.employeeList,this.addMsg.ChildEmpList,3,)
}
for(let i=0;i<msg.RateList.length;i++){
let x = msg.RateList[i]
console.log(x.StartValue)
if(x.StartValue==='' ){
this.$q.notify({
type: 'negative',
message: `请输入初始值`,
position: 'top'
})
return
}
if(x.EndValue==''){
this.$q.notify({
type: 'negative',
message: `请输入结束值`,
position: 'top'
})
return
}
if(x.Rate==''){
this.$q.notify({
type: 'negative',
message: `请输入提成比例`,
position: 'top'
})
return
}
}
console.log(msg,'222222')
this.$emit('success',msg)
}
}, },
getList(arr,xzarr,type,){
let list = [];
let Id = 'Id';
let Name = 'Name';
if(type==1){
Id = 'SId';
Name = 'SName';
}else if(type==2){
Id = 'CourseId';
Name = 'CourseName';
}else if(type==3){
Id = 'Id';
Name = 'EmployeeName';
}
xzarr.forEach(x => {
for(let i= 0;i<arr.length;i++){
let j = arr[i]
if(j[Id] == x){
let obj = {}
obj[Id]=j[Id],
obj[Name]=j[Name],
list.push(obj)
break
}
}
});
return list
}
}, },
} }
......
...@@ -32,6 +32,11 @@ ...@@ -32,6 +32,11 @@
.marketRules .singeRowTable tr th { .marketRules .singeRowTable tr th {
border: 1px solid #d2d2d2; border: 1px solid #d2d2d2;
} }
.cycle_Title {
font-size: 20px;
font-weight: 500;
color: #1f2329;
}
</style> </style>
<template> <template>
<div class="page-body marketRules"> <div class="page-body marketRules">
...@@ -39,10 +44,10 @@ ...@@ -39,10 +44,10 @@
<div class="col row wrap q-mr-lg q-col-gutter-md"></div> <div class="col row wrap q-mr-lg q-col-gutter-md"></div>
</div> </div>
<template> <template>
<div>市场顾问提成规则</div> <div class="cycle_Title">市场顾问提成规则</div>
<div <div
class="cm_content" class="cm_content"
style="width: 100%;" style="width: 100%;margin-bottom: 25px;margin-top: 10px;"
v-for=" ( item , index ) in dataList " v-for=" ( item , index ) in dataList "
:key="index" :key="index"
> >
...@@ -54,11 +59,13 @@ ...@@ -54,11 +59,13 @@
v-loading="loading" v-loading="loading"
> >
<tr> <tr>
<th>方案名称</th> <th width="8%">方案名称</th>
<th>类型</th> <th>类型</th>
<th width="200">校区</th>
<th>课程类型</th> <th>课程类型</th>
<th>课程</th> <th width="300">课程</th>
<th>提成方式</th> <th>首次发放比例</th>
<th>课程比例</th>
<th>提成人员</th> <th>提成人员</th>
<th>部门人员</th> <th>部门人员</th>
<th width="100">操作</th> <th width="100">操作</th>
...@@ -73,27 +80,27 @@ ...@@ -73,27 +80,27 @@
<span v-if="item.Type == 3">教师</span> <span v-if="item.Type == 3">教师</span>
</td> </td>
<td> <td>
<span v-if="item.Type == 1">包含</span> <span>{{ item.SchoolName }}</span>
<span v-if="item.Type == 2">不包含</span>
</td> </td>
<td> <td>
<p v-for="( son , sIndex ) in item.CourseList">{{ son.CourseName }}</p> <span v-if="item.CourseType == 1">包含</span>
<span v-if="item.CourseType == 2">不包含</span>
</td> </td>
<td> <td style="padding: 0 10px;">
<span v-if="item.CommissionType == 1">课耗提成</span> <span v-for="( son , sIndex ) in item.CourseList">{{ son.CourseName }}{{item.CourseList.length==sIndex+1?'':'、'}}</span>
<span v-if="item.CommissionType == 2">次月全提</span>
<span v-if="item.CommissionType == 3">课程比例:{{ item.CourseRate + '%' }}</span>
</td> </td>
<td> <td>
<p v-for="( son , sIndex ) in item.EmpList">{{ son.EmployeeName }}</p> <span >{{ item.FirstRate + '%' }}</span>
</td> </td>
<td> <td>
<p v-for="( son , sIndex ) in item.ChildEmpList">{{ son.EmployeeName }}</p> <span >{{ item.CourseRate + '%' }}</span>
</td>
<td style="padding: 0 10px;">
<span v-for="( son , sIndex ) in item.EmpList">{{ son.EmployeeName }}{{item.EmpList.length==sIndex+1?'':'、'}}</span>
</td>
<td style="padding: 0 10px;">
<span v-for="( son , sIndex ) in item.ChildEmpList">{{ son.EmployeeName }}{{item.ChildEmpList.length==sIndex+1?'':'、'}}</span>
</td> </td>
<!-- <td v-for="( son , sIndex ) in item.RateList">{{ son.StartValue }}</td>
<td v-for="( son , sIndex ) in item.RateList">{{ son.EndValue }}</td>
<td v-for="( son , sIndex ) in item.RateList">{{ son.Rate }}</td>-->
<td> <td>
<q-btn <q-btn
flat flat
...@@ -102,7 +109,7 @@ ...@@ -102,7 +109,7 @@
color="accent" color="accent"
style="font-weight:400" style="font-weight:400"
label="编辑" label="编辑"
@click="EditTask(props.row)" @click="EditTask(item)"
/> />
<q-btn <q-btn
flat flat
...@@ -116,27 +123,39 @@ ...@@ -116,27 +123,39 @@
</td> </td>
</tr> </tr>
</table> </table>
<div></div>
<table <table
class="po_content singeRowTable" class="po_content singeRowTable"
style="border:1px solid #E6E6E6;" style="border:1px solid #E6E6E6;"
cellspacing="0" cellspacing="0"
cellpadding="0" cellpadding="0"
v-loading="loading" v-loading="loading"
> >
<tr> <tr>
<th :rowspan="item.RateList.length">业绩比例</th> <th >业绩比例</th>
</tr> </tr>
<tr> </table>
<th <div style="width:100%;overflow-x: auto;">
v-for="( son , sIndex ) in item.RateList" <table
:key="sIndex" class="po_content singeRowTable"
>{{ son.StartValue }}{{ '<业绩<=' }}{{ son.EndValue }}</th> style="border:1px solid #E6E6E6;"
</tr> cellspacing="0"
<tr> cellpadding="0"
<td v-for="( son , sIndex ) in item.RateList" :key="sIndex">{{ son.Rate }}%</td> v-loading="loading"
</tr> >
</table>
<tr>
<th style="min-width: 260px;"
v-for="( son , sIndex ) in item.RateList"
:key="sIndex"
>{{ son.StartValue }}{{ '<业绩<=' }}{{ son.EndValue }}</th>
</tr>
<tr style="width: 1040px;overflow-x: auto;">
<td style="min-width: 260px;" v-for="( son , sIndex ) in item.RateList" :key="sIndex">{{ son.Rate }}%</td>
</tr>
</table>
</div>
</div> </div>
<div <div
v-if="dataList.length == 0" v-if="dataList.length == 0"
...@@ -144,7 +163,7 @@ ...@@ -144,7 +163,7 @@
>暂无数据</div> >暂无数据</div>
<div style="width: 100%;display: flex;justify-content: flex-end;margin-top: 10px;"> <div style="width: 100%;display: flex;justify-content: flex-end;margin-top: 10px;">
<q-btn color="accent" size="sm" icon="add" label="新增规则" @click="AddMsg()" /> <q-btn color="accent" size="sm" icon="add" label="新增规则" @click="AddMsg()" />
<q-btn color="accent" size="sm" label="保存" @click="setMsg()" style="margin-left: 15px;" /> <!-- <q-btn color="accent" size="sm" label="保存" @click="setMsg()" style="margin-left: 15px;" /> -->
</div> </div>
</template> </template>
<marketCommissionfrom <marketCommissionfrom
...@@ -152,6 +171,8 @@ ...@@ -152,6 +171,8 @@
:isAdd="isAdd" :isAdd="isAdd"
:loyeeList='loyeeList' :loyeeList='loyeeList'
:CourseList='CourseList' :CourseList='CourseList'
:SchoolList='SchoolList'
:selectData= 'selectData'
@close="closeForm" @close="closeForm"
@success="refreshList" @success="refreshList"
></marketCommissionfrom> ></marketCommissionfrom>
...@@ -167,7 +188,11 @@ import { ...@@ -167,7 +188,11 @@ import {
} from '../../../api/course/index' } from '../../../api/course/index'
import { import {
getSellAchievementsRuleList, getSellAchievementsRuleList,
setSellAchievementsRule
} from '../../../api/finance/index' } from '../../../api/finance/index'
import {
getSchoolDropdown,
} from '../../../api/school/index'
import marketCommissionfrom from "../../../components/finance/marketCommissionfrom"; import marketCommissionfrom from "../../../components/finance/marketCommissionfrom";
export default { export default {
meta: { meta: {
...@@ -186,6 +211,8 @@ export default { ...@@ -186,6 +211,8 @@ export default {
isAdd: false, isAdd: false,
loyeeList: [],//人员列表 loyeeList: [],//人员列表
CourseList:[],//课程列表 CourseList:[],//课程列表
SchoolList:[],//校区下拉
selectData:{},
} }
}, },
created() { created() {
...@@ -202,6 +229,7 @@ export default { ...@@ -202,6 +229,7 @@ export default {
this.getSellAchievementsRuleList(); //获取规则 this.getSellAchievementsRuleList(); //获取规则
this.getEmployeeList(); this.getEmployeeList();
this.getCourseList();//获取课程下拉 this.getCourseList();//获取课程下拉
this.getSchool();//校区下拉
}, },
methods: { methods: {
...@@ -234,23 +262,51 @@ export default { ...@@ -234,23 +262,51 @@ export default {
} }
}) })
}, },
getSchool() {
getSchoolDropdown({}).then(res => {
if (res.Code == 1) {
this.SchoolList = res.Data;
}
})
},
refreshList(data) { //保存规则
console.log(this.dataList,'datalist')
setSellAchievementsRule(data).then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: res.Message,
position: 'top'
})
this.persistent = false;
this.getSellAchievementsRuleList(); //获取规则
preservation() { //保存规则 }
})
}, },
AddMsg() { AddMsg() {//新增
this.selectData = {}
this.persistent = true; this.persistent = true;
this.isAdd = true; this.isAdd = true;
}, },
EditTask(item){//编辑
this.persistent = true;
this.selectData = item
this.isAdd = false;
},
closeForm() { closeForm() {
this.persistent = false; this.persistent = false;
}, },
refreshList() {//成功之后返回
}
}, },
} }
......
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