@unsource/ui 2.7.18 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/module.json +1 -1
  2. package/dist/runtime/components/UnModal/PaymentMethod.d.vue.ts +7 -0
  3. package/dist/runtime/components/UnModal/PaymentMethod.vue +26 -0
  4. package/dist/runtime/components/UnModal/PaymentMethod.vue.d.ts +7 -0
  5. package/dist/runtime/components/UnModal/Transfer.d.vue.ts +3 -0
  6. package/dist/runtime/components/UnModal/Transfer.vue +117 -0
  7. package/dist/runtime/components/UnModal/Transfer.vue.d.ts +3 -0
  8. package/dist/runtime/components/UnModal/WalletIncrease.d.vue.ts +7 -0
  9. package/dist/runtime/components/UnModal/WalletIncrease.vue +53 -0
  10. package/dist/runtime/components/UnModal/WalletIncrease.vue.d.ts +7 -0
  11. package/dist/runtime/components/UnModal/WalletSelection.d.vue.ts +7 -0
  12. package/dist/runtime/components/UnModal/WalletSelection.vue +26 -0
  13. package/dist/runtime/components/UnModal/WalletSelection.vue.d.ts +7 -0
  14. package/dist/runtime/components/UnModal/Withdrawal.d.vue.ts +7 -0
  15. package/dist/runtime/components/UnModal/Withdrawal.vue +66 -0
  16. package/dist/runtime/components/UnModal/Withdrawal.vue.d.ts +7 -0
  17. package/dist/runtime/components/UnModal.d.vue.ts +31 -0
  18. package/dist/runtime/components/UnModal.vue +60 -0
  19. package/dist/runtime/components/UnModal.vue.d.ts +31 -0
  20. package/dist/runtime/components/UnNumberInput.d.vue.ts +17 -0
  21. package/dist/runtime/components/UnNumberInput.vue +55 -0
  22. package/dist/runtime/components/UnNumberInput.vue.d.ts +17 -0
  23. package/dist/runtime/components/UnPaymentMethods.d.vue.ts +20 -0
  24. package/dist/runtime/components/UnPaymentMethods.vue +48 -0
  25. package/dist/runtime/components/UnPaymentMethods.vue.d.ts +20 -0
  26. package/dist/runtime/components/UnTransaction.d.vue.ts +8 -0
  27. package/dist/runtime/components/UnTransaction.vue +83 -0
  28. package/dist/runtime/components/UnTransaction.vue.d.ts +8 -0
  29. package/dist/runtime/components/UnWallet.d.vue.ts +11 -0
  30. package/dist/runtime/components/UnWallet.vue +150 -0
  31. package/dist/runtime/components/UnWallet.vue.d.ts +11 -0
  32. package/dist/runtime/components/UnWalletActions.d.vue.ts +10 -0
  33. package/dist/runtime/components/UnWalletActions.vue +37 -0
  34. package/dist/runtime/components/UnWalletActions.vue.d.ts +10 -0
  35. package/dist/runtime/composables/global.js +17 -9
  36. package/package.json +1 -1
package/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "unsource-ui",
3
3
  "configKey": "unsourceUi",
4
- "version": "2.7.18",
4
+ "version": "2.8.0",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
7
7
  "unbuild": "3.6.1"
