Browse Source

feat: [模板管理] LBA004

lkf
memorylkf 2 months ago
parent
commit
28a81a4f08
4 changed files with 408 additions and 1 deletions
  1. +14
    -0
      src/lang/en/template/lba.js
  2. +14
    -0
      src/lang/zh/template/lba.js
  3. +4
    -1
      src/views/business/comps/template/TemplateTable.vue
  4. +376
    -0
      src/views/business/comps/template/comps/lba/LBA004.vue

+ 14
- 0
src/lang/en/template/lba.js View File

@ -9,5 +9,19 @@ export default {
lba003: {
jclc: 'Testing Process',
fj: 'Attachment'
},
lba004: {
xbxx: 'Analysis Plate Information',
ypxx: 'Sample Information',
xszj: '稀释组件',
xz: 'Add',
sc: 'Delete',
jzmc: '基质名称',
xh: '序号',
xsbs: '稀释倍数',
ysypjrz: '预设样品加入值',
sjypjrz: '实际样品加入值',
ysjzjrz: '预设基质加入值',
sjjzjrz: '实际基质加入值'
}
}

+ 14
- 0
src/lang/zh/template/lba.js View File

@ -9,5 +9,19 @@ export default {
lba003: {
jclc: '检测流程',
fj: '附件'
},
lba004: {
xbxx: '选板信息',
ypxx: '样品信息',
xszj: '稀释组件',
xz: '新增',
sc: '删除',
jzmc: '基质名称',
xh: '序号',
xsbs: '稀释倍数',
ysypjrz: '预设样品加入值',
sjypjrz: '实际样品加入值',
ysjzjrz: '预设基质加入值',
sjjzjrz: '实际基质加入值'
}
}

+ 4
- 1
src/views/business/comps/template/TemplateTable.vue View File

