增加发布协议确认配置

This commit is contained in:
yml2213
2026-06-07 21:14:49 +08:00
parent 954c3d6be3
commit eebd2d3b04
19 changed files with 760 additions and 13 deletions
@@ -1,8 +1,10 @@
<script setup lang="ts">
import { showDialog, showToast } from 'vant'
import { computed, ref } from 'vue'
import MobileBottomNav from '@/components/MobileBottomNav.vue'
import { usePublishForm } from '@/features/seller/composables/usePublishForm'
import type { AgreementContent } from '@/features/listings/api/listingOptions'
const {
commonOnlineTimes,
@@ -11,6 +13,10 @@ const {
router,
loading,
uploading,
publishAgreements,
virtualAssetSaleAgreementChecked,
sellerAgreementChecked,
canPublishAfterAgreements,
fileInput,
activeUploadKey,
form,
@@ -78,7 +84,15 @@ const {
notifyError: (message) => showToast({ message, icon: 'cross' }),
})
const agreementPopupVisible = ref(false)
const activeAgreement = ref<AgreementContent | null>(null)
const activeAgreementTitle = computed(() => activeAgreement.value?.title || '协议内容')
const activeAgreementContent = computed(() => activeAgreement.value?.content || '')
function openPublishAgreement(agreement: AgreementContent) {
activeAgreement.value = agreement
agreementPopupVisible.value = true
}
function selectRadio<T extends string>(value: T, setter: (value: T) => void) {
setter(value)
@@ -637,6 +651,33 @@ function selectOnlineEnd(value: string) {
/>
</div>
<div class="publish-agreement-card">
<van-checkbox v-model="virtualAssetSaleAgreementChecked" icon-size="18px">
<span class="agreement-check-label">
我已阅读并同意
<button
type="button"
class="agreement-link"
@click.stop.prevent="openPublishAgreement(publishAgreements.virtual_asset_sale)"
>
{{ publishAgreements.virtual_asset_sale.title }}
</button>
</span>
</van-checkbox>
<van-checkbox v-model="sellerAgreementChecked" icon-size="18px">
<span class="agreement-check-label">
我已阅读并同意
<button
type="button"
class="agreement-link"
@click.stop.prevent="openPublishAgreement(publishAgreements.seller_agreement)"
>
{{ publishAgreements.seller_agreement.title }}
</button>
</span>
</van-checkbox>
</div>
<div class="publish-actions">
<van-button
round
@@ -651,6 +692,7 @@ function selectOnlineEnd(value: string) {
round
class="submit-btn"
:loading="loading"
:disabled="!canPublishAfterAgreements"
loading-text="发布中..."
@click="handleSubmit"
>
@@ -659,6 +701,13 @@ function selectOnlineEnd(value: string) {
</div>
</section>
<van-popup v-model:show="agreementPopupVisible" round closeable position="bottom" lock-scroll class="publish-agreement-popup">
<div class="agreement-popup-body">
<h3>{{ activeAgreementTitle }}</h3>
<div class="agreement-popup-content">{{ activeAgreementContent }}</div>
</div>
</van-popup>
<MobileBottomNav />
</main>
</template>