import type {
  u_company,
  u_billcode,
  u_sc_workgroup,
  u_sys_post,
  sys_option,
  u_cust,
  u_cust_rep,
  u_station,
  u_cust_interview,
  oa_emp_workplan,
  u_mtrltype,
  u_mtrlware,
  u_mtrlware_mx,
  u_mtrlware_location,
  u_storage_loca,
  u_scdef,
  FileData,
  FileClass,
  sys_print_template
  // u_mtrldef,
  // u_quote,
  // u_quotemx,
  // u_outwaremx
} from "@/typings/business";
import type { uSale } from "@/typings/modules/sale";
import type { uTech } from "@/typings/modules/technology";

// 请求响应参数（不包含data）
export interface Result {
  code: string;
  msg: string;
}

// 请求响应参数（包含data）
export interface ResultData<T = any> extends Result {
  data: T;
}

// 分页响应参数
export interface ResPage<T> {
  list: T[];
  pageNum: number;
  pageSize: number;
  total: number;
}

// 分页请求参数
export interface ReqPage {
  pageNum: number;
  pageSize: number;
}

// 文件上传模块
export namespace Upload {
  export interface ResFileUrl {
    fileUrl: string;
  }
}

// 获取递归数据结构
export interface Recursion {
  /**
   * @description 文本
   */
  text: string;
  /**
   * @description 值
   */
  value: number;
  /**
   * @description 子级递归列表
   */
  children?: Recursion[];
}

// 登录模块
export namespace Login {
  /**
   * @name response: 获取账套
   */
  export interface ResToken {
    /**
     * @description 账户列表
     */
    accounts: string[];
    /**
     * @description IP地址
     */
    ip: string;
    /**
     * @description 端口号
     */
    port: number;
  }
  /**
   * @name request: 登陆
   */
  export interface ReqLoginForm {
    // /**
    //  * @argument 账号
    //  */
    // account: string;
    // /**
    //  * @argument 用户ID
    //  */
    // userid: string;
    // /**
    //  * @argument 密码
    //  */
    // password: string;
    // /**
    //  * @argument 客户端类型 (20-工位机平板用户名密码登陆(默认), 30-插件)
    //  * 10-OA用户名密码登陆
    //  * 11-移动端用户验证码登录
    //  * 20-工位机平板用户名密码登陆
    //  * 21-工位机刷卡登陆
    //  * 22-工位机临时登陆
    //  * 23-工位机扫码登录
    //  * 30-插件
    //  */
    // clientType: number;
    // /**
    //  * @argument 请求登陆的客户端类型
    //  */
    // typeName: string;
    // /**
    //  * @argument 登录设备唯一码
    //  */
    // phoneUUID?: string;
    usercode: string;
    psw: string;
  }
  /**
   * @name response: 登陆返回模型
   */
  export interface ResLogin {
    /**
     * @description 登陆成功只需求返回用户名与权限就可以，token应该由客户端建立会话后一直保存
     */
    token: string;
    username: string;
    usercode: string;
    empid: number;
    /**
     * @argument 可用权限列表
     */
    rsltFunids?: number[];
    usermode: number;
  }
  export interface ReqL1APPUserInfo {
    /**
     * @argument 请求权限列表
     */
    funids: number[];
    /**
     * @argument 请求系统选项列表
     */
    options: (number | string)[];
  }
  export interface ResL1APPUserInfo {
    /**
     * @argument 账套名称
     */
    account?: string;
    /**
     * @argument 用户帐号
     */
    usercode?: string;
    /**
     * @argument 用户名称
     */
    username: string;
    /**
     * @argument 员工ID
     */
    empid?: number;
    /**
     * @argument 分部ID
     */
    scid?: number;
    /**
     * @argument 部门ID
     */
    deptid?: number;
    usermode?: number;
    // /**
    //  * @argument UUID
    //  */
    // uuid?: string;
    // /**
    //  * @argument 极光推送ID
    //  */
    // ajpushid?: string;
    /**
     * @argument 可用权限列表
     */
    rsltFunids?: number[];
    /**
     * @argument 系统选项列表
     */
    optionList?: sys_option[];
    // /**
    //  * @argument 存在新结构MtrlConfigStr，但没开始用
    //  */
    // statusname?: string;
    // woodcodename?: string;
    // pcodename?: string;
    // zxmtrlmodename?: string;
    // usermtrlmodename?: string;
    // mtrlsectypename?: string;
    // outrepstrTips?: string;
    // outrepcode?: string;
    // dollarRate?: number;
    // dollarMoneyid?: number;
    // gw_inuse?: number | null;
    // gw_power1?: number | null;
    // gw_power3?: number | null;
    // ifnotin?: number | null;
    // phoneNumber?: string;
    // phoneUUID?: string;
    // /**
    //  * @argument 公告栏列表
    //  */
    // postList?: u_sys_post[];
    // powerWrkgrp?: u_sc_workgroup[];
    // /**
    //  * @argument 该客户是否金龙恒
    //  */
    // isJLH?: boolean;
    // /**
    //  * @argument 商品所有类别
    //  */
    // mtrltypeAllList?: Set<string>;
    // /**
    //  * @argument 商品主要类别
    //  */
    // mtrltypeList?: string[];
    // /**
    //  * @argument 畅销类别
    //  */
    // saletypeList?: string[];
    // /**
    //  * @argument 产品系列
    //  */
    // bandList?: string[];
    // /**
    //  * @argument 单据塔头
    //  */
    // billcodeList?: u_billcode[];
    // /**
    //  * @argument 分账套权限
    //  */
    // companyList?: u_company[];
    // /**
    //  * @argument 分部权限
    //  */
    // scstr?: string;
    // /**
    //  * @argument 物料分类
    //  */
    // mtrltypestr?: string;
    // /**
    //  * @argument 仓库权限-查询
    //  */
    // storagestr?: string;
    // /**
    //  * @argument 仓库权限-新增
    //  */
    // storagestr_new?: string;
    // /**
    //  * @argument 仓库权限-审核
    //  */
    // storagestr_audit?: string;
    // /**
    //  * @argument 出纳账号
    //  */
    // accountsidstr?: string;
  }
}

