| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <view> |
| | | <wd-row> |
| | | <wd-col :span="21"> |
| | | <wd-search |
| | | v-model="searchKeyword" |
| | | placeholder="请è¾å
¥çç»åç§°" |
| | | placeholder-left |
| | | hide-cancel |
| | | @search="handleSearch" |
| | | @clear="handleClear" |
| | | ></wd-search> |
| | | </wd-col> |
| | | <wd-col :span="3"> |
| | | <view class="scan_box" @click="openScan"> |
| | | <wd-icon name="scan" size="24px" color="#0D867F"></wd-icon> |
| | | </view> |
| | | </wd-col> |
| | | </wd-row> |
| | | <wd-tabs v-model="tab" auto-line-width slidable="always" :map-num="patrolList.length"> |
| | | <wd-tab |
| | | v-for="(item, index) in patrolList" |
| | | :key="index" |
| | | :title="`${item.deviceModel}ï¼å¾
æ£æ¥${item.pendingNum}æ¡ï¼`" |
| | | class="tab_bg" |
| | | > |
| | | <ProductList |
| | | :key="searchKey" |
| | | :api="RoutingInspectionApi.getInspectListByPatrol" |
| | | :ProList="{ ...item, teamName: searchKeyword }" |
| | | /> |
| | | </wd-tab> |
| | | </wd-tabs> |
| | | <wd-toast /> |
| | | </view> |
| | | </template> |
| | | |
| | | <script lang="ts" setup> |
| | | import { ref, reactive, computed, onMounted, onUnmounted } from "vue"; |
| | | import { onShow, onHide } from "@dcloudio/uni-app"; |
| | | import ProductList from "./list/index.vue"; |
| | | import { useUserStore } from "@/store/modules/user"; |
| | | import reportApi from "@/api/work/report"; |
| | | import { useToast } from "wot-design-uni"; |
| | | import RoutingInspectionApi from "@/api/routingInspection/routingInspection"; |
| | | import { useScanCode } from "@/composables/useScanCode"; |
| | | |
| | | const userStore = useUserStore(); |
| | | const userInfo: any = computed(() => userStore.userInfo); |
| | | const toast = useToast(); |
| | | const tab = ref<number>(0); |
| | | const patrolList = ref<any[]>([]); // å·¡æ£è®¾å¤åè¡¨æ°æ® |
| | | const searchKeyword = ref<string>(""); // æç´¢å
³é®è¯ï¼çç»åç§°ï¼ |
| | | const searchKey = ref<number>(0); // ç¨äºå¼ºå¶å·æ°å表 |
| | | |
| | | // ä½¿ç¨æ«ç 管ç composableï¼å
¨å±çå¬å¨ï¼ä¸é页é¢åæ¢å
³éï¼ |
| | | const { deviceUid, deviceModel, hasScanned, displayText, loadFromCache, enableListener } = |
| | | useScanCode("scanIndex"); |
| | | |
| | | const handlePatrolData = (index: number, count: number) => { |
| | | // å¯ä»¥å¨è¿éæ´æ°ç¹å®å·¡æ£è®¾å¤çå¾
æ£æ¥æ°é |
| | | // ä¾å¦ï¼patrolList.value[index].pendingNum = count; |
| | | }; |
| | | |
| | | // å¤çæç´¢ |
| | | const handleSearch = (value: string) => { |
| | | console.log("æç´¢çç»:", value); |
| | | searchKey.value++; // æ´æ° key 强å¶å·æ°å表 |
| | | }; |
| | | |
| | | // å¤çæ¸
空æç´¢ |
| | | const handleClear = () => { |
| | | console.log("æ¸
空æç´¢"); |
| | | searchKeyword.value = ""; |
| | | searchKey.value++; // æ´æ° key 强å¶å·æ°å表 |
| | | }; |
| | | |
| | | const openScan = () => { |
| | | console.log("index.vue - ç¹å»æ«ç æé®ï¼å
¨å±æ«ç 模å¼ï¼æ éæå¨è§¦åï¼"); |
| | | // å
¨å±æ«ç 模å¼ä¸ï¼ç¡¬ä»¶æ«ç ä¼èªå¨è§¦åï¼æ éæå¨è°ç¨ |
| | | uni.showToast({ |
| | | title: "è¯·ä½¿ç¨æ«ç æªæ«æ", |
| | | icon: "none", |
| | | }); |
| | | }; |
| | | |
| | | // è·åå·¡æ£è®¾å¤å表 |
| | | const loadPatrolList = async () => { |
| | | try { |
| | | const { data } = await RoutingInspectionApi.getDeviceInspectListByPatrol({}); |
| | | if (data) { |
| | | patrolList.value = data; |
| | | } |
| | | } catch (error) { |
| | | toast.error("è·åå·¡æ£è®¾å¤å表失败"); |
| | | } |
| | | }; |
| | | |
| | | onMounted(() => { |
| | | // 页é¢å è½½æ¶è·åå·¡æ£è®¾å¤å表 |
| | | loadPatrolList(); |
| | | // å¯ç¨å
¨å±çå¬å¨ |
| | | enableListener(); |
| | | console.log("index.vue - onMounted"); |
| | | }); |
| | | |
| | | onShow(() => { |
| | | console.log("========== index.vue - onShow 触å =========="); |
| | | // 页颿¾ç¤ºæ¶éæ°å¯ç¨çå¬å¨ï¼ç¡®ä¿çå¬å¨ææï¼ |
| | | enableListener(); |
| | | // å è½½ç¼åï¼æ´æ°UIæ¾ç¤ºï¼ |
| | | loadFromCache(); |
| | | |
| | | // æ£æ¥æ¯å¦éè¦å·æ°å表ï¼åªææäº¤æååæå·æ°ï¼ |
| | | const needRefresh = uni.getStorageSync("needRefreshInspectionList"); |
| | | if (needRefresh) { |
| | | console.log("æ£æµå°éè¦å·æ°å表ï¼å¼å§å·æ°..."); |
| | | // éæ°å 载巡æ£è®¾å¤å表ï¼å·æ°å¾
æ£æ¥æ°éï¼ |
| | | loadPatrolList(); |
| | | // 强å¶å·æ° ProductList ç»ä»¶ |
| | | searchKey.value++; |
| | | // æ¸
é¤å·æ°æ è®° |
| | | uni.removeStorageSync("needRefreshInspectionList"); |
| | | } |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | ::v-deep .wd-search__block { |
| | | border-radius: unset; |
| | | } |
| | | .scan_box { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | width: 38px; |
| | | height: 38px; |
| | | padding: 6px; |
| | | background: #fff; |
| | | } |
| | | ::v-deep .wd-tabs__line { |
| | | background: #0d867f; |
| | | } |
| | | ::v-deep .wd-tabs__nav { |
| | | border-bottom: 1px #dddddd solid; |
| | | } |
| | | .tab_bg { |
| | | background: #f3f9f8; |
| | | } |
| | | |
| | | .icon_box { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | width: 20px; |
| | | height: 20px; |
| | | background: #e7f4ec99; |
| | | border-radius: 50%; |
| | | } |
| | | |
| | | .statistics_box { |
| | | margin: 15px; |
| | | } |
| | | </style> |