| | |
| | | <script setup lang="ts"> |
| | | import { onMounted, ref } from 'vue' |
| | | import { useRoute } from 'vue-router' |
| | | import { getMerchantOnboardingDetail, refreshMerchantOnboarding, refreshMerchantPaymentCapability, submitMerchantRealname } from '../api/admin' |
| | | import { useRoute, useRouter } from 'vue-router' |
| | | import { getMerchantOnboardingDetail, refreshMerchantOnboarding, refreshMerchantPaymentCapability, submitMerchantRealname, unbindManagedOnboarding } from '../api/admin' |
| | | import { hasAdminPermission } from '../utils/permissions' |
| | | import { ElMessage } from 'element-plus' |
| | | import { ElMessage, ElMessageBox } from 'element-plus' |
| | | |
| | | const route = useRoute() |
| | | const router = useRouter() |
| | | const loading = ref(false) |
| | | const detail = ref<Record<string, any>>() |
| | | const syncing = ref(false) |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 解绑(危险操作,二次确认)。只解除我方绑定,清理这条纳管产生的进件与结算卡记录,页面回到列表。 |
| | | * |
| | | * 确认框里必须写清两件事:一是该商户号上还有在途订单或待结算资金时会**拒绝**(那是正在进行的对账, |
| | | * 不能切断),二是解绑**不回退**通道侧的改动——微信口径、人才端绑定、延迟入账、实名都不是纳管改的。 |
| | | */ |
| | | async function unbind() { |
| | | if (syncing.value) return |
| | | try { |
| | | await ElMessageBox.confirm( |
| | | '解绑只解除我方绑定,清理这条进件记录与它的结算卡记录,页面将回到列表。' |
| | | + '通道侧的改动(微信口径、人才端绑定、延迟入账、实名)不会被回退,商户可重新纳管。' |
| | | + '该商家名下还有在途订单或待结算资金时不能解绑。确认解绑?', |
| | | '解绑(危险操作)', |
| | | { type: 'warning', confirmButtonText: '确认解绑', cancelButtonText: '取消', confirmButtonClass: 'el-button--danger' }, |
| | | ) |
| | | } catch { |
| | | return |
| | | } |
| | | syncing.value = true |
| | | try { |
| | | await unbindManagedOnboarding(String(route.params.id)) |
| | | ElMessage.success('已解除绑定') |
| | | router.push({ name: 'merchant-settlement', query: { kind: 'onboardings' } }) |
| | | } catch (error: any) { |
| | | ElMessage.error(error?.message || '解绑失败,请稍后重试') |
| | | } finally { |
| | | syncing.value = false |
| | | } |
| | | } |
| | | |
| | | onMounted(load) |
| | | </script> |
| | | |
| | |
| | | |
| | | <h3 class="onboarding-heading">进件信息</h3> |
| | | <div class="detail-grid"> |
| | | <div class="detail-field"> |
| | | <span>进件来源</span> |
| | | <strong> |
| | | <el-tag :type="detail.source === 'managed' ? 'success' : 'info'" effect="plain" size="small"> |
| | | {{ detail.source === 'managed' ? '纳管(外部进件商户)' : '自助进件' }} |
| | | </el-tag> |
| | | </strong> |
| | | </div> |
| | | <div class="detail-field"><span>进件编号</span><strong>{{ text(detail.applicationNo) }}</strong></div> |
| | | <div class="detail-field"><span>申请时间</span><strong>{{ dateTimeText(detail.createdAt) }}</strong></div> |
| | | <div class="detail-field"><span>商户编号</span><strong>{{ text(detail.merchantId) }}</strong></div> |
| | |
| | | <el-button v-if="hasAdminPermission('admin.merchant-settlement.edit') && detail.progress.retryable" :disabled="syncing" @click="refreshProgress(true)">重试失败步骤</el-button> |
| | | <el-button v-if="hasAdminPermission('admin.merchant-settlement.edit')" :disabled="syncing" @click="refreshChannelStatus()">查询通道状态</el-button> |
| | | <el-button v-if="hasAdminPermission('admin.merchant-settlement.edit') && realnameActionable()" :disabled="syncing" @click="startRealname()">{{ realnameStage()?.status === 'failed' ? '重新发起微信实名' : '发起微信实名' }}</el-button> |
| | | <!-- 解绑只对纳管产生的记录开放:自助进件那条记录里是商户自己提交的资料,删掉它是另一个性质的操作。 |
| | | 危险操作,二次确认,确认前说明在途订单与待结算资金的拦截条件。 --> |
| | | <el-button |
| | | v-if="hasAdminPermission('admin.merchant-settlement.edit') && detail.source === 'managed'" |
| | | type="danger" |
| | | plain |
| | | :disabled="syncing" |
| | | @click="unbind()" |
| | | > |
| | | 解绑 |
| | | </el-button> |
| | | </section> |
| | | |
| | | <h3 class="onboarding-heading">商户进件</h3> |