解决合并冲突

This commit is contained in:
2025-12-10 14:20:24 +08:00
parent e1385cb3e6
commit 18f6a845e6
804 changed files with 61881 additions and 13577 deletions

View File

@@ -1,40 +1,47 @@
import request from '@/utils/request'
import request from '@/utils/request';
// 查询器材目录列表
export function getDeviceList(query) {
console.log(query,'aaaaa')
return request({
export function getDeviceList (query) {
return request ({
url: '/data-dictionary/device/information-page',
method: 'get',
params: query
})
params: query,
});
}
// 查询器材目录详细
export function getDeviceOne(id) {
return request({
export function getDeviceOne (id) {
return request ({
url: '/data-dictionary/device/information-one',
method: 'get',
params: { id } // 确保参数正确传递
})
params: {id}, // 确保参数正确传递
});
}
// 校验器材是否可以编辑
export function validateEditDevice (deviceId) {
return request ({
url: '/data-dictionary/device/validate-edit',
method: 'get',
params: {deviceId}, // 确保参数正确传递
});
}
// 新增器材目录
export function addDevice(data) {
return request({
export function addDevice (data) {
return request ({
url: '/data-dictionary/device/information',
method: 'post',
data: data
})
data: data,
});
}
// 修改器材目录
export function editDevice(data) {
return request({
export function editDevice (data) {
return request ({
url: '/data-dictionary/device/information',
method: 'put',
data: data
})
data: data,
});
}
// // 删除器材目录
@@ -46,56 +53,56 @@ export function editDevice(data) {
// }
// 器材目录分类查询
export function getDiseaseTreatmentInit() {
return request({
export function getDiseaseTreatmentInit () {
return request ({
url: '/data-dictionary/device/init',
method: 'get'
})
method: 'get',
});
}
// 停用病种目录
export function stopDevice(ids) {
console.log(ids)
return request({
export function stopDevice (ids) {
console.log (ids);
return request ({
url: '/data-dictionary/device/information-stop',
method: 'put',
data: ids
})
data: ids,
});
}
// 启用病种目录
export function startDevice(ids) {
console.log(ids)
return request({
export function startDevice (ids) {
console.log (ids);
return request ({
url: '/data-dictionary/device/information-start',
method: 'put',
data: ids
})
data: ids,
});
}
// 查询部门树形数据
export function deptTreeSelect(queryParams) {
return request({
export function deptTreeSelect (queryParams) {
return request ({
url: '/base-data-manage/organization/organization',
method: 'get',
params: queryParams
})
params: queryParams,
});
}
// 查询地点树形数据
export function locationTreeSelect(queryParams) {
return request({
export function locationTreeSelect (queryParams) {
return request ({
url: '/base-data-manage/location/location-page-tree',
method: 'get',
params: queryParams
})
params: queryParams,
});
}
// 获取医疗服务项目目录
export function getYbDeviceList(queryParams) {
return request({
export function getYbDeviceList (queryParams) {
return request ({
url: '/catalog/page',
method: 'get',
params: queryParams
})
params: queryParams,
});
}

View File

@@ -22,12 +22,12 @@
<el-row :gutter="24">
<el-col :span="8" v-if="form.id != undefined">
<el-form-item label="编号" prop="busNo">
<el-input v-model="form.busNo" placeholder="请输入编码" disabled />
<el-input v-model="form.busNo" clearable placeholder="请输入编码" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="器材名称" prop="name">
<el-input v-model="form.name" placeholder="请输入器材名称" />
<el-input v-model="form.name" clearable placeholder="请输入器材名称" />
</el-form-item>
</el-col>
<el-col :span="8">
@@ -35,10 +35,10 @@
<el-tree-select
v-model="form.categoryCode"
:data="deviceCategories"
filterable
:props="{ value: 'value', label: 'info', children: 'children' }"
:disabled="false"
:disabled="form.isEditInfoDisable === 1 || form.isEditInfoDisable === 2"
value-key="value"
placeholder=""
check-strictly
clearable
/>
@@ -48,7 +48,7 @@
<el-row :gutter="24">
<el-col :span="8">
<el-form-item label="器材种类" prop="typeCode">
<el-select v-model="form.typeCode" placeholder="请选择" clearable>
<el-select v-model="form.typeCode" clearable filterable>
<el-option
v-for="dict in device_type_code"
:key="dict.value"
@@ -68,6 +68,7 @@
placeholder="请选择提供部门"
check-strictly
clearable
filterable
/>
</el-form-item>
</el-col>
@@ -81,6 +82,7 @@
placeholder="请选择地点"
check-strictly
clearable
filterable
/>
</el-form-item>
</el-col>
@@ -90,9 +92,10 @@
<el-form-item label="包装单位" prop="unitCode">
<el-select
v-model="form.unitCode"
placeholder="请选择"
clearable
filterable
@change="handleUnitCodeChange"
:disabled="form.isEditInfoDisable === 1 || form.isEditInfoDisable === 2"
>
<el-option
v-for="dict in unit_code"
@@ -105,7 +108,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="销售单位" prop="salesUnitCode">
<el-select v-model="form.salesUnitCode" placeholder="请选择" clearable>
<el-select v-model="form.salesUnitCode" clearable filterable>
<el-option
v-for="dict in unit_code"
:key="dict.value"
@@ -117,7 +120,12 @@
</el-col>
<el-col :span="8">
<el-form-item label="最小单位" prop="minUnitCode">
<el-select v-model="form.minUnitCode" placeholder="请选择" clearable>
<el-select
v-model="form.minUnitCode"
clearable
filterable
:disabled="form.isEditInfoDisable === 1 || form.isEditInfoDisable === 2"
>
<el-option
v-for="dict in unit_code"
:key="dict.value"
@@ -131,95 +139,70 @@
<el-row :gutter="24">
<el-col :span="8">
<el-form-item label="包装规格" prop="size">
<el-input v-model="form.size" placeholder="" />
<el-input
v-model="form.size"
clearable
:disabled="form.isEditInfoDisable === 1 || form.isEditInfoDisable === 2"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="拆零比" prop="partPercent">
<el-input-number v-model="form.partPercent" controls-position="right" placeholder="" :min="1"/>
<el-input-number
v-model="form.partPercent"
controls-position="right"
:min="1"
:disabled="form.isEditInfoDisable === 1 || form.isEditInfoDisable === 2"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="产品型号" prop="modelNumber">
<el-input v-model="form.modelNumber" placeholder="" />
<el-input v-model="form.modelNumber" clearable />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="8">
<el-form-item label="批准文号" prop="approvalNumber">
<el-input v-model="form.approvalNumber" placeholder="" />
<el-input v-model="form.approvalNumber" clearable />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="医保编码" prop="ybNo">
<el-input v-model="form.ybNo" placeholder="" />
<el-input v-model="form.ybNo" clearable />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="医药机构目录编码" prop="ybOrgNo" label-width="125px">
<el-input v-model="form.ybOrgNo" placeholder="" />
<el-input v-model="form.ybOrgNo" clearable />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="主要成分" prop="substanceText">
<el-input v-model="form.substanceText" placeholder="" />
<el-input v-model="form.substanceText" clearable />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="警戒线最低值(常规单位)" prop="itemMinQuantity" label-width="180px">
<el-input-number
v-model="form.itemMinQuantity"
placeholder=""
controls-position="right"
:min="0"
/>
<el-input-number v-model="form.itemMinQuantity" controls-position="right" :min="0" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="警戒线最高值(常规单位)" prop="itemMaxQuantity" label-width="180px">
<el-input-number
v-model="form.itemMaxQuantity"
placeholder=""
controls-position="right"
:min="0"
/>
<el-input-number v-model="form.itemMaxQuantity" controls-position="right" :min="0" />
</el-form-item>
</el-col>
<!-- <el-col :span="8">
<el-form-item label="器材版本" prop="version">
<el-input v-model="form.version" placeholder="" />
</el-form-item>
</el-col> -->
</el-row>
<el-row :gutter="24">
<!-- <el-col :span="8">
<el-form-item label="状态" prop="statusEnum">
<el-select
v-model="form.statusEnum"
placeholder="请选择"
clearable
>
<el-option
v-for="dict in statusFlagOptions"
:key="dict.value"
:label="dict.info"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
</el-col> -->
</el-row>
<el-row :gutter="24">
<el-col :span="8">
<el-form-item label="生产厂家" prop="manufacturerText">
<el-input v-model="form.manufacturerText" placeholder="" />
<el-input v-model="form.manufacturerText" clearable />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="供应商" prop="supplyId">
<el-select v-model="form.supplyId" placeholder="" clearable style="width: 150px">
<el-select v-model="form.supplyId" filterable clearable style="width: 150px">
<el-option
v-for="supplier in supplierListOptions"
:key="supplier.value"
@@ -255,7 +238,12 @@
<el-row :gutter="24">
<el-col :span="8">
<el-form-item label="财务类型" prop="itemTypeCode">
<el-select v-model="form.itemTypeCode" clearable>
<el-select
v-model="form.itemTypeCode"
clearable
filterable
:disabled="form.isEditInfoDisable === 1 || form.isEditInfoDisable === 2"
>
<el-option
v-for="category in fin_type_code"
:key="category.value"
@@ -271,7 +259,9 @@
v-model="form.ybType"
placeholder="医保类别"
clearable
filterable
style="width: 240px"
:disabled="form.isEditInfoDisable === 1"
>
<el-option
v-for="dict in med_chrgitm_type"
@@ -284,7 +274,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="适用范围" prop="jurisdiction">
<el-input v-model="form.jurisdiction" placeholder="" />
<el-input v-model="form.jurisdiction" clearable />
</el-form-item>
</el-col>
</el-row>
@@ -293,20 +283,23 @@
<el-form-item label="购入价" prop="purchasePrice">
<el-input
v-model="form.purchasePrice"
placeholder=""
:disabled="false"
:disabled="form.isEditInfoDisable === 1 || form.isEditInfoDisable === 2"
@input="updatePrices"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="零售价" prop="retailPrice">
<el-input v-model="form.retailPrice" placeholder="" :disabled="false" />
<el-input
v-model="form.retailPrice"
clearable
:disabled="form.isEditInfoDisable === 1 || form.isEditInfoDisable === 2"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="最高零售价" prop="maximumRetailPrice">
<el-input v-model="form.maximumRetailPrice" placeholder="" :disabled="false" />
<el-input v-model="form.maximumRetailPrice" clearable :disabled="false" />
</el-form-item>
</el-col>
</el-row>
@@ -317,7 +310,9 @@
v-model="form.chrgitmLv"
placeholder="医保等级"
clearable
filterable
style="width: 240px"
:disabled="form.isEditInfoDisable === 1"
>
<el-option
v-for="dict in chrgitm_lv"
@@ -336,7 +331,7 @@
v-model="form.description"
:autosize="{ minRows: 4, maxRows: 10 }"
type="textarea"
placeholder=""
clearable
/>
</el-form-item>
</el-col>
@@ -376,52 +371,27 @@ const supplierListOptions = ref([]); // 供应商列表
const data = reactive({
form: {},
rules: {
// busNo: [{ required: true, message: "编码不能为空", trigger: "blur" }],
name: [{ required: true, message: '名称不能为空', trigger: 'blur' }],
// pyStr: [{ required: true, message: "拼音不能为空", trigger: "blur" }],
// wbStr: [{ required: true, message: "五笔拼音不能为空", trigger: "blur" }],
categoryCode: [{ required: true, message: '器材分类不能为空', trigger: 'blur' }],
//typeCode: [{ required: true, message: '器材种类不能为空', trigger: 'blur' }],
unitCode: [{ required: true, message: '包装单位不能为空', trigger: 'blur' }],
size: [{ required: true, message: '包装规格不能为空', trigger: 'blur' }],
partPercent: [{ required: true, message: '拆零比不能为空', trigger: 'blur' }],
minUnitCode: [{ required: true, message: '最小使用单位不能为空', trigger: 'blur' }],
// modelNumber: [{ required: true, message: '产品型号不能为空', trigger: 'blur' }],
// hvcmFlag: [
// { required: true, message: "高值器材标志不能为空", trigger: "blur" },
// ],
itemMinQuantity: [{ required: true, message: '警戒线最低值不能为空', trigger: 'blur' }],
itemMaxQuantity: [{ required: true, message: '警戒线最高值不能为空', trigger: 'blur' }],
salesUnitCode: [{ required: true, message: '销售单位不能为空', trigger: 'blur' }],
//approvalNumber: [{ required: true, message: '批准文号不能为空', trigger: 'blur' }],
// ybFlag: [{ required: true, message: "医保标记不能为空", trigger: "blur" }],
// // ybNo: [{ required: true, message: "医保编码不能为空", trigger: "blur" }],
// ybMatchFlag: [
// { required: true, message: "医保对码标记不能为空", trigger: "blur" },
// ],
// statusEnum: [{ required: true, message: "状态不能为空", trigger: "blur" }],
manufacturerId: [{ required: true, message: '生产厂家不能为空', trigger: 'blur' }],
// supplyId: [{ required: true, message: '供应商不能为空', trigger: 'blur' }],
// description: [{ required: true, message: "说明不能为空", trigger: "blur" }],
//jurisdiction: [{ required: true, message: '适用范围不能为空', trigger: 'blur' }],
ruleId: [{ required: true, message: '执行科室不能为空', trigger: 'blur' }],
// version: [{ required: true, message: "器材版本不能为空", trigger: "blur" }],
// substanceText: [{ required: true, message: "主要成分不能为空", trigger: "blur" }],
// allergenFlag: [
// { required: true, message: "过敏标记不能为空", trigger: "blur" },
// ],
// orgId: [{ required: true, message: '提供部门不能为空', trigger: 'blur' }],
locationId: [{ required: true, message: '地点不能为空', trigger: 'blur' }],
purchasePrice: [{ required: true, message: '购入价不能为空', trigger: 'blur' }],
retailPrice: [{ required: true, message: '零售价不能为空', trigger: 'blur' }],
//maximumRetailPrice: [{ required: true, message: '最高零售价不能为空', trigger: 'blur' }],
ybType: [{ required: true, message: '医保类型不能为空', trigger: 'blur' }],
chrgitmLv: [{ required: true, message: '医保等级不能为空', trigger: 'blur' }],
itemTypeCode: [{ required: true, message: '财务类型不能为空', trigger: 'blur' }],
},
});
const { queryParams, form, rules } = toRefs(data);
const { form, rules } = toRefs(data);
const props = defineProps({
item: {
@@ -465,8 +435,8 @@ function show() {
supplierListOptions.value = props.supplierListOptions;
form.value.partPercent = 1;
form.value.itemTypeCode = '2005';
form.value.ybType = '8';
console.log(props, '22222', title.value, props.deviceCategories);
form.value.ybType = '08';
form.value.size = '-';
getDeptTree();
getLocationTree();
visible.value = true;
@@ -476,21 +446,16 @@ function setValue(row) {
form.value = {
name: formatValue(row.consumableName), //医疗服务项目名称
ybNo: formatValue(row.medicalCatalogCode), // 医保编码
// modelNumber: formatValue(row.productModel), // 产品型号
modelNumber: formatValue(row.specification), // 规格
manufacturerText: formatValue(row.manufacturerName), // 厂家名称
partPercent: 1,
itemMinQuantity: formatValue(row.itemMinQuantity), // 警戒线最低值
itemMaxQuantity: formatValue(row.itemMaxQuantity), // 警戒线最高值
// chrgitmLv: formatValue(
// row.insuranceClass == '甲' ? '1' : row.insuranceClass == '乙' ? '2' : '3'
// ), // 医保等级
};
}
/** 查询部门下拉树结构 */
function getDeptTree() {
deptTreeSelect().then((response) => {
console.log(response, 'response查询部门下拉树结构');
deptOptions.value = response.data.records;
});
}
@@ -538,13 +503,11 @@ function reset() {
ybNo: undefined, // 医保编码
ybOrgNo: undefined, //医药机构目录编码
ybMatchFlag: undefined, // 医保对码标记
// statusEnum: undefined, // 状态(包括 1预置2启用3停用
manufacturerId: undefined, // 厂家编码
supplyId: undefined, // 供应商编码
description: undefined, // 说明
jurisdiction: undefined, // 适用范围
ruleId: undefined, // 执行科室
// version: undefined, // 器材版本
substanceText: undefined, // 主要成分
allergenFlag: undefined, // 过敏标记
orgId: undefined, // 科室ID
@@ -567,7 +530,6 @@ function submitForm() {
form.value.ybFlag ? (form.value.ybFlag = 1) : (form.value.ybFlag = 0);
form.value.ybMatchFlag ? (form.value.ybMatchFlag = 1) : (form.value.ybMatchFlag = 0);
form.value.allergenFlag ? (form.value.allergenFlag = 1) : (form.value.allergenFlag = 0);
console.log(form.value, 'form.value');
if (form.value.id != undefined) {
editDevice(form.value).then((response) => {
// 触发自定义事件,并传递数据给父组件

View File

@@ -5,49 +5,81 @@
<el-col :span="4" :xs="24">
<div class="head-title">器材目录</div>
<div class="head-container">
<el-tree :data="deviceCategories" :props="{ label: 'info', children: 'children' }"
:expand-on-click-node="false" :filter-node-method="filterNode" ref="treeRef" node-key="id" highlight-current
default-expand-all @node-click="handleNodeClick" />
<el-tree
:data="deviceCategories"
:props="{ label: 'info', children: 'children' }"
:expand-on-click-node="false"
:filter-node-method="filterNode"
ref="treeRef"
node-key="id"
highlight-current
default-expand-all
@node-click="handleNodeClick"
/>
</div>
</el-col>
<!--器材目录-->
<el-col :span="20" :xs="24">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
<el-form
:model="queryParams"
ref="queryRef"
:inline="true"
v-show="showSearch"
label-width="68px"
>
<el-row :gutter="24">
<!-- <el-col :span="6"> -->
<el-form-item label="项目名" prop="searchKey" label-width="55">
<el-input v-model="queryParams.searchKey" placeholder="品名/商品名/英文品名/编码/拼音" clearable style="width: 220px"
@keyup.enter="handleQuery" />
<el-input
v-model="queryParams.searchKey"
placeholder="品名/商品名/英文品名/编码/拼音"
clearable
style="width: 220px"
@keyup.enter="handleQuery"
/>
</el-form-item>
<!-- </el-col> -->
<!-- <el-col :span="5"> -->
<el-form-item label="状态" prop="statusEnum" label-width="50">
<el-select v-model="queryParams.statusEnum" clearable>
<el-option v-for="status in statusFlagOptions" :key="status.value" :label="status.info"
:value="status.value" />
<el-option
v-for="status in statusFlagOptions"
:key="status.value"
:label="status.info"
:value="status.value"
/>
</el-select>
</el-form-item>
<!-- </el-col> -->
<!-- <el-col :span="5"> -->
<el-form-item label="医保是否对码" prop="ybMatchFlag" label-width="100">
<el-select v-model="queryParams.ybMatchFlag" placeholder="" clearable>
<el-option v-for="item in statusYBWeatherOptions" :key="item.value" :label="item.info"
:value="item.value" />
<el-option
v-for="item in statusYBWeatherOptions"
:key="item.value"
:label="item.info"
:value="item.value"
/>
</el-select>
</el-form-item>
<!-- </el-col> -->
</el-row>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="openAddDevice">添加新项目</el-button>
<el-button type="primary" plain icon="Plus" @click="openAddDevice"
>添加新项目</el-button
>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Remove" :disabled="multiple" @click="handleClose">停用</el-button>
<el-button type="danger" plain icon="Remove" :disabled="multiple" @click="handleClose"
>停用</el-button
>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="CirclePlus" :disabled="multiple" @click="handleStart">启用</el-button>
<el-button
type="success"
plain
icon="CirclePlus"
:disabled="multiple"
@click="handleStart"
>启用</el-button
>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="Upload" @click="handleImport">导入</el-button>
@@ -66,50 +98,170 @@
</el-col> -->
</el-row>
<el-table
v-loading="loading"
:data="deviceList"
@selection-change="handleSelectionChange"
width="90%"
>
<el-table v-loading="loading" :data="deviceList" @selection-change="handleSelectionChange" width="90%" border resizable-column>
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="编码" align="center" key="busNo" prop="busNo" :show-overflow-tooltip="true" />
<el-table-column label="器材名称" align="center" key="name" prop="name" :show-overflow-tooltip="true" />
<el-table-column label="拼音" align="center" key="pyStr" prop="pyStr" :show-overflow-tooltip="true" />
<el-table-column label="器材分类" align="center" key="categoryCode_dictText" prop="categoryCode_dictText"
:show-overflow-tooltip="true" width="100" />
<el-table-column label="器材种类" align="center" key="typeCode_dictText" prop="typeCode_dictText"
:show-overflow-tooltip="true" width="50" />
<el-table-column label="包装单位" align="center" key="unitCode_dictText" prop="unitCode_dictText"
:show-overflow-tooltip="true" />
<el-table-column label="包装规格" align="center" key="size" prop="size" :show-overflow-tooltip="true" />
<el-table-column label="拆零比" align="center" key="partPercent" prop="partPercent"
:show-overflow-tooltip="true">
<el-table-column
label="编码"
align="center"
key="busNo"
prop="busNo"
:show-overflow-tooltip="true"
width="200"
/>
<el-table-column
label="器材名称"
align="center"
key="name"
prop="name"
:show-overflow-tooltip="true"
width="200"
/>
<!-- <el-table-column
label="拼音"
align="center"
key="pyStr"
prop="pyStr"
:show-overflow-tooltip="true"
/> -->
<el-table-column
label="器材分类"
align="center"
key="categoryCode_dictText"
prop="categoryCode_dictText"
:show-overflow-tooltip="true"
width="100"
/>
<!-- <el-table-column
label="器材种类"
align="center"
key="typeCode_dictText"
prop="typeCode_dictText"
:show-overflow-tooltip="true"
width="50"
/> -->
<el-table-column
label="包装单位"
align="center"
key="unitCode_dictText"
prop="unitCode_dictText"
:show-overflow-tooltip="true"
width="100"
/>
<el-table-column
label="包装规格"
align="center"
key="size"
prop="size"
width="200"
:show-overflow-tooltip="true"
/>
<el-table-column
label="拆零比"
align="center"
key="partPercent"
prop="partPercent"
:show-overflow-tooltip="true"
>
<template #default="scope">
{{ scope.row.partPercent !== null && scope.row.partPercent !== undefined ? scope.row.partPercent : 1 }}
{{
scope.row.partPercent !== null && scope.row.partPercent !== undefined
? scope.row.partPercent
: 1
}}
</template>
</el-table-column>
<el-table-column label="最小使用单位" align="center" key="minUnitCode_dictText" prop="minUnitCode_dictText"
:show-overflow-tooltip="true" />
<el-table-column label="所属科室" align="center" key="orgId_dictText" prop="orgId_dictText"
:show-overflow-tooltip="true" />
<el-table-column label="所在位置" align="center" key="locationId_dictText" prop="locationId_dictText"
:show-overflow-tooltip="true" />
<el-table-column label="产品型号" align="center" key="modelNumber" prop="modelNumber"
:show-overflow-tooltip="true" />
<el-table-column label="高值器材标志" align="center" key="hvcmFlag_enumText" prop="hvcmFlag_enumText"
:show-overflow-tooltip="true" />
<el-table-column
label="最小使用单位"
align="center"
key="minUnitCode_dictText"
prop="minUnitCode_dictText"
:show-overflow-tooltip="true"
width="120"
/>
<!-- <el-table-column
label="所属科室"
align="center"
key="orgId_dictText"
prop="orgId_dictText"
:show-overflow-tooltip="true"
/>
<el-table-column
label="所在位置"
align="center"
key="locationId_dictText"
prop="locationId_dictText"
:show-overflow-tooltip="true"
/> -->
<!-- <el-table-column
label="产品型号"
align="center"
key="modelNumber"
prop="modelNumber"
:show-overflow-tooltip="true"
/> -->
<el-table-column label="销售单位" align="center" key="salesUnitCode_dictText" prop="salesUnitCode_dictText"
:show-overflow-tooltip="true" width="100" />
<el-table-column label="批准文号" align="center" key="approvalNumber" prop="approvalNumber"
:show-overflow-tooltip="true" />
<el-table-column label="医保标记" align="center" key="ybFlag_enumText" prop="ybFlag_enumText"
:show-overflow-tooltip="true" width="110" />
<el-table-column label="医保编码" align="center" key="ybNo" prop="ybNo" :show-overflow-tooltip="true"
width="110" />
<el-table-column label="医药机构目录编码" align="center" key="ybOrgNo" prop="ybOrgNo" :show-overflow-tooltip="true"
width="130" />
<el-table-column label="医保对码标记" align="center" key="ybMatchFlag_enumText" prop="ybMatchFlag_enumText"
:show-overflow-tooltip="true" width="105" />
<el-table-column label="状态" align="center" key="statusEnum_enumText" prop="statusEnum_enumText"
:show-overflow-tooltip="true" width="90" />
<el-table-column
label="销售单位"
align="center"
key="salesUnitCode_dictText"
prop="salesUnitCode_dictText"
:show-overflow-tooltip="true"
width="100"
/>
<!-- <el-table-column
label="批准文号"
align="center"
key="approvalNumber"
prop="approvalNumber"
:show-overflow-tooltip="true"
/> -->
<!-- <el-table-column
label="医保标记"
align="center"
key="ybFlag_enumText"
prop="ybFlag_enumText"
:show-overflow-tooltip="true"
width="110"
/> -->
<el-table-column
label="医保编码"
align="center"
key="ybNo"
prop="ybNo"
:show-overflow-tooltip="true"
width="110"
/>
<el-table-column
label="医药机构目录编码"
align="center"
key="ybOrgNo"
prop="ybOrgNo"
:show-overflow-tooltip="true"
width="130"
/>
<!-- <el-table-column
label="医保对码标记"
align="center"
key="ybMatchFlag_enumText"
prop="ybMatchFlag_enumText"
:show-overflow-tooltip="true"
width="105"
/> -->
<el-table-column
label="状态"
align="center"
key="statusEnum_enumText"
prop="statusEnum_enumText"
:show-overflow-tooltip="true"
width="90"
/>
<!-- <el-table-column
label="生产厂家"
align="center"
@@ -118,59 +270,165 @@
:show-overflow-tooltip="true"
width="90"
/> -->
<el-table-column label="生产厂家" align="center" key="manufacturerText" prop="manufacturerText"
:show-overflow-tooltip="true" width="90" />
<el-table-column label="供应商" align="center" key="supplyId_dictText" prop="supplyId_dictText"
:show-overflow-tooltip="true" width="110" />
<el-table-column label="说明" align="center" key="description" prop="description"
:show-overflow-tooltip="true" />
<el-table-column label="适用范围" align="center" key="jurisdiction" prop="jurisdiction"
:show-overflow-tooltip="true" width="120" />
<el-table-column label="器材版本" align="center" key="version" prop="version" :show-overflow-tooltip="true"
width="120" />
<el-table-column label="主要成分" align="center" key="substanceText" prop="substanceText"
:show-overflow-tooltip="true" />
<el-table-column label="过敏标记" align="center" key="allergenFlag_enumText" prop="allergenFlag_enumText"
:show-overflow-tooltip="true" width="90" />
<el-table-column label="售价" align="center" key="retailPrice" prop="retailPrice" :show-overflow-tooltip="true"
width="90" />
<el-table-column label="财务类别" align="center" key="itemTypeCode_dictText" prop="itemTypeCode_dictText"
:show-overflow-tooltip="true" width="90" />
<el-table-column label="医保类别" align="center" key="ybType_dictText" prop="ybType_dictText"
:show-overflow-tooltip="true" width="90" />
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width" fixed="right">
<el-table-column
label="生产厂家"
align="center"
key="manufacturerText"
prop="manufacturerText"
:show-overflow-tooltip="true"
width="200"
/>
<!-- <el-table-column
label="供应商"
align="center"
key="supplyId_dictText"
prop="supplyId_dictText"
:show-overflow-tooltip="true"
width="110"
/>
<el-table-column
label="说明"
align="center"
key="description"
prop="description"
:show-overflow-tooltip="true"
/>
<el-table-column
label="适用范围"
align="center"
key="jurisdiction"
prop="jurisdiction"
:show-overflow-tooltip="true"
width="120"
/>
<el-table-column
label="器材版本"
align="center"
key="version"
prop="version"
:show-overflow-tooltip="true"
width="120"
/>
<el-table-column
label="主要成分"
align="center"
key="substanceText"
prop="substanceText"
:show-overflow-tooltip="true"
/> -->
<!-- <el-table-column
label="过敏标记"
align="center"
key="allergenFlag_enumText"
prop="allergenFlag_enumText"
:show-overflow-tooltip="true"
width="90"
/> -->
<el-table-column
label="售价"
align="center"
key="retailPrice"
prop="retailPrice"
:show-overflow-tooltip="true"
width="90"
/>
<el-table-column
label="财务类别"
align="center"
key="itemTypeCode_dictText"
prop="itemTypeCode_dictText"
:show-overflow-tooltip="true"
width="90"
/>
<el-table-column
label="高值器材标志"
align="center"
key="hvcmFlag_enumText"
prop="hvcmFlag_enumText"
:show-overflow-tooltip="true"
width="120"
/>
<!-- <el-table-column
label="医保类别"
align="center"
key="ybType_dictText"
prop="ybType_dictText"
:show-overflow-tooltip="true"
width="90"
/> -->
<el-table-column
label="操作"
align="center"
width="150"
class-name="small-padding fixed-width"
fixed="right"
>
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="openEditDevice(scope.row)">编辑</el-button>
<el-button link type="primary" icon="Edit" @click="openEditDevice(scope.row)">
编辑
</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize" @pagination="getList" />
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</el-col>
</el-row>
<device-dialog ref="deviceRef" :title="title" :item="currentData" :currentCategoryEnum="currentCategoryEnum"
:deviceCategories="deviceCategorieList" :statusFlagOptions="statusFlagOptions"
:supplierListOptions="supplierListOptions" @submit="getList()" @ybDialog="() => {
proxy.$refs['deviceYbRef'].show()
}" />
<DeviceYbDialog ref="deviceYbRef" @selectDevice="
(row) => {
proxy.$refs['deviceRef'].setValue(row);
}
" />
<device-dialog
ref="deviceRef"
:title="title"
:item="currentData"
:currentCategoryEnum="currentCategoryEnum"
:deviceCategories="deviceCategorieList"
:statusFlagOptions="statusFlagOptions"
:supplierListOptions="supplierListOptions"
@submit="getList()"
@ybDialog="
() => {
proxy.$refs['deviceYbRef'].show();
}
"
/>
<DeviceYbDialog
ref="deviceYbRef"
@selectDevice="
(row) => {
proxy.$refs['deviceRef'].setValue(row);
}
"
/>
<!-- 器材目录导入对话框 -->
<el-dialog :title="upload.title" v-model="upload.open" width="400px" append-to-body>
<el-upload ref="uploadRef" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
:on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
<el-upload
ref="uploadRef"
:limit="1"
accept=".xlsx, .xls"
:headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport"
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
:auto-upload="false"
drag
>
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<template #tip>
<div class="el-upload__tip text-center">
<span>仅允许导入xlsxlsx格式文件</span>
<el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline"
@click="importTemplate">下载模板</el-link>
<el-link
type="primary"
:underline="false"
style="font-size: 12px; vertical-align: baseline"
@click="importTemplate"
>下载模板</el-link
>
</div>
</template>
</el-upload>
@@ -185,17 +443,18 @@
</template>
<script setup name="Device">
import { getToken } from "@/utils/auth";
import { getToken } from '@/utils/auth';
import {
getDeviceList,
stopDevice,
startDevice,
getDiseaseTreatmentInit,
getDeviceOne,
} from "./components/device";
import deviceDialog from "./components/deviceDialog";
import DeviceYbDialog from "./components/deviceYbDialog";
import { nextTick } from "vue";
validateEditDevice,
} from './components/device';
import deviceDialog from './components/deviceDialog';
import DeviceYbDialog from './components/deviceYbDialog';
import { nextTick } from 'vue';
const { proxy } = getCurrentInstance();
@@ -206,7 +465,7 @@ const ids = ref([]); // 存储选择的行数据
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const title = ref("");
const title = ref('');
const deviceCategories = ref(undefined);
const deviceCategorieList = ref(undefined);
const statusFlagOptions = ref(undefined);
@@ -216,22 +475,22 @@ const supplierListOptions = ref(undefined);
const currentData = ref({});
// 使用 ref 定义当前查看器材数据
const viewData = ref({});
const currentCategoryEnum = ref("");
const currentCategoryEnum = ref('');
/*** 器材目录导入参数 */
const upload = reactive({
// 是否显示弹出层
open: false,
// 弹出层标题
title: "",
title: '',
// 是否禁用上传
isUploading: false,
// 是否更新已经存在的数据
updateSupport: 0,
// 设置上传的请求头部
headers: { Authorization: "Bearer " + getToken() },
headers: { Authorization: 'Bearer ' + getToken() },
// 上传的地址
url: import.meta.env.VITE_APP_BASE_API + "/data-dictionary/device/import-data"
url: import.meta.env.VITE_APP_BASE_API + '/data-dictionary/device/import-data',
});
const data = reactive({
@@ -260,15 +519,15 @@ const filterNode = (value, data) => {
/** 器材目录分类查询下拉树结构 */
function getDiseaseTreatmentList() {
getDiseaseTreatmentInit().then((response) => {
console.log(response, "response器材目录分类查询下拉树结构");
deviceCategories.value = JSON.parse(JSON.stringify(response.data.deviceCategories)).sort((a, b) => {
return parseInt(a.value) - parseInt(b.value);
});
deviceCategories.value.push({ info: "全部", value: "" });
deviceCategories.value = JSON.parse(JSON.stringify(response.data.deviceCategories)).sort(
(a, b) => {
return parseInt(a.value) - parseInt(b.value);
}
);
deviceCategories.value.push({ info: '全部', value: '' });
deviceCategorieList.value = response.data.deviceCategories.sort((a, b) => {
return parseInt(a.value) - parseInt(b.value);
});
console.log(deviceCategorieList.value, "deviceCategorieList");
statusFlagOptions.value = response.data.statusFlagOptions;
statusYBWeatherOptions.value = response.data.statusYBWeatherOptions;
supplierListOptions.value = response.data.supplierListOptions;
@@ -281,7 +540,6 @@ function getList() {
loading.value = false;
deviceList.value = res.data.records;
total.value = res.data.total;
console.log(deviceList.value, "getList", total.value);
});
}
/** 节点单击事件 */
@@ -301,34 +559,34 @@ function handleStart() {
const stardIds = ids.value;
// selectedData
proxy.$modal
.confirm("是否确定启用数据!")
.confirm('是否确定启用数据!')
.then(function () {
return startDevice(stardIds);
})
.then(() => {
getList();
proxy.$modal.msgSuccess("启用成功");
proxy.$modal.msgSuccess('启用成功');
})
.catch(() => { });
.catch(() => {});
}
/** 停用按钮操作 */
function handleClose() {
const stopIds = ids.value;
proxy.$modal
.confirm("是否确认停用数据!")
.confirm('是否确认停用数据!')
.then(function () {
return stopDevice(stopIds);
})
.then(() => {
getList();
proxy.$modal.msgSuccess("停用成功");
proxy.$modal.msgSuccess('停用成功');
})
.catch(() => { });
.catch(() => {});
}
/** 导出按钮操作 */
function handleExport() {
proxy.download(
"system/user/export",
'system/user/export',
{
...queryParams.value,
},
@@ -343,7 +601,11 @@ function handleImport() {
}
/** 下载模板操作 */
function importTemplate() {
proxy.download('/data-dictionary/device/import-template', {}, `device_template_${new Date().getTime()}.xlsx`);
proxy.download(
'/data-dictionary/device/import-template',
{},
`device_template_${new Date().getTime()}.xlsx`
);
}
/**文件上传中处理 */
const handleFileUploadProgress = (event, file, fileList) => {
@@ -356,8 +618,8 @@ const handleFileSuccess = (response, file, fileList) => {
proxy.$refs['uploadRef'].handleRemove(file);
proxy.$alert(
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
response.msg +
'</div>',
response.msg +
'</div>',
'导入结果',
{ dangerouslyUseHTMLString: true }
);
@@ -370,7 +632,6 @@ function submitFileForm() {
/** 选择条数 */
function handleSelectionChange(selection) {
console.log(selection, "selection");
// selectedData.value = selection.map((item) => ({ ...item })); // 存储选择的行数据
ids.value = selection.map((item) => item.id);
single.value = selection.length != 1;
@@ -379,22 +640,29 @@ function handleSelectionChange(selection) {
/** 打开新增弹窗 */
function openAddDevice() {
// if (!currentCategoryEnum.value) {
// return proxy.$modal.msgError("请选择器材目录分类");
// }
console.log("打开新增弹窗");
title.value = "新增";
title.value = '新增';
nextTick(() => {
proxy.$refs.deviceRef.show();
});
}
const isEditInfoDisable = ref(0);
/** 打开编辑弹窗 */
function openEditDevice(row) {
currentData.value = {};
console.log("打开编辑弹窗");
validateEditDevice(row.id).then((res) => {
// res.data == 1 医生开过该耗材,不可编辑
// res.data == 2 该耗材已经入库过,不可编辑
isEditInfoDisable.value = res.data;
getDeviceInfo(row);
});
}
// 根据耗材id 查询耗材信息
function getDeviceInfo(row) {
getDeviceOne(row.id).then((response) => {
console.log(response, "currentDataform");
currentData.value = response.data;
currentData.value = {
...response.data,
// 禁用编辑
isEditInfoDisable: isEditInfoDisable.value,
};
if (currentData.value) {
currentData.value.hvcmFlag == 1
? (currentData.value.hvcmFlag = true)
@@ -409,9 +677,9 @@ function openEditDevice(row) {
? (currentData.value.allergenFlag = true)
: (currentData.value.allergenFlag = false);
}
title.value = "编辑";
title.value = '编辑';
nextTick(() => {
proxy.$refs["deviceRef"].edit();
proxy.$refs['deviceRef'].edit();
});
getList();
});

View File

@@ -74,7 +74,12 @@
</el-col>
<el-col :span="8">
<el-form-item label="目录分类" prop="categoryCode">
<el-select v-model="form.categoryCode" clearable filterable :disabled="false">
<el-select
v-model="form.categoryCode"
clearable
filterable
:disabled="form.isEditInfoDisable === 1"
>
<el-option
v-for="category in activity_category_code"
:key="category.value"
@@ -96,18 +101,6 @@
</el-select>
</el-form-item>
</el-col>
<!-- <el-col :span="8">
<el-form-item label="状态" prop="statusEnum">
<el-select v-model="form.statusEnum" clearable>
<el-option
v-for="status in statusFlagOptions"
:key="status.value"
:label="status.info"
:value="status.value"
/>
</el-select>
</el-form-item>
</el-col> -->
</el-row>
<el-row :gutter="24">
<el-col :span="8">
@@ -136,6 +129,7 @@
clearable
filterable
style="width: 240px"
:disabled="form.isEditInfoDisable === 1"
>
<el-option
v-for="dict in med_chrgitm_type"
@@ -164,7 +158,7 @@
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="所需标本" prop="specimenCode">
<el-select v-model="form.specimenCode" clearable filterable>
@@ -181,7 +175,13 @@
<el-row :gutter="24">
<el-col :span="8">
<el-form-item label="医保等级" prop="chrgitmLv">
<el-select v-model="form.chrgitmLv" placeholder="" clearable filterable>
<el-select
v-model="form.chrgitmLv"
placeholder=""
clearable
filterable
:disabled="form.isEditInfoDisable === 1"
>
<el-option
v-for="item in chrgitm_lv"
:key="item.value"
@@ -191,18 +191,7 @@
</el-select>
</el-form-item>
</el-col>
<!-- <el-col :span="8">
<el-form-item label="执行科室" prop="ruleId">
<el-select v-model="form.ruleId" placeholder="" clearable>
<el-option
v-for="item in exeOrganizations"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col> -->
<el-col :span="8">
<el-form-item label="使用单位" prop="permittedUnitCode">
<el-select v-model="form.permittedUnitCode" clearable filterable>
@@ -217,7 +206,12 @@
</el-col>
<el-col :span="8">
<el-form-item label="财务类型" prop="itemTypeCode">
<el-select v-model="form.itemTypeCode" clearable filterable>
<el-select
v-model="form.itemTypeCode"
clearable
filterable
:disabled="form.isEditInfoDisable === 1"
>
<el-option
v-for="category in fin_type_code"
:key="category.value"
@@ -229,22 +223,13 @@
</el-col>
</el-row>
<el-row :gutter="24">
<!-- <el-col :span="8">
<el-form-item label="购入价" prop="purchasePrice">
<el-input
v-model="form.purchasePrice"
placeholder=""
:disabled="form.id != undefined"
/>
</el-form-item>
</el-col> -->
<el-col :span="8">
<el-form-item label="零售价" prop="retailPrice">
<el-input
v-model="form.retailPrice"
placeholder=""
:disabled="false"
@input="updatePrices"
:disabled="form.isEditInfoDisable === 1"
/>
</el-form-item>
</el-col>
@@ -268,14 +253,34 @@
<el-row :gutter="24">
<el-col :span="8">
<el-form-item label="诊疗子项">
<el-select v-model="item.adviceDefinitionId" placeholder="诊疗子项" filterable>
<el-option
v-for="item in diagnosisTreatmentList"
:key="item.id"
:label="item.name"
:value="item.id"
<div v-if="form.isEditInfoDisable === 0" style="position: relative">
<PopoverList @search="handleSearch" :width="1000" :modelValue="item.name">
<template #popover-content="{}">
<medicineList
@selectRow="(row) => selectRow(row, index)"
:searchKey="medicineSearchKey"
:shouldLoadData="isFirstOpen"
:preloadedData="diagnosisTreatmentList"
/>
</template>
</PopoverList>
<!-- 清空按钮 -->
<el-button
v-if="item.name && item.name !== ''"
type="text"
icon="Delete"
size="small"
@click.stop="clearItem(index)"
style="
position: absolute;
right: 3px;
top: 50%;
transform: translateY(-50%);
color: #909399;
"
/>
</el-select>
</div>
<span v-else>{{ item.name || '' }}</span>
</el-form-item>
</el-col>
<el-col :span="8">
@@ -285,11 +290,22 @@
controls-position="right"
:min="1"
:max="999"
@change="calculateTotalPrice"
:disabled="form.isEditInfoDisable === 1"
/>
</el-form-item>
</el-col>
<el-col :span="8" style="display: flex; align-items: center; padding-bottom: 15px">
<el-button @click="addItem" circle type="priamry" size="small" plain icon="Plus" />
<!-- <div style="margin-right: 20px; font-weight: bold; color: #333">
小计: ¥{{
item.retailPrice && item.childrenRequestNum
? (parseFloat(item.retailPrice) * parseInt(item.childrenRequestNum)).toFixed(
2
)
: '0.00'
}}
</div> -->
<el-button @click="addItem" circle type="primary" size="small" plain icon="Plus" />
<el-button
@click="removeItem(index)"
circle
@@ -313,6 +329,11 @@
/>
</el-form-item>
</el-col>
<el-col :span="8" style="display: flex; align-items: center; justify-content: flex-start">
<div style="font-size: 18px; font-weight: bold; color: #276ef1">
总价: ¥{{ totalPrice }}
</div>
</el-col>
</el-row>
</el-form>
<template #footer v-if="title != '查看'">
@@ -334,7 +355,10 @@ import {
bodyTreeSelect,
locationTreeSelect,
} from './diagnosistreatment';
import PopoverList from '@/components/OpenHis/popoverList/index.vue';
import medicineList from './medicineList.vue';
import MedicineList from '../components/medicineList.vue';
import { getCurrentInstance, nextTick, watch } from 'vue';
const { proxy } = getCurrentInstance();
const { unit_code, med_chrgitm_type, fin_type_code, activity_category_code, chrgitm_lv } =
proxy.useDict(
@@ -348,7 +372,6 @@ const { unit_code, med_chrgitm_type, fin_type_code, activity_category_code, chrg
const title = ref('');
const visible = ref(false);
const emits = defineEmits(['submit']); // 声明自定义事件
const categoryCode = ref('');
const deptOptions = ref(undefined); // 部门树选项
const bodyOptions = ref(undefined); // 身体部位树选项
const locationOptions = ref(undefined); // 地点树选项
@@ -363,26 +386,16 @@ const data = reactive({
rules: {
busNo: [{ required: true, message: "编码不能为空", trigger: "blur" }],
name: [{ required: true, message: '名称不能为空', trigger: 'blur' }],
// statusEnum: [{ required: true, message: "状态不能为空", trigger: "blur" }],
categoryCode: [{ required: true, message: '诊疗目录不能为空', trigger: 'blur' }],
// typeEnum: [{ required: true, message: '器材种类不能为空', trigger: 'blur' }],
permittedUnitCode: [{ required: true, message: '使用单位不能为空', trigger: 'blur' }],
// ybFlag: [{ required: true, message: "医保标记不能为空", trigger: "blur" }],
// ybMatchFlag: [
// { required: true, message: "医保对码标记不能为空", trigger: "blur" },
// ],
// purchasePrice: [
// { required: true, message: "购入价不能为空", trigger: "blur" },
// ],
retailPrice: [{ required: true, message: '零售价不能为空', trigger: 'blur' }],
// maximumRetailPrice: [{ required: true, message: '最高零售价不能为空', trigger: 'blur' }],
ybType: [{ required: true, message: '医保类型不能为空', trigger: 'blur' }],
chrgitmLv: [{ required: true, message: '医保等级不能为空', trigger: 'blur' }],
itemTypeCode: [{ required: true, message: '财务类型不能为空', trigger: 'blur' }],
},
});
const { queryParams, form, rules } = toRefs(data);
const { form, rules } = toRefs(data);
const props = defineProps({
item: {
@@ -416,17 +429,45 @@ const props = defineProps({
});
// 表单数组,初始一条记录
const treatmentItems = ref([{ adviceDefinitionId: '', childrenRequestNum: 1 }]);
const treatmentItems = ref([
{ adviceDefinitionId: '', childrenRequestNum: 1, name: '', retailPrice: 0 },
]);
const medicineSearchKey = ref('');
const isFirstOpen = ref(true); // 标记是否首次打开弹窗
const totalPrice = ref('0.00'); // 总价
// 计算总价
function calculateTotalPrice() {
try {
let sum = 0;
treatmentItems.value.forEach((item) => {
if (item.adviceDefinitionId && item.retailPrice && item.childrenRequestNum) {
const price = parseFloat(item.retailPrice) || 0;
const count = parseInt(item.childrenRequestNum) || 0;
sum += price * count;
}
});
totalPrice.value = sum.toFixed(2);
} catch (error) {
totalPrice.value = '0.00';
proxy.$modal.msgWarning('价格计算过程中遇到错误,请检查输入数据');
}
}
// 添加表单项
function addItem() {
treatmentItems.value.push({ adviceDefinitionId: '', childrenRequestNum: 1 });
treatmentItems.value.push({ adviceDefinitionId: '', childrenRequestNum: 1, retailPrice: 0 });
// 使用nextTick确保DOM更新后再计算
nextTick(() => {
calculateTotalPrice();
});
}
// 删除表单项
function removeItem(index) {
if (treatmentItems.value.length > 1) {
treatmentItems.value.splice(index, 1);
calculateTotalPrice();
}
}
@@ -438,9 +479,10 @@ function handleImportYb() {
function show() {
reset();
getLocationTree();
getItemList();
getBodyTree();
getDeptTree();
getItemList();
title.value = '';
title.value = props.title;
diagnosisCategoryOptions.value = props.diagnosisCategoryOptions;
@@ -457,9 +499,6 @@ function setValue(row) {
ybNo: formatValue(row.medicalCatalogCode), // 医保编码
busNo: formatValue(row.medicalCatalogCode), // 项目编码使用医保编码
categoryCode: props.currentCategoryEnum,
// chrgitmLv: formatValue(
// row.insuranceClass == '甲' ? '1' : row.insuranceClass == '乙' ? '2' : '3'
// ), // 医保等级
};
}
@@ -467,16 +506,24 @@ function setValue(row) {
function edit() {
reset();
getLocationTree();
getItemList();
getBodyTree();
getDeptTree();
getItemList();
title.value = '';
title.value = props.title;
form.value = props.item;
form.value.chrgitmLv = form.value.chrgitmLv ? form.value.chrgitmLv.toString() : undefined;
treatmentItems.value = props.item.childrenJson
? JSON.parse(props.item.childrenJson)
: [{ adviceDefinitionId: '', childrenRequestNum: 1 }];
// 处理子项数据确保包含retailPrice字段
if (props.item.childrenJson) {
const parsedItems = JSON.parse(props.item.childrenJson);
treatmentItems.value = parsedItems.map((item) => ({
...item,
retailPrice: item.retailPrice || 0,
}));
} else {
treatmentItems.value = [{ adviceDefinitionId: '', childrenRequestNum: 1, retailPrice: 0 }];
}
form.value.permittedUnitCode = form.value.permittedUnitCode
? form.value.permittedUnitCode.toString()
: undefined;
@@ -485,6 +532,11 @@ function edit() {
exeOrganizations.value = props.exeOrganizations;
typeEnumOptions.value = props.typeEnumOptions;
visible.value = true;
// 编辑时计算初始总价
nextTick(() => {
calculateTotalPrice();
});
}
/** 重置操作表单 */
function reset() {
@@ -514,7 +566,8 @@ function reset() {
descriptionText: undefined, // 说明
chrgitmLv: undefined, //医保等级
};
treatmentItems.value = [{ adviceDefinitionId: '', childrenRequestNum: 1 }];
treatmentItems.value = [{ adviceDefinitionId: '', childrenRequestNum: 1, retailPrice: 0 }];
totalPrice.value = '0.00';
proxy.resetForm('diagnosisTreatmentRef');
}
@@ -552,51 +605,74 @@ function submitForm() {
/** 查询部门下拉树结构 */
function getDeptTree() {
deptTreeSelect().then((response) => {
console.log(response, 'response查询部门下拉树结构');
deptOptions.value = response.data.records;
});
}
/** 查询身体部位拉树结构 */
function getBodyTree() {
bodyTreeSelect().then((response) => {
console.log(response, 'response查询身体部位下拉树结构');
bodyOptions.value = response.data.records;
});
}
/** 查询地点下拉树结构 */
function getLocationTree() {
locationTreeSelect({ formList: '8,4,10' }).then((response) => {
console.log(response, 'response查询部门下拉树结构');
locationOptions.value = response.data.records;
});
}
// 获取诊疗子项列表,只筛出无子项的数据
function getItemList() {
getDiagnosisTreatmentList({ statusEnum: 2, pageSize: 1000, pageNo: 1 }).then((response) => {
diagnosisTreatmentList.value = response.data.records.filter((item) => {
return item.childrenJson == null;
});
});
}
/** 取消按钮 */
function cancel() {
visible.value = false;
reset();
}
// 获取诊疗子项列表,只筛出无子项的数据
function getItemList() {
getDiagnosisTreatmentList({ statusEnum: 2, pageSize: 1000, pageNo: 1 }).then((res) => {
diagnosisTreatmentList.value = res.data.records.filter((item) => {
return item.childrenJson == null;
});
});
}
function formatValue(str) {
if (str === null || str === undefined || str === '' || str === 'null') {
return undefined;
}
return str;
}
function handleSearch(value) {
medicineSearchKey.value = value;
}
function selectRow(row, index) {
treatmentItems.value[index].name = row.name;
treatmentItems.value[index].adviceDefinitionId = row.id;
treatmentItems.value[index].retailPrice = row.retailPrice || 0;
calculateTotalPrice();
}
// 清空诊疗子项
function clearItem(index) {
treatmentItems.value[index].name = '';
treatmentItems.value[index].adviceDefinitionId = '';
treatmentItems.value[index].retailPrice = 0;
calculateTotalPrice();
}
// 在这里可以根据购入价来更新零售价
function updatePrices(value) {
form.value.maximumRetailPrice = form.value.retailPrice;
}
// 监听treatmentItems变化实时更新总价
watch(
() => treatmentItems.value,
() => {
calculateTotalPrice();
},
{ deep: true }
);
defineExpose({
show,
edit,

View File

@@ -1,99 +1,106 @@
import request from '@/utils/request'
import request from '@/utils/request';
// 查询诊疗目录列表
export function getDiagnosisTreatmentList(query) {
return request({
export function getDiagnosisTreatmentList (query) {
return request ({
url: '/data-dictionary/diagnosis-treatment/information-page',
method: 'get',
params: query
})
params: query,
});
}
// 查询诊疗目录详细
export function getDiagnosisTreatmentOne(id) {
return request({
export function getDiagnosisTreatmentOne (id) {
return request ({
url: '/data-dictionary/diagnosis-treatment/information-one/',
method: 'get',
params: { id } // 确保参数正确传递
})
params: {id}, // 确保参数正确传递
});
}
// 查询诊疗目录详细
export function validateActivityEdit (activityId) {
return request ({
url: '/data-dictionary/diagnosis-treatment/validate-edit',
method: 'get',
params: {activityId}, // 确保参数正确传递
});
}
// 新增诊疗目录
export function addDiagnosisTreatment(data) {
return request({
export function addDiagnosisTreatment (data) {
return request ({
url: '/data-dictionary/diagnosis-treatment/information',
method: 'post',
data: data
})
data: data,
});
}
// 修改诊疗目录
export function editDiagnosisTreatment(data) {
return request({
export function editDiagnosisTreatment (data) {
return request ({
url: '/data-dictionary/diagnosis-treatment/information',
method: 'put',
data: data
})
data: data,
});
}
// 诊疗目录分类查询
export function getDiseaseTreatmentInit() {
return request({
export function getDiseaseTreatmentInit () {
return request ({
url: '/data-dictionary/diagnosis-treatment/init',
method: 'get'
})
method: 'get',
});
}
// 停用诊疗目录
export function stopDiseaseTreatment(ids) {
console.log(ids)
return request({
export function stopDiseaseTreatment (ids) {
console.log (ids);
return request ({
url: '/data-dictionary/diagnosis-treatment/information-stop',
method: 'put',
data: ids
})
data: ids,
});
}
// 启用诊疗目录
export function startDiseaseTreatment(ids) {
console.log(ids)
return request({
export function startDiseaseTreatment (ids) {
console.log (ids);
return request ({
url: '/data-dictionary/diagnosis-treatment/information-start',
method: 'put',
data: ids
})
data: ids,
});
}
// 查询部门树形数据
export function deptTreeSelect(queryParams) {
return request({
export function deptTreeSelect (queryParams) {
return request ({
url: '/base-data-manage/organization/organization',
method: 'get',
param: queryParams
})
param: queryParams,
});
}
// 查询身体部位树形数据
export function bodyTreeSelect(queryParams) {
return request({
export function bodyTreeSelect (queryParams) {
return request ({
url: '/base-data-manage/body-structure/body',
method: 'get',
params: queryParams
})
params: queryParams,
});
}
// 查询地点树形数据
export function locationTreeSelect(queryParams) {
return request({
export function locationTreeSelect (queryParams) {
return request ({
url: '/base-data-manage/location/location-page-tree',
method: 'get',
params: queryParams
})
params: queryParams,
});
}
// 获取医用耗材目录
export function getYbDiagnosisTreatmentList(queryParams) {
return request({
export function getYbDiagnosisTreatmentList (queryParams) {
return request ({
url: '/catalog/page',
method: 'get',
params: queryParams
})
params: queryParams,
});
}

View File

@@ -0,0 +1,114 @@
<template>
<div>
<el-table ref="medicineRef" height="300" :data="filteredList" @cell-click="clickRow">
<el-table-column label="项目名称" align="center" prop="name" width="300" />
<el-table-column label="零售价" align="center" prop="retailPrice" />
<el-table-column label="最高零售价" align="center" prop="maximumRetailPrice" />
</el-table>
</div>
</template>
<script setup>
import { getDiagnosisTreatmentList } from './diagnosistreatment';
import { ref, watch } from 'vue';
const props = defineProps({
itemType: {
type: String,
default: '',
},
searchKey: {
type: String,
default: '',
},
shouldLoadData: {
type: Boolean,
default: false,
},
// 新增:从父组件接收预加载的数据
preloadedData: {
type: Array,
default: () => [],
},
});
const emit = defineEmits(['selectRow']);
const diagnosisTreatmentList = ref([]); // 原始数据列表
const filteredList = ref([]); // 过滤后的数据列表
const hasLoaded = ref(false); // 标记是否已加载数据
// 获取诊疗项目列表
function getList() {
if (hasLoaded.value) return; // 如果已经加载过数据,则不再重复请求
// 优先使用父组件传递的数据
if (props.preloadedData && props.preloadedData.length > 0) {
diagnosisTreatmentList.value = props.preloadedData;
filterList(); // 初始化过滤
hasLoaded.value = true;
return;
}
// 如果父组件没有传递数据或数据为空,则自己请求
getDiagnosisTreatmentList({ statusEnum: 2, pageSize: 1000, pageNo: 1 })
.then((res) => {
diagnosisTreatmentList.value =
res.data?.records?.filter((item) => item.childrenJson == null) || [];
filterList(); // 初始化过滤
hasLoaded.value = true; // 标记为已加载
})
.catch((err) => {
console.error('获取诊疗项目数据失败:', err);
});
}
// 监听shouldLoadData属性变化仅在首次为true时加载数据
watch(
() => props.shouldLoadData,
(newValue) => {
if (newValue && !hasLoaded.value) {
getList();
}
},
{ immediate: true }
);
// 监听preloadedData变化当父组件数据更新时同步更新列表
watch(
() => props.preloadedData,
(newData) => {
if (newData && newData.length > 0) {
diagnosisTreatmentList.value = newData;
filterList(); // 更新过滤
hasLoaded.value = true;
}
},
{ immediate: true }
);
// 监听搜索关键词变化,实时过滤数据
watch(
() => props.searchKey,
() => {
filterList();
}
);
// 根据搜索关键词过滤列表
function filterList() {
if (!props.searchKey || props.searchKey.trim() === '') {
filteredList.value = diagnosisTreatmentList.value;
} else {
const searchTerm = props.searchKey.toLowerCase().trim();
filteredList.value = diagnosisTreatmentList.value.filter(
(item) => item.name && item.name.toLowerCase().includes(searchTerm)
);
}
}
function clickRow(row) {
emit('selectRow', row);
}
</script>
<style scoped></style>

View File

@@ -28,7 +28,6 @@
label-width="68px"
>
<el-row :gutter="24">
<!-- <el-col :span="5"> -->
<el-form-item label="项目名" prop="searchKey" label-width="55">
<el-input
v-model="queryParams.searchKey"
@@ -38,8 +37,7 @@
@keyup.enter="handleQuery"
/>
</el-form-item>
<!-- </el-col> -->
<!-- <el-col :span="5"> -->
<el-form-item label="状态" prop="statusEnum" label-width="80">
<el-select v-model="queryParams.statusEnum" clearable>
<el-option
@@ -50,8 +48,6 @@
/>
</el-select>
</el-form-item>
<!-- </el-col> -->
<!-- <el-col :span="5"> -->
<el-form-item label="医保是否对码" prop="ybMatchFlag" label-width="120">
<el-select v-model="queryParams.ybMatchFlag" placeholder="" clearable>
<el-option
@@ -62,24 +58,7 @@
/>
</el-select>
</el-form-item>
<!-- </el-col> -->
<!-- <el-col :span="4">
<el-form-item label="执行科室" prop="ruleId" label-width="100">
<el-select
v-model="queryParams.ruleId"
placeholder=""
clearable
>
<el-option
v-for="item in exeOrganizations"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col> -->
<!-- <el-col :span="4"> -->
<el-form-item label="类型" prop="typeEnum" label-width="100">
<el-select v-model="queryParams.typeEnum" placeholder="" clearable>
<el-option
@@ -116,9 +95,9 @@
>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="Upload" @click="handleImport">导入</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="Upload" @click="handleImport">导入</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="primary" plain icon="Search" @click="getList">查询</el-button>
@@ -148,7 +127,7 @@
key="busNo"
prop="busNo"
:show-overflow-tooltip="true"
width="150"
width="200"
/>
<el-table-column
label="项目名称"
@@ -156,22 +135,9 @@
key="name"
prop="name"
:show-overflow-tooltip="true"
width="150"
/>
<el-table-column
label="拼音"
align="center"
key="pyStr"
prop="pyStr"
:show-overflow-tooltip="true"
/>
<el-table-column
label="五笔码"
align="center"
key="wbStr"
prop="wbStr"
:show-overflow-tooltip="true"
width="200"
/>
<el-table-column
label="目录类别"
align="center"
@@ -180,94 +146,6 @@
:show-overflow-tooltip="true"
width="100"
/>
<el-table-column
label="业务类型"
align="center"
key="typeEnum_enumText"
prop="typeEnum_enumText"
:show-overflow-tooltip="true"
width="90"
/>
<el-table-column
label="使用单位"
align="center"
key="permittedUnitCode_dictText"
prop="permittedUnitCode_dictText"
:show-overflow-tooltip="true"
/>
<el-table-column
label="医保标记"
align="center"
key="ybFlag_enumText"
prop="ybFlag_enumText"
:show-overflow-tooltip="true"
/>
<el-table-column
label="医保编码"
align="center"
key="ybNo"
prop="ybNo"
:show-overflow-tooltip="true"
/>
<el-table-column
label="医保对码标记"
align="center"
key="ybMatchFlag_enumText"
prop="ybMatchFlag_enumText"
:show-overflow-tooltip="true"
/>
<el-table-column
label="状态"
align="center"
key="statusEnum_enumText"
prop="statusEnum_enumText"
:show-overflow-tooltip="true"
/>
<el-table-column
label="归属科室"
align="center"
key="orgId_dictText"
prop="orgId_dictText"
:show-overflow-tooltip="true"
/>
<el-table-column
label="所在位置"
align="center"
key="locationId_dictText"
prop="locationId_dictText"
:show-overflow-tooltip="true"
/>
<el-table-column
label="身体部位"
align="center"
key="bodySiteCode_dictText"
prop="bodySiteCode_dictText"
:show-overflow-tooltip="true"
/>
<el-table-column
label="所需标本"
align="center"
key="specimenCode_dictText"
prop="specimenCode_dictText"
:show-overflow-tooltip="true"
width="100"
/>
<el-table-column
label="财务类别"
align="center"
key="itemTypeCode_dictText"
prop="itemTypeCode_dictText"
:show-overflow-tooltip="true"
width="100"
/>
<el-table-column
label="医保类别"
align="center"
key="ybType_dictText"
prop="ybType_dictText"
:show-overflow-tooltip="true"
width="100"
/>
<el-table-column
label="售价"
align="center"
@@ -277,20 +155,34 @@
width="100"
/>
<el-table-column
label="说明"
label="财务类别"
align="center"
key="descriptionText"
prop="descriptionText"
key="itemTypeCode_dictText"
prop="itemTypeCode_dictText"
:show-overflow-tooltip="true"
width="100"
/>
<el-table-column
label="使用单位"
align="center"
key="permittedUnitCode_dictText"
prop="permittedUnitCode_dictText"
:show-overflow-tooltip="true"
/>
<!-- <el-table-column
label="执行科室"
<el-table-column
label="医保编码"
align="center"
key="ruleId"
prop="ruleId"
key="ybNo"
prop="ybNo"
:show-overflow-tooltip="true"
width="90"
/> -->
/>
<el-table-column
label="状态"
align="center"
key="statusEnum_enumText"
prop="statusEnum_enumText"
:show-overflow-tooltip="true"
/>
<el-table-column
label="操作"
align="center"
@@ -345,16 +237,30 @@
<!-- 诊疗目录导入对话框 -->
<el-dialog :title="upload.title" v-model="upload.open" width="400px" append-to-body>
<el-upload ref="uploadRef" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
:on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
<el-upload
ref="uploadRef"
:limit="1"
accept=".xlsx, .xls"
:headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport"
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
:auto-upload="false"
drag
>
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<template #tip>
<div class="el-upload__tip text-center">
<span>仅允许导入xlsxlsx格式文件</span>
<el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline"
@click="importTemplate">下载模板</el-link>
<el-link
type="primary"
:underline="false"
style="font-size: 12px; vertical-align: baseline"
@click="importTemplate"
>下载模板</el-link
>
</div>
</template>
</el-upload>
@@ -369,13 +275,14 @@
</template>
<script setup name="DiagnosisTreatment">
import { getToken } from "@/utils/auth";
import { getToken } from '@/utils/auth';
import {
getDiagnosisTreatmentList,
stopDiseaseTreatment,
startDiseaseTreatment,
getDiseaseTreatmentInit,
getDiagnosisTreatmentOne,
validateActivityEdit,
} from './components/diagnosistreatment';
import diagnosisTreatmentDialog from './components/diagnosisTreatmentDialog';
import DiagTreYbDialog from './components/diagTreYbDialog';
@@ -407,18 +314,17 @@ const upload = reactive({
// 是否显示弹出层
open: false,
// 弹出层标题
title: "",
title: '',
// 是否禁用上传
isUploading: false,
// 是否更新已经存在的数据
updateSupport: 0,
// 设置上传的请求头部
headers: { Authorization: "Bearer " + getToken() },
headers: { Authorization: 'Bearer ' + getToken() },
// 上传的地址
url: import.meta.env.VITE_APP_BASE_API + "/data-dictionary/diagnosis-treatment/import-data"
url: import.meta.env.VITE_APP_BASE_API + '/data-dictionary/diagnosis-treatment/import-data',
});
const data = reactive({
form: {},
queryParams: {
@@ -445,7 +351,6 @@ const filterNode = (value, data) => {
/** 诊断目录分类查询下拉树结构 */
function getDiseaseTreatmentList() {
getDiseaseTreatmentInit().then((response) => {
console.log(response, 'response诊疗目录分类查询下拉树结构');
diagnosisCategoryOptions.value = response.data.diagnosisCategoryOptions.sort((a, b) => {
return parseInt(a.value) - parseInt(b.value);
});
@@ -458,18 +363,15 @@ function getDiseaseTreatmentList() {
}
/** 查询诊断目录列表 */
function getList() {
console.log(queryParams.value, 'queryParams***********************');
loading.value = true;
getDiagnosisTreatmentList(queryParams.value).then((res) => {
loading.value = false;
diagnosisTreatmentList.value = res.data.records;
console.log(diagnosisTreatmentList, 'res.data');
total.value = res.data.total;
});
}
/** 节点单击事件 */
function handleNodeClick(data) {
console.log(data, '节点单击事件');
queryParams.value.categoryCode = data.value;
currentCategoryEnum.value = data.value;
handleQuery();
@@ -477,7 +379,6 @@ function handleNodeClick(data) {
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNo = 1;
console.log(queryParams, 'queryParams搜索');
getList();
}
@@ -528,7 +429,11 @@ function handleImport() {
}
/** 下载模板操作 */
function importTemplate() {
proxy.download('/data-dictionary/diagnosis-treatment/import-template', {}, `diagnosis_treatment_template_${new Date().getTime()}.xlsx`);
proxy.download(
'/data-dictionary/diagnosis-treatment/import-template',
{},
`diagnosis_treatment_template_${new Date().getTime()}.xlsx`
);
}
/**文件上传中处理 */
const handleFileUploadProgress = (event, file, fileList) => {
@@ -541,8 +446,8 @@ const handleFileSuccess = (response, file, fileList) => {
proxy.$refs['uploadRef'].handleRemove(file);
proxy.$alert(
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
response.msg +
'</div>',
response.msg +
'</div>',
'导入结果',
{ dangerouslyUseHTMLString: true }
);
@@ -555,7 +460,6 @@ function submitFileForm() {
/** 选择条数 */
function handleSelectionChange(selection) {
console.log(selection, 'selection');
// selectedData.value = selection.map((item) => ({ ...item })); // 存储选择的行数据
ids.value = selection.map((item) => item.id);
single.value = selection.length != 1;
@@ -564,22 +468,28 @@ function handleSelectionChange(selection) {
/** 打开新增弹窗 */
function openAddDiagnosisTreatment() {
// if (currentCategoryEnum.value) {
console.log('打开新增弹窗');
title.value = '新增';
nextTick(() => {
proxy.$refs.diagnosisTreatmentRef.show();
});
// } else {
// proxy.$modal.msgError("请先选择目录分类!");
// }
}
const isEditInfoDisable = ref(0);
/** 打开编辑弹窗 */
function openEditDiagnosisTreatment(row) {
validateActivityEdit(row.id).then((res) => {
// res.data == 1 医生开过该诊疗项目,不可编辑
isEditInfoDisable.value = res.data;
getDiagnosisTreatmentInfo(row);
});
}
// 根据诊疗id 查询诊疗信息
function getDiagnosisTreatmentInfo(row) {
getDiagnosisTreatmentOne(row.id).then((response) => {
console.log(response, 'response88888');
currentData.value = response.data;
currentData.value = {
...response.data,
// 禁用编辑
isEditInfoDisable: isEditInfoDisable.value,
};
currentData.value.ybFlag == 1
? (currentData.value.ybFlag = true)
: (currentData.value.ybFlag = false);

View File

@@ -46,6 +46,21 @@
/>
</el-select>
</el-form-item>
<el-form-item label="诊断类型" prop="typeCode">
<el-select
v-model="queryParams.typeCode"
placeholder="请选择"
style="width: 240px"
clearable
>
<el-option
v-for="dict in condition_type_code"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<!-- <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
@@ -86,6 +101,84 @@
</el-col> -->
</el-row>
<el-table v-loading="loading" :data="diseaseList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="编码" align="center" key="conditionCode" prop="conditionCode" />
<el-table-column
label="名称"
align="center"
key="name"
prop="name"
:show-overflow-tooltip="true"
/>
<el-table-column
label="疾病分类"
align="center"
key="sourceEnum_enumText"
prop="sourceEnum_enumText"
:show-overflow-tooltip="true"
/>
<!-- <el-table-column
label="拼音助记码"
align="center"
key="pyStr"
prop="pyStr"
:show-overflow-tooltip="true"
/> -->
<el-table-column
label="类型"
align="center"
key="typeCode_dictText"
prop="typeCode_dictText"
:show-overflow-tooltip="true"
/>
<el-table-column
label="医保编码 "
align="center"
key="ybNo"
prop="ybNo"
:show-overflow-tooltip="true"
/>
<!-- <el-table-column
label="医保标记"
align="center"
key="ybMatchFlag"
prop="ybMatchFlag_enumText"
/>
<el-table-column
label="医保对码标志"
align="center"
key="ybMatchFlag"
prop="ybMatchFlag_enumText"
/> -->
<el-table-column
label="状态"
align="center"
key="statusEnum_enumText"
prop="statusEnum_enumText"
width="160"
/>
<el-table-column
label="描述"
align="center"
key="description"
prop="description"
width="160"
/>
<el-table-column
label="操作"
align="center"
width="150"
class-name="small-padding fixed-width"
>
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
>编辑</el-button
>
</template>
</el-table-column>
</el-table>
<pagination
<!-- 添加外层滚动容器确保表格可以水平滚动 -->
<div class="table-scroll-container">
<!-- 移除style="width: 100%"让Element UI表格根据内容自动调整 -->
@@ -211,7 +304,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="类型" prop="typeCode">
<el-form-item label="诊断类型" prop="typeCode">
<el-select v-model="form.typeCode" placeholder="请选择" clearable>
<el-option
v-for="dict in condition_type_code"

View File

@@ -18,6 +18,13 @@ export function getMedicationList(query) {
})
}
export function getYbCatalogResult(address,v) {
return request({
url: '/yb-request/query-catalog?address=1301&v=1',
method: 'get',
})
}
// 查询药品目录详细
export function getMedicationOne(id) {
return request({
@@ -26,6 +33,14 @@ export function getMedicationOne(id) {
params: { id } // 确保参数正确传递
})
}
// 校验药品是否可以编辑
export function validateEditMedictaion(medicationId) {
return request({
url: '/data-dictionary/medication/validate-edit',
method: 'get',
params: { medicationId } // 确保参数正确传递
})
}
// 新增药品目录
export function addMedication(data) {

View File

@@ -46,7 +46,9 @@
clearable
@change="handleLvChange"
style="width: 240px"
:disabled="form.isEditInfoDisable === 1 || form.isEditInfoDisable === 2"
>
>
<el-option
v-for="dict in chrgitm_lv"
:key="dict.value"
@@ -70,7 +72,12 @@
</el-col>
<el-col :span="6">
<el-form-item label="药品分类" prop="categoryCode">
<el-select v-model="form.categoryCode" clearable>
<el-select
v-model="form.categoryCode"
clearable
filterable
:disabled="form.isEditInfoDisable === 2 || form.isEditInfoDisable === 1"
>
<el-option
v-for="category in med_category_code"
:key="category.value"
@@ -107,17 +114,31 @@
</el-col>
<el-col :span="6">
<el-form-item label="规格" prop="totalVolume">
<el-input v-model="form.totalVolume" placeholder="" />
<el-input
v-model="form.totalVolume"
placeholder=""
clearable
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="计量换算" prop="totalVolume">
<el-input v-model="form.unitConversionRatio" placeholder="" />
<el-input
v-model="form.unitConversionRatio"
placeholder=""
clearable
:disabled="form.isEditInfoDisable === 1"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="剂量单位" prop="doseUnitCode">
<el-select v-model="form.doseUnitCode" clearable filterable>
<el-select
v-model="form.doseUnitCode"
clearable
filterable
:disabled="form.isEditInfoDisable === 1"
>
<el-option
v-for="category in unit_code"
:key="category.value"
@@ -131,7 +152,12 @@
<el-row :gutter="24">
<el-col :span="6">
<el-form-item label="剂型" prop="doseFormCode">
<el-select v-model="form.doseFormCode" clearable filterable>
<el-select
v-model="form.doseFormCode"
clearable
filterable
:disabled="form.isEditInfoDisable === 1"
>
<el-option
v-for="category in dose_form_code"
:key="category.value"
@@ -182,6 +208,18 @@
<el-input v-model="form.maxUnit" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="用法说明" prop="dosageInstruction">
<el-select v-model="form.dosageInstruction" clearable filterable>
<el-option
v-for="category in dosage_instruction"
:key="category.value"
:label="category.label"
:value="category.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<div class="title">库存信息</div>
<el-row :gutter="24">
@@ -222,7 +260,12 @@
</el-col>
<el-col :span="6">
<el-form-item label="包装单位" prop="unitCode">
<el-select v-model="form.unitCode" clearable filterable>
<el-select
v-model="form.unitCode"
clearable
filterable
:disabled="form.isEditInfoDisable === 2 || form.isEditInfoDisable === 1"
>
<el-option
v-for="category in unit_code"
:key="category.value"
@@ -234,7 +277,12 @@
</el-col>
<el-col :span="6">
<el-form-item label="最小单位" prop="minUnitCode">
<el-select v-model="form.minUnitCode" clearable filterable>
<el-select
v-model="form.minUnitCode"
clearable
filterable
:disabled="form.isEditInfoDisable === 2 || form.isEditInfoDisable === 1"
>
<el-option
v-for="category in unit_code"
:key="category.value"
@@ -245,8 +293,12 @@
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="警戒线最低值(常规单位)" prop="itemMinQuantity" label-width="180px">
<el-input-number
<el-form-item
label="警戒线最低值(常规单位)"
prop="itemMinQuantity"
label-width="180px"
>
<el-input-number
v-model="form.itemMinQuantity"
placeholder=""
controls-position="right"
@@ -287,12 +339,23 @@
</el-col>
<el-col :span="6">
<el-form-item label="拆零比" prop="partPercent">
<el-input-number v-model="form.partPercent" controls-position="right" placeholder="" :min="1"/>
<el-input-number
v-model="form.partPercent"
controls-position="right"
placeholder=""
:min="1"
clearable
:disabled="form.isEditInfoDisable === 2 || form.isEditInfoDisable === 1"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="警戒线最高值(常规单位)" prop="itemMaxQuantity" label-width="180px">
<el-form-item
label="警戒线最高值(常规单位)"
prop="itemMaxQuantity"
label-width="180px"
>
<el-input-number
v-model="form.itemMaxQuantity"
placeholder=""
@@ -306,12 +369,22 @@
<el-row :gutter="24">
<el-col :span="6">
<el-form-item label="购入价" prop="purchasePrice">
<el-input v-model="form.purchasePrice" placeholder="" :disabled="false" />
<el-input
v-model="form.purchasePrice"
placeholder=""
clearable
:disabled="form.isEditInfoDisable === 2 || form.isEditInfoDisable === 1"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="零售价" prop="retailPrice">
<el-input v-model="form.retailPrice" placeholder="" :disabled="false" />
<el-input
v-model="form.retailPrice"
placeholder=""
clearable
:disabled="form.isEditInfoDisable === 2 || form.isEditInfoDisable === 1"
/>
</el-form-item>
</el-col>
<el-col :span="6">
@@ -324,7 +397,12 @@
<el-row :gutter="24">
<el-col :span="6">
<el-form-item label="财务类型" prop="typeCode">
<el-select v-model="form.typeCode" clearable filterable>
<el-select
v-model="form.typeCode"
clearable
filterable
:disabled="form.isEditInfoDisable === 2 || form.isEditInfoDisable === 1"
>
<el-option
v-for="category in fin_type_code"
:key="category.value"
@@ -375,6 +453,7 @@
clearable
filterable
style="width: 240px"
:disabled="form.isEditInfoDisable === 1"
>
<el-option
v-for="dict in med_chrgitm_type"
@@ -399,19 +478,28 @@
</el-col> -->
<el-col :span="6">
<el-form-item label="基药标识" prop="basicFlag">
<el-checkbox v-model="form.basicFlag"></el-checkbox>
<el-checkbox
v-model="form.basicFlag"
:disabled="form.isEditInfoDisable === 1"
></el-checkbox>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="皮试判别" prop="skinTestFlag">
<el-checkbox v-model="form.skinTestFlag"></el-checkbox>
<el-checkbox
v-model="form.skinTestFlag"
:disabled="form.isEditInfoDisable === 1"
></el-checkbox>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="6">
<el-form-item label="注射药品" prop="injectFlag">
<el-checkbox v-model="form.injectFlag"></el-checkbox>
<el-checkbox
v-model="form.injectFlag"
:disabled="form.isEditInfoDisable === 1"
></el-checkbox>
</el-form-item>
</el-col>
<el-col :span="6">
@@ -448,8 +536,8 @@
</el-col>
<el-col :span="6">
<el-form-item label="处方标志" prop="rxFlag">
<el-radio-group v-model="form.rxFlag">
<el-radio v-for="item in rx_flag" :key="item.value" :label="item.value">
<el-radio-group v-model="form.rxFlag" :disabled="form.isEditInfoDisable === 1">
<el-radio v-for="item in rx_flag" :key="item.value" :value="item.value">
{{ item.label }}
</el-radio>
</el-radio-group>
@@ -583,6 +671,7 @@ const {
ddd_code,
dose_from_code,
rx_flag,
dosage_instruction,
chrgitm_lv,
} = proxy.useDict(
'med_category_code',
@@ -598,6 +687,7 @@ const {
'ddd_code',
'dose_from_code',
'rx_flag',
'dosage_instruction',
'chrgitm_lv'
);
@@ -639,23 +729,11 @@ const data = reactive({
form: {},
antibioticForm: {},
rules: {
// statusEnum: [
// { required: true, message: "药品状态不能为空", trigger: "blur" },
// ],
// orgId: [{ required: true, message: "所属科室不能为空", trigger: "blur" }],
locationId: [{ required: true, message: '所在位置不能为空', trigger: 'blur' }],
doseFormCode: [{ required: true, message: '剂型不能为空', trigger: 'blur' }],
totalVolume: [{ required: true, message: '规格不能为空', trigger: 'blur' }],
// activeFlag: [{ required: true, message: "活性不能为空", trigger: "blur" }],
// methodCode: [{ required: true, message: '用法不能为空', trigger: 'blur' }],
// rateCode: [{ required: true, message: '用药频次不能为空', trigger: 'blur' }],
// dose: [{ required: true, message: '单次剂量不能为空', trigger: 'blur' }],
doseUnitCode: [{ required: true, message: '剂量单位不能为空', trigger: 'blur' }],
manufacturerText: [{ required: true, message: '生产厂家不能为空', trigger: 'blur' }],
// maxUnit: [
// { required: true, message: '单次最大剂量不能为空', trigger: 'blur' },
// { validator: validateMaxUnit, trigger: 'blur' },
// ],
busNo: [{ required: true, message: '药品编号不能为空', trigger: 'blur' }],
name: [{ required: true, message: '药品名称不能为空', trigger: 'blur' }],
categoryCode: [{ required: true, message: '药品分类不能为空', trigger: 'blur' }],
@@ -665,29 +743,10 @@ const data = reactive({
minUnitCode: [{ required: true, message: '最小单位不能为空', trigger: 'blur' }],
ingredient: [{ required: true, message: '成分不能为空', trigger: 'blur' }],
partPercent: [{ required: true, message: '拆零比不能为空', trigger: 'blur' }],
// itemMinQuantity: [{ required: true, message: '警戒线最低值不能为空', trigger: 'blur' }],
// itemMaxQuantity: [{ required: true, message: '警戒线最高值不能为空', trigger: 'blur' }],
doseFrom: [{ required: true, message: '剂量形式不能为空', trigger: 'blur' }],
// approvalNumber: [{ required: true, message: '批准文号不能为空', trigger: 'blur' }],
// ybMatchFlag: [
// { required: true, message: "医保对码不能为空", trigger: "blur" },
// ],
ybNo: [{ required: false, message: '医保编码不能为空', trigger: 'blur' }],
pharmacologyCategoryCode: [{ required: true, message: '药品性质不能为空', trigger: 'blur' }],
// skinTestFlag: [
// { required: true, message: "皮试不能为空", trigger: "blur" },
// ],
// injectFlag: [{ required: true, message: "注射不能为空", trigger: "blur" }],
supplyId: [{ required: true, message: '供应商不能为空', trigger: 'blur' }],
// restrictedFlag: [
// { required: true, message: "限制使用不能为空", trigger: "blur" },
// ],
// childrenFlag: [
// { required: true, message: "儿童用药不能为空", trigger: "blur" },
// ],
// restrictedScope: [
// { required: true, message: "限制使用范围不能为空", trigger: "blur" },
// ],
nationalDrugCode: [{ required: false, message: '贯标国家编码不能为空', trigger: 'blur' }],
partAttributeEnum: [{ required: true, message: '拆分属性不能为空', trigger: 'blur' }],
thoPartAttributeEnum: [
@@ -697,16 +756,8 @@ const data = reactive({
trigger: 'blur',
},
],
// basicFlag: [
// { required: true, message: "基药标识不能为空", trigger: "blur" },
// ],
// antibioticFlag: [
// { required: true, message: "抗生素不能为空", trigger: "blur" },
// ],
// selfFlag: [{ required: true, message: "自制不能为空", trigger: "blur" }],
purchasePrice: [{ required: true, message: '购入价不能为空', trigger: 'blur' }],
retailPrice: [{ required: true, message: '零售价不能为空', trigger: 'blur' }],
// maximumRetailPrice: [{ required: true, message: '最高零售价不能为空', trigger: 'blur' }],
ybType: [{ required: true, message: '医保类型不能为空', trigger: 'blur' }],
rxFlag: [{ required: true, message: '处方标志不能为空', trigger: 'blur' }],
chrgitmLv: [{ required: true, message: '医保等级不能为空', trigger: 'blur' }],
@@ -762,15 +813,12 @@ function validateMaxUnit(rule, value, callback) {
/** 查询部门下拉树结构 */
function getDeptTree() {
deptTreeSelect().then((response) => {
console.log(response, 'response查询部门下拉树结构');
deptOptions.value = response.data.records;
console.log(deptOptions.value, '部门下拉树结构');
});
}
/** 查询地点下拉树结构 */
function getLocationTree() {
locationTreeSelect({ formList: '11,16' }).then((response) => {
console.log(response, 'response查询部门下拉树结构');
locationOptions.value = response.data.records;
});
}
@@ -787,10 +835,7 @@ function show(row) {
statusRestrictedOptions.value = props.statusRestrictedOptions;
partAttributeEnumOptions.value = props.partAttributeEnumOptions;
tempOrderSplitPropertyOptions.value = props.tempOrderSplitPropertyOptions;
console.log(form.value.categoryCode, 'form.value.categoryCode');
// setValue(row);
form.value.categoryCode = props.currentCategoryEnum;
console.log(form.value, 1234567890);
visible.value = true;
}
@@ -799,38 +844,22 @@ function setValue(row) {
name: formatValue(props.currentCategoryEnum == '4' ? row.singleDrugName : row.registeredName), // 通用名称
merchandiseName: formatValue(row.registeredName), // 商品名称
ybNo: formatValue(row.medicalCatalogCode), // 医保编码
// categoryCode: row.drugCategory, // 药品分类
// ybMatchFlag: row., // 医保对码
// pharmacologyCategoryCode: row., // 药品性质
totalVolume: formatValue(
props.currentCategoryEnum == '4' ? row.conventionalUsage : row.drugSpecification
), // 规格
doseode: formatValue(row.drugForm), // 剂型
doseUnitCode: formatValue(row.minMeasurementUnit), // 剂量单位
// usageLimit: row.dosage, // 用量限定
methodCode: formatValue(row.usage), // 用法
rateCode: formatValue(row.frequency), // 用药频次
// maxUnit: row., // 单次最大剂量
// skinTestFlag: row., // 皮试判别
// locationId: row., // 采购入库位置
unitCode: formatValue(row.packagingUnit), // 包装单位
minUnitCode: formatValue(row.minUseUnit), // 最小单位
// partAttributeEnum: row., // 门诊拆分属性
// thoPartAttributeEnum: row., // 住院临时医嘱拆分属性
partPercent: formatValue(row.conversionRatio), // 拆零比
itemMinQuantity: formatValue(row.itemMinQuantity), // 警戒线最低值
itemMaxQuantity: formatValue(row.itemMaxQuantity), // 警戒线最高值
// purchasePrice: row., // 购入价
// retailPrice: row., // 零售价
// maximumRetailPrice: row., // 最高零售价
// typeCode: row., // 财务类型
nationalDrugCode: formatValue(row.nationalDrugCode), // 贯标国家编码
version: formatValue(row.version), // 药品版本
approvalNumber: formatValue(row.approvalNo), // 批准文号
// ybType: formatValue(row.insuranceClass), // 医保类别
manufacturerText: formatValue(row.manufacturerName), // 生产厂家
// supplyId: row., // 供应商
basicFlag: formatValue(row.essentialDrugFlag), // 基药标识
// injectFlag: row., // 注射药物
// childrenFlag: row.pediatricUse, // 儿童用药标志
@@ -887,7 +916,6 @@ function edit() {
antibioticForm.value.maxRateCode = form.value.maxRateCode;
antibioticForm.value.dddUnitCode = form.value.dddUnitCode;
antibioticForm.value.dddCode = form.value.dddCode;
//antibioticForm.value.chrgitmLv = form.value.chrgitmLv ? form.value.chrgitmLv.toString() : undefined;
form.value.chrgitmLv = form.value.chrgitmLv ? form.value.chrgitmLv.toString() : undefined;
visible.value = true;
}
@@ -941,7 +969,6 @@ function reset() {
minUnitCode: undefined,
doseUnitCode: undefined,
doseFormCode: undefined,
// statusEnum: undefined,
skinTestFlag: undefined,
injectFlag: undefined,
childrenFlag: undefined,
@@ -968,8 +995,6 @@ function reset() {
nationalDrugCode: undefined,
antibioticFlag: undefined,
selfFlag: undefined,
// minRateCode: undefined,
// maxRateCode: undefined,
partAttributeEnum: undefined,
thoPartAttributeEnum: undefined,
usageLimit: undefined,

View File

@@ -3,7 +3,7 @@
<el-dialog
title="医保药品目录"
v-model="visible"
width="1500px"
width="1800px"
append-to-body
destroy-on-close
@close="cancel"
@@ -29,22 +29,32 @@
<span v-else>{{ scope.row.registeredName }}</span>
</template>
</el-table-column>
<el-table-column align="center" label="药品类别" prop="drugCategoryName">
<el-table-column align="center" label="药品类别" prop="drugCategoryName" width="120">
<template #default="scope">
{{ formatStr(scope.row.drugCategoryName) }}
</template>
</el-table-column>
<el-table-column align="center" label="国药准字" prop="drugCategoryName">
<template #default="scope">
{{ formatStr(scope.row.approvalNo) }}
</template>
</el-table-column>
<el-table-column align="center" label="药品规格" prop="drugSpecification">
<template #default="scope">
<span v-if="props.currentCategoryEnum == '4'">{{ scope.row.conventionalUsage }}</span>
<span v-else>{{ scope.row.drugSpecification }}</span>
</template>
</el-table-column>
<el-table-column align="center" label="处方药" prop="otcFlagName">
<el-table-column align="center" label="处方药" prop="otcFlagName" width="120">
<template #default="scope">
{{ formatStr(scope.row.otcFlagName) }}
</template>
</el-table-column>
<el-table-column align="center" label="厂家" prop="manufacturerName">
<template #default="scope">
{{ formatStr(scope.row.manufacturerName) }}
</template>
</el-table-column>
<el-table-column align="center" label="批准文号" prop="approvalNo" />
<el-table-column align="center" label="操作" width="80">
<template #default="scope">

View File

@@ -62,6 +62,24 @@
/>
</el-select>
</el-form-item>
<el-form-item label="医保接口编号" prop="searchKey" label-width="120">
<el-input
v-model="queryParams.address"
placeholder="1301-1321"
clearable
style="width: 240px"
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="版本号" prop="searchKey" label-width="120">
<el-input
v-model="queryParams.v"
placeholder="版本号"
clearable
style="width: 240px"
@keyup.enter="handleQuery"
/>
</el-form-item>
<!-- </el-col> -->
</el-row>
<!-- <el-form-item>
@@ -91,20 +109,17 @@
>启用</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="info"
plain
icon="Upload"
@click="handleImport"
>导入</el-button
>
<el-button type="info" plain icon="Upload" @click="handleImport">导入</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="primary" plain icon="Search" @click="getList">查询</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="primary" plain icon="Search" @click="getYbCatalog">查询目录</el-button>
</el-col>
<!-- <el-col :span="1.5">
<el-button
type="warning"
@@ -129,7 +144,8 @@
key="busNo"
prop="busNo"
:show-overflow-tooltip="true"
width="90"
min-width="90"
width="200px"
/>
<el-table-column
label="药品名称"
@@ -137,7 +153,17 @@
key="name"
prop="name"
:show-overflow-tooltip="true"
width="110"
min-width="110"
width="200px"
/>
<el-table-column
label="规格"
align="center"
key="totalVolume"
prop="totalVolume"
:show-overflow-tooltip="true"
min-width="200px"
width="200px"
/>
<el-table-column
label="药品状态"
@@ -146,11 +172,13 @@
prop="statusEnum_enumText"
:show-overflow-tooltip="true"
>
<template #default="scope">
<el-tag v-if="scope.row.statusEnum == 2" type="success" >{{ scope.row.statusEnum_enumText }}</el-tag>
<el-tag v-else type="error">{{ scope.row.statusEnum_enumText }}</el-tag>
</template>
</el-table-column>
<template #default="scope">
<el-tag v-if="scope.row.statusEnum == 2" type="success">{{
scope.row.statusEnum_enumText
}}</el-tag>
<el-tag v-else type="error">{{ scope.row.statusEnum_enumText }}</el-tag>
</template>
</el-table-column>
<el-table-column
label="药品分类"
align="center"
@@ -166,21 +194,14 @@
prop="orgId_dictText"
:show-overflow-tooltip="true"
/> -->
<el-table-column
<!-- <el-table-column
label="采购入库位置"
align="center"
key="locationId_dictText"
prop="locationId_dictText"
:show-overflow-tooltip="true"
/>
<el-table-column
label="规格"
align="center"
key="totalVolume"
prop="totalVolume"
:show-overflow-tooltip="true"
width="200px"
/>
/> -->
<el-table-column
label="医保编码"
align="center"
@@ -310,15 +331,17 @@
</template>
<script setup name="Medication">
import { getToken } from "@/utils/auth";
import { getToken } from '@/utils/auth';
import {
getMedicationList,
editMedication,
addMedication,
getMedicationCategory,
validateEditMedictaion,
getMedicationOne,
startMedication,
stopMedication,
getYbCatalogResult,
} from './components/medicine';
import medicineDialog from './components/medicineDialog';
import MedicineYbDialog from './components/medicineYbDialog';
@@ -356,15 +379,15 @@ const upload = reactive({
// 是否显示弹出层
open: false,
// 弹出层标题
title: "",
title: '',
// 是否禁用上传
isUploading: false,
// 是否更新已经存在的数据
updateSupport: 0,
// 设置上传的请求头部
headers: { Authorization: "Bearer " + getToken() },
headers: { Authorization: 'Bearer ' + getToken() },
// 上传的地址
url: import.meta.env.VITE_APP_BASE_API + "/data-dictionary/medication/import-data"
url: import.meta.env.VITE_APP_BASE_API + '/data-dictionary/medication/import-data',
});
const data = reactive({
@@ -376,6 +399,8 @@ const data = reactive({
statusEnum: undefined, // 状态(包括 1预置2启用3停用
ybMatchFlag: undefined, // 是否医保匹配(包括 10
categoryCode: undefined, // 目录
address: undefined, // 目录
v: undefined, // 目录
},
rules: {},
});
@@ -391,7 +416,6 @@ const filterNode = (value, data) => {
/** 病种目录分类查询下拉树结构 */
function getMedicationCategoryList() {
getMedicationCategory().then((response) => {
console.log(response, 'response药品目录分类查询下拉树结构');
medicationOptions.value = response.data.medicationCategoryCodeOptions;
medicationOptions.value.unshift({ info: '全部', value: '' });
statusFlagOptions.value = response.data.statusFlagOptions;
@@ -406,14 +430,20 @@ function getMedicationCategoryList() {
/** 查询病种目录列表 */
function getList() {
loading.value = true;
console.log(queryParams.value, 'queryParams***********************');
getMedicationList(queryParams.value).then((res) => {
loading.value = false;
console.log(res, 'res');
medicationList.value = res.data.records;
total.value = res.data.total;
});
}
/** 查询病种目录列表 */
function getYbCatalog() {
loading.value = true;
getYbCatalogResult(queryParams.value).then((res) => {
loading.value = false;
});
}
/** 节点单击事件 */
function handleNodeClick(data) {
queryParams.value.categoryCode = data.value;
@@ -423,7 +453,6 @@ function handleNodeClick(data) {
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNo = 1;
console.log(queryParams.value, 'queryParams');
getList();
}
@@ -444,7 +473,6 @@ function handleStart() {
/** 停用按钮操作 */
function handleClose() {
const stopIds = ids.value;
console.log(data, 'data');
proxy.$modal
.confirm('是否确认停用数据!')
.then(function () {
@@ -474,7 +502,11 @@ function handleImport() {
}
/** 下载模板操作 */
function importTemplate() {
proxy.download('/data-dictionary/medication/import-template', {}, `medication_template_${new Date().getTime()}.xlsx`);
proxy.download(
'/data-dictionary/medication/import-template',
{},
`medication_template_${new Date().getTime()}.xlsx`
);
}
/**文件上传中处理 */
const handleFileUploadProgress = (event, file, fileList) => {
@@ -508,25 +540,34 @@ function handleSelectionChange(selection) {
/** 打开新增弹窗 */
function openAddMedicine() {
// if (!currentCategoryEnum.value) {
// return proxy.$modal.msgError("请选择药品目录分类");
// }
// proxy.$refs['medicineYbRef'].show();
proxy.$refs['medicineRef'].show();
}
const isEditInfoDisable = ref(0);
/** 打开编辑弹窗 */
function openEditMedicine(row) {
validateEditMedictaion(row.id).then((res) => {
// res.data == 1 医生开过该药品,不可编辑
// res.data == 2 该药品已经入库过,不可编辑
isEditInfoDisable.value = res.data;
getMedicationInfo(row);
});
}
// 根据药品id 查询药品信息
function getMedicationInfo(row) {
getMedicationOne(row.id).then((response) => {
currentData.value = response.data;
currentData.value = {
...response.data,
// 禁用编辑
isEditInfoDisable: isEditInfoDisable.value,
};
nextTick(() => {
proxy.$refs['medicineRef'].edit();
});
});
}
/** 提交按钮 */
function submitForm(formData) {
console.log(formData, 'submitForm');
if (formData.id != undefined) {
editMedication(formData).then((response) => {
proxy.$modal.msgSuccess('修改成功');

View File

@@ -0,0 +1,477 @@
<template>
<div class="app-container">
<el-row :gutter="20">
<!-- 搜索条件区域 -->
<el-col :span="24">
<el-form :model="queryParams" ref="queryForm" :inline="true" size="small">
<el-form-item label="项目名">
<el-input v-model="queryParams.searchKey" placeholder="国临编码/国临名称/医保编码/医保名称" clearable style="width: 280px" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">查询</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</el-col>
<!-- 操作按钮区域 -->
<el-col :span="24" class="mb20">
<el-button type="primary" icon="Plus" @click="handleAdd">添加新项目</el-button>
<el-button type="danger" icon="Stop" @click="handleDelete">删除</el-button>
<el-button type="success" icon="Check">启用</el-button>
<el-button type="info" icon="Download">导入</el-button>
</el-col>
<!-- 数据表格区域 -->
<el-col :span="24">
<el-table
v-loading="loading"
:data="dataList"
style="width: 100%"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column prop="glNo"
label="国临版疾病编码"
key="glNo"
:show-overflow-tooltip="true"
align="center"
width="180" />
<el-table-column prop="glName"
label="国临版疾病名称"
key="glName"
:show-overflow-tooltip="true"
align="center"
min-width="200" />
<el-table-column prop="icd10No"
label="医保版疾病编码"
key="icd10No"
:show-overflow-tooltip="true"
align="center"
width="180" />
<el-table-column prop="icd10Name"
label="医保版疾病名称"
key="icd10Name"
:show-overflow-tooltip="true"
align="center"
min-width="200" />
<el-table-column label="操作" width="120" align="center">
<template #default="scope">
<el-button type="primary" link size="small" @click="handleEdit(scope.row)">编辑</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页控件 -->
<el-pagination
v-model:current-page="queryParams.pageNum"
v-model:page-size="queryParams.pageSize"
:page-sizes="[10, 20, 50, 100]"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</el-col>
</el-row>
<!-- 添加对话框 -->
<el-dialog
v-model="addDialogVisible"
title="添加国临编码"
width="600px"
:before-close="handleClose"
>
<el-form
ref="addFormRef"
:model="addFormData"
:rules="rules"
label-width="120px"
size="small"
>
<el-form-item label="国临版疾病编码" prop="glNo">
<el-input v-model="addFormData.glNo" placeholder="请输入国临版疾病编码" clearable />
</el-form-item>
<el-form-item label="国临版疾病名称" prop="glName">
<el-input v-model="addFormData.glName" placeholder="请输入国临版疾病名称" clearable />
</el-form-item>
<el-form-item label="医保版疾病编码" prop="icd10No">
<el-input v-model="addFormData.icd10No" placeholder="请输入医保版疾病编码" clearable />
</el-form-item>
<el-form-item label="医保版疾病名称" prop="icd10Name">
<el-input v-model="addFormData.icd10Name" placeholder="请输入医保版疾病名称" clearable />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="handleClose">取消</el-button>
<el-button type="primary" @click="handleSubmit">确定</el-button>
</template>
</el-dialog>
<!-- 编辑对话框 -->
<el-dialog
v-model="editDialogVisible"
title="编辑国临编码"
width="600px"
:before-close="handleEditClose"
>
<el-form
ref="editFormRef"
:model="editFormData"
:rules="rules"
label-width="120px"
size="small"
>
<el-form-item label="国临版疾病编码" prop="glNo">
<el-input v-model="editFormData.glNo" placeholder="请输入国临版疾病编码" clearable />
</el-form-item>
<el-form-item label="国临版疾病名称" prop="glName">
<el-input v-model="editFormData.glName" placeholder="请输入国临版疾病名称" clearable />
</el-form-item>
<el-form-item label="医保版疾病编码" prop="icd10No">
<el-input v-model="editFormData.icd10No" placeholder="请输入医保版疾病编码" clearable />
</el-form-item>
<el-form-item label="医保版疾病名称" prop="icd10Name">
<el-input v-model="editFormData.icd10Name" placeholder="请输入医保版疾病名称" clearable />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="handleEditClose">取消</el-button>
<el-button type="primary" @click="handleEditSubmit">确定</el-button>
</template>
</el-dialog>
</div>
</template>
<script setup name="NationalCode">
import { ref, reactive, onMounted } from 'vue';
import { useRouter, useRoute } from 'vue-router';
import { ElMessage, ElMessageBox } from 'element-plus';
import request from '@/utils/request';
const router = useRouter();
const route = useRoute();
// 页面数据
const loading = ref(true);
const dataList = ref([]);
const total = ref(0);
const ids = ref([]);
const single = ref(true);
const multiple = ref(true);
// 对话框相关
const addDialogVisible = ref(false);
const editDialogVisible = ref(false); // 编辑对话框可见性
const addFormRef = ref(null);
const editFormRef = ref(null); // 编辑表单引用
const addFormData = reactive({
glNo: '',
glName: '',
icd10No: '',
icd10Name: ''
});
// 编辑表单数据
const editFormData = reactive({
id: '',
glNo: '',
glName: '',
icd10No: '',
icd10Name: ''
});
// 表单验证规则
const rules = {
glNo: [
{ required: true, message: '请输入国临版疾病编码', trigger: 'blur' }
],
glName: [
{ required: true, message: '请输入国临版疾病名称', trigger: 'blur' }
],
icd10No: [
{ required: true, message: '请输入医保版疾病编码', trigger: 'blur' }
],
icd10Name: [
{ required: true, message: '请输入医保版疾病名称', trigger: 'blur' }
]
};
// 查询参数
const queryParams = reactive({
pageNum: 1,
pageSize: 10,
searchKey: undefined
});
// 查询
function handleQuery() {
queryParams.pageNum = 1;
getList();
}
// 重置
function resetQuery() {
Object.assign(queryParams, {
searchKey: undefined,
status: undefined,
ybFlag: undefined,
type: undefined
});
handleQuery();
}
// 分页变化
function handleSizeChange(size) {
queryParams.pageSize = size;
getList();
}
function handleCurrentChange(current) {
queryParams.pageNum = current;
getList();
}
function handleDelete() {
// 安全检查ids.value是否存在且为数组
if (!ids.value || ids.value.length === 0) {
ElMessage.warning('请先选择要删除的数据');
return;
}
// 显示确认对话框
ElMessageBox.confirm('确定要删除选中的数据吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
loading.value = true;
// 修复确保ids.value是数组并过滤掉无效值
const validIds = Array.isArray(ids.value) ? ids.value.filter(id => id) : [];
if (validIds.length === 0) {
loading.value = false;
ElMessage.warning('没有有效的数据可删除');
return;
}
// 简化删除逻辑,改为单个请求,因为后端可能不支持批量删除
// 先删除第一个,后续可以根据需要调整
const firstId = validIds[0];
request({
url: '/base-data-manage/ICD10/delete-icd-Information',
method: 'delete',
params: { glNo: firstId } // 传递glNo参数
}).then(res => {
loading.value = false;
if (res.code === 200) {
ElMessage.success('删除成功');
// 刷新列表
getList();
// 清空选中状态
ids.value = [];
} else {
ElMessage.error(res.msg || '删除失败');
}
}).catch(error => {
loading.value = false;
console.error('删除数据失败:', error);
ElMessage.error('删除失败,请稍后重试');
});
}).catch(() => {
// 用户取消删除操作
});
}
// 同时修复handleSelectionChange函数确保正确设置ids
function handleSelectionChange(selection) {
// 确保selection是数组
if (Array.isArray(selection)) {
ids.value = selection.map(item => {
// 尝试使用glNo如果没有则使用id确保返回有效的值
return item.glNo || item.id || '';
}).filter(Boolean); // 过滤掉空值
single.value = ids.value.length <= 1;
multiple.value = !single.value;
} else {
// 如果selection不是数组重置ids
ids.value = [];
single.value = true;
multiple.value = false;
}
}
// 打开添加对话框
function handleAdd() {
// 重置表单
addFormRef.value?.resetFields();
Object.assign(addFormData, {
glNo: '',
glName: '',
icd10No: '',
icd10Name: ''
});
// 显示对话框
addDialogVisible.value = true;
}
// 关闭对话框
function handleClose() {
addDialogVisible.value = false;
}
function handleEdit(row) {
// 填充编辑表单数据
Object.assign(editFormData, {
id: row.id || '',
glNo: row.glNo || '',
glName: row.glName || '',
icd10No: row.icd10No || '',
icd10Name: row.icd10Name || ''
});
// 显示编辑对话框
editDialogVisible.value = true;
}
function handleEditClose() {
editDialogVisible.value = false;
}
function handleEditSubmit() {
editFormRef.value?.validate((valid) => {
if (valid) {
// 移除查重校验,直接进行编辑操作
loading.value = true;
// 调用后端编辑接口
request({
url: '/base-data-manage/ICD10/update-icd-Information',
method: 'put',
data: editFormData
}).then(res => {
loading.value = false;
if (res.code === 200) {
console.log('编辑国临编码成功');
ElMessage.success('编辑成功');
editDialogVisible.value = false;
getList();
} else {
ElMessage.error(res.msg || '编辑失败');
}
}).catch(error => {
loading.value = false;
console.error('编辑国临编码失败:', error);
ElMessage.error('编辑失败,请稍后重试');
});
}
});
}
// 提交表单
function handleSubmit() {
addFormRef.value?.validate((valid) => {
if (valid) {
// 先进行查重校验
checkAddDuplicate().then(isDuplicate => {
if (isDuplicate) {
ElMessage.warning('该项目已存在,请检查国临编码或医保编码是否重复');
return;
}
loading.value = true;
// 调用后端添加接口
request({
url: '/base-data-manage/ICD10/add-icd-Information',
method: 'post',
data: addFormData // 直接提交表单数据
}).then(res => {
loading.value = false;
if (res.code === 200) {
// 成功提示
ElMessage.success('添加成功');
// 关闭对话框
addDialogVisible.value = false;
// 刷新列表
getList();
} else {
// 失败提示
ElMessage.error(res.msg || '添加失败');
}
}).catch(error => {
loading.value = false;
console.error('添加国临编码失败:', error);
ElMessage.error('添加失败,请稍后重试');
});
}).catch(error => {
console.error('查重校验失败:', error);
ElMessage.error('校验失败,请稍后重试');
});
}
});
}
// 查重校验函数
async function checkAddDuplicate() {
try {
// 查询现有数据列表
const res = await request({
url: '/base-data-manage/ICD10/information-page',
method: 'get',
params: {
pageNum: 1,
pageSize: 1000, // 查询足够多的数据进行校验
searchKey: undefined
}
});
if (res.code === 200 && res.data.records) {
// 检查是否存在相同的国临编码或医保编码
const isExist = res.data.records.some(item =>
item.glNo === addFormData.glNo || item.icd10No === addFormData.icd10No
);
return isExist;
}
return false;
} catch (error) {
console.error('查重校验请求失败:', error);
return false;
}
}
// 获取列表数据
function getList() {
loading.value = true;
request({
url: '/base-data-manage/ICD10/information-page',
method: 'get',
params: queryParams
}).then(res => {
loading.value = false;
if (res.code === 200) {
dataList.value = res.data.records || [];
total.value = res.data.total || 0;
}
}).catch(error => {
loading.value = false;
console.error('获取国临编码数据失败:', error);
});
}
// 页面初始化
onMounted(() => {
getList();
});
</script>
<style scoped>
.app-container {
padding: 20px;
}
.mb20 {
margin-bottom: 20px;
}
</style>