efront 3.21.0 → 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.
@@ -1,20 +1,43 @@
1
1
  data.loadConfig("api.yml");
2
2
  user.loginPath = '/auth/login';
3
+ var login_queue = [], reject_queue = [];
3
4
  cross.addReform(async function ({ status, url, headers }, reform, reject) {
4
5
  if (status === 401) {
6
+ var xhr = this;
7
+ var abort = xhr.abort;
8
+ xhr.abort = function () {
9
+ removeFromList(login_queue, reform);
10
+ removeFromList(reject_queue, reject);
11
+ if (!login_queue.length) remove(reject_queue.splice(0, 1)[0]);
12
+ abort.call(this);
13
+ };
14
+
15
+ if (login_queue.length) {
16
+ login_queue.push(reform);
17
+ reject_queue.push(reject);
18
+ return false;
19
+ }
5
20
  var base = data.getInstance("base").base;
6
21
  var { protocol, host } = parseURL(url);
7
22
  var base1 = protocol + "//" + host + "/";
8
23
  if (base !== base1) {
9
24
  data.setSource(base1, null);
10
25
  }
26
+ login_queue.push(reform);
11
27
  var page = await popup("/auth/login", base1);
28
+ if (!login_queue.length) return;
29
+ reject_queue.push(page, reject);
12
30
  care(page, "login", function (info) {
13
31
  data.setSource(base1, info);
14
32
  headers.authorization = info;
15
- reform();
33
+ login_queue.splice(0, login_queue.length).forEach(q => q());
34
+ reject_queue.splice(0, reject_queue.length);
35
+ });
36
+ on("remove")(page, function () {
37
+ login_queue.splice(0, login_queue.length);
38
+ if (reject_queue[0] === this) reject_queue.shift();
39
+ reject_queue.splice(0, reject_queue.length).forEach(r => r());
16
40
  });
17
- on("remove")(page, reject);
18
41
  return false;
19
42
  }
20
43
  })
