| <template> | 
|     <div class="box"> | 
|     </div> | 
| </template> | 
|   | 
| <script setup lang="ts"> | 
|     import { getCurrentInstance, watch } from 'vue' | 
|     import { Toast, Dialog } from 'vant' | 
|     const { proxy }: any = getCurrentInstance() | 
|   | 
|     const props = defineProps({ | 
|         openCode: { // 是否打开钉钉扫一扫 | 
|             type: Boolean, | 
|             required: false, | 
|             default: false | 
|         }, | 
|         infos: { // 弹框提示字 | 
|             type: Array, | 
|             required: true | 
|         }, | 
|         promptOrNot: { // 是否需要弹框提示 | 
|             type: Boolean, | 
|             required: false, | 
|             default: true | 
|         } | 
|     }) | 
|   | 
|     let arrCode: string[] = []  // 存放扫码数组 | 
|   | 
|     const emit = defineEmits(['onDecode', 'closePopup']) | 
|   | 
|     // 核心方法 | 
|     const init = (index: number): void => { | 
|         if (proxy.$dd.env.platform !== 'notInDingTalk') { | 
|             if (props.promptOrNot) { | 
|                 Dialog.alert({ | 
|                     title: '扫码提示', | 
|                     confirmButtonColor: '#4275FC', | 
|                     message: `${props.infos[index]}`, | 
|                 }).then(() => { | 
|                     proxy.$dd.biz.util.scan({ | 
|                         type: 'all', | 
|                         onSuccess: function(data: any) { | 
|                             arrCode.push(data.text) | 
|                             // 最后一次返回父组件扫码数据 | 
|                             if (index === props.infos.length - 1) { | 
|                                 emit('onDecode', arrCode) | 
|                             } else { | 
|                                 init(index + 1) | 
|                             } | 
|                         }, | 
|                         onFail : function(err: any) { | 
|                             arrCode = [] | 
|                             emit('closePopup') | 
|                         } | 
|                     }) | 
|                 }).catch(() => { | 
|                     emit('closePopup') | 
|                 }) | 
|             } else { | 
|                 proxy.$dd.biz.util.scan({ | 
|                     type: 'all', | 
|                     onSuccess: function(data: any) { | 
|                         arrCode.push(data.text) | 
|                         // 最后一次返回父组件扫码数据 | 
|                         if (index === props.infos.length - 1) { | 
|                             emit('onDecode', arrCode) | 
|                         } else { | 
|                             init(index + 1) | 
|                         } | 
|                     }, | 
|                     onFail : function(err: any) { | 
|                         arrCode = [] | 
|                         emit('closePopup') | 
|                     } | 
|                 }) | 
|             } | 
|         } else { | 
|             Toast.fail({ message: '当前不是钉钉环境' }) | 
|             emit('closePopup') | 
|         } | 
|     } | 
|   | 
|     // 监听openCode触发扫码方法 | 
|     watch(() => props.openCode, (news: boolean) => { | 
|         if (news) { | 
|             init(0) | 
|         } else { | 
|             arrCode = [] | 
|         } | 
|     }) | 
| </script> | 
|   | 
| <style lang="scss" scoped> | 
|     .box_video { | 
|   | 
|     } | 
| </style> |