PC-vote/components/RespondAdd.vue

147 lines
3.9 KiB
Vue
Raw Permalink Normal View History

2024-07-10 18:52:39 +08:00
<template>
2024-07-17 12:25:33 +08:00
<el-popover ref="addPopper" :width="470" trigger="click" popper-class="add-popper" :teleported="false" :offset="10" :show-arrow="false" @show="catState(true)" @hide="catState(false)" v-model:visible="state" :placement="type == 'bottom' ? 'top' : 'bottom'">
2024-07-10 18:52:39 +08:00
<template #reference>
<div class="respond-add flexcenter" :class="{ 'angle': state }">
<img class="respond-add-icon" src="@/assets/img/plus-sign.svg" />
</div>
</template>
<div class="respond-list-box">
<div class="respond-list-title">选择你的回应</div>
<div class="respond-list">
2024-07-17 12:25:33 +08:00
<template v-for="item in riposteoptions" :key="item">
2024-08-12 11:03:32 +08:00
<div class="respond-item flexcenter" v-for="(item, key) in item.data" :key="key">
<div class="respond-item-key" v-html="jointriposte(key)" @click="selectEomji(key)"></div>
</div>
2024-07-17 12:25:33 +08:00
</template>
2024-07-10 18:52:39 +08:00
</div>
</div>
</el-popover>
</template>
<script setup>
let props = defineProps({
type: Boolean,
})
let state = ref(false)
2024-07-17 12:25:33 +08:00
let riposteoptions = inject("riposteoptions")
let selectEomjiPop = inject("selectEomjiPop")
let jointriposte = inject("jointriposte")
const emit = defineEmits(["update:respondShowState"])
2024-07-10 18:52:39 +08:00
const catState = value => {
state.value = value
if (props.type == "bottom") {
2024-07-17 12:25:33 +08:00
emit("update:respondShowState", value)
2024-07-10 18:52:39 +08:00
}
}
2024-07-17 12:25:33 +08:00
const addPopper = ref(null)
const selectEomji = key => {
selectEomjiPop(key)
addPopper.value.hide()
}
2024-07-10 18:52:39 +08:00
</script>
<style lang="less" scoped>
.respond-add {
width: 30px;
height: 30px;
2024-07-17 12:25:33 +08:00
background-color: var(--main-color);
// background: rgba(114, 219, 134, 1);
2024-07-10 18:52:39 +08:00
border-radius: 50%;
cursor: pointer;
position: relative;
&.angle {
&::after {
content: "";
background: #f6f6f6;
border: 1px solid #e4e7ed;
border-bottom-color: transparent !important;
border-right-color: transparent !important;
border-top-left-radius: 2px;
width: 10px;
height: 10px;
position: absolute;
bottom: -17px;
left: 50%;
transform: translateX(-50%) rotate(45deg);
z-index: 3000;
}
}
.respond-add-icon {
width: 14px;
height: 14px;
}
}
.respond-list-box {
width: 470px;
.respond-list-title {
font-size: 14px;
line-height: 22px;
color: #333333;
padding-top: 16px;
padding-left: 20px;
padding-bottom: 25px;
}
.respond-list {
display: flex;
flex-wrap: wrap;
display: grid;
grid-template-columns: repeat(10, 1fr);
.respond-item {
font-size: 20px;
font-family: "emojifont";
text-align: center;
margin-bottom: 20px;
2024-08-12 11:03:32 +08:00
// cursor: pointer;
.respond-item-key {
cursor: pointer;
2024-08-12 11:13:31 +08:00
font-family: "emojifont";
2024-08-12 11:38:27 +08:00
position: relative;
z-index: 1;
&:hover {
&::after {
content: "";
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
display: block;
width: 35px;
height: 35px;
background-color: #eee;
border-radius: 4px;
z-index: -1;
}
}
2024-08-12 11:03:32 +08:00
}
2024-07-10 18:52:39 +08:00
}
}
}
</style>
<style lang="less">
.el-popover.el-popper.add-popper {
padding: 0;
background: #f6f6f6;
border: 1px solid #ebebeb;
border-radius: 10px;
box-shadow: none;
left: 0 !important;
}
.el-popper.add-popper.is-light .el-popper__arrow::before {
background: #f6f6f6;
}
</style>