Showing
1 changed file
with
48 additions
and
14 deletions
| 1 | <!-- | 1 | <!-- |
| 2 | * @Date: 2024-01-16 10:06:47 | 2 | * @Date: 2024-01-16 10:06:47 |
| 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com | 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com |
| 4 | - * @LastEditTime: 2024-01-25 16:26:37 | 4 | + * @LastEditTime: 2024-01-25 18:43:51 |
| 5 | * @FilePath: /xysBooking/src/components/qrCode.vue | 5 | * @FilePath: /xysBooking/src/components/qrCode.vue |
| 6 | * @Description: 预约码卡组件 | 6 | * @Description: 预约码卡组件 |
| 7 | --> | 7 | --> |
| ... | @@ -13,7 +13,6 @@ | ... | @@ -13,7 +13,6 @@ |
| 13 | <div :class="[formatStatus(props.status).key, 'status']">{{ formatStatus(props.status).value }}</div> | 13 | <div :class="[formatStatus(props.status).key, 'status']">{{ formatStatus(props.status).value }}</div> |
| 14 | </div> | 14 | </div> |
| 15 | <div class="user-info">{{ userinfo.name }} {{ userinfo.id }}</div> | 15 | <div class="user-info">{{ userinfo.name }} {{ userinfo.id }}</div> |
| 16 | - <div style="color: red; margin-bottom: 0.5rem;">{{ userinfo.datetime }}</div> | ||
| 17 | <div class="user-qrcode"> | 16 | <div class="user-qrcode"> |
| 18 | <div class="left" @click="prevCode"> | 17 | <div class="left" @click="prevCode"> |
| 19 | <img src="https://cdn.ipadbiz.cn/xys/booking/%E5%B7%A6@2x.png"> | 18 | <img src="https://cdn.ipadbiz.cn/xys/booking/%E5%B7%A6@2x.png"> |
| ... | @@ -28,23 +27,28 @@ | ... | @@ -28,23 +27,28 @@ |
| 28 | <img src="https://cdn.ipadbiz.cn/xys/booking/%E5%8F%B3@2x.png"> | 27 | <img src="https://cdn.ipadbiz.cn/xys/booking/%E5%8F%B3@2x.png"> |
| 29 | </div> | 28 | </div> |
| 30 | </div> | 29 | </div> |
| 31 | - <div class="refresh" @click="refreshBtn"> | 30 | + <!-- <div class="refresh" @click="refreshBtn"> |
| 32 | <img src="https://cdn.ipadbiz.cn/xys/booking/%E5%88%B7%E6%96%B0@2x.png"> <div>刷新</div> | 31 | <img src="https://cdn.ipadbiz.cn/xys/booking/%E5%88%B7%E6%96%B0@2x.png"> <div>刷新</div> |
| 33 | - </div> | 32 | + </div> --> |
| 33 | + <div style="color: red; margin-top: 1rem;">{{ userinfo.datetime }}</div> | ||
| 34 | </div> | 34 | </div> |
| 35 | <div class="user-list"> | 35 | <div class="user-list"> |
| 36 | <div | 36 | <div |
| 37 | @click="selectUser(index)" | 37 | @click="selectUser(index)" |
| 38 | v-for="(item, index) in userList" | 38 | v-for="(item, index) in userList" |
| 39 | :key="index" | 39 | :key="index" |
| 40 | - :class="['user-item', select_index === index ? 'checked' : '']"> | 40 | + :class="[ |
| 41 | + 'user-item', | ||
| 42 | + select_index === index ? 'checked' : '', | ||
| 43 | + userList.length > 1 && item.sort ? 'border' : '', | ||
| 44 | + ]"> | ||
| 41 | {{ item.name }} | 45 | {{ item.name }} |
| 42 | </div> | 46 | </div> |
| 43 | </div> | 47 | </div> |
| 44 | </div> | 48 | </div> |
| 45 | <div v-else class="no-qrcode"> | 49 | <div v-else class="no-qrcode"> |
| 46 | <img src="https://cdn.ipadbiz.cn/xys/booking/%E6%9A%82%E6%97%A0@2x.png" style="width: 10rem;"> | 50 | <img src="https://cdn.ipadbiz.cn/xys/booking/%E6%9A%82%E6%97%A0@2x.png" style="width: 10rem;"> |
| 47 | - <div class="no-qrcode-title">您还没有预约过参观</div> | 51 | + <div class="no-qrcode-title">您还没有预约过今天参观</div> |
| 48 | </div> | 52 | </div> |
| 49 | </div> | 53 | </div> |
| 50 | </template> | 54 | </template> |
| ... | @@ -143,12 +147,12 @@ const STATUS_CODE = { | ... | @@ -143,12 +147,12 @@ const STATUS_CODE = { |
| 143 | USED: '7' | 147 | USED: '7' |
| 144 | }; | 148 | }; |
| 145 | 149 | ||
| 146 | -const refreshBtn = async () => { | 150 | +// const refreshBtn = async () => { |
| 147 | - const { code, data } = await qrcodeStatusAPI({ qr_code: userList.value[select_index.value].qr_code }); | 151 | +// const { code, data } = await qrcodeStatusAPI({ qr_code: userList.value[select_index.value].qr_code }); |
| 148 | - if (code) { | 152 | +// if (code) { |
| 149 | - useStatus.value = data.status; | 153 | +// useStatus.value = data.status; |
| 150 | - } | 154 | +// } |
| 151 | -} | 155 | +// } |
| 152 | 156 | ||
| 153 | const formatStatus = (status) => { | 157 | const formatStatus = (status) => { |
| 154 | switch (status) { | 158 | switch (status) { |
| ... | @@ -176,6 +180,20 @@ const selectUser = (index) => { | ... | @@ -176,6 +180,20 @@ const selectUser = (index) => { |
| 176 | 180 | ||
| 177 | const pay_id = $route.query.pay_id; | 181 | const pay_id = $route.query.pay_id; |
| 178 | 182 | ||
| 183 | +const formatGroup = (data) => { | ||
| 184 | + // 在每个相同 pay_id 组的最后一个数据项中添加字段 | ||
| 185 | + let lastPayId = null; | ||
| 186 | + for (let i = 0; i < data.length; i++) { | ||
| 187 | + if (data[i].pay_id !== lastPayId) { | ||
| 188 | + data[i].sort = 1; | ||
| 189 | + lastPayId = data[i].pay_id; | ||
| 190 | + } else { | ||
| 191 | + data[i].sort = 0; | ||
| 192 | + } | ||
| 193 | + } | ||
| 194 | + return data; | ||
| 195 | +} | ||
| 196 | + | ||
| 179 | onMounted(async () => { | 197 | onMounted(async () => { |
| 180 | if (!props.type) { | 198 | if (!props.type) { |
| 181 | const { code, data } = await qrcodeListAPI(); | 199 | const { code, data } = await qrcodeListAPI(); |
| ... | @@ -188,13 +206,16 @@ onMounted(async () => { | ... | @@ -188,13 +206,16 @@ onMounted(async () => { |
| 188 | let end_time = item.end_time.slice(0, -3); | 206 | let end_time = item.end_time.slice(0, -3); |
| 189 | let str = begin_time + ' ' + end_time; | 207 | let str = begin_time + ' ' + end_time; |
| 190 | // | 208 | // |
| 191 | - item.datetime = `${str.split(' ')[0]} ${str.split(' ')[1]}-${str.split(' ')[3]}` | 209 | + item.datetime = `${str.split(' ')[0]} ${str.split(' ')[1]}-${str.split(' ')[3]}`; |
| 210 | + item.sort = 0; | ||
| 192 | }); | 211 | }); |
| 193 | const { code: status_code, data: status_data } = await qrcodeStatusAPI({ qr_code: data[select_index.value]?.qr_code }); | 212 | const { code: status_code, data: status_data } = await qrcodeStatusAPI({ qr_code: data[select_index.value]?.qr_code }); |
| 194 | if (status_code) { | 213 | if (status_code) { |
| 195 | useStatus.value = status_data.status; | 214 | useStatus.value = status_data.status; |
| 196 | // 剔除qr_code为空的二维码 | 215 | // 剔除qr_code为空的二维码 |
| 197 | userList.value = data.filter(item => item.qr_code !== ''); | 216 | userList.value = data.filter(item => item.qr_code !== ''); |
| 217 | + // TAG: 预约码入口的才需要分组 | ||
| 218 | + userList.value = formatGroup(userList.value); | ||
| 198 | } | 219 | } |
| 199 | } | 220 | } |
| 200 | } else { | 221 | } else { |
| ... | @@ -203,6 +224,7 @@ onMounted(async () => { | ... | @@ -203,6 +224,7 @@ onMounted(async () => { |
| 203 | data.forEach(item => { | 224 | data.forEach(item => { |
| 204 | // 生成二维码地址 | 225 | // 生成二维码地址 |
| 205 | item.qr_code_url = 'http://oa.onwall.cn/admin?m=srv&a=get_qrcode&key=' + item.qr_code; | 226 | item.qr_code_url = 'http://oa.onwall.cn/admin?m=srv&a=get_qrcode&key=' + item.qr_code; |
| 227 | + item.sort = 0; | ||
| 206 | }); | 228 | }); |
| 207 | const { code: status_code, data: status_data } = await qrcodeStatusAPI({ qr_code: data[select_index.value]?.qr_code }); | 229 | const { code: status_code, data: status_data } = await qrcodeStatusAPI({ qr_code: data[select_index.value]?.qr_code }); |
| 208 | if (status_code) { | 230 | if (status_code) { |
| ... | @@ -217,7 +239,7 @@ onMounted(async () => { | ... | @@ -217,7 +239,7 @@ onMounted(async () => { |
| 217 | // 定义轮询函数 | 239 | // 定义轮询函数 |
| 218 | const poll = async () => { | 240 | const poll = async () => { |
| 219 | // 二维码未使用不停轮询接口 | 241 | // 二维码未使用不停轮询接口 |
| 220 | - if (userList.value.length && (useStatus.value !== STATUS_CODE.CANCELED || useStatus === STATUS_CODE.USED)) { | 242 | + if (userList.value.length && useStatus.value === STATUS_CODE.SUCCESS) { |
| 221 | const { code, data } = await qrcodeStatusAPI({ qr_code: userList.value[select_index.value].qr_code }); | 243 | const { code, data } = await qrcodeStatusAPI({ qr_code: userList.value[select_index.value].qr_code }); |
| 222 | if (code) { | 244 | if (code) { |
| 223 | useStatus.value = data.status; | 245 | useStatus.value = data.status; |
| ... | @@ -334,6 +356,7 @@ onUnmounted(() => { | ... | @@ -334,6 +356,7 @@ onUnmounted(() => { |
| 334 | align-items: center; | 356 | align-items: center; |
| 335 | flex-wrap: wrap; | 357 | flex-wrap: wrap; |
| 336 | .user-item { | 358 | .user-item { |
| 359 | + position: relative; | ||
| 337 | padding: 0.25rem 0.5rem; | 360 | padding: 0.25rem 0.5rem; |
| 338 | border: 1px solid #A67939; | 361 | border: 1px solid #A67939; |
| 339 | margin: 0.25rem; | 362 | margin: 0.25rem; |
| ... | @@ -343,6 +366,17 @@ onUnmounted(() => { | ... | @@ -343,6 +366,17 @@ onUnmounted(() => { |
| 343 | color: #FFF; | 366 | color: #FFF; |
| 344 | background-color: #A67939; | 367 | background-color: #A67939; |
| 345 | } | 368 | } |
| 369 | + &.border { | ||
| 370 | + margin-right: 0.5rem; | ||
| 371 | + &::after { | ||
| 372 | + position: absolute; | ||
| 373 | + right: -0.5rem; | ||
| 374 | + top: calc(50% - 0.5rem); | ||
| 375 | + content: ''; | ||
| 376 | + height: 1rem; | ||
| 377 | + border-right: 1px solid #A67939; | ||
| 378 | + } | ||
| 379 | + } | ||
| 346 | } | 380 | } |
| 347 | } | 381 | } |
| 348 | 382 | ... | ... |
-
Please register or login to post a comment