优化发布界面

This commit is contained in:
yml2213
2026-05-23 11:31:28 +08:00
parent ce554432c2
commit 367f26ffd1
13 changed files with 348 additions and 240 deletions
@@ -3,7 +3,7 @@ import { ElMessage } from 'element-plus'
import { computed, onMounted, ref } from 'vue'
import {
defaultListingPublishOptions,
emptyListingPublishOptions,
mergeListingPublishOptions,
type ListingPublishOptions,
} from '@/api/listingOptions'
@@ -23,7 +23,7 @@ const configs = ref<SystemConfig[]>([])
const activeConfig = ref<SystemConfig | null>(null)
const value = ref('')
const description = ref('')
const publishOptionsDraft = ref<ListingPublishOptions>(cloneOptions(defaultListingPublishOptions))
const publishOptionsDraft = ref<ListingPublishOptions>(cloneOptions(emptyListingPublishOptions))
const homeAnnouncementLines = ref(itemsToLines(defaultHomeAnnouncements))
const homeBannersDraft = ref<HomeBannerSlide[]>(cloneHomeBanners(defaultHomeBanners))
const uploadingBannerIndex = ref<number | null>(null)
@@ -141,20 +141,20 @@ async function handleSave() {
function parsePublishOptions(raw: string) {
try {
const parsed = raw.trim() ? JSON.parse(raw) : defaultListingPublishOptions
const parsed = raw.trim() ? JSON.parse(raw) : emptyListingPublishOptions
return cloneOptions(mergeListingPublishOptions(parsed))
} catch {
ElMessage.warning('发布选项 JSON 解析失败,已使用默认配置')
return cloneOptions(defaultListingPublishOptions)
ElMessage.warning('发布选项 JSON 解析失败,已清空草稿')
return cloneOptions(emptyListingPublishOptions)
}
}
function safeParsePublishOptions(raw: string) {
try {
const parsed = raw.trim() ? JSON.parse(raw) : defaultListingPublishOptions
const parsed = raw.trim() ? JSON.parse(raw) : emptyListingPublishOptions
return cloneOptions(mergeListingPublishOptions(parsed))
} catch {
return cloneOptions(defaultListingPublishOptions)
return cloneOptions(emptyListingPublishOptions)
}
}
@@ -222,7 +222,7 @@ function removeSkinGroup(index: number) {
function addQuantityItem() {
publishOptionsDraft.value.quantity_items.push({
key: `item_${Date.now()}` as never,
key: `item_${Date.now()}`,
label: '',
price: '',
})
@@ -234,7 +234,7 @@ function removeQuantityItem(index: number) {
function addScreenshotSlot() {
publishOptionsDraft.value.screenshot_slots.push({
key: `screenshot_${Date.now()}` as never,
key: `screenshot_${Date.now()}`,
label: '',
required: false,
hint: '',
@@ -245,10 +245,6 @@ function removeScreenshotSlot(index: number) {
publishOptionsDraft.value.screenshot_slots.splice(index, 1)
}
function resetPublishOptions() {
publishOptionsDraft.value = cloneOptions(defaultListingPublishOptions)
}
function addHomeBanner() {
homeBannersDraft.value.push({
eyebrow: '首页推荐',
@@ -330,7 +326,7 @@ function readError(error: unknown, fallback: string) {
<div>
<p class="eyebrow">Publish Options</p>
<h2>发布表单选项</h2>
<span>管理移动端发布页的区服段位皮肤资源道具截图材料和地区选项</span>
<span>管理移动端发布页的区服段位皮肤额外消耗品截图材料和地区选项</span>
</div>
<el-button type="primary" @click="openEdit(publishConfig)">编辑发布选项</el-button>
</div>
@@ -345,7 +341,7 @@ function readError(error: unknown, fallback: string) {
</div>
<div class="publish-stat">
<strong>{{ publishStats.resourceCount }}</strong>
<span>资源道具</span>
<span>额外消耗品</span>
</div>
<div class="publish-stat">
<strong>{{ publishStats.screenshotCount }}</strong>
@@ -421,7 +417,6 @@ function readError(error: unknown, fallback: string) {
<div v-if="isPublishOptionsConfig" class="publish-options-editor">
<div class="editor-toolbar">
<span>发布页选项配置</span>
<el-button size="small" @click="resetPublishOptions">恢复默认选项</el-button>
</div>
<div class="editor-grid">
@@ -512,8 +507,8 @@ function readError(error: unknown, fallback: string) {
<div class="editor-block">
<div class="editor-block-title">
<strong>资源道具</strong>
<el-button size="small" @click="addQuantityItem">添加道具</el-button>
<strong>额外消耗品</strong>
<el-button size="small" @click="addQuantityItem">添加消耗品</el-button>
</div>
<el-table :data="publishOptionsDraft.quantity_items" size="small" border>
<el-table-column label="Key" min-width="150">