import { IFormTmplBom, IMaterialConsumeData, ParseRuleProps } from '../../../../../types/material.type';
import { FormTmplBomController } from './tmpl-bom-controller';
import { Ref } from 'vue';
import { BomEntriesValidator } from './bom-validator';
import { McWebRender } from './mc-web-render';
import { DataManager } from '../../../../../core/data/DataManager';
import { Doc } from '../../../../../core';
import { ParsedValuePath } from '../../../../../utils/func/core';
export interface ISubTableInfo {
    valuePath: string;
    subFieldKey: string;
    subModelKey: string;
    subTableName: string;
}
export interface UpdateRowOption {
    row: IMaterialConsumeData;
    rowIndex: number;
    dataManager: DataManager;
    subFieldKey: string;
}
export declare class MCDataUtil {
    static allFields: Array<keyof IMaterialConsumeData>;
    static editMCTable(row: IMaterialConsumeData, data: IMaterialConsumeData['_MCTABLE']): void;
    /**
     * 数组转对象并付统一的值
     * @static
     * @param arr
     * @param [keyVal=true]
     * @return {*}
     */
    static arrToObj(arr: string[], keyVal?: any): any;
    /**
     * 设置禁用字段
     * @static
     * @param opts 参数
     */
    static setFieldsDisabled(opts: {
        /** 数据 */
        row: IMaterialConsumeData;
        /** 属性key集合(不给则默认全部) */
        keys?: Array<keyof IMaterialConsumeData>;
        /** 设置的值(不给则true) */
        disabled?: boolean;
    }): void;
    private static _updateDisablement;
    /**
     * 物料消耗表[需求数量、已消耗数量]一直禁用
     * @param rowPath $.f_sub[n] n 必须为数字
     */
    static disableQtyFields(dataManager: DataManager, rowPath: string): void;
    /**
     * 物料消耗表 物料类型是否是[查看物料]时需要更新[物料批号、数量]字段是否禁用
     * @param rowPath $.f_sub[n] n 必须为数字
     */
    static updateViewFieldsDisablement(option: {
        dataManager: DataManager;
        rowPath: string;
        disabled: boolean;
    }): void;
    /**
     * 物料消耗表 更新固定几个字段是否禁用
     * @param rowPath $.f_sub[n] n 必须为数字
     */
    static updateFixedFieldsDisablement(option: {
        dataManager: DataManager;
        rowPath: string;
        disabled: boolean;
    }): void;
    /**
     * 设置行数据的编辑状态
     */
    static updateRow(option: UpdateRowOption, isConfirmed: boolean): void;
}
export declare class MaterialConsumeTableController {
    private tmplBomController;
    private tmplBom;
    /**
     * 绘制UI工具，需要pc移动端替换对应的实现类
     * @static
     */
    static get render(): McWebRender;
    /**
     * 之前提交的数据（跨表处理的情况）
     */
    beforeData: IMaterialConsumeData[];
    /** 表格数据引用对象 */
    tableDataRef: Ref<IMaterialConsumeData[]>;
    /**
     * 子表组件的信息
     * 主工程里一个子表就是一个 widget
     * word 里子表信息是记录在 Wtbl.Wtr.Wc.subRenderer 中的
     */
    subTableInfo: ISubTableInfo;
    /** 表单模型控制器 */
    /** 批次数量 */
    get materialNoNum(): number;
    /**
     * 解析规则数据对象
     */
    scanRuleInfo: {
        rules_: string;
        id_: string;
        base_id_?: string;
    };
    /** 解析规则映射配置 */
    scanRuleProps?: ParseRuleProps;
    /**
     * 解析规则配置
     */
    get scanRules(): string;
    bomEntriesValidator: BomEntriesValidator;
    /**
     * 是否求用顺序投料
     * @readonly
     */
    get enableSequenceLoading(): boolean;
    /**
     * 实际使用的数据（过滤掉打deleted_标签的数据)
     */
    get actualTableData(): IMaterialConsumeData[];
    /**
     * 修改表格数据（保留打deleted_标签的数据）
     */
    set actualTableData(value: IMaterialConsumeData[]);
    constructor(tmplBomController: FormTmplBomController, tmplBom: IFormTmplBom);
    /** 错误信息 */
    error(message: string): void;
    /**
     * 初始化扫描解析规则
     * @param id (老数据是id,新数据是json对象字符串)
     */
    protected initScanRule(id: string): Promise<void>;
    /**
     * 变更条码规则
     */
    changeScanRule(__mainModelKey: string, subModelKey: string): Promise<void>;
    /**
     * 是否人为指定物料
     * @readonly
     */
    get isPersonalBom(): boolean | undefined;
    /**
     * 实际使用的bom明细信息(排序)
     * @readonly
     */
    get actualBomEntries(): import('../../../../../types/material.type').IBomEntry[];
    /**
     * 根据bom明细构造子表数据(初始化时)
     */
    calcFormState(): IMaterialConsumeData[] | undefined;
    /**
     * 获取是否是 物料查看
     * @param product_id_
     * @returns
     */
    getMaterialTypeIsView(product_id_?: string): boolean;
    /**
     * 获取bom内主物料，替换物料查询的算子
     * @return {*}
     */
    getProductQuery(): {
        'id_.in': (string | undefined)[];
    };
    /**
     * 是否是第一行且物料是空行
     * @return {*}
     */
    isFirstBlankRow(): boolean;
    /**
     * 解析扫码的数据
     * 并判断是否能存入表中,返回对象则表示可以存入
     * @param str
     */
    protected parseScanStr(str: string, option: {
        dataManager: DataManager;
        subFieldKey: string;
    }, subModelKey: string): Promise<void>;
    /** 扫描是否已经打开 */
    isScanOpen: boolean;
    /**
     * 打开扫描弹窗
     * @param opts
     */
    openScanModal(title: string, option: {
        dataManager: DataManager;
        subFieldKey: string;
    }, subModelKey: string): Promise<void>;
    /**
     * 打开扫描弹窗
     * @param opts
     */
    openBomModal(): Promise<void>;
    /**
     * 消耗表组件setup时调用
     * @param opts
     */
    setup(opts: {
        tableDataRef: Ref<any>;
        subTableInfo: ISubTableInfo;
    }): Promise<void>;
    /**
     * 校验数据，并退出编辑
     * @param row
     */
    confirm(option: UpdateRowOption, subModelKey: string): Promise<void>;
    /**
     * 生成校验清单格式的报错
     * @param message
     * @return {*}
     */
    calcErrorObj(message: string): {
        field: string;
        message: string;
    };
    /**
     * 提交的时候的校验
     */
    submitValidate(): Promise<any>;
    /**
     * 是否有正在编辑的行
     * @return {*}
     */
    hasEditingRow(showMessage?: boolean): boolean;
    /**
     * 选中行开启编辑
     * @param row
     */
    editRow(option: UpdateRowOption): void;
    /**
     * 设置默认值，如工序，需求数量/已消耗数量
     * @param row
     */
    setDefaultValue(row: IMaterialConsumeData): void;
    getDefaultValue(row: IMaterialConsumeData): any;
    handleSelectChange({ changedData, selectedOption, doc, parsed, dataIndex, }: {
        changedData: any;
        selectedOption: any;
        doc: Doc;
        parsed: ParsedValuePath;
        dataIndex: number;
    }): void;
}
