1404/11/04- first

This commit is contained in:
2026-01-24 17:45:54 +03:30
commit edf1824229
554 changed files with 59581 additions and 0 deletions
+21
View File
@@ -0,0 +1,21 @@
<template>
<div class="">
<div class="text-gray-400">{{title}}:</div>
<div v-if="value" class="font-bold mt-1">{{value}}</div>
<slot v-else></slot>
</div>
</template>
<script setup lang="ts">
interface Prop {
title: string
value?: string
}
const props = defineProps<Prop>()
</script>
<style scoped lang="less">
</style>
@@ -0,0 +1,250 @@
<template>
<ADrawer :class="prefixCls" v-model:visible="localValue" placement="bottom" class="wrapp-taraz">
<div>
<div class="rounded-lg border-solid border-1px border-gray-200 p-2 mb-5">
<div class="flex items-center gap-5">
<div class="font-bold">تعیین وضعیت:</div>
<a-radio-group v-model:value="localSts" :options="stsOptions" />
</div>
<transition>
<div v-if="localSts === 3" class="flex items-center gap-3">
<div class="font-bold">قیمت پیشنهادی:</div>
<BasicInput
v-model:value="suggestedPrice"
addon-before="ریال"
type="price"
@click="hotSelect"
/>
</div>
</transition>
</div>
<div class="w-full bg-gray-50 border-solid border-1px border-gray-200 p-2 rounded-lg">
<div class="font-bold">مشخصات سفارش</div>
<div class="grid grid-cols-2 gap-2">
<div
class="rounded-lg bg-white grid grid-cols-2 col-span-2 p-2 mt-2 border-solid border-1px border-gray-100"
>
<Item title="شماره" :value="selectedItem?.id ?? '-'" />
<Item
title="مقدار"
:value="`${selectedItem?.amount ?? '-'} ${
selectedItem?.product?.unit === 'گرم' ? 'گرم' : 'عدد'
}`"
/>
<Item title="قیمت کل برای مشتری" :value="usePrice(selectedItem?.total_price ?? 0)" />
<Item title="سود کل برای مدیر" :value="usePrice(selectedItem?.total_fee_master ?? 0)" />
</div>
<Item title="میزان پرداخت شده" :value="usePrice(selectedItem?.payment_amount ?? 0)" />
<Item title="میزان مبلغ باقیمانده" :value="usePrice(selectedItem?.payment_remind ?? 0)" />
<Item
v-if="selectedItem?.product?.unit === 'گرم'"
title="قیمت هر مثقال"
:value="usePrice(parseInt((selectedItem?.price * 4.331800000515843).toFixed(0)))"
/>
<Item title="قیمت هر واحد برای مشتری" :value="usePrice(selectedItem?.price ?? 0)" />
<Item
title="قیمت هر واحد بدون سود"
:value="usePrice(selectedItem?.price_original ?? 0)"
/>
<Item
title="قیمت کل بدون سود"
:value="usePrice(selectedItem?.total_price_original ?? 0)"
/>
<Item title="سود هر واحد برای نماینده" :value="usePrice(selectedItem?.fee_agent ?? 0)" />
<Item title="سود کل برای نماینده" :value="usePrice(selectedItem?.total_fee_agent ?? 0)" />
<Item title="سود هر واحد برای مدیر" :value="usePrice(selectedItem?.fee_master ?? 0)" />
<Item title="قیمت پیشنهادی مدیر" :value="usePrice(selectedItem?.offer_price ?? 0)" />
<Item title="قیمت پیشنهادی قبلی مشتری" :value="usePrice(selectedItem?.pre_price ?? 0)" />
<Item title="تاریخ ایجاد رکورد" :value="toJalali(selectedItem?.created_at)" />
<Item title="تاریخ انجام سفارش" :value="toJalali(selectedItem?.pay_at)" />
<Item title="وضعیت پرداخت">
<CustomTag bg-color="#e0f2fe" text-color="#0284c7" class="px-3 font-bold py-1">
{{ paymentStsString(selectedItem?.payment_sts) }}
</CustomTag>
</Item>
<Item title="وضعیت سفارش">
<CustomTag
:bg-color="returnStsBgColor(selectedItem?.sts)"
:text-color="returnStsTextColor(selectedItem?.sts)"
class="px-3 font-bold py-1"
>{{ selectedItem?.sts_str }}
</CustomTag>
</Item>
</div>
<div class="font-bold mt-5">مشخصات محصول</div>
<div class="grid grid-cols-2 gap-2">
<Item title="کد" :value="selectedItem?.product?.id ?? '-'" />
<Item title="نام محصول" :value="selectedItem?.product?.title ?? '-'" />
<Item title="واحد" :value="selectedItem?.product?.unit ?? '-'" />
</div>
<div class="font-bold mt-5">مشخصات مشتری و نماینده</div>
<div class="grid grid-cols-2 gap-2">
<Item title="کد مشتری" :value="selectedItem?.customer?.id ?? '-'" />
<Item title="کد نماینده" :value="selectedItem?.customer?.agent_id ?? '-'" />
<Item title="نام و نام خانوادگی مشتری" :value="selectedItem?.customer?.name ?? '-'" />
<Item title="نام و نام خانوادگی نماینده" :value="selectedItem?.customer?.name ?? '-'" />
<Item title="نوع کاربر">
<CustomTag bg-color="#e0f2fe" text-color="#0284c7" class="px-3 font-bold py-1">
{{ selectedItem?.type === 1 ? 'نماینده' : 'مشتری' }}
</CustomTag>
</Item>
<Item title="شماره موبایل مشتری" :value="selectedItem?.customer?.mobile ?? '-'" />
<Item title="شماره موبایل نماینده" :value="selectedItem?.customer?.mobile ?? '-'" />
</div>
<ADivider class="!my-2" />
<div class="font-bold mt-5 mb-3 border-t">تراکنش ها</div>
<div
class="grid grid-cols-2 py-2 gap-2"
:class="[{'border-b-solid border-b-1px border-gray-300':selectedItem?.transaction?.length-1 !== index}]"
v-for="(item, index) in selectedItem?.transaction"
:key="index"
>
<Item title="عنوان تراکنش" :value="item?.title ?? '-'" />
<Item title="مقدار مبادله شده" :value="item.amount ?? '-'" />
<Item title="کد تراکنش" :value="item.id ?? '-'" />
<Item title="تاریخ ایجاد" :value="item.caj ?? '-'" />
</div>
</div>
<div class="flex justify-end mt-2">
<BaseButton @click="setStatus" type="primary">ثبت</BaseButton>
</div>
</div>
</ADrawer>
</template>
<script lang="ts" setup>
import { usePrefix } from '@core/composable/usePrefix'
import useBaseTable from '@core/components/BaseTable/hooks/useBaseTable'
const [reload] = useBaseTable()
const { prefixCls } = usePrefix('base-transactions')
import { usePrice } from '@core/utils/usePrice'
import { hotSelect, loading } from '@/utils'
import { message, type RadioGroupProps, Tooltip } from 'ant-design-vue'
import { toJalali } from '@core/utils/useDataTime'
import type { Order } from '@/model/order'
import Item from '@/pages/balance/components/Item.vue'
import CustomTag from '@/components/CustomTag.vue'
import { changeOrderSts } from '@/api/order'
interface Prop {
showTransactionsDrawer?: boolean
selectedItem?: object
}
const props = withDefaults(defineProps<Prop>(), {})
const emits = defineEmits(['update:showTransactionsDrawer', 'update:selectedSts'])
const stsOptions: RadioGroupProps['options'] = [
{ label: 'باز', value: 1 },
{ label: 'تایید شده', value: 2 },
{ label: 'ردشده', value: 4 },
{ label: 'رد شده و ثبت قیمت جدید', value: 3 }
]
function paymentStsString(localSts: number) {
switch (localSts) {
case 1:
return 'در انتظار پرداخت'
case 2:
return 'در حال پرداخت'
case 3:
return 'قسمتی پرداخت شده'
case 4:
return 'پرداخت شده'
case 5:
return 'قسمتی باز پرداخت شده'
case 6:
return 'مرجوعی'
case 7:
return 'پرداخت نشده'
}
}
const suggestedPrice = ref<number>(0)
const localValue = computed({
get() {
return props.showTransactionsDrawer
},
set(value) {
emits('update:showTransactionsDrawer', value)
}
})
const localSts = computed({
get() {
return props.selectedItem?.sts
},
set(value) {
emits('update:selectedSts', value)
}
})
function returnStsTextColor(val: number | undefined) {
switch (val) {
case 1:
return '#2563eb'
case 2:
return '#16a34a'
case 3:
return '#ca8a04'
case 4:
return '#dc2626'
case 6:
return '#57534e'
default:
return '#7c3aed'
}
}
function returnStsBgColor(val: number | undefined) {
switch (val) {
case 1:
return '#dbeafe'
case 2:
return '#dcfce7'
case 3:
return '#fef9c3'
case 4:
return '#fee2e2'
case 6:
return '#f5f5f4'
default:
return '#ede9fe'
}
}
async function setStatus() {
try {
loading.value = true
if (localSts.value === 3 && suggestedPrice.value === 0) {
message.error('لطفا قیمت پیشنهادی خود را وارد کنید')
return
} else {
await changeOrderSts({
order_id: props.selectedItem?.id,
sts: localSts.value,
offer_price: suggestedPrice.value
})
reload()
emits('update:showTransactionsDrawer', false)
message.success('وضعیت با موفقیت تغییر یافت')
}
} catch (e) {
console.log(e)
} finally {
loading.value = false
}
}
</script>
<style lang="less" scoped>
@prefix:~ '@{prefixCls}-base-transactions';
.@{prefix}{
.layout-item{
cursor: pointer;
border:2px solid #eee;
padding:5px;
&.active{
border-color: @primary-color;
color:#000000
}
}
}
</style>