postdischarge-ui/src/views/system/specialDiseaseRoute/index.vue
2024-07-11 16:53:11 +08:00

546 lines
20 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" ref="layout">
<el-row :gutter="20">
<el-col :span="5">
<DepartmentList ref="DepartmentList" @clickdepartment="clickdepartment" :methods="'selectDiseaseCount'">
</DepartmentList>
</el-col>
<el-col :span="19">
<div ref="topform" class="form">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
label-width="68px">
<el-form-item label="发布状态" prop="releaseStatus">
<el-select v-model="queryParams.releaseStatus" placeholder="请选择">
<el-option label="已发布" value="PUBLISHED" />
<el-option label="未发布" value="UNPUBLISHED" />
</el-select>
</el-form-item>
<el-form-item label="路径分类" prop="routeClassify">
<el-select v-model="queryParams.routeClassify" placeholder="请选择">
<el-option label="全部" value="ALL" />
<el-option label="科室管理路径" value="DEPARTMENT_MANAGE_PATH" />
<el-option label="专病管理路径" value="SPECIAL_DIEASE_MANAGE_PATH" />
</el-select>
</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>
</div>
<div ref="mb8" class="mb8">
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增主路径</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="['system:specialDiseaseRoute: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="['system:specialDiseaseRoute:remove']">删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
v-hasPermi="['system:specialDiseaseRoute:export']">导出</el-button>
</el-col> -->
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
</div>
<div ref="table">
<el-table :max-height="maxTableHeight" v-loading="loading" :data="specialDiseaseRouteList"
@selection-change="handleSelectionChange">
<el-table-column label="序号" type="index" width="55" align="center" />
<el-table-column label="路径名称" align="center" prop="routeName" />
<el-table-column label="版本号" align="center" prop="version" />
<el-table-column label="路径分类" align="center" prop="routeClassify">
<template slot-scope="scope">
{{ scope.row.routeClassify == 'DEPARTMENT_MANAGE_PATH' ? '科室管理路径' : '' }}
{{ scope.row.routeClassify == 'SPECIAL_DIEASE_MANAGE_PATH' ? '专病管理路径' : '' }}
</template>
</el-table-column>
<el-table-column label="发布状态" align="center" prop="releaseStatus">
<template slot-scope="scope">
<el-tag type="success" v-if="scope.row.releaseStatus == 'PUBLISHED'">已发布</el-tag>
<el-tag type="warning" v-else>未发布</el-tag>
</template>
</el-table-column>
<el-table-column label="病种名称" align="center" prop="diseaseTypeName" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" v-if="scope.row.releaseStatus == 'PUBLISHED'"
@click="norelease(scope.row)">取消发布</el-button>
<el-button size="mini" type="text" v-else @click="release(scope.row)">发布</el-button>
<!-- <el-button size="mini" type="text">复制</el-button> -->
<el-button size="mini" type="text" @click="handleUpdate(scope.row)"
v-hasPermi="['system:specialDiseaseRoute:edit']">编辑</el-button>
<el-button size="mini" type="text" @click="handleDelete(scope.row)"
v-hasPermi="['system:specialDiseaseRoute:remove']">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
<!-- <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize" @pagination="getList" /> -->
<myPagination v-show="total > 0" :total="total" :pageSize="queryParams.pageSize"
:indexFromWrap="queryParams.pageNum" @updateCPage="updateCPage"></myPagination>
</el-col>
</el-row>
<!-- 添加或修改专病路径信息对话框 -->
<el-dialog :title="title" :visible.sync="open" width="560px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-form-item label="所属科室" prop="departmentId">
<el-select v-model="form.departmentId" placeholder="请选择所属科室" style="width:380px" @change="changedepartment">
<el-option v-for="item in adddepartmentlist" :key="item.id" :label="item.departmentName" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="所属病种" prop="diseaseTypeId">
<el-select v-model="form.diseaseTypeId" placeholder="请选择所属病种" style="width:380px">
<el-option v-for="item in adddiseaselist" :key="item.id" :label="item.diseaseTypeName" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="所属服务包" prop="servicePackageId">
<el-select v-model="form.servicePackageId" placeholder="请选择所属服务包" style="width:380px" multiple>
<el-option v-for="item in addpackagelist" :key="item.id" :label="item.packageName" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="路径名称" prop="routeName">
<el-input v-model="form.routeName" placeholder="请输入路径名称" style="width:380px" />
</el-form-item>
<el-form-item label="版本号" prop="version">
<el-input v-model="form.version" placeholder="请输入版本号" style="width:380px" />
</el-form-item>
<el-form-item label="路径分类" prop="routeClassify">
<el-select v-model="form.routeClassify" placeholder="请选择路径分类" style="width:380px">
<el-option label="全部" value="ALL" />
<el-option label="科室管理路径" value="DEPARTMENT_MANAGE_PATH" />
<el-option label="专病管理路径" value="SPECIAL_DIEASE_MANAGE_PATH" />
</el-select>
</el-form-item>
<el-form-item label="适用范围" prop="suitRange">
<el-select v-model="form.suitRange" placeholder="请选择适用范围" style="width:380px">
<el-option label="在院" value="IN_THE_HOSPITAL" />
<el-option label="出院" value="DISCHARGE" />
<el-option label="门诊" value="OUTPATIENT_SERVICE" />
<el-option label="门诊+出院" value="OUTPATIENT_SERVICE_DISCHARGE" />
</el-select>
</el-form-item>
<el-form-item label="排序" prop="routeSort">
<el-input v-model="form.routeSort" placeholder="请输入排序" style="width:380px" />
</el-form-item>
<el-form-item label="备注信息" prop="routeRemark">
<el-input type="textarea" v-model="form.routeRemark" placeholder="请输入备注信息" style="width:380px" />
</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>
</div>
</template>
<script>
import {
listSpecialDiseaseRoute, getSpecialDiseaseRoute, addSpecialDiseaseRoute, updateSpecialDiseaseRoute,
editReleaseStatus, selectDiseaseCount, getDepartmentList, getdiseaseList, specialDiseaseRoutedel
} from "@/api/system/specialDiseaseRoute";
import {
servicepackageinfo
} from '@/api/manage/signRecord.js'
import DepartmentList from '../../components/DepartmentList.vue'
export default {
name: "SpecialDiseaseRoute",
components: { DepartmentList },
data() {
return {
maxTableHeight: undefined,
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 专病路径信息表格数据
specialDiseaseRouteList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
departmentId: null,
departmentName: null,
diseaseTypeId: null,
servicePackageId: null,
diseaseTypeName: null,
routeName: null,
routeCode: null,
version: null,
routeClassify: null,
releaseStatus: null,
suitRange: null,
routeSort: null,
routeRemark: null,
},
addDepartmentquery: {
hospitalAgencyId: null,
},
// 表单参数
form: {},
// 表单校验
rules: {
departmentId: [
{ required: true, message: "所属科室不能为空", trigger: "blur" }
],
diseaseTypeId: [
{ required: true, message: "所属病种不能为空", trigger: "blur" }
],
servicePackageId: [
{ required: true, message: "所属服务包不能为空", trigger: "blur" }
],
routeName: [
{ required: true, message: "路径名称不能为空", trigger: "blur" }
],
version: [
{ required: true, message: "版本号不能为空", trigger: "blur" }
],
routeClassify: [
{ required: true, message: "路径分类不能为空", trigger: "blur" }
],
suitRange: [
{ required: true, message: "适用范围不能为空", trigger: "blur" }
],
routeSort: [
{ required: true, message: "排序不能为空", trigger: "blur" }
],
},
adddepartmentlist: [],
adddiseaselist: [],
addpackagelist: [],
};
},
created() {
// this.getList();
},
mounted() {
this.getMaxTableHeight()
this.screenChange()
},
watch: {
},
methods: {
//接收科室列表传值
clickdepartment(item) {
this.queryParams.hospitalAgencyId = item.hospitalAgencyId
this.queryParams.hospitalAgencyName = item.hospitalAgencyName
this.queryParams.departmentId = item.itemid
this.addDepartmentquery.hospitalAgencyId = item.hospitalAgencyId
if (item.hospitalAgencyId) {
this.getList();
}
this.$forceUpdate()
},
updateCPage(index, size) {
this.queryParams.pageNum = index
this.queryParams.pageSize = size
this.getList();
},
addinfo() {
getDepartmentList(this.addDepartmentquery).then(res => {
this.adddepartmentlist = res.data
if (this.queryParams.departmentId) {
this.changedepartment(this.queryParams.departmentId)
}
})
},
//点击所属科室
changedepartment(id) {
getdiseaseList({ departmentId: id }).then(res => {
this.adddiseaselist = res.data
})
//服务包
servicepackageinfo({ departmentId: id }).then(res => {
this.addpackagelist = res.data
})
},
clickDepartmenitem(item) {
this.loading = true;
this.queryParams.departmentId = item.id;
this.getList();
},
/** 查询专病路径信息列表 */
getList() {
this.loading = true;
listSpecialDiseaseRoute(this.queryParams).then(response => {
this.specialDiseaseRouteList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
routePackageList: null,
id: null,
departmentId: null,
departmentName: null,
diseaseTypeId: null,
servicePackageId: null,
diseaseTypeName: null,
routeName: null,
routeCode: null,
version: null,
routeClassify: null,
releaseStatus: "UNPUBLISHED",
suitRange: null,
routeSort: null,
routeRemark: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.adddepartmentlist.hospitalAgencyId = JSON.parse(localStorage.getItem('user')).hospitalAgencyId
this.queryParams.hospitalAgencyId = JSON.parse(localStorage.getItem('user')).hospitalAgencyId
this.$refs.DepartmentList.resetQuery()
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
if (this.queryParams.departmentId) {
this.form.departmentId = this.queryParams.departmentId
}
this.title = "添加专病路径信息";
this.addinfo();
},
/** 修改按钮操作 */
handleUpdate(row) {
// this.reset();
// const id = row.id || this.ids
// getSpecialDiseaseRoute(id).then(response => {
// this.form = response.data;
// this.open = true;
// this.title = "修改专病路径信息";
// });
// this.$store.dispatch('tagsView/delView', this.$route).then(({ visitedViews }) => {
this.$router.push({
path: "/specialdisease/editorialSpecialization",
query: {
path: "/specialdisease/specialDiseaseRoute",
id: row.id,
diseaseTypeName: row.diseaseTypeName,
version: row.version,
routeName: row.routeName,
}
});
// })
},
/** 提交按钮 */
submitForm() {
if (this.form.departmentId && this.adddepartmentlist?.length > 0) {
this.form.departmentName = this.adddepartmentlist.find(e => e.id == this.form.departmentId)?.departmentName
}
if (this.form.diseaseTypeId && this.adddiseaselist?.length > 0) {
this.form.diseaseTypeName = this.adddiseaselist.find(e => e.id == this.form.diseaseTypeId)?.diseaseTypeName
}
if (this.form.servicePackageId?.length > 0 && this.addpackagelist?.length > 0) {
let routePackageList = []
this.addpackagelist.forEach(e => {
this.form.servicePackageId.forEach(el => {
if (e.id == el) {
let item = {
servicePackageId: el,
packageName: e.packageName
}
routePackageList.push(item)
}
})
})
this.form.routePackageList = routePackageList
}
this.form.hospitalAgencyId = this.queryParams.hospitalAgencyId
this.form.hospitalAgencyName = this.queryParams.hospitalAgencyName
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateSpecialDiseaseRoute(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
this.$refs.DepartmentList.Departmentlist()
});
} else {
addSpecialDiseaseRoute(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
this.$refs.DepartmentList.Departmentlist()
});
}
}
});
},
//发布
release(item) {
this.$confirm('是否发布此路径?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
}).then(() => {
var obj = { ...item }
obj.releaseStatus = 'PUBLISHED'
editReleaseStatus(obj).then(response => {
this.$message({
type: 'success',
message: '发布成功!'
});
this.getList();
});
})
},
//取消发布
norelease(item) {
this.$confirm('是否取消发布此路径?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
}).then(() => {
var obj = { ...item }
obj.releaseStatus = 'REVOKE'
editReleaseStatus(obj).then(response => {
this.$message({
type: 'success',
message: '取消发布成功!'
});
this.getList();
});
})
},
/** 删除按钮操作 */
handleDelete(row) {
//删除主路径
this.$confirm('此操作会删除主路径, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
}).then(() => {
specialDiseaseRoutedel(row.id).then(res => {
this.getList();
this.$modal.msgSuccess("删除主路径成功");
this.$refs.DepartmentList.Departmentlist()
})
})
},
/** 导出按钮操作 */
handleExport() {
this.download('system/specialDiseaseRoute/export', {
...this.queryParams
}, `specialDiseaseRoute_${new Date().getTime()}.xlsx`)
},
// 获取表格最高高度
getMaxTableHeight() {
const windowInnerHeight = window.innerHeight // 屏幕可视高度
const layoutDiv = this.$refs.layout
const formDiv = this.$refs.topform
const mb8Div = this.$refs.mb8
this.maxTableHeight =
windowInnerHeight - 134 -
this.getBoxPadding(layoutDiv) -
this.getBoxHeight(mb8Div) -
this.getBoxHeight(formDiv)
},
// 屏幕resize监听
screenChange() {
// 屏幕resize监听事件一旦屏幕宽高发生变化就会执行resize
window.addEventListener('resize', this.getMaxTableHeight, true)
// 将屏幕监听事件移除
// 这步是必须的。离开页面时不移除,再返回,或者进入到别的有相同元素的页面会报错
// 或者将这里的方法直接写在beforeDestroy函数中也可以
this.$once('hook:beforeDestroy', () => {
window.removeEventListener('resize', this.getMaxTableHeight, true)
})
},
}
};
</script>
<style scoped lang="scss">
.left {
height: calc(100vh - 119px);
overflow: auto;
.name {
font-weight: 700;
margin-bottom: 10px;
}
.listitem {
width: 100%;
height: 50px;
border-bottom: 1px solid #dcdfe6;
position: relative;
.count {
display: inline-block;
position: absolute;
left: 210px;
color: #a4a6aa;
top: 50%;
transform: translateY(-50%);
font-size: 13px;
}
.all {
height: 50px;
line-height: 50px;
padding-left: 13px;
}
.allactive {
background: #e8f4ff;
height: 50px;
line-height: 50px;
padding-left: 13px;
border-left: 3px solid #4d9de7;
}
}
}
</style>
<style lang="scss" scoped>
.app-container {
padding: 20px 0 0 20px !important;
}
::v-deep .el-row {
height: 100% !important;
}
</style>