19 Комити 489bf0bd95 ... b315b7bc83

Аутор SHA1 Порука Датум
  loop b315b7bc83 Merge branch 'master' into master_tencent пре 10 месеци
  Damon 64b9567537 feat: 腾讯充值页面路由配置 пре 10 месеци
  Damon f87d4a1c95 feat: 处理增加频道时候不能添加,弹toast提示 пре 10 месеци
  Damon 4e3c681687 Merge branch 'test' of http://60.205.190.38:9000/zhaoheqing/ohplay_h5 into test пре 10 месеци
  Damon ae0143bb9c feat: 增加腾讯支付界面 пре 10 месеци
  Damon 8cb2c9d88d feat: 增加3.2.2版本 пре 10 месеци
  loop 292899de40 Merge branch 'develop/3.2.1' into test пре 10 месеци
  loop af0c782c10 修复会员界面弹框不生效的问题; пре 10 месеци
  loop 720362303d Merge branch 'develop/3.2.1' into test пре 10 месеци
  loop 9fb0b38796 去掉流量页面检测微信客户端的代码; пре 10 месеци
  loop 4d749ecb2d Merge branch 'develop/3.2.1' into test пре 10 месеци
  loop 7d1b6d9fee 增加流量页面需要微信客户端打开; пре 10 месеци
  loop cc39e4d8a5 Merge branch 'develop/3.2.1' into test пре 10 месеци
  loop efc591e5a1 增加流量页面需要微信客户端打开; пре 10 месеци
  loop 047f91dbb5 增加流量页面需要微信客户端打开; пре 10 месеци
  loop 2a92212522 Merge branch 'develop/3.2.1' into test пре 10 месеци
  loop e2c67e2a7d 增加流量页面需要微信客户端打开; пре 10 месеци
  loop c065d7630f Merge branch 'test' of http://60.205.190.38:9000/zhaoheqing/ohplay_h5 into test пре 10 месеци
  loop 33ed328329 增加流量页面需要微信客户端打开; пре 10 месеци
