|
|
- import moment from 'moment'
- export default {
- dicts: [
- 'business_pztj',
- 'business_cctj',
- 'business_nddw',
- 'business_tjdw',
- 'business_yxqdw',
- 'business_rqcz',
-
- 'business_sp_jmdyzqdyp', //色谱-编号-准确度与精密度
- 'business_sp_nbgzy', //色谱-编号-内标工作液
- 'business_sp_zkgzy', //色谱-编号-质控工作液
- 'business_sp_bqgzy', //色谱-编号-标曲工作液
- 'business_sp_bzqxzkypzbb', //色谱-编号-标准曲线/质控样品制备表
- 'business_sp_tqhsl', //色谱-编号-提取回收率
- 'business_sp_qxwdx', //色谱-编号-全血稳定性
- 'business_sp_cbyhgzywdx', //色谱-编号-储备液和工作液稳定性
- 'business_sp_rxjzxy', //色谱-编号-溶血基质效应
- 'business_sp_jzxy', //色谱-编号-基质效应
- 'business_sp_xzxytyx', //色谱-编号-选择性与特异性
- 'business_sp_zdybs', //色谱-编号-最大样本数
- 'business_sp_xskkx', //色谱-编号-稀释可靠性
- 'business_sp_cbydb' //色谱-编号-储备液对比
- ],
- props: {
- templateData: {
- type: Object,
- default: () => {}
- }
- },
- watch: {
- templateData: {
- immediate: true,
- deep: true,
- handler(v) {
- if (v) {
- const {
- studyMc,
- studySn,
- templateMc,
- templateMcEn,
- templateSn,
- startDate,
- bdmc,
- endDate,
- id
- } = v
- if (v.resource) {
- //试验试剂信息
- this.resource = JSON.parse(v.resource)
- }
- if (v.bdnr) {
- this.formData = {
- ...JSON.parse(v.bdnr),
- studyMc,
- studySn,
- templateMc,
- templateMcEn,
- templateSn,
- startDate,
- bdmc,
- endDate,
- id
- }
- } else {
- this.formData = {
- studyMc,
- studySn,
- templateMc,
- templateMcEn,
- templateSn,
- startDate,
- bdmc,
- endDate,
- id
- }
- }
- const { effectivePeriod, effectivePeriodUnit, expireDate } =
- this.formData
- //实际填报的时候,如果有了开始时间,并且有有效周期,但是没有失效日,就计算失效日为开始时间+有效周期
- if (
- startDate &&
- this.fillType === 'actFill' &&
- effectivePeriod &&
- effectivePeriodUnit &&
- !expireDate
- ) {
- const start = moment(startDate)
- const end = start
- .add(Number(effectivePeriod), effectivePeriodUnit)
- .format('YYYY-MM-DD HH:mm:ss')
- this.formData = { ...this.formData, expireDate: end }
- }
- console.log(this.formData, 'formData from templateData')
- this.setTemplateData(v)
- }
- }
- }
- },
- data() {
- return {
- formData: {},
- templateDetail: {},
- resource: [], //试验试剂信息
- sysjColumns: [
- { label: '试剂名称', prop: 'reagentName' },
- { label: '编号', prop: 'reagentCode' },
- { label: '批号', prop: 'reagentNo' },
- { label: '浓度/含量/纯度', prop: 'concentration' },
- { label: '来源', prop: 'source' },
- { label: '失效日', prop: 'expireDate' }
- ],
- yqsColumns: [
- { label: '仪器名称', prop: 'instrumentName' },
- { label: '仪器型号', prop: 'instrumentModel' },
- { label: '仪器编号', prop: 'instrumentCode' },
- { label: '下次测试/校准/检定日期', prop: 'nextTestDate' }
- ]
- }
- },
- mounted() {},
- unmounted() {
- this.setTemplateData({})
- },
- methods: {
- getResource() {
- return this.resource
- },
- //根据ref数组获取直接formData
- getFilledFormDataByRefs(refArr = []) {
- let result = {}
- refArr.map((ref) => {
- const refData = this.$refs[ref]?.getFilledFormData() || {}
- result = { ...result, ...refData }
- })
- return result
- },
- //统一校验form表单是否填写
- async validFormFields(refArr = []) {
- let result = {}
- const refs = refArr.map((ref) => {
- let refData = {}
- if (this.$refs[ref][0]) {
- refData = this.$refs[ref][0]?.getFormData() || {}
- } else {
- refData = this.$refs[ref]?.getFormData() || {}
- }
- return refData
- })
- const validFormData = await Promise.all(refs).catch((err) => {
- // this.$message.error(err);
- if (err.errorType && err.errorType === 'step') {
- this.$message.error('请添加步骤')
- return
- }
- this.$message.error('表单内容未填完,请填写后再提交')
- })
- if (validFormData) {
- validFormData.forEach((item) => {
- for (const [key, value] of Object.entries(item)) {
- let index = 0
- // 如果当前键是可能重复的字段,且结果对象中已经存在该键,则添加索引后缀
- if (
- (key === 'headerSelectFields' || key === 'stepTableFormData') &&
- result.hasOwnProperty(key)
- ) {
- // 为重复字段生成带索引的键名,从1开始(因为第一个组件不需要后缀)
- const newKey = `${key}_${++index}`
- result[newKey] = value
- } else {
- // 正常合并其他字段
- result[key] = value
- }
- }
- })
- return result
- }
- return false
- },
- //试验配制条件options
- getDictOptions(dictType) {
- return this.dict.type[dictType] || []
- },
-
- setTemplateData(data) {
- this.$store.commit('template/SET_TEMPLATE_DATA', data)
- },
- //统一处理删除行
- deleteRow(index) {
- this.$refs.stepTableRef.deleteRow(index)
- },
-
- //统一处理blur事件,因为有效周期和过期日期是相关的,所以需要在有效周期失焦时更新过期日期
- onHandleBlur(fields) {
- const {
- key,
- effectivePeriodUnit,
- effectivePeriod,
- codeSTD,
- targetStartSolution
- } = fields
- const { startDate } = this.formData
- if (key === 'codeSTD') {
- //起始编号STD失焦时,更新stepDataSource
- const arr = Array.from({ length: codeSTD }, (item, index) => ({
- actSolutionVolumePrecision: 3, //小数点精度默认为3
- actSolutionConcentrationPrecision: 3, //小数点精度默认为3
- targetDiluentVolumePrecision: 3, //小数点精度默认为3
- targetStartSolutionVolumePrecision: 3, //小数点精度默认为3
- targetSolutionCode: `STD${Number(codeSTD) - index}`
- }))
- this.$refs.stepTableRef.updateDataSource(arr)
- } else if (key === 'targetStartSolution') {
- //起始溶液体积失焦时,更新目标溶液预计浓度
- const arr = this.$refs.stepTableRef?.getDataSource()
- arr.forEach((item, rowIndex) => {
- this.updateTargetStartSolutionVolume(
- rowIndex,
- item,
- targetStartSolution
- )
- })
- }
- },
- //统一处理table失焦事件
- onHandleTableBlur(params) {
- const { rowIndex, colKey, value, item } = params
- if (
- colKey === 'targetSolutionVolume' ||
- colKey === 'targetSolutionConcentration' ||
- colKey === 'targetStartSolutionVolumePrecision' ||
- colKey === 'targetDiluentVolumePrecision'
- ) {
- const volume =
- this.$refs.stepFormPackageRef?.getFormDataByKey(
- 'targetStartSolution'
- ) || 0
- if (volume) {
- this.updateTargetStartSolutionVolume(item, volume)
- }
- } else if (
- colKey === 'actStartSolutionVolume' ||
- colKey === 'actDiluentVolume'
- ) {
- //实际起始溶液体积和实际目标溶液体积
- const targetAcSolution =
- this.$refs.stepFormPackageRef?.getFormDataByKey('targetAcSolution') ||
- 0 //获取实际起始溶液浓度
- if (targetAcSolution) {
- this.updateSjmbrynd(item, targetAcSolution)
- }
- }
- },
-
- //计算并更新实际目标溶液浓度 先计算实际目标溶液体积再计算实际目标溶液浓度
- updateSjmbrynd(item, targetAcSolution) {
- //实际源溶液浓度÷(实际终体积÷源溶液加入体积);
- const precision = item.actSolutionConcentrationPrecision || 0
- const volPrecision = item.actSolutionVolumePrecision || 0
- //实际稀释液体积
- const actDiluentVolume = item.actDiluentVolume || 0
- const actStartSolutionVolume = item.actStartSolutionVolume || 0
- //实际高源溶液加入体积+实际稀释液加入体积
- const actVol = (
- Number(actStartSolutionVolume) + Number(actDiluentVolume)
- ).toFixed(volPrecision)
- //实际目标溶液体积
- item.actSolutionVolume = actVol
- //实际目标溶液浓度
- const actNd = (
- targetAcSolution /
- actStartSolutionVolume /
- actVol
- ).toFixed(precision)
- item.actSolutionConcentration = actNd
- },
- //更新起始溶液体积时,计算目标溶液预计浓度
- updateTargetStartSolutionVolume(item, volume) {
- const precision = item.targetStartSolutionVolumePrecision || 0
- const concentration = item.targetSolutionConcentration || 0
- const targetVolume = item.targetSolutionVolume || 0
- //目标溶液预计浓度:(目标溶液预计体积 乘以 起始溶液浓度)除以 起始溶液体积
- const result = ((concentration * targetVolume) / volume).toFixed(
- precision
- )
- item.targetStartSolutionVolume = result
- // this.$refs.stepTableRef.updateDataSourceByRowIndex(rowIndex, { targetStartSolutionVolume: result });
- if (targetVolume) {
- //预设稀释液体积:目标溶液预计体积 减去 源溶液预计体积;
- const precision1 = item.targetDiluentVolumePrecision || 0
- const result1 = (targetVolume - result).toFixed(precision1)
- item.targetDiluentVolume = result1
- // this.$refs.stepTableRef.updateDataSourceByRowIndex(rowIndex, { targetDiluentVolume: result1 });
- }
- }
- }
- }
|