| <template> | 
|     <div class="box"> | 
| <!--        <div class="box_s">--> | 
| <!--            <v-Tags :dataList="data" @change="changeTage"></v-Tags>--> | 
| <!--        </div>--> | 
| <!--        <v-Menu class="top" title="常用功能" :isShow="true"></v-Menu>--> | 
|   | 
| <!--        <button @click="openCodes">扫码</button>--> | 
| <!--        <Test :openCode="openCode" :infos="['请扫描工装码', '请扫描货位码']" @close="close" @onDecode="onDecode" />--> | 
|         <template v-if="store.state.Menu.length > 0"> | 
|             <v-Menu class="top" v-for="item in store.state.Menu" :key="item.id" :title="item.label" :isShow="false" :list="item.children"></v-Menu> | 
|         </template> | 
|         <template v-else> | 
|             <div class="box_notfound"> | 
|                 <img src="@/assets/icon/default_weishouquan@2x.png" alt="" /> | 
|             </div> | 
|         </template> | 
|   | 
|     </div> | 
| <!--    <div class="page-scan">--> | 
| <!--        <!–返回–>--> | 
| <!--        <van-nav-bar title="扫描二维码/条形码" fixed--> | 
| <!--             @click-left="clickIndexLeft()"--> | 
| <!--             class="scan-index-bar">--> | 
| <!--            <template #left>--> | 
| <!--                <van-icon name="arrow-left" size="18" color="#fff"/>--> | 
| <!--                <span style="color: #fff"> 取消 </span>--> | 
| <!--            </template>--> | 
| <!--        </van-nav-bar>--> | 
| <!--        <!– 扫码区域 –>--> | 
| <!--        <video ref="video" id="video" class="scan-video" autoplay></video>--> | 
| <!--        <!– 提示语 –>--> | 
| <!--        <div v-show="tipShow" class="scan-tip"> {{tipMsg}} </div>--> | 
| <!--        <button @click="reset">重置</button>--> | 
| <!--    </div>--> | 
| </template> | 
|   | 
| <script setup lang="ts"> | 
|     import { reactive, ref } from "vue" | 
|     import { useStore } from "vuex" | 
|     // import { BrowserMultiFormatReader } from '@zxing/library' | 
|     import vTags from '@/components/common/Tags.vue' | 
|     import vMenu from '@/components/common/Menu.vue' | 
|     const store = useStore() | 
|     // let openCode = ref<boolean>(false) | 
|   | 
|     // let loadingShow = ref<boolean>(false) | 
|     // let codeReader: any = ref(null) | 
|     // let vin = ref<null>(null) | 
|     // let scanText = ref<string>('') | 
|     // let tipMsg = ref<string>('正在尝试识别....') | 
|     // let tipShow = ref<boolean>(false) | 
|   | 
|     // tags组件所需数据 | 
|     const data = reactive<Array<object>>([ | 
|         { | 
|             id: 1, | 
|             name: '今日', | 
|             isActive: true | 
|         }, | 
|         { | 
|             id: 2, | 
|             name: '本月', | 
|             isActive: false | 
|         } | 
|     ]) | 
|   | 
|     // 点击标签回调 | 
|     const changeTage = (id: string | number): void => { | 
|         console.log(id) | 
|     } | 
|     // const openScan = async() => { | 
|     //     codeReader.value.getVideoInputDevices().then((videoInputDevices: any) => { | 
|     //         tipShow.value = true; | 
|     //         tipMsg.value = '正在调用摄像头...'; | 
|     //         console.log('videoInputDevices', videoInputDevices); | 
|     //         // 默认获取第一个摄像头设备id | 
|     //         let firstDeviceId = videoInputDevices[0].deviceId; | 
|     //         // 获取第一个摄像头设备的名称 | 
|     //         const videoInputDeviceslablestr = JSON.stringify(videoInputDevices[0].label); | 
|     //         if (videoInputDevices.length > 1) { | 
|     //             // 判断是否后置摄像头 | 
|     //             if (videoInputDeviceslablestr.indexOf('back') > -1) { | 
|     //                 firstDeviceId = videoInputDevices[0].deviceId; | 
|     //             } else { | 
|     //                 firstDeviceId = videoInputDevices[1].deviceId; | 
|     //             } | 
|     //         } | 
|     //         decodeFromInputVideoFunc(firstDeviceId); | 
|     //     }).catch((err: any) => { | 
|     //         tipShow.value = false; | 
|     //         console.error(err); | 
|     //     }); | 
|     // } | 
|     // | 
|     // const openScanTwo = async () => { | 
|     //     codeReader.value = await new BrowserMultiFormatReader(); | 
|     //     codeReader.value.getVideoInputDevices().then((videoInputDevices: any) => { | 
|     //         tipShow.value = true; | 
|     //         tipMsg.value = '正在调用摄像头...'; | 
|     //         console.log('videoInputDevices', videoInputDevices); | 
|     //         // 默认获取第一个摄像头设备id | 
|     //         let firstDeviceId = videoInputDevices[0].deviceId; | 
|     //         // 获取第一个摄像头设备的名称 | 
|     //         const videoInputDeviceslablestr = JSON.stringify(videoInputDevices[0].label); | 
|     //         if (videoInputDevices.length > 1) { | 
|     //             // 判断是否后置摄像头 | 
|     //             if (videoInputDeviceslablestr.indexOf('back') > -1) { | 
|     //                 firstDeviceId = videoInputDevices[0].deviceId; | 
|     //             } else { | 
|     //                 firstDeviceId = videoInputDevices[1].deviceId; | 
|     //             } | 
|     //         } | 
|     //         decodeFromInputVideoFunc(firstDeviceId) | 
|     //     }).catch((err: any) => { | 
|     //         tipShow.value = false; | 
|     //         console.error(err); | 
|     //     }); | 
|     // } | 
|     // | 
|     // const decodeFromInputVideoFunc = (firstDeviceId: any) => { | 
|     //     codeReader.value.reset(); // 重置 | 
|     //     scanText.value = ''; | 
|     //     codeReader.value.decodeFromInputVideoDeviceContinuously(firstDeviceId, 'video', (result: any, err: any) => { | 
|     //         tipMsg.value = '正在尝试识别...'; | 
|     //         scanText.value = ''; | 
|     //         if (result) { | 
|     //             console.log('扫描结果', result); | 
|     //             scanText.value = result.text; | 
|     //             if (scanText.value) { | 
|     //                 tipShow.value = false | 
|     //                 // 这部分接下去的代码根据需要,读者自行编写了 | 
|     //                 // this.$store.commit('app/SET_SCANTEXT', result.text); | 
|     //                 // console.log('已扫描的小票列表', this.$store.getters.scanTextArr); | 
|     //             } | 
|     //         } | 
|     //         if (err && !(err)) { | 
|     //             tipMsg.value = '识别失败'; | 
|     //             setTimeout(() => { | 
|     //                 tipShow.value = false; | 
|     //             }, 2000) | 
|     //             console.error(err) | 
|     //         } | 
|     //     }); | 
|     // } | 
|     // | 
|     // const reset = () => { | 
|     //     codeReader.value.reset() | 
|     // } | 
|     // | 
|     // onMounted(() => { | 
|     //     console.log('浏览器信息', navigator.userAgent) | 
|     //     codeReader.value = new BrowserMultiFormatReader() | 
|     //     openScanTwo() | 
|     // }) | 
| </script> | 
|   | 
| <style lang="scss" scoped> | 
| .scan-index-bar{ | 
|     background-image: linear-gradient( -45deg, #42a5ff ,#59cfff); | 
| } | 
| .van-nav-bar__title{ | 
|     color: #fff !important; | 
| } | 
| .scan-video{ | 
|     height: 80vh; | 
| } | 
| .scan-tip{ | 
|     width: 100vw; | 
|     text-align: center; | 
|     margin-bottom: 10vh; | 
|     color: white; | 
|     font-size: 5vw; | 
| } | 
| .page-scan{ | 
|     overflow-y: hidden; | 
|     background-color: #363636; | 
| } | 
| .box { | 
|     width: 100%; | 
|     height: 100%; | 
|     background: #f5f5f5; | 
|     .top { | 
|         margin-bottom: 20px; | 
|     } | 
|     .box_notfound { | 
|         padding-top: 300px; | 
|         display: flex; | 
|         align-items: center; | 
|         justify-content: center; | 
|         background: white; | 
|         img { | 
|             width: 388px; | 
|             height: 388px; | 
|         } | 
|     } | 
| } | 
| </style> |