fix: ListView CRUD

This commit is contained in:
somnetsak123 2023-11-28 17:44:56 +07:00 committed by Methapon2001
parent 906c3bc4f5
commit 576736574c
No known key found for this signature in database
GPG key ID: 849924FEF46BD132
3 changed files with 189 additions and 86 deletions

View file

@ -2,7 +2,7 @@
import { ref } from 'vue' import { ref } from 'vue'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { useTreeDataStore } from '@/stores/tree-data' import { useTreeDataStore } from '@/stores/tree-data'
import TagInput from '@/components/TagInput.vue' import TagInput from '@/components/TagInput.vue'
const { currentPath } = storeToRefs(useTreeDataStore()) const { currentPath } = storeToRefs(useTreeDataStore())
const { uploadFile, checkFile } = useTreeDataStore() const { uploadFile, checkFile } = useTreeDataStore()
@ -44,8 +44,8 @@ async function handleSubmit(continueUpload: boolean = false) {
await uploadFile(currentPath.value, inputFile.value, { await uploadFile(currentPath.value, inputFile.value, {
title: fileTitle.value, title: fileTitle.value,
description: fileDesc.value, description: fileDesc.value,
keyword: [fileKeyword.value], keyword: fileKeyword.value,
category: [fileCategory.value], category: fileCategory.value,
}) })
} else notification.value = true } else notification.value = true
} }
@ -113,9 +113,7 @@ async function handleSubmit(continueUpload: boolean = false) {
dense dense
/> />
<tag-input/> <tag-input />
</q-drawer> </q-drawer>
<q-dialog <q-dialog

View file

@ -4,24 +4,25 @@ import { storeToRefs } from 'pinia'
import type { QTableProps } from 'quasar' import type { QTableProps } from 'quasar'
import { useTreeDataStore, type TreeDataFolder } from '@/stores/tree-data' import { useTreeDataStore, type TreeDataFolder } from '@/stores/tree-data'
import { useFileInfoStore } from '@/stores/file-info-data' import { useFileInfoStore } from '@/stores/file-info-data'
import FromEdit from '@/components/FromEdit.vue'
import FileIcon from '@/components/FileIcon.vue' import FileIcon from '@/components/FileIcon.vue'
import FormUpload from '@/components/FormUpload.vue' import FileForm from './FileForm.vue'
import DialogDelete from '@/components/DialogDelete.vue' import FolderForm from './FolderForm.vue'
const { deleteFolder } = useTreeDataStore()
const { getFormatDate, getSize, getType } = useFileInfoStore() const { getFormatDate, getSize, getType } = useFileInfoStore()
const { listDataFile, listDataFolder, currentDept } = storeToRefs( const { listDataFile, listDataFolder, currentDept, currentPath } = storeToRefs(
useTreeDataStore() useTreeDataStore()
) )
const { getFolder } = useTreeDataStore() const {
const DEPT_NAME = ['ตู้เอกสาร', 'ลิ้นชัก', 'แฟ้ม', 'แฟ้มย่อย'] createFolder,
const drawer = ref<boolean>(false) editFolder,
const drawerFile = ref<boolean>(false) getFolder,
const drawerStatus = ref<'edit' | 'create'>('create') deleteFolder,
const editPathname = ref<string>('') uploadFile,
const confirmDelete = ref<boolean>(false) updateFile,
const currentPathDelete = ref<string>('') deleteFile,
} = useTreeDataStore()
const DEPT_NAME = ['ตู้เอกสาร', 'ลิ้นชัก', 'แฟ้ม', 'แฟ้มย่อย'] as const
const props = defineProps<{ const props = defineProps<{
mode: 'admin' | 'user' mode: 'admin' | 'user'
@ -44,6 +45,105 @@ const currentIcon = computed(() =>
? 'inbox' ? 'inbox'
: 'o_folder_open' : 'o_folder_open'
) )
const folderFormState = ref<boolean>(false)
const folderFormPath = ref<string>('')
const folderFormData = ref<{
name?: string
}>({})
const folderFormType = ref<'edit' | 'create'>('create')
const fileFormState = ref<boolean>(false)
const fileFormPath = ref<string>('')
const fileFormData = ref<{
file?: File
title?: string
description?: string
keyword?: string
category?: string
}>({})
const fileFormType = ref<'edit' | 'create'>('create')
function triggerFolderCreate() {
folderFormType.value = 'create'
folderFormData.value = {}
folderFormState.value = !folderFormState.value
}
function triggerFolderEdit(name: string, pathname: string) {
folderFormType.value = 'edit'
folderFormPath.value = pathname
folderFormData.value.name = name
folderFormState.value = true
}
async function submitFolderForm(value: {
mode: 'create' | 'edit'
name: string
}) {
if (value.mode === 'create') {
await createFolder(value.name)
} else {
await editFolder(value.name, folderFormPath.value)
}
}
function triggerFileCreate() {
fileFormType.value = 'create'
fileFormData.value = {}
fileFormState.value = !fileFormState.value
}
function triggerFileEdit(
value: {
title: string
description: string
keyword: string
category: string
},
pathname: string
) {
fileFormState.value = true
fileFormType.value = 'edit'
fileFormPath.value = pathname
fileFormData.value = {
title: value.title,
description: value.description,
keyword: value.keyword,
category: value.keyword,
}
}
async function submitFileForm(value: {
mode: 'create' | 'edit'
file: File
title: string
description: string
keyword: string
category: string
}) {
if (value.mode === 'create') {
await uploadFile(currentPath.value, value.file, {
title: value.title,
description: value.description,
keyword: value.keyword,
category: value.category,
})
} else {
await updateFile(
fileFormPath.value,
{
title: value.title,
description: value.description,
keyword: value.keyword,
category: value.category,
},
value.file
)
}
fileFormData.value = {}
fileFormState.value = false
}
const columnsFolder: QTableProps['columns'] = [ const columnsFolder: QTableProps['columns'] = [
{ {
name: 'name', name: 'name',
@ -144,16 +244,11 @@ const onRowClick = (evt: Event, row: TreeDataFolder, index: number) => {
color="primary" color="primary"
dense dense
icon="add" icon="add"
@click=" @click="() => triggerFolderCreate()"
() => {
drawer = !drawer
drawerStatus = 'create'
drawerFile = false
}
"
/> />
</div> </div>
</div> </div>
<q-table <q-table
flat flat
bordered bordered
@ -197,11 +292,10 @@ const onRowClick = (evt: Event, row: TreeDataFolder, index: number) => {
dense dense
icon="edit" icon="edit"
@click.stop=" @click.stop="
() => { triggerFolderEdit(
drawer = !drawer actionsRow.row.name,
drawerStatus = 'edit' actionsRow.row.pathname
editPathname = actionsRow.row.pathname )
}
" "
/> />
<q-btn <q-btn
@ -209,12 +303,7 @@ const onRowClick = (evt: Event, row: TreeDataFolder, index: number) => {
color="negative" color="negative"
dense dense
icon="delete" icon="delete"
@click.stop=" @click.stop="deleteFolder(actionsRow.row.pathname)"
() => {
confirmDelete = !confirmDelete
currentPathDelete = actionsRow.row.pathname
}
"
/> />
</div> </div>
</q-td> </q-td>
@ -240,12 +329,7 @@ const onRowClick = (evt: Event, row: TreeDataFolder, index: number) => {
color="primary" color="primary"
dense dense
icon="add" icon="add"
@click=" @click="() => triggerFileCreate()"
() => {
drawerFile = !drawerFile
drawer = false
}
"
/> />
</div> </div>
</div> </div>
@ -294,8 +378,22 @@ const onRowClick = (evt: Event, row: TreeDataFolder, index: number) => {
</q-tooltip> </q-tooltip>
</div> </div>
<div v-if="props.mode === 'admin'"> <div v-if="props.mode === 'admin'">
<q-btn flat color="positive" dense icon="edit" @click="" /> <q-btn
<q-btn flat color="negative" dense icon="delete" @click="" /> flat
color="positive"
dense
icon="edit"
@click="
() => triggerFileEdit(actionsRow.row, actionsRow.row.pathname)
"
/>
<q-btn
flat
color="negative"
dense
icon="delete"
@click="() => deleteFile(actionsRow.row.pathname)"
/>
</div> </div>
</q-td> </q-td>
</template> </template>
@ -303,23 +401,23 @@ const onRowClick = (evt: Event, row: TreeDataFolder, index: number) => {
</div> </div>
</div> </div>
<from-edit <file-form
v-if="drawer" :mode="fileFormType"
:drawer="drawer" v-model:open="fileFormState"
:drawerStatus="drawerStatus" v-model:title="fileFormData.title"
:DEPT_NAME="DEPT_NAME" v-model:description="fileFormData.description"
:currentDept="currentDept" v-model:keyword="fileFormData.keyword"
:editPathname="editPathname" v-model:category="fileFormData.category"
@update:drawer="() => (drawer = false)" @submit="submitFileForm"
/> />
<form-upload
:drawerFile="drawerFile" <folder-form
@update:drawerFile="() => (drawerFile = false)" :mode="folderFormType"
/> :tree="DEPT_NAME[currentDept]"
<dialog-delete v-if="currentDept < 4"
:confirmDelete="confirmDelete" v-model:open="folderFormState"
:pathname="currentPathDelete" v-model:name="folderFormData.name"
@update:confirmDelete="() => (confirmDelete = false)" @submit="submitFolderForm"
/> />
</template> </template>

View file

@ -10,19 +10,14 @@ import SearchBar from '@/modules/01_user/components/SearchBar.vue'
import FileSearched from '@/components/FileSearched.vue' import FileSearched from '@/components/FileSearched.vue'
import FileDownload from '@/modules/01_user/components/FileDownload.vue' import FileDownload from '@/modules/01_user/components/FileDownload.vue'
import ListView from '@/components/ListView.vue' import ListView from '@/components/ListView.vue'
import FromEdit from '@/components/FromEdit.vue' import FolderForm from './FolderForm.vue'
const DEPT_NAME = ['ตู้เอกสาร', 'ลิ้นชัก', 'แฟ้ม', 'แฟ้มย่อย'] as const
const DEPT_NAME = ['ตู้เอกสาร', 'ลิ้นชัก', 'แฟ้ม', 'แฟ้มย่อย', 'ไฟล์']
const { isPreview } = storeToRefs(useFileInfoStore()) const { isPreview } = storeToRefs(useFileInfoStore())
const { isSearch } = storeToRefs(useSearchDataStore()) const { isSearch } = storeToRefs(useSearchDataStore())
const { data, currentDept } = storeToRefs(useTreeDataStore()) const { data, currentDept } = storeToRefs(useTreeDataStore())
const { getCabinet, gotoParent } = useTreeDataStore() const { createFolder, getCabinet, gotoParent } = useTreeDataStore()
const drawer = ref<boolean>(false)
const drawerFile = ref<boolean>(false)
const drawerStatus = ref<'create'>('create')
const viewMode = ref<'view_list' | 'view_module'>('view_list') const viewMode = ref<'view_list' | 'view_module'>('view_list')
const inputSearch = ref<string>() const inputSearch = ref<string>()
@ -30,6 +25,27 @@ const props = defineProps<{
mode: 'admin' | 'user' mode: 'admin' | 'user'
}>() }>()
const folderFormState = ref<boolean>(false)
const folderFormType = ref<'edit' | 'create'>('create')
const folderFormData = ref<{
name?: string
}>({})
function triggerFolderCreate() {
folderFormType.value = 'create'
folderFormData.value = {}
folderFormState.value = !folderFormState.value
}
async function submitFolderForm(value: {
mode: 'create' | 'edit'
name: string
}) {
if (value.mode === 'create') {
await createFolder(value.name)
}
}
onMounted(getCabinet) onMounted(getCabinet)
</script> </script>
<template> <template>
@ -107,13 +123,7 @@ onMounted(getCabinet)
color="primary" color="primary"
dense dense
icon="add" icon="add"
@click=" @click="()=> triggerFolderCreate()"
() => {
drawer = !drawer
drawerStatus = 'create'
drawerFile = false
}
"
/> />
</span> </span>
<q-btn <q-btn
@ -142,16 +152,13 @@ onMounted(getCabinet)
</div> </div>
</section> </section>
<folder-form
:mode="folderFormType"
<from-edit :tree="DEPT_NAME[currentDept]"
v-if="currentDept === 0 && drawer " v-if="currentDept < 4"
:drawer="drawer" v-model:open="folderFormState"
:drawerStatus="drawerStatus" v-model:name="folderFormData.name"
:DEPT_NAME="DEPT_NAME" @submit="submitFolderForm"
:currentDept="currentDept"
editPathname=""
@update:drawer="() => (drawer = false)"
/> />
</template> </template>