Browse Source

Merge branch 'master' into 'master'

优化科室床位维护

See merge request lighter/vue-intergration-platform!122
huangshuhua 11 months ago
parent
commit
8242730621

+ 54 - 4
src/api/dictionary/personnel/bed-dept-dict.js

@@ -15,14 +15,14 @@ export function selectDeptInfoForBed(text) {
 
 /**
  * 查询具体科室床位详细信息
- * @param {*} deptCode 科室id
+ * @param {*} wardCode 科室id
  * @returns
  */
-export function selectBedInfoForDept(deptCode) {
+export function selectBedInfoForDept(wardCode) {
     return request({
         url: '/bedDict/selectBedInfoForDept',
         method: 'get',
-        params: { deptCode },
+        params: { wardCode },
     })
 }
 
@@ -63,4 +63,54 @@ export function updateBedInfoForDept(data) {
         method: 'post',
         data
     })
-}
+}
+
+/**
+ * 新增科室床位信息
+ * @param {*} data 科室床位信息
+ * @returns
+ */
+export function saveBedForDept(data) {
+    return request({
+        url: '/bedDict/saveBedForDept',
+        method: 'post',
+        data
+    })
+}
+
+
+// 床位类别
+export const bedType = [{ value: '1', label: '普通' }, { value: '2', label: '加床' }, { value: '4', label: '家庭病床' }, { value: '9', label: '临时' }]
+export 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 ''
+}
+// 房间属性
+export const sexType = [{ value: '1', label: '男' }, { value: '2', label: '女' }]
+export 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 ''
+}
+// 生效(空调状态)
+export const heatColdType = [{ value: '1', label: '停止' }, { value: '2', label: '取暖' }, { value: '3', label: '空调' }]
+export 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 ''
+}
+// 床位状态
+export const bedStatusType = [{ value: '1', label: '空闲' }, { value: '2', label: '占用' }]

+ 236 - 0
src/views/dictionary/personnel/AddBedForDept.vue

