order.ts 11.6 KB
import axios from 'axios';
import { defHttp } from '/@/utils/http/axios';
import { useUserStoreWithOut } from '/@/store/modules/user';
import { useOrderStoreWithOut } from '/@/store/modules/order';
import { formatToDate } from '/@/utils/dateUtil';
import message from '/@/views/form-design/utils/message';
import { formatToDateTime } from '../../utils/dateUtil';

enum Api {
  ORDER_CREATE = '/order/erp/order/add',
  UPDATE = '/order/erp/order/edit',
  ORDER = '/order/erp/order/list_by_page',
  ORDER_DELETE = '/order/erp/order/delete_by_id',
  FIELD_AUTH = '/order/erp/order/field_unlock_apply',
  QUERY_PROJECT_NO_AND_INNER_NO = '/order/erp/order/queryProjectNoAndInnerNo', //查询项目号和内部编号
  EXPORT = '/order/erp/order/export',
  UPLOAD = '/api/localStorage/uploadOss',
  UPLOAD_FILE = '/api/localStorage/upload_file_oss', //上传文件
  PROFIT_RATE = '/order/erp/profit/calculate', // 编辑订单实时获取利润率

  DICT_INIT = '/order/erp/dictionary/get_all',
  DICT_ADD = '/order/erp/dictionary/add',
  DICT_UPDATE = '/order/erp/dictionary/edit',
  DICT_DELETE = '/order/erp/dictionary/delete',
  DICT_LIST = '/order/erp/dictionary/list_by_page',

  ANALYSIS = '/order/erp/profit/analysis',
  GRAVITY = '/order/erp/report/analysis',

  OPT_LOG = '/order/erp/opt/log/list_by_page', // 操作日志
  AUDIT_LOG = '/order/erp/audit/log/list_by_page', //审批日志
  ORDER_RATE_EXPORT = '/order/erp/report/export', // 所有设计师比重导出
  ORDER_FIELD_CHECK = '/order/erp/order/check', // 校验内部编号是否重复

  TRACK_HISTORY = '/order/erp/opinion/log/query_by_id', //跟单结果记录
  PASS_CALCULATE = '/order/erp/order/passRate', //一次性通过率
  CREATE_PRODUCT_TEXT = '/order/erp/order/produceReport', //生成生产指标书
  EXPORT_PRODUCT_TEXT = '/order/erp/order/send', //导出生产指标书

  BUSINESS_PROFIT_RATIO = '/order/erp/calculate_profit/business_profit_ratio', //业务/研发净利润分析
  BUSINESS_PROFIT_RATIO_EXPORT = '/order/erp/calculate_profit/business_profit_ratio_export', //业务/研发净利润分析_导出
  INNER_PROFIT_RATIO = '/order/erp/calculate_profit/inner_profit_ratio', //内部生产净利润分析表
  INNER_PROFIT_RATIO_EXPORT = '/order/erp/calculate_profit/inner_profit_ratio_export', //内部生产净利润分析表_导出
}

export const formatSearchData = (params) => {
  params.createStartTime = params.createStartTime
    ? formatToDate(params.createStartTime)
    : undefined;
  params.createEndTime = params.createEndTime ? formatToDate(params.createEndTime) : undefined;
  params.productionDepartmentConsignStartTime = params.productionDepartmentConsignStartTime
    ? formatToDate(params.productionDepartmentConsignStartTime)
    : undefined;
  params.productionDepartmentConsignEndTime = params.productionDepartmentConsignEndTime
    ? formatToDate(params.productionDepartmentConsignEndTime)
    : undefined;
  params.orderHodStartTime = params.orderHodStartTime
    ? formatToDate(params.orderHodStartTime)
    : undefined;
  params.orderHodEndTime = params.orderHodEndTime
    ? formatToDate(params.orderHodEndTime)
    : undefined;
  params.selfTestPassStartTime = params.selfTestPassStartTime
    ? formatToDate(params.selfTestPassStartTime)
    : undefined;
  params.selfTestPassEndTime = params.selfTestPassEndTime
    ? formatToDate(params.selfTestPassEndTime)
    : undefined;
  return params;
};

export const orderDelete = async (data: any) => {
  const res = await defHttp.post<any>({ url: Api.ORDER_DELETE, data }, { message: '删除成功' });
  return res;
};

