refactor: Folder size

This commit is contained in:
somnetsak123 2023-12-13 14:49:27 +07:00
parent 73673f7ae3
commit 7b13566757
2 changed files with 53 additions and 5 deletions

View file

@ -1,7 +1,8 @@
<script lang="ts" setup> <script lang="ts" setup>
import type { QTableProps } from 'quasar' import type { QTableProps } from 'quasar'
import { computed, ref } from 'vue' import { computed, onMounted, ref } from 'vue'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import api from '@/services/HttpService'
import FileIcon from '@/components/FileIcon.vue' import FileIcon from '@/components/FileIcon.vue'
import DialogDelete from '@/components/DialogDelete.vue' import DialogDelete from '@/components/DialogDelete.vue'
@ -13,7 +14,8 @@ import useStorage from '@/stores/storage'
const storageStore = useStorage() const storageStore = useStorage()
const { folder, file, currentInfo } = storeToRefs(storageStore) const { folder, file, currentInfo } = storeToRefs(storageStore)
const { goto, deleteFolder, deleteFile } = storageStore const { goto, deleteFolder, deleteFile, constructUrl, consistantPath } =
storageStore
const { getFormatDate, getSize, getType, getFileInfo } = useFileInfoStore() const { getFormatDate, getSize, getType, getFileInfo } = useFileInfoStore()
@ -33,7 +35,14 @@ const props = defineProps<{
mode: 'admin' | 'user' mode: 'admin' | 'user'
}>() }>()
interface ApiResponse {
size: string
}
const deleteState = ref<boolean>(false) const deleteState = ref<boolean>(false)
const open = ref<boolean>(false)
const sizefolder = ref<string>()
const deletePath = ref<string>('') const deletePath = ref<string>('')
const deleteTarget = ref<'deleteFolder' | 'deleteFile'>() const deleteTarget = ref<'deleteFolder' | 'deleteFile'>()
const deleteMap = { deleteFolder, deleteFile } const deleteMap = { deleteFolder, deleteFile }
@ -50,6 +59,37 @@ function triggerFileDelete(pathname: string) {
deleteState.value = !deleteState.value deleteState.value = !deleteState.value
} }
function getSizeFolder(constructFolder: string) {
const src = constructFolder.split('/').filter(Boolean)
const path = src.join('/') + '/'
const res = async () => {
const response = await api.get(constructUrl(src, false) + '/size')
sizefolder.value = response.data.size
}
if (folder.value[currentInfo.value.path]) {
const idx = folder.value[currentInfo.value.path].findIndex(
(v) => v.pathname === path,
)
if (idx !== -1) {
res()
if (folder.value[currentInfo.value.path][idx].folderSize) {
if (
folder.value[currentInfo.value.path][idx].folderSize !=
sizefolder.value
) {
folder.value[currentInfo.value.path][idx].folderSize =
sizefolder.value
}
} else {
folder.value[currentInfo.value.path][idx].folderSize = sizefolder.value
}
}
return getSize(folder.value[currentInfo.value.path][idx].folderSize)
}
}
const colFolder = [ const colFolder = [
{ {
name: 'name', name: 'name',
@ -186,18 +226,23 @@ const onRowClick = ((_, row) => {
<q-td class="justify-center"> <q-td class="justify-center">
<div> <div>
<q-icon <q-icon
@click.stop @click.stop="
() => {
open = !open
}
"
class="q-ma-sm" class="q-ma-sm"
name="o_info" name="o_info"
size="2em" size="2em"
color="primary" color="primary"
/> />
<q-tooltip <q-tooltip
:delay="1000"
anchor="center left" anchor="center left"
self="center right" self="center right"
:offset="[5, 1]" :offset="[5, 1]"
> >
{{ data.row.name }} {{ getSizeFolder(data.row.pathname) }}
</q-tooltip> </q-tooltip>
</div> </div>
<div v-if="props.mode === 'admin'"> <div v-if="props.mode === 'admin'">
@ -312,7 +357,6 @@ const onRowClick = ((_, row) => {
fileFormComponent?.triggerFileEdit( fileFormComponent?.triggerFileEdit(
data.row, data.row,
data.row.pathname, data.row.pathname,
data.row.fileName,
) )
" "
id="listViewFileEdit" id="listViewFileEdit"

View file

@ -13,6 +13,7 @@ type Path = string
export interface StorageFolder { export interface StorageFolder {
pathname: string pathname: string
name: string name: string
folderSize?: string
createdAt: string createdAt: string
createdBy: string createdBy: string
} }
@ -58,6 +59,7 @@ function constructUrl(path: string | string[], append = true) {
return a return a
} }
}, '') }, '')
return append return append
? url + ['cabinet', '/drawer', '/folder', '/subfolder'][arr.length] ? url + ['cabinet', '/drawer', '/folder', '/subfolder'][arr.length]
: url : url
@ -461,6 +463,8 @@ const useStorage = defineStore('storageStore', () => {
createFile, createFile,
updateFile, updateFile,
deleteFile, deleteFile,
constructUrl,
consistantPath,
} }
}) })