@kbapp/js-bridge 1.0.16-alpha.0 → 1.0.17-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.MD +21 -13
- package/dist/es/lib/bridge-code.js +12 -2
- package/dist/es/lib/save-image-to-local.js +27 -8
- package/dist/types/lib/bridge-code.d.ts +5 -0
- package/dist/types/lib/save-image-to-local.d.ts +10 -6
- package/dist/umd/index.js +2 -2
- package/docs/api/save-image-to-local.md +14 -6
- package/package.json +1 -1
package/README.MD
CHANGED
|
@@ -795,12 +795,13 @@ runAction({
|
|
|
795
795
|
|
|
796
796
|
#### 请求参数
|
|
797
797
|
|
|
798
|
-
| 参数
|
|
799
|
-
|
|
|
800
|
-
| `imageUrl`
|
|
801
|
-
| `
|
|
802
|
-
| `
|
|
803
|
-
| `
|
|
798
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
799
|
+
| -------------- | ----------------------------- | ---- | --------------------------------------- |
|
|
800
|
+
| `imageUrl` | `string` | 否 | 图片网络地址(与 `encodedImage` 二选一) |
|
|
801
|
+
| `encodedImage` | `string` | 否 | 图片 base64(与 `imageUrl` 二选一) |
|
|
802
|
+
| `success` | `() => void` | 否 | 成功回调 |
|
|
803
|
+
| `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
|
|
804
|
+
| `complete` | `() => void` | 否 | 完成回调 |
|
|
804
805
|
|
|
805
806
|
#### 返回值
|
|
806
807
|
|
|
@@ -819,16 +820,23 @@ Promise<{ errCode: BridgeCode }>
|
|
|
819
820
|
```js
|
|
820
821
|
import { saveImageToLocal, BridgeCode } from '@kbapp/js-bridge'
|
|
821
822
|
|
|
822
|
-
saveImageToLocal({
|
|
823
|
-
imageUrl: 'https://static.kaiba315.com.cn/kaiba-logo.png',
|
|
824
|
-
success() {
|
|
825
|
-
console.log('保存图片成功')
|
|
826
|
-
},
|
|
823
|
+
saveImageToLocal({
|
|
824
|
+
imageUrl: 'https://static.kaiba315.com.cn/kaiba-logo.png',
|
|
825
|
+
success() {
|
|
826
|
+
console.log('保存图片成功')
|
|
827
|
+
},
|
|
827
828
|
fail(error) {
|
|
828
829
|
console.log('保存图片失败', error)
|
|
829
830
|
},
|
|
830
|
-
})
|
|
831
|
-
|
|
831
|
+
})
|
|
832
|
+
|
|
833
|
+
saveImageToLocal({
|
|
834
|
+
encodedImage: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...',
|
|
835
|
+
success() {
|
|
836
|
+
console.log('保存base64图片成功')
|
|
837
|
+
},
|
|
838
|
+
})
|
|
839
|
+
```
|
|
832
840
|
|
|
833
841
|
> 支持 Promise 风格调用
|
|
834
842
|
|
|
@@ -2,6 +2,16 @@ const r = class r {
|
|
|
2
2
|
constructor(s) {
|
|
3
3
|
this.errorCode = s.errorCode, this.errorMsg = s.errorMsg;
|
|
4
4
|
}
|
|
5
|
+
/**
|
|
6
|
+
*
|
|
7
|
+
* @description 自定义业务错误
|
|
8
|
+
*/
|
|
9
|
+
static createBusinessError(s) {
|
|
10
|
+
return new r({
|
|
11
|
+
errorCode: 1004,
|
|
12
|
+
errorMsg: s
|
|
13
|
+
});
|
|
14
|
+
}
|
|
5
15
|
};
|
|
6
16
|
r.UNKNOWN = new r({
|
|
7
17
|
errorCode: 1e3,
|
|
@@ -16,7 +26,7 @@ r.UNKNOWN = new r({
|
|
|
16
26
|
errorCode: 1003,
|
|
17
27
|
errorMsg: "请在开吧app内执行"
|
|
18
28
|
});
|
|
19
|
-
let
|
|
29
|
+
let e = r;
|
|
20
30
|
export {
|
|
21
|
-
|
|
31
|
+
e as BridgeCode
|
|
22
32
|
};
|
|
@@ -1,16 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
var n = (r, a, o) => new Promise((c, s) => {
|
|
2
|
+
var p = (e) => {
|
|
3
|
+
try {
|
|
4
|
+
m(o.next(e));
|
|
5
|
+
} catch (i) {
|
|
6
|
+
s(i);
|
|
7
|
+
}
|
|
8
|
+
}, t = (e) => {
|
|
9
|
+
try {
|
|
10
|
+
m(o.throw(e));
|
|
11
|
+
} catch (i) {
|
|
12
|
+
s(i);
|
|
13
|
+
}
|
|
14
|
+
}, m = (e) => e.done ? c(e.value) : Promise.resolve(e.value).then(p, t);
|
|
15
|
+
m((o = o.apply(r, a)).next());
|
|
16
|
+
});
|
|
17
|
+
import { runBridgeApi as g } from "../core/index.js";
|
|
18
|
+
import { wrapAsync as d } from "../utils/wrap-async.js";
|
|
19
|
+
import { BridgeCode as u } from "./bridge-code.js";
|
|
20
|
+
const B = d(
|
|
21
|
+
(r) => n(void 0, null, function* () {
|
|
22
|
+
if (!r.imageUrl && !r.encodedImage)
|
|
23
|
+
return Promise.reject(u.createBusinessError("imageUrl or encodedImage is required"));
|
|
24
|
+
g({
|
|
6
25
|
name: "OpenActRequest",
|
|
7
26
|
params: {
|
|
8
27
|
type: 62,
|
|
9
|
-
data:
|
|
28
|
+
data: r
|
|
10
29
|
}
|
|
11
30
|
});
|
|
12
|
-
}
|
|
31
|
+
})
|
|
13
32
|
);
|
|
14
33
|
export {
|
|
15
|
-
|
|
34
|
+
B as saveImageToLocal
|
|
16
35
|
};
|
|
@@ -11,4 +11,9 @@ export declare class BridgeCode {
|
|
|
11
11
|
static UNSUPPORTED_VERSION: BridgeCode;
|
|
12
12
|
static TIMEOUT: BridgeCode;
|
|
13
13
|
static UNSUPPORTED_BRIDGE_ENV: BridgeCode;
|
|
14
|
+
/**
|
|
15
|
+
*
|
|
16
|
+
* @description 自定义业务错误
|
|
17
|
+
*/
|
|
18
|
+
static createBusinessError(message: string): BridgeCode;
|
|
14
19
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { BridgeCode } from './bridge-code';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
*
|
|
3
5
|
* @description 保存图片到本地
|
|
@@ -12,11 +14,13 @@ saveImageToLocal({
|
|
|
12
14
|
```
|
|
13
15
|
*
|
|
14
16
|
*/
|
|
15
|
-
export declare const saveImageToLocal: (params
|
|
16
|
-
/** 图片url(
|
|
17
|
-
imageUrl
|
|
17
|
+
export declare const saveImageToLocal: (params?: ({
|
|
18
|
+
/** 图片url(网络地址) imageUrl|encodedImage 二选一 */
|
|
19
|
+
imageUrl?: string;
|
|
20
|
+
/** 图片base64 imageBase64|encodedImage 二选一 */
|
|
21
|
+
encodedImage?: string;
|
|
18
22
|
} & {
|
|
19
|
-
success?: ((res:
|
|
20
|
-
fail?: (error:
|
|
23
|
+
success?: ((res: undefined) => void) | undefined;
|
|
24
|
+
fail?: (error: BridgeCode) => void;
|
|
21
25
|
complete?: () => void;
|
|
22
|
-
}) => Promise<
|
|
26
|
+
}) | undefined) => Promise<undefined>;
|
package/dist/umd/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(function(t,l){typeof exports=="object"&&typeof module!="undefined"?l(exports):typeof define=="function"&&define.amd?define(["exports"],l):(t=typeof globalThis!="undefined"?globalThis:t||self,l(t.kbBridge={}))})(this,function(t){"use strict";var Ee=Object.defineProperty;var b=Object.getOwnPropertySymbols;var Q=Object.prototype.hasOwnProperty,G=Object.prototype.propertyIsEnumerable;var W=(t,l,c)=>l in t?Ee(t,l,{enumerable:!0,configurable:!0,writable:!0,value:c}):t[l]=c,K=(t,l)=>{for(var c in l||(l={}))Q.call(l,c)&&W(t,c,l[c]);if(b)for(var c of b(l))G.call(l,c)&&W(t,c,l[c]);return t};var
|
|
2
|
-
`||f==="\r"?f:f===" "?"\\t":""})):u=
|
|
1
|
+
(function(t,l){typeof exports=="object"&&typeof module!="undefined"?l(exports):typeof define=="function"&&define.amd?define(["exports"],l):(t=typeof globalThis!="undefined"?globalThis:t||self,l(t.kbBridge={}))})(this,function(t){"use strict";var Ee=Object.defineProperty;var b=Object.getOwnPropertySymbols;var Q=Object.prototype.hasOwnProperty,G=Object.prototype.propertyIsEnumerable;var W=(t,l,c)=>l in t?Ee(t,l,{enumerable:!0,configurable:!0,writable:!0,value:c}):t[l]=c,K=(t,l)=>{for(var c in l||(l={}))Q.call(l,c)&&W(t,c,l[c]);if(b)for(var c of b(l))G.call(l,c)&&W(t,c,l[c]);return t};var m=(t,l)=>{var c={};for(var h in t)Q.call(t,h)&&l.indexOf(h)<0&&(c[h]=t[h]);if(t!=null&&b)for(var h of b(t))l.indexOf(h)<0&&G.call(t,h)&&(c[h]=t[h]);return c};var A=(t,l,c)=>new Promise((h,_)=>{var R=d=>{try{p(c.next(d))}catch(E){_(E)}},y=d=>{try{p(c.throw(d))}catch(E){_(E)}},p=d=>d.done?h(d.value):Promise.resolve(d.value).then(R,y);p((c=c.apply(t,l)).next())});var L;function l(e){if(Object.prototype.toString.call(e)!=="[object Object]")return e;const n={};return Object.keys(e).forEach(r=>{const a=e[r];a!=null&&(n[r]=Object.prototype.toString.call(a)==="[object Object]"?l(a):a)}),n}const w=class w{constructor(n){this.errorCode=n.errorCode,this.errorMsg=n.errorMsg}static createBusinessError(n){return new w({errorCode:1004,errorMsg:n})}};w.UNKNOWN=new w({errorCode:1e3,errorMsg:"未知错误"}),w.UNSUPPORTED_VERSION=new w({errorCode:1001,errorMsg:"当前开吧版本不支持"}),w.TIMEOUT=new w({errorCode:1002,errorMsg:"执行超时"}),w.UNSUPPORTED_BRIDGE_ENV=new w({errorCode:1003,errorMsg:"请在开吧app内执行"});let c=w;const h=()=>{const e=(o,s,i)=>{var u="";typeof s=="function"&&(i=s,s={});var f={data:s===void 0?null:s};if(typeof i=="function"){var g="dscb"+window.dscb++;window[g]=i,f._dscbstub=g}if(f=JSON.stringify(f),window.flutter_inappwebview?window.flutter_inappwebview.callHandler&&(u=window.flutter_inappwebview.callHandler(""+o,f)):(window._dswk||navigator.userAgent.indexOf("_dsbridge")!=-1)&&(u=prompt("_flutterDsbridge="+o,f)),u instanceof Promise)return u;try{return JSON.parse(u||"{}").data}catch(S){console.error("callHandle异常,JSON.parse错误")}},n=()=>window.navigator.userAgent.includes("Android")?window.flutter_inappwebview&&window.flutter_inappwebview._platformReady:!0,r=(()=>{const o=[],s=setInterval(()=>{n()&&(clearInterval(s),o.forEach(i=>{e.apply(window,i)}),o.length=0)},500);return(...i)=>{o.push(i)}})();var a={default:void 0,callHandler:function(o,s,i){return n()?e(o,s,i):r(o,s,i)},register:function(o,s,i){var u=i?window._dsaf:window._dsf;window._dsInit||(window._dsInit=!0,setTimeout(function(){a.callHandler("_dsb.dsinit")},0)),typeof s=="object"?u._obs[o]=s:u[o]=s},registerHandler:function(o,s){this.register(o,s,!0)}};return function(){if(!window._dsf){var o={_dsf:{_obs:{}},_dsaf:{_obs:{}},dscb:0,jsBridge:a,_handleMessageFromNative:function(i){var u=JSON.parse(i.data),f={id:i.callbackId,complete:!0},g=this._dsf[i.method],S=this._dsaf[i.method],H=function(N,M){f.data=N.apply(M,u),a.callHandler("_dsb.returnValue",f)},j=function(N,M){u.push(function(Se,Re){f.data=Se,f.complete=Re!==!1,a.callHandler("_dsb.returnValue",f)}),N.apply(M,u)};if(g)H(g,this._dsf);else if(S)j(S,this._dsaf);else{var k=i.method.split(".");if(k.length<2)return;var F=k.pop(),J=k.join("."),I=this._dsf._obs,O=I[J]||{},v=O[F];if(v&&typeof v=="function"){H(v,O);return}if(I=this._dsaf._obs,O=I[J]||{},v=O[F],v&&typeof v=="function"){j(v,O);return}}}};for(var s in o)window[s]=o[s]}}(),a},_=(e=>/(kb)/i.test(e)?h():{registerHandler(n,r){throw c.UNSUPPORTED_BRIDGE_ENV},callHandler(n,r,a){throw c.UNSUPPORTED_BRIDGE_ENV}})((L=window==null?void 0:window.navigator)==null?void 0:L.userAgent),R=e=>new Promise((n,r)=>{var a,o,s;try{_.registerHandler(e.name,e.handler),(a=e.success)==null||a.call(e),n()}catch(i){(o=e.fail)==null||o.call(e,i),r(i)}finally{(s=e.complete)==null||s.call(e)}});function y(e){const n=r=>{let a;const o=i=>{var u;(!a||a==="success")&&(a="success",(u=r.success)==null||u.call(r,i))},s=i=>{var u;a||(a="error",(u=r.fail)==null||u.call(r,i))};r.timeout&&setTimeout(()=>{s(c.TIMEOUT)},r.timeout);try{_.callHandler(r.name,r.params,i=>{let u;try{typeof i=="string"?u=JSON.parse(i.replace(/^\s+|\s+$/g,"").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\u0000-\u001F\u007F-\u009F]/g,function(f){return f===`
|
|
2
|
+
`||f==="\r"?f:f===" "?"\\t":""})):u=i}catch(f){u=i}o(u)})}catch(i){s(i)}};return new Promise((r,a)=>{n({name:e.name,params:l(e.params),timeout:e.timeout,success:o=>{var s,i;(s=e.success)==null||s.call(e,o),(i=e.complete)==null||i.call(e),r(o)},fail:o=>{var s,i;(s=e.fail)==null||s.call(e,o),(i=e.complete)==null||i.call(e),a(o)}})})}function p(e){_.callHandler(e.name,e.params,n=>{})}function d(e){return function(...r){return A(this,null,function*(){const f=r[0]||{},{success:o,fail:s,complete:i}=f,u=m(f,["success","fail","complete"]);try{const g=yield Promise.resolve(e(u));return o==null||o(g),g}catch(g){const S=g!=null&&g.errorCode?g:new c({errorCode:c.UNKNOWN.errorCode,errorMsg:String(g)});throw s==null||s(S),S}finally{i==null||i()}})}}function E(e){const n=new Map;return function(...r){const a=JSON.stringify(r);if(n.has(a))return n.get(a);const o=e(...r);return n.set(a,o),Promise.resolve(o).catch(()=>{n.delete(a)}),o}}class ${}const q=d(E(()=>y({name:"OpenActRequest",timeout:5e3,params:{type:35,data:{}}}))),V=d(e=>A(this,null,function*(){return(yield q()).vcode>=e.minVersion}));function z(e,n){return(...r)=>V({minVersion:e.minVersion}).then(a=>a?n(...r):Promise.reject(new c({errorCode:c.UNSUPPORTED_VERSION.errorCode,errorMsg:`最低版本要求${e.minVersion}`})))}const X=d(()=>{p({name:"OpenActRequest",params:{type:56,data:null}})}),Y=d(()=>{p({name:"OpenActRequest",params:{type:-1,data:{}}})}),U={microphone:{description:"用于发帖上传音频"},location:{description:"获取你选择的位置信息,用于线下导航服务"},camera:{description:"收集你选中的照片或视频信息 ,用于 发表评论、分享视频"}},Z=d(e=>(Object.assign(U,e),R({name:"getPermissionUsage",handler(n,r){r(U[n.permission])}}))),x=/(kb_flutter|kb_dsbridge_flutter|kb_ios|kb_android|kb_dsbridge_android)/i.test(window.navigator.userAgent),ee=d(e=>A(this,null,function*(){const o=e,{kbKey:n}=o,r=m(o,["kbKey"]),{data:a}=yield y({name:"OpenActRequest",timeout:5e3,params:{type:51,data:r}});return a}));var B=(e=>(e[e.FREE=1]="FREE",e[e.FORBID=2]="FORBID",e[e.REQUIRED=3]="REQUIRED",e))(B||{});class C{constructor(){this.textMin=0,this.textMax=1e3,this.imageMax=9,this.imageMin=0,this.audioRqr=1,this.videoRqr=1,this.mediaRqr=2,this.streetRqr=1}}function te(e){const n=new C;return e&&Object.keys(e).forEach(r=>{n[r]=e[r]}),{hint:e==null?void 0:e.placeholder,initialText:e==null?void 0:e.initialText,audio:n.audioRqr!==2,image:n.imageMax!==0,video:n.videoRqr!==2,address:n.streetRqr!==2,asset_video:n.mediaRqr!==2,audio_must:n.audioRqr===3,image_must:n.imageMin>0,asset_video_must:n.mediaRqr===3,max_image_count:n.imageMax,min_image_count:n.imageMin,video_must:n.videoRqr===3,text_must:n.textMin>0,content_max_length:n.textMax,content_min_length:n.textMin}}const ne=d(e=>A(this,null,function*(){var n;return y({name:"OpenActRequest",params:{type:13,data:(n=e==null?void 0:e.postRule)!=null?n:{}}}).then(({data:r})=>{const s=r,{pic:a}=s,o=m(s,["pic"]);return K({images:a},o)})})),re=d(e=>{p({name:"OpenActRequest",params:{type:69,data:{eventId:e.eventName,trackParams:e.eventParams,ExtEventType:e.eventType}}})}),ie=d(e=>{p({name:"OpenActRequest",params:{type:1001,data:e}})}),oe=d(e=>A(this,null,function*(){if(!e.imageUrl&&!e.encodedImage)return Promise.reject(c.createBusinessError("imageUrl or encodedImage is required"));p({name:"OpenActRequest",params:{type:62,data:e}})})),se=d(e=>{p({name:"OpenActRequest",params:{type:63,data:e}})}),ae=d(()=>y({name:"OpenActRequest",params:{type:26,data:{}}})),ce=d(e=>{p({name:"OpenActRequest",params:{type:71,data:e}})}),de=d(e=>{p({name:"OpenActRequest",params:{type:64,data:e}})}),ue=d(e=>{p({name:"OpenActRequest",params:{type:58,data:e}})}),P="SHARE_EVENT_NAME";class le{}const fe=d(e=>R({name:"CommonShare",handler(n,r){window.dispatchEvent(new Event(P)),"onShareApp"in e&&e.onShareApp?r({type:12,data:e.onShareApp()}):r({type:12,data:e})}})),pe=d(e=>A(this,null,function*(){window.dispatchEvent(new Event(P)),p({name:"OpenActRequest",params:{type:58,data:e}})}));function ge(e){return window.addEventListener(P,e),()=>{window.removeEventListener(P,e)}}const he=d(e=>{p({name:"OpenActRequest",params:{type:68,data:{show:e.showMenu,showActionMode:e.panelStyle||0}}})}),we=d(()=>y({name:"OpenActRequest",params:{type:72}})),Ae=d(()=>A(this,null,function*(){p({name:"OpenActRequest",params:{type:73}})}));class ye{}const D=d(()=>A(this,null,function*(){return(yield y({name:"OpenActRequest",timeout:5e3,params:{type:31,data:{requireLogin:!1}}})).data||null})),T=(()=>{const e=new Set,n=(()=>{let r;const a=o=>{r=setTimeout(()=>A(this,null,function*(){const i=yield D();if(!i)return a(++o);e.forEach(u=>u(i)),e.clear()}),(i=>i===0?0:i<50?600:i<80?1e3:5e3)(o))};return{start(){r&&clearTimeout(r),e.size>0&&a(0)},stop(){r&&clearTimeout(r)}}})();return{addTask(r){e.add(r)},removeTask(r){e.delete(r),e.size===0&&n.stop()},triggerCheckTask(){n.start()}}})(),ve=d(()=>A(this,null,function*(){T.triggerCheckTask(),yield p({name:"OpenActRequest",params:{type:31,data:{requireLogin:!0}}})})),_e=e=>(T.addTask(e),T.triggerCheckTask(),()=>{T.removeTask(e)});t.AppBaseInfo=$,t.AppLoginInfo=ye,t.AppShareModel=le,t.BridgeCode=c,t.IS_KB_APP_ENV=x,t.KbRequirement=B,t.NoteThreadPostRule=C,t.checkForNewVersion=X,t.closeWebView=Y,t.decorateAppVersionSupport=z,t.defineAppShareModel=fe,t.defineAppSharePanelState=he,t.defineBridgeCallback=R,t.definePermissionUsage=Z,t.generateKBSign=ee,t.generatePostEditorParamsByThreadPostRule=te,t.getAppBaseInfo=q,t.getAppLoginInfo=D,t.getAppSubscribeNotifyStatus=we,t.isAppVersionSupport=V,t.onAppSharePanelShow=ge,t.onLoopCheckAppLogin=_e,t.openAppSharePanel=pe,t.openAppSubscribeNotifySettings=Ae,t.openPostEditor=ne,t.reportDAEvent=re,t.runAction=ie,t.runBridgeApi=p,t.runBridgeApiResponse=y,t.saveImageToLocal=oe,t.saveVideoToLocal=se,t.scanQRCode=ae,t.setScreenOrientation=ce,t.setWebViewTitle=de,t.shareImage=ue,t.triggerAppLogin=ve,Object.defineProperty(t,Symbol.toStringTag,{value:"Module"})});
|
|
@@ -8,12 +8,13 @@
|
|
|
8
8
|
|
|
9
9
|
#### 请求参数
|
|
10
10
|
|
|
11
|
-
| 参数
|
|
12
|
-
|
|
|
13
|
-
| `imageUrl`
|
|
14
|
-
| `
|
|
15
|
-
| `
|
|
16
|
-
| `
|
|
11
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
12
|
+
| -------------- | ----------------------------- | ---- | --------------------------------------- |
|
|
13
|
+
| `imageUrl` | `string` | 否 | 图片网络地址(与 `encodedImage` 二选一) |
|
|
14
|
+
| `encodedImage` | `string` | 否 | 图片 base64(与 `imageUrl` 二选一) |
|
|
15
|
+
| `success` | `() => void` | 否 | 成功回调 |
|
|
16
|
+
| `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
|
|
17
|
+
| `complete` | `() => void` | 否 | 完成回调 |
|
|
17
18
|
|
|
18
19
|
#### 返回值
|
|
19
20
|
|
|
@@ -41,6 +42,13 @@ saveImageToLocal({
|
|
|
41
42
|
console.log('保存图片失败', error)
|
|
42
43
|
},
|
|
43
44
|
})
|
|
45
|
+
|
|
46
|
+
saveImageToLocal({
|
|
47
|
+
encodedImage: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...',
|
|
48
|
+
success() {
|
|
49
|
+
console.log('保存base64图片成功')
|
|
50
|
+
},
|
|
51
|
+
})
|
|
44
52
|
```
|
|
45
53
|
|
|
46
54
|
> 支持 Promise 风格调用
|