| | |
| | | <template> |
| | | <ContentScrollView :paddingH="false"> |
| | | <nut-form :model-value="form" ref="formRef" :rules="rules"> |
| | | <!-- <nut-form :model-value="form" ref="formRef" :rules="rules"> |
| | | <nut-form-item label="营业执照:" class="bole-form-item alignTop" prop="licenseUrl" required> |
| | | <Uploader |
| | | v-model:file-list="form.licenseUrl" |
| | |
| | | type="number" |
| | | /> |
| | | </nut-form-item> |
| | | </nut-form> |
| | | </nut-form> --> |
| | | </ContentScrollView> |
| | | <PageFooter :isOnlyAction="false"> |
| | | <PageFooterBtn type="primary" @click="handleSubmit()" :loading="loading" |
| | | <!-- <PageFooterBtn type="primary" @click="handleSubmit()" :loading="loading" |
| | | >提交认证</PageFooterBtn |
| | | > |
| | | > --> |
| | | </PageFooter> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { useAuthenticationFlow } from '../hooks'; |
| | | // import { useAuthenticationFlow } from '../hooks'; |
| | | import { |
| | | UserCertificationModeEnumV2, |
| | | VerificationCodeBusinessType, |
| | |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | const { form, rules, formRef, handleSubmit, loading } = useAuthenticationFlow({ |
| | | certificationMode: UserCertificationModeEnumV2.LegalPersonPhoneCertification, |
| | | certificationElement: UserCertificationElementEnum.Identity4, |
| | | }); |
| | | // const { form, rules, formRef, handleSubmit, loading } = useAuthenticationFlow({ |
| | | // certificationMode: UserCertificationModeEnumV2.LegalPersonPhoneCertification, |
| | | // certificationElement: UserCertificationElementEnum.Identity4, |
| | | // }); |
| | | |
| | | async function onGetCaptcha(phoneNumber: string) { |
| | | await commonServices.sendPhoneCertificationVerificationCode( |
| | | { |
| | | name: form.legalPersonName, |
| | | identity: form.legalPersonIdNumber, |
| | | mobile: form.legalPersonContactPhone, |
| | | businessType: VerificationCodeBusinessType.UserCertificationPhoneCertification, |
| | | }, |
| | | { showLoading: false } |
| | | ); |
| | | } |
| | | // async function onGetCaptcha(phoneNumber: string) { |
| | | // await commonServices.sendPhoneCertificationVerificationCode( |
| | | // { |
| | | // name: form.legalPersonName, |
| | | // identity: form.legalPersonIdNumber, |
| | | // mobile: form.legalPersonContactPhone, |
| | | // businessType: VerificationCodeBusinessType.UserCertificationPhoneCertification, |
| | | // }, |
| | | // { showLoading: false } |
| | | // ); |
| | | // } |
| | | |
| | | const handleLicenseUrlChange = (response: FileItem) => { |
| | | vatLicense(response, { |
| | | onSuccess(res) { |
| | | let tips: string[] = []; |
| | | res?.name ? (form.enterpriseName = res.name) : tips.push('企业名称'); |
| | | res?.societyCode ? (form.societyCreditCode = res.societyCode) : tips.push('统一社会信用代码'); |
| | | if (tips.length > 0) { |
| | | Message.error(`未能识别到您上传的图片,请重新上传清晰的图片或手动输入${tips.join('和')}`); |
| | | } |
| | | }, |
| | | }); |
| | | }; |
| | | // const handleLicenseUrlChange = (response: FileItem) => { |
| | | // vatLicense(response, { |
| | | // onSuccess(res) { |
| | | // let tips: string[] = []; |
| | | // res?.name ? (form.enterpriseName = res.name) : tips.push('企业名称'); |
| | | // res?.societyCode ? (form.societyCreditCode = res.societyCode) : tips.push('统一社会信用代码'); |
| | | // if (tips.length > 0) { |
| | | // Message.error(`未能识别到您上传的图片,请重新上传清晰的图片或手动输入${tips.join('和')}`); |
| | | // } |
| | | // }, |
| | | // }); |
| | | // }; |
| | | |
| | | function handleFrontImgUrlChange(response: FileItem) { |
| | | // userCredentialVerifyOcrIDCard(response, { |
| | |
| | | <template> |
| | | <ContentScrollView :paddingH="false"> |
| | | <nut-form :model-value="form" ref="formRef" :rules="rules"> |
| | | <!-- <nut-form :model-value="form" ref="formRef" :rules="rules"> |
| | | <nut-form-item label="营业执照:" class="bole-form-item alignTop" prop="licenseUrl" required> |
| | | <Uploader |
| | | v-model:file-list="form.licenseUrl" |
| | |
| | | <span class="primary" @click="downloadPowerAttorneyTemplate">授权书模板下载</span> |
| | | </div> |
| | | </nut-form-item> |
| | | </nut-form> |
| | | </nut-form> --> |
| | | </ContentScrollView> |
| | | <PageFooter :isOnlyAction="false"> |
| | | <PageFooterBtn type="primary" @click="handleSubmit()" :loading="loading" |
| | | <!-- <PageFooterBtn type="primary" @click="handleSubmit()" :loading="loading" |
| | | >提交认证</PageFooterBtn |
| | | > |
| | | > --> |
| | | </PageFooter> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { useAuthenticationFlow, useDownloadPowerAttorneyTemplate } from '../hooks'; |
| | | // import { useAuthenticationFlow, useDownloadPowerAttorneyTemplate } from '../hooks'; |
| | | import { |
| | | UserCertificationModeEnumV2, |
| | | VerificationCodeBusinessType, |
| | |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | const { form, rules, formRef, handleSubmit, loading } = useAuthenticationFlow({ |
| | | certificationMode: UserCertificationModeEnumV2.ProxyPersonPhoneCertification, |
| | | certificationElement: UserCertificationElementEnum.Identity3, |
| | | }); |
| | | // const { form, rules, formRef, handleSubmit, loading } = useAuthenticationFlow({ |
| | | // certificationMode: UserCertificationModeEnumV2.ProxyPersonPhoneCertification, |
| | | // certificationElement: UserCertificationElementEnum.Identity3, |
| | | // }); |
| | | |
| | | const { downloadPowerAttorneyTemplate } = useDownloadPowerAttorneyTemplate(); |
| | | // const { downloadPowerAttorneyTemplate } = useDownloadPowerAttorneyTemplate(); |
| | | |
| | | async function onGetCaptcha(phoneNumber: string) { |
| | | await commonServices.sendPhoneCertificationVerificationCode( |
| | | { |
| | | name: form.proxyPersonName, |
| | | identity: form.proxyPersonIdNumber, |
| | | mobile: form.proxyPersonContactPhone, |
| | | businessType: VerificationCodeBusinessType.UserCertificationPhoneCertification, |
| | | }, |
| | | { showLoading: false } |
| | | ); |
| | | } |
| | | // async function onGetCaptcha(phoneNumber: string) { |
| | | // await commonServices.sendPhoneCertificationVerificationCode( |
| | | // { |
| | | // name: form.proxyPersonName, |
| | | // identity: form.proxyPersonIdNumber, |
| | | // mobile: form.proxyPersonContactPhone, |
| | | // businessType: VerificationCodeBusinessType.UserCertificationPhoneCertification, |
| | | // }, |
| | | // { showLoading: false } |
| | | // ); |
| | | // } |
| | | |
| | | const handleLicenseUrlChange = (response: FileItem) => { |
| | | vatLicense(response, { |
| | | onSuccess(res) { |
| | | let tips: string[] = []; |
| | | res?.name ? (form.enterpriseName = res.name) : tips.push('企业名称'); |
| | | res?.societyCode ? (form.societyCreditCode = res.societyCode) : tips.push('统一社会信用代码'); |
| | | if (tips.length > 0) { |
| | | Message.error(`未能识别到您上传的图片,请重新上传清晰的图片或手动输入${tips.join('和')}`); |
| | | } |
| | | }, |
| | | }); |
| | | }; |
| | | // const handleLicenseUrlChange = (response: FileItem) => { |
| | | // vatLicense(response, { |
| | | // onSuccess(res) { |
| | | // let tips: string[] = []; |
| | | // res?.name ? (form.enterpriseName = res.name) : tips.push('企业名称'); |
| | | // res?.societyCode ? (form.societyCreditCode = res.societyCode) : tips.push('统一社会信用代码'); |
| | | // if (tips.length > 0) { |
| | | // Message.error(`未能识别到您上传的图片,请重新上传清晰的图片或手动输入${tips.join('和')}`); |
| | | // } |
| | | // }, |
| | | // }); |
| | | // }; |
| | | |
| | | function handleFrontImgUrlChange(response: FileItem) { |
| | | // userCredentialVerifyOcrIDCard(response, { |
| | |
| | | <template> |
| | | <PageLayout class="bindBankCard-page-wrapper" :title="'绑定银行卡'" developing> |
| | | <PageLayout class="bindBankCard-page-wrapper" :title="'绑定银行卡'"> |
| | | <InnerPage></InnerPage> |
| | | </PageLayout> |
| | | </template> |
New file |
| | |
| | | import { useQuery } from '@tanstack/vue-query'; |
| | | import * as userServices from '@12333/services/apiV2/user'; |
| | | import { MaybeRef, unref } from 'vue'; |
| | | |
| | | type UsePersonalUserTransactionOptions = { |
| | | id?: MaybeRef<string>; |
| | | }; |
| | | |
| | | export function useGetPersonalUserTransaction(options: UsePersonalUserTransactionOptions = {}) { |
| | | const { id } = options; |
| | | |
| | | const { |
| | | isLoading, |
| | | isError, |
| | | data: detail, |
| | | refetch, |
| | | } = useQuery({ |
| | | queryKey: ['userServices/getPersonalUserTransaction', id], |
| | | queryFn: async () => { |
| | | return await userServices.getPersonalUserTransaction( |
| | | { id: unref(id) }, |
| | | { |
| | | showLoading: false, |
| | | } |
| | | ); |
| | | }, |
| | | placeholderData: () => ({} as API.GetPersonalUserTransactionQueryResult), |
| | | enabled: computed(() => !!unref(id)), |
| | | }); |
| | | |
| | | return { |
| | | detail, |
| | | }; |
| | | } |
| | |
| | | <template> |
| | | <!-- <ProTabs |
| | | <ProTabs |
| | | v-model="queryState.type" |
| | | name="home-tab" |
| | | :showPaneContent="false" |
| | |
| | | <ProTabPane :title="`全部`" :pane-key="0"></ProTabPane> |
| | | <ProTabPane :title="`收入`" :pane-key="EnumUserWalletTransactionType.Income"></ProTabPane> |
| | | <ProTabPane :title="`提现`" :pane-key="EnumUserWalletTransactionType.Withdraw"></ProTabPane> |
| | | </ProTabs> --> |
| | | </ProTabs> |
| | | <List> |
| | | <IncomeDetailListItem :item="`收入:¥${toThousand(sumIncome)} `"> |
| | | <template #title> |
| | |
| | | page: pageParam, |
| | | orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }], |
| | | }, |
| | | type: EnumUserWalletTransactionType.Income, |
| | | }; |
| | | // if (Number(queryState.type)) { |
| | | // params.type = queryState.type; |
| | | // } |
| | | if (Number(queryState.type)) { |
| | | params.type = queryState.type; |
| | | } |
| | | if (queryState.month) { |
| | | params.createdTimeStart = dayjs(queryState.month).startOf('month').format('YYYY-MM-DD'); |
| | | params.createdTimeEnd = dayjs(queryState.month).endOf('month').format('YYYY-MM-DD'); |
| | |
| | | ); |
| | | |
| | | function goIncomeDetailInfo(row: API.GetPersonalUserTransactionsQueryResultItem) { |
| | | if (row.type === EnumUserWalletTransactionType.Income) { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.incomeDetailInfo}?id=${row.id}`, |
| | | }); |
| | | // Taro.navigateTo({ |
| | | // url: `${RouterPath.withdrawDetailInfo}`, |
| | | // }); |
| | | } |
| | | if (row.type === EnumUserWalletTransactionType.Withdraw) { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.withdrawDetailInfo}?id=${row.id}`, |
| | | }); |
| | | } |
| | | } |
| | | </script> |
| | | |
| | |
| | | |
| | | <script setup lang="ts"> |
| | | import { List, ListItem, WithdrawMoneyCard } from '@12333/components'; |
| | | import { EnumUserWalletTransactionType, EnumUserWalletTransactionTypeText } from '@12333/constants'; |
| | | import { EnumUserWalletTransactionTypeText } from '@12333/constants'; |
| | | import Taro from '@tarojs/taro'; |
| | | import * as userServices from '@12333/services/apiV2/user'; |
| | | import { useQuery } from '@tanstack/vue-query'; |
| | | import dayjs from 'dayjs'; |
| | | import { toThousand } from '@12333/utils'; |
| | | import { useGetPersonalUserTransaction } from '../hooks'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | |
| | | const router = Taro.useRouter(); |
| | | const id = router.params?.id; |
| | | |
| | | const { |
| | | isLoading, |
| | | isError, |
| | | data: detail, |
| | | refetch, |
| | | } = useQuery({ |
| | | queryKey: ['userServices/getPersonalUserTransaction', id], |
| | | queryFn: async () => { |
| | | return await userServices.getPersonalUserTransaction( |
| | | { id: id }, |
| | | { |
| | | showLoading: false, |
| | | } |
| | | ); |
| | | }, |
| | | placeholderData: () => ({} as API.GetPersonalUserTransactionQueryResult), |
| | | onSuccess(data) { |
| | | // if (data.isExistTradeChatRecord) setTrue(); |
| | | }, |
| | | const { detail } = useGetPersonalUserTransaction({ |
| | | id: id, |
| | | }); |
| | | </script> |
| | | |
| | |
| | | <template> |
| | | <!-- <div class="mine-wallet-balance"> |
| | | <WithdrawMoneyCard :money="100" title="账户余额(元)"></WithdrawMoneyCard> |
| | | <div class="mine-wallet-balance"> |
| | | <WithdrawMoneyCard :money="userDetail.balance" title="账户余额(元)"></WithdrawMoneyCard> |
| | | <nut-button type="primary" class="mine-wallet-balance-btn" @click="goWithdraw">提现</nut-button> |
| | | </div> --> |
| | | </div> |
| | | <List> |
| | | <ListItem title="收入明细" @click="goIncomeDetail"> </ListItem> |
| | | <!-- <ListItem title="支付宝账户" @click="goWithdraw"> |
| | | <ListItem title="银行卡" @click="goBankBind"> |
| | | <template #extra> |
| | | <div class="bind-bank-card"> |
| | | {{ isBinding ? '已绑定' : '未绑定、立即绑定' }} |
| | | </div> |
| | | </template> |
| | | </ListItem> --> |
| | | </ListItem> |
| | | </List> |
| | | </template> |
| | | |
| | |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | const { isCertified } = useUser(); |
| | | const { userDetail } = useUser(); |
| | | |
| | | const isBinding = ref(false); |
| | | |
| | |
| | | }, |
| | | { message: '完成实名认证后才可提现' } |
| | | ); |
| | | // const goBankBind = useAccessReal( |
| | | // () => { |
| | | // Taro.navigateTo({ |
| | | // url: `${isBinding.value ? RouterPath.bindBankCard : RouterPath.unboundBankCard}`, |
| | | // }); |
| | | // }, |
| | | // { message: '完成实名认证后才可进行银行卡绑定' } |
| | | // ); |
| | | const goBankBind = useAccessReal( |
| | | () => { |
| | | Taro.navigateTo({ |
| | | url: `${isBinding.value ? RouterPath.bindBankCard : RouterPath.unboundBankCard}`, |
| | | }); |
| | | }, |
| | | { message: '完成实名认证后才可进行银行卡绑定' } |
| | | ); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | |
| | | <template> |
| | | <PageLayout class="unboundBankCard-page-wrapper" title="绑定银行卡" has-border developing> |
| | | <PageLayout class="unboundBankCard-page-wrapper" title="绑定银行卡" has-border> |
| | | <InnerPage></InnerPage> |
| | | </PageLayout> |
| | | </template> |
| | |
| | | <nut-radio label="alipay"> {{ '提现到支付宝' }} </nut-radio> |
| | | <img :src="IconWalletAlipay" class="withdraw-icon" /> |
| | | </div> |
| | | <!-- <div class="withdraw-form-item"> |
| | | <div class="withdraw-form-item"> |
| | | <nut-radio label="wechat"> {{ '提现到微信' }} </nut-radio> |
| | | <img :src="IconWalletWechat" class="withdraw-icon" /> |
| | | </div> |
| | | <div class="withdraw-form-item"> |
| | | <nut-radio label="bank"> {{ '提现到银行卡' }} </nut-radio> |
| | | <img :src="IconWalletBank" class="withdraw-icon" /> |
| | | </div> --> |
| | | </div> |
| | | </nut-radio-group> |
| | | </nut-form-item> |
| | | <template v-if="form.alipay === 'alipay'"> |
| | | <nut-form-item label="支付宝户名:" class="bole-form-item" prop="name"> |
| | | <nut-input readonly v-model.trim="form.name" placeholder="请输入支付宝户名" /> |
| | | </nut-form-item> |
| | | <nut-form-item label="身份证号:" class="bole-form-item" prop="name"> |
| | | <!-- <nut-form-item label="身份证号:" class="bole-form-item" prop="name"> |
| | | <nut-input readonly v-model.trim="form.name" placeholder="请输入身份证号" /> |
| | | </nut-form-item> |
| | | </nut-form-item> --> |
| | | <nut-form-item label="支付宝账号:" class="bole-form-item" prop="phoneNumber"> |
| | | <nut-input v-model.trim="form.name" placeholder="请输入支付宝账号/手机号" /> |
| | | </nut-form-item> |
| | | </template> |
| | | </nut-form> |
| | | </ContentScrollView> |
| | | <PageFooter> |
| | |
| | | <template> |
| | | <WithdrawMoneyCard :money="100" :title="`提现-${'支付宝'}提现`"></WithdrawMoneyCard> |
| | | <WithdrawMoneyCard |
| | | :money="detail?.amount" |
| | | :title="EnumUserWalletTransactionTypeText[detail.type]" |
| | | ></WithdrawMoneyCard> |
| | | <List> |
| | | <ListItem title="提现单号" :show-arrow="false"> |
| | | <template #extra> |
| | | <div class="income-detail-info-value">{{ '5893485943859843095843' }}</div> |
| | | <div class="income-detail-info-value">{{ detail?.code }}</div> |
| | | </template> |
| | | </ListItem> |
| | | <ListItem title="提现金额" :show-arrow="false"> |
| | | <template #extra> |
| | | <div class="income-detail-info-value">{{ '宁波人力无忧' }}</div> |
| | | <div class="income-detail-info-value">{{ toThousand(detail?.amount) }}</div> |
| | | </template> |
| | | </ListItem> |
| | | <ListItem title="提现方式" :show-arrow="false"> |
| | | <template #extra> |
| | | <div class="income-detail-info-value">{{ '2024.11.13' }}</div> |
| | | </template> |
| | | </ListItem> |
| | | <ListItem title="服务费" :show-arrow="false"> |
| | | <template #extra> |
| | | <div class="income-detail-info-value">{{ '33.33元' }}</div> |
| | | <div class="income-detail-info-value"> |
| | | {{ detail.type ? EnumUserWalletTransactionTypeText[detail.type] : '' }} |
| | | </div> |
| | | </template> |
| | | </ListItem> |
| | | <ListItem title="支付宝户名" :show-arrow="false"> |
| | |
| | | <div class="income-detail-info-value">{{ '5893485943859843095843' }}</div> |
| | | </template> |
| | | </ListItem> |
| | | <ListItem title="服务费" :show-arrow="false"> |
| | | <template #extra> |
| | | <div class="income-detail-info-value">{{ toThousand(detail?.serviceFee) }}</div> |
| | | </template> |
| | | </ListItem> |
| | | <ListItem title="实际到账" :show-arrow="false"> |
| | | <template #extra> |
| | | <div class="income-detail-info-value">{{ '33.33元' }}</div> |
| | | <div class="income-detail-info-value">{{ toThousand(detail?.actualAmount) }}</div> |
| | | </template> |
| | | </ListItem> |
| | | </List> |
| | |
| | | |
| | | <script setup lang="ts"> |
| | | import { List, ListItem, WithdrawMoneyCard } from '@12333/components'; |
| | | import { useUserStore } from '@/stores/modules/user'; |
| | | import { EnumUserWalletTransactionTypeText } from '@12333/constants'; |
| | | import Taro from '@tarojs/taro'; |
| | | import { useGetPersonalUserTransaction } from '../hooks'; |
| | | import { toThousand } from '@12333/utils'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | const userStore = useUserStore(); |
| | | const router = Taro.useRouter(); |
| | | const id = router.params?.id; |
| | | |
| | | const { detail } = useGetPersonalUserTransaction({ |
| | | id: id, |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss"> |