/**
 * @name 用户
 */
export namespace User {
  /**
   * @name response: 获取分部出参
   */
  export interface ResL1UserScdef {
    /**
     * @argument 分部列表
     */
    scdefList?: u_scdef[];
  }
}

/**
 * @description 布局接口
 */
export namespace DwLayout {
  export interface ReqGetDwLayout {
    /**
     * @description 用户ID
     */
    empid?: number;
    /**
     * @description 窗口名
     */
    dwname: string;
    /**
     * @description 表格名
     */
    itemname: string;
    /**
     * @description 是否压缩
     */
    ifcompress: number;
    /**
     * @description 是否删除token.empid的布局信息
     */
    ifdel?: number;
  }
  export interface ReqSetDwLayout extends ReqGetDwLayout {
    /**
     * @description 自定义值
     */
    itemvalue?: string;
  }
  export interface ResGetDwLayout {
    /**
     * @argument 自定义值
     */
    itemvalue: string;
  }
}

/**
 * @name 销售
 */
export namespace Saletask {
  /**
   * @name request: 获取客户所属区域入参
   */
  export interface ReqCusare {
    /**
     * @description 是否递归输出：1：是
     */
    RecurionType?: number;
  }

  export interface ResCusare {
    /**
     * @description 文本
     */
    RecurionList: Recursion[];
  }

  /**
   * @name request: 获取客户列表
   */
  export interface ReqCustList {
    /**
     * @description 区域ID
     */
    cusareaid?: number;
    /**
     * @description 关键词
     */
    keyword?: string;
    /**
     * @description 客户ID
     */
    cusid?: number;
    /**
     * @description 是否有效
     */
    inuse?: number;
    /**
     * @description 状态
     */
    state?: number;
    /**
     * @description 客户名称
     */
    name?: string;
    /**
     * @description 客户编码xxx
     */
    cuscode?: string;
    /**
     * @description 联系电话
     */
    tele?: string;
    /**
     * @description 页码
     */
    pageindex?: number;
    /**
     * @description 每页大小
     */
    pagesize?: number;
  }
  /**
   * @name response: 获取客户列表
   */
  export interface ResCustList {
    custList: u_cust[];
  }

