diff --git a/package-lock.json b/package-lock.json
index 63badfe..420d414 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,6 +9,7 @@
"version": "0.1.0",
"dependencies": {
"core-js": "^3.6.5",
+ "file-saver": "^2.0.5",
"vue": "^2.6.11",
"vue-excel-xlsx": "^1.2.2",
"vue-router": "^3.2.0",
@@ -6809,6 +6810,11 @@
"webpack": "^4.0.0"
}
},
+ "node_modules/file-saver": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
+ "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
+ },
"node_modules/file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
@@ -21169,6 +21175,11 @@
"schema-utils": "^2.5.0"
}
},
+ "file-saver": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
+ "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
+ },
"file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
diff --git a/package.json b/package.json
index d65bb0d..547cd39 100644
--- a/package.json
+++ b/package.json
@@ -11,6 +11,7 @@
},
"dependencies": {
"core-js": "^3.6.5",
+ "file-saver": "^2.0.5",
"vue": "^2.6.11",
"vue-excel-xlsx": "^1.2.2",
"vue-router": "^3.2.0",
diff --git a/src/api/can.js b/src/api/can.js
index 1ba3c44..f3d2f32 100644
--- a/src/api/can.js
+++ b/src/api/can.js
@@ -18,4 +18,30 @@ async function paymentCan(can, method, member_id) {
return Vue.axios.post('/admin/can/charge', request)
}
-export {getCans, insertCan, deleteCan, paymentCan}
+async function getCouponList(page) {
+ return Vue.axios.get('/can/coupon?page=' + (page - 1) + "&size=20");
+}
+
+async function generateCoupon(couponName, can, validity, isMultipleUse, couponNumberCount) {
+ const request = {couponName, can, validity: validity + ' 23:59:59', isMultipleUse, couponNumberCount};
+ return Vue.axios.post('/can/coupon', request);
+}
+
+async function getCouponNumberList(couponId, page) {
+ return Vue.axios.get('/can/coupon/number-list?couponId=' + couponId + '&page=' + (page - 1) + "&size=20");
+}
+
+async function downloadCouponNumberList(couponId) {
+ return Vue.axios.get('/can/coupon/number-list/download?couponId=' + couponId, { responseType: 'blob' });
+}
+
+export {
+ getCans,
+ insertCan,
+ deleteCan,
+ paymentCan,
+ getCouponList,
+ generateCoupon,
+ getCouponNumberList,
+ downloadCouponNumberList
+}
diff --git a/src/router/index.js b/src/router/index.js
index fe2570d..287dd63 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -110,6 +110,11 @@ const routes = [
name: 'CoinStatus',
component: () => import(/* webpackChunkName: "coin" */ '../views/Can/CanStatus.vue')
},
+ {
+ path: '/can/coupon',
+ name: 'CanCoupon',
+ component: () => import(/* webpackChunkName: "coin" */ '../views/Can/CanCoupon.vue')
+ },
{
path: '/calculate/live',
name: 'CalculateLive',
diff --git a/src/views/Can/CanCoupon.vue b/src/views/Can/CanCoupon.vue
new file mode 100644
index 0000000..72fbee1
--- /dev/null
+++ b/src/views/Can/CanCoupon.vue
@@ -0,0 +1,562 @@
+
+
+
+
+ 캔 쿠폰관리
+
+
+
+
+
+
+
+
+
+
+ 쿠폰 등록
+
+
+
+
+
+
+
+ {{ item.id }}
+
+
+
+ {{ item.couponName }}
+
+
+
+ {{ item.can.toLocaleString('en-US') }}
+
+
+
+ {{ item.couponCount.toLocaleString('en-US') }}
+
+
+
+ {{ item.useCouponCount.toLocaleString('en-US') }}
+
+
+
+ {{ item.validity }}
+
+
+
+
+ O
+
+
+ X
+
+
+
+
+
+ O
+
+
+ X
+
+
+
+
+ 다운로드
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 쿠폰 등록
+
+
+
+
+
+
+
+
+
+
+
+
+ 유효기간
+
+
+
+
+
+
+
+
+
+ 인증 계정당 중복 사용 가능여부
+
+
+
+
+
+
+
+
+
+ 활성화
+
+
+
+
+
+
+
+
+
+ 취소
+
+
+ 쿠폰 발행하기
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.couponNumberId }}
+
+
+
+ {{ formatWithHyphens(item.couponNumber) }}
+
+
+
+
+ O
+
+
+ X
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 확인
+
+
+
+
+
+
+
+
+