Skip to content

utils.tool 工具类

检查浏览器版本 - getBroswerV

js
export function getBroswerV() {
  var sys = {};
  var ua = navigator.userAgent.toLowerCase();
  var s;
  (s = ua.match(/edge\/([\d.]+)/))
    ? (sys.edge = s[1])
    : (s = ua.match(/rv:([\d.]+)\) like gecko/))
    ? (sys.ie = s[1])
    : (s = ua.match(/msie ([\d.]+)/))
    ? (sys.ie = s[1])
    : (s = ua.match(/firefox\/([\d.]+)/))
    ? (sys.firefox = s[1])
    : (s = ua.match(/chrome\/([\d.]+)/))
    ? (sys.chrome = s[1])
    : (s = ua.match(/opera.([\d.]+)/))
    ? (sys.opera = s[1])
    : (s = ua.match(/360se\/([\d.]+)/))
    ? (sys.thsse = s[1])
    : (s = ua.match(/version\/([\d.]+).*safari/))
    ? (sys.safari = s[1])
    : 0;

  if (sys.edge) return { broswer: "Edge", version: sys.edge };
  if (sys.ie) return { broswer: "IE", version: sys.ie };
  if (sys.firefox) return { broswer: "Firefox", version: sys.firefox };
  if (sys.chrome) return { broswer: "Chrome", version: sys.chrome };
  if (sys.opera) return { broswer: "Opera", version: sys.opera };
  if (sys.safari) return { broswer: "Safari", version: sys.safari };
  if (sys.thsse) return { broswer: "360se", version: sys.thsse };

  return { broswer: "", version: "0" };
}

js将文本复制到剪切板

js
function copyToClipboard(textToCopy) {
  // navigator clipboard 需要https等安全上下文
  if (navigator.clipboard && window.isSecureContext) {
    // navigator clipboard 向剪贴板写文本
    return navigator.clipboard.writeText(textToCopy);
  } else {
    // 创建text area
    let box = document.getElementById("ocr_pic_container");
    let textArea = document.createElement("textarea");
    textArea.value = textToCopy;
    console.log(box, textArea.value);
    // 使text area不在viewport,同时设置不可见
    textArea.style.position = "absolute";
    textArea.style.opacity = 0;
    textArea.style.left = "-999999px";
    textArea.style.top = "-999999px";
    box.appendChild(textArea);
    textArea.focus();
    textArea.select();
    return new Promise((res, rej) => {
      // 执行复制命令并移除文本框
      document.execCommand("copy") ? res() : rej();
      textArea.remove();
    });
  }
},

简单的js鼠标跟踪

js
function startOnMouse() {
  // 创建简单的圆形区域跟踪鼠标
  const box = document.createElement("div");
  box.style.width = "100px";
  box.setAttribute("id", "moveMouseBox");
  box.style.height = "100px";
  box.style.border = "1px solid #bfbfbf";
  box.style.borderRadius = "50%";
  box.style.boxSizing = "border-box";
  box.style.position = "absolute";
  box.style.top = "-100px";
  box.style.left = "0px";
  const parent = document.getElementById("app");
  parent.appendChild(box);
  onmousemove = (event) => {
    const y = event.clientY - 50;
    const x = event.clientX - 50;
    box.style.top = y + "px";
    box.style.left = x + "px";
    this.point = {
      x: event.clientX,
      y: event.clientY,
    };
  };
}

上传文件 - 单文件上传

js
// 单文件上传
// otherKey object类型
function uploadFileComponents(file, fileKeyName, otherKey) {
  // 通过传入文件,以及所需要的参数对象进行文件处理。
  const form = new FormData();
  let flag = file.hasOwmProperty("raw");
  if (flag) {
    form.append(fileKeyName, file.raw);
  } else {
    return false;
  }
  for (const key in otherKey) {
    form.append(key, otherKey[key]);
  }
  return form;
}

base64 去背景色

js
// * dataimg      base64编码图片
// * callback      回调函数
changeImage(dataImg, callback) {
  let self = this;
  var base64Img = documencreateElement("base64Img"),
    canvas = document.createEleme("canvas"),
    context = canvas.getConte("2d");
  // 创建新图片
  var img = new Image();
  img.src = dataImg;
  img.addEventListener(
    "load",
    function () {
      // 绘制图片到canvas上
      canvas.width = img.width;
      canvas.height = img.height;
      context.drawImage(img, 0, 0)
      // 将canvas的透明背景设置色
      var imageData = contexgetImageData(
        0,
        0,
        canvas.width,
        canvas.height
      );
      for (var i = 0; i imageData.data.length; i +4) {
        //rgb大于250的透明度y均成0
        if (
          imageData.data[i] 250 &&
          imageData.data[i + 1] 250 &&
          imageData.data[i + 2] 250
        ) {
          imageData.data[i + 3] 0;
        }
      }
      context.putImageDa(imageData, 0, 0);
      self.baseImg = canvatoDataURL("image/png"); /回base64
      if (typeof callback !=undefined) {
        if (callback) callba(self.baseImg);
      }
    },
    false
  );
},

// 调用

changeImage(base64Data,(res)=>{
  console.log('修改后base64数据',res);
})

formData预览数据结构

js
const form = new FormData();
form.append('key1',1111);
form.append('key2',2222);
const data = {};
for (const [key, value] of form.entries()) {
   data[key] = value;
}
console.log(data);

通过URl下载文件

js
/**
 * 通过 URL 直接下载文件(不预览)
 * @param {string} fileUrl - 文件远程 URL(如 https://xxx.com/xxx.pdf、https://xxx.com/xxx.jpg)
 * @param {string} [fileName] - 可选,下载后的文件名(含后缀,如 "报告.pdf")
 */
export function downloadFile(fileUrl, fileName) {
  // 处理文件名(默认使用 URL 中的原文件名)
  const defaultFileName = fileUrl.split('/').pop().split('?')[0];
  const finalFileName = fileName || defaultFileName;

  // 创建隐藏的 <a> 标签
  const a = document.createElement('a');
  a.style.display = 'none';

  // 跨域文件处理:通过 fetch 获取 Blob 数据,再创建本地 URL
  fetch(fileUrl, {
    method: 'GET',
    mode: 'cors', // 允许跨域(需服务器配置 CORS 允许该域名访问)
    credentials: 'omit' // 无需携带 Cookie(根据需求调整为 'include' 或 'same-origin')
  })
    .then(response => {
      if (!response.ok) throw new Error('文件下载失败');
      return response.blob(); // 转换为 Blob 二进制数据
    })
    .then(blob => {
      // 创建本地临时 URL(指向 Blob 数据)
      a.href = URL.createObjectURL(blob);
      a.download = finalFileName; // 强制下载,指定文件名
      document.body.appendChild(a);
      a.click(); // 触发点击下载

      // 清理资源(避免内存泄漏)
      document.body.removeChild(a);
      URL.revokeObjectURL(a.href); // 释放临时 URL
    })
    .catch(error => {
      console.error('下载失败:', error);
      alert('文件下载失败,请稍后重试');
    });
}

校验el-form表单必填

js
validateRuleForm(formRef) {
      return new Promise((resolve) => {
        formRef.validate(async (valid) => {
          resolve(valid); // 将验证结果通过 Promise 返回
        });
      });
    },