feat: 位置尺寸

This commit is contained in:
zackxizi 2024-04-04 11:15:45 +08:00
parent 2ae7b0fd4c
commit 3419879ebf
6 changed files with 93 additions and 34 deletions

View File

@ -0,0 +1,45 @@
<template>
<div class="line-layout">
<number-input :modelValue="loc.x" label="X" @update:modelValue="(value) => change('x', value)" />
<number-input :modelValue="loc.y" label="Y" @update:modelValue="(value) => change('y', value)" />
<number-input :modelValue="width" style="margin-top: 0.5rem" label="宽" :editable="true" @update:modelValue="(value) => change('width', value)" />
<number-input :modelValue="height" style="margin-top: 0.5rem" label="高" :editable="true" @update:modelValue="(value) => change('height', value)" />
</div>
</template>
<script lang="ts" setup>
import { computed } from 'vue'
import numberInput from '../../modules/settings/numberInput.vue'
import { useWidgetStore } from '../../../store'
import { getOffsetFromTransform, removeTranslate } from '../../../utils/widgets/transferTranslate'
import { TUpdateWidgetPayload } from '../../../store/design/widget/actions/widget'
const widgetStore = useWidgetStore()
const dActiveElement = computed(() => widgetStore.dActiveElement)
const loc = computed(() => getOffsetFromTransform(dActiveElement.value?.transform))
const transformNLoc = computed(() => removeTranslate(dActiveElement.value?.transform))
const width = computed(() => dActiveElement.value?.width)
const height = computed(() => dActiveElement.value?.height)
function change(key: string, value: number | Record<string, any> | string) {
console.log(key, value, 'change===')
const uuid = dActiveElement.value?.uuid ?? ''
let transform = transformNLoc.value
let _key = key
let _value = value
if (key === 'x') {
transform = `translate(${value}px, ${loc.value.y}px) ${transform}`
_key = 'transform'
_value = transform
} else if (key === 'y') {
transform = `translate(${loc.value.x}px, ${value}px) ${transform}`
_key = 'transform'
_value = transform
}
widgetStore.updateWidgetData({
uuid,
key: _key as TUpdateWidgetPayload['key'],
value: _value,
pushHistory: false,
})
}
</script>

View File

