Quellcode durchsuchen

调整对口升学ui

shmily1213 vor 2 Wochen
Ursprung
Commit
dad38c2a8d

+ 146 - 0
src/pagesStudy/pages/index/compoentns/index-practice-entry.vue

@@ -0,0 +1,146 @@
+<template>
+  <view>
+    <view v-if="!isVHS" class="mx-30 mt-20 flex items-center bg-[#E3F4FA] rounded-8 py-16 px-16 gap-x-40">
+      <view class="text-24 text-[#34B0D7] flex-1">
+        <text v-if="!hasDirectedSchool">你还未开启定向学习,快来设置吧!</text>
+        <view v-else class="flex items-center">
+          <text class="flex-shrink-0">定向:</text>
+          <text class="min-w-1 ellipsis-1">{{ firstDirectedSchool.universityName }}</text>
+          <uv-icon name="arrow-right" size="14" color="#0DACF5"></uv-icon>
+          <text class="flex-shrink-0">{{ firstDirectedSchool.majorName }}</text>
+        </view>
+      </view>
+      <view class="text-24 text-white bg-gradient-to-r from-[#26C5F7] to-[#0DACF5] rounded-full px-18 py-6"
+        @click="handleSetting">{{ hasDirectedSchool ? '已开启' : '去开启' }}</view>
+    </view>
+    <view class="mx-30 mt-20">
+      <view class="flex items-center gap-x-28">
+        <template v-if="isVHS">
+          <view class="bg-gradient-to-r from-[#0088FE] to-[#31A0FC] flex-1 rounded-15 relative overflow-hidden">
+            <view class="mt-30 p-30 z-1 relative">
+              <view class="text-30 text-white font-bold">知识点练习</view>
+              <view class="mt-8 text-24 text-white">考点专攻,精准提分</view>
+              <view class="mt-32 w-200 h-56 flex items-center justify-center rounded-full text-26 text-primary bg-white"
+                @click="handlePracticeKnowledge">
+                开始练习
+              </view>
+            </view>
+            <ie-image :is-oss="true" src="/study-bg13.png" custom-class="absolute bottom-0 left-0 w-full h-full z-0"
+              mode="aspectFill" />
+          </view>
+          <view class="bg-gradient-to-r from-[#32B5FD] to-[#79DCFD] flex-1 rounded-15 relative overflow-hidden">
+            <view class="mt-30 p-30 z-1 relative">
+              <view class="text-30 text-white font-bold">必刷题</view>
+              <view class="mt-8 text-24 text-white">高频考题,一网打尽</view>
+              <view class="mt-32 w-200 h-56 flex items-center justify-center rounded-full text-26 text-primary bg-white"
+                @click="handlePracticeMustDo">
+                开始练习
+              </view>
+            </view>
+            <ie-image :is-oss="true" src="/study-bg13.png" custom-class="absolute bottom-0 left-0 w-full h-full z-0"
+              mode="aspectFill" />
+          </view>
+        </template>
+        <template v-else>
+          <view class="bg-gradient-to-r from-[#0088FE] to-[#31A0FC] flex-1 rounded-15 relative overflow-hidden">
+            <view class="mt-30 p-30 z-1 relative">
+              <view class="text-30 text-white font-bold">全量刷题</view>
+              <view class="mt-8 text-24 text-white">全面刷题,高效备考</view>
+              <view class="mt-32 w-200 h-56 flex items-center justify-center rounded-full text-26 text-primary bg-white"
+                @click="handlePracticeAll">
+                开始练习
+              </view>
+            </view>
+            <ie-image :is-oss="true" src="/study-bg13.png" custom-class="absolute bottom-0 left-0 w-full h-full z-0"
+              mode="aspectFill" />
+          </view>
+          <view class="bg-gradient-to-r from-[#32B5FD] to-[#79DCFD] flex-1 rounded-15 relative overflow-hidden">
+            <view class="mt-30 p-30 z-1 relative">
+              <view class="text-30 text-white font-bold">定向刷题</view>
+              <view class="mt-8 text-24 text-white">紧扣考纲,精准练习</view>
+              <view class="mt-32 w-200 h-56 flex items-center justify-center rounded-full text-26 text-primary bg-white"
+                @click="handlePracticeDirected">
+                开始练习
+              </view>
+            </view>
+            <ie-image :is-oss="true" src="/study-bg13.png" custom-class="absolute bottom-0 left-0 w-full h-full z-0"
+              mode="aspectFill" />
+          </view>
+        </template>
+      </view>
+    </view>
+  </view>
+</template>
+<script lang="ts" setup>
+import { useTransferPage } from '@/hooks/useTransferPage';
+import { useUserStore } from '@/store/userStore';
+const { transferTo } = useTransferPage();
+const userStore = useUserStore();
+
+const { hasDirectedSchool, directedSchoolList, getExamType, isVHS } = storeToRefs(userStore);
+const firstDirectedSchool = computed(() => directedSchoolList.value[0] || {});
+
+const handlePracticeDirected = async () => {
+  if (!hasDirectedSchool.value) {
+    addTarget();
+    return;
+  }
+  const notice = firstDirectedSchool.value.notice;
+  if (notice) {
+    await uni.$ie.showModal({
+      title: '提示',
+      content: notice,
+      showCancel: false,
+      confirmText: '知道了'
+    });
+  } else {
+    transferTo('/pagesStudy/pages/knowledge-practice/knowledge-practice', {
+      data: {
+        isVHS: false,
+        directed: true
+      }
+    });
+  }
+}
+
+const handlePracticeAll = () => {
+  transferTo('/pagesStudy/pages/knowledge-practice/knowledge-practice', {
+    data: {
+      isVHS: false,
+      directed: false
+    }
+  });
+}
+
+const handlePracticeKnowledge = () => {
+  transferTo('/pagesStudy/pages/knowledge-practice/knowledge-practice', {
+    data: {
+      isVHS: true,
+      directed: false,
+      subjectType: 0
+    }
+  });
+}
+
+const handlePracticeMustDo = () => {
+  transferTo('/pagesStudy/pages/knowledge-practice/knowledge-practice', {
+    data: {
+      isVHS: true,
+      directed: false,
+      subjectType: 1
+    }
+  });
+}
+
+const handleSetting = async () => {
+  if (hasDirectedSchool.value) {
+    transferTo('/pagesStudy/pages/targeted-setting/targeted-setting');
+  } else {
+    addTarget();
+  }
+}
+const addTarget = () => {
+  transferTo('/pagesStudy/pages/targeted-add/targeted-add');
+}
+</script>
+<style lang="scss" scoped></style>

