|
|
@@ -8,12 +8,18 @@
|
|
|
@mouseup="handleMouseUp"
|
|
|
>
|
|
|
<div class="workspace flex flex-col">
|
|
|
- <div class="h-32px bg-bg-secondary stage-title border-b-1px border-b-solid border-border">
|
|
|
+ <!-- <div class="h-32px bg-bg-secondary stage-title border-b-1px border-b-solid border-border">
|
|
|
<div class="px-12px leading-32px text-text-primary font-bold">{{ $t('screen') }}</div>
|
|
|
- </div>
|
|
|
+ </div> -->
|
|
|
<div class="workspace-top">
|
|
|
<!-- 画布 -->
|
|
|
- <DesignerCanvas :state="state" :page="page" ref="canvasRef" @changeState="handleSetState" />
|
|
|
+ <DesignerCanvas
|
|
|
+ :state="state"
|
|
|
+ :page="page"
|
|
|
+ :screen="screen"
|
|
|
+ ref="canvasRef"
|
|
|
+ @changeState="handleSetState"
|
|
|
+ />
|
|
|
<!-- 标尺 -->
|
|
|
<Ruler :state="state" :page="page" v-show="state.showRuler" />
|
|
|
</div>
|
|
|
@@ -26,41 +32,53 @@
|
|
|
<span>{{ state.width }} * {{ state.height }}</span>
|
|
|
</div>
|
|
|
<div class="bottom-right flex items-center gap-8px">
|
|
|
- <div
|
|
|
- v-if="projectStore.project?.meta.screenType === 'dual'"
|
|
|
- class="w-20px h-20px flex items-center justify-center cursor-pointer"
|
|
|
- @click="appStore.toggleLayout"
|
|
|
- >
|
|
|
- <LuRows2 :size="16" v-if="appStore.screenLayout === 'vertical'" />
|
|
|
- <LuColumns2 :size="16" v-else />
|
|
|
- </div>
|
|
|
- <div
|
|
|
- class="w-20px h-20px flex items-center justify-center cursor-pointer"
|
|
|
- @click="handleCenter"
|
|
|
- >
|
|
|
- <LuFocus :size="16" />
|
|
|
- </div>
|
|
|
- <div
|
|
|
- class="w-20px h-20px flex items-center justify-center cursor-pointer border-1px border-solid border-transparent"
|
|
|
- :class="state.showRuler ? 'border-blue! border-1px border-solid bg-bg-primary' : ''"
|
|
|
- @click="state.showRuler = !state.showRuler"
|
|
|
- >
|
|
|
- <LuRuler :size="16" />
|
|
|
- </div>
|
|
|
- <div
|
|
|
- class="w-20px h-20px flex items-center justify-center cursor-pointer border-1px border-solid border-transparent"
|
|
|
- :class="state.showBorder ? 'border-blue! border-1px border-solid bg-bg-primary' : ''"
|
|
|
- @click="state.showBorder = !state.showBorder"
|
|
|
- >
|
|
|
- <LuBoxSelect :size="16" />
|
|
|
- </div>
|
|
|
- <div
|
|
|
- class="w-20px h-20px flex items-center justify-center cursor-pointer border-1px border-solid border-transparent"
|
|
|
- :class="state.showBgGrid ? 'border-blue! border-1px border-solid bg-bg-primary' : ''"
|
|
|
- @click="state.showBgGrid = !state.showBgGrid"
|
|
|
- >
|
|
|
- <LuGrid3X3 :size="16" />
|
|
|
- </div>
|
|
|
+ <el-tooltip content="屏幕布局">
|
|
|
+ <div
|
|
|
+ v-if="projectStore.project?.meta.screenType === 'dual'"
|
|
|
+ class="w-20px h-20px flex items-center justify-center cursor-pointer"
|
|
|
+ @click="appStore.toggleLayout"
|
|
|
+ >
|
|
|
+ <LuRows2 :size="16" v-if="appStore.screenLayout === 'vertical'" />
|
|
|
+ <LuColumns2 :size="16" v-else />
|
|
|
+ </div>
|
|
|
+ </el-tooltip>
|
|
|
+
|
|
|
+ <el-tooltip content="中心位置">
|
|
|
+ <div
|
|
|
+ class="w-20px h-20px flex items-center justify-center cursor-pointer"
|
|
|
+ @click="handleCenter"
|
|
|
+ >
|
|
|
+ <LuFocus :size="16" />
|
|
|
+ </div>
|
|
|
+ </el-tooltip>
|
|
|
+ <el-tooltip content="标尺">
|
|
|
+ <div
|
|
|
+ class="w-20px h-20px flex items-center justify-center cursor-pointer border-1px border-solid border-transparent"
|
|
|
+ :class="state.showRuler ? 'border-blue! border-1px border-solid bg-bg-primary' : ''"
|
|
|
+ @click="state.showRuler = !state.showRuler"
|
|
|
+ >
|
|
|
+ <LuRuler :size="16" />
|
|
|
+ </div>
|
|
|
+ </el-tooltip>
|
|
|
+ <el-tooltip content="控件边框">
|
|
|
+ <div
|
|
|
+ class="w-20px h-20px flex items-center justify-center cursor-pointer border-1px border-solid border-transparent"
|
|
|
+ :class="state.showBorder ? 'border-blue! border-1px border-solid bg-bg-primary' : ''"
|
|
|
+ @click="state.showBorder = !state.showBorder"
|
|
|
+ >
|
|
|
+ <LuBoxSelect :size="16" />
|
|
|
+ </div>
|
|
|
+ </el-tooltip>
|
|
|
+ <el-tooltip content="网格">
|
|
|
+ <div
|
|
|
+ class="w-20px h-20px flex items-center justify-center cursor-pointer border-1px border-solid border-transparent"
|
|
|
+ :class="state.showBgGrid ? 'border-blue! border-1px border-solid bg-bg-primary' : ''"
|
|
|
+ @click="state.showBgGrid = !state.showBgGrid"
|
|
|
+ >
|
|
|
+ <LuGrid3X3 :size="16" />
|
|
|
+ </div>
|
|
|
+ </el-tooltip>
|
|
|
+
|
|
|
<el-slider
|
|
|
v-model="state.scale"
|
|
|
:min="0.1"
|
|
|
@@ -70,7 +88,11 @@
|
|
|
size="small"
|
|
|
style="width: 140px"
|
|
|
></el-slider>
|
|
|
- <span class="inline w-30px">{{ (state.scale * 100).toFixed(0) }}%</span>
|
|
|
+ <el-tooltip content="重置缩放">
|
|
|
+ <span class="inline w-30px cursor-pointer" @click="setOriginSize"
|
|
|
+ >{{ (state.scale * 100).toFixed(0) }}%</span
|
|
|
+ >
|
|
|
+ </el-tooltip>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -149,6 +171,12 @@ const handleCenter = () => {
|
|
|
canvasRef.value?.initStagePosition()
|
|
|
}
|
|
|
|
|
|
+// 原始尺寸
|
|
|
+const setOriginSize = () => {
|
|
|
+ state.scale = 1
|
|
|
+ canvasRef.value?.initStagePosition()
|
|
|
+}
|
|
|
+
|
|
|
const handleClick = () => {
|
|
|
// 点击画布空白处
|
|
|
projectStore.activePageId = props.page?.id
|
|
|
@@ -258,6 +286,10 @@ const handleSelectComponent = (startX: number, startY: number, endX: number, end
|
|
|
provide('page', props.page)
|
|
|
provide('state', state)
|
|
|
provide('pageEl', boxRef)
|
|
|
+
|
|
|
+defineExpose({
|
|
|
+ handleCenter
|
|
|
+})
|
|
|
</script>
|
|
|
|
|
|
<style lang="less" scoped>
|