diff --git a/package-lock.json b/package-lock.json
index 3ddd1ad..1b68638 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,7 +14,9 @@
"vue-excel-xlsx": "^1.2.2",
"vue-router": "^3.2.0",
"vue-show-more-text": "^2.0.2",
+ "vue2-datepicker": "^3.11.1",
"vue2-editor": "^2.10.3",
+ "vue2-timepicker": "^1.1.6",
"vuedraggable": "^2.24.3",
"vuejs-datetimepicker": "^1.1.13",
"vuetify": "2.6.10",
@@ -5239,6 +5241,11 @@
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz",
"integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw=="
},
+ "node_modules/date-format-parse": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/date-format-parse/-/date-format-parse-0.2.7.tgz",
+ "integrity": "sha512-/+lyMUKoRogMuTeOVii6lUwjbVlesN9YRYLzZT/g3TEZ3uD9QnpjResujeEqUW+OSNbT7T1+SYdyEkTcRv+KDQ=="
+ },
"node_modules/de-indent": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
@@ -14644,6 +14651,17 @@
"integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
"dev": true
},
+ "node_modules/vue2-datepicker": {
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/vue2-datepicker/-/vue2-datepicker-3.11.1.tgz",
+ "integrity": "sha512-6PU/+pnp2mgZAfnSXmbdwj9516XsEvTiw61Q5SNrvvdy8W/FCxk1GAe9UZn/m9YfS5A47yK6XkcjMHbp7aFApA==",
+ "dependencies": {
+ "date-format-parse": "^0.2.7"
+ },
+ "peerDependencies": {
+ "vue": "^2.5.0"
+ }
+ },
"node_modules/vue2-editor": {
"version": "2.10.3",
"resolved": "https://registry.npmjs.org/vue2-editor/-/vue2-editor-2.10.3.tgz",
@@ -14652,6 +14670,14 @@
"quill": "^1.3.6"
}
},
+ "node_modules/vue2-timepicker": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/vue2-timepicker/-/vue2-timepicker-1.1.6.tgz",
+ "integrity": "sha512-DhO2UH4CTer/lMWxg+jqxn/+h6g2vZrsM6vCe9u7/Ie+Pej9yA+8mQA3C3VPApZ+LauKc43WxCspOXb6SGBOTw==",
+ "peerDependencies": {
+ "vue": "^2.6.5"
+ }
+ },
"node_modules/vuedraggable": {
"version": "2.24.3",
"resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.24.3.tgz",
@@ -19946,6 +19972,11 @@
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz",
"integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw=="
},
+ "date-format-parse": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/date-format-parse/-/date-format-parse-0.2.7.tgz",
+ "integrity": "sha512-/+lyMUKoRogMuTeOVii6lUwjbVlesN9YRYLzZT/g3TEZ3uD9QnpjResujeEqUW+OSNbT7T1+SYdyEkTcRv+KDQ=="
+ },
"de-indent": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
@@ -27496,6 +27527,14 @@
"integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
"dev": true
},
+ "vue2-datepicker": {
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/vue2-datepicker/-/vue2-datepicker-3.11.1.tgz",
+ "integrity": "sha512-6PU/+pnp2mgZAfnSXmbdwj9516XsEvTiw61Q5SNrvvdy8W/FCxk1GAe9UZn/m9YfS5A47yK6XkcjMHbp7aFApA==",
+ "requires": {
+ "date-format-parse": "^0.2.7"
+ }
+ },
"vue2-editor": {
"version": "2.10.3",
"resolved": "https://registry.npmjs.org/vue2-editor/-/vue2-editor-2.10.3.tgz",
@@ -27504,6 +27543,12 @@
"quill": "^1.3.6"
}
},
+ "vue2-timepicker": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/vue2-timepicker/-/vue2-timepicker-1.1.6.tgz",
+ "integrity": "sha512-DhO2UH4CTer/lMWxg+jqxn/+h6g2vZrsM6vCe9u7/Ie+Pej9yA+8mQA3C3VPApZ+LauKc43WxCspOXb6SGBOTw==",
+ "requires": {}
+ },
"vuedraggable": {
"version": "2.24.3",
"resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.24.3.tgz",
diff --git a/package.json b/package.json
index e59af1b..a4fb6b2 100644
--- a/package.json
+++ b/package.json
@@ -16,7 +16,9 @@
"vue-excel-xlsx": "^1.2.2",
"vue-router": "^3.2.0",
"vue-show-more-text": "^2.0.2",
+ "vue2-datepicker": "^3.11.1",
"vue2-editor": "^2.10.3",
+ "vue2-timepicker": "^1.1.6",
"vuedraggable": "^2.24.3",
"vuejs-datetimepicker": "^1.1.13",
"vuetify": "2.6.10",
diff --git a/src/api/audition.js b/src/api/audition.js
new file mode 100644
index 0000000..7df4cd2
--- /dev/null
+++ b/src/api/audition.js
@@ -0,0 +1,54 @@
+import Vue from 'vue';
+
+async function getAuditionList(page) {
+ return Vue.axios.get("/admin/audition?page=" + (page - 1) + "&size=20");
+}
+
+async function createAudition(formData) {
+ return Vue.axios.post("/admin/audition", formData, {
+ headers: {
+ "Content-Type": "multipart/form-data",
+ },
+ });
+}
+
+async function updateAudition(formData) {
+ return Vue.axios.put("/admin/audition", formData, {
+ headers: {
+ "Content-Type": "multipart/form-data",
+ },
+ });
+}
+
+async function getAuditionDetail(id) {
+ return Vue.axios.get("/admin/audition/" + id);
+}
+
+async function createAuditionRole(formData) {
+ return Vue.axios.post("/admin/audition/role", formData, {
+ headers: {
+ "Content-Type": "multipart/form-data",
+ },
+ });
+}
+
+async function updateAuditionRole(formData) {
+ return Vue.axios.put("/admin/audition/role", formData, {
+ headers: {
+ "Content-Type": "multipart/form-data",
+ },
+ });
+}
+
+async function getAuditionRoleDetail(id) {
+ return Vue.axios.get("/admin/audition/role/" + id);
+}
+
+async function getAuditionApplicantList(id, page) {
+ return Vue.axios.get("/admin/audition/role/" + id + "/applicant?page=" + (page - 1) + "&size=20");
+}
+
+export {
+ getAuditionList, createAudition, updateAudition, getAuditionDetail,
+ createAuditionRole, updateAuditionRole, getAuditionRoleDetail, getAuditionApplicantList
+}
diff --git a/src/router/index.js b/src/router/index.js
index 1912aa1..4b84bda 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -195,6 +195,21 @@ const routes = [
name: 'PrivacyView',
component: () => import(/* webpackChunkName: "support" */ '../views/Support/PrivacyView.vue')
},
+ {
+ path: '/audition',
+ name: 'AuditionView',
+ component: () => import(/* webpackChunkName: "audition" */ '../views/Audition/AuditionView.vue')
+ },
+ {
+ path: '/audition/detail',
+ name: 'AuditionDetailView',
+ component: () => import(/* webpackChunkName: "audition" */ '../views/Audition/AuditionDetailView.vue')
+ },
+ {
+ path: '/audition/role/detail',
+ name: 'AuditionRoleDetailView',
+ component: () => import(/* webpackChunkName: "audition" */ '../views/Audition/AuditionRoleDetailView.vue')
+ },
]
},
{
diff --git a/src/views/Audition/AuditionDetailView.vue b/src/views/Audition/AuditionDetailView.vue
new file mode 100644
index 0000000..ed10907
--- /dev/null
+++ b/src/views/Audition/AuditionDetailView.vue
@@ -0,0 +1,606 @@
+
+
+
+
+ {{ audition_title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 원작링크
+
+
+
+
+ 오디션 정보
+
+
+
+
+
+
+
+
+
+
+ 배역 등록
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+ 상태 : {{ getStatusStr(item.status) }}
+
+
+
+
+ 수정
+
+
+ 삭제
+
+
+
+
+
+
+
+ 등록된 배역이 없습니다.
+
+
+
+
+
+
+
+
+
+ 오디션 배역 등록
+
+
+
+
+
+
+
+
+
+
+ 배역 이름*
+
+
+
+
+
+
+
+
+
+ 오디션 배역 정보*
+
+
+
+
+
+
+
+
+
+ 오디션 대본 URL*
+
+
+
+
+
+
+
+
+
+ 모집상태
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 취소
+
+
+ 수정
+
+
+ 등록
+
+
+
+
+
+
+
+
+
+ 삭제하시겠습니까?
+
+
+
+
+ 취소
+
+
+ 확인
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/Audition/AuditionRoleDetailView.vue b/src/views/Audition/AuditionRoleDetailView.vue
new file mode 100644
index 0000000..0777ae9
--- /dev/null
+++ b/src/views/Audition/AuditionRoleDetailView.vue
@@ -0,0 +1,234 @@
+
+
+
+
+ {{ audition_title }} - {{ audition_role_name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 오디션 대본 링크
+
+
+
+
+ 오디션 배역 정보
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 지원 번호
+ |
+
+ 프로필
+ |
+
+ 닉네임
+ |
+
+ 듣기
+ |
+
+ 추천수
+ |
+
+
+
+
+ {{ item.applicantId }} |
+
+
+
+
+ 다운로드
+
+ |
+ {{ item.nickname }} |
+
+
+ |
+ {{ item.voteCount }} |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/Audition/AuditionView.vue b/src/views/Audition/AuditionView.vue
new file mode 100644
index 0000000..90d9623
--- /dev/null
+++ b/src/views/Audition/AuditionView.vue
@@ -0,0 +1,593 @@
+
+
+
+
+
+
+