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