feat(ui06): B3c form batch — full-page create/edit form + assets tab

- 新增 /albums/form/create 与 /albums/form/:albumId 整页表单路由(隐藏路由,父菜单高亮)
- 编辑模式资料/访问页签(访问=开关行卡:标题+说明+开关);创建模式契约约束下载开关+解释提示
- 校验/提交逻辑与原对话框一致(契约镜像校验;translations 全量替换;创建仅 download 开关)
- 保存成功跳相册详情;manage/detail 两处入口改路由跳转,删除 AlbumFormDialog
- banner 上传收进详情「品牌资产」独立页签(15)
- e2e 适配:整页表单流程(form-page/goback/访问页签)、详情锚点改 summary、banner 页签
- typecheck/lint/vitest/build 全绿

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-09-23 06:58:01 +08:00
parent d6d012b992
commit 352d7405c2
30 changed files with 565 additions and 337 deletions
+7 -13
View File
@@ -35,7 +35,7 @@
type="primary"
plain
data-test="album-detail-edit"
@click="editVisible = true"
@click="router.push({ name: 'AlbumsFormEdit', params: { albumId: albumId } })"
>
{{ $t('albumsManage.detail.edit') }}
</ElButton>
@@ -44,11 +44,6 @@
<!-- 摘要头:封面 + 紧凑资料 + 高级折叠(替换原 ElDescriptions 大区) -->
<AlbumSummaryHeader v-if="album" :album="album" />
<!-- 品牌资产(banner 上传;B3c 收进独立页签,本批保持原位) -->
<div v-if="album" class="mt-5">
<AlbumBannerUpload :album-id="albumId" />
</div>
</div>
<ElTabs v-if="album" v-model="activeTab" class="mt-4" data-test="album-detail-tabs">
@@ -88,10 +83,15 @@
</template>
<AlbumShareCard :album="album" />
</ElTabPane>
<ElTabPane name="assets">
<template #label>
<span data-test="album-assets-tab">{{ $t('albumsManage.detail.tabAssets') }}</span>
</template>
<AlbumBannerUpload :album-id="albumId" />
</ElTabPane>
</ElTabs>
</template>
<AlbumFormDialog v-if="album" v-model="editVisible" :album="album" @saved="onAlbumSaved" />
<AlbumTransferDialog
v-if="album"
v-model="transferVisible"
@@ -105,7 +105,6 @@
import { computed, onMounted, ref, watch } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { ArrowLeft } from '@element-plus/icons-vue'
import AlbumFormDialog from '@/views/albums/manage/AlbumFormDialog.vue'
import AlbumSummaryHeader from '@/components/business/albums/AlbumSummaryHeader.vue'
import AlbumBannerUpload from './AlbumBannerUpload.vue'
import AlbumMembers from './AlbumMembers.vue'
@@ -126,7 +125,6 @@
const album = ref<Api.Album.Detail | null>(null)
const loading = ref(false)
const error = ref<Error | null>(null)
const editVisible = ref(false)
const transferVisible = ref(false)
const activeTab = ref('photos')
@@ -143,10 +141,6 @@
}
}
function onAlbumSaved(saved: Api.Album.Detail) {
album.value = saved
}
/** 交接成功:回包 ownerId 已变更,原位替换相册详情 */
function onTransferred(transferred: Api.Album.Detail) {
album.value = transferred