|  |  | 
 |  |  | <template> | 
 |  |  |   <ContentScrollView> | 
 |  |  |     <div class="bind-bank-card"> | 
 |  |  |       <div class="bind-bank-card-wrapper"> | 
 |  |  |         <div class="bg-left-top"></div> | 
 |  |  |         <div class="bind-bank-card-content"> | 
 |  |  |           <div class="bank-card-name">{{ detail?.bank ?? '' }}</div> | 
 |  |  |           <div class="bank-card-number"> | 
 |  |  |             <div class="bank-card-number-text" @click="changeBankCodeShow"> | 
 |  |  |               {{ hideBankCode ? showBankCodeForEnd4(detail?.code ?? '') : detail?.code ?? '' }} | 
 |  |  |             </div> | 
 |  |  |           </div> | 
 |  |  |           <!-- <div class="bank-card-type">{{ '储蓄卡' }}</div> --> | 
 |  |  |         </div> | 
 |  |  |         <div class="bg-right-bottom"></div> | 
 |  |  |       </div> | 
 |  |  |       <div class="bind-bank-card-tips">目前只支持一张银行卡,如需换卡请先解绑</div> | 
 |  |  |     </div> | 
 |  |  |   </ContentScrollView> | 
 |  |  |   <PageFooter :isOnlyAction="false"> | 
 |  |  |     <PageFooterBtn type="primary" @click="handleUnbind()">解绑银行卡</PageFooterBtn> | 
 |  |  |   </PageFooter> | 
 |  |  |   <BindWalletView | 
 |  |  |     :type="EnumUserBankCardAccess.Bank" | 
 |  |  |     :detail="detail" | 
 |  |  |     @Unbind="handleUnbind" | 
 |  |  |   ></BindWalletView> | 
 |  |  | </template> | 
 |  |  |  | 
 |  |  | <script setup lang="ts"> | 
 |  |  | import { useUserStore } from '@/stores/modules/user'; | 
 |  |  | import { useQuery } from '@tanstack/vue-query'; | 
 |  |  | import { Message, showBankCodeForEnd4 } from '@12333/utils'; | 
 |  |  | import { Message } from '@12333/utils'; | 
 |  |  | import * as userServices from '@12333/services/apiV2/user'; | 
 |  |  | import Taro from '@tarojs/taro'; | 
 |  |  | import { EnumUserBankCardAccess } from '@12333/constants'; | 
 |  |  | import { BindWalletView } from '@12333/components'; | 
 |  |  | import { usePersonalUserBankCard } from '../hooks'; | 
 |  |  | import { goBack } from '@/utils'; | 
 |  |  |  | 
 |  |  | defineOptions({ | 
 |  |  |   name: 'InnerPage', | 
 |  |  | }); | 
 |  |  |  | 
 |  |  | const switchTab = useSwitchTab(); | 
 |  |  | const { updateUserInfo } = useUser(); | 
 |  |  |  | 
 |  |  | const hideBankCode = ref(true); | 
 |  |  |  | 
 |  |  | function changeBankCodeShow() { | 
 |  |  |   hideBankCode.value = !hideBankCode.value; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | const { | 
 |  |  |   isLoading, | 
 |  |  |   isError, | 
 |  |  |   data: detail, | 
 |  |  |   refetch, | 
 |  |  | } = useQuery({ | 
 |  |  |   queryKey: ['userServices/getPersonalUserBankCard'], | 
 |  |  |   queryFn: async () => { | 
 |  |  |     return await userServices.getPersonalUserBankCard( | 
 |  |  |       { access: EnumUserBankCardAccess.Bank }, | 
 |  |  |       { | 
 |  |  |         showLoading: false, | 
 |  |  |       } | 
 |  |  |     ); | 
 |  |  |   }, | 
 |  |  |   placeholderData: () => ({} as API.GetPersonalUserBankCardQueryResult), | 
 |  |  |   onSuccess(data) {}, | 
 |  |  | const { detail } = usePersonalUserBankCard({ | 
 |  |  |   access: EnumUserBankCardAccess.Bank, | 
 |  |  | }); | 
 |  |  |  | 
 |  |  | async function handleUnbind() { | 
 |  |  | 
 |  |  |     if (res) { | 
 |  |  |       Message.success('解绑成功', { | 
 |  |  |         onClosed() { | 
 |  |  |           switchTab({ | 
 |  |  |             url: RouterPath.mine, | 
 |  |  |           }); | 
 |  |  |           updateUserInfo(); | 
 |  |  |           goBack(); | 
 |  |  |         }, | 
 |  |  |       }); | 
 |  |  |     } | 
 |  |  | 
 |  |  |  | 
 |  |  | <style lang="scss"> | 
 |  |  | @import '@/styles/common.scss'; | 
 |  |  |  | 
 |  |  | .bindBankCard-page-wrapper { | 
 |  |  |   .bind-bank-card { | 
 |  |  |     padding-top: 40px; | 
 |  |  |  | 
 |  |  |     .bind-bank-card-wrapper { | 
 |  |  |       margin: 0 auto; | 
 |  |  |       width: 660px; | 
 |  |  |       height: 360px; | 
 |  |  |       padding: 60px 72px; | 
 |  |  |       background: linear-gradient(134deg, #6c7ff6 0%, #7996f7 100%); | 
 |  |  |       box-shadow: 0px 4 10px 5px rgba(122, 151, 248, 0.3); | 
 |  |  |       border-radius: 22px; | 
 |  |  |       position: relative; | 
 |  |  |       box-sizing: border-box; | 
 |  |  |       overflow: hidden; | 
 |  |  |  | 
 |  |  |       .bg-left-top { | 
 |  |  |         position: absolute; | 
 |  |  |         width: 148px; | 
 |  |  |         height: 130px; | 
 |  |  |         background-color: #7c8ef7; | 
 |  |  |         top: 0; | 
 |  |  |         left: 0; | 
 |  |  |         border-radius: 0 0 148px 0; | 
 |  |  |         z-index: 0; | 
 |  |  |       } | 
 |  |  |  | 
 |  |  |       .bind-bank-card-content { | 
 |  |  |         display: flex; | 
 |  |  |         flex-direction: column; | 
 |  |  |         justify-content: space-around; | 
 |  |  |         height: 100%; | 
 |  |  |         position: relative; | 
 |  |  |         z-index: 1; | 
 |  |  |  | 
 |  |  |         .bank-card-name { | 
 |  |  |           font-size: 40px; | 
 |  |  |           font-weight: 600; | 
 |  |  |           color: #ffffff; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         .bank-card-number { | 
 |  |  |           font-size: 32px; | 
 |  |  |           color: #ffffff; | 
 |  |  |           font-weight: 600; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         .bank-card-type { | 
 |  |  |           font-size: 24px; | 
 |  |  |           font-weight: 400; | 
 |  |  |           color: rgba(255, 255, 255, 0.5); | 
 |  |  |         } | 
 |  |  |       } | 
 |  |  |  | 
 |  |  |       .bg-right-bottom { | 
 |  |  |         position: absolute; | 
 |  |  |         width: 306px; | 
 |  |  |         height: 306px; | 
 |  |  |         background: #7d98f7; | 
 |  |  |         left: 360px; | 
 |  |  |         top: 180px; | 
 |  |  |         border-radius: 50%; | 
 |  |  |         z-index: 0; | 
 |  |  |       } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     .bind-bank-card-tips { | 
 |  |  |       margin: 66px auto 0; | 
 |  |  |       font-size: 22px; | 
 |  |  |       font-weight: 400; | 
 |  |  |       text-align: center; | 
 |  |  |       color: boleGetCssVar('text-color', 'secondary'); | 
 |  |  |     } | 
 |  |  |   } | 
 |  |  | } | 
 |  |  | </style> |