Vue2_Frontend 수정1...

This commit is contained in:
최준흠 2022-08-31 17:10:54 +09:00
parent 1a3426a7cb
commit fd6001a035
5 changed files with 86 additions and 53 deletions

1
.env
View File

@ -7,6 +7,7 @@
VUE_APP_BACKEND_HOST="http://localhost:3000" VUE_APP_BACKEND_HOST="http://localhost:3000"
VUE_APP_BACKEND_HEADERS_Content_Type="application/json;charset=utf-8" VUE_APP_BACKEND_HEADERS_Content_Type="application/json;charset=utf-8"
VUE_APP_BACKEND_HEADERS_Access_Control_Allow_Origin="*" VUE_APP_BACKEND_HEADERS_Access_Control_Allow_Origin="*"
VUE_APP_BACKEND_HEADERS_Access_Control_Allow_Method="GET,PUT,POST,DELETE,PATCH,OPTIONS"
#LocalStorage는 Edge 브라우저의 개발툴 > 응용프로그램 > 로컬 저장소에서 확인가능 #LocalStorage는 Edge 브라우저의 개발툴 > 응용프로그램 > 로컬 저장소에서 확인가능
VUE_APP_LOCALSTORAGE_NAME="access_token" VUE_APP_LOCALSTORAGE_NAME="access_token"

View File

@ -5,15 +5,8 @@
"baseUrl": "./", "baseUrl": "./",
"moduleResolution": "node", "moduleResolution": "node",
"paths": { "paths": {
"@/*": [ "@/*": ["src/*"]
"src/*"
]
}, },
"lib": [ "lib": ["esnext", "dom", "dom.iterable", "scripthost"]
"esnext",
"dom",
"dom.iterable",
"scripthost"
]
} }
} }

View File

