vue常用的工具函数(mixin)
这个工具可能有点老但是原生(lodash也不错推荐)lodash
`/**
- Created by Andste on 2018/5/9.
*/
import Vue from 'vue'
import { Foundation } from '~/ui-utils'
// import { api, domain } from '~/ui-domain'
import { api, domain } from '../../ui-domain'
import * as XLSX from 'xlsx'
export default {
data() {
return {
// 图片上传API
MixinUploadApi: api.base + '/uploaders',
// 地区API
MixinRegionApi: api.base + '/regions/@id/children',
// 买家端域名
MixinBuyerDomain: domain.buyer_pc,
// 买家端WAP域名
MixinBuyerWapDomain: domain.buyer_wap,
// 日期选择器快捷选项
MixinPickerShortcuts: [{
text: '最近一周',
onClick(picker) {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
picker.\(emit('pick', [start, end])
}
}, {
text: '最近一个月',
onClick(picker) {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
picker.\)emit('pick', [start, end])
}
}, {
text: '最近三个月',
onClick(picker) {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
picker.\(emit('pick', [start, end])
}
}]
}
},
computed: {
/**
* 缓存页面数组
* @returns {default.computed.cachedViews|(function())|Array|*|getters.cachedViews}
*/
cachedViews() {
return this.\)store.state.tagsView.cachedViews
},
/**
* 返回默认时间 + 5分钟
* 用于日期时间选择器的默认时间
* @returns {string}
* @constructor
/
MixinDefaultTime() {
const today = new Date()
let hours = today.getHours()
let minutes = today.getMinutes() + 5
let seconds = today.getSeconds()
if (hours < 10) hours = '0' + hours
if (minutes < 10) minutes = '0' + minutes
if (seconds < 10) seconds = '0' + seconds
return hours + ':' + minutes + ':' + seconds
}
},
methods: {
/* 返回克隆后的对象 /
MixinClone(obj) {
return JSON.parse(JSON.stringify(obj))
},
/* 用于修改单条表格数据后,set到tableData中 /
MixinSetTableData(tableData, idName, id, response) {
const { data } = tableData
const index = data.findIndex(item => item[idName] === id)
Vue.set(data, index, response)
},
/* 用于判断表单是否为空 /
MixinRequired(message, trigger) {
return { required: true, pattern: /^\S.\(/gi, message: message, trigger: trigger || 'blur' }
},
/** 格式化金钱 */
MixinFormatPrice(row, column, cellValue, index) {
if (typeof cellValue !== 'number') return ''
return '¥' + Foundation.formatPrice(cellValue)
},
/** 格式化时间戳 */
MixinUnixToDate(row, column, cellValue, index) {
return Foundation.unixToDate(cellValue)
},
/**
* 导出Excel
* @param json 要导出的json数据
* @param name 要导出的文件名
* @param type 要导出的数据类型
* @constructor
*/
MixinExportJosnToExcel(json, name = 'data', type = 'application/octet-stream') {
let wb = { SheetNames: [], Sheets: {}, Props: { }}
if (!Array.isArray(json)) json = [json]
json.forEach(item => {
wb.SheetNames.push(item.sheet_name)
wb.Sheets[item.sheet_name] = XLSX.utils.json_to_sheet(item.sheet_values, item.sheet_options)
})
const wopts = { bookType: 'xlsx', bookSST: false, type: 'binary' }
let blob = new Blob([s2ab(XLSX.write(wb, wopts))], { type })
let link = document.createElement('a')
document.body.appendChild(link)
link.style.display = 'none'
link.href = window.URL.createObjectURL(blob)
link.download = `\){name}.xlsx`
link.click()
// 释放资源
setTimeout(() => {
URL.revokeObjectURL(link.href)
}, 100)
function s2ab(s) {
if (typeof ArrayBuffer !== 'undefined') {
const buf = new ArrayBuffer(s.length)
const view = new Uint8Array(buf)
for (let i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF
return buf
} else {
const buf = new Array(s.length)
for (let i = 0; i !== s.length; ++i) buf[i] = s.charCodeAt(i) & 0xFF
return buf
}
}
},
// 输入框禁止输入表情符号
MixinEmojiCharacter(substring) {
for (var i = 0; i < substring.length; i++) {
var hs = substring.charCodeAt(i)
if (hs >= 0xd800 && hs <= 0xdbff) {
if (substring.length > 1) {
var ls = substring.charCodeAt(i + 1)
var uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000
if (uc >= 0x1d000 && uc <= 0x1f77f) {
return true
}
}
} else if (substring.length > 1) {
var lss = substring.charCodeAt(i + 1)
if (lss === 0x20e3) {
return true
}
} else {
if (hs >= 0x2100 && hs <= 0x27ff) {
return true
} else if (hs >= 0x2B05 && hs <= 0x2b07) {
return true
} else if (hs >= 0x2934 && hs <= 0x2935) {
return true
} else if (hs >= 0x3297 && hs <= 0x3299) {
return true
} else if (hs === 0xa9 || hs === 0xae || hs === 0x303d || hs === 0x3030 || hs === 0x2b55 || hs === 0x2b1c || hs === 0x2b1b || hs === 0x2b50) {
return true
}
}
}
}
}
}
`
本文来自博客园,作者:jialiangzai,转载请注明原文链接:https://www.cnblogs.com/zsnhweb/articles/16711029.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异