# 智能打标系统第三方对接实现指南 ## 概述 本文档详细说明 智能打标 系统如何实现与第三方系统的对接功能,包括路由配置、消息处理、数据验证等系统内部实现细节。 ## 路由配置 ### 1. 路由白名单配置 **文件路径**:`/src/router/router-filter.js` **配置内容**: ```javascript const whiteList = ['/login', '/forgetPwd', '/about', '/externalPage']; ``` **说明**:将 `/externalPage` 添加到白名单,确保第三方系统可以直接访问该页面而不需要登录。 ### 2. 路由定义 **文件路径**:`/src/router/index.js` **配置内容**: ```javascript { path: '/externalPage', component: () => import('@/views/aiTagging/externalPage/index.vue'), meta: { title: '外部打标页面', noCache: true } } ``` ## 页面实现 ### 1. 主页面结构 **文件路径**:`/src/views/aiTagging/externalPage/index.vue` **核心功能**: - 页面加载完成后发送 `externalPageLoaded` 消息 - 监听并处理第三方系统发送的 `externalParams` 消息 - 验证数据完整性并发送 `externalParamsReceived` 确认消息 - 显示数据接收状态和加载状态 ### 2. 消息处理逻辑 **初始化消息监听器**: ```javascript mounted() { // 监听来自第三方系统的消息 window.addEventListener('message', this.handleMessage); // 页面加载完成后发送加载完成消息 this.sendPageLoadedMessage(); }, beforeDestroy() { // 清理事件监听器 window.removeEventListener('message', this.handleMessage); } ``` **页面加载完成消息**: ```javascript sendPageLoadedMessage() { const message = { type: 'externalPageLoaded', loadedAt: Date.now(), status: 'ready' }; // 发送消息给父窗口(iframe 方式) if (window.parent !== window) { window.parent.postMessage(message, '*'); } } ``` **处理第三方系统消息**: ```javascript handleMessage(event) { const data = event.data; if (data && data.type === 'externalParams') { this.processExternalParams(data); } } processExternalParams(params) { // 验证必填字段 const missingFields = this.validateRequiredFields(params); if (missingFields.length > 0) { // 数据不完整,显示错误信息 this.loadingStatus = 'error'; this.errorMessage = '数据接收不完整,请检查缺失字段'; this.missingFields = missingFields; this.receivedData = params; } else { // 数据完整,开始处理 this.loadingStatus = 'processing'; this.receivedData = params; // 存储参数 this.businessAttr = params.business_attr; this.userData = { user_id: params.user_id, user_nm: params.user_nm, user_org: params.user_org || '', user_endpoint: params.user_endpoint || '', contract_no: params.contract_no || '' }; // 发送确认消息 this.sendConfirmationMessage(params); // 调用业务属性查询 this.queryBusinessAttr(); } } ``` **发送确认消息**: ```javascript sendConfirmationMessage(originalData) { const message = { type: 'externalParamsReceived', originalData: originalData, receivedAt: Date.now(), status: 'success' }; // 发送消息给父窗口(iframe 方式) if (window.parent !== window) { window.parent.postMessage(message, '*'); } } ``` ## 数据验证 ### 1. 必填字段验证 **验证函数**: ```javascript validateRequiredFields(params) { const missingFields = []; if (!params.business_attr) { missingFields.push('贷款申请编号'); } if (!params.user_id) { missingFields.push('用户ID'); } if (!params.user_nm) { missingFields.push('用户姓名'); } if (!params.user_org) { missingFields.push('所属机构'); } if (!params.user_endpoint) { missingFields.push('所属行社'); } if (!params.contract_no) { missingFields.push('合同编号'); } return missingFields; } ``` ## API 调用 ### 1. 业务属性查询 **配置说明**:API 请求不需要携带 token,需要设置 `needToken: false` **实现代码**: ```javascript queryBusinessAttr() { yufp.service.request({ url: backend.tagServer + "/api/fastapi/query", method: 'get', data: { businessAttr: this.businessAttr }, needToken: false, // 确保设置为 false callback: (code, error, response) => { if (response.code == '0') { // 处理成功响应 this.loadingStatus = 'success'; this.taggingData = response.data; } else { // 处理错误 this.loadingStatus = 'error'; this.errorMessage = response.message || '查询业务属性失败'; } } }); } ``` ## 加载状态管理 ### 1. 状态定义 ```javascript data() { return { // 加载状态:loading, success, error, idle loadingStatus: 'idle', // 错误信息 errorMessage: '', // 缺失字段 missingFields: [], // 接收到的数据 receivedData: {}, // 业务属性 businessAttr: '', // 用户数据 userData: {}, // 打标数据 taggingData: {} }; } ``` ### 2. 状态显示 **加载中**: ```html
{{ errorMessage }}
{{ JSON.stringify(receivedData, null, 2) }}