feat: titleBar模块开发

master
JINGYJ 3 weeks ago
parent f7b5829cd1
commit 0e12f5ce43

@ -25,7 +25,8 @@ export default defineConfig({
'@': resolve('src/renderer/src'),
'@renderer': resolve('src/renderer/src'),
'@views': resolve('src/renderer/src/views'),
'@router': resolve('src/renderer/src/router')
'@router': resolve('src/renderer/src/router'),
'@assets': resolve('src/renderer/src/assets')
}
},
plugins: [

@ -12,8 +12,8 @@ import icon from '../../../resources/icon.png?asset'
import { is } from '@electron-toolkit/utils'
export default class MainFrame {
#frame: any = null
#width = 3840
#height = 2160
#width = 1920
#height = 1080
create() {
this.#frame = new BrowserWindow({
width: this.#width,

@ -53,4 +53,4 @@ app.on('window-all-closed', () => {
// code. You can also put them in separate files and require them here.
app.commandLine.appendSwitch('high-dpi-support', '1')
app.commandLine.appendSwitch('force-device-scale-factor', '1')
// app.commandLine.appendSwitch('force-device-scale-factor', '1')

@ -9,6 +9,12 @@ export {}
declare module 'vue' {
export interface GlobalComponents {
ElButton: typeof import('element-plus/es')['ElButton']
ElDropdown: typeof import('element-plus/es')['ElDropdown']
ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
ElMenu: typeof import('element-plus/es')['ElMenu']
ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
SvgIcon: typeof import('./src/components/SvgIcon/index.vue')['default']

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

@ -1,21 +1,139 @@
<!--
* @Author: donghao donghao@supervision.ltd
* @Date: 2025-07-03 10:37:10
* @LastEditors: donghao donghao@supervision.ltd
* @LastEditTime: 2025-07-03 10:41:34
* @FilePath: \electron-project\Robot-Al\Robot-Al-Platform-Web\src\renderer\src\views\Design\Controls\headCtrl.vue
* @Description: 顶部栏
-->
<template>
<div class="head-controls-wrap">
<ul class="flex">
<li
v-for="(v, k) in ['文件', '编辑', '视图', '工具', '窗口', '帮助']"
:key="k"
class="flex flex-center"
>
{{ v }}
</li>
</ul>
<div class="titlebar-wrap" @mousedown="mousedown($event)">
<div class="win">
<div class="title">
<span class="title-icon"></span>
<div class="title-text">
<el-dropdown placement="bottom-start" trigger="click">
<span class="el-dropdown-link">文件</span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item>新建方案</el-dropdown-item>
<el-dropdown-item>打开方案</el-dropdown-item>
<el-dropdown-item>最近打开</el-dropdown-item>
<el-dropdown-item>打开实例</el-dropdown-item>
<el-dropdown-item>保存方案</el-dropdown-item>
<el-dropdown-item>另存方案</el-dropdown-item>
<el-dropdown-item>导入流程</el-dropdown-item>
<el-dropdown-item>退出</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
<span>设置</span>
<el-dropdown placement="bottom-start" trigger="click">
<span class="el-dropdown-link">工具</span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item>创建一键标定引导</el-dropdown-item>
<el-dropdown-item>标定板生成工具</el-dropdown-item>
<el-dropdown-item>自定义模块生成工具</el-dropdown-item>
<el-dropdown-item>运行异常采集机器人工具</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
<el-dropdown placement="bottom-start" trigger="click">
<span class="el-dropdown-link">系统</span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item>日志</el-dropdown-item>
<el-dropdown-item>通信管理</el-dropdown-item>
<el-dropdown-item>控制器管理</el-dropdown-item>
<el-dropdown-item>相机管理</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
<span>帮助</span>
</div>
</div>
<div class="controls">
<div class="min"></div>
<div class="max"></div>
<div class="close"></div>
</div>
</div>
</div>
</template>
<script lang="ts" setup>
const dragging = ref(false)
const mouseX = ref(0)
const mouseY = ref(0)
const mousedown = (event) => {
dragging.value = true
mouseX.value = event.x
mouseY.value = event.y
document.onmousemove = (e) => {
if (dragging.value) {
const x = e.screenX - mouseX.value
const y = e.screenY - mouseY.value
let data = {
appX: x,
appY: y
}
electron.ipcRenderer.invoke('custom-adsorption', data)
}
}
document.onmouseup = () => {
dragging.value = false
}
}
</script>
<style lang="scss" scoped>
.titlebar-wrap {
width: 100%;
height: 38px;
background: #373737;
.win {
width: 100%;
height: 38px;
color: white;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 10px 0 10px;
-webkit-app-region: drag;
.title {
display: flex;
-webkit-app-region: no-drag;
.title-icon {
margin-right: 32px;
width: 80px;
height: 26px;
background: url('@/assets/images/titleBar/logo.png');
background-size: 100% 100%;
background-position: center;
background-repeat: no-repeat;
}
.title-text {
width: 270px;
display: flex;
align-items: center;
justify-content: space-between;
.el-dropdown-link {
color: #fff;
font-size: 14px;
font-weight: 500;
}
span {
color: #fff;
font-size: 14px;
font-weight: 500;
}
}
}
.controls {
display: flex;
-webkit-app-region: no-drag;
}
}
}
</style>
<style lang="scss">
/* 隐藏箭头的伪元素 */
.el-popper__arrow,
.el-popper__arrow::before {
display: none !important;
width: 0 !important;
height: 0 !important;
}
</style>

@ -21,7 +21,8 @@
"@components": ["./src/renderer/src/components"],
"@router": ["./src/renderer/src/router"],
"@store": ["./src/renderer/src/store"],
"@utils": ["./src/renderer/src/utils"]
"@utils": ["./src/renderer/src/utils"],
"@assets": ["./src/renderer/src/assets"]
}
},
"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]

@ -30,6 +30,9 @@
],
"@utils": [
"./src/renderer/src/utils"
],
"@assets": [
"./src/renderer/src/assets"
]
}
}

Loading…
Cancel
Save