This commit is contained in:
Lx 2025-07-04 17:55:46 +08:00
parent 13e22dd1ff
commit 2eb20caf39
8 changed files with 316 additions and 30 deletions

View File

@ -12,6 +12,17 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="评价标准" prop="standard">
<el-select v-model="queryParams.standard" placeholder="请选择评价标准" clearable>
<el-option
v-for="dict in standardList"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<!-- <el-form-item label="驾校名称" prop="jxName"> <!-- <el-form-item label="驾校名称" prop="jxName">
<el-input <el-input
v-model="queryParams.jxName" v-model="queryParams.jxName"
@ -29,6 +40,7 @@
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@ -75,12 +87,14 @@
</template> </template>
</el-table-column> </el-table-column>
<!-- <el-table-column label="驾校名称" align="center" prop="jxName" />--> <!-- <el-table-column label="驾校名称" align="center" prop="jxName" />-->
<el-table-column label="用户" align="center" prop="userName" /> <el-table-column label="学员" align="center" prop="userName" />
<!-- <el-table-column label="驾校评价" align="center" prop="content" />--> <!-- <el-table-column label="驾校评价" align="center" prop="content" />-->
<el-table-column label="教练名称" align="center" prop="coachName" /> <el-table-column label="教练名称" align="center" prop="coachName" />
<el-table-column label="技术评价" align="center" prop="teachContent" /> <el-table-column label="教学质量" align="center" prop="teachingQuality" />
<el-table-column label="服务评价" align="center" prop="serviceContent" /> <el-table-column label="教学质量评价内容" align="center" prop="teachContent" show-overflow-tooltip/>
<el-table-column label="满意度" align="center" prop="rate" /> <el-table-column label="教学态度" align="center" prop="teachingAttitude" />
<el-table-column label="教学态度评价内容" align="center" prop="serviceContent" show-overflow-tooltip/>
<el-table-column label="总体评分" align="center" prop="rate" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<!-- <el-button <!-- <el-button
@ -163,7 +177,21 @@ export default {
form: {}, form: {},
// //
rules: { rules: {
},
standardList: [
{
value: '优',
label: '优'
},
{
value: '良',
label: '良'
},
{
value: '差',
label: '差'
} }
]
}; };
}, },
created() { created() {

View File

@ -158,13 +158,29 @@
</div> </div>
</el-card> </el-card>
</el-col> </el-col>
<el-col :span="8"> <!-- <el-col :span="8">
<el-card class="box-card" shadow="hover" style="margin-bottom: 20px;" @click.native="handleFinanceCardClick('unpaidAmount')"> <el-card class="box-card" shadow="hover" style="margin-bottom: 20px;" @click.native="handleFinanceCardClick('unpaidAmount')">
<div class="card_msg_2"> <div class="card_msg_2">
<div class="card_2_font">待付款金额{{ formatAmount(dataObj.moneyInfo.outAmount - dataObj.moneyInfo.showedPayIsPaid) }} <div class="card_2_font">待付款金额{{ formatAmount(dataObj.moneyInfo.outAmount - dataObj.moneyInfo.showedPayIsPaid) }}
</div> </div>
</div> </div>
</el-card> </el-card>
</el-col>-->
</el-row>
</el-col>
<el-col :span="24">
<el-row :gutter="20">
<el-col :span="8">
<el-card class="box-card" shadow="hover" style="margin-bottom: 20px;"
@click.native="handleFinanceCardClick('unpaidAmount')"
>
<div class="card_msg_2">
<div class="card_2_font">
业务经理补贴{{ formatAmount(dataObj.moneyInfo.businessManagerMoneyTotal) }}
</div>
</div>
</el-card>
</el-col> </el-col>
</el-row> </el-row>
</el-col> </el-col>
@ -628,6 +644,70 @@
</div> </div>
</el-dialog> </el-dialog>
<!-- 财务(业务经理)详情弹框 提成部分 -->
<el-dialog
:title="cashierDetailTitle"
:visible.sync="businessDetailVisible"
width="90%"
top="8vh"
append-to-body
:close-on-click-modal="false"
@close="handleBusinessDetailClose">
<el-table
:data="businessDetailList"
style="width: 100%"
border
v-loading="businessDetailLoading">
<el-table-column prop="createTime" label="报名日期" align="center" width="150">
<template slot-scope="scope">
<span v-if="scope.row.createTime">{{ formatDateTime(scope.row.createTime) }}</span>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column prop="courseName" label="课程名称" align="center" ></el-table-column>
<el-table-column prop="name" label="学生姓名" align="center" width="120"></el-table-column>
<el-table-column prop="idCard" label="身份证号" align="center" width="180"></el-table-column>
<el-table-column label="学员手机号" align="center" prop="phone" width="150"/>
<el-table-column prop="channel" label="来源" align="center"></el-table-column>
<el-table-column prop="subsidy" label="补贴金额" align="center"></el-table-column>
<el-table-column prop="reserveMoney" label="订单金额" align="center" width="120px"></el-table-column>
<el-table-column label="支付状态" align="center" prop="paymentStatus" width="90px" :formatter="formatPaymentStatus" />
<el-table-column label="支付方式" align="center" prop="payType" width="90px" :formatter="formatPayType" />
<!-- <el-table-column label="是否面签" align="center" prop="isSign" :formatter="formatIsSign" />-->
<el-table-column prop="isSign" label="是否面签" align="center" width="90px">
<template slot-scope="scope">
<el-tag v-if="scope.row.isSign == 1" type="success"></el-tag>
<el-tag v-if="scope.row.isSign == 0" type="danger"></el-tag>
</template>
</el-table-column>
<el-table-column prop="ifEnd" label="是否终止" align="center" width="90px">
<template slot-scope="scope">
<el-tag v-if="scope.row.ifEnd == '1'" type="success"></el-tag>
<el-tag v-if="scope.row.ifEnd == '0'" type="danger"></el-tag>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<div class="pagination-container" v-if="businessDetailTotal > 0">
<el-pagination
@size-change="handleBusinessDetailSizeChange"
@current-change="handleBusinessDetailPageChange"
:current-page="queryParams.pageNo"
:page-sizes="[10, 20, 30, 50]"
:page-size="queryParams.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="businessDetailTotal">
</el-pagination>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="businessDetailVisible = false"> </el-button>
</div>
</el-dialog>
</div> </div>
</template> </template>
@ -642,7 +722,7 @@ import {
getCoachMoney, getCoachMoney,
getOrderMoneyByCoachId, getOrderMoneyByCoachId,
getCoachTotalCommission, getCoachTotalCommission,
getCommissionListByCoachId getCommissionListByCoachId, getBusinessManagerMoney, getBusinessManager
} from '@/views/drivingSchool/DriveSchoolStatistics/api' } from '@/views/drivingSchool/DriveSchoolStatistics/api'
import * as echarts from 'echarts'; import * as echarts from 'echarts';
@ -758,6 +838,13 @@ export default {
cashierDetailTotal: 0, cashierDetailTotal: 0,
businessDetailVisible: false,
businessDetailList: [],
businessDetailLoading: false,
businessDetailTotal: 0,
businessDetail: null,
}; };
}, },
@ -1123,7 +1210,7 @@ export default {
'unconfirmedReceive': '待确认收款明细', 'unconfirmedReceive': '待确认收款明细',
'outAmount': '应付金额明细', 'outAmount': '应付金额明细',
'showedPayIsPaid': '已确认付款明细', 'showedPayIsPaid': '已确认付款明细',
'unpaidAmount': '待付款明细' 'unpaidAmount': '业务经理补贴明细'
}; };
@ -1168,10 +1255,9 @@ export default {
this.queryParams.ifPay = null this.queryParams.ifPay = null
this.queryParams.startTimeStr = this.queryParams.startTime this.queryParams.startTimeStr = this.queryParams.startTime
this.queryParams.endTimeStr = this.queryParams.endTime this.queryParams.endTimeStr = this.queryParams.endTime
if(type !== 'unpaidAmount'){
if(type === "showedPayIsPaid"){ if(type === "showedPayIsPaid"){
this.queryParams.ifPay = '1' this.queryParams.ifPay = '1'
}else if(type === "unpaidAmount"){
this.queryParams.ifPay = '0'
} }
const requestParams = { const requestParams = {
...this.queryParams, ...this.queryParams,
@ -1182,6 +1268,13 @@ export default {
this.cashierDataList = res.data; this.cashierDataList = res.data;
console.log('cashierDataList', this.cashierDataList) console.log('cashierDataList', this.cashierDataList)
}) })
}else if(type === 'unpaidAmount'){
return getBusinessManagerMoney(this.queryParams).then(res => {
console.log('res', res)
this.cashierDataList = res.data;
console.log('cashierDataList', this.cashierDataList)
})
}
}, },
// //
@ -1204,6 +1297,7 @@ export default {
// //
showCashierDetail(row) { showCashierDetail(row) {
console.log('row', row) console.log('row', row)
if(!row.hasOwnProperty('coachId')){
this.queryParams.pageNo = 1; this.queryParams.pageNo = 1;
this.cashierDetail = row; this.cashierDetail = row;
this.cashierDetailLoading = true; this.cashierDetailLoading = true;
@ -1216,6 +1310,22 @@ export default {
this.getCashierDetail(row.coachUserId).finally(() => { this.getCashierDetail(row.coachUserId).finally(() => {
this.cashierDetailLoading = false; this.cashierDetailLoading = false;
}); });
}else if(row.hasOwnProperty('coachId')){
this.queryParams.pageNo = 1;
this.businessDetail = row;
this.businessDetailLoading = true;
this.businessDetailVisible = true;
this.cashierDetailTitle = `${row.coachName}${this.cashierDialogTitle}`;
//
this.currentCashierTypeForDetail = this.currentCashierType;
this.getBusinessDetail(row.coachId).finally(() => {
this.businessDetailLoading = false;
});
}
}, },
handleFinanceDetailClose() { handleFinanceDetailClose() {
@ -1247,6 +1357,20 @@ export default {
this.queryParams.pageNo = 1; this.queryParams.pageNo = 1;
}, },
handleBusinessDetailClose() {
// ID
this.queryParams.coachId = null;
this.queryParams.ifPay = null;
//
if (this.currentCashierTypeForDetail) {
this.getCashierData(this.currentCashierTypeForDetail);
}
//
this.queryParams.pageNo = 1;
},
// //
getFinanceDetail(coachId) { getFinanceDetail(coachId) {
this.queryParams.startTimeStr = this.queryParams.startTime this.queryParams.startTimeStr = this.queryParams.startTime
@ -1276,6 +1400,20 @@ export default {
}); });
}, },
getBusinessDetail(coachId) {
this.queryParams.startTimeStr = this.queryParams.startTime
this.queryParams.endTimeStr = this.queryParams.endTime
this.queryParams.coachId = coachId;
const requestParams = {
...this.queryParams,
};
delete requestParams.endTime;
return getBusinessManager(requestParams).then(res => {
this.businessDetailList = res.data.records;
this.businessDetailTotal = res.data.total;
});
},
// //
handleFinanceDetailSizeChange(val) { handleFinanceDetailSizeChange(val) {
console.log('val', val) console.log('val', val)
@ -1306,6 +1444,46 @@ export default {
this.getCashierDetail(this.cashierDetail.coachUserId); this.getCashierDetail(this.cashierDetail.coachUserId);
}, },
// ()
handleBusinessDetailSizeChange(val) {
console.log('val', val)
this.queryParams.pageSize = val;
this.queryParams.pageNo = 1; //
this.getCashierDetail(this.cashierDetail.coachId);
},
// ()
handleBusinessDetailPageChange(val) {
console.log('val', val)
this.queryParams.pageNo = val;
this.getCashierDetail(this.cashierDetail.coachId);
},
formatPaymentStatus(row, column, value) {
const map = {
0: '待支付',
1: '已取消',
2: '已支付',
3: '待面签',
4: '已面签',
5: '已完成',
6: '申请退款',
7: '退款中',
8: '退款成功'
};
return map[value] ?? '未知状态';
},
formatPayType(row, column, value) {
const map = {
1: '定金',
2: '全款'
};
return map[value] ?? '未知类型';
},
formatIsSign(row, column, value) {
return value === 1 ? '是' : '否';
},
// ECharts // ECharts
initCharts() { initCharts() {

View File

@ -176,7 +176,6 @@
<el-collapse-item title="出纳确认" name="2"> <el-collapse-item title="出纳确认" name="2">
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="是否到账" prop="cashierConfirm" > <el-form-item label="是否到账" prop="cashierConfirm" >
<el-select v-model="formData.cashierConfirm" placeholder="待确认"> <el-select v-model="formData.cashierConfirm" placeholder="待确认">
<el-option <el-option
@ -197,9 +196,9 @@
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="16"> <el-col :span="24">
<el-form-item label="收款账号" prop="paymentAccount" > <el-form-item label="收款账号" prop="paymentAccount" >
<el-select v-model="formData.paymentAccount" placeholder="请选择收款账号"> <el-select v-model="formData.paymentAccount" placeholder="请选择收款账号" style="width: 60%;">
<el-option <el-option
v-for="item in paymentAccountList" v-for="item in paymentAccountList"
:key="item.value" :key="item.value"
@ -210,6 +209,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="审批意见" prop="cashierConfirmRemark"> <el-form-item label="审批意见" prop="cashierConfirmRemark">
@ -398,12 +398,15 @@ export default {
} }
this.formLoading = true this.formLoading = true
try { try {
const data = this.formData const data = this.formData
// //
if (data.id) { if (data.id) {
if(this.formData.cashierConfirm !== null){ if(this.formData.cashierConfirm !== null){
console.log('123', this.formData)
this.formData.cashierConfirmTime = new Date().getTime() this.formData.cashierConfirmTime = new Date().getTime()
} }
console.log('456', this.formData)
await SchoolCourseOrderApi.updateSchoolCourseOrder(data) await SchoolCourseOrderApi.updateSchoolCourseOrder(data)
this.$modal.msgSuccess('修改成功') this.$modal.msgSuccess('修改成功')
this.dialogVisible = false this.dialogVisible = false

View File

@ -20,9 +20,9 @@
<!-- 操作工具栏 --> <!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <!-- <el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="openForm(undefined)">新增</el-button> <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="openForm(undefined)">新增</el-button>
</el-col> </el-col>-->
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport" >学员及订单信息导出</el-button> <el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport" >学员及订单信息导出</el-button>
<!-- <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading">导出</el-button>--> <!-- <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading">导出</el-button>-->
@ -180,7 +180,6 @@
size="mini" size="mini"
type="text" type="text"
style="color: RGB(192, 196, 204)" style="color: RGB(192, 196, 204)"
@click="openCashierConfirm(scope.row.id)"
v-else-if="scope.row.cashierConfirm == 1 || scope.row.cashierConfirm == '1'" v-else-if="scope.row.cashierConfirm == 1 || scope.row.cashierConfirm == '1'"
:disabled="true" :disabled="true"
> >

View File

@ -81,3 +81,21 @@ export function getCommissionListByCoachId(params){
params: params params: params
}) })
} }
// 业务经理提成信息列表
export function getBusinessManagerMoney(params){
return request({
url: '/base/dl-drive-school-coach/getBusinessManagerMoney',
method: 'GET',
params: params
})
}
// 业务经理提成详细列表
export function getBusinessManager(params) {
return request({
url: '/base/dl-drive-school-coach/getBusinessManager',
method: 'get',
params
})
}

View File

@ -79,4 +79,13 @@ export function exportSchoolProcessExcel(params) {
}); });
} }
// 获取驾校学员合格率
export function getExamPassRate(params) {
return request({
url: '/process/getExamPassRate',
method: 'get',
params
});
}