@@ -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');
@@ -291,9 +291,9 @@ function parse(string, preload) {
291
291
  module.exports = {
292
292
  stringify,
293
293
  parse(data, preload) {
294
- if (!/^\s*([\[\{]|\[\s*\]|\{\s*\})$/.test(data)) return parse(data, preload);
294
+ if (/^\s*[^\{\[\s]|^\s*(?:\[\s*\]|\{\s*\}|)\s*$/.test(data)) return parse(data, preload);
295
295
  if (/^\s*\{[\d\,\:\s]*\}\s*,/.test(data)) return parse(data, preload);
296
296
  if (/^\s*\[[\d\,\:\s]*\]\s*,/.test(data)) return parse(data, preload);
297
- return JSON.parse(data, preload);
297
+ return JSON.parse(data);
298
298
  }
299
299
  };
@@ -100,9 +100,31 @@ function getDomainPath(url) {
100
100
  return host;
101
101
  }
102
102
 
103
+ function linkCookie(from, to) {
104
+ from = getDomainPath(from).replace(/\/$/, '');
105
+ to = getDomainPath(to).replace(/\/$/, '');
106
+ if (cookiesMap[from]) {
107
+ cookiesMap[to] = cookiesMap[from];
108
+ }
109
+ cookiesMap[to] = cookiesMap[from] = extend({}, cookiesMap[to], cookiesMap[from]);
110
+ return to;
111
+ }
112
+ function copyCookie(from, to) {
113
+ from = getDomainPath(from).replace(/\/$,'/, '');
114
+ to = getDomainPath(to).replace(/\/$/, '');
115
+ if (from in cookiesMap) {
116
+ cookiesMap[to] = JSON.parse(JSON.stringify(cookiesMap[from]));
117
+ }
118
+ else {
119
+ delete cookiesMap[to];
120
+ }
121
+ }
122
+
103
123
  return {
104
124
  cookiesMap,
105
125
  addCookie,
106
126
  getCookies,
107
127
  delCookies,
128
+ linkCookie,
129
+ copyCookie
108
130
  }
@@ -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("路径格式错误!");
@@ -75,6 +87,8 @@ function cross_(jsonp, digest = noop, method, url, headers) {
75
87
  }
76
88
  var loaded, errored;
77
89
  var onload = function (data) {
90
+ if (!~requests.indexOf(_xhr)) return;
91
+ removeFromList(requests, _xhr);
78
92
  if (xhr.decoder) {
79
93
  data = xhr.decoder(data);
80
94
  }
@@ -83,18 +97,21 @@ function cross_(jsonp, digest = noop, method, url, headers) {
83
97
  digest();
84
98
  };
85
99
  var onerror1 = function (e) {
100
+ if (!~requests.indexOf(_xhr)) return;
101
+ removeFromList(requests, _xhr);
86
102
  errored = e || "未知错误!";
87
103
  flush();
88
104
  digest();
89
105
  };
90
106
  var onerror = async function (e) {
91
107
  if (e.type === 'error') {
92
- removeFromList(requests, e.target);
93
108
  e = { response: "无法访问服务器", toString: toResponse };
94
109
  }
95
110
  for (var r of reforms) {
96
- var r = await reform(r, { method, url, status: xhr.status, headers: _headers }, fire, onerror1, e);
97
- if (r === false) return;
111
+ var r = await reform.call(xhr, r, { method, url, status: xhr.status, headers: _headers }, fire, onerror1, e);
112
+ if (r === false) {
113
+ return;
114
+ }
98
115
  }
99
116
  onerror1(e);
100
117
  };
@@ -129,11 +146,10 @@ function cross_(jsonp, digest = noop, method, url, headers) {
129
146
  var nocross = notCross(url, isencrypt);
130
147
  if (nocross) isencrypt = false;
131
148
  var callback = async function () {
132
- removeFromList(requests, xhr);
133
- var exposeHeaders = !nocross && xhr.getResponseHeader("access-control-expose-headers");
134
- var exposeMap = {};
135
- if (exposeHeaders) exposeHeaders.split(",").forEach(h => exposeMap[h.toLowerCase()] = true);
136
149
  if (xhr.getResponseHeader) {
150
+ var exposeHeaders = (!nocross || !location_href) && xhr.getResponseHeader("access-control-expose-headers");
151
+ var exposeMap = {};
152
+ if (exposeHeaders) exposeHeaders.split(",").forEach(h => exposeMap[h.toLowerCase()] = true);
137
153
  var exposekey = nocross ? "set-cookie" : "efront-cookie";
138
154
  if (exposeMap[exposekey]) {
139
155
  var cookie = xhr.getResponseHeader(exposekey);
@@ -158,6 +174,7 @@ function cross_(jsonp, digest = noop, method, url, headers) {
158
174
  xhr = {
159
175
  status: xhr.status,
160
176
  response: encode62.safedecode(xhr.response || xhr.responseText, xhr.encrypt),
177
+ getResponseHeader: xhr.getResponseHeader && xhr.getResponseHeader.bind(xhr)
161
178
  };
162
179
  xhr.responseText = xhr.response;
163
180
  }
@@ -246,7 +263,9 @@ function cross_(jsonp, digest = noop, method, url, headers) {
246
263
  }
247
264
  };
248
265
  var fire = async function () {
266
+ if (!~requests.indexOf(xhr)) return;
249
267
  var code = await xhr.encrypt;
268
+ if (!~requests.indexOf(xhr)) return;
250
269
  xhr.encrypt = code;
251
270
  var isform = /^f/i.test(method);
252
271
  if (isform) {
@@ -283,7 +302,7 @@ function cross_(jsonp, digest = noop, method, url, headers) {
283
302
  xhr.open(method, getCrossUrl(url, _headers, isencrypt && code));
284
303
  }
285
304
  if (is_gb2312) xhr.overrideMimeType("text/plain; charset=gb2312");
286
- delete realHeaders.Cookie;
305
+ if (location_href) delete realHeaders.Cookie;
287
306
  Object.keys(realHeaders).forEach(key => setRequestHeader.call(xhr, key, realHeaders[key]));
288
307
  if (!isEmpty(datas)) send.call(xhr, !isencrypt ? datas : encode62.safeencode(datas, code));
289
308
  else send.call(xhr);
@@ -319,11 +338,7 @@ function cross_(jsonp, digest = noop, method, url, headers) {
319
338
  onerrors.push(oh);
320
339
  flush();
321
340
  };
322
- var abort = xhr.abort;
323
- xhr.abort = function () {
324
- removeFromList(requests, this);
325
- if (isFunction(abort)) abort.call(this);
326
- };
341
+ xhr.abort = XMLHttpRequest_abort;
327
342
  xhr.delCookies = function () {
328
343
  delCookies(originDomain);
329
344
  xhr.nocookie = true;
@@ -333,6 +348,7 @@ function cross_(jsonp, digest = noop, method, url, headers) {
333
348
  return getCookies(originDomain);
334
349
  };
335
350
  requests.push(xhr);
351
+ var _xhr = xhr;
336
352
  return xhr;
337
353
  }
338
354
  function addDirect(a) {
@@ -359,7 +375,7 @@ var requests = [];
359
375
  var reforms = [];
360
376
  function reform(r, info, fire, cancel, e) {
361
377
  var fired = false;
362
- return r(info, function () {
378
+ return r.call(this, info, function () {
363
379
  if (fired) return;
364
380
  fired = true;
365
381
  fire();
@@ -386,8 +402,7 @@ cross_.bind = function () {
386
402
  extend(cross_, {
387
403
  requests,
388
404
  abortAll() {
389
- var rs = requests.splice(0, requests.length);
390
- for (var r of rs) r.abort();
405
+ for (var r of requests) r.abort();
391
406
  },
392
407
  setHost,
393
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
+ }
@@ -1,9 +1,16 @@
1
1
  function chooseFile(accept, multiple, extra) {
2
2
  var form = document.createElement("form");
3
- form.innerHTML = `<input ${extra ? extra + " " : ''}type='file'${accept ? ` accept="${accept}"` : ''}${multiple ? ' multiple' : ''} />`;
3
+ form.innerHTML = `<input tabindex=0 ${extra ? extra + " " : ''}type='file'${accept ? ` accept="${accept}"` : ''}${multiple ? ' multiple' : ''} />`;
4
4
  var [input] = form.children;
5
- var result = new Promise(function (ok) {
5
+ var result = new Promise(function (ok, oh) {
6
6
  if (/msie\s+[2-9]/i.test(navigator.userAgent)) return alert("无法在当前浏览器操作!");
7
+ input.onfocus = function () {
8
+ // focus 事件比change事件早40-80毫秒
9
+ if (opened && document.hasFocus()) {
10
+ remove(input);
11
+ setTimeout(oh, 210);
12
+ }
13
+ };
7
14
  on("change")(input, function () {
8
15
  if (!this.files) {
9
16
  var value = this.value;
@@ -27,8 +34,14 @@ function chooseFile(accept, multiple, extra) {
27
34
  }
28
35
  });
29
36
  });
30
- setTimeout(function(){
37
+ var opened = false;
38
+ input.tabIndex = 0;
39
+ css(input, 'opacity:0;pointer-events:none;position:absolute;position:fixed;top:-200px;left:0;')
40
+ appendChild(document.body, input);
41
+ requestAnimationFrame(function () {
42
+ input.focus();
31
43
  input.click();
44
+ opened = true;
32
45
  });
33
46
  return result;
34
47
  }
@@ -1,6 +1,6 @@
1
1
  var { cookiesMap, saveCookie } = cookie;
2
2
  var saveCookie = lazy(function () {
3
- sessionStorage.setItem(cookieItemsInSessionStorageKey, JSON.stringify(cookiesMap));
3
+ sessionStorage.setItem(cookieItemsInSessionStorageKey, JSAM.stringify(cookiesMap));
4
4
  }, 20);
5
5
  var { efrontURI, cross_host = efrontURI } = this;
6
6
  var location_href = parseURL(location.href);
@@ -11,7 +11,7 @@ var cookieItemsInSessionStorageKey = "--zimoli-coms-cross";
11
11
  var cookiesData = sessionStorage.getItem(cookieItemsInSessionStorageKey);
12
12
  if (cookiesData) {
13
13
  try {
14
- extend(cookiesMap, JSON.parse(cookiesData));
14
+ extend(cookiesMap, JSAM.parse(cookiesData));
15
15
  } catch (e) {
16
16
  console.warn("加载cookie出错!");
17
17
  }