Merge pull request 'api' (#52) from zhy into master
Reviewed-on: http://git.luyuan.tk/luyuan/deming/pulls/52
@ -46,7 +46,7 @@ unescapeHTML(temp){}
|
||||
* @param { String } url 服务器 url
|
||||
* @param { String } filePath 要上传文件资源的路径
|
||||
* @param { String } type 上传文件验证类型 默认: img 可选: video
|
||||
* @return { object } promise 对象 resolve 为文件服务器地址 reject 为错误信息
|
||||
* @return { object } promise 对象 resolve 返回文件服务器地址 reject 返回错误信息
|
||||
*/
|
||||
uploadFile({ url, filePath, type = 'img' } = {}) {}
|
||||
```
|
@ -218,13 +218,13 @@ export default {
|
||||
},
|
||||
// 意见反馈列表
|
||||
getFeedbackList({ page }) {
|
||||
return vm.$u.post('Feedback/feedbackList', {
|
||||
return vm.$u.post('Member/feedbackList', {
|
||||
page: page,
|
||||
});
|
||||
},
|
||||
// 意见反馈-写意见
|
||||
writeFeedback({ fb_content, fb_images }) {
|
||||
return vm.$u.post('Feedback/writeFeedback', {
|
||||
return vm.$u.post('Member/writeFeedback', {
|
||||
fb_content: fb_content,
|
||||
fb_images: fb_images,
|
||||
});
|
||||
|
131
components/mine/coupon/index.vue
Normal file
@ -0,0 +1,131 @@
|
||||
<template>
|
||||
<view class="c-coupon">
|
||||
<view :class="status == 0 ? 'coupon-usable' : 'coupon-unable'">
|
||||
<view class="info-type" :style="{ backgroundImage: 'url(' + (status == 0 ? '/static/image/mine/30.png' : '/static/image/mine/31.png') + ')', backgroundSize:'contain', backgroundRepeat: 'no-repeat' }">
|
||||
<div class="wrap_left_top"></div>
|
||||
{{ couponInfo.index&1 ? '店铺优惠券' : '平台优惠券' }}
|
||||
</view>
|
||||
<view class="coupon-info">
|
||||
<view class="info-usable">
|
||||
<view class="price">¥<span>10</span></view>
|
||||
<view class="condition">满100使用</view>
|
||||
</view>
|
||||
<view class="info-store u-line-1">仅限 nike官方旗舰店 鞋子商品使用</view>
|
||||
<view class="info-integral">兑换积分:200积分</view>
|
||||
<view class="info-date">有效期2018.09.06-2018.10.06</view>
|
||||
</view>
|
||||
<view class="coupon-btn">
|
||||
<text v-if="type == 0 && status == 0" @click="exchange">立即兑换</text>
|
||||
<text v-if="type == 1 && status == 0" @click="use">立即使用</text>
|
||||
<image v-if="status == 1" src="/static/image/mine/28.png"></image>
|
||||
<image v-if="status == 2" src="/static/image/mine/29.png"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
<script>
|
||||
/**
|
||||
* coupon 优惠券
|
||||
* @description 优惠券组件
|
||||
* @property {Number} type 优惠券操作方式(兑换优惠券: 0 / 使用优惠券: 1)
|
||||
* @property {Object} coupon-info 优惠券信息
|
||||
* @event {Function} exchange 兑换优惠券
|
||||
* @event {Function} use 使用优惠券
|
||||
*/
|
||||
export default {
|
||||
data() {
|
||||
return {}
|
||||
},
|
||||
props: {
|
||||
status: Number,
|
||||
type: Number,
|
||||
couponInfo: Object,
|
||||
},
|
||||
methods: {
|
||||
exchange() {
|
||||
this.$emit('exchange', this.couponInfo.index);
|
||||
},
|
||||
use() {
|
||||
this.$emit('use', this.couponInfo.index);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.c-coupon {
|
||||
position: relative;
|
||||
z-index: 9;
|
||||
@mixin coupon-image($url) {
|
||||
width: 690rpx;
|
||||
height: 194rpx;
|
||||
background: url($url) no-repeat left top / contain;
|
||||
color: #FFFFFF;
|
||||
.info-type {
|
||||
width: 150rpx;
|
||||
height: 30rpx;
|
||||
line-height: 30rpx;
|
||||
font-size: 20rpx;
|
||||
border-radius: 10rpx 0rpx 10rpx 0rpx;
|
||||
padding-left: 25rpx;
|
||||
margin-bottom: 6rpx;
|
||||
}
|
||||
.coupon-info {
|
||||
z-index: 10;
|
||||
position: absolute;
|
||||
top: 36rpx;
|
||||
left: 0;
|
||||
font-weight: 500;
|
||||
padding-left: 20rpx;
|
||||
width: 360rpx;
|
||||
.info-usable{
|
||||
margin-bottom: 6rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
.price {
|
||||
margin-right: 16rpx;
|
||||
font-size: 40rpx;
|
||||
> span {
|
||||
font-size: 50rpx;
|
||||
}
|
||||
}
|
||||
.condition {
|
||||
font-size: 24rpx;
|
||||
}
|
||||
}
|
||||
.info-store{
|
||||
margin-bottom: 10rpx;
|
||||
font-size: 22rpx;
|
||||
}
|
||||
.info-integral{
|
||||
margin-bottom: 10rpx;
|
||||
font-size: 22rpx;
|
||||
}
|
||||
.info-date{
|
||||
font-size: 20rpx;
|
||||
}
|
||||
}
|
||||
.coupon-btn {
|
||||
z-index: 10;
|
||||
position: absolute;
|
||||
right: 60rpx;
|
||||
top: 50%;
|
||||
transform: translate(0, -50%);
|
||||
> text {
|
||||
font-size: 32rpx;
|
||||
font-weight: 500;
|
||||
color: rgba(255,255,255,1);
|
||||
}
|
||||
> image {
|
||||
width: 122rpx;
|
||||
height: 122rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
.coupon-usable {
|
||||
@include coupon-image('/static/image/mine/26.png');
|
||||
}
|
||||
.coupon-unable {
|
||||
@include coupon-image('/static/image/mine/27.png');
|
||||
}
|
||||
}
|
||||
</style>
|
@ -1,245 +0,0 @@
|
||||
const BindingX = uni.requireNativePlugin('bindingx');
|
||||
const dom = uni.requireNativePlugin('dom');
|
||||
const animation = uni.requireNativePlugin('animation');
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
right: 0,
|
||||
button: [],
|
||||
preventGesture: false
|
||||
}
|
||||
},
|
||||
|
||||
watch: {
|
||||
show(newVal) {
|
||||
if (!this.position || JSON.stringify(this.position) === '{}') return;
|
||||
if (this.autoClose) return
|
||||
if (this.isInAnimation) return
|
||||
if (newVal) {
|
||||
this.open()
|
||||
} else {
|
||||
this.close()
|
||||
}
|
||||
},
|
||||
},
|
||||
created() {
|
||||
if (this.swipeaction.children !== undefined) {
|
||||
this.swipeaction.children.push(this)
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.boxSelector = this.getEl(this.$refs['selector-box-hock']);
|
||||
this.selector = this.getEl(this.$refs['selector-content-hock']);
|
||||
this.buttonSelector = this.getEl(this.$refs['selector-button-hock']);
|
||||
this.position = {}
|
||||
this.x = 0
|
||||
setTimeout(() => {
|
||||
this.getSelectorQuery()
|
||||
}, 200)
|
||||
},
|
||||
beforeDestroy() {
|
||||
if (this.timing) {
|
||||
BindingX.unbind({
|
||||
token: this.timing.token,
|
||||
eventType: 'timing'
|
||||
})
|
||||
}
|
||||
if (this.eventpan) {
|
||||
BindingX.unbind({
|
||||
token: this.eventpan.token,
|
||||
eventType: 'pan'
|
||||
})
|
||||
}
|
||||
this.swipeaction.children.forEach((item, index) => {
|
||||
if (item === this) {
|
||||
this.swipeaction.children.splice(index, 1)
|
||||
}
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
onClick(index, item) {
|
||||
this.$emit('click', {
|
||||
content: item,
|
||||
index
|
||||
})
|
||||
},
|
||||
touchstart(e) {
|
||||
if (this.isInAnimation) return
|
||||
if (this.stop) return
|
||||
this.stop = true
|
||||
if (this.autoClose) {
|
||||
this.swipeaction.closeOther(this)
|
||||
}
|
||||
let endWidth = this.right
|
||||
let boxStep = `(x+${this.x})`
|
||||
let pageX = `${boxStep}> ${-endWidth} && ${boxStep} < 0?${boxStep}:(x+${this.x} < 0? ${-endWidth}:0)`
|
||||
|
||||
let props = [{
|
||||
element: this.selector,
|
||||
property: 'transform.translateX',
|
||||
expression: pageX
|
||||
}]
|
||||
|
||||
let left = 0
|
||||
for (let i = 0; i < this.options.length; i++) {
|
||||
let buttonSelectors = this.getEl(this.$refs['button-hock'][i]);
|
||||
if (this.button.length === 0 || !this.button[i] || !this.button[i].width) return
|
||||
let moveMix = endWidth - left
|
||||
left += this.button[i].width
|
||||
let step = `(${this.x}+x)/${endWidth}`
|
||||
let moveX = `(${step}) * ${moveMix}`
|
||||
let pageButtonX = `${moveX}&& (x+${this.x} > ${-endWidth})?${moveX}:${-moveMix}`
|
||||
props.push({
|
||||
element: buttonSelectors,
|
||||
property: 'transform.translateX',
|
||||
expression: pageButtonX
|
||||
})
|
||||
}
|
||||
|
||||
this.eventpan = this._bind(this.boxSelector, props, 'pan', (e) => {
|
||||
if (e.state === 'end') {
|
||||
this.x = e.deltaX + this.x;
|
||||
if (this.x < -endWidth) {
|
||||
this.x = -endWidth
|
||||
}
|
||||
if (this.x > 0) {
|
||||
this.x = 0
|
||||
}
|
||||
this.stop = false
|
||||
this.bindTiming();
|
||||
}
|
||||
})
|
||||
},
|
||||
touchend(e) {
|
||||
this.$nextTick(() => {
|
||||
if (this.isopen && !this.isDrag && !this.isInAnimation) {
|
||||
this.close()
|
||||
}
|
||||
})
|
||||
},
|
||||
bindTiming() {
|
||||
if (this.isopen) {
|
||||
this.move(this.x, -this.right)
|
||||
} else {
|
||||
this.move(this.x, -40)
|
||||
}
|
||||
},
|
||||
move(left, value) {
|
||||
if (left >= value) {
|
||||
this.close()
|
||||
} else {
|
||||
this.open()
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 开启swipe
|
||||
*/
|
||||
open() {
|
||||
this.animation(true)
|
||||
},
|
||||
/**
|
||||
* 关闭swipe
|
||||
*/
|
||||
close() {
|
||||
this.animation(false)
|
||||
},
|
||||
/**
|
||||
* 开启关闭动画
|
||||
* @param {Object} type
|
||||
*/
|
||||
animation(type) {
|
||||
this.isDrag = true
|
||||
let endWidth = this.right
|
||||
let time = 200
|
||||
this.isInAnimation = true;
|
||||
|
||||
let exit = `t>${time}`;
|
||||
let translate_x_expression = `easeOutExpo(t,${this.x},${type?(-endWidth-this.x):(-this.x)},${time})`
|
||||
let props = [{
|
||||
element: this.selector,
|
||||
property: 'transform.translateX',
|
||||
expression: translate_x_expression
|
||||
}]
|
||||
|
||||
let left = 0
|
||||
for (let i = 0; i < this.options.length; i++) {
|
||||
let buttonSelectors = this.getEl(this.$refs['button-hock'][i]);
|
||||
if (this.button.length === 0 || !this.button[i] || !this.button[i].width) return
|
||||
let moveMix = endWidth - left
|
||||
left += this.button[i].width
|
||||
let step = `${this.x}/${endWidth}`
|
||||
let moveX = `(${step}) * ${moveMix}`
|
||||
let pageButtonX = `easeOutExpo(t,${moveX},${type ? -moveMix + '-' + moveX: 0 + '-' + moveX},${time})`
|
||||
props.push({
|
||||
element: buttonSelectors,
|
||||
property: 'transform.translateX',
|
||||
expression: pageButtonX
|
||||
})
|
||||
}
|
||||
|
||||
this.timing = BindingX.bind({
|
||||
eventType: 'timing',
|
||||
exitExpression: exit,
|
||||
props: props
|
||||
}, (e) => {
|
||||
if (e.state === 'end' || e.state === 'exit') {
|
||||
this.x = type ? -endWidth : 0
|
||||
this.isInAnimation = false;
|
||||
|
||||
this.isopen = this.isopen || false
|
||||
if (this.isopen !== type) {
|
||||
this.$emit('change', type)
|
||||
}
|
||||
this.isopen = type
|
||||
this.isDrag = false
|
||||
}
|
||||
});
|
||||
},
|
||||
/**
|
||||
* 绑定 BindingX
|
||||
* @param {Object} anchor
|
||||
* @param {Object} props
|
||||
* @param {Object} fn
|
||||
*/
|
||||
_bind(anchor, props, eventType, fn) {
|
||||
return BindingX.bind({
|
||||
anchor,
|
||||
eventType,
|
||||
props
|
||||
}, (e) => {
|
||||
typeof(fn) === 'function' && fn(e)
|
||||
});
|
||||
},
|
||||
/**
|
||||
* 获取ref
|
||||
* @param {Object} el
|
||||
*/
|
||||
getEl(el) {
|
||||
return el.ref
|
||||
},
|
||||
/**
|
||||
* 获取节点信息
|
||||
*/
|
||||
getSelectorQuery() {
|
||||
dom.getComponentRect(this.$refs['selector-content-hock'], (data) => {
|
||||
if (this.position.content) return
|
||||
this.position.content = data.size
|
||||
})
|
||||
for (let i = 0; i < this.options.length; i++) {
|
||||
dom.getComponentRect(this.$refs['button-hock'][i], (data) => {
|
||||
if (!this.button) {
|
||||
this.button = []
|
||||
}
|
||||
if (this.options.length === this.button.length) return
|
||||
this.button.push(data.size)
|
||||
this.right += data.size.width
|
||||
if (this.autoClose) return
|
||||
if (this.show) {
|
||||
this.open()
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,204 +0,0 @@
|
||||
/**
|
||||
* 监听页面内值的变化,主要用于动态开关swipe-action
|
||||
* @param {Object} newValue
|
||||
* @param {Object} oldValue
|
||||
* @param {Object} ownerInstance
|
||||
* @param {Object} instance
|
||||
*/
|
||||
function sizeReady(newValue, oldValue, ownerInstance, instance) {
|
||||
var state = instance.getState()
|
||||
state.position = JSON.parse(newValue)
|
||||
if (!state.position || state.position.length === 0) return
|
||||
var show = state.position[0].show
|
||||
state.left = state.left || state.position[0].left;
|
||||
// 通过用户变量,开启或关闭
|
||||
if (show) {
|
||||
openState(true, instance, ownerInstance)
|
||||
} else {
|
||||
openState(false, instance, ownerInstance)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 开始触摸操作
|
||||
* @param {Object} e
|
||||
* @param {Object} ins
|
||||
*/
|
||||
function touchstart(e, ins) {
|
||||
var instance = e.instance;
|
||||
var state = instance.getState();
|
||||
var pageX = e.touches[0].pageX;
|
||||
// 开始触摸时移除动画类
|
||||
instance.removeClass('ani');
|
||||
var owner = ins.selectAllComponents('.button-hock')
|
||||
for (var i = 0; i < owner.length; i++) {
|
||||
owner[i].removeClass('ani');
|
||||
}
|
||||
// state.position = JSON.parse(instance.getDataset().position);
|
||||
state.left = state.left || state.position[0].left;
|
||||
// 获取最终按钮组的宽度
|
||||
state.width = pageX - state.left;
|
||||
ins.callMethod('closeSwipe')
|
||||
}
|
||||
|
||||
/**
|
||||
* 开始滑动操作
|
||||
* @param {Object} e
|
||||
* @param {Object} ownerInstance
|
||||
*/
|
||||
function touchmove(e, ownerInstance) {
|
||||
var instance = e.instance;
|
||||
var disabled = instance.getDataset().disabled
|
||||
var state = instance.getState()
|
||||
// fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复
|
||||
disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false;
|
||||
|
||||
if (disabled) return
|
||||
var pageX = e.touches[0].pageX;
|
||||
move(pageX - state.width, instance, ownerInstance)
|
||||
}
|
||||
|
||||
/**
|
||||
* 结束触摸操作
|
||||
* @param {Object} e
|
||||
* @param {Object} ownerInstance
|
||||
*/
|
||||
function touchend(e, ownerInstance) {
|
||||
var instance = e.instance;
|
||||
var disabled = instance.getDataset().disabled
|
||||
var state = instance.getState()
|
||||
|
||||
// fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复
|
||||
disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false;
|
||||
|
||||
if (disabled) return
|
||||
// 滑动过程中触摸结束,通过阙值判断是开启还是关闭
|
||||
// fixed by mehaotian 定时器解决点击按钮,touchend 触发比 click 事件时机早的问题 ,主要是 ios13
|
||||
moveDirection(state.left, -40, instance, ownerInstance)
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置移动距离
|
||||
* @param {Object} value
|
||||
* @param {Object} instance
|
||||
* @param {Object} ownerInstance
|
||||
*/
|
||||
function move(value, instance, ownerInstance) {
|
||||
var state = instance.getState()
|
||||
// 获取可滑动范围
|
||||
var x = Math.max(-state.position[1].width, Math.min((value), 0));
|
||||
state.left = x;
|
||||
instance.setStyle({
|
||||
transform: 'translateX(' + x + 'px)',
|
||||
'-webkit-transform': 'translateX(' + x + 'px)'
|
||||
})
|
||||
// 折叠按钮动画
|
||||
buttonFold(x, instance, ownerInstance)
|
||||
}
|
||||
|
||||
/**
|
||||
* 移动方向判断
|
||||
* @param {Object} left
|
||||
* @param {Object} value
|
||||
* @param {Object} ownerInstance
|
||||
* @param {Object} ins
|
||||
*/
|
||||
function moveDirection(left, value, ins, ownerInstance) {
|
||||
var state = ins.getState()
|
||||
var position = state.position
|
||||
var isopen = state.isopen
|
||||
if (!position[1].width) {
|
||||
openState(false, ins, ownerInstance)
|
||||
return
|
||||
}
|
||||
// 如果已经是打开状态,进行判断是否关闭,还是保留打开状态
|
||||
if (isopen) {
|
||||
if (-left <= position[1].width) {
|
||||
openState(false, ins, ownerInstance)
|
||||
} else {
|
||||
openState(true, ins, ownerInstance)
|
||||
}
|
||||
return
|
||||
}
|
||||
// 如果是关闭状态,进行判断是否打开,还是保留关闭状态
|
||||
if (left <= value) {
|
||||
openState(true, ins, ownerInstance)
|
||||
} else {
|
||||
openState(false, ins, ownerInstance)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置按钮移动距离
|
||||
* @param {Object} value
|
||||
* @param {Object} instance
|
||||
* @param {Object} ownerInstance
|
||||
*/
|
||||
function buttonFold(value, instance, ownerInstance) {
|
||||
var ins = ownerInstance.selectAllComponents('.button-hock');
|
||||
var state = instance.getState();
|
||||
var position = state.position;
|
||||
var arr = [];
|
||||
var w = 0;
|
||||
for (var i = 0; i < ins.length; i++) {
|
||||
if (!ins[i].getDataset().button) return
|
||||
var btnData = JSON.parse(ins[i].getDataset().button)
|
||||
|
||||
// fix by mehaotian TODO 在 app-vue 中,字符串转对象,需要转两次,这里先这么兼容
|
||||
if (typeof(btnData) === 'string') {
|
||||
btnData = JSON.parse(btnData)
|
||||
}
|
||||
|
||||
var button = btnData[i] && btnData[i].width || 0
|
||||
w += button
|
||||
arr.push(-w)
|
||||
// 动态计算按钮组每个按钮的折叠动画移动距离
|
||||
var distance = arr[i - 1] + value * (arr[i - 1] / position[1].width)
|
||||
if (i != 0) {
|
||||
ins[i].setStyle({
|
||||
transform: 'translateX(' + distance + 'px)',
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 开启状态
|
||||
* @param {Boolean} type
|
||||
* @param {Object} ins
|
||||
* @param {Object} ownerInstance
|
||||
*/
|
||||
function openState(type, ins, ownerInstance) {
|
||||
var state = ins.getState()
|
||||
var position = state.position
|
||||
if (state.isopen === undefined) {
|
||||
state.isopen = false
|
||||
}
|
||||
// 只有状态有改变才会通知页面改变状态
|
||||
if (state.isopen !== type) {
|
||||
// 通知页面,已经打开
|
||||
ownerInstance.callMethod('change', {
|
||||
open: type
|
||||
})
|
||||
}
|
||||
// 设置打开和移动状态
|
||||
state.isopen = type
|
||||
|
||||
|
||||
// 添加动画类
|
||||
ins.addClass('ani');
|
||||
var owner = ownerInstance.selectAllComponents('.button-hock')
|
||||
for (var i = 0; i < owner.length; i++) {
|
||||
owner[i].addClass('ani');
|
||||
}
|
||||
// 设置最终移动位置
|
||||
move(type ? -position[1].width : 0, ins, ownerInstance)
|
||||
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
sizeReady: sizeReady,
|
||||
touchstart: touchstart,
|
||||
touchmove: touchmove,
|
||||
touchend: touchend
|
||||
}
|
@ -1,160 +0,0 @@
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
isshow: false,
|
||||
viewWidth: 0,
|
||||
buttonWidth: 0,
|
||||
disabledView: false,
|
||||
x: 0,
|
||||
transition: false
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
show(newVal) {
|
||||
if (this.autoClose) return
|
||||
if (newVal) {
|
||||
this.open()
|
||||
} else {
|
||||
this.close()
|
||||
}
|
||||
},
|
||||
},
|
||||
created() {
|
||||
if (this.swipeaction.children !== undefined) {
|
||||
this.swipeaction.children.push(this)
|
||||
}
|
||||
},
|
||||
beforeDestroy() {
|
||||
this.swipeaction.children.forEach((item, index) => {
|
||||
if (item === this) {
|
||||
this.swipeaction.children.splice(index, 1)
|
||||
}
|
||||
})
|
||||
},
|
||||
mounted() {
|
||||
this.isopen = false
|
||||
this.transition = true
|
||||
setTimeout(() => {
|
||||
this.getQuerySelect()
|
||||
}, 50)
|
||||
|
||||
},
|
||||
methods: {
|
||||
onClick(index, item) {
|
||||
this.$emit('click', {
|
||||
content: item,
|
||||
index
|
||||
})
|
||||
},
|
||||
touchstart(e) {
|
||||
let {
|
||||
pageX,
|
||||
pageY
|
||||
} = e.changedTouches[0]
|
||||
this.transition = false
|
||||
this.startX = pageX
|
||||
if (this.autoClose) {
|
||||
this.swipeaction.closeOther(this)
|
||||
}
|
||||
},
|
||||
touchmove(e) {
|
||||
let {
|
||||
pageX,
|
||||
} = e.changedTouches[0]
|
||||
this.slide = this.getSlide(pageX)
|
||||
if (this.slide === 0) {
|
||||
this.disabledView = false
|
||||
}
|
||||
|
||||
},
|
||||
touchend(e) {
|
||||
this.stop = false
|
||||
this.transition = true
|
||||
if (this.isopen) {
|
||||
if (this.moveX === -this.buttonWidth) {
|
||||
this.close()
|
||||
return
|
||||
}
|
||||
this.move()
|
||||
} else {
|
||||
if (this.moveX === 0) {
|
||||
this.close()
|
||||
return
|
||||
}
|
||||
this.move()
|
||||
}
|
||||
},
|
||||
open() {
|
||||
this.x = this.moveX
|
||||
this.$nextTick(() => {
|
||||
this.x = -this.buttonWidth
|
||||
this.moveX = this.x
|
||||
|
||||
if(!this.isopen){
|
||||
this.isopen = true
|
||||
this.$emit('change', true)
|
||||
}
|
||||
})
|
||||
},
|
||||
close() {
|
||||
this.x = this.moveX
|
||||
this.$nextTick(() => {
|
||||
this.x = 0
|
||||
this.moveX = this.x
|
||||
if(this.isopen){
|
||||
this.isopen = false
|
||||
this.$emit('change', false)
|
||||
}
|
||||
})
|
||||
},
|
||||
move() {
|
||||
if (this.slide === 0) {
|
||||
this.open()
|
||||
} else {
|
||||
this.close()
|
||||
}
|
||||
},
|
||||
onChange(e) {
|
||||
let x = e.detail.x
|
||||
this.moveX = x
|
||||
if (x >= this.buttonWidth) {
|
||||
this.disabledView = true
|
||||
this.$nextTick(() => {
|
||||
this.x = this.buttonWidth
|
||||
})
|
||||
}
|
||||
},
|
||||
getSlide(x) {
|
||||
if (x >= this.startX) {
|
||||
this.startX = x
|
||||
return 1
|
||||
} else {
|
||||
this.startX = x
|
||||
return 0
|
||||
}
|
||||
|
||||
},
|
||||
getQuerySelect() {
|
||||
const query = uni.createSelectorQuery().in(this);
|
||||
query.selectAll('.viewWidth-hook').boundingClientRect(data => {
|
||||
|
||||
this.viewWidth = data[0].width
|
||||
this.buttonWidth = data[1].width
|
||||
this.transition = false
|
||||
this.$nextTick(() => {
|
||||
this.transition = true
|
||||
})
|
||||
|
||||
if (!this.buttonWidth) {
|
||||
this.disabledView = true
|
||||
}
|
||||
|
||||
if (this.autoClose) return
|
||||
if (this.show) {
|
||||
this.open()
|
||||
}
|
||||
}).exec();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -1,158 +0,0 @@
|
||||
// #ifdef APP-NVUE
|
||||
const dom = weex.requireModule('dom');
|
||||
// #endif
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
uniShow: false,
|
||||
left: 0
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
moveLeft() {
|
||||
return `translateX(${this.left}px)`
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
show(newVal) {
|
||||
if (!this.position || JSON.stringify(this.position) === '{}') return;
|
||||
if (this.autoClose) return
|
||||
if (newVal) {
|
||||
this.$emit('change', true)
|
||||
this.open()
|
||||
} else {
|
||||
this.$emit('change', false)
|
||||
this.close()
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.position = {}
|
||||
if (this.swipeaction.children !== undefined) {
|
||||
this.swipeaction.children.push(this)
|
||||
}
|
||||
setTimeout(() => {
|
||||
this.getSelectorQuery()
|
||||
}, 100)
|
||||
},
|
||||
beforeDestoy() {
|
||||
this.swipeaction.children.forEach((item, index) => {
|
||||
if (item === this) {
|
||||
this.swipeaction.children.splice(index, 1)
|
||||
}
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
onClick(index, item) {
|
||||
this.$emit('click', {
|
||||
content: item,
|
||||
index
|
||||
})
|
||||
this.close()
|
||||
},
|
||||
touchstart(e) {
|
||||
const {
|
||||
pageX
|
||||
} = e.touches[0]
|
||||
if (this.disabled) return
|
||||
const left = this.position.content.left
|
||||
if (this.autoClose) {
|
||||
this.swipeaction.closeOther(this)
|
||||
}
|
||||
this.width = pageX - left
|
||||
if (this.isopen) return
|
||||
if (this.uniShow) {
|
||||
this.uniShow = false
|
||||
this.isopen = true
|
||||
this.openleft = this.left + this.position.button.width
|
||||
}
|
||||
},
|
||||
touchmove(e, index) {
|
||||
if (this.disabled) return
|
||||
const {
|
||||
pageX
|
||||
} = e.touches[0]
|
||||
this.setPosition(pageX)
|
||||
},
|
||||
touchend() {
|
||||
if (this.disabled) return
|
||||
if (this.isopen) {
|
||||
this.move(this.openleft, 0)
|
||||
return
|
||||
}
|
||||
this.move(this.left, -40)
|
||||
},
|
||||
setPosition(x, y) {
|
||||
if (!this.position.button.width) {
|
||||
return
|
||||
}
|
||||
// this.left = x - this.width
|
||||
this.setValue(x - this.width)
|
||||
},
|
||||
setValue(value) {
|
||||
// 设置最大最小值
|
||||
this.left = Math.max(-this.position.button.width, Math.min(parseInt(value), 0))
|
||||
this.position.content.left = this.left
|
||||
if (this.isopen) {
|
||||
this.openleft = this.left + this.position.button.width
|
||||
}
|
||||
},
|
||||
move(left, value) {
|
||||
if (left >= value) {
|
||||
this.$emit('change', false)
|
||||
this.close()
|
||||
} else {
|
||||
this.$emit('change', true)
|
||||
this.open()
|
||||
}
|
||||
},
|
||||
open() {
|
||||
this.uniShow = true
|
||||
this.left = -this.position.button.width
|
||||
this.setValue(-this.position.button.width)
|
||||
},
|
||||
close() {
|
||||
this.uniShow = true
|
||||
this.setValue(0)
|
||||
setTimeout(() => {
|
||||
this.uniShow = false
|
||||
this.isopen = false
|
||||
}, 300)
|
||||
},
|
||||
getSelectorQuery() {
|
||||
// #ifndef APP-NVUE
|
||||
const views = uni.createSelectorQuery()
|
||||
.in(this)
|
||||
views
|
||||
.selectAll('.selector-query-hock')
|
||||
.boundingClientRect(data => {
|
||||
this.position.content = data[1]
|
||||
this.position.button = data[0]
|
||||
if (this.autoClose) return
|
||||
if (this.show) {
|
||||
this.open()
|
||||
} else {
|
||||
this.close()
|
||||
}
|
||||
})
|
||||
.exec()
|
||||
// #endif
|
||||
// #ifdef APP-NVUE
|
||||
dom.getComponentRect(this.$refs['selector-content-hock'], (data) => {
|
||||
if (this.position.content) return
|
||||
this.position.content = data.size
|
||||
})
|
||||
dom.getComponentRect(this.$refs['selector-button-hock'], (data) => {
|
||||
if (this.position.button) return
|
||||
this.position.button = data.size
|
||||
if (this.autoClose) return
|
||||
if (this.show) {
|
||||
this.open()
|
||||
} else {
|
||||
this.close()
|
||||
}
|
||||
})
|
||||
// #endif
|
||||
}
|
||||
}
|
||||
}
|
@ -1,97 +0,0 @@
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
position: [],
|
||||
button: []
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
pos() {
|
||||
return JSON.stringify(this.position)
|
||||
},
|
||||
btn() {
|
||||
return JSON.stringify(this.button)
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
show(newVal) {
|
||||
if (this.autoClose) return
|
||||
let valueObj = this.position[0]
|
||||
if (!valueObj) {
|
||||
this.init()
|
||||
return
|
||||
}
|
||||
valueObj.show = newVal
|
||||
this.$set(this.position, 0, valueObj)
|
||||
}
|
||||
},
|
||||
created() {
|
||||
if (this.swipeaction.children !== undefined) {
|
||||
this.swipeaction.children.push(this)
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.init()
|
||||
|
||||
},
|
||||
beforeDestroy() {
|
||||
this.swipeaction.children.forEach((item, index) => {
|
||||
if (item === this) {
|
||||
this.swipeaction.children.splice(index, 1)
|
||||
}
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
init() {
|
||||
|
||||
setTimeout(() => {
|
||||
this.getSize()
|
||||
this.getButtonSize()
|
||||
}, 50)
|
||||
},
|
||||
closeSwipe(e) {
|
||||
if (!this.autoClose) return
|
||||
this.swipeaction.closeOther(this)
|
||||
},
|
||||
|
||||
change(e) {
|
||||
this.$emit('change', e.open)
|
||||
let valueObj = this.position[0]
|
||||
if (valueObj.show !== e.open) {
|
||||
valueObj.show = e.open
|
||||
this.$set(this.position, 0, valueObj)
|
||||
}
|
||||
},
|
||||
onClick(index, item) {
|
||||
this.$emit('click', {
|
||||
content: item,
|
||||
index
|
||||
})
|
||||
},
|
||||
appTouchStart(){},
|
||||
appTouchEnd(){},
|
||||
getSize() {
|
||||
const views = uni.createSelectorQuery().in(this)
|
||||
views
|
||||
.selectAll('.selector-query-hock')
|
||||
.boundingClientRect(data => {
|
||||
if (this.autoClose) {
|
||||
data[0].show = false
|
||||
} else {
|
||||
data[0].show = this.show
|
||||
}
|
||||
this.position = data
|
||||
})
|
||||
.exec()
|
||||
},
|
||||
getButtonSize() {
|
||||
const views = uni.createSelectorQuery().in(this)
|
||||
views
|
||||
.selectAll('.button-hock')
|
||||
.boundingClientRect(data => {
|
||||
this.button = data
|
||||
})
|
||||
.exec()
|
||||
}
|
||||
}
|
||||
}
|
@ -1,270 +0,0 @@
|
||||
<template>
|
||||
<view class="uni-swipe">
|
||||
<!-- 在微信小程序 app vue端 h5 使用wxs 实现-->
|
||||
<!-- #ifdef APP-VUE || MP-WEIXIN || H5 -->
|
||||
<view class="uni-swipe_content">
|
||||
<view :data-disabled="disabled" :data-position="pos" :change:prop="swipe.sizeReady" :prop="pos" class="uni-swipe_move-box selector-query-hock move-hock"
|
||||
@touchstart="swipe.touchstart" @touchmove="swipe.touchmove" @touchend="swipe.touchend" @change="change">
|
||||
<view class="uni-swipe_box">
|
||||
<slot />
|
||||
</view>
|
||||
<view ref="selector-button-hock" class="uni-swipe_button-group selector-query-hock move-hock">
|
||||
<!-- 使用 touchend 解决 ios 13 不触发按钮事件的问题-->
|
||||
<view v-for="(item,index) in options" :data-button="btn" :key="index" :style="{
|
||||
backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD',
|
||||
fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px'
|
||||
}"
|
||||
class="uni-swipe_button button-hock" @touchend="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',}">{{ item.text }}</text></view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- #endif -->
|
||||
|
||||
<!-- app nvue端 使用 bindingx -->
|
||||
<!-- #ifdef APP-NVUE -->
|
||||
<view ref="selector-box-hock" class="uni-swipe_content" @horizontalpan="touchstart" @touchend="touchend">
|
||||
<view ref="selector-button-hock" class="uni-swipe_button-group selector-query-hock move-hock" :style="{width:right+'px'}">
|
||||
<view ref="button-hock" v-for="(item,index) in options" :key="index" :style="{
|
||||
backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD',left: right+'px'}"
|
||||
class="uni-swipe_button " @click.stop="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px'}">{{ item.text }}</text></view>
|
||||
</view>
|
||||
<view ref='selector-content-hock' class="uni-swipe_move-box selector-query-hock">
|
||||
<view class="uni-swipe_box">
|
||||
<slot />
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- #endif -->
|
||||
|
||||
<!-- 在非 app 端、非微信小程序、支付宝小程序、h5端使用 js -->
|
||||
<!-- #ifndef APP-PLUS || MP-WEIXIN || MP-ALIPAY || H5 -->
|
||||
<view class="uni-swipe_content">
|
||||
<view ref="selector-button-hock" class="uni-swipe_button-group selector-query-hock move-hock">
|
||||
<view v-for="(item,index) in options" :data-button="btn" :key="index" :style="{
|
||||
backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD',
|
||||
fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px'
|
||||
}"
|
||||
class="uni-swipe_button button-hock" @click.stop="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',}">{{ item.text }}</text></view>
|
||||
</view>
|
||||
<view ref='selector-content-hock' class="selector-query-hock" @touchstart="touchstart" @touchmove="touchmove"
|
||||
@touchend="touchend" :class="{'ani':uniShow}" :style="{transform:moveLeft}">
|
||||
<view class="uni-swipe_move-box" >
|
||||
<view class="uni-swipe_box">
|
||||
<slot />
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- #endif -->
|
||||
<!-- #ifdef MP-ALIPAY -->
|
||||
<view class="uni-swipe-box" @touchstart="touchstart" @touchmove="touchmove" @touchend="touchend">
|
||||
<view class="viewWidth-hook">
|
||||
<movable-area v-if="viewWidth !== 0" class="movable-area" :style="{width:(viewWidth-buttonWidth)+'px'}">
|
||||
<movable-view class="movable-view" direction="horizontal" :animation="!transition" :style="{width:viewWidth+'px'}"
|
||||
:class="[transition?'transition':'']" :x="x" :disabled="disabledView" @change="onChange">
|
||||
<view class="movable-view-box">
|
||||
<slot></slot>
|
||||
</view>
|
||||
</movable-view>
|
||||
</movable-area>
|
||||
</view>
|
||||
<view ref="selector-button-hock" class="uni-swipe_button-group viewWidth-hook">
|
||||
<view v-for="(item,index) in options" :data-button="btn" :key="index" :style="{
|
||||
backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD',
|
||||
fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px'
|
||||
}"
|
||||
class="uni-swipe_button button-hock" @click.stop="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',}">{{ item.text }}</text></view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- #endif -->
|
||||
</view>
|
||||
</template>
|
||||
<script src="./index.wxs" module="swipe" lang="wxs"></script>
|
||||
<script>
|
||||
// #ifdef APP-VUE|| MP-WEIXIN || H5
|
||||
import mpwxs from './mpwxs'
|
||||
// #endif
|
||||
|
||||
// #ifdef APP-NVUE
|
||||
import bindingx from './bindingx.js'
|
||||
// #endif
|
||||
|
||||
// #ifndef APP-PLUS|| MP-WEIXIN || MP-ALIPAY || H5
|
||||
import mixins from './mpother'
|
||||
// #endif
|
||||
|
||||
// #ifdef MP-ALIPAY
|
||||
import mpalipay from './mpalipay'
|
||||
// #endif
|
||||
|
||||
/**
|
||||
* SwipeActionItem 滑动操作子组件
|
||||
* @description 通过滑动触发选项的容器
|
||||
* @tutorial https://ext.dcloud.net.cn/plugin?id=181
|
||||
* @property {Boolean} show = [true|false] 开启关闭组件,auto-close = false 时生效
|
||||
* @property {Boolean} disabled = [true|false] 是否禁止滑动
|
||||
* @property {Boolean} autoClose = [true|false] 其他组件开启的时候,当前组件是否自动关闭
|
||||
* @property {Array} options 组件选项内容及样式
|
||||
* @event {Function} click 点击选项按钮时触发事件,e = {content,index} ,content(点击内容)、index(下标)
|
||||
* @event {Function} change 组件打开或关闭时触发,true:开启状态;false:关闭状态
|
||||
*/
|
||||
|
||||
export default {
|
||||
// #ifdef APP-VUE|| MP-WEIXIN||H5
|
||||
mixins: [mpwxs],
|
||||
// #endif
|
||||
|
||||
// #ifdef APP-NVUE
|
||||
mixins: [bindingx],
|
||||
// #endif
|
||||
|
||||
// #ifndef APP-PLUS|| MP-WEIXIN || MP-ALIPAY || H5
|
||||
mixins: [mixins],
|
||||
// #endif
|
||||
|
||||
// #ifdef MP-ALIPAY
|
||||
mixins: [mpalipay],
|
||||
// #endif
|
||||
|
||||
props: {
|
||||
/**
|
||||
* 按钮内容
|
||||
*/
|
||||
options: {
|
||||
type: Array,
|
||||
default () {
|
||||
return []
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 禁用
|
||||
*/
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
/**
|
||||
* 变量控制开关
|
||||
*/
|
||||
show: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
/**
|
||||
* 是否自动关闭
|
||||
*/
|
||||
autoClose: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
}
|
||||
},
|
||||
inject: ['swipeaction']
|
||||
|
||||
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.uni-swipe {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.uni-swipe-box {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.uni-swipe_content {
|
||||
flex: 1;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.uni-swipe_move-box {
|
||||
/* #ifndef APP-NVUE */
|
||||
display: flex;
|
||||
/* #endif */
|
||||
position: relative;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.uni-swipe_box {
|
||||
/* #ifndef APP-NVUE */
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
width: 100%;
|
||||
flex-shrink: 0;
|
||||
/* #endif */
|
||||
/* #ifdef APP-NVUE */
|
||||
flex: 1;
|
||||
/* #endif */
|
||||
font-size: 14px;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.uni-swipe_button-group {
|
||||
/* #ifndef APP-VUE|| MP-WEIXIN||H5 */
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
z-index: 0;
|
||||
/* #endif */
|
||||
/* #ifndef APP-NVUE */
|
||||
display: flex;
|
||||
flex-shrink: 0;
|
||||
/* #endif */
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.uni-swipe_button {
|
||||
/* #ifdef APP-NVUE */
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
/* #endif */
|
||||
/* #ifndef APP-NVUE */
|
||||
display: flex;
|
||||
/* #endif */
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding: 0 20px;
|
||||
}
|
||||
|
||||
.uni-swipe_button-text {
|
||||
/* #ifndef APP-NVUE */
|
||||
flex-shrink: 0;
|
||||
/* #endif */
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.ani {
|
||||
transition-property: transform;
|
||||
transition-duration: 0.3s;
|
||||
transition-timing-function: cubic-bezier(0.165, 0.84, 0.44, 1);
|
||||
}
|
||||
|
||||
/* #ifdef MP-ALIPAY */
|
||||
.movable-area {
|
||||
width: 300px;
|
||||
height: 100%;
|
||||
height: 45px;
|
||||
}
|
||||
|
||||
.movable-view {
|
||||
position: relative;
|
||||
width: 160%;
|
||||
height: 45px;
|
||||
z-index: 2;
|
||||
}
|
||||
.transition {
|
||||
transition: all 0.3s;
|
||||
}
|
||||
|
||||
.movable-view-box {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: #fff;
|
||||
}
|
||||
/* #endif */
|
||||
</style>
|
@ -1,58 +0,0 @@
|
||||
<template>
|
||||
<view>
|
||||
<slot></slot>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
/**
|
||||
* SwipeAction 滑动操作
|
||||
* @description 通过滑动触发选项的容器
|
||||
* @tutorial https://ext.dcloud.net.cn/plugin?id=181
|
||||
*/
|
||||
export default {
|
||||
data() {
|
||||
return {};
|
||||
},
|
||||
provide() {
|
||||
return {
|
||||
swipeaction: this
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.children = []
|
||||
},
|
||||
methods: {
|
||||
closeOther(vm) {
|
||||
let children = this.children
|
||||
children.forEach((item, index) => {
|
||||
if (vm === item) return
|
||||
// 支付宝执行以下操作
|
||||
// #ifdef MP-ALIPAY
|
||||
if (item.isopen) {
|
||||
item.close()
|
||||
}
|
||||
// #endif
|
||||
|
||||
// app vue 端、h5 、微信、支付宝 执行以下操作
|
||||
// #ifdef APP-VUE || H5 || MP-WEIXIN
|
||||
let position = item.position[0]
|
||||
let show = position.show
|
||||
if (show) {
|
||||
position.show = false
|
||||
}
|
||||
// #endif
|
||||
|
||||
// nvue 执行以下操作
|
||||
// #ifdef APP-NVUE || MP-BAIDU || MP-QQ || MP-TOUTIAO
|
||||
item.close()
|
||||
// #endif
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
@ -66,6 +66,9 @@ export default {
|
||||
onLoad() {
|
||||
this.getUserInfo();
|
||||
},
|
||||
onNavigationBarButtonTap(e) {
|
||||
if( e.index == 0 ) uni.navigateBack();
|
||||
},
|
||||
methods: {
|
||||
changeAvatar() {
|
||||
const url = this.$u.http.config.baseUrl + '/Upload/uploadfile';
|
||||
|
@ -9,9 +9,12 @@
|
||||
<view class="title">经验值</view>
|
||||
<view class="value">{{ memberInfo.member_exppoints }}</view>
|
||||
</view>
|
||||
<view>
|
||||
<view @click="viewProgress">
|
||||
<view class="title">预计进度</view>
|
||||
<view class="value">{{ memberInfo.next_grade_exppoints_diff }}</view>
|
||||
<!-- <view class="value">{{ memberInfo.next_grade_exppoints_diff }}</view> -->
|
||||
<view class="value">
|
||||
<image src="/static/image/mine/32.png"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<scroll-view scroll-y class="integral-botom" :style="{ height: integralHeight }">
|
||||
@ -47,6 +50,11 @@ export default {
|
||||
}
|
||||
})
|
||||
},
|
||||
viewProgress() {
|
||||
this.$u.route({
|
||||
url: '/pageE/mine/MineProgress'
|
||||
})
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
@ -74,6 +82,10 @@ export default {
|
||||
font-size: 48rpx;
|
||||
font-weight: 500;
|
||||
color: rgba(255,255,255,1);
|
||||
> image {
|
||||
width: 52rpx;
|
||||
height: 35rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,8 @@
|
||||
<template>
|
||||
<view class="member">
|
||||
<view>
|
||||
<!-- <view> -->
|
||||
<u-tabs-swiper ref="tabs" :list="list" :is-scroll="false" active-color="#FF780F" :current="current" font-size="32" :show-bar="false" @change="tabsChange" height="88" ></u-tabs-swiper>
|
||||
</view>
|
||||
<!-- </view> -->
|
||||
<swiper :current="swiperCurrent" @animationfinish="animationfinish" :style="{ height: swiperHeight }">
|
||||
<swiper-item class="swiper-item">
|
||||
<view class="integral">
|
||||
@ -15,7 +15,7 @@
|
||||
<view class="title">经验值</view>
|
||||
<view class="value">{{ memberInfo.member_exppoints }}</view>
|
||||
</view>
|
||||
<view>
|
||||
<view @click="viewProgress">
|
||||
<view class="title">预计进度</view>
|
||||
<view class="value">{{ memberInfo.next_grade_exppoints_diff }}</view>
|
||||
</view>
|
||||
@ -26,21 +26,9 @@
|
||||
</view>
|
||||
</swiper-item>
|
||||
<swiper-item class="swiper-item">
|
||||
<scroll-view scroll-y class="coupon">
|
||||
<view v-for="(item, index) in couponList" :key="index" class="coupon-item">
|
||||
<img src="../static/mine/23.png" />
|
||||
<view class="coupon-main">
|
||||
<view class="coupon-title">萌店十元优惠券</view>
|
||||
<view class="coupon-date">
|
||||
<img src="../static/mine/26.png" />
|
||||
<view>2020.05.17-2020.06.17</view>
|
||||
</view>
|
||||
<view class="coupon-integral">299积分</view>
|
||||
</view>
|
||||
<view class="coupon-btn">兑换</view>
|
||||
</view>
|
||||
<u-empty text="暂无优惠券" mode="coupon" color="#000" v-if="!couponList.length"></u-empty>
|
||||
</scroll-view>
|
||||
<view class="coupon">
|
||||
<CouponView></CouponView>
|
||||
</view>
|
||||
</swiper-item>
|
||||
<swiper-item class="swiper-item">
|
||||
<scroll-view scroll-y class="details">
|
||||
@ -61,6 +49,7 @@
|
||||
</template>
|
||||
<script>
|
||||
import common from '@/static/js/common.js';
|
||||
import CouponView from "./MemberServeCoupon";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
@ -76,11 +65,13 @@ export default {
|
||||
current: 0,
|
||||
swiperCurrent: 0,
|
||||
pointslogList: [],
|
||||
couponList: [],
|
||||
memberInfo: {},
|
||||
nodes: '',
|
||||
}
|
||||
},
|
||||
components: {
|
||||
CouponView
|
||||
},
|
||||
onShow() {
|
||||
this.getMemberPointsStat();
|
||||
this.getPointslogList();
|
||||
@ -117,6 +108,11 @@ export default {
|
||||
// console.log(this.richHeight);
|
||||
this.swiperHeight = res.windowHeight - 88 / 2 + 'px';
|
||||
},
|
||||
viewProgress() {
|
||||
this.$u.route({
|
||||
url: '/pageE/mine/MineProgress'
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
@ -171,55 +167,6 @@ export default {
|
||||
}
|
||||
.coupon {
|
||||
height: 100%;
|
||||
.coupon-item {
|
||||
padding: 30rpx;
|
||||
background-color: #ffffff;
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
margin-bottom: 2rpx;
|
||||
> img {
|
||||
width: 180rpx;
|
||||
height: 160rpx;
|
||||
border-radius: 10rpx;
|
||||
margin-right: 30rpx;
|
||||
}
|
||||
.coupon-main {
|
||||
.coupon-title {
|
||||
font-size: 30rpx;
|
||||
color: rgba(51,51,51,1);
|
||||
}
|
||||
.coupon-date {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin: 29rpx 0 20rpx;
|
||||
> img {
|
||||
width: 24rpx;
|
||||
height: 24rpx;
|
||||
margin-right: 15rpx;
|
||||
}
|
||||
> view {
|
||||
font-size: 24rpx;
|
||||
color: rgba(153,153,153,1);
|
||||
}
|
||||
}
|
||||
.coupon-integral {
|
||||
font-size: 30rpx;
|
||||
font-weight: 500;
|
||||
color: rgba(255,120,15,1);
|
||||
}
|
||||
}
|
||||
.coupon-btn {
|
||||
margin-left: auto;
|
||||
width: 85rpx;
|
||||
// height: 42rpx;
|
||||
border: 2rpx solid rgba(255,120,15,1);
|
||||
border-radius: 10rpx;
|
||||
font-size: 26rpx;
|
||||
color: rgba(255,120,15,1);
|
||||
line-height: 42rpx;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
.details {
|
||||
height: 100%;
|
||||
|
161
pageE/mine/MemberServeCoupon.vue
Normal file
@ -0,0 +1,161 @@
|
||||
<template>
|
||||
<view class="coupon-swiper">
|
||||
<u-tabs-swiper ref="coupon" :list="couponGroupList" :is-scroll="true" active-color="#FF780F" :current="couponCurrent" font-size="24" :show-bar="false" @change="couponTabsChange" height="88" ></u-tabs-swiper>
|
||||
<swiper :current="swiperCouponCurrent" @animationfinish="couponAnimationFinish" :style="{ height: swiperHeight }">
|
||||
<swiper-item class="swiper-coupon-item" v-for="(_, i) in couponGroupList" :key="i">
|
||||
<scroll-view scroll-y style="height: 100%;">
|
||||
<view v-for="(coupon, index) in couponList" :key="index" class="coupon-item">
|
||||
<!-- <img src="../static/mine/23.png" />
|
||||
<view class="coupon-main">
|
||||
<view class="coupon-title">萌店十元优惠券</view>
|
||||
<view class="coupon-date">
|
||||
<img src="../static/mine/26.png" />
|
||||
<view>2020.05.17-2020.06.17</view>
|
||||
</view>
|
||||
<view class="coupon-integral">299积分</view>
|
||||
</view>
|
||||
<view class="coupon-btn">兑换</view> -->
|
||||
<Coupon :couponInfo="coupon" :status='0' :type="0" @exchange="exchangeCoupon($event)"></Coupon>
|
||||
</view>
|
||||
<u-empty text="暂无优惠券" mode="coupon" color="#000" v-if="!couponList.length"></u-empty>
|
||||
</scroll-view>
|
||||
</swiper-item>
|
||||
</swiper>
|
||||
</view>
|
||||
</template>
|
||||
<script>
|
||||
import Coupon from "@/components/mine/coupon/index";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
swiperHeight: '',
|
||||
couponCurrent: 0,
|
||||
swiperCouponCurrent: 0,
|
||||
couponGroupList: [
|
||||
{
|
||||
name: '平台'
|
||||
}, {
|
||||
name: '分类名称'
|
||||
}, {
|
||||
name: '分类名称'
|
||||
}, {
|
||||
name: '分类名称'
|
||||
}, {
|
||||
name: '分类名称'
|
||||
}, {
|
||||
name: '分类名称'
|
||||
}, {
|
||||
name: '分类名称'
|
||||
}, {
|
||||
name: '分类名称'
|
||||
}, {
|
||||
name: '分类名称'
|
||||
}, {
|
||||
name: '分类名称'
|
||||
}, {
|
||||
name: '分类名称'
|
||||
}, {
|
||||
name: '分类名称'
|
||||
}, {
|
||||
name: '分类名称'
|
||||
}
|
||||
],
|
||||
couponList: [
|
||||
{
|
||||
index: 0
|
||||
},
|
||||
{
|
||||
index: 1
|
||||
},
|
||||
],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
Coupon
|
||||
},
|
||||
created() {
|
||||
this.setViewHeight();
|
||||
},
|
||||
methods: {
|
||||
exchangeCoupon(id) {
|
||||
console.log(id);
|
||||
|
||||
},
|
||||
couponTabsChange(index) {
|
||||
this.couponCurrent = index;
|
||||
},
|
||||
couponAnimationFinish(e) {
|
||||
const current = e.detail.current;
|
||||
this.swiperCouponCurrent = current;
|
||||
this.couponCurrent = current;
|
||||
},
|
||||
setViewHeight() {
|
||||
const res = uni.getSystemInfoSync();
|
||||
this.swiperHeight = res.windowHeight - ((88 + 10 + 88) / 2) + 'px';
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.coupon-swiper {
|
||||
.swiper-coupon-item {
|
||||
box-sizing: border-box;
|
||||
background-color: #ffffff;
|
||||
padding: 30rpx {
|
||||
top: 0;
|
||||
};
|
||||
.coupon-item {
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
// .coupon-item {
|
||||
// padding: 30rpx;
|
||||
// background-color: #ffffff;
|
||||
// display: flex;
|
||||
// align-items: flex-end;
|
||||
// // margin-bottom: 2rpx;
|
||||
// > img {
|
||||
// width: 180rpx;
|
||||
// height: 160rpx;
|
||||
// border-radius: 10rpx;
|
||||
// margin-right: 30rpx;
|
||||
// }
|
||||
// .coupon-main {
|
||||
// .coupon-title {
|
||||
// font-size: 30rpx;
|
||||
// color: rgba(51,51,51,1);
|
||||
// }
|
||||
// .coupon-date {
|
||||
// display: flex;
|
||||
// align-items: center;
|
||||
// margin: 29rpx 0 20rpx;
|
||||
// > img {
|
||||
// width: 24rpx;
|
||||
// height: 24rpx;
|
||||
// margin-right: 15rpx;
|
||||
// }
|
||||
// > view {
|
||||
// font-size: 24rpx;
|
||||
// color: rgba(153,153,153,1);
|
||||
// }
|
||||
// }
|
||||
// .coupon-integral {
|
||||
// font-size: 30rpx;
|
||||
// font-weight: 500;
|
||||
// color: rgba(255,120,15,1);
|
||||
// }
|
||||
// }
|
||||
// .coupon-btn {
|
||||
// margin-left: auto;
|
||||
// width: 85rpx;
|
||||
// // height: 42rpx;
|
||||
// border: 2rpx solid rgba(255,120,15,1);
|
||||
// border-radius: 10rpx;
|
||||
// font-size: 26rpx;
|
||||
// color: rgba(255,120,15,1);
|
||||
// line-height: 42rpx;
|
||||
// text-align: center;
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
||||
</style>
|
@ -41,7 +41,7 @@ export default {
|
||||
userInfo: {}
|
||||
}
|
||||
},
|
||||
onLoad() {
|
||||
onShow() {
|
||||
this.getUserInfo();
|
||||
},
|
||||
onNavigationBarButtonTap() {
|
||||
|
172
pageE/mine/MineProgress.vue
Normal file
@ -0,0 +1,172 @@
|
||||
<template>
|
||||
<view class="progress">
|
||||
<view class="header">
|
||||
<view class="line-progress">
|
||||
<view class="rank-value">lv1</view>
|
||||
<view class="line-box">
|
||||
<u-line-progress :percent="70" :show-percent="false" inactive-color="#FFFFFF" active-color="#F1A36B" height="30"></u-line-progress>
|
||||
<text>78/99</text>
|
||||
</view>
|
||||
<view class="rank-value">lv2</view>
|
||||
</view>
|
||||
<view class="exp-value">经验值<span>78</span></view>
|
||||
<view class="distance">距离下一级还需要21经验值</view>
|
||||
</view>
|
||||
<view class="body">
|
||||
<view class="title">
|
||||
<image src="/static/image/mine/34.png"></image>
|
||||
<text>等级定义</text>
|
||||
</view>
|
||||
<view class="rank-list">
|
||||
<view v-for="(rank, index) in rank" :key="index" class="list-item">
|
||||
<view class="rank-value">lv{{ rank.level }}</view>
|
||||
<view class="rank-interval"><span>经验值:</span>{{ rank.max == '--' ? rank.min + '及以上' : rank.min + '~' + rank.max }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
rank: [
|
||||
{
|
||||
level: 1,
|
||||
min: 50,
|
||||
max: 99,
|
||||
},
|
||||
{
|
||||
level: 2,
|
||||
min: 100,
|
||||
max: 199,
|
||||
},
|
||||
{
|
||||
level: 3,
|
||||
min: 200,
|
||||
max: 399,
|
||||
},
|
||||
{
|
||||
level: 4,
|
||||
min: 400,
|
||||
max: 999,
|
||||
},
|
||||
{
|
||||
level: 5,
|
||||
min: 1000,
|
||||
max: 1999,
|
||||
},
|
||||
{
|
||||
level: 6,
|
||||
min: 2000,
|
||||
max: 4999,
|
||||
},
|
||||
{
|
||||
level: 7,
|
||||
min: 5000,
|
||||
max: '--',
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.progress {
|
||||
.header {
|
||||
width: 750rpx;
|
||||
height: 271rpx;
|
||||
background: url('/static/image/mine/33.png') no-repeat left top / contain;
|
||||
padding: 30rpx {
|
||||
top: 82rpx;
|
||||
};
|
||||
color: #FFF;
|
||||
.line-progress {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
margin-bottom: 5rpx;
|
||||
.rank-value {
|
||||
height: 30rpx;
|
||||
line-height: 30rpx;
|
||||
box-sizing: content-box;
|
||||
background:rgba(255,213,101,1);
|
||||
border-radius: 6rpx;
|
||||
padding: 0 10rpx;
|
||||
}
|
||||
.line-box {
|
||||
width: 400rpx;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-end;
|
||||
margin: 0 16rpx;
|
||||
/deep/ .u-progress {
|
||||
.u-active {
|
||||
box-sizing: border-box;
|
||||
border: 4rpx solid #FFF;
|
||||
border-radius: 50rpx;
|
||||
}
|
||||
}
|
||||
> text {
|
||||
margin-top: 12rpx;
|
||||
font-size: 20rpx;
|
||||
color: rgba(255,255,255,1);
|
||||
}
|
||||
}
|
||||
}
|
||||
.exp-value {
|
||||
font-size: 28rpx;
|
||||
margin-bottom: 32rpx;
|
||||
> span {
|
||||
margin-left: 20rpx;
|
||||
font-size: 32rpx;
|
||||
}
|
||||
}
|
||||
.distance {
|
||||
font-size: 22rpx;
|
||||
}
|
||||
}
|
||||
.body {
|
||||
.title {
|
||||
height: 88rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 30rpx;
|
||||
font-weight: 500;
|
||||
color: rgba(51,51,51,1);
|
||||
border-bottom: #ECECEC 1rpx solid;
|
||||
> image {
|
||||
width: 29rpx;
|
||||
height: 36rpx;
|
||||
margin-right: 20rpx;
|
||||
}
|
||||
}
|
||||
.rank-list {
|
||||
padding: 30rpx;
|
||||
.list-item {
|
||||
margin-bottom: 40rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
.rank-value {
|
||||
color: #FFF;
|
||||
height: 30rpx;
|
||||
line-height: 30rpx;
|
||||
box-sizing: content-box;
|
||||
background:rgba(255,213,101,1);
|
||||
border-radius: 6rpx;
|
||||
padding: 0 10rpx;
|
||||
margin-right: 15rpx;
|
||||
}
|
||||
.rank-interval {
|
||||
font-size: 28rpx;
|
||||
color: #999999;
|
||||
> span {
|
||||
margin-right: 10rpx;
|
||||
color: rgba(51,51,51,1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
105
pageE/tool/MineCoupon.vue
Normal file
@ -0,0 +1,105 @@
|
||||
<template>
|
||||
<view class="coupon">
|
||||
<u-tabs-swiper ref="tabs" :list="list" :is-scroll="false" active-color="#FF780F" :current="current" font-size="32" :show-bar="false" @change="tabsChange" height="88" ></u-tabs-swiper>
|
||||
<swiper :current="swiperCurrent" @animationfinish="animationfinish" :style="{ height: swiperHeight }">
|
||||
<swiper-item class="swiper-item" v-for="(_, index) in list" :key="index">
|
||||
<scroll-view scroll-y class="scroll-coupon">
|
||||
<view class="coupon-item" v-for="(coupon, c_index) in test" :key="c_index">
|
||||
<Coupon :couponInfo="coupon" :status='index' :type="1" @use="useCoupon($event)"></Coupon>
|
||||
</view>
|
||||
</scroll-view>
|
||||
</swiper-item>
|
||||
</swiper>
|
||||
</view>
|
||||
</template>
|
||||
<script>
|
||||
import Coupon from "@/components/mine/coupon/index"
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
list: [{
|
||||
name: '未使用'
|
||||
}, {
|
||||
name: '已使用'
|
||||
}, {
|
||||
name: '已过期'
|
||||
}],
|
||||
current: 0,
|
||||
swiperCurrent: 0,
|
||||
swiperHeight: '',
|
||||
test: [
|
||||
{
|
||||
index: 0
|
||||
},
|
||||
{
|
||||
index: 1
|
||||
},
|
||||
{
|
||||
index: 2
|
||||
},
|
||||
{
|
||||
index: 3
|
||||
},
|
||||
{
|
||||
index: 4
|
||||
},
|
||||
{
|
||||
index: 5
|
||||
},
|
||||
{
|
||||
index: 6
|
||||
},
|
||||
{
|
||||
index: 7
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
components: {
|
||||
Coupon
|
||||
},
|
||||
onLoad() {
|
||||
this.setViewHeight();
|
||||
},
|
||||
methods: {
|
||||
useCoupon(id) {
|
||||
console.log(id);
|
||||
},
|
||||
setViewHeight() {
|
||||
const res = uni.getSystemInfoSync();
|
||||
this.swiperHeight = res.windowHeight - (88 / 2 + 11 / 2) + 'px';
|
||||
},
|
||||
tabsChange(index) {
|
||||
this.swiperCurrent = index;
|
||||
},
|
||||
animationfinish(e) {
|
||||
let current = e.detail.current;
|
||||
this.swiperCurrent = current;
|
||||
this.current = current;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.coupon {
|
||||
overflow: hidden;
|
||||
.u-tabs {
|
||||
border: {
|
||||
top: 1rpx #ECECEC solid;
|
||||
bottom: 10rpx #ECECEC solid;
|
||||
};
|
||||
}
|
||||
.swiper-item {
|
||||
box-sizing: border-box;
|
||||
padding: 20rpx 30rpx;
|
||||
.scroll-coupon {
|
||||
height: 100%;
|
||||
.coupon-item {
|
||||
margin-bottom: 20rpx;
|
||||
// position: relative;
|
||||
// z-index: 9;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
26
pages.json
@ -329,6 +329,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "tool/MineCoupon",
|
||||
"style": {
|
||||
"navigationBarTitleText": "优惠券",
|
||||
"app-plus": {
|
||||
"titleSize": "36px",
|
||||
"titleNView": {
|
||||
"titleColor": "#333333",
|
||||
"backgroundColor": "#FFFFFF"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "more/MineHelp",
|
||||
"style": {
|
||||
@ -474,6 +487,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "mine/MineProgress",
|
||||
"style": {
|
||||
"navigationBarTitleText": "预计进度",
|
||||
"app-plus": {
|
||||
"titleSize": "36px",
|
||||
"titleNView": {
|
||||
"titleColor": "#333333",
|
||||
"backgroundColor": "#FFFFFF"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "tool/Manicure",
|
||||
"style": {
|
||||
|
@ -92,6 +92,10 @@
|
||||
<img src="/static/image/mine/18.png" />
|
||||
<view>足迹</view>
|
||||
</view>
|
||||
<view @click="toOtherPage('/tool/MineCoupon')">
|
||||
<img src="/static/image/mine/25.png" />
|
||||
<view>优惠券</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="more-tool">
|
||||
@ -131,7 +135,7 @@ export default {
|
||||
return value ? value.replace(/^(\d{3})\d*(\d{4})$/, '$1****$2') : '';
|
||||
}
|
||||
},
|
||||
onLoad() {
|
||||
onShow() {
|
||||
this.getUserInfo();
|
||||
},
|
||||
onNavigationBarButtonTap() {
|
||||
|
BIN
static/image/mine/25.png
Normal file
After Width: | Height: | Size: 7.5 KiB |
BIN
static/image/mine/26.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
static/image/mine/27.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
static/image/mine/28.png
Normal file
After Width: | Height: | Size: 42 KiB |
BIN
static/image/mine/29.png
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
static/image/mine/30.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
static/image/mine/31.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
static/image/mine/32.png
Normal file
After Width: | Height: | Size: 4.1 KiB |
BIN
static/image/mine/33.png
Normal file
After Width: | Height: | Size: 278 KiB |
BIN
static/image/mine/34.png
Normal file
After Width: | Height: | Size: 4.5 KiB |
@ -14,7 +14,7 @@ const common = {
|
||||
* @param { String } url 服务器 url
|
||||
* @param { String } filePath 要上传文件资源的路径
|
||||
* @param { String } type 上传文件验证类型 默认: img 可选: video
|
||||
* @return { object } promise 对象 resolve 为文件服务器地址 reject 为错误信息
|
||||
* @return { object } promise 对象 resolve 返回文件服务器地址 reject 返回错误信息
|
||||
*/
|
||||
uploadFile({ url, filePath, type = 'img' } = {}) {
|
||||
const token = uni.getStorageSync('token');
|
||||
@ -27,10 +27,10 @@ const common = {
|
||||
formData: { type: type },
|
||||
success: uploadFileRes => {
|
||||
const data = JSON.parse(uploadFileRes.data);
|
||||
if(data.errCode.code == 0) {
|
||||
resolve(data.errCode.url);
|
||||
if(data.errCode == 0) {
|
||||
resolve(data.data.url);
|
||||
} else {
|
||||
reject(data.errCode.msg);
|
||||
reject(data.message);
|
||||
}
|
||||
},
|
||||
fail(){
|
||||
|