文件路径

所需依赖

yarn add [email protected] # 解析处理 Excel 表格专用

挂载为全局方法

import Vue from 'vue'
import App from './App.vue'
import Tools from './utils/Tools'

// 全局方法挂载
Vue.prototype.$Tools = new Tools()

文件概述

import xlsx from 'xlsx'
const { dialog, getCurrentWindow } = require('electron').remote

export default class Tools {
    constructor() {}
    // 具体方法写在此处...
}

具体方法

获取输入值的具体数据类型

/**
 * 获取输入值的具体数据类型
 * @param {*} variable
 */
getType(variable) {
  return Object.prototype.toString.call(variable).split(' ')[1].replace(']', '')
}

获取文件路径

/**
 * 获取文件路径
 * @param {string} file_type  文件选择类型的整体描述
 * @param {array} extensions  选中文件的具体扩展名组成数组
 */
getFilePath(file_type = 'All Files', extensions = ['*']) {
  return new Promise(async (resolve, reject) => {
    const { canceled, filePaths } = await dialog.showOpenDialog(getCurrentWindow(), {
      title: '请选择一个目录',
      properties: ['openFile', 'dontAddToRecent'],
      buttonLabel: '选择此文件', // 确认按钮的 label
      filters: [{ name: file_type, extensions }],
    })
    canceled ? reject('用户已取消对文件的选择操作') : resolve(filePaths[0])
  })
}

获取文件路径

getDirPath() {
  return new Promise(async (resolve, reject) => {
    const { canceled, filePaths } = await dialog.showOpenDialog(getCurrentWindow(), {
      title: '请选择一个目录',
      properties: ['openDirectory', 'dontAddToRecent'],
      buttonLabel: '选择此文件夹', // 确认按钮的 label
    })
    canceled ? reject('用户已取消对文件夹的选择操作') : resolve(filePaths[0])
  })
}

获取文件保存的位置

/**
 * 获取文件保存的位置
 * @param {string} file_type  文件选择类型的整体描述
 * @param {array} extensions  选中文件的具体扩展名组成数组
 */
getFileSavePath(file_type = 'All Files', extensions = ['*']) {
  return new Promise(async (resolve, reject) => {
    const { canceled, filePath } = await dialog.showSaveDialog(getCurrentWindow(), {
      title: '请选择文件的保存位置',
      properties: ['dontAddToRecent'],
      buttonLabel: '保存在此位置', // 确认按钮的 label
      filters: [{ name: file_type, extensions }],
    })
    canceled ? reject('用户已取消对文件的保存操作') : resolve(filePath)
  })
}

Excel 表格文件导出

/**
 * 表格文件导出(支持导出多表)
 * @param {string} file_path  表格导出路径
 * @param {array} sheet_list  二维数组 [[表数据, 表名]]
 */
exportExcel(file_path, sheet_list = []) {
  const WORKBOOK = xlsx.utils.book_new() // 新建一个空白工作簿
  for (const sheet_item of sheet_list) {
    const TEMP_SHEET = xlsx.utils.json_to_sheet(sheet_item[0])
    xlsx.utils.book_append_sheet(WORKBOOK, TEMP_SHEET, sheet_item[1])
  }
  xlsx.writeFile(WORKBOOK, file_path)
}

Excel 表格文件导入

/**
 * 表格文件导入(excel 表第一行必须是表头 | 支持读取多表)
 * @param {string} file_path  表格导入路径
 */
importExcel(file_path) {
  const { SheetNames, Sheets } = xlsx.readFile(file_path)
  const TEMP_TABLE_LIST = []
  for (const SheetName of SheetNames) {
    const TEMP_LIST = { SheetName }
    TEMP_LIST.sheet = xlsx.utils.sheet_to_json(Sheets[SheetName])
    TEMP_TABLE_LIST.push(TEMP_LIST)
  }
  return TEMP_TABLE_LIST
}

根据角度计算弧度

/**
 * 根据角度计算弧度
 * @param {number} angle 待转换的角度
 * @param {number} fix_num 保留的小数点位数
 * @returns
 */
angleToArc(angle, fix_num = 4) {
  return Number(((angle * Math.PI) / 180).toFixed(fix_num))
}

根据弧度计算角度

/**
 * 根据弧度计算角度
 * @param {*} arc 待转换的弧度
 * @param {*} fix_num 保留的小数点位数
 * @returns
 */
arcToAngle(arc, fix_num = 4) {
  return Number(((arc * 180) / Math.PI).toFixed(fix_num))
}
03-05 14:02