-
+
-
+
@@ -469,8 +473,8 @@ export default {
PatientWeight: null,
RadionuclideTotalDose: null,
RadionuclideHalfLife: null,
- RadiopharmaceuticalStartTime: null,
- AcquisitionTime: null,
+ RadiopharmaceuticalStartTime: '',
+ AcquisitionTime: '',
TimeCheck: '',
Reason: ''
},
@@ -492,11 +496,11 @@ export default {
],
RadiopharmaceuticalStartTime: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
- { type: 'number', message: this.$t('trials:ptData:ruleMessage:number2'), trigger: 'blur' }//请输入数字
+ { validator: this.validateDicomTime, trigger: 'blur' }
],
AcquisitionTime: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
- { type: 'number', message: this.$t('trials:ptData:ruleMessage:number2'), trigger: 'blur' },//请输入数字
+ { validator: this.validateDicomTime, trigger: 'blur' },
// 自定义校验:确保成像时间不早于注射时间
{ validator: this.validateTime, trigger: 'blur' }
],
@@ -814,12 +818,68 @@ export default {
// 时间一致性校验
validateTime(rule, value, callback) {
const { RadiopharmaceuticalStartTime } = this.formData
- if (value && RadiopharmaceuticalStartTime !== null && value < RadiopharmaceuticalStartTime) {
+ const acquireSeconds = this.timeToSeconds(value)
+ const startSeconds = this.timeToSeconds(RadiopharmaceuticalStartTime)
+ if (acquireSeconds !== null && startSeconds !== null && acquireSeconds < startSeconds) {
callback(new Error(this.$t('trials:ptData:ruleMessage:number3')))//成像时间不能早于注射时间
} else {
callback()
}
},
+ validateDicomTime(rule, value, callback) {
+ if (value === undefined || value === null || value === '') {
+ callback()
+ return
+ }
+ const raw = String(value).trim()
+ if (!/^\d{1,6}$/.test(raw)) {
+ callback(new Error(this.$t('trials:ptData:ruleMessage:number2')))
+ return
+ }
+ const normalized = this.normalizeClinicalTime(raw)
+ if (!this.isValidDicomTime(normalized)) {
+ callback(new Error(this.$t('trials:ptData:ruleMessage:number4')))//请输入有效时间(HHMMSS)
+ return
+ }
+ callback()
+ },
+ normalizeClinicalTime(value) {
+ if (value === undefined || value === null || value === '') return ''
+ const digits = String(value).trim().replace(/[^\d]/g, '')
+ if (!digits) return ''
+ return digits.slice(0, 6).padStart(6, '0')
+ },
+ isValidDicomTime(value) {
+ if (!/^\d{6}$/.test(String(value || ''))) return false
+ const normalized = String(value)
+ const hh = Number(normalized.slice(0, 2))
+ const mm = Number(normalized.slice(2, 4))
+ const ss = Number(normalized.slice(4, 6))
+ return hh >= 0 && hh <= 23 && mm >= 0 && mm <= 59 && ss >= 0 && ss <= 59
+ },
+ timeToSeconds(value) {
+ const normalized = this.normalizeClinicalTime(value)
+ if (!this.isValidDicomTime(normalized)) return null
+ const hh = Number(normalized.slice(0, 2))
+ const mm = Number(normalized.slice(2, 4))
+ const ss = Number(normalized.slice(4, 6))
+ return hh * 3600 + mm * 60 + ss
+ },
+ handleTimeBlur(field) {
+ const value = this.formData[field]
+ if (value === undefined || value === null || value === '') return
+ this.formData[field] = this.normalizeClinicalTime(value)
+ this.computeTimeRelation()
+ },
+ normalizeTimeFields() {
+ this.formData.RadiopharmaceuticalStartTime = this.normalizeClinicalTime(
+ this.formData.RadiopharmaceuticalStartTime
+ )
+ this.formData.AcquisitionTime = this.normalizeClinicalTime(
+ this.formData.AcquisitionTime
+ )
+ this.computeTimeRelation()
+ },
computeTimeRelation() {
const startTime = this.formData.RadiopharmaceuticalStartTime
const acquireTime = this.formData.AcquisitionTime
@@ -829,7 +889,14 @@ export default {
return
}
- if (startTime <= acquireTime) {
+ const startSeconds = this.timeToSeconds(startTime)
+ const acquireSeconds = this.timeToSeconds(acquireTime)
+ if (startSeconds === null || acquireSeconds === null) {
+ this.formData.TimeCheck = ''
+ return
+ }
+
+ if (startSeconds <= acquireSeconds) {
this.formData.TimeCheck = this.$t('trials:ptData:timeCheck:val1') //注射时间 ≤ 成像时间
} else {
this.formData.TimeCheck = this.$t('trials:ptData:timeCheck:val2') //注射时间 > 成像时间
@@ -847,8 +914,8 @@ export default {
PatientWeight: parseFloat(res.Result.PatientWeight) || null,
RadionuclideTotalDose: parseFloat(res.Result.RadionuclideTotalDose) || null,
RadionuclideHalfLife: parseFloat(res.Result.RadionuclideHalfLife) || null,
- RadiopharmaceuticalStartTime: parseFloat(res.Result.RadiopharmaceuticalStartTime) || '',
- AcquisitionTime: parseFloat(res.Result.AcquisitionTime) || '',
+ RadiopharmaceuticalStartTime: this.normalizeClinicalTime(res.Result.RadiopharmaceuticalStartTime),
+ AcquisitionTime: this.normalizeClinicalTime(res.Result.AcquisitionTime),
TimeCheck: '',
Reason: res.Result.Reason
}
@@ -865,10 +932,12 @@ export default {
let valid = await this.$refs.patientForm.validate()
if (!valid) return
if (this.isAudit) {
+ this.normalizeTimeFields()
const { CorrectImageExaminationInformation } = const_.processSignature
this.signCode = CorrectImageExaminationInformation
this.signVisible = true
} else {
+ this.normalizeTimeFields()
this.formLoading = true
let res = await editPatientInfo(this.formData)
this.formLoading = false