import type { ContentListQueryType, ContentListType, ContentType } from '~/types/contents'; import { cloneDeep } from 'lodash-es'; import type { Page } from '~/types/common'; import { defineStore } from 'pinia'; import { ref } from 'vue'; import { useAxios } from '~/composables/useAxios'; import { message } from 'ant-design-vue'; const DEFAULT_CONTENT_QUERY: ContentListQueryType = { keyword: '', orgId: '', page: 1, siteId: '', size: 10, type: 'TOTAL' }; const DEFAULT_CONTENTS_LIST: Page = { content: [], totalElements: 0, totalPages: 0 }; const DEFAULT_CONTENTS: ContentType = { contentTitle: '', contentPlain: '', contents: '', frstRegDt: '', frstRgtrId: '', lastMdfcnDt: '', lastMdfrId: '', orgId: '', siteId: '', useYn: true }; export const useContentStore = defineStore('useContentStore', () => { const contentsQuery = ref( cloneDeep(DEFAULT_CONTENT_QUERY) ); const contentsList = ref>( cloneDeep(DEFAULT_CONTENTS_LIST) ); const contents = ref(cloneDeep(DEFAULT_CONTENTS)); const initialValue = ref(''); const resetContentListQuery = () => { contentsQuery.value = cloneDeep(DEFAULT_CONTENT_QUERY); }; const resetContentList = () => { contentsList.value = cloneDeep(DEFAULT_CONTENTS_LIST); }; const resetContents = () => { contents.value = cloneDeep(DEFAULT_CONTENTS); initialValue.value = ''; }; const initContentsQuery = () => { contentsQuery.value = cloneDeep(DEFAULT_CONTENT_QUERY); }; const searchContentList = async () => { try { const { data } = await useAxios().get( '/api/admin/contents/contentsList', { params: { ...contentsQuery.value } } ); contentsList.value = data; } catch (e) { message.error('사이트 리스트를 불러오는데 실패하였습니다.'); } }; const searchContents = async (contentId: number) => { try { const { data } = await useAxios().get('/api/admin/contents/detail', { params: { contentId } }); contents.value = data; initialValue.value = data.contents; } catch (e) { message.error('컨텐츠 정보를 불러오는데 실패하였습니다.'); } }; const updateContents = () => { console.log(contents.value); return useAxios().post( '/api/admin/contents/updateContents', contents.value ); }; const deleteContents = async (data: ContentType[]) => { try { const params = new URLSearchParams(); data.forEach((item) => { params.append('contentId', String(item.contentId)); }); await useAxios().post('/api/admin/contents/deleteContents', null, { params }); message.success('컨텐츠 정보가 삭제 되었습니다.'); } catch (e) { message.error('컨텐츠 정보 삭제에 실패하였습니다.'); } }; return { contentsQuery, contentsList, contents, initialValue, resetContentListQuery, searchContentList, searchContents, resetContentList, resetContents, initContentsQuery, deleteContents, updateContents }; });