efront 3.21.2 → 3.21.3

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.
@@ -0,0 +1,184 @@
1
+ var trim = function (a) {
2
+ return String(a).replace(/[\s\,]/g, '').replace(/^\+/, '').replace(/[mni]$/i, '');
3
+ };
4
+ var prepare = function (a) {
5
+ a = trim(a);
6
+ var neg = /^\-/.test(a);
7
+ if (neg) a = a.slice(1);
8
+ var [s1, s2 = ''] = a.split('.');
9
+ s2 = s2.replace(/0+$/, '');
10
+ return [neg, s1, s2];
11
+ };
12
+ var repeat = String.prototype.repeat || function (n) {
13
+ return new Array(n + 1).join(this);
14
+ };
15
+ var repeat0 = function (n) {
16
+ return repeat.call('0', n);
17
+ };
18
+ var split = function (s, n) {
19
+ var r = [];
20
+ var end = s.length;
21
+ while (end > n) {
22
+ r.push(s.slice(end - n, end));
23
+ end -= n;
24
+ }
25
+ r.push(s.slice(0, end));
26
+ return r;
27
+ };
28
+ var fixme = function (neg, res, nl) {
29
+ if (nl > 0) res = res.slice(0, res.length - nl) + "." + res.slice(res.length - nl).replace(/0+$/, '');
30
+ res = res.replace(/^0+(?!\.)/, '');
31
+ if (/^\./.test(res)) res = '0' + res;
32
+ if (neg) res = '-' + res;
33
+ return res.replace(/\.$/, '');
34
+ };
35
+ var fixde = function (numstr, fractionDigits, compare) {
36
+ var [neg, s1, s2] = prepare(numstr);
37
+ var frag = +s2.charAt(fractionDigits) > compare;
38
+ if (!frag && compare === 0) {
39
+ frag = s2.length > fractionDigits;
40
+ }
41
+ if (s2.length < fractionDigits) {
42
+ s2 += repeat0(fractionDigits - s2.length);
43
+ }
44
+ else {
45
+ s2 = s2.slice(0, fractionDigits);
46
+ }
47
+ var res = s1 + s2;
48
+ if (frag) {
49
+ res = BigNumber.add(res, 1);
50
+ }
51
+ if (fractionDigits > 0) res = res.slice(0, res.length - fractionDigits) + '.' + res.slice(res.length - fractionDigits);
52
+ if (/^\./.test(res)) res = "0" + res;
53
+ if (neg) res = '-' + res;
54
+ return res;
55
+ };
56
+ class BigNumber {
57
+ constructor(value) {
58
+ if (!this || this.constructor !== BigNumber) {
59
+ return new BigNumber(value);
60
+ }
61
+ this.value = value;
62
+ }
63
+ toString() {
64
+ return this.value;
65
+ };
66
+ add(bignumber) {
67
+ return new BigNumber(BigNumber.add(this.value, bignumber));
68
+ };
69
+ static round(numstr) {
70
+ return fixde(numstr, 0, 4);
71
+ }
72
+ static ceil(numstr) {
73
+ return fixde(numstr, 0, 0);
74
+ }
75
+ static floor(numstr) {
76
+ return fixde(numstr, 0, 9);
77
+ }
78
+ static fix(numstr, fractionDigits) {
79
+ fractionDigits = +fractionDigits || 0;
80
+ if (fractionDigits < 0 || fractionDigits > 100) {
81
+ throw new Error("小数位数只能是0和100之间的数字");
82
+ }
83
+ return fixde(numstr, fractionDigits, 4);
84
+ }
85
+ static add(numstr1, numstr2) {
86
+ var [neg1, s11, s12] = prepare(numstr1)
87
+ var [neg2, s21, s22] = prepare(numstr2)
88
+ var nl = 0;
89
+ if (s12.length < s22.length) {
90
+ nl = s22.length;
91
+ s12 += repeat0(nl - s12.length);
92
+ }
93
+ else if (s22.length < s12.length) {
94
+ nl = s12.length;
95
+ s22 += repeat0(nl - s22.length);
96
+ }
97
+ else {
98
+ nl = s12.length;
99
+ }
100
+ if (s11.length < s21.length) {
101
+ s11 = repeat0(s21.length - s11.length) + s11;
102
+ }
103
+ else if (s11.length > s21.length) {
104
+ s21 = repeat0(s11.length - s21.length) + s21;
105
+ }
106
+ numstr1 = s11 + s12;
107
+ numstr2 = s21 + s22;
108
+ var flag = 1;
109
+ if (neg1 ^ neg2) {
110
+ if (numstr1 > numstr2) {
111
+ neg = neg1;
112
+ }
113
+ else if (numstr1 < numstr2) {
114
+ neg = neg2;
115
+ [numstr1, numstr2] = [numstr2, numstr1];
116
+ }
117
+ flag = 0;
118
+ }
119
+ else {
120
+ var neg = neg1 && neg2;
121
+ }
122
+ var res = [];
123
+ var end = (numstr1.length / 15 | 0) * 15;
124
+ var rest = 0;
125
+ while (end >= 0) {
126
+ var s1 = numstr1.slice(end, end + 15);
127
+ var s2 = numstr2.slice(end, end + 15);
128
+ var s = +s1 + (flag ? +s2 : -s2) + rest;
129
+ if (s < 0) {
130
+ s = +("1" + repeat0(s1.length)) + s;
131
+ rest = -1;
132
+ }
133
+ else {
134
+ rest = 0;
135
+ }
136
+ s = s.toFixed(0);
137
+ if (s.length > s1.length) {
138
+ rest = 1;
139
+ res.push(s.slice(1))
140
+ }
141
+ else {
142
+ if (s.length < s1.length) s = repeat0(s1.length - s.length) + s;
143
+ res.push(s);
144
+ }
145
+ end -= 15;
146
+ }
147
+ if (rest) res.push(rest);
148
+ res = res.reverse().join('');
149
+ return fixme(neg, res, nl);
150
+ }
151
+ static prd(numstr1, numstr2) {
152
+ var [neg1, s11, s12] = prepare(numstr1);
153
+ var [neg2, s21, s22] = prepare(numstr2);
154
+ var d = s12.length + s22.length;
155
+ numstr1 = s11 + s12;
156
+ numstr2 = s21 + s22;
157
+ if (numstr1.length < numstr2.length) [numstr1, numstr2] = [numstr2, numstr1];
158
+ var ns1 = split(numstr1, 7);
159
+ var ns2 = split(numstr2, 7);
160
+ var res = [];
161
+ var i = 0;
162
+ for (var cx = 0, dx = ns1.length; cx < dx; cx++) {
163
+ var s1 = ns1[cx];
164
+ for (var cy = 0, dy = ns2.length; cy < dy; cy++) {
165
+ var s2 = ns2[cy];
166
+ var i = cx + cy;
167
+ var rest = +res[i] || 0;
168
+ var s = s1 * s2 + rest;
169
+ s = String(s);
170
+ if (s.length > 7) {
171
+ rest = +s.slice(0, s.length - 7);
172
+ res[i] = s.slice(s.length - 7);
173
+ res[i + 1] = (+res[i + 1] || 0) + rest;
174
+ }
175
+ else {
176
+ if (s.length < 7) s = repeat0(7 - s.length) + s;
177
+ res[i] = s;
178
+ }
179
+ }
180
+ }
181
+ res = res.reverse().join('');
182
+ return fixme(neg1 ^ neg2, res, d);
183
+ }
184
+ }
@@ -0,0 +1,51 @@
1
+ var testAdd = function (a, b, s) {
2
+ assert(BigNumber.add(a, b), s, `${a} + ${b}`);
3
+ };
4
+ var testPrd = function (a, b, s) {
5
+ assert(BigNumber.prd(a, b), s, `${a} * ${b}`);
6
+ };
7
+ testAdd(0x1fffffffffffff, 1, '9007199254740992');
8
+ testAdd(0x1fffffffffffff, 2, '9007199254740993');
9
+ testAdd(0x1fffffffffffff, 3, '9007199254740994');
10
+ testAdd(0x1fffffffffffff, 3, '9007199254740994');
11
+ testAdd("900719925474099.2", 0.1, '900719925474099.3');
12
+ testAdd("900719925474099.2", 0.1, '900719925474099.3');
13
+ testAdd("900719925474099.3", -0.2, '900719925474099.1');
14
+ testAdd("900719925474099.39007199254740992", "-900719925474099.39007199254740992", '0');
15
+ testAdd("900719925474099.39007199254740992", 0.2, '900719925474099.59007199254740992');
16
+ testAdd("900719925474099.39007199254740992", "-900719925474099.39007", '0.00000199254740992');
17
+ testAdd("90071992547409939007.199254740992", 0.2, '90071992547409939007.399254740992');
18
+ testAdd("-90071992547409939007.199254740992", 0.2, '-90071992547409939006.999254740992');
19
+ var getrandomint = function () {
20
+ var n = BigInt(Math.random() * new Date | 0) * BigInt(Math.random() * new Date | 0) * BigInt(Math.random() * new Date | 0);
21
+ return n;
22
+ }
23
+ testPrd(1, 2, '2');
24
+ testPrd(1, 0.2, '0.2');
25
+ testPrd("9007199254740992.1", 0.1, '900719925474099.21');
26
+ testPrd("9007199254740992.1", 0.01, '90071992547409.921');
27
+ for (var cx = 0, dx = 1000; cx < dx; cx++) {
28
+ var n1 = getrandomint();
29
+ var n2 = getrandomint();
30
+ var s = String(n1 + n2);
31
+ testAdd(n1, n2, s);
32
+ testPrd(n1, n2, String(n1 * n2));
33
+ }
34
+ assert(BigNumber.fix(2, 2), '2.00');
35
+ assert(BigNumber.fix(2.234, 6), '2.234000');
36
+ assert(BigNumber.fix(2.235, 6), '2.235000');
37
+ assert(BigNumber.fix(2.235, 2), '2.24');
38
+ assert(BigNumber.fix(2.234, 2), '2.23');
39
+ assert(BigNumber.fix(2.2351, 2), '2.24');
40
+ assert(BigNumber.fix(2.2349, 2), '2.23');
41
+ assert(BigNumber.round(2.2349), '2');
42
+ assert(BigNumber.round(2.4999), '2');
43
+ assert(BigNumber.round(2.5000), '3');
44
+ assert(BigNumber.round(2.5100), '3');
45
+ assert(BigNumber.ceil(2.5100), '3');
46
+ assert(BigNumber.ceil(2.000), '2');
47
+ assert(BigNumber.floor(2.000), '2');
48
+ assert(BigNumber.floor(2.999), '2');
49
+ assert(BigNumber.ceil(2.001), '3');
50
+ assert(BigNumber.ceil(2.999), '3');
51
+ assert(BigNumber.fix("9007199254740992.234", 6), '9007199254740992.234000');
@@ -58,6 +58,18 @@ function toResponse() {
58
58
  if (this.responseType === 'json') return JSON.stringify(this.response);
59
59
  return this.response;
60
60
  }
