| | |
| | | }, |
| | | { |
| | | root: 'subpackages/my', |
| | | pages: ['shareQrcode/shareQrcode', 'dashboard/dashboard'], |
| | | pages: [ |
| | | 'shareQrcode/shareQrcode', |
| | | 'dashboard/dashboard', |
| | | 'applyAgent/applyAgent', |
| | | 'applyResult/applyResult', |
| | | 'promotionQrcode/promotionQrcode', |
| | | ], |
| | | }, |
| | | ], |
| | | // preloadRule: { |
| | |
| | | } |
| | | |
| | | .page-footer-inner { |
| | | padding: 24px 0; |
| | | padding: 24px boleGetCssVar('size', 'body-padding-h'); |
| | | width: 100%; |
| | | display: flex; |
| | | box-sizing: border-box; |
| | | align-items: center; |
| | | } |
| | | |
| | | &.isOnlyAction { |
| | | /* &.isOnlyAction { |
| | | .page-footer-inner { |
| | | padding: 16px 0; |
| | | padding: 20px 0; |
| | | align-items: flex-start; |
| | | } |
| | | } |
| | | } */ |
| | | |
| | | .is-button-footer { |
| | | /* .is-button-footer { |
| | | display: flex; |
| | | width: 100%; |
| | | height: 100%; |
| | |
| | | box-shadow: 0px 3px 7px 0px rgba(240, 67, 73, 0.35); |
| | | } |
| | | } |
| | | } |
| | | } */ |
| | | |
| | | .common-page-footer { |
| | | /* .common-page-footer { |
| | | display: flex; |
| | | width: 100%; |
| | | height: 100%; |
| | |
| | | margin: 0; |
| | | margin-left: 20px; |
| | | } |
| | | } |
| | | } */ |
| | | } |
| | | </style> |
| | |
| | | |
| | | .page-footer-btn { |
| | | flex: 1; |
| | | min-width: 0; |
| | | width: 100%; |
| | | height: 88px; |
| | | font-size: 32px; |
| | | margin: 0 28px; |
| | | border-radius: 44px; |
| | | |
| | | & + .page-footer-btn { |
| | | margin-left: 28px; |
| | | } |
| | | |
| | | &.nut-button--plain { |
| | | border-width: 1px; |
| | | } |
| | |
| | | HomePageBg: `${OssBasePath}/lifePayment/assets/common/icon-home-page-bg.png`, |
| | | DataPageBg: `${OssBasePath}/lifePayment/assets/common/icon-data-page-bg.png`, |
| | | MinePageBg: `${OssBasePath}/lifePayment/assets/common/icon-mine-page-bg.png`, |
| | | PromotionQrcodePageBg: `${OssBasePath}/lifePayment/assets/common/icon-promotion-qrcode-page-bg.png`, |
| | | PhoneBillRechargePageBg: `${OssBasePath}/lifePayment/assets/common/icon-phoneBillRecharge-page-bg.png`, |
| | | |
| | | PromotionQrcodeContentBG: `${OssBasePath}/lifePayment/assets/common/icon-promotion-qrcode-content-bg.png`, |
| | | }, |
| | | mine: { |
| | | // Bg: `${OssBasePath}/matchMakingMini/assets/mine/icon-bg.png`, |
| | |
| | | editPhoneUserAccount = '/subpackages/userAccount/editPhoneUserAccount/editPhoneUserAccount', |
| | | editElectricUserAccount = '/subpackages/userAccount/editElectricUserAccount/editElectricUserAccount', |
| | | shareQrcode = '/subpackages/my/shareQrcode/shareQrcode', |
| | | promotionQrcode = '/subpackages/my/promotionQrcode/promotionQrcode', |
| | | dashboard = '/subpackages/my/dashboard/dashboard', |
| | | applyAgent = '/subpackages/my/applyAgent/applyAgent', |
| | | applyResult = '/subpackages/my/applyResult/applyResult', |
| | | } |
| | |
| | | <ListItemV2 :icon="IconMineDataBoard" title="数据看板" @click="goDashboard"></ListItemV2> |
| | | <ListItemV2 |
| | | :icon="IconMinePromotion" |
| | | title="推广二维码" |
| | | title="渠道二维码" |
| | | @click="goShareQrcode" |
| | | ></ListItemV2> |
| | | <ListItemV2 |
| | | :icon="IconMinePromotion" |
| | | title="推广二维码" |
| | | @click="goPromotionQrcode" |
| | | ></ListItemV2> |
| | | </template> |
| | | <ListItemV2 |
| | |
| | | const goOrderManage = useAccessLogin(() => goPage(RouterPath.order)); |
| | | const goUserAccountList = useAccessLogin(() => goPage(RouterPath.userAccountList)); |
| | | const goShareQrcode = useAccessLogin(() => goPage(RouterPath.shareQrcode)); |
| | | const goPromotionQrcode = useAccessLogin(() => goPage(RouterPath.promotionQrcode)); |
| | | const goDashboard = useAccessLogin(() => goPage(RouterPath.dashboard)); |
| | | |
| | | async function goLogout() { |
New file |
| | |
| | | export default definePageConfig({ |
| | | disableScroll: true, |
| | | }); |
New file |
| | |
| | | <template> |
| | | <PageLayout title="立即申请" class="applyAgent-page-wrapper" hasBgColor :needAuth="false"> |
| | | <ContentScrollView hasPaddingTop style="background-color: transparent"> |
| | | <ApplyAgentView @submit="submit" ref="orderApplyRefundViewRef" /> |
| | | </ContentScrollView> |
| | | <PageFooter> |
| | | <PageFooterBtn type="primary" @click="handleSubmit">提交申请</PageFooterBtn> |
| | | </PageFooter> |
| | | </PageLayout> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { PageLayout } from '@/components'; |
| | | import { RouterPath } from '@/constants'; |
| | | import { ApplyAgentView } from '@life-payment/components'; |
| | | import { goBack } from '@/utils'; |
| | | import type { ComponentExposed } from 'vue-component-type-helpers'; |
| | | |
| | | defineOptions({ |
| | | name: 'applyAgent', |
| | | }); |
| | | |
| | | const applyAgentViewRef = |
| | | useTemplateRef<ComponentExposed<typeof ApplyAgentView>>('applyAgentViewRef'); |
| | | |
| | | function handleSubmit() { |
| | | applyAgentViewRef.value?.handleSubmit?.(); |
| | | } |
| | | |
| | | function submit() { |
| | | RouteHelper.navigateTo({ |
| | | url: RouterPath.applyResult, |
| | | }); |
| | | } |
| | | </script> |
New file |
| | |
| | | export default definePageConfig({ |
| | | disableScroll: true, |
| | | }); |
New file |
| | |
| | | <template> |
| | | <PageLayout title="立即申请" class="applyAgent-page-wrapper" hasBgColor :needAuth="false"> |
| | | <ResultWithoutBG |
| | | remark="我们的运营人员会在5个工作日内联系您沟通代理事宜,请保持电话畅通!" |
| | | tips="注:成功招募代理商,还有最高1000元奖励,详询请咨询:16505012333" |
| | | title="提交成功" |
| | | @generate="generate" |
| | | ></ResultWithoutBG> |
| | | </PageLayout> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { PageLayout } from '@/components'; |
| | | import { ResultWithoutBG } from '@life-payment/components'; |
| | | |
| | | defineOptions({ |
| | | name: 'applyAgent', |
| | | }); |
| | | |
| | | function generate() { |
| | | RouteHelper.navigateTo({ |
| | | url: RouterPath.promotionQrcode, |
| | | }); |
| | | } |
| | | </script> |
New file |
| | |
| | | <template> |
| | | <ContentView> |
| | | <div class="promotion-qrcode-content" :style="barStyle"> |
| | | <div |
| | | class="promotion-qrcode-content-qrcode" |
| | | :style="{ backgroundImage: `url(${OssAssets.common.PromotionQrcodeContentBG})` }" |
| | | > |
| | | <ShareQrcodeView :channles-num="userChannles[0]?.channlesNum" :size="148" /> |
| | | <div class="promotion-qrcode-content-qrcode-tips">长按二维码分享好友</div> |
| | | </div> |
| | | <div class="promotion-qrcode-content-btn">点击下载二维码</div> |
| | | </div> |
| | | </ContentView> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { ShareQrcodeView, ResultWithoutBG } from '@life-payment/components'; |
| | | import { useLifeRechargeContext } from '@life-payment/core-vue'; |
| | | import { isWeb } from '@/utils/env'; |
| | | import { useSystemStore } from '@/stores/modules/system'; |
| | | import { CSSProperties } from 'vue'; |
| | | import { OssAssets } from '@/constants'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | // const { virtualUserInfo } = useUser(); |
| | | const { blLifeRecharge } = useLifeRechargeContext(); |
| | | |
| | | const userChannles = computed(() => |
| | | (blLifeRecharge.accountModel.userChannles ?? []).filter( |
| | | (x) => x.switchType !== blLifeRecharge.constants.LifePaySwitchTypeEnum.微信小程序 |
| | | ) |
| | | ); |
| | | |
| | | const channlesType = ref(userChannles.value[0]?.channlesNum ?? ''); |
| | | |
| | | watch(userChannles, (val) => { |
| | | channlesType.value = val?.[0]?.channlesNum ?? ''; |
| | | }); |
| | | |
| | | const systemStore = useSystemStore(); |
| | | |
| | | const barStyle = computed( |
| | | () => |
| | | ({ |
| | | paddingTop: systemStore.info.statusBarHeight + 'px', |
| | | backgroundImage: `url(${OssAssets.common.PromotionQrcodeContentBG})`, |
| | | } as CSSProperties) |
| | | ); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | |
| | | .promotion-qrcode-page-wrapper { |
| | | .promotion-qrcode-content { |
| | | margin-top: 306px; |
| | | width: 100%; |
| | | height: 788px; |
| | | background-size: 100% 100%; |
| | | background-repeat: no-repeat; |
| | | display: flex; |
| | | flex-direction: column; |
| | | align-items: center; |
| | | justify-content: center; |
| | | } |
| | | |
| | | .promotion-qrcode-content-qrcode { |
| | | width: 432px; |
| | | height: 432px; |
| | | display: flex; |
| | | flex-direction: column; |
| | | align-items: center; |
| | | background-size: 100% 100%; |
| | | background-repeat: no-repeat; |
| | | position: relative; |
| | | } |
| | | |
| | | .promotion-qrcode-content-qrcode-tips { |
| | | font-size: 32px; |
| | | font-weight: bold; |
| | | position: absolute; |
| | | bottom: -22px; |
| | | background: linear-gradient(0.25turn, #63654c 0%, #101f23 39%, #101f23 55%, #0082d3 100%); |
| | | -webkit-background-clip: text; |
| | | -webkit-text-fill-color: transparent; |
| | | } |
| | | |
| | | .promotion-qrcode-content-btn { |
| | | width: 432px; |
| | | height: 96px; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | background-color: boleGetCssVar('color', 'primary'); |
| | | margin-top: 70px; |
| | | border-radius: 12px; |
| | | font-size: 38px; |
| | | font-weight: 500; |
| | | color: #ffffff; |
| | | } |
| | | |
| | | .share-qrcode-view { |
| | | margin-top: 60px; |
| | | padding: 0; |
| | | } |
| | | } |
| | | </style> |
New file |
| | |
| | | export default definePageConfig({ |
| | | disableScroll: true, |
| | | }); |
New file |
| | |
| | | <template> |
| | | <PageLayoutWithBg class="promotion-qrcode-page-wrapper"> |
| | | <template #navigationBar> |
| | | <TransparentNavigationBar :title="'推广二维码'" :is-absolute="false"> |
| | | </TransparentNavigationBar> |
| | | </template> |
| | | <template #bg> |
| | | <img :src="OssAssets.common.PromotionQrcodePageBg" class="promotion-qrcode-page-bg" /> |
| | | </template> |
| | | <InnerPage /> |
| | | </PageLayoutWithBg> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import InnerPage from './InnerPage.vue'; |
| | | import { OssAssets } from '@/constants'; |
| | | |
| | | defineOptions({ |
| | | name: 'shareQrcode', |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | |
| | | .promotion-qrcode-page-wrapper { |
| | | .promotion-qrcode-page-bg { |
| | | position: fixed; |
| | | z-index: -1; |
| | | top: 0; |
| | | left: 0; |
| | | width: 100%; |
| | | height: 100%; |
| | | object-fit: cover; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <PageLayout title="推广二维码" class="shareQrcode-page-wrapper" hasBorder> |
| | | <PageLayout title="渠道二维码" class="shareQrcode-page-wrapper" hasBorder> |
| | | <InnerPage /> |
| | | </PageLayout> |
| | | </template> |
| | |
| | | <template> |
| | | <ContentScrollView :paddingH="false"> |
| | | <OrderApplyRefundView :id="id" @submitApplyRefund="submitApplyRefund" /> |
| | | <ContentScrollView hasPaddingTop style="background-color: transparent"> |
| | | <OrderApplyRefundView |
| | | :id="id" |
| | | @submitApplyRefund="submitApplyRefund" |
| | | ref="orderApplyRefundViewRef" |
| | | /> |
| | | </ContentScrollView> |
| | | <PageFooter> |
| | | <PageFooterBtn type="primary" @click="handleSubmit">提交</PageFooterBtn> |
| | | </PageFooter> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import Taro from '@tarojs/taro'; |
| | | import { OrderApplyRefundView } from '@life-payment/components'; |
| | | import { goBack } from '@/utils'; |
| | | import type { ComponentExposed } from 'vue-component-type-helpers'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | |
| | | const router = Taro.useRouter(); |
| | | const id = router.params?.id ?? ''; |
| | | |
| | | const orderApplyRefundViewRef = |
| | | useTemplateRef<ComponentExposed<typeof OrderApplyRefundView>>('orderApplyRefundViewRef'); |
| | | |
| | | function handleSubmit() { |
| | | orderApplyRefundViewRef.value?.handleSubmit?.(); |
| | | } |
| | | |
| | | function submitApplyRefund() { |
| | | goBack(); |
| | | } |
| | |
| | | <template> |
| | | <PageLayout title="申请退款" class="orderApplyRefund-page-wrapper" hasBorder> |
| | | <PageLayout title="申请退款" class="orderApplyRefund-page-wrapper" hasBgColor> |
| | | <InnerPage /> |
| | | </PageLayout> |
| | | </template> |
| | |
| | | <template> |
| | | <ContentScrollView hasPaddingTop style="background-color: transparent"> |
| | | <EditElectricUserAccount :id="id" @success="handleSuccess" /> |
| | | <EditElectricUserAccount :id="id" @success="handleSuccess" ref="editElectricUserAccountRef" /> |
| | | </ContentScrollView> |
| | | <PageFooter> |
| | | <PageFooterBtn type="primary" @click="handleSave">保存</PageFooterBtn> |
| | | </PageFooter> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import Taro from '@tarojs/taro'; |
| | | import { EditElectricUserAccount } from '@life-payment/components'; |
| | | import { goBack } from '@/utils'; |
| | | import type { ComponentExposed } from 'vue-component-type-helpers'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | |
| | | const router = Taro.useRouter(); |
| | | const id = router.params?.id ?? ''; |
| | | |
| | | const editElectricUserAccountRef = useTemplateRef<ComponentExposed<typeof EditElectricUserAccount>>( |
| | | 'editElectricUserAccountRef' |
| | | ); |
| | | |
| | | function handleSave() { |
| | | editElectricUserAccountRef.value?.handleSave?.(); |
| | | } |
| | | |
| | | function handleSuccess() { |
| | | goBack(); |
| | | } |
| | |
| | | <template> |
| | | <ContentScrollView hasPaddingTop style="background-color: transparent"> |
| | | <EditPhoneUserAccount :id="id" @success="handleSuccess" /> |
| | | <EditPhoneUserAccount :id="id" @success="handleSuccess" ref="editPhoneUserAccountRef" /> |
| | | </ContentScrollView> |
| | | <PageFooter> |
| | | <PageFooterBtn type="primary" @click="handleSave">保存</PageFooterBtn> |
| | | </PageFooter> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import Taro from '@tarojs/taro'; |
| | | import { EditPhoneUserAccount } from '@life-payment/components'; |
| | | import { goBack } from '@/utils'; |
| | | import type { ComponentExposed } from 'vue-component-type-helpers'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | |
| | | const router = Taro.useRouter(); |
| | | const id = router.params?.id ?? ''; |
| | | |
| | | const editPhoneUserAccountRef = |
| | | useTemplateRef<ComponentExposed<typeof EditPhoneUserAccount>>('editPhoneUserAccountRef'); |
| | | |
| | | function handleSave() { |
| | | editPhoneUserAccountRef.value?.handleSave?.(); |
| | | } |
| | | |
| | | function handleSuccess() { |
| | | goBack(); |
| | | } |
| | |
| | | <script setup lang="ts"> |
| | | import { computed } from 'vue'; |
| | | import { OssAssets } from '../../constants/img'; |
| | | import { Button as NutButton } from '@nutui/nutui-taro'; |
| | | |
| | | defineOptions({ |
| | | name: 'Result', |
New file |
| | |
| | | <template> |
| | | <div class="result-without-bg-wrapper" v-bind="$attrs"> |
| | | <div class="result-without-bg-content"> |
| | | <img class="result-without-bg-content-icon" :src="OssAssets.result.Successv2" /> |
| | | <div class="result-without-bg-content-title">{{ title }}</div> |
| | | <div class="result-without-bg-content-remark"> |
| | | <slot name="remark">{{ remark }} </slot> |
| | | </div> |
| | | </div> |
| | | <div class="result-without-bg-wrapper-actions"> |
| | | <slot name="actions"> |
| | | <div class="chunk-form-actions"> |
| | | <nut-button class="recharge-button" type="primary" @click="emit('generate')"> |
| | | <div class="recharge-button-inner"> |
| | | <div class="recharge-button-text">生成我的推广码</div> |
| | | </div> |
| | | </nut-button> |
| | | </div> |
| | | </slot> |
| | | </div> |
| | | <div class="result-without-bg-wrapper-tips"> |
| | | <slot name="tips">{{ tips }} </slot> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { OssAssets } from '../../constants/img'; |
| | | import { Button as NutButton } from '@nutui/nutui-taro'; |
| | | |
| | | defineOptions({ |
| | | name: 'ResultWithoutBG', |
| | | }); |
| | | |
| | | type Props = { |
| | | title?: string; |
| | | type?: 'success' | 'fail'; |
| | | tips?: string; |
| | | remark?: string; |
| | | }; |
| | | |
| | | const props = withDefaults(defineProps<Props>(), {}); |
| | | |
| | | const emit = defineEmits<{ |
| | | (e: 'generate'): void; |
| | | }>(); |
| | | </script> |
| | |
| | | |
| | | result: { |
| | | Success: `${OssBasePath}/lifePayment/assets/common/icon-result-success.png`, |
| | | Successv2: `${OssBasePath}/lifePayment/assets/common/icon-result-successv2.png`, |
| | | Fail: `${OssBasePath}/lifePayment/assets/common/icon-result-fail.png`, |
| | | }, |
| | | }; |
| | |
| | | export { default as RechargeResultView } from './views/RechargeResultView/RechargeResultView.vue'; |
| | | export { default as Result } from './components/Result/Result.vue'; |
| | | export { default as ResultWithTips } from './components/Result/ResultWithTips.vue'; |
| | | export { default as ResultWithoutBG } from './components/Result/ResultWithoutBG.vue'; |
| | | export { default as PhoneOrder } from './views/Order/components/PhoneOrder.vue'; |
| | | export { default as ElectricOrder } from './views/Order/components/ElectricOrder.vue'; |
| | | export { default as GasOrder } from './views/Order/components/GasOrder.vue'; |
| | |
| | | export { default as EditGasUserAccount } from './views/userAccount/EditGasUserAccount.vue'; |
| | | export { default as ShareQrcodeView } from './views/Mine/ShareQrcodeView.vue'; |
| | | export { default as Dashboard } from './views/Mine/Dashboard.vue'; |
| | | export { default as ApplyAgentView } from './views/Mine/ApplyAgentView.vue'; |
| | | export * from './utils'; |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | .result-without-bg-wrapper { |
| | | margin-top: 32px; |
| | | padding: 0 40px; |
| | | |
| | | .result-without-bg-content { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | flex-direction: column; |
| | | |
| | | .result-without-bg-content-icon { |
| | | width: 320px; |
| | | height: 320px; |
| | | margin-bottom: 22px; |
| | | } |
| | | |
| | | .result-without-bg-content-title { |
| | | font-size: 48px; |
| | | color: boleGetCssVar('text-color', 'primary'); |
| | | font-weight: bold; |
| | | margin-bottom: 12px; |
| | | line-height: 68px; |
| | | } |
| | | |
| | | .result-without-bg-content-remark { |
| | | font-size: 32px; |
| | | line-height: 48px; |
| | | color: boleGetCssVar('text-color', 'regular'); |
| | | font-weight: 500; |
| | | text-align: center; |
| | | padding: 0 32px; |
| | | margin-bottom: 120px; |
| | | } |
| | | } |
| | | |
| | | .result-without-bg-wrapper-tips { |
| | | font-size: 30px; |
| | | line-height: 48px; |
| | | color: #ff9e25; |
| | | margin-top: 26px; |
| | | padding: 0 20px; |
| | | } |
| | | } |
New file |
| | |
| | | <template> |
| | | <NutForm |
| | | :model-value="form" |
| | | ref="formRef" |
| | | :rules="rules" |
| | | label-position="top" |
| | | class="order-bill-recharge phone chunk-form" |
| | | > |
| | | <NutFormItem label="公司名称" class="bole-form-item" prop="companyName"> |
| | | <NutInput |
| | | v-model.trim="form.companyName" |
| | | class="bole-input-text" |
| | | placeholder="请填写您的公司名称" |
| | | type="text" |
| | | /> |
| | | </NutFormItem> |
| | | <NutFormItem label="姓名" class="bole-form-item" prop="name" required> |
| | | <NutInput |
| | | v-model.trim="form.name" |
| | | class="bole-input-text" |
| | | placeholder="请填写您的姓名" |
| | | type="text" |
| | | /> |
| | | </NutFormItem> |
| | | <NutFormItem label="联系方式" class="bole-form-item" prop="phoneNumber" required> |
| | | <NutInput |
| | | v-model.trim="form.phoneNumber" |
| | | class="bole-input-text" |
| | | placeholder="请填写您的联系方式" |
| | | type="text" |
| | | /> |
| | | </NutFormItem> |
| | | <NutFormItem label="意向代理类型 " class="bole-form-item" prop="type" required> |
| | | <ChooseInputWithPicker |
| | | v-model="form.type" |
| | | placeholder="请选择您想申请的代理类型" |
| | | :value-enum="[]" |
| | | enum-label-key="gasOrgName" |
| | | enum-value-key="gasOrgCode" |
| | | /> |
| | | </NutFormItem> |
| | | <NutFormItem label="客户资源" class="bole-form-item" prop="refundApplyRemark" required> |
| | | <NutTextarea |
| | | placeholder="请填写您拥有的客户资源" |
| | | placeholderClass="bole-input-text-placeholder" |
| | | autoSize |
| | | class="bole-input-textarea" |
| | | v-model="form.refundApplyRemark" |
| | | :max-length="200" |
| | | limit-show |
| | | > |
| | | </NutTextarea> |
| | | </NutFormItem> |
| | | </NutForm> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { |
| | | Form as NutForm, |
| | | FormItem as NutFormItem, |
| | | Input as NutInput, |
| | | Textarea as NutTextarea, |
| | | } from '@nutui/nutui-taro'; |
| | | import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types'; |
| | | import { reactive, ref, computed } from 'vue'; |
| | | import { useLifeRechargeContext } from '@life-payment/core-vue'; |
| | | import { FormValidator } from '../../utils'; |
| | | import ChooseInputWithPicker from '../../components/Input/ChooseInputWithPicker.vue'; |
| | | |
| | | defineOptions({ |
| | | name: 'ApplyAgentView', |
| | | }); |
| | | |
| | | const emit = defineEmits<{ |
| | | (e: 'submit'): void; |
| | | }>(); |
| | | |
| | | const form = reactive({ |
| | | companyName: '', |
| | | name: '', |
| | | phoneNumber: '', |
| | | type: '', |
| | | refundApplyRemark: '', |
| | | }); |
| | | |
| | | const rules = reactive<FormRules>({ |
| | | name: [{ required: true, message: '请填写您的姓名' }], |
| | | phoneNumber: [ |
| | | { required: true, message: '请填写您的联系方式' }, |
| | | { validator: FormValidator.validatorPhoneNumber, message: '请输入正确的手机号' }, |
| | | ], |
| | | refundApplyRemark: [{ required: true, message: '请输入退款原因' }], |
| | | }); |
| | | |
| | | const { blLifeRecharge } = useLifeRechargeContext(); |
| | | |
| | | const formRef = ref<any>(null); |
| | | |
| | | function handleSubmit() { |
| | | if (!formRef.value) return; |
| | | formRef.value.validate().then(({ valid, errors }: any) => { |
| | | if (valid) { |
| | | refundUserLifePayOrder(); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | async function refundUserLifePayOrder() { |
| | | try { |
| | | let params = { |
| | | userId: blLifeRecharge.accountModel.userId, |
| | | refundApplyRemark: form.refundApplyRemark, |
| | | }; |
| | | let res = await blLifeRecharge.services.refundUserLifePayOrder(params); |
| | | emit('submit'); |
| | | } catch (error) {} |
| | | } |
| | | |
| | | defineExpose({ |
| | | handleSubmit, |
| | | }); |
| | | </script> |
| | |
| | | <template> |
| | | <!-- <NutGrid :gutter="10" :column-num="3" square class="dashboard-view"> |
| | | <NutGridItem> |
| | | <div class="pro-statistics-wrapper"> |
| | | <div class="pro-statistics-title">累计收款</div> |
| | | <div class="pro-statistics-content"> |
| | | {{ toThousand(topStatistics?.accumulatedReceipts ?? 0) }} |
| | | </div> |
| | | </div> |
| | | </NutGridItem> |
| | | <NutGridItem> |
| | | <div class="pro-statistics-wrapper"> |
| | | <div class="pro-statistics-title">昨日收款</div> |
| | | <div class="pro-statistics-content"> |
| | | {{ toThousand(topStatistics?.receiptsYesterday ?? 0) }} |
| | | </div> |
| | | </div> |
| | | </NutGridItem> |
| | | <NutGridItem> |
| | | <div class="pro-statistics-wrapper"> |
| | | <div class="pro-statistics-title">累计收益</div> |
| | | <div class="pro-statistics-content"> |
| | | {{ toThousand(topStatistics?.accumulatedIncome ?? 0) }} |
| | | </div> |
| | | </div> |
| | | </NutGridItem> |
| | | <NutGridItem> |
| | | <div class="pro-statistics-wrapper"> |
| | | <div class="pro-statistics-title">累计下单</div> |
| | | <div class="pro-statistics-content">{{ topStatistics?.accumulatedOrders ?? 0 }}</div> |
| | | </div> |
| | | </NutGridItem> |
| | | <NutGridItem> |
| | | <div class="pro-statistics-wrapper"> |
| | | <div class="pro-statistics-title">昨日下单</div> |
| | | <div class="pro-statistics-content">{{ topStatistics?.ordersNumYesterday ?? 0 }}</div> |
| | | </div> |
| | | </NutGridItem> |
| | | <NutGridItem> |
| | | <div class="pro-statistics-wrapper"> |
| | | <div class="pro-statistics-title">昨日成功</div> |
| | | <div class="pro-statistics-content">{{ topStatistics?.yesterdaySuccess ?? 0 }}</div> |
| | | </div> |
| | | </NutGridItem> |
| | | <NutGridItem> |
| | | <div class="pro-statistics-wrapper"> |
| | | <div class="pro-statistics-title">累计用户</div> |
| | | <div class="pro-statistics-content">{{ topStatistics?.accumulatedUsers ?? 0 }}</div> |
| | | </div> |
| | | </NutGridItem> |
| | | <NutGridItem> |
| | | <div class="pro-statistics-wrapper"> |
| | | <div class="pro-statistics-title">昨日活跃</div> |
| | | <div class="pro-statistics-content">{{ topStatistics?.yesterdayActiveUsers ?? 0 }}</div> |
| | | </div> |
| | | </NutGridItem> |
| | | </NutGrid> --> |
| | | <div class="dashboard-view"> |
| | | <Chunk title="核心数据"> |
| | | <DashboardLargeCell class="dashboard-large-cell1"> |
| | |
| | | <template> |
| | | <div class="share-qrcode-view"> |
| | | <qrcode-vue :value="link" :size="200"></qrcode-vue> |
| | | <qrcode-vue :value="link" :size="size"></qrcode-vue> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | |
| | | type Props = { |
| | | channlesNum?: string; |
| | | size?: number; |
| | | }; |
| | | |
| | | const props = withDefaults(defineProps<Props>(), {}); |
| | | const props = withDefaults(defineProps<Props>(), { |
| | | size: 200, |
| | | }); |
| | | |
| | | const { blLifeRecharge } = useLifeRechargeContext(); |
| | | |
| | |
| | | ref="formRef" |
| | | :rules="rules" |
| | | label-position="top" |
| | | class="order-bill-recharge phone" |
| | | class="order-bill-recharge phone chunk-form" |
| | | > |
| | | <NutFormItem class="bole-form-item" prop="refundApplyRemark" required> |
| | | <NutTextarea |
| | |
| | | > |
| | | </NutTextarea> |
| | | </NutFormItem> |
| | | <div class="common-content"> |
| | | <!-- <div class="common-content"> |
| | | <nut-button class="recharge-button" type="primary" @click="handleSubmit"> |
| | | <div class="recharge-button-inner"> |
| | | <div class="recharge-button-text">提交</div> |
| | | </div> |
| | | </nut-button> |
| | | </div> |
| | | </div> --> |
| | | </NutForm> |
| | | </template> |
| | | |
| | |
| | | }); |
| | | } catch (error) {} |
| | | } |
| | | |
| | | defineExpose({ |
| | | handleSubmit, |
| | | }); |
| | | </script> |
| | |
| | | import { LifeRechargeConstants } from '@life-payment/core-vue'; |
| | | import { CustomerServiceTips, OssAssets } from '../../constants'; |
| | | import Result from '../../components/Result/Result.vue'; |
| | | import { Button as NutButton } from '@nutui/nutui-taro'; |
| | | |
| | | defineOptions({ |
| | | name: 'RechargeResultView', |
| | |
| | | </NutTextarea> |
| | | </NutFormItem> |
| | | </ElectricBillRechargeBaseForm> |
| | | <div class="chunk-form-actions"> |
| | | <!-- <div class="chunk-form-actions"> |
| | | <NutButton class="recharge-button" type="primary" @click="handleSave"> |
| | | <div class="recharge-button-inner"> |
| | | <div class="recharge-button-text">保存</div> |
| | | </div> |
| | | </NutButton> |
| | | </div> |
| | | </div> --> |
| | | </LoadingLayout> |
| | | </template> |
| | | |
| | |
| | | emit('success'); |
| | | } catch (error) {} |
| | | } |
| | | |
| | | defineExpose({ handleSave }); |
| | | </script> |
| | |
| | | </NutTextarea> |
| | | </NutFormItem> |
| | | </GasBillRechargeBaseForm> |
| | | <div class="chunk-form-actions"> |
| | | <!-- <div class="chunk-form-actions"> |
| | | <NutButton class="recharge-button" type="primary" @click="handleSave"> |
| | | <div class="recharge-button-inner"> |
| | | <div class="recharge-button-text">保存</div> |
| | | </div> |
| | | </NutButton> |
| | | </div> |
| | | </div> --> |
| | | </LoadingLayout> |
| | | </template> |
| | | |
| | |
| | | AddUpdateUserAccountInput, |
| | | } from '@life-payment/core-vue'; |
| | | import { useAddUpdateUserAccount, useGetGasParValue } from '../../hooks'; |
| | | import LoadingLayout from '../../components//Layout/LoadingLayout.vue'; |
| | | import LoadingLayout from '../../components/Layout/LoadingLayout.vue'; |
| | | import ChooseInputWithPicker from '../../components//Input/ChooseInputWithPicker.vue'; |
| | | import { useQuery } from '@tanstack/vue-query'; |
| | | import { GasUserAccountExtraProperties } from '../GasBillRecharge/context'; |
| | |
| | | emit('success'); |
| | | } catch (error) {} |
| | | } |
| | | |
| | | defineExpose({ handleSave }); |
| | | </script> |
| | |
| | | </NutTextarea> |
| | | </NutFormItem> |
| | | </PhoneBillRechargeBaseForm> |
| | | <div class="chunk-form-actions"> |
| | | <!-- <div class="chunk-form-actions"> |
| | | <NutButton class="recharge-button" type="primary" @click="handleSave"> |
| | | <div class="recharge-button-inner"> |
| | | <div class="recharge-button-text">保存</div> |
| | | </div> |
| | | </NutButton> |
| | | </div> |
| | | </div> --> |
| | | </LoadingLayout> |
| | | </template> |
| | | |
| | |
| | | emit('success'); |
| | | } catch (error) {} |
| | | } |
| | | |
| | | defineExpose({ handleSave }); |
| | | </script> |