From e5503f88648e847f2d1ae1fd535c67770a3da2e7 Mon Sep 17 00:00:00 2001 From: MojtabaSoumi Date: Mon, 9 Feb 2026 11:59:33 +0330 Subject: [PATCH] 1404/11/20-add inventory for product --- components.d.ts | 3 - src/api/product.ts | 2 +- src/model/product.ts | 90 ++++++++-------- src/pages/menuPages/products/base/index.vue | 108 +++++++++++--------- 4 files changed, 106 insertions(+), 97 deletions(-) diff --git a/components.d.ts b/components.d.ts index 7f20e62..5fb4f4b 100644 --- a/components.d.ts +++ b/components.d.ts @@ -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'] diff --git a/src/api/product.ts b/src/api/product.ts index c92f188..1ae83f6 100644 --- a/src/api/product.ts +++ b/src/api/product.ts @@ -8,7 +8,7 @@ export const createProduct = async (obj: Customer) => await useAxios.post(`/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(`/admin/product/${id}`, obj) export const getCustomerTable = async (params: TableInput) => diff --git a/src/model/product.ts b/src/model/product.ts index 49c58b5..ef2345f 100644 --- a/src/model/product.ts +++ b/src/model/product.ts @@ -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 } \ No newline at end of file diff --git a/src/pages/menuPages/products/base/index.vue b/src/pages/menuPages/products/base/index.vue index fdca45d..f156fbe 100644 --- a/src/pages/menuPages/products/base/index.vue +++ b/src/pages/menuPages/products/base/index.vue @@ -69,11 +69,11 @@ -
+
قیمت :
+ + + - - - - @@ -161,6 +165,9 @@ /> + + +
@@ -179,24 +186,6 @@ @delete="deleteFile" />
- - @@ -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(false) +const loading = ref(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("1"); const weightOption = ref("1"); @@ -454,12 +442,12 @@ const ProductIndexImage = ref>([]); 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 = [ { value: "شمش پرنیا" } -] + +]; const data = ref([]); const fetchData = async () => {