Kaynağa Gözat

Merge branch 'iteration-20250225-use-code' into online

lex-xin 1 hafta önce
ebeveyn
işleme
2a1bd218d1

+ 1 - 2
src/helpers/utils.ts

@@ -490,7 +490,6 @@ export const stackInstruments: any = {
 export const getInstrumentName = (instruments: any, instrumentName: string) => {
   const _instrumentName = instrumentName
     .replace(/ /g, '')
-    .replace(/\d+|\d+/g, '')
     .trim()
     .toLocaleLowerCase();
   const _instrument = Object.keys(instruments);
@@ -502,7 +501,7 @@ export const getInstrumentName = (instruments: any, instrumentName: string) => {
   }
   for (let i = 0; i < _instrument.length; i++) {
     const _name = _instrument[i].replace(/ /g, '').toLocaleLowerCase();
-    if (_name.includes(_instrumentName)) {
+    if (_instrumentName.includes(_name)) {
       return instruments[_instrument[i]] || '';
     }
   }

+ 2 - 2
src/hooks/useAuthCode/index.ts

@@ -138,12 +138,12 @@ export default function useAuthCode() {
 
     if (!code && !weChatCode.value) {
       console.warn('没有获取到微信Code');
-      return;
+      return '';
     }
 
     await getAppId();
     if (!wxAppId.value) {
-      return;
+      return '';
     }
     const { data } = await request.post(
       '/edu-app/open/paramConfig/wechatOpenId',

+ 52 - 33
src/router/router-root.ts

@@ -1,20 +1,44 @@
 // 不需要登录的路由
 export default [
   {
-    path: '/student-register',
-    name: 'student-register',
-    component: () => import('@/views/student-register/index'),
-    meta: {
-      title: '报名通道'
-    }
-  },
-  {
-    path: '/student-register-apply',
-    name: 'student-register-apply',
-    component: () => import('@/views/student-register/index-apply'),
-    meta: {
-      title: ''
-    }
+    //需要微信授权页面 微信授权
+    path: '/wx-auth',
+    name: 'wx-auth',
+    component: () => import('@/views/layout/wx-auth'),
+    children: [
+      {
+        path: '/intention-questionnaire',
+        name: 'intention-questionnaire',
+        component: () => import('@/views/intention-questionnaire/index'),
+        meta: {
+          title: '音乐(器乐)课堂数字化转型调查问卷'
+        }
+      },
+      {
+        path: '/pre-register-active',
+        name: 'pre-register-active',
+        component: () => import('@/views/pre-register-active/index'),
+        meta: {
+          title: '音乐数字化转型家长说明会'
+        }
+      },
+      {
+        path: '/student-register',
+        name: 'student-register',
+        component: () => import('@/views/student-register/index'),
+        meta: {
+          title: '报名通道'
+        }
+      },
+      {
+        path: '/student-register-apply',
+        name: 'student-register-apply',
+        component: () => import('@/views/student-register/index-apply'),
+        meta: {
+          title: ''
+        }
+      }
+    ]
   },
   {
     path: '/student-register-form',
@@ -268,21 +292,24 @@ export default [
   },
   {
     path: '/activationRegistration',
-    component: () => import('@/views/activation-code/instrument-registration/new-index'),
+    component: () =>
+      import('@/views/activation-code/instrument-registration/new-index'),
     meta: {
       title: '数字化转型报名'
     }
   },
   {
     path: '/activationRegistrationDetail',
-    component: () => import('@/views/activation-code/instrument-registration/detail'),
+    component: () =>
+      import('@/views/activation-code/instrument-registration/detail'),
     meta: {
       title: '数字化转型报名'
     }
   },
   {
     path: '/activationRegister',
-    component: () => import('@/views/activation-code/activation-register/index'),
+    component: () =>
+      import('@/views/activation-code/activation-register/index'),
     meta: {
       title: '音乐数字课堂AI学练工具激活'
     }
@@ -295,14 +322,6 @@ export default [
     }
   },
   {
-    path: '/pre-register-active',
-    name: 'pre-register-active',
-    component: () => import('@/views/pre-register-active/index'),
-    meta: {
-      title: '音乐数字化转型家长说明会'
-    }
-  },
-  {
     path: '/pre-register-video',
     name: 'pre-register-video',
     component: () => import('@/views/pre-register-active/video'),
@@ -318,14 +337,14 @@ export default [
       title: '音乐数字化转型家长说明会'
     }
   },
-  {
-    path: '/intention-questionnaire',
-    name: 'intention-questionnaire',
-    component: () => import('@/views/intention-questionnaire/index'),
-    meta: {
-      title: '音乐(器乐)课堂数字化转型调查问卷'
-    }
-  },
+  // {
+  //   path: '/intention-questionnaire',
+  //   name: 'intention-questionnaire',
+  //   component: () => import('@/views/intention-questionnaire/index'),
+  //   meta: {
+  //     title: '音乐(器乐)课堂数字化转型调查问卷'
+  //   }
+  // },
   {
     path: '/intention-questionnaire-show',
     name: 'intention-questionnaire-show',

+ 33 - 19
src/views/intention-questionnaire/index.tsx

@@ -30,6 +30,19 @@ export default defineComponent({
     );
 
     const authCode = useAuthCode();
+    // // 获取微信Code
+    // if (!authCode.onWeChatCode('GET') || !authCode.onWeChatCatchOpenId('GET')) {
+    //   authCode.getWeChatAuthCode(
+    //     getHttpOrigin() +
+    //       window.location.pathname +
+    //       '#' +
+    //       route.path +
+    //       '?' +
+    //       qs.stringify({
+    //         ...route.query
+    //       })
+    //   );
+    // }
 
     // 页面定时
     const pageTimer = useInterval(1000, { controls: true });
@@ -48,7 +61,7 @@ export default defineComponent({
         '<p style="text-align: left;"><strong style="font-size:15px; color: #0B8BFE;">三、开展原则</strong></p><p style="text-align: left;">本次活动面向全体学生,完全遵循学生自愿参加的原则。</p><p style="text-align: left;">1.若学生选择参加转型,家长需自行为学生准备好自用的乐器(硬件)和“器乐数字 Ai”应用(软件,用于联通学校音乐课堂)两项学习工具。</p><p style="text-align: left;">2.若学生不参加转型,可继续按原有方式进行音乐课学习。</p>',
       contentD:
         '<p style="text-align: left;"><strong style="font-size:15px; color: #0B8BFE;">五、事项说明</strong></p><p style="text-align: left;">1.学校不涉及任何费用收取。学生所需的自用工具在市面上均可购买到,家长可自行根据实际情况为学生准备。</p><p style="text-align: left;">2.如学生有参加数字化转型的意愿,但存在特殊或特困情况,可先向学校进行登记,学校将尽力寻求资源协助家长解决。</p><p style="text-align: left;">在您了解上述内容后,请点击下一步进行意见填写:</p>',
-      contentE: null as any,  
+      contentE: null as any,
       introductionVideo: 'https://oss.dayaedu.com/ktyq/02/1739345029052.mp4',
       introductionVideoTime: 117,
       coverImg: 'https://oss.dayaedu.com/ktyq/02/1739362815061.png',
@@ -69,12 +82,9 @@ export default defineComponent({
         | any,
       intentionInfo: null as any,
       contentShow: false,
-      tenantId: null as any, // 机构id
+      tenantId: null as any // 机构id
     });
 
-    const showPopup = ref(false);
-    const showPopupMessage = ref('');
-
     // 播放视频总时长
     const videoIntervalRef = useInterval(1000, { controls: true });
     videoIntervalRef.pause();
@@ -84,26 +94,29 @@ export default defineComponent({
 
     onMounted(async () => {
       forms.meetingType = route.query.type || forms.meetingType;
-      forms.tenantId = route.query.id || '1891864516088385538'
+      forms.tenantId = route.query.id || '1891864516088385538';
       try {
-        const openId = await authCode.getOpenId(
-          getHttpOrigin() +
-            window.location.pathname +
-            '#' +
-            route.path +
-            '?' +
-            qs.stringify({
-              ...route.query
-            })
-        );
-        forms.openId = openId
+        // getHttpOrigin() +
+        //     window.location.pathname +
+        //     '#' +
+        //     route.path +
+        //     '?' +
+        //     qs.stringify({
+        //       ...route.query
+        //     })
+        // const openId = await authCode.getOnlyOpenId();
+        // forms.openId = openId;
+        forms.openId = authCode.onWeChatCatchOpenId('GET');
+        // console.log(forms.openId, 'openId - show');
+
         // 获取微信分享签名
         weChatShare.getAppSignature();
         // if (!browser().weixin || !openId) return;
         const { data } = await request.get(
           '/edu-app/open/meetingQuestionSetting/detail?type=' +
             forms.meetingType +
-            '&tenantId=' + forms.tenantId
+            '&tenantId=' +
+            forms.tenantId
         );
         if (data) {
           forms.contentA = data.contentA || forms.contentA;
@@ -113,7 +126,7 @@ export default defineComponent({
           forms.contentE = data.contentE || null;
           // 如果设置了题目名称,则存储,下一步页面需要用到
           if (forms.contentE) {
-            sessionStorage.setItem('customQuestionE', forms.contentE)
+            sessionStorage.setItem('customQuestionE', forms.contentE);
           }
         }
         forms.contentShow = true;
@@ -124,6 +137,7 @@ export default defineComponent({
       forms.player1 = _initVideo('one', forms, videoIntervalRef);
       forms.player2 = _initVideo('two', forms, videoIntervalRef2);
     });
+
     const nextSkip = () => {
       router.push({
         path: '/fill-questionnaire',

+ 48 - 0
src/views/layout/wx-auth.tsx

@@ -0,0 +1,48 @@
+import { computed, defineComponent, ref } from 'vue';
+import { RouterView, useRoute } from 'vue-router';
+import useAuthCode from '@/hooks/useAuthCode';
+import { browser, getHttpOrigin } from '@/helpers/utils';
+import qs from 'query-string';
+
+export default defineComponent({
+  name: 'wx-auth-layout',
+  setup() {
+    const authCode = useAuthCode();
+    const route = useRoute();
+    const loading = ref(false);
+    const error = ref(false); // 如果授权失败了也可以正常访问页面
+    const openId = ref('');
+    const isNeedView = computed(() => {
+      return openId.value || error.value || !browser().weixin ? true : false;
+    });
+
+    const setAuth = async () => {
+      if (loading.value) {
+        return;
+      }
+
+      loading.value = true;
+      try {
+        openId.value = await authCode.getOpenId(
+          getHttpOrigin() +
+            window.location.pathname +
+            '#' +
+            route.path +
+            '?' +
+            qs.stringify({
+              ...route.query
+            })
+        );
+      } catch (e: any) {
+        //
+        console.log(e, 'error');
+        error.value = true;
+      }
+      loading.value = false;
+    };
+
+    setAuth();
+
+    return () => (isNeedView.value ? <RouterView></RouterView> : null);
+  }
+});

+ 11 - 10
src/views/pre-register-active/index.tsx

@@ -193,16 +193,17 @@ export default defineComponent({
     };
 
     onMounted(async () => {
-      forms.openId = await authCode.getOpenId(
-        getHttpOrigin() +
-          window.location.pathname +
-          '#' +
-          route.path +
-          '?' +
-          qs.stringify({
-            ...route.query
-          })
-      );
+      // forms.openId = await authCode.getOpenId(
+      //   getHttpOrigin() +
+      //     window.location.pathname +
+      //     '#' +
+      //     route.path +
+      //     '?' +
+      //     qs.stringify({
+      //       ...route.query
+      //     })
+      // );
+      forms.openId = authCode.onWeChatCatchOpenId('GET');
       try {
         if (!forms.schoolId) {
           showToast('信息获取失败,请联系老师');

+ 13 - 55
src/views/student-register/index-apply.tsx

@@ -1268,50 +1268,6 @@ export default defineComponent({
       }
     };
 
-    // const getAppIdAndCode = async (url?: string) => {
-    //   try {
-    //     // const { data } = await request.get(
-    //     //   '/edu-app/open/paramConfig/wechatAppId'
-    //     // );
-    //     // // 判断是否有微信appId
-    //     // if (data) {
-    //     //   closeToast();
-    //     //   goWechatAuth(data, url);
-    //     // }
-    //     sessionStorage.setItem('isWxcode', '1');
-    //     closeToast();
-    //     goWechatAuthTemp('wxccc2efd2678adbe3', url)
-    //   } catch {
-    //     //
-    //   }
-    // };
-
-    // if (browser().weixin) {
-    //   //授权
-    //   const openId = sessionStorage.getItem('active-open-id');
-    //   forms.openId = openId;
-    //   const code = getUrlCode();
-    //   const isWxcode = sessionStorage.getItem('isWxcode');
-    //   if (!code || isWxcode !== '1') {
-    //     const newUrl =
-    //       getHttpOrigin() +
-    //       window.location.pathname +
-    //       '#' +
-    //       route.path +
-    //       '?' +
-    //       qs.stringify({
-    //         ...route.query
-    //       });
-    //     getAppIdAndCode(newUrl);
-    //     return '';
-    //   } else {
-    //     forms.code = code;
-    //     // 获取微信分享签名
-    //     weChatShare.getAppSignature()
-    //   }
-
-    // }
-
     const formatTimerTo = (num: number): string => {
       if (num > 9) {
         return num + '';
@@ -1400,17 +1356,19 @@ export default defineComponent({
     }
 
     onMounted(async () => {
-      const openId = await authCode.getOpenId(
-        getHttpOrigin() +
-          window.location.pathname +
-          '#' +
-          route.path +
-          '?' +
-          qs.stringify({
-            ...route.query
-          })
-      );
-      forms.openId = openId;
+      // const openId = await authCode.getOpenId(
+      //   getHttpOrigin() +
+      //     window.location.pathname +
+      //     '#' +
+      //     route.path +
+      //     '?' +
+      //     qs.stringify({
+      //       ...route.query
+      //     })
+      // );
+      forms.openId = authCode.onWeChatCatchOpenId("GET");
+      // 获取微信分享签名
+      weChatShare.getAppSignature()
       try {
         // 获取支付类型
         let expireDay = null;

+ 11 - 11
src/views/student-register/index.tsx

@@ -1587,17 +1587,17 @@ export default defineComponent({
     };
 
     onMounted(async () => {
-      const openId = await authCode.getOpenId(
-        getHttpOrigin() +
-          window.location.pathname +
-          '#' +
-          route.path +
-          '?' +
-          qs.stringify({
-            ...route.query
-          })
-      );
-      forms.openId = openId;
+      // const openId = await authCode.getOpenId(
+      //   getHttpOrigin() +
+      //     window.location.pathname +
+      //     '#' +
+      //     route.path +
+      //     '?' +
+      //     qs.stringify({
+      //       ...route.query
+      //     })
+      // );
+      forms.openId = authCode.onWeChatCatchOpenId("GET");
       try {
         // 获取支付类型
         let expireDay = null;