<script setup> import pdfView from './pdfView/index.vue' import { contractView, signOffline } from "~/api/goods/index.js" import { codeAuthStore } from "~/stores-collect-code/auth/index.js" import { useI18n } from "vue-i18n" import { fddInfo } from "@/api-collect-code/goods/index.js" <<<<<<< HEAD ======= import { showLoadingToast } from 'vant'; >>>>>>> xingyy definePageMeta({ i18n: 'signature.protocol.title' }) const { t } = useI18n() const { formData, number, qrData } = codeAuthStore() <<<<<<< HEAD const activeNames = ref([]) ======= const activeNames = ref('') >>>>>>> xingyy const router = useRouter() const pmblUrl = ref('') /** * 根据签署顺序(number)返回不同的协议列表 * number = 1: 买家签署阶段,展示竞买协议、竞买须知、拍卖公告、拍卖规则 * number = 2: 卖家签署阶段,展示拍卖成交确认书、拍卖笔录 */ const protocolList = computed(() => { if (number.value === 1) { return [ { id: '4', title: t('signature.agreement.buyerAgreement'), pdfName: 'jmxy', type: 'local' }, { id: '3', title: t('signature.agreement.buyerGuide'), pdfName: 'jmxz', type: 'local' }, { id: '1', title: t('signature.agreement.notice'), pdfName: 'pmgg', type: 'local' }, { id: '2', title: t('signature.agreement.rules'), pdfName: 'pmgz', type: 'local' }, ] } else if (number.value === 2) { return [ { id: '6', title: t('signature.agreement.transfer'), pdfName: 'pmyjqrs', type: 'local' }, { id: '5', title: t('signature.agreement.record'), pdfName: pmblUrl.value, type: 'remote' } ] } return [] }) /** * 获取拍卖笔录PDF * 通过拍品UUID获取拍卖笔录的查看地址 */ const fetchPmblPdf = async () => { try { const res = await contractView({ auctionArtworkUuid: qrData.value.auctionArtworkUuid, }) pmblUrl.value = res.data?.viewUrl } catch (error) { console.error('获取拍卖笔录失败:', error) } } /** * 折叠面板变化处理 * 当打开拍卖笔录面板时,获取PDF地址 */ const handleCollapseChange = (name) => { activeNames.value = name if (name === '5' && !pmblUrl.value) { fetchPmblPdf() } } /** * 确认签署处理 * 1. 获取用户法大大认证信息 * 2. 根据用户类型和地区判断签署流程: * - 特殊用户且isMainland=1: 走大陆签署流程 * - 特殊用户且isMainland=0: 走非大陆签署流程 * - 普通用户: * - 大陆用户(countryCode=86且身份证): 走大陆签署流程 * - 其他用户: 走非大陆签署流程 */ const confirm = async () => { <<<<<<< HEAD ======= const toast= showLoadingToast({ message: '加载中...', forbidClick: true, }); >>>>>>> xingyy try { const fddResponse = await fddInfo({ phone: formData.value.phone }) if (fddResponse.status === 0) { const { userId, isMainland } = fddResponse.data // 特殊用户处理逻辑 if (userId) { if (isMainland === 1) { await handleMainlandSign() } else { router.push('/collectCode/signature/panel') } return } // 普通用户处理逻辑 const isMainlandUser = formData.value.countryCode === '86' && formData.value.cardType === 1 if (isMainlandUser) { await handleMainlandSign() } else { router.push('/collectCode/signature/panel') } } } catch (error) { console.error('签署确认失败:', error) <<<<<<< HEAD ======= }finally{ toast.close(); >>>>>>> xingyy } } /** * 处理大陆用户签署流程 */ const handleMainlandSign = async () => { const res = await signOffline({ userInfo: formData.value, auctionArtworkUuid: qrData.value.auctionArtworkUuid, signOrder: Number(number.value), }) if (res.status === 0) { window.location.href = res.data.fddVerifyUrl } } </script> <template> <div class="bg-#EBEBEB h-screen-nav flex flex-col"> <!-- 顶部提示信息 --> <div class="h-50px text-14px text-#191919 bg-#fff flex items-center px-21px mb-6px shrink-0"> {{ t('signature.tips.prePayment') }} </div> <!-- 协议列表折叠面板 --> <van-collapse accordion v-model="activeNames" class="grow-1" @change="handleCollapseChange" > <van-collapse-item v-for="item in protocolList" :key="item.id" :name="item.id" class="mb-6px" > <template #title> <div class="text-#2B53AC text-14px">{{ item.title }}</div> </template> <pdfView :pdf-name="item.pdfName" :type="item.type" :is-active="activeNames === item.id" /> </van-collapse-item> </van-collapse> <!-- 底部确认按钮 --> <div class="h-81px bg-#fff flex justify-center pt-7px border-t"> <van-button color="#2B53AC" class="w-213px van-btn-h-38px" @click="confirm" > {{ t('signature.action.agree') }} </van-button> </div> </div> </template>