wwf
15 小时以前 4f218aac60322f6b0cd90447f8c13f6fb6ff88e8
src/utils/tool.js
@@ -1,16 +1,17 @@
import { useOptionItemsStore } from '@/stores/optionItems.js';
import $qxueyou from '@/config/qxueyou.js'
/**
 * 获取 assets/images 目录下的图片URL
 * @param {string} imageName - 图片文件名(包含扩展名)
 * @returns {string} 图片的完整URL
 */
export const getImageUrl = (imageName) => {
  try {
    return new URL('../assets/images/' + imageName, import.meta.url).href;
  } catch (error) {
    console.warn(`Failed to load image: ${imageName}`, error);
    return "";
  }
  // 使用 Vite 的 glob 功能动态导入图片资源
  const modules = import.meta.glob('../assets/images/**/*.{png,jpg,jpeg,gif,svg,webp}', { eager: true });
  // 移除开头的斜杠
  const cleanName = imageName.startsWith('/') ? imageName.slice(1) : imageName;
  const path = `../assets/images/${cleanName}`;
  return modules[path]?.default || '';
};
export const getUUID = () => {
  let s = []
@@ -66,11 +67,39 @@
  }
}
export const getOccupationName = (code) => {
export const getOccupationName = (id) => {
  const { occupationItems } = useOptionItemsStore()
  const obj = occupationItems.find(ele => ele.code == code)
  const obj = occupationItems.find(ele => ele.id == id)
  
  return obj?.name || ''
  return obj?.occupationJob || ''
}
const levelKey = {
  '5': '五级',
  '4': '四级',
  '3': '三级',
  '2': '二级',
  '1': '一级'
}
export const getLevelItems = (occupationId) => {
  const { occupationItems } = useOptionItemsStore()
  const obj = occupationItems.find(ele => ele.id == occupationId)
  if (!obj) return []
  let levelItems = []
  obj.levelStr.split(',').forEach(ele => {
    levelItems.push({ name: levelKey[ele], value: ele },)
  })
  return levelItems || []
}
export const getLevelName = (levelStr) => {
  let levelList = levelStr?.split(',') || []
  let tempList = []
  levelList.forEach(ele => {
    tempList.push(levelKey[ele])
  })
  return tempList.join(',')
}
export const getJobName = (occupationCode, jobCode) => {
@@ -82,4 +111,92 @@
  if (!job) return ''
  return job.jobName || ''
}
}
export const getFileUrlName = (url = '') => {
  const fullFilename = url?.substring(url.lastIndexOf('/') + 1);
  return fullFilename || ''
}
/**
 * 通过URL下载文件(简单方法)
 * @param {string} url - 文件URL
 * @param {string} [filename] - 自定义文件名
 */
export const downloadFileByUrl = function(url, filename) {
  // 创建a标签
  const link = document.createElement('a');
  link.href = url.includes('http') ? url : $qxueyou.qxyRes + url ;
  link.download = filename || '文件';
  link.style.display = 'none';
  // 添加到文档并触发点击
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
}
export const uploadByBase64 = async function(base64, fileName, fileType = 'png') {
  if (!base64) return null
  let blob = getBlobByBase64(base64, fileType)
  if (!blob) return null
  return await uploadRequest(blob, fileName, fileType)
}
let getBlobByBase64 = function(base64, fileType){
  if (!base64) return null
  let bstr = window.atob(base64.split(',')[1])
  let bstrLen = bstr.length
  let u8arr = new Uint8Array(bstrLen);
  while (bstrLen--) {
    u8arr[bstrLen] = bstr.charCodeAt(bstrLen);
  }
  return new Blob([u8arr], {type: fileType})
}
let uploadRequest = function(blob, fileName, fileType){
  return new Promise((resolve) => {
    let fd = new FormData()
    let xhr = new XMLHttpRequest()
    fd.append('image', blob, `${fileName}.${fileType}`)
    xhr.open('POST', $qxueyou.upload, true)
    xhr.onreadystatechange = () => {
      if (xhr.readyState === 4 && xhr.status === 200 && xhr.responseText) {
        let file = JSON.parse(xhr.responseText)[0] // 返回结果
        resolve(file.path)
      }
    }
    xhr.onerror = (evt) => { // 上传失败回调
      store.commit("snack/error", "上传失败!")
      console.log(JSON.stringify(evt.target))
      resolve()
    }
    xhr.send(fd);
  })
}
export const getCurrentPosition = (options = {}) => {
  return new Promise((resolve, reject) => {
    if (!("geolocation" in navigator)) {
      reject(new Error("浏览器不支持地理位置定位"));
    } else {
      navigator.geolocation.getCurrentPosition(
        (position) => resolve(position),
        (error) => {
          console.log(error.code)
          console.log(error.message)
          reject(error)
        },
        {
          enableHighAccuracy: options.enableHighAccuracy || false,
          timeout: options.timeout || 10000,
          maximumAge: options.maximumAge || 0
        }
      );
    }
  });
}