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