From f763e90254473b25a6921a891a4412cd821df55c Mon Sep 17 00:00:00 2001
From: kuaileWu <1432334894@qq.com>
Date: Fri, 7 Mar 2025 14:58:14 +0800
Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E4=BF=A1h5=20jssdk=E8=B0=83=E8=B5=B7?=
=?UTF-8?q?=E5=BE=AE=E4=BF=A1=E6=89=AB=E4=B8=80=E6=89=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
App.vue | 5 +-
components/tabbar.vue | 154 +++++-
node_modules/weixin-js-sdk/LICENSE | 21 +
node_modules/weixin-js-sdk/README.md | 36 ++
node_modules/weixin-js-sdk/index.d.ts | 601 +++++++++++++++++++++
node_modules/weixin-js-sdk/index.js | 891 ++++++++++++++++++++++++++++++++
node_modules/weixin-js-sdk/package.json | 41 ++
package-lock.json | 11 +
static/images/frontend/scan.png | Bin 0 -> 658 bytes
9 files changed, 1734 insertions(+), 26 deletions(-)
create mode 100644 node_modules/weixin-js-sdk/LICENSE
create mode 100644 node_modules/weixin-js-sdk/README.md
create mode 100644 node_modules/weixin-js-sdk/index.d.ts
create mode 100644 node_modules/weixin-js-sdk/index.js
create mode 100644 node_modules/weixin-js-sdk/package.json
create mode 100644 package-lock.json
create mode 100644 static/images/frontend/scan.png
diff --git a/App.vue b/App.vue
index c087f74..e337eb2 100644
--- a/App.vue
+++ b/App.vue
@@ -28,10 +28,7 @@
}
}else{
this.globalData.doctorId = did
- uni.setStorageSync(this.globalData.doctoridStorageKey, this.globalData.doctorId)
- uni.navigateTo({
- url:'/'
- })
+ location.href = '/'
}
},
onShow: function() {},
diff --git a/components/tabbar.vue b/components/tabbar.vue
index 6939687..6252868 100644
--- a/components/tabbar.vue
+++ b/components/tabbar.vue
@@ -3,16 +3,21 @@
-
+
{{leftButtonText}}
-
-
+
+
+
+
+
+ 扫码报道
+
-
+
我的
@@ -21,6 +26,8 @@
\ No newline at end of file
diff --git a/node_modules/weixin-js-sdk/LICENSE b/node_modules/weixin-js-sdk/LICENSE
new file mode 100644
index 0000000..7383c87
--- /dev/null
+++ b/node_modules/weixin-js-sdk/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023 Yanxi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/weixin-js-sdk/README.md b/node_modules/weixin-js-sdk/README.md
new file mode 100644
index 0000000..62143d2
--- /dev/null
+++ b/node_modules/weixin-js-sdk/README.md
@@ -0,0 +1,36 @@
+微信官方 js-sdk
+----
+
+说明: 仅将官方 js-sdk 发布到 npm,支持 CommonJS,便于 browserify, webpack 等直接使用,支持 TypeScript。
+
+
+官方 JS 源码: https://res.wx.qq.com/open/js/jweixin-1.6.0.js
+
+官方使用说明: https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html
+
+安装:
+```shell
+npm install weixin-js-sdk
+```
+
+使用:
+```javascript
+// commonjs
+var wx = require('weixin-js-sdk');
+
+// es module
+import wx from 'weixin-js-sdk'
+```
+
+### Old versions
+
+* [1.0.0](https://github.com/yanxi123-com/weixin-js-sdk/tree/1.0.0)
+* [1.2.0](https://github.com/yanxi123-com/weixin-js-sdk/tree/1.2.0)
+
+### 个人主页
+
+* [https://yanxi123.com/](https://yanxi123.com/)
+
+### 感谢
+
+TypeScript 定义文件来自 [wx-jssdk-ts](https://github.com/zhaoky/wx-jssdk-ts/blob/master/index.d.ts)
diff --git a/node_modules/weixin-js-sdk/index.d.ts b/node_modules/weixin-js-sdk/index.d.ts
new file mode 100644
index 0000000..133a421
--- /dev/null
+++ b/node_modules/weixin-js-sdk/index.d.ts
@@ -0,0 +1,601 @@
+// Type definitions for weixin jssdk 1.6.0
+// Project: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+declare namespace wx {
+ type ImageSizeType = "original" | "compressed";
+ type ImageSourceType = "album" | "camera";
+ type VideoSourceType = "album" | "camera";
+ type ApiMethod =
+ | "onMenuShareTimeline"
+ | "onMenuShareAppMessage"
+ | "onMenuShareQQ"
+ | "onMenuShareWeibo"
+ | "onMenuShareQZone"
+ | "updateAppMessageShareData"
+ | "updateTimelineShareData"
+ | "startRecord"
+ | "stopRecord"
+ | "onVoiceRecordEnd"
+ | "playVoice"
+ | "pauseVoice"
+ | "stopVoice"
+ | "onVoicePlayEnd"
+ | "uploadVoice"
+ | "downloadVoice"
+ | "chooseImage"
+ | "previewImage"
+ | "uploadImage"
+ | "downloadImage"
+ | "translateVoice"
+ | "getNetworkType"
+ | "openLocation"
+ | "getLocation"
+ | "hideOptionMenu"
+ | "showOptionMenu"
+ | "hideMenuItems"
+ | "showMenuItems"
+ | "hideAllNonBaseMenuItem"
+ | "showAllNonBaseMenuItem"
+ | "closeWindow"
+ | "scanQRCode"
+ | "chooseWXPay"
+ | "openProductSpecificView"
+ | "addCard"
+ | "chooseCard"
+ | "openCard";
+ // 所有JS接口列表
+ type jsApiList = ApiMethod[];
+
+ // 开放标签列表
+ // https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_Open_Tag.html
+ type openTag = "wx-open-launch-weapp" | "wx-open-launch-app" | "wx-open-subscribe" | "wx-open-audio"
+ type openTagList = openTag[];
+
+ // 所有菜单项列表
+ // 基本类
+ type menuBase =
+ | "menuItem:exposeArticle" // 举报
+ | "menuItem:setFont" // 调整字体
+ | "menuItem:dayMode" // 日间模式
+ | "menuItem:nightMode" // 夜间模式
+ | "menuItem:refresh" // 刷新
+ | "menuItem:profile" // 查看公众号(已添加)
+ | "menuItem:addContact"; // 查看公众号(未添加)
+ // 传播类
+ type menuShare =
+ | "menuItem:share:appMessage" // 发送给朋友
+ | "menuItem:share:timeline" // 分享到朋友圈
+ | "menuItem:share:qq" // 分享到QQ
+ | "menuItem:share:weiboApp" // 分享到Weibo
+ | "menuItem:favorite" // 收藏
+ | "menuItem:share:facebook" // 分享到FB
+ | "menuItem:share:QZone"; // 分享到 QQ 空间
+
+ // 保护类
+ type menuProtected =
+ | "menuItem:editTag" // 编辑标签
+ | "menuItem:delete" // 删除
+ | "menuItem:copyUrl" // 复制链接
+ | "menuItem:originPage" // 原网页
+ | "menuItem:readMode" // 阅读模式
+ | "menuItem:openWithQQBrowser" // 在QQ浏览器中打开
+ | "menuItem:openWithSafari" // 在Safari中打开
+ | "menuItem:share:email" // 邮件
+ | "menuItem:share:brand"; // 一些特殊公众号
+
+ type menuList = Array;
+
+ function config(conf: {
+ debug?: boolean; // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
+ appId: string; // 必填,公众号的唯一标识
+ timestamp: number; // 必填,生成签名的时间戳
+ nonceStr: string; // 必填,生成签名的随机串
+ signature: string; // 必填,签名,见附录1
+ jsApiList?: jsApiList; // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
+ openTagList?: openTagList;
+ }): void;
+
+ interface Resouce {
+ localId: string;
+ }
+ interface BaseParams {
+ success?(...args: any[]): void;
+ /** 接口调用失败的回调函数 */
+ fail?(...args: any[]): void;
+ /** 接口取消调用的回调函数 */
+ cancel?(...args: any[]): void;
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?(...args: any[]): void;
+ }
+ function ready(fn: () => void): void;
+ function error(fn: (err: { errMsg: string }) => void): void;
+
+ interface IcheckJsApi extends BaseParams {
+ jsApiList: jsApiList; // 需要检测的JS接口列表,所有JS接口列表见附录2,
+ // 以键值对的形式返回,可用的api值true,不可用为false
+ // 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
+ success(res: {
+ checkResult: { [api: string]: boolean };
+ errMsg: string;
+ }): void;
+ }
+ /**
+ * 判断当前客户端版本是否支持指定JS接口
+ * 备注:checkJsApi接口是客户端6.0.2新引入的一个预留接口,第一期开放的接口均可不使用checkJsApi来检测。
+ */
+ function checkJsApi(params: IcheckJsApi): void;
+
+ interface IonMenuShareTimeline extends BaseParams {
+ title: string; // 分享标题
+ link: string; // 分享链接
+ imgUrl: string; // 分享图标
+ // 用户确认分享后执行的回调函数
+ success(): void;
+ // 用户取消分享后执行的回调函数
+ cancel(): void;
+ }
+ /*=============================基础接口================================*/
+ /**
+ * 获取“分享到朋友圈”按钮点击状态及自定义分享内容接口
+ */
+ function onMenuShareTimeline(params: IonMenuShareTimeline): void;
+
+ interface IonMenuShareAppMessage extends BaseParams {
+ title: string; // 分享标题
+ desc: string; // 分享描述
+ link: string; // 分享链接
+ imgUrl: string; // 分享图标
+ type?: "music" | "video或link" | "link"; // 分享类型,music、video或link,不填默认为link
+ dataUrl?: string; // 如果type是music或video,则要提供数据链接,默认为空
+ // 用户确认分享后执行的回调函数
+ success(): void;
+ // 用户取消分享后执行的回调函数
+ cancel(): void;
+ }
+ /**
+ * 获取“分享给朋友”按钮点击状态及自定义分享内容接口
+ */
+ function onMenuShareAppMessage(params: IonMenuShareAppMessage): void;
+
+ interface IonMenuShareQQ extends BaseParams {
+ title: string; // 分享标题
+ desc: string; // 分享描述
+ link: string; // 分享链接
+ imgUrl: string; // 分享图标
+ // 用户确认分享后执行的回调函数
+ success(): void;
+ // 用户取消分享后执行的回调函数
+ cancel(): void;
+ }
+ /**
+ * 获取“分享到QQ”按钮点击状态及自定义分享内容接口
+ */
+ function onMenuShareQQ(params: IonMenuShareQQ): void;
+
+ interface IonMenuShareWeibo extends BaseParams {
+ title: string; // 分享标题
+ desc: string; // 分享描述
+ link: string; // 分享链接
+ imgUrl: string; // 分享图标
+ // 用户确认分享后执行的回调函数
+ success(): void;
+ // 用户取消分享后执行的回调函数
+ cancel(): void;
+ }
+ /**
+ * 获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口
+ */
+ function onMenuShareWeibo(params: IonMenuShareWeibo): void;
+
+ interface IonMenuShareQZone extends BaseParams {
+ title: string; // 分享标题
+ desc: string; // 分享描述
+ link: string; // 分享链接
+ imgUrl: string; // 分享图标
+ // 用户确认分享后执行的回调函数
+ success(): void;
+ // 用户取消分享后执行的回调函数
+ cancel(): void;
+ }
+ /**
+ * 获取“分享到QQ空间”按钮点击状态及自定义分享内容接口
+ */
+ function onMenuShareQZone(params: IonMenuShareQZone): void;
+
+ interface IupdateAppMessageShareData extends BaseParams {
+ title: string; // 分享标题
+ desc: string; // 分享描述
+ link: string; // 分享链接
+ imgUrl: string; // 分享图标
+ // 用户确认分享后执行的回调函数
+ success(): void;
+ }
+ /**
+ * 获取“分享给朋友”及“分享到QQ”按钮点击状态及自定义分享内容接口(新)
+ */
+ function updateAppMessageShareData(params: IupdateAppMessageShareData): void;
+
+ interface IupdateTimelineShareData extends BaseParams {
+ title: string; // 分享标题
+ link: string; // 分享链接
+ imgUrl: string; // 分享图标
+ // 用户确认分享后执行的回调函数
+ success(): void;
+ }
+ /**
+ * 获取“分享到朋友圈”及“分享到QQ空间”按钮点击状态及自定义分享内容接口
+ */
+ function updateTimelineShareData(params: IupdateTimelineShareData): void;
+ /*=============================基础接口================================*/
+
+ /*=============================图像接口================================*/
+ interface IchooseImage extends BaseParams {
+ /** 最多可以选择的图片张数,默认9 */
+ count?: number;
+ /** original 原图,compressed 压缩图,默认二者都有 */
+ sizeType?: ImageSizeType[];
+ /** album 从相册选图,camera 使用相机,默认二者都有 */
+ sourceType?: ImageSourceType[];
+ /** 成功则返回图片的本地文件路径列表 tempFilePaths */
+ success(res: {
+ sourceType: string; // weixin album camera
+ localIds: string[];
+ errMsg: string;
+ }): void;
+ cancel(): void;
+ }
+ /**
+ * 从本地相册选择图片或使用相机拍照。
+ */
+ function chooseImage(params: IchooseImage): void;
+
+ interface IpreviewImage extends BaseParams {
+ current: string; // 当前显示图片的http链接
+ urls: string[]; // 需要预览的图片http链接列表
+ }
+ /**
+ * 预览图片接口
+ */
+ function previewImage(params: IpreviewImage): void;
+
+ interface IuploadResource extends BaseParams {
+ localId: string; // 需要上传的图片的本地ID,由chooseImage接口获得
+ isShowProgressTips: number; // 默认为1,显示进度提示
+ // 返回图片的服务器端ID
+ success(res: { serverId: string }): void;
+ }
+ /**
+ * 上传图片接口
+ */
+ function uploadImage(params: IuploadResource): void;
+
+ interface IdownloadResource extends BaseParams {
+ serverId: string; // 需要下载的图片的服务器端ID,由uploadImage接口获得
+ isShowProgressTips: number; // 默认为1,显示进度提示
+ // 返回图片下载后的本地ID
+ success(res: Resouce): void;
+ }
+ /**
+ * 下载图片接口
+ */
+ function downloadImage(params: IdownloadResource): void;
+
+ interface IgetLocalImgData extends BaseParams {
+ localId: string; // 图片的localID
+ // localData是图片的base64数据,可以用img标签显示
+ success(res: { localData: string }): void;
+ }
+
+ /**
+ * 获取本地图片接口
+ */
+ function getLocalImgData(params: IgetLocalImgData): void;
+ /*=============================图像接口================================*/
+ /*=============================音频接口================================*/
+ /**
+ * 开始录音接口
+ */
+ function startRecord(): void;
+
+ interface IstopRecord extends BaseParams {
+ success(res: Resouce): void;
+ }
+ /**
+ * 停止录音接口
+ */
+ function stopRecord(params: IstopRecord): void;
+
+ interface IonVoiceRecordEnd extends BaseParams {
+ // 录音时间超过一分钟没有停止的时候会执行 complete 回调
+ complete(res: Resouce): void;
+ }
+ /**
+ * 监听录音自动停止接口
+ */
+ function onVoiceRecordEnd(params: IonVoiceRecordEnd): void;
+
+ interface IplaypausestopVoice extends BaseParams {
+ localId: string; // 需要播放的音频的本地ID,由stopRecord接口获得
+ }
+ /**
+ * 播放语音接口
+ */
+ function playVoice(params: IplaypausestopVoice): void;
+
+ /**
+ * 暂停播放接口
+ */
+ function pauseVoice(params: IplaypausestopVoice): void;
+ /**
+ * 停止播放接口
+ */
+ function stopVoice(params: IplaypausestopVoice): void;
+
+ interface IonVoicePlayEnd extends BaseParams {
+ success(res: Resouce): void;
+ }
+ /**
+ * 监听语音播放完毕接口
+ */
+ function onVoicePlayEnd(params: IonVoicePlayEnd): void;
+ /**
+ * 上传语音接口
+ * 备注:上传语音有效期3天,可用微信多媒体接口下载语音到自己的服务器
+ * ,此处获得的 serverId 即 media_id,参考文档
+ * ../12 / 58bfcfabbd501c7cd77c19bd9cfa8354.html
+ * 目前多媒体文件下载接口的频率限制为10000次/ 天,
+ * 如需要调高频率,请邮件weixin - open@qq.com,
+ * 邮件主题为【申请多媒体接口调用量】,请对你的项目进行简单描述,
+ * 附上产品体验链接,并对用户量和使用量进行说明。
+ */
+ function uploadVoice(params: IuploadResource): void;
+ /**
+ * 下载语音接口
+ */
+ function downloadVoice(params: IdownloadResource): void;
+ /*=============================音频接口================================*/
+ /*=============================智能接口================================*/
+
+ interface ItranslateVoice extends BaseParams {
+ localId: string; // 需要识别的音频的本地Id,由录音相关接口获得
+ isShowProgressTips: number; // 默认为1,显示进度提示
+ success(res: { translateResult: string }): void;
+ }
+ /**
+ * 识别音频并返回识别结果接口
+ */
+ function translateVoice(params: ItranslateVoice): void;
+
+ /*=============================智能接口================================*/
+
+ /*=============================设备信息================================*/
+ type networkType = "2g" | "3g" | "4g" | "wifi";
+ interface IgetNetworkType extends BaseParams {
+ success(res: { networkType: networkType }): void;
+ }
+ /**
+ * 获取网络状态接口
+ */
+ function getNetworkType(params: IgetNetworkType): void;
+ /*=============================设备信息================================*/
+
+ /*=============================地理位置================================*/
+ interface IopenLocation extends BaseParams {
+ latitude: number; // 纬度,浮点数,范围为90 ~ -90
+ longitude: number; // 经度,浮点数,范围为180 ~ -180。
+ name: string; // 位置名
+ address: string; // 地址详情说明
+ scale: number; // 地图缩放级别,整形值,范围从1~28。默认为最大
+ infoUrl: string; // 在查看位置界面底部显示的超链接,可点击跳转
+ }
+ /**
+ * 使用微信内置地图查看位置接口
+ */
+ function openLocation(params: IopenLocation): void;
+
+ interface IgetLocation extends BaseParams {
+ type: "wgs84" | "gcj02"; // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
+ success(res: {
+ latitude: number; // 纬度,浮点数,范围为90 ~ -90
+ longitude: number; // 经度,浮点数,范围为180 ~ -180。
+ speed: number; // 速度,以米/每秒计
+ accuracy: number; // 位置精度
+ }): void;
+ }
+ /**
+ * 获取地理位置接口
+ */
+ function getLocation(params: IgetLocation): void;
+ /*=============================地理位置================================*/
+ /*=============================摇一摇周边================================*/
+ interface IstartSearchBeacons extends BaseParams {
+ ticket: string; // 摇周边的业务ticket, 系统自动添加在摇出来的页面链接后面
+ // 开启查找完成后的回调函数
+ complete(argv: any): void;
+ }
+ /**
+ * 开启查找周边ibeacon设备接口
+ * 备注:如需接入摇一摇周边功能,请参考:申请开通摇一摇周边
+ */
+ function startSearchBeacons(params: IstartSearchBeacons): void;
+
+ interface IstopSearchBeacons extends BaseParams {
+ // 关闭查找完成后的回调函数
+ complete(res: any): void;
+ }
+
+ /**
+ * 关闭查找周边ibeacon设备接口
+ */
+ function stopSearchBeacons(params: IstopSearchBeacons): void;
+
+ interface IonSearchBeacons extends BaseParams {
+ // 回调函数,可以数组形式取得该商家注册的在周边的相关设备列表
+ complete(argv: any): void;
+ }
+ /**
+ * 监听周边ibeacon设备接口
+ */
+ function onSearchBeacons(params: IonSearchBeacons): void;
+ /*=============================摇一摇周边================================*/
+ /*=============================界面操作================================*/
+
+ /**
+ * 隐藏右上角菜单接口
+ */
+ function hideOptionMenu(): void;
+
+ /**
+ * 显示右上角菜单接口
+ */
+ function showOptionMenu(): void;
+
+ /**
+ * 关闭当前网页窗口接口
+ */
+ function closeWindow(): void;
+
+ interface IhideMenuItems extends BaseParams {
+ menuList: Array; // 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮,所有menu项见附录3
+ }
+ /**
+ * 批量隐藏功能按钮接口
+ */
+ function hideMenuItems(params: IhideMenuItems): void;
+
+ interface IshowMenuItems extends BaseParams {
+ menuList: menuList; // 要显示的菜单项,所有menu项见附录3
+ }
+ /**
+ * 批量显示功能按钮接口
+ */
+ function showMenuItems(params: IshowMenuItems): void;
+
+ /**
+ * 隐藏所有非基础按钮接口
+ * “基本类”按钮详见附录3
+ */
+ function hideAllNonBaseMenuItem(): void;
+
+ /**
+ * 显示所有功能按钮接口
+ */
+ function showAllNonBaseMenuItem(): void;
+ /*=============================界面操作================================*/
+ /*=============================微信扫一扫================================*/
+
+ type scanType = "qrCode" | "barCode";
+
+ interface IscanQRCode extends BaseParams {
+ needResult: 0 | 1; // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
+ scanType: scanType[]; // 可以指定扫二维码还是一维码,默认二者都有
+ // 当needResult 为 1 时,扫码返回的结果
+ success(res: { resultStr: string }): void;
+ }
+ /**
+ * 调起微信扫一扫接口
+ */
+ function scanQRCode(params: IscanQRCode): void;
+ /*=============================微信扫一扫================================*/
+ /*=============================微信小店================================*/
+
+ interface IopenProductSpecificView extends BaseParams {
+ productId: string; // 商品id
+ viewType: "0" | "1" | "2"; // 0.默认值,普通商品详情页1.扫一扫商品详情页2.小店商品详情页
+ }
+ /**
+ * 跳转微信商品页接口
+ */
+ function openProductSpecificView(params: IopenProductSpecificView): void;
+ /*=============================微信卡券================================*/
+
+ interface IchooseCard extends BaseParams {
+ shopId: string; // 门店Id
+ cardType: string; // 卡券类型
+ cardId: string; // 卡券Id
+ timestamp: number; // 卡券签名时间戳
+ nonceStr: string; // 卡券签名随机串
+ signType: string; // 签名方式,默认'SHA1'
+ cardSign: string; // 卡券签名
+ success(res: { cardList: string[] }): void;
+ }
+ /**
+ * 拉取适用卡券列表并获取用户选择信息
+ */
+ function chooseCard(params: IchooseCard): void;
+
+ interface IaddCard extends BaseParams {
+ cardList: Array<{
+ cardId: string;
+ cardExt: string;
+ }>; // 需要添加的卡券列表
+ success(res: { cardList: string[] }): void;
+ }
+ /**
+ * 批量添加卡券接口
+ */
+ function addCard(): void;
+
+ interface IopenCard extends BaseParams {
+ cardList: Array<{
+ cardId: string;
+ code: string;
+ }>; // 需要打开的卡券列表
+ }
+ /**
+ * 查看微信卡包中的卡券接口
+ */
+ function openCard(params: IopenCard): void;
+
+ interface IconsumeAndShareCard extends BaseParams {
+ cardId: string;
+ code: string;
+ }
+ /**
+ * 核销后再次赠送卡券接口
+ */
+ function consumeAndShareCard(params: IconsumeAndShareCard): void;
+ /*=============================微信卡券================================*/
+ /*=============================微信支付================================*/
+
+ interface IchooseWXPay extends BaseParams {
+ timestamp: number; // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
+ nonceStr: string; // 支付签名随机串,不长于 32 位
+ package: string; // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
+ signType: string; // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
+ paySign: string; // 支付签名
+ // 支付成功后的回调函数
+ success(res: any): void;
+ }
+ /**
+ * 发起一个微信支付请求
+ */
+ function chooseWXPay(params: IchooseWXPay): void;
+ /*=============================微信支付================================*/
+ /*=============================微信小程序==============================*/
+ interface miniProgramMethodsParams extends BaseParams {
+ url: string;
+ }
+ interface miniProgramMethods {
+ navigateTo(params: miniProgramMethodsParams): void;
+ navigateBack(params: miniProgramMethodsParams): void;
+ switchTab(params: miniProgramMethodsParams): void;
+ reLaunch(params: miniProgramMethodsParams): void;
+ redirectTo(params: miniProgramMethodsParams): void;
+ postMessage(params: { data: any }): void;
+ getEnv(fn: (res: any) => void): void;
+ }
+ const miniProgram: miniProgramMethods;
+ /*=============================微信小程序==============================*/
+}
+declare function wx(): void;
+/*=============================微信内全局变量==============================*/
+declare global {
+ interface Window {
+ WeixinJSBridge: any;
+ __wxjs_environment: any;
+ }
+ const WeixinJSBridge: any;
+}
+export default wx;
diff --git a/node_modules/weixin-js-sdk/index.js b/node_modules/weixin-js-sdk/index.js
new file mode 100644
index 0000000..aed0a87
--- /dev/null
+++ b/node_modules/weixin-js-sdk/index.js
@@ -0,0 +1,891 @@
+!(function (e, n) {
+ module.exports = n(e);
+})(typeof window === "object" && window, function (r, e) {
+ if (!r) {
+ console.warn("can't use weixin-js-sdk in server side");
+ return;
+ }
+ var a, c, n, i, t, o, s, d, l, u, p, f, m, g, h, S, y, I, v, _, w, T;
+ if (!r.jWeixin)
+ return (
+ (a = {
+ config: "preVerifyJSAPI",
+ onMenuShareTimeline: "menu:share:timeline",
+ onMenuShareAppMessage: "menu:share:appmessage",
+ onMenuShareQQ: "menu:share:qq",
+ onMenuShareWeibo: "menu:share:weiboApp",
+ onMenuShareQZone: "menu:share:QZone",
+ previewImage: "imagePreview",
+ getLocation: "geoLocation",
+ openProductSpecificView: "openProductViewWithPid",
+ addCard: "batchAddCard",
+ openCard: "batchViewCard",
+ chooseWXPay: "getBrandWCPayRequest",
+ openEnterpriseRedPacket: "getRecevieBizHongBaoRequest",
+ startSearchBeacons: "startMonitoringBeacons",
+ stopSearchBeacons: "stopMonitoringBeacons",
+ onSearchBeacons: "onBeaconsInRange",
+ consumeAndShareCard: "consumedShareCard",
+ openAddress: "editAddress",
+ }),
+ (c = (function () {
+ var e,
+ n = {};
+ for (e in a) n[a[e]] = e;
+ return n;
+ })()),
+ (n = r.document),
+ (i = n.title),
+ (t = navigator.userAgent.toLowerCase()),
+ (f = navigator.platform.toLowerCase()),
+ (o = !(!f.match("mac") && !f.match("win"))),
+ (s = -1 != t.indexOf("wxdebugger")),
+ (d = -1 != t.indexOf("micromessenger")),
+ (l = -1 != t.indexOf("android")),
+ (u = -1 != t.indexOf("iphone") || -1 != t.indexOf("ipad")),
+ (p = (f =
+ t.match(/micromessenger\/(\d+\.\d+\.\d+)/) ||
+ t.match(/micromessenger\/(\d+\.\d+)/))
+ ? f[1]
+ : ""),
+ (m = {
+ initStartTime: L(),
+ initEndTime: 0,
+ preVerifyStartTime: 0,
+ preVerifyEndTime: 0,
+ }),
+ (g = {
+ version: 1,
+ appId: "",
+ initTime: 0,
+ preVerifyTime: 0,
+ networkType: "",
+ isPreVerifyOk: 1,
+ systemType: u ? 1 : l ? 2 : -1,
+ clientVersion: p,
+ url: encodeURIComponent(location.href),
+ }),
+ (h = {}),
+ (S = { _completes: [] }),
+ (y = { state: 0, data: {} }),
+ O(function () {
+ m.initEndTime = L();
+ }),
+ (I = !1),
+ (v = []),
+ (_ = {
+ config: function (e) {
+ C("config", (h = e));
+ var o = !1 !== h.check;
+ O(function () {
+ if (o)
+ k(
+ a.config,
+ {
+ verifyJsApiList: A(h.jsApiList),
+ verifyOpenTagList: A(h.openTagList),
+ },
+ ((S._complete = function (e) {
+ (m.preVerifyEndTime = L()), (y.state = 1), (y.data = e);
+ }),
+ (S.success = function (e) {
+ g.isPreVerifyOk = 0;
+ }),
+ (S.fail = function (e) {
+ S._fail ? S._fail(e) : (y.state = -1);
+ }),
+ (t = S._completes).push(function () {
+ B();
+ }),
+ (S.complete = function (e) {
+ for (var n = 0, i = t.length; n < i; ++n) t[n]();
+ S._completes = [];
+ }),
+ S)
+ ),
+ (m.preVerifyStartTime = L());
+ else {
+ y.state = 1;
+ for (var e = S._completes, n = 0, i = e.length; n < i; ++n)
+ e[n]();
+ S._completes = [];
+ }
+ var t;
+ }),
+ _.invoke ||
+ ((_.invoke = function (e, n, i) {
+ r.WeixinJSBridge && WeixinJSBridge.invoke(e, P(n), i);
+ }),
+ (_.on = function (e, n) {
+ r.WeixinJSBridge && WeixinJSBridge.on(e, n);
+ }));
+ },
+ ready: function (e) {
+ (0 != y.state || (S._completes.push(e), !d && h.debug)) && e();
+ },
+ error: function (e) {
+ p < "6.0.2" || (-1 == y.state ? e(y.data) : (S._fail = e));
+ },
+ checkJsApi: function (e) {
+ k(
+ "checkJsApi",
+ { jsApiList: A(e.jsApiList) },
+ ((e._complete = function (e) {
+ l && (i = e.checkResult) && (e.checkResult = JSON.parse(i));
+ var n,
+ i = e,
+ t = i.checkResult;
+ for (n in t) {
+ var o = c[n];
+ o && ((t[o] = t[n]), delete t[n]);
+ }
+ }),
+ e)
+ );
+ },
+ onMenuShareTimeline: function (e) {
+ M(
+ a.onMenuShareTimeline,
+ {
+ complete: function () {
+ k(
+ "shareTimeline",
+ {
+ title: e.title || i,
+ desc: e.title || i,
+ img_url: e.imgUrl || "",
+ link: e.link || location.href,
+ type: e.type || "link",
+ data_url: e.dataUrl || "",
+ },
+ e
+ );
+ },
+ },
+ e
+ );
+ },
+ onMenuShareAppMessage: function (n) {
+ M(
+ a.onMenuShareAppMessage,
+ {
+ complete: function (e) {
+ "favorite" === e.scene
+ ? k("sendAppMessage", {
+ title: n.title || i,
+ desc: n.desc || "",
+ link: n.link || location.href,
+ img_url: n.imgUrl || "",
+ type: n.type || "link",
+ data_url: n.dataUrl || "",
+ })
+ : k(
+ "sendAppMessage",
+ {
+ title: n.title || i,
+ desc: n.desc || "",
+ link: n.link || location.href,
+ img_url: n.imgUrl || "",
+ type: n.type || "link",
+ data_url: n.dataUrl || "",
+ },
+ n
+ );
+ },
+ },
+ n
+ );
+ },
+ onMenuShareQQ: function (e) {
+ M(
+ a.onMenuShareQQ,
+ {
+ complete: function () {
+ k(
+ "shareQQ",
+ {
+ title: e.title || i,
+ desc: e.desc || "",
+ img_url: e.imgUrl || "",
+ link: e.link || location.href,
+ },
+ e
+ );
+ },
+ },
+ e
+ );
+ },
+ onMenuShareWeibo: function (e) {
+ M(
+ a.onMenuShareWeibo,
+ {
+ complete: function () {
+ k(
+ "shareWeiboApp",
+ {
+ title: e.title || i,
+ desc: e.desc || "",
+ img_url: e.imgUrl || "",
+ link: e.link || location.href,
+ },
+ e
+ );
+ },
+ },
+ e
+ );
+ },
+ onMenuShareQZone: function (e) {
+ M(
+ a.onMenuShareQZone,
+ {
+ complete: function () {
+ k(
+ "shareQZone",
+ {
+ title: e.title || i,
+ desc: e.desc || "",
+ img_url: e.imgUrl || "",
+ link: e.link || location.href,
+ },
+ e
+ );
+ },
+ },
+ e
+ );
+ },
+ updateTimelineShareData: function (e) {
+ k(
+ "updateTimelineShareData",
+ { title: e.title, link: e.link, imgUrl: e.imgUrl },
+ e
+ );
+ },
+ updateAppMessageShareData: function (e) {
+ k(
+ "updateAppMessageShareData",
+ { title: e.title, desc: e.desc, link: e.link, imgUrl: e.imgUrl },
+ e
+ );
+ },
+ startRecord: function (e) {
+ k("startRecord", {}, e);
+ },
+ stopRecord: function (e) {
+ k("stopRecord", {}, e);
+ },
+ onVoiceRecordEnd: function (e) {
+ M("onVoiceRecordEnd", e);
+ },
+ playVoice: function (e) {
+ k("playVoice", { localId: e.localId }, e);
+ },
+ pauseVoice: function (e) {
+ k("pauseVoice", { localId: e.localId }, e);
+ },
+ stopVoice: function (e) {
+ k("stopVoice", { localId: e.localId }, e);
+ },
+ onVoicePlayEnd: function (e) {
+ M("onVoicePlayEnd", e);
+ },
+ uploadVoice: function (e) {
+ k(
+ "uploadVoice",
+ {
+ localId: e.localId,
+ isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1,
+ },
+ e
+ );
+ },
+ downloadVoice: function (e) {
+ k(
+ "downloadVoice",
+ {
+ serverId: e.serverId,
+ isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1,
+ },
+ e
+ );
+ },
+ translateVoice: function (e) {
+ k(
+ "translateVoice",
+ {
+ localId: e.localId,
+ isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1,
+ },
+ e
+ );
+ },
+ chooseImage: function (e) {
+ k(
+ "chooseImage",
+ {
+ scene: "1|2",
+ count: e.count || 9,
+ sizeType: e.sizeType || ["original", "compressed"],
+ sourceType: e.sourceType || ["album", "camera"],
+ },
+ ((e._complete = function (e) {
+ if (l) {
+ var n = e.localIds;
+ try {
+ n && (e.localIds = JSON.parse(n));
+ } catch (e) {}
+ }
+ }),
+ e)
+ );
+ },
+ getLocation: function (e) {
+ (e = e || {}),
+ k(
+ a.getLocation,
+ { type: e.type || "wgs84" },
+ ((e._complete = function (e) {
+ delete e.type;
+ }),
+ e)
+ );
+ },
+ previewImage: function (e) {
+ k(a.previewImage, { current: e.current, urls: e.urls }, e);
+ },
+ uploadImage: function (e) {
+ k(
+ "uploadImage",
+ {
+ localId: e.localId,
+ isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1,
+ },
+ e
+ );
+ },
+ downloadImage: function (e) {
+ k(
+ "downloadImage",
+ {
+ serverId: e.serverId,
+ isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1,
+ },
+ e
+ );
+ },
+ getLocalImgData: function (e) {
+ !1 === I
+ ? ((I = !0),
+ k(
+ "getLocalImgData",
+ { localId: e.localId },
+ ((e._complete = function (e) {
+ var n;
+ (I = !1),
+ 0 < v.length && ((n = v.shift()), wx.getLocalImgData(n));
+ }),
+ e)
+ ))
+ : v.push(e);
+ },
+ getNetworkType: function (e) {
+ k(
+ "getNetworkType",
+ {},
+ ((e._complete = function (e) {
+ var n = e,
+ e = n.errMsg,
+ i = ((n.errMsg = "getNetworkType:ok"), n.subtype);
+ if ((delete n.subtype, i)) n.networkType = i;
+ else {
+ var i = e.indexOf(":"),
+ t = e.substring(i + 1);
+ switch (t) {
+ case "wifi":
+ case "edge":
+ case "wwan":
+ n.networkType = t;
+ break;
+ default:
+ n.errMsg = "getNetworkType:fail";
+ }
+ }
+ }),
+ e)
+ );
+ },
+ openLocation: function (e) {
+ k(
+ "openLocation",
+ {
+ latitude: e.latitude,
+ longitude: e.longitude,
+ name: e.name || "",
+ address: e.address || "",
+ scale: e.scale || 28,
+ infoUrl: e.infoUrl || "",
+ },
+ e
+ );
+ },
+ hideOptionMenu: function (e) {
+ k("hideOptionMenu", {}, e);
+ },
+ showOptionMenu: function (e) {
+ k("showOptionMenu", {}, e);
+ },
+ closeWindow: function (e) {
+ k("closeWindow", {}, (e = e || {}));
+ },
+ hideMenuItems: function (e) {
+ k("hideMenuItems", { menuList: e.menuList }, e);
+ },
+ showMenuItems: function (e) {
+ k("showMenuItems", { menuList: e.menuList }, e);
+ },
+ hideAllNonBaseMenuItem: function (e) {
+ k("hideAllNonBaseMenuItem", {}, e);
+ },
+ showAllNonBaseMenuItem: function (e) {
+ k("showAllNonBaseMenuItem", {}, e);
+ },
+ scanQRCode: function (e) {
+ k(
+ "scanQRCode",
+ {
+ needResult: (e = e || {}).needResult || 0,
+ scanType: e.scanType || ["qrCode", "barCode"],
+ },
+ ((e._complete = function (e) {
+ var n;
+ u &&
+ (n = e.resultStr) &&
+ ((n = JSON.parse(n)),
+ (e.resultStr = n && n.scan_code && n.scan_code.scan_result));
+ }),
+ e)
+ );
+ },
+ openAddress: function (e) {
+ k(
+ a.openAddress,
+ {},
+ ((e._complete = function (e) {
+ ((e = e).postalCode = e.addressPostalCode),
+ delete e.addressPostalCode,
+ (e.provinceName = e.proviceFirstStageName),
+ delete e.proviceFirstStageName,
+ (e.cityName = e.addressCitySecondStageName),
+ delete e.addressCitySecondStageName,
+ (e.countryName = e.addressCountiesThirdStageName),
+ delete e.addressCountiesThirdStageName,
+ (e.detailInfo = e.addressDetailInfo),
+ delete e.addressDetailInfo;
+ }),
+ e)
+ );
+ },
+ openProductSpecificView: function (e) {
+ k(
+ a.openProductSpecificView,
+ {
+ pid: e.productId,
+ view_type: e.viewType || 0,
+ ext_info: e.extInfo,
+ },
+ e
+ );
+ },
+ addCard: function (e) {
+ for (var n = e.cardList, i = [], t = 0, o = n.length; t < o; ++t) {
+ var r = n[t],
+ r = { card_id: r.cardId, card_ext: r.cardExt };
+ i.push(r);
+ }
+ k(
+ a.addCard,
+ { card_list: i },
+ ((e._complete = function (e) {
+ if ((n = e.card_list)) {
+ for (var n, i = 0, t = (n = JSON.parse(n)).length; i < t; ++i) {
+ var o = n[i];
+ (o.cardId = o.card_id),
+ (o.cardExt = o.card_ext),
+ (o.isSuccess = !!o.is_succ),
+ delete o.card_id,
+ delete o.card_ext,
+ delete o.is_succ;
+ }
+ (e.cardList = n), delete e.card_list;
+ }
+ }),
+ e)
+ );
+ },
+ chooseCard: function (e) {
+ k(
+ "chooseCard",
+ {
+ app_id: h.appId,
+ location_id: e.shopId || "",
+ sign_type: e.signType || "SHA1",
+ card_id: e.cardId || "",
+ card_type: e.cardType || "",
+ card_sign: e.cardSign,
+ time_stamp: e.timestamp + "",
+ nonce_str: e.nonceStr,
+ },
+ ((e._complete = function (e) {
+ (e.cardList = e.choose_card_info), delete e.choose_card_info;
+ }),
+ e)
+ );
+ },
+ openCard: function (e) {
+ for (var n = e.cardList, i = [], t = 0, o = n.length; t < o; ++t) {
+ var r = n[t],
+ r = { card_id: r.cardId, code: r.code };
+ i.push(r);
+ }
+ k(a.openCard, { card_list: i }, e);
+ },
+ consumeAndShareCard: function (e) {
+ k(
+ a.consumeAndShareCard,
+ { consumedCardId: e.cardId, consumedCode: e.code },
+ e
+ );
+ },
+ chooseWXPay: function (e) {
+ k(a.chooseWXPay, x(e), e), B({ jsApiName: "chooseWXPay" });
+ },
+ openEnterpriseRedPacket: function (e) {
+ k(a.openEnterpriseRedPacket, x(e), e);
+ },
+ startSearchBeacons: function (e) {
+ k(a.startSearchBeacons, { ticket: e.ticket }, e);
+ },
+ stopSearchBeacons: function (e) {
+ k(a.stopSearchBeacons, {}, e);
+ },
+ onSearchBeacons: function (e) {
+ M(a.onSearchBeacons, e);
+ },
+ openEnterpriseChat: function (e) {
+ k(
+ "openEnterpriseChat",
+ { useridlist: e.userIds, chatname: e.groupName },
+ e
+ );
+ },
+ launchMiniProgram: function (e) {
+ k(
+ "launchMiniProgram",
+ {
+ targetAppId: e.targetAppId,
+ path: (function (e) {
+ var n;
+ if ("string" == typeof e && 0 < e.length)
+ return (
+ (n = e.split("?")[0]),
+ (n += ".html"),
+ void 0 !== (e = e.split("?")[1]) ? n + "?" + e : n
+ );
+ })(e.path),
+ envVersion: e.envVersion,
+ },
+ e
+ );
+ },
+ openBusinessView: function (e) {
+ k(
+ "openBusinessView",
+ {
+ businessType: e.businessType,
+ queryString: e.queryString || "",
+ envVersion: e.envVersion,
+ },
+ ((e._complete = function (n) {
+ if (l) {
+ var e = n.extraData;
+ if (e)
+ try {
+ n.extraData = JSON.parse(e);
+ } catch (e) {
+ n.extraData = {};
+ }
+ }
+ }),
+ e)
+ );
+ },
+ miniProgram: {
+ navigateBack: function (e) {
+ (e = e || {}),
+ O(function () {
+ k(
+ "invokeMiniProgramAPI",
+ { name: "navigateBack", arg: { delta: e.delta || 1 } },
+ e
+ );
+ });
+ },
+ navigateTo: function (e) {
+ O(function () {
+ k(
+ "invokeMiniProgramAPI",
+ { name: "navigateTo", arg: { url: e.url } },
+ e
+ );
+ });
+ },
+ redirectTo: function (e) {
+ O(function () {
+ k(
+ "invokeMiniProgramAPI",
+ { name: "redirectTo", arg: { url: e.url } },
+ e
+ );
+ });
+ },
+ switchTab: function (e) {
+ O(function () {
+ k(
+ "invokeMiniProgramAPI",
+ { name: "switchTab", arg: { url: e.url } },
+ e
+ );
+ });
+ },
+ reLaunch: function (e) {
+ O(function () {
+ k(
+ "invokeMiniProgramAPI",
+ { name: "reLaunch", arg: { url: e.url } },
+ e
+ );
+ });
+ },
+ postMessage: function (e) {
+ O(function () {
+ k(
+ "invokeMiniProgramAPI",
+ { name: "postMessage", arg: e.data || {} },
+ e
+ );
+ });
+ },
+ getEnv: function (e) {
+ O(function () {
+ e({ miniprogram: "miniprogram" === r.__wxjs_environment });
+ });
+ },
+ },
+ }),
+ (w = 1),
+ (T = {}),
+ n.addEventListener(
+ "error",
+ function (e) {
+ var n, i, t;
+ l ||
+ ((t = (n = e.target).tagName),
+ (i = n.src),
+ "IMG" != t && "VIDEO" != t && "AUDIO" != t && "SOURCE" != t) ||
+ (-1 != i.indexOf("wxlocalresource://") &&
+ (e.preventDefault(),
+ e.stopPropagation(),
+ (t = n["wx-id"]) || ((t = w++), (n["wx-id"] = t)),
+ T[t] ||
+ ((T[t] = !0),
+ wx.ready(function () {
+ wx.getLocalImgData({
+ localId: i,
+ success: function (e) {
+ n.src = e.localData;
+ },
+ });
+ }))));
+ },
+ !0
+ ),
+ n.addEventListener(
+ "load",
+ function (e) {
+ var n;
+ l ||
+ ((n = (e = e.target).tagName),
+ e.src,
+ "IMG" != n && "VIDEO" != n && "AUDIO" != n && "SOURCE" != n) ||
+ ((n = e["wx-id"]) && (T[n] = !1));
+ },
+ !0
+ ),
+ e && (r.wx = r.jWeixin = _),
+ _
+ );
+ else return r.jWeixin;
+ function k(n, e, i) {
+ r.WeixinJSBridge
+ ? WeixinJSBridge.invoke(n, P(e), function (e) {
+ V(n, e, i);
+ })
+ : C(n, i);
+ }
+ function M(n, i, t) {
+ r.WeixinJSBridge
+ ? WeixinJSBridge.on(n, function (e) {
+ t && t.trigger && t.trigger(e), V(n, e, i);
+ })
+ : C(n, t || i);
+ }
+ function P(e) {
+ return (
+ ((e = e || {}).appId = h.appId),
+ (e.verifyAppId = h.appId),
+ (e.verifySignType = "sha1"),
+ (e.verifyTimestamp = h.timestamp + ""),
+ (e.verifyNonceStr = h.nonceStr),
+ (e.verifySignature = h.signature),
+ e
+ );
+ }
+ function x(e) {
+ return {
+ timeStamp: e.timestamp + "",
+ nonceStr: e.nonceStr,
+ package: e.package,
+ paySign: e.paySign,
+ signType: e.signType || "SHA1",
+ };
+ }
+ function V(e, n, i) {
+ ("openEnterpriseChat" != e && "openBusinessView" !== e) ||
+ (n.errCode = n.err_code),
+ delete n.err_code,
+ delete n.err_desc,
+ delete n.err_detail;
+ var t = n.errMsg,
+ e =
+ (t ||
+ ((t = n.err_msg),
+ delete n.err_msg,
+ (t = (function (e, n) {
+ var i = c[e];
+ i && (e = i);
+ i = "ok";
+ {
+ var t;
+ n &&
+ ((t = n.indexOf(":")),
+ ("access denied" !=
+ (i = (i = (i =
+ -1 !=
+ (i =
+ -1 !=
+ (i =
+ "failed" ==
+ (i = "confirm" == (i = n.substring(t + 1)) ? "ok" : i)
+ ? "fail"
+ : i).indexOf("failed_")
+ ? i.substring(7)
+ : i).indexOf("fail_")
+ ? i.substring(5)
+ : i).replace(/_/g, " ")).toLowerCase()) &&
+ "no permission to execute" != i) ||
+ (i = "permission denied"),
+ "" ==
+ (i =
+ "config" == e && "function not exist" == i ? "ok" : i)) &&
+ (i = "fail");
+ }
+ return (n = e + ":" + i);
+ })(e, t)),
+ (n.errMsg = t)),
+ (i = i || {})._complete && (i._complete(n), delete i._complete),
+ (t = n.errMsg || ""),
+ h.debug && !i.isInnerInvoke && alert(JSON.stringify(n)),
+ t.indexOf(":"));
+ switch (t.substring(e + 1)) {
+ case "ok":
+ i.success && i.success(n);
+ break;
+ case "cancel":
+ i.cancel && i.cancel(n);
+ break;
+ default:
+ i.fail && i.fail(n);
+ }
+ i.complete && i.complete(n);
+ }
+ function A(e) {
+ if (e) {
+ for (var n = 0, i = e.length; n < i; ++n) {
+ var t = e[n],
+ t = a[t];
+ t && (e[n] = t);
+ }
+ return e;
+ }
+ }
+ function C(e, n) {
+ var i;
+ !h.debug ||
+ (n && n.isInnerInvoke) ||
+ ((i = c[e]) && (e = i),
+ n && n._complete && delete n._complete,
+ console.log('"' + e + '",', n || ""));
+ }
+ function B(n) {
+ var i;
+ o ||
+ s ||
+ h.debug ||
+ p < "6.0.2" ||
+ g.systemType < 0 ||
+ ((i = new Image()),
+ (g.appId = h.appId),
+ (g.initTime = m.initEndTime - m.initStartTime),
+ (g.preVerifyTime = m.preVerifyEndTime - m.preVerifyStartTime),
+ _.getNetworkType({
+ isInnerInvoke: !0,
+ success: function (e) {
+ g.networkType = e.networkType;
+ e =
+ "https://open.weixin.qq.com/sdk/report?v=" +
+ g.version +
+ "&o=" +
+ g.isPreVerifyOk +
+ "&s=" +
+ g.systemType +
+ "&c=" +
+ g.clientVersion +
+ "&a=" +
+ g.appId +
+ "&n=" +
+ g.networkType +
+ "&i=" +
+ g.initTime +
+ "&p=" +
+ g.preVerifyTime +
+ "&u=" +
+ g.url +
+ "&jsapi_name=" +
+ (n ? n.jsApiName : "");
+ i.src = e;
+ },
+ }));
+ }
+ function L() {
+ return new Date().getTime();
+ }
+ function O(e) {
+ d &&
+ (r.WeixinJSBridge
+ ? e()
+ : n.addEventListener &&
+ n.addEventListener("WeixinJSBridgeReady", e, !1));
+ }
+});
diff --git a/node_modules/weixin-js-sdk/package.json b/node_modules/weixin-js-sdk/package.json
new file mode 100644
index 0000000..7b65773
--- /dev/null
+++ b/node_modules/weixin-js-sdk/package.json
@@ -0,0 +1,41 @@
+{
+ "_from": "weixin-js-sdk",
+ "_id": "weixin-js-sdk@1.6.5",
+ "_inBundle": false,
+ "_integrity": "sha512-Gph1WAWB2YN/lMOFB/ymb+hbU/wYazzJgu6PMMktCy9cSCeW5wA6Zwt0dpahJbJ+RJEwtTv2x9iIu0U4enuVSQ==",
+ "_location": "/weixin-js-sdk",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "tag",
+ "registry": true,
+ "raw": "weixin-js-sdk",
+ "name": "weixin-js-sdk",
+ "escapedName": "weixin-js-sdk",
+ "rawSpec": "",
+ "saveSpec": null,
+ "fetchSpec": "latest"
+ },
+ "_requiredBy": [
+ "#USER",
+ "/"
+ ],
+ "_resolved": "https://registry.npmmirror.com/weixin-js-sdk/-/weixin-js-sdk-1.6.5.tgz",
+ "_shasum": "01fe5220b91dbfe089fc0730d061be0e68271e6a",
+ "_spec": "weixin-js-sdk",
+ "_where": "D:\\uni-app\\acupuncture_register_system",
+ "bugs": {
+ "url": "https://github.com/yanxi123-com/weixin-js-sdk/issues"
+ },
+ "bundleDependencies": false,
+ "deprecated": false,
+ "description": "微信官方 js-sdk npm 安装版,支持 typescript",
+ "homepage": "https://yanxi123.com/",
+ "license": "MIT",
+ "main": "index.js",
+ "name": "weixin-js-sdk",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/yanxi123-com/weixin-js-sdk.git"
+ },
+ "version": "1.6.5"
+}
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..b041d00
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,11 @@
+{
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "weixin-js-sdk": {
+ "version": "1.6.5",
+ "resolved": "https://registry.npmmirror.com/weixin-js-sdk/-/weixin-js-sdk-1.6.5.tgz",
+ "integrity": "sha512-Gph1WAWB2YN/lMOFB/ymb+hbU/wYazzJgu6PMMktCy9cSCeW5wA6Zwt0dpahJbJ+RJEwtTv2x9iIu0U4enuVSQ=="
+ }
+ }
+}
diff --git a/static/images/frontend/scan.png b/static/images/frontend/scan.png
new file mode 100644
index 0000000000000000000000000000000000000000..43acf7e0ed769bb2d3fe19d09dedb9135e1e85c3
GIT binary patch
literal 658
zcmV;D0&V??P)Px#1am@3R0s$N2z&@+hyVZrJV``BRA_?N{w*
z$OP|{R@Dyhc1S@)&MujNzFM_`gNSU#H$Qm98fI`7$XiSHz9(wu%U?_!2C~=QfFrOq
z^xwKMtW13Q=xG%CDz@%A#~bi0BH0Fu$U#*%z?XOI8Pd3G%%rc+;SjBed`oC=!acAb
zF>T$FZ(`c|ru3>Q4zHc!@Y*R3ubtvB{Z7e8=>9DbvhDZTo~l~8@M=gG3b$?n?Zes5
z6CzeA1Dt~Yof?AqOQC(z;1oyiZ}|lk3WX~%`cPZ~^T#MF$>yA`fgSVYzfw2?o7{|w
zWvBJX<(&nnoOTvV-CD+NC_GrEbOm%4@k|cDL+(*d_8WF<=ri-=kYj0qt@YfhP$;a7
zC5BqrHmfz5z5*#W`+k;uJE)5OVCz;1**w{i`5X?N*2UIZT!WBppT;+qy0y%vIJ|a>
z!)vEFymtOOhf}I}8jUNEo2$6=w7ZKfTgn!CnjxLqsjaxQ*6D#>4o~B;eN(#4HFQ7?
zd^hy}$vnBTN%|>NT)Jn562wImmpZ=AAZSVMwMOkD@Q~C){V`@N!FuIL?SEDv9`hG~
shJJddl;WF;OPy}bCI13YC=?dKAJG`M+uSi#zyJUM07*qoM6N<$g3MkwJpcdz
literal 0
HcmV?d00001