Browse Source

微信小程序太阳码生成

twodate
Enzo 4 years ago
parent
commit
093a2d31a7
  1. 3
      common/api.js
  2. 6
      pages.json
  3. 28
      pages/center/bestar.vue
  4. 4
      pages/center/fans.vue
  5. 2
      pages/center/invite.vue
  6. 4
      pages/center/wallet.vue
  7. 152
      pages/goodsDetail/index.vue

3
common/api.js

@ -2,7 +2,7 @@
export const DEV = "dev"; // dev 测试 | prod 正式 export const DEV = "dev"; // dev 测试 | prod 正式
export const VERSION = '1.0.0'; // 版本号 export const VERSION = '1.0.0'; // 版本号
export const DEVURL = 'https://gxsky.lanzulive.com'; // 测试服请求地址 export const DEVURL = 'https://gxsky.lanzulive.com'; // 测试服请求地址
// export const DEVURL = 'http://192.168.3.8'; // 测试服请求地址, 韦港电脑
// export const DEVURL = 'http://192.168.3.23'; // 测试服请求地址, 韦港电脑
export const PRODURL = ''; // 正式服请求地址 export const PRODURL = ''; // 正式服请求地址
/* 首页相关接口 */ /* 首页相关接口 */
@ -57,6 +57,7 @@ export const API_WECHAT_SETPHONE = '/api/wechat/setPhone'; // 用户授权手机
export const API_WECHAT_SETPROFILE = '/api/wechat/setProfile'; // 用户授权微信信息提交(返回用户信息) export const API_WECHAT_SETPROFILE = '/api/wechat/setProfile'; // 用户授权微信信息提交(返回用户信息)
export const API_WXLOGIN_VIEW = '/api/wxlogin/view'; // 获取登录页协议 export const API_WXLOGIN_VIEW = '/api/wxlogin/view'; // 获取登录页协议
export const API_ARTICLE_DETAIL = '/api/article/detail'; // 协议文章详情 export const API_ARTICLE_DETAIL = '/api/article/detail'; // 协议文章详情
export const API_WXCODE = '/api/salesman/qrcode'//小程序二维码
/* 商户相关 */ /* 商户相关 */
export const API_CONFIRM_CODE = '/api/confirm/code'; // 扫码核销 export const API_CONFIRM_CODE = '/api/confirm/code'; // 扫码核销

6
pages.json

