mirror of
https://github.com/palxiao/poster-design.git
synced 2025-06-08 03:19:59 +08:00
fix: copy&paste bug
This commit is contained in:
parent
22ff9dfbc7
commit
8d49a66435
@ -65,7 +65,7 @@ import { computed, onMounted, reactive, ref, watch } from 'vue';
|
|||||||
|
|
||||||
type TProps = {
|
type TProps = {
|
||||||
label?: string
|
label?: string
|
||||||
modelValue?: Record<string, any>
|
modelValue?: Record<string, any> | string | number
|
||||||
suffix?: string
|
suffix?: string
|
||||||
data: Record<string, any>
|
data: Record<string, any>
|
||||||
disable?: boolean
|
disable?: boolean
|
||||||
@ -189,9 +189,8 @@ function down() {
|
|||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style lang="less" scoped>
|
<style lang="less" scoped>
|
||||||
// Color variables (appears count calculates by raw css)
|
@color0: #e1e1e1;
|
||||||
@color0: #e1e1e1; // Appears 2 times
|
@color1: #d1d1d1;
|
||||||
@color1: #d1d1d1; // Appears 2 times
|
|
||||||
|
|
||||||
.value-select {
|
.value-select {
|
||||||
// height: 60px;
|
// height: 60px;
|
||||||
|
@ -50,7 +50,7 @@ function checkGroupChild(pid: number | string, key: any) {
|
|||||||
return itHas
|
return itHas
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 复制
|
* 复制元素
|
||||||
*/
|
*/
|
||||||
function copy() {
|
function copy() {
|
||||||
if (store.getters.dActiveElement.uuid === '-1') {
|
if (store.getters.dActiveElement.uuid === '-1') {
|
||||||
@ -64,13 +64,14 @@ function copy() {
|
|||||||
* 粘贴
|
* 粘贴
|
||||||
*/
|
*/
|
||||||
function paste() {
|
function paste() {
|
||||||
handlePaste()
|
handlePaste().then(() => {
|
||||||
if (store.getters.dCopyElement.length === 0) {
|
if (store.getters.dCopyElement.length === 0) {
|
||||||
return
|
return
|
||||||
} else if (store.getters.dActiveElement.isContainer && checkGroupChild(store.getters.dActiveElement.uuid, 'editable')) {
|
} else if (store.getters.dActiveElement.isContainer && checkGroupChild(store.getters.dActiveElement.uuid, 'editable')) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
!store.getters.dActiveElement.editable && store.dispatch('pasteWidget')
|
!store.getters.dActiveElement.editable && store.dispatch('pasteWidget')
|
||||||
|
})
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 撤销
|
* 撤销
|
||||||
|
@ -20,41 +20,53 @@ import wImage from '@/components/modules/widgets/wImage/wImage.vue'
|
|||||||
import wText from '@/components/modules/widgets/wText/wText.vue'
|
import wText from '@/components/modules/widgets/wText/wText.vue'
|
||||||
|
|
||||||
export default () => {
|
export default () => {
|
||||||
navigator.clipboard
|
return new Promise<void>((resolve) => {
|
||||||
.read()
|
navigator.clipboard
|
||||||
.then(async (dataTransfer: any) => {
|
.read()
|
||||||
for (let i = 0; i < dataTransfer.length; i++) {
|
.then(async (dataTransfer: any) => {
|
||||||
const item = dataTransfer[i]
|
if (store.getters.dActiveElement.editable) {
|
||||||
if (item.types.toString().indexOf('image') !== -1) {
|
return
|
||||||
const imageBlob = await item.getType(item.types[0])
|
|
||||||
const file = new File([imageBlob], 'screenshot.png', { type: 'image/png' })
|
|
||||||
// 上传图片
|
|
||||||
const qnOptions = { bucket: 'xp-design', prePath: 'user' }
|
|
||||||
const result: any = await Qiniu.upload(file, qnOptions)
|
|
||||||
const { width, height }: any = await getImage(file)
|
|
||||||
const url = _config.IMG_URL + result.key
|
|
||||||
await api.material.addMyPhoto({ width, height, url })
|
|
||||||
// 添加图片到画布中
|
|
||||||
store.commit('setShowMoveable', false) // 清理掉上一次的选择
|
|
||||||
const setting = JSON.parse(JSON.stringify(wImage.setting))
|
|
||||||
setting.width = width
|
|
||||||
setting.height = height
|
|
||||||
setting.imgUrl = url
|
|
||||||
const { width: pW, height: pH } = store.getters.dPage
|
|
||||||
setting.left = pW / 2 - width / 2
|
|
||||||
setting.top = pH / 2 - height / 2
|
|
||||||
store.dispatch('addWidget', setting)
|
|
||||||
break
|
|
||||||
} else if (item.types.toString().indexOf('text') !== -1) {
|
|
||||||
store.commit('setShowMoveable', false) // 清理掉上一次的选择
|
|
||||||
const setting = JSON.parse(JSON.stringify(wText.setting))
|
|
||||||
setting.text = await navigator.clipboard.readText()
|
|
||||||
store.dispatch('addWidget', setting)
|
|
||||||
break
|
|
||||||
}
|
}
|
||||||
}
|
for (let i = 0; i < dataTransfer.length; i++) {
|
||||||
})
|
const item = dataTransfer[i]
|
||||||
.catch((error) => {
|
if (item.types.toString().indexOf('image') !== -1) {
|
||||||
console.error('无法读取剪贴板内容:', error)
|
const imageBlob = await item.getType(item.types[0])
|
||||||
})
|
const file = new File([imageBlob], 'screenshot.png', { type: 'image/png' })
|
||||||
|
// 上传图片
|
||||||
|
const qnOptions = { bucket: 'xp-design', prePath: 'user' }
|
||||||
|
const result: any = await Qiniu.upload(file, qnOptions)
|
||||||
|
const { width, height }: any = await getImage(file)
|
||||||
|
const url = _config.IMG_URL + result.key
|
||||||
|
await api.material.addMyPhoto({ width, height, url })
|
||||||
|
// 添加图片到画布中
|
||||||
|
store.commit('setShowMoveable', false) // 清理掉上一次的选择
|
||||||
|
const setting = JSON.parse(JSON.stringify(wImage.setting))
|
||||||
|
setting.width = width
|
||||||
|
setting.height = height
|
||||||
|
setting.imgUrl = url
|
||||||
|
const { width: pW, height: pH } = store.getters.dPage
|
||||||
|
setting.left = pW / 2 - width / 2
|
||||||
|
setting.top = pH / 2 - height / 2
|
||||||
|
store.dispatch('addWidget', setting)
|
||||||
|
// 清空剪贴板,防止多次上传图片
|
||||||
|
navigator.clipboard.write([
|
||||||
|
new ClipboardItem({
|
||||||
|
'text/plain': new Blob([''], {type: 'text/plain'})
|
||||||
|
})
|
||||||
|
])
|
||||||
|
break
|
||||||
|
} else if (item.types.toString().indexOf('text') !== -1) {
|
||||||
|
store.commit('setShowMoveable', false) // 清理掉上一次的选择
|
||||||
|
const setting = JSON.parse(JSON.stringify(wText.setting))
|
||||||
|
setting.text = await navigator.clipboard.readText()
|
||||||
|
store.dispatch('addWidget', setting)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
// 剪贴板内容为空
|
||||||
|
resolve()
|
||||||
|
})
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
@ -237,7 +237,7 @@ export default {
|
|||||||
if (activeElement.type === 'page') {
|
if (activeElement.type === 'page') {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
navigator.clipboard.writeText('') // 清空系统剪贴板内容
|
||||||
const container = []
|
const container = []
|
||||||
const selectWidgets = store.state.dSelectWidgets
|
const selectWidgets = store.state.dSelectWidgets
|
||||||
if (selectWidgets.length === 0) {
|
if (selectWidgets.length === 0) {
|
||||||
|
@ -29,7 +29,6 @@ const all = {
|
|||||||
dDraging: false, // 是否正在抓取组件
|
dDraging: false, // 是否正在抓取组件
|
||||||
dResizeing: false, // 是否正在调整组件宽高
|
dResizeing: false, // 是否正在调整组件宽高
|
||||||
dShowRefLine: true, // 是否显示参考线
|
dShowRefLine: true, // 是否显示参考线
|
||||||
|
|
||||||
dResizeWH: {
|
dResizeWH: {
|
||||||
// 初始化调整大小时组件的宽高
|
// 初始化调整大小时组件的宽高
|
||||||
width: 0,
|
width: 0,
|
||||||
|
@ -58,6 +58,7 @@ export default defineConfig({
|
|||||||
},
|
},
|
||||||
server: {
|
server: {
|
||||||
hmr: { overlay: false },
|
hmr: { overlay: false },
|
||||||
|
host: '127.0.0.1'
|
||||||
// proxy: {
|
// proxy: {
|
||||||
// '/api': {
|
// '/api': {
|
||||||
// target: '',
|
// target: '',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user