mirror of
https://github.com/palxiao/poster-design.git
synced 2025-07-15 16:02:19 +08:00
feat: convert draw container to composition API
This commit is contained in:
parent
bbfb860c77
commit
df27fad99b
@ -39,6 +39,7 @@
|
|||||||
"vuex": "^4.0.0-0"
|
"vuex": "^4.0.0-0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@types/fontfaceobserver": "^2.1.3",
|
||||||
"@types/node": "^20.11.24",
|
"@types/node": "^20.11.24",
|
||||||
"@types/throttle-debounce": "^2.1.0",
|
"@types/throttle-debounce": "^2.1.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^7.1.0",
|
"@typescript-eslint/eslint-plugin": "^7.1.0",
|
||||||
|
@ -8,9 +8,9 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts" setup>
|
||||||
import { defineComponent, reactive, toRefs } from 'vue'
|
import { StyleValue, onMounted, reactive, nextTick } from 'vue'
|
||||||
import { mapActions, mapGetters } from 'vuex'
|
import { useStore } from 'vuex'
|
||||||
import api from '@/api'
|
import api from '@/api'
|
||||||
import wGroup from '@/components/modules/widgets/wGroup/wGroup.vue'
|
import wGroup from '@/components/modules/widgets/wGroup/wGroup.vue'
|
||||||
import Preload from '@/utils/plugins/preload'
|
import Preload from '@/utils/plugins/preload'
|
||||||
@ -18,57 +18,66 @@ import FontFaceObserver from 'fontfaceobserver'
|
|||||||
import { fontWithDraw, font2style } from '@/utils/widgets/loadFontRule'
|
import { fontWithDraw, font2style } from '@/utils/widgets/loadFontRule'
|
||||||
import designBoard from '@/components/modules/layout/designBoard/index.vue'
|
import designBoard from '@/components/modules/layout/designBoard/index.vue'
|
||||||
import zoomControl from '@/components/modules/layout/zoomControl/index.vue'
|
import zoomControl from '@/components/modules/layout/zoomControl/index.vue'
|
||||||
|
import { useSetupMapGetters } from '@/common/hooks/mapGetters'
|
||||||
|
import { useRoute } from 'vue-router'
|
||||||
|
|
||||||
export default defineComponent({
|
type TState = {
|
||||||
components: { designBoard, zoomControl },
|
style: StyleValue
|
||||||
// mixins: [shortcuts],
|
}
|
||||||
setup() {
|
|
||||||
const state = reactive({
|
// mixins: [shortcuts],
|
||||||
|
const store = useStore()
|
||||||
|
const route = useRoute()
|
||||||
|
const state = reactive<TState>({
|
||||||
style: {
|
style: {
|
||||||
left: '0px',
|
left: '0px',
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
const { dPage } = useSetupMapGetters(['dPage'])
|
||||||
|
|
||||||
return {
|
onMounted(() => {
|
||||||
...toRefs(state),
|
store.dispatch('initGroupJson', JSON.stringify(wGroup.setting))
|
||||||
}
|
// initGroupJson(JSON.stringify(wGroup.setting))
|
||||||
},
|
nextTick(() => {
|
||||||
computed: {
|
load()
|
||||||
...mapGetters(['dPage']),
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
this.initGroupJson(JSON.stringify(wGroup.setting))
|
|
||||||
this.$nextTick(() => {
|
|
||||||
this.load()
|
|
||||||
})
|
})
|
||||||
},
|
})
|
||||||
methods: {
|
|
||||||
...mapActions(['initGroupJson', 'setTemplate', 'addGroup']),
|
// ...mapActions(['initGroupJson', 'setTemplate', 'addGroup']),
|
||||||
async load() {
|
async function load() {
|
||||||
let loadFlag = false
|
let loadFlag = false
|
||||||
const { id, tempid, tempType: type } = this.$route.query
|
const { id, tempid, tempType: type } = route.query
|
||||||
if (id || tempid) {
|
if (id || tempid) {
|
||||||
const { data, width, height } = await api.home[id ? 'getWorks' : 'getTempDetail']({ id: id || tempid, type })
|
const postData = {
|
||||||
|
id: Number(id || tempid),
|
||||||
|
type: Number(type)
|
||||||
|
}
|
||||||
|
const { data, width, height } = await api.home[id ? 'getWorks' : 'getTempDetail'](postData)
|
||||||
const content = JSON.parse(data)
|
const content = JSON.parse(data)
|
||||||
const widgets = type == 1 ? content : content.widgets
|
const widgets = Number(type) == 1 ? content : content.widgets
|
||||||
|
|
||||||
if (type == 1) {
|
if (Number(type) == 1) {
|
||||||
this.dPage.width = width
|
dPage.value.width = width
|
||||||
this.dPage.height = height
|
dPage.value.height = height
|
||||||
this.dPage.backgroundColor = '#ffffff00'
|
dPage.value.backgroundColor = '#ffffff00'
|
||||||
this.addGroup(content)
|
store.dispatch('addGroup', content)
|
||||||
|
// addGroup(content)
|
||||||
} else {
|
} else {
|
||||||
this.$store.commit('setDPage', content.page)
|
store.commit('setDPage', content.page)
|
||||||
id ? this.$store.commit('setDWidgets', widgets) : this.setTemplate(widgets)
|
if (id) {
|
||||||
|
store.commit('setDWidgets', widgets)
|
||||||
|
} else {
|
||||||
|
store.dispatch('setTemplate', widgets)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.$nextTick()
|
await nextTick()
|
||||||
|
|
||||||
const imgsData: any = []
|
const imgsData: HTMLImageElement[] = []
|
||||||
const svgsData: any = []
|
const svgsData: HTMLImageElement[] = []
|
||||||
const fontLoaders: any = []
|
const fontLoaders: Promise<void>[] = []
|
||||||
const fontContent: any = {}
|
const fontContent: Record<string, string> = {}
|
||||||
let fontData: any = []
|
let fontData: string[] = []
|
||||||
widgets.forEach((item: any) => {
|
widgets.forEach((item: any) => {
|
||||||
if (item.fontClass && item.fontClass.value) {
|
if (item.fontClass && item.fontClass.value) {
|
||||||
const loader = new FontFaceObserver(item.fontClass.value)
|
const loader = new FontFaceObserver(item.fontClass.value)
|
||||||
@ -131,9 +140,7 @@ export default defineComponent({
|
|||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
!loadFlag && (window as any).loadFinishToInject('done')
|
!loadFlag && (window as any).loadFinishToInject('done')
|
||||||
}, 60000)
|
}, 60000)
|
||||||
},
|
}
|
||||||
},
|
|
||||||
})
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="less" scoped>
|
<style lang="less" scoped>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user