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-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-input
v-model="queryParams.jxName"
@ -29,6 +40,7 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<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>
@ -75,12 +87,14 @@
</template>
</el-table-column>
<!-- <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="coachName" />
<el-table-column label="技术评价" align="center" prop="teachContent" />
<el-table-column label="服务评价" align="center" prop="serviceContent" />
<el-table-column label="满意度" align="center" prop="rate" />
<el-table-column label="教学质量" align="center" prop="teachingQuality" />
<el-table-column label="教学质量评价内容" align="center" prop="teachContent" show-overflow-tooltip/>
<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">
<template slot-scope="scope">
<!-- <el-button
@ -163,7 +177,21 @@ export default {
form: {},
//
rules: {
}
},
standardList: [
{
value: '优',
label: '优'
},
{
value: '良',
label: '良'
},
{
value: '差',
label: '差'
}
]
};
},
created() {

View File

@ -158,13 +158,29 @@
</div>
</el-card>
</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')">
<div class="card_msg_2">
<div class="card_2_font">待付款金额{{ formatAmount(dataObj.moneyInfo.outAmount - dataObj.moneyInfo.showedPayIsPaid) }}
</div>
</div>
</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-row>
</el-col>
@ -628,6 +644,70 @@
</div>
</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>
</template>
@ -642,7 +722,7 @@ import {
getCoachMoney,
getOrderMoneyByCoachId,
getCoachTotalCommission,
getCommissionListByCoachId
getCommissionListByCoachId, getBusinessManagerMoney, getBusinessManager
} from '@/views/drivingSchool/DriveSchoolStatistics/api'
import * as echarts from 'echarts';
@ -758,6 +838,13 @@ export default {
cashierDetailTotal: 0,
businessDetailVisible: false,
businessDetailList: [],
businessDetailLoading: false,
businessDetailTotal: 0,
businessDetail: null,
};
},
@ -1123,7 +1210,7 @@ export default {
'unconfirmedReceive': '待确认收款明细',
'outAmount': '应付金额明细',
'showedPayIsPaid': '已确认付款明细',
'unpaidAmount': '待付款明细'
'unpaidAmount': '业务经理补贴明细'
};
@ -1168,10 +1255,9 @@ export default {
this.queryParams.ifPay = null
this.queryParams.startTimeStr = this.queryParams.startTime
this.queryParams.endTimeStr = this.queryParams.endTime
if(type !== 'unpaidAmount'){
if(type === "showedPayIsPaid"){
this.queryParams.ifPay = '1'
}else if(type === "unpaidAmount"){
this.queryParams.ifPay = '0'
}
const requestParams = {
...this.queryParams,
@ -1182,6 +1268,13 @@ export default {
this.cashierDataList = res.data;
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,18 +1297,35 @@ export default {
//
showCashierDetail(row) {
console.log('row', row)
this.queryParams.pageNo = 1;
this.cashierDetail = row;
this.cashierDetailLoading = true;
this.cashierDetailVisible = true;
this.cashierDetailTitle = `${row.coachName}${this.cashierDialogTitle}`;
if(!row.hasOwnProperty('coachId')){
this.queryParams.pageNo = 1;
this.cashierDetail = row;
this.cashierDetailLoading = true;
this.cashierDetailVisible = true;
this.cashierDetailTitle = `${row.coachName}${this.cashierDialogTitle}`;
//
this.currentCashierTypeForDetail = this.currentCashierType;
this.getCashierDetail(row.coachUserId).finally(() => {
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;
});
}
//
this.currentCashierTypeForDetail = this.currentCashierType;
this.getCashierDetail(row.coachUserId).finally(() => {
this.cashierDetailLoading = false;
});
},
handleFinanceDetailClose() {
@ -1247,6 +1357,20 @@ export default {
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) {
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) {
console.log('val', val)
@ -1306,6 +1444,46 @@ export default {
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
initCharts() {

View File

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

View File

@ -20,9 +20,9 @@
<!-- 操作工具栏 -->
<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-col>
</el-col>-->
<el-col :span="1.5">
<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>-->
@ -180,7 +180,6 @@
size="mini"
type="text"
style="color: RGB(192, 196, 204)"
@click="openCashierConfirm(scope.row.id)"
v-else-if="scope.row.cashierConfirm == 1 || scope.row.cashierConfirm == '1'"
:disabled="true"
>

View File

@ -81,3 +81,21 @@ export function getCommissionListByCoachId(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-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-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
@ -199,7 +210,10 @@ export default {
studentIdCard: null,
financePass: undefined,
examStatus: undefined,
timeRange: null,
subject: null,
examStartTime: null,
examEndTime: null
},
subjectOptions: [
{ value: 1, label: '科目一' },
@ -229,6 +243,12 @@ export default {
const res = await processApi.getProcessPage(this.queryParams)
this.list = res.data.records
this.total = res.data.total
const params = {
/* startTimeStr: '2025-05-01',
endTimeStr: '2025-05-31', */
// timeType: 'month',
}
this.getExamPassRate(params)
} finally {
this.loading = false
}
@ -252,13 +272,30 @@ export default {
/** 搜索按钮操作 */
handleQuery() {
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()
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm('queryForm')
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()
},
/** 添加/修改操作 */
@ -276,6 +313,20 @@ export default {
} 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() {
/* 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="idCard"/>
<el-table-column label="工作性质" align="center" prop="workName"/>
<el-table-column label="户籍地址" align="center" prop="registAddress"/>
<el-table-column label="家庭住址" align="center" prop="address"/>
<el-table-column label="户籍地址" align="center" prop="registAddress" show-overflow-tooltip/>
<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="drivingStudentCode"/>
<el-table-column label="渠道" align="center" prop="source" :formatter="formatChannel"/>