26/8/1404
This commit is contained in:
@@ -11,4 +11,8 @@ export const transferRegister = async (obj: Transfer): Promise<any> => {
|
||||
|
||||
export async function getTransfers(payload: TransferList) {
|
||||
return await useAxios.post(`customer/havale_list` , payload)
|
||||
}
|
||||
|
||||
export async function deleteCard(id: number) {
|
||||
return await useAxios.delete(`customer/account/${id}`)
|
||||
}
|
||||
@@ -70,6 +70,7 @@ export interface Test {
|
||||
|
||||
export interface Card {
|
||||
id?: number
|
||||
card_id?: number
|
||||
birth_date: number
|
||||
cart_number?: string
|
||||
shaba_number?: string
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
export function useCardNumber(val: number) {
|
||||
const str = val.toString()
|
||||
export function useCardNumber(val: number | string) {
|
||||
const str = val?.toString() ?? ''
|
||||
return `${str.substring(0,4)}\xa0\xa0\xa0\xa0\xa0\xa0${str.substring(4,8)}\xa0\xa0\xa0\xa0\xa0\xa0${str.substring(8,12)}\xa0\xa0\xa0\xa0\xa0\xa0${str.substring(12,16)}`
|
||||
}
|
||||
export function useShabaNumber(val: number) {
|
||||
const str = val.toString()
|
||||
export function useShabaNumber(val: number | string) {
|
||||
const str = val?.toString() ?? ''
|
||||
return `IR${str.substring(0,4)}\xa0\xa0\xa0${str.substring(4,8)}\xa0\xa0\xa0${str.substring(8,12)}\xa0\xa0\xa0${str.substring(12,16)}\xa0\xa0\xa0${str.substring(16,20)}\xa0\xa0\xa0${str.substring(20,24)}`
|
||||
}
|
||||
@@ -17,24 +17,43 @@
|
||||
<div class="bg-primary text-white rounded-[12px] p-4 text-xs leading-5">
|
||||
<div class="w-full h-1px my-3 bg-tertiary"></div>
|
||||
<div>
|
||||
طلا علاوه بر کاربرد در ساخت زیورآلات، از دوران کهن به عنوان یک فلز ارزشمند و دارایی
|
||||
مقاوم در برابر تورم شناخته میشود، به طوری که سرمایهگذاران حرفهای همواره بخشی از
|
||||
سبد سرمایهگذاریشان را به طلا اختصاص میدهند.
|
||||
قطره، نخستین اپلیکیشن خرید و فروش آنلاین طلا در استان خراسان جنوبی است که امکان خرید، فروش و سرمایهگذاری بر روی طلا را با هر میزان بودجه — از ۵۰ سوت تا چند کیلوگرم — برای کاربران فراهم کرده است.
|
||||
</div>
|
||||
<div class="mt-3">
|
||||
با وجود گسترش فناوریهای نوین در همه حوزهها، ما در قطره با
|
||||
تلفیق تجربه سنتی خود در بازار طلا و با دانش تخصصی خود و با بهرهگیری از سوابق موفق
|
||||
قبلی در حوزه فینتک، اقدام به ایجاد قطره نمودیم.
|
||||
این اپلیکیشن با مجوزهای قانونی لازم و با پشتوانهی معتبر مجموعه طلا و آبشده نور هشتم، که سالها بهصورت صادقانه و حرفهای در حوزهی طلا فعالیت داشته است، محیطی ایمن، شفاف و قابل اعتماد را برای انجام معاملات طلا فراهم میکند.
|
||||
</div>
|
||||
<div class="mt-3">
|
||||
مهمترین ارزش پیشنهادی قطره، امکان پس انداز تدریجی طلا با سرمایههای خرد و بدون
|
||||
پرداخت هزینههای جانبی است و در این راستا قطره تمام تلاش خود را نموده است تا از
|
||||
ابتدای سال 1401 با رونمایی محصول اولیه، برای همه افراد با هر سطحی از دارایی، بستری
|
||||
امن و مطمئن ایجاد نماید.
|
||||
همچنین کاربران پس از خرید آنلاین، میتوانند با مراجعه حضوری به شعب مجموعه نور هشتم، طلای خود را بهصورت فیزیکی دریافت کنند.
|
||||
</div>
|
||||
<div class="w-full h-1px my-3 bg-tertiary"></div>
|
||||
|
||||
<div class="mt-3 text-xl font-bold">چرا قطره؟</div>
|
||||
<div class="mt-3">
|
||||
۱. خرید بدون اجرت و مالیات
|
||||
طلایی که از اپلیکیشن قطره خریداری میکنید، بدون اجرت ساخت و مالیات محاسبه میشود و تنها ۰.۵٪ کارمزد از شما دریافت خواهد شد.
|
||||
</div>
|
||||
<div class="mt-3">
|
||||
علاوه بر این قطره به عنوان یک واحد فناور از سال 1403 با رونمایی نسخه کاملا آنلاین
|
||||
و نرم افزاری وارد فاز جدیدی از خرید و فروش طلای آب شده، شده است.
|
||||
۲. خرید بدون محدودیت
|
||||
در قطره میتوانید از ۵۰ سوت تا چند کیلوگرم طلا را بهصورت آنلاین و بدون هیچگونه محدودیت مکانی خریداری کنید
|
||||
</div>
|
||||
<div class="mt-3">
|
||||
۳. فعالیت در ساعات رسمی معاملات طلا
|
||||
برای رعایت قوانین صنف طلا و جلوگیری از خالیفروشی، فعالیت اپلیکیشن قطره منطبق با ساعات رسمی معاملات اتحادیه طلافروشان کشور است.
|
||||
</div>
|
||||
<div class="mt-3">
|
||||
۴. امکان تحویل فیزیکی طلا
|
||||
قطره دارای شعب حضوری معتبر با مجوز خردهفروشی طلاست تا کاربران بتوانند در صورت تمایل، طلای خریداریشده خود را بهصورت فیزیکی تحویل بگیرند و از نزدیک از اصالت آن اطمینان حاصل کنند.
|
||||
</div>
|
||||
<div class="w-full h-1px my-3 bg-tertiary"></div>
|
||||
|
||||
<div class="mt-3">
|
||||
آدرس : خراسان جنوبی / فردوس / خیابان امام خمینی / سکه و طلای آبشده نورهشتم
|
||||
</div>
|
||||
<div class="mt-3">
|
||||
شماره تماس : 056-32728568
|
||||
</div>
|
||||
<div class="mt-3">
|
||||
ایمیل : Ghtrehgold@gmail.com
|
||||
</div>
|
||||
<div class="w-full h-1px my-3 bg-tertiary"></div>
|
||||
</div>
|
||||
|
||||
@@ -8,17 +8,19 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="p-4">
|
||||
<div class="text-center p-3 border-solid border-1 rounded-[8px] border-[#521620] ">
|
||||
<div class=" p-3 border-solid border-1 rounded-[8px] border-[#521620] ">
|
||||
<div class="flex items-center">
|
||||
<div class=" bg-[#DBEAFE] h-10 w-10 rounded-100% flex justify-center items-center">
|
||||
<img :src="coin" />
|
||||
</div>
|
||||
<div class="mr-4">
|
||||
<div class="flex ">
|
||||
<div class="mr-2">
|
||||
<div class="flex">
|
||||
<div class="font-bold">دعوت دوستان</div>
|
||||
<!-- <div class="text-xs ">راهنمای کسب درآمد</div>-->
|
||||
</div>
|
||||
<div class="text-center mt-2 text-xs">هر دعوت موفق 10 سوت طلا هدیه</div>
|
||||
<div class=" mt-2 text-xs">با دعوت دوستانتان به اپلیکیشن قطره،
|
||||
دوست شما اولین خرید خود را بدون کارمزد انجام میدهد
|
||||
و شما نیز ۱۰٪ از کارمزد ۱۰ معاملهی اول او را بهعنوان پاداش دریافت میکنید. 💰</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex justify-center mt-4">
|
||||
|
||||
@@ -489,14 +489,16 @@
|
||||
>
|
||||
<div class="text-center">
|
||||
<div class="mt-2">
|
||||
<div>با دعوت دوستان خود به قطره، هم به آنها تجربهای ارزشمند هدیه بدهید و هم خودتان طلا دریافت کنید.</div>
|
||||
<div>همین حالا کلیک کنید و پاداش بگیرید!</div>
|
||||
<div>🔥یه فرصت طلایی واقعی جلوتِ !🔥</div>
|
||||
<div>دوستاتو همین الان به قطره دعوت کن!</div>
|
||||
<div>اونا اولین خریدشونو کاملاً بدون کارمزد انجام میدن،۱۰٪ از کارمزد ۱۰ معاملهی اولشون هم، مستقیم میاد تو حساب تو!</div>
|
||||
<div>زود باش، این فرصت همیشه باز نیست! ⏳✨</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<template #footer>
|
||||
<a-button type="primary" class="w-full" @click="closeModal">
|
||||
کسب درآمد
|
||||
همین حالا کلیک کنید و پاداش بگیرید!
|
||||
</a-button>
|
||||
</template>
|
||||
</BasicModal>
|
||||
|
||||
@@ -5,10 +5,16 @@
|
||||
@click="localValue = props.selfIndex"
|
||||
>
|
||||
<div class="p-3 flex flex-col items-center">
|
||||
<div class="flex justify-between w-full">
|
||||
<div class="flex w-full">
|
||||
<div class="text-white font-bold text-lg w-full">{{ props.title }}</div>
|
||||
<div
|
||||
class="text-white px-2 flex justify-center items-center rounded-lg w-5rem"
|
||||
@click.stop="deleteConfirmVisible = true"
|
||||
class="text-white w-full ml-2 flex justify-center bg-red-600 items-center rounded-lg"
|
||||
>
|
||||
حذف کارت
|
||||
</div>
|
||||
<div
|
||||
class="text-white w-full flex justify-center items-center rounded-lg"
|
||||
:class="active ? 'bg-green-600' : 'bg-red-600'"
|
||||
>
|
||||
{{ active ? 'فعال' : 'غیر فعال' }}
|
||||
@@ -19,18 +25,45 @@
|
||||
class="mt-[1.5vh] text-white w-full text-center text-xl font-bold"
|
||||
dir="ltr"
|
||||
>
|
||||
{{ useCardNumber(props.cardNumber) }}
|
||||
{{ formattedCardNumber }}
|
||||
</div>
|
||||
<div v-if="props.shaba" class="mt-3 text-white text-lg">
|
||||
{{ useShabaNumber(props.shaba) }}
|
||||
{{ formattedShabaNumber }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<DialogVant
|
||||
v-model:show="deleteConfirmVisible"
|
||||
teleport="body"
|
||||
:closeOnClickOverlay="false"
|
||||
:timeOut="-1"
|
||||
>
|
||||
<template #title>
|
||||
<div class="flex flex-col items-center">
|
||||
<div class="p-5 text-sm">
|
||||
آیا از حذف کارت مطمئن هستید؟
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template #button>
|
||||
<div class="text-center text-red flex items-center justify-center" @click="removeCard()">
|
||||
<a-spin :spinning="deleteLoading" size="small">
|
||||
تایید
|
||||
</a-spin>
|
||||
</div>
|
||||
<div class="text-center" @click="deleteConfirmVisible = false">
|
||||
انصراف
|
||||
</div>
|
||||
</template>
|
||||
</DialogVant>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed } from 'vue'
|
||||
import { computed, ref } from 'vue'
|
||||
import { useCardNumber, useShabaNumber } from '@/utils/useCardNumber'
|
||||
import { deleteCard } from '@/api/transfer'
|
||||
import DialogVant from '@/components/DialogVant.vue'
|
||||
|
||||
interface Prop {
|
||||
sliderIndex: number
|
||||
@@ -40,20 +73,29 @@ interface Prop {
|
||||
shaba?: string
|
||||
color?: string
|
||||
active?: boolean
|
||||
id?: number | string
|
||||
}
|
||||
|
||||
const props = defineProps<Prop>()
|
||||
const emits = defineEmits(['update:sliderIndex', 'deleted'])
|
||||
const deleteConfirmVisible = ref(false)
|
||||
const deleteLoading = ref(false)
|
||||
|
||||
const localValue = computed({
|
||||
get() {
|
||||
return props.sliderIndex
|
||||
},
|
||||
|
||||
set(value) {
|
||||
emits('update:sliderIndex', value)
|
||||
}
|
||||
})
|
||||
|
||||
const props = defineProps<Prop>()
|
||||
const emits = defineEmits(['update:sliderIndex'])
|
||||
const formattedCardNumber = computed(() =>
|
||||
props.cardNumber ? useCardNumber(props.cardNumber) : ''
|
||||
)
|
||||
const formattedShabaNumber = computed(() =>
|
||||
props.shaba ? useShabaNumber(props.shaba) : ''
|
||||
)
|
||||
|
||||
function findPositionStyle(pos: number) {
|
||||
// console.log(localValue.value)
|
||||
@@ -142,6 +184,28 @@ function topDetail(isAfterIndex: boolean, pos: number) {
|
||||
function checkTopLimit(val: number) {
|
||||
return val > 100 || val < 0
|
||||
}
|
||||
|
||||
async function removeCard(id?: number | string) {
|
||||
const rawId = id ?? props.id
|
||||
const cardId = rawId != null ? Number(rawId) : null
|
||||
|
||||
if (cardId === null || Number.isNaN(cardId)) {
|
||||
console.warn('cardId is missing or invalid', rawId)
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
deleteLoading.value = true
|
||||
await deleteCard(cardId)
|
||||
deleteConfirmVisible.value = false
|
||||
emits('deleted')
|
||||
} catch (error) {
|
||||
console.error('Failed to delete card', error)
|
||||
} finally {
|
||||
deleteLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="sass" scoped>
|
||||
|
||||
@@ -4,7 +4,9 @@
|
||||
<div ref="el" class="w-full flex flex-col relative h-full test">
|
||||
<CardItem v-for="(item,i) in props?.items" :key="i" v-model:sliderIndex="index" :card-number="item?.cart_number"
|
||||
:color="colors[i%3]"
|
||||
:self-index="i" :shaba="item?.shaba_number" :title="item?.bank_name" :active="item.sts === 2"/>
|
||||
:self-index="i" :shaba="item?.shaba_number" :title="item?.bank_name" :active="item.sts === 2"
|
||||
:id="item?.id ?? item?.card_id"
|
||||
@deleted="handleCardDeleted"/>
|
||||
<div class="absolute bottom-15vh right-0 left-0 z-100 flex justify-center items-center opacity-70">
|
||||
<div class="flex gap-1 bg-gray-500 px-2 py-1 rounded-lg">
|
||||
<Transition name="slide-up" mode="out-in" v-for="i in items.length" :key="i">
|
||||
@@ -35,7 +37,7 @@ interface Prop {
|
||||
}
|
||||
|
||||
const props = defineProps<Prop>()
|
||||
const emits = defineEmits(['update:id'])
|
||||
const emits = defineEmits(['update:id', 'refresh'])
|
||||
|
||||
const localValue = computed({
|
||||
get() {
|
||||
@@ -101,6 +103,10 @@ watch(index, (n: number)=> {
|
||||
localValue.value = props.items[n]?.id
|
||||
})
|
||||
|
||||
function handleCardDeleted() {
|
||||
emits('refresh')
|
||||
}
|
||||
|
||||
/*
|
||||
const items = [
|
||||
{
|
||||
|
||||
@@ -119,6 +119,7 @@
|
||||
v-if="cardItems.length > 0"
|
||||
:items="cardItems"
|
||||
v-model:id="form.card_id"
|
||||
@refresh="getCards"
|
||||
class="card-slider-wrap mt-[2vh] px-3 fixed bottom-10 right-0 left-0"
|
||||
style="touch-action: none"
|
||||
/>
|
||||
|
||||
Reference in New Issue
Block a user