  /**
   * @name request: 获取客户档案详情
   */
  export interface ReqCustDetail {
    /**
     * @description 客户ID
     */
    cusid: number;
    /**
     * @description 活动列表: 0:客户基础信息补充,1:联系人信息,2:货运部信息,3:走访记录,4:工作计划
     */
    active: number[];
    /**
     * @description 开始日期
     */
    fdate?: string;
    /**
     * @description 结束日期
     */
    edate?: string;
  }
  /**
   * @name response: 获取客户列表
   */
  export interface ResCustDetail {
    /**
     * @description 客户信息
     */
    cust: u_cust;
    /**
     * @description 客户关系列表
     */
    custRelList: u_cust_rep[];
    /**
     * @description 站点列表
     */
    stationList: u_station[];
    /**
     * @description 客户访谈列表
     */
    interviewList: u_cust_interview[];
    /**
     * @description 工作计划列表
     */
    workplanList: oa_emp_workplan[];
  }
  /**
   * @name request: 获取物料库存入参
   */
  export interface ReqMtrlWareList {
    /**
     * 仓库
     */
    storageid?: number;
    /**
     * 仓位
     */
    locacode?: string;
    /**
     * keyword
     */
    keyword?: string;
    /**
     * tab: 仓位库存
     */
    iflocacode?: boolean;
    /**
     * tab: 库存分析
     */
    ifanalyze?: number;
    /**
     * 物料编码
     */
    mtrlcode?: string;
    /**
     * 物料名称
     */
    mtrlname?: string;
    /**
     * 物料类别id
     */
    mtrltypeid?: number;
    /**
     * 规格
     */
    mtrlmode?: string;
    /**
     * 自定义
     */
    mtrlsectype?: string;
    /**
     * 自定义1
     */
    zxmtrlmode?: string;
    /**
     * 自定义2
     */
    usermtrlmode?: string;
    /**
     * 生产批号
     */
    plancode?: string;
    /**
     * 条码
     */
    barcode?: string;
    /**
     * 库存id
     */
    mtrlwareid?: number;
    pageindex: number;
    pagesize: number;
    /**
     * 1 显示0库存   0不显示0库存
     */
    ifzeromtrlware?: number;
  }
  /**
   * @name response: 获取物料库存出参
   */
  export interface ResMtrlWareList {
    mtrlwareList: u_mtrlware[];
    locaList: u_storage_loca[];
  }
  /**
   * @name request: 获取物料库存明细入参
   */
  export interface ReqMtrlwareDetailList {
    /**
     * 分部
     */
    scid?: number;
    /**
     * 仓库
     */
    storageid?: number;
    /**
     * 库存id
     */
    mtrlwareid?: number;
    /**
     * 明细tab页
     */
    tabs?: string[];
    /**
     * 是否显示未出仓库存
     */
    ifnotout?: number;
  }
  /**
   * @name response: 获取物料库存明细出参
   */
  export interface ResMtrlwareDetailList {
    mtrlwareMxList: u_mtrlware_mx[];
    locaList: u_mtrlware_location[];
  }
  /**
   * @name request: 获取销售订单列表入参
   */
  export interface ReqSaleTaskList {
    /**
     * @description: 分部id
     */
    scid?: number;
    /**
     * @description: 订单id
     */
    taskid?: number;
    /**
     * @description: 建单人
     */
    assignEmp?: string;
    /**
     * @description: 参数：日期开始
     */
    begindate?: Date;
    /**
     * @description: 参数：日期结束
     */
    enddate?: Date;
    /**
     * @description: 单据编号
     */
    keyword?: string;
    /**
     * @description: 订单号
     */
    taskcode?: string;
    /**
     * @description: 客户名称
     */
    custname?: string;
    /**
     * @description: 相关号
     */
    relcode?: string;
    /**
     * @description: 商品编码
     */
    mtrlcode?: string;
    /**
     * @description: 生产批号
     */
    mtrlcuscode?: string;
    /**
     * @description: 状态
     */
    flag?: number;
    /**
     * @description 页码
     */
    pageindex?: number;
    /**
     * @description 每页大小
     */
    pagesize?: number;
  }
  /**
   * @name response: 获取销售订单列表出参
   */
  export interface ResSaleTaskList {
    saletaskList: uSale.u_saletask[];
  }
  /**
   * @name request: 获取销售订单明细列表入参
   */
  export interface ReqSaleTaskMxList {
    /**
     * @description: 分部id
     */
    scid?: number;
    /**
     * @description: 订单id
     */
    taskid?: number;
  }
  /**
   * @name response: 获取销售订单明细列表出参
   */
  export interface ResSaleTaskMxList {
    saletaskmxList: uSale.u_saletask_mx[];
  }
  /**
   * @name request: 获取销售报价单列表入参
   */
  export interface ReqSaleQuoteList {
    /**
     * @description: scid
     */
    scid?: number;
    /**
     * @description: billid
     */
    billid?: number;
    /**
     * @description: billtype
     */
    billtype?: number;
    /**
     * @description: 单据编号
     */
    keyword?: string;
    /**
     * @description: 相关号
     */
    relcode?: string;
    /**
     * @description: quotecode
     */
    quotecode?: string;
    /**
     * @description: flag
     */
    flag?: number;
    /**
     * @description 页码
     */
    pageindex?: number;
    /**
     * @description 每页大小
     */
    pagesize?: number;
  }
  /**
   * @name request: 获取销售报价单明细列表入参
   */
  export interface ReqSaleQuoteMx {
    /**
     * @description: 分部id
     */
    scid?: number;
    /**
     * @description: 订单id
     */
    billid?: number;
  }
  /**
   * @name request: 获取销售发货单列表出参
   */
  export interface ReqSaleOutwareList {
    /**
     * @description 分部id
     */
    scid?: number;
    /**
     * @description 单据id
     */
    outwareid?: number;
    /**
     * @description: 仓库id
     */
    storageid?: number;
    /**
     * @description: 参数：日期开始
     */
    begindate?: Date;
    /**
     * @description: 参数：日期结束
     */
    enddate?: Date;
    /**
     * @description: 审核状态 -1/null 全部，1 待仓审，2 待财审，3 已财审
     */
    flag?: number;
    /**
     * @description: 确认状态 null/-1 全部, 0 待确认, 2 初确认, 1 已确认
     */
    priceflag?: number;
    /**
     * @description: 客户名称
     */
    cusname?: string;
    /**
     * @description: 单据编号
     */
    keyword?: string;
    /**
     * @description: 车牌号码
     */
    carcode?: string;
    /**
     * @description: billtype
     */
    billtype?: number;
    /**
     * @description: thflag
     */
    thflag?: number;
    /**
     * @description: pageindex
     */
    pageindex?: number;
    /**
     * @description: pagesize
     */
    pagesize?: number;
  }
  /**
   * @name request: 获取销售发货单明细出参
   */
  export interface ReqSaleOutwareMx {
    /**
     * @description: 分部id
     */
    scid?: number;
    /**
     * @description: 订单id
     */
    outwareid?: number;
  }
}

