yeg
2 天以前 d8eaa16682cf180e9563d6be05fb43057daf6c07
talent-card-admin/src/views/MerchantOnboardingDetailView.vue
@@ -1,11 +1,12 @@
<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)
@@ -101,6 +102,37 @@
  }
}
/**
 * 解绑(危险操作,二次确认)。只解除我方绑定,清理这条纳管产生的进件与结算卡记录,页面回到列表。
 *
 * 确认框里必须写清两件事:一是该商户号上还有在途订单或待结算资金时会**拒绝**(那是正在进行的对账,
 * 不能切断),二是解绑**不回退**通道侧的改动——微信口径、人才端绑定、延迟入账、实名都不是纳管改的。
 */
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>
@@ -121,6 +153,14 @@
      <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>
@@ -149,6 +189,17 @@
        <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>