mall_client/zyhs3_uniapp/pages/interaction/user.vue

1128 lines
30 KiB
Vue
Raw Permalink Normal View History

2026-03-13 07:50:35 +00:00
<template>
<view class="page" v-if="isDone">
<swiper style="height: 100vh;" @change="onchange">
<swiper-item style="height: 100%;" v-if="videoHas">
<uni-push :screenHeight="screenHeight" :playStatus="playStatus" :list="videoObject"></uni-push>
</swiper-item>
<swiper-item style="height: 100%;">
<scroll-view
scroll-y
@scroll="onScroll"
@scrolltolower="scrolltolower"
class="swiper"
:style="{height: screenHeight+'px'}">
<swiper class="swiperImgs" :indicator-dots="true" v-if="swiperList.length > 0">
<swiper-item v-for="(item, i) in swiperList" :key="i">
<image :src="item" mode="aspectFill" class="swiperImg" @click="previewImg($event, swiperList, i)"></image>
</swiper-item>
</swiper>
<image v-else :src="userDetail.headPortrait" mode="aspectFill" class="swiperImg" @click="previewImg($event, [userDetail.headPortrait], 0)"></image>
<view class="wrap">
<view class="wrap-box">
<view class="wrap-box-avatar">
<image :src="filterImg(userDetail.headPortrait, 1)" mode="aspectFill" class="wrap-box-avatar-img" @click="previewImg($event, [userDetail.headPortrait], 0)"></image>
</view>
<view class="wrap-box-info">
<text class="wrap-box-info-name">{{userDetail.nickname}}</text>
<view class="wrap-box-info-basic">
<view class="six" :class="{'woman':userDetail.gender===3}">
<image :src="staticUrl + 'video/man.png'" mode="" class="six-icon" v-if="userDetail.gender === 2"></image>
<image :src="staticUrl + 'video/woman.png'" mode="" class="six-icon" v-if="userDetail.gender === 3"></image>
<text class="six-name">{{userDetail.age}}</text>
</view>
<text class="constellation">{{userDetail.constellation}}</text>
<text class="mark" v-if="userDetail.distributorIsOpen">配送员</text>
</view>
<view class="addr">
<view class="flex flex-align-center flex-row" style="width: 400rpx;" v-if="addressName">
<image :src="staticUrl + 'user/addr.png'" mode="" class="addr-icon"></image>
<text class="addr-name">{{addressName || "未设置地区"}}</text>
</view>
<view v-else></view>
<text class="addr-btn" :class="{'addr-btn-active':followStatus}" v-if="localUserId !== id" @click="guanZhuByUser">{{followStatus?'取关':'关注'}}</text>
</view>
</view>
</view>
<view class="get" @click="jumpToFollow()">
<view class="get-item">
<text class="get-item-number">{{(videoData.dianZan || 0) + (videoData.commentDianZan || 0)}}</text>
<text class="get-item-txt">获赞·</text>
</view>
<view class="get-item">
<text class="get-item-number">{{videoData.fenSi}}</text>
<text class="get-item-txt">粉丝·</text>
</view>
<view class="get-item">
<text class="get-item-number">{{videoData.guanZhu}}</text>
<text class="get-item-txt">关注·</text>
</view>
<view class="get-item">
<text class="get-item-number">{{videoData.xiHuan}}</text>
<text class="get-item-txt">喜欢</text>
</view>
</view>
<view class="about">
<block>
<text class="about-title">个性签名</text>
<view class="about-textarea">
<text class="about-textarea-txt">{{userDetail.personalSignature||"这个家伙很懒,什么都没留下"}}</text>
</view>
</block>
<view class="about-cell" v-if="userDetail.alcoholConsumption">
<text class="about-title">我的酒量</text>
<view class="about-list">
<text class="about-list-tip">{{userDetail.alcoholConsumption}}</text>
</view>
</view>
<view class="about-cell" v-if="userDetail.labelPastOccupation">
<text class="about-title">过往职业</text>
<view class="about-list">
<text class="about-list-tip" v-for="(item, i) in labelPastOccupationList" :key="i">{{item}}</text>
</view>
</view>
<view class="about-cell" v-if="userDetail.labelHobby">
<text class="about-title">兴趣爱好</text>
<view class="about-list">
<text class="about-list-tip" v-for="(item, i) in labelHobbyList" :key="i">{{item}}</text>
</view>
</view>
</view>
<view class="cell">
<view class="cell-item" v-for="(item, i) in cellTabs" :key="i" @tap="cellIndex = i">
<text class="cell-item-name-action" v-if="cellIndex === i">{{item.name}} {{item.total?`(${item.total})`:''}}</text>
<text class="cell-item-name" v-else>{{item.name}} {{item.total?`(${item.total})`:''}}</text>
<text class="cell-item-xian-action" v-if="cellIndex === i"></text>
<text class="cell-item-xian" v-else></text>
</view>
</view>
<block v-if="cellIndex === 0">
<view class="dynamic">
<view class="dynamic-item" v-for="(item, i) in dynamicList" :key="i" @tap="goDetails(item, i)">
<view class="dynamic-item-top">
<view><image :src="filterImg(userDetail.headPortrait, 1)" mode="aspectFill" class="dynamic-item-top-img"></image></view>
<view style="flex-grow: 1;">
<view class="dynamic-item-top-column">
<text class="dynamic-item-top-column-name" style="margin-right: 10rpx;">{{userDetail.nickname}}</text>
</view>
<view class="dynamic-item-top-column" style="justify-content: flex-start;">
<view class="six" style="margin-right: 20rpx;" :class="{'woman':userDetail.gender===3}">
<image :src="staticUrl + 'video/man.png'" mode="" class="six-icon" v-if="userDetail.gender === 2"></image>
<image :src="staticUrl + 'video/woman.png'" mode="" class="six-icon" v-if="userDetail.gender === 3"></image>
<text class="six-name">{{userDetail.age||0}}</text>
</view>
<text class="mark" v-if="userDetail.distributorIsOpen">配送员</text>
</view>
</view>
</view>
<text class="dynamic-item-con">{{item.comment}}</text>
<view class="dynamic-item-con-img" v-if="item.images.length > 1">
<image :src="filterImg(url, 2)" mode="aspectFill" class="dynamic-item-con-img-s" v-for="(url, index) in item.images" :key="index" @tap.stop="previewImg($event, item.images, index)"></image>
</view>
<view class="dynamic-item-con-img" v-if="item.images.length === 1">
<image :src="filterImg(item.images[0], 4)" mode="aspectFill" class="dynamic-item-con-img-one" @tap.stop="previewImg($event, item.images, index)"></image>
</view>
<view class="dynamic-item-option" v-if="item.status !== 1">
<text class="dynamic-item-option-item-name" v-if="item.status === 0">当前视频正在审核中</text>
<view class="dynamic-item-option-item" v-if="item.status === 2">
<text class="dynamic-item-option-item-name" style="color: #CA0400;">动态违规原因{{item.violationInformation}}</text>
</view>
</view>
<view class="dynamic-item-option">
<view class="dynamic-item-option-item">
<image :src="staticUrl + 'video/comment.png'" mode="" class="dynamic-item-option-item-icon"></image>
<text class="dynamic-item-option-item-name">{{item.commentCount || 0}}条评论</text>
</view>
<view class="dynamic-item-option-item" @tap.stop="onLike($event, item, i)">
<image :src="staticUrl + 'video/love_grey.png'" mode="" class="dynamic-item-option-item-icon" v-if="!item.isLike"></image>
<image :src="staticUrl + 'video/love_red.png'" mode="" class="dynamic-item-option-item-icon" v-else></image>
<text class="dynamic-item-option-item-name">{{item.likeCount || 0}}点赞</text>
</view>
</view>
</view>
</view>
<uni-load-more :status="loadingType"></uni-load-more>
</block>
<!-- #ifdef APP-PLUS -->
<block v-if="cellIndex === 1">
<view class="grid">
<view class="grid-item" v-for="(item, i) in videoList" :key="i" @tap="showVideo(item)">
<image :src="item.image" mode="aspectFill" class="grid-item-img"></image>
<view class="grid-item-bom">
<image :src="staticUrl + 'video/video_love.png'" mode="" class="grid-item-bom-icon"></image>
<text class="grid-item-bom-txt">{{item.likes}}</text>
</view>
<image :src="staticUrl + 'video/del.png'" class="grid-item-del" v-if="localUserId === id" @tap.stop="delVideo($event, item)"></image>
<view class="grid-item-status" v-if="item.status !== 1">
<text class="grid-item-status-txt" v-if="item.status === 0">审核中</text>
<view class="grid-item-status-box" v-if="item.status === 2" @tap.stop="showErrMsg($event, item.violationInformation)">
<text class="grid-item-status-txt" style="color: #CA0400; margin-right: 10rpx;">视频违规</text>
<icon type="info" color="#CA0400" size="14" />
</view>
</view>
</view>
</view>
<uni-load-more :status="videoLoading"></uni-load-more>
</block>
<!-- #endif -->
<block v-if="cellIndex === cellTabs.length - 1">
<view class="product">
<block v-for="(item, i) in productList" :key="i">
<view class="goods" v-if="item.status === 1" @tap="jumpToGoodsDetail(item)">
<image :src="filterImg(item.goodsInfo.mainImage, 3)" mode="aspectFill" class="goods-img" lazy-load></image>
<view class="goods-wrap">
<view class="goods-wrap-title">
<text class="goods-wrap-title-name">{{item.goodsInfo.titleName}}</text>
</view>
<view class="goods-wrap-tip">
<text class="goods-wrap-tip-left">库存{{item.stock}}</text>
<text class="goods-wrap-tip-right">已售{{item.sales}}</text>
</view>
<view class="goods-wrap-price">
<text class="goods-wrap-price-txt">¥{{item.goodsInfo.wholesalePrice}}</text>
</view>
</view>
</view>
</block>
</view>
<uni-load-more :status="productLoading"></uni-load-more>
</block>
<view style="height: 100rpx;"></view>
</view>
</scroll-view>
</swiper-item>
</swiper>
<uni-header
:statusBarHeight="statusBarHeight" :current="curIndex"
:videoHas="videoHas" :headerScroll="headerScroll"
:isShowMore="!(localUserId === id)" @onMore="onMore"></uni-header>
<uni-footer @change="footerChange" v-if="localUserId !== id && !fromImChat"></uni-footer>
<!-- #ifdef APP-PLUS -->
<uni-popup ref="popup" type="bottom">
<view class="popup">
<view class="popup-item" @click="goChatIm(true, 'video')">
<text class="popup-item-name">视频通话</text>
</view>
<view class="popup-item" @click="goChatIm(true, 'voice')">
<text class="popup-item-name">语音通话</text>
</view>
<view class="popup-item popup-cancel" @click="closePopup()">
<text class="popup-item-name">取消</text>
</view>
</view>
</uni-popup>
<!-- #endif -->
</view>
</template>
<script>
import { mapState } from "vuex"
import url from "@/common/http/url.js"
import { sendRequest } from "@/common/http/api.js"
import publics from "@/common/utils/public.js"
var system = uni.getSystemInfoSync();
import uniHeader from './components/header';
import uniFooter from './components/footer';
import uniPush from './components/push';
import uniLoadMore from "@/components/uni-load-more/uni-load-more.vue"
import uniPopup from "@/components/uni-popup/uni-popup.vue"
export default {
components: {
uniHeader,
uniFooter,
uniPush,
uniLoadMore,
uniPopup,
},
data() {
return {
staticUrl: this.$staticUrl,
isDone: false,
statusBarHeight: system.statusBarHeight,
screenHeight: system.screenHeight,
swiperList: [],
videoObject: {},
curIndex: 0,
addressName: "",
playStatus: true,
userDetail: {},
videoData: {},
loadingType: "loading",
dynamicList: [],
cellTabs: [
{name:"TA的动态", total:0},
// #ifdef APP-PLUS
{name:"TA的视频", total:0}
// #endif
// {name:"配送员库存", total:8}
],
cellIndex: 0,
localUserId: "",
id: "",
headerScroll: false,
labelHobbyList: [],
labelPastOccupationList: [],
videoHas: false,
followStatus: false, // 关注
pageSize: 0,
videoList: [],
videoLoading: "nomore",
videoTotal: 0,
userFlag: false,
isOnline: true, // 对方是否在线,默认在线
productList: [],
productLoading: "nomore",
fromImChat: false ,// 是否从聊天页面进入到当前页面
isBack: false, // 是否已拉黑用户
}
},
computed:{
...mapState(["userInfo", "interactionOnlineStatus"])
},
async onLoad(opt) {
uni.showLoading({
mask:true,
title: "数据加载ing..."
})
if (opt.fromImChat) {
this.fromImChat = opt.fromImChat
}
if (opt.userId) { // 用户imAccount
this.id = opt.userId
} else {
this.id = this.userInfo.imAccount
}
if (opt.id) { // 用户id
let r = await sendRequest("get", url.user.getImAccountById, {id: opt.id})
this.id = r.data
}
this.init()
this.cellIndex = opt.current ? parseInt(opt.current) : 0
},
methods: {
refresh(){
this.dynamicList = []
this.pageSize = 0
this.videoList = []
this.productList = []
this.init()
},
async init(){
this.localUserId = this.userInfo.imAccount
if (this.localUserId === this.id) {
this.userDetail = this.userInfo
} else {
let res = await sendRequest("get", url.user.getUserInfoById, {toImAccount: this.id})
if (!res.data) {
this.$navigateBack()
return
}
this.userDetail = res.data
// 是否已拉黑该用户
let blockInfo = await sendRequest("get", url.user.isBackUser, {toImAccount: this.id})
this.isBack = blockInfo.data
}
if (this.userDetail.labelHobby) {
this.labelHobbyList = this.userDetail.labelHobby.split("-")
}
if (this.userDetail.labelPastOccupation) {
this.labelPastOccupationList = this.userDetail.labelPastOccupation.split("-")
}
this.addressName = publics.getAddressByThreeCode(this.userDetail.adcode)
let userResources = this.userDetail.userResources
if (userResources && userResources.length > 0) {
this.swiperList = []
userResources.map(v =>{
if (v.type === 1) {
this.swiperList.push(v.ossUrl)
}
if (v.type === 2 && v.status === 1) {
this.videoObject = v
this.videoHas = true
}
})
}
this.isDone = true
uni.hideLoading()
this.getList()
// #ifdef APP-PLUS
this.getVideoInit()
// #endif
if (this.userDetail.distributorIsOpen){
this.cellTabs.push({name:"配送员库存", total:0})
this.getProductList()
}
},
filterImg(img, type){
return publics.filterImgUrl(img, type)
},
scrolltolower(){
if (this.cellIndex === 0) {
this.getList()
} else if (this.cellIndex === 1) {
// #ifdef APP-PLUS
this.getVideoList()
// #endif
// #ifndef APP-PLUS
if (this.userDetail.distributorIsOpen){
this.getProductList()
}
// #endif
} else {
if (this.userDetail.distributorIsOpen){
this.getProductList()
}
}
},
async getList(){
let params = {
userId: this.userDetail.id,
pageNum: this.dynamicList.length
}
let res = await sendRequest('get', url.interaction.getUserDynamickList, params);
let list = res.data
if (list&&list.length>0) {
list.map(v => {
if (v.images && typeof v.images === "string") {
v.images = v.images.split(",")
}
})
this.dynamicList = this.dynamicList.concat(list)
this.cellTabs[0].total = this.dynamicList.length
if(list.length>8){
this.loadingType = "more";
}else{
this.loadingType = "nomore";
}
} else{
this.loadingType = "nomore";
}
},
getVideoInit(){
sendRequest('get', url.interaction.userVideoInit, {userId:this.userDetail.id}).then(res =>{
this.videoData = res.data
this.videoTotal = res.data.zuoPin
this.cellTabs[1].total = res.data.zuoPin
this.userFlag = res.data.userFlag
this.followStatus = res.data.likeItsByUserId
this.getVideoList()
})
},
getVideoList(){
if (this.videoList.length === this.videoTotal) return
let params = {
userId: this.userDetail.id,
type: 0,
pageSize: this.pageSize
}
sendRequest('get', url.interaction.userVideoType, params).then(res =>{
this.videoList = [...this.videoList, ...res.data]
if (this.videoList.length < parseInt(this.videoTotal)) {
this.pageSize++
this.videoLoading = "more"
} else {
this.videoLoading = "nomore"
}
})
},
getProductList(type) {
let params = {
toImAccount: this.userDetail.imAccount,
pageNum: this.productList.length
};
sendRequest('GET', url.agent.getStockList, params).then(res =>{
this.cellTabs[this.cellTabs.length - 1].total = res.data.stockCount
let list = res.data.stockList
this.productList = this.productList.concat(list)
this.productLoading = list.length < 12 ? 'nomore' : 'more'
})
},
//浏览视频
showVideo(row){
uni.navigateTo({
url: "/pages/video/indexByUser?pages=user&id="+row.id
})
},
// 删除视频
delVideo(e, item){
e.stopPropagation();
let _this = this
uni.showModal({
title: "删除视频",
content: "是否确认删除该视频",
success(res) {
if (res.confirm) {
sendRequest("POST", url.interaction.delVideo, {videoId: item.id}).then(res => {
uni.showToast({
title: res.data,
icon: "none"
})
_this.pageSize = 0
_this.videoList = []
_this.getVideoInit()
})
}
}
})
},
showErrMsg(e, msg){
e.stopPropagation();
if (!msg) return
uni.showModal({
content: msg,
showCancel: false
})
},
// 0-关注/1-取关
guanZhuByUser(){
publics.setGuanZhuDatasJiLu(this.userDetail.id);
let type = this.followStatus ? 1 : 0
sendRequest("POST", url.interaction.followByUserId, {
userId: this.userDetail.id,
type: type
}).then(res =>{
this.followStatus = type ? 0 : 1
if (type) {
this.videoData.fenSi--
} else {
this.videoData.fenSi++
}
})
},
onMore(){
let _this = this
let itemList = ["举报", "拉黑"]
if (this.isBack) {
itemList = ["举报", "移除黑名单"]
}
uni.showActionSheet({
itemList: itemList,
success: function (res) {
if (res.tapIndex === 0) {
uni.navigateTo({
url: "/pages/report/index?type=3&configType=2&id="+_this.userInfo.id
})
} else {
let params = {
toImAccount: _this.id
}
let msg = "拉黑该用户后,在附近、配送员、动态、视频中将不会出现该用户以及该用户发布的任何内容,是否要拉黑?"
let title = "拉黑"
let path = url.user.addBackUser
if (_this.isBack) {
msg = "是否把该用户移除黑名单?"
title = "移除黑名单"
path = url.user.delBackUser
}
uni.showModal({
title: title,
content: msg,
success(r) {
if (r.confirm) {
sendRequest("POST", path, params).then(doc => {
_this.isBack = !_this.isBack
uni.showToast({
title: doc.data,
icon: "none"
})
itemList[1] = [_this.isBack?"移除黑名单":"拉黑"]
})
}
}
})
}
}
})
},
previewImg(e, imgs, index){
e.stopPropagation();
let _this = this
uni.previewImage({
urls: imgs,
current: imgs[index]
});
},
// 点赞
onLike(e, item, index){
e.stopPropagation();
let type = item.isLike ? 1 : 0
sendRequest('post', url.interaction.likeByComment, {type:type, commentId: item.id}).then(res => {
this.dynamicList[index].isLike = !type
if (!type) {
this.dynamicList[index].likeCount += 1
} else {
this.dynamicList[index].likeCount -= 1
}
this.$forceUpdate()
})
},
goDetails(item, i){
uni.navigateTo({
url: "details?pages=user&itemIndex="+i+"&id="+item.id
})
},
onScroll(e){
if (e.detail.scrollTop > 130) {
this.headerScroll = true
} else {
this.headerScroll = false
}
},
onchange: function(e) {
this.curIndex = e.detail.current;
this.playStatus = this.curIndex === 0 ? true : false;
if (this.current === 0) this.headerScroll = false
},
footerChange(index){
if (index === 1) {
this.goChatIm(false)
} else {
this.$refs.popup.open()
}
},
goChatIm(sendVideo, callType){
this.playStatus = false
let type = this.userDetail.distributorIsOpen ? 2 : 1
let url = "im-chat?type="+type+"&&id="+this.userDetail.imAccount
if (sendVideo) {
url = url + "&&sendVideo=true&&callType="+callType
}
setTimeout(()=>{
uni.navigateTo({
url: url
})
if (sendVideo) this.closePopup()
}, 300)
},
closePopup(){
this.$refs.popup.close()
},
jumpToFollow(){
let data = {
nickname: this.userDetail.nickname,
id: this.userDetail.id
}
uni.navigateTo({
url: "/pages/video/followAndLike?data="+JSON.stringify(data)
})
},
jumpToGoodsDetail(item){
uni.navigateTo({
url: '/pages/home/details?id='+item.goodsId
})
}
}
}
</script>
<style scoped>
.page {
/* position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0; */
background-color: #000000;
}
.woman{
background-color: #ff4d94 !important;
}
.six{
background-color: #1995fc;
border-radius: 20rpx;
padding: 2rpx 10rpx;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
}
.six-icon{
width: 20rpx;
height: 20rpx;
margin-right: 6rpx;
}
.six-name{
font-size: 24rpx;
color: #FFFFFF;
}
.mark{
font-size: 24rpx;
background-image: linear-gradient(to bottom, #F8D247, #865afd);
border-radius: 6rpx;
color: white;
padding: 4rpx 10rpx;
display: inline-block;
border-radius: 20rpx;
}
.swiper{
width: 750rpx;
background-color: #FFFFFF;
/* position: relative; */
}
.swiperImgs{
width: 750rpx;
height: 600rpx;
margin-bottom: 10rpx;
}
.swiperImg{
width: 750rpx;
height: 600rpx;
}
.wrap{
margin: 30rpx 20rpx 0;
}
.wrap-box{
display: flex;
flex-direction: row;
}
.wrap-box-avatar{
position: relative;
}
.wrap-box-avatar-img{
border-style: solid;
border-width: 4rpx;
border-color: #FFFFFF;
width: 140rpx;
height: 140rpx;
/* margin-top: -50rpx; */
margin-right: 20rpx;
border-radius: 70rpx;
}
.wrap-box-avatar-online{
width: 80rpx;
position: absolute;
bottom: 16rpx;
left: 30rpx;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
border-radius: 20rpx;
background-color: rgba(0,0,0,0.5);
padding-top: 4rpx;
padding-bottom: 4rpx;
}
.wrap-box-avatar-online-yuan{
margin-right: 6rpx;
width: 10rpx;
height: 10rpx;
}
.wrap-box-avatar-online-txt{
font-size: 20rpx;
color: white;
}
.wrap-box-info{
width: 550rpx;
}
.wrap-box-info-name{
font-size: 34rpx;
overflow: hidden;
text-overflow:ellipsis;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
margin-bottom: 10rpx;
}
.wrap-box-info-basic{
display: flex;
flex-direction: row;
align-items: center;
}
.constellation{
margin: 0 10rpx;
background-color: #4864F8;
color: white;
border-radius: 20rpx;
padding: 0 20rpx;
line-height: 34rpx;
font-size: 24rpx;
}
.addr{
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
margin-top: 10rpx;
height: 70rpx;
}
.addr-icon{
width: 40rpx;
height: 40rpx;
}
.addr-name{
font-size: 28rpx;
color: #999999;
flex: 1;
}
.addr-btn{
color: white;
background-image: linear-gradient(to bottom, #F8D247, #865afd);
font-size: 26rpx;
padding: 10rpx 30rpx;
border-radius: 10rpx;
}
.addr-btn-active{
color: #b2b3b5 !important;
background-image: linear-gradient(to bottom, #e9e7ea, #e9e7ea) !important;
}
.get{
display: flex;
flex-direction: row;
margin-top: 30rpx;
}
.get-item{
display: flex;
flex-direction: row;
align-items: center;
margin-right: 10rpx;
}
.get-item-number{
margin-right: 6rpx;
font-size: 30rpx;
color: #555;
}
.get-item-txt{
font-size: 30rpx;
color: #555;
}
.cell{
margin-top: 60rpx;
padding-bottom: 40rpx;
padding-top: 80rpx;
display: flex;
flex-direction: row;
align-items: center;
border-top-color: #eceaed;
border-top-width: 2rpx;
border-top-style: solid;
}
.cell-item{
display: flex;
align-items: center;
justify-content: center;
margin-right: 20rpx;
flex-direction: column;
}
.cell-item-name{
font-size: 32rpx;
color: #666;
}
.cell-item-xian{
width: 30rpx;
height: 6rpx;
border-radius: 10rpx;
}
.cell-item-name-action{
font-size: 40rpx;
color: #000;
font-weight: bold;
}
.cell-item-xian-action{
width: 30rpx;
height: 6rpx;
border-radius: 10rpx;
background-color: #6b5aac;
}
.about{
margin-top: 20rpx;
}
.about-cell{
display: flex;
flex-direction: row;
justify-content: space-between;
}
.about-title{
margin-top: 20rpx;
display: block;
font-size: 30rpx;
}
.about-textarea{
width: 710rpx;
background-color: #f1eff2;
margin-top: 10rpx;
border-radius: 16rpx;
display: flex;
flex-wrap: wrap;
}
.about-textarea-txt{
padding: 10rpx;
font-size: 26rpx;
color: #666;
}
.about-list{
width: 550rpx;
display: flex;
flex-direction: row;
align-items: center;
flex-wrap: wrap;
justify-content: flex-end;
}
.about-list-tip{
border-radius: 50rpx;
font-size: 24rpx;
background-color: rgba(56,24,149, .3);
color: #F8D247;
margin-right: 10rpx;
padding: 8rpx 16rpx;
margin-top: 10rpx;
}
.dynamic{
width: 710rpx;
padding: 0 20rpx;
/* margin-top: 50rpx; */
}
.dynamic-item{
border-bottom-color: #eee;
border-bottom-width: 2rpx;
border-bottom-style: solid;
padding-bottom: 50rpx;
margin-bottom: 50rpx;
}
.dynamic-item-top{
display: flex;
align-items: center;
flex-direction: row;
}
.dynamic-item-top-img{
width: 120rpx;
height: 120rpx;
margin-right: 20rpx;
border-radius: 60rpx;
}
.dynamic-item-top-column{
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
margin-bottom: 10rpx;
}
.dynamic-item-top-column-name{
color: #666;
font-size: 30rpx;
width: 550rpx;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
}
.dynamic-item-con{
margin: 20rpx 0;
font-size: 30rpx;
display: block;
}
.dynamic-item-con-img{
display: flex;
flex-direction: row;
align-items: center;
margin-bottom: 20rpx;
flex-wrap: wrap;
}
.dynamic-item-con-img-s{
margin-right: 6rpx;
width: 214rpx;
height: 214rpx;
margin-bottom: 6rpx;
border-radius: 10rpx;
}
.dynamic-item-con-img-one{
width: 400rpx;
height: 400rpx;
border-radius: 10rpx;
}
.dynamic-item-option{
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
margin-top: 10rpx;
}
.dynamic-item-option-item{
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
}
.dynamic-item-option-item-icon{
width: 40rpx;
height: 40rpx;
margin-right: 10rpx;
}
.dynamic-item-option-item-name{
font-size: 24rpx;
color: #999999;
}
.grid{
display: flex;
flex-direction: row;
flex-wrap: wrap;
width: 710rpx;
}
.grid-item{
margin-right: 6rpx;
margin-left: 6rpx;
margin-bottom: 12rpx;
width: 223rpx;
height: 320rpx;
position: relative;
background-color: #000000;
}
.grid-item-img{
width: 223rpx;
height: 320rpx;
display: block;
}
.grid-item-bom{
position: absolute;
left: 10rpx;
bottom: 10rpx;
display: flex;
flex-direction: row;
align-items: center;
}
.grid-item-bom-icon{
width: 50rpx;
height: 50rpx;
margin-right: 10rpx;
}
.grid-item-bom-txt{
color: white;
font-weight: bold;
font-size: 32rpx;
}
.grid-item-del{
width: 50rpx;
height: 50rpx;
position: absolute;
right: 6rpx;
bottom: 10rpx;
}
.grid-item-status{
position: absolute;
left: 0;
right: 0;
top: 0;
background-color: rgba(0,0,0,0.3);
height: 50rpx;
line-height: 50rpx;
text-align: center;
}
.grid-item-status-txt{
text-align: center;
font-size: 24rpx;
color: #FFFFFF;
}
.grid-item-status-box{
display: flex;
align-items: center;
justify-content: center;
height: 50rpx;
}
.product{
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-between;
width: 710rpx;
}
.goods{
width: 350rpx;
background-color: #FFFFFF;
border-radius: 10rpx;
overflow: hidden;
margin-bottom: 20rpx;
box-shadow: 0 0 20rpx rgba(0,0,0,0.1);
}
.goods-img{
width: 340rpx;
max-height: 350rpx;
display: block;
will-change: transform;
border-top-left-radius: 10rpx;
border-top-right-radius: 10rpx;
}
.goods-wrap{
margin: 10rpx 20rpx 20rpx;
}
.goods-wrap-title{
display: flex;
/* align-items: center; */
flex-direction: row;
}
.goods-wrap-title-name{
width: 280rpx;
display: inline-block;
text-overflow: ellipsis;
lines: 2;
font-size: 28rpx;
color: #333333;
}
.goods-wrap-title-mark{
background-image: linear-gradient(to bottom, #F8D247, #865afd);
font-size: 24rpx;
padding-left: 6rpx;
padding-right: 6rpx;
border-radius: 8rpx;
margin-right: 10rpx;
margin-top: 8rpx;
color: white;
}
.goods-wrap-tip{
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
margin-top: 10rpx;
margin-bottom: 10rpx;
}
.goods-wrap-tip-left{
font-size: 26rpx;
color: #fa2d43;
}
.goods-wrap-tip-right{
font-size: 28rpx;
color: #666;
}
.goods-wrap-price{
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between
}
.goods-wrap-price-txt{
font-weight: bold;
color: #F8D247;
}
.popup{
background-color: white;
border-top-left-radius: 20rpx;
border-top-right-radius: 20rpx;
}
.popup-item{
height: 110rpx;
display: flex;
align-items: center;
justify-content: center;
border-bottom-color: #EEEEEE;
border-bottom-width: 2rpx;
}
.popup-item-name{
font-size: 30rpx;
}
.popup-item-desc{
color: #999999;
font-size: 24rpx;
}
.popup-cancel{
border-top-color: #EEEEEE;
border-top-width: 10rpx;
}
</style>