二次编辑商品

This commit is contained in:
yml2213
2026-06-12 21:43:02 +08:00
parent c8b8922c8d
commit f1ae72cc7a
9 changed files with 251 additions and 20 deletions
@@ -14,6 +14,10 @@ const {
router,
loading,
uploading,
isEditMode,
pageTitle,
submitButtonText,
submitLoadingText,
publishAgreements,
virtualAssetSaleAgreementChecked,
sellerAgreementChecked,
@@ -119,7 +123,7 @@ function selectRadio<T extends string>(value: T, setter: (value: T) => void) {
<button class="back-btn" type="button" @click="router.back()">
<van-icon name="arrow-left" :size="20" />
</button>
<h1>发布账号</h1>
<h1>{{ pageTitle }}</h1>
<span class="header-spacer"></span>
</header>
@@ -710,7 +714,7 @@ function selectRadio<T extends string>(value: T, setter: (value: T) => void) {
<div class="publish-actions">
<van-button round class="reset-btn" :disabled="loading" @click="handleResetDraft">
重置
{{ isEditMode ? '恢复' : '重置' }}
</van-button>
<van-button
type="primary"
@@ -718,10 +722,10 @@ function selectRadio<T extends string>(value: T, setter: (value: T) => void) {
class="submit-btn"
:loading="loading"
:disabled="!canPublishAfterAgreements"
loading-text="发布中..."
:loading-text="submitLoadingText"
@click="handleSubmit"
>
保存发布
{{ submitButtonText }}
</van-button>
</div>
</section>
@@ -33,6 +33,8 @@ const {
selectedSkins,
uploadedScreenshotCount,
requiredScreenshotCount,
isEditMode,
submitButtonText,
disabledOnlineStartOptions,
disabledOnlineEndOptions,
serverOptions,
@@ -684,13 +686,17 @@ function selectDailyLoss(value: string | number) {
:disabled="!canPublishAfterAgreements"
@click="handleSubmit"
>
立即发布
{{ submitButtonText }}
</el-button>
<el-button :icon="DocumentChecked" :disabled="loading" @click="handleSaveDraft"
<el-button
v-if="!isEditMode"
:icon="DocumentChecked"
:disabled="loading"
@click="handleSaveDraft"
>保存草稿</el-button
>
<el-button :icon="RefreshRight" :disabled="loading" @click="handleResetDraft"
>重置草稿</el-button
>{{ isEditMode ? '恢复原信息' : '重置草稿' }}</el-button
>
</div>
</div>
@@ -1,7 +1,8 @@
<script setup lang="ts">
import { CopyDocument, Plus, Refresh } from '@element-plus/icons-vue'
import { CopyDocument, Edit, Plus, Refresh } from '@element-plus/icons-vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { computed, onMounted, ref } from 'vue'
import { useRoute } from 'vue-router'
import {
fetchSellerListings,
@@ -18,6 +19,7 @@ const submittingID = ref<number | null>(null)
const offliningID = ref<number | null>(null)
const listings = ref<Listing[]>([])
const statusFilter = ref('all')
const route = useRoute()
const displayListings = computed(() => {
if (statusFilter.value === 'all') return listings.value
@@ -125,10 +127,20 @@ function canSubmit(row: Listing) {
return !isPendingReview(row) && row.status !== 'rented' && row.status !== 'published'
}
function canEdit(row: Listing) {
return !isPendingReview(row) && row.status !== 'rented' && row.status !== 'published'
}
function canOffline(row: Listing) {
return row.status !== 'rented' && row.status !== 'offline'
}
function editPath(row: Listing) {
return route.path.startsWith('/m/')
? `/m/seller/listings/${row.id}/edit`
: `/seller/listings/${row.id}/edit`
}
function statusTone(status: string) {
const tones: Record<string, string> = {
published: 'success',
@@ -235,6 +247,9 @@ function isPendingReview(row: Listing) {
</div>
<div class="listing-actions">
<RouterLink v-if="canEdit(item)" :to="editPath(item)">
<el-button :icon="Edit">编辑</el-button>
</RouterLink>
<el-button
:disabled="!canSubmit(item)"
:loading="submittingID === item.id"