tsp-component
Version:
提供多端和react版本的UI组件
188 lines (175 loc) • 5.93 kB
text/typescript
import Exception from '../exception';
import Framework from './index';
import Toast from '../toast';
import { hex_sha1 } from '../util/tools/sha1';
declare const wx: any;
declare const process: {
env: {
NODE_ENV: string;
}
};
interface WxOnShareParams {
title?: string;
imgUrl?: string;
desc?: string;
success?: () => void;
}
class WeiXin {
constructor(params: TspFrameworkWeiXinOptions) {
this.shareCurrentUrl = params.shareCurrentUrl;
this.ready = params.ready;
}
/** 当前页面encodeURIComponent后的地址 */
public shareCurrentUrl: string;
/** wx.ready回调 */
public ready: () => void;
/** 从相册中选择图片 */
public chooseImage(savephotos: (serverId: string, localData: string) => void): void {
wx.chooseImage({
count: 1, // 默认9
sizeType: ['original'], // 可以指定是原图还是压缩图,默认二者都有
sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
success: (res) => {
const localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
this.uploadImage(localIds[0], savephotos);
}
});
}
/** 获取本地图片接口 */
public getLocalImgData(localId: string, showphotos: (localId: string) => void): void {
wx.getLocalImgData({
localId, // 图片的localID
success(res: { localData: string }): void {
// localData是图片的base64数据,可以用img标签显示
showphotos(res.localData);
}
});
}
/** 获取网络状态 */
public getNetworkType(): void {
wx.getNetworkType({
success: (res) => {
// 返回网络类型2g,3g,4g,wifi
Framework.global.network = res.networkType;
Exception.network = res.networkType;
}
});
}
/** 隐藏菜单 */
public hideMenuItems(): void {
if (process.env.NODE_ENV === 'production') {
wx.hideMenuItems({
menuList: [
'menuItem:share:appMessage',
'menuItem:share:timeline',
'menuItem:share:qq',
'menuItem:share:weiboApp',
'menuItem:favorite',
'menuItem:share:facebook',
'menuItem:share:QZone',
'menuItem:editTag',
'menuItem:delete',
'menuItem:copyUrl',
'menuItem:originPage',
'menuItem:readMode',
'menuItem:share:email',
'menuItem:share:brand'
]
});
}
}
/** 微信分享事件监听 */
public onWxShare(params: WxOnShareParams): void {
if (!Framework.wx.shareCurrentUrl) {
console.error('wx.shareCurrentUrl不能为空');
return;
}
if (process.env.NODE_ENV === 'production') {
wx.ready(() => {
const url = encodeURIComponent(this.shareCurrentUrl);
const appId = Framework.config.appId;
// tslint:disable-next-line:max-line-length
const link = `http://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${url}&response_type=code&scope=snsapi_userinfo&state=#wechat_redirect`;
const apiList = [
'onMenuShareTimeline',
'onMenuShareAppMessage',
'onMenuShareQQ',
'onMenuShareWeibo',
'onMenuShareQZone'
];
for (let i = 0; i < apiList.length; i++) {
this.share(apiList[i], link, params);
}
});
}
}
/** 微信分享方法注册 */
private share(api: string, link: string, params: WxOnShareParams): void {
const { title, desc, imgUrl } = params;
wx[api]({
title: title || '悦家云',
desc: desc || '让房子的事更简单',
link,
imgUrl: imgUrl || 'https://wap.yj.cn.com/assert/img/logo.jpg',
success: () => {
if (params.success) {
params.success();
}
}
});
}
/** 预览图片 */
public previewImage(srcArray: string[], current: number): void {
if (process.env.NODE_ENV === 'production') {
wx.ready(() => {
const urls = srcArray.map((value) => {
if (value.indexOf('http') >= 0) {
return value.replace('s_', 'l_');
}
return Framework.config.imgHost + value.replace('s_', 'l_');
});
wx.previewImage({
current: urls[current], // 当前显示图片的http链接
urls // 需要预览的图片http链接列表
});
});
}
}
/** 上传图片 */
public uploadImage(localId: string, savephotos: (serverId: string, localData: string) => void): void {
Toast.loading('上传中');
wx.uploadImage({
localId, // 需要上传的图片的本地ID,由chooseImage接口获得
isShowProgressTips: 0, // 默认为1,显示进度提示
success: (res) => {
Toast.hide();
if (window['__wxjs_is_wkwebview']) {
// 返回图片的服务器端ID
this.getLocalImgData(localId, (localData) => savephotos(res.serverId, localData));
} else {
savephotos(res.serverId, localId);
}
},
error: (e) => {
Toast.hide();
}
});
}
/** 微信配置 */
public wxConfig(): void {
const timestamp = new Date().getTime();
const nonceStr = 'ak0os7h1dojn51ojvs5r8lfwsq3debsu';
const url = window.location.href.split('#')[0];
const data = `jsapi_ticket=${Framework.config.ticket}&noncestr=${nonceStr}×tamp=${timestamp}&url=${url}`;
const signature = hex_sha1(data);
wx.config({
debug: Framework.config.wxDebug,
appId: Framework.config.appId,
timestamp,
nonceStr,
signature,
jsApiList: window['wxJsApiList']
});
}
}
export default WeiXin;