common.ts 4.54 KB
import { ElMessage } from 'element-plus'
import { getDownloadUrl, download } from "@/utils/common";
import { getImageContent } from "@/api/modules/queryService";
import { getDownFileSignByUrl, obsDownloadRequest, parseAndDecodeUrl } from './obsService';

// export const onUploadFilePreview = (file) => {
//   let url = file.url;
//   getImageContent(url).then((res: any) => {
//     if (res && !res.msg) {
//       let name = file.name;
//       var fileSuffix = name ? name.substring(name.lastIndexOf('.') + 1).toLowerCase() : '';
//       if (fileSuffix === 'png' || fileSuffix === 'jpeg' || fileSuffix === 'jpg' || fileSuffix === 'pdf') { //浏览器可以支持图片和pdf预览
//         let fileUrl = <string>getDownloadUrl(res, name, fileSuffix);
//         let win = window.open(fileUrl, name);
//         win && (win.document.title = name);
//       } else {
//         download(res, name, fileSuffix);
//       }
//     } else {
//       res?.msg && ElMessage.error(res?.msg);
//     }
//   })
// }

// export const onUploadFileDownload = (file) => {
//   let url = file.url;
//   getImageContent(url).then((res: any) => {
//     if (res && !res.msg) {
//       let name = file.name;
//       var fileSuffix = name ? name.substring(name.lastIndexOf('.') + 1) : '';
//       download(res, name, fileSuffix);
//     } else {
//       res?.msg && ElMessage.error(res?.msg);
//     }
//   })
// }
export const onUploadFileDownload = async (params) => {
  const {name, url} = params;
  const refSignInfo: any = await getDownFileSignByUrl(parseAndDecodeUrl(url).fileName);
  if (!refSignInfo?.data) {
    refSignInfo?.msg && ElMessage.error(refSignInfo?.msg);
    return;
  }
  obsDownloadRequest(refSignInfo?.data).then((res: any) => {
    if (res && !res.msg) {
      var fileSuffix = name ? name.substring(name.lastIndexOf('.') + 1) : '';
      download(res, name, fileSuffix);
    } else {
      res?.msg && ElMessage.error(res?.msg);
    }
  })
}

export function getPathUrl(url:string) {
  // 查找问号的位置
  var questionMarkIndex = url.lastIndexOf('?');

  // 如果存在问号,则返回问号之前的部分;如果不存在,则返回原url
  return questionMarkIndex !== -1 ? url.substring(0, questionMarkIndex) : url;
}

export const onUploadFilePreview = async (params) => {
  // console.log(params, 'params');
  let name = ''
  let url = '';
  if (params && typeof params == 'string') {
    url = params;
  } else {
    name = params.name;
    url = params.url;
  }
  url = getPathUrl(url);
  // let f = formInline.value[item.field].find(i => i.name == file.name);
  // let url = f.url;
  let fileName: string = parseAndDecodeUrl(url).fileName;
  if (!name) {
    name = fileName;
  }
  const refSignInfo: any = await getDownFileSignByUrl(fileName);
  if (!refSignInfo?.data) {
    refSignInfo?.msg && ElMessage.error(refSignInfo?.msg);
    return;
  }
  obsDownloadRequest(refSignInfo?.data).then((res: any) => {
    if (res && !res.msg) {
      var fileSuffix = name ? name.substring(name.lastIndexOf('.') + 1).toLowerCase() : '';
      if (fileSuffix === 'png' || fileSuffix === 'jpeg' || fileSuffix === 'jpg' || fileSuffix === 'pdf') { //浏览器可以支持图片和pdf预览
        let fileUrl = <string>getDownloadUrl(res, name, fileSuffix);
        let win = window.open(fileUrl, name);
        win && (win.document.title = name);
      } else {
        download(res, name, fileSuffix);
      }
    } else {
      res?.msg && ElMessage.error(res?.msg);
    }
  });
}

// 设置显示的文件名
export const setFileName = (name) => {
  if(name && name.indexOf('_') > -1){
    const s = name.indexOf("_");
    const e = name.lastIndexOf(".");
    const newName = name.slice(0, s) + name.slice(e);
    return newName
  } else {
    return name || '--';
  }
}

// 已任意长度分割数组
export const chunk = (array, size) => {
  //获取数组的长度,如果你传入的不是数组,那么获取到的就是undefined
  const length = array.length;
  //判断不是数组,或者size没有设置,size小于1,就返回空数组
  if (!length || !size || size < 1) {
      return [];
  }
  //核心部分
  var index = 0; //用来表示切割元素的范围start
  var resIndex = 0; //用来递增表示输出数组的下标

  //根据length和size算出输出数组的长度,并且创建它。
  var result = new Array(Math.ceil(length / size));
  //进行循环
  while (index < length) {
      //循环过程中设置result[0]和result[1]的值。该值根据array.slice切割得到。
      result[resIndex++] = array.slice(index, (index += size));
  }
  //输出新数组
  return result;
}