6 измењених фајлова са 736 додато и 1750 уклоњено
  1. 1 1
      package.json
  2. 10 2
      src/pages.json
  3. 3 2
      src/pages/activity/index.vue
  4. 87 64
      src/pages/channel/index.vue
  5. 577 0
      src/pages/pay/tencent.vue
  6. 58 1681
      src/pages/weixin/index.vue

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "h5",
-  "version": "0.1.0",
+  "version": "3.2.2",
   "private": true,
   "scripts": {
     "dev": "npm run dev:h5",

+ 10 - 2
src/pages.json

@@ -2,8 +2,7 @@
   "easycom": {
     "^z-(.*)": "@zebra-ui/swiper/components/z-$1/z-$1.vue"
   },
-  "pages": [
-    {
+  "pages": [{
       // 设备引导页
       "path": "pages/guide/index",
       "style": {
@@ -200,6 +199,14 @@
       }
     },
     {
+      // 腾讯充值
+      "path": "pages/pay/tencent",
+      "style": {
+        "navigationBarTitleText": "流量充值",
+        "navigationStyle": "custom"
+      }
+    },
+    {
       // 开通记录
       "path": "pages/pay/detail",
       "style": {
@@ -219,6 +226,7 @@
       // 微信浏览器检测
       "path": "pages/weixin/index",
       "style": {
+        "navigationBarTitleText": "抱歉,出错了",
         "navigationStyle": "custom"
       }
     }

+ 3 - 2
src/pages/activity/index.vue

@@ -50,8 +50,9 @@ export default {
         if (res.code === 0) {
           this.pic = res.data.pic;
         } else {
+          console.log("showToast" + res.message);
           uni.showToast({
-            title: res.data.message,
+            title: res.message,
             icon: "error",
             duration: 2000,
           });
@@ -68,7 +69,7 @@ export default {
           this.isShow = true;
         } else {
           uni.showToast({
-            title: res.data.message,
+            title: res.message,
             icon: "none",
             mask: true,
             duration: 2000,

+ 87 - 64
src/pages/channel/index.vue

@@ -1,28 +1,42 @@
 <template>
-  <div class='app-container'>
+  <div class="app-container">
     <h1>猫王音响-添加电台</h1>
     <h1>请输入要添加的网络电台信息</h1>
     <div class="form" v-for="(item, index) in form" :key="index">
       <div>电台{{ index + 1 }}</div>
-      <uni-icons v-show="index !== 0" class="close" type="closeempty" color="#FFF" size="18" @click="getClose(index)" />
-      <input type="text" v-model="item.name" placeholder="请输入电台名称">
-      <input type="text" v-model="item.url" placeholder="请输入链接地址">
+      <uni-icons
+        v-show="index !== 0"
+        class="close"
+        type="closeempty"
+        color="#FFF"
+        size="18"
+        @click="getClose(index)"
+      />
+      <input type="text" v-model="item.name" placeholder="请输入电台名称" />
+      <input type="text" v-model="item.url" placeholder="请输入链接地址" />
     </div>
-    <button v-show="form.length < 3" class="plus" @click="getAdd">+ 新增</button>
+    <button v-show="form.length < 3" class="plus" @click="getAdd">
+      + 新增
+    </button>
     <button class="submit" type="submit" circle @click="getSubmit">提交</button>
     <div class="list">
       <h2>已添加的电台</h2>
       <div class="item" v-for="item in list" :key="item.id">
         <div>{{ item.name }}</div>
         <div class="url">{{ item.url }}</div>
-        <uni-icons class="delete" type="more-filled" size="24" @click="getDelete(item)" />
+        <uni-icons
+          class="delete"
+          type="more-filled"
+          size="24"
+          @click="getDelete(item)"
+        />
       </div>
     </div>
   </div>
 </template>
 
 <script>
-import { list, submit, remove } from "@/api/channel"
+import { list, submit, remove } from "@/api/channel";
 export default {
   data() {
     return {
@@ -31,108 +45,117 @@ export default {
       // 列表表单
       listForm: {
         pageNum: 1,
-        pageSize: 10
+        pageSize: 10,
       },
       // 列表
       list: [],
       // 更多
       hasMore: false,
       // 表单
-      form: [{
-        name: "",
-        url: ""
-      }]
-    }
+      form: [
+        {
+          name: "",
+          url: "",
+        },
+      ],
+    };
   },
   onLoad(e) {
-    this.dev = e
-    this.getList()
+    this.dev = e;
+    this.getList();
   },
   methods: {
     // 列表
     getList() {
-      list({ ...this.dev, ...this.listForm }).then(res => {
+      list({ ...this.dev, ...this.listForm }).then((res) => {
         if (res.code === 0) {
-          res.data.records.map(i => this.list.push(i))
-          this.hasMore = res.data.hasMore
+          res.data.records.map((i) => this.list.push(i));
+          this.hasMore = res.data.hasMore;
         }
-      })
+      });
     },
 
     // 添加
     getAdd() {
       this.form.push({
         name: "",
-        url: ""
-      })
+        url: "",
+      });
     },
 
     // 关闭
     getClose(index) {
-      this.form.splice(index, 1)
+      this.form.splice(index, 1);
     },
 
     // 提交
     getSubmit() {
-      var rules = false
-      this.form.map(i => {
+      var rules = false;
+      this.form.map((i) => {
         if (i.name !== "" && i.url !== "") {
-          i.deviceMac = this.dev.deviceMac
-          i.deviceType = this.dev.deviceType
-          i.sign = this.dev.sign
-          rules = true
+          i.deviceMac = this.dev.deviceMac;
+          i.deviceType = this.dev.deviceType;
+          i.sign = this.dev.sign;
+          rules = true;
         }
-      })
+      });
       if (rules) {
-        submit(this.form).then(res => {
+        submit(this.form).then((res) => {
           if (res.code === 0) {
-            this.list = []
-            this.listForm.pageNum = 1
-            this.getList()
-            this.form = [{
-              name: "",
-              url: ""
-            }]
+            this.list = [];
+            this.listForm.pageNum = 1;
+            this.getList();
+            this.form = [
+              {
+                name: "",
+                url: "",
+              },
+            ];
+          } else {
+            uni.showToast({
+              title: res.message,
+              icon: "none",
+            });
           }
-        })
+        });
       } else {
         uni.showToast({
-          title: '电台信息不能为空!',
-          icon: 'none'
-        })
+          title: "电台信息不能为空!",
+          icon: "none",
+        });
       }
     },
 
     // 删除
     getDelete(item) {
       uni.showModal({
-        title: '提示',
+        title: "提示",
         content: `是否删除名称为${item.name}的电台?`,
-        confirmColor: '#78B06A',
+        confirmColor: "#78B06A",
         success: (e) => {
           if (e.confirm) {
             remove({
               id: item.id,
-              ...this.dev
-            }).then(res => {
+              ...this.dev,
+            }).then((res) => {
               if (res.code === 0) {
-                this.list = []
-                this.listForm.pageNum = 1
-                this.getList(this.dev)
+                this.list = [];
+                this.listForm.pageNum = 1;
+                this.getList(this.dev);
               }
-            })
+            });
           }
-        }
-      })
-    }
+        },
+      });
+    },
   },
   onReachBottom() {
-    if(this.hasMore) {
-      this.listForm.pageNum++
-      this.getList()
+    if (this.hasMore) {
+      this.listForm.pageNum++;
+      this.getList();
     }
-  }
-}
+  },
+};
 </script>
 
 <style lang="scss" scoped>