@@ -0,0 +1,7 @@
1
+ type __VLS_ModelProps = {
2
+ modelValue?: any;
3
+ 'method'?: any;
4
+ };
5
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ declare const _default: typeof __VLS_export;
7
+ export default _default;
@@ -0,0 +1,26 @@
1
+ <template>
2
+ <UnModal
3
+ head="روش پرداخت"
4
+ @close="emit('close')"
5
+ >
6
+ <UnPaymentMethods
7
+ v-model="selectedPayment"
8
+ v-model:method="selectedMethod"
9
+ :gateway-filter="() => true"
10
+ :wallets-filter="() => false"
11
+ />
12
+ <UnButton
13
+ class="sticky bottom-0"
14
+ variant="primary-fill"
15
+ :label="$t('\u062A\u0627\u06CC\u06CC\u062F')"
16
+ :disable="!selectedMethod?.id"
17
+ @click="$emit('submit')"
18
+ />
19
+ </UnModal>
20
+ </template>
21
+
22
+ <script setup>
23
+ const emit = defineEmits(["close"]);
24
+ const selectedPayment = defineModel();
25
+ const selectedMethod = defineModel("method");
26
+ </script>
@@ -0,0 +1,7 @@
1
+ type __VLS_ModelProps = {
2
+ modelValue?: any;
3
+ 'method'?: any;
4
+ };
5
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ declare const _default: typeof __VLS_export;
7
+ export default _default;
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, any, string, import("vue").PublicProps, any, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,117 @@
1
+ <template>
2
+ <UnModal
3
+ head="انتقال وجه"
4
+ class="!z-80"
5
+ @close="emit('close')"
6
+ >
7
+ <UnFormList
8
+ ref="schema"
9
+ v-model="form"
10
+ :items="items"
11
+ :errors
12
+ />
13
+ <UnNuxtIcon
14
+ v-show="loadingUser"
15
+ name="loading"
16
+ icon-type="svg"
17
+ class="text-2xl"
18
+ />
19
+ <p v-if="toUser">
20
+ {{ toUser.profile?.firstName || "" }} {{ toUser.profile?.lastName || "" }}
21
+ </p>
22
+ <UnNumberInput
23
+ v-model="amount"
24
+ :max="wallet?.balance"
25
+ />
26
+ <UnButton
27
+ variant="primary-fill"
28
+ label="انتقال"
29
+ :disable="!toUser"
30
+ :loading="loadingUser || loading"
31
+ @click="submit"
32
+ />
33
+ </UnModal>
34
+ </template>
35
+
36
+ <script setup>
37
+ import {
38
+ _cloneDeep,
39
+ _debounce,
40
+ ajv,
41
+ computed,
42
+ s2n,
43
+ submitPayment,
44
+ useGet,
45
+ useNuxtApp,
46
+ useWallets,
47
+ watch
48
+ } from "#imports";
49
+ const emit = defineEmits(["close"]);
50
+ const wallets = await useWallets(true);
51
+ const amount = ref("0");
52
+ const wallet = computed(() => wallets.value.find((e) => e.coin.unit === "wallet"));
53
+ const schema = ref();
54
+ const { $toast } = useNuxtApp();
55
+ const loading = ref(false);
56
+ const form = ref({});
57
+ const errors = ref([]);
58
+ const toUser = ref(null);
59
+ const items = computed(() => [
60
+ {
61
+ priority: 0,
62
+ required: true,
63
+ input: {
64
+ key: "phoneNumber",
65
+ title: "\u0634\u0645\u0627\u0631\u0647 \u062A\u0644\u0641\u0646 \u0645\u0642\u0635\u062F",
66
+ type: "text",
67
+ keyboadType: "numeric"
68
+ }
69
+ }
70
+ ]);
71
+ const submit = async () => {
72
+ const isConfirm = confirm("\u0622\u06CC\u0627 \u0645\u0637\u0645\u0639\u0646 \u0647\u0633\u062A\u06CC\u062F\u061F");
73
+ if (!isConfirm) return;
74
+ if (!toUser.value) return;
75
+ if (!ajv.validate(schema.value.schema, form.value)) {
76
+ errors.value = _cloneDeep(ajv.errors?.map((e) => e.params.missingProperty || e.instancePath.replace(/^\//, "")));
77
+ return $toast.error("\u0644\u0637\u0641\u0627 \u0645\u0648\u0627\u0631\u062F \u0631\u0627 \u0628\u0647 \u062F\u0631\u0633\u062A\u06CC \u062A\u06A9\u0645\u06CC\u0644 \u0646\u0645\u0627\u06CC\u06CC\u062F.");
78
+ }
79
+ if (loading.value) return;
80
+ loading.value = true;
81
+ const w = await useWallets(void 0, toUser.value?.id);
82
+ const details = {
83
+ walletId: wallet.value.id,
84
+ toWalletId: w.value?.find((e) => e.coin.unit === "wallet").id,
85
+ status: "ACCEPTED",
86
+ type: "TRANSFER",
87
+ redirectUrl: window.urlPrefix + location.href,
88
+ amount: Number(s2n(amount.value))
89
+ };
90
+ const res = await submitPayment(0, details, void 0, false);
91
+ if (res) {
92
+ emit("close");
93
+ }
94
+ loading.value = false;
95
+ };
96
+ const loadingUser = ref(false);
97
+ watch(() => form.value.phoneNumber, _debounce(async (phoneNumber) => {
98
+ toUser.value = null;
99
+ if (phoneNumber?.length === 11) {
100
+ loadingUser.value = true;
101
+ const { result } = await useGet(`/User/phoneNumber/${phoneNumber}`, {
102
+ params: {
103
+ "$i.profile": true
104
+ },
105
+ headers: {
106
+ "no-error": true
107
+ }
108
+ });
109
+ if (!result) {
110
+ loadingUser.value = false;
111
+ return $toast.error("\u06A9\u0627\u0631\u0628\u0631\u06CC \u06CC\u0627\u0641\u062A \u0646\u0634\u062F");
112
+ }
113
+ toUser.value = result;
114
+ loadingUser.value = false;
115
+ }
116
+ }, 500));
117
+ </script>
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, any, string, import("vue").PublicProps, any, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,7 @@
1
+ import type { Wallet } from '../../types/models.js';
2
+ type __VLS_Props = {
3
+ wallet: Wallet;
4
+ };
5
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, any, string, import("vue").PublicProps, any, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ declare const _default: typeof __VLS_export;
7
+ export default _default;
@@ -0,0 +1,53 @@
1
+ <template>
2
+ <UnModal
3
+ head="افزایش اعتبار"
4
+ @close="emit('close')"
5
+ >
6
+ <p class="text-gray-500 text-sm">
7
+ {{ $t("\u0645\u0628\u0644\u063A \u0645\u0648\u0631\u062F \u0646\u0638\u0631 \u0631\u0627 \u0627\u0646\u062A\u062E\u0627\u0628 \u06A9\u0646\u06CC\u062F") }}
8
+ </p>
9
+ <UnNumberInput v-model="depositAmount" />
10
+ <UnButton
11
+ class="sticky bottom-0"
12
+ variant="primary-fill"
13
+ :label="$t('\u067E\u0631\u062F\u0627\u062E\u062A')"
14
+ :loading="loading"
15
+ @click="paymentMethodModal = true"
16
+ />
17
+ <UnModalPaymentMethod
18
+ v-show="paymentMethodModal"
19
+ v-model:method="selectedMethod"
20
+ v-model="selectedPayment"
21
+ class="z-51"
22
+ @submit="deposit"
23
+ @close="paymentMethodModal = false"
24
+ />
25
+ </UnModal>
26
+ </template>
27
+
28
+ <script setup>
29
+ import { s2n, submitPayment } from "#imports";
30
+ const { wallet } = defineProps({
31
+ wallet: { type: Object, required: true }
32
+ });
33
+ const paymentMethodModal = ref(false);
34
+ const selectedPayment = ref(0);
35
+ const selectedMethod = ref();
36
+ const emit = defineEmits(["close"]);
37
+ const loading = ref(false);
38
+ const deposit = async () => {
39
+ if (loading.value) return;
40
+ loading.value = true;
41
+ const details = {
42
+ walletId: wallet.id,
43
+ gatewayId: selectedMethod.value?.id,
44
+ status: "PENDING",
45
+ type: "DEPOSIT",
46
+ redirectUrl: window.urlPrefix + location.href,
47
+ amount: Number(s2n(depositAmount.value))
48
+ };
49
+ await submitPayment(0, details, void 0, true).catch(() => loading.value = false);
50
+ loading.value = false;
51
+ };
52
+ const depositAmount = ref("10,000");
53
+ </script>
@@ -0,0 +1,7 @@
1
+ import type { Wallet } from '../../types/models.js';
2
+ type __VLS_Props = {
3
+ wallet: Wallet;
4
+ };
5
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, any, string, import("vue").PublicProps, any, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ declare const _default: typeof __VLS_export;
7
+ export default _default;
@@ -0,0 +1,7 @@
1
+ type __VLS_ModelProps = {
2
+ modelValue?: any;
3
+ 'method'?: any;
4
+ };
5
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ declare const _default: typeof __VLS_export;
7
+ export default _default;
@@ -0,0 +1,26 @@
1
+ <template>
2
+ <UnModal
3
+ head="کیف پول ها"
4
+ @close="emit('close')"
5
+ >
6
+ <UnPaymentMethods
7
+ v-model="selectedPayment"
8
+ v-model:method="selectedMethod"
9
+ :gateway-filter="() => false"
10
+ :wallets-filter="() => true"
11
+ />
12
+ <UnButton
13
+ class="sticky bottom-0"
14
+ variant="primary-fill"
15
+ :label="$t('\u062A\u0627\u06CC\u06CC\u062F')"
16
+ :disable="!selectedMethod?.id"
17
+ @click="$emit('submit')"
18
+ />
19
+ </UnModal>
20
+ </template>
21
+
22
+ <script setup>
23
+ const emit = defineEmits(["close"]);
24
+ const selectedPayment = defineModel();
25
+ const selectedMethod = defineModel("method");
26
+ </script>
@@ -0,0 +1,7 @@
1
+ type __VLS_ModelProps = {
2
+ modelValue?: any;
3
+ 'method'?: any;
4
+ };
5
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ declare const _default: typeof __VLS_export;
7
+ export default _default;
@@ -0,0 +1,7 @@
1
+ import type { Wallet } from '../../types/models.js';
2
+ type __VLS_Props = {
3
+ wallet: Wallet;
4
+ };
5
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, any, string, import("vue").PublicProps, any, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ declare const _default: typeof __VLS_export;
7
+ export default _default;
@@ -0,0 +1,66 @@
1
+ <template>
2
+ <UnModal
3
+ head="درخواست برداشت"
4
+ @close="emit('close')"
5
+ >
6
+ <UnForm
7
+ ref="formRef"
8
+ v-model="form"
9
+ name="withdrawal"
10
+ :options="inputOptions"
11
+ />
12
+ <UnButton
13
+ class="sticky bottom-0"
14
+ variant="primary-fill"
15
+ :label="$t('\u062B\u0628\u062A')"
16
+ :loading="loading"
17
+ @click="submitWithdrawal"
18
+ />
19
+ </UnModal>
20
+ </template>
21
+
22
+ <script setup>
23
+ import { saveWithdraw } from "../../composables/services";
24
+ import { computed, navigateTo, useNuxtApp, useTemplateRef } from "#imports";
25
+ const { wallet } = defineProps({
26
+ wallet: { type: Object, required: true }
27
+ });
28
+ const emit = defineEmits(["close"]);
29
+ const { $toast } = useNuxtApp();
30
+ const loading = ref(false);
31
+ const form = ref({});
32
+ const formRef = useTemplateRef("formRef");
33
+ const inputOptions = computed(() => ({
34
+ branchKey: {
35
+ required: !wallet.coin?.isFiat,
36
+ activatedBy: wallet.coin?.isFiat ? "test" : null
37
+ },
38
+ amount: {
39
+ append: wallet.coin?.isFiat ? "\u062A\u0648\u0645\u0627\u0646" : wallet.coin?.unit,
40
+ description: `\u0645\u0648\u062C\u0648\u062F\u06CC : ${wallet.balance?.toLocaleString("en") || 0} ${wallet.coin?.isFiat ? "\u062A\u0648\u0645\u0627\u0646" : wallet.coin?.unit}`,
41
+ hint: `\u062D\u062F\u0627\u0642\u0644 \u0645\u0642\u062F\u0627\u0631 \u0628\u0631\u062F\u0627\u0634\u062A: ${wallet.coin?.minWithdraw?.toLocaleString("en") || 0} ${wallet.coin?.isFiat ? "\u062A\u0648\u0645\u0627\u0646" : wallet.coin?.unit}`,
42
+ min: wallet.coin?.minWithdraw,
43
+ max: wallet.balance
44
+ }
45
+ }));
46
+ const submitWithdrawal = async () => {
47
+ if (await formRef.value?.validate()) return;
48
+ if (loading.value) return;
49
+ if (wallet.balance < form.value?.amount) return $toast.error("\u0645\u0648\u062C\u0648\u062F\u06CC \u06A9\u0627\u0641\u06CC \u0646\u06CC\u0633\u062A.");
50
+ loading.value = true;
51
+ const res = await saveWithdraw(
52
+ {
53
+ amount: form.value?.amount,
54
+ status: "PENDING",
55
+ walletId: wallet.id,
56
+ userId: wallet.userId,
57
+ branchKey: form.value?.branchKey
58
+ }
59
+ );
60
+ if (res) {
61
+ $toast.success("\u062F\u0631\u062E\u0648\u0627\u0633\u062A \u0634\u0645\u0627 \u0628\u0627 \u0645\u0648\u0641\u0642\u06CC\u062A \u062B\u0628\u062A \u0634\u062F.");
62
+ await navigateTo({ name: "requests" });
63
+ }
64
+ loading.value = false;
65
+ };
66
+ </script>
@@ -0,0 +1,7 @@
1
+ import type { Wallet } from '../../types/models.js';
2
+ type __VLS_Props = {
3
+ wallet: Wallet;
4
+ };
5
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, any, string, import("vue").PublicProps, any, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ declare const _default: typeof __VLS_export;
7
+ export default _default;
@@ -0,0 +1,31 @@
1
+ type __VLS_Props = {
2
+ head?: string;
3
+ title?: string;
4
+ mini?: boolean;
5
+ collapsable?: boolean;
6
+ noBackdrop?: boolean;
7
+ };
8
+ declare const __VLS_defaultModels: {
9
+ modelValue: boolean;
10
+ };
11
+ type __VLS_ModelProps = {
12
+ modelValue?: typeof __VLS_defaultModels['modelValue'];
13
+ };
14
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
15
+ declare var __VLS_9: {}, __VLS_19: {};
16
+ type __VLS_Slots = {} & {
17
+ title?: (props: typeof __VLS_9) => any;
18
+ } & {
19
+ default?: (props: typeof __VLS_19) => any;
20
+ };
21
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {
22
+ modal: any;
23
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
24
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
25
+ declare const _default: typeof __VLS_export;
26
+ export default _default;
27
+ type __VLS_WithSlots<T, S> = T & {
28
+ new (): {
29
+ $slots: S;
30
+ };
31
+ };
@@ -0,0 +1,60 @@
1
+ <template>
2
+ <div
3
+ ref="modal"
4
+ class="flex flex-col items-stretch justify-end bg-gray-500 w-full max-w-120 <md:(max-w-unset left-0 translate-x-0) h-full fixed bottom-0 left-1/2 transform -translate-x-1/2 z-50"
5
+ :class="[noBackdrop ? 'bg-op-0' : 'bg-op-20', { ' backdrop-blur-[2px]': !collapsable }]"
6
+ @click.self="emit('close')"
7
+ >
8
+ <div
9
+ class="flex flex-col gap-6 bg-primary-100 rounded-t-xl max-h-9.5/10 w-full px-3"
10
+ :class="[collapsable ? 'pt-2 pb-4' : 'py-4']"
11
+ >
12
+ <UnNuxtIcon
13
+ v-if="collapsable"
14
+ :name="collapse ? 'solar:alt-arrow-down-line-duotone' : 'solar:alt-arrow-up-line-duotone'"
15
+ class="self-center text-(3xl primary-500) cursor-pointer"
16
+ @click="toggleCollapse"
17
+ />
18
+ <div
19
+ v-show="!collapsable"
20
+ class="flex flex-col gap-1"
21
+ >
22
+ <div class="flex items-center justify-between">
23
+ <p class="font-semibold text-(lg gray-600) flex gap-3 items-center">
24
+ {{ head }}
25
+ <slot name="title" />
26
+ </p>
27
+ <UnNuxtIcon
28
+ name="solar:close-circle-line-duotone"
29
+ class="text-2xl cursor-pointer"
30
+ @click="emit('close')"
31
+ />
32
+ </div>
33
+ <p
34
+ v-if="title"
35
+ class="text-(sm gray-600)"
36
+ >
37
+ {{ title }}
38
+ </p>
39
+ </div>
40
+ <slot />
41
+ </div>
42
+ </div>
43
+ </template>
44
+
45
+ <script setup>
46
+ defineProps({
47
+ head: { type: String, required: false },
48
+ title: { type: String, required: false },
49
+ mini: { type: Boolean, required: false },
50
+ collapsable: { type: Boolean, required: false },
51
+ noBackdrop: { type: Boolean, required: false }
52
+ });
53
+ const emit = defineEmits(["close", "collapse"]);
54
+ const collapse = defineModel({ default: false });
55
+ const toggleCollapse = () => {
56
+ collapse.value = !collapse.value;
57
+ };
58
+ const modal = ref();
59
+ defineExpose({ modal });
60
+ </script>
@@ -0,0 +1,31 @@
1
+ type __VLS_Props = {
2
+ head?: string;
3
+ title?: string;
4
+ mini?: boolean;
5
+ collapsable?: boolean;
6
+ noBackdrop?: boolean;
7
+ };
8
+ declare const __VLS_defaultModels: {
9
+ modelValue: boolean;
10
+ };
11
+ type __VLS_ModelProps = {
12
+ modelValue?: typeof __VLS_defaultModels['modelValue'];
13
+ };
14
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
15
+ declare var __VLS_9: {}, __VLS_19: {};
16
+ type __VLS_Slots = {} & {
17
+ title?: (props: typeof __VLS_9) => any;
18
+ } & {
19
+ default?: (props: typeof __VLS_19) => any;
20
+ };
21
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {
22
+ modal: any;
23
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
24
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
25
+ declare const _default: typeof __VLS_export;
26
+ export default _default;
27
+ type __VLS_WithSlots<T, S> = T & {
28
+ new (): {
29
+ $slots: S;
30
+ };
31
+ };
@@ -0,0 +1,17 @@
1
+ type __VLS_Props = {
2
+ label?: string;
3
+ max?: number;
4
+ min?: number;
5
+ step?: number;
6
+ };
7
+ type __VLS_ModelProps = {
8
+ modelValue?: string | number;
9
+ };
10
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
11
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
12
+ "update:modelValue": (value: string | number | undefined) => any;
13
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
14
+ "onUpdate:modelValue"?: ((value: string | number | undefined) => any) | undefined;
15
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
16
+ declare const _default: typeof __VLS_export;
17
+ export default _default;
@@ -0,0 +1,55 @@
1
+ <template>
2
+ <div class="flex flex-wrap items-center gap-1 pt-1 px-1">
3
+ <p
4
+ v-if="label"
5
+ class="basis-full -mb-2"
6
+ >
7
+ {{ label }}
8
+ </p>
9
+ <UnNuxtIcon
10
+ name="solar:add-circle-bold-duotone"
11
+ class="text-3xl text-primary-500 cursor-pointer "
12
+ @click.prevent.stop="increment(_min([step, remain]))"
13
+ />
14
+ <UnInput
15
+ v-model="amount"
16
+ class="grow h-10"
17
+ class-name="border-none rounded-2xl bg-bg children:(text-center)"
18
+ @update:model-value="handler"
19
+ />
20
+ <UnNuxtIcon
21
+ name="solar:minus-circle-line-duotone"
22
+ class="text-3xl text-primary-500 cursor-pointer"
23
+ @click.prevent.stop="increment(-step)"
24
+ />
25
+ </div>
26
+ </template>
27
+
28
+ <script setup>
29
+ import { _min, computed, s2n, toLocal } from "#imports";
30
+ const { max = 999999999, min = 0, step = 1e3 } = defineProps({
31
+ label: { type: String, required: false },
32
+ max: { type: Number, required: false },
33
+ min: { type: Number, required: false },
34
+ step: { type: Number, required: false }
35
+ });
36
+ const amount = defineModel({ type: [String, Number] });
37
+ const remain = computed(() => max - Number(s2n(amount.value)));
38
+ const increment = (e) => {
39
+ console.log(e);
40
+ if (e < 0 && Number(s2n(amount.value)) <= Math.abs(e)) {
41
+ amount.value = "0";
42
+ } else {
43
+ amount.value = toLocal(Number(s2n(amount.value)) + e, 0);
44
+ }
45
+ };
46
+ const handler = (e) => {
47
+ if (Number(s2n(amount.value)) < min) {
48
+ amount.value = min;
49
+ } else if (Number(s2n(amount.value)) > max) {
50
+ amount.value = toLocal(max, 0);
51
+ } else {
52
+ amount.value = toLocal(e, 0);
53
+ }
54
+ };
55
+ </script>
@@ -0,0 +1,17 @@
1
+ type __VLS_Props = {
2
+ label?: string;
3
+ max?: number;
4
+ min?: number;
5
+ step?: number;
6
+ };
7
+ type __VLS_ModelProps = {
8
+ modelValue?: string | number;
9
+ };
10
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
11
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
12
+ "update:modelValue": (value: string | number | undefined) => any;
13
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
14
+ "onUpdate:modelValue"?: ((value: string | number | undefined) => any) | undefined;
15
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
16
+ declare const _default: typeof __VLS_export;
17
+ export default _default;
@@ -0,0 +1,20 @@
1
+ import type { CoinGateway, Wallet } from '../types/models.js';
2
+ type __VLS_Props = {
3
+ gatewayFilter?: (item: CoinGateway, i: number) => boolean;
4
+ walletsFilter?: (item: Wallet, i: number) => boolean;
5
+ walletsDisable?: (item: Wallet, i: number) => boolean;
6
+ };
7
+ type __VLS_ModelProps = {
8
+ modelValue?: any;
9
+ 'method'?: any;
10
+ };
11
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
12
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
13
+ "update:modelValue": (value: any) => any;
14
+ "update:method": (value: any) => any;
15
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
16
+ "onUpdate:modelValue"?: ((value: any) => any) | undefined;
17
+ "onUpdate:method"?: ((value: any) => any) | undefined;
18
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
19
+ declare const _default: typeof __VLS_export;
20
+ export default _default;
@@ -0,0 +1,48 @@
1
+ <template>
2
+ <UnSelect
3
+ v-model="selectedPayment"
4
+ :custom-class="{ innerWrapper: '<md:(!max-h-unset bg-white !pb-0 !border-(1 solid transparent))' }"
5
+ value-key="value"
6
+ light
7
+ class="z-1 grow-1 shrink-0"
8
+ inline
9
+ :items="deliverPayments"
10
+ />
11
+ </template>
12
+
13
+ <script setup>
14
+ import { _ceil, computed, useGateways, useWallets, watch } from "#imports";
15
+ const { gatewayFilter, walletsFilter, walletsDisable } = defineProps({
16
+ gatewayFilter: { type: Function, required: false },
17
+ walletsFilter: { type: Function, required: false },
18
+ walletsDisable: { type: Function, required: false }
19
+ });
20
+ const wallets = await useWallets(true);
21
+ const gateways = await useGateways(true);
22
+ const selectedPayment = defineModel();
23
+ const selectedMethod = defineModel("method");
24
+ const deliverPayments = computed(() => [
25
+ ...gateways.filter((e, i) => gatewayFilter?.(e, i) ?? true).map((e, index) => ({
26
+ ...e,
27
+ avatar: e.gateway?.icon,
28
+ title: e.gateway?.label,
29
+ // description: e.gateway?.label,
30
+ value: index,
31
+ type: "gateway"
32
+ })),
33
+ ...wallets.value.filter((e, i) => walletsFilter?.(e, i) ?? true).map((e, index) => ({
34
+ ...e,
35
+ avatar: e.coin?.icon,
36
+ title: e.coin?.name,
37
+ unit: e.coin?.unit,
38
+ description: ["\u0645\u0627\u0646\u062F\u0647:", _ceil(e.balance || 0, e.coin?.precision || 0)?.toLocaleString("en"), e.coin?.isFiat ? "\u062A\u0648\u0645\u0627\u0646" : e.coin?.unit].join(" "),
39
+ value: gateways.filter((e2, i) => gatewayFilter?.(e2, i) ?? true)?.length + index,
40
+ type: "wallet"
41
+ })).map((e, i) => ({ ...e, disable: walletsDisable?.(e, i) }))
42
+ ]);
43
+ watch(selectedPayment, () => {
44
+ selectedMethod.value = deliverPayments.value[selectedPayment.value] || deliverPayments.value[0];
45
+ }, {
46
+ immediate: true
47
+ });
48
+ </script>
@@ -0,0 +1,20 @@
1
+ import type { CoinGateway, Wallet } from '../types/models.js';
2
+ type __VLS_Props = {
3
+ gatewayFilter?: (item: CoinGateway, i: number) => boolean;
4
+ walletsFilter?: (item: Wallet, i: number) => boolean;
5
+ walletsDisable?: (item: Wallet, i: number) => boolean;
6
+ };
7
+ type __VLS_ModelProps = {
8
+ modelValue?: any;
9
+ 'method'?: any;
10
+ };
11
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
12
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
13
+ "update:modelValue": (value: any) => any;
14
+ "update:method": (value: any) => any;
15
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
16
+ "onUpdate:modelValue"?: ((value: any) => any) | undefined;
17
+ "onUpdate:method"?: ((value: any) => any) | undefined;
18
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
19
+ declare const _default: typeof __VLS_export;
20
+ export default _default;
@@ -0,0 +1,8 @@
1
+ import type { Transaction } from '../types/models.js';
2
+ type __VLS_Props = {
3
+ transaction: Transaction;
4
+ titleKey?: string;
5
+ };
6
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
+ declare const _default: typeof __VLS_export;
8
+ export default _default;
@@ -0,0 +1,83 @@
1
+ <template>
2
+ <UnCard
3
+ :item="{
4
+ avatar: statusIcon,
5
+ description: Title
6
+ }"
7
+ :custom-class="{ title: '!text-sm', description: '!font-bold !text-gray-400', body: '!items-center', avatar: `!w-10 !h-10 !border-none ${statusVariant}` }"
8
+ >
9
+ <template #title>
10
+ <p
11
+ v-if="isProviderSide(config)"
12
+ class="font-bold"
13
+ >
14
+ {{ transaction.status === "SETTLED" ? "\u062A\u0633\u0648\u06CC\u0647 \u0634\u062F\u0647" : "\u062A\u0633\u0648\u06CC\u0647 \u0646\u0634\u062F\u0647" }}
15
+ </p>
16
+ <p
17
+ v-else
18
+ class="font-bold"
19
+ >
20
+ {{ _get(transaction, titleKey) || titleType[transaction.type] }}
21
+ {{ ["REJECTED", "FAILED"].includes(transaction.status) ? "(\u0646\u0627\u0645\u0648\u0641\u0642)" : "" }}
22
+ </p>
23
+ <p class="font-bold">
24
+ {{ transaction.amount?.toLocaleString("en") }} {{ $t("\u062A\u0648\u0645\u0627\u0646") }}
25
+ </p>
26
+ </template>
27
+ <template #bodyEnd>
28
+ <p class="text-gray-400 text-sm">
29
+ {{ moment(transaction.createdAt).locale("fa").format("jDD jMMMM jYYYY \u0633\u0627\u0639\u062A H:mm ") }}
30
+ </p>
31
+ </template>
32
+ </UnCard>
33
+ </template>
34
+
35
+ <script setup>
36
+ import { _get, computed, isProviderSide, moment, useConfig, useUserId } from "#imports";
37
+ const config = useConfig();
38
+ const { titleKey = "booking.provider.fullName", transaction } = defineProps({
39
+ transaction: { type: Object, required: true },
40
+ titleKey: { type: String, required: false }
41
+ });
42
+ const userId = useUserId();
43
+ const titleType = {
44
+ DEPOSIT: "\u0648\u0627\u0631\u06CC\u0632",
45
+ PAYMENT: "\u067E\u0631\u062F\u0627\u062E\u062A",
46
+ TRANSFER: "\u0627\u0646\u062A\u0642\u0627\u0644",
47
+ WITHDRAW: "\u0628\u0631\u062F\u0627\u0634\u062A"
48
+ };
49
+ const Title = computed(() => {
50
+ if (transaction.description) {
51
+ return transaction.description;
52
+ }
53
+ if (transaction.type === "DEPOSIT" && transaction.bookingId) {
54
+ return `\u0628\u0627\u0632\u06AF\u0634\u062A \u0648\u062C\u0647 (${transaction.wallet?.coin?.name})`;
55
+ }
56
+ if (transaction.type === "DEPOSIT" && transaction.walletId && transaction.gatewayId) {
57
+ return `\u0634\u0627\u0631\u0698 ${transaction.wallet?.coin?.name} (\u062F\u0631\u06AF\u0627\u0647 ${transaction.gateway?.gateway?.label})`;
58
+ }
59
+ if (transaction.type === "DEPOSIT" && transaction.userId !== userId.value) {
60
+ return `\u0627\u0639\u062A\u0628\u0627\u0631 \u0647\u062F\u06CC\u0647 (${transaction.wallet?.coin?.name})`;
61
+ }
62
+ if (transaction.type === "PAYMENT" && transaction.gateway?.gateway) {
63
+ return `\u067E\u0631\u062F\u0627\u062E\u062A \u0622\u0646\u0644\u0627\u06CC\u0646 (\u062F\u0631\u06AF\u0627\u0647 ${transaction.gateway?.gateway?.label})`;
64
+ }
65
+ if (transaction.type === "PAYMENT" && transaction.walletId) {
66
+ return `\u067E\u0631\u062F\u0627\u062E\u062A \u0627\u0632 ${transaction.wallet?.coin?.name}`;
67
+ }
68
+ if (transaction.type === "DEPOSIT" && transaction.walletId && transaction.wallet?.userId !== userId.value) {
69
+ return `\u0634\u0627\u0631\u0698 ${transaction.wallet?.coin?.name} ${transaction.wallet?.user?.profile?.firstName || ""} ${transaction.wallet?.user?.profile?.lastName || ""}`;
70
+ }
71
+ if (transaction.type === "DEPOSIT" && transaction.walletId) {
72
+ return `\u0634\u0627\u0631\u0698 ${transaction.wallet?.coin?.name}`;
73
+ }
74
+ if (transaction.type === "TRANSFER" && transaction.toWallet?.userId === userId.value) {
75
+ return `\u0634\u0627\u0631\u0698 ${transaction.wallet?.coin?.name} \u0627\u0632 \u0637\u0631\u0641 ${transaction.wallet?.user?.profile?.firstName || ""} ${transaction.wallet?.user?.profile?.lastName || ""}`;
76
+ }
77
+ if (transaction.type === "TRANSFER" && transaction.toWallet?.userId !== userId.value) {
78
+ return `\u0627\u0631\u0633\u0627\u0644 \u0634\u0627\u0631\u0698 ${transaction.wallet?.coin?.name} \u0628\u0647 ${transaction.toWallet?.user?.profile?.firstName || ""} ${transaction.toWallet?.user?.profile?.lastName || ""}`;
79
+ }
80
+ });
81
+ const statusVariant = computed(() => ["REJECTED", "FAILED"].includes(transaction.status) ? "text-danger" : transaction.type === "DEPOSIT" || transaction.type === "TRANSFER" && transaction.toWallet?.userId === userId.value ? "text-success" : "text-danger");
82
+ const statusIcon = computed(() => ["REJECTED", "FAILED"].includes(transaction.status) ? "solar:danger-circle-bold-duotone" : transaction.type === "DEPOSIT" || transaction.type === "TRANSFER" && transaction.toWallet?.userId === userId.value ? "solar:import-bold-duotone" : "solar:export-bold-duotone");
83
+ </script>
@@ -0,0 +1,8 @@
1
+ import type { Transaction } from '../types/models.js';
2
+ type __VLS_Props = {
3
+ transaction: Transaction;
4
+ titleKey?: string;
5
+ };
6
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
+ declare const _default: typeof __VLS_export;
8
+ export default _default;
@@ -0,0 +1,11 @@
1
+ type __VLS_Props = {
2
+ multi?: boolean;
3
+ noWithdraw?: boolean;
4
+ noDeposit?: boolean;
5
+ noTransfer?: boolean;
6
+ trxQuery?: Record<string, string | number | boolean>;
7
+ trxTitleKey?: string;
8
+ };
9
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
10
+ declare const _default: typeof __VLS_export;
11
+ export default _default;
@@ -0,0 +1,150 @@
1
+ <template>
2
+ <div class="flex flex-col gap-4 grow">
3
+ <UnTab
4
+ v-if="multi"
5
+ v-model="tab"
6
+ :items="tabs"
7
+ :custom-class="{ label: '[&.selected]:bg-transparent' }"
8
+ />
9
+ <div
10
+ v-else
11
+ class="mt-2 relative bg-white rounded-2xl py-4 flex flex-col items-center font-bold text-lg text-center text-primary-500"
12
+ >
13
+ <UnNuxtIcon
14
+ name="solar:refresh-circle-bold-duotone"
15
+ class="!absolute right-4 top-4 text-primary-500 cursor-pointer"
16
+ @click="showWalletModal = true"
17
+ />
18
+ <p>
19
+ {{ $t("\u0627\u0639\u062A\u0628\u0627\u0631") + " " + selectedWallet?.coin?.name }}:
20
+ </p>
21
+ <p>
22
+ {{ _round(selectedWallet?.balance || 0, selectedWallet?.coin?.precision || 0)?.toLocaleString("en") }}
23
+ {{ $t("\u062A\u0648\u0645\u0627\u0646") }}
24
+ </p>
25
+ </div>
26
+ <UnSelect
27
+ v-if="tab === 'wallet' && multi"
28
+ v-model="selectedWallet"
29
+ :custom-class="{ innerWrapper: '<md:(!max-h-unset bg-white !pb-0 !border-(1 solid transparent)' }"
30
+ inline
31
+ light
32
+ :items="mappedWallet"
33
+ class="z-1"
34
+ />
35
+ <template v-else>
36
+ <div class="flex items-center justify-between">
37
+ <UnSelect
38
+ v-model="filterWallet"
39
+ light
40
+ :custom-class="{ header: '!h-unset !px-2', radio: '!p-1 !px-3', radioItem: { card: 'grow-1', item: { body: '!p-1' } } }"
41
+ :items="[{ title: '\u0647\u0645\u0647 \u062A\u0631\u0627\u06A9\u0646\u0634 \u0647\u0627', id: null }, ...mappedWallet]"
42
+ value-key="id"
43
+ />
44
+ <!-- <TheChips label="تراکنش های کیف پول" prepend="solar:check-read-outline" -->
45
+ <!-- :variant="onlyWallet ? 'secondary-fill' : 'secondary'" @click="toggleOnlyWallet"/> -->
46
+ </div>
47
+ <div class="relative grow">
48
+ <div
49
+ v-if="status === 'success' && filteredTransactions?.length"
50
+ class="children:shrink-0 absolute h-full w-full overflow-y-auto flex flex-col items-stretch grow gap-3"
51
+ >
52
+ <UnTransaction
53
+ v-for="transaction in filteredTransactions"
54
+ :key="transaction.id"
55
+ :title-key="trxTitleKey"
56
+ :transaction="transaction"
57
+ />
58
+ </div>
59
+ </div>
60
+ </template>
61
+ <UnWalletActions
62
+ v-if="selectedWallet?.id && tab === 'wallet'"
63
+ :selected-wallet="selectedWallet"
64
+ :no-deposit
65
+ :no-withdraw
66
+ :no-transfer
67
+ @withdraw="withdraw"
68
+ @transfer="transferModal = true"
69
+ @deposit="showModal = true"
70
+ />
71
+ <UnModalWalletIncrease
72
+ v-if="showModal && selectedWallet?.id"
73
+ :wallet="selectedWallet"
74
+ @close="showModal = false"
75
+ />
76
+ <UnModalTransfer
77
+ v-if="transferModal"
78
+ @close="transferModal = false;
79
+ refresh()"
80
+ />
81
+ <UnModalWithdrawal
82
+ v-if="withdrawalModal"
83
+ :wallet="selectedWallet"
84
+ @close="withdrawalModal = false"
85
+ />
86
+ <UnModalWalletSelection
87
+ v-if="!multi"
88
+ v-show="showWalletModal"
89
+ v-model="selectedWalletIndex"
90
+ v-model:method="selectedWallet"
91
+ @update:method="showWalletModal = false"
92
+ @close="showWalletModal = false"
93
+ @submit="showWalletModal = false"
94
+ />
95
+ </div>
96
+ </template>
97
+
98
+ <script setup>
99
+ import { _ceil, _round, computed, useAsyncData, useNuxtApp, useUser, useWallets } from "#imports";
100
+ import { getMyTransactions } from "../composables/services";
101
+ const { multi = true, trxQuery = {} } = defineProps({
102
+ multi: { type: Boolean, required: false },
103
+ noWithdraw: { type: Boolean, required: false },
104
+ noDeposit: { type: Boolean, required: false },
105
+ noTransfer: { type: Boolean, required: false },
106
+ trxQuery: { type: Object, required: false },
107
+ trxTitleKey: { type: String, required: false }
108
+ });
109
+ const tabs = [
110
+ {
111
+ value: "wallet",
112
+ title: "\u06A9\u06CC\u0641 \u067E\u0648\u0644"
113
+ },
114
+ {
115
+ value: "transaction",
116
+ title: "\u062A\u0631\u0627\u06A9\u0646\u0634 \u0647\u0627"
117
+ }
118
+ ];
119
+ const tab = ref("wallet");
120
+ const filterWallet = ref(null);
121
+ const wallets = await useWallets(true);
122
+ const mappedWallet = computed(() => wallets.value.map((e) => ({
123
+ ...e,
124
+ icon: e.coin?.icon,
125
+ title: e.coin?.name,
126
+ unit: e.coin?.unit,
127
+ description: ["\u0645\u0627\u0646\u062F\u0647:", _ceil(e.balance || 0, e.coin?.precision || 0)?.toLocaleString("en"), e.coin?.isFiat ? "\u062A\u0648\u0645\u0627\u0646" : e.coin?.unit].join(" "),
128
+ type: "wallet"
129
+ })));
130
+ const selectedWalletIndex = ref(wallets.value[0]?.id);
131
+ const selectedWallet = ref(mappedWallet.value[0]);
132
+ const showModal = ref(false);
133
+ const transferModal = ref(false);
134
+ const withdrawalModal = ref(false);
135
+ const showWalletModal = ref(false);
136
+ const {
137
+ data: transactions,
138
+ status,
139
+ refresh
140
+ } = useAsyncData("get-trxs", () => getMyTransactions(trxQuery));
141
+ const user = useUser();
142
+ const { $toast } = useNuxtApp();
143
+ const withdraw = () => {
144
+ if (selectedWallet.value?.coin?.isFiat && (!user.value?.profile?.idCard || !user.value?.profile?.iban)) {
145
+ return $toast.error("\u062C\u0647\u062A \u062B\u0628\u062A \u0628\u0631\u062F\u0627\u0634\u062A \u0644\u0637\u0641\u0627 \u06A9\u062F\u0645\u0644\u06CC \u0648 \u0634\u0645\u0627\u0631\u0647 \u0634\u0628\u0627 \u0631\u0627 \u062F\u0631 \u062D\u0633\u0627\u0628 \u06A9\u0627\u0631\u0628\u0631\u06CC \u062A\u06A9\u0645\u06CC\u0644 \u0646\u0645\u0627\u06CC\u06CC\u062F.");
146
+ }
147
+ withdrawalModal.value = true;
148
+ };
149
+ const filteredTransactions = computed(() => transactions.value?.filter((e) => `${e.walletId} ${e.toWalletId}`.includes(filterWallet.value || "")));
150
+ </script>
@@ -0,0 +1,11 @@
1
+ type __VLS_Props = {
2
+ multi?: boolean;
3
+ noWithdraw?: boolean;
4
+ noDeposit?: boolean;
5
+ noTransfer?: boolean;
6
+ trxQuery?: Record<string, string | number | boolean>;
7
+ trxTitleKey?: string;
8
+ };
9
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
10
+ declare const _default: typeof __VLS_export;
11
+ export default _default;
@@ -0,0 +1,10 @@
1
+ import type { Wallet } from '../types/wallet.js';
2
+ type __VLS_Props = {
3
+ selectedWallet: Wallet | null;
4
+ noWithdraw?: boolean;
5
+ noDeposit?: boolean;
6
+ noTransfer?: boolean;
7
+ };
8
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, any, string, import("vue").PublicProps, any, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
+ declare const _default: typeof __VLS_export;
10
+ export default _default;
@@ -0,0 +1,37 @@
1
+ <template>
2
+ <div class="border-t-(1 solid border) flex flex-wrap children:grow-1 sticky bottom-0 mt-auto z-2 bg-white rounded-t-xl -mx-4 <md:-mx-3 px-4 py-3 gap-3">
3
+ <UnCard
4
+ :item="selectedWallet"
5
+ class="basis-full"
6
+ />
7
+ <UnButton
8
+ v-if="selectedWallet?.coin?.withdrawable && !noWithdraw"
9
+ variant="primary-fill"
10
+ class="basis-full"
11
+ label="برداشت"
12
+ @click="$emit('withdraw')"
13
+ />
14
+ <UnButton
15
+ v-if="selectedWallet?.coin?.transferable && !noTransfer"
16
+ variant="primary-fill"
17
+ label="انتقال"
18
+ @click="$emit('transfer')"
19
+ />
20
+ <UnButton
21
+ v-if="selectedWallet?.coin?.depositable && !noDeposit"
22
+ variant="primary-fill"
23
+ label="افزایش اعتبار"
24
+ @click="$emit('deposit')"
25
+ />
26
+ </div>
27
+ </template>
28
+
29
+ <script setup>
30
+ defineProps({
31
+ selectedWallet: { type: null, required: true },
32
+ noWithdraw: { type: Boolean, required: false },
33
+ noDeposit: { type: Boolean, required: false },
34
+ noTransfer: { type: Boolean, required: false }
35
+ });
36
+ defineEmits(["withdraw", "transfer", "deposit"]);
37
+ </script>
@@ -0,0 +1,10 @@
1
+ import type { Wallet } from '../types/wallet.js';
2
+ type __VLS_Props = {
3
+ selectedWallet: Wallet | null;
4
+ noWithdraw?: boolean;
5
+ noDeposit?: boolean;
6
+ noTransfer?: boolean;
7
+ };
8
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, any, string, import("vue").PublicProps, any, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
+ declare const _default: typeof __VLS_export;
10
+ export default _default;
@@ -10,6 +10,7 @@ import {
10
10
  navigateTo,
11
11
  onBeforeUnmount,
12
12
  ref,
13
+ useDevice,
13
14
  useGet,
14
15
  useNuxtApp,
15
16
  usePost,
@@ -213,9 +214,9 @@ export const useWallets = async (isActive = void 0, id = void 0) => {
213
214
  const { result: currentWallets } = await useGet("/wallet", {
214
215
  params: {
215
216
  "$w.userId": userId.value,
216
- "$w.isActive": isActive,
217
- "$i.coin.$i.gateways.$w.active": true,
218
- "$i.coin.$i.gateways.$i.gateway": true
217
+ // '$w.isActive': isActive,
218
+ "$i.coin.$i.gateways.$w.active": isActive,
219
+ "$i.coin.$i.gateways.$i.gateway": isActive
219
220
  }
220
221
  });
221
222
  const { result: coins } = await useGet("/coin", { params: { "$w.walletable": true } });
@@ -225,14 +226,14 @@ export const useWallets = async (isActive = void 0, id = void 0) => {
225
226
  coinId: e.id,
226
227
  userId: userId.value
227
228
  })).filter((c) => !wallet.value?.find((w) => w.coinId === c.coinId));
228
- if (wallets.length) {
229
+ if (wallets?.length) {
229
230
  await usePost("/wallet", wallets);
230
231
  const { result: w } = await useGet("/wallet", {
231
232
  params: {
232
233
  "$w.userId": userId.value,
233
- "$i.coin.$i.gateways.$w.active": true,
234
- "$i.coin.$i.gateways.$i.gateway": true,
235
- "$w.isActive": isActive
234
+ "$i.coin.$i.gateways.$w.active": isActive,
235
+ "$i.coin.$i.gateways.$i.gateway": isActive
236
+ // '$w.isActive': isActive,
236
237
  }
237
238
  });
238
239
  wallet.value = w || [];
@@ -293,20 +294,27 @@ export const getDiscountInfo = async (code, shop = null) => {
293
294
  };
294
295
  export const submitPayment = async (amount, details = {}, giftCode = void 0, redirect = true) => {
295
296
  const userId = useUserId();
297
+ const { isIos } = useDevice();
296
298
  const { $toast } = useNuxtApp();
297
299
  const { result } = await usePost("/transaction", {
298
300
  amount,
299
301
  userId: userId.value || "",
300
302
  discountCode: giftCode,
301
303
  type: "PAYMENT",
302
- redirectUrl: location.origin + "/verify",
304
+ redirectUrl: window.urlPrefix + location.origin + "/verify",
303
305
  ...details
304
306
  });
305
307
  console.log("here", result);
306
308
  if (redirect) {
307
309
  if (result?.paymentUrl) {
308
310
  $toast.success("\u062F\u0631\u062D\u0627\u0644 \u0627\u0646\u062A\u0642\u0627\u0644 \u0628\u0647 \u062F\u0631\u06AF\u0627\u0647 \u067E\u0631\u062F\u0627\u062E\u062A");
309
- result && window.open(result?.paymentUrl, "_self");
311
+ if (result) {
312
+ if (isIos && window.urlPrefix) {
313
+ window.parent.location.href = result?.paymentUrl;
314
+ } else {
315
+ window.open(result?.paymentUrl, window.urlPrefix ? "_blank" : "_self");
316
+ }
317
+ }
310
318
  } else if (result?.id) {
311
319
  $toast.success("\u067E\u0631\u062F\u0627\u062E\u062A \u0628\u0627 \u0645\u0648\u0641\u0642\u06CC\u062A \u0627\u0646\u062C\u0627\u0645 \u0634\u062F.");
312
320
  navigateTo({ name: "verify", query: { txId: result.id } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unsource/ui",
3
- "version": "2.7.18",
3
+ "version": "2.8.0",
4
4
  "private": false,
5
5
  "description": "nuxt ui kit for unsource env",
6
6
  "repository": "https://github.com/alisa2142/unsource-ui",