@@ -0,0 +1,236 @@
+<template>
+  <div class="layout_container">
+    <div class="layout_main">
+      <div class="demo-collapse">
+        <el-form :model="form" label-width="80" class="demo-ruleForm">
+          <el-row>
+            <el-col :span="12">
+              <el-form-item prop="type" label="类别">
+                <el-select v-model="form.type" placeholder="请选择类别" clearable style="width: 100%">
+                  <el-option v-for="item in bedType" :key="item.value" :label="item.label" :value="item.value">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="bedStatus" label="状态">
+                <el-select v-model="form.bedStatus" placeholder="请选择状态" clearable style="width: 100%">
+                  <el-option v-for="item in bedStatusType" :key="item.value" :label="item.label" :value="item.value">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="12">
+              <el-form-item prop="bedNo" label="床号">
+                <el-input v-model="form.bedNo" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="roomNo" label="房间号">
+                <el-input v-model="form.roomNo" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="12">
+              <el-form-item prop="sex" label="房间属性">
+                <el-select v-model="form.sex" placeholder="请选择房间属性" clearable style="width: 100%">
+                  <el-option v-for="item in sexType" :key="item.value" :label="item.label" :value="item.value">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="roomRate1" label="床位费">
+                <el-input v-model="form.roomRate1" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="24">
+              <el-form-item prop="chargeCodeBed" label="床位费项目">
+                <CyComboGrid v-model="form" key-field="form.chargeCodeBed" value="chargeCodeBed" label="chargeCodeBedName" :collapse-tags="ff" clearable
+                             placement="bottom" :table-header="tableHeaderBed" :remote-method="selectAirItemInfo" style="width: 100%"/>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+        <el-form :model="form1" label-width="80" class="demo-ruleForm">
+          <el-row>
+            <el-col :span="12">
+              <el-form-item prop="heatingFee" label="取暖费">
+                <el-input v-model="form1.heatingFee" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="airConditionFee" label="空调费">
+                <el-input v-model="form1.airConditionFee" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="24">
+              <el-form-item prop="chargeCodeAir" label="空调费项目">
+                <CyComboGrid v-model="form1" key-field="form.chargeCodeAir" value="chargeCodeBed" label="chargeCodeBedName" :collapse-tags="ff" clearable
+                             placement="bottom" :table-header="tableHeaderBed" :remote-method="selectAirItemInfo" style="width: 100%"/>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="12">
+              <el-form-item prop="specialCharge" label="特殊收费">
+                <el-input v-model="form1.specialCharge" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="roomRate2" label="其他费">
+                <el-input v-model="form1.roomRate2" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="12">
+              <el-form-item prop="heatColdFlag" label="生效">
+                <el-select v-model="form1.heatColdFlag" placeholder="请选择生效" clearable style="width: 100%">
+                  <el-option v-for="item in heatColdType" :key="item.value" :label="item.label" :value="item.value">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-form-item>
+              <el-button type="primary" @click="onSubmit">保存</el-button>
+              <el-button>取消</el-button>
+            </el-form-item>
+          </el-row>
+        </el-form>
+      </div>
+    </div>
+  </div>
+</template>
+<script setup name="AddBedForDept">
+import {nextTick, onMounted, ref} from 'vue'
+import {
+  bedStatusType,
+  bedType,
+  heatColdType,
+  saveBedForDept,
+  selectAirItemInfo,
+  sexType
+} from "@/api/dictionary/personnel/bed-dept-dict"
+import CyComboGrid from "@/components/cy/combo-grid/src/CyComboGrid.vue";
+import {ElMessage} from "element-plus";
+
+const ff = ref(true)
+const form = ref({
+  deptCode: '',
+  wardCode: '',
+  type: '',
+  bedStatus: '',
+  bedNo: '',
+  roomNo: '',
+  sex: '',
+  roomRate1: 0,
+  chargeCodeBed: '',
+})
+const form1 = ref({
+  heatingFee: 0,
+  airConditionFee: 0,
+  chargeCodeAir: '',
+  specialCharge: 0,
+  roomRate2: 0,
+  heatColdFlag: '',
+})
+
+const props = defineProps({
+  bedForDeptDetail: {
+    type: Object,
+    default: {}
+  }
+})
+
+// 清理原始数据
+const clearInfo = () => {
+  form.value = {
+    deptCode: '',
+    wardCode: '',
+    type: '',
+    bedStatus: '',
+    bedNo: '',
+    roomNo: '',
+    sex: '',
+    roomRate1: 0,
+    chargeCodeBed: '',
+  }
+  form1.value = {
+    heatingFee: 0,
+    airConditionFee: 0,
+    chargeCodeAir: '',
+    specialCharge: 0,
+    roomRate2: 0,
+    heatColdFlag: '',
+  }
+}
+
+onMounted(async () => {
+  await nextTick(() => {
+    clearInfo()
+    form.value = props.bedForDeptDetail
+    form.value.type = '1'
+    form.value.bedStatus = '1'
+    form.value.roomNo = ''
+    form.value.heatColdFlag = '1'
+    form.value.roomRate1 = 0
+    form.value.chargeCodeBed = ''
+    form1.value.heatingFee = 0
+    form1.value.airConditionFee = 0
+    form1.value.specialCharge = 0
+    form1.value.roomRate2 = 0
+    form1.value.chargeCodeAir = ''
+    form1.value.heatColdFlag = '1'
+  })
+})
+
+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: 100},
+    {name: '五笔码', code: 'dCode', width: 100},
+    {name: '院内码', code: 'nCode', width: 80}
+  ]
+)
+
+const emit = defineEmits(['close', 'closeBedForDeptDetail'])
+const formData = ref({})
+const onSubmit = () => {
+  if(form.value.chargeCodeBed === '' || form.value.roomRate1 === 0){
+    ElMessage({
+      type: "error",
+      message: '床位费或床位费项目未填写,请检查!',
+      duration: 2500,
+      showClose: true,
+    });
+    return false
+  }
+  formData.value = Object.assign(form.value, form1.value)
+  saveBedForDept(formData.value).then((res) => {
+    if (res.cg) {
+      ElMessage({
+        type: "success",
+        message: res.cg,
+        duration: 2500,
+        showClose: true,
+      });
+
+      emit('closeBedForDeptDetail', true)
+    }
+  });
+}
+</script>

