From d67f2c5a524ae96e625512e970700958688ae933 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9Czouyf=E2=80=9D?= <80906036@qq.com>
Date: Mon, 30 Dec 2024 16:33:56 +0800
Subject: [PATCH] =?UTF-8?q?[=E4=BD=9C=E4=B8=9A=E8=AE=BE=E8=AE=A1]=20-=20?=
 =?UTF-8?q?=E7=9F=A5=E8=AF=86=E7=82=B9=E8=8E=B7=E5=8F=96=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/renderer/src/store/modules/classTask.js   |  52 +++++++-
 .../newClassTaskAssign/myQuestion/index.vue   |  13 +-
 .../questionUpload/quesItem/index.vue         | 117 +++++++++---------
 .../searchQuestion/index.vue                  |  25 ++--
 src/renderer/src/views/model/index.vue        |   8 ++
 src/renderer/src/views/prepare/index.vue      |  14 ++-
 6 files changed, 150 insertions(+), 79 deletions(-)

diff --git a/src/renderer/src/store/modules/classTask.js b/src/renderer/src/store/modules/classTask.js
index fc64a44..5093052 100644
--- a/src/renderer/src/store/modules/classTask.js
+++ b/src/renderer/src/store/modules/classTask.js
@@ -2,6 +2,8 @@ import { defineStore } from 'pinia'
 import {  } from '@/api/classTask/index.js'
 import { listClassmain } from '@/api/classManage/index'
 import { JYApiListCT, JYApiListOriginYear, JYApiListSO} from "@/utils/examQuestion/jyeoo"
+import { listEvaluation } from '@/api/subject'
+import { getBindlist, listKnowlegepointFormat } from '@/api/education/knowledgePoint'
 
 const useClassTaskStore = defineStore('classTask',{
   state: () => ({
@@ -38,6 +40,7 @@ const useClassTaskStore = defineStore('classTask',{
       {label: '2021', value: '2021'},
       {label: '2020', value: '2020'},
     ], // 习题查询条件 - 年份
+    entpCourseWorkPointList: [], // 习题查询条件 - 知识点
   }),
   actions: {
     listClassmain(params) {
@@ -69,6 +72,36 @@ const useClassTaskStore = defineStore('classTask',{
           console.error('更新第三方题源+题型err:', error);
         });
     },
+
+    // 根据学科和学段获取知识点
+    initJYPoint(params) {
+      /**
+       * 格式化知识点: 分两种情况
+       * 1. 语文/英语: 获取学科下的所有知识点(该学科对应无章节与知识点绑定, 故只获取全知识点)
+       * 2. 其他: 获取当前章节下的所有知识点
+       */
+      this.entpCourseWorkPointList = [];
+      let id = params.levelSecondId!='' ? params.levelSecondId : params.levelFirstId;
+      if( params.edusubject == '语文' || params.edusubject == '英语'){
+        id = params.textbookId;
+        listEvaluation({ edusubject: params.edusubject, edustage: params.edustage, itemkey: "subject", pageSize: 10 }).then((res => {
+          id = res.rows[0]?.id;
+          if (id) {
+            listKnowlegepointFormat({evalId: id, pageNum: 1, pageSize: 5000,}).then(res => {
+              this.entpCourseWorkPointList = formatKnowledgePoint(res.rows);
+              console.log('1.entpCourseWorkPointList->', this.entpCourseWorkPointList);
+            });
+          }
+        }))
+      }else{
+        getBindlist({ eid: id }).then(res => {
+          if (res.data && res.data.length > 0) {
+            this.entpCourseWorkPointList = res.data;
+            console.log('2.entpCourseWorkPointList->', this.entpCourseWorkPointList);
+          }
+        })
+      }
+    },
   },
   persist: true
 })
@@ -108,4 +141,21 @@ const getJYCT = (params) => {
         reject(error)
       })
   })
