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 @@ + + +