Merge pull request #95 from JeremyYu-cn/feat-upgrade-vue3

Fix: the default value of numberSlider component
This commit is contained in:
Jeremy Yu 2024-03-21 14:12:43 +00:00 committed by GitHub
commit 594e66fc2e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 129 additions and 90 deletions

View File

@ -49,7 +49,7 @@ const props = withDefaults(defineProps<TProps>(), {
})
const emit = defineEmits<TEmits>()
const innerValue = ref<number>(1)
const innerValue = ref<number>(props.minValue)
watch(
() => innerValue.value,

View File

@ -7,19 +7,19 @@
-->
<template>
<div id="w-group-style">
<el-collapse v-model="activeNames">
<el-collapse v-model="state.activeNames">
<el-collapse-item title="位置尺寸" name="1">
<div class="line-layout">
<number-input v-model="innerElement.left" label="X" @finish="(value) => finish('left', value)" />
<number-input v-model="innerElement.top" label="Y" @finish="(value) => finish('top', value)" />
<number-input v-model="innerElement.width" style="margin-top: 0.5rem" label="宽" @finish="(value) => finish('width', value)" />
<number-input v-model="innerElement.height" style="margin-top: 0.5rem" label="高" @finish="(value) => finish('height', value)" />
<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>
</el-collapse-item>
<el-collapse-item title="样式设置" name="2">
<el-button plain type="primary" class="block-btn" @click="ungroup(innerElement.uuid)">取消组合</el-button>
<el-button plain type="primary" class="block-btn" @click="store.dispatch('ungroup', state.innerElement.uuid)">取消组合</el-button>
<!-- <div class="ungroup style-item" @click="ungroup(innerElement.uuid)">取消组合</div> -->
<number-slider v-model="innerElement.opacity" class="style-item" label="不透明" :step="0.05" :maxValue="1" @finish="(value) => finish('opacity', value)" />
<number-slider v-model="state.innerElement.opacity" class="style-item" label="不透明" :step="0.05" :maxValue="1" @finish="(value) => finish('opacity', value)" />
<br />
<icon-item-select class="style-item" label="" :data="layerIconList" @finish="layerAction" />
<icon-item-select label="" :data="alignIconList" @finish="alignAction" />
@ -28,98 +28,137 @@
</div>
</template>
<script>
<script lang="ts" setup>
//
const NAME = 'w-group-style'
import { mapGetters, mapActions } from 'vuex'
// const NAME = 'w-group-style'
import { reactive, watch } from 'vue'
import { mapGetters, mapActions, useStore } from 'vuex'
import numberInput from '../../settings/numberInput.vue'
import iconItemSelect from '../../settings/iconItemSelect.vue'
import iconItemSelect, { TIconItemSelectData } from '../../settings/iconItemSelect.vue'
import numberSlider from '../../settings/numberSlider.vue'
import layerIconList from '@/assets/data/LayerIconList'
import alignIconList from '@/assets/data/AlignListData'
import { wGroupSetting } from './groupSetting'
import { useSetupMapGetters } from '@/common/hooks/mapGetters'
export default {
name: NAME,
components: { numberInput, iconItemSelect, numberSlider },
data() {
return {
type TState = {
activeNames: string[],
// defaultValue: 0,
innerElement: typeof wGroupSetting,
tag: boolean,
ingoreKeys: string[],
layerIconList: TIconItemSelectData[],
alignIconList: TIconItemSelectData[],
}
const state = reactive<TState>({
activeNames: ['1', '2', '3', '4'],
// defaultValue: 0,
innerElement: {},
innerElement: JSON.parse(JSON.stringify(wGroupSetting)),
tag: false,
ingoreKeys: ['name', 'width', 'height'],
layerIconList,
alignIconList,
}
})
const store = useStore()
const { dActiveElement } = useSetupMapGetters(['dActiveElement'])
let dMoving = false
// computed: {
// ...mapGetters(['dActiveElement']),
// },
watch(
() => dActiveElement.value,
(newValue, oldValue) => {
change()
},
computed: {
...mapGetters(['dActiveElement']),
{ deep: true }
)
watch(
() => state.innerElement,
(newValue, oldValue) => {
changeValue()
},
watch: {
dActiveElement: {
handler(newValue, oldValue) {
this.change()
},
deep: true,
},
innerElement: {
handler(newValue, oldValue) {
this.changeValue()
},
deep: true,
},
},
created() {
this.change()
},
methods: {
...mapActions(['updateWidgetData', 'updateAlign', 'updateLayerIndex', 'ungroup']),
change() {
this.tag = true
this.innerElement = JSON.parse(JSON.stringify(this.dActiveElement))
},
changeValue() {
if (this.tag) {
this.tag = false
{ deep: true }
)
function created() {
change()
}
created()
// ...mapActions(['updateWidgetData', 'updateAlign', 'updateLayerIndex', 'ungroup']),
function change() {
state.tag = true
state.innerElement = JSON.parse(JSON.stringify(dActiveElement.value))
}
function changeValue() {
if (state.tag) {
state.tag = false
return
}
if (this.dMoving) {
if (dMoving) {
return
}
for (let key in this.innerElement) {
if (this.ingoreKeys.indexOf(key) !== -1) {
this.dActiveElement[key] = this.innerElement[key]
} else if (key !== 'setting' && key !== 'record' && this.innerElement[key] !== this.dActiveElement[key]) {
this.updateWidgetData({
uuid: this.dActiveElement.uuid,
for (let key in state.innerElement) {
const itemKey = key as keyof typeof wGroupSetting
if (state.ingoreKeys.indexOf(itemKey) !== -1) {
dActiveElement.value[itemKey] = state.innerElement[itemKey]
} else if (key !== 'setting' && key !== 'record' && state.innerElement[itemKey] !== dActiveElement.value[itemKey]) {
store.dispatch("updateWidgetData", {
uuid: dActiveElement.value.uuid,
key: key,
value: this.innerElement[key],
value: state.innerElement[itemKey],
})
// this.updateWidgetData({
// uuid: this.dActiveElement.uuid,
// key: key,
// value: this.innerElement[key],
// })
}
}
},
finish(key, value) {
this.updateWidgetData({
uuid: this.dActiveElement.uuid,
}
function finish(key: string, value: string | number | number[]) {
store.dispatch("updateWidgetData", {
uuid: dActiveElement.value.uuid,
key: key,
value: value,
pushHistory: true,
})
},
layerAction(item) {
this.updateLayerIndex({
uuid: this.dActiveElement.uuid,
// this.updateWidgetData({
// uuid: this.dActiveElement.uuid,
// key: key,
// value: value,
// pushHistory: true,
// })
}
function layerAction(item: TIconItemSelectData) {
store.dispatch("updateLayerIndex", {
uuid: dActiveElement.value.uuid,
value: item.value,
isGroup: true,
})
},
alignAction(item) {
this.updateAlign({
// this.updateLayerIndex({
// uuid: this.dActiveElement.uuid,
// value: item.value,
// isGroup: true,
// })
}
function alignAction(item: TIconItemSelectData) {
store.dispatch("updateAlign", {
align: item.value,
uuid: this.dActiveElement.uuid,
uuid: dActiveElement.value.uuid,
})
},
},
}
</script>