diff --git a/src/utils/jweixin-1.3.2.js b/dist/js/jweixin-1.3.2.js
similarity index 100%
rename from src/utils/jweixin-1.3.2.js
rename to dist/js/jweixin-1.3.2.js
diff --git a/public/js/jweixin-1.3.2.js b/public/js/jweixin-1.3.2.js
new file mode 100644
index 0000000..10c32f7
--- /dev/null
+++ b/public/js/jweixin-1.3.2.js
@@ -0,0 +1,545 @@
+;((e, n) => {
+    "function" == typeof define && (define.amd || define.cmd)
+        ? define(function () {
+              return n(e)
+          })
+        : n(e, !0)
+})(this, function (r, e) {
+    var a, c, n, i, t, s, d, o, l, u, p, f, m, g, h, I, S, y, 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 = (() => {
+                var e,
+                    n = {}
+                for (e in a) n[a[e]] = e
+                return n
+            })()),
+            (i = (n = r.document).title),
+            (t = navigator.userAgent.toLowerCase()),
+            (f = navigator.platform.toLowerCase()),
+            (s = !(!f.match("mac") && !f.match("win"))),
+            (d = -1 != t.indexOf("wxdebugger")),
+            (o = -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 = {}),
+            (I = { _completes: [] }),
+            (S = { state: 0, data: {} }),
+            B(function () {
+                m.initEndTime = L()
+            }),
+            (y = !1),
+            (v = []),
+            (_ = {
+                config: function (e) {
+                    C("config", (h = e))
+                    var o = !1 !== h.check
+                    B(function () {
+                        if (o)
+                            k(
+                                a.config,
+                                { verifyJsApiList: V(h.jsApiList) },
+                                ((I._complete = function (e) {
+                                    ;(m.preVerifyEndTime = L()), (S.state = 1), (S.data = e)
+                                }),
+                                (I.success = function (e) {
+                                    g.isPreVerifyOk = 0
+                                }),
+                                (I.fail = function (e) {
+                                    I._fail ? I._fail(e) : (S.state = -1)
+                                }),
+                                (t = I._completes).push(function () {
+                                    var n
+                                    s ||
+                                        d ||
+                                        h.debug ||
+                                        p < "6.0.2" ||
+                                        g.systemType < 0 ||
+                                        ((n = 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), (n.src = "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)
+                                            },
+                                        }))
+                                }),
+                                (I.complete = function (e) {
+                                    for (var n = 0, i = t.length; n < i; ++n) t[n]()
+                                    I._completes = []
+                                }),
+                                I)
+                            ),
+                                (m.preVerifyStartTime = L())
+                        else {
+                            S.state = 1
+                            for (var e = I._completes, n = 0, i = e.length; n < i; ++n) e[n]()
+                            I._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 != S.state || (I._completes.push(e), !o && h.debug)) && e()
+                },
+                error: function (e) {
+                    p < "6.0.2" || (-1 == S.state ? e(S.data) : (I._fail = e))
+                },
+                checkJsApi: function (e) {
+                    k(
+                        "checkJsApi",
+                        { jsApiList: V(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
+                    )
+                },
+                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) {},
+                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 === y
+                        ? ((y = !0),
+                          k(
+                              "getLocalImgData",
+                              { localId: e.localId },
+                              ((e._complete = function (e) {
+                                  var n
+                                  ;(y = !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)
+                },
+                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: (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
+                    )
+                },
+                miniProgram: {
+                    navigateBack: function (e) {
+                        ;(e = e || {}),
+                            B(function () {
+                                k("invokeMiniProgramAPI", { name: "navigateBack", arg: { delta: e.delta || 1 } }, e)
+                            })
+                    },
+                    navigateTo: function (e) {
+                        B(function () {
+                            k("invokeMiniProgramAPI", { name: "navigateTo", arg: { url: e.url } }, e)
+                        })
+                    },
+                    redirectTo: function (e) {
+                        B(function () {
+                            k("invokeMiniProgramAPI", { name: "redirectTo", arg: { url: e.url } }, e)
+                        })
+                    },
+                    switchTab: function (e) {
+                        B(function () {
+                            k("invokeMiniProgramAPI", { name: "switchTab", arg: { url: e.url } }, e)
+                        })
+                    },
+                    reLaunch: function (e) {
+                        B(function () {
+                            k("invokeMiniProgramAPI", { name: "reLaunch", arg: { url: e.url } }, e)
+                        })
+                    },
+                    postMessage: function (e) {
+                        B(function () {
+                            k("invokeMiniProgramAPI", { name: "postMessage", arg: e.data || {} }, e)
+                        })
+                    },
+                    getEnv: function (e) {
+                        B(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), "IMG" != n && "VIDEO" != n && "AUDIO" != n && "SOURCE" != n) || ((n = e["wx-id"]) && (T[n] = !1))
+                },
+                !0
+            ),
+            e && (r.wx = r.jWeixin = _),
+            _
+        )
+    function k(n, e, i) {
+        r.WeixinJSBridge
+            ? WeixinJSBridge.invoke(n, P(e), function (e) {
+                  A(n, e, i)
+              })
+            : C(n, i)
+    }
+    function M(n, i, t) {
+        r.WeixinJSBridge
+            ? WeixinJSBridge.on(n, function (e) {
+                  t && t.trigger && t.trigger(e), A(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 A(e, n, i) {
+        "openEnterpriseChat" == 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 = ((e, n) => {
+                        var i,
+                            t = c[e]
+                        return t && (e = t), (t = "ok"), n && ((i = n.indexOf(":")), ("access denied" != (t = (t = (t = -1 != (t = -1 != (t = "failed" == (t = "confirm" == (t = n.substring(i + 1)) ? "ok" : t) ? "fail" : t).indexOf("failed_") ? t.substring(7) : t).indexOf("fail_") ? t.substring(5) : t).replace(/_/g, " ")).toLowerCase()) && "no permission to execute" != t) || (t = "permission denied"), "" == (t = "config" == e && "function not exist" == t ? "ok" : t)) && (t = "fail"), (n = e + ":" + t)
+                    })(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 V(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 L() {
+        return new Date().getTime()
+    }
+    function B(e) {
+        o && (r.WeixinJSBridge ? e() : n.addEventListener && n.addEventListener("WeixinJSBridgeReady", e, !1))
+    }
+})