feat: 活动日志撤销+详情+排版优化
All checks were successful
PR Preview / teardown-preview (pull_request) Has been skipped
Test / unit-test (push) Successful in 5s
Test / build-check (push) Successful in 4s
PR Preview / test (pull_request) Successful in 6s
PR Preview / deploy-preview (pull_request) Successful in 16s
Test / e2e-test (push) Successful in 50s
All checks were successful
PR Preview / teardown-preview (pull_request) Has been skipped
Test / unit-test (push) Successful in 5s
Test / build-check (push) Successful in 4s
PR Preview / test (pull_request) Successful in 6s
PR Preview / deploy-preview (pull_request) Successful in 16s
Test / e2e-test (push) Successful in 50s
活动日志: - 删除配方/用户/精油加撤销按钮 - 编辑配方记录修改了哪些字段(名称/成分/标签/备注/英文名) - 创建标签记入日志 - 注册记入日志(已有) 配方卡片: - 精油按字母排序 - 容量移到名字后面 - 标签对viewer不可见 - 管理配方标签排序+容量显示 其他: - 管理员共享直接显示已共享 - 点击轮播清除搜索 - 编辑overlay防误关 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -125,8 +125,9 @@
|
||||
/>
|
||||
<div class="row-info" @click="editDiaryRecipe(d)">
|
||||
<span class="row-name">{{ d.name }}</span>
|
||||
<span v-if="getVolumeLabel(d.ingredients)" class="row-volume">{{ getVolumeLabel(d.ingredients) }}</span>
|
||||
<span class="row-tags">
|
||||
<span v-for="t in (d.tags || []).filter(t => auth.canEdit || !EDITOR_ONLY_TAGS.includes(t))" :key="t" class="mini-tag">{{ t }}</span>
|
||||
<span v-for="t in [...(d.tags || [])].sort((a,b)=>a.localeCompare(b,'zh'))" :key="t" class="mini-tag">{{ t }}</span>
|
||||
</span>
|
||||
<span class="row-cost">{{ oils.fmtPrice(oils.calcCost(d.ingredients || [])) }}</span>
|
||||
<span v-if="getDiaryShareStatus(d) === 'shared'" class="share-tag shared">已共享</span>
|
||||
@@ -164,8 +165,9 @@
|
||||
/>
|
||||
<div class="row-info" @click="editRecipe(r)">
|
||||
<span class="row-name">{{ r.name }}</span>
|
||||
<span v-if="getVolumeLabel(r.ingredients)" class="row-volume">{{ getVolumeLabel(r.ingredients) }}</span>
|
||||
<span class="row-tags">
|
||||
<span v-for="t in (r.tags || []).filter(t => auth.canEdit || !EDITOR_ONLY_TAGS.includes(t))" :key="t" class="mini-tag">{{ t }}</span>
|
||||
<span v-for="t in [...(r.tags || [])].sort((a,b)=>a.localeCompare(b,'zh'))" :key="t" class="mini-tag">{{ t }}</span>
|
||||
</span>
|
||||
<span class="row-cost">{{ oils.fmtPrice(oils.calcCost(r.ingredients)) }}</span>
|
||||
</div>
|
||||
@@ -1303,6 +1305,16 @@ function openRecipeDetail(recipe) {
|
||||
if (idx >= 0) previewRecipeIndex.value = idx
|
||||
}
|
||||
|
||||
function getVolumeLabel(ingredients) {
|
||||
const ings = ingredients || []
|
||||
const coco = ings.find(i => i.oil === '椰子油')
|
||||
if (!coco || !coco.drops) return ''
|
||||
const totalDrops = ings.reduce((s, i) => s + (i.drops || 0), 0)
|
||||
const ml = totalDrops / 18.6
|
||||
if (ml <= 2) return '单次'
|
||||
return `${Math.round(ml)}ml`
|
||||
}
|
||||
|
||||
function diaryMatchesPublic(d) {
|
||||
const pub = recipeStore.recipes.find(r => r.name === d.name)
|
||||
if (!pub) return false
|
||||
@@ -1788,6 +1800,7 @@ watch(() => recipeStore.recipes, () => {
|
||||
}
|
||||
.share-tag.shared { background: #e8f5e9; color: #2e7d32; }
|
||||
.share-tag.pending { background: #fff3e0; color: #e65100; }
|
||||
.row-volume { font-size: 10px; color: #b0aab5; white-space: nowrap; }
|
||||
|
||||
.review-history { max-height: 300px; overflow-y: auto; }
|
||||
.review-log-item {
|
||||
|
||||
Reference in New Issue
Block a user