Browse Source

Merge branch 'iteration-20240703' into jenkins

lex 1 year ago
parent
commit
7375637e71
36 changed files with 154 additions and 57 deletions
  1. 6 6
      src/router/index.ts
  2. 0 0
      src/views/choose-homework/classify/index.module.less
  3. 0 0
      src/views/choose-homework/classify/index.tsx
  4. 15 3
      src/views/choose-homework/classroom-detail/child-node.tsx
  5. 0 0
      src/views/choose-homework/classroom-detail/image/icon-arrow-down.png
  6. 0 0
      src/views/choose-homework/classroom-detail/image/icon-arrow.png
  7. 0 0
      src/views/choose-homework/classroom-detail/image/icon-cache-point.png
  8. 0 0
      src/views/choose-homework/classroom-detail/image/icon-check-disabled.png
  9. 0 0
      src/views/choose-homework/classroom-detail/image/icon-check.png
  10. 0 0
      src/views/choose-homework/classroom-detail/image/icon-close.png
  11. 0 0
      src/views/choose-homework/classroom-detail/image/icon-course-lock.png
  12. 0 0
      src/views/choose-homework/classroom-detail/image/icon-course.png
  13. 0 0
      src/views/choose-homework/classroom-detail/image/icon-imm.png
  14. 0 0
      src/views/choose-homework/classroom-detail/image/icon-list.png
  15. 0 0
      src/views/choose-homework/classroom-detail/image/icon-nocheck.png
  16. 0 0
      src/views/choose-homework/classroom-detail/image/icon-question.png
  17. 0 0
      src/views/choose-homework/classroom-detail/image/iconTip.png
  18. 0 0
      src/views/choose-homework/classroom-detail/image/look.svg
  19. 0 0
      src/views/choose-homework/classroom-detail/index.module.less
  20. 63 6
      src/views/choose-homework/classroom-detail/index.tsx
  21. 0 0
      src/views/choose-homework/images/banner-bg.png
  22. 8 1
      src/views/choose-homework/index.module.less
  23. 2 1
      src/views/choose-homework/index.tsx
  24. 0 0
      src/views/choose-homework/music-list/icons/icon_search.png
  25. 0 0
      src/views/choose-homework/music-list/icons/music.png
  26. 0 0
      src/views/choose-homework/music-list/icons/recording.svg
  27. 0 0
      src/views/choose-homework/music-list/icons/tips.png
  28. 0 0
      src/views/choose-homework/music-list/icons/vip.png
  29. 0 0
      src/views/choose-homework/music-list/index.module.less
  30. 0 0
      src/views/choose-homework/music-list/index.tsx
  31. 0 0
      src/views/choose-homework/music-list/modals/choosePartName/index-rem.module.less
  32. 0 0
      src/views/choose-homework/music-list/modals/choosePartName/index.module.less
  33. 1 1
      src/views/choose-homework/music-list/modals/choosePartName/index.tsx
  34. 0 0
      src/views/choose-homework/pageState.tsx
  35. 21 0
      src/views/exercise-after-class/index.module.less
  36. 38 39
      src/views/exercise-after-class/index.tsx

+ 6 - 6
src/router/index.ts

