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

uat v2.1.0
wangxiaoshuang 2026-03-05 17:53:07 +08:00
commit 87332ae9d8
12 changed files with 129 additions and 56 deletions

View File

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

View File

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

View File

@ -495,17 +495,18 @@
<h2 v-else style="color:#ddd">
Developing...
</h2>
<div v-if="iseCRFShowInDicomReading && currentReadingTaskState < 2" v-show="listShow" class="form-footer">
<el-button type="primary" size="small" @click="skipTask">
<!-- 跳过 -->
{{ $t('trials:readingReport:button:skip') }}
</el-button>
<el-button type="primary" size="small" @click="submit">
<!-- 提交 -->
{{ $t('common:button:submit') }}
</el-button>
</div>
</div>
<div v-if="iseCRFShowInDicomReading && currentReadingTaskState < 2" v-show="listShow" class="form-footer">
<el-button type="primary" size="small" @click="skipTask">
<!-- 跳过 -->
{{ $t('trials:readingReport:button:skip') }}
</el-button>
<el-button type="primary" size="small" @click="submit">
<!-- 提交 -->
{{ $t('common:button:submit') }}
</el-button>
</div>
</transition>
@ -704,6 +705,7 @@ import { getAutoCutNextTask } from '@/api/user'
import const_ from '@/const/sign-code'
import { changeURLStatic } from '@/utils/history.js'
import SystemInfo from "@/utils/systemInfo";
import md5 from 'js-md5'
export default {
name: 'DicomViewer',
components: {
@ -987,6 +989,7 @@ export default {
},
mounted() {
console.log(this.iseCRFShowInDicomReading, this.currentReadingTaskState, this.listShow)
this.getHotKeys()
this.getWwcTpl()
this.getTrialCriterion()
@ -1138,6 +1141,7 @@ export default {
let windowHeight = document.documentElement.clientHeight;
this.AspectRatio = windowWidth / windowHeight
};
this.getSystemInfoReading()
},
beforeDestroy() {
DicomEvent.$off('updateImage')
@ -2501,6 +2505,30 @@ export default {
})
},
async getSystemInfoReading() {
return new Promise(async resolve => {
let whitelisting = localStorage.getItem('whitelisting') ? JSON.parse(localStorage.getItem('whitelisting')) : []
let user = md5(sessionStorage.getItem('identityUserId'))
let r = whitelisting.some(item => item === user)
if (r) return resolve(true)
const systemInfo = new SystemInfo();
const allInfo = systemInfo.getAllInfo();
let deviceMemory = allInfo.hardware.deviceMemory; //
let { width, height } = allInfo.screen; //
// let discrete = allInfo.webgl.gpuType.discrete; //
// let estimatedMemory = allInfo.webgl.memoryInfo.estimatedMemory; //
// parseFloat(deviceMemory) < 16 ||
if (width < 1920 || height < 1080) {
let res = await this.$confirm(this.$t('browser:tip:Configuration'))
whitelisting.push(user)
localStorage.setItem('whitelisting', JSON.stringify(whitelisting))
resolve(res)
} else {
resolve(true)
}
})
},
}
}
</script>
@ -2786,7 +2814,7 @@ export default {
.form-footer {
background: #000;
padding: 10px 0;
padding: 5px 0;
text-align: center;
}

View File

@ -112,9 +112,8 @@
</el-input>
<el-input
v-else
type="number"
@change="(val) => { formItemChange(val, item) }"
@input="(val) => questionForm[item.Id] = val.replace(/[^\d.]/g, '')"
@input="numberInput(item.Id)"
@blur="handleBlur(questionForm[item.Id], questionForm, item)"
v-model.trim="questionForm[item.Id]" :disabled="readingTaskState === 2">
<template slot="append" v-if="item.Unit !== 0">{{ item.Unit !== 4 ? $fd('ValueUnit', item.Unit) : item.CustomUnit }}</template>
@ -369,7 +368,7 @@ export default {
const type = ['number', 'radio', 'select', 'input', 'textarea', 'calculation']
questions.forEach(item => {
if (type.includes(item.Type)) {
const answer = item.Type === 'select' && item.OptionTypeEnum === 1 && item.Answer ? JSON.parse(item.Answer) : item.Type === 'number' || item.Type === 'calculation' ? isNaN(parseFloat(item.Answer)) ? null : item.Answer : item.Answer
const answer = item.Type === 'select' && item.OptionTypeEnum === 1 && item.Answer ? JSON.parse(item.Answer) : item.Answer
this.$set(this.questionForm, item.Id, answer)
}
if (item.QuestionType === 1013) {
@ -498,7 +497,6 @@ export default {
},
formItemChange(val, item) {
console.log('formItemChange: ', item.QuestionName, val)
this.formChanged = true
// if (item.Type === 'number') {
// this.limitBlur(item.Id, item.ValueType)
@ -546,6 +544,7 @@ export default {
}
},
numberOrNEInput(id) {
this.formChanged = true
// this.questionForm[id] = this.questionForm[id].toUpperCase();
if (!this.questionForm[id]) {
return
@ -564,6 +563,11 @@ export default {
this.questionForm[id] = value
this.$set(this.questionForm, id, value)
},
numberInput(id) {
this.formChanged = true
let value = this.questionForm[id].replace(/[^\d.]/g, '')
this.$set(this.questionForm, id, value)
},
handleNumberOrNEBlur(item) {
if (this.questionForm[item.Id] && !isNaN(parseFloat(this.questionForm[item.Id]))) {
if (item.ValueType === 3) {
@ -802,7 +806,7 @@ export default {
uploadTpl(lesionType, TableName) {
this.upload.lesionType = lesionType
this.upload.TableName = TableName
this.upload.title = `导入( ${this.$fd('LesionType', lesionType)} `
this.upload.title = `${this.$fd('LesionType', lesionType)}`
this.upload.visible = true
},
async downloadTpl() {
@ -834,9 +838,8 @@ export default {
</script>
<style lang="scss" scoped>
.measurement-wrapper {
height: 100%;
height: calc(100% - 50px);
overflow-y: auto;
.container {
padding: 10px;

View File

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

View File

@ -67,13 +67,13 @@
</span>
</template>
</el-table-column>
<el-table-column v-if="readingTaskState < 2" :label="$t('common:action:action')" width="90px"
<el-table-column v-if="readingTaskState < 2 && item.LesionType === 104" :label="$t('common:action:action')" width="90px"
fixed="right">
<template slot-scope="scope">
<el-button type="text" size="mini" @click="handleAddOrEdit('edit', item, scope.$index)">
{{ $t('common:button:edit') }}
</el-button>
<el-button v-if="item.LesionType === 112 || item.LesionType === 111" type="text" size="mini"
<el-button type="text" size="mini"
@click="handleDelete(item, scope.$index)">
{{ $t('common:button:delete') }}
</el-button>
@ -120,9 +120,8 @@
</el-input>
<el-input
v-else
type="number"
@change="(val) => { formItemChange(val, item) }"
@input="(val) => questionForm[item.Id] = val.replace(/[^\d.]/g, '')"
@input="numberInput(item.Id)"
@blur="handleBlur(questionForm[item.Id], questionForm, item)"
v-model.trim="questionForm[item.Id]" :disabled="readingTaskState === 2">
<template slot="append" v-if="item.Unit !== 0">{{ item.Unit !== 4 ? $fd('ValueUnit', item.Unit) : item.CustomUnit }}</template>
@ -369,7 +368,7 @@ export default {
const type = ['number', 'radio', 'select', 'input', 'textarea', 'calculation']
questions.forEach(item => {
if (type.includes(item.Type)) {
const answer = item.Type === 'select' && item.OptionTypeEnum === 1 && item.Answer ? JSON.parse(item.Answer) : item.Type === 'number' || item.Type === 'calculation' ? isNaN(parseFloat(item.Answer)) ? null : item.Answer : item.Answer
const answer = item.Type === 'select' && item.OptionTypeEnum === 1 && item.Answer ? JSON.parse(item.Answer) : item.Answer
this.$set(this.questionForm, item.Id, answer)
}
if (item.QuestionType === 1013) {
@ -541,6 +540,7 @@ export default {
}
},
numberOrNEInput(id) {
this.formChanged = true
// this.questionForm[id] = this.questionForm[id].toUpperCase();
if (!this.questionForm[id]) {
return
@ -559,6 +559,11 @@ export default {
this.questionForm[id] = value
this.$set(this.questionForm, id, value)
},
numberInput(id) {
this.formChanged = true
let value = this.questionForm[id].replace(/[^\d.]/g, '')
this.$set(this.questionForm, id, value)
},
handleNumberOrNEBlur(item) {
if (this.questionForm[item.Id] && !this.questionForm[item.Id].startsWith('N')) {
if (item.ValueType === 3) {
@ -805,7 +810,7 @@ export default {
uploadTpl(lesionType, TableName) {
this.upload.lesionType = lesionType
this.upload.TableName = TableName
this.upload.title = `导入( ${this.$fd('LesionType', lesionType)} `
this.upload.title = `${this.$fd('LesionType', lesionType)}`
this.upload.visible = true
},
async downloadTpl(lesionType) {
@ -813,7 +818,7 @@ export default {
const params = {
visitTaskId: this.visitTaskId
}
if (lesionType === 112) {
if (lesionType === 104) {
await getOCTFCTTemplate(params)
} else {
await getOCTLipidAngleTemplate(params)
@ -841,7 +846,7 @@ export default {
</script>
<style lang="scss" scoped>
.measurement-wrapper {
height: 100%;
height: calc(100% - 50px);
overflow-y: auto;
// overflow: hidden;

View File

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

View File

@ -91,7 +91,7 @@
@change="((val) => { formItemChange(val, question) })" />
<!-- 下拉框 -->
<el-select v-else-if="question.Type === 'select'" v-model="questionForm[question.Id]"
:disabled="readingTaskState >= 2 || ((question.TableQuestionType === 2 || question.QuestionGenre === 2) && !!question.DictionaryCode) || isFirstChangeTask || question.QuestionType === 50 || question.QuestionType === 55"
:disabled="readingTaskState >= 2 || ((question.TableQuestionType === 2 || question.QuestionGenre === 2) && !!question.DictionaryCode) || isFirstChangeTask || question.QuestionType === 50 || question.QuestionType === 55 || question.QuestionType === 1026"
clearable :multiple="question.OptionTypeEnum === 1" @change="((val) => { formItemChange(val, question) })">
<template v-if="question.TableQuestionType === 1">
<el-option v-for="item in organList" :key="item.Id" :label="item[question.DataTableColumn]"

View File

@ -234,7 +234,10 @@ export default {
obj.forEach(i => {
i.IsBaseLineTask = this.isBaseLineTask
if (i.Type !== 'group' && i.Type !== 'summary' && i.Id) {
const answer = i.Type === 'select' && i.OptionTypeEnum === 1 && i.Answer ? JSON.parse(i.Answer) : i.Answer
let answer = i.Type === 'select' && i.OptionTypeEnum === 1 && i.Answer ? JSON.parse(i.Answer) : i.Answer
if (i.DictionaryCode && i.Type === 'calculation') {
answer = this.$fd(i.DictionaryCode, parseInt(i.Answer))
}
this.$set(this.questionForm, i.Id, answer ? answer : null)
if (i.QuestionType === 44) {
//

View File

@ -500,6 +500,7 @@ import downloadDicomAndNonedicom from '@/components/downloadDicomAndNonedicom'
import { getNetWorkSpeed, setNetWorkSpeedSizeAll, workSpeedclose } from "@/utils"
import readingChart from '@/components/readingChart'
import SystemInfo from "@/utils/systemInfo";
import md5 from 'js-md5'
const { visibility } = annotation
const { ViewportType, Events } = Enums
const renderingEngineId = 'myRenderingEngine'
@ -812,6 +813,7 @@ export default {
this.open.postMessage({ type: 'addNoneDicomMeasureData', data: data }, window.location)
})
document.addEventListener("click", this.foo);
this.getSystemInfoReading();
},
methods: {
setMPRInfo(obj) {
@ -3567,6 +3569,30 @@ export default {
})
},
async getSystemInfoReading() {
return new Promise(async resolve => {
let whitelisting = localStorage.getItem('whitelisting') ? JSON.parse(localStorage.getItem('whitelisting')) : []
let user = md5(sessionStorage.getItem('identityUserId'))
let r = whitelisting.some(item => item === user)
if (r) return resolve(true)
const systemInfo = new SystemInfo();
const allInfo = systemInfo.getAllInfo();
let deviceMemory = allInfo.hardware.deviceMemory; //
let { width, height } = allInfo.screen; //
// let discrete = allInfo.webgl.gpuType.discrete; //
// let estimatedMemory = allInfo.webgl.memoryInfo.estimatedMemory; //
// parseFloat(deviceMemory) < 16 ||
if (width < 1920 || height < 1080) {
let res = await this.$confirm(this.$t('browser:tip:Configuration'))
whitelisting.push(user)
localStorage.setItem('whitelisting', JSON.stringify(whitelisting))
resolve(res)
} else {
resolve(true)
}
})
},
},
beforeDestroy() {
DicomEvent.$off('isCanActiveNoneDicomTool')

View File

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

View File

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