xianniu-ui 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/lib/demo.html +10 -0
- package/lib/style/index.css +1 -0
- package/lib/style/page.css +1 -0
- package/lib/style/table.css +1 -0
- package/lib/xn-ui.common.js +20159 -0
- package/lib/xn-ui.umd.js +20169 -0
- package/lib/xn-ui.umd.min.js +9 -0
- package/package.json +62 -0
- package/packages/dialog/index.js +7 -0
- package/packages/dialog/main.vue +123 -0
- package/packages/page/index.js +7 -0
- package/packages/page/main.vue +100 -0
- package/packages/style/lib/index.css +1 -0
- package/packages/style/lib/page.css +1 -0
- package/packages/style/lib/table.css +1 -0
- package/packages/style/package.json +22 -0
- package/packages/style/src/index.scss +2 -0
- package/packages/style/src/page.scss +7 -0
- package/packages/style/src/table.scss +9 -0
- package/packages/table/column.vue +111 -0
- package/packages/table/index.js +7 -0
- package/packages/table/main.vue +104 -0
- package/public/favicon.ico +0 -0
- package/public/index.html +18 -0
- package/src/area/index.js +12890 -0
- package/src/index.js +44 -0
- package/src/plugins/index.js +6 -0
- package/src/theme/element-variables.scss +28 -0
- package/src/theme/index.scss +1 -0
- package/src/theme/mixin.scss +270 -0
- package/src/theme/sidebar.scss +271 -0
- package/src/theme/transition.scss +52 -0
- package/src/theme/variables.scss +36 -0
- package/src/utils/dayjs.js +2 -0
- package/src/utils/format.js +122 -0
- package/src/utils/index.js +21 -0
- package/src/utils/lodash.js +2 -0
- package/src/utils/package.json +8 -0
- package/src/utils/reg.js +8 -0
- package/src/utils/scroll-to.js +59 -0
- package/src/utils/storage.js +2 -0
- package/src/utils/utils.js +20 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 格式化金额
|
|
3
|
+
* @param {Number} number 要格式化的数字
|
|
4
|
+
* @param {Number} decimals 保留几位小数
|
|
5
|
+
* @param {String} dec_point 小数点符号
|
|
6
|
+
* @param {String} thousands_sep 千分位符号
|
|
7
|
+
* @returns
|
|
8
|
+
*/
|
|
9
|
+
const priceToText = (number, decimals = 2, dec_point = '.', thousands_sep = ',', symbol = '¥') => {
|
|
10
|
+
number = (number + '').replace(/[^0-9+-Ee.]/g, '')
|
|
11
|
+
var n = !isFinite(+number) ? 0 : +number
|
|
12
|
+
var prec = !isFinite(+decimals) ? 0 : Math.abs(decimals)
|
|
13
|
+
var sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep
|
|
14
|
+
var dec = (typeof dec_point === 'undefined') ? '.' : dec_point
|
|
15
|
+
var s = ''
|
|
16
|
+
var toFixedFix = function(n, prec) {
|
|
17
|
+
var k = Math.pow(10, prec)
|
|
18
|
+
return '' + Math.round(n * k) / k
|
|
19
|
+
}
|
|
20
|
+
s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.')
|
|
21
|
+
var re = /(-?\d+)(\d{3})/
|
|
22
|
+
while (re.test(s[0])) {
|
|
23
|
+
s[0] = s[0].replace(re, '$1' + sep + '$2')
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if ((s[1] || '').length < prec) {
|
|
27
|
+
s[1] = s[1] || ''
|
|
28
|
+
s[1] += new Array(prec - s[1].length + 1).join('0')
|
|
29
|
+
}
|
|
30
|
+
return `${symbol}${s.join(dec)}`
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 金额转大写
|
|
34
|
+
* @param {Number} money
|
|
35
|
+
* @returns
|
|
36
|
+
*/
|
|
37
|
+
const priceToUpperCase = function(money) {
|
|
38
|
+
if (!money) { return '' }
|
|
39
|
+
// 数字的汉字数组
|
|
40
|
+
const numberCNList = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
|
|
41
|
+
// 数字的基础单位汉字数组
|
|
42
|
+
const numberBaseUnit = ['', '拾', '佰', '仟']
|
|
43
|
+
// 数字的高级单位汉字数组
|
|
44
|
+
const numberHighUnit = ['', '万', '亿', '兆']// 一兆等于一万亿
|
|
45
|
+
// 小数部分单位汉字数组
|
|
46
|
+
const floatUnit = ['角', '分', '毫', '厘']
|
|
47
|
+
// 整数金额时后面跟的字符
|
|
48
|
+
const integerLastCN = '整'
|
|
49
|
+
// 整数后的单位汉字
|
|
50
|
+
const integerLastUnit = '元'
|
|
51
|
+
// 最大处理的数字
|
|
52
|
+
const maxNum = 999999999999999.9999
|
|
53
|
+
// 以小数点拆分金额产生的数组
|
|
54
|
+
let decimalPointSplitList
|
|
55
|
+
// 金额整数部分
|
|
56
|
+
let integerNum
|
|
57
|
+
// 金额小数部分
|
|
58
|
+
let decimalNum
|
|
59
|
+
// 返回的大写金额
|
|
60
|
+
let moneyCNString = ''
|
|
61
|
+
money = parseFloat(money)// 转为数字
|
|
62
|
+
if (typeof money !== 'number' || isNaN(money)) { this.$message('检测到非数字字符'); return '' }
|
|
63
|
+
// 超出最大处理数字
|
|
64
|
+
if (money >= maxNum) { this.$message('超出最大处理数字'); return '' }
|
|
65
|
+
// 等于0时 返回零元整
|
|
66
|
+
if (money === 0) {
|
|
67
|
+
moneyCNString = numberCNList[0] + integerLastUnit + integerLastCN
|
|
68
|
+
return moneyCNString
|
|
69
|
+
}
|
|
70
|
+
// 转换为字符串
|
|
71
|
+
money = money.toString()
|
|
72
|
+
/** ****金额数字的处理,转为字符串,判断有没有小数位,获取整数部分和小数部分*******/
|
|
73
|
+
if (money.indexOf('.') === -1) { // 如果没有小数点
|
|
74
|
+
integerNum = money// money就都等于整数部分,小数部分为空
|
|
75
|
+
decimalNum = ''
|
|
76
|
+
} else { // 有小数点
|
|
77
|
+
decimalPointSplitList = money.split('.')// 以小数点拆分数组
|
|
78
|
+
if (decimalPointSplitList[1].length > 4) this.$message('金额精确仅支持到厘')
|
|
79
|
+
integerNum = decimalPointSplitList[0]// 整数部分
|
|
80
|
+
decimalNum = decimalPointSplitList[1].substr(0, 4)// 小数部分只支持4位
|
|
81
|
+
}
|
|
82
|
+
/** ****整数部分处理*******/
|
|
83
|
+
if (parseInt(integerNum, 10) > 0) { // 以十进制转为int类型 大于零
|
|
84
|
+
let zeroCount = 0// 记录零的个数
|
|
85
|
+
for (let i = 0; i < integerNum.length; i++) {
|
|
86
|
+
const p = integerNum.length - 1 - i// 当前数字的位数, 比如10000 ,1的位数是4 , 10001000,第一个1的位数是7,第二个1的位数是3
|
|
87
|
+
// console.log(p, integerNum[i])
|
|
88
|
+
const q = p / 4// 当前数字位数 除以 4 商0余1,则值为0,控制其高级单位
|
|
89
|
+
const m = p % 4// 取余,比如1%4 商0余1 ,则值为1, 控制其基础单位
|
|
90
|
+
// 如果当前数字等于零 则++
|
|
91
|
+
if (integerNum[i] === '0') { zeroCount++ } else {
|
|
92
|
+
// 否则当前数字不等于零时
|
|
93
|
+
// 如果记录的零的个数大于0 返回结果中加一个汉字零
|
|
94
|
+
if (zeroCount > 0) { moneyCNString += numberCNList[0] }
|
|
95
|
+
// 把零的个数归零,重新计算零的个数
|
|
96
|
+
zeroCount = 0
|
|
97
|
+
// 然后把返回结果 加上 当前数字的汉字以及其基础单位
|
|
98
|
+
moneyCNString += numberCNList[parseInt(integerNum[i])] + numberBaseUnit[m]
|
|
99
|
+
}
|
|
100
|
+
// 如果当前数字所在位数取余4等于0时,那么除以4一定是整数,并且记录的零的个数小于4个,则拼接当前位数对应的高级单位
|
|
101
|
+
if (m === 0 && zeroCount < 4) { moneyCNString += numberHighUnit[q] }
|
|
102
|
+
}
|
|
103
|
+
moneyCNString += integerLastUnit// 整数部分结束后 拼接上整数部分单位 元
|
|
104
|
+
}
|
|
105
|
+
/** ****小数部分处理 --- 小数部分只考虑是否有值,以及当前值所在单位,没有零的概念,所以只需拼接当前值对应的汉字,以及当前值的单位即可*******/
|
|
106
|
+
if (decimalNum !== '') {
|
|
107
|
+
for (let i = 0; i < decimalNum.length; i++) {
|
|
108
|
+
if (decimalNum[i] !== '0') { // 如果当前数字不等于零 则加上当前数字的汉字 以及 其小数单位
|
|
109
|
+
moneyCNString += numberCNList[Number(decimalNum[i])] + floatUnit[i]
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
} else { // 如果没有小数部分则加上汉字 整
|
|
113
|
+
moneyCNString += integerLastCN
|
|
114
|
+
}
|
|
115
|
+
return moneyCNString
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
export default {
|
|
120
|
+
toText:priceToText,
|
|
121
|
+
toCN:priceToUpperCase
|
|
122
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
|
|
2
|
+
import reg from './reg'
|
|
3
|
+
import format from './format'
|
|
4
|
+
import dayjs from './dayjs'
|
|
5
|
+
import storage from './storage'
|
|
6
|
+
import lodash from './lodash'
|
|
7
|
+
import utils from './utils'
|
|
8
|
+
|
|
9
|
+
const version = () => {
|
|
10
|
+
return `xianniu-tools@${require('./package.json').version}`
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export default {
|
|
14
|
+
version,
|
|
15
|
+
$reg: reg,
|
|
16
|
+
$format: format,
|
|
17
|
+
$dayjs: dayjs,
|
|
18
|
+
$storage: storage,
|
|
19
|
+
$lodash: lodash,
|
|
20
|
+
$utils: utils
|
|
21
|
+
}
|
package/src/utils/reg.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
Math.easeInOutQuad = function(t, b, c, d) {
|
|
2
|
+
t /= d / 2
|
|
3
|
+
if (t < 1) {
|
|
4
|
+
return c / 2 * t * t + b
|
|
5
|
+
}
|
|
6
|
+
t--
|
|
7
|
+
return -c / 2 * (t * (t - 2) - 1) + b
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
// requestAnimationFrame for Smart Animating http://goo.gl/sx5sts
|
|
11
|
+
var requestAnimFrame = (function() {
|
|
12
|
+
return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback) { window.setTimeout(callback, 1000 / 60) }
|
|
13
|
+
})()
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Because it's so fucking difficult to detect the scrolling element, just move them all
|
|
17
|
+
* @param {number} amount
|
|
18
|
+
*/
|
|
19
|
+
function move(amount) {
|
|
20
|
+
document.documentElement.scrollTop = amount
|
|
21
|
+
document.body.parentNode.scrollTop = amount
|
|
22
|
+
document.body.scrollTop = amount
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function position() {
|
|
26
|
+
return document.documentElement.scrollTop || document.body.parentNode.scrollTop || document.body.scrollTop
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @param {number} to
|
|
31
|
+
* @param {number} duration
|
|
32
|
+
* @param {Function} callback
|
|
33
|
+
*/
|
|
34
|
+
export function scrollTo(to, duration, callback) {
|
|
35
|
+
const start = position()
|
|
36
|
+
const change = to - start
|
|
37
|
+
const increment = 20
|
|
38
|
+
let currentTime = 0
|
|
39
|
+
duration = (typeof (duration) === 'undefined') ? 500 : duration
|
|
40
|
+
var animateScroll = function() {
|
|
41
|
+
// increment the time
|
|
42
|
+
currentTime += increment
|
|
43
|
+
// find the value with the quadratic in-out easing function
|
|
44
|
+
var val = Math.easeInOutQuad(currentTime, start, change, duration)
|
|
45
|
+
// move the document.body
|
|
46
|
+
move(val)
|
|
47
|
+
// do the animation unless its over
|
|
48
|
+
if (currentTime < duration) {
|
|
49
|
+
requestAnimFrame(animateScroll)
|
|
50
|
+
} else {
|
|
51
|
+
if (callback && typeof (callback) === 'function') {
|
|
52
|
+
// the animation is done so lets callback
|
|
53
|
+
callback()
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
animateScroll()
|
|
58
|
+
}
|
|
59
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 判断各种值是否为空
|
|
3
|
+
* @param {*} val
|
|
4
|
+
* @returns Boolean
|
|
5
|
+
*/
|
|
6
|
+
const isEmpty = function (val) {
|
|
7
|
+
if (val) {
|
|
8
|
+
if (val instanceof Array) {
|
|
9
|
+
return val.length == 0;
|
|
10
|
+
}
|
|
11
|
+
if (val instanceof Object) {
|
|
12
|
+
return Object.keys(val).length == 0;
|
|
13
|
+
}
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
return true
|
|
17
|
+
}
|
|
18
|
+
export default {
|
|
19
|
+
isEmpty
|
|
20
|
+
}
|