This commit is contained in:
2025-12-25 12:57:40 +08:00
parent d34ce070c1
commit c739f64507
22 changed files with 2006 additions and 254 deletions

View File

@@ -596,7 +596,7 @@ watch([reportData, componentRiskScores], () => {
</a> </a>
</div> </div>
</div> </div>
<div>海南天远大数据科技有限公司版权所有</div> <div>海南海宇大数据有限公司版权所有</div>
</div> </div>
</template> </template>

View File

@@ -78,30 +78,20 @@ export const formatDate = dateStr => {
return dateStr // 如果不是标准格式则返回原始字符串 return dateStr // 如果不是标准格式则返回原始字符串
} }
// 格式化金额显示(单位:万元) // 格式化金额显示
export const formatLawsuitMoney = money => { export const formatLawsuitMoney = money => {
if (!money) return '—' if (!money) return "—";
const value = parseFloat(money) const value = parseFloat(money);
if (isNaN(value)) return '—' if (isNaN(value)) return "—";
// 超过1亿显示亿元 // 直接显示原始金额(元)
if (value >= 10000) {
return (
(value / 10000).toLocaleString('zh-CN', {
minimumFractionDigits: 0,
maximumFractionDigits: 2,
}) + ' 亿元'
)
}
// 否则显示万元
return ( return (
value.toLocaleString('zh-CN', { value.toLocaleString("zh-CN", {
minimumFractionDigits: 0, minimumFractionDigits: 0,
maximumFractionDigits: 2, maximumFractionDigits: 2,
}) + ' 万元' }) + " 元"
) );
} }
// 获取案件状态样式 // 获取案件状态样式

View File

@@ -1162,29 +1162,19 @@ const getLawsuitStats = (company) => {
return stats; return stats;
}; };
// 格式化金额显示(单位:万元) // 格式化金额显示
const formatLawsuitMoney = (money) => { const formatLawsuitMoney = (money) => {
if (!money) return "—"; if (!money) return "—";
const value = parseFloat(money); const value = parseFloat(money);
if (isNaN(value)) return "—"; if (isNaN(value)) return "—";
// 超过1亿显示亿元 // 直接显示原始金额(元)
if (value >= 10000) {
return (
(value / 10000).toLocaleString("zh-CN", {
minimumFractionDigits: 0,
maximumFractionDigits: 2,
}) + " 亿元"
);
}
// 否则显示万元
return ( return (
value.toLocaleString("zh-CN", { value.toLocaleString("zh-CN", {
minimumFractionDigits: 0, minimumFractionDigits: 0,
maximumFractionDigits: 2, maximumFractionDigits: 2,
}) + " 元" }) + " 元"
); );
}; };

View File

@@ -207,7 +207,7 @@ const h5WeixinGetCode = () => {
<template> <template>
<RouterView /> <RouterView />
<!-- <WechatOverlay /> --> <WechatOverlay />
<BindPhoneDialog /> <BindPhoneDialog />
</template> </template>

View File

@@ -5,7 +5,7 @@
<!-- 授权书滚动区域 --> <!-- 授权书滚动区域 -->
<div class="card flex-1 overflow-y-auto" ref="agreementBox" @scroll="handleScroll"> <div class="card flex-1 overflow-y-auto" ref="agreementBox" @scroll="handleScroll">
<p class="my-2">海南天远大数据科技有限公司</p> <p class="my-2">海南海宇大数据有限公司</p>
<p class="indent-[2em]"> <p class="indent-[2em]">
本人<span class="font-bold"> 本人<span class="font-bold">
{{ signature ? props.name : "____________" }}</span> {{ signature ? props.name : "____________" }}</span>
@@ -64,10 +64,10 @@
本人有权随时撤回本授权书中的授权但撤回前的授权行为及其法律后果仍具有法律效力若需撤回授权本人可通过贵司官方渠道提交书面申请贵司将在收到申请后依法停止对本人数据的使用 本人有权随时撤回本授权书中的授权但撤回前的授权行为及其法律后果仍具有法律效力若需撤回授权本人可通过贵司官方渠道提交书面申请贵司将在收到申请后依法停止对本人数据的使用
</li> </li>
<li> <li>
你通过天远数据自愿支付相应费用用于购买海南天远大数据科技有限公司的大数据报告产品如若对产品内容存在异议可通过邮箱admin@iieeii.com或APP联系客服按钮进行反馈贵司将在收到异议之日起20日内进行核查和处理并将结果答复 你通过天远数据自愿支付相应费用用于购买海南海宇大数据有限公司的大数据报告产品如若对产品内容存在异议可通过邮箱admin@iieeii.com或APP联系客服按钮进行反馈贵司将在收到异议之日起20日内进行核查和处理并将结果答复
</li> </li>
<li> <li>
你向海南天远大数据科技有限公司的支付方式为海南天远大数据科技有限公司及其经官方授权的相关企业的支付宝账户 你向海南海宇大数据有限公司的支付方式为海南海宇大数据有限公司及其经官方授权的相关企业的支付宝账户
</li> </li>
</ul> </ul>
<p class="mt-2 font-bold">争议解决机制</p> <p class="mt-2 font-bold">争议解决机制</p>

View File

@@ -263,7 +263,13 @@ const featureMap = {
name: "违约失信", name: "违约失信",
component: defineAsyncComponent(() => import("@/ui/CFLXG3D56.vue")), component: defineAsyncComponent(() => import("@/ui/CFLXG3D56.vue")),
}, },
FLXG7E8F: {
name: "司法涉诉",
component: defineAsyncComponent(() =>
import("@/ui/FLXG7E8F/index.vue")
),
remark: '司法涉诉风险展示申请人相关的诉讼情况,包括民事诉讼、刑事诉讼、行政诉讼、执行案件、失信被执行人、限制消费等。数据来源于各级法院的公开判决书和法官网等权威渠道。'
},
FLXG0V4B: { FLXG0V4B: {
name: "司法涉诉", name: "司法涉诉",
component: defineAsyncComponent(() => component: defineAsyncComponent(() =>
@@ -567,6 +573,7 @@ const maskValue = computed(() => {
const featureRiskLevels = { const featureRiskLevels = {
// 🔴 高风险类 - 权重 10 // 🔴 高风险类 - 权重 10
'FLXG0V4B': 20, // 司法涉诉 'FLXG0V4B': 20, // 司法涉诉
'FLXG7E8F': 20, // 司法涉诉
'FLXG3D56': 10, // 违约失信 'FLXG3D56': 10, // 违约失信
'JRZQ4AA8': 10, // 还款压力 'JRZQ4AA8': 10, // 还款压力
@@ -575,7 +582,6 @@ const featureRiskLevels = {
'JRZQ8203': 7, // 借贷行为记录 'JRZQ8203': 7, // 借贷行为记录
'JRZQ4B6C': 7, // 信贷表现 'JRZQ4B6C': 7, // 信贷表现
'BehaviorRiskScan': 7, // 风险行为扫描 'BehaviorRiskScan': 7, // 风险行为扫描
// 🟡 中风险类 - 权重 5 // 🟡 中风险类 - 权重 5
'QYGL3F8E': 5, // 人企关系加强版 'QYGL3F8E': 5, // 人企关系加强版
'QCXG7A2B': 5, // 名下车辆 'QCXG7A2B': 5, // 名下车辆
@@ -831,7 +837,7 @@ watch([reportData, componentRiskScores], () => {
</a> </a>
</div> </div>
</div> </div>
<div>海南天远大数据科技有限公司版权所有</div> <div>海南海宇大数据有限公司版权所有</div>
</div> </div>
</template> </template>

View File

@@ -36,7 +36,7 @@
</a> </a>
</div> </div>
</div> </div>
<div>海南天远大数据科技有限公司版权所有</div> <div>海南海宇大数据有限公司版权所有</div>
</div> </div>
</div> </div>
</template> </template>

View File

@@ -78,30 +78,20 @@ export const formatDate = dateStr => {
return dateStr // 如果不是标准格式则返回原始字符串 return dateStr // 如果不是标准格式则返回原始字符串
} }
// 格式化金额显示(单位:万元) // 格式化金额显示
export const formatLawsuitMoney = money => { export const formatLawsuitMoney = money => {
if (!money) return '—' if (!money) return "—";
const value = parseFloat(money) const value = parseFloat(money);
if (isNaN(value)) return '—' if (isNaN(value)) return "—";
// 超过1亿显示亿元 // 直接显示原始金额(元)
if (value >= 10000) {
return (
(value / 10000).toLocaleString('zh-CN', {
minimumFractionDigits: 0,
maximumFractionDigits: 2,
}) + ' 亿元'
)
}
// 否则显示万元
return ( return (
value.toLocaleString('zh-CN', { value.toLocaleString("zh-CN", {
minimumFractionDigits: 0, minimumFractionDigits: 0,
maximumFractionDigits: 2, maximumFractionDigits: 2,
}) + ' 万元' }) + " 元"
) );
} }
// 获取案件状态样式 // 获取案件状态样式

View File

@@ -1162,29 +1162,19 @@ const getLawsuitStats = (company) => {
return stats; return stats;
}; };
// 格式化金额显示(单位:万元) // 格式化金额显示
const formatLawsuitMoney = (money) => { const formatLawsuitMoney = (money) => {
if (!money) return "—"; if (!money) return "—";
const value = parseFloat(money); const value = parseFloat(money);
if (isNaN(value)) return "—"; if (isNaN(value)) return "—";
// 超过1亿显示亿元 // 直接显示原始金额(元)
if (value >= 10000) {
return (
(value / 10000).toLocaleString("zh-CN", {
minimumFractionDigits: 0,
maximumFractionDigits: 2,
}) + " 亿元"
);
}
// 否则显示万元
return ( return (
value.toLocaleString("zh-CN", { value.toLocaleString("zh-CN", {
minimumFractionDigits: 0, minimumFractionDigits: 0,
maximumFractionDigits: 2, maximumFractionDigits: 2,
}) + " 元" }) + " 元"
); );
}; };

View File

@@ -0,0 +1,404 @@
<template>
<div class="px-4 pb-4">
<div class="grid grid-cols-[max-content_1fr] gap-x-2 gap-y-3">
<!-- 经办法院/执行法院 -->
<span class="text-base text-[#666666]">{{ isSpecialCase ? '执行法院' : '经办法院' }}</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.n_jbfy || caseData.executiveCourt || "—" }}</span>
<!-- 所属地域 -->
<span class="text-base text-[#666666]">所属地域</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.c_ssdy || caseData.province || "—" }}</span>
<!-- 案件类型 -->
<template v-if="caseData.n_ajlx">
<span class="text-base text-[#666666]">案件类型</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.n_ajlx || "—" }}</span>
</template>
<!-- 案号 -->
<template v-if="caseData.c_ah">
<span class="text-base text-[#666666]">案号</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.c_ah || "—" }}</span>
</template>
<!-- 原审案号 -->
<template v-if="caseData.c_ah_ys">
<span class="text-base text-[#666666]">原审案号</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.c_ah_ys || "—" }}</span>
</template>
<!-- 后续案号 -->
<template v-if="caseData.c_ah_hx">
<span class="text-base text-[#666666]">后续案号</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.c_ah_hx || "—" }}</span>
</template>
<!-- 立案时间 -->
<template v-if="caseData.d_larq || caseData.fileDate || caseData.larq">
<span class="text-base text-[#666666]">立案时间</span>
<span class="text-base font-medium text-[#333333]">{{ formatDate(caseData.d_larq || caseData.fileDate || caseData.larq) }}</span>
</template>
<!-- 立案案由 -->
<template v-if="caseData.n_laay_tree || caseData.n_laay">
<span class="text-base text-[#666666]">立案案由</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.n_laay_tree || caseData.n_laay || "暂无" }}</span>
</template>
<!-- 立案案由标签 -->
<template v-if="caseData.n_laay_tag">
<span class="text-base text-[#666666]">立案案由标签</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.n_laay_tag || "—" }}</span>
</template>
<!-- 当事人信息 -->
<template v-if="caseData.c_dsrxx && caseData.c_dsrxx.length > 0">
<span class="text-base text-[#666666]">当事人信息</span>
<span class="text-base font-medium text-[#333333]">
<span v-for="(party, partyIndex) in caseData.c_dsrxx" :key="partyIndex">
{{ party.n_ssdw || "其他" }}: {{ party.c_mc }}<span v-if="partyIndex < caseData.c_dsrxx.length - 1">; </span>
</span>
</span>
</template>
<!-- 失信被执行人特有字段 -->
<template v-if="caseType === 'breachCase'">
<!-- 案号 -->
<template v-if="caseData.caseNumber">
<span class="text-base text-[#666666]">案号</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.caseNumber || "—" }}</span>
</template>
<!-- 发布日期 -->
<template v-if="caseData.issueDate">
<span class="text-base text-[#666666]">发布日期</span>
<span class="text-base font-medium text-[#333333]">{{ formatDate(caseData.issueDate) }}</span>
</template>
<!-- 性别 -->
<template v-if="caseData.sex">
<span class="text-base text-[#666666]">性别</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.sex || "—" }}</span>
</template>
<!-- 履行情况 -->
<template v-if="caseData.fulfillStatus">
<span class="text-base text-[#666666]">履行情况</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.fulfillStatus || "—" }}</span>
</template>
<!-- 判决金额估计 -->
<template v-if="caseData.estimatedJudgementAmount">
<span class="text-base text-[#666666]">判决金额估计</span>
<span class="text-base font-medium text-[#333333]">{{ formatLawsuitMoney(caseData.estimatedJudgementAmount) || "—" }}</span>
</template>
<!-- 失信被执行人行为具体情形 -->
<template v-if="caseData.concreteDetails">
<span class="text-base text-[#666666]">行为具体情形</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.concreteDetails || "—" }}</span>
</template>
<!-- 生效法律文书确定的义务 -->
<template v-if="caseData.obligation">
<span class="text-base text-[#666666]">生效法律文书确定的义务</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.obligation || "—" }}</span>
</template>
<!-- 执行依据单位 -->
<template v-if="caseData.enforcementBasisOrganization">
<span class="text-base text-[#666666]">执行依据单位</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.enforcementBasisOrganization || "—" }}</span>
</template>
<!-- 执行依据文号 -->
<template v-if="caseData.enforcementBasisNumber">
<span class="text-base text-[#666666]">执行依据文号</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.enforcementBasisNumber || "—" }}</span>
</template>
</template>
<!-- 限制消费被执行人特有字段 -->
<template v-if="caseType === 'consumptionRestriction'">
<!-- 案件编号 -->
<template v-if="caseData.caseNumber">
<span class="text-base text-[#666666]">案件编号</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.caseNumber || "—" }}</span>
</template>
<!-- 发布日期 -->
<template v-if="caseData.issueDate">
<span class="text-base text-[#666666]">发布日期</span>
<span class="text-base font-medium text-[#333333]">{{ formatDate(caseData.issueDate) }}</span>
</template>
<!-- 立案时间 -->
<template v-if="caseData.fileDate">
<span class="text-base text-[#666666]">立案时间</span>
<span class="text-base font-medium text-[#333333]">{{ formatDate(caseData.fileDate) }}</span>
</template>
</template>
<!-- 刑事案件特有字段 -->
<template v-if="caseType === 'criminal'">
<!-- 定罪罪名 -->
<template v-if="caseData.n_dzzm">
<span class="text-base text-[#666666]">定罪罪名</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.n_dzzm || "—" }}</span>
</template>
<!-- 定罪罪名详细 -->
<template v-if="caseData.n_dzzm_tree">
<span class="text-base text-[#666666]">定罪罪名详细</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.n_dzzm_tree || "—" }}</span>
</template>
<!-- 判处结果 -->
<template v-if="caseData.n_pcjg">
<span class="text-base text-[#666666]">判处结果</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.n_pcjg || "—" }}</span>
</template>
<!-- 犯罪金额 -->
<template v-if="caseData.n_fzje">
<span class="text-base text-[#666666]">犯罪金额</span>
<span class="text-base font-medium text-[#333333]">{{ formatLawsuitMoney(caseData.n_fzje) || "—" }}</span>
</template>
<!-- 被请求赔偿金额 -->
<template v-if="caseData.n_bqqpcje">
<span class="text-base text-[#666666]">被请求赔偿金额</span>
<span class="text-base font-medium text-[#333333]">{{ formatLawsuitMoney(caseData.n_bqqpcje) || "—" }}</span>
</template>
<!-- 财产刑执行金额 -->
<template v-if="caseData.n_ccxzxje">
<span class="text-base text-[#666666]">财产刑执行金额</span>
<span class="text-base font-medium text-[#333333]">{{ formatLawsuitMoney(caseData.n_ccxzxje) || "—" }}</span>
</template>
<!-- 财产刑执行金额估计 -->
<template v-if="caseData.n_ccxzxje_gj">
<span class="text-base text-[#666666]">财产刑执行金额估计</span>
<span class="text-base font-medium text-[#333333]">{{ formatLawsuitMoney(caseData.n_ccxzxje_gj) || "—" }}</span>
</template>
<!-- 判处赔偿金额 -->
<template v-if="caseData.n_pcpcje">
<span class="text-base text-[#666666]">判处赔偿金额</span>
<span class="text-base font-medium text-[#333333]">{{ formatLawsuitMoney(caseData.n_pcpcje) || "—" }}</span>
</template>
<!-- 判处赔偿金额估计 -->
<template v-if="caseData.n_pcpcje_gj">
<span class="text-base text-[#666666]">判处赔偿金额估计</span>
<span class="text-base font-medium text-[#333333]">{{ formatLawsuitMoney(caseData.n_pcpcje_gj) || "—" }}</span>
</template>
<!-- 被请求赔偿金额估计 -->
<template v-if="caseData.n_bqqpcje_gj">
<span class="text-base text-[#666666]">被请求赔偿金额估计</span>
<span class="text-base font-medium text-[#333333]">{{ formatLawsuitMoney(caseData.n_bqqpcje_gj) || "—" }}</span>
</template>
</template>
<!-- 执行案件特有字段 -->
<template v-if="caseType === 'implement'">
<!-- 申请执行标的金额 -->
<template v-if="caseData.n_sqzxbdje">
<span class="text-base text-[#666666]">申请执行标的金额</span>
<span class="text-base font-medium text-[#333333]">{{ formatLawsuitMoney(caseData.n_sqzxbdje) || "—" }}</span>
</template>
<!-- 实际到位金额 -->
<template v-if="caseData.n_sjdwje !== undefined">
<span class="text-base text-[#666666]">实际到位金额</span>
<span class="text-base font-medium text-[#333333]">{{ formatLawsuitMoney(caseData.n_sjdwje) || "—" }}</span>
</template>
<!-- 未执行金额 -->
<template v-if="caseData.n_wzxje !== undefined">
<span class="text-base text-[#666666]">未执行金额</span>
<span class="text-base font-medium text-[#333333]">{{ formatLawsuitMoney(caseData.n_wzxje) || "—" }}</span>
</template>
<!-- 相关案件号 -->
<template v-if="caseData.c_gkws_glah">
<span class="text-base text-[#666666]">相关案件号</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.c_gkws_glah || "—" }}</span>
</template>
</template>
<!-- 非诉保全审查案件特有字段 -->
<template v-if="caseType === 'preservation'">
<!-- 申请保全数额 -->
<template v-if="caseData.n_sqbqse">
<span class="text-base text-[#666666]">申请保全数额</span>
<span class="text-base font-medium text-[#333333]">{{ formatLawsuitMoney(caseData.n_sqbqse) || "—" }}</span>
</template>
<!-- 申请保全标的物 -->
<template v-if="caseData.c_sqbqbdw">
<span class="text-base text-[#666666]">申请保全标的物</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.c_sqbqbdw || "—" }}</span>
</template>
</template>
<!-- 案件通用字段 -->
<!-- 诉讼地位 -->
<template v-if="caseData.n_ssdw">
<span class="text-base text-[#666666]">诉讼地位</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.n_ssdw || "—" }}</span>
</template>
<!-- 一审诉讼地位 -->
<template v-if="caseData.n_ssdw_ys">
<span class="text-base text-[#666666]">一审诉讼地位</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.n_ssdw_ys || "—" }}</span>
</template>
<!-- 案件进展阶段 -->
<template v-if="caseData.n_ajjzjd">
<span class="text-base text-[#666666]">案件进展阶段</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.n_ajjzjd || "—" }}</span>
</template>
<!-- 审理程序 -->
<template v-if="caseData.n_slcx">
<span class="text-base text-[#666666]">审理程序</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.n_slcx || "—" }}</span>
</template>
<!-- 法院所属层级 -->
<template v-if="caseData.n_jbfy_cj">
<span class="text-base text-[#666666]">法院所属层级</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.n_jbfy_cj || "—" }}</span>
</template>
<!-- 起诉标的金额 -->
<template v-if="caseData.n_qsbdje">
<span class="text-base text-[#666666]">起诉标的金额</span>
<span class="text-base font-medium text-[#333333]">{{ formatLawsuitMoney(caseData.n_qsbdje) || "—" }}</span>
</template>
<!-- 起诉标的金额估计 -->
<template v-if="caseData.n_qsbdje_gj">
<span class="text-base text-[#666666]">起诉标的金额估计</span>
<span class="text-base font-medium text-[#333333]">{{ formatLawsuitMoney(caseData.n_qsbdje_gj) || "—" }}</span>
</template>
<!-- 结案标的金额 -->
<template v-if="caseData.n_jabdje">
<span class="text-base text-[#666666]">结案标的金额</span>
<span class="text-base font-medium text-[#333333]">{{ formatLawsuitMoney(caseData.n_jabdje) || "—" }}</span>
</template>
<!-- 结案标的金额估计 -->
<template v-if="caseData.n_jabdje_gj">
<span class="text-base text-[#666666]">结案标的金额估计</span>
<span class="text-base font-medium text-[#333333]">{{ formatLawsuitMoney(caseData.n_jabdje_gj) || "—" }}</span>
</template>
<!-- 结案案由 -->
<template v-if="caseData.n_jaay_tree || caseData.n_jaay">
<span class="text-base text-[#666666]">结案案由</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.n_jaay_tree || caseData.n_jaay || "—" }}</span>
</template>
<!-- 结案案由标签 -->
<template v-if="caseData.n_jaay_tag">
<span class="text-base text-[#666666]">结案案由标签</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.n_jaay_tag || "—" }}</span>
</template>
<!-- 结案方式 -->
<template v-if="caseData.n_jafs">
<span class="text-base text-[#666666]">结案方式</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.n_jafs || "—" }}</span>
</template>
<!-- 结案时间 -->
<template v-if="caseData.d_jarq">
<span class="text-base text-[#666666]">结案时间</span>
<span class="text-base font-medium text-[#333333]">{{ formatDate(caseData.d_jarq) }}</span>
</template>
<!-- 胜诉估计 -->
<template v-if="caseData.n_pj_victory">
<span class="text-base text-[#666666]">胜诉估计</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.n_pj_victory || "—" }}</span>
</template>
<!-- 公开文书ID -->
<template v-if="caseData.c_gkws_id">
<span class="text-base text-[#666666]">公开文书ID</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.c_gkws_id || "—" }}</span>
</template>
<!-- 相关当事人 -->
<template v-if="caseData.c_gkws_dsr">
<span class="text-base text-[#666666]">相关当事人</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.c_gkws_dsr || "—" }}</span>
</template>
<!-- 判决结果 -->
<template v-if="caseData.c_gkws_pjjg">
<span class="text-base text-[#666666]">判决结果</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.c_gkws_pjjg || "—" }}</span>
</template>
<!-- 审理方式信息 -->
<template v-if="caseData.c_slfsxx">
<span class="text-base text-[#666666]">审理方式信息</span>
<span class="text-base font-medium text-[#333333]">{{ caseData.c_slfsxx || "—" }}</span>
</template>
<!-- 后续案件信息 -->
<template v-if="caseData.next">
<span class="text-base text-[#666666]">后续案件</span>
<span class="text-base font-medium text-[#333333]">
{{ caseData.next.c_ah }}
<span v-if="caseData.next.stage_type" class="ml-2 text-sm px-2 py-0.5 rounded bg-[#EB3C3C1A] text-[#EB3C3C]">
{{
caseData.next.stage_type === 2
? "二审"
: caseData.next.stage_type === 3
? "再审"
: caseData.next.stage_type === 4
? "申请再审"
: caseData.next.stage_type === 5
? "执行"
: "其他"
}}
</span>
</span>
</template>
</div>
</div>
</template>
<script setup>
import { computed } from 'vue'
import { formatDate, formatLawsuitMoney } from '../utils/lawsuitUtils.js'
const props = defineProps({
caseData: {
type: Object,
required: true
},
typeColor: {
type: String,
default: 'text-blue-600 bg-blue-50'
},
caseType: {
type: String,
required: true
}
})
// 判断是否为特殊案件类型(失信被执行人、限高被执行人)
const isSpecialCase = computed(() => {
return props.caseType === 'breachCase' || props.caseType === 'consumptionRestriction'
})
</script>

