<script lang="ts" setup>
|
// import align from '@/fabric-editor/components/align.vue';
|
// import centerAlign from '@/fabric-editor/components/centerAlign.vue';
|
// import flip from '@/components/flip.vue';
|
|
// import clone from '@/components/clone.vue';
|
// import hide from '@/components/hide.vue';
|
import group from '@/fabric-editor/components/group.vue';
|
import lock from '@/fabric-editor/components/lock.vue';
|
import dele from '@/fabric-editor/components/del.vue';
|
import previewImageList from '@/fabric-editor/components/previewImageList.vue';
|
|
// import bgBar from '@/components/bgBar.vue';
|
// import setSize from '@/fabric-editor/components/setSize.vue';
|
// import replaceImg from '@/components/replaceImg.vue';
|
// import filters from '@/components/filters.vue';
|
// import imgStroke from '@/components/imgStroke.vue';
|
// import elementData from '@/components/elementData.vue';
|
// 右侧组件
|
// import attribute from '@/components/attribute.vue';
|
import attributePostion from '@/fabric-editor/components/attributePostion.vue';
|
import attributeTemplateParam from '@/fabric-editor/components/attributeTemplateParam.vue';
|
// import attributeId from '@/components/attributeId.vue';
|
// import attributeShadow from '@/components/attributeShadow.vue';
|
// import attributeBorder from '@/components/attributeBorder.vue';
|
// import attributeRounded from '@/components/attributeRounded.vue';
|
import attributeFont from '@/fabric-editor/components/attributeFont.vue';
|
// import attributeTextFloat from '@/components/attributeTextFloat.vue';
|
// import attributeColor from '@/components/attributeColor.vue';
|
// import attributeBarcode from '@/components/attributeBarcode.vue';
|
// import attributeQrCode from '@/components/attributeQrCode.vue';
|
// import cropperImg from '@/components/cropperImg.vue';
|
// hooks
|
import useSelectListen from '@/fabric-editor/hooks/useSelectListen';
|
|
const canvasEditor: any = inject('canvasEditor');
|
|
const { mixinState } = useSelectListen(canvasEditor);
|
|
const attrBarShow = ref(true);
|
|
// 属性面板开关
|
const switchAttrBar = () => {
|
attrBarShow.value = !attrBarShow.value;
|
};
|
</script>
|
|
<template>
|
<!-- 属性区域 380-->
|
<div class="right-bar" v-show="attrBarShow">
|
<div style="padding-top: 10px">
|
<!-- 未选择元素时 展示背景设置 -->
|
<div v-show="!mixinState.mSelectMode">
|
<!-- <set-size></set-size>
|
<bg-bar></bg-bar> -->
|
<preview-image-list />
|
</div>
|
|
<!-- 多选时展示 -->
|
<div v-show="mixinState.mSelectMode === 'multiple'">
|
<!-- 分组 -->
|
<group></group>
|
<!-- <Divider plain></Divider> -->
|
<!-- 组对齐方式 -->
|
<!-- <align></align> -->
|
<!-- 居中对齐 -->
|
<!-- <center-align></center-align> -->
|
</div>
|
|
<div v-show="mixinState.mSelectMode === 'one'" class="attr-item-box">
|
<!-- <h3>快捷操作</h3> -->
|
<!-- 分组 -->
|
<group></group>
|
<!-- <Divider plain></Divider> -->
|
<el-divider content-position="left">
|
<h4>快捷操作</h4>
|
</el-divider>
|
<div class="bg-item" v-show="mixinState.mSelectMode">
|
<lock></lock>
|
<dele></dele>
|
<!-- <clone></clone> -->
|
<!-- <hide></hide>
|
<edit></edit> -->
|
</div>
|
<!-- <Divider plain></Divider> -->
|
<!-- 居中对齐 -->
|
<!-- <center-align></center-align> -->
|
<!-- 替换图片 -->
|
<!-- <replaceImg></replaceImg> -->
|
<!-- 裁剪 -->
|
<!-- <cropperImg></cropperImg> -->
|
<!-- 图片裁切 -->
|
<!-- <clip-image></clip-image> -->
|
<!-- 翻转 -->
|
<!-- <flip></flip> -->
|
<!-- 条形码属性 -->
|
<!-- <attributeBarcode></attributeBarcode> -->
|
<!-- 二维码 -->
|
<!-- <attributeQrCode></attributeQrCode> -->
|
<!-- 图片滤镜 -->
|
<!-- <filters></filters> -->
|
<!-- 图片描边 -->
|
<!-- <imgStroke /> -->
|
<!-- 颜色 -->
|
<!-- <attributeColor></attributeColor> -->
|
<attributeTemplateParam></attributeTemplateParam>
|
<!-- 字体属性 -->
|
<attributeFont></attributeFont>
|
<!-- 字体小数点 -->
|
<!-- <attributeTextFloat></attributeTextFloat> -->
|
<!-- 文字内容 -->
|
<!-- <attribute-text-content></attribute-text-content> -->
|
<!-- 位置信息 -->
|
<attributePostion></attributePostion>
|
<!-- 阴影 -->
|
<!-- <attributeShadow></attributeShadow> -->
|
<!-- 边框 -->
|
<!-- <attributeBorder></attributeBorder> -->
|
<!-- 圆角 -->
|
<!-- <attributeRounded></attributeRounded> -->
|
<!-- 关联数据 -->
|
<!-- <attributeId></attributeId> -->
|
|
<!-- 新增字体样式使用 -->
|
<!-- <el-button @click="canvasEditor.getFontJson()" size="small">获取元素数据</el-button> -->
|
</div>
|
</div>
|
<!-- <attribute v-if="state.show"></attribute> -->
|
</div>
|
<!-- 右侧关闭按钮 -->
|
<div
|
:class="`close-btn right-btn ${attrBarShow && 'right-btn-open'}`"
|
@click="switchAttrBar"
|
></div>
|
</template>
|
|
<style lang="scss" scoped>
|
// 右侧容器
|
|
.right-bar {
|
overflow-y: auto;
|
padding: 10px;
|
width: 330px;
|
height: 100%;
|
background: #ffffff;
|
}
|
|
// 属性面板样式
|
|
:deep(.attr-item) {
|
position: relative;
|
display: flex;
|
align-items: center;
|
margin-bottom: 12px;
|
padding: 0 10px;
|
height: 40px;
|
border: none;
|
border-radius: 4px;
|
background: #f6f7f9;
|
|
.ivu-tooltip {
|
text-align: center;
|
flex: 1;
|
}
|
}
|
|
// 关闭按钮
|
|
.close-btn {
|
position: absolute;
|
top: 50%;
|
right: -20px;
|
z-index: 1;
|
margin-top: -10px;
|
width: 20px;
|
height: 64px;
|
background-position: 50%;
|
background-repeat: no-repeat;
|
background-size: cover;
|
cursor: pointer;
|
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAACACAMAAABOb9vcAAAAhFBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAADHx8cODg50dHTx8fF2dnZ1dXWWlpZHR0c4ODhQpkZ5AAAAIXRSTlMA9t+/upkRAnPq5NXDfDEsKQjMeGlRThkMsquljTwzIWhBHpjgAAABJElEQVRYw+3YyW7CQBCEYbxig8ELGJyQkJRJyPb+75dj3zy/lD7kMH3+ZEuzSFO1mlZwhjOE2uwhVHJYMygNVwilhz2EUvNaMigledUFoE1anKYAtA9nVRuANpviOQBt0t2ZQSnZ9QxK6Qih9LSGUHkJobYlhGp6CPW4hlAVhckLhMop1InCjEK1FBYU1hSqo/BI4YXCjMIthTWFijDCCB3g7fuO4O1t/rkvQXPz/LUIzX0oAM0tQHOfCkBzC9DcuwLQXACao9Dv1yb9lsek2xaaxMcMH1x6Ff79dY0wwgj/DGv3p2tG4cX9wd55h4rCO/hk3uEs9w6QlXPIbXrfIJ6XrmVBOtJCA1YkXqVLkh1aUgyNk1fV1BxLxzpsuNLKzrME/AWr0ywwvyj83AAAAABJRU5ErkJggg==');
|
|
&.right-btn {
|
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAACACAYAAAB5sSvuAAAAAXNSR0IArs4c6QAAAFBlWElmTU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAKKADAAQAAAABAAAAgAAAAAAobJzlAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgoZXuEHAAADf0lEQVR4Ae2cvYsTQRjGE7FQkICFB1pZRyzEJkUKmzOpBEHwX9DCQkmChf4JahewsLpWFOQUzwMRPEgEy0PLpPADvEISDrVyfZ6cK0tIZrI7u7MPMi+8mb35uPnlmXczyeXmrURRdKyibAB8Dz8pywg42if4OUnIGd7Bww8Ut+GHpEATgPEll/y8DGRMtaB8hrryl30B2HzVW1Rcgx8vQ9UqaVac+Cf67cC34C+q1erHFcc5dUsDOD/RGBWv4M/hrwG8jzJ3cwFMwlDdd/BN+BZgd5ONLtd5Ac4zfEYFld0ALMMisxUFmAQa44dHdMB+TTasdM2bxJNxI7gDP7ISWNzJE1xymhF+uBzPbyvL2NZOA+oJIO/BrfP7iEGTSNtovIrY/L6sU9mA5PoAby6DtEq87JnlWF/H7+K+v/DmUQDkc23CNxbFpAogIa/Ab/IiaQoxmOThlnkG8TiKK5UUJNNR+MMYjqUaIJnWEYuXeEFTBCTXv1hUi0HCxXYWsbirqiAhb/BBWcE9KLimDEgB68pLTMAL6oBNdcBT6oBr6oAn1O9i2a2Od/DM1Jc4KBivVOYyLHFm6f4ODAoGBV0VcB0fYjAo6KqA6/gQg0FBVwVcx4cYDAq6KuA6/v+Mwel0Wmm325XhcOgqkH08/h6cyiaTSdRoNPhvBFGtVosGg0Gq8Wk7V9IO6Pf7MzgC+oBMDcgn1Ov1vEFmAvQJmRmQkN1ut3AlnQB9QDoDErLT6RSmZC6ARULmBlgUpPxWl5uCRcVhLoBFwTFsnAGLfi10AiwazklBX/txJgV9wWVSUP7tlvwbVspOyFarVfi7ac4Vvquzfyoy95DfiwOgeQHtrUFBu0bmHkFBsz721qCgXSNzj6CgWR97a1DQrpG5R1DQrI+9NSho18jcIyho1sfauqeuoDzgN3UFv6gD7qh/cK8rA84OGygv8VO+CCkrKH3g5Q1P41BB1SV+QDia4hJvQ72LB3h6gPIH/+5CvVGsntoSPwYQzxr/VgRkJoF1wP1KwvFa4SaRPgDNI+RLT2dTwTJfB+9j/jaWden5dgIe5oNnG2O+WwCb7bXWuflliSfLlAjCh4JULHMqjaIAc0tGkhdgnM6FyXI2EV+5pXNxAeTSMSHOSzg3+H2UuVsaQKq0A/eaUmiVb9yZlOk6vJSkTCZA2bRWsonBpFOrySan+wNoJmOM0LyBGwAAAABJRU5ErkJggg==');
|
transform: rotateY(180deg);
|
right: 0px;
|
}
|
|
&.right-btn-open {
|
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAACACAMAAABOb9vcAAAAhFBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAADHx8cODg50dHTx8fF2dnZ1dXWWlpZHR0c4ODhQpkZ5AAAAIXRSTlMA9t+/upkRAnPq5NXDfDEsKQjMeGlRThkMsquljTwzIWhBHpjgAAABJElEQVRYw+3YyW7CQBCEYbxig8ELGJyQkJRJyPb+75dj3zy/lD7kMH3+ZEuzSFO1mlZwhjOE2uwhVHJYMygNVwilhz2EUvNaMigledUFoE1anKYAtA9nVRuANpviOQBt0t2ZQSnZ9QxK6Qih9LSGUHkJobYlhGp6CPW4hlAVhckLhMop1InCjEK1FBYU1hSqo/BI4YXCjMIthTWFijDCCB3g7fuO4O1t/rkvQXPz/LUIzX0oAM0tQHOfCkBzC9DcuwLQXACao9Dv1yb9lsek2xaaxMcMH1x6Ff79dY0wwgj/DGv3p2tG4cX9wd55h4rCO/hk3uEs9w6QlXPIbXrfIJ6XrmVBOtJCA1YkXqVLkh1aUgyNk1fV1BxLxzpsuNLKzrME/AWr0ywwvyj83AAAAABJRU5ErkJggg==');
|
right: 330px;
|
}
|
}
|
</style>
|