+ 43 - 5
src/views/dictionary/personnel/BedDeptDict.vue

@@ -11,13 +11,13 @@
             <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="deptName" 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-column field="wardName" title="病房名称" width="140" />
             </vxe-table>
           </div>
         </div>
@@ -25,6 +25,7 @@
       <div class="layout_container layout_overflow_auto">
         <header>
           <vxe-button status="primary" @click="saveBedInfoForDept">保存科室床位</vxe-button>
+          <vxe-button status="primary" @click="addBedInfoForDept">新增科室床位</vxe-button>
           <vxe-button status="primary" @click="refreshBedInfo">重置科室床位</vxe-button>
         </header>
         <div class="layout_main layout_card layout_el-table">
@@ -122,6 +123,10 @@
             </el-pagination>
           </div>
         </div>
+        <el-dialog v-model="showAddBedForDept" :close-on-click-modal="false" :close-on-press-escape="false"
+                   :title="'新增科室床位'" width="50%" destroy-on-close>
+          <AddBedForDept :bedForDeptDetail="bedForDeptDetail" @closeBedForDeptDetail="closeBedForDeptDetail" />
+        </el-dialog>
       </div>
     </div>
   </div>
@@ -137,6 +142,7 @@ import {
 } from "@/api/dictionary/personnel/bed-dept-dict"
 import CyComboGrid from "@/components/cy/combo-grid/src/CyComboGrid.vue";
 import {ElMessage} from "element-plus";
+import AddBedForDept from "@/views/dictionary/personnel/AddBedForDept.vue";
 
 const pageSize = ref(30)
 const currentPage = ref(1)
@@ -202,18 +208,22 @@ const queryDeptInfoForBed = () => {
 }
 
 // 单选行事件
+// 病区
 const clickDept = ref('')
+// 科室
+const roomCode = ref('')
 const cellClickEvent = ({ row, column }) => {
   if(column.field === 'openBedNum'){
     return
   }
-  clickDept.value = row.deptCode
+  clickDept.value = row.wardCode
+  roomCode.value = row.deptCode
   queryBedInfoForDept(clickDept.value)
 }
 
 // 查询科室具体床位信息
-const queryBedInfoForDept = (deptCode) => {
-  selectBedInfoForDept(deptCode).then((res) => {
+const queryBedInfoForDept = (wardCode) => {
+  selectBedInfoForDept(wardCode).then((res) => {
     bedInfo.value = res
   })
 }
@@ -321,6 +331,34 @@ const saveBedInfoForDept = () => {
   }
 }
 
+// 新增科室床位信息
+const showAddBedForDept = ref(false)
+const bedForDeptDetail = ref({})
+const addBedInfoForDept = () => {
+  if(clickDept.value){
+    showAddBedForDept.value = true
+    // 病房
+    bedForDeptDetail.value.wardCode = clickDept.value
+    // 科室
+    bedForDeptDetail.value.deptCode = roomCode.value
+    // 下一个床位号
+    bedForDeptDetail.value.bedNo = bedInfo.value.length + 1
+  } else {
+    ElMessage({
+      type: "info",
+      message: "请选择一个科室再增加一个床位!",
+      duration: 2500,
+      showClose: true,
+    });
+  }
+}
+const closeBedForDeptDetail = (flag) => {
+  if(flag){
+    showAddBedForDept.value = false
+    queryBedInfoForDept(clickDept.value)
+  }
+}
+
 // 重置床位信息
 const refreshBedInfo = () => {
   if(clickDept.value){