View File

@@ -0,0 +1,285 @@
<template>
<div class="">
<!-- 概览标题 -->
<div class="p-4">
<!-- 添加风险概览总结 -->
<div class="p-4 rounded-lg" :class="getRiskOverviewClass()">
<div class="flex items-center">
<div class="w-12 h-12 mr-3 flex-shrink-0">
<img :src="getRiskIcon()" alt="风险" class="w-12 h-12 object-contain" />
</div>
<div class=" text-gray-700">
{{ totalCases }}
起涉诉案件中
<span v-if="stats.highRiskItems > 0" class="text-orange-600 font-medium">
{{ stats.highRiskItems }}
</span>
<span v-else class="text-green-600 font-medium">0</span>
起高风险案件
<span v-if="stats.caseTypes.length > 0" class="ml-1">
涉及 {{ stats.caseTypes.length }} 种案件类型
</span>
</div>
</div>
</div>
</div>
<!-- 主要风险指标 -->
<div class="grid grid-cols-2 gap-3 p-4">
<!-- 风险事项卡片 -->
<div class="p-4 bg-[#EB3C3C1A] border border-[#EB3C3C4D] rounded-xl text-center">
<div class="text-2xl font-bold text-[#EB3C3C] mb-1">{{ stats.totalRiskItems || 0 }}</div>
<div class="text-sm font-medium text-gray-800 mb-1">风险事项</div>
<div class="text-sm text-gray-500">
平均{{ stats.totalRiskItems && totalCases > 0 ?
(stats.totalRiskItems / totalCases).toFixed(1) :
'0.0'
}}/案件
</div>
</div>
<!-- 高风险案件卡片 -->
<div class="p-4 bg-[#EB3C3C1A] border border-[#EB3C3C4D] rounded-xl text-center">
<div class="text-2xl font-bold text-[#EB3C3C] mb-1">{{ stats.highRiskItems || 0 }}</div>
<div class="text-sm font-medium text-gray-800 mb-1">高风险案件</div>
<div class="text-sm text-gray-500 mb-1">
占比{{ totalCases > 0 && stats ?
((stats.highRiskItems /
totalCases) * 100).toFixed(1) : '0.0' }}%
</div>
<div class="text-sm text-orange-600">
<span class="mr-3">失信{{ stats.breachCaseCount || 0 }}</span>
<span style="color: #D6943E;">限高{{ stats.consumptionRestrictionCount || 0 }}</span>
</div>
</div>
<!-- 已结案件卡片 -->
<div class="p-4 bg-[#2B79EE1A] border border-[#2B79EE4D] rounded-xl text-center">
<div class="text-2xl font-bold text-[#2B79EE] mb-1">{{ stats.closedCases || 0 }}</div>
<div class="text-sm font-medium text-gray-800 mb-1">已结案件</div>
<div class="text-sm text-gray-500">
占比{{ totalCases > 0 && stats ?
Math.round((stats.closedCases / totalCases) * 100) :
0
}}%
</div>
</div>
<!-- 案件类型卡片 -->
<div class="p-4 bg-[#2B79EE1A] border border-[#2B79EE4D] rounded-xl text-center">
<div class="text-2xl font-bold text-[#2B79EE] mb-1">{{ stats.caseTypes.length || 0 }}</div>
<div class="text-sm font-medium text-gray-800 mb-1">案件类型</div>
<div class="text-sm text-gray-500">
涉及多种类型
</div>
</div>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 mb-6">
<!-- 案件类型分布 -->
<LTitle title="案件类型分布" />
<div class="h-[300px] px-4">
<v-chart :option="caseTypeChartOption" autoresize />
</div>
<!-- 风险等级分布 -->
<LTitle title="风险等级分布" />
<div class="bg-[#F9ECEC] border border-[#F0CACA] rounded-xl mx-4 p-4">
<div class="grid grid-cols-3 gap-4 text-center">
<!-- 高风险案件 -->
<div>
<div class="text-sm text-gray-600 mb-1">高风险案件</div>
<div class="text-xl font-bold text-[#EB3C3C]">{{ stats.highRiskItems || 0 }}</div>
</div>
<!-- 中风险案件 -->
<div>
<div class="text-sm text-gray-600 mb-1">中风险案件</div>
<div class="text-xl font-bold text-[#EB3C3C]">{{ stats.mediumRiskItems || 0 }}</div>
</div>
<!-- 低风险案件 -->
<div>
<div class="text-sm text-gray-600 mb-1">低风险案件</div>
<div class="text-xl font-bold text-[#D6943E]">{{ stats.lowRiskItems || 0 }}</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup>
import { computed } from 'vue'
import { use } from 'echarts/core'
import { CanvasRenderer } from 'echarts/renderers'
import { BarChart } from 'echarts/charts'
import { GridComponent, TooltipComponent, TitleComponent, LegendComponent } from 'echarts/components'
import VChart from 'vue-echarts'
import LTitle from '@/components/LTitle.vue'
import { lawsuitTypeMap, getCaseTypeText, getCaseTypeDarkColor } from '../utils/lawsuitUtils.js'
// 注册必须的组件
use([CanvasRenderer, BarChart, GridComponent, TooltipComponent, TitleComponent, LegendComponent])
const props = defineProps({
stats: {
type: Object,
required: true,
},
totalCases: {
type: Number,
required: true,
},
})
// 案件类型分布横向柱状图配置
const caseTypeChartOption = computed(() => {
// 获取所有可能的案件类型,确保即使没有数据的类型也会显示
const allCaseTypes = Object.keys(lawsuitTypeMap).map(key => ({
type: key,
name: lawsuitTypeMap[key].text,
color: lawsuitTypeMap[key].color,
darkColor: lawsuitTypeMap[key].darkColor,
count: 0, // 默认为0
}))
// 如果有统计数据,更新数量
if (props.stats && props.stats.caseTypes && props.stats.caseTypes.length > 0) {
// 用实际数据更新默认值
props.stats.caseTypes.forEach(item => {
const existingType = allCaseTypes.find(type => type.type === item.type)
if (existingType) {
existingType.count = item.count
}
})
} else {
// 如果没有任何数据,显示暂无数据的信息
return {
title: {
text: '暂无数据',
left: 'center',
top: 'center',
textStyle: {
fontSize: 14,
fontWeight: 'normal',
color: '#aaa',
},
},
}
}
// 准备横向柱状图数据 - 不过滤,显示所有类型
const categories = allCaseTypes.map(item => item.name)
const values = allCaseTypes.map(item => item.count)
return {
tooltip: {
trigger: 'axis',
formatter: function (params) {
const dataIndex = params[0].dataIndex
return `${categories[dataIndex]}: ${values[dataIndex]}`
},
},
grid: {
left: '0%',
right: '5%',
bottom: '5%',
top: '5%',
containLabel: true,
},
xAxis: {
type: 'value',
min: 0,
max: function (value) {
// 如果最大值是0设置一个最小值让柱子能显示
return Math.max(value.max, 1)
},
splitLine: {
lineStyle: {
type: 'dashed',
color: '#f0f0f0',
},
},
axisLabel: {
fontSize: 12,
color: '#666',
},
axisLine: {
lineStyle: {
color: '#ddd',
},
},
},
yAxis: {
type: 'category',
data: categories,
axisLabel: {
fontSize: 12,
color: '#666',
},
axisLine: {
lineStyle: {
color: '#ddd',
},
},
axisTick: {
show: false,
},
},
series: [
{
name: '案件数量',
type: 'bar',
barWidth: '30%',
data: values.map((value) => {
return {
value: value === 0 ? 0.1 : value, // 0值显示为0.1,让柱子能显示一个小尖尖
itemStyle: {
color: '#5d7eeb',
borderRadius: [0, 4, 4, 0],
},
}
}),
label: {
show: true,
position: 'right',
fontSize: 12,
color: '#666',
formatter: function (params) {
// 如果是0.1实际为0显示为0
return params.value === 0.1 ? '0' : params.value
},
},
},
],
}
})
// 获取风险概览样式
const getRiskOverviewClass = () => {
// 有高风险案件 - 红色警告
if (props.stats.highRiskItems > 0) {
return 'bg-[#F9ECEC] border border-[#F0CACA]'
}
// 有案件但无高风险 - 黄色警示
if (props.totalCases > 0) {
return 'bg-[#FFF8E1] border border-[#FFE082]'
}
// 无案件 - 绿色正常
return 'bg-[#ECF9EF] border border-[#CAECD3]'
}
// 获取风险图标
const getRiskIcon = () => {
// 有高风险案件 - 高风险图标
if (props.stats.highRiskItems > 0) {
return new URL('@/assets/images/report/gfx.png', import.meta.url).href
}
// 有案件但无高风险 - 中风险图标
if (props.totalCases > 0) {
return new URL('@/assets/images/report/zfx.png', import.meta.url).href
}
// 无案件 - 正常图标
return new URL('@/assets/images/report/zq.png', import.meta.url).href
}
</script>