-}
\ No newline at end of file
+}
+
+/**
+ * @desc: 遍历原知识点数据, 将title字段转为knowTitle以供knowledgePointProps进行tree的格式转换显示
+ * @return: {*}
+ * @param {*} list
+ */
+const formatKnowledgePoint = (list) => {
+  list.forEach(item => {
+    if (item.title &&  item.title != '') {
+      item.knowTitle = item.title;
+    }
+    if (item.children && Array.isArray(item.children)) {
+      formatKnowledgePoint(item.children);
+    }
+  });
+  return list;
+};
\ No newline at end of file
diff --git a/src/renderer/src/views/classTask/newClassTaskAssign/myQuestion/index.vue b/src/renderer/src/views/classTask/newClassTaskAssign/myQuestion/index.vue
index f091ce7..0751b77 100644
--- a/src/renderer/src/views/classTask/newClassTaskAssign/myQuestion/index.vue
+++ b/src/renderer/src/views/classTask/newClassTaskAssign/myQuestion/index.vue
@@ -17,6 +17,13 @@
           </el-select>
         </el-form-item>
       </el-col>
+      <el-col :span="4" :offset="2">
+        <el-button v-if="!props.isHtml2canvas" type="primary" @click="goToQuestUpload()">添加习题</el-button>
+      </el-col>
+      
+    </el-row>
+    <!-- 习题筛选2 -->
+    <el-row style="width: 100%; height: 50px;">
       <el-col :span="7">
         <el-form-item label="年份" label-width="70">
           <el-select v-model="entpCourseWorkQueryParams.yearStr" placeholder="请选择">
@@ -24,9 +31,6 @@
           </el-select>
         </el-form-item>
       </el-col>
-    </el-row>
-    <!-- 习题筛选2 -->
-    <el-row style="width: 100%; height: 50px;">
       <el-col :span="12">
         <el-form-item label="关键词" label-width="70">
           <el-input
@@ -39,9 +43,6 @@
       <el-col :span="5">
         <el-button @click="handleQueryParamFromEntpCourseWork(1)"><el-icon><Search /></el-icon> 查找</el-button>
       </el-col>
-      <el-col :span="5">
-        <el-button v-if="!props.isHtml2canvas" type="primary" @click="goToQuestUpload()">添加习题</el-button>
-      </el-col>
     </el-row>
     <!-- 习题表格 -->
     <div class="page-table" >
diff --git a/src/renderer/src/views/classTask/newClassTaskAssign/questionUpload/quesItem/index.vue b/src/renderer/src/views/classTask/newClassTaskAssign/questionUpload/quesItem/index.vue
index 7342773..1bf797f 100644
--- a/src/renderer/src/views/classTask/newClassTaskAssign/questionUpload/quesItem/index.vue
+++ b/src/renderer/src/views/classTask/newClassTaskAssign/questionUpload/quesItem/index.vue
@@ -50,7 +50,7 @@
     <el-form-item label="知识点" prop="knowledgePointIdArr">
       <el-cascader 
         v-model="questForm.knowledgePointIdArr" 
-        :options="curKnowledgePointList"
+        :options="entpCourseWorkPointList"
         :props="knowledgePointProps"
         popper-class="my-popper"
         @change="onchange"
@@ -432,7 +432,8 @@ const userStore = useUserStore().user
 const {
   entpCourseWorkTypeList,
   entpCourseWorkGroupList,
-  entpCourseWorkYearList
+  entpCourseWorkYearList,
+  entpCourseWorkPointList
 } = useClassTaskStore();
 
 const { proxy } = getCurrentInstance()
@@ -489,9 +490,9 @@ const fromOptions = reactive({
   ],
 });
   // 单题纠错时是否需要重新获取知识点的标识(目前仅用于UpdateForm中)
-const initKonwPointFlagByUpdateForm = ref(true);
+//const initKonwPointFlagByUpdateForm = ref(true);
   // 表单[知识点]显示内容集合
