7 changed files with 13 additions and 504 deletions
			
			
		| @ -1,307 +0,0 @@ | |||
| // 纳排管理共享数据
 | |||
| export default { | |||
|   data() { | |||
|     return { | |||
|       formContent: [], | |||
|       conditionObj: { | |||
|         // 或并
 | |||
|         joinContent: [{ | |||
|           join: [ | |||
|             { label: '必须', value: 'must' }, | |||
|             { label: '可以', value: 'should' }, | |||
|             { label: '排除', value: 'must_not' } | |||
|           ] | |||
|           // selectValueArr: []
 | |||
|         }], | |||
|         // 患者信息
 | |||
|         patientInfoContent: [{ | |||
|           patientInfo: [], | |||
|           // selectValueArr: [],
 | |||
|           // 显示类型:string,number,date
 | |||
|           showMode: [] | |||
|         }], | |||
|         // 匹配
 | |||
|         matchingContent: [{ | |||
|           matching: [ | |||
|             { label: '匹配', value: 'matchQuery', disabled: false }, | |||
|             { label: '精准匹配', value: 'termQuery', disabled: false }, | |||
|             { label: '范围查询', value: 'rangeQuery', disabled: true } | |||
|           ] | |||
|           // selectValueArr: []
 | |||
|         }], | |||
|         // 大于等于符号
 | |||
|         symbolContent: [{ | |||
|           symbol: [ | |||
|             { label: '等于', value: 'eq' }, | |||
|             { label: '小于', value: 'lt' }, | |||
|             { label: '小于等于', value: 'lte' }, | |||
|             { label: '大于', value: 'gt' }, | |||
|             { label: '大于等于', value: 'gte' } | |||
|           ] | |||
|           // selectValueArr: []
 | |||
|         }], | |||
|         InputData: [{ | |||
|           // 输入框string
 | |||
|           inputString: [], | |||
|           // 日期范围
 | |||
|           dataRange: [], | |||
|           // 数值范围
 | |||
|           NumberRangeOne: [], | |||
|           NumberRangeTwo: [] | |||
|         }], | |||
|         iconState: [{ | |||
|           state: false | |||
|         }] | |||
|       }, | |||
|       filterItemList: [{ | |||
|         sort: '', // 排序
 | |||
|         fieldDescription: '', // 字段描述
 | |||
|         fieldType: '', // 字段类型
 | |||
|         tableDescription: '', // 表描述
 | |||
|         orgCode: '', // 用户
 | |||
|         value: '', // 输入框值
 | |||
|         projectId: '', | |||
|         connection: '', // 或并 --连接词
 | |||
|         fieldName: '', // 患者信息名称
 | |||
|         queryType: '', // 匹配 --运算符号
 | |||
|         // 大于小于等于
 | |||
|         queryValue: { | |||
|           eq: '', // =
 | |||
|           gt: '', // >
 | |||
|           gte: '', // >=
 | |||
|           lt: '', // <
 | |||
|           lte: '' // <=
 | |||
|         }, | |||
|         id: '', | |||
|         recId: '', | |||
|         tableName: '', // 表名
 | |||
|         type: '' // 数据类型,前端查询对应的 1 or 2,1 患者信息 , 2 基本数据查询
 | |||
|       }], | |||
|       pageName: '' | |||
|     } | |||
|   }, | |||
|   created() { | |||
|     this.formContent.push(this.conditionObj) | |||
|   }, | |||
| 
 | |||
|   methods: { | |||
|     // 设置图标 “对号” 显示状态为true
 | |||
|     setIconStateTrue(index, e) { | |||
|       this.formContent.forEach(item => { | |||
|         item.iconState[index].state = true | |||
|       }) | |||
|       this.conditionObj.iconState[index].state = true | |||
|     }, | |||
|     // 设置图标 “对号” 显示状态为false
 | |||
|     setIconStateFalse(index) { | |||
|       this.formContent.forEach(item => { | |||
|         item.iconState[index].state = false | |||
|       }) | |||
|       this.conditionObj.iconState[index].state = false | |||
|     }, | |||
|     // 患者信息选择
 | |||
|     patientInfoChange(index, e) { | |||
|       // 患者数据只要发生改变就可以从新查询
 | |||
|       this.setIconStateFalse(index) | |||
|       this.filterItemList[index].queryValue = { | |||
|         eq: '', // =
 | |||
|         gt: '', // >
 | |||
|         gte: '', // >=
 | |||
|         lt: '', // <
 | |||
|         lte: '' // <=
 | |||
|       } | |||
|       if (e === '') { | |||
|         // 判断选中选项的tableName赋值给filterItemList
 | |||
|         this.filterItemList[index].connection = '' | |||
|         this.filterItemList[index].fieldDescription = '' | |||
|         this.filterItemList[index].fieldName = '' | |||
|         this.filterItemList[index].fieldType = '' | |||
|         this.filterItemList[index].orgCode = '' | |||
|         this.filterItemList[index].tableName = '' | |||
|         this.filterItemList[index].tableDescription = '' | |||
|         this.filterItemList[index].type = '' | |||
|         this.filterItemList[index].queryType = '' | |||
|         this.filterItemList[index].projectId = '' | |||
|         this.formContent.forEach(item => { | |||
|           item.patientInfoContent[0].showMode[index] = 'string' | |||
|           item.matchingContent[0].matching.forEach(matchItem => { | |||
|             if (matchItem.value === 'rangeQuery') { | |||
|               matchItem.disabled = true | |||
|             } else { | |||
|               matchItem.disabled = false | |||
|             } | |||
|           }) | |||
|         }) | |||
|         this.saveStorage ? this.saveStorage() : '' | |||
|       } else { | |||
|         this.filterItemList[index].sort = index | |||
|         this.formContent.forEach(formContentItem => { | |||
|           formContentItem.patientInfoContent[0].patientInfo.forEach(patientInfoItem => { | |||
|             patientInfoItem.list.forEach(ListItem => { | |||
|               if (ListItem.id === e) { | |||
|                 // 判断选中选项的tableName赋值给filterItemList
 | |||
|                 this.filterItemList[index].fieldName = ListItem.fieldName | |||
|                 this.filterItemList[index].projectId = window.SITE_CONFIG['projectId'] | |||
|                 this.filterItemList[index].fieldDescription = ListItem.fieldDescription | |||
|                 this.filterItemList[index].fieldType = ListItem.fieldType | |||
|                 this.filterItemList[index].orgCode = ListItem.orgCode | |||
|                 this.filterItemList[index].tableName = patientInfoItem.tableName | |||
|                 this.filterItemList[index].tableDescription = patientInfoItem.tableDescription | |||
|                 this.filterItemList[index].type = patientInfoItem.type | |||
|                 // 判断选中的类型设置匹配禁用和启用状态
 | |||
|                 if (ListItem.fieldType === 'string') { | |||
|                   // 如果是string类型,默认的匹配模式为:'匹配-matchQuery'
 | |||
|                   this.filterItemList[index].queryType = 'matchQuery' | |||
|                   formContentItem.patientInfoContent[0].showMode[index] = 'string' | |||
|                   formContentItem.matchingContent[0].matching.forEach(matchItem => { | |||
|                     if (matchItem.value === 'rangeQuery') { | |||
|                       matchItem.disabled = true | |||
|                     } else { | |||
|                       matchItem.disabled = false | |||
|                     } | |||
|                   }) | |||
|                 } else if (ListItem.fieldType === 'number') { | |||
|                   // 如果是number类型,默认的匹配模式为:'范围查询-rangeQuery'
 | |||
|                   this.filterItemList[index].queryType = 'rangeQuery' | |||
|                   formContentItem.patientInfoContent[0].showMode[index] = 'number' | |||
|                   formContentItem.matchingContent[0].matching.forEach(matchItem => { | |||
|                     if (matchItem.value !== 'rangeQuery') { | |||
|                       matchItem.disabled = true | |||
|                     } else { | |||
|                       matchItem.disabled = false | |||
|                     } | |||
|                   }) | |||
|                 } else if (ListItem.fieldType === 'date') { | |||
|                   // 如果是date类型,默认的匹配模式为:'范围查询-rangeQuery'
 | |||
|                   this.filterItemList[index].queryType = 'rangeQuery' | |||
|                   formContentItem.patientInfoContent[0].showMode[index] = 'date' | |||
|                   formContentItem.matchingContent[0].matching.forEach(matchItem => { | |||
|                     if (matchItem.value !== 'rangeQuery') { | |||
|                       matchItem.disabled = true | |||
|                     } else { | |||
|                       matchItem.disabled = false | |||
|                     } | |||
|                   }) | |||
|                 } | |||
|               } | |||
|             }) | |||
|           }) | |||
|         }) | |||
|       } | |||
|     }, | |||
|     // 数据还原
 | |||
|     dataReduction() { | |||
|       this.filterItemList = [{ | |||
|         sort: '', // 排序
 | |||
|         fieldDescription: '', // 字段描述
 | |||
|         fieldType: '', // 字段类型
 | |||
|         tableDescription: '', // 表描述
 | |||
|         orgCode: '', // 用户
 | |||
|         value: '', // 输入框值
 | |||
| 
 | |||
|         connection: '', // 或并 --连接词
 | |||
|         fieldName: '', // 患者信息名称
 | |||
|         queryType: '', // 匹配 --运算符号
 | |||
|         projectId: this.projectId, | |||
|         // 大于小于等于
 | |||
|         queryValue: { | |||
|           eq: '', // =
 | |||
|           gt: '', // >
 | |||
|           gte: '', // >=
 | |||
|           lt: '', // <
 | |||
|           lte: '' // <=
 | |||
|         }, | |||
|         id: '', // getTableDictTree下拉菜单里的id
 | |||
|         recId: '', // 获取的已添加过的纳排列表id
 | |||
|         tableName: '', // 表名
 | |||
|         type: '' // 数据类型,前端查询对应的 1 or 2,1 患者信息 , 2 基本数据查询
 | |||
|       }] | |||
|     }, | |||
|     // 删除条件
 | |||
|     deleteClick(index) { | |||
|       if (this.formContent.length <= 1 && this.pageName !== 'napai') { | |||
|         this.dataReduction() | |||
|         this.getSearchData ? this.getSearchData() : '' | |||
|         this.saveStorage ? this.saveStorage() : '' | |||
|         return | |||
|       } | |||
|       this.filterItemList.splice(index, 1) | |||
|       this.formContent.forEach(item => { | |||
|         item.patientInfoContent[0].showMode.splice(index, 1) | |||
|       }) | |||
|       this.conditionObj.iconState.splice(index, 1) | |||
|       this.conditionObj.patientInfoContent[0].showMode.splice(index, 1) | |||
|       this.formContent.splice(index, 1) | |||
|       // if (this.formContent.length <= 1) {
 | |||
|       //   this.filterItemList[0].connection = 'must'
 | |||
|       // } else {
 | |||
|       //   this.filterItemList[0].connection = ''
 | |||
|       // }
 | |||
|       this.getSearchData ? this.getSearchData() : '' | |||
|       this.saveConditionData ? this.saveConditionData(index) : '' | |||
|       this.saveStorage ? this.saveStorage() : '' | |||
|     }, | |||
|     // 查询条件
 | |||
|     findClick(index) { | |||
|       if (this.filterItemList[index].fieldType === 'string') { | |||
|         this.filterItemList[index].value = this.filterItemList[index].queryValue.eq ? String(this.filterItemList[index].queryValue.eq) : '' | |||
|       } else { | |||
|         this.filterItemList[index].value = this.filterItemList[index].queryValue.gte && this.filterItemList[index].queryValue.lte ? String([this.filterItemList[index].queryValue.gte, this.filterItemList[index].queryValue.lte]) : '' | |||
|       } | |||
|       if (!this.filterItemList[index].value || | |||
|         !this.filterItemList[index].connection || | |||
|         !this.filterItemList[index].fieldDescription || | |||
|         !this.filterItemList[index].queryType || | |||
|         !this.filterItemList[index].fieldName || | |||
|         !this.filterItemList[index].fieldType || | |||
|         !this.filterItemList[index].id || | |||
|         !this.filterItemList[index].tableDescription || | |||
|         !this.filterItemList[index].tableName | |||
|       ) { | |||
|         this.$message({ | |||
|           message: '请将条件补全完整后再次提交', | |||
|           type: 'warning' | |||
|         }) | |||
|       } else { | |||
|         this.setIconStateTrue(index) | |||
|         this.getSearchData ? this.getSearchData() : '' | |||
|         this.saveConditionData ? this.saveConditionData(index) : '' | |||
|         this.saveStorage ? this.saveStorage() : '' | |||
|       } | |||
|     }, | |||
|     // 添加条件
 | |||
|     addClick(scope) { | |||
|       this.conditionObj.iconState.push({ state: false }) | |||
|       this.formContent.forEach(item => { | |||
|         item.iconState = this.conditionObj.iconState | |||
|       }) | |||
|       this.formContent.push(this.conditionObj) | |||
|       this.filterItemList.push({ | |||
|         sort: '', // 排序
 | |||
|         fieldDescription: '', // 字段描述
 | |||
|         fieldType: '', // 字段类型
 | |||
|         tableDescription: '', // 表描述
 | |||
|         orgCode: '', // 用户
 | |||
|         value: '', // 输入框值
 | |||
|         projectId: '', | |||
|         connection: '', // 或并 --连接词
 | |||
|         fieldName: '', // 患者信息名称
 | |||
|         queryType: '', // 匹配 --运算符号
 | |||
|         // 大于小于等于
 | |||
|         queryValue: { | |||
|           eq: '', // =
 | |||
|           gt: '', // >
 | |||
|           gte: '', // >=
 | |||
|           lt: '', // <
 | |||
|           lte: '' // <=
 | |||
|         }, | |||
|         id: '', | |||
|         recId: '', | |||
|         tableName: '', // 表名
 | |||
|         type: '' // 数据类型,前端查询对应的 1 or 2,1 患者信息 , 2 基本数据查询
 | |||
|       }) | |||
|     } | |||
| 
 | |||
|   } | |||
| } | |||
| 
 | |||