457
src/ui/FLXG7E8F/index.vue Normal file
View File

@@ -0,0 +1,457 @@
<template>
<div class="card shadow-sm rounded-xl overflow-hidden p-4">
<div class="border border-[#EEEEEE] rounded-xl">
<!-- 标题 -->
<div class="flex items-center mb-3 p-4">
<div class="w-8 h-8 flex items-center justify-center mr-2">
<img src="@/assets/images/report/ssfxfx.png" alt="个人涉诉风险" class="w-8 h-8 object-contain" />
</div>
<span class="font-bold text-gray-800">个人涉诉风险分析</span>
</div>
<LTitle title="涉诉风险整体概览" />
<!-- 全局风险概览面板 -->
<StatisticsOverview class="" v-if="totalCases > 0 && lawsuitStats" :stats="lawsuitStats"
:total-cases="totalCases" />
<!-- 案件类型筛选tab -->
<div v-if="totalCases > 0" class="p-4">
<van-tabs v-model:active="activeCaseTypeFilter" line-width="30px" swipeable class="lawsuit-tabs">
<!-- 全部风险 -->
<van-tab name="all">
<template #title>
<div class="flex items-center gap-1">
<span>全部风险</span>
<span>({{ caseTypeCounts.all }})</span>
</div>
</template>
</van-tab>
<!-- 各类型案件 - 使用v-for渲染 -->
<van-tab v-for="(typeInfo, type) in lawsuitTypeMap" :key="type" :name="type">
<template #title>
<div class="flex items-center gap-1">
<span>{{ typeInfo.text }}({{ caseTypeCounts[type] || 0 }})</span>
</div>
</template>
<div v-if="filteredCases.length === 0" class="p-8 text-center text-gray-500">
<div class="flex flex-col items-center justify-center">
<van-empty :description="`暂无${typeInfo.text}记录`" />
</div>
</div>
</van-tab>
</van-tabs>
</div>
<!-- 案件列表 -->
<div v-if="filteredCases.length > 0" class="space-y-3 px-4 mb-4">
<div v-for="(caseItem, index) in filteredCases" :key="index" class="case-wrapper">
<!-- 案件卡片 - 可点击展开 -->
<div class="bg-white rounded-xl overflow-hidden border px-4 pt-3 border-[#DDDDDD]">
<div class="cursor-pointer relative" @click="toggleCaseExpand(caseItem.id || index, 'case', index)">
<!-- 顶部区域案件标题和案件类型 -->
<div class=" flex items-center">
<!-- 案件标题 -->
<div class="font-bold text-base text-[#333333] mr-2">{{ caseItem.c_ah || caseItem.caseNumber || '暂无案号' }}</div>
<!-- 案件类型标签 -->
<span class="px-2 py-1 text-sm rounded-md font-medium bg-[#F9ECEC] text-[#EB3C3C]">
{{ getCaseTypeText(caseItem.type) }}
</span>
</div>
<!-- 中间区域立案时间 -->
<div class="pb-2">
<span class="text-sm text-[#666666]">立案</span>
<span class="text-sm text-[#333333]">{{ formatDate(caseItem.d_larq || caseItem.fileDate) }}</span>
</div>
<!-- 底部区域风险等级和案件状态 -->
<div class="flex items-center gap-2">
<!-- 风险等级标签 -->
<span class="px-2 py-1 text-sm rounded-md font-medium"
:class="getCaseTypeRiskLevel(caseItem.type).color">
{{ getCaseTypeRiskLevel(caseItem.type).text }}
</span>
<!-- 案件状态标签 -->
<span v-if="caseItem.n_ajjzjd" class="px-2 py-1 text-sm rounded-md font-medium"
:class="getCaseStatusClass(caseItem.n_ajjzjd)">
{{ caseItem.n_ajjzjd }}
</span>
</div>
<!-- 展开指示器 -->
<div class="absolute right-4 bottom-3 flex items-center text-sm text-gray-500">
<img src="@/assets/images/report/zk.png" alt="展开" class="w-4 h-4 container"
:class="{ 'rotate-180': isCaseExpanded(caseItem.id || index, 'case', index) }" />
</div>
</div>
<!-- 案件详情抽屉 -->
<div class="mt-4 overflow-hidden transition-all duration-300 ease-in-out" :class="{
'max-h-0 opacity-0': !isCaseExpanded(caseItem.id || index, 'case', index),
'max-h-none opacity-100': isCaseExpanded(caseItem.id || index, 'case', index),
}">
<div class="mt-1 transform transition-all duration-300">
<div class="relative">
<CaseDetail :case-data="caseItem" :type-color="getCaseTypeColor(caseItem.type)"
:case-type="caseItem.type" />
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 无涉诉风险时的空状态展示 -->
<div v-else class="text-gray-500 py-10 text-center bg-gray-50 rounded-lg mx-4 mb-4">
<div class="text-gray-300 text-3xl mb-2"></div>
暂无涉诉风险记录
</div>
</div>
</div>
</template>
<script setup>
import { ref, computed, onMounted, watch } from 'vue'
import LTitle from '@/components/LTitle.vue'
import LRemark from '@/components/LRemark.vue'
import StatisticsOverview from './components/StatisticsOverview.vue'
import CaseDetail from './components/CaseDetail.vue'
import { useRiskNotifier } from '@/composables/useRiskNotifier'
import {
lawsuitTypeMap,
getCaseTypeText,
getCaseTypeColor,
getRiskLevel,
getCaseStatusClass,
formatDate,
getLawsuitStats,
getCaseTypeRiskLevel,
} from './utils/lawsuitUtils.js'
const props = defineProps({
data: {
type: Object,
required: true,
},
apiId: {
type: String,
default: '',
},
index: {
type: Number,
default: 0,
},
notifyRiskStatus: {
type: Function,
default: () => { },
},
})
// 获取 judicial_data 数据
const judicialData = computed(() => {
return props.data?.data?.judicial_data || props.data?.judicial_data || {}
})
// 获取 lawsuitStat 数据
const lawsuitStat = computed(() => {
return judicialData.value.lawsuitStat || {
administrative: {},
bankrupt: {},
cases_tree: { criminal: [], civil: [] },
civil: {},
count: {},
criminal: { cases: [], count: {} },
implement: {},
preservation: {},
}
})
// 获取失信列表
const breachCaseList = computed(() => {
return judicialData.value.breachCaseList || []
})
// 获取限制消费列表
const consumptionRestrictionList = computed(() => {
return judicialData.value.consumptionRestrictionList || []
})
// 用于跟踪展开的案件卡片
const expandedCases = ref({})
// 切换展开/收起案件详情
const toggleCaseExpand = (caseId, listType, index) => {
const uniqueKey = `${caseId}_${listType}_${index}`
expandedCases.value[uniqueKey] = !expandedCases.value[uniqueKey]
}
// 检查案件是否展开
const isCaseExpanded = (caseId, listType, index) => {
const uniqueKey = `${caseId}_${listType}_${index}`
return !!expandedCases.value[uniqueKey]
}
// 当前选中的案件类型筛选
const activeCaseTypeFilter = ref('all')
// 计算所有案件数据
const allCases = computed(() => {
const cases = []
// 添加失信被执行人案件
breachCaseList.value.forEach((item, index) => {
cases.push({
...item,
type: 'breachCase',
id: `breachCase_${index}`,
// 映射字段以保持兼容性
c_ah: item.caseNumber,
d_larq: item.fileDate,
n_ajjzjd: item.fulfillStatus === '全部未履行' ? '未结案' : '已结案',
})
})
// 添加限高被执行人案件
consumptionRestrictionList.value.forEach((item, index) => {
cases.push({
...item,
type: 'consumptionRestriction',
id: `consumptionRestriction_${index}`,
// 映射字段以保持兼容性
c_ah: item.caseNumber,
d_larq: item.fileDate,
n_ajjzjd: '未结案', // 限高案件通常为未结案
})
})
// 添加其他类型案件
if (lawsuitStat.value) {
// 处理民事案件
if (lawsuitStat.value.civil && lawsuitStat.value.civil.cases) {
lawsuitStat.value.civil.cases.forEach((item, index) => {
cases.push({
...item,
type: 'civil',
id: `civil_${index}`,
})
})
}
// 处理刑事案件
if (lawsuitStat.value.criminal && lawsuitStat.value.criminal.cases) {
lawsuitStat.value.criminal.cases.forEach((item, index) => {
cases.push({
...item,
type: 'criminal',
id: `criminal_${index}`,
})
})
}
// 处理执行案件
if (lawsuitStat.value.implement && lawsuitStat.value.implement.cases) {
lawsuitStat.value.implement.cases.forEach((item, index) => {
cases.push({
...item,
type: 'implement',
id: `implement_${index}`,
})
})
}
// 处理行政案件
if (lawsuitStat.value.administrative && lawsuitStat.value.administrative.cases) {
lawsuitStat.value.administrative.cases.forEach((item, index) => {
cases.push({
...item,
type: 'administrative',
id: `administrative_${index}`,
})
})
}
// 处理破产案件
if (lawsuitStat.value.bankrupt && lawsuitStat.value.bankrupt.cases) {
lawsuitStat.value.bankrupt.cases.forEach((item, index) => {
cases.push({
...item,
type: 'bankrupt',
id: `bankrupt_${index}`,
})
})
}
// 处理保全案件
if (lawsuitStat.value.preservation && lawsuitStat.value.preservation.cases) {
lawsuitStat.value.preservation.cases.forEach((item, index) => {
cases.push({
...item,
type: 'preservation',
id: `preservation_${index}`,
})
})
}
}
return cases
})
// 计算总案件数
const totalCases = computed(() => allCases.value.length)
// 计算涉诉风险统计
const lawsuitStats = computed(() => {
if (totalCases.value === 0) return null
const stats = {
totalRiskItems: totalCases.value,
highRiskItems: 0,
mediumRiskItems: 0,
lowRiskItems: 0,
breachCaseCount: breachCaseList.value.length,
consumptionRestrictionCount: consumptionRestrictionList.value.length,
closedCases: 0,
caseTypes: [],
}
// 统计各类型案件数量
const typeCounts = {}
Object.keys(lawsuitTypeMap).forEach(type => {
typeCounts[type] = 0
})
allCases.value.forEach(caseItem => {
// 根据案件类型统计风险等级
const riskLevel = getCaseTypeRiskLevel(caseItem.type).level
if (riskLevel === 'high') {
stats.highRiskItems++
} else if (riskLevel === 'medium') {
stats.mediumRiskItems++
} else {
stats.lowRiskItems++
}
// 统计已结案件
if (caseItem.n_ajjzjd && caseItem.n_ajjzjd.includes('已结')) {
stats.closedCases++
}
// 统计案件类型
if (caseItem.type) {
typeCounts[caseItem.type] = (typeCounts[caseItem.type] || 0) + 1
}
})
// 转换为数组格式
stats.caseTypes = Object.keys(typeCounts)
.filter(type => typeCounts[type] > 0)
.map(type => ({
type,
count: typeCounts[type],
name: getCaseTypeText(type),
color: getCaseTypeColor(type),
}))
.sort((a, b) => b.count - a.count)
return stats
})
// 按案件类型筛选案件
const filteredCases = computed(() => {
if (activeCaseTypeFilter.value === 'all') {
return allCases.value
}
return allCases.value.filter(caseItem => caseItem.type === activeCaseTypeFilter.value)
})
// 获取每种案件类型的数量
const caseTypeCounts = computed(() => {
const counts = {
all: totalCases.value,
}
// 初始化所有案件类型的计数
Object.keys(lawsuitTypeMap).forEach(type => {
counts[type] = 0
})
// 计算每种类型的案件数量
allCases.value.forEach(caseItem => {
if (caseItem.type) {
counts[caseItem.type]++
}
})
return counts
})
// 设置当前筛选类型
const setCaseTypeFilter = type => {
activeCaseTypeFilter.value = type
}
// 计算风险评分0-100分分数越高越安全
const riskScore = computed(() => {
const cases = totalCases.value;
// 根据涉诉案件数量计算评分
// 0件100分最安全
// 1-2件70分中等风险
// 3-5件50分较高风险
// 6-10件30分高风险
// 10件以上10分极高风险
if (cases === 0) return 100;
if (cases <= 2) return 70;
if (cases <= 5) return 50;
if (cases <= 10) return 30;
return 10;
});
// 使用 composable 通知父组件风险评分
useRiskNotifier(props, riskScore);
// 暴露给父组件
defineExpose({
riskScore
});
</script>
<style lang="scss" scoped>
.case-wrapper {
@apply relative;
}
.lawsuit-tabs :deep(.van-tabs__wrap) {
height: 32px !important;
background-color: transparent !important;
padding: 0 !important;
border-bottom: 1px solid #DDDDDD !important;
}
.lawsuit-tabs :deep(.van-tabs__nav) {
background-color: transparent !important;
gap: 0;
height: 32px !important;
}
.lawsuit-tabs :deep(.van-tab) {
color: #999999 !important;
font-size: 14px !important;
font-weight: 400 !important;
}
.lawsuit-tabs :deep(.van-tab--active) {
color: var(--van-theme-primary) !important;
background-color: unset !important;
}
.lawsuit-tabs :deep(.van-tabs__line) {
height: 3px !important;
border-radius: 1px !important;
}
</style>

