hookehuyr

二维码页面删除刷新按钮,底部名称分组显示

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 }}&nbsp;{{ userinfo.id }}</div> 15 <div class="user-info">{{ userinfo.name }}&nbsp;{{ 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">&nbsp;<div>刷新</div> 31 <img src="https://cdn.ipadbiz.cn/xys/booking/%E5%88%B7%E6%96%B0@2x.png">&nbsp;<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
......