Commit 7b7a6020 authored by June's avatar June

2021/8/20

parent bc4a424b
......@@ -3,6 +3,7 @@
node_modules
unpackage
/dist
.project.config.json
# local env files
.env.local
......
......@@ -26,7 +26,6 @@ export default {
}
}
})
},
globalData: {
......@@ -77,6 +76,7 @@ export default {
<style lang="scss">
@import url("@/styles/layout.css");
@import url("@/styles/iconfont.css");
/* 隐藏scrollbar 滚动条 */
::-webkit-scrollbar {
......
// 地址相关
import { request } from "@/lib/service"
import { baseUrl } from '@/config'
/**
* @desc 收货地址列表接口
......
// 购物车相关
import { request } from "@/lib/service"
import { baseUrl } from '@/config'
/**
* @desc 获取购物车数量
......
import { request } from "@/lib/service"
import { baseUrl } from '@/config'
/**
* @desc 获取分类列表
......
import { request } from "@/lib/service"
/**
* @desc 查询用户待评价sku商品评论列表接口
*/
export function unCommentList() {
return request({
url: 'zsxcx/getDpjComments.htm',
method: 'post'
})
}
/**
* @desc 查询用户已评价sku商品评论列表接口
*/
export function hadCommentList() {
return request({
url: 'zsxcx/getYpjComments.htm',
method: 'post'
})
}
/**
* @desc 获取商品评论列表接口
*/
export function commentList(params) {
return request({
url: 'zsxcx/getGoodsComments.htm',
method: 'post',
data: params
})
}
\ No newline at end of file
// 商品相关
import { request } from "@/lib/service"
import { baseUrl } from '@/config'
/**
* @desc 商品+店铺集合+店铺搜索接口
......
// 订单相关
import { request } from "@/lib/service"
import { baseUrl } from '@/config'
/**
* @desc 提交订单前数据确认接口
......
<template>
<scroll-view
class="wrap-scroll w-100"
scroll-x
>
<video
class="r-8"
:class="className"
:style="itemSize"
src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"
:controls="controls"
:autoplay="false"
:show-play-btn="false"
@click="handlePreview(0)"
/>
<image
v-for="(item, idx) in 4"
:key="item"
class="item r-8"
:class="className"
:style="itemSize"
src="https://www.gelifood.com/upload/goods/20210301/7432e042823c1ea4dc08eb1614575307goods_thumb.png"
mode="aspectFit"
@click="handlePreview(idx+1)"
/>
</scroll-view>
</template>
<script module="utils" lang="wxs">
function itemSize(arr) {
var len = arr.length;
var size = 150; // 当大于三张时的宽度
switch(len) {
case 1:
size = 410;
breck;
case 2:
size = 330;
break;
default:
break;
}
return 'width:' + size + 'rpx;height:' + size + 'rpx;';
}
module.exports = {
itemSize: itemSize
}
</script>
<script>
export default {
props: {
size: {
type: [String , Number],
default: '150'
},
className: {
type: String,
default: 'mr-2'
}
},
computed: {
itemSize() {
const size = this.size
return `width: ${size}rpx; height:${size}rpx;`
}
},
methods: {
handlePreview(idx) {
wx.previewMedia({
sources: [
{
type: 'video',
url: 'http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4'
},
{
type: 'image',
url: 'https://www.gelifood.com/upload/goods/20210301/7432e042823c1ea4dc08eb1614575307goods_thumb.png'
},
{
type: 'image',
url: 'https://www.gelifood.com/upload/goods/20210301/7432e042823c1ea4dc08eb1614575307goods_thumb.png'
},
],
current: idx,
fail: err => console.log(err)
})
}
}
}
</script>
<style lang="scss" scoped>
.wrap-scroll {
white-space: nowrap;
overflow-y: hidden;
font-size: 28rpx;
}
</style>
<template>
<view class="flex j-between a-center" v-if="user">
<view class="flex j-star a-center">
<image
class="avatar mr-2 r-8"
:src="baseUrl + '/' + user.avatar"
mode="aspectFit"
/>
<view class="flex-1">
<view class="font-24 mb-2">{{user.nickname}}</view>
<rate
readonly
value="user.grade"
size="12"
margin="2"
/>
</view>
</view>
<view class="font-24 descColor">{{user.add_time | parseTime }}</view>
</view>
</template>
<script>
import rate from '@/components/rate/index.vue'
export default {
props: {
user: {
type: Object,
default: null
}
},
components: {
rate
}
}
</script>
<style lang="scss" scoped>
.avatar {
width: 88rpx;
height: 88rpx;
border-radius: 50%;
background-color: $mainBg;
}
</style>
<template>
<view class="wrap-words" :class="className" v-if="content">
{{ content }}
</view>
</template>
<script>
export default {
props: {
content: {
type: String,
default: ''
},
className: {
tyoe: String,
default: ''
}
}
}
</script>
<style lang="scss" scoped>
.wrap-words {
@include text-ellipsis(2);
line-height: 50rpx;
}
</style>
......@@ -48,10 +48,6 @@ export default {
refresherStatus: false // 设置当前下拉刷新状态,true 表示下拉刷新已经被触发,false 表示下拉刷新未被触发
}
},
created() {
console.log(this.refresherEnabled)
},
methods: {
// 触底
scrolltolower() {
......
<template>
<view class="rate-wrap">
<!-- @touchmove.stop="touchmove" 可以,但是没必要 -->
<view
class="rate_icon"
v-for="(star, index) in stars"
:style="{ 'margin-right': marginNumber + 'px' }"
:key="index"
@touchstart="touchstart($event, index + 1)"
@touchmove.stop="touchmove"
>
<text
class="start"
......@@ -38,7 +38,7 @@
value: {
// 当前评分
type: [Number, String],
default: 1
default: 0
},
max: {
// 最大评分
......@@ -120,60 +120,60 @@
},
mounted() {
setTimeout(() => {
this._getSize()
this.getSize()
}, 100)
},
methods: {
touchstart(e, idx) {
touchstart: throttle(function (e, idx) {
if (this.readonly || this.disabled || !this.touchable) return
if(this.valueSync === 1) {
if(1 === idx && 1 === this.valueSync) {
this.valueSync = 0
} else {
this.valueSync = idx
}
this._onChange()
},
touchmove: throttle(function (e) {
if (this.readonly || this.disabled || !this.touchable) return
const { clientX } = e.changedTouches[0]
this._getRateCount(clientX)
this.onChange()
}, 200),
// touchmove: throttle(function (e) {
// if (this.readonly || this.disabled || !this.touchable) return
// const { clientX } = e.changedTouches[0]
// this.getRateCount(clientX)
// }, 200),
// 获取星星个数
_getRateCount(clientX) {
this._getSize()
const size = Number(this.size)
if(size === NaN){
return new Error('size 属性只能设置为数字')
}
// move星星的距离
const rateMoveRange = clientX - this._rateBoxLeft
const marginNumber = this.marginNumber
let index = parseInt(rateMoveRange / (size + marginNumber))
index = index < 0 ? 0 : index;
index = index > this.max ? this.max : index;
// 移入星星的距离
const range = parseInt(rateMoveRange - (size + marginNumber) * index)
let value = 0
if (this.allowHalf) {
if(range <= 0 && index === 0) {
value = 0
} else if (range > (size / 2)) {
value = index + 1
} else {
value = index + 0.5
}
} else {
value = index + 1
}
value = Math.max(0, Math.min(value, this.max))
this.valueSync = value
this._onChange()
},
// getRateCount(clientX) {
// // this.getSize()
// const size = Number(this.size)
// if(size === NaN){
// return new Error('size 属性只能设置为数字')
// }
// // move星星的距离
// const rateMoveRange = clientX - this._rateBoxLeft
// const marginNumber = this.marginNumber
// let index = parseInt(rateMoveRange / (size + marginNumber))
// index = index < 0 ? 0 : index;
// index = index > this.max ? this.max : index;
// // 移入星星的距离
// const range = parseInt(rateMoveRange - (size + marginNumber) * index)
// let value = 0
// if (this.allowHalf) {
// if(range <= 0 && index === 0) {
// value = 0
// } else if (range > (size / 2)) {
// value = index + 1
// } else {
// value = index + 0.5
// }
// } else {
// value = index + 1
// }
// value = Math.max(0, Math.min(value, this.max))
// this.valueSync = value
// this.onChange()
// },
// 触发动态修改
_onChange() {
onChange() {
this.$emit("update:value", this.valueSync);
this.$emit("change", {
value: this.valueSync
......@@ -181,7 +181,7 @@
},
//获取星星距离屏幕左侧距离
_getSize() {
getSize() {
uni.createSelectorQuery()
.in(this)
.select('.rate-wrap')
......
......@@ -133,4 +133,6 @@ export const weeks = {
5: '周五',
6: '周六',
7: '周日',
}
\ No newline at end of file
}
export const M2B = 1048576 // 1m = 1,048,576b
\ No newline at end of file
const env = {
release: 'https://www.gelifood.com', // 正式版
trial: 'https://www.gelifood.com', // 体验版
develop: 'https://www.gelifood.com' // 开发版
develop: 'https://d.gelifood.com' // 开发版
}
// 不考虑其他端小程序直接这样配置
......
{
"extEnable": true,
"extAppid": "wx537e892e36fbf79d",
"extAppid": "wxd170058f4ad8fecd",
"ext": {
"appid": "wx537e892e36fbf79d"
"appid": "wxd170058f4ad8fecd"
}
}
\ No newline at end of file
......@@ -39,6 +39,7 @@ async function successRes(res, options, resolve, reject) {
resolve({
status: true,
data: data.data,
test: data,
msg: data.rep_msg
})
break;
......
import { mapState } from 'vuex'
import { baseUrl } from '@/config/index.js'
const globalMixins = {
data() {
return {
baseUrl
}
},
computed: {
...mapState({
isIphoneX: state => state.systemInfo.isIphoneX
......
......@@ -43,6 +43,12 @@
"navigationStyle": "custom"
}
},
{
"path": "pages/goods/comment-list",
"style": {
"navigationBarTitleText": "商品评论"
}
},
{
"path": "pages/order/order-list",
"style": {
......@@ -143,7 +149,25 @@
{
"path": "comments/comment",
"style": {
"navigationBarTitleText": "写评论"
"navigationBarTitleText": "商品评论"
}
},
{
"path": "comments/success",
"style": {
"navigationBarTitleText": "评论成功"
}
},
{
"path": "comments/center",
"style": {
"navigationBarTitleText": "评论中心"
}
},
{
"path": "comments/detail",
"style": {
"navigationBarTitleText": "评论详情"
}
}
]
......@@ -166,6 +190,10 @@
"pages/home/index": {
"network": "all",
"packages": ["subPages"]
},
"pages/goods/detail": {
"network": "all",
"packages": ["subPages"]
}
},
"globalStyle": {
......
<template>
<view class="comment-list">
<view class="list-wrap w-100">
<pull-list
@tolower="tolower"
@refresh="refresh"
>
<view
class="comment-item"
v-for="(item, index) in list"
:data-index="index"
:key="index"
>
<view class="mb-2">
<user :user="item.user" />
</view>
<view class="mb-2">
<words :content="item.content"></words>
</view>
<media-view :media="item.media" />
<view class="descColor font-24 mt-2">{{item.goods_attr}}</view>
</view>
</pull-list>
</view>
<!-- 底部按钮 -->
<bottom-bar :is_col="detail.is_col || 11" />
<!-- 购物弹窗 -->
<goods-popup ref="popup" />
</view>
</template>
<script>
import bottomBar from './components/bottom_bar.vue'
import pullList from '@/components/pull-list/index.vue'
import goodsPopup from '@/components/goods-popup/index.vue'
import user from '@/components/comments/user.vue'
import words from '@/components/comments/words.vue'
import mediaView from '@/components/comments/media-view.vue'
import commonModules from './common.js'
import { commentList } from '@/apis/comment.js'
import LoadMore from '@/utils/load-more.js'
export default {
data() {
return {
detail: null,
skuData: [],
list: []
}
},
components: {
bottomBar,
pullList,
goodsPopup,
user,
words,
mediaView
},
onLoad(ops) {
this.loadMore = new LoadMore()
this.eventChannel = this.getOpenerEventChannel()
this.eventChannel.on('acceptDataFromOpenerPage', data => {
const { detail, skuData } = data
this.detail = detail
this.skuData = skuData
})
this.getData()
},
methods: {
...commonModules,
async getData() {
try{
const { status, data } = await this.loadMore.getList({goods_id: 9863}, commentList)
if(status) {
const resetData = data.map(item => {
let media = []
if(item.img_url) {
media = [...item.img_url.split(',')]
}
if(item.video_url) {
media.unshift({
url: item.video_rul,
type: 'video'
})
}
return {
user: {
nickname: item.nickname,
avatar: item.avatar,
add_time: item.add_time,
grade: item.com_grade
},
content: item.content,
media,
reply: [],
goods_attr: item.goods_attr
}
})
console.log(resetData)
this.list = this.list.concat(resetData)
}
}catch(e){
console.log(e)
}
},
tolower() {
console.log('触底')
},
refresh() {
console.log("shuaxin")
}
}
}
</script>
<style lang="scss" scoped>
.comment-list {;
.list-wrap {
height: calc(100vh - 98rpx);
background-color: #fff;
.comment-item {
@include borderBox(40rpx, 30rpx);
border-bottom: 1rpx solid $line;
}
}
}
</style>
import { collectGoods } from '@/apis/goods.js'
// sku弹窗
function handlePopup() {
const skuData = this.skuData
const detail = this.detail
if(!skuData & skuData.length) return this.$toast({title: '该商品暂无库存'})
const params = {
goodsInfo: {
cover: `${this.baseUrl}/${detail.goods_thumb}`,
title: detail.goods_name,
is_inquiry: detail.is_inquiry,
unit: skuData[0].unit
},
skuData: skuData
}
this.$refs.popup.show(params)
}
// 收藏商品
async function handleCollect() {
try{
if(!this.detail.goods_id) return this.$toast({title: '收藏失败,goodsid不能为空'})
const { status, msg, data } = await collectGoods(this.detail.goods_id)
if(status) {
this.$set(this.detail, 'is_col', data.is_col)
this.$toast({title: msg})
}
}catch(e){
console.log(e)
this.$toast({title: '收藏失败'})
//TODO handle the exception
}
}
export default {
handlePopup,
handleCollect
}
\ No newline at end of file
<template>
<view>
<view class="btns w-100 flex j-between a-center">
<view class="flex-1 flex j-around a-center">
<view
class="flex-1 left-item flex flex-column j-center a-center"
@click="callPhone"
>
<image class="icon mb-1" src="/static/images/common/btn-phone.png" mode="aspectFit" />
<text>联系老板</text>
</view>
<navigator
open-type="switchTab"
class="flex-1 left-item flex flex-column j-center a-center"
hover-class="none"
url="/pages/carts/index"
>
<image class="icon mb-1" src="/static/images/common/icon-cart_gray.png" mode="aspectFit" />
<text>购物车</text>
<view class="cart_count" v-if="cart_count !== 0">{{ cart_count <= 99 ? cart_count : '99+' }}</view>
</navigator>
<view class="flex-1 left-item flex flex-column j-center a-center" @click="changeCollect">
<image v-show="is_col === 10" class="icon mb-1" src="/static/images/common/icon-collect_active.png" mode="aspectFit" />
<image v-show="is_col === 11" class="icon mb-1" src="/static/images/common/icon-collect_default.png" mode="aspectFit" />
<!-- 是否已收藏商品:10已收藏 11未收 -->
<text>
{{is_col === 10 ? '已收藏' : '未收藏'}}
</text>
</view>
</view>
<view class="right font-28 text-center">
<view class="cart-btn" @click.stop="changePopup">加入购物车</view>
<view class="pay-btn" @click.stop="changePopup">立即购买</view>
</view>
</view>
</view>
</template>
<script>
import { mapState } from 'vuex'
import { makePhoneCall, throttle } from '@/utils/common.js'
export default {
props: {
is_col: {
type: Number,
default: 11
}
},
computed: {
...mapState({
cart_count: state => state.cart.cart_count
})
},
methods: {
// 呼叫老板
callPhone() {
this.$checkLogin(makePhoneCall)
},
changePopup: throttle(function() {
this.$parent.handlePopup()
}),
// 收藏商品
changeCollect() {
this.$parent.handleCollect()
}
}
}
</script>
<style lang="scss" scoped>
.btns {
position: fixed;
left: 0;
right: 0;
bottom: 0;
box-sizing: border-box;
padding: 0 30rpx;
height: calc(98rpx + constant(safe-area-inset-bottom));///兼容 IOS<11.2/
height: calc(98rpx + env(safe-area-inset-bottom));///兼容 IOS>11.2/
padding-bottom: constant(safe-area-inset-bottom);///兼容 IOS<11.2/
padding-bottom: env(safe-area-inset-bottom);///兼容 IOS>11.2/
border-top: 1rpx solid $line;
background-color: $white;
.left-item {
position: relative;
font-size: 20rpx;
.icon {
width: 34rpx;
height:34rpx;
}
.cart_count {
position: absolute;
right:0;
top: -16rpx;
font-size: 20rpx;
color: #fff;
background-color: $primary;
width: 36rpx;
height: 36rpx;
line-height: 36rpx;
text-align: center;
border-radius: 50%;
}
}
.right {
flex: 0 0 360rpx;
.cart-btn, .pay-btn {
display: inline-block;
width: 180rpx;
height: 72rpx;
line-height: 72rpx;
color: $white;
}
.cart-btn {
background-color: #FFBB33;
border-radius: 100rpx 0 0 100rpx;
}
.pay-btn {
background-color: $primary;
border-radius: 0 100rpx 100rpx 0;
}
}
}
</style>
......@@ -104,6 +104,24 @@
</view>
</view>
<!-- 评论 -->
<view class="w-100 comment-wrap mb-2">
<view class="mb-4 flex j-between a-center">
<view class="font-bold">商品评论</view>
<view class="font-24 primaryColor flex j-end a-center" @click="handleComment">
<text>查看更多</text>
<i class="ml-2"></i>
</view>
</view>
<user />
<words
className="my-2"
content="这个是评论内容内容这个是评论内容内容这个是评论容 内容这个是评论内容内容这个是评论内容内容"
/>
<media-view className="mr-3" />
<view class="font-24 descColor overtext-1 mt-2">规格</view>
</view>
<!-- 详情 -->
<view class="detail-wrap" v-if="detail.goods_desc && detail.goods_desc !== '<p><br></p>'">
<view class="font-28 font-bold text-center py-3" style="background-color: #fff;">商品详情</view>
......@@ -115,39 +133,7 @@
</view>
<!-- buttons -->
<view class="btns w-100 flex j-between a-center" :style="{paddingBottom: isIphoneX + 'px'}">
<view class="flex-1 flex j-around a-center">
<view
class="flex-1 left-item flex flex-column j-center a-center"
@click="callPhone"
>
<image class="icon mb-1" src="/static/images/common/btn-phone.png" mode="aspectFit" />
<text>联系老板</text>
</view>
<navigator
open-type="switchTab"
class="flex-1 left-item flex flex-column j-center a-center"
hover-class="none"
url="/pages/carts/index"
>
<image class="icon mb-1" src="/static/images/common/icon-cart_gray.png" mode="aspectFit" />
<text>购物车</text>
<view class="cart_count" v-if="cart_count !== 0">{{ cart_count <= 99 ? cart_count : '99+' }}</view>
</navigator>
<view class="flex-1 left-item flex flex-column j-center a-center" @click="handleCollect(detail.is_col)">
<image v-show="detail.is_col === 10" class="icon mb-1" src="/static/images/common/icon-collect_active.png" mode="aspectFit" />
<image v-show="detail.is_col === 11" class="icon mb-1" src="/static/images/common/icon-collect_default.png" mode="aspectFit" />
<!-- 是否已收藏商品:10已收藏 11未收 -->
<text>
{{detail.is_col === 10 ? '已收藏' : '未收藏'}}
</text>
</view>
</view>
<view class="right font-28 text-center">
<view class="cart-btn" @click.stop="handlePopup">加入购物车</view>
<view class="pay-btn" @click.stop="handlePopup">立即购买</view>
</view>
</view>
<bottom-bar :is_col="detail.is_col || 11" />
<!-- 购物弹窗 -->
<goods-popup ref="popup" />
......@@ -155,17 +141,19 @@
</template>
<script>
import leftMenuButton from './components/left-menuButton.vue'
// import leftMenuButton from './components/left-menuButton.vue'
import uParse from '@/components/parse/parse.vue'
import price from '@/components/price/index.vue'
import user from '@/components/comments/user.vue'
import bottomBar from './components/bottom_bar.vue'
import goodsPopup from '@/components/goods-popup/index.vue'
import { goodDetail, goodsSku, collectGoods } from '@/apis/goods.js'
import { baseUrl } from '@/config/index.js'
import mediaView from '@/components/comments/media-view.vue'
import words from '@/components/comments/words.vue'
import { goodDetail, goodsSku } from '@/apis/goods.js'
import { makePhoneCall, throttle } from '@/utils/common.js'
import { mapState } from 'vuex'
// import { mapState } from 'vuex'
import common_share from '@/mixins/setting_share.js'
import commonModules from './common.js'
let goods_id = null
export default {
data() {
......@@ -175,7 +163,6 @@ export default {
lazyLoad: true
},
showHome: false,
baseUrl,
detail: null,
swiperCurrent: 0,
inventory: 0, // 总库存
......@@ -188,23 +175,25 @@ export default {
},
mixins: [common_share],
components: {
leftMenuButton,
// leftMenuButton,
uParse,
price,
goodsPopup
goodsPopup,
user,
bottomBar,
mediaView,
words
},
async onLoad(options) {
goods_id = options.goods_id
this.getDetail()
this.getSku()
console.log(this.isIphoneX)
},
computed: {
...mapState({
cart_count: state => state.cart.cart_count,
isIphoneX: state => state.systemInfo.isIphoneX
}),
// ...mapState({
// cart_count: state => state.cart.cart_count
// }),
logisticsTab() {
const detail = this.detail
......@@ -228,21 +217,7 @@ export default {
},
},
// onShareAppMessage() {
// const goods_thumb = this.detail.goods_thumb
// const goods_name = this.detail.goods_name
// return {
// title: goods_name || '',
// image: goods_thumb ? `${this.baseUrl}/${goods_thumb}` : ''
// }
// },
// onPageScroll: throttle(function(e) {
// const scrollTop = e.scrollTop
// if(scrollTop > 500) return
// const opacity = (scrollTop / 375).toFixed(1)
// this.navBg = `rgba(255, 255, 255, ${opacity})`
// }, 250),
onPageScroll(e) {
const scrollTop = e.scrollTop
const opacity = (scrollTop / 375).toFixed(1)
......@@ -251,24 +226,13 @@ export default {
},
methods: {
...commonModules,
// 富文本预览事件
preview(src, e) {
// do something
},
// 获取商品tab
// async getGoodsTab(isCol) {
// try{
// const { status, data } = await goodsDetailTab(goods_id)
// if(status) {
// console.log(data)
// }
// }catch(e){
// this.$toast({title: e.msg || 'tab获取失败'})
// }
// },
// 获取商品详情
async getDetail() {
try{
......@@ -299,21 +263,6 @@ export default {
}
},
// 收藏商品
async handleCollect(isCol) {
try{
const { status, msg, data } = await collectGoods(goods_id)
if(status) {
this.$set(this.detail, 'is_col', data.is_col)
this.$toast({title: msg})
}
}catch(e){
console.log(e)
this.$toast({title: '收藏失败'})
//TODO handle the exception
}
},
swiperChange(e) {
this.swiperCurrent = e.detail.current
},
......@@ -324,26 +273,21 @@ export default {
this.logistics_cur = id
},
// sku弹窗
handlePopup: throttle(function() {
const skuData = this.skuData
const detail = this.detail
if(!skuData & skuData.length) return this.$toast({title: '该商品暂无库存'})
const params = {
goodsInfo: {
cover: `${this.baseUrl}/${detail.goods_thumb}`,
title: detail.goods_name,
is_inquiry: detail.is_inquiry,
unit: skuData[0].unit
handleComment() {
wx.navigateTo({
url: "/pages/goods/comment-list",
events: {
acceptDataFromOpenedPage: function(data) {
console.log(data)
},
someEvent: function(data) {
console.log(data)
}
},
skuData: skuData
}
this.$refs.popup.show(params)
}, 300),
// 呼叫老板
callPhone() {
this.$checkLogin(makePhoneCall)
success: res => {
res.eventChannel.emit('acceptDataFromOpenerPage', { detail: this.detail, skuData: this.skuData })
}
})
}
}
}
......@@ -426,60 +370,21 @@ export default {
}
}
.detail-wrap {
background-color: $white;
.comment-wrap {
@include borderBox(40rpx, 30rpx);
background-color: #fff;
i {
width: 26rpx;
height: 26rpx;
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAMAAADypuvZAAAAe1BMVEUAAAD/Zhv/Zhr/Zxv/Zhr/Zhr/aBv/aBv/Zhr/Zxv/Zhr/Zxv/aBv/aiv/Zhr/Zhr/Zhv/Zhr/Zhr/Zhr/Zxr/Zxr/Zxv/aBz/ahr/ayD/aR//aiP/cyb/gED/Zhr/Zhv/Zxr/Zxv/Zxv/aB3/Zh//Zxv/Zhv/aBv/ZhoNfnYhAAAAKHRSTlMA+KVn87lvLvzurlNLCuji28SakYZ+ejUmHxMOBgTU08xeQz0Zv4xdCM67ugAAAOZJREFUSMft1lkSgkAMRVFFQUDAiXkSELX3v0IlWcHt0j/yfypV5L2iN+v8crK7e6DGM8bsC4gc850A7tqZZZLSYpU5VQh1oajzjFTriuprpOKLqKFBqhlEXWKk6l6U2yI1n0WFHVLVSZTDzlUmoq5MHQJRL6aKvaiMqcdWlMdUpGrH1NFfkH9kapRVQW1Trxw2ObW4cSV5urFcaJoilIpEc4syEWivGpIIzdGTdHFS48Y8Q2FLEqTGId19+9pBmB58VE9NSkyuJmcZ5Y29Gd7XqxB/5N9tyxruiIksftST1ZNgnT/OB6pwJOcVV/mRAAAAAElFTkSuQmCC);
background-position: 0 0;
background-repeat: no-repeat;
background-size: 100% 100%;
}
}
.btns {
position: fixed;
left: 0;
right: 0;
bottom: 0;
@include borderBox(12rpx, 30rpx);
border-top: 1rpx solid $line;
.detail-wrap {
background-color: $white;
.left-item {
height: 98rpx;
position: relative;
font-size: 20rpx;
.icon {
width: 34rpx;
height:34rpx;
}
.cart_count {
position: absolute;
right:0;
top: -16rpx;
font-size: 20rpx;
color: #fff;
background-color: $primary;
width: 32rpx;
height: 32rpx;
padding: 5rpx;
line-height: 32rpx;
text-align: center;
border-radius: 50%;
}
}
.right {
height: 98rpx;
flex: 0 0 360rpx;
.cart-btn, .pay-btn {
display: inline-block;
width: 180rpx;
height: 72rpx;
line-height: 72rpx;
color: $white;
}
.cart-btn {
background-color: #FFBB33;
border-radius: 100rpx 0 0 100rpx;
}
.pay-btn {
background-color: $primary;
border-radius: 0 100rpx 100rpx 0;
}
}
}
}
</style>
......@@ -162,7 +162,7 @@ export default {
break;
case 'comment':
uni.navigateTo({
url: '/subPages/comments/comment'
url: '/subPages/comments/center'
})
break;
default:
......@@ -255,10 +255,10 @@ export default {
.badge {
position: absolute;
right: 0;
top: -12rpx;
width: 24rpx;
height: 24rpx;
line-height: 24rpx;
top: -16rpx;
width: 32rpx;
height: 32rpx;
line-height: 32rpx;
text-align: center;
color: #fff;
background-color: $primary;
......
......@@ -32,6 +32,7 @@
<!-- 已收货 -->
<template v-else-if="item.order_status === '10'">
<view class="btn ml-2 cancle" @click.stop="handleApplyRefund(item)">申请售后</view>
<!-- <view class="btn ml-2 pay" >评价</view> -->
</template>
<!-- 退款退货审核 -->
......
......@@ -29,8 +29,7 @@
#### warning
+ 2021/6/29,本日起的代码可能会引起不适,but all can run(效率和质量不会成正比关系)
#### unFinish, but not important
+ 自定义的导航栏的样式计算可以在vuex中处理(wxs计算)
#### unFinish, but not important)
+ 详情有个深拷贝的问题。暂时通过JSON.stringify()处理
+ 所有的价格都是通过toFixed会可能出现精度问题。一般发现不了
+ 确认订单页面要跳到地址列表页面选择
......
......@@ -18,6 +18,8 @@ $white: #fff; // 白色
height: 0;
}
// 低能机给我爬
.isIphoneX {
padding-bottom: 68rpx!important;
padding-bottom: constant(safe-area-inset-bottom);///兼容 IOS<11.2/
padding-bottom: env(safe-area-inset-bottom);///兼容 IOS>11.2/
}
\ No newline at end of file
@font-face {
font-family: "iconfont"; /* Project id 2744370 */
src:
url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAO8AAsAAAAAB7gAAANwAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFQGYACCfgqDFIJ/ATYCJAMMCwgABCAFhGcHOhvXBlGU7Umb7GtMYYxdLdoStU4cQbgGIyIAroxg8Ha7fH08nAF/XLzvLAAAIojW0Nm7C7ND1IASVVR02MVSW1fVKlULpGrRkmVd/VM3fxkv3PZPUNumT6OItmdpQl1Lc5l/VjQglQlTkm8HhLdrrsBpOnA/7WbdBtbZOuQu10WiuVLtLk54q03p32lzaR/KYCIH0hZSAHIQfaPtLYLKFDjqQl316a/GuxX4gjwA77pvvuyD5Y03i9F9W9Yt3OQJesPYBS3xEoFGixy0s3t8DaMrJTlsIMzWIKmOqyhQMOQmpaE61Au1XVcW8VQN6XG6gCfB5+MfL4YkNZl51uHJjg9/Pzt/LuZ5NXecv/udrgaOTqhBxuzGLHHU7DrUiVKzsMYqV9coGlwEP7uqip+dnmjbf3gkQdQyK5vBJFSmKxI7okTdBSVXLH668bWoww3wTjJ3M3fIysDIMgPW16t36xq43W5tpnK32zHgzWZTUL5eRwFruaF8kzGAd6qhctuc52sABLvV3em2QnTYW5U7EG9ztMGbMs5qa4IX5mBTvoG2tHLr773Of99/i2jgrI3uzQXR0SbG7t7iVkfI5jDYLXe7DxvZBKPRL/Dyvm2+n1+vC/w87zfkQ37ctKLn2/9dTBfWasO62AHzsT6sTZMP0gzL/YQzaXc67TtOkHOH+GbHCTvFnrTDuZ0xZwKRoRdsbrBhX1q8d1uPaWfvhw0lYY44o9qXafXx56uH58ixXrv3YhLPA0c1W+jW/D+ik8ft7mzNNrwDVH2J/DDIrPl5ln/uNxqerXx9c+V/PbSAHxvfg9LuZeolmOg/daeg+kvwNLlo0JSuYdluqkBCo+WjQr5Oz/CaV5EJ9boSJHWGkNUbpgpvGjWaLKNWvVU0muHXN+lS6YjSgHEzQGi3IGn1Elm7lSq8GzV6vajV7kOjo2jZrcl46C0mJeTjxw9GusiNrZWA7SUFTaq4LH5LXEcwiq7l5LN7lBOPMaf+DDwRg4aLDHfpeZSmBZZcxKTFCkXKmW2bqqtYushgCyOKID4U+YFKWiFnPLJkv+8SCTRSCnekbh2sxkLEHgkU70DtqfJODTeyT+tTwNMRBsowyGRQ4A6SqqkCqqqHxYgmLMWARGmGWaSsq8paXpO93DZoZB6eI0WOou46VLkOm/5F8x3lAQA=') format('woff2')
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-shanchu:before {
content: "\e613";
}
.icon-juxing:before {
content: "\e612";
}
......@@ -151,3 +151,8 @@ image {
.borderBox {
box-sizing: border-box;
}
/* border-radius */
.r-8 {
border-radius: 8rpx;
}
\ No newline at end of file
<template>
<view class="wrapper-center w-100" :class="{ isIphoneX }">
<!-- tab -->
<view class="tab-wrap w-100 font-32 flex j-between a-center text-center descColor" @click="handleTab">
<view
class="tab-inner flex-1"
:class="cur_tab === 0 ? 'tab-active' : null"
data-tabid="0"
>待评价(4)</view>
<view
class="tab-inner flex-1"
:class="cur_tab === 1 ? 'tab-active' : null"
data-tabid="1"
>已评价</view>
</view>
<!-- list -->
<swiper class="list-wrap" :current="cur_tab" @change="swiperChange">
<swiper-item>
<pull-list>
<view class="list-item w-100 p-2 r-8">
<view class="font-32 font-bold mb-2">这是一个店铺名称</view>
<view class="w-100 flex j-start a-center">
<image
class="cover mr-2 r-8"
src="https://www.gelifood.com/upload/goods/20210301/7432e042823c1ea4dc08eb1614575307goods_thumb.png"
mode="aspectFit"
/>
<view class="info flex-1 flex j-between a-start flex-column">
<view class="title font-bold">这是一堆蔬菜和水果有黄瓜番茄这是这是一堆蔬菜和水果有黄瓜番茄一堆蔬菜和水果有黄瓜番茄 什么的</view>
<rate
readonly
size="12"
margin="2"
value="3"
/>
<view class="w-100 flex j-between a-center">
<view class="descColor font-24">规格: 200g/包</view>
<view class="btn-comment r-8">评价</view>
</view>
</view>
</view>
</view>
</pull-list>
</swiper-item>
<swiper-item>
<pull-list>
<view class="list-item w-100 p-2 r-8">
<view class="font-32 font-bold mb-2">这是一个店铺名称</view>
<view class="w-100 flex j-start a-center">
<image
class="cover mr-2 r-8"
src="https://www.gelifood.com/upload/goods/20210301/7432e042823c1ea4dc08eb1614575307goods_thumb.png"
mode="aspectFit"
/>
<view class="info flex-1 flex j-between a-start flex-column">
<view class="title font-bold">这是一堆蔬菜和水果有黄瓜番茄这是这是一堆蔬菜和水果有黄瓜番茄一堆蔬菜和水果有黄瓜番茄 什么的</view>
<rate
readonly
size="12"
margin="2"
value="3"
/>
<view class="w-100 flex j-between a-center">
<view class="descColor font-24">规格: 200g/包</view>
<view class="btn-comment r-8">评价</view>
</view>
</view>
</view>
</view>
</pull-list>
</swiper-item>
</swiper>
</view>
</template>
<script>
import pullList from '@/components/pull-list/index.vue'
import rate from '@/components/rate/index.vue'
import { unCommentList, hadCommentList } from '@/apis/comment.js'
import LoadMore from '@/utils/load-more.js'
export default {
data() {
return {
cur_tab: 0,
unCommentList: [],
hadCommentList: []
}
},
components: {
pullList,
rate
},
created() {
this.unCommendLoad = new LoadMore()
this.hadCommendLoad = new LoadMore()
this.getList()
},
methods: {
async getList() {
try{
const { status, data, test } = await commentList()
console.log(status, test)
}catch(e){
this.$toast({title: '程序错误,获取失败'})
}
},
handleTab(e) {
const index = +e.target.dataset.tabid
if(index === this.cur_tab) return
this.cur_tab = index
},
swiperChange(e) {
this.cur_tab = e.detail.current
}
}
}
</script>
<style lang="scss" scoped>
.wrapper-center {
.tab-wrap {
position: fixed;
left: 0;
right: 0;
top: 0;
font-weight: 400;
background-color: #FFF;
.tab-inner {
position: relative;
height: 88rpx;
line-height: 88rpx;
}
.tab-active {
height: 88rpx;
color: #333;
&::after {
display: inline-block;
content: '';
position: absolute;
left: 50%;
bottom: 0rpx;
width: 80rpx;
height: 4rpx;
transform: translateX(-50%);
border-radius: 2rpx;
background-color: $primary;
}
}
}
.list-wrap {
position: absolute;
left: 50%;
top: 108rpx;
transform: translateX(-50%);
width: 690rpx;
height: calc(100vh - 108rpx);
overflow: hidden;
.list-item {
box-sizing: border-box;
background-color: #fff;
.cover {
flex: 0 0 180rpx;
width: 180rpx;
height: 180rpx;
}
.info {
height: 180rpx;
.title, .desc {
@include text-ellipsis(2);
}
}
.btn-comment {
padding: 8rpx 32rpx;
background-color: $primary;
color: #fff;
}
}
}
}
</style>
......@@ -22,29 +22,47 @@
/>
</view>
<view class="font-bold mb-4">追加一下您的使用体验吧~</view>
<view class="input-wrap mb-4">
<textarea
class="input-area font-24"
placeholder-class="icon-edit"
placeholder="说说您的使用感受,为更多小伙伴购买提供参考~"
maxlength="10"
class="input-area iconfont"
style="font-size: 28rpx;"
:placeholder="`\ue612 说说您的使用感受,为更多小伙伴购买提供参考~`"
maxlength="300"
v-model="form.val"
/>
<view class="w-100 flex j-between a-end">
<viwe class="flex j-start a-center">
<view class="flex flex-column j-center a-center mr-2" @click="handlePhoto">
<image class="icon" src="/static/images/common/icon-img.png" mode="aspectFit" />
<text>添加图片</text>
</view>
<view class="flex flex-column j-center a-center" @click="handleVideo">
<image class="icon" src="/static/images/common/icon-video.png" mode="aspectFit" />
<text>添加视频</text>
</view>
</viwe>
<text class="font-24 descColor">{{words}}/300</text>
<text class="font-24 descColor words-calc">{{words}}/300</text>
</view>
<view class="w-100 upload-wrap flex j-start a-start flex-wrap mb-2 text-center">
<view class="upload-item mr-2" v-if="videoTemp">
<video class="u-video" :src="videoTemp" />
<i class="close iconfont icon-shanchu" @click="handleDel('video')"></i>
</view>
<view
class="upload-item mr-2"
v-for="(img, index) in imgTemp"
:key="index"
>
<image class="u-img" :src="img" mode="aspectFit" />
<i class="close iconfont icon-shanchu" @click="handleDel('img', index)"></i>
</view>
<view class="mr-2" @click="handlePhoto" v-if="imgTemp.length < 5">
<view class="flex flex-column btn-item j-center a-center r-8 mb-2">
<image class="icon" src="/static/images/common/icon-img.png" mode="aspectFit" />
</view>
<text>添加图片{{imgTemp.length}}</text>
</view>
<view @click="handleVideo" v-show="!videoTemp">
<view class="flex flex-column btn-item j-center a-center r-8 mb-2">
<image class="icon" src="/static/images/common/icon-video.png" mode="aspectFit" />
</view>
<text>添加视频</text>
</view>
</view>
<view class="mb-4 font-24 descColor">图片限制五张,视频限制一个</view>
<view class="w-100 mb-4">
<view class="w-100 flex j-between a-center">
......@@ -57,7 +75,7 @@
</view>
<view class="w-100 my-4 flex j-star a-center">
<view class="font-2 mr-2">商品评分</view>
<view class="font-28 mr-2">商品评分</view>
<rate
:value.sync="form.v2"
size="17"
......@@ -92,12 +110,15 @@
<script>
import rate from '@/components/rate/index.vue'
import { M2B } from '@/config/global.js'
export default {
components: {
rate
},
data() {
return {
videoTemp: '',
imgTemp: [],
form: {
v1: 0,
v2: 0,
......@@ -117,21 +138,45 @@
methods: {
async handlePhoto() {
try{
const a = await this.$cWx('chooseImage', {count: 5})
console.log(a)
const { status, data } = await this.$cWx('chooseImage', {count: 5 - this.imgTemp.length})
if(status) {
const MAX_SIZE = M2B * 5
data.tempFiles.forEach((item, index) => {
if(MAX_SIZE < item.size) {
this.$toast({title: `图片${index}大于5M, 请重新选择`})
} else {
this.imgTemp.push(item.path)
}
})
}
}catch(e){
console.log(e)
this.$toast({title: '程序错误'})
}
},
async handleVideo() {
try{
const a = await this.$cWx('chooseVideo', {count: 5})
console.log(a)
const { status, data } = await this.$cWx('chooseVideo', {count: 5})
if(status) {
console.log(data)
if((M2B * 10) < data.size) return this.$toast({title: '视频不能大于5M'})
this.videoTemp = data.tempFilePath
}
}catch(e){
console.log(e)
this.$toast({title: '程序错误'})
}
},
/**
* @param {Object} index
* @param {Object} type * img or video
*/
handleDel(type, index) {
if(!type) return
if(type === 'video') {
this.videoTemp = ''
} else if(type === 'img') {
this.$delete(this.imgTemp, index)
}
},
......@@ -144,7 +189,9 @@
<style lang="scss" scoped>
.comment-wrap {
@include box-wrap(690rpx, 8rpx, 20rpx, 20rpx);
width: 100%;
background-color: #fff;
padding: 40rpx 30rpx;
.goods-info {
width: 100%;
.cover {
......@@ -158,31 +205,59 @@
}
}
}
.input-wrap {
position: relative;
@include borderBox(20rpx, 20rpx);
width: 650rpx;
width: 690rpx;
border-radius: 8rpx;
background-color: $mainBg;
.input-area {
width: 100%;
height: 200rpx;
min-height: 360rpx;
overflow: hidden;
}
.words-calc {
position: absolute;
right: 20rpx;
bottom: 20rpx;
}
}
.upload-wrap {
.upload-item {
position: relative;
width: 150rpx;
height: 150rpx;
margin-bottom: 20rpx;
border-radius: 8rpx;
&:nth-child(4n) {
margin-right: 0;
}
.u-video, .u-img {
width: 100%;
height: 100%;
}
.close {
position: absolute;
right: -16rpx;
top: -16rpx;
z-index: 1;
display: inline-block;
width: 32rpx;
height: 32rpx;
color: $primary;
}
}
.btn-item {
width: 150rpx;
height: 150rpx;
border: 2rpx dashed $line;
}
.icon {
width: 88rpx;
height: 88rpx;
}
.icon-edit {
display: inline-block;
content: "";
width: 34rpx;
height: 34rpx;
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEQAAABECAMAAAAPzWOAAAAAeFBMVEUAAACAgICBgYGAgICCgoKHh4eGhoaAgICAgICAgICBgYGAgICCgoKAgICAgICAgICAgICAgICAgICEhISAgICAgICAgICCgoKAgICAgICAgICAgICBgYGAgICAgICBgYGAgICBgYGBgYGAgIB/f3+AgICAgIB/f38yHicCAAAAJ3RSTlMAmXf4FwkE4vLUOushyXCoWdq5DYEtSxHBoJSEa11IJa5gMkCMiVKByMuRAAAB7ElEQVRYw+2W23KCQAyGoSwgqFA8gUcErXn/N+xku5gFHCGx04uO/5U6k2+WJN+K886LWar8RULthgAwPZ/kiHwLTealkDHLgOJdRAxlGB7oTGoBw58DtuMwc9RN46KAD0l1K2b6c6CbU7EZKyzL8uZYEQAUXManfpZZ+7vPY8QedjS2po2QmjfcKdYc7Z+QGrM2PQLM1RqH4p4kWMBPCtXqicfpyQ6ahHHDzZjTOejyaqK3NbG4n+MZJ73ja6eMAJP6DXc+fmPX+gQbXLAUMFFpuOM9ViEWmIdIPF2dGC7POve+cyE0SZjWLQI6WGEYLtO6aGnvzBWIK7HOtlluHXHF1hH3wrRu/4BbMa1LH3GZ1s39Pvc8npFo69QT7nA2xrq+zYpvXd9miXXEFVm363Dl1hFXbh1x/511MdO61QD3D6zbkx1d7ujknty69r+0zDrKFq8LmXUU9OMgs45KsKIUW0e3WSizjrLAEpF1FB8HfOvbzMoFi3KRdZQv3KrmS50CWcdIROqdCgCedfabaYy2HBFn28zb+UngLJPQIEJ6O+TtvNpPDCKqaLa8nc88gyg298En7vOslN0Syjm2DziUzLrAwMRzS8dKBoNRnSWH6V51t2cohb31W4As6V9hm4/nqdolvnLe+c18A7kTb54aqYy+AAAAAElFTkSuQmCC);
background-position: 0 0;
background-repeat: no-repeat;
background-size: 100% 100%;
}
}
.icon-select {
......
<template>
<view class="coment-detail_wrapper w-100" :class="{isIphoneX}">
<view class="user-comment">
<user />
<!-- goods -->
<view class="goods r-8 mt-4 p-2 flex j-start a-center">
<image
class="cover mr-2 r-8"
src="https://www.gelifood.com/upload/goods/20210301/7432e042823c1ea4dc08eb1614575307goods_thumb.png"
mode="aspectFit"
/>
<view class="title">1111111111111111111111111111</view>
</view>
<!-- 评论 -->
<view class="comment mt-4">1111111111111111111111111111</view>
<!-- video -->
<video
class="comment-video mt-4 mb-2 r-8"
src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"
:controls="controls"
:autoplay="false"
:show-play-btn="false"
/>
<!-- imgs -->
<image
v-for="(item, idx) in 4"
:key="item"
class="comment-img r-8"
src="https://www.gelifood.com/upload/goods/20210301/7432e042823c1ea4dc08eb1614575307goods_thumb.png"
mode="aspectFit"
/>
<view class="primaryColor font-32 font-bold">二十天后追</view>
<view class="comment-add mt-2">333</view>
<!-- video -->
<video
class="comment-video mt-4 mb-2 r-8"
src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"
:controls="controls"
:autoplay="false"
:show-play-btn="false"
/>
<!-- imgs -->
<image
v-for="(item, idx) in 4"
:key="item"
class="comment-img r-8"
src="https://www.gelifood.com/upload/goods/20210301/7432e042823c1ea4dc08eb1614575307goods_thumb.png"
mode="aspectFit"
/>
</view>
<view class="merchant-comment">
<view class="comment">
<view class="font-bold font-32 mb-2">商家回复:</view>
<view>2222222222222222222222</view>
</view>
</view>
</view>
</template>
<script>
import user from '@/components/comments/user.vue'
export default {
components: {
user
},
mounted() {
uni.showShareMenu({
menus: ['shareAppMessage', 'shareTimeline']
})
}
}
</script>
<style lang="scss" scoped>
.coment-detail_wrapper {
background-color: #fff;
.user-comment {
@include borderBox(40rpx, 30rpx);
}
.merchant-comment {
@include borderBox(40rpx, 30rpx);
border-top: 1rpx solid $line;
.comment {
padding: 20rpx;
background-color: $mainBg;
}
}
.goods {
box-sizing: border-box;
width: 690rpx;
height: 150rpx;
background-color: $mainBg;
.cover {
width: 110rpx;
height: 110rpx;
}
.title {
line-height: 40rpx;
@include text-ellipsis(2);
}
}
.comment {
line-height: 50rpx;
}
.comment-video, .comment-img {
width: 690rpx;
height: 690rpx;
}
.comment-img {
margin-bottom: 20rpx;
&:last-child {
margin-bottom: 0;
}
}
}
</style>
<template>
<view class="w-100" :class="{isIphoneX}">
<!-- top -->
<view class="wrap-top w-100 flex flex-column a-center j-center">
<view class="font-bold flex a-center"><i class="icon mr-2"></i>评论成功,感谢您!</view>
<view class="btn-look my-2">查看评价</view>
<view class="font-24">审核通过后将对所有人可见</view>
</view>
<!-- title -->
<view class="my-2 ml-3">心情不错,继续评价</view>
<!-- list -->
<view class="wrap-list">
<view class="w-100 mb-2 wrap-comment">
<view class="font-32 font-bold">这是一个店铺名称</view>
<view class="flex j-star a-center mt-2">
<image
class="cover mr-2 r-8"
src="https://www.gelifood.com/upload/goods/20210301/7432e042823c1ea4dc08eb1614575307goods_thumb.png"
mode="aspectFit"
/>
<view class="info flex-1 flex j-between a-center flex-column">
<view class="title font-bold">这是一堆蔬菜和水果有黄瓜番茄 什么的</view>
<view class="w-100 flex j-between a-center">
<view class="descColor font-24">规格: 200g/包</view>
<view class="btn-comment r-8">评价</view>
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import rate from '@/components/rate/index.vue'
import mediaView from '@/components/comments/media-view.vue'
import words from '@/components/comments/words.vue'
export default {
components: {
rate,
mediaView,
words
}
}
</script>
<style lang="scss" scoped>
.wrap-top {
height: 244rpx;
color: #fff;
@include linear-gradient_bg(225deg, #FF5500 0%, #FF661A 100%);
.icon {
display: inline-block;
width: 34rpx;
height: 34rpx;
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEQAAABECAMAAAAPzWOAAAAAnFBMVEUAAAD////////////////////////////////////////////////////////////////////////////////////////nXV3oYGD/+vr0sbHrcHDqa2vyoqLpZmbpY2P3w8PzqqrvjIzuhYX//Pz86Oj74uL63d350tL4zc33yMjwl5fvkpL62Nj1tbXxnJzpaGj97+/2vr71urpQREW6AAAAFnRSTlMAI+7Ot1MG+fjx4t+roJiIhIBxXDwy9WBskQAAAglJREFUWMO12GdTwjAAxvE0oWV0WCw8xVamAwVE1O//3fSAJC0k6Yj83nne/a+LLKLnJHHAfNrtUp8FceKQpjw3HODCIHS9BolxRKFEo3HNxKgDg86IVHNEQptxqp7FsIdKvaFnvAyGWpjhYtw+auq7usY9GrhXN+7QyJ1NQ1a092J1Ry5acC/ebR8t9J3SN8bQCvOINERLw8LN9NBST95QB611xG8fFkbyQqwvZYxmvraHfA/hNNZFaOQlT/9k4KLjN0JbNNIcHPUaf/Cvj+nRY/njD9s00imE8C8yQH3rw7nx9ABhQIjTpDFTNACHJCjI8tnuCzof6gYSEhcbx+f+omvMz41VuYGYBJDy04NXV950DQSEQeKv79XU2D3jAiM+pGmqrbxPzv/bXjXgEwrp4Sk9OaxRthENXKOkC1VltlY3PqHQPUdEZcUrH5AWvDGFOkKhrszfwH2nxgYo8VH2vLus/PDGEmo+YdBVJu/Hv/dVDTAS4Mq2WMl4I4NOQGJc++SVjWzsoRWTBKbKijd+oJdohoJpWvYNA0c3KC2LickCBgP98Lis20BoGKgz0djAyDVNGZl40UbUE5OX/ukuYBZVTKPLeTqramD8bxO6/dLCfpHzv8st+4Wf/RLUfjFsvyy/wQbBfqtiv2my377ZbyTtt7T2m2v7bb79gYP90cctD2Hsj4N+AS5tPJ4zqGxTAAAAAElFTkSuQmCC);
background-position: 0 0;
background-repeat: no-repeat;
background-size: 100% 100%;
}
.btn-look {
padding: 7rpx 30rpx;
border-radius: 28rpx;
border: 1rpx solid #fff;
}
}
.wrap-list {
width: 690rpx;
margin: 0 auto;
}
.wrap-comment {
box-sizing: border-box;
padding: 20rpx;
border-radius: 8rpx;
background-color: #FFFFFF;
.cover {
flex: 0 0 180rpx;
width: 180rpx;
height: 180rpx;
}
.info {
height: 180rpx;
.title, .desc {
@include text-ellipsis(2);
}
}
.btn-comment {
padding: 8rpx 32rpx;
background-color: $primary;
color: #fff;
}
}
</style>
......@@ -18,23 +18,23 @@
<view class="font-28 mr-3">店铺服务</view>
<rate
:readonly="true"
:value="1.3"
:value="~~storeInfo.serve_grade"
margin="16"
/>
</view>
<view class="flex j-star a-center mt-2">
<view class="font-28 mr-3">店铺服务</view>
<view class="font-28 mr-3">商品描述</view>
<rate
:readonly="true"
:value="2.5"
:value="~~storeInfo.goods_grade"
margin="16"
/>
</view>
<view class="flex j-star a-center mt-2">
<view class="font-28 mr-3">店铺服务</view>
<view class="font-28 mr-3">物流服务</view>
<rate
:readonly="true"
:value="6"
:value="~~storeInfo.logistics_grade"
margin="16"
/>
</view>
......
......@@ -69,6 +69,7 @@
import { mapState, mapActions } from 'vuex'
import { editAvatar, editNickname } from '@/apis/user.js'
import { baseUrl } from '@/config/index.js'
import { M2B } from '@/config/global.js'
export default {
data() {
return {
......@@ -95,7 +96,7 @@ export default {
success: async res => {
try{
const fileInfo = res.tempFiles[0]
if(fileInfo.size > 2097152) return this.$toast({title: '图片不能大于2M'})
if((M2B * 2) < fileInfo.size) return this.$toast({title: '图片不能大于2M'})
const { status, data } = await editAvatar(fileInfo.path)
if(status) {
this.setUserInfo()
......@@ -114,7 +115,7 @@ export default {
success: async res => {
try{
const fileInfo = res.tempFiles[0]
if(fileInfo.size > 2097152) return this.$toast({title: '图片不能大于2M'})
if((M2B * 2) < fileInfo.size) return this.$toast({title: '图片不能大于2M'})
const { status, data } = await editAvatar(fileInfo.path)
if(status) {
this.setUserInfo()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment