400 lines
14 KiB
Vue
Raw Normal View History

2025-10-21 17:43:57 +08:00
<template>
2025-12-05 17:44:21 +08:00
<!-- 基本资料 -->
2025-12-08 17:49:43 +08:00
<div class="basic_info">
2025-12-05 17:44:21 +08:00
<el-form ref="formRef" :model="modelParam.basicData" :rules="rules" size="small" class="form-inline" inline
2025-12-08 17:49:43 +08:00
label-width="6.25rem" label-position="right" :inline-message="false">
2025-12-05 17:44:21 +08:00
<span class="text-span">基本参数:</span>
2025-12-08 17:49:43 +08:00
<el-divider style="margin: .3125rem 0;" />
2025-12-05 17:44:21 +08:00
<el-form-item label="项目类别" prop="xmgl">
<SelectTable v-model:data="modelParam.basicData.xmgl" :fields="xmglFields" :tableData="dictData.XMGL"
2025-12-08 17:49:43 +08:00
label="label" value="value" objKey="value" width="12.5rem" placeholder="" size="small" />
2025-12-05 17:44:21 +08:00
</el-form-item>
<el-form-item label="英文缩写" prop="xmdh">
2025-12-08 17:49:43 +08:00
<el-input v-model="modelParam.basicData.xmdh" @input="xmdhInput" />
2025-12-05 17:44:21 +08:00
</el-form-item>
<el-form-item label="项目名称" prop="xmmc">
2025-12-08 17:49:43 +08:00
<el-input v-model="modelParam.basicData.xmmc" @change="xmmcChange" />
2025-12-05 17:44:21 +08:00
</el-form-item>
<el-form-item label="单位" prop="dw">
<SelectTable v-model:data="modelParam.basicData.dw" :fields="xmglFields" :tableData="dictData.UT" label="label"
2025-12-08 17:49:43 +08:00
value="label" objKey="label" width="12.5rem" placeholder="" size="small" />
2025-12-05 17:44:21 +08:00
</el-form-item>
<el-form-item label="结果类别" prop="xmlb">
<SelectTable v-model:data="modelParam.basicData.xmlb" :fields="xmglFields" :tableData="xmlbData" label="label"
2025-12-08 17:49:43 +08:00
value="value" objKey="value" width="12.5rem" placeholder="" size="small" />
2025-12-05 17:44:21 +08:00
</el-form-item>
<el-form-item label="阴阳性" prop="mrz">
<SelectTable v-model:data="modelParam.basicData.mrz" :fields="xmglFields" :tableData="mrzData" label="label"
2025-12-08 17:49:43 +08:00
value="value" objKey="value" width="12.5rem" placeholder="" size="small" />
2025-12-05 17:44:21 +08:00
</el-form-item>
<el-form-item label="仪器大类" prop="yqdl">
<SelectTable v-model:data="modelParam.basicData.yqdl" :fields="xmglFields" :tableData="dictData.YQDL"
2025-12-08 17:49:43 +08:00
label="label" value="value" objKey="value" width="12.5rem" placeholder="" size="small" />
2025-12-05 17:44:21 +08:00
</el-form-item>
2025-12-08 17:49:43 +08:00
<el-form-item label="允许CV(%)" prop="qccv">
<el-input type="number" v-model="modelParam.basicData.qccv" />
2025-12-05 17:44:21 +08:00
</el-form-item>
<el-form-item label="稀释倍数" prop="xsbs">
2025-12-08 17:49:43 +08:00
<el-input v-model="modelParam.basicData.xsbs" />
2025-12-05 17:44:21 +08:00
</el-form-item>
2025-12-08 17:49:43 +08:00
<el-form-item label="whonet编码" prop="whocode">
<el-input v-model="modelParam.basicData.whocode" />
2025-12-05 17:44:21 +08:00
</el-form-item>
<el-form-item label="Gram" prop="germflag">
2025-12-08 17:49:43 +08:00
<el-input v-model="modelParam.basicData.germflag" />
2025-12-05 17:44:21 +08:00
</el-form-item>
<el-form-item label="英文名称" prop="yymc">
2025-12-08 17:49:43 +08:00
<el-input v-model="modelParam.basicData.yymc" />
2025-12-05 17:44:21 +08:00
</el-form-item>
<el-form-item label="项目ID" prop="xmid">
2025-12-08 17:49:43 +08:00
<el-input disabled v-model="modelParam.basicData.xmid" />
2025-12-05 17:44:21 +08:00
</el-form-item>
2025-12-08 17:49:43 +08:00
<el-form-item label="知识库编码" prop="knowledge">
<el-input v-model="modelParam.basicData.knowledge" />
2025-12-05 17:44:21 +08:00
</el-form-item>
2025-12-08 17:49:43 +08:00
<el-form-item label="小数保留位数" prop="xsws">
2025-12-05 17:44:21 +08:00
<SelectTable v-model:data="modelParam.basicData.xsws" :fields="xmglFields" :tableData="xswsData" label="label"
2025-12-08 17:49:43 +08:00
value="value" objKey="value" width="12.5rem" placeholder="" size="small" />
2025-12-05 17:44:21 +08:00
</el-form-item>
<el-form-item label="打印形式" prop="dylx">
<SelectTable v-model:data="modelParam.basicData.dylx" :fields="xmglFields" :tableData="dylxData" label="label"
2025-12-08 17:49:43 +08:00
value="value" objKey="value" width="12.5rem" placeholder="" size="small" />
2025-12-05 17:44:21 +08:00
</el-form-item>
2025-12-08 17:49:43 +08:00
<el-form-item label="总汇表代号" prop="zhbdh">
<el-input v-model="modelParam.basicData.zhbdh" />
2025-12-05 17:44:21 +08:00
</el-form-item>
2025-12-08 17:49:43 +08:00
<el-form-item label="报告单代号" prop="bgdh">
<el-input v-model="modelParam.basicData.bgdh" />
2025-12-05 17:44:21 +08:00
</el-form-item>
<el-form-item label="价格" prop="jg">
2025-12-08 17:49:43 +08:00
<el-input type="number" v-model="modelParam.basicData.jg" />
2025-12-05 17:44:21 +08:00
</el-form-item>
<el-form-item label="助记符" prop="zjf">
2025-12-08 17:49:43 +08:00
<el-input v-model="modelParam.basicData.zjf" />
2025-12-05 17:44:21 +08:00
</el-form-item>
<el-form-item label="测试方法" prop="csff">
<SelectTable v-model:data="modelParam.basicData.csff" :fields="xmglFields" :tableData="dictData.MD"
2025-12-08 17:49:43 +08:00
label="label" value="value" objKey="value" width="12.5rem" placeholder="" size="small" />
2025-12-05 17:44:21 +08:00
</el-form-item>
2025-12-08 17:49:43 +08:00
<el-form-item label="分组打印组号" prop="fzdyxh">
<el-input type="number" v-model="modelParam.basicData.fzdyxh" />
2025-12-05 17:44:21 +08:00
</el-form-item>
2025-12-08 17:49:43 +08:00
<el-form-item label="细菌项目类别" prop="itemclass">
2025-12-05 17:44:21 +08:00
<SelectTable v-model:data="modelParam.basicData.itemclass" :fields="xmglFields" :tableData="dictData.ITEMCLASS"
2025-12-08 17:49:43 +08:00
label="label" value="value" objKey="value" width="12.5rem" placeholder="" size="small" />
</el-form-item>
<el-form-item prop="uflag">
<el-checkbox value="uflag">停用</el-checkbox>
2025-12-05 17:44:21 +08:00
</el-form-item>
<span class="text-span">结果参考值计算:</span>
2025-12-08 17:49:43 +08:00
<el-divider style="margin: .3125rem 0;" />
2025-12-05 17:44:21 +08:00
<el-form-item label="参考下限" prop="ckxx">
2025-12-08 17:49:43 +08:00
<el-input v-model="modelParam.basicData.ckxx" @input="updatedyckz" />
2025-12-05 17:44:21 +08:00
</el-form-item>
<el-form-item label="参考上限" prop="cksx">
2025-12-08 17:49:43 +08:00
<el-input v-model="modelParam.basicData.cksx" @input="updatedyckz" />
2025-12-05 17:44:21 +08:00
</el-form-item>
2025-12-08 17:49:43 +08:00
<el-form-item label="参考值" prop="dyckz">
<el-input v-model="modelParam.basicData.dyckz" />
<el-button type="primary" class="ml5" @click="multiRefClick">多行参考值向导...</el-button>
2025-12-05 17:44:21 +08:00
</el-form-item>
2025-12-08 17:49:43 +08:00
<el-form-item label="公式" prop="jsgs">
<el-input v-model="modelParam.basicData.jsgs" />
<el-button v-show="modelParam.basicData.jsxm === 'Y'" type="primary" class="ml5"
@click="calcGuildeClick">向导...</el-button>
2025-12-05 17:44:21 +08:00
</el-form-item>
<el-form-item>
<el-checkbox label="参考值与性别有关" v-model="ygxbCheck"></el-checkbox>
<el-checkbox label="与年龄有关" v-model="ygnlCheck"></el-checkbox>
<el-checkbox label="与标本有关" v-model="ygbbCheck"></el-checkbox>
<el-checkbox label="与生理周期有关" v-model="ygzqCheck"></el-checkbox>
<el-checkbox label="与诊断有关" v-model="ygzdCheck"></el-checkbox>
<el-checkbox label="计算项目" v-model="jsxmCheck"></el-checkbox>
</el-form-item>
<span class="text-span">医学审核条件:</span>
2025-12-08 17:49:43 +08:00
<el-divider style="margin: .3125rem 0;" />
<el-form-item label="项目结果不可能大于" prop="sjx" label-width="8.75rem">
<el-input v-model="modelParam.basicData.sjx" style="width:10rem" />
2025-12-05 17:44:21 +08:00
</el-form-item>
2025-12-08 17:49:43 +08:00
<el-form-item label="不可能小于" prop="xjx" label-width="7rem">
<el-input v-model="modelParam.basicData.xjx" style="width:10rem" />
2025-12-05 17:44:21 +08:00
</el-form-item>
2025-12-08 17:49:43 +08:00
<el-form-item label="病人两次检验结果在" prop="jgjg" label-width="8.75rem">
<el-input v-model="modelParam.basicData.jgjg" style="width:10rem" />
2025-12-05 17:44:21 +08:00
</el-form-item>
<!--计算属性-->
2025-12-08 17:49:43 +08:00
<el-form-item label="天内不可能相差" prop="cp_jgz" label-width="7rem">
<el-input v-model="modelParam.basicData.cp_jgz" style="width:10rem" />
2025-12-05 17:44:21 +08:00
</el-form-item>
<!--报警条件-->
<span class="text-span">报警条件</span>
2025-12-08 17:49:43 +08:00
<el-divider style="margin: .3125rem 0;" />
2025-12-05 17:44:21 +08:00
<el-form-item label="危急值">
2025-12-08 17:49:43 +08:00
<el-input placeholder="上限极值" v-model="modelParam.basicData.hlimt" /> &nbsp;
<el-input placeholder="下限极值" v-model="modelParam.basicData.llimit" />
<el-button type="primary" class="ml5" @click="conditionClick">特定条件</el-button>
2025-12-05 17:44:21 +08:00
</el-form-item>
<el-form-item label="复查">
2025-12-08 17:49:43 +08:00
<el-input placeholder="上限极值" v-model="modelParam.basicData.redoxx" />&nbsp;
<el-input placeholder="下限极值" v-model="modelParam.basicData.redosx" />
2025-12-05 17:44:21 +08:00
</el-form-item>
<span class="text-span">其他参数</span>
2025-12-08 17:49:43 +08:00
<el-divider style="margin: .3125rem 0;" />
2025-12-05 17:44:21 +08:00
<el-form-item label="国标编码">
<SelectTable v-model:data="modelParam.basicData.val1" :fields="xmglFields" :tableData="dictData.GBDM"
2025-12-08 17:49:43 +08:00
label="label" value="value" objKey="value" width="12.5rem" placeholder="国标编码" size="small" />
2025-12-05 17:44:21 +08:00
</el-form-item>
<el-form-item label="外部代码2">
2025-12-08 17:49:43 +08:00
<el-input v-model="modelParam.basicData.val2" />
2025-12-05 17:44:21 +08:00
</el-form-item>
<el-form-item label="外部代码3">
2025-12-08 17:49:43 +08:00
<el-input v-model="modelParam.basicData.val3" />
2025-12-05 17:44:21 +08:00
</el-form-item>
<el-form-item label="外部代码4">
2025-12-08 17:49:43 +08:00
<el-input v-model="modelParam.basicData.val4" />
2025-12-05 17:44:21 +08:00
</el-form-item>
<el-form-item label="外部代码5">
2025-12-08 17:49:43 +08:00
<el-input v-model="modelParam.basicData.val5" />
2025-12-05 17:44:21 +08:00
</el-form-item>
</el-form>
2025-12-08 17:49:43 +08:00
<MultiRef :refData="modelParam.basicData.dyckz || ''" v-model:dialog-table-visible="mulitDialogTableVisible"
2025-12-05 17:44:21 +08:00
@closeWithReturn="closeWithReturnMultiRef" />
<CalcGuilde v-model="calcDialogTableVisible" :form-data="modelParam.basicData" :text="modelParam.basicData.jsgs"
@confirm="handleDialogConfirm" />
<Condition v-model="conditionTabVisible" :form-data="modelParam.basicData" />
</div>
2025-10-21 17:43:57 +08:00
</template>
2025-10-24 15:37:24 +08:00
<script setup lang="ts">
2025-12-05 17:44:21 +08:00
import { formatDict, getDictData, dictData } from '@/hooks';
2025-11-03 18:07:12 +08:00
import MultiRef from './child/MultiRef.vue';
2025-11-04 15:14:07 +08:00
import CalcGuilde from './child/CalcGuilde.vue';
2025-11-06 18:22:18 +08:00
import SelectTable from '@/components/SelectTable/index.vue'
2025-11-07 17:50:06 +08:00
import Condition from './child/Condition.vue';
2025-12-05 17:44:21 +08:00
//@ts-ignore
import { getFirstLetter } from '@/utils/pinyin.js';
2025-12-08 17:49:43 +08:00
import { ElMessage } from 'element-plus';
2025-10-24 15:37:24 +08:00
2025-11-28 18:02:07 +08:00
const modelParam = defineModel<any>()
2025-11-07 17:50:06 +08:00
2025-10-27 18:15:50 +08:00
const formRef = ref();
2025-12-08 17:49:43 +08:00
2025-11-03 18:07:12 +08:00
const mulitDialogTableVisible = ref(false)
2025-11-04 15:14:07 +08:00
const calcDialogTableVisible = ref(false)
2025-11-07 17:50:06 +08:00
const conditionTabVisible = ref(false)
2025-11-06 18:22:18 +08:00
const xmglFields = ref([
{ prop: 'value', label: '代号', width: 80, enablePinyinSearch: true },
{ prop: 'label', label: '名称', enablePinyinSearch: true },
])
2025-12-05 17:44:21 +08:00
const xmlbData = [
{ label: '数值型', value: '1' },
{ label: '文字型', value: '2' },
{ label: '阴阳性型', value: '3' },
{ label: '数值文字混合型', value: '4' },
]
const mrzData = [
{ label: '阴性', value: 'N' },
{ label: '阳性', value: 'P' }
]
const xswsData = [
{ label: '保持原始值', value: '-1' },
{ label: '0 位', value: '0' },
{ label: '1 位', value: '1' },
{ label: '2 位', value: '2' },
{ label: '3 位', value: '3' },
{ label: '4 位', value: '4' },
]
const dylxData = [
{ label: '原始检验结果', value: '1' },
{ label: '>上限,<下限模式', value: '2' },
{ label: '不打印', value: '3' },
]
const rules = ref({
2025-12-08 17:49:43 +08:00
xmgl: [{ required: true, message: '请输入项目类别', trigger: 'blur' }],
xmdh: [{ required: true, message: '请输入英文缩写', trigger: 'blur' }],
xmmc: [{ required: true, message: '请输入项目名称', trigger: 'blur' }],
yqdl: [{ required: true, message: '请选择仪器大类', trigger: 'change' }],
2025-12-05 17:44:21 +08:00
})
2025-10-27 18:15:50 +08:00
computed(() => {
2025-12-05 17:44:21 +08:00
switch (modelParam.value.basicData.jgbz) {
2025-10-27 18:15:50 +08:00
case '1':
2025-12-05 17:44:21 +08:00
modelParam.value.basicData.cp_jgz = modelParam.value.basicData.jgz;
2025-10-27 18:15:50 +08:00
break;
case '2':
2025-12-05 17:44:21 +08:00
modelParam.value.basicData.cp_jgz = modelParam.value.basicData.jgz + '%';
2025-11-06 18:22:18 +08:00
break;
2025-10-27 18:15:50 +08:00
}
});
2025-11-06 18:22:18 +08:00
const jsxmCheck = computed({
2025-12-05 17:44:21 +08:00
get() {
return modelParam.value.basicData.jsxm === 'Y'
2025-11-06 18:22:18 +08:00
},
2025-12-05 17:44:21 +08:00
set(checked: boolean) {
modelParam.value.basicData.jsxm = checked ? 'Y' : 'N';
2025-11-06 18:22:18 +08:00
}
})
2025-12-05 17:44:21 +08:00
const ygzqCheck = computed({
get() {
return modelParam.value.basicData.ygzq === 'Y'
2025-11-06 18:22:18 +08:00
},
2025-12-05 17:44:21 +08:00
set(checked: boolean) {
modelParam.value.basicData.ygzq = checked ? 'Y' : 'N';
2025-11-06 18:22:18 +08:00
}
})
2025-12-05 17:44:21 +08:00
const ygzdCheck = computed({
get() {
return modelParam.value.basicData.ygzd === 'Y'
2025-11-06 18:22:18 +08:00
},
2025-12-05 17:44:21 +08:00
set(checked: boolean) {
modelParam.value.basicData.ygzd = checked ? 'Y' : 'N';
2025-11-06 18:22:18 +08:00
}
})
2025-12-05 17:44:21 +08:00
const ygbbCheck = computed({
get() {
return modelParam.value.basicData.ygbb === 'Y'
2025-11-06 18:22:18 +08:00
},
2025-12-05 17:44:21 +08:00
set(checked: boolean) {
modelParam.value.basicData.ygbb = checked ? 'Y' : 'N';
2025-11-06 18:22:18 +08:00
}
})
2025-12-05 17:44:21 +08:00
const ygnlCheck = computed({
get() {
return modelParam.value.basicData.ygnl === 'Y'
2025-11-06 18:22:18 +08:00
},
2025-12-05 17:44:21 +08:00
set(checked: boolean) {
modelParam.value.basicData.ygnl = checked ? 'Y' : 'N';
2025-11-06 18:22:18 +08:00
}
})
2025-12-05 17:44:21 +08:00
const ygxbCheck = computed({
get() {
return modelParam.value.basicData.ygxb === 'Y'
2025-11-06 18:22:18 +08:00
},
2025-12-05 17:44:21 +08:00
set(checked: boolean) {
modelParam.value.basicData.ygxb = checked ? 'Y' : 'N';
2025-11-06 18:22:18 +08:00
}
})
2025-12-05 17:44:21 +08:00
const updatedyckz = () => {
modelParam.value.basicData.dyckz = !modelParam.value.basicData.ckxx && !modelParam.value.basicData.cksx ? '' : `${modelParam.value.basicData.ckxx}--${modelParam.value.basicData.cksx}`;
}
2025-10-31 18:06:12 +08:00
2025-11-03 18:07:12 +08:00
//多行参考值
const multiRefClick = () => {
2025-12-08 17:49:43 +08:00
mulitDialogTableVisible.value = true
2025-11-03 18:07:12 +08:00
}
const closeWithReturnMultiRef = (val: string) => {
2025-12-05 17:44:21 +08:00
modelParam.value.basicData.dyckz = val;
2025-11-03 18:07:12 +08:00
mulitDialogTableVisible.value = false;
}
2025-12-05 17:44:21 +08:00
const handleDialogConfirm = (val: string) => {
modelParam.value.basicData.jsgs = val;
2025-11-04 15:14:07 +08:00
calcDialogTableVisible.value = false
}
2025-11-07 17:50:06 +08:00
//计算向导
2025-11-04 15:14:07 +08:00
const calcGuildeClick = () => {
2025-12-05 17:44:21 +08:00
if (modelParam.value.basicData.jsxm) {
2025-11-07 17:50:06 +08:00
calcDialogTableVisible.value = true
}
2025-12-05 17:44:21 +08:00
2025-11-07 17:50:06 +08:00
}
//危急值特定条件
const conditionClick = () => {
2025-12-05 17:44:21 +08:00
if (modelParam.value.basicData.xmid) {
2025-11-07 17:50:06 +08:00
conditionTabVisible.value = true
}
2025-12-05 17:44:21 +08:00
}
const xmdhInput = (val: string) => {
modelParam.value.basicData.zhbdh = val;
modelParam.value.basicData.bgdh = val;
}
const xmmcChange = (val: string) => {
modelParam.value.basicData.zjf = getFirstLetter(val);
2025-11-04 15:14:07 +08:00
}
2025-11-17 09:35:56 +08:00
onActivated(async () => {
2025-12-05 17:44:21 +08:00
await getDictData('XMGL', 'UT', 'YQDL', 'MD', 'ITEMCLASS', 'GBDM');
2025-10-27 18:15:50 +08:00
})
2025-12-02 18:14:03 +08:00
2025-12-05 17:44:21 +08:00
// 暴露验证方法(关键步骤)
2025-12-02 18:14:03 +08:00
defineExpose({
2025-12-05 17:44:21 +08:00
// 封装表单验证方法,返回 Promise
validate: () => {
return new Promise((resolve) => {
formRef.value?.validate((valid: boolean) => {
resolve(valid);
});
});
},
// 可选:暴露清除验证的方法
clearValidate: () => {
formRef.value?.clearValidate();
},
resetField: () => {
formRef.value?.resetFields();
},
2025-12-08 17:49:43 +08:00
2025-12-05 17:44:21 +08:00
});
2025-12-02 18:14:03 +08:00
2025-10-27 18:15:50 +08:00
</script>
<style scoped lang="scss">
2025-12-08 17:49:43 +08:00
.basic_info {
height: 82vh;
overflow-y: auto;
}
2025-10-27 18:15:50 +08:00
.form-inline {
2025-12-08 17:49:43 +08:00
padding: .625rem .625rem 0 .625rem;
2025-10-27 18:15:50 +08:00
background-color: #f5f7fa;
height: auto;
2025-12-05 17:44:21 +08:00
2025-10-27 18:15:50 +08:00
.el-input {
2025-12-08 17:49:43 +08:00
width: 12.5rem;
2025-10-27 18:15:50 +08:00
}
2025-12-05 17:44:21 +08:00
2025-10-27 18:15:50 +08:00
.el-form-item {
margin-right: 10px;
margin-bottom: 2px;
}
2025-12-05 17:44:21 +08:00
2025-10-27 18:15:50 +08:00
.text-span {
font-weight: bold;
2025-12-05 17:44:21 +08:00
font-size: 14px;
2025-12-08 17:49:43 +08:00
color: #1f6dd3;
2025-10-27 18:15:50 +08:00
display: block;
}
2025-12-08 17:49:43 +08:00
.el-checkbox {
margin-right: .9375rem;
}
:deep(.el-form-item__error) {
display: none;
}
2025-10-27 18:15:50 +08:00
}
</style>