修改样式兼容微信小程序
This commit is contained in:
11
.hbuilderx/launch.json
Normal file
11
.hbuilderx/launch.json
Normal file
@ -0,0 +1,11 @@
|
||||
{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
|
||||
// launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
|
||||
"version": "0.0",
|
||||
"configurations": [{
|
||||
"type": "uniCloud",
|
||||
"default": {
|
||||
"launchtype": "remote"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
@ -11,13 +11,9 @@
|
||||
<view class="name line1">{{ cart.productInfo.storeName }}</view>
|
||||
<view class="num">x {{ cart.cartNum }}</view>
|
||||
</view>
|
||||
<view
|
||||
class="attr line1"
|
||||
v-if="cart.productInfo.attrInfo"
|
||||
>{{ cart.productInfo.attrInfo.sku }}</view>
|
||||
<view class="money font-color-red" v-if="!isIntegral">¥{{ cart.truePrice }}</view>
|
||||
<view class="money font-color-red" v-if="isIntegral">{{ cart.productInfo.attrInfo.integral }}积分</view>
|
||||
<view class="evaluate" v-if="evaluate == 3 && cart.isReply==0" @click="routerGo(cart)">评价</view>
|
||||
<view class="attr line1" v-if="cart.productInfo.attrInfo">{{ cart.productInfo.attrInfo.sku }}</view>
|
||||
<view class="money font-color-red">¥{{ cart.truePrice }}</view>
|
||||
<view class="evaluate" v-if="evaluate == 3 && cart.isReply == 0" @click="routerGo(cart)">评价</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -25,26 +21,25 @@
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
name: "OrderGoods",
|
||||
name: 'OrderGoods',
|
||||
props: {
|
||||
isIntegral:Boolean,
|
||||
evaluate: Number,
|
||||
cartInfo: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
}
|
||||
default: () => [],
|
||||
},
|
||||
},
|
||||
data: function() {
|
||||
return {};
|
||||
return {}
|
||||
},
|
||||
mounted: function() {},
|
||||
methods: {
|
||||
routerGo(cart) {
|
||||
this.$yrouter.push({
|
||||
path: "/pages/shop/GoodsEvaluate/index",
|
||||
query: { id: cart.unique }
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
path: '/pages/shop/GoodsEvaluate/index',
|
||||
query: { id: cart.unique },
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
@ -1,26 +1,5 @@
|
||||
<template>
|
||||
<button
|
||||
class="tui-btn"
|
||||
:class="[
|
||||
plain ? 'tui-' + type + '-outline' : 'tui-btn-' + (type || 'primary'),
|
||||
getDisabledClass(disabled, type, plain),
|
||||
getShapeClass(shape, plain),
|
||||
getShadowClass(type, shadow, plain),
|
||||
bold ? 'tui-text-bold' : '',
|
||||
link ? 'tui-btn__link' : ''
|
||||
]"
|
||||
:hover-class="getHoverClass(disabled, type, plain)"
|
||||
:style="{ width: width, height: height, lineHeight: height, fontSize: size + 'rpx', margin: margin }"
|
||||
:loading="loading"
|
||||
:form-type="formType"
|
||||
:open-type="openType"
|
||||
@getuserinfo="bindgetuserinfo"
|
||||
@getphonenumber="bindgetphonenumber"
|
||||
@contact="bindcontact"
|
||||
@error="binderror"
|
||||
:disabled="disabled"
|
||||
@tap="handleClick"
|
||||
>
|
||||
<button class="tui-btn" :class="[plain ? 'tui-' + type + '-outline' : 'tui-btn-' + (type || 'primary'), getDisabledClass(disabled, type, plain), getShapeClass(shape, plain), getShadowClass(type, shadow, plain), bold ? 'tui-text-bold' : '', link ? 'tui-btn__link' : '']" :hover-class="getHoverClass(disabled, type, plain)" :style="{ width: width, height: height, lineHeight: height, fontSize: size + 'rpx', margin: margin }" :loading="loading" :form-type="formType" :open-type="openType" @getuserinfo="bindgetuserinfo" @getphonenumber="bindgetphonenumber" @contact="bindcontact" @error="binderror" :disabled="disabled" @tap="handleClick">
|
||||
<slot></slot>
|
||||
</button>
|
||||
</template>
|
||||
@ -28,150 +7,149 @@
|
||||
<script>
|
||||
export default {
|
||||
name: 'tui-button',
|
||||
behaviors: ['wx://form-field-button'],
|
||||
props: {
|
||||
//样式类型 primary, white, danger, warning, green,blue, gray,black,brown,gray-primary,gray-danger,gray-warning,gray-green
|
||||
type: {
|
||||
type: String,
|
||||
default: 'primary'
|
||||
default: 'primary',
|
||||
},
|
||||
//是否加阴影
|
||||
shadow: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
default: false,
|
||||
},
|
||||
// 宽度 rpx或 %
|
||||
width: {
|
||||
type: String,
|
||||
default: '100%'
|
||||
default: '100%',
|
||||
},
|
||||
//高度 rpx
|
||||
height: {
|
||||
type: String,
|
||||
default: '96rpx'
|
||||
default: '96rpx',
|
||||
},
|
||||
//字体大小 rpx
|
||||
size: {
|
||||
type: Number,
|
||||
default: 32
|
||||
default: 32,
|
||||
},
|
||||
bold: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
default: false,
|
||||
},
|
||||
margin: {
|
||||
type: String,
|
||||
default: '0'
|
||||
default: '0',
|
||||
},
|
||||
//形状 circle(圆角), square(默认方形),rightAngle(平角)
|
||||
shape: {
|
||||
type: String,
|
||||
default: 'square'
|
||||
default: 'square',
|
||||
},
|
||||
plain: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
default: false,
|
||||
},
|
||||
//link样式,去掉边框,结合plain一起使用
|
||||
link: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
default: false,
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
default: false,
|
||||
},
|
||||
//禁用后背景是否为灰色 (非空心button生效)
|
||||
disabledGray: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
default: false,
|
||||
},
|
||||
loading: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
default: false,
|
||||
},
|
||||
formType: {
|
||||
type: String,
|
||||
default: ''
|
||||
default: '',
|
||||
},
|
||||
openType: {
|
||||
type: String,
|
||||
default: ''
|
||||
default: '',
|
||||
},
|
||||
index: {
|
||||
type: [Number, String],
|
||||
default: 0
|
||||
default: 0,
|
||||
},
|
||||
//是否需要阻止重复点击【默认200ms】
|
||||
preventClick: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
time: 0
|
||||
};
|
||||
time: 0,
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleClick() {
|
||||
if (this.disabled) return;
|
||||
if (this.disabled) return
|
||||
if (this.preventClick) {
|
||||
if(new Date().getTime() - this.time <= 200) return;
|
||||
this.time = new Date().getTime();
|
||||
if (new Date().getTime() - this.time <= 200) return
|
||||
this.time = new Date().getTime()
|
||||
setTimeout(() => {
|
||||
this.time = 0;
|
||||
}, 200);
|
||||
this.time = 0
|
||||
}, 200)
|
||||
}
|
||||
this.$emit('click', {
|
||||
index: Number(this.index)
|
||||
});
|
||||
index: Number(this.index),
|
||||
})
|
||||
},
|
||||
bindgetuserinfo({ detail = {} } = {}) {
|
||||
this.$emit('getuserinfo', detail);
|
||||
this.$emit('getuserinfo', detail)
|
||||
},
|
||||
bindcontact({ detail = {} } = {}) {
|
||||
this.$emit('contact', detail);
|
||||
this.$emit('contact', detail)
|
||||
},
|
||||
bindgetphonenumber({ detail = {} } = {}) {
|
||||
this.$emit('getphonenumber', detail);
|
||||
this.$emit('getphonenumber', detail)
|
||||
},
|
||||
binderror({ detail = {} } = {}) {
|
||||
this.$emit('error', detail);
|
||||
this.$emit('error', detail)
|
||||
},
|
||||
getShadowClass: function(type, shadow, plain) {
|
||||
let className = '';
|
||||
let className = ''
|
||||
if (shadow && type != 'white' && !plain) {
|
||||
className = 'tui-shadow-' + type;
|
||||
className = 'tui-shadow-' + type
|
||||
}
|
||||
return className;
|
||||
return className
|
||||
},
|
||||
getDisabledClass: function(disabled, type, plain) {
|
||||
let className = '';
|
||||
let className = ''
|
||||
if (disabled && type != 'white' && type.indexOf('-') == -1) {
|
||||
let classVal = this.disabledGray ? 'tui-gray-disabled' : 'tui-dark-disabled';
|
||||
className = plain ? 'tui-dark-disabled-outline' : classVal;
|
||||
let classVal = this.disabledGray ? 'tui-gray-disabled' : 'tui-dark-disabled'
|
||||
className = plain ? 'tui-dark-disabled-outline' : classVal
|
||||
}
|
||||
return className;
|
||||
return className
|
||||
},
|
||||
getShapeClass: function(shape, plain) {
|
||||
let className = '';
|
||||
let className = ''
|
||||
if (shape == 'circle') {
|
||||
className = plain ? 'tui-outline-fillet' : 'tui-fillet';
|
||||
className = plain ? 'tui-outline-fillet' : 'tui-fillet'
|
||||
} else if (shape == 'rightAngle') {
|
||||
className = plain ? 'tui-outline-rightAngle' : 'tui-rightAngle';
|
||||
className = plain ? 'tui-outline-rightAngle' : 'tui-rightAngle'
|
||||
}
|
||||
return className;
|
||||
return className
|
||||
},
|
||||
getHoverClass: function(disabled, type, plain) {
|
||||
let className = '';
|
||||
let className = ''
|
||||
if (!disabled) {
|
||||
className = plain ? 'tui-outline-hover' : 'tui-' + (type || 'primary') + '-hover';
|
||||
className = plain ? 'tui-outline-hover' : 'tui-' + (type || 'primary') + '-hover'
|
||||
}
|
||||
return className;
|
||||
}
|
||||
}
|
||||
};
|
||||
return className
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
@ -234,7 +212,7 @@ export default {
|
||||
background: #333 !important;
|
||||
color: #fff !important;
|
||||
}
|
||||
.tui-btn-brown{
|
||||
.tui-btn-brown {
|
||||
background: #ac9157 !important;
|
||||
color: #fff !important;
|
||||
}
|
||||
@ -292,8 +270,8 @@ export default {
|
||||
background: #555 !important;
|
||||
color: #e5e5e5 !important;
|
||||
}
|
||||
.tui-brown-hover{
|
||||
background: #A37F49 !important;
|
||||
.tui-brown-hover {
|
||||
background: #a37f49 !important;
|
||||
color: #e5e5e5 !important;
|
||||
}
|
||||
|
||||
|
File diff suppressed because one or more lines are too long
89
main.js
89
main.js
@ -2,41 +2,21 @@ import Vue from 'vue'
|
||||
import App from './App'
|
||||
|
||||
// import router from "./router";
|
||||
import store from "./store";
|
||||
import schema from "async-validator";
|
||||
import dialog from "./utils/dialog";
|
||||
import cookie from "@/utils/store/cookie";
|
||||
import store from './store'
|
||||
import schema from 'async-validator'
|
||||
import dialog from './utils/dialog'
|
||||
import cookie from '@/utils/store/cookie'
|
||||
import cuCustom from '@/components/colorui/components/cu-custom.vue'
|
||||
// // import "@/assets/iconfont/iconfont";
|
||||
// import "@/assets/iconfont/iconfont.css";
|
||||
// // import "@/assets/js/media_750";
|
||||
// // import "vue-ydui/dist/ydui.base.css";
|
||||
// import "@/assets/css/base.less";
|
||||
// import "@/assets/css/reset.less";
|
||||
// import "@/assets/css/style.less";
|
||||
|
||||
// // 引入微信jssdk
|
||||
// var jweixin = require('jweixin-module')
|
||||
// jweixin.ready(function(){
|
||||
// // TODO
|
||||
// });
|
||||
import { parseRoute, _router, parseQuery } from '@/utils'
|
||||
import { VUE_APP_RESOURCES_URL, VUE_APP_API_URL } from '@/config'
|
||||
Vue.component('cu-custom', cuCustom)
|
||||
Vue.config.productionTip = false
|
||||
Vue.config.devtools = process.env.NODE_ENV !== 'production'
|
||||
|
||||
import {
|
||||
parseRoute,
|
||||
_router,
|
||||
parseQuery
|
||||
} from "@/utils";
|
||||
import {
|
||||
VUE_APP_RESOURCES_URL,
|
||||
VUE_APP_API_URL
|
||||
} from "@/config";
|
||||
Vue.component('cu-custom', cuCustom);
|
||||
Vue.config.productionTip = false;
|
||||
Vue.config.devtools = process.env.NODE_ENV !== "production";
|
||||
|
||||
Vue.prototype.$validator = function (rule) {
|
||||
return new schema(rule);
|
||||
};
|
||||
Vue.prototype.$validator = function(rule) {
|
||||
return new schema(rule)
|
||||
}
|
||||
|
||||
Vue.config.productionTip = false
|
||||
App.mpType = 'app'
|
||||
@ -46,35 +26,32 @@ const app = new Vue(App)
|
||||
|
||||
Vue.mixin({
|
||||
onLoad() {
|
||||
const {
|
||||
$mp
|
||||
} = this.$root
|
||||
const { $mp } = this.$root
|
||||
this._route = parseRoute($mp)
|
||||
// this.$VUE_APP_RESOURCES_URL = VUE_APP_RESOURCES_URL;
|
||||
this._data.$VUE_APP_RESOURCES_URL = VUE_APP_RESOURCES_URL;
|
||||
this._data.$VUE_APP_RESOURCES_URL = VUE_APP_RESOURCES_URL
|
||||
},
|
||||
onShow() {
|
||||
_router.app = this
|
||||
_router.currentRoute = this._route
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
Object.defineProperty(Vue.prototype, '$yrouter', {
|
||||
get() {
|
||||
return _router
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
Object.defineProperty(Vue.prototype, '$yroute', {
|
||||
get() {
|
||||
return this._route
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
Vue.prototype.$VUE_APP_RESOURCES_URL = VUE_APP_RESOURCES_URL
|
||||
Vue.prototype.$VUE_APP_API_URL = VUE_APP_API_URL
|
||||
Vue.component('cu-custom', cuCustom);
|
||||
|
||||
Vue.component('cu-custom', cuCustom)
|
||||
|
||||
// #ifdef APP-PLUS
|
||||
// App平台编译的代码
|
||||
@ -96,45 +73,27 @@ store.commit('updateDevicetype', 'routine')
|
||||
// ...mapState(['$deviceType'])
|
||||
// },
|
||||
|
||||
|
||||
// #ifdef H5
|
||||
// H5编译的代码
|
||||
|
||||
import {
|
||||
wechat,
|
||||
clearAuthStatus,
|
||||
oAuth,
|
||||
auth,
|
||||
toAuth,
|
||||
pay,
|
||||
openAddress,
|
||||
openShareAll,
|
||||
openShareAppMessage,
|
||||
openShareTimeline,
|
||||
wechatEvevt,
|
||||
ready,
|
||||
wxShowLocation,
|
||||
} from '@/libs/wechat'
|
||||
import { wechat, clearAuthStatus, oAuth, auth, toAuth, pay, openAddress, openShareAll, openShareAppMessage, openShareTimeline, wechatEvevt, ready, wxShowLocation } from '@/libs/wechat'
|
||||
|
||||
import { isWeixin } from '@/utils'
|
||||
const CACHE_KEY = "clear_0.0.1";
|
||||
const CACHE_KEY = 'clear_0.0.1'
|
||||
|
||||
if (!cookie.has(CACHE_KEY)) {
|
||||
cookie.clearAll()
|
||||
cookie.set(CACHE_KEY, 1);
|
||||
cookie.set(CACHE_KEY, 1)
|
||||
}
|
||||
|
||||
var urlSpread = parseQuery()["spread"];
|
||||
var urlSpread = parseQuery()['spread']
|
||||
if (urlSpread) {
|
||||
cookie.set("spread", urlSpread);
|
||||
cookie.set('spread', urlSpread)
|
||||
}
|
||||
|
||||
// #endif
|
||||
|
||||
|
||||
|
||||
async function init() {
|
||||
|
||||
// #ifdef H5
|
||||
// H5编译的代码
|
||||
// 判断是否是微信浏览器
|
||||
@ -151,14 +110,12 @@ async function init() {
|
||||
Vue.prototype.$deviceType = 'weixinh5'
|
||||
store.commit('updateDevicetype', 'weixinh5')
|
||||
app.$mount()
|
||||
|
||||
}
|
||||
// #endif
|
||||
|
||||
// #ifndef H5
|
||||
app.$mount()
|
||||
// #endif
|
||||
|
||||
}
|
||||
|
||||
init()
|
||||
|
@ -15,7 +15,6 @@
|
||||
"dayjs": "^1.8.22",
|
||||
"jweixin-module": "^1.6.0",
|
||||
"miniapp-color-thief": "^1.0.5",
|
||||
"vue-ydui": "^1.2.6",
|
||||
"vconsole": "^3.3.4",
|
||||
"wechat-jssdk": "^5.0.4"
|
||||
},
|
||||
|
@ -41,7 +41,6 @@
|
||||
"style": {
|
||||
"navigationBarTitleText": "yshop商城",
|
||||
"navigationBarTextStyle": "white",
|
||||
// "enablePullDownRefresh": true,
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
|
@ -10,17 +10,17 @@
|
||||
<view class="tui-pro-price">
|
||||
<view>
|
||||
<text>¥</text>
|
||||
<text class="tui-price">{{ storeInfo.price.split('.')[0] }}</text>
|
||||
<text>.{{ storeInfo.price.split('.')[1] }}</text>
|
||||
<text class="tui-price">{{ formatPrice(storeInfo.price, 0) }}</text>
|
||||
<text>.{{ formatPrice(storeInfo.price, 1) }}</text>
|
||||
</view>
|
||||
<!-- <view class="tui-original-price tui-white__gray">¥199.00</view> -->
|
||||
</view>
|
||||
<view class="tui-sold tui-white__gray">
|
||||
<view class="tui-price-tag">{{ storeInfo.people }}人团</view>
|
||||
<text>已拼{{ storeInfo.sales }}{{ storeInfo.unitNam }}</text>
|
||||
<text>已拼{{ storeInfo.sales }}{{ storeInfo.unitName }}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tui-right__box">库存{{ storeInfo.stock }}{{ storeInfo.unitNam }}</view>
|
||||
<view class="tui-right__box">库存{{ storeInfo.stock }}{{ storeInfo.unitName }}</view>
|
||||
</view>
|
||||
<view class="tui-pro-titbox">
|
||||
<view class="tui-pro-title">{{ storeInfo.title }}</view>
|
||||
@ -130,7 +130,7 @@
|
||||
<view class="tui-operation-left tui-col-5">
|
||||
<!-- #ifdef MP-WEIXIN -->
|
||||
<button class="tui-operation-item" hover-class="tui-opcity" :hover-stay-time="150">
|
||||
<tui-icon name="kefu" :size="22" color="#333"></tui-icon>
|
||||
<view class="iconfont icon-kefu"></view>
|
||||
<view class="tui-operation-text tui-scale-small">客服</view>
|
||||
</button>
|
||||
<!-- #endif -->
|
||||
@ -152,8 +152,8 @@
|
||||
<view>单独购买</view>
|
||||
<view class="tui-flex-end">
|
||||
<view class="tui-size-26">¥</view>
|
||||
<view class="tui-size-36">{{ storeInfo.productPrice.split('.')[0] }}</view>
|
||||
<view class="tui-size-26">.{{ storeInfo.productPrice.split('.')[1] }}</view>
|
||||
<view class="tui-size-36">{{ formatPrice(storeInfo.productPrice, 0) }}</view>
|
||||
<view class="tui-size-26">.{{ formatPrice(storeInfo.productPrice, 1) }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</tui-button>
|
||||
@ -164,8 +164,8 @@
|
||||
<view>发起拼团</view>
|
||||
<view class="tui-flex-end">
|
||||
<view class="tui-size-28">¥</view>
|
||||
<view class="tui-price-large tui-size-36">{{ storeInfo.price.split('.')[0] }}</view>
|
||||
<view class="tui-size-28">.{{ storeInfo.price.split('.')[1] }}</view>
|
||||
<view class="tui-price-large tui-size-36">{{ formatPrice(storeInfo.price, 0) }}</view>
|
||||
<view class="tui-size-28">.{{ formatPrice(storeInfo.price, 1) }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</tui-button>
|
||||
@ -205,7 +205,7 @@ export default {
|
||||
StorePoster,
|
||||
},
|
||||
props: {},
|
||||
data: function () {
|
||||
data: function() {
|
||||
return {
|
||||
domStatus: false,
|
||||
posterData: {
|
||||
@ -246,19 +246,27 @@ export default {
|
||||
userCollect: false,
|
||||
}
|
||||
},
|
||||
computed: {},
|
||||
watch: {
|
||||
$yroute: function (n) {
|
||||
$yroute: function(n) {
|
||||
var that = this
|
||||
if (n.name === NAME) {
|
||||
that.mountedStart()
|
||||
}
|
||||
},
|
||||
},
|
||||
onShow: function () {
|
||||
onShow: function() {
|
||||
this.mountedStart()
|
||||
},
|
||||
methods: {
|
||||
onShareAppMessage: function () {
|
||||
formatPrice(price, index) {
|
||||
console.log(price)
|
||||
if (price) {
|
||||
return price.split('.')[index]
|
||||
}
|
||||
return ''
|
||||
},
|
||||
onShareAppMessage: function() {
|
||||
return {
|
||||
title: this.storeInfo.title,
|
||||
imageUrl: this.storeInfo.image,
|
||||
@ -276,7 +284,7 @@ export default {
|
||||
},
|
||||
}
|
||||
},
|
||||
openAlone: function () {
|
||||
openAlone: function() {
|
||||
this.$yrouter.push({
|
||||
path: '/pages/shop/GoodsCon/index',
|
||||
query: {
|
||||
@ -286,21 +294,21 @@ export default {
|
||||
// this.$yrouter.replace({ path: "/detail/" + this.storeInfo.productId });
|
||||
},
|
||||
//收藏商品
|
||||
setCollect: function () {
|
||||
setCollect: function() {
|
||||
let that = this,
|
||||
id = that.storeInfo.id,
|
||||
category = 'product'
|
||||
if (that.userCollect) {
|
||||
getCollectDel(id, category).then(function () {
|
||||
getCollectDel(id, category).then(function() {
|
||||
that.userCollect = !that.userCollect
|
||||
})
|
||||
} else {
|
||||
getCollectAdd(id, category).then(function () {
|
||||
getCollectAdd(id, category).then(function() {
|
||||
that.userCollect = !that.userCollect
|
||||
})
|
||||
}
|
||||
},
|
||||
mountedStart: function () {
|
||||
mountedStart: function() {
|
||||
var that = this
|
||||
let id = that.$yroute.query.id
|
||||
getCombinationDetail(id).then(res => {
|
||||
@ -328,7 +336,7 @@ export default {
|
||||
that.DefaultSelect()
|
||||
})
|
||||
},
|
||||
DefaultSelect: function () {
|
||||
DefaultSelect: function() {
|
||||
let productAttr = this.attr.productAttr
|
||||
let value = []
|
||||
for (let i = 0; i < productAttr.length; i++) {
|
||||
@ -367,19 +375,19 @@ export default {
|
||||
this.$set(this, 'attrTxt', '请选择')
|
||||
}
|
||||
},
|
||||
getImageBase64: function () {
|
||||
getImageBase64: function() {
|
||||
let that = this
|
||||
imageBase64(this.posterData.image, that.posterData.code).then(res => {
|
||||
that.posterData.image = res.data.image
|
||||
that.posterData.code = res.data.code
|
||||
})
|
||||
},
|
||||
setPosterImageStatus: function () {
|
||||
setPosterImageStatus: function() {
|
||||
// var sTop = document.body || document.documentElement;
|
||||
// sTop.scrollTop = 0;
|
||||
this.posterImageStatus = !this.posterImageStatus
|
||||
},
|
||||
groupRule: function (id) {
|
||||
groupRule: function(id) {
|
||||
var that = this
|
||||
that.$yrouter.push({
|
||||
path: '/pages/activity/GroupRule/index',
|
||||
@ -388,7 +396,7 @@ export default {
|
||||
},
|
||||
})
|
||||
},
|
||||
goReply: function () {
|
||||
goReply: function() {
|
||||
var that = this
|
||||
that.$yrouter.push({
|
||||
path: '/pages/shop/EvaluateList/index',
|
||||
@ -397,21 +405,21 @@ export default {
|
||||
},
|
||||
})
|
||||
},
|
||||
setGroupListCount: function () {
|
||||
setGroupListCount: function() {
|
||||
this.groupListCount = this.groupListCount + 2
|
||||
},
|
||||
//将父级向子集多次传送的函数合二为一;
|
||||
changeFun: function (opt) {
|
||||
changeFun: function(opt) {
|
||||
if (typeof opt !== 'object') opt = {}
|
||||
let action = opt.action || ''
|
||||
let value = opt.value === undefined ? '' : opt.value
|
||||
this[action] && this[action](value)
|
||||
},
|
||||
changeattr: function (res) {
|
||||
changeattr: function(res) {
|
||||
var that = this
|
||||
that.attr.cartAttr = res
|
||||
},
|
||||
ChangeCartNum: function (res) {
|
||||
ChangeCartNum: function(res) {
|
||||
var that = this
|
||||
that.attr.productSelect.cart_num = 1
|
||||
that.cartNum = 1
|
||||
@ -422,7 +430,7 @@ export default {
|
||||
})
|
||||
},
|
||||
//选择属性;
|
||||
ChangeAttr: function (res) {
|
||||
ChangeAttr: function(res) {
|
||||
// 修改了规格
|
||||
let productSelect = this.productValue[res.value]
|
||||
if (productSelect) {
|
||||
@ -445,7 +453,7 @@ export default {
|
||||
}
|
||||
},
|
||||
|
||||
openTeam: function () {
|
||||
openTeam: function() {
|
||||
var that = this
|
||||
if (that.attr.cartAttr == false) {
|
||||
that.attr.cartAttr = !this.attr.cartAttr
|
||||
@ -475,7 +483,7 @@ export default {
|
||||
}
|
||||
},
|
||||
//打开属性插件;
|
||||
selecAttrTap: function () {
|
||||
selecAttrTap: function() {
|
||||
this.attr.cartAttr = true
|
||||
this.isOpen = true
|
||||
},
|
||||
@ -994,6 +1002,18 @@ export default {
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
position: relative;
|
||||
background: none;
|
||||
padding: 0;
|
||||
|
||||
border: 0;
|
||||
line-height: 1em;
|
||||
&:after {
|
||||
display: none;
|
||||
}
|
||||
.tui-operation-text {
|
||||
margin-top: 9rpx;
|
||||
line-height: 1em;
|
||||
}
|
||||
}
|
||||
|
||||
.tui-operation-text {
|
||||
@ -1052,18 +1072,6 @@ export default {
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
/* .tui-popup-btn .tui-btn-class {
|
||||
width: 90% !important;
|
||||
display: block !important;
|
||||
font-size: 28rpx !important;
|
||||
} */
|
||||
|
||||
/* .tui-icon-close {
|
||||
position: absolute;
|
||||
top: 30rpx;
|
||||
right: 30rpx;
|
||||
} */
|
||||
|
||||
.tui-product-box {
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
|
@ -9,8 +9,8 @@
|
||||
<view class="tui-pro-price">
|
||||
<view>
|
||||
<text>¥</text>
|
||||
<text class="tui-price">{{ storeInfo.price.split('.')[0] }}</text>
|
||||
<text>.{{ storeInfo.price.split('.')[1] }}</text>
|
||||
<text class="tui-price">{{ formatPrice(storeInfo.price, 0) }}</text>
|
||||
<text>.{{ formatPrice(storeInfo.price, 1) }}</text>
|
||||
</view>
|
||||
<view class="tui-original-price tui-white__gray" v-text="'¥' + storeInfo.price"></view>
|
||||
</view>
|
||||
@ -28,17 +28,8 @@
|
||||
</view>
|
||||
<view class="tui-pro-titbox">
|
||||
<view class="tui-pro-title">{{ storeInfo.title }}</view>
|
||||
<!-- <button open-type="share" class="tui-share-btn tui-share-position" @tap="onShare">
|
||||
<tui-tag type="gray" shape="circleLeft" padding="12rpx 16rpx">
|
||||
<view class="tui-share-box">
|
||||
<tui-icon name="partake" color="#999" :size="15"></tui-icon>
|
||||
<text class="tui-share-text tui-gray tui-size">分享</text>
|
||||
</view>
|
||||
</tui-tag>
|
||||
</button> -->
|
||||
</view>
|
||||
<view class="tui-padding">
|
||||
<!-- <view class="tui-sub-title tui-size tui-gray">此商品将于2019-06-28,10点结束闪购特卖,时尚美饰联合专场</view> -->
|
||||
<view class="tui-sale-info tui-size tui-gray">
|
||||
<view>库存:{{ storeInfo.stock }}</view>
|
||||
<view>月销{{ storeInfo.sales }}</view>
|
||||
@ -63,13 +54,12 @@
|
||||
<!-- 操作栏 -->
|
||||
<view style="height: 100rpx"></view>
|
||||
|
||||
|
||||
<!--底部操作栏-->
|
||||
<view class="tui-operation">
|
||||
<view class="tui-operation-left tui-col-5">
|
||||
<!-- #ifdef MP-WEIXIN -->
|
||||
<button class="tui-operation-item" hover-class="tui-opcity" :hover-stay-time="150">
|
||||
<tui-icon name="kefu" :size="22" color="#333"></tui-icon>
|
||||
<view class="iconfont icon-kefu"></view>
|
||||
<view class="tui-operation-text tui-scale-small">客服</view>
|
||||
</button>
|
||||
<!-- #endif -->
|
||||
@ -148,7 +138,7 @@ export default {
|
||||
StorePoster,
|
||||
},
|
||||
props: {},
|
||||
data: function () {
|
||||
data: function() {
|
||||
return {
|
||||
seckillStatus: '',
|
||||
domStatus: false,
|
||||
@ -177,11 +167,18 @@ export default {
|
||||
userCollect: false,
|
||||
}
|
||||
},
|
||||
onShow: function () {
|
||||
onShow: function() {
|
||||
this.mountedStart()
|
||||
},
|
||||
methods: {
|
||||
onShareAppMessage: function () {
|
||||
formatPrice(price, index) {
|
||||
console.log(price)
|
||||
if (price) {
|
||||
return price.split('.')[index]
|
||||
}
|
||||
return ''
|
||||
},
|
||||
onShareAppMessage: function() {
|
||||
return {
|
||||
title: this.storeInfo.title,
|
||||
imageUrl: this.storeInfo.image,
|
||||
@ -199,7 +196,7 @@ export default {
|
||||
},
|
||||
}
|
||||
},
|
||||
openAlone: function () {
|
||||
openAlone: function() {
|
||||
this.$yrouter.push({
|
||||
path: '/pages/shop/GoodsCon/index',
|
||||
query: {
|
||||
@ -214,21 +211,21 @@ export default {
|
||||
})
|
||||
},
|
||||
//收藏商品
|
||||
setCollect: function () {
|
||||
setCollect: function() {
|
||||
let that = this,
|
||||
id = that.storeInfo.id,
|
||||
category = 'product'
|
||||
if (that.userCollect) {
|
||||
getCollectDel(id, category).then(function () {
|
||||
getCollectDel(id, category).then(function() {
|
||||
that.userCollect = !that.userCollect
|
||||
})
|
||||
} else {
|
||||
getCollectAdd(id, category).then(function () {
|
||||
getCollectAdd(id, category).then(function() {
|
||||
that.userCollect = !that.userCollect
|
||||
})
|
||||
}
|
||||
},
|
||||
mountedStart: function () {
|
||||
mountedStart: function() {
|
||||
var that = this
|
||||
console.log(this)
|
||||
let id = that.$yroute.query.id
|
||||
@ -260,12 +257,12 @@ export default {
|
||||
updateTitle() {
|
||||
// document.title = this.storeInfo.title || this.$yroute.meta.title;
|
||||
},
|
||||
setPosterImageStatus: function () {
|
||||
setPosterImageStatus: function() {
|
||||
// var sTop = document.body || document.documentElement;
|
||||
// sTop.scrollTop = 0;
|
||||
this.posterImageStatus = !this.posterImageStatus
|
||||
},
|
||||
DefaultSelect: function () {
|
||||
DefaultSelect: function() {
|
||||
let productAttr = this.attr.productAttr
|
||||
let value = []
|
||||
for (let i = 0; i < productAttr.length; i++) {
|
||||
@ -305,13 +302,13 @@ export default {
|
||||
}
|
||||
},
|
||||
//将父级向子集多次传送的函数合二为一;
|
||||
changeFun: function (opt) {
|
||||
changeFun: function(opt) {
|
||||
if (typeof opt !== 'object') opt = {}
|
||||
let action = opt.action || ''
|
||||
let value = opt.value === undefined ? '' : opt.value
|
||||
this[action] && this[action](value)
|
||||
},
|
||||
changeattr: function (res) {
|
||||
changeattr: function(res) {
|
||||
var that = this
|
||||
that.attr.cartAttr = res
|
||||
},
|
||||
@ -330,7 +327,7 @@ export default {
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
ChangeCartNum: function (changeValue) {
|
||||
ChangeCartNum: function(changeValue) {
|
||||
//changeValue:是否 加|减
|
||||
//获取当前变动属性
|
||||
let productSelect = this.productValue[this.attrValue]
|
||||
@ -363,7 +360,7 @@ export default {
|
||||
}
|
||||
},
|
||||
//选择属性;
|
||||
ChangeAttr: function (res) {
|
||||
ChangeAttr: function(res) {
|
||||
// 修改了规格
|
||||
let productSelect = this.productValue[res.value]
|
||||
if (productSelect) {
|
||||
@ -385,11 +382,11 @@ export default {
|
||||
this.$set(this, 'attrTxt', '请选择')
|
||||
}
|
||||
},
|
||||
selecAttrTap: function () {
|
||||
selecAttrTap: function() {
|
||||
this.attr.cartAttr = true
|
||||
this.isOpen = true
|
||||
},
|
||||
tapBuy: function () {
|
||||
tapBuy: function() {
|
||||
var that = this
|
||||
if (that.attr.cartAttr == false) {
|
||||
that.attr.cartAttr = !this.attr.attrcartAttr
|
||||
@ -761,6 +758,19 @@ export default {
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
position: relative;
|
||||
|
||||
background: none;
|
||||
padding: 0;
|
||||
|
||||
border: 0;
|
||||
line-height: 1em;
|
||||
&:after {
|
||||
display: none;
|
||||
}
|
||||
.tui-operation-text {
|
||||
margin-top: 9rpx;
|
||||
line-height: 1em;
|
||||
}
|
||||
}
|
||||
|
||||
.tui-operation-text {
|
||||
|
128
store/index.js
128
store/index.js
@ -1,17 +1,14 @@
|
||||
import Vue from "vue";
|
||||
import Vuex from "vuex";
|
||||
import Vue from 'vue'
|
||||
import Vuex from 'vuex'
|
||||
|
||||
Vue.use(Vuex);
|
||||
const debug = process.env.NODE_ENV !== "production";
|
||||
Vue.use(Vuex)
|
||||
const debug = process.env.NODE_ENV !== 'production'
|
||||
|
||||
import cookie from "@/utils/store/cookie";
|
||||
import {
|
||||
getUserInfo,
|
||||
getUser
|
||||
} from "@/api/user";
|
||||
import dialog from "@/utils/dialog";
|
||||
import cookie from '@/utils/store/cookie'
|
||||
import { getUserInfo, getUser } from '@/api/user'
|
||||
import dialog from '@/utils/dialog'
|
||||
|
||||
const loginKey = "login_status";
|
||||
const loginKey = 'login_status'
|
||||
|
||||
const vuexStore = new Vuex.Store({
|
||||
state: {
|
||||
@ -25,28 +22,28 @@ const vuexStore = new Vuex.Store({
|
||||
$deviceType: null,
|
||||
location: {
|
||||
latitude: '',
|
||||
longitude: ''
|
||||
longitude: '',
|
||||
},
|
||||
storeItems: cookie.get("storeItems") || null,
|
||||
goName: cookie.get("goName") || ""
|
||||
storeItems: cookie.get('storeItems') || null,
|
||||
goName: cookie.get('goName') || '',
|
||||
},
|
||||
mutations: {
|
||||
login(state, token, expires_time) {
|
||||
state.token = token;
|
||||
cookie.set(loginKey, token, expires_time);
|
||||
state.token = token
|
||||
cookie.set(loginKey, token, expires_time)
|
||||
},
|
||||
logout(state) {
|
||||
console.log('清除数据')
|
||||
state.token = null;
|
||||
state.token = null
|
||||
state.userInfo = null
|
||||
cookie.clearAll()
|
||||
},
|
||||
backgroundColor(state, color) {
|
||||
state.color = color;
|
||||
state.color = color
|
||||
// document.body.style.backgroundColor = color;
|
||||
},
|
||||
updateUserInfo(state, userInfo) {
|
||||
state.userInfo = userInfo;
|
||||
state.userInfo = userInfo
|
||||
if (userInfo) {
|
||||
cookie.set('userInfo', userInfo)
|
||||
} else {
|
||||
@ -54,99 +51,86 @@ const vuexStore = new Vuex.Store({
|
||||
}
|
||||
},
|
||||
updateAuthorizationPage(state, isAuthorizationPage) {
|
||||
state.isAuthorizationPage = isAuthorizationPage;
|
||||
state.isAuthorizationPage = isAuthorizationPage
|
||||
},
|
||||
updateAuthorization(state, isAuthorization) {
|
||||
state.isAuthorization = isAuthorization;
|
||||
state.isAuthorization = isAuthorization
|
||||
},
|
||||
updateDevicetype(state, $deviceType) {
|
||||
state.$deviceType = $deviceType;
|
||||
state.$deviceType = $deviceType
|
||||
},
|
||||
setLocation(state, location) {
|
||||
state.location = location
|
||||
},
|
||||
get_store(state, storeItems) {
|
||||
state.storeItems = storeItems;
|
||||
cookie.set("storeItems", storeItems);
|
||||
state.storeItems = storeItems
|
||||
cookie.set('storeItems', storeItems)
|
||||
},
|
||||
get_to(state, goName) {
|
||||
state.goName = goName;
|
||||
cookie.set("goName", goName);
|
||||
}
|
||||
state.goName = goName
|
||||
cookie.set('goName', goName)
|
||||
},
|
||||
},
|
||||
actions: {
|
||||
getLocation({ state, commit }, force) {
|
||||
uni.getLocation({
|
||||
type: 'gcj02',
|
||||
success: function (res) {
|
||||
success: function(res) {
|
||||
console.log(res)
|
||||
commit("setLocation", {
|
||||
commit('setLocation', {
|
||||
longitude: res.longitude,
|
||||
latitude: res.latitude,
|
||||
});
|
||||
}
|
||||
});
|
||||
})
|
||||
},
|
||||
})
|
||||
},
|
||||
userInfo({ state, commit }, force) {
|
||||
if (state.userInfo !== null && !force) {
|
||||
return Promise.resolve(state.userInfo);
|
||||
return Promise.resolve(state.userInfo)
|
||||
}
|
||||
return new Promise(reslove => {
|
||||
getUserInfo().then(res => {
|
||||
commit("updateUserInfo", res.data);
|
||||
reslove(res.data);
|
||||
});
|
||||
commit('updateUserInfo', res.data)
|
||||
reslove(res.data)
|
||||
})
|
||||
}).catch(() => {
|
||||
uni.showToast({
|
||||
title: "获取信息失败!",
|
||||
icon: "none",
|
||||
title: '获取信息失败!',
|
||||
icon: 'none',
|
||||
duration: 2000,
|
||||
});
|
||||
});
|
||||
})
|
||||
})
|
||||
},
|
||||
getUser({ state, commit }) {
|
||||
if (!state.token) {
|
||||
return Promise.reject('未获取到token');
|
||||
return Promise.reject('未获取到token')
|
||||
}
|
||||
return new Promise(reslove => {
|
||||
getUserInfo().then(res => {
|
||||
console.log(res)
|
||||
commit("updateUserInfo", res.data);
|
||||
reslove(res.data);
|
||||
});
|
||||
}).catch((error) => {
|
||||
commit('updateUserInfo', res.data)
|
||||
reslove(res.data)
|
||||
})
|
||||
}).catch(error => {
|
||||
console.log(error)
|
||||
uni.showToast({
|
||||
title: "获取信息失败!",
|
||||
icon: "none",
|
||||
title: '获取信息失败!',
|
||||
icon: 'none',
|
||||
duration: 2000,
|
||||
});
|
||||
});
|
||||
})
|
||||
})
|
||||
},
|
||||
changeLogin({
|
||||
state,
|
||||
commit
|
||||
}, data, date) {
|
||||
commit("login", data, date);
|
||||
changeLogin({ state, commit }, data, date) {
|
||||
commit('login', data, date)
|
||||
},
|
||||
setUserInfo({
|
||||
state,
|
||||
commit
|
||||
}, user) {
|
||||
|
||||
commit("updateUserInfo", user);
|
||||
setUserInfo({ state, commit }, user) {
|
||||
commit('updateUserInfo', user)
|
||||
},
|
||||
changeAuthorizationPage({
|
||||
state,
|
||||
commit
|
||||
}, index) {
|
||||
commit("updateAuthorizationPage", index);
|
||||
changeAuthorizationPage({ state, commit }, index) {
|
||||
commit('updateAuthorizationPage', index)
|
||||
},
|
||||
changeAuthorization({
|
||||
state,
|
||||
commit
|
||||
}, index) {
|
||||
commit("updateAuthorization", index);
|
||||
changeAuthorization({ state, commit }, index) {
|
||||
commit('updateAuthorization', index)
|
||||
},
|
||||
},
|
||||
getters: {
|
||||
@ -160,7 +144,7 @@ const vuexStore = new Vuex.Store({
|
||||
goName: state => state.goName,
|
||||
$deviceType: state => state.$deviceType,
|
||||
},
|
||||
strict: debug
|
||||
});
|
||||
strict: debug,
|
||||
})
|
||||
|
||||
export default vuexStore
|
||||
|
@ -1,24 +1,14 @@
|
||||
// import {
|
||||
// Confirm as confirm,
|
||||
// Alert as alert,
|
||||
// Toast as toast,
|
||||
// Notify as notify,
|
||||
// Loading as loading
|
||||
// } from "vue-ydui/dist/lib.rem/dialog";
|
||||
|
||||
// import Dialog from "../../static/vant-weapp/dialog/dialog";
|
||||
// import notify from "../../static/vant-weapp/notify/notify";
|
||||
|
||||
const dialog = {
|
||||
confirm: (options) => {
|
||||
confirm: options => {
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: options.mes,
|
||||
success(res) {
|
||||
if (res.confirm) {
|
||||
opts()
|
||||
} else if (res.cancel) {}
|
||||
} else if (res.cancel) {
|
||||
}
|
||||
},
|
||||
})
|
||||
},
|
||||
alert: null,
|
||||
@ -33,9 +23,9 @@ const dialog = {
|
||||
},
|
||||
close: () => {
|
||||
uni.hideLoading()
|
||||
}
|
||||
}
|
||||
};
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
// const icons = { error: "操作失败", success: "操作成功" };
|
||||
// Object.keys(icons).reduce((dialog, key) => {
|
||||
@ -55,49 +45,49 @@ const dialog = {
|
||||
// return dialog;
|
||||
// }, dialog);
|
||||
|
||||
dialog.message = (mes = "操作失败", obj = {}) => {
|
||||
dialog.message = (mes = '操作失败', obj = {}) => {
|
||||
return new Promise(function(resolve) {
|
||||
uni.showToast({
|
||||
title: mes,
|
||||
icon: "none",
|
||||
icon: 'none',
|
||||
duration: 2000,
|
||||
complete: () => {
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
resolve()
|
||||
},
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
dialog.toast = (options) => {
|
||||
dialog.toast = options => {
|
||||
uni.showToast({
|
||||
title: options.mes,
|
||||
icon: "none",
|
||||
icon: 'none',
|
||||
duration: 2000,
|
||||
complete: () => {
|
||||
options.callback ? options.callback() : null
|
||||
}
|
||||
});
|
||||
};
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
dialog.error = (mes) => {
|
||||
dialog.error = mes => {
|
||||
uni.showToast({
|
||||
title: mes,
|
||||
icon: "none",
|
||||
duration: 2000
|
||||
});
|
||||
};
|
||||
icon: 'none',
|
||||
duration: 2000,
|
||||
})
|
||||
}
|
||||
|
||||
dialog.validateError = (...args) => {
|
||||
validatorDefaultCatch(...args);
|
||||
};
|
||||
validatorDefaultCatch(...args)
|
||||
}
|
||||
|
||||
export function validatorDefaultCatch(err, type = "message") {
|
||||
export function validatorDefaultCatch(err, type = 'message') {
|
||||
uni.showToast({
|
||||
title: err.errors[0].message,
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
duration: 2000,
|
||||
})
|
||||
return false
|
||||
}
|
||||
|
||||
export default dialog;
|
||||
export default dialog
|
||||
|
@ -1,22 +1,21 @@
|
||||
// #ifdef H5
|
||||
// h5端
|
||||
import Fly from "flyio/dist/npm/fly";
|
||||
import Fly from 'flyio/dist/npm/fly'
|
||||
// #endif
|
||||
|
||||
// #ifdef APP-PLUS
|
||||
// app端
|
||||
import Fly from "flyio/dist/npm/wx";
|
||||
import Fly from 'flyio/dist/npm/wx'
|
||||
// #endif
|
||||
|
||||
// #ifdef MP-WEIXIN
|
||||
import Fly from "flyio/dist/npm/wx";
|
||||
import Fly from 'flyio/dist/npm/wx'
|
||||
// #endif
|
||||
|
||||
import store from "../store";
|
||||
import { handleLoginFailure } from "@/utils";
|
||||
import { VUE_APP_API_URL } from "@/config";
|
||||
import cookie from "@/utils/store/cookie";
|
||||
|
||||
import store from '../store'
|
||||
import { handleLoginFailure } from '@/utils'
|
||||
import { VUE_APP_API_URL } from '@/config'
|
||||
import cookie from '@/utils/store/cookie'
|
||||
|
||||
const fly = new Fly()
|
||||
fly.config.baseURL = VUE_APP_API_URL
|
||||
@ -25,82 +24,87 @@ fly.interceptors.response.use(
|
||||
response => {
|
||||
// console.log(response)
|
||||
// 定时刷新access-token
|
||||
return response;
|
||||
return response
|
||||
},
|
||||
error => {
|
||||
if (error.toString() == 'Error: Network Error') {
|
||||
console.log('————————')
|
||||
console.log('发送请求失败', error)
|
||||
console.log('————————')
|
||||
handleLoginFailure();
|
||||
return Promise.reject({ msg: "未登录", toLogin: true });
|
||||
handleLoginFailure()
|
||||
return Promise.reject({ msg: '未登录', toLogin: true })
|
||||
}
|
||||
if (error.status == 401) {
|
||||
console.log('————————')
|
||||
console.log('登录失效 401', error)
|
||||
console.log('————————')
|
||||
handleLoginFailure();
|
||||
return Promise.reject({ msg: "未登录", toLogin: true });
|
||||
handleLoginFailure()
|
||||
return Promise.reject({ msg: '未登录', toLogin: true })
|
||||
}
|
||||
if (error.response.data.status == 5109) {
|
||||
uni.showToast({
|
||||
title: error.response.data.msg,
|
||||
icon: "none",
|
||||
duration: 2000
|
||||
});
|
||||
icon: 'none',
|
||||
duration: 2000,
|
||||
})
|
||||
}
|
||||
return Promise.reject(error);
|
||||
return Promise.reject(error)
|
||||
}
|
||||
);
|
||||
)
|
||||
|
||||
const defaultOpt = { login: true };
|
||||
const defaultOpt = { login: true }
|
||||
|
||||
function baseRequest(options) {
|
||||
|
||||
// 从缓存中获取 token 防止 token 失效后还会继续请求的情况
|
||||
const token = cookie.get('login_status');
|
||||
const token = cookie.get('login_status')
|
||||
|
||||
// 合并传参过来的 headers
|
||||
// 如果接口需要登录,携带 token 去请求
|
||||
|
||||
options.headers = {
|
||||
...options.headers
|
||||
...options.headers,
|
||||
}
|
||||
|
||||
if (options.login === true) {
|
||||
options.headers = {
|
||||
...options.headers,
|
||||
Authorization: "Bearer " + token
|
||||
Authorization: 'Bearer ' + token,
|
||||
}
|
||||
}
|
||||
|
||||
// 如果需要登录才可访问的接口没有拿到 token 视为登录失效
|
||||
if (options.login === true && !token) {
|
||||
// 跳转到登录或授权页面
|
||||
handleLoginFailure();
|
||||
handleLoginFailure()
|
||||
// 提示错误信息
|
||||
return Promise.reject({ msg: "未登录", toLogin: true });
|
||||
return Promise.reject({ msg: '未登录', toLogin: true })
|
||||
}
|
||||
// 结构请求需要的参数
|
||||
const { url, params, data, login, ...option } = options
|
||||
|
||||
// 发起请求
|
||||
return fly.request(url, params || data, {
|
||||
...option
|
||||
}).then(res => {
|
||||
const data = res.data || {};
|
||||
return fly
|
||||
.request(url, params || data, {
|
||||
...option,
|
||||
})
|
||||
.then(res => {
|
||||
const data = res.data || {}
|
||||
|
||||
if (res.status !== 200) {
|
||||
return Promise.reject({ msg: "请求失败", res, data });
|
||||
return Promise.reject({ msg: '请求失败', res, data })
|
||||
}
|
||||
console.log(data)
|
||||
if ([401, 403].indexOf(data.status) !== -1) {
|
||||
handleLoginFailure();
|
||||
return Promise.reject({ msg: res.data.msg, res, data, toLogin: true });
|
||||
handleLoginFailure()
|
||||
return Promise.reject({ msg: res.data.msg, res, data, toLogin: true })
|
||||
} else if (data.status === 200) {
|
||||
return Promise.resolve(data, res);
|
||||
return Promise.resolve(data, res)
|
||||
} else if (data.status == 5101) {
|
||||
return Promise.resolve(data, res)
|
||||
} else {
|
||||
return Promise.reject({ msg: res.data.msg, res, data });
|
||||
return Promise.reject({ msg: res.data.msg, res, data })
|
||||
}
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
@ -108,7 +112,7 @@ function baseRequest(options) {
|
||||
* 参考文档 https://www.kancloud.cn/yunye/axios/234845
|
||||
*
|
||||
*/
|
||||
const request = ["post", "put", "patch"].reduce((request, method) => {
|
||||
const request = ['post', 'put', 'patch'].reduce((request, method) => {
|
||||
/**
|
||||
*
|
||||
* @param url string 接口地址
|
||||
@ -117,14 +121,12 @@ const request = ["post", "put", "patch"].reduce((request, method) => {
|
||||
* @returns {AxiosPromise}
|
||||
*/
|
||||
request[method] = (url, data = {}, options = {}) => {
|
||||
return baseRequest(
|
||||
Object.assign({ url, data, method }, defaultOpt, options)
|
||||
);
|
||||
};
|
||||
return request;
|
||||
}, {});
|
||||
return baseRequest(Object.assign({ url, data, method }, defaultOpt, options))
|
||||
}
|
||||
return request
|
||||
}, {})
|
||||
|
||||
["get", "delete", "head"].forEach(method => {
|
||||
;['get', 'delete', 'head'].forEach(method => {
|
||||
/**
|
||||
*
|
||||
* @param url string 接口地址
|
||||
@ -133,10 +135,8 @@ const request = ["post", "put", "patch"].reduce((request, method) => {
|
||||
* @returns {AxiosPromise}
|
||||
*/
|
||||
request[method] = (url, params = {}, options = {}) => {
|
||||
return baseRequest(
|
||||
Object.assign({ url, params, method }, defaultOpt, options)
|
||||
);
|
||||
};
|
||||
});
|
||||
return baseRequest(Object.assign({ url, params, method }, defaultOpt, options))
|
||||
}
|
||||
})
|
||||
|
||||
export default request;
|
||||
export default request
|
||||
|
Reference in New Issue
Block a user