| | |
| | | <view> |
| | | <wd-row> |
| | | <wd-col :span="21"> |
| | | <wd-search placeholder-left hide-cancel></wd-search> |
| | | <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"> |
| | |
| | | :title="`${item.deviceModel}(待检查${item.pendingNum}条)`" |
| | | class="tab_bg" |
| | | > |
| | | <ProductList :api="RoutingInspectionApi.getInspectListByPatrol" :ProList="item" /> |
| | | <ProductList |
| | | :key="searchKey" |
| | | :api="RoutingInspectionApi.getInspectListByPatrol" |
| | | :ProList="{ ...item, teamName: searchKeyword }" |
| | | /> |
| | | </wd-tab> |
| | | </wd-tabs> |
| | | <Scan ref="scanRef" emitName="scan" /> |
| | | <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 Scan from "@/components/scan/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 scanRef = ref(); |
| | | 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 = () => { |
| | | scanRef.value.triggerScan(); |
| | | }; |
| | | |
| | | const getScanCode = async () => { |
| | | const { code } = await reportApi.sendWorkTime({ |
| | | userName: userInfo.value.userName, |
| | | console.log("index.vue - 点击扫码按钮(全局扫码模式,无需手动触发)"); |
| | | // 全局扫码模式下,硬件扫码会自动触发,无需手动调用 |
| | | uni.showToast({ |
| | | title: "请使用扫码枪扫描", |
| | | icon: "none", |
| | | }); |
| | | if (code == 200) { |
| | | toast.success("扫码成功"); |
| | | } |
| | | }; |
| | | |
| | | // 获取特定巡检设备的数据 |
| | | const getPatrolData = (item: any) => { |
| | | return async (params: any) => { |
| | | // 这里可以根据item中的信息调用相应的接口获取详情 |
| | | // 返回的数据格式需要与ProductList组件期望的格式一致 |
| | | return { |
| | | code: 200, |
| | | data: { |
| | | type: "巡检", |
| | | data: { |
| | | total: 0, |
| | | records: [], |
| | | }, |
| | | }, |
| | | }; |
| | | }; |
| | | }; |
| | | |
| | | // 获取巡检设备列表 |
| | |
| | | } |
| | | }; |
| | | |
| | | // 确保先移除再添加监听 |
| | | const setupScanListener = () => { |
| | | uni.$off("scan", getScanCode); // 先移除旧的 |
| | | uni.$on("scan", getScanCode); // 再添加新的 |
| | | }; |
| | | |
| | | onMounted(() => { |
| | | // 开启广播监听事件 |
| | | setupScanListener(); |
| | | console.log("显示1"); |
| | | // 页面加载时获取巡检设备列表 |
| | | loadPatrolList(); |
| | | // 启用全局监听器 |
| | | enableListener(); |
| | | console.log("index.vue - onMounted"); |
| | | }); |
| | | |
| | | onUnmounted(() => { |
| | | // 开启广播监听事件 |
| | | uni.$off("scan", getScanCode); |
| | | console.log("离开1"); |
| | | 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> |
| | | |
| | |
| | | .statistics_box { |
| | | margin: 15px; |
| | | } |
| | | </style> |
| | | </style> |