View File

@@ -0,0 +1,316 @@
// 案件类型映射表
export const lawsuitTypeMap = {
breachCase: {
text: "失信被执行",
color: "text-red-600 bg-red-50",
darkColor: "bg-red-500",
riskLevel: "high", // 高风险
},
consumptionRestriction: {
text: "限高被执行",
color: "text-orange-600 bg-orange-50",
darkColor: "bg-orange-500",
riskLevel: "high", // 高风险
},
criminal: {
text: "刑事案件",
color: "text-red-600 bg-red-50",
darkColor: "bg-red-500",
riskLevel: "high", // 高风险
},
civil: {
text: "民事案件",
color: "text-blue-600 bg-blue-50",
darkColor: "bg-blue-500",
riskLevel: "medium", // 中风险
},
administrative: {
text: "行政案件",
color: "text-purple-600 bg-purple-50",
darkColor: "bg-purple-500",
riskLevel: "medium", // 中风险
},
implement: {
text: "执行案件",
color: "text-orange-600 bg-orange-50",
darkColor: "bg-orange-500",
riskLevel: "medium", // 中风险
},
bankrupt: {
text: "强制清算与破产案件",
color: "text-rose-600 bg-rose-50",
darkColor: "bg-rose-500",
riskLevel: "high", // 高风险
},
preservation: {
text: "非诉保全审查",
color: "text-amber-600 bg-amber-50",
darkColor: "bg-amber-500",
riskLevel: "low", // 低风险
},
};
// 案件类型文本
export const getCaseTypeText = (type) => {
return lawsuitTypeMap[type]?.text || "其他案件";
};
// 案件类型颜色
export const getCaseTypeColor = (type) => {
return lawsuitTypeMap[type]?.color || "text-gray-600 bg-gray-50";
};
// 案件类型深色
export const getCaseTypeDarkColor = (type) => {
return lawsuitTypeMap[type]?.darkColor || "bg-gray-500";
};
// 格式化日期显示
export const formatDate = (dateStr) => {
if (!dateStr) return "—";
// 转换YYYY-MM-DD为年月日格式
if (dateStr.includes("-")) {
const parts = dateStr.split("-");
if (parts.length === 3) {
return `${parts[0]}${parts[1]}${parts[2]}`;
}
}
return dateStr; // 如果不是标准格式则返回原始字符串
};
export const formatLawsuitMoney = (money) => {
if (!money) return "—";
const value = parseFloat(money);
if (isNaN(value)) return "—";
// 直接显示原始金额(元)
return (
value.toLocaleString("zh-CN", {
minimumFractionDigits: 0,
maximumFractionDigits: 2,
}) + " 元"
);
};
// 获取案件状态样式
export const getCaseStatusClass = (status) => {
if (!status) return "bg-gray-100 text-gray-500";
if (status.includes("已结") || status.includes("已办结")) {
return "bg-green-50 text-green-600";
} else if (status.includes("执行中") || status.includes("审理中")) {
return "bg-blue-50 text-blue-600";
} else if (status.includes("未执行")) {
return "bg-amber-50 text-amber-600";
} else {
return "bg-gray-100 text-gray-500";
}
};
// 获取企业状态对应的样式
export const getStatusClass = (status) => {
if (!status) return "bg-gray-100 text-gray-500";
if (status.includes("注销") || status.includes("吊销")) {
return "bg-red-50 text-red-600";
} else if (status.includes("存续") || status.includes("在营")) {
return "bg-green-50 text-green-600";
} else if (status.includes("筹建") || status.includes("新设")) {
return "bg-blue-50 text-blue-600";
} else {
return "bg-yellow-50 text-yellow-600";
}
};
// 格式化资本金额显示
export const formatCapital = (capital, currency) => {
if (!capital) return "—";
// 检查是否包含"万"字或需要显示为万元
let unit = "";
let value = parseFloat(capital);
// 处理原始数据中可能带有的单位
if (typeof capital === "string" && capital.includes("万")) {
unit = "万";
// 提取数字部分
const numMatch = capital.match(/[\d.]+/);
value = numMatch ? parseFloat(numMatch[0]) : 0;
} else if (value >= 10000) {
// 大额数字转换为万元显示
value = value / 10000;
unit = "万";
}
// 格式化数字,保留两位小数(如果有小数部分)
const formattedValue = value.toLocaleString("zh-CN", {
minimumFractionDigits: 0,
maximumFractionDigits: 2,
});
return `${formattedValue}${unit} ${currency || "人民币"}`;
};
// 获取涉诉风险等级
export const getRiskLevel = (lawsuitInfo) => {
if (!lawsuitInfo) {
return {
level: "low",
text: "低风险",
color: "text-green-600 bg-green-50",
};
}
// 失信被执行人是最高风险
if (lawsuitInfo.breachCaseList && lawsuitInfo.breachCaseList.length > 0) {
return {
level: "high",
text: "高风险",
color: "text-red-600 bg-red-50",
};
}
// 限高被执行人是最高风险
if (
lawsuitInfo.consumptionRestrictionList &&
lawsuitInfo.consumptionRestrictionList.length > 0
) {
return {
level: "high",
text: "高风险",
color: "text-red-600 bg-red-50",
};
}
// 有涉诉数据的风险级别
if (
lawsuitInfo.lawsuitStat &&
Object.keys(lawsuitInfo.lawsuitStat).length > 0
) {
// 检查是否有未结案的案件
const data = lawsuitInfo.lawsuitStat;
if (
data.count &&
data.count.count_wei_total &&
data.count.count_wei_total > 0
) {
return {
level: "medium",
text: "中风险",
color: "text-amber-600 bg-amber-50",
};
}
// 只有已结案的为低中风险
return {
level: "low-medium",
text: "低中风险",
color: "text-yellow-600 bg-yellow-50",
};
}
return {
level: "low",
text: "低风险",
color: "text-green-600 bg-green-50",
};
};
// 获取涉诉案件统计
export const getLawsuitStats = (lawsuitInfo) => {
if (!lawsuitInfo) return null;
const stats = {
total: 0,
types: [],
};
// 统计各类型案件数量
Object.keys(lawsuitTypeMap).forEach((type) => {
let count = 0;
if (type === "breachCase") {
count =
lawsuitInfo.breachCaseList &&
lawsuitInfo.breachCaseList.length > 0
? lawsuitInfo.breachCaseList.length
: 0;
} else if (type === "consumptionRestriction") {
count =
lawsuitInfo.consumptionRestrictionList &&
lawsuitInfo.consumptionRestrictionList.length > 0
? lawsuitInfo.consumptionRestrictionList.length
: 0;
} else if (
lawsuitInfo.lawsuitStat &&
lawsuitInfo.lawsuitStat[type] &&
Object.keys(lawsuitInfo.lawsuitStat[type]).length > 0
) {
const typeData = lawsuitInfo.lawsuitStat[type];
count =
typeData.cases && typeData.cases.length
? typeData.cases.length
: 0;
}
if (count > 0) {
stats.total += count;
stats.types.push({
type,
count,
name: getCaseTypeText(type),
color: getCaseTypeColor(type),
darkColor: getCaseTypeDarkColor(type),
});
}
});
return stats;
};
// 获取案件类型优先级顺序
export const getCaseTypePriority = () => {
return [
"breachCase", // 失信被执行人(最高风险)
"consumptionRestriction", // 限高被执行人
"criminal", // 刑事案件
"civil", // 民事案件
"administrative", // 行政案件
"implement", // 执行案件
"bankrupt", // 强制清算与破产案件
"preservation", // 非诉保全审查
];
};
// 根据案件类型获取风险等级
export const getCaseTypeRiskLevel = (caseType) => {
const typeInfo = lawsuitTypeMap[caseType];
if (!typeInfo) {
return {
level: "low",
text: "低风险",
color: "text-green-600 bg-green-50",
};
}
const riskLevelMap = {
high: {
text: "高风险",
color: "text-red-600 bg-red-50",
},
medium: {
text: "中风险",
color: "text-amber-600 bg-amber-50",
},
low: {
text: "低风险",
color: "text-green-600 bg-green-50",
},
};
return {
level: typeInfo.riskLevel,
...riskLevelMap[typeInfo.riskLevel],
};
};

View File

@@ -5,7 +5,7 @@
<p class="indent-8 mb-2"><span></span><strong>前言</strong></p> <p class="indent-8 mb-2"><span></span><strong>前言</strong></p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
海南天远大数据科技有限公司为加强对全国代理的统一管理规范各代理行为确保"天远数据"的顺利推广特依据如下原则制定代理管理制度望各级代理认真贯彻严格遵守 海南海宇大数据有限公司为加强对全国代理的统一管理规范各代理行为确保"天远数据"的顺利推广特依据如下原则制定代理管理制度望各级代理认真贯彻严格遵守
</p> </p>
<p class="indent-8 mb-2">1.谨慎性原则</p> <p class="indent-8 mb-2">1.谨慎性原则</p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
@@ -13,7 +13,7 @@
</p> </p>
<p class="indent-8 mb-2">2.用心协助原则</p> <p class="indent-8 mb-2">2.用心协助原则</p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
海南天远大数据科技有限公司配合各代理的工作对于代理在推广工作中遇到的问题用心配合解决 海南海宇大数据有限公司配合各代理的工作对于代理在推广工作中遇到的问题用心配合解决
</p> </p>
<p class="indent-8 mb-2">3.诚信的原则</p> <p class="indent-8 mb-2">3.诚信的原则</p>
<p class="indent-8 mb-2">双方务必诚实有信用决不提供虚假信息</p> <p class="indent-8 mb-2">双方务必诚实有信用决不提供虚假信息</p>
@@ -23,7 +23,7 @@
</p> </p>
<p class="indent-8 mb-2">5.双方共赢原则</p> <p class="indent-8 mb-2">5.双方共赢原则</p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
海南天远大数据科技有限公司的目标是与代理共赢共同发展 海南海宇大数据有限公司的目标是与代理共赢共同发展
</p> </p>
<p class="indent-8 mb-2">6.长期性原则</p> <p class="indent-8 mb-2">6.长期性原则</p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
@@ -36,15 +36,15 @@
</p> </p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
第二条 第二条
本制度规定海南天远大数据科技有限公司代理(以下称代理)权限运作及业务处理等相关事项旨在使海南天远大数据科技有限公司与各代理之间持续良好合作关系促进双方共同发展; 本制度规定海南海宇大数据有限公司代理(以下称代理)权限运作及业务处理等相关事项旨在使海南海宇大数据有限公司与各代理之间持续良好合作关系促进双方共同发展;
</p> </p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
第三条 第三条
代理经海南天远大数据科技有限公司授权并自代理协议书生效之日起应严格依照代理协议及本制度的规定履行义务享受权利 代理经海南海宇大数据有限公司授权并自代理协议书生效之日起应严格依照代理协议及本制度的规定履行义务享受权利
</p> </p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
第四条 第四条
海南天远大数据科技有限公司确定的代理应遵循海南天远大数据科技有限公司的规定从事代理活动不得做出损害海南天远大数据科技有限公司利益和形象的行为; 海南海宇大数据有限公司确定的代理应遵循海南海宇大数据有限公司的规定从事代理活动不得做出损害海南海宇大数据有限公司利益和形象的行为;
</p> </p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
第五条 第五条
@@ -64,7 +64,7 @@
<p class="indent-8 mb-2">企业类</p> <p class="indent-8 mb-2">企业类</p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
1具有独立法人资格并能提供有效营业执照组织代码证等相关文件复印件经审查合格签定代理协议后即成为海南天远大数据科技有限公司认证代理 1具有独立法人资格并能提供有效营业执照组织代码证等相关文件复印件经审查合格签定代理协议后即成为海南海宇大数据有限公司认证代理
</p> </p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
2应具备良好的经营规模办公条件设备及人员有固定的营业场所良好的资信潜力和商业信誉并提供以下资料 2应具备良好的经营规模办公条件设备及人员有固定的营业场所良好的资信潜力和商业信誉并提供以下资料
@@ -79,13 +79,13 @@
<p class="indent-8 mb-4"><strong>代理权利和义务</strong></p> <p class="indent-8 mb-4"><strong>代理权利和义务</strong></p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
在成为海南天远大数据科技有限公司的认证代理后可享有如下权利并承担相应的义务: 在成为海南海宇大数据有限公司的认证代理后可享有如下权利并承担相应的义务:
</p> </p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
1使用天远数据开展广告宣传市场推广活动; 1使用天远数据开展广告宣传市场推广活动;
</p> </p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
2维护海南天远大数据科技有限公司及其产品的良好形象; 2维护海南海宇大数据有限公司及其产品的良好形象;
</p> </p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
3开拓下级业务推广并负责对其定期进行业务培训; 3开拓下级业务推广并负责对其定期进行业务培训;
@@ -95,7 +95,7 @@
5如用户需要开具发票代理则需向用户开具咨询费发票如代理未开具发票天远数据有义务配合税务机关采取相关措施 5如用户需要开具发票代理则需向用户开具咨询费发票如代理未开具发票天远数据有义务配合税务机关采取相关措施
</p> </p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
6代理业务推广过程中未经海南天远大数据科技有限公司授权不得使用"天远数据官方"词汇用于广告宣传 6代理业务推广过程中未经海南海宇大数据有限公司授权不得使用"天远数据官方"词汇用于广告宣传
</p> </p>
<p class="font-bold mb-2">推广管理</p> <p class="font-bold mb-2">推广管理</p>
@@ -103,7 +103,7 @@
1天远数据负责建立与代理之间的沟通与联系渠道不定期地向代理提供宣传资料信息政策以及推广方案与管理制度等方面的支持 1天远数据负责建立与代理之间的沟通与联系渠道不定期地向代理提供宣传资料信息政策以及推广方案与管理制度等方面的支持
</p> </p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
2海南天远大数据科技有限公司充分尊重代理代理推广权但有下列状况之一时海南天远大数据科技有限公司将保留或者取消该代理的权利: 2海南海宇大数据有限公司充分尊重代理代理推广权但有下列状况之一时海南海宇大数据有限公司将保留或者取消该代理的权利:
</p> </p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
a代理经营管理不善造成工作无法正常开展的; a代理经营管理不善造成工作无法正常开展的;
@@ -111,34 +111,34 @@
<p class="indent-8 mb-2">b国家政策变化等不可抗力发生时;</p> <p class="indent-8 mb-2">b国家政策变化等不可抗力发生时;</p>
<p class="indent-8 mb-2">c遇有客户投诉经确认属代理操作不当的;</p> <p class="indent-8 mb-2">c遇有客户投诉经确认属代理操作不当的;</p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
d其他严重损害海南天远大数据科技有限公司形象与产品形象的行为发生时; d其他严重损害海南海宇大数据有限公司形象与产品形象的行为发生时;
</p> </p>
<p class="indent-8 mb-2">e违反国家法律法规时;</p> <p class="indent-8 mb-2">e违反国家法律法规时;</p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
3当代理名下发生投诉时代理需配合相关的协调否则海南天远大数据科技有限公司有权无条件取消其代理资格终止其代理协议 3当代理名下发生投诉时代理需配合相关的协调否则海南海宇大数据有限公司有权无条件取消其代理资格终止其代理协议
</p> </p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
4代理应合规宣传海南天远大数据科技有限公司产品形象 4代理应合规宣传海南海宇大数据有限公司产品形象
</p> </p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
5市场运作过程中各代理在接到市场投诉时应及时做好记录并报海南天远大数据科技有限公司相关部门妥善处理 5市场运作过程中各代理在接到市场投诉时应及时做好记录并报海南海宇大数据有限公司相关部门妥善处理
</p> </p>
<p class="indent-8 mb-2"><strong>违规处罚</strong></p> <p class="indent-8 mb-2"><strong>违规处罚</strong></p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
1各代理在推广海南天远大数据科技有限公司过程中有损害海南天远大数据科技有限公司产品信誉行为时视情节轻重海南天远大数据科技有限公司将对其提出书面警告直至取消其代理资格; 1各代理在推广海南海宇大数据有限公司过程中有损害海南海宇大数据有限公司产品信誉行为时视情节轻重海南海宇大数据有限公司将对其提出书面警告直至取消其代理资格;
</p> </p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
2未按海南天远大数据科技有限公司有关规定和本制度开展工作的海南天远大数据科技有限公司将提出书面警告并限期整改; 2未按海南海宇大数据有限公司有关规定和本制度开展工作的海南海宇大数据有限公司将提出书面警告并限期整改;
</p> </p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
3不遵守海南天远大数据科技有限公司的相关规章制度造成与其他推广代理纠纷时海南天远大数据科技有限公司将视其情节轻重处以20000元以上50000元以下的罚款并取消其代理资格 3不遵守海南海宇大数据有限公司的相关规章制度造成与其他推广代理纠纷时海南海宇大数据有限公司将视其情节轻重处以20000元以上50000元以下的罚款并取消其代理资格
</p> </p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
4违反保密义务导致海南天远大数据科技有限公司重大损失的海南天远大数据科技有限公司将对其处以5000-20000元罚款情节严重者将直接取消其代理资格 4违反保密义务导致海南海宇大数据有限公司重大损失的海南海宇大数据有限公司将对其处以5000-20000元罚款情节严重者将直接取消其代理资格
</p> </p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
5代理如严重违反海南天远大数据科技有限公司相关规章制度海南天远大数据科技有限公司可随时解除双方约定的部分或全部协议 5代理如严重违反海南海宇大数据有限公司相关规章制度海南海宇大数据有限公司可随时解除双方约定的部分或全部协议
</p> </p>
<p class="indent-8 mb-2"><strong>推广收益及提现</strong></p> <p class="indent-8 mb-2"><strong>推广收益及提现</strong></p>
@@ -763,19 +763,19 @@
1本制度作为代理协议之附件与代理协议具有同等法律效力 1本制度作为代理协议之附件与代理协议具有同等法律效力
</p> </p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
2海南天远大数据科技有限公司将本着"诚信为本、长期服务"的宗旨和"公平合理"的原则对代理进行合理布局和调整以实现互利互惠共同快速发展的目的 2海南海宇大数据有限公司将本着"诚信为本、长期服务"的宗旨和"公平合理"的原则对代理进行合理布局和调整以实现互利互惠共同快速发展的目的
</p> </p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
3因其他原因需终止代理关系需向海南天远大数据科技有限公司提出书面申请 3因其他原因需终止代理关系需向海南海宇大数据有限公司提出书面申请
</p> </p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
4代理之间发生业务竞争和冲突海南天远大数据科技有限公司将依据公平公正公开的原则按相关制度予以调解处理 4代理之间发生业务竞争和冲突海南海宇大数据有限公司将依据公平公正公开的原则按相关制度予以调解处理
</p> </p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
5如海南天远大数据科技有限公司与各代理之间出现协议上的纠纷由海南天远大数据科技有限公司所在地法院裁决 5如海南海宇大数据有限公司与各代理之间出现协议上的纠纷由海南海宇大数据有限公司所在地法院裁决
</p> </p>
<p class="indent-8 mb-2"> <p class="indent-8 mb-2">
6本制度的制定修改与废止皆经由海南天远大数据科技有限公司讨论决定解释权归海南天远大数据科技有限公司所有 6本制度的制定修改与废止皆经由海南海宇大数据有限公司讨论决定解释权归海南海宇大数据有限公司所有
</p> </p>
<p class="indent-8 mb-4"> <p class="indent-8 mb-4">
7本制度于2022年1月1日起实施公司将根据实施情况对本制度进行修正和调整 7本制度于2022年1月1日起实施公司将根据实施情况对本制度进行修正和调整

