refactor: fixed bug that could not be liked and article link errors
This commit is contained in:
parent
54b9b6bf70
commit
700802d96f
@ -48,7 +48,7 @@ Netlify: [https://douyins.netlify.app/](https://douyins.netlify.app/)
|
|||||||
|
|
||||||
【模仿抖音系列】一:[200行代码实现类似Swiper.js的轮播组件](https://juejin.cn/post/7360512664317018146)
|
【模仿抖音系列】一:[200行代码实现类似Swiper.js的轮播组件](https://juejin.cn/post/7360512664317018146)
|
||||||
【模仿抖音系列】二:[实现抖音 “视频无限滑动“效果](https://juejin.cn/post/7361614921519054883)
|
【模仿抖音系列】二:[实现抖音 “视频无限滑动“效果](https://juejin.cn/post/7361614921519054883)
|
||||||
【模仿抖音系列】三:[Vue 路由使用介绍以及添加转场动画](https://juejin.cn/post/7361614921519054883)
|
【模仿抖音系列】三:[Vue 路由使用介绍以及添加转场动画](https://juejin.cn/post/7362528152777130025)
|
||||||
|
|
||||||
更多文章正在准备中...
|
更多文章正在准备中...
|
||||||
|
|
||||||
|
|||||||
@ -11,6 +11,7 @@
|
|||||||
--color-me: rgb(21, 23, 35);
|
--color-me: rgb(21, 23, 35);
|
||||||
--color-user: rgb(22, 24, 36);
|
--color-user: rgb(22, 24, 36);
|
||||||
--color-message: rgb(21, 21, 21);
|
--color-message: rgb(21, 21, 21);
|
||||||
|
--color-share-bg: rgb(38, 38, 38);
|
||||||
--home-header-height: 44rem;
|
--home-header-height: 44rem;
|
||||||
--footer-height: 56rem;
|
--footer-height: 56rem;
|
||||||
--common-header-height: 50rem;
|
--common-header-height: 50rem;
|
||||||
|
|||||||
@ -134,7 +134,7 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
&.dark2 {
|
&.dark2 {
|
||||||
background: rgb(36, 36, 36);
|
background: rgb(51, 51, 51);
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -15,223 +15,229 @@
|
|||||||
<span>分享给朋友</span>
|
<span>分享给朋友</span>
|
||||||
<dy-back mode="light" img="close" direction="right" @click.stop="closeShare"></dy-back>
|
<dy-back mode="light" img="close" direction="right" @click.stop="closeShare"></dy-back>
|
||||||
</div>
|
</div>
|
||||||
<div class="friends list">
|
<div class="content">
|
||||||
<div
|
<div class="friends list">
|
||||||
class="option"
|
<div
|
||||||
:key="i"
|
class="option"
|
||||||
v-for="(item, i) in friends.all"
|
:key="i"
|
||||||
@click.stop="toggleCall(item)"
|
v-for="(item, i) in store.friends.all"
|
||||||
>
|
@click.stop="toggleCall(item)"
|
||||||
<img
|
>
|
||||||
:style="item.select ? 'opacity: .5;' : ''"
|
<img
|
||||||
class="avatar"
|
:style="item.select ? 'opacity: .5;' : ''"
|
||||||
:src="_checkImgUrl(item.avatar)"
|
class="avatar"
|
||||||
alt=""
|
:src="_checkImgUrl(item.avatar)"
|
||||||
/>
|
alt=""
|
||||||
<span>{{ item.name }}</span>
|
/>
|
||||||
<img
|
<span>{{ item.name }}</span>
|
||||||
v-if="item.select"
|
<img
|
||||||
class="checked"
|
v-if="item.select"
|
||||||
src="../assets/img/icon/components/check/check-red-share.png"
|
class="checked"
|
||||||
/>
|
src="../assets/img/icon/components/check/check-red-share.png"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="option" @click.stop="closeShare($router.push('/message/share-to-friend'))">
|
||||||
|
<dy-back class="more" mode="light" direction="right"></dy-back>
|
||||||
|
<span>更多朋友</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="option" @click.stop="closeShare($router.push('/message/share-to-friend'))">
|
<div class="bottom">
|
||||||
<dy-back class="more" mode="light" direction="right"></dy-back>
|
<div class="share2friend" v-if="store.selectFriends.length">
|
||||||
<span>更多朋友</span>
|
<div class="line"></div>
|
||||||
</div>
|
<div class="comment">
|
||||||
</div>
|
<textarea placeholder="有什么想和好友说的..."></textarea>
|
||||||
<div class="shares list">
|
<img class="poster" src="../assets/img/poster/1.jpg" alt="" />
|
||||||
<template v-if="mode === 'video'">
|
</div>
|
||||||
<div class="option" @click.stop="closeShare($emit('ShareToFriend'))">
|
<div class="btns">
|
||||||
<img class="avatar" src="../assets/img/icon/components/video/torichang.png" alt="" />
|
<dy-button type="dark2" radius="7" v-if="store.selectFriends.length > 1" @click="_no"
|
||||||
<span>转发</span>
|
>建群并发送
|
||||||
|
</dy-button>
|
||||||
|
<dy-button type="primary" radius="7" @click="_no"
|
||||||
|
>{{ store.selectFriends.length > 1 ? '分别发送' : '发送' }}
|
||||||
|
</dy-button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="option" @click.stop="closeShare($emit('ShareToFriend'))">
|
|
||||||
<Icon icon="icon-park-solid:good-two" />
|
|
||||||
<span>推荐给朋友</span>
|
|
||||||
</div>
|
|
||||||
<div class="option" @click.stop="copyLink">
|
|
||||||
<Icon icon="humbleicons:link" />
|
|
||||||
<span>复制链接</span>
|
|
||||||
</div>
|
|
||||||
<div class="option" @click.stop="_no">
|
|
||||||
<img class="small" src="../assets/img/icon/components/video/comeonplay.png" alt="" />
|
|
||||||
<span>合拍</span>
|
|
||||||
</div>
|
|
||||||
<div class="option" @click.stop="_no">
|
|
||||||
<img class="small" src="../assets/img/icon/components/video/dou.webp" alt="" />
|
|
||||||
<span>帮上热门</span>
|
|
||||||
</div>
|
|
||||||
<div class="option" @click.stop="$router.push('/home/report', { mode: this.mode })">
|
|
||||||
<img class="small" src="../assets/img/icon/components/video/warring.png" alt="" />
|
|
||||||
<span>举报</span>
|
|
||||||
</div>
|
|
||||||
<div class="option" @click.stop="closeShare($emit('ShareToFriend'))">
|
|
||||||
<Icon icon="ion:paper-plane" />
|
|
||||||
<span>私信朋友</span>
|
|
||||||
</div>
|
|
||||||
<div class="option" v-if="canDownload" @click.stop="closeShare($emit('download'))">
|
|
||||||
<Icon icon="mingcute:download-fill" />
|
|
||||||
<span>保存本地</span>
|
|
||||||
</div>
|
|
||||||
<div class="option" @click.stop="_no">
|
|
||||||
<!--TODO icon不对 -->
|
|
||||||
<img class="small" src="../assets/img/icon/components/video/feedback.webp" alt="" />
|
|
||||||
<span>建群分享</span>
|
|
||||||
</div>
|
|
||||||
<div class="option" @click.stop="_no">
|
|
||||||
<img class="small" src="../assets/img/icon/components/video/comeonlook.webp" alt="" />
|
|
||||||
<span>一起看视频</span>
|
|
||||||
</div>
|
|
||||||
<div class="option" @click.stop="closeShare($emit('dislike'))">
|
|
||||||
<img class="small" src="../assets/img/icon/components/video/dislike.png" alt="" />
|
|
||||||
<span>不感兴趣</span>
|
|
||||||
</div>
|
|
||||||
<div class="option" @click.stop="closeShare($emit('showDouyinCode'))">
|
|
||||||
<Icon icon="tabler:photo" />
|
|
||||||
<span>生成图片</span>
|
|
||||||
</div>
|
|
||||||
<div class="option" @click.stop="_no">
|
|
||||||
<img class="small" src="../assets/img/icon/components/video/bizhi.webp" alt="" />
|
|
||||||
<span>动态壁纸</span>
|
|
||||||
</div>
|
|
||||||
<div class="option" @click.stop="closeShare($emit('play-feedback'))">
|
|
||||||
<img class="small" src="../assets/img/icon/components/video/feedback.webp" alt="" />
|
|
||||||
<span>播放反馈</span>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<template v-if="mode === 'music'">
|
|
||||||
<div class="option" @click.stop="closeShare($emit('ShareToFriend'))">
|
|
||||||
<img class="small" src="../assets/img/icon/components/video/tofriend.webp" alt="" />
|
|
||||||
<span>私信朋友</span>
|
|
||||||
</div>
|
|
||||||
<div class="option" @click.stop="$router.push('/home/report', { mode: this.mode })">
|
|
||||||
<img class="small" src="../assets/img/icon/components/video/warring.png" alt="" />
|
|
||||||
<span>举报音乐</span>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<template v-if="mode === 'my-music'">
|
|
||||||
<div class="option" @click.stop="_no">
|
|
||||||
<img class="small" src="../assets/img/icon/components/video/torichang.png" alt="" />
|
|
||||||
<span>转发到日常</span>
|
|
||||||
</div>
|
|
||||||
<div class="option" @click.stop="closeShare($emit('ShareToFriend'))">
|
|
||||||
<img class="small" src="../assets/img/icon/components/video/tofriend.webp" alt="" />
|
|
||||||
<span>私信朋友</span>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="share2friend" v-if="selectFriends.length">
|
<div class="shares list" v-else>
|
||||||
<div class="comment">
|
<template v-if="mode === 'video'">
|
||||||
<textarea placeholder="有什么想和好友说的..."></textarea>
|
<div class="option" @click.stop="closeShare($emit('ShareToFriend'))">
|
||||||
<img class="poster" src="../assets/img/poster/1.jpg" alt="" />
|
<img
|
||||||
</div>
|
class="avatar"
|
||||||
<div class="btns">
|
src="../assets/img/icon/components/video/torichang.png"
|
||||||
<dy-button type="dark2" radius="7" v-if="selectFriends.length > 1" @click.stop="_no"
|
alt=""
|
||||||
>建群并发送
|
/>
|
||||||
</dy-button>
|
<span>转发</span>
|
||||||
<dy-button type="primary" radius="7" @click.stop="_no"
|
</div>
|
||||||
>{{ selectFriends.length > 1 ? '分别发送' : '发送' }}
|
<div class="option" @click.stop="closeShare($emit('ShareToFriend'))">
|
||||||
</dy-button>
|
<Icon icon="icon-park-solid:good-two" />
|
||||||
|
<span>推荐给朋友</span>
|
||||||
|
</div>
|
||||||
|
<div class="option" @click.stop="copyLink">
|
||||||
|
<Icon icon="humbleicons:link" />
|
||||||
|
<span>复制链接</span>
|
||||||
|
</div>
|
||||||
|
<div class="option" @click.stop="_no">
|
||||||
|
<img
|
||||||
|
class="small"
|
||||||
|
src="../assets/img/icon/components/video/comeonplay.png"
|
||||||
|
alt=""
|
||||||
|
/>
|
||||||
|
<span>合拍</span>
|
||||||
|
</div>
|
||||||
|
<div class="option" @click.stop="_no">
|
||||||
|
<img class="small" src="../assets/img/icon/components/video/dou.webp" alt="" />
|
||||||
|
<span>帮上热门</span>
|
||||||
|
</div>
|
||||||
|
<div class="option" @click.stop="$router.push('/home/report', { mode: this.mode })">
|
||||||
|
<img class="small" src="../assets/img/icon/components/video/warring.png" alt="" />
|
||||||
|
<span>举报</span>
|
||||||
|
</div>
|
||||||
|
<div class="option" @click.stop="closeShare($emit('ShareToFriend'))">
|
||||||
|
<Icon icon="ion:paper-plane" />
|
||||||
|
<span>私信朋友</span>
|
||||||
|
</div>
|
||||||
|
<div class="option" v-if="canDownload" @click.stop="closeShare($emit('download'))">
|
||||||
|
<Icon icon="mingcute:download-fill" />
|
||||||
|
<span>保存本地</span>
|
||||||
|
</div>
|
||||||
|
<div class="option" @click.stop="_no">
|
||||||
|
<!--TODO icon不对 -->
|
||||||
|
<img class="small" src="../assets/img/icon/components/video/feedback.webp" alt="" />
|
||||||
|
<span>建群分享</span>
|
||||||
|
</div>
|
||||||
|
<div class="option" @click.stop="_no">
|
||||||
|
<img
|
||||||
|
class="small"
|
||||||
|
src="../assets/img/icon/components/video/comeonlook.webp"
|
||||||
|
alt=""
|
||||||
|
/>
|
||||||
|
<span>一起看视频</span>
|
||||||
|
</div>
|
||||||
|
<div class="option" @click.stop="closeShare($emit('dislike'))">
|
||||||
|
<img class="small" src="../assets/img/icon/components/video/dislike.png" alt="" />
|
||||||
|
<span>不感兴趣</span>
|
||||||
|
</div>
|
||||||
|
<div class="option" @click.stop="closeShare($emit('showDouyinCode'))">
|
||||||
|
<Icon icon="tabler:photo" />
|
||||||
|
<span>生成图片</span>
|
||||||
|
</div>
|
||||||
|
<div class="option" @click.stop="_no">
|
||||||
|
<img class="small" src="../assets/img/icon/components/video/bizhi.webp" alt="" />
|
||||||
|
<span>动态壁纸</span>
|
||||||
|
</div>
|
||||||
|
<div class="option" @click.stop="closeShare($emit('play-feedback'))">
|
||||||
|
<img class="small" src="../assets/img/icon/components/video/feedback.webp" alt="" />
|
||||||
|
<span>播放反馈</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<template v-if="mode === 'music'">
|
||||||
|
<div class="option" @click.stop="closeShare($emit('ShareToFriend'))">
|
||||||
|
<img class="small" src="../assets/img/icon/components/video/tofriend.webp" alt="" />
|
||||||
|
<span>私信朋友</span>
|
||||||
|
</div>
|
||||||
|
<div class="option" @click.stop="$router.push('/home/report', { mode: this.mode })">
|
||||||
|
<img class="small" src="../assets/img/icon/components/video/warring.png" alt="" />
|
||||||
|
<span>举报音乐</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<template v-if="mode === 'my-music'">
|
||||||
|
<div class="option" @click.stop="_no">
|
||||||
|
<img class="small" src="../assets/img/icon/components/video/torichang.png" alt="" />
|
||||||
|
<span>转发到日常</span>
|
||||||
|
</div>
|
||||||
|
<div class="option" @click.stop="closeShare($emit('ShareToFriend'))">
|
||||||
|
<img class="small" src="../assets/img/icon/components/video/tofriend.webp" alt="" />
|
||||||
|
<span>私信朋友</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</from-bottom-dialog>
|
</from-bottom-dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script setup>
|
||||||
import { mapState } from 'pinia'
|
|
||||||
import FromBottomDialog from './dialog/FromBottomDialog'
|
import FromBottomDialog from './dialog/FromBottomDialog'
|
||||||
import { useBaseStore } from '@/store/pinia'
|
import { useBaseStore } from '@/store/pinia'
|
||||||
import { _checkImgUrl, _copy, _hideLoading, _no, _notice, _showLoading, _sleep } from '@/utils'
|
import { _checkImgUrl, _copy, _hideLoading, _no, _notice, _showLoading, _sleep } from '@/utils'
|
||||||
|
|
||||||
export default {
|
defineOptions({
|
||||||
name: 'Share',
|
name: 'Share'
|
||||||
components: {
|
})
|
||||||
FromBottomDialog
|
|
||||||
},
|
|
||||||
props: {
|
|
||||||
modelValue: {
|
|
||||||
type: Boolean,
|
|
||||||
default() {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
item: {},
|
|
||||||
videoId: {
|
|
||||||
type: String,
|
|
||||||
default() {
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
},
|
|
||||||
pageId: {
|
|
||||||
type: String,
|
|
||||||
default() {
|
|
||||||
return 'home-index'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
canDownload: {
|
|
||||||
type: Boolean,
|
|
||||||
default() {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
mode: {
|
|
||||||
type: String,
|
|
||||||
default() {
|
|
||||||
return 'video'
|
|
||||||
//music
|
|
||||||
//qrcode
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
...mapState(useBaseStore, ['friends']),
|
|
||||||
selectFriends() {
|
|
||||||
return this.friends.all.filter((v) => v.select)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
_checkImgUrl,
|
|
||||||
_no,
|
|
||||||
async copyLink() {
|
|
||||||
this.closeShare()
|
|
||||||
_showLoading()
|
|
||||||
await _sleep(500)
|
|
||||||
_hideLoading()
|
|
||||||
_copy(this.item.share_info.share_link_desc + this.item.share_info.share_url)
|
|
||||||
//TODO 抖音样式改了
|
|
||||||
_notice('复制成功')
|
|
||||||
},
|
|
||||||
|
|
||||||
toggleCall(item) {
|
const props = defineProps({
|
||||||
item.select = !item.select
|
modelValue: {
|
||||||
},
|
type: Boolean,
|
||||||
closeShare() {
|
default() {
|
||||||
this.friends.all = this.friends.all.map((v) => {
|
return false
|
||||||
v.select = false
|
}
|
||||||
return v
|
},
|
||||||
})
|
item: {},
|
||||||
this.$emit('update:modelValue', false)
|
videoId: {
|
||||||
|
type: String,
|
||||||
|
default() {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
pageId: {
|
||||||
|
type: String,
|
||||||
|
default() {
|
||||||
|
return 'home-index'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
canDownload: {
|
||||||
|
type: Boolean,
|
||||||
|
default() {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mode: {
|
||||||
|
type: String,
|
||||||
|
default() {
|
||||||
|
return 'video'
|
||||||
|
//music
|
||||||
|
//qrcode
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const store = useBaseStore()
|
||||||
|
const emit = defineEmits(['update:item'])
|
||||||
|
|
||||||
|
async function copyLink() {
|
||||||
|
closeShare()
|
||||||
|
_showLoading()
|
||||||
|
await _sleep(500)
|
||||||
|
_hideLoading()
|
||||||
|
_copy(props.item.share_info.share_link_desc + props.item.share_info.share_url)
|
||||||
|
//TODO 抖音样式改了
|
||||||
|
_notice('复制成功')
|
||||||
|
}
|
||||||
|
|
||||||
|
function toggleCall(item) {
|
||||||
|
item.select = !item.select
|
||||||
|
}
|
||||||
|
|
||||||
|
function closeShare() {
|
||||||
|
store.friends.all = store.friends.all.map((v) => {
|
||||||
|
v.select = false
|
||||||
|
return v
|
||||||
|
})
|
||||||
|
emit('update:modelValue', false)
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="less" scoped>
|
<style lang="less" scoped>
|
||||||
@import '../assets/less/index';
|
|
||||||
|
|
||||||
.share {
|
.share {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background: black;
|
background: var(--color-share-bg);
|
||||||
border-radius: 10px 10px 0 0;
|
border-radius: 10px 10px 0 0;
|
||||||
color: white;
|
color: white;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
@space-width: 26rem;
|
@space-width: 26rem;
|
||||||
@avatar-width: 58rem;
|
@avatar-width: 58rem;
|
||||||
@ -255,12 +261,25 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 10rem;
|
||||||
|
|
||||||
|
.bottom {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.list {
|
.list {
|
||||||
overflow-x: scroll;
|
overflow-x: scroll;
|
||||||
display: flex;
|
display: flex;
|
||||||
padding: 0 20rem;
|
padding: 0 20rem;
|
||||||
gap: 22rem;
|
gap: 22rem;
|
||||||
padding-bottom: 50rem;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@c: rgb(51, 51, 51);
|
@c: rgb(51, 51, 51);
|
||||||
@ -323,13 +342,11 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.share2friend {
|
.share2friend {
|
||||||
position: fixed;
|
|
||||||
bottom: 0;
|
|
||||||
padding: 20rem;
|
padding: 20rem;
|
||||||
|
padding-top: 0;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 180rem;
|
height: 100%;
|
||||||
background: black;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
@ -337,9 +354,11 @@ export default {
|
|||||||
.comment {
|
.comment {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
margin-top: 15rem;
|
||||||
|
|
||||||
textarea {
|
textarea {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
font-size: 14rem;
|
||||||
outline: none;
|
outline: none;
|
||||||
border: none;
|
border: none;
|
||||||
background: transparent;
|
background: transparent;
|
||||||
@ -348,8 +367,10 @@ export default {
|
|||||||
|
|
||||||
.poster {
|
.poster {
|
||||||
margin-left: 20rem;
|
margin-left: 20rem;
|
||||||
height: 40rem;
|
height: 60rem;
|
||||||
width: 40rem;
|
width: 60rem;
|
||||||
|
object-fit: cover;
|
||||||
|
border-radius: 4rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -75,10 +75,10 @@ const state = reactive({
|
|||||||
.item-desc {
|
.item-desc {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
|
width: 70%;
|
||||||
|
|
||||||
.content {
|
.content {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
width: 70%;
|
|
||||||
text-align: left;
|
text-align: left;
|
||||||
|
|
||||||
.location-wrapper {
|
.location-wrapper {
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import BaseMusic from '../BaseMusic.vue'
|
import BaseMusic from '../BaseMusic.vue'
|
||||||
import { _formatNumber, _updateItem } from '@/utils'
|
import { _formatNumber, cloneDeep } from '@/utils'
|
||||||
import bus, { EVENT_KEY } from '@/utils/bus'
|
import bus, { EVENT_KEY } from '@/utils/bus'
|
||||||
import { Icon } from '@iconify/vue'
|
import { Icon } from '@iconify/vue'
|
||||||
import { useClick } from '@/utils/hooks/useClick'
|
import { useClick } from '@/utils/hooks/useClick'
|
||||||
@ -12,26 +12,39 @@ const props = defineProps({
|
|||||||
default: () => {
|
default: () => {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
item: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const item = inject<any>('item')
|
const position = inject<any>('position')
|
||||||
|
|
||||||
const emit = defineEmits(['update:item', 'goUserInfo', 'showComments', 'showShare', 'goMusic'])
|
const emit = defineEmits(['update:item', 'goUserInfo', 'showComments', 'showShare', 'goMusic'])
|
||||||
|
|
||||||
|
function _updateItem(props, key, val) {
|
||||||
|
const old = cloneDeep(props.item)
|
||||||
|
old[key] = val
|
||||||
|
emit('update:item', old)
|
||||||
|
bus.emit(EVENT_KEY.UPDATE_ITEM, { position: position.value, item: old })
|
||||||
|
}
|
||||||
|
|
||||||
function loved() {
|
function loved() {
|
||||||
_updateItem(props, 'isLoved', !item.value.isLoved, emit)
|
_updateItem(props, 'isLoved', !props.item.isLoved)
|
||||||
}
|
}
|
||||||
|
|
||||||
function attention(e) {
|
function attention(e) {
|
||||||
e.currentTarget.classList.add('attention')
|
e.currentTarget.classList.add('attention')
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
_updateItem(props, 'isAttention', true, emit)
|
_updateItem(props, 'isAttention', true)
|
||||||
}, 1000)
|
}, 1000)
|
||||||
}
|
}
|
||||||
|
|
||||||
function showComments() {
|
function showComments() {
|
||||||
bus.emit(EVENT_KEY.OPEN_COMMENTS, item.value.aweme_id)
|
bus.emit(EVENT_KEY.OPEN_COMMENTS, props.item.aweme_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
const vClick = useClick()
|
const vClick = useClick()
|
||||||
@ -65,11 +78,13 @@ const vClick = useClick()
|
|||||||
<span>{{ _formatNumber(item.statistics.comment_count) }}</span>
|
<span>{{ _formatNumber(item.statistics.comment_count) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<!--TODO -->
|
<!--TODO -->
|
||||||
<div
|
<div class="message mb2r" v-click="() => _updateItem(props, 'isCollect', !item.isCollect)">
|
||||||
class="message mb2r"
|
<Icon
|
||||||
v-click="() => _updateItem(props, 'isCollect', !item.isCollect, emit)"
|
v-if="item.isCollect"
|
||||||
>
|
icon="ic:round-star"
|
||||||
<Icon v-if="item.isCollect" icon="ic:round-star" class="icon" style="color: yellow" />
|
class="icon"
|
||||||
|
style="color: rgb(252, 179, 3)"
|
||||||
|
/>
|
||||||
<Icon v-else icon="ic:round-star" class="icon" style="color: white" />
|
<Icon v-else icon="ic:round-star" class="icon" style="color: white" />
|
||||||
<span>{{ _formatNumber(item.statistics.comment_count) }}</span>
|
<span>{{ _formatNumber(item.statistics.comment_count) }}</span>
|
||||||
</div>
|
</div>
|
||||||
@ -120,8 +135,8 @@ const vClick = useClick()
|
|||||||
bottom: -5px;
|
bottom: -5px;
|
||||||
background: red;
|
background: red;
|
||||||
//background: black;
|
//background: black;
|
||||||
width: 18px;
|
width: 18rem;
|
||||||
height: 18px;
|
height: 18rem;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@ -129,8 +144,8 @@ const vClick = useClick()
|
|||||||
|
|
||||||
img {
|
img {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: 12px;
|
width: 14rem;
|
||||||
height: 12px;
|
height: 14rem;
|
||||||
transition: all 1s;
|
transition: all 1s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -53,7 +53,11 @@ export const useBaseStore = defineStore('base', {
|
|||||||
friends: resource.users
|
friends: resource.users
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
getters: {},
|
getters: {
|
||||||
|
selectFriends() {
|
||||||
|
return this.friends.all.filter((v) => v.select)
|
||||||
|
}
|
||||||
|
},
|
||||||
actions: {
|
actions: {
|
||||||
async init() {
|
async init() {
|
||||||
const r = await panel()
|
const r = await panel()
|
||||||
|
|||||||
@ -5,18 +5,10 @@ import ConfirmDialog from '../components/dialog/ConfirmDialog.vue'
|
|||||||
import Loading from '../components/Loading.vue'
|
import Loading from '../components/Loading.vue'
|
||||||
import { IMG_URL, IS_DEV, IS_GITEE_PAGES } from '@/config'
|
import { IMG_URL, IS_DEV, IS_GITEE_PAGES } from '@/config'
|
||||||
import NoticeDialog from '../components/dialog/NoticeDialog.vue'
|
import NoticeDialog from '../components/dialog/NoticeDialog.vue'
|
||||||
import bus, { EVENT_KEY } from './bus'
|
|
||||||
import { ArchiveReader, libarchiveWasm } from 'libarchive-wasm'
|
import { ArchiveReader, libarchiveWasm } from 'libarchive-wasm'
|
||||||
import SlideUser from '@/components/slide/SlideUser.vue'
|
import SlideUser from '@/components/slide/SlideUser.vue'
|
||||||
import BaseVideo from '@/components/slide/BaseVideo.vue'
|
import BaseVideo from '@/components/slide/BaseVideo.vue'
|
||||||
|
|
||||||
export function _updateItem(props, key, val, emit) {
|
|
||||||
const old = cloneDeep(props.item)
|
|
||||||
old[key] = val
|
|
||||||
emit('update:item', old)
|
|
||||||
bus.emit(EVENT_KEY.UPDATE_ITEM, { position: props.position, item: old })
|
|
||||||
}
|
|
||||||
|
|
||||||
export function _storageSet(key, value) {
|
export function _storageSet(key, value) {
|
||||||
localStorage.setItem(key, JSON.stringify(value))
|
localStorage.setItem(key, JSON.stringify(value))
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user