|
|
|
@ -5,27 +5,34 @@ |
|
|
|
|
</view> |
|
|
|
|
<view class="box"> |
|
|
|
|
<view class="tab-list"> |
|
|
|
|
<view v-for="(item, index) in tabList" :key="index" class="tab-item" :class="{ 'active': activeTab === item }" @click="activeTab = item">{{ item }}</view> |
|
|
|
|
<view v-for="(item, index) in tabList" :key="index" class="tab-item" |
|
|
|
|
:class="{ 'active': activeTab === item }" @click="activeTab = item">{{ item }}</view> |
|
|
|
|
</view> |
|
|
|
|
<view class="list"> |
|
|
|
|
<view v-for="(item, index) in dynamicList" :key="index" class="dynamic-item" :style="{ 'visibility': !item.contH ? 'hidden' : 'visible'}"> |
|
|
|
|
<view v-for="(item, index) in dynamicList" :key="index" class="dynamic-item" |
|
|
|
|
:style="{ 'visibility': !item.contH ? 'hidden' : 'visible'}"> |
|
|
|
|
<view class="user"> |
|
|
|
|
<image v-if="item.avatar_url && item.avatar_url[0]" :src="item.avatar_url[0].external_url" mode="aspectFill"></image> |
|
|
|
|
<image v-if="item.avatar_url && item.avatar_url[0]" :src="item.avatar_url[0].external_url" |
|
|
|
|
mode="aspectFill"></image> |
|
|
|
|
<image v-else src="/static/touxiang.png" mode="aspectFill"></image> |
|
|
|
|
<view class="user-info"> |
|
|
|
|
<view class="name">{{ item.real_name }}</view> |
|
|
|
|
<view class="time">{{ item.update_time }}</view> |
|
|
|
|
</view> |
|
|
|
|
</view> |
|
|
|
|
<view class="cont" :class="[`cont${index}`, { 'close': item.contH > 120 && !showFullCont.includes(index)}]"> |
|
|
|
|
<view class="cont" |
|
|
|
|
:class="[`cont${index}`, { 'close': item.contH > 120 && !showFullCont.includes(index)}]"> |
|
|
|
|
{{ item.content }} |
|
|
|
|
</view> |
|
|
|
|
<view v-if="item.contH > 120" class="show-more" @click="toggleFullCont(index)">{{ showFullCont.includes(index) ? '收起' : '全文' }}</view> |
|
|
|
|
<view v-if="item.contH > 120" class="show-more" @click="toggleFullCont(index)"> |
|
|
|
|
{{ showFullCont.includes(index) ? '收起' : '全文' }}</view> |
|
|
|
|
<view v-if="item.imgs && item.imgs.length > 0" class="pic-list"> |
|
|
|
|
<image v-for="(pic, k) in item.imgs" :key="k" :src="pic.external_url" mode="aspectFill" @click="previewImages(k, item.imgs)"></image> |
|
|
|
|
<image v-for="(pic, k) in item.imgs" :key="k" :src="pic.external_url" mode="aspectFill" |
|
|
|
|
@click="previewImages(k, item.imgs)"></image> |
|
|
|
|
</view> |
|
|
|
|
<view v-if="item.files && item.files.length > 0" class="file-list"> |
|
|
|
|
<view v-for="(file, index) in item.files" :key="index" class="file-box" @click="previewFile(file.external_url)"> |
|
|
|
|
<view v-for="(file, index) in item.files" :key="index" class="file-box" |
|
|
|
|
@click="previewFile(file.external_url)"> |
|
|
|
|
<image src="/static/xls.jpeg" mode="aspectFill"></image> |
|
|
|
|
<text>{{ solveFileName(file.file_name) }}</text> |
|
|
|
|
</view> |
|
|
|
@ -51,7 +58,8 @@ |
|
|
|
|
<image src="/static/trash.png" mode="aspectFill"></image> |
|
|
|
|
<view>删除文案</view> |
|
|
|
|
</view> |
|
|
|
|
<view class="btn" v-if="item.imgs && item.imgs.length > 0" @click="downloadMultipleImages(item.imgs)"> |
|
|
|
|
<view class="btn" v-if="item.imgs && item.imgs.length > 0" |
|
|
|
|
@click="downloadMultipleImages(item.imgs)"> |
|
|
|
|
<image src="/static/download.png" mode="aspectFill"></image> |
|
|
|
|
<view>下载图片</view> |
|
|
|
|
</view> |
|
|
|
@ -68,20 +76,15 @@ |
|
|
|
|
<image mode="aspectFill" src="@/static/empty.png" alt="暂无动态" /> |
|
|
|
|
<view>暂无动态</view> |
|
|
|
|
</view> |
|
|
|
|
<view |
|
|
|
|
v-if="userInfo.user_type == 40" |
|
|
|
|
id="publish" |
|
|
|
|
class="publish" |
|
|
|
|
<view v-if="userInfo.user_type == 40" id="publish" class="publish" |
|
|
|
|
:style="{'left': left === 0 ? '626rpx' : left + 'px', 'top': top === 0 ? 'calc(100% - 300rpx)' : top + 'px'}" |
|
|
|
|
@touchmove.stop.prevent="touchmove" |
|
|
|
|
@touchend="touchend" |
|
|
|
|
@click="publish" |
|
|
|
|
:class="{transition: !isMove }" |
|
|
|
|
> |
|
|
|
|
@touchmove.stop.prevent="touchmove" @touchend="touchend" @click="publish" |
|
|
|
|
:class="{transition: !isMove }"> |
|
|
|
|
<image src="/static/publish.png" mode="aspectFill"></image> |
|
|
|
|
<text>发布</text> |
|
|
|
|
</view> |
|
|
|
|
</view><addShuiyin /> |
|
|
|
|
</view> |
|
|
|
|
<addShuiyin /> |
|
|
|
|
</view> |
|
|
|
|
</template> |
|
|
|
|
|
|
|
|
@ -93,8 +96,7 @@ |
|
|
|
|
import * as UserApi from '@/api/user'; |
|
|
|
|
|
|
|
|
|
export default { |
|
|
|
|
components: { |
|
|
|
|
}, |
|
|
|
|
components: {}, |
|
|
|
|
data() { |
|
|
|
|
return { |
|
|
|
|
tabList: ['推荐', '精选', '晒单', '日常', '文章'], |
|
|
|
@ -130,6 +132,25 @@ |
|
|
|
|
this.getDynamicList(); |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
/** |
|
|
|
|
* 分享当前页面 |
|
|
|
|
*/ |
|
|
|
|
onShareAppMessage() { |
|
|
|
|
return { |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 分享到朋友圈 |
|
|
|
|
* 本接口为 Beta 版本,暂只在 Android 平台支持,详见分享到朋友圈 (Beta) |
|
|
|
|
* https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share-timeline.html |
|
|
|
|
*/ |
|
|
|
|
onShareTimeline() { |
|
|
|
|
return { |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
onLoad() { |
|
|
|
|
uni.setNavigationBarColor({ |
|
|
|
|
frontColor: '#000000', |
|
|
|
@ -251,27 +272,27 @@ |
|
|
|
|
data: cont |
|
|
|
|
}); |
|
|
|
|
}, |
|
|
|
|
downloadSingleImage(url) { |
|
|
|
|
return new Promise((resolve, reject) => { |
|
|
|
|
uni.downloadFile({ |
|
|
|
|
url: url, |
|
|
|
|
success: (res) => { |
|
|
|
|
if (res.statusCode === 200) { |
|
|
|
|
resolve(res.tempFilePath) |
|
|
|
|
} else { |
|
|
|
|
reject(new Error('下载失败')) |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
fail: (err) => { |
|
|
|
|
reject(new Error('下载失败')) |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
}) |
|
|
|
|
downloadSingleImage(url) { |
|
|
|
|
return new Promise((resolve, reject) => { |
|
|
|
|
uni.downloadFile({ |
|
|
|
|
url: url, |
|
|
|
|
success: (res) => { |
|
|
|
|
if (res.statusCode === 200) { |
|
|
|
|
resolve(res.tempFilePath) |
|
|
|
|
} else { |
|
|
|
|
reject(new Error('下载失败')) |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
downloadMultipleImages(urls) { |
|
|
|
|
let tasks = [] |
|
|
|
|
urls.forEach((url, k) => { |
|
|
|
|
tasks.push(this.downloadSingleImage(url.external_url).then(e => { |
|
|
|
|
fail: (err) => { |
|
|
|
|
reject(new Error('下载失败')) |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
}) |
|
|
|
|
}, |
|
|
|
|
downloadMultipleImages(urls) { |
|
|
|
|
let tasks = [] |
|
|
|
|
urls.forEach((url, k) => { |
|
|
|
|
tasks.push(this.downloadSingleImage(url.external_url).then(e => { |
|
|
|
|
uni.saveImageToPhotosAlbum({ |
|
|
|
|
filePath: e, |
|
|
|
|
}); |
|
|
|
@ -282,32 +303,32 @@ |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
})); |
|
|
|
|
}) |
|
|
|
|
return Promise.all(tasks) |
|
|
|
|
}) |
|
|
|
|
return Promise.all(tasks) |
|
|
|
|
}, |
|
|
|
|
previewFile(url) { |
|
|
|
|
uni.downloadFile({ |
|
|
|
|
url, |
|
|
|
|
success: (res) => { |
|
|
|
|
if (res.statusCode === 200) { |
|
|
|
|
url, |
|
|
|
|
success: (res) => { |
|
|
|
|
if (res.statusCode === 200) { |
|
|
|
|
this.isPreview = true; |
|
|
|
|
uni.openDocument({ |
|
|
|
|
filePath: res.tempFilePath, |
|
|
|
|
}); |
|
|
|
|
} else { |
|
|
|
|
uni.showToast({ |
|
|
|
|
} else { |
|
|
|
|
uni.showToast({ |
|
|
|
|
icon: 'error', |
|
|
|
|
title: '下载失败!' |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
fail: (err) => { |
|
|
|
|
uni.showToast({ |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
fail: (err) => { |
|
|
|
|
uni.showToast({ |
|
|
|
|
icon: 'error', |
|
|
|
|
title: '下载失败!' |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
}, |
|
|
|
|
solveFileName(name) { |
|
|
|
|
if (name.indexOf('.xlsx')) { |
|
|
|
@ -346,8 +367,7 @@ |
|
|
|
|
|
|
|
|
|
if (this.isShow) { |
|
|
|
|
animation.rotate(135).step(); |
|
|
|
|
} |
|
|
|
|
else{ |
|
|
|
|
} else { |
|
|
|
|
animation.rotate(0).step(); |
|
|
|
|
} |
|
|
|
|
this.animationData = animation.export(); |
|
|
|
@ -456,6 +476,7 @@ |
|
|
|
|
.container { |
|
|
|
|
background: #F7F8FA; |
|
|
|
|
padding-top: 292rpx; |
|
|
|
|
|
|
|
|
|
.head { |
|
|
|
|
height: 450rpx; |
|
|
|
|
width: 100%; |
|
|
|
@ -463,6 +484,7 @@ |
|
|
|
|
top: -88rpx; |
|
|
|
|
background: linear-gradient(0deg, #F7F8FA, #E0EFFD); |
|
|
|
|
z-index: 0; |
|
|
|
|
|
|
|
|
|
>image { |
|
|
|
|
position: absolute; |
|
|
|
|
top: 138rpx; |
|
|
|
@ -472,14 +494,17 @@ |
|
|
|
|
height: 221rpx; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.box { |
|
|
|
|
position: relative; |
|
|
|
|
width: 100%; |
|
|
|
|
// top: 292rpx; |
|
|
|
|
padding: 24rpx; |
|
|
|
|
|
|
|
|
|
.tab-list { |
|
|
|
|
display: flex; |
|
|
|
|
justify-content: space-between; |
|
|
|
|
|
|
|
|
|
.tab-item { |
|
|
|
|
width: 130rpx; |
|
|
|
|
height: 80rpx; |
|
|
|
@ -490,6 +515,7 @@ |
|
|
|
|
color: #999999; |
|
|
|
|
line-height: 80rpx; |
|
|
|
|
text-align: center; |
|
|
|
|
|
|
|
|
|
&.active { |
|
|
|
|
box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(32, 39, 76, 0.1); |
|
|
|
|
opacity: 1; |
|
|
|
@ -497,24 +523,30 @@ |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.list { |
|
|
|
|
margin-top: 30rpx; |
|
|
|
|
|
|
|
|
|
.dynamic-item { |
|
|
|
|
width: 100%; |
|
|
|
|
background: #FFFFFF; |
|
|
|
|
border-radius: 20rpx; |
|
|
|
|
padding: 30rpx; |
|
|
|
|
margin-bottom: 20rpx; |
|
|
|
|
|
|
|
|
|
&:last-child { |
|
|
|
|
margin-bottom: 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.user { |
|
|
|
|
display: flex; |
|
|
|
|
|
|
|
|
|
>image { |
|
|
|
|
width: 80rpx; |
|
|
|
|
height: 80rpx; |
|
|
|
|
margin-right: 24rpx; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.user-info { |
|
|
|
|
.name { |
|
|
|
|
font-size: 30rpx; |
|
|
|
@ -522,6 +554,7 @@ |
|
|
|
|
line-height: 30rpx; |
|
|
|
|
margin-bottom: 26rpx; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.time { |
|
|
|
|
font-size: 24rpx; |
|
|
|
|
color: #999999; |
|
|
|
@ -529,6 +562,7 @@ |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.cont { |
|
|
|
|
margin-top: 30rpx; |
|
|
|
|
font-size: 28rpx; |
|
|
|
@ -537,6 +571,7 @@ |
|
|
|
|
color: #222222; |
|
|
|
|
word-break: break-word; |
|
|
|
|
white-space: pre-line; |
|
|
|
|
|
|
|
|
|
&.close { |
|
|
|
|
max-height: 240rpx; |
|
|
|
|
overflow: hidden; |
|
|
|
@ -546,29 +581,35 @@ |
|
|
|
|
-webkit-box-orient: vertical; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.show-more { |
|
|
|
|
font-size: 28rpx; |
|
|
|
|
line-height: 40rpx; |
|
|
|
|
color: #F34A40; |
|
|
|
|
text-align: right; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.pic-list { |
|
|
|
|
margin-top: 24rpx; |
|
|
|
|
|
|
|
|
|
>image { |
|
|
|
|
width: 210rpx; |
|
|
|
|
height: 210rpx; |
|
|
|
|
margin-right: 6rpx; |
|
|
|
|
margin-bottom: 6rpx; |
|
|
|
|
border-radius: 10rpx; |
|
|
|
|
|
|
|
|
|
&:nth-child(3n) { |
|
|
|
|
margin-right: 0; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.file-list { |
|
|
|
|
display: block; |
|
|
|
|
padding: 30rpx 0; |
|
|
|
|
height: fit-content; |
|
|
|
|
|
|
|
|
|
.file-box { |
|
|
|
|
border-bottom: 1px solid #ddd; |
|
|
|
|
display: flex; |
|
|
|
@ -577,15 +618,18 @@ |
|
|
|
|
padding: 10rpx 20rpx; |
|
|
|
|
height: 80rpx; |
|
|
|
|
margin-bottom: 20rpx; |
|
|
|
|
|
|
|
|
|
&:last-child { |
|
|
|
|
border-bottom: none; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
>image { |
|
|
|
|
width: 60rpx; |
|
|
|
|
height: 60rpx; |
|
|
|
|
margin: 0 10rpx 0 0; |
|
|
|
|
flex-shrink: 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
>text { |
|
|
|
|
width: calc(100% - 70rpx); |
|
|
|
|
overflow: hidden; |
|
|
|
@ -594,36 +638,44 @@ |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.goods { |
|
|
|
|
background: #f5f5f5; |
|
|
|
|
padding: 20rpx; |
|
|
|
|
margin-top: 24rpx; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.goods-box { |
|
|
|
|
display: flex; |
|
|
|
|
background: #fff; |
|
|
|
|
padding: 20rpx 0; |
|
|
|
|
|
|
|
|
|
>image { |
|
|
|
|
width: 100rpx; |
|
|
|
|
height: 100rpx; |
|
|
|
|
margin-right: 20rpx; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.goods-info { |
|
|
|
|
width: calc(100% - 120rpx); |
|
|
|
|
display: flex; |
|
|
|
|
flex-direction: column; |
|
|
|
|
justify-content: space-between; |
|
|
|
|
|
|
|
|
|
.name { |
|
|
|
|
overflow: hidden; |
|
|
|
|
text-overflow: ellipsis; |
|
|
|
|
white-space: nowrap; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.price { |
|
|
|
|
display: flex; |
|
|
|
|
|
|
|
|
|
>text { |
|
|
|
|
&:first-child { |
|
|
|
|
color: #F34A40; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
&:last-child { |
|
|
|
|
height: 40rpx; |
|
|
|
|
line-height: 40rpx; |
|
|
|
@ -640,10 +692,12 @@ |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.btns { |
|
|
|
|
margin-top: 20rpx; |
|
|
|
|
display: flex; |
|
|
|
|
justify-content: flex-end; |
|
|
|
|
|
|
|
|
|
.btn { |
|
|
|
|
display: flex; |
|
|
|
|
flex-direction: column; |
|
|
|
@ -652,14 +706,17 @@ |
|
|
|
|
line-height: 24rpx; |
|
|
|
|
color: #999999; |
|
|
|
|
margin-left: 40rpx; |
|
|
|
|
|
|
|
|
|
image { |
|
|
|
|
width: 40rpx; |
|
|
|
|
height: 40rpx; |
|
|
|
|
margin-bottom: 10rpx; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
::v-deep { |
|
|
|
|
.delete { |
|
|
|
|
margin-bottom: 10rpx; |
|
|
|
|
|
|
|
|
|
.uni-icons { |
|
|
|
|
font-size: 40rpx !important; |
|
|
|
|
font-weight: bold; |
|
|
|
@ -671,6 +728,7 @@ |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.finished, |
|
|
|
|
.loading { |
|
|
|
|
font-size: 28rpx; |
|
|
|
@ -678,6 +736,7 @@ |
|
|
|
|
text-align: center; |
|
|
|
|
color: #bbb; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.empty { |
|
|
|
|
margin-top: 100rpx; |
|
|
|
|
font-size: 28rpx; |
|
|
|
@ -692,6 +751,7 @@ |
|
|
|
|
margin: 0 auto 20rpx; |
|
|
|
|
pointer-events: none; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.publish { |
|
|
|
|
position: fixed; |
|
|
|
|
left: 626rpx; |
|
|
|
@ -707,6 +767,7 @@ |
|
|
|
|
flex-direction: column; |
|
|
|
|
align-items: center; |
|
|
|
|
justify-content: center; |
|
|
|
|
|
|
|
|
|
>image { |
|
|
|
|
width: 35rpx; |
|
|
|
|
height: 28rpx; |
|
|
|
|