Jelajahi Sumber

feat(scan): 集成jz-h5-scancode扫码库支持H5扫码功能

- 在依赖中新增jz-h5-scancode库
- 扫码工具中增加H5环境扫码实现,调用jzH5ScanCode.scanCode方法
- 添加扫码失败时toast提示,提升用户体验
- 引入jz-h5-scancode的类型声明,支持TypeScript提示
- 在组件中使用扫码前调用登录检查,确保用户登录状态
- 调整接口环境配置,切换部分开发和试用环境地址
- 扩展组件声明文件,新增多个wot-design-uni组件类型声明
zhangtao 15 jam lalu
induk
melakukan
1bffe43773

+ 1 - 0
package.json

@@ -85,6 +85,7 @@
     "@vueuse/core": "^11.0.3",
     "alova": "^3.3.4",
     "echarts": "^6.0.0",
+    "jz-h5-scancode": "^1.1.0",
     "pinia": "^2.3.1",
     "uqrcodejs": "^4.0.7",
     "vue": "~3.4.38",

+ 9 - 0
pnpm-lock.yaml

@@ -82,6 +82,9 @@ importers:
       echarts:
         specifier: ^6.0.0
         version: 6.0.0
+      jz-h5-scancode:
+        specifier: ^1.1.0
+        version: 1.1.0
       pinia:
         specifier: ^2.3.1
         version: 2.3.1(typescript@5.5.4)(vue@3.4.38(typescript@5.5.4))
@@ -5089,6 +5092,10 @@ packages:
     resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
     engines: {'0': node >= 0.2.0}
 
+  jz-h5-scancode@1.1.0:
+    resolution: {integrity: sha512-R/B5G/oU5MgTy/n4gQOj+rgECraY2lFgcF7VprIn+gnXhdO5107IO9lgQata8BvMMnkKuJidM2ZX0fASmQLgqg==}
+    engines: {node: '>=12.0.0'}
+
   keyv@4.5.4:
     resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
 
@@ -13559,6 +13566,8 @@ snapshots:
 
   jsonparse@1.3.1: {}
 
+  jz-h5-scancode@1.1.0: {}
+
   keyv@4.5.4:
     dependencies:
       json-buffer: 3.0.1

+ 7 - 0
src/components.d.ts