/**
 * @name 技术
 */
export namespace Technology {
  /**
   * @name request: 获取物料类别入参
   */
  export interface ReqMtrlType {
    /**
     * @description 是否递归输出：1：是
     */
    RecurionType?: number;
    parentid?: number;
  }
  /**
   * @name response: 获取物料类别出参
   */
  export interface ResMtrlType {
    /**
     * @description 物料类别递归树
     */
    RecurionList: Recursion[];
    DataList: u_mtrltype[];
  }
  /**
   * @name request: 获取物料信息入参
   */
  export interface ReqMtrldefList {
    /**
     * @description 材料ID
     */
    mtrlid?: number;
    /**
     *  @description 仓库ID
     */
    storageid?: number;
    /**
     *  @description 属性
     *  */
    mtrlprp?: number;
    /**
     *  @description 物料类别
     */
    mtrltypeid?: number;
    /**
     *  @description 材料来源
     *  */
    mtrlorigin?: number;
    /**
     *  @description 是否使用
     *  */
    isuse?: number;
    /**
     *  @description 关键词
     */
    keyword?: string;
    /**
     *  @description 材料名称
     *  */
    mtrlname?: string;
    /**
     *  @description 材料编码
     *  */
    mtrlcode?: string;
    /**
     *  @description 材料模式
     *  */
    mtrlmode?: string;
    /**
     *  @description 材料选择类型
     */
    mtrlsectype?: string;
    /**
     *  @description 主线材料模式
     *  */
    zxmtrlmode?: string;
    /**
     *  @description 用户材料模式
     *  */
    usermtrlmode?: string;
    /**
     *  @description 计划编码
     */
    plancode?: string;
    /**
     *  @description 产品类别
     */
    mtrltype?: string;
  }
  /**
   * @name response: 获取物料信息出参
   */
  export interface ResMtrldefList {
    mtrldefList: uTech.u_mtrldef[];
  }
  /**
   * @name request: 获取物料信息入参
   */
  export interface ReqMtrldefDetailList {
    /**
     * @description 材料ID
     */
    mtrlid?: number;
  }
  /**
   * @name response: 获取物料信息出参
   */
  export interface ResMtrldefDetailList {
    mtrldef: uTech.u_mtrldef;
  }
}

