ow
This commit is contained in:
1 parent
441d1e821e
commit
04c69d4941
2 files changed
+54
-29
No files matched your search
@@ -17,7 +17,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="my-computer-body" v-if="viewMode === 'icon'">
|
<div class="my-computer-body" v-if="viewMode === 'icon'">
|
||||||
<div v-for="record in datas" :key="record.FileId + '-' + record.FileName" class="file-card-wrapper"
|
<div v-for="record in sortedDatas" :key="record.FileId + '-' + record.FileName" class="file-card-wrapper"
|
||||||
@click="onCardClick(record)" @dblclick="onCardDblClick(record)">
|
@click="onCardClick(record)" @dblclick="onCardDblClick(record)">
|
||||||
<div class="file-checkbox-wrapper">
|
<div class="file-checkbox-wrapper">
|
||||||
<a-checkbox :checked="isSelected(record)" @click.stop="toggleSelect(record)" />
|
<a-checkbox :checked="isSelected(record)" @click.stop="toggleSelect(record)" />
|
||||||
@@ -63,11 +63,11 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a-empty v-if="!datas || datas.length === 0" description="暂无文件" />
|
<a-empty v-if="!sortedDatas || sortedDatas.length === 0" description="暂无文件" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="my-computer-body list-body" v-else>
|
<div class="my-computer-body list-body" v-else>
|
||||||
<div v-for="record in datas" :key="record.FileId + '-' + record.FileName" class="list-item"
|
<div v-for="record in sortedDatas" :key="record.FileId + '-' + record.FileName" class="list-item"
|
||||||
:class="{ selected: isSelected(record) }" @click="onCardClick(record)" @dblclick="onCardDblClick(record)">
|
:class="{ selected: isSelected(record) }" @click="onCardClick(record)" @dblclick="onCardDblClick(record)">
|
||||||
<a-checkbox :checked="isSelected(record)" @click.stop="toggleSelect(record)" />
|
<a-checkbox :checked="isSelected(record)" @click.stop="toggleSelect(record)" />
|
||||||
<div class="list-icon">
|
<div class="list-icon">
|
||||||
@@ -92,7 +92,7 @@
|
|||||||
<div class="list-date">{{ formatDate(record.CreatedDatetime) }}</div>
|
<div class="list-date">{{ formatDate(record.CreatedDatetime) }}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a-empty v-if="!datas || datas.length === 0" description="暂无文件" />
|
<a-empty v-if="!sortedDatas || sortedDatas.length === 0" description="暂无文件" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -125,6 +125,24 @@ const emit = defineEmits([
|
|||||||
|
|
||||||
const viewMode = ref<"icon" | "list">("icon");
|
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(() => {
|
const isAllChecked = computed(() => {
|
||||||
if (!props.datas || props.datas.length === 0) return false;
|
if (!props.datas || props.datas.length === 0) return false;
|
||||||
return props.datas.every((d) => props.selectedKeys.some((s) => s.FileId === d.FileId));
|
return props.datas.every((d) => props.selectedKeys.some((s) => s.FileId === d.FileId));
|
||||||
|
|||||||
@@ -5,13 +5,13 @@
|
|||||||
@refresh="onReSearch" @search="onSearchByName" @breadcrumb-click="onBreadcrumbClick" />
|
@refresh="onReSearch" @search="onSearchByName" @breadcrumb-click="onBreadcrumbClick" />
|
||||||
|
|
||||||
<OperatorStation :selected-items="keys" :upload-url="uploadUrl" :headers="headers" :can-create="canCreate"
|
<OperatorStation :selected-items="keys" :upload-url="uploadUrl" :headers="headers" :can-create="canCreate"
|
||||||
:can-amend="canAmend" :can-delete="canDelete" :can-view="canView"
|
:can-amend="canAmend" :can-delete="canDelete" :can-view="canView" :resolve-file-path="resolveUploadFilePath"
|
||||||
:resolve-file-path="resolveUploadFilePath" @create-folder="onCreate" @upload-start="onUploadStart"
|
@create-folder="onCreate" @upload-start="onUploadStart" @upload-progress="onUploadProgress"
|
||||||
@upload-progress="onUploadProgress" @upload-success="onUploadSuccess" @upload-error="onUploadError"
|
@upload-success="onUploadSuccess" @upload-error="onUploadError" @download="onDownloadSelected"
|
||||||
@download="onDownloadSelected" @share="onShareSelected" @publish="onPublishSelected"
|
@share="onShareSelected" @publish="onPublishSelected" @view-preview="onViewPreviewSelected"
|
||||||
@view-preview="onViewPreviewSelected" @play-video="onUrlVideoPlayItem" @play-audio="onPlayAudioItem"
|
@play-video="onUrlVideoPlayItem" @play-audio="onPlayAudioItem" @pause-audio="onPauseAudio"
|
||||||
@pause-audio="onPauseAudio" @continue-audio="onContinueAudio" @preview="onPreviewSelected"
|
@continue-audio="onContinueAudio" @preview="onPreviewSelected" @rename="onAmendSelected" @move="onMoveSelected"
|
||||||
@rename="onAmendSelected" @move="onMoveSelected" @delete="onDeleteSelected" />
|
@delete="onDeleteSelected" />
|
||||||
|
|
||||||
<MyComputer :datas="datas" v-model:selected-keys="keys" @select-change="onSelectChange"
|
<MyComputer :datas="datas" v-model:selected-keys="keys" @select-change="onSelectChange"
|
||||||
@open-folder="onOpenFolder" @open-file="onOpenFile" @preview-image="onPreviewOrgFile" />
|
@open-folder="onOpenFolder" @open-file="onOpenFile" @preview-image="onPreviewOrgFile" />
|
||||||
@@ -119,11 +119,10 @@ const previousFilePath = ref<string>("");
|
|||||||
* 否则会得到 "//DmsFile/UploadDmsFile",被浏览器当作协议相对地址(host = dmsfile)而导致解析失败。
|
* 否则会得到 "//DmsFile/UploadDmsFile",被浏览器当作协议相对地址(host = dmsfile)而导致解析失败。
|
||||||
*/
|
*/
|
||||||
const uploadUrl = ref<string>(
|
const uploadUrl = ref<string>(
|
||||||
`${
|
`${(process.env.NODE_ENV === "development"
|
||||||
(process.env.NODE_ENV === "development"
|
? WebSitePolicy.WebApiRootDev
|
||||||
? WebSitePolicy.WebApiRootDev
|
: WebSitePolicy.WebApiRoot
|
||||||
: WebSitePolicy.WebApiRoot
|
).replace(/\/$/, "")
|
||||||
).replace(/\/$/, "")
|
|
||||||
}/DmsFile/UploadDmsFile`
|
}/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");
|
const files = items.filter((item) => item.IsDirectoryIndc != "Y");
|
||||||
if (files.length === 0) return;
|
if (files.length === 0) return;
|
||||||
const first = files[0];
|
try {
|
||||||
const mediaKey = (item: DmsFileUploadViewDisplayData) =>
|
loading.value = true;
|
||||||
item.OrderKey || item.OrgFileName || "";
|
const first = files[0];
|
||||||
if (fileTypePolicy.isImage(mediaKey(first))) {
|
const mediaKey = (item: DmsFileUploadViewDisplayData) =>
|
||||||
keys.value = files.filter((item) => fileTypePolicy.isImage(mediaKey(item)));
|
item.OrderKey || item.OrgFileName || "";
|
||||||
onPublishPhoto();
|
if (fileTypePolicy.isImage(mediaKey(first))) {
|
||||||
} else if (fileTypePolicy.isVideo(mediaKey(first))) {
|
keys.value = files.filter((item) => fileTypePolicy.isImage(mediaKey(item)));
|
||||||
keys.value = files.filter((item) => fileTypePolicy.isVideo(mediaKey(item)));
|
await onPublishPhoto();
|
||||||
onPublishVideo();
|
} else if (fileTypePolicy.isVideo(mediaKey(first))) {
|
||||||
} else if (fileTypePolicy.isAudio(mediaKey(first))) {
|
keys.value = files.filter((item) => fileTypePolicy.isVideo(mediaKey(item)));
|
||||||
keys.value = files.filter((item) => fileTypePolicy.isAudio(mediaKey(item)));
|
await onPublishVideo();
|
||||||
onPublishAudio();
|
} 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[]) => {
|
const onViewPreviewSelected = (items: DmsFileUploadViewDisplayData[]) => {
|
||||||
|
|||||||
Reference in new issue
Block a user