chenjun hace 1 mes
padre
commit
6c66924663

+ 16 - 1
src/api/elderly/elder/elderly-Info/index.ts

@@ -201,4 +201,19 @@ export const getOtherFilesStatistics = (params) => {
     url: `/elderlyInfo/getOtherFilesStatistics`,
     params
   })
-}
+}
+
+export const getOverdueProcessList = (params) => {
+  return request.get({
+    url: `/bpm/process-instance/get-overdue-list`,
+    params
+  })
+}
+
+export const getOverdueBillList = (params) => {
+  return request.get({
+    url: `/elderly/expenseOrder/getUnpaidExpenseOrderPage`,
+    params
+  })
+}
+

+ 1 - 0
src/components/BedCardModal/index.vue

@@ -108,6 +108,7 @@ const updatePatientData = async (data) => {
     // } catch (e) {
     //   console.error('处理床位信息失败:', e)
     // }
+    console.log("数据:",sourceData)
 
     const patientData = {
       roomName: sourceData.roomName,

+ 6 - 2
src/utils/formatTime.ts

@@ -68,8 +68,12 @@ export function formatDate(date: Date, format?: string): string {
   if (!date) {
     return ''
   }
-  // 日期存在,则进行格式化
-  return date ? dayjs(date).format(format ?? 'YYYY-MM-DD HH:mm:ss') : ''
+  try {
+    // 日期存在,则进行格式化
+    return date ? dayjs(date).format(format ?? 'YYYY-MM-DD HH:mm:ss') : ''
+  } catch (e) {
+    return ''
+  }
 }
 
 /**

+ 7 - 3
src/utils/outBedCard.ts

@@ -1,7 +1,7 @@
 
 import { getDictLabel, DICT_TYPE } from '@/utils/dict';
 import {formatDate} from "@/utils/formatTime";
-import { formatTime } from '@/utils'
+import { formatTime, getInfo } from '@/utils'
 
 let html2pdfInstance: any = null
 const getHtml2pdf = async () => {
@@ -176,8 +176,12 @@ export const getPatientData = (data,dataElder) => {
       bedName: dataForm.value.bedName,
       elderName: dataForm.value.elderName,
       elderSex: dataForm.value.elderSex?.toString() == '1' ? '男' : '女',
-      birthday: formatDate(dataForm.value.birthday, 'YYYY-MM-DD'),
-      checkInTime: dataForm.value.checkInTime ? formatTime(dataForm.value.checkInTime, 'yyyy-MM-dd') : '--',
+      birthday: formatDate(dataForm.value.birthday, 'YYYY-MM-DD')
+        ? formatDate(dataForm.value.birthday, 'YYYY-MM-DD')
+        : dataForm.value.idCard?getInfo(dataForm.value.idCard).birth:'',
+      checkInTime: dataForm.value.checkInTime
+        ? formatTime(dataForm.value.checkInTime, 'yyyy-MM-dd')
+        : '--',
       careLevel: dataForm.value.nurseLevelName,
       carePoints: data?.careNote || '',
       drugAllergyHistoryText: parsedFlagData.drugAllergyHistoryText || '--',

+ 1 - 0
src/views/elderly/apply/nine-precautions/MMSE/index.vue

@@ -8,6 +8,7 @@
       :inline="true"
       label-width="110px"
     >
+      <TenantSelect v-model="queryParams.tenantIds" placeholder="请选择机构名称" prop="tenantIds" />
       <el-form-item label="长者姓名">
         <el-input
           v-model="queryParams.elderName"

+ 1 - 0
src/views/elderly/apply/nine-precautions/anti-entertainment/index.vue

@@ -8,6 +8,7 @@
       :inline="true"
       label-width="110px"
     >
+      <TenantSelect v-model="queryParams.tenantIds" placeholder="请选择机构名称" prop="tenantIds" />
       <el-form-item label="长者姓名">
         <el-input
           v-model="queryParams.elderName"

+ 1 - 0
src/views/elderly/apply/nine-precautions/asphyxiation-by-choking/index.vue

@@ -8,6 +8,7 @@
       :inline="true"
       label-width="110px"
     >
+      <TenantSelect v-model="queryParams.tenantIds" placeholder="请选择机构名称" prop="tenantIds" />
       <el-form-item label="长者姓名">
         <el-input
           v-model="queryParams.elderName"

+ 1 - 0
src/views/elderly/apply/nine-precautions/attack/index.vue

@@ -8,6 +8,7 @@
       :inline="true"
       label-width="110px"
     >
+      <TenantSelect v-model="queryParams.tenantIds" placeholder="请选择机构名称" prop="tenantIds" />
       <el-form-item label="长者姓名">
         <el-input
           v-model="queryParams.elderName"

+ 1 - 0
src/views/elderly/apply/nine-precautions/commit-suicide/index.vue

@@ -8,6 +8,7 @@
       :inline="true"
       label-width="110px"
     >
+      <TenantSelect v-model="queryParams.tenantIds" placeholder="请选择机构名称" prop="tenantIds" />
       <el-form-item label="长者姓名">
         <el-input
           v-model="queryParams.elderName"

+ 1 - 0
src/views/elderly/apply/nine-precautions/communication/index.vue

@@ -8,6 +8,7 @@
       :inline="true"
       label-width="110px"
     >
+      <TenantSelect v-model="queryParams.tenantIds" placeholder="请选择机构名称" prop="tenantIds" />
       <el-form-item label="长者姓名">
         <el-input
           v-model="queryParams.elderName"

+ 1 - 0
src/views/elderly/apply/nine-precautions/daily-life/index.vue

@@ -8,6 +8,7 @@
       :inline="true"
       label-width="110px"
     >
+      <TenantSelect v-model="queryParams.tenantIds" placeholder="请选择机构名称" prop="tenantIds" />
       <el-form-item label="长者姓名">
         <el-input
           v-model="queryParams.elderName"

+ 1 - 0
src/views/elderly/apply/nine-precautions/empyrosis/index.vue

@@ -8,6 +8,7 @@
       :inline="true"
       label-width="110px"
     >
+      <TenantSelect v-model="queryParams.tenantIds" placeholder="请选择机构名称" prop="tenantIds" />
       <el-form-item label="长者姓名">
         <el-input
           v-model="queryParams.elderName"

+ 1 - 0
src/views/elderly/apply/nine-precautions/equilibrium/index.vue

@@ -8,6 +8,7 @@
       :inline="true"
       label-width="110px"
     >
+      <TenantSelect v-model="queryParams.tenantIds" placeholder="请选择机构名称" prop="tenantIds" />
       <el-form-item label="长者姓名">
         <el-input
           v-model="queryParams.elderName"

+ 1 - 0
src/views/elderly/apply/nine-precautions/fall-down/index.vue

@@ -8,6 +8,7 @@
       :inline="true"
       label-width="110px"
     >
+      <TenantSelect v-model="queryParams.tenantIds" placeholder="请选择机构名称" prop="tenantIds" />
       <el-form-item label="长者姓名">
         <el-input
           v-model="queryParams.elderName"

+ 1 - 0
src/views/elderly/apply/nine-precautions/fall-prevention-measures/index.vue

@@ -8,6 +8,7 @@
       :inline="true"
       label-width="110px"
     >
+      <TenantSelect v-model="queryParams.tenantIds" placeholder="请选择机构名称" prop="tenantIds" />
       <el-form-item label="长者姓名">
         <el-input
           v-model="queryParams.elderName"

+ 1 - 0
src/views/elderly/apply/nine-precautions/nutritional-risk/index.vue

@@ -118,6 +118,7 @@ onMounted(() => {
       :inline="true"
       label-width="110px"
     >
+      <TenantSelect v-model="queryParams.tenantIds" placeholder="请选择机构名称" prop="tenantIds" />
       <el-form-item label="长者姓名">
         <el-input
           v-model="queryParams.elderName"

+ 1 - 0
src/views/elderly/apply/nine-precautions/pressure-sores/index.vue

@@ -8,6 +8,7 @@
       :inline="true"
       label-width="110px"
     >
+      <TenantSelect v-model="queryParams.tenantIds" placeholder="请选择机构名称" prop="tenantIds" />
       <el-form-item label="长者姓名">
         <el-input
           v-model="queryParams.elderName"

+ 1 - 0
src/views/elderly/apply/nine-precautions/risk-disclosure-statement/index.vue

@@ -8,6 +8,7 @@
       :inline="true"
       label-width="80px"
     >
+      <TenantSelect v-model="queryParams.tenantIds" placeholder="请选择机构名称" prop="tenantIds" />
       <el-form-item label="长者姓名" prop="elderName">
         <el-input
           v-model="queryParams.elderName"

+ 1 - 0
src/views/elderly/apply/nine-precautions/wander-away/index.vue

@@ -8,6 +8,7 @@
       :inline="true"
       label-width="110px"
     >
+      <TenantSelect v-model="queryParams.tenantIds" placeholder="请选择机构名称" prop="tenantIds" />
       <el-form-item label="长者姓名">
         <el-input
           v-model="queryParams.elderName"

+ 22 - 18
src/views/elderly/elder/elder-file/Second.vue

@@ -1,7 +1,11 @@
 <template>
   <div class="second">
-    <div v-for="(item, index) in form.relativesList" :key="index">
-      <p>第{{ NumberToChineseUtils(index+1) }}托养人信息</p>
+    <div style="margin-bottom: 30px" v-for="(item, index) in form.relativesList" :key="index">
+      <div style="display: flex; flex-direction: row;align-items: center;">
+        <p>第{{ NumberToChineseUtils(index + 1) }}托养人信息</p>
+        <p style="color: #ee9b54;margin-left: 3vw;font-size: 14px">是否为账单推送人:{{ item.isBillSender?'是':'否' }}</p>
+      </div>
+
       <el-row :gutter="20">
         <el-col :lg="6" :md="12" :sm="24" :xs="24">
           <el-form-item label="家属姓名">
@@ -92,7 +96,7 @@
 </template>
 <script lang="ts" setup>
 import { DICT_TYPE, getDictOptions, getStrDictOptions } from '@/utils/dict'
-import {NumberToChineseUtils} from "@/utils/dateUtil";
+import { NumberToChineseUtils } from '@/utils/dateUtil'
 const props = defineProps({
   dataForm: {
     type: Object as any,
@@ -122,22 +126,22 @@ watch(
   () => {
     form.value = props.dataForm
     if (form.value.relativesList.length < 2) {
-        for(let i = 0; i <= 2 - form.value.relativesList.length; i++){
-          form.value.relativesList.push({
-            name: '',
-            relation: '',
-            gender: '',
-            phone: '',
-            nowAddress: '',
-            isurgency: '0',
-            address: '',
-            workUnit: '',
-            idCard: '',
-            papersType: '',
-            telephone: ''
-          })
-        }
+      for (let i = 0; i <= 2 - form.value.relativesList.length; i++) {
+        form.value.relativesList.push({
+          name: '',
+          relation: '',
+          gender: '',
+          phone: '',
+          nowAddress: '',
+          isurgency: '0',
+          address: '',
+          workUnit: '',
+          idCard: '',
+          papersType: '',
+          telephone: ''
+        })
       }
+    }
   }
 )
 </script>

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

@@ -29,7 +29,11 @@ import MarkCheckinBillsPaidForm from './MarkCheckinBillsPaidForm.vue'
 import AddItemForm from './AddItemForm.vue'
 import DeleteItemForm from './DeleteItemForm.vue'
 import { useUserStore } from '@/store/modules/user'
-import { getOtherFilesStatistics } from '@/api/elderly/elder/elderly-Info'
+import {
+  getOtherFilesStatistics,
+  getOverdueBillList,
+  getOverdueProcessList
+} from '@/api/elderly/elder/elderly-Info'
 import { exportWithCustomHeaders } from '@/utils/excel-export'
 import { ElLoading } from 'element-plus'
 import { getUserGroupTenant } from '@/api/system/user'
@@ -47,7 +51,9 @@ const cards = ref([
   { id: 1, title: '为长者增加月度费用', content: '只操作本机构的,集团账号时不要操作' },
   { id: 2, title: '为长者删除月度费用', content: '只操作本机构的,集团账号时不要操作' },
   { id: 3, title: '统计院区档案上传情况', content: '所有院区的档案上传情况统计' },
-  { id: 4, title: '导入床头卡信息', content: '导入健康档案信息' }
+  { id: 4, title: '导入床头卡信息', content: '导入健康档案信息' },
+  { id: 5, title: '机构流程实时审批统计', content: '查询所有院区的' },
+  { id: 6, title: '账单缴费及时性统计', content: '查询所有院区的' }
 ])
 
 const handleExportStatistics = async () => {
@@ -104,6 +110,101 @@ const handleExportStatistics = async () => {
   }
 }
 
+const handleExportProcess = async () => {
+  const fullscreenLoading = ElLoading.service({
+    lock: true,
+    text: '正在获取机构数据...',
+    background: 'rgba(0, 0, 0, 0.7)'
+  })
+  try {
+    // 获取机构数据
+    const treeRes = await getUserGroupTenant({ userId: 1 })
+    //console.log('getUserGroupTenant 返回:', treeRes)
+    const tenantIds = treeRes.map((item: any) => {
+      return { id: item.orgTenantId, name: item.orgTenantName }
+    })
+    console.log('tenantIds:', tenantIds)
+
+    fullscreenLoading.setText('正在导出,请稍候...')
+    const dataList = <any>[]
+    for (const tenantId of tenantIds) {
+      const data = await getOverdueProcessList({ tenantId: tenantId.id, timeoutDays: 3 })
+      if (data && tenantId.name != '测试居家') {
+        console.log('数据 返回:', data)
+        dataList.push({ orgName: tenantId.name, num: data.length })
+      }
+    }
+    console.log('数据 返回:', dataList)
+
+    if (dataList.length > 0) {
+      const headers = [
+        { key: 'orgName', title: '机构名称', width: 40 },
+        { key: 'num', title: '院区审批流程未及时审核,且超过3天的未审批数量(条)', width: 50 }
+      ]
+      console.log('准备导出的数据:', dataList)
+      await exportWithCustomHeaders(dataList, headers, '各院审批数据及时性统计.xlsx')
+      message.success('导出成功')
+    } else {
+      message.warning('没有数据可以导出')
+    }
+  } catch (e) {
+    console.error('导出失败:', e)
+    message.error(e instanceof Error ? e.message : '导出失败')
+  } finally {
+    fullscreenLoading.close()
+  }
+}
+
+const handleExportBill = async () => {
+  const fullscreenLoading = ElLoading.service({
+    lock: true,
+    text: '正在获取机构数据...',
+    background: 'rgba(0, 0, 0, 0.7)'
+  })
+  try {
+    // 获取机构数据
+    const treeRes = await getUserGroupTenant({ userId: 1 })
+    //console.log('getUserGroupTenant 返回:', treeRes)
+    const tenantIds = treeRes.map((item: any) => {
+      return { id: item.orgTenantId, name: item.orgTenantName }
+    })
+    // console.log('tenantIds:', tenantIds)
+
+    fullscreenLoading.setText('正在导出,请稍候...')
+    const dataList = <any>[]
+    for (const tenantId of tenantIds) {
+      const data = await getOverdueBillList({
+        pageNo: 1,
+        pageSize: 10,
+        tenantId: tenantId.id,
+        billStartMonth: '2026-01'
+      })
+      if (data && data.list && data.total && tenantId.name != '测试居家') {
+        console.log('数据 返回:', data)
+        dataList.push({ orgName: tenantId.name, num: data.total })
+      }
+    }
+    console.log('数据 返回:', dataList)
+
+    if (dataList.length > 0) {
+      const headers = [
+        { key: 'orgName', title: '机构名称', width: 40 },
+        { key: 'num', title: '院区审批流程未及时审核,且超过3天的未审批数量(条)', width: 50 }
+      ]
+      console.log('准备导出的数据:', dataList)
+      await exportWithCustomHeaders(dataList, headers, '各院审批数据及时性统计.xlsx')
+      message.success('导出成功')
+    } else {
+      message.warning('没有数据可以导出')
+    }
+  } catch (e) {
+    console.error('导出失败:', e)
+    message.error(e instanceof Error ? e.message : '导出失败')
+  } finally {
+    fullscreenLoading.close()
+  }
+}
+
 const itemClick = (id: any) => {
   switch (id) {
     case 0: //把入院账单设置成已缴费状态
@@ -124,6 +225,12 @@ const itemClick = (id: any) => {
     case 4: //导入
       importRef.value.open(userStore.orgTenantId[0])
 
+      break
+    case 5: //院区流程及时性
+      handleExportProcess()
+      break
+    case 6: //院区流程及时性
+      handleExportBill()
       break
   }
 }