Browse Source

九防增加导出和风险等级过滤

chenjun 3 weeks ago
parent
commit
975ca72fa1
31 changed files with 746 additions and 200 deletions
  1. 4 0
      src/views/elderly/apply/nine-precautions/MMSE/AddForm.vue
  2. 40 16
      src/views/elderly/apply/nine-precautions/MMSE/index.vue
  3. 4 0
      src/views/elderly/apply/nine-precautions/anti-entertainment/AddForm.vue
  4. 41 16
      src/views/elderly/apply/nine-precautions/anti-entertainment/index.vue
  5. 4 0
      src/views/elderly/apply/nine-precautions/asphyxiation-by-choking/AddForm.vue
  6. 39 14
      src/views/elderly/apply/nine-precautions/asphyxiation-by-choking/index.vue
  7. 4 0
      src/views/elderly/apply/nine-precautions/attack/AddForm.vue
  8. 40 16
      src/views/elderly/apply/nine-precautions/attack/index.vue
  9. 4 0
      src/views/elderly/apply/nine-precautions/commit-suicide/AddForm.vue
  10. 85 18
      src/views/elderly/apply/nine-precautions/commit-suicide/index.vue
  11. 4 0
      src/views/elderly/apply/nine-precautions/communication/AddForm.vue
  12. 40 18
      src/views/elderly/apply/nine-precautions/communication/index.vue
  13. 4 0
      src/views/elderly/apply/nine-precautions/daily-life/AddForm.vue
  14. 0 1
      src/views/elderly/apply/nine-precautions/daily-life/index.vue
  15. 4 0
      src/views/elderly/apply/nine-precautions/empyrosis/AddForm.vue
  16. 41 16
      src/views/elderly/apply/nine-precautions/empyrosis/index.vue
  17. 4 0
      src/views/elderly/apply/nine-precautions/equilibrium/AddForm.vue
  18. 41 16
      src/views/elderly/apply/nine-precautions/equilibrium/index.vue
  19. 4 0
      src/views/elderly/apply/nine-precautions/fall-down/AddForm.vue
  20. 41 16
      src/views/elderly/apply/nine-precautions/fall-down/index.vue
  21. 4 0
      src/views/elderly/apply/nine-precautions/fall-prevention-measures/AddForm.vue
  22. 41 16
      src/views/elderly/apply/nine-precautions/fall-prevention-measures/index.vue
  23. 5 1
      src/views/elderly/apply/nine-precautions/nutritional-risk/AddForm.vue
  24. 4 0
      src/views/elderly/apply/nine-precautions/pressure-sores/AddForm.vue
  25. 41 16
      src/views/elderly/apply/nine-precautions/pressure-sores/index.vue
  26. 1 1
      src/views/elderly/apply/nine-precautions/risk-disclosure-statement/Form.vue
  27. 4 0
      src/views/elderly/apply/nine-precautions/wander-away/AddForm.vue
  28. 86 18
      src/views/elderly/apply/nine-precautions/wander-away/index.vue
  29. 65 0
      src/views/elderly/elder/elder-file/index.vue
  30. 46 0
      src/views/elderly/fee/bill-pay/index.vue
  31. 1 1
      src/views/elderly/fee/daily-fee/index.vue

+ 4 - 0
src/views/elderly/apply/nine-precautions/MMSE/AddForm.vue

@@ -347,9 +347,11 @@
 import { computed, ref } from 'vue'
 
 import dayjs from 'dayjs'
+import { useUserStore } from '@/store/modules/user'
 
 import {mmseCreate, mmseGetById, mmseUpdate} from "@/api/social-work";
 const message = useMessage() // 消息弹窗
+const userStore = useUserStore()
 const { t } = useI18n() // 国际化
 const title = ref('')
 const dialogVisible = ref(false) // 弹窗
