
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
<template>
<div class="card ">
<div class="card-body ">
<h2 class="card-title">접근제어관리</h2>
<div class="flex align-top">
<div class="sch-form-wrap search">
<div class="tbl-wrap table-scroll">
<table id="myTable" class="tbl data">
<!-- 동적으로 <th> 생성 -->
<thead>
<tr>
<th>권한목록 </th>
</tr>
</thead>
<!-- 동적으로 <td> 생성 -->
<tbody>
<tr v-for="(item, index) in listData" :key="index">
<td></td>
</tr>
</tbody>
</table>
</div>
</div>
<div style="width: 100%;">
<div class="tbl-wrap chk-area">
<table id="myTable" class="tbl data">
<thead>
<tr>
<th>메뉴명</th>
<th>전체</th>
<th>읽기</th>
<th>쓰기</th>
<th>수정</th>
<th>삭제</th>
</tr>
</thead>
<!-- 동적으로 <td> 생성 -->
<tbody>
<tr v-for="(item, index) in listData" :key="index">
<td>{{ item.menuName }}</td>
<td>
<div class="form-check">
<input
type="checkbox"
:id="`all_${index}`"
v-model="item.permissions.all"
@change="toggleAll(index)"
/>
<label :for="`all_${index}`"></label>
</div>
</td>
<td>
<div class="form-check">
<input
type="checkbox"
:id="`read_${index}`"
v-model="item.permissions.read"
/>
<label :for="`read_${index}`"></label>
</div>
</td>
<td>
<div class="form-check">
<input
type="checkbox"
:id="`write_${index}`"
v-model="item.permissions.write"
/>
<label :for="`write_${index}`"></label>
</div>
</td>
<td>
<div class="form-check">
<input
type="checkbox"
:id="`edit_${index}`"
v-model="item.permissions.edit"
/>
<label :for="`edit_${index}`"></label>
</div>
</td>
<td>
<div class="form-check">
<input
type="checkbox"
:id="`delete_${index}`"
v-model="item.permissions.delete"
/>
<label :for="`delete_${index}`"></label>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import GoogleCalendar from "../../../component/GoogleCalendar.vue"
import { SearchOutlined } from '@ant-design/icons-vue';
export default {
data() {
return {
require: "/client/resources/img/require.png",
h3icon: "/client/resources/img/h3icon.png",
photoicon: "/client/resources/img/photo_icon.png",
img1: "/client/resources/img/img.png",
icon1: "/client/resources/img/icon.png",
dateicon: "/client/resources/img/date.png",
startbtn: "/client/resources/img/start.png",
stopbtn: "/client/resources/img/stop.png",
moreicon: "/client/resources/img/more.png",
today: new Date().toLocaleDateString('ko-KR', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
weekday: 'short',
}),
time: this.getCurrentTime(),
listData: [
{
menuName: '메뉴1',
permissions: {
all: false,
read: false,
write: false,
edit: false,
delete: false,
},
},
{
menuName: '메뉴2',
permissions: {
all: false,
read: false,
write: false,
edit: false,
delete: false,
},
},
]
}
},
components: {
SearchOutlined
},
methods: {
toggleAll(index) {
const all = this.listData[index].permissions.all;
this.listData[index].permissions.read = all;
this.listData[index].permissions.write = all;
this.listData[index].permissions.edit = all;
this.listData[index].permissions.delete = all;
},
formatBudget(amount) {
return new Intl.NumberFormat().format(amount) + ' 원';
},
isPastPeriod(period) {
// 예: '2025-05-01 ~ 2025-05-03' → 종료일 추출
const endDateStr = period.split('~')[1]?.trim();
if (!endDateStr) return false;
const endDate = new Date(endDateStr);
const today = new Date();
// 현재 날짜보다 과거면 true
return endDate < today;
},
getStatusClass(status) {
return status === 'active' ? 'status-active' : 'status-inactive';
},
getStatusClass(status) {
if (status === '미진행') return 'status-pending';
if (status === '진행중') return 'status-approved';
// Default empty string
return '';
},
getCurrentTime() {
const now = new Date();
const hours = String(now.getHours()).padStart(2, '0');
const minutes = String(now.getMinutes()).padStart(2, '0');
const seconds = String(now.getSeconds()).padStart(2, '0');
return `${hours}:${minutes}:${seconds}`;
},
getCategoryClass(category) {
switch (category) {
case '용역': return 'category-service';
case '내부': return 'category-internal';
case '국가과제': return 'category-government';
default: return '';
}
},
},
watch: {
},
computed: {
},
mounted() {
console.log('main mounted');
setInterval(() => {
this.time = this.getCurrentTime();
}, 1000);
}
}
</script>
<style scoped>
tr {
cursor: pointer;
}
</style>