feat: 人员信息页面接口入参调整

xgf-training-dev
mengfanliang 2025-02-19 14:06:10 +08:00
parent 96303795ec
commit 40bfdf1cf7
3 changed files with 285 additions and 319 deletions

View File

@ -74,5 +74,5 @@ export const getHistoricalApprovalRecords = (params) => post("/app/Task/getHis",
// ********************* start *********************** // ********************* start ***********************
export const getIsUploadFace = (params) => post("/app/user/getUserFace", params); // 获取是否上传人脸信息 export const getIsUploadFace = (params) => post("/app/user/getUserFace", params); // 获取是否上传人脸信息
export const getClassList = (params) => post("/app/stagestudentrelation/pageTaskByUser", params); //获取班级列表 export const getClassList = (params) => post("/app/stagestudentrelation/pageTaskByUser", params); //获取班级列表
export const joinClass = (params) => post("/app/student/joinClass", params); //实名认证信息提交 export const joinClass = (params) => uploads("/app/student/joinClass", params); // 实名认证信息提交
// ********************* end *********************** // ********************* end ***********************

View File

@ -101,21 +101,24 @@ export default {
// scanType: ['qrCode'], // // scanType: ['qrCode'], //
onlyFromCamera: false, // onlyFromCamera: false, //
hideAlbum: false, // ,, hideAlbum: false, // ,,
success: function (res) { success: function (response) {
if (res.result === '0') { const { id, type } = JSON.parse(response.result);
if (type === '0') {
// //
uni.$u.route({ uni.$u.route({
url: '/pages/train_management/realname_info_auth', url: '/pages/train_management/realname_info_auth',
params: { params: {
type: 'scan_face' type: 'scan_face',
classId: id
} }
}) })
} else if (res.result === '1') { } else if (type === '1') {
// //
uni.$u.route({ uni.$u.route({
url: '/pages/train_management/face_authentication', url: '/pages/train_management/face_authentication',
params: { params: {
type: 'learning_certification' type: 'learning_certification',
classId: id
} }
}) })
} }

View File

@ -1,76 +1,70 @@
<template> <template>
<view class="content"> <view class="content">
<view class="top-title">学员信息</view> <view class="top-title">学员信息</view>
<u-gap height="20" bgColor="#f2f2f2" /> <u-gap height="20" bgColor="#f2f2f2" />
<view class="content_body"> <view class="content_body">
<u--form labelPosition="left" :model="ruleFormData" :rules="rules" ref="uFormRef"> <u--form labelPosition="left" :model="ruleFormData" :rules="rules" ref="uFormRef">
<u-form-item labelWidth="70" label="姓名" prop="userInfo.name" borderBottom required> <u-form-item labelWidth="70" label="姓名" prop="userInfo.name" borderBottom required>
<u--input v-model="ruleFormData.userInfo.name" placeholder="请输入姓名..." border="none"></u--input> <u--input v-model="ruleFormData.userInfo.name" placeholder="请输入姓名..." border="none"></u--input>
</u-form-item> </u-form-item>
<u-form-item labelWidth="80" label="联系电话" prop="userInfo.phone" borderBottom required> <u-form-item labelWidth="80" label="联系电话" prop="userInfo.phone" borderBottom required>
<u--input v-model="ruleFormData.userInfo.phone" type="number" placeholder="请输入联系电话..." <u--input v-model="ruleFormData.userInfo.phone" type="number" placeholder="请输入联系电话..." border="none"></u--input>
border="none"></u--input> </u-form-item>
</u-form-item> <u-form-item labelWidth="80" label="身份证号" prop="userInfo.userIdCard" borderBottom required>
<u-form-item labelWidth="80" label="身份证号" prop="userInfo.userIdCard" borderBottom required> <u--input v-model="ruleFormData.userInfo.userIdCard" placeholder="请输入身份证号..." border="none"></u--input>
<u--input v-model="ruleFormData.userInfo.userIdCard" placeholder="请输入身份证号..." border="none"></u--input> </u-form-item>
</u-form-item> <u-form-item labelWidth="70" label="性别" prop="userInfo.sex" borderBottom required>
<u-form-item labelWidth="70" label="性别" prop="userInfo.sex" borderBottom required> <u-radio-group v-model="ruleFormData.userInfo.sex" placement="row" class="radio-group__style">
<u-radio-group v-model="ruleFormData.userInfo.sex" placement="row" class="radio-group__style" <u-radio v-for="(item, index) in sexsList" :key="index" :label="item.name" :name="item.name"> </u-radio>
@change="groupChange"> </u-radio-group>
<u-radio v-for="(item, index) in sexsList" :key="index" :label="item.name" :name="item.name"> </u-form-item>
</u-radio> <u-form-item labelWidth="70" label="学历" prop="userInfo.degreeOfEducation" borderBottom required @click="handleEducationClick">
</u-radio-group> <u--input v-model="ruleFormData.userInfo.degreeOfEducation" readonly placeholder="请选择学历..." border="none"></u--input>
</u-form-item> </u-form-item>
<u-form-item labelWidth="70" label="学历" prop="userInfo.degreeOfEducation" borderBottom required <u-form-item labelWidth="70" label="职业" prop="userInfo.job" borderBottom required>
@click="handleEducationClick"> <u--input v-model="ruleFormData.userInfo.job" placeholder="请输入职业..." border="none"></u--input>
<u--input v-model="ruleFormData.userInfo.degreeOfEducation" readonly placeholder="请选择学历..." border="none"></u--input> </u-form-item>
<!-- <u-action-sheet :show="showEducationPopper" :actions="educationActions" title="请选择学历" <u-form-item labelWidth="125" label="职业资格等级证书" prop="userInfo.gradeCertificate" borderBottom required>
@close="showEducationPopper = false" @select="handleSelectEducation"> <u-upload :fileList="ruleFormData.userInfo.gradeCertificate" previewFullImage @afterRead="afterRead" @delete="deletePic" name="1" multiple :maxCount="1"></u-upload>
</u-action-sheet> --> </u-form-item>
</u-form-item> <u-form-item labelWidth="120" label="获得证书时间" prop="userInfo.certificateAcquisitionTime" borderBottom required @click="showCertificateGetTime">
<u-form-item labelWidth="70" label="职业" prop="userInfo.job" borderBottom required> <u--input v-model="ruleFormData.userInfo.certificateAcquisitionTime" readonly placeholder="请选择获得证书时间..." border="none"></u--input>
<u--input v-model="ruleFormData.userInfo.job" placeholder="请输入职业..." border="none"></u--input> </u-form-item>
</u-form-item> <u-form-item label="手写签字" prop="userInfo.writeSign" borderBottom required labelPosition="top" labelWidth="auto">
<u-form-item labelWidth="125" label="职业资格等级证书" prop="userInfo.gradeCertificate" borderBottom required> <view style="flex: 1">
<u-upload :fileList="ruleFormData.userInfo.gradeCertificate" :previewFullImage="true" @afterRead="afterRead" <u-button type="primary" size="mini" text="签字" :customStyle="{ position: 'absolute', top: '-46upx', right: '20upx', width: '100upx' }" @click="signVisible = true" />
@delete="deletePic" name="1" multiple :maxCount="1"></u-upload> <view v-if="ruleFormData.userInfo.writeSign">
</u-form-item> <u-image width="400rpx" height="200rpx" :src="ruleFormData.userInfo.writeSign" />
<u-form-item labelWidth="120" label="获得证书时间" prop="userInfo.certificateAcquisitionTime" borderBottom required </view>
@click="showCertificateGetTime"> </view>
<u--input v-model="ruleFormData.userInfo.certificateAcquisitionTime" readonly placeholder="请选择获得证书时间..." </u-form-item>
border="none"></u--input> </u--form>
</u-form-item>
<u-form-item label="手写签字" prop="userInfo.writeSign" borderBottom required labelPosition="top" labelWidth="auto">
<view style="flex: 1;">
<u-button type="primary" size="mini" text="签字"
:customStyle="{ position: 'absolute', top: '-46upx', right: '20upx', width: '100upx' }"
@click="signVisible = true" />
<view v-if="ruleFormData.userInfo.writeSign">
<u-image width="400rpx" height="200rpx" :src="ruleFormData.userInfo.writeSign" />
</view>
</view>
</u-form-item>
</u--form>
<view class="mt-10"> <view class="mt-10">
<u-button type="primary" text="下一步" @click="$u.debounce(fnSubmit, 1000, true)" /> <u-button type="primary" text="下一步" @click="$u.debounce(fnSubmit, 1000, true)" />
</view> </view>
</view>
</view> <sign :signShow.sync="signVisible" @confirm="handleSign" />
<u-datetime-picker
:show="showCertificateGetTimePopper"
mode="datetime"
v-model="defaultDatetimePicker"
:round="12"
:custom-style="{
borderRadius: '24rpx',
overflow: 'hidden',
'--picker-header-radius': '24rpx 24rpx 0 0',
'--picker-confirm-radius': '12rpx'
}"
@confirm="handleCertificateGetTimeConfirm"
@cancel="handleCertificateGetTimeCancel"
></u-datetime-picker>
<sign :signShow.sync="signVisible" @confirm="handleSign" /> <u-picker ref="uPicker" :show="singleChoice" :columns="singleChoiceColumns" keyName="NAME" @confirm="fnSingleChoiceConfirm" @cancel="fnSingleChoiceCancel"></u-picker>
<u-datetime-picker :show="showCertificateGetTimePopper" mode="date" :round="12" :custom-style="{ </view>
borderRadius: '24rpx',
overflow: 'hidden',
'--picker-header-radius': '24rpx 24rpx 0 0',
'--picker-confirm-radius': '12rpx'
}" @confirm="handleCertificateGetTimeConfirm" @cancel="handleCertificateGetTimeCancel"></u-datetime-picker>
<u-picker ref="uPicker" :show="singleChoice" :columns="singleChoiceColumns" keyName="NAME"
@confirm="fnSingleChoiceConfirm" @cancel="fnSingleChoiceCancel"></u-picker>
</view>
</template> </template>
<script> <script>
@ -79,260 +73,229 @@ import Sign from '@/components/sign/sign.vue'
import { validateFieldPhone, validateFieldIdCard } from '@/utils/formValidateField.js' import { validateFieldPhone, validateFieldIdCard } from '@/utils/formValidateField.js'
export default { export default {
data() { data() {
return { return {
routeQuery: {}, routeQuery: {}, //
sexsList: [ sexsList: [
{ {
label: '1', label: '1',
name: '男' name: '男'
}, },
{ {
label: '0', label: '0',
name: '女' name: '女'
} }
], ],
singleChoice: false, singleChoice: false,
showCertificateGetTimePopper: false, showCertificateGetTimePopper: false,
signVisible: false, signVisible: false,
educationActions: [ defaultDatetimePicker: Number(new Date()),
{ singleChoiceColumns: [],
id: '0', ruleFormData: {
name: '小学', userInfo: {
}, name: '', //
{ phone: '', //
id: '1', userIdCard: '', //
name: '初中', sex: '男', //
}, degreeOfEducation: '', //
{ job: '', //
id: '2', gradeCertificate: [], //
name: '高中', certificateAcquisitionTime: '', //
}, writeSign: '' //
{ }
id: '3', },
name: '大学专科', rules: {
}, 'userInfo.name': {
{ type: 'string',
id: '4', required: true,
name: '大学本科', message: '请填写姓名',
}, trigger: ['blur', 'change']
{ },
id: '5', 'userInfo.phone': [
name: '研究生', {
}, required: true,
{ message: '请输入手机号',
id: '6', trigger: ['change', 'blur']
name: '博士', },
}, {
{ validator: validateFieldPhone,
id: '7', trigger: ['change', 'blur']
name: '其他', }
} ],
], 'userInfo.userIdCard': [
singleChoiceColumns: [], {
ruleFormData: { type: 'string',
userInfo: { required: true,
name: '', // message: '请填写身份证号',
phone: '', // trigger: ['blur', 'change']
userIdCard: '', // },
sex: '男', // {
degreeOfEducation: '', // validator: validateFieldIdCard,
job: '', // trigger: ['change', 'blur']
gradeCertificate: [], // }
certificateAcquisitionTime: '', // ],
writeSign: '', // 'userInfo.sex': {
} type: 'string',
}, required: true,
rules: { message: '请选择性别',
'userInfo.name': { trigger: ['change']
type: 'string', },
required: true, 'userInfo.degreeOfEducation': {
message: '请填写姓名', type: 'string',
trigger: ['blur', 'change'] required: true,
}, message: '请选择学历',
'userInfo.phone': [ trigger: ['blur', 'change']
{ },
required: true, 'userInfo.job': {
message: '请输入手机号', type: 'string',
trigger: ['change', 'blur'], required: true,
}, message: '请输入职业',
{ trigger: ['blur', 'change']
validator: validateFieldPhone, },
trigger: ['change', 'blur'], 'userInfo.gradeCertificate': [
} {
], type: 'array',
'userInfo.userIdCard': [ required: true,
{ message: '请上传等级证书',
type: 'string', trigger: ['blur', 'change']
required: true, }
message: '请填写身份证号', ],
trigger: ['blur', 'change'] 'userInfo.certificateAcquisitionTime': {
}, type: 'string',
{ required: true,
validator: validateFieldIdCard, message: '请选择获取证书时间',
trigger: ['change', 'blur'], trigger: ['blur', 'change']
} },
], 'userInfo.writeSign': [
'userInfo.sex': { {
type: 'string', type: 'string',
required: true, required: true,
message: '请选择性别', message: '请填写手写签字',
trigger: ['change'] trigger: ['blur', 'change']
}, }
'userInfo.degreeOfEducation': { ]
type: 'string', }
required: true, }
message: '请选择学历',
trigger: ['blur', 'change']
},
'userInfo.job': {
type: 'string',
required: true,
message: '请输入职业',
trigger: ['blur', 'change']
},
'userInfo.gradeCertificate': [
{
type: 'array',
required: true,
message: '请上传等级证书',
trigger: ['blur', 'change']
}
],
'userInfo.certificateAcquisitionTime': {
type: 'string',
required: true,
message: '请选择获取证书时间',
trigger: ['blur', 'change']
},
'userInfo.writeSign': [
{
type: 'string',
required: true,
message: '请填写手写签字',
trigger: ['blur', 'change']
}
]
}
}
},
onLoad(query) {
this.routeQuery = query;
},
methods: {
groupChange(n) {
console.log('groupChange', n);
},
radioChange(n) {
console.log('radioChange', n);
},
handleEducationClick() {
this.$refs.uPicker.setIndexs([0])
this.fnGetDataDictionary('d7d80f08d73a4accbccf4fd3d8d1d867')
this.singleChoice = true
},
fnSingleChoiceConfirm(event) {
console.log(event, "sdfasdgf")
this.$set(this.ruleFormData.userInfo, 'degreeOfEducation', event.value[0].NAME)
this.$set(this.ruleFormData.userInfo, 'degreeOfEducation' + '_BIANMA', event.value[0].BIANMA)
this.singleChoice = false
}, },
async fnGetDataDictionary(DICTIONARIES_ID) {
let resData = await getDataDictionary({
DICTIONARIES_ID
})
this.singleChoiceColumns = [resData.list]
},
handleSelectEducation(event) {
this.ruleFormData.userInfo.degreeOfEducation = event.name;
},
async afterRead(event) {
// multiple true , file
let lists = [].concat(event.file);
let fileListLen = this.ruleFormData.userInfo.gradeCertificate.length;
lists.map((item) => {
this.ruleFormData.userInfo.gradeCertificate.push({
...item,
status: "uploading",
message: "上传中",
});
});
// console.log('this.ruleFormData.userInfo.gradeCertificate :>> ', this.ruleFormData.userInfo.gradeCertificate);
// for (let i = 0; i < lists.length; i++) {
// const result = await this.uploadFilePromise(lists[i].url);
// let item = this.ruleFormData.userInfo.gradeCertificate[fileListLen];
// this.ruleFormData.userInfo.gradeCertificate.splice(
// fileListLen,
// 1,
// Object.assign(item, {
// status: "success",
// message: "",
// url: result,
// })
// );
// fileListLen++;
// }
},
deletePic(event) {
this.gradeCertificateList.splice(event.index, 1);
},
showCertificateGetTime() {
this.showCertificateGetTimePopper = true;
},
handleCertificateGetTimeConfirm(event) {
this.ruleFormData.userInfo.certificateAcquisitionTime = uni.$u.timeFormat(event.value, 'yyyy-mm-dd')
this.handleCertificateGetTimeCancel()
},
handleCertificateGetTimeCancel() {
this.showCertificateGetTimePopper = false;
},
handleSign(event) {
this.ruleFormData.userInfo.writeSign = event.filePath;
},
async fnSubmit() {
try {
await this.$refs.uFormRef.validate()
try {
console.log("this.ruleFormData.userInfo : >>", this.ruleFormData.userInfo);
await joinClass({ onLoad(query) {
form: this.form, this.routeQuery = query //
calssId: this.routeQuery.calssId, },
})
uni.$u.toast('保存成功') methods: {
uni.$u.route({ handleEducationClick() {
url: '/pages/train_management/face_authentication', this.$refs.uPicker.setIndexs([0])
params: { ...this.routeQuery } this.fnGetDataDictionary('d7d80f08d73a4accbccf4fd3d8d1d867')
}) this.singleChoice = true
} catch { },
} fnSingleChoiceConfirm(event) {
} catch { this.$set(this.ruleFormData.userInfo, 'degreeOfEducation', event.value[0].NAME)
uni.$u.toast('请补全必填项') this.$set(this.ruleFormData.userInfo, 'degreeOfEducation' + '_BIANMA', event.value[0].BIANMA)
} this.fnSingleChoiceCancel()
} },
} fnSingleChoiceCancel() {
this.singleChoice = false
},
async fnGetDataDictionary(DICTIONARIES_ID) {
let resData = await getDataDictionary({
DICTIONARIES_ID
})
this.singleChoiceColumns = [resData.list]
},
handleSelectEducation(event) {
this.ruleFormData.userInfo.degreeOfEducation = event.name
},
async afterRead(event) {
let lists = [].concat(event.file)
lists.map((item) => {
this.ruleFormData.userInfo.gradeCertificate.push({
...item,
status: 'success',
message: ''
})
})
},
deletePic(event) {
this.ruleFormData.userInfo.gradeCertificate.splice(event.index, 1)
},
showCertificateGetTime() {
this.showCertificateGetTimePopper = true
},
handleCertificateGetTimeConfirm(event) {
this.ruleFormData.userInfo.certificateAcquisitionTime = uni.$u.timeFormat(event.value, 'yyyy-mm-dd hh:MM')
this.handleCertificateGetTimeCancel()
},
handleCertificateGetTimeCancel() {
this.showCertificateGetTimePopper = false
},
handleSign(event) {
this.ruleFormData.userInfo.writeSign = event.filePath
},
async fnSubmit() {
const classId = this.routeQuery.classId
await this.$refs.uFormRef
.validate()
.then(async () => {
let files = []
if (this.ruleFormData.userInfo.gradeCertificate[0]) {
files.push({
name: 'certificatefile',
file: this.ruleFormData.userInfo.gradeCertificate[0],
uri: this.ruleFormData.userInfo.gradeCertificate[0].url
})
}
if (this.ruleFormData.userInfo.writeSign) {
files.push({
name: 'signfile',
uri: this.ruleFormData.userInfo.writeSign
})
}
// const certificatefileLists = this.ruleFormData.userInfo.gradeCertificate.map(so => so.url); // ,
const params = { ...this.ruleFormData.userInfo }
delete params.gradeCertificate
delete params.writeSign
await joinClass({
files,
formData: { ...params, classId }
})
.then(() => {
uni.$u.toast('保存成功')
setTimeout(() => {
uni.$u.route({
url: '/pages/train_management/face_authentication',
params: { ...this.routeQuery, type: 'scan_face' }
})
}, 1500)
})
.catch((err) => {
if (err) uni.$u.toast(err.msg)
})
})
.catch((e) => {
uni.$u.toast('请补全必填项')
})
}
}
} }
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.content { .content {
.top-title { .top-title {
padding: 20rpx; padding: 20rpx;
text-align: center; text-align: center;
font-size: 54rpx; font-size: 54rpx;
font-weight: bold; font-weight: bold;
} }
.content_body { .content_body {
padding: 20rpx 30rpx; padding: 20rpx 30rpx;
.radio-group__style { .radio-group__style {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
gap: 60rpx; gap: 60rpx;
} }
} }
} }
</style> </style>