产品名称:医学影像和数据处理与通讯软件 型号:浩连 版本:1.0
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.
 
 
 
 
 

886 lines
33 KiB

class ParseData {
constructor(props) {
this.model = props.model // 型号
this.text = props.data // 源文件
this.dataType = props.dataType // xml或者文本
// 返回的数据
this.data = {
OS: {},
OD: {}
}
}
analysis() {
switch (this.model) {
// 验光
case 'KR8900':
return this.parseKR8900()
case 'KR800':
return this.parseKR800()
case 'KR1':
return this.parseKR1()
case 'ARK510A':
return this.parseARK510A()
case 'ARK1':
return this.parseARK1()
case 'RC5000':
return this.parseRC5000()
case 'RT5100':
return this.parseRT5100()
case 'HRK-7000A':
return this.parseHRK7000A()
// 眼压
case 'NT530':
case 'NT530P':
case 'NT510':
case 'NT-510':
return this.parseNT530P()
case 'CT-1':
return this.parseCT1()
case 'TX-20':
case 'TX-20P':
return this.parseTX20()
case 'HNT7000':
return this.parseHNT7000()
case 'KT800':
return this.parseKT800()
case 'CT80A':
case 'CT800':
return this.parseCT800()
}
}
/**
* CT-1
* @returns {*|{OS: {}, OD: {}}}
*/
parseCT1() {
if (this.dataType === 'XML') {
const parser = new DOMParser()
const xmlDoc = parser.parseFromString(this.text, 'text/xml')
// 左眼
const elemets = xmlDoc.documentElement.querySelector('L > Average > IOP_mmHg')
this.data.OS.yyOs = elemets && elemets.textContent
// 右眼
const elemet_2 = xmlDoc.documentElement.querySelector('R > Average > IOP_mmHg')
this.data.OD.yyOd = elemet_2 && elemet_2.textContent
return this.data
} else {
}
}
/**
* TX20
* @returns {*|{OS: {}, OD: {}}}
*/
parseTX20(){
if (this.dataType === 'XML'){
const parser = new DOMParser()
const xmlDoc = parser.parseFromString(this.text, 'text/xml')
console.log(xmlDoc)
// 左眼
const element2 = xmlDoc.documentElement.querySelector('L > Average > IOP_mmHg')
this.data.OS.yyOs = element2 && element2.textContent
const listElement = xmlDoc.documentElement.querySelectorAll('L > List > IOP_mmHg')
this.data.OS.listOs = listElement.length && Array.from(listElement).map(item => item.textContent)
// 右眼
const element = xmlDoc.documentElement.querySelector('R > Average > IOP_mmHg')
this.data.OD.yyOd = element && element.textContent
const listElement2 = xmlDoc.documentElement.querySelectorAll('R > List > IOP_mmHg')
this.data.OD.listOd = listElement2.length && Array.from(listElement2).map(item => item.textContent)
return this.data
}
}
parseHNT7000() {
const arr = this.text.split('\r\n').map(item => item.replace(/ /g, ''))
const lIndex = arr.findIndex(item=>item.startsWith('L-A'))
this.data.OS.yyOs = lIndex > 0 && arr[lIndex].split(':')[1]
const rIndex = arr.findIndex(item=>item.startsWith('R-A'))
this.data.OD.yyOd = rIndex > 0 && arr[rIndex].split(':')[1]
return this.data
}
/**
* NT530P
* @returns {*|{OS: {}, OD: {}}}
*/
parseNT530P() {
if (this.dataType === 'XML') {
const parser = new DOMParser()
const xmlDoc = parser.parseFromString(this.text, 'text/xml')
// 左眼
const avElement = xmlDoc.documentElement.querySelector('L > NT > NTAverage > mmHg')
this.data.OS.yyOs = avElement && avElement.textContent
// CCT
const cctElement = xmlDoc.documentElement.querySelector('L > NT > CorrectedIOP > CCT')
this.data.OS.cctOs = cctElement && cctElement.textContent.replace('um', '')
// 检查数据列表
const listElement = xmlDoc.documentElement.querySelectorAll('L > NT > NTList > mmHg')
this.data.OS.listOs = listElement.length && Array.from(listElement).map(item => item.textContent)
// 右眼
const avElement2 = xmlDoc.documentElement.querySelector('R > NT > NTAverage > mmHg')
this.data.OD.yyOd = avElement2 && avElement2.textContent
// CCT
const cctElement2 = xmlDoc.documentElement.querySelector('R > NT > CorrectedIOP > CCT')
this.data.OD.cctOd = cctElement2 && cctElement2.textContent.replace('um', '')
// 检查数据列表
const listElement2 = xmlDoc.documentElement.querySelectorAll('R > NT > NTList > mmHg')
this.data.OD.listOd = listElement2.length && Array.from(listElement2).map(item => item.textContent)
return this.data
} else {
const sTexts = this.text.split('\u0017').map(item => item.trim())
console.log(sTexts);
if (sTexts.length <= 1) return
const lListText = sTexts.filter(item => item.startsWith('L0'))
const lList = this.handleDataSub(lListText)
const rListText = sTexts.filter(item => item.startsWith('R0') && item.includes('/'))
const rList = this.handleDataSub(rListText)
this.data.OS.listOs = lList
this.data.OS.yyOs = lList.length && lList[lList.length - 1]
this.data.OD.listOd = rList
this.data.OD.yyOd = rList.length && rList[rList.length - 1]
return this.data
}
}
/**
* 眼压数据截取
* @param list
* @returns {*[]}
*/
handleDataSub(lList) {
if (!lList.length){
return []
} else {
const list = lList.map(item => {
const subStart = item.indexOf('V')
const subEnd = item.lastIndexOf('/')
if (subEnd < 0 || subStart < 0) return
const data = item.substring(subStart + 1, subEnd)
return data
})
return list
}
}
/**
* KR8900
*/
parseKR8900() {
const arr = this.text.split('\r')
this.data.OS.listOs = []
this.data.OD.listOd = []
if (arr.length < 16) return
const list = arr.map(item => item.trim())
// 找到‘*’的索引
const index = list.findIndex(item => item === '*')
// 左眼 sphOs、cylOs、axOs、seOs
this.data.OS.sphOs = list[index + 6].substring(0, 6).replace(/ /g, '')
this.data.OS.cylOs = list[index + 6].substring(6, 12).replace(/ /g, '')
this.data.OS.axOs = list[index + 6].substring(12).replace(/ /g, '')
this.data.OS.seOs = list[index + 7].replace(/ /g, '')
// 右眼
this.data.OD.sphOd = list[index + 2].substring(0, 6).replace(/ /g, '') //sphOd
this.data.OD.cylOd = list[index + 2].substring(6, 12).replace(/ /g, '') //cylOd
this.data.OD.axOd = list[index + 2].substring(12).replace(/ /g, '') //axOd
this.data.OD.seOd = list[index + 3].replace(/ /g, '') //seOd
// VD
this.data.vd = list[index + 10].replace(/ /g, '')
// PD
this.data.pd = list[index + 11].replace(/ /g, '')
return this.data
}
/**
* KR800
*/
parseKR800() {
if (this.dataType === 'XML') {
const parser = new DOMParser()
const xmlDoc = parser.parseFromString(this.text, 'text/xml')
// PD
const PD_element = xmlDoc.querySelector('PD > Distance')
this.data.pd = PD_element && PD_element.textContent
// VD
const vd_element = xmlDoc.querySelector('VD')
this.data.vd = vd_element && vd_element.textContent
// 右眼
const r_element = xmlDoc.querySelector('REF > R > Median')
if (r_element) {
this.getChildContent('OD', 'sphOd', r_element, 0)
this.getChildContent('OD', 'cylOd', r_element, 1)
this.getChildContent('OD', 'axOd', r_element, 2)
this.getChildContent('OD', 'seOd', r_element, 3)
}
// 左眼
const L_element = xmlDoc.querySelector('REF > L > Median')
if (L_element) {
this.getChildContent('OS', 'sphOs', L_element, 0)
this.getChildContent('OS', 'cylOs', L_element, 1)
this.getChildContent('OS', 'axOs', L_element, 2)
this.getChildContent('OS', 'seOs', L_element, 3)
}
// KM左眼
const R1_element = xmlDoc.querySelector('KM > L > Median > R1')
if (R1_element) {
this.getChildContent('OS', 'k1DOs', R1_element, 1)
this.getChildContent('OS', 'k1ROs', R1_element, 0)
this.getChildContent('OS', 'k1AxOs', R1_element, 2)
}
const R2_element = xmlDoc.querySelector('KM > L > Median > R2')
if (R2_element) {
this.getChildContent('OS', 'k2DOs', R2_element, 1)
this.getChildContent('OS', 'k2ROs', R2_element, 0)
this.getChildContent('OS', 'k2AxOs', R2_element, 2)
}
const avg_element = xmlDoc.querySelector('KM > L > Median > Average')
if (avg_element) {
this.getChildContent('OS', 'kRAvgOs', avg_element, 0)
this.getChildContent('OS', 'kDAvgOs', avg_element, 1)
}
const cyl_element = xmlDoc.querySelector('KM > L > Median > Cylinder')
if (cyl_element) {
this.getChildContent('OS', 'kCylDOs', cyl_element, 0)
this.getChildContent('OS', 'kCylAxOs', cyl_element, 1)
}
// KM右眼
const r_R1_element = xmlDoc.querySelector('KM > R > Median > R1')
if (r_R1_element) {
this.getChildContent('OD', 'k1DOd', r_R1_element, 1)
this.getChildContent('OD', 'k1ROd', r_R1_element, 0)
this.getChildContent('OD', 'k1AxOd', r_R1_element, 2)
}
const r_R2_element = xmlDoc.querySelector('KM > R > Median > R2')
if (r_R2_element) {
this.getChildContent('OD', 'k2DOd', r_R2_element, 1)
this.getChildContent('OD', 'k2ROd', r_R2_element, 0)
this.getChildContent('OD', 'k2AxOd', r_R2_element, 2)
}
const r_avg_element = xmlDoc.querySelector('KM > R > Median > Average')
if (r_avg_element) {
this.getChildContent('OD', 'kRAvgOd', r_avg_element, 0)
this.getChildContent('OD', 'kDAvgOd', r_avg_element, 1)
}
const r_cyl_element = xmlDoc.querySelector('KM > R > Median > Cylinder')
if (r_cyl_element) {
this.getChildContent('OD', 'kCylDOd', r_cyl_element, 0)
this.getChildContent('OD', 'kCylAxOd', r_cyl_element, 1)
}
return this.data
} else {
let arr = this.text.split('\r').map(item => item.replace(/\s/g, ''))
if (arr.length === 1) {
arr = this.text.split('\n').map(item => item.replace(/\s/g, ''))
}
const KIndex = arr.findIndex(item => item.includes('K'))
if (KIndex > -1) {
const AIndex = arr.findIndex(item => item.includes('A'))
if (AIndex > -1) {
this.handleDataKR800(arr, KIndex)
}
// KR
const krList = arr.slice(KIndex)
const krRIndex = krList.findIndex(item => item === 'R')
const krLIndex = krList.findIndex(item => item === 'L')
// 右眼
if (krRIndex > -1) {
this.data.OD.k1DOd = krList[krRIndex + 1]
this.data.OD.k1ROd = krList[krRIndex + 2]
this.data.OD.k1AxOd = krList[krRIndex + 3]
this.data.OD.k2DOd = krList[krRIndex + 4]
this.data.OD.k2ROd = krList[krRIndex + 5]
this.data.OD.k2AxOd = krList[krRIndex + 6]
this.data.OD.kDAvgOd = krList[krRIndex + 7]
this.data.OD.kRAvgOd = krList[krRIndex + 8]
this.data.OD.kCylDOd = krList[krRIndex + 9]
this.data.OD.kCylAxOd = krList[krRIndex + 10]
}
// 左眼
if (krLIndex > -1) {
this.data.OS.k1DOs = krList[krLIndex + 1]
this.data.OS.k1ROs = krList[krLIndex + 2]
this.data.OS.k1AxOs = krList[krLIndex +3]
this.data.OS.k2DOs = krList[krLIndex + 4]
this.data.OS.k2ROs = krList[krLIndex + 5]
this.data.OS.k2AxOs = krList[krLIndex + 6]
this.data.OS.kDAvgOs = krList[krLIndex + 7]
this.data.OS.kRAvgOs = krList[krLIndex + 8]
this.data.OS.kCylDOs = krList[krLIndex + 9]
this.data.OS.kCylAxOs = krList[krLIndex + 10]
}
} else {
this.handleDataKR800(arr, KIndex)
}
}
return this.data
}
/**
* KR800处理屈光数据
* @param arr
* @param KIndex
*/
handleDataKR800(arr, KIndex) {
const arList = arr.slice(0, KIndex).filter(item => item !== '\u0004' && item)
const arrRIndex = arList.findIndex(item => item === 'R')
const arrLIndex = arList.findIndex(item => item === 'L')
// AR
// 右眼
if (arrRIndex > -1) {
this.data.OD.sphOd = arList[arrRIndex + 1]
this.data.OD.cylOd = arList[arrRIndex + 2]
this.data.OD.axOd = arList[arrRIndex + 3]
this.data.OD.seOd = this.data.OD.sphOd * 1 + 1/2 * this.data.OD.cylOd + ''
}
// 左眼
if (arrLIndex > -1) {
this.data.OS.sphOs = arList[arrLIndex + 1]
this.data.OS.cylOs = arList[arrLIndex + 2]
this.data.OS.axOs = arList[arrLIndex + 3]
this.data.OS.seOs = this.data.OS.sphOs * 1 + 1/2 * this.data.OS.cylOs + ''
}
this.data.pd = arList[arList.length - 1]
}
/**
* KR1
* @returns {*|{OS: {}, OD: {}}}
*/
parseKR1() {
if (this.dataType === "XML") {
const parser = new DOMParser()
const xmlDoc = parser.parseFromString(this.text, 'text/xml')
// 左眼
const sphOs = xmlDoc.documentElement.querySelector('REF > L > Median > Sphere')
const cylOs = xmlDoc.documentElement.querySelector('REF > L > Median > Cylinder')
const axOs = xmlDoc.documentElement.querySelector('REF > L > Median > Axis')
const seOs = xmlDoc.documentElement.querySelector('REF > L > Median > SE')
this.data.OS.sphOs = sphOs && sphOs.textContent
this.data.OS.cylOs = cylOs && cylOs.textContent
this.data.OS.axOs = axOs && axOs.textContent
this.data.OS.seOs = seOs && seOs.textContent
// 右眼
const sphOd = xmlDoc.documentElement.querySelector('REF > R > Median > Sphere')
const cylOd = xmlDoc.documentElement.querySelector('REF > R > Median > Cylinder')
const axOd = xmlDoc.documentElement.querySelector('REF > R > Median > Axis')
const seOd = xmlDoc.documentElement.querySelector('REF > R > Median > SE')
this.data.OD.sphOd = sphOd && sphOd.textContent
this.data.OD.cylOd = cylOd && cylOd.textContent
this.data.OD.axOd = axOd && axOd.textContent
this.data.OD.seOd = seOd && seOd.textContent
const listElement = xmlDoc.documentElement.querySelectorAll('REF > L >List')
this.data.OS.sList = listElement.length && Array.from(listElement).map(item => item.children[0].textContent)
this.data.OS.cList = listElement.length && Array.from(listElement).map(item => item.children[1].textContent)
this.data.OS.aList = listElement.length && Array.from(listElement).map(item => item.children[2].textContent)
this.data.OS.seList = listElement.length && Array.from(listElement).map(item => item.children[3].textContent)
const rlistElement = xmlDoc.documentElement.querySelectorAll('REF > R >List')
this.data.OD.sList = rlistElement.length && Array.from(rlistElement).map(item => item.children[0].textContent)
this.data.OD.cList = rlistElement.length && Array.from(rlistElement).map(item => item.children[1].textContent)
this.data.OD.aList = rlistElement.length && Array.from(rlistElement).map(item => item.children[2].textContent)
this.data.OD.seList = rlistElement.length && Array.from(rlistElement).map(item => item.children[3].textContent)
// KM左眼
const R1_Element = xmlDoc.documentElement.querySelectorAll('KM > L > Median > R1')
if (R1_Element) {
this.getChildContent('OS', 'k1DOs', R1_Element, 1)
this.getChildContent('OS', 'k1ROs', R1_Element, 0)
this.getChildContent('OS', 'k1AxOs', R1_Element, 2)
}
const R2_Element = xmlDoc.documentElement.querySelectorAll('KM > L > Median > R2')
if (R2_Element) {
this.getChildContent('OS', 'k2DOs', R2_Element, 1)
this.getChildContent('OS', 'k2ROs', R2_Element, 0)
this.getChildContent('OS', 'k2AxOs', R2_Element, 2)
}
const avg_Element = xmlDoc.documentElement.querySelectorAll('KM > L > Median > Average')
if (avg_Element) {
this.getChildContent('OS', 'kDAvgOs', avg_Element, 1)
this.getChildContent('OS', 'kRAvgOs', avg_Element, 0)
}
const cyl_Element = xmlDoc.documentElement.querySelectorAll('KM > L > Median > Cylinder')
if (cyl_Element) {
this.getChildContent('OS', 'kCylDOs', cyl_Element, 0)
this.getChildContent('OS', 'kCylAxOs', cyl_Element, 1)
}
// KM右眼
const r_R1_Element = xmlDoc.documentElement.querySelectorAll('KM > R > Median > R1')
if (r_R1_Element) {
this.getChildContent('OD', 'k1DOd', r_R1_Element, 1)
this.getChildContent('OD', 'k1ROd', r_R1_Element, 0)
this.getChildContent('OD', 'k1AxOd', r_R1_Element, 2)
}
const r_R2_Element = xmlDoc.documentElement.querySelectorAll('KM > R > Median > R2')
if (r_R2_Element) {
this.getChildContent('OD', 'k2DOd', r_R2_Element, 1)
this.getChildContent('OD', 'k2ROd', r_R2_Element, 0)
this.getChildContent('OD', 'k2AxOd', r_R2_Element, 2)
}
const r_avg_Element = xmlDoc.documentElement.querySelectorAll('KM > R > Median > Average')
if (r_avg_Element) {
this.getChildContent('OD', 'kDAvgOd', r_avg_Element, 1)
this.getChildContent('OD', 'kRAvgOd', r_avg_Element, 0)
}
const r_cyl_Element = xmlDoc.documentElement.querySelectorAll('KM > R > Median > Cylinder')
if (r_cyl_Element) {
this.getChildContent('OD', 'kCylDOd', r_cyl_Element, 0)
this.getChildContent('OD', 'kCylAxOd', r_cyl_Element, 1)
}
// VD
const VD = xmlDoc.documentElement.querySelector('VD')
this.data.vd = VD && VD.textContent
// PD
const PD = xmlDoc.documentElement.querySelector('PD > Distance')
this.data.pd = PD && PD.textContent
return this.data
} else {
const list = this.text.split('\r')
console.log(list)
}
}
/**
* ARK510A
* @returns {*|{OS: {}, OD: {}}}
*/
parseARK510A() {
if (this.dataType === "XML") {
} else {
const list = this.text.split('\u0017')
// 左眼
const lIndex = list.findLastIndex(item => item.startsWith('OL'))
const OS = lIndex !== -1 ? list[lIndex].substring(2) : ''
this.data.OS.listOs = [OS.substring(0, 6),OS.substring(6, 12),OS.substring(12, 15)]
this.data.OS.sphOd = OS.substring(0, 6)
this.data.OS.cylOd = OS.substring(6, 12)
this.data.OS.axOd = OS.substring(12, 15)
this.data.OS.seOd = this.data.OS.sphOd * 1 + 1/2 * this.data.OS.cylOd + ''
// 右眼
const rIndex = list.findLastIndex(item => item.startsWith('OR'))
const OD = rIndex !== -1 ? list[rIndex].substring(2) : ''
this.data.OD.listOd = [OD.substring(0, 6), OD.substring(6, 12), OD.substring(12, 15)]
this.data.OD.sphOd = OD.substring(0, 6)
this.data.OD.cylOd = OD.substring(6, 12)
this.data.OD.axOd = OD.substring(12, 15)
this.data.OD.seOd = this.data.OD.sphOd * 1 + 1/2 * this.data.OD.cylOd + ''
this.handlePdOrVd(list)
return this.data
}
}
parseARK1() {
if (this.dataType === 'XML') {
const parser = new DOMParser()
const xmlDoc = parser.parseFromString(this.text, 'text/xml')
// 左眼
const lElement = xmlDoc.documentElement.querySelector('L > AR > ARMedian')
if (lElement) {
this.getChildContent('OS', 'sphOs', lElement, 0)
this.getChildContent('OS', 'cylOs', lElement, 1)
this.getChildContent('OS', 'axOs', lElement, 2)
this.getChildContent('OS', 'seOs', lElement, 3)
}
const lListElement = xmlDoc.documentElement.querySelectorAll('L > AR > ARList')
if (lListElement.length){
this.data.OS.listOs = Array.from(lListElement).map(item => {
return {
sphOs: item.children[0].textContent,
cylOs: item.children[1].textContent,
axOs: item.children[2].textContent,
seOs: item.children[4].textContent,
}
})
}
// 右眼
const element = xmlDoc.documentElement.querySelector('R > AR > ARMedian')
if (element) {
this.getChildContent('OD', 'sphOd', element, 0)
this.getChildContent('OD', 'cylOd', element, 1)
this.getChildContent('OD', 'axOd', element, 2)
this.getChildContent('OD', 'seOd', element, 3)
}
const rListElement = xmlDoc.documentElement.querySelectorAll('R > AR > ARList')
if (rListElement.length){
this.data.OD.listOd = Array.from(rListElement).map(item => {
return {
sphOs: item.children[0].textContent,
cylOs: item.children[1].textContent,
axOs: item.children[2].textContent,
seOs: item.children[4].textContent,
}
})
}
// 左眼KM
const l_R1Element = xmlDoc.documentElement.querySelector('L > KM > KMMedian > R1')
if (l_R1Element) {
this.getChildContent('OS', 'k1DOs', l_R1Element, 1)
this.getChildContent('OS', 'k1ROs', l_R1Element, 0)
this.getChildContent('OS', 'k1AxOs', l_R1Element, 2)
}
const l_R2Element = xmlDoc.documentElement.querySelector('L > KM > KMMedian > R2')
if (l_R2Element) {
this.getChildContent('OS', 'k2DOs', l_R2Element, 1)
this.getChildContent('OS', 'k2ROs', l_R2Element, 0)
this.getChildContent('OS', 'k2AxOs', l_R2Element, 2)
}
const l_avgElement = xmlDoc.documentElement.querySelector('L > KM > KMMedian > Average')
if (l_avgElement) {
this.getChildContent('OS', 'kDAvgOs', l_avgElement, 1)
this.getChildContent('OS', 'kRAvgOs', l_avgElement, 0)
}
const l_cylElement = xmlDoc.documentElement.querySelector('L > KM > KMMedian > KMCylinder')
if (l_cylElement) {
this.getChildContent('OS', 'kCylDOs', l_cylElement, 0)
this.getChildContent('OS', 'kCylAxOs', l_cylElement, 1)
}
// 右眼KM
const R1Element = xmlDoc.documentElement.querySelector('R > KM > KMMedian > R1')
if (R1Element) {
this.getChildContent('OD', 'k1DOd', R1Element, 1)
this.getChildContent('OD', 'k1ROd', R1Element, 0)
this.getChildContent('OD', 'k1AxOd', R1Element, 2)
}
const R2Element = xmlDoc.documentElement.querySelector('R > KM > KMMedian > R2')
if (R2Element) {
this.getChildContent('OD', 'k2DOd', R2Element, 1)
this.getChildContent('OD', 'k2ROd', R2Element, 0)
this.getChildContent('OD', 'k2AxOd', R2Element, 2)
}
const avgElement = xmlDoc.documentElement.querySelector('R > KM > KMMedian > Average')
if (avgElement) {
this.getChildContent('OD', 'kDAvgOd', avgElement, 1)
this.getChildContent('OD', 'kRAvgOd', avgElement, 0)
}
const cylElement = xmlDoc.documentElement.querySelector('R > KM > KMMedian > KMCylinder')
if (cylElement) {
this.getChildContent('OD', 'kCylDOd', cylElement, 0)
this.getChildContent('OD', 'kCylAxOd', cylElement, 1)
}
const vdElement = xmlDoc.documentElement.querySelector('VD')
this.data.vd = vdElement && vdElement.textContent.replace('mm', '').trim()
const pdElement = xmlDoc.documentElement.querySelector('PD > PDList > FarPD')
this.data.pd = pdElement && pdElement.textContent
return this.data
} else {
const list = this.text.split('\u0017')
// 左眼
const lIndex = list.findLastIndex(item => item.startsWith('OL'))
const OS = lIndex !== -1 ? list[lIndex].substring(2) : ''
this.data.OS.sphOs = OS.substring(0, 6)
this.data.OS.cylOs = OS.substring(6, 12)
this.data.OS.axOs = OS.substring(12)
this.data.OS.seOs = this.data.OS.sphOs * 1 + 1/2 * this.data.OS.cylOs + ''
// 右眼
const rIndex = list.findLastIndex(item => item.startsWith('OR'))
const OD = rIndex !== -1 ? list[rIndex].substring(2) : ''
this.data.OD.sphOd = OD.substring(0, 6)
this.data.OD.cylOd = OD.substring(6, 12)
this.data.OD.axOd = OD.substring(12)
this.data.OD.seOd = this.data.OD.sphOd * 1 + 1/2 * this.data.OD.cylOd + ''
this.handlePdOrVd(list)
return this.data
}
}
/**
* RC5000
* @returns {*|{OS: {}, OD: {}}|{OS: {}, OD: {}}}
*/
parseRC5000() {
let list = this.text.split(/\r?\n/).map(line => line.replace(/\s+/g, '').replace(/\n/g, ''))
list = list.filter(line => !line.includes('RECV') && line.length > 0)
const rList = list.map(item => item.split(','))
// 左眼
const l_index = rList.findIndex(item => item[0]==='[POWER_L]' && item[1] === 'A')
if (l_index > 0) {
this.data.OS.sphOs = rList[l_index][2]
this.data.OS.cylOs = rList[l_index][3]
this.data.OS.axOs = rList[l_index][4]
}
const arrList = rList.filter(item => item[0]==='[POWER_L]' && item[1] !== 'A')
this.data.OS.listOs = arrList.map(item => {
return {
sphOs: item[2],
cylOs: item[3],
axOs: item[4],
}
})
// 右眼
const r_index = rList.findIndex(item => item[0]==='[POWER_R]' && item[1] === 'A')
if (r_index > 0) {
this.data.OD.sphOd = rList[r_index][2]
this.data.OD.cylOd = rList[r_index][3]
this.data.OD.axOd = rList[r_index][4]
}
const r_arrList = rList.filter(item => item[0]==='[POWER_L]' && item[1] !== 'A')
this.data.OD.listOd = r_arrList.map(item => {
return {
sphOd: item[2],
cylOd: item[3],
axOd: item[4],
}
})
// PD
const pd_index = rList.findIndex(item => item[0]==='[PD]')
this.data.pd = pd_index > 0 && rList[pd_index][1]
// VD
const vd_index = rList.findIndex(item => item[0]==='[VD]')
this.data.vd = vd_index > 0 && rList[vd_index][1]
// KM右眼
const k_index = rList.findIndex(item => item[0]==='[INF_R]' && item[1] === 'A')
if (k_index > 0) {
if (rList[k_index + 1][0] === '[K1_R]') {
this.data.OD.k1DOd = rList[k_index + 1][1]
this.data.OD.k1ROd = rList[k_index + 1][2]
this.data.OD.k1AxOd = rList[k_index + 1][3]
}
if (rList[k_index + 2][0] === '[K2_R]') {
this.data.OD.k2DOd = rList[k_index + 2][1]
this.data.OD.k2ROd = rList[k_index + 2][2]
this.data.OD.K21_Ax = rList[k_index + 2][3]
}
if (rList[k_index + 3][0] === '[AV_R]') {
this.data.OD.kDAvgOd = rList[k_index + 3][1]
this.data.OD.kRAvgOd = rList[k_index + 3][2]
}
if (rList[k_index + 4][0] === '[CYL_R]') {
this.data.OD.kCylDOd = rList[k_index + 4][1]
this.data.OD.kCylAxOd = rList[k_index + 4][2]
}
}
// KM左眼
const l_k_index = rList.findIndex(item => item[0]==='[INF_L]' && item[1] === 'A')
if (l_k_index > 0) {
if (rList[l_k_index + 1][0] === '[K1_L]') {
this.data.OS.k1DOs = rList[l_k_index + 1][1]
this.data.OS.k1ROs = rList[l_k_index + 1][2]
this.data.OS.k1AxOs = rList[l_k_index + 1][3]
}
if (rList[l_k_index + 2][0] === '[K2_L]') {
this.data.OS.k2DOs = rList[l_k_index + 2][1]
this.data.OS.k2ROs = rList[l_k_index + 2][2]
this.data.OS.k2AxOs = rList[l_k_index + 2][3]
}
if (rList[l_k_index + 3][0] === '[AV_L]') {
this.data.OS.kDAvgOs = rList[l_k_index + 3][1]
this.data.OS.kRAvgOs = rList[l_k_index + 3][2]
}
if (rList[l_k_index + 4][0] === '[CYL_L]') {
this.data.OS.kCylDOs = rList[l_k_index + 4][1]
this.data.OS.kCylAxOs = rList[l_k_index + 4][2]
}
}
// list.forEach(item => {
// const parts = item.split(',')
// switch (parts[0]) {
// case '[PD]':
// this.data.pd = parts[1]
// return
// case '[VD]':
// this.data.vd = parts[1]
// return
// case '[INF_R]':
// if(parts[1] === 'A') {
//
// }
// return
// }
// })
return this.data
}
/**
* RT5100
* @returns {*|{OS: {}, OD: {}}}
*/
parseRT5100() {
const text = this.text.replace(/\r/g, '')
const list = text.split('\u0002')
console.log(list)
// 右眼
const r_index = list.findIndex(item => item.startsWith('FR'))
if (r_index > 0) {
const r_text = list[r_index]
this.data.OD.sphOd = r_text.substring(2, 8).replace(' ', '')
this.data.OD.cylOd = r_text.substring(8, 14).replace(' ', '')
this.data.OD.axOd = r_text.substring(14, 17).replace(' ', '')
this.data.OD.seOd = (this.data.OD.sphOd * 1 + 1/2 * this.data.OD.cylOd).toFixed(2)
}
// AR
const r_a_index = list.findIndex(item => item.startsWith('AR'))
if (r_a_index > 0) {
const r_text = list[r_a_index]
this.data.OD.ar = r_text.substring(2).replace(/ /g, '')
}
// UR
const r_u_index = list.findIndex(item => item.startsWith('UR'))
if (r_u_index > 0) {
const r_text = list[r_u_index]
this.data.OD.ur = r_text.substring(2).replace(/ /g, '')
}
// 左眼
const l_index = list.findIndex(item => item.startsWith('FL'))
if (l_index > 0) {
const l_text = list[l_index]
this.data.OS.sphOs = l_text.substring(2, 8).replace(' ', '')
this.data.OS.cylOs = l_text.substring(8, 14).replace(' ', '')
this.data.OS.axOs = l_text.substring(14, 17).replace(' ', '')
this.data.OS.seOs = (this.data.OS.sphOs * 1 + 1/2 * this.data.OS.cylOs).toFixed(2)
}
// AL
const l_a_index = list.findIndex(item => item.startsWith('AL'))
if (l_a_index > 0) {
const r_text = list[l_a_index]
this.data.OS.al = r_text.substring(2).replace(/ /g, '')
}
// UL
const l_u_index = list.findIndex(item => item.startsWith('UL'))
if (l_u_index > 0) {
const r_text = list[l_u_index]
this.data.OS.ul = r_text.substring(2).replace(/ /g, '')
}
// PD
const p_index = list.findIndex(item => item.startsWith('PD'))
if (p_index > 0) {
const l_text = list[p_index]
this.data.pd = l_text.substring(2).replace(/ /g, '')
}
// WD
const W_index = list.findIndex(item => item.startsWith('WD'))
if (W_index > 0) {
const l_text = list[W_index]
this.data.wd = l_text.substring(2).replace(/ /g, '')
}
return this.data
}
parseHRK7000A() {
const list = this.text.split(' ')
const RIndex = list.findIndex(item => item === 'ES-R-R')
if (RIndex > -1) {
this.data.OD.sphOd = list[RIndex + 1]
this.data.OD.cylOd = list[RIndex + 2]
this.data.OD.axOd = list[RIndex + 3]
this.data.pd = list[RIndex + 4]
this.data.OD.seOd = (this.data.OD.sphOd * 1 + 1/2 * this.data.OD.cylOd).toFixed(2)
}
const LIndex = list.findIndex(item => item === 'ES-R-L')
if (LIndex > -1) {
this.data.OS.sphOs = list[LIndex + 1]
this.data.OS.cylOs = list[LIndex + 2]
this.data.OS.axOs = list[LIndex + 3]
this.data.pd = list[LIndex + 4]
this.data.OS.seOs = (this.data.OS.sphOs * 1 + 1/2 * this.data.OS.cylOs).toFixed(2)
}
const RKIndex = list.findIndex(item => item === 'ES-K-R')
if (RKIndex > -1) {
this.data.OD.k1ROd = list[RKIndex + 1]
this.data.OD.k2ROd = list[RKIndex + 2]
this.data.OD.k1AxOd = list[RKIndex + 3]
}
const LKIndex = list.findIndex(item => item === 'ES-K-L')
if (LKIndex > -1) {
this.data.OS.k1ROs = list[LKIndex + 1]
this.data.OS.k2ROs = list[LKIndex + 2]
this.data.OS.k1AxOs = list[LKIndex + 3]
}
return this.data
}
/**
* 验光获取子元素的值
* @param type
* @param name
* @param element
* @param index
*/
getChildContent(type, name, element, index) {
this.data[type][name] = element.children[index].textContent
}
/**
* text文件获取PD和VD
* @param list
*/
handlePdOrVd(list) {
// VD
const vdIndex = list.findLastIndex(item => item.startsWith('VD'))
this.data.vd = vdIndex !== -1 ? list[vdIndex].replace('VD', '') : ''
// PD
const pdIndex = list.findLastIndex(item => item.startsWith('PD'))
this.data.pd = pdIndex !== -1 ? list[pdIndex].replace('PD', ''): ''
const index = this.data.pd.indexOf('?')
this.data.pd = this.data.pd.substring(0, index)
}
/**
* KT800数据解析
*/
parseKT800() {
const list = this.text.split('\u0002').map(item => item.trim())
const rIndex = list.findIndex(item => item.startsWith('R'))
this.data.OD.yyOd = rIndex > 0 ? list[rIndex].substr(11).split(' ')[0] : ''
const lIndex = list.findIndex(item => item.startsWith('L'))
this.data.OS.yyOs = lIndex > 0 ? list[lIndex].substr(11).split(' ')[0] : ''
return this.data
}
/**
* CT80A和CT1数据处理
*/
parseCT800() {
if (this.dataType === 'XML'){
const parser = new DOMParser()
const xmlDoc = parser.parseFromString(this.text, 'text/xml')
// 左眼平均值
this.data.OS.yyOs = xmlDoc.documentElement.querySelector('L > Average > IOP_mmHg').textContent
// 左眼全部数据
const elements = xmlDoc.documentElement.querySelectorAll('L > List > IOP_mmHg')
const list = Array.from(elements).map(item => item.textContent)
this.data.OS.listOs = list
// 右眼平均值
this.data.OD.yyOd = xmlDoc.documentElement.querySelector('R > Average > IOP_mmHg').textContent
// 右眼全部数据
const r_elements = xmlDoc.documentElement.querySelectorAll('R > List > IOP_mmHg')
const r_list = Array.from(r_elements).map(item => item.textContent)
this.data.OD.listOd = r_list
return this.data
}
}
}
window.handleData = (msg) => {
return new ParseData(msg).analysis()
}