diff --git a/package.json b/package.json
index 42267eb..a4b9df0 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "billing-wise",
- "version": "1.0.0",
+ "version": "1.0.1",
"private": true,
"type": "module",
"scripts": {
diff --git a/src/assets/scss/common.scss b/src/assets/scss/common.scss
index 30b37ff..835d2ff 100644
--- a/src/assets/scss/common.scss
+++ b/src/assets/scss/common.scss
@@ -1,7 +1,7 @@
$light-theme-color: rgba(130, 112, 190, 0.7);
$theme-color: rgb(130, 112, 190);
$input-color: #6C7F98;
-$back-color: #EBEBEB;
+$back-color: rgb(235, 235, 235, 0.5);
$success-color: rgb(44, 128, 206);
$waiting-color: #DFD93B;
$warning-color: rgb(255, 99, 71);
@@ -66,11 +66,9 @@ $mobile-header-height : 100px;
}
@mixin root-container {
- background: $back-color;
- width: 100%;
+ min-width: 100%;
min-height: 100%;
- height: 100%;
- overflow: auto;
+ box-sizing: border-box;
}
diff --git a/src/assets/scss/component/table.scss b/src/assets/scss/component/table.scss
index 22fb911..998b512 100644
--- a/src/assets/scss/component/table.scss
+++ b/src/assets/scss/component/table.scss
@@ -14,6 +14,7 @@
background: white;
width: 100%;
flex-grow: 1;
+ min-height: 700px;
overflow:auto;
border-radius: 5px;
}
diff --git a/src/assets/scss/contract/choose-box.scss b/src/assets/scss/contract/choose-box.scss
index 0604f44..b3e1fdb 100644
--- a/src/assets/scss/contract/choose-box.scss
+++ b/src/assets/scss/contract/choose-box.scss
@@ -1,8 +1,7 @@
.right-side {
@include flex-box(column, space-between, 20px);
position: relative;
- width: 100%;
- min-width: 800px;
+ height: 100%;
}
.right-side-header {
diff --git a/src/components/auth/AuthLoading.vue b/src/components/auth/AuthLoading.vue
new file mode 100644
index 0000000..0a7c0c8
--- /dev/null
+++ b/src/components/auth/AuthLoading.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/common/ExcelUpload.vue b/src/components/common/ExcelUpload.vue
index 640d853..61abfde 100644
--- a/src/components/common/ExcelUpload.vue
+++ b/src/components/common/ExcelUpload.vue
@@ -18,8 +18,8 @@
@@ -50,6 +50,7 @@
import { mapStores } from 'pinia';
import { useContractDetailStore } from '@/stores/contract/contractDetail';
import { toDateFromDateTime } from '@/utils/formatter';
+import { useConsentDetailStore } from '@/stores/contract/consentDetail';
import TitleInfoVue from '../common/info/TitleInfo.vue';
export default {
@@ -58,6 +59,7 @@ export default {
TitleInfoVue
},
computed: {
+ ...mapStores(useConsentDetailStore),
...mapStores(useContractDetailStore),
subscription() {
return this.contractDetailStore.data.subscription? '정기': '단기';
@@ -71,6 +73,15 @@ export default {
updatedAt() {
return toDateFromDateTime(this.contractDetailStore.data.updatedAt);
},
+ isConsentExist() {
+ if (this.contractDetailStore.data.paymentType.id === 1) {
+ return '불필요';
+ } else if (this.consentDetailStore.isExist) {
+ return '등록 완료';
+ } else {
+ return '등록 대기'
+ }
+ }
},
}
diff --git a/src/components/contract/create/ContractChooseInfo.vue b/src/components/contract/create/ContractChooseInfo.vue
index 560b504..454c99b 100644
--- a/src/components/contract/create/ContractChooseInfo.vue
+++ b/src/components/contract/create/ContractChooseInfo.vue
@@ -44,30 +44,6 @@ export default {
TitleSelectVue,
InfoInputVue,
},
- data() {
- return {
- isSubscriptionIdx: 0,
- isSubscription: [
- { name: '정기', value: 'true' },
- { name: '단기', value: 'false' },
- ],
- invoiceTypeIdx: 0,
- invoiceType: [
- { name: '자동 청구', value: 1 },
- { name: '수동 청구', value: 2 },
- ],
- paymentTypeIdx: 0,
- paymentType: [
- { name: '납부자 결제', value: 1 },
- { name: '실시간 CMS', value: 2 },
- ],
- isEasyConsentIdx: 0,
- isEasyConsent: [
- { name: '미사용', value: false },
- { name: '사용', value: true },
- ]
- }
- },
computed: {
...mapStores(useContractCreateStore),
contractCycle: {
diff --git a/src/components/contract/create/ContractChooseItem.vue b/src/components/contract/create/ContractChooseItem.vue
index a63c194..d0882fb 100644
--- a/src/components/contract/create/ContractChooseItem.vue
+++ b/src/components/contract/create/ContractChooseItem.vue
@@ -2,10 +2,6 @@
@@ -13,17 +9,15 @@
+
+
\ No newline at end of file
diff --git a/src/stores/auth.js b/src/stores/auth.js
index d71b8f5..0df91eb 100644
--- a/src/stores/auth.js
+++ b/src/stores/auth.js
@@ -5,17 +5,30 @@ import { defineStore } from 'pinia'
export const useAuthStore = defineStore('auth', {
state() {
return {
- isLoggedIn: false
+ isLoggedIn: false,
+ data: {
+ clientId: 0,
+ clientName : '',
+ clientPhone : '',
+ userEmail : '',
+ userId : 0,
+ userName : '홍길동',
+ userPhone : '01011111111'
+ },
}
},
actions: {
login() {
+ this.$reset();
this.isLoggedIn = true;
},
logout() {
authAxios.post('auth/logout');
this.isLoggedIn = false;
router.push({name: 'login'})
+ },
+ setUserData(data) {
+ this.data = data
}
},
persist: {
diff --git a/src/stores/contract/contractBulk.js b/src/stores/contract/contractBulk.js
index 88c5178..e5fa195 100644
--- a/src/stores/contract/contractBulk.js
+++ b/src/stores/contract/contractBulk.js
@@ -4,7 +4,8 @@ export const useContractBulkStore = defineStore('contractBulk', {
state() {
return {
exampleImg: 'example_contract.png',
- download: '계약등록.xlsx',
+ download: 'https://t5-bucket.s3.ap-northeast-2.amazonaws.com/excel/%EA%B3%84%EC%95%BD%EB%93%B1%EB%A1%9D.xlsx',
+ fileName: '계약등록.xlsx',
file: null,
uploadData: null,
errorList: [],
diff --git a/src/stores/contract/contractCreate.js b/src/stores/contract/contractCreate.js
index 802b415..a82c88c 100644
--- a/src/stores/contract/contractCreate.js
+++ b/src/stores/contract/contractCreate.js
@@ -36,8 +36,7 @@ export const useContractCreateStore = defineStore('contractCreate', {
],
isEasyConsentIdx: 0,
isEasyConsent: [
- { name: '미사용', value: false },
- { name: '사용', value: true },
+ { name: '불필요', value: false },
]
}
},
@@ -74,6 +73,17 @@ export const useContractCreateStore = defineStore('contractCreate', {
},
setPaymentType(idx) {
this.paymentTypeIdx = idx;
+ if (idx === 0) {
+ this.isEasyConsentIdx = 0;
+ this.isEasyConsent = [
+ { name: '불필요', value: false },
+ ]
+ } else {
+ this.isEasyConsent = [
+ { name: '미사용', value: false },
+ { name: '사용', value: true },
+ ]
+ }
},
setIsEasyConsent(idx) {
this.isEasyConsentIdx = idx
diff --git a/src/stores/contract/contractDetail.js b/src/stores/contract/contractDetail.js
index c7b0cb7..d378192 100644
--- a/src/stores/contract/contractDetail.js
+++ b/src/stores/contract/contractDetail.js
@@ -4,42 +4,49 @@ export const useContractDetailStore = defineStore('contractDetail', {
state() {
return {
data: {
- "id": null,
- "member": {
- "id": null,
- "name": null,
- "phone": null,
- "email": null
+ id: null,
+ member: {
+ id: null,
+ name: null,
+ phone: null,
+ email: null
},
- "item": {
- "id": null,
- "name": null,
- "price": null,
- "amount": null
+ item: {
+ id: null,
+ name: null,
+ price: null,
+ amount: null
},
- "chargeAmount": null,
- "totalChargeAmount": null,
- "totalUnpaidAmount": null,
- "invoiceType": {
- "id": null,
- "name": null
+ chargeAmount: null,
+ totalChargeAmount: null,
+ totalUnpaidAmount: null,
+ invoiceType: {
+ id: null,
+ name: null
},
- "paymentType": {
- "id": null,
- "name": null
+ paymentType: {
+ id: null,
+ name: null
},
- "contractCycle": null,
- "paymentDueCycle": null,
- "createdAt": null,
- "updatedAt": null,
- "subscription": null,
- "easyConsent": null
+ contractStatus: {
+ id: null,
+ name: null
+ },
+ contractCycle: null,
+ paymentDueCycle: null,
+ createdAt: null,
+ updatedAt: null,
+ subscription: null,
+ easyConsent: null
}
}
},
actions: {
setData(data) {
- this.data = data;
+ this.data = data
},
+ setContractStatus(data) {
+ this.data.contractStatus = data
+ }
}
-})
\ No newline at end of file
+})
diff --git a/src/stores/contract/contractList.js b/src/stores/contract/contractList.js
index e2bf4d5..1321409 100644
--- a/src/stores/contract/contractList.js
+++ b/src/stores/contract/contractList.js
@@ -18,7 +18,7 @@ export const useContractListStore = defineStore('contractList', {
{ data: 'invoiceType', name: '청구 생성',},
{ data: 'contractStatus', name: '계약 상태',},
{ data: 'paymentType', name: '결제 수단',},
- { data: 'totalUnpaidCount', name: '미납 여부',}
+ { data: 'totalUnpaidCount', name: '미납 건수',}
],
filters: [
{data: 'itemId', value: null},
diff --git a/src/stores/invoice/invoiceList.js b/src/stores/invoice/invoiceList.js
index d2ddb37..5e72c08 100644
--- a/src/stores/invoice/invoiceList.js
+++ b/src/stores/invoice/invoiceList.js
@@ -14,7 +14,7 @@ export const useInvoiceListStore = defineStore('invoiceList', {
{ data: 'itemName', name: '상품명', notSortable: true},
{ data: 'memberName', name: '회원명', notSortable: true},
{ data: 'chargeAmount', name: '금액',},
- { data: 'contractDate', name: '약정일',},
+ { data: 'contractDate', name: '결제일',},
{ data: 'dueDate', name: '납부 기한',},
{ data: 'createdAt', name: '생성일',},
{ data: 'paymentType', name: '결제 수단',},
diff --git a/src/stores/member/memberBulk.js b/src/stores/member/memberBulk.js
index b7b9618..7c62e89 100644
--- a/src/stores/member/memberBulk.js
+++ b/src/stores/member/memberBulk.js
@@ -4,7 +4,8 @@ export const useMemberBulkStore = defineStore('memberBulk', {
state() {
return {
exampleImg: 'example_member.png',
- download: '회원등록.xlsx',
+ download: 'https://t5-bucket.s3.ap-northeast-2.amazonaws.com/excel/%ED%9A%8C%EC%9B%90%EB%93%B1%EB%A1%9D.xlsx',
+ fileName: '회원등록.xlsx',
file: null,
uploadData: null,
errorList: [],
diff --git a/src/utils/contract.js b/src/utils/contract.js
index 863a63d..3c2bc31 100644
--- a/src/utils/contract.js
+++ b/src/utils/contract.js
@@ -119,4 +119,24 @@ async function deleteContract(contractId) {
return result;
}
-export {getContractList, getContract, createContract, createContractBulk, editContract, deleteContract}
\ No newline at end of file
+// 계약 상태 변경
+async function editContractStatus(contractId, statusId) {
+ const result = await mainAxios.put(`contracts/${contractId}/status`, statusId);
+
+ if (result.code === 200) {
+ let contractName = null;
+
+ if (statusId === 3) {
+ contractName = '종료'
+ } else if (statusId === 2) {
+ contractName = '진행'
+ }
+
+ const data = { id: statusId, name: contractName };
+ contractDetailStore.setContractStatus(data);
+ }
+
+ return result;
+}
+
+export {getContractList, getContract, createContract, createContractBulk, editContract, deleteContract, editContractStatus}
\ No newline at end of file
diff --git a/src/utils/item.js b/src/utils/item.js
index 98584cd..cfcf68b 100644
--- a/src/utils/item.js
+++ b/src/utils/item.js
@@ -10,7 +10,7 @@ async function getItemList() {
let url = `items?page=${itemStore.page}&size=${itemStore.size}`;
if (itemStore.search.value) {
- url += `&${itemStore.search.keyword}=${itemStore.search.valu}`
+ url += `&${itemStore.search.keyword}=${itemStore.search.value}`
}
itemStore.columns.forEach(column => {
diff --git a/src/views/MainView.vue b/src/views/MainView.vue
index e9ee385..9a7d956 100644
--- a/src/views/MainView.vue
+++ b/src/views/MainView.vue
@@ -1,5 +1,5 @@
-
+
@@ -61,15 +61,12 @@ export default {
\ No newline at end of file
diff --git a/src/views/auth/AuthView.vue b/src/views/auth/AuthView.vue
index 514c03a..2af9ad0 100644
--- a/src/views/auth/AuthView.vue
+++ b/src/views/auth/AuthView.vue
@@ -4,17 +4,26 @@
+
+
diff --git a/src/views/auth/SignupView.vue b/src/views/auth/SignupView.vue
index 68cd0ae..4805705 100644
--- a/src/views/auth/SignupView.vue
+++ b/src/views/auth/SignupView.vue
@@ -63,8 +63,10 @@
import AuthBtnInputVue from '@/components/auth/AuthBtnInput.vue';
import AuthButtonVue from '@/components/auth/AuthButton.vue'
import AuthInputVue from '@/components/auth/AuthInput.vue'
+import { useLoadingStore } from '@/stores/error/loading';
import { InputValue, ValidationTimer } from '@/utils/auth';
import { authAxios } from '@/utils/axios';
+import { mapStores } from 'pinia';
export default {
name: 'LoginView',
@@ -122,6 +124,9 @@ export default {
this.clientCode.errorMsg = '';
}
},
+ computed: {
+ ...mapStores(useLoadingStore),
+ },
methods: {
// 메서드 : 이메일 중복 검사
async emailDuplicationCheck() {
@@ -141,7 +146,9 @@ export default {
// 전송 로직
if (!this.emailCodeSend) {
const data = { "email": this.email.value };
+ this.loadingStore.setIsLoading(true);
const result = await authAxios.post('auth/email/code', data);
+ this.loadingStore.setIsLoading(false);
if (result.code === 200) {
this.emailCodeSend = true;
this.emailCodeTimer = new ValidationTimer(this.emailCode);
@@ -166,7 +173,9 @@ export default {
// 전송 로직
if (!this.phoneCodeSend) {
const data = { 'phone': this.phone.value };
+ this.loadingStore.setIsLoading(true);
const result = await authAxios.post('auth/phone/code', data);
+ this.loadingStore.setIsLoading(false);
if (result.code === 200) {
this.phoneCodeSend = true;
this.phoneCodeTimer = new ValidationTimer(this.phoneCode);
diff --git a/src/views/contract/ContractCreateView.vue b/src/views/contract/ContractCreateView.vue
index 94a3efb..458ba97 100644
--- a/src/views/contract/ContractCreateView.vue
+++ b/src/views/contract/ContractCreateView.vue
@@ -18,7 +18,6 @@
-
@@ -89,13 +88,13 @@ export default {
.left-side {
@include flex-box(column, space-between, 20px);
- min-width: 700px;
- width: 40%;
+ width: 700px;
height: 100%;
padding: 40px 50px;
border-radius: 10px;
box-shadow: $base-shadow;
background-color: white;
+ transition: all 0.5s;
.btn-box {
@include flex-box(row, center, 60px);
diff --git a/src/views/contract/ContractDetailView.vue b/src/views/contract/ContractDetailView.vue
index 1859e43..ed891f3 100644
--- a/src/views/contract/ContractDetailView.vue
+++ b/src/views/contract/ContractDetailView.vue
@@ -9,7 +9,13 @@