|
|
@ -3,7 +3,7 @@ |
|
|
<el-card class="box-card !border-none" shadow="never" v-loading="loading"> |
|
|
<el-card class="box-card !border-none" shadow="never" v-loading="loading"> |
|
|
<div class="flex justify-between items-center"> |
|
|
<div class="flex justify-between items-center"> |
|
|
<span class="text-lg">{{ pageName }}</span> |
|
|
<span class="text-lg">{{ pageName }}</span> |
|
|
<el-button type="primary" @click="addStage"> 新增阶段 </el-button> |
|
|
<el-button type="primary" @click="addStage"> 新增阶段</el-button> |
|
|
</div> |
|
|
</div> |
|
|
</el-card> |
|
|
</el-card> |
|
|
|
|
|
|
|
|
@ -25,72 +25,92 @@ |
|
|
|
|
|
|
|
|
<el-form label-width="100px" style="margin-bottom: 10px"> |
|
|
<el-form label-width="100px" style="margin-bottom: 10px"> |
|
|
<el-form-item label="阶段名称"> |
|
|
<el-form-item label="阶段名称"> |
|
|
<el-input v-model="stage.name" placeholder="请输入阶段名称" /> |
|
|
<el-input v-model="stage.name" placeholder="请输入阶段名称"/> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
</el-form> |
|
|
</el-form> |
|
|
|
|
|
|
|
|
<el-form label-width="100px" style="margin-bottom: 10px"> |
|
|
<el-form label-width="100px" style="margin-bottom: 10px"> |
|
|
<el-form-item label="阶段底薪"> |
|
|
<el-form-item label="阶段底薪"> |
|
|
<el-input v-model="stage.price" placeholder="请输入阶段底薪" /> |
|
|
<el-input v-model="stage.price" placeholder="请输入阶段底薪"/> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
</el-form> |
|
|
</el-form> |
|
|
|
|
|
|
|
|
<el-button type="success" size="small" @click="addRule(stage)">新增规则</el-button> |
|
|
<el-button type="success" size="small" @click="addRule(stage)">新增规则</el-button> |
|
|
|
|
|
|
|
|
<el-table :data="stage.rules" border style="margin-top: 10px"> |
|
|
<el-table :data="stage.rules" border style="margin-top: 10px"> |
|
|
<el-table-column prop="renewal_standard_min" label="续费上限"> |
|
|
<el-table-column prop="renewal_standard_min" label="续费率上限"> |
|
|
<template #default="{ row }"> |
|
|
<template #default="{ row }"> |
|
|
<el-input v-model="row.renewal_standard_min" placeholder="请输入续费上限" /> |
|
|
<el-input v-model="row.renewal_standard_min" placeholder="请输入续费率上限" :max="100" type="number"> |
|
|
|
|
|
<template #append> |
|
|
|
|
|
<el-button type="primary">%</el-button> |
|
|
|
|
|
</template> |
|
|
|
|
|
</el-input> |
|
|
</template> |
|
|
</template> |
|
|
</el-table-column> |
|
|
</el-table-column> |
|
|
|
|
|
|
|
|
<el-table-column prop="renewal_standard_max" label="续费下限"> |
|
|
<el-table-column prop="renewal_standard_max" label="续费率下限"> |
|
|
<template #default="{ row }"> |
|
|
<template #default="{ row }"> |
|
|
<el-input v-model="row.renewal_standard_max" placeholder="请输入续费下限" /> |
|
|
<el-input v-model="row.renewal_standard_max" placeholder="请输入续费率下限" :max="100" type="number"> |
|
|
|
|
|
<template #append> |
|
|
|
|
|
<el-button type="primary">%</el-button> |
|
|
|
|
|
</template> |
|
|
|
|
|
</el-input> |
|
|
</template> |
|
|
</template> |
|
|
</el-table-column> |
|
|
</el-table-column> |
|
|
|
|
|
|
|
|
<el-table-column prop="renewal_commission" label="续费提成"> |
|
|
<el-table-column prop="renewal_commission" label="续费提成"> |
|
|
<template #default="{ row }"> |
|
|
<template #default="{ row }"> |
|
|
<el-input v-model="row.renewal_commission" placeholder="%" /> |
|
|
<el-input v-model="row.renewal_commission" placeholder="输入续费提成金额" type="number"> |
|
|
|
|
|
<template #append> |
|
|
|
|
|
<el-button type="primary">元</el-button> |
|
|
|
|
|
</template> |
|
|
|
|
|
</el-input> |
|
|
</template> |
|
|
</template> |
|
|
</el-table-column> |
|
|
</el-table-column> |
|
|
|
|
|
|
|
|
<el-table-column prop="new_count_min" label="新单成交数上限"> |
|
|
<el-table-column prop="new_count_min" label="新单成交数上限"> |
|
|
<template #default="{ row }"> |
|
|
<template #default="{ row }"> |
|
|
<el-input v-model="row.new_count_min" /> |
|
|
<el-input v-model="row.new_count_min" placeholder="输入完单数量" type="number"> |
|
|
|
|
|
<template #append> |
|
|
|
|
|
<el-button type="primary">单</el-button> |
|
|
|
|
|
</template> |
|
|
|
|
|
</el-input> |
|
|
</template> |
|
|
</template> |
|
|
</el-table-column> |
|
|
</el-table-column> |
|
|
|
|
|
|
|
|
<el-table-column prop="new_count_max" label="新单成交数下限"> |
|
|
<el-table-column prop="new_count_max" label="新单成交数下限"> |
|
|
<template #default="{ row }"> |
|
|
<template #default="{ row }"> |
|
|
<el-input v-model="row.new_count_max" /> |
|
|
<el-input v-model="row.new_count_max" placeholder="输入完单数量" type="number"> |
|
|
|
|
|
<template #append> |
|
|
|
|
|
<el-button type="primary">单</el-button> |
|
|
</template> |
|
|
</template> |
|
|
</el-table-column> |
|
|
</el-input> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<el-table-column prop="xf_count_min" label="续费成交数上限"> |
|
|
|
|
|
<template #default="{ row }"> |
|
|
|
|
|
<el-input v-model="row.xf_count_min" /> |
|
|
|
|
|
</template> |
|
|
</template> |
|
|
</el-table-column> |
|
|
</el-table-column> |
|
|
|
|
|
|
|
|
<el-table-column prop="xf_count_max" label="续费成交数下限"> |
|
|
|
|
|
<template #default="{ row }"> |
|
|
|
|
|
<el-input v-model="row.xf_count_max" /> |
|
|
|
|
|
</template> |
|
|
|
|
|
</el-table-column> |
|
|
|
|
|
|
|
|
|
|
|
<el-table-column prop="new_move_5" label="新招(5+1)x3"> |
|
|
<!-- <el-table-column prop="xf_count_min" label="续费成交数上限">--> |
|
|
<template #default="{ row }"> |
|
|
<!-- <template #default="{ row }">--> |
|
|
<el-input v-model="row.new_move_5" /> |
|
|
<!-- <el-input v-model="row.xf_count_min" />--> |
|
|
</template> |
|
|
<!-- </template>--> |
|
|
</el-table-column> |
|
|
<!-- </el-table-column>--> |
|
|
<el-table-column prop="new_move_7" label="新招(7+1)x3"> |
|
|
|
|
|
<template #default="{ row }"> |
|
|
<!-- <el-table-column prop="xf_count_max" label="续费成交数下限">--> |
|
|
<el-input v-model="row.new_move_7" /> |
|
|
<!-- <template #default="{ row }">--> |
|
|
</template> |
|
|
<!-- <el-input v-model="row.xf_count_max" />--> |
|
|
</el-table-column> |
|
|
<!-- </template>--> |
|
|
|
|
|
<!-- </el-table-column>--> |
|
|
|
|
|
|
|
|
|
|
|
<!-- <el-table-column prop="new_move_5" label="新招(5+1)x3">--> |
|
|
|
|
|
<!-- <template #default="{ row }">--> |
|
|
|
|
|
<!-- <el-input v-model="row.new_move_5" />--> |
|
|
|
|
|
<!-- </template>--> |
|
|
|
|
|
<!-- </el-table-column>--> |
|
|
|
|
|
<!-- <el-table-column prop="new_move_7" label="新招(7+1)x3">--> |
|
|
|
|
|
<!-- <template #default="{ row }">--> |
|
|
|
|
|
<!-- <el-input v-model="row.new_move_7" />--> |
|
|
|
|
|
<!-- </template>--> |
|
|
|
|
|
<!-- </el-table-column>--> |
|
|
<el-table-column label="操作" width="100"> |
|
|
<el-table-column label="操作" width="100"> |
|
|
<template #default="{ $index }"> |
|
|
<template #default="{ $index }"> |
|
|
<el-button type="danger" size="small" @click="removeRule(stage, $index)">删除</el-button> |
|
|
<el-button type="danger" size="small" @click="removeRule(stage, $index)">删除</el-button> |
|
|
@ -99,7 +119,8 @@ |
|
|
</el-table> |
|
|
</el-table> |
|
|
|
|
|
|
|
|
<el-button type="danger" size="small" style="margin-top: 10px" |
|
|
<el-button type="danger" size="small" style="margin-top: 10px" |
|
|
@click="removeStage(index)">删除该阶段</el-button> |
|
|
@click="removeStage(index)">删除该阶段 |
|
|
|
|
|
</el-button> |
|
|
</el-collapse-item> |
|
|
</el-collapse-item> |
|
|
</el-collapse> |
|
|
</el-collapse> |
|
|
|
|
|
|
|
|
@ -107,37 +128,57 @@ |
|
|
<el-form label-position="left" label-width="100px" class="config-form" style="margin-top: 70px;"> |
|
|
<el-form label-position="left" label-width="100px" class="config-form" style="margin-top: 70px;"> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h3>其他绩效配置</h3> |
|
|
<h2 style="margin-bottom: 20px">多人介入完单资源业绩配置比例</h2> |
|
|
<el-row :gutter="20"> |
|
|
<el-row :gutter="20"> |
|
|
<el-col :span="6"> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="一访成交"> |
|
|
<el-form-item label="一访成交"> |
|
|
<el-input v-model="form.qt_firstVisit" placeholder="%" suffix-icon="el-icon-percent" /> |
|
|
<el-input v-model="form.qt_firstVisit" placeholder="请输入一访成交时提成的分配比例" :max="100" type="number"> |
|
|
|
|
|
<template #append> |
|
|
|
|
|
<el-button type="primary">%</el-button> |
|
|
|
|
|
</template> |
|
|
|
|
|
</el-input> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
</el-col> |
|
|
|
|
|
|
|
|
<el-col :span="6"> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="二访成交"> |
|
|
<el-form-item label="二访成交"> |
|
|
<el-input v-model="form.qt_secondVisit" placeholder="%" suffix-icon="el-icon-percent" /> |
|
|
<el-input v-model="form.qt_secondVisit" placeholder="请输入二访成交时提成的分配比例" :max="100" type="number"> |
|
|
|
|
|
<template #append> |
|
|
|
|
|
<el-button type="primary">%</el-button> |
|
|
|
|
|
</template> |
|
|
|
|
|
</el-input> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
</el-col> |
|
|
|
|
|
|
|
|
<el-col :span="6"> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="追单"> |
|
|
<el-form-item label="追单"> |
|
|
<el-input v-model="form.qt_followUp" placeholder="%" suffix-icon="el-icon-percent" /> |
|
|
<el-input v-model="form.qt_followUp" placeholder="请输入追单成功的分配比例" :max="100" type="number"> |
|
|
|
|
|
<template #append> |
|
|
|
|
|
<el-button type="primary">%</el-button> |
|
|
|
|
|
</template> |
|
|
|
|
|
</el-input> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
</el-col> |
|
|
|
|
|
|
|
|
<el-col :span="6"> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="内部员工"> |
|
|
<el-form-item label="内部员工"> |
|
|
<el-input v-model="form.qt_internalStaff" placeholder="元" suffix-icon="el-icon-money" /> |
|
|
<el-input v-model="form.qt_internalStaff" placeholder="请输入资源为内部员工时的提成金额" type="number"> |
|
|
|
|
|
<template #append> |
|
|
|
|
|
<el-button type="primary">元</el-button> |
|
|
|
|
|
</template> |
|
|
|
|
|
</el-input> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
</el-col> |
|
|
</el-row> |
|
|
</el-row> |
|
|
|
|
|
|
|
|
|
|
|
<h2 style="margin-bottom: 20px">课程提成</h2> |
|
|
<view v-for="(item, index) in course_type"> |
|
|
<view v-for="(item, index) in course_type"> |
|
|
<el-form-item :label="item.name" > |
|
|
<el-form-item :label="item.name"> |
|
|
<el-input v-model="item.num" placeholder="元" style="width: 200px;"/> |
|
|
<el-input v-model="item.num" placeholder="请输入金额" style="width: 200px;" type="number"> |
|
|
|
|
|
<template #append> |
|
|
|
|
|
<el-button type="primary">元</el-button> |
|
|
|
|
|
</template> |
|
|
|
|
|
</el-input> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
</view> |
|
|
</view> |
|
|
|
|
|
|
|
|
@ -150,42 +191,42 @@ |
|
|
</template> |
|
|
</template> |
|
|
|
|
|
|
|
|
<script lang="ts" setup> |
|
|
<script lang="ts" setup> |
|
|
import { xsyjConfig, getXsyjConfig } from '@/app/api/sys' |
|
|
import {xsyjConfig, getXsyjConfig} from '@/app/api/sys' |
|
|
import { reactive, ref } from 'vue' |
|
|
import {reactive, ref} from 'vue' |
|
|
import { ElMessage } from 'element-plus' |
|
|
import {ElMessage} from 'element-plus' |
|
|
import { useRoute } from 'vue-router' |
|
|
import {useRoute} from 'vue-router' |
|
|
const route = useRoute() |
|
|
import Template from "@/addon/shop/views/delivery/template.vue"; |
|
|
const pageName = route.meta.title |
|
|
|
|
|
|
|
|
const route = useRoute() |
|
|
|
|
|
const pageName = route.meta.title |
|
|
|
|
|
|
|
|
const loading = ref(true) |
|
|
const loading = ref(true) |
|
|
const stages = ref([]) |
|
|
const stages = ref([]) |
|
|
const activeNames = ref(null) |
|
|
const activeNames = ref(null) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const form = ref({ |
|
|
const form = ref({ |
|
|
qt_firstVisit: '', |
|
|
qt_firstVisit: '', |
|
|
qt_secondVisit: '', |
|
|
qt_secondVisit: '', |
|
|
qt_followUp: '', |
|
|
qt_followUp: '', |
|
|
qt_internalStaff: '', |
|
|
qt_internalStaff: '', |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
const course_type = ref({}); |
|
|
const course_type = ref({}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function addStage() { |
|
|
|
|
|
|
|
|
function addStage() { |
|
|
|
|
|
const newStage = { |
|
|
const newStage = { |
|
|
name: '默认阶段', |
|
|
name: '默认阶段', |
|
|
price: 0, |
|
|
price: 0, |
|
|
rules: [ |
|
|
rules: [ |
|
|
{ |
|
|
{ |
|
|
renewal_standard_min: '', |
|
|
renewal_standard_min: '0', |
|
|
renewal_standard_max: '', |
|
|
renewal_standard_max: '', |
|
|
renewal_commission: '', |
|
|
renewal_commission: '', |
|
|
new_count_min: '', |
|
|
new_count_min: '0', |
|
|
new_count_max: '', |
|
|
new_count_max: '', |
|
|
xf_count_min: '', |
|
|
xf_count_min: '0', |
|
|
xf_count_max: '', |
|
|
xf_count_max: '', |
|
|
new_move_5: '', |
|
|
new_move_5: '', |
|
|
new_move_7: '', |
|
|
new_move_7: '', |
|
|
@ -194,46 +235,46 @@ |
|
|
} |
|
|
} |
|
|
stages.value.push(newStage) |
|
|
stages.value.push(newStage) |
|
|
activeNames.value = newStage.name |
|
|
activeNames.value = newStage.name |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function removeStage(index) { |
|
|
function removeStage(index) { |
|
|
stages.value.splice(index, 1) |
|
|
stages.value.splice(index, 1) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function addRule(stage) { |
|
|
function addRule(stage) { |
|
|
stage.rules.push({ |
|
|
stage.rules.push({ |
|
|
renewal_standard_min: '', |
|
|
renewal_standard_min: '0', |
|
|
renewal_standard_max: '', |
|
|
renewal_standard_max: '', |
|
|
renewal_commission: '', |
|
|
renewal_commission: '', |
|
|
new_count_min: '', |
|
|
new_count_min: '0', |
|
|
new_count_max: '', |
|
|
new_count_max: '', |
|
|
xf_count_min: '', |
|
|
xf_count_min: '0', |
|
|
xf_count_max: '', |
|
|
xf_count_max: '', |
|
|
new_move_5: '', |
|
|
new_move_5: '', |
|
|
new_move_7: '', |
|
|
new_move_7: '', |
|
|
}) |
|
|
}) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function removeRule(stage, ruleIndex) { |
|
|
function removeRule(stage, ruleIndex) { |
|
|
if (stage.rules.length === 1) { |
|
|
if (stage.rules.length === 1) { |
|
|
ElMessage.warning('至少保留一条规则') |
|
|
ElMessage.warning('至少保留一条规则') |
|
|
return |
|
|
return |
|
|
} |
|
|
} |
|
|
stage.rules.splice(ruleIndex, 1) |
|
|
stage.rules.splice(ruleIndex, 1) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
const setFormData = async () => { |
|
|
const setFormData = async () => { |
|
|
const data = await (await getXsyjConfig()).data |
|
|
const data = await (await getXsyjConfig()).data |
|
|
stages.value = data.data |
|
|
stages.value = data.data |
|
|
form.value = data.form |
|
|
form.value = data.form |
|
|
course_type.value = data.course_type |
|
|
course_type.value = data.course_type |
|
|
loading.value = false |
|
|
loading.value = false |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
setFormData() |
|
|
setFormData() |
|
|
|
|
|
|
|
|
const onSave = async () => { |
|
|
const onSave = async () => { |
|
|
xsyjConfig({ 'stages': stages.value, 'form': form.value,'course_type':course_type.value}) |
|
|
xsyjConfig({'stages': stages.value, 'form': form.value, 'course_type': course_type.value}) |
|
|
.then(() => { |
|
|
.then(() => { |
|
|
loading.value = true |
|
|
loading.value = true |
|
|
setFormData() |
|
|
setFormData() |
|
|
@ -241,11 +282,11 @@ |
|
|
.catch(() => { |
|
|
.catch(() => { |
|
|
loading.value = false |
|
|
loading.value = false |
|
|
}) |
|
|
}) |
|
|
} |
|
|
} |
|
|
</script> |
|
|
</script> |
|
|
|
|
|
|
|
|
<style lang="scss" scoped> |
|
|
<style lang="scss" scoped> |
|
|
.collapse-title { |
|
|
.collapse-title { |
|
|
display: flex; |
|
|
display: flex; |
|
|
align-items: center; |
|
|
align-items: center; |
|
|
justify-content: space-between; |
|
|
justify-content: space-between; |
|
|
@ -255,21 +296,21 @@ |
|
|
padding-right: 10px; |
|
|
padding-right: 10px; |
|
|
color: #333; |
|
|
color: #333; |
|
|
padding: 10px; |
|
|
padding: 10px; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.title-name { |
|
|
.title-name { |
|
|
width: 230px; |
|
|
width: 230px; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.title-salary { |
|
|
.title-salary { |
|
|
width: 110px; |
|
|
width: 110px; |
|
|
text-align: center; |
|
|
text-align: center; |
|
|
color: #7438d5; |
|
|
color: #7438d5; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.arrow { |
|
|
.arrow { |
|
|
margin-left: auto; |
|
|
margin-left: auto; |
|
|
color: #999; |
|
|
color: #999; |
|
|
font-size: 14px; |
|
|
font-size: 14px; |
|
|
} |
|
|
} |
|
|
</style> |
|
|
</style> |