123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485 |
- import axios from 'axios'
- import FileSaver from 'file-saver'
- import { getToken } from '@/utils/auth'
- export function dateFormat2(format, date) {
- if (typeof date === 'string') {
- date = new Date(date);
- }
- const we = date.getDay(); // 星期
- const qut = Math.floor((date.getMonth() + 3) / 3).toString(); // 季度
- const opt = {
- 'Y+': date.getFullYear().toString(), // 年
- 'm+': (date.getMonth() + 1).toString(), // 月(月份从0开始,要+1)
- 'd+': date.getDate().toString(), // 日
- 'H+': date.getHours().toString(), // 时
- 'M+': date.getMinutes().toString(), // 分
- 'S+': date.getSeconds().toString(), // 秒
- 'q+': qut, // 季度
- };
- const week = {
- // 中文数字 (星期)
- 0: '日',
- 1: '一',
- 2: '二',
- 3: '三',
- 4: '四',
- 5: '五',
- 6: '六',
- };
- const quarter = {
- // 中文数字(季度)
- 1: '一',
- 2: '二',
- 3: '三',
- 4: '四',
- };
- if (/(W+)/.test(format)) {
- format = format.replace(
- RegExp.$1,
- RegExp.$1.length > 1
- ? RegExp.$1.length > 2
- ? '星期' + week[we]
- : '周' + week[we]
- : week[we]
- );
- }
- if (/(Q+)/.test(format)) {
- // 输入一个Q,只输出一个中文数字,输入4个Q,则拼接上字符串
- format = format.replace(
- RegExp.$1,
- RegExp.$1.length === 4 ? '第' + quarter[qut] + '季度' : quarter[qut]
- );
- }
- for (const k in opt) {
- const r = new RegExp('(' + k + ')').exec(format);
- if (r) {
- // 若输入的长度不为1,则前面补零
- format = format.replace(
- r[1],
- RegExp.$1.length === 1 ? opt[k] : opt[k].padStart(RegExp.$1.length, '0')
- );
- }
- }
- return format;
- }
- // 定义一个函数将树形数据转换为列表
- export function treeToList(tree, key = "children", list = []) {
- // 将当前节点添加到列表中
- list.push(...tree);
- // 遍历当前节点的子节点
- tree?.forEach(item => {
- if (item?.[key]?.length) {
- // 递归调用,将子节点及其后代节点添加到列表中
- treeToList(item?.[key], key, list);
- }
- });
- return list;
- }
- /**
- * 删除对象中的空值
- * @param {object} obj
- * @returns {Object}
- */
- export function deleteEmptyObj(obj) {
- let newObj = obj;
- for (var key in newObj) {
- if (newObj[key] === '' || newObj[key] === null || newObj[key] === undefined) {
- delete newObj[key]
- }
- }
- return newObj;
- }
- /**
- *
- * @param {*} array 要查询的数组
- * @param {*} attr 要查询的字段
- * @param {*} val 要查询的字段值
- * @returns
- */
- export function findElem(array, attr, val) {
- if (!array || !array.length) {
- return -1
- }
- for (var i = 0; i < array.length; i++) {
- if (array[i][attr] == val) {
- return i; //返回当前索引值
- }
- }
- return -1;
- }
- /**
- * 生成带参数的链接
- * @param {String} url
- * @param {Object} params
- * @returns
- */
- export function createParamsUrl(url, params) {
- if (typeof url === 'undefined' || url == null || url == '') {
- return ''
- }
- if (typeof params === 'undefined' || params == null || typeof params !== 'object') {
- return ''
- }
- url += url.indexOf('?') != -1 ? '' : '?'
- for (var k in params) {
- url += (url.indexOf('=') != -1 ? '&' : '') + k + '=' + encodeURI(params[k])
- }
- return url
- }
- /**
- * 导出功能
- * @param {*} obj
- * @returns
- */
- export function downloadFiles(url, params = {}) {
- params['x-token'] = getToken()
- const newParams = deleteEmptyObj(params)
- const newUrl = createParamsUrl(url, newParams)
- console.log(process.env.VUE_APP_BASE_API + newUrl)
- window.open(process.env.VUE_APP_BASE_API + newUrl)
- }
- export function downloadFiles2(url, params = {}, name) {
- const newParams = deleteEmptyObj(params)
- const newUrl = createParamsUrl(url, newParams)
- axios({
- url: process.env.VUE_APP_BASE_API + newUrl,
- method: 'get',
- responseType: 'blob',
- headers: {
- 'x-token': getToken()
- }
- }).then(res => {
- var blob = new Blob([res.data], {
- type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=utf-8'
- })
- var filename = name + '.xlsx'
- var downloadElement = document.createElement('a')
- var href = window.URL.createObjectURL(blob) // 创建下载的链接
- downloadElement.style.display = 'none'
- downloadElement.href = href
- downloadElement.download = filename // 下载后文件名
- document.body.appendChild(downloadElement)
- downloadElement.click() // 点击下载
- document.body.removeChild(downloadElement) // 下载完成移除元素
- window.URL.revokeObjectURL(href) // 释放掉blob对象
- })
- // params['x-token'] = getToken()
- // const newParams = deleteEmptyObj(params)
- // const newUrl = createParamsUrl(url, newParams)
- // console.log(process.env.VUE_APP_BASE_API + newUrl)
- // window.open(process.env.VUE_APP_BASE_API + newUrl)
- }
- /**
- * 导入功能
- * @param {*} url
- * @param {*} formData
- */
- export async function handleImport(url, formData) {
- const Result = await new Promise((resolve, reject) => {
- axios
- .post(
- process.env.VUE_APP_BASE_API + url,
- formData,
- {
- headers: {
- 'Content-Type': 'multipart/form-data',
- 'x-token': getToken()
- }
- }
- )
- .then(res => {
- resolve(res.data)
- })
- .catch(err => {
- reject(err)
- })
- })
- return Result
- }
- /**
- * 导入有返回二进制文件
- * @param {*} url
- * @param {*} formData
- */
- export async function handleImportTwo(url, formData) {
- const Result = await new Promise((resolve, reject) => {
- axios
- .post(
- process.env.VUE_APP_BASE_API + url,
- formData,
- {
- responseType: 'arraybuffer',
- headers: {
- 'Content-Type': 'multipart/form-data',
- 'x-token': getToken()
- }
- }
- )
- .then(res => {
- resolve(res.data)
- })
- .catch(err => {
- reject(err)
- })
- })
- return Result
- }
- /**
- * 重置时间格式
- * @param {*} date
- * @param {*} type
- */
- export function resetDateFormat(date, type) {
- let newDate = ''
- if (!date) {
- return ''
- }
- // type=1: yyyy-MM-dd 转 yyyy-MM-dd HH:mm:ss
- if (type == 1 || !type) {
- newDate = date + ' 00:00:00'
- }
- }
- /**
- * 若文档中已有命名dateFormat,可用dFormat()调用
- * 年(Y) 可用1-4个占位符
- * 月(m)、日(d)、小时(H)、分(M)、秒(S) 可用1-2个占位符
- * 星期(W) 可用1-3个占位符
- * 季度(q为阿拉伯数字,Q为中文数字)可用1或4个占位符
- *
- * let date = new Date()
- * dateFormat("YYYY-mm-dd HH:MM:SS", date) 2020-02-09 14:04:23
- * dateFormat("YYYY-mm-dd HH:MM:SS Q", date) 2020-02-09 14:09:03 一
- * dateFormat("YYYY-mm-dd HH:MM:SS WWW", date) 2020-02-09 14:45:12 星期日
- * dateFormat("YYYY-mm-dd HH:MM:SS QQQQ", date) 2020-02-09 14:09:36 第一季度
- * dateFormat("YYYY-mm-dd HH:MM:SS WWW QQQQ", date) 2020-02-09 14:46:12 星期日 第一季度
- */
- export function dateFormat(format, date) {
- const we = date.getDay() // 星期
- const qut = Math.floor((date.getMonth() + 3) / 3).toString() // 季度
- const opt = {
- 'Y+': date.getFullYear().toString(), // 年
- 'm+': (date.getMonth() + 1).toString(), // 月(月份从0开始,要+1)
- 'd+': date.getDate().toString(), // 日
- 'H+': date.getHours().toString(), // 时
- 'M+': date.getMinutes().toString(), // 分
- 'S+': date.getSeconds().toString(), // 秒
- 'q+': qut // 季度
- }
- const week = {
- // 中文数字 (星期)
- 0: '日',
- 1: '一',
- 2: '二',
- 3: '三',
- 4: '四',
- 5: '五',
- 6: '六'
- }
- const quarter = {
- // 中文数字(季度)
- 1: '一',
- 2: '二',
- 3: '三',
- 4: '四'
- }
- if (/(W+)/.test(format)) {
- format = format.replace(
- RegExp.$1,
- RegExp.$1.length > 1 ? (RegExp.$1.length > 2 ? '星期' + week[we] : '周' + week[we]) : week[we]
- )
- }
- if (/(Q+)/.test(format)) {
- // 输入一个Q,只输出一个中文数字,输入4个Q,则拼接上字符串
- format = format.replace(RegExp.$1, RegExp.$1.length == 4 ? '第' + quarter[qut] + '季度' : quarter[qut])
- }
- for (const k in opt) {
- const r = new RegExp('(' + k + ')').exec(format)
- if (r) {
- // 若输入的长度不为1,则前面补零
- format = format.replace(r[1], RegExp.$1.length == 1 ? opt[k] : opt[k].padStart(RegExp.$1.length, '0'))
- }
- }
- return format
- }
- /**
- * @param url {string} pdf地址
- * @param fileName {string} pdf名称
- */
- export function downloadPdf(url, fileName) {
- axios({
- method: 'get',
- url,
- responseType: 'blob'
- }).then(res => {
- const file = new Blob([res.data], {
- type: 'application/pdf'
- })
- FileSaver(file, fileName)
- })
- }
- export function changeNumberMoneyToChinese(money) {
- // 接收数字或者字符串数字
- if (typeof money === 'string') {
- if (money === '') return ''
- if (isNaN(parseFloat(money))) {
- throw Error(`参数有误:${money},请输入数字或字符串数字`)
- } else {
- // 去掉分隔符(,)
- money = money.replace(/,/g, '')
- }
- } else if (typeof money === 'number') {
- // 去掉分隔符(,)
- money = money.toString().replace(/,/g, '')
- } else {
- throw Error(`参数有误:${money},请输入数字或字符串数字`)
- }
- // 汉字的数字
- const cnNums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
- // 基本单位
- const cnIntRadice = ['', '拾', '佰', '仟']
- // 对应整数部分扩展单位
- const cnIntUnits = ['', '万', '亿', '兆']
- // 对应小数部分单位
- const cnDecUnits = ['角', '分', '毫', '厘']
- // 整数金额时后面跟的字符
- const cnInteger = '整'
- // 整型完以后的单位
- const cnIntLast = '元'
- // 金额整数部分
- let IntegerNum
- // 金额小数部分
- let DecimalNum
- // 输出的中文金额字符串
- let ChineseStr = ''
- // 正负值标记
- let Symbol = ''
- // 转成浮点数
- money = parseFloat(money)
- // 如果是0直接返回结果
- if (money === 0) {
- ChineseStr = cnNums[0] + cnIntLast + cnInteger
- return ChineseStr
- }
- // 如果小于0,则将Symbol标记为负,并转为正数
- if (money < 0) {
- money = -money
- Symbol = '负 '
- }
- // 转换为字符串
- money = money.toString()
- // 将整数部分和小数部分分别存入IntegerNum和DecimalNum
- if (money.indexOf('.') === -1) {
- IntegerNum = money
- DecimalNum = ''
- } else {
- const moneyArr = money.split('.')
- IntegerNum = moneyArr[0]
- DecimalNum = moneyArr[1].substr(0, 4)
- }
- // 获取整型部分转换
- if (parseInt(IntegerNum, 10) > 0) {
- let zeroCount = 0
- let IntLen = IntegerNum.length
- for (let i = 0; i < IntLen; i++) {
- // 获取整数的每一项
- let term = IntegerNum.substr(i, 1)
- // 剩余待处理的数量
- let surplus = IntLen - i - 1
- // 用于获取整数部分的扩展单位
- // 剩余数量除以4,比如12345,term为1时,expandUnit则为1,
- // cnIntUnits[expandUnit]对应得到的单位为万
- let expandUnit = surplus / 4
- // 用于获取整数部分的基本单位
- // 剩余数量取余4,比如123,那么第一遍遍历term为1,surplus为2,baseUnit则为2,
- // 所以cnIntRadice[baseUnit]对应得到的基本单位为'佰'
- let baseUnit = surplus % 4
- if (term === '0') {
- zeroCount++
- } else {
- // 连续存在多个0的时候需要补'零'
- if (zeroCount > 0) {
- ChineseStr += cnNums[0]
- }
- // 归零
- zeroCount = 0
- /*
- cnNums是汉字的零到玖组成的数组,term则是阿拉伯0-9,
- 直接将阿拉伯数字作为下标获取中文数字
- 例如term是0则cnNums[parseInt(term)]取的就是'零',9取的就是'玖'
- 最后加上单位就转换成功了!
- 这里只加十百千的单位
- */
- ChineseStr += cnNums[parseInt(term)] + cnIntRadice[baseUnit]
- }
- /*
- 如果baseUnit为0,意味着当前项和下一项隔了一个节权位即隔了一个逗号
- 扩展单位只有大单位进阶才需要,判断是否大单位进阶,则通过zeroCount判断
- baseUnit === 0即存在逗号,baseUnit === 0 && zeroCount < 4 意为大单位进阶
- */
- if (baseUnit === 0 && zeroCount < 4) {
- ChineseStr += cnIntUnits[expandUnit]
- }
- }
- ChineseStr += cnIntLast
- }
- // 小数部分转换
- if (DecimalNum !== '') {
- let decLen = DecimalNum.length
- for (let i = 0; i < decLen; i++) {
- // 同理,参考整数部分
- let term = DecimalNum.substr(i, 1)
- if (term !== '0') {
- ChineseStr += cnNums[Number(term)] + cnDecUnits[i]
- }
- }
- }
- ChineseStr = Symbol + ChineseStr
- return ChineseStr
- }
- // 区分单击事件和双击事件
- export function clickBG(millisecond) {
- this.timer = null
- this.click = callback => {
- clearTimeout(this.timer)
- this.timer = setTimeout(function () {
- clearTimeout(this.timer)
- callback && callback()
- }, millisecond)
- }
- this.dblClick = callback => {
- clearTimeout(this.timer)
- callback && callback()
- }
- }
- // 获取地址栏参数
- export function getUrlParam() {
- let getqyinfo = window.location.href.split('?')[1] || ''
- let getqys = getqyinfo.split('&')
- let obj = {} //创建空对象,接收截取的参数
- for (let i = 0; i < getqys.length; i++) {
- let item = getqys[i].split('=')
- let key = item[0]
- let value = item[1]
- obj[key] = value
- }
- return obj
- }
|