Explorar el Código

Merge branch 'iteration-create' into dev

lex hace 1 año
padre
commit
6126e817bf

+ 5 - 0
src/components/m-dialog/index.tsx

@@ -40,6 +40,10 @@ export default defineComponent({
     dialogMarginTop: {
       type: String,
       default: '0px'
+    },
+    allowHtml: {
+      type: Boolean,
+      default: false
     }
   },
   emits: ['cancel', 'confirm', 'update:show'],
@@ -64,6 +68,7 @@ export default defineComponent({
         v-model:show={state.show}
         message={props.message}
         messageAlign={props.messageAlign}
+        allowHtml={props.allowHtml}
         confirmButtonText={props.confirmButtonText}
         cancelButtonText={props.cancelButtonText}
         showConfirmButton={props.showConfirmButton}

+ 3 - 3
src/components/m-empty/index.module.less

@@ -7,8 +7,8 @@
 
   :global {
     .van-empty__image {
-      width: 198px;
-      height: 124px;
+      width: 240px;
+      height: 240px;
     }
 
     .van-empty__bottom {
@@ -24,4 +24,4 @@
     padding: 0 24px;
     height: 36px;
   }
-}
+}

+ 6 - 2
src/helpers/request.ts

@@ -76,7 +76,9 @@ request.interceptors.response.use(
     if (res.status > 299 || res.status < 200) {
       const msg = '服务器错误,状态码' + res.status;
       clearTimeout(toast);
-      showToast(msg);
+      setTimeout(() => {
+        showToast(msg);
+      }, 60);
       throw new Error(msg);
     }
     const data = await res.clone().json();
@@ -92,7 +94,9 @@ request.interceptors.response.use(
       }
       if (!(data.code === 403 || data.code === 5000)) {
         clearTimeout(toast);
-        showToast(msg);
+        setTimeout(() => {
+          showToast(msg);
+        }, 60);
       }
       const browserInfo = browser();
       if (data.code === 5000 || data.code === 403) {

+ 10 - 1
src/router/routes-common.ts

@@ -102,6 +102,15 @@ export default [
         }
       },
       {
+        path: '/error-question-mode',
+        name: 'error-question-mode',
+        component: () =>
+          import('@/views/knowledge-library/error-question-mode'),
+        meta: {
+          title: '错题练习'
+        }
+      },
+      {
         path: '/courseware-list',
         name: 'courseware-list',
         component: () => import('@/views/courseware-list/index'),
@@ -131,7 +140,7 @@ export default [
         meta: {
           title: '小酷AI'
         }
-      },
+      }
     ]
   },
   ...rootRouter

+ 107 - 0
src/views/knowledge-library/error-question-mode/index.module.less

@@ -0,0 +1,107 @@
+.unitDetail {
+  min-height: 100vh;
+  overflow: hidden;
+  background: url('../images/bg.png') no-repeat top center;
+  background-size: contain;
+  position: relative;
+  background-color: #ABE8FF;
+}
+
+.unitSwipe {
+  margin-top: 75px;
+
+  .questionTitle {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    font-size: 14px;
+    font-weight: bold;
+    color: #333;
+    padding-bottom: 12px;
+
+    .questionNum {
+      span {
+        color: #FF5A56;
+      }
+    }
+
+    .questionType {
+      display: flex;
+      align-items: center;
+
+      span {
+        white-space: nowrap;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        max-width: 160px;
+      }
+
+      i {
+        margin-right: 6px;
+        display: inline-block;
+        width: 20px;
+        height: 20px;
+        background: url('../images/icon-book.png') no-repeat center;
+        background-size: contain;
+      }
+    }
+
+    .controlBtn {
+      padding: 0 12px;
+    }
+  }
+}
+
+.wapList {
+  width: 44px;
+  height: 49px;
+  flex-shrink: 0;
+  margin-left: 18px;
+}
+
+.btnSection {
+  background-color: #fff;
+  padding-top: 20px;
+  --van-button-default-height: 49px;
+
+  .prevBtn,
+  .nextBtn,
+  .activePrevBtn {
+    width: 124px !important;
+    border: none;
+    color: #fff;
+  }
+
+  .prevBtn {
+    background: url('../images/prev_btn_bg.png') no-repeat center;
+    background-size: contain;
+  }
+
+  .activePrevBtn {
+    background: url('../images/next_btn_bg.png') no-repeat center;
+    background-size: contain;
+  }
+
+  .nextBtn {
+    background: url('../images/next_btn_bg.png') no-repeat center;
+    background-size: contain;
+  }
+
+  :global {
+    .van-button--disabled {
+      color: #587C98;
+
+      &:before {
+        opacity: 0.2 !important;
+      }
+    }
+  }
+}
+
+.right {
+  color: #14C295;
+}
+
+.error {
+  color: #FF5A56;
+}

+ 688 - 0
src/views/knowledge-library/error-question-mode/index.tsx

@@ -0,0 +1,688 @@
+import { ActionSheet, Button, Image, Popup, Swipe, SwipeItem } from 'vant';
+import {
+  computed,
+  defineComponent,
+  nextTick,
+  onMounted,
+  onUnmounted,
+  reactive,
+  watch,
+  ref
+} from 'vue';
+import { useRoute, useRouter } from 'vue-router';
+import styles from './index.module.less';
+import iconButtonList from '../images/icon-button-list.png';
+import MSticky from '@/components/m-sticky';
+import ChoiceQuestion from '../model/choice-question';
+import AnswerList from '../model/answer-list';
+import DragQuestion from '../model/drag-question';
+import KeepLookQuestion from '../model/keep-look-question';
+import PlayQuestion from '../model/play-question';
+import ErrorMode from '../model/error-mode';
+import ResultFinish from '../model/result-finish';
+import { eventUnit, QuestionType } from '../unit';
+import request from '@/helpers/request';
+import { useRect } from '@vant/use';
+import MHeader from '@/components/m-header';
+import { useEventListener, useInterval, useWindowScroll } from '@vueuse/core';
+
+export default defineComponent({
+  name: 'unit-detail',
+  setup() {
+    const route = useRoute();
+    const router = useRouter();
+    const swipeRef = ref();
+    const state = reactive({
+      background: 'transparent',
+      color: '#fff',
+      visiableError: false,
+      visiableAnswer: false,
+      id: route.query.id,
+      currentIndex: 0,
+      questionList: [] as any,
+      page: 1,
+      rows: 10,
+      total: 0,
+      isFinish: false, // 是否完成加载
+      visiableInfo: {
+        show: false,
+        operationType: 'RESULT' as 'RESULT' | 'BACK' | 'CONTINUE' | 'GRASP',
+        type: 'DEFAULT' as 'DEFAULT' | 'FAIL' | 'PASS' | 'GOOD' | 'COUNTDOWN',
+        content: '',
+        showCancelButton: false,
+        confirmButtonText: '',
+        cancelButtonText: '',
+        title: '',
+        graspItem: {} as any
+      },
+      nextStatus: false,
+      swipeHeight: 'auto' as any,
+      answerAnalysis: '',
+      questionTypeCode: '',
+      overResult: {
+        time: '00:00', // 时长
+        questionLength: 0, // 答题数
+        errorLength: 0, // 错题数
+        rate: 0 // 正确率
+      }
+    });
+
+    // 计时
+    const { counter, resume, pause } = useInterval(1000, { controls: true });
+
+    const getExamDetails = async () => {
+      try {
+        const { data } = await request.post(
+          '/edu-app/studentUnitExamination/errorEdition',
+          {
+            data: {
+              page: state.page,
+              rows: state.rows
+            }
+          }
+        );
+        const temp = data || {};
+        state.total = temp.total || 0;
+        state.isFinish = temp.current < temp.pages ? false : true;
+        temp.records.forEach((item: any) => {
+          item.showAnalysis = false; // 默认不显示解析
+          item.grasp = false; // 是否掌握题目
+          item.analysis = {
+            message: item.answerAnalysis,
+            topic: true, // 是否显示结果
+            userResult: false // 用户答题对错
+          };
+          item.userAnswer = []; // 用户答题
+        });
+        state.questionList.push(...(temp.records || []));
+      } catch {
+        //
+      }
+    };
+
+    // 监听索引
+    watch(
+      () => state.currentIndex,
+      () => {
+        console.log(state.currentIndex, 'index');
+        // 判断是否在倒数第三题,并且没有加载完
+        if (
+          state.currentIndex + 3 >= state.questionList.length &&
+          !state.isFinish
+        ) {
+          state.page = state.page + 1;
+          getExamDetails();
+        }
+      }
+    );
+
+    /** 已掌握此题 */
+    const onGraspQuestion = async (item: any) => {
+      // 判断是否掌握此题
+      if (item.grasp) return;
+      state.visiableInfo.show = true;
+      state.visiableInfo.title = '确定掌握此题?';
+      state.visiableInfo.showCancelButton = true;
+      state.visiableInfo.operationType = 'GRASP';
+      state.visiableInfo.cancelButtonText = '取消';
+      state.visiableInfo.confirmButtonText = '确定';
+      state.visiableInfo.content = `你确定已掌握该题知识要点,此题将移除你的错题集。`;
+      state.visiableInfo.graspItem = item;
+    };
+
+    /** 已掌握此题确认 */
+    const onGraspQuestionConfirm = async () => {
+      try {
+        state.visiableInfo.show = false;
+        await request.get('/edu-app/studentExaminationErrorEdition/del', {
+          hideLoading: false,
+          params: {
+            studentExaminationErrorEditionId:
+              state.visiableInfo.graspItem.studentExaminationErrorEditionId
+          }
+        });
+        state.visiableInfo.graspItem.grasp = true;
+      } catch {
+        //
+      }
+    };
+
+    /**
+     * @description 下一题 | 测试完成
+     */
+    const onNextQuestion = async () => {
+      try {
+        const questionList = state.questionList || [];
+
+        let result: any = {};
+        questionList.forEach((question: any, index: number) => {
+          // 格式化所有题目的答案
+          if (index === state.currentIndex) {
+            result = {
+              questionId: question.id,
+              details: question.userAnswer || []
+            };
+          }
+        });
+
+        const { data } = await request.post(
+          '/edu-app/studentUnitExamination/submitTrainingAnswer',
+          {
+            hideLoading: true,
+            data: result
+          }
+        );
+        // 初始化是否显示解析
+        questionList.forEach((question: any, index: number) => {
+          // 格式化所有题目的答案
+          if (index === state.currentIndex) {
+            state.answerAnalysis = question.answerAnalysis;
+            state.questionTypeCode = question.questionTypeCode;
+            question.showAnalysis = true;
+            question.analysis.userResult = data;
+          }
+        });
+
+        // 判断是否是最后一题
+        if (state.questionList.length === state.currentIndex + 1) {
+          eventUnit.emit('unitAudioStop');
+          state.visiableInfo.show = true;
+          state.visiableInfo.title = '练习完成';
+          state.visiableInfo.showCancelButton = true;
+          state.visiableInfo.operationType = 'CONTINUE';
+          state.visiableInfo.cancelButtonText = '再等等';
+          state.visiableInfo.confirmButtonText = '确认完成';
+          state.visiableInfo.content = `确认本次练习的题目都完成了吗?`;
+
+          return;
+        }
+
+        if (data) {
+          swipeRef.value?.next();
+        } else {
+          state.visiableError = true;
+        }
+      } catch {
+        //
+      }
+    };
+
+    //
+    const getAnswerResult = computed(() => {
+      const questionList = state.questionList || [];
+      let count = 0;
+      let passCount = 0;
+      let noPassCount = 0;
+      questionList.forEach((item: any) => {
+        if (item.showAnalysis) {
+          count += 1;
+          if (item.analysis.userResult) {
+            passCount += 1;
+          } else {
+            noPassCount += 1;
+          }
+        }
+      });
+
+      return {
+        count,
+        passCount,
+        noPassCount
+      };
+    });
+
+    /**
+     * @description 重置当前的题目高度
+     * @param {any} scroll 是否滚动到顶部
+     */
+    let size = 0;
+    const resizeSwipeItemHeight = (scroll = true) => {
+      nextTick(() => {
+        scroll && window.scrollTo(0, 0);
+        setTimeout(() => {
+          const currentItemDom: any = document
+            .querySelectorAll('.van-swipe-item')
+            [state.currentIndex]?.querySelector('.swipe-item-question');
+
+          const allImg = currentItemDom?.querySelectorAll(
+            '.answerTitleImg img'
+          );
+          let status = true;
+          // console.log(allImg)
+          allImg?.forEach((img: any) => {
+            if (!img.complete) {
+              status = false;
+            }
+          });
+          // 判断图片是否加载完了
+          if (!status && size < 3) {
+            setTimeout(() => {
+              size += 1;
+              resizeSwipeItemHeight(scroll);
+            }, 300);
+          }
+          if (status) {
+            size = 0;
+          }
+          const rect = useRect(currentItemDom);
+          state.swipeHeight = rect.height;
+        }, 100);
+      });
+    };
+
+    const onConfirmResult = () => {
+      if (state.visiableInfo.operationType === 'RESULT') {
+        state.visiableInfo.show = false;
+        onAfter();
+      } else if (state.visiableInfo.operationType === 'BACK') {
+        state.visiableInfo.show = false;
+        onAfter();
+      } else if (state.visiableInfo.operationType === 'CONTINUE') {
+        onResultPopup();
+      } else if (state.visiableInfo.operationType === 'GRASP') {
+        onGraspQuestionConfirm();
+      }
+    };
+    const onCloseResult = async () => {
+      const operationType = state.visiableInfo.operationType;
+      if (operationType === 'RESULT') {
+      } else if (operationType === 'BACK') {
+        state.visiableInfo.show = false;
+        window.history.pushState(null, '', document.URL);
+        window.addEventListener('popstate', onBack, false);
+      } else if (operationType === 'CONTINUE' || operationType === 'GRASP') {
+        state.visiableInfo.show = false;
+      }
+    };
+
+    /** 结果页面弹窗 */
+    const onResultPopup = () => {
+      const answerResult = getAnswerResult.value;
+      let rate = 0;
+
+      if (answerResult.count > 0) {
+        rate = Math.floor((answerResult.passCount / answerResult.count) * 100);
+      }
+
+      const times = counter.value;
+      const minute =
+        Math.floor(times / 60) >= 10
+          ? Math.floor(times / 60)
+          : '0' + Math.floor(times / 60);
+      const seconds = times % 60 >= 10 ? times % 60 : '0' + (times % 60);
+      state.overResult = {
+        time: minute + ':' + seconds, // 时长
+        questionLength: answerResult.count, // 答题数
+        errorLength: answerResult.noPassCount, // 错题数
+        rate // 正确率
+      };
+      // 重置计时
+      pause();
+      counter.value = 0;
+
+      // 60 及格
+      // 85 及以上优秀
+      state.visiableInfo.show = true;
+      state.visiableInfo.title = '已完成';
+      state.visiableInfo.showCancelButton = false;
+      state.visiableInfo.operationType = 'RESULT';
+      state.visiableInfo.confirmButtonText = '确认';
+      state.visiableInfo.content = `<div>您已完成本次测试,答对<span class='${
+        styles.right
+      }'>${answerResult.passCount}</span>,答错<span class='${styles.error}'>${
+        answerResult.count - answerResult.passCount
+      }</span>,正确率${rate}%~</div>`;
+    };
+
+    // 拦截
+    const onBack = () => {
+      const answerResult = getAnswerResult.value;
+      state.visiableInfo.show = true;
+      state.visiableInfo.title = '确认退出吗?';
+      state.visiableInfo.showCancelButton = true;
+      state.visiableInfo.operationType = 'BACK';
+      state.visiableInfo.cancelButtonText = '取消';
+      state.visiableInfo.confirmButtonText = '确定';
+      state.visiableInfo.content = `您已经完成${
+        answerResult.passCount + answerResult.noPassCount
+      }道题了,继续做题可以巩固所学知识哦~`;
+      eventUnit.emit('unitAudioStop');
+    };
+
+    const onAfter = () => {
+      window.removeEventListener('popstate', onBack, false);
+      router.back();
+    };
+
+    onMounted(async () => {
+      useEventListener(document, 'scroll', () => {
+        const { y } = useWindowScroll();
+        if (y.value > 52) {
+          state.background = '#fff';
+          state.color = '#323333';
+        } else {
+          state.background = 'transparent';
+          state.color = '#fff';
+        }
+      });
+      await getExamDetails();
+
+      resizeSwipeItemHeight();
+
+      // window.history.pushState(null, '', document.URL);
+      // window.addEventListener('popstate', onBack, false);
+    });
+
+    onUnmounted(() => {
+      // 关闭所有音频
+      eventUnit.emit('unitAudioStop');
+    });
+    return () => (
+      <div class={styles.unitDetail}>
+        <MSticky position="top">
+          <MHeader
+            border={false}
+            background={state.background}
+            color={state.color}
+          />
+        </MSticky>
+        <Swipe
+          loop={false}
+          showIndicators={false}
+          ref={swipeRef}
+          duration={300}
+          touchable={false}
+          class={styles.unitSwipe}
+          style={{ paddingBottom: '12px' }}
+          lazyRender
+          height={state.swipeHeight}
+          onChange={(index: number) => {
+            eventUnit.emit('unitAudioStop');
+            state.currentIndex = index;
+            resizeSwipeItemHeight();
+          }}>
+          {state.questionList.map((item: any, index: number) => (
+            <SwipeItem>
+              <div class="swipe-item-question">
+                {item.questionTypeCode === QuestionType.RADIO && (
+                  <ChoiceQuestion
+                    v-model:value={item.userAnswer}
+                    index={index + 1}
+                    data={item}
+                    type="radio"
+                    showAnalysis={item.showAnalysis}
+                    analysis={item.analysis}>
+                    {{
+                      title: () => (
+                        <div class={styles.questionTitle}>
+                          <div class={styles.questionNum}>
+                            <span>{state.currentIndex + 1}</span>/{state.total}
+                          </div>
+                          {/* <div class={styles.questionType}>
+                            <i></i>
+                            <span>{item.knowledgePointName}</span>
+                          </div> */}
+                          <Button
+                            round
+                            plain
+                            size="mini"
+                            color={item.grasp ? '#FF5A56' : '#1CACF1'}
+                            class={styles.controlBtn}
+                            disabled={item.grasp}
+                            onClick={() => onGraspQuestion(item)}>
+                            {item.grasp ? '已掌握此题' : '掌握此题'}
+                          </Button>
+                        </div>
+                      )
+                    }}
+                  </ChoiceQuestion>
+                )}
+                {item.questionTypeCode === QuestionType.CHECKBOX && (
+                  <ChoiceQuestion
+                    v-model:value={item.userAnswer}
+                    index={index + 1}
+                    data={item}
+                    type="checkbox"
+                    showAnalysis={item.showAnalysis}
+                    analysis={item.analysis}>
+                    {{
+                      title: () => (
+                        <div class={styles.questionTitle}>
+                          <div class={styles.questionNum}>
+                            <span>{state.currentIndex + 1}</span>/{state.total}
+                          </div>
+                          {/* <div class={styles.questionType}>
+                            <i></i>
+                            <span>{item.knowledgePointName}</span>
+                          </div> */}
+                          <Button
+                            round
+                            plain
+                            size="mini"
+                            color={item.grasp ? '#FF5A56' : '#1CACF1'}
+                            class={styles.controlBtn}
+                            disabled={item.grasp}
+                            onClick={() => onGraspQuestion(item)}>
+                            {item.grasp ? '已掌握此题' : '掌握此题'}
+                          </Button>
+                        </div>
+                      )
+                    }}
+                  </ChoiceQuestion>
+                )}
+                {item.questionTypeCode === QuestionType.SORT && (
+                  <DragQuestion
+                    v-model:value={item.userAnswer}
+                    onUpdate:value={() => {
+                      // 如果是空则滑动到顶部
+                      const status =
+                        item.userAnswer && item.userAnswer.length > 0
+                          ? false
+                          : true;
+                      resizeSwipeItemHeight(status);
+                    }}
+                    data={item}
+                    index={index + 1}
+                    showAnalysis={item.showAnalysis}
+                    analysis={item.analysis}>
+                    {{
+                      title: () => (
+                        <div class={styles.questionTitle}>
+                          <div class={styles.questionNum}>
+                            <span>{state.currentIndex + 1}</span>/{state.total}
+                          </div>
+                          {/* <div class={styles.questionType}>
+                            <i></i>
+                            <span>{item.knowledgePointName}</span>
+                          </div> */}
+                          <Button
+                            round
+                            plain
+                            size="mini"
+                            color={item.grasp ? '#FF5A56' : '#1CACF1'}
+                            class={styles.controlBtn}
+                            disabled={item.grasp}
+                            onClick={() => onGraspQuestion(item)}>
+                            {item.grasp ? '已掌握此题' : '掌握此题'}
+                          </Button>
+                        </div>
+                      )
+                    }}
+                  </DragQuestion>
+                )}
+                {item.questionTypeCode === QuestionType.LINK && (
+                  <KeepLookQuestion
+                    v-model:value={item.userAnswer}
+                    data={item}
+                    index={index + 1}
+                    showAnalysis={item.showAnalysis}
+                    analysis={item.analysis}>
+                    {{
+                      title: () => (
+                        <div class={styles.questionTitle}>
+                          <div class={styles.questionNum}>
+                            <span>{state.currentIndex + 1}</span>/{state.total}
+                          </div>
+                          {/* <div class={styles.questionType}>
+                            <i></i>
+                            <span>{item.knowledgePointName}</span>
+                          </div> */}
+                          <Button
+                            round
+                            plain
+                            size="mini"
+                            color={item.grasp ? '#FF5A56' : '#1CACF1'}
+                            class={styles.controlBtn}
+                            disabled={item.grasp}
+                            onClick={() => onGraspQuestion(item)}>
+                            {item.grasp ? '已掌握此题' : '掌握此题'}
+                          </Button>
+                        </div>
+                      )
+                    }}
+                  </KeepLookQuestion>
+                )}
+                {item.questionTypeCode === QuestionType.PLAY && (
+                  <PlayQuestion
+                    v-model:value={item.userAnswer}
+                    data={item}
+                    index={index + 1}
+                    unitId={state.id as any}
+                    showAnalysis={item.showAnalysis}
+                    analysis={item.analysis}>
+                    {{
+                      title: () => (
+                        <div class={styles.questionTitle}>
+                          <div class={styles.questionNum}>
+                            <span>{state.currentIndex + 1}</span>/{state.total}
+                          </div>
+                          {/* <div class={styles.questionType}>
+                            <i></i>
+                            <span>{item.knowledgePointName}</span>
+                          </div> */}
+                          <Button
+                            round
+                            plain
+                            size="mini"
+                            color={item.grasp ? '#FF5A56' : '#1CACF1'}
+                            disabled={item.grasp}
+                            class={styles.controlBtn}
+                            onClick={() => onGraspQuestion(item)}>
+                            {item.grasp ? '已掌握此题' : '掌握此题'}
+                          </Button>
+                        </div>
+                      )
+                    }}
+                  </PlayQuestion>
+                )}
+              </div>
+            </SwipeItem>
+          ))}
+        </Swipe>
+
+        <MSticky position="bottom">
+          <div class={['btnGroup btnMore', styles.btnSection]}>
+            <Button
+              round
+              block
+              class={
+                state.currentIndex > 0 ? styles.activePrevBtn : styles.prevBtn
+              }
+              disabled={state.currentIndex > 0 ? false : true}
+              onClick={() => {
+                swipeRef.value?.prev();
+              }}>
+              上一题
+            </Button>
+            <Button
+              block
+              round
+              class={styles.nextBtn}
+              onClick={onNextQuestion}
+              loading={state.nextStatus}
+              disabled={state.nextStatus}>
+              {state.questionList.length === state.currentIndex + 1
+                ? '提交'
+                : '下一题'}
+            </Button>
+            <Image
+              src={iconButtonList}
+              class={[styles.wapList, 'van-haptics-feedback']}
+              onClick={() => (state.visiableAnswer = true)}
+            />
+          </div>
+        </MSticky>
+
+        {/* 题目集合 */}
+        <ActionSheet
+          v-model:show={state.visiableAnswer}
+          title="题目列表"
+          safeAreaInsetBottom>
+          <AnswerList
+            value={state.questionList}
+            lookType={'PRACTICE'}
+            statusList={[
+              {
+                text: '答对',
+                color: '#1CACF1'
+              },
+              {
+                text: '答错',
+                color: '#FF8486'
+              },
+              {
+                text: '未答',
+                color: '#EAEAEA'
+              }
+            ]}
+            onSelect={(item: any) => {
+              // 跳转,并且跳过动画
+              swipeRef.value?.swipeTo(item, {
+                immediate: true
+              });
+              state.visiableAnswer = false;
+            }}
+          />
+        </ActionSheet>
+
+        <Popup
+          v-model:show={state.visiableError}
+          style={{ width: '90%' }}
+          round
+          closeOnClickOverlay={false}>
+          <ErrorMode
+            onClose={() => (state.visiableError = false)}
+            answerAnalysis={state.answerAnalysis}
+            questionTypeCode={state.questionTypeCode}
+            onConform={() => {
+              swipeRef.value?.next();
+              state.answerAnalysis = '';
+            }}
+          />
+        </Popup>
+
+        <Popup
+          v-model:show={state.visiableInfo.show}
+          closeOnClickOverlay={false}
+          style={{
+            background: 'transparent',
+            width: '100%',
+            maxWidth: '100%',
+            transform: 'translateY(-55%)'
+          }}>
+          <ResultFinish
+            title={state.visiableInfo.title}
+            showCancelButton={state.visiableInfo.showCancelButton}
+            cancelButtonText={state.visiableInfo.cancelButtonText}
+            confirmButtonText={state.visiableInfo.confirmButtonText}
+            status={state.visiableInfo.type}
+            content={state.visiableInfo.content}
+            contentHtml
+            onConform={onConfirmResult}
+            onClose={onCloseResult}
+          />
+        </Popup>
+      </div>
+    );
+  }
+});

BIN
src/views/knowledge-library/images/icon-analysis.png


+ 3 - 2
src/views/knowledge-library/model/answer-analysis/index.module.less

@@ -11,7 +11,7 @@
     font-size: 16px;
     font-weight: 600;
     color: #333333;
-    padding-bottom: 20px;
+    padding-bottom: 12px;
 
     .aImg {
       font-size: 18px;
@@ -29,10 +29,11 @@
 
   .analysisTitle {
     padding-bottom: 10px;
+    color: #743E17;
   }
 
   .analysisMessage {
-    font-size: 15px;
+    font-size: 13px;
     color: #333333;
     line-height: 21px;
     text-align: justify;

+ 1 - 1
src/views/knowledge-library/model/answer-list/index.tsx

@@ -86,7 +86,7 @@ export default defineComponent({
                     props.lookType === 'CLICK' &&
                       index === props.index &&
                       styles.answered,
-                    props.lookType !== 'CLICK' && item.showAnalysis
+                    props.lookType === 'PRACTICE' && item.showAnalysis
                       ? item.analysis.userResult
                         ? styles.yes
                         : styles.no

+ 1 - 2
src/views/knowledge-library/model/drag-question/index.tsx

@@ -168,7 +168,7 @@ export default defineComponent({
           state.options = tempList;
         }
 
-        console.log(props.data, 'data');
+        // console.log(props.data, 'data');
       });
     };
 
@@ -189,7 +189,6 @@ export default defineComponent({
     );
 
     onMounted(() => {
-      console.log(props.data, 'mounted', state.options);
       initOptions();
     });
 

+ 2 - 2
src/views/knowledge-library/model/keep-look-question/index.module.less

@@ -50,8 +50,8 @@
   }
 
   .active {
-    border: 2px solid #0F77C4;
-    color: #0F77C4;
+    border: 2px solid #1CACF1;
+    color: #1CACF1;
 
   }
 }

+ 1 - 1
src/views/knowledge-library/model/result-finish/index.module.less

@@ -14,7 +14,7 @@
 .finishTitle {
   padding-top: 74px;
   padding-left: 26px;
-  font-size: 20px;
+  font-size: 18px;
   font-family: AlimamaShuHeiTi-Bold, AlimamaShuHeiTi;
   font-weight: bold;
   color: #0F75BB;

+ 8 - 1
src/views/knowledge-library/model/result-finish/index.tsx

@@ -46,6 +46,10 @@ export default defineComponent({
     content: {
       type: String,
       default: ''
+    },
+    textAlign: {
+      type: String as PropType<'flex-start' | 'center' | 'flex-end'>,
+      default: 'flex-start'
     }
   },
   emits: ['close', 'conform'],
@@ -69,7 +73,10 @@ export default defineComponent({
             ) : (
               <>
                 {props.contentHtml ? (
-                  <div class={styles.scoreResult} v-html={props.content}></div>
+                  <div
+                    class={styles.scoreResult}
+                    style={{ justifyContent: props.textAlign }}
+                    v-html={props.content}></div>
                 ) : (
                   <div class={styles.scoreResult}>{props.content}</div>
                 )}

+ 7 - 0
src/views/knowledge-library/practice-mode/index.module.less

@@ -29,6 +29,13 @@
       display: flex;
       align-items: center;
 
+      span {
+        white-space: nowrap;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        max-width: 160px;
+      }
+
       i {
         margin-right: 6px;
         display: inline-block;

+ 43 - 98
src/views/knowledge-library/practice-mode/index.tsx

@@ -1,12 +1,4 @@
-import {
-  ActionSheet,
-  Button,
-  Image,
-  Popup,
-  Swipe,
-  SwipeItem,
-  showLoadingToast
-} from 'vant';
+import { ActionSheet, Button, Image, Popup, Swipe, SwipeItem } from 'vant';
 import {
   computed,
   defineComponent,
@@ -22,7 +14,6 @@ import iconButtonList from '../images/icon-button-list.png';
 import MSticky from '@/components/m-sticky';
 import ChoiceQuestion from '../model/choice-question';
 import AnswerList from '../model/answer-list';
-import ODialog from '@/components/m-dialog';
 import DragQuestion from '../model/drag-question';
 import KeepLookQuestion from '../model/keep-look-question';
 import PlayQuestion from '../model/play-question';
@@ -41,16 +32,16 @@ export default defineComponent({
     const router = useRouter();
     const swipeRef = ref();
     const state = reactive({
-      lessonCoursewareId: route.query.lessonCoursewareId,
+      type: route.query.type, // 类型
+      knowledgePointIds: route.query.knowledgePointIds, // 智能组卷 多个编号
+      lessonCoursewareId: route.query.lessonCoursewareId, // 教材编号
       background: 'transparent',
       color: '#fff',
       visiableError: false,
       visiableAnswer: false,
-      visiableResult: true,
       id: route.query.id,
       currentIndex: 0,
       questionList: [],
-      visiableSure: false,
       visiableInfo: {
         show: false,
         operationType: 'RESULT' as 'RESULT' | 'BACK' | 'CONTINUE',
@@ -70,8 +61,7 @@ export default defineComponent({
         questionLength: 0, // 答题数
         errorLength: 0, // 错题数
         rate: 0 // 正确率
-      },
-      quitStatus: false
+      }
     });
 
     // 计时
@@ -87,12 +77,12 @@ export default defineComponent({
             }
           }
         );
-        const temp = data || [];
+        const temp = data || {};
         temp.examinationQuestionAdds.forEach((item: any) => {
           item.showAnalysis = false; // 默认不显示解析
           item.analysis = {
             message: item.answerAnalysis,
-            topic: false, // 是否显示结果
+            topic: true, // 是否显示结果
             userResult: false // 用户答题对错
           };
           item.userAnswer = []; // 用户答题
@@ -142,7 +132,6 @@ export default defineComponent({
         // 判断是否是最后一题
         if (state.questionList.length === state.currentIndex + 1) {
           eventUnit.emit('unitAudioStop');
-          // state.visiableSure = true;
           state.visiableInfo.show = true;
           state.visiableInfo.title = '练习完成';
           state.visiableInfo.showCancelButton = true;
@@ -229,36 +218,28 @@ export default defineComponent({
     };
 
     const onConfirmExam = () => {
+      //
+    };
+
+    const onConfirmResult = () => {
       if (state.visiableInfo.operationType === 'RESULT') {
-        onResultPopup();
+        state.visiableInfo.show = false;
+        onAfter();
       } else if (state.visiableInfo.operationType === 'BACK') {
+        state.visiableInfo.show = false;
+        onAfter();
       } else if (state.visiableInfo.operationType === 'CONTINUE') {
+        onResultPopup();
       }
     };
-
     const onCloseResult = async () => {
-      // state.questionList = [];
-      // await getExamDetails();
-      // setTimeout(async () => {
-      //   swipeRef.value?.swipeTo(0, {
-      //     immediate: true
-      //   });
-      //   state.swipeHeight = 'auto';
-      //   state.answerAnalysis = '';
-      //   state.overResult = {
-      //     time: '00:00', // 时长
-      //     questionLength: 0, // 答题数
-      //     errorLength: 0, // 错题数
-      //     rate: 0 // 正确率
-      //   };
-      //   state.visiableResult = false;
-      //   // 恢复计时
-      //   resume();
-      //   resizeSwipeItemHeight();
-      // }, 100);
       if (state.visiableInfo.operationType === 'RESULT') {
       } else if (state.visiableInfo.operationType === 'BACK') {
+        state.visiableInfo.show = false;
+        window.history.pushState(null, '', document.URL);
+        window.addEventListener('popstate', onBack, false);
       } else if (state.visiableInfo.operationType === 'CONTINUE') {
+        state.visiableInfo.show = false;
       }
     };
 
@@ -301,34 +282,18 @@ export default defineComponent({
       }</span>,正确率${rate}%~</div>`;
     };
 
-    // 下一个考点
-    const onConfirmResult = () => {
-      // const knowledgelist = state.knowledgelist || [];
-      // // console.log('🚀 ~ file: index.tsx:246 ~ onConfirmResult ~ knowledgelist', knowledgelist)
-      // // 当前正在考试的节点
-      // const knownleIndex = knowledgelist.findIndex(
-      //   (item: any) => item.id === state.id
-      // );
-      // console.log(
-      //   '🚀 ~ file: index.tsx:249 ~ onConfirmResult ~ knownleIndex',
-      //   knownleIndex
-      // );
-      // let currentKnowle: any = {};
-      // if (knownleIndex + 1 >= knowledgelist.length || knownleIndex < 0) {
-      //   currentKnowle = knowledgelist[0];
-      // } else {
-      //   currentKnowle = knowledgelist[knownleIndex + 1];
-      // }
-      // state.id = currentKnowle.id;
-      // state.visiableResult = false;
-      // state.currentIndex = 0;
-      // // 重置
-      // onCloseResult();
-    };
-
     // 拦截
     const onBack = () => {
-      state.quitStatus = true;
+      const answerResult = getAnswerResult.value;
+      state.visiableInfo.show = true;
+      state.visiableInfo.title = '确认退出吗?';
+      state.visiableInfo.showCancelButton = true;
+      state.visiableInfo.operationType = 'BACK';
+      state.visiableInfo.cancelButtonText = '取消';
+      state.visiableInfo.confirmButtonText = '确定';
+      state.visiableInfo.content = `您已经完成${
+        answerResult.passCount + answerResult.noPassCount
+      }道题了,继续做题可以巩固所学知识哦~`;
       eventUnit.emit('unitAudioStop');
     };
 
@@ -352,8 +317,8 @@ export default defineComponent({
 
       resizeSwipeItemHeight();
 
-      // window.history.pushState(null, '', document.URL);
-      // window.addEventListener('popstate', onBack, false);
+      window.history.pushState(null, '', document.URL);
+      window.addEventListener('popstate', onBack, false);
     });
 
     onUnmounted(() => {
@@ -403,7 +368,8 @@ export default defineComponent({
                             {state.questionList.length}
                           </div>
                           <div class={styles.questionType}>
-                            <i></i>音及音高
+                            <i></i>
+                            <span>{item.knowledgePointName}</span>
                           </div>
                         </div>
                       )
@@ -426,7 +392,8 @@ export default defineComponent({
                             {state.questionList.length}
                           </div>
                           <div class={styles.questionType}>
-                            <i></i>音及音高
+                            <i></i>
+                            <span>{item.knowledgePointName}</span>
                           </div>
                         </div>
                       )
@@ -456,7 +423,8 @@ export default defineComponent({
                             {state.questionList.length}
                           </div>
                           <div class={styles.questionType}>
-                            <i></i>音及音高
+                            <i></i>
+                            <span>{item.knowledgePointName}</span>
                           </div>
                         </div>
                       )
@@ -478,7 +446,8 @@ export default defineComponent({
                             {state.questionList.length}
                           </div>
                           <div class={styles.questionType}>
-                            <i></i>音及音高
+                            <i></i>
+                            <span>{item.knowledgePointName}</span>
                           </div>
                         </div>
                       )
@@ -501,7 +470,8 @@ export default defineComponent({
                             {state.questionList.length}
                           </div>
                           <div class={styles.questionType}>
-                            <i></i>音及音高
+                            <i></i>
+                            <span>{item.knowledgePointName}</span>
                           </div>
                         </div>
                       )
@@ -553,7 +523,7 @@ export default defineComponent({
           safeAreaInsetBottom>
           <AnswerList
             value={state.questionList}
-            lookType={'ANSWER'}
+            // lookType={'ANSWER'}
             onSelect={(item: any) => {
               // 跳转,并且跳过动画
               swipeRef.value?.swipeTo(item, {
@@ -601,31 +571,6 @@ export default defineComponent({
             onClose={onCloseResult}
           />
         </Popup>
-
-        <ODialog
-          v-model:show={state.visiableSure}
-          title="练习完成"
-          message="确认本次练习的题目都完成了吗?"
-          messageAlign="left"
-          showCancelButton
-          cancelButtonText="再等等"
-          confirmButtonText="确认完成"
-          onConfirm={onConfirmExam}
-        />
-
-        <ODialog
-          v-model:show={state.quitStatus}
-          title="提示"
-          message="您是否退出本次练习?"
-          showCancelButton
-          cancelButtonText="取消"
-          onCancel={() => {
-            window.history.pushState(null, '', document.URL);
-            window.addEventListener('popstate', onBack, false);
-          }}
-          confirmButtonText="确认退出"
-          onConfirm={onAfter}
-        />
       </div>
     );
   }

+ 27 - 3
src/views/knowledge-library/wroing-book/ai-exam/index.module.less

@@ -1,4 +1,5 @@
 .woringBook {
+  position: relative;
   min-height: 100vh;
   background: url('./images/wroing-bg.png') no-repeat top center;
   background-size: contain;
@@ -42,11 +43,16 @@
 }
 
 .woringSecgtion {
-  min-height: calc(100vh - var(--header-height) - 36px);
+  height: calc(100vh - var(--header-height) - var(--bottom-height) - 36px);
+  overflow-y: auto;
   margin-top: 36px;
   background: #FFFFFF;
   border-radius: 16px 16px 0 0;
-  padding: 12px 15px;
+  padding: 0 15px 12px;
+
+  .emptyContainer {
+    height: calc(100vh - var(--header-height) - var(--bottom-height) - 92px);
+  }
 
   .title {
     display: flex;
@@ -55,6 +61,13 @@
     font-weight: 600;
     color: #333333;
     line-height: 24px;
+    position: sticky;
+    top: 0;
+    left: 0;
+    z-index: 99;
+    padding-top: 12px;
+    padding-bottom: 8px;
+    background-color: #fff;
 
     &::before {
       content: ' ';
@@ -81,6 +94,10 @@
       font-weight: 600;
       color: #333333;
       line-height: 24px;
+      max-width: 220px;
+      white-space: nowrap;
+      overflow: hidden;
+      text-overflow: ellipsis;
     }
 
     .cellContent {
@@ -100,4 +117,11 @@
       }
     }
   }
-}
+}
+
+// .groupButtom {
+//   position: fixed;
+//   bottom: 0;
+//   left: 0;
+//   width: 100%;
+// }

+ 64 - 14
src/views/knowledge-library/wroing-book/ai-exam/index.tsx

@@ -1,10 +1,20 @@
 import MHeader from '@/components/m-header';
 import MSticky from '@/components/m-sticky';
-import { defineComponent, reactive, ref } from 'vue';
+import { defineComponent, onMounted, reactive, ref } from 'vue';
 import styles from './index.module.less';
 import { useRouter } from 'vue-router';
-import { Button, Cell, CellGroup, Checkbox, CheckboxGroup, Image } from 'vant';
+import {
+  Button,
+  Cell,
+  CellGroup,
+  Checkbox,
+  CheckboxGroup,
+  Image,
+  showToast
+} from 'vant';
 import iconBook from './images/icon-book.png';
+import request from '@/helpers/request';
+import MEmpty from '@/components/m-empty';
 
 export default defineComponent({
   name: 'wroing-book',
@@ -12,13 +22,47 @@ export default defineComponent({
     const router = useRouter();
     const checkboxRefs = ref([] as any);
     const forms = reactive({
-      list: [1, 2, 3, 4],
+      list: [] as any,
       checked: [] as any
     });
 
+    const getList = async () => {
+      try {
+        const { data } = await request.post(
+          '/edu-app/knowledgePoint/studentPage'
+        );
+        forms.list = data || [];
+      } catch {
+        //
+      }
+    };
+
     const checkboxToggle = (index: number) => {
       checkboxRefs.value[index].toggle();
     };
+
+    const onSubmit = () => {
+      try {
+        console.log(forms.checked);
+        if (forms.checked.length <= 0) {
+          showToast('请选择练习知识点');
+          return;
+        }
+
+        // router.push({
+        //   path: '/practice-mode',
+        //   query: {
+        //     type: 'ai',
+        //     knowledgePointIds: forms.checked.join(',')
+        //   }
+        // });
+      } catch {
+        //
+      }
+    };
+    onMounted(() => {
+      getList();
+    });
     return () => (
       <div class={styles.woringBook}>
         <MSticky position="top">
@@ -53,15 +97,17 @@ export default defineComponent({
                   class={styles.cell}>
                   {{
                     icon: () => <Image src={iconBook} class={styles.iconImg} />,
-                    title: () => <div class={styles.cellTitle}>音乐符号</div>,
+                    title: () => (
+                      <div class={styles.cellTitle}>{item.name}</div>
+                    ),
                     label: () => (
                       <p class={styles.cellContent}>
-                        <span>200</span>道错题
+                        <span>{item.questionNum}</span>道错题
                       </p>
                     ),
                     'right-icon': () => (
                       <Checkbox
-                        name={index}
+                        name={item.pointId}
                         ref={el => (checkboxRefs.value[index] = el)}
                         onClick={(e: MouseEvent) => e.stopPropagation()}
                       />
@@ -70,16 +116,20 @@ export default defineComponent({
                 </Cell>
               ))}
             </CheckboxGroup>
+            {forms.list.length <= 0 && (
+              <div class={styles.emptyContainer}>
+                <MEmpty />
+              </div>
+            )}
           </CellGroup>
-
-          <MSticky position="bottom">
-            <div class={'btnGroup'}>
-              <Button round block type="primary">
-                确认
-              </Button>
-            </div>
-          </MSticky>
         </div>
+        <MSticky position="bottom" varName="--bottom-height">
+          <div class={'btnGroup'}>
+            <Button round block type="primary" onClick={onSubmit}>
+              确认
+            </Button>
+          </div>
+        </MSticky>
       </div>
     );
   }

+ 37 - 2
src/views/knowledge-library/wroing-book/index.tsx

@@ -3,15 +3,44 @@ import MSticky from '@/components/m-sticky';
 import { defineComponent } from 'vue';
 import styles from './index.module.less';
 import { useRouter } from 'vue-router';
-import { Image } from 'vant';
+import { Image, showToast } from 'vant';
 import AiExam from './images/ai-exam.png';
 import WoringPractice from './images/woring-practice.png';
 import WoringStat from './images/woring-stat.png';
+import request from '@/helpers/request';
 
 export default defineComponent({
   name: 'wroing-book',
   setup() {
     const router = useRouter();
+
+    /** 错题练习 */
+    const onErrorPractice = async () => {
+      try {
+        const { data } = await request.post(
+          '/edu-app/studentUnitExamination/errorEdition',
+          {
+            hideLoading: false,
+            data: {
+              page: 1,
+              rows: 50
+            }
+          }
+        );
+        const temp = data || {};
+        if (temp.total > 0) {
+          router.push({
+            path: '/error-question-mode'
+          });
+        } else {
+          setTimeout(() => {
+            showToast('暂无错题');
+          }, 100);
+        }
+      } catch {
+        //
+      }
+    };
     return () => (
       <div class={styles.woringBook}>
         <MSticky position="top">
@@ -41,7 +70,13 @@ export default defineComponent({
             class={styles.woringImg}
             onClick={() => router.push('wroing-stat')}
           />
-          <Image lazyLoad src={WoringPractice} class={styles.woringImg} />
+          {/* 错题练习 */}
+          <Image
+            lazyLoad
+            src={WoringPractice}
+            class={styles.woringImg}
+            onClick={onErrorPractice}
+          />
           <Image
             lazyLoad
             src={AiExam}

+ 2 - 2
src/views/member-center/index.module.less

@@ -121,7 +121,7 @@
     box-sizing: border-box;
     border-radius: 12px;
     background: url('./images/vip_bg.png') no-repeat center;
-    background-size: contain;
+    background-size: cover;
 
     .title {
       padding: 25px 17px 0;
@@ -171,7 +171,7 @@
   .memberGift {
     border-radius: 12px;
     background: url('./images/vip_bg2.png') no-repeat center;
-    background-size: contain;
+    background-size: cover;
     min-height: 161px;
   }
 

+ 7 - 4
src/views/member-center/index.tsx

@@ -213,7 +213,7 @@ export default defineComponent({
                       <div>
                         使用有效期剩余
                         <span class={styles.remaining}>
-                          {this.userInfo.membershipGiftDays}
+                          {this.userInfo.membershipDays}
                         </span>
                       </div>
@@ -241,9 +241,12 @@ export default defineComponent({
                 <span>¥</span>
                 {moneyFormat(this.selectMember.salePrice)}
               </p>
-              <del class={styles.originalPrice}>
-                ¥{moneyFormat(this.selectMember.originalPrice)}
-              </del>
+              {this.selectMember.salePrice <
+                this.selectMember.originalPrice && (
+                <del class={styles.originalPrice}>
+                  ¥{moneyFormat(this.selectMember.originalPrice)}
+                </del>
+              )}
             </div>
             {this.users.membershipGiftDays > 0 && (
               <Cell border={false} class={styles.giftCell}>

+ 64 - 5
src/views/student-register/index.tsx

@@ -25,6 +25,8 @@ import deepClone from '@/helpers/deep-clone';
 import { storage } from '@/helpers/storage';
 import { ACCESS_TOKEN } from '@/store/mutation-types';
 import OWxTip from '@/components/m-wx-tip';
+import MDialog from '@/components/m-dialog';
+import { CurrentTime, useCountDown } from '@vant/use';
 
 export default defineComponent({
   name: 'student-register',
@@ -42,22 +44,56 @@ export default defineComponent({
       schoolType: '', // 学校类型
       gradeYear: '', // 学制
       bugGoods: false, // 是否购买AI
-      submitLoading: false
+      submitLoading: false,
+      dialogStatus: false,
+      dialogMessage: '',
+      countDownTime: 60 * 1000,
+      dialogConfig: {} as any
+    });
+
+    const countDown = useCountDown({
+      // 倒计时 60 秒
+      time: forms.countDownTime,
+      onChange(current: CurrentTime) {
+        forms.dialogMessage = `有待支付订单,请在${Math.ceil(
+          current.total / 1000
+        )}s后重试`;
+      },
+      onFinish() {
+        forms.dialogStatus = false;
+      }
     });
 
     // 查询未支付订单
     const paymentOrderUnpaid = async () => {
+      let result = false;
       try {
         const { data } = await request.get('/edu-app/userPaymentOrder/unpaid');
         // 判断是否有待支付订单
-        if (data.id) {
+
+        if (!data.id) return false;
+
+        // 判断是否可以取消订单
+        if (data.cancelPayment) {
           await request.post(
             '/edu-app/userPaymentOrder/cancelPayment/' + data.orderNo
           );
+          return false;
+        } else {
+          forms.countDownTime = data.cancelTimes;
+          countDown.reset(Number(data.cancelTimes));
+          countDown.start();
+          forms.dialogMessage = `有待支付订单,请在${Math.ceil(
+            countDown.current.value.total / 1000
+          )}s后重试`;
+          forms.dialogStatus = true;
+          forms.dialogConfig = data;
+          result = true;
         }
       } catch {
         //
       }
+      return result;
     };
 
     const getRegisterGoods = async () => {
@@ -105,7 +141,6 @@ export default defineComponent({
         message: '是否删除该商品',
         confirmButtonColor: '#FF8633'
       }).then(() => {
-        console.log(item, 'item');
         studentRegisterStore.deleteGoods(item.productSkuId);
       });
     };
@@ -130,7 +165,8 @@ export default defineComponent({
         }
 
         // 请求是否有待支付订单,如果有则自动关闭
-        await paymentOrderUnpaid();
+        const status = await paymentOrderUnpaid();
+        if (status) return;
         const schoolInfo = await request.get(
           '/edu-app/userPaymentOrder/registerStatus/' + forms.schoolId
         );
@@ -454,8 +490,31 @@ export default defineComponent({
           />
         </Popup>
 
+        <MDialog
+          title="提示"
+          v-model:show={forms.dialogStatus}
+          message={forms.dialogMessage}
+          allowHtml={true}
+          confirmButtonText="继续支付"
+          onConfirm={() => {
+            const paymentConfig = forms.dialogConfig.paymentConfig;
+            router.push({
+              path: '/order-detail',
+              query: {
+                pm: 1, // h5乐团报名
+                config: JSON.stringify(paymentConfig.paymentConfig),
+                orderNo: paymentConfig.orderNo
+              }
+            });
+            countDown.pause();
+          }}
+          onCancel={(val: any) => {
+            countDown.pause();
+          }}
+        />
+
         {/* 是否在微信中打开 */}
-        <OWxTip />
+        {/* <OWxTip /> */}
       </div>
     );
   }