CEES-H5-New/src/views/waiTeacherTwo.vue

862 lines
27 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="father">
<div class="vant-title-card">
<!-- <div class="title-tishi">-->
<!-- <span>温馨提示</span>-->
<!-- <p>请填写本人名下借记卡储蓄卡账号</p>-->
<!-- <div class="wxts"> 建议使用中国银行或中国建设银行借记卡储蓄卡账户信息填报除 <em>借记卡</em> 以外其他类型账户(:信用卡)会造成您的劳务费用无法成功发放</div>-->
<!-- <p class="xxxxx"></p>-->
<!-- </div>-->
<van-form @submit="onSubmit">
<div class="head-cg">
<img src="@/assets/Ui/信息/劳务信息/劳务信息.svg" />
</div>
<van-cell-group inset>
<!--<van-field class="van-field__label1——circle" label-width="400px" label="劳务信息" type="hidden" />-->
<div class="title-tishi">
<div class="wxts">
请填写本人名下
<em>借记卡储蓄卡</em>
建议使用中国银行或中国建设银行借记卡储蓄卡如填写除借记卡以外其他类型(信用卡)卡号会造成您的劳务费无法成功发放</div
>
<p class="xxxxx"></p>
</div>
<van-field
readonly
v-model="tname"
name="userName"
label="姓名"
type="text"
placeholder="请输入姓名"
:rules="[{ required: true, message: '请输入学号' }]"
>
<template #left-icon>
<img
src= "@/assets/Ui/信息/劳务信息/图标/姓名.svg"
style="width: 16px; height: 16px;"
/>
</template>
</van-field>
<van-field
readonly
v-model="tid"
name="userCardId"
label="身份证号"
type="text"
placeholder="请输入身份证号"
:rules="[{ required: true, message: '请输入身份证号' }]"
>
<template #left-icon>
<img
src= "@/assets/Ui/信息/劳务信息/图标/身份证号.svg"
style="width: 16px; height: 16px;"
/>
</template>
</van-field>
<van-field
readonly
v-model="tphone"
name="phone"
label="手机号"
type="text"
placeholder="请输入手机号"
:rules="[{ required: true, message: '请输入手机号' }]"
>
<template #left-icon>
<img
src= "@/assets/Ui/信息/劳务信息/图标/手机号.svg"
style="width: 16px; height: 16px;"
/>
</template>
</van-field>
<div class="field-container">
<van-field
v-model="notLocalTeacherTwo.pyCardMasked"
name="pyCard"
label="银行卡号"
type="text"
placeholder="请输入银行卡号"
:rules="rules"
:disabled="isInputDisabled"
@blur="onBlur"
ref="cardInput"
>
<template #left-icon>
<img
src= "@/assets/Ui/信息/劳务信息/图标/银行卡号.svg"
style="width: 16px; height: 16px;"
/>
</template>
</van-field>
<!-- 修改按钮放在输入框右侧 -->
<van-button
v-if="isInputDisabled"
@click="enableEdit"
class="edit-button"
>
修改
</van-button>
</div>
<!-- 弹窗 -->
<van-dialog
v-model:show="showDialog"
title="确认信息"
show-cancel-button
cancel-button-text="取消"
confirm-button-text="确认"
@confirm="confirmEncryption"
>
<div>
确认提交银行卡号吗?
</div>
</van-dialog>
<van-field
v-model="notLocalTeacherTwo.bankAddress"
name="bankAddress"
label="开户所在地"
type="text"
placeholder="请输入开户所在地(北京,哈尔滨)"
:rules="[{ validator: bankAddr }]"
>
<template #left-icon>
<img
src= "@/assets/Ui/信息/劳务信息/图标/开户银行所在地.svg"
style="width: 16px; height: 16px;"
/>
</template>
</van-field>
<!-- :rules="[{ required: true, message: '请输入开户所在地' }]"-->
<van-field
v-model="notLocalTeacherTwo.bankName"
name="bankName"
label="开户行"
type="text"
placeholder="请输入开户行名称"
:rules="[{ validator: bankName }]"
>
<template #left-icon>
<img
src= "@/assets/Ui/信息/劳务信息/图标/开户银行.svg"
style="width: 16px; height: 16px;"
/>
</template>
</van-field>
<!-- :rules="[{ required: true, message: '请输入开户行名称' }]"-->
</van-cell-group>
<div class="head-cg">
<img src="@/assets/Ui/信息/劳务信息/入校信息.svg" />
</div>
<div class="border-rad">
<!--<van-field class="van-field__label1——circle" label-width="400px" label="入校信息" type="hidden" />-->
<van-field name="carStatus" label-width="150px" label="车辆是否入校">
<template #left-icon>
<img
src= "@/assets/Ui/信息/劳务信息/图标/是否开车.svg"
style="width: 16px; height: 16px;"
/>
</template>
<template #input>
<van-radio-group checked-color="#8D2328" v-model="notLocalTeacherTwo.carStatus" direction="horizontal">
<van-radio name="1">是</van-radio>
<van-radio name="0">否</van-radio>
</van-radio-group>
</template>
</van-field>
<van-field
v-if="notLocalTeacherTwo.carStatus === '1'"
v-model="notLocalTeacherTwo.carNumber"
name="carNumber"
label="车牌号"
type="text"
placeholder="例如黑A39233"
:rules="[{ required: true, message: '请输入车牌号' }]"
>
<!--<template #left-icon>
<img
src= "@/assets/Ui/信息/劳务信息/图标/是否开车.svg"
style="width: 16px; height: 16px;"
/>
</template>-->
</van-field>
<van-field name="dormitoryStatus" label-width="150px" label="是否住宿">
<template #left-icon>
<img
src= "@/assets/Ui/信息/劳务信息/图标/是否住宿.svg"
style="width: 16px; height: 16px;"
/>
</template>
<template #input>
<van-radio-group checked-color="#8D2328" v-model="notLocalTeacherTwo.dormitoryStatus" direction="horizontal">
<van-radio name="1">是</van-radio>
<van-radio name="0">否</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
<div style="margin: 16px; display: flex;">
<!--<van-button
round
style="background-color: #8d2328; border: none; font-weight: 600"
class="van-button--primary"
type="primary"
@click="Previous"
>
上一步
</van-button>-->
<button @click="Previous" style="background-color: transparent; width: 100%; border: none; display: flex; justify-content: flex-start;">
<img
src="@/assets/Ui/信息/劳务信息/上一页 按钮.svg"
style="width: 70%; "
alt="下一步">
</button>
<!--<van-button
round
style="background-color: #8d2328; border: none; font-weight: 600"
class="van-button--primary"
type="primary"
native-type="submit"
>
提交
</van-button>-->
<button style="background-color: transparent; width: 100%; border: none; display: flex; justify-content: flex-end;">
<img
src="@/assets/Ui/信息/劳务信息/下一页按键.svg"
style="width: 70%; "
alt="下一步">
</button>
</div>
</van-form>
<van-dialog
v-model:show="myShowDialog"
confirmButtonColor="#f8cdba"
cancelButtonColor="#939393"
title="确认信息"
confirm-button-text="确认"
show-confirm-button
theme="round-button"
:show-cancel-button="true"
@confirm="confirm"
>
<div class="tishi">
<van-form @submit="onSubmit">
<van-cell-group inset>
<van-field
style="height: 35px; line-height: 100%"
readonly
v-model="notLocalTeacherTwo.userName"
name="userName"
label="姓名"
type="text"
>
<template #left-icon>
<img
src= "@/assets/Ui/信息/确认信息/图标/姓名.svg"
style="width: 16px; height: 16px;"
/>
</template>
</van-field>
<van-field
readonly
style="height: 35px; line-height: 100%"
v-model="notLocalTeacherTwo.identityId"
name="userCardId"
label="身份证号"
>
<template #left-icon>
<img
src= "@/assets/Ui/信息/确认信息/图标/身份证.svg"
style="width: 16px; height: 16px;"
/>
</template>
</van-field>
<van-field style="height: 35px; line-height: 100%" v-model="notLocalTeacherTwo.sex" readonly name="picker" label="性别" >
<template #left-icon>
<img
src= "@/assets/Ui/信息/确认信息/图标/性别.svg"
style="width: 16px; height: 16px;"
/>
</template>
</van-field>
<van-field
style="height: 35px; line-height: 100%"
readonly
v-model="notLocalTeacherTwo.age"
name="age"
label="年龄"
type="text"
>
<template #left-icon>
<img
src= "@/assets/Ui/信息/确认信息/图标/年龄.svg"
style="width: 16px; height: 16px;"
/>
</template>
</van-field>
<van-field
style="height: 35px; line-height: 100%"
readonly
v-model="notLocalTeacherTwo.phone"
name="phone"
label="手机号"
type="number"
>
<template #left-icon>
<img
src= "@/assets/Ui/信息/确认信息/图标/手机号.svg"
style="width: 16px; height: 16px;"
/>
</template>
</van-field>
<van-field
style="height: 35px; line-height: 100%"
v-model="notLocalTeacherTwo.jobTitle"
readonly
name="picker"
label="职称"
>
<template #left-icon>
<img
src= "@/assets/Ui/信息/确认信息/图标/职称.svg"
style="width: 16px; height: 16px;"
/>
</template>
</van-field>
<van-field
style="height: 35px; line-height: 100%"
readonly
v-model="notLocalTeacherTwo.office"
name="office"
label="职务"
type="text"
>
<template #left-icon>
<img
src= "@/assets/Ui/信息/确认信息/图标/职务.svg"
style="width: 16px; height: 16px;"
/>
</template>
</van-field>
<van-field
style="height: 35px; line-height: 100%"
readonly
v-model="notLocalTeacherTwo.workName"
name="workName"
label="单位名称"
type="text"
>
<template #left-icon>
<img
src= "@/assets/Ui/信息/确认信息/图标/单位名称.svg"
style="width: 16px; height: 16px;"
/>
</template>
</van-field>
<van-field
style="height: 35px; line-height: 100%"
readonly
v-model="notLocalTeacherTwo.workPhone"
name="workPhoen"
label="单位电话"
type="text"
>
<template #left-icon>
<img
src= "@/assets/Ui/信息/确认信息/图标/单位电话.svg"
style="width: 16px; height: 16px;"
/>
</template>
</van-field>
<van-field
style="height: 35px; line-height: 100%"
readonly
v-model="notLocalTeacherTwo.pyCard"
name="pyCard"
label="银行卡号"
type="number"
>
<template #left-icon>
<img
src= "@/assets/Ui/信息/确认信息/图标/银行卡号.svg"
style="width: 16px; height: 16px;"
/>
</template>
</van-field>
<van-field
style="height: 35px; line-height: 100%"
readonly
v-model="notLocalTeacherTwo.bankAddress"
name="bankAddress"
label="开户所在地"
type="text"
>
<template #left-icon>
<img
src= "@/assets/Ui/信息/确认信息/图标/开户银行所在地.svg"
style="width: 16px; height: 16px;"
/>
</template>
</van-field>
<van-field
style="height: 35px; line-height: 100%"
readonly
v-model="notLocalTeacherTwo.bankName"
name="bankName"
label="开户行"
type="text"
>
<template #left-icon>
<img
src= "@/assets/Ui/信息/确认信息/图标/开户银行.svg"
style="width: 16px; height: 16px;"
/>
</template>
</van-field>
<van-field
style="height: 35px; line-height: 100%"
readonly
v-if="notLocalTeacherTwo.carStatus === '1'"
v-model="notLocalTeacherTwo.carNumber"
name="carNumber"
label="车牌号"
type="text"
height="40px"
>
<template #left-icon>
<img
src= "@/assets/Ui/信息/确认信息/图标/车牌.svg"
style="width: 16px; height: 16px;"
/>
</template>
</van-field>
<van-field name="dormitoryStatus" :readonly="true" style="height: 35px; line-height: 50%" label="是否住宿">
<template #left-icon>
<img
src= "@/assets/Ui/信息/确认信息/图标/住宿.svg"
style="width: 16px; height: 16px;"
/>
</template>
<template #input>
<van-radio-group
checked-color="#8D2328"
style="height: 35px; line-height: 50%"
v-model="notLocalTeacherTwo.dormitoryStatus"
direction="horizontal"
>
<!-- <van-radio name="1">是</van-radio>-->
<!-- <van-radio name="0">否</van-radio>-->
{{ notLocalTeacherTwo.dormitoryStatus === '1' ? '是' : '否' }}
</van-radio-group>
</template>
</van-field>
</van-cell-group>
</van-form>
</div>
</van-dialog>
</div>
</div>
</template>
<script setup lang="ts">
import { onMounted, reactive, ref } from 'vue';
import { useRouter } from 'vue-router';
import { useUserStore } from '@/store';
import { bankCardAttribution } from '@/api/card';
import { waiTeacherSave } from '@/api';
const store = useUserStore();
let notLocalTeacherTwo = reactive({
userName: '',
phone: '',
identityId: '',
pyCard: '',
pyCardMasked:'',
carStatus: '0',
dormitoryStatus: '0',
bankAddress: '',
bankName: '',
carNumber: '',
openId: '',
unionId: ''
});
const tname = ref('');
const tid = ref('');
const tphone = ref('');
const myShowDialog = ref(false);
const isValidationEnabled =ref(true);
const isInputDisabled = ref(false); // 控制输入框是否禁用
const cardInput = ref(null); // 用来引用输入框的 DOM 元素
// 动态规则,根据 isValidationEnabled 来控制规则
const rules = computed(() => {
if(notLocalTeacherTwo.identityId?.trim() === '0000000'){
isValidationEnabled.value = false;
}
if (isValidationEnabled.value) {
return [{ validator: bankCard }];
}
return []; // 不使用校验规则
//return [{ validator: bankCard }];
});
const router = useRouter();
// 选择器
const showPicker = ref(false);
const sub = ref(false);
const showDialog = ref(false);
// 弹窗确认前处理函数
const onBlur = () => {
notLocalTeacherTwo.pyCard = notLocalTeacherTwo.pyCardMasked;
// 校验原始银行卡号
const validationResult = bankCard(notLocalTeacherTwo.pyCard);
if (validationResult !== true) {
// 校验失败,显示错误信息
console.log(validationResult)
} else {
// 校验通过,弹出确认框
showDialog.value = true;
}
};
// 确认后加密银行卡号
const confirmEncryption = () => {
if (notLocalTeacherTwo.pyCardMasked) {
notLocalTeacherTwo.pyCard = notLocalTeacherTwo.pyCardMasked;
notLocalTeacherTwo.pyCardMasked = encryptBankCard(notLocalTeacherTwo.pyCard); // 加密银行卡号
}
showDialog.value = false; // 关闭弹窗
// 禁用输入框
isInputDisabled.value = true;
// 点击确认后禁用校验规则
isValidationEnabled.value = false;
console.log("pyCard",notLocalTeacherTwo.pyCard)
console.log("pyCardMasked",notLocalTeacherTwo.pyCardMasked)
};
// 加密银行卡号的函数 (这里只是简单的加密处理,你可以根据需要替换)
const encryptBankCard = (cardNumber) => {
return cardNumber.substring(0, 4) + ' **** **** ' + cardNumber.substring(15, 19); // 简单的加密方式
};
// 重新启用输入框(点击修改按钮后)
const enableEdit = () => {
// 重新启用输入框
isInputDisabled.value = false;
isValidationEnabled.value = true;
nextTick(() => {
// 使输入框获得焦点
if (cardInput.value) {
cardInput.value.focus();
}
});
// 将加密后的银行卡号赋值给原始字段,方便用户重新输入
notLocalTeacherTwo.pyCardMasked = notLocalTeacherTwo.pyCard;
};
// 校验规则
const bankAddr = (value: string) => {
if(notLocalTeacherTwo.identityId?.trim() === '0000000'){
return true;
}else{
if (value == '---') {
return true;
}
if (value.length < 1) {
return '开户所在地不能为空';
}
return true;
}
};
const bankName = (value: string) => {
if(notLocalTeacherTwo.identityId?.trim() === '0000000'){
return true;
}else{
if (value == '---') {
return true;
}
if (value.length < 1) {
return '开户行不能为空';
}
return true;
}
};
const bankCard = (value: string) => {
// if (value.length < 16) {
// return '银行卡号长度至少为16位';
// }
if (value == '9999') {
return true;
}
// 信用卡6222528888888888
// 工商卡6259068888888888
const card = bankCardAttribution(value);
console.log(card);
if (card === 'error') {
return '银行卡号错误';
}
if (card.cardTypeName === '信用卡') {
return '不能使用信用卡号';
}
return true;
};
const onConfirm = ({ selectedOptions }) => {
notLocalTeacherTwo = selectedOptions[0]?.text;
showPicker.value = false;
};
let storedData: object;
onMounted(() => {
console.log('组件挂在了');
const notLocalTeacherStr = localStorage.getItem('notLocalTeacher');
if (notLocalTeacherStr == null) {
// 提示用户信息不全
alert('信息不全请返回上一级补全');
router.push('/waiTeacherTwo');
} else {
storedData = JSON.parse(notLocalTeacherStr);
Object.assign(notLocalTeacherTwo, storedData);
// 姓名最后一位替换*号phone
tname.value = notLocalTeacherTwo.userName.substring(0, notLocalTeacherTwo.userName.length - 1) + '*';
if (notLocalTeacherTwo.userName.length <= 2) {
tname.value = notLocalTeacherTwo.userName.substring(0, notLocalTeacherTwo.userName.length - 1) + '*';
}
// if (notLocalTeacherTwo.userName.length==3){
// tname.value = notLocalTeacherTwo.userName.substring(0, 1) + '*'+notLocalTeacherTwo.userName.substring(2, 3);
// }
if (notLocalTeacherTwo.userName.length >= 3) {
tname.value =
notLocalTeacherTwo.userName.substring(0, 1) +
'*' +
notLocalTeacherTwo.userName.substring(notLocalTeacherTwo.userName.length - 1, notLocalTeacherTwo.userName.length);
}
//notLocalTeacherTwo.identityId这个18位身份证号 第七位到14位*
tid.value = notLocalTeacherTwo.identityId.substring(0, 5) + '****' + notLocalTeacherTwo.identityId.substring(13, 18);
tphone.value = notLocalTeacherTwo.phone.substring(0, 3) + '****' + notLocalTeacherTwo.phone.substring(7, 11);
}
});
// 返回上一步
const Previous = () => {
router.push('/waiTeacher');
};
let myObj = {};
// 信息提交到后台
const onSubmit = (values: object) => {
// 检查身份证是否为7个0
const isSpecialId = notLocalTeacherTwo.identityId?.trim() === '0000000';
if (isSpecialId) {
// 身份证为7个0跳过所有验证直接处理提交
myShowDialog.value = true;
console.log("storedData", storedData);
myObj = { ...values, ...storedData };
myObj.pyCard = notLocalTeacherTwo.pyCard;
console.log("myObj", myObj);
return;
} else {
// 正常验证流程
notLocalTeacherTwo.value?.validate().then(() => {
myShowDialog.value = true;
console.log("storedData", storedData);
myObj = { ...values, ...storedData };
myObj.pyCard = notLocalTeacherTwo.pyCard;
console.log("myObj", myObj);
}).catch((error) => {
console.log('表单验证失败', error);
});
}
};
const confirm = () => {
waiTeacherSave(myObj).then(
(res) => {
console.log(res);
if (res.code == 500) {
alert(res.message);
return;
}
if (res.code == 200) {
alert('提交成功');
console.log(res.result);
store.login(res.result.user);
localStorage.removeItem('notLocalTeacher');
router.push(res.result.router);
}
},
(err) => {
console.log(err);
},
);
};
</script>
<style scoped lang="scss">
.father {
height: 100vh;
background-color: #efefef;
padding-top: 20px;
background-image: url('@/assets/Ui/信息/劳务信息/背景.svg');
background-repeat: no-repeat;
background-size: cover; /* 修改这里 */
}
.mar-auto15 {
margin: 15px 15px;
}
.van-field__label_rectangle {
position: relative;
font-size: 1rem; /* 调整为您所需的字体大小 */
}
.van-field__label1circle {
position: relative;
font-size: 1rem; /* 调整为您所需的字体大小 */
}
.van-field__label_rectangle:before {
content: '';
position: absolute;
top: 30%;
left: 5px;
display: inline-block;
height: 20px;
width: 5px;
background-color: #8d2328;
border-radius: 8px;
}
.van-field__label1circle:before {
content: '';
position: absolute;
top: 50%;
left: 5px;
display: inline-block;
height: 5px;
width: 5px;
background-color: #8d2328;
border-radius: 50%;
}
.vant-title-card {
width: 90%;
height: 100vh;
margin: 0 auto;
border-radius: 8px;
padding: 0;
}
.van-cell-group--inset {
margin: 0;
margin-bottom: 15px;
//border-top-right-radius: 0;
//border-top-left-radius: 0;
}
.van-cell-group--inset-bottom {
}
.title-tishi {
width: 100%;
//border-bottom-right-radius: 0;
//border-bottom-left-radius: 0;
background-color: #ffffff;
margin-bottom: 15px;
border-radius: 8px;
p {
text-align: left;
margin: 5px 15px;
text-indent: 2rem;
}
span {
position: relative;
font-weight: 600;
display: block;
text-align: left;
}
span:before {
content: '';
display: inline-block;
height: 8px;
width: 8px;
margin: 0 10px;
background-color: #8d2328;
border-radius: 50%;
}
}
.van-button--primary {
width: 35%;
margin-left: 7%;
}
.border-rad {
border-radius: 10px;
overflow: hidden;
}
.wxts {
margin-left: 10px;
margin-right: 10px;
text-indent: 2rem;
text-align: left;
p {
color: red;
padding: 0;
margin: 0;
}
em {
font-style: normal;
font-weight: 600;
color: red;
}
}
.xxxxx {
margin-bottom: 15px;
}
.my-dialog {
color: red;
}
.field-container {
display: flex;
align-items: center; /* 垂直居中对齐 */
}
.edit-button {
margin-left: 8px; /* 按钮与输入框之间的间距 */
border: none; /* 去掉按钮的边框 */
background-color: transparent; /* 去掉按钮的背景颜色使其透明 */
color: red; /* 设置按钮字体颜色为红色 */
font-size: 20px; /* 根据需要设置字体大小 */
width: 150px;
cursor: pointer; /* 鼠标悬停时显示为手型表示可点击 */
}
.head-cg {
width: 100%;
display: flex;
justify-content: center;
align-items: center;
img {
width: 50%;
margin-top: 2vh;
margin-bottom: 2vh;
}
}
</style>