@ -100,8 +100,8 @@ export default {
this.$router.replace( this.$router.replace(
sessionStorage.getItem( sessionStorage.getItem(
process.env.VUE_APP_SESSIONSTORAGE_REDIRECT_NAME process.env.VUE_APP_SESSIONSTORAGE_REDIRECT_NAME
)
) || '/' ) || '/'
)
// CLear // CLear
this.onReset() this.onReset()
} }
@ -122,16 +122,16 @@ export default {
async callAPI(url, params) { async callAPI(url, params) {
console.log('CallAPI..', [url, params]) console.log('CallAPI..', [url, params])
axios.defaults.baseURL = process.env.VUE_APP_BACKEND_HOST axios.defaults.baseURL = process.env.VUE_APP_BACKEND_HOST
// Header CORP
axios.defaults.headers.post['Content-Type'] =
process.env.VUE_APP_BACKEND_HEADERS_Content_Type
axios.defaults.headers.post['Access-Control-Allow-Origin'] =
process.env.VUE_APP_BACKEND_HEADERS_Access_Control_Allow_Origin
// Header // Header
const headers = { const headers = {
// Authorization: // 'Content-Type': process.env.VUE_APP_BACKEND_HEADERS_Content_Type,
// 'Bearer ' + // 'Access-Control-Allow-Origin':
// localStorage.getItem(process.env.VUE_APP_LOCALSTORAGE_NAME) // process.env.VUE_APP_BACKEND_HEADERS_Access_Control_Allow_Origin,
// 'Access-Control-Allow-Methods':
// process.env.VUE_APP_BACKEND_HEADERS_Access_Control_Allow_Method,
Authorization:
'Bearer ' +
localStorage.getItem(process.env.VUE_APP_LOCALSTORAGE_NAME)
} }
return await axios return await axios
.post(url, params, headers) .post(url, params, headers)

View File

@ -140,16 +140,16 @@ export default {
async callAPI(url, params) { async callAPI(url, params) {
console.log('CallAPI..', [url, params]) console.log('CallAPI..', [url, params])
axios.defaults.baseURL = process.env.VUE_APP_BACKEND_HOST axios.defaults.baseURL = process.env.VUE_APP_BACKEND_HOST
// Header CORP
axios.defaults.headers.post['Content-Type'] =
process.env.VUE_APP_BACKEND_HEADERS_Content_Type
axios.defaults.headers.post['Access-Control-Allow-Origin'] =
process.env.VUE_APP_BACKEND_HEADERS_Access_Control_Allow_Origin
// Header // Header
const headers = { const headers = {
// Authorization: // 'Content-Type': process.env.VUE_APP_BACKEND_HEADERS_Content_Type,
// 'Bearer ' + // 'Access-Control-Allow-Origin':
// localStorage.getItem(process.env.VUE_APP_LOCALSTORAGE_NAME) // process.env.VUE_APP_BACKEND_HEADERS_Access_Control_Allow_Origin,
// 'Access-Control-Allow-Methods':
// process.env.VUE_APP_BACKEND_HEADERS_Access_Control_Allow_Method,
Authorization:
'Bearer ' +
localStorage.getItem(process.env.VUE_APP_LOCALSTORAGE_NAME)
} }
return await axios return await axios
.post(url, params, headers) .post(url, params, headers)

View File

@ -11,28 +11,44 @@
> >
</label> </label>
<b-form-select <b-form-select
v-model="selectMode" v-model="selectedRowMode"
:options="selectModes" :options="selectedRowModes"
></b-form-select> ></b-form-select>
</b-input-group> </b-input-group>
</b-col> </b-col>
<b-col cols="6" class="border"> <b-col cols="4" class="border">
<b-input-group> <b-input-group>
<label class="input-group-text"> <label class="input-group-text">
<b-form-checkbox-group <b-form-checkbox-group
class="d-flex flex-nowrap" class="d-flex flex-nowrap"
v-model="searchFields" v-model="searchFields"
:options="searchOptions" :options="searchFieldOptions"
></b-form-checkbox-group> ></b-form-checkbox-group>
</label> </label>
<b-form-input <b-form-input
v-model="search" v-model="search"
type="text" type="text"
placeholder="검색어" placeholder="검색어"
@keydown.enter="searchClick"
></b-form-input> ></b-form-input>
<b-button @click="searchClick">검색</b-button> <b-button @click="searchClick">검색</b-button>
</b-input-group> </b-input-group>
</b-col> </b-col>
<b-col cols="4" class="border">
<b-input-group>
<label class="input-group-text">
<b-form-select
class="d-flex flex-nowrap"
v-model="filterDateField"
:options="filterDateFieldOptions"
></b-form-select>
</label>
<b-form-input v-model="filterDateStart" type="date"></b-form-input>
~
<b-form-input v-model="filterDateEnd" type="date"></b-form-input>
<b-button @click="dateClick">선택</b-button>
</b-input-group>
</b-col>
<b-col class="border"> <b-col class="border">
<b-input-group class="justify-content-end"> <b-input-group class="justify-content-end">
<label class="input-group-text">줄수</label> <label class="input-group-text">줄수</label>
@ -53,12 +69,11 @@
:per-page="perPage" :per-page="perPage"
:sort-by.sync="sortBy" :sort-by.sync="sortBy"
:sort-desc.sync="sortDesc" :sort-desc.sync="sortDesc"
:sort-direction="sortDirection"
@sort-changed="sortClick" @sort-changed="sortClick"
label-sort-asc="" label-sort-asc=""
label-sort-desc="" label-sort-desc=""
label-sort-clear="" label-sort-clear=""
:select-mode="selectMode" :select-mode="selectedRowMode"
selectable selectable
@row-selected="rowSelectedToggle" @row-selected="rowSelectedToggle"
:busy="isBusy" :busy="isBusy"
@ -71,6 +86,14 @@
:dark="commonTableAttributes.dark" :dark="commonTableAttributes.dark"
:head-variant="commonTableAttributes.headVariant" :head-variant="commonTableAttributes.headVariant"
> >
<!-- Column별 Filter용 -->
<template #thead-top>
<b-tr>
<b-th colspan="4"> </b-th>
<b-th>Type 2</b-th>
<b-th></b-th>
</b-tr>
</template>
<!-- /선택 Row를 토글용 --> <!-- /선택 Row를 토글용 -->
<template #cell(rowSelect)="{ rowSelected }"> <template #cell(rowSelect)="{ rowSelected }">
<template v-if="rowSelected"> <template v-if="rowSelected">
@ -213,19 +236,25 @@ export default {
isBusy: false, isBusy: false,
sortBy: 'id', sortBy: 'id',
sortDesc: true, sortDesc: true,
sortDirection: 'desc', search: null,
search: null, //DB
searchFields: ['title', 'content'], searchFields: ['title', 'content'],
searchOptions: [ searchFieldOptions: [
{ text: '제목', value: 'title' }, { text: '제목', value: 'title' },
{ text: '내용', value: 'content' }, { text: '내용', value: 'content' }
],
filter: null,
filterField: null,
filterDateStart: null,
filterDateEnd: null,
filterDateField: 'createdAt',
filterDateFieldOptions: [
{ text: '수정일', value: 'updatedAt' }, { text: '수정일', value: 'updatedAt' },
{ text: '등록일', value: 'createdAt' } { text: '등록일', value: 'createdAt' }
], ],
selectModes: ['multi', 'single', 'range'], selectedRows: [],
selectMode: 'multi', selectedRowAllToggle: false,
selectedAllToggle: false, selectedRowMode: 'multi',
selectedRows: [] selectedRowModes: ['multi', 'single', 'range']
} }
}, },
setup: function () {}, setup: function () {},
@ -239,12 +268,16 @@ export default {
this.isBusy = true this.isBusy = true
const results = await this.callAPI('/todo', { const results = await this.callAPI('/todo', {
params: { params: {
page: page,
perPage: this.perPage,
sortBy: this.sortBy, sortBy: this.sortBy,
sortDesc: this.sortDesc, sortDesc: this.sortDesc,
searchFields: this.searchFields, searchFields: this.searchFields,
search: this.search, search: this.search,
page: page, filter: this.filter,
perPage: this.perPage filterField: this.filterField,
filterDateStart: this.filterDateStart,
filterDateEnd: this.filterDateEnd
} }
}) })
//console.log(JSON.stringify(results)) //console.log(JSON.stringify(results))
@ -276,6 +309,11 @@ export default {
this.sortDesc = event.sortDesc this.sortDesc = event.sortDesc
this.getDatas() this.getDatas()
}, },
dateClick(event) {
console.log(event)
this.filterField = this.filterDateField
this.getDatas()
},
busyToggle() { busyToggle() {
this.isBusy = !this.isBusy this.isBusy = !this.isBusy
}, },
@ -283,12 +321,12 @@ export default {
this.selectedRows = selectedRow this.selectedRows = selectedRow
}, },
rowSelectAllToggle() { rowSelectAllToggle() {
if (this.selectedAllToggle) { if (this.selectedRowAllToggle) {
this.$refs.todoTable.clearSelected() this.$refs.todoTable.clearSelected()
this.selectedAllToggle = false this.selectedRowAllToggle = false
} else { } else {
this.$refs.todoTable.selectAllRows() this.$refs.todoTable.selectAllRows()
this.selectedAllToggle = true this.selectedRowAllToggle = true
} }
}, },
// rowSelectSet(id) { // rowSelectSet(id) {
@ -302,15 +340,16 @@ export default {
async callAPI(url, params) { async callAPI(url, params) {
console.log('CallAPI..', [url, params]) console.log('CallAPI..', [url, params])
axios.defaults.baseURL = process.env.VUE_APP_BACKEND_HOST axios.defaults.baseURL = process.env.VUE_APP_BACKEND_HOST
axios.defaults.headers.post['Content-Type'] =
process.env.VUE_APP_BACKEND_HEADERS_Content_Type
axios.defaults.headers.post['Access-Control-Allow-Origin'] =
process.env.VUE_APP_BACKEND_HEADERS_Access_Control_Allow_Origin
// Header // Header
const headers = { const headers = {
// Authorization: // 'Content-Type': process.env.VUE_APP_BACKEND_HEADERS_Content_Type,
// 'Bearer ' + // 'Access-Control-Allow-Origin':
// localStorage.getItem(process.env.VUE_APP_LOCALSTORAGE_NAME) // process.env.VUE_APP_BACKEND_HEADERS_Access_Control_Allow_Origin,
// 'Access-Control-Allow-Methods':
// process.env.VUE_APP_BACKEND_HEADERS_Access_Control_Allow_Method,
Authorization:
'Bearer ' +
localStorage.getItem(process.env.VUE_APP_LOCALSTORAGE_NAME)
} }
return await axios return await axios
.get(url, params, headers) .get(url, params, headers)