mirror of https://github.com/rocboss/paopao-ce
parent
47a9d9e8b4
commit
e58e069755
@ -0,0 +1,133 @@
|
||||
<template>
|
||||
<div class="tag-item">
|
||||
<n-thing>
|
||||
<template #header>
|
||||
<n-tag
|
||||
type="success"
|
||||
size="large"
|
||||
round
|
||||
:key="tag.id"
|
||||
>
|
||||
<router-link
|
||||
class="hash-link"
|
||||
:to="{
|
||||
name: 'home',
|
||||
query: {
|
||||
q: tag.tag,
|
||||
t: 'tag',
|
||||
},
|
||||
}"
|
||||
>
|
||||
#{{ tag.tag }}
|
||||
</router-link>
|
||||
<span v-if="!showAction" class="tag-quote">({{ tag.quote_num }})</span>
|
||||
<span v-if="showAction" class="tag-quote tag-follow">({{ tag.quote_num }})</span>
|
||||
<template #avatar>
|
||||
<n-avatar :src="tag.user.avatar" />
|
||||
</template>
|
||||
</n-tag>
|
||||
</template>
|
||||
<template #header-extra>
|
||||
<div
|
||||
v-if="showAction"
|
||||
class="options">
|
||||
<n-dropdown
|
||||
placement="bottom-end"
|
||||
trigger="click"
|
||||
size="small"
|
||||
:options="tagOptions"
|
||||
@select="handleTagAction"
|
||||
>
|
||||
<n-button type="success" quaternary circle block>
|
||||
<template #icon>
|
||||
<n-icon>
|
||||
<more-vert-outlined />
|
||||
</n-icon>
|
||||
</template>
|
||||
</n-button>
|
||||
</n-dropdown>
|
||||
</div>
|
||||
</template>
|
||||
</n-thing>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, onMounted, computed } from 'vue';
|
||||
import { MoreVertOutlined } from '@vicons/material';
|
||||
import type { DropdownOption } from 'naive-ui';
|
||||
|
||||
const hasFollowing= ref(false);
|
||||
const props = withDefaults(
|
||||
defineProps<{
|
||||
tag: Item.TagProps;
|
||||
showAction: boolean;
|
||||
}>(),
|
||||
{}
|
||||
);
|
||||
|
||||
const tagOptions = computed(() => {
|
||||
let options: DropdownOption[] = [];
|
||||
if (props.tag.is_following == 0) {
|
||||
options.push({
|
||||
label: '关注',
|
||||
key: 'follow',
|
||||
});
|
||||
} else {
|
||||
options.push({
|
||||
label: '取消关注',
|
||||
key: 'unfollow',
|
||||
});
|
||||
}
|
||||
return options;
|
||||
});
|
||||
|
||||
const handleTagAction = (
|
||||
item: 'follow' | 'unfollow'
|
||||
) => {
|
||||
switch (item) {
|
||||
case 'follow':
|
||||
window.$message.success(`关注话题 - ${props.tag.tag}`);
|
||||
break;
|
||||
case 'unfollow':
|
||||
window.$message.success(`取消关注话题 - ${props.tag.tag}`);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
};
|
||||
const execFollowAction = () => {
|
||||
// TODO
|
||||
window.$message.success('修改follow/unfllow');
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
hasFollowing.value = false
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
.tag-item {
|
||||
.tag-quote {
|
||||
margin-left: 12px;
|
||||
font-size: 14px;
|
||||
opacity: 0.75;
|
||||
}
|
||||
.tag-follow {
|
||||
margin-right: 22px;
|
||||
}
|
||||
.options {
|
||||
margin-left: -32px;
|
||||
margin-bottom: 4px;
|
||||
opacity: 0.55;
|
||||
}
|
||||
.n-thing {
|
||||
.n-thing-header {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
.n-thing-avatar-header-wrapper {
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
Loading…
Reference in new issue