View File

@@ -23,6 +23,10 @@
<div class="flex justify-between items-center mb-2"> <div class="flex justify-between items-center mb-2">
<span class="text-gray-500 text-sm">{{ item.create_time || '-' }}</span> <span class="text-gray-500 text-sm">{{ item.create_time || '-' }}</span>
</div> </div>
<div class="flex items-center mt-2">
<span class="text-gray-500 text-sm">订单号</span>
<span class="text-gray-700 text-sm font-mono">{{ item.order_id || '-' }}</span>
</div>
</div> </div>
</van-list> </van-list>
</div> </div>

View File

@@ -6,7 +6,7 @@
<p class="text-left"><span></span></p> <p class="text-left"><span></span></p>
<p class="text-left"><span class="text-black">甲方</span></p> <p class="text-left"><span class="text-black">甲方</span></p>
<p class="text-left"><span class="text-black">乙方</span><span <p class="text-left"><span class="text-black">乙方</span><span
class="text-black">海南天远大数据科技有限公司</span> class="text-black">海南海宇大数据有限公司</span>
</p> </p>
<p class="text-left">&nbsp;</p> <p class="text-left">&nbsp;</p>
<p class="text-left"><span class="text-black">鉴于</span></p> <p class="text-left"><span class="text-black">鉴于</span></p>
@@ -18,7 +18,7 @@
<p class="text-left"><span class="text-black"> <p class="text-left"><span class="text-black">
现双方根据中华人民共和国</span><span class="text-black">民法典</span><span 现双方根据中华人民共和国</span><span class="text-black">民法典</span><span
class="text-black">等相关法律法规本着诚实信用公平促进社会诚信发展为原则经友好协商就</span><span class="text-black">等相关法律法规本着诚实信用公平促进社会诚信发展为原则经友好协商就</span><span
class="text-black">海南天远大数据科技有限公司</span><span class="text-black">海南海宇大数据有限公司</span><span
class="text-black">信息技术服务事宜达成一致签订本合同</span></p> class="text-black">信息技术服务事宜达成一致签订本合同</span></p>
<p class="text-left"><span></span></p> <p class="text-left"><span></span></p>
<p class="text-left"></p> <p class="text-left"></p>
@@ -27,7 +27,7 @@
<p class="text-left"><span class="text-black"> <p class="text-left"><span class="text-black">
除上下文另有约定外下列用语具有如下含义</span></p> 除上下文另有约定外下列用语具有如下含义</span></p>
<p class="text-left"><span class="text-black">1.1 <p class="text-left"><span class="text-black">1.1
&nbsp; &nbsp;</span><span class="text-black">海南天远大数据科技有限公司</span><span &nbsp; &nbsp;</span><span class="text-black">海南海宇大数据有限公司</span><span
class="text-black">信息技术服务服务 class="text-black">信息技术服务服务
指乙方通过信息化人工智能和信息科技等技术手段对</span><span class="text-black">大数据</span><span 指乙方通过信息化人工智能和信息科技等技术手段对</span><span class="text-black">大数据</span><span
class="text-black">进行以公众号小程序APPweb页面以下简称平台或标准接口形式为客户提供的服务协助客户完成信息的整理管理等业务流程</span> class="text-black">进行以公众号小程序APPweb页面以下简称平台或标准接口形式为客户提供的服务协助客户完成信息的整理管理等业务流程</span>
@@ -62,7 +62,7 @@
合作内容与方式</span></p> 合作内容与方式</span></p>
<p class="text-left"><span class="text-black">2.1 <p class="text-left"><span class="text-black">2.1
&nbsp; &nbsp;根据本合同约定的条件和条款甲方使用乙方提供的</span><span &nbsp; &nbsp;根据本合同约定的条件和条款甲方使用乙方提供的</span><span
class="text-black">海南天远大数据科技有限公司</span><span class="text-black">相关</span><span class="text-black">海南海宇大数据有限公司</span><span class="text-black">相关</span><span
class="text-black">信息技术服务简称乙方服务本服务</span></p> class="text-black">信息技术服务简称乙方服务本服务</span></p>
<p class="text-left"><span class="text-black">2.2 <p class="text-left"><span class="text-black">2.2
&nbsp; &nbsp; &nbsp; &nbsp;

View File

@@ -1,7 +1,7 @@
<template> <template>
<!-- 授权书滚动区域 --> <!-- 授权书滚动区域 -->
<div class=" card flex-1 overflow-y-auto" ref="agreementBox" @scroll="handleScroll"> <div class=" card flex-1 overflow-y-auto" ref="agreementBox" @scroll="handleScroll">
<p class="my-2">海南天远大数据科技有限公司</p> <p class="my-2">海南海宇大数据有限公司</p>
<p class="indent-[2em]"> <p class="indent-[2em]">
<!-- <span class="font-bold"> {{ signature ? userData.name : "____________" }}</span> --> <!-- <span class="font-bold"> {{ signature ? userData.name : "____________" }}</span> -->
本人________拟向贵司申请大数据分析报告查询业务贵司需要了解本人相关状况用于查询大数据分析报告因此本人同意向贵司提供本人的姓名和手机号等个人信息并同意贵司向第三方传送上述信息第三方将使用上述信息核实信息真实情况查询信用记录并生成报告 本人________拟向贵司申请大数据分析报告查询业务贵司需要了解本人相关状况用于查询大数据分析报告因此本人同意向贵司提供本人的姓名和手机号等个人信息并同意贵司向第三方传送上述信息第三方将使用上述信息核实信息真实情况查询信用记录并生成报告
@@ -59,10 +59,10 @@
本人有权随时撤回本授权书中的授权但撤回前的授权行为及其法律后果仍具有法律效力若需撤回授权本人可通过贵司官方渠道提交书面申请贵司将在收到申请后依法停止对本人数据的使用 本人有权随时撤回本授权书中的授权但撤回前的授权行为及其法律后果仍具有法律效力若需撤回授权本人可通过贵司官方渠道提交书面申请贵司将在收到申请后依法停止对本人数据的使用
</li> </li>
<li> <li>
你通过天远数据自愿支付相应费用用于购买海南天远大数据科技有限公司的大数据报告产品如若对产品内容存在异议可通过邮箱admin@iieeii.com或APP联系客服按钮进行反馈贵司将在收到异议之日起20日内进行核查和处理并将结果答复 你通过天远数据自愿支付相应费用用于购买海南海宇大数据有限公司的大数据报告产品如若对产品内容存在异议可通过邮箱admin@iieeii.com或APP联系客服按钮进行反馈贵司将在收到异议之日起20日内进行核查和处理并将结果答复
</li> </li>
<li> <li>
你向海南天远大数据科技有限公司的支付方式为海南天远大数据科技有限公司及其经官方授权的相关企业的支付宝账户 你向海南海宇大数据有限公司的支付方式为海南海宇大数据有限公司及其经官方授权的相关企业的支付宝账户
</li> </li>
</ul> </ul>
<p class="mt-2 font-bold">争议解决机制</p> <p class="mt-2 font-bold">争议解决机制</p>

View File

@@ -14,7 +14,7 @@
</div> </div>
<div class="leading-relaxed"> <div class="leading-relaxed">
我们深知个人信息对您的重要性我们将按法律法规要求采取相应安全保护措施尽力保护您的个人信息安全可控 我们深知个人信息对您的重要性我们将按法律法规要求采取相应安全保护措施尽力保护您的个人信息安全可控
有鉴于此海南天远大数据科技有限公司以下简称我们天远数据作为天远数据产品及服务的提供者制定本隐私政策下称本政策并提醒您 有鉴于此海南海宇大数据有限公司以下简称我们天远数据作为天远数据产品及服务的提供者制定本隐私政策下称本政策并提醒您
</div> </div>
<div class="leading-relaxed"> <div class="leading-relaxed">
本政策适用于全部天远数据产品及服务如我们关联公司的产品或服务中使用了天远数据提供的产品或服务但未设独立的隐私政策的 本政策适用于全部天远数据产品及服务如我们关联公司的产品或服务中使用了天远数据提供的产品或服务但未设独立的隐私政策的
@@ -35,7 +35,7 @@
<!-- 第一部分 --> <!-- 第一部分 -->
<div class="leading-relaxed"> <div class="leading-relaxed">
<div> <div>
1天远数据服务提供者是指研发并提供天远数据产品和服务法律主体海南天远大数据科技有限公司下称我们天远数据 1天远数据服务提供者是指研发并提供天远数据产品和服务法律主体海南海宇大数据有限公司下称我们天远数据
</div> </div>
<div> <div>
2天远数据用户是指注册天远数据账户的用户以下称 2天远数据用户是指注册天远数据账户的用户以下称
@@ -440,7 +440,7 @@
<div class="leading-relaxed"> <div class="leading-relaxed">
隐私政策的解释及争议解决均应适用中华人民共和国大陆地区法律 隐私政策的解释及争议解决均应适用中华人民共和国大陆地区法律
与本隐私政策相关的任何纠纷双方应协商友好解决若不能协商解决 与本隐私政策相关的任何纠纷双方应协商友好解决若不能协商解决
应将争议提交至海南天远大数据科技有限公司注册地有管辖权的人民法院解决 应将争议提交至海南海宇大数据有限公司注册地有管辖权的人民法院解决
</div> </div>
<div class="leading-relaxed"> <div class="leading-relaxed">
隐私政策的标题仅为方便及阅读而设并不影响正文其中任何规定的含义或解释 隐私政策的标题仅为方便及阅读而设并不影响正文其中任何规定的含义或解释

View File

