Browse Source

feat:[模板管理][update]

lkf
luojie 2 months ago
parent
commit
8b6bd5a3ae
18 changed files with 280 additions and 32 deletions
  1. +8
    -0
      src/api/business/public/public.js
  2. +47
    -1
      src/components/Template/HandleFormItem.vue
  3. +5
    -0
      src/components/Template/StepComponents/ry/cs.vue
  4. +10
    -0
      src/components/Template/StepComponents/ry/fs.vue
  5. +10
    -0
      src/components/Template/StepComponents/ry/fy.vue
  6. +10
    -0
      src/components/Template/StepComponents/ry/hwhy.vue
  7. +10
    -0
      src/components/Template/StepComponents/ry/jb.vue
  8. +10
    -0
      src/components/Template/StepComponents/ry/jd.vue
  9. +10
    -0
      src/components/Template/StepComponents/ry/jrjb.vue
  10. +10
    -0
      src/components/Template/StepComponents/ry/jz.vue
  11. +5
    -0
      src/components/Template/StepComponents/ry/lx.vue
  12. +10
    -0
      src/components/Template/StepComponents/ry/sy.vue
  13. +10
    -0
      src/components/Template/StepComponents/ry/ym.vue
  14. +5
    -0
      src/components/Template/StepComponents/ry/zyhy.vue
  15. +34
    -4
      src/components/Template/StepFormPackage.vue
  16. +6
    -2
      src/components/Template/mixins/stepMixins.js
  17. +37
    -25
      src/views/business/comps/template/dialog/SelectMixReagentDialog.vue
  18. +43
    -0
      src/views/business/comps/template/formConfig/formConfig.js

+ 8
- 0
src/api/business/public/public.js View File

