|
@@ -1,6 +1,5 @@
|
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
|
import { reactive, ref, computed, nextTick } from 'vue'
|
|
import { reactive, ref, computed, nextTick } from 'vue'
|
|
|
-import html2pdf from 'html2pdf.js'
|
|
|
|
|
import ContractBody from './components/ContractBody.vue'
|
|
import ContractBody from './components/ContractBody.vue'
|
|
|
import AttachmentPage from './components/AttachmentPage.vue'
|
|
import AttachmentPage from './components/AttachmentPage.vue'
|
|
|
import AttachmentSelector from './components/AttachmentSelector.vue'
|
|
import AttachmentSelector from './components/AttachmentSelector.vue'
|
|
@@ -18,6 +17,43 @@ import ExplanationExaminationReportBody from './components/ExplanationExaminatio
|
|
|
import DocumentAttachmentBody from './components/DocumentAttachmentBody.vue'
|
|
import DocumentAttachmentBody from './components/DocumentAttachmentBody.vue'
|
|
|
import FirstServiceProjectConfirmationBody from './components/FirstServiceProjectConfirmationBody.vue'
|
|
import FirstServiceProjectConfirmationBody from './components/FirstServiceProjectConfirmationBody.vue'
|
|
|
import ChangeConfirmationFormBody from './components/ChangeConfirmationFormBody.vue'
|
|
import ChangeConfirmationFormBody from './components/ChangeConfirmationFormBody.vue'
|
|
|
|
|
+import {
|
|
|
|
|
+ riskDisclosure_getById,
|
|
|
|
|
+ checkInRegistration_getById,
|
|
|
|
|
+ elderSafetyCommitment_getById,
|
|
|
|
|
+ outingConfirmation_getById,
|
|
|
|
|
+ signatureProxyApplication_getById,
|
|
|
|
|
+ powerOfAttorney_getById,
|
|
|
|
|
+ delegationAgentConfirmation_getById,
|
|
|
|
|
+ serviceChargingStandards_getById,
|
|
|
|
|
+ roomFacilitiesEquipment_getById,
|
|
|
|
|
+ explanationExaminationReport_getById,
|
|
|
|
|
+ partyBIdentificationDocument_getById,
|
|
|
|
|
+ guardianPartyB_getById,
|
|
|
|
|
+ registrationCertificateCivilAffairs_getById,
|
|
|
|
|
+ comprehensiveAssessmentCapabilities_getById,
|
|
|
|
|
+ firstServiceProjectConfirmation_getById,
|
|
|
|
|
+ changeConfirmationForm_getById
|
|
|
|
|
+} from '@/api/elderly/contracts'
|
|
|
|
|
+
|
|
|
|
|
+const attachmentDetailMap: Record<string, (id: number | string) => Promise<any>> = {
|
|
|
|
|
+ attach_1: riskDisclosure_getById,
|
|
|
|
|
+ attach_2: checkInRegistration_getById,
|
|
|
|
|
+ attach_4: elderSafetyCommitment_getById,
|
|
|
|
|
+ attach_5: outingConfirmation_getById,
|
|
|
|
|
+ attach_6: signatureProxyApplication_getById,
|
|
|
|
|
+ attach_7: powerOfAttorney_getById,
|
|
|
|
|
+ attach_8: delegationAgentConfirmation_getById,
|
|
|
|
|
+ attach_9: serviceChargingStandards_getById,
|
|
|
|
|
+ attach_10: roomFacilitiesEquipment_getById,
|
|
|
|
|
+ attach_11: explanationExaminationReport_getById,
|
|
|
|
|
+ attach_12: partyBIdentificationDocument_getById,
|
|
|
|
|
+ attach_13: guardianPartyB_getById,
|
|
|
|
|
+ attach_14: registrationCertificateCivilAffairs_getById,
|
|
|
|
|
+ attach_15: comprehensiveAssessmentCapabilities_getById,
|
|
|
|
|
+ attach_16: firstServiceProjectConfirmation_getById,
|
|
|
|
|
+ attach_17: changeConfirmationForm_getById
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
const message = useMessage()
|
|
const message = useMessage()
|
|
|
|
|
|
|
@@ -50,27 +86,21 @@ const attachmentList = [
|
|
|
]
|
|
]
|
|
|
|
|
|
|
|
const attachments = reactive<Record<string, any>>(
|
|
const attachments = reactive<Record<string, any>>(
|
|
|
- attachmentList.reduce((acc: any, item) => {
|
|
|
|
|
- // 固定内容附件(3=入住须知)默认展示,不需要从列表选择
|
|
|
|
|
- if (item.no === 3) {
|
|
|
|
|
- acc[`attach_${item.no}`] = { title: item.title }
|
|
|
|
|
- } else {
|
|
|
|
|
- acc[`attach_${item.no}`] = null
|
|
|
|
|
- }
|
|
|
|
|
- return acc
|
|
|
|
|
- }, {} as Record<string, any>)
|
|
|
|
|
|
|
+ attachmentList.reduce(
|
|
|
|
|
+ (acc: any, item) => {
|
|
|
|
|
+ // 固定内容附件(3=入住须知)默认展示,不需要从列表选择
|
|
|
|
|
+ if (item.no === 3) {
|
|
|
|
|
+ acc[`attach_${item.no}`] = { id: '', title: item.title }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ acc[`attach_${item.no}`] = null
|
|
|
|
|
+ }
|
|
|
|
|
+ return acc
|
|
|
|
|
+ },
|
|
|
|
|
+ {} as Record<string, any>
|
|
|
|
|
+ )
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
-const riskDisclosureForm = reactive<Record<string, any>>({
|
|
|
|
|
- elderName: '',
|
|
|
|
|
- companyName: '颐年医养',
|
|
|
|
|
- assessor: '',
|
|
|
|
|
- assessDate: '',
|
|
|
|
|
- partyBSign: '',
|
|
|
|
|
- partyBDate: '',
|
|
|
|
|
- partyCSign: '',
|
|
|
|
|
- partyCDate: ''
|
|
|
|
|
-})
|
|
|
|
|
|
|
+const riskDisclosureForm = reactive<Record<string, any>>({})
|
|
|
|
|
|
|
|
const safetyCommitmentForm = reactive<Record<string, any>>({
|
|
const safetyCommitmentForm = reactive<Record<string, any>>({
|
|
|
elderSign: '',
|
|
elderSign: '',
|
|
@@ -209,11 +239,20 @@ const checkInRegistrationForm = reactive<Record<string, any>>({
|
|
|
checkInReason: '',
|
|
checkInReason: '',
|
|
|
pastHistory: {
|
|
pastHistory: {
|
|
|
hasDisease: false,
|
|
hasDisease: false,
|
|
|
- diseases: [{ name: '', confirmTime: '' }, { name: '', confirmTime: '' }],
|
|
|
|
|
|
|
+ diseases: [
|
|
|
|
|
+ { name: '', confirmTime: '' },
|
|
|
|
|
+ { name: '', confirmTime: '' }
|
|
|
|
|
+ ],
|
|
|
hasSurgery: false,
|
|
hasSurgery: false,
|
|
|
- surgeries: [{ name: '', time: '' }, { name: '', time: '' }],
|
|
|
|
|
|
|
+ surgeries: [
|
|
|
|
|
+ { name: '', time: '' },
|
|
|
|
|
+ { name: '', time: '' }
|
|
|
|
|
+ ],
|
|
|
hasTrauma: false,
|
|
hasTrauma: false,
|
|
|
- traumas: [{ part: '', time: '' }, { part: '', time: '' }]
|
|
|
|
|
|
|
+ traumas: [
|
|
|
|
|
+ { part: '', time: '' },
|
|
|
|
|
+ { part: '', time: '' }
|
|
|
|
|
+ ]
|
|
|
},
|
|
},
|
|
|
currentDiseases: [
|
|
currentDiseases: [
|
|
|
{ name: '', confirmTime: '', currentStatus: '' },
|
|
{ name: '', confirmTime: '', currentStatus: '' },
|
|
@@ -291,6 +330,22 @@ const handleContractDataChange = (data: any) => {
|
|
|
contractSignatureData.value.partyCDate = data.partyCDate || ''
|
|
contractSignatureData.value.partyCDate = data.partyCDate || ''
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+const handleAttachmentsLoad = (data: Record<string, any>) => {
|
|
|
|
|
+ console.log('收到', data)
|
|
|
|
|
+ if (!data) return
|
|
|
|
|
+ Object.keys(data).forEach((key) => {
|
|
|
|
|
+ if (attachments.hasOwnProperty(key)) {
|
|
|
|
|
+ console.log('AAAAAAA', data[key])
|
|
|
|
|
+ attachments[key] = data[key]
|
|
|
|
|
+ if (key == 'attach_1') {
|
|
|
|
|
+ Object.assign(riskDisclosureForm, data[key])
|
|
|
|
|
+ } else if (key == 'attach_2') {
|
|
|
|
|
+ Object.assign(checkInRegistrationForm, data[key])
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
const selectedAttachments = computed(() => {
|
|
const selectedAttachments = computed(() => {
|
|
|
return attachmentList.filter((a) => {
|
|
return attachmentList.filter((a) => {
|
|
|
const data = attachments[`attach_${a.no}`]
|
|
const data = attachments[`attach_${a.no}`]
|
|
@@ -314,10 +369,10 @@ const selectorVisible = ref<{
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
const type_c = ref(1)
|
|
const type_c = ref(1)
|
|
|
-const open = (row?: any,type=1) => {
|
|
|
|
|
|
|
+const open = (row?: any, type = 1) => {
|
|
|
recordRow.value = row || null
|
|
recordRow.value = row || null
|
|
|
type_c.value = type
|
|
type_c.value = type
|
|
|
- isTextMode.value = type_c.value != 1;
|
|
|
|
|
|
|
+ isTextMode.value = type_c.value != 1
|
|
|
formLoading.value = true
|
|
formLoading.value = true
|
|
|
isPrint.value = false
|
|
isPrint.value = false
|
|
|
attachmentList.forEach((it) => {
|
|
attachmentList.forEach((it) => {
|
|
@@ -328,45 +383,7 @@ const open = (row?: any,type=1) => {
|
|
|
attachments[`attach_${it.no}`] = null
|
|
attachments[`attach_${it.no}`] = null
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
- riskDisclosureForm.elderName = ''
|
|
|
|
|
- riskDisclosureForm.assessor = ''
|
|
|
|
|
- riskDisclosureForm.assessDate = ''
|
|
|
|
|
- riskDisclosureForm.partyBSign = ''
|
|
|
|
|
- riskDisclosureForm.partyBDate = ''
|
|
|
|
|
- riskDisclosureForm.partyCSign = ''
|
|
|
|
|
- riskDisclosureForm.partyCDate = ''
|
|
|
|
|
-
|
|
|
|
|
- // 重置长者安全承诺书表单
|
|
|
|
|
- safetyCommitmentForm.elderSign = ''
|
|
|
|
|
- safetyCommitmentForm.guardianSign = ''
|
|
|
|
|
- safetyCommitmentForm.signDate = ''
|
|
|
|
|
-
|
|
|
|
|
- // 重置长者外出情况确认书表单
|
|
|
|
|
- outingConfirmationForm.elderName = ''
|
|
|
|
|
- outingConfirmationForm.outingAbility = ''
|
|
|
|
|
- outingConfirmationForm.elderSign = ''
|
|
|
|
|
- outingConfirmationForm.guardianSign = ''
|
|
|
|
|
- outingConfirmationForm.signDate = ''
|
|
|
|
|
-
|
|
|
|
|
- // 重置入住登记表表单
|
|
|
|
|
- Object.keys(checkInRegistrationForm).forEach((key) => {
|
|
|
|
|
- const val = (checkInRegistrationForm as any)[key]
|
|
|
|
|
- if (Array.isArray(val)) {
|
|
|
|
|
- ;(checkInRegistrationForm as any)[key] = []
|
|
|
|
|
- } else if (typeof val === 'object' && val !== null) {
|
|
|
|
|
- ;(checkInRegistrationForm as any)[key] = JSON.parse(JSON.stringify(val))
|
|
|
|
|
- } else {
|
|
|
|
|
- ;(checkInRegistrationForm as any)[key] = ''
|
|
|
|
|
- }
|
|
|
|
|
- })
|
|
|
|
|
|
|
|
|
|
- contractSignatureData.value.partyASign = ''
|
|
|
|
|
- contractSignatureData.value.partyALegalSign = ''
|
|
|
|
|
- contractSignatureData.value.partyADate = ''
|
|
|
|
|
- contractSignatureData.value.partyBSign = ''
|
|
|
|
|
- contractSignatureData.value.partyBDate = ''
|
|
|
|
|
- contractSignatureData.value.partyCSign = ''
|
|
|
|
|
- contractSignatureData.value.partyCDate = ''
|
|
|
|
|
visible.value = true
|
|
visible.value = true
|
|
|
setTimeout(() => {
|
|
setTimeout(() => {
|
|
|
formLoading.value = false
|
|
formLoading.value = false
|
|
@@ -384,6 +401,9 @@ const emit = defineEmits(['refreshTree'])
|
|
|
const handleSave = async () => {
|
|
const handleSave = async () => {
|
|
|
formLoading.value = true
|
|
formLoading.value = true
|
|
|
try {
|
|
try {
|
|
|
|
|
+ if (contractBodyRef.value) {
|
|
|
|
|
+ await contractBodyRef.value.saveContract()
|
|
|
|
|
+ }
|
|
|
message.success('保存成功')
|
|
message.success('保存成功')
|
|
|
visible.value = false
|
|
visible.value = false
|
|
|
emit('refreshTree')
|
|
emit('refreshTree')
|
|
@@ -410,8 +430,6 @@ const handlePrint = async () => {
|
|
|
}, 500)
|
|
}, 500)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
const toggleTextMode = () => {
|
|
const toggleTextMode = () => {
|
|
|
isTextMode.value = !isTextMode.value
|
|
isTextMode.value = !isTextMode.value
|
|
|
}
|
|
}
|
|
@@ -436,46 +454,70 @@ const handleAttachmentDelete = (attach: any) => {
|
|
|
message.success(`已删除:${attach.title}`)
|
|
message.success(`已删除:${attach.title}`)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-const handleAttachmentSelect = (row: any) => {
|
|
|
|
|
|
|
+const handleAttachmentSelect = async (row: any) => {
|
|
|
const key = selectorVisible.value.current
|
|
const key = selectorVisible.value.current
|
|
|
|
|
+ console.log('KEY值:', key, row, attachments)
|
|
|
if (key) {
|
|
if (key) {
|
|
|
- attachments[key] = row
|
|
|
|
|
- // 附件 2:入住登记表,解析 assessData 到表单
|
|
|
|
|
- if (key === 'attach_2' && row.assessData) {
|
|
|
|
|
|
|
+ const getDetail = attachmentDetailMap[key]
|
|
|
|
|
+ let fullData = row
|
|
|
|
|
+ if (getDetail && row.id) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ const detail = await getDetail(row.id)
|
|
|
|
|
+ if (detail && detail.content) {
|
|
|
|
|
+ fullData = detail.content
|
|
|
|
|
+ const data = JSON.parse(fullData)
|
|
|
|
|
+ // 将id添加到数据中,方便后续操作
|
|
|
|
|
+ data.id = row.id
|
|
|
|
|
+ fullData = JSON.stringify(data)
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ console.error(`获取附件详情失败: ${key}`, error)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ attachments[key] = fullData
|
|
|
|
|
+ if (key === 'attach_1' && fullData) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ const data = JSON.parse(fullData)
|
|
|
|
|
+ if (data) {
|
|
|
|
|
+ Object.assign(riskDisclosureForm, data)
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ console.error('解析风险披露数据失败', error)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (key === 'attach_2' && fullData) {
|
|
|
try {
|
|
try {
|
|
|
- const data = JSON.parse(row.assessData)
|
|
|
|
|
- if (data.checkInRegistration) {
|
|
|
|
|
- Object.assign(checkInRegistrationForm, data.checkInRegistration)
|
|
|
|
|
- } else {
|
|
|
|
|
|
|
+ const data = JSON.parse(fullData)
|
|
|
|
|
+ if (data) {
|
|
|
Object.assign(checkInRegistrationForm, data)
|
|
Object.assign(checkInRegistrationForm, data)
|
|
|
}
|
|
}
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
console.error('解析入住登记表数据失败', error)
|
|
console.error('解析入住登记表数据失败', error)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- // 附件 4:长者安全承诺书,解析 assessData 到表单
|
|
|
|
|
- if (key === 'attach_4' && row.assessData) {
|
|
|
|
|
|
|
+ if (key === 'attach_4' && fullData) {
|
|
|
try {
|
|
try {
|
|
|
- const data = JSON.parse(row.assessData)
|
|
|
|
|
- if (data.safetyCommitment) {
|
|
|
|
|
- Object.assign(safetyCommitmentForm, data.safetyCommitment)
|
|
|
|
|
|
|
+ const data = JSON.parse(fullData)
|
|
|
|
|
+ if (data) {
|
|
|
|
|
+ Object.assign(safetyCommitmentForm, data)
|
|
|
}
|
|
}
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
console.error('解析长者安全承诺书数据失败', error)
|
|
console.error('解析长者安全承诺书数据失败', error)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- // 附件 5:长者外出情况确认书,解析 assessData 到表单
|
|
|
|
|
- if (key === 'attach_5' && row.assessData) {
|
|
|
|
|
|
|
+ if (key === 'attach_5' && fullData) {
|
|
|
try {
|
|
try {
|
|
|
- const data = JSON.parse(row.assessData)
|
|
|
|
|
- if (data.outingConfirmation) {
|
|
|
|
|
- Object.assign(outingConfirmationForm, data.outingConfirmation)
|
|
|
|
|
|
|
+ const data = JSON.parse(fullData)
|
|
|
|
|
+ if (data) {
|
|
|
|
|
+ Object.assign(outingConfirmationForm, data)
|
|
|
}
|
|
}
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
console.error('解析长者外出情况确认书数据失败', error)
|
|
console.error('解析长者外出情况确认书数据失败', error)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- message.success(`已选择:${row[activeTitleField(key)] || attachTitle(key)}`)
|
|
|
|
|
|
|
+ message.success(
|
|
|
|
|
+ `已选择:${fullData.elderName || row[activeTitleField(key)] || attachTitle(key)}`
|
|
|
|
|
+ )
|
|
|
}
|
|
}
|
|
|
selectorVisible.value.show = false
|
|
selectorVisible.value.show = false
|
|
|
}
|
|
}
|
|
@@ -497,6 +539,10 @@ const handleAttachmentSelectorClose = () => {
|
|
|
selectorVisible.value.show = false
|
|
selectorVisible.value.show = false
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+const handFormData = (data: any) => {
|
|
|
|
|
+ console.log('收到:', data)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
const renderAttachmentContent = (key: string) => {
|
|
const renderAttachmentContent = (key: string) => {
|
|
|
const data = attachments[key]
|
|
const data = attachments[key]
|
|
|
if (!data) return null
|
|
if (!data) return null
|
|
@@ -516,14 +562,32 @@ const renderAttachmentContent = (key: string) => {
|
|
|
<div class="content-toolbar" v-if="!isPrint">
|
|
<div class="content-toolbar" v-if="!isPrint">
|
|
|
<el-tag type="info" size="large">颐年集团养老服务合同</el-tag>
|
|
<el-tag type="info" size="large">颐年集团养老服务合同</el-tag>
|
|
|
<div class="toolbar-right">
|
|
<div class="toolbar-right">
|
|
|
- <el-tooltip :content="isTextMode ? '切换为编辑模式(输入框)' : '切换为文本模式(打印预览)'" placement="top">
|
|
|
|
|
- <el-button v-show="type_c==1" :type="isTextMode ? 'success' : 'default'" size="small" @click="toggleTextMode">
|
|
|
|
|
|
|
+ <el-tooltip
|
|
|
|
|
+ :content="isTextMode ? '切换为编辑模式(输入框)' : '切换为文本模式(打印预览)'"
|
|
|
|
|
+ placement="top"
|
|
|
|
|
+ >
|
|
|
|
|
+ <el-button
|
|
|
|
|
+ v-show="type_c == 1"
|
|
|
|
|
+ :type="isTextMode ? 'success' : 'default'"
|
|
|
|
|
+ size="small"
|
|
|
|
|
+ @click="toggleTextMode"
|
|
|
|
|
+ >
|
|
|
{{ isTextMode ? '文本模式' : '编辑模式' }}
|
|
{{ isTextMode ? '文本模式' : '编辑模式' }}
|
|
|
</el-button>
|
|
</el-button>
|
|
|
</el-tooltip>
|
|
</el-tooltip>
|
|
|
- <el-button v-show="type_c==1" type="primary" :loading="formLoading" size="small" @click="handleSave">保存</el-button>
|
|
|
|
|
|
|
+ <el-button
|
|
|
|
|
+ v-show="type_c == 1"
|
|
|
|
|
+ type="primary"
|
|
|
|
|
+ :loading="formLoading"
|
|
|
|
|
+ size="small"
|
|
|
|
|
+ @click="handleSave"
|
|
|
|
|
+ >保存</el-button
|
|
|
|
|
+ >
|
|
|
<el-button size="small" @click="handleClose">关闭</el-button>
|
|
<el-button size="small" @click="handleClose">关闭</el-button>
|
|
|
- <el-tooltip placement="bottom" content="打印时目标打印机选择「Microsoft Print to PDF」;导出时目标打印机选择「另存为 PDF」">
|
|
|
|
|
|
|
+ <el-tooltip
|
|
|
|
|
+ placement="bottom"
|
|
|
|
|
+ content="打印时目标打印机选择「Microsoft Print to PDF」;导出时目标打印机选择「另存为 PDF」"
|
|
|
|
|
+ >
|
|
|
<el-button type="success" size="small" @click="handlePrint">打印/导出</el-button>
|
|
<el-button type="success" size="small" @click="handlePrint">打印/导出</el-button>
|
|
|
</el-tooltip>
|
|
</el-tooltip>
|
|
|
</div>
|
|
</div>
|
|
@@ -534,10 +598,19 @@ const renderAttachmentContent = (key: string) => {
|
|
|
<div class="section-divider">
|
|
<div class="section-divider">
|
|
|
<span>合同主体</span>
|
|
<span>合同主体</span>
|
|
|
</div>
|
|
</div>
|
|
|
- <ContractBody ref="contractBodyRef" :record-row="recordRow" :is-text-mode="isTextMode" v-model="contractSignatureData" @update:data="handleContractDataChange" />
|
|
|
|
|
|
|
+ <ContractBody
|
|
|
|
|
+ ref="contractBodyRef"
|
|
|
|
|
+ :record-row="recordRow"
|
|
|
|
|
+ :is-text-mode="isTextMode"
|
|
|
|
|
+ v-model="contractSignatureData"
|
|
|
|
|
+ :attachment-ids="attachments"
|
|
|
|
|
+ @update:form-data="handFormData"
|
|
|
|
|
+ @update:data="handleContractDataChange"
|
|
|
|
|
+ @update:attachments="handleAttachmentsLoad"
|
|
|
|
|
+ />
|
|
|
|
|
|
|
|
<!-- ============ 16个附件 ============ -->
|
|
<!-- ============ 16个附件 ============ -->
|
|
|
- <div class="section-divider" style="margin-top: 30px;">
|
|
|
|
|
|
|
+ <div class="section-divider" style="margin-top: 30px">
|
|
|
<span>附件清单</span>
|
|
<span>附件清单</span>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
@@ -570,57 +643,95 @@ const renderAttachmentContent = (key: string) => {
|
|
|
/>
|
|
/>
|
|
|
</div>
|
|
</div>
|
|
|
<div v-else-if="attach.no === 4" class="attachment-content">
|
|
<div v-else-if="attach.no === 4" class="attachment-content">
|
|
|
- <ElderSafetyCommitmentBody v-model="safetyCommitmentForm" :is-text-mode="isTextMode" />
|
|
|
|
|
|
|
+ <ElderSafetyCommitmentBody
|
|
|
|
|
+ v-model="safetyCommitmentForm"
|
|
|
|
|
+ :is-text-mode="isTextMode"
|
|
|
|
|
+ />
|
|
|
</div>
|
|
</div>
|
|
|
<div v-else-if="attach.no === 5" class="attachment-content">
|
|
<div v-else-if="attach.no === 5" class="attachment-content">
|
|
|
<OutingConfirmationBody v-model="outingConfirmationForm" :is-text-mode="isTextMode" />
|
|
<OutingConfirmationBody v-model="outingConfirmationForm" :is-text-mode="isTextMode" />
|
|
|
</div>
|
|
</div>
|
|
|
<div v-else-if="attach.no === 6" class="attachment-content">
|
|
<div v-else-if="attach.no === 6" class="attachment-content">
|
|
|
- <SignatureProxyApplicationBody v-model="signatureProxyForm" :is-text-mode="isTextMode" />
|
|
|
|
|
|
|
+ <SignatureProxyApplicationBody
|
|
|
|
|
+ v-model="signatureProxyForm"
|
|
|
|
|
+ :is-text-mode="isTextMode"
|
|
|
|
|
+ />
|
|
|
</div>
|
|
</div>
|
|
|
<div v-else-if="attach.no === 7" class="attachment-content">
|
|
<div v-else-if="attach.no === 7" class="attachment-content">
|
|
|
<PowerOfAttorneyBody v-model="powerOfAttorneyForm" :is-text-mode="isTextMode" />
|
|
<PowerOfAttorneyBody v-model="powerOfAttorneyForm" :is-text-mode="isTextMode" />
|
|
|
</div>
|
|
</div>
|
|
|
<div v-else-if="attach.no === 8" class="attachment-content">
|
|
<div v-else-if="attach.no === 8" class="attachment-content">
|
|
|
- <DelegationAgentConfirmationBody v-model="delegationAgentForm" :is-text-mode="isTextMode" />
|
|
|
|
|
|
|
+ <DelegationAgentConfirmationBody
|
|
|
|
|
+ v-model="delegationAgentForm"
|
|
|
|
|
+ :is-text-mode="isTextMode"
|
|
|
|
|
+ />
|
|
|
</div>
|
|
</div>
|
|
|
<div v-else-if="attach.no === 9" class="attachment-content">
|
|
<div v-else-if="attach.no === 9" class="attachment-content">
|
|
|
- <ServiceChargingStandardsBody v-model="serviceChargingForm" :is-text-mode="isTextMode" />
|
|
|
|
|
|
|
+ <ServiceChargingStandardsBody
|
|
|
|
|
+ v-model="serviceChargingForm"
|
|
|
|
|
+ :is-text-mode="isTextMode"
|
|
|
|
|
+ />
|
|
|
</div>
|
|
</div>
|
|
|
<div v-else-if="attach.no === 10" class="attachment-content">
|
|
<div v-else-if="attach.no === 10" class="attachment-content">
|
|
|
- <RoomFacilitiesEquipmentBody v-model="roomFacilitiesForm" :is-text-mode="isTextMode" />
|
|
|
|
|
|
|
+ <RoomFacilitiesEquipmentBody
|
|
|
|
|
+ v-model="roomFacilitiesForm"
|
|
|
|
|
+ :is-text-mode="isTextMode"
|
|
|
|
|
+ />
|
|
|
</div>
|
|
</div>
|
|
|
<div v-else-if="attach.no === 11" class="attachment-content">
|
|
<div v-else-if="attach.no === 11" class="attachment-content">
|
|
|
- <ExplanationExaminationReportBody v-model="examinationReportForm" :is-text-mode="isTextMode" />
|
|
|
|
|
|
|
+ <ExplanationExaminationReportBody
|
|
|
|
|
+ v-model="examinationReportForm"
|
|
|
|
|
+ :is-text-mode="isTextMode"
|
|
|
|
|
+ />
|
|
|
</div>
|
|
</div>
|
|
|
<div v-else-if="attach.no === 12" class="attachment-content">
|
|
<div v-else-if="attach.no === 12" class="attachment-content">
|
|
|
- <DocumentAttachmentBody v-model="identificationPartyBForm" :is-text-mode="isTextMode" title="乙方有效证件" description="乙方:有效身份证件复印件(正反面复印)及户口本复印件(户主页和本人页)" />
|
|
|
|
|
|
|
+ <DocumentAttachmentBody
|
|
|
|
|
+ v-model="identificationPartyBForm"
|
|
|
|
|
+ :is-text-mode="isTextMode"
|
|
|
|
|
+ title="乙方有效证件"
|
|
|
|
|
+ description="乙方:有效身份证件复印件(正反面复印)及户口本复印件(户主页和本人页)"
|
|
|
|
|
+ />
|
|
|
</div>
|
|
</div>
|
|
|
<div v-else-if="attach.no === 13" class="attachment-content">
|
|
<div v-else-if="attach.no === 13" class="attachment-content">
|
|
|
- <DocumentAttachmentBody v-model="guardianPartyBForm" :is-text-mode="isTextMode" title="乙方监护人(丙方)身份证、户口本复印件" description="丙方:(系自然人的)有效身份证件复印件(正反面复印)及户口本复印件(户主页和本人页);(系单位的)的有效注册登登记材料复印件(加盖公章)、法定代表人/负责人及联系人的身份证件复印件(身份证件需正反面复印)" />
|
|
|
|
|
|
|
+ <DocumentAttachmentBody
|
|
|
|
|
+ v-model="guardianPartyBForm"
|
|
|
|
|
+ :is-text-mode="isTextMode"
|
|
|
|
|
+ title="乙方监护人(丙方)身份证、户口本复印件"
|
|
|
|
|
+ description="丙方:(系自然人的)有效身份证件复印件(正反面复印)及户口本复印件(户主页和本人页);(系单位的)的有效注册登登记材料复印件(加盖公章)、法定代表人/负责人及联系人的身份证件复印件(身份证件需正反面复印)"
|
|
|
|
|
+ />
|
|
|
</div>
|
|
</div>
|
|
|
<div v-else-if="attach.no === 14" class="attachment-content">
|
|
<div v-else-if="attach.no === 14" class="attachment-content">
|
|
|
- <DocumentAttachmentBody v-model="registrationCertificateForm" :is-text-mode="isTextMode" description="甲方登记证书及民政部门备案回执" />
|
|
|
|
|
|
|
+ <DocumentAttachmentBody
|
|
|
|
|
+ v-model="registrationCertificateForm"
|
|
|
|
|
+ :is-text-mode="isTextMode"
|
|
|
|
|
+ description="甲方登记证书及民政部门备案回执"
|
|
|
|
|
+ />
|
|
|
</div>
|
|
</div>
|
|
|
<div v-else-if="attach.no === 15" class="attachment-content">
|
|
<div v-else-if="attach.no === 15" class="attachment-content">
|
|
|
- <DocumentAttachmentBody v-model="comprehensiveAssessmentForm" :is-text-mode="isTextMode" title="老年人能力综合评估结果" />
|
|
|
|
|
|
|
+ <DocumentAttachmentBody
|
|
|
|
|
+ v-model="comprehensiveAssessmentForm"
|
|
|
|
|
+ :is-text-mode="isTextMode"
|
|
|
|
|
+ title="老年人能力综合评估结果"
|
|
|
|
|
+ />
|
|
|
</div>
|
|
</div>
|
|
|
<div v-else-if="attach.no === 16" class="attachment-content">
|
|
<div v-else-if="attach.no === 16" class="attachment-content">
|
|
|
- <FirstServiceProjectConfirmationBody v-model="firstServiceForm" :is-text-mode="isTextMode" />
|
|
|
|
|
|
|
+ <FirstServiceProjectConfirmationBody
|
|
|
|
|
+ v-model="firstServiceForm"
|
|
|
|
|
+ :is-text-mode="isTextMode"
|
|
|
|
|
+ />
|
|
|
</div>
|
|
</div>
|
|
|
<div v-else-if="attach.no === 17" class="attachment-content">
|
|
<div v-else-if="attach.no === 17" class="attachment-content">
|
|
|
<ChangeConfirmationFormBody v-model="changeConfirmForm" :is-text-mode="isTextMode" />
|
|
<ChangeConfirmationFormBody v-model="changeConfirmForm" :is-text-mode="isTextMode" />
|
|
|
</div>
|
|
</div>
|
|
|
- <div v-else class="attachment-body">
|
|
|
|
|
|
|
+ <div v-else class="attachment-body">
|
|
|
<p><strong>日期:</strong>{{ data?.createTime || '-' }}</p>
|
|
<p><strong>日期:</strong>{{ data?.createTime || '-' }}</p>
|
|
|
- <p style="color: #999; font-size: 13px;">
|
|
|
|
|
|
|
+ <p style="color: #999; font-size: 13px">
|
|
|
(此处为附件内容占位,实际各附件将由对应列表页提供完整内容排版)
|
|
(此处为附件内容占位,实际各附件将由对应列表页提供完整内容排版)
|
|
|
</p>
|
|
</p>
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
</AttachmentPage>
|
|
</AttachmentPage>
|
|
|
</div>
|
|
</div>
|
|
|
-
|
|
|
|
|
</div>
|
|
</div>
|
|
|
</el-drawer>
|
|
</el-drawer>
|
|
|
|
|
|
|
@@ -628,6 +739,7 @@ const renderAttachmentContent = (key: string) => {
|
|
|
v-model:visible="selectorVisible.show"
|
|
v-model:visible="selectorVisible.show"
|
|
|
:title="selectorVisible.title"
|
|
:title="selectorVisible.title"
|
|
|
:current="selectorVisible.current"
|
|
:current="selectorVisible.current"
|
|
|
|
|
+ :elder-id="recordRow?.elderId"
|
|
|
:list="selectorVisible.list"
|
|
:list="selectorVisible.list"
|
|
|
@select="handleAttachmentSelect"
|
|
@select="handleAttachmentSelect"
|
|
|
@update:visible="handleAttachmentSelectorClose"
|
|
@update:visible="handleAttachmentSelectorClose"
|
|
@@ -641,45 +753,112 @@ const renderAttachmentContent = (key: string) => {
|
|
|
|
|
|
|
|
<!-- 已选的附件 -->
|
|
<!-- 已选的附件 -->
|
|
|
<template v-if="selectedAttachments.length > 0">
|
|
<template v-if="selectedAttachments.length > 0">
|
|
|
- <div
|
|
|
|
|
- v-for="attach in selectedAttachments"
|
|
|
|
|
- :key="attach.no"
|
|
|
|
|
- class="print-attachment"
|
|
|
|
|
- >
|
|
|
|
|
|
|
+ <div v-for="attach in selectedAttachments" :key="attach.no" class="print-attachment">
|
|
|
<!-- 附件1:知情同意书,使用 RiskDisclosureBody -->
|
|
<!-- 附件1:知情同意书,使用 RiskDisclosureBody -->
|
|
|
- <RiskDisclosureBody v-if="attach.no === 1" v-model="riskDisclosureForm" :is-text-mode="true" />
|
|
|
|
|
|
|
+ <RiskDisclosureBody
|
|
|
|
|
+ v-if="attach.no === 1"
|
|
|
|
|
+ v-model="riskDisclosureForm"
|
|
|
|
|
+ :is-text-mode="true"
|
|
|
|
|
+ />
|
|
|
<!-- 附件2:入住登记表,使用 CheckInRegistrationBody -->
|
|
<!-- 附件2:入住登记表,使用 CheckInRegistrationBody -->
|
|
|
- <CheckInRegistrationBody v-else-if="attach.no === 2" v-model="checkInRegistrationForm" :is-text-mode="true" :elder-id="recordRow?.elderId" />
|
|
|
|
|
|
|
+ <CheckInRegistrationBody
|
|
|
|
|
+ v-else-if="attach.no === 2"
|
|
|
|
|
+ v-model="checkInRegistrationForm"
|
|
|
|
|
+ :is-text-mode="true"
|
|
|
|
|
+ :elder-id="recordRow?.elderId"
|
|
|
|
|
+ />
|
|
|
<!-- 附件3:入住须知,使用 CheckInInformationBody -->
|
|
<!-- 附件3:入住须知,使用 CheckInInformationBody -->
|
|
|
<CheckInInformationBody v-else-if="attach.no === 3" :is-text-mode="true" />
|
|
<CheckInInformationBody v-else-if="attach.no === 3" :is-text-mode="true" />
|
|
|
<!-- 附件4:长者安全承诺书,使用 ElderSafetyCommitmentBody -->
|
|
<!-- 附件4:长者安全承诺书,使用 ElderSafetyCommitmentBody -->
|
|
|
- <ElderSafetyCommitmentBody v-else-if="attach.no === 4" v-model="safetyCommitmentForm" :is-text-mode="true" />
|
|
|
|
|
|
|
+ <ElderSafetyCommitmentBody
|
|
|
|
|
+ v-else-if="attach.no === 4"
|
|
|
|
|
+ v-model="safetyCommitmentForm"
|
|
|
|
|
+ :is-text-mode="true"
|
|
|
|
|
+ />
|
|
|
<!-- 附件5:长者外出情况确认书,使用 OutingConfirmationBody -->
|
|
<!-- 附件5:长者外出情况确认书,使用 OutingConfirmationBody -->
|
|
|
- <OutingConfirmationBody v-else-if="attach.no === 5" v-model="outingConfirmationForm" :is-text-mode="true" />
|
|
|
|
|
|
|
+ <OutingConfirmationBody
|
|
|
|
|
+ v-else-if="attach.no === 5"
|
|
|
|
|
+ v-model="outingConfirmationForm"
|
|
|
|
|
+ :is-text-mode="true"
|
|
|
|
|
+ />
|
|
|
<!-- 附件6:签名代理申请,使用 SignatureProxyApplicationBody -->
|
|
<!-- 附件6:签名代理申请,使用 SignatureProxyApplicationBody -->
|
|
|
- <SignatureProxyApplicationBody v-else-if="attach.no === 6" v-model="signatureProxyForm" :is-text-mode="true" />
|
|
|
|
|
|
|
+ <SignatureProxyApplicationBody
|
|
|
|
|
+ v-else-if="attach.no === 6"
|
|
|
|
|
+ v-model="signatureProxyForm"
|
|
|
|
|
+ :is-text-mode="true"
|
|
|
|
|
+ />
|
|
|
<!-- 附件7:授权委托书,使用 PowerOfAttorneyBody -->
|
|
<!-- 附件7:授权委托书,使用 PowerOfAttorneyBody -->
|
|
|
- <PowerOfAttorneyBody v-else-if="attach.no === 7" v-model="powerOfAttorneyForm" :is-text-mode="true" />
|
|
|
|
|
|
|
+ <PowerOfAttorneyBody
|
|
|
|
|
+ v-else-if="attach.no === 7"
|
|
|
|
|
+ v-model="powerOfAttorneyForm"
|
|
|
|
|
+ :is-text-mode="true"
|
|
|
|
|
+ />
|
|
|
<!-- 附件8:委托代理人确认表,使用 DelegationAgentConfirmationBody -->
|
|
<!-- 附件8:委托代理人确认表,使用 DelegationAgentConfirmationBody -->
|
|
|
- <DelegationAgentConfirmationBody v-else-if="attach.no === 8" v-model="delegationAgentForm" :is-text-mode="true" />
|
|
|
|
|
|
|
+ <DelegationAgentConfirmationBody
|
|
|
|
|
+ v-else-if="attach.no === 8"
|
|
|
|
|
+ v-model="delegationAgentForm"
|
|
|
|
|
+ :is-text-mode="true"
|
|
|
|
|
+ />
|
|
|
<!-- 附件9:机构服务范围及收费标准,使用 ServiceChargingStandardsBody -->
|
|
<!-- 附件9:机构服务范围及收费标准,使用 ServiceChargingStandardsBody -->
|
|
|
- <ServiceChargingStandardsBody v-else-if="attach.no === 9" v-model="serviceChargingForm" :is-text-mode="true" />
|
|
|
|
|
|
|
+ <ServiceChargingStandardsBody
|
|
|
|
|
+ v-else-if="attach.no === 9"
|
|
|
|
|
+ v-model="serviceChargingForm"
|
|
|
|
|
+ :is-text-mode="true"
|
|
|
|
|
+ />
|
|
|
<!-- 附件10:标准房间物品配备,使用 RoomFacilitiesEquipmentBody -->
|
|
<!-- 附件10:标准房间物品配备,使用 RoomFacilitiesEquipmentBody -->
|
|
|
- <RoomFacilitiesEquipmentBody v-else-if="attach.no === 10" v-model="roomFacilitiesForm" :is-text-mode="true" />
|
|
|
|
|
|
|
+ <RoomFacilitiesEquipmentBody
|
|
|
|
|
+ v-else-if="attach.no === 10"
|
|
|
|
|
+ v-model="roomFacilitiesForm"
|
|
|
|
|
+ :is-text-mode="true"
|
|
|
|
|
+ />
|
|
|
<!-- 附件11:体检报告项目说明,使用 ExplanationExaminationReportBody -->
|
|
<!-- 附件11:体检报告项目说明,使用 ExplanationExaminationReportBody -->
|
|
|
- <ExplanationExaminationReportBody v-else-if="attach.no === 11" v-model="examinationReportForm" :is-text-mode="true" />
|
|
|
|
|
|
|
+ <ExplanationExaminationReportBody
|
|
|
|
|
+ v-else-if="attach.no === 11"
|
|
|
|
|
+ v-model="examinationReportForm"
|
|
|
|
|
+ :is-text-mode="true"
|
|
|
|
|
+ />
|
|
|
<!-- 附件12:乙方有效证件,使用 DocumentAttachmentBody -->
|
|
<!-- 附件12:乙方有效证件,使用 DocumentAttachmentBody -->
|
|
|
- <DocumentAttachmentBody v-else-if="attach.no === 12" v-model="identificationPartyBForm" :is-text-mode="true" title="乙方有效证件" description="乙方:有效身份证件复印件(正反面复印)及户口本复印件(户主页和本人页)" />
|
|
|
|
|
|
|
+ <DocumentAttachmentBody
|
|
|
|
|
+ v-else-if="attach.no === 12"
|
|
|
|
|
+ v-model="identificationPartyBForm"
|
|
|
|
|
+ :is-text-mode="true"
|
|
|
|
|
+ title="乙方有效证件"
|
|
|
|
|
+ description="乙方:有效身份证件复印件(正反面复印)及户口本复印件(户主页和本人页)"
|
|
|
|
|
+ />
|
|
|
<!-- 附件13:乙方监护人(丙方)身份证、户口本复印件,使用 DocumentAttachmentBody -->
|
|
<!-- 附件13:乙方监护人(丙方)身份证、户口本复印件,使用 DocumentAttachmentBody -->
|
|
|
- <DocumentAttachmentBody v-else-if="attach.no === 13" v-model="guardianPartyBForm" :is-text-mode="true" title="乙方监护人(丙方)身份证、户口本复印件" description="丙方:(系自然人的)有效身份证件复印件(正反面复印)及户口本复印件(户主页和本人页);(系单位的)的有效注册登登记材料复印件(加盖公章)、法定代表人/负责人及联系人的身份证件复印件(身份证件需正反面复印)" />
|
|
|
|
|
|
|
+ <DocumentAttachmentBody
|
|
|
|
|
+ v-else-if="attach.no === 13"
|
|
|
|
|
+ v-model="guardianPartyBForm"
|
|
|
|
|
+ :is-text-mode="true"
|
|
|
|
|
+ title="乙方监护人(丙方)身份证、户口本复印件"
|
|
|
|
|
+ description="丙方:(系自然人的)有效身份证件复印件(正反面复印)及户口本复印件(户主页和本人页);(系单位的)的有效注册登登记材料复印件(加盖公章)、法定代表人/负责人及联系人的身份证件复印件(身份证件需正反面复印)"
|
|
|
|
|
+ />
|
|
|
<!-- 附件14:甲方登记证书及民政部门备案回执,使用 DocumentAttachmentBody -->
|
|
<!-- 附件14:甲方登记证书及民政部门备案回执,使用 DocumentAttachmentBody -->
|
|
|
- <DocumentAttachmentBody v-else-if="attach.no === 14" v-model="registrationCertificateForm" :is-text-mode="true" description="甲方登记证书及民政部门备案回执" />
|
|
|
|
|
|
|
+ <DocumentAttachmentBody
|
|
|
|
|
+ v-else-if="attach.no === 14"
|
|
|
|
|
+ v-model="registrationCertificateForm"
|
|
|
|
|
+ :is-text-mode="true"
|
|
|
|
|
+ description="甲方登记证书及民政部门备案回执"
|
|
|
|
|
+ />
|
|
|
<!-- 附件15:老年人能力综合评估结果,使用 DocumentAttachmentBody -->
|
|
<!-- 附件15:老年人能力综合评估结果,使用 DocumentAttachmentBody -->
|
|
|
- <DocumentAttachmentBody v-else-if="attach.no === 15" v-model="comprehensiveAssessmentForm" :is-text-mode="true" title="老年人能力综合评估结果" />
|
|
|
|
|
|
|
+ <DocumentAttachmentBody
|
|
|
|
|
+ v-else-if="attach.no === 15"
|
|
|
|
|
+ v-model="comprehensiveAssessmentForm"
|
|
|
|
|
+ :is-text-mode="true"
|
|
|
|
|
+ title="老年人能力综合评估结果"
|
|
|
|
|
+ />
|
|
|
<!-- 附件16:首次服务项目确认表,使用 FirstServiceProjectConfirmationBody -->
|
|
<!-- 附件16:首次服务项目确认表,使用 FirstServiceProjectConfirmationBody -->
|
|
|
- <FirstServiceProjectConfirmationBody v-else-if="attach.no === 16" v-model="firstServiceForm" :is-text-mode="true" />
|
|
|
|
|
|
|
+ <FirstServiceProjectConfirmationBody
|
|
|
|
|
+ v-else-if="attach.no === 16"
|
|
|
|
|
+ v-model="firstServiceForm"
|
|
|
|
|
+ :is-text-mode="true"
|
|
|
|
|
+ />
|
|
|
<!-- 附件17:变更事项确认表,使用 ChangeConfirmationFormBody -->
|
|
<!-- 附件17:变更事项确认表,使用 ChangeConfirmationFormBody -->
|
|
|
- <ChangeConfirmationFormBody v-else-if="attach.no === 17" v-model="changeConfirmForm" :is-text-mode="true" />
|
|
|
|
|
|
|
+ <ChangeConfirmationFormBody
|
|
|
|
|
+ v-else-if="attach.no === 17"
|
|
|
|
|
+ v-model="changeConfirmForm"
|
|
|
|
|
+ :is-text-mode="true"
|
|
|
|
|
+ />
|
|
|
|
|
|
|
|
<!-- 其他附件:展示标题和信息 -->
|
|
<!-- 其他附件:展示标题和信息 -->
|
|
|
<div v-else class="a4-page">
|
|
<div v-else class="a4-page">
|
|
@@ -689,7 +868,10 @@ const renderAttachmentContent = (key: string) => {
|
|
|
<div class="print-attachment-info">
|
|
<div class="print-attachment-info">
|
|
|
<p><strong>名称:</strong>{{ renderAttachmentContent(`attach_${attach.no}`) }}</p>
|
|
<p><strong>名称:</strong>{{ renderAttachmentContent(`attach_${attach.no}`) }}</p>
|
|
|
<p><strong>版本:</strong>{{ attachments[`attach_${attach.no}`]?.version || '-' }}</p>
|
|
<p><strong>版本:</strong>{{ attachments[`attach_${attach.no}`]?.version || '-' }}</p>
|
|
|
- <p><strong>日期:</strong>{{ attachments[`attach_${attach.no}`]?.createTime || '-' }}</p>
|
|
|
|
|
|
|
+ <p
|
|
|
|
|
+ ><strong>日期:</strong
|
|
|
|
|
+ >{{ attachments[`attach_${attach.no}`]?.createTime || '-' }}</p
|
|
|
|
|
+ >
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|