@ -102,6 +102,12 @@
"navigationBarTitleText": "邀请成为分销达人" "navigationBarTitleText": "邀请成为分销达人"
} }
}, },
{
"path": "pages/center/bestar",
"style": {
"navigationBarTitleText": "成为分销达人"
}
},
{ {
"path": "pages/center/widthdraw", "path": "pages/center/widthdraw",
"style": { "style": {

28
pages/center/bestar.vue
File diff suppressed because it is too large
View File

4
pages/center/fans.vue

@ -7,7 +7,7 @@
<block v-if="tabIndex == 0"> <block v-if="tabIndex == 0">
<scroll-view class="com" :scroll-y="true" :refresher-enabled="true" :refresher-triggered="isRefresher" @scrolltolower="onScrolltolower" @refresherrefresh="onRefresherrefresh"> <scroll-view class="com" :scroll-y="true" :refresher-enabled="true" :refresher-triggered="isRefresher" @scrolltolower="onScrolltolower" @refresherrefresh="onRefresherrefresh">
<view class="flex lf-p-30 solid-bottom" v-for="i of 15">
<view class="flex lf-p-30 solid-bottom">
<view> <view>
<image src="../../static/center/shop-logo.png" style="height: 120rpx;width: 120rpx;" mode="aspectFill"></image> <image src="../../static/center/shop-logo.png" style="height: 120rpx;width: 120rpx;" mode="aspectFill"></image>
</view> </view>
@ -27,7 +27,7 @@
</block> </block>
<block v-else> <block v-else>
<scroll-view class="com" :scroll-y="true" :refresher-enabled="true" :refresher-triggered="isRefresher" @scrolltolower="onScrolltolower" @refresherrefresh="onRefresherrefresh"> <scroll-view class="com" :scroll-y="true" :refresher-enabled="true" :refresher-triggered="isRefresher" @scrolltolower="onScrolltolower" @refresherrefresh="onRefresherrefresh">
<view class="flex lf-p-30 solid-bottom" v-for="i of 15">
<view class="flex lf-p-30 solid-bottom">
<view> <view>
<image src="../../static/center/shop-logo.png" style="height: 120rpx;width: 120rpx;" mode="aspectFill"></image> <image src="../../static/center/shop-logo.png" style="height: 120rpx;width: 120rpx;" mode="aspectFill"></image>
</view> </view>

2
pages/center/invite.vue

@ -17,7 +17,7 @@
<view class="btn-bottom" style="bottom: 40rpx;"> <view class="btn-bottom" style="bottom: 40rpx;">
<view class="padding-lr-lg"> <view class="padding-lr-lg">
<button class="cu-btn block bg-orange lg" style="border-radius: 42rpx;" @tap="subimitApply()">
<button class="cu-btn block bg-orange lg" style="border-radius: 42rpx;" @tap="saveBill()">
<text class="text-df text-white">保存</text> <text class="text-df text-white">保存</text>
</button> </button>
</view> </view>

4
pages/center/wallet.vue

@ -15,7 +15,7 @@
</view> </view>
<block v-if="tabIndex == 0"> <block v-if="tabIndex == 0">
<scroll-view class="com" :scroll-y="true" :refresher-enabled="true" :refresher-triggered="isRefresher" @scrolltolower="onScrolltolower" @refresherrefresh="onRefresherrefresh"> <scroll-view class="com" :scroll-y="true" :refresher-enabled="true" :refresher-triggered="isRefresher" @scrolltolower="onScrolltolower" @refresherrefresh="onRefresherrefresh">
<view class="flex flex-direction justify-between lf-p-t-20 lf-p-b-20 lf-p-l-32 lf-p-r-32 solid-bottom" v-for="i of 23">
<view class="flex flex-direction justify-between lf-p-t-20 lf-p-b-20 lf-p-l-32 lf-p-r-32 solid-bottom">
<view class="flex align-center text-center justify-between"> <view class="flex align-center text-center justify-between">
<view class="lf-font-36 lf-color-price">-¥10.00</view> <view class="lf-font-36 lf-color-price">-¥10.00</view>
<view class="lf-font-32 text-black1">结余 ¥34.43</view> <view class="lf-font-32 text-black1">结余 ¥34.43</view>
@ -37,7 +37,7 @@
<block v-else> <block v-else>
<scroll-view class="com" :scroll-y="true" :refresher-enabled="true" :refresher-triggered="isRefresher" @scrolltolower="onScrolltolower" @refresherrefresh="onRefresherrefresh"> <scroll-view class="com" :scroll-y="true" :refresher-enabled="true" :refresher-triggered="isRefresher" @scrolltolower="onScrolltolower" @refresherrefresh="onRefresherrefresh">
<view class="flex flex-direction justify-between lf-p-t-20 lf-p-b-20 lf-p-l-32 lf-p-r-32 solid-bottom" v-for="i of 3">
<view class="flex flex-direction justify-between lf-p-t-20 lf-p-b-20 lf-p-l-32 lf-p-r-32 solid-bottom">
<view class="flex align-center text-center justify-between"> <view class="flex align-center text-center justify-between">
<view class="lf-font-36 lf-color-price">-¥11.00</view> <view class="lf-font-36 lf-color-price">-¥11.00</view>
<view class="lf-font-28 text-orange">申请中</view> <view class="lf-font-28 text-orange">申请中</view>

152
pages/goodsDetail/index.vue

@ -3,9 +3,11 @@
<skeleton :loading="skeletonLoading" :row="12" :showAvatar="false" :showTitle="true"> <skeleton :loading="skeletonLoading" :row="12" :showAvatar="false" :showTitle="true">
<block v-if="isRight(goods_detail)"> <block v-if="isRight(goods_detail)">
<!-- 商品图片轮播 --> <!-- 商品图片轮播 -->
<swiper :current="current" :indicator-dots="goods_detail.banners.length > 1 ? true : false" :circular="true" class="swiper-box" indicator-active-color="#FE9903">
<swiper :current="current" :indicator-dots="goods_detail.banners.length > 1 ? true : false"
:circular="true" class="swiper-box" indicator-active-color="#FE9903">
<swiper-item v-for="(item, index) in goods_detail.banners" :key="item.id"> <swiper-item v-for="(item, index) in goods_detail.banners" :key="item.id">
<image mode="aspectFill" :src="item.cover" style="width: 100%; height: 100%;" @click="lookImg(index)"></image>
<image mode="aspectFill" :src="item.cover" style="width: 100%; height: 100%;"
@click="lookImg(index)"></image>
</swiper-item> </swiper-item>
</swiper> </swiper>
<view class="bill-position" @tap='formSubmit()'> <view class="bill-position" @tap='formSubmit()'>
@ -28,7 +30,8 @@
</view> </view>
</view> </view>
<view class="label-box" v-if="goods_detail.tags && goods_detail.tags.length"> <view class="label-box" v-if="goods_detail.tags && goods_detail.tags.length">
<view class="label-item" v-for="(item, index) in goods_detail.tags" :key="index">{{ item }}</view>
<view class="label-item" v-for="(item, index) in goods_detail.tags" :key="index">{{ item }}
</view>
</view> </view>
</view> </view>
<!-- 地址信息 --> <!-- 地址信息 -->
@ -36,9 +39,12 @@
<view class="lf-font-32 lf-font-bold">适用门店</view> <view class="lf-font-32 lf-font-bold">适用门店</view>
<view class="lf-m-t-20 lf-row-between"> <view class="lf-m-t-20 lf-row-between">
<view class="lf-flex"> <view class="lf-flex">
<image mode="aspectFill" class="lf-fle shop-img" :src="goods_detail.store.cover" v-if="goods_detail.store.cover"></image>
<image mode="aspectFill" class="lf-fle shop-img" src="../../static/center/shop-logo.png" v-else></image>
<view class="lf-font-32 lf-m-l-20 lf-line-1" style="max-width: 512rpx;">{{ goods_detail.store.name }}</view>
<image mode="aspectFill" class="lf-fle shop-img" :src="goods_detail.store.cover"
v-if="goods_detail.store.cover"></image>
<image mode="aspectFill" class="lf-fle shop-img" src="../../static/center/shop-logo.png"
v-else></image>
<view class="lf-font-32 lf-m-l-20 lf-line-1" style="max-width: 512rpx;">
{{ goods_detail.store.name }}</view>
</view> </view>
<view @click="makePhoneCall(goods_detail.store.tel)"> <view @click="makePhoneCall(goods_detail.store.tel)">
<text class="lf-iconfont lf-icon-dianhua lf-font-40" style="color: #3A62FF;"></text> <text class="lf-iconfont lf-icon-dianhua lf-font-40" style="color: #3A62FF;"></text>
@ -48,30 +54,36 @@
<view style="width: 60rpx; height: 60rpx;" class="lf-row-center"> <view style="width: 60rpx; height: 60rpx;" class="lf-row-center">
<text class="lf-iconfont lf-icon-dizhi lf-font-40" style="color: #555555;"></text> <text class="lf-iconfont lf-icon-dizhi lf-font-40" style="color: #555555;"></text>
</view> </view>
<view class="lf-m-l-20 lf-font-28" style="color: #555555;">{{ goods_detail.store.address }}</view>
<view class="lf-m-l-20 lf-font-28" style="color: #555555;">{{ goods_detail.store.address }}
</view>
</view> </view>
</view> </view>
<!-- 商品详情 --> <!-- 商品详情 -->
<view class="goods-detail"> <view class="goods-detail">
<view class="lf-font-32 lf-font-bold lf-m-b-20">商品详情</view> <view class="lf-font-32 lf-font-bold lf-m-b-20">商品详情</view>
<rich-text :nodes="formatRichText(goods_detail.content)" v-if="goods_detail.content_type == 'rich_text'"></rich-text>
<image class="goods-img" :src="item" v-for="(item, index) in goods_detail.content" :key="index" v-if="goods_detail.content_type == 'img'"></image>
<rich-text :nodes="formatRichText(goods_detail.content)"
v-if="goods_detail.content_type == 'rich_text'"></rich-text>
<image class="goods-img" :src="item" v-for="(item, index) in goods_detail.content" :key="index"
v-if="goods_detail.content_type == 'img'"></image>
</view> </view>
<!-- 修饰专用 --> <!-- 修饰专用 -->
<view class="extra"></view> <view class="extra"></view>
<!-- 吸底操作按钮 --> <!-- 吸底操作按钮 -->
<view class="lf-row-between fixed-bottom"> <view class="lf-row-between fixed-bottom">
<view class="lf-flex lf-p-t-10 lf-p-b-10"> <view class="lf-flex lf-p-t-10 lf-p-b-10">
<view class="lf-flex-column lf-row-center icon-item" @click="$url('/pages/index/index', {type: 'switch'})">
<view class="lf-flex-column lf-row-center icon-item"
@click="$url('/pages/index/index', {type: 'switch'})">
<image class="icon-img" src="../../static/center/home.png"></image> <image class="icon-img" src="../../static/center/home.png"></image>
<view class="lf-m-t-1">首页</view> <view class="lf-m-t-1">首页</view>
</view> </view>
<view class="lf-flex-column lf-row-center icon-item" @click="$url('/pages/contactService/index')">
<view class="lf-flex-column lf-row-center icon-item"
@click="$url('/pages/contactService/index')">
<image class="icon-img" src="../../static/center/service.png"></image> <image class="icon-img" src="../../static/center/service.png"></image>
<view class="lf-m-t-1">客服</view> <view class="lf-m-t-1">客服</view>
</view> </view>
<view class="lf-flex-column lf-row-center icon-item" @click="switchCollect"> <view class="lf-flex-column lf-row-center icon-item" @click="switchCollect">
<image class="icon-img" src="../../static/center/collect-active.png" v-if="is_collect"></image>
<image class="icon-img" src="../../static/center/collect-active.png" v-if="is_collect">
</image>
<image class="icon-img" src="../../static/center/collect.png" v-else></image> <image class="icon-img" src="../../static/center/collect.png" v-else></image>
<view class="lf-m-t-1">{{ is_collect ? '已收藏' : '收藏' }}</view> <view class="lf-m-t-1">{{ is_collect ? '已收藏' : '收藏' }}</view>
</view> </view>
@ -84,17 +96,11 @@
</view> </view>
<!-- 回到顶部 --> <!-- 回到顶部 -->
<!-- <u-back-top :scroll-top="pageScrollTop" :custom-style="{background: 'rgba(51, 51 51, 0.3)'}" :icon-style="{color: '#ffffff'}"></u-back-top> --> <!-- <u-back-top :scroll-top="pageScrollTop" :custom-style="{background: 'rgba(51, 51 51, 0.3)'}" :icon-style="{color: '#ffffff'}"></u-back-top> -->
<u-back-top :scroll-top="pageScrollTop" :custom-style="{background: 'rgba(51, 51 51, 0.3)'}"></u-back-top>
<u-back-top :scroll-top="pageScrollTop" :custom-style="{background: 'rgba(51, 51 51, 0.3)'}">
</u-back-top>
</block> </block>
</skeleton> </skeleton>
<!-- 海报 -->
<tki-qrcode v-if="info.avatar" style="visibility: hidden;position: fixed;left: -500rpx;" ref="qrcode" @result="qrR" :val="checkArea" :size="115" unit="px" background="#fff"
foreground="#000" pdground="#000" :onval="true" :loadMake="true" :icon="info.avatar" />
<tki-qrcode v-else ref="qrcode"style="visibility: hidden;position: fixed;left: -500rpx;" @result="qrR" :val="checkArea" :size="115" unit="px" background="#fff"
foreground="#000" pdground="#000" :onval="true" :loadMake="true" :icon="require('@/static/images/system/payfail.png')" />
<view class="canvas-box"> <view class="canvas-box">
<canvas style="width: 375px;height: 667px;position:fixed;top:9999px" canvas-id="mycanvas" /> <canvas style="width: 375px;height: 667px;position:fixed;top:9999px" canvas-id="mycanvas" />
</view> </view>
@ -107,7 +113,6 @@
</template> </template>
<script> <script>
import tkiQrcode from "tki-qrcode"; //
export default { export default {
data() { data() {
return { return {
@ -128,12 +133,11 @@
}, },
showLogin: true, showLogin: true,
imagePath: '', imagePath: '',
userToken: ''
userToken: '',
wxCode: '',
onceCode: ''
} }
}, },
components: {
tkiQrcode
},
computed: { computed: {
isRight() { isRight() {
return function(val) { return function(val) {
@ -144,53 +148,43 @@
onLoad(options) { onLoad(options) {
this.goods_id = options.id; this.goods_id = options.id;
this.getGoodsDetail(); this.getGoodsDetail();
this.getData()
this.getWxCode()
}, },
methods: { methods: {
//
//
saveAvatar() {
var that = this
wx.saveImageToPhotosAlbum({
filePath: that.info.avatar,
success(res) {
wx.showModal({
content: '图片已保存到相册,赶紧晒一下吧~',
showCancel: false,
confirmText: '好的',
confirmColor: '#333',
success: function(res) {
if (res.confirm) {
console.log('用户点击确定');
that.maskHidden = false
}
getWxCode() {
uni.request({
url: 'http://dev-gxsky.com/api/salesman/qrcode', //
data: {
scene: 'route=goods&id=2&pt=2',
page: 'pages/route/index',
width: '2800'
}, },
fail: function(res) {
that.maskHidden = false
console.log(res)
method: 'POST',
success: (res) => {
this.wxCode = res.data.data.base_url
if (this.wxCode) {
this.getwxCodeImg()
} }
})
},
fail(err) {
console.log(err)
} }
})
});
}, },
qrR(data) {
this.base64Img = data;
console.log('base64',this.base64Img)
//
//
getwxCodeImg() {
var imgSrc = this.wxCode; //base64
var save = wx.getFileSystemManager();
var number = Math.random();
save.writeFile({
filePath: wx.env.USER_DATA_PATH + '/pic' + number + '.jpg',
data: imgSrc,
encoding: 'base64',
success: res => {
this.onceCode = wx.env.USER_DATA_PATH + '/pic' + number + '.jpg'
}, },
getData() {
let userinfo = uni.getStorageSync('userinfo') || {};
if (userinfo) {
this.info = userinfo
console.log('用户数据缓存',this.info)
} else {
this.$http(this.API.API_USER_CENTER).then(res => {
this.info = res.data;
console.log('用户数据接口',this.info)
})
fail: err => {
console.log(err)
} }
})
}, },
createNewImg() { createNewImg() {
var that = this; var that = this;
@ -198,7 +192,9 @@
var path = "../../static/images/bill.png"; var path = "../../static/images/bill.png";
context.drawImage(path, 0, 0, 375, 667); context.drawImage(path, 0, 0, 375, 667);
// //
context.drawImage(that.base64Img, 24, 530,120, 120);
var number = Math.random();
let wxcode = that.onceCode
context.drawImage(wxcode, 24, 530, 120, 120);
// //
// context.setFontSize(24); // context.setFontSize(24);
// context.setFillStyle('#fff'); // context.setFillStyle('#fff');
@ -262,7 +258,9 @@
// //
getGoodsDetail() { getGoodsDetail() {
let that = this; let that = this;
this.$http(this.API.API_GOODS_DETAIL, {goods_id: this.goods_id}).then(res => {
this.$http(this.API.API_GOODS_DETAIL, {
goods_id: this.goods_id
}).then(res => {
this.skeletonLoading = false; this.skeletonLoading = false;
this.goods_detail = res.data; this.goods_detail = res.data;
this.is_collect = Boolean(res.data.user.is_collect); this.is_collect = Boolean(res.data.user.is_collect);
@ -280,7 +278,9 @@
this.$url('/pages/login/index?type=userinfo'); this.$url('/pages/login/index?type=userinfo');
return; return;
} }
this.$http(this.API.API_COLLECT_DEAL, {goods_id: this.goods_id}).then(res => {
this.$http(this.API.API_COLLECT_DEAL, {
goods_id: this.goods_id
}).then(res => {
this.$msg(res.msg); this.$msg(res.msg);
this.is_collect = Boolean(res.data.user.is_collect); this.is_collect = Boolean(res.data.user.is_collect);
}) })
@ -328,11 +328,13 @@
return match; return match;
}); });
newRichText = newRichText.replace(/style="[^"]+"/gi, function(match, capture) { newRichText = newRichText.replace(/style="[^"]+"/gi, function(match, capture) {
match = match.replace(/width:[^;]+;/gi, 'width:100%;').replace(/width:[^;]+;/gi, 'width:100%;');
match = match.replace(/width:[^;]+;/gi, 'width:100%;').replace(/width:[^;]+;/gi,
'width:100%;');
return match; return match;
}); });
newRichText = newRichText.replace(/<br[^>]*\/>/gi, ''); newRichText = newRichText.replace(/<br[^>]*\/>/gi, '');
newRichText = newRichText.replace(/\<img/gi, '<img style="width:100%;height:auto;display:block;margin:10px 0;"');
newRichText = newRichText.replace(/\<img/gi,
'<img style="width:100%;height:auto;display:block;margin:10px 0;"');
return newRichText; return newRichText;
} else { } else {
return null; return null;
@ -366,6 +368,7 @@
top: 0; top: 0;
right: 0; right: 0;
} }
.cu-btn1 { .cu-btn1 {
position: relative; position: relative;
display: inline-flex; display: inline-flex;
@ -386,6 +389,7 @@
color: #FFFFFF; color: #FFFFFF;
border-radius: 33rpx; border-radius: 33rpx;
} }
.swiper-box { .swiper-box {
width: 750rpx; width: 750rpx;
height: 520rpx; height: 520rpx;
@ -399,6 +403,7 @@
padding: 0 32rpx; padding: 0 32rpx;
padding-top: 20rpx; padding-top: 20rpx;
background-color: #FFFFFF; background-color: #FFFFFF;
// .price>view:nth-of-type(1){ // .price>view:nth-of-type(1){
// color: #FF0000; // color: #FF0000;
// margin-right: 22rpx; // margin-right: 22rpx;
@ -409,6 +414,7 @@
color: #777777; color: #777777;
margin-right: 22rpx; margin-right: 22rpx;
} }
.price>view:nth-of-type(2) { .price>view:nth-of-type(2) {
width: max-content; width: max-content;
padding: 0 18rpx; padding: 0 18rpx;
@ -420,6 +426,7 @@
align-items: center; align-items: center;
color: #FFFFFF; color: #FFFFFF;
} }
.label-box { .label-box {
min-height: 130rpx; min-height: 130rpx;
width: 100%; width: 100%;
@ -427,6 +434,7 @@
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
padding: 30rpx 0 10rpx 0; padding: 30rpx 0 10rpx 0;
.label-item { .label-item {
width: 156rpx; width: 156rpx;
height: 70rpx; height: 70rpx;
@ -450,6 +458,7 @@
background-color: #FFFFFF; background-color: #FFFFFF;
padding: 32rpx; padding: 32rpx;
margin-top: 20rpx; margin-top: 20rpx;
.shop-img { .shop-img {
width: 60rpx; width: 60rpx;
height: 60rpx; height: 60rpx;
@ -464,6 +473,7 @@
padding: 32rpx; padding: 32rpx;
box-sizing: border-box; box-sizing: border-box;
margin-top: 20rpx; margin-top: 20rpx;
.goods-img { .goods-img {
width: 100%; width: 100%;
} }
@ -488,6 +498,7 @@
border-top: 1rpx solid #e5e5e5; border-top: 1rpx solid #e5e5e5;
padding-bottom: constant(safe-area-inset-bottom); padding-bottom: constant(safe-area-inset-bottom);
padding-bottom: env(safe-area-inset-bottom); padding-bottom: env(safe-area-inset-bottom);
.icon-item { .icon-item {
margin-right: 16rpx; margin-right: 16rpx;
background-color: transparent; background-color: transparent;
@ -498,14 +509,17 @@
margin-right: 10rpx; margin-right: 10rpx;
padding: 0; padding: 0;
width: 88rpx; width: 88rpx;
&:first-child { &:first-child {
padding-left: 0; padding-left: 0;
} }
.icon-img { .icon-img {
height: 50rpx; height: 50rpx;
width: 50rpx; width: 50rpx;
} }
} }
.btn { .btn {
margin: 0; margin: 0;
padding: 0; padding: 0;

Loading…
Cancel
Save