+ 5 - 82
src/pagesStudy/pages/index/index.vue

@@ -12,51 +12,11 @@
         </view>
       </template>
     </ie-navbar>
-    <view class="mx-30 mt-20 flex items-center bg-[#E3F4FA] rounded-8 py-16 px-16 gap-x-40">
-      <view class="text-24 text-[#34B0D7] flex-1">
-        <text v-if="!hasDirectedSchool">你还未开启定向学习,快来设置吧!</text>
-        <view v-else class="flex items-center">
-          <text class="flex-shrink-0">定向:</text>
-          <text class="min-w-1 ellipsis-1">{{ firstDirectedSchool.universityName }}</text>
-          <uv-icon name="arrow-right" size="14" color="#0DACF5"></uv-icon>
-          <text class="flex-shrink-0">{{ firstDirectedSchool.majorName }}</text>
-        </view>
-      </view>
-      <view class="text-24 text-white bg-gradient-to-r from-[#26C5F7] to-[#0DACF5] rounded-full px-18 py-6"
-        @click="handleSetting">{{ hasDirectedSchool ? '已开启' : '去开启' }}</view>
-    </view>
-    <view class="mx-30 mt-20">
-      <view class="flex items-center gap-x-28">
-        <view class="bg-gradient-to-r from-[#0088FE] to-[#31A0FC] flex-1 rounded-15 relative overflow-hidden">
-          <view class="mt-30 p-30 z-1 relative">
-            <view class="text-30 text-white font-bold">全量刷题</view>
-            <view class="mt-8 text-24 text-white">全面刷题,高效备考</view>
-            <view class="mt-32 w-200 h-56 flex items-center justify-center rounded-full text-26 text-primary bg-white"
-              @click="handlePracticeAll">
-              开始练习
-            </view>
-          </view>
-          <ie-image :is-oss="true" src="/study-bg13.png" custom-class="absolute bottom-0 left-0 w-full h-full z-0"
-            mode="aspectFill" />
-        </view>
-        <view class="bg-gradient-to-r from-[#32B5FD] to-[#79DCFD] flex-1 rounded-15 relative overflow-hidden">
-          <view class="mt-30 p-30 z-1 relative">
-            <view class="text-30 text-white font-bold">定向刷题</view>
-            <view class="mt-8 text-24 text-white">紧扣考纲,精准练习</view>
-            <view class="mt-32 w-200 h-56 flex items-center justify-center rounded-full text-26 text-primary bg-white"
-              @click="handlePracticeDirected">
-              开始练习
-            </view>
-          </view>
-          <ie-image :is-oss="true" src="/study-bg13.png" custom-class="absolute bottom-0 left-0 w-full h-full z-0"
-            mode="aspectFill" />
-        </view>
-      </view>
-    </view>
+    <index-practice-entry />
     <index-menu />
     <index-banner />