@ -55,6 +55,7 @@ import PCR002 from "./comps/pcr/PCR002.vue";
// LBA001-使SP001
import LBA002 from "./comps/lba/LBA002.vue";
import LBA003 from "./comps/lba/LBA003.vue";
import LBA004 from "./comps/lba/LBA004.vue";
//ADA
// ADA001-使SP001
@ -78,7 +79,8 @@ export default {
PCR002,
//LBA
LBA002,
LBA003
LBA003,
LBA004
},
props: {
sn: {
@ -134,6 +136,7 @@ export default {
'LBA001': 'SP001',
'LBA002': 'LBA002',
'LBA003': 'LBA003',
'LBA004': 'LBA004',
//ADA
'ADA001': 'SP001',
'ADA002': 'LBA002',

+ 376
- 0
src/views/business/comps/template/comps/lba/LBA004.vue View File

@ -0,0 +1,376 @@
<!-- 配体结合分析处理记录表 -->
<template>
<div>
<div class="detail-container">
<div class="detail-title"><img src="@/assets/images/detail-title.png">{{ formData.bdmc }}<img src="@/assets/images/detail-title.png" /></div>
<div class="detail-content">
<div class="content">
<BaseInfoFormPackage fieldItemLabel="template.common.baseInfo" label="template.common.baseInfo"
ref="baseInfoRef" :formConfig="baseInfoFormConfig" :formData="formData" />
<TableList label="template.common.reagentInfo" :columns="sysjColumns" :dataSource="resource" />
<TableList label="template.common.wzInfo" :columns="sywzColumns" :dataSource="resourceWz" v-if="resourceWz.length>0"/>
<TableList label="template.common.instrumentInfo" :columns="yqColumns" :dataSource="yqResource" />
<LineLabel label="template.lba.lba004.xbxx" />
<CustomTable
:isBorder="false"
@blur="onHandleTableBlur"
:ref="`jcbRef`"
:columns="jcbColumns"
:formData="formData"
:prefixKey = "`jcb`"
fieldItemLabel = "template.lba.lba004.xbxx"
>
<template slot="operation" slot-scope="{ row, rowIndex, columns }" v-if="fillType!='actFill'">
<TableOpertaionDelete :row="row" :rowIndex="rowIndex" :columns="columns" @deleteRow="deleteRow" ></TableOpertaionDelete>
</template>
</CustomTable>
<BaseInfoFormPackage fieldItemLabel="template.lba.lba004.ypxx" label="template.lba.lba004.ypxx"
ref="fjRef" :formConfig="getFjFormConfig" :formData="formData" />
<LineLabel label="template.lba.lba004.xszj" />
<!-- 平行配制区域 -->
<div :label="$t('template.common.pxpz')"
v-for="(paralleConfig, paralleIndex) in formData.paralleConfigs"
:key="'paralle_' + paralleIndex">
<div class="template-form-item">
<div class="config-header-end" v-if="fillType === 'preFill'">
<el-button type="primary" @click="handleAddParalle">{{ $t('template.lba.lba004.xz')}}</el-button>
<el-button type="danger" plain @click="deleteParalleConfig(paralleIndex)">{{ $t('template.lba.lba004.sc')}}</el-button>
</div>
<BaseInfoFormPackage @clickable="(e) => handleClickable('paralle', paralleIndex, e)"
:ref="`paralleStepFormPackageRef_${paralleIndex}`" :formConfig="paralleStepFormConfig"
:formData="paralleConfig" :prefixKey="'paralle' + paralleIndex"
:fieldItemLabel="$t('template.lba.lba004.xszj')" />
<CustomTable @blur="(e) => onHandleTableBlur('paralle', paralleIndex, e)"
:ref="`paralleStepTableRef_${paralleIndex}`" :showOperation="fillType === 'actFill' || fillType === 'preFill'"
:columns="paralleStepColumns"
@onRegentSubmit="(data) => onTableRegentSubmit('paralle', paralleIndex, data)"
:formData="paralleConfig" :prefixKey="'paralle' + paralleIndex"
:fieldItemLabel="$t('template.lba.lba004.xszj')">
<template slot="operation" slot-scope="{ row, rowIndex, columns }">
<TableOpertaionDelete :row="row" :rowIndex="rowIndex" :columns="columns" @deleteRow="(rowIndex) => deleteRow(rowIndex, 'paralle', paralleIndex)" ></TableOpertaionDelete>
</template>
</CustomTable>
<Step class="mt-0 s-container" :ref="`paralleStepRef_${paralleIndex}`"
:formData="paralleConfig.paralleStepData" :fieldItemLabel="$t('template.lba.lba004.xszj')"
:prefixKey="'paralle' + paralleIndex"></Step>
</div>
</div>
<BaseInfoFormPackage fieldItemLabel="template.common.remark" label="template.common.remark"
ref="remarkRef" :formConfig="remarkConig" :formData="formData" />
</div>
</div>
</div>
<!-- <button @click="onSave">保存</button> -->
</div>
</template>
<script>
import BaseInfoFormPackage from "@/components/Template/BaseInfoFormPackage";
import LineLabel from "@/components/Template/LineLabel";
import TableList from "@/components/Template/Table";
import Step from "@/components/Template/Step";
import templateMixin from "../../mixins/templateMixin";
import { EventBus } from "@/utils/eventBus";
import { uniqeResource } from "@/utils/calUnitTools";
import { debounce } from 'lodash-es';
import CustomTable from '@/components/Template/CustomTable.vue';
import TableOpertaionDelete from "@/components/Template/operation/TableOpertaionDelete.vue"
export default {
name: "LBA004",
components: { BaseInfoFormPackage, LineLabel, TableList, Step,CustomTable,TableOpertaionDelete },
mixins: [templateMixin],
props: {
fillType: {
type: String,
default: 'preFill',
},
},
computed: {
//
jcbColumns() {
return [{
label: 'template.lba.lba002.jcbmc',
prop: 'jcb',
bodyType: 'input',
bodyFillType: 'preFill',
width: 280,
},{
prop: 'jcbBh',
bodyType: 'sj',
bodyFillType: 'actFill',
width: 280
}]
},
//
remarkConig() {
return [
{
type: "cellItem",
config: {
remark: {
label: "",
type: "textarea",
fillType: "actFill",
span: 1,
placeholder: 'template.common.remarkPlaceholder',
maxlength: 1000,
rows: 5
}
}
}
]
},
//
baseInfoFormConfig() {
return [
{
type: "cardItem",
config: {
studyMc: {
label: 'template.common.testName',
type: "input",
disabled: true,
},
studySn: {
label: 'template.common.testNumber',
type: "input",
disabled: true,
},
methodCode: {
label: 'template.common.methodCode',
type: "input",
fillType: "preFill",
maxlength: 50
},
versionNum: {
label: 'template.common.versionNumber',
type: "inputNumber",
fillType: "actFill",
prepend: "V",
maxlength: 50
},
}
},
{
type: "conditionItem",
label: 'template.lba.lba002.cztj',
config: {
pre: {
label: 'template.common.preFill',
type: "select",
multiple: true,
fillType: "preFill",
options: this.getDictOptions('business_pztj'),
otherCode: "preOther",
},
act: {
label: 'template.common.actualFill',
type: "select",
fillType: "actFill",
otherCode: "actOther",
multiple: true,
compareTo: "pre",
options: this.getDictOptions('business_pztj')
}
}
},
{
type: "cellItem",
label: 'template.lba.lba002.czsj',
config: {
startDate: {
label: 'template.common.startTime',
type: "input",
},
endDate: {
label: 'template.common.endTime',
type: "input",
},
}
}
]
},
//
getFjFormConfig() {
return [
{
type: "attachment",
config: {
attTitle: {
label: 'template.lba.lba003.fj',
type: "attachment",
fillType: "actFill",
},
}
}
]
},
paralleStepFormConfig(){
return [
{
type: 'step',
config: {
jz: {
label: 'template.lba.lba004.jzmc',
type: 'input',
fillType: 'preFill',
subType: 'sj',
subKey: 'jzCode',
subFillType: 'actFill',
maxlength: 20
}
}
}
]
},
paralleStepColumns(){
return [
{
label: 'template.lba.lba004.xsbs',
prop: 'xsbs',
width: 150,
showWidth: 120,
bodyType: 'input',
bodyFillType: 'preFill'
},
{
label: 'template.lba.lba004.ysypjrz',
prop: 'ysypjrz',
width: 250,
showWidth: 120,
fillType: 'preFill',
bodyType: 'inputNumber',
bodyFillType: 'preFill',
headerSelectKey: 'ysypjrzUnit',
headerSelectTo: 'sjypjrzUnit',
headerOptions: this.getDictOptions('business_tjdw'),
},
{
label: 'template.lba.lba004.sjypjrz',
prop: 'sjypjrz',
width: 250,
showWidth: 120,
fillType: 'preFill',
bodyType: 'inputNumber',
bodyFillType: 'actFill',
compareTo: 'ysypjrz',
copyFrom: 'ysypjrz',
headerSelectKey: 'sjypjrzUnit',
headerOptions: this.getDictOptions('business_tjdw'),
},
{
label: 'template.lba.lba004.ysjzjrz',
prop: 'ysjzjrz',
width: 250,
showWidth: 120,
fillType: 'preFill',
bodyType: 'inputNumber',
bodyFillType: 'preFill',
headerSelectKey: 'ysjzjrzUnit',
headerSelectTo: 'sjjzjrzUnit',
headerOptions: this.getDictOptions('business_tjdw'),
},
{
label: 'template.lba.lba004.sjjzjrz',
prop: 'sjjzjrz',
width: 250,
showWidth: 120,
fillType: 'preFill',
bodyType: 'inputNumber',
bodyFillType: 'actFill',
compareTo: 'ysjzjrz',
copyFrom: 'ysjzjrz',
headerSelectKey: 'sjjzjrzUnit',
headerOptions: this.getDictOptions('business_tjdw'),
}
]
}
},
data() {
return {
formData: {}
};
},
mounted() {
if(this.fillType === "preFill"){
this.handleAddParalle();
}
if(this.fillType === "actFill"){
this.getCode(formData);
}
},
methods: {
//
getFilledFormData() {
return this.getFilledFormDataByRefs(["baseInfoRef","stepRef","jcbRef", "remarkRef","fjRef"])
},
//
async getFormData() {
let content = await this.validFormFields(["baseInfoRef","stepRef","jcbRef",, "remarkRef","fjRef"]);
return content;
},
getResource() {
let content = this.getFilledFormData();
//使
const stepResource = this.$refs.stepRef.getStepResource()
this.resourceTmp = stepResource.sjResource || []
this.yqResourceTmp = stepResource.yqResource || []
return this.resourceTmp;
},
//
async onSave() {
let content =await this.$refs.fjRef.getFormData();
console.log(content);
},
//
handleAddParalle() {
//
if (!this.formData.paralleConfigs) {
this.$set(this.formData, 'paralleConfigs', []);
}
//
this.formData.paralleConfigs.push({
paralleStepData: [],
paralleTableFormData: [],
showParalleConfig: true
});
},
//
deleteParalleConfig(index) {
if(this.formData.paralleConfigs.length===1){
// this.$message.error("1");
return;
}
this.formData.paralleConfigs.splice(index, 1);
},
}
};
</script>
<style rel="stylesheet/scss" lang="scss">
.mt-20 {
margin-top: 20px;
}
.print-btn {
margin-bottom: 20px;
}
.config-header-end {
display: flex;
justify-content: end;
align-items: center;
margin-bottom: 15px;
font-weight: bold;
font-size: 16px;
color: #303133;
}
</style>

Loading…
Cancel
Save