/**
 * @name 通用接口
 */
export namespace GenericApi {
  /**
   * @name request: 获取通用接口：查询数据入参
   */
  export interface ReqCommonDynamicSelect {
    dsname?: string;
    queryparams?: any;
    /**
     * @description 排序 "attr1 desc, attr2 esc"
     */
    orderstr?: string;
    /**
     * @description: pageindex
     */
    pageindex?: number;
    /**
     * @description: pagesize
     */
    pagesize?: number;
    /**
     * @description 用户习惯dwname: 产品名称
     */
    dwname?: string;
    /**
     * @description 用户习惯itemname：窗口名称
     */
    itemname?: string;
    /**
     * @description 用户习惯是否加密储存
     */
    ifcompress?: string;
  }

  interface CommonDynamicSelectTableInfo {
    columns: any[];
  }
  /**
   * @name response: 获取通用接口：查询数据出参
   */
  export interface ResCommonDynamicSelect {
    datatable: any[];
    fields: any[];
    /**
     * @description: pageindex
     */
    pageindex?: number;
    /**
     * @description: pagesize
     */
    pagesize?: number;
    /**
     * @description: 数据总条数
     */
    tablecnt?: number;
    /**
     * @description: 表格布局{columns}
     */
    tableinfo?: CommonDynamicSelectTableInfo;
  }

  export interface CommonClass {
    /**
     * @description uo名称
     */
    uoName: string;
    /**
     * @description 动作名称
     */
    functionName: string;
    /**
     * @description uo入参
     */
    SParms: any;
    /**
     * @description 是否需要保存到数据库
     */
    ifcommit: boolean;
    /**
     * @description 需要返回的字段名称
     */
    returnStrList?: string[];
  }
  // /**
  //  * @name request: 获取通用接口：uo逻辑入参
  //  */
  // export interface ReqCommonBill {
  //   CList: CommonClass[];
  // }
  /**
   * @name response: 获取通用接口：uo逻辑出参
   */
  export interface ResCommonBill {
    /**
     * @description 返回的字段属性，根据returnStrList
     */
    reJob: any;
  }
  export interface ReqFormulaCompute {
    /**
     * @description 计算公式
     */
    formulas: any[];
  }
  export interface ResFormulaCompute {
    /**
     * @description 返回的结果
     */
    values: number[];
  }
}

