From 576736574c8ae55a35a130160a5c8142d365f828 Mon Sep 17 00:00:00 2001 From: somnetsak123 Date: Tue, 28 Nov 2023 17:44:56 +0700 Subject: [PATCH] fix: ListView CRUD --- Services/client/src/components/FormUpload.vue | 10 +- Services/client/src/components/ListView.vue | 208 +++++++++++++----- Services/client/src/components/PageLayout.vue | 57 ++--- 3 files changed, 189 insertions(+), 86 deletions(-) diff --git a/Services/client/src/components/FormUpload.vue b/Services/client/src/components/FormUpload.vue index b4be980..5a10dcc 100644 --- a/Services/client/src/components/FormUpload.vue +++ b/Services/client/src/components/FormUpload.vue @@ -2,7 +2,7 @@ import { ref } from 'vue' import { storeToRefs } from 'pinia' import { useTreeDataStore } from '@/stores/tree-data' -import TagInput from '@/components/TagInput.vue' +import TagInput from '@/components/TagInput.vue' const { currentPath } = storeToRefs(useTreeDataStore()) const { uploadFile, checkFile } = useTreeDataStore() @@ -44,8 +44,8 @@ async function handleSubmit(continueUpload: boolean = false) { await uploadFile(currentPath.value, inputFile.value, { title: fileTitle.value, description: fileDesc.value, - keyword: [fileKeyword.value], - category: [fileCategory.value], + keyword: fileKeyword.value, + category: fileCategory.value, }) } else notification.value = true } @@ -113,9 +113,7 @@ async function handleSubmit(continueUpload: boolean = false) { dense /> - - - + (false) -const drawerFile = ref(false) -const drawerStatus = ref<'edit' | 'create'>('create') -const editPathname = ref('') -const confirmDelete = ref(false) -const currentPathDelete = ref('') +const { + createFolder, + editFolder, + getFolder, + deleteFolder, + uploadFile, + updateFile, + deleteFile, +} = useTreeDataStore() + +const DEPT_NAME = ['ตู้เอกสาร', 'ลิ้นชัก', 'แฟ้ม', 'แฟ้มย่อย'] as const const props = defineProps<{ mode: 'admin' | 'user' @@ -44,6 +45,105 @@ const currentIcon = computed(() => ? 'inbox' : 'o_folder_open' ) + +const folderFormState = ref(false) +const folderFormPath = ref('') +const folderFormData = ref<{ + name?: string +}>({}) +const folderFormType = ref<'edit' | 'create'>('create') +const fileFormState = ref(false) +const fileFormPath = ref('') +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'] = [ { name: 'name', @@ -144,16 +244,11 @@ const onRowClick = (evt: Event, row: TreeDataFolder, index: number) => { color="primary" dense icon="add" - @click=" - () => { - drawer = !drawer - drawerStatus = 'create' - drawerFile = false - } - " + @click="() => triggerFolderCreate()" /> + { dense icon="edit" @click.stop=" - () => { - drawer = !drawer - drawerStatus = 'edit' - editPathname = actionsRow.row.pathname - } + triggerFolderEdit( + actionsRow.row.name, + actionsRow.row.pathname + ) " /> { color="negative" dense icon="delete" - @click.stop=" - () => { - confirmDelete = !confirmDelete - currentPathDelete = actionsRow.row.pathname - } - " + @click.stop="deleteFolder(actionsRow.row.pathname)" /> @@ -240,12 +329,7 @@ const onRowClick = (evt: Event, row: TreeDataFolder, index: number) => { color="primary" dense icon="add" - @click=" - () => { - drawerFile = !drawerFile - drawer = false - } - " + @click="() => triggerFileCreate()" /> @@ -294,8 +378,22 @@ const onRowClick = (evt: Event, row: TreeDataFolder, index: number) => {
- - + +
@@ -303,23 +401,23 @@ const onRowClick = (evt: Event, row: TreeDataFolder, index: number) => { - - - diff --git a/Services/client/src/components/PageLayout.vue b/Services/client/src/components/PageLayout.vue index 3b9103a..6f5ae94 100644 --- a/Services/client/src/components/PageLayout.vue +++ b/Services/client/src/components/PageLayout.vue @@ -10,19 +10,14 @@ import SearchBar from '@/modules/01_user/components/SearchBar.vue' import FileSearched from '@/components/FileSearched.vue' import FileDownload from '@/modules/01_user/components/FileDownload.vue' import ListView from '@/components/ListView.vue' -import FromEdit from '@/components/FromEdit.vue' +import FolderForm from './FolderForm.vue' - -const DEPT_NAME = ['ตู้เอกสาร', 'ลิ้นชัก', 'แฟ้ม', 'แฟ้มย่อย', 'ไฟล์'] +const DEPT_NAME = ['ตู้เอกสาร', 'ลิ้นชัก', 'แฟ้ม', 'แฟ้มย่อย'] as const const { isPreview } = storeToRefs(useFileInfoStore()) const { isSearch } = storeToRefs(useSearchDataStore()) const { data, currentDept } = storeToRefs(useTreeDataStore()) -const { getCabinet, gotoParent } = useTreeDataStore() - -const drawer = ref(false) -const drawerFile = ref(false) -const drawerStatus = ref<'create'>('create') +const { createFolder, getCabinet, gotoParent } = useTreeDataStore() const viewMode = ref<'view_list' | 'view_module'>('view_list') const inputSearch = ref() @@ -30,6 +25,27 @@ const props = defineProps<{ mode: 'admin' | 'user' }>() +const folderFormState = ref(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)