<template>
|
<div class="app-container">
|
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
<el-form-item label="科室" prop="ks">
|
<el-input v-model="queryParams.ks" placeholder="请输入科室" clearable @keyup.enter.native="handleQuery" />
|
</el-form-item>
|
<el-form-item label="检查项目" prop="jcxm">
|
<el-input v-model="queryParams.jcxm" placeholder="请输入检查项目" clearable @keyup.enter.native="handleQuery" />
|
</el-form-item>
|
<el-form-item label="主要诊断" prop="zyzd">
|
<el-input v-model="queryParams.zyzd" placeholder="请输入主要诊断" clearable @keyup.enter.native="handleQuery" />
|
</el-form-item>
|
<el-form-item>
|
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
<el-button icon="el-icon-refresh" size="mini" @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="el-icon-plus" size="mini" @click="handleAdd"
|
v-hasPermi="['hosp:advicerules:add']">新增
|
</el-button>
|
</el-col>
|
<el-col :span="1.5">
|
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
|
v-hasPermi="['hosp:advicerules:edit']">修改
|
</el-button>
|
</el-col>
|
<el-col :span="1.5">
|
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
|
v-hasPermi="['hosp:advicerules:remove']">删除
|
</el-button>
|
</el-col>
|
<el-col :span="1.5">
|
<el-button type="warning" plain icon="el-icon-upload2" size="mini" @click="handleImport">导入
|
</el-button>
|
</el-col>
|
<el-col :span="1.5">
|
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
|
v-hasPermi="['hosp:advicerules:export']">导出
|
</el-button>
|
</el-col>
|
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
</el-row>
|
|
<el-row :gutter="20" style="display: flex">
|
<el-col :span="5" :xs="24">
|
<div class="head-container">
|
<el-input v-model="xmmc" placeholder="请输入项目名" clearable size="small" prefix-icon="el-icon-search"
|
style="margin-bottom: 20px" />
|
</div>
|
<div class="scrollable-container">
|
<div class="content">
|
<el-tree :data="deptOptions" :props="defaultProps" :expand-on-click-node="false"
|
:filter-node-method="filterNode" ref="tree" node-key="id" :default-expanded-keys="treeId"
|
highlight-current @node-click="handleNodeClick" />
|
</div>
|
</div>
|
</el-col>
|
<el-col :span="19" :xs="24">
|
|
<el-table v-loading="loading" :data="advicerulesList" @selection-change="handleSelectionChange" height="520">
|
<el-table-column type="selection" width="55" align="center" />
|
<el-table-column label="序号" width="50" align="center">
|
<template slot-scope="scope">
|
{{ scope.$index + 1 }}
|
<!-- 使用 $index 来显示序号,从1开始 -->
|
</template>
|
</el-table-column>
|
<el-table-column label="编码" align="center" prop="bm" />
|
<el-table-column label="科室" align="center" prop="ks" />
|
<el-table-column label="检查项目" align="center" prop="jcxm" />
|
<el-table-column label="主要诊断" align="center" :show-overflow-tooltip="true" width="120" prop="zyzd" />
|
<el-table-column label="建议名称" align="center" :show-overflow-tooltip="true" width="150" prop="jymc" />
|
<el-table-column label="建议内容" align="center" :show-overflow-tooltip="true" width="200" prop="jynr" />
|
<el-table-column label="性别" align="center" prop="xb" :formatter="formatSex" />
|
<el-table-column label="范围" align="center" prop="fwz" />
|
<el-table-column label="范围最小值" align="center" prop="fwzxz" />
|
<el-table-column label="范围最大值" align="center" prop="fwzdz" />
|
<el-table-column label="异常标志" align="center" prop="ycbz" />
|
<el-table-column label="是否疾病" align="center" prop="sfjb">
|
</el-table-column>
|
<el-table-column label="是否常见病" align="center" prop="sfcjb">
|
</el-table-column>
|
<el-table-column label="是否慢性病" align="center" prop="sfmxb">
|
</el-table-column>
|
<el-table-column label="是否重大疾病" align="center" width="120" prop="sfzdjb"></el-table-column>
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
<template slot-scope="scope">
|
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
|
v-hasPermi="['hosp:advicerules:edit']">
|
</el-button>
|
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
|
v-hasPermi="['hosp:advicerules:remove']">
|
</el-button>
|
</template>
|
</el-table-column>
|
</el-table>
|
<div class="pag">
|
<div class="pag1">
|
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"
|
:limit.sync="queryParams.pageSize" @pagination="getListByXmId" />
|
</div>
|
</div>
|
</el-col>
|
</el-row>
|
|
|
<!-- 添加或修改体检项目建议规则新表对话框 -->
|
<el-dialog :title="title" :visible.sync="open" width="1000px" append-to-body :close-on-click-modal="false">
|
<el-form ref="form" :model="form" :rules="rules" label-width="80px" :inline="true">
|
<el-form-item label="科室" prop="ks">
|
<el-select v-model="form.ks" placeholder="请选择科室" style="width: 200px" @change="idFn">
|
<el-option v-for="item in departmentOptions" :key="item.id" :label="item.label" :value="item.label" />
|
</el-select>
|
</el-form-item>
|
<el-form-item label="检查项目" prop="jcxm">
|
<el-input v-model="form.jcxm" placeholder="请输入检查项目" style="width: 200px" />
|
</el-form-item>
|
<el-form-item label="主要诊断" prop="zyzd">
|
<el-input v-model="form.zyzd" placeholder="请输入主要诊断" style="width: 200px" />
|
</el-form-item>
|
|
<el-form-item label="范围" prop="fwz">
|
<el-input v-model="form.fwz" placeholder="请输入范围" style="width: 200px" />
|
</el-form-item>
|
<el-form-item label="最小值" prop="fwzxz">
|
<el-input v-model="form.fwzxz" style="width: 200px" placeholder="请输入范围最小值" />
|
</el-form-item>
|
<el-form-item label="最大值" prop="fwzdz">
|
<el-input v-model="form.fwzdz" style="width: 200px" placeholder="请输入范围最大值" />
|
</el-form-item>
|
<el-form-item label="异常标志" prop="ycbz">
|
<el-input v-model="form.ycbz" style="width: 200px" placeholder="请输入异常标志" />
|
</el-form-item>
|
|
<el-form-item label="疾病" prop="sfjb">
|
<el-checkbox v-model="form.sfjb" true-label="是" false-label="否">
|
</el-checkbox>
|
</el-form-item>
|
<el-form-item label="常见病" prop="sfcjb">
|
<el-checkbox v-model="form.sfcjb" true-label="是" false-label=""></el-checkbox>
|
</el-form-item>
|
<el-form-item label="慢性病" prop="sfmxb">
|
<el-checkbox v-model="form.sfmxb" true-label="是" false-label=""></el-checkbox>
|
</el-form-item>
|
<el-form-item label="重大疾病" prop="sfzdjb">
|
<el-checkbox v-model="form.sfzdjb" true-label="是" false-label=""></el-checkbox>
|
</el-form-item>
|
<el-form-item label="性别" prop="xb">
|
<el-select v-model="form.xb" placeholder="请选择体检人性别" style="width: 200px" clearable>
|
<el-option v-for="dict in dict.type.sys_user_sex" :key="dict.value" :label="dict.label"
|
:value="dict.value"></el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="建议名称" prop="jymc" style="display: block">
|
<el-input v-model="form.jymc" placeholder="请输入建议名称" style="width: 200px" />
|
</el-form-item>
|
|
<el-form-item label="建议内容" prop="jynr">
|
<span slot="label" style="display: inline-block; border-bottom: 2px solid blue" @click="getDetailed">
|
建议内容
|
</span>
|
|
<el-input v-if="key !== 'N'" style="width: 782px" type="textarea" :rows="3" v-model="form.jynr"
|
placeholder="请输入建议内容">
|
</el-input>
|
</el-form-item>
|
</el-form>
|
<div slot="footer" class="dialog-footer">
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
<el-button @click="cancel">取 消</el-button>
|
</div>
|
</el-dialog>
|
|
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
|
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" :data="data"
|
:action="upload.url" :disabled="upload.isUploading" :on-progress="handleFileUploadProgress"
|
:on-success="handleFileSuccess" :auto-upload="false" drag>
|
<i class="el-icon-upload"></i>
|
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
<div class="el-upload__tip text-center" slot="tip">
|
<div class="el-upload__tip" slot="tip">
|
<el-checkbox v-model="upload.updateSupport" />
|
是否更新已经存在的用户数据
|
</div>
|
<span>仅允许导入xls、xlsx格式文件。</span>
|
<!-- <el-link
|
type="primary"
|
:underline="false"
|
style="font-size: 12px; vertical-align: baseline"
|
@click="importTemplate"
|
>下载模板</el-link
|
> -->
|
</div>
|
</el-upload>
|
<div slot="footer" class="dialog-footer">
|
<el-button type="primary" @click="submitFileForm">保存信息</el-button>
|
<el-button @click="upload.open = false">取 消</el-button>
|
</div>
|
</el-dialog>
|
|
<!-- 建议内容及建议名称弹框 -->
|
<el-dialog title="建议内容" :visible.sync="dialogTableVisible" width="80%" :close-on-click-modal="false"
|
@close="clearForm">
|
<div class="app-container">
|
<el-form :model="form" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
<el-form-item label="标题" prop="title">
|
<el-input v-model="queryParam1.bt" placeholder="请输入标题" clearable @keyup.enter.native="handlecharge" />
|
</el-form-item>
|
<el-form-item label="建议内容" prop="jynr">
|
<el-input v-model="queryParam1.nr" placeholder="请输入建议" clearable @keyup.enter.native="handlecharge" />
|
</el-form-item>
|
<el-form-item>
|
<el-button type="primary" icon="el-icon-search" size="mini" @click="handlecharge">搜索</el-button>
|
</el-form-item>
|
</el-form>
|
|
<el-table v-loading="loading" :data="adviceList" ref="tb" @selection-change="handleSelectionChange1" border>
|
<el-table-column type="selection" align="center" fixed />
|
<el-table-column label="序号" align="center" width="60" prop="newID" />
|
<el-table-column label="标题" align="center" prop="title" width="120" :show-overflow-tooltip="true" />
|
<el-table-column label="建议" align="center" prop="advice" :show-overflow-tooltip="true" />
|
</el-table>
|
|
<div class="pag">
|
<div class="pag1">
|
<pagination v-show="total > 0" :total="total" :page.sync="queryParam1.page"
|
:limit.sync="queryParam1.pageSize" @pagination="getlistJynr" />
|
</div>
|
</div>
|
</div>
|
<div slot="footer" class="dialog-footer">
|
<el-button @click="dialogTableVisible = false">取 消</el-button>
|
<el-button type="primary" @click="submit">确 定</el-button>
|
</div>
|
</el-dialog>
|
</div>
|
</template>
|
|
<script>
|
import {
|
listAdvicerules,
|
getAdvicerules,
|
delAdvicerules,
|
addAdvicerules,
|
updateAdvicerules,
|
getTjProAdvicerulesKsList,
|
} from "@/api/hosp/advicerules";
|
import { listAdvice } from "@/api/advice/advice";
|
import { getToken } from "@/utils/auth";
|
import { deptTreeSelect } from "@/api/system/dept";
|
|
export default {
|
name: "Advicerules",
|
dicts: ["sys_user_sex"],
|
data() {
|
return {
|
// 遮罩层
|
loading: true,
|
// 选中数组
|
ids: [],
|
// 非单个禁用
|
single: true,
|
// 非多个禁用
|
multiple: true,
|
dialogTableVisible: false,
|
// 显示搜索条件
|
showSearch: true,
|
// 总条数
|
total: 0,
|
// 体检项目建议规则新表表格数据
|
advicerulesList: [],
|
adviceList: [],
|
deptOptions: [],
|
treeId: [],
|
// 弹出层标题
|
title: "",
|
xmmc: "",
|
// 是否显示弹出层
|
open: false,
|
key: "",
|
moduleName: "exampleModule", // 示例模块名
|
businessName: "exampleBusiness", // 示例业务名
|
objs: {},
|
departmentOptions: [],
|
defaultProps: {
|
children: "children",
|
label: "label",
|
},
|
// 查询参数
|
queryParams: {
|
pageNum: 1,
|
pageSize: 10,
|
bm: null,
|
ks: null,
|
jcxm: null,
|
zyzd: null,
|
jymc: null,
|
jynr: null,
|
sfjb: null,
|
sfcjb: null,
|
sfmxb: null,
|
sfzdjb: null,
|
sfzdjb: null,
|
},
|
queryParam1: {
|
page: 1,
|
pageSize: 10,
|
bt: "", // 标题
|
nr: "", // 建议内容
|
},
|
querycharge: {
|
pageNum: 1,
|
pageSize: 10,
|
},
|
// 表单参数
|
form: {
|
xb: "2",
|
},
|
// 表单校验
|
rules: {},
|
upload: {
|
// 是否显示弹出层(用户导入)
|
open: false,
|
// 弹出层标题(用户导入)
|
title: "",
|
// 是否禁用上传
|
isUploading: false,
|
// 是否更新已经存在的用户数据
|
updateSupport: 0,
|
// 设置上传的请求头部
|
headers: { Authorization: "Bearer " + getToken() },
|
// 上传的地址
|
url: process.env.VUE_APP_BASE_API + "/hosp/advicerules/tjimport",
|
},
|
data: [],
|
};
|
},
|
created() {
|
this.getList();
|
},
|
watch: {
|
// 根据名称筛选部门树
|
xmmc(val) {
|
this.$refs.tree.filter(val);
|
},
|
treeId(newVal, oldVal) {
|
if (newVal) {
|
this.$nextTick(() => {
|
document
|
.querySelector(".el-tree-node__children .el-tree-node__content")
|
.click();
|
});
|
}
|
},
|
},
|
methods: {
|
/** 查询体检项目建议规则新表列表 */
|
getList() {
|
/* this.loading = true;
|
listAdvicerules(this.queryParams).then((response) => {
|
this.advicerulesList = response.rows;
|
this.total = response.total;
|
this.loading = false;
|
}); */
|
getTjProAdvicerulesKsList().then((response) => {
|
this.deptOptions = response.data.map((name, index) => {
|
return {
|
id: index + 1, // 可自定义唯一 ID
|
label: name, // el-tree 默认的显示字段
|
};
|
});
|
|
// 设置默认展开项
|
this.treeId = [this.deptOptions[0]?.id];
|
this.queryParams.proId = this.deptOptions[0]?.id;
|
this.getListByXmId();
|
});
|
},
|
getListByXmId() {
|
this.loading = true;
|
listAdvicerules(this.queryParams).then((response) => {
|
response.rows.forEach((item, index) => {
|
item.newID =
|
(this.queryParams.pageNum - 1) * this.queryParams.pageSize +
|
index +
|
1;
|
});
|
this.advicerulesList = response.rows;
|
this.total = response.total;
|
this.loading = false;
|
});
|
},
|
handleNodeClick(data) {
|
this.formIn = data;
|
this.queryParams.ks = data.label;
|
this.getListByXmId();
|
},
|
|
// 筛选节点
|
filterNode(value, data) {
|
if (!value) return true;
|
// return data.label.indexOf(value) !== -1;
|
return (
|
data.label &&
|
typeof data.label === "string" &&
|
data.label.indexOf(value) !== -1
|
);
|
},
|
|
idFn(value) {
|
console.log("Selected Value:", value);
|
this.departmentOptions.forEach((item) => {
|
if (item.value == value) {
|
this.form.ks = item.label;
|
}
|
});
|
},
|
// 取消按钮
|
cancel() {
|
this.open = false;
|
this.reset();
|
},
|
// 表单重置
|
reset() {
|
this.form = {
|
id: null,
|
bm: null,
|
ks: null,
|
jcxm: null,
|
zyzd: null,
|
jymc: null,
|
jynr: null,
|
fwz: null,
|
fwzxz: null,
|
fwzdz: null,
|
ycbz: null,
|
sfjb: null,
|
sfcjb: null,
|
sfmxb: null,
|
sfzdjb: null,
|
createTime: null,
|
updateTime: null,
|
createBy: null,
|
updateBy: null,
|
deleted: null,
|
xb: "2",
|
};
|
if (this.$refs.form) {
|
this.$refs.form.resetFields();
|
}
|
},
|
/** 搜索按钮操作 */
|
handleQuery() {
|
this.queryParams.pageNum = 1;
|
this.getList();
|
},
|
handlecharge() {
|
this.querycharge.pageNum = 1;
|
this.getlistJynr();
|
},
|
clearForm() {
|
this.queryParam.bt = ""; // 清空标题
|
this.queryParam.nr = ""; // 清空建议内容
|
},
|
|
formatSex(row) {
|
const dictItem = this.dict.type.sys_user_sex.find(
|
(item) => item.value === row.xb
|
);
|
return dictItem ? dictItem.label : "";
|
},
|
|
handleSelectionChange1(selection) {
|
this.ChangeList = selection;
|
this.ids = selection.map((item) => item.id);
|
this.single = selection.length !== 1;
|
this.multiple = !selection.length;
|
if (selection.length > 1) {
|
let del_row = selection.shift();
|
this.$refs.tb.toggleRowSelection(del_row, false); //设置这一行取消选中
|
}
|
},
|
|
/** 重置按钮操作 */
|
resetQuery() {
|
this.resetForm("queryForm");
|
this.handleQuery();
|
},
|
getDetailed() {
|
this.getlistJynr();
|
this.dialogTableVisible = true;
|
this.key != "N";
|
},
|
/* 获取建议内容 */
|
getlistJynr() {
|
this.loading = true;
|
// this.List = true;
|
listAdvice(this.queryParam1).then((response) => {
|
response.data.list.forEach((item, index) => {
|
item.newID =
|
(this.queryParam1.page - 1) * this.queryParam1.pageSize + index + 1;
|
});
|
|
this.adviceList = response.data.list;
|
this.total = response.data.total;
|
this.loading = false;
|
});
|
},
|
|
/* 弹框确定按钮 */
|
submit() {
|
this.ChangeList.forEach((item) => {
|
this.form.jymc = item.title;
|
|
this.form.jynr = item.advice;
|
// this.sfxmId = parseInt(item.id);
|
});
|
this.dialogTableVisible = false;
|
this.key = "";
|
},
|
|
// 多选框选中数据
|
handleSelectionChange(selection) {
|
this.ids = selection.map((item) => item.id);
|
this.single = selection.length !== 1;
|
this.multiple = !selection.length;
|
},
|
/** 新增按钮操作 */
|
handleAdd() {
|
this.reset();
|
this.open = true;
|
this.title = "添加体检项目建议规则新表";
|
deptTreeSelect().then((response) => {
|
this.departmentOptions = response.data[0].children;
|
});
|
},
|
/** 修改按钮操作 */
|
handleUpdate(row) {
|
this.reset();
|
const id = row.id || this.ids;
|
getAdvicerules(id).then((response) => {
|
this.form = response.data;
|
this.open = true;
|
this.title = "修改体检项目建议规则新表";
|
});
|
|
deptTreeSelect().then((response) => {
|
this.departmentOptions = response.data[0].children;
|
});
|
},
|
|
submitForm() {
|
this.$refs["form"].validate((valid) => {
|
if (valid) {
|
if (this.form.id != null) {
|
updateAdvicerules(this.form).then((response) => {
|
console.log(response, 1111333);
|
|
this.$modal.msgSuccess("修改成功");
|
this.open = false;
|
this.getList();
|
});
|
} else {
|
addAdvicerules(this.form).then((response) => {
|
this.$modal.msgSuccess("新增成功");
|
this.open = false;
|
this.getList();
|
});
|
}
|
}
|
});
|
},
|
handleDelete(row) {
|
const pkValue = row.id || this.ids; // 获取主键值,如果row中没有主键值,则使用this.ids
|
this.$modal
|
.confirm(`是否确认删除"${pkValue}"的数据项?`)
|
.then(() => {
|
return delAdvicerules(pkValue); // 调用删除接口,传入主键值
|
})
|
.then(() => {
|
this.getList(); // 删除成功后刷新列表
|
this.$modal.msgSuccess("删除成功"); // 显示删除成功的提示
|
})
|
.catch(() => {
|
// 异常处理
|
});
|
},
|
handleImport() {
|
this.upload.title = "用户导入";
|
this.upload.open = true;
|
},
|
// 文件上传中处理
|
handleFileUploadProgress(event, file, fileList) {
|
this.upload.isUploading = true;
|
},
|
|
// 文件上传成功处理
|
handleFileSuccess(response, file, fileList) {
|
console.log(response, 666666);
|
if (response.code == 500) {
|
console.log(22222222222);
|
const errorList = response.data.list.join(", ");
|
this.$confirm(`${errorList}`, "以下人员信息有误,请核对后导入:", {
|
confirmButtonText: "确定",
|
cancelButtonText: "取消",
|
type: "error",
|
center: true,
|
dangerouslyUseHTMLString: true,
|
});
|
}
|
this.upload.open = false;
|
this.upload.isUploading = false;
|
this.$refs.upload.clearFiles();
|
this.leftList = response.msg;
|
console.log(response.code);
|
|
for (let i = 0; i < fileList.length; i++) {
|
if (file.name != fileList[i].name) {
|
this.fileList.push({
|
name: file.name,
|
url: "",
|
uid: file.uid,
|
});
|
}
|
}
|
},
|
// 提交上传文件
|
submitFileForm() {
|
this.$refs.upload.submit();
|
this.isShow = false;
|
this.getList();
|
},
|
|
handleExport() {
|
this.download(
|
"hosp/advicerules/export",
|
{
|
...this.queryParams,
|
},
|
`banner_${new Date().getTime()}.xlsx`
|
);
|
},
|
},
|
};
|
</script>
|
<style scoped>
|
.scrollable-container {
|
width: 260px;
|
/* 设置容器的宽度 */
|
height: 520px;
|
/* 设置容器的高度 */
|
overflow: auto;
|
/* 允许内容溢出时显示滚动条 */
|
border: 1px solid #ccc;
|
/* 可选:添加边框以更好地显示容器 */
|
position: relative;
|
/* 可选:使容器内的绝对定位元素能够正确显示 */
|
}
|
|
.content {
|
width: 1000px;
|
/* 设置内容的宽度,以触发水平滚动条 */
|
height: 420px;
|
/* 设置内容的高度,以触发垂直滚动条 */
|
}
|
.pag {
|
width: 100%;
|
display: flex;
|
justify-content: center;
|
}
|
|
.pag1 {
|
width: 65%;
|
}
|
</style>
|