|
@@ -13,7 +13,9 @@
|
|
|
:rootName="$i18n.t(`gather.${materialTypeAlias}`)"
|
|
|
@click-path="onClickPath"
|
|
|
/>
|
|
|
- <div v-if="searchKey" class="crumbs">{{$i18n.t(`gather.${materialTypeAlias}`)}}</div>
|
|
|
+ <div v-if="searchKey" class="crumbs">
|
|
|
+ {{ $i18n.t(`gather.${materialTypeAlias}`) }}
|
|
|
+ </div>
|
|
|
|
|
|
<div class="table">
|
|
|
<!-- <div class="table-head-row">
|
|
@@ -42,8 +44,6 @@
|
|
|
v-infinite-scroll="requestMoreData"
|
|
|
:infinite-scroll-disabled="!hasMoreData || isRequestingMoreData"
|
|
|
>
|
|
|
-
|
|
|
-
|
|
|
<div v-for="(item, i) in uploadStatusList" :key="item.uid">
|
|
|
<div
|
|
|
class="table-body-row"
|
|
@@ -52,15 +52,15 @@
|
|
|
>
|
|
|
<!-- 如果已经上传成功 -->
|
|
|
<template v-if="item.status === 'SUCCESS'">
|
|
|
- <span
|
|
|
- class="table-data"
|
|
|
- >
|
|
|
+ <span class="table-data">
|
|
|
<RadioOrCheckbox
|
|
|
class="checkbox"
|
|
|
:isLightTheme="!isDarkTheme"
|
|
|
:isMultiSelection="isMultiSelection"
|
|
|
- :isCheckedInitial="select.some(i => i.id === item.successInfo.id)"
|
|
|
- @change="v => selectItem(item.successInfo, v)"
|
|
|
+ :isCheckedInitial="
|
|
|
+ select.some((i) => i.id === item.successInfo.id)
|
|
|
+ "
|
|
|
+ @change="(v) => selectItem(item.successInfo, v)"
|
|
|
/>
|
|
|
</span>
|
|
|
<span
|
|
@@ -72,7 +72,11 @@
|
|
|
:key="idx"
|
|
|
>
|
|
|
<div v-if="tableItemStructure.type" class="list-img">
|
|
|
- <slot name="materialUploadSuccessIcon" :uploadInfo="item" :tableItemStructure="tableItemStructure">
|
|
|
+ <slot
|
|
|
+ name="materialUploadSuccessIcon"
|
|
|
+ :uploadInfo="item"
|
|
|
+ :tableItemStructure="tableItemStructure"
|
|
|
+ >
|
|
|
</slot>
|
|
|
</div>
|
|
|
<span
|
|
@@ -83,22 +87,17 @@
|
|
|
class="name-inner ellipsis"
|
|
|
v-title="item.successInfo[tableItemStructure.key]"
|
|
|
>
|
|
|
- {{ item.successInfo[tableItemStructure.key] }}
|
|
|
+ {{ item.successInfo[tableItemStructure.key].len }}
|
|
|
</div>
|
|
|
</span>
|
|
|
- <span
|
|
|
- v-else
|
|
|
- class="ellipsis"
|
|
|
- >
|
|
|
- {{item.successInfo[tableItemStructure.key]}}
|
|
|
+ <span v-else class="ellipsis">
|
|
|
+ {{ item.successInfo[tableItemStructure.key] }}
|
|
|
</span>
|
|
|
</span>
|
|
|
</template>
|
|
|
<!-- 如果还在上传或切图处理中 -->
|
|
|
<template v-else-if="item.status === 'LOADING'">
|
|
|
- <span
|
|
|
- class="table-data"
|
|
|
- >
|
|
|
+ <span class="table-data">
|
|
|
<RadioOrCheckbox
|
|
|
class="checkbox"
|
|
|
:isLightTheme="!isDarkTheme"
|
|
@@ -115,21 +114,18 @@
|
|
|
:key="idx"
|
|
|
>
|
|
|
<div v-if="tableItemStructure.type" class="list-img">
|
|
|
- <slot name="materialUploadingIcon">
|
|
|
- </slot>
|
|
|
+ <slot name="materialUploadingIcon"> </slot>
|
|
|
</div>
|
|
|
<span
|
|
|
v-if="tableItemStructure.key === 'name'"
|
|
|
class="name upload-status-wrap"
|
|
|
>
|
|
|
- <div
|
|
|
- class="name-inner ellipsis"
|
|
|
- v-title="item.title"
|
|
|
- >
|
|
|
+ <div class="name-inner ellipsis" v-title="item.title">
|
|
|
{{ item.title }}
|
|
|
</div>
|
|
|
<div v-if="item.ifKnowProgress" class="upload-status">
|
|
|
- {{$i18n.t(`gather.upload_material`)}} {{ Math.round(item.progress * 100)}}%
|
|
|
+ {{ $i18n.t(`gather.upload_material`) }}
|
|
|
+ {{ Math.round(item.progress * 100) }}%
|
|
|
</div>
|
|
|
<div v-else class="upload-status">
|
|
|
{{ item.statusText }}
|
|
@@ -140,9 +136,7 @@
|
|
|
</template>
|
|
|
<!-- 如果上传失败了 -->
|
|
|
<template v-else-if="item.status === 'FAIL'">
|
|
|
- <span
|
|
|
- class="table-data"
|
|
|
- >
|
|
|
+ <span class="table-data">
|
|
|
<RadioOrCheckbox
|
|
|
class="checkbox"
|
|
|
:isLightTheme="!isDarkTheme"
|
|
@@ -159,25 +153,28 @@
|
|
|
:key="idx"
|
|
|
>
|
|
|
<div v-if="tableItemStructure.type" class="list-img">
|
|
|
- <slot name="materialUploadFailIcon">
|
|
|
- </slot>
|
|
|
+ <slot name="materialUploadFailIcon"> </slot>
|
|
|
</div>
|
|
|
<span
|
|
|
v-if="tableItemStructure.key === 'name'"
|
|
|
class="name upload-status-wrap"
|
|
|
>
|
|
|
- <div
|
|
|
- class="name-inner ellipsis"
|
|
|
- v-title="item.title"
|
|
|
- >
|
|
|
+ <div class="name-inner ellipsis" v-title="item.title">
|
|
|
{{ item.title }}
|
|
|
</div>
|
|
|
<div class="upload-status">
|
|
|
{{ item.statusText }}
|
|
|
</div>
|
|
|
</span>
|
|
|
- <span v-if="tableItemStructure.key === 'fileSize'">{{ $i18n.t(`tips_code.FAILURE_3025`) }}</span>
|
|
|
- <span v-if="tableItemStructure.key !== 'name' && tableItemStructure.key !== 'fileSize'"></span>
|
|
|
+ <span v-if="tableItemStructure.key === 'fileSize'">{{
|
|
|
+ $i18n.t(`tips_code.FAILURE_3025`)
|
|
|
+ }}</span>
|
|
|
+ <span
|
|
|
+ v-if="
|
|
|
+ tableItemStructure.key !== 'name' &&
|
|
|
+ tableItemStructure.key !== 'fileSize'
|
|
|
+ "
|
|
|
+ ></span>
|
|
|
</span>
|
|
|
</template>
|
|
|
</div>
|
|
@@ -187,24 +184,24 @@
|
|
|
class="table-body-row"
|
|
|
v-for="(item, i) in list"
|
|
|
:key="i"
|
|
|
- @click="(e) => {
|
|
|
- if (item.type === 'dir') {
|
|
|
- onClickFolder(item)
|
|
|
- } else {
|
|
|
- onClickRow(e)
|
|
|
+ @click="
|
|
|
+ (e) => {
|
|
|
+ if (item.type === 'dir') {
|
|
|
+ onClickFolder(item);
|
|
|
+ } else {
|
|
|
+ onClickRow(e);
|
|
|
+ }
|
|
|
}
|
|
|
- }"
|
|
|
+ "
|
|
|
>
|
|
|
- <span
|
|
|
- class="table-data"
|
|
|
- >
|
|
|
+ <span class="table-data">
|
|
|
<RadioOrCheckbox
|
|
|
class="checkbox"
|
|
|
:isLightTheme="!isDarkTheme"
|
|
|
:isDisabled="item.type === 'dir'"
|
|
|
:isMultiSelection="isMultiSelection"
|
|
|
- :isCheckedInitial="select.some(i => i.id === item.id)"
|
|
|
- @change="v => selectItem(item, v)"
|
|
|
+ :isCheckedInitial="select.some((i) => i.id === item.id)"
|
|
|
+ @change="(v) => selectItem(item, v)"
|
|
|
/>
|
|
|
</span>
|
|
|
<span
|
|
@@ -215,17 +212,19 @@
|
|
|
}"
|
|
|
:key="idx"
|
|
|
>
|
|
|
- <div
|
|
|
- v-if="tableItemStructure.type"
|
|
|
- class="list-img"
|
|
|
- >
|
|
|
+ <div v-if="tableItemStructure.type" class="list-img">
|
|
|
<img
|
|
|
v-if="item.type === 'dir'"
|
|
|
class="folderIcon"
|
|
|
src="@/assets/images/icons/folder-blue.png"
|
|
|
alt=""
|
|
|
/>
|
|
|
- <slot v-else name="materialIcon" :materialInfo="item" :tableItemStructure="tableItemStructure">
|
|
|
+ <slot
|
|
|
+ v-else
|
|
|
+ name="materialIcon"
|
|
|
+ :materialInfo="item"
|
|
|
+ :tableItemStructure="tableItemStructure"
|
|
|
+ >
|
|
|
</slot>
|
|
|
</div>
|
|
|
<span
|
|
@@ -241,17 +240,18 @@
|
|
|
>
|
|
|
{{ item[tableItemStructure.key] }}
|
|
|
</div>
|
|
|
- <div
|
|
|
- v-if="latestUsedSearchKey"
|
|
|
- class="parent-info"
|
|
|
- >
|
|
|
- {{$i18n.t('gather.dir')}} <span class="parent-name" @click.stop="onClickParentFolder(item)">{{item.dirId === 1 ? $i18n.t('gather.root_dir') : item.dirName}}</span>
|
|
|
+ <div v-if="latestUsedSearchKey" class="parent-info">
|
|
|
+ {{ $i18n.t("gather.dir") }}
|
|
|
+ <span
|
|
|
+ class="parent-name"
|
|
|
+ @click.stop="onClickParentFolder(item)"
|
|
|
+ >{{
|
|
|
+ item.dirId === 1 ? $i18n.t("gather.root_dir") : item.dirName
|
|
|
+ }}</span
|
|
|
+ >
|
|
|
</div>
|
|
|
</span>
|
|
|
- <span
|
|
|
- v-else
|
|
|
- class="ellipsis"
|
|
|
- >
|
|
|
+ <span v-else class="ellipsis">
|
|
|
{{ item[tableItemStructure.key] }}
|
|
|
</span>
|
|
|
</span>
|
|
@@ -267,21 +267,41 @@
|
|
|
<!-- 无数据时的提示 -->
|
|
|
<div v-show="!(listLocalLength !== 0 || hasMoreData)" class="no-data">
|
|
|
<div v-if="latestUsedSearchKey">
|
|
|
- <img :src="require(`@/assets/images/default/empty_search_${isDarkTheme ? 'dark' : 'bright'}.png`)" alt="">
|
|
|
+ <img
|
|
|
+ :src="
|
|
|
+ require(`@/assets/images/default/empty_search_${
|
|
|
+ isDarkTheme ? 'dark' : 'bright'
|
|
|
+ }.png`)
|
|
|
+ "
|
|
|
+ alt=""
|
|
|
+ />
|
|
|
<span>{{ $i18n.t("gather.no_serch_result") }}</span>
|
|
|
</div>
|
|
|
<div v-if="!latestUsedSearchKey">
|
|
|
- <img :src="require(`@/assets/images/default/empty_${isDarkTheme ? 'dark' : 'bright'}.png`)" alt="">
|
|
|
+ <img
|
|
|
+ :src="
|
|
|
+ require(`@/assets/images/default/empty_${
|
|
|
+ isDarkTheme ? 'dark' : 'bright'
|
|
|
+ }.png`)
|
|
|
+ "
|
|
|
+ alt=""
|
|
|
+ />
|
|
|
<span>{{ $i18n.t("gather.no_material_result") }}</span>
|
|
|
<a v-if="!canUpload" href="/#/">
|
|
|
- <button class="ui-button">{{ $i18n.t("gather.how_to_shoot") }}</button>
|
|
|
+ <button class="ui-button">
|
|
|
+ {{ $i18n.t("gather.how_to_shoot") }}
|
|
|
+ </button>
|
|
|
</a>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
<div class="btns">
|
|
|
- <button v-if="canUpload && !searchKey" class="ui-button upload-btn" @click="onClickUpload">
|
|
|
+ <button
|
|
|
+ v-if="canUpload && !searchKey"
|
|
|
+ class="ui-button upload-btn"
|
|
|
+ @click="onClickUpload"
|
|
|
+ >
|
|
|
<span>{{ $i18n.t("gather.upload_material") }}</span>
|
|
|
<i
|
|
|
class="iconfont icon-material_prompt tool-tip-for-editor"
|
|
@@ -311,7 +331,7 @@ import {
|
|
|
} from "@/api";
|
|
|
|
|
|
import { changeByteUnit } from "@/utils/file";
|
|
|
-import { debounce, capitalize } from "@/utils/other.js"
|
|
|
+import { debounce, capitalize } from "@/utils/other.js";
|
|
|
|
|
|
import config from "@/config";
|
|
|
|
|
@@ -327,9 +347,7 @@ export default {
|
|
|
RadioOrCheckbox,
|
|
|
LoadingPoints,
|
|
|
},
|
|
|
- mixins: [
|
|
|
- folderMixin,
|
|
|
- ],
|
|
|
+ mixins: [folderMixin],
|
|
|
props: {
|
|
|
isDarkTheme: {
|
|
|
type: Boolean,
|
|
@@ -346,19 +364,19 @@ export default {
|
|
|
materialItemCustomProcess: {
|
|
|
type: Function,
|
|
|
default: (item) => {
|
|
|
- return
|
|
|
- }
|
|
|
+ return;
|
|
|
+ },
|
|
|
},
|
|
|
tableHeaderKeyList: {
|
|
|
type: Array,
|
|
|
default: () => {
|
|
|
- return []
|
|
|
- }
|
|
|
+ return [];
|
|
|
+ },
|
|
|
},
|
|
|
columnWidthList: {
|
|
|
type: Array,
|
|
|
default: () => {
|
|
|
- return []
|
|
|
+ return [];
|
|
|
},
|
|
|
},
|
|
|
isMultiSelection: {
|
|
@@ -369,10 +387,10 @@ export default {
|
|
|
type: Array,
|
|
|
required: true,
|
|
|
},
|
|
|
-
|
|
|
+
|
|
|
searchKey: {
|
|
|
type: String,
|
|
|
- default: '',
|
|
|
+ default: "",
|
|
|
},
|
|
|
canUpload: {
|
|
|
type: Boolean,
|
|
@@ -384,16 +402,16 @@ export default {
|
|
|
fileInputCustomCheck: {
|
|
|
type: Function,
|
|
|
default: async () => {
|
|
|
- return true
|
|
|
- }
|
|
|
+ return true;
|
|
|
+ },
|
|
|
},
|
|
|
fileUploadLongPollingCb: {
|
|
|
type: Function || null,
|
|
|
- default: null
|
|
|
+ default: null,
|
|
|
},
|
|
|
fileUploadLongPollingStatusText: {
|
|
|
type: String,
|
|
|
- defaut: ''
|
|
|
+ defaut: "",
|
|
|
},
|
|
|
fileInputFailString: {
|
|
|
type: String,
|
|
@@ -415,20 +433,20 @@ export default {
|
|
|
return {
|
|
|
list: [],
|
|
|
|
|
|
- latestUsedSearchKey: '',
|
|
|
+ latestUsedSearchKey: "",
|
|
|
|
|
|
isRequestingMoreData: false,
|
|
|
hasMoreData: true,
|
|
|
|
|
|
longPollingIntervalId: null,
|
|
|
- }
|
|
|
+ };
|
|
|
},
|
|
|
computed: {
|
|
|
materialTypeAlias() {
|
|
|
- if (this.materialType === '3D') {
|
|
|
- return 'scene'
|
|
|
+ if (this.materialType === "3D") {
|
|
|
+ return "scene";
|
|
|
} else {
|
|
|
- return this.materialType
|
|
|
+ return this.materialType;
|
|
|
}
|
|
|
},
|
|
|
tableHeaders() {
|
|
@@ -455,36 +473,41 @@ export default {
|
|
|
}
|
|
|
]
|
|
|
*/
|
|
|
- return this.$MAPTABLEHEADER[this.materialTypeAlias].filter(item => {
|
|
|
- return this.tableHeaderKeyList.includes(item.key)
|
|
|
- })
|
|
|
+ return this.$MAPTABLEHEADER[this.materialTypeAlias].filter((item) => {
|
|
|
+ return this.tableHeaderKeyList.includes(item.key);
|
|
|
+ });
|
|
|
},
|
|
|
uploadStatusList() {
|
|
|
if (this.canUpload) {
|
|
|
- return this.$store.state[`uploadStatusList${capitalize(this.materialType)}`]
|
|
|
+ return this.$store.state[
|
|
|
+ `uploadStatusList${capitalize(this.materialType)}`
|
|
|
+ ];
|
|
|
} else {
|
|
|
- return []
|
|
|
+ return [];
|
|
|
}
|
|
|
},
|
|
|
listRealLength() {
|
|
|
- return this.list.length + this.uploadStatusList.filter((item) => {
|
|
|
- return item.status === 'SUCCESS'
|
|
|
- }).length
|
|
|
+ return (
|
|
|
+ this.list.length +
|
|
|
+ this.uploadStatusList.filter((item) => {
|
|
|
+ return item.status === "SUCCESS";
|
|
|
+ }).length
|
|
|
+ );
|
|
|
},
|
|
|
listLocalLength() {
|
|
|
- return this.list.length + this.uploadStatusList.length
|
|
|
+ return this.list.length + this.uploadStatusList.length;
|
|
|
},
|
|
|
needLongPolling() {
|
|
|
return this.uploadStatusList.some((item) => {
|
|
|
- return item.status === 'LOADING' && item.ifKnowProgress === false
|
|
|
- })
|
|
|
+ return item.status === "LOADING" && item.ifKnowProgress === false;
|
|
|
+ });
|
|
|
},
|
|
|
},
|
|
|
watch: {
|
|
|
searchKey: {
|
|
|
handler: function () {
|
|
|
if (this.currentMaterialType === this.materialType) {
|
|
|
- this.refreshMaterialList()
|
|
|
+ this.refreshMaterialList();
|
|
|
}
|
|
|
},
|
|
|
immediate: false,
|
|
@@ -492,7 +515,7 @@ export default {
|
|
|
currentMaterialType: {
|
|
|
handler: function (newVal) {
|
|
|
if (newVal === this.materialType && this.list.length === 0) {
|
|
|
- this.refreshMaterialList()
|
|
|
+ this.refreshMaterialList();
|
|
|
}
|
|
|
},
|
|
|
immediate: false,
|
|
@@ -500,11 +523,11 @@ export default {
|
|
|
needLongPolling: {
|
|
|
handler: function (newVal) {
|
|
|
if (!newVal) {
|
|
|
- clearInterval(this.longPollingIntervalId)
|
|
|
- this.longPollingIntervalId = null
|
|
|
+ clearInterval(this.longPollingIntervalId);
|
|
|
+ this.longPollingIntervalId = null;
|
|
|
} else {
|
|
|
- clearInterval(this.longPollingIntervalId)
|
|
|
- this.longPollingIntervalId = null
|
|
|
+ clearInterval(this.longPollingIntervalId);
|
|
|
+ this.longPollingIntervalId = null;
|
|
|
this.longPollingIntervalId = setInterval(() => {
|
|
|
this.fileUploadLongPollingCb(this.uploadStatusList);
|
|
|
}, 3000);
|
|
@@ -515,97 +538,106 @@ export default {
|
|
|
},
|
|
|
methods: {
|
|
|
selectItem(item, v) {
|
|
|
- item.materialType = this.materialType // 三维场景数据没有type字段来表明自己是三维场景。所以统一加一个字段。
|
|
|
+ item.materialType = this.materialType; // 三维场景数据没有type字段来表明自己是三维场景。所以统一加一个字段。
|
|
|
if (this.isMultiSelection) {
|
|
|
if (v) {
|
|
|
- this.select.push(item)
|
|
|
+ this.select.push(item);
|
|
|
} else {
|
|
|
const toDeleteIdx = this.select.findIndex((eachSelect) => {
|
|
|
- return eachSelect.id === item.id
|
|
|
- })
|
|
|
+ return eachSelect.id === item.id;
|
|
|
+ });
|
|
|
if (toDeleteIdx >= 0) {
|
|
|
- this.select.splice(toDeleteIdx, 1)
|
|
|
+ this.select.splice(toDeleteIdx, 1);
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
- this.select.splice(0, this.select.length)
|
|
|
+ this.select.splice(0, this.select.length);
|
|
|
if (v) {
|
|
|
- this.select.push(item)
|
|
|
+ this.select.push(item);
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
requestMoreData() {
|
|
|
- this.isRequestingMoreData = true
|
|
|
- const latestUsedSearchKey = this.searchKey
|
|
|
+ this.isRequestingMoreData = true;
|
|
|
+ const latestUsedSearchKey = this.searchKey;
|
|
|
|
|
|
- let getListFn = null
|
|
|
- let params = null
|
|
|
- if (this.materialType === '3D') {
|
|
|
+ let getListFn = null;
|
|
|
+ let params = null;
|
|
|
+ if (this.materialType === "3D") {
|
|
|
if (!this.searchKey) {
|
|
|
- getListFn = get3DSceneList
|
|
|
+ getListFn = get3DSceneList;
|
|
|
params = {
|
|
|
pathLevel2Id: this.folderPath[1]?.id,
|
|
|
folderId: this.currentFolderId,
|
|
|
pageNum: Math.floor(this.list.length / config.PAGE_SIZE) + 1,
|
|
|
pageSize: config.PAGE_SIZE,
|
|
|
searchKey: this.searchKey,
|
|
|
- }
|
|
|
+ };
|
|
|
} else {
|
|
|
- getListFn = searchInAll3DScenes
|
|
|
+ getListFn = searchInAll3DScenes;
|
|
|
params = {
|
|
|
- searchKey: this.searchKey
|
|
|
- }
|
|
|
+ searchKey: this.searchKey,
|
|
|
+ };
|
|
|
}
|
|
|
} else {
|
|
|
- getListFn = getMaterialList
|
|
|
+ getListFn = getMaterialList;
|
|
|
params = {
|
|
|
dirId: this.currentFolderId,
|
|
|
pageNum: Math.floor(this.listRealLength / config.PAGE_SIZE) + 1,
|
|
|
pageSize: config.PAGE_SIZE,
|
|
|
searchKey: this.searchKey,
|
|
|
type: this.materialType,
|
|
|
- }
|
|
|
+ };
|
|
|
}
|
|
|
- getListFn(params, (data) => {
|
|
|
- const newData = data.data.list.map((i) => {
|
|
|
- if (i.fileSize) {
|
|
|
- i.fileSize = changeByteUnit(Number(i.fileSize));
|
|
|
- } else {
|
|
|
- i.fileSize = ''
|
|
|
+ getListFn(
|
|
|
+ params,
|
|
|
+ (data) => {
|
|
|
+ const newData = data.data.list.map((i) => {
|
|
|
+ if (i.fileSize) {
|
|
|
+ i.fileSize = changeByteUnit(Number(i.fileSize));
|
|
|
+ } else {
|
|
|
+ i.fileSize = "";
|
|
|
+ }
|
|
|
+ this.materialItemCustomProcess(i);
|
|
|
+ return i;
|
|
|
+ });
|
|
|
+ this.list = this.list.concat(newData);
|
|
|
+ if (this.listRealLength === data.data.total) {
|
|
|
+ this.hasMoreData = false;
|
|
|
}
|
|
|
- this.materialItemCustomProcess(i)
|
|
|
- return i;
|
|
|
- });
|
|
|
- this.list = this.list.concat(newData)
|
|
|
- if (this.listRealLength === data.data.total) {
|
|
|
- this.hasMoreData = false
|
|
|
+ this.isRequestingMoreData = false;
|
|
|
+ this.latestUsedSearchKey = latestUsedSearchKey;
|
|
|
+ },
|
|
|
+ () => {
|
|
|
+ this.isRequestingMoreData = false;
|
|
|
+ this.latestUsedSearchKey = latestUsedSearchKey;
|
|
|
}
|
|
|
- this.isRequestingMoreData = false
|
|
|
- this.latestUsedSearchKey = latestUsedSearchKey
|
|
|
- }, () => {
|
|
|
- this.isRequestingMoreData = false
|
|
|
- this.latestUsedSearchKey = latestUsedSearchKey
|
|
|
- });
|
|
|
+ );
|
|
|
},
|
|
|
- refreshMaterialList: debounce(function (type) {
|
|
|
- this.isRequestingMoreData = false
|
|
|
- this.hasMoreData = true
|
|
|
- this.list = []
|
|
|
- if (this.canUpload) {
|
|
|
- let filterResult = this.uploadStatusList.filter((item) => {
|
|
|
- return item.status === 'LOADING'
|
|
|
- })
|
|
|
- const capitalizedMaterialType = capitalize(this.materialType)
|
|
|
- this.$store.commit(`setUploadStatusList${capitalizedMaterialType}`, filterResult)
|
|
|
- }
|
|
|
- this.requestMoreData()
|
|
|
- }, 500, false),
|
|
|
+ refreshMaterialList: debounce(
|
|
|
+ function (type) {
|
|
|
+ this.isRequestingMoreData = false;
|
|
|
+ this.hasMoreData = true;
|
|
|
+ this.list = [];
|
|
|
+ if (this.canUpload) {
|
|
|
+ let filterResult = this.uploadStatusList.filter((item) => {
|
|
|
+ return item.status === "LOADING";
|
|
|
+ });
|
|
|
+ const capitalizedMaterialType = capitalize(this.materialType);
|
|
|
+ this.$store.commit(
|
|
|
+ `setUploadStatusList${capitalizedMaterialType}`,
|
|
|
+ filterResult
|
|
|
+ );
|
|
|
+ }
|
|
|
+ this.requestMoreData();
|
|
|
+ },
|
|
|
+ 500,
|
|
|
+ false
|
|
|
+ ),
|
|
|
onFileInputChange(e) {
|
|
|
e.files.forEach(async (eachFile, i) => {
|
|
|
- if (
|
|
|
- this.fileInputAcceptType.indexOf(eachFile.type) <= -1
|
|
|
- ) {
|
|
|
- console.log('格式不对!');
|
|
|
+ if (this.fileInputAcceptType.indexOf(eachFile.type) <= -1) {
|
|
|
+ console.log("格式不对!");
|
|
|
setTimeout(() => {
|
|
|
this.$msg({
|
|
|
message: `“${eachFile.name}”${this.fileInputFailString}`,
|
|
@@ -615,30 +647,34 @@ export default {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- if (eachFile.name.substring(0, eachFile.name.lastIndexOf(".")).length > 50) {
|
|
|
+ if (
|
|
|
+ eachFile.name.substring(0, eachFile.name.lastIndexOf(".")).length > 50
|
|
|
+ ) {
|
|
|
setTimeout(() => {
|
|
|
this.$msg({
|
|
|
- message: `“${eachFile.name}”${this.$i18n.t(`gather.too_long_word`)}`,
|
|
|
+ message: `“${eachFile.name}”${this.$i18n.t(
|
|
|
+ `gather.too_long_word`
|
|
|
+ )}`,
|
|
|
type: "warning",
|
|
|
});
|
|
|
}, i * 100);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- const customCheckRes = await this.fileInputCustomCheck(eachFile, i)
|
|
|
+ const customCheckRes = await this.fileInputCustomCheck(eachFile, i);
|
|
|
if (!customCheckRes) {
|
|
|
- return
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
let itemInUploadList = {
|
|
|
title: eachFile.name,
|
|
|
ifKnowProgress: true,
|
|
|
progress: 0,
|
|
|
- status: 'LOADING',
|
|
|
+ status: "LOADING",
|
|
|
statusText: this.$i18n.t(`gather.uploading_material`),
|
|
|
uid: `u_${this.$randomWord(true, 8, 8)}`,
|
|
|
abortHandler: null,
|
|
|
- backendId: '', // 只用于全景图上传
|
|
|
+ backendId: "", // 只用于全景图上传
|
|
|
parentFolderId: this.currentFolderId,
|
|
|
};
|
|
|
|
|
@@ -649,77 +685,88 @@ export default {
|
|
|
tempId: itemInUploadList.uid,
|
|
|
type: this.materialType,
|
|
|
},
|
|
|
- (response) => { // 上传成功
|
|
|
+ (response) => {
|
|
|
+ // 上传成功
|
|
|
if (response.code !== 0) {
|
|
|
- console.error('上传接口响应异常:', response);
|
|
|
- return
|
|
|
+ console.error("上传接口响应异常:", response);
|
|
|
+ return;
|
|
|
}
|
|
|
- console.log('上传成功');
|
|
|
+ console.log("上传成功");
|
|
|
if (this.fileUploadLongPollingCb) {
|
|
|
- itemInUploadList.statusText = this.fileUploadLongPollingStatusText
|
|
|
- itemInUploadList.ifKnowProgress = false
|
|
|
- itemInUploadList.backendId = response.data.id
|
|
|
+ itemInUploadList.statusText =
|
|
|
+ this.fileUploadLongPollingStatusText;
|
|
|
+ itemInUploadList.ifKnowProgress = false;
|
|
|
+ itemInUploadList.backendId = response.data.id;
|
|
|
} else {
|
|
|
- itemInUploadList.status = 'SUCCESS'
|
|
|
+ itemInUploadList.status = "SUCCESS";
|
|
|
if (response.data.fileSize) {
|
|
|
- response.data.fileSize = changeByteUnit(Number(response.fileSize));
|
|
|
+ response.data.fileSize = changeByteUnit(
|
|
|
+ Number(response.fileSize)
|
|
|
+ );
|
|
|
} else {
|
|
|
- response.data.fileSize = ''
|
|
|
+ response.data.fileSize = "";
|
|
|
}
|
|
|
- itemInUploadList.successInfo = response.data
|
|
|
+ itemInUploadList.successInfo = response.data;
|
|
|
}
|
|
|
},
|
|
|
(err) => {
|
|
|
- if (err.statusText === 'abort') { // 用户取消了上传任务。
|
|
|
- console.log('用户取消了任务!');
|
|
|
+ if (err.statusText === "abort") {
|
|
|
+ // 用户取消了上传任务。
|
|
|
+ console.log("用户取消了任务!");
|
|
|
const index = this.uploadStatusList.findIndex((eachItem) => {
|
|
|
- return eachItem.uid === itemInUploadList.uid
|
|
|
- })
|
|
|
- this.uploadStatusList.splice(index, 1)
|
|
|
+ return eachItem.uid === itemInUploadList.uid;
|
|
|
+ });
|
|
|
+ this.uploadStatusList.splice(index, 1);
|
|
|
} else {
|
|
|
- console.log('上传失败!');
|
|
|
- itemInUploadList.status = 'FAIL'
|
|
|
- itemInUploadList.statusText = this.$i18n.t(`gather.material_upload_fail`)
|
|
|
+ console.log("上传失败!");
|
|
|
+ itemInUploadList.status = "FAIL";
|
|
|
+ itemInUploadList.statusText = this.$i18n.t(
|
|
|
+ `gather.material_upload_fail`
|
|
|
+ );
|
|
|
}
|
|
|
},
|
|
|
(progress) => {
|
|
|
- console.log('进度:', progress);
|
|
|
- itemInUploadList.progress = progress
|
|
|
+ console.log("进度:", progress);
|
|
|
+ itemInUploadList.progress = progress;
|
|
|
}
|
|
|
- )
|
|
|
+ );
|
|
|
|
|
|
// this.uploadStatusList.unshift(itemInUploadList);
|
|
|
this.refreshMaterialList();
|
|
|
- })
|
|
|
+ });
|
|
|
},
|
|
|
onClickRow(e) {
|
|
|
- const checkboxNodeList = e.currentTarget.getElementsByClassName('selection-click-target')
|
|
|
+ const checkboxNodeList = e.currentTarget.getElementsByClassName(
|
|
|
+ "selection-click-target"
|
|
|
+ );
|
|
|
if (checkboxNodeList && checkboxNodeList[0]) {
|
|
|
- checkboxNodeList[0].click()
|
|
|
+ checkboxNodeList[0].click();
|
|
|
}
|
|
|
},
|
|
|
onClickUpload() {
|
|
|
checkUserSize({}, (data) => {
|
|
|
//判断已用是否大于3G
|
|
|
- if ((data.data / 1024 / 1024) > 3) {
|
|
|
- this.$alert({ content: this.$i18n.t('tips_code.FAILURE_3024')});
|
|
|
+ if (data.data / 1024 / 1024 > 3) {
|
|
|
+ this.$alert({ content: this.$i18n.t("tips_code.FAILURE_3024") });
|
|
|
} else {
|
|
|
- this.$refs['file-input'].click()
|
|
|
+ this.$refs["file-input"].click();
|
|
|
}
|
|
|
- })
|
|
|
+ });
|
|
|
},
|
|
|
},
|
|
|
- mounted() {
|
|
|
- },
|
|
|
+ mounted() {},
|
|
|
beforeDestroy() {
|
|
|
if (this.canUpload) {
|
|
|
- const capitalizedMaterialType = capitalize(this.materialType)
|
|
|
- this.$store.commit(`setUploadStatusList${capitalizedMaterialType}`, this.uploadStatusList.filter((item) => {
|
|
|
- return item.status === 'LOADING'
|
|
|
- }))
|
|
|
+ const capitalizedMaterialType = capitalize(this.materialType);
|
|
|
+ this.$store.commit(
|
|
|
+ `setUploadStatusList${capitalizedMaterialType}`,
|
|
|
+ this.uploadStatusList.filter((item) => {
|
|
|
+ return item.status === "LOADING";
|
|
|
+ })
|
|
|
+ );
|
|
|
}
|
|
|
- }
|
|
|
-}
|
|
|
+ },
|
|
|
+};
|
|
|
</script>
|
|
|
|
|
|
<style lang="less" scoped>
|
|
@@ -744,7 +791,6 @@ export default {
|
|
|
@table-head-row-height: 0px;
|
|
|
@table-border-size: 0px;
|
|
|
|
|
|
-
|
|
|
.table {
|
|
|
margin-top: 10px;
|
|
|
// border: @table-border-size solid #EBEDF0;
|
|
@@ -768,8 +814,11 @@ export default {
|
|
|
// }
|
|
|
// }
|
|
|
|
|
|
- >.table-body {
|
|
|
- height: calc(@table-height - @table-head-row-height - @table-border-size - @table-border-size);
|
|
|
+ > .table-body {
|
|
|
+ height: calc(
|
|
|
+ @table-height - @table-head-row-height - @table-border-size -
|
|
|
+ @table-border-size
|
|
|
+ );
|
|
|
overflow: auto;
|
|
|
display: inline-block;
|
|
|
width: 100%;
|
|
@@ -782,9 +831,9 @@ export default {
|
|
|
border-radius: 4px;
|
|
|
cursor: pointer;
|
|
|
&:hover {
|
|
|
- background: #F7F8FA;
|
|
|
+ background: #f7f8fa;
|
|
|
}
|
|
|
- >.table-data {
|
|
|
+ > .table-data {
|
|
|
font-size: 14px;
|
|
|
line-height: 50px;
|
|
|
height: 100%;
|
|
@@ -801,13 +850,13 @@ export default {
|
|
|
&:last-of-type {
|
|
|
padding-right: 10px;
|
|
|
}
|
|
|
- >.list-img {
|
|
|
+ > .list-img {
|
|
|
position: relative;
|
|
|
height: 100%;
|
|
|
display: inline-block;
|
|
|
width: 100%;
|
|
|
|
|
|
- >img,
|
|
|
+ > img,
|
|
|
.audio-player {
|
|
|
position: absolute;
|
|
|
top: 50%;
|
|
@@ -874,31 +923,34 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- >.no-data {
|
|
|
- height: calc(@table-height - @table-head-row-height - @table-border-size - @table-border-size);
|
|
|
+ > .no-data {
|
|
|
+ height: calc(
|
|
|
+ @table-height - @table-head-row-height - @table-border-size -
|
|
|
+ @table-border-size
|
|
|
+ );
|
|
|
width: 100%;
|
|
|
position: relative;
|
|
|
|
|
|
- >div {
|
|
|
+ > div {
|
|
|
position: absolute;
|
|
|
top: 50%;
|
|
|
left: 50%;
|
|
|
transform: translate(-50%, -50%);
|
|
|
text-align: center;
|
|
|
|
|
|
- >img {
|
|
|
+ > img {
|
|
|
width: 116px;
|
|
|
}
|
|
|
|
|
|
- >span {
|
|
|
+ > span {
|
|
|
margin-top: 20px;
|
|
|
display: block;
|
|
|
font-size: 14px;
|
|
|
color: #646566;
|
|
|
}
|
|
|
|
|
|
- >a {
|
|
|
- >button {
|
|
|
+ > a {
|
|
|
+ > button {
|
|
|
margin-top: 20px;
|
|
|
}
|
|
|
}
|
|
@@ -918,7 +970,7 @@ export default {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
|
|
|
- >span {
|
|
|
+ > span {
|
|
|
display: inline-block;
|
|
|
margin-right: 4px;
|
|
|
}
|
|
@@ -936,8 +988,13 @@ export default {
|
|
|
.ellipsis {
|
|
|
}
|
|
|
.crumbs {
|
|
|
+ // display: none;
|
|
|
+ ul > li .name {
|
|
|
+ max-width: 80px;
|
|
|
+ display: block;
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
.table {
|
|
|
// border: @table-border-size solid #EBEDF0;
|
|
|
// >.table-head-row {
|
|
@@ -950,16 +1007,16 @@ export default {
|
|
|
// }
|
|
|
// }
|
|
|
|
|
|
- >.table-body {
|
|
|
+ > .table-body {
|
|
|
.table-body-row {
|
|
|
// border-bottom: 1px solid #EBEDF0;
|
|
|
&:hover {
|
|
|
background: #252526;
|
|
|
}
|
|
|
- >.table-data {
|
|
|
+ > .table-data {
|
|
|
color: #fff;
|
|
|
- >.list-img {
|
|
|
- >img,
|
|
|
+ > .list-img {
|
|
|
+ > img,
|
|
|
.audio-player {
|
|
|
&.folderIcon {
|
|
|
}
|
|
@@ -969,15 +1026,15 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- >.no-data {
|
|
|
- >div {
|
|
|
- >img {
|
|
|
+ > .no-data {
|
|
|
+ > div {
|
|
|
+ > img {
|
|
|
}
|
|
|
- >span {
|
|
|
+ > span {
|
|
|
color: rgba(255, 255, 255, 0.6);
|
|
|
}
|
|
|
- >a {
|
|
|
- >button {
|
|
|
+ > a {
|
|
|
+ > button {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -989,11 +1046,28 @@ export default {
|
|
|
|
|
|
.btns {
|
|
|
.upload-btn {
|
|
|
- >span {
|
|
|
+ > span {
|
|
|
}
|
|
|
i.tool-tip-for-editor {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-</style>
|
|
|
+</style>
|
|
|
+
|
|
|
+<style lang="less">
|
|
|
+.material-list.dark {
|
|
|
+ .crumbs {
|
|
|
+ // display: none;
|
|
|
+ ul > li {
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ .name {
|
|
|
+ max-width: 180px;
|
|
|
+ display: block;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|