hrms-edm/Services/client/src/components/PageLayout.vue

208 lines
6.6 KiB
Vue
Raw Normal View History

2023-11-23 08:47:44 +07:00
<script lang="ts" setup>
import { ref } from 'vue'
2023-11-23 08:47:44 +07:00
import { storeToRefs } from 'pinia'
import { useSearchDataStore } from '@/stores/searched-data'
import { useFileInfoStore } from '@/stores/file-info-data'
2023-11-30 15:40:32 +07:00
import FileItem from './FileItem.vue'
import TreeExplorer from './TreeExplorer.vue'
2023-11-30 15:43:59 +07:00
import FileSearched from './FileSearched.vue'
2023-11-30 15:40:32 +07:00
import ListView from './ListView.vue'
import FolderFormWrapper from './FolderFormWrapper.vue'
2023-11-30 15:40:32 +07:00
import GlobalErrorDialog from './GlobalErrorDialog.vue'
2023-11-23 08:47:44 +07:00
import SearchBar from '@/modules/01_user/components/SearchBar.vue'
import FileDownload from '@/modules/01_user/components/FileDownload.vue'
2023-12-10 09:27:26 +07:00
import useStorage from '@/stores/storage'
2023-11-23 08:47:44 +07:00
const props = defineProps<{
mode: 'admin' | 'user'
}>()
const { isFilePreview } = storeToRefs(useFileInfoStore())
const { isSearch } = storeToRefs(useSearchDataStore())
2023-11-28 17:44:56 +07:00
const storageStore = useStorage()
const { tree, currentInfo } = storeToRefs(storageStore)
const { goto, gotoParent } = storageStore
const viewMode = ref<'view_list' | 'view_module'>('view_list')
const folderFormComponent = ref<InstanceType<typeof FolderFormWrapper>>()
2023-11-23 08:47:44 +07:00
</script>
<template>
<folder-form-wrapper ref="folderFormComponent" />
<global-error-dialog />
2023-11-23 08:47:44 +07:00
<section id="header" class="q-px-md q-pt-md q-pb-none">
<div class="q-my-md row items-center">
<div class="col">
<h5 class="q-my-none" v-if="mode === 'admin'">จัดเก็บเอกสาร</h5>
2023-12-07 10:39:45 +07:00
<h5 class="q-my-none" v-else>สืบค้นผลงาน</h5>
2023-11-23 08:47:44 +07:00
</div>
<search-bar :mode="mode" v-if="mode === 'admin'" />
2023-11-23 08:47:44 +07:00
</div>
</section>
<section
class="row q-col-gutter-md q-pa-md"
:class="{ reverse: props.mode === 'user' }"
id="cabinet"
>
<div class="col-12 col-md-3">
<div class="bg-white rounded-borders shadow-5">
<div
2023-12-08 10:04:54 +07:00
class="q-px-md q-py-sm text-primary bg-grey-1 row justify-between items-center"
2023-11-23 08:47:44 +07:00
id="container-header"
>
2023-12-07 11:19:26 +07:00
<span
2023-12-08 10:04:54 +07:00
class="block q-my-sm text-weight-bold pointer"
2023-12-07 11:19:26 +07:00
@click="
() => {
goto()
isSearch = false
isFilePreview = false
2023-12-07 11:19:26 +07:00
}
"
>ดเกบเอกสาร</span
>
2023-12-07 14:07:18 +07:00
<q-btn
v-if="mode === 'admin'"
2023-12-07 14:07:18 +07:00
dense
flat
color="primary"
icon="add"
2023-12-07 16:51:06 +07:00
data-testid="createFolder"
@click.stop="() => folderFormComponent?.triggerFolderCreate()"
2023-12-07 14:07:18 +07:00
/>
2023-11-23 08:47:44 +07:00
</div>
<q-separator />
<div class="q-pa-md">
<tree-explorer :data="tree" />
2023-11-23 08:47:44 +07:00
</div>
</div>
</div>
<div class="col">
<file-download v-if="isFilePreview === true" />
<div
class="bg-white rounded-borders shadow-5 relative"
v-if="isFilePreview === false"
>
<search-bar :mode="mode" v-if="mode === 'user'" />
2023-11-23 08:47:44 +07:00
<div class="bg-white q-pa-md">
<div class="row items-center justify-between">
2023-11-29 15:26:45 +07:00
<span class="text-body1">
<div class="row items-center">
<q-btn
flat
dense
class="q-mr-sm q-px-sm"
v-if="isSearch || currentInfo.dept > 0"
2023-12-01 17:49:25 +07:00
@click="
() => {
isSearch ? (isSearch = false) : gotoParent()
2023-12-01 17:49:25 +07:00
}
"
2023-11-29 15:26:45 +07:00
>
<q-icon name="arrow_back" size="1rem" color="primary" />
</q-btn>
<span v-if="isSearch">ผลการค้นหา</span>
<q-breadcrumbs
v-if="!isSearch"
active-color="grey"
separator-color="grey"
>
2023-11-29 15:26:45 +07:00
<q-breadcrumbs-el
v-if="currentInfo.path === '/' || !currentInfo.path"
2023-11-29 15:26:45 +07:00
label="ตู้เอกสารทั้งหมด"
/>
2023-12-06 14:59:06 +07:00
<q-btn
dense
id="createFolder"
2023-12-06 16:49:14 +07:00
class="q-px-md q-ml-md al"
label="สร้างตู้เก็บเอกสาร"
type="submit"
color="primary"
icon="add"
v-if="
mode === 'admin' &&
viewMode === 'view_module' &&
currentInfo.dept === 0
"
@click.stop="
() => folderFormComponent?.triggerFolderCreate()
"
2023-12-06 16:49:14 +07:00
/>
2023-11-29 15:26:45 +07:00
<q-breadcrumbs-el
class="pointer"
v-for="(fragments, index) in currentInfo.path
2023-12-04 11:47:33 +07:00
.split('/')
.filter(Boolean)"
2023-11-29 15:26:45 +07:00
:label="fragments"
2023-12-04 11:47:33 +07:00
@click="
() => {
goto(
currentInfo.path
2023-12-04 11:47:33 +07:00
.split('/')
.filter(Boolean)
.slice(0, index + 1)
.join('/') + '/',
)
2023-12-04 11:47:33 +07:00
}
"
2023-11-29 15:26:45 +07:00
/>
</q-breadcrumbs>
</div>
2023-11-23 08:47:44 +07:00
</span>
2023-11-29 15:26:45 +07:00
<div>
<q-btn
flat
dense
id="getFolder"
2023-11-29 15:26:45 +07:00
color="blue-grey-2"
icon="refresh"
class="q-mr-sm"
@click="() => goto(currentInfo.path, true)"
2023-11-29 15:26:45 +07:00
/>
<q-btn
flat
dense
id="viewMode"
2023-11-29 15:26:45 +07:00
color="blue-grey-2"
:icon="viewMode"
@click="
() => {
viewMode =
viewMode === 'view_list' ? 'view_module' : 'view_list'
}
"
/>
</div>
2023-11-23 08:47:44 +07:00
</div>
<div>
2023-12-06 09:05:43 +07:00
<file-searched
:viewMode="viewMode"
:action="props.mode === 'admin'"
v-if="isSearch"
2023-12-06 09:05:43 +07:00
/>
2023-11-23 08:47:44 +07:00
<file-item
:viewMode="viewMode"
:action="props.mode === 'admin'"
v-if="!isSearch && viewMode === 'view_list'"
2023-11-23 08:47:44 +07:00
/>
<list-view
v-if="!isSearch && viewMode === 'view_module'"
:mode="mode"
/>
2023-11-23 08:47:44 +07:00
</div>
</div>
</div>
</div>
</section>
</template>
<style lang="scss" scoped>
.pointer {
cursor: pointer;
}
</style>