Compare commits

...

4 Commits

Author SHA1 Message Date
xyc
8ff6b814ad 更新 2025-07-07 15:56:45 +08:00
Lx
c549fcbe72 0623 2025-06-23 17:34:27 +08:00
Lx
f0067784fa Merge remote-tracking branch 'origin/driver' into driver 2025-06-19 15:35:07 +08:00
Lx
d5cefa31f8 0619 2025-06-19 15:34:26 +08:00
25 changed files with 3812 additions and 104 deletions

View File

@ -3,10 +3,11 @@ import { getRefreshToken } from '@/utils/auth'
import service from '@/utils/request'
// 登录方法
export function login(username, password, captchaVerification, socialType, socialCode, socialState) {
export function login(username, password, tenantId,captchaVerification, socialType, socialCode, socialState) {
const data = {
username,
password,
tenantId,
captchaVerification,
// 社交相关
socialType,

View File

@ -36,12 +36,13 @@ const user = {
Login({ commit }, userInfo) {
const username = userInfo.username.trim()
const password = userInfo.password
const tenantId = userInfo.tenantId
const captchaVerification = userInfo.captchaVerification
const socialCode = userInfo.socialCode
const socialState = userInfo.socialState
const socialType = userInfo.socialType
return new Promise((resolve, reject) => {
login(username, password, captchaVerification, socialType, socialCode, socialState).then(res => {
login(username, password, tenantId, captchaVerification, socialType, socialCode, socialState).then(res => {
res = res.data;
// 设置 token
setToken(res)

File diff suppressed because it is too large Load Diff

View File

@ -14,7 +14,7 @@
</el-select>
</el-form-item>
<el-form-item label="教练选择" prop="coachUserId">
<el-select v-model="formData.coachUserId" placeholder="请选择课程" @change="handleCoachChange()">
<el-select v-model="formData.coachUserId" placeholder="请选择教练" @change="handleCoachChange()">
<el-option v-for="dict in coachList"
:key="dict.userId" :label="dict.name" :value="dict.userId"
/>
@ -105,7 +105,7 @@ export default {
const coachRes = await listCoach()
this.coachList = coachRes.data
console.log('当前数据', this.coachList);
this.formLoading = false;
},
/** 提交按钮 */

View File

@ -31,9 +31,19 @@
<el-form-item label="负责教练" prop="coachUserName">
<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-row :gutter="20">
<el-col :span="12">
<el-form-item label="订金金额" prop="reserveMoney">
<el-input v-model="formData.reserveMoney" placeholder="请输入订金金额"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="尾款" prop="restMoney">
<el-input v-model="formData.restMoney" placeholder="请输入尾款"/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
@ -138,9 +148,7 @@
</div>
</div>
<el-form-item label="尾款" prop="restMoney">
<el-input v-model="formData.restMoney" placeholder="请输入尾款"/>
</el-form-item>
<el-row :gutter="20">
<el-col :span="8">
@ -172,6 +180,10 @@
</el-col>
</el-row>
<el-form-item label="订单备注" prop="orderRemark">
<el-input type="textarea" v-model="formData.orderRemark" placeholder="请输入订单备注"/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@ -226,6 +238,7 @@ export default {
passTime: undefined,
gradTime: undefined,
schemeId: undefined,
orderRemark: undefined,
},
ifEndRadio: [
{
@ -388,6 +401,7 @@ export default {
passTime: undefined,
gradTime: undefined,
schemeId: undefined,
orderRemark: undefined,
}
this.resetForm('formRef')
}

View File

@ -0,0 +1,432 @@
<template>
<div class="app-container">
<!-- 对话框(添加 / 修改) -->
<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-collapse v-model="activeNames">
<el-collapse-item title="学员课程情况" name="1">
<el-form-item label="订单号" prop="orderNo">
<el-input v-model="formData.orderNo" placeholder="请输入订单号" disabled/>
</el-form-item>
<el-form-item label="用户姓名" prop="userName">
<el-input v-model="formData.userName" placeholder="请输入用户姓名" disabled/>
</el-form-item>
<el-form-item label="用户手机号" prop="userPhone">
<el-input v-model="formData.userPhone" placeholder="请输入用户手机号" disabled/>
</el-form-item>
<el-form-item label="用户身份证号" prop="userNo">
<el-input v-model="formData.userNo" placeholder="请输入用户身份证号" disabled />
</el-form-item>
<el-form-item label="性别" prop="userSex">
<el-radio-group v-model="formData.userSex" disabled >
<el-radio v-for="dict in this.getDictDatas(DICT_TYPE.SYSTEM_USER_SEX)"
:key="dict.value" :label="dict.value"
>{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="课程名字" prop="courseName">
<el-input v-model="formData.courseName" placeholder="请输入课程名字" disabled/>
</el-form-item>
<el-form-item label="负责教练" prop="coachUserName">
<el-input v-model="formData.coachUserName" placeholder="请输入主负责教练姓名" disabled/>
</el-form-item>
<el-form-item label="订金金额" prop="reserveMoney">
<el-input v-model="formData.reserveMoney" placeholder="请输入订金金额" disabled />
</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="请选择毕业时间" disabled
/>
</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="请选择拿证时间" disabled
/>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="是否终止" prop="ifEnd">
<el-radio-group v-model="formData.ifEnd" disabled >
<el-radio v-for="item in ifEndRadio"
:key="item.value" :label="item.value"
>{{ item.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="终止原因" prop="endReason">
<el-input v-model="formData.endReason" placeholder="请输入终止原因" disabled />
</el-form-item>
<el-form-item label="终止时间" prop="endTime">
<el-date-picker clearable v-model="formData.endTime" type="date" value-format="timestamp"
placeholder="选择终止时间" disabled
/>
</el-form-item>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="订单状态" prop="paymentStatus">
<el-select v-model="formData.paymentStatus" placeholder="请选择订单状态" disabled >
<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" disabled >
<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>-->
<div style="display: flex; flex-direction: row; gap: 10px;">
<div>
<el-form-item label="提成方案" prop="schemeId" >
<el-select v-model="formData.schemeId" placeholder="请选择提成方案" disabled 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>
<span style="color: red">(如果没有合适的方案请添加)</span>
</div>
</div>
<el-form-item label="尾款" prop="restMoney">
<el-input v-model="formData.restMoney" placeholder="请输入尾款" disabled />
</el-form-item>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="支付类型" prop="payType">
<el-select v-model="formData.payType" placeholder="请选择支付类型" disabled >
<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="请选择支付渠道" disabled >
<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="请选择学员是否确认" disabled >
<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-collapse-item>
<el-collapse-item title="出纳确认" name="2">
<el-row>
<el-col :span="24">
<el-form-item label="是否到账" prop="cashierConfirm" >
<el-select v-model="formData.cashierConfirm" placeholder="待确认">
<el-option
v-for="item in cashierConfirmOption"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="审批意见" prop="cashierConfirmRemark">
<el-input type="textarea" v-model="formData.cashierConfirmRemark" placeholder="请输入出纳审批意见" />
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
</el-collapse>
</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: 'cashierConfirmForm',
components: {
SchemeForm
},
data() {
return {
//
dialogTitle: '',
//
dialogVisible: false,
// 12
formLoading: false,
//
formData: {
orderNo: undefined,
userName: undefined,
userPhone: undefined,
userNo: undefined,
userSex: undefined,
courseId: undefined,
courseName: undefined,
coachUserId: undefined,
coachUserName: undefined,
reserveMoney: undefined,
courseType: undefined,
ifEnd: undefined,
endReason: undefined,
endTime: undefined,
paymentStatus: undefined,
isSign: undefined,
restMoney: undefined,
payType: undefined,
passTime: undefined,
gradTime: undefined,
schemeId: undefined,
},
ifEndRadio: [
{
label: '是',
value: true
},
{
label: '否',
value: false
}
],
isSignRadio: [
{
label: '是',
value: 1
},
{
label: '否',
value: 0
}
],
payChannelList: [
{
label: '线下支付',
value: '2'
},
{
label: '微信支付',
value: '1'
}
],
ifAgreeList: [
{
label: '未确认',
value: '0'
},
{
label: '已同意',
value: '1'
},
{
label: '未同意',
value: '2'
},
{
label: '非代报名订单',
value: null
}
],
cashierConfirmOption:[
{
value:'0',
label:'未到账'
},
{
value:'1',
label:'已到账'
},
],
//
formRules: {},
schemeList: [],
activeNames: ['2'],
}
},
methods: {
/** 打开弹窗 */
async open(id) {
console.log('id', id)
this.dialogVisible = true
this.reset()
//
if (id) {
this.formLoading = true
try {
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
//
if (data.id) {
await SchoolCourseOrderApi.updateSchoolCourseOrder(data)
this.$modal.msgSuccess('修改成功')
this.dialogVisible = false
this.$emit('success')
return
}
//
await SchoolCourseOrderApi.createSchoolCourseOrder(data)
this.$modal.msgSuccess('新增成功')
this.dialogVisible = false
this.$emit('success')
} finally {
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 = {
orderNo: undefined,
userName: undefined,
userPhone: undefined,
userNo: undefined,
userSex: undefined,
courseId: undefined,
courseName: undefined,
coachUserId: undefined,
coachUserName: undefined,
reserveMoney: undefined,
courseType: undefined,
ifEnd: undefined,
endReason: undefined,
endTime: undefined,
paymentStatus: undefined,
isSign: undefined,
restMoney: undefined,
payType: undefined,
passTime: undefined,
gradTime: undefined,
schemeId: undefined,
}
this.resetForm('formRef')
}
}
}
</script>

View File

@ -83,14 +83,110 @@
<el-button size="mini" type="text" icon="el-icon-edit" @click="viewContract(scope.row)">合同信息</el-button>
</template>
</el-table-column>
<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 v-slot="scope">
<el-button size="mini" type="text" v-if="scope.row.ifEnd == true">订单已终止</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="openForm(scope.row.id)">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="openAssignmentCoach(scope.row)" v-if="scope.row.paymentStatus == 2 && scope.row.ifAssignmentCoach == 0 && scope.row.ifEnd == false">分配教练</el-button>
<el-button size="mini" type="text" icon="el-icon-close" @click="openEndOrder(scope.row)" v-if="scope.row.paymentStatus == 2 && scope.row.ifEnd == false">终止</el-button>
<el-button size="mini" type="text" icon="el-icon-plus" @click="openAddForm(scope.row)" v-if="scope.row.paymentStatus == 2 && scope.row.ifEnd == true && scope.row.isCreated == false">快速创建订单</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>-->
<el-table-column v-if="!showCashierColumnTwo" label="操作" align="center" class-name="small-padding fixed-width" >
<template v-slot="scope">
<!-- 如果订单已终止只显示"订单已终止" -->
<el-button
size="mini"
type="text"
v-if="scope.row.ifEnd == true"
disabled
>
该订单已终止
</el-button>
<!-- 如果订单未终止显示其他操作按钮 -->
<template v-if="scope.row.ifEnd == false">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="openForm(scope.row.id)"
>
修改
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="openAssignmentCoach(scope.row)"
v-if="scope.row.paymentStatus == 2 && scope.row.ifAssignmentCoach == 0 && scope.row.ifEnd == false"
>
分配教练
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-close"
@click="openEndOrder(scope.row)"
>
终止
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>
删除
</el-button>
</template>
<!-- 快速创建订单仅针对已终止订单 -->
<el-button
size="mini"
type="text"
icon="el-icon-plus"
@click="openAddForm(scope.row)"
v-if="scope.row.ifEnd == true && scope.row.isCreated == false"
>
快速创建订单
</el-button>
</template>
</el-table-column>
<el-table-column v-if="showCashierColumn" label="出纳确认" align="center" class-name="small-padding fixed-width" >
<template v-slot="scope">
<el-button
size="mini"
type="text"
v-if="scope.row.ifEnd"
disabled
>
订单已终止
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-plus"
@click="openCashierConfirm(scope.row.id)"
v-if="scope.row.cashierConfirm !== '1' "
>
确认收款
</el-button>
<el-button
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"
>
已确认
</el-button>
</template>
</el-table-column>
</el-table>
@ -314,6 +410,7 @@
<AssignmentCoach ref="assignmentCoachRef" @success="getList" />
<EndOrder ref="endOrderRef" @success="getList" />
<SchoolCourseOrderFastAddForm ref="formFastAddRef" @success="getList" />
<cashierConfirmForm ref="cashierConfirmRef" @success="getList" />
</div>
</template>
@ -324,9 +421,11 @@ import AssignmentCoach from "@/views/drivingSchool/DriveSchoolPay/form/assignmen
import EndOrder from "@/views/drivingSchool/DriveSchoolPay/form/endOrder.vue";
import SchoolCourseOrderFastAddForm from "@/views/drivingSchool/DriveSchoolPay/form/SchoolCourseOrderFastAddForm.vue";
import { getSourceUserById } from '@/views/drivingSchool/DriveSchoolPay/api'
import CashierConfirmForm from '@/views/drivingSchool/DriveSchoolPay/form/cashierConfirmForm.vue'
export default {
name: "SchoolCourseOrder",
components: {
CashierConfirmForm,
SchoolCourseOrderFastAddForm,
EndOrder,
AssignmentCoach,
@ -382,6 +481,16 @@ export default {
created() {
this.getList();
},
computed: {
//
showCashierColumn() {
// return this.$store.getters.roles.includes('cn')
return ['cn', 'jxzjl'].some(role => this.$store.getters.roles.includes(role));
},
showCashierColumnTwo() {
return this.$store.getters.roles.includes('cn')
}
},
methods: {
/** 查询列表 */
async getList() {
@ -420,6 +529,10 @@ export default {
openEndOrder(data) {
this.$refs["endOrderRef"].open(data);
},
/** 出纳确认*/
openCashierConfirm(data) {
this.$refs["cashierConfirmRef"].open(data);
},
getPhotoList(photoStr) {
if (!photoStr) return [];
return photoStr.split(',').map(item => item.trim());

View File

@ -25,7 +25,8 @@ export function getDetailsData(paramsObj) {
export function getStudentByCoach(paramsObj) {
return request({
url: '/base/drive-school-staff/pageStaff',
// url: '/base/drive-school-staff/pageStaff',
url: '/drive/school-course-order/getOrderByCoachId',
method: 'GET',
params: paramsObj
})
@ -45,3 +46,38 @@ export function getExamBatchById(id) {
method: 'GET'
})
}
export function getCoachMoney(params){
return request({
url: '/drive/school-course-order/getCoachMoney',
method: 'GET',
params: params
})
}
export function getOrderMoneyByCoachId(params){
return request({
url: '/drive/school-course-order/getOrderMoneyByCoachId',
method: 'GET',
params: params
})
}
// 教练提成合计列表
export function getCoachTotalCommission(params){
return request({
url: '/drive/school-commission/getCoachTotalCommission',
method: 'GET',
params: params
})
}
// 教练提成信息列表
export function getCommissionListByCoachId(params){
return request({
url: '/drive/school-commission/getCommissionListByCoachId',
method: 'GET',
params: params
})
}

View File

@ -694,7 +694,16 @@ export default {
queryParams.endTime = endTimeStr;
console.log('paramsObj', queryParams)
getDetailsData(queryParams).then(res => {
this.detailsDataList = res.data;
if(this.queryParams.timeType === 'all'){
this.detailsDataList = res.data;
}else if(this.queryParams.timeType === 'month' || this.queryParams.timeType === 'day' || this.queryParams.timeType === 'more'){
this.detailsDataList = res.data.sort((a, b) => {
const ta = Number(a.timeTotal || 0);
const tb = Number(b.timeTotal || 0);
return tb - ta; //
});
}
console.log('initDetailsData', this.detailsDataList)
})
},

View File

@ -141,6 +141,28 @@
</el-col>
</el-row>-->
</el-collapse-item>
<el-collapse-item title="审核信息" name="3">
<el-row>
<el-col :span="24">
<el-form-item label="是否通过" prop="financePass">
<el-select :disabled="readonly" v-model="formData.financePass" disabled placeholder="待审核">
<el-option
v-for="item in financePassOption"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="审批意见" prop="financeRemark">
<el-input type="textarea" :readonly="readonly" v-model="formData.financeRemark" disabled placeholder="暂无信息"/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
</el-collapse>
</el-form>
@ -167,7 +189,7 @@ export default {
dialogTitle: "",
//
dialogVisible: false,
activeNames: ['1','2'],
activeNames: ['1','2','3'],
// 12
formLoading: false,
addressList:[],

View File

@ -58,7 +58,7 @@
</template>
</el-table-column>
<el-table-column label="累计训练时长" width="120" align="center" prop="trainTime"/>
<el-table-column label="更新人" width="120" align="center" prop="updateName"/>
<el-table-column label="录入人" width="120" align="center" prop="inputName"/>
<el-table-column label="备注" width="90" align="center" prop="remark" show-overflow-tooltip/>
<!-- <el-table-column label="财务审核" align="center" prop="financePass">
<template v-slot="scope">

View File

@ -9,6 +9,22 @@ export function getSchoolCommissionPage(params) {
})
}
// 根据id获取提成记录详情
export function getSchoolCommissionById(id) {
return request({
url: '/drive/school-commission/get?id=' + id,
method: 'get'
})
}
// 出纳确认
export function cashierConfirm(data) {
return request({
url: '/drive/school-commission/cashierConfirm',
method: 'put',
data: data,
})
}
// 财务新增提成记录
export function createSchoolCommission(data){
return request({

View File

@ -0,0 +1,375 @@
<template>
<div class="app-container">
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="50%" v-dialogDrag append-to-body>
<el-form ref="formRef" :model="formData" :rules="formRules" v-loading="formLoading" label-width="100px">
<el-collapse v-model="activeNames">
<el-collapse-item title="提成情况" name="1">
<el-row>
<el-col :span="12">
<el-form-item label="教练姓名" prop="coachName">
<el-input :readonly="readonly" v-model="formData.coachName" disabled/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="课程名称" prop="courseName">
<el-input :readonly="readonly" v-model="formData.courseName" disabled/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="学员姓名" prop="studentName">
<el-input :readonly="readonly" v-model="formData.studentName" disabled/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="学员身份证号" prop="studentIdCard">
<el-input :readonly="readonly" v-model="formData.studentIdCard" disabled/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="课程类型" prop="courseType">
<el-input :readonly="readonly" v-model="formData.courseType" disabled/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="科目" prop="subject">
<el-input :readonly="readonly" v-model="formData.subject" disabled/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="提成金额" prop="commissionAmount">
<el-input :readonly="readonly" v-model="formData.commissionAmount" disabled/>
</el-form-item>
</el-col>
</el-row>
<el-collapse-item title="审核信息" name="2">
<el-row>
<el-col :span="12">
<el-form-item label="审核人姓名" prop="checkName">
<el-input :readonly="readonly" v-model="formData.checkName" disabled/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="审核日期" prop="createTime">
<el-input :readonly="readonly" :value="formattedCreateTime" disabled />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="审核意见" prop="checkRemark">
<el-input type="textarea" :readonly="readonly" v-model="formData.checkRemark" disabled/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
</el-collapse-item>
<el-collapse-item title="出纳确认" name="3">
<el-row>
<el-col :span="12">
<el-form-item label="是否发放" prop="ifPay">
<el-select :disabled="readonly" v-model="formData.ifPay" placeholder="待发放">
<el-option
v-for="item in ifPayOption"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="发放时间" prop="payTime">
<el-date-picker :disabled="readonly" clearable v-model="formData.payTime" type="date" value-format="timestamp" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="出纳意见" prop="cashierConfirmRemark">
<el-input type="textarea" :disabled="readonly" v-model="formData.cashierConfirmRemark" placeholder="请输入出纳意见" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="证明材料" prop="images" >
<image-upload :disabled="readonly" v-model="formData.images" />
<!-- <div :class="{ 'upload-disabled': readonly }">
<image-upload v-model="formData.images" />
</div>-->
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
</el-collapse>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button v-if="!readonly" type="primary" @click="submitForm" :readonly="formLoading">确认发放</el-button>
<el-button @click="dialogVisible = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import * as processApi from '@/views/drivingSchool/process/api';
import * as SchoolCommissionApi from "../api/pass";
import { cashierConfirm } from '../api/pass'
export default {
name: "processForm",
components: {
},
data() {
return {
readonly:true,
//
dialogTitle: "",
//
dialogVisible: false,
activeNames: ['1','2','3'],
// 12
formLoading: false,
statusOptions:[
{
value:'0',
label:'未完成'
},
{
value:'1',
label:'训练中'
},
{
value:'2',
label:'已完成'
}
],
examStatusOptions:[
{
value:null,
label:'未送考'
},{
value:'1',
label:'已通过'
},{
value:'9',
label:'已送考'
},{
value:'0',
label:'未通过'
}
],
ifPayOption:[
{
value:false,
label:'未发放'
},
{
value:true,
label:'已发放'
},
],
//
formData: {
coachName: undefined,
courseName: undefined,
studentName: undefined,
studentIdCard: undefined,
courseType: undefined,
subject: undefined,
commissionAmount: undefined,
checkName: undefined,
createTime: undefined,
checkRemark: undefined,
ifPay: undefined,
payTime: undefined,
cashierConfirmRemark: undefined,
images: undefined,
},
//
formRules: {
// userId: [{ required: true, message: 'ID', trigger: 'blur' }],
// userName: [{ required: true, message: '', trigger: 'blur' }],
// userMobile: [{ required: true, message: '', trigger: 'blur' }],
// coachId: [{ required: true, message: 'ID', trigger: 'blur' }],
// examNum: [{ required: true, message: '12...', trigger: 'blur' }],
// status: [{ required: true, message: '0-;1-2-', trigger: 'blur' }],
// examStatus: [{ required: true, message: '01;null ', trigger: 'blur' }],
// examScore: [{ required: true, message: '', trigger: 'blur' }],
// images: [{ required: true, message: '', trigger: 'blur' }],
// examTime: [{ required: true, message: '', trigger: 'blur' }],
// remark: [{ required: true, message: '', trigger: 'blur' }],
// trainTime: [{ required: true, message: '', trigger: 'blur' }],
// financePass: [{ required: true, message: '', trigger: 'blur' }],
// financeRemark: [{ required: true, message: '', trigger: 'blur' }],
},
};
},
computed: {
formattedCreateTime() {
if (!this.formData.createTime) return '';
const date = new Date(this.formData.createTime);
const pad = (n) => (n < 10 ? '0' + n : n);
const year = date.getFullYear();
const month = pad(date.getMonth() + 1);
const day = pad(date.getDate());
const hour = pad(date.getHours());
const minute = pad(date.getMinutes());
const second = pad(date.getSeconds());
return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
},
},
methods: {
/** 打开弹窗 */
async open(id,readonly) {
console.log('readonly', readonly)
this.dialogVisible = true;
this.readonly = readonly
this.reset();
//
if (id) {
this.formLoading = true;
try {
const res = await SchoolCommissionApi.getSchoolCommissionById(id);
this.formData = res.data;
if(readonly){
this.dialogTitle = "查看提成信息";
}else{
this.dialogTitle = "确认提成信息";
}
} finally {
this.formLoading = false;
}
}
this.title = "新增驾校-学员课程进度";
},
/** 提交按钮 */
async submitForm() {
//
await this.$refs["formRef"].validate();
/* if (this.formData.examStatus !== '1') {
try {
//
await this.$confirm('当前学员考试状态不是已通过状态,是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
});
// ""
} catch (error) {
// ""
return;
}
} */
this.formLoading = true;
try {
this.formData.cashierConfirmTime = new Date().getTime();
const data = this.formData;
//
await SchoolCommissionApi.cashierConfirm(data);
this.$modal.msgSuccess("已确认");
this.dialogVisible = false;
this.$emit('success');
} finally {
this.formLoading = false;
}
},
getSubjectName(subject) {
const subjectMap = {
1: '科目一',
2: '科目二',
3: '科目三',
4: '科目四'
};
return subjectMap[subject] || subject;
},
getExamStatusName(status) {
const statusMap = {
'0': '未通过',
'1': '已通过',
'9': '已送考',
'null': '未送考'
};
return statusMap[status] || status;
},
formatDate(timestamp) {
if (!timestamp) return '-'; //
const date = new Date(timestamp);
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0'); //
const day = String(date.getDate()).padStart(2, '0'); //
return `${year}-${month}-${day}`;
},
/** 表单重置 */
reset() {
this.formData = {
coachName: undefined,
courseName: undefined,
studentName: undefined,
studentIdCard: undefined,
courseType: undefined,
subject: undefined,
commissionAmount: undefined,
checkName: undefined,
createTime: undefined,
checkRemark: undefined,
ifPay: undefined,
payTime: undefined,
cashierConfirmRemark: undefined,
images: undefined,
};
this.resetForm("formRef");
}
}
};
</script>
<style scoped>
/* 禁用状态样式 */
.upload-disabled {
position: relative; /* 为伪元素定位准备 */
}
/* 半透明遮罩层(视觉禁用) */
.upload-disabled::after {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(255, 255, 255, 0.5);
z-index: 10;
cursor: not-allowed;
}
/* 禁用子组件内部交互 */
.upload-disabled :deep(.el-upload),
.upload-disabled :deep(.el-upload-list__item-actions) {
pointer-events: none; /* 禁止所有鼠标事件 */
opacity: 0.6; /* 视觉上变灰 */
}
</style>

View File

@ -30,7 +30,7 @@
<!-- <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"-->
<!-- v-hasPermi="['drive:school-commission:export']">导出</el-button>-->
<!-- </el-col>-->
<!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>-->
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
<el-col :span="1.5">
<el-button
type="primary"
@ -45,11 +45,19 @@
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="教练姓名" align="center" prop="coachName" />
<el-table-column label="学生姓名" align="center" prop="studentName" />
<el-table-column label="学生身份证号" align="center" prop="studentIdCard" width="180px"/>
<el-table-column label="课程名称" align="center" prop="courseName" />
<el-table-column label="课程类型" align="center" prop="courseType" />
<el-table-column label="提成金额" align="center" prop="commissionAmount" />
<el-table-column label="科目" align="center" prop="subject" />
<el-table-column label="审核人姓名" align="center" prop="checkName" />
<el-table-column label="审核意见" align="center" prop="checkRemark" show-overflow-tooltip/>
<el-table-column label="审核日期" align="center" prop="createTime" :formatter="formatDate"/>
<el-table-column label="是否发放" align="center" prop="ifPay" :formatter="formatIfPay"/>
<el-table-column label="发放日期" align="center" prop="payTime" :formatter="formatDate"/>
<el-table-column label="出纳确认日期" align="center" prop="cashierConfirmTime" :formatter="formatDate"/>
<el-table-column label="确认人姓名" align="center" prop="cashierName" />
<el-table-column label="出纳备注" align="center" prop="cashierConfirmRemark" show-overflow-tooltip/>
<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">-->
<!-- <template v-slot="scope">-->
<!-- <el-button size="mini" type="text" icon="el-icon-edit" @click="openForm(scope.row.id)"-->
@ -58,6 +66,27 @@
<!-- v-hasPermi="['drive:school-commission:delete']">删除</el-button>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column v-if="showCashierColumn" label="出纳确认" align="center" class-name="small-padding fixed-width" >
<template v-slot="scope">
<el-button
size="mini"
type="text"
icon="el-icon-view"
@click="openForm(scope.row.id,true)"
>
查看
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-thumb"
:disabled="scope.row.ifPay "
@click="openForm(scope.row.id,false)"
>
确认发放
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@ -138,6 +167,7 @@
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<confirmForm ref="confirmRef" @success="getList" />
</div>
</template>
@ -146,10 +176,13 @@ import * as SchoolCommissionApi from "./api/pass";
import { createSchoolCommission, getCourseList } from './api/pass'
import { getDlDriveSchoolStudentPage } from "../student/studentApi/index";
import { listCoach } from "../drivingSchoolCar/api/car";
import processForm from '@/views/drivingSchool/process/form/processForm.vue'
import confirmForm from '@/views/drivingSchool/driveSchoolExamPass/form/confirmForm.vue'
// import SchoolCommissionForm from './SchoolCommissionForm.vue';
export default {
name: "SchoolCommission",
components: {
confirmForm
// SchoolCommissionForm,
},
data() {
@ -223,6 +256,16 @@ export default {
this.getCoachList();
this.getStudentList();
},
computed: {
//
showCashierColumn() {
// return this.$store.getters.roles.includes('cn')
return ['cn', 'jxzjl'].some(role => this.$store.getters.roles.includes(role));
},
showCashierColumnTwo() {
return this.$store.getters.roles.includes('cn')
}
},
methods: {
/** 查询列表 */
async getList() {
@ -246,8 +289,8 @@ export default {
this.handleQuery();
},
/** 添加/修改操作 */
openForm(id) {
this.$refs["formRef"].open(id);
openForm(id,readonly) {
this.$refs["confirmRef"].open(id,readonly);
},
/** 新增按钮操作 */
@ -379,6 +422,21 @@ export default {
this.form.studentName = null; //
}
},
formatIfPay(row, column, cellValue) {
return cellValue ?? false ? '已发放' : '未发放';
},
formatDate(row, column, cellValue) {
return this.formatTimestampToDate(cellValue);
},
formatTimestampToDate(timestamp) {
if (!timestamp) return '';
const date = new Date(timestamp);
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
},
// /** */
// async handleDelete(row) {

View File

@ -96,12 +96,47 @@
</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-row>
<el-col :span="12">
<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-col>
<el-col :span="12">
<el-form-item label="身份证号" prop="studentIdCard">
<el-input :readonly="readonly" v-model="formData.studentIdCard" disabled/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item title="提成信息" name="2">
<el-collapse-item title="各科目成绩信息" name="2">
<el-table :data="formData.processList" border style="width: 100%">
<el-table-column prop="subject" label="科目" >
<template slot-scope="scope">
{{ getSubjectName(scope.row.subject) }}
</template>
</el-table-column>
<el-table-column prop="examStatus" label="考试状态" >
<template slot-scope="scope">
{{ getExamStatusName(scope.row.examStatus) }}
</template>
</el-table-column>
<el-table-column prop="examTime" label="考试时间" >
<template slot-scope="scope">
{{ formatDate(scope.row.examTime) }}
</template>
</el-table-column>
<el-table-column prop="examScore" label="考试分数" >
<template slot-scope="scope">
{{ scope.row.examScore || '-' }}
</template>
</el-table-column>
</el-table>
</el-collapse-item>
<el-collapse-item title="提成信息" name="3">
<el-row>
<el-col :span="8">
<el-form-item label="提成金额" prop="coachCommission">
@ -119,9 +154,16 @@
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="出纳确认到账情况:" prop="cashierConfirm" label-width="150px">
<div :class="cashierConfirmClass">{{ cashierConfirmText }}</div>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item title="财务审核" name="3">
<el-collapse-item title="财务审核" name="4">
<el-row>
<el-col :span="24">
@ -167,7 +209,7 @@ export default {
dialogTitle: "",
//
dialogVisible: false,
activeNames: ['1','2','3'],
activeNames: ['1','3','4'],
// 12
formLoading: false,
statusOptions:[
@ -232,6 +274,7 @@ export default {
coachCommission: undefined,
studentPay: undefined,
studentRemainingPay: undefined,
cashierConfirm: undefined,
},
//
formRules: {
@ -252,6 +295,21 @@ export default {
},
};
},
computed: {
cashierConfirmText() {
const value = this.formData.cashierConfirm;
if (value === '0') return '未到账';
if (value === '1') return '已到账';
return '待确认';
},
cashierConfirmClass() {
const value = this.formData.cashierConfirm;
if (value === '1') {
return 'text-success'; //
}
return 'text-danger'; //
}
},
methods: {
/** 打开弹窗 */
async open(id,readonly) {
@ -290,6 +348,17 @@ export default {
return;
}
}
if (this.formData.financePass) {
try {
await this.$confirm('当前记录已审核过,是否继续审核?', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning'
});
} catch (error) {
return; //
}
}
this.formLoading = true;
try {
@ -303,6 +372,34 @@ export default {
this.formLoading = false;
}
},
getSubjectName(subject) {
const subjectMap = {
1: '科目一',
2: '科目二',
3: '科目三',
4: '科目四'
};
return subjectMap[subject] || subject;
},
getExamStatusName(status) {
const statusMap = {
'0': '未通过',
'1': '已通过',
'9': '已送考',
'null': '未送考'
};
return statusMap[status] || status;
},
formatDate(timestamp) {
if (!timestamp) return '-'; //
const date = new Date(timestamp);
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0'); //
const day = String(date.getDate()).padStart(2, '0'); //
return `${year}-${month}-${day}`;
},
/** 表单重置 */
reset() {
this.formData = {
@ -324,9 +421,23 @@ export default {
trainTime: undefined,
financePass: undefined,
financeRemark: undefined,
cashierConfirm: undefined,
};
this.resetForm("formRef");
}
}
};
</script>
<style>
.text-danger {
color: red;
font-size: 18px;
font-weight: bold;
}
.text-success {
color: RGB(70, 166, 255);
font-size: 18px;
font-weight: bold;
}
</style>

View File

@ -90,7 +90,7 @@
<el-table-column label="考试分数" align="center" prop="examScore" />
<el-table-column label="考试时间" align="center" prop="examTime" width="180">
<template v-slot="scope">
<span>{{ parseTime(scope.row.examTime) }}</span>
<span>{{ parseTime(scope.row.examTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="累计训练时长" width="120" align="center" prop="trainTime"/>
@ -101,11 +101,11 @@
<span v-if="scope.row.financePass == 0">未通过</span>
</template>
</el-table-column>
<el-table-column label="财务审核备注" width="120" align="center" prop="financeRemark"/>
<el-table-column label="操作" width="120" align="center" class-name="small-padding fixed-width">
<el-table-column label="财务审核备注" width="180px" align="center" show-overflow-tooltip prop="financeRemark"/>
<el-table-column label="操作" width="120" align="center" class-name="small-padding fixed-width" v-if="showCashierColumn">
<template v-slot="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="openForm(scope.row.id,true)">查看</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="openForm(scope.row.id,false)">审核</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleCheck(scope.row)">审核</el-button>
<!-- <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">删除</el-button>-->
</template>
</el-table-column>
@ -130,7 +130,7 @@ export default {
data() {
return {
activeTab: 'all',
showPassedOnly: false,
showPassedOnly: true,
//
loading: true,
//
@ -162,8 +162,16 @@ export default {
},
created() {
this.queryParams.examStatus = '1';
this.getList();
},
computed: {
//
showCashierColumn() {
// return this.$store.getters.roles.includes('cn')
return ['kj', 'jxzjl'].some(role => this.$store.getters.roles.includes(role));
},
},
methods: {
/** 查询列表 */
async getList() {
@ -177,6 +185,21 @@ export default {
}
},
async handleCheck(row) {
if (row.financePass) {
try {
await this.$confirm('当前记录已审核通过,是否继续审核?', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning'
});
} catch (e) {
return; //
}
}
this.openForm(row.id, false); //
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
@ -185,8 +208,8 @@ export default {
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.showPassedOnly = false;
this.queryParams.examStatus = undefined;
this.showPassedOnly = true;
this.queryParams.examStatus = '1';
this.handleQuery();
},
/** 添加/修改操作 */

View File

@ -34,6 +34,11 @@
</span>
</template>
</el-table-column>
<el-table-column prop="sort" label="排序" width="100">
<template v-slot="scope">
<el-input v-model="scope.row.sort" @change="updateSort(scope.row)"></el-input>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template v-slot="scope">
@ -210,6 +215,13 @@ export default {
});
},
//
updateSort(data) {
updateBusiness(data).then(response => {
this.$modal.msgSuccess("修改成功");
this.getList();
});
},
//
cancel() {
this.open = false;

View File

@ -0,0 +1,251 @@
<template>
<!-- 对话框(添加 / 修改) -->
<el-drawer
title="选择用户"
size="60%"
:visible.sync="drawVisible"
@close="cancelForm"
>
<div style="padding: 0 10px;margin-bottom: 70px">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="用户名称" prop="username">
<el-input v-model="queryParams.username" placeholder="请输入用户名称" clearable style="width: 240px"
@keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="手机号码" prop="mobile">
<el-input v-model="queryParams.mobile" placeholder="请输入手机号码" clearable style="width: 240px"
@keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</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>
</el-form-item>
</el-form>
<el-table
v-loading="formLoading"
:data="list"
:stripe="true"
@select="selectRow"
@select-all="handleSelectAll">
<el-table-column
type="selection"
width="55">
</el-table-column>
<el-table-column label="用户编号" align="center" key="id" prop="id" v-if="columns[0].visible" />
<el-table-column label="用户名称" align="center" key="username" prop="username" v-if="columns[1].visible" :show-overflow-tooltip="true" />
<el-table-column label="用户昵称" align="center" key="nickname" prop="nickname" v-if="columns[2].visible" :show-overflow-tooltip="true" />
<el-table-column label="联系方式" align="center" key="mobile" prop="mobile" v-if="columns[4].visible" width="120" />
<el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160">
<template v-slot="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
</el-table>
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
</div>
<div style="position: absolute;bottom: 0;width: 100%;right: 0;padding: 5px 20px 0;z-index: 999;background: white;text-align: right">
<div class="demo-drawer__footer">
<el-button @click="cancelForm"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
</div>
</div>
</el-drawer>
<!-- 对话框(添加 / 修改) -->
</template>
<script>
import {
listUser
} from "@/api/system/user";
import {DICT_TYPE, getDictDatas} from "@/utils/dict";
import * as WorkerApi from '@/api/repair/repairworker';
import {getTenantId} from "@/utils/auth";
import {addUser, listSelectUser} from "@/views/inspection/staff/api/staff";
export default {
name: "ChooseCouponDraw",
components: {},
data() {
return {
//
//
drawVisible: false,
// 12
formLoading: false,
//
exportLoading: false,
//
showSearch: true,
//
formData: {},
//
total: 0,
//
list: [],
multipleSelection: [],
//
queryParams: {
pageNo: 1,
pageSize: 10,
username: undefined,
mobile: undefined,
status: undefined,
deptId: undefined,
createTime: [],
tenantId: getTenantId()
},
//
columns: [
{ key: 0, label: `用户编号`, visible: true },
{ key: 1, label: `用户名称`, visible: true },
{ key: 2, label: `用户昵称`, visible: true },
{ key: 3, label: `部门`, visible: true },
{ key: 4, label: `手机号码`, visible: true },
{ key: 5, label: `状态`, visible: true },
{ key: 6, label: `创建时间`, visible: true }
],
//
statusDictDatas: getDictDatas(DICT_TYPE.COMMON_STATUS),
sexDictDatas: getDictDatas(DICT_TYPE.SYSTEM_USER_SEX),
};
},
methods: {
/** 打开弹窗 */
async open(multipleSelection) {
this.drawVisible = true;
this.formLoading = true;
this.reset();
try {
const res = await listSelectUser(this.queryParams);
this.list = res.data.list;
this.total = res.data.total;
if (multipleSelection){
this.multipleSelection = JSON.parse(JSON.stringify(multipleSelection))
this.defaultChecked(multipleSelection)
}
} finally {
this.formLoading = false;
}
},
/**选中*/
selectRow(val, row) {
//
let selectBool = val.length && val.indexOf(row) !== -1
if (!selectBool) {
//
this.multipleSelection.forEach((item, i) => {
if (item.id == row.id) {
this.multipleSelection.splice(i, 1)
}
})
} else {
//
this.multipleSelection.push(row)
}
},
/**全选*/
handleSelectAll(val) {
if (val.length == this.list.length) { //
this.multipleSelection = this.multipleSelection.concat(val)
//
let obj = {}
let result = []
this.multipleSelection.forEach(item => {
if (!obj[item.id]) {
result.push(item)
obj[item.id] = true
}
})
this.multipleSelection = result
} else { //
this.list.forEach(item => {
this.multipleSelection.forEach((multItem, i) => {
if (item.id == multItem.id) {
this.multipleSelection.splice(i, 1)
}
})
})
}
},
/**设置默认选中*/
defaultChecked(multipleSelection) {
const that = this;
this.$nextTick(() => {
that.list.forEach((v, i) => {
multipleSelection.map(item => {
if (item.id === v.id) {
that.$refs.multipleTable.toggleRowSelection(v, true);
}
})
});
});
},
cancelForm() {
this.drawVisible = false
},
/** 查询列表 */
async getList() {
try {
this.formLoading = true
const res = await listSelectUser(this.queryParams);
this.list = res.data.list;
this.total = res.data.total;
// this.defaultChecked(this.multipleSelection)
} finally {
this.formLoading = false
}
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/**重置参数*/
reset() {
this.queryParams = {
pageNo: 1,
pageSize: 10,
name: null,
type: null,
carModel: null,
outRule: null,
tenantId: getTenantId()
}
},
/** 提交按钮 */
async submitForm() {
this.drawVisible = false
console.log('提交的数据',this.multipleSelection)
const data = {
adminUsers : this.multipleSelection
}
await addUser(data);
this.$modal.msgSuccess("保存成功");
this.$emit('success', this.multipleSelection)
},
}
};
</script>

View File

@ -168,3 +168,12 @@ export function importTemplate() {
responseType: 'blob'
})
}
// 查询用户列表
export function listSelectUser(query) {
return request({
url: '/inspectionStaff/listSelectUser',
method: 'get',
params: query
})
}

View File

@ -45,14 +45,18 @@
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" icon="el-icon-upload2" size="mini" @click="handleImport">导入
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="chooseUser">选择员工
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport"
:loading="exportLoading">导出
<el-button type="info" icon="el-icon-upload2" size="mini" @click="handleImport">导入
</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport"-->
<!-- :loading="exportLoading">导出-->
<!-- </el-button>-->
<!-- </el-col>-->
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
</el-row>
@ -361,7 +365,7 @@
<el-button @click="upload.open = false"> </el-button>
</div>
</el-dialog>
<ChooseUserDraw ref="chooseUserRef" @success="getList"></ChooseUserDraw>
</div>
</template>
@ -380,6 +384,7 @@ import {
} from "@/views/inspection/staff/api/staff";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import ChooseUserDraw from "@/views/inspection/staff/ChooseUserDraw";
import {listSimpleDepts} from "@/api/system/dept";
import {listSimplePosts} from "@/api/system/post";
@ -392,7 +397,7 @@ import {getBaseHeader} from "@/utils/request";
export default {
name: "SystemUser",
components: {Treeselect},
components: {Treeselect, ChooseUserDraw},
data() {
return {
failList: [],
@ -479,9 +484,9 @@ export default {
{key: 0, label: `员工编号`, visible: true},
{key: 1, label: `员工名称`, visible: true},
{key: 2, label: `员工昵称`, visible: true},
{key: 3, label: `部门`, visible: true},
{key: 3, label: `部门`, visible: false},
{key: 4, label: `手机号码`, visible: true},
{key: 5, label: `状态`, visible: true},
{key: 5, label: `状态`, visible: false},
{key: 6, label: `创建时间`, visible: true}
],
//
@ -567,6 +572,12 @@ export default {
}
);
},
/**
* 选择用户
**/
chooseUser(){
this.$refs["chooseUserRef"].open();
},
addFolder() {
if (!this.form.folderId) {
addFolder(this.form.id).then(response => {
@ -821,6 +832,7 @@ export default {
this.failList = []
this.isFail = false
console.log('执行')
this.getList()
},
handleRemove(file) {
console.log(file);

View File

@ -157,8 +157,8 @@ export default {
},
data() {
return {
// tenantCode:"lighting",
tenantCode:"lanan",
tenantCode:"lighting",
// tenantCode:"lanan",
codeUrl: "",
showTenantList:false,
tenant:undefined,
@ -175,6 +175,7 @@ export default {
mobileCode: "",
rememberMe: false,
tenantName: "租户管理员",
tenantId: undefined,
},
tenantList:[],
scene: 21,
@ -277,6 +278,7 @@ export default {
}
console.log('当前租户',this.tenant)
setTenantId(this.tenant)
this.loginForm.tenantId = this.tenant
this.handleLogin()
},
handleLogin(captchaParams) {
@ -315,6 +317,7 @@ export default {
});
},
async getTenantList(){
console.log('执行')
await getUserTenant(this.loginForm.username).then(res => {
console.log('当前登陆人信息', res)
// setTenantId(res.data.tenant_id)

View File

@ -29,8 +29,6 @@ export function getBankAccountList(){
return request({
url: '/partnerOwn/partner/getBankAccountList',
method: 'get',
})
}
//制证
@ -160,3 +158,23 @@ export function getWeorkNodesById(params) {
params: params
})
}
export function updateOrderInfo(data) {
return request({
url: '/inspection/orderInfo/cashier',
method: 'put',
data: data
})
}
export function getOrderInfo(id) {
return request({
url: '/inspection/orderInfo/'+id,
method: 'get'
})
}
export function getCustomerSource(params) {
return request({
url: '/channel/tree',
method: 'get',
params:params
})
}

View File

@ -0,0 +1,456 @@
<template>
<div class="app-container">
<!-- 对话框(添加 / 修改) -->
<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-collapse v-model="activeNames">
<el-collapse-item title="收款信息" name="1">
<el-row>
<el-col :span="24">
<el-form-item label="收款金额" prop="cashierConfirm">
<el-input disabled v-model="orderInfo.payMoney / 100" placeholder="暂未结算"></el-input>
</el-form-item>
<el-form-item label="收费备注" prop="cashierConfirm">
<el-input disabled v-model="orderInfo.remark" placeholder="暂无备注"></el-input>
</el-form-item>
<el-form-item label="查看附件" prop="cashierConfirm">
<el-button @click="handleViewFiles(orderInfo.files)">查看附件</el-button>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item title="出纳确认" name="2">
<el-row>
<el-col :span="24">
<el-form-item label="是否到账" prop="cashierConfirm">
<el-select :disabled="type == 'accounting'" v-model="formData.cashierConfirm" placeholder="待确认">
<el-option
v-for="item in cashierConfirmOption"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="审批意见" prop="cashierConfirmRemark">
<el-input :disabled="type == 'accounting'" type="textarea" v-model="formData.cashierConfirmRemark" placeholder="请输入出纳审批意见"/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item title="会计确认" v-if="type == 'accounting'" name="3">
<el-row>
<el-col :span="24">
<el-form-item label="是否到账" prop="cashierConfirm">
<el-select v-model="formData.accountingConfirm" placeholder="待确认">
<el-option
v-for="item in cashierConfirmOption"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="审批意见" prop="cashierConfirmRemark">
<el-input type="textarea" v-model="formData.accountingConfirmRemark" placeholder="请输入出纳审批意见"/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
</el-collapse>
</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>
<el-dialog :title="'文件预览(' + currentFileName + ''" :visible.sync="fileDialogVisible" width="70%" append-to-body>
<div class="preview-container">
<!-- 左侧预览区域 -->
<!-- 音频文件 -->
<audio v-if="isAudioType" class="preview-iframe" controls>
<source :src="currentFileUrl"/>
</audio>
<!-- Office文档/文本/PDF -->
<iframe
v-else-if="!isImageType && currentFileType !== 'txt' && !isAudioType && currentFileType !== 'pdf'"
:src="officePreviewUrl"
frameborder="0"
class="preview-iframe"
></iframe>
<!-- 图片预览 -->
<image-preview
v-else-if="isImageType"
class="preview-iframe"
:src="currentFileUrl"
></image-preview>
<!-- PDF/文本 -->
<iframe
v-else-if="currentFileType === 'txt' || currentFileType === 'pdf'"
:src="currentFileUrl"
frameborder="0"
class="preview-iframe"
></iframe>
<!-- 右侧文件列表 -->
<div class="file-list" v-if="currentFileList.length > 1">
<el-table
:data="currentFileList"
height="100%"
@row-click="handleFileClick"
:row-class-name="getRowClassName">
<el-table-column
prop="fileName"
label="文件列表"
min-width="180">
<template #default="{ row }">
<div class="file-item">
<i :class="getFileIcon(row)"></i>
{{ getFileName(row) }}
</div>
</template>
</el-table-column>
</el-table>
</div>
</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'
import {getOrderInfo, updateOrderInfo} from "@/views/partner/api/workOrder";
export default {
name: 'InspectionCashierConfirmForm',
components: {
SchemeForm
},
data() {
return {
//
dialogTitle: '',
//
dialogVisible: false,
fileDialogVisible: false,
// 12
formLoading: false,
baseUrl: process.env.VUE_APP_BASE_API,
currentFileUrl: '',
currentFileName: '',
currentFileType: '',
officePreviewUrl: '',
//
formData: {
id: undefined,
cashierConfirm: undefined,
cashierConfirmRemark: undefined,
},
ifEndRadio: [
{
label: '是',
value: true
},
{
label: '否',
value: false
}
],
isSignRadio: [
{
label: '是',
value: 1
},
{
label: '否',
value: 0
}
],
payChannelList: [
{
label: '线下支付',
value: '2'
},
{
label: '微信支付',
value: '1'
}
],
ifAgreeList: [
{
label: '未确认',
value: '0'
},
{
label: '已同意',
value: '1'
},
{
label: '未同意',
value: '2'
},
{
label: '非代报名订单',
value: null
}
],
cashierConfirmOption: [
{
value: '0',
label: '未到账'
},
{
value: '1',
label: '已到账'
},
],
//
formRules: {},
schemeList: [],
currentFileList: [],
activeNames: ['2'],
orderInfo: {},
type: undefined
}
},
computed: {
isImageType() {
return /\.(jpg|jpeg|png|gif|webp|bmp)$/i.test(this.currentFileUrl);
},
isAudioType() {
const audioExtensions = ['mp3', 'wav', 'ogg', 'aac', 'm4a', 'flac'];
return audioExtensions.some(ext => this.currentFileUrl.endsWith(ext));
}
},
methods: {
/** 打开弹窗 */
async open(data) {
let id = data.id
this.type = data.type
console.log('id', data.id)
this.dialogVisible = true
this.reset()
//
this.formData.id = id
if (id) {
this.formLoading = true
try {
//
const res = await getOrderInfo(id)
this.orderInfo = res.data
// 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()
//
this.formLoading = true
try {
const data = this.formData
//
if (data.id) {
data.type = this.type
await updateOrderInfo(data)
this.$modal.msgSuccess('修改成功')
this.dialogVisible = false
this.$emit('success')
return
}
} finally {
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('获取提成方案失败');
}
},
handleViewFiles(filePath) {
if (!filePath) {
this.$message.warning('没有附件');
return;
}
//
this.currentFileList = filePath.split(',').filter(item => item.trim());
this.fileDialogVisible = true;
//
if (this.currentFileList.length > 0) {
this.previewFile(this.currentFileList[0]);
}
},
// URLAPI
getFullFileUrl(filePath) {
if (!filePath) return '';
// URLbase64
if (filePath.startsWith('http') || filePath.startsWith('data:')) {
return filePath;
}
// API
const baseUrl = 'http://122.51.230.86:9000/' || '';
return `${baseUrl.replace(/\/$/, '')}/${filePath.replace(/^\//, '')}`;
},
//
getFileName(filePath) {
return filePath.split('/').pop() || '未命名文件';
},
//
isImage(filePath) {
return /\.(jpg|jpeg|png|gif|webp|bmp)$/i.test(filePath);
},
//
previewFile(filePath) {
this.currentFileUrl = this.getFullFileUrl(filePath);
this.currentFileName = this.getFileName(filePath);
this.currentFileType = this.getFileExtension(filePath);
console.log('filePath', this.currentFileUrl)
// OfficeURL
this.officePreviewUrl = 'https://view.officeapps.live.com/op/view.aspx?src=' +
encodeURIComponent(this.currentFileUrl);
},
//
getFileExtension(filePath) {
return filePath.split('.').pop().toLowerCase();
},
async getSchemeListByCourseId(courseId) {
await SchoolCourseOrderApi.getSchemeListByCourseId(courseId)
.then(res => {
this.schemeList = res.data
})
},
//
getFileIcon(filePath) {
return this.isImage(filePath) ? 'el-icon-picture' : 'el-icon-document';
},
//
handleFileClick(row) {
this.previewFile(row);
},
//
getRowClassName({row}) {
return row === this.currentFileUrl ? 'highlight-row' : '';
},
/** 表单重置 */
reset() {
this.formData = {
orderNo: undefined,
userName: undefined,
userPhone: undefined,
userNo: undefined,
userSex: undefined,
courseId: undefined,
courseName: undefined,
coachUserId: undefined,
coachUserName: undefined,
reserveMoney: undefined,
courseType: undefined,
ifEnd: undefined,
endReason: undefined,
endTime: undefined,
paymentStatus: undefined,
isSign: undefined,
restMoney: undefined,
payType: undefined,
passTime: undefined,
gradTime: undefined,
schemeId: undefined,
}
this.resetForm('formRef')
}
}
}
</script>
<style>
.preview-container {
display: flex;
height: 80vh;
}
.image-preview img {
max-height: 500px;
max-width: 100%;
border: 1px solid #eee;
}
.preview-iframe {
flex: 6;
width: 100%;
height: 100%;
margin-right: 10px;
}
.file-list {
flex: 1;
border-left: 1px solid #ebeef5;
padding-left: 10px;
}
.file-item {
cursor: pointer;
padding: 8px;
transition: background 0.3s;
}
.file-item:hover {
background: #f5f7fa;
}
/* 调整表格高度 */
:deep(.el-table) {
height: calc(100% - 2px) !important;
}
/* 隐藏表格头 */
:deep(.el-table__header-wrapper) {
display: none;
}
</style>

View File

@ -2,34 +2,35 @@
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="车牌号" prop="carNum">
<el-input v-model="queryParams.carNum" placeholder="请输入车牌号" clearable @keyup.enter.native="handleQuery" />
<el-input v-model="queryParams.carModelOrCarYear" placeholder="请输入车牌号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="检测类型" prop="goodsTitle">
<el-input v-model="queryParams.goodsTitle" placeholder="请输入检测类型" clearable @keyup.enter.native="handleQuery" />
<el-select v-model="queryParams.skuName" placeholder="请选择客户来源" clearable>
<el-option v-for="dict in skuNames" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="业务渠道" prop="businessChannel">
<el-select v-model="queryParams.businessChannel" filterable clearable placeholder="请选择客户来源">
<el-option v-for="dict in businessList" :key="dict.id" :label="dict.name" :value="dict.name"></el-option>
</el-select>
</el-form-item>
<el-form-item label="客户来源" prop="customerSource">
<el-select v-model="queryParams.customerSource" placeholder="请选择客户来源">
<el-option v-for="dict in customerData" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
<el-select v-model="queryParams.customerSource" filterable clearable placeholder="请选择客户来源">
<el-option v-for="dict in customerData" :key="dict.id" :label="dict.name" :value="dict.name"></el-option>
</el-select>
</el-form-item>
<el-form-item label="支付方式" prop="payType">
<template slot-scope="scope">
<el-select v-model="queryParams.payType" placeholder="支付方式" clearable style="width: 240px">
<el-option v-for="dict in dict.type.pay_type" :key="dict.value" :label="dict.label" :value="dict.value" />
<el-option v-for="dict in dict.type.pay_type" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</template>
</el-form-item>
<el-form-item label="检测时间" prop="startTime">
<el-date-picker v-model="queryParams.jcTime" type="daterange" value-format="yyyy-MM-dd" range-separator=""
start-placeholder="开始日期" end-placeholder="结束日期">
start-placeholder="开始日期" end-placeholder="结束日期">
</el-date-picker>
</el-form-item>
<el-form-item label="角色" prop="status">
<el-select v-model="queryParams.roleId" placeholder="角色" clearable style="width: 240px">
<el-option v-for="dict in dict.type.inspection_use_role" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</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>
@ -57,8 +58,12 @@
<el-table v-loading="loading" :data="infoList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="车牌号" align="center" prop="carNum" />
<el-table-column type="selection" width="55" align="center"/>
<el-table-column label="车牌号" align="center">
<template slot-scope="scope">
{{ scope.row.carNum || scope.row.certificateNum || '----' }}
</template>
</el-table-column>
<el-table-column label="客户来源" align="center" prop="customerSource">
</el-table-column>
<el-table-column label="检测结果" align="center" prop="isPass">
@ -68,8 +73,8 @@
<span v-else>进行中</span>
</template>
</el-table-column>
<el-table-column label="车辆类型" align="center" prop="goodsTitle" />
<el-table-column label="检测项目" align="center" prop="skuName" />
<el-table-column label="车辆类型" align="center" prop="goodsTitle"/>
<el-table-column label="检测项目" align="center" prop="skuName"/>
<el-table-column label="公示应收价格" align="center" prop="realPayMoney" width="100">
<template slot-scope="scope">
<span>{{ scope.row.goodsPrice / 100 }}</span>
@ -80,44 +85,108 @@
<span>{{ scope.row.realPayMoney / 100 }}</span>
</template>
</el-table-column>
<el-table-column label="收款时间" align="center" prop="payTime" />
<el-table-column label="收款时间" align="center" prop="payTime"/>
<!-- <el-table-column label="客户" align="center" prop="buyName" />-->
<el-table-column label="客户手机号" align="center" prop="buyPhone" />
<el-table-column label="客户手机号" align="center" prop="buyPhone"/>
<!-- <el-table-column label="接待员" align="center" prop="workerName"/>-->
<el-table-column label="接待员手机号" align="center" prop="workerPhone" />
<el-table-column label="接待员手机号" align="center" prop="workerPhone"/>
<el-table-column label="支付方式" align="center" prop="payType">
<template slot-scope="scope">
<dict-tag :options="dict.type.pay_type" :value="scope.row.payType" />
<dict-tag :options="dict.type.pay_type" :value="scope.row.payType"/>
</template>
</el-table-column>
<el-table-column label="开始时间" align="center" prop="startTime" />
<el-table-column label="结束时间" align="center" prop="endTime" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="开始时间" align="center" prop="startTime"/>
<el-table-column label="结束时间" align="center" prop="endTime"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="watchWork(scope.row)">打印
</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="xinWork(scope.row)">结算
<el-button size="mini" type="text" icon="el-icon-edit" @click="xinWork(scope.row)">
结算
</el-button>
<el-button size="mini" type="text" icon="el-icon-edit"
v-if="scope.row.status && scope.row.status == 1 && scope.row.isPass && scope.row.isPass == 1 && scope.row.makeCert != 1"
@click="zhizheng(scope.row)">制证
v-if="scope.row.status && scope.row.status == 1 && scope.row.isPass && scope.row.isPass == 1 && scope.row.makeCert != 1"
@click="zhizheng(scope.row)">制证
</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="detail(scope.row)">详情
</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" v-if="scope.row.status && scope.row.status == 0"
@click="jieshu(scope.row)">完工
</el-button>
<!-- <el-button size="mini" type="text" icon="el-icon-edit" v-if="scope.row.status && scope.row.status == 0"-->
<!-- @click="jieshu(scope.row)">完工-->
<!-- </el-button>-->
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)">修改
</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleDelete(scope.row)">删除
</el-button>
</template>
</el-table-column>
<el-table-column label="出纳备注" align="center" prop="cashierConfirmRemark"/>
<el-table-column v-if="showCashierColumn" label="出纳确认" align="center" class-name="small-padding fixed-width">
<template v-slot="scope">
<el-button
size="mini"
type="text"
v-if="!scope.row.realPayMoney"
disabled
style="color: red"
>
暂未结算
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-plus"
@click="openCashierConfirm(scope.row.inspectionOrderId, 'cashier')"
v-if="scope.row.realPayMoney && scope.row.cashierConfirm !== '1'"
>
确认收款
</el-button>
<el-button
size="mini"
type="text"
style="color: RGB(192, 196, 204)"
v-else-if="scope.row.cashierConfirm == 1 || scope.row.cashierConfirm == '1'"
:disabled="true"
>
已确认
</el-button>
</template>
</el-table-column>
<el-table-column v-if="showAccountingColumn" label="会计确认" align="center" class-name="small-padding fixed-width">
<template v-slot="scope">
<el-button
size="mini"
type="text"
v-if="!scope.row.cashierConfirm || scope.row.cashierConfirm != 1"
style="color: red"
disabled
>
出纳未确认
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-plus"
@click="openCashierConfirm(scope.row.inspectionOrderId, 'accounting')"
v-if="scope.row.realPayMoney && scope.row.cashierConfirm == '1' && scope.row.accountingConfirm !== '1'"
>
确认收款
</el-button>
<el-button
size="mini"
type="text"
style="color: RGB(192, 196, 204)"
v-else-if="scope.row.accountingConfirm == 1 || scope.row.accountingConfirm == '1'"
:disabled="true"
>
已确认
</el-button>
</template>
</el-table-column>
<el-table-column label="会计备注" align="center" prop="accountingConfirmRemark"/>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
@pagination="getList" />
@pagination="getList"/>
<!-- 添加或修改道路救援模块对话框 -->
<el-dialog :title="title" :visible.sync="open" width="900px" append-to-body>
@ -162,7 +231,7 @@
</el-form-item>
<el-form-item label="优惠金额">
<el-input-number :min="0" @input="jisuan" :max="goodsPrice / 100" type="text"
v-model="reduceMoney"></el-input-number>
v-model="reduceMoney"></el-input-number>
</el-form-item>
<el-form-item label="实付金额">
<el-input-number type="text" v-model="payMoney"></el-input-number>
@ -171,7 +240,7 @@
<!-- <el-input type="text" v-model="receivablesAccount"></el-input>-->
<el-select v-model="payType" placeholder="请选择付款方式">
<el-option v-for="dict in dict.type.pay_type" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
:value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="收款账号">
@ -182,6 +251,9 @@
<el-form-item label="备注">
<el-input type="text" v-model="payRemark"></el-input>
</el-form-item>
<el-form-item label="附件">
<file-upload v-model="fileUrls"></file-upload>
</el-form-item>
<el-button type="primary" @click="tijiao()"> </el-button>
</el-form>
</el-dialog>
@ -228,27 +300,27 @@
<el-select v-model="form.carNature" placeholder="请选择使用性质">
<el-option v-for="dict in dict.type.car_use_nature" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
:value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="请选择客户来源">
<el-select v-model="form.customerSource" placeholder="请选择客户来源">
<el-select disabled v-model="form.customerSource" placeholder="请选择客户来源">
<el-option v-for="dict in customerData" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
:value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="代办人手机号">
<el-input v-model="form.otherPhone" placeholder="请选择代办人手机号" />
<el-input v-model="form.otherPhone" placeholder="请选择代办人手机号"/>
</el-form-item>
<el-form-item label="选择商品">
<el-cascader v-model="form.skuId" :options="options" @change="handleChange"
:disabled="!isInsert"></el-cascader>
:disabled="!isInsert"></el-cascader>
</el-form-item>
<el-form-item label="新旧车">
<el-select v-model="form.carStatus" placeholder="请选择新旧车">
<el-option v-for="dict in dict.type.car_status" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
:value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="引车员">
@ -267,7 +339,7 @@
<div class="available-projects-title">可选检测项目</div>
<div class="available-projects-container">
<div class="project-button" :class="{ 'selected': selectInspectionProjectIds.includes(item.id) }"
v-for="item in projectList" :key="item.id" @click="clickProject(item)">
v-for="item in projectList" :key="item.id" @click="clickProject(item)">
{{ item.projectName }}
</div>
</div>
@ -289,19 +361,15 @@
</div>
</div>
</div>
<!-- </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>
<InspectionCashierConfirmForm ref="cashierConfirmRef" @success="getList"/>
</div>
</template>
@ -324,13 +392,15 @@ import {
delWorkInfo,
detail,
getINspectionProject,
getWeorkNodesById
getWeorkNodesById, getCustomerSource
} from "./api/workOrder";
import { getCustomerSource } from "./api/index";
import print from 'vue-print-nb'
import moment from 'moment';
import request from "@/utils/request";
import DictTag from "@/components/DictTagOld/index.vue";
import CashierConfirmForm from "@/views/drivingSchool/DriveSchoolPay/form/cashierConfirmForm.vue";
import InspectionCashierConfirmForm from "@/views/partner/form/InspectionCashierConfirmForm.vue";
import FileUpload from "@/components/FileUpload/index.vue";
export default {
name: "Info",
@ -338,7 +408,7 @@ export default {
directives: {
print
},
components: { DictTag },
components: {InspectionCashierConfirmForm, CashierConfirmForm, DictTag, FileUpload},
data() {
return {
moneyData: {
@ -346,6 +416,28 @@ export default {
goodsPriceSum: 0
},
projectList: [],
skuNames: [
{
label: "年审",
value: "年审",
},
{
label: "上户",
value: "上户",
},
{
label: "非定检",
value: "非定检",
},
{
label: "双燃料",
value: "双燃料",
},
{
label: "其他检测",
value: "其他检测",
},
],
isPass: 1,
isRetrial: '',
remark: '',
@ -370,6 +462,7 @@ export default {
payType: '',
receivablesAccount: '',
payRemark: '',
fileUrls: '',
inspectionId: '',
size: '',
workId: '',
@ -387,6 +480,7 @@ export default {
//
showSearch: true,
customerData: [],
businessList: [],
BankAccountList: [],
//
total: 0,
@ -420,6 +514,7 @@ export default {
destinationInfo: null,
rescueStatus: null,
rescueAmount: null,
businessChannel: null,
},
//
form: {},
@ -427,34 +522,34 @@ export default {
//
rules: {
connectionName: [
{ required: true, message: "联系人名称不能为空", trigger: "blur" }
{required: true, message: "联系人名称不能为空", trigger: "blur"}
],
connectionPhone: [
{ required: true, message: "联系人手机号不能为空", trigger: "blur" }
{required: true, message: "联系人手机号不能为空", trigger: "blur"}
],
licenseNum: [
{ required: true, message: "车牌号不能为空", trigger: "blur" }
{required: true, message: "车牌号不能为空", trigger: "blur"}
],
isAppointment: [
{ required: true, message: "是否为预约单不能为空", trigger: "change" }
{required: true, message: "是否为预约单不能为空", trigger: "change"}
],
rescueType: [
{ required: true, message: "救援类型 1拖车2送油3搭电4换台5扣车不能为空", trigger: "change" }
{required: true, message: "救援类型 1拖车2送油3搭电4换台5扣车不能为空", trigger: "change"}
],
carType: [
{ required: true, message: "车辆类型 大中小不能为空", trigger: "change" }
{required: true, message: "车辆类型 大中小不能为空", trigger: "change"}
],
rescuePosition: [
{ required: true, message: "救援地点 详细描述不能为空", trigger: "blur" }
{required: true, message: "救援地点 详细描述不能为空", trigger: "blur"}
],
feeType: [
{ required: true, message: "收费类型不能为空", trigger: "change" }
{required: true, message: "收费类型不能为空", trigger: "change"}
],
}
};
},
created() {
this.dict = { type: {} }
this.dict = {type: {}}
for (let i = 0; i < this.$options.dicts.length; i++) {
request({
url: '/rescue/dict/data/type/' + this.$options.dicts[i],
@ -466,6 +561,22 @@ export default {
// this.getpid()
this.getList();
this.customerSource();
this.business();
},
computed: {
//
showCashierColumn() {
// return this.$store.getters.roles.includes('cn')
return ['jccn', 'tenant_admin'].some(role => this.$store.getters.roles.includes(role));
},
//
showAccountingColumn() {
// return this.$store.getters.roles.includes('cn')
return ['jckj', 'tenant_admin'].some(role => this.$store.getters.roles.includes(role));
},
showCashierColumnTwo() {
return this.$store.getters.roles.includes('jccn')
}
},
methods: {
jieshutij() {
@ -482,6 +593,14 @@ export default {
this.getList()
})
},
/** 出纳确认*/
openCashierConfirm(data,type) {
const dataNew = {
id: data,
type:type
}
this.$refs["cashierConfirmRef"].open(dataNew);
},
clickProject(data) {
let idx = this.selectInspectionProjectIds.indexOf(data.id)
if (idx > -1) {
@ -529,6 +648,10 @@ export default {
this.payMoney = (this.goodsPrice / 100) - this.reduceMoney
},
tijiao() {
console.log(this.fileUrls)
if (Array.isArray(this.fileUrls)) {
this.fileUrls = '';
}
let data = {
reduceMoney: this.reduceMoney ? this.reduceMoney * 100 : 0,
payMoney: this.payMoney * 100,
@ -536,6 +659,7 @@ export default {
receivablesAccount: this.receivablesAccount,
payRemark: this.payRemark,
inspectionId: this.inspectionId,
files: this.fileUrls,
}
offlineCharging(data).then(res => {
this.openxin = false
@ -554,10 +678,21 @@ export default {
})
},
customerSource() {
getCustomerSource().then(res => {
const data = {
type:1
}
getCustomerSource(data).then(res => {
this.customerData = res.data
})
},
business() {
const data = {
type:0
}
getCustomerSource(data).then(res => {
this.businessList = res.data
})
},
watchWork(row) {
workOrderView(row.id).then(res => {
this.htmlStr = res.data
@ -576,6 +711,10 @@ export default {
inspectionDetail(row.id).then(res => {
this.offline = res.data
this.goodsPrice = res.data.goodsPrice
this.payMoney = res.data.payMoney ? res.data.payMoney / 100 : null
this.payType = res.data.payType ? res.data.payType : null
this.fileUrls = res.data.files ? res.data.files : []
this.payRemark = res.data.payRemark ? res.data.payRemark : null
console.log(res)
})
this.openxin = true
@ -783,7 +922,7 @@ export default {
},
/** 提交按钮 */
submitForm() {
console.log('事件',this.form.carRegisterDate);
console.log('事件', this.form.carRegisterDate);
if (this.form.id) {
this.updateForm()
} else {
@ -903,7 +1042,10 @@ export default {
font-weight: bold;
}
* 对话框整体样式 * / .custom-dialog {
* 对话框整体样式 *
/
.custom-dialog {
border-radius: 8px;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
}

View File

@ -246,6 +246,7 @@ import {DICT_TYPE, getDictDatas} from "@/utils/dict";
import {assignUserRole, listUserRoles} from "@/api/system/permission";
import {listSimpleRoles} from "@/api/system/role";
import {getBaseHeader} from "@/utils/request";
import {getTenantId} from "@/utils/auth";
export default {
name: "SystemUser",
@ -307,7 +308,8 @@ export default {
mobile: undefined,
status: undefined,
deptId: undefined,
createTime: []
createTime: [],
tenantId: getTenantId()
},
//
columns: [
@ -457,7 +459,8 @@ export default {
status: "0",
remark: undefined,
postIds: [],
roleIds: []
roleIds: [],
tenantId: getTenantId()
};
this.resetForm("form");
},
@ -527,6 +530,8 @@ export default {
},
/** 提交按钮 */
submitForm: function() {
this.form.tenantId = getTenantId();
console.log('当前租户', getTenantId())
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id !== undefined) {