| @ -1,12 +0,0 @@ | |||
| export default { | |||
|   data() { | |||
|     return { | |||
|       dialogFormVisible: false | |||
|     } | |||
|   }, | |||
|   methods: { | |||
|     closeDialog() { | |||
|       this.dialogFormVisible = false | |||
|     } | |||
|   } | |||
| } | |||
| @ -1,155 +0,0 @@ | |||
| export default { | |||
|   data() { | |||
|     return { | |||
|       surgicalStatus: [], | |||
| 
 | |||
|       // websocket相关
 | |||
|       socketObj: '', // websocket实例对象
 | |||
|       // 心跳检测
 | |||
|       heartCheck: { | |||
|         vueThis: this, // vue实例
 | |||
|         timeout: 10000, // 超时时间
 | |||
|         timeoutObj: null, // 计时器对象——向后端发送心跳检测
 | |||
|         serverTimeoutObj: null, // 计时器对象——等待后端心跳检测的回复
 | |||
|         // 心跳检测重置
 | |||
|         reset: function() { | |||
|           clearTimeout(this.timeoutObj) | |||
|           clearTimeout(this.serverTimeoutObj) | |||
|           return this | |||
|         }, | |||
|         // 心跳检测启动
 | |||
|         start: function() { | |||
|           this.timeoutObj && clearTimeout(this.timeoutObj) | |||
|           this.serverTimeoutObj && clearTimeout(this.serverTimeoutObj) | |||
|           this.timeoutObj = setTimeout(() => { | |||
|             // 这里向后端发送一个心跳检测,后端收到后,会返回一个心跳回复
 | |||
|             this.vueThis.socketObj.send('HeartBeat') | |||
|             console.log('发送心跳检测') | |||
|             this.serverTimeoutObj = setTimeout(() => { | |||
|               // 如果超过一定时间还没重置计时器,说明websocket与后端断开了
 | |||
|               console.log('未收到心跳检测回复') | |||
|               // 关闭WebSocket
 | |||
|               this.vueThis.socketObj.close() | |||
|             }, this.timeout) | |||
|           }, this.timeout) | |||
|         } | |||
|       }, | |||
|       socketReconnectTimer: null, // 计时器对象——重连
 | |||
|       socketReconnectLock: false, // WebSocket重连的锁
 | |||
|       socketLeaveFlag: false // 离开标记(解决 退出登录再登录 时出现的 多次相同推送 问题,出现的本质是多次建立了WebSocket连接)
 | |||
|     } | |||
|   }, | |||
|   destroyed() { | |||
|     // 离开标记
 | |||
|     this.socketLeaveFlag = true | |||
|     // 关闭WebSocket
 | |||
|     this.socketObj.close() | |||
|   }, | |||
|   created() { | |||
|   }, | |||
|   mounted() { | |||
|     // websocket启动
 | |||
|     this.createWebSocket() | |||
|   }, | |||
|   methods: { | |||
|     // websocket启动
 | |||
|     createWebSocket() { | |||
|       // console.log(window.SITE_CONFIG['apiURL'].replace('http', 'ws'))
 | |||
|       const URL = window.SITE_CONFIG['apiURL'].replace('http', 'ws') | |||
|       const webSocketLink = `${URL}/websocket/WZYSG_QG` // webSocket地址
 | |||
|       // console.log(webSocketLink);
 | |||
|       try { | |||
|         if ('WebSocket' in window) { | |||
|           this.socketObj = new WebSocket(webSocketLink) | |||
|         } else { | |||
|           console.log('Current browser Not support websocket') | |||
|         } | |||
|         // websocket事件绑定
 | |||
|         this.socketEventBind() | |||
|       } catch (e) { | |||
|         console.log('catch' + e) | |||
|         // websocket重连
 | |||
|         this.socketReconnect() | |||
|       } | |||
|     }, | |||
|     // websocket事件绑定
 | |||
|     socketEventBind() { | |||
|       // 连接成功建立的回调
 | |||
|       this.socketObj.onopen = this.onopenCallback | |||
|       // 连接发生错误的回调
 | |||
|       this.socketObj.onerror = this.onerrorCallback | |||
|       // 连接关闭的回调
 | |||
|       this.socketObj.onclose = this.oncloseCallback | |||
|       // 向后端发送数据的回调
 | |||
|       this.socketObj.onsend = this.onsendCallback | |||
|       // 接收到消息的回调
 | |||
|       this.socketObj.onmessage = this.getMessageCallback | |||
| 
 | |||
|       // 监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
 | |||
|       window.onbeforeunload = () => { | |||
|         this.socketObj.close() | |||
|       } | |||
|     }, | |||
|     // websocket重连
 | |||
|     socketReconnect() { | |||
|       if (this.socketReconnectLock) { | |||
|         return | |||
|       } | |||
|       this.socketReconnectLock = true | |||
|       this.socketReconnectTimer && clearTimeout(this.socketReconnectTimer) | |||
|       this.socketReconnectTimer = setTimeout(() => { | |||
|         console.log('WebSocket:重连中...') | |||
|         this.socketReconnectLock = false | |||
|         // websocket启动
 | |||
|         this.createWebSocket() | |||
|       }, 4000) | |||
|     }, | |||
|     // 连接成功建立的回调
 | |||
|     onopenCallback: function(event) { | |||
|       console.log('WebSocket:已连接') | |||
|       // 心跳检测重置
 | |||
|       this.heartCheck.reset().start() | |||
|     }, | |||
|     // 连接发生错误的回调
 | |||
|     onerrorCallback: function(event) { | |||
|       console.log('WebSocket:发生错误') | |||
|       // websocket重连
 | |||
|       this.socketReconnect() | |||
|     }, | |||
|     // 连接关闭的回调
 | |||
|     oncloseCallback: function(event) { | |||
|       console.log('WebSocket:已关闭') | |||
|       // 心跳检测重置
 | |||
|       this.heartCheck.reset() | |||
|       if (!this.socketLeaveFlag) { | |||
|         // 没有离开——重连
 | |||
|         // websocket重连
 | |||
|         this.socketReconnect() | |||
|       } | |||
|     }, | |||
|     // 向后端发送数据的回调
 | |||
|     onsendCallback: function() { | |||
|       console.log('WebSocket:发送信息给后端') | |||
|     }, | |||
|     // 接收到消息的回调
 | |||
|     getMessageCallback: function(msg) { | |||
|       // console.log(msg);
 | |||
|       console.log(msg.data) | |||
|       if (msg.data.indexOf('HeartBeat') > -1) { | |||
|         // 心跳回复——心跳检测重置
 | |||
|         // 收到心跳检测回复就说明连接正常
 | |||
|         console.log('收到心跳检测回复') | |||
|         // 心跳检测重置
 | |||
|         this.heartCheck.reset().start() | |||
|       } else { | |||
|         // 普通推送——正常处理
 | |||
|         console.log('收到推送消息') | |||
|         const data = JSON.parse(msg.data) | |||
|         console.log(data) | |||
|         this.getDataListInitial() | |||
|         // 相关处理
 | |||
|         console.log(data) | |||
|       } | |||
|     } | |||
|   } | |||
| } | |||
					Loading…
					
					
				
		Reference in new issue