Compare commits

..

No commits in common. "main" and "v2.0.0" have entirely different histories.
main ... v2.0.0

22 changed files with 205 additions and 575 deletions

View File

@ -1,39 +1,4 @@
kind: pipeline
type: ssh
name: ssh-linux-uat-irc-publish
platform:
os: Linux
arch: 386
clone:
disable: true #禁用默认克隆
server:
host: 101.132.253.119
user: root
password:
from_secret: local_pwd
steps:
- name: publish-uat-irc-web
commands:
- bash /opt/1panel/xc-deploy-new/devops-center/build-vue-then-publish.sh IRC_Web uat --mode uat
- name: notify-wecom
commands:
- echo $DRONE_COMMIT_AUTHOR "$DRONE_COMMIT_MESSAGE"
- bash /opt/1panel/xc-deploy-new/devops-center/drone-notify-wecom.sh "$DRONE_BUILD_STATUS" "$DRONE_REPO_NAME" "$DRONE_BRANCH" "$DRONE_BUILD_NUMBER" "4355b98e-1e72-4678-8dfb-2fc6ad0bf449" "$DRONE_COMMIT_MESSAGE" "$DRONE_COMMIT_AUTHOR" "Uat_IRC_WEB" "irc.uat.extimaging.com"
when:
status:
- success
- failure
trigger:
branch:
- uat
---
kind: pipeline
type: ssh
name: ssh-linux-test-irc-publish
@ -68,3 +33,6 @@ trigger:
- main

View File

