| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- <template>
- <window-size>
- <van-notice-bar left-icon="volume-o" text="可接种年龄为【18岁-70岁】之间。" />
- <van-grid direction="horizontal" :column-num="7">
- <van-grid-item v-for="item in oneWeekText" :key="item" :text="'周' + item" />
- </van-grid>
- <van-grid direction="horizontal" :column-num="7">
- <van-grid-item v-for="(item, index) in nextSevenDate" :key="index">
- <van-badge :content="hasSource(index)" :color="badgeColor(index)">
- <van-button
- :disabled="disabledBtn(index)"
- :type="getType(index)"
- size="small"
- round
- @click="handleClickDate(index)"
- >{{ item.date }}</van-button
- >
- </van-badge>
- </van-grid-item>
- </van-grid>
- <van-field v-model="vaccinate.vaccinateName" required label="疫苗名称" readonly />
- <van-field v-model="vaccinate.vaccinateFactory" required label="疫苗厂家" readonly />
- <van-field v-model="vaccinate.name" required type="text" label="姓名" placeholder="请输入姓名" />
- <van-field v-model="vaccinate.phone" required type="tel" label="电话" placeholder="请输入手机号" />
- <van-field v-model="vaccinate.socialNo" required type="tel" label="身份证" placeholder="请输入身份证号" />
- <van-field v-model="vaccinate.corpName" required type="text" label="工作单位" placeholder="请输入工作单位" />
- <van-field
- v-model="jobCategoryName"
- required
- label="工作性质"
- readonly
- @click="showPickJobCategory = true"
- placeholder="选择工作性质"
- ></van-field>
- <van-popup v-model:show="showPickJobCategory" position="bottom" :style="{ height: '50%' }">
- <van-picker
- title="工作性质"
- :columns="jobCategories"
- :columns-field-names="customFieldName"
- @confirm="confirmPickJobCategory"
- />
- </van-popup>
- <div style="height: 10px"></div>
- <van-button block type="primary" @click="submit" :disabled="disabledSubmit">提交预约</van-button>
- </window-size>
- </template>
- <script>
- import { computed, onMounted, reactive, ref } from 'vue'
- import router from '../../../router'
- import { getNextSevenDate, getOneWeekText } from '../../../utils/date'
- import {
- getNextSevenDaysSources,
- getPatientInfoAndJobCategories,
- submitVaccinateAppointment,
- } from '../../../api/covid-vaccinate'
- import { showDialog, showToast } from 'vant'
- import { isValidIdcard, isValidPhone } from '../../../utils/validate'
- export default {
- setup() {
- let patientId = router.currentRoute.value.params.patientId
- const vaccinateCode = router.currentRoute.value.params.vaccinateCode
- const vaccinateName = router.currentRoute.value.params.vaccinateName
- const vaccinateFactory = router.currentRoute.value.params.vaccinateFactory
- const currentIndex = ref(0)
- const oneWeekText = getOneWeekText()
- const nextSevenDate = getNextSevenDate()
- const nextSevenDaySources = ref([0, 0, 0, 0, 0, 0, 0])
- const getType = (index) => {
- return index === currentIndex.value ? 'primary' : 'default'
- }
- const hasSource = (index) => {
- return nextSevenDaySources.value[index] > 0 ? nextSevenDaySources.value[index] : '无'
- }
- const badgeColor = (index) => {
- return nextSevenDaySources.value[index] > 0 ? 'green' : 'red'
- }
- const disabledBtn = (index) => {
- return nextSevenDaySources.value[index] < 1
- }
- const disabledSubmit = computed(() => {
- return nextSevenDaySources.value[currentIndex.value] < 1
- })
- const handleClickDate = (index) => {
- currentIndex.value = index
- vaccinate.executeDate = nextSevenDate[index].fullDate
- }
- const vaccinateFactories = ref([])
- const showPickJobCategory = ref(false)
- const currentDate = ref(new Date())
- const formatter = (type, val) => {
- if (type === 'year') {
- return val + '年'
- }
- if (type === 'month') {
- return val + '月'
- }
- if (type === 'day') {
- return val + '日'
- }
- return val
- }
- const jobCategoryName = ref('')
- const jobCategories = ref([])
- const customFieldName = {
- code: 'code',
- text: 'name',
- }
- const confirmPickJobCategory = (val) => {
- vaccinate.jobCategory = val.selectedOptions[0].code
- jobCategoryName.value = val.selectedOptions[0].name
- showPickJobCategory.value = false
- }
- const vaccinate = reactive({
- vaccinateCode: vaccinateCode,
- vaccinateName: vaccinateName,
- vaccinateFactory: vaccinateFactory,
- patientId: '',
- name: '',
- phone: '',
- socialNo: '',
- corpName: '',
- jobCategory: '',
- executeDate: '',
- })
- const submit = () => {
- if (!vaccinate.vaccinateCode || !vaccinate.vaccinateFactory) {
- showToast({
- message: '请选择疫苗厂家!',
- position: 'top',
- })
- return
- }
- if (!vaccinate.name) {
- showToast({
- message: '请输入姓名!',
- position: 'top',
- })
- return
- }
- if (!isValidPhone(vaccinate.phone)) {
- showToast({
- message: '请输入正确的手机号码',
- position: 'top',
- })
- return
- }
- if (!isValidIdcard(vaccinate.socialNo)) {
- showToast({
- message: '请输入正确的身份证号码',
- position: 'top',
- })
- return
- }
- if (!vaccinate.corpName) {
- showToast({
- message: '请输入工作单位,没有工作单位请填‘无’',
- position: 'top',
- duration: 3000,
- })
- return
- }
- if (!vaccinate.jobCategory) {
- showToast({
- message: '请选择工作性质,如不确定请选‘其他人员’,如无工作请选择‘家务及待业人员’',
- position: 'top',
- duration: 3000,
- })
- return
- }
- if (!vaccinate.executeDate) {
- showToast({
- message: '请选择接种日期',
- position: 'top',
- })
- return
- }
- submitVaccinateAppointment(vaccinate).then((res) => {
- showDialog({
- title: '提示',
- message: res,
- }).then(() => {
- router.push('/hospitalService')
- })
- })
- }
- onMounted(() => {
- if (!patientId) {
- patientId = ''
- }
- getPatientInfoAndJobCategories(patientId).then((res2) => {
- vaccinate.patientId = res2.patientId
- vaccinate.name = res2.name
- vaccinate.phone = res2.phone
- vaccinate.socialNo = res2.socialNo
- jobCategories.value = res2.jobCategories
- jobCategories.value.forEach(item => {
- item.value = item.code
- })
- getNextSevenDaysSources(vaccinate.vaccinateCode).then((res3) => {
- nextSevenDaySources.value = res3
- for (let i = 0; i < 7; i++) {
- if (res3[i] > 0) {
- handleClickDate(i)
- break
- }
- }
- })
- })
- })
- return {
- oneWeekText,
- nextSevenDate,
- getType,
- hasSource,
- badgeColor,
- disabledBtn,
- handleClickDate,
- disabledSubmit,
- vaccinate,
- vaccinateFactories,
- currentDate,
- formatter,
- showPickJobCategory,
- jobCategories,
- confirmPickJobCategory,
- customFieldName,
- jobCategoryName,
- submit,
- }
- },
- }
- </script>
|