xianniu-ui 0.1.3 → 0.1.4

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.
Files changed (81) hide show
  1. package/lib/style/basic.css +1 -0
  2. package/lib/style/city.css +1 -0
  3. package/lib/style/date.css +1 -0
  4. package/lib/style/flex.css +1 -0
  5. package/lib/style/import.css +1 -0
  6. package/lib/style/index.css +1 -1
  7. package/{src → lib/style}/theme/element-variables.scss +2 -4
  8. package/{src → lib/style}/theme/index.scss +0 -0
  9. package/{src → lib/style}/theme/mixin.scss +0 -0
  10. package/{src → lib/style}/theme/sidebar.scss +0 -0
  11. package/lib/style/theme/theme.scss +4 -0
  12. package/{src → lib/style}/theme/transition.scss +0 -0
  13. package/{src → lib/style}/theme/variables.scss +0 -0
  14. package/lib/style/upload.css +1 -0
  15. package/lib/xianniu-ui.common.js +25504 -18072
  16. package/lib/xianniu-ui.css +1 -0
  17. package/lib/xianniu-ui.umd.js +25508 -18076
  18. package/lib/xianniu-ui.umd.min.js +1 -9
  19. package/package.json +63 -62
  20. package/packages/city/index.js +7 -0
  21. package/packages/city/main.vue +258 -0
  22. package/packages/date/index.js +7 -0
  23. package/packages/date/main.vue +348 -0
  24. package/packages/dialog/!main.vue +90 -0
  25. package/packages/dialog/main.vue +37 -57
  26. package/packages/drawer/index.js +7 -0
  27. package/packages/drawer/main.vue +65 -0
  28. package/packages/empty/index.js +7 -0
  29. package/packages/empty/main.vue +33 -0
  30. package/packages/export/index.js +7 -0
  31. package/packages/export/main.vue +99 -0
  32. package/packages/import/index.js +7 -0
  33. package/packages/import/main.vue +135 -0
  34. package/packages/inputRange/index.js +7 -0
  35. package/packages/inputRange/main.vue +15 -0
  36. package/packages/page/main.vue +5 -5
  37. package/packages/search/index.js +7 -0
  38. package/packages/search/main.vue +230 -0
  39. package/packages/style/lib/basic.css +1 -0
  40. package/packages/style/lib/city.css +1 -0
  41. package/packages/style/lib/date.css +1 -0
  42. package/packages/style/lib/flex.css +1 -0
  43. package/packages/style/lib/import.css +1 -0
  44. package/packages/style/lib/index.css +1 -1
  45. package/packages/style/lib/upload.css +1 -0
  46. package/packages/style/src/basic.scss +64 -0
  47. package/packages/style/src/city.scss +3 -0
  48. package/packages/style/src/date.scss +5 -0
  49. package/packages/style/src/flex.scss +74 -0
  50. package/packages/style/src/import.scss +37 -0
  51. package/packages/style/src/index.scss +9 -1
  52. package/packages/style/src/mixin/mixin.scss +270 -0
  53. package/packages/style/src/search.scss +17 -0
  54. package/packages/style/src/table.scss +36 -4
  55. package/packages/style/src/theme/element-variables.scss +26 -0
  56. package/packages/style/src/theme/index.scss +1 -0
  57. package/packages/style/src/theme/mixin.scss +270 -0
  58. package/packages/style/src/theme/sidebar.scss +271 -0
  59. package/packages/style/src/theme/theme.scss +4 -0
  60. package/packages/style/src/theme/transition.scss +52 -0
  61. package/packages/style/src/theme/variables.scss +36 -0
  62. package/packages/style/src/tip.scss +22 -0
  63. package/packages/style/src/tree.scss +87 -0
  64. package/packages/style/src/upload.scss +46 -0
  65. package/packages/table/column.vue +42 -23
  66. package/packages/table/main.vue +126 -35
  67. package/packages/tip/index.js +7 -0
  68. package/packages/tip/main.vue +22 -0
  69. package/packages/tree/index.js +7 -0
  70. package/packages/tree/main.vue +192 -0
  71. package/packages/upload/index.js +7 -0
  72. package/packages/upload/main.vue +346 -0
  73. package/packages/upload/upload-pop.vue +49 -0
  74. package/packages/upload/upload-slot.vue +0 -0
  75. package/src/index.js +23 -3
  76. package/src/plugins/index.js +1 -1
  77. package/src/utils/format.js +119 -106
  78. package/src/utils/index.js +0 -2
  79. package/src/utils/reg.js +7 -1
  80. package/src/utils/utils.js +76 -10
  81. package/src/utils/lodash.js +0 -2
@@ -6,117 +6,130 @@
6
6
  * @param {String} thousands_sep 千分位符号
7
7
  * @returns
8
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)}`
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
- * @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] }
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// 当前数字位数 除以 40余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
- moneyCNString += integerLastUnit// 整数部分结束后 拼接上整数部分单位 元
100
+ // 如果当前数字所在位数取余4等于0时,那么除以4一定是整数,并且记录的零的个数小于4个,则拼接当前位数对应的高级单位
101
+ if (m === 0 && zeroCount < 4) { moneyCNString += numberHighUnit[q] }
104
102
  }
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
- }
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
- return moneyCNString
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
- export default {
120
- toText:priceToText,
121
- toCN:priceToUpperCase
122
- }
131
+ export default {
132
+ toText: priceToText,
133
+ toCN: priceToUpperCase,
134
+ bytesToSize
135
+ }
@@ -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
@@ -4,17 +4,83 @@
4
4
  * @returns Boolean
5
5
  */
6
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;
7
+ if (val) {
8
+ if (val instanceof Array) {
9
+ return val.length == 0;
15
10
  }
16
- return true
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
- isEmpty
82
+ isEmpty,
83
+ isImg,
84
+ deepClone,
85
+ download
20
86
  }
@@ -1,2 +0,0 @@
1
- import lodash from 'lodash'
2
- export default lodash