@@ -15,6 +15,7 @@ declare module 'vue' {
     PrivacyPopup: typeof import('./components/PrivacyPopup.vue')['default']
     QCode: typeof import('./components/QCode.vue')['default']
     StatusTip: typeof import('./components/StatusTip.vue')['default']
+    WdActionSheet: typeof import('wot-design-uni/components/wd-action-sheet/wd-action-sheet.vue')['default']
     WdBadge: typeof import('wot-design-uni/components/wd-badge/wd-badge.vue')['default']
     WdButton: typeof import('wot-design-uni/components/wd-button/wd-button.vue')['default']
     WdCard: typeof import('wot-design-uni/components/wd-card/wd-card.vue')['default']
@@ -22,6 +23,7 @@ declare module 'vue' {
     WdCellGroup: typeof import('wot-design-uni/components/wd-cell-group/wd-cell-group.vue')['default']
     WdCheckbox: typeof import('wot-design-uni/components/wd-checkbox/wd-checkbox.vue')['default']
     WdCheckboxGroup: typeof import('wot-design-uni/components/wd-checkbox-group/wd-checkbox-group.vue')['default']
+    WdCircle: typeof import('wot-design-uni/components/wd-circle/wd-circle.vue')['default']
     WdConfigProvider: typeof import('wot-design-uni/components/wd-config-provider/wd-config-provider.vue')['default']
     WdCountDown: typeof import('wot-design-uni/components/wd-count-down/wd-count-down.vue')['default']
     WdDivider: typeof import('wot-design-uni/components/wd-divider/wd-divider.vue')['default']
@@ -35,9 +37,12 @@ declare module 'vue' {
     WdNoticeBar: typeof import('wot-design-uni/components/wd-notice-bar/wd-notice-bar.vue')['default']
     WdNotify: typeof import('wot-design-uni/components/wd-notify/wd-notify.vue')['default']
     WdOverlay: typeof import('wot-design-uni/components/wd-overlay/wd-overlay.vue')['default']
+    WdPicker: typeof import('wot-design-uni/components/wd-picker/wd-picker.vue')['default']
     WdPopup: typeof import('wot-design-uni/components/wd-popup/wd-popup.vue')['default']
     WdRadio: typeof import('wot-design-uni/components/wd-radio/wd-radio.vue')['default']
     WdRadioGroup: typeof import('wot-design-uni/components/wd-radio-group/wd-radio-group.vue')['default']
+    WdRate: typeof import('wot-design-uni/components/wd-rate/wd-rate.vue')['default']
+    WdSearch: typeof import('wot-design-uni/components/wd-search/wd-search.vue')['default']
     WdSegmented: typeof import('wot-design-uni/components/wd-segmented/wd-segmented.vue')['default']
     WdSkeleton: typeof import('wot-design-uni/components/wd-skeleton/wd-skeleton.vue')['default']
     WdSortButton: typeof import('wot-design-uni/components/wd-sort-button/wd-sort-button.vue')['default']
@@ -51,7 +56,9 @@ declare module 'vue' {
     WdTabbarItem: typeof import('wot-design-uni/components/wd-tabbar-item/wd-tabbar-item.vue')['default']
     WdTabs: typeof import('wot-design-uni/components/wd-tabs/wd-tabs.vue')['default']
     WdTag: typeof import('wot-design-uni/components/wd-tag/wd-tag.vue')['default']
+    WdTextarea: typeof import('wot-design-uni/components/wd-textarea/wd-textarea.vue')['default']
     WdToast: typeof import('wot-design-uni/components/wd-toast/wd-toast.vue')['default']
+    WdUpload: typeof import('wot-design-uni/components/wd-upload/wd-upload.vue')['default']
     Zcontact: typeof import('./components/Zcontact.vue')['default']
     Zpopup: typeof import('./components/Zpopup.vue')['default']
     Zupload: typeof import('./components/Zupload.vue')['default']

+ 6 - 6
src/config/index.ts

@@ -9,9 +9,9 @@ const mapEnvVersion = {
   // develop: 'http://192.168.0.19:8080', // 邓
   // develop: 'http://192.168.1.20:8080', // 黄
   // develop: 'http://192.168.0.11:8080', // 王
-  develop: 'http://192.168.1.21:8080', // 田
+  // develop: 'http://192.168.1.21:8080', // 田
   // develop: 'http://74949mkfh190.vicp.fun', // 付
-  // develop: 'http://47.109.84.152:8081', // 测试代理
+  develop: 'http://47.109.84.152:8081', // 测试代理
   // develop: 'https://5ed0f7cc.r9.vip.cpolar.cn',
   // develop: 'https://25740642.r3.cpolar.top',
   // develop: 'https://smqjh.api.zswlgz.com',
@@ -20,9 +20,9 @@ const mapEnvVersion = {
    */
   // trial: "http://192.168.1.166:8080/jeecg-boot",
   // trial: 'http://192.168.0.157:8080',
-  // trial: 'http://47.109.84.152:8081',
+  trial: 'http://47.109.84.152:8081',
   // trial: 'http://192.168.1.166:8080,
-  trial: 'https://smqjh.api.zswlgz.com',
+  // trial: 'https://smqjh.api.zswlgz.com',
   /**
    * 正式版
    */
@@ -45,11 +45,11 @@ function handleEnvVersion() {
   // #ifdef H5
   const mode = import.meta.env.MODE
   const h5Server = {
-    // development: 'http://47.109.84.152:8081',
+    development: 'http://47.109.84.152:8081',
     // development: 'http://192.168.0.157:8080',
     // development: 'http://192.168.0.11:8080',
     // development: 'http://192.168.1.21:8080',
-    development: 'https://smqjh.api.zswlgz.com',
+    // development: 'https://smqjh.api.zswlgz.com',
     production: 'https://smqjh.api.zswlgz.com',
   }
   return h5Server[mode as 'development' | 'production']

+ 0 - 2
src/pages/index/index.vue

@@ -137,8 +137,6 @@ function handleGo() {
   router.push({ name: 'bannerDetaile' })
 }
 function handleChangeSwiper(e: UniHelper.SwiperOnChangeEvent) {
-  console.log(e.detail.current, 'e.detail.current')
-
   currentIndex.value = e.detail.current
 }
 function handleJyBanner() {

+ 1 - 0
src/shims.d.ts

@@ -12,3 +12,4 @@ declare module '*.vue' {
   const component: Vue.ComponentOptions<Vue>
   export default component
 }
+declare module 'jz-h5-scanCode';

+ 1 - 0
src/subPack-charge/components/charge-tab.vue

@@ -15,6 +15,7 @@ async function getDeviceInfo(connectorCode: string) {
 }
 
 async function scanCode() {
+  await useUserStore().checkLogin()
   try {
     const connectorCode = await ScanCodeUtil.scanAndGetConnectorCode()
     if (!connectorCode) {

+ 15 - 1
src/subPack-charge/utils/index.ts

@@ -1,10 +1,14 @@
+// #ifdef H5
+import jzH5ScanCode from 'jz-h5-scanCode/js/index.js'
+// #endif
+
 /**
  * @param statusName 去掉括号及括号内的内容
  */
+
 export function formatStatusName(statusName: string) {
   return statusName.replace(/\([^)]*\)/g, '')
 }
-
 /**
  * 统一充电订单状态处理
  * @param order
@@ -82,6 +86,7 @@ export class ScanCodeUtil {
    */
   static scan(opts: any = {}) {
     return new Promise((resolve, reject) => {
+      // #ifdef MP-WEIXIN
       uni.scanCode(
         Object.assign(
           {},
@@ -92,6 +97,14 @@ export class ScanCodeUtil {
           opts,
         ),
       )
+      // #endif
+      // #ifdef H5
+      jzH5ScanCode.scanCode({
+        ...opts,
+        success: (res: any) => resolve(res),
+        fail: reject,
+      })
+      // #endif
     })
   }
 
@@ -135,6 +148,7 @@ export class ScanCodeUtil {
     }
     catch (error) {
       console.error('扫码或解析失败:', error)
+      useGlobalToast().show(`扫码或解析失败:${error}`)
       throw error
     }
   }

+ 1 - 0
src/types/jz-h5-scanCode.d.ts

@@ -0,0 +1 @@
+declare module 'jz-h5-scanCode/js/index.js';