diff --git a/nuxt/components/common/PermitButton.vue b/nuxt/components/common/PermitButton.vue
new file mode 100644
index 0000000..223470e
--- /dev/null
+++ b/nuxt/components/common/PermitButton.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
diff --git a/nuxt/components/data/Pagenation.vue b/nuxt/components/data/Pagenation.vue
new file mode 100644
index 0000000..ac467ee
--- /dev/null
+++ b/nuxt/components/data/Pagenation.vue
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
diff --git a/nuxt/components/data/editor.vue b/nuxt/components/data/editor.vue
new file mode 100644
index 0000000..e035c0f
--- /dev/null
+++ b/nuxt/components/data/editor.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
diff --git a/nuxt/components/data/grid.vue b/nuxt/components/data/grid.vue
new file mode 100644
index 0000000..dc11911
--- /dev/null
+++ b/nuxt/components/data/grid.vue
@@ -0,0 +1,136 @@
+
+
+
+
+
diff --git a/nuxt/pages/admin/sys/site/index.vue b/nuxt/pages/admin/sys/site/index.vue
new file mode 100644
index 0000000..6b2f13e
--- /dev/null
+++ b/nuxt/pages/admin/sys/site/index.vue
@@ -0,0 +1,192 @@
+
+
+
+
+
+
+
+
+
+ 삭제
+
+
+
+ 추가
+ 저장
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nuxt/stores/login/index.ts b/nuxt/stores/login/index.ts
index aa57ea3..6c17076 100644
--- a/nuxt/stores/login/index.ts
+++ b/nuxt/stores/login/index.ts
@@ -19,9 +19,14 @@ export const useAuthStore = defineStore('authStore', () => {
return await useAxios().post(`/api/admin/login`, loginRequest.value);
};
+ const permitApiList = computed(() => {
+ return loginResponse.value.permitApiList;
+ });
+
return {
loginRequest,
loginResponse,
- LoginAPI
+ LoginAPI,
+ permitApiList
};
});
\ No newline at end of file
diff --git a/nuxt/stores/sys/site/index.ts b/nuxt/stores/sys/site/index.ts
new file mode 100644
index 0000000..583d19f
--- /dev/null
+++ b/nuxt/stores/sys/site/index.ts
@@ -0,0 +1,34 @@
+import type { SiteType } from '~/types/sys/site';
+
+export const useSiteStore = defineStore('useSiteStore', () => {
+ const siteList = ref([]);
+
+ const resetSiteList = () => {
+ siteList.value = [];
+ };
+
+ const searchSiteList = async () => {
+ try {
+ const { data } = await useAxios().get('/api/admin/sys/site/siteList');
+ siteList.value = data;
+ } catch (e) {
+ message.error('사이트 리스트를 불러오는데 실패하였습니다.');
+ }
+ };
+
+ const updateSiteList = async (data: SiteType[]) => {
+ try {
+ await useAxios().post('/api/admin/sys/site/updateSiteList', data);
+ message.success('사이트 정보가 저장이 되었습니다.');
+ } catch (e) {
+ message.error('사이트 저장에 실패하였습니다.');
+ }
+ };
+
+ return {
+ siteList,
+ resetSiteList,
+ searchSiteList,
+ updateSiteList
+ };
+});
diff --git a/nuxt/types/data/grid.ts b/nuxt/types/data/grid.ts
new file mode 100644
index 0000000..8451818
--- /dev/null
+++ b/nuxt/types/data/grid.ts
@@ -0,0 +1,50 @@
+import type {
+ GridEventListener,
+ OptColumn,
+ OptHeader,
+ OptRow,
+ OptRowHeader,
+ OptSummaryData,
+ OptTree
+} from 'tui-grid/types/options';
+import type { EditingEvent, TabMode } from 'tui-grid/types/store/focus';
+import type { SelectionUnit } from 'tui-grid/types/store/selection';
+import type {
+ ClipboardCopyOptions,
+ ColumnOptions
+} from 'tui-grid/types/store/column';
+import type { PageOptions } from 'tui-grid/types/store/data';
+import type { CreateMenuGroups } from 'tui-grid/types/store/contextMenu';
+
+export type DataGridType = {
+ data: OptRow[];
+ columns: OptColumn[];
+ bodyHeight?: number | 'fitToParent' | 'auto';
+ columnOptions?: ColumnOptions;
+ keyColumnName?: String;
+ width?: number | 'auto';
+ heightResizable?: Boolean;
+ minBodyHeight?: Number;
+ rowHeight?: number | 'auto';
+ minRowHeight?: Number;
+ scrollX?: Boolean;
+ scrollY?: Boolean;
+ editingEvent?: EditingEvent;
+ tabMode?: TabMode;
+ rowHeaders?: OptRowHeader[];
+ summary?: OptSummaryData;
+ useClientSort?: Boolean;
+ selectionUnit?: SelectionUnit;
+ showDummyRows?: Boolean;
+ copyOptions?: ClipboardCopyOptions;
+ pageOptions?: PageOptions;
+ treeColumnOptions?: OptTree;
+ header?: OptHeader;
+ usageStatistics?: Boolean;
+ disabled?: Boolean;
+ onGridMounted?: GridEventListener;
+ onGridUpdated?: GridEventListener;
+ onGridBeforeDestroy?: GridEventListener;
+ draggable?: Boolean;
+ contextMenu?: CreateMenuGroups;
+};
diff --git a/nuxt/types/data/pagination.ts b/nuxt/types/data/pagination.ts
new file mode 100644
index 0000000..8f146f6
--- /dev/null
+++ b/nuxt/types/data/pagination.ts
@@ -0,0 +1,6 @@
+export type PaginationType = {
+ totalItems: number;
+ itemsPerPage: number;
+ visiblePages: number;
+ centerAlign?: boolean;
+};
diff --git a/nuxt/types/sys/site/index.ts b/nuxt/types/sys/site/index.ts
new file mode 100644
index 0000000..08bd3b8
--- /dev/null
+++ b/nuxt/types/sys/site/index.ts
@@ -0,0 +1,13 @@
+export type SiteType = {
+ siteId: string;
+ siteName: string;
+ siteDescription: string;
+ siteDomain: string;
+ siteType: '' | 'ADMIN' | 'USER';
+ sitePrefix: string;
+ siteLocale: string;
+ siteLogo: string;
+ bscUrl: string;
+ lgnUrl: string;
+ siteRegdate: string;
+};