123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- <template>
- <back-nav></back-nav>
- <div style="height: 20px"></div>
- <div id="question-body">
- <van-field v-model="answer.name" type="text" label="姓名" disabled />
- <van-field v-model="answer.idcard" type="text" label="身份证" disabled />
- <van-field v-model="answer.phone" type="tel" label="电话" placeholder="请输入手机号" />
- <van-field
- readonly
- clickable
- name="calendar"
- v-model="answer.date"
- label="就诊日期"
- placeholder="点击选择日期"
- @click="answer.showCalendar = true"
- />
- <van-calendar v-model:show="answer.showCalendar" :show-confirm="false" @confirm="onConfirmDate" />
- <div>
- <van-radio-group v-model="answer.temperature" direction="horizontal">
- 体温:
- <van-radio name="1">正常</van-radio>
- <van-radio name="2">发烧</van-radio>
- <van-field
- ref="mFocus"
- style="width: 80px"
- v-model="answer.feverNumber"
- type="number"
- :disabled="answer.temperature != 2"
- /> ℃
- </van-radio-group>
- </div>
- <van-field
- readonly
- clickable
- name="area"
- v-model="answer.address"
- label="住址地区"
- placeholder="点击选择省市区"
- @click="answer.showArea = true"
- />
- <van-popup v-model:show="answer.showArea" position="bottom">
- <van-area :area-list="areaList" value="430105" @confirm="onConfirmArea" @cancel="answer.showArea = false" />
- </van-popup>
- <div v-for="item in assessmentItems" :key="item.key">
- {{ item.label }}
- <div style="margin-top: 7px; margin-left: 10px">
- <van-radio-group v-model="answer['item' + item.key]" direction="vertical">
- <van-radio v-for="option in item.options" :key="option.key" :name="option.key" style="margin-top: 10px">
- <span :style="{ color: option.color }">{{ option.label }}</span>
- <van-checkbox-group v-model="answer.symptoms">
- <van-checkbox
- shape="square"
- v-for="child in option.children"
- :key="child.key"
- :name="child.key"
- style="margin-top: 5px"
- >{{ child.label }}</van-checkbox
- >
- </van-checkbox-group>
- </van-radio>
- </van-radio-group>
- </div>
- </div>
- <van-button @click="submit" type="primary" icon="passed" block>提交</van-button>
- </div>
- </template>
- <script>
- import { onMounted, reactive, ref, watchEffect } from 'vue'
- import { assessmentItems } from '../../../data/index'
- import { getDate } from '../../../utils/date'
- import { getPatientInfo, submitCovidAssessment } from '../../../api/assessments'
- import { validateCovid19Answer } from '../../../utils/validate'
- import { showDialog } from 'vant'
- import allArea from '../../../utils/area'
- import { useRouter } from 'vue-router'
- export default {
- name: 'Covid19Assessment',
- setup() {
- const areaList = allArea
- const answer = reactive({
- name: '',
- phone: '',
- idcard: '',
- symptoms: [],
- addrProvince: 430000,
- addrCity: 430100,
- addrDistrict: 430105,
- showCalendar: false,
- address: '湖南省/长沙市/开福区',
- showArea: false,
- showIdKeyboard: false,
- })
- const onConfirmArea = (values) => {
- answer.addrProvince = values[0].code
- answer.addrCity = values[1].code
- answer.addrDistrict = values[2].code
- answer.address = values
- .filter((item) => !!item)
- .map((item) => item.name)
- .join('/')
- answer.showArea = false
- }
- const onConfirmDate = (date) => {
- answer.date =
- date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + date.getDate()).slice(-2)
- answer.showCalendar = false
- }
- const onInputIdcard = (val) => {
- if (val === '清空') {
- setTimeout(() => {
- answer.idcard = ''
- })
- }
- }
- const from = ref('')
- const router = useRouter()
- const mFocus = ref(null)
- watchEffect(() => {
- if (answer.temperature === 2) {
- setTimeout(() => {
- mFocus.value.focus()
- }, 100)
- } else {
- answer.feverNumber = ''
- }
- })
- watchEffect(() => {
- if (answer.symptoms.length > 0) {
- answer.item5 = 51
- }
- })
- watchEffect(() => {
- if (answer.item5 === 52) {
- answer.symptoms = []
- }
- })
- const submit = () => {
- const message = validateCovid19Answer(answer)
- if (message === '') {
- submitCovidAssessment(answer).then((res) => {
- showDialog({
- title: '提示',
- message: '提交成功!',
- }).then(() => {
- router.go(-1)
- })
- })
- } else {
- showDialog({
- title: '提示',
- message: message,
- }).then(() => {
- if (message.startsWith('请先绑定')) {
- router.push('/myPatientIdCards')
- }
- })
- }
- }
- onMounted(() => {
- const patientId = router.currentRoute.value.params.patientId
- if (!patientId || patientId === ':patientId') {
- showDialog({
- message: '请先绑定就诊卡!',
- title: '提示',
- }).then(() => {
- router.push('/myPatientIdCards')
- })
- } else {
- from.value = router.currentRoute.value.params.from
- answer.patientId = patientId
- getPatientInfo(patientId).then((res) => {
- answer.name = res.name
- answer.phone = res.phone
- answer.idcard = res.idcard
- answer.date = getDate()
- })
- }
- })
- return {
- mFocus,
- areaList,
- onInputIdcard,
- answer,
- onConfirmArea,
- onConfirmDate,
- assessmentItems,
- submit,
- }
- },
- }
- </script>
- <style scoped>
- #question-body {
- padding: 0 20px 20px 20px;
- }
- #question-body > div {
- margin-bottom: 15px;
- }
- </style>
|