|
@@ -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>
|