export const orderCreate = async (data: any) => {
  const res = await defHttp.post<any>({ url: Api.ORDER_CREATE, data }, { message: '保存成功' });
  return res;
};

export const getOrderProfitRate = async (data: any) => {
  return defHttp.post<any>({ url: Api.PROFIT_RATE, data });
};

export const queryProjectNoAndInnerNo = async (data: any) => {
  const res = await defHttp.post<any>({ url: Api.QUERY_PROJECT_NO_AND_INNER_NO, data });
  return res;
};

export const getOrderOptLog = async (data: any) => {
  return defHttp.post<any>({ url: Api.OPT_LOG, data });
};

export const getOrderAuditLog = async (data: any) => {
  return defHttp.post<any>({ url: Api.AUDIT_LOG, data });
};
export const orderFieldCheck = async (data: any) => {
  try {
    await defHttp.post<any>({ url: Api.ORDER_FIELD_CHECK, data });
  } catch (error) {
    // 重复
    return error.result === 1000;
  }
  return false;
};

export const orderUpdate = async (data: any) => {
  const res = await defHttp.post<any>({ url: Api.UPDATE, data }, { message: '操作成功' });
  return res;
};

export const orderAuth = (data: any) =>
  defHttp.post<any>({ url: Api.FIELD_AUTH, data }, { message: '操作成功' });

export const orderAnalysis = async (data: any) => {
  const res = await defHttp.post<any>({ url: Api.ANALYSIS, data });
  return res;
};

/**
 * 查询编号选项
 * @param noType 是项目编号还是内部编号
 * @param value keyword
 * @returns select的选项
 */
export const queryNoOptions = async (noType: any, value: any) => {
  let options = [];
  let res;
  if (noType === 'projectNo') {
    res = await queryProjectNoAndInnerNo({ projectNo: value });
    options = res.map((item: any) => {
      return { label: item.projectNo, value: item.projectNo };
    });
  } else {
    res = await queryProjectNoAndInnerNo({ innerNo: value });
    options = res.map((item: any) => {
      return { label: item.innerNo, value: item.innerNo };
    });
  }

  return options;
};

export const orderGravity = async (data: any) => {
  data = formatSearchData(data);

  const res = await defHttp.post<any>({ url: Api.GRAVITY, data });
  return res;
};

export const orderExport = async (data: any = {}) => {
  // const res = await defHttp.post<any>({ url: Api.EXPORT, data });
  const userStore = useUserStoreWithOut();
  data = formatSearchData(data);

  const token = userStore.getToken;
  message.info('正在导出中...');

  return axios({
    url: '/basic-api' + Api.EXPORT,
    method: 'post',
    responseType: 'blob',
    headers: { Authorization: `${token}` },
    data,
  })
    .then((response) => {
      // 创建一个新的 Blob 对象,它包含了服务器响应的数据(即你的 Excel 文件)
      const blob = new Blob([response.data]); // Excel 的 MIME 类型
      const downloadUrl = window.URL.createObjectURL(blob);
      const a = document.createElement('a');
      a.href = downloadUrl;
      const date = formatToDateTime(Date.now());
      const strArr: string[] = [];
      Object.keys(data.fieldVO).map((key) => {
        switch (key) {
          case 'baseFields':
            strArr.push('基本信息');
            break;
          case 'inspectionStageFields':
            strArr.push('质量检测');
            break;
          case 'reportFields':
            strArr.push('项目报告');
            break;
          case 'profitAnalysisFields':
            strArr.push('利润分析');
            break;
          case 'trackStageFields':
            strArr.push('跟单');
            break;
        }
      });

      a.download = `${strArr.join('_')} ${date}.xlsx`; // 你可以为文件命名
      document.body.appendChild(a);
      a.click(); // 模拟点击操作来下载文件
      console.log(a, '5656a');
      URL.revokeObjectURL(downloadUrl); // 释放掉 blob 对象所占用的内存
      document.body.removeChild(a);

      message.success('导出成功');
    })
    .catch((error) => {
      // 处理错误
      message.error('导出错误', error);
    });
};

