import { getRelatedVisitTask, getTableAnswerRowInfoList, getDicomReadingQuestionAnswer, getReadingQuestionAndAnswer } from '@/api/trials' import { getVisitStudyList } from '@/api/reading' const hangingAgreement = [ { name: 'A', row: 1, col: 1 }, { name: 'A|A', row: 1, col: 2 }, { name: 'A|B', row: 1, col: 2 }, { name: 'A|A|A|A', row: 2, col: 2 } ] const getDefaultState = () => { return { // visitTaskList: [], visitTaskList: localStorage.getItem('visitTaskList') ? JSON.parse(localStorage.getItem('visitTaskList')) : [], seriesStack: [], activeHangingAgreement: hangingAgreement[0] } } function getQuestions(questions) { questions.forEach(item => { if (item.Type === 'table' && item.TableQuestions && item.TableQuestions.Answers.length > 0) { item.TableQuestions.Answers.forEach(answerObj => { answerObj.lesionPart = getQuestionAnswer(item.TableQuestions.Questions, 8, answerObj) answerObj.loctation = getQuestionAnswer(item.TableQuestions.Questions, 6, answerObj) answerObj.lesionLength = getQuestionAnswer(item.TableQuestions.Questions, 0, answerObj) answerObj.lesionShort = getQuestionAnswer(item.TableQuestions.Questions, 1, answerObj) answerObj.isDicomReading = answerObj.IsDicomReading === 'True' var isLymphLesion = getQuestionAnswer(item.TableQuestions.Questions, 2, answerObj) isLymphLesion = isLymphLesion ? parseInt(isLymphLesion) : null answerObj.isLymphLesion = isLymphLesion answerObj.lesionState = getQuestionAnswer(item.TableQuestions.Questions, 7, answerObj) if (answerObj.RowId) { answerObj.saveTypeEnum = isNaN(parseInt(answerObj.lesionState)) ? 1 : 2 } else { answerObj.saveTypeEnum = 0 } }) } if (item.Childrens.length > 0) { getQuestions(item.Childrens) } }) return questions } function findQuestionAndRemoveLesion(questions, obj) { for (var i = 0; i < questions.length; i++) { if (questions[i].Type === 'table' && questions[i].TableQuestions && (questions[i].LesionType === obj.lesionType) && questions[i].TableQuestions.Answers.length > 0) { var idx = questions[i].TableQuestions.Answers.findIndex(i => String(i.RowIndex) === String(obj.rowIndex)) if (idx > -1) { questions[i].TableQuestions.Answers.splice(idx, 1) break } } if (questions[i].Childrens.length > 0) { findQuestionAndRemoveLesion(questions[i].Childrens, obj) } } return questions } function findQuestionAndUpdateLesion(questions, obj) { for (var i = 0; i < questions.length; i++) { var item = questions[i] if (item.Type === 'table' && item.Id === obj.questionId) { var idx = item.TableQuestions.Answers.findIndex(i => i.RowIndex === obj.rowIndex) item.TableQuestions.Answers[idx].isLymphLesion = obj.isLymphLesion item.TableQuestions.Answers[idx].loctation = obj.lesionOrgan item.TableQuestions.Answers[idx].lesionPart = obj.lesionPart item.TableQuestions.Answers[idx].lesionLength = obj.lesionLength item.TableQuestions.Answers[idx].lesionShort = obj.lesionShort item.TableQuestions.Answers[idx].saveTypeEnum = obj.saveTypeEnum item.TableQuestions.Answers[idx].lesionState = obj.lesionState // item.TableQuestions.Answers[idx].lesionState = for (const i in obj.anwsers) { if (i === 'MeasureData' && obj.anwsers[i]) { item.TableQuestions.Answers[idx].InstanceId = obj.anwsers[i].instanceId item.TableQuestions.Answers[idx].SeriesId = obj.anwsers[i].seriesId item.TableQuestions.Answers[idx][i] = JSON.stringify(obj.anwsers[i]) } else { item.TableQuestions.Answers[idx][i] = String(obj.anwsers[i]) } } break } if (item.Childrens.length > 0) { this.findQuestionAndUpdateLesion(item.Childrens, obj) } } return questions } function findQuestionAndAddLesion(questions, obj) { for (var i = 0; i < questions.length; i++) { if (questions[i].Type === 'table' && questions[i].TableQuestions && (questions[i].LesionType === obj.lesionType)) { var sourceObj = {} questions[i].TableQuestions.Questions.forEach(item => { sourceObj[item.Id] = '' }) var targetObj = Object.assign(sourceObj, obj.lesionObj) targetObj.IsCurrentTaskAdd = 'True' questions[i].TableQuestions.Answers.push(targetObj) break } if (questions[i].Childrens.length > 0) { findQuestionAndAddLesion(questions[i].Childrens, obj) } } return questions } function getQuestionAnswer(questions, questionMark, answers) { var idx = questions.findIndex(i => i.QuestionMark === questionMark) if (idx > -1) { var questionId = questions[idx].Id return answers[questionId] } else { return '' } } const state = getDefaultState const mutations = { } const actions = { getVisitTasks({ state }, visitTaskId) { return new Promise(resolve => { getRelatedVisitTask({ visitTaskId: visitTaskId }).then(res => { res.Result.forEach(item => { item.questionsInit = false item.readingQuestionsInit = false item.measureDataInit = false item.IsInit = false }) state.visitTaskList = res.Result localStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '') resolve() }).catch(() => { resolve() }) }) }, setVisitTaskReadingTaskState({ state }, obj) { return new Promise(resolve => { var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId) if (index > -1) { state.visitTaskList[index].ReadingTaskState = obj.readingTaskState } localStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '') resolve() }) }, getDicomReadingQuestionAnswer({ state }, obj) { return new Promise(resolve => { var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId) if (state.visitTaskList[index].questionsInit) { resolve() } else { var params = { trialId: obj.trialId, visitTaskId: obj.visitTaskId } getDicomReadingQuestionAnswer(params).then(res => { state.visitTaskList[index].Questions = res.Result state.visitTaskList[index].questionsInit = true localStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '') resolve() }).catch(() => { resolve() }) } }) }, getReadingQuestionAndAnswer({ state }, obj) { return new Promise(resolve => { var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId) if (state.visitTaskList[index].readingQuestionsInit) { resolve() } else { var params = { trialId: obj.trialId, visitTaskId: obj.visitTaskId } getReadingQuestionAndAnswer(params).then(res => { var list = getQuestions(res.Result.SinglePage) state.visitTaskList[index].ReadingQuestions = list state.visitTaskList[index].readingQuestionsInit = true localStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '') resolve() }).catch(() => { resolve() }) } }) }, refreshReadingQuestionAndAnswer({ state }, obj) { return new Promise(resolve => { var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId) var params = { trialId: obj.trialId, visitTaskId: obj.visitTaskId } getReadingQuestionAndAnswer(params).then(res => { var list = getQuestions(res.Result.SinglePage) state.visitTaskList[index].ReadingQuestions = list state.visitTaskList[index].readingQuestionsInit = true localStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '') resolve() }).catch(() => { resolve() }) }) }, setReadingQuestionAndAnswer({ state }, obj) { return new Promise(resolve => { var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId) if (index > -1) { state.visitTaskList[index].ReadingQuestions = obj.questions } localStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '') resolve() }) }, addReadingQuestionAndAnswer({ state }, obj) { return new Promise(resolve => { var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId) if (index > -1) { var questions = state.visitTaskList[index].ReadingQuestions questions = findQuestionAndAddLesion(questions, obj) state.visitTaskList[index].ReadingQuestions = questions } localStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '') resolve() }) }, updateReadingQuesstionAndAnswer({ state }, obj) { return new Promise(resolve => { var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId) if (index > -1) { var questions = state.visitTaskList[index].ReadingQuestions questions = findQuestionAndUpdateLesion(questions, obj) state.visitTaskList[index].ReadingQuestions = questions } localStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '') resolve() }) }, removeReadingQuestionAndAnswer({ state }, obj) { return new Promise(resolve => { var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId) if (index > -1) { var questions = state.visitTaskList[index].ReadingQuestions questions = findQuestionAndRemoveLesion(questions, obj) state.visitTaskList[index].ReadingQuestions = questions } localStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '') resolve() }) }, getMeasuredData({ state }, visitTaskId) { return new Promise(resolve => { var index = state.visitTaskList.findIndex(i => i.VisitTaskId === visitTaskId) if (state.visitTaskList[index].measureDataInit) { resolve() } else { getTableAnswerRowInfoList(visitTaskId).then(res => { var arr = [] res.Result.forEach(el => { if (el.MeasureData) { el.MeasureData = JSON.parse(el.MeasureData) el.MeasureData.data.remark = el.OrderMarkName arr.push(el) } }) state.visitTaskList[index].MeasureData = arr state.visitTaskList[index].measureDataInit = true localStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '') resolve() }).catch(() => { resolve() }) } }) }, refreshMeasuredData({ state }, visitTaskId) { return new Promise(resolve => { var index = state.visitTaskList.findIndex(i => i.VisitTaskId === visitTaskId) getTableAnswerRowInfoList(visitTaskId).then(res => { var arr = [] res.Result.forEach(el => { if (el.MeasureData) { el.MeasureData = JSON.parse(el.MeasureData) el.MeasureData.data.remark = el.OrderMarkName console.log(el) arr.push(el) } }) state.visitTaskList[index].MeasureData = arr state.visitTaskList[index].measureDataInit = true localStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '') resolve() }).catch(() => { resolve() }) }) }, getNoneDicomMeasuredData({ state }, visitTaskId) { return new Promise(resolve => { var index = state.visitTaskList.findIndex(i => i.VisitTaskId === visitTaskId) var measureData = state.visitTaskList[index].MeasureData var noneDicomMeasureData = measureData.filter(item => !item.IsDicomReading) resolve(noneDicomMeasureData) }) }, addMeasuredData({ state }, obj) { return new Promise(resolve => { var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId) var measureData = state.visitTaskList[index].MeasureData // var idx = measureData.findIndex(item => item.MeasureData.uuid === obj.data.MeasureData.data.uuid) var idx = measureData.findIndex(item => item.QuestionId === obj.data.QuestionId && item.RowIndex === obj.data.RowIndex) if (idx > -1) { state.visitTaskList[index].MeasureData[idx].MeasureData = obj.data.MeasureData console.log('更新标记成功', idx) } else { state.visitTaskList[index].MeasureData.push(obj.data) console.log('新增标记成功') } localStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '') resolve() }) }, removeMeasuredData({ state }, obj) { return new Promise(resolve => { var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId) var measureData = state.visitTaskList[index].MeasureData // var uuid = obj.measureData.data.uuid // var idx = measureData.findIndex(item => item.MeasureData && item.MeasureData.data && item.MeasureData.data.uuid === uuid) var idx = measureData.findIndex(item => item.QuestionId === obj.questionId && item.RowIndex === obj.rowIndex) if (idx > -1) { measureData.splice(idx, 1) state.visitTaskList[index].MeasureData = measureData console.log('移除标记成功', idx) } localStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '') resolve() }) }, getStudyInfo({ state }, obj) { return new Promise(resolve => { var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId) if (state.visitTaskList[index].studyListInit) { resolve() } else { var studyList = [] getVisitStudyList(obj.trialId, obj.subjectVisitId, 0).then(res => { res.Result.forEach((study) => { const data = {} data.StudyId = study.StudyId data.StudyCode = study.StudyCode data.Modalities = study.Modalities data.SeriesCount = study.SeriesCount data.InstanceCount = study.InstanceCount data.InstanceCount = study.InstanceCount data.PreviewImageCount = 0 var seriesList = [] study.SeriesList.forEach((series) => { const imageIds = [] series.InstanceList.forEach((id) => { imageIds.push(`wadouri:/api/instance/content/${id}`) }) seriesList.push({ imageIds: imageIds, seriesId: series.Id, imageIdIndex: 0, seriesUid: series.SeriesInstanceUid, seriesNumber: series.SeriesNumber, sliceThickness: series.SliceThickness, modality: series.Modality, description: series.Description, previewImageUrl: `/api/series/preview/${series.Id}`, instanceCount: series.InstanceCount, prefetchInstanceCount: 0, loadStatus: false, imageloadedArr: [], studyId: study.StudyId, taskBlindName: obj.taskBlindName, visitTaskId: obj.visitTaskId, readingTaskState: state.visitTaskList[index].ReadingTaskState, isBaseLineTask: state.visitTaskList[index].IsBaseLineTask, isCurrentTask: state.visitTaskList[index].IsCurrentTask }) }) data.SeriesList = seriesList studyList.push(data) }) state.visitTaskList[index].StudyList = studyList state.visitTaskList[index].studyListInit = true localStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '') resolve() }).catch(() => { resolve() }) } }) }, updateStudyList({ state }, obj) { return new Promise(resolve => { var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId) var studyList = state.visitTaskList[index].StudyList for (var i = 0; i < studyList.length; i++) { for (var j = 0; j < studyList[i].SeriesList.length; j++) { if (studyList[i].SeriesList[j].seriesUid === obj.seriesUid) { var idx = studyList[i].SeriesList[j].imageIds.findIndex(image => image === obj.imageId) if (idx > -1 && studyList[i].SeriesList[j].imageloadedArr.indexOf(obj.imageId) < 0) { ++studyList[i].SeriesList[j].prefetchInstanceCount studyList[i].SeriesList[j].imageloadedArr.push(obj.imageId) if (studyList[i].SeriesList[j].prefetchInstanceCount >= studyList[i].SeriesList[j].instanceCount) { studyList[i].SeriesList[j].prefetchInstanceCount = studyList[i].SeriesList[j].instanceCount // 设置当前序列状态为已下载完成 studyList[i].SeriesList[j].loadStatus = true } break } } } } state.visitTaskList[index].StudyList = studyList localStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '') resolve() }) }, setStatus({ state }, obj) { var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId) state.visitTaskList[index].IsInit = true localStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '') }, setSeriesStack({ state }, seriesStack) { state.seriesStack = seriesStack } // getSeriesShowInCanvas({ state }, activeSeries) { // if (activeSeries) { // // 存在激活的series // } else { // // 初始化 // var idx = state.visitTaskList.findIndex(i => i.IsCurrentTask) // if (idx > -1 && state.activeHangingAgreement) { // if (state.activeHangingAgreement.name === 'A') { // const serires = getFirstSeries(state.visitTaskList[idx].StudyList) // state.seriesStack = [serires] // } else if (state.activeHangingAgreement.name === 'A|A') { // const serires = getFirstSeries(state.visitTaskList[idx].StudyList) // state.seriesStack = [serires, serires] // } else if (state.activeHangingAgreement.name === 'A|B') { // // 获取上一个任务的第一个序列 // var visitTaskNum = state.visitTaskList[idx].VisitTaskNum // if (visitTaskNum > 0) { // var prevIdx = state.visitTaskList.findIndex(i => i.VisitTaskNum === visitTaskNum - 1) // const prevSerires = getFirstSeries(state.visitTaskList[prevIdx].StudyList) // const serires = getFirstSeries(state.visitTaskList[idx].StudyList) // state.seriesStack = [serires, prevSerires] // } else { // const serires = getFirstSeries(state.visitTaskList[idx].StudyList) // state.seriesStack = [serires, serires] // } // } // } // } // } } export default { namespaced: true, state, mutations, actions }