This commit is contained in:
2025-12-18 15:52:02 +08:00
parent 70b611a328
commit 994f16f8bf
14 changed files with 98 additions and 11559 deletions

3
.gitignore vendored
View File

@@ -228,4 +228,5 @@ secrets/
*.pem *.pem
*.key *.key
*.cert *.cert
*.md
!README.md

217
README.md
View File

@@ -1,137 +1,88 @@
# 报告查看器 - 独立 Vue3 项目 ## 报告查看器report-viewer
这是一个独立的 Vue3 项目,用于展示报告组件。项目使用本地 JSON 文件(`example.json`)作为数据源,不依赖网络请求 一个基于 **Vue 3 + Vite + Tailwind CSS + Vant** 的移动端报告查看器,用于展示各类风控 / 报告数据(如司法涉诉、消费交易特征等),支持图表可视化和多页报告浏览
## 📋 已包含的组件
1. **DWBG6A2C** - 司南报告(包含所有子模块)
2. **FLXG0V4B** - 司法涉诉
3. **QYGL3F8E** - 人企关系加强版(包含所有子模块)
4. **JRZQ4B6C** - 信贷表现
5. **JRZQ09J8** - 收入评估
6. **QCXG9P1C** - 名下车辆
7. **DWBG8B4D** - 谛听多维报告(包含所有子模块)
## 🚀 快速开始
### 1. 安装依赖
```bash
cd report-viewer
npm install
# 或
pnpm install
# 或
yarn install
```
### 2. 启动开发服务器
```bash
npm run dev
```
访问:`http://localhost:3000`
### 3. 构建生产版本
```bash
npm run build
```
## 📁 项目结构
```
report-viewer/
├── public/
│ └── example.json # 示例数据文件
├── src/
│ ├── components/ # 基础组件
│ │ ├── BaseReport.vue # ⭐ 核心组件
│ │ ├── GaugeChart.vue
│ │ ├── ShareReportButton.vue
│ │ └── ...
│ ├── views/
│ │ └── Report.vue # ⭐ 报告页面
│ ├── ui/ # ⭐ 业务组件
│ │ ├── DWBG6A2C/ # 司南报告
│ │ ├── CFLXG0V4B/ # 司法涉诉
│ │ ├── CQYGL3F8E/ # 人企关系加强版
│ │ ├── JRZQ4B6C/ # 信贷表现
│ │ ├── JRZQ09J8/ # 收入评估
│ │ ├── CQCXG9P1C.vue # 名下车辆
│ │ └── CDWBG8B4D/ # 谛听多维报告
│ ├── assets/ # 样式和图片
│ └── composables/ # 工具函数(已移除网络请求)
├── package.json
├── vite.config.js
└── tailwind.config.js
```
## ⚙️ 配置说明
### 数据源
项目从 `public/example.json` 加载示例数据。可以直接修改该文件来更新显示的内容。
### 已移除的功能
- ✅ 产品背景图片(已移除背景图显示)
- ✅ 网络请求(改为从本地 JSON 文件加载)
- ✅ API 调用ShareReportButton 在示例模式下不进行网络请求)
## 📝 使用说明
1. 启动项目后,会自动加载 `public/example.json` 中的数据
2. 数据会自动排序并显示在报告页面中
3. 所有组件都会根据数据进行渲染
## 🔧 注意事项
1. **图片资源**:确保所有必要的图片文件已复制到 `src/assets/images/` 目录
2. **样式依赖**:项目依赖 Tailwind CSS 和 Vant UI确保正确引入
3. **浏览器兼容**需要现代浏览器支持ES2015+
4. **数据格式**`example.json` 必须符合组件期望的数据结构
## 📦 依赖说明
### 核心依赖
- **vue** ^3.5.12 - Vue 框架
- **vue-router** ^4.4.5 - 路由管理
- **vant** ^4.9.9 - UI 组件库
- **echarts** ^5.5.1 - 图表库
- **vue-echarts** ^7.0.3 - Vue ECharts 封装
- **@vueuse/core** ^11.3.0 - Vue 工具库
- **lodash** ^4.17.21 - 工具函数库
### 开发依赖
- **vite** ^5.4.10 - 构建工具
- **tailwindcss** ^3.4.15 - CSS 框架
- **@vitejs/plugin-vue** - Vite Vue 插件
- **unplugin-auto-import** - 自动导入插件
- **unplugin-vue-components** - 自动组件导入插件
## 🐛 常见问题
### Q: 图片加载失败?
A: 确保图片文件已复制到 `src/assets/images/report/` 目录
### Q: 样式不生效?
A: 确保 `tailwind.config.js` 中包含了正确的 content 路径
### Q: 数据不显示?
A: 检查 `public/example.json` 文件格式是否正确,确保数据符合组件期望的结构
## 📞 技术支持
如有问题,请检查:
1. 控制台错误信息
2. `public/example.json` 文件是否存在且格式正确
3. 依赖是否正确安装
4. 文件路径是否正确
--- ---
**提示**:这是一个独立的 Vue3 项目,使用本地 JSON 文件作为数据源,无需后端 API 支持。 ## 功能概览
- **报告展示**:按模块展示多种报告内容与字段说明
- **图表可视化**:基于 `ECharts``vue-echarts` 渲染图表
- **移动端 UI**:使用 `Vant 4` 组件库,适配手机端浏览体验
- **组合式 API**:使用 Vue 3 组合式写法封装业务逻辑(如风险提示 hook 等)
---
## 技术栈
- **框架**Vue 3
- **构建工具**Vite
- **UI 组件库**Vant 4
- **样式**Tailwind CSS、Sass
- **数据请求**Axios
- **图表**ECharts、vue-echarts
---
## 环境要求
- **Node.js**:建议 >= 18
- **包管理器**:推荐使用 `pnpm`(项目中已指定 `pnpm` 版本)
---
## 安装与运行
```bash
# 安装依赖(推荐)
pnpm install
# 如果使用 npm / yarn也可以
# npm install
# 或
# yarn install
```
### 本地开发
```bash
pnpm dev
```
启动后,按终端提示在浏览器中访问对应地址(通常为 `http://localhost:5173`)。
### 打包构建
```bash
pnpm build
```
构建产物会输出到 `dist` 目录,可部署到任意静态资源服务器。
### 预览构建结果
```bash
pnpm preview
```
---
## 目录结构(简要)
以下仅列出与前端页面关系最紧密的部分:
- `src/main.js`:应用入口文件,挂载 Vue 应用
- `src/views/Report.vue`:报告主页面
- `src/ui/`:报告相关的 UI 组件(如 `CIVYZ9A2B.vue` 等)
- `src/composables/`:组合式函数(如 `useRiskNotifier` 等)
- `tailwind.config.js`Tailwind CSS 配置
---
## 开发说明
- 若需新增报告模块,建议:
-`src/ui/` 下新增对应的 Vue 组件
-`Report.vue` 中注册或路由中引用新组件
- 如需共享逻辑,可在 `src/composables/` 中抽离成 hook
- 图表相关逻辑优先封装在单独组件或 composable 中,避免在视图中直接写大量配置。