61
+ /**
62
+ * @this {XMLHttpRequest}
63
+ */
64
+ var XMLHttpRequest_abort = function () {
65
+ removeFromList(requests, this);
66
+ delete this.abort;
67
+ if (isFunction(this.abort)) this.abort(this);
68
+ };
69
+ /**
70
+ * @param { () => XMLHttpRequest } jsonp
71
+ * @this { () => XMLHttpRequest }
72
+ */
61
73
  function cross_(jsonp, digest = noop, method, url, headers) {
62
74
  var originDomain = getDomainPath(url);
63
75
  if (!originDomain) throw new Error("路径格式错误!");
@@ -326,11 +338,7 @@ function cross_(jsonp, digest = noop, method, url, headers) {
326
338
  onerrors.push(oh);
327
339
  flush();
328
340
  };
329
- var abort = xhr.abort;
330
- xhr.abort = function () {
331
- removeFromList(requests, this);
332
- if (isFunction(abort)) abort.call(this);
333
- };
341
+ xhr.abort = XMLHttpRequest_abort;
334
342
  xhr.delCookies = function () {
335
343
  delCookies(originDomain);
336
344
  xhr.nocookie = true;
@@ -394,8 +402,7 @@ cross_.bind = function () {
394
402
  extend(cross_, {
395
403
  requests,
396
404
  abortAll() {
397
- var rs = requests.splice(0, requests.length);
398
- for (var r of rs) r.abort();
405
+ for (var r of requests) r.abort();
399
406
  },
400
407
  setHost,
401
408
  addReform,
@@ -21,6 +21,25 @@ function submit(fields, data) {
21
21
  }
22
22
  else {
23
23
  params[f.key] = data[f.key];
24
+ var tmp = /\:(\d+)?(?:\.(\d+))?$/.exec(f.type);
25
+ if (tmp) var [, , fixed] = tmp;
26
+ else if (/^(money|price)$/i.test(f.type)) fixed = 2;
27
+ fixed = +fixed;
28
+ if (fixed) {
29
+ var v = params[f.key];
30
+ if (v) {
31
+ var d = v.replace(/^[^\.]*\.?/, '').length;
32
+ if (d === v.length - 1) v = "0" + v;
33
+ if (d > 0 && d < fixed) {
34
+ v = v + new Array(fixed + 1 - d).join("0");
35
+ }
36
+ else if (d === 0) {
37
+ v = v.replace(/\.$/, '') + '.' + new Array(fixed + 1).join("0");
38
+ }
39
+ params[f.key] = v;
40
+ }
41
+ }
42
+
24
43
  }
25
44
  }
26
45
  if (checks.length + select.length + inputs.length) {
@@ -6,6 +6,27 @@ function valid(field, data) {
6
6
  }
7
7
  return;
8
8
  }
9
+ var tmp;
10
+ if (tmp = /\:(\d+)(?:\.(\d+))?$/.exec(field.type)) {
11
+ var [, a, b] = tmp;
12
+ var value = data[field.key];
13
+ a = +a;
14
+ b = +b;
15
+ if (a) {
16
+ if (!b) {
17
+ if (value.length > a) return `不能超过${a}个字符`;
18
+ }
19
+ else {
20
+ if (value.replace(/\.[\s\S]*$/, '').length > a) return `整数部分不能超过${a}位`;
21
+ }
22
+ }
23
+ if (b) {
24
+ var digits = value.replace(/^[^\.]+\./, '');
25
+ if (digits.length > b) {
26
+ return `小数部分不能超过${b}位`;
27
+ }
28
+ }
29
+ }
9
30
  if (field.valid instanceof Function) {
10
31
  var e = field.valid(data[field.key]);
11
32
  if (e) return e;
@@ -0,0 +1,34 @@
1
+ <div class="head">
2
+ 扫码支付
3
+ <close @click="closeView()"></close>
4
+ </div>
5
+ <div class="body">
6
+ <item>
7
+ <label>原始价格:</label>
8
+ <span v-model="(+price).toFixed(2)"></span>元
9
+ </item>
10
+ <item>
11
+ <label>支付渠道:</label>
12
+ <select ng-model="paytype">
13
+ <option disabled value="0">请选择</option>
14
+ <option v-repeat="(o,i) in paytypes" icon_=o.icon value_="i+1" -html="o.name"></option>
15
+ <!-- <option icon="/page/weixin.ico" value="2">微信</option> -->
16
+ </select>
17
+ </item>
18
+ <item>
19
+ <label>渠道费:</label>
20
+ <span b-bind="waycost"></span>元
21
+ </item>
22
+ <item ng-if="+paytype">
23
+ <label>应支付:</label>
24
+ <span style="color: red;">
25
+ <span v-model=finalpay></span>元
26
+ </span>
27
+ </item>
28
+ <item ng-if="+paytype">
29
+ <iframe _src="paysite" allowtransparency="true" scrolling="no">
30
+ </iframe>
31
+ </item>
32
+ <item>
33
+ </item>
34
+ </div>
@@ -0,0 +1,50 @@
1
+ var paytype = data.getInstance("paytype");
2
+ function main(paytypes, price) {
3
+ var page = view();
4
+ page.innerHTML = payment;
5
+ renderWithDefaults(page, {
6
+ get paytype() {
7
+ return paytype.value;
8
+ },
9
+ set paytype(value) {
10
+ data.patchInstance("paytype", { value }, true);
11
+ },
12
+
13
+ get waycost() {
14
+ var pay = this.paytypes[this.paytype - 1];
15
+ if (!pay) return 0;
16
+ var cost = pay.cost;
17
+ if (isFunction(cost)) cost = cost.call(pay, price);
18
+ return BigNumber.fix(cost, 2);
19
+ },
20
+ get paysite() {
21
+ var pay = this.paytypes[this.paytype - 1];
22
+ if (!pay) return 'about:blank';
23
+ var url = pay.url;
24
+ if (isFunction(url)) url = url.call(pay, this.finalpay);
25
+ else if (url) url += this.finalpay;
26
+ return url;
27
+ },
28
+ get finalpay() {
29
+ return BigNumber.fix(BigNumber.add(this.price, this.waycost), 2);
30
+ },
31
+ paytypes,
32
+ price,
33
+ closeView() {
34
+ remove(page);
35
+ },
36
+ });
37
+ drag.on(page.firstChild, page);
38
+ resize.on(page);
39
+ data.bindInstance("paytype", function (type) {
40
+ console.log(type)
41
+ });
42
+ var frame = page.querySelector("iframe");
43
+ on("mounted")(frame, function () {
44
+ frame.contentWindow.onmessage = function (e) {
45
+ var id = e.data;
46
+ cast(page, 'payment', id);
47
+ };
48
+ });
49
+ return page;
50
+ }
@@ -0,0 +1,35 @@
1
+ & {
2
+ border: 1px solid #000;
3
+ position: absolute;
4
+ }
5
+
6
+ label {
7
+ display: inline-block;
8
+ padding: 0 16px 0 0;
9
+ }
10
+
11
+ >.head {
12
+ -webkit-app-region: no-drag;
13
+ }
14
+
15
+ .body {
16
+ item {
17
+ display: block;
18
+ padding: 0 16px;
19
+ }
20
+
21
+ iframe {
22
+ width: 256px;
23
+ height: 256px;
24
+ overflow: hidden;
25
+ border: none;
26
+ display: block;
27
+ margin: 20px auto;
28
+ }
29
+
30
+ money {
31
+ display: block;
32
+ text-align: center;
33
+ color: red;
34
+ }
35
+ }
@@ -606,7 +606,7 @@ var privates = {
606
606
  }
607
607
  return data;
608
608
  });
609
- p.loading = loading;
609
+ p.loading = promise.loading;
610
610
  return p;
611
611
  },
612
612
 
@@ -168,7 +168,7 @@ function go(pagepath, args, history_name, oldpagepath) {
168
168
  fullfill_is_dispatched = 0;
169
169
  }
170
170
  addGlobal(_page, history_name, isDestroy);
171
- page_object.prepares.forEach(function (url) {
171
+ page_object.prepares.splice(0, page_object.prepares.length).forEach(function (url) {
172
172
  if (isNumber(url)) {
173
173
  url = _history[url < 1 ? _history.length + url - 1 : url];
174
174
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "3.21.2",
3
+ "version": "3.21.3",
4
4
  "description": "一个开发工具,开放源代码,自带组件库和编译环境,可以用来开发web组件,web应用或nodejs模块,或做为已有代码的加密工具,也可以做为静态页面服务器或跨域中转服务器使用",
5
5
  "main": "public/efront.js",
6
6
  "directories": {