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.
Files changed (43) hide show
  1. package/README.md +1 -0
  2. package/lib/demo.html +10 -0
  3. package/lib/style/index.css +1 -0
  4. package/lib/style/page.css +1 -0
  5. package/lib/style/table.css +1 -0
  6. package/lib/xn-ui.common.js +20159 -0
  7. package/lib/xn-ui.umd.js +20169 -0
  8. package/lib/xn-ui.umd.min.js +9 -0
  9. package/package.json +62 -0
  10. package/packages/dialog/index.js +7 -0
  11. package/packages/dialog/main.vue +123 -0
  12. package/packages/page/index.js +7 -0
  13. package/packages/page/main.vue +100 -0
  14. package/packages/style/lib/index.css +1 -0
  15. package/packages/style/lib/page.css +1 -0
  16. package/packages/style/lib/table.css +1 -0
  17. package/packages/style/package.json +22 -0
  18. package/packages/style/src/index.scss +2 -0
  19. package/packages/style/src/page.scss +7 -0
  20. package/packages/style/src/table.scss +9 -0
  21. package/packages/table/column.vue +111 -0
  22. package/packages/table/index.js +7 -0
  23. package/packages/table/main.vue +104 -0
  24. package/public/favicon.ico +0 -0
  25. package/public/index.html +18 -0
  26. package/src/area/index.js +12890 -0
  27. package/src/index.js +44 -0
  28. package/src/plugins/index.js +6 -0
  29. package/src/theme/element-variables.scss +28 -0
  30. package/src/theme/index.scss +1 -0
  31. package/src/theme/mixin.scss +270 -0
  32. package/src/theme/sidebar.scss +271 -0
  33. package/src/theme/transition.scss +52 -0
  34. package/src/theme/variables.scss +36 -0
  35. package/src/utils/dayjs.js +2 -0
  36. package/src/utils/format.js +122 -0
  37. package/src/utils/index.js +21 -0
  38. package/src/utils/lodash.js +2 -0
  39. package/src/utils/package.json +8 -0
  40. package/src/utils/reg.js +8 -0
  41. package/src/utils/scroll-to.js +59 -0
  42. package/src/utils/storage.js +2 -0
  43. 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
+ }
@@ -0,0 +1,2 @@
1
+ import lodash from 'lodash'
2
+ export default lodash
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "xn-tools",
3
+ "version": "0.1.0",
4
+ "description": "一些工具",
5
+ "main": "index.js",
6
+ "author": "liuzengwei",
7
+ "license": "MIT"
8
+ }
@@ -0,0 +1,8 @@
1
+
2
+ const Reg = {
3
+ checkPhone: /^1(3|4|5|6|7|8|9)\d{9}$/, // 校验手机号
4
+ checkPwd: /^[0-9A-Za-z]{8,20}$/, // 8-20位的字母和数字
5
+ checkNumber: /^[+-]?(0|([1-9]\d*))(?:\.\d{1,2})?$/g // 校验数字类型
6
+ }
7
+
8
+ export default Reg
@@ -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,2 @@
1
+ import storage from 'good-storage'
2
+ export default storage
@@ -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
+ }