Gate order actions by status, add final-approve after checks, and select customers in new orders.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-11 18:11:43 +02:00
co-authored by Cursor
parent 3848617108
commit 5d70002345
20 changed files with 305 additions and 53 deletions
+23 -5
View File
@@ -1,8 +1,8 @@
import { computed, inject, onMounted, provide, reactive, ref, watch, type InjectionKey } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { companiesApi, mapAdminOrder, ordersApi } from '@/services/api'
import { companiesApi, customersApi, mapAdminOrder, ordersApi } from '@/services/api'
import { ApiError } from '@/services/http'
import type { Company, Order, RawOrderStatus, SettlementMethod } from '@/types'
import type { Company, Customer, Order, RawOrderStatus, SettlementMethod } from '@/types'
import { rawStatusLabel } from '@/utils/orderStatus'
import { useToast } from '@/composables/useToast'
@@ -13,6 +13,7 @@ export function useOrdersPage() {
const toast = useToast()
const companies = ref<Company[]>([])
const customers = ref<Customer[]>([])
const orderList = ref<Order[]>([])
const activeTab = ref('all')
const selectedOrderId = ref<string>('')
@@ -24,6 +25,7 @@ export function useOrdersPage() {
const saving = ref(false)
const emptyForm = () => ({
customerId: '',
customerName: '',
companyId: companies.value[0]?.id ?? '',
settlementMethod: 'check' as SettlementMethod,
@@ -34,9 +36,18 @@ export function useOrdersPage() {
const form = reactive(emptyForm())
const isFormValid = computed(
() => form.customerName.trim().length > 0 && form.companyId.length > 0,
() => form.customerId.length > 0 && form.companyId.length > 0,
)
const activeCustomers = computed(() => customers.value.filter((c) => c.isActive))
function applyCustomer(customerId: string) {
const customer = customers.value.find((c) => c.id === customerId)
form.customerId = customerId
form.customerName = customer?.name ?? ''
form.customerPhone = customer?.phone ?? ''
}
const filteredOrders = computed(() => {
let list = orderList.value
if (activeTab.value !== 'all') {
@@ -89,12 +100,14 @@ export function useOrdersPage() {
async function loadData() {
try {
const [ordersData, companiesData] = await Promise.all([
const [ordersData, companiesData, customersData] = await Promise.all([
ordersApi.list(),
companiesApi.list(),
customersApi.list(),
])
orderList.value = ordersData.map((o) => mapAdminOrder(o) as Order)
companies.value = companiesData
customers.value = customersData
if (!form.companyId && companiesData[0]) {
form.companyId = companiesData[0].id
}
@@ -196,7 +209,7 @@ export function useOrdersPage() {
async function submitAddOrder() {
if (!isFormValid.value) {
formError.value = 'نام مشتری و شرکت الزامی هستند.'
formError.value = 'انتخاب مشتری و شرکت الزامی است.'
return
}
@@ -204,6 +217,8 @@ export function useOrdersPage() {
try {
const created = await ordersApi.create({
companyId: form.companyId,
customerId: form.customerId || undefined,
userId: form.customerId || undefined,
customerName: form.customerName.trim(),
customerPhone: form.customerPhone.trim() || undefined,
settlementMethod: form.settlementMethod,
@@ -223,6 +238,9 @@ export function useOrdersPage() {
return {
companies,
customers,
activeCustomers,
applyCustomer,
orderList,
activeTab,
selectedOrderId,