Merge branch 'uat'
continuous-integration/drone/push Build is passing Details

main
wangxiaoshuang 2026-06-08 09:06:08 +08:00
commit 6d17a1f3cd
5 changed files with 44 additions and 22 deletions

View File

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

View File

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

View File

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

View File

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

View File

@ -318,6 +318,17 @@
]"> ]">
<el-input-number v-model="form.MaxAnswerLength" :min="0"></el-input-number> <el-input-number v-model="form.MaxAnswerLength" :min="0"></el-input-number>
</el-form-item> </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'" <el-form-item v-if="form.Type === 'table' || form.Type === 'basicTable'"
:label="$t('trials:readingUnit:qsList:title:maxQuestionCount')" prop="MaxQuestionCount" :rules="[ :label="$t('trials:readingUnit:qsList:title:maxQuestionCount')" prop="MaxQuestionCount" :rules="[
@ -765,6 +776,7 @@ export default {
MaxQuestionCount: null, MaxQuestionCount: null,
IsCopyLesions: false, IsCopyLesions: false,
MaxAnswerLength: null, MaxAnswerLength: null,
AddDeleteTypeEnum: null,
FileType: [], FileType: [],
DictionaryCode: null, DictionaryCode: null,
GroupId: null, GroupId: null,
@ -1291,6 +1303,7 @@ export default {
} else { } else {
form.ClassifyEditType = null form.ClassifyEditType = null
} }
form.AddDeleteTypeEnum = 0
form.IsRequired = 2 form.IsRequired = 2
form.LesionType = null form.LesionType = null
form.ImageCount = 0 form.ImageCount = 0