diff --git a/androidPrivacy.json b/androidPrivacy.json index dc05560..36ff16d 100644 --- a/androidPrivacy.json +++ b/androidPrivacy.json @@ -2,13 +2,13 @@ "version" : "1", "prompt" : "template", "title" : "服务协议与隐私政策", - "message" : "\t请务必审慎阅读、充分理解“服务协议与 隐私政策”各条款,包括但不限于:为了 向你提供即时通讯、内容分享等服务,我 们需要收集你的设备信息、操作日志等个 人信息。你可以在“设置”中查看、变更、删除个人信息并管理你的授权。<br/>\r\r\r -\t你可以阅读 <a href=\"https://请修改为自己的域名/register.html\">《用户协议》</a> 与 <a href=\"https://请修改为自己的域名/protocol.html\">《隐私政策》</a>了解详细信息。如你同意,请点击“我同意”开始接受我们的服务。", + "message" : "\t请务必审慎阅读、充分理解“服务协议与 隐私政策”各条款,包括但不限于:为了 向你提供即时通讯、内容分享等服务,我 们需要收集你的设备信息、操作日志等个 人信息。你可以在“设置”中查看、变更、删除个人信息并管理你的授权。<br/>\r\r\r\r +\t你可以阅读 <a href=\"https://shop.lihaink.cn/register.html\">《用户协议》</a> 与 <a href=\"https://shop.lihaink.cn/protocol.html\">《隐私政策》</a>了解详细信息。如你同意,请点击“我同意”开始接受我们的服务。", "buttonAccept" : "同意并接受", "buttonRefuse" : "暂不同意", "second" : { "title" : "确认提示", - "message" : "进入应用前,你需先同意<a href=\"https://请修改为自己的域名/register.html\">《用户协议》</a> 与 <a href=\"https://请修改为自己的域名/protocol.html\">《隐私政策》</a>,否则将退出应用。", + "message" : "进入应用前,你需先同意<a href=\"https://shop.lihaink.cn/register.html\">《用户协议》</a> 与 <a href=\"https://shop.lihaink.cn/protocol.html\">《隐私政策》</a>,否则将退出应用。", "buttonAccept" : "同意并继续", "buttonRefuse" : "退出应用" }, diff --git a/api/uniMP.js b/api/uniMP.js new file mode 100644 index 0000000..3562f10 --- /dev/null +++ b/api/uniMP.js @@ -0,0 +1,27 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 +// +---------------------------------------------------------------------- +// | Author: CRMEB Team <admin@crmeb.com> +// +---------------------------------------------------------------------- +import request from "@/utils/request.js"; + +/** + * 获取供销平台版本信息 + */ +export function getGXconfig(data) { + return request.get("global/config", data); +} + + +/** + * 获取商城小程序信息 + */ + +export function miniapp(data) { + return request.get("miniapp/version?version=1", data); +} + diff --git a/components/shortPopupActive.vue b/components/shortPopupActive.vue new file mode 100644 index 0000000..9f95187 --- /dev/null +++ b/components/shortPopupActive.vue @@ -0,0 +1,534 @@ +<template> + <view> + <uni-popup ref="popupRef" type="bottom" @change="changeShow"> + <view class="pop"> + <scroll-view scroll-y class="scroll"> + <view class="image"> + <swiper class="swiper" :current="current" autoplay style="width: 100%;height: 100%;" @change="changeCurrent"> + <block v-if="product.slider_image && product.slider_image.length>0"> + <swiper-item v-for="(item,index) in product.slider_image" :key="index"> + <image class="img" :src="item"></image> + </swiper-item> + </block> + <swiper-item v-else> + <image class="img" :src="datas.image||defualtImg"></image> + </swiper-item> + </swiper> + <view class="current">{{current+1}}/{{product.slider_image && product.slider_image.length||1}}</view> + <image class="close" src="@/static/images/icon/close.png" @click="close()"></image> + <view class="border"></view> + </view> + <view class="white_card"> + <view class="flex flex_end"> + <block v-if="datas.limited_price"> + <view class="price">¥<text class="pro">{{leftPrice2}}.</text>{{rightPrice2}} + </view> + <view class="price" style="text-decoration: line-through;color: #999;font-weight: 400;font-size: 28rpx;">原价: ¥<text>{{leftPrice}}.</text>{{rightPrice}}</view> + </block> + <view v-else class="price">¥<text>{{leftPrice}}.</text>{{rightPrice}}</view> + <!-- <view>订货价</view> --> + </view> + <view class="short_name">{{datas.store_name}}</view> + <view class="flex"> + <view class="shop_name"> + <image class="icon" src="@/static/images/icon/short.png"></image> + <view>{{datas.merchant.mer_name}}</view> + </view> + </view> + <u-line></u-line> + <block name="规格选中" v-for="(att, indexw) in attr" :key="indexw"> + <view class="m_title">{{att.attr_name}}</view> + <view class="flex" style="flex-wrap: wrap;"> + <view class="attr" :class="{'attr_active': item.check}" + v-for="(item, indexn) in att.attr_value" :key="indexn" + @click="changeAttr(indexw, indexn)"> + {{item.attr}} + </view> + </view> + </block> + <view class="m_title num"> + <view>购买数量</view> + <view class="input"> + <view class="input_item sub" @click="subCartNum">-</view> + <input class="input_item input_view" v-model="cart_num" type="number" @input="inputCartNum" /> + <view class="input_item plus" @click="plusCartNum">+</view> + </view> + </view> + <view> + 商品库存 <text style="margin-left: 20rpx;">{{(sku[changeSkuKey] && sku[changeSkuKey].stock)||change.stock}}</text> + </view> + </view> + </scroll-view> + <view class="button"> + <!-- <view class="b_icon" @click="navgoCart()"> + <image src="@/static/images/icon/car.png"></image> + <view>购物车</view> + <view class="badge" v-if="goodsNum">{{goodsNum}}</view> + </view> --> + <view class="btn" @click.stop="$u.throttle(addcart, 1500)"> {{isBuy?'立即购买':'加入购物车'}} </view> + </view> + </view> + </uni-popup> + </view> +</template> + +<script> + import { + postCartAdd, + getProductDetail + } from '@/api/store.js'; +import { Toast } from '../libs/uniApi'; +import { data } from '../uni_modules/uview-ui/libs/mixin/mixin'; + export default { + name: "shortPopup", + props: { + source:{ + type: Number, + default: null + }, + isBuy: { + type: Boolean, + default: false + } + }, + data() { + return { + isShow: false, //当前是否打开弹窗 + defualtImg: 'https://lihai001.oss-cn-chengdu.aliyuncs.com/uploads/20230130/00ebcfdf75684f5494c0193075055d1.png', + datas: { + image: '', + store_name: '', + merchant: { + mer_name: '' + }, + price: '', + }, + product: {}, + attrValue: [], + attr: [], //多级规格 + changeSkuKey: '', //多级规格选中的key + sku: {}, //规格 + sku_key_list: [], //规格名称列表 + changeSkuKey: '', //选中的规格名称 + change: { + stock: '' + }, + cart_num: 1, //购买数量 + goodsNum: 0, //购物车数量 + current: 0, //轮播图当前滑块 + }; + }, + mounted() {}, + computed:{ + leftPrice(){ + return this.sku[this.changeSkuKey]?.price?.split('.')[0]||'0'; + }, + rightPrice(){ + return this.sku[this.changeSkuKey]?.price?.split('.')[1]||'00'; + }, + leftPrice2(){ + return this.datas.limited_price.split('.')[0]||'0'; + }, + rightPrice2(){ + return this.datas.limited_price.split('.')[1]||'00'; + } + }, + methods: { + // 注入参数, + setDatas(datas, goodsNum) { + getProductDetail(datas.product_id).then((res)=>{ + this.attr = res.data.attr; + if(this.attr.length>0) this.attr.forEach((item, index)=>{ + this.changeAttr(index, 0); + }) + else this.changeSkuKey = ''; + }) + this.goodsNum = goodsNum; + this.datas = datas; + this.product = datas.product; + this.attrValue = datas.product?.attrValue; + this.change = this.attrValue[0]; + this.cart_num = 1; + this.sku = datas.sku||{}; + this.sku_key_list = Object.keys(this.sku); + }, + // 输入购买数量 + inputCartNum(e) { + if(this.sku){ + if (+e.detail.value > this.sku[this.changeSkuKey].stock) { + uni.showToast({ + icon: 'none', + title: '不能超出库存哦' + }) + this.$nextTick(() => { + this.cart_num = this.sku[this.changeSkuKey].stock; + }) + } + }else if (this.change.stock <= this.cart_num) { + uni.showToast({ + icon: 'none', + title: '不能超出库存哦' + }) + this.$nextTick(() => { + this.cart_num = this.change.stock; + }) + } + }, + // 减少购买数量 + subCartNum() { + if (this.cart_num <= 1) { + return uni.showToast({ + icon: 'none', + title: '最少要买一件哦' + }) + } + this.cart_num--; + }, + // 增加购买数量 + plusCartNum() { + return Toast('最多购买一件哦'); + if(this.sku){ + if (this.sku[this.changeSkuKey].stock <= this.cart_num) { + return uni.showToast({ + icon: 'none', + title: '不能超出库存哦' + }) + } + }else if (this.change.stock <= this.cart_num) { + return uni.showToast({ + icon: 'none', + title: '不能超出库存哦' + }) + } + this.cart_num++; + }, + changeAttr: function(indexw, indexn) { + let that = this; + this.$set(this.attr[indexw], 'index', this.attr[indexw].attr_values[indexn]); + this.attr[indexw].attr_value.forEach((item, index)=>{ + if(index==indexn)item.check = true; + else item.check = false; + }) + let value = that.getCheckedValue().join(","); + this.changeSkuKey = value; + }, + //获取被选中属性; + getCheckedValue: function() { + let productAttr = this.attr; + let value = []; + for (let i = 0; i < productAttr.length; i++) { + for (let j = 0; j < productAttr[i].attr_values.length; j++) { + if (productAttr[i].index === productAttr[i].attr_values[j]) { + value.push(productAttr[i].attr_values[j]); + } + } + } + return value; + }, + // 加入购物车 + addcart() { + if (this.sku[this.changeSkuKey]) { + if (this.cart_num > this.sku[this.changeSkuKey].stock) return uni.showToast({ + icon: 'none', + title: '不能超出库存哦' + }) + let data = { + cart_num: this.cart_num, + is_new: 0, + product_attr_unique: this.sku[this.changeSkuKey].unique, + product_id: this.datas.product_id, + product_type: this.datas.product_type, + source: this.source, + spread_id: "", + } + let that = this + let res = postCartAdd({ + ...data + }).then((res, err) => { + if(this.isBuy) return uni.navigateTo({ + url: `/pages/users/order_confirm/index?cartId=${res.data.cart_id}&type_id=${this.datas.merchant.type_id}&source=${this.source}` + }); + uni.showToast({ + title: "加入成功", + duration: 1000, + }) + this.$emit('addCart'); + this.close(); + if(this.isBuy){ + this.navgoCart(); + } + }).catch(err => { + uni.showToast({ + title: err, + icon: "none", + duration: 1000, + }) + }) + } else { + uni.showToast({ + icon: 'none', + title: '商品规格不存在' + }) + } + }, + // 滑动轮播图 + changeCurrent(e){ + this.current = e.detail.current; + }, + navgoCart(url=null) { + if(!url) { + if(this.source) url = '/pages/order_addcart/order_addcart?source='+this.source; + else url = '/pages/order_addcart/order_addcart'; + } + uni.navigateTo({ + url + }) + }, + open() { + this.$refs.popupRef.open(); + }, + close() { + this.$refs.popupRef.close(); + }, + changeShow(e) { + this.isShow = e.show; + } + } + } +</script> + +<style lang="scss"> + .pop { + background-color: #fff; + border-radius: 31.54rpx 31.54rpx 0rpx 0rpx; + overflow: hidden; + position: relative; + + .scroll{ + height: calc(90vh - 150rpx); + } + + .flex_end { + align-items: flex-end; + } + + + .image { + height: 750rpx; + width: 750rpx; + position: relative; + + .current{ + position: absolute; + bottom: 70rpx; + left: 30rpx; + width: 67rpx; + height: 37rpx; + background: rgba(#333, 0.2); + border-radius: 11rpx 11rpx 11rpx 11rpx; + text-align: center; + color: #fff; + font-size: 26rpx; + font-family: PingFang SC-Regular, PingFang SC; + font-weight: 400; + } + + .img { + width: 100%; + height: 100%; + border-radius: 31.54rpx 31.54rpx 0rpx 0rpx; + overflow: hidden; + } + + .close { + position: absolute; + top: 30rpx; + right: 30rpx; + width: 50.82rpx; + height: 50.82rpx; + } + + .border { + position: absolute; + bottom: -1rpx; + left: 0; + background-color: #fff; + height: 40rpx; + width: 100%; + border-radius: 40rpx 40rpx 0 0; + } + } + + .white_card { + border-radius: 31.54rpx 31.54rpx 0rpx 0rpx; + background-color: #fff; + margin: 0 28rpx; + padding-bottom: 30rpx; + color: #737373; + font-size: 26.29rpx; + + .price { + font-size: 35rpx; + font-family: SF Pro Display-Semibold, SF Pro Display; + font-weight: 600; + color: #F84221; + padding-right: 30rpx; + + .pro { + font-size: 49.07rpx; + } + } + + .short_name { + font-size: 33rpx; + font-family: PingFang SC-Semibold, PingFang SC; + font-weight: 600; + color: #333333; + } + + .shop_name { + display: flex; + background: #FEF5F3; + padding: 0 16rpx; + border-radius: 26rpx 26rpx 26rpx 26rpx; + margin-top: 30rpx; + margin-bottom: 20rpx; + align-items: center; + + .icon { + width: 31.54rpx; + height: 31.54rpx; + margin-right: 10rpx; + } + } + + .m_title { + font-size: 30rpx; + font-family: PingFang SC-Medium, PingFang SC; + font-weight: 500; + color: #333333; + margin-top: 31rpx; + margin-bottom: 21rpx; + } + + .attr { + opacity: 1; + border: 1rpx solid #F84221; + color: #333333; + padding: 15rpx 30rpx; + margin-right: 20rpx; + height: 63rpx; + line-height: 60rpx; + border-radius: 63rpx; + display: flex; + align-items: center; + justify-content: center; + } + + .attr_active{ + // background-color: #FEF5F3; + // color: #F84221; + background-color: #F84221; + color: #fff; + } + + .num { + display: flex; + justify-content: space-between; + align-items: center; + + .input { + display: flex; + align-items: center; + height: 48rpx; + + .input_item { + width: 44rpx; + height: 44rpx; + text-align: center; + line-height: 40rpx; + border: 2rpx solid #fff; + font-size: 26rpx; + color: #333; + } + + .input_view { + width: 60rpx; + } + + .sub { + border: 2rpx solid #FCB9AD; + border-radius: 7rpx 0rpx 0rpx 7rpx; + background: #FFFFFF; + font-size: 26rpx; + color: #B3B3B3; + } + + .plus { + border: 2rpx solid #FCB9AD; + border-radius: 0rpx 7rpx 7rpx 0rpx; + background: #FFFFFF; + font-size: 26rpx; + color: #B3B3B3; + } + } + } + + } + + .button { + padding: 28rpx; + margin-bottom: 28rpx; + background-color: #fff; + display: flex; + justify-content: space-around; + padding-bottom: constant(safe-area-inset-bottom); ///兼容 IOS<11.2/ + padding-bottom: env(safe-area-inset-bottom); ///兼容 IOS>11.2/ + padding-bottom: constant(safe-area-inset-bottom); ///兼容 IOS<11.2/ + padding-bottom: env(safe-area-inset-bottom); ///兼容 IOS>11.2/ + + .b_icon { + display: flex; + flex-direction: column; + align-items: center; + font-size: 19rpx; + font-weight: 400; + color: #333333; + position: relative; + + image { + width: 50.82rpx; + height: 50.82rpx; + } + + .badge { + position: absolute; + top: -5rpx; + right: -10rpx; + color: #fff; + min-width: 28rpx; + height: 28rpx; + text-align: center; + line-height: 24rpx; + background: #F84221; + border-radius: 16rpx 16rpx 16rpx 16rpx; + border: 2rpx solid #FFFFFF; + } + } + + .btn { + width: 575rpx; + height: 84rpx; + background: linear-gradient(270deg, #FF6D20 0%, #F84221 100%); + border-radius: 42rpx 42rpx 42rpx 42rpx; + display: flex; + justify-content: center; + align-items: center; + font-size: 30rpx; + font-family: PingFang SC-Medium, PingFang SC; + font-weight: 500; + color: #FFFFFF; + } + } + } +</style> \ No newline at end of file diff --git a/manifest.json b/manifest.json index 9505360..1d8799f 100644 --- a/manifest.json +++ b/manifest.json @@ -27,6 +27,9 @@ "iBeacon" : {}, "Maps" : {}, "Geolocation" : {}, + "UniMP" : { + "description" : "uni小程序" + }, "Push" : {}, "Barcode" : {}, "Camera" : {} @@ -153,6 +156,134 @@ "useOriginalMsgbox" : true, "androidStyle" : "default" } + }, + "nativePlugins" : { + "JG-JCore" : { + "JPUSH_APPKEY_IOS" : "8a5efd65cda14fafa6e64ad3", + "JPUSH_CHANNEL_IOS" : "8a5efd65cda14fafa6e64ad3", + "JPUSH_APPKEY_ANDROID" : "b5f679f4357018605ea6fd2e", + "JPUSH_CHANNEL_ANDROID" : "", + "__plugin_info__" : { + "name" : "JG-JCore", + "description" : "极光推送JCore插件", + "platforms" : "Android,iOS", + "url" : "", + "android_package_name" : "uni.UNI3A527D1", + "ios_bundle_id" : "", + "isCloud" : false, + "bought" : -1, + "pid" : "", + "parameters" : { + "JPUSH_APPKEY_IOS" : { + "des" : "[iOS]极光portal配置应用信息时分配的AppKey", + "key" : "JCore:APP_KEY", + "value" : "daebe19b547c43128796a078" + }, + "JPUSH_CHANNEL_IOS" : { + "des" : "[iOS]用于统计分发渠道,不需要可填默认值developer-default", + "key" : "JCore:CHANNEL", + "value" : "" + }, + "JPUSH_APPKEY_ANDROID" : { + "des" : "[Android]极光portal配置应用信息时分配的AppKey", + "key" : "JPUSH_APPKEY", + "value" : "" + }, + "JPUSH_CHANNEL_ANDROID" : { + "des" : "[Android]用于统计分发渠道,不需要可填默认值developer-default", + "key" : "JPUSH_CHANNEL", + "value" : "" + } + } + } + }, + "JG-JPush" : { + "JPUSH_ISPRODUCTION_IOS" : "true", + "JPUSH_ADVERTISINGID_IOS" : "", + "JPUSH_DEFAULTINITJPUSH_IOS" : "true", + "JPUSH_OPPO_APPKEY" : "", + "JPUSH_OPPO_APPID" : "", + "JPUSH_OPPO_APPSECRET" : "", + "JPUSH_VIVO_APPKEY" : "", + "JPUSH_VIVO_APPID" : "", + "JPUSH_MEIZU_APPKEY" : "", + "JPUSH_MEIZU_APPID" : "", + "JPUSH_XIAOMI_APPKEY" : "", + "JPUSH_XIAOMI_APPID" : "", + "__plugin_info__" : { + "name" : "JG-JPush", + "description" : "极光推送Hbuilder插件", + "platforms" : "Android,iOS", + "url" : "", + "android_package_name" : "uni.UNI3A527D1", + "ios_bundle_id" : "", + "isCloud" : false, + "bought" : -1, + "pid" : "", + "parameters" : { + "JPUSH_ISPRODUCTION_IOS" : { + "des" : "[iOS]是否是生产环境,是填true,不是填false或者不填", + "key" : "JPush:ISPRODUCTION", + "value" : "" + }, + "JPUSH_ADVERTISINGID_IOS" : { + "des" : "[iOS]广告标识符(IDFA)如果不需要使用IDFA,可不填", + "key" : "JPush:ADVERTISINGID", + "value" : "" + }, + "JPUSH_DEFAULTINITJPUSH_IOS" : { + "des" : "[iOS]是否默认初始化,是填true,不是填false或者不填", + "key" : "JPush:DEFAULTINITJPUSH", + "value" : "" + }, + "JPUSH_OPPO_APPKEY" : { + "des" : "厂商OPPO-appkey,示例:OP-12345678", + "key" : "OPPO_APPKEY", + "value" : "" + }, + "JPUSH_OPPO_APPID" : { + "des" : "厂商OPPO-appId,示例:OP-12345678", + "key" : "OPPO_APPID", + "value" : "" + }, + "JPUSH_OPPO_APPSECRET" : { + "des" : "厂商OPPO-appSecret,示例:OP-12345678", + "key" : "OPPO_APPSECRET", + "value" : "" + }, + "JPUSH_VIVO_APPKEY" : { + "des" : "厂商VIVO-appkey,示例:12345678", + "key" : "com.vivo.push.api_key", + "value" : "" + }, + "JPUSH_VIVO_APPID" : { + "des" : "厂商VIVO-appId,示例:12345678", + "key" : "com.vivo.push.app_id", + "value" : "" + }, + "JPUSH_MEIZU_APPKEY" : { + "des" : "厂商MEIZU-appKey,示例:MZ-12345678", + "key" : "MEIZU_APPKEY", + "value" : "" + }, + "JPUSH_MEIZU_APPID" : { + "des" : "厂商MEIZU-appId,示例:MZ-12345678", + "key" : "MEIZU_APPID", + "value" : "" + }, + "JPUSH_XIAOMI_APPKEY" : { + "des" : "厂商XIAOMI-appKey,示例:MI-12345678", + "key" : "XIAOMI_APPKEY", + "value" : "" + }, + "JPUSH_XIAOMI_APPID" : { + "des" : "厂商XIAOMI-appId,示例:MI-12345678", + "key" : "XIAOMI_APPID", + "value" : "" + } + } + } + } } }, /* 快应用特有相关 */ diff --git a/nativeplugins/JG-JCore/android/libs/arm64-v8a/libjcore420.so b/nativeplugins/JG-JCore/android/libs/arm64-v8a/libjcore420.so new file mode 100644 index 0000000..8d35b04 Binary files /dev/null and b/nativeplugins/JG-JCore/android/libs/arm64-v8a/libjcore420.so differ diff --git a/nativeplugins/JG-JCore/android/libs/armeabi-v7a/libjcore420.so b/nativeplugins/JG-JCore/android/libs/armeabi-v7a/libjcore420.so new file mode 100644 index 0000000..a642a0a Binary files /dev/null and b/nativeplugins/JG-JCore/android/libs/armeabi-v7a/libjcore420.so differ diff --git a/nativeplugins/JG-JCore/android/libs/armeabi/libjcore420.so b/nativeplugins/JG-JCore/android/libs/armeabi/libjcore420.so new file mode 100644 index 0000000..c8d4785 Binary files /dev/null and b/nativeplugins/JG-JCore/android/libs/armeabi/libjcore420.so differ diff --git a/nativeplugins/JG-JCore/android/libs/jcore-android-4.2.0.jar b/nativeplugins/JG-JCore/android/libs/jcore-android-4.2.0.jar new file mode 100644 index 0000000..b886968 Binary files /dev/null and b/nativeplugins/JG-JCore/android/libs/jcore-android-4.2.0.jar differ diff --git a/nativeplugins/JG-JCore/android/libs/mips/libjcore420.so b/nativeplugins/JG-JCore/android/libs/mips/libjcore420.so new file mode 100644 index 0000000..6e1d6f0 Binary files /dev/null and b/nativeplugins/JG-JCore/android/libs/mips/libjcore420.so differ diff --git a/nativeplugins/JG-JCore/android/libs/mips64/libjcore420.so b/nativeplugins/JG-JCore/android/libs/mips64/libjcore420.so new file mode 100644 index 0000000..9a88bf3 Binary files /dev/null and b/nativeplugins/JG-JCore/android/libs/mips64/libjcore420.so differ diff --git a/nativeplugins/JG-JCore/android/libs/x86/libjcore420.so b/nativeplugins/JG-JCore/android/libs/x86/libjcore420.so new file mode 100644 index 0000000..49f562c Binary files /dev/null and b/nativeplugins/JG-JCore/android/libs/x86/libjcore420.so differ diff --git a/nativeplugins/JG-JCore/android/libs/x86_64/libjcore420.so b/nativeplugins/JG-JCore/android/libs/x86_64/libjcore420.so new file mode 100644 index 0000000..eea298e Binary files /dev/null and b/nativeplugins/JG-JCore/android/libs/x86_64/libjcore420.so differ diff --git a/nativeplugins/JG-JCore/android/uniplugin_jcore-release.aar b/nativeplugins/JG-JCore/android/uniplugin_jcore-release.aar new file mode 100644 index 0000000..6e023e9 Binary files /dev/null and b/nativeplugins/JG-JCore/android/uniplugin_jcore-release.aar differ diff --git a/nativeplugins/JG-JCore/ios/JGInforCollectionAuth.h b/nativeplugins/JG-JCore/ios/JGInforCollectionAuth.h new file mode 100644 index 0000000..1a378b8 --- /dev/null +++ b/nativeplugins/JG-JCore/ios/JGInforCollectionAuth.h @@ -0,0 +1,27 @@ +// +// JGInforCollectionAuth.h +// JCore +// +// Created by 豆瓣 on 2021/10/27. +// Copyright © 2021 jiguang. All rights reserved. +// + +#import <Foundation/Foundation.h> + +NS_ASSUME_NONNULL_BEGIN + +/// 合规接口,是否授权极光采集一定的设备信息 +@interface JGInforCollectionAuthItems : NSObject +/// 是否授权,默认YES +@property(nonatomic,assign)BOOL isAuth; +@end + +@interface JGInforCollectionAuth : NSObject + +/// 设备信息采集授权接口(合规接口) +/// 请务必在调用初始化、功能性接口前调用此接口进行合规授权 +/// @param authBlock auth:YES 则极光认为您同意极光采集一定的设备信息 ++(void)JCollectionAuth:(void(^_Nullable)(JGInforCollectionAuthItems *authInfo))authBlock; +@end + +NS_ASSUME_NONNULL_END diff --git a/nativeplugins/JG-JCore/ios/UniPluginJCore.framework/Headers/JCoreModule.h b/nativeplugins/JG-JCore/ios/UniPluginJCore.framework/Headers/JCoreModule.h new file mode 100644 index 0000000..630b42d --- /dev/null +++ b/nativeplugins/JG-JCore/ios/UniPluginJCore.framework/Headers/JCoreModule.h @@ -0,0 +1,17 @@ +// +// JCoreModule.h +// UniPluginJCore +// +// Created by huangshuni on 2021/1/21. +// + +#import <Foundation/Foundation.h> +#import "DCUniModule.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface JCoreModule : DCUniModule + +@end + +NS_ASSUME_NONNULL_END diff --git a/nativeplugins/JG-JCore/ios/UniPluginJCore.framework/Info.plist b/nativeplugins/JG-JCore/ios/UniPluginJCore.framework/Info.plist new file mode 100644 index 0000000..bec1b75 Binary files /dev/null and b/nativeplugins/JG-JCore/ios/UniPluginJCore.framework/Info.plist differ diff --git a/nativeplugins/JG-JCore/ios/UniPluginJCore.framework/UniPluginJCore b/nativeplugins/JG-JCore/ios/UniPluginJCore.framework/UniPluginJCore new file mode 100644 index 0000000..ed03bbf Binary files /dev/null and b/nativeplugins/JG-JCore/ios/UniPluginJCore.framework/UniPluginJCore differ diff --git a/nativeplugins/JG-JCore/ios/UniPluginJCore.framework/_CodeSignature/CodeDirectory b/nativeplugins/JG-JCore/ios/UniPluginJCore.framework/_CodeSignature/CodeDirectory new file mode 100644 index 0000000..f85a079 Binary files /dev/null and b/nativeplugins/JG-JCore/ios/UniPluginJCore.framework/_CodeSignature/CodeDirectory differ diff --git a/nativeplugins/JG-JCore/ios/UniPluginJCore.framework/_CodeSignature/CodeRequirements b/nativeplugins/JG-JCore/ios/UniPluginJCore.framework/_CodeSignature/CodeRequirements new file mode 100644 index 0000000..25365e2 Binary files /dev/null and b/nativeplugins/JG-JCore/ios/UniPluginJCore.framework/_CodeSignature/CodeRequirements differ diff --git a/nativeplugins/JG-JCore/ios/UniPluginJCore.framework/_CodeSignature/CodeRequirements-1 b/nativeplugins/JG-JCore/ios/UniPluginJCore.framework/_CodeSignature/CodeRequirements-1 new file mode 100644 index 0000000..7972195 Binary files /dev/null and b/nativeplugins/JG-JCore/ios/UniPluginJCore.framework/_CodeSignature/CodeRequirements-1 differ diff --git a/nativeplugins/JG-JCore/ios/UniPluginJCore.framework/_CodeSignature/CodeResources b/nativeplugins/JG-JCore/ios/UniPluginJCore.framework/_CodeSignature/CodeResources new file mode 100644 index 0000000..ec357ae --- /dev/null +++ b/nativeplugins/JG-JCore/ios/UniPluginJCore.framework/_CodeSignature/CodeResources @@ -0,0 +1,117 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>files</key> + <dict> + <key>Headers/JCoreModule.h</key> + <data> + 4aMcBALZuuQeh2JQjJqqvSkc2mA= + </data> + <key>Info.plist</key> + <data> + 06+wBVr403G+lX5fr/4efqHMj2A= + </data> + </dict> + <key>files2</key> + <dict> + <key>Headers/JCoreModule.h</key> + <dict> + <key>hash</key> + <data> + 4aMcBALZuuQeh2JQjJqqvSkc2mA= + </data> + <key>hash2</key> + <data> + h/0w2CaU3JBhKI3Pp4EiSWqLf/ZY1Ju+5+tBAdowZ5k= + </data> + </dict> + </dict> + <key>rules</key> + <dict> + <key>^.*</key> + <true/> + <key>^.*\.lproj/</key> + <dict> + <key>optional</key> + <true/> + <key>weight</key> + <real>1000</real> + </dict> + <key>^.*\.lproj/locversion.plist$</key> + <dict> + <key>omit</key> + <true/> + <key>weight</key> + <real>1100</real> + </dict> + <key>^Base\.lproj/</key> + <dict> + <key>weight</key> + <real>1010</real> + </dict> + <key>^version.plist$</key> + <true/> + </dict> + <key>rules2</key> + <dict> + <key>.*\.dSYM($|/)</key> + <dict> + <key>weight</key> + <real>11</real> + </dict> + <key>^(.*/)?\.DS_Store$</key> + <dict> + <key>omit</key> + <true/> + <key>weight</key> + <real>2000</real> + </dict> + <key>^.*</key> + <true/> + <key>^.*\.lproj/</key> + <dict> + <key>optional</key> + <true/> + <key>weight</key> + <real>1000</real> + </dict> + <key>^.*\.lproj/locversion.plist$</key> + <dict> + <key>omit</key> + <true/> + <key>weight</key> + <real>1100</real> + </dict> + <key>^Base\.lproj/</key> + <dict> + <key>weight</key> + <real>1010</real> + </dict> + <key>^Info\.plist$</key> + <dict> + <key>omit</key> + <true/> + <key>weight</key> + <real>20</real> + </dict> + <key>^PkgInfo$</key> + <dict> + <key>omit</key> + <true/> + <key>weight</key> + <real>20</real> + </dict> + <key>^embedded\.provisionprofile$</key> + <dict> + <key>weight</key> + <real>20</real> + </dict> + <key>^version\.plist$</key> + <dict> + <key>weight</key> + <real>20</real> + </dict> + </dict> +</dict> +</plist> diff --git a/nativeplugins/JG-JCore/ios/UniPluginJCore.framework/_CodeSignature/CodeSignature b/nativeplugins/JG-JCore/ios/UniPluginJCore.framework/_CodeSignature/CodeSignature new file mode 100644 index 0000000..881600a Binary files /dev/null and b/nativeplugins/JG-JCore/ios/UniPluginJCore.framework/_CodeSignature/CodeSignature differ diff --git a/nativeplugins/JG-JCore/ios/jcore-ios-4.2.0.a b/nativeplugins/JG-JCore/ios/jcore-ios-4.2.0.a new file mode 100644 index 0000000..1dbe1e4 Binary files /dev/null and b/nativeplugins/JG-JCore/ios/jcore-ios-4.2.0.a differ diff --git a/nativeplugins/JG-JCore/package.json b/nativeplugins/JG-JCore/package.json new file mode 100644 index 0000000..7fcfe0b --- /dev/null +++ b/nativeplugins/JG-JCore/package.json @@ -0,0 +1,61 @@ +{ + "name": "JG-JCore", + "id": "JG-JCore", + "version": "1.1.3", + "description": "极光推送JCore插件", + "_dp_type":"nativeplugin", + "_dp_nativeplugin":{ + "ios": { + "plugins": [ + { + "type": "module", + "name": "JG-JCore", + "class": "JCoreModule" + } + ], + "integrateType": "framework", + "deploymentTarget": "11.0", + "validArchitectures": [ + "arm64" + ], + "parameters": { + "JPUSH_APPKEY_IOS": { + "des": "[iOS]极光portal配置应用信息时分配的AppKey", + "key": "JCore:APP_KEY" + }, + "JPUSH_CHANNEL_IOS": { + "des": "[iOS]用于统计分发渠道,不需要可填默认值developer-default", + "key": "JCore:CHANNEL" + } + } + }, + "android": { + "plugins": [ + { + "type": "module", + "name": "JG-JCore", + "class": "cn.jiguang.uniplugin_jcore.JCoreModule" + } + ], + "integrateType": "aar", + "minSdkVersion": "19", + "permissions": [ + ], + "abis": [ + "armeabi-v7a", + "arm64-v8a", + "x86" + ], + "parameters": { + "JPUSH_APPKEY_ANDROID": { + "des": "[Android]极光portal配置应用信息时分配的AppKey", + "key": "JPUSH_APPKEY" + }, + "JPUSH_CHANNEL_ANDROID":{ + "des": "[Android]用于统计分发渠道,不需要可填默认值developer-default", + "key": "JPUSH_CHANNEL" + } + } + } + } +} diff --git a/nativeplugins/JG-JPush/android/com.heytap.msp-push-2.1.0.aar b/nativeplugins/JG-JPush/android/com.heytap.msp-push-2.1.0.aar new file mode 100644 index 0000000..608aced Binary files /dev/null and b/nativeplugins/JG-JPush/android/com.heytap.msp-push-2.1.0.aar differ diff --git a/nativeplugins/JG-JPush/android/libs/MiPush_SDK_Client_3_8_5.jar b/nativeplugins/JG-JPush/android/libs/MiPush_SDK_Client_3_8_5.jar new file mode 100644 index 0000000..7f94935 Binary files /dev/null and b/nativeplugins/JG-JPush/android/libs/MiPush_SDK_Client_3_8_5.jar differ diff --git a/nativeplugins/JG-JPush/android/libs/jpush-android-3.9.1.jar b/nativeplugins/JG-JPush/android/libs/jpush-android-3.9.1.jar new file mode 100644 index 0000000..b9d13f3 Binary files /dev/null and b/nativeplugins/JG-JPush/android/libs/jpush-android-3.9.1.jar differ diff --git a/nativeplugins/JG-JPush/android/libs/jpush-android-plugin-meizu-v3.9.1.jar b/nativeplugins/JG-JPush/android/libs/jpush-android-plugin-meizu-v3.9.1.jar new file mode 100644 index 0000000..88475eb Binary files /dev/null and b/nativeplugins/JG-JPush/android/libs/jpush-android-plugin-meizu-v3.9.1.jar differ diff --git a/nativeplugins/JG-JPush/android/libs/jpush-android-plugin-oppo-v3.9.1.jar b/nativeplugins/JG-JPush/android/libs/jpush-android-plugin-oppo-v3.9.1.jar new file mode 100644 index 0000000..291d237 Binary files /dev/null and b/nativeplugins/JG-JPush/android/libs/jpush-android-plugin-oppo-v3.9.1.jar differ diff --git a/nativeplugins/JG-JPush/android/libs/jpush-android-plugin-vivo-v3.9.1.jar b/nativeplugins/JG-JPush/android/libs/jpush-android-plugin-vivo-v3.9.1.jar new file mode 100644 index 0000000..d544255 Binary files /dev/null and b/nativeplugins/JG-JPush/android/libs/jpush-android-plugin-vivo-v3.9.1.jar differ diff --git a/nativeplugins/JG-JPush/android/libs/jpush-android-plugin-xiaomi-v3.9.1.jar b/nativeplugins/JG-JPush/android/libs/jpush-android-plugin-xiaomi-v3.9.1.jar new file mode 100644 index 0000000..1d0f401 Binary files /dev/null and b/nativeplugins/JG-JPush/android/libs/jpush-android-plugin-xiaomi-v3.9.1.jar differ diff --git a/nativeplugins/JG-JPush/android/libs/meizu-push-4.0.2.jar b/nativeplugins/JG-JPush/android/libs/meizu-push-4.0.2.jar new file mode 100644 index 0000000..740e7c5 Binary files /dev/null and b/nativeplugins/JG-JPush/android/libs/meizu-push-4.0.2.jar differ diff --git a/nativeplugins/JG-JPush/android/libs/push_sdk_v3.0.0.jar b/nativeplugins/JG-JPush/android/libs/push_sdk_v3.0.0.jar new file mode 100644 index 0000000..9c87567 Binary files /dev/null and b/nativeplugins/JG-JPush/android/libs/push_sdk_v3.0.0.jar differ diff --git a/nativeplugins/JG-JPush/android/uniplugin_jpush-release.aar b/nativeplugins/JG-JPush/android/uniplugin_jpush-release.aar new file mode 100644 index 0000000..22f9507 Binary files /dev/null and b/nativeplugins/JG-JPush/android/uniplugin_jpush-release.aar differ diff --git a/nativeplugins/JG-JPush/ios/JPUSHService.h b/nativeplugins/JG-JPush/ios/JPUSHService.h new file mode 100644 index 0000000..dd469aa --- /dev/null +++ b/nativeplugins/JG-JPush/ios/JPUSHService.h @@ -0,0 +1,798 @@ +/* + * | | | | \ \ / / | | | | / _______| + * | |____| | \ \/ / | |____| | / / + * | |____| | \ / | |____| | | | _____ + * | | | | / \ | | | | | | |____ | + * | | | | / /\ \ | | | | \ \______| | + * | | | | /_/ \_\ | | | | \_________| + * + * Copyright (c) 2011 ~ 2017 Shenzhen HXHG. All rights reserved. + */ + +#define JPUSH_VERSION_NUMBER 3.4.0 + +#import <Foundation/Foundation.h> + +@class CLRegion; +@class UILocalNotification; +@class CLLocation; +@class UNNotificationCategory; +@class UNNotificationSettings; +@class UNNotificationRequest; +@class UNNotification; +@protocol JPUSHRegisterDelegate; +@protocol JPUSHGeofenceDelegate; +@protocol JPushInMessageDelegate; + +typedef void (^JPUSHTagsOperationCompletion)(NSInteger iResCode, NSSet *iTags, NSInteger seq); +typedef void (^JPUSHTagValidOperationCompletion)(NSInteger iResCode, NSSet *iTags, NSInteger seq, BOOL isBind); +typedef void (^JPUSHAliasOperationCompletion)(NSInteger iResCode, NSString *iAlias, NSInteger seq); +typedef void (^JPUSHInMssageCompletion)(NSInteger iResCode); + +extern NSString *const kJPFNetworkIsConnectingNotification; // 正在连接中 +extern NSString *const kJPFNetworkDidSetupNotification; // 建立连接 +extern NSString *const kJPFNetworkDidCloseNotification; // 关闭连接 +extern NSString *const kJPFNetworkDidRegisterNotification; // 注册成功 +extern NSString *const kJPFNetworkFailedRegisterNotification; //注册失败 +extern NSString *const kJPFNetworkDidLoginNotification; // 登录成功 +extern NSString *const kJPFNetworkDidReceiveMessageNotification; // 收到消息(非APNS) +extern NSString *const kJPFServiceErrorNotification; // 错误提示 + +typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) { + JPAuthorizationOptionNone = 0, // the application may not present any UI upon a notification being received + JPAuthorizationOptionBadge = (1 << 0), // the application may badge its icon upon a notification being received + JPAuthorizationOptionSound = (1 << 1), // the application may play a sound upon a notification being received + JPAuthorizationOptionAlert = (1 << 2), // the application may display an alert upon a notification being received + JPAuthorizationOptionCarPlay = (1 << 3), // The ability to display notifications in a CarPlay environment. + JPAuthorizationOptionCriticalAlert NS_AVAILABLE_IOS(12.0) = (1 << 4) , //The ability to play sounds for critical alerts. + JPAuthorizationOptionProvidesAppNotificationSettings NS_AVAILABLE_IOS(12.0) = (1 << 5) , //An option indicating the system should display a button for in-app notification settings. + JPAuthorizationOptionProvisional NS_AVAILABLE_IOS(12.0) = (1 << 6) , //The ability to post noninterrupting notifications provisionally to the Notification Center. + JPAuthorizationOptionAnnouncement NS_AVAILABLE_IOS(13.0) = (1 << 7) , //The ability for Siri to automatically read out messages over AirPods. +}; + +typedef NS_ENUM(NSUInteger, JPAuthorizationStatus) { + JPAuthorizationNotDetermined = 0, // The user has not yet made a choice regarding whether the application may post user notifications. + JPAuthorizationStatusDenied, // The application is not authorized to post user notifications. + JPAuthorizationStatusAuthorized, // The application is authorized to post user notifications. + JPAuthorizationStatusProvisional NS_AVAILABLE_IOS(12.0), // The application is authorized to post non-interruptive user notifications. +}; + +typedef NS_ENUM(NSInteger,JPushInMessageContentType){ + JPushAdContentType = 1, //广告类型的inMessage + JPushNotiContentType = 2, //通知类型的inMessage +}; + +/*! + * 通知注册实体类 + */ +@interface JPUSHRegisterEntity : NSObject + +/*! + * 支持的类型 + * badge,sound,alert + */ +@property (nonatomic, assign) NSInteger types; +/*! + * 注入的类别 + * iOS10 UNNotificationCategory + * iOS8-iOS9 UIUserNotificationCategory + */ +@property (nonatomic, strong) NSSet *categories; +@end + +/*! + * 进行删除、查找推送实体类 + */ +@interface JPushNotificationIdentifier : NSObject<NSCopying, NSCoding> + +@property (nonatomic, copy) NSArray<NSString *> *identifiers; // 推送的标识数组 +@property (nonatomic, copy) UILocalNotification *notificationObj NS_DEPRECATED_IOS(4_0, 10_0); // iOS10以下可以传UILocalNotification对象数据,iOS10以上无效 +@property (nonatomic, assign) BOOL delivered NS_AVAILABLE_IOS(10_0); // 在通知中心显示的或待推送的标志,默认为NO,YES表示在通知中心显示的,NO表示待推送的 +@property (nonatomic, copy) void (^findCompletionHandler)(NSArray *results); // 用于查询回调,调用[findNotification:]方法前必须设置,results为返回相应对象数组,iOS10以下返回UILocalNotification对象数组;iOS10以上根据delivered传入值返回UNNotification或UNNotificationRequest对象数组(delivered传入YES,则返回UNNotification对象数组,否则返回UNNotificationRequest对象数组) + +@end + +/*! + * 推送通知声音实体类 + * iOS10以上有效 + */ +@interface JPushNotificationSound : NSObject <NSCopying, NSCoding> +@property (nonatomic, copy) NSString *soundName; //普通通知铃声 +@property (nonatomic, copy) NSString *criticalSoundName NS_AVAILABLE_IOS(12.0); //警告通知铃声 +@property (nonatomic, assign) float criticalSoundVolume NS_AVAILABLE_IOS(12.0); //警告通知铃声音量,有效值在0~1之间,默认为1 +@end + + +/*! + * 推送内容实体类 + */ +@interface JPushNotificationContent : NSObject<NSCopying, NSCoding> + +@property (nonatomic, copy) NSString *title; // 推送标题 +@property (nonatomic, copy) NSString *subtitle; // 推送副标题 +@property (nonatomic, copy) NSString *body; // 推送内容 +@property (nonatomic, copy) NSNumber *badge; // 角标的数字。如果不需要改变角标传@(-1) +@property (nonatomic, copy) NSString *action NS_DEPRECATED_IOS(8_0, 10_0); // 弹框的按钮显示的内容(IOS 8默认为"打开", 其他默认为"启动",iOS10以上无效) +@property (nonatomic, copy) NSString *categoryIdentifier; // 行为分类标识 +@property (nonatomic, copy) NSDictionary *userInfo; // 本地推送时可以设置userInfo来增加附加信息,远程推送时设置的payload推送内容作为此userInfo +@property (nonatomic, copy) NSString *sound; // 声音名称,不设置则为默认声音 +@property (nonatomic, copy) JPushNotificationSound *soundSetting NS_AVAILABLE_IOS(10.0); //推送声音实体 +@property (nonatomic, copy) NSArray *attachments NS_AVAILABLE_IOS(10_0); // 附件,iOS10以上有效,需要传入UNNotificationAttachment对象数组类型 +@property (nonatomic, copy) NSString *threadIdentifier NS_AVAILABLE_IOS(10_0); // 线程或与推送请求相关对话的标识,iOS10以上有效,可用来对推送进行分组 +@property (nonatomic, copy) NSString *launchImageName NS_AVAILABLE_IOS(10_0); // 启动图片名,iOS10以上有效,从推送启动时将会用到 +@property (nonatomic, copy) NSString *summaryArgument NS_AVAILABLE_IOS(12.0); //插入到通知摘要中的部分参数。iOS12以上有效。 +@property (nonatomic, assign) NSUInteger summaryArgumentCount NS_AVAILABLE_IOS(12.0); //插入到通知摘要中的项目数。iOS12以上有效。 +@property (nonatomic, copy) NSString *targetContentIdentifier NS_AVAILABLE_IOS(13.0); // An identifier for the content of the notification used by the system to customize the scene to be activated when tapping on a notification. + +@end + + +/*! + * 推送触发方式实体类 + * 注:dateComponents、timeInterval、region在iOS10以上可选择其中一个参数传入有效值,如果同时传入值会根据优先级I、II、III使其中一种触发方式生效,fireDate为iOS10以下根据时间触发时须传入的参数 + */ +@interface JPushNotificationTrigger : NSObject<NSCopying, NSCoding> + +@property (nonatomic, assign) BOOL repeat; // 设置是否重复,默认为NO +@property (nonatomic, copy) NSDate *fireDate NS_DEPRECATED_IOS(2_0, 10_0); // 用来设置触发推送的时间,iOS10以上无效 +@property (nonatomic, copy) CLRegion *region NS_AVAILABLE_IOS(8_0); // 用来设置触发推送的位置,iOS8以上有效,iOS10以上优先级为I,应用需要有允许使用定位的授权 +@property (nonatomic, copy) NSDateComponents *dateComponents NS_AVAILABLE_IOS(10_0); // 用来设置触发推送的日期时间,iOS10以上有效,优先级为II +@property (nonatomic, assign) NSTimeInterval timeInterval NS_AVAILABLE_IOS(10_0); // 用来设置触发推送的时间,iOS10以上有效,优先级为III + +@end + +/*! + * 注册或更新推送实体类 + */ +@interface JPushNotificationRequest : NSObject<NSCopying, NSCoding> + +@property (nonatomic, copy) NSString *requestIdentifier; // 推送请求标识 +@property (nonatomic, copy) JPushNotificationContent *content; // 设置推送的具体内容 +@property (nonatomic, copy) JPushNotificationTrigger *trigger; // 设置推送的触发方式 +@property (nonatomic, copy) void (^completionHandler)(id result); // 注册或更新推送成功回调,iOS10以上成功则result为UNNotificationRequest对象,失败则result为nil;iOS10以下成功result为UILocalNotification对象,失败则result为nil + +@end + +/*! + * JPush 核心头文件 + */ +@interface JPUSHService : NSObject + + +///---------------------------------------------------- +/// @name Setup 启动相关 +///---------------------------------------------------- + + +/*! + * @abstract 启动SDK + * + * @param launchingOption 启动参数. + * @param appKey 一个JPush 应用必须的,唯一的标识. 请参考 JPush 相关说明文档来获取这个标识. + * @param channel 发布渠道. 可选. + * @param isProduction 是否生产环境. 如果为开发状态,设置为 NO; 如果为生产状态,应改为 YES. + * App 证书环境取决于profile provision的配置,此处建议与证书环境保持一致. + * + * @discussion 提供SDK启动必须的参数, 来启动 SDK. + * 此接口必须在 App 启动时调用, 否则 JPush SDK 将无法正常工作. + */ ++ (void)setupWithOption:(NSDictionary *)launchingOption + appKey:(NSString *)appKey + channel:(NSString *)channel + apsForProduction:(BOOL)isProduction; + +/*! + * @abstract 启动SDK + * + * @param launchingOption 启动参数. + * @param appKey 一个JPush 应用必须的,唯一的标识. 请参考 JPush 相关说明文档来获取这个标识. + * @param channel 发布渠道. 可选. + * @param isProduction 是否生产环境. 如果为开发状态,设置为 NO; 如果为生产状态,应改为 YES. + * App 证书环境取决于profile provision的配置,此处建议与证书环境保持一致. + * @param advertisingId 广告标识符(IDFA) 如果不需要使用IDFA,传nil. + * + * @discussion 提供SDK启动必须的参数, 来启动 SDK. + * 此接口必须在 App 启动时调用, 否则 JPush SDK 将无法正常工作. + */ ++ (void)setupWithOption:(NSDictionary *)launchingOption + appKey:(NSString *)appKey + channel:(NSString *)channel + apsForProduction:(BOOL)isProduction + advertisingIdentifier:(NSString *)advertisingId; + + +///---------------------------------------------------- +/// @name APNs about 通知相关 +///---------------------------------------------------- + +/*! + * @abstract 注册要处理的远程通知类型 + * + * @param types 通知类型 + * @param categories 类别组 + * + */ ++ (void)registerForRemoteNotificationTypes:(NSUInteger)types + categories:(NSSet *)categories; +/*! + * @abstract 新版本的注册方法(兼容iOS10) + * + * @param config 注册通知配置 + * @param delegate 代理 + * + */ ++ (void)registerForRemoteNotificationConfig:(JPUSHRegisterEntity *)config delegate:(id<JPUSHRegisterDelegate>)delegate; + + ++ (void)registerDeviceToken:(NSData *)deviceToken; + +/*! + * @abstract 处理收到的 APNs 消息 + */ ++ (void)handleRemoteNotification:(NSDictionary *)remoteInfo; + +/*! + * @abstract 向极光服务器提交Token + * + * @param voipToken 推送使用的Voip Token + */ ++ (void)registerVoipToken:(NSData *)voipToken; + + +/*! + * @abstract 处理收到的 Voip 消息 + * + * @param remoteInfo 下发的 Voip 内容 + */ ++ (void)handleVoipNotification:(NSDictionary *)remoteInfo; + + +/*! +* @abstract 检测通知授权状态 +* @param completion 授权结果通过status值返回,详见JPAuthorizationStatus +*/ ++ (void)requestNotificationAuthorization:(void (^)(JPAuthorizationStatus status))completion; + +/*! +* @abstract 跳转至系统设置页面,iOS8及以上有效 +*/ ++ (void)openSettingsForNotification:(void (^)(BOOL success))completionHandler NS_AVAILABLE_IOS(8_0); + +/*! + * Tags操作接口 + * 支持增加/覆盖/删除/清空/查询操作 + * 详情请参考文档:https://docs.jiguang.cn/jpush/client/iOS/ios_api/) + */ + +/** + 增加tags + + @param tags 需要增加的tags集合 + @param completion 响应回调 + @param seq 请求序列号 + */ ++ (void)addTags:(NSSet<NSString *> *)tags + completion:(JPUSHTagsOperationCompletion)completion + seq:(NSInteger)seq; + +/** + 覆盖tags + 调用该接口会覆盖用户所有的tags + + @param tags 需要设置的tags集合 + @param completion 响应回调 + @param seq 请求序列号 + */ ++ (void)setTags:(NSSet<NSString *> *)tags + completion:(JPUSHTagsOperationCompletion)completion + seq:(NSInteger)seq; + +/** + 删除指定tags + + @param tags 需要删除的tags集合 + @param completion 响应回调 + @param seq 请求序列号 + */ ++ (void)deleteTags:(NSSet<NSString *> *)tags + completion:(JPUSHTagsOperationCompletion)completion + seq:(NSInteger)seq; + +/** + 清空所有tags + @param completion 响应回调 + @param seq 请求序列号 + */ ++ (void)cleanTags:(JPUSHTagsOperationCompletion)completion + seq:(NSInteger)seq; + +/** + 查询全部tags + + @param completion 响应回调,请在回调中获取查询结果 + @param seq 请求序列号 + */ ++ (void)getAllTags:(JPUSHTagsOperationCompletion)completion + seq:(NSInteger)seq; + +/** + 验证tag是否绑定 + + @param completion 响应回调,回调中查看是否绑定 + @param seq 请求序列号 + */ ++ (void)validTag:(NSString *)tag + completion:(JPUSHTagValidOperationCompletion)completion + seq:(NSInteger)seq; + +/** + 设置Alias + + @param alias 需要设置的alias + @param completion 响应回调 + @param seq 请求序列号 + */ ++ (void)setAlias:(NSString *)alias + completion:(JPUSHAliasOperationCompletion)completion + seq:(NSInteger)seq; + +/** + 删除alias + + @param completion 响应回调 + @param seq 请求序列号 + */ ++ (void)deleteAlias:(JPUSHAliasOperationCompletion)completion + seq:(NSInteger)seq; + +/** + 查询当前alias + + @param completion 响应回调 + @param seq 请求序列号 + */ ++ (void)getAlias:(JPUSHAliasOperationCompletion)completion + seq:(NSInteger)seq; + + +/*! + * @abstract 过滤掉无效的 tags + * + * @discussion 如果 tags 数量超过限制数量, 则返回靠前的有效的 tags. + * 建议设置 tags 前用此接口校验. SDK 内部也会基于此接口来做过滤. + */ ++ (NSSet *)filterValidTags:(NSSet *)tags; + +///---------------------------------------------------- +/// @name Stats 统计功能 +///---------------------------------------------------- + +/*! + * @abstract 开始记录页面停留 + * + * @param pageName 页面名称 + * @discussion JCore 1.1.8 版本后,如需统计页面流,请使用 JAnalytics + */ ++ (void)startLogPageView:(NSString *)pageName __attribute__((deprecated("JCore 1.1.8 版本已过期"))); + +/*! + * @abstract 停止记录页面停留 + * + * @param pageName 页面 + * @discussion JCore 1.1.8 版本后,如需统计页面流,请使用 JAnalytics + */ ++ (void)stopLogPageView:(NSString *)pageName __attribute__((deprecated("JCore 1.1.8 版本已过期"))); + +/*! + * @abstract 直接上报在页面的停留时间 + * + * @param pageName 页面 + * @param seconds 停留的秒数 + * @discussion JCore 1.1.8 版本后,如需统计页面流,请使用 JAnalytics + */ ++ (void)beginLogPageView:(NSString *)pageName duration:(int)seconds __attribute__((deprecated("JCore 1.1.8 版本已过期"))); + +/*! + * @abstract 开启Crash日志收集 + * + * @discussion 默认是关闭状态. + */ ++ (void)crashLogON; + +/*! + * @abstract 地理位置上报 + * + * @param latitude 纬度. + * @param longitude 经度. + * + */ ++ (void)setLatitude:(double)latitude longitude:(double)longitude; + +/*! + * @abstract 地理位置上报 + * + * @param location 直接传递 CLLocation * 型的地理信息 + * + * @discussion 需要链接 CoreLocation.framework 并且 #import <CoreLocation/CoreLocation.h> + */ ++ (void)setLocation:(CLLocation *)location; + +/** + 设置地理围栏的最大个数 + 默认值为 10 ,iOS系统默认地理围栏最大个数为20 + @param count 个数 count + */ ++ (void)setGeofenecMaxCount:(NSInteger)count; +/** + 注册地理围栏的代理 + + @param delegate 代理 + @param launchOptions app启动完成是收到的字段参数 + */ ++ (void)registerLbsGeofenceDelegate:(id<JPUSHGeofenceDelegate>)delegate withLaunchOptions:(NSDictionary *)launchOptions; + +/** + 删除地理围栏 + + @param geofenceId 地理围栏id + */ ++ (void)removeGeofenceWithIdentifier:(NSString *)geofenceId; + +///---------------------------------------------------- +/// @name Local Notification 本地通知 +///---------------------------------------------------- +/*! + * @abstract 注册或更新推送 (支持iOS10,并兼容iOS10以下版本) + * + * JPush 2.1.9新接口 + * @param request JPushNotificationRequest类型,设置推送的属性,设置已有推送的request.requestIdentifier即更新已有的推送,否则为注册新推送,更新推送仅仅在iOS10以上有效,结果通过request.completionHandler返回 + * @discussion 旧的注册本地推送接口被废弃,使用此接口可以替换 + * + */ ++ (void)addNotification:(JPushNotificationRequest *)request; + +/*! + * @abstract 移除推送 (支持iOS10,并兼容iOS10以下版本) + * + * JPush 2.1.9新接口 + * @param identifier JPushNotificationIdentifier类型,iOS10以上identifier设置为nil,则移除所有在通知中心显示推送和待推送请求,也可以通过设置identifier.delivered和identifier.identifiers来移除相应在通知中心显示推送或待推送请求,identifier.identifiers如果设置为nil或空数组则移除相应标志下所有在通知中心显示推送或待推送请求;iOS10以下identifier设置为nil,则移除所有推送,identifier.delivered属性无效,另外可以通过identifier.notificationObj传入特定推送对象来移除此推送。 + * @discussion 旧的所有删除推送接口被废弃,使用此接口可以替换 + * + */ ++ (void)removeNotification:(JPushNotificationIdentifier *)identifier; + +/*! + * @abstract 查找推送 (支持iOS10,并兼容iOS10以下版本) + * + * JPush 2.1.9新接口 + * @param identifier JPushNotificationIdentifier类型,iOS10以上可以通过设置identifier.delivered和identifier.identifiers来查找相应在通知中心显示推送或待推送请求,identifier.identifiers如果设置为nil或空数组则返回相应标志下所有在通知中心显示推送或待推送请求;iOS10以下identifier.delivered属性无效,identifier.identifiers如果设置nil或空数组则返回所有未触发的推送。须要设置identifier.findCompletionHandler回调才能得到查找结果,通过(NSArray *results)返回相应对象数组。 + * @discussion 旧的查找推送接口被废弃,使用此接口可以替换 + * + */ ++ (void)findNotification:(JPushNotificationIdentifier *)identifier; + +/*! + * @abstract 本地推送,最多支持64个 + * + * @param fireDate 本地推送触发的时间 + * @param alertBody 本地推送需要显示的内容 + * @param badge 角标的数字。如果不需要改变角标传-1 + * @param alertAction 弹框的按钮显示的内容(IOS 8默认为"打开", 其他默认为"启动") + * @param notificationKey 本地推送标示符 + * @param userInfo 自定义参数,可以用来标识推送和增加附加信息 + * @param soundName 自定义通知声音,设置为nil为默认声音 + * + * @discussion 最多支持 64 个定义,此方法被[addNotification:]方法取代 + */ ++ (UILocalNotification *)setLocalNotification:(NSDate *)fireDate + alertBody:(NSString *)alertBody + badge:(int)badge + alertAction:(NSString *)alertAction + identifierKey:(NSString *)notificationKey + userInfo:(NSDictionary *)userInfo + soundName:(NSString *)soundName __attribute__((deprecated("JPush 2.1.9 版本已过期"))); + +/*! + * @abstract 本地推送 (支持 iOS8 新参数) + * + * IOS8新参数 + * @param region 自定义参数 + * @param regionTriggersOnce 自定义参数 + * @param category 自定义参数 + * @discussion 此方法被[addNotification:]方法取代 + */ ++ (UILocalNotification *)setLocalNotification:(NSDate *)fireDate + alertBody:(NSString *)alertBody + badge:(int)badge + alertAction:(NSString *)alertAction + identifierKey:(NSString *)notificationKey + userInfo:(NSDictionary *)userInfo + soundName:(NSString *)soundName + region:(CLRegion *)region + regionTriggersOnce:(BOOL)regionTriggersOnce + category:(NSString *)category NS_AVAILABLE_IOS(8_0) __attribute__((deprecated("JPush 2.1.9 版本已过期"))); + +/*! + * @abstract 前台展示本地推送 + * + * @param notification 本地推送对象 + * @param notificationKey 需要前台显示的本地推送通知的标示符 + * + * @discussion 默认App在前台运行时不会进行弹窗,在程序接收通知调用此接口可实现指定的推送弹窗。--iOS10以下还可继续使用,iOS10以上在[UNUserNotificationCenterDelegate willPresentNotification:withCompletionHandler:]方法中调用completionHandler(UNNotificationPresentationOptionSound | UNNotificationPresentationOptionAlert);即可 + */ ++ (void)showLocalNotificationAtFront:(UILocalNotification *)notification + identifierKey:(NSString *)notificationKey __attribute__((deprecated("JPush 2.1.9 版本已过期"))); +/*! + * @abstract 删除本地推送定义 + * + * @param notificationKey 本地推送标示符 + * @discussion 此方法被[removeNotification:]方法取代 + */ ++ (void)deleteLocalNotificationWithIdentifierKey:(NSString *)notificationKey __attribute__((deprecated("JPush 2.1.9 版本已过期"))); + +/*! + * @abstract 删除本地推送定义 + * @discussion 此方法被[removeNotification:]方法取代 + */ ++ (void)deleteLocalNotification:(UILocalNotification *)localNotification __attribute__((deprecated("JPush 2.1.9 版本已过期"))); + +/*! + * @abstract 获取指定通知 + * + * @param notificationKey 本地推送标示符 + * @return 本地推送对象数组, [array count]为0时表示没找到 + * @discussion 此方法被[findNotification:]方法取代 + */ ++ (NSArray *)findLocalNotificationWithIdentifier:(NSString *)notificationKey __attribute__((deprecated("JPush 2.1.9 版本已过期"))); + +/*! + * @abstract 清除所有本地推送对象 + * @discussion 此方法被[removeNotification:]方法取代 + */ ++ (void)clearAllLocalNotifications __attribute__((deprecated("JPush 2.1.9 版本已过期"))); + + +///---------------------------------------------------- +/// @name Server badge 服务器端 badge 功能 +///---------------------------------------------------- + +/*! + * @abstract 设置角标(到服务器) + * + * @param value 新的值. 会覆盖服务器上保存的值(这个用户) + * + * @discussion 本接口不会改变应用本地的角标值. + * 本地仍须调用 UIApplication:setApplicationIconBadgeNumber 函数来设置脚标. + * + * 本接口用于配合 JPush 提供的服务器端角标功能. + * 该功能解决的问题是, 服务器端推送 APNs 时, 并不知道客户端原来已经存在的角标是多少, 指定一个固定的数字不太合理. + * + * JPush 服务器端脚标功能提供: + * + * - 通过本 API 把当前客户端(当前这个用户的) 的实际 badge 设置到服务器端保存起来; + * - 调用服务器端 API 发 APNs 时(通常这个调用是批量针对大量用户), + * 使用 "+1" 的语义, 来表达需要基于目标用户实际的 badge 值(保存的) +1 来下发通知时带上新的 badge 值; + */ ++ (BOOL)setBadge:(NSInteger)value; + +/*! + * @abstract 重置脚标(为0) + * + * @discussion 相当于 [setBadge:0] 的效果. + * 参考 [JPUSHService setBadge:] 说明来理解其作用. + */ ++ (void)resetBadge; + +///---------------------------------------------------- +/// @name Other Feature 其他功能 +///---------------------------------------------------- + +/*! + * @abstract 设置手机号码(到服务器) + * + * @param mobileNumber 手机号码. 会与用户信息一一对应。可为空,为空则清除号码 + * @param completion 响应回调。成功则error为空,失败则error带有错误码及错误信息 + * + * @discussion 设置手机号码后,可实现“推送不到短信到”的通知方式,提高推送达到率。结果信息通过completion异步返回,也可将completion设置为nil不处理结果信息。 + * + */ ++ (void)setMobileNumber:(NSString *)mobileNumber completion:(void (^)(NSError *error))completion; + +///---------------------------------------------------- +/// @name Logs and others 日志与其他 +///---------------------------------------------------- + +/*! + * @abstract JPush标识此设备的 registrationID + * + * @discussion SDK注册成功后, 调用此接口获取到 registrationID 才能够获取到. + * + * JPush 支持根据 registrationID 来进行推送. + * 如果你需要此功能, 应该通过此接口获取到 registrationID 后, 上报到你自己的服务器端, 并保存下来. + * registrationIDCompletionHandler:是新增的获取registrationID的方法,需要在block中获取registrationID,resCode为返回码,模拟器调用此接口resCode返回1011,registrationID返回nil. + * 更多的理解请参考 JPush 的文档网站. + */ ++ (NSString *)registrationID; + ++ (void)registrationIDCompletionHandler:(void(^)(int resCode,NSString *registrationID))completionHandler; + +/*! + * @abstract 打开日志级别到 Debug + * + * @discussion JMessage iOS 的日志系统参考 Android 设计了级别. + * 从低到高是: Verbose, Debug, Info, Warning, Error. + * 对日志级别的进一步理解, 请参考 Android 相关的说明. + * + * SDK 默认开启的日志级别为: Info. 只显示必要的信息, 不打印调试日志. + * + * 请在SDK启动后调用本接口,调用本接口可打开日志级别为: Debug, 打印调试日志. + */ ++ (void)setDebugMode; + +/*! + * @abstract 关闭日志 + * + * @discussion 关于日志级别的说明, 参考 [JPUSHService setDebugMode] + * + * 虽说是关闭日志, 但还是会打印 Warning, Error 日志. 这二种日志级别, 在程序运行正常时, 不应有打印输出. + * + * 建议在发布的版本里, 调用此接口, 关闭掉日志打印. + */ ++ (void)setLogOFF; + +/*! + * @abstract 设置SDK地理位置权限开关 + * + * @discussion 关闭地理位置之后,SDK地理围栏的相关功能将受到影响,默认是开启。 + * + */ ++ (void)setLocationEanable:(BOOL)isEanble; + +/*! +* @abstract 设置应用内消息的代理 +* +* @discussion 遵守JPushInMessageDelegate的代理对象 +* +*/ ++ (void)setInMessageDelegate:(id<JPushInMessageDelegate>)inMessageDelegate; + + +/*! +* @abstract 主动拉取应用内消息的接口 +* +* @discussion 拉取结果的回调 +* +*/ ++ (void)pullInMessageCompletion:(JPUSHInMssageCompletion)completion; + +///---------------------------------------------------- +///********************下列方法已过期******************** +///**************请使用新版tag/alias操作接口************** +///---------------------------------------------------- +/// @name Tag alias setting 设置别名与标签 +///---------------------------------------------------- + +/*! + * 下面的接口是可选的 + * 设置标签和(或)别名(若参数为nil,则忽略;若是空对象,则清空;详情请参考文档:https://docs.jiguang.cn/jpush/client/iOS/ios_api/) + * setTags:alias:fetchCompletionHandle:是新的设置标签别名的方法,不再需要显示声明回调函数,只需要在block里面处理设置结果即可. + * WARN: 使用block时需要注意循环引用问题 + */ ++ (void) setTags:(NSSet *)tags + alias:(NSString *)alias +callbackSelector:(SEL)cbSelector + target:(id)theTarget __attribute__((deprecated("JPush 2.1.1 版本已过期"))); ++ (void) setTags:(NSSet *)tags + alias:(NSString *)alias +callbackSelector:(SEL)cbSelector + object:(id)theTarget __attribute__((deprecated("JPush 3.0.6 版本已过期"))); ++ (void) setTags:(NSSet *)tags +callbackSelector:(SEL)cbSelector + object:(id)theTarget __attribute__((deprecated("JPush 3.0.6 版本已过期"))); ++ (void)setTags:(NSSet *)tags + alias:(NSString *)alias +fetchCompletionHandle:(void (^)(int iResCode, NSSet *iTags, NSString *iAlias))completionHandler __attribute__((deprecated("JPush 3.0.6 版本已过期"))); ++ (void) setTags:(NSSet *)tags +aliasInbackground:(NSString *)alias __attribute__((deprecated("JPush 3.0.6 版本已过期"))); ++ (void)setAlias:(NSString *)alias +callbackSelector:(SEL)cbSelector + object:(id)theTarget __attribute__((deprecated("JPush 3.0.6 版本已过期"))); + +@end + +@class UNUserNotificationCenter; +@class UNNotificationResponse; + +@protocol JPUSHRegisterDelegate <NSObject> + +/* + * @brief handle UserNotifications.framework [willPresentNotification:withCompletionHandler:] + * @param center [UNUserNotificationCenter currentNotificationCenter] 新特性用户通知中心 + * @param notification 前台得到的的通知对象 + * @param completionHandler 该callback中的options 请使用UNNotificationPresentationOptions + */ +- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger options))completionHandler; +/* + * @brief handle UserNotifications.framework [didReceiveNotificationResponse:withCompletionHandler:] + * @param center [UNUserNotificationCenter currentNotificationCenter] 新特性用户通知中心 + * @param response 通知响应对象 + * @param completionHandler + */ +- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler; + +/* + * @brief handle UserNotifications.framework [openSettingsForNotification:] + * @param center [UNUserNotificationCenter currentNotificationCenter] 新特性用户通知中心 + * @param notification 当前管理的通知对象 + */ +- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center openSettingsForNotification:(UNNotification *)notification NS_AVAILABLE_IOS(12.0); + +/** + * 监测通知授权状态返回的结果 + * @param status 授权通知状态,详见JPAuthorizationStatus + * @param info 更多信息,预留参数 + */ +- (void)jpushNotificationAuthorization:(JPAuthorizationStatus)status withInfo:(NSDictionary *)info; + +@end + +@protocol JPUSHGeofenceDelegate <NSObject> + +/** + 进入地理围栏区域 + + @param geofenceId 地理围栏id + @param userInfo 地理围栏触发时返回的信息 + @param error 错误信息 + */ +- (void)jpushGeofenceIdentifer:(NSString *)geofenceId didEnterRegion:(NSDictionary *)userInfo error:(NSError *)error; + +/** + 离开地理围栏区域 + + @param geofenceId 地理围栏id + @param userInfo 地理围栏触发时返回的信息 + @param error 错误信息 + */ +- (void)jpushGeofenceIdentifer:(NSString *)geofenceId didExitRegion:(NSDictionary *)userInfo error:(NSError *)error; + +@end + +@protocol JPushInMessageDelegate <NSObject> + +@optional +/** + *是否允许应用内消息弹出,默认为允许 +*/ +- (BOOL)jPushInMessageIsAllowedInMessagePop; + +/** + *应用内消息展示的回调 +*/ +- (void)jPushInMessageAlreadyPop __attribute__((deprecated("JPush 3.4.0 版本已过期")));; + +/** + *应用内消息已消失 +*/ +- (void)jPushInMessageAlreadyDisappear; + + +/** + inMessage展示的回调 + + @param messageType inMessage + @param content 下发的数据,广告类的返回数据为空时返回的信息 + + */ +- (void)jPushInMessageAlreadyPopInMessageType:(JPushInMessageContentType)messageType Content:(NSDictionary *)content; + +/** + inMessage点击的回调 + + @param messageType inMessage + @param content 下发的数据,广告类的返回数据为空时返回的信息 + + */ +- (void)jpushInMessagedidClickInMessageType:(JPushInMessageContentType)messageType Content:(NSDictionary *)content; + +@end diff --git a/nativeplugins/JG-JPush/ios/UniPluginJPush.framework/Headers/JPushModule.h b/nativeplugins/JG-JPush/ios/UniPluginJPush.framework/Headers/JPushModule.h new file mode 100644 index 0000000..ad03617 --- /dev/null +++ b/nativeplugins/JG-JPush/ios/UniPluginJPush.framework/Headers/JPushModule.h @@ -0,0 +1,17 @@ +// +// JPushModule.h +// UniPluginJPush +// +// Created by huangshuni on 2021/1/12. +// + +#import <Foundation/Foundation.h> +#import "DCUniModule.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface JPushModule : DCUniModule + +@end + +NS_ASSUME_NONNULL_END diff --git a/nativeplugins/JG-JPush/ios/UniPluginJPush.framework/Info.plist b/nativeplugins/JG-JPush/ios/UniPluginJPush.framework/Info.plist new file mode 100644 index 0000000..69a80e2 Binary files /dev/null and b/nativeplugins/JG-JPush/ios/UniPluginJPush.framework/Info.plist differ diff --git a/nativeplugins/JG-JPush/ios/UniPluginJPush.framework/UniPluginJPush b/nativeplugins/JG-JPush/ios/UniPluginJPush.framework/UniPluginJPush new file mode 100644 index 0000000..247e2e7 Binary files /dev/null and b/nativeplugins/JG-JPush/ios/UniPluginJPush.framework/UniPluginJPush differ diff --git a/nativeplugins/JG-JPush/ios/UniPluginJPush.framework/_CodeSignature/CodeDirectory b/nativeplugins/JG-JPush/ios/UniPluginJPush.framework/_CodeSignature/CodeDirectory new file mode 100644 index 0000000..db16dc7 Binary files /dev/null and b/nativeplugins/JG-JPush/ios/UniPluginJPush.framework/_CodeSignature/CodeDirectory differ diff --git a/nativeplugins/JG-JPush/ios/UniPluginJPush.framework/_CodeSignature/CodeRequirements b/nativeplugins/JG-JPush/ios/UniPluginJPush.framework/_CodeSignature/CodeRequirements new file mode 100644 index 0000000..92e2aad Binary files /dev/null and b/nativeplugins/JG-JPush/ios/UniPluginJPush.framework/_CodeSignature/CodeRequirements differ diff --git a/nativeplugins/JG-JPush/ios/UniPluginJPush.framework/_CodeSignature/CodeRequirements-1 b/nativeplugins/JG-JPush/ios/UniPluginJPush.framework/_CodeSignature/CodeRequirements-1 new file mode 100644 index 0000000..d9451ab Binary files /dev/null and b/nativeplugins/JG-JPush/ios/UniPluginJPush.framework/_CodeSignature/CodeRequirements-1 differ diff --git a/nativeplugins/JG-JPush/ios/UniPluginJPush.framework/_CodeSignature/CodeResources b/nativeplugins/JG-JPush/ios/UniPluginJPush.framework/_CodeSignature/CodeResources new file mode 100644 index 0000000..532afdd --- /dev/null +++ b/nativeplugins/JG-JPush/ios/UniPluginJPush.framework/_CodeSignature/CodeResources @@ -0,0 +1,117 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>files</key> + <dict> + <key>Headers/JPushModule.h</key> + <data> + hAItQbWWuw4mOOySo6FeWH3MYsA= + </data> + <key>Info.plist</key> + <data> + mdxdKDpLHqtEZTfNMy6MBCyizi8= + </data> + </dict> + <key>files2</key> + <dict> + <key>Headers/JPushModule.h</key> + <dict> + <key>hash</key> + <data> + hAItQbWWuw4mOOySo6FeWH3MYsA= + </data> + <key>hash2</key> + <data> + LHaZ7SfsmEBYhVCf3bEBp8fHG5II1obOplOf4kj6EZQ= + </data> + </dict> + </dict> + <key>rules</key> + <dict> + <key>^.*</key> + <true/> + <key>^.*\.lproj/</key> + <dict> + <key>optional</key> + <true/> + <key>weight</key> + <real>1000</real> + </dict> + <key>^.*\.lproj/locversion.plist$</key> + <dict> + <key>omit</key> + <true/> + <key>weight</key> + <real>1100</real> + </dict> + <key>^Base\.lproj/</key> + <dict> + <key>weight</key> + <real>1010</real> + </dict> + <key>^version.plist$</key> + <true/> + </dict> + <key>rules2</key> + <dict> + <key>.*\.dSYM($|/)</key> + <dict> + <key>weight</key> + <real>11</real> + </dict> + <key>^(.*/)?\.DS_Store$</key> + <dict> + <key>omit</key> + <true/> + <key>weight</key> + <real>2000</real> + </dict> + <key>^.*</key> + <true/> + <key>^.*\.lproj/</key> + <dict> + <key>optional</key> + <true/> + <key>weight</key> + <real>1000</real> + </dict> + <key>^.*\.lproj/locversion.plist$</key> + <dict> + <key>omit</key> + <true/> + <key>weight</key> + <real>1100</real> + </dict> + <key>^Base\.lproj/</key> + <dict> + <key>weight</key> + <real>1010</real> + </dict> + <key>^Info\.plist$</key> + <dict> + <key>omit</key> + <true/> + <key>weight</key> + <real>20</real> + </dict> + <key>^PkgInfo$</key> + <dict> + <key>omit</key> + <true/> + <key>weight</key> + <real>20</real> + </dict> + <key>^embedded\.provisionprofile$</key> + <dict> + <key>weight</key> + <real>20</real> + </dict> + <key>^version\.plist$</key> + <dict> + <key>weight</key> + <real>20</real> + </dict> + </dict> +</dict> +</plist> diff --git a/nativeplugins/JG-JPush/ios/UniPluginJPush.framework/_CodeSignature/CodeSignature b/nativeplugins/JG-JPush/ios/UniPluginJPush.framework/_CodeSignature/CodeSignature new file mode 100644 index 0000000..5a9909b Binary files /dev/null and b/nativeplugins/JG-JPush/ios/UniPluginJPush.framework/_CodeSignature/CodeSignature differ diff --git a/nativeplugins/JG-JPush/ios/jpush-ios-3.4.0.a b/nativeplugins/JG-JPush/ios/jpush-ios-3.4.0.a new file mode 100644 index 0000000..e5fa8b0 Binary files /dev/null and b/nativeplugins/JG-JPush/ios/jpush-ios-3.4.0.a differ diff --git a/nativeplugins/JG-JPush/package.json b/nativeplugins/JG-JPush/package.json new file mode 100644 index 0000000..0d0cfc2 --- /dev/null +++ b/nativeplugins/JG-JPush/package.json @@ -0,0 +1,138 @@ +{ + "name": "JG-JPush", + "id": "JG-JPush", + "version": "1.0.3", + "description": "极光推送Hbuilder插件", + "_dp_type":"nativeplugin", + "_dp_nativeplugin":{ + "ios": { + "plugins": [{ + "type": "module", + "name": "JG-JPush", + "class": "JPushModule" + }], + "hooksClass": "JPushProxy", + "integrateType": "framework", + "deploymentTarget": "9.0", + "frameworks": [ + "CFNetwork.framework", + "CoreFoundation.framework", + "CoreTelephony.framework", + "SystemConfiguration.framework", + "CoreGraphics.framework", + "Foundation.framework", + "UIKit.framework", + "Security.framework", + "libz.tbd", + "AdSupport.framework", + "UserNotifications.framework", + "libresolv.tbd", + "WebKit.framework", + "AppTrackingTransparency.framework", + "StoreKit.framework" + ], + "resources": [ + + ], + "capabilities": { + "entitlements": { + "aps-environment":"development" + } + }, + "privacies": [ + "NSLocationAlwaysAndWhenInUseUsageDescription", + "NSLocationAlwaysUsageDescription", + "NSLocationWhenInUseUsageDescription" + ], + "parameters": { + "JPUSH_ISPRODUCTION_IOS": { + "des": "[iOS]是否是生产环境,是填true,不是填false或者不填", + "key": "JPush:ISPRODUCTION" + }, + "JPUSH_ADVERTISINGID_IOS": { + "des": "[iOS]广告标识符(IDFA)如果不需要使用IDFA,可不填", + "key": "JPush:ADVERTISINGID" + }, + "JPUSH_DEFAULTINITJPUSH_IOS": { + "des": "[iOS]是否默认初始化,是填true,不是填false或者不填", + "key": "JPush:DEFAULTINITJPUSH" + } + } + }, + "android": { + "plugins": [ + { + "type": "module", + "name": "JG-JPush", + "class": "cn.jiguang.uniplugin_jpush.JPushModule" + } + ], + "integrateType": "aar", + "minSdkVersion": "19", + "permissions": [ + "${applicationId}.permission.JPUSH_MESSAGE", + "android.permission.RECEIVE_USER_PRESENT", + "android.permission.INTERNET", + "android.permission.READ_PHONE_STATE", + "android.permission.WRITE_EXTERNAL_STORAGE", + "android.permission.READ_EXTERNAL_STORAGE", + "android.permission.WRITE_SETTINGS", + "android.permission.MOUNT_UNMOUNT_FILESYSTEMS", + "android.permission.ACCESS_NETWORK_STATE", + "android.permission.ACCESS_WIFI_STATE", + "com.huawei.android.launcher.permission.CHANGE_BADGE", + "android.permission.VIBRATE", + "android.permission.SYSTEM_ALERT_WINDOW", + "android.permission.ACCESS_COARSE_LOCATION", + "android.permission.CHANGE_WIFI_STATE", + "android.permission.ACCESS_FINE_LOCATION", + "android.permission.ACCESS_BACKGROUND_LOCATION", + "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS", + "android.permission.CHANGE_NETWORK_STATE", + "android.permission.GET_TASKS", + "android.permission.QUERY_ALL_PACKAGES", + "${applicationId}.permission.MIPUSH_RECEIVE", + "com.coloros.mcs.permission.RECIEVE_MCS_MESSAGE", + "com.heytap.mcs.permission.RECIEVE_MCS_MESSAGE" + ], + "parameters": { + "JPUSH_OPPO_APPKEY": { + "des": "厂商OPPO-appkey,示例:OP-12345678", + "key": "OPPO_APPKEY" + }, + "JPUSH_OPPO_APPID":{ + "des": "厂商OPPO-appId,示例:OP-12345678", + "key": "OPPO_APPID" + }, + "JPUSH_OPPO_APPSECRET":{ + "des": "厂商OPPO-appSecret,示例:OP-12345678", + "key": "OPPO_APPSECRET" + }, + "JPUSH_VIVO_APPKEY":{ + "des": "厂商VIVO-appkey,示例:12345678", + "key": "com.vivo.push.api_key" + }, + "JPUSH_VIVO_APPID":{ + "des": "厂商VIVO-appId,示例:12345678", + "key": "com.vivo.push.app_id" + }, + "JPUSH_MEIZU_APPKEY":{ + "des": "厂商MEIZU-appKey,示例:MZ-12345678", + "key": "MEIZU_APPKEY" + }, + "JPUSH_MEIZU_APPID":{ + "des": "厂商MEIZU-appId,示例:MZ-12345678", + "key": "MEIZU_APPID" + }, + "JPUSH_XIAOMI_APPKEY":{ + "des": "厂商XIAOMI-appKey,示例:MI-12345678", + "key": "XIAOMI_APPKEY" + }, + "JPUSH_XIAOMI_APPID":{ + "des": "厂商XIAOMI-appId,示例:MI-12345678", + "key": "XIAOMI_APPID" + } + } + } + } +} diff --git a/pages.json b/pages.json index b9e166d..02e1dd0 100644 --- a/pages.json +++ b/pages.json @@ -1,7 +1,4 @@ { - "easycom": { - "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue" - }, "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages { "path": "pages/guide/index", @@ -148,7 +145,95 @@ "navigationStyle": "custom", "onReachBottomDistance": 300 } - } + }, + { + "path" : "pages/redpacket/redpacket", + "style" : + { + "navigationBarTitleText" : "补贴", + "enablePullDownRefresh" : false + } + }, + { + "path" : "pages/redpacket/redpack_type", + "style" : + { + "navigationBarTitleText" : "补贴余额", + "enablePullDownRefresh": false, + "navigationStyle": "custom", + "onReachBottomDistance": 300 + } + }, + { + "path" : "pages/newActivity/subsidy/subsidy2", + "style" : + { + "navigationBarTitleText" : "实物通用补贴", + "enablePullDownRefresh": false, + "navigationStyle": "custom", + "onReachBottomDistance": 300 + } + }, + { + "path" : "pages/newActivity/subsidy/subsidy3", + "style" : + { + "navigationBarTitleText" : "现金抵扣补贴", + "enablePullDownRefresh": false, + "navigationStyle": "custom", + "onReachBottomDistance": 300 + } + }, + { + "path" : "pages/newActivity/towPrice/towPrice", + "style" : + { + "navigationBarTitleText" : "两元专区", + "enablePullDownRefresh": false, + "navigationStyle": "custom", + "onReachBottomDistance": 300 + } + }, + { + "path" : "pages/newActivity/giftBag/giftBag", + "style" : + { + "navigationBarTitleText" : "新人礼包", + "enablePullDownRefresh": false, + "navigationStyle": "custom", + "onReachBottomDistance": 300 + } + }, + { + "path" : "pages/newActivity/activityDetail/activityDetail", + "style" : + { + "navigationBarTitleText": "活动", + "enablePullDownRefresh": true, + "navigationStyle": "custom", + "onReachBottomDistance": 300 + } + }, + { + "path" : "pages/newActivity/subsidy/subsidy", + "style" : + { + "navigationBarTitleText": "补贴记录", + "enablePullDownRefresh": true, + "navigationStyle": "custom", + "onReachBottomDistance": 300 + } + }, + { + "path" : "pages/newActivity/invitation/invitation", + "style" : + { + "navigationBarTitleText": "拉新活动", + "enablePullDownRefresh": true, + "navigationStyle": "custom", + "onReachBottomDistance": 300 + } + } ], "subPackages": [{ "root": "pages/cloud_warehouse", @@ -446,6 +531,12 @@ "navigationBarTitleText": "申请退货" } }, + { + "path": "invite_code/index", + "style": { + "navigationBarTitleText": "邀请码" + } + }, { "path": "login/login_copy", "style": { @@ -636,7 +727,14 @@ "style": { "navigationBarTitleText": "商家入驻" } - }, { + }, + { + "path": "settled/unit", + "style": { + "navigationBarTitleText": "种养殖户入驻" + } + }, + { "path": "applicationRecord/index", "style": { "navigationBarTitleText": "申请记录" @@ -1363,8 +1461,8 @@ // }, { "pagePath": "pages/gather/gather", - "iconPath": "static/images/5-001.png", - "selectedIconPath": "static/images/5-002.png", + "iconPath": "static/images/2-001.png", + "selectedIconPath": "static/images/2-002.png", "text": "工作台" }, { diff --git a/pages/gather/gather.vue b/pages/gather/gather.vue index 2c45e69..c68ef60 100644 --- a/pages/gather/gather.vue +++ b/pages/gather/gather.vue @@ -40,13 +40,10 @@ </u-transition> </view> </view> - <Loading></Loading> </view> </template> <script> - import Cache from '@/utils/cache'; - import { wgsToGcj } from "@/utils/wgs.js"; import { mapState, mapGetters @@ -55,23 +52,12 @@ getStoreList, getUserInfo } from '@/api/user.js' - import { - getGeocoder, - microSeachBarCode, - microEadtProduct - } from '@/api/store.js' import { Toast } from '@/libs/uniApi'; - import { - getDiy - } from '@/api/api.js'; import { applet } from '@/api/public.js'; - import { - ENV - } from "@/config/app.js" // #ifdef APP-PLUS import uniMP from '@/utils/uniMP.js'; // #endif @@ -112,17 +98,16 @@ onLoad() { }, onShow() { - if (this.isLogin) { - this.emptyText = '暂无可用应用' - this.jurisdiction = false - this.initAllAppLet(); - } else { - this.emptyText = '请登录' - this.jurisdiction = true - } - this.getUserInfo(); + // if (this.isLogin) { + // this.emptyText = '暂无可用应用' + // this.jurisdiction = false + // this.initAllAppLet(); + // } else { + // this.emptyText = '请登录' + // this.jurisdiction = true + // } + // this.getUserInfo(); }, - onPullDownRefresh() { this.getUserInfo() uni.stopPullDownRefresh() @@ -442,7 +427,7 @@ .special_work { // padding: 17.54rpx; width: 694.74rpx; - margin-top: 52.63rpx; + padding-top: 30rpx; border-radius: 17.54rpx; // box-shadow: 0px 0px 6px 1px rgba(0, 0, 0, 0.16); diff --git a/pages/newActivity/activityDetail/activityDetail.vue b/pages/newActivity/activityDetail/activityDetail.vue new file mode 100644 index 0000000..6067b4e --- /dev/null +++ b/pages/newActivity/activityDetail/activityDetail.vue @@ -0,0 +1,195 @@ +<template> + <view> + <view class="bg"> + <image class="bg_img" mode="widthFix" + src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/detail.webp"></image> + <image @click="back" class="bg_back" + src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/back.png"></image> + <view class="b_body"> + <view class="b_content"> + <view v-if="info.content" v-html="info.content.content"></view> + </view> + </view> + </view> + <view class="btn_box"> + <image v-if="show_a1" @click="changeA(show_a1)" class="btn_image" mode="widthFix" + src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/detail_btn1.webp"></image> + <image v-if="show_a2" @click="changeA(show_a2)" class="btn_image" mode="widthFix" + src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/detail_btn2.webp"></image> + </view> + <u-modal :show="show" :closeOnClickOverlay="true" :title="`[${activity.title}]`" + content="选择活动后只有完成活动任务后才可参加另一个活动, 确定要参与这个活动吗" cancelText="我再想想" confirmText="参加活动" confirmColor="#e54841" + @cancel="show = false" @confirm="joinA()" showCancelButton></u-modal> + <authorize @onLoadFun="onLoadFun" :isAuto="isAuto" :isShowAuth="isShowAuth" @authColse="authColse" + :isGoIndex="false"></authorize> + </view> +</template> + +<script> + import { consumption, chooseConsumption } from "@/api/activity.js" + import { getArticleList } from "@/api/api.js" + import { Toast } from "../../../libs/uniApi"; + import authorize from "@/components/Authorize.vue"; + import { getUserInfo } from '@/api/user.js'; + export default { + components: { + authorize + }, + data() { + return { + info: {}, + userInfo: {}, + Alist: [], + activity: { + title: '' + }, + show: false, + isAuto: false, //没有授权的不会自动授权 + isShowAuth: false, //是否隐藏授权 + is_join_activity: 0, //是否已确认参加活动 + } + }, + onLoad() { + this.getArticleList(); + this.is_join_activity = uni.getStorageSync('is_join_activity'); + }, + onShow() { + this.getUserInfo(); + this.consumption(); + }, + computed: { + show_a1() { //显示活动一 + return this.Alist.find(item => item.title == '用户消费补贴活动') + }, + show_a2() { //显示活动二 + return this.Alist.find(item => item.title == '用户推荐拉新活动') + } + }, + methods: { + consumption() { + consumption().then(res => { + this.Alist = res.data; + }) + }, + back() { + uni.navigateBack() + }, + changeA(item) { + if (!this.userInfo.account) return this.openAuto(); + this.activity = item; + if (this.is_join_activity) return this.joinA(); + this.show = true; + }, + getArticleList() { + getArticleList(25).then(res => { + this.info = res.data.list[0] + }) + }, + // 参加活动 + joinA() { + chooseConsumption({ + coupon_id: this.activity.coupon_id, + activity_id: 1, //活动默认传1即可 + }).then(res => { + this.show = false; + let url = ''; + if (this.activity.title == '用户消费补贴活动') url = "/pages/redpacket/redpack_type?type=1"; + if (this.activity.title == '用户推荐拉新活动') url = "/pages/newActivity/invitation/invitation"; + if (url) uni.navigateTo({ + url: url + }) + }).catch(err => { + this.show = false; + this.$nextTick(() => { + Toast('您正在参与活动,暂时不支持切换'); + }) + }) + uni.setStorageSync('is_join_activity', 1); + this.is_join_activity = 1; + }, + getUserInfo() { + getUserInfo().then(res => { + this.userInfo = res.data; + }).catch(err => { + console.log(err); + }) + }, + // 授权回调 + onLoadFun(data) { + this.getUserInfo(); + this.isShowAuth = false; + }, + // 打开授权 + openAuto() { + // console.log('hajhcdsohjcosvjco') + this.isAuto = true; + this.isShowAuth = true + }, + // 授权关闭 + authColse: function(e) { + this.isShowAuth = e + }, + }, + onPullDownRefresh() { + uni.stopPullDownRefresh() + } + } +</script> + +<style lang="scss"> + page { + background-color: #fff5dd; + } + + .bg { + position: relative; + padding-bottom: 300rpx; + + .bg_img { + width: 750rpx; + height: 652rpx; + position: absolute; + top: 0; + left: 0; + } + + .bg_back { + height: 34rpx; + width: 20rpx; + position: absolute; + top: calc(var(--status-bar-height) + 30rpx); + left: 30rpx; + } + + .b_body { + width: 710rpx; + margin-left: 21rpx; + margin-right: 19rpx; + height: auto; + background-color: #fff; + border-radius: 0 0 60rpx 60rpx; + padding: 28rpx; + padding-top: 680rpx; + margin-bottom: 30rpx; + + .b_content { + width: 100%; + // height: 800rpx; + // background-color: #eee; + } + + } + + + } + .btn_box { + position: fixed; + bottom: 30rpx; + left: 50%; + transform: translate(-50%); + width: 710rpx; + .btn_image { + width: 100%; + } + } +</style> \ No newline at end of file diff --git a/pages/newActivity/giftBag/giftBag.vue b/pages/newActivity/giftBag/giftBag.vue new file mode 100644 index 0000000..b3b37e7 --- /dev/null +++ b/pages/newActivity/giftBag/giftBag.vue @@ -0,0 +1,900 @@ +<template> + <view class="m_body"> + <view class="bg"> + <view class="bg_box"> + <image class="bg_img" mode="widthFix" + src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/recharge.webp"></image> + <view class="bg_border"></view> + </view> + <image @click="back" class="bg_back" + src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/back.png"></image> + <view class="body_card"> + <view class="card1"> + <view class="change_list"> + <view class="change_item" @click="changeItem(item, index)" + v-for="(item, index) in changeList" :key="index"> + <image class="item_pic" :src="item.pic"></image> + <view class="item_content"> + <view class="top_left"><text class="c_icon">¥</text> <text class="c_content">{{item.count}}</text></view> + <view class="top_right"> + <text>数量: </text> + <view @click="reduce(item)">- </view> + <view style="width: 80rpx;">{{item.num}} </view> + <view @click="append(item)">+ </view> + </view> + </view> + </view> + </view> + </view> + </view> + <view class="a_tips"> + <view>礼包说明:</view> + <view>购买1000-4999元礼包,补贴对应金额5%的现金抵扣补贴</view> + <view>购买5000-9999元礼包,补贴对应金额10%的现金抵扣补贴</view> + <view>购买10000-49999元礼包,补贴对应金额15%的现金抵扣补贴</view> + <view>购买50000-100000元礼包,补贴对应金额20%的现金抵扣补贴</view> + </view> + </view> + <view class="footer"> + <view class="f_tip"> + 总计购买礼包金额: + <view class="price"> + <text>{{total}}</text>元 + </view> + </view> + <view class="primary_btn" @click="$u.throttle(submitSub, 1500)">立即购买</view> + </view> + <uni-popup ref="redTipsRef"> + <view class="ref_ref"> + <view class="ref_top"> + 购买礼包金额达到 + <text v-if="red_type==0">1000-4999</text> + <text v-if="red_type==1">5000-9999</text> + <text v-if="red_type==2">10000-49999</text> + <text v-if="red_type==3">50000-100000</text> + </view> + <view class="ref_center"> + 赠送补贴变为 + </view> + <view class="ref_bottom"> + <view class="bottom_item" style="width: 100%;"> + <image src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/re_redpacket.webp"></image> + <view class="text">{{tipType[red_type].red1}}</view> + </view> + </view> + </view> + </uni-popup> + <payment :payMode="payMode" :order_id="rechar_id" :pay_close="pay_close" :is-call="true" @onChangeFun="onChangeFun" + :totalPrice="totalPrice"></payment> + <authorize @onLoadFun="onLoadFun" :isAuto="isAuto" :isShowAuth="isShowAuth" @authColse="authColse"></authorize> + </view> +</template> + +<script> + import { getCommissionInfo } from "@/api/user.js" + import { Toast } from "../../../libs/uniApi"; + import { + mapGetters + } from "vuex"; + import { + getUserInfo, + spreadInfo, + rechargeWechat + } from '@/api/user.js'; + import authorize from '@/components/Authorize'; + import payment from '@/components/payment'; + export default { + components: { + authorize, + payment + }, + data() { + return { + userInfo: {}, + curNow: 0, + list1: [{ + name: '余额购买' + }, { + name: '购买记录' + }], + changeList: [ + { + count: 100, // 面额 + pic: 'https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/a_re_item5.webp', + num: 0, //购买的个数 + }, + { + count: 200, + pic: 'https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/a_re_item6.webp', + num: 0, //购买的个数 + }, + { + count: 500, + pic: 'https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/a_re_item7.webp', + num: 0, //购买的个数 + }, + { + count: 1000, + pic: 'https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/a_re_item8.webp', + num: 0, //购买的个数 + } + ], + nowChange: 0, + nowPrice: 0, + priceCount: 1, + isAuto: false, //没有授权的不会自动授权 + isShowAuth: false, //是否隐藏授权 + recordList: [], + tipType: [ + { + red1: '5%的现金抵扣补贴', + }, + { + red1: '10%的现金抵扣补贴', + }, + { + red1: '15%的现金抵扣补贴', + }, + { + red1: '20%的现金抵扣补贴', + }, + { + red1: '', + }, + ], + red_type: 4, + where: { + page: 1, + limit: 15, + type: 2 + }, + otherValue: '其他', + now_money: 0, + navRecharge: ['账户购买', '佣金转入'], + active: 0, + number: '', + from: '', + placeholder: "0.00", + picList: [], + activePic: 0, + money: "", + numberPic: '', + rechar_id: '0', + rechargeAttention: [], + pay_close: false, + totalPrice: '0', + payMode: [{ + name: '微信支付', + icon: 'icon-weixinzhifu', + // #ifdef H5 + value: 'h5', + // #endif + // #ifdef MP + value: 'routine', + // #endif + // #ifdef APP-PLUS + value: 'weixin', + // #endif + title: '微信快捷支付', + payStatus: true + }], + } + }, + onLoad() { + if (this.isLogin) { + this.getUserInfo() + } else { + this.isAuto = true; + this.isShowAuth = true + } + }, + onShow() { + }, + computed: { + ...mapGetters(['isLogin', 'viewColor', 'keyColor']), + total() { + return this.changeList.reduce((t, obj)=>{ + return t + (obj.count * obj.num); + }, 0); + } + }, + onReachBottom() { + this.getCommissionInfo(); + }, + methods: { + back(){ + uni.navigateBack(); + }, + clickTab1(e) { + this.curNow = e.index; + if (e.index == 1) { + this.recordList = []; + this.where.page = 1; + this.getCommissionInfo(); + } + }, + changeItem(e, index) { + this.nowPrice = e; + this.nowChange = index; + if (this.priceCount * this.nowPrice > 100000) { + this.priceCount = Math.floor(100000 / this.nowPrice); + return Toast('不可超过10万元'); + } + }, + append(item) { + if(this.total + item.count >=0 && this.total + item.count <1000) this.red_type = 4; + else if(this.total + item.count >=1000 && this.total + item.count <=4999 && this.red_type != 0){ + this.red_type = 0; + this.$refs.redTipsRef.open(); + }else if(this.total + item.count >=5000 && this.total + item.count <=9999 && this.red_type != 1){ + this.red_type = 1; + this.$refs.redTipsRef.open(); + }else if(this.total + item.count >=10000 && this.total + item.count <=49999 && this.red_type != 2){ + this.red_type = 2; + this.$refs.redTipsRef.open(); + }else if(this.total + item.count >=50000 && this.total + item.count <=100000 && this.red_type != 3){ + this.red_type = 3; + this.$refs.redTipsRef.open(); + } + if (this.total + item.count > 100000 || this.total>=100000) { + return Toast('不可超过10万元'); + } else item.num++; + }, + reduce(item) { + if(this.total - item.count >=0 && this.total - item.count <1000) this.red_type = 4; + else if(this.total - item.count >=1000 && this.total - item.count <=4999 && this.red_type != 0){ + this.red_type = 0; + this.$refs.redTipsRef.open(); + }else if(this.total - item.count >=5000 && this.total - item.count <=9999 && this.red_type != 1){ + this.red_type = 1; + this.$refs.redTipsRef.open(); + }else if(this.total - item.count >=10000 && this.total - item.count <=49999 && this.red_type != 2){ + this.red_type = 2; + this.$refs.redTipsRef.open(); + }else if(this.total - item.count >=50000 && this.total - item.count <=100000 && this.red_type != 3){ + this.red_type = 3; + this.$refs.redTipsRef.open(); + } + if (this.total==0||item.num==0) return Toast('不能再少啦'); + else item.num--; + }, + getCommissionInfo() { + getCommissionInfo(this.where).then((res) => { + if (res.data.list.length > 0) { + this.recordList = [...this.recordList, ...res.data.list]; + if (res.data.list.length >= 15) this.where.page++; + } + }) + }, + /** + * 选择金额 + */ + picCharge(idx, item) { + this.activePic = idx; + if (item === undefined) { + this.rechar_id = '0'; + this.numberPic = ""; + this.otherValue = '' + } else { + this.otherValue = '其他' + this.total = ""; + this.rechar_id = item.id.toString(); + this.numberPic = item.data.price; + } + }, + /** + * 购买额度选择 + */ + getRecharge() { + getRechargeApi() + .then(res => { + this.picList = res.data.recharge_quota; + if (this.picList[0]) { + this.rechar_id = this.picList[0].id.toString(); + this.numberPic = this.picList[0].data.price; + } + this.rechargeAttention = res.data.recharge_attention || []; + }) + .catch(res => { + this.$dialog.toast({ + mes: res + }); + }); + }, + onLoadFun: function() { + this.isShowAuth = false; + this.getUserInfo(); + this.getRecharge(); + }, + // 授权关闭 + authColse: function(e) { + this.isShowAuth = e + }, + navRecharges: function(index) { + this.active = index; + }, + /** + * 获取用户信息 + */ + getUserInfo: function() { + let that = this; + spreadInfo().then(res => { + that.$set(that, 'userInfo', res.data); + }) + }, + payClose: function() { + this.pay_close = false; + }, + payCheck: function(type) { + this.createOrder(type); + }, + + /* + * 用户购买 + */ + submitSub: function(e) { + let that = this + let value = this.total; + // 转入余额 + if (that.active) { + if (parseFloat(value) < 0 || parseFloat(value) == NaN || value == undefined || value == "") { + return that.$util.Tips({ + title: '请输入金额' + }); + } + uni.showModal({ + title: '转入余额', + content: '转入余额后无法再次转出,确认是否转入余额', + success(res) { + if (res.confirm) { + rechargeBrokerage({ + brokerage: parseFloat(value), + }).then(res => { + // that.$set(that, 'userInfo.now_money', that.$util.$h.Add(value, that.userInfo.now_money)) + uni.showToast({ + icon: 'success', + title: '转入成功' + }) + // return that.$util.Tips({ + // title: '转入成功', + // icon: 'success' + // }, { + // tab: 5, + // url: '/pages/users/user_money/index' + // }); + }).catch(err => { + return that.$util.Tips({ + title: err + }) + }); + } else if (res.cancel) { + return that.$util.Tips({ + title: '已取消' + }); + } + }, + }) + } else { + if (this.rechar_id == 0) { + if (parseFloat(that.total) === 0) { + return that.$util.Tips({ + title: '购买金额金额不能为0!' + }); + } + if (!that.total) { + return that.$util.Tips({ + title: '请填写购买金额!' + }); + } + if (!Number(that.total)) { + return that.$util.Tips({ + title: '请填写正确的金额!' + }); + } + } + this.pay_close = true + } + }, + createOrder(type) { + let that = this; + let query = { + price: that.rechar_id == 0 ? that.total : that.numberPic, + recharge_id: that.rechar_id, + type: type, + // #ifdef H5 + return_url: location.port ? location.protocol + '//' + location.hostname + ':' + location.port + + '/pages/users/user_money/money' : location.protocol + '//' + location.hostname + + '/pages/users/user_money/money' + // #endif + }; + // #ifdef MP + // openPaySubscribe().then(() => { + rechargeWechat(query).then(res => { + that.callPay(res); + }).catch(err => { + uni.showToast({ + title: err, + icon: 'none' + }); + }); + // }); + // #endif + // #ifndef MP + rechargeWechat(query).then(res => { + console.log('res', res); + that.callPay(res); + }).catch(err => { + console.log('err', err); + uni.showToast({ + title: err, + icon: 'none' + }); + }); + // #endif + }, + // 调用支付 + callPay(res) { + let that = this, + status = res.data.type, + orderId = res.data.recharge_id, + callback_key = res.data.pay_key, + jsConfig = res.data.config, + goPages = '/pages/users/user_money/money'; + switch (status) { + case 'ORDER_EXIST': + case 'EXTEND_ORDER': + case 'PAY_ERROR': + case 'error': + uni.hideLoading(); + Toast(res.message) + // return that.$util.Tips({ + // title: res.message + // }, { + // tab: 5, + // url: goPages + // }); + break; + case 'success': + uni.hideLoading(); + uni.showToast({ + icon: 'success', + title: res.message + }) + // if (that.seckillId) + // return that.$util.Tips({ + // title: res.message, + // icon: 'success' + // }, { + // tab: 4, + // url: goPages + // }); + // return that.$util.Tips({ + // title: res.message, + // icon: 'success' + // }, { + // tab: 5, + // url: goPages + // }); + break; + case 'alipay': + case "alipayQr": + uni.hideLoading(); + that.$emit('onChangeFun', { + action: 'payClose' + }); + uni.navigateTo({ + url: '/pages/order_pay_back/index?keyCode=' + callback_key + '&url=' + jsConfig + '&type=10' + }) + return; + break; + // #ifndef MP + case "wechat": + case "weixin": + case "weixinApp": + jsConfig.timeStamp = jsConfig.timestamp; + // #ifndef APP-PLUS + that.$wechat.pay(jsConfig).then(res => { + uni.showToast({ + icon: 'success', + title: res.message + }) + // return that.$util.Tips({ + // title: res.message, + // icon: 'success' + // }, { + // tab: 4, + // url: goPages + // }); + }).catch(res => { + uni.showToast({ + icon: 'success', + title: '取消支付' + }) + // if (res.errMsg == 'chooseWXPay:cancel') return that.$util.Tips({ + // title: '取消支付' + // }, { + // tab: 5, + // url: goPages + // }); + }) + // #endif + // #ifdef APP-PLUS + let mp_pay_name = '' + if (uni.requestOrderPayment) { + mp_pay_name = 'requestOrderPayment' + } else { + mp_pay_name = 'requestPayment' + } + uni[mp_pay_name]({ + provider: 'wxpay', + orderInfo: jsConfig, + success: (e) => { + this.getUserInfo() + uni.showToast({ + icon: 'success', + title: '支付成功' + }) + // let url = '/pages/users/user_money/money'; + // return that.$util.Tips({ + // title: '支付成功', + // icon: 'success' + // }, { + // tab: 4, + // url: url + // }); + }, + fail: (e) => { + console.log(e); + uni.showModal({ + content: "支付失败", + showCancel: false, + success: function(res) { + + } + }) + }, + complete: () => { + uni.hideLoading(); + }, + }); + // #endif + break; + // #endif + // #ifdef MP + case "routine": + jsConfig.timeStamp = jsConfig.timestamp; + let mp_pay_name = '' + if (uni.requestOrderPayment) { + mp_pay_name = 'requestOrderPayment' + } else { + mp_pay_name = 'requestPayment' + } + uni[mp_pay_name]({ + ...jsConfig, + success: function(res) { + uni.hideLoading(); + that.getUserInfo(); + that.getRecharge(); + // console.log('12323424') + uni.showToast({ + icon: 'success', + title: '支付成功' + }) + // return that.$util.Tips({ + // title: '支付成功', + // icon: 'success' + // }, { + // tab: 5, + // url: goPages + // }); + }, + fail: function(e) { + uni.hideLoading(); + Toast('取消支付') + // return that.$util.Tips({ + // title: '取消支付' + // }, { + // tab: 5, + // url: goPages + // }); + }, + }) + break; + // #endif + case "balance": + uni.hideLoading(); + //余额不足 + Toast(res.msg) + // return that.$util.Tips({ + // title: res.msg + // }, { + // tab: 5, + // url: goPages + // }); + break; + // #ifdef H5 + case 'h5': + let host = window.location.protocol + "//" + window.location.host; + let url = `${host}/pages/users/user_money/money` + let eUrl = encodeURIComponent(url) + let jsurl = jsConfig.mweb_url || jsConfig.h5_url + let locations = `${jsurl}&redirect_url=${eUrl}` + setTimeout(() => { + location.href = locations; + }, 100); + break; + // #endif + // #ifdef APP-PLUS + case 'alipayApp': + uni.requestPayment({ + provider: 'alipay', + orderInfo: jsConfig, + success: (e) => { + this.getUserInfo() + uni.showToast({ + icon: 'success', + title: '支付成功' + }) + // return that.$util.Tips({ + // title: '支付成功', + // icon: 'success' + // }, { + // tab: 5, + // url: goPages + // }); + }, + fail: (e) => { + uni.showModal({ + content: "支付失败", + showCancel: false, + success: function(res) { + uni.redirectTo({ + url: goPages + }) + } + }) + }, + complete: () => { + uni.hideLoading(); + }, + }); + break; + // #endif + } + }, + onChangeFun: function(e) { + let opt = e; + let action = opt.action || null; + let value = opt.value != undefined ? opt.value : null; + action && this[action] && this[action](value); + }, + }, + onPullDownRefresh() { + uni.stopPullDownRefresh() + } + } +</script> + +<style lang="scss"> + page { + background-color: #fff; + } + .bg { + position: relative; + padding-bottom: 300rpx; + + .bg_box{ + height: 486rpx; + position: relative; + overflow: hidden; + .bg_img { + width: 750rpx; + height: 652rpx; + position: absolute; + top: 0; + left: 0; + } + .bg_border{ + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 30rpx; + border-radius: 60rpx 60rpx 0 0; + background-color: #fff; + } + } + + .bg_back { + height: 34rpx; + width: 20rpx; + position: absolute; + top: calc(var(--status-bar-height) + 30rpx); + left: 30rpx; + } + + .body_card { + color: #333; + + .card1 { + background-color: #fff; + + .change_list { + width: 700rpx; + margin: 0 auto; + display: flex; + justify-content: space-between; + flex-wrap: wrap; + + .change_item { + width: 335rpx; + height: 172rpx; + text-align: center; + // background-color: #f7f7f7; + border-radius: 20rpx 20rpx 20rpx 20rpx; + font-size: 40rpx; + position: relative; + margin-bottom: 30rpx; + + .item_pic{ + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + } + + .item_content{ + padding: 26rpx; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 172rpx; + display: flex; + flex-direction: column; + justify-content: space-between; + + .top_left{ + font-size: 58rpx; + color: #ffc53d; + display: flex; + align-content: center; + .tips{ + font-size: 24rpx; + border: 5rpx solid #ffc53d; + margin-left: 20rpx; + padding: 5rpx 15rpx; + border-radius: 60rpx; + color: #7C5906; + } + .c_content{ + padding-top: 10rpx; + } + .c_icon { + padding-top: 15rpx; + font-size: 36rpx; + } + } + .top_right{ + display: flex; + align-items: center; + color: #FF3A32; + text{ + font-size: 28rpx; + } + view{ + height: 60rpx; + width: 40rpx; + text-align: center; + line-height: 60rpx; + } + } + + } + + } + + .change_item_active { + background: rgba(#FF8056, 0.2); + border: 5rpx solid #FF8056; + color: #FF8056; + } + } + + } + + } + + .a_tips{ + color: #FF8056; + padding: 0 30rpx; + line-height: 40rpx; + } + + } + + .m_body { + + .footer { + position: fixed; + left: 0; + bottom: 0; + height: 120rpx; + width: 100vw; + background-color: #fff; + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 20rpx; + + .f_tip { + display: flex; + align-items: flex-end; + font-style: 26rpx; + + .price { + color: #FF8056; + + text { + font-size: 44rpx; + margin-left: 20rpx; + margin-right: 5rpx; + } + } + + } + + .primary_btn { + background-color: #fa8147; + height: 80rpx; + border-radius: 80rpx; + width: 180rpx; + color: #fff; + line-height: 80rpx; + text-align: center; + } + } + } + .ref_ref{ + width: 630rpx; + height: 200rpx; + background-color: #fff; + border-radius: 20rpx; + padding: 20rpx 10rpx; + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: center; + .ref_top{ + color: #ffc53d; + } + .ref_center{ + font-size: 24rpx; + border: 5rpx solid #ffc53d; + margin-left: 20rpx; + padding: 5rpx 15rpx; + border-radius: 60rpx; + color: #7C5906; + } + .ref_bottom{ + font-size: 28rpx; + display: flex; + align-items: center; + justify-content: space-between; + color: #FF3A32; + .bottom_item{ + width: 280rpx; + display: flex; + align-items: center; + image{ + width: 32rpx; + height: 40rpx; + } + .text{ + padding-left: 15rpx; + } + } + } + } +</style> \ No newline at end of file diff --git a/pages/newActivity/invitation/invitation.vue b/pages/newActivity/invitation/invitation.vue new file mode 100644 index 0000000..a920aa8 --- /dev/null +++ b/pages/newActivity/invitation/invitation.vue @@ -0,0 +1,384 @@ +<template> + <view> + <view class="bg"> + <image class="bg_img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/invitation.webp"></image> + <image @click="back" class="bg_back" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/back.png"></image> + <view class="bg_body"> + <view class="b_qr"> + <view class="qr_body"> + <view class="qr_code"> + <image :src="qr_img"></image> + </view> + <view class="qr_text">扫一扫,补贴正在路上</view> + <view class="qr_tips">温馨提示:邀请新用户才有机会获得补贴哦</view> + </view> + </view> + <view class="b_user"> + <view class="users"> + <image v-for="(item, index) in info.user_info" :key="item.uid" class="avatar" :src="item.avatar||'/static/images/f.png'"></image> + <block v-if="info.user_info.length<4"> + <view v-for="item in 4-info.user_info.length" :key="item+'n'" class="avatar_no"> + <u-icon name="plus" color="#fff" size="40rpx"></u-icon> + </view> + </block> + </view> + <view class="u_tips">邀请新用户消费达目标金额,有机会领取补贴哦~</view> + <view class="u_btn"> + <image v-if="status==0" class="btn_image" @click="open" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/ibtn1.webp"></image> + <image v-if="status==1" class="btn_image" @click="open" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/ibtn2.webp"></image> + <image v-if="status==2" class="btn_image" @click="opened" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/ibtn3.webp"></image> + </view> + <uni-popup ref="redPacket"> + <view class="red_packet"> + <block v-if="status==0"> + <view class="packet_img"> + <image class="img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/red_packet1.webp"></image> + <view class="p_text"> + <view class="big">抱歉!</view> + <view class="smoll">有好友消费未达目标金额</view> + <view class="smoll">无法领补贴哦~</view> + </view> + </view> + <image @click="close()" class="close_img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/close.png"></image> + </block> + <block v-if="status==1"> + <view class="packet_img" @click="openRedPacket()"> + <image class="img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/red_packet2.webp"></image> + <view class="p_text"> + <view class="big">恭喜!</view> + <view class="smoll">成功获得实物通用补贴</view> + <view class="smoll">赶快打开吧~</view> + </view> + </view> + <image @click="close()" class="close_img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/close.png"></image> + </block> + <block v-if="status==2"> + <view class="packet_img"> + <image class="img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/red_packet3.webp"></image> + <view class="p_text" style="bottom: 60rpx;"> + <view class="smoll">恭喜你!成功获得</view> + <view class="smoll red_count"><text class="count">{{red_packet.amount}}</text>元</view> + <view class="big2">购买指定商品可直接抵扣使用</view> + <view class="smoll">{{red_packet.end_time}}过期</view> + <image @click="close()" class="btn_img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/put.webp"></image> + </view> + </view> + <image @click="close()" class="close_img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/close.png"></image> + </block> + </view> + </uni-popup> + </view> + <view class="b_in_list"> + <image class="body_head_img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/irecoed.webp"></image> + <view class="b_head"> + <view style="width: 120rpx;"></view> + <view class="head_title" style="width: 200rpx;">名称</view> + <view class="head_title" style="width: 130rpx;">ID</view> + <view class="head_title" style="width: 120rpx;">目标金额</view> + <view class="head_title" style="width: 120rpx;">状态</view> + </view> + <view class="b_content"> + <view class="content_list" v-for="(item, index) in info.user_info" :key="item.uid"> + <image class="avatar" :src="item.avatar||'/static/images/f.png'"></image> + <view class="content_item" style="width: 180rpx;margin: 0 10rpx;">{{item.nickname}}</view> + <view class="content_item" style="width: 130rpx;">{{item.uid}}</view> + <view class="content_item" style="width: 120rpx;">{{item.target_amount}}<text class="mall">元</text></view> + <view class="content_item" style="width: 120rpx;"> + <text v-if="item.is_finish" style="color: #18CE61;">已完成</text> + <text v-else style="color: #FA5A29;">未完成</text> + </view> + </view> + <!-- <view class="mall none">暂无记录</view> --> + </view> + </view> + </view> + </view> + </view> +</template> + +<script> +import { storeActivityStatus, storeActivityReceive, storeActivityQrcode } from "@/api/activity.js" +import { Toast } from "../../../libs/uniApi"; +import { getUserInfo } from '@/api/user.js'; +export default { + data() { + return { + info: { + user_info: [] + }, + red_packet: { + amount: '0.00', + end_time: '' + }, + status: 0, //0不可开, 1可开, 2已开 + qr_img: '' + } + }, + onLoad() {}, + onShow() { + this.storeActivityQrcode(); + this.loadInfo(); + }, + methods: { + back(){ + uni.navigateBack() + }, + loadInfo(){ + storeActivityStatus().then(res=>{ + this.info = res.data; + if(res.data.allow_receive) this.status = 1; + }) + }, + opened(){ + Toast('已经领取过啦!'); + }, + open(){ + this.$refs.redPacket.open(); + }, + close(){ + this.$refs.redPacket.close(); + }, + storeActivityQrcode(){ + storeActivityQrcode().then(res=>{ + this.qr_img = res.data.url; + }) + }, + // 打开补贴 + async openRedPacket(){ + this.$refs.redPacket.close(); + try{ + let {data} = await storeActivityReceive(); + this.$nextTick(()=>{ + this.red_packet = data; + this.$u.sleep(800).then(()=>{ + this.status = 2; + this.$u.sleep(100).then(()=>{ + this.open(); + }) + }) + }) + }catch(e){ + Toast(e) + } + } + }, + onPullDownRefresh() { + uni.stopPullDownRefresh() + } + } +</script> + +<style lang="scss"> +page{ + background-color: #ff864d; +} +.bg{ + position: relative; + height: auto; + .bg_img{ + width: 750rpx; + position: absolute; + top: 0; + left: 0; + } + .bg_back{ + height: 34rpx; + width: 20rpx; + position: absolute; + top: calc(var(--status-bar-height) + 30rpx); + left: 30rpx; + } + .bg_body{ + position: absolute; + top: 414rpx; + left: 0; + .b_qr{ + width: 710rpx; + height: 750rpx; + margin: 0 20rpx; + // background: linear-gradient(to top, #FFE3AE 0%, #FFF6EB 100%); + background: #FFF6EB; + border-radius: 50rpx; + padding: 20rpx; + .qr_body{ + width: 100%; + height: 100%; + border: 5rpx solid #ffd588; + border-radius: 50rpx; + text-align: center; + display: flex; + justify-content: space-evenly; + flex-direction: column; + .qr_code{ + width: 510rpx; + height: 510rpx; + // background-color: #f8962e; + margin: 0 auto; + image{ + width: 100%; + height: 100%; + } + } + .qr_text{ + font-size: 36rpx; + color: #C44100; + font-weight: 500; + } + .qr_tips{ + font-size: 26rpx; + color: #C44100; + } + } + } + .b_user{ + margin-top: 30rpx; + .users{ + display: flex; + justify-content: center; + .avatar{ + height: 100rpx; + width: 100rpx; + border-radius: 50%; + margin: 15rpx; + } + .avatar_no{ + height: 100rpx; + width: 100rpx; + font-weight: 200; + border-radius: 50%; + border: 2rpx dashed #fff; + margin: 15rpx; + background-color: rgba(#fff, 0.3); + display: flex; + justify-content: center; + align-items: center; + } + } + .u_tips{ + color: #FFE5B3; + font-size: 26rpx; + text-align: center; + } + .u_btn{ + margin-top: 30rpx; + margin-bottom: 20rpx; + display: flex; + justify-content: center; + .btn_image{ + width: 403rpx; + height: 113rpx; + } + } + .red_packet{ + display: flex; + flex-direction: column; + align-items: center; + .packet_img{ + width: 750rpx; + position: relative; + .img{ + width: 100%; + } + .p_text{ + position: absolute; + bottom: 120rpx; + width: 100%; + text-align: center; + color: #fff; + .big{ + font-size: 38rpx; + font-weight: 500; + margin-bottom: 30rpx; + } + .smoll{ + font-size: 28rpx; + margin-bottom: 20rpx; + } + .big2{ + font-size: 32rpx; + font-weight: 500; + margin-bottom: 30rpx; + } + .btn_img{ + width: 310rpx; + } + .red_count{ + margin-top: 80rpx; + margin-bottom: 40rpx; + .count{ + font-size: 80rpx; + } + } + } + } + .close_img{ + width: 60rpx; + height: 60rpx; + } + } + } + .b_in_list{ + width: 710rpx; + margin: 0 20rpx; + height: auto; + background-color: #fff; + + border-radius: 50rpx; + padding: 20rpx; + margin-bottom: 30rpx; + display: flex; + flex-direction: column; + align-content: center; + .body_head_img{ + width: 253rpx; + margin: 0 auto; + } + .b_head{ + background-color: #fff2ed; + border-radius: 20rpx; + color: #854116; + display: flex; + margin-top: 28rpx; + text-align: center; + .head_title{ + width: 150rpx; + padding: 20rpx 0; + font-size: 28rpx; + } + } + .b_content{ + .mall{ + font-size: 26rpx; + } + .content_list{ + background-color: #FFF6E9; + border-radius: 20rpx; + color: #C44100; + padding-top: 20rpx; + margin-top: 20rpx; + font-size: 28rpx; + display: flex; + align-items: center; + padding-bottom: 20rpx; + text-align: center; + .content_item{ + overflow: hidden; + } + .avatar{ + width: 100rpx; + height: 100rpx; + border-radius: 50%; + margin-left: 16rpx; + } + } + .none{ + text-align: center; + padding: 20rpx; + } + } + } + } + +} + +</style> diff --git a/pages/newActivity/subsidy/subsidy.vue b/pages/newActivity/subsidy/subsidy.vue new file mode 100644 index 0000000..8eea504 --- /dev/null +++ b/pages/newActivity/subsidy/subsidy.vue @@ -0,0 +1,182 @@ +<template> + <view> + <view style="height: var(--status-bar-height);background-color: #e54841;"></view> + <view class="bg"> + <image class="bg_img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/subsidy.webp"></image> + <image @click="back" class="bg_back" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/back.png"></image> + <view class="bg_title">补贴记录</view> + <view class="b_title"> + <view>总计获得</view> <view class="count">{{total_amount}}</view> <view>元补贴补贴</view> + </view> + <view class="b_body"> + <image class="body_head_img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/srecord.webp"></image> + <view class="b_head"> + <view class="head_title">消费金额</view> + <view class="head_title">补贴金额</view> + <view class="head_title2">补贴获得时间</view> + </view> + <view class="b_content"> + <view class="content_list" v-for="(item, index) in list" :key="index"> + <view class="content_item">{{item.order_amount}}<text class="mall">元</text></view> + <view class="content_item">{{item.coupon_price}}<text class="mall">元</text></view> + <view class="content_item2"><text class="mall">{{item.create_time}}</text></view> + </view> + <view class="mall none" style="padding-top: 0;" v-if="list.length==0" @click="navTo">{{'暂无记录, 去消费领补贴 >>'}}</view> + </view> + </view> + </view> + </view> +</template> + +<script> +import { storeActivityRecord } from "@/api/activity.js" +import { Toast } from "../../../libs/uniApi"; +import { getUserInfo } from '@/api/user.js'; +export default { + data() { + return { + total_amount: '0.00', + list: [] + } + }, + onLoad() {}, + onShow() { + this.storeActivityRecord(); + }, + methods: { + back(){ + uni.navigateBack() + }, + storeActivityRecord(){ + storeActivityRecord().then(res=>{ + this.list = res.data.record; + this.total_amount = res.data.total_amount || "0.00" + }) + }, + navTo(){ + uni.switchTab({ + url:'/pages/index/index' + }) + } + }, + onPullDownRefresh() { + uni.stopPullDownRefresh() + } + } +</script> + +<style lang="scss"> +page{ + background-color: #ffe3bd; +} +.bg{ + position: relative; + height: auto; + .bg_img{ + width: 750rpx; + position: absolute; + top: 0; + left: 0; + } + .bg_back{ + height: 34rpx; + width: 20rpx; + position: absolute; + top: 30rpx; + left: 30rpx; + } + .bg_title{ + font-size: 32rpx; + color: #fff; + font-weight: 500; + position: absolute; + top: 30rpx; + left: 50%; + transform: translate(-50%); + } + .b_title{ + position: absolute; + width: 100%; + height: 70rpx; + top: 225rpx; + left: 0; + text-align: center; + font-size: 36rpx; + color: #F1503F; + display: flex; + justify-content: center; + align-items: flex-end; + .count{ + // height: 100%; + font-size: 66rpx; + font-weight: bold; + margin: 10rpx 20rpx; + } + } + .b_body{ + position: absolute; + width: 710rpx; + margin-left: 21rpx; + margin-right: 19rpx; + height: auto; + background-color: #fff; + top: 534rpx; + left: 0; + border-radius: 50rpx; + padding: 28rpx; + margin-bottom: 30rpx; + display: flex; + flex-direction: column; + align-content: center; + .body_head_img{ + width: 253rpx; + margin: 0 auto; + } + .b_head{ + background-color: #FFF2E0; + border-radius: 20rpx; + color: #C44100; + display: flex; + margin-top: 28rpx; + font-size: 28rpx; + padding: 20rpx 0; + .head_title{ + padding-left: 20rpx; + width: 190rpx; + } + .head_title2{ + padding-left: 20rpx; + width: 280rpx; + } + } + .b_content{ + background-color: #fff2ed; + border-radius: 20rpx; + color: #FF5A3A; + padding-top: 20rpx; + margin-top: 28rpx; + font-size: 32rpx; + .mall{ + font-size: 26rpx; + } + .content_list{ + display: flex; + padding-bottom: 20rpx; + .content_item{ + padding-left: 20rpx; + width: 190rpx; + } + .content_item2{ + padding-left: 20rpx; + width: 280rpx; + } + } + .none{ + text-align: center; + padding: 20rpx; + } + } + } +} + +</style> diff --git a/pages/newActivity/subsidy/subsidy2.vue b/pages/newActivity/subsidy/subsidy2.vue new file mode 100644 index 0000000..33f9ada --- /dev/null +++ b/pages/newActivity/subsidy/subsidy2.vue @@ -0,0 +1,183 @@ +<template> + <view> + <view class="bg"> + <image class="bg_img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/subsidy.webp"></image> + <image @click="back" class="bg_back" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/back.png"></image> + <view class="bg_title">无门槛实物通用补贴</view> + <view class="b_title"> + <view>总计剩余</view> <view class="count">{{total_amount}}</view> <view>元通用补贴</view> + </view> + <view class="b_body"> + <image class="body_head_img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/srecord.webp"></image> + <view class="b_head"> + <view class="head_title">消费金额</view> + <view class="head_title">补贴金额</view> + <view class="head_title2">补贴获得时间</view> + </view> + <view class="b_content"> + <view class="content_list" v-for="(item, index) in list" :key="index"> + <view class="content_item">{{item.order_amount}}<text class="mall">元</text></view> + <view class="content_item">{{item.coupon_price}}<text class="mall">元</text></view> + <view class="content_item2"><text class="mall">{{item.create_time}}</text></view> + </view> + <view class="mall none" style="padding-top: 0;" v-if="list.length==0" @click="navTo">{{'暂无记录, 去消费领补贴 >>'}}</view> + </view> + </view> + </view> + </view> +</template> + +<script> +import { storeActivityRecord } from "@/api/activity.js" +import { Toast } from "../../../libs/uniApi"; +import { getUserInfo } from '@/api/user.js'; +export default { + data() { + return { + total_amount: '0.00', + list: [] + } + }, + onLoad() {}, + onShow() { + this.storeActivityRecord(); + }, + methods: { + back(){ + uni.navigateBack() + }, + storeActivityRecord(){ + storeActivityRecord({ + type: 1 + }).then(res=>{ + this.list = res.data.record; + this.total_amount = res.data.total_amount || "0.00" + }) + }, + navTo(){ + uni.switchTab({ + url:'/pages/index/index' + }) + } + }, + onPullDownRefresh() { + uni.stopPullDownRefresh() + } + } +</script> + +<style lang="scss"> +page{ + background-color: #ffe3bd; +} +.bg{ + position: relative; + height: auto; + .bg_img{ + width: 750rpx; + position: absolute; + top: 0; + left: 0; + } + .bg_back{ + height: 34rpx; + width: 20rpx; + position: absolute; + top: calc(var(--status-bar-height) + 30rpx); + left: 30rpx; + } + .bg_title{ + font-size: 32rpx; + color: #fff; + font-weight: 500; + position: absolute; + top: calc(var(--status-bar-height) + 30rpx); + left: 50%; + transform: translate(-50%); + } + .b_title{ + position: absolute; + width: 100%; + height: 70rpx; + top: 225rpx; + left: 0; + text-align: center; + font-size: 36rpx; + color: #F1503F; + display: flex; + justify-content: center; + align-items: flex-end; + .count{ + // height: 100%; + font-size: 66rpx; + font-weight: bold; + margin: 10rpx 20rpx; + } + } + .b_body{ + position: absolute; + width: 710rpx; + margin-left: 21rpx; + margin-right: 19rpx; + height: auto; + background-color: #fff; + top: 534rpx; + left: 0; + border-radius: 50rpx; + padding: 28rpx; + margin-bottom: 30rpx; + display: flex; + flex-direction: column; + align-content: center; + .body_head_img{ + width: 253rpx; + margin: 0 auto; + } + .b_head{ + background-color: #FFF2E0; + border-radius: 20rpx; + color: #C44100; + display: flex; + margin-top: 28rpx; + font-size: 28rpx; + padding: 20rpx 0; + .head_title{ + padding-left: 20rpx; + width: 190rpx; + } + .head_title2{ + padding-left: 20rpx; + width: 280rpx; + } + } + .b_content{ + background-color: #fff2ed; + border-radius: 20rpx; + color: #FF5A3A; + padding-top: 20rpx; + margin-top: 28rpx; + font-size: 32rpx; + .mall{ + font-size: 26rpx; + } + .content_list{ + display: flex; + padding-bottom: 20rpx; + .content_item{ + padding-left: 20rpx; + width: 190rpx; + } + .content_item2{ + padding-left: 20rpx; + width: 280rpx; + } + } + .none{ + text-align: center; + padding: 20rpx; + } + } + } +} + +</style> diff --git a/pages/newActivity/subsidy/subsidy3.vue b/pages/newActivity/subsidy/subsidy3.vue new file mode 100644 index 0000000..766cd60 --- /dev/null +++ b/pages/newActivity/subsidy/subsidy3.vue @@ -0,0 +1,183 @@ +<template> + <view> + <view class="bg"> + <image class="bg_img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/subsidy.webp"></image> + <image @click="back" class="bg_back" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/back.png"></image> + <view class="bg_title">现金抵扣补贴</view> + <view class="b_title"> + <view>总计剩余</view> <view class="count">{{total_amount}}</view> <view>元抵扣补贴</view> + </view> + <view class="b_body"> + <image class="body_head_img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/srecord.webp"></image> + <view class="b_head"> + <view class="head_title">消费金额</view> + <view class="head_title">补贴金额</view> + <view class="head_title2">补贴获得时间</view> + </view> + <view class="b_content"> + <view class="content_list" v-for="(item, index) in list" :key="index"> + <view class="content_item">{{item.order_amount}}<text class="mall">元</text></view> + <view class="content_item">{{item.coupon_price}}<text class="mall">元</text></view> + <view class="content_item2"><text class="mall">{{item.create_time}}</text></view> + </view> + <view class="mall none" style="padding-top: 0;" v-if="list.length==0" @click="navTo">{{'暂无记录, 去消费领补贴 >>'}}</view> + </view> + </view> + </view> + </view> +</template> + +<script> +import { storeActivityRecord } from "@/api/activity.js" +import { Toast } from "../../../libs/uniApi"; +import { getUserInfo } from '@/api/user.js'; +export default { + data() { + return { + total_amount: '0.00', + list: [] + } + }, + onLoad() {}, + onShow() { + this.storeActivityRecord(); + }, + methods: { + back(){ + uni.navigateBack() + }, + storeActivityRecord(){ + storeActivityRecord({ + type: 2 + }).then(res=>{ + this.list = res.data.record; + this.total_amount = res.data.total_amount || "0.00" + }) + }, + navTo(){ + uni.switchTab({ + url:'/pages/index/index' + }) + } + }, + onPullDownRefresh() { + uni.stopPullDownRefresh() + } + } +</script> + +<style lang="scss"> +page{ + background-color: #ffe3bd; +} +.bg{ + position: relative; + height: auto; + .bg_img{ + width: 750rpx; + position: absolute; + top: 0; + left: 0; + } + .bg_back{ + height: 34rpx; + width: 20rpx; + position: absolute; + top: calc(var(--status-bar-height) + 30rpx); + left: 30rpx; + } + .bg_title{ + font-size: 32rpx; + color: #fff; + font-weight: 500; + position: absolute; + top: calc(var(--status-bar-height) + 30rpx); + left: 50%; + transform: translate(-50%); + } + .b_title{ + position: absolute; + width: 100%; + height: 70rpx; + top: 225rpx; + left: 0; + text-align: center; + font-size: 36rpx; + color: #F1503F; + display: flex; + justify-content: center; + align-items: flex-end; + .count{ + // height: 100%; + font-size: 66rpx; + font-weight: bold; + margin: 10rpx 20rpx; + } + } + .b_body{ + position: absolute; + width: 710rpx; + margin-left: 21rpx; + margin-right: 19rpx; + height: auto; + background-color: #fff; + top: 534rpx; + left: 0; + border-radius: 50rpx; + padding: 28rpx; + margin-bottom: 30rpx; + display: flex; + flex-direction: column; + align-content: center; + .body_head_img{ + width: 253rpx; + margin: 0 auto; + } + .b_head{ + background-color: #FFF2E0; + border-radius: 20rpx; + color: #C44100; + display: flex; + margin-top: 28rpx; + font-size: 28rpx; + padding: 20rpx 0; + .head_title{ + padding-left: 20rpx; + width: 190rpx; + } + .head_title2{ + padding-left: 20rpx; + width: 280rpx; + } + } + .b_content{ + background-color: #fff2ed; + border-radius: 20rpx; + color: #FF5A3A; + padding-top: 20rpx; + margin-top: 28rpx; + font-size: 32rpx; + .mall{ + font-size: 26rpx; + } + .content_list{ + display: flex; + padding-bottom: 20rpx; + .content_item{ + padding-left: 20rpx; + width: 190rpx; + } + .content_item2{ + padding-left: 20rpx; + width: 280rpx; + } + } + .none{ + text-align: center; + padding: 20rpx; + } + } + } +} + +</style> diff --git a/pages/newActivity/towPrice/towPrice.vue b/pages/newActivity/towPrice/towPrice.vue new file mode 100644 index 0000000..f596f04 --- /dev/null +++ b/pages/newActivity/towPrice/towPrice.vue @@ -0,0 +1,333 @@ +<template> + <view> + <view class="bg"> + <image class="bg_img" mode="widthFix" + src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/tow_price_bg.webp"></image> + <image @click="back" class="bg_back" + src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/back.png"></image> + <view class="b_body"> + <view class="b_content"> + <view style="padding-bottom: 16rpx;"> + <picker :range="addressList" range-key="street_name" @change="changeAddress"> + <block v-if="address.street_id"> + 当前活动区域为 <text style="color: #f84221;margin-left: 5rpx;">[ {{address.townName}} ] , 点击切换</text> + </block> + <block v-else> + <text style="color: #f84221;margin-left: 5rpx;">当前区域 [ {{address.townName}} ] 没有活动 , 点击切换</text> + </block> + </picker> + </view> + <block v-if="goodsList.length>0"> + <view v-if="item.product" v-for="(item, index) in goodsList" class="short_item" @click="clickProduct(item)"> + <image class="image" :src="item.product.image"></image> + <view class="short_item_right"> + <view class="r_name"> + <text v-if="item.mer_labels_name" class="mer-labels">{{item.mer_labels_name}}</text>{{item.product.store_name}} + </view> + <view style="display: flex;justify-content: flex-start;margin-top: 5rpx;"> + <view class="r_street" v-if="item.merchant">{{item.merchant.street_name}}</view> + <view class="r_type" v-if="item.product.store_info||getSkuName(item)||item.unit_name"> + <view v-if="getSkuName(item)">{{getSkuName(item)}}</view> + <view v-else-if="item.unit_name">{{item.unit_name}}</view> + </view> + </view> + <view class="r_btn" v-if="item.product && item.product.price"> + <view style="color: #7f7f7f;">¥<text style="font-size: 33rpx;">{{ item.product.price.split('.')[0] }}.</text>{{item.product.price.split('.')[1]}} 限时特惠</view> + <view class="qiang" :class="{'no_qiang': !can_buy}">¥{{item.limited_price}} 抢</view> + <!-- <image src="@/static/images/icon/plus.png" style="width: 40rpx;height: 40rpx;border-radius: 40rpx;"></image> --> + </view> + </view> + </view> + </block> + <block v-else> + <image style="width: 100%;" mode="widthFix" src="/static/img/no_short.f2ffcd1c.png"></image> + <view style="text-align: center;color: #999;">此区域没有找到活动商品,切换其他地方试试呢</view> + </block> + </view> + </view> + </view> + <shortPopupActive ref="shortPopupRef" @addCart="loadCart" :source="105" isBuy></shortPopupActive> + <u-modal :show="show" :closeOnClickOverlay="true" :title="`[${activity.title}]`" + content="选择活动后只有完成活动任务后才可参加另一个活动, 确定要参与这个活动吗" cancelText="我再想想" confirmText="参加活动" confirmColor="#e54841" + @cancel="show = false" @confirm="joinA()" showCancelButton></u-modal> + <authorize @onLoadFun="onLoadFun" :isAuto="isAuto" :isShowAuth="isShowAuth" @authColse="authColse" + :isGoIndex="false"></authorize> + </view> +</template> + +<script> + import { getArticleList } from "@/api/api.js" + import { Toast } from "../../../libs/uniApi"; + import authorize from "@/components/Authorize.vue"; + import { getUserInfo } from '@/api/user.js'; + import shortPopupActive from "@/components/shortPopupActive.vue" + import { storeActivityProduct, storeActivityDistrict } from "@/api/activity.js" + import { + getCartCounts, + getCartList, + } from '@/api/order.js'; + export default { + components: { + authorize, + shortPopupActive + }, + data() { + return { + info: {}, + userInfo: {}, + Alist: [], + activity: { + title: '' + }, + address: { + townName: '', + street_id: '' + }, + show: false, + isAuto: false, //没有授权的不会自动授权 + isShowAuth: false, //是否隐藏授权 + addressList: [], + goodsList: [], + goodsNum: 0, + can_buy: 0, // 是否可以购买, 0不可以, 1可以 + } + }, + onLoad(options) { + this.address = { + street_id: options.street_id, + townName: options.townName + } + }, + onShow() { + this.getUserInfo(); + this.loadList(); + this.cartFn(); + this.loadAddressList(); + }, + methods: { + changeAddress(e){ + this.address = { + street_id: this.addressList[e.detail.value].street_code, + townName: this.addressList[e.detail.value].street_name + } + this.loadList(); + }, + back() { + uni.navigateBack() + }, + getUserInfo() { + getUserInfo().then(res => { + this.userInfo = res.data; + }).catch(err => { + console.log(err); + }) + }, + loadList(){ + let location = ''; + if(this.$store.state.storage.location.lat) location = this.$store.state.storage.location.lat + ',' + this.$store.state.storage.location.long; + storeActivityProduct({ + street_code: this.address.street_id, + activity_id: 2, //默认传2 + location: location, + source: 105 + }).then(res => { + this.can_buy = res.data.can_buy; + this.goodsList = res.data.list; + }).catch(e=>{ + Toast(e.msg||e.message||e) + }) + }, + loadAddressList(){ + storeActivityDistrict().then(res=>{ + this.addressList = res.data; + if(!this.addressList.find(item=>item.street_code==this.address.street_id)){ + this.address.street_id = '' + } + }) + }, + // 获取规格名称 + getSkuName(item){ + return Object.keys(item.sku).join('/')||null; + }, + // 点击商品 + clickProduct(data){ + if(!this.address.townName) return Toast('请先选择活动区域') + if(!this.can_buy){ + return Toast('活动限购一件, 您已经买过了哦~') + } + this.$refs.shortPopupRef.setDatas(data, this.goodsNum); + this.$refs.shortPopupRef.open(); + }, + // 刷新购物车 + loadCart(){ + this.cartFn(); + }, + // 购物车信息 + cartFn() { + getCartCounts({ + source: 105, + // product_type: 98 + }).then(res => { + this.goodsNum = res.data[0].count + }) + }, + // 授权回调 + onLoadFun(data) { + this.getUserInfo(); + this.isShowAuth = false; + }, + // 打开授权 + openAuto() { + // console.log('hajhcdsohjcosvjco') + this.isAuto = true; + this.isShowAuth = true + }, + // 授权关闭 + authColse: function(e) { + this.isShowAuth = e + }, + }, + onPullDownRefresh() { + uni.stopPullDownRefresh() + } + } +</script> + +<style lang="scss"> + page { + background-color: #fff5dd; + } + + .bg { + position: relative; + padding-bottom: 30rpx; + + .bg_img { + width: 750rpx; + height: 652rpx; + position: absolute; + top: 0; + left: 0; + } + + .bg_back { + height: 34rpx; + width: 20rpx; + position: absolute; + top: calc(var(--status-bar-height) + 30rpx); + left: 30rpx; + } + + .b_body { + width: 710rpx; + margin-left: 21rpx; + margin-right: 19rpx; + height: auto; + background-color: #fff; + border-radius: 0 0 60rpx 60rpx; + padding: 28rpx; + padding-top: 680rpx; + margin-bottom: 30rpx; + + .b_content { + width: 100%; + // height: 800rpx; + // background-color: #eee; + .short_item { + // padding: 20rpx; + padding-bottom: 30rpx; + display: flex; + justify-content: space-between; + + .image { + height: 200rpx; + width: 200rpx; + border-radius: 21.03rpx 21.03rpx 21.03rpx 21.03rpx; + margin-right: 20rpx; + flex-shrink: 0; + } + + .short_item_right { + width: 430rpx; + display: flex; + flex-direction: column; + justify-content: space-between; + + .r_name { + width: 100%; + height: 80rpx; + font-size: 28rpx; + line-height: 40rpx; + text-overflow: ellipsis; + display: -webkit-box; /* 使用弹性盒子布局 */ + -webkit-box-orient: vertical; /* 设置为垂直方向布局 */ + overflow: hidden; /* 隐藏超出部分 */ + -webkit-line-clamp: 2; /* 限制显示两行文本 */ + .mer-labels{ + background-color: #f84221; + color: #fff; + font-size: 18rpx; + padding: 4rpx 8rpx; + border-radius: 5rpx; + margin-right: 8rpx; + } + } + + .r_type { + font-size: 22.78rpx; + color: #737373; + flex: 1; + overflow: hidden; + display: flex; + + view { + height: 39rpx; + line-height: 39rpx; + background: #FEF5F3; + padding: 0 16rpx; + border-radius: 39rpx; + text-overflow: ellipsis; + } + } + + .r_btn { + display: flex; + justify-content: space-between; + font-size: 22.78rpx; + color: #F84221; + align-items: center; + background-color: rgba(#F84221, 0.1); + padding-left: 15rpx; + border-radius: 0 60rpx 60rpx 0; + .qiang{ + width: 160rpx; + height: 60rpx; + display: flex; + justify-content: center; + align-items: center; + background-color: #F84221; + color: #fff; + border-radius: 60rpx; + font-weight: bold; + font-size: 28rpx; + } + .no_qiang{ + background-color: #7f7f7f; + } + } + .r_street{ + font-size: 24rpx; + height: 39rpx; + line-height: 39rpx; + color: #7f7f7f; + padding-right: 10rpx; + } + } + } + } + + } + + + } +</style> \ No newline at end of file diff --git a/pages/redpacket/redpack_type.vue b/pages/redpacket/redpack_type.vue new file mode 100644 index 0000000..e101723 --- /dev/null +++ b/pages/redpacket/redpack_type.vue @@ -0,0 +1,220 @@ +<template> + <view class="red_body"> + <view class="bg"> + <image mode="widthFix" src="/static/active/redpack_type_img.webp"></image> + <view class="border"></view> + </view> + <view class="bg_back"> + <image @click="back" class="bc_image" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/back.png"></image> + <view class="title">补贴余额</view> + </view> + <view class="r_list" v-for="(item, index) in list" :key="index"> + <view class="r_item" @click="navgo(item)"> + <image class="r_bg" src="/static/active/red_packet.webp"></image> + <view class="r_body"> + <view class="r_count"> + <view class="rc_count"> + <text class="rc_icon">¥</text>{{item.total_amount}} + </view> + </view> + <view class="r_content"> + <view class="r_name">{{item.type_cn}}</view> + </view> + <view class="r_btn"> + 查看 + </view> + </view> + </view> + </view> + <view style="width: 100%;height: 260rpx;"></view> + <!-- <view class="activity"> + <image mode="widthFix" @click="navTo()" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/activity1.webp"></image> + </view> --> + </view> +</template> + +<script> + import { storeActivityTotal } from "@/api/activity.js" + export default { + data() { + return { + list: [] + } + }, + onLoad() {}, + onShow() { + this.storeActivityTotal(); + }, + methods: { + storeActivityTotal(){ + storeActivityTotal().then(res=>{ + this.list = res.data; + }) + }, + back(){ + uni.navigateBack(); + }, + navgo(item){ + if(item.type==1) uni.navigateTo({ + url: '/pages/newActivity/subsidy/subsidy2' + }) + else if(item.type==2) uni.navigateTo({ + url: '/pages/newActivity/subsidy/subsidy3' + }) + }, + navTo(){ + let address = this.$store.state.storage.address; + let location = this.$store.state.storage.location; + if(address.street_id){ + uni.navigateTo({ + url: `/pages/nongKe/cloud_entrepot/indexh?street_id=${address.street_id}&townName=${address.townName}&source=103&location=${location.lat},${location.long}` + }) + }else uni.navigateTo({ + url: `/pages/nongKe/cloud_entrepot/indexh` + }) + } + }, + onPullDownRefresh() { + uni.stopPullDownRefresh() + } + } +</script> + +<style lang="scss"> + .red_body{ + position: relative; + background: linear-gradient(to top, rgb(255,231,185), rgb(255,249,231) 480rpx); + min-height: calc(100vh); + .bg{ + width: 750rpx; + height: 480rpx; + overflow: hidden; + position: relative; + image{ + width: 100%; + height: 100%; + } + .border{ + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 30rpx; + border-radius: 30rpx 30rpx 0 0; + background-color: rgb(255,249,231); + } + } + .bg_back{ + position: absolute; + top: var(--status-bar-height); + left: 0; + width: 100%; + padding: 30rpx; + color: #fff; + display: flex; + text-align: center; + .bc_image{ + height: 34rpx; + width: 20rpx; + } + .title{ + position: absolute; + top: 30rpx; + left: 50%; + transform: translate(-50%); + } + } + } + .r_list { + padding: 0 20rpx 20rpx 20rpx; + + .r_item { + height: 156rpx; + width: 710rpx; + position: relative; + + .r_bg { + width: 100%; + height: 100%; + } + + .r_body { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + display: flex; + align-items: center; + + .r_count { + flex: 2; + display: flex; + justify-content: center; + align-items: center; + color: #A46F32; + font-size: 44rpx; + font-weight: bold; + + .rc_count { + display: flex; + align-items: flex-end; + } + + .rc_icon { + font-size: 28rpx; + font-weight: 500; + margin-bottom: 8rpx; + } + } + + .r_content { + flex: 4; + color: #FFF3CC; + font-size: 24rpx; + padding: 18rpx 10rpx 18rpx 40rpx; + display: flex; + flex-direction: column; + justify-content: center; + + .r_name { + font-size: 32rpx; + font-weight: 500; + margin-bottom: 10rpx; + } + + view { + width: 100%; + overflow: hidden; + /* 隐藏超出宽度的文本 */ + white-space: nowrap; + /* 不换行 */ + text-overflow: ellipsis; + /* 文本末尾显示省略号 */ + } + } + + .r_btn { + flex: 1; + display: flex; + justify-content: center; + align-items: center; + color: #FFF3CC; + height: 59rpx; + border-radius: 28rpx 28rpx 28rpx 28rpx; + opacity: 1; + border: 1rpx solid #FFF3CC; + margin-right: 20rpx; + } + } + } + } + .activity{ + position: fixed; + bottom: 100rpx; + padding: 20rpx; + image{ + width: 710rpx; + } + } +</style> \ No newline at end of file diff --git a/pages/redpacket/redpacket.vue b/pages/redpacket/redpacket.vue new file mode 100644 index 0000000..c5f26e7 --- /dev/null +++ b/pages/redpacket/redpacket.vue @@ -0,0 +1,313 @@ +<template> + <view class=""> + <!-- <block v-for="(item, index) in info"> + <block v-if="item.type==1"> + <view class="type_name">无门槛实物通用补贴<text class="n_count">(2张)</text></view> + <view class="r_list" v-for="(e, i) in item.list"> + <view class="r_item" @click="change(index, i)"> + <image class="r_bg" src="/static/active/red_packet.webp"></image> + <view class="r_body"> + <view class="r_count"> + <view class="rc_count"> + <text class="rc_icon">¥</text>240 + </view> + </view> + <view class="r_content"> + <view class="r_name">现金抵扣补贴</view> + <view>仅限平台指定商家商品可使用</view> + <view>有效期至 2026.01.15 24:00:00</view> + </view> + <view class="r_icon"> + <u-icon v-if="changeRed.type == index && changeRed.id == i" name="checkmark-circle-fill" color="#FFF3CC" size="56rpx"></u-icon> + <u-icon v-else name="checkmark-circle" color="#FFF3CC" size="56rpx"></u-icon> + </view> + </view> + </view> + </view> + </block> + <block v-if="item.type==2"> + <view class="type_name">不可使用补贴<text class="n_count">(2张)</text></view> + <view class="none_list" v-for="(e, i) in item.list"> + <view class="r_body"> + <view class="r_count"> + <view class="rc_count"> + <text class="rc_icon">¥</text>200 + </view> + </view> + <view class="r_content"> + <view class="r_name">现金抵扣补贴</view> + <view>仅限平台指定商家商品可使用</view> + <view>有效期至 2026.01.15 24:00:00</view> + </view> + </view> + <u-line dashed color="#999999"></u-line> + <view class="n_tips">本单不可用原因:未在平台指定店铺使用</view> + </view> + </block> + </block> --> + + <view style="height: 30rpx;"></view> + <view class="r_list" v-for="(item, i) in list" :key="i"> + <view class="r_item" @click="change(item)"> + <image class="r_bg" src="/static/active/red_packet.webp"></image> + <view class="r_body"> + <view class="r_count"> + <view class="rc_count"> + <text class="rc_icon">¥</text>{{item.balance}} + </view> + </view> + <view class="r_content"> + <view class="r_name">{{item.coupon_title}}</view> + <view>{{item.describe}}</view> + <view>有效期至 {{item.end_time}}</view> + </view> + <view class="r_icon"> + <u-icon v-if="changeRed&&changeRed.coupon_user_id==item.coupon_user_id" name="checkmark-circle-fill" color="#FFF3CC" size="56rpx"></u-icon> + <!-- <u-icon v-else name="checkmark-circle" color="#FFF3CC" size="56rpx"></u-icon> --> + <view v-else style="height: 50rpx;width: 50rpx;border-radius: 50%;border: 5rpx solid #FFF3CC;"></view> + </view> + </view> + </view> + </view> + + <view class="footer"> + <view> + <text>已选 {{ changeRed?1:0 }} 张</text> + <view v-if="changeRed&&changeRed.coupon_title.includes('抵扣补贴')" style="font-size: 24rpx;margin-left: 10rpx;color: #ed4c3a;">(使用补贴后此订单将不参与任何补贴活动)</view> + <view v-if="changeRed&&changeRed.coupon_title.includes('通用补贴')" style="font-size: 24rpx;margin-left: 10rpx;color: #ed4c3a;">(使用补贴后此订单将不参与用户消费补贴活动)</view> + <!-- , 可减 <text class="red_i">¥</text> <text class="red_c">0</text> --> + </view> + <view class="btn" @click="comfirm">确定</view> + </view> + </view> +</template> + +<script> + export default { + data() { + return { + info: [ + { + type: 1, // 是否可以使用 + name: '无门槛实物通用补贴', + list: [1, 2] + }, + { + type: 1, // 是否可以使用 + name: '现金抵扣补贴', + list: [1,2,3] + }, + { + type: 2, // 是否可以使用, 2不可以使用 + name: '不可使用补贴', + list: [1] + } + ], + list: [], + changeRed: null, + } + }, + onLoad(option) { + const eventChannel = this.getOpenerEventChannel(); + // 监听acceptDataFromOpenerPage事件,获取上一页面通过eventChannel传送到当前页面的数据 + eventChannel.on('changeRedPacketInfo', (data) => { + console.log(data); + this.list = data; + }) + }, + onShow() {}, + methods: { + change(e, i) { + console.log(e, i); + if(this.changeRed&&this.changeRed.coupon_user_id==e.coupon_user_id)this.changeRed = null; + else this.changeRed = e; + }, + comfirm(){ + uni.$emit('changeRedPacket', this.changeRed?.coupon_user_id||''); + uni.navigateBack() + } + }, + onPullDownRefresh() { + uni.stopPullDownRefresh() + } + } +</script> + +<style lang="scss"> + page{ + background-color: #fff; + } + .type_name{ + padding: 20rpx; + font-size: 28rpx; + .n_count{ + color: #7A7A7A; + font-size: 24rpx; + margin-left: 10rpx; + } + } + .r_list { + padding: 0 20rpx 20rpx 20rpx; + + .r_item { + height: 156rpx; + width: 710rpx; + position: relative; + + .r_bg { + width: 100%; + height: 100%; + } + + .r_body { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + display: flex; + + .r_count { + flex: 2; + display: flex; + justify-content: center; + align-items: center; + color: #A46F32; + font-size: 44rpx; + font-weight: bold; + + .rc_count { + display: flex; + align-items: flex-end; + } + + .rc_icon { + font-size: 28rpx; + font-weight: 500; + margin-bottom: 8rpx; + } + } + + .r_content { + flex: 4; + color: #FFF3CC; + font-size: 24rpx; + padding: 18rpx 10rpx 18rpx 40rpx; + display: flex; + flex-direction: column; + justify-content: space-between; + + .r_name { + font-size: 32rpx; + font-weight: 500; + margin-bottom: 10rpx; + } + view{ + width: 100%; + overflow: hidden; /* 隐藏超出宽度的文本 */ + white-space: nowrap; /* 不换行 */ + text-overflow: ellipsis; /* 文本末尾显示省略号 */ + } + } + + .r_icon { + flex: 1; + display: flex; + align-items: center; + } + } + } + } + .none_list{ + margin: 0 20rpx 20rpx 20rpx; + background-color: #E2E2E2; + border-radius: 20rpx; + + .r_body { + height: 156rpx; + width: 710rpx; + display: flex; + + .r_count { + flex: 2; + display: flex; + justify-content: center; + align-items: center; + color: #333; + font-size: 44rpx; + font-weight: bold; + + .rc_count { + display: flex; + align-items: flex-end; + } + + .rc_icon { + font-size: 28rpx; + font-weight: 500; + margin-bottom: 8rpx; + } + } + + .r_content { + flex: 5; + color: #333; + font-size: 24rpx; + padding: 18rpx 10rpx 18rpx 40rpx; + display: flex; + flex-direction: column; + justify-content: space-between; + + .r_name { + font-size: 32rpx; + font-weight: 500; + margin-bottom: 10rpx; + } + view{ + width: 100%; + overflow: hidden; /* 隐藏超出宽度的文本 */ + white-space: nowrap; /* 不换行 */ + text-overflow: ellipsis; /* 文本末尾显示省略号 */ + } + } + + } + + .n_tips{ + padding: 10rpx 30rpx 20rpx 30rpx; + color: #333; + font-size: 24rpx; + } + } + .footer{ + height: 130rpx; + padding: 30rpx; + width: 100%; + position: fixed; + bottom: 0; + left: 0; + background-color: #F6F6F6; + display: flex; + justify-content: space-between; + align-items: center; + font-size: 28rpx; + .red_i{ + color: #FF421D; + margin-left: 20rpx; + } + .red_c{ + color: #FF421D; + font-size: 44rpx; + } + .btn{ + width: 128rpx; + height: 68rpx; + background-color: #EC693F; + border-radius: 34rpx; + display: flex; + justify-content: center; + align-items: center; + color: #fff; + } + } +</style> \ No newline at end of file diff --git a/pages/store/settled/unit.vue b/pages/store/settled/unit.vue new file mode 100644 index 0000000..fa4249f --- /dev/null +++ b/pages/store/settled/unit.vue @@ -0,0 +1,1661 @@ +<template> + <view class="page"> + <!-- #ifdef MP || APP-PLUS --> + + <view class="conten-top" :style="'height:'+statusBarHeight+'px'"> + <view class="" style="position: absolute;left: 30rpx;bottom: 15rpx;" @click="logout"><i + class="iconfont icon-xiangzuo" style="font-size: 40rpx;text-align: left;"></i></view> + <view class="" + style="position: absolute;bottom: 15rpx;width: 500rpx; left:50%;transform: translate(-50%);text-align: center;"> + 种养殖户入驻 + </view> + </view> + <view :style="'height:'+statusBarHeight+'px'"></view> + <!-- #endif --> + + <view v-if="!successful" :style="viewColor"> + <form report-submit='true'> + <view class='merchantsSettled'> + <view class="merchantBgCount"> + <image mode="widthFix" class="merchantBg" + src="https://lihai001.oss-cn-chengdu.aliyuncs.com/def/50c52202402231430498637.png" alt=""> + </view> + <view class="application-record" @click="jumpToList" v-if="!mer_i_id"> + 申请记录 + <text class="iconfont icon-xiangyou"></text> + </view> + <view class='list'> + <!-- <view class="item"> + <view class="acea-row row-middle"> + <text class="item-name">商户名称</text> + <input type="text" maxlength="30" placeholder="请输入商户名称" + v-model="merchantData.enterprise_name" @input="validateBtn" + placeholder-class='placeholder' /> + </view> + </view> --> + <view class="item"> + <view class="acea-row row-middle"> + <text class="item-name">姓名</text> + <input type="text" maxlength="30" placeholder="请输入姓名" v-model="merchantData.user_name" + @input="validateBtn" placeholder-class='placeholder' /> + </view> + </view> + + + <view class="item"> + <view class="acea-row row-middle"> + <text class="item-name">联系电话</text> + <input type="text" placeholder="请输入手机号" v-model="merchantData.phone" + @input="validateBtn" placeholder-class='placeholder' /> + </view> + </view> + <view class="item rel"> + <view class="acea-row row-middle"> + <text class="item-name">验证码</text> + <input type="text" placeholder="填写验证码" v-model="merchantData.yanzhengma" + @input="validateBtn" class="codeIput" placeholder-class='placeholder' /> + <button class="code" :disabled="disabled" :class="disabled === true ? 'on' : ''" + @click="handleVerify"> + {{ text }} + </button> + </view> + </view> + <view class="item" v-if="isShowCode"> + <view class="acea-row row-middle"> + <text class="item-name">验证码</text> + <input type="text" placeholder="请输入验证码" class="codeIput" v-model="codeVal" + @input="validateBtn" placeholder-class='placeholder' /> + <view class="imageCode" @click="again"> + <image :src="codeUrl" /> + </view> + </view> + </view> + <!-- <view class="item"> + <view class="uni-list"> + <view class="uni-list-cell"> + <view class="uni-list-cell-db acea-row row-middle"> + <text class="item-name">商户分类</text> + <picker @change="bindPickerChange" @columnchange="columnchange" mode="selector" :value="index" :range="array" range-key="category_name"> + <input placeholder="请选择商户分类" type="text" readonly disabled + v-model="mer_classification"> + <view class='iconfont icon-jiantou'></view> + </picker> + </view> + </view> + </view> + </view> --> + <view class="item"> + <view class="uni-list"> + <view class="uni-list-cell"> + <view class="uni-list-cell-db acea-row row-middle"> + <text class="item-name businessBox">所在地</text> + <picker mode=multiSelector @change="bindPickerChange2" :value="index2" + :range="business" range-key="name" @columnchange="pickerColumnchange"> + <input class="businessBox" placeholder="请选择商圈" type="text" readonly disabled + v-model="business_name"> + <view class='iconfont icon-jiantou'></view> + </picker> + </view> + </view> + </view> + </view> + <view class="item"> + <view class="uni-list"> + <view class="uni-list-cell"> + <view class="uni-list-cell-db acea-row row-middle"> + <text class="item-name businessBox">详细地址</text> + <input type="text" maxlength="30" placeholder="请输入详细地址" + v-model="merchantData.address" @input="validateBtn" + placeholder-class='placeholder' /> + + </view> + </view> + </view> + </view> + <view class="item no-border"> + <view class='acea-row row-middle'> + <text class="item-title" style="margin-right: 20rpx;">请上传营业执照</text> + <text class="item-desc">(图片格式支持JPG、PNG、JPEG)</text> + <view class="upload"> + <view v-if="business_license" class='pictrue' @click='uploadpicText'> + <image :src='business_license'></image> + </view> + <view v-else class='pictrue acea-row row-center-wrapper row-column' + @click='uploadpicText'> + <text class='iconfont icon-icon25201'></text> + <view>上传图片</view> + </view> + </view> + </view> + </view> + <!-- <view class="item no-border"> + <checkbox-group @change='ChangeIsAgree'> + <checkbox class="checkbox" :checked="isAgree ? true : false" />已阅读并同意 + </checkbox-group> + <button class="settleAgree" @click="getConfig">《入驻协议》</button> + </view> --> + <view class="item no-border"> + <checkbox-group @change='ChangeIsAgree'> + <checkbox class="checkbox" :checked="isAgree ? true : false" />已阅读并同意 + </checkbox-group> + <button class="settleAgree" @click="getConfig(0)">《入驻协议》 </button> + <button class="settleAgree" @click="getConfig(1)">《商户服务协议》 </button> + + </view> + <button class='submitBtn' :class="validate === true? 'on':''" @click="formSubmit"> + 提交申请 + </button> + </view> + </view> + </form> + <view class="settlementAgreement" v-if="showProtocol"> + <view class="setAgCount" style="width: 656rpx;height: 800rpx;"> + <i class="icon iconfont icon-cha" @click="showProtocol = false"></i> + <div class="title" v-if='titFlag'>{{isType ? '店铺类型说明' : '商户入驻协议'}}</div> + <div class="title" v-else></div> + <view class="content"> + <jyf-parser :html="protocol" ref="article" :tag-style="tagStyle"></jyf-parser> + <!-- <view v-html="protocol"></view> --> + </view> + </view> + </view> + <view class="settlementAgreement" v-if="isshow"> + <view class="setAgCount" style="width: 100%;height: 100%;padding-top: 180rpx;"> + <!-- <i class="icon iconfont icon-cha" @click="recuo"></i> --> + <view class="" style="width: 60rpx;height: 60rpx; position: absolute;left: 30rpx; top:90rpx" + @click="recuo"> + <i class="iconfont icon-xiangzuo" style="width: 60rpx;height: 60rpx;font-size: 40rpx;"></i> + <!-- <image src="@/static/images/close.png" mode="aspectFit" style="width: 60rpx;height: 60rpx;"></image> --> + </view> + + <div class="title">{{detail.title}}</div> + <view style="margin: 20rpx 0;">甲方公司:{{company?company:"暂无公司信息"}}</view> + <view style="margin: 20rpx 0;">机构代码:{{organization_code?organization_code:"暂无公司信息"}}</view> + + <view class="contenta" v-if="detail.mer_services_agree"> + <jyf-parser :html="detail.mer_services_agree" ref="article" :tag-style="tagStyle"></jyf-parser> + + </view> + <view class="contenta" v-else> + <jyf-parser :html="detail.mer_supply_agree" ref="article" :tag-style="tagStyle"></jyf-parser> + + </view> + + <view class="setAgCountbtn"> + <view class="border"></view> + <!-- <button class="setAgCountbtna" @click="refuse"> + 拒绝 + </button> --> + <button :class="num>0?'setAgCountbtnb':'setAgCountbtnc'" class="btn" :disabled="num!=0" + @click="agree"> + <text v-if="num>0">请仔细阅读协议 {{num}}秒后可提交</text> + <text v-else>同意本协议</text> + </button> + </view> + </view> + </view> + <view class='loadingicon acea-row row-center-wrapper' v-if="loading"> + <text class='loading iconfont icon-jiazai' :hidden='loading==false'></text> + </view> + <authorize @onLoadFun="onLoadFun" :isAuto="isAuto" :isShowAuth="isShowAuth" @authColse="authColse"> + </authorize> + <Verify @success="success" :captchaType="'blockPuzzle'" :imgSize="{ width: '330px', height: '155px' }" + ref="verify"> + </Verify> + </view> + <view class="settledSuccessMain " v-else :style="viewColor"> + <view class="settledSuccessful"> + <image class="image" src="../static/images/settledSuccessful.svg" alt=""> + <view class="title">恭喜,您的资料提交成功!</view> + <view class="info">预计15个工作日内审核完毕,平台客服会及时与您联系!</view> + <view class="goHome" hover-class="none" @click="goHome"> + 返回首页 + </view> + </view> + </view> + </view> +</template> +<script> + // +---------------------------------------------------------------------- + // | CRMEB [ CRMEB赋能开发者,助力企业发展 ] + // +---------------------------------------------------------------------- + // | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved. + // +---------------------------------------------------------------------- + // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 + // +---------------------------------------------------------------------- + // | Author: CRMEB Team <admin@crmeb.com> + // +---------------------------------------------------------------------- + import { + personalStore, + verify, + merClassifly, + getCategoryList, + getGoodsDetails, + updateGoodsRecord, + getStoreTypeApi, + agreeiness, + merchantLicenseIdentify + } from '@/api/store.js'; + import { + getCaptcha, + getAgreementApi, + merstreet + } from "@/api/user"; + import { + getStreet, + getArea, + getVillage + } from "@/api/article.js" + import { + mapGetters + } from "vuex"; + import { + configMap + } from "@/utils"; + import { + intention, + } from "@/api/product" + import parser from "@/components/jyf-parser/jyf-parser"; + import authorize from '@/components/Authorize'; + import Verify from '@/components/verify/verify.vue'; + import { + HTTP_REQUEST_URL + } from '@/config/app'; + import { + Toast + } from '../../../libs/uniApi'; + import { + mer_services_agree + } from "@/api/activity.js" + const app = getApp(); + export default { + components: { + "jyf-parser": parser, + authorize, + Verify + }, + data() { + return { + titFlag: true, + company: '', + organization_code: '', + domain: HTTP_REQUEST_URL, + cartId: '', //购物车id + pinkId: 0, //拼团id + couponId: 0, //优惠券id + isAuto: false, //没有授权的不会自动授权 + isShowAuth: false, //是否隐藏授权 + text: "获取验证码", + codeUrl: "", + disabled: false, + isAgree: false, + showProtocol: false, + isShowCode: false, + loading: false, + isshow: false, + merchantData: { + enterprise_name: "", + user_name: "", + phone: "", + classification: '', + social_credit_code: '', + company_name: '', + address: '', + invitation_code: '', + }, + business_license: '', //营业执照 + validate: false, + successful: false, + keyCode: "", + codeVal: "", + protocol: this.sys_intention_agree, + timer: "", + index: 0, + index1: 0, + index2: [0, 0, 0], + mer_classification: "", + nature_business: 0, + array: [{ + category_name: '', + merchant_category_id: '' + }], + companyTypeList: ['对公户', '个体户'], + bindPickerChangeidx: [], + storeTypeArr: [{ + type_name: '', + mer_type_id: '' + }], + StreetTyoeArr: [{ + area_id: '', + street_id: '', + village_id: '' + }], + mer_storeType: '', + area_id: '', + street_id: '', + village_id: '', + isnm: false, + isnum: 0, + code1: '', + code2: '', + business_name: '', + business: [], + pics: [], + tagStyle: { + img: 'width:100%;display:block;' + }, + mer_i_id: null, // 商户申请id + isType: false, + num: 10, + detail: {}, + statusBarHeight: 0, + where: { + type: 1, + page: 1, + limit: 10 + }, + codenote: [] + }; + }, + beforeDestroy() { + clearTimeout(this.timer) + }, + computed: configMap({ + sys_intention_agree: '' + }, mapGetters(['isLogin', 'viewColor', 'keyColor'])), + onLoad(options) { + + if (this.isLogin) { + this.getClassfication(); + this.getStoreType(); + } else { + this.isAuto = true; + this.isShowAuth = true + } + if (options.mer_i_id) { + this.mer_i_id = options.mer_i_id + uni.showLoading({ + title: '获取数据中', + }); + this.$nextTick(function() { + this.getGoodsDetails(options.mer_i_id) + }) + } else this.getArea() + this.statusBarHeight = uni.getSystemInfoSync().statusBarHeight + 45; + }, + onShow() { + + }, + onReady() {}, + methods: { + //获取交易信息 + codelist() { + intention(this.where).then(res => { + this.codenote = res.data.list + }) + }, + //退出 + logout() { + uni.switchTab({ + url: '/pages/user/index' + }) + }, + //关闭弹窗 + recuo() { + if (this.num > 0) { + this.num = 10 + this.isshow = false + } else { + this.num = 10 + this.isshow = false + } + }, + //拒绝 + refuse() { + + + uni.switchTab({ + url: '/pages/user/index' + }) + }, + countDown() { + let { + num + } = this; + // if (num === 3) this.nums = true; + num = num > 0 ? num - 1 : "0"; + setTimeout(() => { + + this.num = num; + if (num == '0') { + // this.launchApp() + return + } + if (this.isshow == false && this.num > 0) { + this.num = 10 + return + } + this.countDown(); + }, 1000); + + + }, + + //获取商户入驻申请协议 + shoplist(val) { + + agreeiness({ + type: val + }).then(res => { + this.detail = res.data + }) + }, + + + //是否是农贸市场 + // change(e) { + // this.isnum = (e === true ? 1 : 0) + // }, + // 获取村 + getVillage(e) { + const self = this; + getVillage({ + street_code: e + }).then(res => { + self.$set(self.business, 2, res.data); + if (self.mer_i_id && !this.business_name) { + let area = self.business[0].find(item => item.code == self.area_id)?.name; + let street = self.business[1].find(item => item.code == self.street_id)?.name; + let village = self.business[2].find(item => item.id == self.village_id)?.name; + this.business_name = `${area} ${street} ${village}`; + this.getArea(); + } + }) + }, + //获取镇 + getStreet(e, street) { + const self = this; + getStreet({ + area_code: e + }).then(res => { + self.$set(self.business, 1, res.data) + self.getVillage(street ? street : self.business[1][0].code) + }) + }, + //获取区 + getArea(code = null, street = null) { + getArea({ + city_code: 510500 + }).then(res => { + this.business[0] = res.data; + this.code1 = code ? code : this.business[0][0].code; + this.getStreet(this.code1, street) + }) + }, + //商圈数据变化 + pickerColumnchange(e) { + if (e.detail.column === 0) { + this.getStreet(this.business[0][e.detail.value].code) + this.index2[0] = e.detail.value + this.index2[1] = 0 + this.index2[2] = 0 + } else if (e.detail.column === 1) { + this.getVillage(this.business[1][e.detail.value].code) + this.index2[1] = e.detail.value + this.index2[2] = 0 + } else if (e.detail.column === 1) { + this.index2[2] = e.detail.value + } + }, + getConfig(type) { + this.isType = false; + this.showProtocol = true; + + if (type == 0) { + this.titFlag = true + this.protocol = this.sys_intention_agree.replace(/\*\*甲方公司\*\*/g, this.company); + } else { + this.titFlag = false + mer_services_agree().then(res => { + this.protocol = res.data.mer_services_agree.replace(/\*\*甲方公司\*\*/g, this.company); + }) + } + // 获取配置 + // this.protocol = this.sys_intention_agree + }, + /*获取发票说明*/ + getAgreement() { + let that = this + that.showProtocol = true; + that.titFlag = true + that.isType = true + getAgreementApi('sys_merchant_type').then(res => { + that.protocol = res.data.sys_merchant_type + + + }) + }, + // 获取历史提交数据详情 + getGoodsDetails(id) { + getGoodsDetails(id).then(res => { + let arr = Object.keys(this.merchantData) + let resData = res.data + arr.map(item => { + this.merchantData.enterprise_name = resData.mer_name + this.merchantData.user_name = resData.name + this.merchantData.phone = resData.phone + this.merchantData.social_credit_code = resData.social_credit_code + this.merchantData.company_name = resData.company_name + this.merchantData.address = resData.address + this.merchantData.invitation_code = resData.invitation_code + this.merchantData.classification = resData.merchant_category_id + this.merchantData.mer_type = resData.mer_type_id + this.area_id = resData.area_id + this.street_id = resData.street_id + this.mer_storeType = resData.mer_storeType + this.village_id = resData.village_id + }) + this.business_license = resData.images[0]; + resData.images.shift(); + this.pics = resData.images; + this.mer_classification = this.getCategoryName(resData.merchant_category_id, this.array) + this.mer_storeType = this.getStoreTypeName(resData.mer_type_id, this.storeTypeArr) + this.business_name = ''; + this.getArea(this.area_id, this.street_id); + if (resData.mer_type_id != 12) { + this.shoplist('mer_services_agree') + } else { + this.shoplist('mer_supply_agree') + } + uni.hideLoading(); + }) + }, + //获取商户分类名称 + getCategoryName(id, arr) { + for (let i = 0; i < arr.length; i++) { + if (arr[i].merchant_category_id === id) { + return arr[i]['category_name'] + } + } + }, + //获取店铺类型名称 + getStoreTypeName(id, arr) { + for (let i = 0; i < arr.length; i++) { + if (arr[i].mer_type_id === id) { + return arr[i]['type_name'] + } + } + }, + // 选择公司性质 + natureBusinessChange(e) { + this.nature_business = this.companyTypeList[e.detail.value] == '个体户' ? 2 : 1; + }, + bindPickerChange: function(e) { + // console.log(e.detail); + // this.index = e.target.value[1]; + let idx = e.target.value; + // let idx = e.target.value[1]; + this.merchantData.classification = this.array[idx]['merchant_category_id'] + this.mer_classification = this.array[idx]['category_name'] + // this.merchantData.classification = this.bindPickerChangeidx[idx]['store_category_id'] + // this.mer_classification = this.bindPickerChangeidx[idx]['cate_name'] + this.validateBtn() + }, + columnchange(e) { + // console.log(e.detail); + if (e.detail.column == 0) { + this.bindPickerChangeidx = this.array[e.detail.value].children; + } + }, + bindPickerChange1: function(e) { + + this.index1 = e.target.value + let idx = e.target.value + this.merchantData.mer_type = this.storeTypeArr[idx]['mer_type_id'] + this.mer_storeType = this.storeTypeArr[idx]['type_name'] + // console.log(this.merchantData.mer_type) + if (this.storeTypeArr[idx]['type_code'] == 'TypeStore' && this.merchantData.mer_type) { + this.shoplist('mer_services_agree') + } else { + this.shoplist('mer_supply_agree') + } + this.validateBtn() + }, + + bindPickerChange2: function(e) { + // console.log(e.detail.value) + this.index2 = e.detail.value + this.business_name = + `${this.business[0][this.index2[0]].name} ${this.business[1][this.index2[1]].name} ${this.business[2][this.index2[2]].name}` + this.area_id = this.business[0][this.index2[0]].code + this.street_id = this.business[1][this.index2[1]].code + this.village_id = this.business[2][this.index2[2]].id + // return; // 种养殖户入驻也不需要 + if (this.merchantData.mer_type == 12) return; //市级供应链不需要查询镇农科公司 + merstreet({ + area_code: this.area_id + }).then((res) => { + if (res.code == 0) { + this.company = '' + this.organization_code = '' + // this.$util.Tips({ + // title: res.msg + // }); + return false; + } else { + this.company = res.data.title + this.organization_code = res.data.organization_code + } + }).catch(res => { + console.log(res) + }) + }, + // 获取商户分类 + getClassfication: function() { + merClassifly() + .then(res => { + this.array = res.data + }) + .catch(res => { + this.$util.Tips({ + title: res + }); + }); + // getCategoryList() + // .then(res => { + // // console.log(res); + // res.data.list.forEach(item=>{ + // item.category_name = item.cate_name; + // item.merchant_category_id = item.store_category_id; + // }) + // this.array = res.data.list; + // this.bindPickerChangeidx = this.array[0].children; + // }) + // .catch(res => { + // this.$util.Tips({ + // title: res + // }); + // }); + }, + // 获取店铺类型 + getStoreType: function() { + getStoreTypeApi() + .then(res => { + + this.storeTypeArr = res.data + }) + .catch(res => { + this.$util.Tips({ + title: res + }); + }); + }, + // 图片预览 + // 获得相册 idx + getPhotoClickIdx(e) { + let _this = this; + let idx = e.currentTarget.dataset.index; + _this.imgPreview(_this.pics, idx); + }, + // 图片预览 + imgPreview: function(list, idx) { + // list:图片 url 数组 + if (list && list.length > 0) { + uni.previewImage({ + current: list[idx], // 传 Number H5端出现不兼容 + urls: list + }); + } + }, + // 授权回调 + onLoadFun: function() { + this.isShowAuth = false; + }, + // 授权关闭 + authColse: function(e) { + this.isShowAuth = e + }, + toggleTab(str) { + this.$refs[str].show(); + }, + // 首页 + goHome() { + uni.switchTab({ + url: '/pages/index/index' + }); + }, + again() { + this.getcaptcha() + }, + /** + * 上传文件 + * + */ + uploadpic: function() { + let that = this; + that.$util.uploadImageOne('upload/image', function(res) { + that.pics.push(res.data.path); + that.$set(that, 'pics', that.pics); + }); + }, + /** + * 上传图片识别文字 + * + */ + uploadpicText: function() { + let that = this; + that.$util.uploadImageOne('upload/image', function(res) { + that.business_license = res.data.path; + // uni.showLoading({ + // title: '识别中' + // }) + // merchantLicenseIdentify({ + // image: res.data.path + // }).then(res=>{ + // that.merchantData.address = res.data.address; + // that.merchantData.user_name = res.data.legal_person; + // that.merchantData.social_credit_code = res.data.register_number; + // that.merchantData.company_name = res.data.name; + // // that.$set('merchantData', that.merchantData); + // uni.hideLoading(); + // }).catch((e)=>{ + // uni.hideLoading(); + // Toast(e) + // }) + }); + }, + /** + * 删除图片 + * + */ + DelPic: function(index) { + let that = this, + pic = this.pics[index]; + that.pics.splice(index, 1); + that.$set(that, 'pics', that.pics); + }, + getCode() { + let that = this + getCodeApi() + .then(res => { + that.keyCode = res.data.key; + }) + .catch(res => { + that.$util.Tips({ + title: res + }); + }); + }, + async code(data) { + let that = this; + if (!that.merchantData.phone) return that.$util.Tips({ + title: '请填写手机号码' + }); + if (!/^1(3|4|5|7|8|9|6)\d{9}$/i.test(that.merchantData.phone)) return that.$util.Tips({ + title: '请输入正确的手机号码' + }); + await verify({ + phone: that.merchantData.phone, + // key: that.codeKey, + // code: that.codeVal, + type: 'intention', + captchaType: 'blockPuzzle', + captchaVerification: data.captchaVerification + }) + .then(res => { + that.$util.Tips({ + title: res.msg + }); + that.sendCode(); + }) + .catch(res => { + that.$util.Tips({ + title: res + }); + if (res.status == 402) { + // that.getcaptcha(); + } + }); + }, + getcaptcha() { + let that = this + getCaptcha().then(data => { + that.codeUrl = data.data.captcha; //图片路径 + that.codeVal = data.data.code; //图片验证码 + that.codeKey = data.data.key //图片验证码key + }) + that.isShowCode = true; + }, + sendCode() { + if (this.disabled) return; + this.disabled = true; + let n = 60; + this.text = "剩余 " + n + "s"; + const run = setInterval(() => { + n = n - 1; + if (n < 0) { + clearInterval(run); + } + this.text = "剩余 " + n + "s"; + if (this.text < "剩余 " + 0 + "s") { + this.disabled = false; + this.text = "重新获取"; + } + }, 1000); + }, + onConfirm(val) { + this.region = val.checkArr[0] + '-' + val.checkArr[1] + '-' + val.checkArr[2]; + }, + ChangeIsAgree: function(e) { + this.isAgree = !this.isAgree; + this.validateBtn(); + }, + //所属公司 + + + //协议弹窗 + showxy() { + this.isshow = true + }, + //提交 + agree() { + let that = this; + let requestData = { + phone: that.merchantData.phone, + // mer_name: that.merchantData.enterprise_name, + mer_name: that.merchantData.user_name + '的个人店铺', + name: that.merchantData.user_name, + code: that.merchantData.yanzhengma, + // company_name: that.merchantData.company_name, + address: that.merchantData.address, + // invitation_code: that.merchantData.invitation_code, + // social_credit_code: that.merchantData.social_credit_code, + // merchant_category_id: that.merchantData.classification, + // merchant_category_name: that.mer_classification, + // is_company: that.nature_business==1?1:0, // 是否是公司, 1是公司, 0是个体 + // mer_type_id: that.merchantData.mer_type, + // mer_storeType: this.mer_storeType, + area_id: this.area_id, + street_id: this.street_id, + village_id: this.village_id, + // is_nmsc: this.isnum, + images: [this.business_license, ...that.pics] + } + that.validate = false; + if (that.mer_i_id) { + updateGoodsRecord(that.mer_i_id, requestData).then(res => { + if (res.status == 200) { + title: '提交成功', + that.loading = true; + that.timer = setTimeout(() => { + that.successful = true; + that.validate = true; + }, 1000) + } + }).catch(res => { + this.isshow = false + that.validate = true; + that.$util.Tips({ + title: res + }); + }) + } else { + personalStore(requestData).then(data => { + if (data.status == 200) { + title: '提交成功', + that.loading = true; + this.timer = setTimeout(() => { + that.successful = true; + that.validate = true; + }, 1000) + } + }).catch(res => { + this.isshow = false + that.validate = true; + that.$util.Tips({ + title: res + }); + }) + } + }, + formSubmit() { + if (this.validateForm() && this.validate) { + return this.agree(); + if (this.merchantData.mer_type == '12') return this.agree(); + if (this.codenote.length == 0) { + this.isshow = true + this.countDown() + } else { + if (this.codenote[0].status == 0) { + uni.showModal({ + title: '申请正在审核中,请勿重复提交' + }) + } else { + this.isshow = true + this.countDown() + } + } + } + + }, + validateBtn: function() { + let that = this, + value = that.merchantData; + if (value.user_name && value.phone && /^1(3|4|5|7|8|9|6)\d{9}$/i.test( + value + .phone) && + value.yanzhengma) { + if (!that.isShowCode) { + that.validate = true; + } else { + if (that.codeVal) { + that.validate = true; + } else { + that.validate = false; + } + } + } else { + that.validate = false; + } + }, + validateForm: function() { + let that = this, + value = that.merchantData; + // if (!value.enterprise_name) return that.$util.Tips({ + // title: '请输入商户名称' + // }); + // if (!value.social_credit_code) return that.$util.Tips({ + // title: '请输入统一社会信用代码' + // }); + // if (!value.company_name) return that.$util.Tips({ + // title: '请输入公司名称' + // }); + if (!value.user_name) return that.$util.Tips({ + title: '请输入姓名' + }); + if (!value.phone) return that.$util.Tips({ + title: '请输入手机号' + }); + if (!/^1(3|4|5|7|8|9|6)\d{9}$/i.test(value.phone)) return that.$util.Tips({ + title: '请输入正确的手机号码' + }); + if (!value.yanzhengma) return that.$util.Tips({ + title: '请填写验证码' + }); + // if (!this.mer_classification) return that.$util.Tips({ + // title: '请选择商户分类' + // }); + // if (!this.nature_business) return that.$util.Tips({ + // title: '请选择公司性质' + // }) + // if (!this.mer_storeType) return that.$util.Tips({ + // title: '请选择店铺类型' + // }) + if (!this.business_name) return that.$util.Tips({ + title: '请选择店铺所在地' + }) + if (!value.address) return that.$util.Tips({ + title: '请输入详细地址' + }); + if (!that.isAgree) return that.$util.Tips({ + title: '请勾选并同意入驻协议' + }); + // if (that.isShowCode && !that.codeVal) return that.$util.Tips({ + // title: '请填写图片验证码' + // }); + if (!that.business_license) return that.$util.Tips({ + title: '请上传营业执照' + }); + // if (that.pics.length == 0) return that.$util.Tips({ + // title: '请上传一张或者多张图片' + // }); + + + that.validate = true; + return true; + }, + jumpToList() { + uni.navigateTo({ + url: "/pages/store/applicationRecord/unit" + }) + }, + success(data) { + this.$refs.verify.hide(); + this.code(data); + }, + handleVerify() { + if (!this.merchantData.phone) return this.$util.Tips({ + title: '请输入手机号' + }); + + if (!/^1(3|4|5|7|8|9|6)\d{9}$/i.test(this.merchantData.phone)) return this.$util.Tips({ + title: '请输入正确的手机号码' + }); + if (!this.isAgree) return this.$util.Tips({ + title: '请勾选并同意入驻协议' + }); + this.$refs.verify.show(); + } + } + } +</script> + +<style scoped lang="scss"> + /deep/checkbox .uni-checkbox-input.uni-checkbox-input-checked, + /deep/checkbox .wx-checkbox-input.wx-checkbox-input-checked { + border: 1px solid var(--view-theme) !important; + background-color: var(--view-theme) !important; + color: #fff !important; + } + + + .conten-top { + width: 100%; + text-align: center; + background-color: #fff; + position: absolute; + top: 0; + position: fixed; + z-index: 10; + } + + .uni-input-placeholder { + color: #B2B2B2; + } + + .item-name { + width: 190rpx; + } + + .uni-list-cell { + position: relative; + + .iconfont { + font-size: 14px; + color: #7a7a7a; + position: absolute; + right: 15px; + top: 7rpx; + } + + .icon-guanbi2 { + right: 35px; + } + } + + .merchantBgCount { + line-height: 0; + } + + .merchantsSettled { + background-image: linear-gradient(#ff5a32 644rpx, var(--view-bntColor22) 100%); + min-height: 1800rpx; + position: relative; + } + + .merchantsSettled .merchantBg { + width: 750rpx; + width: 100%; + } + + .merchantsSettled .list { + background-color: #fff; + border-radius: 12px; + padding: 22px 0; + margin: 0 15px; + position: absolute; + top: 300rpx; + width: calc(100% - 30px); + + } + + .application-record { + position: absolute; + display: flex; + align-items: center; + top: 240rpx; + right: 0; + color: #fff; + font-size: 22rpx; + background-color: rgba(0, 0, 0, 0.3); + padding: 8rpx 18rpx; + border-radius: 20px 0px 0px 20px; + } + + .merchantsSettled .list .item { + padding: 50rpx 0 20rpx; + border-bottom: 1px solid #eee; + position: relative; + margin: 0 20px; + + &.no-border { + border-bottom: none; + padding-left: 0; + padding-right: 0; + } + + .item-title { + color: #666666; + font-size: 28rpx; + display: block; + } + + .item-desc { + color: #B2B2B2; + font-size: 22rpx; + display: block; + margin-top: 9rpx; + line-height: 36rpx; + } + } + + .acea-row, + .upload { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + } + + .upload { + margin-top: 20rpx; + } + + .acea-row.row-middle { + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + padding-left: 2px; + } + + .acea-row.row-column { + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + } + + .acea-row.row-center-wrapper { + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + } + + .merchantsSettled .list .item .pictrue { + width: 130rpx; + height: 130rpx; + margin: 24rpx 22rpx 0 0; + position: relative; + font-size: 11px; + color: #bbb; + + &:nth-child(4n) { + margin-right: 0; + } + + &:nth-last-child(1) { + border: 0.5px solid #ddd; + box-sizing: border-box; + } + + uni-image, + image { + width: 100%; + height: 100%; + border-radius: 1px; + + img { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + display: block; + position: absolute; + top: 0; + left: 0; + opacity: 0; + width: 100%; + height: 100%; + } + } + + .icon-guanbi1 { + font-size: 33rpx; + position: absolute; + top: -10px; + right: -10px; + } + } + + .uni-list-cell-db { + position: relative; + } + + .wenhao { + width: 34rpx; + height: 34rpx; + display: flex; + align-items: center; + justify-content: center; + font-size: 28rpx; + border-radius: 50%; + background: #E3E3E3; + color: #ffffff !important; + margin-left: 4rpx; + position: absolute; + left: 122rpx; + } + + .merchantsSettled .list .item .imageCode { + position: absolute; + top: 7px; + right: 0; + } + + .merchantsSettled .list .item .icon { + font-size: 40rpx; + color: #b4b1b4; + } + + .merchantsSettled .list .item input { + width: 400rpx; + font-size: 30rpx; + } + + .merchantsSettled .list .item .placeholder { + color: #b2b2b2; + } + + .merchantsSettled .default { + padding: 0 30rpx; + height: 90rpx; + background-color: #fff; + margin-top: 23rpx; + } + + .merchantsSettled .default checkbox { + margin-right: 15rpx; + } + + .merchantsSettled .acea-row uni-image { + width: 20px; + height: 20px; + display: block; + } + + .merchantsSettled .list .item .codeIput { + width: 125px; + } + + .uni-input-input { + display: block; + height: 100%; + background: none; + color: inherit; + opacity: 1; + -webkit-text-fill-color: currentcolor; + font: inherit; + line-height: inherit; + letter-spacing: inherit; + text-align: inherit; + text-indent: inherit; + text-transform: inherit; + text-shadow: inherit; + } + + .merchantsSettled .list .item .code { + position: absolute; + width: 93px; + line-height: 27px; + border: 1px solid var(--view-theme); + border-radius: 15px; + color: var(--view-theme); + text-align: center; + bottom: 8px; + right: 0; + font-size: 12px; + } + + .merchantsSettled .list .item .code.on { + background-color: #bbb; + color: #fff; + border-color: #bbb; + } + + .merchantsSettled .submitBtn { + width: 588rpx; + margin: 0 auto; + height: 86rpx; + border-radius: 25px; + text-align: center; + line-height: 86rpx; + font-size: 15px; + color: #fff; + background: #E3E3E3; + margin-top: 25px; + pointer-events: none; + } + + .merchantsSettled .submitBtn.on { + background: var(--view-theme); + pointer-events: all; + } + + uni-checkbox-group, + .settleAgree { + display: inline-block; + font-size: 24rpx; + } + + uni-checkbox-group { + color: #b2b2b2; + } + + .settleAgree { + color: var(--view-theme); + position: relative; + top: 2px; + left: 8px; + } + + .merchantsSettled uni-checkbox .uni-checkbox-wrapper { + width: 30rpx; + height: 30rpx; + border: 2rpx solid #C3C3C3; + border-radius: 15px; + } + + .settlementAgreement { + width: 100%; + height: 100%; + position: fixed; + top: 0; + left: 0; + background: rgba(0, 0, 0, .5); + z-index: 10; + } + + .settlementAgreement .setAgCount { + background: #fff; + width: 694rpx; + // height: 458px; + position: absolute; + top: 50%; + left: 50%; + + padding: 28rpx; + -webkit-transform: translate(-50%, -50%); + -moz-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + overflow: hidden; + + .content { + height: 740rpx; + overflow-y: scroll; + + /deep/ p { + font-size: 13px; + line-height: 22px; + } + + /deep/ img { + max-width: 100%; + } + } + } + + .settlementAgreement .setAgCount .icon { + font-size: 42rpx; + color: #b4b1b4; + position: absolute; + top: 15rpx; + right: 15rpx; + } + + .settlementAgreement .setAgCount .title { + color: #333; + font-size: 32rpx; + text-align: center; + font-weight: bold; + } + + .settlementAgreement .setAgCount .content { + + color: #333; + font-size: 26rpx; + line-height: 22px; + text-align: justify; + text-justify: distribute-all-lines; + + overflow-y: scroll; + } + + + .settlementAgreement .setAgCount .contenta { + + color: #333; + font-size: 26rpx; + line-height: 22px; + text-align: justify; + text-justify: distribute-all-lines; + height: 75%; + overflow-y: scroll; + + + } + + .setAgCountbtn { + display: flex; + justify-content: space-around; + position: relative; + + .setAgCountbtna { + margin-top: 40rpx; + // width: 200rpx; + height: 74rpx; + text-align: center; + line-height: 74rpx; + border-radius: 46rpx 46rpx; + opacity: 1; + border: 2rpx solid #B3B3B3; + font-size: 25rpx; + font-family: PingFang SC-Medium, PingFang SC; + font-weight: 500; + color: #737373; + + } + + .setAgCountbtnb { + margin-top: 40rpx; + padding-left: 20rpx; + padding-right: 20rpx; + height: 74rpx; + text-align: center; + line-height: 74rpx; + background: #cecece; + border-radius: 46rpx 46rpx; + opacity: 1; + + font-size: 25rpx; + font-family: PingFang SC-Medium, PingFang SC; + font-weight: 500; + color: #fff; + + } + + .setAgCountbtnc { + margin-top: 40rpx; + // width: 200rpx; + height: 74rpx; + text-align: center; + line-height: 74rpx; + background: linear-gradient(270deg, #FF6D20 0%, #F84221 100%); + border-radius: 46rpx 46rpx; + opacity: 1; + font-size: 25rpx; + font-family: PingFang SC-Medium, PingFang SC; + font-weight: 500; + color: #fff; + + } + + .border { + position: absolute; + top: 0; + left: -28rpx; + width: 100vw; + height: 100%; + border-radius: 40rpx 40rpx 0 0; + box-shadow: 0px -5px 5px -2px rgba(0, 0, 0, 0.2); + /* 在上边框添加阴影 */ + } + + .btn { + width: 694rpx; + font-weight: bold; + font-size: 34rpx; + } + } + + .settledSuccessMain { + height: 100vh; + display: flex; + flex-direction: column; + background: #fff; + } + + .settledSuccessful { + flex: 1; + width: 100%; + padding: 0 56px; + height: auto; + background: #fff; + text-align: center; + } + + .settledSuccessful .image { + width: 189px; + height: 157px; + margin-top: 66px; + } + + .settledSuccessful .title { + color: #333333; + font-size: 16px; + font-weight: bold; + margin-top: 35px; + } + + .settledSuccessful .info { + color: #A0A0A0; + font-size: 13px; + margin-top: 12px; + } + + .settledSuccessful .goHome { + margin: 60px auto 0; + line-height: 43px; + color: #282828; + font-size: 15px; + border: 1px solid #B4B4B4; + border-radius: 60px; + } + + /deep/ uni-checkbox .uni-checkbox-input { + width: 15px; + height: 15px; + position: relative; + } + + /deep/ uni-checkbox .uni-checkbox-input.uni-checkbox-input-checked:before { + font-size: 14px; + } + + .loadingicon { + height: 100vh; + overflow: hidden; + position: absolute; + top: 0; + left: 0; + } + + .icon-xiangyou { + font-size: 22rpx; + } + + // #ifdef MP + checkbox-group { + display: inline-block; + } + + // #endif + .setAgCount { + /deep/ table { + border: 1px solid #DDD; + border-bottom: none; + border-right: none; + } + + /deep/ td, + th { + padding: 5rpx 10rpx; + border-bottom: 1px solid #DDD; + border-right: 1px solid #DDD; + } + } + + .merchantsSettled .list .items { + padding: 50rpx 0 20rpx; + border-bottom: 1px solid #eee; + position: relative; + margin: 0 20px; + + .uni-list-area { + height: 50px; + display: flex; + justify-content: flex-start; + align-items: center; + + .uni-list-stree { + width: 30%; + margin-left: 10px; + + .mer-area { + width: 100%; + border: 1px solid #C3C3C3; + + picker { + display: flex; + } + + input { + width: 100%; + font-size: 30rpx; + + } + } + } + } + + } +</style> \ No newline at end of file diff --git a/pages/users/invite_code/index.vue b/pages/users/invite_code/index.vue new file mode 100644 index 0000000..737d0d8 --- /dev/null +++ b/pages/users/invite_code/index.vue @@ -0,0 +1,292 @@ +<template> + <view class="invite"> + <view class="placeholder"></view> + + <view class="qrcode"> + <view class="title"> + shop_{{uid}} + </view> + <view class="qrcode-img"> + <image :src="qrcodeUrl"></image> + </view> + <view class="save" @longpress="handleSavePic"> + <image + src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_active_mer/new_active_mer_qrcode_save.webp"> + </image> + <text>长按保存二维码</text> + </view> + </view> + + <view class="con"> + <image class="record" + src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_active_mer/new_active_mer_qrcode_record.webp"> + </image> + + <view class="table" v-if="list.length > 0"> + <view class="table-title"> + <view class="table-title-cell">用户名称</view> + <view class="table-title-cell">用户ID</view> + <view class="table-title-cell">采购金额</view> + <view class="table-title-cell">销售金额</view> + </view> + <block v-for="(item,index) in list" :key="index"> + <view class="table-con"> + <view class="table-con-cell">{{item.real_name}}</view> + <view class="table-con-cell">{{item.uid}}</view> + <view class="table-con-cell red">¥{{item.buy_amount}}</view> + <view class="table-con-cell green">¥{{item.sale_amount}}</view> + </view> + </block> + </view> + + <view v-if="list.length == 0"> + <emptyPage title="暂无邀请好友记录哦~"></emptyPage> + </view> + </view> + </view> +</template> +<script> + import emptyPage from '@/components/emptyPage.vue'; + import { + qrcode, + merchantRecord + } from "@/api/activity.js"; + + export default { + components: { + emptyPage + }, + data() { + return { + qrcodeUrl: "", + list: [], + page: 1, + limit: 10, + loadend: false, + loading: false, + loadTitle: '加载更多', + isAuto: false, //没有授权的不会自动授权 + isShowAuth: false, //是否隐藏授权 + uid:'' + } + }, + onLoad() { + this.getQrcode(); + this.getList(); + this.getUserInfo() + }, + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function() { + this.getList(); + }, + + methods: { + // 获取二维码 + getQrcode() { + qrcode().then(res => { + this.qrcodeUrl = res.data.url; + }) + }, + // 获取好友列表 + getList() { + let that = this; + if (that.loading) return; + if (that.loadend) return; + that.loading = true; + that.loadTitle = ''; + merchantRecord({ + page: that.page, + limit: that.limit + }).then(res => { + let list = res.data.list, + loadend = list.length < that.limit; + that.list = that.$util.SplitArray(list, that.list); + that.$set(that, 'list', that.list); + that.page = that.page + 1; + that.loading = false; + that.loadend = loadend; + that.loadTitle = loadend ? '哼~😕我也是有底线的~' : "加载更多"; + }, function(res) { + this.loading = false; + that.loadTitle = '加载更多'; + }) + }, + + getUserInfo() { + let userInfo = this.$Cache.get("USER_INFO"); + if(userInfo){ + userInfo = JSON.parse(userInfo); + this.uid = userInfo.uid; + } + }, + + handleSavePic() { + // 获取要保存的图片路径或URL + let imageUrl = this.qrcodeUrl; // 这里使用了网络上的图片作为示例 + + // #ifdef H5 + var a = document.createElement("a"); + a.download = imageUrl; + a.href = imageUrl; + document.body.appendChild(a); + a.click(); + a.remove(); + // #endif + + // #ifndef H5 + let that =this; + uni.downloadFile({ + url: imageUrl, + success(res) { + if (res.statusCode === 200) { + let tempFilePath = res.tempFilePath; // 临时文件路径 + uni.saveImageToPhotosAlbum({ + filePath: tempFilePath, + success() { + return that.$util.Tips({ + title: '图片已保存至相册!' + }); + }, + fail(err) { + console.error('保存失败', err); + } + }); + } else { + console.error('下载失败', res.statusCode); + } + }, + fail(err) { + console.error('下载失败', err); + } + }); + // #endif + } + } + } +</script> + +<style lang="scss" scoped> + page { + background-color: #F5F5F5; + } + + .invite { + .placeholder { + height: 544rpx; + } + + .qrcode { + position: fixed; + top: 30rpx; + left: 50%; + transform: translateX(-50%); + display: flex; + flex-direction: column; + align-items: center; + width: 690rpx; + height: 666rpx; + background-image: url(https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_active_mer/new_active_mer_qrcode_bg.webp); + background-size: 100%; + background-repeat: no-repeat; + padding-top: 54rpx; + box-sizing: border-box; + + .title { + font-size: 24rpx; + font-family: PingFang SC, PingFang SC; + font-weight: 400; + color: #7A7A7A; + margin-bottom: 16rpx; + } + + .qrcode-img { + margin-bottom: 96rpx; + + image { + width: 396rpx; + height: 396rpx; + } + } + + .save { + display: flex; + justify-content: center; + align-items: center; + + image { + width: 36rpx; + height: 36rpx; + margin-right: 10rpx; + } + + text { + font-size: 28rpx; + font-family: PingFang SC, PingFang SC; + font-weight: 400; + color: #FFFFFF; + } + } + } + + .con { + height: calc(100vh - 544rpx); + background-color: #FFF3EF; + padding: 192rpx 30rpx 0; + + image { + width: 100%; + height: 45rpx; + margin-bottom: 40rpx; + } + + .table { + .table-title { + display: flex; + margin-bottom: 24rpx; + + .table-title-cell { + width: 25%; + font-size: 26rpx; + font-family: PingFang SC, PingFang SC; + font-weight: 400; + color: #2E2E2E; + text-align: center; + } + } + + .table-con { + display: flex; + width: 100%; + height: 68rpx; + line-height: 68rpx; + text-align: center; + background: #FFFFFF; + border-radius: 12rpx; + margin-bottom: 12rpx; + + .table-con-cell { + width: 25%; + height: 68rpx; + font-size: 24rpx; + font-family: PingFang SC, PingFang SC; + font-weight: 400; + color: #2E2E2E; + white-space:nowrap; + overflow:hidden; + text-overflow:ellipsis; + } + + .red { + color: #F13B3B; + } + + .green { + color: #20A162; + } + } + } + } + } +</style> \ No newline at end of file diff --git a/pages/users/user_info/index.vue b/pages/users/user_info/index.vue index d31de38..6b7fbfe 100644 --- a/pages/users/user_info/index.vue +++ b/pages/users/user_info/index.vue @@ -235,7 +235,7 @@ }, // #ifdef APP-PLUS appVersionConfig() { - var that = this; + let that = this; console.log('app:'+plus.runtime.appid) plus.runtime.getProperty(plus.runtime.appid, (info) => { this.version = info.version; diff --git a/utils/uniMP.js b/utils/uniMP.js new file mode 100644 index 0000000..8ebfd45 --- /dev/null +++ b/utils/uniMP.js @@ -0,0 +1,366 @@ +import { + getGXconfig, + miniapp +} from "@/api/uniMP.js"; +import { + ENV +} from '@/config/app'; +const mp = uni.requireNativePlugin('uniMP'); +import store from "@/store/modules/app.js" + +let appid = ''; // 应用id +let wgtFile = ''; // 应用文件地址 +let timer = null; // 加载计时器 + +// 比较版本号大小 +function compareVersions(version1, version2) { + const arr1 = version1.split('.').map(Number); + const arr2 = version2.split('.').map(Number); + for (let i = 0; i < Math.max(arr1.length, arr2.length); i++) { + const num1 = i < arr1.length ? arr1[i] : 0; + const num2 = i < arr2.length ? arr2[i] : 0; + if (num1 > num2) { + return 1; + } else if (num1 < num2) { + return -1; + } + } + return 0; +} + +// 加载供销小程序 +const loadMP = async (id) => { + appid = id; + let info = await getGXconfig(); + console.log('最新版本', info.data); + // return ; + uni.$emit('showLoading', true, '初始化中'); + mp.getUniMPVersion(id, (ret) => { + console.log('当前版本', ret); + let flag; + if (ENV == 'prod') { + flag = false + } else { + flag = true + } + if (0 != ret.code || compareVersions(info.data.version, ret.versionInfo.name) == 1 || flag == + true) { + let count = 0; + timer = setInterval(() => { + if (count < 100 && count > 0) uni.$emit('showLoading', true, `初始化中... ${count}%`) + else uni.$emit('showLoading', true, `初始化中... 99%`) + }, 200) + let downloadTask = uni.downloadFile({ + url: info.data.version_info?.dow_url, + success(res) { + wgtFile = res.tempFilePath; + console.log('初始化完成', wgtFile); + setTimeout(()=>{ + installMP(); + clearInterval(timer); + timer = null; + }, 700) + }, + fail(res) { + clearInterval(timer); + timer = null; + uni.hideLoading(); + } + }); + downloadTask.onProgressUpdate((res) => { + // console.log('初始化进度' + res.progress); + if (res.progress > count) count += 10; + if (count >= 90) { + clearInterval(timer); + timer = null; + } + }); + } else { + open() + } + }); +}; + +//加载商城小程序 +const loadMPx = async (id) => { + + appid = id; + let info = await miniapp(); + console.log('最新版本', info.data); + console.log(mp, uni); + // return ; + uni.$emit('showLoading', true, `初始化中...`) + mp.getUniMPVersion(id, (ret) => { + console.log('当前版本', ret); + let flag; + if (ENV == 'prod') { + flag = false + } else { + flag = true + } + if (0 != ret.code || compareVersions(info.data.appInfo.version, ret.versionInfo.name) == 1 || + flag == + true) { + let count = 0; + timer = setInterval(() => { + if (count < 100 && count > 0) uni.$emit('showLoading', true, `初始化中... ${count}%`) + else uni.$emit('showLoading', true, `初始化中... 99%`) + }, 200) + + let downloadTask = uni.downloadFile({ + url: info.data.appInfo.dow_url, + success(res) { + wgtFile = res.tempFilePath; + console.log('初始化完成', wgtFile); + setTimeout(()=>{ + installMP(); + clearInterval(timer); + timer = null; + }, 700) + }, + fail(res) { + clearInterval(timer); + timer = null; + uni.hideLoading(); + } + }); + downloadTask.onProgressUpdate((res) => { + // console.log('初始化进度' + res.progress); + if (res.progress > count) count += 10; + if (count >= 90) { + clearInterval(timer); + timer = null; + } + }); + } else { + open() + } + }); +}; + +// 按信息接口加载小程序 +const loadMPurl = async (e) => { + appid = e.id; + let FURL = e.url; + uni.$emit('showLoading', true, `初始化中...`) + uni.request({ + url: FURL, + method: 'GET', + success: (fileInfo) => { + mp.getUniMPVersion(appid, (ret) => { + console.log('当前版本', ret); + let flag; + if (ENV == 'prod') { + flag = false + } else { + flag = true + } + if (0 != ret.code || compareVersions(fileInfo.data?.data?.version, ret.versionInfo.name) == 1 || flag == + true) { + let count = 0; + timer = setInterval(() => { + if (count < 100 && count > 0) uni.$emit('showLoading', true, `初始化中... ${count}%`) + else uni.$emit('showLoading', true, `初始化中... 99%`) + }, 200) + let downloadTask = uni.downloadFile({ + url: fileInfo.data?.data?.down_url, + success(res) { + wgtFile = res.tempFilePath; + console.log('初始化完成', wgtFile); + setTimeout(()=>{ + installMP(); + clearInterval(timer); + timer = null; + }, 700) + }, + fail(res) { + clearInterval(timer); + timer = null; + uni.hideLoading(); + } + }); + downloadTask.onProgressUpdate((res) => { + // console.log('初始化进度' + res.progress); + if (res.progress > count) count += 10; + if (count >= 90) { + clearInterval(timer); + timer = null; + } + }); + } else { + open() + } + }); + + }, + fail:(err)=> { + console.log('错误:', err); + } + }) + +}; + +// 商城配置的小程序 +const loadAppletMP = async (data) => { + appid = data.app_id; + // return ; + uni.$emit('showLoading', true, '初始化中'); + mp.getUniMPVersion(appid, (ret) => { + let flag; + if (ENV == 'prod') { + flag = false + } else { + flag = true + } + if (0 != ret.code || compareVersions(data.version, ret.versionInfo.name) == 1 || flag == + true) { + let count = 0; + timer = setInterval(() => { + if (count < 100 && count > 0) uni.$emit('showLoading', true, `初始化中... ${count}%`) + else uni.$emit('showLoading', true, `初始化中... 99%`) + }, 200) + let downloadTask = uni.downloadFile({ + url: data.url, + success(res) { + wgtFile = res.tempFilePath; + console.log('初始化完成', wgtFile); + setTimeout(()=>{ + installMP(); + clearInterval(timer); + timer = null; + }, 700) + }, + fail(res) { + clearInterval(timer); + timer = null; + uni.hideLoading(); + } + }); + downloadTask.onProgressUpdate((res) => { + // console.log('初始化进度' + res.progress); + if (res.progress > count) count += 10; + if (count >= 90) { + clearInterval(timer); + timer = null; + } + }); + } else { + open() + } + }); +}; + +// 按远程文件地址加载小程序 +const loadMPdns = async (e) => { + appid = e.id; + let FURL = e.url; + uni.$emit('showLoading', true, `初始化中...`) + let count = 0; + timer = setInterval(() => { + if (count < 100 && count > 0) uni.$emit('showLoading', true, `初始化中... ${count}%`) + else uni.$emit('showLoading', true, `初始化中... 99%`) + }, 200) + let downloadTask = uni.downloadFile({ + url: FURL, + success(res) { + wgtFile = res.tempFilePath; + console.log('初始化完成', wgtFile); + setTimeout(()=>{ + installMP(); + clearInterval(timer); + timer = null; + }, 700) + }, + fail(res) { + clearInterval(timer); + timer = null; + uni.hideLoading(); + } + }); + downloadTask.onProgressUpdate((res) => { + // console.log('初始化进度' + res.progress); + if (res.progress > count) count += 10; + if (count >= 90) { + clearInterval(timer); + timer = null; + } + }); + +}; + +// 小程序版本信息 +const getVersion = (id) => { + appid = id; + return new Promise((resolve, reject) => { + mp.getUniMPVersion(appid, (ret) => { + console.log('供销', ret); + }); + }) +} +// 初始化小程序 +const installMP = () => { + mp.getUniMPVersion(appid, (ret) => { + doInstallMP(); + console.log('getUniMPVersion: ' + JSON.stringify(ret)); + }); +}; +const doInstallMP = () => { + mp.installUniMP({ + appid: appid, + wgtFile: wgtFile + }, (r) => { + if (0 == r.code) { + open(); + } else { + uni.hideLoading(); + clearInterval(timer); + timer = null; + uni.showModal({ + title: '初始化失败', + content: JSON.stringify(r), + showCancel: false + }); + } + console.log('初始化: ' + JSON.stringify(r)); + }); +}; + +const open = (id = null) => { + uni.$emit('showLoading', false); + let token = uni.getStorageSync('LOGIN_STATUS_TOKEN'); + if (!token) return uni.showToast({ + icon: 'none', + title: '请先登录' + }) + let avatar = store?.state?.userInfo?.avatar; + mp.openUniMP({ + appid: id || appid, + extraData: { + uniMP: true, + token: token, + avatar: avatar, + } + }, (ret) => { + uni.hideLoading(); + if (0 != ret.code) { + uni.showModal({ + title: '启动失败', + content: JSON.stringify(ret), + showCancel: false + }); + } + console.log('openUniMP: ' + JSON.stringify(ret)); + }); +} + +export default { + loadMP, + loadMPurl, + loadMPx, + loadMPdns, + installMP, + loadAppletMP, + doInstallMP, + getVersion, + open +} \ No newline at end of file diff --git a/utils/uniMPevent.js b/utils/uniMPevent.js new file mode 100644 index 0000000..f051aec --- /dev/null +++ b/utils/uniMPevent.js @@ -0,0 +1,74 @@ +const mp = uni.requireNativePlugin('uniMP'); +import { + uniMPgetLocation, + test +} from "@/utils/uniMPfunction.js" + +export const initEvent = () => { + mp.onUniMPEventReceive(async (ret) => { + console.log('小程序事件: ', ret); + if (ret.event == 'closeApp') { + mp.closeUniMP(ret.fromAppid, (ret) => { + console.log('closeUniMP: ' + JSON.stringify(ret)); + }); + } + if (ret.event == 'getLocation') { + try { + console.log('获取定位'); + let res = await uniMPgetLocation(); + console.log(res); + // plus.geolocation.getCurrentPosition(function(position) { + // console.log('经度:' + position.coords.longitude); + // console.log('纬度:' + position.coords.latitude); + // // that.markers[1].latitude = position.coords.longitude; + // // that.markers[1].longitude = position.coords.longitude; + // mp.sendUniMPEvent( + // ret.fromAppid, + // 'getLocation', {...position.coords}, + // (ret) => { + // console.log('Host sendEvent: ' + JSON.stringify(ret)); + // }); + // }, function(error) { + // console.error('获取位置失败:', error.message); + // }, {provider:'gps'}); + mp.sendUniMPEvent( + ret.fromAppid, + 'getLocation', {...res}, + (ret) => { + console.log('Host sendEvent: ' + JSON.stringify(ret)); + }); + } catch (e) { + console.log(e); + } + } + if (ret.event == 'test') { + console.log('测试'); + mp.sendUniMPEvent( + ret.fromAppid, + 'test', { 'key': 'value', 'name': 'data' }, + (ret) => { + console.log('Host sendEvent: ' + JSON.stringify(ret)); + }); + } + if (ret.event == 'log') { + // console.log('2222222') + + console.log('收到小程序事件: ' + JSON.stringify(ret)); + } + + //直播小程序跳转商城购买商品 + if (ret.event == 'live_shop') { + console.log(JSON.stringify(ret)) + let arr1=ret.data + mp.closeUniMP(ret.fromAppid, (ret) => { + // console.log('closeUniMP: ' + JSON.stringify(ret)); + setTimeout(()=>{ + uni.navigateTo({ + url:'/pages/goods_details/index?id='+arr1.app_goods_id + },1000) + }) + }); + // console.log('收到小程序事件: ' + JSON.stringify(ret)); + } + }); +} \ No newline at end of file diff --git a/utils/uniMPfunction.js b/utils/uniMPfunction.js new file mode 100644 index 0000000..dcdc715 --- /dev/null +++ b/utils/uniMPfunction.js @@ -0,0 +1,21 @@ +export const test = () => { + return '测试' +} + +export const uniMPgetLocation = () => { + return new Promise((resolve, reject) => { + uni.getLocation({ + type: 'wgs84', + geocode: true, + isHighAccuracy: true, + // altitude: true, + // accuracy: 'best', + success: (res) => { + resolve(res) + }, + fail(e) { + resolve(e) + } + }); + }) +} \ No newline at end of file