diff --git a/src/api/product.ts b/src/api/product.ts index ca6afb2..660a86a 100644 --- a/src/api/product.ts +++ b/src/api/product.ts @@ -52,6 +52,9 @@ export const changeSellActiveProduct = async (id?: number) => { export const changeActiveProduct = async (id: number) => { return await useAxios.get(`/admin/product/active/${id}`) } +export const changeShowOnTvProduct = async (id: number) => { + return await useAxios.get(`/admin/product/show_on_tv/${id}`) +} export const changeVisibilityProduct = async (id: number) => { return await useAxios.get(`/admin/product/hide/${id}`) } diff --git a/src/pages/menuPages/products/base/components/ProductEditorFormBody.vue b/src/pages/menuPages/products/base/components/ProductEditorFormBody.vue index 8a158b1..10be3c4 100644 --- a/src/pages/menuPages/products/base/components/ProductEditorFormBody.vue +++ b/src/pages/menuPages/products/base/components/ProductEditorFormBody.vue @@ -496,11 +496,19 @@
- نمایش در لیست محصولات +
- نمایش در تابلو TV +
@@ -770,11 +778,13 @@ const cashFeeSellHelp: DashboardHelp = { } const showOnTvHelp: DashboardHelp = { - description: 'روشن: این محصول در صفحه تابلو قیمت مشتری (/tv) نمایش داده می‌شود.', + description: + 'مستقل از لیست محصولات است. روشن: این محصول در صفحه تابلو قیمت مشتری (/tv) نمایش داده می‌شود؛ حتی اگر در لیست محصولات خاموش باشد.', } const showInListHelp: DashboardHelp = { - description: 'روشن: این محصول در صفحه لیست محصولات اپ مشتری نمایش داده می‌شود.', + description: + 'مستقل از تابلو TV است. روشن: این محصول در صفحه لیست محصولات اپ مشتری نمایش داده می‌شود. همان آیکون تیک/ضربدر در ستون عملیات همین وضعیت را عوض می‌کند.', } const autoOpenHelp: DashboardHelp = { diff --git a/src/pages/menuPages/products/base/components/ProductMobileCardList.vue b/src/pages/menuPages/products/base/components/ProductMobileCardList.vue index a604bb7..81f2818 100644 --- a/src/pages/menuPages/products/base/components/ProductMobileCardList.vue +++ b/src/pages/menuPages/products/base/components/ProductMobileCardList.vue @@ -24,6 +24,7 @@ @toggleBuy="$emit('toggleBuy', $event)" @toggleSell="$emit('toggleSell', $event)" @toggleActive="$emit('toggleActive', $event)" + @toggleShowOnTv="$emit('toggleShowOnTv', $event)" @edit="$emit('edit', $event)" @archive="$emit('archive', $event)" /> @@ -43,6 +44,7 @@ defineEmits<{ (e: 'toggleBuy', item: Product): void (e: 'toggleSell', item: Product): void (e: 'toggleActive', item: Product): void + (e: 'toggleShowOnTv', item: Product): void (e: 'archive', item: Product): void }>() diff --git a/src/pages/menuPages/products/base/components/ProductMobileDetailSheet.vue b/src/pages/menuPages/products/base/components/ProductMobileDetailSheet.vue index baef8c6..d6254a3 100644 --- a/src/pages/menuPages/products/base/components/ProductMobileDetailSheet.vue +++ b/src/pages/menuPages/products/base/components/ProductMobileDetailSheet.vue @@ -24,12 +24,20 @@ /> +
@@ -103,6 +111,7 @@ const emit = defineEmits<{ (e: 'toggleBuy', item: Product): void (e: 'toggleSell', item: Product): void (e: 'toggleActive', item: Product): void + (e: 'toggleShowOnTv', item: Product): void (e: 'edit', item: Product): void (e: 'archive', item: Product): void }>() diff --git a/src/pages/menuPages/products/base/components/ProductMobileListItem.vue b/src/pages/menuPages/products/base/components/ProductMobileListItem.vue index 901d8bf..6dc47fa 100644 --- a/src/pages/menuPages/products/base/components/ProductMobileListItem.vue +++ b/src/pages/menuPages/products/base/components/ProductMobileListItem.vue @@ -36,7 +36,9 @@ defineEmits<{ (e: 'edit', item: Product): void }>() -const statusDotClass = computed(() => (props.item.active ? 'bg-green-500' : 'bg-red-400')) +const statusDotClass = computed(() => + (props.item.show_in_list ?? props.item.active) ? 'bg-green-500' : 'bg-red-400', +) const priceLabel = computed(() => (props.item.price ? usePrice(props.item.price) : '-')) diff --git a/src/pages/menuPages/products/base/components/table.vue b/src/pages/menuPages/products/base/components/table.vue index 612ffaf..4b43d63 100644 --- a/src/pages/menuPages/products/base/components/table.vue +++ b/src/pages/menuPages/products/base/components/table.vue @@ -75,20 +75,37 @@ @click="activeSell(record)" /> - - - + + + + + + + + @@ -118,7 +135,8 @@ @edit="emits('edit', $event)" @toggleBuy="activeBuy" @toggleSell="activeSell" - @toggleActive="activeProduct" + @toggleActive="toggleShowInList" + @toggleShowOnTv="toggleShowOnTv" @archive="handleArchive" /> @@ -137,6 +155,7 @@ import { changeActiveProduct, changeBuyActiveProduct, changeSellActiveProduct, + changeShowOnTvProduct, getCustomerTable, setActiveTime } from '@/api/product' @@ -232,12 +251,18 @@ const activeBuy = (product: Product) => await fetch() }) -const activeProduct = (product: Product) => - confirmToggle('آیا مطمئن به انجام این عملیات هستید؟', async () => { +const toggleShowInList = (product: Product) => + confirmToggle('نمایش این محصول در لیست محصولات تغییر می‌کند. آیا مطمئن هستید؟', async () => { await changeActiveProduct(product.id) await fetch() }) +const toggleShowOnTv = (product: Product) => + confirmToggle('نمایش این محصول در تابلو TV تغییر می‌کند. آیا مطمئن هستید؟', async () => { + await changeShowOnTvProduct(product.id) + await fetch() + }) + function handleArchive(product: Product) { confirmToggle( 'آیا این محصول بایگانی شود؟ نمایش، خرید و فروش آن غیرفعال می‌شود.', diff --git a/src/pages/menuPages/products/base/hooks/productColumns.tsx b/src/pages/menuPages/products/base/hooks/productColumns.tsx index e2e3d80..c22736d 100644 --- a/src/pages/menuPages/products/base/hooks/productColumns.tsx +++ b/src/pages/menuPages/products/base/hooks/productColumns.tsx @@ -104,21 +104,44 @@ export function getProductColumns(): BaseTableColumn[] { }, ...(isStoreApp() ? [inventoryColumn] : []), { - title: 'وضعیت محصول', - dataIndex: 'active', - key: 'active', + title: 'وضعیت لیست', + dataIndex: 'show_in_list', + key: 'show_in_list', type: 'Boolean', - customRender: (record) => ( -
- - {record?.record.active ? 'باز' : 'بسته'} - -
- ) + customRender: (record) => { + const on = record?.record.show_in_list ?? record?.record.active + return ( +
+ + {on ? 'باز' : 'بسته'} + +
+ ) + } + }, + { + title: 'تابلو TV', + dataIndex: 'show_on_tv', + key: 'show_on_tv', + type: 'Boolean', + customRender: (record) => { + const on = !!record?.record.show_on_tv + return ( +
+ + {on ? 'روشن' : 'خاموش'} + +
+ ) + } }, { title: 'عملیات',