export const orderRateExport = async (data: any = {}) => {
  // const res = await defHttp.post<any>({ url: Api.EXPORT, data });
  const userStore = useUserStoreWithOut();
  data = formatSearchData(data);

  const token = userStore.getToken;
  message.info('正在导出中...');

  return axios({
    url: '/basic-api' + Api.ORDER_RATE_EXPORT,
    method: 'post',
    responseType: 'blob',
    headers: { Authorization: `${token}` },
    data,
  })
    .then((response) => {
      // 创建一个新的 Blob 对象,它包含了服务器响应的数据(即你的 Excel 文件)
      const blob = new Blob([response.data]); // Excel 的 MIME 类型
      const downloadUrl = window.URL.createObjectURL(blob);
      const a = document.createElement('a');
      a.href = downloadUrl;
      const date = formatToDateTime(Date.now());

      a.download = `设计比重报表 ${date}.xlsx`; // 你可以为文件命名
      document.body.appendChild(a);
      a.click(); // 模拟点击操作来下载文件
      URL.revokeObjectURL(downloadUrl); // 释放掉 blob 对象所占用的内存
      document.body.removeChild(a);

      message.success('导出成功');
    })
    .catch((error) => {
      // 处理错误
      message.error('导出错误', error);
    });
};

export const getInitDictData = async () => {
  const res = await defHttp.post({
    url: Api.DICT_INIT,
  });

  return res;
};

export async function uploadImg(params, onUploadProgress: (progressEvent: ProgressEvent) => void) {
  const res = await defHttp.uploadFile(
    {
      url: Api.UPLOAD,
      onUploadProgress,
    },
    {
      file: params.file,
      data: { name: params.file.name },
    },
  );
  return Promise.resolve({ data: { thumbUrl: res.data } });
}

export const getOrderList = async (params: DemoParams) => {
  params = formatSearchData(params);
  const res = await defHttp.post<DemoListGetResultModel>({
    url: Api.ORDER,
    params,
    headers: {
      // @ts-ignore
      ignoreCancelToken: true,
    },
  });
  const orderStore = useOrderStoreWithOut();
  orderStore.setTotal(res.total);
  return new Promise((resolve) => {
    resolve({
      items: res.records,
      total: res.total,
    });
  });
};

export const dictCreate = async (data: any) => {
  const res = await defHttp.post<any>({ url: Api.DICT_ADD, data }, { message: '保存成功' });
  return res;
};

export const dictUpdate = async (data: any) => {
  const res = await defHttp.post<any>({ url: Api.DICT_UPDATE, data }, { message: '保存成功' });
  return res;
};

export const dictDelete = async (data: any) => {
  const res = await defHttp.post<any>({ url: Api.DICT_DELETE, data }, { message: '保存成功' });
  return res;
};

export const dictList = async (data: any) => {
  const res = await defHttp.post<any>({ url: Api.DICT_LIST, data: { ...data, pageSize: 1000 } });
  return res;
};

//订单跟单记录
export const trackHistory = async (data: any) => {
  const res = await defHttp.post<any>({
    url: Api.TRACK_HISTORY,
    data: data,
  });
  return res;
};

export const passCalculate = async (data: any) => {
  const res = await defHttp.post<any>({
    url: Api.PASS_CALCULATE,
    data: data,
  });
  return res;
};

export const createProductText = async (data: any) => {
  const res = await defHttp.post<any>({
    url: Api.CREATE_PRODUCT_TEXT,
    data: data,
  });
  return res;
};

export const exportProductText = async (data: any) => {
  const res = await defHttp.post<any>({
    url: Api.EXPORT_PRODUCT_TEXT,
    data: data,
  });
  return res;
};

export const calculateBusinessProfit = async (data: any) => {
  const res = await defHttp.post<any>({
    url: Api.BUSINESS_PROFIT_RATIO,
    data: data,
  });
  return res;
};

export const exportBusinessProfit = async (data: any) => {
  const res = await defHttp.post<any>({
    url: Api.BUSINESS_PROFIT_RATIO_EXPORT,
    data: data,
  });
  return res;
};

export const calculateInnerProfitRatio = async (data: any) => {
  const res = await defHttp.post<any>({
    url: Api.INNER_PROFIT_RATIO,
    data: data,
  });
  return res;
};

export const exportInnerProfitRatio = async (data: any) => {
  const res = await defHttp.post<any>({
    url: Api.INNER_PROFIT_RATIO_EXPORT,
    data: data,
  });
  return res;
};