<template> <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'"> <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"> <template v-for="item in riposteoptions" :key="item"> <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> </template> </div> </div> </el-popover> </template> <script setup> let props = defineProps({ type: Boolean, }) let state = ref(false) let riposteoptions = inject("riposteoptions") let selectEomjiPop = inject("selectEomjiPop") let jointriposte = inject("jointriposte") const emit = defineEmits(["update:respondShowState"]) const catState = value => { state.value = value if (props.type == "bottom") { emit("update:respondShowState", value) } } const addPopper = ref(null) const selectEomji = key => { selectEomjiPop(key) addPopper.value.hide() } </script> <style lang="less" scoped> .respond-add { width: 30px; height: 30px; background-color: var(--main-color); // background: rgba(114, 219, 134, 1); 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; // cursor: pointer; .respond-item-key { cursor: pointer; font-family: "emojifont"; 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; } } } } } } </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>