xianniu-ui 0.1.3 → 0.1.5
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/lib/style/basic.css +1 -0
- package/lib/style/city.css +1 -0
- package/lib/style/date.css +1 -0
- package/lib/style/flex.css +1 -0
- package/lib/style/import.css +1 -0
- package/lib/style/index.css +1 -1
- package/lib/style/search.css +1 -0
- package/lib/style/table.css +1 -1
- package/{src → lib/style}/theme/element-variables.scss +2 -4
- package/{src → lib/style}/theme/index.scss +0 -0
- package/{src → lib/style}/theme/mixin.scss +0 -0
- package/{src → lib/style}/theme/sidebar.scss +0 -0
- package/lib/style/theme/theme.scss +4 -0
- package/{src → lib/style}/theme/transition.scss +0 -0
- package/{src → lib/style}/theme/variables.scss +0 -0
- package/lib/style/tip.css +1 -0
- package/lib/style/tree.css +1 -0
- package/lib/style/upload.css +1 -0
- package/lib/xianniu-ui.common.js +25504 -18072
- package/lib/xianniu-ui.css +1 -0
- package/lib/xianniu-ui.umd.js +25508 -18076
- package/lib/xianniu-ui.umd.min.js +1 -9
- package/package.json +63 -62
- package/packages/city/index.js +7 -0
- package/packages/city/main.vue +258 -0
- package/packages/date/index.js +7 -0
- package/packages/date/main.vue +348 -0
- package/packages/dialog/!main.vue +90 -0
- package/packages/dialog/main.vue +37 -57
- package/packages/drawer/index.js +7 -0
- package/packages/drawer/main.vue +65 -0
- package/packages/empty/index.js +7 -0
- package/packages/empty/main.vue +33 -0
- package/packages/export/index.js +7 -0
- package/packages/export/main.vue +99 -0
- package/packages/import/index.js +7 -0
- package/packages/import/main.vue +135 -0
- package/packages/inputRange/index.js +7 -0
- package/packages/inputRange/main.vue +15 -0
- package/packages/page/main.vue +5 -5
- package/packages/search/index.js +7 -0
- package/packages/search/main.vue +230 -0
- package/packages/style/lib/basic.css +1 -0
- package/packages/style/lib/city.css +1 -0
- package/packages/style/lib/date.css +1 -0
- package/packages/style/lib/flex.css +1 -0
- package/packages/style/lib/import.css +1 -0
- package/packages/style/lib/index.css +1 -1
- package/packages/style/lib/search.css +1 -0
- package/packages/style/lib/table.css +1 -1
- package/packages/style/lib/tip.css +1 -0
- package/packages/style/lib/tree.css +1 -0
- package/packages/style/lib/upload.css +1 -0
- package/packages/style/src/basic.scss +64 -0
- package/packages/style/src/city.scss +3 -0
- package/packages/style/src/date.scss +5 -0
- package/packages/style/src/flex.scss +74 -0
- package/packages/style/src/import.scss +37 -0
- package/packages/style/src/index.scss +9 -1
- package/packages/style/src/mixin/mixin.scss +270 -0
- package/packages/style/src/search.scss +17 -0
- package/packages/style/src/table.scss +36 -4
- package/packages/style/src/theme/element-variables.scss +26 -0
- package/packages/style/src/theme/index.scss +1 -0
- package/packages/style/src/theme/mixin.scss +270 -0
- package/packages/style/src/theme/sidebar.scss +271 -0
- package/packages/style/src/theme/theme.scss +4 -0
- package/packages/style/src/theme/transition.scss +52 -0
- package/packages/style/src/theme/variables.scss +36 -0
- package/packages/style/src/tip.scss +26 -0
- package/packages/style/src/tree.scss +87 -0
- package/packages/style/src/upload.scss +46 -0
- package/packages/table/column.vue +42 -23
- package/packages/table/main.vue +126 -35
- package/packages/tip/index.js +7 -0
- package/packages/tip/main.vue +22 -0
- package/packages/tree/index.js +7 -0
- package/packages/tree/main.vue +192 -0
- package/packages/upload/index.js +7 -0
- package/packages/upload/main.vue +346 -0
- package/packages/upload/upload-pop.vue +49 -0
- package/packages/upload/upload-slot.vue +0 -0
- package/src/index.js +23 -3
- package/src/plugins/index.js +1 -1
- package/src/utils/format.js +119 -106
- package/src/utils/index.js +0 -2
- package/src/utils/reg.js +7 -1
- package/src/utils/utils.js +76 -10
- package/src/utils/lodash.js +0 -2
package/src/utils/format.js
CHANGED
|
@@ -6,117 +6,130 @@
|
|
|
6
6
|
* @param {String} thousands_sep 千分位符号
|
|
7
7
|
* @returns
|
|
8
8
|
*/
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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)}`
|
|
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
|
|
31
19
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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]
|
|
102
99
|
}
|
|
103
|
-
|
|
100
|
+
// 如果当前数字所在位数取余4等于0时,那么除以4一定是整数,并且记录的零的个数小于4个,则拼接当前位数对应的高级单位
|
|
101
|
+
if (m === 0 && zeroCount < 4) { moneyCNString += numberHighUnit[q] }
|
|
104
102
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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]
|
|
111
110
|
}
|
|
112
|
-
} else { // 如果没有小数部分则加上汉字 整
|
|
113
|
-
moneyCNString += integerLastCN
|
|
114
111
|
}
|
|
115
|
-
|
|
112
|
+
} else { // 如果没有小数部分则加上汉字 整
|
|
113
|
+
moneyCNString += integerLastCN
|
|
116
114
|
}
|
|
115
|
+
return moneyCNString
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* 格式化字节
|
|
120
|
+
*
|
|
121
|
+
*/
|
|
117
122
|
|
|
123
|
+
const bytesToSize = (bytes) => {
|
|
124
|
+
if (bytes === 0) return '0 B'
|
|
125
|
+
var k = 1024
|
|
126
|
+
const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
|
|
127
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k))
|
|
128
|
+
return (bytes / Math.pow(k, i)).toPrecision(3) + ' ' + sizes[i]
|
|
129
|
+
}
|
|
118
130
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
131
|
+
export default {
|
|
132
|
+
toText: priceToText,
|
|
133
|
+
toCN: priceToUpperCase,
|
|
134
|
+
bytesToSize
|
|
135
|
+
}
|
package/src/utils/index.js
CHANGED
|
@@ -3,7 +3,6 @@ import reg from './reg'
|
|
|
3
3
|
import format from './format'
|
|
4
4
|
import dayjs from './dayjs'
|
|
5
5
|
import storage from './storage'
|
|
6
|
-
import lodash from './lodash'
|
|
7
6
|
import utils from './utils'
|
|
8
7
|
|
|
9
8
|
const version = () => {
|
|
@@ -16,6 +15,5 @@ export default {
|
|
|
16
15
|
$format: format,
|
|
17
16
|
$dayjs: dayjs,
|
|
18
17
|
$storage: storage,
|
|
19
|
-
$lodash: lodash,
|
|
20
18
|
$utils: utils
|
|
21
19
|
}
|
package/src/utils/reg.js
CHANGED
|
@@ -2,7 +2,13 @@
|
|
|
2
2
|
const Reg = {
|
|
3
3
|
checkPhone: /^1(3|4|5|6|7|8|9)\d{9}$/, // 校验手机号
|
|
4
4
|
checkPwd: /^[0-9A-Za-z]{8,20}$/, // 8-20位的字母和数字
|
|
5
|
-
checkNumber: /^[+-]?(0|([1-9]\d*))(?:\.\d{1,2})?$/g // 校验数字类型
|
|
5
|
+
checkNumber: /^[+-]?(0|([1-9]\d*))(?:\.\d{1,2})?$/g, // 校验数字类型
|
|
6
|
+
checkTel: /[0-9-()()]{7,18}/,//座机号码
|
|
7
|
+
checkEmail: /\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/,// 邮箱
|
|
8
|
+
checkFullName: /^[\u4E00-\u9FA5A-Za-z0-9_]+$/, //中文、英文、数字包括下划线
|
|
9
|
+
positiveInteger: /^[1-9]\d*$/, // 正整数
|
|
10
|
+
twoDecimal: /(^[0-9]{1,20}$)|(^[0-9]{1,20}[.][0-9]{1,2}$)/, // 2位小数
|
|
11
|
+
text: /^[a-z\d\u4E00-\u9FA5]+$/i // 不含特殊字符和标点
|
|
6
12
|
}
|
|
7
13
|
|
|
8
14
|
export default Reg
|
package/src/utils/utils.js
CHANGED
|
@@ -4,17 +4,83 @@
|
|
|
4
4
|
* @returns Boolean
|
|
5
5
|
*/
|
|
6
6
|
const isEmpty = function (val) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
if (val instanceof Object) {
|
|
12
|
-
return Object.keys(val).length == 0;
|
|
13
|
-
}
|
|
14
|
-
return false;
|
|
7
|
+
if (val) {
|
|
8
|
+
if (val instanceof Array) {
|
|
9
|
+
return val.length == 0;
|
|
15
10
|
}
|
|
16
|
-
|
|
11
|
+
if (val instanceof Object) {
|
|
12
|
+
return Object.keys(val).length == 0;
|
|
13
|
+
}
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
return true
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 判断是否是图片格式
|
|
20
|
+
*/
|
|
21
|
+
const isImg = (filePath) => {
|
|
22
|
+
if (typeof filePath !== 'string' || !filePath) return
|
|
23
|
+
var strFilter = '.jpeg|.gif|.jpg|.png|.bmp|.pic|.svg|'
|
|
24
|
+
if (filePath.indexOf('.') > -1) {
|
|
25
|
+
var p = filePath.lastIndexOf('.')
|
|
26
|
+
var strPostfix = filePath.substring(p, filePath.length) + '|'
|
|
27
|
+
strPostfix = strPostfix.toLowerCase()
|
|
28
|
+
if (strFilter.indexOf(strPostfix) > -1) {
|
|
29
|
+
return true
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return false
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* 深拷贝
|
|
36
|
+
* @param {*} source
|
|
37
|
+
* @returns
|
|
38
|
+
*/
|
|
39
|
+
const deepClone = (source) => {
|
|
40
|
+
if (!source && typeof source !== 'object') {
|
|
41
|
+
throw new Error('error arguments', 'deepClone')
|
|
42
|
+
}
|
|
43
|
+
const targetObj = source.constructor === Array ? [] : {}
|
|
44
|
+
Object.keys(source).forEach(keys => {
|
|
45
|
+
if (source[keys] && typeof source[keys] === 'object') {
|
|
46
|
+
targetObj[keys] = deepClone(source[keys])
|
|
47
|
+
} else {
|
|
48
|
+
targetObj[keys] = source[keys]
|
|
49
|
+
}
|
|
50
|
+
})
|
|
51
|
+
return targetObj
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
*
|
|
56
|
+
* @param {object} params
|
|
57
|
+
* @param {string} name 文件名
|
|
58
|
+
* @param {string} url 文件地址
|
|
59
|
+
*/
|
|
60
|
+
const download = (params = { name: '', url: '' }) => {
|
|
61
|
+
const defaultParams = {
|
|
62
|
+
url: '',
|
|
63
|
+
name: '下载模板'
|
|
64
|
+
}
|
|
65
|
+
const _params = Object.assign(defaultParams, params)
|
|
66
|
+
const { url, name } = _params
|
|
67
|
+
var x = new XMLHttpRequest()
|
|
68
|
+
x.open('GET', url, true)
|
|
69
|
+
x.responseType = 'blob'
|
|
70
|
+
x.onload = function () {
|
|
71
|
+
// 会创建一个 DOMString,其中包含一个表示参数中给出的对象的URL。这个 URL 的生命周期和创建它的窗口中的 document 绑定。这个新的URL 对象表示指定的 File 对象或 Blob 对象。
|
|
72
|
+
var url = window.URL.createObjectURL(x.response)
|
|
73
|
+
var a = document.createElement('a')
|
|
74
|
+
a.href = url
|
|
75
|
+
a.download = name
|
|
76
|
+
a.click()
|
|
77
|
+
}
|
|
78
|
+
x.send()
|
|
17
79
|
}
|
|
80
|
+
|
|
18
81
|
export default {
|
|
19
|
-
|
|
82
|
+
isEmpty,
|
|
83
|
+
isImg,
|
|
84
|
+
deepClone,
|
|
85
|
+
download
|
|
20
86
|
}
|
package/src/utils/lodash.js
DELETED