Compare commits
37 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
07c92c48a4 | |
|
|
b5427dd17b | |
|
|
385643643e | |
|
|
756f1293aa | |
|
|
eee19f0ae9 | |
|
|
78c0910db7 | |
|
|
18a71725f9 | |
|
|
87332ae9d8 | |
|
|
401762dca7 | |
|
|
7b694d4afb | |
|
|
6e285d900b | |
|
|
c5d3b44c2c | |
|
|
cf4dbc2914 | |
|
|
3cef5afebd | |
|
|
060b61eafb | |
|
|
0d3571f672 | |
|
|
8b3bd101b6 | |
|
|
da252ae4df | |
|
|
fdb7251b62 | |
|
|
1f51bbd178 | |
|
|
597ca07fcf | |
|
|
b43c75dd9f | |
|
|
94f3e6c757 | |
|
|
1d95cd15f2 | |
|
|
a1f9283262 | |
|
|
a0abba71dd | |
|
|
02d85e19a6 | |
|
|
9ad916f860 | |
|
|
e0094c01d8 | |
|
|
0eb2135185 | |
|
|
8ddfe34f72 | |
|
|
c603d10ff5 | |
|
|
3fca2e76cb | |
|
|
c0ae4732fc | |
|
|
4ec0a178b4 | |
|
|
443a31df97 | |
|
|
d21c01076d |
|
|
@ -1,4 +1,39 @@
|
||||||
|
|
||||||
|
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
|
||||||
|
|
@ -33,6 +68,3 @@ trigger:
|
||||||
- main
|
- main
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -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,12 +94,15 @@ 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: { feedBack, timeTag },
|
components: {
|
||||||
|
feedBack,
|
||||||
|
// timeTag
|
||||||
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
drawer: false,
|
drawer: false,
|
||||||
|
|
|
||||||
|
|
@ -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')"
|
<el-button circle icon="el-icon-view" :title="$t('download:button:preview')" :disabled="forbid"
|
||||||
@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,6 +111,10 @@ export default {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false,
|
default: false,
|
||||||
},
|
},
|
||||||
|
forbid: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
SubjectId: {
|
SubjectId: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '',
|
default: '',
|
||||||
|
|
|
||||||
|
|
@ -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">
|
<form id="inputForm" :ref="`uploadForm_${scope.row.Id}`" enctype="multipart/form-data" v-if="!forbid">
|
||||||
<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">
|
<div class="btnBox" v-if="!forbid">
|
||||||
<span style="margin-right: 10px">
|
<span style="margin-right: 10px">
|
||||||
{{ $store.state.trials.uploadTip }}
|
{{ $store.state.trials.uploadTip }}
|
||||||
</span>
|
</span>
|
||||||
|
|
@ -354,6 +354,10 @@ export default {
|
||||||
return {}
|
return {}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
forbid: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
TaskId: {
|
TaskId: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '',
|
default: '',
|
||||||
|
|
|
||||||
|
|
@ -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" />
|
:isReadingTaskViewInOrder="isReadingTaskViewInOrder" :IsImageSegment="IsImageSegment" :forbid="forbid" />
|
||||||
</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"
|
:Criterion="Criterion" :VisitTaskId="VisitTaskId" :isUpload.sync="isUpload" :IsImageSegment="IsImageSegment"
|
||||||
:IsImageSegment="IsImageSegment" />
|
:forbid="forbid" />
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
@ -29,6 +29,10 @@ export default {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false,
|
default: false,
|
||||||
},
|
},
|
||||||
|
forbid: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
SubjectId: {
|
SubjectId: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '',
|
default: '',
|
||||||
|
|
|
||||||
|
|
@ -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')"
|
<el-button circle icon="el-icon-upload2" :title="$t('upload:nonedicom:button:upload')" v-if="!forbid"
|
||||||
@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,6 +239,10 @@ export default {
|
||||||
type: String,
|
type: String,
|
||||||
default: '',
|
default: '',
|
||||||
},
|
},
|
||||||
|
forbid: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
SubjectCode: {
|
SubjectCode: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '',
|
default: '',
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,109 +1,63 @@
|
||||||
<template>
|
<template>
|
||||||
<base-model :config="model_cfg">
|
<base-model :config="model_cfg">
|
||||||
<template slot="dialog-body">
|
<template slot="dialog-body">
|
||||||
<el-form
|
<el-form ref="NoticeForm" :model="form" :rules="rules" label-width="180px" size="small">
|
||||||
ref="NoticeForm"
|
|
||||||
:model="form"
|
|
||||||
:rules="rules"
|
|
||||||
label-width="180px"
|
|
||||||
size="small"
|
|
||||||
>
|
|
||||||
<el-form-item :label="$t('system:notice:label:NoticeLevel')" prop="NoticeLevelEnum">
|
<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
|
<el-option v-for="item of dict.type.NoteLevel" :key="item.value" :label="item.label"
|
||||||
v-for="item of dict.type.NoteLevel"
|
:value="item.raw.Code * 1" />
|
||||||
: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
|
<el-option v-for="item of dict.type.NoteType" :key="item.value" :label="item.label"
|
||||||
v-for="item of dict.type.NoteType"
|
:value="item.raw.Code * 1" />
|
||||||
: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
|
<el-option v-for="item of dict.type.NoticeApplicableTrial" :key="item.value" :label="item.label"
|
||||||
v-for="item of dict.type.NoticeApplicableTrial"
|
:value="item.raw.Code * 1" />
|
||||||
: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
|
<el-option v-for="item of roleList" :key="item.Id" :label="item.UserTypeShortName" :value="item.Id" />
|
||||||
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
|
<el-option v-for="item of dict.type.NoticeMode" :key="item.value" :label="item.label"
|
||||||
v-for="item of dict.type.NoticeMode"
|
:value="item.raw.Code * 1" />
|
||||||
: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
|
<el-date-picker v-model="form.StartDate" type="datetime" />
|
||||||
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
|
<el-date-picker v-model="form.EndDate" type="datetime" :default-time="'23:59:59'" />
|
||||||
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
|
<el-switch v-model="form.IsPush" :active-value="true" :inactive-value="false" />
|
||||||
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
|
<el-input v-model="form.NoticeContent" type="textarea" :autosize="{ minRows: 2, maxRows: 4 }" />
|
||||||
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
|
<el-upload class="upload-demo" action :before-upload="beforeUpload" :http-request="handleUploadFile"
|
||||||
class="upload-demo"
|
:on-preview="handlePreview" :on-remove="handleRemoveFile" :show-file-list="true" :limit="1"
|
||||||
action
|
:file-list="fileList">
|
||||||
:before-upload="beforeUpload"
|
<el-button size="small" type="primary"
|
||||||
:http-request="handleUploadFile"
|
:disabled="fileList.length > 0">{{ $t('common:button:upload') }}</el-button>
|
||||||
: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>
|
<el-button :disabled="btnLoading" size="small" type="primary" @click="handleCancle">{{ $t('common:button:cancel')
|
||||||
<el-button size="small" type="primary" :loading="btnLoading" @click="handleSave">{{ $t('common:button:save') }}</el-button>
|
}}</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>
|
||||||
|
|
@ -178,7 +132,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
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,13 @@
|
||||||
<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-else-if="NODE_ENV === 'usa'"
|
v-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/zzlogo4.png" alt="" />
|
<img v-else src="@/assets/system.png" alt="" style="width: 150px;height: 50px;margin-bottom: -7px;"/>
|
||||||
<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') }}
|
||||||
|
|
|
||||||
|
|
@ -495,7 +495,6 @@
|
||||||
<h2 v-else style="color:#ddd">
|
<h2 v-else style="color:#ddd">
|
||||||
Developing...
|
Developing...
|
||||||
</h2>
|
</h2>
|
||||||
</div>
|
|
||||||
<div v-if="iseCRFShowInDicomReading && currentReadingTaskState < 2" v-show="listShow" class="form-footer">
|
<div v-if="iseCRFShowInDicomReading && currentReadingTaskState < 2" v-show="listShow" class="form-footer">
|
||||||
<el-button type="primary" size="small" @click="skipTask">
|
<el-button type="primary" size="small" @click="skipTask">
|
||||||
<!-- 跳过 -->
|
<!-- 跳过 -->
|
||||||
|
|
@ -506,6 +505,8 @@
|
||||||
{{ $t('common:button:submit') }}
|
{{ $t('common:button:submit') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</transition>
|
</transition>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -704,6 +705,7 @@ 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: {
|
||||||
|
|
@ -987,6 +989,7 @@ export default {
|
||||||
|
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
console.log(this.iseCRFShowInDicomReading, this.currentReadingTaskState, this.listShow)
|
||||||
this.getHotKeys()
|
this.getHotKeys()
|
||||||
this.getWwcTpl()
|
this.getWwcTpl()
|
||||||
this.getTrialCriterion()
|
this.getTrialCriterion()
|
||||||
|
|
@ -1138,6 +1141,7 @@ 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')
|
||||||
|
|
@ -2501,6 +2505,30 @@ 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>
|
||||||
|
|
@ -2786,7 +2814,7 @@ export default {
|
||||||
|
|
||||||
.form-footer {
|
.form-footer {
|
||||||
background: #000;
|
background: #000;
|
||||||
padding: 10px 0;
|
padding: 5px 0;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 === 102 && readingTaskState < 2">
|
<div v-if="item.LesionType === 104 && 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,15 +49,6 @@
|
||||||
</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">
|
||||||
|
|
@ -76,14 +67,14 @@
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column v-if="readingTaskState < 2 && (item.LesionType === 102 || item.LesionType === 103)"
|
<el-table-column v-if="readingTaskState < 2 && (item.LesionType === 104)"
|
||||||
: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 === 102">
|
v-if="item.LesionType === 104">
|
||||||
{{ $t('common:button:delete') }}
|
{{ $t('common:button:delete') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -96,10 +87,12 @@
|
||||||
: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') : $t('common:ruleMessage:specify'), trigger: ['blur', 'change']
|
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']
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
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"
|
||||||
|
|
@ -107,9 +100,28 @@
|
||||||
</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-number v-model="questionForm[item.Id]"
|
<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"
|
: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,
|
||||||
|
|
@ -120,6 +132,15 @@
|
||||||
})" />
|
})" />
|
||||||
</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) })">
|
||||||
|
|
@ -256,7 +277,10 @@ export default {
|
||||||
qsForm: {},
|
qsForm: {},
|
||||||
diffId: '',
|
diffId: '',
|
||||||
eemId: '',
|
eemId: '',
|
||||||
lumenId: ''
|
lumenId: '',
|
||||||
|
sRoiStartDistanceId: '',
|
||||||
|
sRoiEndDistanceId: '',
|
||||||
|
sRoiDistanceId: ''
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|
@ -332,6 +356,7 @@ 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)
|
||||||
|
|
@ -343,9 +368,21 @@ 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.Type === 'number' || item.Type === 'calculation' ? isNaN(parseFloat(item.Answer)) ? null : parseFloat(item.Answer) : item.Answer
|
const answer = item.Type === 'select' && item.OptionTypeEnum === 1 && item.Answer ? JSON.parse(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)
|
||||||
}
|
}
|
||||||
|
|
@ -369,6 +406,7 @@ 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)
|
||||||
}
|
}
|
||||||
|
|
@ -460,12 +498,16 @@ 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 => {
|
||||||
|
|
@ -483,12 +525,84 @@ 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, parseFloat(value))
|
this.$set(this.questionForm, qId, 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)}`
|
||||||
|
|
@ -645,11 +759,7 @@ 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
|
||||||
|
|
@ -680,7 +790,8 @@ 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'))
|
||||||
|
|
@ -695,7 +806,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() {
|
||||||
|
|
@ -709,7 +820,7 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async uploadDlgClose() {
|
async uploadDlgClose() {
|
||||||
await this.getReadingQuestionAndAnswer(this.visitTaskId)
|
this.refreshQuestions()
|
||||||
DicomEvent.$emit('getReportInfo', true)
|
DicomEvent.$emit('getReportInfo', true)
|
||||||
this.upload.visible = false
|
this.upload.visible = false
|
||||||
},
|
},
|
||||||
|
|
@ -727,9 +838,8 @@ export default {
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.measurement-wrapper {
|
.measurement-wrapper {
|
||||||
height: 100%;
|
height: calc(100% - 50px);
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
|
||||||
.container {
|
.container {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
|
|
||||||
|
|
@ -891,6 +1001,10 @@ 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>
|
||||||
|
|
|
||||||
|
|
@ -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', 0)
|
data.append('readingImportType', 3)
|
||||||
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.$message.success(this.$t('common:message:savedSuccessfully'))
|
||||||
loading.close()
|
loading.close()
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
loading.close()
|
loading.close()
|
||||||
|
|
|
||||||
|
|
@ -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 === 112 || item.LesionType === 111) && readingTaskState < 2">
|
<div v-if="(item.LesionType === 104) && 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,15 +49,6 @@
|
||||||
</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">
|
||||||
|
|
@ -76,13 +67,13 @@
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column v-if="readingTaskState < 2" :label="$t('common:action:action')" width="90px"
|
<el-table-column v-if="readingTaskState < 2 && item.LesionType === 104" :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 v-if="item.LesionType === 112 || item.LesionType === 111" type="text" size="mini"
|
<el-button 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>
|
||||||
|
|
@ -96,8 +87,11 @@
|
||||||
: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') : $t('common:ruleMessage:specify'), trigger: ['blur', 'change']
|
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']
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
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'">
|
||||||
|
|
@ -112,6 +106,49 @@
|
||||||
: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">
|
||||||
|
|
@ -241,7 +278,10 @@ export default {
|
||||||
m1Id: '',
|
m1Id: '',
|
||||||
m2Id: '',
|
m2Id: '',
|
||||||
m3Id: '',
|
m3Id: '',
|
||||||
avgId: ''
|
avgId: '',
|
||||||
|
sRoiStartDistanceId: '',
|
||||||
|
sRoiEndDistanceId: '',
|
||||||
|
sRoiDistanceId: ''
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|
@ -328,9 +368,21 @@ 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.Type === 'number' || item.Type === 'calculation' ? isNaN(parseFloat(item.Answer)) ? null : parseFloat(item.Answer) : item.Answer
|
const answer = item.Type === 'select' && item.OptionTypeEnum === 1 && item.Answer ? JSON.parse(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)
|
||||||
}
|
}
|
||||||
|
|
@ -443,13 +495,17 @@ export default {
|
||||||
setMeasuredData(measureData) {
|
setMeasuredData(measureData) {
|
||||||
|
|
||||||
},
|
},
|
||||||
formItemChange(val, question) {
|
formItemChange(val, item) {
|
||||||
this.formChanged = true
|
this.formChanged = true
|
||||||
if (question.Type === 'number') {
|
// if (item.Type === 'number') {
|
||||||
this.limitBlur(question.Id, question.ValueType)
|
// this.limitBlur(item.Id, item.ValueType)
|
||||||
|
// }
|
||||||
|
if (item.Childrens && item.Childrens.length > 0) {
|
||||||
|
this.resetChild(item.Childrens)
|
||||||
}
|
}
|
||||||
if (question.Childrens && question.Childrens.length > 0) {
|
if ((item.QuestionType === 1013 || item.QuestionType === 1014) && !isNaN(parseFloat(this.questionForm[this.sRoiStartDistanceId])) && !isNaN(parseFloat(this.questionForm[this.sRoiEndDistanceId]))) {
|
||||||
this.resetChild(question.Childrens)
|
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) {
|
||||||
|
|
@ -471,6 +527,78 @@ 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)}`
|
||||||
|
|
@ -631,11 +759,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
|
||||||
|
|
@ -666,7 +794,8 @@ export default {
|
||||||
}
|
}
|
||||||
const res = await deleteReadingRowAnswer(param)
|
const res = await deleteReadingRowAnswer(param)
|
||||||
if (res.IsSuccess) {
|
if (res.IsSuccess) {
|
||||||
await this.getReadingQuestionAndAnswer(this.visitTaskId)
|
this.refreshQuestions()
|
||||||
|
// 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'))
|
||||||
|
|
@ -681,7 +810,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) {
|
||||||
|
|
@ -689,7 +818,7 @@ export default {
|
||||||
const params = {
|
const params = {
|
||||||
visitTaskId: this.visitTaskId
|
visitTaskId: this.visitTaskId
|
||||||
}
|
}
|
||||||
if (lesionType === 112) {
|
if (lesionType === 104) {
|
||||||
await getOCTFCTTemplate(params)
|
await getOCTFCTTemplate(params)
|
||||||
} else {
|
} else {
|
||||||
await getOCTLipidAngleTemplate(params)
|
await getOCTLipidAngleTemplate(params)
|
||||||
|
|
@ -699,7 +828,7 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async uploadDlgClose() {
|
async uploadDlgClose() {
|
||||||
await this.getReadingQuestionAndAnswer(this.visitTaskId)
|
this.refreshQuestions()
|
||||||
DicomEvent.$emit('getReportInfo', true)
|
DicomEvent.$emit('getReportInfo', true)
|
||||||
this.upload.visible = false
|
this.upload.visible = false
|
||||||
},
|
},
|
||||||
|
|
@ -717,7 +846,7 @@ export default {
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.measurement-wrapper {
|
.measurement-wrapper {
|
||||||
height: 100%;
|
height: calc(100% - 50px);
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
// overflow: hidden;
|
// overflow: hidden;
|
||||||
|
|
||||||
|
|
@ -883,5 +1012,8 @@ export default {
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
::v-deep.el-tag.el-tag--info {
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -72,15 +72,17 @@ 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)
|
||||||
if (this.lesionType === 112) {
|
data.append('readingImportType', 3)
|
||||||
data.append('readingImportType', 1)
|
|
||||||
await readingImport(data)
|
await readingImport(data)
|
||||||
} else {
|
// if (this.lesionType === 112) {
|
||||||
data.append('readingImportType', 2)
|
// data.append('readingImportType', 1)
|
||||||
await readingImport(data)
|
// await readingImport(data)
|
||||||
}
|
// } else {
|
||||||
|
// data.append('readingImportType', 2)
|
||||||
|
// await readingImport(data)
|
||||||
|
// }
|
||||||
this.$emit('close')
|
this.$emit('close')
|
||||||
this.$message.success('导入成功!')
|
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
||||||
loading.close()
|
loading.close()
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
loading.close()
|
loading.close()
|
||||||
|
|
|
||||||
|
|
@ -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"
|
:disabled="readingTaskState >= 2 || ((question.TableQuestionType === 2 || question.QuestionGenre === 2) && !!question.DictionaryCode) || isFirstChangeTask || question.QuestionType === 50 || question.QuestionType === 55 || question.QuestionType === 1026"
|
||||||
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,7 +169,16 @@
|
||||||
<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-number v-if="question.ValueType === 0" v-model="questionForm[question.Id]" :precision="0"
|
<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"
|
||||||
: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" />
|
||||||
|
|
@ -387,8 +396,22 @@ 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>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|
|
||||||
|
|
@ -179,7 +179,9 @@ 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) {
|
||||||
this.$set(this.questionForm, v.Id, v.Answer ? v.Answer : null)
|
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)
|
||||||
if (v.QuestionType === 44) {
|
if (v.QuestionType === 44) {
|
||||||
// 影像质量评估
|
// 影像质量评估
|
||||||
this.imageQualityId = v.Id
|
this.imageQualityId = v.Id
|
||||||
|
|
@ -210,6 +212,7 @@ 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)
|
||||||
|
|
@ -231,7 +234,11 @@ 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) {
|
||||||
this.$set(this.questionForm, i.Id, i.Answer ? i.Answer : null)
|
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)
|
||||||
if (i.QuestionType === 44) {
|
if (i.QuestionType === 44) {
|
||||||
// 影响质量评估
|
// 影响质量评估
|
||||||
this.imageQualityId = i.Id
|
this.imageQualityId = i.Id
|
||||||
|
|
@ -342,7 +349,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: this.questionForm[k] })
|
answers.push({ id: k, answer: Array.isArray(this.questionForm[k]) ? JSON.stringify(this.questionForm[k]) : this.questionForm[k] })
|
||||||
if (k === this.imageQualityId) {
|
if (k === this.imageQualityId) {
|
||||||
imageQuality = this.questionForm[k]
|
imageQuality = this.questionForm[k]
|
||||||
}
|
}
|
||||||
|
|
@ -685,7 +692,6 @@ 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)
|
||||||
|
|
@ -785,6 +791,7 @@ export default {
|
||||||
if (obj.key === this.spleenStatusId) {
|
if (obj.key === this.spleenStatusId) {
|
||||||
this.setSpleenCommentDisplay()
|
this.setSpleenCommentDisplay()
|
||||||
}
|
}
|
||||||
|
|
||||||
this.formChanged = true
|
this.formChanged = true
|
||||||
},
|
},
|
||||||
setQuestions() {
|
setQuestions() {
|
||||||
|
|
|
||||||
|
|
@ -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)
|
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))
|
||||||
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 = seriesList.filter(series => series.Modality === 'PT' || series.Modality === 'NM')
|
||||||
this.petSeries = series.sort((a, b) => b.instanceCount - a.instanceCount)
|
this.petSeries = series.sort((a, b) => b.instanceCount - a.instanceCount)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -500,6 +500,7 @@ 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'
|
||||||
|
|
@ -812,6 +813,7 @@ 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) {
|
||||||
|
|
@ -3567,6 +3569,30 @@ 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')
|
||||||
|
|
|
||||||
|
|
@ -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']" circle icon="el-icon-upload2"
|
<el-button v-hasPermi="['role:ir', 'role:pm', 'role:apm']" 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']" circle icon="el-icon-download"
|
<el-button v-hasPermi="['role:ir', 'role:pm', 'role:apm']" 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" />
|
:IsImageSegment="true" :forbid="forbid" />
|
||||||
<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" />
|
:IsImageSegment="true" :forbid="forbid" />
|
||||||
</BaseContainer>
|
</BaseContainer>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
|
|
@ -121,6 +121,10 @@ export default {
|
||||||
default: () => {
|
default: () => {
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
forbid: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
|
|
|
||||||
|
|
@ -116,6 +116,11 @@
|
||||||
<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>-->
|
||||||
|
|
@ -340,8 +345,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"
|
<el-button :disabled="scope.row.ReadingTaskState !== 2" icon="el-icon-view" circle
|
||||||
circle :title="$t('trials:reviewTrack:action:viewResults')" @click="lookReadingResults(scope.row)" />
|
: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) ||
|
||||||
|
|
@ -860,6 +865,11 @@
|
||||||
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>
|
||||||
|
|
@ -884,6 +894,7 @@ 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,
|
||||||
|
|
@ -920,6 +931,7 @@ export default {
|
||||||
ClinicalData,
|
ClinicalData,
|
||||||
ReviewResults,
|
ReviewResults,
|
||||||
RecordList,
|
RecordList,
|
||||||
|
TargetSection
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
AllocationReadingCategory: {
|
AllocationReadingCategory: {
|
||||||
|
|
@ -1031,6 +1043,13 @@ 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() {
|
||||||
|
|
@ -1065,6 +1084,10 @@ 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({
|
||||||
|
|
|
||||||
|
|
@ -92,6 +92,7 @@ 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()
|
||||||
|
|
|
||||||
|
|
@ -145,23 +145,29 @@ 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']
|
||||||
obj.legendData.forEach((item, index) => {
|
keys.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)
|
obj.seriesData.push(o)
|
||||||
arr.push(res.Result[keys[index]])
|
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.max = Math.max(...arr)
|
obj.max = Math.max(...arr)
|
||||||
this.initChart_left(obj)
|
this.initChart_left(obj)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue