unknown 2 mesiacov pred
rodič
commit
0ebead04b6

+ 2 - 2
src/api/elderly/elder/bed-change/index.ts

@@ -32,8 +32,8 @@ export const bedChangeCreate = (data) => {
 }
 
 // 检测是否可以包房
-export const checkPrivateRoom = (id) => {
+export const checkPrivateRoom = (id,elderId=undefined) => {
   return request.get({
-    url: `elderly/bedChangeRecord/checkPrivateRoom?bedId=${id}`
+    url: `elderly/bedChangeRecord/checkPrivateRoom?bedId=${id}&elderId=${elderId}`
   })
 }

+ 27 - 5
src/components/Table2/index.vue

@@ -259,6 +259,18 @@
           {{ getDictLabelArr(item.dictArr, scope.row[item.field]) }}
         </template>
       </el-table-column>
+      <el-table-column
+        v-if="item.type == 17"
+        :prop="item.field"
+        header-align="center"
+        align="center"
+        :label="item.label"
+        :width="item.width"
+      >
+        <template #default="scope">
+          {{ scope.row.payStatus!=0?toFixedNum(scope.row.payableAmount):'0.00' }}
+        </template>
+      </el-table-column>
     </template>
     <el-table-column
       label="操作"
@@ -300,7 +312,7 @@
           type="primary"
           @click="handleEdit(scope.row)"
           v-hasPermi="[permissionStr + ':renew']"
-          :disabled="isDisabledRenewal(scope.row.expireTime)"
+          :disabled="isDisabledRenewal(scope.row)"
         >
           续签
         </el-button>
@@ -398,12 +410,13 @@ const settingStore = useSettingStore()
 const radioId = ref() // 单选表格
 
 //续签提前 16天
-const isDisabledRenewal = (expireTime) => {
-  if (!expireTime) return false
-  const expireDate = new Date(expireTime)
+const isDisabledRenewal = (row) => {
+  if (!row.expireTime) return false
+  const expireDate = new Date(row.expireTime)
   const halfMonthLater = new Date()
   halfMonthLater.setMonth(halfMonthLater.getMonth() + 2)
-  return expireDate > halfMonthLater
+  console.log("AAA")
+  return expireDate > halfMonthLater && (row.isRenew||0)==0
 }
 
 const props = defineProps({
@@ -481,6 +494,15 @@ const props = defineProps({
   }
 })
 
+const toFixedNum = (num:any) => {
+  try {
+   return  num.toFixed(2)
+  }catch (e) {
+    return '0.00'
+  }
+
+}
+
 const handleSelectable = (row) => {
   if (props.disabledSelectedText) {
     return row[props.disabledSelectedText] != 1

+ 5 - 2
src/config/axios/service.ts

@@ -311,7 +311,10 @@ service.interceptors.response.use(
     } else if (message.includes('Request failed with status code')) {
       message = t('sys.api.apiRequestFailed') + message.substr(message.length - 3)
     }
-    ElMessage.error(message)
+    //房态图那边快速切换楼层时出现取消请求的提示,这里屏蔽一下
+    if(error.message.indexOf("Request canceled: build/queryBuildRooms") == -1 && error.message.indexOf("Request canceled: build/getBuildFloorData") == -1){
+      ElMessage.error(message)
+    }
     return Promise.reject(error)
   }
 )
@@ -355,4 +358,4 @@ export const cancelRequest = (url: string) => {
   }
 }
 
-export { service }
+export { service }

+ 144 - 2
src/views/Home/Index.vue

@@ -1,8 +1,8 @@
 <template>
   <div class="home" :style="pageStyle">
     <div class="use">
-      <div class="title">我的常用</div>
-      <el-scrollbar>
+      <el-segmented v-model="valueTop" :options="optionsTop" size="large" />
+      <el-scrollbar v-if="valueTop=='我的常用'">
         <div class="icon-wrap">
           <div class="icon-item" v-for="(c, index) in commonList" :key="index" @click="handleTo(c)">
             <img
@@ -24,6 +24,86 @@
           </div>
         </div>
       </el-scrollbar>
+      <div v-if="valueTop=='院内统计'" class="statistics-panel">
+        <!-- 院内动态 -->
+        <div class="stat-row">
+          <div class="stat-label blue">
+            <Icon icon="ep:house" class="stat-icon" />
+            <span>院内动态</span>
+          </div>
+          <div class="stat-items">
+            <div class="stat-item">
+              <span class="stat-name">总床位数:</span>
+              <span class="stat-value">400</span>
+              <span class="stat-unit">张</span>
+            </div>
+            <div class="stat-item">
+              <span class="stat-name">在院人数:</span>
+              <span class="stat-value">352</span>
+              <span class="stat-unit">位</span>
+            </div>
+            <div class="stat-item">
+              <span class="stat-name">新收人数:</span>
+              <span class="stat-value">0</span>
+              <span class="stat-unit">位</span>
+            </div>
+            <div class="stat-item">
+              <span class="stat-name">请假人数:</span>
+              <span class="stat-value">9</span>
+              <span class="stat-unit">位</span>
+            </div>
+            <div class="stat-item">
+              <span class="stat-name">当天请假人数:</span>
+              <span class="stat-value">0</span>
+              <span class="stat-unit">位</span>
+            </div>
+            <div class="stat-item">
+              <span class="stat-name">退院人数:</span>
+              <span class="stat-value">0</span>
+              <span class="stat-unit">位</span>
+            </div>
+          </div>
+        </div>
+        <!-- 护理情况 -->
+        <div class="stat-row">
+          <div class="stat-label green">
+            <Icon icon="ep:first-aid-kit" class="stat-icon" />
+            <span>护理情况</span>
+          </div>
+          <div class="stat-items">
+            <div class="stat-item">
+              <span class="stat-name">一级:</span>
+              <span class="stat-value">264</span>
+              <span class="stat-unit">位</span>
+            </div>
+            <div class="stat-item">
+              <span class="stat-name">二级:</span>
+              <span class="stat-value">17</span>
+              <span class="stat-unit">位</span>
+            </div>
+            <div class="stat-item">
+              <span class="stat-name">三级:</span>
+              <span class="stat-value">22</span>
+              <span class="stat-unit">位</span>
+            </div>
+            <div class="stat-item">
+              <span class="stat-name">一级(专陪):</span>
+              <span class="stat-value">38</span>
+              <span class="stat-unit">位</span>
+            </div>
+            <div class="stat-item">
+              <span class="stat-name">二级(专陪):</span>
+              <span class="stat-value">1</span>
+              <span class="stat-unit">位</span>
+            </div>
+            <div class="stat-item">
+              <span class="stat-name">无费用:</span>
+              <span class="stat-value">10</span>
+              <span class="stat-unit">位</span>
+            </div>
+          </div>
+        </div>
+      </div>
     </div>
     <el-row class="mt-8px flow" :gutter="8" justify="space-between">
       <el-col :xl="12" :lg="12" :md="24" :sm="24" :xs="24" class="mb-8px">
@@ -123,6 +203,8 @@ defineOptions({ name: 'Home' })
 const { push } = useRouter()
 const { t } = useI18n()
 const userStore = useUserStore()
+const optionsTop = ['我的常用', '院内统计']
+const valueTop = ref('我的常用')
 const { setWatermark } = useWatermark()
 const loading = ref(false)
 const processId = ref('')
@@ -472,6 +554,66 @@ onMounted(() => {
       font-size: 16px;
       color: #000000;
     }
+    .statistics-panel {
+      margin-top: 15px;
+      padding: 16px;
+      background: #fff;
+      border-radius: 8px;
+      .stat-row {
+        display: flex;
+        align-items: center;
+        padding: 12px 0;
+        border-bottom: 1px solid #e8e8e8;
+        &:last-child {
+          border-bottom: none;
+        }
+        .stat-label {
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          width: 100px;
+          height: 36px;
+          border-radius: 4px;
+          color: #fff;
+          font-size: 14px;
+          font-weight: 500;
+          flex-shrink: 0;
+          &.blue {
+            background: linear-gradient(135deg, #1890ff 0%, #36cfc9 100%);
+          }
+          &.green {
+            background: linear-gradient(135deg, #52c41a 0%, #95de64 100%);
+          }
+          .stat-icon {
+            margin-right: 6px;
+            font-size: 16px;
+          }
+        }
+        .stat-items {
+          display: flex;
+          flex: 1;
+          justify-content: space-around;
+          padding-left: 20px;
+          .stat-item {
+            display: flex;
+            align-items: center;
+            font-size: 14px;
+            .stat-name {
+              color: #666;
+            }
+            .stat-value {
+              color: #1890ff;
+              font-size: 18px;
+              font-weight: 600;
+              margin: 0 4px;
+            }
+            .stat-unit {
+              color: #999;
+            }
+          }
+        }
+      }
+    }
     .icon-wrap {
       display: grid;
       grid-template-columns: repeat(11, 1fr);

+ 3 - 2
src/views/elderly/apply/check-in/ProcessForm.vue

@@ -935,14 +935,15 @@ const submitForm = async () => {
     }
   }
   if (dataForm.value.isPrivateRoom == 1) {
-    result = await checkPrivateRoom(dataForm.value.bedId)
+    console.log(dataForm.value)
+    result = await checkPrivateRoom(dataForm.value.bedId,dataForm.value.elderId)
   }
   if (!result) {
     message.error('当前房间不可以包房')
     return
   }
   //计算所有费用金额,合同金额,(优惠后的)
-
+  return
 
   let data = {
     id: dataForm.value.id,

+ 2 - 1
src/views/elderly/elder/bed-change/Form.vue

@@ -54,7 +54,8 @@ const submitForm = async () => {
     let result = true
     // 如果是包房先检验
     if (dataForm.isPrivateRoom == 1) {
-      result = await checkPrivateRoom(dataForm.expectId)
+      //console.log("切换房间",dataForm)
+      result = await checkPrivateRoom(dataForm.expectId,dataForm.elderlyId)
     }
     if (!result) {
       message.error('当前房间不可以包房')

+ 6 - 2
src/views/elderly/elder/contract/Renewal.vue

@@ -536,6 +536,7 @@ const resetFormField = reactive({ ...dataForm.value })
 
 const titleItem = ref('') // 弹窗标题
 const type = ref(1) // 1: 续签 2: 变更
+let oldContractId = null
 
 /** 打开弹窗 */
 const open = async (row, pageType) => {
@@ -545,6 +546,7 @@ const open = async (row, pageType) => {
   console.log("pageType",pageType)
   type.value = pageType
   try {
+    oldContractId = row.id
     const res = await getElderExpense(row.elderId,row.id)
     dataForm.value = res
     //console.log("rowAAA",dataForm.value)
@@ -627,14 +629,16 @@ const submitForm = async () => {
     // 校验是否可以包房
     let result = true
     if (dataForm.value.isPrivateRoom == 1) {
-    result = await checkPrivateRoom(dataForm.value.bedId)
-  }
+      //console.log("AADDD",dataForm.value)
+      result = await checkPrivateRoom(dataForm.value.bedId,dataForm.value.elderId)
+    }
   if (!result) {
     message.error('当前房间不可以包房')
     return
   }
 
   let data = {
+    oldContractId:oldContractId,
     elderId: dataForm.value.elderId,
     contract: {
       elderId: dataForm.value.elderId,

+ 6 - 6
src/views/elderly/fee/column.ts

@@ -157,12 +157,12 @@ export const BillPayColumns = reactive([
     type: '3',
     width: 120
   },
-  // {
-  //   label: '实际应收',
-  //   field: 'payableAmount',
-  //   type: '13',
-  //   width: 120
-  // }
+  {
+    label: '已缴费用',
+    field: 'payableAmount',
+    type: '17',
+    width: 120
+  }
 ])
 
 // ======================日常费用=====================

+ 19 - 3
src/views/elderly/nursing/records/dispatchList/AddForm.vue

@@ -19,7 +19,7 @@
           </el-col>
           <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
             <el-form-item  label="性别" prop="elderSex">
-              <el-input v-if="!isDetail" v-model="dataForm.elderSex"  />
+              <el-input v-if="!isDetail" v-model="dataForm.elderSex"  :maxlength="1"/>
               <el-text v-else disabled="">{{dataForm.elderSex}}</el-text>
             </el-form-item>
           </el-col>
@@ -170,6 +170,18 @@
           </el-col>
         </el-row>
 
+        <el-row>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+            <el-form-item label="附件" prop="image">
+              <SelectUpload
+                :is-detail="isDetail"
+                v-model="dataForm.image"
+                fun-name="附件"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
       </div>
 
     </el-form>
@@ -252,6 +264,7 @@ let dataForm = ref({
   serviceHour: '',
   serviceBeginTime: '',
   serviceEndTime: '',
+  image: [],
   serviceItem: '',
   tenantId: undefined
 })
@@ -323,6 +336,7 @@ const open = async (tenantId, id?: any, detail: boolean = false) => {
       loading.value = true
       const res = await elderlyServiceOrderGet(id)
       dataForm.value = res
+      dataForm.value.image = res.image?JSON.parse(res.image):[]
       dataForm.value.comeTime = formatTimestamp(res.comeTime)
       dataForm.value.orderTime = formatTimestamp(res.orderTime)
       //elderUp(res.elderlyInfo)
@@ -348,9 +362,10 @@ const submitForm = async () => {
     if (!formRef.value) return
     const valid = await formRef.value.validate()
     if (!valid) return
+    let parameter = {...dataForm.value,image:JSON.stringify(dataForm.value.image)}
 
     if(dataForm.value.id) {
-      const res = await elderlyServiceOrderUpdate(dataForm.value)
+      const res = await elderlyServiceOrderUpdate(parameter)
       if (res) {
         message.success(t('common.updateSuccess'))
         dialogVisible.value = false
@@ -358,7 +373,7 @@ const submitForm = async () => {
         emit('success')
       }
     }else {
-      const res = await elderlyServiceOrderCreate(dataForm.value)
+      const res = await elderlyServiceOrderCreate(parameter)
       if (res) {
         message.success(t('common.updateSuccess'))
         dialogVisible.value = false
@@ -400,6 +415,7 @@ const resetForm = () => {
     serviceItem: '',
     serviceHour: '',
     serviceBeginTime: '',
+    image: [],
     serviceEndTime: '',
     orderStatus: '已完成',
     tenantId: undefined

+ 3 - 3
src/views/elderly/nursing/records/dispatchList/index.vue

@@ -71,8 +71,8 @@
       <el-table-column prop="elderName" header-align="center" align="center" label="长者姓名" min-width="150" show-overflow-tooltip/>
       <el-table-column prop="elderSex" header-align="center" align="center" label="性别" min-width="200" show-overflow-tooltip/>
       <el-table-column prop="elderAge" header-align="center" align="center" label="年龄" min-width="200" show-overflow-tooltip/>
-      <el-table-column prop="elderPhone" header-align="center" align="center" label="手机号" min-width="200" show-overflow-tooltip/>
-      <el-table-column prop="orderType" header-align="center" align="center" label="下单方式" min-width="200" show-overflow-tooltip/>
+      <el-table-column prop="serviceItem" header-align="center" align="center" label="服务项目" min-width="200" show-overflow-tooltip/>
+      <el-table-column prop="serviceName" header-align="center" align="center" label="服务人员姓名" min-width="200" show-overflow-tooltip/>
       <el-table-column prop="elderAddress" header-align="center" align="center" label="地址" min-width="200" show-overflow-tooltip/>
       <el-table-column prop="orderTime" header-align="center" align="center" label="订单时间" min-width="150" show-overflow-tooltip>
         <template #default="scope">
@@ -87,7 +87,7 @@
       <el-table-column prop="isExpire" header-align="center" align="center" label="是否过期" min-width="220" show-overflow-tooltip/>
       <el-table-column prop="orderStatus" header-align="center" align="center" label="订单状态" min-width="220" show-overflow-tooltip/>
 
-      <el-table-column label="操作" align="center" width="200" >
+      <el-table-column label="操作" align="center" width="200" fixed="right">
         <template #default="scope">
           <el-button
             link

+ 1 - 2
src/views/system/little-tools/MarkCheckinBillsPaidForm.vue

@@ -23,8 +23,7 @@
   </Dialog>
 </template>
 <script setup lang="ts">
-import ProcessForm from './ProcessForm.vue'
-import { bedChangeCreate, checkPrivateRoom } from '@/api/elderly/elder/bed-change'
+
 import {markCheckinBillsPaid} from "@/views/system/little-tools/api";
 const message = useMessage() // 消息弹窗
 const { t } = useI18n() // 国际化

+ 0 - 2
src/views/system/little-tools/index.vue

@@ -18,8 +18,6 @@
 </template>
 <script setup lang="ts">
 import MarkCheckinBillsPaidForm from "./MarkCheckinBillsPaidForm.vue"
-import {markCheckinBillsPaid} from "@/views/system/little-tools/api";
-import {bedChangeCreate, checkPrivateRoom} from "@/api/elderly/elder/bed-change";
 import {useUserStore} from "@/store/modules/user";
 const message = useMessage() // 消息弹窗
 const userStore = useUserStore()