You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
150 lines
4.8 KiB
150 lines
4.8 KiB
import cloneDeep from 'lodash/cloneDeep'
|
|
|
|
export default {
|
|
props: {
|
|
patientIdNumber: { type: String, required: true },
|
|
projectId: { type: String, default: '' }
|
|
},
|
|
data() {
|
|
return {
|
|
dataListLoading: false,
|
|
dataList: [],
|
|
dataListTemp: [],
|
|
type: '',
|
|
searchKeyWord: '',
|
|
searchIndex: -1,
|
|
searchResult: [],
|
|
searchColumn: []
|
|
}
|
|
},
|
|
watch: {
|
|
searchKeyWord(val) {
|
|
if (val) {
|
|
this.searchHandle()
|
|
} else {
|
|
this.searchReset()
|
|
}
|
|
}
|
|
},
|
|
created() { this.getDataList() },
|
|
methods: {
|
|
refreshData() { this.getDataList() },
|
|
getDataList() {
|
|
this.dataListLoading = true
|
|
this.$http.get('/patient/view/examData', {
|
|
params: {
|
|
patientIdNumber: this.patientIdNumber,
|
|
projectId: this.projectId ? this.projectId : null,
|
|
type: this.type
|
|
}
|
|
}).then(({ data: res }) => {
|
|
this.dataList = cloneDeep(res.data)
|
|
this.dataListTemp = cloneDeep(res.data)
|
|
this.dataListLoading = false
|
|
}).catch(() => { this.dataListLoading = false })
|
|
},
|
|
setIndexDate(date) {
|
|
if (date) {
|
|
const rowIndex = this.dataList.findIndex(item => {
|
|
return (item.opDate && item.opDate === date) ||
|
|
(item.examTime && item.examTime.indexOf(date) >= 0) ||
|
|
(item.EXAM_TIME && item.EXAM_TIME.indexOf(date) >= 0)
|
|
})
|
|
if (rowIndex >= 0) {
|
|
setTimeout(() => {
|
|
this.setCurrentRow(rowIndex)
|
|
}, 100)
|
|
}
|
|
}
|
|
},
|
|
setCurrentRow(i) {
|
|
if (this.$refs.dataList) {
|
|
this.$refs.dataList.setCurrentRow(this.dataList[i])
|
|
// this.$refs.dataList.toggleRowExpansion(this.dataList[i], true)
|
|
const targetTop = this.$refs.dataList.$el.querySelectorAll('.el-table__body .row-1')[i].getBoundingClientRect().top
|
|
const containerTop = this.$refs.dataList.$el.querySelector('.el-table__body').getBoundingClientRect().top
|
|
const scrollParent = this.$refs.dataList.$el.querySelector('.el-table__body-wrapper')
|
|
// console.log(this.$refs.dataList.$el, scrollParent, targetTop, containerTop)
|
|
// const el = this.$refs.dataList.$el.querySelectorAll('.el-table__body .row-1')[i]
|
|
// console.log(el, el.getClientRects(), el.getBoundingClientRect())
|
|
scrollParent.scrollTop = targetTop - containerTop
|
|
}
|
|
},
|
|
searchLast() {
|
|
if (this.searchResult.length > 0) {
|
|
if (this.searchIndex > 0) {
|
|
this.searchIndex--
|
|
} else {
|
|
this.searchIndex = this.searchResult.length - 1
|
|
}
|
|
this.searchIndexDisplay()
|
|
} else {
|
|
this.searchIndex = -1
|
|
}
|
|
},
|
|
searchNext() {
|
|
if (this.searchResult.length > 0) {
|
|
if (this.searchIndex + 1 < this.searchResult.length) {
|
|
this.searchIndex++
|
|
} else if (this.searchIndex + 1 >= this.searchResult.length) {
|
|
this.searchIndex = 0
|
|
}
|
|
this.searchIndexDisplay()
|
|
} else {
|
|
this.searchIndex = -1
|
|
}
|
|
},
|
|
searchReset() {
|
|
this.searchIndex = -1
|
|
this.searchKeyWord = ''
|
|
this.searchResult = []
|
|
this.dataList = cloneDeep(this.dataListTemp)
|
|
},
|
|
searchIndexDisplay() {
|
|
if (this.searchIndex >= 0 && this.searchResult.length > 0) {
|
|
const index = this.searchResult[this.searchIndex]
|
|
this.$refs.dataList.toggleRowExpansion(this.dataList[index], true)
|
|
this.setCurrentRow(index)
|
|
}
|
|
},
|
|
searchHandle() {
|
|
if (!this.searchKeyWord) { return false }
|
|
this.searchIndex = -1
|
|
this.searchResult = []
|
|
this.dataList = cloneDeep(this.dataListTemp)
|
|
|
|
const regex = new RegExp(this.searchKeyWord, 'g')
|
|
let rowCount = 0
|
|
this.dataList.forEach((item1, rowIndex1) => {
|
|
const data = item1.data
|
|
let isFlag = false
|
|
if (data && data.length > 0) {
|
|
// data子集匹配
|
|
data.forEach((item2, rowIndex2) => {
|
|
// 遍历行对象
|
|
// Object.keys(item2).forEach(key => {
|
|
this.searchColumn.forEach(key => {
|
|
if (item2[key] && item2[key].toString().includes(this.searchKeyWord)) {
|
|
isFlag = true
|
|
item2[key] = item2[key].toString().replace(regex, `<span style='color:red;'>${this.searchKeyWord}</span>`)
|
|
}
|
|
})
|
|
})
|
|
} else {
|
|
// 无data子集,自匹配
|
|
this.searchColumn.forEach(key => {
|
|
if (item1[key] && item1[key].toString().includes(this.searchKeyWord)) {
|
|
isFlag = true
|
|
item1[key] = item1[key].toString().replace(regex, `<span style='color:red;'>${this.searchKeyWord}</span>`)
|
|
}
|
|
})
|
|
}
|
|
if (isFlag) {
|
|
// 记录数据位置
|
|
this.searchResult[rowCount] = rowIndex1
|
|
rowCount++
|
|
}
|
|
})
|
|
}
|
|
}
|
|
}
|