11 changed files with 5349 additions and 48 deletions
@ -0,0 +1,562 @@ |
|||||
|
<template> |
||||
|
<mescroll-body ref="mescrollRef" :sticky="true" @init="mescrollInit" :down="{ native: true }" @down="downCallback" :up="upOption" @up="upCallback"> |
||||
|
<!-- 页面头部 --> |
||||
|
<!-- 搜索 --> |
||||
|
<view class="search"> |
||||
|
<view class="search-wrapper"> |
||||
|
<view class="index-search"> |
||||
|
<view class="index-cont-search t-c"> |
||||
|
<text class="search-icon iconfont icon-search"></text> |
||||
|
<text class="search-text"> |
||||
|
<input type="text" placeholder="请输入关键字" v-model="searchValue"> |
||||
|
</text> |
||||
|
<button class="search-text-bu" @click="onSearch">搜索</button> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
<!-- 基本信息 --> |
||||
|
<view class="dis-flex"> |
||||
|
<!-- 图片 --> |
||||
|
<view class="goods-item_left"> |
||||
|
<image class="image" :src="userList.doorHeadPhoto"></image> |
||||
|
</view> |
||||
|
<view class="goods-item_right"> |
||||
|
<!-- 名称 --> |
||||
|
<view class="goods-name"> |
||||
|
<text class="twoline-hide">{{ userList.name }}</text> |
||||
|
</view> |
||||
|
<view class="goods-auth-type"> |
||||
|
<text class="twoline-hide">{{ userList.authType }}</text> |
||||
|
</view> |
||||
|
<view class="goods-auth-num"> |
||||
|
<text class="twoline-hide">标的数量:{{ total }}</text> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
<!-- 店铺信息 --> |
||||
|
<view class="dis-flex-info"> |
||||
|
<view class="vertical-line"></view> |
||||
|
<view class="dis-flex-title">店铺信息</view> |
||||
|
<view class="dis-flex-line"></view> |
||||
|
<view class="dis-flex-content"> |
||||
|
<text>卖方/授权方名称:{{userList.name}}</text> |
||||
|
<text>认证类型:{{userList.userType}}</text> |
||||
|
<text>认证状态:{{userList.stateStr}}</text> |
||||
|
<text>交易主体标志码:{{userList.user_islicode}}</text> |
||||
|
</view> |
||||
|
</view> |
||||
|
<!--排序--> |
||||
|
<view class="order"> |
||||
|
<view v-for="items in tabText" class="tab_text" :class="{tab_link : items.value === targetTab}" |
||||
|
@click="changeTab(items.value)">{{ items.title }} |
||||
|
</view> |
||||
|
</view> |
||||
|
<!-- 标的列表 --> |
||||
|
<view class="goods-list clearfix"> |
||||
|
<view class="goods-item" v-for="(item, index) in list.data" :key="index" @click="onTargetDetail(item.goods_islicode)"> |
||||
|
<!-- 多列显示 --> |
||||
|
<view class="goods-item_left"> |
||||
|
<!-- 图片 --> |
||||
|
<view class="goods-image"> |
||||
|
<image class="image" mode="aspectFill" :src="item.gdimg"></image> |
||||
|
</view> |
||||
|
<view class="detail"> |
||||
|
<!-- 标题 --> |
||||
|
<view class="goods-name"> |
||||
|
<text class="twoline-hide">{{ item.goods_name }}</text> |
||||
|
</view> |
||||
|
<!-- 价格 --> |
||||
|
<view class="detail-price oneline-hide"> |
||||
|
<text class="goods-price f-30 col-m">¥{{ item.price }}</text> |
||||
|
<text class="goods-sales">销量:{{item.sale_count}}</text> |
||||
|
</view> |
||||
|
<!-- 标的所有者的信息 --> |
||||
|
<view class="detail-owner oneline-hide"> |
||||
|
<text class="oneline-hide"> {{ item.username }}</text> |
||||
|
</view> |
||||
|
|
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</mescroll-body> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import MescrollBody from '@/components/mescroll-uni/mescroll-body.vue' |
||||
|
import MescrollMixin from '@/components/mescroll-uni/mescroll-mixins' |
||||
|
import * as GoodsApi from '@/api/goods' |
||||
|
import { getEmptyPaginateObj, getMoreListData } from '@/core/app' |
||||
|
|
||||
|
//解压缩 |
||||
|
import pako from '@/core/pako' |
||||
|
import { base64ToUint8Array,numberWithCommas} from '@/utils/util' |
||||
|
|
||||
|
const pageSize = 8 |
||||
|
|
||||
|
export default { |
||||
|
components: { |
||||
|
MescrollBody, |
||||
|
}, |
||||
|
|
||||
|
mixins: [MescrollMixin], |
||||
|
|
||||
|
data() { |
||||
|
return { |
||||
|
searchValue: '', |
||||
|
options: {}, // 当前页面参数 |
||||
|
list: getEmptyPaginateObj(), // 商品列表数据 |
||||
|
userList: {}, |
||||
|
// 上拉加载配置 |
||||
|
upOption: { |
||||
|
// 首次自动执行 |
||||
|
auto: true, |
||||
|
// 每页数据的数量; 默认10 |
||||
|
page: { size: pageSize }, |
||||
|
// 数量要大于4条才显示无更多数据 |
||||
|
noMoreSize: 4, |
||||
|
}, |
||||
|
tabText: [ |
||||
|
{ |
||||
|
title: '上新排序', |
||||
|
value: 1 |
||||
|
}, |
||||
|
{ |
||||
|
title: '销量排序', |
||||
|
value: 2 |
||||
|
}, |
||||
|
{ |
||||
|
title: '价格排序', |
||||
|
value: 3 |
||||
|
}, |
||||
|
{ |
||||
|
title: '更多', |
||||
|
value: 4 |
||||
|
}, |
||||
|
], |
||||
|
targetTab: 1, |
||||
|
total: 0, |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 生命周期函数--监听页面加载 |
||||
|
*/ |
||||
|
onLoad(options) { |
||||
|
// 记录options |
||||
|
this.options = options |
||||
|
}, |
||||
|
|
||||
|
methods: { |
||||
|
// 搜索 |
||||
|
async onSearch() { |
||||
|
if (this.searchValue == '') { |
||||
|
this.$error('请输入搜索关键词'); |
||||
|
} else { |
||||
|
await this.getGoodsList() |
||||
|
await this.getHomeListImage() |
||||
|
} |
||||
|
}, |
||||
|
// 切换tab |
||||
|
async changeTab(val) { |
||||
|
if (val == 4) { |
||||
|
let name = this.options.name |
||||
|
this.$navTo('pages/category/tradingentity/detail',{name}) |
||||
|
} else { |
||||
|
this.targetTab = val |
||||
|
await this.getGoodsList() |
||||
|
await this.getHomeListImage() |
||||
|
} |
||||
|
}, |
||||
|
/** |
||||
|
* 上拉加载的回调 (页面初始化时也会执行一次) |
||||
|
* 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 |
||||
|
* @param {Object} page |
||||
|
*/ |
||||
|
async upCallback(page) { |
||||
|
const app = this |
||||
|
// 设置列表数据 |
||||
|
await app.getGoodsList(page.num) |
||||
|
.then(list => { |
||||
|
const curPageLen = list.data.length |
||||
|
const totalSize = list.data.total |
||||
|
app.mescroll.endBySize(curPageLen, totalSize) |
||||
|
}) |
||||
|
.catch(() => app.mescroll.endErr()) |
||||
|
|
||||
|
// 标的列表 |
||||
|
await app.getHomeListImage() |
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 获取标的列表 |
||||
|
* @param {number} pageNo 页码 |
||||
|
*/ |
||||
|
getGoodsList(pageNo = 1) { |
||||
|
const app = this |
||||
|
const param = { |
||||
|
authorization: '', |
||||
|
entrust_name: '', |
||||
|
entrust_user_name: app.options.name, |
||||
|
goods_status: '1', |
||||
|
limit: pageSize, |
||||
|
order: 'desc', |
||||
|
order_type: '', |
||||
|
page: pageNo, |
||||
|
record_type: '', |
||||
|
source_type: '', |
||||
|
is_user_data: '1', |
||||
|
} |
||||
|
if (app.searchValue != '') { |
||||
|
param.goods_name = app.searchValue |
||||
|
} |
||||
|
if (app.targetTab === 2) { |
||||
|
param.order_type = 'sale' |
||||
|
} else if (app.targetTab === 3) { |
||||
|
param.order_type = 'price' |
||||
|
} |
||||
|
return new Promise((resolve, reject) => { |
||||
|
GoodsApi.nbgoods(param) |
||||
|
.then(result => { |
||||
|
// 合并新数据 |
||||
|
const newList = app.initList(result.data) |
||||
|
app.total = result.data.total |
||||
|
app.list.data = getMoreListData(newList, app.list, pageNo) |
||||
|
app.userList = newList.data[0].user |
||||
|
app.userList.stateStr = this.getUserStateStr(app.userList.state) |
||||
|
app.userList.user_islicode = newList.data[0].user_islicode |
||||
|
resolve(newList) |
||||
|
}) |
||||
|
.catch(reject) |
||||
|
}) |
||||
|
}, |
||||
|
getUserStateStr(state){ |
||||
|
let str = '' |
||||
|
if (state == "1" || state == "3" || state == "7" || state == "0") { |
||||
|
str = '认证中' |
||||
|
} else if (state == "2" || state == "4" || state == "5") { |
||||
|
str = '认证失败' |
||||
|
} else if (state == "6") { |
||||
|
str = '认证成功' |
||||
|
} |
||||
|
return str |
||||
|
}, |
||||
|
// 初始化订单列表数据 |
||||
|
initList(newList) { |
||||
|
newList.data.forEach(item => { |
||||
|
// 处理价格表现形式 |
||||
|
item.price = numberWithCommas(item.price) |
||||
|
item.gdimg = item.goods_image === "" ? '' : pako.inflateRaw(base64ToUint8Array(item.goods_image), {to: 'string'}) |
||||
|
}) |
||||
|
return newList |
||||
|
}, |
||||
|
async getHomeListImage() { |
||||
|
this.list.data.forEach((item, key) => { |
||||
|
if (item.goods_image === "") { |
||||
|
GoodsApi.nbgoodsImage({"id": item.id}).then(res2 => { |
||||
|
if (res2.code === 200) { |
||||
|
this.list.data[key].goods_image = res2.data.data[0].goods_image; |
||||
|
this.list.data[key].gdimg = pako.inflateRaw(base64ToUint8Array(res2.data.data[0].goods_image), {to: 'string'}) |
||||
|
} |
||||
|
}) |
||||
|
} |
||||
|
}) |
||||
|
}, |
||||
|
|
||||
|
// 跳转商品详情页 |
||||
|
onTargetDetail(gislicode) { |
||||
|
this.$navTo('pages/goods/detail', { gislicode }) |
||||
|
}, |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
|
||||
|
// 搜索 |
||||
|
.search { |
||||
|
position: fixed; |
||||
|
float: top; |
||||
|
top: var(--window-top); |
||||
|
left: var(--window-left); |
||||
|
right: var(--window-right); |
||||
|
z-index: 19; |
||||
|
|
||||
|
.search-wrapper { |
||||
|
background: #1c223b; |
||||
|
padding: 0rpx 20rpx 20rpx 20rpx; |
||||
|
} |
||||
|
|
||||
|
.index-search { |
||||
|
border-bottom: 0; |
||||
|
background: #fff; |
||||
|
border-radius: 50rpx; |
||||
|
overflow: hidden; |
||||
|
font-size: 28rpx; |
||||
|
color: #6d6d6d; |
||||
|
box-sizing: border-box; |
||||
|
height: 64rpx; |
||||
|
line-height: 64rpx; |
||||
|
|
||||
|
.index-cont-search { |
||||
|
width: 100%; |
||||
|
font-size: 28rpx; |
||||
|
background: #f7f7f7; |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
align-items: center; |
||||
|
|
||||
|
.search-icon { |
||||
|
font-size: 34rpx; |
||||
|
margin-left: 50rpx; |
||||
|
} |
||||
|
|
||||
|
.search-text { |
||||
|
text-align: left; |
||||
|
float: left; |
||||
|
font-size: 20rpx; |
||||
|
margin-left: 20rpx; |
||||
|
} |
||||
|
.search-text-bu { |
||||
|
margin-right: 20rpx; |
||||
|
color: #ffffff; |
||||
|
background-color: #1c223b; |
||||
|
font-size: 20rpx; |
||||
|
width: 120rpx; |
||||
|
height: 50rpx; |
||||
|
text-align: center; |
||||
|
border-radius: 50rpx; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 店铺基本信息 |
||||
|
.dis-flex { |
||||
|
display: flex; |
||||
|
width: 90%; |
||||
|
height: 240rpx; |
||||
|
margin: 100rpx 10rpx 20rpx 40rpx; |
||||
|
box-sizing: border-box; |
||||
|
background: #fff; |
||||
|
line-height: 1.6; |
||||
|
border-radius: 15rpx; |
||||
|
|
||||
|
.goods-item_left { |
||||
|
display: flex; |
||||
|
width: 220rpx; |
||||
|
background: #fff; |
||||
|
align-items: center; |
||||
|
|
||||
|
.image { |
||||
|
display: block; |
||||
|
width: 200rpx; |
||||
|
height: 200rpx; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.goods-item_right { |
||||
|
margin-top: 20rpx; |
||||
|
|
||||
|
.goods-auth-type { |
||||
|
margin-top: 40rpx; |
||||
|
font-size: 26rpx; |
||||
|
color: #fbb154; |
||||
|
font-weight: bold; |
||||
|
} |
||||
|
.goods-auth-num { |
||||
|
margin-top: 40rpx; |
||||
|
font-size: 24rpx; |
||||
|
color: #d7d7d7; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
// 店铺信息 |
||||
|
.dis-flex-info { |
||||
|
|
||||
|
position: relative; |
||||
|
width: 90%; |
||||
|
height: 300rpx; |
||||
|
background: #fff; |
||||
|
margin: 20rpx 40rpx; |
||||
|
border-radius: 10rpx; |
||||
|
color: #15192d; |
||||
|
|
||||
|
.vertical-line { |
||||
|
position: absolute; |
||||
|
left: 0; |
||||
|
top: 0; |
||||
|
width: 12px; |
||||
|
height: 100%; |
||||
|
border-top-left-radius: 10rpx; |
||||
|
border-bottom-left-radius: 10rpx; |
||||
|
background: linear-gradient(to bottom, #15192d, #15192d 50%); /* 渐变背景色 */ |
||||
|
} |
||||
|
.dis-flex-title { |
||||
|
font-size: 30rpx; |
||||
|
margin-left: 40rpx; |
||||
|
padding-top: 20rpx; |
||||
|
padding-bottom: 10rpx; |
||||
|
} |
||||
|
.dis-flex-line { |
||||
|
border-bottom: 5rpx #15192d solid; |
||||
|
} |
||||
|
.dis-flex-content { |
||||
|
margin: 20rpx 40rpx; |
||||
|
white-space: normal; |
||||
|
text { |
||||
|
display: block; |
||||
|
margin-bottom: 10rpx; |
||||
|
font-size: 26rpx; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 排序 |
||||
|
.order { |
||||
|
display: flex; |
||||
|
padding: 20rpx 10rpx 20rpx; |
||||
|
margin-left: -55rpx; |
||||
|
z-index: 65; |
||||
|
font-weight: bold; |
||||
|
|
||||
|
.tab_text { |
||||
|
display: inline-block; |
||||
|
color: #1b223b; |
||||
|
font-size: 30rpx; |
||||
|
margin-left: 80rpx; |
||||
|
} |
||||
|
|
||||
|
.tab_link { |
||||
|
border-bottom: 5rpx #1b223b solid; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 排序组件 |
||||
|
.store-sort { |
||||
|
position: sticky; |
||||
|
top: var(--window-top); |
||||
|
display: flex; |
||||
|
padding: 20rpx 0; |
||||
|
font-size: 28rpx; |
||||
|
background: #fff; |
||||
|
color: #1b223b; |
||||
|
z-index: 99; |
||||
|
|
||||
|
.sort-item { |
||||
|
flex-basis: 33.3333%; |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
align-items: center; |
||||
|
height: 50rpx; |
||||
|
|
||||
|
&.active { |
||||
|
color: #e49a3d; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.sort-item-price .price-arrow { |
||||
|
margin-left: 20rpx; |
||||
|
font-size: 24rpx; |
||||
|
color: #000; |
||||
|
|
||||
|
.icon { |
||||
|
&.active { |
||||
|
color: #e49a3d; |
||||
|
} |
||||
|
|
||||
|
&.up { |
||||
|
margin-bottom: -16rpx; |
||||
|
} |
||||
|
|
||||
|
&.down { |
||||
|
margin-top: -16rpx; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
// 商品列表 |
||||
|
.goods-list { |
||||
|
padding: 4rpx; |
||||
|
box-sizing: border-box; |
||||
|
} |
||||
|
|
||||
|
// 平铺显示 |
||||
|
|
||||
|
.goods-item { |
||||
|
float: left; |
||||
|
box-sizing: border-box; |
||||
|
padding: 6rpx; |
||||
|
width: 50%; |
||||
|
|
||||
|
.goods-image { |
||||
|
position: relative; |
||||
|
width: 100%; |
||||
|
height: 0; |
||||
|
padding-bottom: 100%; |
||||
|
overflow: hidden; |
||||
|
background: #fff; |
||||
|
|
||||
|
&:after { |
||||
|
content: ''; |
||||
|
display: block; |
||||
|
margin-top: 100%; |
||||
|
} |
||||
|
|
||||
|
.image { |
||||
|
position: absolute; |
||||
|
width: 100%; |
||||
|
height: 100%; |
||||
|
top: 0; |
||||
|
left: 0; |
||||
|
-o-object-fit: cover; |
||||
|
object-fit: cover; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.detail { |
||||
|
padding: 8rpx; |
||||
|
background: #fff; |
||||
|
|
||||
|
.goods-name { |
||||
|
min-height: 68rpx; |
||||
|
line-height: 32rpx; |
||||
|
white-space: normal; |
||||
|
color: #484848; |
||||
|
font-size: 26rpx; |
||||
|
} |
||||
|
|
||||
|
.detail-price { |
||||
|
.goods-price { |
||||
|
font-weight: bold; |
||||
|
margin-right: 8rpx; |
||||
|
} |
||||
|
|
||||
|
.line-price { |
||||
|
text-decoration: line-through; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.goods-sales { |
||||
|
float: right; |
||||
|
color: #484848; |
||||
|
font-size: 20rpx; |
||||
|
margin-top: 10rpx; |
||||
|
} |
||||
|
|
||||
|
.detail-owner{ |
||||
|
padding: 4rpx; |
||||
|
font-size: 22rpx; |
||||
|
color: #999; |
||||
|
margin-left: 10rpx; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</style> |
||||
@ -0,0 +1,471 @@ |
|||||
|
<template> |
||||
|
<view class="container"> |
||||
|
<!-- 搜索 --> |
||||
|
<view class="search"> |
||||
|
<view class="search-wrapper"> |
||||
|
<view class="index-search"> |
||||
|
<view class="index-cont-search t-c"> |
||||
|
<text class="search-icon iconfont icon-search"></text> |
||||
|
<text class="search-text"> |
||||
|
<input type="text" placeholder="请输入搜索关键字" v-model="searchValue"> |
||||
|
</text> |
||||
|
<button class="search-text-bu" @click="onSearch">搜索</button> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
<view class="order"> |
||||
|
<view v-for="items in tabText" class="tab_text" :class="{tab_link : items.value === targetTab}" |
||||
|
@click="changeTab(items.value)">{{ items.title }} |
||||
|
</view> |
||||
|
</view> |
||||
|
<view class="glistzone"> |
||||
|
<view class="diy-goods"> |
||||
|
<view class="goods-list display__list column__2"> |
||||
|
<mescroll-body ref="mescrollRef" :sticky="true" @init="mescrollInit" :down="{ native: true }" |
||||
|
@down="downCallback" :up="upOption" @up="upCallback"> |
||||
|
<view class="goods-item" v-for="(dataItem, index) in gdlist.data" :key="index" |
||||
|
@click="onTargetGoods(dataItem.goods_islicode)"> |
||||
|
<!-- 多列商品 --> |
||||
|
<block> |
||||
|
<!-- 标的图片 --> |
||||
|
<view class="goods-image"> |
||||
|
<image class="image" mode="aspectFill" :src="dataItem.gdimg"></image> |
||||
|
</view> |
||||
|
<view class="detail"> |
||||
|
<!-- 标的标题 --> |
||||
|
<view class="goods-name"> |
||||
|
<text class="twoline-hide">{{ dataItem.goods_name }}</text> |
||||
|
</view> |
||||
|
<!-- 标的价格 && 销量--> |
||||
|
<view class="detail-price oneline-hide"> |
||||
|
<text class="goods-price f-30 col-m">¥ {{ dataItem.price }}</text> |
||||
|
<text class="sale-count col-9 f-24">销量:{{ dataItem.sale_count }}</text> |
||||
|
</view> |
||||
|
<!-- 标的所有者的信息 --> |
||||
|
<view class="detail-owner oneline-hide"> |
||||
|
<text class="oneline-hide"> {{ dataItem.username }}</text> |
||||
|
</view> |
||||
|
|
||||
|
</view> |
||||
|
</block> |
||||
|
|
||||
|
</view> |
||||
|
</mescroll-body> |
||||
|
</view> |
||||
|
</view> |
||||
|
|
||||
|
</view> |
||||
|
</view> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
// 滚动加载 |
||||
|
import MescrollBody from '@/components/mescroll-uni/mescroll-body.vue' |
||||
|
import MescrollMixin from '@/components/mescroll-uni/mescroll-mixins' |
||||
|
import {getEmptyPaginateObj, getMoreListData} from '@/core/app' |
||||
|
import { base64ToUint8Array,numberWithCommas } from '@/utils/util' |
||||
|
import * as Api from '@/api/page' |
||||
|
import * as Gapi from '@/api/goods' |
||||
|
import pako from '@/core/pako' |
||||
|
|
||||
|
// 每页记录数量 |
||||
|
const pageSize = 10 |
||||
|
|
||||
|
export default { |
||||
|
components: { |
||||
|
MescrollBody, // 滚动标签 |
||||
|
}, |
||||
|
mixins: [MescrollMixin], |
||||
|
data() { |
||||
|
return { |
||||
|
searchValue: '', |
||||
|
tabText: [ |
||||
|
{ |
||||
|
title: '上新排序', |
||||
|
value: 1 |
||||
|
}, |
||||
|
{ |
||||
|
title: '销量排序', |
||||
|
value: 2 |
||||
|
}, |
||||
|
{ |
||||
|
title: '价格排序', |
||||
|
value: 3 |
||||
|
}, |
||||
|
], |
||||
|
targetTab: 1, |
||||
|
// 上拉加载配置 |
||||
|
upOption: { |
||||
|
// 首次自动执行 |
||||
|
auto: true, |
||||
|
// 每页数据的数量; 默认10 |
||||
|
page: {size: pageSize}, |
||||
|
// 数量要大于4条才显示无更多数据 |
||||
|
noMoreSize: 4, |
||||
|
// 空布局 |
||||
|
empty: { |
||||
|
tip: '暂无记录' |
||||
|
} |
||||
|
}, |
||||
|
gdlist: getEmptyPaginateObj(), |
||||
|
}; |
||||
|
}, |
||||
|
methods: { |
||||
|
// 搜索 |
||||
|
async onSearch() { |
||||
|
await this.getHomeList(1) |
||||
|
await this.getHomeListImage() |
||||
|
}, |
||||
|
// 切换tab |
||||
|
async changeTab(val) { |
||||
|
this.targetTab = val |
||||
|
await this.getHomeList(1) |
||||
|
await this.getHomeListImage() |
||||
|
}, |
||||
|
/** |
||||
|
* 上拉加载的回调 (页面初始化时也会执行一次) |
||||
|
* 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 |
||||
|
* @param {Object} page |
||||
|
*/ |
||||
|
async upCallback(page) { |
||||
|
const app = this |
||||
|
// 设置列表数据 |
||||
|
await app.getHomeList(page.num) |
||||
|
.then(list => { |
||||
|
const curPageLen = list.data.length |
||||
|
const totalSize = list.data.total |
||||
|
app.mescroll.endBySize(curPageLen, totalSize) |
||||
|
}) |
||||
|
.catch(() => app.mescroll.endErr()) |
||||
|
// 标的列表 |
||||
|
await app.getHomeListImage() |
||||
|
}, |
||||
|
//商品列表 |
||||
|
getHomeList(pageNo = 1) { |
||||
|
const app = this |
||||
|
// 必须的字段 |
||||
|
let stimestamp = new Date().getTime() |
||||
|
// promise 方式 |
||||
|
return new Promise((resolve, reject) => { |
||||
|
let rqdata = {"pay_type": 2, "goods_status": 1, "page": pageNo, "limit": pageSize,"entrust_user_name": app.options.name} |
||||
|
// rqdata.record_type = 2 |
||||
|
if (app.searchValue != '') { |
||||
|
rqdata.goods_name = app.searchValue |
||||
|
} |
||||
|
if (app.targetTab == 2) { |
||||
|
rqdata.order_type = 'sale' |
||||
|
} else if (app.targetTab == 3) { |
||||
|
rqdata.order_type = 'price' |
||||
|
rqdata.order = 'asc' |
||||
|
} |
||||
|
// 获取列表 |
||||
|
Gapi.nbgoods(rqdata) |
||||
|
.then(res => { |
||||
|
// 合并新数据 |
||||
|
const newList = app.initList(res.data) |
||||
|
app.gdlist.data = getMoreListData(newList, app.gdlist, pageNo) |
||||
|
resolve(newList) |
||||
|
}) |
||||
|
}) |
||||
|
}, |
||||
|
// 初始化订单列表数据 |
||||
|
initList(newList) { |
||||
|
newList.data.forEach(item => { |
||||
|
// 处理价格表现形式 |
||||
|
item.price = numberWithCommas(item.price) |
||||
|
item.gdimg = item.goods_image === "" ? '' : pako.inflateRaw(base64ToUint8Array(item.goods_image), {to: 'string'}) |
||||
|
}) |
||||
|
return newList |
||||
|
}, |
||||
|
async getHomeListImage() { |
||||
|
this.gdlist.data.forEach((item, key) => { |
||||
|
if (item.goods_image === "") { |
||||
|
Gapi.nbgoodsImage({"id": item.id}).then(res2 => { |
||||
|
if (res2.code === 200) { |
||||
|
this.gdlist.data[key].goods_image = res2.data.data[0].goods_image; |
||||
|
this.gdlist.data[key].gdimg = pako.inflateRaw(base64ToUint8Array(res2.data.data[0].goods_image), {to: 'string'}) |
||||
|
} |
||||
|
}) |
||||
|
} |
||||
|
}) |
||||
|
}, |
||||
|
/** |
||||
|
* 跳转商品详情页 |
||||
|
*/ |
||||
|
onTargetGoods(gislicode) { |
||||
|
this.$navTo('pages/goods/detail', {gislicode}) |
||||
|
}, |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
|
||||
|
.container { |
||||
|
|
||||
|
position: relative; |
||||
|
min-height: 100vh; |
||||
|
background-color: #efefef; |
||||
|
|
||||
|
// 搜索 |
||||
|
.search { |
||||
|
position: fixed; |
||||
|
float: top; |
||||
|
top: var(--window-top); |
||||
|
left: var(--window-left); |
||||
|
right: var(--window-right); |
||||
|
z-index: 19; |
||||
|
|
||||
|
.search-wrapper { |
||||
|
background: #1c223b; |
||||
|
padding: 0rpx 20rpx 20rpx 20rpx; |
||||
|
} |
||||
|
|
||||
|
.index-search { |
||||
|
border-bottom: 0; |
||||
|
background: #fff; |
||||
|
border-radius: 50rpx; |
||||
|
overflow: hidden; |
||||
|
font-size: 28rpx; |
||||
|
color: #6d6d6d; |
||||
|
box-sizing: border-box; |
||||
|
height: 74rpx; |
||||
|
line-height: 74rpx; |
||||
|
|
||||
|
.index-cont-search { |
||||
|
width: 100%; |
||||
|
font-size: 28rpx; |
||||
|
background: #f7f7f7; |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
align-items: center; |
||||
|
|
||||
|
.search-icon { |
||||
|
font-size: 34rpx; |
||||
|
margin-left: 50rpx; |
||||
|
} |
||||
|
|
||||
|
.search-text { |
||||
|
text-align: left; |
||||
|
float: left; |
||||
|
margin-left: 20rpx; |
||||
|
width: 100%; |
||||
|
|
||||
|
input { |
||||
|
font-size: 20rpx; |
||||
|
} |
||||
|
} |
||||
|
.search-text-bu { |
||||
|
margin-right: 20rpx; |
||||
|
color: #ffffff; |
||||
|
background-color: #1c223b; |
||||
|
font-size: 20rpx; |
||||
|
width: 120rpx; |
||||
|
height: 50rpx; |
||||
|
text-align: center; |
||||
|
border-radius: 50rpx; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.order { |
||||
|
display: flex; |
||||
|
padding: 110rpx 10rpx 20rpx; |
||||
|
margin-left: -55rpx; |
||||
|
z-index: 65; |
||||
|
|
||||
|
.tab_text { |
||||
|
display: inline-block; |
||||
|
color: #1b223b; |
||||
|
font-size: 30rpx; |
||||
|
margin-left: 80rpx; |
||||
|
} |
||||
|
|
||||
|
.tab_link { |
||||
|
border-bottom: 1rpx #1b223b solid; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// goods |
||||
|
.glistzone{ |
||||
|
padding: 4rpx; |
||||
|
} |
||||
|
|
||||
|
.diy-goods { |
||||
|
.goods-list { |
||||
|
padding: 4rpx; |
||||
|
box-sizing: border-box; |
||||
|
margin-top: -20rpx; |
||||
|
|
||||
|
.goods-item { |
||||
|
// background-color: #fff; |
||||
|
box-sizing: border-box; |
||||
|
padding: 16rpx; |
||||
|
|
||||
|
.goods-image { |
||||
|
position: relative; |
||||
|
width: 100%; |
||||
|
height: 0; |
||||
|
padding-bottom: 100%; |
||||
|
overflow: hidden; |
||||
|
background: #fff; |
||||
|
|
||||
|
&:after { |
||||
|
content: ''; |
||||
|
display: block; |
||||
|
margin-top: 100%; |
||||
|
} |
||||
|
|
||||
|
.image { |
||||
|
position: absolute; |
||||
|
width: 100%; |
||||
|
height: 100%; |
||||
|
top: 0; |
||||
|
left: 0; |
||||
|
-o-object-fit: cover; |
||||
|
object-fit: cover; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.detail { |
||||
|
padding: 8rpx; |
||||
|
background: #fff; |
||||
|
border-radius: 0 0 6% 6%; |
||||
|
box-shadow: #333 2rpx 3rpx 2rpx; |
||||
|
|
||||
|
.goods-name { |
||||
|
min-height: 68rpx; |
||||
|
line-height: 1.3; |
||||
|
white-space: normal; |
||||
|
color: #484848; |
||||
|
font-size: 26rpx; |
||||
|
} |
||||
|
|
||||
|
.detail-price { |
||||
|
.goods-price { |
||||
|
font-weight: 800; |
||||
|
margin-right: 8rpx; |
||||
|
} |
||||
|
|
||||
|
.sale-count { |
||||
|
maring-left:20rpx; |
||||
|
font-size: 18rpx; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.detail-owner{ |
||||
|
padding: 4rpx; |
||||
|
font-size: 22rpx; |
||||
|
color: #999; |
||||
|
margin-left: 10rpx; |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
|
||||
|
&.display__slide { |
||||
|
white-space: nowrap; |
||||
|
font-size: 0; |
||||
|
|
||||
|
.goods-item { |
||||
|
display: inline-block; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
&.display__list { |
||||
|
.goods-item { |
||||
|
float: left; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
&.column__2 { |
||||
|
.goods-item { |
||||
|
width: 50%; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
&.column__3 { |
||||
|
.goods-item { |
||||
|
width: 33.33333%; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
&.column__1 { |
||||
|
.goods-item { |
||||
|
width: 100%; |
||||
|
height: 280rpx; |
||||
|
margin-bottom: 12rpx; |
||||
|
padding: 20rpx; |
||||
|
box-sizing: border-box; |
||||
|
background: #fff; |
||||
|
line-height: 1.6; |
||||
|
|
||||
|
&:last-child { |
||||
|
margin-bottom: 0; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.goods-item_left { |
||||
|
display: flex; |
||||
|
width: 40%; |
||||
|
background: #fff; |
||||
|
align-items: center; |
||||
|
|
||||
|
.image { |
||||
|
display: block; |
||||
|
width: 240rpx; |
||||
|
height: 240rpx; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.goods-item_right { |
||||
|
position: relative; |
||||
|
width: 60%; |
||||
|
|
||||
|
.goods-name { |
||||
|
margin-top: 20rpx; |
||||
|
min-height: 68rpx; |
||||
|
line-height: 1.3; |
||||
|
white-space: normal; |
||||
|
color: #484848; |
||||
|
font-size: 26rpx; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.goods-item_desc { |
||||
|
margin-top: 8rpx; |
||||
|
} |
||||
|
|
||||
|
.desc-selling_point { |
||||
|
width: 400rpx; |
||||
|
font-size: 24rpx; |
||||
|
color: #e49a3d; |
||||
|
} |
||||
|
|
||||
|
.desc-goods_sales { |
||||
|
color: #999; |
||||
|
font-size: 24rpx; |
||||
|
} |
||||
|
|
||||
|
.desc_footer { |
||||
|
font-size: 24rpx; |
||||
|
|
||||
|
.price_x { |
||||
|
margin-right: 16rpx; |
||||
|
color: #f03c3c; |
||||
|
font-size: 30rpx; |
||||
|
} |
||||
|
|
||||
|
.price_y { |
||||
|
text-decoration: line-through; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
</style> |
||||
@ -0,0 +1,562 @@ |
|||||
|
<template> |
||||
|
<mescroll-body ref="mescrollRef" :sticky="true" @init="mescrollInit" :down="{ native: true }" @down="downCallback" :up="upOption" @up="upCallback"> |
||||
|
<!-- 页面头部 --> |
||||
|
<!-- 搜索 --> |
||||
|
<view class="search"> |
||||
|
<view class="search-wrapper"> |
||||
|
<view class="index-search"> |
||||
|
<view class="index-cont-search t-c"> |
||||
|
<text class="search-icon iconfont icon-search"></text> |
||||
|
<text class="search-text"> |
||||
|
<input type="text" placeholder="请输入关键字" v-model="searchValue"> |
||||
|
</text> |
||||
|
<button class="search-text-bu" @click="onSearch">搜索</button> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
<!-- 基本信息 --> |
||||
|
<view class="dis-flex"> |
||||
|
<!-- 图片 --> |
||||
|
<view class="goods-item_left"> |
||||
|
<image class="image" :src="userList.doorHeadPhoto"></image> |
||||
|
</view> |
||||
|
<view class="goods-item_right"> |
||||
|
<!-- 名称 --> |
||||
|
<view class="goods-name"> |
||||
|
<text class="twoline-hide">{{ userList.name }}</text> |
||||
|
</view> |
||||
|
<view class="goods-auth-type"> |
||||
|
<text class="twoline-hide">{{ userList.authType }}</text> |
||||
|
</view> |
||||
|
<view class="goods-auth-num"> |
||||
|
<text class="twoline-hide">标的数量:{{ total }}</text> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
<!-- 店铺信息 --> |
||||
|
<view class="dis-flex-info"> |
||||
|
<view class="vertical-line"></view> |
||||
|
<view class="dis-flex-title">店铺信息</view> |
||||
|
<view class="dis-flex-line"></view> |
||||
|
<view class="dis-flex-content"> |
||||
|
<text>卖方/授权方名称:{{userList.name}}</text> |
||||
|
<text>认证类型:{{userList.userType}}</text> |
||||
|
<text>认证状态:{{userList.stateStr}}</text> |
||||
|
<text>交易主体标志码:{{userList.user_islicode}}</text> |
||||
|
</view> |
||||
|
</view> |
||||
|
<!--排序--> |
||||
|
<view class="order"> |
||||
|
<view v-for="items in tabText" class="tab_text" :class="{tab_link : items.value === targetTab}" |
||||
|
@click="changeTab(items.value)">{{ items.title }} |
||||
|
</view> |
||||
|
</view> |
||||
|
<!-- 标的列表 --> |
||||
|
<view class="goods-list clearfix"> |
||||
|
<view class="goods-item" v-for="(item, index) in list.data" :key="index" @click="onTargetDetail(item.goods_islicode)"> |
||||
|
<!-- 多列显示 --> |
||||
|
<view class="goods-item_left"> |
||||
|
<!-- 图片 --> |
||||
|
<view class="goods-image"> |
||||
|
<image class="image" mode="aspectFill" :src="item.gdimg"></image> |
||||
|
</view> |
||||
|
<view class="detail"> |
||||
|
<!-- 标题 --> |
||||
|
<view class="goods-name"> |
||||
|
<text class="twoline-hide">{{ item.goods_name }}</text> |
||||
|
</view> |
||||
|
<!-- 价格 --> |
||||
|
<view class="detail-price oneline-hide"> |
||||
|
<text class="goods-price f-30 col-m">¥{{ item.price }}</text> |
||||
|
<text class="goods-sales">销量:{{item.sale_count}}</text> |
||||
|
</view> |
||||
|
<!-- 标的所有者的信息 --> |
||||
|
<view class="detail-owner oneline-hide"> |
||||
|
<text class="oneline-hide"> {{ item.username }}</text> |
||||
|
</view> |
||||
|
|
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</mescroll-body> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import MescrollBody from '@/components/mescroll-uni/mescroll-body.vue' |
||||
|
import MescrollMixin from '@/components/mescroll-uni/mescroll-mixins' |
||||
|
import * as GoodsApi from '@/api/goods' |
||||
|
import { getEmptyPaginateObj, getMoreListData } from '@/core/app' |
||||
|
|
||||
|
//解压缩 |
||||
|
import pako from '@/core/pako' |
||||
|
import { base64ToUint8Array,numberWithCommas} from '@/utils/util' |
||||
|
|
||||
|
const pageSize = 8 |
||||
|
|
||||
|
export default { |
||||
|
components: { |
||||
|
MescrollBody, |
||||
|
}, |
||||
|
|
||||
|
mixins: [MescrollMixin], |
||||
|
|
||||
|
data() { |
||||
|
return { |
||||
|
searchValue: '', |
||||
|
options: {}, // 当前页面参数 |
||||
|
list: getEmptyPaginateObj(), // 商品列表数据 |
||||
|
userList: {}, |
||||
|
// 上拉加载配置 |
||||
|
upOption: { |
||||
|
// 首次自动执行 |
||||
|
auto: true, |
||||
|
// 每页数据的数量; 默认10 |
||||
|
page: { size: pageSize }, |
||||
|
// 数量要大于4条才显示无更多数据 |
||||
|
noMoreSize: 4, |
||||
|
}, |
||||
|
tabText: [ |
||||
|
{ |
||||
|
title: '上新排序', |
||||
|
value: 1 |
||||
|
}, |
||||
|
{ |
||||
|
title: '销量排序', |
||||
|
value: 2 |
||||
|
}, |
||||
|
{ |
||||
|
title: '价格排序', |
||||
|
value: 3 |
||||
|
}, |
||||
|
{ |
||||
|
title: '更多', |
||||
|
value: 4 |
||||
|
}, |
||||
|
], |
||||
|
targetTab: 1, |
||||
|
total: 0, |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 生命周期函数--监听页面加载 |
||||
|
*/ |
||||
|
onLoad(options) { |
||||
|
// 记录options |
||||
|
this.options = options |
||||
|
}, |
||||
|
|
||||
|
methods: { |
||||
|
// 搜索 |
||||
|
async onSearch() { |
||||
|
if (this.searchValue == '') { |
||||
|
this.$error('请输入搜索关键词'); |
||||
|
} else { |
||||
|
await this.getGoodsList() |
||||
|
await this.getHomeListImage() |
||||
|
} |
||||
|
}, |
||||
|
// 切换tab |
||||
|
async changeTab(val) { |
||||
|
if (val == 4) { |
||||
|
let name = this.options.name |
||||
|
this.$navTo('pages/category/tradingentity/detail',{name}) |
||||
|
} else { |
||||
|
this.targetTab = val |
||||
|
await this.getGoodsList() |
||||
|
await this.getHomeListImage() |
||||
|
} |
||||
|
}, |
||||
|
/** |
||||
|
* 上拉加载的回调 (页面初始化时也会执行一次) |
||||
|
* 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 |
||||
|
* @param {Object} page |
||||
|
*/ |
||||
|
async upCallback(page) { |
||||
|
const app = this |
||||
|
// 设置列表数据 |
||||
|
await app.getGoodsList(page.num) |
||||
|
.then(list => { |
||||
|
const curPageLen = list.data.length |
||||
|
const totalSize = list.data.total |
||||
|
app.mescroll.endBySize(curPageLen, totalSize) |
||||
|
}) |
||||
|
.catch(() => app.mescroll.endErr()) |
||||
|
|
||||
|
// 标的列表 |
||||
|
await app.getHomeListImage() |
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 获取标的列表 |
||||
|
* @param {number} pageNo 页码 |
||||
|
*/ |
||||
|
getGoodsList(pageNo = 1) { |
||||
|
const app = this |
||||
|
const param = { |
||||
|
authorization: '', |
||||
|
entrust_name: '', |
||||
|
entrust_user_name: app.options.name, |
||||
|
goods_status: '1', |
||||
|
limit: pageSize, |
||||
|
order: 'desc', |
||||
|
order_type: '', |
||||
|
page: pageNo, |
||||
|
record_type: '', |
||||
|
source_type: '', |
||||
|
is_user_data: '1', |
||||
|
} |
||||
|
if (app.searchValue != '') { |
||||
|
param.goods_name = app.searchValue |
||||
|
} |
||||
|
if (app.targetTab === 2) { |
||||
|
param.order_type = 'sale' |
||||
|
} else if (app.targetTab === 3) { |
||||
|
param.order_type = 'price' |
||||
|
} |
||||
|
return new Promise((resolve, reject) => { |
||||
|
GoodsApi.nbgoods(param) |
||||
|
.then(result => { |
||||
|
// 合并新数据 |
||||
|
const newList = app.initList(result.data) |
||||
|
app.total = result.data.total |
||||
|
app.list.data = getMoreListData(newList, app.list, pageNo) |
||||
|
app.userList = newList.data[0].user |
||||
|
app.userList.stateStr = this.getUserStateStr(app.userList.state) |
||||
|
app.userList.user_islicode = newList.data[0].user_islicode |
||||
|
resolve(newList) |
||||
|
}) |
||||
|
.catch(reject) |
||||
|
}) |
||||
|
}, |
||||
|
getUserStateStr(state){ |
||||
|
let str = '' |
||||
|
if (state == "1" || state == "3" || state == "7" || state == "0") { |
||||
|
str = '认证中' |
||||
|
} else if (state == "2" || state == "4" || state == "5") { |
||||
|
str = '认证失败' |
||||
|
} else if (state == "6") { |
||||
|
str = '认证成功' |
||||
|
} |
||||
|
return str |
||||
|
}, |
||||
|
// 初始化订单列表数据 |
||||
|
initList(newList) { |
||||
|
newList.data.forEach(item => { |
||||
|
// 处理价格表现形式 |
||||
|
item.price = numberWithCommas(item.price) |
||||
|
item.gdimg = item.goods_image === "" ? '' : pako.inflateRaw(base64ToUint8Array(item.goods_image), {to: 'string'}) |
||||
|
}) |
||||
|
return newList |
||||
|
}, |
||||
|
async getHomeListImage() { |
||||
|
this.list.data.forEach((item, key) => { |
||||
|
if (item.goods_image === "") { |
||||
|
GoodsApi.nbgoodsImage({"id": item.id}).then(res2 => { |
||||
|
if (res2.code === 200) { |
||||
|
this.list.data[key].goods_image = res2.data.data[0].goods_image; |
||||
|
this.list.data[key].gdimg = pako.inflateRaw(base64ToUint8Array(res2.data.data[0].goods_image), {to: 'string'}) |
||||
|
} |
||||
|
}) |
||||
|
} |
||||
|
}) |
||||
|
}, |
||||
|
|
||||
|
// 跳转商品详情页 |
||||
|
onTargetDetail(gislicode) { |
||||
|
this.$navTo('pages/goods/detail', { gislicode }) |
||||
|
}, |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
|
||||
|
// 搜索 |
||||
|
.search { |
||||
|
position: fixed; |
||||
|
float: top; |
||||
|
top: var(--window-top); |
||||
|
left: var(--window-left); |
||||
|
right: var(--window-right); |
||||
|
z-index: 19; |
||||
|
|
||||
|
.search-wrapper { |
||||
|
background: #1c223b; |
||||
|
padding: 0rpx 20rpx 20rpx 20rpx; |
||||
|
} |
||||
|
|
||||
|
.index-search { |
||||
|
border-bottom: 0; |
||||
|
background: #fff; |
||||
|
border-radius: 50rpx; |
||||
|
overflow: hidden; |
||||
|
font-size: 28rpx; |
||||
|
color: #6d6d6d; |
||||
|
box-sizing: border-box; |
||||
|
height: 64rpx; |
||||
|
line-height: 64rpx; |
||||
|
|
||||
|
.index-cont-search { |
||||
|
width: 100%; |
||||
|
font-size: 28rpx; |
||||
|
background: #f7f7f7; |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
align-items: center; |
||||
|
|
||||
|
.search-icon { |
||||
|
font-size: 34rpx; |
||||
|
margin-left: 50rpx; |
||||
|
} |
||||
|
|
||||
|
.search-text { |
||||
|
text-align: left; |
||||
|
float: left; |
||||
|
font-size: 20rpx; |
||||
|
margin-left: 20rpx; |
||||
|
} |
||||
|
.search-text-bu { |
||||
|
margin-right: 20rpx; |
||||
|
color: #ffffff; |
||||
|
background-color: #1c223b; |
||||
|
font-size: 20rpx; |
||||
|
width: 120rpx; |
||||
|
height: 50rpx; |
||||
|
text-align: center; |
||||
|
border-radius: 50rpx; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 店铺基本信息 |
||||
|
.dis-flex { |
||||
|
display: flex; |
||||
|
width: 90%; |
||||
|
height: 240rpx; |
||||
|
margin: 100rpx 10rpx 20rpx 40rpx; |
||||
|
box-sizing: border-box; |
||||
|
background: #fff; |
||||
|
line-height: 1.6; |
||||
|
border-radius: 15rpx; |
||||
|
|
||||
|
.goods-item_left { |
||||
|
display: flex; |
||||
|
width: 220rpx; |
||||
|
background: #fff; |
||||
|
align-items: center; |
||||
|
|
||||
|
.image { |
||||
|
display: block; |
||||
|
width: 200rpx; |
||||
|
height: 200rpx; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.goods-item_right { |
||||
|
margin-top: 20rpx; |
||||
|
|
||||
|
.goods-auth-type { |
||||
|
margin-top: 40rpx; |
||||
|
font-size: 26rpx; |
||||
|
color: #fbb154; |
||||
|
font-weight: bold; |
||||
|
} |
||||
|
.goods-auth-num { |
||||
|
margin-top: 40rpx; |
||||
|
font-size: 24rpx; |
||||
|
color: #d7d7d7; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
// 店铺信息 |
||||
|
.dis-flex-info { |
||||
|
|
||||
|
position: relative; |
||||
|
width: 90%; |
||||
|
height: 300rpx; |
||||
|
background: #fff; |
||||
|
margin: 20rpx 40rpx; |
||||
|
border-radius: 10rpx; |
||||
|
color: #15192d; |
||||
|
|
||||
|
.vertical-line { |
||||
|
position: absolute; |
||||
|
left: 0; |
||||
|
top: 0; |
||||
|
width: 12px; |
||||
|
height: 100%; |
||||
|
border-top-left-radius: 10rpx; |
||||
|
border-bottom-left-radius: 10rpx; |
||||
|
background: linear-gradient(to bottom, #15192d, #15192d 50%); /* 渐变背景色 */ |
||||
|
} |
||||
|
.dis-flex-title { |
||||
|
font-size: 30rpx; |
||||
|
margin-left: 40rpx; |
||||
|
padding-top: 20rpx; |
||||
|
padding-bottom: 10rpx; |
||||
|
} |
||||
|
.dis-flex-line { |
||||
|
border-bottom: 5rpx #15192d solid; |
||||
|
} |
||||
|
.dis-flex-content { |
||||
|
margin: 20rpx 40rpx; |
||||
|
white-space: normal; |
||||
|
text { |
||||
|
display: block; |
||||
|
margin-bottom: 10rpx; |
||||
|
font-size: 26rpx; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 排序 |
||||
|
.order { |
||||
|
display: flex; |
||||
|
padding: 20rpx 10rpx 20rpx; |
||||
|
margin-left: -55rpx; |
||||
|
z-index: 65; |
||||
|
font-weight: bold; |
||||
|
|
||||
|
.tab_text { |
||||
|
display: inline-block; |
||||
|
color: #1b223b; |
||||
|
font-size: 30rpx; |
||||
|
margin-left: 80rpx; |
||||
|
} |
||||
|
|
||||
|
.tab_link { |
||||
|
border-bottom: 5rpx #1b223b solid; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 排序组件 |
||||
|
.store-sort { |
||||
|
position: sticky; |
||||
|
top: var(--window-top); |
||||
|
display: flex; |
||||
|
padding: 20rpx 0; |
||||
|
font-size: 28rpx; |
||||
|
background: #fff; |
||||
|
color: #1b223b; |
||||
|
z-index: 99; |
||||
|
|
||||
|
.sort-item { |
||||
|
flex-basis: 33.3333%; |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
align-items: center; |
||||
|
height: 50rpx; |
||||
|
|
||||
|
&.active { |
||||
|
color: #e49a3d; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.sort-item-price .price-arrow { |
||||
|
margin-left: 20rpx; |
||||
|
font-size: 24rpx; |
||||
|
color: #000; |
||||
|
|
||||
|
.icon { |
||||
|
&.active { |
||||
|
color: #e49a3d; |
||||
|
} |
||||
|
|
||||
|
&.up { |
||||
|
margin-bottom: -16rpx; |
||||
|
} |
||||
|
|
||||
|
&.down { |
||||
|
margin-top: -16rpx; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
// 商品列表 |
||||
|
.goods-list { |
||||
|
padding: 4rpx; |
||||
|
box-sizing: border-box; |
||||
|
} |
||||
|
|
||||
|
// 平铺显示 |
||||
|
|
||||
|
.goods-item { |
||||
|
float: left; |
||||
|
box-sizing: border-box; |
||||
|
padding: 6rpx; |
||||
|
width: 50%; |
||||
|
|
||||
|
.goods-image { |
||||
|
position: relative; |
||||
|
width: 100%; |
||||
|
height: 0; |
||||
|
padding-bottom: 100%; |
||||
|
overflow: hidden; |
||||
|
background: #fff; |
||||
|
|
||||
|
&:after { |
||||
|
content: ''; |
||||
|
display: block; |
||||
|
margin-top: 100%; |
||||
|
} |
||||
|
|
||||
|
.image { |
||||
|
position: absolute; |
||||
|
width: 100%; |
||||
|
height: 100%; |
||||
|
top: 0; |
||||
|
left: 0; |
||||
|
-o-object-fit: cover; |
||||
|
object-fit: cover; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.detail { |
||||
|
padding: 8rpx; |
||||
|
background: #fff; |
||||
|
|
||||
|
.goods-name { |
||||
|
min-height: 68rpx; |
||||
|
line-height: 32rpx; |
||||
|
white-space: normal; |
||||
|
color: #484848; |
||||
|
font-size: 26rpx; |
||||
|
} |
||||
|
|
||||
|
.detail-price { |
||||
|
.goods-price { |
||||
|
font-weight: bold; |
||||
|
margin-right: 8rpx; |
||||
|
} |
||||
|
|
||||
|
.line-price { |
||||
|
text-decoration: line-through; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.goods-sales { |
||||
|
float: right; |
||||
|
color: #484848; |
||||
|
font-size: 20rpx; |
||||
|
margin-top: 10rpx; |
||||
|
} |
||||
|
|
||||
|
.detail-owner{ |
||||
|
padding: 4rpx; |
||||
|
font-size: 22rpx; |
||||
|
color: #999; |
||||
|
margin-left: 10rpx; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</style> |
||||
@ -0,0 +1,34 @@ |
|||||
|
{ |
||||
|
"resultCode": "00000000", |
||||
|
"resultMsg": "SUCCESS", |
||||
|
"data": [ |
||||
|
{ |
||||
|
"consultingId": "762033233176170504", |
||||
|
"consultingName": "信息公开", |
||||
|
"consultingStatus": 0, |
||||
|
"consultingSort": 4, |
||||
|
"consultingCreationTime": "2022-08-30 16:49:06" |
||||
|
}, |
||||
|
{ |
||||
|
"consultingId": "762033263727480878", |
||||
|
"consultingName": "行业资讯", |
||||
|
"consultingStatus": 0, |
||||
|
"consultingSort": 3, |
||||
|
"consultingCreationTime": "2022-08-30 16:49:13" |
||||
|
}, |
||||
|
{ |
||||
|
"consultingId": "762033286561271818", |
||||
|
"consultingName": "最新活动", |
||||
|
"consultingStatus": 0, |
||||
|
"consultingSort": 2, |
||||
|
"consultingCreationTime": "2022-08-30 16:49:19" |
||||
|
}, |
||||
|
{ |
||||
|
"consultingId": "762033310561079327", |
||||
|
"consultingName": "专家观点", |
||||
|
"consultingStatus": 0, |
||||
|
"consultingSort": 1, |
||||
|
"consultingCreationTime": "2022-08-30 16:49:24" |
||||
|
} |
||||
|
] |
||||
|
} |
||||
File diff suppressed because it is too large
Loading…
Reference in new issue