fix: 修改缩放的联动

This commit is contained in:
MTrun 2022-01-21 17:55:35 +08:00
parent a8338ec49e
commit 4fc4cbf593
8 changed files with 213 additions and 32 deletions

View File

@ -22,6 +22,7 @@ import {
PersonOutline as PersonOutlineIcon, PersonOutline as PersonOutlineIcon,
LogOutOutline as LogOutOutlineIcon, LogOutOutline as LogOutOutlineIcon,
ChatboxEllipses as ChatboxEllipsesIcon, ChatboxEllipses as ChatboxEllipsesIcon,
LockOpenOutline as LockOpenOutlineIcon,
LockClosedOutline as LockClosedOutlineIcon, LockClosedOutline as LockClosedOutlineIcon,
HelpCircleOutline as HelpOutlineIcon, HelpCircleOutline as HelpOutlineIcon,
CodeSlash as CodeSlashIcon, CodeSlash as CodeSlashIcon,
@ -46,7 +47,8 @@ import {
GraphicalDataFlow as GraphicalDataFlowIcon, GraphicalDataFlow as GraphicalDataFlowIcon,
Store as StoreIcon, Store as StoreIcon,
Devices as DevicesIcon, Devices as DevicesIcon,
ObjectStorage as ObjectStorageIcon ObjectStorage as ObjectStorageIcon,
DicomOverlay as DicomOverlayIcon
} from '@vicons/carbon' } from '@vicons/carbon'
const ionicons5 = { const ionicons5 = {
@ -61,6 +63,7 @@ const ionicons5 = {
// 退出 // 退出
LogOutOutlineIcon, LogOutOutlineIcon,
// 锁 // 锁
LockOpenOutlineIcon,
LockClosedOutlineIcon, LockClosedOutlineIcon,
// 人 // 人
PersonIcon, PersonIcon,
@ -142,7 +145,9 @@ const carbon = {
// 模板市场 // 模板市场
StoreIcon, StoreIcon,
// 我的模板 // 我的模板
ObjectStorageIcon ObjectStorageIcon,
// 键盘
DicomOverlayIcon
} }
// https://www.xicons.org/#/ 还有很多 // https://www.xicons.org/#/ 还有很多

View File

@ -59,6 +59,7 @@ import {
NPopover, NPopover,
NPagination, NPagination,
NSelect, NSelect,
NSlider,
NRadioGroup, NRadioGroup,
NRadio, NRadio,
NSteps, NSteps,
@ -79,6 +80,7 @@ import {
NSkeleton, NSkeleton,
NCarousel, NCarousel,
NScrollbar, NScrollbar,
NPopselect,
NCollapseTransition NCollapseTransition
} from 'naive-ui'; } from 'naive-ui';
@ -141,6 +143,7 @@ const naive = create({
NDataTable, NDataTable,
NPopover, NPopover,
NPagination, NPagination,
NSlider,
NSelect, NSelect,
NRadioGroup, NRadioGroup,
NRadio, NRadio,
@ -162,6 +165,7 @@ const naive = create({
NSkeleton, NSkeleton,
NCarousel, NCarousel,
NScrollbar, NScrollbar,
NPopselect,
NCollapseTransition NCollapseTransition
], ],
}); });

View File

