This commit is contained in:
Lx 2025-05-27 11:50:28 +08:00
parent a43b0f904e
commit 774246bdcc
2 changed files with 331 additions and 0 deletions

View File

@ -68,3 +68,17 @@ export function fastCreateSchoolCourseOrder(data) {
data: data
})
}
export function getContractDetail(userId) {
return request({
url: '/system/driveSchool/contract/getContractByUserId?userId=' + userId,
method: 'get'
})
}
export function getStudentDetail(userId) {
return request({
url: '/base/dl-drive-school-student/getByUserId?id=' + userId,
method: 'get'
})
}

View File

@ -70,6 +70,12 @@
<dict-tag :type="DICT_TYPE.DRIVE_SCHOOL_PAY_TYPE" :value="scope.row.payType"/>
</template>
</el-table-column>
<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="viewStudentInfo(scope.row)">学员信息</el-button>
<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">
<template v-slot="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="openForm(scope.row.id)">修改</el-button>
@ -80,6 +86,251 @@
</template>
</el-table-column>
</el-table>
<!-- <el-dialog title="合同信息" :visible.sync="viewFlag" width="65%" append-to-body>
<div
style="box-sizing: border-box; padding: 15px; overflow: hidden"
v-html="content"
></div>
<div style="text-align: right;" v-if="userUrl">
<el-image
:src="baseImageUrl + userUrl"
fit="cover"
:preview-src-list="[baseImageUrl + userUrl]"
lazy
alt="身份证照片"
/>
</div>
</el-dialog>-->
<el-dialog
title="合同信息"
:visible.sync="viewFlag"
width="65%"
append-to-body
v-if="hasContract"
>
<div style="box-sizing: border-box; padding: 15px; overflow: hidden" v-html="content"></div>
<div style="text-align: right; margin-top: 15px;" v-if="userUrl">
<el-image
:src="baseImageUrl + userUrl"
fit="cover"
:preview-src-list="[baseImageUrl + userUrl]"
lazy
alt="身份证照片"
/>
</div>
</el-dialog>
<!-- 无合同信息的提示弹窗 -->
<el-dialog
title="提示"
:visible.sync="viewFlag"
width="300px"
append-to-body
v-else
>
<div style="text-align: center; padding: 20px 0; color: #999;">
暂无合同信息
</div>
</el-dialog>
<el-dialog :title="studentDialog.title" :visible.sync="studentDialog.visible" width="45%" v-dialogDrag append-to-body>
<el-form ref="formRef" :model="studentDialog.studentInfo" v-loading="studentDialog.loading" label-width="100px">
<el-form-item label="头像" prop="avatar">
<el-image
v-if="studentDialog.studentInfo.avatar"
:src=" baseImageUrl + studentDialog.studentInfo.avatar"
style="width: 100px; height: 100px; border-radius: 50%;"
fit="cover"
/>
<el-avatar v-else icon="el-icon-user-solid" :size="100" />
</el-form-item>
<el-row>
<el-col :span="12">
<el-form-item label="姓名" prop="name">
<el-input v-model="studentDialog.studentInfo.name" placeholder="请输入姓名" :disabled="true"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="年龄" prop="age">
<el-input v-model="studentDialog.studentInfo.age" placeholder="请输入年龄" :disabled="true"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="性别" prop="sex">
<el-radio-group v-model="studentDialog.studentInfo.sex" 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-col>
<el-col :span="12">
<el-form-item label="联系电话" prop="phone">
<el-input v-model="studentDialog.studentInfo.phone" placeholder="请输入联系电话" :disabled="true"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="身份证号" prop="idCard">
<el-input v-model="studentDialog.studentInfo.idCard" placeholder="请输入身份证号" :disabled="true"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工作单位" prop="workName">
<el-input v-model="studentDialog.studentInfo.workName" placeholder="请输入工作单位" :disabled="true"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="户籍地址" prop="registAddress">
<el-input v-model="studentDialog.studentInfo.registAddress" placeholder="请输入户籍地址" :disabled="true"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="家庭住址" prop="address">
<el-input v-model="studentDialog.studentInfo.address" placeholder="请输入家庭住址" :disabled="true"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input type="textarea" v-model="studentDialog.studentInfo.remark" placeholder="请输入备注" :disabled="true"/>
</el-form-item>
</el-col>
</el-row>
<!-- <el-form-item label="证件照" prop="idPhoto">
<div style="display: flex; flex-wrap: wrap; gap: 10px;">
<el-image
v-for="(photo, index) in getPhotoList(studentDialog.studentInfo.idPhoto)"
:key="index"
:src="baseImageUrl + photo"
style="width: 200px; height: 150px;"
:preview-src-list="getPhotoPreviewList(studentDialog.studentInfo.idPhoto)"
fit="contain"
/>
</div>
</el-form-item>
<el-form-item label="生活照" prop="lifePhoto">
<div style="display: flex; flex-wrap: wrap; gap: 10px;">
<el-image
v-for="(photo, index) in getPhotoList(studentDialog.studentInfo.lifePhoto)"
:key="'life-'+index"
:src="baseImageUrl + photo"
style="width: 200px; height: 150px;"
:preview-src-list="getPhotoPreviewList(studentDialog.studentInfo.lifePhoto)"
fit="contain"
/>
</div>
</el-form-item>
<el-form-item label="其他照片" prop="otherPhoto">
<div style="display: flex; flex-wrap: wrap; gap: 10px;">
<el-image
v-for="(photo, index) in getPhotoList(studentDialog.studentInfo.otherPhoto)"
:key="'other-'+index"
:src="baseImageUrl + photo"
style="width: 200px; height: 150px;"
:preview-src-list="getPhotoPreviewList(studentDialog.studentInfo.otherPhoto)"
fit="contain"
/>
</div>
</el-form-item>-->
<!-- <el-form-item label="体检报告" prop="examinationReport">
<div style="display: flex; flex-wrap: wrap; gap: 10px;">
<el-image
v-for="(photo, index) in getPhotoList(studentDialog.studentInfo.examinationReport)"
:key="'exam-'+index"
:src="baseImageUrl + photo"
style="width: 200px; height: 150px;"
:preview-src-list="getPhotoPreviewList(studentDialog.studentInfo.examinationReport)"
fit="contain"
/>
</div>
</el-form-item>-->
<el-form-item label="证件照" prop="idPhoto">
<div style="display: flex; flex-wrap: wrap; gap: 10px;">
<template v-if="getPhotoList(studentDialog.studentInfo.idPhoto).length > 0">
<el-image
v-for="(photo, index) in getPhotoList(studentDialog.studentInfo.idPhoto)"
:key="'id-'+index"
:src="baseImageUrl + photo"
style="width: 200px; height: 150px;"
:preview-src-list="getPhotoPreviewList(studentDialog.studentInfo.idPhoto)"
fit="contain"
/>
</template>
<template v-else>
<div style="color: #999;">暂无图片</div>
</template>
</div>
</el-form-item>
<el-form-item label="生活照" prop="lifePhoto">
<div style="display: flex; flex-wrap: wrap; gap: 10px;">
<template v-if="getPhotoList(studentDialog.studentInfo.lifePhoto).length > 0">
<el-image
v-for="(photo, index) in getPhotoList(studentDialog.studentInfo.lifePhoto)"
:key="'life-'+index"
:src="baseImageUrl + photo"
style="width: 200px; height: 150px;"
:preview-src-list="getPhotoPreviewList(studentDialog.studentInfo.lifePhoto)"
fit="contain"
/>
</template>
<template v-else>
<div style="color: #999;">暂无图片</div>
</template>
</div>
</el-form-item>
<el-form-item label="其他照片" prop="otherPhoto">
<div style="display: flex; flex-wrap: wrap; gap: 10px;">
<template v-if="getPhotoList(studentDialog.studentInfo.otherPhoto).length > 0">
<el-image
v-for="(photo, index) in getPhotoList(studentDialog.studentInfo.otherPhoto)"
:key="'other-'+index"
:src="baseImageUrl + photo"
style="width: 200px; height: 150px;"
:preview-src-list="getPhotoPreviewList(studentDialog.studentInfo.otherPhoto)"
fit="contain"
/>
</template>
<template v-else>
<div style="color: #999;">暂无图片</div>
</template>
</div>
</el-form-item>
<el-form-item label="体检报告" prop="examinationReport">
<div style="display: flex; flex-wrap: wrap; gap: 10px;">
<template v-if="getPhotoList(studentDialog.studentInfo.examinationReport).length > 0">
<el-image
v-for="(photo, index) in getPhotoList(studentDialog.studentInfo.examinationReport)"
:key="'exam-' + index"
:src="baseImageUrl + photo"
style="width: 200px; height: 150px;"
:preview-src-list="getPhotoPreviewList(studentDialog.studentInfo.examinationReport)"
fit="contain"
/>
</template>
<template v-else>
<div style="color: #999;">暂无图片</div>
</template>
</div>
</el-form-item>
</el-form>
</el-dialog>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
@ -133,6 +384,21 @@ export default {
coachUserName: null,
isSign: null,
},
//
viewFlag: false,
//
content: "",
// URL
userUrl: "",
hasContract: false,
baseImageUrl: "http://122.51.230.86:9000/",
studentDialog: {
visible: false,
title: '学员信息详情',
loading: false,
//
studentInfo: {}
}
};
},
created() {
@ -176,6 +442,57 @@ export default {
openEndOrder(data) {
this.$refs["endOrderRef"].open(data);
},
getPhotoList(photoStr) {
if (!photoStr) return [];
return photoStr.split(',').map(item => item.trim());
},
// URL
getPhotoPreviewList(photoStr) {
if (!photoStr) return [];
return photoStr.split(',').map(item => this.baseImageUrl + item.trim());
},
/* async viewContract(row) {
try {
this.loading = true;
// API
const response = await SchoolCourseOrderApi.getContractDetail(row.userId);
this.content = response.data.content; //
this.userUrl = response.data.userUrl; //
this.viewFlag = true; //
} finally {
this.loading = false;
}
}, */
async viewContract(row) {
try {
this.loading = true;
const response = await SchoolCourseOrderApi.getContractDetail(row.userId);
this.content = response.data.content || "";
this.userUrl = response.data.userUrl || "";
this.hasContract = !!this.content; // true
} catch (error) {
this.content = "";
this.userUrl = "";
this.hasContract = false;
} finally {
this.viewFlag = true;
this.loading = false;
}
},
async viewStudentInfo(row) {
this.studentDialog.visible = true
this.studentDialog.loading = true
try {
// API
const res = await SchoolCourseOrderApi.getStudentDetail(row.userId)
this.studentDialog.studentInfo = res.data
console.log('res',res.data)
} finally {
this.studentDialog.loading = false
}
},
/** 删除按钮操作 */
async handleDelete(row) {
const id = row.id;