Selaa lähdekoodia

refactor(types): 优化物料明细表格组件类型定义

yz 3 viikkoa sitten
vanhempi
commit
adfd4de42b

+ 5 - 0
src/components/order-form/material-detail-table.vue

@@ -184,6 +184,7 @@
 /**
  * @fileoverview 物料明细表格组件
  * @description 基于AvueJS的物料明细数据展示和操作组件,支持分页、搜索、删除等功能
+ * @typedef {import('./types').MaterialDetailTableComponent} MaterialDetailTableComponent
  */
 
 import { getMaterialDetailOption, DEFAULT_PAGINATION_CONFIG } from './material-detail-option'
@@ -288,6 +289,7 @@ export default {
   /**
    * 组件数据
    * @returns {MaterialDetailTableData} 组件响应式数据对象
+   * @this {MaterialDetailTableComponent}
    */
   data() {
     return {
@@ -352,6 +354,7 @@ export default {
 
   /**
    * 计算属性
+   * @this {MaterialDetailTableComponent}
    */
   computed: {
     /**
@@ -376,6 +379,7 @@ export default {
 
   /**
    * 监听器
+   * @this {MaterialDetailTableComponent}
    */
   watch: {
     /**
@@ -393,6 +397,7 @@ export default {
 
   /**
    * 组件方法
+   * @this {MaterialDetailTableComponent}
    */
   methods: {
     /**

+ 90 - 17
src/components/order-form/types.d.ts

@@ -543,47 +543,39 @@ export interface MaterialDetailItem {
   /** 明细ID,唯一标识符 */
   id: string;
   /** 物料ID,关联物料表 */
-  itemId: string;
+  itemId: number;
   /** 物料编码,业务唯一标识 */
   itemCode: string;
   /** 物料名称 */
   itemName: string;
-  /** 规格型号 */
-  specification?: string;
   /** 规格描述 */
   specs?: string | null;
   /** 单位 */
   unit?: string;
   /** 主物料分类ID */
-  mainCategoryId?: string;
-  /** 主物料分类名称 */
-  mainCategoryName?: string;
-  /** 主物料分类ID */
-  mainItemCategoryId?: string;
+  mainItemCategoryId?: number;
   /** 主物料分类名称 */
   mainItemCategoryName?: string;
   /** 主物料分类编码 */
   mainItemCategoryCode?: string;
   /** 仓库ID */
-  warehouseId: string;
+  warehouseId: number | null;
   /** 仓库名称 */
-  warehouseName: string;
+  warehouseName: string | null;
   /** 可用数量 */
   availableQuantity: number;
   /** 订单数量 */
-  orderQuantity: number;
+  orderQuantity: number | string;
   /** 确认数量 */
   confirmQuantity: number;
   /** 单价 */
-  unitPrice: string;
+  unitPrice: number | string;
   /** 税率 */
-  taxRate: number;
+  taxRate: number | string;
   /** 税额 */
-  taxAmount: number;
+  taxAmount: number | string;
   /** 总金额 */
-  totalAmount: number;
-  /** 明细状态 */
-  status: typeof MaterialDetailStatus[keyof typeof MaterialDetailStatus];
+  totalAmount: number | string;
   /** 物料状态 */
   itemStatus?: OrderItemStatus;
   /** 是否可删除 */
@@ -594,6 +586,8 @@ export interface MaterialDetailItem {
   updateTime: string;
   /** 数据来源 */
   dataSource?: string;
+  /** @deprecated use itemStatus */
+  status?: any;
 }
 
 /**
@@ -609,6 +603,85 @@ export type OrderItemRecord = MaterialDetailItem;
 export type MaterialDetailRecord = MaterialDetailItem;
 
 /**
+ * @description `material-detail-table.vue` `materialOptions` item type, which is transformed from `SalesOrderItemListRecord`.
+ */
+export interface MaterialOption {
+  id: string;
+  itemId: number;
+  itemCode: string;
+  itemName: string;
+  specs: string;
+  unit: string;
+  mainItemCategoryName: string;
+  mainItemCategoryId: number;
+  mainItemCategoryCode: string;
+  unitPrice: string;
+  description: string;
+  warehouseId: number | null;
+  warehouseCode: string | null;
+  warehouseName: string | null;
+  orgId: number;
+  orgCode: string;
+  orgName: string;
+  _raw: import('@/api/types/order').SalesOrderItemListRecord;
+}
+
+/**
+ * `material-detail-table.vue` component instance type
+ */
+export interface MaterialDetailTableComponent extends Vue {
+  // props
+  editMode: boolean;
+  orderId: string | number | null;
+  materialDetails: MaterialDetailRecord[];
+
+  // data
+  formData: Partial<MaterialDetailRecord>;
+  page: PageOption;
+  selectedMaterialId: string | null;
+  materialOptions: MaterialOption[];
+  materialLoading: boolean;
+  searchTimer: number | null;
+  DIALOG_EVENTS: typeof import('./events').DIALOG_EVENTS;
+  editingRow: MaterialDetailRecord | null;
+  editingProp: string | null;
+
+  // computed
+  tableOption: AvueCrudOption;
+  currentPageData: MaterialDetailRecord[];
+
+  // methods
+  validateIntegerInput(value: string, row: MaterialDetailRecord, field: keyof MaterialDetailRecord, min?: number, max?: number): void;
+  validateFloatInput(value: string, row: MaterialDetailRecord, field: keyof MaterialDetailRecord, min?: number, max?: number): void;
+  validateAndFormatFloatOnBlur(row: MaterialDetailRecord, field: keyof MaterialDetailRecord, min?: number, max?: number, precision?: number): void;
+  isRowEditable(row: MaterialDetailRecord): boolean;
+  remoteSearchMaterial(query: string): void;
+  searchMaterials(keyword: string): Promise<void>;
+  handleImportSelectedMaterial(): void;
+  prepareMaterialDetailData(material: MaterialOption): MaterialDetailRecord;
+  calculateAmounts(materialDetail: MaterialDetailRecord): MaterialDetailRecord;
+  handleRefresh(): void;
+  handleCurrentChange(current: number): void;
+  handleSizeChange(size: number): void;
+  handleRowDelete(row: MaterialDetailRecord, index: number): void;
+  handleDeleteMaterial(row: MaterialDetailRecord, index: number): void;
+  handleRowUpdate(row: MaterialDetailRecord, index: number, done: () => void, loading: () => void): void;
+  handleQuantityBlur(row: MaterialDetailRecord, index: number): void;
+  handleUnitPriceBlur(row: MaterialDetailRecord, index: number): void;
+  handleTaxRateChange(row: MaterialDetailRecord, index: number): void;
+  handleTaxAmountChange(row: MaterialDetailRecord, index: number): void;
+  handleTotalAmountChange(row: MaterialDetailRecord, index: number): void;
+  emitUpdateEvent(row: MaterialDetailRecord, index: number, field: string, value: any): void;
+  getStatusTagType(status: OrderItemStatus): string;
+  getStatusText(status: OrderItemStatus): string;
+  formatFloatNumber(value: number | string): string;
+  formatIntegerNumber(value: number | string): string;
+  formatUnitPrice(value: number | string): string;
+  formatTaxRate(value: number | string, withSymbol?: boolean): string;
+  formatAmount(value: number | string, withSymbol?: boolean): string;
+}
+
+/**
  * 物料明细更新事件数据
  * @description 当物料明细发生变更时传递的事件数据
  */