86 lines
2.8 KiB
Vue
86 lines
2.8 KiB
Vue
<script setup lang="ts">
|
||
/**
|
||
* 文书阅读页。
|
||
*
|
||
* 换成真实文书渲染(`DocumentPaper`):正文与「医生已填」结果都来自 context 接口。
|
||
* 原来那三段写死的假段落删掉了 —— 假文字既验不了渲染路径,也会让人误以为文书就长这样。
|
||
*
|
||
* 保留「阅读」与「签署」分成两步:手机上长文档与签名区分页更清晰,
|
||
* 且「已阅读」与「已签名」是两个独立的留痕动作。
|
||
*/
|
||
import { ref } from 'vue'
|
||
import { useRouter } from 'vue-router'
|
||
|
||
import DocumentPaper from '@/components/DocumentPaper.vue'
|
||
import { signingState, updatePatientAnswer, flushPatientAnswers } from '@/composables/useSignFlow'
|
||
|
||
const router = useRouter()
|
||
const hasRead = ref(false)
|
||
const errorMessage = ref('')
|
||
|
||
const continuing = ref(false)
|
||
|
||
async function continueToSigner() {
|
||
if (!hasRead.value) {
|
||
errorMessage.value = '请先确认已阅读文书内容。'
|
||
return
|
||
}
|
||
|
||
continuing.value = true
|
||
try {
|
||
await flushPatientAnswers()
|
||
signingState.consentAccepted = true
|
||
await router.push('/signer')
|
||
} catch (error) {
|
||
errorMessage.value = error instanceof Error ? error.message : '填写内容尚未保存'
|
||
} finally {
|
||
continuing.value = false
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<template>
|
||
<main class="mobile-shell">
|
||
<div class="mobile-stepper">
|
||
<span class="is-active">1 阅读</span>
|
||
<i />
|
||
<span>2 确认</span>
|
||
<i />
|
||
<span>3 完成</span>
|
||
</div>
|
||
|
||
<section class="mobile-heading">
|
||
<p class="eyebrow">知情同意书</p>
|
||
<h1>{{ signingState.documentTitle }}</h1>
|
||
<p>请完整阅读以下内容。如有疑问,请联系为您说明情况的医生。</p>
|
||
</section>
|
||
|
||
<DocumentPaper
|
||
:content-html="signingState.documentContentHtml"
|
||
:answers="signingState.staffAnswers"
|
||
:fields="signingState.form?.fields"
|
||
:patient-answers="signingState.form?.answers"
|
||
:interactive="Boolean(signingState.form?.editable) && !continuing && !signingState.formError"
|
||
@answer-change="updatePatientAnswer"
|
||
/>
|
||
|
||
<p v-if="signingState.formError" class="form-error">{{ signingState.formError }}</p>
|
||
<p v-else-if="signingState.formSaving">正在保存填写内容…</p>
|
||
<label class="check-row">
|
||
<input v-model="hasRead" type="checkbox" />
|
||
<span>我已阅读并理解上述内容,愿意继续确认签署人信息。</span>
|
||
</label>
|
||
<p v-if="errorMessage" class="form-error">{{ errorMessage }}</p>
|
||
|
||
<button
|
||
class="mobile-primary-button"
|
||
type="button"
|
||
:disabled="continuing || Boolean(signingState.formError)"
|
||
@click="continueToSigner"
|
||
>
|
||
下一步
|
||
</button>
|
||
<button class="mobile-text-button" type="button" @click="router.back()">返回</button>
|
||
</main>
|
||
</template>
|