@@ -144,8 +167,8 @@ export default {
   margin: 0;
   font-weight: bold;
   background: none;
-  color: #FFF;
-  border: 1px solid #FFF;
+  color: #fff;
+  border: 1px solid #fff;
 }
 
 h1 {
@@ -161,7 +184,7 @@ h2 {
 
 .list {
   .item {
-    border: 1px solid #FFF;
+    border: 1px solid #fff;
     border-radius: 8px;
     padding: 20px 30px 20px 20px;
     display: flex;
@@ -169,7 +192,7 @@ h2 {
     justify-content: space-around;
     position: relative;
     margin-bottom: 15px;
-    background-color: #FFF;
+    background-color: #fff;
     color: #000;
 
     .delete {
@@ -178,7 +201,7 @@ h2 {
       transform: rotate(90deg);
     }
 
-    .url{
+    .url {
       white-space: nowrap;
       overflow: hidden;
       text-overflow: ellipsis;
@@ -191,13 +214,13 @@ h2 {
   flex-direction: column;
   justify-content: center;
   margin: 8px 0;
-  border: 1px solid #FFF;
+  border: 1px solid #fff;
   padding: 20px;
   border-radius: 8px;
   position: relative;
 
   uni-input {
-    background-color: #FFF;
+    background-color: #fff;
     color: #000;
   }
 

+ 577 - 0
src/pages/pay/tencent.vue

@@ -0,0 +1,577 @@
+<template>
+  <view class="app-container" flex column>
+    <view :class="['header', orderList.length > 0 ? 'header-bg' : '']">
+      <view class="info" flex>
+        <view class="dev-img" flex center>
+          <img :src="info.devicePic" />
+        </view>
+        <view class="dev" flex column>
+          <view class="dev-name owt">{{ info.deviceName }}</view>
+          <view class="dev-history" @click="getRouter"
+            >开通记录
+            <uni-icons type="right" color="#9fa5ad" size="11" />
+          </view>
+        </view>
+      </view>
+      <view class="progress" flex column center>
+        <progress
+          :percent="percent"
+          activeColor="#FFD5A0"
+          backgroundColor="#746C64"
+          border-radius="20"
+        />
+        <view class="progress-info" flex between>
+          <view>
+            <text
+              >剩余:{{ (this.rateplan.left / 1024).toFixed(2) }}GB / 总量:{{
+                (this.rateplan.total / 1024).toFixed(2)
+              }}GB
+            </text>
+            <text style="margin-left: 10px">{{ this.rateplan.dayStr }}</text>
+          </view>
+          <text>已用:{{ (this.rateplan.used / 1024).toFixed(2) }}GB</text>
+        </view>
+      </view>
+      <view v-if="orderList.length > 0">
+        <view
+          class="progress"
+          flex
+          column
+          center
+          v-for="item in orderList"
+          :key="item.orderId"
+        >
+          <progress
+            activeColor="#FFD5A0"
+            backgroundColor="#746C64"
+            border-radius="20"
+          />
+          <view class="progress-info" flex>
+            <view>
+              <text>待生效流量套餐</text>
+              <text style="margin-left: 10px"
+                >总量:{{ (item.total / 1024 / 1024).toFixed(2) }}GB</text
+              >
+            </view>
+            <text style="margin-left: 10px">{{ item.dayStr }}</text>
+          </view>
+        </view>
+      </view>
+    </view>
+    <view class="main">
+      <!--      <button class="button popup-success" @click="getNewAcitivityDetail()">-->
+      <!--        <text-->
+      <!--            class="button-text success-text">领取福利-->
+      <!--        </text>-->
+      <!--      </button>-->
+      <view class="title" flex>
+        <text>流量选择</text>
+        <uni-icons
+          type="help"
+          color="#828282"
+          style="margin-left: 4px"
+          @click="getOpen"
+        />
+      </view>
+      <view flex wrap>
+        <view
+          :class="['list', active === index ? 'active' : '']"
+          v-for="(item, index) in options"
+          :key="index"
+          flex
+          column
+          between
+          @click="getActive(item, index)"
+          :data-content-before="item.operators"
+        >
+          <view class="flow owt">{{ item.name }}</view>
+          <view class="discount icon">{{ item.goodDiscountedPrice }}</view>
+          <view class="price icon">{{ item.goodPrice }}</view>
+          <view v-if="item.tagName" class="tag-name">{{ item.tagName }}</view>
+        </view>
+      </view>
+      <view class="explain" flex column>
+        <text>说明:</text>
+        <text>1、当前流量包购买后,将充值至猫王音响赠送的SIM卡内</text>
+        <text
+          >2、预充值流量因运营商结算时效,上一个流量包使用完后1小时
+          内生效,如有疑问,请咨询客服。</text
+        >
+        <text>3、如在有效期内流量未使用完毕,流量将被清零</text>
+      </view>
+    </view>
+    <view class="footer">
+      <view class="warning">
+        开通后仅支持在当前绑定的猫王音响上通过移动数据模式使用,不支持蓝牙模式
+      </view>
+      <button @click="getWechatPay">立即购买</button>
+    </view>
+
+    <!-- 弹窗 -->
+    <uni-popup
+      ref="popup"
+      type="bottom"
+      border-radius="10px 10px 10px 10px"
+      background-color="#2a2a2a"
+    >
+      <view class="popup">
+        <view class="title">购买须知</view>
+        <view class="content">
+          <h4>
+            1.
+            支付完成后,若当前没有生效中的套餐,套餐立即生效,若当前有生效中未使用完套餐,购买套餐进入流量套餐队列,待上一个套餐失效后激活生效。
+          </h4>
+          <h4>2. 此卡充值流量套餐后,仅限当前设备使用。</h4>
+          <h4>3. 此套餐为虚拟产品,购买后不支持退款。</h4>
+          <h4>
+            4. 客服微信:miao friend
+            ,有任何问题请添加客服微信,我们将耐心为您解决问题。
+          </h4>
+        </view>
+        <button @click="getClose">我知道了</button>
+      </view>
+    </uni-popup>
+
+    <view>
+      <!-- 提示窗示例 -->
+      <uni-popup ref="alertDialog" type="dialog">
+        <uni-popup-dialog
+          :showClose="showClose"
+          :type="msgType"
+          cancelText="不领取"
+          confirmText="领取"
+          title="福利通知"
+          content="您当前有一个流量领取福利!"
+          @confirm="dialogConfirm"
+          @close="dialogClose"
+        ></uni-popup-dialog>
+      </uni-popup>
+    </view>
+    <view>
+      <!-- 提示信息弹窗 -->
+      <uni-popup ref="message" type="message">
+        <uni-popup-message
+          :type="msgType"
+          :message="messageText"
+          :duration="2000"
+        ></uni-popup-message>
+      </uni-popup>
+    </view>
+  </view>
+</template>
+
+<script>
+import {
+detail,
+newAcitivityDetail,
+openId,
+options,
+order,
+wechatPay,
+} from "@/api/pay";
+
+export default {
+  data() {
+    return {
+      isWeixin: false,
+      type: "center",
+      msgType: "success",
+      messageText: "这是一条成功提示",
+      value: "",
+      showClose: false,
+      // 流量信息
+      info: {},
+      rateplan: {},
+      // 已用流量
+      percent: 0,
+      // 下单表单
+      form: {},
+      // 流量选择
+      options: [],
+      // 选择
+      active: 0,
+      // 流量套餐id
+      goddsId: 0,
+      state: "",
+      // 待生效流量
+      orderList: [],
+      isReceive: false,
+      description: "",
+      id: "",
+      name: "",
+      pic: "",
+    };
+  },
+
+  onLoad(e) {
+    // this.detectWeixin();
+    // if (!this.isWeixin){
+    //   // 跳转到微信页面
+    //   uni.navigateTo({
+    //     url: `/pages/weixin/index`,
+    //   });
+    // }
+
+    this.state = e.state;
+    this.getOpenId(e);
+    this.getDetail();
+    this.getOptions();
+    this.getOrder();
+    this.getNewAcitivityDetail();
+  },
+  methods: {
+    // detectWeixin() {
+    //   let userAgent = navigator.userAgent;
+    //   if (userAgent.includes("MicroMessenger")) {
+    //     this.isWeixin = true
+    //   } else {
+    //     this.isWeixin = false
+    //   }
+    // },
+    // 联通流量详细信息
+    getNewAcitivityDetail() {
+      newAcitivityDetail({
+        state: this.state,
+      }).then((res) => {
+        console.log("asdfqwerqrqr====" + JSON.stringify(res));
+        if (res.code === 0) {
+          this.isReceive = res.data.isReceive;
+          this.id = res.data.id;
+          this.name = res.data.name;
+          this.pic = res.data.pic;
+          this.description = res.data.description;
+
+          // 可以领取
+          if (res.data.isReceive) {
+            this.msgType = "success";
+            this.$refs.alertDialog.open();
+          } else {
+            // uni.showToast({
+            //   title: res.data.msg,
+            //   icon: "none",
+            //   mask: true,
+            //   duration: 4000,
+            // });
+          }
+        } else {
+          // uni.showToast({
+          //   title: res.message,
+          //   icon: "none",
+          //   mask: true,
+          //   duration: 4000,
+          // });
+        }
+      });
+    },
+
+    dialogConfirm() {
+      this.messageText = `点击确认了 ${this.msgType} 窗口`;
+      this.$refs.alertDialog.close();
+      // 跳转到活动页面
+      uni.navigateTo({
+        url: `/pages/activity/new?state=${this.state}&id=${this.id}&pic=${this.pic}`,
+      });
+    },
+    dialogClose() {
+      // alert("关闭")
+    },
+
+    // 获取openId
+    getOpenId(e) {
+      openId(e.code).then((res) => {
+        if (res.code === 0) {
+          uni.setStorageSync("openId", res.data.openid);
+        }
+      });
+    },
+
+    // 流量信息
+    getDetail() {
+      detail({ state: this.state }).then((res) => {
+        if (res.code === 0) {
+          this.info = res.data;
+          this.rateplan = res.data.rateplan;
+          this.percent = (this.rateplan.used / this.rateplan.total) * 100;
+        }
+      });
+    },
+
+    // 流量列表
+    getOrder() {
+      order({ state: this.state }).then((res) => {
+        if (res.code === 0) {
+          this.orderList = res.data.filter((i) => i.status === 1).splice(0, 2);
+        }
+      });
+    },
+
+    // 流量套餐
+    getOptions() {
+      options({ state: this.state }).then((res) => {
+        this.options = res.data;
+        this.goodsId = res.data[0].id;
+        res.data.map((i) =>
+          document.documentElement.style.setProperty("——operators", i.operators)
+        );
+      });
+    },
+
+    // 选择套餐
+    getActive(item, index) {
+      this.active = index;
+      this.goodsId = item.id;
+    },
+
+    // 下单
+    getWechatPay() {
+      wechatPay({
+        openId: uni.getStorageSync("openId"),
+        goodType: 18,
+        goodsId: this.goodsId,
+        ptype: 1,
+        state: this.state,
+        tradeType: 2,
+      }).then((res) => {
+        if (res.code === 0) {
+          this.form = JSON.parse(res.data.wxOrder.formUrl);
+          if (typeof WeixinJSBridge == "undefined") {
+            if (document.addEventListener) {
+              document.addEventListener(
+                "WeixinJSBridge",
+                this.onBridgeReady(),
+                false
+              );
+            } else if (document.attachEvent) {
+              document.attachEvent("WeixinJSBridge", this.onBridgeReady());
+              document.attachEvent(
+                "onWeixinJSBridgeReady",
+                this.onBridgeReady()
+              );
+            }
+          } else {
+            this.onBridgeReady();
+          }
+        }
+      });
+    },
+    // 弹窗
+    getOpen() {
+      this.$refs.popup.open();
+    },
+    // 关闭
+    getClose() {
+      this.$refs.popup.close();
+    },
+    // 调起支付
+    onBridgeReady() {
+      WeixinJSBridge.invoke("getBrandWCPayRequest", this.form, function (res) {
+        if (res.err_msg == "get_brand_wcpay_request:ok") {
+          // 支付成功刷新页面
+          location.reload();
+        }
+      });
+    },
+    // 开通记录
+    getRouter() {
+      uni.navigateTo({
+        url: `/pages/pay/detail?state=${this.state}`,
+      });
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.app-container {
+  padding: 0;
+}
+
+.header {
+  width: 100%;
+  height: 368rpx;
+  background: url("../../static/pay/bg.png") no-repeat 100% / 100%;
+
+  .info {
+    margin-bottom: 38rpx;
+
+    .dev-img {
+      background: rgba(0, 0, 0, 0.12);
+      width: 120rpx;
+      height: 120rpx;
+      border-radius: 50%;
+      margin: 64rpx 0 0 64rpx;
+
+      img {
+        width: 96rpx;
+        height: 96rpx;
+      }
+    }
+
+    .dev {
+      width: calc(590rpx - 130rpx);
+      margin-top: 88rpx;
+      margin-left: 24rpx;
+
+      .dev-name {
+        font-size: 32rpx;
+        margin-bottom: 8rpx;
+      }
+
+      .dev-history {
+        color: #9fa5ad;
+        font-size: 22rpx;
+      }
+    }
+  }
+
+  .progress {
+    width: 100%;
+    margin-bottom: 16rpx;
+
+    ::v-deep uni-progress,
+    .progress-info {
+      width: 590rpx;
+
+      .uni-progress-bar,
+      .uni-progress-inner-bar {
+        border-radius: 18rpx;
+      }
+    }
+
+    .progress-info {
+      font-size: 20rpx;
+      color: #9fa5ad;
+      margin-top: 8rpx;
+    }
+  }
+}
+
+.header-bg {
+  height: 510rpx;
+  background: url("../../static/pay/bigbg.png") no-repeat 100% / 100%;
+}
+
+.main {
+  flex: 1;
+  padding: 0 32rpx;
+  margin-bottom: 320rpx;
+
+  .title {
+    align-items: center;
+  }
+
+  .active {
+    background-color: rgba(199, 170, 134, 0.12);
+  }
+
+  .list {
+    width: calc(100% / 3 - 10px);
+    height: 268rpx;
+    border: 1px solid #c7aa86;
+    border-radius: 16rpx;
+    padding: 48rpx 10px;
+    color: #ffd5a0;
+    position: relative;
+    margin: 24rpx 5px 0;
+
+    .flow {
+      width: 100%;
+      font-size: 28rpx;
+      text-align: center;
+    }
+
+    .discount {
+      font-size: 48rpx;
+    }
+
+    .price {
+      font-size: 24rpx;
+      text-decoration: line-through;
+      opacity: 0.5;
+    }
+
+    .icon::before {
+      content: "¥";
+      font-size: 24rpx;
+    }
+  }
+
+  .list::before {
+    content: attr(data-content-before);
+    position: absolute;
+    left: -1px;
+    top: -1px;
+    background-color: #ffd5a0;
+    color: #765626;
+    font-size: 22rpx;
+    border-radius: 16rpx 0 16rpx 0;
+    padding: 0 16rpx;
+  }
+
+  .tag-name {
+    position: absolute;
+    left: 0px;
+    bottom: -1px;
+    background-color: #ffd5a0;
+    color: #765626;
+    font-size: 22rpx;
+    width: 100%;
+    text-align: center;
+    border-radius: 0 0 16rpx 16rpx;
+  }
+
+  .explain {
+    font-size: 24rpx;
+    opacity: 0.5;
+    margin-top: 24rpx;
+  }
+}
+
+.footer {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  background: #181818;
+
+  .warning {
+    font-size: 22rpx;
+    background-color: #2a2a2a;
+    padding: 16rpx 32rpx;
+  }
+}
+
+.popup {
+  padding: 20px 24px 0;
+
+  .title {
+    text-align: center;
+    font-size: 18px;
+  }
+
+  .content {
+    padding: 16px 0 0 0;
+    font-size: 14px;
+    margin-bottom: 64rpx;
+
+    h4 {
+      font-weight: 100;
+      line-height: 20px;
+      margin-bottom: 10px;
+    }
+  }
+}
+
+button {
+  width: calc(100% - 64rpx);
+  height: 92rpx;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  background: linear-gradient(90deg, #f3cf97 0%, #f6e5c4 100%);
+  border-radius: 23px;
+  color: #7c541a;
+  font-size: 32rpx;
+  font-weight: bold;
+  margin: 32rpx auto;
+}
+</style>

Разлика између датотеке није приказан због своје велике величине
+ 58 - 1681
src/pages/weixin/index.vue