-const curKnowledgePointList = ref([]);
+//const curKnowledgePointList = ref([]);
   // 表单数据参数
 const questForm = reactive({
   id: 0,
@@ -1018,41 +1019,41 @@ const updateForm= async(item, submitIndex=0, submitType=1) =>{
 
 
   // 更新表单[知识点]回显
-  if (initKonwPointFlagByUpdateForm.value) {
-    // 避免重复调用
-    initKonwPointFlagByUpdateForm.value = false;
+  // if (initKonwPointFlagByUpdateForm.value) {
+  //   // 避免重复调用
+  //   initKonwPointFlagByUpdateForm.value = false;
 
-    lessionid.value = props.bookobj.levelSecondId? props.bookobj.levelSecondId : props.bookobj.levelFirstId;
-    console.log('lessionid', lessionid.value);
-    // 拿到当前章节下得所有知识点
-    if( props.bookobj.node.edusubject == '语文' || props.bookobj.node.edusubject == '英语' ){
-      const res = await listEvaluation({ edusubject: props.bookobj.node.edusubject, edustage: props.bookobj.node.edustage, itemkey: "subject", pageSize: 10 });
-      const id = res.rows[0]?.id;
-      if (id) {
-        const res = await listKnowlegepointFormat({evalId: id, pageNum: 1, pageSize: 5000,});
-        curKnowledgePointList.value = updateKnowledgePoint(res.rows);
-        //console.log('updateKnowledgePoint->', res.rows);
-      }
-    } else {
-      const res = await getBindlist({ eid: lessionid.value })
-      if (!res.data || res.data.length < 1) {
-        ElMessage.warning('当前章节下未绑定知识点,暂不更新该试题知识点!');
-        curKnowledgePointList.value = [];
-      }
-      else {
-        curKnowledgePointList.value = res.data;
-      }
-    }
-  }
+  //   lessionid.value = props.bookobj.levelSecondId? props.bookobj.levelSecondId : props.bookobj.levelFirstId;
+  //   console.log('lessionid', lessionid.value);
+  //   // 拿到当前章节下得所有知识点
+  //   if( props.bookobj.node.edusubject == '语文' || props.bookobj.node.edusubject == '英语' ){
+  //     const res = await listEvaluation({ edusubject: props.bookobj.node.edusubject, edustage: props.bookobj.node.edustage, itemkey: "subject", pageSize: 10 });
+  //     const id = res.rows[0]?.id;
+  //     if (id) {
+  //       const res = await listKnowlegepointFormat({evalId: id, pageNum: 1, pageSize: 5000,});
+  //       curKnowledgePointList.value = formatKnowledgePoint(res.rows);
+  //       console.log('updateKnowledgePoint->', curKnowledgePointList.value);
+  //     }
+  //   } else {
+  //     const res = await getBindlist({ eid: lessionid.value })
+  //     if (!res.data || res.data.length < 1) {
+  //       ElMessage.warning('当前章节下未绑定知识点,暂不更新该试题知识点!');
+  //       curKnowledgePointList.value = [];
+  //     }
+  //     else {
+  //       curKnowledgePointList.value = res.data;
+  //     }
+  //   }
+  // }
 
   //item.evalnodeid = '3772b,374112,374233';
   let knowledgePointIdArr = [];
   const pointArr = item.evalnodeid.split(',');
-  if (curKnowledgePointList.value.length > 0 && pointArr.length > 0) {
+  if (entpCourseWorkPointList.length > 0 && pointArr.length > 0) {
     pointArr.forEach(element => {
       element = element.trim();
       let point = [];
-      if (getCurKnowledgePointToForm(point, element, curKnowledgePointList.value)) {
+      if (getCurKnowledgePointToForm(point, element, entpCourseWorkPointList)) {
         point = point.reverse();
         knowledgePointIdArr.push(point);
       }
@@ -1747,33 +1748,33 @@ watch([
   // props.bookobj.levelSecondId? props.bookobj.levelSecondId : props.bookobj.levelFirstId
   lessionid.value = props.bookobj.levelSecondId!='' ? props.bookobj.levelSecondId : props.bookobj.levelFirstId;
 
-  /**
-   * 格式化知识点: 分两种情况
-   * 1. 语文/英语: 获取学科下的所有知识点(该学科对应无章节与知识点绑定, 故只获取全知识点)
-   * 2. 其他: 获取当前章节下的所有知识点
-   */
-  let id = lessionid.value;
-  if( props.bookobj.node.edusubject == '语文' || props.bookobj.node.edusubject == '英语'){
-    id = props.bookobj.node.rootid;
-    const res = await listEvaluation({ edusubject: props.bookobj.node.edusubject, edustage: props.bookobj.node.edustage, itemkey: "subject", pageSize: 10 });
-    id = res.rows[0]?.id;
-    if (id) {
-      listKnowlegepointFormat({evalId: id, pageNum: 1, pageSize: 5000,}).then(res => {
-        //console.log('listKnowlegepointFormat->', res.rows);
-        curKnowledgePointList.value = formatKnowledgePoint(res.rows);
-      });
-    }
-  }else{
-    getBindlist({ eid: id }).then(res => {
-      if (!res.data || res.data.length < 1) {
-        ElMessage.warning('当前章节下未绑定知识点,暂不更新该试题知识点!');
-        curKnowledgePointList.value = [];
-      }
-      else {
-        curKnowledgePointList.value = res.data;
-      }
-    })
-  }
+  // /**
+  //  * 格式化知识点: 分两种情况
+  //  * 1. 语文/英语: 获取学科下的所有知识点(该学科对应无章节与知识点绑定, 故只获取全知识点)
+  //  * 2. 其他: 获取当前章节下的所有知识点
+  //  */
+  // let id = lessionid.value;
+  // if( props.bookobj.node.edusubject == '语文' || props.bookobj.node.edusubject == '英语'){
+  //   id = props.bookobj.node.rootid;
+  //   const res = await listEvaluation({ edusubject: props.bookobj.node.edusubject, edustage: props.bookobj.node.edustage, itemkey: "subject", pageSize: 10 });
+  //   id = res.rows[0]?.id;
+  //   if (id) {
+  //     listKnowlegepointFormat({evalId: id, pageNum: 1, pageSize: 5000,}).then(res => {
+  //       //console.log('listKnowlegepointFormat->', res.rows);
+  //       curKnowledgePointList.value = formatKnowledgePoint(res.rows);
+  //     });
+  //   }
+  // }else{
+  //   getBindlist({ eid: id }).then(res => {
+  //     if (!res.data || res.data.length < 1) {
+  //       ElMessage.warning('当前章节下未绑定知识点,暂不更新该试题知识点!');
+  //       curKnowledgePointList.value = [];
+  //     }
+  //     else {
+  //       curKnowledgePointList.value = res.data;
+  //     }
+  //   })
+  // }
   
 })
 
diff --git a/src/renderer/src/views/classTask/newClassTaskAssign/searchQuestion/index.vue b/src/renderer/src/views/classTask/newClassTaskAssign/searchQuestion/index.vue
index a8d6f8d..d9b4e4a 100644
--- a/src/renderer/src/views/classTask/newClassTaskAssign/searchQuestion/index.vue
+++ b/src/renderer/src/views/classTask/newClassTaskAssign/searchQuestion/index.vue
@@ -18,9 +18,9 @@
         </el-form-item>
       </el-col>
       <el-col :span="10">
-        <el-form-item label="知识点" label-width="70">
+        <!-- <el-form-item label="知识点" label-width="70">
           <el-cascader
-            disabled
+            :disabled="entpCourseWorkPointList.length==0"
             v-model="entpCourseWorkQueryParams.point"
             clearable
             style="width: 100%"
@@ -31,7 +31,7 @@
             collapse-tags
             collapse-tags-tooltip
           />
-        </el-form-item>
+        </el-form-item> -->
       </el-col>
     </el-row>
     <!-- 习题筛选2 -->
@@ -132,7 +132,8 @@ const userStore = useUserStore().user
 const {
   entpCourseWorkTypeList,
   entpCourseWorkGroupList,
-  entpCourseWorkYearList
+  entpCourseWorkYearList,
+  entpCourseWorkPointList
 } = useClassTaskStore();
 
 const props = defineProps({
@@ -146,12 +147,11 @@ const props = defineProps({
   },
 })
 
-const entpCourseWorkPointList = ref([
-  {label: '不限', value: []},
-]); // 习题查询条件 - 知识点
-const knowledgePointProps = ref({value: 'thirdId', label: 'title'});
-//const knowledgePointProps = ref({value: 'thirdId', label: 'knowTitle'});
-
+// const entpCourseWorkPointList = ref([
+//   {label: '不限', value: []},
+// ]); // 习题查询条件 - 知识点
+const knowledgePointProps = reactive({value: 'thirdId', label: 'knowTitle'});
+//const knowledgePointProps = ref({value: 'thirdId', label: 'title'});
 
 // 习题查询参数条件
 const entpCourseWorkQueryParams = reactive({
@@ -193,7 +193,7 @@ const workResource = reactive({
 onMounted(() => {
   console.log('entpCourseWorkTypeList', entpCourseWorkTypeList);
   // 知识点 (仅用更新一次)
-  getEntpCourseWorkPointList();
+  //getEntpCourseWorkPointList();
   debounceQueryData(); // 查询习题列表
 })
 
@@ -258,7 +258,7 @@ const t = function(name, time) {
       // 年份
       yearStr: entpCourseWorkQueryParams.yearStr !== '-1' ? entpCourseWorkQueryParams.yearStr:'',
       // 知识点
-      thirdId: entpCourseWorkQueryParams.point&&entpCourseWorkQueryParams.point.length > 0 ? entpCourseWorkQueryParams.point[0]:'',
+      thirdId: entpCourseWorkQueryParams.point&&entpCourseWorkQueryParams.point.length > 0 ? entpCourseWorkQueryParams.point[entpCourseWorkQueryParams.point.length-1]:'',
       // 关键字
       keyword: entpCourseWorkQueryParams.keyWord && entpCourseWorkQueryParams.keyWord !== '' ? entpCourseWorkQueryParams.keyWord:'',
 
@@ -351,6 +351,7 @@ const handleQueryFromEntpCourseWork= async (queryType) => {
 }
 
 /**
+ * 注意: 该方法已不再使用, 具体知识点初始化方法查看 useClassTaskStore - 241230
  * 3、知识点
  */
  const getEntpCourseWorkPointList = async () => {
diff --git a/src/renderer/src/views/model/index.vue b/src/renderer/src/views/model/index.vue
index 7cc18f3..df93528 100644
--- a/src/renderer/src/views/model/index.vue
+++ b/src/renderer/src/views/model/index.vue
@@ -451,6 +451,14 @@ const changeBook = async(data) => {
   }).then((res) => {
     currentFileList.value = [...res.rows]
   })
+
+  // 更新单元章节对应的知识点
+  const pointParams = {
+    ...uploadData.value,
+    edustage: data.node.edustage,
+    edusubject: data.node.edusubject,
+  }
+  await classTaskStore.initJYPoint(pointParams);
 }
 const onchange = (item) => {
   let path = item.path
diff --git a/src/renderer/src/views/prepare/index.vue b/src/renderer/src/views/prepare/index.vue
index 807584c..66ba273 100644
--- a/src/renderer/src/views/prepare/index.vue
+++ b/src/renderer/src/views/prepare/index.vue
@@ -209,10 +209,12 @@ import * as commUtils from "@/utils/comm";
 import msgUtils from "@/plugins/modal";
 import * as Api_server from "@/api/apiService";
 import * as API_entpcoursefile from "@/api/education/entpcoursefile";
+import useClassTaskStore from '@/store/modules/classTask'
 import { slidesToImg } from '@/utils/ppt' // ppt相关工具
 import ChatWs from '@/plugins/socket' // 聊天socket
 if (!ChatWs.ws) ChatWs.init()
 
+const classTaskStore = useClassTaskStore();
 const toolStore = useToolState()
 const fs = require('fs')
 const { ipcRenderer } = window.electron || {}
@@ -992,8 +994,8 @@ export default {
       let cata = parseCataByNode(data.node)
       this.currentNode = data.node
       this.uploadData.levelFirstId = cata[0]
-      this.uploadData.levelSecondId = cata[1]
-      this.uploadData.levelThirdId = cata[2]
+      this.uploadData.levelSecondId = cata[1] ?? ''
+      this.uploadData.levelThirdId = cata[2] ?? ''
       this.uploadData.textbookId = data.textBook.curBookId
       toolStore.curSubjectNode.querySearch = this.uploadData
       this.initHomeWork()
@@ -1003,6 +1005,14 @@ export default {
       const res = await listEntpcourse(params)
       this.entp = res?.rows?.[0] || null
       sessionStore.set('curr.entp', this.entp) // 缓存当前课程信息
+
+      // 更新单元章节对应的知识点
+      const pointParams = {
+        ...this.uploadData,
+        edustage: data.node.edustage,
+        edusubject: data.node.edusubject,
+      }
+      await classTaskStore.initJYPoint(pointParams);
     },
     // 获取作业
     async initHomeWork() {
-- 
2.44.0.windows.1