Merge remote-tracking branch 'getorigin/modular' into modular

This commit is contained in:
2026-04-23 19:09:50 +03:30
3 changed files with 169 additions and 160 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
import useAxios from '@/utils/useAxios' import useAxios from '@/utils/useAxios'
import type { Card, Wallet } from '@/models/wallet' import type { Card, Wallet, WithdrawConfirm } from '@/models/wallet'
import type {Transaction} from '@/models/transaction' import type {Transaction} from '@/models/transaction'
import type {Address} from "@/models/address"; import type {Address} from "@/models/address";
+8
View File
@@ -71,6 +71,14 @@ export interface Test {
percentWallet: number percentWallet: number
} }
export interface WithdrawConfirm {
account_number?: string
bank_name?: string
birth_date?: string
cart_number?: string
shaba_number?: string
}
export interface Card { export interface Card {
id?: number id?: number
birth_date: number birth_date: number
+39 -38
View File
@@ -31,7 +31,7 @@
<div class="px-5 pt-26 pb-2"> <div class="px-5 pt-26 pb-2">
<a-form :model="form" class="!mt-5" name="basic" @finish="ok()"> <a-form :model="form" class="!mt-5" name="basic" @finish="ok()">
<div class="border-gray-200 border-1 rounded-xl p-5 trans h-40 relative"> <div class="border-gray-200 border-1 rounded-xl p-5 trans h-40 relative">
<bg_main/> <bg_main />
<div class="z-100 relative"> <div class="z-100 relative">
<a-form-item :rules="[required()]"> <a-form-item :rules="[required()]">
<BasicInput <BasicInput
@@ -46,6 +46,7 @@
</a-form-item> </a-form-item>
<Transition mode="out-in" name="fade"> <Transition mode="out-in" name="fade">
<div v-if="!isDeposit"> <div v-if="!isDeposit">
<div class="text-red text-xs font-bold mb-2">حداقل برداشت 100 هزار تومان می باشد.</div>
<div class="font-bold text-xs"> <div class="font-bold text-xs">
{{ {{
`موجودی کیف پول: ${usePriceWithoutType( `موجودی کیف پول: ${usePriceWithoutType(
@@ -87,7 +88,7 @@
type="primary" type="primary"
> >
<div> <div>
<a-spin v-if="loading" size="small"/> <a-spin v-if="loading" size="small" />
<div v-else>{{ isDeposit ? 'واریز' : 'برداشت' }}</div> <div v-else>{{ isDeposit ? 'واریز' : 'برداشت' }}</div>
</div> </div>
</BasicButton> </BasicButton>
@@ -106,9 +107,9 @@
:key="item.id" :key="item.id"
:item="item" :item="item"
/> />
<TransactionSkeleton v-if="loadingMore" class="mt-1 mb-8"/> <TransactionSkeleton v-if="loadingMore" class="mt-1 mb-8" />
</list-anim> </list-anim>
<TransactionSkeleton v-for="i in 13" v-else :key="i" class="mt-1"/> <TransactionSkeleton v-for="i in 13" v-else :key="i" class="mt-1" />
</div> </div>
<!-- <Slider/>--> <!-- <Slider/>-->
<Transition mode="out-in" name="fade"> <Transition mode="out-in" name="fade">
@@ -140,36 +141,36 @@
@click="showAddCard = true" @click="showAddCard = true"
> >
<div>افزودن کارت جدید</div> <div>افزودن کارت جدید</div>
<BasicIcon icon="vuesax-linear:add"/> <BasicIcon icon="vuesax-linear:add" />
<BasicActionSheet v-model:show="showAddCard" class="!max-h-[95vh]"> <BasicActionSheet v-model:show="showAddCard" class="!max-h-[95vh]">
<div class="font-bold text-lg">افزودن کارت</div> <div class="font-bold text-lg">افزودن کارت</div>
<div class="mt-4 text-red-600 font-bold">توجه : حتما شماره کارت صاحب حساب نرم افزار وارد شود.</div> <div class="mt-4 text-red-600 font-bold">توجه : حتما شماره کارت صاحب حساب نرم افزار وارد شود.</div>
<div class="pb-20 mt-5"> <div class="pb-20 mt-5">
<a-form :model="cardForm"> <a-form :model="cardForm">
<a-form-item <!-- <a-form-item
:rules="required()" :rules="required()"
class="w-full gap-2 !flex-col" class="w-full gap-2 !flex-col"
label="نام بانک" label="نام بانک"
name="bank_name" name="bank_name"
> >
<BasicInput v-model:value="cardForm.bank_name"/> <BasicInput v-model:value="cardForm.bank_name" />
</a-form-item> </a-form-item>-->
<!-- <a-form-item <a-form-item
:rules="cardNumberValidation()" :rules="cardNumberValidation()"
class="w-full gap-2 !flex-col" class="w-full gap-2 !flex-col"
label="شماره کارت" label="شماره کارت"
name="cart_number" name="cart_number"
> >
<BasicInput v-model:value="cardForm.cart_number" type="number" /> <BasicInput v-model:value="cardForm.cart_number" type="number" />
</a-form-item>--> </a-form-item>
<!-- <a-form-item <a-form-item
v-if="walletStore.walletInfo" v-if="walletStore.walletInfo"
class="w-full gap-2 !flex-col" class="w-full gap-2 !flex-col"
label="تاریخ تولد" label="تاریخ تولد"
name="cart_number" name="cart_number"
> >
<BaseDatePicker v-model:value="cardForm.birth_date" class="w-full" inputReadOnly/> <BaseDatePicker v-model:value="cardForm.birth_date" class="w-full" inputReadOnly/>
</a-form-item>--> </a-form-item>
<!-- <a-form-item <!-- <a-form-item
:rules="required()" :rules="required()"
class="w-full gap-2 !flex-col" class="w-full gap-2 !flex-col"
@@ -178,21 +179,21 @@
> >
<BasicInput v-model:value="cardForm.account_number" type="number" /> <BasicInput v-model:value="cardForm.account_number" type="number" />
</a-form-item>--> </a-form-item>-->
<a-form-item <!-- <a-form-item
:rules="required()" :rules="required()"
class="w-full gap-2 !flex-col" class="w-full gap-2 !flex-col"
label="شماره شبا" label="شماره شبا"
name="shaba_number" name="shaba_number"
> >
<BasicInput v-model:value="cardForm.shaba_number"/> <BasicInput v-model:value="cardForm.shaba_number"/>
</a-form-item> </a-form-item>-->
<BasicButton <BasicButton
:disabled="loading" :disabled="loading"
class="w-full mt-5 md:mt-10" class="w-full mt-5 md:mt-10"
type="primary" type="primary"
@click="addCard" @click="addCard"
> >
<a-spin v-if="loading" size="small"/> <a-spin v-if="loading" size="small" />
<div v-else>ثبت</div> <div v-else>ثبت</div>
</BasicButton> </BasicButton>
<BasicButton class="w-full mt-2" @click="showAddCard = false">بازگشت</BasicButton> <BasicButton class="w-full mt-2" @click="showAddCard = false">بازگشت</BasicButton>
@@ -239,7 +240,7 @@
</div> </div>
</template> </template>
</DialogVant> </DialogVant>
<SkeletonLoading v-model:show="infoVisible"/> <SkeletonLoading v-model:show="infoVisible" />
<!-- <!--
<transaction mode="out-in" name="fade"> <transaction mode="out-in" name="fade">
@@ -302,7 +303,7 @@
<div class="mt-1 text-red-600">در صورت عدم همخوانی کارت ملی و فیش واریزی کیف پول شارژ نمیشود!</div> <div class="mt-1 text-red-600">در صورت عدم همخوانی کارت ملی و فیش واریزی کیف پول شارژ نمیشود!</div>
<div class="mt-4">(سیده زهرا موسوی)</div> <div class="mt-4">(سیده زهرا موسوی)</div>
<div class="mt-1">شماره کارت:6037701900311389 </div> <div class="mt-1">شماره کارت:6037701900311389</div>
<!-- <div>شماره حساب: 0233273609006</div>--> <!-- <div>شماره حساب: 0233273609006</div>-->
<div>شماره شبا: IR 080160000000001143804581</div> <div>شماره شبا: IR 080160000000001143804581</div>
<BasicButton class="mt-4"> <BasicButton class="mt-4">
@@ -353,37 +354,37 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import {computed, onMounted, ref} from 'vue' import { computed, onMounted, ref } from 'vue'
import {usePriceWithoutType} from '@/utils/usePrice' import { usePriceWithoutType } from '@/utils/usePrice'
import {loading, loadingMore} from '@/utils' import { loading, loadingMore } from '@/utils'
import BasicButton from '@/components/BasicPacks/BasicButton.vue' import BasicButton from '@/components/BasicPacks/BasicButton.vue'
import BasicIcon from '@/components/BasicPacks/BasicIcon.vue' import BasicIcon from '@/components/BasicPacks/BasicIcon.vue'
import router from '@/router' import router from '@/router'
import {useWalletStore} from '@/store/walletStore' import { useWalletStore } from '@/store/walletStore'
import Bg_main from '@/components/bg_main.vue' import Bg_main from '@/components/bg_main.vue'
import type {Transaction} from '@/models/transaction' import type { Transaction } from '@/models/transaction'
import {createCard, deposit, getActivatedCards, withdraw, confirmCode} from '@/api/wallet' import { createCard, deposit, getActivatedCards, withdraw, confirmCode } from '@/api/wallet'
import {useInfiniteScroll} from '@vueuse/core' import { useInfiniteScroll } from '@vueuse/core'
import {message} from 'ant-design-vue' import { message } from 'ant-design-vue'
import ListAnim from '@/components/ListAnim.vue' import ListAnim from '@/components/ListAnim.vue'
import TransactionSkeleton from '@/components/TransactionSkeleton.vue' import TransactionSkeleton from '@/components/TransactionSkeleton.vue'
import Item from './components/Item.vue' import Item from './components/Item.vue'
import type {TableEngineInput, TableOutput} from '@/models/table' import type { TableEngineInput, TableOutput } from '@/models/table'
import {getTransactionTable, getTransactionTable2} from '@/api/transaction' import { getTransactionTable, getTransactionTable2 } from '@/api/transaction'
import BasicInput from '@/components/BasicPacks/BasicInput.vue' import BasicInput from '@/components/BasicPacks/BasicInput.vue'
import CardSlider from './components/UISlider/index.vue' import CardSlider from './components/UISlider/index.vue'
import BasicActionSheet from '@/components/BasicPacks/BasicActionSheet.vue' import BasicActionSheet from '@/components/BasicPacks/BasicActionSheet.vue'
import type {Card} from '@/models/wallet' import type { Card } from '@/models/wallet'
import {cardNumberValidation, required} from '@/utils/inputRules' import { cardNumberValidation, required } from '@/utils/inputRules'
import {useUserStore} from '@/store/userStore' import { useUserStore } from '@/store/userStore'
import {DotLottieVue} from '@lottiefiles/dotlottie-vue' import { DotLottieVue } from '@lottiefiles/dotlottie-vue'
import OtpInput from 'vue3-otp-input' import OtpInput from 'vue3-otp-input'
import DialogVant from '@/components/DialogVant.vue' import DialogVant from '@/components/DialogVant.vue'
import SkeletonLoading from './components/SkeletonLoading.vue' import SkeletonLoading from './components/SkeletonLoading.vue'
import BaseDatePicker from "@/components/BasicPacks/BaseDatePicker"; import BaseDatePicker from '@/components/BasicPacks/BaseDatePicker'
import img from "@/assets/img/user_ly1.svg"; import img from '@/assets/img/user_ly1.svg'
import BasicModal from "@/components/BasicPacks/BasicModal.vue"; import BasicModal from '@/components/BasicPacks/BasicModal.vue'
import {useConfigStore} from "@/store/configStore"; import { useConfigStore } from '@/store/configStore'
const isDeposit = ref<boolean>(true) const isDeposit = ref<boolean>(true)
const walletStore = useWalletStore() const walletStore = useWalletStore()
@@ -524,7 +525,7 @@ async function ok() {
if (form.value.value !== undefined) { if (form.value.value !== undefined) {
loading.value = true loading.value = true
if (!isDeposit.value) { if (!isDeposit.value) {
await confirmCode({value: form.value.value}) await confirmCode({ value: form.value.value })
showConfirmCode.value = await true showConfirmCode.value = await true
} }
if (isDeposit.value) { if (isDeposit.value) {
@@ -616,7 +617,7 @@ if (!userStore.isSingle) {
} }
// } // }
}, },
{distance: 12} { distance: 12 }
) )
} }
@@ -652,7 +653,7 @@ async function handleOnComplete(value: string) {
try { try {
infoVisible.value = true infoVisible.value = true
showConfirmCode.value = false showConfirmCode.value = false
await withdraw({...form.value, otp: value}) await withdraw({ ...form.value, otp: value })
await walletStore.getMyWallet() await walletStore.getMyWallet()
await message.success('عملیات با موفقیت انجام شد') await message.success('عملیات با موفقیت انجام شد')
withdrawInfModal.value = true withdrawInfModal.value = true