| <template> | 
|   <ContentScrollView :paddingH="false"> | 
|     <nut-form :model-value="form" ref="formRef" :rules="rules"> | 
|       <nut-form-item label="持卡人:" class="bole-form-item" prop="name"> | 
|         <nut-input v-model.trim="form.name" placeholder="请输入持卡人" readonly /> | 
|       </nut-form-item> | 
|       <nut-form-item label="身份证号:" class="bole-form-item" prop="identity"> | 
|         <nut-input v-model.trim="form.identity" placeholder="请输入身份证号" readonly /> | 
|       </nut-form-item> | 
|       <nut-form-item label="银行卡号:" class="bole-form-item" prop="code"> | 
|         <nut-input | 
|           v-model.trim="form.code" | 
|           placeholder="请输入银行卡号" | 
|           :formatter="(val:string)=>val.replace(/\s/g,'')" | 
|         /> | 
|       </nut-form-item> | 
|       <nut-form-item label="开户行:" class="bole-form-item" prop="bank"> | 
|         <nut-input v-model.trim="form.bank" placeholder="请输入开户行" /> | 
|       </nut-form-item> | 
|       <nut-form-item label="手机号:" class="bole-form-item" prop="phoneNumber" required> | 
|         <nut-input | 
|           v-model.trim="form.phoneNumber" | 
|           class="nut-input-text bole-input-text" | 
|           placeholder="请填写银行预留手机号" | 
|           type="text" | 
|         > | 
|           <template #right> | 
|             <ProFormCaptcha | 
|               :onGetCaptcha="() => onGetCaptcha(form.phoneNumber)" | 
|               phonePropName="phoneNumber" | 
|               :validateField="formRef?.validate" | 
|             ></ProFormCaptcha> | 
|           </template> | 
|         </nut-input> | 
|       </nut-form-item> | 
|       <nut-form-item label="短信验证码:" class="bole-form-item" prop="verifyCode" required> | 
|         <nut-input | 
|           v-model.trim="form.verifyCode" | 
|           class="nut-input-text bole-input-text" | 
|           placeholder="请输入验证码" | 
|           type="number" | 
|         /> | 
|       </nut-form-item> | 
|     </nut-form> | 
|   </ContentScrollView> | 
|   <PageFooter> | 
|     <PageFooterBtn type="primary" @click="handleConfirm">绑定银行卡</PageFooterBtn> | 
|   </PageFooter> | 
| </template> | 
|   | 
| <script setup lang="ts"> | 
| import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types'; | 
| import { ProFormCaptcha } from 'senin-mini/components'; | 
| import { FormValidator, Message } from '@12333/utils'; | 
| import * as userServices from '@12333/services/apiV2/user'; | 
| import { EnumUserBankCardAccess } from '@12333/constants'; | 
| import { goBack } from '@/utils'; | 
|   | 
| defineOptions({ | 
|   name: 'InnerPage', | 
| }); | 
| const { userDetail, updateUserInfo } = useUser(); | 
|   | 
| const form = reactive({ | 
|   name: userDetail.value?.name ?? '', | 
|   identity: userDetail.value?.identity ?? '', | 
|   phoneNumber: '', | 
|   code: '', | 
|   bank: '', | 
|   bankBranch: '', | 
|   verifyCode: '', | 
| }); | 
|   | 
| const rules = reactive<FormRules>({ | 
|   code: [ | 
|     { required: true, message: '请输入银行卡号' }, | 
|     { message: '请输入正确的银行卡号', validator: FormValidator.validatorBankCard }, | 
|   ], | 
|   bank: [{ required: true, message: '请输入开户行' }], | 
|   phoneNumber: [ | 
|     { required: true, message: '请填写手机号码' }, | 
|     { message: '请输入正确的手机号码', validator: FormValidator.validatorPhoneNumber }, | 
|   ], | 
|   verifyCode: [{ required: true, message: '请输入验证码' }], | 
| }); | 
|   | 
| async function onGetCaptcha(phoneNumber: string) { | 
|   await userServices.sendSavePersonalUserBankCardVerifyCode( | 
|     { | 
|       phoneNumber: form.phoneNumber, | 
|     }, | 
|     { showLoading: false } | 
|   ); | 
| } | 
|   | 
| const formRef = ref<any>(null); | 
| function handleConfirm() { | 
|   if (!formRef.value) return; | 
|   formRef.value.validate().then(({ valid, errors }: any) => { | 
|     if (valid) { | 
|       confirm(); | 
|     } | 
|   }); | 
| } | 
|   | 
| async function confirm() { | 
|   try { | 
|     let params: API.SavePersonalUserBankCardCommand = { | 
|       code: form.code, | 
|       bank: form.bank, | 
|       phoneNumber: form.phoneNumber, | 
|       verifyCode: form.verifyCode, | 
|       access: EnumUserBankCardAccess.Bank, | 
|     }; | 
|     let res = await userServices.savePersonalUserBankCard(params); | 
|     if (res) { | 
|       Message.success('绑定成功', { | 
|         onClosed() { | 
|           updateUserInfo(); | 
|           goBack(); | 
|         }, | 
|       }); | 
|     } | 
|   } catch (error) {} | 
| } | 
| </script> | 
|   | 
| <style lang="scss"> | 
| @import '@/styles/common.scss'; | 
| </style> |