|
@@ -1,7 +1,7 @@
|
|
|
<template>
|
|
<template>
|
|
|
- <div class="period-banner" :class="'banner-' + active.status">
|
|
|
|
|
|
|
+ <div class="period-status-strip" :class="'is-' + active.status">
|
|
|
<div class="pb-left">
|
|
<div class="pb-left">
|
|
|
- <span class="pb-icon">{{ statusIcon }}</span>
|
|
|
|
|
|
|
+ <span class="status-dot" :class="statusDotClass"></span>
|
|
|
<div class="pb-info">
|
|
<div class="pb-info">
|
|
|
<div class="pb-name">{{ active.name }}</div>
|
|
<div class="pb-name">{{ active.name }}</div>
|
|
|
<div class="pb-date">{{ active.startDate }} ~ {{ active.endDate }}</div>
|
|
<div class="pb-date">{{ active.startDate }} ~ {{ active.endDate }}</div>
|
|
@@ -53,8 +53,8 @@ const active = computed(() => {
|
|
|
|
|
|
|
|
const switchablePeriods = computed(() => activePeriods.value)
|
|
const switchablePeriods = computed(() => activePeriods.value)
|
|
|
|
|
|
|
|
-const statusIcon = computed(() => {
|
|
|
|
|
- return { DRAFT: '', OKR_ALIGN: '', EXECUTING: '', ASSESSING: '' }[active.value.status] || ''
|
|
|
|
|
|
|
+const statusDotClass = computed(() => {
|
|
|
|
|
+ return { DRAFT: '', OKR_ALIGN: 'is-active', EXECUTING: 'is-success', ASSESSING: 'is-warning' }[active.value.status] || ''
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
const statusLabel = computed(() => {
|
|
const statusLabel = computed(() => {
|
|
@@ -79,20 +79,20 @@ function handleSwitch(id) {
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|
|
|
<style scoped>
|
|
<style scoped>
|
|
|
-.period-banner {
|
|
|
|
|
|
|
+.period-status-strip {
|
|
|
display: flex; align-items: center; justify-content: space-between;
|
|
display: flex; align-items: center; justify-content: space-between;
|
|
|
padding: 14px 20px; border-radius: 10px; margin-bottom: 20px;
|
|
padding: 14px 20px; border-radius: 10px; margin-bottom: 20px;
|
|
|
box-shadow: 0 1px 4px rgba(0,0,0,0.04);
|
|
box-shadow: 0 1px 4px rgba(0,0,0,0.04);
|
|
|
|
|
+ background: var(--color-surface);
|
|
|
|
|
+ border: 1px solid var(--color-border-soft);
|
|
|
}
|
|
}
|
|
|
-.banner-DRAFT { background: #f5f5f5; border: 1px solid #e0e0e0; }
|
|
|
|
|
-.banner-OKR_ALIGN { background: #e0f7fa; border: 1px solid #b2ebf2; }
|
|
|
|
|
-.banner-EXECUTING { background: #e8f5e9; border: 1px solid #c8e6c9; }
|
|
|
|
|
-.banner-ASSESSING { background: #fef7e8; border: 1px solid #f5dab1; }
|
|
|
|
|
|
|
+.period-status-strip.is-OKR_ALIGN { border-left: 3px solid var(--color-accent); }
|
|
|
|
|
+.period-status-strip.is-EXECUTING { border-left: 3px solid var(--color-success); }
|
|
|
|
|
+.period-status-strip.is-ASSESSING { border-left: 3px solid var(--color-warning); }
|
|
|
|
|
|
|
|
.pb-left { display: flex; align-items: center; gap: 12px; }
|
|
.pb-left { display: flex; align-items: center; gap: 12px; }
|
|
|
-.pb-icon { font-size: 24px; }
|
|
|
|
|
-.pb-name { font-size: 16px; font-weight: 700; color: #1a1a2e; }
|
|
|
|
|
-.pb-date { font-size: 12px; color: #888; margin-top: 2px; }
|
|
|
|
|
|
|
+.pb-name { font-size: 16px; font-weight: 700; color: var(--color-text); }
|
|
|
|
|
+.pb-date { font-size: 12px; color: var(--color-text-secondary); margin-top: 2px; }
|
|
|
|
|
|
|
|
.pb-switch-btn {
|
|
.pb-switch-btn {
|
|
|
display: inline-flex; align-items: center; gap: 4px;
|
|
display: inline-flex; align-items: center; gap: 4px;
|
|
@@ -100,8 +100,8 @@ function handleSwitch(id) {
|
|
|
cursor: pointer; font-size: 13px; color: #555; font-weight: 500;
|
|
cursor: pointer; font-size: 13px; color: #555; font-weight: 500;
|
|
|
border: 1px solid #ddd; transition: all 0.15s;
|
|
border: 1px solid #ddd; transition: all 0.15s;
|
|
|
}
|
|
}
|
|
|
-.pb-switch-btn:hover { border-color: #2b1f99; color: #2b1f99; }
|
|
|
|
|
|
|
+.pb-switch-btn:hover { border-color: var(--color-brand); color: var(--color-brand); }
|
|
|
|
|
|
|
|
.pbd-name { margin-right: 8px; font-size: 13px; }
|
|
.pbd-name { margin-right: 8px; font-size: 13px; }
|
|
|
-.is-active .pbd-name { color: #2b1f99; font-weight: 600; }
|
|
|
|
|
|
|
+.is-active .pbd-name { color: var(--color-brand); font-weight: 600; }
|
|
|
</style>
|
|
</style>
|