兼容app,修改海报生成的问题

This commit is contained in:
gaoxs
2020-05-01 17:48:23 +08:00
parent 1f3fbde86e
commit 9ae2a1d223
39 changed files with 703 additions and 589 deletions

View File

@ -72,6 +72,14 @@ export function getGroomList(type) {
login: true
});
}
/*
* 获取商品海报
* */
export function getProductPoster(id) {
return request.get("/product/poster/" + id, {}, {
login: true
});
}
/*
* 购物车 添加

View File

@ -47,6 +47,80 @@
<view class="mask"></view>
</view>
</template>
<script>
// import html2canvas from "html2canvas";
import { PosterCanvas } from "@/utils";
import { getProductPoster } from "@/api/store";
export default {
name: "StorePoster",
props: {
posterImageStatus: Boolean,
posterData: Object,
goodId: String
},
data: function() {
return {
canvasStatus: false,
posterImage: ""
};
},
watch: {
posterImageStatus: function() {
var that = this;
if (that.posterImageStatus === true) {
that.$nextTick(function() {
that.savePosterPath();
});
}
}
},
mounted: function() {},
methods: {
posterImageClose: function() {
this.posterImageStatus = false;
this.canvasStatus = false;
this.$emit("setPosterImageStatus");
},
savePosterPath: function() {
const that = this;
uni.showLoading({ title: "海报生成中", mask: true });
getProductPoster(this.goodId)
.then(res => {
this.canvasStatus = true;
this.posterImage = res.data;
})
.finally(() => {
uni.hideLoading();
});
// return;
// //清空图片重新生成
// that.posterImage = "";
// uni.showLoading({ title: "海报生成中", mask: true });
// console.log(this);
// var prodId = that.$yrouter.currentRoute.query.id;
// uni.downloadFile({
// url:
// this.$VUE_APP_API_URL +
// "/shareImg/" +
// prodId +
// "?shareImgName=" +
// this.posterData.code,
// fail: function(res) {},
// success: function(res) {
// console.log(res);
// that.canvasStatus = true;
// that.posterImage = res.tempFilePath;
// uni.hideLoading();
// }
// });
}
}
};
</script>
<style scoped lang="less" lang="less">
.poster-first {
overscroll-behavior: contain;
@ -135,45 +209,3 @@
z-index: 9;
}
</style>
<script>
// import html2canvas from "html2canvas";
import { PosterCanvas } from "@/utils";
export default {
name: "StorePoster",
props: {
posterImageStatus: Boolean,
posterData: Object
},
data: function() {
return {
canvasStatus: false,
posterImage: ""
};
},
watch: {
posterImageStatus: function() {
var that = this;
if (that.posterImageStatus === true) {
that.$nextTick(function() {
that.savePosterPath();
});
}
}
},
mounted: function() {},
methods: {
posterImageClose: function() {
this.posterImageStatus = false;
this.canvasStatus = false;
this.$emit("setPosterImageStatus");
},
savePosterPath: function() {
PosterCanvas(this.posterData, posterImage => {
this.canvasStatus = true;
this.posterImage = posterImage;
});
}
}
};
</script>

View File

@ -145,7 +145,7 @@ export default {
.catch(err => {
uni.hideLoading();
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: "none",
duration: 2000
});

View File

@ -1,3 +1,4 @@
// export const VUE_APP_API_URL = 'http://natapp.xinxintuan.co/api';
export const VUE_APP_API_URL = 'https://h5api.dayouqiantu.cn/api';
export const VUE_APP_RESOURCES_URL = 'https://h5.dayouqiantu.cn/static';

View File

@ -12,7 +12,7 @@
"compilerVersion" : 3,
"splashscreen" : {
"alwaysShowBeforeRender" : true,
"waiting" : true,
"waiting" : false,
"autoclose" : true,
"delay" : 0
},

View File

@ -279,7 +279,7 @@ export default {
})
.catch(err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: "none",
duration: 2000
});

View File

@ -338,7 +338,7 @@ export default {
})
.catch(err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: "none",
duration: 2000
});

View File

@ -155,7 +155,7 @@ export default {
})
.catch(err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: "none",
duration: 2000
});

View File

@ -214,7 +214,7 @@ export default {
})
.catch(err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: 'none',
duration: 2000
});

View File

@ -5,19 +5,25 @@
<text class="iconfont icon-xiazai5"></text>
搜索商品
</view>
<view class="qr" @click="startQr()"><image src="@/static/images/qr.png" /></view>
<view class="qr" @click="startQr()">
<image src="@/static/images/qr.png" />
</view>
</view>
<view class="slider-banner banner">
<swiper indicatorDots="true" v-if="banner.length > 0">
<block v-for="(item, bannerIndex) in banner" :key="bannerIndex">
<swiper-item>
<view @click="item.url ? $yrouter.push('/' + item.url) : ''" class="swiper-item"><image :src="item.pic" /></view>
<view @click="item.url ? $yrouter.push('/' + item.url) : ''" class="swiper-item">
<image :src="item.pic" />
</view>
</swiper-item>
</block>
</swiper>
</view>
<view class="news acea-row row-between-wrapper">
<view class="pictrue" v-if="$VUE_APP_RESOURCES_URL"><image src="@/static/images/news.png" /></view>
<view class="pictrue" v-if="$VUE_APP_RESOURCES_URL">
<image src="@/static/images/news.png" />
</view>
<view class="swiper-no-swiping new-banner">
<swiper class="swiper-wrapper" v-if="roll.length > 0" :indicator-dots="false" autoplay circular vertical>
<block v-for="(item, rollIndex) in roll" :key="rollIndex">
@ -36,14 +42,18 @@
</view>
<view class="nav acea-row">
<view @click="goWxappUrl(item)" class="item" v-for="(item, menusIndex) in menus" :key="menusIndex">
<view class="pictrue"><image :src="item.pic" /></view>
<view class="pictrue">
<image :src="item.pic" />
</view>
<view>{{ item.name }}</view>
</view>
</view>
<view class="wrapper hot" v-if="bastList.length > 0">
<image class="bg" src="../../static/images/index-bg.png" mode="widthFix"></image>
<view class="title acea-row row-between-wrapper">
<view class="text"><view class="name line1">热门榜单</view></view>
<view class="text">
<view class="name line1">热门榜单</view>
</view>
<view @click="goHotNewGoods(2)" class="more">
更多
<text class="iconfont icon-jiantou"></text>
@ -53,7 +63,9 @@
<scroll-view scroll-y="false" scroll-x="true">
<view class="newProductsScroll">
<view @click="goGoodsCon(item)" class="newProductsItem" v-for="(item, likeInfoIndex) in likeInfo" :key="likeInfoIndex">
<view class="img-box"><image :src="item.image" /></view>
<view class="img-box">
<image :src="item.image" />
</view>
<view class="pro-info line1"><text>{{ item.storeName }}</text></view>
<view class="money font-color-red"><text>¥{{ item.price }}</text></view>
</view>
@ -63,7 +75,9 @@
</view>
<view class="wrapper" v-if="bastList.length > 0">
<view class="title acea-row row-between-wrapper">
<view class="text"><view class="name line1">精品推荐</view></view>
<view class="text">
<view class="name line1">精品推荐</view>
</view>
<view @click="goHotNewGoods(1)" class="more">
更多
<text class="iconfont icon-jiantou"></text>
@ -89,7 +103,9 @@
<scroll-view scroll-y="false" scroll-x="true">
<view class="newProductsScroll">
<view @click="goGoodsCon(item)" class="newProductsItem" v-for="(item, firstListIndex) in firstList" :key="firstListIndex">
<view class="img-box"><image :src="item.image" /></view>
<view class="img-box">
<image :src="item.image" />
</view>
<view class="pro-info line1">{{ item.storeName }}</view>
<view class="money font-color-red">¥{{ item.price }}</view>
</view>
@ -99,7 +115,9 @@
</view>
<view class="wrapper" v-if="benefit.length > 0">
<view class="title acea-row row-between-wrapper">
<view class="text"><view class="name line1">促销单品</view></view>
<view class="text">
<view class="name line1">促销单品</view>
</view>
<view @click="goGoodsPromotion(4)" class="more">
更多
<text class="iconfont icon-jiantou"></text>
@ -111,166 +129,209 @@
</view>
</template>
<script>
// import { swiper, swiperSlide } from "vue-awesome-swiper";
// import { swiper, swiperSlide } from "vue-awesome-swiper";
import GoodList from '@/components/GoodList';
import PromotionGood from '@/components/PromotionGood';
import CouponWindow from '@/components/CouponWindow';
import { getHomeData, getShare } from '@/api/public';
import cookie from '@/utils/store/cookie';
import { isWeixin } from '@/utils/index';
import GoodList from '@/components/GoodList';
import PromotionGood from '@/components/PromotionGood';
import CouponWindow from '@/components/CouponWindow';
import {
getHomeData,
getShare
} from '@/api/public';
import cookie from '@/utils/store/cookie';
import {
isWeixin,
handleUrlParam
} from '@/utils/index';
const HAS_COUPON_WINDOW = 'has_coupon_window';
const HAS_COUPON_WINDOW = 'has_coupon_window';
export default {
name: 'Index',
components: {
// swiper,
// swiperSlide,
GoodList,
PromotionGood,
CouponWindow
},
props: {},
data: function() {
return {
showCoupon: false,
logoUrl: '',
banner: [],
menus: [],
roll: [],
activity: [],
activityOne: {},
bastList: [],
firstList: [],
info: {
fastList: [],
bastBanner: [],
bastList: []
},
likeInfo: [],
lovely: [],
benefit: [],
couponList: [],
swiperOption: {
pagination: {
el: '.swiper-pagination',
clickable: true
},
autoplay: {
disableOnInteraction: false,
delay: 2000
},
loop: true,
speed: 1000,
observer: true,
observeParents: true
},
swiperRoll: {
direction: 'vertical',
autoplay: {
disableOnInteraction: false,
delay: 2000
},
loop: true,
speed: 1000,
observer: true,
observeParents: true
},
swiperScroll: {
freeMode: true,
freeModeMomentum: false,
slidesPerView: 'auto',
observer: true,
observeParents: true
},
swiperBoutique: {
pagination: {
el: '.swiper-pagination',
clickable: true
},
autoplay: {
disableOnInteraction: false,
delay: 2000
},
loop: true,
speed: 1000,
observer: true,
observeParents: true
},
swiperProducts: {
freeMode: true,
freeModeMomentum: false,
slidesPerView: 'auto',
observer: true,
observeParents: true
}
};
},
onShow: function() {
let that = this;
uni.showLoading({
title: '加载中'
});
getHomeData().then(res => {
that.logoUrl = res.data.logoUrl;
that.$set(that, 'banner', res.data.banner);
that.$set(that, 'menus', res.data.menus);
that.$set(that, 'roll', res.data.roll);
that.$set(that, 'activity', res.data.activity);
var activityOne = res.data.activity.shift();
that.$set(that, 'activityOne', activityOne);
that.$set(that, 'info', res.data.info);
that.$set(that, 'firstList', res.data.firstList);
that.$set(that, 'bastList', res.data.bastList);
that.$set(that, 'likeInfo', res.data.likeInfo);
that.$set(that, 'lovely', res.data.lovely);
that.$set(that, 'benefit', res.data.benefit);
that.$set(that, 'couponList', res.data.couponList);
uni.hideLoading();
that.setOpenShare();
});
},
methods: {
goGoodSearch() {
this.$yrouter.push('/pages/shop/GoodSearch/index');
export default {
name: 'Index',
components: {
// swiper,
// swiperSlide,
GoodList,
PromotionGood,
CouponWindow
},
goWxappUrl(item) {
this.$yrouter.push(item.uniapp_url);
props: {},
data: function() {
return {
showCoupon: false,
logoUrl: '',
banner: [],
menus: [],
roll: [],
activity: [],
activityOne: {},
bastList: [],
firstList: [],
info: {
fastList: [],
bastBanner: [],
bastList: []
},
likeInfo: [],
lovely: [],
benefit: [],
couponList: [],
swiperOption: {
pagination: {
el: '.swiper-pagination',
clickable: true
},
autoplay: {
disableOnInteraction: false,
delay: 2000
},
loop: true,
speed: 1000,
observer: true,
observeParents: true
},
swiperRoll: {
direction: 'vertical',
autoplay: {
disableOnInteraction: false,
delay: 2000
},
loop: true,
speed: 1000,
observer: true,
observeParents: true
},
swiperScroll: {
freeMode: true,
freeModeMomentum: false,
slidesPerView: 'auto',
observer: true,
observeParents: true
},
swiperBoutique: {
pagination: {
el: '.swiper-pagination',
clickable: true
},
autoplay: {
disableOnInteraction: false,
delay: 2000
},
loop: true,
speed: 1000,
observer: true,
observeParents: true
},
swiperProducts: {
freeMode: true,
freeModeMomentum: false,
slidesPerView: 'auto',
observer: true,
observeParents: true
}
};
},
goHotNewGoods(type) {
this.$yrouter.push({
path: '/pages/shop/HotNewGoods/index',
query: { type }
onShow: function() {
let that = this;
uni.showLoading({
title: '加载中'
});
getHomeData().then(res => {
that.logoUrl = res.data.logoUrl;
that.$set(that, 'banner', res.data.banner);
that.$set(that, 'menus', res.data.menus);
that.$set(that, 'roll', res.data.roll);
that.$set(that, 'activity', res.data.activity);
var activityOne = res.data.activity.shift();
that.$set(that, 'activityOne', activityOne);
that.$set(that, 'info', res.data.info);
that.$set(that, 'firstList', res.data.firstList);
that.$set(that, 'bastList', res.data.bastList);
that.$set(that, 'likeInfo', res.data.likeInfo);
that.$set(that, 'lovely', res.data.lovely);
that.$set(that, 'benefit', res.data.benefit);
that.$set(that, 'couponList', res.data.couponList);
uni.hideLoading();
that.setOpenShare();
});
},
goGoodsCon(item) {
this.$yrouter.push({
path: '/pages/shop/GoodsCon/index',
query: { id: item.id }
});
},
goGoodsPromotion() {
this.$yrouter.push('/pages/shop/GoodsPromotion/index');
},
setOpenShare: function() {},
startQr:function(){
methods: {
goGoodSearch() {
this.$yrouter.push('/pages/shop/GoodSearch/index');
},
goWxappUrl(item) {
this.$yrouter.push(item.uniapp_url);
},
goHotNewGoods(type) {
this.$yrouter.push({
path: '/pages/shop/HotNewGoods/index',
query: {
type
}
});
},
goGoodsCon(item) {
this.$yrouter.push({
path: '/pages/shop/GoodsCon/index',
query: {
id: item.id
}
});
},
goGoodsPromotion() {
this.$yrouter.push('/pages/shop/GoodsPromotion/index');
},
setOpenShare: function() {},
startQr: function() {
uni.scanCode({
success:function(res){
console.log(JSON.stringify(res));
success: (res) =>{
let option = handleUrlParam(res.result)
console.log(option)
// {productId: "19", spread: "21", codeType: "routine"}
// {productId: "19", spread: "21", pageType: "good", codeType: "routine"}
switch (option.pageType) {
case 'good':
// 跳转商品详情
this.$yrouter.push({path:'/pages/shop/GoodsCon/index',query:{
q:res.result
}});
break;
case 'group':
// 跳转团购
this.$yrouter.push({path:'/pages/activity/GroupRule/index',query:{
q:res.result
}});
break;
case 'dargain':
// 跳转砍价
this.$yrouter.push({path:'/pages/activity/DargainDetails/index',query:{
q:res.result
}});
break;
default:
// 跳转分销
this.$yrouter.push({path:'/pages/Loading/index',query:{
}});
break;
}
}
});
}
}
};
}
};
</script>
<style scoped lang="less">
.index {
background-color: #fff;
}
.swiper-item {
height: 100%;
}
.index {
background-color: #fff;
}
.swiper-item {
height: 100%;
}
</style>

View File

@ -82,7 +82,7 @@
imageuploaded(res) {
if (res.status !== 200) {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: 'none',
duration: 2000
});
@ -97,7 +97,7 @@
})
.catch(err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: 'none',
duration: 2000
});
@ -137,7 +137,7 @@
})
.catch(err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: 'none',
duration: 2000
});

View File

@ -140,7 +140,7 @@
})
.catch(err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: 'none',
duration: 2000
});
@ -149,7 +149,7 @@
getExpress() {
if (!this.id) {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: 'none',
duration: 2000
});
@ -172,7 +172,7 @@
})
.catch(err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: 'none',
duration: 2000
});

View File

@ -112,7 +112,7 @@
})
.catch(err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: 'none',
duration: 2000
});

View File

@ -130,7 +130,7 @@ export default {
},
err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: 'none',
duration: 2000
});
@ -150,7 +150,7 @@ export default {
},
err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: 'none',
duration: 2000
});

View File

@ -400,7 +400,7 @@ export default {
},
err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: 'none',
duration: 2000
});

View File

@ -135,6 +135,7 @@
v-on:setPosterImageStatus="setPosterImageStatus"
:posterImageStatus="posterImageStatus"
:posterData="posterData"
:goodId="id"
></StorePoster>
<ShareInfo v-on:setShareInfoStatus="setShareInfoStatus" :shareInfoStatus="shareInfoStatus"></ShareInfo>
<view class="generate-posters acea-row row-middle" :class="posters ? 'on' : ''">
@ -258,6 +259,7 @@ export default {
computed: mapGetters(["isLogin"]),
mounted: function() {
let url = handleQrCode();
console.log(url);
if (url && url.productId) {
this.id = url.productId;
} else {
@ -327,6 +329,7 @@ export default {
if (this.$deviceType == "app") {
form.form = "app";
}
uni.showLoading({ title: "加载中", mask: true });
getProductDetail(that.id, form)
.then(res => {
that.$set(that, "storeInfo", res.data.storeInfo);
@ -370,6 +373,9 @@ export default {
icon: "none",
duration: 2000
});
})
.finally(() => {
uni.hideLoading();
});
},
//默认选中属性;
@ -498,14 +504,14 @@ export default {
},
changeattr: function(msg) {
// 修改了规格
console.log(msg)
console.log(msg);
this.attr.cartAttr = msg;
this.isOpen = false;
},
//选择属性;
ChangeAttr: function(res) {
// 修改了规格
console.log(res)
// 修改了规格
console.log(res);
let productSelect = this.productValue[res.value];
if (productSelect) {
this.attr.productAttr[res.indexw].index = res.indexn;

View File

@ -205,7 +205,7 @@
})
.catch(err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: 'none',
duration: 2000
});

View File

@ -67,7 +67,7 @@
})
.catch((err) => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: 'none',
duration: 2000
});

View File

@ -73,7 +73,7 @@ export default {
})
.catch((err)=> {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: 'none',
duration: 2000
});

View File

@ -1,340 +1,329 @@
<template>
<view class="register absolute">
<view class="shading">
<view class="pictrue acea-row row-center-wrapper">
<image src="@/static/images/logo.png" />
</view>
</view>
<view class="whiteBg" v-if="formItem === 1">
<view class="title acea-row row-center-wrapper">
<view class="item" :class="current === index ? 'on' : ''" v-for="(item, index) in navList" @click="navTap(index)"
:key="index">{{ item }}</view>
</view>
<view class="list" :hidden="current !== 0">
<form @submit.prevent="submit">
<view class="item">
<view class="acea-row row-between-wrapper">
<!-- <svg class="icon" aria-hidden="true">
<view class="register absolute">
<view class="shading">
<view class="pictrue acea-row row-center-wrapper">
<image src="@/static/images/logo.png" />
</view>
</view>
<view class="whiteBg" v-if="formItem === 1">
<view class="title acea-row row-center-wrapper">
<view
class="item"
:class="current === index ? 'on' : ''"
v-for="(item, index) in navList"
@click="navTap(index)"
:key="index"
>{{ item }}</view>
</view>
<view class="list" :hidden="current !== 0">
<form @submit.prevent="submit">
<view class="item">
<view class="acea-row row-between-wrapper">
<!-- <svg class="icon" aria-hidden="true">
<use xlink:href="#icon-phone_" />
</svg> -->
<input type="text" placeholder="输入手机号码" v-model="account" required />
</view>
</view>
<view class="item">
<view class="acea-row row-between-wrapper">
<!-- <svg class="icon" aria-hidden="true">
</svg>-->
<input type="text" placeholder="输入手机号码" v-model="account" required />
</view>
</view>
<view class="item">
<view class="acea-row row-between-wrapper">
<!-- <svg class="icon" aria-hidden="true">
<use xlink:href="#icon-code_" />
</svg> -->
<input type="password" placeholder="填写登录密码" v-model="password" required />
</view>
</view>
</form>
</view>
<view class="list" :hidden="current !== 1">
<view class="item">
<view class="acea-row row-between-wrapper">
<!-- <svg class="icon" aria-hidden="true">
</svg>-->
<input type="password" placeholder="填写登录密码" v-model="password" required />
</view>
</view>
</form>
</view>
<view class="list" :hidden="current !== 1">
<view class="item">
<view class="acea-row row-between-wrapper">
<!-- <svg class="icon" aria-hidden="true">
<use xlink:href="#icon-phone_" />
</svg> -->
<input type="text" placeholder="输入手机号码" v-model="account" />
</view>
</view>
<view class="item">
<view class="align-left">
<!-- <svg class="icon" aria-hidden="true">
</svg>-->
<input type="text" placeholder="输入手机号码" v-model="account" />
</view>
</view>
<view class="item">
<view class="align-left">
<!-- <svg class="icon" aria-hidden="true">
<use xlink:href="#icon-code_1" />
</svg> -->
<input type="text" placeholder="填写验证码" class="codeIput" v-model="captcha" />
<button class="code" :disabled="disabled" :class="disabled === true ? 'on' : ''" @click="code">{{ text }}</button>
</view>
</view>
</view>
<view class="logon" @click="loginMobile" :hidden="current !== 1">登录</view>
<view class="logon" @click="submit" :hidden="current === 1">登录</view>
<view class="tip">
没有账号?
<text @click="formItem = 2" class="font-color-red">立即注册</text>
</view>
</view>
<view class="whiteBg" v-else>
<view class="title">注册账号</view>
<view class="list">
<view class="item">
<view>
<!-- <svg class="icon" aria-hidden="true">
</svg>-->
<input type="text" placeholder="填写验证码" class="codeIput" v-model="captcha" />
<button
class="code"
:disabled="disabled"
:class="disabled === true ? 'on' : ''"
@click="code"
>{{ text }}</button>
</view>
</view>
</view>
<view class="logon" @click="loginMobile" :hidden="current !== 1">登录</view>
<view class="logon" @click="submit" :hidden="current === 1">登录</view>
<view class="tip">
没有账号?
<text @click="formItem = 2" class="font-color-red">立即注册</text>
</view>
</view>
<view class="whiteBg" v-else>
<view class="title">注册账号</view>
<view class="list">
<view class="item">
<view>
<!-- <svg class="icon" aria-hidden="true">
<use xlink:href="#icon-phone_" />
</svg> -->
<input type="text" placeholder="输入手机号码" v-model="account" />
</view>
</view>
<view class="item">
<view class="align-left">
<!-- <svg class="icon" aria-hidden="true">
</svg>-->
<input type="text" placeholder="输入手机号码" v-model="account" />
</view>
</view>
<view class="item">
<view class="align-left">
<!-- <svg class="icon" aria-hidden="true">
<use xlink:href="#icon-code_1" />
</svg> -->
<input type="text" placeholder="填写验证码" class="codeIput" v-model="captcha" />
<button class="code" :disabled="disabled" :class="disabled === true ? 'on' : ''" @click="code">{{ text }}</button>
</view>
</view>
<view class="item">
<view>
<!-- <svg class="icon" aria-hidden="true">
</svg>-->
<input type="text" placeholder="填写验证码" class="codeIput" v-model="captcha" />
<button
class="code"
:disabled="disabled"
:class="disabled === true ? 'on' : ''"
@click="code"
>{{ text }}</button>
</view>
</view>
<view class="item">
<view>
<!-- <svg class="icon" aria-hidden="true">
<use xlink:href="#icon-code_" />
</svg> -->
<input type="password" placeholder="填写您的登录密码" v-model="password" />
</view>
</view>
<view class="item">
<view>
<!-- <svg class="icon" aria-hidden="true">
</svg>-->
<input type="password" placeholder="填写您的登录密码" v-model="password" />
</view>
</view>
<view class="item">
<view>
<!-- <svg class="icon" aria-hidden="true">
<use xlink:href="#icon-phone_" />
</svg> -->
<input type="text" placeholder="输入邀请码" v-model="inviteCode" />
</view>
</view>
</view>
<view class="logon" @click="register">注册</view>
<view class="tip">
已有账号?
<text @click="formItem = 1" class="font-color-red">立即登录</text>
</view>
</view>
<view class="bottom"></view>
</view>
</svg>-->
<input type="text" placeholder="输入邀请码" v-model="inviteCode" />
</view>
</view>
</view>
<view class="logon" @click="register">注册</view>
<view class="tip">
已有账号?
<text @click="formItem = 1" class="font-color-red">立即登录</text>
</view>
</view>
<view class="bottom"></view>
</view>
</template>
<script>
import sendVerifyCode from "@/mixins/SendVerifyCode";
import {
login,
loginMobile,
registerVerify,
register
} from "@/api/user";
import attrs, {
required,
alpha_num,
chs_phone
} from "@/utils/validate";
import {
validatorDefaultCatch
} from "@/utils/dialog";
import dayjs from "dayjs";
import cookie from "@/utils/store/cookie";
import sendVerifyCode from "@/mixins/SendVerifyCode";
import { login, loginMobile, registerVerify, register } from "@/api/user";
import attrs, { required, alpha_num, chs_phone } from "@/utils/validate";
import { validatorDefaultCatch } from "@/utils/dialog";
import dayjs from "dayjs";
import cookie from "@/utils/store/cookie";
import {
handleGetUserInfo
} from '@/utils'
import { handleGetUserInfo } from "@/utils";
const BACK_URL = "login_back_url";
const BACK_URL = "login_back_url";
export default {
name: "Login",
mixins: [sendVerifyCode],
data: function() {
return {
navList: ["账号登录"],
current: 0,
account: "",
password: "",
captcha: "",
inviteCode:"",
formItem: 1,
type: "login"
};
},
methods: {
async loginMobile() {
var that = this;
const {
account,
captcha
} = that;
try {
await that
.$validator({
account: [
required(required.message("手机号码")),
chs_phone(chs_phone.message())
],
captcha: [
required(required.message("验证码")),
alpha_num(alpha_num.message("验证码"))
]
})
.validate({
account,
captcha
});
} catch (e) {
return validatorDefaultCatch(e);
}
loginMobile({
phone: that.account,
captcha: that.captcha,
spread: cookie.get("spread")
})
.then(res => {
var data = res.data;
that.$store.commit("LOGIN", data.token, dayjs(data.expires_time));
handleGetUserInfo()
})
.catch(err => {
uni.showToast({
title: err.msg || err.response.data.msg,
icon: 'none',
duration: 2000
});
});
},
async register() {
var that = this;
const {
account,
captcha,
password
} = that;
try {
await that
.$validator({
account: [
required(required.message("手机号码")),
chs_phone(chs_phone.message())
],
captcha: [
required(required.message("验证码")),
alpha_num(alpha_num.message("验证码"))
],
password: [
required(required.message("密码")),
attrs.range([6, 16], attrs.range.message("密码")),
alpha_num(alpha_num.message("密码"))
]
})
.validate({
account,
captcha,
password
});
} catch (e) {
return validatorDefaultCatch(e);
}
register({
account: that.account,
captcha: that.captcha,
password: that.password,
inviteCode: that.inviteCode,
spread: cookie.get("spread")
})
.then(res => {
uni.showToast({
title: res.msg,
icon: "success",
duration: 2000
});
that.formItem = 1;
})
.catch(err => {
uni.showToast({
title: err.msg || err.response.data.msg,
icon: "none",
duration: 2000
});
});
},
async code() {
var that = this;
const {
account
} = that;
try {
await that
.$validator({
account: [
required(required.message("手机号码")),
chs_phone(chs_phone.message())
]
})
.validate({
account
});
} catch (e) {
return validatorDefaultCatch(e);
}
if (that.formItem == 2) that.type = "register";
await registerVerify({
phone: that.account,
type: that.type
})
.then(res => {
uni.showToast({
title: res.msg,
icon: "success",
duration: 2000
});
that.sendCode();
})
.catch(err => {
uni.showToast({
title: err.msg || err.response.data.msg,
icon: "none",
duration: 2000
});
});
},
navTap: function(index) {
this.current = index;
},
async submit() {
const {
account,
password
} = this;
try {
await this.$validator({
account: [
required(required.message("账号")),
attrs.range([5, 16], attrs.range.message("账号")),
alpha_num(alpha_num.message("账号"))
],
password: [
required(required.message("密码")),
attrs.range([6, 16], attrs.range.message("密码")),
alpha_num(alpha_num.message("密码"))
]
}).validate({
account,
password
});
} catch (e) {
return validatorDefaultCatch(e);
}
export default {
name: "Login",
mixins: [sendVerifyCode],
data: function() {
return {
navList: ["账号登录"],
current: 0,
account: "",
password: "",
captcha: "",
inviteCode: "",
formItem: 1,
type: "login"
};
},
methods: {
async loginMobile() {
var that = this;
const { account, captcha } = that;
try {
await that
.$validator({
account: [
required(required.message("手机号码")),
chs_phone(chs_phone.message())
],
captcha: [
required(required.message("验证码")),
alpha_num(alpha_num.message("验证码"))
]
})
.validate({
account,
captcha
});
} catch (e) {
return validatorDefaultCatch(e);
}
loginMobile({
phone: that.account,
captcha: that.captcha,
spread: cookie.get("spread")
})
.then(res => {
var data = res.data;
that.$store.commit("LOGIN", data.token, dayjs(data.expires_time));
handleGetUserInfo();
})
.catch(err => {
uni.showToast({
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: "none",
duration: 2000
});
});
},
async register() {
var that = this;
const { account, captcha, password } = that;
try {
await that
.$validator({
account: [
required(required.message("手机号码")),
chs_phone(chs_phone.message())
],
captcha: [
required(required.message("验证码")),
alpha_num(alpha_num.message("验证码"))
],
password: [
required(required.message("密码")),
attrs.range([6, 16], attrs.range.message("密码")),
alpha_num(alpha_num.message("密码"))
]
})
.validate({
account,
captcha,
password
});
} catch (e) {
return validatorDefaultCatch(e);
}
register({
account: that.account,
captcha: that.captcha,
password: that.password,
inviteCode: that.inviteCode,
spread: cookie.get("spread")
})
.then(res => {
uni.showToast({
title: res.msg,
icon: "success",
duration: 2000
});
that.formItem = 1;
})
.catch(err => {
uni.showToast({
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: "none",
duration: 2000
});
});
},
async code() {
var that = this;
const { account } = that;
try {
await that
.$validator({
account: [
required(required.message("手机号码")),
chs_phone(chs_phone.message())
]
})
.validate({
account
});
} catch (e) {
return validatorDefaultCatch(e);
}
if (that.formItem == 2) that.type = "register";
await registerVerify({
phone: that.account,
type: that.type
})
.then(res => {
uni.showToast({
title: res.msg,
icon: "success",
duration: 2000
});
that.sendCode();
})
.catch(err => {
uni.showToast({
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: "none",
duration: 2000
});
});
},
navTap: function(index) {
this.current = index;
},
async submit() {
const { account, password } = this;
try {
await this.$validator({
account: [
required(required.message("账号")),
attrs.range([5, 16], attrs.range.message("账号")),
alpha_num(alpha_num.message("账号"))
],
password: [
required(required.message("密码")),
attrs.range([6, 16], attrs.range.message("密码")),
alpha_num(alpha_num.message("密码"))
]
}).validate({
account,
password
});
} catch (e) {
return validatorDefaultCatch(e);
}
login({
username: account,
password,
spread: cookie.get("spread")
})
.then(({
data
}) => {
this.$store.commit("LOGIN", data.token, dayjs(data.expires_time));
handleGetUserInfo()
// let replace=this.$yroute.query.replace
// if(replace){
login({
username: account,
password,
spread: cookie.get("spread")
})
.then(({ data }) => {
this.$store.commit("LOGIN", data.token, dayjs(data.expires_time));
handleGetUserInfo();
// let replace=this.$yroute.query.replace
// if(replace){
// }
// this.$yrouter.replace({
// path: this.$yroute.query.replace || '/pages/home/index'
// });
})
.catch(err => {
uni.showToast({
title: err.msg || err.response.data.msg,
icon: "none",
duration: 2000
});
});
}
}
};
// }
// this.$yrouter.replace({
// path: this.$yroute.query.replace || '/pages/home/index'
// });
})
.catch(err => {
console.log(err);
uni.showToast({
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: "none",
duration: 2000
});
});
}
}
};
</script>

View File

@ -156,7 +156,7 @@ export default {
.catch(err => {
uni.hideLoading();
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: "none",
duration: 2000
});
@ -214,7 +214,7 @@ export default {
},
err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: "none",
duration: 2000
});

View File

@ -97,7 +97,7 @@ export default {
})
.catch(err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: "none",
duration: 2000
});
@ -174,7 +174,7 @@ export default {
})
.catch(err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: "none",
duration: 2000
});

View File

@ -109,7 +109,7 @@ export default {
})
.catch(err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: "none",
duration: 2000
});
@ -141,7 +141,7 @@ export default {
})
.catch(err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: "none",
duration: 2000
});

View File

@ -75,7 +75,7 @@ export default {
},
err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: 'none',
duration: 2000
});
@ -92,7 +92,7 @@ export default {
},
err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: 'none',
duration: 2000
});

View File

@ -97,7 +97,7 @@ export default {
},
err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: 'none',
duration: 2000
});

View File

@ -165,7 +165,7 @@ export default {
},
err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: "none",
duration: 2000
});
@ -182,7 +182,7 @@ export default {
},
err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: "none",
duration: 2000
});

View File

@ -201,7 +201,7 @@ export default {
});
} catch (err) {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: "none",
duration: 2000
});

View File

@ -211,7 +211,7 @@ export default {
// .catch(err => {
// uni.hideLoading();
// uni.showToast({
// title: err.msg || err.response.data.msg,
// title: err.msg || err.response.data.msg|| err.response.data.message,
// icon: 'none',
// duration: 2000
// });

View File

@ -76,7 +76,7 @@ export default {
})
.catch(function(err) {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: "none",
duration: 2000
});

View File

@ -76,7 +76,7 @@ export default {
},
err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: 'none',
duration: 2000
});
@ -91,7 +91,7 @@ export default {
},
err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: "none",
duration: 2000
});

View File

@ -77,7 +77,7 @@ export default {
},
err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: 'none',
duration: 2000
});
@ -92,7 +92,7 @@ export default {
},
err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: 'none',
duration: 2000
});

View File

@ -74,7 +74,7 @@ export default {
},
err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: "none",
duration: 2000
});

View File

@ -157,7 +157,7 @@
},
err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: 'none',
duration: 2000
});

View File

@ -92,7 +92,7 @@ export default {
},
err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: "none",
duration: 2000
});

View File

@ -103,7 +103,7 @@ export default {
},
function(err) {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: "none",
duration: 2000
});
@ -200,7 +200,7 @@ export default {
},
err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: "none",
duration: 2000
});

View File

@ -84,7 +84,7 @@ export default {
},
function(err) {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: 'none',
duration: 2000
});

View File

@ -135,7 +135,7 @@ export default {
},
err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: 'none',
duration: 2000
});
@ -150,7 +150,7 @@ export default {
},
err => {
uni.showToast({
title: err.msg || err.response.data.msg,
title: err.msg || err.response.data.msg|| err.response.data.message,
icon: 'none',
duration: 2000
});

View File

@ -27,9 +27,9 @@ const dialog = {
// notify,
loading: {
open: () => {
uni.showLoading({
title: '加载中'
})
// uni.showLoading({
// title: '加载中'
// })
},
close: () => {
uni.hideLoading()

View File

@ -459,19 +459,23 @@ export function handleQrCode() {
try {
var urlSpread = parseQuery()["q"];
if (urlSpread) {
// 通过海报二维码进来
urlSpread = urlSpread
.split("%3F")[1]
.replace(/%3D/g, ":")
.replace(/%26/g, ",")
.split(",")
.map((item, index) => {
item = item.split(":");
return `"${item[0]}":"${item[1]}"`;
})
.join(",");
urlSpread = JSON.parse("{" + urlSpread + "}");
return urlSpread
if (urlSpread.indexOf('%3F') != -1) {
// 通过海报二维码进来
urlSpread = urlSpread
.split("%3F")[1]
.replace(/%3D/g, ":")
.replace(/%26/g, ",")
.split(",")
.map((item, index) => {
item = item.split(":");
return `"${item[0]}":"${item[1]}"`;
})
.join(",");
urlSpread = JSON.parse("{" + urlSpread + "}");
return urlSpread
} else {
return handleUrlParam(urlSpread)
}
}
return null
} catch {
@ -480,6 +484,19 @@ export function handleQrCode() {
}
export function handleUrlParam(path) {
console.log(path)
var url = path.split("?")[1]; //获取url中"?"符后的字串
console.log(url)
var theRequest = new Object();
let strs = url.split("&");
for (var i = 0; i < strs.length; i++) {
theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);
}
return theRequest;
}
const getImageInfo = (images) => {
return new Promise((resolve, reject) => {
let imageAry = {}