@ -99,6 +99,14 @@ export function public_gspList(query) {
params: query
})
}
// 细胞列表
export function public_xbList(query) {
return request({
url: '/system/business/public/xbList',
method: 'get',
params: query
})
}
// 模板的可选步骤列表
export function public_templateStepList(query) {
return request({

+ 47
- 1
src/components/Template/HandleFormItem.vue View File

@ -35,6 +35,14 @@
:disabled="getDisabled()" format="yyyy/MM/dd"
:placeholder="getPlaceholder()" @change="(val)=>onDateChange(val,'yyyy/MM/DD')">
</el-date-picker>
<el-button v-else-if="type === 'button'"
:class="getFillTypeStyle() + (orangeBg ? ' orange-bg' : '')"
:disabled="getDisabled()"
type="primary"
@click="handleClickButton(item)">
{{ item.buttonName }}
</el-button>
<div class="clickable"
:class="getFillTypeStyle() + (getDisabled() ? ' disabled' : '') + (orangeBg ? ' orange-bg' : '')"
v-else-if="item.type === 'clickable'" @click="handleClickable(item, $event)">
@ -182,7 +190,6 @@ export default {
watch: {
value(newVal) {
this.inputValue = newVal;
// typeclickable
if (this.item.type === 'clickable') {
this.$nextTick(() => {
@ -198,6 +205,10 @@ export default {
mounted() {
},
methods: {
//
handleClickButton(item){
this.$emit('clickButton', item);
},
onDateChange(val,format){
this.inputValue = moment(val).format(format);
console.log(this.inputValue,"inputValue")
@ -752,6 +763,41 @@ export default {
.el-checkbox__inner{
border-color: #f9c588 !important;
}
}
.el-button--primary{
&.orange-border{
background-color: #f79b31 !important;
border-color: #f79b31 !important;
&:hover {
background-color: #f79b31 !important;
}
&:disabled {
background-color: rgba(#f79b31,.8) !important;
border-color: rgba(#f79b31,.8) !important;
}
&:active {
background-color: rgba(#f79b31,.8) !important;
border-color: rgba(#f79b31,.8) !important;
}
}
&.blue-border {
background-color: #4ea2ff !important;
border-color: #4ea2ff !important;
&:hover {
background-color: #4ea2ff !important;
}
&:disabled {
background-color: rgba(#4ea2ff,.8) !important;
border-color: rgba(#4ea2ff,.8) !important;
}
&:active {
background-color: rgba(#4ea2ff,.8) !important;
border-color: rgba(#4ea2ff,.8) !important;
}
}
}
.green-border {

+ 5
- 0
src/components/Template/StepComponents/ry/cs.vue View File

@ -84,6 +84,11 @@ export default {
label: "超声,超声",
type: "text",
},
startDate: {
type: "input",
fillType: "actFill",
disabled: true,
},
button1: {
type: "button",
buttonName: "开始"

+ 10
- 0
src/components/Template/StepComponents/ry/fs.vue View File

@ -55,6 +55,11 @@ export default {
label: "复苏",
type: "text",
},
startDate: {
type: "input",
fillType: "actFill",
disabled: true,
},
button1: {
type: "button",
buttonName: "开始",
@ -63,6 +68,11 @@ export default {
label: ",复苏",
type: "text",
},
endDate: {
type: "input",
fillType: "actFill",
disabled: true,
},
button2: {
type: "button",
buttonName: "结束",

+ 10
- 0
src/components/Template/StepComponents/ry/fy.vue View File

@ -55,6 +55,11 @@ export default {
label: ",孵育",
type: "text",
},
startDate: {
type: "input",
fillType: "actFill",
disabled: true,
},
button1: {
type: "button",
buttonName: "开始",
@ -63,6 +68,11 @@ export default {
type: "text",
label: ",孵育",
},
endDate: {
type: "input",
fillType: "actFill",
disabled: true,
},
button2: {
type: "button",
buttonName: "结束",

+ 10
- 0
src/components/Template/StepComponents/ry/hwhy.vue View File

@ -105,6 +105,16 @@ export default {
label: ",进行恒温混匀,混匀",
type: "text",
},
startDate: {
type: "input",
fillType: "actFill",
disabled: true,
},
startDate: {
type: "input",
fillType: "actFill",
disabled: true,
},
button1: {
type: "button",
buttonName: "开始"

+ 10
- 0
src/components/Template/StepComponents/ry/jb.vue View File

@ -58,6 +58,11 @@ export default {
label: "进行搅拌,搅拌",
type: "text",
},
startDate: {
type: "input",
fillType: "actFill",
disabled: true,
},
button1: {
type: "button",
buttonName: "开始",
@ -66,6 +71,11 @@ export default {
label: "搅拌",
type: "text",
},
endDate: {
type: "input",
fillType: "actFill",
disabled: true,
},
button2: {
type: "button",
buttonName: "结束",

+ 10
- 0
src/components/Template/StepComponents/ry/jd.vue View File

@ -94,6 +94,11 @@ export default {
type:"text",
label:",解冻",
},
startDate: {
type: "input",
fillType: "actFill",
disabled: true,
},
button1:{
type:"button",
buttonName:"开始",
@ -102,6 +107,11 @@ export default {
type:"text",
label:",解冻",
},
endDate: {
type: "input",
fillType: "actFill",
disabled: true,
},
button2:{
type:"button",
buttonName:"结束",

+ 10
- 0
src/components/Template/StepComponents/ry/jrjb.vue View File

@ -75,6 +75,11 @@ import stepMixins from '@/components/Template/mixins/stepMixins.js';
label:"进行搅拌,搅拌",
type:"text",
},
startDate: {
type: "input",
fillType: "actFill",
disabled: true,
},
button1:{
type:"button",
buttonName:"开始",
@ -83,6 +88,11 @@ import stepMixins from '@/components/Template/mixins/stepMixins.js';
label:"搅拌",
type:"text",
},
endDate: {
type: "input",
fillType: "actFill",
disabled: true,
},
button2:{
type:"button",
buttonName:"结束",

+ 10
- 0
src/components/Template/StepComponents/ry/jz.vue View File

@ -50,6 +50,11 @@ import stepMixins from '@/components/Template/mixins/stepMixins.js';
type:"text",
label:"静置",
},
startDate: {
type: "input",
fillType: "actFill",
disabled: true,
},
button1:{
type:"button",
buttonName:"开始",
@ -58,6 +63,11 @@ import stepMixins from '@/components/Template/mixins/stepMixins.js';
type:"text",
label:",静置",
},
endDate: {
type: "input",
fillType: "actFill",
disabled: true,
},
button2:{
type:"button",
buttonName:"结束",

+ 5
- 0
src/components/Template/StepComponents/ry/lx.vue View File

@ -107,6 +107,11 @@ export default {
label: ",进行离心。离心",
type: "text",
},
startDate: {
type: "input",
fillType: "actFill",
disabled: true,
},
button1: {
type: "button",
buttonName: "开始",

+ 10
- 0
src/components/Template/StepComponents/ry/sy.vue View File

@ -46,6 +46,11 @@ import stepMixins from '@/components/Template/mixins/stepMixins.js';
label:"°C,进行水浴,水浴",
type:"text",
},
startDate: {
type: "input",
fillType: "actFill",
disabled: true,
},
button1:{
type:"button",
buttonName:"开始"
@ -54,6 +59,11 @@ import stepMixins from '@/components/Template/mixins/stepMixins.js';
label:"水浴",
type:"text",
},
endDate: {
type: "input",
fillType: "actFill",
disabled: true,
},
button2:{
type:"button",
buttonName:"结束"

+ 10
- 0
src/components/Template/StepComponents/ry/ym.vue View File

@ -89,6 +89,11 @@ import stepMixins from '@/components/Template/mixins/stepMixins.js';
label:"。研磨",
type:"text",
},
startDate: {
type: "input",
fillType: "actFill",
disabled: true,
},
button1:{
type:"button",
buttonName:"开始"
@ -97,6 +102,11 @@ import stepMixins from '@/components/Template/mixins/stepMixins.js';
label:"研磨",
type:"text",
},
endDate: {
type: "input",
fillType: "actFill",
disabled: true,
},
button2:{
type:"button",
buttonName:"结束"

+ 5
- 0
src/components/Template/StepComponents/ry/zyhy.vue View File

@ -90,6 +90,11 @@ import stepMixins from '@/components/Template/mixins/stepMixins.js';
label:",对上表进行混匀,混匀",
type:"text",
},
startDate: {
type: "input",
fillType: "actFill",
disabled: true,
},
button1:{
type:"button",
buttonName:"开始"

+ 34
- 4
src/components/Template/StepFormPackage.vue View File

@ -28,6 +28,12 @@
@copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false"
:orange-bg="orangeBgFields[key]" />
</template>
<template v-else-if="sItem.type === 'button'">
<HandleFormItem
type="button"
:item="getButtonItem(sItem)"
@clickButton="(e)=>handleClickButton(e,item)" />
</template>
<!-- 仪器instrumentregent(药剂) gsp(供试品) mix药剂/供试品/给药制剂 -->
<template v-else-if="sItem.type === 'instrument' || sItem.type === 'regent' || sItem.type === 'gsp' || sItem.type === 'mix' || sItem.type === 'xb'">
<HandleFormItem class="step-row" :field-item-label="fieldItemLabel" :field-key="prefixKey + '_' + key"
@ -41,9 +47,7 @@
<template v-else-if="sItem.type === 'span'">
<span>{{ formFields[key] }}</span>
</template>
<template v-else-if="sItem.type === 'button'">
<el-button type="primary" @click="handleClickButton(key)">{{ sItem.buttonName }}</el-button>
</template>
<div v-show="isShowOther(formFields[key])" class="flex flex1">
<div class="other-title">{{sItem.otherLabel ? $t(sItem.otherLabel) : $t("template.common.other") }}</div>
<HandleFormItem class="step-row" :field-item-label="fieldItemLabel" :field-key="prefixKey+'_'+sItem.otherCode" @blur="onBlur(key, $event)" :item="getOtherItem(sItem)"
@ -63,6 +67,7 @@ import formPackageMixins from '@/components/Template/mixins/formPackageMixins.js
import { isShowOther } from "@/utils/formPackageCommon.js";
import { EventBus } from "@/utils/eventBus";
import { getuuid } from "@/utils/index.js";
import moment from 'moment'
export default {
inject: ['templateFillType','templateData'],
components: {
@ -110,6 +115,24 @@ export default {
}
},
methods: {
//
handleClickButton(e,item){
const {buttonName = ""} = e;
const {config} = item;
if(buttonName === '开始' && config.hasOwnProperty("startDate")){
this.formFields["startDate"] = moment().format('YYYY-MM-DD HH:mm:ss');
}else if(buttonName === '结束' && config.hasOwnProperty("endDate")){
this.formFields["endDate"] = moment().format('YYYY-MM-DD HH:mm:ss');
}
this.$emit("clickButton",e,item)
},
//
getButtonItem(sItem) {
return {
...sItem,
fillType:sItem.fillType || "actFill",
}
},
// //
onMixReagentSubmit(data){
if(data.uuid !== this.uuid) return;
@ -149,7 +172,7 @@ export default {
sourceFrom:'step',
type:"gsp"
})
}else if(type === 'gsp'){
}else if(type === 'mix'){
EventBus.$emit("showSelectMixReagentDialog",{
studyFormId:this.templateData.id,
uuid:this.uuid,
@ -157,6 +180,13 @@ export default {
type:"sj",
mixType:true,
})
}else if(type === 'xb'){
EventBus.$emit("showSelectMixReagentDialog",{
studyFormId:this.templateData.id,
uuid:this.uuid,
sourceFrom:'step',
type:"xb",
})
}else if(type === 'instrument'){
EventBus.$emit("showSelectInstrumentDialog",{
studyFormId:this.templateData.id,

+ 6
- 2
src/components/Template/mixins/stepMixins.js View File

@ -1,5 +1,9 @@
export default {
dicts:["business_tjdw","business_czhj","business_rqcz","business_zldw","business_yqscdw","business_zsdw","business_wddw","business_ccwz","business_ggdw"],
dicts:[
"business_tjdw","business_czhj","business_rqcz","business_zldw",
"business_yqscdw","business_zsdw","business_wddw","business_ccwz","business_ggdw",
"business_hjxx"
],
props: {
formData: {
type: Object,
@ -19,6 +23,6 @@ export default {
},
resetRecord() {
this.$refs.stepFormPackageRef.resetRecord();
}
},
},
}

+ 37
- 25
src/views/business/comps/template/dialog/SelectMixReagentDialog.vue View File

@ -2,16 +2,16 @@
<template>
<el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :title="$t(title)" @close="onCancel"
:visible.sync="visible" append-to-body width="80%">
<el-radio-group v-show = "mixType" v-model="selectType" @change="handleShowTableInfo" class="mt-20 mb-20">
<el-radio-group v-show="mixType" v-model="selectType" @change="handleShowTableInfo" class="mt-20 mb-20">
<el-radio-button label="sj">试剂列表</el-radio-button>
<el-radio-button label="gsp">供试品列表</el-radio-button>
<el-radio-button label="gyzj">给药制剂列表</el-radio-button>
</el-radio-group>
<SelectTable ref="selectSjRef" :columns="columns" :selectedId="selectedId" :searchForm="searchForm"
:studyFormId="studyFormId" :listApi="listApi" :selectedCode="selectedCode" @radioSelect="handleSelect" />
<!-- 只有步骤才会又这个选项 -->
<div v-if = "sourceFrom === 'step'" class="other-reagent">
<!-- 只有步骤才会又这个选项 -->
<div v-if="sourceFrom === 'step'" class="other-reagent">
<el-checkbox v-model="otherChecked" @change="handleOtherChange">其他</el-checkbox>
<el-input class="other-reagent-input" v-model="otherReagent"></el-input>
</div>
@ -25,26 +25,35 @@
<script>
import SelectTable from '@/components/Template/SelectTable.vue';
import SelectDept from "@/views/business/comps/select/SelectDept";
import { public_sjList,public_gyzjList,public_gspList } from '@/api/business/public/public';
import { getSjSearchForm, getSjColumns,getGyzjSearchForm,getGyzjColumns,getGspSearchForm,getGspColumns } from '@/views/business/comps/template/formConfig/formConfig.js';
import { public_sjList, public_gyzjList, public_gspList, public_xbList } from '@/api/business/public/public';
import { getSjSearchForm, getSjColumns, getGyzjSearchForm, getGyzjColumns, getGspSearchForm, getGspColumns, getXbSearchForm, getXbColumns } from '@/views/business/comps/template/formConfig/formConfig.js';
import { EventBus } from "@/utils/eventBus";
const typeMap ={
const typeMap = {
sj: {
searchForm: getSjSearchForm(),
columns: getSjColumns(),
listApi: public_sjList,
title:"选择试剂"
},
gsp: {
searchForm: getGspSearchForm(),
columns: getGspColumns(),
listApi: public_gspList,
title:"选择供试品"
},
xb: {
searchForm: getXbSearchForm(),
columns: getXbColumns(),
listApi: public_xbList,
title:"选择细胞"
},
gyzj: {
searchForm: getGyzjSearchForm(),
columns: getGyzjColumns(),
listApi: public_gyzjList,
title:"选择给药制剂"
},
}
}
export default {
components: {
SelectTable,
@ -55,10 +64,7 @@ export default {
type: String,
default: "",
},
title: {
type: String,
default: "page.business.resource.sj.xzsj",
},
selectedCode: {
type: String,
default: "bh",
@ -79,14 +85,15 @@ export default {
listApi: public_sjList,
searchForm: getSjSearchForm(),
columns: getSjColumns(),
sourceFrom:"step",//
sourceFrom: "step",//
otherReagent: "",//
mixType: false,//
title:"选择试剂"
}
},
computed: {
isDisabled() {
if(this.otherChecked && this.otherReagent){//
if (this.otherChecked && this.otherReagent) {//
return false;
}
return !this.selectedId;
@ -98,29 +105,30 @@ export default {
this.uuid = data.uuid
}
//type:sj()gsp()gyzj()
const {type,sourceFrom = "step",mixType = false} = data;
const { type, sourceFrom = "step", mixType = false } = data;
this.mixType = mixType;
this.sourceFrom = sourceFrom;
this.studyFormId = studyFormId;
this.visible = true;
this.handleShowTableInfo(type);
},
handleOtherChange(val){
handleOtherChange(val) {
this.otherChecked = val;
if(val){//id
if (val) {//id
this.selectedId = "";
this.currentRow = {};
}
},
handleShowTableInfo(type){
handleShowTableInfo(type) {
this.selectType = type;
this.searchForm = typeMap[type].searchForm;
this.columns = typeMap[type].columns;
this.listApi = typeMap[type].listApi;
this.listApi = typeMap[type].listApi || this.listApi;
this.title = typeMap[type].title || this.title;
setTimeout(() => {
if(this.$refs.selectSjRef){
if (this.$refs.selectSjRef) {
this.$refs.selectSjRef.show()
}
}, 10);
@ -152,19 +160,23 @@ export default {
align-items: center;
padding: 20px 0;
}
.other-reagent{
.other-reagent {
display: flex;
align-items: center;
padding:20px 0;
padding: 20px 0;
}
.other-reagent-input{
.other-reagent-input {
width: 200px;
margin-left: 5px;
}
.mt-20{
.mt-20 {
margin-top: 20px;
}
.mb-20{
.mb-20 {
margin-bottom: 20px;
}
</style>

+ 43
- 0
src/views/business/comps/template/formConfig/formConfig.js View File

@ -40,6 +40,20 @@ export const getGyzjSearchForm = () => {
},
}
}
// 细胞列表查询表单
export const getXbSearchForm = () => {
return {
mc: {
label: 'page.business.resource.sj.mc',
},
bh: {
label: 'page.business.resource.sj.bh',
},
studyMc: {
label: 'page.business.resource.sj.sssy',
},
}
}
// 试剂列表表格列
export const getSjColumns = () => {
@ -119,4 +133,33 @@ export const getGyzjColumns = () => {
label: 'page.business.resource.sj.sssy',
},
]
}
// 细胞列表表格列
export const getXbColumns = () => {
return [
{
prop: 'mc',
label: '名称',
},
{
prop: 'bh',
label: '编号',
},
{
prop: 'tj',
label: '体积',
},
{
prop: 'ly',
label: '来源',
},
{
prop: 'sxr',
label: 'page.business.resource.sj.sxr',
},
{
prop: 'studyName',
label: 'page.business.resource.sj.sssy',
},
]
}

Loading…
Cancel
Save