From 04c69d4941492700e55e62f636666ad7b60fadda Mon Sep 17 00:00:00 2001 From: owen Date: Sat, 19 Sep 2026 18:42:18 +0800 Subject: [PATCH] ow --- WebVue/src/components/basic/MyComputer.vue | 26 ++++++++-- WebVue/src/views/master/DmsFileEnquiry.vue | 57 ++++++++++++---------- 2 files changed, 54 insertions(+), 29 deletions(-) diff --git a/WebVue/src/components/basic/MyComputer.vue b/WebVue/src/components/basic/MyComputer.vue index 388b89a..25feccf 100644 --- a/WebVue/src/components/basic/MyComputer.vue +++ b/WebVue/src/components/basic/MyComputer.vue @@ -17,7 +17,7 @@
-
@@ -63,11 +63,11 @@
- +
-
@@ -92,7 +92,7 @@
{{ formatDate(record.CreatedDatetime) }}
- +
@@ -125,6 +125,24 @@ const emit = defineEmits([ const viewMode = ref<"icon" | "list">("icon"); +/** + * 默认排序:文件夹排在最前面,之后按文件名升序。 + * 只影响显示顺序,不改动父组件传进来的数组。 + * 中文用 localeCompare 走拼音排序(直接比大小会按 Unicode 排,顺序很怪), + * 带 numeric 让「文件2」排在「文件10」前面。 + */ +const sortedDatas = computed(() => { + if (!props.datas) return []; + return [...props.datas].sort((a, b) => { + const aIsDir = a.IsDirectoryIndc == "Y" ? 0 : 1; + const bIsDir = b.IsDirectoryIndc == "Y" ? 0 : 1; + if (aIsDir !== bIsDir) return aIsDir - bIsDir; + return (a.OrgFileName ?? "").localeCompare(b.OrgFileName ?? "", "zh-CN", { + numeric: true, + }); + }); +}); + const isAllChecked = computed(() => { if (!props.datas || props.datas.length === 0) return false; return props.datas.every((d) => props.selectedKeys.some((s) => s.FileId === d.FileId)); diff --git a/WebVue/src/views/master/DmsFileEnquiry.vue b/WebVue/src/views/master/DmsFileEnquiry.vue index 0628df2..0a24278 100644 --- a/WebVue/src/views/master/DmsFileEnquiry.vue +++ b/WebVue/src/views/master/DmsFileEnquiry.vue @@ -5,13 +5,13 @@ @refresh="onReSearch" @search="onSearchByName" @breadcrumb-click="onBreadcrumbClick" /> + :can-amend="canAmend" :can-delete="canDelete" :can-view="canView" :resolve-file-path="resolveUploadFilePath" + @create-folder="onCreate" @upload-start="onUploadStart" @upload-progress="onUploadProgress" + @upload-success="onUploadSuccess" @upload-error="onUploadError" @download="onDownloadSelected" + @share="onShareSelected" @publish="onPublishSelected" @view-preview="onViewPreviewSelected" + @play-video="onUrlVideoPlayItem" @play-audio="onPlayAudioItem" @pause-audio="onPauseAudio" + @continue-audio="onContinueAudio" @preview="onPreviewSelected" @rename="onAmendSelected" @move="onMoveSelected" + @delete="onDeleteSelected" /> @@ -119,11 +119,10 @@ const previousFilePath = ref(""); * 否则会得到 "//DmsFile/UploadDmsFile",被浏览器当作协议相对地址(host = dmsfile)而导致解析失败。 */ const uploadUrl = ref( - `${ - (process.env.NODE_ENV === "development" - ? WebSitePolicy.WebApiRootDev - : WebSitePolicy.WebApiRoot - ).replace(/\/$/, "") + `${(process.env.NODE_ENV === "development" + ? WebSitePolicy.WebApiRootDev + : WebSitePolicy.WebApiRoot + ).replace(/\/$/, "") }/DmsFile/UploadDmsFile` ); @@ -1005,22 +1004,30 @@ const onShareSelected = (items: DmsFileUploadViewDisplayData[]) => { } }; -const onPublishSelected = (items: DmsFileUploadViewDisplayData[]) => { +const onPublishSelected = async (items: DmsFileUploadViewDisplayData[]) => { const files = items.filter((item) => item.IsDirectoryIndc != "Y"); if (files.length === 0) return; - const first = files[0]; - const mediaKey = (item: DmsFileUploadViewDisplayData) => - item.OrderKey || item.OrgFileName || ""; - if (fileTypePolicy.isImage(mediaKey(first))) { - keys.value = files.filter((item) => fileTypePolicy.isImage(mediaKey(item))); - onPublishPhoto(); - } else if (fileTypePolicy.isVideo(mediaKey(first))) { - keys.value = files.filter((item) => fileTypePolicy.isVideo(mediaKey(item))); - onPublishVideo(); - } else if (fileTypePolicy.isAudio(mediaKey(first))) { - keys.value = files.filter((item) => fileTypePolicy.isAudio(mediaKey(item))); - onPublishAudio(); + try { + loading.value = true; + const first = files[0]; + const mediaKey = (item: DmsFileUploadViewDisplayData) => + item.OrderKey || item.OrgFileName || ""; + if (fileTypePolicy.isImage(mediaKey(first))) { + keys.value = files.filter((item) => fileTypePolicy.isImage(mediaKey(item))); + await onPublishPhoto(); + } else if (fileTypePolicy.isVideo(mediaKey(first))) { + keys.value = files.filter((item) => fileTypePolicy.isVideo(mediaKey(item))); + await onPublishVideo(); + } else if (fileTypePolicy.isAudio(mediaKey(first))) { + keys.value = files.filter((item) => fileTypePolicy.isAudio(mediaKey(item))); + await onPublishAudio(); + } + } catch (error) { + loading.value = false; + } finally { + loading.value = false; } + }; const onViewPreviewSelected = (items: DmsFileUploadViewDisplayData[]) => {