fix: copy&paste bug

This commit is contained in:
ShawnPhang 2024-03-14 00:50:30 +08:00
parent 22ff9dfbc7
commit 8d49a66435
6 changed files with 62 additions and 50 deletions

View File

@ -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;

View File

@ -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')
})
} }
/** /**
* *

View File

@ -20,9 +20,13 @@ 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 () => {
return new Promise<void>((resolve) => {
navigator.clipboard navigator.clipboard
.read() .read()
.then(async (dataTransfer: any) => { .then(async (dataTransfer: any) => {
if (store.getters.dActiveElement.editable) {
return
}
for (let i = 0; i < dataTransfer.length; i++) { for (let i = 0; i < dataTransfer.length; i++) {
const item = dataTransfer[i] const item = dataTransfer[i]
if (item.types.toString().indexOf('image') !== -1) { if (item.types.toString().indexOf('image') !== -1) {
@ -44,6 +48,12 @@ export default () => {
setting.left = pW / 2 - width / 2 setting.left = pW / 2 - width / 2
setting.top = pH / 2 - height / 2 setting.top = pH / 2 - height / 2
store.dispatch('addWidget', setting) store.dispatch('addWidget', setting)
// 清空剪贴板,防止多次上传图片
navigator.clipboard.write([
new ClipboardItem({
'text/plain': new Blob([''], {type: 'text/plain'})
})
])
break break
} else if (item.types.toString().indexOf('text') !== -1) { } else if (item.types.toString().indexOf('text') !== -1) {
store.commit('setShowMoveable', false) // 清理掉上一次的选择 store.commit('setShowMoveable', false) // 清理掉上一次的选择
@ -55,6 +65,8 @@ export default () => {
} }
}) })
.catch((error) => { .catch((error) => {
console.error('无法读取剪贴板内容:', error) // 剪贴板内容为空
resolve()
})
}) })
} }

View File

@ -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) {

View File

@ -29,7 +29,6 @@ const all = {
dDraging: false, // 是否正在抓取组件 dDraging: false, // 是否正在抓取组件
dResizeing: false, // 是否正在调整组件宽高 dResizeing: false, // 是否正在调整组件宽高
dShowRefLine: true, // 是否显示参考线 dShowRefLine: true, // 是否显示参考线
dResizeWH: { dResizeWH: {
// 初始化调整大小时组件的宽高 // 初始化调整大小时组件的宽高
width: 0, width: 0,

View File

@ -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: '',