-    <henan-exam v-if="getLocation === '河南'" :directed-school="firstDirectedSchool" />
-    <hunan-exam v-else-if="getLocation === '湖南'" :directed-school="firstDirectedSchool" />
+    <henan-exam v-if="isVHS" :directed-school="firstDirectedSchool" />
+    <hunan-exam v-else :directed-school="firstDirectedSchool" />
   </ie-page>
 </template>
 
@@ -65,6 +25,7 @@ import IndexMenu from './compoentns/index-menu.vue';
 import IndexBanner from './compoentns/index-banner.vue';
 import HunanExam from './compoentns/hunan-exam.vue';
 import HenanExam from './compoentns/henan-exam.vue';
+import IndexPracticeEntry from './compoentns/index-practice-entry.vue';
 import { EnumDictName, EnumExamType, EnumUserRole } from '@/common/enum';
 import { useUserStore } from '@/store/userStore';
 import { useTransferPage } from '@/hooks/useTransferPage';
@@ -76,47 +37,9 @@ const userStore = useUserStore();
 const { hasPermission } = useAuth();
 // 通过 ref 获取 ie-page 组件实例
 const iePageRef = ref<InstanceType<typeof IePage>>();
-const { hasDirectedSchool, directedSchoolList, getExamType, getLocation } = storeToRefs(userStore);
+const { hasDirectedSchool, directedSchoolList, getExamType, isVHS } = storeToRefs(userStore);
 const firstDirectedSchool = computed(() => directedSchoolList.value[0] || {});
 
-const handlePracticeAll = () => {
-  transferTo('/pagesStudy/pages/knowledge-practice/knowledge-practice', {
-    data: {
-      directed: false
-    }
-  });
-}
-const handlePracticeDirected = async () => {
-  if (!hasDirectedSchool.value) {
-    addTarget();
-    return;
-  }
-  const notice = firstDirectedSchool.value.notice;
-  if (notice) {
-    await uni.$ie.showModal({
-      title: '提示',
-      content: notice,
-      showCancel: false,
-      confirmText: '知道了'
-    });
-  } else {
-    transferTo('/pagesStudy/pages/knowledge-practice/knowledge-practice', {
-      data: {
-        directed: true
-      }
-    });
-  }
-}
-const handleSetting = async () => {
-  if (hasDirectedSchool.value) {
-    transferTo('/pagesStudy/pages/targeted-setting/targeted-setting');
-  } else {
-    addTarget();
-  }
-}
-const addTarget = () => {
-  transferTo('/pagesStudy/pages/targeted-add/targeted-add');
-}
 const loadData = async () => {
   await userStore.getDirectedSchoolList();
 }

+ 31 - 12
src/pagesStudy/pages/knowledge-practice/knowledge-practice.vue

@@ -24,7 +24,7 @@ import IePage from '@/components/ie-page/ie-page.vue';
 import { useTransferPage } from '@/hooks/useTransferPage';
 import { getSubjectList, getKnowledgeList } from '@/api/modules/study';
 import knowledgeTree from '@/pagesStudy/components/knowledge-tree.vue';