@ -9,12 +9,13 @@
<div id="w-group-style">
<el-collapse v-model="state.activeNames">
<el-collapse-item title="位置尺寸" name="1">
<div class="line-layout">
<!-- <div class="line-layout">
<number-input v-model="state.innerElement.left" label="X" @finish="(value) => finish('left', value)" />
<number-input v-model="state.innerElement.top" label="Y" @finish="(value) => finish('top', value)" />
<number-input v-model="state.innerElement.width" style="margin-top: 0.5rem" label="宽" @finish="(value) => finish('width', value)" />
<number-input v-model="state.innerElement.height" style="margin-top: 0.5rem" label="高" @finish="(value) => finish('height', value)" />
</div>
</div> -->
<line-layout />
</el-collapse-item>
<el-collapse-item title="样式设置" name="2">
<!-- <el-button plain type="primary" class="block-btn" @click="store.dispatch('ungroup', state.innerElement.uuid)">取消组合</el-button> -->
@ -44,6 +45,7 @@ import { storeToRefs } from 'pinia'
import { TUpdateWidgetPayload } from '@/store/design/widget/actions/widget'
import { TupdateLayerIndexData } from '@/store/design/widget/actions/layer'
import { TUpdateAlignData } from '@/store/design/widget/actions/align'
import LineLayout from '@/components/business/line-layout/index.vue'
// import { useSetupMapGetters } from '@/common/hooks/mapGetters'
type TState = {

View File

@ -3,18 +3,19 @@
* @Date: 2021-08-09 11:41:53
* @Description:
* @LastEditors: xi_zi
* @LastEditTime: 2024-04-03 13:44:42
* @LastEditTime: 2024-04-04 11:13:38
-->
<template>
<div id="w-image-style">
<el-collapse v-model="state.activeNames">
<el-collapse-item title="位置尺寸" name="1">
<div class="line-layout">
<!-- <div class="line-layout">
<number-input v-model="state.innerElement.left" label="X" @finish="(value) => finish('left', value)" />
<number-input v-model="state.innerElement.top" label="Y" @finish="(value) => finish('top', value)" />
<number-input v-model="state.innerElement.width" style="margin-top: 0.5rem" label="宽" @finish="(value) => finish('width', value)" />
<number-input v-model="state.innerElement.height" style="margin-top: 0.5rem" label="高" @finish="(value) => finish('height', value)" />
</div>
</div> -->
<line-layout />
</el-collapse-item>
<el-collapse-item title="设置" name="2">
<!-- <el-button size="mini" style="width: 100%; margin-top: 0.5rem" plain @click="openCropper">替换图片</el-button> -->
@ -87,6 +88,7 @@ import { useCanvasStore, useControlStore, useForceStore, useWidgetStore } from '
import { TUpdateWidgetPayload } from '@/store/design/widget/actions/widget'
import { TupdateLayerIndexData } from '@/store/design/widget/actions/layer'
import { TUpdateAlignData } from '@/store/design/widget/actions/align'
import LineLayout from '@/components/business/line-layout/index.vue'
type TState = {
picBoxShow: boolean

View File

@ -2,19 +2,20 @@
* @Author: ShawnPhang
* @Date: 2021-08-09 11:41:53
* @Description:
* @LastEditors: ShawnPhang <site: book.palxp.com>
* @LastEditTime: 2023-06-29 17:53:23
* @LastEditors: xi_zi
* @LastEditTime: 2024-04-04 11:13:31
-->
<template>
<div id="w-image-style">
<el-collapse v-model="state.activeNames">
<el-collapse-item title="位置尺寸" name="1">
<div class="line-layout">
<!-- <div class="line-layout">
<number-input v-model="state.innerElement.left" label="X" @finish="(value) => finish('left', value)" />
<number-input v-model="state.innerElement.top" label="Y" @finish="(value) => finish('top', value)" />
<number-input v-model="state.innerElement.width" style="margin-top: 0.5rem" label="宽" @finish="(value) => finish('width', value)" />
<number-input v-model="state.innerElement.height" style="margin-top: 0.5rem" label="高" @finish="(value) => finish('height', value)" />
</div>
</div> -->
<line-layout />
</el-collapse-item>
<el-collapse-item title="样式设计" name="2">
<div style="flex-wrap: nowrap" class="line-layout">
@ -29,7 +30,16 @@
<color-select v-model="state.innerElement.dotColor" @finish="(value) => finish('dotColor', value)" />
<color-select v-show="state.innerElement.dotColorType !== 'single'" v-model="state.innerElement.dotColor2" @finish="(value) => finish('dotColor2', value)" />
</div>
<number-slider v-show="state.innerElement.dotColorType !== 'single'" v-model="state.innerElement.dotRotation" style="margin-top: 8px" label="渐变角度" :step="1" :minValue="0" :maxValue="360" @finish="(value) => finish('dotRotation', value)" />
<number-slider
v-show="state.innerElement.dotColorType !== 'single'"
v-model="state.innerElement.dotRotation"
style="margin-top: 8px"
label="渐变角度"
:step="1"
:minValue="0"
:maxValue="360"
@finish="(value) => finish('dotRotation', value)"
/>
</el-collapse-item>
<el-collapse-item title="内容设置" name="3">
<text-input-area v-model="state.innerElement.value" :max="40" label="" @finish="(value) => finish('value', value)" />
@ -77,15 +87,16 @@ import { storeToRefs } from 'pinia'
import { useControlStore, useForceStore, useWidgetStore } from '@/store'
import { TUpdateWidgetPayload } from '@/store/design/widget/actions/widget'
import { TUpdateAlignData } from '@/store/design/widget/actions/align'
import LineLayout from '@/components/business/line-layout/index.vue'
type TState = {
activeNames: string[]
innerElement: TWQrcodeSetting,
tag: boolean,
ingoreKeys: string[],
layerIconList: TIconItemSelectData[],
alignIconList: TIconItemSelectData[],
localization: QrCodeLocalizationData,
innerElement: TWQrcodeSetting
tag: boolean
ingoreKeys: string[]
layerIconList: TIconItemSelectData[]
alignIconList: TIconItemSelectData[]
localization: QrCodeLocalizationData
}
const state = reactive<TState>({
@ -98,12 +109,10 @@ const state = reactive<TState>({
localization,
})
const controlStore = useControlStore()
const widgetStore = useWidgetStore()
const forceStore = useForceStore()
// const {
// dActiveElement, dWidgets
// } = useSetupMapGetters(['dActiveElement', 'dWidgets'])
@ -121,7 +130,7 @@ watch(
if (Number(newValue.uuid) == -1) {
state.innerElement.cropEdit = false
widgetStore.updateWidgetData({
uuid: lastUuid ?? "",
uuid: lastUuid ?? '',
key: 'cropEdit',
value: false,
})
@ -134,7 +143,7 @@ watch(
lastUuid = newValue.uuid
}
},
{ deep: true }
{ deep: true },
)
watch(
@ -142,7 +151,7 @@ watch(
(newValue, oldValue) => {
changeValue()
},
{ deep: true }
{ deep: true },
)
function created() {
@ -168,13 +177,10 @@ function changeValue() {
for (let key in state.innerElement) {
const itemKey = key as keyof TWQrcodeSetting
if (state.ingoreKeys.indexOf(key) !== -1) {
(dActiveElement.value as Record<string, any>)[itemKey] = state.innerElement[itemKey]
} else if (
key !== 'setting' && key !== 'record' &&
state.innerElement[itemKey] !== (dActiveElement.value as Record<string, any>)[itemKey]
) {
;(dActiveElement.value as Record<string, any>)[itemKey] = state.innerElement[itemKey]
} else if (key !== 'setting' && key !== 'record' && state.innerElement[itemKey] !== (dActiveElement.value as Record<string, any>)[itemKey]) {
widgetStore.updateWidgetData({
uuid: dActiveElement.value?.uuid || "",
uuid: dActiveElement.value?.uuid || '',
key: key as TUpdateWidgetPayload['key'],
value: state.innerElement[itemKey] as TUpdateWidgetPayload['value'],
})
@ -205,7 +211,7 @@ function finish(key: string, value: number | number[] | string) {
function layerAction(item: TIconItemSelectData) {
console.log(item)
widgetStore.updateLayerIndex({
uuid: dActiveElement.value?.uuid || "",
uuid: dActiveElement.value?.uuid || '',
value: item.value as number,
})
// store.dispatch("updateLayerIndex", {
@ -217,7 +223,7 @@ function layerAction(item: TIconItemSelectData) {
async function alignAction(item: TIconItemSelectData) {
widgetStore.updateAlign({
align: item.value as TUpdateAlignData['align'],
uuid: dActiveElement.value?.uuid || "",
uuid: dActiveElement.value?.uuid || '',
})
// store.dispatch("updateAlign", {
// align: item.value,

View File

@ -9,12 +9,13 @@
<div id="w-image-style">
<el-collapse v-model="state.activeNames">
<el-collapse-item title="位置尺寸" name="1">
<div class="line-layout">
<!-- <div class="line-layout">
<number-input v-model="state.innerElement.left" label="X" @finish="(value) => finish('left', value)" />
<number-input v-model="state.innerElement.top" label="Y" @finish="(value) => finish('top', value)" />
<number-input v-model="state.innerElement.width" style="margin-top: 0.5rem" label="宽" @finish="(value) => finish('width', value)" />
<number-input v-model="state.innerElement.height" style="margin-top: 0.5rem" label="高" @finish="(value) => finish('height', value)" />
</div>
</div> -->
<line-layout />
</el-collapse-item>
<el-collapse-item title="设置颜色" name="2">
<div v-for="(c, ci) in state.innerElement.colors" :key="ci + 'c'">
@ -50,6 +51,7 @@ import { storeToRefs } from 'pinia'
import { useControlStore, useWidgetStore } from '@/store'
import { TUpdateWidgetPayload } from '@/store/design/widget/actions/widget'
import { TUpdateAlignData } from '@/store/design/widget/actions/align'
import LineLayout from '@/components/business/line-layout/index.vue'
type TState = {
activeNames: string[]

View File

@ -2,12 +2,13 @@
<div id="w-text-style">
<el-collapse v-model="state.activeNames">
<el-collapse-item title="位置尺寸" name="1">
<div class="line-layout">
<!-- <div class="line-layout">
<number-input v-model="state.innerElement.left" label="X" @finish="(value) => finish('left', value)" />
<number-input v-model="state.innerElement.top" label="Y" @finish="(value) => finish('top', value)" />
<number-input v-model="state.innerElement.width" style="margin-top: 0.5rem" label="宽" :editable="true" @finish="(value) => finish('width', value)" />
<number-input v-model="state.innerElement.height" style="margin-top: 0.5rem" label="高" :editable="true" @finish="(value) => finish('height', value)" />
</div>
</div> -->
<line-layout />
</el-collapse-item>
<!-- <el-collapse-item title="样式设置" name="2"> -->
<div class="line-layout style-item">
@ -69,6 +70,7 @@ import { storeToRefs } from 'pinia';
import { useControlStore, useForceStore, useWidgetStore } from '@/store';
import { TUpdateWidgetPayload } from '@/store/design/widget/actions/widget';
import { TUpdateAlignData } from '@/store/design/widget/actions/align';
import LineLayout from '@/components/business/line-layout/index.vue'
type TState = {
activeNames: string[],