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 kind: pipeline
type: ssh type: ssh
name: ssh-linux-test-irc-publish name: ssh-linux-test-irc-publish
@ -65,6 +30,9 @@ steps:
- failure - failure
trigger: trigger:
branch: branch:
- main - main

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -495,18 +495,17 @@
<h2 v-else style="color:#ddd"> <h2 v-else style="color:#ddd">
Developing... Developing...
</h2> </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>
<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> </transition>
@ -705,7 +704,6 @@ import { getAutoCutNextTask } from '@/api/user'
import const_ from '@/const/sign-code' import const_ from '@/const/sign-code'
import { changeURLStatic } from '@/utils/history.js' import { changeURLStatic } from '@/utils/history.js'
import SystemInfo from "@/utils/systemInfo"; import SystemInfo from "@/utils/systemInfo";
import md5 from 'js-md5'
export default { export default {
name: 'DicomViewer', name: 'DicomViewer',
components: { components: {
@ -989,7 +987,6 @@ export default {
}, },
mounted() { mounted() {
console.log(this.iseCRFShowInDicomReading, this.currentReadingTaskState, this.listShow)
this.getHotKeys() this.getHotKeys()
this.getWwcTpl() this.getWwcTpl()
this.getTrialCriterion() this.getTrialCriterion()
@ -1141,7 +1138,6 @@ export default {
let windowHeight = document.documentElement.clientHeight; let windowHeight = document.documentElement.clientHeight;
this.AspectRatio = windowWidth / windowHeight this.AspectRatio = windowWidth / windowHeight
}; };
this.getSystemInfoReading()
}, },
beforeDestroy() { beforeDestroy() {
DicomEvent.$off('updateImage') 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> </script>
@ -2814,7 +2786,7 @@ export default {
.form-footer { .form-footer {
background: #000; background: #000;
padding: 5px 0; padding: 10px 0;
text-align: center; text-align: center;
} }

View File

@ -33,7 +33,7 @@
<div v-for="item in qs.Childrens" :key="item.Id"> <div v-for="item in qs.Childrens" :key="item.Id">
<div v-if="item.Type === 'basicTable'" class="flex-row" style="margin:3px 0;"> <div v-if="item.Type === 'basicTable'" class="flex-row" style="margin:3px 0;">
<div class="title">{{ item.QuestionName }}</div> <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"> <div class="add-icon" @click.prevent="downloadTpl">
<i class="el-icon-download" /> <i class="el-icon-download" />
</div> </div>
@ -49,6 +49,15 @@
</div> </div>
<el-table v-if="item.Type === 'basicTable' && item.TableQuestions" :ref="item.Id" <el-table v-if="item.Type === 'basicTable' && item.TableQuestions" :ref="item.Id"
:data="item.TableQuestions.Answers"> :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" <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"> :label="q.QuestionName" show-overflow-tooltip :render-header="renderHeader">
<template slot-scope="scope"> <template slot-scope="scope">
@ -67,14 +76,14 @@
</span> </span>
</template> </template>
</el-table-column> </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"> :label="$t('common:action:action')" width="90px" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" size="mini" @click="handleAddOrEdit('edit', item, scope.$index)"> <el-button type="text" size="mini" @click="handleAddOrEdit('edit', item, scope.$index)">
{{ $t('common:button:edit') }} {{ $t('common:button:edit') }}
</el-button> </el-button>
<el-button type="text" size="mini" @click="handleDelete(item, scope.$index)" <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') }} {{ $t('common:button:delete') }}
</el-button> </el-button>
</template> </template>
@ -87,12 +96,10 @@
:prop="item.Id" :rules="[ :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', 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'"> <template v-if="item.Type === 'textarea'">
<el-input v-model="questionForm[item.Id]" type="textarea" :autosize="{ minRows: 2, maxRows: 4 }" <el-input v-model="questionForm[item.Id]" type="textarea" :autosize="{ minRows: 2, maxRows: 4 }"
:disabled="!isCurrentTask || readingTaskState >= 2" :disabled="!isCurrentTask || readingTaskState >= 2"
@ -100,28 +107,9 @@
</template> </template>
<template v-if="item.Type === 'number'"> <template v-if="item.Type === 'number'">
<div style="display: flex;justify-content: space-between;"> <div style="display: flex;justify-content: space-between;">
<el-input <el-input-number v-model="questionForm[item.Id]"
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" :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" <svg-icon v-if="item.ShowChartTypeEnum > 0" icon-class="readingChart"
class="svg-icon svg-readingChart" @click.stop="(e) => handleReadingChart({ class="svg-icon svg-readingChart" @click.stop="(e) => handleReadingChart({
e, e,
@ -132,15 +120,6 @@
})" /> })" />
</div> </div>
</template> </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'"> <template v-if="item.Type === 'select'">
<el-select v-model="questionForm[item.Id]" :disabled="!isCurrentTask || readingTaskState >= 2" <el-select v-model="questionForm[item.Id]" :disabled="!isCurrentTask || readingTaskState >= 2"
:multiple="item.OptionTypeEnum === 1" @change="((val) => { formItemChange(val, item) })"> :multiple="item.OptionTypeEnum === 1" @change="((val) => { formItemChange(val, item) })">
@ -277,10 +256,7 @@ export default {
qsForm: {}, qsForm: {},
diffId: '', diffId: '',
eemId: '', eemId: '',
lumenId: '', lumenId: ''
sRoiStartDistanceId: '',
sRoiEndDistanceId: '',
sRoiDistanceId: ''
} }
}, },
computed: { computed: {
@ -356,7 +332,6 @@ export default {
} }
this.questions = this.visitTaskList[i].ReadingQuestions this.questions = this.visitTaskList[i].ReadingQuestions
this.setQuestionForm(this.questions) this.setQuestionForm(this.questions)
this.$nextTick(() => { this.$nextTick(() => {
this.$refs['ecrf'].getQuestions(this.visitTaskId) this.$refs['ecrf'].getQuestions(this.visitTaskId)
this.$refs['ecrf2'].getQuestions(this.visitTaskId) this.$refs['ecrf2'].getQuestions(this.visitTaskId)
@ -368,21 +343,9 @@ export default {
const type = ['number', 'radio', 'select', 'input', 'textarea', 'calculation'] const type = ['number', 'radio', 'select', 'input', 'textarea', 'calculation']
questions.forEach(item => { questions.forEach(item => {
if (type.includes(item.Type)) { 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) 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) { if (item.Childrens.length > 0) {
this.setQuestionForm(item.Childrens) this.setQuestionForm(item.Childrens)
} }
@ -406,7 +369,6 @@ export default {
item.TableQuestions.Answers[idx][i] = String(obj.anwsers[i]) item.TableQuestions.Answers[idx][i] = String(obj.anwsers[i])
} }
} }
if (item.Childrens.length > 0) { if (item.Childrens.length > 0) {
this.setQuestions(item.Childrens, obj) this.setQuestions(item.Childrens, obj)
} }
@ -498,16 +460,12 @@ export default {
}, },
formItemChange(val, item) { formItemChange(val, item) {
this.formChanged = true this.formChanged = true
// if (item.Type === 'number') { if (item.Type === 'number') {
// this.limitBlur(item.Id, item.ValueType) this.limitBlur(item.Id, item.ValueType)
// } }
if (item.Childrens && item.Childrens.length > 0) { if (item.Childrens && item.Childrens.length > 0) {
this.resetChild(item.Childrens) 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) { resetChild(obj) {
obj.forEach(i => { obj.forEach(i => {
@ -525,84 +483,12 @@ export default {
if (valueType === 0) { if (valueType === 0) {
this.$set(this.questionForm, qId, parseInt(value)) this.$set(this.questionForm, qId, parseInt(value))
} else if (valueType === 3) { } else if (valueType === 3) {
this.$set(this.questionForm, qId, value) this.$set(this.questionForm, qId, parseFloat(value))
} else { } else {
this.$set(this.questionForm, qId, this.numberToFixed(value)) 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) { numberToFixed(v) {
if (this.digitPlaces > -1) { if (this.digitPlaces > -1) {
return isNaN(parseFloat(v)) ? null : `${parseFloat(v).toFixed(this.digitPlaces)}` return isNaN(parseFloat(v)) ? null : `${parseFloat(v).toFixed(this.digitPlaces)}`
@ -759,7 +645,11 @@ export default {
} }
const res = await submitTableQuestion(params) const res = await submitTableQuestion(params)
if (res.IsSuccess) { 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) DicomEvent.$emit('getReportInfo', true)
// //
this.addOrEdit.visible = false this.addOrEdit.visible = false
@ -790,8 +680,7 @@ export default {
} }
const res = await deleteReadingRowAnswer(param) const res = await deleteReadingRowAnswer(param)
if (res.IsSuccess) { if (res.IsSuccess) {
// await this.getReadingQuestionAndAnswer(this.visitTaskId) await this.getReadingQuestionAndAnswer(this.visitTaskId)
this.refreshQuestions()
DicomEvent.$emit('getReportInfo', true) DicomEvent.$emit('getReportInfo', true)
// '' // ''
this.$message.success(this.$t('common:message:deletedSuccessfully')) this.$message.success(this.$t('common:message:deletedSuccessfully'))
@ -806,7 +695,7 @@ export default {
uploadTpl(lesionType, TableName) { uploadTpl(lesionType, TableName) {
this.upload.lesionType = lesionType this.upload.lesionType = lesionType
this.upload.TableName = TableName this.upload.TableName = TableName
this.upload.title = `${this.$fd('LesionType', lesionType)}` this.upload.title = `导入( ${this.$fd('LesionType', lesionType)} `
this.upload.visible = true this.upload.visible = true
}, },
async downloadTpl() { async downloadTpl() {
@ -820,7 +709,7 @@ export default {
} }
}, },
async uploadDlgClose() { async uploadDlgClose() {
this.refreshQuestions() await this.getReadingQuestionAndAnswer(this.visitTaskId)
DicomEvent.$emit('getReportInfo', true) DicomEvent.$emit('getReportInfo', true)
this.upload.visible = false this.upload.visible = false
}, },
@ -838,8 +727,9 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.measurement-wrapper { .measurement-wrapper {
height: calc(100% - 50px); height: 100%;
overflow-y: auto; overflow-y: auto;
.container { .container {
padding: 10px; padding: 10px;
@ -1001,10 +891,6 @@ export default {
::v-deep.el-table--scrollable-x .el-table__body-wrapper { ::v-deep.el-table--scrollable-x .el-table__body-wrapper {
z-index: 2; z-index: 2;
} }
}
::v-deep.el-tag.el-tag--info {
color: #000;
} }
} }
</style> </style>

View File

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

View File

@ -33,7 +33,7 @@
<div v-for="item in qs.Childrens" :key="item.Id"> <div v-for="item in qs.Childrens" :key="item.Id">
<div v-if="item.Type === 'basicTable'" class="flex-row" style="margin:3px 0;"> <div v-if="item.Type === 'basicTable'" class="flex-row" style="margin:3px 0;">
<div class="title">{{ item.QuestionName }}</div> <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)"> <div class="add-icon" @click.prevent="downloadTpl(item.LesionType)">
<i class="el-icon-download" /> <i class="el-icon-download" />
</div> </div>
@ -49,6 +49,15 @@
</div> </div>
<el-table v-if="item.Type === 'basicTable' && item.TableQuestions" :ref="item.Id" <el-table v-if="item.Type === 'basicTable' && item.TableQuestions" :ref="item.Id"
:data="item.TableQuestions.Answers" max-height="600"> :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" <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"> :label="q.QuestionName" show-overflow-tooltip :render-header="renderHeader">
<template slot-scope="scope"> <template slot-scope="scope">
@ -67,13 +76,13 @@
</span> </span>
</template> </template>
</el-table-column> </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"> fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" size="mini" @click="handleAddOrEdit('edit', item, scope.$index)"> <el-button type="text" size="mini" @click="handleAddOrEdit('edit', item, scope.$index)">
{{ $t('common:button:edit') }} {{ $t('common:button:edit') }}
</el-button> </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)"> @click="handleDelete(item, scope.$index)">
{{ $t('common:button:delete') }} {{ $t('common:button:delete') }}
</el-button> </el-button>
@ -87,11 +96,8 @@
:prop="item.Id" :rules="[ :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', 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'"> <template v-if="item.Type === 'textarea'">
@ -106,49 +112,6 @@
:label="dict.label" /> :label="dict.label" />
</el-select> </el-select>
</template> </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> </el-form-item>
<template v-if="item.Childrens && item.Childrens.length > 0"> <template v-if="item.Childrens && item.Childrens.length > 0">
<template v-for="child in item.Childrens"> <template v-for="child in item.Childrens">
@ -278,10 +241,7 @@ export default {
m1Id: '', m1Id: '',
m2Id: '', m2Id: '',
m3Id: '', m3Id: '',
avgId: '', avgId: ''
sRoiStartDistanceId: '',
sRoiEndDistanceId: '',
sRoiDistanceId: ''
} }
}, },
computed: { computed: {
@ -368,21 +328,9 @@ export default {
const type = ['number', 'radio', 'select', 'input', 'textarea', 'calculation'] const type = ['number', 'radio', 'select', 'input', 'textarea', 'calculation']
questions.forEach(item => { questions.forEach(item => {
if (type.includes(item.Type)) { 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) 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) { if (item.Childrens.length > 0) {
this.setQuestionForm(item.Childrens) this.setQuestionForm(item.Childrens)
} }
@ -495,17 +443,13 @@ export default {
setMeasuredData(measureData) { setMeasuredData(measureData) {
}, },
formItemChange(val, item) { formItemChange(val, question) {
this.formChanged = true this.formChanged = true
// if (item.Type === 'number') { if (question.Type === 'number') {
// this.limitBlur(item.Id, item.ValueType) this.limitBlur(question.Id, question.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]))) { if (question.Childrens && question.Childrens.length > 0) {
let num = parseFloat(this.questionForm[this.sRoiEndDistanceId]) - parseFloat(this.questionForm[this.sRoiStartDistanceId]) this.resetChild(question.Childrens)
this.$set(this.questionForm, this.sRoiDistanceId, parseFloat(num).toFixed(this.digitPlaces))
} }
}, },
resetChild(obj) { resetChild(obj) {
@ -527,78 +471,6 @@ export default {
this.$set(this.questionForm, qId, this.numberToFixed(value)) 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) { numberToFixed(v) {
if (this.digitPlaces > -1) { if (this.digitPlaces > -1) {
return isNaN(parseFloat(v)) ? null : `${parseFloat(v).toFixed(this.digitPlaces)}` return isNaN(parseFloat(v)) ? null : `${parseFloat(v).toFixed(this.digitPlaces)}`
@ -759,11 +631,11 @@ export default {
} }
const res = await submitTableQuestion(params) const res = await submitTableQuestion(params)
if (res.IsSuccess) { if (res.IsSuccess) {
this.refreshQuestions() // this.refreshQuestions()
// await this.getReadingQuestionAndAnswer(this.visitTaskId) await this.getReadingQuestionAndAnswer(this.visitTaskId)
// this.$refs['ecrf'].getQuestions(this.visitTaskId, true) this.$refs['ecrf'].getQuestions(this.visitTaskId, true)
// this.$refs['ecrf2'].getQuestions(this.visitTaskId, true) this.$refs['ecrf2'].getQuestions(this.visitTaskId, true)
// this.$refs['ecrf3'].getQuestions(this.visitTaskId, true) this.$refs['ecrf3'].getQuestions(this.visitTaskId, true)
DicomEvent.$emit('getReportInfo', true) DicomEvent.$emit('getReportInfo', true)
// //
this.addOrEdit.visible = false this.addOrEdit.visible = false
@ -794,8 +666,7 @@ export default {
} }
const res = await deleteReadingRowAnswer(param) const res = await deleteReadingRowAnswer(param)
if (res.IsSuccess) { if (res.IsSuccess) {
this.refreshQuestions() await this.getReadingQuestionAndAnswer(this.visitTaskId)
// await this.getReadingQuestionAndAnswer(this.visitTaskId)
DicomEvent.$emit('getReportInfo', true) DicomEvent.$emit('getReportInfo', true)
// '' // ''
this.$message.success(this.$t('common:message:deletedSuccessfully')) this.$message.success(this.$t('common:message:deletedSuccessfully'))
@ -810,7 +681,7 @@ export default {
uploadTpl(lesionType, TableName) { uploadTpl(lesionType, TableName) {
this.upload.lesionType = lesionType this.upload.lesionType = lesionType
this.upload.TableName = TableName this.upload.TableName = TableName
this.upload.title = `${this.$fd('LesionType', lesionType)}` this.upload.title = `导入( ${this.$fd('LesionType', lesionType)} `
this.upload.visible = true this.upload.visible = true
}, },
async downloadTpl(lesionType) { async downloadTpl(lesionType) {
@ -818,7 +689,7 @@ export default {
const params = { const params = {
visitTaskId: this.visitTaskId visitTaskId: this.visitTaskId
} }
if (lesionType === 104) { if (lesionType === 112) {
await getOCTFCTTemplate(params) await getOCTFCTTemplate(params)
} else { } else {
await getOCTLipidAngleTemplate(params) await getOCTLipidAngleTemplate(params)
@ -828,7 +699,7 @@ export default {
} }
}, },
async uploadDlgClose() { async uploadDlgClose() {
this.refreshQuestions() await this.getReadingQuestionAndAnswer(this.visitTaskId)
DicomEvent.$emit('getReportInfo', true) DicomEvent.$emit('getReportInfo', true)
this.upload.visible = false this.upload.visible = false
}, },
@ -846,7 +717,7 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.measurement-wrapper { .measurement-wrapper {
height: calc(100% - 50px); height: 100%;
overflow-y: auto; overflow-y: auto;
// overflow: hidden; // overflow: hidden;
@ -1012,8 +883,5 @@ export default {
z-index: 2; z-index: 2;
} }
} }
::v-deep.el-tag.el-tag--info {
color: #000;
}
} }
</style> </style>

View File

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

View File

@ -91,7 +91,7 @@
@change="((val) => { formItemChange(val, question) })" /> @change="((val) => { formItemChange(val, question) })" />
<!-- 下拉框 --> <!-- 下拉框 -->
<el-select v-else-if="question.Type === 'select'" v-model="questionForm[question.Id]" <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) })"> clearable :multiple="question.OptionTypeEnum === 1" @change="((val) => { formItemChange(val, question) })">
<template v-if="question.TableQuestionType === 1"> <template v-if="question.TableQuestionType === 1">
<el-option v-for="item in organList" :key="item.Id" :label="item[question.DataTableColumn]" <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;" <div style="display: flex;justify-content: space-between;"
v-else-if="question.Type === 'number' || question.Type === 'calculation'"> v-else-if="question.Type === 'number' || question.Type === 'calculation'">
<template v-if="question.Type === 'number'"> <template v-if="question.Type === 'number'">
<el-input <el-input-number v-if="question.ValueType === 0" v-model="questionForm[question.Id]" :precision="0"
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"
:disabled="readingTaskState >= 2 || isFirstChangeTask" /> :disabled="readingTaskState >= 2 || isFirstChangeTask" />
<el-input-number v-else-if="question.ValueType === 3" v-model="questionForm[question.Id]" <el-input-number v-else-if="question.ValueType === 3" v-model="questionForm[question.Id]"
:disabled="readingTaskState >= 2 || isFirstChangeTask" /> :disabled="readingTaskState >= 2 || isFirstChangeTask" />
@ -396,21 +387,7 @@ export default {
this.fileList.splice(this.fileList.findIndex(f => f.url === file.url), 1) this.fileList.splice(this.fileList.findIndex(f => f.url === file.url), 1)
this.urls.splice(this.fileList.findIndex(f => f === 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('|') : '' }) 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> </script>

View File

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

View File

@ -142,7 +142,7 @@ export default {
getStudyList(obj) { getStudyList(obj) {
if (obj) { if (obj) {
var studyList = obj.StudyList || [] 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 if (studyList.length === 0) return
this.studyList = studyList this.studyList = studyList
} }
@ -200,7 +200,7 @@ export default {
var series = seriesList.filter(series => series.Modality === 'CT' || series.Modality === 'MR') var series = seriesList.filter(series => series.Modality === 'CT' || series.Modality === 'MR')
this.ctSeries = series.sort((a, b) => b.instanceCount - a.instanceCount) 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) 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 { getNetWorkSpeed, setNetWorkSpeedSizeAll, workSpeedclose } from "@/utils"
import readingChart from '@/components/readingChart' import readingChart from '@/components/readingChart'
import SystemInfo from "@/utils/systemInfo"; import SystemInfo from "@/utils/systemInfo";
import md5 from 'js-md5'
const { visibility } = annotation const { visibility } = annotation
const { ViewportType, Events } = Enums const { ViewportType, Events } = Enums
const renderingEngineId = 'myRenderingEngine' const renderingEngineId = 'myRenderingEngine'
@ -813,7 +812,6 @@ export default {
this.open.postMessage({ type: 'addNoneDicomMeasureData', data: data }, window.location) this.open.postMessage({ type: 'addNoneDicomMeasureData', data: data }, window.location)
}) })
document.addEventListener("click", this.foo); document.addEventListener("click", this.foo);
this.getSystemInfoReading();
}, },
methods: { methods: {
setMPRInfo(obj) { 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() { beforeDestroy() {
DicomEvent.$off('isCanActiveNoneDicomTool') DicomEvent.$off('isCanActiveNoneDicomTool')

View File

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

View File

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

View File

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

View File

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