19 Commits

Author SHA1 Message Date
wangxiaoshuang 9d8db73c4f 靶段标注上传下载列表显示受试者编号
continuous-integration/drone/push Build is passing
2026-08-27 15:14:46 +08:00
wangxiaoshuang 7fa26be9d1 pm靶段标注开放预览
continuous-integration/drone/push Build is passing
2026-08-27 14:40:54 +08:00
wangxiaoshuang 389a0b281e 后处理上传删除按钮限定IR 2026-08-27 14:16:31 +08:00
wangxiaoshuang 94d7f370d3 靶段标注排序问题
continuous-integration/drone/push Build is passing
2026-08-27 14:04:16 +08:00
wangxiaoshuang 6151a73104 已阅的任务后处理禁用上传 2026-08-27 13:28:25 +08:00
wangxiaoshuang 52e6863df7 1
continuous-integration/drone/push Build is passing
2026-08-27 11:10:41 +08:00
wangxiaoshuang dd7e39faee IVUS和OCT允许上传判断修改
continuous-integration/drone/push Build is passing
2026-08-27 10:59:59 +08:00
wangxiaoshuang 88cf1f5752 后处理上传下载排序改为升序
continuous-integration/drone/push Build is passing
2026-08-27 10:27:35 +08:00
wangxiaoshuang cf36795651 IVUS和OCT上传下载校验修改
continuous-integration/drone/push Build is passing
2026-08-27 10:12:47 +08:00
caiyiling b9804432d4 1 2026-08-25 15:44:48 +08:00
caiyiling a8fcf315c4 图标更改
continuous-integration/drone/push Build is passing
2026-08-25 14:37:41 +08:00
caiyiling 3ea8b8b771 图标更改
continuous-integration/drone/push Build is passing
2026-08-25 13:41:54 +08:00
caiyiling 017d0198fe 触发裁判指标逻辑更改
continuous-integration/drone/push Build is passing
2026-08-25 11:21:46 +08:00
caiyiling 4d7971b30b Merge branch 'uat' of https://gitea.frp.extimaging.com/XCKJ/irc_web into uat
continuous-integration/drone/push Build is passing
2026-08-25 09:36:47 +08:00
caiyiling fc2ad8f5ba 裁判阅片更改 2026-08-25 09:36:28 +08:00
wangxiaoshuang a0ec05e665 上传文件铭感词检验添加国际化 2026-08-25 09:16:28 +08:00
wangxiaoshuang 08181b9aa2 1
continuous-integration/drone/push Build is passing
2026-08-24 15:11:34 +08:00
wangxiaoshuang ab27f86b68 IVUS和OCT模板下载
continuous-integration/drone/push Build is pending
2026-08-24 14:13:53 +08:00
caiyiling 95987af7cc 自动分类问题来源是数值类型时默认值改为NE 2026-08-21 15:40:11 +08:00
39 changed files with 290 additions and 283 deletions
+1 -5
View File
@@ -2,11 +2,7 @@
ENV = 'usa' ENV = 'usa'
NODE_ENV = 'usa' NODE_ENV = 'usa'
# base public path # base public path
# VUE_APP_BASE_PATH = 'https://d3taa4kz0xxv95.cloudfront.net/2025-10-31/' VUE_APP_BASE_PATH = 'https://ei-code-prod.s3.amazonaws.com/2024-07-30/'
VUE_APP_BASE_PATH = '/'
# onlyoffice地址
VUE_APP_ONLYOFFICE_URL = "https://onlyoffice.uat.elevateimaging.ai"
# 是否开启登陆限制 true:是 false:否 # 是否开启登陆限制 true:是 false:否
VUE_APP_LOGIN_FOR_PERMISSION = true VUE_APP_LOGIN_FOR_PERMISSION = true
+1 -4
View File
@@ -2,10 +2,7 @@
ENV = 'usa' ENV = 'usa'
NODE_ENV = 'usa' NODE_ENV = 'usa'
# base public path # base public path
VUE_APP_BASE_PATH = '/' VUE_APP_BASE_PATH = 'https://ei-med-s3-code.s3.amazonaws.com/2024-07-30/'
# onlyoffice地址
VUE_APP_ONLYOFFICE_URL = "https://office.lili.elevateimaging.ai"
# 是否开启登陆限制 true:是 false:否 # 是否开启登陆限制 true:是 false:否
VUE_APP_LOGIN_FOR_PERMISSION = true VUE_APP_LOGIN_FOR_PERMISSION = true
-44
View File
@@ -1,44 +0,0 @@
# just a flag
ENV = 'usa'
NODE_ENV = 'usa'
# base public path
VUE_APP_BASE_PATH = 'https://ei-code-prod.s3.amazonaws.com/2024-08-12/'
# 是否开启登陆限制 true:是 false:否
VUE_APP_LOGIN_FOR_PERMISSION = true
# 是否开启长时间无操作锁定弹框MFA验证 true:是 false:否
VUE_APP_LOCK_FOR_PERMISSION_MFA = true
# 是否开启长时间无操作锁定弹框 true:是 false:否
VUE_APP_LOCK_FOR_PERMISSION = true
# 无操作锁定弹框判断时间 单位:秒
VUE_APP_LOCK_FOR_TIME = 900
# 是否开启长时间无操作登出 true:是 false:否
VUE_APP_LOGOUT_FOR_PERMISSION = true
# 无操作锁定弹框判断时间 单位:秒
VUE_APP_LOGOUT_FOR_TIME = 1800
# 是否开启密码正则验证 true:是 false:否
VUE_APP_PASSWORD_FOR_PERMISSION = true
# 是否开启密码正则验证 true:是 false:否
VUE_APP_PASSWORD_FOR_REGULAR = ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[-_.@^+\$!%#*?&\$~])[A-Za-z0-9-~_.@^+\$~!%#*?&]{8,32}$
# 是否开启文档签署验证 true:是 false:否
VUE_APP_WORD_FOR_PERMISSION = true
# 公司名称
VUE_APP_COMPANY_NAME = "Elevate Imaging"
# dicom文件地址
VUE_APP_DICOM_PATH = 'https://zyypacs-uat.oss-cn-shanghai.aliyuncs.com'
VUE_APP_OSS_CONFIG_REGION = 'oss-cn-shanghai'
VUE_APP_OSS_CONFIG_BUCKET = 'zyypacs-uat'
VUE_APP_OSS_PATH = '/usa/dist'
-1
View File
@@ -6,7 +6,6 @@
"build": "vue-cli-service build", "build": "vue-cli-service build",
"build:prod": "vue-cli-service build --mode prod", "build:prod": "vue-cli-service build --mode prod",
"build:uat": "vue-cli-service build --mode uat", "build:uat": "vue-cli-service build --mode uat",
"build:usa_test": "vue-cli-service build --mode usa_test",
"build:usa": "vue-cli-service build --mode usa", "build:usa": "vue-cli-service build --mode usa",
"build:usa_prod": "vue-cli-service build --mode usa_prod", "build:usa_prod": "vue-cli-service build --mode usa_prod",
"pre": "vue-cli-service build --mode pre", "pre": "vue-cli-service build --mode pre",
Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

BIN
View File
Binary file not shown.
+2 -2
View File
@@ -81,11 +81,11 @@ export function verifyIRStudyAllowUpload(data) {
}) })
} }
// 影像下载成功确认 // 影像下载成功确认
export function downloadImageSuccess(params) { export function downloadImageSuccess(data) {
return request({ return request({
url: '/DownloadAndUpload/downloadImageSuccess', url: '/DownloadAndUpload/downloadImageSuccess',
method: 'post', method: 'post',
params data
}) })
} }
// 影像下载记录列表 // 影像下载记录列表
+16 -1
View File
@@ -213,6 +213,14 @@ export function getIVUSTemplate(param) {
data: param data: param
}) })
} }
export function getIVUSTemplatesZip(param) {
return requestDownload({
url: '/IVUSCalculate/getIVUSTemplatesZip',
method: 'post',
responseType: 'blob',
data: param
})
}
export function uploadIVUSTemplate(param) { export function uploadIVUSTemplate(param) {
return request({ return request({
url: `/IVUSCalculate/uploadIVUSTemplate`, url: `/IVUSCalculate/uploadIVUSTemplate`,
@@ -229,7 +237,14 @@ export function getOCTFCTTemplate(param) {
data: param data: param
}) })
} }
export function getOCTFCTTemplatesZip(param) {
return requestDownload({
url: '/OCTCalculate/getOCTFCTTemplatesZip',
method: 'post',
responseType: 'blob',
data: param
})
}
export function uploadOCTFCTTemplate(param) { export function uploadOCTFCTTemplate(param) {
return request({ return request({
url: `/OCTCalculate/uploadOCTFCTTemplate`, url: `/OCTCalculate/uploadOCTFCTTemplate`,
@@ -24,7 +24,7 @@
</div> </div>
<!--上传列表@selection-change="handleSelectionChange" @sort-change="handleSortByColumn"--> <!--上传列表@selection-change="handleSelectionChange" @sort-change="handleSortByColumn"-->
<el-table ref="dicomFilesTable" v-adaptive="{ bottomOffset: 85 }" height="100" :data="list" :loading="loading" <el-table ref="dicomFilesTable" v-adaptive="{ bottomOffset: 85 }" height="100" :data="list" :loading="loading"
class="dicomFiles-table" :default-sort="{ prop: 'TaskBlindName', order: 'descending' }"> class="dicomFiles-table" :default-sort="{ prop: 'TaskBlindName', order: 'ascending' }">
<!-- <el-table-column <!-- <el-table-column
type="selection" type="selection"
width="55" width="55"
@@ -32,8 +32,8 @@
/> --> /> -->
<el-table-column type="index" width="40" /> <el-table-column type="index" width="40" />
<!--受试者--> <!--受试者-->
<el-table-column :label="$t('download:table:subjectCode')" min-width="130" prop="SubjectCode" <el-table-column :label="$t('download:table:subjectCode')" prop="SubjectCode" show-overflow-tooltip
show-overflow-tooltip v-if="isReadingTaskViewInOrder !== 0" /> v-if="isReadingTaskViewInOrder !== 0 || IsImageSegment" />
<!--访视名称--> <!--访视名称-->
<el-table-column prop="VisitName" :label="$t('download:table:VisitName')" sortable v-if="IsImageSegment" /> <el-table-column prop="VisitName" :label="$t('download:table:VisitName')" sortable v-if="IsImageSegment" />
<!--任务名称--> <!--任务名称-->
@@ -67,8 +67,8 @@
</el-table-column> </el-table-column>
<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">
<!--预览---> <!--预览:disabled="forbid"--->
<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')"
@@ -297,7 +297,7 @@ export default {
if (res.IsSuccess) { if (res.IsSuccess) {
this.downloadId = res.OtherInfo.PreDownloadId this.downloadId = res.OtherInfo.PreDownloadId
this.IsReadingTaskViewInOrder = res.OtherInfo.IsReadingTaskViewInOrder this.IsReadingTaskViewInOrder = res.OtherInfo.IsReadingTaskViewInOrder
this.downloadImage(res.Result) this.downloadImage(res.Result, data.SubjectVisitTaskList)
} }
} catch (err) { } catch (err) {
this.btnLoading = false this.btnLoading = false
@@ -305,12 +305,12 @@ export default {
} }
}, },
// 打包下载 // 打包下载
async downloadImage(data) { async downloadImage(data, params) {
try { try {
let { files, name, fileType } = this.formatDownloadFile(data) let { files, name, fileType } = this.formatDownloadFile(data)
let res = await downLoadFile(files, name, 'zip') let res = await downLoadFile(files, name, 'zip')
if (res && this.downloadId) { if (res && this.downloadId) {
this.downloadImageSuccess() this.downloadImageSuccess(params)
} }
} catch (err) { } catch (err) {
console.log(err) console.log(err)
@@ -449,13 +449,13 @@ export default {
return { files, name } return { files, name }
}, },
// 影像下载成功确认 // 影像下载成功确认
async downloadImageSuccess() { async downloadImageSuccess(data) {
try { try {
let params = { let params = {
TrialImageDownloadId: this.downloadId, TrialImageDownloadId: this.downloadId,
} }
if (this.isReading) { if (this.isReading) {
params.VisitTaskId = this.TaskId params.VisitTaskIdList = data.map(item => item.TaskId)
} }
await downloadImageSuccess(params) await downloadImageSuccess(params)
} catch (err) { } catch (err) {
@@ -8,10 +8,11 @@
</div> </div>
</div> </div>
<!--检查列表--> <!--检查列表-->
<el-table :data="list" style="width: 100%" height="300" :loading="loading"> <el-table :data="list" style="width: 100%" height="300" :loading="loading"
:default-sort="{ prop: 'TaskBlindName', order: 'ascending' }">
<!--受试者--> <!--受试者-->
<el-table-column prop="SubjectCode" :label="$t('upload:dicom:table:subjectCode')" sortable <el-table-column prop="SubjectCode" :label="$t('upload:dicom:table:subjectCode')" sortable
v-if="isReadingTaskViewInOrder !== 0" /> v-if="isReadingTaskViewInOrder !== 0 || IsImageSegment" />
<!--访视名称--> <!--访视名称-->
<el-table-column prop="VisitName" :label="$t('download:table:VisitName')" v-if="IsImageSegment" sortable /> <el-table-column prop="VisitName" :label="$t('download:table:VisitName')" v-if="IsImageSegment" sortable />
<!--任务名称--> <!--任务名称-->
@@ -43,8 +44,10 @@
<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="hasPermi(['role:ir']) && !forbid && (!isReading || scope.row.IsIRImageDownloaded || (!scope.row.IsIRImageDownloaded && Criterion && Criterion.CriterionType &&
v-if="!forbid && (!isReading || isDownloaded)"> Criterion.CriterionType != 19 &&
Criterion.CriterionType != 20
)) && scope.row.ReadingTaskState < 2">
<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"
@@ -64,16 +67,17 @@
<el-button circle :disabled="!scope.row.UploadStudyList || <el-button circle :disabled="!scope.row.UploadStudyList ||
scope.row.UploadStudyList.length <= 0 || scope.row.UploadStudyList.length <= 0 ||
scope.row.ReadingTaskState === 2 scope.row.ReadingTaskState === 2
" icon="el-icon-delete" :title="$t('upload:dicom:button:delete')" @click.stop="remove(scope.row)" /> " v-if="hasPermi(['role:ir'])" icon="el-icon-delete" :title="$t('upload:dicom:button:delete')"
@click.stop="remove(scope.row)" />
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
</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 && (!isReading || isDownloaded)"> <div class="btnBox" v-if="!forbid">
<span style="margin-right: 10px">{{ $store.state.trials.uploadTip }}</span> <span style="margin-right: 10px">{{ $store.state.trials.uploadTip }}</span>
<form id="inputForm" ref="uploadForm" enctype="multipart/form-data"> <form id="inputForm" ref="uploadForm" enctype="multipart/form-data" v-if="!isReading">
<div class="form-group"> <div class="form-group">
<div id="directoryInputWrapper" class="btn btn-link file-input"> <div id="directoryInputWrapper" class="btn btn-link file-input">
<el-button type="primary" :disabled="btnLoading" :loading="btnLoading" size="mini">{{ <el-button type="primary" :disabled="btnLoading" :loading="btnLoading" size="mini">{{
@@ -12,10 +12,10 @@
</div> </div>
<!--检查列表 @sort-change="handleSortByColumn"--> <!--检查列表 @sort-change="handleSortByColumn"-->
<el-table :data="list" style="width: 100%" v-adaptive="{ bottomOffset: 60 }" :loading="loading" <el-table :data="list" style="width: 100%" v-adaptive="{ bottomOffset: 60 }" :loading="loading"
:default-sort="{ prop: 'TaskBlindName', order: 'descending' }"> :default-sort="{ prop: 'TaskBlindName', order: 'ascending' }">
<!--受试者 sortable="custom"--> <!--受试者 sortable="custom"-->
<el-table-column prop="SubjectCode" :label="$t('upload:nonedicom:table:subject')" <el-table-column prop="SubjectCode" :label="$t('upload:nonedicom:table:subject')"
v-if="isReadingTaskViewInOrder !== 0" /> v-if="isReadingTaskViewInOrder !== 0 || IsImageSegment" />
<!--访视名称--> <!--访视名称-->
<el-table-column prop="VisitName" :label="$t('upload:nonedicom:table:VisitName')" sortable <el-table-column prop="VisitName" :label="$t('upload:nonedicom:table:VisitName')" sortable
v-if="IsImageSegment" /> v-if="IsImageSegment" />
@@ -110,12 +110,16 @@
<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')" v-if="hasPermi(['role:ir']) && !forbid && (!isReading || scope.row.IsIRImageDownloaded || (!scope.row.IsIRImageDownloaded && Criterion && Criterion.CriterionType &&
@click.native.prevent="handleUpload(scope.row)" :disabled="isReading && !isDownloaded" /> Criterion.CriterionType != 19 &&
Criterion.CriterionType != 20
)) && scope.row.ReadingTaskState < 2" @click.native.prevent="handleUpload(scope.row)" />
<!-- <el-button circle icon="el-icon-upload2" :title="$t('upload:nonedicom:button:upload')"
@click.native.prevent="handleUpload(scope.row)" /> -->
<!--删除---> <!--删除--->
<el-button :disabled="scope.row.UploadedFileCount <= 0 || <el-button :disabled="scope.row.UploadedFileCount <= 0 ||
scope.row.ReadingTaskState === 2 scope.row.ReadingTaskState === 2
" circle icon="el-icon-delete" :title="$t('upload:nonedicom:button:delete')" " v-if="hasPermi(['role:ir'])" circle icon="el-icon-delete" :title="$t('upload:nonedicom:button:delete')"
@click.stop="remove(scope.row)" /> @click.stop="remove(scope.row)" />
</template> </template>
</el-table-column> </el-table-column>
@@ -397,7 +401,7 @@ export default {
} }
}, },
// 扫描待上传文件 // 扫描待上传文件
beginScanFiles(e) { async beginScanFiles(e) {
var files = [...e.target.files] var files = [...e.target.files]
var sameFiles = [], zipFiles = [], f = false var sameFiles = [], zipFiles = [], f = false
files.forEach((file) => { files.forEach((file) => {
@@ -405,7 +409,7 @@ export default {
.substring(file.name.lastIndexOf('.')) .substring(file.name.lastIndexOf('.'))
.toLocaleLowerCase() .toLocaleLowerCase()
if (extendName === '.zip' && this.IsImageSegment) { if (extendName === '.zip' && this.IsImageSegment) {
if (file.name.indexOf('筛选期') > -1 || file.name.indexOf('研究结束') > -1) f = true if (file.name.indexOf(this.$t("trials:uploadNonDicoms:checkValue:SelectionPeriod")) > -1 || file.name.indexOf("trials:uploadNonDicoms:checkValue:researchOver") > -1) f = true
zipFiles.push(file) zipFiles.push(file)
} }
if ( if (
@@ -416,11 +420,13 @@ export default {
} }
}) })
if (zipFiles.length > 0) { if (zipFiles.length > 0) {
zipFiles.forEach(async file => { for (let i = 0; i < zipFiles.length; i++) {
let file = zipFiles[i]
let list = await this.readZipFileListRaw(file) let list = await this.readZipFileListRaw(file)
if (!f) f = list.some(i => i.path.indexOf('筛选期') > -1 || i.path.indexOf('研究结束') > -1) if (!f) f = list.some(i => i.path.indexOf(this.$t("trials:uploadNonDicoms:checkValue:SelectionPeriod")) > -1 || i.path.indexOf(this.$t("trials:uploadNonDicoms:checkValue:researchOver")) > -1)
list = null list = null
}) if (f) break
}
} }
if (f) return this.$confirm(this.$t("trials:uploadNonDicoms:confirm:zipNameNonCompliant"), '', { if (f) return this.$confirm(this.$t("trials:uploadNonDicoms:confirm:zipNameNonCompliant"), '', {
type: "warning" type: "warning"
@@ -684,8 +690,8 @@ export default {
}, },
(percentage, checkpoint, lastPer) => { (percentage, checkpoint, lastPer) => {
item.uploadFileSize += checkpoint.size * (percentage - lastPer) item.uploadFileSize += checkpoint.size * (percentage - lastPer)
if (item.uploadFileSize > file.fileSize) { if (item.uploadFileSize > file.size) {
item.uploadFileSize = file.fileSize > 0 ? file.fileSize : 1 item.uploadFileSize = file.size > 0 ? file.size : 1
} }
}, },
{ {
+1
View File
@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1787639576282" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5836" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M511.974687 0.000434A511.992298 511.992298 0 1 1 0.00047 511.992732 511.30523 511.30523 0 0 1 511.974687 0.000434z m93.350858 188.979888l-87.366133 153.053459-295.168071 0.090404c-28.567568 0-51.728995 19.147503-51.728995 42.760949s23.161427 42.760949 51.728995 42.760948h246.331994l-93.911361 164.643213h-152.420633c-28.567568 0-51.728995 19.147503-51.728995 42.760949s23.125266 42.79711 51.728995 42.79711h103.584556l-39.416012 69.19499a34.498051 34.498051 0 1 0 59.919571 34.172597l58.852806-103.385668h395.027995c28.567568 0 51.728995-19.147503 51.728995-42.760948s-23.161427-42.760949-51.728995-42.760949H454.58642l93.983684-164.661294h252.190153c28.567568 0 51.728995-19.147503 51.728995-42.760948s-23.161427-42.760949-51.728995-42.760949l-203.372157-0.090404 67.893176-118.862781a34.485394 34.485394 0 1 0-59.901489-34.190678z" fill="#1296db" p-id="5837"></path></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

+9 -7
View File
@@ -6,7 +6,9 @@
<div class="login-body"> <div class="login-body">
<div class="login-l"> <div class="login-l">
<div class="login-logo"> <div class="login-logo">
<img src="@/assets/zzlogo-usa.png" alt="" class="usa-logo" /> <img v-if="language === 'zh'" src="@/assets/zzlogo2.png" alt="" />
<img v-else-if="NODE_ENV === 'usa'" src="@/assets/zzlogo-usa.png" alt="" class="usa-logo" />
<img v-else src="@/assets/zzlogo4.png" alt="" />
</div> </div>
<div :class="{ <div :class="{
'login-image': true, 'login-image': true,
@@ -19,14 +21,14 @@
<div class="login-r"> <div class="login-r">
<div class="title-container"> <div class="title-container">
<!-- IRC Management System --> <!-- IRC Management System -->
<!-- <div v-if="NODE_ENV === 'usa'"> --> <div v-if="NODE_ENV === 'usa'">
<svg-icon icon-class="login-logo" style="width: 300px; height: 94px" /> <svg-icon icon-class="login-logo" style="width: 300px; height: 94px" />
<!-- </div> --> </div>
<!-- <div class="title" v-else> <div class="title" v-else>
<img src="@/assets/system.png" alt="" <img src="@/assets/system.png" alt=""
:style="{ width: isEN ? '180px' : '200px', height: isEN ? '60px' : '65px' }" /> :style="{ width: isEN ? '180px' : '200px', height: isEN ? '60px' : '65px' }" />
<div :style="`font-size:${isEN ? '28px' : '35px'}`">{{ $t('login:title:system') }}</div> <div :style="`font-size:${isEN ? '28px' : '35px'}`">{{ $t('login:title:system') }}</div>
</div> --> </div>
</div> </div>
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" auto-complete="on" <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" auto-complete="on"
label-position="left"> label-position="left">
@@ -96,10 +98,10 @@
$t('login:message:PrivacyPolicyName') }}</span> $t('login:message:PrivacyPolicyName') }}</span>
</div> </div>
<div style="text-align: right"> <div style="text-align: right">
<!-- <TopLang v-if=" <TopLang v-if="
VUE_APP_OSS_CONFIG_REGION !== 'oss-us-west-1' && VUE_APP_OSS_CONFIG_REGION !== 'oss-us-west-1' &&
NODE_ENV !== 'usa' NODE_ENV !== 'usa'
" /> --> " />
<!-- Forget password? --> <!-- Forget password? -->
<el-button type="text" size="medium" @click.native.prevent="handleResetPwd" style="color: rgb(0, 147, 221)"> <el-button type="text" size="medium" @click.native.prevent="handleResetPwd" style="color: rgb(0, 147, 221)">
{{ $t('login:button:forgetPassword') }} {{ $t('login:button:forgetPassword') }}
+22
View File
@@ -155,6 +155,17 @@ export default {
}, },
], ],
IdCard: [ IdCard: [
{
validator: (rule, value, callback) => {
let reg = new RegExp(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/, 'ig')
if (value && !reg.test(value)) {
callback(new Error(this.$t('common:ruleMessage:pattern')))
} else {
callback()
}
},
trigger: 'blur',
},
{ {
max: 400, max: 400,
message: this.$t('form:rules:maxLength:400'), message: this.$t('form:rules:maxLength:400'),
@@ -162,6 +173,17 @@ export default {
}, },
], ],
BankPhoneNum: [ BankPhoneNum: [
{
validator: (rule, value, callback) => {
let reg = new RegExp(/^\d{11}$/, 'i')
if (value && !reg.test(value)) {
callback(new Error(this.$t('common:ruleMessage:pattern')))
} else {
callback()
}
},
trigger: 'blur',
},
{ {
max: 400, max: 400,
message: this.$t('form:rules:maxLength:400'), message: this.$t('form:rules:maxLength:400'),
+2 -2
View File
@@ -21,7 +21,7 @@
:maxlength="400" :maxlength="400"
/> />
</el-form-item> </el-form-item>
<!-- <el-form-item <el-form-item
:label="$t('system:Setting:label:Blind NameCN')" :label="$t('system:Setting:label:Blind NameCN')"
prop="BlindNameCN" prop="BlindNameCN"
> >
@@ -30,7 +30,7 @@
style="width: 300px" style="width: 300px"
:maxlength="400" :maxlength="400"
/> />
</el-form-item> --> </el-form-item>
<el-form-item <el-form-item
:label="$t('system:Setting:label:Blind Publications')" :label="$t('system:Setting:label:Blind Publications')"
prop="BlindPublications" prop="BlindPublications"
@@ -211,6 +211,17 @@ export default {
}, },
], ],
IdCard: [ IdCard: [
{
validator: (rule, value, callback) => {
let reg = new RegExp(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/, 'ig')
if (value && !reg.test(value)) {
callback(new Error(this.$t('common:ruleMessage:pattern')))
} else {
callback()
}
},
trigger: 'blur',
},
{ {
max: 400, max: 400,
message: this.$t('form:rules:maxLength:400'), message: this.$t('form:rules:maxLength:400'),
@@ -218,6 +229,17 @@ export default {
}, },
], ],
BankPhoneNum: [ BankPhoneNum: [
{
validator: (rule, value, callback) => {
let reg = new RegExp(/^\d{11}$/, 'i')
if (value && !reg.test(value)) {
callback(new Error(this.$t('common:ruleMessage:pattern')))
} else {
callback()
}
},
trigger: 'blur',
},
{ {
max: 400, max: 400,
message: this.$t('form:rules:maxLength:400'), message: this.$t('form:rules:maxLength:400'),
@@ -19,12 +19,12 @@
> >
{{ DATA.BlindName }} {{ DATA.BlindName }}
</el-form-item> </el-form-item>
<!-- <el-form-item <el-form-item
:label="$t('system:Setting:label:Blind NameCN')" :label="$t('system:Setting:label:Blind NameCN')"
style="width: 45%" style="width: 45%"
> >
{{ DATA.BlindNameCN }} {{ DATA.BlindNameCN }}
</el-form-item> --> </el-form-item>
<div style="display: flex; font-size: 14px; margin-bottom: 22px"> <div style="display: flex; font-size: 14px; margin-bottom: 22px">
<span style="display: inline-block; width: 120px; color: #000">{{ <span style="display: inline-block; width: 120px; color: #000">{{
$t('system:Setting:label:Blind Publications') $t('system:Setting:label:Blind Publications')
@@ -109,19 +109,19 @@
<div class="form_title"> <div class="form_title">
{{ $t('system:Setting:title:Blinded information') }} {{ $t('system:Setting:title:Blinded information') }}
</div> </div>
<!-- <el-row> <el-row>
<el-col :span="12"> --> <el-col :span="12">
<el-form-item <el-form-item
:label="$t('system:Setting:label:Blind Name')" :label="$t('system:Setting:label:Blind Name')"
prop="BlindName" prop="BlindName"
> >
<el-input <el-input
v-model="form.BlindName" v-model="form.BlindName"
clearable clearable
:maxlength="400" :maxlength="400"
></el-input> ></el-input>
</el-form-item> </el-form-item>
<!-- </el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item <el-form-item
:label="$t('system:Setting:label:Blind NameCN')" :label="$t('system:Setting:label:Blind NameCN')"
@@ -134,7 +134,7 @@
></el-input> ></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> --> </el-row>
<el-form-item <el-form-item
:label="$t('system:Setting:label:Blind Publications')" :label="$t('system:Setting:label:Blind Publications')"
prop="BlindPublications" prop="BlindPublications"
@@ -591,9 +591,32 @@
</div> </div>
</div> </div>
<div class="file" v-if="isAll && hasFile"> <div class="file" v-if="isAll && hasFile">
<div class="curriculum" v-if="resumeListEN && resumeListEN.length > 0"> <div
class="curriculum"
v-if="
(resumeListCN && resumeListCN.length > 0) ||
(resumeListEN && resumeListEN.length > 0)
"
>
<div class="title">{{ $t('curriculumVitae:curriculum:title') }}</div> <div class="title">{{ $t('curriculumVitae:curriculum:title') }}</div>
<div class="fileBox"> <div class="fileBox">
<div
class="file_title"
v-if="resumeListCN && resumeListCN.length > 0"
>
{{ $t('curriculumVitae:curriculum:fileTitle:CN') }}
</div>
<template v-if="true">
<div class="file" v-for="item in resumeListCN" :key="item.Id">
<div class="name" :title="item.FileName">{{ item.FileName }}</div>
<i
class="el-icon-download"
:title="$t('common:button:download')"
@click.stop="handlePreview(item)"
/>
</div>
</template>
<div class="noData" v-else>{{ $t('curriculumVitae:noData') }}</div>
<div <div
class="file_title" class="file_title"
v-if="resumeListEN && resumeListEN.length > 0" v-if="resumeListEN && resumeListEN.length > 0"
@@ -1,10 +1,12 @@
<template> <template>
<div class="trials-navbar" style="position: relative"> <div class="trials-navbar" style="position: relative">
<div class="leftMenu"> <div class="leftMenu">
<img src="@/assets/title-logo.png" alt="" class="title-logo" /> <img v-if="NODE_ENV === 'usa'" src="@/assets/title-logo.png" alt="" class="title-logo" />
<!-- <span style="white-space: nowrap" v-if="NODE_ENV !== 'usa'"> <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'">
<!-- 中心影像系统EICS -->
{{ $t('trials:trials:title:eics') }} {{ $t('trials:trials:title:eics') }}
</span> --> </span>
</div> </div>
<div class="center-menu"> <div class="center-menu">
<NoticeMarquee /> <NoticeMarquee />
@@ -396,7 +396,12 @@
:label="$t('trials:readingTracking:config:questionName')" :label="$t('trials:readingTracking:config:questionName')"
show-overflow-tooltip show-overflow-tooltip
width="600" width="600"
/> >
<template slot-scope="scope">
<svg-icon v-show="scope.row.IsTriggerJudge" icon-class="notEqual" class="svg-icon"/>
{{ scope.row.QuestionName }}
</template>
</el-table-column>
<el-table-column <el-table-column
prop="judgeResult" prop="judgeResult"
:label="$t('trials:adReview:title:result')" :label="$t('trials:adReview:title:result')"
@@ -435,7 +440,7 @@
<el-radio-group <el-radio-group
v-show="!(scope.row.Type === 'class' || scope.row.DataSource === 1)" v-show="!(scope.row.Type === 'class' || scope.row.DataSource === 1)"
v-model="judgeSelectedArmMap[scope.row.ReadingQuestionId]" v-model="judgeSelectedArmMap[scope.row.ReadingQuestionId]"
:disabled="readingTaskState >= 2" :disabled="readingTaskState >= 2 || !scope.row.IsTriggerJudge"
@change="(val) => handleJudgeArmChange(scope.row, val)" @change="(val) => handleJudgeArmChange(scope.row, val)"
> >
<el-radio :label="1"> <el-radio :label="1">
@@ -834,10 +839,22 @@ export default {
// this.judgeQs = QuestionList // this.judgeQs = QuestionList
this.$set(this.judgeForm, 'judgeResultRemark', res.Result.JudgeResultRemark || '') this.$set(this.judgeForm, 'judgeResultRemark', res.Result.JudgeResultRemark || '')
QuestionList.map((item) => { QuestionList.map((item) => {
let val = null
if (!item.Answer && item.Type === 'number' && !item.IsTriggerJudge) {
val = this.getJudgeAnswerAverageValue(item)
} else if (!item.Answer && !item.IsTriggerJudge) {
const row = this.judgeAnswers.find(v => {
return v.ReadingQuestionId === item.ReadingQuestionId
})
if (!row) return null
val = row.R1Answer
} else {
val = item.Answer
}
this.$set( this.$set(
this.judgeForm, this.judgeForm,
item.ReadingQuestionId, item.ReadingQuestionId,
item.Answer val
) )
if (item.Type === 'class') { if (item.Type === 'class') {
this.classArr.push({ triggerId: item.ClassifyQuestionId, classId: item.ReadingQuestionId, classifyAlgorithms: item.ClassifyAlgorithms, classifyType: item.ClassifyType }) this.classArr.push({ triggerId: item.ClassifyQuestionId, classId: item.ReadingQuestionId, classifyAlgorithms: item.ClassifyAlgorithms, classifyType: item.ClassifyType })
@@ -869,6 +886,13 @@ export default {
handleJudgeArmChange(question, armEnum) { handleJudgeArmChange(question, armEnum) {
this.$set(this.judgeSelectedArmMap, question.ReadingQuestionId, armEnum) this.$set(this.judgeSelectedArmMap, question.ReadingQuestionId, armEnum)
let val = this.getJudgeAnswerValue(question, armEnum) let val = this.getJudgeAnswerValue(question, armEnum)
// if (armEnum === 1 || armEnum === 2) {
// val = this.getJudgeAnswerValue(question, armEnum)
// } else if (armEnum === 3) {
// val = this.getJudgeAnswerAverageValue(question, armEnum)
// }
this.$set( this.$set(
this.judgeForm, this.judgeForm,
question.ReadingQuestionId, question.ReadingQuestionId,
@@ -886,7 +910,7 @@ export default {
parseFloat(val) < parseFloat(v.lt) parseFloat(val) < parseFloat(v.lt)
) )
}) })
answer = o ? o.label : null answer = o ? o.label : 'NE'
} else if (i.classifyType === 1) { } else if (i.classifyType === 1) {
const o = list.find(v => { const o = list.find(v => {
return v.val.includes(val) return v.val.includes(val)
@@ -1152,6 +1176,19 @@ export default {
if (!row) return null if (!row) return null
return armEnum === 1 ? row.R1Answer : row.R2Answer return armEnum === 1 ? row.R1Answer : row.R2Answer
}, },
getJudgeAnswerAverageValue(question) {
const row = this.judgeAnswers.find((item) => {
return item.ReadingQuestionId === question.ReadingQuestionId
})
if (!row) return null
let val = ((Number(row.R1Answer) + Number(row.R2Answer)) / 2)
let digitPlaces = parseInt(this.taskInfo.DigitPlaces)
if (digitPlaces > -1) {
return val.toFixed(digitPlaces)
} else {
return val
}
},
validateJudgeSelections() { validateJudgeSelections() {
const missingQuestion = this.judgeQs.find((question) => { const missingQuestion = this.judgeQs.find((question) => {
const answer = this.judgeForm[question.ReadingQuestionId] const answer = this.judgeForm[question.ReadingQuestionId]
@@ -236,7 +236,7 @@
</template> </template>
<script> <script>
import { saveTaskQuestion, submitTableQuestion, deleteReadingRowAnswer } from '@/api/trials' import { saveTaskQuestion, submitTableQuestion, deleteReadingRowAnswer } from '@/api/trials'
import { resetReadingTask, getIVUSTemplate } from '@/api/reading' import { resetReadingTask, getIVUSTemplatesZip } from '@/api/reading'
import { getToken } from '@/utils/auth' import { getToken } from '@/utils/auth'
import DicomEvent from './../DicomEvent' import DicomEvent from './../DicomEvent'
import store from '@/store' import store from '@/store'
@@ -867,7 +867,7 @@ export default {
const params = { const params = {
visitTaskId: this.visitTaskId visitTaskId: this.visitTaskId
} }
await getIVUSTemplate(params) await getIVUSTemplatesZip(params)
} catch (e) { } catch (e) {
console.log(e) console.log(e)
} }
@@ -235,7 +235,7 @@
</template> </template>
<script> <script>
import { saveTaskQuestion, submitTableQuestion, deleteReadingRowAnswer } from '@/api/trials' import { saveTaskQuestion, submitTableQuestion, deleteReadingRowAnswer } from '@/api/trials'
import { resetReadingTask, getOCTFCTTemplate, getOCTLipidAngleTemplate } from '@/api/reading' import { resetReadingTask, getOCTFCTTemplatesZip, getOCTLipidAngleTemplate } from '@/api/reading'
import DicomEvent from './../DicomEvent' import DicomEvent from './../DicomEvent'
import store from '@/store' import store from '@/store'
import { getToken } from '@/utils/auth' import { getToken } from '@/utils/auth'
@@ -890,7 +890,7 @@ export default {
visitTaskId: this.visitTaskId visitTaskId: this.visitTaskId
} }
if (lesionType === 104) { if (lesionType === 104) {
await getOCTFCTTemplate(params) await getOCTFCTTemplatesZip(params)
} else { } else {
await getOCTLipidAngleTemplate(params) await getOCTLipidAngleTemplate(params)
} }
@@ -434,7 +434,7 @@ export default {
parseFloat(obj.val) < parseFloat(v.lt) parseFloat(obj.val) < parseFloat(v.lt)
) )
}) })
answer = o ? o.label : null answer = o ? o.label : 'NE'
} else if (i.classifyType === 1) { } else if (i.classifyType === 1) {
let o = list.find(v => { let o = list.find(v => {
return v.val.includes(obj.val) return v.val.includes(obj.val)
@@ -234,7 +234,7 @@ export default {
parseFloat(obj.val) < parseFloat(v.lt) parseFloat(obj.val) < parseFloat(v.lt)
) )
}) })
answer = o ? o.label : null answer = o ? o.label : 'NE'
} else if (i.classifyType === 1) { } else if (i.classifyType === 1) {
let o = list.find(v => { let o = list.find(v => {
return v.val.includes(obj.val) return v.val.includes(obj.val)
@@ -150,19 +150,13 @@ export default {
this.handleClear(e, key) this.handleClear(e, key)
if (key === 'study') { if (key === 'study') {
this.seriesList = this.studyList.find(item => item.StudyId === this.form.studyId).SeriesArr this.seriesList = this.studyList.find(item => item.StudyId === this.form.studyId).SeriesArr
this.form.seriesId = null
this.form.segmentGroupId = null
this.form.segmentId = null
} }
if (key === 'series') { if (key === 'series') {
this.segmentGroupList = this.segmentionList.filter(item => item.SeriesId === this.form.seriesId) this.segmentGroupList = this.segmentionList.filter(item => item.SeriesId === this.form.seriesId)
this.form.segmentGroupId = null
this.form.segmentId = null
} }
if (key === 'segmentGroup') { if (key === 'segmentGroup') {
let list = await this.getSegmentList(this.form.segmentGroupId) let list = await this.getSegmentList(this.form.segmentGroupId)
this.segmentList = list.filter(item => item.SegmentJson) this.segmentList = list.filter(item => item.SegmentJson)
this.form.segmentId = null
} }
}, },
handleClear(e, key) { handleClear(e, key) {
@@ -757,7 +757,7 @@ export default {
parseFloat(obj.val) < parseFloat(v.lt) parseFloat(obj.val) < parseFloat(v.lt)
) )
}) })
answer = o ? o.label : null answer = o ? o.label : 'NE'
} else if (i.classifyType === 1) { } else if (i.classifyType === 1) {
let o = list.find(v => { let o = list.find(v => {
return v.val.includes(obj.val) return v.val.includes(obj.val)
@@ -453,7 +453,7 @@ export default {
parseFloat(obj.val) < parseFloat(v.lt) parseFloat(obj.val) < parseFloat(v.lt)
) )
}) })
answer = o ? o.label : null answer = o ? o.label : 'NE'
} else if (i.classifyType === 1) { } else if (i.classifyType === 1) {
const o = list.find(v => { const o = list.find(v => {
return v.val.includes(obj.val) return v.val.includes(obj.val)
@@ -1268,7 +1268,7 @@ export default {
parseFloat(val) < parseFloat(v.lt) parseFloat(val) < parseFloat(v.lt)
) )
}) })
answer = o ? o.label : null answer = o ? o.label : 'NE'
} else if (i.classifyType === 1) { } else if (i.classifyType === 1) {
const o = list.find(v => { const o = list.find(v => {
return v.val.includes(val) return v.val.includes(val)
@@ -35,9 +35,7 @@
scope.row.QuestionName }} scope.row.QuestionName }}
<svg-icon <svg-icon
v-if="scope.row.ShowChartTypeEnum > 0 || (scope.row.LesionType === 0 && scope.row.ReportLayType === 1)" v-if="scope.row.ShowChartTypeEnum > 0 || (scope.row.LesionType === 0 && scope.row.ReportLayType === 1)"
icon-class="readingChart" icon-class="readingChart" class="svg-icon svg-readingChart-mini" @click.stop="(e) => handleReadingChart({
class="svg-icon svg-readingChart-mini"
@click.stop="(e) => handleReadingChart({
e, e,
data: { data: {
QuestionId: scope.row.RowIndex ? null : scope.row.QuestionId, QuestionId: scope.row.RowIndex ? null : scope.row.QuestionId,
@@ -51,13 +49,8 @@
<span v-else style="font-weight: bold;font-size: 16px;color: #f44336;">{{ scope.row.GroupName }}</span> <span v-else style="font-weight: bold;font-size: 16px;color: #f44336;">{{ scope.row.GroupName }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column v-for="task in visitTaskList" :key="task.VisitTaskId" prop="date" show-overflow-tooltip
v-for="task in visitTaskList" width="200px">
:key="task.VisitTaskId"
prop="date"
show-overflow-tooltip
width="200px"
>
<template slot="header"> <template slot="header">
<div v-if="task.IsCurrentTask">{{ task.BlindName }}</div> <div v-if="task.IsCurrentTask">{{ task.BlindName }}</div>
<div v-else> <div v-else>
@@ -71,18 +64,15 @@
</template> </template>
<template slot-scope="scope"> <template slot-scope="scope">
<template <template
v-if="readingTaskState < 2 && task.VisitTaskId === visitTaskId && (scope.row.Type === 'input' || scope.row.Type === 'number' || scope.row.Type === 'select' || scope.row.Type === 'textarea' || scope.row.Type === 'radio')" v-if="readingTaskState < 2 && task.VisitTaskId === visitTaskId && (scope.row.Type === 'input' || scope.row.Type === 'number' || scope.row.Type === 'select' || scope.row.Type === 'textarea' || scope.row.Type === 'radio')">
>
<!-- 输入框 --> <!-- 输入框 -->
<div> <div>
<template <template
v-if="!((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)" v-if="!((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)" />
/>
<el-input <el-input
v-else-if="questionForm[scope.row.QuestionId] instanceof Array && (scope.row.Type === 'input' || scope.row.Type === 'textarea') && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)" v-else-if="questionForm[scope.row.QuestionId] instanceof Array && (scope.row.Type === 'input' || scope.row.Type === 'textarea') && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)"
v-model="questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]" v-model="questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]"
size="mini" size="mini" />
/>
<span <span
v-else-if="questionForm[scope.row.QuestionId] instanceof Array && (scope.row.Type === 'input' || scope.row.Type === 'textarea')">{{ v-else-if="questionForm[scope.row.QuestionId] instanceof Array && (scope.row.Type === 'input' || scope.row.Type === 'textarea')">{{
questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId] }}</span> questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId] }}</span>
@@ -94,22 +84,13 @@
<el-select <el-select
v-else-if="questionForm[scope.row.QuestionId] instanceof Array && (scope.row.Type === 'select' || scope.row.Type === 'radio') && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)" v-else-if="questionForm[scope.row.QuestionId] instanceof Array && (scope.row.Type === 'select' || scope.row.Type === 'radio') && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)"
v-model="questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]" v-model="questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]"
size="mini" size="mini" clearable :multiple="scope.row.OptionTypeEnum === 1">
clearable
:multiple="scope.row.OptionTypeEnum === 1"
>
<template> <template>
<el-option <el-option v-for="val in scope.row.TypeValue.split('|')" :key="val" :label="val" :value="val" />
v-for="val in scope.row.TypeValue.split('|')"
:key="val"
:label="val"
:value="val"
/>
</template> </template>
</el-select> </el-select>
<span <span
v-else-if="questionForm[scope.row.QuestionId] instanceof Array && questionForm[scope.row.QuestionId][scope.row.xfIndex] && (scope.row.Type === 'select' || scope.row.Type === 'radio')" v-else-if="questionForm[scope.row.QuestionId] instanceof Array && questionForm[scope.row.QuestionId][scope.row.xfIndex] && (scope.row.Type === 'select' || scope.row.Type === 'radio')">
>
{{ {{
Array.isArray(questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]) Array.isArray(questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId])
? ?
@@ -119,32 +100,23 @@
</span> </span>
<el-select <el-select
v-else-if="(scope.row.Type === 'select' || scope.row.Type === 'radio') && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)" v-else-if="(scope.row.Type === 'select' || scope.row.Type === 'radio') && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)"
v-model="questionForm[scope.row.QuestionId]" v-model="questionForm[scope.row.QuestionId]" size="mini" clearable
size="mini" :multiple="scope.row.OptionTypeEnum === 1">
clearable
:multiple="scope.row.OptionTypeEnum === 1"
>
<template> <template>
<el-option <el-option v-for="val in scope.row.TypeValue.split('|')" :key="val" :label="val" :value="val" />
v-for="val in scope.row.TypeValue.split('|')"
:key="val"
:label="val"
:value="val"
/>
</template> </template>
</el-select> </el-select>
<span v-else-if="scope.row.Type === 'select' || scope.row.Type === 'radio'"> <span v-else-if="scope.row.Type === 'select' || scope.row.Type === 'radio'">
{{ {{
questionForm[scope.row.QuestionId] && Array.isArray(questionForm[scope.row.QuestionId]) ? questionForm[scope.row.QuestionId] && Array.isArray(questionForm[scope.row.QuestionId]) ?
questionForm[scope.row.QuestionId].join(',') : questionForm[scope.row.QuestionId].join(',') :
questionForm[scope.row.QuestionId] questionForm[scope.row.QuestionId]
}} }}
</span> </span>
<el-input <el-input
v-else-if="scope.row.DataSource !== 1 && questionForm[scope.row.QuestionId] instanceof Array && scope.row.Type === 'number' && (scope.row.xfIndex || scope.row.xfIndex === 0) && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)" v-else-if="scope.row.DataSource !== 1 && questionForm[scope.row.QuestionId] instanceof Array && scope.row.Type === 'number' && (scope.row.xfIndex || scope.row.xfIndex === 0) && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)"
v-model="questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]" v-model="questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]"
:disabled="scope.row.DataSource === 1" :disabled="scope.row.DataSource === 1" size="mini"
size="mini"
@blur="limitBlur(questionForm[scope.row.QuestionId][scope.row.xfIndex], scope.row.TableQuestionId, scope.row.ValueType)" @blur="limitBlur(questionForm[scope.row.QuestionId][scope.row.xfIndex], scope.row.TableQuestionId, scope.row.ValueType)"
@focus="() => { questionId = scope.row.QuestionId }"> @focus="() => { questionId = scope.row.QuestionId }">
<template v-if="scope.row.Unit !== 0" slot="append"> <template v-if="scope.row.Unit !== 0" slot="append">
@@ -154,40 +126,35 @@
<template v-else-if="scope.row.ValueType === 2" slot="append">%</template> <template v-else-if="scope.row.ValueType === 2" slot="append">%</template>
</el-input> </el-input>
<span <span
v-else-if="questionForm[scope.row.QuestionId] instanceof Array && scope.row.Type === 'number' && (scope.row.xfIndex || scope.row.xfIndex === 0)" v-else-if="questionForm[scope.row.QuestionId] instanceof Array && scope.row.Type === 'number' && (scope.row.xfIndex || scope.row.xfIndex === 0)">
> <template v-if="(scope.row.ValueType === 0 || scope.row.ValueType === 1) && scope.row.Unit">
<template
v-if="(scope.row.ValueType === 0 || scope.row.ValueType === 1) && scope.row.Unit"
>
{{ {{
isNaN(parseInt(questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId])) isNaN(parseInt(questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]))
? ?
questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId] : questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId] :
`${questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]} `${questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]}
${scope.row.Unit !== 4 ? $fd('ValueUnit', scope.row.Unit) : scope.row.CustomUnit}` }} ${scope.row.Unit !== 4 ? $fd('ValueUnit', scope.row.Unit) : scope.row.CustomUnit}` }}
</template> </template>
<template v-else-if="scope.row.ValueType === 2"> <template v-else-if="scope.row.ValueType === 2">
{{ {{
isNaN(parseInt(questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId])) isNaN(parseInt(questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]))
? ?
questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId] : questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId] :
`${questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]} `${questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]}
%` }} %` }}
</template> </template>
<template v-else> <template v-else>
{{ {{
isNaN(parseInt(questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId])) isNaN(parseInt(questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]))
? ?
questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId] : questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId] :
`${questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]}` `${questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]}`
}} }}
</template> </template>
</span> </span>
<el-input <el-input
v-else-if="scope.row.DataSource !== 1 && scope.row.Type === 'number' && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)" v-else-if="scope.row.DataSource !== 1 && scope.row.Type === 'number' && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)"
v-model="questionForm[scope.row.QuestionId]" v-model="questionForm[scope.row.QuestionId]" :disabled="scope.row.DataSource === 1" size="mini"
:disabled="scope.row.DataSource === 1"
size="mini"
@blur="limitBlur(questionForm, scope.row.QuestionId, scope.row.ValueType)" @blur="limitBlur(questionForm, scope.row.QuestionId, scope.row.ValueType)"
@focus="() => { questionId = scope.row.QuestionId }"> @focus="() => { questionId = scope.row.QuestionId }">
<template v-if="scope.row.Unit !== 0" slot="append"> <template v-if="scope.row.Unit !== 0" slot="append">
@@ -197,21 +164,19 @@
<template v-else-if="scope.row.ValueType === 2" slot="append">%</template> <template v-else-if="scope.row.ValueType === 2" slot="append">%</template>
</el-input> </el-input>
<span v-else-if="scope.row.Type === 'number'"> <span v-else-if="scope.row.Type === 'number'">
<template <template v-if="(scope.row.ValueType === 0 || scope.row.ValueType === 1) && scope.row.Unit">
v-if="(scope.row.ValueType === 0 || scope.row.ValueType === 1) && scope.row.Unit"
>
{{ isNaN(parseInt(questionForm[scope.row.QuestionId])) ? {{ isNaN(parseInt(questionForm[scope.row.QuestionId])) ?
questionForm[scope.row.QuestionId] : `${questionForm[scope.row.QuestionId]} ${scope.row.Unit !== 4 questionForm[scope.row.QuestionId] : `${questionForm[scope.row.QuestionId]} ${scope.row.Unit !== 4
? ?
$fd('ValueUnit', scope.row.Unit) : scope.row.CustomUnit}` }} $fd('ValueUnit', scope.row.Unit) : scope.row.CustomUnit}` }}
</template> </template>
<template v-else-if="scope.row.ValueType === 2"> <template v-else-if="scope.row.ValueType === 2">
{{ isNaN(parseInt(questionForm[scope.row.QuestionId])) ? {{ isNaN(parseInt(questionForm[scope.row.QuestionId])) ?
questionForm[scope.row.QuestionId] : `${questionForm[scope.row.QuestionId]} %` }} questionForm[scope.row.QuestionId] : `${questionForm[scope.row.QuestionId]} %` }}
</template> </template>
<template v-else> <template v-else>
{{ isNaN(parseInt(questionForm[scope.row.QuestionId])) ? questionForm[scope.row.QuestionId] : {{ isNaN(parseInt(questionForm[scope.row.QuestionId])) ? questionForm[scope.row.QuestionId] :
questionForm[scope.row.QuestionId] }} questionForm[scope.row.QuestionId] }}
</template> </template>
</span> </span>
</div> </div>
@@ -225,25 +190,22 @@
</template> </template>
<template v-else-if="scope.row.DictionaryCode"> <template v-else-if="scope.row.DictionaryCode">
{{scope.row.Answers[task.VisitTaskId] instanceof Array {{scope.row.Answers[task.VisitTaskId] instanceof Array
? scope.row.Answers[task.VisitTaskId].map(item => $fd(scope.row.DictionaryCode, ? scope.row.Answers[task.VisitTaskId].map(item => $fd(scope.row.DictionaryCode,
item)).join(",") : $fd(scope.row.DictionaryCode, item)).join(",") : $fd(scope.row.DictionaryCode,
scope.row.Answers[task.VisitTaskId])}} scope.row.Answers[task.VisitTaskId])}}
</template> </template>
<template v-else-if="criterionType === 10"> <template v-else-if="criterionType === 10">
{{ {{
isNaN(parseInt(scope.row.Answers[task.VisitTaskId])) ? scope.row.Answers[task.VisitTaskId] : isNaN(parseInt(scope.row.Answers[task.VisitTaskId])) ? scope.row.Answers[task.VisitTaskId] :
`${scope.row.Answers[task.VisitTaskId]}` `${scope.row.Answers[task.VisitTaskId]}`
}} }}
</template> </template>
<template <template
v-else-if="!((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)" v-else-if="!((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)" />
/> <template v-else-if="(scope.row.ValueType === 0 || scope.row.ValueType === 1) && scope.row.Unit">
<template
v-else-if="(scope.row.ValueType === 0 || scope.row.ValueType === 1) && scope.row.Unit"
>
{{ {{
isNaN(parseInt(scope.row.Answers[task.VisitTaskId])) ? scope.row.Answers[task.VisitTaskId] : isNaN(parseInt(scope.row.Answers[task.VisitTaskId])) ? scope.row.Answers[task.VisitTaskId] :
`${scope.row.Answers[task.VisitTaskId]} `${scope.row.Answers[task.VisitTaskId]}
${scope.row.Unit !== 4 ? $fd('ValueUnit', scope.row.Unit) : scope.row.CustomUnit}` }} ${scope.row.Unit !== 4 ? $fd('ValueUnit', scope.row.Unit) : scope.row.CustomUnit}` }}
</template> </template>
<template v-else-if="scope.row.ValueType === 2"> <template v-else-if="scope.row.ValueType === 2">
@@ -259,26 +221,17 @@
</el-card> </el-card>
<!-- 签名框 --> <!-- 签名框 -->
<el-dialog <el-dialog v-if="signVisible" :visible.sync="signVisible" :close-on-click-modal="false" width="600px"
v-if="signVisible" custom-class="base-dialog-wrapper">
:visible.sync="signVisible"
:close-on-click-modal="false"
width="600px"
custom-class="base-dialog-wrapper"
>
<div slot="title"> <div slot="title">
<span style="font-size:18px;">{{ $t('common:dialogTitle:sign') }}</span> <span style="font-size:18px;">{{ $t('common:dialogTitle:sign') }}</span>
<span <span style="font-size:12px;margin-left:5px">{{ `(${$t('common:label:sign')}${currentUser})` }}</span>
style="font-size:12px;margin-left:5px"
>{{ `(${$t('common:label:sign')}${currentUser})` }}</span>
</div> </div>
<SignForm ref="signForm" :sign-code-enum="signCode" @closeDialog="closeSignDialog" /> <SignForm ref="signForm" :sign-code-enum="signCode" @closeDialog="closeSignDialog" />
</el-dialog> </el-dialog>
<!-- 预览文件 --> <!-- 预览文件 -->
<viewer <viewer ref="picture_perview_customizeReportPage" style="margin: 0 10px"
ref="picture_perview_customizeReportPage"
style="margin: 0 10px"
v-if="currentType && ['png', 'jpg', 'jpeg'].includes(currentType.toLowerCase())" v-if="currentType && ['png', 'jpg', 'jpeg'].includes(currentType.toLowerCase())"
:images="[`${OSSclientConfig.basePath}${currentPath}`]" :options="viewerOptions"> :images="[`${OSSclientConfig.basePath}${currentPath}`]" :options="viewerOptions">
<img v-show="false" :src="`${OSSclientConfig.basePath}${currentPath}`" alt="Image" /> <img v-show="false" :src="`${OSSclientConfig.basePath}${currentPath}`" alt="Image" />
@@ -740,8 +693,8 @@ export default {
dataArr.length === 0 dataArr.length === 0
? 0 ? 0
: dataArr.reduce((acc, curr) => { : dataArr.reduce((acc, curr) => {
return acc + (typeof curr === 'number' ? curr : 0) return acc + (typeof curr === 'number' ? curr : 0)
}, 0) / dataArr.length }, 0) / dataArr.length
break break
case 11: case 11:
if (!isNaN(parseFloat(this.questionForm[o.TableQuestionId]))) { if (!isNaN(parseFloat(this.questionForm[o.TableQuestionId]))) {
@@ -769,8 +722,8 @@ export default {
dataArr.length === 0 dataArr.length === 0
? 0 ? 0
: dataArr.reduce((acc, curr) => acc && curr) : dataArr.reduce((acc, curr) => acc && curr)
? 1 ? 1
: 0 : 0
break break
case 14: case 14:
if (!isNaN(parseFloat(this.questionForm[o.TableQuestionId]))) { if (!isNaN(parseFloat(this.questionForm[o.TableQuestionId]))) {
@@ -782,8 +735,8 @@ export default {
dataArr.length === 0 dataArr.length === 0
? 0 ? 0
: dataArr.reduce((acc, curr) => acc || curr, 0) : dataArr.reduce((acc, curr) => acc || curr, 0)
? 1 ? 1
: 0 : 0
break break
case 15: case 15:
if (!isNaN(parseFloat(this.questionForm[o.TableQuestionId]))) { if (!isNaN(parseFloat(this.questionForm[o.TableQuestionId]))) {
@@ -808,8 +761,8 @@ export default {
return isNaN(num) return isNaN(num)
? '' ? ''
: isFinite(num) : isFinite(num)
? num.toFixed(this.digitPlaces) ? num.toFixed(this.digitPlaces)
: '∞' : '∞'
}, },
getReportInfo() { getReportInfo() {
this.loading = true this.loading = true
@@ -1019,8 +972,8 @@ export default {
)}</span><a style="color:#409EFF" )}</span><a style="color:#409EFF"
href="/screen.pdf" href="/screen.pdf"
target="blank">${this.$t( target="blank">${this.$t(
'trials:reading:tip:openFile' 'trials:reading:tip:openFile'
)}</a></div>` )}</a></div>`
let confirm = await this.$confirm(html, '', { let confirm = await this.$confirm(html, '', {
dangerouslyUseHTMLString: true, dangerouslyUseHTMLString: true,
}) })
@@ -1190,13 +1143,13 @@ export default {
border-color: #444444; border-color: #444444;
} }
::v-deep .el-table__body tr > td { ::v-deep .el-table__body tr>td {
background-color: #000 !important; background-color: #000 !important;
color: #fff; color: #fff;
border-color: #444444; border-color: #444444;
} }
::v-deep .el-table__body tr:hover > td { ::v-deep .el-table__body tr:hover>td {
background-color: #858282 !important; background-color: #858282 !important;
color: #fff; color: #fff;
border-color: #444444; border-color: #444444;
@@ -221,7 +221,6 @@ export default {
Object.keys(this.seriesData).forEach(key => { Object.keys(this.seriesData).forEach(key => {
if (key !== 'default' || this.isNeedDefault) seriesData.push(this.seriesData[key]) if (key !== 'default' || this.isNeedDefault) seriesData.push(this.seriesData[key])
}) })
console.log(seriesData, 'seriesData')
this.chart.clear(); this.chart.clear();
const option = { const option = {
useUTC: true, useUTC: true,
@@ -297,11 +296,11 @@ export default {
res = await this[`get${annotation.metadata.toolName.split('histogram_')[1]}Values`](this.renderingEngineId, `${this.viewportKey}-${this.activeViewportIndex}`, annotation) res = await this[`get${annotation.metadata.toolName.split('histogram_')[1]}Values`](this.renderingEngineId, `${this.viewportKey}-${this.activeViewportIndex}`, annotation)
} else { } else {
res = await this.getCurrentSliceValuesFromVoxelManager(this.renderingEngineId, `${this.viewportKey}-${this.activeViewportIndex}`) res = await this.getCurrentSliceValuesFromVoxelManager(this.renderingEngineId, `${this.viewportKey}-${this.activeViewportIndex}`)
}
let obj = {
} }
if (res) { if (res) {
let obj = {
}
res.values.forEach(item => { res.values.forEach(item => {
if (obj[item]) { if (obj[item]) {
obj[item]++ obj[item]++
@@ -324,24 +323,10 @@ export default {
}) })
} }
seriesData.sort((a, b) => a[0] - b[0]) seriesData.sort((a, b) => a[0] - b[0])
let MIN = seriesData[0][0]
let MAX = seriesData[seriesData.length - 1][0]
seriesData = []
for (let i = MIN; i <= MAX; i++) {
if (obj[i]) {
let arr = [i, obj[i]]
seriesData.push(arr)
} else {
let arr = [i, 0]
seriesData.push(arr)
}
}
seriesData.sort((a, b) => a[0] - b[0])
return { return {
seriesData: { seriesData: {
type: 'line', type: 'line',
symbolSize: 0, symbolSize: 0,
stack: 'Total',
data: seriesData data: seriesData
}, },
min: min, min: min,
@@ -378,7 +378,7 @@ export default {
parseFloat(obj.val) < parseFloat(v.lt) parseFloat(obj.val) < parseFloat(v.lt)
) )
}) })
answer = o ? o.label : null answer = o ? o.label : 'NE'
} else if (i.classifyType === 1) { } else if (i.classifyType === 1) {
let o = list.find(v => { let o = list.find(v => {
return v.val.includes(obj.val) return v.val.includes(obj.val)
@@ -206,7 +206,7 @@
<!-- 是否复制阅片表单 --> <!-- 是否复制阅片表单 -->
<el-form-item :label="$t('trials:readTask:title:copyForm')" prop="IsCopyOrigenalForms" :rules="[ <el-form-item :label="$t('trials:readTask:title:copyForm')" prop="IsCopyOrigenalForms" :rules="[
{ required: true, message: $t('common:ruleMessage:select') }, { required: true, message: $t('common:ruleMessage:select') },
]" v-if="rowData.ReadingTool !== 3"> ]">
<el-radio-group v-model="ApplyforReasonForm.IsCopyOrigenalForms"> <el-radio-group v-model="ApplyforReasonForm.IsCopyOrigenalForms">
<el-radio v-for="item of $d.YesOrNo" :key="`IsCopyOrigenalForms${item.raw.Id}`" :label="item.value">{{ <el-radio v-for="item of $d.YesOrNo" :key="`IsCopyOrigenalForms${item.raw.Id}`" :label="item.value">{{
item.label }}</el-radio> item.label }}</el-radio>
@@ -483,8 +483,7 @@ export default {
this.ApplyforReasonVisible = true this.ApplyforReasonVisible = true
this.ApplyforReasonForm = { this.ApplyforReasonForm = {
Type: null, Type: null,
Remake: null, Remake: null
IsCopyOrigenalForms: this.rowData.ReadingTool === 3 ? false : null
} }
this.loading = false this.loading = false
}).catch(() => { this.loading = false }) }).catch(() => { this.loading = false })
@@ -50,7 +50,7 @@
:label="$t('trials:pendingReadingTasks:table:NoneDicomStudyCount')" show-overflow-tooltip :label="$t('trials:pendingReadingTasks:table:NoneDicomStudyCount')" show-overflow-tooltip
sortable="custom" /> --> sortable="custom" /> -->
<!-- 标记访视数量 --> <!-- 标记访视数量 -->
<el-table-column prop="MarkVisitCount" <el-table-column prop="MarkIVUSVisitCount"
:label="$t('trials:pendingReadingTasks:table:MarkVisitCount')" show-overflow-tooltip :label="$t('trials:pendingReadingTasks:table:MarkVisitCount')" show-overflow-tooltip
sortable="custom"> sortable="custom">
<template slot-scope="scope"> <template slot-scope="scope">
@@ -59,7 +59,7 @@
</template> </template>
</el-table-column> </el-table-column>
<!-- 标记访视数量 --> <!-- 标记访视数量 -->
<el-table-column prop="MarkVisitCount" <el-table-column prop="MarkOCTVisitCount"
:label="$t('trials:pendingReadingTasks:table:MarkOCTVisitCount')" :label="$t('trials:pendingReadingTasks:table:MarkOCTVisitCount')"
show-overflow-tooltip sortable="custom"> show-overflow-tooltip sortable="custom">
<template slot-scope="scope"> <template slot-scope="scope">
@@ -311,7 +311,7 @@ export default {
parseFloat(obj.val) < parseFloat(v.lt) parseFloat(obj.val) < parseFloat(v.lt)
) )
}) })
answer = o ? o.label : null answer = o ? o.label : 'NE'
} else if (i.classifyType === 1) { } else if (i.classifyType === 1) {
const o = list.find(v => { const o = list.find(v => {
return v.val.includes(obj.val) return v.val.includes(obj.val)
@@ -6,7 +6,7 @@
<el-form v-loading="loading" :label-width="'100px'"> <el-form v-loading="loading" :label-width="'100px'">
<!-- 仲裁对象 --> <!-- 仲裁对象 -->
<el-form-item :label="$t('trials:adRules:title:arbitrationRule')"> <el-form-item :label="$t('trials:adRules:title:arbitrationRule')">
<el-radio-group v-model="JudgyInfo.ArbitrationRule" :disabled="isSign"> <el-radio-group v-model="JudgyInfo.ArbitrationRule" :disabled="isSign || !hasPermi(['trials:trials-panel:setting:reading-unit:edit'])">
<el-radio v-for="item of $d.ArbitrationRule" :key="item.id" <el-radio v-for="item of $d.ArbitrationRule" :key="item.id"
:disabled="!JudgyInfo.IsReadingTaskViewInOrder || true" :label="item.value" @change="changeArbitrationRule"> :disabled="!JudgyInfo.IsReadingTaskViewInOrder || true" :label="item.value" @change="changeArbitrationRule">
{{ item.label }} {{ item.label }}
@@ -15,7 +15,7 @@
</el-form-item> </el-form-item>
<!-- 仲裁模式JudgeModeEnum 整体结果择一判定指标组合判定--> <!-- 仲裁模式JudgeModeEnum 整体结果择一判定指标组合判定-->
<el-form-item :label="$t('trials:adRules:title:judgeMode')"> <el-form-item :label="$t('trials:adRules:title:judgeMode')">
<el-radio-group v-model="JudgyInfo.JudgeModeEnum" :disabled="isSign"> <el-radio-group v-model="JudgyInfo.JudgeModeEnum" :disabled="isSign || !hasPermi(['trials:trials-panel:setting:reading-unit:edit'])">
<el-radio <el-radio
v-for="item of $d.JudgeMode" v-for="item of $d.JudgeMode"
:key="item.id" :key="item.id"
@@ -28,7 +28,7 @@
</el-form-item> </el-form-item>
<!-- 裁判规则JudgeRuleEnum 访视一致规则访视差异规则--> <!-- 裁判规则JudgeRuleEnum 访视一致规则访视差异规则-->
<el-form-item :label="$t('trials:adRules:title:judgeRule')"> <el-form-item :label="$t('trials:adRules:title:judgeRule')">
<el-radio-group v-model="JudgyInfo.JudgeRuleEnum" :disabled="isSign"> <el-radio-group v-model="JudgyInfo.JudgeRuleEnum" :disabled="isSign || !hasPermi(['trials:trials-panel:setting:reading-unit:edit'])">
<el-radio <el-radio
v-for="item of $d.JudgeRule" v-for="item of $d.JudgeRule"
:key="item.id" :key="item.id"
@@ -761,7 +761,7 @@ export default {
parseFloat(obj.val) < parseFloat(v.lt) parseFloat(obj.val) < parseFloat(v.lt)
) )
}) })
answer = o ? o.label : null answer = o ? o.label : 'NE'
} else if (i.classifyType === 1) { } else if (i.classifyType === 1) {
let o = list.find(v => { let o = list.find(v => {
return v.val.includes(obj.val) return v.val.includes(obj.val)
@@ -197,7 +197,7 @@ export default {
parseFloat(obj.val) < parseFloat(v.lt) parseFloat(obj.val) < parseFloat(v.lt)
) )
}) })
answer = o ? o.label : null answer = o ? o.label : 'NE'
} else if (i.classifyType === 1) { } else if (i.classifyType === 1) {
let o = list.find(v => { let o = list.find(v => {
return v.val.includes(obj.val) return v.val.includes(obj.val)
@@ -354,8 +354,8 @@ export default {
}, },
(percentage, checkpoint, lastPer) => { (percentage, checkpoint, lastPer) => {
item.uploadFileSize += checkpoint.size * (percentage - lastPer) item.uploadFileSize += checkpoint.size * (percentage - lastPer)
if (item.uploadFileSize > file.fileSize) { if (item.uploadFileSize > file.size) {
item.uploadFileSize = file.fileSize > 0 ? file.fileSize : 1 item.uploadFileSize = file.size > 0 ? file.size : 1
} }
} }
) )
@@ -882,8 +882,8 @@ export default {
}, },
(percentage, checkpoint, lastPer) => { (percentage, checkpoint, lastPer) => {
item.uploadFileSize += checkpoint.size * (percentage - lastPer) item.uploadFileSize += checkpoint.size * (percentage - lastPer)
if (item.uploadFileSize > file.fileSize) { if (item.uploadFileSize > file.size) {
item.uploadFileSize = file.fileSize > 0 ? file.fileSize : 1 item.uploadFileSize = file.size > 0 ? file.size : 1
} }
}, },
{ {
-6
View File
@@ -141,12 +141,6 @@ module.exports = defineConfig({
optimization: { optimization: {
splitChunks: { splitChunks: {
chunks: 'all', chunks: 'all',
minSize: 30000, //字节 引入的文件大于30kb才进行分割
maxSize: 5000000, //50kb,尝试将大于50kb的文件拆分成n个50kb的文件
minChunks: 1, //模块至少使用次数
maxAsyncRequests: 30, //同时加载的模块数量最多是5个,只分割出同时引入的前5个文件
maxInitialRequests: 30, //首页加载的时候引入的文件最多3个
automaticNameDelimiter: '_', //缓存组和生成文件名称之间的连接符
cacheGroups: { cacheGroups: {
libs: { // 第三方库 libs: { // 第三方库
name: 'chunk-libs', name: 'chunk-libs',