diff --git a/src/composables/useDashboard.ts b/src/composables/useDashboard.ts index 0c2beb5..173611f 100644 --- a/src/composables/useDashboard.ts +++ b/src/composables/useDashboard.ts @@ -56,7 +56,7 @@ export function useDashboard() { link: '/orders?tab=pending_review', }, { - label: 'در انتظار چک', + label: 'بررسی چک', value: dashboardStats.value.pendingCheck, icon: 'wallet', tone: 'purple', diff --git a/src/data/mockData.ts b/src/data/mockData.ts index 91b16fb..7906a86 100644 --- a/src/data/mockData.ts +++ b/src/data/mockData.ts @@ -749,7 +749,7 @@ export const reportSalesByCompany = [ export const reportOrdersByStatus = [ { status: 'در انتظار بررسی', count: 18 }, - { status: 'در انتظار چک', count: 9 }, + { status: 'بررسی چک', count: 9 }, { status: 'نیاز به اصلاح', count: 6 }, { status: 'تأیید نهایی', count: 24 }, { status: 'ارسال شده', count: 12 }, diff --git a/src/router/index.ts b/src/router/index.ts index 15fff5a..9a4422e 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -34,11 +34,17 @@ const router = createRouter({ component: () => import('@/views/orders/OrderPricingView.vue'), meta: { title: 'قیمت‌گذاری سفارش' }, }, + { + path: 'checks', + name: 'checks', + component: () => import('@/views/checks/ChecksListView.vue'), + meta: { title: 'چک‌ها' }, + }, { path: 'orders/:id/checks', name: 'order-checks', component: () => import('@/views/checks/CheckManagementView.vue'), - meta: { title: 'مدیریت چک‌ها' }, + meta: { title: 'مدیریت چک‌های سفارش' }, }, { /* API links often use /orders/:id — open list + detail via query */ @@ -79,11 +85,6 @@ const router = createRouter({ component: () => import('@/views/catalogs/CatalogsView.vue'), meta: { title: 'کالیته‌ها' }, }, - { - path: 'checks', - name: 'checks', - redirect: { name: 'order-checks', params: { id: 'ord-1' } }, - }, { path: 'cash-payments', name: 'cash-payments', diff --git a/src/services/api.ts b/src/services/api.ts index e3a54e5..429e3f0 100644 --- a/src/services/api.ts +++ b/src/services/api.ts @@ -13,6 +13,7 @@ import type { Order, OrderItem, OrderStatus, + OrderStatusHistoryItem, Product, RawOrderStatus, SettlementMethod, @@ -242,6 +243,7 @@ export type ApiOrder = Order & { checkRassDate?: string items?: OrderItem[] checks?: Check[] + statusHistory?: OrderStatusHistoryItem[] /** وضعیت‌های مجاز بعدی از دید ماشین وضعیت سرور */ allowedTransitions?: string[] cashReceipt?: { id: string } | null @@ -269,6 +271,8 @@ export const ordersApi = { /* ── Checks ────────────────────────────────────────────────── */ export const checksApi = { + list: (status?: Check['status']) => + apiRequest('/admin/checks', { query: { status } }), listByOrder: (orderId: string) => apiRequest(`/admin/orders/${orderId}/checks`), updateStatus: (id: string, body: { status: Check['status']; note?: string }) => diff --git a/src/types/index.ts b/src/types/index.ts index 76ffa47..db1444b 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -106,6 +106,32 @@ export interface Check { sayadId: string dueDate: string status: CheckStatus + checkNumber?: string + ownerNationalId?: string + ownerFirstName?: string + ownerLastName?: string + branchName?: string + frontImage?: string + backImage?: string + notes?: string + mode?: string + createdAt?: string + updatedAt?: string + /** فقط در لیست سراسری چک‌ها */ + orderNumber?: string + customerName?: string + orderStatus?: string + settlementType?: SettlementMethod | null +} + +export interface OrderStatusHistoryItem { + id: string + fromStatus?: string | null + toStatus: string + changedBy: string + note?: string + reason?: string + changedAt: string } export interface CheckDeadline { diff --git a/src/utils/navigation.ts b/src/utils/navigation.ts index 4693922..f209401 100644 --- a/src/utils/navigation.ts +++ b/src/utils/navigation.ts @@ -17,5 +17,10 @@ export const ADMIN_NAV_ITEMS: NavItem[] = [ export function isNavActive(path: string, currentPath: string): boolean { if (path === '/') return currentPath === '/' - return currentPath.startsWith(path) + // چک‌های یک سفارش زیر منوی «چک‌ها» فعال می‌شود، نه «سفارش‌ها» + if (/^\/orders\/[^/]+\/checks/.test(currentPath)) { + if (path === '/checks') return true + if (path === '/orders') return false + } + return currentPath === path || currentPath.startsWith(`${path}/`) } diff --git a/src/utils/orderStatus.ts b/src/utils/orderStatus.ts index 43b1332..2d0f1e8 100644 --- a/src/utils/orderStatus.ts +++ b/src/utils/orderStatus.ts @@ -8,7 +8,7 @@ export interface StatusMeta { export const ORDER_STATUS_META: Record = { pending_review: { label: 'در انتظار بررسی', tone: 'warning' }, awaiting_customer: { label: 'در انتظار مشتری', tone: 'info' }, - pending_check: { label: 'در انتظار چک', tone: 'purple' }, + pending_check: { label: 'بررسی چک', tone: 'purple' }, pending_payment: { label: 'بررسی رسید پرداخت', tone: 'purple' }, needs_correction: { label: 'نیاز به اصلاح', tone: 'danger' }, check_correction: { label: 'نیاز به اصلاح چک', tone: 'warning' }, @@ -59,7 +59,7 @@ export const ORDER_TABS = [ { key: 'all', label: 'همه' }, { key: 'pending_review', label: 'در انتظار بررسی' }, { key: 'awaiting_customer', label: 'در انتظار مشتری' }, - { key: 'pending_check', label: 'در انتظار چک' }, + { key: 'pending_check', label: 'بررسی چک' }, { key: 'pending_payment', label: 'بررسی رسید' }, { key: 'check_correction', label: 'اصلاح چک' }, { key: 'needs_correction', label: 'نیاز به اصلاح' }, diff --git a/src/views/checks/CheckManagementView.vue b/src/views/checks/CheckManagementView.vue index a0df5b7..efd40ac 100644 --- a/src/views/checks/CheckManagementView.vue +++ b/src/views/checks/CheckManagementView.vue @@ -1,23 +1,25 @@ @@ -128,15 +204,36 @@ async function approveAll() {
-

مدیریت چک‌ها

-

سفارش‌ها / مدیریت سفارش

+

مدیریت چک‌های سفارش

+

+ سفارش‌ها + +

- {{ displayOrder.orderNumber }}
+
+
+ تعداد + {{ orderChecks.length }} +
+
+ راس + {{ order?.checkRassDays ?? '—' }} روز +
+
+ مجموع چک + {{ formatCurrency(totalCheckAmount) }} +
+
+ مبلغ سفارش + {{ displayOrder?.totalAmount ? formatCurrency(displayOrder.totalAmount) : '—' }} +
+
+
-
-
- {{ activeTab === 'images' ? 'تصاویر چک‌ها' : 'تاریخچه بررسی' }} — به‌زودی -
+ + + +
+ + پیش‌نمایش +
+
diff --git a/src/views/checks/ChecksListView.vue b/src/views/checks/ChecksListView.vue new file mode 100644 index 0000000..4bef4eb --- /dev/null +++ b/src/views/checks/ChecksListView.vue @@ -0,0 +1,323 @@ + + + + + diff --git a/src/views/orders/components/DesktopOrdersPage.vue b/src/views/orders/components/DesktopOrdersPage.vue index ea8aa33..f875365 100644 --- a/src/views/orders/components/DesktopOrdersPage.vue +++ b/src/views/orders/components/DesktopOrdersPage.vue @@ -1,4 +1,5 @@