@@ -32,9 +32,9 @@ const router: Router = createRouter({
           }
         },
         {
-          path: '/choise-homework',
-          name: 'choise-homework',
-          component: () => import('@/views/choise-homework'),
+          path: '/choose-homework',
+          name: 'choose-homework',
+          component: () => import('@/views/choose-homework'),
           meta: {
             title: '选择练习内容'
           }
@@ -42,21 +42,21 @@ const router: Router = createRouter({
         {
           path: '/classify',
           name: 'classify',
-          component: () => import('@/views/choise-homework/classify'),
+          component: () => import('@/views/choose-homework/classify'),
           meta: {
             title: '声部云练'
           }
         },
         {
           path: '/music-list/:id',
-          component: () => import('@/views/choise-homework/music-list'),
+          component: () => import('@/views/choose-homework/music-list'),
           meta: {
             title: '声部云练'
           }
         },
         {
           path: '/classroom-detail',
-          component: () => import('@/views/choise-homework/classroom-detail'),
+          component: () => import('@/views/choose-homework/classroom-detail'),
           meta: {
             title: '教材详情'
           }

+ 0 - 0
src/views/choise-homework/classify/index.module.less → src/views/choose-homework/classify/index.module.less


+ 0 - 0
src/views/choise-homework/classify/index.tsx → src/views/choose-homework/classify/index.tsx


+ 15 - 3
src/views/choise-homework/classroom-detail/child-node.tsx → src/views/choose-homework/classroom-detail/child-node.tsx

@@ -44,13 +44,18 @@ export const onMenuChange = (item: any, status?: string) => {
 };
 
 export const onParentChangeStatus = (parent: any, childName = 'children') => {
-  let arrLength = 0;
-  let checkedLength = 0;
-  let indeterminateLength = 0;
+  let allArrLength = 0; // 所有子元素包含禁用的
+  let arrLength = 0; // 所有子元素不包含禁用的
+  let disabledLength = 0; // 禁用数量
+  let checkedLength = 0; // 所有选中的数量
+  let indeterminateLength = 0; // 所有半选数量
   if (parent.materialList && parent.materialList.length > 0) {
     parent.materialList.forEach((item: any) => {
+      allArrLength += 1;
       if (item.status !== 'disabled') {
         arrLength += 1;
+      } else {
+        disabledLength += 1;
       }
 
       if (item.status === 'checked') {
@@ -60,8 +65,11 @@ export const onParentChangeStatus = (parent: any, childName = 'children') => {
   }
   if (Array.isArray(parent[childName])) {
     parent[childName].forEach((item: any) => {
+      allArrLength += 1;
       if (item.status !== 'disabled') {
         arrLength += 1;
+      } else {
+        disabledLength += 1;
       }
 
       if (item.status === 'checked') {
@@ -85,6 +93,10 @@ export const onParentChangeStatus = (parent: any, childName = 'children') => {
   if (indeterminateLength > 0) {
     parent.status = 'indeterminate';
   }
+  // 判断是在所有子元素都禁用了
+  if (allArrLength === disabledLength) {
+    parent.status = 'disabled';
+  }
 };
 
 const ChildNode = defineComponent({

+ 0 - 0
src/views/choise-homework/classroom-detail/image/icon-arrow-down.png → src/views/choose-homework/classroom-detail/image/icon-arrow-down.png


+ 0 - 0
src/views/choise-homework/classroom-detail/image/icon-arrow.png → src/views/choose-homework/classroom-detail/image/icon-arrow.png


+ 0 - 0
src/views/choise-homework/classroom-detail/image/icon-cache-point.png → src/views/choose-homework/classroom-detail/image/icon-cache-point.png


+ 0 - 0
src/views/choise-homework/classroom-detail/image/icon-check-disabled.png → src/views/choose-homework/classroom-detail/image/icon-check-disabled.png


+ 0 - 0
src/views/choise-homework/classroom-detail/image/icon-check.png → src/views/choose-homework/classroom-detail/image/icon-check.png


+ 0 - 0
src/views/choise-homework/classroom-detail/image/icon-close.png → src/views/choose-homework/classroom-detail/image/icon-close.png


+ 0 - 0
src/views/choise-homework/classroom-detail/image/icon-course-lock.png → src/views/choose-homework/classroom-detail/image/icon-course-lock.png


+ 0 - 0
src/views/choise-homework/classroom-detail/image/icon-course.png → src/views/choose-homework/classroom-detail/image/icon-course.png


+ 0 - 0
src/views/choise-homework/classroom-detail/image/icon-imm.png → src/views/choose-homework/classroom-detail/image/icon-imm.png


+ 0 - 0
src/views/choise-homework/classroom-detail/image/icon-list.png → src/views/choose-homework/classroom-detail/image/icon-list.png


+ 0 - 0
src/views/choise-homework/classroom-detail/image/icon-nocheck.png → src/views/choose-homework/classroom-detail/image/icon-nocheck.png


+ 0 - 0
src/views/choise-homework/classroom-detail/image/icon-question.png → src/views/choose-homework/classroom-detail/image/icon-question.png


+ 0 - 0
src/views/choise-homework/classroom-detail/image/iconTip.png → src/views/choose-homework/classroom-detail/image/iconTip.png


+ 0 - 0
src/views/choise-homework/classroom-detail/image/look.svg → src/views/choose-homework/classroom-detail/image/look.svg


+ 0 - 0
src/views/choise-homework/classroom-detail/index.module.less → src/views/choose-homework/classroom-detail/index.module.less


+ 63 - 6
src/views/choise-homework/classroom-detail/index.tsx → src/views/choose-homework/classroom-detail/index.tsx

@@ -3,7 +3,7 @@ import { state } from '@/state';
 import { Button, Cell, Collapse, CollapseItem, Popup, showToast } from 'vant';
 import { defineComponent, onMounted, reactive, TransitionGroup } from 'vue';
 import styles from './index.module.less';
-import { useRoute, useRouter } from 'vue-router';
+import { useRoute } from 'vue-router';
 import { postMessage } from '@/helpers/native-message';
 import iconQuestion from './image/icon-question.png';
 import iconNoCheck from './image/icon-nocheck.png';
@@ -11,7 +11,6 @@ import iconImm from './image/icon-imm.png';
 import iconCheck from './image/icon-check.png';
 import iconCheckDisabled from './image/icon-check-disabled.png';
 
-import { browser } from '@/helpers/utils';
 import OEmpty from '@/components/o-empty';
 import iconList from './image/icon-list.png';
 import OHeader from '@/components/o-header';
@@ -39,7 +38,8 @@ export default defineComponent({
       ruleStatus: false,
       isDownloading: false, // 是否在下载资源
       parentCollapse: '' as any,
-      childrenCollapse: '' as any
+      childrenCollapse: '' as any,
+      disabledIds: [] as any
     });
 
     /** 获取课件详情 */
@@ -62,17 +62,31 @@ export default defineComponent({
             route.query.id
         );
         if (Array.isArray(res?.data)) {
+          // data.disabledIds = [1082460, 1082461, 1082462, 1082463];
           res.data.forEach((item: any) => {
             item.status = 'nochecked';
             item.children = item.knowledgePointList || [];
             item.id = item.coursewareDetailId;
             item.name = item.coursewareDetailName;
-            // const tempK = item.knowledgePointList || [];
             formatDataList(item.children);
           });
 
           data.list = res.data;
-          console.log(data.list, 'data.list');
+          console.log(data.list, 'data.list', data.disabledIds);
+
+          const allIds = {} as any;
+          data.disabledIds.forEach((item: any) => {
+            allIds[item] = formatGetIds(item, data.list);
+          });
+          console.log(allIds, 'allIds');
+
+          for (const item in allIds) {
+            const ids = allIds[item];
+            for (let i = ids.length - 2; i >= 0; i--) {
+              const listItem = getFormatIdList(ids[i], data.list);
+              onParentChangeStatus(listItem);
+            }
+          }
         }
       } catch (error) {
         //
@@ -87,8 +101,12 @@ export default defineComponent({
         item.collapse = '';
         if (Array.isArray(item.materialList)) {
           item.materialList.forEach((item: any) => {
-            if (state.vIds.includes(item.id + '')) {
+            if (
+              state.vIds.includes(item.id + '') ||
+              item.typeCode !== 'VIDEO'
+            ) {
               item.status = 'disabled';
+              data.disabledIds.push(item.id);
             } else {
               item.status = 'nochecked';
             }
@@ -106,6 +124,45 @@ export default defineComponent({
       return tempList;
     };
 
+    // 获取数据的编号
+    const formatGetIds = (id: any, list: any[], ids = [] as any) => {
+      for (const item of list) {
+        if (item.id === id) {
+          return [...ids, id];
+        } else {
+          if (Array.isArray(item.materialList)) {
+            for (const material of item.materialList) {
+              if (material.id === id) {
+                return [...ids, item.id, id];
+              }
+            }
+          }
+        }
+        if (item.children && item.children.length > 0) {
+          const cIds: any = formatGetIds(id, item.children, [...ids, item.id]);
+          if (cIds.includes(id)) {
+            return cIds;
+          }
+        }
+      }
+      return ids;
+    };
+
+    // 获取编号对应的数组
+    const getFormatIdList = (id: any, list: any[]) => {
+      let tempI: any = {};
+      for (const item of list) {
+        if (item.id === id) {
+          console.log(item, id);
+          tempI = item;
+        }
+        if (item.children && item.children.length > 0 && !tempI.id) {
+          tempI = getFormatIdList(id, item.children);
+        }
+      }
+      return tempI;
+    };
+
     const getKnowledgeMaterialIds = (list: any = []) => {
       const tempList: any = [];
       list.forEach((item: any) => {

+ 0 - 0
src/views/choise-homework/images/banner-bg.png → src/views/choose-homework/images/banner-bg.png


+ 8 - 1
src/views/choise-homework/index.module.less → src/views/choose-homework/index.module.less

@@ -42,7 +42,7 @@
 
 .topTabs {
   background-color: #fff;
-  margin: 0 12px;
+  margin: 12px 12px 0;
   border-radius: 12px 12px 0 0;
 
   :global {
@@ -114,6 +114,13 @@
       }
     }
   }
+
+  &.containerClassOnly {
+    min-height: calc(100vh - var(--header-height) - 12px);
+    border-radius: 12px 12px 0 0;
+    padding-top: 14px;
+    margin-top: 12px;
+  }
 }
 
 .items {

+ 2 - 1
src/views/choise-homework/index.tsx → src/views/choose-homework/index.tsx

@@ -253,7 +253,8 @@ export default defineComponent({
         <div
           class={[
             styles.container,
-            state.topKey === 'courseware' ? styles.containerClass : ''
+            state.topKey === 'courseware' ? styles.containerClass : '',
+            pageType === 'onlymusic' ? styles.containerClassOnly : ''
           ]}>
           {state.topKey === 'music' ? (
             <Transition name="van-fade">

+ 0 - 0
src/views/choise-homework/music-list/icons/icon_search.png → src/views/choose-homework/music-list/icons/icon_search.png


+ 0 - 0
src/views/choise-homework/music-list/icons/music.png → src/views/choose-homework/music-list/icons/music.png


+ 0 - 0
src/views/choise-homework/music-list/icons/recording.svg → src/views/choose-homework/music-list/icons/recording.svg


+ 0 - 0
src/views/choise-homework/music-list/icons/tips.png → src/views/choose-homework/music-list/icons/tips.png


+ 0 - 0
src/views/choise-homework/music-list/icons/vip.png → src/views/choose-homework/music-list/icons/vip.png


+ 0 - 0
src/views/choise-homework/music-list/index.module.less → src/views/choose-homework/music-list/index.module.less


+ 0 - 0
src/views/choise-homework/music-list/index.tsx → src/views/choose-homework/music-list/index.tsx


+ 0 - 0
src/views/choise-homework/music-list/modals/choosePartName/index-rem.module.less → src/views/choose-homework/music-list/modals/choosePartName/index-rem.module.less


+ 0 - 0
src/views/choise-homework/music-list/modals/choosePartName/index.module.less → src/views/choose-homework/music-list/modals/choosePartName/index.module.less


+ 1 - 1
src/views/choise-homework/music-list/modals/choosePartName/index.tsx → src/views/choose-homework/music-list/modals/choosePartName/index.tsx

@@ -2,7 +2,7 @@ import { defineComponent } from 'vue';
 import { Picker, Button } from 'vant';
 import styles from './index.module.less';
 import stylesRem from './index-rem.module.less';
-import { getVoiceChinesName } from '@/views/choise-homework/pageState';
+import { getVoiceChinesName } from '@/views/choose-homework/pageState';
 
 export default defineComponent({
   name: 'choosePartName',

+ 0 - 0
src/views/choise-homework/pageState.tsx → src/views/choose-homework/pageState.tsx


+ 21 - 0
src/views/exercise-after-class/index.module.less

@@ -321,6 +321,11 @@
   flex-direction: column;
   justify-content: center;
 
+  :global {
+    color: #AAAAAA;
+    font-size: 18px;
+  }
+
   .title {
     font-weight: 600;
     font-size: 18px;
@@ -329,6 +334,7 @@
   }
 
   .content {
+    padding: 20px 0 25px;
     font-size: 16px;
     color: #666666;
     line-height: 24px;
@@ -336,5 +342,20 @@
 
   .btnGroup {
     display: flex;
+    padding: 0 15px;
+    width: 100%;
+
+    :global {
+      .van-button:first-child {
+        font-weight: 400;
+      }
+
+      .van-button+.van-button {
+        margin-left: 15px;
+        font-weight: 500;
+        font-size: 16px;
+        color: #FFFFFF;
+      }
+    }
   }
 }

+ 38 - 39
src/views/exercise-after-class/index.tsx

@@ -74,6 +74,9 @@ export default defineComponent({
     const headeRef = ref();
     const data = reactive({
       visiableStatus: true,
+      visiableConfirmText: '下一题',
+      isLastIndex: false,
+      itemIndex: 0,
       isMember: false, // 是否为会员
       videoData: null as any,
       trainings: [] as any[],
@@ -240,7 +243,7 @@ export default defineComponent({
       ) {
         let isLastIndex = false;
         let itemIndex = 0;
-        console.log(data.isPlayBaseStatus, data.isPlayAll, data.trainings);
+        // console.log(data.isPlayBaseStatus, data.isPlayAll, data.trainings);
         if (data.isPlayBaseStatus) {
           itemIndex = data.trainings.findIndex(
             (n: any) => n.id == data.videoData?.id
@@ -262,37 +265,32 @@ export default defineComponent({
           isLastIndex = status;
         }
 
-        showConfirmDialog({
-          title: '课后作业',
-          message: '你已完成该练习~',
-          confirmButtonColor: 'var(--van-primary)',
-          confirmButtonText: isLastIndex ? '完成' : '下一题',
-          cancelButtonText: '继续'
-        })
-          .then(() => {
-            if (!isLastIndex) {
-              const nextItem = data.trainings[itemIndex + 1];
-              if (nextItem.musicScoreName) {
-                popupData.tabName = nextItem.musicScoreName;
-              }
-              data.itemList = [nextItem];
-              data.videoData = nextItem;
-              handleExerciseCompleted();
-            } else {
-              postMessage({ api: 'goBack' });
-            }
-          })
-          .catch(() => {
-            console.log(
-              data.trainings,
-              itemIndex,
-              data.trainings[itemIndex],
-              'data.trainings[itemIndex]'
-            );
-            data.trainings[itemIndex].currentTime = 0;
-            data.trainings[itemIndex].videoEle.currentTime(0);
-          });
+        data.visiableConfirmText = isLastIndex ? '完成' : '下一题';
+        data.visiableStatus = true;
+        data.itemIndex = itemIndex;
+        data.isLastIndex = isLastIndex;
+      }
+    };
+
+    const dialogConfirm = () => {
+      if (!data.isLastIndex) {
+        const nextItem = data.trainings[data.itemIndex + 1];
+        if (nextItem.musicScoreName) {
+          popupData.tabName = nextItem.musicScoreName;
+        }
+        data.itemList = [nextItem];
+        data.videoData = nextItem;
+        handleExerciseCompleted();
+      } else {
+        postMessage({ api: 'goBack' });
       }
+
+      data.visiableStatus = false;
+    };
+    const dialogCancel = () => {
+      data.trainings[data.itemIndex].currentTime = 0;
+      data.trainings[data.itemIndex].videoEle.currentTime(0);
+      data.visiableStatus = false;
     };
 
     watch(pageVisibility, (value: any) => {
@@ -368,21 +366,22 @@ export default defineComponent({
           </Transition>
         </div>
 
-        {/* <Popup
+        <Popup
           v-model:show={data.visiableStatus}
-          closeable
-          class={styles.visiablePopup}>
+          // closeable
+          class={styles.visiablePopup}
+          closeOnClickOverlay={false}>
           <div class={styles.title}>温馨提示</div>
           <p class={styles.content}>您已完成该练习~</p>
           <div class={styles.btnGroup}>
-            <Button color="#ccc" round>
-              取消
+            <Button round block onClick={dialogCancel}>
+              继续
             </Button>
-            <Button color="#FF8057" round>
-              下一步
+            <Button color="#01C1B5" round block onClick={dialogConfirm}>
+              {data.visiableConfirmText}
             </Button>
           </div>
-        </Popup> */}
+        </Popup>
       </div>
     );
   }