Lambert 2 тижнів тому
батько
коміт
2c02197e4b
2 змінених файлів з 82 додано та 1 видалено
  1. 15 0
      src/api/platform/glasses/index.ts
  2. 67 1
      src/view/home/index.vue

+ 15 - 0
src/api/platform/glasses/index.ts

@@ -0,0 +1,15 @@
+import request from '/@/utils/micro_request.js'
+const platPath = import.meta.env.VITE_PLATFORM_API
+// 参数设置
+export function useGlassesApi() {
+  return {
+    // 获取眼镜详情
+    getGlassesById(params?: object) {
+      return request.postRequest(platPath, 'PlatOptics3DGlasses', 'GetGlassesById', params);
+    },
+    // 借用眼镜
+    borrowerGlasses(params?: object) {
+      return request.postRequest(platPath, 'PlatOptics3DGlasses', 'BorrowerGlasses', params);
+    },
+  };
+}

+ 67 - 1
src/view/home/index.vue

@@ -63,6 +63,10 @@
           <img src="../../assets/img/更多应用.png" alt="" />
           <p>巡检任务</p>
         </li>
+        <li @click="scan">
+          <img src="../../assets/img/更多应用.png" alt="" />
+          <p>3D眼镜借用</p>
+        </li>
       </ul>
     </div>
     <div class="swipe-con flex justify-between mt10">
@@ -131,9 +135,11 @@ import { useUserApi } from '/@/api/system/user'
 import { useTrainingApi } from '/@/api/training'
 import { useRouter } from 'vue-router'
 import { useUserInfo } from '/@/stores/userInfo'
-
+import { useGlassesApi } from '/@/api/platform/glasses'
 import { useUserInfos } from '/@/hooks/useUserInfos'
+import { ElMessage, ElMessageBox } from 'element-plus'
 
+const glassesApi = useGlassesApi();
 const { userInfos } = useUserInfos()
 const newsApi = useNewsApi()
 const dictApi = useDictApi()
@@ -151,6 +157,8 @@ const deptData = ref(<any[]>[])
 const pjtList = ref(<any[]>[])
 const pjtTypeList = ref(<any[]>[])
 const router = useRouter()
+
+const glassesInfo = ref()
 const state = reactive({
   form: {
     keyWord: ''
@@ -189,6 +197,64 @@ const getTrainingList = async () => {
   if (err) return
   trainingList.value = res?.data?.list || []
 }
+
+const getGlassesInfo = async (glassesId:any) => {
+  const [err, res]: ToResponse = await to(glassesApi.getGlassesById({ id: glassesId }))
+  if (err) return
+  glassesInfo.value = res.data
+}
+
+const handleBorrower = async (glassesId: any) => {
+  const [err, res]: ToResponse = await to(glassesApi.borrowerGlasses({ id: glassesId }))
+  if (err) {
+    return false
+  }
+  return true
+}
+
+const scan = async () => {
+  try {
+    // 1. 调用微信扫码
+    const rawRes = await useUserInfo().scanCode(1)
+    console.log("扫码拿到的原始内容:", rawRes)
+
+    // 获取设备详情
+    await getGlassesInfo(rawRes)
+    if (!glassesInfo.value) {
+      ElMessage.error("未找到眼镜信息,请核对二维码")
+      return
+    }
+
+    // 2. 弹出确认框(改用 await 写法,更简洁)
+    await ElMessageBox.confirm(
+      `识别到设备编号:${glassesInfo.value.deviceId},是否确认借用?`,
+      '确认借用',
+      {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'info',
+        center: true,
+      }
+    )
+
+    const isSuccess = await handleBorrower(glassesInfo.value.id)
+    if (isSuccess) {
+      ElMessage.success('借用成功')
+    }
+  } catch (err) {
+    // 这里的 err 分为两种情况:
+    // 1. 用户在 MessageBox 点了“取消” (会进入这里)
+    // 2. 微信扫码接口报错或用户关闭扫码 (也会进入这里)
+
+    if (err === 'cancel') {
+      ElMessage.info('已取消借用')
+    } else {
+      console.error("扫码或系统出错:", err)
+      ElMessage.error('操作未完成')
+    }
+  }
+}
+
 const onSearch = () => { }
 const onRouterPush = (val: string, params?: any) => {
   router.push({