Merge branch 'driver'
This commit is contained in:
commit
f3e72ea43c
@ -266,7 +266,8 @@ export default {
|
||||
// latitude:"",
|
||||
detailedAddress: "",
|
||||
address: "",
|
||||
apikey: process.env.VUE_APP_AMAP_KEY, // 确保这里填写正确的高德地图 API Key
|
||||
// apikey: process.env.VUE_APP_AMAP_KEY, // 高德地图 API Key
|
||||
apikey: 'd0a6d2fc229e376f6bb20d976b4033ef', // 高德地图 API Key
|
||||
lng: "",
|
||||
lat: "",
|
||||
location: "",
|
||||
|
@ -90,4 +90,12 @@ export function getSourceUserById(userId) {
|
||||
})
|
||||
}
|
||||
|
||||
// 获取课程对应提成方案
|
||||
export function getSchemeListByCourseId(courseId) {
|
||||
return request({
|
||||
url: '/base/dl-drive-school-course/getSchemeList?id=' + courseId,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
43
src/views/drivingSchool/DriveSchoolPay/api/schemeApi.js
Normal file
43
src/views/drivingSchool/DriveSchoolPay/api/schemeApi.js
Normal file
@ -0,0 +1,43 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 查询提成方案列表
|
||||
export function getSchemeListByCourseId(courseId) {
|
||||
return request({
|
||||
url: '/base/dl-drive-school-course/getSchemeList?id=' + courseId,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 查询提成方案详情
|
||||
export function getScheme(id) {
|
||||
return request({
|
||||
url: `/courseScheme/get/${id}`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 新增提成方案
|
||||
export function createScheme(data) {
|
||||
return request({
|
||||
url: '/courseScheme/save',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 修改提成方案
|
||||
export function updateScheme(data) {
|
||||
return request({
|
||||
url: '/courseScheme/save',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 删除提成方案
|
||||
export function deleteScheme(id) {
|
||||
return request({
|
||||
url: `/courseScheme/delete/${id}`,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
@ -4,7 +4,7 @@
|
||||
<el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="45%" v-dialogDrag append-to-body>
|
||||
<el-form ref="formRef" :model="formData" :rules="formRules" v-loading="formLoading" label-width="100px">
|
||||
<el-form-item label="订单号" prop="orderNo">
|
||||
<el-input v-model="formData.orderNo" placeholder="请输入订单号"/>
|
||||
<el-input v-model="formData.orderNo" placeholder="请输入订单号" disabled/>
|
||||
</el-form-item>
|
||||
<el-form-item label="用户姓名" prop="userName">
|
||||
<el-input v-model="formData.userName" placeholder="请输入用户姓名"/>
|
||||
@ -25,26 +25,34 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="课程名字" prop="courseName">
|
||||
<el-input v-model="formData.courseName" placeholder="请输入课程名字"/>
|
||||
<el-input v-model="formData.courseName" placeholder="请输入课程名字" disabled/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="负责教练" prop="coachUserName">
|
||||
<el-input v-model="formData.coachUserName" placeholder="请输入主负责教练姓名"/>
|
||||
<el-input v-model="formData.coachUserName" placeholder="请输入主负责教练姓名" disabled/>
|
||||
</el-form-item>
|
||||
<el-form-item label="订金金额" prop="reserveMoney">
|
||||
<el-input v-model="formData.reserveMoney" placeholder="请输入订金金额"/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="毕业时间" prop="gradTime">
|
||||
<el-date-picker clearable v-model="formData.gradTime" type="date" value-format="timestamp"
|
||||
placeholder="请选择毕业时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="拿证时间" prop="passTime">
|
||||
<el-date-picker clearable v-model="formData.passTime" type="date" value-format="timestamp"
|
||||
placeholder="请选择拿证时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="毕业时间" prop="gradTime">
|
||||
<el-date-picker clearable v-model="formData.gradTime" type="date" value-format="timestamp"
|
||||
placeholder="请选择毕业时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="拿证时间" prop="passTime">
|
||||
<el-date-picker clearable v-model="formData.passTime" type="date" value-format="timestamp"
|
||||
placeholder="请选择拿证时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-form-item label="是否终止" prop="ifEnd">
|
||||
<el-radio-group v-model="formData.ifEnd">
|
||||
<el-radio v-for="item in ifEndRadio"
|
||||
@ -61,49 +69,132 @@
|
||||
placeholder="选择终止时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="订单状态" prop="paymentStatus">
|
||||
<el-select v-model="formData.paymentStatus" placeholder="请选择订单状态">
|
||||
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.DRIVE_SCHOOL_ORDER_STATUS)"
|
||||
:key="dict.value" :label="dict.label" :value="dict.value"
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="订单状态" prop="paymentStatus">
|
||||
<el-select v-model="formData.paymentStatus" placeholder="请选择订单状态">
|
||||
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.DRIVE_SCHOOL_ORDER_STATUS)"
|
||||
:key="dict.value" :label="dict.label" :value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="是否已面签" prop="isSign">
|
||||
<!-- <el-select v-model="formData.isSign" placeholder="请选择是否已面签">-->
|
||||
<!-- <el-option label="请选择字典生成" :label="item.label" v-for="item in this.getDictDatas(DICT_TYPE.SYSTEM_USER_SEX)"/>-->
|
||||
<!-- </el-select>-->
|
||||
<el-radio-group v-model="formData.isSign">
|
||||
<el-radio v-for="dict in isSignRadio"
|
||||
:key="dict.value" :label="dict.value"
|
||||
>{{ dict.label }}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- <el-form-item label="提成方案" prop="schemeId">
|
||||
<el-select v-model="formData.schemeId" placeholder="请选择提成方案">
|
||||
<el-option
|
||||
v-for="item in schemeList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否已面签" prop="isSign">
|
||||
<!-- <el-select v-model="formData.isSign" placeholder="请选择是否已面签">-->
|
||||
<!-- <el-option label="请选择字典生成" :label="item.label" v-for="item in this.getDictDatas(DICT_TYPE.SYSTEM_USER_SEX)"/>-->
|
||||
<!-- </el-select>-->
|
||||
<el-radio-group v-model="formData.isSign">
|
||||
<el-radio v-for="dict in isSignRadio"
|
||||
:key="dict.value" :label="dict.value"
|
||||
>{{ dict.label }}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-form-item>-->
|
||||
<div style="display: flex; flex-direction: row; gap: 10px;">
|
||||
<div>
|
||||
<el-form-item label="提成方案" prop="schemeId" >
|
||||
<el-select v-model="formData.schemeId" placeholder="请选择提成方案" style="width: 300px;">
|
||||
<el-option
|
||||
v-for="item in schemeList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
>
|
||||
<div style="display: flex; justify-content: space-between; width: 100%">
|
||||
<span>{{ item.name }}</span>
|
||||
<span style="color: #888; margin-left: 20px;">
|
||||
<span style="color: red;">*科1:</span>{{ item.subject1Deduct }}元,
|
||||
<span style="color: red;">*科2:</span>{{ item.subject2Deduct }}元,
|
||||
<span style="color: red;">*科3:</span>{{ item.subject3Deduct }}元,
|
||||
<span style="color: red;">*科4:</span>{{ item.subject4Deduct }}元,
|
||||
<span style="color: red;">*业务经理:</span>{{ item.subject0Deduct }}元
|
||||
</span>
|
||||
</div>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div>
|
||||
<el-button type="primary" icon="el-icon-plus" size="small" @click="openSchemeDialog">添加方案</el-button>
|
||||
</div>
|
||||
<div>
|
||||
<span style="color: red">(如果没有合适的方案,请添加)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<el-form-item label="尾款" prop="restMoney">
|
||||
<el-input v-model="formData.restMoney" placeholder="请输入尾款"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="支付类型" prop="payType">
|
||||
<el-select v-model="formData.paymentStatus" placeholder="请选择支付类型">
|
||||
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.DRIVE_SCHOOL_PAY_TYPE)"
|
||||
:key="dict.value" :label="dict.label" :value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="支付类型" prop="payType">
|
||||
<el-select v-model="formData.payType" placeholder="请选择支付类型">
|
||||
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.DRIVE_SCHOOL_PAY_TYPE)"
|
||||
:key="dict.value" :label="dict.label" :value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="支付渠道" prop="payChannel">
|
||||
<el-select v-model="formData.payChannel" placeholder="请选择支付渠道">
|
||||
<el-option v-for="dict in this.payChannelList"
|
||||
:key="dict.value" :label="dict.label" :value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="学员是否确认" prop="ifAgree">
|
||||
<el-select v-model="formData.ifAgree" placeholder="请选择学员是否确认">
|
||||
<el-option v-for="dict in this.ifAgreeList"
|
||||
:key="dict.value" :label="dict.label" :value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
<SchemeForm ref="schemeFormRef" @success="fetchSchemeList" />
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as SchoolCourseOrderApi from '@/views/drivingSchool/DriveSchoolPay/api'
|
||||
import { getSchemeListByCourseId } from '@/views/drivingSchool/DriveSchoolPay/api'
|
||||
import SchemeForm from '@/views/drivingSchool/schoolCourse/form/schemeForm.vue'
|
||||
|
||||
export default {
|
||||
name: 'SchoolCourseOrderForm',
|
||||
components: {},
|
||||
components: {
|
||||
SchemeForm
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
// 弹出层标题
|
||||
@ -133,7 +224,8 @@ export default {
|
||||
restMoney: undefined,
|
||||
payType: undefined,
|
||||
passTime: undefined,
|
||||
gradTime: undefined
|
||||
gradTime: undefined,
|
||||
schemeId: undefined,
|
||||
},
|
||||
ifEndRadio: [
|
||||
{
|
||||
@ -155,8 +247,37 @@ export default {
|
||||
value: 0
|
||||
}
|
||||
],
|
||||
payChannelList: [
|
||||
{
|
||||
label: '线下支付',
|
||||
value: '2'
|
||||
},
|
||||
{
|
||||
label: '微信支付',
|
||||
value: '1'
|
||||
}
|
||||
],
|
||||
ifAgreeList: [
|
||||
{
|
||||
label: '未确认',
|
||||
value: '0'
|
||||
},
|
||||
{
|
||||
label: '已同意',
|
||||
value: '1'
|
||||
},
|
||||
{
|
||||
label: '未同意',
|
||||
value: '2'
|
||||
},
|
||||
{
|
||||
label: '非代报名订单',
|
||||
value: null
|
||||
}
|
||||
],
|
||||
// 表单校验
|
||||
formRules: {}
|
||||
formRules: {},
|
||||
schemeList: [],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
@ -171,16 +292,41 @@ export default {
|
||||
const res = await SchoolCourseOrderApi.getSchoolCourseOrder(id)
|
||||
this.formData = res.data
|
||||
this.title = '修改驾照报名订单'
|
||||
await this.loadSchemeList(this.formData.courseId);
|
||||
} finally {
|
||||
this.formLoading = false
|
||||
}
|
||||
}
|
||||
this.title = '新增驾照报名订单'
|
||||
},
|
||||
openSchemeDialog() {
|
||||
this.$refs.schemeFormRef.open(null, this.formData.courseId)
|
||||
},
|
||||
async fetchSchemeList() {
|
||||
// 重新拉取方案列表
|
||||
console.log('courseId', this.formData.courseId)
|
||||
const res = await getSchemeListByCourseId(this.formData.courseId)
|
||||
console.log('res', res)
|
||||
this.schemeList = res.data || []
|
||||
},
|
||||
/** 提交按钮 */
|
||||
async submitForm() {
|
||||
// 校验主表
|
||||
await this.$refs['formRef'].validate()
|
||||
// 检查是否选择了提成方案
|
||||
if (!this.formData.schemeId) {
|
||||
try {
|
||||
await this.$confirm('该订单尚未选择提成方案,是否继续?', '提示', {
|
||||
confirmButtonText: '继续',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
// 用户点击继续,继续执行后续操作
|
||||
} catch (error) {
|
||||
// 用户点击取消,不执行操作
|
||||
return
|
||||
}
|
||||
}
|
||||
this.formLoading = true
|
||||
try {
|
||||
const data = this.formData
|
||||
@ -201,6 +347,23 @@ export default {
|
||||
this.formLoading = false
|
||||
}
|
||||
},
|
||||
async loadSchemeList(courseId) {
|
||||
console.log('courseId', courseId)
|
||||
if (!courseId) return;
|
||||
try {
|
||||
const res = await getSchemeListByCourseId(courseId);
|
||||
console.log('res', res)
|
||||
this.schemeList = res.data || [];
|
||||
} catch (error) {
|
||||
this.$message.error('获取提成方案失败');
|
||||
}
|
||||
},
|
||||
async getSchemeListByCourseId(courseId){
|
||||
await SchoolCourseOrderApi.getSchemeListByCourseId(courseId)
|
||||
.then(res => {
|
||||
this.schemeList = res.data
|
||||
})
|
||||
},
|
||||
/** 表单重置 */
|
||||
reset() {
|
||||
this.formData = {
|
||||
@ -223,7 +386,8 @@ export default {
|
||||
restMoney: undefined,
|
||||
payType: undefined,
|
||||
passTime: undefined,
|
||||
gradTime: undefined
|
||||
gradTime: undefined,
|
||||
schemeId: undefined,
|
||||
}
|
||||
this.resetForm('formRef')
|
||||
}
|
||||
|
@ -75,6 +75,7 @@
|
||||
|
||||
<el-table-column label="报名时间" align="center" prop="createTime" :formatter="formatDate"/>
|
||||
<el-table-column label="报名方式" align="center" prop="signType" :formatter="formatSignType"/>
|
||||
<el-table-column label="学员是否确认" align="center" prop="ifAgree" :formatter="formatIfAgree"/>
|
||||
<!-- <el-table-column label="学费到账审核" align="center" prop="receiptReview" :formatter="formatReceiptReview"/>-->
|
||||
<el-table-column label="信息" align="center" class-name="small-padding fixed-width">
|
||||
<template v-slot="scope">
|
||||
@ -538,7 +539,19 @@ export default {
|
||||
},
|
||||
formatSignType(row, column, value) {
|
||||
const map = {
|
||||
'1': '代报名'
|
||||
'1': '业务经理代报名',
|
||||
'2': '教练代报名',
|
||||
'3': '员工代报名'
|
||||
};
|
||||
return map[value] ?? '-';
|
||||
},
|
||||
formatIfAgree(row, column, value) {
|
||||
const map = {
|
||||
'0': '未确认',
|
||||
'1': '同意',
|
||||
'2': '不同意',
|
||||
null: '非代报名订单',
|
||||
default: '非代报名订单'
|
||||
};
|
||||
return map[value] ?? '-';
|
||||
},
|
||||
|
@ -93,3 +93,24 @@ export function scoreEdit(data) {
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 根据课程id查询相关教练
|
||||
export function getCoachByCourseId(courseId, subject) {
|
||||
return request({
|
||||
url: `/base/dl-drive-school-coach-course/getCoachByCourseIdAndSubject`,
|
||||
method: 'get',
|
||||
params: {
|
||||
courseId,
|
||||
subject
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 修改教练
|
||||
export function updateCoach(data) {
|
||||
return request({
|
||||
url: '/process/updateCoach',
|
||||
method: 'get',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
@ -260,6 +260,15 @@ export default {
|
||||
operationType: null,
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
'formData.examStatus': function(newVal) {
|
||||
if (newVal === '1') { // 当考试情况选择"已通过"时
|
||||
this.formData.status = '2'; // 自动将状态设置为"已完成"
|
||||
} else if (newVal === '0') { // 当考试情况选择"未通过"时
|
||||
this.formData.status = '1'; // 自动将状态设置为"训练中"
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
/** 打开弹窗 */
|
||||
async open(id, type) {
|
||||
|
@ -0,0 +1,129 @@
|
||||
<template>
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="选择教练" prop="coachId">
|
||||
<el-select
|
||||
v-model="form.coachId"
|
||||
placeholder="请选择教练"
|
||||
filterable
|
||||
clearable
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in coachOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getCoachByCourseId, updateCoach } from '@/views/drivingSchool/StudentScoreInput/api'
|
||||
|
||||
export default {
|
||||
name: "UpdateCoachForm",
|
||||
data() {
|
||||
return {
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 表单参数
|
||||
form: {
|
||||
id: undefined,
|
||||
coachId: undefined,
|
||||
coachName: ""
|
||||
},
|
||||
// 表单校验
|
||||
rules: {
|
||||
coachId: [
|
||||
{ required: true, message: "请选择教练", trigger: "blur" }
|
||||
]
|
||||
},
|
||||
// 教练选项
|
||||
coachOptions: [],
|
||||
// 当前操作类型
|
||||
type: undefined
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
// 打开弹窗
|
||||
openDialog(row) {
|
||||
this.reset();
|
||||
this.title = "修改教练";
|
||||
this.open = true;
|
||||
this.form.id = row.id;
|
||||
|
||||
// 获取教练列表
|
||||
this.getCoachList(row.courseId, row.subject).then(() => {
|
||||
// 设置当前教练
|
||||
this.form.coachId = row.coachId;
|
||||
});
|
||||
},
|
||||
// 获取教练列表
|
||||
async getCoachList(courseId, subject) {
|
||||
try {
|
||||
const res = await getCoachByCourseId(courseId, subject);
|
||||
this.coachOptions = res.data.map(item => ({
|
||||
id: parseInt(item.coachId),
|
||||
name: item.coachName
|
||||
}));
|
||||
console.log('this.coachOptions', this.coachOptions)
|
||||
} catch (error) {
|
||||
console.error("获取教练列表失败:", error);
|
||||
}
|
||||
},
|
||||
handleCoachChange(coachId) {
|
||||
const selectedCoach = this.coachOptions.find(item => item.id === coachId);
|
||||
if (selectedCoach) {
|
||||
this.form.coachName = selectedCoach.name; // 同步名字
|
||||
}
|
||||
},
|
||||
// 表单提交
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(async valid => {
|
||||
if (!valid) return;
|
||||
|
||||
// 获取选中的教练名称
|
||||
const selectedCoach = this.coachOptions.find(item => item.id === this.form.coachId);
|
||||
const params = {
|
||||
id: this.form.id,
|
||||
coachId: this.form.coachId,
|
||||
coachName: selectedCoach ? selectedCoach.name : ''
|
||||
};
|
||||
|
||||
try {
|
||||
await updateCoach(params);
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
this.open = false;
|
||||
this.$emit("success");
|
||||
} catch (error) {
|
||||
console.error("修改教练失败:", error);
|
||||
}
|
||||
});
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false;
|
||||
this.reset();
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: undefined,
|
||||
coachId: undefined,
|
||||
coachName: ""
|
||||
};
|
||||
this.resetForm("form");
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
@ -69,8 +69,15 @@
|
||||
</el-table-column>-->
|
||||
<el-table-column label="操作" width="120" align="center" class-name="small-padding fixed-width">
|
||||
<template v-slot="scope">
|
||||
<el-button size="mini" type="text" icon="el-icon-edit" :disabled="scope.row.examScore" @click="openForm(scope.row.id, 'input')">成绩录入</el-button>
|
||||
<el-button size="mini" type="text" icon="el-icon-edit" :disabled="!scope.row.examScore" @click="openForm(scope.row.id, 'edit')">成绩修改</el-button>
|
||||
<el-button size="mini" type="text" icon="el-icon-edit" :disabled="scope.row.status === '2' && scope.row.examStatus === '1'" @click="openForm(scope.row.id, 'input')">成绩录入</el-button>
|
||||
<el-button size="mini" type="text" icon="el-icon-edit" :disabled="!(scope.row.status === '2' && scope.row.examStatus === '1')" @click="openForm(scope.row.id, 'edit')">成绩修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-user"
|
||||
:disabled="scope.row.examStatus === '1' || scope.row.examStatus === '9'"
|
||||
@click="handleUpdateCoach(scope.row)"
|
||||
>教练修改</el-button>
|
||||
<!-- <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">删除</el-button>-->
|
||||
</template>
|
||||
</el-table-column>
|
||||
@ -79,17 +86,20 @@
|
||||
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize" @pagination="getList"/>
|
||||
<!-- 对话框(添加 / 修改) -->
|
||||
<scoreInputForm ref="formRef" @success="getList" />
|
||||
<updateCoachForm ref="updateCoachForm" @success="getList" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as processApi from '@/views/drivingSchool/StudentScoreInput/api';
|
||||
import scoreInputForm from '@/views/drivingSchool/StudentScoreInput/form/scoreInputForm.vue'
|
||||
import updateCoachForm from '@/views/drivingSchool/StudentScoreInput/form/updateCoachForm.vue'
|
||||
import { DICT_TYPE, getDictDatas } from '@/utils/dict'
|
||||
export default {
|
||||
name: "StudentScoreInput",
|
||||
components: {
|
||||
scoreInputForm,
|
||||
updateCoachForm,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
@ -150,6 +160,10 @@ export default {
|
||||
openForm(id, type) {
|
||||
this.$refs["formRef"].open(id, type);
|
||||
},
|
||||
/** 教练修改操作 */
|
||||
handleUpdateCoach(row) {
|
||||
this.$refs.updateCoachForm.openDialog(row);
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
async handleDelete(row) {
|
||||
const id = row.id;
|
||||
|
@ -59,3 +59,5 @@ export function getAllByUserIdAndCourseId(params) {
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
@ -6,38 +6,38 @@
|
||||
<el-collapse v-model="activeNames">
|
||||
<el-collapse-item title="学员课程情况" name="1">
|
||||
<el-row>
|
||||
<el-col span="12">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="课程名称" prop="courseName">
|
||||
<el-input :readonly="readonly" v-model="formData.courseName"/>
|
||||
<el-input :readonly="readonly" v-model="formData.courseName" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col span="12">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="教练姓名" prop="coachName">
|
||||
<el-input :readonly="readonly" v-model="formData.coachName"/>
|
||||
<el-input :readonly="readonly" v-model="formData.coachName" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-col span="12">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="学员姓名" prop="userName">
|
||||
<el-input :readonly="readonly" v-model="formData.userName"/>
|
||||
<el-input :readonly="readonly" v-model="formData.userName" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col span="12">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="学员手机号" prop="userMobile">
|
||||
<el-input :readonly="readonly" v-model="formData.userMobile"/>
|
||||
<el-input :readonly="readonly" v-model="formData.userMobile" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-col span="12">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="科目" prop="subject">
|
||||
<el-input :readonly="readonly" v-model="formData.subject"/>
|
||||
<el-input :readonly="readonly" v-model="formData.subject" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col span="12">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="考试次数" prop="examNum">
|
||||
<el-input :readonly="readonly" v-model="formData.examNum"/>
|
||||
</el-form-item>
|
||||
@ -45,7 +45,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-col span="12">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="当前状态" prop="status">
|
||||
<el-select :disabled="readonly" v-model="formData.status" placeholder="请选择">
|
||||
<el-option
|
||||
@ -57,7 +57,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col span="12">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="考试情况" prop="examStatus">
|
||||
<el-select :disabled="readonly" v-model="formData.examStatus" placeholder="请选择">
|
||||
<el-option
|
||||
@ -72,12 +72,12 @@
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-col span="12">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="考试分数" prop="examScore">
|
||||
<el-input :readonly="readonly" v-model="formData.examScore"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col span="12">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="考试时间" prop="examTime">
|
||||
<el-date-picker :readonly="readonly" clearable v-model="formData.examTime" type="date" value-format="timestamp" />
|
||||
</el-form-item>
|
||||
@ -96,6 +96,9 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-form-item label="报名时间" prop="createTime">
|
||||
<el-date-picker :readonly="readonly" clearable v-model="formData.createTime" type="date" value-format="timestamp" disabled=""/>
|
||||
</el-form-item>
|
||||
</el-collapse-item>
|
||||
|
||||
<el-collapse-item title="提成信息" name="2">
|
||||
|
43
src/views/drivingSchool/schoolCourse/api/schemeApi.js
Normal file
43
src/views/drivingSchool/schoolCourse/api/schemeApi.js
Normal file
@ -0,0 +1,43 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 查询提成方案列表
|
||||
export function getSchemeListByCourseId(courseId) {
|
||||
return request({
|
||||
url: '/base/dl-drive-school-course/getSchemeList?id=' + courseId,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 查询提成方案详情
|
||||
export function getScheme(id) {
|
||||
return request({
|
||||
url: `/courseScheme/get/${id}`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 新增提成方案
|
||||
export function createScheme(data) {
|
||||
return request({
|
||||
url: '/courseScheme/save',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 修改提成方案
|
||||
export function updateScheme(data) {
|
||||
return request({
|
||||
url: '/courseScheme/save',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 删除提成方案
|
||||
export function deleteScheme(id) {
|
||||
return request({
|
||||
url: `/courseScheme/delete/${id}`,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
@ -124,9 +124,68 @@
|
||||
</el-col>
|
||||
</el-row>-->
|
||||
|
||||
<el-row>
|
||||
<el-row v-if="!formData.id">
|
||||
<el-col>
|
||||
<el-form-item label="提成配置" prop="photo">
|
||||
<el-form-item label="提成配置">
|
||||
<el-button type="primary" icon="el-icon-plus" size="mini" @click="addScheme">新增提成方案</el-button>
|
||||
<el-tabs v-model="activeSchemeIndex" type="card">
|
||||
<el-tab-pane
|
||||
v-for="(scheme, index) in formData.schemeList"
|
||||
:label="scheme.schemeName || `方案 ${index + 1}`"
|
||||
:name="index.toString()"
|
||||
:key="index"
|
||||
>
|
||||
<!-- 删除按钮 -->
|
||||
<div style="text-align: right; margin-bottom: 10px">
|
||||
<el-button
|
||||
v-if="formData.schemeList.length > 1"
|
||||
type="danger"
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
@click="removeScheme(index)">
|
||||
删除此方案
|
||||
</el-button>
|
||||
</div>
|
||||
<el-form-item label="方案名称">
|
||||
<el-input v-model="scheme.schemeName" placeholder="请输入方案名称"/>
|
||||
<el-checkbox v-model="scheme.isDefault" style="margin-left: 20px" @change="setOnlyDefault(index)">设为默认方案</el-checkbox>
|
||||
</el-form-item>
|
||||
|
||||
<!-- <el-table :data="scheme.deductList" style="width: 100%">
|
||||
<el-table-column prop="courseSubject" label="科目" width="120">
|
||||
<template slot-scope="scope">
|
||||
{{ getLabelByValue(scope.row.courseSubject) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="deduct" label="提成金额" width="180">
|
||||
<template slot-scope="scope">
|
||||
<el-input-number v-model="scope.row.deduct" :precision="2" :step="0.1" placeholder="请输入金额"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>-->
|
||||
<div style="display: flex; gap: 10px; flex-wrap: wrap">
|
||||
<div
|
||||
v-for="(subject, subIndex) in scheme.deductList"
|
||||
:key="subIndex"
|
||||
style="flex: 1; min-width: 120px"
|
||||
>
|
||||
<el-card shadow="hover">
|
||||
<div style="text-align: center; font-weight: bold">
|
||||
{{ getLabelByValue(subject.courseSubject) }}
|
||||
</div>
|
||||
<el-input-number
|
||||
v-model="subject.deduct"
|
||||
:precision="2"
|
||||
:step="0.1"
|
||||
style="width: 100%; margin-top: 10px"
|
||||
/>
|
||||
</el-card>
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="提成配置" prop="photo">
|
||||
<el-table
|
||||
:data="formData.deductList"
|
||||
style="width: 100%">
|
||||
@ -148,7 +207,7 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-form-item>-->
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
@ -226,6 +285,7 @@ export default {
|
||||
coachList: [],
|
||||
coachListText: '',
|
||||
ageGroup: undefined,
|
||||
schemeList: [],
|
||||
subject: [
|
||||
{
|
||||
label: '科目一',
|
||||
@ -249,6 +309,8 @@ export default {
|
||||
}
|
||||
],
|
||||
},
|
||||
// 当前激活的方案 tab 索引
|
||||
activeSchemeIndex: "0",
|
||||
subjectStr: [
|
||||
{
|
||||
label: '科目一',
|
||||
@ -288,6 +350,8 @@ export default {
|
||||
this.dialogVisible = true;
|
||||
this.reset();
|
||||
this.getCoachList()
|
||||
this.formData.schemeList = [];
|
||||
this.addScheme();
|
||||
this.formData.deductList = [
|
||||
{
|
||||
label: '科目一',
|
||||
@ -328,6 +392,19 @@ export default {
|
||||
console.log(this.formData)
|
||||
},
|
||||
|
||||
addScheme() {
|
||||
const defaultSubjects = ["0", "1", "2", "3", "4"];
|
||||
const newScheme = {
|
||||
schemeName: '',
|
||||
isDefault: this.formData.schemeList.length === 0, // 第一个默认设为 true
|
||||
deductList: defaultSubjects.map(subject => ({
|
||||
courseSubject: subject,
|
||||
deduct: 0
|
||||
}))
|
||||
};
|
||||
this.formData.schemeList.push(newScheme);
|
||||
this.activeSchemeIndex = (this.formData.schemeList.length - 1).toString();
|
||||
},
|
||||
openCoachDraw() {
|
||||
this.drawerOpen = true
|
||||
// 将initCoachList的initCoachList回显
|
||||
@ -336,13 +413,35 @@ export default {
|
||||
item.checkedSubject = item.data.coachList
|
||||
})
|
||||
},
|
||||
getLabelByValue( value) {
|
||||
setOnlyDefault(index) {
|
||||
this.formData.schemeList.forEach((item, i) => {
|
||||
item.isDefault = i === index;
|
||||
});
|
||||
},
|
||||
removeScheme(index) {
|
||||
this.formData.schemeList.splice(index, 1);
|
||||
// 如果删的是当前 tab,则激活前一个;否则不变
|
||||
if (this.activeSchemeIndex === index.toString()) {
|
||||
this.activeSchemeIndex = Math.max(0, index - 1).toString();
|
||||
}
|
||||
},
|
||||
/* getLabelByValue( value) {
|
||||
const subject = this.subjectStr.find(item => item.value === value);
|
||||
return subject ? subject.label : null;
|
||||
}, */
|
||||
getLabelByValue(value) {
|
||||
const map = {
|
||||
"0": "业务经理",
|
||||
"1": "科目一",
|
||||
"2": "科目二",
|
||||
"3": "科目三",
|
||||
"4": "科目四"
|
||||
};
|
||||
return map[value] || `科目${value}`;
|
||||
},
|
||||
|
||||
// 查询默认提成配置
|
||||
async getDeduct() {
|
||||
/* async getDeduct() {
|
||||
const data = {
|
||||
pageNum: 1,
|
||||
pageSize: 1000
|
||||
@ -357,6 +456,21 @@ export default {
|
||||
item.deduct = 0
|
||||
}
|
||||
})
|
||||
}, */
|
||||
async getDeduct() {
|
||||
const res = await listDeduct({ pageNum: 1, pageSize: 1000 });
|
||||
const deductMap = {};
|
||||
res.data.records.forEach(item => {
|
||||
deductMap[item.courseSubject] = item.deduct;
|
||||
});
|
||||
|
||||
// 给第一个方案的默认提成填充(可自行选择是否全部填充)
|
||||
if (this.formData.schemeList.length > 0) {
|
||||
const deductList = this.formData.schemeList[0].deductList;
|
||||
deductList.forEach(item => {
|
||||
item.deduct = deductMap[item.courseSubject] || 0;
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
handleClose() {
|
||||
@ -443,6 +557,7 @@ export default {
|
||||
deductList: [],
|
||||
ifDisplay: undefined,
|
||||
ageGroup: undefined,
|
||||
schemeList: [],
|
||||
};
|
||||
this.resetForm("formRef");
|
||||
}
|
||||
|
262
src/views/drivingSchool/schoolCourse/form/schemeForm.vue
Normal file
262
src/views/drivingSchool/schoolCourse/form/schemeForm.vue
Normal file
@ -0,0 +1,262 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
:title="dialogTitle"
|
||||
:visible.sync="dialogVisible"
|
||||
width="600px"
|
||||
:close-on-click-modal="false"
|
||||
>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="120px"
|
||||
label-position="right"
|
||||
>
|
||||
<el-form-item label="方案名称" prop="name">
|
||||
<el-input
|
||||
v-model="formData.name"
|
||||
placeholder="请输入方案名称"
|
||||
clearable
|
||||
maxlength="30"
|
||||
show-word-limit
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-divider content-position="left">提成配置</el-divider>
|
||||
|
||||
<el-form-item label="科目一提成" prop="subject1Deduct">
|
||||
<el-input-number
|
||||
v-model="formData.subject1Deduct"
|
||||
:precision="2"
|
||||
:min="0"
|
||||
:max="10000"
|
||||
:step="100"
|
||||
controls-position="right"
|
||||
/>
|
||||
<span class="unit">元</span>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="科目二提成" prop="subject2Deduct">
|
||||
<el-input-number
|
||||
v-model="formData.subject2Deduct"
|
||||
:precision="2"
|
||||
:min="0"
|
||||
:max="10000"
|
||||
:step="100"
|
||||
controls-position="right"
|
||||
/>
|
||||
<span class="unit">元</span>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="科目三提成" prop="subject3Deduct">
|
||||
<el-input-number
|
||||
v-model="formData.subject3Deduct"
|
||||
:precision="2"
|
||||
:min="0"
|
||||
:max="10000"
|
||||
:step="100"
|
||||
controls-position="right"
|
||||
/>
|
||||
<span class="unit">元</span>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="科目四提成" prop="subject4Deduct">
|
||||
<el-input-number
|
||||
v-model="formData.subject4Deduct"
|
||||
:precision="2"
|
||||
:min="0"
|
||||
:max="10000"
|
||||
:step="100"
|
||||
controls-position="right"
|
||||
/>
|
||||
<span class="unit">元</span>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="业务经理提成" prop="subject0Deduct">
|
||||
<el-input-number
|
||||
v-model="formData.subject0Deduct"
|
||||
:precision="2"
|
||||
:min="0"
|
||||
:max="10000"
|
||||
:step="100"
|
||||
controls-position="right"
|
||||
/>
|
||||
<span class="unit">元</span>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="是否默认方案" prop="isDefault">
|
||||
<el-switch
|
||||
v-model="formData.isDefault"
|
||||
active-color="#13ce66"
|
||||
inactive-color="#ff4949"
|
||||
active-text="默认方案"
|
||||
inactive-text="非默认方案"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="handleSubmit" :loading="submitLoading">确 定</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
// import * as SchemeApi from '@/views/drivingSchool/schoolCourse/schemeApi';
|
||||
|
||||
import * as SchemeApi from '@/views/drivingSchool/schoolCourse/api/schemeApi'
|
||||
|
||||
export default {
|
||||
name: "SchemeForm",
|
||||
data() {
|
||||
const validateDeduct = (rule, value, callback) => {
|
||||
if (value === null || value === undefined) {
|
||||
return callback(new Error('请输入提成金额'));
|
||||
}
|
||||
if (value < 0) {
|
||||
return callback(new Error('提成金额不能为负数'));
|
||||
}
|
||||
callback();
|
||||
};
|
||||
|
||||
return {
|
||||
dialogVisible: false,
|
||||
dialogTitle: "",
|
||||
submitLoading: false,
|
||||
formData: {
|
||||
id: undefined,
|
||||
courseId: undefined,
|
||||
name: "",
|
||||
subject0Deduct: 0,
|
||||
subject1Deduct: 0,
|
||||
subject2Deduct: 0,
|
||||
subject3Deduct: 0,
|
||||
subject4Deduct: 0,
|
||||
isDefault: false
|
||||
},
|
||||
formRules: {
|
||||
name: [
|
||||
{ required: true, message: "请输入方案名称", trigger: "blur" },
|
||||
{ min: 2, max: 30, message: "长度在 2 到 30 个字符", trigger: "blur" }
|
||||
],
|
||||
|
||||
subject1Deduct: [
|
||||
{ required: true, validator: validateDeduct, trigger: "blur" }
|
||||
],
|
||||
subject2Deduct: [
|
||||
{ required: true, validator: validateDeduct, trigger: "blur" }
|
||||
],
|
||||
subject3Deduct: [
|
||||
{ required: true, validator: validateDeduct, trigger: "blur" }
|
||||
],
|
||||
subject4Deduct: [
|
||||
{ required: true, validator: validateDeduct, trigger: "blur" }
|
||||
]
|
||||
}
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
open(schemeId, courseId) {
|
||||
this.dialogVisible = true;
|
||||
this.resetForm();
|
||||
this.formData.courseId = courseId;
|
||||
|
||||
if (schemeId) {
|
||||
this.dialogTitle = "修改提成方案";
|
||||
this.fetchSchemeData(schemeId);
|
||||
} else {
|
||||
this.dialogTitle = "新增提成方案";
|
||||
}
|
||||
},
|
||||
|
||||
async fetchSchemeData(id) {
|
||||
try {
|
||||
this.submitLoading = true;
|
||||
const res = await SchemeApi.getScheme(id);
|
||||
this.formData = {
|
||||
...res.data,
|
||||
// 确保数字类型字段不为null
|
||||
subject0Deduct: res.data.subject0Deduct || 0,
|
||||
subject1Deduct: res.data.subject1Deduct || 0,
|
||||
subject2Deduct: res.data.subject2Deduct || 0,
|
||||
subject3Deduct: res.data.subject3Deduct || 0,
|
||||
subject4Deduct: res.data.subject4Deduct || 0
|
||||
};
|
||||
} catch (error) {
|
||||
console.error("获取提成方案数据失败:", error);
|
||||
this.$modal.msgError("获取数据失败,请重试");
|
||||
this.dialogVisible = false;
|
||||
} finally {
|
||||
this.submitLoading = false;
|
||||
}
|
||||
},
|
||||
|
||||
handleSubmit() {
|
||||
this.$refs.formRef.validate(async valid => {
|
||||
if (!valid) return;
|
||||
|
||||
try {
|
||||
this.submitLoading = true;
|
||||
const isEdit = !!this.formData.id;
|
||||
|
||||
if (isEdit) {
|
||||
await SchemeApi.updateScheme(this.formData);
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
} else {
|
||||
await SchemeApi.createScheme(this.formData);
|
||||
this.$modal.msgSuccess("新增成功");
|
||||
}
|
||||
|
||||
this.dialogVisible = false;
|
||||
this.$emit("success");
|
||||
} catch (error) {
|
||||
console.error("提交失败:", error);
|
||||
this.$modal.msgError(isEdit ? "修改失败" : "新增失败");
|
||||
} finally {
|
||||
this.submitLoading = false;
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
resetForm() {
|
||||
this.formData = {
|
||||
id: undefined,
|
||||
courseId: undefined,
|
||||
name: "",
|
||||
subject0Deduct: 0,
|
||||
subject1Deduct: 0,
|
||||
subject2Deduct: 0,
|
||||
subject3Deduct: 0,
|
||||
subject4Deduct: 0,
|
||||
isDefault: false
|
||||
};
|
||||
this.$nextTick(() => {
|
||||
if (this.$refs.formRef) {
|
||||
this.$refs.formRef.clearValidate();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.unit {
|
||||
margin-left: 10px;
|
||||
color: #888;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.el-divider {
|
||||
margin: 15px 0;
|
||||
}
|
||||
|
||||
.el-input-number {
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
.el-select {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
@ -26,7 +26,7 @@
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" @expand-change="handleExpandChange">
|
||||
<el-table-column label="课程名字" align="center" prop="name" />
|
||||
<el-table-column label="驾照类型" align="center" prop="type">
|
||||
<template v-slot="scope">
|
||||
@ -44,6 +44,78 @@
|
||||
{{ scope.row.ifDisplay === '0' ? '开启' : '未开启' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- 展开列 -->
|
||||
<el-table-column label="提成方案" align="center" type="expand" width="190px">
|
||||
<template #default="{row}">
|
||||
<div v-loading="schemeLoading[row.id]" style="padding: 0 50px;">
|
||||
<div style="display: flex; flex-direction: row; align-items: center; ">
|
||||
<div style="margin: 10px 0; font-weight: bold">提成方案列表</div>
|
||||
<div style="margin-left: 20px">
|
||||
<el-button
|
||||
type="primary"
|
||||
size="mini"
|
||||
icon="el-icon-plus"
|
||||
@click="openSchemeForm(undefined, row.id)"
|
||||
>新增提成方案</el-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<el-table :data="row.schemeList" border style="width: calc(100% - 60px);">
|
||||
<el-table-column label="方案名称" prop="name" align="center"/>
|
||||
<el-table-column label="科目一提成" >
|
||||
<template #default="{row}">
|
||||
{{ row.subject1Deduct || 0 }} 元
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="科目二提成" >
|
||||
<template #default="{row}">
|
||||
{{ row.subject2Deduct || 0 }} 元
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="科目三提成" >
|
||||
<template #default="{row}">
|
||||
{{ row.subject3Deduct || 0 }} 元
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="科目四提成" >
|
||||
<template #default="{row}">
|
||||
{{ row.subject4Deduct || 0 }} 元
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="业务经理提成" >
|
||||
<template #default="{row}">
|
||||
{{ row.subject0Deduct || 0 }} 元
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="是否为默认方案" >
|
||||
<template #default="{row}">
|
||||
<el-tag :type="row.isDefault ? 'success' : 'info'">
|
||||
{{ row.isDefault ? '是' : '否' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" fixed="right">
|
||||
<template #default="{row}">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="openSchemeForm(row.id, row.courseId)"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
:disabled="row.isDefault"
|
||||
@click="handleDeleteScheme(row.id, row.courseId)"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column label="限制年龄段" align="center" prop="ageGroup" >
|
||||
<template #default="scope">
|
||||
{{ formatDictLabel(scope.row.ageGroup) }}
|
||||
@ -61,6 +133,7 @@
|
||||
@pagination="getList"/>
|
||||
<!-- 对话框(添加 / 修改) -->
|
||||
<DlDriveSchoolCourseForm ref="formRef" @success="getList" />
|
||||
<SchemeForm ref="schemeFormRef" @success="handleSchemeSuccess" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -68,9 +141,12 @@
|
||||
import * as DlDriveSchoolCourseApi from '@/views/drivingSchool/schoolCourse/courseApi';
|
||||
import DlDriveSchoolCourseForm from '@/views/drivingSchool/schoolCourse/form/DlDriveSchoolCourseForm.vue';
|
||||
import { getDictDatas } from '@/utils/dict'
|
||||
import * as SchemeApi from '@/views/drivingSchool/schoolCourse/api/schemeApi'
|
||||
import SchemeForm from '@/views/drivingSchool/schoolCourse/form/schemeForm.vue'
|
||||
export default {
|
||||
name: "DlDriveSchoolCourse",
|
||||
components: {
|
||||
SchemeForm,
|
||||
DlDriveSchoolCourseForm,
|
||||
},
|
||||
data() {
|
||||
@ -99,6 +175,10 @@ export default {
|
||||
name: null,
|
||||
},
|
||||
ageGroupList: getDictDatas("drive_school_age_group"),
|
||||
// 用于记录每个课程的提成方案加载状态
|
||||
schemeLoading: {},
|
||||
// 记录当前展开的行
|
||||
expandedRows: []
|
||||
};
|
||||
},
|
||||
created() {
|
||||
@ -156,6 +236,67 @@ export default {
|
||||
this.exportLoading = false;
|
||||
}
|
||||
},
|
||||
async handleExpandChange(row, expandedRows) {
|
||||
this.expandedRows = expandedRows.map(r => r.id);
|
||||
if (expandedRows.includes(row)) {
|
||||
// 展开时加载提成方案数据
|
||||
try {
|
||||
this.$set(this.schemeLoading, row.id, true);
|
||||
const res = await SchemeApi.getSchemeListByCourseId(row.id);
|
||||
row.schemeList = res.data;
|
||||
} finally {
|
||||
this.$set(this.schemeLoading, row.id, false);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/** 打开提成方案表单 */
|
||||
openSchemeForm(schemeId, courseId) {
|
||||
this.$refs.schemeFormRef.open(schemeId, courseId);
|
||||
},
|
||||
|
||||
/** 提成方案操作成功回调 */
|
||||
async handleSchemeSuccess() {
|
||||
// 重新加载当前展开的课程的提成方案
|
||||
for (const row of this.list) {
|
||||
if (this.expandedRows.includes(row.id)) {
|
||||
try {
|
||||
this.$set(this.schemeLoading, row.id, true);
|
||||
const res = await SchemeApi.getSchemeListByCourseId(row.id);
|
||||
row.schemeList = res.data;
|
||||
} finally {
|
||||
this.$set(this.schemeLoading, row.id, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/** 删除提成方案 */
|
||||
async handleDeleteScheme(schemeId, courseId) {
|
||||
await this.$modal.confirm('确认删除该提成方案吗?');
|
||||
try {
|
||||
await SchemeApi.deleteScheme(schemeId);
|
||||
this.$modal.msgSuccess("删除成功");
|
||||
// 重新加载该课程的提成方案
|
||||
const row = this.list.find(item => item.id === courseId);
|
||||
if (row && this.expandedRows.includes(courseId)) {
|
||||
try {
|
||||
this.$set(this.schemeLoading, row.id, true);
|
||||
const res = await SchemeApi.getSchemeListByCourseId(courseId);
|
||||
row.schemeList = res.data;
|
||||
} finally {
|
||||
this.$set(this.schemeLoading, row.id, false);
|
||||
}
|
||||
}
|
||||
} catch {}
|
||||
},
|
||||
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style scoped>
|
||||
.el-table__expanded-cell {
|
||||
padding: 20px 50px !important;
|
||||
background-color: #fafafa;
|
||||
}
|
||||
</style>
|
||||
|
Loading…
Reference in New Issue
Block a user