32
d.md
View File

@@ -1,32 +0,0 @@
## 请求参数
| 参数code | 参数名称 | 描述&备注 |
| --------- | -------- | --------- |
| name | 姓名 | **必填** |
| bank_card | 银行卡号 | **必填** |
| id_card | 身份证号 | **必填** |
| mobile_no | 手机号 | 选填 |
## 返回参数
| 参数code | 参数名称 | 描述&备注 |
| ------------ | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| name | 姓名 | - |
| cardNo | 身份证号 | - |
| cardId | 卡号 | - |
| phone | 手机号 | - |
| respCode | 验证结果代码 | 详见响应码说明 |
| respDesc | 验证结果信息 | 详见响应码说明 |
| respDetail | 验证结果详情 | 验证不通过时的详细说明<br>• 卡状态异常,请换卡重试或联系发卡行<br>• 无效卡号或卡状态异常,请换卡重试或联系发卡行 |
| cardType | 卡类型 | 可能值:<br>• 贷记卡<br>• 准贷记卡<br>• 预付卡<br>• 借记卡 |
| cardCategory | 卡等级 | 可能值:<br>• 银联支付标记<br>• 无限卡<br>• 准贷记卡<br>• 社保卡<br>• 电子现金卡<br>• 公务卡<br>• 预付卡<br>• 普卡<br>• 白金卡<br>• 钻石卡<br>• 借记卡<br>• 金卡<br>• 小额贷款卡<br>• 信用卡 |
| cardName | 银行名称 | - |
## 响应码说明 (respCode & respDesc)
| respCode | respDesc |
| -------- | ---------- |
| 2000 | 认证一致 |
| 2001 | 认证不一致 |

206
demo.html
View File

@@ -1,206 +0,0 @@
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<title>系统流 卡牌对战 Demo</title>
<style>
body {
background: #111;
color: #eee;
font-family: sans-serif;
padding: 20px;
}
#log {
background: #222;
padding: 10px;
height: 250px;
overflow-y: auto;
border: 1px solid #444;
margin-bottom: 10px;
white-space: pre-line;
}
.card {
display: inline-block;
background: #333;
border: 1px solid #666;
padding: 10px;
margin: 5px;
cursor: pointer;
width: 160px;
}
.card:hover {
background: #444;
}
</style>
</head>
<body>
<h2>《系统流:校园日常攻略》卡牌演示 Demo</h2>
<div id="stats"></div>
<div id="log"></div>
<h3>我的手牌</h3>
<div id="cards"></div>
<button onclick="nextTurn()" style="margin-top: 10px">重新抽卡</button>
<script>
/////////////////////////////////////////////////////
// 游戏初始配置
/////////////////////////////////////////////////////
let player = {
favor: 0, // 女生对玩家好感
energy: 100,
};
let npc = {
favor: 30, // 初始好感
};
let systemTask = {
desc: "让对方情绪波动 +10",
target: 10,
progress: 0,
};
// 卡牌池 —— 演示可後续扩展
const cardPool = [
{
name: "夸赞(行动卡)",
type: "action",
effect: () => changeFavor(3),
desc: "+3 好感",
},
{
name: "冷幽默(行动卡)",
type: "action",
effect: () => changeFavor(5),
desc: "+5 好感",
},
{
name: "装酷(行动卡)",
type: "action",
effect: () => changeFavor(1),
desc: "+1 好感",
},
{
name: "系统加持(系统卡)",
type: "system",
effect: () =>
changeFavor(Math.floor(Math.random() * 6) + 2),
desc: "随机 +2~7 好感",
},
{
name: "语言暴击(系统卡)",
type: "system",
effect: () => changeFavor(8),
desc: "+8 好感",
},
{
name: "冷场(情绪负面)",
type: "bad",
effect: () => changeFavor(-4),
desc: "-4 好感",
},
];
// 当前手牌
let hand = [];
/////////////////////////////////////////////////////
// 功能函数
/////////////////////////////////////////////////////
// 抽牌
function drawCards(num = 3) {
hand = [];
for (let i = 0; i < num; i++) {
let c =
cardPool[Math.floor(Math.random() * cardPool.length)];
hand.push(c);
}
render();
}
// 使用卡牌
function playCard(index) {
let card = hand[index];
writeLog(`你使用了【${card.name}】 → ${card.desc}`);
card.effect();
systemCheck();
npcAction();
drawCards();
}
// 修改好感 / 数值
function changeFavor(v) {
npc.favor += v;
systemTask.progress += v;
if (npc.favor < 0) npc.favor = 0;
render();
}
// 系统任务检测
function systemCheck() {
if (systemTask.progress >= systemTask.target) {
writeLog(`📢 系统任务达成:${systemTask.desc}`);
writeLog(`奖励:获得 500万软妹币精神上的`);
systemTask = {
desc: "让女生惊讶一次好感一次增长≥6",
target: 6,
progress: 0,
};
}
}
// NPC 回合逻辑(简单演示)
function npcAction() {
let r = Math.random();
if (r < 0.5) {
writeLog("女生回应:嗯……还不错。");
} else if (r < 0.8) {
writeLog("女生:你怎么突然这样?(情绪波动+3");
changeFavor(3);
} else {
writeLog("女生:无语……你是系统选中的人吗?(好感-2");
changeFavor(-2);
}
}
// 日志输出
function writeLog(t) {
let log = document.getElementById("log");
log.innerHTML += t + "\n";
log.scrollTop = log.scrollHeight;
}
// UI 渲染
function render() {
document.getElementById("stats").innerHTML =
`女生好感:${npc.favor} ` +
`任务:${systemTask.desc}(当前进度 ${systemTask.progress}/${systemTask.target}`;
let cardDiv = document.getElementById("cards");
cardDiv.innerHTML = "";
hand.forEach((c, i) => {
let div = document.createElement("div");
div.className = "card";
div.innerHTML = `<b>${c.name}</b><br>${c.desc}`;
div.onclick = () => playCard(i);
cardDiv.appendChild(div);
});
}
// 下一回合(抽新卡)
function nextTurn() {
drawCards();
}
/////////////////////////////////////////////////////
// 开始
/////////////////////////////////////////////////////
writeLog("系统启动:新手引导中……");
writeLog("任务:让对方情绪波动 +10");
drawCards();
</script>
</body>
</html>

