|
|
@@ -3,7 +3,7 @@
|
|
|
<div class="page-hero">
|
|
|
<div class="hero-info">
|
|
|
<h2>我的 OKR</h2>
|
|
|
- <p>1O · 3KR · 强对齐 · 看结果</p>
|
|
|
+ <p>本周期目标与关键结果</p>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
@@ -23,7 +23,7 @@
|
|
|
<div class="rule-item"><b>O</b>:定性方向,15-30字,不含数字指标</div>
|
|
|
<div class="rule-item"><b>KR</b>:2~5条,可量化结果,权重之和=100</div>
|
|
|
<div class="rule-item"><b>对齐</b>:下级O必须承接上级O方向</div>
|
|
|
- <div class="rule-item"><b>打分</b>:逐条KR 0-1分,看结果不看过程</div>
|
|
|
+ <div class="rule-item"><b>打分</b>:逐条 KR 0-1 分,以交付结果为依据</div>
|
|
|
</div>
|
|
|
<div v-if="positionTemplate" class="position-ref">
|
|
|
<div class="pr-title">你的岗位指标参考({{ positionTemplate.name }})</div>
|
|
|
@@ -61,7 +61,7 @@
|
|
|
<div class="kr-display-meta">
|
|
|
<span class="kr-target">目标 {{ kr.targetValue }}</span>
|
|
|
<el-tag v-if="kr.sourceKrId" size="small" effect="plain" type="info" round>承接上级</el-tag>
|
|
|
- <el-tag v-if="kr.assignedToName" size="small" effect="dark" type="warning" round>@{{ kr.assignedToName }}</el-tag>
|
|
|
+ <el-tag v-if="kr.assignedToName" size="small" effect="plain" type="warning" round>指派给 {{ kr.assignedToName }}</el-tag>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -97,7 +97,7 @@
|
|
|
class="mini-kr" :class="{ 'mine': kr.assignedTo === auth.user?.id }">
|
|
|
<span class="mini-kr-num">KR{{ i+1 }}</span>
|
|
|
<span class="mini-kr-text">{{ kr.title }}</span>
|
|
|
- <el-tag v-if="kr.assignedTo === auth.user?.id" size="small" type="warning" effect="dark" round>@我</el-tag>
|
|
|
+ <el-tag v-if="kr.assignedTo === auth.user?.id" size="small" type="warning" effect="plain" round>指派给我</el-tag>
|
|
|
<span class="mini-val">{{ kr.targetValue }}</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -218,7 +218,7 @@
|
|
|
<span class="align-head-hint">· 勾选你要承接的关键结果,将自动创建引用条目</span>
|
|
|
</div>
|
|
|
<el-tag v-if="mandatoryKrCount" type="warning" effect="dark" round size="small">
|
|
|
- {{ mandatoryKrCount }} 项 @你
|
|
|
+ {{ mandatoryKrCount }} 项指派给我
|
|
|
</el-tag>
|
|
|
</div>
|
|
|
|
|
|
@@ -237,7 +237,7 @@
|
|
|
@click="toggleAlignKr(kr, o)">
|
|
|
<div class="align-kr-left">
|
|
|
<span class="align-checkbox" :class="{ checked: isKrAligned(kr.id), locked: kr.assignedTo === auth.user?.id }">
|
|
|
- <span v-if="isKrAligned(kr.id)">✓</span>
|
|
|
+ <span v-if="isKrAligned(kr.id)">已选</span>
|
|
|
</span>
|
|
|
<span class="align-kr-num">KR{{ i+1 }}</span>
|
|
|
<span class="align-kr-title">{{ kr.title }}</span>
|
|
|
@@ -245,9 +245,9 @@
|
|
|
<div class="align-kr-right">
|
|
|
<span class="align-kr-target">目标 {{ kr.targetValue }}</span>
|
|
|
<el-tag v-if="kr.assignedTo === auth.user?.id" type="warning" effect="dark" size="small" round>
|
|
|
- @你
|
|
|
+ 指派给我
|
|
|
</el-tag>
|
|
|
- <span v-else-if="isKrAligned(kr.id)" class="align-check">✓</span>
|
|
|
+ <span v-else-if="isKrAligned(kr.id)" class="align-check">已选</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -308,7 +308,7 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
<el-button v-if="newOkr.krs.length < 5" @click="newOkr.krs.push({ title: '', targetValue: 100, weight: 0, assignedTo: null })" size="small" round style="margin-top:8px">
|
|
|
- + 添加 KR
|
|
|
+ 新增 KR
|
|
|
</el-button>
|
|
|
</div>
|
|
|
|
|
|
@@ -658,7 +658,7 @@ async function doReview(id, approved) {
|
|
|
}
|
|
|
|
|
|
function krPercent(kr) { if (!kr.targetValue || kr.targetValue === 0) return 0; return Math.min((kr.currentValue / kr.targetValue) * 100, 100) }
|
|
|
-function krColor(s) { return { COMPLETED: '#27ae60', BLOCKED: '#e67e22', IN_PROGRESS: '#3ad4d8', NOT_STARTED: '#c0c4cc' }[s] || '#c0c4cc' }
|
|
|
+function krColor(s) { return { COMPLETED: 'var(--color-success)', BLOCKED: 'var(--color-warning)', IN_PROGRESS: 'var(--color-accent)', NOT_STARTED: 'var(--color-text-muted)' }[s] || 'var(--color-text-muted)' }
|
|
|
function krStatusLabel(s) { return { NOT_STARTED: '未开始', IN_PROGRESS: '进行中', COMPLETED: '已完成', BLOCKED: '阻塞' }[s] || s }
|
|
|
function truncate(s, n) { if (!s) return ''; return s.length > n ? s.slice(0, n) + '...' : s }
|
|
|
</script>
|
|
|
@@ -666,155 +666,155 @@ function truncate(s, n) { if (!s) return ''; return s.length > n ? s.slice(0, n)
|
|
|
<style scoped>
|
|
|
.page { width: 100%; }
|
|
|
.page-hero { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 16px; }
|
|
|
-.hero-info h2 { font-size: 28px; font-weight: 700; color: #1a1a2e; margin: 0; }
|
|
|
-.hero-info p { font-size: 14px; color: #888; margin: 4px 0 0; }
|
|
|
-.empty-big { display: flex; align-items: center; justify-content: center; height: 300px; font-size: 16px; color: #999; }
|
|
|
+.hero-info h2 { font-size: var(--font-size-2xl); font-weight: 700; color: var(--color-text); margin: 0; }
|
|
|
+.hero-info p { font-size: var(--font-size-base); color: var(--color-text-secondary); margin: 4px 0 0; }
|
|
|
+.empty-big { display: flex; align-items: center; justify-content: center; height: 300px; font-size: var(--font-size-lg); color: var(--color-text-muted); }
|
|
|
|
|
|
-.state-banner { padding: 14px 20px; border-radius: 10px; margin-bottom: 16px; display: flex; align-items: center; gap: 10px; font-size: 14px; }
|
|
|
-.banner-OKR_ALIGN { background: #e0f7fa; color: #00838f; border: 1px solid #b2ebf2; }
|
|
|
-.banner-EXECUTING { background: #e8f5e9; color: #2e7d32; border: 1px solid #c8e6c9; }
|
|
|
-.banner-ASSESSING { background: #fef7e8; color: #b88230; border: 1px solid #f5dab1; }
|
|
|
+.state-banner { padding: 14px 20px; border-radius: var(--radius-md); margin-bottom: 16px; display: flex; align-items: center; gap: 10px; font-size: var(--font-size-base); }
|
|
|
+.banner-OKR_ALIGN { background: var(--color-surface-tint-info); color: var(--color-medical); border: 1px solid var(--color-accent-soft); }
|
|
|
+.banner-EXECUTING { background: var(--color-surface-tint-success); color: var(--color-success); border: 1px solid var(--color-border-soft); }
|
|
|
+.banner-ASSESSING { background: var(--color-surface-tint-warning); color: var(--color-warning); border: 1px solid var(--color-border-soft); }
|
|
|
|
|
|
-.rules-card { background: #fff; border-radius: 10px; padding: 14px 20px; margin-bottom: 20px; box-shadow: 0 1px 4px rgba(0,0,0,0.04); border: 1px solid #f0f0f0; }
|
|
|
-.rules-title { font-weight: 700; color: #2b1f99; font-size: 14px; margin-bottom: 8px; }
|
|
|
+.rules-card { background: var(--color-surface); border-radius: var(--radius-md); padding: 14px 20px; margin-bottom: 20px; box-shadow: var(--shadow-panel); border: 1px solid var(--color-border-soft); }
|
|
|
+.rules-title { font-weight: 700; color: var(--color-brand); font-size: var(--font-size-base); margin-bottom: 8px; }
|
|
|
.rules-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; }
|
|
|
-.rule-item { font-size: 12px; color: #666; }
|
|
|
+.rule-item { font-size: var(--font-size-xs); color: var(--color-text-secondary); }
|
|
|
|
|
|
-.position-ref { margin-top: 10px; padding-top: 10px; border-top: 1px solid #e8eaed; }
|
|
|
-.pr-title { font-size: 13px; font-weight: 600; color: #2b1f99; margin-bottom: 6px; }
|
|
|
+.position-ref { margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--color-border-soft); }
|
|
|
+.pr-title { font-size: var(--font-size-sm); font-weight: 600; color: var(--color-brand); margin-bottom: 6px; }
|
|
|
.pr-items { display: flex; flex-wrap: wrap; gap: 6px; }
|
|
|
-.pr-hint { font-size: 11px; color: #aaa; margin-top: 6px; }
|
|
|
+.pr-hint { font-size: 11px; color: var(--color-text-muted); margin-top: 6px; }
|
|
|
|
|
|
.section { margin-bottom: 36px; }
|
|
|
-.section-head { display: flex; align-items: center; gap: 14px; margin-bottom: 16px; padding-bottom: 12px; border-bottom: 2px solid #f0f0f0; }
|
|
|
-.section-badge { padding: 6px 18px; border-radius: 8px; font-size: 14px; font-weight: 700; color: #fff; letter-spacing: 2px; }
|
|
|
-.section-badge.personal { background: linear-gradient(135deg, #3ad4d8, #1eada8); box-shadow: 0 2px 8px rgba(58,212,216,0.3); }
|
|
|
-.section-badge.superior { background: linear-gradient(135deg, #2b1f99, #1a1560); box-shadow: 0 2px 8px rgba(43,31,153,0.3); }
|
|
|
-.section-badge.review { background: linear-gradient(135deg, #f39c12, #e67e22); box-shadow: 0 2px 8px rgba(230,126,34,0.3); }
|
|
|
-.section-title { font-size: 18px; font-weight: 700; color: #1a1a2e; }
|
|
|
-.section-hint { font-size: 13px; color: #aaa; }
|
|
|
-
|
|
|
-.hint-card { display: flex; align-items: flex-start; gap: 20px; background: #fff; border-radius: 8px; padding: 28px 32px; box-shadow: 0 1px 4px rgba(0,0,0,0.04); margin-bottom: 24px; }
|
|
|
-.hint-card.waiting { border: 2px solid #fdebd0; background: #fef9e7; }
|
|
|
-.hint-card.top-level { border: 2px solid #d5f5e3; background: #eafaf1; }
|
|
|
+.section-head { display: flex; align-items: center; gap: 14px; margin-bottom: 16px; padding-bottom: 12px; border-bottom: 1px solid var(--color-border-soft); }
|
|
|
+.section-badge { padding: 4px 12px; border-radius: var(--radius-sm); font-size: var(--font-size-sm); font-weight: 700; color: var(--color-brand); letter-spacing: 0; background: var(--color-surface-tint-brand); border-left: 2px solid var(--color-brand); }
|
|
|
+.section-badge.personal { color: var(--color-medical); background: var(--color-surface-tint-info); border-left-color: var(--color-accent); }
|
|
|
+.section-badge.superior { color: var(--color-brand); background: var(--color-surface-tint-brand); border-left-color: var(--color-brand); }
|
|
|
+.section-badge.review { color: var(--color-warning); background: var(--color-surface-tint-warning); border-left-color: var(--color-warning); }
|
|
|
+.section-title { font-size: var(--font-size-xl); font-weight: 700; color: var(--color-text); }
|
|
|
+.section-hint { font-size: var(--font-size-sm); color: var(--color-text-muted); }
|
|
|
+
|
|
|
+.hint-card { display: flex; align-items: flex-start; gap: 20px; background: var(--color-surface); border-radius: var(--radius-md); padding: 28px 32px; box-shadow: var(--shadow-panel); margin-bottom: 24px; }
|
|
|
+.hint-card.waiting { border: 1px solid var(--color-border-soft); background: var(--color-surface-tint-warning); }
|
|
|
+.hint-card.top-level { border: 1px solid var(--color-border-soft); background: var(--color-surface-tint-success); }
|
|
|
.hint-icon { font-size: 36px; }
|
|
|
-.hint-title { font-size: 16px; font-weight: 700; color: #1a1a2e; margin-bottom: 4px; }
|
|
|
-.hint-desc { font-size: 13px; color: #888; line-height: 1.6; }
|
|
|
+.hint-title { font-size: var(--font-size-lg); font-weight: 700; color: var(--color-text); margin-bottom: 4px; }
|
|
|
+.hint-desc { font-size: var(--font-size-sm); color: var(--color-text-secondary); line-height: 1.6; }
|
|
|
.action-row { margin-bottom: 24px; }
|
|
|
|
|
|
-.rule-hint { font-size: 12px; color: #e67e22; background: #fef9e7; padding: 8px 14px; border-radius: 6px; margin-bottom: 8px; }
|
|
|
+.rule-hint { font-size: var(--font-size-xs); color: var(--color-warning); background: var(--color-surface-tint-warning); padding: 8px 14px; border-radius: var(--radius-sm); margin-bottom: 8px; }
|
|
|
|
|
|
.okr-grid { display: grid; grid-template-columns: 1fr; gap: 12px; }
|
|
|
-.okr-card { background: #fff; border-radius: 8px; padding: 20px 24px; box-shadow: 0 1px 4px rgba(0,0,0,0.04); border: 1px solid #f0f0f0; }
|
|
|
-.okr-card.superior-card { border-left: 4px solid #2b1f99; }
|
|
|
-.okr-card.card-APPROVED { border-left: 4px solid #27ae60; }
|
|
|
-.okr-card.card-SUBMITTED { border-left: 4px solid #e67e22; }
|
|
|
-.okr-card.card-REJECTED { border-left: 4px solid #e74c3c; background: #fff5f5; }
|
|
|
-.okr-card.review-card { border-left: 4px solid #f39c12; }
|
|
|
+.okr-card { background: var(--color-surface); border-radius: var(--radius-md); padding: 20px 24px; box-shadow: var(--shadow-panel); border: 1px solid var(--color-border-soft); }
|
|
|
+.okr-card.superior-card { border-left: 4px solid var(--color-brand); }
|
|
|
+.okr-card.card-APPROVED { border-left: 4px solid var(--color-success); }
|
|
|
+.okr-card.card-SUBMITTED { border-left: 4px solid var(--color-warning); }
|
|
|
+.okr-card.card-REJECTED { border-left: 4px solid var(--color-danger); background: var(--color-surface-tint-danger); }
|
|
|
+.okr-card.review-card { border-left: 4px solid var(--color-warning); }
|
|
|
.okr-card-head { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }
|
|
|
-.o-tag { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: 8px; font-size: 14px; font-weight: 700; color: #fff; }
|
|
|
-.o-tag.superior { background: #2b1f99; }
|
|
|
-.o-tag.personal { background: #3ad4d8; }
|
|
|
-.o-title { font-size: 15px; font-weight: 600; color: #1a1a2e; flex: 1; }
|
|
|
+.o-tag { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: var(--radius-md); font-size: var(--font-size-base); font-weight: 700; color: var(--color-white); }
|
|
|
+.o-tag.superior { background: var(--color-brand); }
|
|
|
+.o-tag.personal { background: var(--color-accent); }
|
|
|
+.o-title { font-size: 15px; font-weight: 600; color: var(--color-text); flex: 1; }
|
|
|
|
|
|
-.aligned-hint { display: flex; align-items: center; gap: 6px; margin-bottom: 10px; font-size: 12px; color: #999; flex-wrap: wrap; }
|
|
|
+.aligned-hint { display: flex; align-items: center; gap: 6px; margin-bottom: 10px; font-size: var(--font-size-xs); color: var(--color-text-muted); flex-wrap: wrap; }
|
|
|
|
|
|
-.mini-kr { display: flex; align-items: center; gap: 8px; font-size: 13px; color: #666; padding: 4px 6px; border-radius: 6px; }
|
|
|
-.mini-kr.mine { background: #fef9e7; border: 1px solid #f9e79f; }
|
|
|
-.mini-kr-num { font-size: 11px; font-weight: 700; color: #2b1f99; width: 32px; }
|
|
|
+.mini-kr { display: flex; align-items: center; gap: 8px; font-size: var(--font-size-sm); color: var(--color-text-secondary); padding: 4px 6px; border-radius: var(--radius-sm); }
|
|
|
+.mini-kr.mine { background: var(--color-surface-tint-warning); border: 1px solid var(--color-border-soft); }
|
|
|
+.mini-kr-num { font-size: 11px; font-weight: 700; color: var(--color-brand); width: 32px; }
|
|
|
.mini-kr-text { flex: 1; }
|
|
|
-.mini-val { color: #999; }
|
|
|
+.mini-val { color: var(--color-text-muted); }
|
|
|
|
|
|
|
|
|
-.kr-display { display: flex; align-items: center; gap: 12px; padding: 10px 0; border-top: 1px solid #f5f5f5; }
|
|
|
+.kr-display { display: flex; align-items: center; gap: 12px; padding: 10px 0; border-top: 1px solid var(--color-border-soft); }
|
|
|
.kr-display:first-child { border-top: none; }
|
|
|
-.kr-display-num { font-size: 12px; font-weight: 700; color: #3ad4d8; width: 36px; }
|
|
|
-.kr-display-text { flex: 1; font-size: 14px; color: #333; }
|
|
|
+.kr-display-num { font-size: var(--font-size-xs); font-weight: 700; color: var(--color-accent); width: 36px; }
|
|
|
+.kr-display-text { flex: 1; font-size: var(--font-size-base); color: var(--color-text); }
|
|
|
.kr-display-meta { display: flex; align-items: center; gap: 8px; }
|
|
|
-.kr-target { font-size: 13px; color: #999; }
|
|
|
+.kr-target { font-size: var(--font-size-sm); color: var(--color-text-muted); }
|
|
|
|
|
|
-.kr-progress-row { padding: 16px 0; border-top: 1px solid #f0f0f0; }
|
|
|
+.kr-progress-row { padding: 16px 0; border-top: 1px solid var(--color-border-soft); }
|
|
|
.kr-progress-row:first-child { border-top: none; }
|
|
|
.kr-progress-head { display: flex; align-items: center; gap: 12px; margin-bottom: 6px; }
|
|
|
-.kr-progress-num { font-size: 12px; font-weight: 700; color: #3ad4d8; width: 36px; }
|
|
|
-.kr-progress-text { flex: 1; font-size: 14px; color: #333; }
|
|
|
-.kr-progress-val { font-size: 13px; color: #999; }
|
|
|
+.kr-progress-num { font-size: var(--font-size-xs); font-weight: 700; color: var(--color-accent); width: 36px; }
|
|
|
+.kr-progress-text { flex: 1; font-size: var(--font-size-base); color: var(--color-text); }
|
|
|
+.kr-progress-val { font-size: var(--font-size-sm); color: var(--color-text-muted); }
|
|
|
.kr-progress-ctrl { display: flex; gap: 8px; align-items: center; margin-top: 8px; }
|
|
|
-.kr-status-tag { font-size: 11px; color: #888; width: 60px; }
|
|
|
-.blocked-hint { font-size: 12px; color: #e67e22; margin-top: 6px; }
|
|
|
+.kr-status-tag { font-size: 11px; color: var(--color-text-secondary); width: 60px; }
|
|
|
+.blocked-hint { font-size: var(--font-size-xs); color: var(--color-warning); margin-top: 6px; }
|
|
|
|
|
|
.review-kr { display: flex; align-items: center; gap: 8px; padding: 6px 0; font-size: 13px; }
|
|
|
-.review-kr-num { font-size: 12px; font-weight: 700; color: #e67e22; width: 32px; }
|
|
|
-.review-kr-text { flex: 1; color: #555; }
|
|
|
-.review-kr-val { color: #999; }
|
|
|
-.review-actions { display: flex; gap: 8px; justify-content: flex-end; margin-top: 12px; padding-top: 12px; border-top: 1px solid #f0f0f0; }
|
|
|
+.review-kr-num { font-size: var(--font-size-xs); font-weight: 700; color: var(--color-warning); width: 32px; }
|
|
|
+.review-kr-text { flex: 1; color: var(--color-text-secondary); }
|
|
|
+.review-kr-val { color: var(--color-text-muted); }
|
|
|
+.review-actions { display: flex; gap: 8px; justify-content: flex-end; margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--color-border-soft); }
|
|
|
|
|
|
-.rejected-hint { padding: 14px; background: #fff5f5; border-radius: 8px; font-size: 13px; color: #c62828; margin-top: 12px; }
|
|
|
+.rejected-hint { padding: 14px; background: var(--color-surface-tint-danger); border-radius: var(--radius-md); font-size: var(--font-size-sm); color: var(--color-danger); margin-top: 12px; }
|
|
|
|
|
|
/* Dialog */
|
|
|
-.dialog-rules { background: #f0f8ff; border-radius: 8px; padding: 14px 18px; margin-bottom: 16px; }
|
|
|
-.dr-item { font-size: 13px; color: #333; line-height: 1.8; }
|
|
|
+.dialog-rules { background: var(--color-surface-tint-info); border-radius: var(--radius-md); padding: 14px 18px; margin-bottom: 16px; }
|
|
|
+.dr-item { font-size: var(--font-size-sm); color: var(--color-text); line-height: 1.8; }
|
|
|
|
|
|
/* Alignment section */
|
|
|
-.align-section { background: #fff; border: 1px solid #e5e7eb; border-radius: 8px; margin-bottom: 20px; overflow: hidden; }
|
|
|
-.align-head { display: flex; align-items: center; justify-content: space-between; padding: 18px 22px; border-bottom: 1px solid #f3f4f6; }
|
|
|
+.align-section { background: var(--color-surface); border: 1px solid var(--color-border-soft); border-radius: var(--radius-md); margin-bottom: 20px; overflow: hidden; }
|
|
|
+.align-head { display: flex; align-items: center; justify-content: space-between; padding: 18px 22px; border-bottom: 1px solid var(--color-border-soft); }
|
|
|
.align-head-left { display: flex; align-items: center; gap: 6px; }
|
|
|
-.align-head-icon { font-size: 18px; font-weight: 700; color: #2b1f99; }
|
|
|
-.align-head-title { font-size: 15px; font-weight: 700; color: #1a1a2e; }
|
|
|
-.align-head-hint { font-size: 13px; color: #9ca3af; }
|
|
|
+.align-head-icon { font-size: var(--font-size-xl); font-weight: 700; color: var(--color-brand); }
|
|
|
+.align-head-title { font-size: 15px; font-weight: 700; color: var(--color-text); }
|
|
|
+.align-head-hint { font-size: var(--font-size-sm); color: var(--color-text-muted); }
|
|
|
|
|
|
-.align-o-card { padding: 0; border-bottom: 1px solid #f3f4f6; }
|
|
|
+.align-o-card { padding: 0; border-bottom: 1px solid var(--color-border-soft); }
|
|
|
.align-o-card:last-child { border-bottom: none; }
|
|
|
.align-o-head { display: flex; align-items: center; gap: 10px; padding: 14px 22px 8px; }
|
|
|
-.align-o-icon { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; border-radius: 6px; background: #2b1f99; color: #fff; font-size: 12px; font-weight: 700; }
|
|
|
-.align-o-title { font-size: 14px; font-weight: 600; color: #1a1a2e; }
|
|
|
+.align-o-icon { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; border-radius: var(--radius-sm); background: var(--color-brand); color: var(--color-white); font-size: var(--font-size-xs); font-weight: 700; }
|
|
|
+.align-o-title { font-size: var(--font-size-base); font-weight: 600; color: var(--color-text); }
|
|
|
|
|
|
.align-kr-list { padding: 0 22px 14px; display: flex; flex-direction: column; gap: 6px; }
|
|
|
-.align-kr-row { display: flex; align-items: center; justify-content: space-between; padding: 10px 14px; border-radius: 8px; cursor: pointer; transition: all 0.15s; border: 1px solid transparent; }
|
|
|
-.align-kr-row:hover { background: #f9fafb; }
|
|
|
-.align-kr-row.is-selected { background: #f5f3ff; border-color: #d4cdf0; }
|
|
|
-.align-kr-row.is-mandatory { background: #fffdf5; border-color: #fde68a; cursor: default; }
|
|
|
+.align-kr-row { display: flex; align-items: center; justify-content: space-between; padding: 10px 14px; border-radius: var(--radius-md); cursor: pointer; transition: all 0.15s; border: 1px solid transparent; }
|
|
|
+.align-kr-row:hover { background: var(--color-surface-subtle); }
|
|
|
+.align-kr-row.is-selected { background: var(--color-surface-tint-brand); border-color: var(--color-border); }
|
|
|
+.align-kr-row.is-mandatory { background: var(--color-surface-tint-warning); border-color: var(--color-border-soft); cursor: default; }
|
|
|
.align-kr-left { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; }
|
|
|
-.align-kr-num { font-size: 11px; font-weight: 700; color: #9ca3af; width: 30px; flex-shrink: 0; letter-spacing: 0.5px; }
|
|
|
-.align-checkbox { width: 18px; height: 18px; border-radius: 4px; border: 2px solid #d1d5db; display: inline-flex; align-items: center; justify-content: center; font-size: 12px; color: transparent; flex-shrink: 0; transition: all 0.15s; cursor: pointer; }
|
|
|
-.align-checkbox.checked { background: #2b1f99; border-color: #2b1f99; color: #fff; }
|
|
|
-.align-checkbox.locked { background: #fde68a; border-color: #f59e0b; color: #92400e; cursor: default; }
|
|
|
-.align-kr-title { font-size: 13px; color: #374151; }
|
|
|
+.align-kr-num { font-size: 11px; font-weight: 700; color: var(--color-text-muted); width: 30px; flex-shrink: 0; letter-spacing: 0; }
|
|
|
+.align-checkbox { min-width: 34px; height: 18px; border-radius: var(--radius-xs); border: 1px solid var(--color-border); display: inline-flex; align-items: center; justify-content: center; font-size: 10px; color: transparent; flex-shrink: 0; transition: all 0.15s; cursor: pointer; padding: 0 4px; }
|
|
|
+.align-checkbox.checked { background: var(--color-brand); border-color: var(--color-brand); color: var(--color-white); }
|
|
|
+.align-checkbox.locked { background: var(--color-surface-tint-warning); border-color: var(--color-warning); color: var(--color-warning); cursor: default; }
|
|
|
+.align-kr-title { font-size: var(--font-size-sm); color: var(--color-text); }
|
|
|
.align-kr-right { display: flex; align-items: center; gap: 10px; flex-shrink: 0; }
|
|
|
-.align-kr-target { font-size: 12px; color: #9ca3af; }
|
|
|
+.align-kr-target { font-size: var(--font-size-xs); color: var(--color-text-muted); }
|
|
|
|
|
|
-.align-footer { padding: 12px 22px; background: #f9fafb; border-top: 1px solid #f3f4f6; font-size: 13px; color: #6b7280; text-align: center; }
|
|
|
-.align-footer strong { color: #2b1f99; }
|
|
|
+.align-footer { padding: 12px 22px; background: var(--color-surface-subtle); border-top: 1px solid var(--color-border-soft); font-size: var(--font-size-sm); color: var(--color-text-secondary); text-align: center; }
|
|
|
+.align-footer strong { color: var(--color-brand); }
|
|
|
|
|
|
.parent-align-section { margin-bottom: 20px; }
|
|
|
-.parent-align-label { font-weight: 600; font-size: 15px; color: #1a1a2e; margin-bottom: 8px; }
|
|
|
+.parent-align-label { font-weight: 600; font-size: 15px; color: var(--color-text); margin-bottom: 8px; }
|
|
|
|
|
|
.o-section { margin-bottom: 20px; }
|
|
|
-.o-label { font-weight: 600; font-size: 15px; color: #1a1a2e; margin-bottom: 8px; }
|
|
|
-.o-hint { font-size: 12px; color: #aaa; font-weight: 400; }
|
|
|
+.o-label { font-weight: 600; font-size: 15px; color: var(--color-text); margin-bottom: 8px; }
|
|
|
+.o-hint { font-size: var(--font-size-xs); color: var(--color-text-muted); font-weight: 400; }
|
|
|
|
|
|
.kr-section { margin-bottom: 16px; }
|
|
|
-.kr-section-title { font-weight: 600; font-size: 15px; color: #1a1a2e; margin-bottom: 12px; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
|
|
|
-.weight-sum { font-size: 13px; padding: 2px 10px; border-radius: 8px; }
|
|
|
-.weight-ok { background: #eafaf1; color: #1e8449; font-weight: 700; }
|
|
|
-.weight-bad { background: #fdedec; color: #c0392b; font-weight: 700; }
|
|
|
-.kr-form-card { background: #fafbfc; border-radius: 10px; padding: 14px 16px; margin-bottom: 10px; border: 1px solid #f0f0f0; }
|
|
|
-.kr-form-card.has-source { border-left: 3px solid #2b1f99; }
|
|
|
-.kr-source-bar { display: flex; align-items: center; gap: 6px; margin-bottom: 10px; padding: 6px 10px; background: #f5f3ff; border-radius: 6px; font-size: 12px; }
|
|
|
-.kr-source-icon { color: #2b1f99; font-weight: 700; }
|
|
|
-.kr-source-text { color: #555; }
|
|
|
+.kr-section-title { font-weight: 600; font-size: 15px; color: var(--color-text); margin-bottom: 12px; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
|
|
|
+.weight-sum { font-size: var(--font-size-sm); padding: 2px 10px; border-radius: var(--radius-md); }
|
|
|
+.weight-ok { background: var(--color-surface-tint-success); color: var(--color-success); font-weight: 700; }
|
|
|
+.weight-bad { background: var(--color-surface-tint-danger); color: var(--color-danger); font-weight: 700; }
|
|
|
+.kr-form-card { background: var(--color-surface-subtle); border-radius: var(--radius-md); padding: 14px 16px; margin-bottom: 10px; border: 1px solid var(--color-border-soft); }
|
|
|
+.kr-form-card.has-source { border-left: 3px solid var(--color-brand); }
|
|
|
+.kr-source-bar { display: flex; align-items: center; gap: 6px; margin-bottom: 10px; padding: 6px 10px; background: var(--color-surface-tint-brand); border-radius: var(--radius-sm); font-size: var(--font-size-xs); }
|
|
|
+.kr-source-icon { color: var(--color-brand); font-weight: 700; }
|
|
|
+.kr-source-text { color: var(--color-text-secondary); }
|
|
|
.kr-form-head { display: flex; align-items: flex-start; gap: 10px; }
|
|
|
.kr-form-head .el-textarea { flex: 1; }
|
|
|
-.kr-form-num { font-size: 13px; font-weight: 700; color: #3ad4d8; width: 36px; }
|
|
|
+.kr-form-num { font-size: var(--font-size-sm); font-weight: 700; color: var(--color-accent); width: 36px; }
|
|
|
.kr-form-right { display: flex; align-items: center; gap: 6px; flex-shrink: 0; }
|
|
|
-.kr-form-label-sm { font-size: 11px; color: #999; }
|
|
|
+.kr-form-label-sm { font-size: 11px; color: var(--color-text-muted); }
|
|
|
.kr-form-extra { display: flex; align-items: center; gap: 8px; margin-top: 8px; }
|
|
|
-.kr-form-label { font-size: 12px; color: #999; }
|
|
|
+.kr-form-label { font-size: var(--font-size-xs); color: var(--color-text-muted); }
|
|
|
|
|
|
-.dialog-kpi-ref { background: #f0f8ff; border: 1px solid #d6eaf8; border-radius: 8px; padding: 12px 16px; margin-bottom: 12px; }
|
|
|
-.dkr-title { font-size: 13px; font-weight: 600; color: #2b1f99; margin-bottom: 6px; }
|
|
|
+.dialog-kpi-ref { background: var(--color-surface-tint-info); border: 1px solid var(--color-border-soft); border-radius: var(--radius-md); padding: 12px 16px; margin-bottom: 12px; }
|
|
|
+.dkr-title { font-size: var(--font-size-sm); font-weight: 600; color: var(--color-brand); margin-bottom: 6px; }
|
|
|
.dkr-tags { display: flex; flex-wrap: wrap; gap: 4px; }
|
|
|
-.dkr-hint { font-size: 11px; color: #999; margin-top: 6px; }
|
|
|
+.dkr-hint { font-size: 11px; color: var(--color-text-muted); margin-top: 6px; }
|
|
|
|
|
|
-.dialog-footer-hint { text-align: center; font-size: 12px; color: #aaa; margin-top: 12px; }
|
|
|
+.dialog-footer-hint { text-align: center; font-size: var(--font-size-xs); color: var(--color-text-muted); margin-top: 12px; }
|
|
|
</style>
|