-import * as Study from '@/types/study';
+import { Study } from '@/types';
 import { EnumPaperType, EnumUserRole } from '@/common/enum';
 import { useUserStore } from '@/store/userStore';
 import { useAuth } from '@/hooks/useAuth';
@@ -32,14 +32,24 @@ import { useAuth } from '@/hooks/useAuth';
 const { prevData, transferTo } = useTransferPage();
 const currentSubjectIndex = ref<number>(-1);
 const userStore = useUserStore();
-const pagingRef = ref();
+const pagingRef = ref<ZPagingInstance>();
 
 const { hasPermission } = useAuth();
 const pageTitle = computed(() => {
-  if (prevData.value.directed) {
-    return '定向刷题';
+  const { isVHS, directed, questionType } = prevData.value;
+  if (isVHS) {
+    if (questionType === 0) {
+      return '知识点练习';
+    } else if (questionType === 2) {
+      return '必刷题';
+    }
+  } else {
+    if (directed) {
+      return '定向刷题';
+    } else {
+      return '全量刷题';
+    }
   }
-  return '全量刷题';
 });
 const currentSubjectId = computed(() => {
   if (subjectList.value.length > 0 && currentSubjectIndex.value >= 0) {
@@ -70,10 +80,14 @@ const loadKnowledgeList = async () => {
       directed: prevData.value.directed
     });
     treeData.value = data as Study.KnowledgeNode[];
-    pagingRef.value.complete(data);
+    if (data.length) {
+      pagingRef.value?.complete(data);
+    } else {
+      pagingRef.value?.complete(false);
+    }
   } catch (error) {
     console.log(error);
-    pagingRef.value.complete(false);
+    pagingRef.value?.complete(false);
   } finally {
     uni.$ie.hideLoading();
   }
@@ -97,16 +111,21 @@ const handleStartPractice = async (node: Study.KnowledgeNode) => {
 }
 
 watch(() => currentSubjectIndex.value, () => {
-  pagingRef.value.reload();
+  pagingRef.value?.reload();
 }, {
   immediate: false
 });
 
 const loadData = async () => {
+  const { isVHS, directed, subjectType } = prevData.value;
   try {
-    const { data } = await getSubjectList({
-      directed: !!prevData.value.directed
-    });
+    const params = {} as Study.SubjectListRequestDTO;
+    if (isVHS) {
+      params.subjectType = subjectType;
+    } else {
+      params.directed = !!directed;
+    }
+    const { data } = await getSubjectList(params);
     subjectList.value = data.map(item => ({ subjectId: item.subjectId, subjectName: item.subjectName }));
     currentSubjectIndex.value = 0;
   } catch (error) { }
@@ -117,7 +136,7 @@ onLoad(() => {
 onShow(() => {
   nextTick(() => {
     if (subjectList.value.length > 0) {
-      pagingRef.value.refresh();
+      pagingRef.value?.refresh();
     }
   });
 });

+ 4 - 1
src/store/userStore.ts

@@ -11,7 +11,7 @@ import defaultAvatar from '@/static/personal/avatar_default.png'
 
 // @ts-ignore
 import { useUserStore as useOldUserStore } from '@/hooks/useUserStore';
-import { CardType, EnumReviewMode, EnumUserType } from '@/common/enum';
+import { CardType, EnumExamType, EnumReviewMode, EnumUserType } from '@/common/enum';
 import { OPEN_VIP_POPUP } from '@/types/injectionSymbols';
 import { getDirectedSchool, saveDirectedSchool } from '@/api/modules/study';
 const oldUserStore = useOldUserStore()
@@ -121,6 +121,9 @@ export const useUserStore = defineStore('ie-user', {
         return this.user?.examType || '';
       }
       return this.tempInfo?.examType || '';
+    },
+    isVHS(): boolean {
+      return this.getExamType === EnumExamType.VHS;
     }
   },
   actions: {

+ 3 - 1
src/types/study.ts

@@ -299,7 +299,9 @@ export interface Question extends QuestionState {
 }
 
 export interface SubjectListRequestDTO {
-  directed: boolean;
+  directed?: boolean;
+  questionType?: number;
+  subjectType?: number;
 }
 
 export interface KnowledgeListRequestDTO {