bianyaqi 2 years ago
parent
commit
e01ad10a0d
  1. 30
      src/components/360View/business.vue
  2. 5
      src/components/360View/collection.vue
  3. 4
      src/components/360View/dataInfo.vue
  4. 307
      src/mixins/condition.js
  5. 12
      src/mixins/dialog.js
  6. 155
      src/mixins/websocket.js
  7. 2
      src/page-subspecialty/views/modules/scientificManagement/sys/project-review.vue

30
src/components/360View/business.vue

@ -1,16 +1,16 @@
<template>
<div class="business">
<div class="fileBox">
<p class="title">建立屈光档案</p>
<el-button type="primary" size="small" @click="sendFile">发送</el-button>
</div>
<div style="margin: 12px 0">
状态<span class="circle">已发送</span>
</div>
<div style="margin-bottom: 60px;">
备注
<el-input v-model="remark" auto-complete="off" style="width: 420px" />
</div>
<!-- <div class="fileBox">-->
<!-- <p class="title">建立屈光档案</p>-->
<!-- <el-button type="primary" size="small" @click="sendFile">发送</el-button>-->
<!-- </div>-->
<!-- <div style="margin: 12px 0">-->
<!-- 状态<span class="circle">已发送</span>-->
<!-- </div>-->
<!-- <div style="margin-bottom: 60px;">-->
<!-- 备注-->
<!-- <el-input v-model="remark" auto-complete="off" style="width: 420px" />-->
<!-- </div>-->
<div class="fileBox">
<p class="title">预约医疗项目</p>
<el-button type="primary" size="small" @click="sendTreat">发送</el-button>
@ -37,12 +37,7 @@
</template>
<script>
import dialogjs from '@/mixins/dialog'
export default {
components: {
},
mixins: [dialogjs],
props: {
platform: {
type: String,
@ -65,9 +60,6 @@ export default {
treatRemark: '',
jzNumber: ''
}
},
watch: {
},
created() {

5
src/components/360View/collection.vue

@ -55,12 +55,7 @@
</template>
<script>
import dialogjs from '@/mixins/dialog'
export default {
components: {
},
mixins: [dialogjs],
props: {
patientIdNumber: {
type: String,

4
src/components/360View/dataInfo.vue

@ -165,13 +165,9 @@
</template>
<script>
import dialogjs from '@/mixins/dialog'
import eventBus from '@/page-subspecialty/utils/eventBus'
import Clipboard from 'clipboard'
export default {
components: {
},
mixins: [dialogjs],
props: {
patientIdNumber: {
type: String,

307
src/mixins/condition.js

@ -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 基本数据查询
})
}
}
}

12
src/mixins/dialog.js

@ -1,12 +0,0 @@
export default {
data() {
return {
dialogFormVisible: false
}
},
methods: {
closeDialog() {
this.dialogFormVisible = false
}
}
}

155
src/mixins/websocket.js

@ -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)
}
}
}
}

2
src/page-subspecialty/views/modules/scientificManagement/sys/project-review.vue

@ -27,7 +27,7 @@
<!-- 展开 -->
<el-table-column type="expand">
<template slot-scope="scope">
<el-form label-width="90px" class="expand-form">
<el-form label-width="100px" class="expand-form">
<el-form-item :label="'课题名称'">
<span>{{ scope.row.name }}</span>
</el-form-item>

Loading…
Cancel
Save