You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

225 lines
4.0 KiB

<template>
<div class="horizontal-toolbar">
<!-- 最左侧区域设计工具 -->
<div class="toolbar-section tools-section">
<div class="toolbar-item">
<label class="item-label">设计工具:</label>
<div class="tools-horizontal">
<ToolItem
v-for="tool in tools"
:key="tool.type"
:tool="tool"
:horizontal="true"
@dragstart="handleDragStart"
/>
</div>
</div>
</div>
<!-- 中间区域:基本设置 -->
<div class="toolbar-section middle-section">
<!-- 标签编号 -->
<div class="toolbar-item">
<label class="item-label">标签编号:</label>
<el-input
v-model="labelNoValue"
placeholder="输入标签编号"
size="small"
style="width: 120px;"
@input="$emit('update:labelNo', $event)"
/>
</div>
</div>
</div>
</template>
<script>
import ToolItem from './ToolItem.vue'
export default {
name: 'HorizontalToolbar',
components: {
ToolItem
},
props: {
labelNo: String
},
computed: {
labelNoValue: {
get() {
return this.labelNo
},
set(value) {
this.$emit('update:labelNo', value)
}
},
tools() {
return [
{
type: 'text',
icon: 'el-icon-document',
label: '文本',
color: '#409EFF'
},
{
type: 'barcode',
icon: 'el-icon-tickets',
label: '条码',
rotate: true,
color: '#67C23A'
},
{
type: 'qrcode',
icon: 'el-icon-menu',
label: '二维码',
color: '#E6A23C'
},
{
type: 'onecode',
icon: 'el-icon-more',
label: '一维码',
color: '#F56C6C'
},
{
type: 'pic',
icon: 'el-icon-picture',
label: '图片',
color: '#909399'
},
{
type: 'hLine',
icon: 'el-icon-minus',
label: '横线',
color: '#606266'
},
{
type: 'vLine',
icon: 'el-icon-minus',
label: '竖线',
rotate: true,
color: '#909399'
},
{
type: 'serialNumber',
icon: 'el-icon-setting',
label: '流水号',
color: '#909399'
}
]
}
},
methods: {
handleDragStart(tool) {
this.$emit('drag-start', tool)
}
}
}
</script>
<style scoped>
.horizontal-toolbar {
display: flex;
align-items: center;
padding: 12px 20px;
background: #fff;
border-bottom: 1px solid #e4e7ed;
gap: 30px;
min-height: 60px;
flex-wrap: wrap;
}
.toolbar-section {
display: flex;
align-items: center;
gap: 20px;
}
.tools-section {
flex: 0 0 auto;
border-right: 1px solid #e4e7ed;
padding-right: 20px;
margin-right: 1px;
}
.middle-section {
flex: 1;
justify-content: flex-start;
}
.right-section {
flex: 0 0 auto;
justify-content: flex-end;
}
.toolbar-item {
display: flex;
align-items: center;
gap: 8px;
white-space: nowrap;
}
.item-label {
font-size: 13px;
color: #606266;
font-weight: 500;
min-width: fit-content;
}
.tools-horizontal {
display: flex;
gap: 4px;
align-items: center;
}
/* 响应式设计 */
@media (max-width: 1200px) {
.horizontal-toolbar {
gap: 20px;
padding: 10px 15px;
}
.toolbar-section {
gap: 15px;
}
}
@media (max-width: 1024px) {
.horizontal-toolbar {
flex-wrap: wrap;
gap: 15px;
padding: 8px 12px;
}
.toolbar-section {
gap: 12px;
}
.right-section {
flex: 1 1 100%;
justify-content: flex-start;
}
}
@media (max-width: 768px) {
.horizontal-toolbar {
flex-direction: column;
align-items: stretch;
gap: 10px;
padding: 10px;
}
.toolbar-section {
justify-content: space-between;
flex-wrap: wrap;
}
.toolbar-item {
flex: 1;
min-width: 200px;
}
}
</style>