|
@@ -1,129 +1,143 @@
|
|
<template>
|
|
<template>
|
|
<div class="reservation tab-page position-relative p-16">
|
|
<div class="reservation tab-page position-relative p-16">
|
|
- <van-cell-group inset>
|
|
|
|
- <van-field
|
|
|
|
- v-model="params.aaa.text"
|
|
|
|
- name="城市"
|
|
|
|
- label="城市"
|
|
|
|
- placeholder=""
|
|
|
|
- input-align="right"
|
|
|
|
- is-link
|
|
|
|
- readonly
|
|
|
|
- :rules="[{ required: true, message: '请选择城市' }]"
|
|
|
|
- @click="cityStates.show = true"
|
|
|
|
- />
|
|
|
|
- <van-field
|
|
|
|
- v-model="params.bbb.text"
|
|
|
|
- name="教学点"
|
|
|
|
- label="教学点"
|
|
|
|
- placeholder=""
|
|
|
|
- input-align="right"
|
|
|
|
- is-link
|
|
|
|
- readonly
|
|
|
|
- :rules="[{ required: true, message: '请选择教学点' }]"
|
|
|
|
- @click="teachStates.show = true"
|
|
|
|
- :disabled="!params.aaa.value"
|
|
|
|
- />
|
|
|
|
- <van-field
|
|
|
|
- v-model="params.examSiteId.text"
|
|
|
|
- name="考点"
|
|
|
|
- label="考点"
|
|
|
|
- placeholder=""
|
|
|
|
- input-align="right"
|
|
|
|
- is-link
|
|
|
|
- readonly
|
|
|
|
- :rules="[{ required: true, message: '请选择考点' }]"
|
|
|
|
- @click="toChooseSite"
|
|
|
|
- :disabled="!params.bbb.value"
|
|
|
|
- />
|
|
|
|
- <van-field
|
|
|
|
- v-model="params.date.text"
|
|
|
|
- name="日期"
|
|
|
|
- label="日期"
|
|
|
|
- placeholder=""
|
|
|
|
- input-align="right"
|
|
|
|
- is-link
|
|
|
|
- readonly
|
|
|
|
- :rules="[{ required: true, message: '请选择日期' }]"
|
|
|
|
- @click="dateStates.show = true"
|
|
|
|
- />
|
|
|
|
- </van-cell-group>
|
|
|
|
|
|
+ <template v-if="dateLoading"></template>
|
|
|
|
+ <template v-else-if="dateStates.columns.length">
|
|
|
|
+ <van-cell-group inset>
|
|
|
|
+ <van-field
|
|
|
|
+ v-model="params.aaa.text"
|
|
|
|
+ name="城市"
|
|
|
|
+ label="城市"
|
|
|
|
+ placeholder=""
|
|
|
|
+ input-align="right"
|
|
|
|
+ is-link
|
|
|
|
+ readonly
|
|
|
|
+ :rules="[{ required: true, message: '请选择城市' }]"
|
|
|
|
+ @click="cityStates.show = true"
|
|
|
|
+ />
|
|
|
|
+ <van-field
|
|
|
|
+ v-model="params.bbb.text"
|
|
|
|
+ name="教学点"
|
|
|
|
+ label="教学点"
|
|
|
|
+ placeholder=""
|
|
|
|
+ input-align="right"
|
|
|
|
+ is-link
|
|
|
|
+ readonly
|
|
|
|
+ :rules="[{ required: true, message: '请选择教学点' }]"
|
|
|
|
+ @click="teachStates.show = true"
|
|
|
|
+ :disabled="!params.aaa.value"
|
|
|
|
+ />
|
|
|
|
+ <van-field
|
|
|
|
+ v-model="params.examSiteId.text"
|
|
|
|
+ name="考点"
|
|
|
|
+ label="考点"
|
|
|
|
+ placeholder=""
|
|
|
|
+ input-align="right"
|
|
|
|
+ is-link
|
|
|
|
+ readonly
|
|
|
|
+ :rules="[{ required: true, message: '请选择考点' }]"
|
|
|
|
+ @click="toChooseSite"
|
|
|
|
+ :disabled="!params.bbb.value"
|
|
|
|
+ />
|
|
|
|
+ <van-field
|
|
|
|
+ v-model="params.date.text"
|
|
|
|
+ name="日期"
|
|
|
|
+ label="日期"
|
|
|
|
+ placeholder=""
|
|
|
|
+ input-align="right"
|
|
|
|
+ is-link
|
|
|
|
+ readonly
|
|
|
|
+ :rules="[{ required: true, message: '请选择日期' }]"
|
|
|
|
+ @click="dateStates.show = true"
|
|
|
|
+ />
|
|
|
|
+ </van-cell-group>
|
|
|
|
|
|
- <van-popup v-model:show="cityStates.show" round position="bottom">
|
|
|
|
- <van-picker
|
|
|
|
- v-model="cityStates.value"
|
|
|
|
- :columns="cityStates.columns"
|
|
|
|
- @cancel="cityStates.show = false"
|
|
|
|
- @confirm="cityStates.onConfirm"
|
|
|
|
- />
|
|
|
|
- </van-popup>
|
|
|
|
- <van-popup v-model:show="teachStates.show" round position="bottom">
|
|
|
|
- <van-picker
|
|
|
|
- v-model="teachStates.value"
|
|
|
|
- :columns="teachStates.columns"
|
|
|
|
- @cancel="teachStates.show = false"
|
|
|
|
- @confirm="teachStates.onConfirm"
|
|
|
|
- />
|
|
|
|
- </van-popup>
|
|
|
|
- <van-popup v-model:show="dateStates.show" round position="bottom">
|
|
|
|
- <van-picker
|
|
|
|
- v-model="dateStates.value"
|
|
|
|
- :columns="dateStates.columns"
|
|
|
|
- @cancel="dateStates.show = false"
|
|
|
|
- @confirm="dateStates.onConfirm"
|
|
|
|
- />
|
|
|
|
- </van-popup>
|
|
|
|
|
|
+ <van-popup v-model:show="cityStates.show" round position="bottom">
|
|
|
|
+ <van-picker
|
|
|
|
+ v-model="cityStates.value"
|
|
|
|
+ :columns="cityStates.columns"
|
|
|
|
+ @cancel="cityStates.show = false"
|
|
|
|
+ @confirm="cityStates.onConfirm"
|
|
|
|
+ />
|
|
|
|
+ </van-popup>
|
|
|
|
+ <van-popup v-model:show="teachStates.show" round position="bottom">
|
|
|
|
+ <van-picker
|
|
|
|
+ v-model="teachStates.value"
|
|
|
|
+ :columns="teachStates.columns"
|
|
|
|
+ @cancel="teachStates.show = false"
|
|
|
|
+ @confirm="teachStates.onConfirm"
|
|
|
|
+ />
|
|
|
|
+ </van-popup>
|
|
|
|
+ <van-popup v-model:show="dateStates.show" round position="bottom">
|
|
|
|
+ <van-picker
|
|
|
|
+ v-model="dateStates.value"
|
|
|
|
+ :columns="dateStates.columns"
|
|
|
|
+ @cancel="dateStates.show = false"
|
|
|
|
+ @confirm="dateStates.onConfirm"
|
|
|
|
+ />
|
|
|
|
+ </van-popup>
|
|
|
|
|
|
- <van-popup
|
|
|
|
- v-model:show="showSites"
|
|
|
|
- round
|
|
|
|
- position="bottom"
|
|
|
|
- safe-area-inset-bottom
|
|
|
|
- >
|
|
|
|
- <ChooseSite
|
|
|
|
- :site-list="siteList"
|
|
|
|
- @site-confirm="siteConfirm"
|
|
|
|
- ></ChooseSite>
|
|
|
|
- </van-popup>
|
|
|
|
|
|
+ <van-popup
|
|
|
|
+ v-model:show="showSites"
|
|
|
|
+ round
|
|
|
|
+ position="bottom"
|
|
|
|
+ safe-area-inset-bottom
|
|
|
|
+ >
|
|
|
|
+ <ChooseSite
|
|
|
|
+ :site-list="siteList"
|
|
|
|
+ @site-confirm="siteConfirm"
|
|
|
|
+ ></ChooseSite>
|
|
|
|
+ </van-popup>
|
|
|
|
|
|
- <div class="result-box" v-if="resultList.length">
|
|
|
|
- <div class="tip">选择预约时段</div>
|
|
|
|
- <div class="sub-tip">
|
|
|
|
- <van-icon name="warning" color="#FF7D00" size="20" />
|
|
|
|
- <span class="txt">我的剩余可约时段:{{ unApplyNumber }}</span>
|
|
|
|
- </div>
|
|
|
|
- <div class="list-box">
|
|
|
|
- <div
|
|
|
|
- v-for="item in resultList"
|
|
|
|
- :key="item.timePeriodId"
|
|
|
|
- class="flex-h-between list-item"
|
|
|
|
- >
|
|
|
|
- <div class="left d-flex align-items-center">
|
|
|
|
- <span class="s1"
|
|
|
|
- >{{ $filters.dateFormat(item.timePeriodStart, "HH:mm") }}-{{
|
|
|
|
- $filters.dateFormat(item.timePeriodEnd, "HH:mm")
|
|
|
|
- }}</span
|
|
|
|
|
|
+ <div class="result-box" v-if="resultList.length">
|
|
|
|
+ <div class="tip">选择预约时段</div>
|
|
|
|
+ <div class="sub-tip">
|
|
|
|
+ <van-icon name="warning" color="#FF7D00" size="20" />
|
|
|
|
+ <span class="txt">我的剩余可约时段:{{ unApplyNumber }}</span>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="list-box">
|
|
|
|
+ <div
|
|
|
|
+ v-for="item in resultList"
|
|
|
|
+ :key="item.timePeriodId"
|
|
|
|
+ class="flex-h-between list-item"
|
|
|
|
+ >
|
|
|
|
+ <div class="left d-flex align-items-center">
|
|
|
|
+ <span class="s1"
|
|
|
|
+ >{{ $filters.dateFormat(item.timePeriodStart, "HH:mm") }}-{{
|
|
|
|
+ $filters.dateFormat(item.timePeriodEnd, "HH:mm")
|
|
|
|
+ }}</span
|
|
|
|
+ >
|
|
|
|
+ <span class="s2">|</span>
|
|
|
|
+ <span class="s3">剩余{{ item.availableCount }}</span>
|
|
|
|
+ </div>
|
|
|
|
+ <van-button
|
|
|
|
+ v-if="item.status === 'AVAILABLE'"
|
|
|
|
+ type="success"
|
|
|
|
+ size="small"
|
|
|
|
+ @click="reservationHandle(item)"
|
|
|
|
+ >预约</van-button
|
|
>
|
|
>
|
|
- <span class="s2">|</span>
|
|
|
|
- <span class="s3">剩余{{ item.availableCount }}</span>
|
|
|
|
|
|
+ <span class="full" v-else-if="item.status === 'FULL'">约满</span>
|
|
|
|
+ <span class="stop" v-else>停止</span>
|
|
</div>
|
|
</div>
|
|
- <van-button
|
|
|
|
- v-if="item.status === 'AVAILABLE'"
|
|
|
|
- type="success"
|
|
|
|
- size="small"
|
|
|
|
- @click="reservationHandle(item)"
|
|
|
|
- >预约</van-button
|
|
|
|
- >
|
|
|
|
- <span class="full" v-else-if="item.status === 'FULL'">约满</span>
|
|
|
|
- <span class="stop" v-else>停止</span>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
+ </template>
|
|
|
|
+ <div class="vh-100 flex-h-center" v-else>
|
|
|
|
+ <div>
|
|
|
|
+ <NoData>
|
|
|
|
+ <template #img>
|
|
|
|
+ <img src="../../assets/imgs/no_data.png" />
|
|
|
|
+ </template>
|
|
|
|
+ 当前无考试预约时段</NoData
|
|
|
|
+ >
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
- <router-view v-slot="{ Component }">
|
|
|
|
|
|
+
|
|
|
|
+ <!-- <router-view v-slot="{ Component }">
|
|
<transition name="zoom-fade" mode="out-in" appear>
|
|
<transition name="zoom-fade" mode="out-in" appear>
|
|
<component :is="Component" />
|
|
<component :is="Component" />
|
|
</transition>
|
|
</transition>
|
|
- </router-view>
|
|
|
|
|
|
+ </router-view> -->
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
<script name="Reservation" setup>
|
|
<script name="Reservation" setup>
|
|
@@ -220,13 +234,19 @@ function _getCategoryList() {
|
|
}
|
|
}
|
|
_getCategoryList();
|
|
_getCategoryList();
|
|
|
|
|
|
|
|
+const dateLoading = ref(false);
|
|
function _getDateList() {
|
|
function _getDateList() {
|
|
- getDateList().then((res) => {
|
|
|
|
- dateStates.columns = (res || []).map((item) => ({
|
|
|
|
- value: item,
|
|
|
|
- text: `${item.slice(0, 4)}-${item.slice(4, 6)}-${item.slice(6)}`,
|
|
|
|
- }));
|
|
|
|
- });
|
|
|
|
|
|
+ dateLoading.value = true;
|
|
|
|
+ getDateList()
|
|
|
|
+ .then((res) => {
|
|
|
|
+ dateStates.columns = (res || []).map((item) => ({
|
|
|
|
+ value: item,
|
|
|
|
+ text: `${item.slice(0, 4)}-${item.slice(4, 6)}-${item.slice(6)}`,
|
|
|
|
+ }));
|
|
|
|
+ })
|
|
|
|
+ .finally(() => {
|
|
|
|
+ dateLoading.value = false;
|
|
|
|
+ });
|
|
}
|
|
}
|
|
_getDateList();
|
|
_getDateList();
|
|
|
|
|
|
@@ -243,7 +263,7 @@ function _getReservationList() {
|
|
|
|
|
|
function reservationHandle(item) {
|
|
function reservationHandle(item) {
|
|
showConfirmDialog({
|
|
showConfirmDialog({
|
|
- // title: '标题',
|
|
|
|
|
|
+ title: "是否确认预约?",
|
|
message: `${params.date.text} ${filters.dateFormat(
|
|
message: `${params.date.text} ${filters.dateFormat(
|
|
item.timePeriodStart,
|
|
item.timePeriodStart,
|
|
"HH:mm"
|
|
"HH:mm"
|
|
@@ -252,7 +272,9 @@ function reservationHandle(item) {
|
|
reservationSave({
|
|
reservationSave({
|
|
examSiteId: params.examSiteId.value,
|
|
examSiteId: params.examSiteId.value,
|
|
timePeriodId: item.timePeriodId,
|
|
timePeriodId: item.timePeriodId,
|
|
- }).then(() => {});
|
|
|
|
|
|
+ }).then(() => {
|
|
|
|
+ showSuccessToast("预约成功");
|
|
|
|
+ });
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
|