1404/11/20-add inventory for product
This commit is contained in:
Vendored
-3
@@ -32,10 +32,7 @@ declare module '@vue/runtime-core' {
|
||||
AMenuItem: typeof import('ant-design-vue/es')['MenuItem']
|
||||
AModal: typeof import('ant-design-vue/es')['Modal']
|
||||
APagination: typeof import('ant-design-vue/es')['Pagination']
|
||||
APopconfirm: typeof import('ant-design-vue/es')['Popconfirm']
|
||||
APopover: typeof import('ant-design-vue/es')['Popover']
|
||||
ARadio: typeof import('ant-design-vue/es')['Radio']
|
||||
ARadioButton: typeof import('ant-design-vue/es')['RadioButton']
|
||||
ARadioGroup: typeof import('ant-design-vue/es')['RadioGroup']
|
||||
ASelect: typeof import('ant-design-vue/es')['Select']
|
||||
ASelectOption: typeof import('ant-design-vue/es')['SelectOption']
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ export const createProduct = async (obj: Customer) =>
|
||||
await useAxios.post<AddId>(`/admin/product`, obj)
|
||||
|
||||
export const deleteCustomer = async (id: number) => await useAxios.delete(`/admin/product/${id}`)
|
||||
export const updateCustomer = async (id: number, obj: Customer) =>
|
||||
export const updateProduct = async (id: number, obj: Customer) =>
|
||||
await useAxios.put<AddId>(`/admin/product/${id}`, obj)
|
||||
|
||||
export const getCustomerTable = async (params: TableInput) =>
|
||||
|
||||
+46
-44
@@ -1,57 +1,59 @@
|
||||
import type { User } from '@/model/user'
|
||||
import type { Wallet } from '@/model/wallet'
|
||||
import type {User} from '@/model/user'
|
||||
import type {Wallet} from '@/model/wallet'
|
||||
|
||||
export interface AddId {
|
||||
id: number
|
||||
id: number
|
||||
}
|
||||
|
||||
export interface Product{
|
||||
id: number,
|
||||
amount: number,
|
||||
percent_fee_buy: number,
|
||||
cash_fee_buy: number,
|
||||
percent_fee_sell: number,
|
||||
cash_fee_sell: number
|
||||
group_type: string
|
||||
unit: string
|
||||
active: boolean
|
||||
created_at: string
|
||||
open_buy: boolean
|
||||
open_sell: boolean
|
||||
show: boolean
|
||||
title: string
|
||||
updated_at: string
|
||||
methodOption: number
|
||||
prices: MethodePrices[]
|
||||
price: number
|
||||
reading_method: string
|
||||
weight: number
|
||||
auto_open_at: string
|
||||
auto_close_at: string
|
||||
description:string
|
||||
file_id:number| null
|
||||
export interface Product {
|
||||
id: number,
|
||||
amount: number,
|
||||
percent_fee_buy: number,
|
||||
cash_fee_buy: number,
|
||||
percent_fee_sell: number,
|
||||
cash_fee_sell: number
|
||||
group_type: string
|
||||
unit: string
|
||||
active: boolean
|
||||
created_at: string
|
||||
open_buy: boolean
|
||||
open_sell: boolean
|
||||
show: boolean
|
||||
title: string
|
||||
updated_at: string
|
||||
methodOption: number
|
||||
prices: MethodePrices[]
|
||||
price: number
|
||||
reading_method: string
|
||||
weight: number
|
||||
auto_open_at: string
|
||||
auto_close_at: string
|
||||
description: string
|
||||
file_id: number | null
|
||||
inventory: number
|
||||
}
|
||||
|
||||
export interface MethodePrices {
|
||||
id: string
|
||||
name: string
|
||||
price: number
|
||||
profit: number
|
||||
id: string
|
||||
name: string
|
||||
price: number
|
||||
profit: number
|
||||
}
|
||||
|
||||
export interface SetActiveTime {
|
||||
auto_open_at: string
|
||||
auto_close_at: string
|
||||
auto_open_at: string
|
||||
auto_close_at: string
|
||||
}
|
||||
|
||||
export interface Balance {
|
||||
cashBalance: number
|
||||
cashBalanceOfKalhor: number
|
||||
cashBalanceOfLiman: number
|
||||
goldBalance: number
|
||||
goldBalanceOfKalhor: number
|
||||
goldBalanceOfLiman: number
|
||||
mazanehBalance: number
|
||||
mazanehBalanceOfKalhor: number
|
||||
income_money: number
|
||||
mazanehBalanceOfLiman: number
|
||||
cashBalance: number
|
||||
cashBalanceOfKalhor: number
|
||||
cashBalanceOfLiman: number
|
||||
goldBalance: number
|
||||
goldBalanceOfKalhor: number
|
||||
goldBalanceOfLiman: number
|
||||
mazanehBalance: number
|
||||
mazanehBalanceOfKalhor: number
|
||||
income_money: number
|
||||
mazanehBalanceOfLiman: number
|
||||
}
|
||||
@@ -69,11 +69,11 @@
|
||||
</template>
|
||||
</AButton>
|
||||
</div>
|
||||
<div v-if="methodOption === '2'" class="md:flex justify-between items-center">
|
||||
<div v-if="methodOption === '2'" class=" md:flex justify-between items-center">
|
||||
<div class="ml-4">قیمت :</div>
|
||||
<div class="">
|
||||
<BasicSelect
|
||||
class="w-11rem method_style"
|
||||
class="w-11rem method_style"
|
||||
allowClear
|
||||
:items="pricesList"
|
||||
valueName="name"
|
||||
@@ -124,22 +124,26 @@
|
||||
keyName="value"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item v-if="form?.group_type !== 'آبشده'"
|
||||
label="تعداد موجودی" name="inventory" :rules="inputRules()">
|
||||
<BasicInput v-model:value="form.inventory" type="number" />
|
||||
</a-form-item>
|
||||
<!-- <a-form-item v-if="weightOption === '1'" label="وزن به گرم" name="amount" :rules="inputRules()">
|
||||
<BasicInput v-model:value="form.amount" type="number" />
|
||||
</a-form-item>-->
|
||||
<a-form-item v-if="form.group_type === '' || form.group_type !== 'آبشده'"
|
||||
<a-form-item v-if="form?.group_type !== 'آبشده'"
|
||||
label="کارمزد درصدی موقع خرید" name="percent_fee_buy" :rules="inputRules()">
|
||||
<BasicInput v-model:value="form.percent_fee_buy" type="number" />
|
||||
</a-form-item>
|
||||
<a-form-item v-if="form.group_type === '' || form.group_type !== 'آبشده'"
|
||||
<a-form-item v-if="form?.group_type !== 'آبشده'"
|
||||
label="هزینه نقدی موقع خرید" name="cash_fee_buy" :rules="inputRules()">
|
||||
<BasicInput v-model:value="form.cash_fee_buy" type="number" />
|
||||
</a-form-item>
|
||||
<a-form-item v-if="form.group_type === '' || form.group_type !== 'آبشده'"
|
||||
<a-form-item v-if="form?.group_type !== 'آبشده'"
|
||||
label="کارمزد درصدی موقع فروش" name="percent_fee_sell" :rules="inputRules()">
|
||||
<BasicInput v-model:value="form.percent_fee_sell" type="number" />
|
||||
</a-form-item>
|
||||
<a-form-item v-if="form.group_type === '' || form.group_type !== 'آبشده'"
|
||||
<a-form-item v-if="form?.group_type !== 'آبشده'"
|
||||
label="هزینه نقدی موقع فروش" name="cash_fee_sell" :rules="inputRules()">
|
||||
<BasicInput v-model:value="form.cash_fee_sell" type="number" />
|
||||
</a-form-item>
|
||||
@@ -161,6 +165,9 @@
|
||||
/>
|
||||
<!-- <a-time-picker v-model:value="form.auto_close_at"/>-->
|
||||
</a-form-item>
|
||||
<a-form-item label="توضیحات" name="description" >
|
||||
<BasicTextArea v-model:value="form.description" />
|
||||
</a-form-item>
|
||||
</div>
|
||||
</a-form>
|
||||
</template>
|
||||
@@ -179,24 +186,6 @@
|
||||
@delete="deleteFile"
|
||||
/>
|
||||
</div>
|
||||
<!-- <div class="flex gap-2">
|
||||
<BasicImageUploader
|
||||
v-model:file-list="ProductIndexImage"
|
||||
:url="`${baseURL}site/file`"
|
||||
:max-count="1"
|
||||
@ok="uploadedIndexFile"
|
||||
@delete="deleteIndexFile"
|
||||
/>
|
||||
|
||||
<BasicImageUploader
|
||||
v-model:file-list="ImageFileList"
|
||||
:url="`${baseURL}site/file`"
|
||||
:max-count="10"
|
||||
@ok="uploadedFile"
|
||||
@delete="deleteFile"
|
||||
/>
|
||||
</div>-->
|
||||
|
||||
</template>
|
||||
</BaseCollapse>
|
||||
</Collapse>
|
||||
@@ -388,7 +377,7 @@ import { confirmDeleteItem } from "@/utils/confirmModal";
|
||||
import { cloneDeep } from "lodash";
|
||||
import type { Item } from "@/model/Item";
|
||||
import type { Customer } from "@/model/customer";
|
||||
import { createProduct, deleteCustomer, updateCustomer } from "@/api/product";
|
||||
import {createProduct, deleteCustomer, updateProduct} from "@/api/product";
|
||||
import type { Charge } from "@/model/wallet";
|
||||
import customers from "@/router/routes/products";
|
||||
import { chargeWallet } from "@/api/wallet";
|
||||
@@ -404,29 +393,28 @@ import Icon from "@core/components/BaseIcon/src/Icon.vue";
|
||||
import type { MethodePrices, Product } from "@/model/product";
|
||||
import IndexImageUploader from "@/components/ProductUploader/IndexImageUploader.vue";
|
||||
import ProductImageUploader from "@/components/ProductUploader/ProductImageUploader.vue";
|
||||
import {baseURL} from '@root/config'
|
||||
|
||||
//tabs
|
||||
const activeKey = ref("اطلاعات جامع");
|
||||
|
||||
//loading
|
||||
const loading = ref<boolean>(false)
|
||||
const loading = ref<boolean>(false);
|
||||
|
||||
//define store
|
||||
const store = useStaticApiListsStore()
|
||||
const store = useStaticApiListsStore();
|
||||
|
||||
//define tbl
|
||||
const table = ref(null)
|
||||
const orderTable = ref(null)
|
||||
const transactionTable = ref(null)
|
||||
const smsTable = ref(null)
|
||||
const referralTable = ref(null)
|
||||
const fundTable = ref(null)
|
||||
const refreshTable = () => table?.value?.fetch()
|
||||
const refreshOrderTable = () => orderTable?.value?.fetch()
|
||||
const refreshTransactionTable = () => transactionTable?.value?.fetch()
|
||||
const refreshSMSTable = () => smsTable?.value?.fetch()
|
||||
const refreshReferralTable = () => referralTable?.value?.fetch()
|
||||
const table = ref(null);
|
||||
const orderTable = ref(null);
|
||||
const transactionTable = ref(null);
|
||||
const smsTable = ref(null);
|
||||
const referralTable = ref(null);
|
||||
const fundTable = ref(null);
|
||||
const refreshTable = () => table?.value?.fetch();
|
||||
const refreshOrderTable = () => orderTable?.value?.fetch();
|
||||
const refreshTransactionTable = () => transactionTable?.value?.fetch();
|
||||
const refreshSMSTable = () => smsTable?.value?.fetch();
|
||||
const refreshReferralTable = () => referralTable?.value?.fetch();
|
||||
const refreshFundTable = () => fundTable?.value?.fetch();
|
||||
const methodOption = ref<string>("1");
|
||||
const weightOption = ref<string>("1");
|
||||
@@ -454,12 +442,12 @@ const ProductIndexImage = ref<Array<FileList>>([]);
|
||||
|
||||
function uploadedIndexFile(id: number) {
|
||||
// console.log(id)
|
||||
form.value.original_image_id = id;
|
||||
form.value.file_id = id;
|
||||
}
|
||||
|
||||
function deleteIndexFile() {
|
||||
form.value.original_image_id = null;
|
||||
form.value.original_image = null;
|
||||
form.value.file_id = null;
|
||||
form.value.file_id = null;
|
||||
ProductIndexImage.value = [];
|
||||
}
|
||||
|
||||
@@ -626,6 +614,20 @@ async function edit(record: Customer) {
|
||||
|
||||
form.value.auto_open_at = dayjs(customForm.auto_open_at, "HH:mm:ss");
|
||||
form.value.auto_close_at = dayjs(customForm.auto_close_at, "HH:mm:ss");
|
||||
|
||||
// نمایش فایل موجود اگر وجود داشته باشد
|
||||
const file = (record as any).file;
|
||||
if (file && file.src) {
|
||||
ProductIndexImage.value = [{
|
||||
uid: `file-${file.id}`,
|
||||
name: file.original_name || `index-image-${file.id}`,
|
||||
url: file.src,
|
||||
src: file.src,
|
||||
status: 'done' as const
|
||||
}] as any;
|
||||
} else {
|
||||
ProductIndexImage.value = [];
|
||||
}
|
||||
}
|
||||
|
||||
//add
|
||||
@@ -693,6 +695,8 @@ const resetData = () => {
|
||||
percent_fee_sell: 0,
|
||||
cash_fee_sell: 0
|
||||
};
|
||||
ProductIndexImage.value = [];
|
||||
ImageFileList.value = [];
|
||||
};
|
||||
|
||||
//delete
|
||||
@@ -717,24 +721,28 @@ async function ok() {
|
||||
formRef.value?.validateFields().then(async () => {
|
||||
// console.log('salam', form.value)
|
||||
// return
|
||||
|
||||
loading.value = true;
|
||||
try {
|
||||
if (methodOption.value === "1") delete form.value.reading_method;
|
||||
else delete form.value.price;
|
||||
if (weightOption.value === "2")
|
||||
form.value.amount = 1;
|
||||
form.value.auto_open_at = dayjs(form.value.auto_open_at).format("HH:mm:ss");
|
||||
form.value.auto_close_at = dayjs(form.value.auto_close_at).format("HH:mm:ss");
|
||||
await methodePrices(form.value);
|
||||
const payload = cloneDeep(form.value);
|
||||
payload.auto_open_at = dayjs(payload.auto_open_at).format("HH:mm:ss");
|
||||
payload.auto_close_at = dayjs(payload.auto_close_at).format("HH:mm:ss");
|
||||
// await methodePrices();
|
||||
if (editId) {
|
||||
await updateCustomer(editId, form.value);
|
||||
await updateProduct(editId, payload);
|
||||
} else {
|
||||
await createProduct(form.value);
|
||||
await createProduct(payload);
|
||||
}
|
||||
|
||||
addUserVisible.value = false;
|
||||
refreshTable();
|
||||
resetData();
|
||||
|
||||
message.success("عملیات با موفقیت انجام شد");
|
||||
resetData();
|
||||
// await getResponsible()
|
||||
// await getQC()
|
||||
// await getManager()
|
||||
@@ -743,6 +751,7 @@ async function ok() {
|
||||
// message.error('خطا در بارگذاری اطلاعات')
|
||||
} finally {
|
||||
loading.value = false;
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -799,7 +808,8 @@ const categoryItems: Array<Item> = [
|
||||
{
|
||||
value: "شمش پرنیا"
|
||||
}
|
||||
]
|
||||
|
||||
];
|
||||
|
||||
const data = ref<MethodePrices[]>([]);
|
||||
const fetchData = async () => {
|
||||
|
||||
Reference in New Issue
Block a user