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