|
@@ -0,0 +1,330 @@
|
|
|
+<template>
|
|
|
+ <div class="layout_container">
|
|
|
+ <div class="layout_main layout_container layout-horizontal">
|
|
|
+ <aside style="width: 460px;">
|
|
|
+ <div class="layout_container">
|
|
|
+ <header>
|
|
|
+ <vxe-input v-model="text" style="width: 320px;" placeholder="输入关键词搜索" @change="queryDeptInfoForBed"/>
|
|
|
+ <vxe-button status="primary" @click="saveDeptInfoForBed">保存标准床位</vxe-button>
|
|
|
+ </header>
|
|
|
+ <div class="layout_main layout_card">
|
|
|
+ <vxe-table ref="gridRefDept" :data="deptInfo" border stripe highlight-current-row @cell-click="cellClickEvent"
|
|
|
+ keep-source :edit-config="{mode: 'row', trigger: 'click', showStatus: true}">
|
|
|
+ <vxe-column type="seq" width="50"></vxe-column>
|
|
|
+ <vxe-column field="wardName" title="科室名称" width="140" />
|
|
|
+ <vxe-column field="openBedNum" title="标准床位" width="100" :edit-render="{}">
|
|
|
+ <template #edit="{ row }">
|
|
|
+ <vxe-input v-model="row.openBedNum"></vxe-input>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column field="deptName" title="病房名称" width="140" />
|
|
|
+ </vxe-table>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </aside>
|
|
|
+ <div class="layout_container layout_overflow_auto">
|
|
|
+ <header>
|
|
|
+ <vxe-button status="primary" @click="saveBedInfoForDept">保存科室床位</vxe-button>
|
|
|
+ <vxe-button status="primary" @click="refreshBedInfo">重置科室床位</vxe-button>
|
|
|
+ </header>
|
|
|
+ <div class="layout_main layout_card layout_el-table">
|
|
|
+ <div class="layout_flex_1-y">
|
|
|
+ <vxe-table ref="gridRefBed" :data="bedInfo.slice(pageSize * (currentPage - 1), pageSize * currentPage)" border stripe keep-source
|
|
|
+ height="820px" highlight-current-row :edit-config="{mode: 'row', trigger: 'click', showStatus: true, autoClear: false}">
|
|
|
+ <vxe-column type="seq" width="50"></vxe-column>
|
|
|
+ <vxe-column field="type" title="类别" width="100" :edit-render="{}">
|
|
|
+ <template #edit="{ row }">
|
|
|
+ <vxe-select v-model="row.type" :options="bedType"></vxe-select>
|
|
|
+ </template>
|
|
|
+ <template #default="{ row }">
|
|
|
+ <span>{{ formatBedType([row.type]) }}</span>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column field="bedStatusName" title="状态" width="50" >
|
|
|
+ <template v-slot="scope">
|
|
|
+ <div v-if="scope.row.bedStatus === '1'" style="color: #67c23a; font-size: 12px; font-weight: bolder"><span>{{ scope.row.bedStatusName }}</span></div>
|
|
|
+ <div v-else style="color: #d71345; font-size: 12px; font-weight: bolder"><span>{{ scope.row.bedStatusName }}</span></div>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column field="bedNo" title="床号" width="50" />
|
|
|
+ <vxe-column field="roomNo" title="房间号" width="100" :edit-render="{}">
|
|
|
+ <template #edit="{ row }">
|
|
|
+ <vxe-input v-model="row.roomNo"></vxe-input>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column field="sex" title="房间属性" width="100" :edit-render="{}">
|
|
|
+ <template #edit="{ row }">
|
|
|
+ <vxe-select v-model="row.sex" :options="sexType"></vxe-select>
|
|
|
+ </template>
|
|
|
+ <template #default="{ row }">
|
|
|
+ <span>{{ formatSex([row.sex]) }}</span>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column field="roomRate1" title="床位费" width="90" :edit-render="{}">
|
|
|
+ <template #edit="{ row }">
|
|
|
+ <vxe-input v-model="row.roomRate1"></vxe-input>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column field="chargeCodeBed" title="床位费项目" width="220" :edit-render="{}">
|
|
|
+ <template #edit="scope">
|
|
|
+ <CyComboGrid v-model="scope.row" value="chargeCodeBed" label="chargeCodeBedName"
|
|
|
+ placement="bottom" :table-header="tableHeaderBed" :remote-method="selectAirItemInfo" style="width: 100%"/>
|
|
|
+ </template>
|
|
|
+ <template #default="{ row }">
|
|
|
+ <span>{{ formatChargeCodeBed([row.chargeCodeBed]) }}</span>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column field="heatingFee" title="取暖费" width="90" :edit-render="{}">
|
|
|
+ <template #edit="{ row }">
|
|
|
+ <vxe-input v-model="row.heatingFee"></vxe-input>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column field="airConditionFee" title="空调费" width="90" :edit-render="{}">
|
|
|
+ <template #edit="{ row }">
|
|
|
+ <vxe-input v-model="row.airConditionFee"></vxe-input>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column field="chargeCodeAir" title="空调费项目" width="220" :edit-render="{}">
|
|
|
+ <template #edit="scope">
|
|
|
+ <CyComboGrid v-model="scope.row" value="chargeCodeAir" label="chargeCodeAirName"
|
|
|
+ placement="bottom" :table-header="tableHeaderBed" :remote-method="selectAirItemInfo" style="width: 100%"/>
|
|
|
+ </template>
|
|
|
+ <template #default="{ row }">
|
|
|
+ <span>{{ formatChargeCodeBed([row.chargeCodeAir]) }}</span>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column field="specialCharge" title="特殊收费" width="100" :edit-render="{}">
|
|
|
+ <template #edit="{ row }">
|
|
|
+ <vxe-input v-model="row.specialCharge"></vxe-input>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column field="roomRate2" title="其他费" width="85" :edit-render="{}">
|
|
|
+ <template #edit="{ row }">
|
|
|
+ <vxe-input v-model="row.roomRate2"></vxe-input>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column field="heatColdFlag" title="生效" width="100" :edit-render="{}">
|
|
|
+ <template #edit="{ row }">
|
|
|
+ <vxe-select v-model="row.heatColdFlag" :options="heatColdType"></vxe-select>
|
|
|
+ </template>
|
|
|
+ <template #default="{ row }">
|
|
|
+ <span>{{ formatHeatColdType([row.heatColdFlag]) }}</span>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column field="inpatientNo" title="住院号" width="80" />
|
|
|
+ <vxe-column field="admissTimes" title="住院次数" width="80" />
|
|
|
+ </vxe-table>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <el-pagination :current-page="currentPage" :page-size="pageSize" :page-sizes="[15, 30, 45, 60]"
|
|
|
+ :total="bedInfo.length" layout="total, sizes, prev, pager, next, jumper" style="margin-top: 5px"
|
|
|
+ @size-change="handleSizeChange" @current-change="handleCurrentChange">
|
|
|
+ </el-pagination>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+<script setup name="BedDeptDict">
|
|
|
+import {ref, onMounted, nextTick} from 'vue'
|
|
|
+import {
|
|
|
+ selectAirItemInfo,
|
|
|
+ selectBedInfoForDept,
|
|
|
+ selectDeptInfoForBed,
|
|
|
+ updateBedInfoForDept,
|
|
|
+ updateDeptInfoForBed
|
|
|
+} from "@/api/dictionary/personnel/bed-dept-dict"
|
|
|
+import CyComboGrid from "@/components/cy/combo-grid/src/CyComboGrid.vue";
|
|
|
+import {ElMessage} from "element-plus";
|
|
|
+
|
|
|
+const pageSize = ref(30)
|
|
|
+const currentPage = ref(1)
|
|
|
+const handleSizeChange = (val) => {
|
|
|
+ pageSize.value = val
|
|
|
+}
|
|
|
+const handleCurrentChange = (val) => {
|
|
|
+ currentPage.value = val
|
|
|
+}
|
|
|
+// 搜索关键字
|
|
|
+const text = ref('')
|
|
|
+// 科室信息(下拉选)
|
|
|
+const deptInfo = ref([])
|
|
|
+// 床位信息
|
|
|
+const bedInfo = ref([])
|
|
|
+// 床位类别
|
|
|
+const bedType = ref([{ value: '1', label: '普通' }, { value: '2', label: '加床' }, { value: '4', label: '家庭病床' }, { value: '9', label: '临时' }])
|
|
|
+const formatBedType = (bedTypeList) => {
|
|
|
+ if (bedTypeList) {
|
|
|
+ return bedTypeList.map(type => {
|
|
|
+ const item = bedType.value.find(item => item.value === type)
|
|
|
+ return item ? item.label : type
|
|
|
+ }).join(',')
|
|
|
+ }
|
|
|
+ return ''
|
|
|
+}
|
|
|
+// 房间属性
|
|
|
+const sexType = ref([{ value: '1', label: '男' }, { value: '2', label: '女' }])
|
|
|
+const formatSex = (sexList) => {
|
|
|
+ if (sexList) {
|
|
|
+ return sexList.map(sex => {
|
|
|
+ const item = sexType.value.find(item => item.value === sex)
|
|
|
+ return item ? item.label : sex
|
|
|
+ }).join(',')
|
|
|
+ }
|
|
|
+ return ''
|
|
|
+}
|
|
|
+// 生效(空调状态)
|
|
|
+const heatColdType = ref([{ value: '1', label: '停止' }, { value: '2', label: '取暖' }, { value: '3', label: '空调' }])
|
|
|
+const formatHeatColdType = (heatColdList) => {
|
|
|
+ if (heatColdList) {
|
|
|
+ return heatColdList.map(heatCold => {
|
|
|
+ const item = heatColdType.value.find(item => item.value === heatCold)
|
|
|
+ return item ? item.label : heatCold
|
|
|
+ }).join(',')
|
|
|
+ }
|
|
|
+ return ''
|
|
|
+}
|
|
|
+
|
|
|
+onMounted(() => {
|
|
|
+ nextTick(async () => {
|
|
|
+ // 查询科室床位信息
|
|
|
+ queryDeptInfoForBed('')
|
|
|
+ queryBedProjectOptions('')
|
|
|
+ })
|
|
|
+
|
|
|
+})
|
|
|
+
|
|
|
+const queryDeptInfoForBed = () => {
|
|
|
+ selectDeptInfoForBed(text.value).then((res) => {
|
|
|
+ deptInfo.value = res
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+// 单选行事件
|
|
|
+const clickDept = ref('')
|
|
|
+const cellClickEvent = ({ row, column }) => {
|
|
|
+ if(column.field === 'openBedNum'){
|
|
|
+ return
|
|
|
+ }
|
|
|
+ clickDept.value = row.deptCode
|
|
|
+ queryBedInfoForDept(clickDept.value)
|
|
|
+}
|
|
|
+
|
|
|
+// 查询科室具体床位信息
|
|
|
+const queryBedInfoForDept = (deptCode) => {
|
|
|
+ selectBedInfoForDept(deptCode).then((res) => {
|
|
|
+ bedInfo.value = res
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+// 空调费/床位费项目信息
|
|
|
+const collapseTags = ref(false)
|
|
|
+const airItems = ref([])
|
|
|
+const tableHeaderBed = ref([
|
|
|
+ {name: '项目编码', code: 'value', width: 80,},
|
|
|
+ {name: '项目名称', code: 'label', width: 220},
|
|
|
+ {name: '单价', code: 'price', width: 100},
|
|
|
+ {name: '贵重', code: 'separateFlag', width: 50},
|
|
|
+ {name: '自费', code: 'selfFlag', width: 50},
|
|
|
+ {name: '执行科室', code: 'execName', width: 120},
|
|
|
+ {name: '拼音码', code: 'pyCode', width: 90},
|
|
|
+ {name: '五笔码', code: 'dCode', width: 90},
|
|
|
+ {name: '院内码', code: 'nCode', width: 80}
|
|
|
+ ]
|
|
|
+)
|
|
|
+const queryBedProjectOptions = (code) => {
|
|
|
+ selectAirItemInfo(code).then((res) => {
|
|
|
+ airItems.value = res
|
|
|
+ })
|
|
|
+}
|
|
|
+const formatChargeCodeBed = (chargeCodeBedList) => {
|
|
|
+ if (chargeCodeBedList) {
|
|
|
+ return chargeCodeBedList.map(e => {
|
|
|
+ const item = airItems.value.find(item => item.value === e)
|
|
|
+ return item ? item.label : e
|
|
|
+ }).join(',')
|
|
|
+ }
|
|
|
+ return ''
|
|
|
+}
|
|
|
+
|
|
|
+// 更新科室标准床位数
|
|
|
+let deptInfoList = ref([])
|
|
|
+const gridRefDept = ref()
|
|
|
+const saveDeptInfoForBed = () => {
|
|
|
+ // 获取需要更新的床位数信息
|
|
|
+ let data = gridRefDept.value.getUpdateRecords()
|
|
|
+ for(let d in data){
|
|
|
+ let uD = {deptCode:'',wardCode: '', openBedNum: ''}
|
|
|
+ uD.deptCode = data[d].deptCode
|
|
|
+ uD.wardCode = data[d].wardCode
|
|
|
+ uD.openBedNum = data[d].openBedNum
|
|
|
+ deptInfoList.value.push(uD)
|
|
|
+ }
|
|
|
+ updateDeptInfoForBed(deptInfoList.value).then((res) => {
|
|
|
+ if(res){
|
|
|
+ ElMessage({
|
|
|
+ type: "success",
|
|
|
+ message: res.cg,
|
|
|
+ duration: 2500,
|
|
|
+ showClose: true,
|
|
|
+ });
|
|
|
+ queryDeptInfoForBed()
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+let bedInfoList = ref([])
|
|
|
+const gridRefBed = ref()
|
|
|
+const saveBedInfoForDept = () => {
|
|
|
+ let bedList = gridRefBed.value.getUpdateRecords()
|
|
|
+ if(bedList.length > 0) {
|
|
|
+ bedList.forEach(e => {
|
|
|
+ let bed = {type: '', bedNo: '', roomNo: '', sex: '', roomRate1: '',chargeCodeBed: '',
|
|
|
+ heatingFee: '', airConditionFee: '', chargeCodeAir: '', specialCharge: '', roomRate2: '',
|
|
|
+ heatColdFlag: '', deptCode: '', wardCode: ''}
|
|
|
+ bed.deptCode = e.deptCode
|
|
|
+ bed.wardCode = e.wardCode
|
|
|
+ bed.type = e.type
|
|
|
+ bed.bedStatus = e.bedStatus
|
|
|
+ bed.bedNo = e.bedNo
|
|
|
+ bed.roomNo = e.roomNo
|
|
|
+ bed.sex = e.sex
|
|
|
+ bed.roomRate1 = e.roomRate1
|
|
|
+ bed.chargeCodeBed = e.chargeCodeBed
|
|
|
+ bed.heatingFee = e.heatingFee
|
|
|
+ bed.airConditionFee = e.airConditionFee
|
|
|
+ bed.chargeCodeAir = e.chargeCodeAir
|
|
|
+ bed.specialCharge = e.specialCharge
|
|
|
+ bed.roomRate2 = e.roomRate2
|
|
|
+ bed.heatColdFlag = e.heatColdFlag
|
|
|
+ bedInfoList.value.push(bed)
|
|
|
+ })
|
|
|
+ updateBedInfoForDept(bedInfoList.value).then((res) => {
|
|
|
+ if(res){
|
|
|
+ ElMessage({
|
|
|
+ type: "success",
|
|
|
+ message: res.cg,
|
|
|
+ duration: 2500,
|
|
|
+ showClose: true,
|
|
|
+ });
|
|
|
+ queryBedInfoForDept(clickDept.value)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ ElMessage({
|
|
|
+ type: "info",
|
|
|
+ message: "没有更新床位信息的数据,请确认!",
|
|
|
+ duration: 2500,
|
|
|
+ showClose: true,
|
|
|
+ });
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 重置床位信息
|
|
|
+const refreshBedInfo = () => {
|
|
|
+ if(clickDept.value){
|
|
|
+ queryBedInfoForDept(clickDept.value)
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|