View File

@@ -1,695 +0,0 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>天选打工人 - 系统对战Demo</title>
<style>
:root {
--primary: #00ff9d; /* 赛博绿 */
--danger: #ff0055; /* 故障红 */
--bg: #0a0a0a;
--card-bg: #1a1a1a;
--text: #e0e0e0;
}
body {
font-family: "Consolas", "Courier New", monospace;
background-color: var(--bg);
color: var(--text);
margin: 0;
padding: 0;
height: 100vh;
display: flex;
flex-direction: column;
overflow: hidden;
}
/* --- 顶部:敌人区域 --- */
#enemy-area {
flex: 2;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
border-bottom: 1px solid #333;
position: relative;
}
.avatar {
width: 100px;
height: 100px;
background: #333;
border: 2px solid var(--danger);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 40px;
margin-bottom: 10px;
transition: transform 0.1s;
}
.hp-bar-container {
width: 200px;
height: 20px;
background: #333;
border: 1px solid #555;
position: relative;
}
.hp-bar-fill {
height: 100%;
background: var(--danger);
width: 100%;
transition: width 0.3s ease-out;
}
.intent-bubble {
margin-top: 10px;
background: #222;
padding: 5px 10px;
border-radius: 10px;
border: 1px solid var(--danger);
color: var(--danger);
font-size: 12px;
}
/* --- 中间:战斗日志 (LLM文字流) --- */
#battle-log {
flex: 3;
overflow-y: auto;
padding: 20px;
background: rgba(0, 20, 10, 0.5);
border-bottom: 1px solid #333;
font-size: 14px;
line-height: 1.6;
}
.log-entry {
margin-bottom: 8px;
opacity: 0.8;
}
.log-system {
color: var(--primary);
font-weight: bold;
}
.log-player {
color: #fff;
}
.log-enemy {
color: var(--danger);
}
.log-desc {
color: #888;
font-style: italic;
font-size: 0.9em;
margin-left: 10px;
display: block;
}
/* --- 底部:玩家区域 --- */
#player-area {
flex: 3;
display: flex;
flex-direction: column;
background: #111;
padding: 10px;
}
#stats-bar {
display: flex;
justify-content: space-around;
padding: 10px;
background: #000;
border: 1px solid #333;
margin-bottom: 10px;
}
.stat-item {
display: flex;
align-items: center;
gap: 5px;
}
.icon {
font-size: 1.2em;
}
/* --- 卡牌区域 --- */
#hand-container {
display: flex;
justify-content: center;
gap: 10px;
flex-grow: 1;
align-items: center;
}
.card {
width: 120px;
height: 160px;
background: var(--card-bg);
border: 1px solid var(--primary);
border-radius: 8px;
padding: 10px;
display: flex;
flex-direction: column;
justify-content: space-between;
cursor: pointer;
transition: transform 0.2s, box-shadow 0.2s;
user-select: none;
position: relative;
}
.card:hover {
transform: translateY(-20px) scale(1.05);
box-shadow: 0 0 15px rgba(0, 255, 157, 0.3);
z-index: 10;
}
.card-cost {
background: var(--primary);
color: #000;
width: 25px;
height: 25px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-weight: bold;
font-size: 14px;
}
.card-name {
font-weight: bold;
color: var(--primary);
font-size: 14px;
text-align: center;
margin-top: 5px;
}
.card-desc {
font-size: 11px;
color: #aaa;
text-align: center;
}
.card-type-attack {
border-color: #ff4444;
}
.card-type-skill {
border-color: #4488ff;
}
.card-type-money {
border-color: #ffd700;
box-shadow: 0 0 5px rgba(255, 215, 0, 0.2);
}
/* 按钮 */
#end-turn-btn {
position: absolute;
right: 20px;
bottom: 100px;
padding: 15px 30px;
background: #333;
color: white;
border: 1px solid #666;
cursor: pointer;
font-family: inherit;
font-weight: bold;
}
#end-turn-btn:hover {
background: #444;
}
/* 动画特效 */
@keyframes shake {
0% {
transform: translate(1px, 1px) rotate(0deg);
}
10% {
transform: translate(-1px, -2px) rotate(-1deg);
}
20% {
transform: translate(-3px, 0px) rotate(1deg);
}
30% {
transform: translate(3px, 2px) rotate(0deg);
}
40% {
transform: translate(1px, -1px) rotate(1deg);
}
50% {
transform: translate(-1px, 2px) rotate(-1deg);
}
60% {
transform: translate(-3px, 1px) rotate(0deg);
}
70% {
transform: translate(3px, 1px) rotate(-1deg);
}
80% {
transform: translate(-1px, -1px) rotate(1deg);
}
90% {
transform: translate(1px, 2px) rotate(0deg);
}
100% {
transform: translate(1px, -2px) rotate(-1deg);
}
}
.shake-anim {
animation: shake 0.5s;
}
.damage-text {
position: absolute;
color: red;
font-size: 30px;
font-weight: bold;
animation: floatUp 1s forwards;
}
@keyframes floatUp {
0% {
transform: translateY(0);
opacity: 1;
}
100% {
transform: translateY(-50px);
opacity: 0;
}
}
/* 状态提示 */
#game-over {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.9);
display: none;
flex-direction: column;
align-items: center;
justify-content: center;
z-index: 100;
}
#game-over h1 {
color: var(--primary);
font-size: 40px;
}
</style>
</head>
<body>
<div id="enemy-area">
<div class="avatar" id="enemy-avatar">🤡</div>
<h3 id="enemy-name">势利眼班长</h3>
<div class="hp-bar-container">
<div class="hp-bar-fill" id="enemy-hp-bar"></div>
</div>
<div style="margin-top: 5px; font-size: 12px">
面子 (HP): <span id="enemy-hp-text">80</span>/80
</div>
<div class="intent-bubble" id="enemy-intent">
💬 正在酝酿一句很难听的话 (10点伤害)
</div>
</div>
<div id="battle-log">
<div class="log-entry log-system">> 系统初始化完成...</div>
<div class="log-entry log-system">> 目标锁定:[势利眼班长]</div>
<div class="log-entry log-system">> 任务:让他当众出丑。</div>
</div>
<div id="player-area">
<div id="stats-bar">
<div class="stat-item" style="color: #ff4444">
<span class="icon">❤️</span> 面子:
<span id="player-hp">100</span>
</div>
<div class="stat-item" style="color: #4488ff">
<span class="icon">🛡️</span> 厚脸皮:
<span id="player-block">0</span>
</div>
<div class="stat-item" style="color: #00ff9d">
<span class="icon"></span> 精力:
<span id="player-energy">3</span>/3
</div>
<div class="stat-item" style="color: #ffd700">
<span class="icon">💰</span> 余额: ¥<span id="player-money"
>5000</span
>
</div>
</div>
<div id="hand-container"></div>
</div>
<button id="end-turn-btn" onclick="endTurn()">结束回合</button>
<div id="game-over">
<h1 id="game-result">任务完成</h1>
<button
onclick="location.reload()"
style="padding: 10px 20px; cursor: pointer"
>
重新开始
</button>
</div>
<script>
/* --- 1. 游戏数据设定 (配置表) --- */
const GAME_STATE = {
player: {
hp: 100,
maxHp: 100,
block: 0,
energy: 3,
maxEnergy: 3,
money: 5000,
},
enemy: {
name: "势利眼班长",
hp: 80,
maxHp: 80,
nextDmg: 10,
avatar: "🤡",
},
hand: [],
deck: [],
turn: 1,
isGameOver: false,
};
// 模拟 LLM 的文案库 (实际开发中这里接 API)
const LLM_TEXTS = {
start: [
"班长看了看你的衣服,露出了鄙夷的眼神。",
"系统检测到装逼场力波动,请宿主做好准备。",
],
atk_normal: [
"你冷冷一笑:'这就是你的实力?'",
"你指出了他话里的逻辑漏洞,全场鸦雀无声。",
"你说:'去年你借我的五百块还没还呢。'",
],
atk_money: [
"你打开手机银行,语音播报:'到账一百万元'。",
"你随手掏出一把车钥匙扔在桌上:'挪下车。'",
"你用钱扇了扇风:'这屋里穷酸气太重。'",
],
defend: [
"你假装在回消息,完全无视了他的废话。",
"你使用了【左耳进右耳出】,他的嘲讽无效。",
"你微笑着看着他,就像看着一只猴子。",
],
enemy_atk: [
"班长嘲笑道:'听说你还在租房住?'",
"班长向大家展示他的劳力士绿水鬼。",
"班长说:'服务员,给这位加把椅子,别让他站着。'",
],
};
// 卡牌数据库 (原型)
const CARD_DATABASE = [
{
id: "atk_1",
name: "阴阳怪气",
type: "attack",
cost: 1,
val: 8,
desc: "造成 8 点面子伤害",
flavorType: "atk_normal",
},
{
id: "atk_2",
name: "揭露黑历史",
type: "attack",
cost: 2,
val: 18,
desc: "造成 18 点面子伤害",
flavorType: "atk_normal",
},
{
id: "def_1",
name: "装聋作哑",
type: "skill",
cost: 1,
val: 8,
desc: "获得 8 点厚脸皮(护盾)",
flavorType: "defend",
},
{
id: "money_1",
name: "钞能力打击",
type: "money",
cost: 1,
val: 25,
moneyCost: 500,
desc: "消耗¥500造成 25 点伤害",
flavorType: "atk_money",
},
{
id: "def_2",
name: "战术喝水",
type: "skill",
cost: 0,
val: 4,
desc: "获得 4 点厚脸皮(0费)",
flavorType: "defend",
},
];
/* --- 2. 核心逻辑函数 --- */
function initGame() {
updateUI();
startPlayerTurn();
log(getRandomText(LLM_TEXTS.start), "system");
}
function startPlayerTurn() {
GAME_STATE.player.energy = GAME_STATE.player.maxEnergy;
GAME_STATE.player.block = 0; // 回合开始护盾清零(简化规则)
// 简单的抽牌逻辑:随机抽 4 张
GAME_STATE.hand = [];
for (let i = 0; i < 4; i++) {
const randomCard =
CARD_DATABASE[
Math.floor(Math.random() * CARD_DATABASE.length)
];
// 深拷贝以防止修改原数据
GAME_STATE.hand.push({
...randomCard,
uid: Date.now() + i,
});
}
updateUI();
log(`=== 第 ${GAME_STATE.turn} 回合 ===`, "system");
}
function playCard(index) {
if (GAME_STATE.isGameOver) return;
const card = GAME_STATE.hand[index];
const player = GAME_STATE.player;
// 1. 检查资源
if (player.energy < card.cost) {
log("精力不足!", "system");
shakeScreen("stats-bar");
return;
}
if (card.type === "money" && player.money < card.moneyCost) {
log("余额不足!无法使用钞能力!", "system");
return;
}
// 2. 扣除资源
player.energy -= card.cost;
if (card.type === "money") player.money -= card.moneyCost;
// 3. 执行效果
let logMsg = "";
if (card.type === "attack" || card.type === "money") {
dealDamage(card.val);
logMsg = getRandomText(LLM_TEXTS[card.flavorType]);
} else if (card.type === "skill") {
player.block += card.val;
logMsg = getRandomText(LLM_TEXTS[card.flavorType]);
}
// 4. 移除手牌 & 更新UI
GAME_STATE.hand.splice(index, 1);
log(`你使用了【${card.name}`, "player");
log(logMsg, "desc");
updateUI();
checkWin();
}
function dealDamage(amount) {
GAME_STATE.enemy.hp -= amount;
if (GAME_STATE.enemy.hp < 0) GAME_STATE.enemy.hp = 0;
// 视觉特效
const enemyEl = document.getElementById("enemy-avatar");
enemyEl.classList.add("shake-anim");
setTimeout(() => enemyEl.classList.remove("shake-anim"), 500);
// 飘字
showFloatingText(`-${amount}`);
}
function endTurn() {
if (GAME_STATE.isGameOver) return;
// 敌人行动
setTimeout(() => {
enemyAction();
}, 500);
}
function enemyAction() {
const dmg = GAME_STATE.enemy.nextDmg;
const player = GAME_STATE.player;
// 扣除护盾逻辑
let actualDmg = dmg;
if (player.block >= actualDmg) {
player.block -= actualDmg;
actualDmg = 0;
} else {
actualDmg -= player.block;
player.block = 0;
}
player.hp -= actualDmg;
log(getRandomText(LLM_TEXTS.enemy_atk), "enemy");
if (actualDmg > 0) {
log(`> 受到 ${actualDmg} 点精神伤害!`, "enemy");
document.body.classList.add("shake-anim"); // 全屏震动
setTimeout(
() => document.body.classList.remove("shake-anim"),
500
);
} else {
log(`> 你的厚脸皮完全抵挡了伤害!`, "system");
}
// 随机生成下回合意图
GAME_STATE.enemy.nextDmg = Math.floor(Math.random() * 10) + 5;
GAME_STATE.turn++;
updateUI();
checkLoss();
if (!GAME_STATE.isGameOver) {
setTimeout(startPlayerTurn, 1000);
}
}
/* --- 3. 辅助函数 --- */
function checkWin() {
if (GAME_STATE.enemy.hp <= 0) {
GAME_STATE.isGameOver = true;
document.getElementById("game-result").innerText =
"打脸成功!奖励 ¥10000";
document.getElementById("game-result").style.color =
"#00ff9d";
document.getElementById("game-over").style.display = "flex";
}
}
function checkLoss() {
if (GAME_STATE.player.hp <= 0) {
GAME_STATE.isGameOver = true;
document.getElementById("game-result").innerText =
"任务失败:你社死了";
document.getElementById("game-result").style.color =
"#ff0055";
document.getElementById("game-over").style.display = "flex";
}
}
function updateUI() {
// 敌人 UI
const hpPercent =
(GAME_STATE.enemy.hp / GAME_STATE.enemy.maxHp) * 100;
document.getElementById(
"enemy-hp-bar"
).style.width = `${hpPercent}%`;
document.getElementById("enemy-hp-text").innerText =
GAME_STATE.enemy.hp;
document.getElementById(
"enemy-intent"
).innerText = `💬 准备造成 ${GAME_STATE.enemy.nextDmg} 点伤害`;
// 玩家 UI
document.getElementById("player-hp").innerText =
GAME_STATE.player.hp;
document.getElementById("player-block").innerText =
GAME_STATE.player.block;
document.getElementById("player-energy").innerText =
GAME_STATE.player.energy;
document.getElementById("player-money").innerText =
GAME_STATE.player.money;
// 渲染手牌
const handContainer = document.getElementById("hand-container");
handContainer.innerHTML = "";
GAME_STATE.hand.forEach((card, index) => {
const cardEl = document.createElement("div");
cardEl.className = `card card-type-${card.type}`;
cardEl.onclick = () => playCard(index);
cardEl.innerHTML = `
<div class="card-cost">${card.cost}</div>
<div class="card-name">${card.name}</div>
<div class="card-desc">${card.desc}</div>
`;
handContainer.appendChild(cardEl);
});
}
function log(text, type) {
const logArea = document.getElementById("battle-log");
const entry = document.createElement("div");
entry.className = `log-entry log-${type}`;
entry.innerText = text;
logArea.appendChild(entry);
logArea.scrollTop = logArea.scrollHeight;
}
function getRandomText(array) {
return array[Math.floor(Math.random() * array.length)];
}
function showFloatingText(text) {
const enemyArea = document.getElementById("enemy-area");
const el = document.createElement("div");
el.className = "damage-text";
el.innerText = text;
el.style.left = "50%";
el.style.top = "50%";
enemyArea.appendChild(el);
setTimeout(() => el.remove(), 1000);
}
function shakeScreen(elementId) {
const el = document.getElementById(elementId);
el.classList.add("shake-anim");
setTimeout(() => el.classList.remove("shake-anim"), 500);
}
// 启动游戏
initGame();
</script>
</body>
</html>

