123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- <template>
- <!-- 菜单下载/预览/删除 -->
- <div class="menuPopover" :class="menuStyle" @mouseover="mouseover" @mouseout="mouseout">
- <el-popover placement="top-start" title="" trigger="hover" popper-class="popperClass"
- >
- <div class="menuList" >
- <div v-for="item in menuList" :key="item.value" @click="menuBtn(item)" class="menuListLi" v-show="item.show">
- <i :class="item.icon"></i><span>{{item.label}}</span>
- </div>
- </div>
- <div slot="reference" class="menu-button">
- <div class="line-box">
- <div class="line"></div>
- <div class="line"></div>
- <div class="line"></div>
- </div>
- </div>
- </el-popover>
- </div>
- </template>
- <script>
- import { File } from './mixins'
- export default {
- props: {
- data: {
- type: Object,
- default: () => {
- return {}
- }
- },
- deleted: {
- type: Boolean,
- default:true
- }
- },
- mixins: [File],
- data() {
- return {
- menuStyle: 'menu-box',
- active: false,
- menuList: [
- {value:'downLoad',label:'下载',icon:'el-icon-download',show:true},
- {value:'preview',label:'预览',icon:'el-icon-view',show:true},
- {value:'delFile',label:'删除',icon:'el-icon-delete',show:this.deleted},
- ]
- }
- },
- watch: {
- deleted(val) {
- this.menuList.forEach(item => {
- if (item.value == 'delFile') {
- item.show = val
- return false
- }
- })
- }
- },
- methods: {
- menuBtn(item) {
- var data =this.data
- switch (item.value) {
- case 'downLoad':
- this.downLoad(data)
- break;
- case 'preview':
- this.preview(data)
- break;
- case 'delFile':
- this.delFile(data)
- break;
-
- default:
- break;
- }
- },
- mouseover() {
- this.menuStyle = 'active'
- this.active = true
- },
- mouseout() {
- this.menuStyle = ''
- this.active = false
- },
- }
- }
- </script>
- <style >
- .el-popover.popperClass {
- min-width: 80px ;
- border: 1px solid #ACA9A9;
- }
- .el-popper[x-placement^=top] .popper__arrow::after{
- border-top-color: #7f7f7f;
- bottom: 0px;
- }
- </style>
- <style lang="scss" scoped>
- .menuList :first-child{
- padding-top: 0px;
- }
- .menuList :hover{
- color: #5c67ff;
- cursor: pointer;
- }
- .menuListLi{
- border-bottom: 1px solid #e6e6e6;
- padding: 10px 0 3px 0;
- }
- .menuListLi :first-child{
- padding-right: 5px;
- }
- .menu-button {
- width: 25px;
- height: 25px;
- background-color: white;
- border-radius: 50%;
- // box-shadow: 0 0 0 4px rgba(92,103,255,0.3);
- color: #fff;
- display: flex;
- justify-content: center;
- align-items: center;
- position: relative;
- cursor: pointer;
- transition: 0.2s ease-in;
- }
- .menu-button:hover {
- background-color: white;
- z-index: 999;
- // box-shadow: 0 0 0 8px rgba(92,103,255,0.3);
- }
- .menu-button .line-box {
- width: 10px;
- height: 10px;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- cursor: pointer;
- transition: transform 0.3s ease-out;
- }
- .menu-button .line {
- background-color: black;
- width: 100%;
- height: 2px;
- border-radius: 2px;
- }
- .menu-button .line:first-child {
- width: 50%;
- transform-origin: right;
- transition: transform 0.3s ease-in-out;
- }
- .menu-button .line:last-child {
- width: 50%;
- align-self: flex-end;
- transform-origin: left;
- transition: transform 0.3s ease-in-out;
- }
- // .menu-list1 {
- // padding: 6px;
- // transition: 0.3s ease;
- // transition: delay 0.3s;
- // }
- // .menu-list1 li {
- // display: flex;
- // justify-content: center;
- // align-items: center;
- // padding: 10px;
- // color: #343470;
- // cursor: pointer;
- // position: relative;
- // opacity: 1;
- // transform: translateX(-10px);
- // transition: 0.2s ease-in;
- // }
- // .menu-list1 li:hover {
- // color: #5c67ff;
- // }
- .menu-list1 li::before {
- content: '';
- width: calc(100% - 24px);
- height: 1px;
- background-color: rgba(92, 103, 255, 0.1);
- position: absolute;
- bottom: 0;
- left: 12px;
- }
- .menu-list1 li:last-child::before {
- display: none;
- }
- // .menu-list1 .fa {
- // font-size: 18px;
- // width: 18px;
- // height: 18px;
- // display: flex;
- // justify-content: center;
- // align-items: center;
- // }
- // .menu-list1 span {
- // font-size: 14px;
- // margin-left: 8px;
- // }
- .active {
- position: relative;
- }
- .active .line-box {
- transform: rotate(-45deg);
- }
- .active .line-box .line:first-child {
- transform: rotate(-90deg) translateX(1px);
- }
- .active .line-box .line:last-child {
- transform: rotate(-90deg) translateX(-1px);
- }
- .active .menu-list {
- margin: 0;
- opacity: 1;
- transform: scale(1);
- }
- .active .menu-list li {
- animation: fade-in-item 0.4s linear forwards;
- }
- .active .menu-list li:nth-child(1) {
- animation-delay: 0.1s;
- }
- .active .menu-list li:nth-child(2) {
- animation-delay: 0.2s;
- }
- .active .menu-list li:nth-child(3) {
- animation-delay: 0.3s;
- }
- @keyframes fade-in-item {
- 100% {
- transform: translateX(0);
- opacity: 1;
- }
- }</style>
|