@ -83,7 +83,7 @@
</div>
</el-drawer>
<feedBack v-if="$route.matched.length > 0" />
<!-- <timeTag /> -->
<timeTag />
</div>
</template>
@ -94,15 +94,12 @@ import {
} from '@/api/dictionary/dictionary'
import { getTrialExtralConfig } from '@/api/trials'
import feedBack from '@/views/trials/trials-layout/components/feedBack'
// import timeTag from '@/components/timeTag'
import timeTag from '@/components/timeTag'
import Vue from 'vue'
import i18n from './lang'
export default {
name: 'App',
components: {
feedBack,
// timeTag
},
components: { feedBack, timeTag },
data() {
return {
drawer: false,

View File

@ -68,7 +68,7 @@
<el-table-column :label="$t('common:action:action')" fixed="right" width="150">
<template slot-scope="scope">
<!--预览--->
<el-button circle icon="el-icon-view" :title="$t('download:button:preview')" :disabled="forbid"
<el-button circle icon="el-icon-view" :title="$t('download:button:preview')"
@click.stop="preview(scope.row)" />
<!--下载--->
<el-button circle icon="el-icon-download" :title="$t('download:button:download')"
@ -111,10 +111,6 @@ export default {
type: Boolean,
default: false,
},
forbid: {
type: Boolean,
default: false,
},
SubjectId: {
type: String,
default: '',

View File

@ -42,7 +42,7 @@
<template slot-scope="scope">
<div class="btnBox">
<!--上传--->
<form id="inputForm" :ref="`uploadForm_${scope.row.Id}`" enctype="multipart/form-data" v-if="!forbid">
<form id="inputForm" :ref="`uploadForm_${scope.row.Id}`" enctype="multipart/form-data">
<div class="form-group" style="margin-right: 10px">
<div :id="`directoryInputWrapper_${scope.row.Id}`" class="btn btn-link file-input">
<el-button circle icon="el-icon-upload2" :disabled="btnLoading" :loading="btnLoading"
@ -69,7 +69,7 @@
</el-table>
<div style="margin: 10px 0" class="top">
<span>{{ $t('upload:dicom:uploadTitle') }}</span>
<div class="btnBox" v-if="!forbid">
<div class="btnBox">
<span style="margin-right: 10px">
{{ $store.state.trials.uploadTip }}
</span>
@ -354,10 +354,6 @@ export default {
return {}
},
},
forbid: {
type: Boolean,
default: false,
},
TaskId: {
type: String,
default: '',

View File

@ -6,12 +6,12 @@
<el-tab-pane :label="$t('uploadDicomAndNonedicom:label:dicom')" name="dicom">
<dicomFile v-if="activeName === 'dicom'" :SubjectId="SubjectId" :SubjectCode="SubjectCode"
:Criterion="Criterion" :TaskId="VisitTaskId" :isUpload.sync="isUpload"
:isReadingTaskViewInOrder="isReadingTaskViewInOrder" :IsImageSegment="IsImageSegment" :forbid="forbid" />
:isReadingTaskViewInOrder="isReadingTaskViewInOrder" :IsImageSegment="IsImageSegment" />
</el-tab-pane>
<el-tab-pane :label="$t('uploadDicomAndNonedicom:label:nonedicom')" name="nonedicom">
<nonedicomFile v-if="activeName === 'nonedicom'" :SubjectId="SubjectId" :SubjectCode="SubjectCode"
:Criterion="Criterion" :VisitTaskId="VisitTaskId" :isUpload.sync="isUpload" :IsImageSegment="IsImageSegment"
:forbid="forbid" />
:Criterion="Criterion" :VisitTaskId="VisitTaskId" :isUpload.sync="isUpload"
:IsImageSegment="IsImageSegment" />
</el-tab-pane>
</el-tabs>
</el-dialog>
@ -29,10 +29,6 @@ export default {
type: Boolean,
default: false,
},
forbid: {
type: Boolean,
default: false,
},
SubjectId: {
type: String,
default: '',

View File

@ -109,7 +109,7 @@
<el-button circle :disabled="scope.row.UploadedFileCount <= 0" icon="el-icon-view"
:title="$t('upload:nonedicom:button:preview')" @click.stop="handlePreviewNoneDicomFiles(scope.row)" />
<!--上传--->
<el-button circle icon="el-icon-upload2" :title="$t('upload:nonedicom:button:upload')" v-if="!forbid"
<el-button circle icon="el-icon-upload2" :title="$t('upload:nonedicom:button:upload')"
@click.native.prevent="handleUpload(scope.row)" />
<!--删除--->
<el-button :disabled="scope.row.UploadedFileCount <= 0 ||
@ -239,10 +239,6 @@ export default {
type: String,
default: '',
},
forbid: {
type: Boolean,
default: false,
},
SubjectCode: {
type: String,
default: '',

View File

@ -37,7 +37,7 @@ export default {
// console.log(type, No);
if (type !== "Chrome" && type !== "Edge") {
this.tip = this.$t("browser:tip:changeBorwser");
// this.getSystemInfo()
this.getSystemInfo()
return (this.visible = true);
}
let res = await this.getInfo();
@ -53,10 +53,10 @@ export default {
this.tip += "、";
}
});
// this.getSystemInfo()
this.getSystemInfo()
return (this.visible = true);
}
// this.getSystemInfo()
this.getSystemInfo()
} catch (err) {
console.log(err);
}

View File

@ -1,63 +1,109 @@
<template>
<base-model :config="model_cfg">
<template slot="dialog-body">
<el-form ref="NoticeForm" :model="form" :rules="rules" label-width="180px" size="small">
<el-form-item :label="$t('system:notice:label:NoticeLevel')" prop="NoticeLevelEnum">
<el-form
ref="NoticeForm"
:model="form"
:rules="rules"
label-width="180px"
size="small"
>
<el-form-item :label="$t('system:notice:label:NoticeLevel')" prop="NoticeLevelEnum">
<el-select v-model="form.NoticeLevelEnum" clearable size="small">
<el-option v-for="item of dict.type.NoteLevel" :key="item.value" :label="item.label"
:value="item.raw.Code * 1" />
<el-option
v-for="item of dict.type.NoteLevel"
:key="item.value"
:label="item.label"
:value="item.raw.Code * 1"
/>
</el-select>
</el-form-item>
<el-form-item :label="$t('system:notice:label:NoticeType')" prop="NoticeTypeEnum">
<el-select v-model="form.NoticeTypeEnum" clearable size="small">
<el-option v-for="item of dict.type.NoteType" :key="item.value" :label="item.label"
:value="item.raw.Code * 1" />
<el-option
v-for="item of dict.type.NoteType"
:key="item.value"
:label="item.label"
:value="item.raw.Code * 1"
/>
</el-select>
</el-form-item>
<el-form-item :label="$t('system:notice:label:ApplicableProject')" prop="ApplicableProjectEnum">
<el-select v-model="form.ApplicableProjectEnum" clearable size="small">
<el-option v-for="item of dict.type.NoticeApplicableTrial" :key="item.value" :label="item.label"
:value="item.raw.Code * 1" />
<el-select v-model="form.ApplicableProjectEnum" clearable size="small">
<el-option
v-for="item of dict.type.NoticeApplicableTrial"
:key="item.value"
:label="item.label"
:value="item.raw.Code * 1"
/>
</el-select>
</el-form-item>
<el-form-item :label="$t('system:notice:label:NoticeUserTypeIdList')" prop="NoticeUserTypeIdList">
<el-select v-model="form.NoticeUserTypeIdList" multiple clearable size="small">
<el-option v-for="item of roleList" :key="item.Id" :label="item.UserTypeShortName" :value="item.Id" />
<el-option
v-for="item of roleList"
:key="item.Id"
:label="item.UserTypeShortName"
:value="item.Id"
/>
</el-select>
</el-form-item>
<el-form-item :label="$t('system:notice:label:NoticeMode')" prop="NoticeModeEnum">
<el-select v-model="form.NoticeModeEnum" clearable size="small">
<el-option v-for="item of dict.type.NoticeMode" :key="item.value" :label="item.label"
:value="item.raw.Code * 1" />
<el-option
v-for="item of dict.type.NoticeMode"
:key="item.value"
:label="item.label"
:value="item.raw.Code * 1"
/>
</el-select>
</el-form-item>
<el-form-item :label="$t('system:notice:label:StartDate')" prop="StartDate">
<el-date-picker v-model="form.StartDate" type="datetime" />
<el-date-picker
v-model="form.StartDate"
type="datetime"
/>
</el-form-item>
<el-form-item :label="$t('system:notice:label:EndDate')" prop="EndDate">
<el-date-picker v-model="form.EndDate" type="datetime" :default-time="'23:59:59'" />
<el-form-item :label="$t('system:notice:label:EndDate')" prop="EndDate">
<el-date-picker
v-model="form.EndDate"
type="datetime"
/>
</el-form-item>
<el-form-item v-if="!form.Id" :label="$t('system:notice:label:IsPush')" prop="IsPush">
<el-switch v-model="form.IsPush" :active-value="true" :inactive-value="false" />
<el-switch
v-model="form.IsPush"
:active-value="true"
:inactive-value="false"
/>
</el-form-item>
<el-form-item :label="$t('system:notice:label:NoticeContent')" prop="NoticeContent">
<el-input v-model="form.NoticeContent" type="textarea" :autosize="{ minRows: 2, maxRows: 4 }" />
<el-form-item :label="$t('system:notice:label:NoticeContent')" prop="NoticeContent">
<el-input
v-model="form.NoticeContent"
type="textarea"
:autosize="{ minRows: 2, maxRows: 4}"
/>
</el-form-item>
<el-form-item :label="$t('system:notice:label:file')">
<el-upload class="upload-demo" action :before-upload="beforeUpload" :http-request="handleUploadFile"
:on-preview="handlePreview" :on-remove="handleRemoveFile" :show-file-list="true" :limit="1"
:file-list="fileList">
<el-button size="small" type="primary"
:disabled="fileList.length > 0">{{ $t('common:button:upload') }}</el-button>
<el-form-item :label="$t('system:notice:label:file')">
<el-upload
class="upload-demo"
action
:before-upload="beforeUpload"
:http-request="handleUploadFile"
:on-preview="handlePreview"
:on-remove="handleRemoveFile"
:show-file-list="true"
:limit="1"
:file-list="fileList"
>
<el-button size="small" type="primary" :disabled="fileList.length > 0">{{$t('common:button:upload')}}</el-button>
</el-upload>
</el-form-item>
</el-form>
</template>
<template slot="dialog-footer">
<el-button :disabled="btnLoading" size="small" type="primary" @click="handleCancle">{{ $t('common:button:cancel')
}}</el-button>
<el-button size="small" type="primary" :loading="btnLoading" @click="handleSave">{{ $t('common:button:save')
}}</el-button>
<el-button :disabled="btnLoading" size="small" type="primary" @click="handleCancle">{{ $t('common:button:cancel') }}</el-button>
<el-button size="small" type="primary" :loading="btnLoading" @click="handleSave">{{ $t('common:button:save') }}</el-button>
</template>
</base-model>
</template>
@ -132,7 +178,7 @@ export default {
this.loading = true
var file = await this.fileToBlob(param.file)
const res = await this.OSSclient.put(`/System/NoticeAttachment/${param.file.name}`, file)
this.fileList.push({ name: param.file.name, path: this.$getObjectName(res.url), fullPath: this.$getObjectName(res.url), url: this.$getObjectName(res.url) })
this.fileList.push({ name: param.file.name, path: this.$getObjectName(res.url), fullPath: this.$getObjectName(res.url), url: this.$getObjectName(res.url)})
this.form.Path = this.$getObjectName(res.url)
this.form.FileName = param.file.name
this.loading = false

View File

@ -1,13 +1,14 @@
<template>
<div class="trials-navbar" style="position: relative">
<div class="leftMenu">
<img v-if="language === 'zh'" src="@/assets/zzlogo2.png" alt="" />
<img
v-if="NODE_ENV === 'usa'"
v-else-if="NODE_ENV === 'usa'"
src="@/assets/title-logo.png"
alt=""
class="title-logo"
/>
<img v-else src="@/assets/system.png" alt="" style="width: 150px;height: 50px;margin-bottom: -7px;"/>
<img v-else src="@/assets/zzlogo4.png" alt="" />
<span style="white-space: nowrap" v-if="NODE_ENV !== 'usa'">
<!-- 中心影像系统EICS -->
{{ $t('trials:trials:title:eics') }}

View File

@ -495,18 +495,17 @@
<h2 v-else style="color:#ddd">
Developing...
</h2>
<div v-if="iseCRFShowInDicomReading && currentReadingTaskState < 2" v-show="listShow" class="form-footer">
<el-button type="primary" size="small" @click="skipTask">
<!-- 跳过 -->
{{ $t('trials:readingReport:button:skip') }}
</el-button>
<el-button type="primary" size="small" @click="submit">
<!-- 提交 -->
{{ $t('common:button:submit') }}
</el-button>
</div>
</div>
<div v-if="iseCRFShowInDicomReading && currentReadingTaskState < 2" v-show="listShow" class="form-footer">
<el-button type="primary" size="small" @click="skipTask">
<!-- 跳过 -->
{{ $t('trials:readingReport:button:skip') }}
</el-button>
<el-button type="primary" size="small" @click="submit">
<!-- 提交 -->
{{ $t('common:button:submit') }}
</el-button>
</div>
</transition>
@ -705,7 +704,6 @@ import { getAutoCutNextTask } from '@/api/user'
import const_ from '@/const/sign-code'
import { changeURLStatic } from '@/utils/history.js'
import SystemInfo from "@/utils/systemInfo";
import md5 from 'js-md5'
export default {
name: 'DicomViewer',
components: {
@ -989,7 +987,6 @@ export default {
},
mounted() {
console.log(this.iseCRFShowInDicomReading, this.currentReadingTaskState, this.listShow)
this.getHotKeys()
this.getWwcTpl()
this.getTrialCriterion()
@ -1141,7 +1138,6 @@ export default {
let windowHeight = document.documentElement.clientHeight;
this.AspectRatio = windowWidth / windowHeight
};
this.getSystemInfoReading()
},
beforeDestroy() {
DicomEvent.$off('updateImage')
@ -2505,30 +2501,6 @@ export default {
})
},
async getSystemInfoReading() {
return new Promise(async resolve => {
let whitelisting = localStorage.getItem('whitelisting') ? JSON.parse(localStorage.getItem('whitelisting')) : []
let user = md5(sessionStorage.getItem('identityUserId'))
let r = whitelisting.some(item => item === user)
if (r) return resolve(true)
const systemInfo = new SystemInfo();
const allInfo = systemInfo.getAllInfo();
let deviceMemory = allInfo.hardware.deviceMemory; //
let { width, height } = allInfo.screen; //
// let discrete = allInfo.webgl.gpuType.discrete; //
// let estimatedMemory = allInfo.webgl.memoryInfo.estimatedMemory; //
// parseFloat(deviceMemory) < 16 ||
if (width < 1920 || height < 1080) {
let res = await this.$confirm(this.$t('browser:tip:Configuration'))
whitelisting.push(user)
localStorage.setItem('whitelisting', JSON.stringify(whitelisting))
resolve(res)
} else {
resolve(true)
}
})
},
}
}
</script>
@ -2814,7 +2786,7 @@ export default {
.form-footer {
background: #000;
padding: 5px 0;
padding: 10px 0;
text-align: center;
}

View File

@ -33,7 +33,7 @@
<div v-for="item in qs.Childrens" :key="item.Id">
<div v-if="item.Type === 'basicTable'" class="flex-row" style="margin:3px 0;">
<div class="title">{{ item.QuestionName }}</div>
<div v-if="item.LesionType === 104 && readingTaskState < 2">
<div v-if="item.LesionType === 102 && readingTaskState < 2">
<div class="add-icon" @click.prevent="downloadTpl">
<i class="el-icon-download" />
</div>
@ -49,6 +49,15 @@
</div>
<el-table v-if="item.Type === 'basicTable' && item.TableQuestions" :ref="item.Id"
:data="item.TableQuestions.Answers">
<!-- <el-table-column :label="$t('CustomizeQuestionFormItem:label:OrderMark')" width="60px" show-overflow-tooltip>
<template slot-scope="scope">
{{ getLesionName(item.OrderMark,scope.row.RowIndex) }}
</template>
</el-table-column> -->
<!-- <el-table-column
type="index"
width="40px"
/> -->
<el-table-column v-for="q of item.TableQuestions.Questions" :key="q.Id" :prop="q.Id"
:label="q.QuestionName" show-overflow-tooltip :render-header="renderHeader">
<template slot-scope="scope">
@ -67,14 +76,14 @@
</span>
</template>
</el-table-column>
<el-table-column v-if="readingTaskState < 2 && (item.LesionType === 104)"
<el-table-column v-if="readingTaskState < 2 && (item.LesionType === 102 || item.LesionType === 103)"
:label="$t('common:action:action')" width="90px" fixed="right">
<template slot-scope="scope">
<el-button type="text" size="mini" @click="handleAddOrEdit('edit', item, scope.$index)">
{{ $t('common:button:edit') }}
</el-button>
<el-button type="text" size="mini" @click="handleDelete(item, scope.$index)"
v-if="item.LesionType === 104">
v-if="item.LesionType === 102">
{{ $t('common:button:delete') }}
</el-button>
</template>
@ -87,12 +96,10 @@
:prop="item.Id" :rules="[
{
required: (item.IsRequired === 0 || (item.IsRequired === 1 && item.RelevanceId && (item.RelevanceValue.includes(questionForm[item.RelevanceId])))) && item.Type !== 'group' && item.Type !== 'summary',
message: ['radio', 'select', 'checkbox'].includes(item.Type) ? $t('common:ruleMessage:select') : (item.QuestionType === 1016 || item.QuestionType === 1017) ? $t('trials:reading:ruleMessage:validatorNumberInput') : $t('common:ruleMessage:specify'), trigger: ['blur', 'change']
message: ['radio', 'select', 'checkbox'].includes(item.Type) ? $t('common:ruleMessage:select') : $t('common:ruleMessage:specify'), trigger: ['blur', 'change']
},
{
validator: item.Type === 'number' && !item.TypeValue && (item.QuestionType === 1016 || item.QuestionType === 1017) ? validatorNumberOrNEInput : (rule, value, callback) => { callback() }, trigger: ['blur', 'change']
}
]">
<!-- 数值类型 -->
<template v-if="item.Type === 'textarea'">
<el-input v-model="questionForm[item.Id]" type="textarea" :autosize="{ minRows: 2, maxRows: 4 }"
:disabled="!isCurrentTask || readingTaskState >= 2"
@ -100,28 +107,9 @@
</template>
<template v-if="item.Type === 'number'">
<div style="display: flex;justify-content: space-between;">
<el-input
v-if="item.QuestionType === 1016 || item.QuestionType === 1017"
type="text"
@change="(val) => { formItemChange(val, item) }"
@input="numberOrNEInput(item.Id)"
@blur="handleNumberOrNEBlur(item)"
v-model.trim="questionForm[item.Id]" :disabled="readingTaskState === 2">
<template slot="append" v-if="item.Unit !== 0">{{ item.Unit !== 4 ? $fd('ValueUnit', item.Unit) : item.CustomUnit }}</template>
<template slot="append" v-else-if="item.ValueType === 2">%</template>
</el-input>
<el-input
v-else
@change="(val) => { formItemChange(val, item) }"
@input="numberInput(item.Id)"
@blur="handleBlur(questionForm[item.Id], questionForm, item)"
v-model.trim="questionForm[item.Id]" :disabled="readingTaskState === 2">
<template slot="append" v-if="item.Unit !== 0">{{ item.Unit !== 4 ? $fd('ValueUnit', item.Unit) : item.CustomUnit }}</template>
<template slot="append" v-else-if="item.ValueType === 2">%</template>
</el-input>
<!-- <el-input-number v-model="questionForm[item.Id]"
<el-input-number v-model="questionForm[item.Id]"
:disabled="!isCurrentTask || readingTaskState >= 2" :precision="0"
@change="((val) => { formItemChange(val, item) })" /> -->
@change="((val) => { formItemChange(val, item) })" />
<svg-icon v-if="item.ShowChartTypeEnum > 0" icon-class="readingChart"
class="svg-icon svg-readingChart" @click.stop="(e) => handleReadingChart({
e,
@ -132,15 +120,6 @@
})" />
</div>
</template>
<template v-if="item.Type === 'calculation'">
<el-input v-model="questionForm[item.Id]"
disabled type="number" @change="((val) => { formItemChange(val, item) })">
<template slot="append" v-if="item.Unit !== 0">
{{ item.Unit !== 4 ? $fd('ValueUnit', item.Unit) : item.CustomUnit }}
</template>
<template slot="append" v-else-if="item.ValueType === 2">%</template>
</el-input>
</template>
<template v-if="item.Type === 'select'">
<el-select v-model="questionForm[item.Id]" :disabled="!isCurrentTask || readingTaskState >= 2"
:multiple="item.OptionTypeEnum === 1" @change="((val) => { formItemChange(val, item) })">
@ -277,10 +256,7 @@ export default {
qsForm: {},
diffId: '',
eemId: '',
lumenId: '',
sRoiStartDistanceId: '',
sRoiEndDistanceId: '',
sRoiDistanceId: ''
lumenId: ''
}
},
computed: {
@ -356,7 +332,6 @@ export default {
}
this.questions = this.visitTaskList[i].ReadingQuestions
this.setQuestionForm(this.questions)
this.$nextTick(() => {
this.$refs['ecrf'].getQuestions(this.visitTaskId)
this.$refs['ecrf2'].getQuestions(this.visitTaskId)
@ -368,21 +343,9 @@ export default {
const type = ['number', 'radio', 'select', 'input', 'textarea', 'calculation']
questions.forEach(item => {
if (type.includes(item.Type)) {
const answer = item.Type === 'select' && item.OptionTypeEnum === 1 && item.Answer ? JSON.parse(item.Answer) : item.Answer
const answer = item.Type === 'select' && item.OptionTypeEnum === 1 && item.Answer ? JSON.parse(item.Answer) : item.Type === 'number' || item.Type === 'calculation' ? isNaN(parseFloat(item.Answer)) ? null : parseFloat(item.Answer) : item.Answer
this.$set(this.questionForm, item.Id, answer)
}
if (item.QuestionType === 1013) {
// ROI
this.sRoiStartDistanceId = item.Id
}
if (item.QuestionType === 1014) {
// ROI
this.sRoiEndDistanceId = item.Id
}
if (item.QuestionType === 1015) {
// ROI
this.sRoiDistanceId = item.Id
}
if (item.Childrens.length > 0) {
this.setQuestionForm(item.Childrens)
}
@ -406,7 +369,6 @@ export default {
item.TableQuestions.Answers[idx][i] = String(obj.anwsers[i])
}
}
if (item.Childrens.length > 0) {
this.setQuestions(item.Childrens, obj)
}
@ -498,16 +460,12 @@ export default {
},
formItemChange(val, item) {
this.formChanged = true
// if (item.Type === 'number') {
// this.limitBlur(item.Id, item.ValueType)
// }
if (item.Type === 'number') {
this.limitBlur(item.Id, item.ValueType)
}
if (item.Childrens && item.Childrens.length > 0) {
this.resetChild(item.Childrens)
}
if ((item.QuestionType === 1013 || item.QuestionType === 1014) && !isNaN(parseFloat(this.questionForm[this.sRoiStartDistanceId])) && !isNaN(parseFloat(this.questionForm[this.sRoiEndDistanceId]))) {
let num = parseFloat(this.questionForm[this.sRoiEndDistanceId]) - parseFloat(this.questionForm[this.sRoiStartDistanceId])
this.$set(this.questionForm, this.sRoiDistanceId, parseFloat(num).toFixed(this.digitPlaces))
}
},
resetChild(obj) {
obj.forEach(i => {
@ -525,84 +483,12 @@ export default {
if (valueType === 0) {
this.$set(this.questionForm, qId, parseInt(value))
} else if (valueType === 3) {
this.$set(this.questionForm, qId, value)
this.$set(this.questionForm, qId, parseFloat(value))
} else {
this.$set(this.questionForm, qId, this.numberToFixed(value))
}
}
},
validatorNumberOrNEInput(rule, value, callback) {
let reg = new RegExp(/^(?:-?(?:(?:0|[1-9]\d*)(?:\.\d+)?|\.\d+)|NE)$/, 'g')
if (value === '') {
callback();
} else {
if (!reg.test(value)) {
callback(new Error(this.$t('trials:reading:ruleMessage:validatorNumberInput')));
} else {
callback();
}
}
},
numberOrNEInput(id) {
this.formChanged = true
// this.questionForm[id] = this.questionForm[id].toUpperCase();
if (!this.questionForm[id]) {
return
}
let value = this.questionForm[id].toUpperCase().replace(/[^0-9.NE]/g, '')
if (value.startsWith('N')) {
if (value.length > 2) {
value = value.substring(0, 2)
}
if (value.length === 2 && value[1] !== 'E') {
value = 'N'
}
} else {
value = value.replace(/[NE]/g, '')
}
this.questionForm[id] = value
this.$set(this.questionForm, id, value)
},
numberInput(id) {
this.formChanged = true
let value = this.questionForm[id].replace(/[^\d.]/g, '')
this.$set(this.questionForm, id, value)
},
handleNumberOrNEBlur(item) {
if (this.questionForm[item.Id] && !isNaN(parseFloat(this.questionForm[item.Id]))) {
if (item.ValueType === 3) {
//
this.$set(this.questionForm, item.Id, value)
} else {
const num = parseFloat(this.questionForm[item.Id])
if (!isNaN(num)) {
this.$set(this.questionForm, item.Id, parseFloat(num).toFixed(this.digitPlaces))
if (item.ValueType === 0) {
//
this.$set(this.questionForm, item.Id, parseInt(num))
} else if (item.ValueType === 1 || item.ValueType === 2){
//
this.$set(this.questionForm, item.Id, parseFloat(num).toFixed(this.digitPlaces))
}
}
}
}
},
handleBlur(value, a, item) {
if (!value || item.ValueType === 3) return false
const num = parseFloat(this.questionForm[item.Id])
if (!isNaN(num)) {
this.$set(this.questionForm, item.Id, parseFloat(num).toFixed(this.digitPlaces))
if (item.ValueType === 0) {
//
this.$set(this.questionForm, item.Id, parseInt(num))
} else if (item.ValueType === 1 || item.ValueType === 2){
//
this.$set(this.questionForm, item.Id, parseFloat(num).toFixed(this.digitPlaces))
}
}
},
numberToFixed(v) {
if (this.digitPlaces > -1) {
return isNaN(parseFloat(v)) ? null : `${parseFloat(v).toFixed(this.digitPlaces)}`
@ -759,7 +645,11 @@ export default {
}
const res = await submitTableQuestion(params)
if (res.IsSuccess) {
this.refreshQuestions()
// this.refreshQuestions()
await this.getReadingQuestionAndAnswer(this.visitTaskId)
this.$refs['ecrf'].getQuestions(this.visitTaskId, true)
this.$refs['ecrf2'].getQuestions(this.visitTaskId, true)
this.$refs['ecrf3'].getQuestions(this.visitTaskId, true)
DicomEvent.$emit('getReportInfo', true)
//
this.addOrEdit.visible = false
@ -790,8 +680,7 @@ export default {
}
const res = await deleteReadingRowAnswer(param)
if (res.IsSuccess) {
// await this.getReadingQuestionAndAnswer(this.visitTaskId)
this.refreshQuestions()
await this.getReadingQuestionAndAnswer(this.visitTaskId)
DicomEvent.$emit('getReportInfo', true)
// ''
this.$message.success(this.$t('common:message:deletedSuccessfully'))
@ -806,7 +695,7 @@ export default {
uploadTpl(lesionType, TableName) {
this.upload.lesionType = lesionType
this.upload.TableName = TableName
this.upload.title = `${this.$fd('LesionType', lesionType)}`
this.upload.title = `导入( ${this.$fd('LesionType', lesionType)} `
this.upload.visible = true
},
async downloadTpl() {
@ -820,7 +709,7 @@ export default {
}
},
async uploadDlgClose() {
this.refreshQuestions()
await this.getReadingQuestionAndAnswer(this.visitTaskId)
DicomEvent.$emit('getReportInfo', true)
this.upload.visible = false
},
@ -838,8 +727,9 @@ export default {
</script>
<style lang="scss" scoped>
.measurement-wrapper {
height: calc(100% - 50px);
height: 100%;
overflow-y: auto;
.container {
padding: 10px;
@ -1001,10 +891,6 @@ export default {
::v-deep.el-table--scrollable-x .el-table__body-wrapper {
z-index: 2;
}
}
::v-deep.el-tag.el-tag--info {
color: #000;
}
}
</style>

View File

@ -56,11 +56,11 @@ export default {
var data = new FormData()
data.append('file', param.file)
data.append('visitTaskId', this.visitTaskId)
data.append('readingImportType', 3)
data.append('readingImportType', 0)
data.append('TableName', this.TableName)
await readingImport(data)
this.$emit('close')
this.$message.success(this.$t('common:message:savedSuccessfully'))
this.$message.success('导入成功!')
loading.close()
} catch (e) {
loading.close()

View File

@ -33,7 +33,7 @@
<div v-for="item in qs.Childrens" :key="item.Id">
<div v-if="item.Type === 'basicTable'" class="flex-row" style="margin:3px 0;">
<div class="title">{{ item.QuestionName }}</div>
<div v-if="(item.LesionType === 104) && readingTaskState < 2">
<div v-if="(item.LesionType === 112 || item.LesionType === 111) && readingTaskState < 2">
<div class="add-icon" @click.prevent="downloadTpl(item.LesionType)">
<i class="el-icon-download" />
</div>
@ -49,6 +49,15 @@
</div>
<el-table v-if="item.Type === 'basicTable' && item.TableQuestions" :ref="item.Id"
:data="item.TableQuestions.Answers" max-height="600">
<!-- <el-table-column :label="$t('CustomizeQuestionFormItem:label:OrderMark')" width="60px" show-overflow-tooltip>
<template slot-scope="scope">
{{ getLesionName(item.OrderMark,scope.row.RowIndex) }}
</template>
</el-table-column> -->
<!-- <el-table-column
type="index"
width="40px"
/> -->
<el-table-column v-for="q of item.TableQuestions.Questions" :key="q.Id" :prop="q.Id"
:label="q.QuestionName" show-overflow-tooltip :render-header="renderHeader">
<template slot-scope="scope">
@ -67,13 +76,13 @@
</span>
</template>
</el-table-column>
<el-table-column v-if="readingTaskState < 2 && item.LesionType === 104" :label="$t('common:action:action')" width="90px"
<el-table-column v-if="readingTaskState < 2" :label="$t('common:action:action')" width="90px"
fixed="right">
<template slot-scope="scope">
<el-button type="text" size="mini" @click="handleAddOrEdit('edit', item, scope.$index)">
{{ $t('common:button:edit') }}
</el-button>
<el-button type="text" size="mini"
<el-button v-if="item.LesionType === 112 || item.LesionType === 111" type="text" size="mini"
@click="handleDelete(item, scope.$index)">
{{ $t('common:button:delete') }}
</el-button>
@ -87,11 +96,8 @@
:prop="item.Id" :rules="[
{
required: (item.IsRequired === 0 || (item.IsRequired === 1 && item.RelevanceId && (item.RelevanceValue.includes(questionForm[item.RelevanceId])))) && item.Type !== 'group' && item.Type !== 'summary',
message: ['radio', 'select', 'checkbox'].includes(item.Type) ? $t('common:ruleMessage:select') : (item.QuestionType === 1016 || item.QuestionType === 1017) ? $t('trials:reading:ruleMessage:validatorNumberInput') : $t('common:ruleMessage:specify'), trigger: ['blur', 'change']
message: ['radio', 'select', 'checkbox'].includes(item.Type) ? $t('common:ruleMessage:select') : $t('common:ruleMessage:specify'), trigger: ['blur', 'change']
},
{
validator: item.Type === 'number' && !item.TypeValue && (item.QuestionType === 1016 || item.QuestionType === 1017) ? validatorNumberOrNEInput : (rule, value, callback) => { callback() }, trigger: ['blur', 'change']
}
]">
<!-- 数值类型 -->
<template v-if="item.Type === 'textarea'">
@ -106,49 +112,6 @@
:label="dict.label" />
</el-select>
</template>
<template v-if="item.Type === 'number'">
<div style="display: flex;justify-content: space-between;">
<el-input
v-if="item.QuestionType === 1016 || item.QuestionType === 1017"
type="text"
@change="(val) => { formItemChange(val, item) }"
@input="numberOrNEInput(item.Id)"
@blur="handleNumberOrNEBlur(item)"
v-model.trim="questionForm[item.Id]" :disabled="readingTaskState === 2">
<template slot="append" v-if="item.Unit !== 0">{{ item.Unit !== 4 ? $fd('ValueUnit', item.Unit) : item.CustomUnit }}</template>
<template slot="append" v-else-if="item.ValueType === 2">%</template>
</el-input>
<el-input
v-else
@change="(val) => { formItemChange(val, item) }"
@input="numberInput(item.Id)"
@blur="handleBlur(questionForm[item.Id], questionForm, item)"
v-model.trim="questionForm[item.Id]" :disabled="readingTaskState === 2">
<template slot="append" v-if="item.Unit !== 0">{{ item.Unit !== 4 ? $fd('ValueUnit', item.Unit) : item.CustomUnit }}</template>
<template slot="append" v-else-if="item.ValueType === 2">%</template>
</el-input>
<!-- <el-input-number v-model="questionForm[item.Id]"
:disabled="!isCurrentTask || readingTaskState >= 2" :precision="0"
@change="((val) => { formItemChange(val, item) })" /> -->
<svg-icon v-if="item.ShowChartTypeEnum > 0" icon-class="readingChart"
class="svg-icon svg-readingChart" @click.stop="(e) => handleReadingChart({
e,
data: {
QuestionId: item.Id,
QuestionName: item.QuestionName
}
})" />
</div>
</template>
<template v-if="item.Type === 'calculation'">
<el-input v-model="questionForm[item.Id]"
disabled type="number" @change="((val) => { formItemChange(val, item) })">
<template slot="append" v-if="item.Unit !== 0">
{{ item.Unit !== 4 ? $fd('ValueUnit', item.Unit) : item.CustomUnit }}
</template>
<template slot="append" v-else-if="item.ValueType === 2">%</template>
</el-input>
</template>
</el-form-item>
<template v-if="item.Childrens && item.Childrens.length > 0">
<template v-for="child in item.Childrens">
@ -278,10 +241,7 @@ export default {
m1Id: '',
m2Id: '',
m3Id: '',
avgId: '',
sRoiStartDistanceId: '',
sRoiEndDistanceId: '',
sRoiDistanceId: ''
avgId: ''
}
},
computed: {
@ -368,21 +328,9 @@ export default {
const type = ['number', 'radio', 'select', 'input', 'textarea', 'calculation']
questions.forEach(item => {
if (type.includes(item.Type)) {
const answer = item.Type === 'select' && item.OptionTypeEnum === 1 && item.Answer ? JSON.parse(item.Answer) : item.Answer
const answer = item.Type === 'select' && item.OptionTypeEnum === 1 && item.Answer ? JSON.parse(item.Answer) : item.Type === 'number' || item.Type === 'calculation' ? isNaN(parseFloat(item.Answer)) ? null : parseFloat(item.Answer) : item.Answer
this.$set(this.questionForm, item.Id, answer)
}
if (item.QuestionType === 1013) {
// ROI
this.sRoiStartDistanceId = item.Id
}
if (item.QuestionType === 1014) {
// ROI
this.sRoiEndDistanceId = item.Id
}
if (item.QuestionType === 1015) {
// ROI
this.sRoiDistanceId = item.Id
}
if (item.Childrens.length > 0) {
this.setQuestionForm(item.Childrens)
}
@ -495,17 +443,13 @@ export default {
setMeasuredData(measureData) {
},
formItemChange(val, item) {
formItemChange(val, question) {
this.formChanged = true
// if (item.Type === 'number') {
// this.limitBlur(item.Id, item.ValueType)
// }
if (item.Childrens && item.Childrens.length > 0) {
this.resetChild(item.Childrens)
if (question.Type === 'number') {
this.limitBlur(question.Id, question.ValueType)
}
if ((item.QuestionType === 1013 || item.QuestionType === 1014) && !isNaN(parseFloat(this.questionForm[this.sRoiStartDistanceId])) && !isNaN(parseFloat(this.questionForm[this.sRoiEndDistanceId]))) {
let num = parseFloat(this.questionForm[this.sRoiEndDistanceId]) - parseFloat(this.questionForm[this.sRoiStartDistanceId])
this.$set(this.questionForm, this.sRoiDistanceId, parseFloat(num).toFixed(this.digitPlaces))
if (question.Childrens && question.Childrens.length > 0) {
this.resetChild(question.Childrens)
}
},
resetChild(obj) {
@ -527,78 +471,6 @@ export default {
this.$set(this.questionForm, qId, this.numberToFixed(value))
}
},
validatorNumberOrNEInput(rule, value, callback) {
let reg = new RegExp(/^(?:-?(?:(?:0|[1-9]\d*)(?:\.\d+)?|\.\d+)|NE)$/, 'g')
if (value === '') {
callback();
} else {
if (!reg.test(value)) {
callback(new Error(this.$t('trials:reading:ruleMessage:validatorNumberInput')));
} else {
callback();
}
}
},
numberOrNEInput(id) {
this.formChanged = true
// this.questionForm[id] = this.questionForm[id].toUpperCase();
if (!this.questionForm[id]) {
return
}
let value = this.questionForm[id].toUpperCase().replace(/[^0-9.NE]/g, '')
if (value.startsWith('N')) {
if (value.length > 2) {
value = value.substring(0, 2)
}
if (value.length === 2 && value[1] !== 'E') {
value = 'N'
}
} else {
value = value.replace(/[NE]/g, '')
}
this.questionForm[id] = value
this.$set(this.questionForm, id, value)
},
numberInput(id) {
this.formChanged = true
let value = this.questionForm[id].replace(/[^\d.]/g, '')
this.$set(this.questionForm, id, value)
},
handleNumberOrNEBlur(item) {
if (this.questionForm[item.Id] && !this.questionForm[item.Id].startsWith('N')) {
if (item.ValueType === 3) {
//
this.$set(this.questionForm, item.Id, value)
} else {
const num = parseFloat(this.questionForm[item.Id])
if (!isNaN(num)) {
this.$set(this.questionForm, item.Id, parseFloat(num).toFixed(this.digitPlaces))
if (item.ValueType === 0) {
//
this.$set(this.questionForm, item.Id, parseInt(num))
} else if (item.ValueType === 1 || item.ValueType === 2){
//
this.$set(this.questionForm, item.Id, parseFloat(num).toFixed(this.digitPlaces))
}
}
}
}
},
handleBlur(value, a, item) {
if (!value || item.ValueType === 3) return false
const num = parseFloat(this.questionForm[item.Id])
if (!isNaN(num)) {
this.$set(this.questionForm, item.Id, parseFloat(num).toFixed(this.digitPlaces))
if (item.ValueType === 0) {
//
this.$set(this.questionForm, item.Id, parseInt(num))
} else if (item.ValueType === 1 || item.ValueType === 2){
//
this.$set(this.questionForm, item.Id, parseFloat(num).toFixed(this.digitPlaces))
}
}
},
numberToFixed(v) {
if (this.digitPlaces > -1) {
return isNaN(parseFloat(v)) ? null : `${parseFloat(v).toFixed(this.digitPlaces)}`
@ -759,11 +631,11 @@ export default {
}
const res = await submitTableQuestion(params)
if (res.IsSuccess) {
this.refreshQuestions()
// await this.getReadingQuestionAndAnswer(this.visitTaskId)
// this.$refs['ecrf'].getQuestions(this.visitTaskId, true)
// this.$refs['ecrf2'].getQuestions(this.visitTaskId, true)
// this.$refs['ecrf3'].getQuestions(this.visitTaskId, true)
// this.refreshQuestions()
await this.getReadingQuestionAndAnswer(this.visitTaskId)
this.$refs['ecrf'].getQuestions(this.visitTaskId, true)
this.$refs['ecrf2'].getQuestions(this.visitTaskId, true)
this.$refs['ecrf3'].getQuestions(this.visitTaskId, true)
DicomEvent.$emit('getReportInfo', true)
//
this.addOrEdit.visible = false
@ -794,8 +666,7 @@ export default {
}
const res = await deleteReadingRowAnswer(param)
if (res.IsSuccess) {
this.refreshQuestions()
// await this.getReadingQuestionAndAnswer(this.visitTaskId)
await this.getReadingQuestionAndAnswer(this.visitTaskId)
DicomEvent.$emit('getReportInfo', true)
// ''
this.$message.success(this.$t('common:message:deletedSuccessfully'))
@ -810,7 +681,7 @@ export default {
uploadTpl(lesionType, TableName) {
this.upload.lesionType = lesionType
this.upload.TableName = TableName
this.upload.title = `${this.$fd('LesionType', lesionType)}`
this.upload.title = `导入( ${this.$fd('LesionType', lesionType)} `
this.upload.visible = true
},
async downloadTpl(lesionType) {
@ -818,7 +689,7 @@ export default {
const params = {
visitTaskId: this.visitTaskId
}
if (lesionType === 104) {
if (lesionType === 112) {
await getOCTFCTTemplate(params)
} else {
await getOCTLipidAngleTemplate(params)
@ -828,7 +699,7 @@ export default {
}
},
async uploadDlgClose() {
this.refreshQuestions()
await this.getReadingQuestionAndAnswer(this.visitTaskId)
DicomEvent.$emit('getReportInfo', true)
this.upload.visible = false
},
@ -846,7 +717,7 @@ export default {
</script>
<style lang="scss" scoped>
.measurement-wrapper {
height: calc(100% - 50px);
height: 100%;
overflow-y: auto;
// overflow: hidden;
@ -1012,8 +883,5 @@ export default {
z-index: 2;
}
}
::v-deep.el-tag.el-tag--info {
color: #000;
}
}
</style>

View File

@ -72,17 +72,15 @@ export default {
data.append('file', param.file)
data.append('visitTaskId', this.visitTaskId)
data.append('TableName', this.TableName)
data.append('readingImportType', 3)
await readingImport(data)
// if (this.lesionType === 112) {
// data.append('readingImportType', 1)
// await readingImport(data)
// } else {
// data.append('readingImportType', 2)
// await readingImport(data)
// }
if (this.lesionType === 112) {
data.append('readingImportType', 1)
await readingImport(data)
} else {
data.append('readingImportType', 2)
await readingImport(data)
}
this.$emit('close')
this.$message.success(this.$t('common:message:savedSuccessfully'))
this.$message.success('导入成功!')
loading.close()
} catch (e) {
loading.close()

View File

@ -91,7 +91,7 @@
@change="((val) => { formItemChange(val, question) })" />
<!-- 下拉框 -->
<el-select v-else-if="question.Type === 'select'" v-model="questionForm[question.Id]"
:disabled="readingTaskState >= 2 || ((question.TableQuestionType === 2 || question.QuestionGenre === 2) && !!question.DictionaryCode) || isFirstChangeTask || question.QuestionType === 50 || question.QuestionType === 55 || question.QuestionType === 1026"
:disabled="readingTaskState >= 2 || ((question.TableQuestionType === 2 || question.QuestionGenre === 2) && !!question.DictionaryCode) || isFirstChangeTask || question.QuestionType === 50 || question.QuestionType === 55"
clearable :multiple="question.OptionTypeEnum === 1" @change="((val) => { formItemChange(val, question) })">
<template v-if="question.TableQuestionType === 1">
<el-option v-for="item in organList" :key="item.Id" :label="item[question.DataTableColumn]"
@ -169,16 +169,7 @@
<div style="display: flex;justify-content: space-between;"
v-else-if="question.Type === 'number' || question.Type === 'calculation'">
<template v-if="question.Type === 'number'">
<el-input
v-if="question.Unit"
type="number"
@input="(val) => questionForm[question.Id] = val.replace(/[^\d.]/g, '')"
@blur="handleBlur(questionForm[question.Id], questionForm, question)"
v-model.trim="questionForm[question.Id]" :disabled="readingTaskState === 2">
<template slot="append" v-if="question.Unit !== 0">{{ question.Unit !== 4 ? $fd('ValueUnit', question.Unit) : question.CustomUnit }}</template>
<template slot="append" v-else-if="question.ValueType === 2">%</template>
</el-input>
<el-input-number v-else-if="question.ValueType === 0" v-model="questionForm[question.Id]" :precision="0"
<el-input-number v-if="question.ValueType === 0" v-model="questionForm[question.Id]" :precision="0"
:disabled="readingTaskState >= 2 || isFirstChangeTask" />
<el-input-number v-else-if="question.ValueType === 3" v-model="questionForm[question.Id]"
:disabled="readingTaskState >= 2 || isFirstChangeTask" />
@ -396,21 +387,7 @@ export default {
this.fileList.splice(this.fileList.findIndex(f => f.url === file.url), 1)
this.urls.splice(this.fileList.findIndex(f => f === file.url), 1)
this.$emit('setFormItemData', { key: this.question.Id, val: this.urls.length > 0 ? this.urls.join('|') : '' })
},
handleBlur(value, a, item) {
if (!value || item.ValueType === 3) return false
const num = parseFloat(this.questionForm[item.Id])
if (!isNaN(num)) {
this.$set(this.questionForm, item.Id, parseFloat(num).toFixed(this.digitPlaces))
if (item.ValueType === 0) {
//
this.$set(this.questionForm, item.Id, parseInt(num))
} else if (item.ValueType === 1 || item.ValueType === 2){
//
this.$set(this.questionForm, item.Id, parseFloat(num).toFixed(this.digitPlaces))
}
}
},
}
}
}
</script>

View File

@ -179,9 +179,7 @@ export default {
v.IsBaseLineTask = this.isBaseLineTask
if (v.Type === 'group' && v.GroupClassify !== this.groupClassify) continue
if (!v.IsPage && v.Type !== 'group' && v.Type !== 'summary' && i.Id) {
const answer = v.Type === 'select' && v.OptionTypeEnum === 1 && v.Answer ? JSON.parse(v.Answer) : v.Answer
this.$set(this.questionForm, v.Id, answer ? answer : null)
// this.$set(this.questionForm, v.Id, v.Answer ? v.Answer : null)
this.$set(this.questionForm, v.Id, v.Answer ? v.Answer : null)
if (v.QuestionType === 44) {
//
this.imageQualityId = v.Id
@ -212,7 +210,6 @@ export default {
//
this.spleenBottomId = v.Id
}
}
if (v.Childrens.length > 0) {
this.setChild(v.Childrens)
@ -234,11 +231,7 @@ export default {
obj.forEach(i => {
i.IsBaseLineTask = this.isBaseLineTask
if (i.Type !== 'group' && i.Type !== 'summary' && i.Id) {
let answer = i.Type === 'select' && i.OptionTypeEnum === 1 && i.Answer ? JSON.parse(i.Answer) : i.Answer
if (i.DictionaryCode && i.Type === 'calculation') {
answer = this.$fd(i.DictionaryCode, parseInt(i.Answer))
}
this.$set(this.questionForm, i.Id, answer ? answer : null)
this.$set(this.questionForm, i.Id, i.Answer ? i.Answer : null)
if (i.QuestionType === 44) {
//
this.imageQualityId = i.Id
@ -349,7 +342,7 @@ export default {
var answers = []
var imageQuality = null
for (const k in this.questionForm) {
answers.push({ id: k, answer: Array.isArray(this.questionForm[k]) ? JSON.stringify(this.questionForm[k]) : this.questionForm[k] })
answers.push({ id: k, answer: this.questionForm[k] })
if (k === this.imageQualityId) {
imageQuality = this.questionForm[k]
}
@ -692,6 +685,7 @@ export default {
this.setQuestionStatus(this.questions, this.measurements[idx].QuestionType)
},
setQuestionStatus(obj, questionType) {
console.log(obj, questionType)
for (let i = 0; i < obj.length; i++) {
if (obj[i].QuestionType === questionType) {
this.$set(obj[i], 'SaveEnum', 1)
@ -791,7 +785,6 @@ export default {
if (obj.key === this.spleenStatusId) {
this.setSpleenCommentDisplay()
}
this.formChanged = true
},
setQuestions() {

View File

@ -142,7 +142,7 @@ export default {
getStudyList(obj) {
if (obj) {
var studyList = obj.StudyList || []
studyList = studyList.filter(i => !i.IsCriticalSequence && (i.Modalities.indexOf('CT') !== -1 || i.Modalities.indexOf('MR') !== -1) && (i.Modalities.indexOf('PT') !== -1 || i.Modalities.indexOf('NM') !== -1))
studyList = studyList.filter(i => !i.IsCriticalSequence && (i.Modalities.indexOf('CT') !== -1 || i.Modalities.indexOf('MR') !== -1) && i.Modalities.indexOf('PT') !== -1)
if (studyList.length === 0) return
this.studyList = studyList
}
@ -200,7 +200,7 @@ export default {
var series = seriesList.filter(series => series.Modality === 'CT' || series.Modality === 'MR')
this.ctSeries = series.sort((a, b) => b.instanceCount - a.instanceCount)
series = seriesList.filter(series => series.Modality === 'PT' || series.Modality === 'NM')
series = seriesList.filter(series => series.Modality === 'PT')
this.petSeries = series.sort((a, b) => b.instanceCount - a.instanceCount)
}
},

View File

@ -500,7 +500,6 @@ import downloadDicomAndNonedicom from '@/components/downloadDicomAndNonedicom'
import { getNetWorkSpeed, setNetWorkSpeedSizeAll, workSpeedclose } from "@/utils"
import readingChart from '@/components/readingChart'
import SystemInfo from "@/utils/systemInfo";
import md5 from 'js-md5'
const { visibility } = annotation
const { ViewportType, Events } = Enums
const renderingEngineId = 'myRenderingEngine'
@ -813,7 +812,6 @@ export default {
this.open.postMessage({ type: 'addNoneDicomMeasureData', data: data }, window.location)
})
document.addEventListener("click", this.foo);
this.getSystemInfoReading();
},
methods: {
setMPRInfo(obj) {
@ -3569,30 +3567,6 @@ export default {
})
},
async getSystemInfoReading() {
return new Promise(async resolve => {
let whitelisting = localStorage.getItem('whitelisting') ? JSON.parse(localStorage.getItem('whitelisting')) : []
let user = md5(sessionStorage.getItem('identityUserId'))
let r = whitelisting.some(item => item === user)
if (r) return resolve(true)
const systemInfo = new SystemInfo();
const allInfo = systemInfo.getAllInfo();
let deviceMemory = allInfo.hardware.deviceMemory; //
let { width, height } = allInfo.screen; //
// let discrete = allInfo.webgl.gpuType.discrete; //
// let estimatedMemory = allInfo.webgl.memoryInfo.estimatedMemory; //
// parseFloat(deviceMemory) < 16 ||
if (width < 1920 || height < 1080) {
let res = await this.$confirm(this.$t('browser:tip:Configuration'))
whitelisting.push(user)
localStorage.setItem('whitelisting', JSON.stringify(whitelisting))
resolve(res)
} else {
resolve(true)
}
})
},
},
beforeDestroy() {
DicomEvent.$off('isCanActiveNoneDicomTool')

View File

@ -69,11 +69,11 @@
: $t('trials:pendingReadingTasks:button:review')
" icon="el-icon-edit-outline" @click="handleReadImage(scope.row)" /> -->
<!-- 上传 -->
<el-button v-hasPermi="['role:ir', 'role:pm', 'role:apm']" circle icon="el-icon-upload2"
<el-button v-hasPermi="['role:ir']" circle icon="el-icon-upload2"
:title="$t('trials:pendingReadingTasks:button:upload')"
@click="openUploadImage(scope.row, 'upload')" />
<!-- 下载 -->
<el-button v-hasPermi="['role:ir', 'role:pm', 'role:apm']" circle icon="el-icon-download"
<el-button v-hasPermi="['role:ir']" circle icon="el-icon-download"
:title="$t('trials:pendingReadingTasks:button:download')"
@click="openUploadImage(scope.row, 'download')" />
</template>
@ -84,10 +84,10 @@
</div>
<upload-dicom-and-nonedicom v-if="uploadImageVisible" :SubjectId="uploadSubjectId"
:SubjectCode="uploadSubjectCode" :Criterion="uploadTrialCriterion" :visible.sync="uploadImageVisible"
:IsImageSegment="true" :forbid="forbid" />
:IsImageSegment="true" />
<download-dicom-and-nonedicom v-if="downloadImageVisible" :SubjectId="uploadSubjectId"
:SubjectCode="uploadSubjectCode" :Criterion="uploadTrialCriterion" :visible.sync="downloadImageVisible"
:IsImageSegment="true" :forbid="forbid" />
:IsImageSegment="true" />
</BaseContainer>
</template>
<script>
@ -121,10 +121,6 @@ export default {
default: () => {
return []
}
},
forbid: {
type: Boolean,
default: false
}
},
data() {

View File

@ -116,11 +116,6 @@
<el-button v-if="!viewStatus" type="primary" icon="el-icon-info" @click="handleViewRecord">
{{ $t('common:button:failureRecord') }}
</el-button>
<!-- 靶段标注 -->
<el-button type="primary" v-if="hasIVUSOROCT" v-hasPermi="['role:pm', 'role:apm']"
@click="handleTargetSection">
{{ $t('trials:pendingReadingTasks:button:TargetSection') }}
</el-button>
<!-- <el-button type="primary" @click="openReadingRules">-->
<!-- 阅片任务规则-->
<!-- </el-button>-->
@ -345,8 +340,8 @@
<el-table-column fixed="right" :label="$t('common:action:action')" width="220">
<template slot-scope="scope">
<!-- 查看阅片结果 -->
<el-button :disabled="scope.row.ReadingTaskState !== 2" icon="el-icon-view" circle
:title="$t('trials:reviewTrack:action:viewResults')" @click="lookReadingResults(scope.row)" />
<el-button :disabled="scope.row.ReadingTaskState !== 2" icon="el-icon-view"
circle :title="$t('trials:reviewTrack:action:viewResults')" @click="lookReadingResults(scope.row)" />
<!-- 申请重阅 -->
<el-button :disabled="scope.row.ReadingCategory !== 1 ||
(scope.row.TaskState !== 0 && scope.row.TaskState !== 5) ||
@ -865,11 +860,6 @@
custom-class="base-dialog-wrapper">
<RecordList />
</el-dialog>
<el-dialog :title="$t('trials:pendingReadingTasks:button:TargetSection')" :visible.sync="TargetSection_visible"
:fullscreen="true">
<TargetSection v-if="TargetSection_visible" :TrialReadingCriterionId="TrialReadingCriterionId" :forbid="true"
:trialCriterionList="trialCriterionList" />
</el-dialog>
</template>
</BaseContainer>
</template>
@ -894,7 +884,6 @@ import RefereeRules from './components/RefereeRules.vue'
import ReviewResults from './components/ReviewResults'
import ClinicalData from '../../subject/reading-period/components/ClinicalData'
import RecordList from './components/RecordList.vue'
import TargetSection from "@/views/trials/trials-panel/reading/reading-task/components/TargetSection"
const searchDataDefault = () => {
return {
PageIndex: 1,
@ -931,7 +920,6 @@ export default {
ClinicalData,
ReviewResults,
RecordList,
TargetSection
},
props: {
AllocationReadingCategory: {
@ -1043,13 +1031,6 @@ export default {
dialogLoading: false,
openWindow: null,
recordVisible: false,
TargetSection_visible: false
}
},
computed: {
hasIVUSOROCT() {
return this.trialCriterionList.some(item => item.CriterionType === 19 || item.CriterionType === 20)
}
},
mounted() {
@ -1084,10 +1065,6 @@ export default {
}
},
methods: {
handleTargetSection() {
this.TrialReadingCriterionId = this.trialCriterionList.find(item => item.CriterionType === 19 || item.CriterionType === 20).TrialReadingCriterionId
this.TargetSection_visible = true
},
//
openFeedBack(row) {
this.$FB({

View File

@ -92,7 +92,6 @@ export default {
this.loading = true
getTrialCriterionList(this.$route.query.trialId, false).then(res => {
this.trialCriterionList = res.Result.filter(item => [1, 18, 2, 3, 7, 10, 17].includes(Number(item.CriterionType)))
this.loading = false
if (this.trialCriterionList.length > 0) {
this.TrialReadingCriterionId = this.trialCriterionList[0].TrialReadingCriterionId
this.getList()

View File

@ -145,29 +145,23 @@ export default {
titleText: this.$t("trials:reportForms:cjart:title:VisitFinishedStat"),
seriesData: [],
max: 0,
legendData: []
legendData: [
this.$t("trials:reportForms:cjart:title:UploadedCount"),
this.$t("trials:reportForms:cjart:title:QCFinishedCount"),
this.$t("trials:reportForms:cjart:title:CheckFinishedCount"),
this.$t("trials:reportForms:cjart:title:ReadingFinishedCount")
]
}
res.Result.ReadingFinishedCount = res.Result.CriterionList[0].ReadingFinishedCount
let keys = ['UploadedCount', 'QCFinishedCount', 'CheckFinishedCount', 'ReadingFinishedCount']
keys.forEach((item, index) => {
if (res.Result[item] != null) {
let o = {
name: this.$t(`trials:reportForms:cjart:title:${item}`),
value: res.Result[item]
}
obj.legendData.push(o.name)
obj.seriesData.push(o)
arr.push(res.Result[item])
obj.legendData.forEach((item, index) => {
let o = {
name: item,
value: res.Result[keys[index]]
}
obj.seriesData.push(o)
arr.push(res.Result[keys[index]])
})
// obj.legendData.forEach((item, index) => {
// let o = {
// name: item,
// value: res.Result[keys[index]]
// }
// obj.seriesData.push(o)
// arr.push(res.Result[keys[index]])
// })
obj.max = Math.max(...arr)
this.initChart_left(obj)
}