| <script lang="ts" setup> | 
| // 左侧组件 | 
| // import tools from '@/fabric-editor/components/tools.vue'; | 
| import systemTemplateDataParamSetting from '@/fabric-editor/components/systemTemplateDataParamSetting.vue'; | 
|   | 
| const state = reactive({ | 
|   menuActive: 1, | 
|   toolsBarShow: true, | 
| }); | 
| // 左侧菜单渲染 | 
| const menuActive = ref('systemTemplateDataParamSetting'); | 
| const leftBarComponent = { | 
|   systemTemplateDataParamSetting, | 
| }; | 
|   | 
| const leftBar = reactive([ | 
|   { | 
|     //系统模板参数 | 
|     key: 'systemTemplateDataParamSetting', | 
|     name: computed(() => '系统模板参数'), | 
|     icon: 'md-images', | 
|   }, | 
| ]); | 
| // 隐藏工具条 | 
| const hideToolsBar = () => { | 
|   state.toolsBarShow = !state.toolsBarShow; | 
| }; | 
| // 展示工具条 | 
| const showToolsBar = (val: any) => { | 
|   menuActive.value = val; | 
|   state.toolsBarShow = true; | 
| }; | 
|   | 
| // onMounted(() => { | 
| //   // 有ID时,打开作品面板 | 
| //   const route = useRoute(); | 
| //   if (route?.query?.id) { | 
| //     menuActive.value = 'myMaterial'; | 
| //   } | 
| // }); | 
| </script> | 
|   | 
| <template> | 
|   <div :class="`left-bar ${state.toolsBarShow && 'show-tools-bar'}`"> | 
|     <div class="content" v-show="state.toolsBarShow"> | 
|       <div class="left-panel"> | 
|         <KeepAlive> | 
|           <component :is="leftBarComponent[menuActive]"></component> | 
|         </KeepAlive> | 
|       </div> | 
|     </div> | 
|     <!-- 关闭按钮 --> | 
|     <div | 
|       :class="`close-btn left-btn ${state.toolsBarShow && 'left-btn-open'}`" | 
|       @click="hideToolsBar" | 
|     ></div> | 
|   </div> | 
| </template> | 
|   | 
| <style lang="scss" scoped> | 
| // 左侧容器 | 
|   | 
| .left-bar { | 
|   position: relative; | 
|   display: flex; | 
|   width: 65px; | 
|   height: 100%; | 
|   background: #ffffff; | 
|   | 
|   &.show-tools-bar { | 
|     width: 240px; | 
|   } | 
| } | 
|   | 
| .ivu-menu-vertical .menu-item { | 
|   padding: 10px 2px; | 
|   font-size: 12px; | 
|   text-align: center; | 
|   box-sizing: border-box; | 
|   | 
|   & > i { | 
|     margin: 0; | 
|   } | 
| } | 
|   | 
| .ivu-menu-light.ivu-menu-vertical .ivu-menu-item-active:not(.ivu-menu-submenu) { | 
|   background: none; | 
| } | 
|   | 
| .content { | 
|   overflow-y: auto; | 
|   padding: 0 10px; | 
|   width: 120px; | 
|   height: 100%; | 
|   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=='); | 
|   | 
|   &.left-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=='); | 
|   } | 
|   | 
|   &.left-btn-open { | 
|     background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAACACAMAAABOb9vcAAAAhFBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAADHx8cODg50dHTx8fF2dnZ1dXWWlpZHR0c4ODhQpkZ5AAAAIXRSTlMA9t+/upkRAnPq5NXDfDEsKQjMeGlRThkMsquljTwzIWhBHpjgAAABJElEQVRYw+3YyW7CQBCEYbxig8ELGJyQkJRJyPb+75dj3zy/lD7kMH3+ZEuzSFO1mlZwhjOE2uwhVHJYMygNVwilhz2EUvNaMigledUFoE1anKYAtA9nVRuANpviOQBt0t2ZQSnZ9QxK6Qih9LSGUHkJobYlhGp6CPW4hlAVhckLhMop1InCjEK1FBYU1hSqo/BI4YXCjMIthTWFijDCCB3g7fuO4O1t/rkvQXPz/LUIzX0oAM0tQHOfCkBzC9DcuwLQXACao9Dv1yb9lsek2xaaxMcMH1x6Ff79dY0wwgj/DGv3p2tG4cX9wd55h4rCO/hk3uEs9w6QlXPIbXrfIJ6XrmVBOtJCA1YkXqVLkh1aUgyNk1fV1BxLxzpsuNLKzrME/AWr0ywwvyj83AAAAABJRU5ErkJggg=='); | 
|     transform: rotateY(360deg); | 
|   } | 
| } | 
| </style> |