import { get, post } from './axios'
import config from './config'
const common = {
aLinkDownload(url, fileName) {
const link = document.createElement('a')
link.style.display = 'none'
link.href = url
link.target = '_blank'
link.setAttribute('download', fileName)
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
},
formatTime(date, num) {
if (date) {
if (typeof (date) === 'number' || typeof (date) === 'object' || typeof (date) === 'string') {
date = new Date(date)
}
const year = date.getFullYear()
const month = (date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1
const day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
const hour = date.getHours() < 10 ? '0' + date.getHours() : date.getHours()
const minute = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
const second = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
switch (num) {
case 1:
return [year, month, day].join('-')
case 2:
return [year, month, day].join('/')
case 3:
return [year, month, day].join('-') + '' + [hour, minute, second].join(':')
case 4:
return [year, month, day].join('.')
case 5:
return [year, month, day].join('-') + ' ' + [hour, minute, second].join(':')
case 6:
return [month, day].join('-')
case 7:
return [year, month].join('-')
case 8:
return year
default:
return [year, month, day].join('-')
}
} else {
return ''
}
},
getDictionaryItems(code) {
const url = '/base/dictionaryItem/getDictionaryItemsByCode/' + code
return new Promise(function(resolve, reject) {
get(url).then(res => {
if (res.code == 0) {
resolve(res.data)
} else {
reject(res)
}
})
})
},
refreshToken() {
const refreshToken = window.localStorage.getItem('refreshToken')
const url = '/authentication/auth/refreshToken'
const ajaxData = {
refreshToken: refreshToken,
client: 'Basic c2VydmljZV9hY2NvdW50OjEyMzQ1Ng=='
}
return new Promise(function(resolve, reject) {
post(url, ajaxData).then(res => {
if (res) {
window.localStorage.setItem('token', res.data.accessToken)
window.localStorage.setItem('account', JSON.stringify(res.data.additionalInformation.currentUser))
resolve(1)
} else {
reject(-1)
}
})
})
},
getRoles() {
const url = '/base/mgmt-permissions/menu'
return new Promise(function(resolve, reject) {
get(url).then(res => {
if (res.code == 0) {
const json = {}
res.data.options = res.data.operations.map((item) => {
return item.code
})
const roles = res.data.menus
for (let i = 0; i < roles.length; i++) {
if (!json[roles[i].code]) {
json[roles[i].code] = roles[i].childList
}
}
json['case:-'].find(item => item.name === '材料清单管理').childList.push(
{
href: '/case/printingList',
name: '用印清单',
hasChildList: false,
menuLogo: ''
}
)
json['settlement-center:-'].find(item => item.name === '结算管理').childList.push(
{ href: '/settlementCenter/offCompensationSettlement', name: '客户赔偿款线下结算' }
)
json['settlement-center:-'].push(
{
name: '开票管理',
hasChildList: true,
href: '',
menuLogo: 'icon-post-01',
childList: [
{ href: '/invoicing/list/index', name: '开票列表', hasChildList: false, menuLogo: '' },
{ href: '/invoicing/approval/index', name: '开票审核', hasChildList: false, menuLogo: '' },
{ href: '/invoicing/end/index', name: '已开票', hasChildList: false, menuLogo: '' },
{ href: '/invoicing/template/index', name: '审核模板', hasChildList: false, menuLogo: '' }
]
})
res.data.roles = json
resolve(res.data)
} else {
reject(res)
}
}, err => {
reject(err)
})
})
},
cutString(str, num) {
if (!str) { return }
let returnStr
if (str.length > num) {
returnStr = str.substring(0, num) + '...'
} else {
returnStr = str
}
return returnStr
},
tm_status_class(status) {
if (status.indexOf('无效') !== -1) {
return 'tmstatus-invalid'
}
if (status.indexOf('等待') !== -1) {
return 'tmstatus-wait'
}
if (status.indexOf('异议') !== -1) {
return 'tmstatus-objection'
}
if (status.indexOf('公告') !== -1) {
return 'tmstatus-review'
}
return 'tmstatus-success'
},
sort_object(property) {
return function(obj1, obj2) {
var value1 = obj1[property]
var value2 = obj2[property]
return value1 - value2
}
},
formateNumber(data, unit, precision) {
const prec = precision || 2
const unitStr = unit === '' ? unit : '¥'
if (data === 0) { return unitStr + '0' }
if (data === '' || !data) { return '' }
const str = (typeof data === 'number' && !isNaN(data)) ? (data.toFixed(prec) + '') : data
const arr = str.split('.')
let formateStr = Number(arr[0]).toLocaleString()
if (arr[1]) {
formateStr += `.${arr[1]}`
} else {
formateStr += '.00'
}
return unitStr + formateStr
},
debounce(fn, delay) {
var timer = null
var delay = delay || 200
return function() {
var args = arguments
var that = this
clearTimeout(timer)
timer = setTimeout(function() {
fn.apply(that, args)
}, delay)
}
},
throttle(fn, delay) {
var lastTime
var timer
var delay = delay || 200
return function() {
var args = arguments
var nowTime = Date.now()
if (lastTime && nowTime - lastTime < delay) {
clearTimeout(timer)
timer = setTimeout(function () {
lastTime = nowTime
fn.apply(this, args)
}, delay)
} else {
lastTime = nowTime
fn.apply(this, args)
}
}
},
strMapArr(obj) {
const arrKey = []; const arr = []
for (const key in obj) {
arrKey.push(key)
}
if (!obj[arrKey[0]]) {
return []
}
let json = {}
const len = obj[arrKey[0]].split(',').length
for (let i = 0; i < len; i++) {
json = {}
arrKey.forEach(item => {
json[item] = obj[item].split(',')[i]
if (typeof Number(json[item]) === 'number' && !isNaN(Number(json[item]))) {
json[item] = Number(json[item])
}
})
arr.push(json)
}
return arr
},
getFileType(mediaType) {
if (mediaType.indexOf('image') != -1) {
return 'image'
} else if (mediaType.indexOf('.document') != -1 ||
mediaType.indexOf('msword') != -1 ||
mediaType.indexOf('.sheet') != -1 ||
mediaType.indexOf('.ms-excel') != -1 ||
mediaType.indexOf('pdf') != -1 ||
mediaType.indexOf('text/plain') != -1 ||
mediaType.indexOf('powerpoint') != -1 ||
mediaType.indexOf('presentation') != -1) {
return 'wps'
} else {
return 'other'
}
},
toChinesNum(money) {
const cnNums = new Array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖')
const cnIntRadice = new Array('', '拾', '佰', '仟')
const cnIntUnits = new Array('', '万', '亿', '兆')
const cnDecUnits = new Array('角', '分', '毫', '厘')
const cnInteger = '整'
const cnIntLast = '圆'
const maxNum = 999999999999999.9999
let integerNum
let decimalNum
let chineseStr = ''
let parts
if (money === '') { return '' }
money = parseFloat(money)
if (money >= maxNum) { return '' }
if (money === 0) {
chineseStr = cnNums[0] + cnIntLast + cnInteger
return chineseStr
}
money = money.toString()
if (money.indexOf('.') == -1) {
integerNum = money
decimalNum = ''
} else {
parts = money.split('.')
integerNum = parts[0]
decimalNum = parts[1].substr(0, 4)
}
if (parseInt(integerNum, 10) > 0) {
let zeroCount = 0
const IntLen = integerNum.length
for (let i = 0; i < IntLen; i++) {
const n = integerNum.substr(i, 1)
const p = IntLen - i - 1
const q = p / 4
const m = p % 4
if (n == '0') {
zeroCount++
} else {
if (zeroCount > 0) {
chineseStr += cnNums[0]
}
zeroCount = 0
chineseStr += cnNums[parseInt(n)] + cnIntRadice[m]
}
if (m == 0 && zeroCount < 4) {
chineseStr += cnIntUnits[q]
}
}
chineseStr += cnIntLast
}
if (decimalNum != '') {
const decLen = decimalNum.length
for (let i = 0; i < decLen; i++) {
const n = decimalNum.substr(i, 1)
if (n != '0') {
chineseStr += cnNums[Number(n)] + cnDecUnits[i]
}
}
}
if (chineseStr == '') {
chineseStr += cnNums[0] + cnIntLast + cnInteger
} else if (decimalNum == '') {
chineseStr += cnInteger
}
return chineseStr
},
removeDuplication(arr, prop) {
const json = {}; const list = []
arr.map(item => {
const key = prop ? item[prop] : item
if (!json[key]) {
json[key] = 1
list.push(item)
} else {
json[key]++
}
})
return list
},
getCookie(key) {
const arr = document.cookie.replace(/\s/g, '').split(';')
for (var i = 0; i < arr.length; i++) {
var tempArr = arr[i].split('=')
if (tempArr[0] == key) {
return decodeURIComponent(tempArr[1])
}
}
return ''
},
getPublicUrl(key) {
const url = '/base/cos/presigned-url/ap-guangzhou/' + config.uploadPrivateUrl + '?keys=' + key
return new Promise(function(resolve, reject) {
get(url).then(res => {
if (res.code == 0) {
const pubUrl = res.data[0]
resolve(pubUrl)
}
})
})
},
handleSummary ({ columns, data }) {
const sums = {}
columns.forEach((column, index) => {
const key = column.key
if (columns[0].type == 'selection') {
if (index === 1) {
sums[key] = {
key,
value: '合计:'
}
return
}
} else {
if (index === 0) {
sums[key] = {
key,
value: '合计:'
}
return
}
}
const values = data.map(item => Number(item[key]))
if (!values.every(value => isNaN(value)) && key != 'caseNo') {
const v = values.reduce((prev, curr) => {
const value = Number(curr)
if (!isNaN(value)) {
return prev + curr
} else {
return prev
}
}, 0)
sums[key] = {
key,
value: common.formateNumber(v)
}
} else {
sums[key] = {
key,
value: '--'
}
}
})
return sums
},
unitConversion(num) {
const number = (num / 10000)
return Math.round(number * 100) / 100
},
transformPercentage(num) {
const number = (Math.abs(num) * 100)
return Math.round(number * 100) / 100 + '%'
}
}
export default common