diff --git a/packages/uni-app-plus/template/common/__uniapperror.png b/packages/uni-app-plus/template/common/__uniapperror.png
new file mode 100644
index 0000000000000000000000000000000000000000..4743b25e1284270fee6ba8fefdb5265f6c451a93
Binary files /dev/null and b/packages/uni-app-plus/template/common/__uniapperror.png differ
diff --git a/packages/uni-cli-shared/template/common/__uniapperror.png b/packages/uni-cli-shared/template/common/__uniapperror.png
new file mode 100644
index 0000000000000000000000000000000000000000..4743b25e1284270fee6ba8fefdb5265f6c451a93
Binary files /dev/null and b/packages/uni-cli-shared/template/common/__uniapperror.png differ
diff --git a/packages/uni-template-compiler/__tests__/compiler-extra.spec.js b/packages/uni-template-compiler/__tests__/compiler-extra.spec.js
index b8863cf8ac62ec8e209bb5edd55af2d3f247ea6b..3533daee0048cb9668ab8f061a22554df99ae887 100644
--- a/packages/uni-template-compiler/__tests__/compiler-extra.spec.js
+++ b/packages/uni-template-compiler/__tests__/compiler-extra.spec.js
@@ -64,14 +64,14 @@ describe('mp:compiler-extra', () => {
)
assertCodegen(
'',
- '',
+ '',
undefined, {
scopeId: 'data-v-4'
}
)
assertCodegen(
'',
- '',
+ '',
undefined, {
scopeId: 'data-v-5'
}
@@ -92,7 +92,7 @@ describe('mp:compiler-extra', () => {
// )
assertCodegen(
'',
- '',
+ '',
undefined, {
scopeId: 'data-v-7'
}
@@ -378,23 +378,23 @@ describe('mp:compiler-extra', () => {
)
assertCodegen(
'
2
',
- '2'
+ '2'
)
assertCodegen(
'3
',
- '3'
+ '3'
)
assertCodegen(
'4
',
- '4'
+ '4'
)
assertCodegen(
'5
',
- '5'
+ '5'
)
assertCodegen(
'6
',
- '6'
+ '6'
)
// assertCodegen(
// `6
`,
@@ -411,7 +411,7 @@ describe('mp:compiler-extra', () => {
)
assertCodegen(
'9
',
- '9'
+ '9'
)
})
diff --git a/packages/uni-template-compiler/__tests__/compiler-mp-alipay.spec.js b/packages/uni-template-compiler/__tests__/compiler-mp-alipay.spec.js
index 26ed0cf0f934d5e18ac1db01a424ad9d3f754417..a6cc18ea665724a8cdfff92832f7514980ee2ff8 100644
--- a/packages/uni-template-compiler/__tests__/compiler-mp-alipay.spec.js
+++ b/packages/uni-template-compiler/__tests__/compiler-mp-alipay.spec.js
@@ -137,27 +137,27 @@ describe('mp:compiler-mp-alipay', () => {
)
assertCodegen(
'2
',
- '2'
+ '2'
)
assertCodegen(
'3
',
- '3'
+ '3'
)
assertCodegen(
'4
',
- '4'
+ '4'
)
assertCodegen(
'5
',
- '5'
+ '5'
)
assertCodegen(
'52
',
- '52'
+ '52'
)
assertCodegen(
'6
',
- '6'
+ '6'
)
// assertCodegen(
// `6
`,
@@ -174,11 +174,15 @@ describe('mp:compiler-mp-alipay', () => {
)
assertCodegen(
'9
',
- '9'
+ '9'
)
assertCodegen(
'10
',
- '10'
+ '10'
+ )
+ assertCodegen(
+ 'hello world
',
+ 'hello world'
)
})
diff --git a/packages/uni-template-compiler/__tests__/compiler-mp-baidu.spec.js b/packages/uni-template-compiler/__tests__/compiler-mp-baidu.spec.js
index 398051d318e816d4b51d32238ae25f255540edd6..c0ecdefa1e2f1331386932e192f1bf15b105ab14 100644
--- a/packages/uni-template-compiler/__tests__/compiler-mp-baidu.spec.js
+++ b/packages/uni-template-compiler/__tests__/compiler-mp-baidu.spec.js
@@ -15,6 +15,12 @@ function assertCodegen (template, templateCode, renderCode = 'with(this){}', opt
}
describe('mp:compiler-mp-baidu', () => {
+ it('generate class', () => {
+ assertCodegen(
+ 'hello world',
+ 'hello world'
+ )
+ })
it('generate v-for directive', () => {
assertCodegen(
'',
diff --git a/packages/uni-template-compiler/__tests__/compiler-mp-kuaishou.spec.js b/packages/uni-template-compiler/__tests__/compiler-mp-kuaishou.spec.js
index f80fff3a22b0c2ef9edf3f6e0c5cb6a493ce1031..a9b98754594f2741a77a49916cb3a1f5cfd2b112 100644
--- a/packages/uni-template-compiler/__tests__/compiler-mp-kuaishou.spec.js
+++ b/packages/uni-template-compiler/__tests__/compiler-mp-kuaishou.spec.js
@@ -20,6 +20,12 @@ function assertCodegen (template, templateCode, renderCode = 'with(this){}', opt
}
describe('mp:compiler-mp-kuaishou', () => {
+ it('generate class', () => {
+ assertCodegen(
+ 'hello world',
+ 'hello world'
+ )
+ })
it('generate scoped slot', () => {
assertCodegen(
'{{ bar.foo }}',
diff --git a/packages/uni-template-compiler/__tests__/compiler-mp-qq.spec.js b/packages/uni-template-compiler/__tests__/compiler-mp-qq.spec.js
index 30de6ee858874a6067cd848b53dc50aead96466b..29f85b7ecde92fa9843ad63f213ded741288e27e 100644
--- a/packages/uni-template-compiler/__tests__/compiler-mp-qq.spec.js
+++ b/packages/uni-template-compiler/__tests__/compiler-mp-qq.spec.js
@@ -1,20 +1,26 @@
-const compiler = require('../lib')
-
-function assertCodegen (template, templateCode, renderCode = 'with(this){}', options = {}) {
+const compiler = require('../lib')
+
+function assertCodegen (template, templateCode, renderCode = 'with(this){}', options = {}) {
const res = compiler.compile(template, {
- resourcePath: 'test.wxml',
- mp: Object.assign({
- minified: true,
- isTest: true,
- platform: 'mp-qq'
- }, options)
- })
-
- expect(res.template).toBe(templateCode)
- expect(res.render).toBe(renderCode)
-}
-
+ resourcePath: 'test.wxml',
+ mp: Object.assign({
+ minified: true,
+ isTest: true,
+ platform: 'mp-qq'
+ }, options)
+ })
+
+ expect(res.template).toBe(templateCode)
+ expect(res.render).toBe(renderCode)
+}
+
describe('mp:compiler-mp-qq', () => {
+ it('generate class', () => {
+ assertCodegen(
+ 'hello world',
+ 'hello world'
+ )
+ })
it('generate text trim', () => {
assertCodegen(
'\nN: {{title}}\n′',
@@ -33,5 +39,5 @@ describe('mp:compiler-mp-qq', () => {
我的第二行2{{title}}`,
'{{"我是第一行3\\\\n 我的第二行2"+title}}'
)
- })
+ })
})
diff --git a/packages/uni-template-compiler/__tests__/compiler-mp-toutiao.spec.js b/packages/uni-template-compiler/__tests__/compiler-mp-toutiao.spec.js
index 0b525b795edb36a52768bc4ea9c14f8d2755f785..73a958101dd49ad6b540b7c2db463974ee6d7177 100644
--- a/packages/uni-template-compiler/__tests__/compiler-mp-toutiao.spec.js
+++ b/packages/uni-template-compiler/__tests__/compiler-mp-toutiao.spec.js
@@ -36,27 +36,27 @@ describe('mp:compiler-mp-toutiao', () => {
)
assertCodegen(
'2
',
- '2'
+ '2'
)
assertCodegen(
'3
',
- '3'
+ '3'
)
assertCodegen(
'4
',
- '4'
+ '4'
)
assertCodegen(
'5
',
- '5'
+ '5'
)
assertCodegen(
'52
',
- '52'
+ '52'
)
assertCodegen(
'6
',
- '6'
+ '6'
)
// assertCodegen(
// `6
`,
@@ -73,11 +73,15 @@ describe('mp:compiler-mp-toutiao', () => {
)
assertCodegen(
'9
',
- '9'
+ '9'
)
assertCodegen(
'10
',
- '10'
+ '10'
+ )
+ assertCodegen(
+ 'hello world
',
+ 'hello world'
)
})
diff --git a/packages/uni-template-compiler/__tests__/compiler-mp-weixin.spec.js b/packages/uni-template-compiler/__tests__/compiler-mp-weixin.spec.js
index f6ee2963b7191cfc6d1af82cc0f505aa00207572..a5e83b0b1f25eac42158585d9250f91393d040f7 100644
--- a/packages/uni-template-compiler/__tests__/compiler-mp-weixin.spec.js
+++ b/packages/uni-template-compiler/__tests__/compiler-mp-weixin.spec.js
@@ -20,6 +20,12 @@ function assertCodegen (template, templateCode, renderCode = 'with(this){}', opt
}
describe('mp:compiler-mp-weixin', () => {
+ it('generate class', () => {
+ assertCodegen(
+ 'hello world',
+ 'hello world'
+ )
+ })
it('generate scoped slot', () => {
assertCodegen(
'{{ bar.foo }}',
@@ -142,6 +148,14 @@ describe('mp:compiler-mp-weixin', () => {
scopedSlotsCompiler: 'augmented'
}
)
+ assertCodegen(
+ '{{item}}',
+ '{{$root.m1}}',
+ 'with(this){var m0=$hasScopedSlotsParams("551070e6-1");var m1=m0?$getScopedSlotsParams("551070e6-1","default","item"):null;$mp.data=Object.assign({},{$root:{m0:m0,m1:m1}})}',
+ {
+ scopedSlotsCompiler: 'augmented'
+ }
+ )
assertCodegen(
'{{getValue(item.text)}}',
'{{$root.m1}}',
diff --git a/packages/uni-template-compiler/lib/script/traverse/data/class.js b/packages/uni-template-compiler/lib/script/traverse/data/class.js
index dbbc5ac2ce36c3c83efc50cc30051f027f2da3f8..39ff44ca6ca304a063d9c2ba76148825de71398b 100644
--- a/packages/uni-template-compiler/lib/script/traverse/data/class.js
+++ b/packages/uni-template-compiler/lib/script/traverse/data/class.js
@@ -8,9 +8,9 @@ function processClassArrayExpressionElements (classArrayExpression) {
let binaryExpression
classArrayExpression.elements.forEach(expr => {
- if (t.isArrayExpression(expr)) {
- expr = processClassArrayExpressionElements(expr)
- }
+ if (t.isArrayExpression(expr)) {
+ expr = processClassArrayExpressionElements(expr)
+ }
if (!binaryExpression) {
binaryExpression = t.parenthesizedExpression(expr)
} else {
@@ -31,9 +31,10 @@ function processClassArrayExpressionElements (classArrayExpression) {
function processStaticClass (classArrayExpression, staticClassPath, state) {
if (staticClassPath) {
- classArrayExpression.elements.unshift(
- t.stringLiteral(staticClassPath.node.value.value)
- )
+ const staticClassPathArr = staticClassPath.node.value.value.split(' ')
+ for (let len = staticClassPathArr.length, index = len - 1; index >= 0; index--) {
+ classArrayExpression.elements.unshift(t.stringLiteral(staticClassPathArr[index]))
+ }
staticClassPath.remove()
}
if (
@@ -135,4 +136,4 @@ module.exports = function processClass (paths, path, state) {
}
}
return []
-}
+}
diff --git a/packages/uni-template-compiler/lib/script/traverse/resolve-scoped-slots.js b/packages/uni-template-compiler/lib/script/traverse/resolve-scoped-slots.js
index f85252ea9513737217fbc981ba15aa5ceb5fde0b..039a7f6ea289f4583026ecc1555d04d77006a854 100644
--- a/packages/uni-template-compiler/lib/script/traverse/resolve-scoped-slots.js
+++ b/packages/uni-template-compiler/lib/script/traverse/resolve-scoped-slots.js
@@ -64,7 +64,7 @@ module.exports = function getResolveScopedSlots (parent, state) {
updateIds(vueId, slot, params.node.name)
}
const fnBody = fn.get('value.body')
- if (needSlotMode(fnBody, ids)) {
+ if (state.options.scopedSlotsCompiler === 'augmented' || needSlotMode(fnBody, ids)) {
if (replaceId(fnBody, ids)) {
const orgin = fnBody.get('body.0.argument')
const elements = orgin.get('elements')
diff --git a/packages/vue-cli-plugin-hbuilderx/packages/weex-styler/lib/validator.js b/packages/vue-cli-plugin-hbuilderx/packages/weex-styler/lib/validator.js
index 150bc9c1e37fd47418e501737ef79a7b5f981eeb..d437aecfb04ea9842e6fe4c7ebc8efb4b1046fe5 100644
--- a/packages/vue-cli-plugin-hbuilderx/packages/weex-styler/lib/validator.js
+++ b/packages/vue-cli-plugin-hbuilderx/packages/weex-styler/lib/validator.js
@@ -549,6 +549,7 @@ function FLEW_WRAP_VALIDATOR (v) {
var PROP_NAME_GROUPS = {
boxModel: {
+ display: genEnumValidator(['flex']),
width: LENGTH_VALIDATOR,
height: LENGTH_VALIDATOR,
overflow: genEnumValidator(['hidden']),
diff --git a/packages/vue-cli-plugin-uni/packages/uni-cloud/dist/index.js b/packages/vue-cli-plugin-uni/packages/uni-cloud/dist/index.js
index 6b8d08970545d1d3d5de56e7b51e5785b4494081..3c2f40c2a3d169062ceea897d8e02b1a9a3fbfc6 100644
--- a/packages/vue-cli-plugin-uni/packages/uni-cloud/dist/index.js
+++ b/packages/vue-cli-plugin-uni/packages/uni-cloud/dist/index.js
@@ -1 +1 @@
-import{initVueI18n as e}from"@dcloudio/uni-i18n";"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;function t(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function s(e,t,s){return e(s={path:t,exports:{},require:function(e,t){return function(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}(null==t&&s.path)}},s.exports),s.exports}var n=s((function(e,t){var s;e.exports=(s=s||function(e,t){var s=Object.create||function(){function e(){}return function(t){var s;return e.prototype=t,s=new e,e.prototype=null,s}}(),n={},r=n.lib={},o=r.Base={extend:function(e){var t=s(this);return e&&t.mixIn(e),t.hasOwnProperty("init")&&this.init!==t.init||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},i=r.WordArray=o.extend({init:function(e,t){e=this.words=e||[],this.sigBytes=null!=t?t:4*e.length},toString:function(e){return(e||c).stringify(this)},concat:function(e){var t=this.words,s=e.words,n=this.sigBytes,r=e.sigBytes;if(this.clamp(),n%4)for(var o=0;o>>2]>>>24-o%4*8&255;t[n+o>>>2]|=i<<24-(n+o)%4*8}else for(o=0;o>>2]=s[o>>>2];return this.sigBytes+=r,this},clamp:function(){var t=this.words,s=this.sigBytes;t[s>>>2]&=4294967295<<32-s%4*8,t.length=e.ceil(s/4)},clone:function(){var e=o.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var s,n=[],r=function(t){t=t;var s=987654321,n=4294967295;return function(){var r=((s=36969*(65535&s)+(s>>16)&n)<<16)+(t=18e3*(65535&t)+(t>>16)&n)&n;return r/=4294967296,(r+=.5)*(e.random()>.5?1:-1)}},o=0;o>>2]>>>24-r%4*8&255;n.push((o>>>4).toString(16)),n.push((15&o).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,s=[],n=0;n>>3]|=parseInt(e.substr(n,2),16)<<24-n%8*4;return new i.init(s,t/2)}},u=a.Latin1={stringify:function(e){for(var t=e.words,s=e.sigBytes,n=[],r=0;r>>2]>>>24-r%4*8&255;n.push(String.fromCharCode(o))}return n.join("")},parse:function(e){for(var t=e.length,s=[],n=0;n>>2]|=(255&e.charCodeAt(n))<<24-n%4*8;return new i.init(s,t)}},h=a.Utf8={stringify:function(e){try{return decodeURIComponent(escape(u.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return u.parse(unescape(encodeURIComponent(e)))}},l=r.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new i.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=h.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var s=this._data,n=s.words,r=s.sigBytes,o=this.blockSize,a=r/(4*o),c=(a=t?e.ceil(a):e.max((0|a)-this._minBufferSize,0))*o,u=e.min(4*c,r);if(c){for(var h=0;h>>24)|4278255360&(r<<24|r>>>8)}var o=this._hash.words,i=e[t+0],c=e[t+1],f=e[t+2],p=e[t+3],g=e[t+4],m=e[t+5],y=e[t+6],_=e[t+7],w=e[t+8],v=e[t+9],S=e[t+10],k=e[t+11],T=e[t+12],P=e[t+13],I=e[t+14],A=e[t+15],E=o[0],O=o[1],U=o[2],b=o[3];E=u(E,O,U,b,i,7,a[0]),b=u(b,E,O,U,c,12,a[1]),U=u(U,b,E,O,f,17,a[2]),O=u(O,U,b,E,p,22,a[3]),E=u(E,O,U,b,g,7,a[4]),b=u(b,E,O,U,m,12,a[5]),U=u(U,b,E,O,y,17,a[6]),O=u(O,U,b,E,_,22,a[7]),E=u(E,O,U,b,w,7,a[8]),b=u(b,E,O,U,v,12,a[9]),U=u(U,b,E,O,S,17,a[10]),O=u(O,U,b,E,k,22,a[11]),E=u(E,O,U,b,T,7,a[12]),b=u(b,E,O,U,P,12,a[13]),U=u(U,b,E,O,I,17,a[14]),E=h(E,O=u(O,U,b,E,A,22,a[15]),U,b,c,5,a[16]),b=h(b,E,O,U,y,9,a[17]),U=h(U,b,E,O,k,14,a[18]),O=h(O,U,b,E,i,20,a[19]),E=h(E,O,U,b,m,5,a[20]),b=h(b,E,O,U,S,9,a[21]),U=h(U,b,E,O,A,14,a[22]),O=h(O,U,b,E,g,20,a[23]),E=h(E,O,U,b,v,5,a[24]),b=h(b,E,O,U,I,9,a[25]),U=h(U,b,E,O,p,14,a[26]),O=h(O,U,b,E,w,20,a[27]),E=h(E,O,U,b,P,5,a[28]),b=h(b,E,O,U,f,9,a[29]),U=h(U,b,E,O,_,14,a[30]),E=l(E,O=h(O,U,b,E,T,20,a[31]),U,b,m,4,a[32]),b=l(b,E,O,U,w,11,a[33]),U=l(U,b,E,O,k,16,a[34]),O=l(O,U,b,E,I,23,a[35]),E=l(E,O,U,b,c,4,a[36]),b=l(b,E,O,U,g,11,a[37]),U=l(U,b,E,O,_,16,a[38]),O=l(O,U,b,E,S,23,a[39]),E=l(E,O,U,b,P,4,a[40]),b=l(b,E,O,U,i,11,a[41]),U=l(U,b,E,O,p,16,a[42]),O=l(O,U,b,E,y,23,a[43]),E=l(E,O,U,b,v,4,a[44]),b=l(b,E,O,U,T,11,a[45]),U=l(U,b,E,O,A,16,a[46]),E=d(E,O=l(O,U,b,E,f,23,a[47]),U,b,i,6,a[48]),b=d(b,E,O,U,_,10,a[49]),U=d(U,b,E,O,I,15,a[50]),O=d(O,U,b,E,m,21,a[51]),E=d(E,O,U,b,T,6,a[52]),b=d(b,E,O,U,p,10,a[53]),U=d(U,b,E,O,S,15,a[54]),O=d(O,U,b,E,c,21,a[55]),E=d(E,O,U,b,w,6,a[56]),b=d(b,E,O,U,A,10,a[57]),U=d(U,b,E,O,y,15,a[58]),O=d(O,U,b,E,P,21,a[59]),E=d(E,O,U,b,g,6,a[60]),b=d(b,E,O,U,k,10,a[61]),U=d(U,b,E,O,f,15,a[62]),O=d(O,U,b,E,v,21,a[63]),o[0]=o[0]+E|0,o[1]=o[1]+O|0,o[2]=o[2]+U|0,o[3]=o[3]+b|0},_doFinalize:function(){var t=this._data,s=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;s[r>>>5]|=128<<24-r%32;var o=e.floor(n/4294967296),i=n;s[15+(r+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),s[14+(r+64>>>9<<4)]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),t.sigBytes=4*(s.length+1),this._process();for(var a=this._hash,c=a.words,u=0;u<4;u++){var h=c[u];c[u]=16711935&(h<<8|h>>>24)|4278255360&(h<<24|h>>>8)}return a},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});function u(e,t,s,n,r,o,i){var a=e+(t&s|~t&n)+r+i;return(a<>>32-o)+t}function h(e,t,s,n,r,o,i){var a=e+(t&n|s&~n)+r+i;return(a<>>32-o)+t}function l(e,t,s,n,r,o,i){var a=e+(t^s^n)+r+i;return(a<>>32-o)+t}function d(e,t,s,n,r,o,i){var a=e+(s^(t|~n))+r+i;return(a<>>32-o)+t}t.MD5=o._createHelper(c),t.HmacMD5=o._createHmacHelper(c)}(Math),s.MD5)})),s((function(e,t){var s,r,o;e.exports=(r=(s=n).lib.Base,o=s.enc.Utf8,void(s.algo.HMAC=r.extend({init:function(e,t){e=this._hasher=new e.init,"string"==typeof t&&(t=o.parse(t));var s=e.blockSize,n=4*s;t.sigBytes>n&&(t=e.finalize(t)),t.clamp();for(var r=this._oKey=t.clone(),i=this._iKey=t.clone(),a=r.words,c=i.words,u=0;u{c.indexOf(s)>-1&&function(e,t,s){let n=u[e][t];n||(n=u[e][t]=[]),-1===n.indexOf(s)&&"function"==typeof s&&n.push(s)}(e,s,t[s])})}function l(e,t){u[e]||(u[e]={}),i(t)?Object.keys(t).forEach(s=>{c.indexOf(s)>-1&&function(e,t,s){const n=u[e][t];if(!n)return;const r=n.indexOf(s);r>-1&&n.splice(r,1)}(e,s,t[s])}):delete u[e]}function d(e,t){return e&&0!==e.length?e.reduce((e,s)=>e.then(()=>s(t)),Promise.resolve()):Promise.resolve()}function f(e,t){return u[e]&&u[e][t]||[]}function p(e,t){return t?function(s){const n="callFunction"===t&&"DCloud-clientDB"===(s&&s.name);let r;r=this.isReady?Promise.resolve():this.initUniCloud,s=s||{};const o=r.then(()=>n?Promise.resolve():d(f(t,"invoke"),s)).then(()=>e.call(this,s)).then(e=>n?Promise.resolve(e):d(f(t,"success"),e).then(()=>d(f(t,"complete"),e)).then(()=>Promise.resolve(e)),e=>n?Promise.reject(e):d(f(t,"fail"),e).then(()=>d(f(t,"complete"),e)).then(()=>Promise.reject(e)));if(!(s.success||s.fail||s.complete))return o;o.then(e=>{s.success&&s.success(e),s.complete&&s.complete(e)}).catch(e=>{s.fail&&s.fail(e),s.complete&&s.complete(e)})}:function(t){if(!((t=t||{}).success||t.fail||t.complete))return e.call(this,t);e.call(this,t).then(e=>{t.success&&t.success(e),t.complete&&t.complete(e)},e=>{t.fail&&t.fail(e),t.complete&&t.complete(e)})}}class g extends Error{constructor(e){super(e.message),this.errMsg=e.message||"",Object.defineProperties(this,{code:{get:()=>e.code},requestId:{get:()=>e.requestId},message:{get(){return this.errMsg},set(e){this.errMsg=e}}})}}const{t:m,setLocale:y,getLocale:_}=e({"zh-Hans":{"uniCloud.init.paramRequired":"缺少参数:{param}","uniCloud.uploadFile.fileError":"filePath应为File对象"},"zh-Hant":{"uniCloud.init.paramRequired":"缺少参数:{param}","uniCloud.uploadFile.fileError":"filePath应为File对象"},en:{"uniCloud.init.paramRequired":"{param} required","uniCloud.uploadFile.fileError":"filePath should be instance of File"},fr:{"uniCloud.init.paramRequired":"{param} required","uniCloud.uploadFile.fileError":"filePath should be instance of File"},es:{"uniCloud.init.paramRequired":"{param} required","uniCloud.uploadFile.fileError":"filePath should be instance of File"}},"zh-Hans");function w(e){return e&&"string"==typeof e?JSON.parse(e):e}const v="development"===process.env.NODE_ENV,S=process.env.VUE_APP_PLATFORM||process.env.UNI_PLATFORM,k=w(process.env.UNICLOUD_DEBUG),T=w(process.env.UNI_CLOUD_PROVIDER),P=process.env.RUN_BY_HBUILDERX;let I,A,E;try{I=require("uni-stat-config").default||require("uni-stat-config")}catch(e){I={appid:""}}function O(e=8){let t="";for(;t.length{t(Object.assign(e,{complete(e){e||(e={}),v&&"h5"===S&&e.errMsg&&0===e.errMsg.indexOf("request:fail")&&console.warn("发布H5,需要在uniCloud后台操作,绑定安全域名,否则会因为跨域问题而无法访问。教程参考:https://uniapp.dcloud.io/uniCloud/quickstart?id=useinh5");const t=e.data&&e.data.header&&e.data.header["x-serverless-request-id"]||e.header&&e.header["request-id"];if(!e.statusCode||e.statusCode>=400)return n(new g({code:"SYS_ERR",message:e.errMsg||"request:fail",requestId:t}));const r=e.data;if(r.error)return n(new g({code:r.error.code,message:r.error.message,requestId:t}));r.result=r.data,r.requestId=t,delete r.data,s(r)}}))})}};const x={request:e=>uni.request(e),uploadFile:e=>uni.uploadFile(e),setStorageSync:(e,t)=>uni.setStorageSync(e,t),getStorageSync:e=>uni.getStorageSync(e),removeStorageSync:e=>uni.removeStorageSync(e),clearStorageSync:()=>uni.clearStorageSync()};class q{constructor(e){["spaceId","clientSecret"].forEach(t=>{if(!Object.prototype.hasOwnProperty.call(e,t))throw new Error(m("uniCloud.init.paramRequired",{param:t}))}),this.config=Object.assign({},{endpoint:"https://api.bspapp.com"},e),this.config.provider="aliyun",this.config.requestUrl=this.config.endpoint+"/client",this.config.envType=this.config.envType||"public",this.config.accessTokenKey="access_token_"+this.config.spaceId,this.adapter=x,this._getAccessTokenPromise=null,this._getAccessTokenPromiseStatus=null}get hasAccessToken(){return!!this.accessToken}setAccessToken(e){this.accessToken=e}requestWrapped(e){return C.wrappedRequest(e,this.adapter.request)}requestAuth(e){return this.requestWrapped(e)}request(e,t){return Promise.resolve().then(()=>this.hasAccessToken?t?this.requestWrapped(e):this.requestWrapped(e).catch(t=>new Promise((e,s)=>{!t||"GATEWAY_INVALID_TOKEN"!==t.code&&"InvalidParameter.InvalidToken"!==t.code?s(t):e()}).then(()=>this.getAccessToken()).then(()=>{const t=this.rebuildRequest(e);return this.request(t,!0)})):this.getAccessToken().then(()=>{const t=this.rebuildRequest(e);return this.request(t,!0)}))}rebuildRequest(e){const t=Object.assign({},e);return t.data.token=this.accessToken,t.header["x-basement-token"]=this.accessToken,t.header["x-serverless-sign"]=C.sign(t.data,this.config.clientSecret),t}setupRequest(e,t){const s=Object.assign({},e,{spaceId:this.config.spaceId,timestamp:Date.now()}),n={"Content-Type":"application/json"};return"auth"!==t&&(s.token=this.accessToken,n["x-basement-token"]=this.accessToken),n["x-serverless-sign"]=C.sign(s,this.config.clientSecret),{url:this.config.requestUrl,method:"POST",data:s,dataType:"json",header:n}}getAccessToken(){if("pending"===this._getAccessTokenPromiseStatus)return this._getAccessTokenPromise;this._getAccessTokenPromiseStatus="pending";return this._getAccessTokenPromise=this.requestAuth(this.setupRequest({method:"serverless.auth.user.anonymousAuthorize",params:"{}"},"auth")).then(e=>new Promise((t,s)=>{e.result&&e.result.accessToken?(this.setAccessToken(e.result.accessToken),this._getAccessTokenPromiseStatus="fulfilled",t(this.accessToken)):(this._getAccessTokenPromiseStatus="rejected",s(new g({code:"AUTH_FAILED",message:"获取accessToken失败"})))}),e=>(this._getAccessTokenPromiseStatus="rejected",Promise.reject(e))),this._getAccessTokenPromise}authorize(){this.getAccessToken()}callFunction(e){const t={method:"serverless.function.runtime.invoke",params:JSON.stringify({functionTarget:e.name,functionArgs:e.data||{}})};return this.request(this.setupRequest(t))}getOSSUploadOptionsFromPath(e){const t={method:"serverless.file.resource.generateProximalSign",params:JSON.stringify(e)};return this.request(this.setupRequest(t))}uploadFileToOSS({url:e,formData:t,name:s,filePath:n,fileType:r,onUploadProgress:o}){return new Promise((i,a)=>{const c=this.adapter.uploadFile({url:e,formData:t,name:s,filePath:n,fileType:r,header:{"X-OSS-server-side-encrpytion":"AES256"},success(e){e&&e.statusCode<400?i(e):a(new g({code:"UPLOAD_FAILED",message:"文件上传失败"}))},fail(e){a(new g({code:e.code||"UPLOAD_FAILED",message:e.message||e.errMsg||"文件上传失败"}))}});"function"==typeof o&&c&&"function"==typeof c.onProgressUpdate&&c.onProgressUpdate(e=>{o({loaded:e.totalBytesSent,total:e.totalBytesExpectedToSend})})})}reportOSSUpload(e){const t={method:"serverless.file.resource.report",params:JSON.stringify(e)};return this.request(this.setupRequest(t))}uploadFile({filePath:e,cloudPath:t,fileType:s="image",onUploadProgress:n,config:r}){if(!t)throw new g({code:"CLOUDPATH_REQUIRED",message:"cloudPath不可为空"});const o=r&&r.envType||this.config.envType;let i,a;return this.getOSSUploadOptionsFromPath({env:o,filename:t}).then(t=>{const r=t.result;i=r.id,a="https://"+r.cdnDomain+"/"+r.ossPath;const o={url:"https://"+r.host,formData:{"Cache-Control":"max-age=2592000","Content-Disposition":"attachment",OSSAccessKeyId:r.accessKeyId,Signature:r.signature,host:r.host,id:i,key:r.ossPath,policy:r.policy,success_action_status:200},fileName:"file",name:"file",filePath:e,fileType:s};return this.uploadFileToOSS(Object.assign({},o,{onUploadProgress:n}))}).then(()=>this.reportOSSUpload({id:i})).then(t=>new Promise((s,n)=>{t.success?s({success:!0,filePath:e,fileID:a}):n(new g({code:"UPLOAD_FAILED",message:"文件上传失败"}))}))}deleteFile({fileList:e}){const t={method:"serverless.file.resource.delete",params:JSON.stringify({id:e[0]})};return this.request(this.setupRequest(t))}getTempFileURL({fileList:e}={}){return new Promise((t,s)=>{Array.isArray(e)&&0!==e.length||s(new g({code:"INVALID_PARAM",message:"fileList的元素必须是非空的字符串"})),t({fileList:e.map(e=>({fileID:e,tempFileURL:e}))})})}}const R={init(e){const t=new q(e),s={signInAnonymously:function(){return t.authorize()},getLoginState:function(){return Promise.resolve(!1)}};return t.auth=function(){return s},t.customAuth=t.auth,t}},F="undefined"!=typeof location&&"http:"===location.protocol?"http:":"https:",L="undefined"!=typeof process&&"e2e"===process.env.NODE_ENV&&"pre"===process.env.END_POINT?"//tcb-pre.tencentcloudapi.com/web":"//tcb-api.tencentcloudapi.com/web";var N;!function(e){e.local="local",e.none="none",e.session="session"}(N||(N={}));var M=function(){};const j=()=>{let e;if(!Promise){e=()=>{},e.promise={};const t=()=>{throw new Error('Your Node runtime does support ES6 Promises. Set "global.Promise" to your preferred implementation of promises.')};return Object.defineProperty(e.promise,"then",{get:t}),Object.defineProperty(e.promise,"catch",{get:t}),e}const t=new Promise((t,s)=>{e=(e,n)=>e?s(e):t(n)});return e.promise=t,e};function $(e){return void 0===e}function K(e){return"[object Null]"===Object.prototype.toString.call(e)}var B;function H(e){const t=(s=e,"[object Array]"===Object.prototype.toString.call(s)?e:[e]);var s;for(const e of t){const{isMatch:t,genAdapter:s,runtime:n}=e;if(t())return{adapter:s(),runtime:n}}}!function(e){e.WEB="web",e.WX_MP="wx_mp"}(B||(B={}));const W={adapter:null,runtime:void 0},z=["anonymousUuidKey"];class V extends M{constructor(){super(),W.adapter.root.tcbObject||(W.adapter.root.tcbObject={})}setItem(e,t){W.adapter.root.tcbObject[e]=t}getItem(e){return W.adapter.root.tcbObject[e]}removeItem(e){delete W.adapter.root.tcbObject[e]}clear(){delete W.adapter.root.tcbObject}}function J(e,t){switch(e){case"local":return t.localStorage||new V;case"none":return new V;default:return t.sessionStorage||new V}}class Y{constructor(e){if(!this._storage){this._persistence=W.adapter.primaryStorage||e.persistence,this._storage=J(this._persistence,W.adapter);const t="access_token_"+e.env,s="access_token_expire_"+e.env,n="refresh_token_"+e.env,r="anonymous_uuid_"+e.env,o="login_type_"+e.env,i="user_info_"+e.env;this.keys={accessTokenKey:t,accessTokenExpireKey:s,refreshTokenKey:n,anonymousUuidKey:r,loginTypeKey:o,userInfoKey:i}}}updatePersistence(e){if(e===this._persistence)return;const t="local"===this._persistence;this._persistence=e;const s=J(e,W.adapter);for(const e in this.keys){const n=this.keys[e];if(t&&z.includes(e))continue;const r=this._storage.getItem(n);$(r)||K(r)||(s.setItem(n,r),this._storage.removeItem(n))}this._storage=s}setStore(e,t,s){if(!this._storage)return;const n={version:s||"localCachev1",content:t},r=JSON.stringify(n);try{this._storage.setItem(e,r)}catch(e){throw e}}getStore(e,t){try{if(!this._storage)return}catch(e){return""}t=t||"localCachev1";const s=this._storage.getItem(e);if(!s)return"";if(s.indexOf(t)>=0){return JSON.parse(s).content}return""}removeStore(e){this._storage.removeItem(e)}}const X={},G={};function Q(e){return X[e]}class Z{constructor(e,t){this.data=t||null,this.name=e}}class ee extends Z{constructor(e,t){super("error",{error:e,data:t}),this.error=e}}const te=new class{constructor(){this._listeners={}}on(e,t){return function(e,t,s){s[e]=s[e]||[],s[e].push(t)}(e,t,this._listeners),this}off(e,t){return function(e,t,s){if(s&&s[e]){const n=s[e].indexOf(t);-1!==n&&s[e].splice(n,1)}}(e,t,this._listeners),this}fire(e,t){if(e instanceof ee)return console.error(e.error),this;const s="string"==typeof e?new Z(e,t||{}):e;const n=s.name;if(this._listens(n)){s.target=this;const e=this._listeners[n]?[...this._listeners[n]]:[];for(const t of e)t.call(this,s)}return this}_listens(e){return this._listeners[e]&&this._listeners[e].length>0}};function se(e,t){te.on(e,t)}function ne(e,t={}){te.fire(e,t)}function re(e,t){te.off(e,t)}const oe="loginStateChanged",ie="loginStateExpire",ae="loginTypeChanged",ce="anonymousConverted",ue="refreshAccessToken";var he;!function(e){e.ANONYMOUS="ANONYMOUS",e.WECHAT="WECHAT",e.WECHAT_PUBLIC="WECHAT-PUBLIC",e.WECHAT_OPEN="WECHAT-OPEN",e.CUSTOM="CUSTOM",e.EMAIL="EMAIL",e.USERNAME="USERNAME",e.NULL="NULL"}(he||(he={}));const le=["auth.getJwt","auth.logout","auth.signInWithTicket","auth.signInAnonymously","auth.signIn","auth.fetchAccessTokenWithRefreshToken","auth.signUpWithEmailAndPassword","auth.activateEndUserMail","auth.sendPasswordResetEmail","auth.resetPasswordWithToken","auth.isUsernameRegistered"],de={"X-SDK-Version":"1.3.5"};function fe(e,t,s){const n=e[t];e[t]=function(t){const r={},o={};s.forEach(s=>{const{data:n,headers:i}=s.call(e,t);Object.assign(r,n),Object.assign(o,i)});const i=t.data;return i&&(()=>{var e;if(e=i,"[object FormData]"!==Object.prototype.toString.call(e))t.data={...i,...r};else for(const e in r)i.append(e,r[e])})(),t.headers={...t.headers||{},...o},n.call(e,t)}}function pe(){const e=Math.random().toString(16).slice(2);return{data:{seqId:e},headers:{...de,"x-seqid":e}}}class ge{constructor(e={}){var t;this.config=e,this._reqClass=new W.adapter.reqClass({timeout:this.config.timeout,timeoutMsg:`请求在${this.config.timeout/1e3}s内未完成,已中断`,restrictedMethods:["post"]}),this._cache=Q(this.config.env),this._localCache=(t=this.config.env,G[t]),fe(this._reqClass,"post",[pe]),fe(this._reqClass,"upload",[pe]),fe(this._reqClass,"download",[pe])}async post(e){return await this._reqClass.post(e)}async upload(e){return await this._reqClass.upload(e)}async download(e){return await this._reqClass.download(e)}async refreshAccessToken(){let e,t;this._refreshAccessTokenPromise||(this._refreshAccessTokenPromise=this._refreshAccessToken());try{e=await this._refreshAccessTokenPromise}catch(e){t=e}if(this._refreshAccessTokenPromise=null,this._shouldRefreshAccessTokenHook=null,t)throw t;return e}async _refreshAccessToken(){const{accessTokenKey:e,accessTokenExpireKey:t,refreshTokenKey:s,loginTypeKey:n,anonymousUuidKey:r}=this._cache.keys;this._cache.removeStore(e),this._cache.removeStore(t);let o=this._cache.getStore(s);if(!o)throw new Error("未登录CloudBase");const i={refresh_token:o},a=await this.request("auth.fetchAccessTokenWithRefreshToken",i);if(a.data.code){const{code:e}=a.data;if("SIGN_PARAM_INVALID"===e||"REFRESH_TOKEN_EXPIRED"===e||"INVALID_REFRESH_TOKEN"===e){if(this._cache.getStore(n)===he.ANONYMOUS&&"INVALID_REFRESH_TOKEN"===e){const e=this._cache.getStore(r),t=this._cache.getStore(s),n=await this.send("auth.signInAnonymously",{anonymous_uuid:e,refresh_token:t});return this.setRefreshToken(n.refresh_token),this._refreshAccessToken()}ne(ie),this._cache.removeStore(s)}throw new Error("刷新access token失败:"+a.data.code)}if(a.data.access_token)return ne(ue),this._cache.setStore(e,a.data.access_token),this._cache.setStore(t,a.data.access_token_expire+Date.now()),{accessToken:a.data.access_token,accessTokenExpire:a.data.access_token_expire};a.data.refresh_token&&(this._cache.removeStore(s),this._cache.setStore(s,a.data.refresh_token),this._refreshAccessToken())}async getAccessToken(){const{accessTokenKey:e,accessTokenExpireKey:t,refreshTokenKey:s}=this._cache.keys;if(!this._cache.getStore(s))throw new Error("refresh token不存在,登录状态异常");let n=this._cache.getStore(e),r=this._cache.getStore(t),o=!0;return this._shouldRefreshAccessTokenHook&&!await this._shouldRefreshAccessTokenHook(n,r)&&(o=!1),(!n||!r||r{e.wxOpenId&&e.wxPublicId&&(t=!0)}),{users:s,hasPrimaryUid:t}}setPrimaryUid(e){return this._request.send("auth.setPrimaryUid",{uid:e})}unlink(e){return this._request.send("auth.unlink",{platform:e})}async update(e){const{nickName:t,gender:s,avatarUrl:n,province:r,country:o,city:i}=e,{data:a}=await this._request.send("auth.updateUserInfo",{nickName:t,gender:s,avatarUrl:n,province:r,country:o,city:i});this.setLocalUserInfo(a)}async refresh(){const{data:e}=await this._request.send("auth.getUserInfo",{});return this.setLocalUserInfo(e),e}setUserInfo(){const{userInfoKey:e}=this._cache.keys,t=this._cache.getStore(e);["uid","loginType","openid","wxOpenId","wxPublicId","unionId","qqMiniOpenId","email","hasPassword","customUserId","nickName","gender","avatarUrl"].forEach(e=>{this[e]=t[e]}),this.location={country:t.country,province:t.province,city:t.city}}setLocalUserInfo(e){const{userInfoKey:t}=this._cache.keys;this._cache.setStore(t,e),this.setUserInfo()}}class ve{constructor(e){if(!e)throw new Error("envId is not defined");this._cache=Q(e);const{refreshTokenKey:t,accessTokenKey:s,accessTokenExpireKey:n}=this._cache.keys,r=this._cache.getStore(t),o=this._cache.getStore(s),i=this._cache.getStore(n);this.credential={refreshToken:r,accessToken:o,accessTokenExpire:i},this.user=new we(e)}get isAnonymousAuth(){return this.loginType===he.ANONYMOUS}get isCustomAuth(){return this.loginType===he.CUSTOM}get isWeixinAuth(){return this.loginType===he.WECHAT||this.loginType===he.WECHAT_OPEN||this.loginType===he.WECHAT_PUBLIC}get loginType(){return this._cache.getStore(this._cache.keys.loginTypeKey)}}class Se extends _e{async signIn(){this._cache.updatePersistence("local");const{anonymousUuidKey:e,refreshTokenKey:t}=this._cache.keys,s=this._cache.getStore(e)||void 0,n=this._cache.getStore(t)||void 0,r=await this._request.send("auth.signInAnonymously",{anonymous_uuid:s,refresh_token:n});if(r.uuid&&r.refresh_token){this._setAnonymousUUID(r.uuid),this.setRefreshToken(r.refresh_token),await this._request.refreshAccessToken(),ne(oe),ne(ae,{env:this.config.env,loginType:he.ANONYMOUS,persistence:"local"});const e=new ve(this.config.env);return await e.user.refresh(),e}throw new Error("匿名登录失败")}async linkAndRetrieveDataWithTicket(e){const{anonymousUuidKey:t,refreshTokenKey:s}=this._cache.keys,n=this._cache.getStore(t),r=this._cache.getStore(s),o=await this._request.send("auth.linkAndRetrieveDataWithTicket",{anonymous_uuid:n,refresh_token:r,ticket:e});if(o.refresh_token)return this._clearAnonymousUUID(),this.setRefreshToken(o.refresh_token),await this._request.refreshAccessToken(),ne(ce,{env:this.config.env}),ne(ae,{loginType:he.CUSTOM,persistence:"local"}),{credential:{refreshToken:o.refresh_token}};throw new Error("匿名转化失败")}_setAnonymousUUID(e){const{anonymousUuidKey:t,loginTypeKey:s}=this._cache.keys;this._cache.removeStore(t),this._cache.setStore(t,e),this._cache.setStore(s,he.ANONYMOUS)}_clearAnonymousUUID(){this._cache.removeStore(this._cache.keys.anonymousUuidKey)}}class ke extends _e{async signIn(e){if("string"!=typeof e)throw new Error("ticket must be a string");const{refreshTokenKey:t}=this._cache.keys,s=await this._request.send("auth.signInWithTicket",{ticket:e,refresh_token:this._cache.getStore(t)||""});if(s.refresh_token)return this.setRefreshToken(s.refresh_token),await this._request.refreshAccessToken(),ne(oe),ne(ae,{env:this.config.env,loginType:he.CUSTOM,persistence:this.config.persistence}),await this.refreshUserInfo(),new ve(this.config.env);throw new Error("自定义登录失败")}}class Te extends _e{async signIn(e,t){if("string"!=typeof e)throw new Error("email must be a string");const{refreshTokenKey:s}=this._cache.keys,n=await this._request.send("auth.signIn",{loginType:"EMAIL",email:e,password:t,refresh_token:this._cache.getStore(s)||""}),{refresh_token:r,access_token:o,access_token_expire:i}=n;if(r)return this.setRefreshToken(r),o&&i?this.setAccessToken(o,i):await this._request.refreshAccessToken(),await this.refreshUserInfo(),ne(oe),ne(ae,{env:this.config.env,loginType:he.EMAIL,persistence:this.config.persistence}),new ve(this.config.env);throw n.code?new Error(`邮箱登录失败: [${n.code}] ${n.message}`):new Error("邮箱登录失败")}async activate(e){return this._request.send("auth.activateEndUserMail",{token:e})}async resetPasswordWithToken(e,t){return this._request.send("auth.resetPasswordWithToken",{token:e,newPassword:t})}}class Pe extends _e{async signIn(e,t){if("string"!=typeof e)throw new Error("username must be a string");"string"!=typeof t&&(t="",console.warn("password is empty"));const{refreshTokenKey:s}=this._cache.keys,n=await this._request.send("auth.signIn",{loginType:he.USERNAME,username:e,password:t,refresh_token:this._cache.getStore(s)||""}),{refresh_token:r,access_token_expire:o,access_token:i}=n;if(r)return this.setRefreshToken(r),i&&o?this.setAccessToken(i,o):await this._request.refreshAccessToken(),await this.refreshUserInfo(),ne(oe),ne(ae,{env:this.config.env,loginType:he.USERNAME,persistence:this.config.persistence}),new ve(this.config.env);throw n.code?new Error(`用户名密码登录失败: [${n.code}] ${n.message}`):new Error("用户名密码登录失败")}}class Ie{constructor(e){this.config=e,this._cache=Q(e.env),this._request=ye(e.env),this._onAnonymousConverted=this._onAnonymousConverted.bind(this),this._onLoginTypeChanged=this._onLoginTypeChanged.bind(this),se(ae,this._onLoginTypeChanged)}get currentUser(){const e=this.hasLoginState();return e&&e.user||null}get loginType(){return this._cache.getStore(this._cache.keys.loginTypeKey)}anonymousAuthProvider(){return new Se(this.config)}customAuthProvider(){return new ke(this.config)}emailAuthProvider(){return new Te(this.config)}usernameAuthProvider(){return new Pe(this.config)}async signInAnonymously(){return new Se(this.config).signIn()}async signInWithEmailAndPassword(e,t){return new Te(this.config).signIn(e,t)}signInWithUsernameAndPassword(e,t){return new Pe(this.config).signIn(e,t)}async linkAndRetrieveDataWithTicket(e){this._anonymousAuthProvider||(this._anonymousAuthProvider=new Se(this.config)),se(ce,this._onAnonymousConverted);return await this._anonymousAuthProvider.linkAndRetrieveDataWithTicket(e)}async signOut(){if(this.loginType===he.ANONYMOUS)throw new Error("匿名用户不支持登出操作");const{refreshTokenKey:e,accessTokenKey:t,accessTokenExpireKey:s}=this._cache.keys,n=this._cache.getStore(e);if(!n)return;const r=await this._request.send("auth.logout",{refresh_token:n});return this._cache.removeStore(e),this._cache.removeStore(t),this._cache.removeStore(s),ne(oe),ne(ae,{env:this.config.env,loginType:he.NULL,persistence:this.config.persistence}),r}async signUpWithEmailAndPassword(e,t){return this._request.send("auth.signUpWithEmailAndPassword",{email:e,password:t})}async sendPasswordResetEmail(e){return this._request.send("auth.sendPasswordResetEmail",{email:e})}onLoginStateChanged(e){se(oe,()=>{const t=this.hasLoginState();e.call(this,t)});const t=this.hasLoginState();e.call(this,t)}onLoginStateExpired(e){se(ie,e.bind(this))}onAccessTokenRefreshed(e){se(ue,e.bind(this))}onAnonymousConverted(e){se(ce,e.bind(this))}onLoginTypeChanged(e){se(ae,()=>{const t=this.hasLoginState();e.call(this,t)})}async getAccessToken(){return{accessToken:(await this._request.getAccessToken()).accessToken,env:this.config.env}}hasLoginState(){const{refreshTokenKey:e}=this._cache.keys;return this._cache.getStore(e)?new ve(this.config.env):null}async isUsernameRegistered(e){if("string"!=typeof e)throw new Error("username must be a string");const{data:t}=await this._request.send("auth.isUsernameRegistered",{username:e});return t&&t.isRegistered}getLoginState(){return Promise.resolve(this.hasLoginState())}async signInWithTicket(e){return new ke(this.config).signIn(e)}shouldRefreshAccessToken(e){this._request._shouldRefreshAccessTokenHook=e.bind(this)}getUserInfo(){return this._request.send("auth.getUserInfo",{}).then(e=>e.code?e:{...e.data,requestId:e.seqId})}getAuthHeader(){const{refreshTokenKey:e,accessTokenKey:t}=this._cache.keys,s=this._cache.getStore(e);return{"x-cloudbase-credentials":this._cache.getStore(t)+"/@@/"+s}}_onAnonymousConverted(e){const{env:t}=e.data;t===this.config.env&&this._cache.updatePersistence(this.config.persistence)}_onLoginTypeChanged(e){const{loginType:t,persistence:s,env:n}=e.data;n===this.config.env&&(this._cache.updatePersistence(s),this._cache.setStore(this._cache.keys.loginTypeKey,t))}}const Ae=function(e,t){t=t||j();const s=ye(this.config.env),{cloudPath:n,filePath:r,onUploadProgress:o,fileType:i="image"}=e;return s.send("storage.getUploadMetadata",{path:n}).then(e=>{const{data:{url:a,authorization:c,token:u,fileId:h,cosFileId:l},requestId:d}=e,f={key:n,signature:c,"x-cos-meta-fileid":l,success_action_status:"201","x-cos-security-token":u};s.upload({url:a,data:f,file:r,name:n,fileType:i,onUploadProgress:o}).then(e=>{201===e.statusCode?t(null,{fileID:h,requestId:d}):t(new Error("STORAGE_REQUEST_FAIL: "+e.data))}).catch(e=>{t(e)})}).catch(e=>{t(e)}),t.promise},Ee=function(e,t){t=t||j();const s=ye(this.config.env),{cloudPath:n}=e;return s.send("storage.getUploadMetadata",{path:n}).then(e=>{t(null,e)}).catch(e=>{t(e)}),t.promise},Oe=function({fileList:e},t){if(t=t||j(),!e||!Array.isArray(e))return{code:"INVALID_PARAM",message:"fileList必须是非空的数组"};for(let t of e)if(!t||"string"!=typeof t)return{code:"INVALID_PARAM",message:"fileList的元素必须是非空的字符串"};const s={fileid_list:e};return ye(this.config.env).send("storage.batchDeleteFile",s).then(e=>{e.code?t(null,e):t(null,{fileList:e.data.delete_list,requestId:e.requestId})}).catch(e=>{t(e)}),t.promise},Ue=function({fileList:e},t){t=t||j(),e&&Array.isArray(e)||t(null,{code:"INVALID_PARAM",message:"fileList必须是非空的数组"});let s=[];for(let n of e)"object"==typeof n?(n.hasOwnProperty("fileID")&&n.hasOwnProperty("maxAge")||t(null,{code:"INVALID_PARAM",message:"fileList的元素必须是包含fileID和maxAge的对象"}),s.push({fileid:n.fileID,max_age:n.maxAge})):"string"==typeof n?s.push({fileid:n}):t(null,{code:"INVALID_PARAM",message:"fileList的元素必须是字符串"});const n={file_list:s};return ye(this.config.env).send("storage.batchGetDownloadUrl",n).then(e=>{e.code?t(null,e):t(null,{fileList:e.data.download_list,requestId:e.requestId})}).catch(e=>{t(e)}),t.promise},be=async function({fileID:e},t){const s=(await Ue.call(this,{fileList:[{fileID:e,maxAge:600}]})).fileList[0];if("SUCCESS"!==s.code)return t?t(s):new Promise(e=>{e(s)});const n=ye(this.config.env);let r=s.download_url;if(r=encodeURI(r),!t)return n.download({url:r});t(await n.download({url:r}))},De=function({name:e,data:t,query:s,parse:n,search:r},o){const i=o||j();let a;try{a=t?JSON.stringify(t):""}catch(e){return Promise.reject(e)}if(!e)return Promise.reject(new Error("函数名不能为空"));const c={inQuery:s,parse:n,search:r,function_name:e,request_data:a};return ye(this.config.env).send("functions.invokeFunction",c).then(e=>{if(e.code)i(null,e);else{let t=e.data.response_data;if(n)i(null,{result:t,requestId:e.requestId});else try{t=JSON.parse(e.data.response_data),i(null,{result:t,requestId:e.requestId})}catch(e){i(new Error("response data must be json"))}}return i.promise}).catch(e=>{i(e)}),i.promise},Ce={timeout:15e3,persistence:"session"},xe={};class qe{constructor(e){this.config=e||this.config,this.authObj=void 0}init(e){switch(W.adapter||(this.requestClient=new W.adapter.reqClass({timeout:e.timeout||5e3,timeoutMsg:`请求在${(e.timeout||5e3)/1e3}s内未完成,已中断`})),this.config={...Ce,...e},!0){case this.config.timeout>6e5:console.warn("timeout大于可配置上限[10分钟],已重置为上限数值"),this.config.timeout=6e5;break;case this.config.timeout<100:console.warn("timeout小于可配置下限[100ms],已重置为下限数值"),this.config.timeout=100}return new qe(this.config)}auth({persistence:e}={}){if(this.authObj)return this.authObj;const t=e||W.adapter.primaryStorage||Ce.persistence;var s;return t!==this.config.persistence&&(this.config.persistence=t),function(e){const{env:t}=e;X[t]=new Y(e),G[t]=new Y({...e,persistence:"local"})}(this.config),s=this.config,me[s.env]=new ge(s),this.authObj=new Ie(this.config),this.authObj}on(e,t){return se.apply(this,[e,t])}off(e,t){return re.apply(this,[e,t])}callFunction(e,t){return De.apply(this,[e,t])}deleteFile(e,t){return Oe.apply(this,[e,t])}getTempFileURL(e,t){return Ue.apply(this,[e,t])}downloadFile(e,t){return be.apply(this,[e,t])}uploadFile(e,t){return Ae.apply(this,[e,t])}getUploadMetadata(e,t){return Ee.apply(this,[e,t])}registerExtension(e){xe[e.name]=e}async invokeExtension(e,t){const s=xe[e];if(!s)throw Error(`扩展${e} 必须先注册`);return await s.invoke(t,this)}useAdapters(e){const{adapter:t,runtime:s}=H(e)||{};t&&(W.adapter=t),s&&(W.runtime=s)}}const Re=new qe;function Fe(e,t,s){void 0===s&&(s={});var n=/\?/.test(t),r="";for(var o in s)""===r?!n&&(t+="?"):r+="&",r+=o+"="+encodeURIComponent(s[o]);return/^http(s)?:\/\//.test(t+=r)?t:""+e+t}class Le{post(e){const{url:t,data:s,headers:n}=e;return new Promise((e,r)=>{x.request({url:Fe("https:",t),data:s,method:"POST",header:n,success(t){e(t)},fail(e){r(e)}})})}upload(e){return new Promise((t,s)=>{const{url:n,file:r,data:o,headers:i,fileType:a}=e,c=x.uploadFile({url:Fe("https:",n),name:"file",formData:Object.assign({},o),filePath:r,fileType:a,header:i,success(e){const s={statusCode:e.statusCode,data:e.data||{}};200===e.statusCode&&o.success_action_status&&(s.statusCode=parseInt(o.success_action_status,10)),t(s)},fail(e){v&&"mp-alipay"===S&&console.warn("支付宝小程序开发工具上传腾讯云时无法准确判断是否上传成功,请使用真机测试"),s(new Error(e.errMsg||"uploadFile:fail"))}});"function"==typeof e.onUploadProgress&&c&&"function"==typeof c.onProgressUpdate&&c.onProgressUpdate(t=>{e.onUploadProgress({loaded:t.totalBytesSent,total:t.totalBytesExpectedToSend})})})}}const Ne={setItem(e,t){x.setStorageSync(e,t)},getItem:e=>x.getStorageSync(e),removeItem(e){x.removeStorageSync(e)},clear(){x.clearStorageSync()}};const Me={genAdapter:function(){return{root:{},reqClass:Le,localStorage:Ne,primaryStorage:"local"}},isMatch:function(){return!0},runtime:"uni_app"};Re.useAdapters(Me);const je=Re,$e=je.init;je.init=function(e){e.env=e.spaceId;const t=$e.call(this,e);t.config.provider="tencent",t.config.spaceId=e.spaceId;const s=t.auth;return t.auth=function(e){const t=s.call(this,e);return["linkAndRetrieveDataWithTicket","signInAnonymously","signOut","getAccessToken","getLoginState","signInWithTicket","getUserInfo"].forEach(e=>{t[e]=p(t[e]).bind(t)}),t},t.customAuth=t.auth,t};class Ke extends q{getAccessToken(){return new Promise((e,t)=>{this.setAccessToken("Anonymous_Access_token"),e("Anonymous_Access_token")})}setupRequest(e,t){const s=Object.assign({},e,{spaceId:this.config.spaceId,timestamp:Date.now()}),n={"Content-Type":"application/json"};"auth"!==t&&(s.token=this.accessToken,n["x-basement-token"]=this.accessToken),n["x-serverless-sign"]=C.sign(s,this.config.clientSecret);const r=U(),{APPID:o,PLATFORM:i,DEVICEID:a,CLIENT_SDK_VERSION:c}=r;return n["x-client-platform"]=i,n["x-client-appid"]=o,n["x-client-device-id"]=a,n["x-client-version"]=c,n["x-client-token"]=x.getStorageSync("uni_id_token"),{url:this.config.requestUrl,method:"POST",data:s,dataType:"json",header:JSON.parse(JSON.stringify(n))}}uploadFileToOSS({url:e,formData:t,name:s,filePath:n,fileType:r,onUploadProgress:o}){return new Promise((i,a)=>{const c=this.adapter.uploadFile({url:e,formData:t,name:s,filePath:n,fileType:r,success(e){e&&e.statusCode<400?i(e):a(new g({code:"UPLOAD_FAILED",message:"文件上传失败"}))},fail(e){a(new g({code:e.code||"UPLOAD_FAILED",message:e.message||e.errMsg||"文件上传失败"}))}});"function"==typeof o&&c&&"function"==typeof c.onProgressUpdate&&c.onProgressUpdate(e=>{o({loaded:e.totalBytesSent,total:e.totalBytesExpectedToSend})})})}uploadFile({filePath:e,cloudPath:t,fileType:s="image",onUploadProgress:n}){if(!t)throw new g({code:"CLOUDPATH_REQUIRED",message:"cloudPath不可为空"});let r;return this.getOSSUploadOptionsFromPath({cloudPath:t}).then(t=>{const{url:o,formData:i,name:a,fileUrl:c}=t.result;r=c;const u={url:o,formData:i,name:a,filePath:e,fileType:s};return this.uploadFileToOSS(Object.assign({},u,{onUploadProgress:n}))}).then(()=>this.reportOSSUpload({cloudPath:t})).then(t=>new Promise((s,n)=>{t.success?s({success:!0,filePath:e,fileID:r}):n(new g({code:"UPLOAD_FAILED",message:"文件上传失败"}))}))}}const Be={init(e){const t=new Ke(e),s={signInAnonymously:function(){return t.authorize()},getLoginState:function(){return Promise.resolve(!1)}};return t.auth=function(){return s},t.customAuth=t.auth,t}};let He,We;function ze({name:e,data:t,spaceId:s,provider:n}){He||(He=U(),We={ak:I.appid,p:"android"===E?"a":"i",ut:D(),uuid:b()});const r=JSON.parse(JSON.stringify(t||{})),o=e,i=s,a={tencent:"t",aliyun:"a"}[n];{const e=Object.assign({},We,{fn:o,sid:i,pvd:a});Object.assign(r,{clientInfo:He,uniCloudClientInfo:encodeURIComponent(JSON.stringify(e))});const{deviceId:t}=uni.getSystemInfoSync();r.uniCloudDeviceId=t}if(!r.uniIdToken){const e=x.getStorageSync("uni_id_token")||x.getStorageSync("uniIdToken");e&&(r.uniIdToken=e)}return r}function Ve({name:e,data:t}){const{localAddress:s,localPort:n}=this,r={aliyun:"aliyun",tencent:"tcb"}[this.config.provider],o=this.config.spaceId,i=`http://${s}:${n}/system/check-function`,a=`http://${s}:${n}/cloudfunctions/${e}`;return new Promise((t,s)=>{x.request({method:"POST",url:i,data:{name:e,platform:S,provider:r,spaceId:o},timeout:3e3,success(e){t(e)},fail(){t({data:{code:"NETWORK_ERROR",message:"连接本地调试服务失败,请检查客户端是否和主机在同一局域网下,自动切换为已部署的云函数。"}})}})}).then(({data:e}={})=>{const{code:t,message:s}=e||{};return{code:0===t?0:t||"SYS_ERR",message:s||"SYS_ERR"}}).then(({code:s,message:n})=>{if(0!==s){switch(s){case"MODULE_ENCRYPTED":console.error(`此云函数(${e})依赖加密公共模块不可本地调试,自动切换为云端已部署的云函数`);break;case"FUNCTION_ENCRYPTED":console.error(`此云函数(${e})已加密不可本地调试,自动切换为云端已部署的云函数`);break;case"ACTION_ENCRYPTED":console.error(n||"需要访问加密的uni-clientDB-action,自动切换为云端环境");break;case"NETWORK_ERROR":{const e="连接本地调试服务失败,请检查客户端是否和主机在同一局域网下";throw console.error(e),new Error(e)}case"SWITCH_TO_CLOUD":break;default:{const e=`检测本地调试服务出现错误:${n},请检查网络环境或重启客户端再试`;throw console.error(e),new Error(e)}}return this._originCallFunction({name:e,data:t})}return new Promise((s,n)=>{const i=ze({name:e,data:t,provider:this.config.provider,spaceId:o});x.request({method:"POST",url:a,data:{provider:r,platform:S,param:i},success:({statusCode:e,data:t}={})=>!e||e>=400?n(new g({code:t.code||"SYS_ERR",message:t.message||"request:fail"})):s({result:t}),fail(e){n(new g({code:e.code||e.errCode||"SYS_ERR",message:e.message||e.errMsg||"request:fail"}))}})})})}const Je=[{rule:/fc_function_not_found|FUNCTION_NOT_FOUND/,content:",云函数[{functionName}]在云端不存在,请检查此云函数名称是否正确以及该云函数是否已上传到服务空间",mode:"append"}];var Ye=/[\\^$.*+?()[\]{}|]/g,Xe=RegExp(Ye.source);function Ge(e,t,s){return e.replace(new RegExp((n=t)&&Xe.test(n)?n.replace(Ye,"\\$&"):n,"g"),s);var n}function Qe({functionName:e,result:t,logPvd:s}){if(this.config.useDebugFunction&&t&&t.requestId){const n=JSON.stringify({spaceId:this.config.spaceId,functionName:e,requestId:t.requestId});console.log(`[${s}-request]${n}[/${s}-request]`)}}function Ze(e){const t=e.callFunction,s=function(e){const s=e.name;e.data=ze({name:s,data:e.data,provider:this.config.provider,spaceId:this.config.spaceId});const n={aliyun:"aliyun",tencent:"tcb"}[this.config.provider];return t.call(this,e).then(e=>(Qe.call(this,{functionName:s,result:e,logPvd:n}),Promise.resolve(e)),t=>(Qe.call(this,{functionName:s,result:t,logPvd:n}),t&&t.message&&(t.message=function({message:e="",extraInfo:t={},formatter:s=[]}={}){for(let n=0;n(console.warn("当前返回结果为Promise类型,不可直接访问其result属性,详情请参考:https://uniapp.dcloud.net.cn/uniCloud/faq?id=promise"),{})}),n}}const et=Symbol("CLIENT_DB_INTERNAL");function tt(e,t){return e.then="DoNotReturnProxyWithAFunctionNamedThen",e._internalType=et,new Proxy(e,{get:(e,s,n)=>function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}(e,s)||e[s]||"string"!=typeof s?e[s]:t.get(e,s,n)})}function st(e){switch(o(e)){case"array":return e.map(e=>st(e));case"object":return e._internalType===et||Object.keys(e).forEach(t=>{e[t]=st(e[t])}),e;case"regexp":return{$regexp:{source:e.source,flags:e.flags}};case"date":return{$date:e.toISOString()};default:return e}}function nt(){const e=x.getStorageSync("uni_id_token")||"",t=e.split(".");if(!e||3!==t.length)return{uid:null,role:[],permission:[],tokenExpired:0};let s;try{s=JSON.parse((n=t[1],decodeURIComponent(atob(n).split("").map((function(e){return"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2)})).join(""))))}catch(e){throw new Error("获取当前用户信息出错,详细错误信息为:"+e.message)}var n;return s.tokenExpired=1e3*s.exp,delete s.exp,delete s.iat,s}var rt=t(s((function(e,t){Object.defineProperty(t,"__esModule",{value:!0});const s="chooseAndUploadFile:fail";function n(e,t){return e.tempFiles.forEach((e,s)=>{e.name||(e.name=e.path.substring(e.path.lastIndexOf("/")+1)),t&&(e.fileType=t),e.cloudPath=Date.now()+"_"+s+e.name.substring(e.name.lastIndexOf("."))}),e.tempFilePaths||(e.tempFilePaths=e.tempFiles.map(e=>e.path)),e}function r(e,t,{onChooseFile:s,onUploadProgress:n}){return t.then(e=>{if(s){const t=s(e);if(void 0!==t)return Promise.resolve(t).then(t=>void 0===t?e:t)}return e}).then(t=>!1===t?{errMsg:"chooseAndUploadFile:ok",tempFilePaths:[],tempFiles:[]}:function(e,t,s=5,n){(t=Object.assign({},t)).errMsg="chooseAndUploadFile:ok";const r=t.tempFiles,o=r.length;let i=0;return new Promise(a=>{for(;i=o)return void(!r.find(e=>!e.url&&!e.errMsg)&&a(t));const u=r[s];e.uploadFile({filePath:u.path,cloudPath:u.cloudPath,fileType:u.fileType,onUploadProgress(e){e.index=s,e.tempFile=u,e.tempFilePath=u.path,n&&n(e)}}).then(e=>{u.url=e.fileID,s{u.errMsg=e.errMsg||e.message,s{uni.chooseImage({count:t,sizeType:r,sourceType:o,extension:i,success(t){e(n(t,"image"))},fail(e){a({errMsg:e.errMsg.replace("chooseImage:fail",s)})}})})}(t),t):"video"===t.type?r(e,function(e){const{camera:t,compressed:r,maxDuration:o,sourceType:i,extension:a}=e;return new Promise((e,c)=>{uni.chooseVideo({camera:t,compressed:r,maxDuration:o,sourceType:i,extension:a,success(t){const{tempFilePath:s,duration:r,size:o,height:i,width:a}=t;e(n({errMsg:"chooseVideo:ok",tempFilePaths:[s],tempFiles:[{name:t.tempFile&&t.tempFile.name||"",path:s,size:o,type:t.tempFile&&t.tempFile.type||"",width:a,height:i,duration:r,fileType:"video",cloudPath:""}]},"video"))},fail(e){c({errMsg:e.errMsg.replace("chooseVideo:fail",s)})}})})}(t),t):r(e,function(e){const{count:t,extension:r}=e;return new Promise((e,o)=>{let i=uni.chooseFile;if("undefined"!=typeof wx&&"function"==typeof wx.chooseMessageFile&&(i=wx.chooseMessageFile),"function"!=typeof i)return o({errMsg:s+" 请指定 type 类型,该平台仅支持选择 image 或 video。"});i({type:"all",count:t,extension:r,success(t){e(n(t))},fail(e){o({errMsg:e.errMsg.replace("chooseFile:fail",s)})}})})}(t),t)}}})));const ot="manual";function it(e){return{props:{localdata:{type:Array,default:()=>[]},options:{type:[Object,Array],default:()=>({})},collection:{type:String,default:""},action:{type:String,default:""},field:{type:String,default:""},orderby:{type:String,default:""},where:{type:[String,Object],default:""},pageData:{type:String,default:"add"},pageCurrent:{type:Number,default:1},pageSize:{type:Number,default:20},getcount:{type:[Boolean,String],default:!1},gettree:{type:[Boolean,String],default:!1},gettreepath:{type:[Boolean,String],default:!1},startwith:{type:String,default:""},limitlevel:{type:Number,default:10},groupby:{type:String,default:""},groupField:{type:String,default:""},distinct:{type:[Boolean,String],default:!1},foreignKey:{type:String,default:""},loadtime:{type:String,default:"auto"},manual:{type:Boolean,default:!1}},data:()=>({mixinDatacomLoading:!1,mixinDatacomHasMore:!1,mixinDatacomResData:[],mixinDatacomErrorMessage:"",mixinDatacomPage:{}}),created(){this.mixinDatacomPage={current:this.pageCurrent,size:this.pageSize,count:0},this.$watch(()=>{var e=[];return["pageCurrent","pageSize","localdata","collection","action","field","orderby","where","getont","getcount","gettree","groupby","groupField","distinct"].forEach(t=>{e.push(this[t])}),e},(e,t)=>{if(this.loadtime===ot)return;let s=!1;const n=[];for(let r=2;r{this.mixinDatacomLoading=!1;const{data:n,count:r}=s.result;this.getcount&&(this.mixinDatacomPage.count=r),this.mixinDatacomHasMore=n.length{this.mixinDatacomLoading=!1,this.mixinDatacomErrorMessage=e,s&&s(e)}))},mixinDatacomGet(t={}){let s=e.database();const n=t.action||this.action;n&&(s=s.action(n));const r=t.collection||this.collection;s=s.collection(r);const o=t.where||this.where;o&&Object.keys(o).length&&(s=s.where(o));const i=t.field||this.field;i&&(s=s.field(i));const a=t.foreignKey||this.foreignKey;a&&(s=s.foreignKey(a));const c=t.groupby||this.groupby;c&&(s=s.groupBy(c));const u=t.groupField||this.groupField;u&&(s=s.groupField(u));!0===(void 0!==t.distinct?t.distinct:this.distinct)&&(s=s.distinct());const h=t.orderby||this.orderby;h&&(s=s.orderBy(h));const l=void 0!==t.pageCurrent?t.pageCurrent:this.mixinDatacomPage.current,d=void 0!==t.pageSize?t.pageSize:this.mixinDatacomPage.size,f=void 0!==t.getcount?t.getcount:this.getcount,p=void 0!==t.gettree?t.gettree:this.gettree,g=void 0!==t.gettreepath?t.gettreepath:this.gettreepath,m={getCount:f},y={limitLevel:void 0!==t.limitlevel?t.limitlevel:this.limitlevel,startWith:void 0!==t.startwith?t.startwith:this.startwith};return p&&(m.getTree=y),g&&(m.getTreePath=y),s=s.skip(d*(l-1)).limit(d).get(m),s}}}}async function at(e,t){const s=`http://${e}:${t}/system/ping`;try{const e=await(n={url:s,timeout:500},new Promise((e,t)=>{x.request({...n,success(t){e(t)},fail(e){t(e)}})}));return!(!e.data||0!==e.data.code)}catch(e){return!1}var n}let ct=new class{init(e){let t={};const s=!1!==e.debugFunction&&v&&("h5"===S&&navigator.userAgent.indexOf("HBuilderX")>0||"app-plus"===S);switch(e.provider){case"tencent":t=je.init(Object.assign(e,{useDebugFunction:s}));break;case"aliyun":t=R.init(Object.assign(e,{useDebugFunction:s}));break;case"private":t=Be.init(Object.assign(e,{useDebugFunction:s}));break;default:throw new Error("未提供正确的provider参数")}const n=k;v&&n&&!n.code&&(t.debugInfo=n),t.isReady=!1;const r=t.auth();t.initUniCloud=r.getLoginState().then(e=>e?Promise.resolve():r.signInAnonymously()).then(()=>{if(v&&t.debugInfo){const{address:e,servePort:s}=t.debugInfo;return async function(e,t){let s;for(let n=0;n{if(!v)return Promise.resolve();if(e)t.localAddress=e,t.localPort=s;else if(t.debugInfo){const e=console["app-plus"===S?"error":"warn"];"remote"===t.debugInfo.initialLaunchType?(t.debugInfo.forceRemote=!0,e("当前客户端和HBuilderX不在同一局域网下(或其他网络原因无法连接HBuilderX),uniCloud本地调试服务不对当前客户端生效。\n- 如果不使用uniCloud本地调试服务,请直接忽略此信息。\n- 如需使用uniCloud本地调试服务,请将客户端与主机连接到同一局域网下并重新运行到客户端。\n- 如果在HBuilderX开启的状态下切换过网络环境,请重启HBuilderX后再试\n- 检查系统防火墙是否拦截了HBuilderX自带的nodejs")):e("无法连接uniCloud本地调试服务,请检查当前客户端是否与主机在同一局域网下。\n- 如需使用uniCloud本地调试服务,请将客户端与主机连接到同一局域网下并重新运行到客户端。\n- 如果在HBuilderX开启的状态下切换过网络环境,请重启HBuilderX后再试\n- 检查系统防火墙是否拦截了HBuilderX自带的nodejs")}}).then(()=>(function(){if(!v||"h5"!==S)return;if(uni.getStorageSync("__LAST_DCLOUD_APPID")===I.appid)return;uni.setStorageSync("__LAST_DCLOUD_APPID",I.appid),uni.removeStorageSync("uni_id_token")&&(console.warn("检测到当前项目与上次运行到此端口的项目不一致,自动清理uni-id保存的token信息(仅开发调试时生效)"),uni.removeStorageSync("uni_id_token"),uni.removeStorageSync("uni_id_token_expired"))}(),new Promise(e=>{"quickapp-native"===S?(E="android",uni.getStorage({key:"__DC_CLOUD_UUID",success(t){A=t.data?t.data:O(32),e()}})):setTimeout(()=>{E=uni.getSystemInfoSync().platform,A=uni.getStorageSync("__DC_CLOUD_UUID")||O(32),e()},0)}))).then(()=>{t.isReady=!0}),Ze(t),function(e){const t=e.uploadFile;e.uploadFile=function(e){let s;return s=this.isReady?Promise.resolve():this.initUniCloud,s.then(()=>t.call(this,e))}}(t),function(e){e.database=function(){if(this._database)return this._database;const t={},s={};class n{constructor(e,t,s){this.content=e,this.prevStage=t,this.actionName=s}toJSON(){let e=this;const t=[e.content];for(;e.prevStage;)e=e.prevStage,t.push(e.content);return{$db:t.reverse().map(e=>({$method:e.$method,$param:e.$param}))}}get useAggregate(){let e=this,t=!1;for(;e.prevStage;){e=e.prevStage;const s=e.content.$method;if("aggregate"===s||"pipeline"===s){t=!0;break}}return t}get count(){if(!this.useAggregate)return function(){return this._send("count",Array.from(arguments))};const e=this;return function(){return i({$method:"count",$param:st(Array.from(arguments))},e,e.actionName)}}get(){return this._send("get",Array.from(arguments))}add(){return this._send("add",Array.from(arguments))}remove(){return this._send("remove",Array.from(arguments))}update(){return this._send("update",Array.from(arguments))}end(){return this._send("end",Array.from(arguments))}set(){throw new Error("clientDB禁止使用set方法")}_send(n,r){const o=d(f("database","invoke")),i=this.toJSON();return i.$db.push({$method:n,$param:st(r)}),o.then(()=>e.callFunction({name:"DCloud-clientDB",data:{action:this.actionName,command:i}}).then(e=>{const{code:n,message:r,token:o,tokenExpired:i,systemInfo:c=[]}=e.result;if(c)for(let e=0;e{e({token:o,tokenExpired:i})}),o&&i&&s.refreshToken&&s.refreshToken.forEach(e=>{e({token:o,tokenExpired:i})});const u=e.result.affectedDocs;return"number"==typeof u&&Object.defineProperty(e.result,"affectedDocs",{get:()=>(console.warn("affectedDocs不再推荐使用,请使用inserted/deleted/updated/data.length替代"),u)}),d(f("database","success"),e).then(()=>d(f("database","complete"),e)).then(()=>Promise.resolve(e))},e=>{const t=new a(e.message,e.code||"SYSTEM_ERROR");return s.error&&s.error.forEach(e=>{e(t)}),/fc_function_not_found|FUNCTION_NOT_FOUND/g.test(e.message)&&console.warn("clientDB未初始化,请在web控制台保存一次schema以开启clientDB"),d(f("database","fail"),e).then(()=>d(f("database","complete"),e)).then(()=>Promise.reject(e))}))}}const r=["db.Geo","db.command","command.aggregate"];function o(e,t){return r.indexOf(`${e}.${t}`)>-1}function i(e,t,s){return tt(new n(e,t,s),{get(e,t){let n="db";return e&&e.content&&(n=e.content.$method),o(n,t)?i({$method:t},e,s):function(){return i({$method:t,$param:st(Array.from(arguments))},e,s)}}})}function c({path:e,method:t}){return class{constructor(){this.param=Array.from(arguments)}toJSON(){return{$newDb:[...e.map(e=>({$method:e})),{$method:t,$param:this.param}]}}}}const u={auth:{on:(e,s)=>{t[e]=t[e]||[],t[e].indexOf(s)>-1||t[e].push(s)},off:(e,s)=>{t[e]=t[e]||[];const n=t[e].indexOf(s);-1!==n&&t[e].splice(n,1)}},on:(e,t)=>{s[e]=s[e]||[],s[e].indexOf(t)>-1||s[e].push(t)},off:(e,t)=>{s[e]=s[e]||[];const n=s[e].indexOf(t);-1!==n&&s[e].splice(n,1)},env:tt({},{get:(e,t)=>({$env:t})}),action:e=>tt({},{get:(t,s)=>o("db",s)?i({$method:s},null,e):function(){return i({$method:s,$param:st(Array.from(arguments))},null,e)}}),Geo:tt({},{get:(e,t)=>c({path:["Geo"],method:t})}),getCloudEnv:function(e){if("string"!=typeof e||!e.trim())throw new Error("getCloudEnv参数错误");return{$env:e.replace("$cloudEnv_","")}},get serverDate(){return c({path:[],method:"serverDate"})},get RegExp(){return c({path:[],method:"RegExp"})}},h=tt(u,{get:(e,t)=>o("db",t)?i({$method:t}):function(){return i({$method:t,$param:st(Array.from(arguments))})}});return this._database=h,h}}(t),function(e){e.getCurrentUserInfo=nt,e.chooseAndUploadFile=rt.initChooseAndUploadFile(e),Object.assign(e,{get mixinDatacom(){return it(e)}})}(t);return["callFunction","uploadFile","deleteFile","getTempFileURL","downloadFile","chooseAndUploadFile"].forEach(e=>{t[e]&&(t[e]=p(t[e],e))}),t.init=this.init,t}};(()=>{{const e=T;let t={};if(1===e.length)t=e[0],ct=ct.init(t);else{const t=["auth","callFunction","uploadFile","deleteFile","getTempFileURL","downloadFile","database","getCurrentUSerInfo"];let s;s=e&&e.length>0?"应用有多个服务空间,请通过uniCloud.init方法指定要使用的服务空间":P?"应用未关联服务空间,请在uniCloud目录右键关联服务空间":"uni-app cli项目内使用uniCloud需要使用HBuilderX的运行菜单运行项目,且需要在uniCloud目录关联服务空间",t.forEach(e=>{ct[e]=function(){return console.error(s),Promise.reject(new g({code:"SYS_ERR",message:s}))}})}Object.assign(ct,{get mixinDatacom(){return it(ct)}}),ct.addInterceptor=h,ct.removeInterceptor=l,v&&"h5"===S&&(window.uniCloud=ct)}})();var ut=ct;export default ut;
+import{initVueI18n as e}from"@dcloudio/uni-i18n";"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;function t(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function s(e,t,s){return e(s={path:t,exports:{},require:function(e,t){return function(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}(null==t&&s.path)}},s.exports),s.exports}var n=s((function(e,t){var s;e.exports=(s=s||function(e,t){var s=Object.create||function(){function e(){}return function(t){var s;return e.prototype=t,s=new e,e.prototype=null,s}}(),n={},r=n.lib={},o=r.Base={extend:function(e){var t=s(this);return e&&t.mixIn(e),t.hasOwnProperty("init")&&this.init!==t.init||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},i=r.WordArray=o.extend({init:function(e,t){e=this.words=e||[],this.sigBytes=null!=t?t:4*e.length},toString:function(e){return(e||c).stringify(this)},concat:function(e){var t=this.words,s=e.words,n=this.sigBytes,r=e.sigBytes;if(this.clamp(),n%4)for(var o=0;o>>2]>>>24-o%4*8&255;t[n+o>>>2]|=i<<24-(n+o)%4*8}else for(o=0;o>>2]=s[o>>>2];return this.sigBytes+=r,this},clamp:function(){var t=this.words,s=this.sigBytes;t[s>>>2]&=4294967295<<32-s%4*8,t.length=e.ceil(s/4)},clone:function(){var e=o.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var s,n=[],r=function(t){t=t;var s=987654321,n=4294967295;return function(){var r=((s=36969*(65535&s)+(s>>16)&n)<<16)+(t=18e3*(65535&t)+(t>>16)&n)&n;return r/=4294967296,(r+=.5)*(e.random()>.5?1:-1)}},o=0;o>>2]>>>24-r%4*8&255;n.push((o>>>4).toString(16)),n.push((15&o).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,s=[],n=0;n>>3]|=parseInt(e.substr(n,2),16)<<24-n%8*4;return new i.init(s,t/2)}},u=a.Latin1={stringify:function(e){for(var t=e.words,s=e.sigBytes,n=[],r=0;r>>2]>>>24-r%4*8&255;n.push(String.fromCharCode(o))}return n.join("")},parse:function(e){for(var t=e.length,s=[],n=0;n>>2]|=(255&e.charCodeAt(n))<<24-n%4*8;return new i.init(s,t)}},h=a.Utf8={stringify:function(e){try{return decodeURIComponent(escape(u.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return u.parse(unescape(encodeURIComponent(e)))}},l=r.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new i.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=h.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var s=this._data,n=s.words,r=s.sigBytes,o=this.blockSize,a=r/(4*o),c=(a=t?e.ceil(a):e.max((0|a)-this._minBufferSize,0))*o,u=e.min(4*c,r);if(c){for(var h=0;h>>24)|4278255360&(r<<24|r>>>8)}var o=this._hash.words,i=e[t+0],c=e[t+1],f=e[t+2],p=e[t+3],g=e[t+4],m=e[t+5],y=e[t+6],_=e[t+7],w=e[t+8],v=e[t+9],S=e[t+10],k=e[t+11],T=e[t+12],P=e[t+13],I=e[t+14],A=e[t+15],E=o[0],O=o[1],U=o[2],b=o[3];E=u(E,O,U,b,i,7,a[0]),b=u(b,E,O,U,c,12,a[1]),U=u(U,b,E,O,f,17,a[2]),O=u(O,U,b,E,p,22,a[3]),E=u(E,O,U,b,g,7,a[4]),b=u(b,E,O,U,m,12,a[5]),U=u(U,b,E,O,y,17,a[6]),O=u(O,U,b,E,_,22,a[7]),E=u(E,O,U,b,w,7,a[8]),b=u(b,E,O,U,v,12,a[9]),U=u(U,b,E,O,S,17,a[10]),O=u(O,U,b,E,k,22,a[11]),E=u(E,O,U,b,T,7,a[12]),b=u(b,E,O,U,P,12,a[13]),U=u(U,b,E,O,I,17,a[14]),E=h(E,O=u(O,U,b,E,A,22,a[15]),U,b,c,5,a[16]),b=h(b,E,O,U,y,9,a[17]),U=h(U,b,E,O,k,14,a[18]),O=h(O,U,b,E,i,20,a[19]),E=h(E,O,U,b,m,5,a[20]),b=h(b,E,O,U,S,9,a[21]),U=h(U,b,E,O,A,14,a[22]),O=h(O,U,b,E,g,20,a[23]),E=h(E,O,U,b,v,5,a[24]),b=h(b,E,O,U,I,9,a[25]),U=h(U,b,E,O,p,14,a[26]),O=h(O,U,b,E,w,20,a[27]),E=h(E,O,U,b,P,5,a[28]),b=h(b,E,O,U,f,9,a[29]),U=h(U,b,E,O,_,14,a[30]),E=l(E,O=h(O,U,b,E,T,20,a[31]),U,b,m,4,a[32]),b=l(b,E,O,U,w,11,a[33]),U=l(U,b,E,O,k,16,a[34]),O=l(O,U,b,E,I,23,a[35]),E=l(E,O,U,b,c,4,a[36]),b=l(b,E,O,U,g,11,a[37]),U=l(U,b,E,O,_,16,a[38]),O=l(O,U,b,E,S,23,a[39]),E=l(E,O,U,b,P,4,a[40]),b=l(b,E,O,U,i,11,a[41]),U=l(U,b,E,O,p,16,a[42]),O=l(O,U,b,E,y,23,a[43]),E=l(E,O,U,b,v,4,a[44]),b=l(b,E,O,U,T,11,a[45]),U=l(U,b,E,O,A,16,a[46]),E=d(E,O=l(O,U,b,E,f,23,a[47]),U,b,i,6,a[48]),b=d(b,E,O,U,_,10,a[49]),U=d(U,b,E,O,I,15,a[50]),O=d(O,U,b,E,m,21,a[51]),E=d(E,O,U,b,T,6,a[52]),b=d(b,E,O,U,p,10,a[53]),U=d(U,b,E,O,S,15,a[54]),O=d(O,U,b,E,c,21,a[55]),E=d(E,O,U,b,w,6,a[56]),b=d(b,E,O,U,A,10,a[57]),U=d(U,b,E,O,y,15,a[58]),O=d(O,U,b,E,P,21,a[59]),E=d(E,O,U,b,g,6,a[60]),b=d(b,E,O,U,k,10,a[61]),U=d(U,b,E,O,f,15,a[62]),O=d(O,U,b,E,v,21,a[63]),o[0]=o[0]+E|0,o[1]=o[1]+O|0,o[2]=o[2]+U|0,o[3]=o[3]+b|0},_doFinalize:function(){var t=this._data,s=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;s[r>>>5]|=128<<24-r%32;var o=e.floor(n/4294967296),i=n;s[15+(r+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),s[14+(r+64>>>9<<4)]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),t.sigBytes=4*(s.length+1),this._process();for(var a=this._hash,c=a.words,u=0;u<4;u++){var h=c[u];c[u]=16711935&(h<<8|h>>>24)|4278255360&(h<<24|h>>>8)}return a},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});function u(e,t,s,n,r,o,i){var a=e+(t&s|~t&n)+r+i;return(a<>>32-o)+t}function h(e,t,s,n,r,o,i){var a=e+(t&n|s&~n)+r+i;return(a<>>32-o)+t}function l(e,t,s,n,r,o,i){var a=e+(t^s^n)+r+i;return(a<>>32-o)+t}function d(e,t,s,n,r,o,i){var a=e+(s^(t|~n))+r+i;return(a<>>32-o)+t}t.MD5=o._createHelper(c),t.HmacMD5=o._createHmacHelper(c)}(Math),s.MD5)})),s((function(e,t){var s,r,o;e.exports=(r=(s=n).lib.Base,o=s.enc.Utf8,void(s.algo.HMAC=r.extend({init:function(e,t){e=this._hasher=new e.init,"string"==typeof t&&(t=o.parse(t));var s=e.blockSize,n=4*s;t.sigBytes>n&&(t=e.finalize(t)),t.clamp();for(var r=this._oKey=t.clone(),i=this._iKey=t.clone(),a=r.words,c=i.words,u=0;u{p.indexOf(s)>-1&&function(e,t,s){let n=g[e][t];n||(n=g[e][t]=[]),-1===n.indexOf(s)&&"function"==typeof s&&n.push(s)}(e,s,t[s])})}function y(e,t){g[e]||(g[e]={}),i(t)?Object.keys(t).forEach(s=>{p.indexOf(s)>-1&&function(e,t,s){const n=g[e][t];if(!n)return;const r=n.indexOf(s);r>-1&&n.splice(r,1)}(e,s,t[s])}):delete g[e]}function _(e,t){return e&&0!==e.length?e.reduce((e,s)=>e.then(()=>s(t)),Promise.resolve()):Promise.resolve()}function w(e,t){return g[e]&&g[e][t]||[]}function v(e,t){return t?function(s){const n="callFunction"===t&&"DCloud-clientDB"===(s&&s.name);let r;r=this.isReady?Promise.resolve():this.initUniCloud,s=s||{};const o=r.then(()=>n?Promise.resolve():_(w(t,"invoke"),s)).then(()=>e.call(this,s)).then(e=>n?Promise.resolve(e):_(w(t,"success"),e).then(()=>_(w(t,"complete"),e)).then(()=>Promise.resolve(e)),e=>n?Promise.reject(e):_(w(t,"fail"),e).then(()=>_(w(t,"complete"),e)).then(()=>Promise.reject(e)));if(!(s.success||s.fail||s.complete))return o;o.then(e=>{s.success&&s.success(e),s.complete&&s.complete(e)}).catch(e=>{s.fail&&s.fail(e),s.complete&&s.complete(e)})}:function(t){if(!((t=t||{}).success||t.fail||t.complete))return e.call(this,t);e.call(this,t).then(e=>{t.success&&t.success(e),t.complete&&t.complete(e)},e=>{t.fail&&t.fail(e),t.complete&&t.complete(e)})}}g="app-plus"===h?uni._globalUniCloudInterceptor?uni._globalUniCloudInterceptor:uni._globalUniCloudInterceptor={}:{};class S extends Error{constructor(e){super(e.message),this.errMsg=e.message||"",Object.defineProperties(this,{code:{get:()=>e.code},requestId:{get:()=>e.requestId},message:{get(){return this.errMsg},set(e){this.errMsg=e}}})}}const{t:k,setLocale:T,getLocale:P}=e({"zh-Hans":{"uniCloud.init.paramRequired":"缺少参数:{param}","uniCloud.uploadFile.fileError":"filePath应为File对象"},"zh-Hant":{"uniCloud.init.paramRequired":"缺少参数:{param}","uniCloud.uploadFile.fileError":"filePath应为File对象"},en:{"uniCloud.init.paramRequired":"{param} required","uniCloud.uploadFile.fileError":"filePath should be instance of File"},fr:{"uniCloud.init.paramRequired":"{param} required","uniCloud.uploadFile.fileError":"filePath should be instance of File"},es:{"uniCloud.init.paramRequired":"{param} required","uniCloud.uploadFile.fileError":"filePath should be instance of File"}},"zh-Hans");let I,A,E;try{I=require("uni-stat-config").default||require("uni-stat-config")}catch(e){I={appid:""}}function O(e=8){let t="";for(;t.length{t(Object.assign(e,{complete(e){e||(e={}),u&&"h5"===h&&e.errMsg&&0===e.errMsg.indexOf("request:fail")&&console.warn("发布H5,需要在uniCloud后台操作,绑定安全域名,否则会因为跨域问题而无法访问。教程参考:https://uniapp.dcloud.io/uniCloud/quickstart?id=useinh5");const t=e.data&&e.data.header&&e.data.header["x-serverless-request-id"]||e.header&&e.header["request-id"];if(!e.statusCode||e.statusCode>=400)return n(new S({code:"SYS_ERR",message:e.errMsg||"request:fail",requestId:t}));const r=e.data;if(r.error)return n(new S({code:r.error.code,message:r.error.message,requestId:t}));r.result=r.data,r.requestId=t,delete r.data,s(r)}}))})}};const x={request:e=>uni.request(e),uploadFile:e=>uni.uploadFile(e),setStorageSync:(e,t)=>uni.setStorageSync(e,t),getStorageSync:e=>uni.getStorageSync(e),removeStorageSync:e=>uni.removeStorageSync(e),clearStorageSync:()=>uni.clearStorageSync()};class q{constructor(e){["spaceId","clientSecret"].forEach(t=>{if(!Object.prototype.hasOwnProperty.call(e,t))throw new Error(k("uniCloud.init.paramRequired",{param:t}))}),this.config=Object.assign({},{endpoint:"https://api.bspapp.com"},e),this.config.provider="aliyun",this.config.requestUrl=this.config.endpoint+"/client",this.config.envType=this.config.envType||"public",this.config.accessTokenKey="access_token_"+this.config.spaceId,this.adapter=x,this._getAccessTokenPromise=null,this._getAccessTokenPromiseStatus=null}get hasAccessToken(){return!!this.accessToken}setAccessToken(e){this.accessToken=e}requestWrapped(e){return C.wrappedRequest(e,this.adapter.request)}requestAuth(e){return this.requestWrapped(e)}request(e,t){return Promise.resolve().then(()=>this.hasAccessToken?t?this.requestWrapped(e):this.requestWrapped(e).catch(t=>new Promise((e,s)=>{!t||"GATEWAY_INVALID_TOKEN"!==t.code&&"InvalidParameter.InvalidToken"!==t.code?s(t):e()}).then(()=>this.getAccessToken()).then(()=>{const t=this.rebuildRequest(e);return this.request(t,!0)})):this.getAccessToken().then(()=>{const t=this.rebuildRequest(e);return this.request(t,!0)}))}rebuildRequest(e){const t=Object.assign({},e);return t.data.token=this.accessToken,t.header["x-basement-token"]=this.accessToken,t.header["x-serverless-sign"]=C.sign(t.data,this.config.clientSecret),t}setupRequest(e,t){const s=Object.assign({},e,{spaceId:this.config.spaceId,timestamp:Date.now()}),n={"Content-Type":"application/json"};return"auth"!==t&&(s.token=this.accessToken,n["x-basement-token"]=this.accessToken),n["x-serverless-sign"]=C.sign(s,this.config.clientSecret),{url:this.config.requestUrl,method:"POST",data:s,dataType:"json",header:n}}getAccessToken(){if("pending"===this._getAccessTokenPromiseStatus)return this._getAccessTokenPromise;this._getAccessTokenPromiseStatus="pending";return this._getAccessTokenPromise=this.requestAuth(this.setupRequest({method:"serverless.auth.user.anonymousAuthorize",params:"{}"},"auth")).then(e=>new Promise((t,s)=>{e.result&&e.result.accessToken?(this.setAccessToken(e.result.accessToken),this._getAccessTokenPromiseStatus="fulfilled",t(this.accessToken)):(this._getAccessTokenPromiseStatus="rejected",s(new S({code:"AUTH_FAILED",message:"获取accessToken失败"})))}),e=>(this._getAccessTokenPromiseStatus="rejected",Promise.reject(e))),this._getAccessTokenPromise}authorize(){this.getAccessToken()}callFunction(e){const t={method:"serverless.function.runtime.invoke",params:JSON.stringify({functionTarget:e.name,functionArgs:e.data||{}})};return this.request(this.setupRequest(t))}getOSSUploadOptionsFromPath(e){const t={method:"serverless.file.resource.generateProximalSign",params:JSON.stringify(e)};return this.request(this.setupRequest(t))}uploadFileToOSS({url:e,formData:t,name:s,filePath:n,fileType:r,onUploadProgress:o}){return new Promise((i,a)=>{const c=this.adapter.uploadFile({url:e,formData:t,name:s,filePath:n,fileType:r,header:{"X-OSS-server-side-encrpytion":"AES256"},success(e){e&&e.statusCode<400?i(e):a(new S({code:"UPLOAD_FAILED",message:"文件上传失败"}))},fail(e){a(new S({code:e.code||"UPLOAD_FAILED",message:e.message||e.errMsg||"文件上传失败"}))}});"function"==typeof o&&c&&"function"==typeof c.onProgressUpdate&&c.onProgressUpdate(e=>{o({loaded:e.totalBytesSent,total:e.totalBytesExpectedToSend})})})}reportOSSUpload(e){const t={method:"serverless.file.resource.report",params:JSON.stringify(e)};return this.request(this.setupRequest(t))}uploadFile({filePath:e,cloudPath:t,fileType:s="image",onUploadProgress:n,config:r}){if(!t)throw new S({code:"CLOUDPATH_REQUIRED",message:"cloudPath不可为空"});const o=r&&r.envType||this.config.envType;let i,a;return this.getOSSUploadOptionsFromPath({env:o,filename:t}).then(t=>{const r=t.result;i=r.id,a="https://"+r.cdnDomain+"/"+r.ossPath;const o={url:"https://"+r.host,formData:{"Cache-Control":"max-age=2592000","Content-Disposition":"attachment",OSSAccessKeyId:r.accessKeyId,Signature:r.signature,host:r.host,id:i,key:r.ossPath,policy:r.policy,success_action_status:200},fileName:"file",name:"file",filePath:e,fileType:s};return this.uploadFileToOSS(Object.assign({},o,{onUploadProgress:n}))}).then(()=>this.reportOSSUpload({id:i})).then(t=>new Promise((s,n)=>{t.success?s({success:!0,filePath:e,fileID:a}):n(new S({code:"UPLOAD_FAILED",message:"文件上传失败"}))}))}deleteFile({fileList:e}){const t={method:"serverless.file.resource.delete",params:JSON.stringify({id:e[0]})};return this.request(this.setupRequest(t))}getTempFileURL({fileList:e}={}){return new Promise((t,s)=>{Array.isArray(e)&&0!==e.length||s(new S({code:"INVALID_PARAM",message:"fileList的元素必须是非空的字符串"})),t({fileList:e.map(e=>({fileID:e,tempFileURL:e}))})})}}const R={init(e){const t=new q(e),s={signInAnonymously:function(){return t.authorize()},getLoginState:function(){return Promise.resolve(!1)}};return t.auth=function(){return s},t.customAuth=t.auth,t}},F="undefined"!=typeof location&&"http:"===location.protocol?"http:":"https:",L="undefined"!=typeof process&&"e2e"===process.env.NODE_ENV&&"pre"===process.env.END_POINT?"//tcb-pre.tencentcloudapi.com/web":"//tcb-api.tencentcloudapi.com/web";var N;!function(e){e.local="local",e.none="none",e.session="session"}(N||(N={}));var M=function(){};const j=()=>{let e;if(!Promise){e=()=>{},e.promise={};const t=()=>{throw new Error('Your Node runtime does support ES6 Promises. Set "global.Promise" to your preferred implementation of promises.')};return Object.defineProperty(e.promise,"then",{get:t}),Object.defineProperty(e.promise,"catch",{get:t}),e}const t=new Promise((t,s)=>{e=(e,n)=>e?s(e):t(n)});return e.promise=t,e};function $(e){return void 0===e}function K(e){return"[object Null]"===Object.prototype.toString.call(e)}var B;function H(e){const t=(s=e,"[object Array]"===Object.prototype.toString.call(s)?e:[e]);var s;for(const e of t){const{isMatch:t,genAdapter:s,runtime:n}=e;if(t())return{adapter:s(),runtime:n}}}!function(e){e.WEB="web",e.WX_MP="wx_mp"}(B||(B={}));const W={adapter:null,runtime:void 0},z=["anonymousUuidKey"];class V extends M{constructor(){super(),W.adapter.root.tcbObject||(W.adapter.root.tcbObject={})}setItem(e,t){W.adapter.root.tcbObject[e]=t}getItem(e){return W.adapter.root.tcbObject[e]}removeItem(e){delete W.adapter.root.tcbObject[e]}clear(){delete W.adapter.root.tcbObject}}function J(e,t){switch(e){case"local":return t.localStorage||new V;case"none":return new V;default:return t.sessionStorage||new V}}class Y{constructor(e){if(!this._storage){this._persistence=W.adapter.primaryStorage||e.persistence,this._storage=J(this._persistence,W.adapter);const t="access_token_"+e.env,s="access_token_expire_"+e.env,n="refresh_token_"+e.env,r="anonymous_uuid_"+e.env,o="login_type_"+e.env,i="user_info_"+e.env;this.keys={accessTokenKey:t,accessTokenExpireKey:s,refreshTokenKey:n,anonymousUuidKey:r,loginTypeKey:o,userInfoKey:i}}}updatePersistence(e){if(e===this._persistence)return;const t="local"===this._persistence;this._persistence=e;const s=J(e,W.adapter);for(const e in this.keys){const n=this.keys[e];if(t&&z.includes(e))continue;const r=this._storage.getItem(n);$(r)||K(r)||(s.setItem(n,r),this._storage.removeItem(n))}this._storage=s}setStore(e,t,s){if(!this._storage)return;const n={version:s||"localCachev1",content:t},r=JSON.stringify(n);try{this._storage.setItem(e,r)}catch(e){throw e}}getStore(e,t){try{if(!this._storage)return}catch(e){return""}t=t||"localCachev1";const s=this._storage.getItem(e);if(!s)return"";if(s.indexOf(t)>=0){return JSON.parse(s).content}return""}removeStore(e){this._storage.removeItem(e)}}const X={},G={};function Q(e){return X[e]}class Z{constructor(e,t){this.data=t||null,this.name=e}}class ee extends Z{constructor(e,t){super("error",{error:e,data:t}),this.error=e}}const te=new class{constructor(){this._listeners={}}on(e,t){return function(e,t,s){s[e]=s[e]||[],s[e].push(t)}(e,t,this._listeners),this}off(e,t){return function(e,t,s){if(s&&s[e]){const n=s[e].indexOf(t);-1!==n&&s[e].splice(n,1)}}(e,t,this._listeners),this}fire(e,t){if(e instanceof ee)return console.error(e.error),this;const s="string"==typeof e?new Z(e,t||{}):e;const n=s.name;if(this._listens(n)){s.target=this;const e=this._listeners[n]?[...this._listeners[n]]:[];for(const t of e)t.call(this,s)}return this}_listens(e){return this._listeners[e]&&this._listeners[e].length>0}};function se(e,t){te.on(e,t)}function ne(e,t={}){te.fire(e,t)}function re(e,t){te.off(e,t)}const oe="loginStateChanged",ie="loginStateExpire",ae="loginTypeChanged",ce="anonymousConverted",ue="refreshAccessToken";var he;!function(e){e.ANONYMOUS="ANONYMOUS",e.WECHAT="WECHAT",e.WECHAT_PUBLIC="WECHAT-PUBLIC",e.WECHAT_OPEN="WECHAT-OPEN",e.CUSTOM="CUSTOM",e.EMAIL="EMAIL",e.USERNAME="USERNAME",e.NULL="NULL"}(he||(he={}));const le=["auth.getJwt","auth.logout","auth.signInWithTicket","auth.signInAnonymously","auth.signIn","auth.fetchAccessTokenWithRefreshToken","auth.signUpWithEmailAndPassword","auth.activateEndUserMail","auth.sendPasswordResetEmail","auth.resetPasswordWithToken","auth.isUsernameRegistered"],de={"X-SDK-Version":"1.3.5"};function fe(e,t,s){const n=e[t];e[t]=function(t){const r={},o={};s.forEach(s=>{const{data:n,headers:i}=s.call(e,t);Object.assign(r,n),Object.assign(o,i)});const i=t.data;return i&&(()=>{var e;if(e=i,"[object FormData]"!==Object.prototype.toString.call(e))t.data={...i,...r};else for(const e in r)i.append(e,r[e])})(),t.headers={...t.headers||{},...o},n.call(e,t)}}function pe(){const e=Math.random().toString(16).slice(2);return{data:{seqId:e},headers:{...de,"x-seqid":e}}}class ge{constructor(e={}){var t;this.config=e,this._reqClass=new W.adapter.reqClass({timeout:this.config.timeout,timeoutMsg:`请求在${this.config.timeout/1e3}s内未完成,已中断`,restrictedMethods:["post"]}),this._cache=Q(this.config.env),this._localCache=(t=this.config.env,G[t]),fe(this._reqClass,"post",[pe]),fe(this._reqClass,"upload",[pe]),fe(this._reqClass,"download",[pe])}async post(e){return await this._reqClass.post(e)}async upload(e){return await this._reqClass.upload(e)}async download(e){return await this._reqClass.download(e)}async refreshAccessToken(){let e,t;this._refreshAccessTokenPromise||(this._refreshAccessTokenPromise=this._refreshAccessToken());try{e=await this._refreshAccessTokenPromise}catch(e){t=e}if(this._refreshAccessTokenPromise=null,this._shouldRefreshAccessTokenHook=null,t)throw t;return e}async _refreshAccessToken(){const{accessTokenKey:e,accessTokenExpireKey:t,refreshTokenKey:s,loginTypeKey:n,anonymousUuidKey:r}=this._cache.keys;this._cache.removeStore(e),this._cache.removeStore(t);let o=this._cache.getStore(s);if(!o)throw new Error("未登录CloudBase");const i={refresh_token:o},a=await this.request("auth.fetchAccessTokenWithRefreshToken",i);if(a.data.code){const{code:e}=a.data;if("SIGN_PARAM_INVALID"===e||"REFRESH_TOKEN_EXPIRED"===e||"INVALID_REFRESH_TOKEN"===e){if(this._cache.getStore(n)===he.ANONYMOUS&&"INVALID_REFRESH_TOKEN"===e){const e=this._cache.getStore(r),t=this._cache.getStore(s),n=await this.send("auth.signInAnonymously",{anonymous_uuid:e,refresh_token:t});return this.setRefreshToken(n.refresh_token),this._refreshAccessToken()}ne(ie),this._cache.removeStore(s)}throw new Error("刷新access token失败:"+a.data.code)}if(a.data.access_token)return ne(ue),this._cache.setStore(e,a.data.access_token),this._cache.setStore(t,a.data.access_token_expire+Date.now()),{accessToken:a.data.access_token,accessTokenExpire:a.data.access_token_expire};a.data.refresh_token&&(this._cache.removeStore(s),this._cache.setStore(s,a.data.refresh_token),this._refreshAccessToken())}async getAccessToken(){const{accessTokenKey:e,accessTokenExpireKey:t,refreshTokenKey:s}=this._cache.keys;if(!this._cache.getStore(s))throw new Error("refresh token不存在,登录状态异常");let n=this._cache.getStore(e),r=this._cache.getStore(t),o=!0;return this._shouldRefreshAccessTokenHook&&!await this._shouldRefreshAccessTokenHook(n,r)&&(o=!1),(!n||!r||r{e.wxOpenId&&e.wxPublicId&&(t=!0)}),{users:s,hasPrimaryUid:t}}setPrimaryUid(e){return this._request.send("auth.setPrimaryUid",{uid:e})}unlink(e){return this._request.send("auth.unlink",{platform:e})}async update(e){const{nickName:t,gender:s,avatarUrl:n,province:r,country:o,city:i}=e,{data:a}=await this._request.send("auth.updateUserInfo",{nickName:t,gender:s,avatarUrl:n,province:r,country:o,city:i});this.setLocalUserInfo(a)}async refresh(){const{data:e}=await this._request.send("auth.getUserInfo",{});return this.setLocalUserInfo(e),e}setUserInfo(){const{userInfoKey:e}=this._cache.keys,t=this._cache.getStore(e);["uid","loginType","openid","wxOpenId","wxPublicId","unionId","qqMiniOpenId","email","hasPassword","customUserId","nickName","gender","avatarUrl"].forEach(e=>{this[e]=t[e]}),this.location={country:t.country,province:t.province,city:t.city}}setLocalUserInfo(e){const{userInfoKey:t}=this._cache.keys;this._cache.setStore(t,e),this.setUserInfo()}}class ve{constructor(e){if(!e)throw new Error("envId is not defined");this._cache=Q(e);const{refreshTokenKey:t,accessTokenKey:s,accessTokenExpireKey:n}=this._cache.keys,r=this._cache.getStore(t),o=this._cache.getStore(s),i=this._cache.getStore(n);this.credential={refreshToken:r,accessToken:o,accessTokenExpire:i},this.user=new we(e)}get isAnonymousAuth(){return this.loginType===he.ANONYMOUS}get isCustomAuth(){return this.loginType===he.CUSTOM}get isWeixinAuth(){return this.loginType===he.WECHAT||this.loginType===he.WECHAT_OPEN||this.loginType===he.WECHAT_PUBLIC}get loginType(){return this._cache.getStore(this._cache.keys.loginTypeKey)}}class Se extends _e{async signIn(){this._cache.updatePersistence("local");const{anonymousUuidKey:e,refreshTokenKey:t}=this._cache.keys,s=this._cache.getStore(e)||void 0,n=this._cache.getStore(t)||void 0,r=await this._request.send("auth.signInAnonymously",{anonymous_uuid:s,refresh_token:n});if(r.uuid&&r.refresh_token){this._setAnonymousUUID(r.uuid),this.setRefreshToken(r.refresh_token),await this._request.refreshAccessToken(),ne(oe),ne(ae,{env:this.config.env,loginType:he.ANONYMOUS,persistence:"local"});const e=new ve(this.config.env);return await e.user.refresh(),e}throw new Error("匿名登录失败")}async linkAndRetrieveDataWithTicket(e){const{anonymousUuidKey:t,refreshTokenKey:s}=this._cache.keys,n=this._cache.getStore(t),r=this._cache.getStore(s),o=await this._request.send("auth.linkAndRetrieveDataWithTicket",{anonymous_uuid:n,refresh_token:r,ticket:e});if(o.refresh_token)return this._clearAnonymousUUID(),this.setRefreshToken(o.refresh_token),await this._request.refreshAccessToken(),ne(ce,{env:this.config.env}),ne(ae,{loginType:he.CUSTOM,persistence:"local"}),{credential:{refreshToken:o.refresh_token}};throw new Error("匿名转化失败")}_setAnonymousUUID(e){const{anonymousUuidKey:t,loginTypeKey:s}=this._cache.keys;this._cache.removeStore(t),this._cache.setStore(t,e),this._cache.setStore(s,he.ANONYMOUS)}_clearAnonymousUUID(){this._cache.removeStore(this._cache.keys.anonymousUuidKey)}}class ke extends _e{async signIn(e){if("string"!=typeof e)throw new Error("ticket must be a string");const{refreshTokenKey:t}=this._cache.keys,s=await this._request.send("auth.signInWithTicket",{ticket:e,refresh_token:this._cache.getStore(t)||""});if(s.refresh_token)return this.setRefreshToken(s.refresh_token),await this._request.refreshAccessToken(),ne(oe),ne(ae,{env:this.config.env,loginType:he.CUSTOM,persistence:this.config.persistence}),await this.refreshUserInfo(),new ve(this.config.env);throw new Error("自定义登录失败")}}class Te extends _e{async signIn(e,t){if("string"!=typeof e)throw new Error("email must be a string");const{refreshTokenKey:s}=this._cache.keys,n=await this._request.send("auth.signIn",{loginType:"EMAIL",email:e,password:t,refresh_token:this._cache.getStore(s)||""}),{refresh_token:r,access_token:o,access_token_expire:i}=n;if(r)return this.setRefreshToken(r),o&&i?this.setAccessToken(o,i):await this._request.refreshAccessToken(),await this.refreshUserInfo(),ne(oe),ne(ae,{env:this.config.env,loginType:he.EMAIL,persistence:this.config.persistence}),new ve(this.config.env);throw n.code?new Error(`邮箱登录失败: [${n.code}] ${n.message}`):new Error("邮箱登录失败")}async activate(e){return this._request.send("auth.activateEndUserMail",{token:e})}async resetPasswordWithToken(e,t){return this._request.send("auth.resetPasswordWithToken",{token:e,newPassword:t})}}class Pe extends _e{async signIn(e,t){if("string"!=typeof e)throw new Error("username must be a string");"string"!=typeof t&&(t="",console.warn("password is empty"));const{refreshTokenKey:s}=this._cache.keys,n=await this._request.send("auth.signIn",{loginType:he.USERNAME,username:e,password:t,refresh_token:this._cache.getStore(s)||""}),{refresh_token:r,access_token_expire:o,access_token:i}=n;if(r)return this.setRefreshToken(r),i&&o?this.setAccessToken(i,o):await this._request.refreshAccessToken(),await this.refreshUserInfo(),ne(oe),ne(ae,{env:this.config.env,loginType:he.USERNAME,persistence:this.config.persistence}),new ve(this.config.env);throw n.code?new Error(`用户名密码登录失败: [${n.code}] ${n.message}`):new Error("用户名密码登录失败")}}class Ie{constructor(e){this.config=e,this._cache=Q(e.env),this._request=ye(e.env),this._onAnonymousConverted=this._onAnonymousConverted.bind(this),this._onLoginTypeChanged=this._onLoginTypeChanged.bind(this),se(ae,this._onLoginTypeChanged)}get currentUser(){const e=this.hasLoginState();return e&&e.user||null}get loginType(){return this._cache.getStore(this._cache.keys.loginTypeKey)}anonymousAuthProvider(){return new Se(this.config)}customAuthProvider(){return new ke(this.config)}emailAuthProvider(){return new Te(this.config)}usernameAuthProvider(){return new Pe(this.config)}async signInAnonymously(){return new Se(this.config).signIn()}async signInWithEmailAndPassword(e,t){return new Te(this.config).signIn(e,t)}signInWithUsernameAndPassword(e,t){return new Pe(this.config).signIn(e,t)}async linkAndRetrieveDataWithTicket(e){this._anonymousAuthProvider||(this._anonymousAuthProvider=new Se(this.config)),se(ce,this._onAnonymousConverted);return await this._anonymousAuthProvider.linkAndRetrieveDataWithTicket(e)}async signOut(){if(this.loginType===he.ANONYMOUS)throw new Error("匿名用户不支持登出操作");const{refreshTokenKey:e,accessTokenKey:t,accessTokenExpireKey:s}=this._cache.keys,n=this._cache.getStore(e);if(!n)return;const r=await this._request.send("auth.logout",{refresh_token:n});return this._cache.removeStore(e),this._cache.removeStore(t),this._cache.removeStore(s),ne(oe),ne(ae,{env:this.config.env,loginType:he.NULL,persistence:this.config.persistence}),r}async signUpWithEmailAndPassword(e,t){return this._request.send("auth.signUpWithEmailAndPassword",{email:e,password:t})}async sendPasswordResetEmail(e){return this._request.send("auth.sendPasswordResetEmail",{email:e})}onLoginStateChanged(e){se(oe,()=>{const t=this.hasLoginState();e.call(this,t)});const t=this.hasLoginState();e.call(this,t)}onLoginStateExpired(e){se(ie,e.bind(this))}onAccessTokenRefreshed(e){se(ue,e.bind(this))}onAnonymousConverted(e){se(ce,e.bind(this))}onLoginTypeChanged(e){se(ae,()=>{const t=this.hasLoginState();e.call(this,t)})}async getAccessToken(){return{accessToken:(await this._request.getAccessToken()).accessToken,env:this.config.env}}hasLoginState(){const{refreshTokenKey:e}=this._cache.keys;return this._cache.getStore(e)?new ve(this.config.env):null}async isUsernameRegistered(e){if("string"!=typeof e)throw new Error("username must be a string");const{data:t}=await this._request.send("auth.isUsernameRegistered",{username:e});return t&&t.isRegistered}getLoginState(){return Promise.resolve(this.hasLoginState())}async signInWithTicket(e){return new ke(this.config).signIn(e)}shouldRefreshAccessToken(e){this._request._shouldRefreshAccessTokenHook=e.bind(this)}getUserInfo(){return this._request.send("auth.getUserInfo",{}).then(e=>e.code?e:{...e.data,requestId:e.seqId})}getAuthHeader(){const{refreshTokenKey:e,accessTokenKey:t}=this._cache.keys,s=this._cache.getStore(e);return{"x-cloudbase-credentials":this._cache.getStore(t)+"/@@/"+s}}_onAnonymousConverted(e){const{env:t}=e.data;t===this.config.env&&this._cache.updatePersistence(this.config.persistence)}_onLoginTypeChanged(e){const{loginType:t,persistence:s,env:n}=e.data;n===this.config.env&&(this._cache.updatePersistence(s),this._cache.setStore(this._cache.keys.loginTypeKey,t))}}const Ae=function(e,t){t=t||j();const s=ye(this.config.env),{cloudPath:n,filePath:r,onUploadProgress:o,fileType:i="image"}=e;return s.send("storage.getUploadMetadata",{path:n}).then(e=>{const{data:{url:a,authorization:c,token:u,fileId:h,cosFileId:l},requestId:d}=e,f={key:n,signature:c,"x-cos-meta-fileid":l,success_action_status:"201","x-cos-security-token":u};s.upload({url:a,data:f,file:r,name:n,fileType:i,onUploadProgress:o}).then(e=>{201===e.statusCode?t(null,{fileID:h,requestId:d}):t(new Error("STORAGE_REQUEST_FAIL: "+e.data))}).catch(e=>{t(e)})}).catch(e=>{t(e)}),t.promise},Ee=function(e,t){t=t||j();const s=ye(this.config.env),{cloudPath:n}=e;return s.send("storage.getUploadMetadata",{path:n}).then(e=>{t(null,e)}).catch(e=>{t(e)}),t.promise},Oe=function({fileList:e},t){if(t=t||j(),!e||!Array.isArray(e))return{code:"INVALID_PARAM",message:"fileList必须是非空的数组"};for(let t of e)if(!t||"string"!=typeof t)return{code:"INVALID_PARAM",message:"fileList的元素必须是非空的字符串"};const s={fileid_list:e};return ye(this.config.env).send("storage.batchDeleteFile",s).then(e=>{e.code?t(null,e):t(null,{fileList:e.data.delete_list,requestId:e.requestId})}).catch(e=>{t(e)}),t.promise},Ue=function({fileList:e},t){t=t||j(),e&&Array.isArray(e)||t(null,{code:"INVALID_PARAM",message:"fileList必须是非空的数组"});let s=[];for(let n of e)"object"==typeof n?(n.hasOwnProperty("fileID")&&n.hasOwnProperty("maxAge")||t(null,{code:"INVALID_PARAM",message:"fileList的元素必须是包含fileID和maxAge的对象"}),s.push({fileid:n.fileID,max_age:n.maxAge})):"string"==typeof n?s.push({fileid:n}):t(null,{code:"INVALID_PARAM",message:"fileList的元素必须是字符串"});const n={file_list:s};return ye(this.config.env).send("storage.batchGetDownloadUrl",n).then(e=>{e.code?t(null,e):t(null,{fileList:e.data.download_list,requestId:e.requestId})}).catch(e=>{t(e)}),t.promise},be=async function({fileID:e},t){const s=(await Ue.call(this,{fileList:[{fileID:e,maxAge:600}]})).fileList[0];if("SUCCESS"!==s.code)return t?t(s):new Promise(e=>{e(s)});const n=ye(this.config.env);let r=s.download_url;if(r=encodeURI(r),!t)return n.download({url:r});t(await n.download({url:r}))},De=function({name:e,data:t,query:s,parse:n,search:r},o){const i=o||j();let a;try{a=t?JSON.stringify(t):""}catch(e){return Promise.reject(e)}if(!e)return Promise.reject(new Error("函数名不能为空"));const c={inQuery:s,parse:n,search:r,function_name:e,request_data:a};return ye(this.config.env).send("functions.invokeFunction",c).then(e=>{if(e.code)i(null,e);else{let t=e.data.response_data;if(n)i(null,{result:t,requestId:e.requestId});else try{t=JSON.parse(e.data.response_data),i(null,{result:t,requestId:e.requestId})}catch(e){i(new Error("response data must be json"))}}return i.promise}).catch(e=>{i(e)}),i.promise},Ce={timeout:15e3,persistence:"session"},xe={};class qe{constructor(e){this.config=e||this.config,this.authObj=void 0}init(e){switch(W.adapter||(this.requestClient=new W.adapter.reqClass({timeout:e.timeout||5e3,timeoutMsg:`请求在${(e.timeout||5e3)/1e3}s内未完成,已中断`})),this.config={...Ce,...e},!0){case this.config.timeout>6e5:console.warn("timeout大于可配置上限[10分钟],已重置为上限数值"),this.config.timeout=6e5;break;case this.config.timeout<100:console.warn("timeout小于可配置下限[100ms],已重置为下限数值"),this.config.timeout=100}return new qe(this.config)}auth({persistence:e}={}){if(this.authObj)return this.authObj;const t=e||W.adapter.primaryStorage||Ce.persistence;var s;return t!==this.config.persistence&&(this.config.persistence=t),function(e){const{env:t}=e;X[t]=new Y(e),G[t]=new Y({...e,persistence:"local"})}(this.config),s=this.config,me[s.env]=new ge(s),this.authObj=new Ie(this.config),this.authObj}on(e,t){return se.apply(this,[e,t])}off(e,t){return re.apply(this,[e,t])}callFunction(e,t){return De.apply(this,[e,t])}deleteFile(e,t){return Oe.apply(this,[e,t])}getTempFileURL(e,t){return Ue.apply(this,[e,t])}downloadFile(e,t){return be.apply(this,[e,t])}uploadFile(e,t){return Ae.apply(this,[e,t])}getUploadMetadata(e,t){return Ee.apply(this,[e,t])}registerExtension(e){xe[e.name]=e}async invokeExtension(e,t){const s=xe[e];if(!s)throw Error(`扩展${e} 必须先注册`);return await s.invoke(t,this)}useAdapters(e){const{adapter:t,runtime:s}=H(e)||{};t&&(W.adapter=t),s&&(W.runtime=s)}}const Re=new qe;function Fe(e,t,s){void 0===s&&(s={});var n=/\?/.test(t),r="";for(var o in s)""===r?!n&&(t+="?"):r+="&",r+=o+"="+encodeURIComponent(s[o]);return/^http(s)?:\/\//.test(t+=r)?t:""+e+t}class Le{post(e){const{url:t,data:s,headers:n}=e;return new Promise((e,r)=>{x.request({url:Fe("https:",t),data:s,method:"POST",header:n,success(t){e(t)},fail(e){r(e)}})})}upload(e){return new Promise((t,s)=>{const{url:n,file:r,data:o,headers:i,fileType:a}=e,c=x.uploadFile({url:Fe("https:",n),name:"file",formData:Object.assign({},o),filePath:r,fileType:a,header:i,success(e){const s={statusCode:e.statusCode,data:e.data||{}};200===e.statusCode&&o.success_action_status&&(s.statusCode=parseInt(o.success_action_status,10)),t(s)},fail(e){u&&"mp-alipay"===h&&console.warn("支付宝小程序开发工具上传腾讯云时无法准确判断是否上传成功,请使用真机测试"),s(new Error(e.errMsg||"uploadFile:fail"))}});"function"==typeof e.onUploadProgress&&c&&"function"==typeof c.onProgressUpdate&&c.onProgressUpdate(t=>{e.onUploadProgress({loaded:t.totalBytesSent,total:t.totalBytesExpectedToSend})})})}}const Ne={setItem(e,t){x.setStorageSync(e,t)},getItem:e=>x.getStorageSync(e),removeItem(e){x.removeStorageSync(e)},clear(){x.clearStorageSync()}};const Me={genAdapter:function(){return{root:{},reqClass:Le,localStorage:Ne,primaryStorage:"local"}},isMatch:function(){return!0},runtime:"uni_app"};Re.useAdapters(Me);const je=Re,$e=je.init;je.init=function(e){e.env=e.spaceId;const t=$e.call(this,e);t.config.provider="tencent",t.config.spaceId=e.spaceId;const s=t.auth;return t.auth=function(e){const t=s.call(this,e);return["linkAndRetrieveDataWithTicket","signInAnonymously","signOut","getAccessToken","getLoginState","signInWithTicket","getUserInfo"].forEach(e=>{t[e]=v(t[e]).bind(t)}),t},t.customAuth=t.auth,t};class Ke extends q{getAccessToken(){return new Promise((e,t)=>{this.setAccessToken("Anonymous_Access_token"),e("Anonymous_Access_token")})}setupRequest(e,t){const s=Object.assign({},e,{spaceId:this.config.spaceId,timestamp:Date.now()}),n={"Content-Type":"application/json"};"auth"!==t&&(s.token=this.accessToken,n["x-basement-token"]=this.accessToken),n["x-serverless-sign"]=C.sign(s,this.config.clientSecret);const r=U(),{APPID:o,PLATFORM:i,DEVICEID:a,CLIENT_SDK_VERSION:c}=r;return n["x-client-platform"]=i,n["x-client-appid"]=o,n["x-client-device-id"]=a,n["x-client-version"]=c,n["x-client-token"]=x.getStorageSync("uni_id_token"),{url:this.config.requestUrl,method:"POST",data:s,dataType:"json",header:JSON.parse(JSON.stringify(n))}}uploadFileToOSS({url:e,formData:t,name:s,filePath:n,fileType:r,onUploadProgress:o}){return new Promise((i,a)=>{const c=this.adapter.uploadFile({url:e,formData:t,name:s,filePath:n,fileType:r,success(e){e&&e.statusCode<400?i(e):a(new S({code:"UPLOAD_FAILED",message:"文件上传失败"}))},fail(e){a(new S({code:e.code||"UPLOAD_FAILED",message:e.message||e.errMsg||"文件上传失败"}))}});"function"==typeof o&&c&&"function"==typeof c.onProgressUpdate&&c.onProgressUpdate(e=>{o({loaded:e.totalBytesSent,total:e.totalBytesExpectedToSend})})})}uploadFile({filePath:e,cloudPath:t,fileType:s="image",onUploadProgress:n}){if(!t)throw new S({code:"CLOUDPATH_REQUIRED",message:"cloudPath不可为空"});let r;return this.getOSSUploadOptionsFromPath({cloudPath:t}).then(t=>{const{url:o,formData:i,name:a,fileUrl:c}=t.result;r=c;const u={url:o,formData:i,name:a,filePath:e,fileType:s};return this.uploadFileToOSS(Object.assign({},u,{onUploadProgress:n}))}).then(()=>this.reportOSSUpload({cloudPath:t})).then(t=>new Promise((s,n)=>{t.success?s({success:!0,filePath:e,fileID:r}):n(new S({code:"UPLOAD_FAILED",message:"文件上传失败"}))}))}}const Be={init(e){const t=new Ke(e),s={signInAnonymously:function(){return t.authorize()},getLoginState:function(){return Promise.resolve(!1)}};return t.auth=function(){return s},t.customAuth=t.auth,t}};let He,We;function ze({name:e,data:t,spaceId:s,provider:n}){He||(He=U(),We={ak:I.appid,p:"android"===E?"a":"i",ut:D(),uuid:b()});const r=JSON.parse(JSON.stringify(t||{})),o=e,i=s,a={tencent:"t",aliyun:"a"}[n];{const e=Object.assign({},We,{fn:o,sid:i,pvd:a});Object.assign(r,{clientInfo:He,uniCloudClientInfo:encodeURIComponent(JSON.stringify(e))});const{deviceId:t}=uni.getSystemInfoSync();r.uniCloudDeviceId=t}if(!r.uniIdToken){const e=x.getStorageSync("uni_id_token")||x.getStorageSync("uniIdToken");e&&(r.uniIdToken=e)}return r}function Ve({name:e,data:t}){const{localAddress:s,localPort:n}=this,r={aliyun:"aliyun",tencent:"tcb"}[this.config.provider],o=this.config.spaceId,i=`http://${s}:${n}/system/check-function`,a=`http://${s}:${n}/cloudfunctions/${e}`;return new Promise((t,s)=>{x.request({method:"POST",url:i,data:{name:e,platform:h,provider:r,spaceId:o},timeout:3e3,success(e){t(e)},fail(){t({data:{code:"NETWORK_ERROR",message:"连接本地调试服务失败,请检查客户端是否和主机在同一局域网下,自动切换为已部署的云函数。"}})}})}).then(({data:e}={})=>{const{code:t,message:s}=e||{};return{code:0===t?0:t||"SYS_ERR",message:s||"SYS_ERR"}}).then(({code:s,message:n})=>{if(0!==s){switch(s){case"MODULE_ENCRYPTED":console.error(`此云函数(${e})依赖加密公共模块不可本地调试,自动切换为云端已部署的云函数`);break;case"FUNCTION_ENCRYPTED":console.error(`此云函数(${e})已加密不可本地调试,自动切换为云端已部署的云函数`);break;case"ACTION_ENCRYPTED":console.error(n||"需要访问加密的uni-clientDB-action,自动切换为云端环境");break;case"NETWORK_ERROR":{const e="连接本地调试服务失败,请检查客户端是否和主机在同一局域网下";throw console.error(e),new Error(e)}case"SWITCH_TO_CLOUD":break;default:{const e=`检测本地调试服务出现错误:${n},请检查网络环境或重启客户端再试`;throw console.error(e),new Error(e)}}return this._originCallFunction({name:e,data:t})}return new Promise((s,n)=>{const i=ze({name:e,data:t,provider:this.config.provider,spaceId:o});x.request({method:"POST",url:a,data:{provider:r,platform:h,param:i},success:({statusCode:e,data:t}={})=>!e||e>=400?n(new S({code:t.code||"SYS_ERR",message:t.message||"request:fail"})):s({result:t}),fail(e){n(new S({code:e.code||e.errCode||"SYS_ERR",message:e.message||e.errMsg||"request:fail"}))}})})})}const Je=[{rule:/fc_function_not_found|FUNCTION_NOT_FOUND/,content:",云函数[{functionName}]在云端不存在,请检查此云函数名称是否正确以及该云函数是否已上传到服务空间",mode:"append"}];var Ye=/[\\^$.*+?()[\]{}|]/g,Xe=RegExp(Ye.source);function Ge(e,t,s){return e.replace(new RegExp((n=t)&&Xe.test(n)?n.replace(Ye,"\\$&"):n,"g"),s);var n}function Qe({functionName:e,result:t,logPvd:s}){if(this.config.useDebugFunction&&t&&t.requestId){const n=JSON.stringify({spaceId:this.config.spaceId,functionName:e,requestId:t.requestId});console.log(`[${s}-request]${n}[/${s}-request]`)}}function Ze(e){const t=e.callFunction,s=function(e){const s=e.name;e.data=ze({name:s,data:e.data,provider:this.config.provider,spaceId:this.config.spaceId});const n={aliyun:"aliyun",tencent:"tcb"}[this.config.provider];return t.call(this,e).then(e=>(Qe.call(this,{functionName:s,result:e,logPvd:n}),Promise.resolve(e)),t=>(Qe.call(this,{functionName:s,result:t,logPvd:n}),t&&t.message&&(t.message=function({message:e="",extraInfo:t={},formatter:s=[]}={}){for(let n=0;n(console.warn("当前返回结果为Promise类型,不可直接访问其result属性,详情请参考:https://uniapp.dcloud.net.cn/uniCloud/faq?id=promise"),{})}),n}}const et=Symbol("CLIENT_DB_INTERNAL");function tt(e,t){return e.then="DoNotReturnProxyWithAFunctionNamedThen",e._internalType=et,new Proxy(e,{get:(e,s,n)=>function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}(e,s)||e[s]||"string"!=typeof s?e[s]:t.get(e,s,n)})}function st(e){switch(o(e)){case"array":return e.map(e=>st(e));case"object":return e._internalType===et||Object.keys(e).forEach(t=>{e[t]=st(e[t])}),e;case"regexp":return{$regexp:{source:e.source,flags:e.flags}};case"date":return{$date:e.toISOString()};default:return e}}function nt(){const e=x.getStorageSync("uni_id_token")||"",t=e.split(".");if(!e||3!==t.length)return{uid:null,role:[],permission:[],tokenExpired:0};let s;try{s=JSON.parse((n=t[1],decodeURIComponent(atob(n).split("").map((function(e){return"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2)})).join(""))))}catch(e){throw new Error("获取当前用户信息出错,详细错误信息为:"+e.message)}var n;return s.tokenExpired=1e3*s.exp,delete s.exp,delete s.iat,s}var rt=t(s((function(e,t){Object.defineProperty(t,"__esModule",{value:!0});const s="chooseAndUploadFile:fail";function n(e,t){return e.tempFiles.forEach((e,s)=>{e.name||(e.name=e.path.substring(e.path.lastIndexOf("/")+1)),t&&(e.fileType=t),e.cloudPath=Date.now()+"_"+s+e.name.substring(e.name.lastIndexOf("."))}),e.tempFilePaths||(e.tempFilePaths=e.tempFiles.map(e=>e.path)),e}function r(e,t,{onChooseFile:s,onUploadProgress:n}){return t.then(e=>{if(s){const t=s(e);if(void 0!==t)return Promise.resolve(t).then(t=>void 0===t?e:t)}return e}).then(t=>!1===t?{errMsg:"chooseAndUploadFile:ok",tempFilePaths:[],tempFiles:[]}:function(e,t,s=5,n){(t=Object.assign({},t)).errMsg="chooseAndUploadFile:ok";const r=t.tempFiles,o=r.length;let i=0;return new Promise(a=>{for(;i=o)return void(!r.find(e=>!e.url&&!e.errMsg)&&a(t));const u=r[s];e.uploadFile({filePath:u.path,cloudPath:u.cloudPath,fileType:u.fileType,onUploadProgress(e){e.index=s,e.tempFile=u,e.tempFilePath=u.path,n&&n(e)}}).then(e=>{u.url=e.fileID,s{u.errMsg=e.errMsg||e.message,s{uni.chooseImage({count:t,sizeType:r,sourceType:o,extension:i,success(t){e(n(t,"image"))},fail(e){a({errMsg:e.errMsg.replace("chooseImage:fail",s)})}})})}(t),t):"video"===t.type?r(e,function(e){const{camera:t,compressed:r,maxDuration:o,sourceType:i,extension:a}=e;return new Promise((e,c)=>{uni.chooseVideo({camera:t,compressed:r,maxDuration:o,sourceType:i,extension:a,success(t){const{tempFilePath:s,duration:r,size:o,height:i,width:a}=t;e(n({errMsg:"chooseVideo:ok",tempFilePaths:[s],tempFiles:[{name:t.tempFile&&t.tempFile.name||"",path:s,size:o,type:t.tempFile&&t.tempFile.type||"",width:a,height:i,duration:r,fileType:"video",cloudPath:""}]},"video"))},fail(e){c({errMsg:e.errMsg.replace("chooseVideo:fail",s)})}})})}(t),t):r(e,function(e){const{count:t,extension:r}=e;return new Promise((e,o)=>{let i=uni.chooseFile;if("undefined"!=typeof wx&&"function"==typeof wx.chooseMessageFile&&(i=wx.chooseMessageFile),"function"!=typeof i)return o({errMsg:s+" 请指定 type 类型,该平台仅支持选择 image 或 video。"});i({type:"all",count:t,extension:r,success(t){e(n(t))},fail(e){o({errMsg:e.errMsg.replace("chooseFile:fail",s)})}})})}(t),t)}}})));const ot="manual";function it(e){return{props:{localdata:{type:Array,default:()=>[]},options:{type:[Object,Array],default:()=>({})},collection:{type:String,default:""},action:{type:String,default:""},field:{type:String,default:""},orderby:{type:String,default:""},where:{type:[String,Object],default:""},pageData:{type:String,default:"add"},pageCurrent:{type:Number,default:1},pageSize:{type:Number,default:20},getcount:{type:[Boolean,String],default:!1},gettree:{type:[Boolean,String],default:!1},gettreepath:{type:[Boolean,String],default:!1},startwith:{type:String,default:""},limitlevel:{type:Number,default:10},groupby:{type:String,default:""},groupField:{type:String,default:""},distinct:{type:[Boolean,String],default:!1},foreignKey:{type:String,default:""},loadtime:{type:String,default:"auto"},manual:{type:Boolean,default:!1}},data:()=>({mixinDatacomLoading:!1,mixinDatacomHasMore:!1,mixinDatacomResData:[],mixinDatacomErrorMessage:"",mixinDatacomPage:{}}),created(){this.mixinDatacomPage={current:this.pageCurrent,size:this.pageSize,count:0},this.$watch(()=>{var e=[];return["pageCurrent","pageSize","localdata","collection","action","field","orderby","where","getont","getcount","gettree","groupby","groupField","distinct"].forEach(t=>{e.push(this[t])}),e},(e,t)=>{if(this.loadtime===ot)return;let s=!1;const n=[];for(let r=2;r{this.mixinDatacomLoading=!1;const{data:n,count:r}=s.result;this.getcount&&(this.mixinDatacomPage.count=r),this.mixinDatacomHasMore=n.length{this.mixinDatacomLoading=!1,this.mixinDatacomErrorMessage=e,s&&s(e)}))},mixinDatacomGet(t={}){let s=e.database();const n=t.action||this.action;n&&(s=s.action(n));const r=t.collection||this.collection;s=s.collection(r);const o=t.where||this.where;o&&Object.keys(o).length&&(s=s.where(o));const i=t.field||this.field;i&&(s=s.field(i));const a=t.foreignKey||this.foreignKey;a&&(s=s.foreignKey(a));const c=t.groupby||this.groupby;c&&(s=s.groupBy(c));const u=t.groupField||this.groupField;u&&(s=s.groupField(u));!0===(void 0!==t.distinct?t.distinct:this.distinct)&&(s=s.distinct());const h=t.orderby||this.orderby;h&&(s=s.orderBy(h));const l=void 0!==t.pageCurrent?t.pageCurrent:this.mixinDatacomPage.current,d=void 0!==t.pageSize?t.pageSize:this.mixinDatacomPage.size,f=void 0!==t.getcount?t.getcount:this.getcount,p=void 0!==t.gettree?t.gettree:this.gettree,g=void 0!==t.gettreepath?t.gettreepath:this.gettreepath,m={getCount:f},y={limitLevel:void 0!==t.limitlevel?t.limitlevel:this.limitlevel,startWith:void 0!==t.startwith?t.startwith:this.startwith};return p&&(m.getTree=y),g&&(m.getTreePath=y),s=s.skip(d*(l-1)).limit(d).get(m),s}}}}async function at(e,t){const s=`http://${e}:${t}/system/ping`;try{const e=await(n={url:s,timeout:500},new Promise((e,t)=>{x.request({...n,success(t){e(t)},fail(e){t(e)}})}));return!(!e.data||0!==e.data.code)}catch(e){return!1}var n}let ct=new class{init(e){let t={};const s=!1!==e.debugFunction&&u&&("h5"===h&&navigator.userAgent.indexOf("HBuilderX")>0||"app-plus"===h);switch(e.provider){case"tencent":t=je.init(Object.assign(e,{useDebugFunction:s}));break;case"aliyun":t=R.init(Object.assign(e,{useDebugFunction:s}));break;case"private":t=Be.init(Object.assign(e,{useDebugFunction:s}));break;default:throw new Error("未提供正确的provider参数")}const n=l;u&&n&&!n.code&&(t.debugInfo=n);let r=Promise.resolve();var o;o=1,r=new Promise((e,t)=>{setTimeout(()=>{e()},o)}),t.isReady=!1;const i=t.auth();t.initUniCloud=r.then(()=>i.getLoginState()).then(e=>e?Promise.resolve():i.signInAnonymously()).then(()=>{if(u&&t.debugInfo){const{address:e,servePort:s}=t.debugInfo;return async function(e,t){let s;for(let n=0;n{if(!u)return Promise.resolve();if(e)t.localAddress=e,t.localPort=s;else if(t.debugInfo){const e=console["app-plus"===h?"error":"warn"];"remote"===t.debugInfo.initialLaunchType?(t.debugInfo.forceRemote=!0,e("当前客户端和HBuilderX不在同一局域网下(或其他网络原因无法连接HBuilderX),uniCloud本地调试服务不对当前客户端生效。\n- 如果不使用uniCloud本地调试服务,请直接忽略此信息。\n- 如需使用uniCloud本地调试服务,请将客户端与主机连接到同一局域网下并重新运行到客户端。\n- 如果在HBuilderX开启的状态下切换过网络环境,请重启HBuilderX后再试\n- 检查系统防火墙是否拦截了HBuilderX自带的nodejs")):e("无法连接uniCloud本地调试服务,请检查当前客户端是否与主机在同一局域网下。\n- 如需使用uniCloud本地调试服务,请将客户端与主机连接到同一局域网下并重新运行到客户端。\n- 如果在HBuilderX开启的状态下切换过网络环境,请重启HBuilderX后再试\n- 检查系统防火墙是否拦截了HBuilderX自带的nodejs")}}).then(()=>(function(){if(!u||"h5"!==h)return;if(uni.getStorageSync("__LAST_DCLOUD_APPID")===I.appid)return;uni.setStorageSync("__LAST_DCLOUD_APPID",I.appid),uni.removeStorageSync("uni_id_token")&&(console.warn("检测到当前项目与上次运行到此端口的项目不一致,自动清理uni-id保存的token信息(仅开发调试时生效)"),uni.removeStorageSync("uni_id_token"),uni.removeStorageSync("uni_id_token_expired"))}(),new Promise(e=>{"quickapp-native"===h?(E="android",uni.getStorage({key:"__DC_CLOUD_UUID",success(t){A=t.data?t.data:O(32),e()}})):setTimeout(()=>{E=uni.getSystemInfoSync().platform,A=uni.getStorageSync("__DC_CLOUD_UUID")||O(32),e()},0)}))).then(()=>{t.isReady=!0}),Ze(t),function(e){const t=e.uploadFile;e.uploadFile=function(e){let s;return s=this.isReady?Promise.resolve():this.initUniCloud,s.then(()=>t.call(this,e))}}(t),function(e){e.database=function(){if(this._database)return this._database;const t={},s={};class n{constructor(e,t,s){this.content=e,this.prevStage=t,this.actionName=s}toJSON(){let e=this;const t=[e.content];for(;e.prevStage;)e=e.prevStage,t.push(e.content);return{$db:t.reverse().map(e=>({$method:e.$method,$param:e.$param}))}}get useAggregate(){let e=this,t=!1;for(;e.prevStage;){e=e.prevStage;const s=e.content.$method;if("aggregate"===s||"pipeline"===s){t=!0;break}}return t}get count(){if(!this.useAggregate)return function(){return this._send("count",Array.from(arguments))};const e=this;return function(){return i({$method:"count",$param:st(Array.from(arguments))},e,e.actionName)}}get(){return this._send("get",Array.from(arguments))}add(){return this._send("add",Array.from(arguments))}remove(){return this._send("remove",Array.from(arguments))}update(){return this._send("update",Array.from(arguments))}end(){return this._send("end",Array.from(arguments))}set(){throw new Error("clientDB禁止使用set方法")}_send(n,r){const o=_(w("database","invoke")),i=this.toJSON();return i.$db.push({$method:n,$param:st(r)}),o.then(()=>e.callFunction({name:"DCloud-clientDB",data:{action:this.actionName,command:i}})).then(e=>{const{code:n,message:r,token:o,tokenExpired:i,systemInfo:c=[]}=e.result;if(c)for(let e=0;e{t(e)}),Promise.reject(e)}o&&i&&(t.refreshToken&&t.refreshToken.forEach(e=>{e({token:o,tokenExpired:i})}),s.refreshToken&&s.refreshToken.forEach(e=>{e({token:o,tokenExpired:i})}));const u=e.result.affectedDocs;return"number"==typeof u&&Object.defineProperty(e.result,"affectedDocs",{get:()=>(console.warn("affectedDocs不再推荐使用,请使用inserted/deleted/updated/data.length替代"),u)}),_(w("database","success"),e).then(()=>_(w("database","complete"),e)).then(()=>Promise.resolve(e))},e=>{const t=new a(e.message,e.code||"SYSTEM_ERROR");return s.error&&s.error.forEach(e=>{e(t)}),/fc_function_not_found|FUNCTION_NOT_FOUND/g.test(e.message)&&console.warn("clientDB未初始化,请在web控制台保存一次schema以开启clientDB"),_(w("database","fail"),e).then(()=>_(w("database","complete"),e)).then(()=>Promise.reject(e))})}}const r=["db.Geo","db.command","command.aggregate"];function o(e,t){return r.indexOf(`${e}.${t}`)>-1}function i(e,t,s){return tt(new n(e,t,s),{get(e,t){let n="db";return e&&e.content&&(n=e.content.$method),o(n,t)?i({$method:t},e,s):function(){return i({$method:t,$param:st(Array.from(arguments))},e,s)}}})}function c({path:e,method:t}){return class{constructor(){this.param=Array.from(arguments)}toJSON(){return{$newDb:[...e.map(e=>({$method:e})),{$method:t,$param:this.param}]}}}}const u={auth:{on:(e,s)=>{t[e]=t[e]||[],t[e].indexOf(s)>-1||t[e].push(s)},off:(e,s)=>{t[e]=t[e]||[];const n=t[e].indexOf(s);-1!==n&&t[e].splice(n,1)}},on:(e,t)=>{s[e]=s[e]||[],s[e].indexOf(t)>-1||s[e].push(t)},off:(e,t)=>{s[e]=s[e]||[];const n=s[e].indexOf(t);-1!==n&&s[e].splice(n,1)},env:tt({},{get:(e,t)=>({$env:t})}),action:e=>tt({},{get:(t,s)=>o("db",s)?i({$method:s},null,e):function(){return i({$method:s,$param:st(Array.from(arguments))},null,e)}}),Geo:tt({},{get:(e,t)=>c({path:["Geo"],method:t})}),getCloudEnv:function(e){if("string"!=typeof e||!e.trim())throw new Error("getCloudEnv参数错误");return{$env:e.replace("$cloudEnv_","")}},get serverDate(){return c({path:[],method:"serverDate"})},get RegExp(){return c({path:[],method:"RegExp"})}},l=tt(u,{get:(e,t)=>o("db",t)?i({$method:t}):function(){return i({$method:t,$param:st(Array.from(arguments))})}});return this._database=l,l}}(t),function(e){e.getCurrentUserInfo=nt,e.chooseAndUploadFile=rt.initChooseAndUploadFile(e),Object.assign(e,{get mixinDatacom(){return it(e)}})}(t);return["callFunction","uploadFile","deleteFile","getTempFileURL","downloadFile","chooseAndUploadFile"].forEach(e=>{t[e]&&(t[e]=v(t[e],e))}),t.init=this.init,t}};(()=>{{const e=d;let t={};if(1===e.length)t=e[0],ct=ct.init(t);else{const t=["auth","callFunction","uploadFile","deleteFile","getTempFileURL","downloadFile","database","getCurrentUSerInfo"];let s;s=e&&e.length>0?"应用有多个服务空间,请通过uniCloud.init方法指定要使用的服务空间":f?"应用未关联服务空间,请在uniCloud目录右键关联服务空间":"uni-app cli项目内使用uniCloud需要使用HBuilderX的运行菜单运行项目,且需要在uniCloud目录关联服务空间",t.forEach(e=>{ct[e]=function(){return console.error(s),Promise.reject(new S({code:"SYS_ERR",message:s}))}})}Object.assign(ct,{get mixinDatacom(){return it(ct)}}),ct.addInterceptor=m,ct.removeInterceptor=y,u&&"h5"===h&&(window.uniCloud=ct)}})();var ut=ct;export default ut;
diff --git a/packages/webpack-uni-pages-loader/lib/platforms/mp-qq/project.config.json b/packages/webpack-uni-pages-loader/lib/platforms/mp-qq/project.config.json
index 366fcdd88a190f76da0edea5141f7e01423aeaf4..d56f9b3c0439157733aad346db166873ca8ee55d 100644
--- a/packages/webpack-uni-pages-loader/lib/platforms/mp-qq/project.config.json
+++ b/packages/webpack-uni-pages-loader/lib/platforms/mp-qq/project.config.json
@@ -8,7 +8,8 @@
"es6": false,
"postcss": false,
"minified": false,
- "newFeature": true
+ "newFeature": true,
+ "nodeModules": false
},
"compileType": "miniprogram",
"libVersion": "1.6.3",
@@ -32,4 +33,4 @@
"list": []
}
}
-}
+}
diff --git a/src/core/helpers/protocol/ui/popup.js b/src/core/helpers/protocol/ui/popup.js
index 0396fc3e8775c84cde24d53b104196254a20684c..18728ef982177c44d17bc30b2db7155ba4beba16 100644
--- a/src/core/helpers/protocol/ui/popup.js
+++ b/src/core/helpers/protocol/ui/popup.js
@@ -51,7 +51,7 @@ export const showToast = {
icon: {
default: 'success',
validator (icon, params) {
- if (['success', 'loading', 'none'].indexOf(icon) === -1) {
+ if (['success', 'loading', 'error', 'none'].indexOf(icon) === -1) {
params.icon = 'success'
}
}
@@ -122,4 +122,4 @@ export const showActionSheet = {
popover: {
type: Object
}
-}
+}
diff --git a/src/core/view/components/input/index.vue b/src/core/view/components/input/index.vue
index 29b0d0732d9b39ef995b7d38415c520f3414e8fa..26b15ec290cdbf29cf7c5c3d075e7a5496fc9fec 100644
--- a/src/core/view/components/input/index.vue
+++ b/src/core/view/components/input/index.vue
@@ -178,10 +178,28 @@ export default {
})
},
_onInput ($event, force) {
+ let outOfMaxlength = false
+
if (this.composing) {
return
}
+ // type="number" 不支持 maxlength 属性,因此需要主动限制长度。
+ if (this.inputType === 'number') {
+ const maxlength = parseInt(this.maxlength, 10)
+ if (maxlength > 0 && $event.target.value.length > maxlength) {
+ // 输入前字符长度超出范围,则不触发input,且将值还原
+ // 否则截取一定长度且触发input
+ if (this.cachedValue.length === maxlength) {
+ this.valueSync = this.cachedValue
+ outOfMaxlength = true
+ } else {
+ $event.target.value = $event.target.value.slice(0, maxlength)
+ this.valueSync = $event.target.value
+ }
+ }
+ }
+
if (~NUMBER_TYPES.indexOf(this.type)) {
// 在输入 - 负号 的情况下,event.target.value没有值,但是会触发校验 false
this.valid = this.$refs.input.validity && this.$refs.input.validity.valid
@@ -200,16 +218,7 @@ export default {
}
}
- // type="number" 不支持 maxlength 属性,因此需要主动限制长度。
- if (this.inputType === 'number') {
- const maxlength = parseInt(this.maxlength, 10)
- if (maxlength > 0 && $event.target.value.length > maxlength) {
- $event.target.value = $event.target.value.slice(0, maxlength)
- this.valueSync = $event.target.value
- // 字符长度超出范围不触发 input 事件
- return
- }
- }
+ if (outOfMaxlength) return
this.$triggerInput($event, Object.assign({
value: this.valueSync
diff --git a/src/core/view/components/textarea/index.vue b/src/core/view/components/textarea/index.vue
index 681a4ac16010230119ad2a3ec9c5bab6eff79b16..e3256167328e4d30b5044d8af2e92903c79ca537 100644
--- a/src/core/view/components/textarea/index.vue
+++ b/src/core/view/components/textarea/index.vue
@@ -270,6 +270,7 @@ uni-textarea[hidden] {
position: relative;
width: 100%;
height: 100%;
+ min-height: inherit;
}
.uni-textarea-placeholder,
.uni-textarea-line,
diff --git a/src/core/view/index.css b/src/core/view/index.css
index 479d42cd809c6c0c335e19d4eb82269a8c859f56..becbdb44324a30be915926877719fd45251a21e2 100644
--- a/src/core/view/index.css
+++ b/src/core/view/index.css
@@ -64,6 +64,10 @@ body {
content: "\EA08";
}
+.uni-icon-error:before {
+ content: "\EA0B";
+}
+
.uni-loading,
uni-button[loading]:before {
background: transparent url("data:image/svg+xml;base64, PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMDB2MTAwSDB6Ii8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTlFOUU5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTMwKSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iIzk4OTY5NyIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMCAxMDUuOTggNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjOUI5OTlBIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDYwIDc1Ljk4IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0EzQTFBMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA2NSA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNBQkE5QUEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDU4LjY2IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0IyQjJCMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNTAgNTQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjQkFCOEI5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCA1MCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDMkMwQzEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE1MCA0NS45OCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDQkNCQ0IiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEyMCA0MS4zNCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNEMkQyRDIiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDM1IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0RBREFEQSIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtNjAgMjQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTJFMkUyIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKC0zMCAtNS45OCA2NSkiLz48L3N2Zz4=") no-repeat;
diff --git a/src/core/view/mixins/field.js b/src/core/view/mixins/field.js
index e1686439e6311aef1d6a2038b6e880774db47abd..730c1f3aaf0db78acb7357208d4c129a057efcd2 100644
--- a/src/core/view/mixins/field.js
+++ b/src/core/view/mixins/field.js
@@ -117,6 +117,7 @@ export default {
}, 100)
this.$watch('value', valueChange)
this.__triggerInput = throttle(($event, detail) => {
+ this.__valueChange.cancel()
this.$emit('update:value', detail.value)
this.$trigger('input', $event, detail)
}, 100)
diff --git a/src/core/view/mixins/keyboard.js b/src/core/view/mixins/keyboard.js
index 0496c1db901b590568c59648971b99fb57a84424..32b59dd7bec869c809fddcd2c878062bb91e9ab3 100644
--- a/src/core/view/mixins/keyboard.js
+++ b/src/core/view/mixins/keyboard.js
@@ -188,6 +188,9 @@ export default {
}
el.addEventListener('blur', () => {
+ // 在iOS设备上,手动调用uni.hideKeyboard(),键盘收起并且触发blur,但实际并没有blur。
+ // 此时如果再点击页面其他地方会重新聚焦,此处做处理
+ el.blur()
focus = false
onKeyboardHide()
})
diff --git a/src/platforms/app-plus/service/api/location/get-location.js b/src/platforms/app-plus/service/api/location/get-location.js
index 973c5c83cdf313912598d5dc276f9624ec0062eb..21b3d1d7744b751ffff4b1e9a11fffeecec86b46 100644
--- a/src/platforms/app-plus/service/api/location/get-location.js
+++ b/src/platforms/app-plus/service/api/location/get-location.js
@@ -1,6 +1,7 @@
import {
wgs84togcj02,
- gcj02towgs84
+ gcj02towgs84,
+ warpPlusErrorCallback
} from '../util'
import {
@@ -53,6 +54,7 @@ export function getLocation ({
geocode = false,
altitude = false
} = {}, callbackId) {
+ const errorCallback = warpPlusErrorCallback(callbackId, 'getLocation')
plus.geolocation.getCurrentPosition(
position => {
getLocationSuccess(type, position, callbackId)
@@ -63,10 +65,7 @@ export function getLocation ({
getLocationSuccess(type, e, callbackId)
return
}
-
- invoke(callbackId, {
- errMsg: 'getLocation:fail ' + e.message
- })
+ errorCallback(e)
}, {
geocode: geocode,
enableHighAccuracy: altitude
diff --git a/src/platforms/app-plus/service/api/ui/popup.js b/src/platforms/app-plus/service/api/ui/popup.js
index 9e2cd1972b002a45364c7d6d5422efb06f9f6b86..cbb873ae35a6c506506b726dc2f999d3cef20039 100644
--- a/src/platforms/app-plus/service/api/ui/popup.js
+++ b/src/platforms/app-plus/service/api/ui/popup.js
@@ -43,7 +43,7 @@ export function showToast ({
})
toast = true
} else {
- if (icon && !~['success', 'loading', 'none'].indexOf(icon)) {
+ if (icon && !~['success', 'loading', 'error', 'none'].indexOf(icon)) {
icon = 'success'
}
const waitingOptions = {
@@ -70,11 +70,11 @@ export function showToast ({
interval: duration
}
} else {
- if (icon === 'success') {
+ if (icon !== 'loading') {
waitingOptions.loading = {
display: 'block',
height: '55px',
- icon: '__uniappsuccess.png',
+ icon: icon === 'success' ? '__uniappsuccess.png' : '__uniapperror.png',
interval: duration
}
}
diff --git a/src/platforms/app-plus/view/components/video/index.vue b/src/platforms/app-plus/view/components/video/index.vue
index 3ebd480eb333655984e36a0768b96331c9d8fc7b..0fe28fb6d69cbd6c5da488d8347f75618ea86d8b 100644
--- a/src/platforms/app-plus/view/components/video/index.vue
+++ b/src/platforms/app-plus/view/components/video/index.vue
@@ -174,13 +174,13 @@ export default {
},
header: {
type: Object,
- defult () {
+ default () {
return {}
}
},
advanced: {
type: Array,
- defult () {
+ default () {
return []
}
}
diff --git a/src/platforms/app-plus/view/index.css b/src/platforms/app-plus/view/index.css
index ecfce5c143e302ea7927c788ff1c514f9698d322..f95010120035e775c72f2f62765f00d6142c96ab 100644
--- a/src/platforms/app-plus/view/index.css
+++ b/src/platforms/app-plus/view/index.css
@@ -72,6 +72,10 @@ body {
content: "\EA08";
}
+.uni-icon-error:before {
+ content: "\EA0B";
+}
+
.uni-loading,
uni-button[loading]:before {
background: transparent url("data:image/svg+xml;base64, PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMDB2MTAwSDB6Ii8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTlFOUU5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTMwKSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iIzk4OTY5NyIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMCAxMDUuOTggNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjOUI5OTlBIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDYwIDc1Ljk4IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0EzQTFBMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA2NSA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNBQkE5QUEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDU4LjY2IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0IyQjJCMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNTAgNTQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjQkFCOEI5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCA1MCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDMkMwQzEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE1MCA0NS45OCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDQkNCQ0IiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEyMCA0MS4zNCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNEMkQyRDIiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDM1IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0RBREFEQSIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtNjAgMjQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTJFMkUyIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKC0zMCAtNS45OCA2NSkiLz48L3N2Zz4=") no-repeat;
diff --git a/src/platforms/h5/components/app/popup/toast.vue b/src/platforms/h5/components/app/popup/toast.vue
index 0ae7e407cd0c042c2719a447e4f855959708f0bc..47b12441176c54a0dc6ff8797c8b2caed76da9ad 100644
--- a/src/platforms/h5/components/app/popup/toast.vue
+++ b/src/platforms/h5/components/app/popup/toast.vue
@@ -52,7 +52,7 @@ export default {
icon: {
default: 'success',
validator (value) {
- return ['success', 'loading', 'none'].indexOf(value) !== -1
+ return ['success', 'loading', 'error', 'none'].indexOf(value) !== -1
}
},
image: {
@@ -80,6 +80,9 @@ export default {
if (this.icon === 'loading') {
return 'uni-loading'
}
+ if (this.icon === 'error') {
+ return 'uni-icon-error'
+ }
return ''
}
},
@@ -168,6 +171,11 @@ uni-toast .uni-icon_toast.uni-icon-success-no-circle:before {
font-size: 55px;
}
+uni-toast .uni-icon_toast.uni-icon-error:before {
+ color: #ffffff;
+ font-size: 50px;
+}
+
uni-toast .uni-icon_toast.uni-loading {
margin: 20px 0 0;
width: 38px;
diff --git a/src/platforms/h5/view/components/ad/index.vue b/src/platforms/h5/view/components/ad/index.vue
index 7c8e909967c9e4232b0de417359ee4186daeeba2..0c0ac5b6163ff9344e25c8c6618950db53f970de 100644
--- a/src/platforms/h5/view/components/ad/index.vue
+++ b/src/platforms/h5/view/components/ad/index.vue
@@ -78,9 +78,9 @@ class AdConfig {
_doCallback (adpid, success, fail) {
AdConfig.IS++
- var data = this._adConfig
- if (data[adpid]) {
- success(data[adpid])
+ var { a, b } = this._adConfig
+ if (a[adpid]) {
+ success(b, a[adpid])
} else {
fail(this.ERROR_INVALID_ADPID)
}
@@ -95,7 +95,7 @@ class AdConfig {
uni.request({
url: this.URL,
method: 'GET',
- timeout: 5000,
+ timeout: 8000,
data: {
d: location.hostname,
a: adpid
@@ -150,11 +150,11 @@ class AdConfig {
}
}
Object.assign(AdConfig.prototype, {
- URL: '//qy5y9ee9ch8r87pg72w5.dcloud.net.cn/hcs',
+ URL: 'https://hac1.dcloud.net.cn/ah5',
KEY: 'uni_app_ad_config',
CACHE_TIME: 1000 * 60 * 10,
ERROR_INVALID_ADPID: {
- '-5002': '无效adpid'
+ '-5002': 'invalid adpid'
}
})
@@ -234,17 +234,73 @@ class AdReport {
}
}
Object.assign(AdReport.prototype, {
- URL: '//hp66hwpyev7yx2hfughh.dcloud.net.cn/ahl',
+ URL: 'https://has1.dcloud.net.cn/ahl',
KEY: 'uni_app_ad_guid'
})
-const adProvider = {
- hx: 'zswx_hx',
- ky: 'zswx_ky'
+class AdScript {
+ static get instance () {
+ if (this._instance == null) {
+ this._instance = new AdScript()
+ }
+ return this._instance
+ }
+
+ constructor () {
+ this._instance = null
+ this._callback = {}
+ this._cache = {}
+ }
+
+ load (data, success, fail) {
+ const provider = data.provider
+ if (this._cache[provider] === undefined) {
+ this.loadScript(data)
+ }
+
+ if (this._cache[provider] === 1) {
+ success()
+ } else {
+ if (!this._callback[provider]) {
+ this._callback[provider] = []
+ }
+ this._callback[provider].push({
+ success,
+ fail
+ })
+ }
+ }
+
+ loadScript (data) {
+ const provider = data.provider
+ this._cache[provider] = 0
+ var ads = document.createElement('script')
+ ads.setAttribute('id', 'uniad_provider' + provider)
+ const script = data.script
+ for (const var1 in script) {
+ ads.setAttribute(var1, script[var1])
+ }
+ ads.onload = () => {
+ this._cache[provider] = 1
+ this._callback[provider].forEach(({ success }) => {
+ success()
+ })
+ this._callback[provider].length = 0
+ }
+ ads.onerror = (err) => {
+ this._cache[provider] = undefined
+ this._callback[provider].forEach(({ fail }) => {
+ fail(err)
+ })
+ this._callback[provider].length = 0
+ }
+ document.body.append(ads)
+ }
}
const CHECK_RENDER_DELAY = 1000
-const CHECK_RENDER_RETRY = 3
+const CHECK_RENDER_RETRY = 5
+const DEFAULT_WIDESCREEN_WIDTH = 750
export default {
name: 'Ad',
@@ -253,6 +309,14 @@ export default {
adpid: {
type: [Number, String],
default: ''
+ },
+ adpidWidescreen: {
+ type: [Number, String],
+ default: ''
+ },
+ widescreenWidth: {
+ type: [Number, String],
+ default: DEFAULT_WIDESCREEN_WIDTH
}
},
watch: {
@@ -260,19 +324,25 @@ export default {
if (val) {
this._loadData(val)
}
+ },
+ adpidWidescreen (val) {
+ if (val) {
+ this._loadData(val)
+ }
}
},
mounted () {
+ this._p = {}
this._pl = []
- this._pd = {}
this._pi = 0
this._checkTimer = null
this._checkTimerCount = 0
+ this._isWidescreen = this.$refs.container.clientWidth > parseInt(this.widescreenWidth)
this._loadData()
AdReport.instance.get({
h: __uniConfig.compilerVersion,
a: this.adpid,
- at: 30,
+ at: -3,
ic: AdConfig.IC,
is: AdConfig.IS
})
@@ -286,17 +356,18 @@ export default {
this._report(41)
},
_reset () {
+ this._p = {}
this._pl = []
- this._pd = {}
this._pi = 0
this._clearCheckTimer()
this.$refs.container.innerHTML = ''
},
_loadData (adpid) {
this._reset()
- AdConfig.instance.get(adpid || this.adpid, (data) => {
- this._pd = data
- this._pl = data.psp.split(',')
+ const aid = adpid || (this._isWidescreen ? this.adpidWidescreen : this.adpid)
+ AdConfig.instance.get(aid, (b, a) => {
+ this._b = b
+ this._pl = a
this._renderAd()
}, (err) => {
this.$trigger('error', {}, err)
@@ -307,56 +378,37 @@ export default {
return
}
- var ap = this._pl[this._pi]
- var data = this._pd[ap]
- switch (ap) {
- case adProvider.hx:
- this._renderHX(data)
- break
- case adProvider.ky:
- this._renderKY(data)
- break
- }
- },
- _renderNext () {
- if (this._pi >= this._pl.length - 1) {
- return
- }
+ const data = this._pl[this._pi]
+ const providerId = data.a1
+ this._b[providerId].provider = providerId
- this._pi++
- this._renderAd()
+ AdScript.instance.load(this._b[providerId], () => {
+ this._renderAdView(this._b[providerId], data)
+ }, (err) => {
+ this.$trigger('error', {}, err)
+ })
},
- _renderHX (data) {
- if (document.querySelector('#' + adProvider.hx)) {
- this._renderNext()
- return
- }
-
- var ad = document.createElement('script')
- ad.src = data.src || data.url
-
+ _renderAdView (provider, data) {
+ var randomId = this._randomId()
var adView = document.createElement('div')
- adView.setAttribute('id', adProvider.hx)
- adView.appendChild(ad)
-
+ adView.setAttribute('class', randomId)
this.$refs.container.innerHTML = ''
this.$refs.container.append(adView)
+ let bindThis = window
+ provider.s.split('.').reduce((total, currentValue) => {
+ bindThis = total
+ return total[currentValue]
+ }, window).bind(bindThis)(data.a2, randomId, 2)
this._startCheckTimer()
},
- _renderKY (data) {
- var randomId = this._randomId()
- var ad = document.createElement('script')
- ad.src = (data.src || data.url) + '&_ct=' + randomId
-
- var adView = document.createElement('div')
- adView.setAttribute('id', randomId)
- adView.appendChild(ad)
-
- this.$refs.container.innerHTML = ''
- this.$refs.container.append(adView)
+ _renderNext () {
+ if (this._pi >= this._pl.length - 1) {
+ return
+ }
- this._startCheckTimer()
+ this._pi++
+ this._renderAd()
},
_checkRender () {
var hasContent = (this.$refs.container.children.length > 0 && this.$refs.container.clientHeight > 40)
@@ -388,27 +440,18 @@ export default {
}
},
_report (type) {
- var taskId = ''
- if (this._pl.length > 0 && this._pi < this._pl.length) {
- var data = this._pd[this._pl[this._pi]]
- if (data) {
- taskId = data.task_id
- }
- }
-
AdReport.instance.get({
h: __uniConfig.compilerVersion,
a: this.adpid,
- t: taskId,
at: type
})
},
_randomId () {
var result = ''
- for (let i = 0; i < 2; i++) {
+ for (let i = 0; i < 4; i++) {
result += (65536 * (1 + Math.random()) | 0).toString(16).substring(1)
}
- return result
+ return '_u' + result
}
}
}
diff --git a/src/platforms/h5/view/index.css b/src/platforms/h5/view/index.css
index 8b3d2f17c2d4baf97ed54536ba88a8a6ee6db36f..daa705e49c87360af793cadc7556ee54c23803a0 100644
--- a/src/platforms/h5/view/index.css
+++ b/src/platforms/h5/view/index.css
@@ -64,6 +64,10 @@ body {
content: "\EA08";
}
+.uni-icon-error:before {
+ content: "\EA0B";
+}
+
.uni-loading,
uni-button[loading]:before {
background: transparent url("data:image/svg+xml;base64, PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMDB2MTAwSDB6Ii8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTlFOUU5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTMwKSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iIzk4OTY5NyIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMCAxMDUuOTggNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjOUI5OTlBIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDYwIDc1Ljk4IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0EzQTFBMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA2NSA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNBQkE5QUEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDU4LjY2IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0IyQjJCMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNTAgNTQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjQkFCOEI5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCA1MCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDMkMwQzEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE1MCA0NS45OCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDQkNCQ0IiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEyMCA0MS4zNCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNEMkQyRDIiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDM1IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0RBREFEQSIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtNjAgMjQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTJFMkUyIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKC0zMCAtNS45OCA2NSkiLz48L3N2Zz4=") no-repeat;