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

活动日志:
- 删除配方/用户/精油加撤销按钮
- 编辑配方记录修改了哪些字段(名称/成分/标签/备注/英文名)
- 创建标签记入日志
- 注册记入日志(已有)

配方卡片:
- 精油按字母排序
- 容量移到名字后面
- 标签对viewer不可见
- 管理配方标签排序+容量显示

其他:
- 管理员共享直接显示已共享
- 点击轮播清除搜索
- 编辑overlay防误关

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-11 21:36:27 +00:00
parent de89ccebac
commit b293ceb960
5 changed files with 69 additions and 9 deletions

View File

@@ -1,11 +1,10 @@
<template>
<div class="recipe-card" @click="$emit('click', index)">
<div class="recipe-card-name">{{ recipe.name }}</div>
<div class="recipe-card-name">{{ recipe.name }} <span v-if="volumeLabel" class="recipe-card-volume">{{ volumeLabel }}</span></div>
<div v-if="visibleTags.length" class="recipe-card-tags">
<span v-for="tag in visibleTags" :key="tag" class="tag" :class="{ 'tag-reviewed': tag === '已审核' }">{{ tag }}</span>
</div>
<div class="recipe-card-oils">{{ oilNames }}</div>
<span v-if="volumeLabel" class="recipe-card-volume">{{ volumeLabel }}</span>
<div class="recipe-card-bottom">
<div class="recipe-card-price">💰 {{ priceInfo.cost }}</div>
<button
@@ -37,7 +36,8 @@ const auth = useAuthStore()
const visibleTags = computed(() => {
if (!props.recipe.tags) return []
const tags = auth.canEdit ? [...props.recipe.tags] : props.recipe.tags.filter(t => !EDITOR_ONLY_TAGS.includes(t))
if (!auth.canEdit) return []
const tags = [...props.recipe.tags]
return tags.sort((a, b) => a.localeCompare(b, 'zh'))
})
@@ -112,8 +112,8 @@ const volumeLabel = computed(() => {
.recipe-card-volume {
font-size: 10px;
color: #b0aab5;
display: block;
margin-bottom: 4px;
font-weight: 400;
margin-left: 4px;
}
.recipe-card-bottom {