@@ -740,6 +742,7 @@ const handleExport = () => {
   const getNamingMark = (score) => score === 1 ? '☑ 正确 (1分)' : '☐ 错误 (0分)'
 
   // 构建打印内容
+  const tenantName = userStore.getTenantName || '' // 当前登录的机构名称
   const printContent = `
     <!DOCTYPE html>
     <html>
@@ -942,6 +945,7 @@ const handleExport = () => {
       </style>
     </head>
     <body>
+      <div class="tenant-name" style="text-align: end;width: 100%;font-size: 16px; font-weight: bold; margin-bottom: 10px;">${tenantName}</div>
       <div class="header">
         <h1>简易精神状态评价量表(MMSE)</h1>
         <div class="sub-title">Mini-Mental State Examination</div>

+ 40 - 16
src/views/elderly/apply/nine-precautions/MMSE/index.vue

@@ -18,6 +18,23 @@
         />
       </el-form-item>
 
+      <el-form-item label="风险等级">
+        <el-select v-model="queryParams.risk" class="!w-240px">
+          <el-option
+            v-for="(item, index) in [
+              { label: '无风险', value: 'none' },
+              { label: '低风险', value: 'low' },
+              { label: '中风险', value: 'medium' },
+              { label: '高风险', value: 'high' }
+            ]"
+            :key="index"
+            placeholder="请选择"
+            :label="item.label"
+            :value="item.value"
+          />
+        </el-select>
+      </el-form-item>
+
       <el-form-item label="楼栋">
         <el-select
           v-model="queryParams.buildId"
@@ -84,7 +101,7 @@
       <ButtonAdd @click="openForm(undefined)" />
       <ButtonImport @click="handleImportCard" />
       <!--      <el-button @click="inputH" type="success"><Icon icon="fa:cloud-upload" :size="16" class="mr-1"/>导入</el-button>-->
-</div>
+    </div>
     <el-table v-loading="loading" :data="list" :header-cell-style="tableHeaderColor">
       <el-table-column header-align="center" align="center" label="序号" width="60">
         <template #default="scope">
@@ -218,6 +235,7 @@ let queryParams = reactive({
   elderName: '',
   assessor: '',
   floorId: '',
+  risk: '',
   // assessorDate: getCurrentMonthRange(),
   assessDate: [],
   tenantIds: userStore.orgTenantId
@@ -232,6 +250,7 @@ const handleImportCard = async () => {
       pageNo: 1,
       pageSize: 9999,
       elderName: queryParams.elderName,
+      risk: queryParams.risk,
       assessor: queryParams.assessor,
       assessDate: queryParams.assessDate,
       tenantIds: queryParams.tenantIds
@@ -260,32 +279,37 @@ const handleImportCard = async () => {
 
     const headers = [
       {
-            'key': 'orgName',
-            'title': '机构名称'
+        key: 'orgName',
+        title: '机构名称'
       },
       {
-            'key': 'elderName',
-            'title': '长者姓名'
+        key: 'elderName',
+        title: '长者姓名'
       },
       {
-            'key': 'assessor',
-            'title': '评估人'
+        key: 'assessor',
+        title: '评估人'
       },
       {
-            'key': 'assessDate',
-            'title': '记录日期'
+        key: 'assessDate',
+        title: '记录日期'
       },
       {
-            'key': 'riskLevelText',
-            'title': '风险等级'
+        key: 'riskLevelText',
+        title: '风险等级'
       },
       {
-            'key': 'creator',
-            'title': '记录人'
+        key: 'creator',
+        title: '记录人'
       }
-]
+    ]
 
-    exportWithExpandedObjectArrays(processedData, headers, `MMSE认知评估_${new Date().getTime()}.xlsx`, 'MMSE认知评估')
+    await exportWithExpandedObjectArrays(
+      processedData,
+      headers,
+      `MMSE认知评估_${new Date().getTime()}.xlsx`,
+      'MMSE认知评估'
+    )
     message.success('导出成功')
   } catch (error) {
     console.error('导出失败:', error)
@@ -295,7 +319,6 @@ const handleImportCard = async () => {
   }
 }
 
-
 const inputH = () => {
   importRef.value.open(queryParams.tenantIds[0])
 }
@@ -326,6 +349,7 @@ const resetQuery = () => {
   queryParams.elderName = ''
   queryParams.assessor = ''
   queryParams.floorId = ''
+  queryParams.risk = ''
   queryParams.tenantIds = userStore.orgTenantId
   // queryParams.assessorDate= getCurrentMonthRange()
   queryParams.assessDate = []

+ 4 - 0
src/views/elderly/apply/nine-precautions/anti-entertainment/AddForm.vue

@@ -242,12 +242,14 @@
 <script lang="ts" setup>
 import { computed, ref, reactive } from 'vue'
 import dayjs from 'dayjs'
+import { useUserStore } from '@/store/modules/user'
 import {
   entertainmentCreate, entertainmentGetById, entertainmentUpdate,
   fallDownPage, wanderAwayPage, ngasrPage,
 } from "@/api/social-work";
 
 const message = useMessage()
+const userStore = useUserStore()
 const { t } = useI18n()
 const title = ref('')
 const dialogVisible = ref(false)
@@ -637,6 +639,7 @@ const handleExport = () => {
   ]
 
   // 构建打印内容
+  const tenantName = userStore.getTenantName || '' // 当前登录的机构名称
   const printContent = `
     <!DOCTYPE html>
     <html>
@@ -796,6 +799,7 @@ const handleExport = () => {
       </style>
     </head>
     <body>
+      <div class="tenant-name" style="text-align: end;width: 100%;font-size: 16px; font-weight: bold; margin-bottom: 10px;">${tenantName}</div>
       <div class="header">
         <h1>防文娱活动意外评估表</h1>
       </div>

+ 41 - 16
src/views/elderly/apply/nine-precautions/anti-entertainment/index.vue

@@ -18,6 +18,23 @@
         />
       </el-form-item>
 
+      <el-form-item label="风险等级">
+        <el-select v-model="queryParams.risk" class="!w-240px">
+          <el-option
+            v-for="(item, index) in [
+              { label: '无风险', value: 'none' },
+              { label: '低风险', value: 'low' },
+              { label: '中风险', value: 'medium' },
+              { label: '高风险', value: 'high' }
+            ]"
+            :key="index"
+            placeholder="请选择"
+            :label="item.label"
+            :value="item.value"
+          />
+        </el-select>
+      </el-form-item>
+
       <el-form-item label="楼栋">
         <el-select
           v-model="queryParams.buildId"
@@ -209,6 +226,7 @@ let queryParams = reactive({
   assessor: '',
   floorId: '',
   buildId: '',
+  risk: '',
   // assessDate: getCurrentMonthRange(),
   assessDate: [],
   tenantIds: userStore.orgTenantId
@@ -223,6 +241,7 @@ const handleImportCard = async () => {
       pageNo: 1,
       pageSize: 9999,
       elderName: queryParams.elderName,
+      risk: queryParams.risk,
       assessor: queryParams.assessor,
       assessDate: queryParams.assessDate,
       tenantIds: queryParams.tenantIds
@@ -250,36 +269,41 @@ const handleImportCard = async () => {
 
     const headers = [
       {
-            'key': 'orgName',
-            'title': '机构名称'
+        key: 'orgName',
+        title: '机构名称'
       },
       {
-            'key': 'elderName',
-            'title': '长者姓名'
+        key: 'elderName',
+        title: '长者姓名'
       },
       {
-            'key': 'assessor',
-            'title': '评估人'
+        key: 'assessor',
+        title: '评估人'
       },
       {
-            'key': 'assessDate',
-            'title': '记录日期'
+        key: 'assessDate',
+        title: '记录日期'
       },
       {
-            'key': 'assessScore',
-            'title': '评估总得分'
+        key: 'assessScore',
+        title: '评估总得分'
       },
       {
-            'key': 'riskLevelText',
-            'title': '风险等级'
+        key: 'riskLevelText',
+        title: '风险等级'
       },
       {
-            'key': 'creator',
-            'title': '记录人'
+        key: 'creator',
+        title: '记录人'
       }
-]
+    ]
 
-    exportWithExpandedObjectArrays(processedData, headers, `防文娱活动意外评估_${new Date().getTime()}.xlsx`, '防文娱活动意外评估')
+    await exportWithExpandedObjectArrays(
+      processedData,
+      headers,
+      `防文娱活动意外评估_${new Date().getTime()}.xlsx`,
+      '防文娱活动意外评估'
+    )
     message.success('导出成功')
   } catch (error) {
     console.error('导出失败:', error)
@@ -316,6 +340,7 @@ const resetQuery = () => {
   queryParams.assessor = ''
   queryParams.floorId = ''
   queryParams.buildId = ''
+  queryParams.risk = ''
   queryParams.tenantIds = userStore.orgTenantId
   // queryParams.assessDate = getCurrentMonthRange()
   queryParams.assessDate = []

+ 4 - 0
src/views/elderly/apply/nine-precautions/asphyxiation-by-choking/AddForm.vue

@@ -165,6 +165,7 @@
 <script lang="ts" setup>
 import { ref, reactive } from 'vue'
 import dayjs from 'dayjs'
+import { useUserStore } from '@/store/modules/user'
 import {
   asphyxiationCreate,
   asphyxiationGetById,
@@ -172,6 +173,7 @@ import {
 } from "@/api/social-work";
 
 const message = useMessage()
+const userStore = useUserStore()
 const { t } = useI18n()
 const title = ref('')
 const dialogVisible = ref(false)
@@ -467,6 +469,7 @@ const handleExport = () => {
     return `<div class="prevention-item">${checked}${option}</div>`
   }).join('')
 
+  const tenantName = userStore.getTenantName || '' // 当前登录的机构名称
   const printContent = `
     <!DOCTYPE html>
     <html>
@@ -561,6 +564,7 @@ const handleExport = () => {
       </style>
     </head>
     <body>
+      <div class="tenant-name" style="text-align: end;width: 100%;font-size: 16px; font-weight: bold; margin-bottom: 10px;">${tenantName}</div>
       <div class="header">
         <div class="title">防噎食评估表</div>
       </div>

+ 39 - 14
src/views/elderly/apply/nine-precautions/asphyxiation-by-choking/index.vue

@@ -18,6 +18,23 @@
         />
       </el-form-item>
 
+      <el-form-item label="风险等级">
+        <el-select v-model="queryParams.risk" class="!w-240px">
+          <el-option
+            v-for="(item, index) in [
+              { label: '无风险', value: 'none' },
+              { label: '低风险', value: 'low' },
+              { label: '中风险', value: 'medium' },
+              { label: '高风险', value: 'high' }
+            ]"
+            :key="index"
+            placeholder="请选择"
+            :label="item.label"
+            :value="item.value"
+          />
+        </el-select>
+      </el-form-item>
+
       <el-form-item label="评估人">
         <el-input v-model="queryParams.assessor" placeholder="评估人" class="!w-240px" clearable />
       </el-form-item>
@@ -166,6 +183,7 @@ let queryParams = reactive({
   pageSize: 10,
   elderName: '',
   assessor: '',
+  risk: '',
   // assessDate: getCurrentMonthRange(),
   assessDate: [],
   tenantIds: userStore.orgTenantId
@@ -181,6 +199,7 @@ const handleImportCard = async () => {
       pageSize: 9999,
       elderName: queryParams.elderName,
       assessor: queryParams.assessor,
+      risk: queryParams.risk,
       assessDate: queryParams.assessDate,
       tenantIds: queryParams.tenantIds
     }
@@ -207,32 +226,37 @@ const handleImportCard = async () => {
 
     const headers = [
       {
-            'key': 'orgName',
-            'title': '机构名称'
+        key: 'orgName',
+        title: '机构名称'
       },
       {
-            'key': 'elderName',
-            'title': '长者姓名'
+        key: 'elderName',
+        title: '长者姓名'
       },
       {
-            'key': 'assessor',
-            'title': '评估人'
+        key: 'assessor',
+        title: '评估人'
       },
       {
-            'key': 'assessDate',
-            'title': '记录日期'
+        key: 'assessDate',
+        title: '记录日期'
       },
       {
-            'key': 'riskLevelText',
-            'title': '风险等级'
+        key: 'riskLevelText',
+        title: '风险等级'
       },
       {
-            'key': 'creator',
-            'title': '记录人'
+        key: 'creator',
+        title: '记录人'
       }
-]
+    ]
 
-    exportWithExpandedObjectArrays(processedData, headers, `防噎食评估_${new Date().getTime()}.xlsx`, '防噎食评估')
+    await exportWithExpandedObjectArrays(
+      processedData,
+      headers,
+      `防噎食评估_${new Date().getTime()}.xlsx`,
+      '防噎食评估'
+    )
     message.success('导出成功')
   } catch (error) {
     console.error('导出失败:', error)
@@ -267,6 +291,7 @@ const handleQuery = async () => {
 const resetQuery = () => {
   queryParams.elderName = ''
   queryParams.assessor = ''
+  queryParams.risk = ''
   queryParams.tenantIds = userStore.orgTenantId
   // queryParams.assessDate = getCurrentMonthRange()
   queryParams.assessDate = []

+ 4 - 0
src/views/elderly/apply/nine-precautions/attack/AddForm.vue

@@ -242,9 +242,11 @@
 import { computed, ref, watch } from 'vue'
 
 import dayjs from 'dayjs'
+import { useUserStore } from '@/store/modules/user'
 
 import { attackRiskCreate, attackRiskGetById, attackRiskUpdate, attackRiskGetByElderId } from "@/api/social-work";
 const message = useMessage() // 消息弹窗
+const userStore = useUserStore()
 const { t } = useI18n() // 国际化
 const title = ref('')
 const dialogVisible = ref(false) // 弹窗
@@ -588,6 +590,7 @@ const handleExport = () => {
   }
 
   // 构建打印内容
+  const tenantName = userStore.getTenantName || '' // 当前登录的机构名称
   const printContent = `
     <!DOCTYPE html>
     <html>
@@ -791,6 +794,7 @@ const handleExport = () => {
       </style>
     </head>
     <body>
+      <div class="tenant-name" style="text-align: end;width: 100%;font-size: 16px; font-weight: bold; margin-bottom: 10px;">${tenantName}</div>
       <div class="header">
         <h1>攻击风险因素评估量表</h1>
       </div>

+ 40 - 16
src/views/elderly/apply/nine-precautions/attack/index.vue

@@ -18,6 +18,23 @@
         />
       </el-form-item>
 
+      <el-form-item label="风险等级">
+        <el-select v-model="queryParams.risk" class="!w-240px">
+          <el-option
+            v-for="(item, index) in [
+              { label: '无风险', value: 'none' },
+              { label: '低风险', value: 'low' },
+              { label: '中风险', value: 'medium' },
+              { label: '高风险', value: 'high' }
+            ]"
+            :key="index"
+            placeholder="请选择"
+            :label="item.label"
+            :value="item.value"
+          />
+        </el-select>
+      </el-form-item>
+
       <el-form-item label="楼栋">
         <el-select
           v-model="queryParams.buildId"
@@ -84,7 +101,7 @@
       <ButtonAdd @click="openForm(undefined)" />
       <ButtonImport @click="handleImportCard" />
       <!--      <el-button @click="inputH" type="success"><Icon icon="fa:cloud-upload" :size="16" class="mr-1"/>导入</el-button>-->
-</div>
+    </div>
     <el-table v-loading="loading" :data="list" :header-cell-style="tableHeaderColor">
       <el-table-column header-align="center" align="center" label="序号" width="60">
         <template #default="scope">
@@ -221,6 +238,7 @@ let queryParams = reactive({
   assessor: '',
   floorId: '',
   buildId: '',
+  risk: '',
   // assessDate: getCurrentMonthRange(),
   assessDate: [],
   tenantIds: userStore.orgTenantId
@@ -235,6 +253,7 @@ const handleImportCard = async () => {
       pageNo: 1,
       pageSize: 9999,
       elderName: queryParams.elderName,
+      risk: queryParams.risk,
       assessor: queryParams.assessor,
       assessDate: queryParams.assessDate,
       tenantIds: queryParams.tenantIds
@@ -263,32 +282,37 @@ const handleImportCard = async () => {
 
     const headers = [
       {
-            'key': 'orgName',
-            'title': '机构名称'
+        key: 'orgName',
+        title: '机构名称'
       },
       {
-            'key': 'elderName',
-            'title': '长者姓名'
+        key: 'elderName',
+        title: '长者姓名'
       },
       {
-            'key': 'assessor',
-            'title': '评估人'
+        key: 'assessor',
+        title: '评估人'
       },
       {
-            'key': 'riskLevelText',
-            'title': '风险等级'
+        key: 'riskLevelText',
+        title: '风险等级'
       },
       {
-            'key': 'assessDate',
-            'title': '记录日期'
+        key: 'assessDate',
+        title: '记录日期'
       },
       {
-            'key': 'creator',
-            'title': '记录人'
+        key: 'creator',
+        title: '记录人'
       }
-]
+    ]
 
-    exportWithExpandedObjectArrays(processedData, headers, `攻击风险评估_${new Date().getTime()}.xlsx`, '攻击风险评估')
+    await exportWithExpandedObjectArrays(
+      processedData,
+      headers,
+      `攻击风险评估_${new Date().getTime()}.xlsx`,
+      '攻击风险评估'
+    )
     message.success('导出成功')
   } catch (error) {
     console.error('导出失败:', error)
@@ -298,7 +322,6 @@ const handleImportCard = async () => {
   }
 }
 
-
 /** 查询列表 */
 const getList = async () => {
   loading.value = true
@@ -327,6 +350,7 @@ const resetQuery = () => {
   queryParams.assessor = ''
   queryParams.floorId = ''
   queryParams.buildId = ''
+  queryParams.risk = ''
   queryParams.tenantIds = userStore.orgTenantId
   // queryParams.assessDate= getCurrentMonthRange()
   queryParams.assessDate = []

+ 4 - 0
src/views/elderly/apply/nine-precautions/commit-suicide/AddForm.vue

@@ -168,9 +168,11 @@
 import { computed, ref, watch } from 'vue'
 
 import dayjs from 'dayjs'
+import { useUserStore } from '@/store/modules/user'
 
 import { ngasrCreate, ngasrGetById, ngasrUpdate, ngasrGetByElderId } from "@/api/social-work";
 const message = useMessage() // 消息弹窗
+const userStore = useUserStore()
 const { t } = useI18n() // 国际化
 const title = ref('')
 const dialogVisible = ref(false) // 弹窗
@@ -510,6 +512,7 @@ const handleExport = () => {
   }).join('')
 
   // 构建打印内容
+  const tenantName = userStore.getTenantName || '' // 当前登录的机构名称
   const printContent = `
     <!DOCTYPE html>
     <html>
@@ -714,6 +717,7 @@ const handleExport = () => {
       </style>
     </head>
     <body>
+      <div class="tenant-name" style="text-align: end;width: 100%;font-size: 16px; font-weight: bold; margin-bottom: 10px;">${tenantName}</div>
       <div class="header">
         <h1>自杀风险评估量表(NGASR)</h1>
       </div>

+ 85 - 18
src/views/elderly/apply/nine-precautions/commit-suicide/index.vue

@@ -18,6 +18,49 @@
         />
       </el-form-item>
 
+      <el-form-item label="风险等级">
+        <el-select v-model="queryParams.risk" class="!w-240px">
+          <el-option
+            v-for="(item, index) in [
+              { label: '无风险', value: 'none' },
+              { label: '低风险', value: 'low' },
+              { label: '中风险', value: 'medium' },
+              { label: '高风险', value: 'high' }
+            ]"
+            :key="index"
+            placeholder="请选择"
+            :label="item.label"
+            :value="item.value"
+          />
+        </el-select>
+      </el-form-item>
+
+      <el-form-item label="楼栋">
+        <el-select
+          v-model="queryParams.buildId"
+          placeholder="选择楼栋"
+          style="width: 180px"
+          @change="handleBuildChange"
+        >
+          <el-option
+            v-for="(item, index) in buildList"
+            :key="index"
+            :label="item.buildName"
+            :value="item.id"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="楼层">
+        <el-select v-model="queryParams.floorId" placeholder="选择楼层" style="width: 180px">
+          <el-option
+            v-for="(item, index) in floorList"
+            :key="index"
+            :label="item.floorName"
+            :value="item.id"
+          />
+        </el-select>
+      </el-form-item>
+
       <el-form-item label="评估人">
         <el-input
           v-model="queryParams.assessor"
@@ -58,7 +101,7 @@
       <ButtonAdd @click="openForm(undefined)" />
       <ButtonImport @click="handleImportCard" />
       <!--      <el-button @click="inputH" type="success"><Icon icon="fa:cloud-upload" :size="16" class="mr-1"/>导入</el-button>-->
-</div>
+    </div>
     <el-table v-loading="loading" :data="list" :header-cell-style="tableHeaderColor">
       <el-table-column header-align="center" align="center" label="序号" width="60">
         <template #default="scope">
@@ -174,6 +217,8 @@ import { ngasrDelete, ngasrPage } from '@/api/social-work'
 import { exportWithExpandedObjectArrays } from '@/utils/excel-export'
 import { getRiskLevelInfo } from '@/utils/risk-assessment'
 import { findLabelById } from '@/utils/dict'
+import { ref } from 'vue'
+import { getBuildList } from '@/api/system/badManage'
 const message = useMessage() // 消息弹窗
 const { t } = useI18n() // 国际化
 const userStore = useUserStore()
@@ -189,6 +234,7 @@ let queryParams = reactive({
   pageSize: 10,
   elderName: '',
   assessor: '',
+  risk: '',
   // assessDate: getCurrentMonthRange(),
   assessDate: [],
   tenantIds: userStore.orgTenantId
@@ -203,6 +249,7 @@ const handleImportCard = async () => {
       pageNo: 1,
       pageSize: 9999,
       elderName: queryParams.elderName,
+      risk: queryParams.risk,
       assessor: queryParams.assessor,
       assessDate: queryParams.assessDate,
       tenantIds: queryParams.tenantIds
@@ -231,32 +278,37 @@ const handleImportCard = async () => {
 
     const headers = [
       {
-            'key': 'orgName',
-            'title': '机构名称'
+        key: 'orgName',
+        title: '机构名称'
       },
       {
-            'key': 'elderName',
-            'title': '长者姓名'
+        key: 'elderName',
+        title: '长者姓名'
       },
       {
-            'key': 'assessor',
-            'title': '评估人'
+        key: 'assessor',
+        title: '评估人'
       },
       {
-            'key': 'assessDate',
-            'title': '记录日期'
+        key: 'assessDate',
+        title: '记录日期'
       },
       {
-            'key': 'riskLevelText',
-            'title': '风险等级'
+        key: 'riskLevelText',
+        title: '风险等级'
       },
       {
-            'key': 'creator',
-            'title': '记录人'
+        key: 'creator',
+        title: '记录人'
       }
-]
+    ]
 
-    exportWithExpandedObjectArrays(processedData, headers, `自伤自杀风险评估_${new Date().getTime()}.xlsx`, '自伤自杀风险评估')
+    await exportWithExpandedObjectArrays(
+      processedData,
+      headers,
+      `自伤自杀风险评估_${new Date().getTime()}.xlsx`,
+      '自伤自杀风险评估'
+    )
     message.success('导出成功')
   } catch (error) {
     console.error('导出失败:', error)
@@ -266,7 +318,6 @@ const handleImportCard = async () => {
   }
 }
 
-
 /** 查询列表 */
 const getList = async () => {
   loading.value = true
@@ -293,6 +344,9 @@ const handleQuery = async () => {
 const resetQuery = () => {
   queryParams.elderName = ''
   queryParams.assessor = ''
+  queryParams.floorId = ''
+  queryParams.buildId = ''
+  queryParams.risk = ''
   queryParams.tenantIds = userStore.orgTenantId
   // queryParams.assessDate= getCurrentMonthRange()
   queryParams.assessDate = []
@@ -350,13 +404,26 @@ const cancelDelete = async (id: number) => {
   } catch {}
 }
 
+const floorList = ref([])
+const buildList = ref([])
+const handleBuildChange = (buildId: any) => {
+  const selectedBuild = buildList.value.find((item: any) => item.id === buildId)
+  if (selectedBuild) {
+    floorList.value = selectedBuild.floorList || []
+  }
+}
+
 const route = useRoute()
 /** 初始化 **/
-onMounted(() => {
+onMounted(async () => {
   if (route.query && route.query.elderName) {
     queryParams.elderName = route.query.elderName as string
   }
-  getList()
+  await getList()
+
+  try {
+    buildList.value = await getBuildList({ tenantIds: queryParams.tenantIds[0] })
+  } catch (e) {}
 })
 
 // 表头格式

+ 4 - 0
src/views/elderly/apply/nine-precautions/communication/AddForm.vue

@@ -207,9 +207,11 @@
 import { computed, ref } from 'vue'
 
 import dayjs from 'dayjs'
+import { useUserStore } from '@/store/modules/user'
 
 import { perceptionCreate, perceptionGetById, perceptionUpdate, perceptionGetByElderId } from "@/api/social-work";
 const message = useMessage() // 消息弹窗
+const userStore = useUserStore()
 const { t } = useI18n() // 国际化
 const title = ref('')
 const dialogVisible = ref(false) // 弹窗
@@ -509,6 +511,7 @@ const handleExport = () => {
   }
 
   // 构建打印内容
+  const tenantName = userStore.getTenantName || '' // 当前登录的机构名称
   const printContent = `
     <!DOCTYPE html>
     <html>
@@ -722,6 +725,7 @@ const handleExport = () => {
       </style>
     </head>
     <body>
+      <div class="tenant-name" style="text-align: end;width: 100%;font-size: 16px; font-weight: bold; margin-bottom: 10px;">${tenantName}</div>
       <div class="header">
         <h1>感知觉与沟通评估表</h1>
       </div>

+ 40 - 18
src/views/elderly/apply/nine-precautions/communication/index.vue

@@ -18,6 +18,23 @@
         />
       </el-form-item>
 
+      <el-form-item label="风险等级">
+        <el-select v-model="queryParams.risk" class="!w-240px">
+          <el-option
+            v-for="(item, index) in [
+              { label: '无风险', value: 'none' },
+              { label: '低风险', value: 'low' },
+              { label: '中风险', value: 'medium' },
+              { label: '高风险', value: 'high' }
+            ]"
+            :key="index"
+            placeholder="请选择"
+            :label="item.label"
+            :value="item.value"
+          />
+        </el-select>
+      </el-form-item>
+
       <el-form-item label="楼栋">
         <el-select
           v-model="queryParams.buildId"
@@ -84,7 +101,7 @@
       <ButtonAdd @click="openForm(undefined)" />
       <ButtonImport @click="handleImportCard" />
       <!--      <el-button @click="inputH" type="success"><Icon icon="fa:cloud-upload" :size="16" class="mr-1"/>导入</el-button>-->
-</div>
+    </div>
     <el-table v-loading="loading" :data="list" :header-cell-style="tableHeaderColor">
       <el-table-column header-align="center" align="center" label="序号" width="60">
         <template #default="scope">
@@ -218,6 +235,7 @@ let queryParams = reactive({
   elderName: '',
   assessor: '',
   floorId: '',
+  risk: '',
   // assessDate: getCurrentMonthRange(),
   assessDate: [],
   tenantIds: userStore.orgTenantId
@@ -232,6 +250,7 @@ const handleImportCard = async () => {
       pageNo: 1,
       pageSize: 9999,
       elderName: queryParams.elderName,
+      risk: queryParams.risk,
       assessor: queryParams.assessor,
       assessDate: queryParams.assessDate,
       tenantIds: queryParams.tenantIds
@@ -260,32 +279,37 @@ const handleImportCard = async () => {
 
     const headers = [
       {
-            'key': 'orgName',
-            'title': '机构名称'
+        key: 'orgName',
+        title: '机构名称'
       },
       {
-            'key': 'elderName',
-            'title': '长者姓名'
+        key: 'elderName',
+        title: '长者姓名'
       },
       {
-            'key': 'assessor',
-            'title': '评估人'
+        key: 'assessor',
+        title: '评估人'
       },
       {
-            'key': 'assessDate',
-            'title': '记录日期'
+        key: 'assessDate',
+        title: '记录日期'
       },
       {
-            'key': 'riskLevelText',
-            'title': '风险等级'
+        key: 'riskLevelText',
+        title: '风险等级'
       },
       {
-            'key': 'creator',
-            'title': '记录人'
+        key: 'creator',
+        title: '记录人'
       }
-]
+    ]
 
-    exportWithExpandedObjectArrays(processedData, headers, `感知沟通评估_${new Date().getTime()}.xlsx`, '感知沟通评估')
+    await exportWithExpandedObjectArrays(
+      processedData,
+      headers,
+      `感知沟通评估_${new Date().getTime()}.xlsx`,
+      '感知沟通评估'
+    )
     message.success('导出成功')
   } catch (error) {
     console.error('导出失败:', error)
@@ -296,9 +320,6 @@ const handleImportCard = async () => {
 }
 
 
-const inputH = () => {
-  importRef.value.open(queryParams.tenantIds[0])
-}
 /** 查询列表 */
 const getList = async () => {
   loading.value = true
@@ -326,6 +347,7 @@ const resetQuery = () => {
   queryParams.elderName = ''
   queryParams.assessor = ''
   queryParams.floorId = ''
+  queryParams.risk = ''
   queryParams.tenantIds = userStore.orgTenantId
   // queryParams.assessDate= getCurrentMonthRange()
   queryParams.assessDate = []

+ 4 - 0
src/views/elderly/apply/nine-precautions/daily-life/AddForm.vue

@@ -349,6 +349,7 @@
 <script lang="ts" setup>
 import { computed, ref, reactive } from 'vue'
 import dayjs from 'dayjs'
+import { useUserStore } from '@/store/modules/user'
 import {
   dailyLifeCreate,
   dailyLifeGetById,
@@ -356,6 +357,7 @@ import {
 } from "@/api/social-work";
 
 const message = useMessage()
+const userStore = useUserStore()
 const { t } = useI18n()
 const title = ref('')
 const dialogVisible = ref(false)
@@ -583,6 +585,7 @@ const handleExport = () => {
   ]
 
   // 构建打印内容
+  const tenantName = userStore.getTenantName || '' // 当前登录的机构名称
   const printContent = `
     <!DOCTYPE html>
     <html>
@@ -738,6 +741,7 @@ const handleExport = () => {
       </style>
     </head>
     <body>
+      <div class="tenant-name" style="text-align: end;width: 100%;font-size: 16px; font-weight: bold; margin-bottom: 10px;">${tenantName}</div>
       <div class="header">
         <h1>日常生活活动能力评估表(Barthel指数评分标准)</h1>
       </div>

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

@@ -156,7 +156,6 @@ import AddForm from './AddForm.vue'
 import ButtonAdd from '@/components/ButtonAdd/src/ButtonAdd.vue'
 import ButtonImport from '@/components/ButtonImport/src/ButtonImport.vue'
 import { useUserStore } from '@/store/modules/user'
-import { getCurrentMonthRange } from '@/utils/dateUtil'
 import { dailyLifeDelete, dailyLifePage } from '@/api/social-work'
 import { exportWithExpandedObjectArrays } from '@/utils/excel-export'
 import { findLabelById } from '@/utils/dict'

+ 4 - 0
src/views/elderly/apply/nine-precautions/empyrosis/AddForm.vue

@@ -152,6 +152,7 @@
 <script lang="ts" setup>
 import { ref, reactive } from 'vue'
 import dayjs from 'dayjs'
+import { useUserStore } from '@/store/modules/user'
 import {
   burnPreventionCreate,
   burnPreventionGetById,
@@ -159,6 +160,7 @@ import {
 } from "@/api/social-work";
 
 const message = useMessage()
+const userStore = useUserStore()
 const { t } = useI18n()
 const title = ref('')
 const dialogVisible = ref(false)
@@ -397,6 +399,7 @@ const handleExport = () => {
   }
 
   // 构建打印内容
+  const tenantName = userStore.getTenantName || '' // 当前登录的机构名称
   const printContent = `
     <!DOCTYPE html>
     <html>
@@ -554,6 +557,7 @@ const handleExport = () => {
       </style>
     </head>
     <body>
+      <div class="tenant-name" style="text-align: end;width: 100%;font-size: 16px; font-weight: bold; margin-bottom: 10px;">${tenantName}</div>
       <div class="header">
         <h1>防烫伤评估表</h1>
       </div>

+ 41 - 16
src/views/elderly/apply/nine-precautions/empyrosis/index.vue

@@ -18,6 +18,23 @@
         />
       </el-form-item>
 
+      <el-form-item label="风险等级">
+        <el-select v-model="queryParams.risk" class="!w-240px">
+          <el-option
+            v-for="(item, index) in [
+              { label: '无风险', value: 'none' },
+              { label: '低风险', value: 'low' },
+              { label: '中风险', value: 'medium' },
+              { label: '高风险', value: 'high' }
+            ]"
+            :key="index"
+            placeholder="请选择"
+            :label="item.label"
+            :value="item.value"
+          />
+        </el-select>
+      </el-form-item>
+
       <el-form-item label="评估人">
         <el-input v-model="queryParams.assessor" placeholder="评估人" class="!w-240px" clearable />
       </el-form-item>
@@ -174,6 +191,7 @@ let queryParams = reactive({
   pageSize: 10,
   elderName: '',
   assessor: '',
+  risk: '',
   // assessDate: getCurrentMonthRange(),
   assessDate: [],
   tenantIds: userStore.orgTenantId
@@ -188,6 +206,7 @@ const handleImportCard = async () => {
       pageNo: 1,
       pageSize: 9999,
       elderName: queryParams.elderName,
+      risk: queryParams.risk,
       assessor: queryParams.assessor,
       assessDate: queryParams.assessDate,
       tenantIds: queryParams.tenantIds
@@ -215,36 +234,41 @@ const handleImportCard = async () => {
 
     const headers = [
       {
-            'key': 'orgName',
-            'title': '机构名称'
+        key: 'orgName',
+        title: '机构名称'
       },
       {
-            'key': 'elderName',
-            'title': '长者姓名'
+        key: 'elderName',
+        title: '长者姓名'
       },
       {
-            'key': 'assessor',
-            'title': '评估人'
+        key: 'assessor',
+        title: '评估人'
       },
       {
-            'key': 'assessDate',
-            'title': '记录日期'
+        key: 'assessDate',
+        title: '记录日期'
       },
       {
-            'key': 'riskLevelText',
-            'title': '风险等级'
+        key: 'riskLevelText',
+        title: '风险等级'
       },
       {
-            'key': 'assessScore',
-            'title': '评估总得分'
+        key: 'assessScore',
+        title: '评估总得分'
       },
       {
-            'key': 'creator',
-            'title': '记录人'
+        key: 'creator',
+        title: '记录人'
       }
-]
+    ]
 
-    exportWithExpandedObjectArrays(processedData, headers, `防烫伤评估_${new Date().getTime()}.xlsx`, '防烫伤评估')
+    await exportWithExpandedObjectArrays(
+      processedData,
+      headers,
+      `防烫伤评估_${new Date().getTime()}.xlsx`,
+      '防烫伤评估'
+    )
     message.success('导出成功')
   } catch (error) {
     console.error('导出失败:', error)
@@ -279,6 +303,7 @@ const handleQuery = async () => {
 const resetQuery = () => {
   queryParams.elderName = ''
   queryParams.assessor = ''
+  queryParams.risk = ''
   queryParams.tenantIds = userStore.orgTenantId
   // queryParams.assessDate = getCurrentMonthRange()
   queryParams.assessDate = []

+ 4 - 0
src/views/elderly/apply/nine-precautions/equilibrium/AddForm.vue

@@ -394,6 +394,7 @@
 <script lang="ts" setup>
 import { computed, ref, reactive } from 'vue'
 import dayjs from 'dayjs'
+import { useUserStore } from '@/store/modules/user'
 import {
   equilibriumCreate,
   equilibriumGetById,
@@ -401,6 +402,7 @@ import {
 } from "@/api/social-work";
 
 const message = useMessage()
+const userStore = useUserStore()
 const { t } = useI18n()
 const title = ref('')
 const dialogVisible = ref(false)
@@ -663,6 +665,7 @@ const handleExport = () => {
   ]
 
   // 构建打印内容
+  const tenantName = userStore.getTenantName || '' // 当前登录的机构名称
   const printContent = `
     <!DOCTYPE html>
     <html>
@@ -813,6 +816,7 @@ const handleExport = () => {
       </style>
     </head>
     <body>
+      <div class="tenant-name" style="text-align: end;width: 100%;font-size: 16px; font-weight: bold; margin-bottom: 10px;">${tenantName}</div>
       <div class="header">
         <h1>老年人平衡能力测试表</h1>
       </div>

+ 41 - 16
src/views/elderly/apply/nine-precautions/equilibrium/index.vue

@@ -18,6 +18,23 @@
         />
       </el-form-item>
 
+      <el-form-item label="风险等级">
+        <el-select v-model="queryParams.risk" class="!w-240px">
+          <el-option
+            v-for="(item, index) in [
+              { label: '无风险', value: 'none' },
+              { label: '低风险', value: 'low' },
+              { label: '中风险', value: 'medium' },
+              { label: '高风险', value: 'high' }
+            ]"
+            :key="index"
+            placeholder="请选择"
+            :label="item.label"
+            :value="item.value"
+          />
+        </el-select>
+      </el-form-item>
+
       <el-form-item label="评估人">
         <el-input v-model="queryParams.assessor" placeholder="评估人" class="!w-240px" clearable />
       </el-form-item>
@@ -174,6 +191,7 @@ let queryParams = reactive({
   pageSize: 10,
   elderName: '',
   assessor: '',
+  risk: '',
   // assessDate: getCurrentMonthRange(),
   assessDate: [],
   tenantIds: userStore.orgTenantId
@@ -188,6 +206,7 @@ const handleImportCard = async () => {
       pageNo: 1,
       pageSize: 9999,
       elderName: queryParams.elderName,
+      risk: queryParams.elderName,
       assessor: queryParams.assessor,
       assessDate: queryParams.assessDate,
       tenantIds: queryParams.tenantIds
@@ -215,36 +234,41 @@ const handleImportCard = async () => {
 
     const headers = [
       {
-            'key': 'orgName',
-            'title': '机构名称'
+        key: 'orgName',
+        title: '机构名称'
       },
       {
-            'key': 'elderName',
-            'title': '长者姓名'
+        key: 'elderName',
+        title: '长者姓名'
       },
       {
-            'key': 'assessor',
-            'title': '评估人'
+        key: 'assessor',
+        title: '评估人'
       },
       {
-            'key': 'assessDate',
-            'title': '记录日期'
+        key: 'assessDate',
+        title: '记录日期'
       },
       {
-            'key': 'assessScore',
-            'title': '评估总得分'
+        key: 'assessScore',
+        title: '评估总得分'
       },
       {
-            'key': 'riskLevelText',
-            'title': '风险等级'
+        key: 'riskLevelText',
+        title: '风险等级'
       },
       {
-            'key': 'creator',
-            'title': '记录人'
+        key: 'creator',
+        title: '记录人'
       }
-]
+    ]
 
-    exportWithExpandedObjectArrays(processedData, headers, `平衡能力评估_${new Date().getTime()}.xlsx`, '平衡能力评估')
+    await exportWithExpandedObjectArrays(
+      processedData,
+      headers,
+      `平衡能力评估_${new Date().getTime()}.xlsx`,
+      '平衡能力评估'
+    )
     message.success('导出成功')
   } catch (error) {
     console.error('导出失败:', error)
@@ -279,6 +303,7 @@ const handleQuery = async () => {
 const resetQuery = () => {
   queryParams.elderName = ''
   queryParams.assessor = ''
+  queryParams.risk = ''
   queryParams.tenantIds = userStore.orgTenantId
   // queryParams.assessDate = getCurrentMonthRange()
   queryParams.assessDate = []

+ 4 - 0
src/views/elderly/apply/nine-precautions/fall-down/AddForm.vue

@@ -213,6 +213,7 @@
 <script lang="ts" setup>
 import { computed, ref, reactive } from 'vue'
 import dayjs from 'dayjs'
+import { useUserStore } from '@/store/modules/user'
 import {
   fallDownCreate,
   fallDownGetById,
@@ -220,6 +221,7 @@ import {
 } from "@/api/social-work";
 
 const message = useMessage()
+const userStore = useUserStore()
 const { t } = useI18n()
 const title = ref('')
 const dialogVisible = ref(false)
@@ -456,6 +458,7 @@ const handleExport = () => {
   ]
 
   // 构建打印内容
+  const tenantName = userStore.getTenantName || '' // 当前登录的机构名称
   const printContent = `
     <!DOCTYPE html>
     <html>
@@ -615,6 +618,7 @@ const handleExport = () => {
       </style>
     </head>
     <body>
+      <div class="tenant-name" style="text-align: end;width: 100%;font-size: 16px; font-weight: bold; margin-bottom: 10px;">${tenantName}</div>
       <div class="header">
         <h1>跌倒风险评估表</h1>
       </div>

+ 41 - 16
src/views/elderly/apply/nine-precautions/fall-down/index.vue

@@ -18,6 +18,23 @@
         />
       </el-form-item>
 
+      <el-form-item label="风险等级">
+        <el-select v-model="queryParams.risk" class="!w-240px">
+          <el-option
+            v-for="(item, index) in [
+              { label: '无风险', value: 'none' },
+              { label: '低风险', value: 'low' },
+              { label: '中风险', value: 'medium' },
+              { label: '高风险', value: 'high' }
+            ]"
+            :key="index"
+            placeholder="请选择"
+            :label="item.label"
+            :value="item.value"
+          />
+        </el-select>
+      </el-form-item>
+
       <el-form-item label="评估人">
         <el-input v-model="queryParams.assessor" placeholder="评估人" class="!w-240px" clearable />
       </el-form-item>
@@ -174,6 +191,7 @@ let queryParams = reactive({
   pageSize: 10,
   elderName: '',
   assessor: '',
+  risk: '',
   // assessDate: getCurrentMonthRange(),
   assessDate: [],
   tenantIds: userStore.orgTenantId
@@ -188,6 +206,7 @@ const handleImportCard = async () => {
       pageNo: 1,
       pageSize: 9999,
       elderName: queryParams.elderName,
+      risk: queryParams.risk,
       assessor: queryParams.assessor,
       assessDate: queryParams.assessDate,
       tenantIds: queryParams.tenantIds
@@ -215,36 +234,41 @@ const handleImportCard = async () => {
 
     const headers = [
       {
-            'key': 'orgName',
-            'title': '机构名称'
+        key: 'orgName',
+        title: '机构名称'
       },
       {
-            'key': 'elderName',
-            'title': '长者姓名'
+        key: 'elderName',
+        title: '长者姓名'
       },
       {
-            'key': 'assessor',
-            'title': '评估人'
+        key: 'assessor',
+        title: '评估人'
       },
       {
-            'key': 'assessDate',
-            'title': '记录日期'
+        key: 'assessDate',
+        title: '记录日期'
       },
       {
-            'key': 'assessScore',
-            'title': '评估总得分'
+        key: 'assessScore',
+        title: '评估总得分'
       },
       {
-            'key': 'riskLevelText',
-            'title': '风险等级'
+        key: 'riskLevelText',
+        title: '风险等级'
       },
       {
-            'key': 'creator',
-            'title': '记录人'
+        key: 'creator',
+        title: '记录人'
       }
-]
+    ]
 
-    exportWithExpandedObjectArrays(processedData, headers, `跌倒风险评估_${new Date().getTime()}.xlsx`, '跌倒风险评估')
+    await exportWithExpandedObjectArrays(
+      processedData,
+      headers,
+      `跌倒风险评估_${new Date().getTime()}.xlsx`,
+      '跌倒风险评估'
+    )
     message.success('导出成功')
   } catch (error) {
     console.error('导出失败:', error)
@@ -279,6 +303,7 @@ const handleQuery = async () => {
 const resetQuery = () => {
   queryParams.elderName = ''
   queryParams.assessor = ''
+  queryParams.risk = ''
   queryParams.tenantIds = userStore.orgTenantId
   // queryParams.assessDate = getCurrentMonthRange()
   queryParams.assessDate = []

+ 4 - 0
src/views/elderly/apply/nine-precautions/fall-prevention-measures/AddForm.vue

@@ -153,6 +153,7 @@
 <script lang="ts" setup>
 import { computed, ref, reactive } from 'vue'
 import dayjs from 'dayjs'
+import { useUserStore } from '@/store/modules/user'
 import {
   fallPreventionCreate,
   fallPreventionGetById,
@@ -160,6 +161,7 @@ import {
 } from "@/api/social-work";
 
 const message = useMessage()
+const userStore = useUserStore()
 const { t } = useI18n()
 const title = ref('')
 const dialogVisible = ref(false)
@@ -401,6 +403,7 @@ const handleExport = () => {
   }
 
   // 构建打印内容
+  const tenantName = userStore.getTenantName || '' // 当前登录的机构名称
   const printContent = `
     <!DOCTYPE html>
     <html>
@@ -558,6 +561,7 @@ const handleExport = () => {
       </style>
     </head>
     <body>
+      <div class="tenant-name" style="text-align: end;width: 100%;font-size: 16px; font-weight: bold; margin-bottom: 10px;">${tenantName}</div>
       <div class="header">
         <h1>防坠床评估表</h1>
       </div>

+ 41 - 16
src/views/elderly/apply/nine-precautions/fall-prevention-measures/index.vue

@@ -18,6 +18,23 @@
         />
       </el-form-item>
 
+      <el-form-item label="风险等级">
+        <el-select v-model="queryParams.risk" class="!w-240px">
+          <el-option
+            v-for="(item, index) in [
+              { label: '无风险', value: 'none' },
+              { label: '低风险', value: 'low' },
+              { label: '中风险', value: 'medium' },
+              { label: '高风险', value: 'high' }
+            ]"
+            :key="index"
+            placeholder="请选择"
+            :label="item.label"
+            :value="item.value"
+          />
+        </el-select>
+      </el-form-item>
+
       <el-form-item label="评估人">
         <el-input v-model="queryParams.assessor" placeholder="评估人" class="!w-240px" clearable />
       </el-form-item>
@@ -174,6 +191,7 @@ let queryParams = reactive({
   pageSize: 10,
   elderName: '',
   assessor: '',
+  risk: '',
   // assessDate: getCurrentMonthRange(),
   assessDate: [],
   tenantIds: userStore.orgTenantId
@@ -188,6 +206,7 @@ const handleImportCard = async () => {
       pageNo: 1,
       pageSize: 9999,
       elderName: queryParams.elderName,
+      risk: queryParams.risk,
       assessor: queryParams.assessor,
       assessDate: queryParams.assessDate,
       tenantIds: queryParams.tenantIds
@@ -215,36 +234,41 @@ const handleImportCard = async () => {
 
     const headers = [
       {
-            'key': 'orgName',
-            'title': '机构名称'
+        key: 'orgName',
+        title: '机构名称'
       },
       {
-            'key': 'elderName',
-            'title': '长者姓名'
+        key: 'elderName',
+        title: '长者姓名'
       },
       {
-            'key': 'assessor',
-            'title': '评估人'
+        key: 'assessor',
+        title: '评估人'
       },
       {
-            'key': 'assessDate',
-            'title': '记录日期'
+        key: 'assessDate',
+        title: '记录日期'
       },
       {
-            'key': 'assessScore',
-            'title': '评估总得分'
+        key: 'assessScore',
+        title: '评估总得分'
       },
       {
-            'key': 'riskLevelText',
-            'title': '风险等级'
+        key: 'riskLevelText',
+        title: '风险等级'
       },
       {
-            'key': 'creator',
-            'title': '记录人'
+        key: 'creator',
+        title: '记录人'
       }
-]
+    ]
 
-    exportWithExpandedObjectArrays(processedData, headers, `防坠床评估_${new Date().getTime()}.xlsx`, '防坠床评估')
+    await exportWithExpandedObjectArrays(
+      processedData,
+      headers,
+      `防坠床评估_${new Date().getTime()}.xlsx`,
+      '防坠床评估'
+    )
     message.success('导出成功')
   } catch (error) {
     console.error('导出失败:', error)
@@ -279,6 +303,7 @@ const handleQuery = async () => {
 const resetQuery = () => {
   queryParams.elderName = ''
   queryParams.assessor = ''
+  queryParams.risk = ''
   queryParams.tenantIds = userStore.orgTenantId
   // queryParams.assessDate = getCurrentMonthRange()
   queryParams.assessDate = []

+ 5 - 1
src/views/elderly/apply/nine-precautions/nutritional-risk/AddForm.vue

@@ -478,6 +478,7 @@
 <script setup lang="ts">
 import { ref, reactive, nextTick } from 'vue'
 import { useAppStore } from '@/store/modules/app'
+import { useUserStore } from '@/store/modules/user'
 import {
   nutritionalRiskCreate,
   nutritionalRiskUpdate,
@@ -487,6 +488,7 @@ import {
 import {getTenantId} from "@/utils/auth";
 
 const message = useMessage()
+const userStore = useUserStore()
 const appStore = useAppStore()
 const emit = defineEmits(['success'])
 
@@ -810,7 +812,8 @@ const handleExport = () => {
   ]
 
   // 构建打印内容
-  const printContent = `
+  const tenantName = userStore.getTenantName || '' // 当前登录的机构名称
+  const printContent =`
     <!DOCTYPE html>
     <html>
     <head>
@@ -988,6 +991,7 @@ const handleExport = () => {
       </style>
     </head>
     <body>
+      <div class="tenant-name" style="text-align: end;width: 100%;font-size: 16px; font-weight: bold; margin-bottom: 10px;">${tenantName}</div>
       <div class="header">
         <h1>营养风险评估表</h1>
       </div>

+ 4 - 0
src/views/elderly/apply/nine-precautions/pressure-sores/AddForm.vue

@@ -157,6 +157,7 @@
 <script lang="ts" setup>
 import { computed, ref, reactive } from 'vue'
 import dayjs from 'dayjs'
+import { useUserStore } from '@/store/modules/user'
 import {
   pressureSoresCreate,
   pressureSoresGetById,
@@ -164,6 +165,7 @@ import {
 } from "@/api/social-work";
 
 const message = useMessage()
+const userStore = useUserStore()
 const { t } = useI18n()
 const title = ref('')
 const dialogVisible = ref(false)
@@ -428,6 +430,7 @@ const handleExport = () => {
   const record = form.assessments[0]
 
   // 构建打印内容
+  const tenantName = userStore.getTenantName || '' // 当前登录的机构名称
   const printContent = `
     <!DOCTYPE html>
     <html>
@@ -585,6 +588,7 @@ const handleExport = () => {
       </style>
     </head>
     <body>
+      <div class="tenant-name" style="text-align: end;width: 100%;font-size: 16px; font-weight: bold; margin-bottom: 10px;">${tenantName}</div>
       <div class="header">
         <h1>防压疮评估表</h1>
       </div>

+ 41 - 16
src/views/elderly/apply/nine-precautions/pressure-sores/index.vue

@@ -18,6 +18,23 @@
         />
       </el-form-item>
 
+      <el-form-item label="风险等级">
+        <el-select v-model="queryParams.risk" class="!w-240px">
+          <el-option
+            v-for="(item, index) in [
+              { label: '无风险', value: 'none' },
+              { label: '低风险', value: 'low' },
+              { label: '中风险', value: 'medium' },
+              { label: '高风险', value: 'high' }
+            ]"
+            :key="index"
+            placeholder="请选择"
+            :label="item.label"
+            :value="item.value"
+          />
+        </el-select>
+      </el-form-item>
+
       <el-form-item label="评估人">
         <el-input v-model="queryParams.assessor" placeholder="评估人" class="!w-240px" clearable />
       </el-form-item>
@@ -174,6 +191,7 @@ let queryParams = reactive({
   pageSize: 10,
   elderName: '',
   assessor: '',
+  risk: '',
   // assessDate: getCurrentMonthRange(),
   assessDate: [],
   tenantIds: userStore.orgTenantId
@@ -187,6 +205,7 @@ const handleImportCard = async () => {
     const queryP = {
       pageNo: 1,
       pageSize: 9999,
+      risk: queryParams.risk,
       elderName: queryParams.elderName,
       assessor: queryParams.assessor,
       assessDate: queryParams.assessDate,
@@ -215,36 +234,41 @@ const handleImportCard = async () => {
 
     const headers = [
       {
-            'key': 'orgName',
-            'title': '机构名称'
+        key: 'orgName',
+        title: '机构名称'
       },
       {
-            'key': 'elderName',
-            'title': '长者姓名'
+        key: 'elderName',
+        title: '长者姓名'
       },
       {
-            'key': 'assessor',
-            'title': '评估人'
+        key: 'assessor',
+        title: '评估人'
       },
       {
-            'key': 'assessDate',
-            'title': '记录日期'
+        key: 'assessDate',
+        title: '记录日期'
       },
       {
-            'key': 'assessScore',
-            'title': '评估总得分'
+        key: 'assessScore',
+        title: '评估总得分'
       },
       {
-            'key': 'riskLevelText',
-            'title': '风险等级'
+        key: 'riskLevelText',
+        title: '风险等级'
       },
       {
-            'key': 'creator',
-            'title': '记录人'
+        key: 'creator',
+        title: '记录人'
       }
-]
+    ]
 
-    exportWithExpandedObjectArrays(processedData, headers, `防压疮评估_${new Date().getTime()}.xlsx`, '防压疮评估')
+    exportWithExpandedObjectArrays(
+      processedData,
+      headers,
+      `防压疮评估_${new Date().getTime()}.xlsx`,
+      '防压疮评估'
+    )
     message.success('导出成功')
   } catch (error) {
     console.error('导出失败:', error)
@@ -279,6 +303,7 @@ const handleQuery = async () => {
 const resetQuery = () => {
   queryParams.elderName = ''
   queryParams.assessor = ''
+  queryParams.risk = ''
   queryParams.tenantIds = userStore.orgTenantId
   // queryParams.assessDate = getCurrentMonthRange()
   queryParams.assessDate = []

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

@@ -645,7 +645,7 @@ const handleExport = () => {
     </head>
     <body>
       <div class="print-container">
-        <div class="tenant-name" style="text-align: center; font-size: 18px; font-weight: bold; margin-bottom: 10px;">${tenantName}</div>
+        <div class="tenant-name" style="text-align: end;width: 100%;font-size: 16px; font-weight: bold; margin-bottom: 10px;">${tenantName}</div>
         <div class="title">服务安全风险知情告知书</div>
         
         <div class="info-row">

+ 4 - 0
src/views/elderly/apply/nine-precautions/wander-away/AddForm.vue

@@ -368,6 +368,7 @@
 <script lang="ts" setup>
 import { ref, reactive } from 'vue'
 import dayjs from 'dayjs'
+import { useUserStore } from '@/store/modules/user'
 import {
   wanderAwayCreate,
   wanderAwayGetById,
@@ -375,6 +376,7 @@ import {
 } from "@/api/social-work";
 
 const message = useMessage()
+const userStore = useUserStore()
 const { t } = useI18n()
 const title = ref('')
 const dialogVisible = ref(false)
@@ -618,6 +620,7 @@ const handleExport = () => {
   ]
 
   // 构建打印内容
+  const tenantName = userStore.getTenantName || '' // 当前登录的机构名称
   const printContent = `
     <!DOCTYPE html>
     <html>
@@ -784,6 +787,7 @@ const handleExport = () => {
       </style>
     </head>
     <body>
+      <div class="tenant-name" style="text-align: end;width: 100%;font-size: 16px; font-weight: bold; margin-bottom: 10px;">${tenantName}</div>
       <div class="header">
         <h1>防走失风险评估表</h1>
       </div>

+ 86 - 18
src/views/elderly/apply/nine-precautions/wander-away/index.vue

@@ -18,6 +18,49 @@
         />
       </el-form-item>
 
+      <el-form-item label="风险等级">
+        <el-select v-model="queryParams.risk" class="!w-240px">
+          <el-option
+            v-for="(item, index) in [
+              { label: '无风险', value: 'none' },
+              { label: '低风险', value: 'low' },
+              { label: '中风险', value: 'medium' },
+              { label: '高风险', value: 'high' }
+            ]"
+            :key="index"
+            placeholder="请选择"
+            :label="item.label"
+            :value="item.value"
+          />
+        </el-select>
+      </el-form-item>
+
+<!--      <el-form-item label="楼栋">-->
+<!--        <el-select-->
+<!--          v-model="queryParams.buildId"-->
+<!--          placeholder="选择楼栋"-->
+<!--          style="width: 180px"-->
+<!--          @change="handleBuildChange"-->
+<!--        >-->
+<!--          <el-option-->
+<!--            v-for="(item, index) in buildList"-->
+<!--            :key="index"-->
+<!--            :label="item.buildName"-->
+<!--            :value="item.id"-->
+<!--          />-->
+<!--        </el-select>-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="楼层">-->
+<!--        <el-select v-model="queryParams.floorId" placeholder="选择楼层" style="width: 180px">-->
+<!--          <el-option-->
+<!--            v-for="(item, index) in floorList"-->
+<!--            :key="index"-->
+<!--            :label="item.floorName"-->
+<!--            :value="item.id"-->
+<!--          />-->
+<!--        </el-select>-->
+<!--      </el-form-item>-->
+
       <el-form-item label="评估人">
         <el-input v-model="queryParams.assessor" placeholder="评估人" class="!w-240px" clearable />
       </el-form-item>
@@ -160,6 +203,8 @@ import { getCurrentMonthRange } from '@/utils/dateUtil'
 import { wanderAwayDelete, wanderAwayPage } from '@/api/social-work'
 import { exportWithExpandedObjectArrays } from '@/utils/excel-export'
 import { findLabelById } from '@/utils/dict'
+import { ref } from 'vue'
+import { getBuildList } from '@/api/system/badManage'
 
 const message = useMessage()
 const { t } = useI18n()
@@ -174,6 +219,7 @@ let queryParams = reactive({
   pageSize: 10,
   elderName: '',
   assessor: '',
+  risk: '',
   // assessDate: getCurrentMonthRange(),
   assessDate: [],
   tenantIds: userStore.orgTenantId
@@ -189,6 +235,7 @@ const handleImportCard = async () => {
       pageSize: 9999,
       elderName: queryParams.elderName,
       assessor: queryParams.assessor,
+      risk: queryParams.risk,
       assessDate: queryParams.assessDate,
       tenantIds: queryParams.tenantIds
     }
@@ -215,36 +262,41 @@ const handleImportCard = async () => {
 
     const headers = [
       {
-            'key': 'orgName',
-            'title': '机构名称'
+        key: 'orgName',
+        title: '机构名称'
       },
       {
-            'key': 'elderName',
-            'title': '长者姓名'
+        key: 'elderName',
+        title: '长者姓名'
       },
       {
-            'key': 'assessor',
-            'title': '评估人'
+        key: 'assessor',
+        title: '评估人'
       },
       {
-            'key': 'assessDate',
-            'title': '记录日期'
+        key: 'assessDate',
+        title: '记录日期'
       },
       {
-            'key': 'assessScore',
-            'title': '评估总得分'
+        key: 'assessScore',
+        title: '评估总得分'
       },
       {
-            'key': 'riskLevelText',
-            'title': '风险等级'
+        key: 'riskLevelText',
+        title: '风险等级'
       },
       {
-            'key': 'creator',
-            'title': '记录人'
+        key: 'creator',
+        title: '记录人'
       }
-]
+    ]
 
-    exportWithExpandedObjectArrays(processedData, headers, `防走失风险评估_${new Date().getTime()}.xlsx`, '防走失风险评估')
+    await exportWithExpandedObjectArrays(
+      processedData,
+      headers,
+      `防走失风险评估_${new Date().getTime()}.xlsx`,
+      '防走失风险评估'
+    )
     message.success('导出成功')
   } catch (error) {
     console.error('导出失败:', error)
@@ -279,6 +331,9 @@ const handleQuery = async () => {
 const resetQuery = () => {
   queryParams.elderName = ''
   queryParams.assessor = ''
+  queryParams.floorId = ''
+  queryParams.buildId = ''
+  queryParams.risk = ''
   queryParams.tenantIds = userStore.orgTenantId
   // queryParams.assessDate = getCurrentMonthRange()
   queryParams.assessDate = []
@@ -328,13 +383,26 @@ const cancelDelete = async (id: number) => {
   } catch {}
 }
 
+const floorList = ref([])
+const buildList = ref([])
+const handleBuildChange = (buildId: any) => {
+  const selectedBuild = buildList.value.find((item: any) => item.id === buildId)
+  if (selectedBuild) {
+    floorList.value = selectedBuild.floorList || []
+  }
+}
+
 const route = useRoute()
 /** 初始化 **/
-onMounted(() => {
+onMounted(async () => {
   if (route.query && route.query.elderName) {
     queryParams.elderName = route.query.elderName as string
   }
-  getList()
+  await getList()
+
+  try {
+    buildList.value = await getBuildList({ tenantIds: queryParams.tenantIds[0] })
+  } catch (e) {}
 })
 
 // 表头格式

+ 65 - 0
src/views/elderly/elder/elder-file/index.vue

@@ -96,6 +96,9 @@
         <el-button type="primary" color="indigo" plain @click="handleImportCard(2)">
           <Icon icon="ep:upload" class="mr-5px" /> 批量导出分享卡
         </el-button>
+        <el-button type="success" plain @click="handleExportFormat" v-show="false" :loading="exportLoading">
+          <Icon icon="ep:download" class="mr-5px" /> 导出为特定格式
+        </el-button>
       </template>
     </TabBarBtn>
     <Table2
@@ -202,6 +205,8 @@ import download from '@/utils/download'
 import { importCard } from '@/utils/outBedCard'
 import { getElderHealthRecordById } from '@/api/elderly/elder/health-record'
 import { getBuildList } from '@/api/system/badManage'
+import { exportWithExpandedObjectArrays } from '@/utils/excel-export'
+import { formatTimestampYMD } from '@/utils/dateUtil'
 import { ref } from 'vue'
 defineOptions({ name: 'ElderFile' })
 const userStore = useUserStore()
@@ -405,6 +410,66 @@ const handleExport = async () => {
   }
 }
 
+/** 导出为特定格式 */
+const handleExportFormat = async () => {
+  exportLoading.value = true
+  try {
+    // 获取当前列表所有数据(不分页)
+    const data = await getElderlyPage({
+      ...queryParams,
+      pageNo: 1,
+      pageSize: 9999
+    })
+    const exportData = data.list || []
+    if (exportData.length === 0) {
+      message.warning('暂无数据可导出')
+      return
+    }
+
+    // 处理数据
+    const processedData = exportData.map((item: any) => {
+      const bedNameParts = (item.bedName || '').split('-')
+      return {
+        elderName: item.elderName || '',
+        accountIdCard: item.idCard || '',
+        elderSex: item.elderSex === 1 ? '男' : item.elderSex === 2 ? '女' : item.elderSex,
+        registeredResidenceAddress: item.registeredResidenceAddress || '',
+        idCard: item.idCard || '',
+        checkInTime: item.checkInTime ? formatTimestampYMD(Number(item.checkInTime)) : '',
+        floorName: bedNameParts.slice(0, 2).join('-'),
+        bedName: bedNameParts.slice(2).join('-'),
+        contractNumber: item.contractNumber || ''
+      }
+    })
+
+    // 表头配置
+    const headers = [
+      { key: 'elderName', title: '姓名', width: 15 },
+      { key: 'accountIdCard', title: '账号(身份证号)', width: 25 },
+      { key: 'elderSex', title: '性别', width: 10 },
+      { key: 'registeredResidenceAddress', title: '地址', width: 40 },
+      { key: 'idCard', title: '身份证号', width: 25 },
+      { key: 'checkInTime', title: '入住日期', width: 15 },
+      { key: 'floorName', title: '区/楼层', width: 20 },
+      { key: 'bedName', title: '床号', width: 20 },
+      { key: 'contractNumber', title: '合同号', width: 20 }
+    ]
+
+    await exportWithExpandedObjectArrays(
+      processedData,
+      headers,
+      `长者档案特定格式_${Date.now()}.xlsx`,
+      '长者档案'
+    )
+    message.success('导出成功')
+  } catch (error) {
+    console.error('导出失败:', error)
+    message.error('导出失败,请重试')
+  } finally {
+    exportLoading.value = false
+  }
+}
+
 const buildList = ref([])
 const floorList = ref([])
 const handleBuildChange = (buildId: any) => {

+ 46 - 0
src/views/elderly/fee/bill-pay/index.vue

@@ -124,6 +124,15 @@
           >
             <Icon icon="ep:promotion" class="mr-5px" /> 供养批量缴费
           </el-button>
+          <el-button
+            plain
+            type="danger"
+            :disabled="!ids.length"
+            @click="handleBitchDelete()"
+            v-hasPermi="['bill-pay:bitch-delete']"
+          >
+            批量删除
+          </el-button>
         </template>
       </TabBarBtn>
       <Table2
@@ -426,6 +435,7 @@ const { t } = useI18n() // 国际化
 import { exportWithCustomHeaders } from '@/utils/excel-export'
 import { formatToDateTime } from '@/utils/dateUtil'
 import { CloseBold } from '@element-plus/icons-vue'
+import { delDailyExpenses } from '@/api/elderly/fee/daily-fee'
 defineOptions({ name: 'BillPay' })
 const userStore = useUserStore()
 const message = useMessage() // 消息弹窗
@@ -775,8 +785,44 @@ const handleGenerator = () => {
 }
 
 const ids = ref([])
+const idsRow = ref([])
 const handleSelectionChange = (val) => {
   ids.value = val.map((item) => item.id)
+  idsRow.value = val.map((item: any) => item)
+  //console.log(idsRow.value, ids.value)
+}
+
+const handleBitchDelete = async () => {
+  if (!ids.value.length) {
+    message.error('请选择一条数据')
+    return
+  }
+  try {
+    // 删除的二次确认
+    await ElMessageBox({
+      title: '温馨提示',
+      message: h('p', null, [
+        h('span', null, '删除选中数据可能会影响'),
+        h('span', { style: 'color: red' }, '“账单缴费”'),
+        h('span', null, ',是否删除选中数据? ')
+      ]),
+      confirmButtonText: t('common.ok'),
+      cancelButtonText: t('common.cancel'),
+      type: 'warning',
+      showCancelButton: true
+    })
+    // 发起删除
+    //
+    //
+    for (const row of idsRow.value) {
+      if ((row.type == 2 || row.type == 4) && row.payStatus != 1) {
+        await deletePayment(row.id)
+      }
+    }
+    message.success(t('common.delSuccess'))
+    // 刷新列表
+    await getList()
+  } catch {}
 }
 
 const handleClosed = () => {

+ 1 - 1
src/views/elderly/fee/daily-fee/index.vue

@@ -121,7 +121,7 @@
       :columns="DailyFeeColumns"
       :queryParams="queryParams"
       selection
-      @selectionChange="handleSelectionChange"
+      @selection-change="handleSelectionChange"
       disabledSelectedText="status"
       @detail="(arg) => openForm(arg, true)"
     />