Files
cashier_desktop/src/components/leftMenu.vue
2025-04-03 16:28:31 +08:00

213 lines
5.4 KiB
Vue

<template>
<div class="left_menu_wrap">
<div class="top_item_wra">
<div class="item first" :class="{ online: socketStore.online }" @click="connectWsHandle">
<el-icon class="icon">
<Monitor />
</el-icon>
<el-text :type="socketStore.online ? 'success' : 'danger'">
{{ socketStore.online ? '在线' : '离线' }}
</el-text>
</div>
<router-link class="item" :class="{ active: route.path == item.path }" v-for="item in store.menus"
:key="item.path" :to="item.path">
<el-icon class="icon">
<component :is="item.icon" />
</el-icon>
<el-text class="text">{{ item.label }}</el-text>
</router-link>
<div class="item" @click="workRef.show()">
<el-icon class="icon">
<component is="SwitchButton" />
</el-icon>
<el-text class="text">交班</el-text>
</div>
</div>
<div class="item" @click="moreref.show()">
<el-icon class="icon">
<Operation />
</el-icon>
<el-text class="text">更多</el-text>
</div>
</div>
<!-- 交班 -->
<work ref="workRef" />
<!-- 更多 -->
<more ref="moreref" @openCall="openCall"></more>
<!-- 叫号 -->
<!-- <callNumber ref="callNumberRef" /> -->
</template>
<script setup>
import { ref, } from 'vue'
import { useRoute } from 'vue-router'
import { useSocket } from '@/store/socket.js'
import { useUser } from '@/store/user.js'
import more from '@/components/more.vue'
import callNumber from './callNumber.vue'
import work from '@/views/work/index.vue'
const socketStore = useSocket()
const route = useRoute()
const moreref = ref(null)
const callNumberRef = ref(null)
const workRef = ref(null)
const store = useUser()
// 更新叫号记录
function updateCallNumber() {
callNumberRef.value.getsendMessageAjax()
}
function openCall() {
callNumberRef.value.show()
}
// 手动重新连接ws
function connectWsHandle() {
location.reload()
}
defineExpose({
updateCallNumber
})
</script>
<style scoped lang="scss">
.drawerbox {
:deep(.el-drawer__body) {
background: #1c1d1f !important;
}
.drawerbox_box {
color: #fff;
.drawerbox_bo_top {
padding: 20px 0;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid #ccc;
.drawerbox_bo_top_left {
display: flex;
flex-direction: column;
}
.drawerbox_bo_top_ring {
display: flex;
align-items: center;
.drawerbox_bo_top_ring_tb {
display: flex;
flex-direction: column;
border: 1px solid #ccc;
border-radius: 6px;
padding: 6px 10px;
span {
width: 80px;
margin-top: 5px;
text-align: center;
}
}
}
}
.drawerbox_bo_box {
width: 100%;
.drawerbox_bo_box_itemb_felx {
display: flex;
justify-content: flex-start;
padding: 0 20px;
.drawerbox_bo_box_itembox:nth-child(1) {
margin-left: 0px;
}
.drawerbox_bo_box_itembox {
width: 20%;
display: flex;
flex-direction: column;
align-items: center;
margin-left: 40px;
.drawerbox_bo_box_icon {
border-radius: 6px;
background: #2196f3;
width: 100px;
height: 100px;
}
.drawerbox_bo_box_icontext {
margin-top: 10px;
}
}
}
}
}
}
.left_menu_wrap {
height: 100vh;
width: 60px;
background-color: #555;
display: flex;
flex-direction: column;
justify-content: space-between;
.top_item_wra {
display: flex;
flex-direction: column;
}
.item {
width: 100%;
height: 70px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-decoration: none;
/* 去除下划线 */
color: inherit;
/* 继承父元素的颜色 */
cursor: pointer;
/* 修改鼠标指针样式 */
border: none;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-webkit-tap-highlight-color: transparent;
&.online {
.icon,
.text {
color: var(--el-color-success);
}
}
&.active {
background-color: #333;
.icon,
.text {
color: #fff;
}
}
.icon {
color: #999;
font-size: 22px;
margin-bottom: 4px;
}
.text {
color: #999;
font-size: var(--el-font-size-base);
}
}
}
</style>