export namespace FileApi {
  export interface ReqFileClass {
    billType: number;
  }
  export interface ResFileClass {
    list: FileClass[];
    /**
     * @description 附件删除权限： -1：无权限,0：全部
     */
    classdelstr: string;
    /**
     * @description 附件新增权限： -1：无权限,0：全部
     */
    classeditstr: string;
    /**
     * @description 附件查看权限： -1：无权限,0：全部
     */
    classviewstr: string;
  }
  export interface ReqFileData {
    fjdata: FileData;
  }
  export interface ResFileData {
    FjFileList: FileData[];
  }

  export interface ReqCacheFile {
    filemd5: string;
    width?: number;
    height?: number;
  }
  export interface ResCacheFile {
    filedata: any;
    filetype: string;
    FileName: string;
  }

  export interface ReqUploadFile {
    fileList: FileData[];
  }
}

export namespace PrintTemplate {
  export interface ReqGetPrintTemplate {
    dwname: string;
    printid?: number;
  }
  export interface ResGetPrintTemplate {
    list: sys_print_template[];
  }
  export interface ReqSavePrintTemplate {
    template: sys_print_template;
  }
}

export namespace Basicinfo {
  export interface ResUserList {
    userList: any[];
  }
  export interface ResSaveUserList {
    empid: number;
  }
  export interface ResDelUserList {
    useridList: number[];
  }
  export interface ReqDeleteBasicinfo {
    list: any[];
  }
  export interface ResDeleteBasicinfo {

  }
  export interface ReqBanBasicinfo {
    list: any[];
    type: Number;
  }
  export interface ResBanBasicinfo {
  }
  export interface ReqSaveBedNetType {
    bednet: any;
  }
  export interface ReqSaveMattressType {
    mattress: any;
  }
  export interface ReqSaveMattressFormula {
    mattress: any;
  }
  export interface ReqSaveShrinkage {
    shrinkage: any;
  }
  export interface ReqSaveSpring {
    spring: any;
  }
  export interface ReqAuditSpring {
    list: any[];
    type: number;
  }
  export interface ReqSaveBedNetVar {
    bednetvar: any;
  }
  export interface ResGetMtrlTypeList {
    list: any[];
    reList: any[];
  }
  export interface ReqSaveMtrlType {
    mtrltype: any;
  }
  export interface ReqSaveMtrlDef {
    mtrldef: any;
  }
  export interface ReqSaveMultiPrice {
    price: any;
  }
  export interface ReqSaveBedNetArea {
    area: any;
  }
  export interface ReqSaveConfigure {
    configure: any;
  }
}

export namespace SalePrice {
  export interface ResPriceList {
    list: any[];
  }

  export interface ReqSaveDept {
    dept: any;
  }

  export interface ResSaveDept {}

  export interface ReqDeleteDept {
    list: any[];
  }

  export interface ResDeleteDept {}

  export interface ReqSaveProfitrate {
    list: any[];
  }

  export interface ResSaveProfitrate {}

  export interface ReqSaveWorkmanShip {
    workmanship: any;
  }

  export interface ResSaveWorkmanShip {}

  export interface ReqDeleteWorkmanShip {
    list: any[];
  }

  export interface ResDeleteWorkmanShip {}
}

export namespace Mattress {
  export interface ReqSaveMattress {
    mattress: any;
    mattressMx?: any[];
  }
  export interface ResSaveMattress {
    mattressid: number;
  }
  export interface ReqMultiMattress {
    mattressids: number[];
    /**
     * @description 业务下单
     */
    xd_flag?: number;
    /**
     * @description 审核
     */
    flag?: number;
  }
  export interface ReqMultiMattressBcp {
    list: any[];
    type?: number;
  }
  export interface ResSaveMattressBcp {
    mattress: any;
  }
  export interface ReqSaveBedNet {
    bednet: any;
  }
  export interface ResSaveBedNet {
    bednet: any;
  }
}
