Browse Source

长者轮候接口对接

xiongxing 2 tháng trước cách đây
mục cha
commit
6b448171cd

+ 10 - 0
src/api/bpm/processInstance/index.ts

@@ -134,4 +134,14 @@ export const getProcessInstanceBpmnCount = async () => {
 // 获取流程实例未读数量
 export const updateMyCreateReadById = async (id) => {
   return await request.put({ url: `/system/notify-message/updateMyCreateReadById?processInstanceId=${id}` })
+}
+
+//  获取长者轮候列表
+export const getCheckInWaitPage = async (params: any)=>{
+  return await request.get({ url: '/bpm/process-instance/check-in-wait-page', params })
+}
+
+// 获取长者轮候详情
+export const getWaitElderDetail = async(id: number)=>{
+  return await request.get({ url:'/bpm/check-in-wait/detail?id=' + id })
 }

+ 28 - 0
src/views/elderly/elder/column.ts

@@ -414,3 +414,31 @@ export const DiscountFees = reactive([
   //   type: '2'
   // }
 ])
+
+// ================待入住长者===================
+export const WaitElderColumns = reactive([
+  {
+    label: '所属机构',
+    field: 'tenantName',
+    type: '99'
+  },
+  {
+    label: '长者姓名',
+    field: 'elderName',
+  },
+  {
+    label: '证件号码',
+    field: 'idCard',
+  },
+  {
+    label: '审批状态',
+    field: 'bpmStatus',
+    dictArr: DICT_TYPE.APPROVAL_STATUS,
+    type: '2'
+  },
+  {
+    label: '创建时间',
+    field: 'createdTime',
+    format: true
+  }
+])

+ 1 - 10
src/views/elderly/elder/wait-elder/Detail.vue

@@ -19,11 +19,10 @@
 import { ref } from 'vue'
 import { registerComponent } from '@/utils/routerHelper'
 import ProcessForm from './ProcessForm.vue'
-defineOptions({ name: 'BakCheckOutDetail' })
+defineOptions({ name: 'WaitElderDetail' })
 
 const dialogVisible = ref(false) // 弹窗
 const BusinessFormComponent = ref() // 异步组件
-const formRef = ref()
 const businessKey = ref('')
 const statusType = ref()
 const processRef = ref()
@@ -32,7 +31,6 @@ const open = async (tId, id, processId, status) => {
   dialogVisible.value = true
   businessKey.value = processId
   statusType.value = status
-  // BusinessFormComponent.value = registerComponent('/bpm/processInstance/detail/index')
   BusinessFormComponent.value = registerComponent('/bpm/task/process-list/process')
   nextTick(() => {
     processRef.value.setTenantId(tId)
@@ -41,13 +39,6 @@ const open = async (tId, id, processId, status) => {
 }
 defineExpose({ open }) // 提供 open 方法,用于打开弹窗
 
-// watch(
-//   () => formRef.value,
-//   (val) => {
-//     val && val.init(1, businessKey.value, statusType.value, false)
-//   }
-// )
-
 // 关闭表单
 const handleClosed = () => {
   dialogVisible.value = false

+ 90 - 71
src/views/elderly/elder/wait-elder/ProcessForm.vue

@@ -12,64 +12,92 @@
       <div class="view-value">{{ form.elderName || '-' }}</div>
     </el-form-item>
 
-    <el-form-item label="身份证号" prop="idCardNo" required>
-      <div class="view-value">{{ form.idCardNo || '-' }}</div>
+    <el-form-item label="身份证号" prop="idCard" required>
+      <div class="view-value">{{ form.idCard || '-' }}</div>
     </el-form-item>
 
-    <el-form-item label="院区" prop="campus" required>
-      <div class="view-value">{{ campusLabel(form.campus) }}</div>
+    <el-form-item label="近期居住情况(视频)" prop="recentLivingSituation" required>
+      <div class="view-files">
+        <div v-if="!form.recentLivingSituation.length" class="empty">-</div>
+        <ul v-else>
+          <li v-for="(item, index) in form.recentLivingSituation" :key="`life-${index}`">
+            <a :href="item" target="_blank" rel="noopener noreferrer">{{ getFileName(item) }}</a>
+          </li>
+        </ul>
+      </div>
     </el-form-item>
 
-    <el-form-item label="近期生活状态(视频)" prop="lifeStatusVideo" required>
+    <el-form-item label="行走情况(视频)" prop="walkSituationVideo" required>
       <div class="view-files">
-        <div v-if="!form.lifeStatusVideo.length" class="empty">-</div>
+        <div v-if="!form.walkSituationVideo.length" class="empty">-</div>
         <ul v-else>
-          <li v-for="(item, index) in form.lifeStatusVideo" :key="`life-${index}`">{{ getFileName(item) }}</li>
+          <li v-for="(item, index) in form.walkSituationVideo" :key="`walk-${index}`">
+            <a :href="item" target="_blank" rel="noopener noreferrer">{{ getFileName(item) }}</a>
+          </li>
         </ul>
       </div>
     </el-form-item>
 
-    <el-form-item label="行走情况(视频)" prop="walkingVideo" required>
+    <el-form-item label="近半年内病历" prop="medicalRecordsWithinSixMonth" required>
       <div class="view-files">
-        <div v-if="!form.walkingVideo.length" class="empty">-</div>
+        <div v-if="!form.medicalRecordsWithinSixMonth.length" class="empty">-</div>
         <ul v-else>
-          <li v-for="(item, index) in form.walkingVideo" :key="`walk-${index}`">{{ getFileName(item) }}</li>
+          <li v-for="(item, index) in form.medicalRecordsWithinSixMonth" :key="`medical-${index}`">
+            <a :href="item" target="_blank" rel="noopener noreferrer">{{ getFileName(item) }}</a>
+          </li>
         </ul>
       </div>
     </el-form-item>
 
-    <el-form-item label="近半年内病历" prop="medicalRecord" required>
+    <el-form-item label="身份证照片" prop="idCardPhoto" required>
       <div class="view-files">
-        <div v-if="!form.medicalRecord.length" class="empty">-</div>
+        <div v-if="!form.idCardPhoto.length" class="empty">-</div>
         <ul v-else>
-          <li v-for="(item, index) in form.medicalRecord" :key="`medical-${index}`">{{ getFileName(item) }}</li>
+          <li v-for="(item, index) in form.idCardPhoto" :key="`idimg-${index}`">
+            <a :href="item" target="_blank" rel="noopener noreferrer">{{ getFileName(item) }}</a>
+          </li>
         </ul>
       </div>
     </el-form-item>
 
-    <el-form-item label="身份证正反面" prop="idCardImages" required>
+    <el-form-item label="近期出院小结(视频)" prop="recentDischargeSummary">
       <div class="view-files">
-        <div v-if="!form.idCardImages.length" class="empty">-</div>
+        <div v-if="!form.recentDischargeSummary.length" class="empty">-</div>
         <ul v-else>
-          <li v-for="(item, index) in form.idCardImages" :key="`idimg-${index}`">{{ getFileName(item) }}</li>
+          <li v-for="(item, index) in form.recentDischargeSummary" :key="`discharge-${index}`">
+            <a :href="item" target="_blank" rel="noopener noreferrer">{{ getFileName(item) }}</a>
+          </li>
         </ul>
       </div>
     </el-form-item>
-
-    <el-form-item label="近期出院小结(视频)" prop="dischargeSummaryVideo">
+    <el-form-item label="是否精防" prop="remark">
+      <div class="view-value">{{ form.isPsychosis || '-' }}</div>
+    </el-form-item>
+    <el-form-item label="照护等级" prop="nurseLevelId">
+      <div class="view-value">{{ form.nurseLevelId || '-' }}</div>
+    </el-form-item>
+    <el-form-item label="床位预排备注" prop="remark">
+      <div class="view-value">{{ form.remark || '-' }}</div>
+    </el-form-item>
+    <el-form-item label="体检报告" prop="physicalExaminationReport">
       <div class="view-files">
-        <div v-if="!form.dischargeSummaryVideo.length" class="empty">-</div>
+        <div v-if="!form.physicalExaminationReport.length" class="empty">-</div>
         <ul v-else>
-          <li v-for="(item, index) in form.dischargeSummaryVideo" :key="`discharge-${index}`">{{ getFileName(item) }}</li>
+          <li v-for="(item, index) in form.physicalExaminationReport" :key="`physical-${index}`">
+            <a :href="item" target="_blank" rel="noopener noreferrer">{{ getFileName(item) }}</a>
+          </li>
         </ul>
       </div>
     </el-form-item>
+    <el-form-item label="最终床位信息" prop="bedId">
+      <div class="view-value">{{ form.bedId || '-' }}</div>
+    </el-form-item>
   </el-form>
 </template>
 
 <script setup lang="ts">
 import { getBusinessId } from '@/api/elderly/common'
-import { getBedChangeRecordById, getBedChangeRecordElderlyById } from '@/api/elderly/elder/bed-change'
+import { getWaitElderDetail } from '@/api/bpm/processInstance'
 
 defineOptions({ name: 'BedChangeProcessForm' })
 
@@ -77,63 +105,53 @@ const formRef = ref()
 
 const form = reactive({
   elderName: '',
-  idCardNo: '',
-  campus: '',
-  lifeStatusVideo: [] as any[],
-  walkingVideo: [] as any[],
-  medicalRecord: [] as any[],
-  idCardImages: [] as any[],
-  dischargeSummaryVideo: [] as any[]
+  idCard: '',
+  recentLivingSituation: [] as any[],
+  walkSituationVideo: [] as any[],
+  medicalRecordsWithinSixMonth: [] as any[],
+  idCardPhoto: [] as any[],
+  recentDischargeSummary: [] as any[],
+  physicalExaminationReport: [] as any[],
+  remark: ''
 })
 
 const rules = reactive({})
 
-const campusOptions = ref<{ label: string; value: string }[]>([])
-
-const parseToArray = (value: any) => {
+const parseFileList = (value: any) => {
   if (!value) return []
   if (Array.isArray(value)) return value
   if (typeof value === 'string') {
-    try {
-      const parsed = JSON.parse(value)
-      return Array.isArray(parsed) ? parsed : []
-    } catch (_e) {
-      return []
-    }
+    return value
+      .split(',')
+      .map((item) => item.trim())
+      .filter(Boolean)
   }
   return []
 }
 
 const mapSourceToForm = (source: Record<string, any> = {}) => {
-  form.elderName = source.elderName || source.name || ''
-  form.idCardNo = source.idCardNo || source.idCard || ''
-  form.campus = source.campus || source.campusId || ''
-  form.lifeStatusVideo = parseToArray(source.lifeStatusVideo)
-  form.walkingVideo = parseToArray(source.walkingVideo)
-  form.medicalRecord = parseToArray(source.medicalRecord)
-  form.idCardImages = parseToArray(source.idCardImages)
-  form.dischargeSummaryVideo = parseToArray(source.dischargeSummaryVideo)
-}
-
-const campusLabel = (value: string) => {
-  const item = campusOptions.value.find((it) => it.value === value)
-  return item?.label || value || '-'
+  form.elderName = source.elderName || ''
+  form.idCard = source.idCard || ''
+  form.recentLivingSituation = parseFileList(source.recentLivingSituation)
+  form.walkSituationVideo = parseFileList(source.walkSituationVideo)
+  form.medicalRecordsWithinSixMonth = parseFileList(source.medicalRecordsWithinSixMonth)
+  form.idCardPhoto = parseFileList(source.idCardPhoto)
+  form.recentDischargeSummary = parseFileList(source.recentDischargeSummary)
+  form.physicalExaminationReport = parseFileList(source.physicalExaminationReport)
+  form.remark = source.remark || ''
 }
 
 const getFileName = (file: any) => {
+  if (typeof file === 'string') {
+    return file.split('/').pop() || file
+  }
   return file?.name || file?.fileName || file?.url || '-'
 }
 
-const init = async (id?: string, _detail?: boolean, status?: string, elderly = undefined as any) => {
-  if (elderly?.elderId) {
-    const elderInfo = await getBedChangeRecordElderlyById(elderly.elderId)
-    mapSourceToForm(elderInfo || {})
-  }
-
-  if (id) {
-    const res = await getBedChangeRecordById(id, status, true)
-    mapSourceToForm(res || {})
-  }
+const init = async (id?: string) => {
+  if (!id) return
+  const res = await getWaitElderDetail(Number(id))
+  mapSourceToForm(res || {})
 }
 
 const submitForm = async () => {
@@ -145,24 +163,25 @@ const submitForm = async () => {
 
 const resetForm = () => {
   form.elderName = ''
-  form.idCardNo = ''
-  form.campus = ''
-  form.lifeStatusVideo = []
-  form.walkingVideo = []
-  form.medicalRecord = []
-  form.idCardImages = []
-  form.dischargeSummaryVideo = []
+  form.idCard = ''
+  form.recentLivingSituation = []
+  form.walkSituationVideo = []
+  form.medicalRecordsWithinSixMonth = []
+  form.idCardPhoto = []
+  form.recentDischargeSummary = []
+  form.physicalExaminationReport = []
+  form.remark = ''
   formRef.value?.clearValidate?.()
 }
 
-const processType = ref()
-const getProcess = async (id, type, status) => {
+const processType = ref<number | string>()
+const getProcess = async (id: number | string, type: number | string, _status: number | string) => {
   const res = await getBusinessId(id)
-  await init(res.businessId, true, status)
+  await init(String(res.businessId))
   processType.value = type
 }
 
-const setTenantId = (_tId) => {}
+const setTenantId = (_tId: number | string) => {}
 
 defineExpose({ init, submitForm, getProcess, resetForm, setTenantId })
 </script>

+ 10 - 10
src/views/elderly/elder/wait-elder/index.vue

@@ -11,10 +11,10 @@
     >
       <TenantSelect v-model="queryParams.tenantIds" placeholder="请选择机构名称" prop="tenantIds"/>
       <el-form-item label="长者姓名" prop="elderName">
-        <el-input @keyup.enter="handleQuery" v-model="queryParams.elderName" placeholder="请输入长者姓名" class="!w-240px" />
+        <el-input @keyup.enter="handleQuery" clearable v-model="queryParams.elderName" placeholder="请输入长者姓名" class="!w-240px" />
       </el-form-item>
-      <el-form-item label="审批状态" prop="type">
-        <el-select v-model="queryParams.type" placeholder="请选择" class="!w-240px">
+      <el-form-item label="审批状态" prop="bpmStatus">
+        <el-select v-model="queryParams.bpmStatus" placeholder="请选择" class="!w-240px" clearable>
           <el-option
             v-for="(dict, index) in getIntDictOptions(DICT_TYPE.APPROVAL_STATUS)"
             :key="index"
@@ -35,7 +35,7 @@
     <Table2
       v-loading="loading"
       :data="list"
-      :columns="BedChangeColumns"
+      :columns="WaitElderColumns"
       :queryParams="queryParams"
       @detail="openDetail"
     />
@@ -53,12 +53,13 @@
   <Detail ref="detailRef" />
 </template>
 <script lang="ts" setup>
+
 import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
-import { getBedChangePage } from '@/api/elderly/elder/bed-change'
-import { BedChangeColumns } from '../column'
+import { getCheckInWaitPage } from '@/api/bpm/processInstance'
+import { WaitElderColumns } from '../column'
 import Detail from './Detail.vue'
 import { useUserStore } from '@/store/modules/user'
-defineOptions({ name: 'BedChange' })
+defineOptions({ name: 'WaitElder' })
 const userStore = useUserStore()
 const loading = ref(true) // 列表的加载中
 const total = ref(0) // 列表的总页数
@@ -67,8 +68,7 @@ const queryParams = reactive({
   pageNo: 1,
   pageSize: 10,
   elderName: undefined,
-  expectId: undefined,
-  type: undefined,
+  bpmStatus: undefined,
   tenantIds: userStore.orgTenantId
 })
 const queryFormRef = ref() // 搜索的表单
@@ -77,7 +77,7 @@ const queryFormRef = ref() // 搜索的表单
 const getList = async () => {
   loading.value = true
   try {
-    const data = await getBedChangePage(queryParams)
+    const data = await getCheckInWaitPage(queryParams)
     list.value = data.list
     total.value = data.total
   } finally {