206 lines
5.1 KiB
Vue
206 lines
5.1 KiB
Vue
<template>
|
|
<div class="media_btn">
|
|
<a-button shape="circle" @click="showActionDrawer" size="small">
|
|
<template #icon>
|
|
<interaction-outlined/>
|
|
</template>
|
|
</a-button>
|
|
<a-button shape="circle" @click="isActive = !isActive" size="small">
|
|
<template #icon>
|
|
<sync-outlined/>
|
|
</template>
|
|
</a-button>
|
|
<a-button shape="circle" @click="showDrawer" size="small">
|
|
<template #icon>
|
|
<play-circle-outlined/>
|
|
</template>
|
|
</a-button>
|
|
</div>
|
|
<div :class="{ animate_left:is_move }">
|
|
<a-spin :spinning="spinning" wrapperClassName="iframe_video">
|
|
<iframe
|
|
class="iframe_box"
|
|
:src="iframe_src"
|
|
@load="handleIframeLoad" sandbox='allow-scripts allow-same-origin allow-popups' ref="media" frameborder="0"
|
|
allowfullscreen v-bind:class="{ active: isActive }" id="my-iframe"
|
|
:key="refreshKey"></iframe>
|
|
</a-spin>
|
|
</div>
|
|
<a-drawer
|
|
:title="play_address"
|
|
placement="right"
|
|
:closable="false"
|
|
:visible="action_visible"
|
|
:get-container="false"
|
|
:style="{ position: 'absolute' }"
|
|
@close="onClose"
|
|
width="44%"
|
|
:maskStyle="{opacity:0}"
|
|
>
|
|
<a-button type="dashed" @click="handleMenuClick(item.key)" shape="round" size="small" v-for="(item) in action_list"
|
|
:key="item.key" style="margin: 6px">
|
|
<template #icon>
|
|
<tool-outlined/>
|
|
</template>
|
|
{{ item.action }}
|
|
</a-button>
|
|
</a-drawer>
|
|
<a-drawer
|
|
:title="play_address"
|
|
placement="right"
|
|
:closable="false"
|
|
:visible="visible"
|
|
:get-container="false"
|
|
:style="{ position: 'absolute' }"
|
|
@close="onClose"
|
|
width="44%"
|
|
:maskStyle="{opacity:0}"
|
|
>
|
|
<a-list item-layout="horizontal" :data-source="iframe_list">
|
|
<template #renderItem="{ item,index }">
|
|
<a-list-item>
|
|
<a-list-item-meta :description="item.desc">
|
|
<template #title>
|
|
<a href="javascript:void(0);" @click="changeMedia(item.src, index)"
|
|
:class="index === typeSelected ?'active_media':''">{{ item.title }}</a>
|
|
</template>
|
|
<template #avatar>
|
|
<video-camera-add-outlined/>
|
|
</template>
|
|
</a-list-item-meta>
|
|
</a-list-item>
|
|
</template>
|
|
</a-list>
|
|
</a-drawer>
|
|
<div>
|
|
<a-modal v-model:visible="open_visible" title="自定义开分" @ok="openAnyPoint" destroyOnClose="true"
|
|
maskClosable="true" width="300px">
|
|
<a-input-number v-model:value="open_any_point_value" addon-before="+" addon-after="point" :max="5000" :min="0"
|
|
:step="1" :precision="0"></a-input-number>
|
|
</a-modal>
|
|
</div>
|
|
</template>
|
|
<script>
|
|
export default {
|
|
props: {
|
|
iframe_src: String,
|
|
btn_text: String,
|
|
iframe_list: String,
|
|
play_address: String,
|
|
type: String,
|
|
machine_id: String,
|
|
action_list: []
|
|
},
|
|
data() {
|
|
return {
|
|
spinning: true,
|
|
isActive: true,
|
|
refreshKey: 0,
|
|
visible: false,
|
|
typeSelected: 0,
|
|
open_visible: false,
|
|
open_any_point_value: null,
|
|
open_any_point_cmd: '4A',
|
|
is_move: false,
|
|
action_visible: false,
|
|
};
|
|
},
|
|
methods: {
|
|
handleIframeLoad() {
|
|
this.spinning = false;
|
|
},
|
|
showDrawer() {
|
|
this.visible = true;
|
|
this.is_move = true;
|
|
},
|
|
showActionDrawer() {
|
|
this.action_visible = true;
|
|
this.is_move = true;
|
|
},
|
|
onClose() {
|
|
this.visible = false;
|
|
this.action_visible = false;
|
|
this.is_move = false;
|
|
},
|
|
handleMenuClick(cmd) {
|
|
if (cmd === this.open_any_point_cmd) {
|
|
this.open_visible = true;
|
|
} else {
|
|
this.sendCmd(cmd);
|
|
}
|
|
},
|
|
sendCmd(cmd, data = null) {
|
|
this.$request({
|
|
url: 'ex-admin/system/doMachineCmd',
|
|
method: 'post',
|
|
data: {
|
|
'cmd': cmd,
|
|
'data': data,
|
|
'machine_id': this.machine_id,
|
|
},
|
|
}).then(res => {
|
|
if (res.code === 200) {
|
|
this.$message.success('操作成功');
|
|
} else {
|
|
this.$message.error(res.message ? res.message : res.msg);
|
|
}
|
|
}).catch(error => {
|
|
this.$message.error(error.message);
|
|
})
|
|
},
|
|
openAnyPoint() {
|
|
this.sendCmd(this.open_any_point_cmd, this.open_any_point_value)
|
|
this.open_visible = false;
|
|
},
|
|
changeMedia(src, index) {
|
|
this.$props.iframe_src = src;
|
|
this.isActive = false;
|
|
this.refreshKey++
|
|
this.visible = false;
|
|
this.open_visible = false;
|
|
this.typeSelected = index;
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
<style>
|
|
.active {
|
|
transform: rotate(270deg)
|
|
}
|
|
|
|
.active_media {
|
|
color: rgb(24, 144, 255) !important;
|
|
}
|
|
|
|
.iframe_video {
|
|
width: 527px !important;
|
|
height: 536px !important;
|
|
overflow: hidden !important;
|
|
display: flex !important;
|
|
margin: 0 auto !important;
|
|
}
|
|
|
|
.animate_left {
|
|
animation: left-move 1s ease-in-out;
|
|
animation-fill-mode: forwards
|
|
}
|
|
|
|
@keyframes left-move {
|
|
to {
|
|
transform: translateX(-131px);
|
|
}
|
|
}
|
|
|
|
.iframe_box {
|
|
width: 527px;
|
|
height: 357px;
|
|
margin-top: 93px;
|
|
display: flex;
|
|
}
|
|
|
|
.media_btn {
|
|
margin-top: -63px;
|
|
position: fixed;
|
|
margin-left: 382px;
|
|
}
|
|
</style> |