kakapay后台管理系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

460 lines
12 KiB

/**
* 通用js方法封装处理
* Copyright (c) 2019 ruoyi
*
*
*
*
*
* pay_channel_name,key_id, user_id, store_id, order_no, out_trade_no,
* transaction_id, tran_amt, pay_amt, pay_type, channel_type, pay_time, order_status,
* rate, channel_rate, mch_id, mch_name, notify_url, back_url, store_no, bank_code,
* bank_id, card_type, product_name, product_desc, qrcode_img, qrcode_url, user_key, source_type, attach,
* version, charset, sign_type, create_time, update_time, order_msg, media_type
* name, mobile,store_settle_time,store_settle,
real_amt,rate_amt,poundage_rate,poundage_amt,
store_name,store_type,type_name pay_type_name,
channel_name pay_channel_name
*
*/
const baseURL = process.env.VUE_APP_BASE_API
/**
* 从日期数组生成 range 对象
* @return {{beginTime: string, endTime: string}}
*/
export function calcRange(array) {
let range = {}
if (array && array.length > 0) {
range.beginTime = parseTime(array[0])
range.endTime = parseTime(array[1])
// 替换 endTime 为 23:59:59
range.endTime = range.endTime.replace(/(\d{2}:\d{2}:\d{2})/, '23:59:59')
} else {
throw new Error('Date range is empty!')
}
return range
}
// 时区北京
export function BeiJingDate() {
return new Date(new Date().getTime() + (parseInt(new Date().getTimezoneOffset() / 60) + 8) * 3600 * 1000)
}
// 通用下载方法
export function download(fileName) {
window.location.href = baseURL + '/common/download?fileName=' + encodeURI(fileName) + '&delete=' + true
}
//获取当前年月日
export function today() {
let nowDate = new Date()
let date = {
year: nowDate.getFullYear(),
month: nowDate.getMonth() + 1,
date: nowDate.getDate()
}
if (date.date <= 9) {
return date.year + '-' + 0 + date.month + '-' + 0 + date.date
} else {
return date.year + '-' + 0 + date.month + '-' + date.date
}
}
// 添加日期范围
export function addSESDateRange(params, dateRange, propName) {
var search = params
search.beginTime = null
search.endTime = null
search.updateBeginTime = null
search.updateEndTime = null
if (propName) {
if (dateRange[0]) {
if (dateRange[0][0] && dateRange[0][1]) {
search.beginTime = dateRange[0][0]
search.endTime = dateRange[0][1]
} else if (!dateRange[0][0]) {
search.beginTime = undefined
search.endTime = undefined
}
}
if (dateRange[1]) {
if (dateRange[1][0] && dateRange[1][1]) {
search.updateBeginTime = dateRange[1][0]
search.updateEndTime = dateRange[1][1]
} else if (!dateRange[1][0]) {
search.updateBeginTime = undefined
search.updateEndTime = undefined
}
}
}
if (!propName) {
if (null != dateRange && '' != dateRange) {
// search.beginTime = dateRange[0];
// search.endTime = dateRange[1];
if (dateRange[0] && dateRange[1]) {
search.beginTime = dateRange[0]
search.endTime = dateRange[1]
} else if (!dateRange[0]) {
search.beginTime = undefined
search.endTime = undefined
}
}
}
return search
}
// 日期格式化
export function parseTime(time, pattern) {
if (arguments.length === 0 || !time) {
return null
}
const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
let date
if (typeof time === 'object') {
date = time
} else {
if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
time = parseInt(time)
} else if (typeof time === 'string') {
time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm), '')
}
if ((typeof time === 'number') && (time.toString().length === 10)) {
time = time * 1000
}
date = new Date(time)
}
const formatObj = {
y: date.getFullYear(),
m: date.getMonth() + 1,
d: date.getDate(),
h: date.getHours(),
i: date.getMinutes(),
s: date.getSeconds(),
a: date.getDay()
}
const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
let value = formatObj[key]
// Note: getDay() returns 0 on Sunday
if (key === 'a') {
return ['日', '一', '二', '三', '四', '五', '六'][value]
}
if (result.length > 0 && value < 10) {
value = '0' + value
}
return value || 0
})
return time_str
}
// 表单重置
export function resetForm(refName) {
if (this.$refs[refName]) {
this.$refs[refName].resetFields()
}
}
// 添加日期范围
export function addDateRange(params, dateRange, propName) {
let search = params
search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {}
dateRange = Array.isArray(dateRange) ? dateRange : []
if (typeof (propName) === 'undefined') {
search.params['beginTime'] = dateRange[0]
search.params['endTime'] = dateRange[1]
} else {
search.params['begin' + propName] = dateRange[0]
search.params['end' + propName] = dateRange[1]
}
return search
}
// 回显数据字典
export function selectDictLabel(datas, value) {
if (value === undefined) {
return ''
}
var actions = []
Object.keys(datas).some((key) => {
if (datas[key].value == ('' + value)) {
actions.push(datas[key].label)
return true
}
})
if (actions.length === 0) {
actions.push(value)
}
return actions.join('')
}
// 回显数据字典(字符串、数组)
export function selectDictLabels(datas, value, separator) {
if (value === undefined || value.length === 0) {
return ''
}
if (Array.isArray(value)) {
value = value.join(',')
}
var actions = []
var currentSeparator = undefined === separator ? ',' : separator
var temp = value.split(currentSeparator)
Object.keys(value.split(currentSeparator)).some((val) => {
var match = false
Object.keys(datas).some((key) => {
if (datas[key].value == ('' + temp[val])) {
actions.push(datas[key].label + currentSeparator)
match = true
}
})
if (!match) {
actions.push(temp[val] + currentSeparator)
}
})
return actions.join('').substring(0, actions.join('').length - 1)
}
// 字符串格式化(%s )
export function sprintf(str) {
var args = arguments,
flag = true,
i = 1
str = str.replace(/%s/g, function() {
var arg = args[i++]
if (typeof arg === 'undefined') {
flag = false
return ''
}
return arg
})
return flag ? str : ''
}
// 转换字符串,undefined,null等转化为""
export function parseStrEmpty(str) {
if (!str || str == 'undefined' || str == 'null') {
return ''
}
return str
}
// 数据合并
export function mergeRecursive(source, target) {
for (var p in target) {
try {
if (target[p].constructor == Object) {
source[p] = mergeRecursive(source[p], target[p])
} else {
source[p] = target[p]
}
} catch (e) {
source[p] = target[p]
}
}
return source
}
/**
* 构造树型结构数据
* @param {*} data 数据源
* @param {*} id id字段 默认 'id'
* @param {*} parentId 父节点字段 默认 'parentId'
* @param {*} children 孩子节点字段 默认 'children'
*/
export function handleTree(data, id, parentId, children) {
let config = {
id: id || 'id',
parentId: parentId || 'parentId',
childrenList: children || 'children'
}
var childrenListMap = {}
var nodeIds = {}
var tree = []
for (let d of data) {
let parentId = d[config.parentId]
if (childrenListMap[parentId] == null) {
childrenListMap[parentId] = []
}
nodeIds[d[config.id]] = d
childrenListMap[parentId].push(d)
}
for (let d of data) {
let parentId = d[config.parentId]
if (nodeIds[parentId] == null) {
tree.push(d)
}
}
for (let t of tree) {
adaptToChildrenList(t)
}
function adaptToChildrenList(o) {
if (childrenListMap[o[config.id]] !== null) {
o[config.childrenList] = childrenListMap[o[config.id]]
}
if (o[config.childrenList]) {
for (let c of o[config.childrenList]) {
adaptToChildrenList(c)
}
}
}
return tree
}
/**
* 参数处理
* @param {*} params 参数
*/
export function tansParams(params) {
let result = ''
for (const propName of Object.keys(params)) {
const value = params[propName]
var part = encodeURIComponent(propName) + '='
if (value !== null && value !== '' && typeof (value) !== 'undefined') {
if (typeof value === 'object') {
for (const key of Object.keys(value)) {
if (value[key] !== null && value[key] !== '' && typeof (value[key]) !== 'undefined') {
let params = propName + '[' + key + ']'
var subPart = encodeURIComponent(params) + '='
result += subPart + encodeURIComponent(value[key]) + '&'
}
}
} else {
result += part + encodeURIComponent(value) + '&'
}
}
}
return result
}
// 验证是否为blob格式
export async function blobValidate(data) {
try {
const text = await data.text()
JSON.parse(text)
return false
} catch (error) {
return true
}
}
/**
* toFixed 但是不四舍五入
*/
export function toFixedWithOutRounded(num, s) {
const re = new RegExp('^-?\\d+(?:\.\\d{0,' + (s || -1) + '})?')
return num.toString().match(re)[0]
}
/**
* 格式化金额, 保留两位小数
* @param o
* @param o.amount {number | string} 金额
* @param o.precision {number} 精度, 默认 100 (分)
* @param o.thousand {boolean} 是否需要千分位, 默认 true
* @param o.decimal {boolean} 是否需要小数点, 默认 true
* @param o.decimalLength {number} 小数点位数, 默认 2
* @param o.decimalSeparator {string} 小数点分隔符, 默认 '.'
* @param o.thousandSeparator {string} 千分位分隔符, 默认 ','
* @return {string | number}
*/
export const amountFormat = (o) => {
// 默认参数值
const {
amount,
precision = 100,
thousand = true,
decimal = true,
decimalLength = 2,
decimalSeparator = '.',
thousandSeparator = ','
} = o
// 将金额转换为数字类型
const numAmount = typeof amount === 'string' ? parseFloat(amount) : amount
if (isNaN(numAmount)) {
return ''
}
// 根据精度对金额进行四舍五入
const roundedAmount = numAmount / precision
// 格式化小数部分
let formattedAmount = decimal ? roundedAmount.toFixed(decimalLength) : Math.floor(roundedAmount).toString()
// 添加千分位分隔符
if (thousand) {
const parts = formattedAmount.split('.')
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, thousandSeparator)
formattedAmount = parts.join(decimalSeparator)
}
return formattedAmount
}
/**
* 格式化金额, 自动进万, 百万
* @param amount
* @param unit
*/
export function amountFriendlyFormat(amount, unit) {
const result = {
unit: '',
amount: Number(toFixedWithOutRounded(amount, 2)),
display: Number(toFixedWithOutRounded(amount, 2))
}
// 千万
if (amount >= 10000000 || unit === '千万') {
result.unit = '千万'
result.amount = Number(toFixedWithOutRounded(amount / 10000000, 0))
result.display = `${result.amount} 千万`
}
// 万
if (amount >= 10000 || unit === '万') {
result.unit = '万'
result.amount = Number(toFixedWithOutRounded(amount / 10000, 0))
result.display = `${result.amount}`
}
return result
}
/**
* sortBy
*/
export function sortBy(arr, key) {
return arr.sort(function(a, b) {
return a[key] - b[key]
})
}
/**
* 获取今天星期几
*/
export function getWeek() {
let week = new Date().getDay()
switch (week) {
case 0:
return '星期日'
case 1:
return '星期一'
case 2:
return '星期二'
case 3:
return '星期三'
case 4:
return '星期四'
case 5:
return '星期五'
case 6:
return '星期六'
}
}