Merge remote-tracking branch 'origin/master'

pull/848/MERGE
YunaiV 2026-01-09 22:37:33 +08:00
commit 1baa3eae2f
13 changed files with 95 additions and 53 deletions

View File

@ -28,7 +28,8 @@ const props = defineProps({
default: () => undefined
},
readonly: propTypes.bool.def(false),
modelValue: propTypes.string.def('')
modelValue: propTypes.string.def(''),
directory: propTypes.string.def('editor-default')
})
const emit = defineEmits(['change', 'update:modelValue'])
@ -115,9 +116,9 @@ const editorConfig = computed((): IEditorConfig => {
['uploadImage']: {
server: getUploadUrl(),
// 2M
maxFileSize: 5 * 1024 * 1024,
maxFileSize: 10 * 1024 * 1024,
// 100
maxNumberOfFiles: 10,
maxNumberOfFiles: 100,
// ['image/*'] []
allowedFileTypes: ['image/*'],
@ -133,6 +134,19 @@ const editorConfig = computed((): IEditorConfig => {
// form-data fieldNamewangeditor-uploaded-image
fieldName: 'file',
//
meta: {
directory: `${props.directory}-image`
},
metaWithUrl: false,
// uppy
uppyConfig: {
onBeforeFileAdded: (newFile: any) => {
newFile.id = `${newFile.id}-${Date.now()}`
return newFile
}
},
//
onBeforeUpload(file: File) {
@ -163,7 +177,7 @@ const editorConfig = computed((): IEditorConfig => {
['uploadVideo']: {
server: getUploadUrl(),
// 10M
maxFileSize: 10 * 1024 * 1024,
maxFileSize: 1024 * 1024 * 1024,
// 100
maxNumberOfFiles: 10,
// ['video/*'] []
@ -181,6 +195,19 @@ const editorConfig = computed((): IEditorConfig => {
// form-data fieldNamewangeditor-uploaded-image
fieldName: 'file',
//
meta: {
directory: `${props.directory}-video`
},
metaWithUrl: false,
// uppy
uppyConfig: {
onBeforeFileAdded: (newFile: any) => {
newFile.id = `${newFile.id}-${Date.now()}`
return newFile
}
},
//
onBeforeUpload(file: File) {

View File

@ -17,7 +17,7 @@ const props = defineProps({
})
const message = useMessage() //
const { copy } = useClipboard() // copy
const { copy } = useClipboard({ legacy: true }) // copy
const contentRef = ref()
const md = new MarkdownIt({

View File

@ -1,5 +1,9 @@
import * as FileApi from '@/api/infra/file'
import { UploadRawFile, UploadRequestOptions, UploadProgressEvent } from 'element-plus/es/components/upload/src/upload'
import {
UploadRawFile,
UploadRequestOptions,
UploadProgressEvent
} from 'element-plus/es/components/upload/src/upload'
import axios, { AxiosProgressEvent } from 'axios'
/**
@ -19,7 +23,7 @@ export const useUpload = (directory?: string) => {
// 文件上传进度监听
const uploadProgressHandler = (evt: AxiosProgressEvent) => {
const upEvt: UploadProgressEvent = Object.assign(evt.event)
upEvt.percent = evt.progress ? (evt.progress * 100) : 0
upEvt.percent = evt.progress ? evt.progress * 100 : 0
options.onProgress(upEvt) // 触发 el-upload 的 on-progress
}
@ -33,7 +37,7 @@ export const useUpload = (directory?: string) => {
return axios
.put(presignedInfo.uploadUrl, options.file, {
headers: {
'Content-Type': options.file.type
'Content-Type': options.file.type || 'application/octet-stream'
},
onUploadProgress: uploadProgressHandler
})
@ -80,7 +84,7 @@ function createFile(vo: FileApi.FilePresignedUrlRespVO, file: UploadRawFile, fil
url: vo.url,
path: vo.path,
name: fileName,
type: file.type,
type: file.type || 'application/octet-stream',
size: file.size
}
FileApi.createFile(fileVo)

View File

@ -109,6 +109,7 @@ watch(
//
const copyConfig = async () => {
const { copy, copied, isSupported } = useClipboard({
legacy: true,
source: `
//
breadcrumb: ${appStore.getBreadcrumb},
@ -296,7 +297,7 @@ const clear = () => {
$prefix-cls: #{$namespace}-setting;
.#{$prefix-cls} {
z-index: 1200; /* 修正没有z-index会被表格层覆盖,值不要超过4000 */
border-radius: 6px 0 0 6px;
z-index: 1200;/*修正没有z-index会被表格层覆盖,值不要超过4000*/
}
</style>

View File

@ -8,7 +8,15 @@ const router = createRouter({
history: createWebHistory(import.meta.env.VITE_BASE_PATH), // createWebHashHistory URL带#createWebHistory URL不带#
strict: true,
routes: remainingRouter as RouteRecordRaw[],
scrollBehavior: () => ({ left: 0, top: 0 })
scrollBehavior: () => {
// 新开标签时、返回标签时,滚动条回到顶部,否则会保留上次标签的滚动位置。
const scrollbarWrap = document.querySelector('.v-layout-content-scrollbar .el-scrollbar__wrap')
if (scrollbarWrap) {
// scrollbarWrap.scrollTo({ left: 0, top: 0, behavior: 'auto' })
scrollbarWrap.scrollTop = 0
}
return { left: 0, top: 0 }
}
})
export const resetRouter = (): void => {

View File

@ -126,7 +126,7 @@ import userAvatarDefaultImg from '@/assets/imgs/avatar.gif'
import roleAvatarDefaultImg from '@/assets/ai/gpt.svg'
const message = useMessage() //
const { copy } = useClipboard() // copy
const { copy } = useClipboard({ legacy: true }) // copy
const userStore = useUserStore()
// ()

View File

@ -45,7 +45,7 @@
import { useClipboard } from '@vueuse/core'
const message = useMessage() //
const { copied, copy } = useClipboard() //
const { copied, copy } = useClipboard({ legacy: true }) //
const props = defineProps({
content: {

View File

@ -136,7 +136,7 @@ const makeTemplate = () => {
/** 复制 **/
const copy = async (text: string) => {
const textToCopy = JSON.stringify(text, null, 2)
const { copy, copied, isSupported } = useClipboard({ source: textToCopy })
const { copy, copied, isSupported } = useClipboard({ legacy: true, source: textToCopy })
if (!isSupported) {
message.error(t('common.copyError'))
} else {

View File

@ -180,7 +180,7 @@ const handleFiles = (datas: CodegenApi.CodegenPreviewVO[]) => {
/** 复制 **/
const copy = async (text: string) => {
const { copy, copied, isSupported } = useClipboard({ source: text })
const { copy, copied, isSupported } = useClipboard({ legacy: true, source: text })
if (!isSupported) {
message.error(t('common.copyError'))
return

View File

@ -136,6 +136,7 @@ import { fileSizeFormatter } from '@/utils'
import { dateFormatter } from '@/utils/formatTime'
import * as FileApi from '@/api/infra/file'
import FileForm from './FileForm.vue'
import { useClipboard } from '@vueuse/core'
defineOptions({ name: 'InfraFile' })
@ -186,29 +187,15 @@ const openForm = () => {
}
/** 复制到剪贴板方法 */
const copyToClipboard = (text: string) => {
if (navigator.clipboard && window.isSecureContext) {
navigator.clipboard
.writeText(text)
.then(() => {
message.success('复制成功')
})
.catch(() => {
message.error('复制失败')
})
} else {
// clipboard
try {
const textarea = document.createElement('textarea')
textarea.value = text
document.body.appendChild(textarea)
textarea.select()
document.execCommand('copy')
document.body.removeChild(textarea)
message.success('复制成功')
} catch (error) {
message.error('复制失败')
}
const copyToClipboard = async (text: string) => {
const { copy, copied, isSupported } = useClipboard({ legacy: true, source: text })
if (!isSupported) {
message.error(t('common.copyError'))
return
}
await copy()
if (unref(copied)) {
message.success(t('common.copySuccess'))
}
}

View File

@ -39,8 +39,10 @@
import DeviceForm from '@/views/iot/device/device/DeviceForm.vue'
import { ProductVO } from '@/api/iot/product/product'
import { DeviceVO } from '@/api/iot/device/device'
import { useClipboard } from '@vueuse/core'
const message = useMessage()
const { t } = useI18n() //
const router = useRouter()
const { product, device } = defineProps<{ product: ProductVO; device: DeviceVO }>()
@ -54,11 +56,14 @@ const openForm = (type: string, id?: number) => {
/** 复制到剪贴板方法 */
const copyToClipboard = async (text: string) => {
try {
await navigator.clipboard.writeText(text)
message.success('复制成功')
} catch (error) {
message.error('复制失败')
const { copy, copied, isSupported } = useClipboard({ legacy: true, source: text })
if (!isSupported) {
message.error(t('common.copyError'))
return
}
await copy()
if (unref(copied)) {
message.success(t('common.copySuccess'))
}
}

View File

@ -140,8 +140,10 @@ import { DeviceVO } from '@/api/iot/device/device'
import { DeviceApi, IotDeviceAuthInfoVO } from '@/api/iot/device/device'
import Map from '@/components/Map/index.vue'
import { ref, computed } from 'vue'
import { useClipboard } from '@vueuse/core'
const message = useMessage() //
const { t } = useI18n() //
const { product, device } = defineProps<{ product: ProductVO; device: DeviceVO }>() // Props
const emit = defineEmits(['refresh']) // Emits
@ -165,11 +167,14 @@ const getLocationString = () => {
/** 复制到剪贴板方法 */
const copyToClipboard = async (text: string) => {
try {
await navigator.clipboard.writeText(text)
message.success('复制成功')
} catch (error) {
message.error('复制失败')
const { copy, copied, isSupported } = useClipboard({ legacy: true, source: text })
if (!isSupported) {
message.error(t('common.copyError'))
return
}
await copy()
if (unref(copied)) {
message.success(t('common.copySuccess'))
}
}

View File

@ -54,18 +54,23 @@
<script setup lang="ts">
import ProductForm from '@/views/iot/product/product/ProductForm.vue'
import { ProductApi, ProductVO } from '@/api/iot/product/product'
import { useClipboard } from '@vueuse/core'
const message = useMessage()
const { t } = useI18n() //
const { product } = defineProps<{ product: ProductVO }>() // Props
/** 复制到剪贴板方法 */
const copyToClipboard = async (text: string) => {
try {
await navigator.clipboard.writeText(text)
message.success('复制成功')
} catch (error) {
message.error('复制失败')
const { copy, copied, isSupported } = useClipboard({ legacy: true, source: text })
if (!isSupported) {
message.error(t('common.copyError'))
return
}
await copy()
if (unref(copied)) {
message.success(t('common.copySuccess'))
}
}