@@ -8,19 +8,19 @@
<!-- 内容主体 --> <!-- 内容主体 -->
<div class="indent-[2em]"> <div class="indent-[2em]">
<div class="mb-4 leading-relaxed"> <div class="mb-4 leading-relaxed">
本协议是您以下又称用户在使用本服务时约定您和海南天远大数据科技有限公司之间权利义务关系的有效协议 本协议是您以下又称用户在使用本服务时约定您和海南海宇大数据有限公司之间权利义务关系的有效协议
</div> </div>
<div class="mb-4 leading-relaxed"> <div class="mb-4 leading-relaxed">
在您使用本服务前请您务必仔细阅读本协议特别是隐私权保护及授权条款免除或者限制海南天远大数据科技有限公司责任的条款争议解决和法律适用条款一旦您有对本服务的任何部分或全部的注册查看定制使用等任何使用行为即视为您已充分阅读理解并接受本协议的全部内容并与海南天远大数据科技有限公司达成本协议如您对本协议有任何疑问应向海南天远大数据科技有限公司客服咨询如果您不同意本协议的部分或全部约定您应立即停止使用本服务 在您使用本服务前请您务必仔细阅读本协议特别是隐私权保护及授权条款免除或者限制海南海宇大数据有限公司责任的条款争议解决和法律适用条款一旦您有对本服务的任何部分或全部的注册查看定制使用等任何使用行为即视为您已充分阅读理解并接受本协议的全部内容并与海南海宇大数据有限公司达成本协议如您对本协议有任何疑问应向海南海宇大数据有限公司客服咨询如果您不同意本协议的部分或全部约定您应立即停止使用本服务
</div> </div>
<div class="mb-4 leading-relaxed"> <div class="mb-4 leading-relaxed">
您与海南天远大数据科技有限公司达成本协议后您承诺接受并遵守本协议的约定并不得以未阅读本协议的内容或者未获得海南天远大数据科技有限公司对您问询的解答等理由主张本协议无效或要求撤销本协议在本协议履行过程中海南天远大数据科技有限公司可以依其单独判断暂时停止提供限制或改变本服务并有权根据自身业务需要修订本协议一旦本协议的内容发生变动海南天远大数据科技有限公司将通过平台公布最新的服务协议不再向您作个别通知如果您不同意海南天远大数据科技有限公司对本服务协议所做的修改您应立即停止使用本服务或通过海南天远大数据科技有限公司客服与海南天远大数据科技有限公司联系如果您继续使用本服务则视为您接受海南天远大数据科技有限公司对本协议所做的修改并应遵照修改后的协议执行 您与海南海宇大数据有限公司达成本协议后您承诺接受并遵守本协议的约定并不得以未阅读本协议的内容或者未获得海南海宇大数据有限公司对您问询的解答等理由主张本协议无效或要求撤销本协议在本协议履行过程中海南海宇大数据有限公司可以依其单独判断暂时停止提供限制或改变本服务并有权根据自身业务需要修订本协议一旦本协议的内容发生变动海南海宇大数据有限公司将通过平台公布最新的服务协议不再向您作个别通知如果您不同意海南海宇大数据有限公司对本服务协议所做的修改您应立即停止使用本服务或通过海南海宇大数据有限公司客服与海南海宇大数据有限公司联系如果您继续使用本服务则视为您接受海南海宇大数据有限公司对本协议所做的修改并应遵照修改后的协议执行
</div> </div>
<div class="mb-4"> <div class="mb-4">
<div class="mb-2 font-bold leading-relaxed">服务内容</div> <div class="mb-2 font-bold leading-relaxed">服务内容</div>
<div class="leading-relaxed"> <div class="leading-relaxed">
本服务向您提供多项个人信息整理服务您知悉并认可如您需使用该类服务必须满足如下所述条件且您承诺您向海南天远大数据科技有限公司提请服务申请时已经满足如下所述条件 本服务向您提供多项个人信息整理服务您知悉并认可如您需使用该类服务必须满足如下所述条件且您承诺您向海南海宇大数据有限公司提请服务申请时已经满足如下所述条件
</div> </div>
<div class="leading-relaxed"> <div class="leading-relaxed">
<div>A.您已注册成为本服务的会员</div> <div>A.您已注册成为本服务的会员</div>
@@ -31,7 +31,7 @@
C.您确保被查询主体信息是您本人的信息或者被查询主体已授权您本人使用被查询主体信息进行查询授权内容应包括本条D项所述内容并且被查询主体已知悉该授权的风险 C.您确保被查询主体信息是您本人的信息或者被查询主体已授权您本人使用被查询主体信息进行查询授权内容应包括本条D项所述内容并且被查询主体已知悉该授权的风险
</div> </div>
<div> <div>
D.被查询主体不可撤销地授权海南天远大数据科技有限公司为查询评估被查询主体的信息状况a.可以委托合法存续的第三方机构收集查询验证使用并提供您或被查询主体的个人信息b.可以向数据源机构采集您或被查询主体的个人信息c.可以整理保存加工使用您或被查询主体的个人信息并向您提供数据报告d.可以向为您提供服务的第三方商户提供脱敏后的个人信息或数据报告本条所述的个人信息包括但不限于身份信息联系方式职业和居住地址等个人基本信息个人社保公积金收入及在商业活动中形成的各类交易记录个人公共费用缴纳违法违规信息财产状况等 D.被查询主体不可撤销地授权海南海宇大数据有限公司为查询评估被查询主体的信息状况a.可以委托合法存续的第三方机构收集查询验证使用并提供您或被查询主体的个人信息b.可以向数据源机构采集您或被查询主体的个人信息c.可以整理保存加工使用您或被查询主体的个人信息并向您提供数据报告d.可以向为您提供服务的第三方商户提供脱敏后的个人信息或数据报告本条所述的个人信息包括但不限于身份信息联系方式职业和居住地址等个人基本信息个人社保公积金收入及在商业活动中形成的各类交易记录个人公共费用缴纳违法违规信息财产状况等
</div> </div>
<div> <div>
E.被查询主体已被明确告知提供被查询主体信息并作出D项授权可能给被查询主体带来的各类损失以及其他可能的不利后果包括采集上述个人信息对被查询主体信用方面可能产生不良影响以及上述信息被信息使用者依法提供给第三方后被他人不当利用的风险 E.被查询主体已被明确告知提供被查询主体信息并作出D项授权可能给被查询主体带来的各类损失以及其他可能的不利后果包括采集上述个人信息对被查询主体信用方面可能产生不良影响以及上述信息被信息使用者依法提供给第三方后被他人不当利用的风险
@@ -47,7 +47,7 @@
服务中断或故障 服务中断或故障
</div> </div>
<div class="leading-relaxed"> <div class="leading-relaxed">
您同意因下列原因导致海南天远大数据科技有限公司无法正常提供本服务的海南天远大数据科技有限公司不承担责任 您同意因下列原因导致海南海宇大数据有限公司无法正常提供本服务的海南海宇大数据有限公司不承担责任
</div> </div>
<div class="leading-relaxed"> <div class="leading-relaxed">
<div>1承载本服务的系统停机维护期间</div> <div>1承载本服务的系统停机维护期间</div>
@@ -55,7 +55,7 @@
2您的电脑手机软硬件和通信线路供电线路出现故障的 2您的电脑手机软硬件和通信线路供电线路出现故障的
</div> </div>
<div> <div>
3您操作不当或通过非海南天远大数据科技有限公司授权或认可的方式使用本服务的 3您操作不当或通过非海南海宇大数据有限公司授权或认可的方式使用本服务的
</div> </div>
<div> <div>
4因病毒木马恶意程序攻击网络拥堵系统不稳定系统或设备故障通讯故障电力故障或政府行为等原因 4因病毒木马恶意程序攻击网络拥堵系统不稳定系统或设备故障通讯故障电力故障或政府行为等原因
@@ -68,7 +68,7 @@
</div> </div>
</div> </div>
<div class="leading-relaxed"> <div class="leading-relaxed">
海南天远大数据科技有限公司不对因使用本服务而对用户造成的间接的附带的特殊的后果性的损失承担任何法律责任尽管有前款约定海南天远大数据科技有限公司将采取合理行动积极促使本服务恢复正常 海南海宇大数据有限公司不对因使用本服务而对用户造成的间接的附带的特殊的后果性的损失承担任何法律责任尽管有前款约定海南海宇大数据有限公司将采取合理行动积极促使本服务恢复正常
</div> </div>
</div> </div>
<div class="mb-4"> <div class="mb-4">
@@ -76,17 +76,17 @@
信息的使用和保护 信息的使用和保护
</div> </div>
<div class="leading-relaxed"> <div class="leading-relaxed">
海南天远大数据科技有限公司深知您注重个人信息安全和保护并理解保护被查询主体个人信息的重要性 海南海宇大数据有限公司深知您注重个人信息安全和保护并理解保护被查询主体个人信息的重要性
海南天远大数据科技有限公司会严格遵守中国关于收集使用保存用户个人信息的相关法律法规 海南海宇大数据有限公司会严格遵守中国关于收集使用保存用户个人信息的相关法律法规
尽最大努力采用相应安全技术和管理手段保护您或被查询主体的个人信息 尽最大努力采用相应安全技术和管理手段保护您或被查询主体的个人信息
防止您或被查询主体个人信息遭受未经授权的访问适用或泄露毁损篡改或者丢失 防止您或被查询主体个人信息遭受未经授权的访问适用或泄露毁损篡改或者丢失
未经您或被查询主体的授权不会向任何第三方提供 未经您或被查询主体的授权不会向任何第三方提供
</div> </div>
<div class="leading-relaxed"> <div class="leading-relaxed">
您使用本服务即表示您已授权海南天远大数据科技有限公司将您相关信息披露给海南天远大数据科技有限公司关联公司 您使用本服务即表示您已授权海南海宇大数据有限公司将您相关信息披露给海南海宇大数据有限公司关联公司
关联公司是指直接或间接控制于本协议一方的任何法律实体或者与本协议一方共同于另一法律实体的任何法律实体使用 关联公司是指直接或间接控制于本协议一方的任何法律实体或者与本协议一方共同于另一法律实体的任何法律实体使用
且海南天远大数据科技有限公司关联公司仅为了向您提供服务而使用您的相关信息 且海南海宇大数据有限公司关联公司仅为了向您提供服务而使用您的相关信息
如海南天远大数据科技有限公司关联公司使用您的相关信息则受本协议约束且会按照与海南天远大数据科技有限公司同等谨慎程度保护您的相关信息 如海南海宇大数据有限公司关联公司使用您的相关信息则受本协议约束且会按照与海南海宇大数据有限公司同等谨慎程度保护您的相关信息
</div> </div>
<div class="leading-relaxed"> <div class="leading-relaxed">
在您使用本服务过程中特别是在申请提现实名认证或佣金结算时您需要提供包括但不限于姓名身份证号银行卡号手机号税务身份信息等个人资料 在您使用本服务过程中特别是在申请提现实名认证或佣金结算时您需要提供包括但不限于姓名身份证号银行卡号手机号税务身份信息等个人资料
@@ -97,20 +97,20 @@
您有权查询更正您的个人信息也可以根据平台流程申请注销账户或停止使用相关服务我们将根据法律要求妥善处理相关信息 您有权查询更正您的个人信息也可以根据平台流程申请注销账户或停止使用相关服务我们将根据法律要求妥善处理相关信息
</div> </div>
<div class="leading-relaxed"> <div class="leading-relaxed">
海南天远大数据科技有限公司就下列原因导致的您或被查询主体个人信息的泄露不承担任何法律责任 海南海宇大数据有限公司就下列原因导致的您或被查询主体个人信息的泄露不承担任何法律责任
</div> </div>
<div class="leading-relaxed"> <div class="leading-relaxed">
<div> <div>
1由于您个人原因将本服务的会员账号和密码告知他人或与他人共享海南天远大数据科技有限公司服务账户由此导致的与您相关的信息的泄露 1由于您个人原因将本服务的会员账号和密码告知他人或与他人共享海南海宇大数据有限公司服务账户由此导致的与您相关的信息的泄露
</div> </div>
<div> <div>
2您使用第三方提供的服务包括您向第三方提供的任何个人信息须受第三方自己的服务条款及个人信息保护协议而非本协议约束您需要仔细阅读其条款本协议仅适用于海南天远大数据科技有限公司所提供的服务并不适用于任何第三方提供的服务或第三方的信息使用规则海南天远大数据科技有限公司对任何第三方使用由您提供的信息不承担任何责任 2您使用第三方提供的服务包括您向第三方提供的任何个人信息须受第三方自己的服务条款及个人信息保护协议而非本协议约束您需要仔细阅读其条款本协议仅适用于海南海宇大数据有限公司所提供的服务并不适用于任何第三方提供的服务或第三方的信息使用规则海南海宇大数据有限公司对任何第三方使用由您提供的信息不承担任何责任
</div> </div>
<div> <div>
3根据相关的法律法规相关政府主管部门或相关证券交易所的要求提供公布与您相关的信息 3根据相关的法律法规相关政府主管部门或相关证券交易所的要求提供公布与您相关的信息
</div> </div>
<div> <div>
4或其他非因海南天远大数据科技有限公司原因导致的与您相关的信息的泄露 4或其他非因海南海宇大数据有限公司原因导致的与您相关的信息的泄露
</div> </div>
</div> </div>
</div> </div>
@@ -124,7 +124,7 @@
1您使用本服务的前提是您依照适用的法律是具有完全民事权利和民事行为能力能够独立承担民事责任的自然人 1您使用本服务的前提是您依照适用的法律是具有完全民事权利和民事行为能力能够独立承担民事责任的自然人
</div> </div>
<div> <div>
2您如违反本协议第一条款中的承诺您可能会对他人造成侵权如由此给海南天远大数据科技有限公司或他人造成损失的您需依照法律法规规定承担相应的法律责任 2您如违反本协议第一条款中的承诺您可能会对他人造成侵权如由此给海南海宇大数据有限公司或他人造成损失的您需依照法律法规规定承担相应的法律责任
</div> </div>
</div> </div>
</div> </div>
@@ -135,10 +135,10 @@
知识产权保护 知识产权保护
</div> </div>
<div class="leading-relaxed"> <div class="leading-relaxed">
本服务涉及的文档资料软件商标图案排版设计等以下简称海南天远大数据科技有限公司产品的著作权商标以及其他知识产权或权益均为海南天远大数据科技有限公司享有或海南天远大数据科技有限公司获得授权使用 本服务涉及的文档资料软件商标图案排版设计等以下简称海南海宇大数据有限公司产品的著作权商标以及其他知识产权或权益均为海南海宇大数据有限公司享有或海南海宇大数据有限公司获得授权使用
用户不得出租出借拷贝仿冒复制或修改海南天远大数据科技有限公司产品任何部分或用于其他任何商业目的 用户不得出租出借拷贝仿冒复制或修改海南海宇大数据有限公司产品任何部分或用于其他任何商业目的
也不得将海南天远大数据科技有限公司产品做反向工程反编译或反汇编或以其他方式或工具取得海南天远大数据科技有限公司产品之目标程序或源代码 也不得将海南海宇大数据有限公司产品做反向工程反编译或反汇编或以其他方式或工具取得海南海宇大数据有限公司产品之目标程序或源代码
如果用户违反此约定造成海南天远大数据科技有限公司及其他任何第三方任何损失的甲方应予以全额赔偿 如果用户违反此约定造成海南海宇大数据有限公司及其他任何第三方任何损失的甲方应予以全额赔偿
</div> </div>
</div> </div>
@@ -194,7 +194,7 @@
<!-- 第八部分 --> <!-- 第八部分 -->
<div class="mb-2 font-bold leading-relaxed">违约</div> <div class="mb-2 font-bold leading-relaxed">违约</div>
<div class="leading-relaxed"> <div class="leading-relaxed">
用户不得利用本服务进行任何损害海南天远大数据科技有限公司及其他第三方权益的行为否则海南天远大数据科技有限公司有权立即终止为该用户提供本服务并要求用户赔偿损失由此产生的任何后果由用户自行承担与海南天远大数据科技有限公司无关 用户不得利用本服务进行任何损害海南海宇大数据有限公司及其他第三方权益的行为否则海南海宇大数据有限公司有权立即终止为该用户提供本服务并要求用户赔偿损失由此产生的任何后果由用户自行承担与海南海宇大数据有限公司无关
</div> </div>
</div> </div>
@@ -236,7 +236,7 @@
<div class="mb-2 font-bold leading-relaxed">十二适用法律</div> <div class="mb-2 font-bold leading-relaxed">十二适用法律</div>
<div class="leading-relaxed"> <div class="leading-relaxed">
本协议条款的解释效力及纠纷的解决适用中华人民共和国大陆地区法律法规 本协议条款的解释效力及纠纷的解决适用中华人民共和国大陆地区法律法规
如用户和海南天远大数据科技有限公司之间发生任何争议首先应友好协商解决协商不成的应将争议提交至海南天远大数据科技有限公司注册地有管辖权的人民法院解决 如用户和海南海宇大数据有限公司之间发生任何争议首先应友好协商解决协商不成的应将争议提交至海南海宇大数据有限公司注册地有管辖权的人民法院解决
</div> </div>
</div> </div>
@@ -246,8 +246,8 @@
<div class="leading-relaxed"> <div class="leading-relaxed">
如您对本协议及本服务有任何问题请通过邮箱 如您对本协议及本服务有任何问题请通过邮箱
<text class="text-blue-500"> admin@iieeii.com </text> <text class="text-blue-500"> admin@iieeii.com </text>
通过联系客服联系海南天远大数据科技有限公司进行咨询 通过联系客服联系海南海宇大数据有限公司进行咨询
海南天远大数据科技有限公司会尽最大努力解决您的问题 海南海宇大数据有限公司会尽最大努力解决您的问题
</div> </div>
</div> </div>

