Ver Fonte

Merge branch 'iteration-20240613-temp' into online

lex há 1 ano atrás
pai
commit
b9ae2dbb7b

+ 6 - 1
src/views/courseware-list/api.ts

@@ -81,4 +81,9 @@ export const api_classDetailCourseware = (params: any) => {
   return request.post('/edu-app/classLessonCourseware/classKnowledge', {
     data: params
   });
-};
+};
+
+/** 检测教材是否存在 */
+export const api_coursewareCheckUpdate = (params: any) => {
+  return request.get('/edu-app/classLessonCourseware/checkUpdate/' + params.id);
+};

+ 46 - 3
src/views/courseware-list/component/book/index.tsx

@@ -18,9 +18,12 @@ import queryString from 'query-string';
 import { state } from '@/state';
 import {
   api_lessonDetailCourseware,
-  api_classDetailCourseware
+  api_classDetailCourseware,
+  api_coursewareCheckUpdate
 } from '../../api';
 import SelectCoursewarePop from '@/components/select-courseware-pop';
+import request from '@/helpers/request';
+import CoursewareReload from '../../courseware-reload';
 
 export default defineComponent({
   name: 'the-book',
@@ -29,6 +32,10 @@ export default defineComponent({
       type: Object as PropType<any>,
       default: () => ({})
     },
+    bookLessonId: {
+      type: String,
+      default: ''
+    },
     tab: {
       type: String,
       default: ''
@@ -46,10 +53,9 @@ export default defineComponent({
       default: ''
     }
   },
-  emits: ['close'],
+  emits: ['close', 'confirm'],
   setup(props, { emit }) {
     const router = useRouter();
-    console.log(state.user.data.phone);
     const lastTimeKey = 'lastTime' + (state?.user?.data?.phone ?? '');
     const debounceSkip = ref(false);
     const data = reactive({
@@ -63,6 +69,7 @@ export default defineComponent({
       coursewareList: [] as any
     });
     const showSelectCourseware = ref(false);
+    const reloadStatus = ref(false);
     const showGuide = ref(false);
     const isend = ref(false);
     const step = ref(0);
@@ -282,14 +289,32 @@ export default defineComponent({
       }
     );
 
+    // 检测是否更新
+    const checkCoursewareUpdate = async () => {
+      if (props.tab === 'course') {
+        const { data } = await api_coursewareCheckUpdate({
+          id: props.bookLessonId
+        });
+        return data || false;
+      }
+      return false;
+    };
+
     // 检测有几个课件
     const checkCourseware = async (item: any) => {
+      console.log(props.tab, 'tab');
       if (item.id) {
         if (!item.containMaterial) {
           showToast('暂无资源');
           return;
         }
 
+        const isUpdate = await checkCoursewareUpdate();
+        if (isUpdate) {
+          reloadStatus.value = true;
+          return;
+        }
+
         if (item.coursewareNum) {
           try {
             const res =
@@ -325,6 +350,12 @@ export default defineComponent({
       }
     };
     const handleOpenPlay = async (item: any) => {
+      const isUpdate = await checkCoursewareUpdate();
+      if (isUpdate) {
+        reloadStatus.value = true;
+        return;
+      }
+
       if (item.id) {
         if (debounceSkip.value) return;
         debounceSkip.value = true;
@@ -494,6 +525,18 @@ export default defineComponent({
             }}
             onSelect={item => handleOpenPlay(item)}></SelectCoursewarePop>
         )}
+
+        {reloadStatus.value && (
+          <CoursewareReload
+            onClose={() => {
+              reloadStatus.value = false;
+            }}
+            onConfirm={() => {
+              handleClose();
+              showSelectCourseware.value = false;
+              emit('confirm');
+            }}></CoursewareReload>
+        )}
       </div>
     );
   }

BIN
src/views/courseware-list/courseware-reload/btn-cancel.png


BIN
src/views/courseware-list/courseware-reload/btn-confirm.png


+ 73 - 0
src/views/courseware-list/courseware-reload/index.module.less

@@ -0,0 +1,73 @@
+.popBox {
+  position: fixed;
+  left: 0;
+  top: 0;
+  width: 100vw;
+  height: 100vh;
+  background: rgba(0, 0, 0, 0.7);
+  z-index: 3000;
+}
+
+.popBody {
+  // width: 286px;
+  // height: 243px;
+
+  width: 290px;
+  height: 256px;
+  position: absolute;
+  left: 50%;
+  top: 50%;
+  transform: translate(-50%, -50%);
+  z-index: 200;
+
+  .popBg {
+    position: absolute;
+    left: 0;
+    top: 0;
+    // width: 286px;
+    // height: 243px;
+    width: 290px;
+    height: 256px;
+  }
+
+  .popClose {
+    position: absolute;
+    top: 49px;
+    right: 3px;
+    width: 24px;
+    height: 25px;
+  }
+
+  .list {
+    width: 258px;
+    margin-top: 135px;
+    margin-left: 17px;
+    position: relative;
+    font-size: 14px;
+    color: #333333;
+    line-height: 22px;
+    padding-bottom: 25px;
+    text-align: center;
+
+    span {
+      color: #FF5A56;
+    }
+  }
+
+  .btnGroup {
+    position: relative;
+    margin: 0 auto;
+    display: flex;
+    justify-content: center;
+    text-align: center;
+
+    img {
+      width: 112px;
+      height: 40px;
+
+      &+img {
+        margin-left: 15px;
+      }
+    }
+  }
+}

+ 62 - 0
src/views/courseware-list/courseware-reload/index.tsx

@@ -0,0 +1,62 @@
+import { defineComponent, ref, reactive, onMounted } from 'vue';
+import styles from './index.module.less';
+import popBox from './select_courseware_box.png';
+import popClose from './selce_courseware_close.png';
+import btnCancel from './btn-cancel.png';
+import btnConfirm from './btn-confirm.png';
+
+export default defineComponent({
+  name: 'courseware-reload',
+  props: {
+    list: {
+      type: Array,
+      default: () => []
+    },
+    kjId: {
+      type: String,
+      default: ''
+    }
+  },
+  emits: ['close', 'confirm'],
+  setup(props, { emit }) {
+    return () => (
+      <div
+        class={styles.popBox}
+        onClick={(e: Event) => e.stopPropagation()}
+        onTouchmove={(e: TouchEvent) => e.stopPropagation()}>
+        <div class={styles.popBody}>
+          <img class={styles.popBg} src={popBox} />
+          <img
+            class={styles.popClose}
+            src={popClose}
+            onClick={(e: Event) => {
+              emit('close');
+            }}
+          />
+
+          <div class={styles.list} id="list">
+            课程教材已更新,是否重新加载?
+          </div>
+
+          <div class={styles.btnGroup}>
+            <img
+              class={styles.btn}
+              src={btnCancel}
+              onClick={() => {
+                emit('close');
+              }}
+            />
+            <img
+              class={styles.btn}
+              src={btnConfirm}
+              onClick={() => {
+                emit('close');
+                emit('confirm');
+              }}
+            />
+          </div>
+        </div>
+      </div>
+    );
+  }
+});

BIN
src/views/courseware-list/courseware-reload/selce_courseware_close.png


BIN
src/views/courseware-list/courseware-reload/select_courseware_box.png


+ 31 - 11
src/views/courseware-list/index.tsx

@@ -47,6 +47,7 @@ import MEmpty from '@/components/m-empty';
 import deepClone from '@/helpers/deep-clone';
 import book from './component/book';
 import { browser } from '@/helpers/utils';
+import CoursewareReload from './courseware-reload';
 
 export const BOOK_DATA = {
   grades: [
@@ -72,6 +73,7 @@ export default defineComponent({
   setup() {
     const router = useRouter();
     const popoverShow = ref(false);
+    const reloadStatus = ref(false);
     const baseBookVerionList = ref([] as any);
     const bookVersionList = ref([] as any);
     // 返回
@@ -118,6 +120,7 @@ export default defineComponent({
       tab: 'all',
       details: [] as any[],
       bookData: {} as any,
+      bookLessonId: '',
       subjectList: [] as any,
       instrumentList: [] as any, // 乐器列表
       showBook: false,
@@ -315,19 +318,21 @@ export default defineComponent({
         if (res?.code == 200 && Array.isArray(res?.data?.lessonList)) {
           data.details = res.data.lessonList || [];
           data.bookData = res.data;
+          data.bookLessonId = item.id;
           console.log('🚀 ~ data.details course:', data.details);
         } else {
-          showConfirmDialog({
-            title: '提示',
-            message: '课程教材已更新,是否重新加载?'
-          })
-            .then(() => {
-              // on confirm
-              getData();
-            })
-            .catch(() => {
-              // on cancel
-            });
+          // showConfirmDialog({
+          //   title: '提示',
+          //   message: '课程教材已更新,是否重新加载?'
+          // })
+          //   .then(() => {
+          //     // on confirm
+          //     getData();
+          //   })
+          //   .catch(() => {
+          //     // on cancel
+          //   });
+          reloadStatus.value = true;
           return;
         }
       } else {
@@ -338,6 +343,7 @@ export default defineComponent({
         if (res?.code == 200 && Array.isArray(res?.data?.lessonList)) {
           data.details = res.data.lessonList || [];
           data.bookData = res.data;
+          data.bookLessonId = item.id;
           console.log('🚀 ~ data.details:', data.details);
         }
       }
@@ -501,12 +507,16 @@ export default defineComponent({
         <TheBook
           show={data.showBook}
           bookData={data.bookData}
+          bookLessonId={data.bookLessonId}
           // subjectId={forms.subjectId}
           tab={data.tab}
           rect={data.book}
           onClose={() => {
             data.showBook = false;
           }}
+          onConfirm={() => {
+            getData();
+          }}
         />
 
         {isShowGuide.value ? <CoursewareList></CoursewareList> : null}
@@ -623,6 +633,16 @@ export default defineComponent({
             </div>
           </div>
         </Popup>
+
+        {reloadStatus.value && (
+          <CoursewareReload
+            onClose={() => {
+              reloadStatus.value = false;
+            }}
+            onConfirm={() => {
+              getData();
+            }}></CoursewareReload>
+        )}
       </div>
     );
   }