Files
his/openhis-ui-vue3/src/views/catalog/disease/index.vue
2025-09-25 10:36:59 +08:00

507 lines
15 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="app-container">
<el-row :gutter="20">
<!--疾病目录数据-->
<el-col :span="4" :xs="24">
<div class="head-title">疾病目录</div>
<div class="head-container">
<el-tree
:data="conditionDefinitionOptions"
:props="{ label: 'info', children: 'children' }"
:expand-on-click-node="false"
:filter-node-method="filterNode"
ref="deptTreeRef"
node-key="value"
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-item label="疾病:" prop="searchKey">
<el-input
v-model="queryParams.searchKey"
placeholder="名称/ICD10编码/拼音助记码"
clearable
style="width: 240px"
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="状态" prop="statusEnum">
<el-select v-model="queryParams.statusEnum" style="width: 240px" clearable>
<el-option
v-for="status in statusFlagOptions"
:key="status.value"
:label="status.info"
:value="status.value"
/>
</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>
</el-form-item> -->
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd">添加新项目</el-button>
</el-col>
<el-col :span="1.5">
<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-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="warning"
plain
icon="Download"
@click="handleExport"
v-hasPermi="['system:user:export']"
>导出Excel</el-button
>
</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
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</el-col>
</el-row>
<!-- 添加或修改用户配置对话框 -->
<el-dialog :title="title" v-model="open" width="600px" append-to-body>
<el-form :model="form" :rules="rules" ref="diseaseRef" label-width="80px">
<el-row>
<el-col :span="12">
<el-form-item label="名称" prop="name">
<el-input
v-model="form.name"
placeholder="请输入名称"
:disabled="form.id != undefined"
/>
</el-form-item>
</el-col>
<el-col :span="12" v-if="form.id != undefined">
<el-form-item label="编码" prop="conditionCode">
<el-input v-model="form.conditionCode" placeholder="请输入编码" disabled />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="疾病类型" prop="sourceEnum">
<el-select
v-model="form.sourceEnum"
placeholder="请选择"
clearable
:disabled="form.sourceEnum != '' && form.sourceEnum != undefined"
>
<el-option
v-for="dict in conditionDefinitionList"
:key="dict.value"
:label="dict.info"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="类型" prop="typeCode">
<el-select v-model="form.typeCode" placeholder="请选择" 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-col>
</el-row>
<el-row>
<!-- <el-col :span="12">
<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-col :span="12">
<el-form-item label="医保编码" prop="ybNo">
<el-input v-model="form.ybNo" placeholder="" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="医保标记" prop="ybFlag">
<el-checkbox v-model="form.ybFlag"></el-checkbox>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="医保对码" prop="ybMatchFlag">
<el-checkbox v-model="form.ybMatchFlag"></el-checkbox>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="16">
<el-form-item label="说明" prop="description">
<el-input
v-model="form.description"
:autosize="{ minRows: 4, maxRows: 10 }"
type="textarea"
placeholder=""
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="Disease">
import {
getDiseaseList,
editDisease,
addDisease,
getDiseaseCategory,
getDiseaseOne,
stopDisease,
startDisease,
} from './components/disease';
const { proxy } = getCurrentInstance();
const { condition_type_code } = proxy.useDict('condition_type_code');
const diseaseList = ref([]);
const open = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const title = ref('');
const conditionDefinitionOptions = ref(undefined);
const conditionDefinitionList = ref(undefined);
const conditionDefinition = ref(undefined);
// 是否停用
const statusFlagOptions = ref(undefined);
const data = reactive({
form: {},
queryParams: {
pageNo: 1,
pageSize: 10,
searchKey: undefined, // 疾病名称
statusEnum: undefined, // 状态(包括 1预置2启用3停用
sourceEnum: undefined, // 来源(包括 1病种目录分类2自定义
},
rules: {
name: [{ required: true, message: '名称不能为空', trigger: 'blur' }],
//typeCode: [{ required: true, message: "类型不能为空", trigger: "blur" }],
// statusEnum: [{ required: true, message: "状态不能为空", trigger: "blur" }],
// ybFlag: [{ required: true, message: "医保标记不能为空", trigger: "blur" }],
// ybMatchFlag: [
// { required: true, message: "医保对码标记不能为空", trigger: "blur" },
// ],
},
});
const { queryParams, form, rules } = toRefs(data);
/** 通过条件过滤节点 */
const filterNode = (value, data) => {
if (!value) return true;
return data.label.indexOf(value) !== -1;
};
/** 病种目录分类查询下拉树结构 */
function getDiseaseCategoryList() {
getDiseaseCategory().then((response) => {
console.log(response, 'response病种目录分类查询下拉树结构');
conditionDefinitionOptions.value = JSON.parse(
JSON.stringify(response.data.diseaseCategoryList)
).sort((a, b) => {
return parseInt(a.value) - parseInt(b.value);
});
conditionDefinitionOptions.value.push({ info: '全部', value: '' });
conditionDefinitionList.value = JSON.parse(
JSON.stringify(response.data.diseaseCategoryList)
).sort((a, b) => {
return parseInt(a.value) - parseInt(b.value);
});
statusFlagOptions.value = response.data.statusFlagOptions;
});
}
/** 查询病种目录列表 */
function getList() {
loading.value = true;
getDiseaseList(queryParams.value).then((res) => {
loading.value = false;
diseaseList.value = res.data.records;
total.value = res.data.total;
console.log(total.value, 'total.value', res, 'res');
});
}
/** 节点单击事件 */
function handleNodeClick(data) {
queryParams.value.sourceEnum = data.value;
conditionDefinition.value = data.value;
handleQuery();
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNo = 1;
getList();
}
/** 启用按钮操作 */
function handleStart(row) {
const stardIds = row.id || ids.value;
proxy.$modal
.confirm('是否确定启用数据!')
.then(function () {
return startDisease(stardIds);
})
.then(() => {
getList();
proxy.$modal.msgSuccess('启用成功');
})
.catch(() => {});
}
/** 停用按钮操作 */
function handleClose(row) {
const stopIds = row.id || ids.value;
proxy.$modal
.confirm('是否确认停用数据!')
.then(function () {
return stopDisease(stopIds);
})
.then(() => {
getList();
proxy.$modal.msgSuccess('停用成功');
})
.catch(() => {});
}
/** 导出按钮操作 */
function handleExport() {
proxy.download(
'system/user/export',
{
...queryParams.value,
},
`user_${new Date().getTime()}.xlsx`
);
}
/** 选择条数 */
function handleSelectionChange(selection) {
ids.value = selection.map((item) => item.id);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
/** 重置操作表单 */
function reset() {
form.value = {
id: undefined,
conditionCode: undefined,
pyStr: undefined,
statusEnum: undefined,
sourceEnum: undefined,
typeCode: undefined,
description: undefined,
ybFlag: undefined,
ybNo: undefined,
ybMatchFlag: undefined,
};
proxy.resetForm('diseaseRef');
}
/** 取消按钮 */
function cancel() {
open.value = false;
reset();
}
/** 新增按钮操作 */
function handleAdd() {
// if (conditionDefinition.value === undefined) {
// return proxy.$modal.msgError("请选择病种目录分类");
// }
reset();
form.value.sourceEnum = conditionDefinition.value;
open.value = true;
title.value = '新增';
}
/** 修改按钮操作 */
function handleUpdate(row) {
reset();
getDiseaseOne(row.id).then((response) => {
console.log(response, 'responsebbbb', row.id);
form.value = response.data;
form.value.ybFlag == 1 ? (form.value.ybFlag = true) : (form.value.ybFlag = false);
form.value.ybMatchFlag == 1
? (form.value.ybMatchFlag = true)
: (form.value.ybMatchFlag = false);
getList();
});
// console.log(row, "row");
// form.value = JSON.parse(JSON.stringify(row));
open.value = true;
title.value = '病种编辑';
}
/** 提交按钮 */
function submitForm() {
proxy.$refs['diseaseRef'].validate((valid) => {
if (valid) {
form.value.sourceEnum = conditionDefinition.value;
form.value.ybFlag ? (form.value.ybFlag = 1) : (form.value.ybFlag = 0);
form.value.ybMatchFlag ? (form.value.ybMatchFlag = 1) : (form.value.ybMatchFlag = 0);
if (form.value.id != undefined) {
console.log(form.value, 'editDisease', form.value.statusEnum);
editDisease(form.value).then((response) => {
proxy.$modal.msgSuccess('修改成功');
open.value = false;
getList();
});
} else {
addDisease(form.value).then((response) => {
proxy.$modal.msgSuccess('新增成功');
open.value = false;
getList();
});
}
}
});
}
getDiseaseCategoryList();
getList();
</script>
<style scoped>
.custom-tree-node {
display: flex;
align-items: center;
}
</style>