View File

@@ -20,94 +20,248 @@
</div> </div>
</div> </div>
<div> <div>
<!-- 提现卡片 --> <!-- 提现方式切换标签 -->
<div class="rounded-xl shadow-lg p-6 mb-4" style="background: linear-gradient(135deg, var(--van-theme-primary-light), rgba(255,255,255,0.8));"> <van-tabs v-if="showTabs" v-model:active="activeTab" class="mb-4" @change="onTabChange">
<div class="flex items-center mb-6"> <van-tab v-if="showAlipay" title="支付宝提现" name="alipay">
<van-icon name="alipay" class="text-xl mr-2" style="color: #1677FF;" /> <div class="rounded-xl shadow-lg p-6 mb-4 mt-4"
<h1 class="text-xl font-bold" style="color: var(--van-text-color);">支付宝提现</h1> style="background: linear-gradient(135deg, var(--van-theme-primary-light), rgba(255,255,255,0.8));">
</div> <div class="flex items-center mb-6">
<van-icon name="alipay" class="text-xl mr-2" style="color: #1677FF;" />
<h1 class="text-xl font-bold" style="color: var(--van-text-color);">支付宝提现</h1>
</div>
<!-- 支付宝账号 --> <!-- 支付宝账号 -->
<div class="mb-6"> <div class="mb-6">
<label class="text-sm mb-2 block" style="color: var(--van-text-color);">支付宝账号</label> <label class="text-sm mb-2 block" style="color: var(--van-text-color);">支付宝账号</label>
<van-field v-model="alipayAccount" placeholder="请输入支付宝账号" <van-field v-model="alipayAccount" placeholder="请输入支付宝账号"
class="flex items-center rounded-lg bg-white/90 backdrop-blur-sm shadow-sm" class="flex items-center rounded-lg bg-white/90 backdrop-blur-sm shadow-sm"
:rules="[{ required: true, message: ' ' }]"> :rules="[{ required: true, message: ' ' }]">
<template #left-icon> <template #left-icon>
<van-icon name="phone-o" style="color: var(--van-text-color-2);" /> <van-icon name="phone-o" style="color: var(--van-text-color-2);" />
</template> </template>
</van-field> </van-field>
<small class="text-xs mt-1 block" style="color: var(--van-text-color-2);">可填写支付宝账户绑定的手机号</small> <small class="text-xs mt-1 block"
style="color: var(--van-text-color-2);">可填写支付宝账户绑定的手机号</small>
</div>
<!-- 支付宝实名姓名 -->
<div class="mb-6">
<label class="text-sm mb-2 block" style="color: var(--van-text-color);">实名姓名</label>
<van-field v-model="alipayRealName" placeholder="请输入支付宝认证姓名"
class="flex items-center rounded-lg bg-white/90 backdrop-blur-sm shadow-sm" :rules="[
{
required: true,
message: ' ',
validator: (val) =>
/^[\u4e00-\u9fa5]{2,4}$/.test(val),
},
]">
<template #left-icon>
<van-icon name="contact-o" style="color: var(--van-text-color-2);" />
</template>
</van-field>
<small class="text-xs mt-1 block"
style="color: var(--van-text-color-2);">请填写支付宝账户认证的真实姓名</small>
</div>
</div>
</van-tab>
<van-tab v-if="showBankcard" title="银行卡提现" name="bankcard">
<div class="rounded-xl shadow-lg p-6 mb-4 mt-4"
style="background: linear-gradient(135deg, var(--van-theme-primary-light), rgba(255,255,255,0.8));">
<div class="flex items-center mb-6">
<van-icon name="credit-pay" class="text-xl mr-2" style="color: #1677FF;" />
<h1 class="text-xl font-bold" style="color: var(--van-text-color);">银行卡提现</h1>
</div>
<!-- 实名信息展示 -->
<div v-if="bankCardInfo.payee_name" class="mb-4 p-4 rounded-lg"
style="background-color: rgba(22, 119, 255, 0.1);">
<div class="text-xs mb-2" style="color: var(--van-text-color-2);">您的实名信息</div>
<div class="text-sm" style="color: var(--van-text-color);">
<div class="mb-1">姓名<span class="font-semibold">{{ bankCardInfo.payee_name }}</span>
</div>
<div>身份证号<span class="font-semibold">{{ formatIdCard(bankCardInfo.id_card) }}</span>
</div>
</div>
<div class="text-xs mt-2" style="color: #f59e0b;">
<van-icon name="warning-o" class="mr-1" />提示银行卡信息需与实名认证信息一致
</div>
</div>
<!-- 银行卡号 -->
<div class="mb-6">
<label class="text-sm mb-2 block" style="color: var(--van-text-color);">银行卡号</label>
<van-field v-model="bankCardNo" type="number" placeholder="请输入银行卡号16-19位"
class="flex items-center rounded-lg bg-white/90 backdrop-blur-sm shadow-sm" :rules="[
{ required: true, message: ' ' },
{ validator: validateBankCardNo, message: ' ' },
]">
<template #left-icon>
<van-icon name="credit-pay" style="color: var(--van-text-color-2);" />
</template>
</van-field>
<small class="text-xs mt-1 block"
style="color: var(--van-text-color-2);">请输入16-19位银行卡号</small>
</div>
<!-- 开户支行 -->
<div class="mb-6">
<label class="text-sm mb-2 block" style="color: var(--van-text-color);">开户支行</label>
<van-field v-model="bankName" placeholder="请输入开户支行"
class="flex items-center rounded-lg bg-white/90 backdrop-blur-sm shadow-sm"
:rules="[{ required: true, message: ' ' }]">
<template #left-icon>
<van-icon name="location-o" style="color: var(--van-text-color-2);" />
</template>
</van-field>
<small class="text-xs mt-1 block"
style="color: var(--van-text-color-2);">例如中国工商银行XX支行</small>
</div>
</div>
</van-tab>
</van-tabs>
<!-- 如果只显示一种方式不显示 tabs直接显示内容 -->
<div v-if="!showTabs">
<!-- 只显示支付宝提现 -->
<div v-if="showAlipay && !showBankcard" class="rounded-xl shadow-lg p-6 mb-4 mt-4"
style="background: linear-gradient(135deg, var(--van-theme-primary-light), rgba(255,255,255,0.8));">
<div class="flex items-center mb-6">
<van-icon name="alipay" class="text-xl mr-2" style="color: #1677FF;" />
<h1 class="text-xl font-bold" style="color: var(--van-text-color);">支付宝提现</h1>
</div>
<!-- 支付宝账号 -->
<div class="mb-6">
<label class="text-sm mb-2 block" style="color: var(--van-text-color);">支付宝账号</label>
<van-field v-model="alipayAccount" placeholder="请输入支付宝账号"
class="flex items-center rounded-lg bg-white/90 backdrop-blur-sm shadow-sm"
:rules="[{ required: true, message: ' ' }]">
<template #left-icon>
<van-icon name="phone-o" style="color: var(--van-text-color-2);" />
</template>
</van-field>
<small class="text-xs mt-1 block" style="color: var(--van-text-color-2);">可填写支付宝账户绑定的手机号</small>
</div>
<!-- 支付宝实名姓名 -->
<div class="mb-6">
<label class="text-sm mb-2 block" style="color: var(--van-text-color);">实名姓名</label>
<van-field v-model="alipayRealName" placeholder="请输入支付宝认证姓名"
class="flex items-center rounded-lg bg-white/90 backdrop-blur-sm shadow-sm" :rules="[
{
required: true,
message: ' ',
validator: (val) =>
/^[\u4e00-\u9fa5]{2,4}$/.test(val),
},
]">
<template #left-icon>
<van-icon name="contact-o" style="color: var(--van-text-color-2);" />
</template>
</van-field>
<small class="text-xs mt-1 block"
style="color: var(--van-text-color-2);">请填写支付宝账户认证的真实姓名</small>
</div>
</div>
<!-- 只显示银行卡提现 -->
<div v-if="showBankcard && !showAlipay" class="rounded-xl shadow-lg p-6 mb-4 mt-4"
style="background: linear-gradient(135deg, var(--van-theme-primary-light), rgba(255,255,255,0.8));">
<div class="flex items-center mb-6">
<van-icon name="credit-pay" class="text-xl mr-2" style="color: #1677FF;" />
<h1 class="text-xl font-bold" style="color: var(--van-text-color);">银行卡提现</h1>
</div>
<!-- 实名信息展示 -->
<div v-if="bankCardInfo.payee_name" class="mb-4 p-4 rounded-lg"
style="background-color: rgba(22, 119, 255, 0.1);">
<div class="text-xs mb-2" style="color: var(--van-text-color-2);">您的实名信息</div>
<div class="text-sm" style="color: var(--van-text-color);">
<div class="mb-1">姓名<span class="font-semibold">{{ bankCardInfo.payee_name }}</span>
</div>
<div>身份证号<span class="font-semibold">{{ formatIdCard(bankCardInfo.id_card) }}</span>
</div>
</div>
<div class="text-xs mt-2" style="color: #f59e0b;">
<van-icon name="warning-o" class="mr-1" />提示银行卡信息需与实名认证信息一致
</div>
</div>
<!-- 银行卡号 -->
<div class="mb-6">
<label class="text-sm mb-2 block" style="color: var(--van-text-color);">银行卡号</label>
<van-field v-model="bankCardNo" type="number" placeholder="请输入银行卡号16-19位"
class="flex items-center rounded-lg bg-white/90 backdrop-blur-sm shadow-sm" :rules="[
{ required: true, message: ' ' },
{ validator: validateBankCardNo, message: ' ' },
]">
<template #left-icon>
<van-icon name="credit-pay" style="color: var(--van-text-color-2);" />
</template>
</van-field>
<small class="text-xs mt-1 block" style="color: var(--van-text-color-2);">请输入16-19位银行卡号</small>
</div>
<!-- 开户支行 -->
<div class="mb-6">
<label class="text-sm mb-2 block" style="color: var(--van-text-color);">开户支行</label>
<van-field v-model="bankName" placeholder="请输入开户支行"
class="flex items-center rounded-lg bg-white/90 backdrop-blur-sm shadow-sm"
:rules="[{ required: true, message: ' ' }]">
<template #left-icon>
<van-icon name="location-o" style="color: var(--van-text-color-2);" />
</template>
</van-field>
<small class="text-xs mt-1 block" style="color: var(--van-text-color-2);">例如中国工商银行XX支行</small>
</div>
</div> </div>
<!-- 支付宝实名姓名 -->
<div class="mb-6">
<label class="text-sm mb-2 block" style="color: var(--van-text-color);">实名姓名</label>
<van-field v-model="realName" placeholder="请输入支付宝认证姓名"
class="flex items-center rounded-lg bg-white/90 backdrop-blur-sm shadow-sm" :rules="[
{
required: true,
message: ' ',
validator: (val) =>
/^[\u4e00-\u9fa5]{2,4}$/.test(val),
},
]">
<template #left-icon>
<van-icon name="contact-o" style="color: var(--van-text-color-2);" />
</template>
</van-field>
<small class="text-xs mt-1 block" style="color: var(--van-text-color-2);">请填写支付宝账户认证的真实姓名</small>
</div>
<!-- 提现金额 -->
<div class="mb-4">
<label class="text-sm mb-2 block" style="color: var(--van-text-color);">提现金额</label>
<van-field v-model.number="amount" type="number" placeholder="请输入提现金额"
class="flex items-center rounded-lg bg-white/90 backdrop-blur-sm shadow-sm" :rules="[
{ required: true, message: ' ' },
{ validator: validateAmount, message: ' ' },
]">
<template #left-icon>
<van-icon name="gold-coin-o" style="color: var(--van-text-color-2);" />
</template>
<template #right-icon> </template>
<template #button>
<van-button size="small" type="primary"
class="rounded-full px-3 shadow-sm"
style="background-color: var(--van-theme-primary); color: white;"
@click="fillMaxAmount">
全部提现
</van-button>
</template>
</van-field>
</div> </div>
<!-- 金额提示 --> <!-- 提现金额共用 -->
<div class="text-sm mb-2" style="color: var(--van-text-color);"> <div class="mb-4">
可提现金额<span class="font-semibold" style="color: var(--van-theme-primary);">¥{{ availableAmount }}</span> <label class="text-sm mb-2 block" style="color: var(--van-text-color);">提现金额</label>
<van-field v-model.number="amount" type="number" placeholder="请输入提现金额"
class="flex items-center rounded-lg bg-white/90 backdrop-blur-sm shadow-sm" :rules="[
{ required: true, message: ' ' },
{ validator: validateAmount, message: ' ' },
]">
<template #left-icon>
<van-icon name="gold-coin-o" style="color: var(--van-text-color-2);" />
</template>
<template #right-icon> </template>
<template #button>
<van-button size="small" type="primary" class="rounded-full px-3 shadow-sm"
style="background-color: var(--van-theme-primary); color: white;" @click="fillMaxAmount">
全部提现
</van-button>
</template>
</van-field>
</div>
<!-- 金额提示 -->
<div class="text-sm mb-2" style="color: var(--van-text-color);">
可提现金额<span class="font-semibold" style="color: var(--van-theme-primary);">¥{{ availableAmount }}</span>
</div>
<!-- 提现规则 -->
<div class="p-4 rounded-xl backdrop-blur-sm mb-4" style="background-color: var(--van-theme-primary-light);">
<div class="flex items-center text-sm mb-2" style="color: var(--van-theme-primary);">
<van-icon name="warning" class="mr-1" />提现须知
</div> </div>
<ul class="text-xs space-y-1" style="color: var(--van-text-color);">
<li>· 每日限提现1次最低50元</li>
<li>· 提现收取6%税收</li>
<li v-if="activeTab === 'alipay'">· 到账时间24小时内</li>
<li v-else>· 到账时间管理员审核后手动转账</li>
</ul>
</div>
<!-- 税收说明 -->
<!-- 提现规则 --> <div class="p-4 rounded-xl backdrop-blur-sm mb-4" style="background-color: rgba(251, 191, 36, 0.1);">
<div class="p-4 rounded-xl backdrop-blur-sm" style="background-color: var(--van-theme-primary-light);"> <div class="flex items-center text-sm mb-2" style="color: #f59e0b;">
<div class="flex items-center text-sm mb-2" style="color: var(--van-theme-primary);"> <van-icon name="info-o" class="mr-1" />税收说明
<van-icon name="warning" class="mr-1" />提现须知
</div>
<ul class="text-xs space-y-1" style="color: var(--van-text-color);">
<li>· 每日限提现1次最低50元</li>
<li>· 提现收取6%税收</li>
<li>· 到账时间24小时内</li>
</ul>
</div> </div>
<div class="text-xs leading-relaxed" style="color: var(--van-text-color);">
<!-- 税收说明 --> <p>根据相关规定提现时将统一收取6%的税收该税收用于相关税费支出</p>
<div class="p-4 rounded-xl backdrop-blur-sm mt-4" style="background-color: rgba(251, 191, 36, 0.1);"> <p class="mt-2" style="color: #f59e0b;"> 税率标准统一按6%收取</p>
<div class="flex items-center text-sm mb-2" style="color: #f59e0b;"> <p style="color: #f59e0b;"> 适用范围所有提现金额</p>
<van-icon name="info-o" class="mr-1" />税收说明
</div>
<div class="text-xs leading-relaxed" style="color: var(--van-text-color);">
<p>根据相关规定提现时将统一收取6%的税收该税收用于相关税费支出</p>
<p class="mt-2" style="color: #f59e0b;"> 税率标准统一按6%收取</p>
<p style="color: #f59e0b;"> 适用范围所有提现金额</p>
</div>
</div> </div>
</div> </div>
@@ -201,11 +355,14 @@
</h2> </h2>
<template v-if="status === 2"> <template v-if="status === 2">
<p class="text-sm" style="color: var(--van-text-color-2);"> <p class="text-sm" style="color: var(--van-text-color-2);">
已向 <span v-if="activeTab === 'alipay'">
<span style="color: var(--van-theme-primary);">{{ 已向
alipayAccount <span style="color: var(--van-theme-primary);">{{ alipayAccount }}</span>
}}</span> 转账
转账 </span>
<span v-else>
提现申请已通过管理员将手动转账
</span>
</p> </p>
<p class="text-2xl font-bold mt-2" style="color: #10b981;"> <p class="text-2xl font-bold mt-2" style="color: #10b981;">
¥{{ amount }} ¥{{ amount }}
@@ -227,12 +384,13 @@
<!-- 辅助文案 --> <!-- 辅助文案 -->
<div class="text-xs space-y-1.5" style="color: var(--van-text-color-2);"> <div class="text-xs space-y-1.5" style="color: var(--van-text-color-2);">
<template v-if="status === 2"> <template v-if="status === 2">
<p>预计24小时内到账</p> <p v-if="activeTab === 'alipay'">预计24小时内到账</p>
<p>可在支付宝账单中查看详情</p> <p v-else>请等待管理员审核并转账</p>
</template> </template>
<template v-if="status === 1"> <template v-if="status === 1">
<p>您的申请已进入处理队列</p> <p v-if="activeTab === 'alipay'">您的申请已进入处理队列</p>
<p>5分钟后结果在提现记录种查看</p> <p v-else>您的申请已提交等待管理员审核</p>
<p>可在提现记录中查看结果</p>
</template> </template>
</div> </div>
@@ -258,12 +416,51 @@
</template> </template>
<script setup> <script setup>
import { ref, computed } from "vue"; import { ref, computed, onBeforeMount } from "vue";
import { showToast } from "vant"; import { showToast } from "vant";
import RealNameAuthDialog from "@/components/RealNameAuthDialog.vue"; import RealNameAuthDialog from "@/components/RealNameAuthDialog.vue";
const agentStore = useAgentStore(); const agentStore = useAgentStore();
const dialogStore = useDialogStore(); const dialogStore = useDialogStore();
// ========== 提现方式配置开关 ==========
// 可以通过环境变量或后端接口控制
// 配置选项:
// - 'alipay': 只显示支付宝提现
// - 'bankcard': 只显示银行卡提现
// - 'both': 显示两种提现方式(默认)
// - 数组形式: ['alipay', 'bankcard'] 或 ['alipay'] 或 ['bankcard']
const WITHDRAW_CONFIG = import.meta.env.VITE_WITHDRAW_METHODS || 'bankcard';
// 解析配置:支持字符串和数组格式
const getWithdrawMethods = () => {
if (Array.isArray(WITHDRAW_CONFIG)) {
return WITHDRAW_CONFIG;
}
if (typeof WITHDRAW_CONFIG === 'string') {
if (WITHDRAW_CONFIG === 'alipay') return ['alipay'];
if (WITHDRAW_CONFIG === 'bankcard') return ['bankcard'];
if (WITHDRAW_CONFIG === 'both') return ['alipay', 'bankcard'];
// 支持逗号分隔的字符串: "alipay,bankcard" 或 "alipay" 或 "bankcard"
return WITHDRAW_CONFIG.split(',').map(s => s.trim()).filter(Boolean);
}
return ['alipay', 'bankcard']; // 默认都显示
};
const enabledMethods = getWithdrawMethods();
const showAlipay = enabledMethods.includes('alipay');
const showBankcard = enabledMethods.includes('bankcard');
const showTabs = showAlipay && showBankcard; // 只有两种都显示时才显示 tabs
// 标签页管理
const getInitialTab = () => {
// 如果只显示一种方式,直接设置为该方式
if (showAlipay && !showBankcard) return 'alipay';
if (showBankcard && !showAlipay) return 'bankcard';
// 如果两种都显示,默认支付宝
return 'alipay';
};
const activeTab = ref(getInitialTab());
// 状态管理 // 状态管理
const status = ref(null); const status = ref(null);
const failMsg = ref(""); const failMsg = ref("");
@@ -272,17 +469,15 @@ const showStatusPopup = ref(false);
const showTaxConfirmPopup = ref(false); const showTaxConfirmPopup = ref(false);
// 税务 // 税务
const taxFreeAmount = ref(0); // 免税额度 const taxFreeAmount = ref(0);
const usedExemptionAmount = ref(0); // 已使用免税额度 const usedExemptionAmount = ref(0);
const remainingExemptionAmount = ref(0); // 剩余免税额度 const remainingExemptionAmount = ref(0);
const taxRate = ref(0); // 税率 const taxRate = ref(0);
// 计算扣税金额和实际到账金额 // 计算扣税金额和实际到账金额
const taxAmount = computed(() => { const taxAmount = computed(() => {
if (!amount.value) return 0; if (!amount.value) return 0;
const withdrawAmount = Number(amount.value); const withdrawAmount = Number(amount.value);
// 统一收取6%手续费,不再有免税额度
return withdrawAmount * 0.06; return withdrawAmount * 0.06;
}); });
@@ -321,17 +516,73 @@ const statusButtonColor = {
2: "#10b981", 2: "#10b981",
3: "#ef4444", 3: "#ef4444",
}; };
const statusMessages = { const statusMessages = {
1: "提现申请处理中,请稍后再查询结果", 1: activeTab.value === 'alipay' ? "提现申请处理中,请稍后再查询结果" : "提现申请已提交,等待管理员审核",
2: "提现成功", 2: "提现成功",
3: "提现失败", 3: "提现失败",
}; };
// 表单数据 // 表单数据 - 支付宝
const alipayAccount = ref(""); const alipayAccount = ref("");
const alipayRealName = ref("");
// 表单数据 - 银行卡
const bankCardNo = ref("");
const bankName = ref("");
const bankCardInfo = ref({
bank_card_no: "",
bank_name: "",
payee_name: "",
id_card: "",
});
// 共用数据
const amount = ref(0); const amount = ref(0);
const availableAmount = ref(null); const availableAmount = ref(null);
const realName = ref("");
// 标签页切换
const onTabChange = (name) => {
if (name === 'bankcard') {
loadBankCardInfo();
}
resetForm();
};
// 加载银行卡信息
const loadBankCardInfo = async () => {
try {
const { data, error } = await useApiFetch("/agent/withdrawal/bank-card/info")
.get()
.json();
if (data.value?.code === 200 && !error.value) {
bankCardInfo.value = data.value.data;
// 自动填充历史银行卡信息
if (data.value.data.bank_card_no) {
bankCardNo.value = data.value.data.bank_card_no;
}
if (data.value.data.bank_name) {
bankName.value = data.value.data.bank_name;
}
}
} catch (err) {
console.error("加载银行卡信息失败", err);
}
};
// 格式化身份证号显示前6位和后4位
const formatIdCard = (idCard) => {
if (!idCard) return "";
if (idCard.length <= 10) return idCard;
return idCard.substring(0, 6) + "****" + idCard.substring(idCard.length - 4);
};
// 验证银行卡号
const validateBankCardNo = (val) => {
if (!val) return false;
const cardNo = String(val).replace(/\s/g, "");
return /^\d{16,19}$/.test(cardNo);
};
const getData = async () => { const getData = async () => {
const { data: res, error } = await useApiFetch("/agent/revenue") const { data: res, error } = await useApiFetch("/agent/revenue")
@@ -346,6 +597,10 @@ const getData = async () => {
onBeforeMount(() => { onBeforeMount(() => {
getData(); getData();
getTax(); getTax();
// 根据配置加载对应的数据
if (showBankcard && (activeTab.value === 'bankcard' || !showTabs)) {
loadBankCardInfo();
}
}); });
// 表单验证 // 表单验证
@@ -355,17 +610,35 @@ const validateAmount = (val) => {
}; };
const validateForm = () => { const validateForm = () => {
if (!realName.value.trim()) { if (activeTab.value === 'alipay') {
showToast("请输入账户实名姓名"); // 支付宝提现验证
return false; if (!alipayRealName.value.trim()) {
} showToast("请输入账户实名姓名");
if (!/^[\u4e00-\u9fa5]{2,4}$/.test(realName.value)) { return false;
showToast("请输入2-4位中文姓名"); }
return false; if (!/^[\u4e00-\u9fa5]{2,4}$/.test(alipayRealName.value)) {
} showToast("请输入2-4位中文姓名");
if (!alipayAccount.value.trim()) { return false;
showToast("请输入支付宝账号"); }
return false; if (!alipayAccount.value.trim()) {
showToast("请输入支付宝账号");
return false;
}
} else {
// 银行卡提现验证
if (!bankCardNo.value.trim()) {
showToast("请输入银行卡号");
return false;
}
const cardNo = String(bankCardNo.value).replace(/\s/g, "");
if (!/^\d{16,19}$/.test(cardNo)) {
showToast("银行卡号格式不正确请输入16-19位数字");
return false;
}
if (!bankName.value.trim()) {
showToast("请输入开户支行");
return false;
}
} }
const amountNum = Number(amount.value); const amountNum = Number(amount.value);
@@ -424,22 +697,44 @@ const handleSubmit = async () => {
const confirmWithdraw = async () => { const confirmWithdraw = async () => {
isSubmitting.value = true; isSubmitting.value = true;
try { try {
const { data, error } = await useApiFetch("/agent/withdrawal") let apiUrl, requestData;
.post({
if (activeTab.value === 'alipay') {
// 支付宝提现
apiUrl = "/agent/withdrawal";
requestData = {
payee_account: alipayAccount.value, payee_account: alipayAccount.value,
amount: amount.value, amount: amount.value,
payee_name: realName.value, payee_name: alipayRealName.value,
}) };
} else {
// 银行卡提现
apiUrl = "/agent/withdrawal/bank-card";
requestData = {
bank_card_no: String(bankCardNo.value).replace(/\s/g, ""),
bank_name: bankName.value,
amount: amount.value,
};
}
const { data, error } = await useApiFetch(apiUrl)
.post(requestData)
.json(); .json();
if (data.value?.code === 200) { if (data.value?.code === 200) {
status.value = data.value.data.status; status.value = data.value.data.status;
showTaxConfirmPopup.value = false; showTaxConfirmPopup.value = false;
showStatusPopup.value = true; showStatusPopup.value = true;
if (status.value === 3) { if (status.value === 3) {
failMsg.value = data.value.data.fail_msg; failMsg.value = data.value.data.fail_msg || "提现失败";
} }
getData();
} else {
showToast(data.value?.msg || "提现失败");
} }
} catch { } catch (err) {
showToast("提现失败,请重试");
console.error("提现失败", err);
} finally { } finally {
isSubmitting.value = false; isSubmitting.value = false;
} }
@@ -455,6 +750,7 @@ const handlePopupAction = () => {
if (status.value === 2) resetPage(); if (status.value === 2) resetPage();
} }
}; };
// 填充最大金额 // 填充最大金额
const fillMaxAmount = () => { const fillMaxAmount = () => {
amount.value = availableAmount.value; amount.value = availableAmount.value;
@@ -463,9 +759,20 @@ const fillMaxAmount = () => {
// 重置页面 // 重置页面
const resetForm = () => { const resetForm = () => {
status.value = null; status.value = null;
alipayAccount.value = ""; if (activeTab.value === 'alipay') {
alipayAccount.value = "";
alipayRealName.value = "";
} else {
// 银行卡提现不清空,保留历史信息
// bankCardNo.value = "";
// bankName.value = "";
}
amount.value = ""; amount.value = "";
realName.value = ""; };
const resetPage = () => {
resetForm();
// 可以跳转到提现记录页面
}; };
</script> </script>

View File

@@ -33,9 +33,14 @@
</span> </span>
</div> </div>
<div class="text-xs text-gray-500"> <div class="text-xs text-gray-500">
<div v-if="item.payee_account"> <div v-if="item.withdraw_type === 1 && item.payee_account">
收款账户{{ maskName(item.payee_account) }} 收款账户{{ maskName(item.payee_account) }}
</div> </div>
<div v-if="item.withdraw_type === 2">
<div v-if="item.bank_card_no">银行卡号{{ maskBankCard(item.bank_card_no) }}</div>
<div v-if="item.bank_name">开户支行{{ item.bank_name }}</div>
<div v-if="item.payee_name">收款人{{ item.payee_name }}</div>
</div>
<div v-if="item.remark">备注{{ item.remark }}</div> <div v-if="item.remark">备注{{ item.remark }}</div>
</div> </div>
</div> </div>
@@ -91,6 +96,14 @@ const maskName = (name) => {
return name.substring(0, 3) + "****" + name.substring(7); return name.substring(0, 3) + "****" + name.substring(7);
}; };
// 银行卡号脱敏处理
const maskBankCard = (cardNo) => {
if (!cardNo || typeof cardNo !== "string") return "";
const card = cardNo.replace(/\s/g, "");
if (card.length <= 8) return card;
return card.substring(0, 4) + " **** **** " + card.substring(card.length - 4);
};
// 状态转中文 // 状态转中文
const statusToChinese = (status) => { const statusToChinese = (status) => {
return statusConfig[status]?.chinese || "未知状态"; return statusConfig[status]?.chinese || "未知状态";

View File

@@ -15,8 +15,8 @@ export default defineConfig({
strictPort: true, // 如果端口被占用则抛出错误而不是使用下一个可用端口 strictPort: true, // 如果端口被占用则抛出错误而不是使用下一个可用端口
proxy: { proxy: {
"/api/v1": { "/api/v1": {
// target: "http://127.0.0.1:8888", // 本地接口地址 target: "http://127.0.0.1:8888", // 本地接口地址
target: "https://www.tianyuandb.com", // 本地接口地址 // target: "https://www.tianyuandb.com", // 本地接口地址
changeOrigin: true, changeOrigin: true,
}, },
}, },