| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472 |
- <template>
- <div id="recall">
- <!-- 点击下载提示 -->
- <DownLoadInfo @onShowControl="onShowControl"></DownLoadInfo>
- <!-- safari添加到桌面提示 -->
- <SafariTips v-if="showSafariTips" @onShowControl="onShowControl" />
- <!-- 退出页面提示 -->
- <ExitGame></ExitGame>
- <!-- 页面悬浮球 -->
- <Float @openInnerBox="openInnerBox"></Float>
- <!-- 游戏iframe -->
- <GameIframe></GameIframe>
- <!-- 已登录 -->
- <InnerBox v-show="isLogin && showInnerBox"></InnerBox>
- <!-- 未 显示登录框 -->
- <UdbBox v-if="!isLogin"></UdbBox>
- </div>
- </template>
- <script>
- import { recallConfig } from "../../config";
- import { mapState, mapActions } from "vuex";
- import DownLoadInfo from "@/components/Inner/DownLoadInfo"; // 点击下载到桌面提示
- import ExitGame from "@/components/Inner/ExitGame.vue"; // 退出页面提示
- import Float from "@/components/Inner/Float"; // 页面悬浮球
- import GameIframe from "@/components/Inner/GameIframe"; // 游戏iframe
- import InnerBox from "@/components/Inner/InnerBox"; // 已登录显示的内容
- import UdbBox from "@/components/UDB/UdbBox"; // 登录框
- import SafariTips from "@/components/Inner/SafariTips"; // safari添加到桌面提示
- export default {
- name: "Recall",
- components: {
- DownLoadInfo,
- ExitGame,
- Float,
- GameIframe,
- InnerBox,
- UdbBox,
- SafariTips,
- },
- data() {
- return {
- queryTimeout: null, // 订单查询 定时器
- wechatAppid: "wx2c4f9f89c572aeb5", // 公众号appid
- showSafariTips: false, // 显示safari组件
- };
- },
- provide() {
- return {
- // 校验返回值
- checkCode: this.checkCode,
- // 支付校验返回值
- checkCodeHandler: this.checkCodeHandler,
- // 刷新登录态
- refresh: this.refresh,
- // 获取用户信息
- getUserInfo: this.getUserInfo,
- // 获取鸿币余额
- getFinance: this.getFinance,
- // 支付
- payHandler: this.payHandler,
- // 订单查询
- queryOrder: this.queryOrder,
- // 微信内支付
- wechatPay: this.wechatPay,
- // 获取微信code
- getWechatCode: this.getWechatCode,
- };
- },
- computed: {
- ...mapState(["CONFIG", "isLogin", "showInnerBox", "isPay", "query","appid"]),
- userInfo() {
- return this.$store.state.userInfo;
- },
- },
- watch: {
- // ios url带token 直接登录进去
- userInfo: {
- handler(newValue) {
- if (newValue) {
- const token = this.$utils.getQueryString("token");
- if (token) {
- window.location.href = this.$utils.delQueStr(
- window.location.href,
- "token"
- );
- }
- }
- },
- deep: true,
- immediate: true,
- },
- },
- created() {
- // 携带token 直接登录
- const token = this.$utils.getQueryString("token");
- if (token) {
- localStorage.setItem("x-token", token);
- }
- },
- mounted() {
- clearTimeout(this.queryTimeout);
- // 设置页面基础配置信息
- this.setConfigAction(recallConfig);
- // 初始化页面信息
- this.init();
- },
- methods: {
- ...mapActions([
- "setConfigAction",
- "showInnerAction",
- "userInfoAction",
- "isLoginAction",
- "financeAction",
- "isPayAction",
- "tokenAction",
- "isShowExitGameAction",
- "isWeChatAction",
- ]),
- onShowControl(showSafariTips) {
- this.showSafariTips = showSafariTips;
- },
- // 初始化页面信息
- async init() {
- // 微信内
- const _this = this;
- document.addEventListener(
- "WeixinJSBridgeReady",
- function onBridgeReady() {
- _this.isWeChatAction(true);
- // const wechat_open_id = localStorage.getItem("wechat_open_id");
- const wechat_open_id = _this.$utils.getCookie("wechat_open_id");
- const wechat_code = _this.$utils.getQueryString("code");
- if (!wechat_open_id && !wechat_code) {
- _this.$toast.text("授权过期,请重新授权");
- _this.getWechatCode();
- return;
- }
- // 有code, 没有openid 用code换openid
- if (!wechat_open_id && wechat_code) {
- _this.wechatOpenId();
- }
- },
- false
- );
- // userInfo
- // const userInfo = localStorage.getItem("userInfo");
- // if (!userInfo) {
- // this.isLoginAction(false);
- // return;
- // }
- // 校验登录态
- await this.refresh();
- // 获取用户信息
- await this.getUserInfo();
- // 获取鸿币余额
- await this.getFinance();
- // 订单查询
- await this.queryOrder();
- },
- // 换openid
- wechatOpenId() {
- const wechat_code = this.$utils.getQueryString("code");
- const pay_type = this.$utils.payType("WECHATPAY").h5;
- this.$api
- .wechatOpenId({
- wechat_code,
- pay_type,
- })
- .then((res) => {
- this.checkCode(res);
- const { data, code, msg } = res.data;
- // 错误
- if (code) {
- return;
- }
- // 成功
- this.$utils.setCookie("wechat_open_id", data.openId, 30);
- });
- },
- // 获取用户信息
- getUserInfo() {
- this.$api
- .info()
- .then((res) => {
- this.checkCode(res);
- const { data, code, msg } = res.data;
- // 错误
- if (code) {
- return;
- }
- // 成功
- this.isLoginAction(true);
- localStorage.setItem("userInfo", JSON.stringify(data));
- this.userInfoAction(data);
- const token = localStorage.getItem("token");
- this.tokenAction(token);
- })
- .then(() => {
- // 携带token 直接登录
- const token = this.$utils.getQueryString("token");
- if (token) {
- // window.location.href = this.$utils.delQueStr(
- // window.location.href,
- // "token"
- // );
- return;
- }
- });
- },
- // 查询鸿币余额
- getFinance() {
- this.$api.finance().then((res) => {
- this.checkCode(res);
- const { data, code, msg } = res.data;
- // 错误
- if (code) {
- return;
- }
- // 成功
- this.financeAction(data.hb / 100);
- });
- },
- // 微信获取微信code
- getWechatCode() {
- const { wechatAppid } = this;
- let redirect_uri = "";
- redirect_uri = escape(window.location.href);
- window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${wechatAppid}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect`;
- },
- /**
- * 支付宝 微信支付
- * @param {Object} payInfo 支付信息
- */
- payHandler(payInfo) {
- const {
- server_id,
- server_name,
- cp_order_id,
- role_name,
- role_id,
- goods_id,
- goods_name,
- amount,
- pay_type,
- pay_platform,
- extra,
- } = payInfo;
- const { appid } = this;
- return this.$api
- .order({
- server_id,
- server_name,
- cp_order_id,
- app_id: appid,
- role_name,
- role_id,
- goods_id,
- goods_name,
- amount,
- pay_type,
- pay_platform,
- return_url: window.location.href,
- extra,
- })
- .then((res) => {
- this.checkCodeHandler(res);
- const { data, code, msg } = res.data;
- // 错误
- if (code) {
- return;
- }
- // 成功
- this.isPayAction(true);
- // 鸿币支付不需要回调
- if (pay_platform === "HB") {
- return;
- }
- const time = new Date().getTime();
- const orderItem = {
- order_id: data.order_id,
- time,
- };
- let orderList = JSON.parse(localStorage.getItem("orderList")) || [];
- orderList.push(orderItem);
- localStorage.setItem("orderList", JSON.stringify(orderList));
- // 微信内支付
- const { isWeChat } = this;
- if (isWeChat) {
- this.wechatPay(data);
- return;
- }
- window.location.href = data.url;
- });
- },
- // 微信内支付
- wechatPay(res) {
- if (typeof WeixinJSBridge == "undefined") {
- if (document.addEventListener) {
- document.addEventListener(
- "WeixinJSBridgeReady",
- this.onBridgeReady(res),
- false
- );
- } else if (document.attachEvent) {
- document.attachEvent("WeixinJSBridgeReady", this.onBridgeReady(res));
- document.attachEvent(
- "onWeixinJSBridgeReady",
- this.onBridgeReady(res)
- );
- }
- } else {
- this.onBridgeReady(res);
- }
- },
- // 微信内支付
- onBridgeReady(res) {
- const { appId, timeStamp, nonceStr, signType, paySign, openId } = res;
- // localStorage.setItem("wechat_open_id", openId);
- this.$utils.setCookie("wechat_open_id", openId, 30);
- const _this = this;
- WeixinJSBridge.invoke(
- "getBrandWCPayRequest",
- {
- appId, //公众号ID,由商户传入
- timeStamp, //时间戳,自1970年以来的秒数
- nonceStr, //随机串
- package: res.package,
- signType, //微信签名方式:
- paySign, //微信签名
- },
- function (res) {
- if (res.err_msg == "get_brand_wcpay_request:ok") {
- _this.$toast.text("支付成功");
- // 使用以上方式判断前端返回,微信团队郑重提示:
- //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
- return;
- }
- if (res.err_msg == "get_brand_wcpay_request:cancel") {
- _this.$toast.text("取消支付");
- return;
- }
- _this.$toast.text("支付失败");
- }
- );
- },
- // 订单查询
- queryOrder() {
- // 延迟执行定义定时器
- this.queryTimeout = setTimeout(() => {
- let orderList = JSON.parse(localStorage.getItem("orderList")) || [];
- if (orderList.length == 0) {
- clearTimeout(this.queryTimeout);
- return;
- }
- const maxTime = 10000;
- const nowTime = new Date().getTime();
- let _orderList = JSON.parse(JSON.stringify(orderList));
- orderList.map((ele, index) => {
- const flag = nowTime - ele.time > maxTime;
- if (!flag) {
- return;
- }
- // 大于10s 订单查询
- this.$api
- .query({
- order_id: ele.order_id,
- })
- .then((res) => {
- _orderList.splice(index, 1);
- localStorage.setItem("orderList", JSON.stringify(_orderList));
- });
- });
- this.queryOrder();
- }, 5000);
- },
- // 显示innerBox
- openInnerBox() {
- this.showInnerAction(true);
- },
- // 校验返回值
- checkCode(res) {
- // 请求超时
- if (!res) {
- this.$toast.text("当前网络拥堵, 请重试");
- return;
- }
- this.checkCodeHandler(res);
- },
- // 刷新登录态
- refresh() {
- return this.$api.refresh().then((res) => {
- this.checkCode(res);
- const { data, code, msg } = res.data;
- // 错误
- if (code) {
- this.isLoginAction(false);
- this.showInnerAction(false);
- localStorage.removeItem("userInfo");
- return;
- }
- const userInfo = localStorage.getItem("userInfo");
- this.isLoginAction(true);
- this.userInfoAction(JSON.parse(userInfo));
- });
- },
- // 校验返回值====all
- checkCodeHandler(res) {
- const { code, msg } = res.data;
- if (!code) {
- return;
- }
- switch (code) {
- // 2 未登录
- case 2:
- localStorage.removeItem("userInfo");
- this.showInnerAction(false);
- this.isLoginAction(false);
- this.userInfoAction({});
- this.$toast.text(msg);
- break;
- // 7 微信支付code 过期
- case 7:
- this.getWechatCode();
- this.$toast.text(msg);
- break;
- default:
- this.$toast.text(msg);
- }
- },
- },
- };
- </script>
- <style lang="less" scoped>
- .focusState {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- }
- </style>
|