From 7c1ed5b09faa760292cdd47441ade8a16099d8b8 Mon Sep 17 00:00:00 2001
From: tuqin <tuqin@tuqin.cn>
Date: 星期一, 14 九月 2026 15:28:39 +0800
Subject: [PATCH] feat: 售后工单按条绑定部门与原因类型;新增加班工资管理;员工附件留档

---
 src/views/aftersales/ticket/modules/form.vue |   27 ++++++---------------------
 1 files changed, 6 insertions(+), 21 deletions(-)

diff --git a/src/views/aftersales/ticket/modules/form.vue b/src/views/aftersales/ticket/modules/form.vue
index bdb3fab..47d677b 100644
--- a/src/views/aftersales/ticket/modules/form.vue
+++ b/src/views/aftersales/ticket/modules/form.vue
@@ -2,14 +2,13 @@
 import type { TicketFormType } from '../data';
 
 import type { AftersalesTicketApi } from '#/api/aftersales/ticket';
-import type { ErpSaleOrderApi } from '#/api/erp/sale/order';
 import type { VxeTableGridOptions } from '#/adapter/vxe-table';
 
 import { computed, nextTick, ref } from 'vue';
 import { useRouter } from 'vue-router';
 
 import { useVbenModal } from '@vben/common-ui';
-import { AftersaleIssueTypeEnum, AftersaleTicketStatusEnum } from '@vben/constants';
+import { AftersaleIssueTypeEnum, AftersaleTicketStatusEnum, DICT_TYPE } from '@vben/constants';
 
 import { Button, Divider, Input, message, Popconfirm, Select, Tag } from 'ant-design-vue';
 
@@ -24,7 +23,7 @@
   resolveTicket,
   updateTicket,
 } from '#/api/aftersales/ticket';
-import { getSaleOrder } from '#/api/erp/sale/order';
+import { getDictLabel } from '#/packages/effects/hooks/src';
 import { $t } from '#/locales';
 
 import { useTicketFormSchema, useTicketItemFormSchema, useTicketItemGridColumns } from '../data';
@@ -75,17 +74,6 @@
   return $t('ui.actionTitle.create', ['鍞悗宸ュ崟']);
 });
 
-// 閿�鍞鍗曠墿鏂欒繃婊�
-const orderItems = ref<ErpSaleOrderApi.SaleOrderItem[]>([]);
-
-function handleSaleOrderChange(item: Record<string, unknown> | undefined) {
-  if (!item?.id) {
-    orderItems.value = [];
-    return;
-  }
-  orderItems.value = (item.items as ErpSaleOrderApi.SaleOrderItem[]) || [];
-}
-
 // 涓昏〃鍗�
 const [Form, formApi] = useVbenForm({
   commonConfig: { componentProps: { class: 'w-full' }, formItemClass: 'col-span-1', labelWidth: 110 },
@@ -131,11 +119,11 @@
 // Modal锛堝伐鍗曡〃鍗曞脊妗嗭級蹇呴』鍦� ItemModal 涔嬪墠锛岀‘淇� connectedComponent 娉ㄥ叆鍒版纭殑寮规
 const [Modal, modalApi] = useVbenModal({
   async onOpenChange(isOpen: boolean) {
-    if (!isOpen) { formData.value = undefined; items.value = []; orderItems.value = []; showClassify.value = false; return; }
+    if (!isOpen) { formData.value = undefined; items.value = []; showClassify.value = false; return; }
     const data = modalApi.getData<{ formType: TicketFormType; id?: number }>();
     formType.value = data.formType;
     itemsGridApi.setGridOptions({ columns: useTicketItemGridColumns(isEdit.value) });
-    formApi.setState({ schema: useTicketFormSchema(formType.value, formApi, handleSaleOrderChange) });
+    formApi.setState({ schema: useTicketFormSchema(formType.value) });
     formApi.setDisabled(!isEdit.value);
     modalApi.setState({ showConfirmButton: false, showCancelButton: false });
     if (data?.id) {
@@ -152,10 +140,6 @@
             status: 'done', id: item.id,
           }));
           await formApi.setFieldValue('blobIds', blobIds);
-        }
-        if (formData.value?.saleOrderId) {
-          const order = await getSaleOrder(formData.value.saleOrderId);
-          orderItems.value = (order as Record<string, unknown>).items as ErpSaleOrderApi.SaleOrderItem[] || [];
         }
       } finally { modalApi.unlock(); }
     } else {
@@ -183,7 +167,7 @@
   onOpenChange(isOpen: boolean) {
     if (!isOpen) { editingItemIndex.value = null; return; }
     const d = itemModalApi.getData<AftersalesTicketApi.TicketItem | null>();
-    itemFormApi.setState({ schema: useTicketItemFormSchema(formData.value?.customerId, formData.value?.saleOrderNo, orderItems.value, itemFormApi) });
+    itemFormApi.setState({ schema: useTicketItemFormSchema(formData.value?.customerId, undefined, [], itemFormApi) });
     if (d) { itemFormApi.setValues(d as Record<string, unknown>); } else { itemFormApi.resetForm(); }
   },
 });
@@ -267,6 +251,7 @@
         <ItemsGrid>
           <template #needRepair="{ row }"><Tag :color="row.needRepair ? 'blue' : 'default'">{{ row.needRepair ? '鏄�' : '鍚�' }}</Tag></template>
           <template #needReturn="{ row }"><Tag :color="row.needReturn ? 'orange' : 'default'">{{ row.needReturn ? '鏄�' : '鍚�' }}</Tag></template>
+          <template #reasonType="{ row }">{{ getDictLabel(DICT_TYPE.AFTERSALE_REASON_TYPE, row.reasonType) }}</template>
           <template v-if="isEdit" #itemActions="{ row, rowIndex }">
             <TableAction :actions="[
               { label: $t('common.edit'), type: 'link', icon: ACTION_ICON.EDIT, onClick: () => editItem(rowIndex) },

--
Gitblit v1.9.3