a
This commit is contained in:
@@ -596,7 +596,7 @@ watch([reportData, componentRiskScores], () => {
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div>海南天远大数据科技有限公司版权所有</div>
|
<div>海南海宇大数据有限公司版权所有</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -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,
|
||||||
}) + ' 万元'
|
}) + " 元"
|
||||||
)
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取案件状态样式
|
// 获取案件状态样式
|
||||||
|
|||||||
@@ -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,
|
||||||
}) + " 万元"
|
}) + " 元"
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -207,7 +207,7 @@ const h5WeixinGetCode = () => {
|
|||||||
<template>
|
<template>
|
||||||
<RouterView />
|
<RouterView />
|
||||||
|
|
||||||
<!-- <WechatOverlay /> -->
|
<WechatOverlay />
|
||||||
<BindPhoneDialog />
|
<BindPhoneDialog />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div>海南天远大数据科技有限公司版权所有</div>
|
<div>海南海宇大数据有限公司版权所有</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -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,
|
||||||
}) + ' 万元'
|
}) + " 元"
|
||||||
)
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取案件状态样式
|
// 获取案件状态样式
|
||||||
|
|||||||
@@ -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,
|
||||||
}) + " 万元"
|
}) + " 元"
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
404
src/ui/FLXG7E8F/components/CaseDetail.vue
Normal file
404
src/ui/FLXG7E8F/components/CaseDetail.vue
Normal 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>
|
||||||
|
|
||||||
285
src/ui/FLXG7E8F/components/StatisticsOverview.vue
Normal file
285
src/ui/FLXG7E8F/components/StatisticsOverview.vue
Normal 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
457
src/ui/FLXG7E8F/index.vue
Normal 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>
|
||||||
|
|
||||||
316
src/ui/FLXG7E8F/utils/lawsuitUtils.js
Normal file
316
src/ui/FLXG7E8F/utils/lawsuitUtils.js
Normal 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],
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -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日起实施,公司将根据实施情况对本制度进行修正和调整。
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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"> </p>
|
<p class="text-left"> </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
|
||||||
</span><span class="text-black">海南天远大数据科技有限公司</span><span
|
</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">进行以公众号、小程序、APP、web页面(以下简称平台)或标准接口形式为客户提供的服务,协助客户完成信息的整理、管理等业务流程。</span>
|
class="text-black">进行以公众号、小程序、APP、web页面(以下简称平台)或标准接口形式为客户提供的服务,协助客户完成信息的整理、管理等业务流程。</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
|
||||||
根据本合同约定的条件和条款,甲方使用乙方提供的【</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></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
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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">
|
||||||
(二)本《隐私政策》的标题仅为方便及阅读而设,并不影响正文其中任何规定的含义或解释。
|
(二)本《隐私政策》的标题仅为方便及阅读而设,并不影响正文其中任何规定的含义或解释。
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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 || "未知状态";
|
||||||
|
|||||||
@@ -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,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user