ui: 全组件审核打磨(按下态/细滚动条/tooltip修复/统计卡语义色条/进度条完成态/危险确认警示/耗时chips/日历今日高亮/密码等宽/登录页质感)
This commit is contained in:
@@ -28,7 +28,7 @@ onUnmounted(() => window.removeEventListener('keydown', onKey))
|
||||
<transition name="modal">
|
||||
<div v-if="open" class="mask" @click.self="emit('cancel')">
|
||||
<div class="dialog" role="dialog" :aria-label="title">
|
||||
<div class="dialog-title">{{ title }}</div>
|
||||
<div class="dialog-title" :class="{ 'is-danger': danger }">{{ title }}</div>
|
||||
<div class="dialog-msg">{{ message }}</div>
|
||||
<div class="dialog-btns">
|
||||
<button class="btn btn-sm" @click="emit('cancel')">{{ cancelText }}</button>
|
||||
@@ -42,6 +42,7 @@ onUnmounted(() => window.removeEventListener('keydown', onKey))
|
||||
|
||||
<style scoped>
|
||||
.dialog { width: 380px; }
|
||||
.dialog-title.is-danger { color: var(--danger); }
|
||||
.dialog-msg { margin-top: 8px; color: var(--text-2); font-size: 13px; line-height: 1.7; word-break: break-all; }
|
||||
.dialog-btns { margin-top: 20px; }
|
||||
</style>
|
||||
|
||||
@@ -420,6 +420,7 @@ async function confirmDelete() {
|
||||
.att-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px 16px; }
|
||||
.att-cell label { display: block; font-size: 12px; color: var(--text-2); margin-bottom: 4px; }
|
||||
.att-val { display: flex; align-items: center; gap: 6px; min-height: 32px; font-size: 13px; }
|
||||
.att-val > .num { font-size: 14px; font-weight: 600; letter-spacing: 0.2px; }
|
||||
.val-empty { color: var(--text-3); }
|
||||
.edit-row { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; }
|
||||
.time-input { width: 104px; }
|
||||
@@ -444,7 +445,7 @@ async function confirmDelete() {
|
||||
}
|
||||
.item:hover { border-color: var(--border-strong); background: var(--bg-page); }
|
||||
.item-main { display: flex; align-items: center; gap: 8px; min-height: 26px; flex-wrap: wrap; }
|
||||
.item-content { cursor: text; word-break: break-all; }
|
||||
.item-content { cursor: text; word-break: break-all; font-weight: 500; }
|
||||
.item-meta { font-size: 12px; }
|
||||
.item-sub {
|
||||
margin-top: 6px; padding-top: 6px; border-top: 1px dashed var(--border);
|
||||
|
||||
@@ -146,6 +146,13 @@ function save() {
|
||||
<div class="field">
|
||||
<label>耗时(分钟)</label>
|
||||
<input class="input" type="number" min="0" v-model.number="formMinutes" placeholder="选填" />
|
||||
<div class="min-chips">
|
||||
<button
|
||||
v-for="m in [15, 30, 60, 90, 120]" :key="m" type="button"
|
||||
class="min-chip" :class="{ on: formMinutes === m }"
|
||||
@click="formMinutes = formMinutes === m ? null : m"
|
||||
>{{ m }}分</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>主要收获</label>
|
||||
@@ -183,4 +190,18 @@ function save() {
|
||||
|
||||
<style scoped>
|
||||
.dialog { width: 560px; }
|
||||
.min-chips { display: flex; gap: 6px; margin-top: 6px; flex-wrap: wrap; }
|
||||
.min-chip {
|
||||
border: 1px solid var(--border-strong);
|
||||
background: var(--bg-page);
|
||||
border-radius: 999px;
|
||||
height: 24px;
|
||||
padding: 0 10px;
|
||||
font-size: 12px;
|
||||
color: var(--text-2);
|
||||
cursor: pointer;
|
||||
transition: all 0.12s;
|
||||
}
|
||||
.min-chip:hover { background: var(--bg-hover); }
|
||||
.min-chip.on { background: var(--accent-bg); border-color: var(--accent); color: var(--accent); }
|
||||
</style>
|
||||
|
||||
Reference in New Issue
Block a user