From a14f1587c64c42d69b9a12c689c98c17512bc9d7 Mon Sep 17 00:00:00 2001 From: adonis Date: Fri, 12 Jun 2026 20:30:00 +0330 Subject: [PATCH] store2 --- src/api/configuration.ts | 5 +++ src/main.ts | 2 + src/model/product.ts | 2 + src/pages/menuPages/configuration/index.vue | 13 ++++++- .../menuPages/configuration/settingTypes.ts | 3 +- .../base/components/ProductEditorFormBody.vue | 17 +++++++++ .../products/base/components/table.vue | 4 +- .../products/base/hooks/productColumns.tsx | 18 ++++++++- src/pages/menuPages/products/base/index.vue | 10 +++-- src/utils/config.ts | 37 +++++++++++++++---- 10 files changed, 92 insertions(+), 19 deletions(-) diff --git a/src/api/configuration.ts b/src/api/configuration.ts index 3b003d3..56fc76c 100644 --- a/src/api/configuration.ts +++ b/src/api/configuration.ts @@ -3,5 +3,10 @@ import useAxios from "@core/utils/useAxios" export const setConfiguration = async (obj: Const) => await useAxios.post(`/admin/get_settings`, obj) +/** همه تنظیمات — برای خواندن داخلی (is_store، unit و ...) */ export const getConfiguration = async () => + await useAxios.get>(`/admin/get_settings`) + +/** فقط تنظیمات قابل ویرایش — برای صفحه تنظیمات ادمین */ +export const getEditableConfiguration = async () => await useAxios.get>(`/admin/get_settings`, { params: { editable_only: 1 } }) \ No newline at end of file diff --git a/src/main.ts b/src/main.ts index e219408..62ca4d7 100644 --- a/src/main.ts +++ b/src/main.ts @@ -13,6 +13,7 @@ import { setupRoutes } from '@/router' //import { resetRouter } from '@core/router' import { useUserStore } from '@/store/userStore' import { setupPinia } from '@core/plugins/pinia' +import { initStoreModeFromSettings } from '@/utils/config' const init = async () => { const app = createApp(App) @@ -27,6 +28,7 @@ const init = async () => { const token = getToken() if (token) { await userStore.getMyInfo() + await initStoreModeFromSettings() setupRoutes(['*']) //setupRoutes(['project']) /*router.removeRoute('usersMain') diff --git a/src/model/product.ts b/src/model/product.ts index 998b6c3..abccaa8 100644 --- a/src/model/product.ts +++ b/src/model/product.ts @@ -41,6 +41,8 @@ export interface Product{ file_id?: number file?: File original_image?: File + inventory?: number + description?: string | null } export interface MethodePrices { diff --git a/src/pages/menuPages/configuration/index.vue b/src/pages/menuPages/configuration/index.vue index 406029a..4f0d04f 100644 --- a/src/pages/menuPages/configuration/index.vue +++ b/src/pages/menuPages/configuration/index.vue @@ -171,14 +171,16 @@ import type { FormInstance } from 'ant-design-vue' import { message } from 'ant-design-vue' import type { Const } from '@/model/configuration' import { loading } from '@/utils' -import { getConfiguration, setConfiguration } from '@/api/configuration' +import { getEditableConfiguration, setConfiguration } from '@/api/configuration' import SettingValueField from './SettingValueField.vue' import SettingCard from './SettingCard.vue' +import { setStoreModeFromSettings } from '@/utils/config' import { SETTING_TYPE_OPTIONS, formatValueForSave, helpText, isSettingVisible, + isSwitchOn, resolveSettingFieldType } from './settingTypes' @@ -410,7 +412,11 @@ onMounted(() => { async function initConfig() { try { loading.value = true - baseData.value = (await getConfiguration()) ?? [] + baseData.value = (await getEditableConfiguration()) ?? [] + const storeRow = baseData.value.find((row) => row.key === 'is_store') + if (storeRow) { + setStoreModeFromSettings(isSwitchOn(storeRow.value)) + } syncDraftsFromBase() } catch (e) { console.error(e) @@ -481,6 +487,9 @@ async function saveSettingRow(row: Const, overrides?: { isActive?: boolean }) { row.value = value row.is_active = isActive drafts.value[id] = value + if (row.key === 'is_store') { + setStoreModeFromSettings(isSwitchOn(value)) + } savedFlashIds.value.add(id) if (saveTimers.has(id)) clearTimeout(saveTimers.get(id)) saveTimers.set( diff --git a/src/pages/menuPages/configuration/settingTypes.ts b/src/pages/menuPages/configuration/settingTypes.ts index 9999f5d..f13531d 100644 --- a/src/pages/menuPages/configuration/settingTypes.ts +++ b/src/pages/menuPages/configuration/settingTypes.ts @@ -5,7 +5,6 @@ export type SettingFieldType = 'text' | 'number' | 'switch' | 'select' | 'longte /** کلیدهای legacy — در پنل نمایش داده نمی‌شوند (جایگزین: price_provider) */ export const HIDDEN_LEGACY_SETTING_KEYS = new Set([ - 'tabanGohar_price', 'main_product_price', 'montzar_price', 'etehadie_api_url', @@ -149,7 +148,7 @@ export function parseSelectOptions( source = source.split('|').pop() || '' } - const deprecatedOpts = new Set(['taban_gohar', 'etehadie']) + const deprecatedOpts = new Set(['etehadie']) const opts = source .split(',') .map((s) => s.trim()) diff --git a/src/pages/menuPages/products/base/components/ProductEditorFormBody.vue b/src/pages/menuPages/products/base/components/ProductEditorFormBody.vue index 7ec2f04..0e9d795 100644 --- a/src/pages/menuPages/products/base/components/ProductEditorFormBody.vue +++ b/src/pages/menuPages/products/base/components/ProductEditorFormBody.vue @@ -194,6 +194,14 @@ + + + @@ -249,6 +257,7 @@ import Icon from '@core/components/BaseIcon/src/Icon.vue' import BaseCollapse from '@/components/BaseCollapse.vue' import IndexImageUploader from '@/components/ProductUploader/IndexImageUploader.vue' import { getConfiguration } from '@/api/configuration' +import { isSwitchOn } from '@/pages/menuPages/configuration/settingTypes' import type { last } from '@/model/price' import type { MethodePrices } from '@/model/product' import { usePrice } from '@core/utils/usePrice' @@ -275,8 +284,11 @@ const props = defineProps<{ customLocale: any productIndexImage: any[] editId?: number + isStore?: boolean }>() +const isStore = ref(Boolean(props.isStore)) + const tradeWeightUnit = ref('گرم') const isMeltedCategory = computed(() => isMeltedTradeGroup(props.form.group_type)) @@ -314,6 +326,11 @@ onMounted(async () => { const rows = await getConfiguration() const unitRow = Array.isArray(rows) ? rows.find((row) => row.key === 'unit') : null tradeWeightUnit.value = resolveTradeWeightUnit(unitRow?.value) + + const storeRow = Array.isArray(rows) ? rows.find((row) => row.key === 'is_store') : null + if (storeRow) { + isStore.value = isSwitchOn(storeRow.value) + } } catch { tradeWeightUnit.value = 'گرم' } diff --git a/src/pages/menuPages/products/base/components/table.vue b/src/pages/menuPages/products/base/components/table.vue index 8472771..6998820 100644 --- a/src/pages/menuPages/products/base/components/table.vue +++ b/src/pages/menuPages/products/base/components/table.vue @@ -121,7 +121,7 @@ import { getCustomerTable, setActiveTime } from '@/api/product' -import { cols } from '@/pages/menuPages/products/base/hooks/productColumns' +import { getProductColumns } from '@/pages/menuPages/products/base/hooks/productColumns' import ProductMobileCardList from '@/pages/menuPages/products/base/components/ProductMobileCardList.vue' import useBaseTable from '@core/components/BaseTable/hooks/useBaseTable' import type { TableInput } from '@core/type/baseTable' @@ -148,7 +148,7 @@ const customLocale = ref({ }) const tblProps = ref({ - columns: cols, + columns: getProductColumns(), api: async (params: TableInput) => { const data = (await getCustomerTable(params)) as any startTime.value = dayjs(data?.auto_open_at, 'HH:mm:ss') diff --git a/src/pages/menuPages/products/base/hooks/productColumns.tsx b/src/pages/menuPages/products/base/hooks/productColumns.tsx index efd6c62..17b155c 100644 --- a/src/pages/menuPages/products/base/hooks/productColumns.tsx +++ b/src/pages/menuPages/products/base/hooks/productColumns.tsx @@ -1,7 +1,16 @@ import type { BaseTableColumn } from '@core/type/baseTable' import CustomTag from '@/components/CustomTag.vue' +import { isStoreApp } from '@/utils/config' -export const cols: BaseTableColumn[] = [ +const inventoryColumn: BaseTableColumn = { + title: 'موجودی', + dataIndex: 'inventory', + key: 'inventory', + type: 'Number' +} + +export function getProductColumns(): BaseTableColumn[] { + return [ { title: 'ردیف', dataIndex: 'id', @@ -78,6 +87,7 @@ export const cols: BaseTableColumn[] = [ key: 'cash_fee_sell', type: 'Number' }, + ...(isStoreApp() ? [inventoryColumn] : []), { title: 'وضعیت محصول', dataIndex: 'active', @@ -102,4 +112,8 @@ export const cols: BaseTableColumn[] = [ slot: 'action', filterable: false } -] + ] +} + +/** @deprecated از getProductColumns استفاده کنید */ +export const cols = getProductColumns() diff --git a/src/pages/menuPages/products/base/index.vue b/src/pages/menuPages/products/base/index.vue index 5a2f27f..8280cbd 100644 --- a/src/pages/menuPages/products/base/index.vue +++ b/src/pages/menuPages/products/base/index.vue @@ -1,6 +1,5 @@