safavi works

This commit is contained in:
2026-06-23 09:18:41 +02:00
parent 0e16e7c186
commit 1cf4c9675b
41 changed files with 965 additions and 522 deletions
@@ -1,6 +1,6 @@
<template>
<MobileNewRequestView v-show="!isDesktop" />
<DesktopNewRequestView v-show="isDesktop" />
<MobileNewRequestView v-if="!isDesktop" />
<DesktopNewRequestView v-if="isDesktop" />
</template>
<script lang="ts" setup>
@@ -30,22 +30,28 @@
</template>
<script setup lang="ts">
import { computed } from 'vue'
import BasicButton from '@/components/BasicPacks/BasicButton.vue'
import type { Address } from '@/models/address'
interface Props {
addresses?: Address[]
variant?: 'mobile' | 'desktop'
selectedAddressId?: number
}
withDefaults(defineProps<Props>(), {
const props = withDefaults(defineProps<Props>(), {
variant: 'mobile',
})
const selectedAddressID = defineModel<number | undefined>('selectedAddressID')
const emit = defineEmits<{
addAddress: []
submit: []
'update:selectedAddressId': [value: number | undefined]
}>()
const selectedAddressID = computed({
get: () => props.selectedAddressId,
set: (value: number | undefined) => emit('update:selectedAddressId', value),
})
</script>
@@ -1,6 +1,7 @@
import { inject, onMounted, provide, ref, type InjectionKey, type Ref } from 'vue'
import { inject, nextTick, onMounted, provide, ref, type InjectionKey, type Ref } from 'vue'
import { cloneDeep } from 'lodash'
import { message } from 'ant-design-vue'
import router from '@/router'
import { getProductInventory } from '@/api/products'
import { physicalReceiveApi } from '@/api/physicalreceive'
import { tableAddress } from '@/api/address'
@@ -93,6 +94,11 @@ export function useNewPhysicalRequestPage() {
}
async function handelsubmit() {
if (!selectedAddressID.value) {
message.error('لطفاً آدرس را انتخاب کنید.')
return
}
try {
loading.value = true
productsByWalletId.value = selectedProducts.value.map((val) => ({
@@ -103,14 +109,19 @@ export function useNewPhysicalRequestPage() {
address_id: selectedAddressID.value,
wallets: productsByWalletId.value,
})
await initProductWallet()
message.success('درخواست شما با موفقیت ارسال شد')
showAddress.value = false
selectedAddressID.value = undefined
selectedProducts.value = []
await nextTick()
message.success('درخواست شما با موفقیت ارسال شد')
await initProductWallet()
await router.push({ name: 'list' })
} catch (e) {
console.log(e)
} finally {
loading.value = false
showAddress.value = false
}
}
@@ -84,7 +84,7 @@
destroy-on-close
custom-footer
>
<New_EditAddress @onOk="handleAddress" />
<New_EditAddress v-if="addAddressVisible" :visible="addAddressVisible" @onOk="handleAddress" />
<template #footer>
<div></div>
</template>
@@ -1,6 +1,6 @@
<template>
<div>
<div ref="el" class="px-3 pt-15">
<div ref="el" class="px-3 mpage-content pb-2">
<div class="flex gap-2">
<BasicSelect
v-model:value="selectedProduct"
@@ -45,7 +45,7 @@
</BasicActionSheet>
<BasicActionSheet v-model:show="addAddressVisible">
<New_EditAddress @onOk="handleAddress" />
<New_EditAddress v-if="addAddressVisible" :visible="addAddressVisible" @onOk="handleAddress" />
</BasicActionSheet>
</div>
</template>
@@ -1,21 +1,17 @@
<template>
<div class="physical-receive-mobile-chrome" style="max-height: calc(100vh - 50px)">
<div class="bg-white py-3 px-3 z-100000 text-primary font-bold drop-shadow flex flex-col wrap-fix">
<div class="flex">
<div @click="router.back()">
<BasicIcon icon="vuesax-linear:arrow-right-1" />
</div>
<div v-if="route.name === 'list'" class="mr-2">دریافت فیزیکی</div>
<div v-else class="mr-2">دریافت فیزیکی-درخواست جدید</div>
</div>
</div>
<MobilePageHeader :title="pageTitle" show-back />
</div>
</template>
<script lang="ts" setup>
import router from '@/router'
import BasicIcon from '@/components/BasicPacks/BasicIcon.vue'
import { computed } from 'vue'
import { useRoute } from 'vue-router'
import MobilePageHeader from '@/layouts/components/MobilePageHeader.vue'
const route = useRoute()
const pageTitle = computed(() =>
route.name === 'list' ? 'دریافت فیزیکی' : 'دریافت فیزیکی-درخواست جدید',
)
</script>
@@ -1,7 +1,7 @@
<template>
<div>
<div
class="flex flex-col gap-4 pt-13 px-2 pb-[calc(var(--app-bottom-chrome-height)+var(--app-add-card-height)+1rem)]"
class="flex flex-col gap-4 mpage-content px-2 pb-[calc(var(--app-bottom-chrome-height)+var(--app-add-card-height)+1rem)]"
>
<RequestItem v-for="item in requestItems" :key="item.id" :item="item" />
</div>