患者管理

20231126-yw
wj 1 year ago
parent 267bd274ff
commit b819d48351

@ -0,0 +1,18 @@
import axios from "@/utils/request"
export function page(query) {
return axios({
url: "/udiwms/basic/sk/prescribe/filter",
method: "get",
params: query
});
}
export function detail(query) {
return axios({
url: "/udiwms/basic/sk/prescribe/detail",
method: "get",
params: query
});
}

@ -0,0 +1,10 @@
import axios from "@/utils/request"
export function page(query) {
return axios({
url: "/udiwms/basic/sk/sicker/filter",
method: "get",
params: query
});
}

@ -123,11 +123,11 @@ export function filterDynamicRoutes(routes) {
export const loadView = (view) => {
if (process.env.NODE_ENV === 'development') {
return (resolve) => require([`@/views/${view}`], resolve)
return (resolve) => require([`@/views/${view}.vue`], resolve)
} else {
// 使用 import 实现生产环境的路由懒加载
// return () => import(`@/views/${view}`)
return (resolve) => require([`@/views/${view}`], resolve)
return (resolve) => require([`@/views/${view}.vue`], resolve)
}
}

@ -0,0 +1,109 @@
import {page} from "@/api/basic/sicker/skPersonApi";
import {detail, page as prescribePage} from "@/api/basic/sicker/prescribeApi";
let query = {
name: "",
code: "",
adNum: "",
page: 1,
limit: 10
}
let prescribeQuery = {
sickerCode: '',
page: 1,
limit: 10
}
export default {
data() {
return {
fullscreenLoading:false,
showSearch: true,
filterQuery: {...query},
editType: "",
formVisible: false,
selectFormVisible: false,
loading: false,
formName: "",
total: 0,
list: [],
// =============患者=================
showSickerDialog:false,
sicker:null,
// =============患者end================
// ============处方=============
sickerInfo:null,
showPrescribeDetailDialog:false,
prescribeLoading: false,
prescribeList: [],
prescribeTotal: 0,
prescribeQuery: {...prescribeQuery},
prescribeDetail: null
// ============处方end=============
};
}
,
mounted() {
},
created() {
this.getList()
},
methods: {
onReset() {
this.filterQuery = {...query}
this.getList()
},
onSubmit() {
this.filterQuery.page = 1;
this.getList()
},
getList() {
this.loading = true
page(this.filterQuery).then(res => {
this.loading = false
this.list = res.data.list || []
this.total = res.data.total || 0
}).catch(() => {
this.loading = false
this.list = []
this.total = 0
this.roles = []
});
},
sickerClick(row) {
this.sickerInfo={...row}
this.prescribeQuery = {...prescribeQuery}
this.prescribeQuery.sickerCode = row.code
this.prescribeLoading = true
prescribePage(this.prescribeQuery).then(res => {
this.prescribeLoading = false
this.prescribeList = res.data.list || []
this.prescribeTotal = res.data.total || 0
}).catch(()=>{
this.prescribeLoading = false
this.prescribeList = []
this.prescribeTotal = 0
})
},
showSickerInfo(row){
this.sicker = {...row}
this.showSickerDialog = true
},
showPrescribeDetail(row){
this.fullscreenLoading = true
detail({prescribeCode:row.code}).then(res=>{
this.fullscreenLoading = false
if(res.code!=20000){
this.$message.error(res.message)
return
}
this.prescribeDetail = res.data
this.showPrescribeDetailDialog = true
}).catch (() => {
this.fullscreenLoading = false
this.$message.error("数据加载失败")
})
}
}
}

@ -1,42 +1,46 @@
<template>
<div>
<el-card>
<el-form :model="filterQuery" label-width="100px" size="mini">
<el-row>
<el-col :span="6">
<el-form-item label="项目名称:" class="query-form-item">
<el-input v-model="filterQuery.name" placeholder="请输入项目名称"></el-input>
<el-card header="患者信息">
<el-form :model="filterQuery" v-show="showSearch" label-width="auto" size="mini">
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="患者编号:" class="query-form-item">
<el-input v-model="filterQuery.code" placeholder="请输入患者编号"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="项目编码:" class="query-form-item">
<el-input v-model="filterQuery.code" placeholder="请输入项目编码"></el-input>
<el-col :span="8">
<el-form-item label="患者姓名:" class="query-form-item">
<el-input v-model="filterQuery.name" placeholder="请输入患者姓名"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item>
<el-button-group>
<el-button type="primary" icon="el-icon-refresh" @click="onReset"></el-button>
<el-button type="primary" icon="el-icon-search" @click="onSubmit"></el-button>
<el-button type="primary" icon="el-icon-plus" @click="handleAddClick"></el-button>
</el-button-group>
<el-form-item label="住院号:" class="query-form-item">
<el-input v-model="filterQuery.adNum" placeholder="请输入住院号"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-button-group class="top-right-btn">
<el-button type="primary" icon="el-icon-refresh" @click="showSearch = !showSearch">显示/隐藏搜索栏</el-button>
<el-button type="primary" icon="el-icon-refresh" @click="onReset"></el-button>
<el-button type="primary" icon="el-icon-search" @click="onSubmit"></el-button>
</el-button-group>
<el-divider></el-divider>
<el-table v-loading="loading" :data="list" @current-change="handleDetail" border highlight-current-row
<el-table v-loading="loading" :data="list"
@row-click="sickerClick"
border highlight-current-row
style="width: 100%">
<el-table-column label="序号" type="index"></el-table-column>
<el-table-column label="项目编码" prop="code" width="140"></el-table-column>
<el-table-column label="项目名称" prop="name" width="160"></el-table-column>
<el-table-column label="备注" prop="remark" width="180"></el-table-column>
<el-table-column label="创建人" prop="createByName" width="140"></el-table-column>
<el-table-column label="创建时间" prop="createTime" width="160"></el-table-column>
<el-table-column label="操作" width="160" fixed="right">
<el-table-column label="序号" type="index" width="50"></el-table-column>
<el-table-column label="患者编号" prop="code" width="120"></el-table-column>
<el-table-column label="患者姓名" prop="name" width="120"></el-table-column>
<el-table-column label="性别" prop="createByName" width="120"></el-table-column>
<el-table-column label="住院号" prop="adNum" width="120"></el-table-column>
<el-table-column label="职业" prop="gender" width="120"></el-table-column>
<el-table-column label="最后更新时间" prop="createTime" width="120"></el-table-column>
<el-table-column label="操作" width="120" fixed="right">
<template slot-scope="scope">
<el-button type="text" size="small" @click.native.stop="handleModifyClick(scope.row)">编辑</el-button>
<el-button type="text" size="small" @click.native.stop="deleteDialog(scope.row)">删除</el-button>
<el-button type="text" @click="showSickerInfo(scope.row)"></el-button>
</template>
</el-table-column>
</el-table>
@ -46,316 +50,134 @@
:total="total"
:limit.sync="filterQuery.limit"
:page.sync="filterQuery.page"
@pagination="handleCurrentChange"
@pagination="getList"
></pagination>
</el-card>
<el-card>
<el-row>
<el-col :span="24">
<el-button type="primary" style="float: right;margin-bottom: 12px;margin-right: 20px" size="small"
icon="search" @click="selectProduct">新增产品
</el-button>
</el-col>
</el-row>
<el-table v-loading="loading" :data="delectList" border highlight-current-row style="width: 100%">
<el-table-column label="序号" type="index"></el-table-column>
<el-table-column label="产品DI" prop="nameCode"></el-table-column>
<el-table-column label="产品编码" prop="thirdId"></el-table-column>
<el-table-column label="产品名称" prop="cpmctymc"></el-table-column>
<el-table-column label="规格型号" prop="ggxh"></el-table-column>
<el-table-column label="计量单位" prop="measname"></el-table-column>
<el-table-column label="数量" prop="count">
<template slot="header">
{{ '处方信息' + (sickerInfo ? '--' + sickerInfo.name + `(${sickerInfo.code})` : "") }}
</template>
<el-table v-loading="prescribeLoading" :data="prescribeList" style="width: 100%">
<el-table-column label="序号" type="index" width="50"/>
<el-table-column label="处方编号" prop="code" width="120"/>
<el-table-column label="开方时间" prop="prescribeDate" width="150"/>
<el-table-column label="开方医生" prop="createDr" width="120"/>
<el-table-column label="科室名称" prop="deptName" width="120"/>
<el-table-column label="处方费用" prop="amount" width="140">
<template slot-scope="scope">
<el-input size="small" v-model="scope.row.count"
placeholder="请输入数量" style="width: 80%"
type='number'
:disabled="scope.row.index !== selectedIndex"
oninput="value=value.replace(/[^\d]/g,'')"></el-input>
{{ scope.row.amount ? '¥' + scope.row.amount : "--" }}
</template>
</el-table-column>
<el-table-column label="生产企业" prop="ylqxzcrbarmc"></el-table-column>
<el-table-column label="注册/备案号" prop="zczbhhzbapzbh"></el-table-column>
<el-table-column label="操作" width="220">
<el-table-column label="诊断内容" prop="diagnosis" width="280"/>
<el-table-column label="备注" prop="remark" width="280"/>
<el-table-column label="操作" fixed="right" width="120">
<template slot-scope="scope">
<el-button type="text" size="small" :disabled="scope.row.index === selectedIndex"
@click.native.stop="rowChange(scope.row)">编辑
</el-button>
<el-button type="text" size="small" :disabled="scope.row.index !== selectedIndex" @click.stop="true"
@click.native="tableCountChange(scope.row)">保存
<el-button type="text" @click="showPrescribeDetail(scope.row)"
v-loading.fullscreen.lock="fullscreenLoading">查看
</el-button>
<el-button type="text" size="small" @click.native.stop="delectModifyClick(scope.row)">移除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="delectTotal>0"
:total="delectTotal"
:limit.sync="delectQuery.limit"
:page.sync="delectQuery.page"
@pagination="handleCurrentDelectChange"
v-show="prescribeTotal>0"
:total="prescribeTotal"
:limit.sync="filterQuery.limit"
:page.sync="filterQuery.page"
@pagination="getList"
></pagination>
</el-card>
<el-dialog
:title="formMap[formName]"
:visible.sync="formVisible"
:close-on-click-modal="false"
:close-on-press-escape="false"
width="40%"
:before-close="closeDialog"
v-if="formVisible"
:title="`患者详情(${sicker.name})`"
:visible="true"
v-if="showSickerDialog"
@clos="showSickerDialog = false"
width="55%"
>
<destinyModelEdit
:editQuery="editQuery"
:closeDialog="closeDialog"
></destinyModelEdit>
<el-descriptions title="" :column="2"
label-style="width:80px;font-weight:bolder;font-size:14px;color:black;" border>
<el-descriptions-item label="姓名">{{ sicker.name }}</el-descriptions-item>
<el-descriptions-item label="编号">{{ sicker.code }}</el-descriptions-item>
<el-descriptions-item label="性别">{{ sicker.gender || "--" }}</el-descriptions-item>
<el-descriptions-item label="年龄">{{ sicker.age || "--" }}</el-descriptions-item>
<el-descriptions-item label="住院号">{{ sicker.adNum || "--" }}</el-descriptions-item>
</el-descriptions>
<el-row class="mt10">
<el-col align="center">
<el-button type="primary" @click.native="showSickerDialog = false">关闭</el-button>
</el-col>
</el-row>
</el-dialog>
<el-dialog
title="选入产品"
:visible.sync="selectFormVisible"
append-to-body
:close-on-click-modal="false"
:close-on-press-escape="false"
width="80%"
:before-close="closeProudDialog"
v-if="selectFormVisible"
:title="`处方详情(编号:${prescribeDetail.code})`"
:visible="true"
v-if="showPrescribeDetailDialog"
@close="showPrescribeDetailDialog = false"
width="55%"
>
<destinySelectProduct
:editQuery="editLogin"
:closeDialog="closeProudDialog"
></destinySelectProduct>
<el-divider content-position="left"><span type="info" style="font-size: 16px;font-weight: bold">患者信息</span>
</el-divider>
<el-descriptions title="" :column="4" class="mt10 mb20"
label-style="width:80px;font-weight:bolder;font-size:14px;color:black;" border>
<el-descriptions-item label="姓名">{{ prescribeDetail.sicker.name }}</el-descriptions-item>
<el-descriptions-item label="编号">{{ prescribeDetail.sicker.code }}</el-descriptions-item>
<el-descriptions-item label="性别">{{ prescribeDetail.sicker.gender || "--" }}</el-descriptions-item>
<el-descriptions-item label="年龄">{{ prescribeDetail.sicker.age || "--" }}</el-descriptions-item>
</el-descriptions>
<el-divider content-position="left"><span type="info" style="font-size: 16px;font-weight: bold">处方信息</span>
</el-divider>
<el-tabs type="border-card">
<el-tab-pane label="处方内容">
<el-descriptions title="" :column="4" label-style="width:80px;font-weight:bolder;font-size:14px;color:black;"
border>
<el-descriptions-item label="处方编号">{{ prescribeDetail.code }}</el-descriptions-item>
<el-descriptions-item label="开方医生">{{ prescribeDetail.createDr }}</el-descriptions-item>
<el-descriptions-item label="就诊科室">{{ prescribeDetail.deptName }}</el-descriptions-item>
<el-descriptions-item label="费用">{{
prescribeDetail.amount ? '¥' + prescribeDetail.amount : "--"
}}
</el-descriptions-item>
<el-descriptions-item label="开方日期" :span="4">{{ prescribeDetail.prescribeDate }}</el-descriptions-item>
<el-descriptions-item label="诊断内容" :span="4">
<div style="min-height: 250px;max-height:500px;margin: 10px;overflow-y: auto;font-size: 14px;color:red;">
{{ prescribeDetail.diagnosis }}
</div>
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane label="处方明细" class="mt10">
<el-table :data="prescribeDetail.items">
<el-table-column label="序号" type="index" width="50px"/>
<el-table-column label="名称" prop="itemName" width="160px"/>
<el-table-column label="计量数量" prop="measureCount" width="80px"/>
<el-table-column label="计量单位" prop="measureUnit" width="80px"/>
<el-table-column label="类别" prop="category" width="80px"/>
<el-table-column label="频次" prop="frequency" width="100px"/>
<el-table-column label="规格型号" prop="ggxh" width="120px"/>
<el-table-column label="数量" prop="count" width="80px"/>
<el-table-column label="单价" prop="price" width="140px"/>
<el-table-column label="总价" prop="amount" width="140px"/>
</el-table>
</el-tab-pane>
</el-tabs>
<el-row class="mt10">
<el-col align="center">
<el-button type="primary" @click.native="showPrescribeDetailDialog = false">关闭</el-button>
</el-col>
</el-row>
</el-dialog>
</div>
</template>
<script>
import {
addModeldestiny,
delectModeldestiny, delectModeldestinyProduct,
filterDestinyDelect,
getBasicDestinyfilter, uploadModeldestinyProduct
} from "@/api/basic/basicDestinyRel";
import destinyModelEdit from "@/views/basic/destiny/destinyModelEdit";
import destinyModelSelectProduct from "@/views/basic/destiny/destinyModelSelectProduct";
import destinySelectProduct from "@/views/basic/destiny/destinySelectProduct";
export default {
data() {
return {
filterQuery: {
name: "",
code: "",
type: 2,
page: 1,
limit: 20
},
editType: "",
formVisible: false,
selectFormVisible: false,
loading: false,
formName: "",
total: 0,
list: [],
codeArray: [],
editQuery: {},
formMap: {
"add": "物资项目-新增",
"edit": "物资项目-编辑"
},
delectQuery: {
id: null,
page: 1,
limit: 20
},
delectList: [],
delectTotal: 0,
selectedIndex: '',
<script src="./skPerson.js"/>
editLogin: {
id: null,
cpmctymc: null,
ids: [],
page: 1,
limit: 10,
},
};
},
methods: {
onReset() {
this.$router.push({
path: ""
});
this.filterQuery = {
name: "",
code: "",
type: 2,
page: 1,
limit: 20
};
this.getList();
},
onSubmit() {
this.$router.push({
path: "",
});
this.filterQuery.page = 1;
this.getList();
},
getList() {
this.loading = true;
getBasicDestinyfilter(this.filterQuery).then(response => {
this.loading = false;
this.list = response.data.list || [];
this.total = response.data.total || 0;
}).catch(() => {
this.loading = false;
this.list = [];
this.total = 0;
this.roles = [];
});
},
handleCurrentChange(val) {
this.filterQuery.page = val.page;
this.getList();
},
handleCurrentDelectChange(val) {
this.delectQuery.page = val.page;
this.filterDestinyDelect()
},
handleAddClick() {
this.formName = "add";
this.formVisible = true;
},
handleModifyClick(row) {
this.formName = "edit";
this.formVisible = true;
this.editQuery = row;
},
deleteDialog(row) {
this.$confirm("删除该项目,项目底下所有产品也会被移除,是否确定删除?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
this.loading = true;
delectModeldestiny(row).then(res => {
if (res.code == 20000) {
this.getList();
} else {
this.$message.error(res.message);
}
}).catch(() => {
this.$message.error("删除失败!");
});
}).catch(() => {
});
},
selectDialog(row) {
this.selectFormVisible = true;
this.editQuery = row;
},
closeDialog() {
this.formVisible = false;
this.selectFormVisible = false;
this.getList();
this.delectList = []
this.editQuery = {}
},
handleDetail(row) {
this.delectQuery.id = row.id
this.editQuery = row;
this.filterDestinyDelect()
},
filterDestinyDelect() {
filterDestinyDelect(this.delectQuery)
.then((response) => {
this.loading = false;
if (response.code === 20000) {
this.delectList = response.data.list || [];
this.delectTotal = response.data.total || 0;
} else {
this.$message.error(response.message);
this.delectList = [];
this.delectTotal = 0;
}
})
.catch(() => {
this.loading = false;
this.delectList = [];
this.delectTotal = 0;
});
},
rowChange(val) {
this.selectedIndex = val.index
},
tableCountChange(row) {
if (this.$isNotBlank(row)) {
var query = {
id: row.deId,
count: row.count
}
uploadModeldestinyProduct(query);
this.selectedIndex = null
}
},
delectModifyClick(row) {
this.$confirm("是否确定移除该产品?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
this.loading = true;
let tquery = {
id: row.deId
};
delectModeldestinyProduct(tquery)
.then((response) => {
this.loading = false;
if (response.code === 20000) {
this.filterDestinyDelect();
this.$message({
type: "success",
message: "删除成功!",
});
} else {
this.$message.error(response.message);
}
})
.catch(() => {
this.certLoading = false;
});
}).catch(() => {
});
},
selectProduct() {
this.editLogin.id = this.editQuery.id
this.selectFormVisible = true;
},
closeProudDialog() {
this.selectFormVisible = false;
this.filterDestinyDelect();
},
}
,
mounted() {
}
,
components: {
destinyModelEdit, destinyModelSelectProduct, destinySelectProduct
}
,
created() {
this.getList();
<style lang="scss" scoped>
.query-form-item {
.el-input {
width: 90%;
}
}
;
</script>
</style>

@ -0,0 +1,69 @@
import {detail, page} from "@/api/basic/sicker/prescribeApi";
let prescribeQuery = {
sickerCode: '',
page: 1,
limit: 10
}
export default {
data() {
return {
fullscreenLoading:false,
// ============处方=============
sickerInfo:null,
showPrescribeDetailDialog:false,
prescribeLoading: false,
prescribeList: [],
prescribeTotal: 0,
prescribeQuery: {...prescribeQuery},
prescribeDetail: null
// ============处方end=============
};
}
,
mounted() {
},
created() {
this.getList()
},
methods: {
onReset() {
this.filterQuery = {...query}
this.getList()
},
onSubmit() {
this.filterQuery.page = 1;
this.getList()
},
getList() {
this.prescribeQuery = {...prescribeQuery}
this.prescribeQuery.sickerCode = this.sickerInfo?.code
this.prescribeLoading = true
page(this.prescribeQuery).then(res => {
this.prescribeLoading = false
this.prescribeList = res.data.list || []
this.prescribeTotal = res.data.total || 0
}).catch(()=>{
this.prescribeLoading = false
this.prescribeList = []
this.prescribeTotal = 0
})
},
showPrescribeDetail(row){
this.fullscreenLoading = true
detail({prescribeCode:row.code}).then(res=>{
this.fullscreenLoading = false
if(res.code!=20000){
this.$message.error(res.message)
return
}
this.prescribeDetail = res.data
this.showPrescribeDetailDialog = true
}).catch (() => {
this.fullscreenLoading = false
this.$message.error("数据加载失败")
})
}
}
}

@ -0,0 +1,7 @@
<template>
<div>
</div>
</template>
<script src="./index.js"/>
Loading…
Cancel
Save