Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is running Details

main
caiyiling 2026-06-08 14:37:22 +08:00
commit f9c9d0be6d
9 changed files with 58 additions and 31 deletions

View File

@ -515,7 +515,7 @@ async function VueInit() {
isOpen = false
count = 0;
isLock = null
// zzSessionStorage.removeItem('isLock')
zzSessionStorage.removeItem('isLock')
// DicomEvent.$emit('isLock', false)
localStorage.setItem('count', '0')
document.querySelector('#my_username').value = null

View File

@ -186,8 +186,10 @@
@click.prevent="openFusion">
<svg-icon icon-class="fusion" class="svg-icon" />
</div>
<div v-if="isFusion" :class="['tool-item', activeTool === 'FusionJumpToPointTool' ? 'tool-item-active' : '']"
:title="$t('trials:reading:button:crosshairsPosition')" @click.prevent="setToolActive('FusionJumpToPointTool')">
<div v-if="isFusion"
:class="['tool-item', activeTool === 'FusionJumpToPointTool' ? 'tool-item-active' : '']"
:title="$t('trials:reading:button:crosshairsPosition')"
@click.prevent="setToolActive('FusionJumpToPointTool')">
<svg-icon icon-class="position" class="svg-icon" />
</div>
<div v-for="tool in tools" :key="tool.toolName"
@ -3582,6 +3584,7 @@ export default {
this.sLoading = false
}
}
this.$refs[this.activeTaskId][0].setSeriesActive(0, 0)
// this.setToolsPassive()
},
async toggleTaskByViewport(obj) {

View File

@ -34,9 +34,9 @@
@click.prevent="setToolActive('CircularEraser')">
<svg-icon icon-class="clear" class="svg-icon" />
</div>
<!-- <div :class="['tool-item']">
<div :class="['tool-item']">
<input type="file" @change="beginScanFiles($event)">
</div> -->
</div>
</div>
<div class="ConfigBox">
<div class="EraserConfig"
@ -1389,12 +1389,13 @@ export default {
let imageId = null
if (isFile) {
imageId = cornerstoneDICOMImageLoader.wadouri.fileManager.add(obj);
obj.segmentationId = this.$guid()
await this.createSegmentation(obj.segmentationId);
} else {
const imageIdObj = await cornerstoneDICOMImageLoader.wadouri.loadImage(`wadouri:${this.OSSclientConfig.basePath}${obj.segUrl}`).promise
imageId = imageIdObj.imageId
}
const image = await imageLoader.loadAndCacheImage(imageId);
if (!image) {
return;
}
@ -1423,7 +1424,6 @@ export default {
);
return;
}
await this.createSegmentation(segmentationId);
let arr = []
generateToolState.segMetadata.data.forEach(item => {
if (item) {
@ -1464,6 +1464,7 @@ export default {
);
voxelManager.setScalarData(scalarData);
}
this.createSegmentationRepresentation(segmentationId)
},
createSegmentGroupObj(name) {
let flag = this.segmentList.some(item => item.name === name)

View File

@ -8,7 +8,9 @@
style="font-weight: bold;font-size: 14px;margin: 5px 0px;">
<div style="display: flex;justify-content: space-between;align-items: center;color:#fff;margin: 10px 0 5px">
<span :title="question.Remark">{{ question.QuestionName }}</span>
<el-button size="mini" v-if="readingTaskState < 2 && !question.IsPreinstall" @click="openAddTableCol(question)">
<el-button size="mini"
v-if="readingTaskState < 2 && !question.IsPreinstall && (question.AddDeleteTypeEnum === 0 || (isBaseline && question.AddDeleteTypeEnum === 1) || (!isBaseline && question.AddDeleteTypeEnum === 2))"
@click="openAddTableCol(question)">
{{ $t('common:button:add') }}
</el-button>
</div>
@ -36,14 +38,15 @@
</span>
</template>
</el-table-column>
<el-table-column :label="$t('common:action:action')" show-overflow-tooltip width="100px"
v-if="readingTaskState < 2" fixed="right">
<el-table-column :label="$t('common:action:action')" show-overflow-tooltip width="100px" fixed="right">
<template slot-scope="scope">
<el-button type="text" size="mini" @click="openAddTableCol(question, scope.$index)">
{{ question.IsPreinstall ? $t('CustomizeQuestionFormItem:button:assessment') : $t('common:button:edit') }}
{{ question.IsPreinstall ?
$t('CustomizeQuestionFormItem:button:assessment') : readingTaskState >= 2 ? $t('common:button:view') :
$t('common:button:edit') }}
</el-button>
<el-button type="text" size="mini" :disabled="addOrEdit.visible"
v-if="(scope.row.IsCurrentTaskAdd === 'True' || !question.IsCopyLesions || isBaseline) && !question.IsPreinstall"
v-if="readingTaskState < 2 && (scope.row.IsCurrentTaskAdd === 'True' || !question.IsCopyLesions || isBaseline) && !question.IsPreinstall && (question.AddDeleteTypeEnum === 0 || (isBaseline && question.AddDeleteTypeEnum === 1) || (!isBaseline && question.AddDeleteTypeEnum === 2))"
@click="deleteTableCol(question, scope.$index)">
{{ $t('common:button:delete') }}
</el-button>
@ -65,7 +68,7 @@
@handleReadingChart="handleReadingChart" />
</el-form>
</div>
<div slot="footer">
<div slot="footer" v-if="readingTaskState < 2">
<el-button size="small" @click="handleCancel">
{{ $t('common:button:cancel') }}
</el-button>

View File

@ -15,15 +15,15 @@
:class="[question.Type === 'group' ? 'mb' : question.Type === 'upload' || question.Type === 'screenshot' ? 'uploadWrapper' : '']">
<!-- 输入框 -->
<el-input v-if="question.Type === 'input'" v-model="questionForm[question.Id]"
:disabled="question.TableQuestionType === 2 || (question.IsCopy && type === 'edit' && !isBaseline && questionForm.IsCurrentTaskAdd === 'False') || question.IsPreinstall" />
:disabled="question.TableQuestionType === 2 || (question.IsCopy && type === 'edit' && !isBaseline && questionForm.IsCurrentTaskAdd === 'False') || question.IsPreinstall || readingTaskState >= 2" />
<!-- 多行文本输入框 -->
<el-input v-if="question.Type === 'textarea'" v-model="questionForm[question.Id]" type="textarea"
:disabled="question.TableQuestionType === 2 || (question.IsCopy && type === 'edit' && !isBaseline && questionForm.IsCurrentTaskAdd === 'False') || question.IsPreinstall"
:disabled="question.TableQuestionType === 2 || (question.IsCopy && type === 'edit' && !isBaseline && questionForm.IsCurrentTaskAdd === 'False') || question.IsPreinstall || readingTaskState >= 2"
:autosize="{ minRows: 2, maxRows: 4 }" />
<!-- 下拉框 -->
<el-select v-if="question.Type === 'select'" v-model="questionForm[question.Id]" clearable
:multiple="question.OptionTypeEnum === 1"
:disabled="(question.TableQuestionType === 2 || question.IsPreinstall || question.QuestionGenre === 2) || (question.IsCopy && type === 'edit' && !IsBaseline && questionForm.IsCurrentTaskAdd === 'False')"
:disabled="(question.TableQuestionType === 2 || question.IsPreinstall || question.QuestionGenre === 2) || (question.IsCopy && type === 'edit' && !IsBaseline && questionForm.IsCurrentTaskAdd === 'False') || readingTaskState >= 2"
@change="((val) => { formItemChange(val, question) })">
<template v-if="question.TableQuestionType === 1">
<el-option v-for="item in organList" :key="item.Id" :label="item[question.DataTableColumn]"
@ -45,7 +45,7 @@
</el-select>
<!-- 单选 -->
<el-radio-group v-if="question.Type === 'radio'" v-model="questionForm[question.Id]"
:disabled="question.TableQuestionType === 2 || question.IsPreinstall || (question.IsCopy && type === 'edit' && !isBaseline && questionForm.IsCurrentTaskAdd === 'False')"
:disabled="question.TableQuestionType === 2 || question.IsPreinstall || (question.IsCopy && type === 'edit' && !isBaseline && questionForm.IsCurrentTaskAdd === 'False') || readingTaskState >= 2"
@change="((val) => { formItemChange(val, question) })">
<template v-if="question.DictionaryCode">
<el-radio v-for="val in $d[question.DictionaryCode]" :key="val.id" :label="val.value">
@ -60,7 +60,7 @@
</el-radio-group>
<!-- 复选框 -->
<el-checkbox-group v-if="question.Type === 'checkbox'"
:disabled="question.TableQuestionType === 2 || question.IsPreinstall || (question.IsCopy && type === 'edit' && !isBaseline && questionForm.IsCurrentTaskAdd === 'False')"
:disabled="question.TableQuestionType === 2 || question.IsPreinstall || (question.IsCopy && type === 'edit' && !isBaseline && questionForm.IsCurrentTaskAdd === 'False') || readingTaskState >= 2"
v-model="questionForm[question.Id]">
<el-checkbox v-for="val in question.TypeValue.split('|')" :key="val" :label="val">
{{ val }}
@ -70,12 +70,13 @@
<el-input v-if="question.Type === 'class' && question.ClassifyShowType === 1"
v-model="questionForm[question.Id]" />
<el-select v-if="question.Type === 'class' && question.ClassifyShowType === 2" v-model="questionForm[question.Id]"
:disabled="!question.ClassifyEditType || question.IsPreinstall"
:disabled="!question.ClassifyEditType || question.IsPreinstall || readingTaskState >= 2"
@change="(val) => { formItemChange(val, question) }">
<el-option v-for="val in question.TypeValue.split('|')" :key="val" :label="val.trim()" :value="val.trim()" />
</el-select>
<el-radio-group v-if="question.Type === 'class' && question.ClassifyShowType === 3"
v-model="questionForm[question.Id]" :disabled="!question.ClassifyEditType || question.IsPreinstall"
v-model="questionForm[question.Id]"
:disabled="!question.ClassifyEditType || question.IsPreinstall || readingTaskState >= 2"
@change="(val) => { formItemChange(val, question) }">
<template v-if="question.DictionaryCode">
<el-radio v-for="val in $d[question.DictionaryCode]" :key="val.id" :label="val.value">
@ -114,7 +115,7 @@
@blur="questionsSegmentMarkStatus[rowId ? `${rowId}_${question.Id}` : question.Id] ? () => { } : handleMarkedQsBlur(questionForm[question.Id], questionForm, question.Id, question)"
v-model="questionForm[question.Id]"
:title="questionsSegmentMarkStatus[rowId ? `${rowId}_${question.Id}` : question.Id] ? `${questionsSegmentMarkStatus[rowId ? `${rowId}_${question.Id}` : question.Id].SegmentationName}\n${questionsSegmentMarkStatus[rowId ? `${rowId}_${question.Id}` : question.Id].SegmentName}\n${questionForm[question.Id]}` : question.Remark"
:disabled="(questionsSegmentMarkStatus[rowId ? `${rowId}_${question.Id}` : question.Id] && question.ImageMarkEnum === 2) || question.ImageMarkEnum === 1 || question.IsPreinstall"
:disabled="(questionsSegmentMarkStatus[rowId ? `${rowId}_${question.Id}` : question.Id] && question.ImageMarkEnum === 2) || question.ImageMarkEnum === 1 || question.IsPreinstall || readingTaskState >= 2"
style="width: 150px;margin-right: 5px;">
<template v-if="question.Unit !== 0" slot="append">
{{ question.Unit !== 4 ? $fd('ValueUnit', question.Unit) : question.CustomUnit }}
@ -159,7 +160,7 @@
@blur="questionsMarkStatus[question.Id] && questionsMarkStatus[question.Id].isMarked ? () => { } : handleMarkedQsBlur(questionForm[question.Id], questionForm, question.Id, question)"
v-model="questionForm[question.Id]"
:title="questionsMarkStatus[rowId ? `${rowId}_${question.Id}` : question.Id] ? questionsMarkStatus[rowId ? `${rowId}_${question.Id}` : question.Id].OrderMarkName : question.Remark"
:disabled="(questionsMarkStatus[question.Id] && questionsMarkStatus[question.Id].isMarked && question.ImageMarkEnum === 2) || question.ImageMarkEnum === 1 || question.IsPreinstall"
:disabled="(questionsMarkStatus[question.Id] && questionsMarkStatus[question.Id].isMarked && question.ImageMarkEnum === 2) || question.ImageMarkEnum === 1 || question.IsPreinstall || readingTaskState >= 2"
style="width: 150px;margin-right: 5px;">
<template v-if="question.Unit !== 0" slot="append">
{{ question.Unit !== 4 ? $fd('ValueUnit', question.Unit) : question.CustomUnit }}
@ -228,7 +229,7 @@
<template v-else-if="question.ValueType === 2" slot="prefix">%</template>
</el-select>
<el-input type="text" v-else-if="question.Type === 'number' && question.DataSource !== 1"
:disabled="question.TableQuestionType === 2 || (question.IsCopy && type === 'edit' && !isBaseline && questionForm.IsCurrentTaskAdd === 'False') || question.IsPreinstall"
:disabled="question.TableQuestionType === 2 || (question.IsCopy && type === 'edit' && !isBaseline && questionForm.IsCurrentTaskAdd === 'False') || question.IsPreinstall || readingTaskState >= 2"
@change="((val) => { formItemNumberChange(val, question) })" @input="numberInput(question.Id)"
@blur="handleBlur(questionForm[question.Id], questionForm, question.Id)"
v-model="questionForm[question.Id]">
@ -237,7 +238,8 @@
question.CustomUnit }}</template>
</el-input>
<el-input type="text" v-else-if="question.Type === 'number' && question.DataSource === 1"
:disabled="question.DataSource === 1" @input="numberInput(question.Id, true) || question.IsPreinstall"
:disabled="question.DataSource === 1"
@input="numberInput(question.Id, true) || question.IsPreinstall || readingTaskState >= 2"
@blur="handleCalculationBlur(calculationValue)" v-model="calculationValue">
<template slot="append" v-if="question.Unit !== 0">{{ question.Unit !== 4 ? $fd('ValueUnit', question.Unit)
:
@ -257,8 +259,9 @@
</template>
<!-- 上传图像 -->
<el-upload v-if="question.Type === 'upload' || question.Type === 'screenshot'"
:disabled="readingTaskState === 2 || question.IsPreinstall" action :accept="question.FileType"
:limit="question.ImageCount === 0 ? 100 : question.ImageCount" :on-preview="handlePictureCardPreview"
:disabled="readingTaskState === 2 || question.IsPreinstall || readingTaskState >= 2" action
:accept="question.FileType" :limit="question.ImageCount === 0 ? 100 : question.ImageCount"
:on-preview="handlePictureCardPreview"
:before-upload="(file) => { return handleBeforeUpload(file, question.FileType, question.Type) }"
:http-request="uploadScreenshot" :on-remove="handleRemove" :file-list="fileList"
:class="{ disabled: question.ImageCount === 0 ? false : fileList.length >= question.ImageCount }">

View File

@ -177,7 +177,9 @@
custom-class="base-dialog-wrapper">
<el-form ref="reasonForm" :rules="rules" :model="ApplyforReasonForm" class="demo-ruleForm" size="small"
label-width="380px">
<p>{{ $t('trials:readTask:applyReread:title').replace('xxx', rowData.SubjectCode).replace('yyy', rowData.TaskName) }}</p>
<p>{{ $t('trials:readTask:applyReread:title').replace('xxx', rowData.SubjectCode).replace('yyy',
rowData.TaskName)
}}</p>
<!-- 申请原因 -->
<el-divider content-position="left">{{ $t('trials:readTask:title:applyReason') }}</el-divider>
<!-- 申请原因 -->
@ -378,6 +380,7 @@ export default {
},
computed: {
isTumor() {
return true
let criterion = this.trialCriterionList.find(item => item.TrialReadingCriterionId === this.TrialReadingCriterionId)
if (criterion) {
return [1, 18, 2, 3, 7, 10, 17].includes(Number(criterion.CriterionType))
@ -443,7 +446,7 @@ export default {
}
var routeData = this.$router.resolve({ path })
let imageToolType = row.ReadingTool === 1 ? 2 : 1
const res = await getAutoCutNextTask({imageToolType})
const res = await getAutoCutNextTask({ imageToolType })
let IsDoubleScreen = false
if (res.IsSuccess) {
IsDoubleScreen = res.Result.IsDoubleScreen

View File

@ -318,6 +318,17 @@
]">
<el-input-number v-model="form.MaxAnswerLength" :min="0"></el-input-number>
</el-form-item>
<!-- 手动增/删记录 -->
<el-form-item v-if="form.Type === 'table' || form.Type === 'basicTable'"
:label="$t('trials:readingUnit:qsList:title:AddDeleteTypeEnum')" prop="AddDeleteTypeEnum" :rules="[
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
]">
<el-radio-group v-model="form.AddDeleteTypeEnum">
<el-radio v-for="item of $d.AddDeleteType" :key="item.id" :label="item.value">
{{ item.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<!-- 最大行数 -->
<el-form-item v-if="form.Type === 'table' || form.Type === 'basicTable'"
:label="$t('trials:readingUnit:qsList:title:maxQuestionCount')" prop="MaxQuestionCount" :rules="[
@ -765,6 +776,7 @@ export default {
MaxQuestionCount: null,
IsCopyLesions: false,
MaxAnswerLength: null,
AddDeleteTypeEnum: null,
FileType: [],
DictionaryCode: null,
GroupId: null,
@ -1291,6 +1303,7 @@ export default {
} else {
form.ClassifyEditType = null
}
form.AddDeleteTypeEnum = 0
form.IsRequired = 2
form.LesionType = null
form.ImageCount = 0

View File

@ -1325,7 +1325,7 @@ export default {
let obj = {
Name: item.Name,
NewVal: item.TrialName,
OldVal: old.TrialName,
OldVal: old.TrialName,
}
this.confirmData.push(obj)
})

View File

@ -33,7 +33,7 @@
</el-form-item>
<!-- 受试者中止状态 -->
<el-form-item style="margin-bottom: 10px" :label="$t('trials:qcCheck:table:IsSubjectQuit')">
<el-select v-model="searchData.IsSubjectQuit" clearable style="width: 120px">
<el-select v-model="searchData.SubjectStatus" clearable style="width: 120px">
<el-option v-for="item of $d.Subject_Visit_Status" :value="item.value" :label="item.label"
:key="item.label" />
</el-select>
@ -658,7 +658,8 @@ const searchDataDefault = () => {
EndAuditTime: null,
PageIndex: 1,
PageSize: 20,
IsSubjectQuit: ''
IsSubjectQuit: '',
SubjectStatus: null
// SortField: '',
// Asc: false
}