Files
xh-medical-sign-web/patient-h5/src/views/consent/ConsentView.vue
T

86 lines
2.8 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<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>