View File

@ -64,6 +64,17 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="考试时间">
<el-date-picker
v-model="queryParams.timeRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd"
@change="handleDateChange">
</el-date-picker>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button> <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
@ -199,7 +210,10 @@ export default {
studentIdCard: null, studentIdCard: null,
financePass: undefined, financePass: undefined,
examStatus: undefined, examStatus: undefined,
timeRange: null,
subject: null, subject: null,
examStartTime: null,
examEndTime: null
}, },
subjectOptions: [ subjectOptions: [
{ value: 1, label: '科目一' }, { value: 1, label: '科目一' },
@ -229,6 +243,12 @@ export default {
const res = await processApi.getProcessPage(this.queryParams) const res = await processApi.getProcessPage(this.queryParams)
this.list = res.data.records this.list = res.data.records
this.total = res.data.total this.total = res.data.total
const params = {
/* startTimeStr: '2025-05-01',
endTimeStr: '2025-05-31', */
// timeType: 'month',
}
this.getExamPassRate(params)
} finally { } finally {
this.loading = false this.loading = false
} }
@ -252,13 +272,30 @@ export default {
/** 搜索按钮操作 */ /** 搜索按钮操作 */
handleQuery() { handleQuery() {
this.queryParams.pageNo = 1 this.queryParams.pageNo = 1
if(this.queryParams.examStartTime != null){
this.queryParams.examStartTime = this.queryParams.examStartTime + ' 00:00:01';
this.queryParams.examEndTime = this.queryParams.examEndTime + ' 23:59:59';
}
this.getList() this.getList()
}, },
/** 重置按钮操作 */ /** 重置按钮操作 */
resetQuery() { resetQuery() {
this.resetForm('queryForm') this.resetForm('queryForm')
this.showPassedOnly = true this.showPassedOnly = true
this.queryParams.examStatus = '1' this.queryParams = {
pageNo: 1,
pageSize: 10,
courseName: null,
coachName: null,
userName: null,
studentIdCard: null,
financePass: undefined,
examStatus: '1',
timeRange: null,
subject: null,
examStartTime: null,
examEndTime: null
}
this.handleQuery() this.handleQuery()
}, },
/** 添加/修改操作 */ /** 添加/修改操作 */
@ -276,6 +313,20 @@ export default {
} catch { } catch {
} }
}, },
handleDateChange(val) {
if (val && val.length === 2) {
this.queryParams.examStartTime = val[0];
this.queryParams.examEndTime = val[1];
} else {
this.queryParams.examStartTime = null;
this.queryParams.examEndTime = null;
}
},
getExamPassRate(params){
const res = processApi.getExamPassRate(params)
console.log('res12345', res)
},
/** 导出按钮操作 */ /** 导出按钮操作 */
async handleExport() { async handleExport() {
/* await this.$modal.confirm('-?'); /* await this.$modal.confirm('-?');

View File

@ -37,8 +37,8 @@
<el-table-column label="联系电话" align="center" prop="phone"/> <el-table-column label="联系电话" align="center" prop="phone"/>
<el-table-column label="身份证号" align="center" prop="idCard"/> <el-table-column label="身份证号" align="center" prop="idCard"/>
<el-table-column label="工作性质" align="center" prop="workName"/> <el-table-column label="工作性质" align="center" prop="workName"/>
<el-table-column label="户籍地址" align="center" prop="registAddress"/> <el-table-column label="户籍地址" align="center" prop="registAddress" show-overflow-tooltip/>
<el-table-column label="家庭住址" align="center" prop="address"/> <el-table-column label="家庭住址" align="center" prop="address" show-overflow-tooltip/>
<el-table-column label="人员类型" align="center" prop="type"/> <el-table-column label="人员类型" align="center" prop="type"/>
<el-table-column label="学员编号" align="center" prop="drivingStudentCode"/> <el-table-column label="学员编号" align="center" prop="drivingStudentCode"/>
<el-table-column label="渠道" align="center" prop="source" :formatter="formatChannel"/> <el-table-column label="渠道" align="center" prop="source" :formatter="formatChannel"/>