|
|
@@ -0,0 +1,223 @@
|
|
|
+<template>
|
|
|
+ <el-form
|
|
|
+ ref="formRef"
|
|
|
+ :model="form"
|
|
|
+ :rules="rules"
|
|
|
+ label-width="120px"
|
|
|
+ label-position="top"
|
|
|
+ status-icon
|
|
|
+ class="wait-elder-form"
|
|
|
+ >
|
|
|
+ <el-form-item label="长者姓名" prop="elderName" required>
|
|
|
+ <div class="view-value">{{ form.elderName || '-' }}</div>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="身份证号" prop="idCard" required>
|
|
|
+ <div class="view-value">{{ form.idCard || '-' }}</div>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <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="walkSituationVideo" required>
|
|
|
+ <div class="view-files">
|
|
|
+ <div v-if="!form.walkSituationVideo.length" class="empty">-</div>
|
|
|
+ <ul v-else>
|
|
|
+ <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="medicalRecordsWithinSixMonth" required>
|
|
|
+ <div class="view-files">
|
|
|
+ <div v-if="!form.medicalRecordsWithinSixMonth.length" class="empty">-</div>
|
|
|
+ <ul v-else>
|
|
|
+ <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="idCardPhoto" required>
|
|
|
+ <div class="view-files">
|
|
|
+ <div v-if="!form.idCardPhoto.length" class="empty">-</div>
|
|
|
+ <ul v-else>
|
|
|
+ <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="recentDischargeSummary">
|
|
|
+ <div class="view-files">
|
|
|
+ <div v-if="!form.recentDischargeSummary.length" class="empty">-</div>
|
|
|
+ <ul v-else>
|
|
|
+ <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="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.physicalExaminationReport.length" class="empty">-</div>
|
|
|
+ <ul v-else>
|
|
|
+ <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 { getWaitElderDetail } from '@/api/bpm/processInstance'
|
|
|
+
|
|
|
+defineOptions({ name: 'BedChangeProcessForm' })
|
|
|
+
|
|
|
+const formRef = ref()
|
|
|
+
|
|
|
+const form = reactive({
|
|
|
+ elderName: '',
|
|
|
+ idCard: '',
|
|
|
+ recentLivingSituation: [] as any[],
|
|
|
+ walkSituationVideo: [] as any[],
|
|
|
+ medicalRecordsWithinSixMonth: [] as any[],
|
|
|
+ idCardPhoto: [] as any[],
|
|
|
+ recentDischargeSummary: [] as any[],
|
|
|
+ physicalExaminationReport: [] as any[],
|
|
|
+ remark: ''
|
|
|
+})
|
|
|
+
|
|
|
+const rules = reactive({})
|
|
|
+
|
|
|
+const parseFileList = (value: any) => {
|
|
|
+ if (!value) return []
|
|
|
+ if (Array.isArray(value)) return value
|
|
|
+ if (typeof value === 'string') {
|
|
|
+ return value
|
|
|
+ .split(',')
|
|
|
+ .map((item) => item.trim())
|
|
|
+ .filter(Boolean)
|
|
|
+ }
|
|
|
+ return []
|
|
|
+}
|
|
|
+
|
|
|
+const mapSourceToForm = (source: Record<string, any> = {}) => {
|
|
|
+ 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) => {
|
|
|
+ if (!id) return
|
|
|
+ const res = await getWaitElderDetail(Number(id))
|
|
|
+ mapSourceToForm(res || {})
|
|
|
+}
|
|
|
+
|
|
|
+const submitForm = async () => {
|
|
|
+ return {
|
|
|
+ valid: true,
|
|
|
+ dataForm: { ...form }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+const resetForm = () => {
|
|
|
+ form.elderName = ''
|
|
|
+ form.idCard = ''
|
|
|
+ form.recentLivingSituation = []
|
|
|
+ form.walkSituationVideo = []
|
|
|
+ form.medicalRecordsWithinSixMonth = []
|
|
|
+ form.idCardPhoto = []
|
|
|
+ form.recentDischargeSummary = []
|
|
|
+ form.physicalExaminationReport = []
|
|
|
+ form.remark = ''
|
|
|
+ formRef.value?.clearValidate?.()
|
|
|
+}
|
|
|
+
|
|
|
+const processType = ref<number | string>()
|
|
|
+const getProcess = async (id: number | string, type: number | string, _status: number | string) => {
|
|
|
+ const res = await getBusinessId(id)
|
|
|
+ await init(String(res.businessId))
|
|
|
+ processType.value = type
|
|
|
+}
|
|
|
+
|
|
|
+const setTenantId = (_tId: number | string) => {}
|
|
|
+
|
|
|
+defineExpose({ init, submitForm, getProcess, resetForm, setTenantId })
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+.wait-elder-form {
|
|
|
+ .view-value {
|
|
|
+ min-height: 32px;
|
|
|
+ line-height: 32px;
|
|
|
+ padding: 0 11px;
|
|
|
+ border: 1px solid var(--el-border-color);
|
|
|
+ border-radius: 4px;
|
|
|
+ background: var(--el-fill-color-blank);
|
|
|
+ color: var(--el-text-color-primary);
|
|
|
+ }
|
|
|
+
|
|
|
+ .view-files {
|
|
|
+ min-height: 32px;
|
|
|
+ padding: 8px 11px;
|
|
|
+ border: 1px solid var(--el-border-color);
|
|
|
+ border-radius: 4px;
|
|
|
+ background: var(--el-fill-color-blank);
|
|
|
+
|
|
|
+ .empty {
|
|
|
+ color: var(--el-text-color-secondary);
|
|
|
+ }
|
|
|
+
|
|
|
+ ul {
|
|
|
+ margin: 0;
|
|
|
+ padding-left: 18px;
|
|
|
+
|
|
|
+ li {
|
|
|
+ line-height: 24px;
|
|
|
+ color: var(--el-text-color-primary);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|