@ -53,7 +53,6 @@ export const useChartEditStoreStore = defineStore({
value: any value: any
): void { ): void {
const dom = this.getEditCanvas.editContentDom const dom = this.getEditCanvas.editContentDom
console.log(dom);
if (dom) { if (dom) {
// @ts-ignore // @ts-ignore
dom.style[key] = value dom.style[key] = value
@ -120,11 +119,12 @@ export const useChartEditStoreStore = defineStore({
}, },
// * 设置缩放 // * 设置缩放
setScale(scale: number, sys = true): void { setScale(scale: number, sys = true): void {
console.log(scale); if(!this.getEditCanvas.lockScale) {
this.setPageAttribute('transform', `scale(${scale})`) this.setPageAttribute('transform', `scale(${scale})`)
this.getEditCanvas.userScale = scale this.getEditCanvas.userScale = scale
if (sys) { if (sys) {
this.getEditCanvas.scale = scale this.getEditCanvas.scale = scale
}
} }
} }
} }

View File

@ -23,7 +23,7 @@
</n-space> </n-space>
</div> </div>
<aside class="content" :class="{ hideScroll: hideScrollbar }"> <aside class="content">
<n-scrollbar x-scrollable> <n-scrollbar x-scrollable>
<n-scrollbar> <n-scrollbar>
<slot></slot> <slot></slot>
@ -72,19 +72,13 @@ defineProps({
} }
}) })
const hideScrollbar = computed(() => {
return (
chartEditStore.getEditCanvas.userScale <= chartEditStore.getEditCanvas.scale
)
})
const backHandle = () => { const backHandle = () => {
emit('back') emit('back')
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
$topHeight: 36px; $topHeight: 40px;
@include go(content-box) { @include go(content-box) {
height: calc(100vh - #{$--header-height}); height: calc(100vh - #{$--header-height});
margin: 1px; margin: 1px;
@ -126,7 +120,7 @@ $topHeight: 36px;
justify-content: space-between; justify-content: space-between;
flex-wrap: nowrap; flex-wrap: nowrap;
align-items: center; align-items: center;
height: 36px; height: $topHeight;
padding: 0 10px; padding: 0 10px;
.mt-1 { .mt-1 {
margin-top: 2px; margin-top: 2px;
@ -140,17 +134,5 @@ $topHeight: 36px;
height: calc(100vh - #{$--header-height} - #{$topHeight}); height: calc(100vh - #{$--header-height} - #{$topHeight});
overflow: hidden; overflow: hidden;
} }
@include deep() {
.content {
&.hideScroll {
.n-scrollbar-container {
overflow: hidden;
}
.n-scrollbar-rail {
display: none;
}
}
}
}
} }
</style> </style>

View File

@ -0,0 +1,3 @@
import EditBottom from './index.vue'
export { EditBottom }

View File

@ -0,0 +1,180 @@
<template>
<div class="go-edit-bottom">
<n-popselect :options="shortcutKeyOptions" size="medium">
<n-button class="scale-btn" secondary size="mini">
<n-icon class="lock-icon" size="18" :depth="2">
<DicomOverlayIcon />
</n-icon>
</n-button>
</n-popselect>
<n-space class="bottom-ri">
<!-- 缩放比例 -->
<n-select
:disabled="lockScale"
class="scale-btn"
v-model:value="filterValue"
size="mini"
:options="filterOptions"
@update:value="selectHandle"
/>
<!-- 锁定缩放 -->
<n-tooltip trigger="hover">
<template #trigger>
<n-button @click="lockHandle" text>
<n-icon
class="lock-icon"
:class="{ color: lockScale }"
size="18"
:depth="3"
>
<LockClosedOutlineIcon v-if="lockScale" />
<LockOpenOutlineIcon v-else />
</n-icon>
</n-button>
</template>
<span>点击{{ lockScale ? '解锁' : '锁定' }}当前缩放比例</span>
</n-tooltip>
<!-- 拖动 -->
<n-slider
class="scale-slider"
v-model:value="sliderValue"
:default-value="50"
:min="10"
:max="200"
:step="5"
:format-tooltip="v => `${v}%`"
:disabled="lockScale"
:marks="sliderMaks"
@update:value="sliderHandle"
/>
</n-space>
</div>
</template>
<script setup lang="ts">
import { reactive, ref, toRefs, shallowReactive, watchEffect } from 'vue'
import { icon } from '@/plugins'
const { LockClosedOutlineIcon, LockOpenOutlineIcon } = icon.ionicons5
const { DicomOverlayIcon } = icon.carbon
import { getChartEditStore, getChartEditStoreEnum } from '../../hooks/useStore'
import { useDesignStore } from '@/store/modules/designStore/designStore'
//
const designStore = useDesignStore()
const themeColor = ref(designStore.getAppTheme)
const chartEditStore = getChartEditStore()
const chartEditStoreEnum = getChartEditStoreEnum()
const { lockScale, scale, userScale } = toRefs(chartEditStore.getEditCanvas)
//
let filterOptions = reactive([
{
label: '自适应',
value: 0
},
{
label: '50%',
value: 50
},
{
label: '100%',
value: 100
},
{
label: '150%',
value: 150
},
{
label: '200%',
value: 200
}
])
//
const filterValue = ref('')
//
const selectHandle = (v: number) => {
if (v === 0) {
chartEditStore.computedScale()
return
}
chartEditStore.setScale(v / 100)
}
//
const lockHandle = () => {
chartEditStore.setEditCanvasItem(
chartEditStoreEnum.LOCKSCALE,
!lockScale.value
)
}
//
const sliderValue = ref(100)
//
const sliderHandle = (v: number) => {
chartEditStore.setScale(v / 100)
}
const sliderMaks = reactive({
100: ''
})
//
const shortcutKeyOptions = shallowReactive([
{
label: '键盘快捷键列表',
value: '1'
},
{
label: 'Ctrl + C 复制',
value: '2'
}
])
// scale
watchEffect(() => {
const value = (scale.value * 100).toFixed(0)
filterValue.value = `${value}%`
sliderValue.value = parseInt(value)
})
</script>
<style lang="scss" scoped>
@include go(edit-bottom) {
width: 100%;
padding: 0 20px;
display: flex;
align-items: center;
justify-content: space-between;
.bottom-ri {
position: relative;
top: 15px;
.lock-icon {
padding-top: 4px;
&.color {
color: v-bind('themeColor');
}
}
.scale-btn {
font-size: 12px;
@include deep() {
.n-base-selection-label {
padding: 3px;
}
}
}
.scale-slider {
position: relative;
top: -4px;
width: 200px;
}
}
}
</style>

View File

@ -1,6 +1,10 @@
import { useChartEditStoreStore } from '@/store/modules/chartEditStore/chartEditStore' import { useChartEditStoreStore } from '@/store/modules/chartEditStore/chartEditStore'
import { EditCanvasTypeEnum } from '@/store/modules/chartEditStore/chartEditStore.d'
const chartEditStore = useChartEditStoreStore() const chartEditStore = useChartEditStoreStore()
export const getChartEditStore = () => { export const getChartEditStore = () => {
return chartEditStore return chartEditStore
} }
export const getChartEditStoreEnum = () => {
return EditCanvasTypeEnum
}

View File

@ -9,11 +9,12 @@
> >
<div id="go-chart-edit-content"> <div id="go-chart-edit-content">
<!-- 中间区域 --> <!-- 中间区域 -->
<EditRange> <EditRange> </EditRange>
</EditRange>
</div> </div>
<!-- 底部控制 --> <!-- 底部控制 -->
<template #bottom> </template> <template #bottom>
<EditBottom />
</template>
</ContentBox> </ContentBox>
</template> </template>
@ -21,6 +22,7 @@
import { ref, onUnmounted, onMounted, computed } from 'vue' import { ref, onUnmounted, onMounted, computed } from 'vue'
import { ContentBox } from '../ContentBox/index' import { ContentBox } from '../ContentBox/index'
import { EditRange } from './components/EditRange' import { EditRange } from './components/EditRange'
import { EditBottom } from './components/EditBottom'
import { getChartEditStore } from './hooks/useStore' import { getChartEditStore } from './hooks/useStore'
import { EditCanvasTypeEnum } from '@/store/modules/chartEditStore/chartEditStore.d' import { EditCanvasTypeEnum } from '@/store/modules/chartEditStore/chartEditStore.d'
@ -55,6 +57,7 @@ computed(() => {})
@include goId(chart-edit-layout) { @include goId(chart-edit-layout) {
position: relative; position: relative;
width: 100%; width: 100%;
overflow: hidden;
@include background-image('background-point'); @include background-image('background-point');
@extend .go-point-bg; @extend .go-point-bg;
@include goId(chart-edit-content) { @include goId(chart-edit-content) {