View File

@@ -1,27 +0,0 @@
<script setup>
// 接收 props
const props = defineProps({
title: String,
})
const titleClass = computed(() => {
// 统一使用主题色
return 'bg-primary'
})
</script>
<template>
<div class="relative">
<!-- 标题部分 -->
<div :class="titleClass" class="inline-block rounded-lg px-2 py-1 text-white font-bold shadow-md">
{{ title }}
</div>
<!-- 左上角修饰 -->
<div
class="absolute left-0 top-0 h-4 w-4 transform rounded-full bg-white shadow-md -translate-x-2 -translate-y-2" />
</div>
</template>
<style scoped></style>

File diff suppressed because it is too large Load Diff

View File

@@ -1,31 +1,20 @@
import './assets/main.css' import "./assets/main.css";
import { createApp } from 'vue' import { createApp } from "vue";
import { createRouter, createWebHistory } from 'vue-router' import { createRouter, createWebHistory } from "vue-router";
import App from './App.vue' import App from "./App.vue";
const router = createRouter({ const router = createRouter({
history: createWebHistory(), history: createWebHistory(),
routes: [ routes: [
{ {
path: '/', path: "/",
name: 'Report', name: "Report",
component: () => import('./views/Report.vue') component: () => import("./views/Report.vue"),
}, },
{ ],
path: '/report', });
name: 'ReportView',
component: () => import('./views/Report.vue')
},
{
path: '/report-pdf',
name: 'ReportPDF',
component: () => import('./views/ReportPDF.vue')
}
]
})
const app = createApp(App) const app = createApp(App);
app.use(router) app.use(router);
app.mount('#app')
app.mount("#app");

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,129 +0,0 @@
<template>
<div class="pdf-page">
<div v-if="isLoading" class="loading-container">
<div class="loading-spinner"></div>
<p>加载中请稍候...</p>
</div>
<div v-else-if="reportData" class="pdf-content">
<CDWBG8B4DPDF :data="reportData" />
</div>
<div v-else class="error-container">
<p>未找到报告数据</p>
</div>
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue'
import CDWBG8B4DPDF from '@/ui/CDWBG8B4D/CDWBG8B4D-PDF.vue'
const isLoading = ref(true)
const reportData = ref(null)
onMounted(async () => {
await loadReportData()
})
const loadReportData = async () => {
try {
// 从 public 目录加载示例数据
const response = await fetch('/example.json')
const data = await response.json()
if (Array.isArray(data) && data.length > 0) {
// 查找 DWBG8B4D 的数据
const cdwbg8b4dItem = data.find(item =>
item.data?.apiID === 'DWBG8B4D' || item.data?.apiID === 'CDWBG8B4D'
)
if (cdwbg8b4dItem && cdwbg8b4dItem.data?.data) {
reportData.value = cdwbg8b4dItem.data.data
} else {
console.warn('未找到 DWBG8B4D 数据')
}
}
} catch (error) {
console.error('加载报告数据失败:', error)
} finally {
isLoading.value = false
}
}
</script>
<style scoped>
.pdf-page {
min-height: 100vh;
background: linear-gradient(135deg, #f5f7fa 0%, #e8ecf0 100%);
padding: 32px 20px;
display: flex;
justify-content: center;
}
.pdf-content {
width: 100%;
max-width: 794px;
background-color: #ffffff;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08), 0 2px 8px rgba(0, 0, 0, 0.04);
border-radius: 8px;
overflow: hidden;
}
.loading-container {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
width: 100%;
}
.loading-spinner {
width: 50px;
height: 50px;
border: 4px solid #f3f3f3;
border-top: 4px solid #3498db;
border-radius: 50%;
animation: spin 1s linear infinite;
margin-bottom: 20px;
}
.loading-container p {
color: #666;
font-size: 16px;
}
.error-container {
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
width: 100%;
}
.error-container p {
color: #e74c3c;
font-size: 16px;
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
/* 打印样式 */
@media print {
.pdf-page {
padding: 0;
background-color: #ffffff;
}
.pdf-content {
box-shadow: none;
max-width: 100%;
}
}
</style>

26
t.json
View File

@@ -1,26 +0,0 @@
[
{
"api_code": "DWBG8B4D"
},
{
"api_code": "QCXG9P1C"
},
{
"api_code": "JRZQ09J8"
},
{
"api_code": "JRZQ4AA8"
},
{
"api_code": "JRZQ5E9F"
},
{
"api_code": "FLXG7E8F"
},
{
"api_code": "IVYZ81NC"
},
{
"api_code": "IVYZ3P9M"
}
]

542
tt.json
View File

@@ -1,542 +0,0 @@
{
"responses": {
"DWBG8B4D": {
"api_code": "DWBG8B4D",
"data": {
"baseInfo": {
"age": 25,
"channel": "中国移动",
"idCard": "4521**200008***23X",
"location": "广西壮族自治区南宁地区横县",
"name": "张*宏",
"phone": "182****1590",
"phoneArea": "广西壮族自治区-南宁",
"sex": "男",
"status": 1
},
"checkSuggest": "建议审核",
"creditScore": 599,
"elementVerificationDetail": {
"antiFraudInfo": {
"gamblerPlayer": "A",
"moneyLaundering": "A"
},
"belongRiskFlag": 2,
"belongRisks": {
"num": "1",
"personCity": "南宁地区",
"personProvence": "广西壮族自治区",
"phoneCardType": "移动",
"phoneCity": "南宁",
"phoneProvence": "广西壮族自治区"
},
"highRiskFlag": 2,
"keyPersonCheckList": {
"fangAiFlag": 0,
"fontFlag": 0,
"jingJiFontFlag": 0,
"num": "1",
"sheJiaoTongFlag": 0,
"zhongDianFlag": 0
},
"onlineRiskFlag": 2,
"onlineRiskList": {
"lineType": "移动",
"num": "1",
"onLineTimes": "24,+(个月)"
},
"personCheckDetails": {
"ele": "身份证号、姓名",
"num": "1",
"result": "一致"
},
"phoneCheckDetails": {
"ele": "身份证号、手机号、姓名",
"num": "1",
"phoneCompany": "中国移动",
"result": "一致"
},
"phoneVailRiskFlag": 2,
"phoneVailRisks": {
"num": "1",
"phoneCompany": "移动",
"phoneStatus": "实号",
"phoneTimes": "24(单位:月)"
},
"sfzeysFlag": 2,
"sjsysFlag": 2
},
"fraudRule": "低风险",
"fraudScore": -1,
"leasingRiskAssessment": {
"riskFlag": 2,
"threeCInstitutionApplicationCountLast12Months": "6/6",
"threeCInstitutionApplicationCountLast12MonthsNight": "0/0",
"threeCInstitutionApplicationCountLast12MonthsWeekend": "1/0",
"threeCInstitutionApplicationCountLast14Days": "0/0",
"threeCInstitutionApplicationCountLast14DaysNight": "0/0",
"threeCInstitutionApplicationCountLast14DaysWeekend": "0/0",
"threeCInstitutionApplicationCountLast3Days": "0/0",
"threeCInstitutionApplicationCountLast3DaysNight": "0/0",
"threeCInstitutionApplicationCountLast3DaysWeekend": "0/0",
"threeCInstitutionApplicationCountLast3Months": "4/4",
"threeCInstitutionApplicationCountLast3MonthsNight": "0/0",
"threeCInstitutionApplicationCountLast3MonthsWeekend": "1/0",
"threeCInstitutionApplicationCountLast6Months": "6/6",
"threeCInstitutionApplicationCountLast6MonthsNight": "0/0",
"threeCInstitutionApplicationCountLast6MonthsWeekend": "1/0",
"threeCInstitutionApplicationCountLast7Days": "0/0",
"threeCInstitutionApplicationCountLast7DaysNight": "0/0",
"threeCInstitutionApplicationCountLast7DaysWeekend": "0/0",
"threeCInstitutionApplicationCountLastMonth": "1/1",
"threeCInstitutionApplicationCountLastMonthNight": "0/0",
"threeCInstitutionApplicationCountLastMonthWeekend": "0/0",
"threeCPlatformApplicationCountLast12Months": "3/3",
"threeCPlatformApplicationCountLast12MonthsNight": "0/0",
"threeCPlatformApplicationCountLast12MonthsWeekend": "1/0",
"threeCPlatformApplicationCountLast14Days": "0/0",
"threeCPlatformApplicationCountLast14DaysNight": "0/0",
"threeCPlatformApplicationCountLast14DaysWeekend": "0/0",
"threeCPlatformApplicationCountLast3Days": "0/0",
"threeCPlatformApplicationCountLast3DaysNight": "0/0",
"threeCPlatformApplicationCountLast3DaysWeekend": "0/0",
"threeCPlatformApplicationCountLast3Months": "3/3",
"threeCPlatformApplicationCountLast3MonthsNight": "0/0",
"threeCPlatformApplicationCountLast3MonthsWeekend": "1/0",
"threeCPlatformApplicationCountLast6Months": "3/3",
"threeCPlatformApplicationCountLast6MonthsNight": "0/0",
"threeCPlatformApplicationCountLast6MonthsWeekend": "1/0",
"threeCPlatformApplicationCountLast7Days": "0/0",
"threeCPlatformApplicationCountLast7DaysNight": "0/0",
"threeCPlatformApplicationCountLast7DaysWeekend": "0/0",
"threeCPlatformApplicationCountLastMonth": "1/1",
"threeCPlatformApplicationCountLastMonthNight": "0/0",
"threeCPlatformApplicationCountLastMonthWeekend": "0/0"
},
"loanEvaluationVerificationDetail": {
"businessLoanPerformances": [
{
"last12Month": "2/2",
"last12MonthCount": "8/8",
"last15Day": "0/0",
"last15DayCount": "0/0",
"last1Month": "0/0",
"last1MonthCount": "0/0",
"last3Month": "0/0",
"last3MonthCount": "0/0",
"last6Month": "2/2",
"last6MonthCount": "3/3",
"last7Day": "0/0",
"last7DayCount": "0/0",
"type": "信用卡(类信用卡)"
},
{
"last12Month": "2/2",
"last12MonthCount": "2/2",
"last15Day": "0/0",
"last15DayCount": "0/0",
"last1Month": "0/0",
"last1MonthCount": "0/0",
"last3Month": "0/0",
"last3MonthCount": "0/0",
"last6Month": "0/0",
"last6MonthCount": "0/0",
"last7Day": "0/0",
"last7DayCount": "0/0",
"type": "线上小额现金贷"
},
{
"last12Month": "0/0",
"last12MonthCount": "0/0",
"last15Day": "0/0",
"last15DayCount": "0/0",
"last1Month": "0/0",
"last1MonthCount": "0/0",
"last3Month": "0/0",
"last3MonthCount": "0/0",
"last6Month": "0/0",
"last6MonthCount": "0/0",
"last7Day": "0/0",
"last7DayCount": "0/0",
"type": "汽车金融"
},
{
"last12Month": "2/2",
"last12MonthCount": "4/5",
"last15Day": "1/1",
"last15DayCount": "1/1",
"last1Month": "1/1",
"last1MonthCount": "1/2",
"last3Month": "1/1",
"last3MonthCount": "3/4",
"last6Month": "2/2",
"last6MonthCount": "4/5",
"last7Day": "0/0",
"last7DayCount": "0/0",
"type": "线上消费分期"
},
{
"last12Month": "1/1",
"last12MonthCount": "4/4",
"last15Day": "0/0",
"last15DayCount": "0/0",
"last1Month": "0/0",
"last1MonthCount": "0/0",
"last3Month": "0/0",
"last3MonthCount": "0/0",
"last6Month": "0/0",
"last6MonthCount": "0/0",
"last7Day": "0/0",
"last7DayCount": "0/0",
"type": "线下消费分期"
},
{
"last12Month": "6/6",
"last12MonthCount": "10/10",
"last15Day": "1/1",
"last15DayCount": "1/1",
"last1Month": "1/1",
"last1MonthCount": "1/1",
"last3Month": "1/1",
"last3MonthCount": "2/2",
"last6Month": "2/2",
"last6MonthCount": "3/3",
"last7Day": "0/0",
"last7DayCount": "0/0",
"type": "其他"
}
],
"customerLoanPerformances": [
{
"last12Month": "2/2",
"last12MonthCount": "2/2",
"last15Day": "0/0",
"last15DayCount": "0/0",
"last1Month": "0/0",
"last1MonthCount": "0/0",
"last3Month": "0/0",
"last3MonthCount": "0/0",
"last6Month": "1/1",
"last6MonthCount": "1/1",
"last7Day": "0/0",
"last7DayCount": "0/0",
"type": "银行汇总"
},
{
"last12Month": "2/2",
"last12MonthCount": "2/2",
"last15Day": "0/0",
"last15DayCount": "0/0",
"last1Month": "0/0",
"last1MonthCount": "0/0",
"last3Month": "0/0",
"last3MonthCount": "0/0",
"last6Month": "1/1",
"last6MonthCount": "1/1",
"last7Day": "0/0",
"last7DayCount": "0/0",
"type": "传统银行"
},
{
"last12Month": "0/0",
"last12MonthCount": "0/0",
"last15Day": "0/0",
"last15DayCount": "0/0",
"last1Month": "0/0",
"last1MonthCount": "0/0",
"last3Month": "0/0",
"last3MonthCount": "0/0",
"last6Month": "0/0",
"last6MonthCount": "0/0",
"last7Day": "0/0",
"last7DayCount": "0/0",
"type": "网络零售银行"
},
{
"last12Month": "8/8",
"last12MonthCount": "19/19",
"last15Day": "1/1",
"last15DayCount": "1/1",
"last1Month": "1/1",
"last1MonthCount": "1/1",
"last3Month": "1/1",
"last3MonthCount": "2/2",
"last6Month": "4/4",
"last6MonthCount": "6/6",
"last7Day": "0/0",
"last7DayCount": "0/0",
"type": "非银汇总"
},
{
"last12Month": "1/1",
"last12MonthCount": "1/1",
"last15Day": "0/0",
"last15DayCount": "0/0",
"last1Month": "0/0",
"last1MonthCount": "0/0",
"last3Month": "0/0",
"last3MonthCount": "0/0",
"last6Month": "0/0",
"last6MonthCount": "0/0",
"last7Day": "0/0",
"last7DayCount": "0/0",
"type": "持牌网络小贷"
},
{
"last12Month": "4/4",
"last12MonthCount": "8/8",
"last15Day": "0/0",
"last15DayCount": "0/0",
"last1Month": "0/0",
"last1MonthCount": "0/0",
"last3Month": "0/0",
"last3MonthCount": "0/0",
"last6Month": "1/1",
"last6MonthCount": "1/1",
"last7Day": "0/0",
"last7DayCount": "0/0",
"type": "持牌消费金融"
},
{
"last12Month": "0/0",
"last12MonthCount": "0/0",
"last15Day": "0/0",
"last15DayCount": "0/0",
"last1Month": "0/0",
"last1MonthCount": "0/0",
"last3Month": "0/0",
"last3MonthCount": "0/0",
"last6Month": "0/0",
"last6MonthCount": "0/0",
"last7Day": "0/0",
"last7DayCount": "0/0",
"type": "持牌融资租赁机构"
},
{
"last12Month": "0/0",
"last12MonthCount": "0/0",
"last15Day": "0/0",
"last15DayCount": "0/0",
"last1Month": "0/0",
"last1MonthCount": "0/0",
"last3Month": "0/0",
"last3MonthCount": "0/0",
"last6Month": "0/0",
"last6MonthCount": "0/0",
"last7Day": "0/0",
"last7DayCount": "0/0",
"type": "持牌汽车金融"
},
{
"last12Month": "4/4",
"last12MonthCount": "6/7",
"last15Day": "1/1",
"last15DayCount": "1/1",
"last1Month": "1/1",
"last1MonthCount": "1/2",
"last3Month": "1/1",
"last3MonthCount": "3/4",
"last6Month": "2/2",
"last6MonthCount": "4/5",
"last7Day": "0/0",
"last7DayCount": "0/0",
"type": "其他"
}
],
"organLoanPerformances": [
{
"applyCount": "银行",
"last12Month": "0/0",
"last15Day": "0/0",
"last1Month": "0/0",
"last3Month": "0/0",
"last6Month": "0/0",
"last7Day": "0/0"
},
{
"applyCount": "非银",
"last12Month": "0/0",
"last15Day": "0/0",
"last1Month": "0/0",
"last3Month": "0/0",
"last6Month": "0/0",
"last7Day": "0/0"
}
],
"riskFlag": 2,
"timeLoanPerformances": [
{
"last12Month": "1/1",
"last12MonthCount": "1/1",
"last15Day": "0/0",
"last15DayCount": "0/0",
"last1Month": "0/0",
"last1MonthCount": "0/0",
"last3Month": "0/0",
"last3MonthCount": "0/0",
"last6Month": "0/0",
"last6MonthCount": "0/0",
"last7Day": "0/0",
"last7DayCount": "0/0",
"type": "夜间-银行"
},
{
"last12Month": "4/4",
"last12MonthCount": "4/4",
"last15Day": "0/0",
"last15DayCount": "0/0",
"last1Month": "0/0",
"last1MonthCount": "0/0",
"last3Month": "0/0",
"last3MonthCount": "0/0",
"last6Month": "0/0",
"last6MonthCount": "0/0",
"last7Day": "0/0",
"last7DayCount": "0/0",
"type": "夜间-非银"
},
{
"last12Month": "0/0",
"last12MonthCount": "0/0",
"last15Day": "0/0",
"last15DayCount": "0/0",
"last1Month": "0/0",
"last1MonthCount": "0/0",
"last3Month": "0/0",
"last3MonthCount": "0/0",
"last6Month": "0/0",
"last6MonthCount": "0/0",
"last7Day": "0/0",
"last7DayCount": "0/0",
"type": "周末-银行"
},
{
"last12Month": "5/5",
"last12MonthCount": "7/7",
"last15Day": "0/0",
"last15DayCount": "0/0",
"last1Month": "0/0",
"last1MonthCount": "0/0",
"last3Month": "0/0",
"last3MonthCount": "0/0",
"last6Month": "0/0",
"last6MonthCount": "0/0",
"last7Day": "0/0",
"last7DayCount": "0/0",
"type": "周末-非银"
}
]
},
"overdueRiskProduct": {
"currentOverdueAmount": "-",
"currentOverdueInstitutionCount": "-",
"daysSinceLastSuccessfulRepayment": "-",
"dkzhktjFlag": 2,
"hasUnsettledOverdue": "-",
"lyjlhyFlag": 0,
"overdueLast14Days": "-",
"overdueLast1Day": "-",
"overdueLast30Days": "-",
"overdueLast7Days": "-",
"repaymentFailureAmountLast14Days": "-",
"repaymentFailureAmountLast3Months": "-",
"repaymentFailureAmountLast6Months": "-",
"repaymentFailureAmountLast7Days": "-",
"repaymentFailureAmountLastMonth": "-",
"repaymentFailureCountLast14Days": "-",
"repaymentFailureCountLast3Months": "-",
"repaymentFailureCountLast6Months": "-",
"repaymentFailureCountLast7Days": "-",
"repaymentFailureCountLastMonth": "-",
"repaymentSuccessAmountLast14Days": "-",
"repaymentSuccessAmountLast3Months": "-",
"repaymentSuccessAmountLast6Months": "-",
"repaymentSuccessAmountLast7Days": "-",
"repaymentSuccessAmountLastMonth": "-",
"repaymentSuccessCountLast14Days": "-",
"repaymentSuccessCountLast3Months": "-",
"repaymentSuccessCountLast6Months": "-",
"repaymentSuccessCountLast7Days": "-",
"repaymentSuccessCountLastMonth": "-",
"settledInstitutionCount": "-",
"specialListVerification": [],
"totalLoanInstitutions": "-",
"totalLoanRepaymentAmount": "-",
"tsmdyzFlag": 0
},
"riskSupervision": {
"details": "无",
"leastApplicationTime": "2025-09-11",
"rentalRiskListIdCardRelationsPhones": 0,
"rentalRiskListPhoneRelationsIdCards": 0
},
"riskWarning": {
"frequentApplicationRecent": 0,
"frequentBankApplications": 0,
"frequentNonBankApplications": 0,
"frequentRentalApplications": 0,
"hasCriminalRecord": 0,
"highDebtPressure": 0,
"highFraudGangLevel": 0,
"hitAdministrativeCase": 0,
"hitBankruptcyAndLiquidation": 0,
"hitCivilCase": 0,
"hitCompensationCase": 0,
"hitCriminalRisk": 0,
"hitCurrentOverdue": 0,
"hitDirectlyUnderCase": 0,
"hitExecutionCase": 0,
"hitHighRiskBankLastTwoYears": 0,
"hitHighRiskNonBankLastTwoYears": 0,
"hitPreservationReview": 0,
"idCardPhoneProvinceMismatch": 0,
"idCardTwoElementMismatch": 0,
"isAntiFraudInfo": 1,
"isDisrupSocial": 0,
"isEconomyFront": 0,
"isKeyPerson": 0,
"isTrafficRelated": 0,
"level": "0",
"moreFrequentBankApplications": 0,
"moreFrequentNonBankApplications": 0,
"noPhoneDuration": 0,
"phoneThreeElementMismatch": 0,
"shortPhoneDuration": 0,
"shortPhoneDurationSlight": 0,
"totalRiskCounts": 1,
"veryFrequentRentalApplications": 0
},
"standLiveInfo": {
"finalAuthResult": "0",
"inTime": "24",
"verification": "0"
},
"verifyRule": "低风险"
},
"error": null,
"success": true
},
"FLXG0V4B": {
"api_code": "FLXG0V4B",
"data": {
"entout": {
"msg": "没有找到"
},
"sxbzxr": {
"msg": "没有找到"
},
"xgbzxr": {
"msg": "没有找到"
}
},
"error": null,
"success": true
},
"QYGLB4C0": {
"api_code": "QYGLB4C0",
"data": null,
"error": "查询为空\n查询为空\n库中无此记录",
"success": false
}
}
}