Browse Source

Merge remote-tracking branch 'origin/master' into select-subject

# Conflicts:
#	src/views/career/subject/subjectChoice.vue
shilipojs 3 năm trước cách đây
mục cha
commit
8b801f81d6

+ 1 - 0
.env.development

@@ -3,5 +3,6 @@ ENV = 'development'
 
 # 名学金榜学习系统/生产环境
 VUE_APP_BASE_API = 'https://front.mingxuejinbang.com/prod-api'
+#VUE_APP_BASE_API = '/prod-api'
 VUE_APP_MOBILE = "https://h5.mingxuejinbang.com"
 

+ 33 - 30
README.md

@@ -1,30 +1,33 @@
-## 开发
-
-```bash
-# 克隆项目
-git clone https://gitee.com/y_project/RuoYi-Vue
-
-# 进入项目目录
-cd ruoyi-ui
-
-# 安装依赖
-npm install
-
-# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
-npm install --registry=https://registry.npm.taobao.org
-
-# 启动服务
-npm run dev
-```
-
-浏览器访问 http://localhost:80
-
-## 发布
-
-```bash
-# 构建测试环境
-npm run build:stage
-
-# 构建生产环境
-npm run build:prod
-```
+## 开发
+
+```bash
+# 克隆项目
+git clone https://gitee.com/y_project/RuoYi-Vue
+
+# 进入项目目录
+cd ruoyi-ui
+
+# 安装依赖
+npm install
+
+# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
+npm install --registry=https://registry.npm.taobao.org
+
+# 启动服务
+npm run dev
+```
+
+浏览器访问 http://localhost:80
+
+## 发布
+
+```bash
+# 构建测试环境
+npm run build:stage
+
+# 构建生产环境
+npm run build:prod
+```
+
+## 原型
+[线上预览地址](https://front.mingxuejinbang.com/mxjbPrototype/index.html)

+ 741 - 733
src/api/webApi/webQue.js

@@ -1,733 +1,741 @@
-import request from '@/utils/request'
-// 题库中心接口
-// 教学阶段列表
-export function pharseList() {
-  return request({
-    url: '/front/v2/pharse/list',
-    method: 'get',
-  })
-}
-
-// 课程列表
-export function subjectList() {
-  return request({
-    url: '/front/v2/papers/subjects',
-    method: 'get',
-  })
-}
-
-//  练习-课程列表
-export function smartSubjectList() {
-  return request({
-    url: '/front/v2/subject/list',
-    method: 'get',
-  })
-}
-
-// 试卷学册列表
-export function paperGrade(query) {
-  return request({
-    url: '/front/v2/papers/grades',
-    method: 'get',
-    params: query,
-  })
-}
-
-// 练习 -- 年级列表
-export function smartGradeList(query) {
-  return request({
-    url: '/front/v2/grade/list',
-    method: 'get',
-    params: query
-  })
-}
-// 年级列表
-export function gradeList(query) {
-  return request({
-    url: '/front/v2/papers/listGrade',
-    method: 'get',
-    params: query
-  })
-}
-
-// 版本列表
-export function editionList(query) {
-  return request({
-    url: '/front/v2/edition/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 版本列表 新
-export function newEditionList(query) {
-  return request({
-    url: '/front/v2/edition/listOrdered',
-    method: 'get',
-    params: query
-  })
-}
-
-// 获得章节树 
-export function treeList(query) {
-  return request({
-    url: '/front/v2/chapterTree/list',
-    method: 'get',
-    params: query
-  })
-}
-// 根据章节获取题库列表
-export function listByChapter(query) {
-  return request({
-    url: '/front/v2/questions/listByChapter',
-    method: 'get',
-    params: query
-  })
-}
-
-
-// 获取类型列表 
-export function papersTypes(query) {
-  return request({
-    url: '/front/v2/papers/types',
-    method: 'get',
-    params: query
-  })
-}
-// 获取地区列表 
-export function papersAreas(query) {
-  return request({
-    url: '/front/v2/papers/areas',
-    method: 'get',
-    params: query
-  })
-}
-// 获取试卷列表 
-export function papersList(query) {
-  return request({
-    url: '/front/v2/papers/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 预览试卷  
-export function preview(query) {
-  return request({
-    url: 'front/v2/papers/preview',
-    method: 'get',
-    params: query
-  })
-}
-// 收藏试卷 
-export function papersCollect(query) {
-  return request({
-    url: '/front/v2/papers/collect',
-    method: 'post',
-    params: query
-  })
-}
-// 取消收藏试卷 
-export function papersCancelCollect(query) {
-  return request({
-    url: '/front/v2/papers/cancelCollect',
-    method: 'post',
-    params: query
-  })
-}
-
-// 年份列表
-export function papersYears(query) {
-  return request({
-    url: '/front/v2/papers/years',
-    method: 'get',
-    params: query
-  })
-}
-
-// 根据科目查找题型  /front/v2/questions/listQuestionTypesBySubject
-export function qtBySubject(query) {
-  return request({
-    url: '/front/v2/questions/listQuestionTypesBySubject',
-    method: 'get',
-    params: query
-  })
-}
-//  获取知识点分类树
-export function knowledgeTree(query) {
-  return request({
-    url: '/front/v2/knowledgeTree/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 根据知识点获取题库列表 
-export function listByKnowledge(query) {
-  return request({
-    url: '/front/v2/questions/listByKnowledge',
-    method: 'get',
-    params: query
-  })
-}
-// 根据章节获取题库类型和数量
-export function countByChapter(query) {
-  return request({
-    url: '/front/v2/questions/countByChapter',
-    method: 'get',
-    params: query
-  })
-}
-
-// 根据知识点获取题型数量
-export function countByKnowledge(query) {
-  return request({
-    url: '/front/v2/questions/countByKnowledge',
-    method: 'get',
-    params: query
-  })
-}
-
-
-
-// 根据章节获取题目数量
-export function getQuestionsNumByChapter(query) {
-  return request({
-    url: '/front/v2/smartPractice/getQuestionsNumByChapter',
-    method: 'get',
-    params: query
-  })
-}
-// 根据知识点获取题目数量
-export function getQuestionsNumByKnowledge(query) {
-  return request({
-    url: '/front/v2/smartPractice/getQuestionsNumByKnowledge',
-    method: 'get',
-    params: query
-  })
-}
-
-
-// 根据章节获取题目用来练习
-export function getQuestionsByChapter(query) {
-  return request({
-    url: '/front/v2/smartPractice/getQuestionsByChapter',
-    method: 'get',
-    params: query
-  })
-}
-
-
-// 根据知识点获取题目用来练习
-export function getQuestionsByKnowledge(query) {
-  return request({
-    url: '/front/v2/smartPractice/getQuestionsByKnowledge',
-    method: 'get',
-    params: query
-  })
-}
-
-// 保存练习
-export function savePractice(query) {
-  return request({
-    url: '/front/v2/smartPractice/savePractice',
-    method: 'post',
-    params: query
-  })
-}
-
-
-// 取消收藏试题
-export function queCancelCollect(query) {
-  return request({
-    url: '/front/v2/questions/cancelCollect',
-    method: 'post',
-    params: query
-  })
-}
-
-// 收藏试题
-export function queCollect(query) {
-  return request({
-    url: '/front/v2/questions/collect',
-    method: 'post',
-    params: query
-  })
-}
-
-
-// 查询组卷记录
-export function paperRecords(query) {
-  return request({
-    url: '/front/v2/papers/paperRecords',
-    method: 'get',
-    params: query
-  })
-}
-
-// 获取试题蓝记录
-export function getQuestionCardList(query) {
-  return request({
-    url: '/front/v2/papers/getQuestionCardList',
-    method: 'get',
-    params: query
-  })
-}
-// 保存试题栏
-export function editQuestionCard(query) {
-  return request({
-    url: '/front/v2/papers/editQuestionCard',
-    method: 'post',
-    data: query,
-  })
-}
-// 清空试题栏
-export function deleteQuestionCard(query) {
-  return request({
-    url: '/front/v2/papers/deleteQuestionCard',
-    method: 'post',
-    data: query,
-  })
-}
-
-
-// 清空试题栏
-export function deletePaper(query) {
-  return request({
-    url: '/front/v2/papers/deletePaper',
-    method: 'post',
-    params: query,
-  })
-}
-
-// 收藏涉及的学科, type: question/paper
-
-export function favSubjects(query) {
-  return request({
-    url: '/front/v2/favorites/subjects',
-    method: 'get',
-    params: query,
-  })
-}
-
-// 收藏涉及的题型
-export function favQueTypes(query) {
-  return request({
-    url: '/front/v2/favorites/qtypes',
-    method: 'get',
-    params: query,
-  })
-}
-
-// 收藏的问题列表
-export function favQuestions(query) {
-  return request({
-    url: '/front/v2/favorites/questions',
-    method: 'get',
-    params: query,
-  })
-}
-
-// 收藏的试卷列表
-export function favPapers(query) {
-  return request({
-    url: '/front/v2/favorites/papers',
-    method: 'get',
-    params: query,
-  })
-}
-
-
-// 错题涉及的题型
-export function wrongTypes(query) {
-  return request({
-    url: '/front/v2/wrongBook/qtypes',
-    method: 'get',
-    params: query,
-  })
-}
-
-// 错题涉及的学科
-export function wrongSubjects(query) {
-  return request({
-    url: '/front/v2/wrongBook/subjects',
-    method: 'get',
-    params: query,
-  })
-}
-
-
-// 错题列表
-export function wrongQuestions(query) {
-  return request({
-    url: '/front/v2/wrongBook/wrongQuestions',
-    method: 'get',
-    params: query,
-  })
-}
-
-// 删除错题
-export function deleteWrongQuestion(query) {
-  return request({
-    url: '/front/v2/wrongBook/deleteWrongQuestion',
-    method: 'post',
-    params: query,
-  })
-}
-
-// 数据统计(总)
-export function summary(query) {
-  return request({
-    url: '/front/v2/studyRecord/summary',
-    method: 'get',
-    params: query,
-  })
-}
-
-
-// 数据统计-做题数量-按天
-export function questionStatsByDay(query) {
-  return request({
-    url: '/front/v2/studyRecord/questionStatsByDay',
-    method: 'get',
-    params: query,
-  })
-}
-
-//  数据统计-做题数量-按学科
-export function questionStatsBySubject(query) {
-  return request({
-    url: '/front/v2/studyRecord/questionStatsBySubject',
-    method: 'get',
-    params: query,
-  })
-}
-// 数据统计-视频观看时长 - 按天
-export function videoStatsByDay(query) {
-  return request({
-    url: '/front/v2/studyRecord/videoStatsByDay',
-    method: 'get',
-    params: query,
-  })
-}
-
-// 数据统计-视频观看时长 - 按学科
-export function videoStatsBySubject(query) {
-  return request({
-    url: '/front/v2/studyRecord/videoStatsBySubject',
-    method: 'get',
-    params: query,
-  })
-}
-
-
-// 视频学习记录
-export function videoWatchRecords(query) {
-  return request({
-    url: '/front/v2/studyRecord/videoWatchRecords',
-    method: 'get',
-    params: query,
-  })
-}
-
-// 知识点诊断记录
-export function knowRecords(query) {
-  return request({
-    url: '/front/v2/studyRecord/knowledgeDiagnoseRecords',
-    method: 'get',
-    params: query,
-  })
-}
-
-// 知识点诊断记录
-export function isCollected(query) {
-  return request({
-    url: '/front/v2/papers/isCollected',
-    method: 'get',
-    params: query,
-  })
-}
-
-// 添加题目到试题栏
-export function addToQuestionCard(query) {
-  return request({
-    url: '/front/v2/papers/addToQuestionCard',
-    method: 'post',
-    params: query,
-  })
-}
-
-// 获取最底层的知识点
-export function listBottoms(query) {
-  return request({
-    url: '/front/v2/knowledgeTree/listBottoms',
-    method: 'get',
-    params: query,
-  })
-}
-
-// 保存试卷
-export function savePaperInfo(query) {
-  return request({
-    url: '/front/v2/papers/savePaperInfo',
-    method: 'post',
-    data: query,
-  })
-}
-
-// 根据题目类型和数量获取题目
-export function getQuestionsByQTypeAndNum(data) {
-  return request({
-    url: '/front/v2/papers/getQuestionsByQTypeAndNum',
-    method: 'post',
-    data: data,
-  })
-}
-
-// 根据章节获取知识点
-export function knowByChapter(query) {
-  return request({
-    url: '/front/v2/knowledgeTree/listByChapter',
-    method: 'get',
-    params: query,
-  })
-}
-
-// 获取诊断记录
-export function diagnosticRecords(query) {
-  return request({
-    url: '/front/v2/smartPractice/diagnosticRecords',
-    method: 'get',
-    params: query,
-  })
-}
-
-// /prod-api/web/student/resources/getResources
-// 前端 学生资源库列表
-export function getResources(query) {
-  return request({
-    url: '/web/student/resources/getResources',
-    method: 'get',
-    params: query,
-  })
-}
-
-// 根据数组获取题目
-export function getQuestionsByIds(query) {
-  return request({
-    url: '/front/v2/questions/getQuestionsByIds',
-    method: 'get',
-    params: query,
-  })
-}
-
-
-//诊断详情
-export function diagnosticRecordsDetail(query) {
-  return request({
-    url: '/front/v2/smartPractice/diagnosticRecordsDetail',
-    method: 'get',
-    params: query,
-  })
-}
-//获取题目信息
-export function getQuestionInfo(query) {
-  return request({
-    url: '/front/v2/questions/getQuestionInfo',
-    method: 'get',
-    params: query,
-  })
-}
-
-export function xkcxlist(query) {
-  return request({
-    url: '/front/syzy/xkcx/list',
-    method: 'get',
-    params: query,
-  })
-}
-
-
-export function drawInferences(query) {
-  return request({
-    url: '/front/v2/smartPractice/drawInferences',
-    method: 'get',
-    params: query,
-  })
-}
-
-
-export function xkcxYears(query) {
-  return request({
-    url: '/front/syzy/xkcx/years',
-    method: 'get',
-    params: query,
-  })
-}
-
-export function collectAdd(query) {
-  return request({
-    url: '/front/syzy/xkcx/collect/add',
-    method: 'get',
-    params: query,
-  })
-}
-
-export function collectRemove(query) {
-  return request({
-    url: '/front/syzy/xkcx/collect/remove',
-    method: 'get',
-    params: query,
-  })
-}
-export function universityFilters(query) {
-  return request({
-    url: '/front/university/filters',
-    method: 'get',
-    params: query,
-  })
-}
-export function marjorsList(query) {
-  return request({
-    url: '/front/marjors/list',
-    method: 'get',
-    params: query,
-  })
-}
-
-export function xkcxScheme(query) {
-  return request({
-    url: '/front/syzy/xkcx/scheme',
-    method: 'get',
-    params: query,
-  })
-}
-export function schemeAdd(query) {
-  return request({
-    url: '/front/syzy/xkcx/scheme/add',
-    method: 'post',
-    data: query,
-  })
-}
-
-export function getMyXkcx(query) {
-  return request({
-    url: '/front/syzy/xkcx/my',
-    method: 'get',
-    params: query,
-  })
-}
-
-export function schemeDf(query) {
-  return request({
-    url: '/front/syzy/xkcx/scheme/df',
-    method: 'get',
-    params: query,
-  })
-}
-export function schemeDfRemove(query) {
-  return request({
-    url: '/front/syzy/xkcx/scheme/remove',
-    method: 'get',
-    params: query,
-  })
-}
-
-// /prod-api/front/v2/papers/saveToPersonResources
-// 保存到个人资料库(课件资源)
-export function saveToPersonResources(paperId) {
-  return request({
-    url: '/front/v2/papers/saveToPersonResources',
-    method: 'post',
-    params: {
-      paperId
-    },
-  })
-}
-
-// /prod-api/front/v2/papers/listCustomerPaperQeustions
-// 查询组卷题目
-export function listCustomerPaperQeustions(paperId) {
-  return request({
-    url: '/front/v2/papers/listCustomerPaperQeustions',
-    method: 'get',
-    params: {
-      paperId
-    },
-  })
-}
-
-// /prod-api/front/v2/papers/download
-// 下载试卷
-export function download(paperId, period) {
-  const baseURL = process.env.VUE_APP_BASE_API
-  const downloadUrl = baseURL + '/front/v2/papers/download?paperId=' + paperId + "&period=" + period
-  window.location.href = downloadUrl
-}
-
-
-
-// /prod-api/front/v2/papers/updateNameById
-// 修改试卷标题
-export function updateNameById(paperId, paperName) {
-  return request({
-    url: '/front/v2/papers/updateNameById',
-    method: 'post',
-    params: {
-      paperId: paperId,
-      name: paperName
-    },
-  })
-}
-
-// .填报批次
-export function zytbBatches(query) {
-  return request({
-    url: '/front/syzy/zytb/batches',
-    method: 'get',
-    params: query,
-  })
-}
-
-// .填报批次
-export function zytbMarjor(query) {
-  return request({
-    url: '/front/syzy/zytb/marjor',
-    method: 'get',
-    params: query,
-  })
-}
-
-export function zytbUniversity(query) {
-  return request({
-    url: '/front/syzy/zytb/university',
-    method: 'get',
-    params: query,
-  })
-}
-
-export function zytbSave(data) {
-  return request({
-    url: '/front/syzy/zytb/save',
-    method: 'post',
-    data: data,
-  })
-}
-
-export function zytbFilter(batch) {
-  return request({
-    url: '/front/syzy/zytb/university/filters',
-    method: 'get',
-    params: { batch }
-  })
-}
-
-// /prod-api/front/v2/papers/downloadRealPaper
-// 下载真題试卷
-export function downloadRealPaper(paperId, period) {
-  const baseURL = process.env.VUE_APP_BASE_API
-  const downloadUrl = baseURL + '/front/v2/papers/downloadRealPaper?paperId=' + paperId + "&period=" + period
-  window.location.href = downloadUrl
-}
-
-
+import request from '@/utils/request'
+// 题库中心接口
+// 教学阶段列表
+export function pharseList() {
+  return request({
+    url: '/front/v2/pharse/list',
+    method: 'get',
+  })
+}
+
+// 课程列表
+export function subjectList() {
+  return request({
+    url: '/front/v2/papers/subjects',
+    method: 'get',
+  })
+}
+
+//  练习-课程列表
+export function smartSubjectList() {
+  return request({
+    url: '/front/v2/subject/list',
+    method: 'get',
+  })
+}
+
+// 试卷学册列表
+export function paperGrade(query) {
+  return request({
+    url: '/front/v2/papers/grades',
+    method: 'get',
+    params: query,
+  })
+}
+
+// 练习 -- 年级列表
+export function smartGradeList(query) {
+  return request({
+    url: '/front/v2/grade/list',
+    method: 'get',
+    params: query
+  })
+}
+// 年级列表
+export function gradeList(query) {
+  return request({
+    url: '/front/v2/papers/listGrade',
+    method: 'get',
+    params: query
+  })
+}
+
+// 版本列表
+export function editionList(query) {
+  return request({
+    url: '/front/v2/edition/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 版本列表 新
+export function newEditionList(query) {
+  return request({
+    url: '/front/v2/edition/listOrdered',
+    method: 'get',
+    params: query
+  })
+}
+
+// 获得章节树
+export function treeList(query) {
+  return request({
+    url: '/front/v2/chapterTree/list',
+    method: 'get',
+    params: query
+  })
+}
+// 根据章节获取题库列表
+export function listByChapter(query) {
+  return request({
+    url: '/front/v2/questions/listByChapter',
+    method: 'get',
+    params: query
+  })
+}
+
+
+// 获取类型列表
+export function papersTypes(query) {
+  return request({
+    url: '/front/v2/papers/types',
+    method: 'get',
+    params: query
+  })
+}
+// 获取地区列表
+export function papersAreas(query) {
+  return request({
+    url: '/front/v2/papers/areas',
+    method: 'get',
+    params: query
+  })
+}
+// 获取试卷列表
+export function papersList(query) {
+  return request({
+    url: '/front/v2/papers/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 预览试卷
+export function preview(query) {
+  return request({
+    url: 'front/v2/papers/preview',
+    method: 'get',
+    params: query
+  })
+}
+// 收藏试卷
+export function papersCollect(query) {
+  return request({
+    url: '/front/v2/papers/collect',
+    method: 'post',
+    params: query
+  })
+}
+// 取消收藏试卷
+export function papersCancelCollect(query) {
+  return request({
+    url: '/front/v2/papers/cancelCollect',
+    method: 'post',
+    params: query
+  })
+}
+
+// 年份列表
+export function papersYears(query) {
+  return request({
+    url: '/front/v2/papers/years',
+    method: 'get',
+    params: query
+  })
+}
+
+// 根据科目查找题型  /front/v2/questions/listQuestionTypesBySubject
+export function qtBySubject(query) {
+  return request({
+    url: '/front/v2/questions/listQuestionTypesBySubject',
+    method: 'get',
+    params: query
+  })
+}
+//  获取知识点分类树
+export function knowledgeTree(query) {
+  return request({
+    url: '/front/v2/knowledgeTree/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 根据知识点获取题库列表
+export function listByKnowledge(query) {
+  return request({
+    url: '/front/v2/questions/listByKnowledge',
+    method: 'get',
+    params: query
+  })
+}
+// 根据章节获取题库类型和数量
+export function countByChapter(query) {
+  return request({
+    url: '/front/v2/questions/countByChapter',
+    method: 'get',
+    params: query
+  })
+}
+
+// 根据知识点获取题型数量
+export function countByKnowledge(query) {
+  return request({
+    url: '/front/v2/questions/countByKnowledge',
+    method: 'get',
+    params: query
+  })
+}
+
+
+
+// 根据章节获取题目数量
+export function getQuestionsNumByChapter(query) {
+  return request({
+    url: '/front/v2/smartPractice/getQuestionsNumByChapter',
+    method: 'get',
+    params: query
+  })
+}
+// 根据知识点获取题目数量
+export function getQuestionsNumByKnowledge(query) {
+  return request({
+    url: '/front/v2/smartPractice/getQuestionsNumByKnowledge',
+    method: 'get',
+    params: query
+  })
+}
+
+
+// 根据章节获取题目用来练习
+export function getQuestionsByChapter(query) {
+  return request({
+    url: '/front/v2/smartPractice/getQuestionsByChapter',
+    method: 'get',
+    params: query
+  })
+}
+
+
+// 根据知识点获取题目用来练习
+export function getQuestionsByKnowledge(query) {
+  return request({
+    url: '/front/v2/smartPractice/getQuestionsByKnowledge',
+    method: 'get',
+    params: query
+  })
+}
+
+// 保存练习
+export function savePractice(query) {
+  return request({
+    url: '/front/v2/smartPractice/savePractice',
+    method: 'post',
+    params: query
+  })
+}
+
+
+// 取消收藏试题
+export function queCancelCollect(query) {
+  return request({
+    url: '/front/v2/questions/cancelCollect',
+    method: 'post',
+    params: query
+  })
+}
+
+// 收藏试题
+export function queCollect(query) {
+  return request({
+    url: '/front/v2/questions/collect',
+    method: 'post',
+    params: query
+  })
+}
+
+
+// 查询组卷记录
+export function paperRecords(query) {
+  return request({
+    url: '/front/v2/papers/paperRecords',
+    method: 'get',
+    params: query
+  })
+}
+
+// 获取试题蓝记录
+export function getQuestionCardList(query) {
+  return request({
+    url: '/front/v2/papers/getQuestionCardList',
+    method: 'get',
+    params: query
+  })
+}
+// 保存试题栏
+export function editQuestionCard(query) {
+  return request({
+    url: '/front/v2/papers/editQuestionCard',
+    method: 'post',
+    data: query,
+  })
+}
+// 清空试题栏
+export function deleteQuestionCard(query) {
+  return request({
+    url: '/front/v2/papers/deleteQuestionCard',
+    method: 'post',
+    data: query,
+  })
+}
+
+
+// 清空试题栏
+export function deletePaper(query) {
+  return request({
+    url: '/front/v2/papers/deletePaper',
+    method: 'post',
+    params: query,
+  })
+}
+
+// 收藏涉及的学科, type: question/paper
+
+export function favSubjects(query) {
+  return request({
+    url: '/front/v2/favorites/subjects',
+    method: 'get',
+    params: query,
+  })
+}
+
+// 收藏涉及的题型
+export function favQueTypes(query) {
+  return request({
+    url: '/front/v2/favorites/qtypes',
+    method: 'get',
+    params: query,
+  })
+}
+
+// 收藏的问题列表
+export function favQuestions(query) {
+  return request({
+    url: '/front/v2/favorites/questions',
+    method: 'get',
+    params: query,
+  })
+}
+
+// 收藏的试卷列表
+export function favPapers(query) {
+  return request({
+    url: '/front/v2/favorites/papers',
+    method: 'get',
+    params: query,
+  })
+}
+
+
+// 错题涉及的题型
+export function wrongTypes(query) {
+  return request({
+    url: '/front/v2/wrongBook/qtypes',
+    method: 'get',
+    params: query,
+  })
+}
+
+// 错题涉及的学科
+export function wrongSubjects(query) {
+  return request({
+    url: '/front/v2/wrongBook/subjects',
+    method: 'get',
+    params: query,
+  })
+}
+
+
+// 错题列表
+export function wrongQuestions(query) {
+  return request({
+    url: '/front/v2/wrongBook/wrongQuestions',
+    method: 'get',
+    params: query,
+  })
+}
+
+// 删除错题
+export function deleteWrongQuestion(query) {
+  return request({
+    url: '/front/v2/wrongBook/deleteWrongQuestion',
+    method: 'post',
+    params: query,
+  })
+}
+
+// 数据统计(总)
+export function summary(query) {
+  return request({
+    url: '/front/v2/studyRecord/summary',
+    method: 'get',
+    params: query,
+  })
+}
+
+
+// 数据统计-做题数量-按天
+export function questionStatsByDay(query) {
+  return request({
+    url: '/front/v2/studyRecord/questionStatsByDay',
+    method: 'get',
+    params: query,
+  })
+}
+
+//  数据统计-做题数量-按学科
+export function questionStatsBySubject(query) {
+  return request({
+    url: '/front/v2/studyRecord/questionStatsBySubject',
+    method: 'get',
+    params: query,
+  })
+}
+// 数据统计-视频观看时长 - 按天
+export function videoStatsByDay(query) {
+  return request({
+    url: '/front/v2/studyRecord/videoStatsByDay',
+    method: 'get',
+    params: query,
+  })
+}
+
+// 数据统计-视频观看时长 - 按学科
+export function videoStatsBySubject(query) {
+  return request({
+    url: '/front/v2/studyRecord/videoStatsBySubject',
+    method: 'get',
+    params: query,
+  })
+}
+
+
+// 视频学习记录
+export function videoWatchRecords(query) {
+  return request({
+    url: '/front/v2/studyRecord/videoWatchRecords',
+    method: 'get',
+    params: query,
+  })
+}
+
+// 知识点诊断记录
+export function knowRecords(query) {
+  return request({
+    url: '/front/v2/studyRecord/knowledgeDiagnoseRecords',
+    method: 'get',
+    params: query,
+  })
+}
+
+// 知识点诊断记录
+export function isCollected(query) {
+  return request({
+    url: '/front/v2/papers/isCollected',
+    method: 'get',
+    params: query,
+  })
+}
+
+// 添加题目到试题栏
+export function addToQuestionCard(query) {
+  return request({
+    url: '/front/v2/papers/addToQuestionCard',
+    method: 'post',
+    params: query,
+  })
+}
+
+// 获取最底层的知识点
+export function listBottoms(query) {
+  return request({
+    url: '/front/v2/knowledgeTree/listBottoms',
+    method: 'get',
+    params: query,
+  })
+}
+
+// 保存试卷
+export function savePaperInfo(query) {
+  return request({
+    url: '/front/v2/papers/savePaperInfo',
+    method: 'post',
+    data: query,
+  })
+}
+
+// 根据题目类型和数量获取题目
+export function getQuestionsByQTypeAndNum(data) {
+  return request({
+    url: '/front/v2/papers/getQuestionsByQTypeAndNum',
+    method: 'post',
+    data: data,
+  })
+}
+
+// 根据章节获取知识点
+export function knowByChapter(query) {
+  return request({
+    url: '/front/v2/knowledgeTree/listByChapter',
+    method: 'get',
+    params: query,
+  })
+}
+
+// 获取诊断记录
+export function diagnosticRecords(query) {
+  return request({
+    url: '/front/v2/smartPractice/diagnosticRecords',
+    method: 'get',
+    params: query,
+  })
+}
+
+// /prod-api/web/student/resources/getResources
+// 前端 学生资源库列表
+export function getResources(query) {
+  return request({
+    url: '/web/student/resources/getResources',
+    method: 'get',
+    params: query,
+  })
+}
+
+// 根据数组获取题目
+export function getQuestionsByIds(query) {
+  return request({
+    url: '/front/v2/questions/getQuestionsByIds',
+    method: 'get',
+    params: query,
+  })
+}
+
+
+//诊断详情
+export function diagnosticRecordsDetail(query) {
+  return request({
+    url: '/front/v2/smartPractice/diagnosticRecordsDetail',
+    method: 'get',
+    params: query,
+  })
+}
+//获取题目信息
+export function getQuestionInfo(query) {
+  return request({
+    url: '/front/v2/questions/getQuestionInfo',
+    method: 'get',
+    params: query,
+  })
+}
+
+export function xkcxlist(query) {
+  return request({
+    url: '/front/syzy/xkcx/list',
+    method: 'get',
+    params: query,
+  })
+}
+
+export function xkcxlistByMarjors(query) {
+  return request({
+    url: '/front/syzy/xkcx/list',
+    method: 'get',
+    params: query,
+  })
+}
+
+
+export function drawInferences(query) {
+  return request({
+    url: '/front/v2/smartPractice/drawInferences',
+    method: 'get',
+    params: query,
+  })
+}
+
+
+export function xkcxYears(query) {
+  return request({
+    url: '/front/syzy/xkcx/years',
+    method: 'get',
+    params: query,
+  })
+}
+
+export function collectAdd(query) {
+  return request({
+    url: '/front/syzy/xkcx/collect/add',
+    method: 'get',
+    params: query,
+  })
+}
+
+export function collectRemove(query) {
+  return request({
+    url: '/front/syzy/xkcx/collect/remove',
+    method: 'get',
+    params: query,
+  })
+}
+export function universityFilters(query) {
+  return request({
+    url: '/front/university/filters',
+    method: 'get',
+    params: query,
+  })
+}
+export function marjorsList(query) {
+  return request({
+    url: '/front/marjors/list',
+    method: 'get',
+    params: query,
+  })
+}
+
+export function xkcxScheme(query) {
+  return request({
+    url: '/front/syzy/xkcx/scheme',
+    method: 'get',
+    params: query,
+  })
+}
+export function schemeAdd(query) {
+  return request({
+    url: '/front/syzy/xkcx/scheme/add',
+    method: 'post',
+    data: query,
+  })
+}
+
+export function getMyXkcx(query) {
+  return request({
+    url: '/front/syzy/xkcx/my',
+    method: 'get',
+    params: query,
+  })
+}
+
+export function schemeDf(query) {
+  return request({
+    url: '/front/syzy/xkcx/scheme/df',
+    method: 'get',
+    params: query,
+  })
+}
+export function schemeDfRemove(query) {
+  return request({
+    url: '/front/syzy/xkcx/scheme/remove',
+    method: 'get',
+    params: query,
+  })
+}
+
+// /prod-api/front/v2/papers/saveToPersonResources
+// 保存到个人资料库(课件资源)
+export function saveToPersonResources(paperId) {
+  return request({
+    url: '/front/v2/papers/saveToPersonResources',
+    method: 'post',
+    params: {
+      paperId
+    },
+  })
+}
+
+// /prod-api/front/v2/papers/listCustomerPaperQeustions
+// 查询组卷题目
+export function listCustomerPaperQeustions(paperId) {
+  return request({
+    url: '/front/v2/papers/listCustomerPaperQeustions',
+    method: 'get',
+    params: {
+      paperId
+    },
+  })
+}
+
+// /prod-api/front/v2/papers/download
+// 下载试卷
+export function download(paperId, period) {
+  const baseURL = process.env.VUE_APP_BASE_API
+  const downloadUrl = baseURL + '/front/v2/papers/download?paperId=' + paperId + "&period=" + period
+  window.location.href = downloadUrl
+}
+
+
+
+// /prod-api/front/v2/papers/updateNameById
+// 修改试卷标题
+export function updateNameById(paperId, paperName) {
+  return request({
+    url: '/front/v2/papers/updateNameById',
+    method: 'post',
+    params: {
+      paperId: paperId,
+      name: paperName
+    },
+  })
+}
+
+// .填报批次
+export function zytbBatches(query) {
+  return request({
+    url: '/front/syzy/zytb/batches',
+    method: 'get',
+    params: query,
+  })
+}
+
+// .填报批次
+export function zytbMarjor(query) {
+  return request({
+    url: '/front/syzy/zytb/marjor',
+    method: 'get',
+    params: query,
+  })
+}
+
+export function zytbUniversity(query) {
+  return request({
+    url: '/front/syzy/zytb/university',
+    method: 'get',
+    params: query,
+  })
+}
+
+export function zytbSave(data) {
+  return request({
+    url: '/front/syzy/zytb/save',
+    method: 'post',
+    data: data,
+  })
+}
+
+export function zytbFilter(batch) {
+  return request({
+    url: '/front/syzy/zytb/university/filters',
+    method: 'get',
+    params: { batch }
+  })
+}
+
+// /prod-api/front/v2/papers/downloadRealPaper
+// 下载真題试卷
+export function downloadRealPaper(paperId, period) {
+  const baseURL = process.env.VUE_APP_BASE_API
+  const downloadUrl = baseURL + '/front/v2/papers/downloadRealPaper?paperId=' + paperId + "&period=" + period
+  window.location.href = downloadUrl
+}
+
+

+ 1 - 1
src/router/index.js

@@ -677,7 +677,7 @@ export const constantRoutes = [{
       },
       {
         path: '/career/subject/subjectChoice',
-        component: (resolve) => require(['@/views/career/subject/subjectChoice'], resolve),
+        component: (resolve) => require(['@/views/career/subject/subjectChoice.vue'], resolve),
         name: 'SubjectChoice',
         meta: {
           title: '由科目选专业'

+ 1 - 0
src/store/modules/user.js

@@ -39,6 +39,7 @@ const user = {
     GetInfo({ commit, state }) {
       return new Promise((resolve, reject) => {
         getInfo().then(res => {
+          console.log('xxxxxxxxxxx', res);
           const user = res.data
           user.avatar == user.avatar || require("@/assets/images/profile.jpg")
           commit('RELOAD', user)

+ 292 - 171
src/views/career/subject/majorChoice.vue

@@ -13,20 +13,106 @@
       </el-breadcrumb>
     </div>
     <div class="content-box">
-      <div class="content-top-box">
-        <div class="content-box-title">招生专业的选科要求</div>
-        <div class="my-subject-button" @click="toMyPage()">我的选科方案</div>
+      <div class="xkcx-input-box">
+        <div>
+          <el-select
+            v-model="selected.selectNian"
+            @change="onChangeYear"
+            placeholder="全部年份"
+          >
+            <el-option
+              v-for="(item, index) in selected.yearList"
+              :key="index"
+              :label="item"
+              :value="item"
+            >
+            </el-option>
+          </el-select>
+        </div>
+        <div class="button-school">
+          <el-button plain @click="onChangeSchoolPopup">
+            学校
+            <i class="el-icon-my-button"></i>
+          </el-button>
+        </div>
+        <div class="button-major">
+          <el-button plain @click="onChangeMajorPopup">
+            专业<i class="el-icon-my-button"></i
+          ></el-button>
+        </div>
+        <div class="search_header">
+          <input
+            placeholder="搜索专业"
+            v-model="keyword"
+            @keyup.enter="httpGetXkcxList()"
+          />
+          <img
+            src="@/assets/images/icon_search2.png"
+            alt=""
+            @click="httpGetXkcxList()"
+          />
+        </div>
       </div>
-      <div class="content-msg">
-        新高考改革方案,志愿填报将采取“专业+学校”的填报方式,由学校平行志愿转变为专业平行志愿,每个招生专业都有相应的选考科目要求。您可以通过此功能查询各学校各专业的选考科目要求。
+      <div class="popup-box major-box">
+        <div class="popup-select">
+          <div
+            class="popup-select-item"
+            :class="selected.marjorsType == '本科' ? 'active' : ''"
+            @click="clickMarjorsType('本科')"
+          >
+            本科
+          </div>
+          <div
+            class="popup-select-item"
+            :class="selected.marjorsType == '专科' ? 'active' : ''"
+            @click="clickMarjorsType('专科')"
+          >
+            专科
+          </div>
+        </div>
+        <div class="choice-box">
+          <div class="choice-item">
+            <div
+              class="choice-item-menv"
+              v-for="(item, index) in selected.marjorsList.one"
+              :key="index"
+              :class="selected.curMarjors.one.code == item.code ? 'active' : ''"
+              @click="changeMajor(item)"
+            >
+              {{ item.name }}
+            </div>
+          </div>
+          <div class="choice-item">
+            <div
+              class="choice-item-menv"
+              v-for="(item, index) in selected.marjorsList.two"
+              :key="index"
+              :class="selected.curMarjors.two.code == item.code ? 'active' : ''"
+              @click="changeMajor(item)"
+            >
+              {{ item.name }}
+            </div>
+          </div>
+          <div class="choice-item">
+            <el-checkbox-group v-model="selected.curMarjors.three" @change="httpGetXkcxList">
+              <el-checkbox
+                class="choice-item-checkbox"
+                label="全选"
+                @change="onSelectMarjorsAll"
+              ></el-checkbox>
+              <el-checkbox
+                class="choice-item-checkbox"
+                :label="item.name"
+                v-for="(item, index) in selected.marjorsList.three"
+                :key="index"
+              ></el-checkbox>
+            </el-checkbox-group>
+          </div>
+        </div>
       </div>
 
-      <div class="table-box">
-        <mx-table
-          :rows="dataList"
-          :propDefines="propDefines"
-          @selection-change="handleSelectionChange"
-        >
+      <div class="concerned-college-container">
+        <mx-table :rows="dataList" :propDefines="propDefines">
           <template #select="{ row }">
             <img
               class="college-icon"
@@ -51,81 +137,55 @@
           @pagination="onChangePage"
         />
       </div>
-      <div class="button-box">
-        <el-button @click="httpXkcxScheme">提交选科方案</el-button>
-      </div>
-    </div>
-    <div class="major-list-box" v-if="xkcxSchemeTotal>0">
-      <div class="major-list-title">
-        如需填报以上专业,您有以下<span>{{ xkcxSchemeTotal }}</span
-        >种选科组合可以选择
-      </div>
-      <div class="major-card-list">
-        <div
-          class="divide-equally-box"
-          v-for="(item, index) in xkcxSchemeList"
-          :key="index"
-        >
-          <div class="major-card-item">
-            <div class="major-card-title">{{ item.course }}</div>
-            <div class="major-progress-box">
-              <el-progress
-                type="circle"
-                stroke-width="14"
-                width="96"
-                color="#c8eee3"
-                :percentage="item.marjorRate"
-              ></el-progress>
-              <div class="major-progress-text">
-                可报{{ item.marjorRate }}%的专业
-              </div>
-            </div>
-            <div class="major-card-bottom-box">
-              <div class="major-card-msg" v-if="item.collect">
-                <i class="el-icon-circle-check"></i> 已加入我的选科方案
-              </div>
-              <div v-else class="major-card-button" @click="onClickJoin(item)">
-                加入我的选科方案
-              </div>
-            </div>
-          </div>
-        </div>
-      </div>
     </div>
   </div>
 </template>
 
 <script>
-import { xkcxScheme, schemeAdd,xkcxlist } from "@/api/webApi/webQue";
+import {xkcxYears, collectAdd, collectRemove, marjorsList, xkcxlistByMarjors} from "@/api/webApi/webQue";
 
 export default {
   data() {
     return {
+      selected: {
+        yearList: [],
+        selectNian: '',
+        marjorsType: "本科",
+        marjorsLevel: 1,
+        marjorsCode: "",
+        marjorsList: {
+          one: [], two: [], three: []
+        },
+        curMarjors: {
+          one: "", two: "", three: []
+        }
+      },
       dataList: [
       ],
       propDefines: {
-        selection: {
-          type: "selection"
-        },
         universityName: {
           label: "院校名称",
         },
         marjorName: {
           label: "专业(类)名称",
         },
-        resourcesName: {
-          label: "类中所含专业",
+        marjorBelongs: {
+          label: "专业备注",
           align: "left",
         },
         level: {
           label: "专业层次",
         },
         courseRemark0: {
-          label: "首选科目",
+          label: "首选科目范围",
           align: "left",
         },
         courseRemark1: {
-          label: "再选科目",
+          label: "再选科目范围",
+          align: "left",
+        },
+        year: {
+          label: "年份",
           align: "left",
         },
         collect: {
@@ -139,68 +199,131 @@ export default {
       pageNum: 1,
       pageSize: 10,
       total: 0,
-      xkcxSchemeTotal: 0,
-      xkcxSchemeList: [],
+      keyword: ''
     };
   },
   created() {
-    this.httpGetXkcxList();
+    this.httpGetXkcxYears();
+    this.httpGetMarjorsList();
   },
   methods: {
-    onChangePage(page) {
-      this.pageSize = page.limit;
-      this.pageNum = page.page;
-      this.httpGetXkcxList();
+    httpGetXkcxYears() {
+      xkcxYears().then((res) => {
+        this.selected.yearList = res.data || [];
+        this.selected.selectNian = this.selected.yearList[0]
+      });
     },
-    handleSelectionChange(list) {
-      let ids = [];
-      let len = list.length;
-      for (let i = 0; i < len; i++) {
-        ids.push(list[i]["id"]);
-      }
-      this.selectIds = ids;
+    onChangeYear(res) {
+      //切换学年时,取第1页
+      this.pageNum = 1;
+      this.httpGetMarjorsList();
     },
-    onClickJoin(item) {
-      this.httpSchemeAdd(item.id);
+    onChangeSchoolPopup() {
+      this.isShowSchoolPopup = !this.isShowSchoolPopup;
     },
-    httpSchemeAdd(id) {
-      schemeAdd({
-        groupId: id,
-        df: 0,
-      }).then((res) => {
-        this.httpXkcxScheme();
-        console.log(res);
-      });
+    onChangeMajorPopup() {
+      this.isShowMajorPopup = !this.isShowMajorPopup;
     },
-    toMyPage() {
-      this.$router.push("/career/subject/myChoice");
+
+    clickMarjorsType(type) {
+      this.selected.marjorsType = type;
+      this.selected.marjorsLevel = 1;
+      this.selected.marjorsCode = "";
+      this.httpGetMarjorsList();
     },
-    httpXkcxScheme() {
-      if (this.selectIds.length == 0) {
-        this.$message.error("请选择专业");
-        return;
+    onSelectMarjorsAll(res) {
+      if (res) {
+        let len = this.selected.marjorsList.three.length;
+        for (let i = 0; i < len; i++) {
+          let name = this.selected.marjorsList.three[i]["name"];
+          let index = this.selected.curMarjors.three.indexOf(name);
+          if (index < 0) {
+            this.selected.curMarjors.three.push(name);
+          }
+        }
+      } else {
+        this.selected.curMarjors.three = [];
       }
-      xkcxScheme({
-        ids: this.selectIds.toString(),
+    },
+    changeMajor(res) {
+      this.selected.curMarjors.three = [];
+      switch (res.level) {
+        case 1:
+          this.selected.curMarjors.one = res;
+          break;
+        case 2:
+          this.selected.curMarjors.two = res;
+          break;
+      }
+      this.selected.marjorsCode = res.code;
+      this.selected.marjorsLevel = res.level + 1;
+      this.httpGetMarjorsList();
+    },
+    httpGetMarjorsList() {
+      marjorsList({
+        type: this.selected.marjorsType,
+        level: this.selected.marjorsLevel,
+        code: this.selected.marjorsCode,
       }).then((res) => {
-        this.xkcxSchemeList = res.rows;
-        this.xkcxSchemeTotal = res.total;
+        switch (this.selected.marjorsLevel) {
+          case 2:
+            this.selected.marjorsList.two = res.rows;
+            this.changeMajor(res.rows[0]);
+            break;
+          case 3:
+            this.selected.marjorsList.three = res.rows;
+            this.httpGetXkcxList();
+            break;
+          default:
+            this.selected.marjorsList.one = res.rows;
+            this.changeMajor(res.rows[0]);
+            break;
+        }
       });
     },
+    // 查询结果
     httpGetXkcxList() {
-      xkcxlist({
-        collect:true,
+      if (this.selected.curMarjors.three.length<1) return;
+
+      //console.log(this.selected);return;
+      xkcxlistByMarjors({
+        level:this.selected.marjorsType.toString(),
+        keyword: this.keyword,
+        year: this.selected.selectNian.toString(),
+        marjors: this.selected.curMarjors.one.name + "," + this.selected.curMarjors.two.name + "," + this.selected.curMarjors.three.join(","),
         pageNum: this.pageNum,
         pageSize: this.pageSize,
       })
         .then((res) => {
           this.dataList = res.rows;
           this.total = res.total;
+          this.isShowTable = true;
         })
         .catch((err) => {
           console.log("请求出错!");
+          this.cleanSchoolSelect();
         });
     },
+
+    onChangePage(page) {
+      this.pageSize = page.limit;
+      this.pageNum = page.page;
+      this.httpGetXkcxList();
+    },
+    // 收藏
+    httpCollectAdd(row) {
+      row.collect = true;
+      collectAdd({
+        refId: row.id,
+      });
+    },
+    // 取消收藏
+    httpCollectRemove(row) {
+      row.collect = false;
+      collectRemove({
+        refId: row.id,
+      });
+    },
   },
 };
 </script>
@@ -215,104 +338,102 @@ export default {
   background-color: #fff;
   box-shadow: 0 1px 2px 0 rgb(0 0 0 / 5%);
 }
-.el-breadcrumb {
-  font-size: 16px !important;
-}
 .content-box {
-  padding: 60px 40px 60px 50px;
+  padding: 10px 40px 10px 50px;
 }
-.content-box-title {
-  color: #47c6a2;
-  font-size: 24px;
+.major-list-title span {
+  color: #d28140;
 }
-.content-top-box {
-  display: flex;
-  align-items: center;
-  justify-content: space-between;
+
+el-button {
+  padding: 9px 20px;
 }
-.my-subject-button {
-  color: #47c6a2;
-  cursor: pointer;
-  font-size: 14px;
-  border: 1px solid #47c6a2;
-  padding: 13px 110px;
+.button-school {
+  margin: 0 10px;
 }
-.content-msg {
-  margin: 32px 0;
+.el-icon-my-button {
+  background: url(../../../assets/images/subject/icon_shaixuan.png) center no-repeat;
+  background-size: cover;
+}
+
+.el-icon-my-button:before {
+  content: "替";
   font-size: 16px;
+  visibility: hidden;
 }
-.button-box {
-  padding: 30px;
+
+
+.major-box {
   display: flex;
-  justify-content: center;
+  margin-bottom: 30px;
 }
-.major-list-title {
-  color: #4c4c4c;
-  font-size: 24px;
-  text-align: center;
-  margin-top: 100px;
+.popup-select {
+  border-right: 1px solid #d7d7d7;
 }
-.major-list-title span {
-  color: #d28140;
+.popup-select-item {
+  cursor: pointer;
+  line-height: 30px;
+  width: 100px;
+  padding: 0 20px 0 30px;
 }
-.major-card-list {
-  margin-top: 30px;
+.popup-select-item.active {
+  color: #47c6a2;
+  border-right: 2px solid #47c6a2;
+}
+.choice-box {
   display: flex;
-  flex-wrap: wrap;
 }
-.divide-equally-box {
-  width: 33%;
-  margin: 0px auto;
+.choice-item {
+  margin: 0 10px;
+  min-width: 300px;
+  border: 1px solid #d7d7d7;
+  height: 300px;
+  overflow-x: hidden;
+  overflow-y: auto;
+}
+.choice-item-menv {
+  margin: 15px 20px;
+  cursor: pointer;
 }
-.major-card-item {
-  width: 320px;
-  margin: 20px auto;
-  background: rgba(255, 255, 255, 1);
-  box-shadow: 2px 2px 10px 0px rgb(0 0 0 / 10%);
-  margin-top: 20px;
+.choice-item-menv.active {
+  color: #47c6a2;
 }
-.major-card-title {
-  text-align: center;
-  background: #47c6a2;
-  color: #fff;
-  font-size: 24px;
-  font-weight: 600;
-  padding: 25px 0px;
+.choice-item-checkbox {
+  padding: 10px 20px;
+  width: 100%;
+  box-sizing: border-box;
 }
-.major-progress-box {
-  padding: 40px 0 20px 0;
+
+
+.xkcx-input-box {
+  padding: 20px 0 0;
   display: flex;
-  flex-direction: column;
-  align-items: center;
-}
-.major-progress-text {
-  margin-top: 20px;
+  margin-bottom: 20px;
+  border-bottom: 2px solid #47c6a2;
 }
-.major-card-bottom-box {
-  border-top: 1px solid #eee;
-  margin: 0 auto;
-  width: 80%;
-  padding: 20px 0;
+.search_header {
+  margin-left: auto;
   display: flex;
-  flex-direction: column;
+  flex-direction: row;
   align-items: center;
+  justify-content: flex-end;
+  position: relative;
+  margin-right: 20px;
 }
-.major-card-button {
-  width: 100%;
-  background: #47c6a2;
-  color: #fff;
-  height: 48px;
-  text-align: center;
-  line-height: 48px;
+.search_header img {
+  position: absolute;
+  right: 20px;
   cursor: pointer;
+  top: 6px;
 }
-.major-card-msg {
-  height: 48px;
-  line-height: 48px;
-  color: #73a0fa;
-}
-/deep/ .el-progress__text {
-  font-size: 18px !important;
-  color: #73a0fa;
+.search_header input {
+  background: #f7f7ff;
+  border-radius: 20px;
+  border: 1px solid #c6cbf5;
+  outline: none;
+  width: 340px;
+  height: 32px;
+  padding-left: 24px;
 }
+
 </style>

+ 318 - 0
src/views/career/subject/majorChoice.vue.unused

@@ -0,0 +1,318 @@
+<template>
+  <div class="major-page">
+    <div class="breadcrumb">
+      <el-breadcrumb separator="/">
+        <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
+        <el-breadcrumb-item :to="{ path: '/career/plan/index' }"
+          >生涯·志愿</el-breadcrumb-item
+        >
+        <el-breadcrumb-item :to="{ path: '/career/subject/index' }"
+          >选科查询</el-breadcrumb-item
+        >
+        <el-breadcrumb-item>由专业选科目</el-breadcrumb-item>
+      </el-breadcrumb>
+    </div>
+    <div class="content-box">
+      <div class="content-top-box">
+        <div class="content-box-title">招生专业的选科要求</div>
+        <div class="my-subject-button" @click="toMyPage()">我的选科方案</div>
+      </div>
+      <div class="content-msg">
+        新高考改革方案,志愿填报将采取“专业+学校”的填报方式,由学校平行志愿转变为专业平行志愿,每个招生专业都有相应的选考科目要求。您可以通过此功能查询各学校各专业的选考科目要求。
+      </div>
+
+      <div class="table-box">
+        <mx-table
+          :rows="dataList"
+          :propDefines="propDefines"
+          @selection-change="handleSelectionChange"
+        >
+          <template #select="{ row }">
+            <img
+              class="college-icon"
+              v-if="row.collect"
+              @click="httpCollectRemove(row)"
+              src="@/assets/images/subject/icon_shoucang_pre.png"
+            />
+            <img
+              class="college-icon"
+              v-else
+              @click="httpCollectAdd(row)"
+              src="@/assets/images/subject/icon_shoucang_n.png"
+            />
+          </template>
+        </mx-table>
+        <pagination
+          v-show="total > 0"
+          :total="total"
+          :page.sync="pageNum"
+          :limit.sync="pageSize"
+          :page-size="20"
+          @pagination="onChangePage"
+        />
+      </div>
+      <div class="button-box">
+        <el-button @click="httpXkcxScheme">提交选科方案</el-button>
+      </div>
+    </div>
+    <div class="major-list-box" v-if="xkcxSchemeTotal>0">
+      <div class="major-list-title">
+        如需填报以上专业,您有以下<span>{{ xkcxSchemeTotal }}</span
+        >种选科组合可以选择
+      </div>
+      <div class="major-card-list">
+        <div
+          class="divide-equally-box"
+          v-for="(item, index) in xkcxSchemeList"
+          :key="index"
+        >
+          <div class="major-card-item">
+            <div class="major-card-title">{{ item.course }}</div>
+            <div class="major-progress-box">
+              <el-progress
+                type="circle"
+                stroke-width="14"
+                width="96"
+                color="#c8eee3"
+                :percentage="item.marjorRate"
+              ></el-progress>
+              <div class="major-progress-text">
+                可报{{ item.marjorRate }}%的专业
+              </div>
+            </div>
+            <div class="major-card-bottom-box">
+              <div class="major-card-msg" v-if="item.collect">
+                <i class="el-icon-circle-check"></i> 已加入我的选科方案
+              </div>
+              <div v-else class="major-card-button" @click="onClickJoin(item)">
+                加入我的选科方案
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { xkcxScheme, schemeAdd,xkcxlist } from "@/api/webApi/webQue";
+
+export default {
+  data() {
+    return {
+      dataList: [
+      ],
+      propDefines: {
+        selection: {
+          type: "selection"
+        },
+        universityName: {
+          label: "院校名称",
+        },
+        marjorName: {
+          label: "专业(类)名称",
+        },
+        resourcesName: {
+          label: "类中所含专业",
+          align: "left",
+        },
+        level: {
+          label: "专业层次",
+        },
+        courseRemark0: {
+          label: "首选科目",
+          align: "left",
+        },
+        courseRemark1: {
+          label: "再选科目",
+          align: "left",
+        },
+        collect: {
+          label: "选择",
+          align: "left",
+          slot: "select",
+          width: "100px",
+        },
+      },
+      selectIds: [],
+      pageNum: 1,
+      pageSize: 10,
+      total: 0,
+      xkcxSchemeTotal: 0,
+      xkcxSchemeList: [],
+    };
+  },
+  created() {
+    this.httpGetXkcxList();
+  },
+  methods: {
+    onChangePage(page) {
+      this.pageSize = page.limit;
+      this.pageNum = page.page;
+      this.httpGetXkcxList();
+    },
+    handleSelectionChange(list) {
+      let ids = [];
+      let len = list.length;
+      for (let i = 0; i < len; i++) {
+        ids.push(list[i]["id"]);
+      }
+      this.selectIds = ids;
+    },
+    onClickJoin(item) {
+      this.httpSchemeAdd(item.id);
+    },
+    httpSchemeAdd(id) {
+      schemeAdd({
+        groupId: id,
+        df: 0,
+      }).then((res) => {
+        this.httpXkcxScheme();
+        console.log(res);
+      });
+    },
+    toMyPage() {
+      this.$router.push("/career/subject/myChoice");
+    },
+    httpXkcxScheme() {
+      if (this.selectIds.length == 0) {
+        this.$message.error("请选择专业");
+        return;
+      }
+      xkcxScheme({
+        ids: this.selectIds.toString(),
+      }).then((res) => {
+        this.xkcxSchemeList = res.rows;
+        this.xkcxSchemeTotal = res.total;
+      });
+    },
+    httpGetXkcxList() {
+      xkcxlist({
+        collect:true,
+        pageNum: this.pageNum,
+        pageSize: this.pageSize,
+      })
+        .then((res) => {
+          this.dataList = res.rows;
+          this.total = res.total;
+        })
+        .catch((err) => {
+          console.log("请求出错!");
+        });
+    },
+  },
+};
+</script>
+
+
+<style scoped>
+.breadcrumb {
+  padding: 15px 30px;
+  margin: 15px 0;
+  border-bottom: 1px solid #eee;
+  border-radius: 2px;
+  background-color: #fff;
+  box-shadow: 0 1px 2px 0 rgb(0 0 0 / 5%);
+}
+.el-breadcrumb {
+  font-size: 16px !important;
+}
+.content-box {
+  padding: 60px 40px 60px 50px;
+}
+.content-box-title {
+  color: #47c6a2;
+  font-size: 24px;
+}
+.content-top-box {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
+.my-subject-button {
+  color: #47c6a2;
+  cursor: pointer;
+  font-size: 14px;
+  border: 1px solid #47c6a2;
+  padding: 13px 110px;
+}
+.content-msg {
+  margin: 32px 0;
+  font-size: 16px;
+}
+.button-box {
+  padding: 30px;
+  display: flex;
+  justify-content: center;
+}
+.major-list-title {
+  color: #4c4c4c;
+  font-size: 24px;
+  text-align: center;
+  margin-top: 100px;
+}
+.major-list-title span {
+  color: #d28140;
+}
+.major-card-list {
+  margin-top: 30px;
+  display: flex;
+  flex-wrap: wrap;
+}
+.divide-equally-box {
+  width: 33%;
+  margin: 0px auto;
+}
+.major-card-item {
+  width: 320px;
+  margin: 20px auto;
+  background: rgba(255, 255, 255, 1);
+  box-shadow: 2px 2px 10px 0px rgb(0 0 0 / 10%);
+  margin-top: 20px;
+}
+.major-card-title {
+  text-align: center;
+  background: #47c6a2;
+  color: #fff;
+  font-size: 24px;
+  font-weight: 600;
+  padding: 25px 0px;
+}
+.major-progress-box {
+  padding: 40px 0 20px 0;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+.major-progress-text {
+  margin-top: 20px;
+}
+.major-card-bottom-box {
+  border-top: 1px solid #eee;
+  margin: 0 auto;
+  width: 80%;
+  padding: 20px 0;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+.major-card-button {
+  width: 100%;
+  background: #47c6a2;
+  color: #fff;
+  height: 48px;
+  text-align: center;
+  line-height: 48px;
+  cursor: pointer;
+}
+.major-card-msg {
+  height: 48px;
+  line-height: 48px;
+  color: #73a0fa;
+}
+/deep/ .el-progress__text {
+  font-size: 18px !important;
+  color: #73a0fa;
+}
+</style>

+ 273 - 705
src/views/career/subject/subjectChoice.vue

@@ -1,10 +1,10 @@
 <template>
   <div class="subject-page">
-    <div class="breadcrumb">
+    <el-card class="mt20 mb20" >
       <el-breadcrumb separator="/">
         <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
         <el-breadcrumb-item :to="{ path: '/career/plan/index' }"
-        >生涯·志愿
+        >生涯·志愿1
         </el-breadcrumb-item
         >
         <el-breadcrumb-item :to="{ path: '/career/subject/index' }"
@@ -13,311 +13,170 @@
         >
         <el-breadcrumb-item>由科目选专业</el-breadcrumb-item>
       </el-breadcrumb>
-    </div>
+    </el-card>
     <div class="content-box">
-      <div class="content-top-box">
-        <div class="content-box-title">根据科目(组合)查询可报专业</div>
-        <div class="my-subject-button" @click="toMyPage()">我的选科方案</div>
-      </div>
-      <div class="content-msg">
-        高校招生专业必须给出最多3门选考科目要求,根据考生选择的不同选考科目,未来志愿填报时可选择的专业也会有相应不同。任意一个选科组合考生有一定范围的专业选择。您可以根据自己的选考科目优势,或者选考科目的竞争度来自主搭配选考科目组合,查询可报专业。
-      </div>
-
-      <div class="select-box">
-        <div class="select-item">
-          <div class="select-msg">
-            * 请在“物理”和“历史”两门科目中,任意选择1门(必选)
-          </div>
-          <div class="select-click-list">
-            <div
-              class="select-box-click-item two"
-              :class="isShowScience(item.name) ? 'active' : ''"
-              v-for="(item, index) in scienceList"
-              :key="index"
-              @click="onClickScience(item)"
-            >
-              <div>{{ item.name }}</div>
-              <div
-                class="select-box-click-item-icon"
-                v-if="isShowScience(item.name)"
-              >
-                <i class="el-icon-check"></i>
-              </div>
-            </div>
-          </div>
-        </div>
-        <div class="select-item">
-          <div class="select-msg">
-            * 请从以下4门可选科目中点击选中2个,查询对应的可报专业信息
-          </div>
-          <div class="select-click-list">
-            <div
-              class="select-box-click-item four"
-              :class="isShowLiberalArts(item.name) ? 'active' : ''"
-              v-for="(item, index) in liberalArts"
-              @click="onClickLiberalArts(item)"
-              :key="index"
-            >
-              <div>{{ item.name }}</div>
-              <div
-                class="select-box-click-item-icon"
-                v-if="isShowLiberalArts(item.name)"
-              >
-                <i class="el-icon-check"></i>
-              </div>
+      <el-card>
+        <div>
+          <el-row class="radioInput">
+            <div>
+              <span class="radiaTitle">年份:</span>
             </div>
-          </div>
-        </div>
-        <img src="@/assets/images/subject/img_dEmAZ_5698_big.png"/>
-      </div>
-      <el-button type="primary" @click="onSearch">查询可报专业</el-button>
-
-      <div class="xkcx-list-box" v-if="isShowTable">
-        <div class="xkcx-list-title">
-          <span>选择“</span>
-          <span>{{ getSubjectText() }}</span>
-          <span>”作为选考科目可填报以下{{ total }}个专业</span>
-        </div>
-        <div class="xkcx-input-box">
-          <div>
-            <el-select
-              v-model="selectNian"
-              @change="onChangeYear"
-              placeholder="全部年份"
-            >
-              <el-option
-                v-for="(item, index) in yearList"
-                :key="index"
+            <el-radio-group v-model="selected.years" @change="yearChange">
+              <el-radio-button
+                v-for="item in form.years"
+                :key="item"
                 :label="item"
-                :value="item"
-              >
-              </el-option>
-            </el-select>
-          </div>
-          <div class="button-school">
-            <el-button plain @click="onChangeSchoolPopup">
-              学校
-              <i class="el-icon-my-button"></i>
-            </el-button>
-          </div>
-          <div class="button-major">
-            <el-button plain @click="onChangeMajorPopup">
-              专业<i class="el-icon-my-button"></i
-            ></el-button>
-          </div>
-          <div class="search_header">
-            <input
-              placeholder="请输入内容"
-              v-model="keyword"
-              @keyup.enter="checkData()"
-            />
-            <img
-              src="@/assets/images/icon_search2.png"
-              alt=""
-              @click="checkData()"
-            />
-          </div>
-        </div>
-        <div class="concerned-college-container">
-          <mx-table :rows="dataList" :propDefines="propDefines">
-            <template #select="{ row }">
-              <img
-                class="college-icon"
-                v-if="row.collect"
-                @click="httpCollectRemove(row)"
-                src="@/assets/images/subject/icon_shoucang_pre.png"
-              />
-              <img
-                class="college-icon"
-                v-else
-                @click="httpCollectAdd(row)"
-                src="@/assets/images/subject/icon_shoucang_n.png"
-              />
-            </template>
-          </mx-table>
-          <pagination
-            v-show="total > 0"
-            :total="total"
-            :page.sync="pageNum"
-            :limit.sync="pageSize"
-            :page-size="20"
-            @pagination="onChangePage"
-          />
-        </div>
-      </div>
-    </div>
-    <div>
-      <el-dialog
-        :visible="isShowSchoolPopup"
-        width="75%"
-        :before-close="onChangeSchoolPopup"
-      >
-        <div class="popup-box">
-          <div class="popup-item">
-            <div class="popup-item-title">地域选择<span>(可多选)</span></div>
-            <div class="popup-item-content">
-              <el-checkbox-group v-model="selectLocation">
-                <el-checkbox
-                  class="check-box-item"
-                  :label="item"
-                  v-for="(item, index) in locationsList"
-                  :key="index"
-                ></el-checkbox>
-              </el-checkbox-group>
-            </div>
-          </div>
-          <div class="popup-item">
-            <div class="popup-item-title">院校特色<span>(可多选)</span></div>
-            <div class="popup-item-content">
-              <el-checkbox-group v-model="selectCharacteristic">
-                <el-checkbox
-                  class="check-box-item"
-                  :label="item.code"
-                  v-for="(item, index) in characteristicList"
-                  :key="index"
-                >{{ item.label }}
-                </el-checkbox
-                >
-              </el-checkbox-group>
-            </div>
-          </div>
-          <div class="popup-item">
-            <div class="popup-item-title">院校类别<span>(可多选)</span></div>
-            <div class="popup-item-content">
-              <el-checkbox-group v-model="selectTypes">
-                <el-checkbox
-                  class="check-box-item"
-                  :label="item"
-                  v-for="(item, index) in typesList"
-                  :key="index"
-                ></el-checkbox>
-              </el-checkbox-group>
+                style="margin-bottom: 10px"
+              ></el-radio-button>
+            </el-radio-group>
+          </el-row>
+          <el-row class="radioInput radioScience">
+            <div>
+              <span class="radiaTitle">首选科目:</span>
             </div>
-          </div>
-          <div class="bottom-box">
-            <div class="popup-msg">*请点击(或取消)以下学校信息进行筛选</div>
-            <div class="button-list">
-              <el-button @click="cleanSchoolSelect">清空</el-button>
-              <el-button @click="schoolSubmit" type="primary">确定</el-button>
+            <el-checkbox-group v-model="selected.sciences[0]" @change="onScienceChanged" size="mini" :max="1">
+              <el-checkbox-button v-for="item in form.sciences[0]" :key="item" :label="item">
+                {{item}}
+              </el-checkbox-button>
+            </el-checkbox-group>
+            <div>
+              <span class="radiaTitle">再选科目:</span>
             </div>
-          </div>
-        </div>
-      </el-dialog>
-      <el-dialog
-        :visible="isShowMajorPopup"
-        width="75%"
-        :before-close="onChangeMajorPopup"
-      >
-        <div class="popup-box major-box">
-          <div class="popup-select">
-            <div
-              class="popup-select-item"
-              :class="marjorsType == '本科' ? 'active' : ''"
-              @click="clickMarjorsType('本科')"
-            >
-              本科
+            <el-checkbox-group v-model="selected.sciences[1]" @change="onScienceChanged" size="mini" :max="2">
+              <el-checkbox-button v-for="item in form.sciences[1]" :key="item" :label="item">
+                {{item}}
+              </el-checkbox-button>
+            </el-checkbox-group>
+          </el-row>
+          <el-row class="radioInput">
+            <div>
+              <span class="radiaTitle">院校地区:</span>
             </div>
-            <div
-              class="popup-select-item"
-              :class="marjorsType == '高职专科' ? 'active' : ''"
-              @click="clickMarjorsType('高职专科')"
-            >
-              专科
+            <el-radio-group v-model="selected.locations" @change="locationChange">
+              <el-radio-button label="">所有</el-radio-button>
+              <el-radio-button
+                v-for="item in form.locations"
+                :key="item"
+                :label="item"
+                style="margin-bottom: 10px"
+              ></el-radio-button>
+            </el-radio-group>
+          </el-row>
+          <el-row class="radioInput">
+            <div>
+              <span class="radiaTitle">院校类型:</span>
             </div>
-          </div>
-          <div class="choice-box">
-            <div class="choice-item">
-              <div
-                class="choice-item-menv"
-                v-for="(item, index) in marjorsList"
-                :key="index"
-                :class="curMarjorsCode == item.code ? 'active' : ''"
-                @click="changeMajor(item)"
-              >
-                {{ item.name }}
-              </div>
+            <el-radio-group v-model="selected.types" @change="typeChange">
+              <el-radio-button label="">所有</el-radio-button>
+              <el-radio-button
+                v-for="item in form.types"
+                :key="item"
+                :label="item"
+                style="margin-bottom: 10px"
+              ></el-radio-button>
+            </el-radio-group>
+          </el-row>
+          <el-row class="radioInput">
+            <div>
+              <span class="radiaTitle">院校特色:</span>
             </div>
-            <div class="choice-item">
-              <div
-                class="choice-item-menv"
-                v-for="(item, index) in marjorsList2"
-                :key="index"
-                :class="curMarjorsCode2 == item.code ? 'active' : ''"
-                @click="changeMajor(item)"
-              >
-                {{ item.name }}
-              </div>
+            <el-radio-group v-model="selected.features" @change="featureChange">
+              <el-radio-button label="">所有</el-radio-button>
+              <el-radio-button
+                v-for="item in form.features"
+                :key="item.code"
+                :label="item.code"
+                style="margin-bottom: 10px"
+              >{{item.label}}</el-radio-button>
+            </el-radio-group>
+          </el-row>
+          <el-row class="radioInput">
+            <div>
+              <span class="radiaTitle">层次:</span>
             </div>
-            <div class="choice-item">
-              <el-checkbox-group v-model="curMarjorsCode3">
-                <el-checkbox
-                  class="choice-item-checkbox"
-                  label="全选"
-                  @change="onSelectMarjorsAll"
-                ></el-checkbox>
-                <el-checkbox
-                  class="choice-item-checkbox"
-                  :label="item.name"
-                  v-for="(item, index) in marjorsList3"
-                  :key="index"
-                ></el-checkbox>
-              </el-checkbox-group>
+            <el-radio-group v-model="selected.levels" @change="levelChange">
+              <el-radio-button label="">所有</el-radio-button>
+              <el-radio-button
+                v-for="item in form.levels"
+                :key="item"
+                :label="item"
+                style="margin-bottom: 10px"
+              ></el-radio-button>
+            </el-radio-group>
+          </el-row>
+        </div>
+        <div class="content">
+          <div class="xkcx-input-box">
+            <div class="search_header">
+              <input
+                placeholder="请输入内容"
+                v-model="keyword"
+                @keyup.enter="httpGetXkcxList()"
+              />
+              <img
+                src="@/assets/images/icon_search2.png"
+                alt=""
+                @click="httpGetXkcxList()"
+              />
             </div>
           </div>
-        </div>
-        <div class="bottom-box">
-          <div class="popup-msg">*请点击(或取消)以下学校信息进行筛选</div>
-          <div class="button-list">
-            <el-button @click="cleanMajorList">清空</el-button>
-            <el-button @click="majorSubmit" type="primary">确定</el-button>
+          <div class="concerned-college-container">
+            <mx-table :rows="dataList" :propDefines="propDefines">
+              <template #select="{ row }">
+                <img
+                  class="college-icon"
+                  v-if="row.collect"
+                  @click="httpCollectRemove(row)"
+                  src="@/assets/images/subject/icon_shoucang_pre.png"
+                />
+                <img
+                  class="college-icon"
+                  v-else
+                  @click="httpCollectAdd(row)"
+                  src="@/assets/images/subject/icon_shoucang_n.png"
+                />
+              </template>
+            </mx-table>
+            <pagination
+              v-show="total > 0"
+              :total="total"
+              :page.sync="pageNum"
+              :limit.sync="pageSize"
+              :page-size="20"
+              @pagination="onChangePage"
+            />
           </div>
         </div>
-      </el-dialog>
+      </el-card>
     </div>
   </div>
 </template>
 
 <script>
-  import {
-    xkcxlist,
-    xkcxYears,
-    collectAdd,
-    collectRemove,
-    universityFilters,
-    marjorsList,
-  } from "@/api/webApi/webQue";
+  import { selectUniversity } from '@/api/webApi/career-course'
+  import {collectAdd, collectRemove, xkcxlist, xkcxYears} from "@/api/webApi/webQue";
 
   export default {
     data() {
       return {
-        scienceList: [
-          {
-            name: "物理",
-            id: 1,
-          },
-          {
-            name: "历史",
-            id: 2,
-          },
-        ],
-        liberalArts: [
-          {
-            name: "化学",
-            id: 1,
-          },
-          {
-            name: "生物",
-            id: 2,
-          },
-          {
-            name: "地理",
-            id: 3,
-          },
-          {
-            name: "政治",
-            id: 4,
-          },
-        ],
+        // 初始条件
+        form: {
+          years: [],
+          sciences: [["物理", "历史"],["化学", "生物", "政治", "地理"]],
+          locations: ["湖南", "湖北"],
+          types: ["综合", "工科", "农业", "林业"],
+          features:[ "双一流", "985", "211"],
+          levels:["本科","专科"]
+        },
+        // 选中条件
+        selected: { years:[], sciences:[[],[]], locations:"", types:"", features:"", levels:"" },
+        pageNum: 1,
+        pageSize: 20,
+        total: 0,
+        keyword: "",
+        // 查询结果
+        dataList: [],
+        isShowTabl: true,
         propDefines: {
           universityName: {
             label: "院校名称",
@@ -325,19 +184,19 @@
           marjorName: {
             label: "专业(类)名称",
           },
-          resourcesName: {
-            label: "类中所含专业",
+          marjorBelongs: {
+            label: "专业备注",
             align: "left",
           },
           level: {
             label: "专业层次",
           },
           courseRemark0: {
-            label: "首选科目",
+            label: "首选科目范围",
             align: "left",
           },
           courseRemark1: {
-            label: "再选科目",
+            label: "再选科目范围",
             align: "left",
           },
           year: {
@@ -351,34 +210,6 @@
             width: "100px",
           },
         },
-        curSelectScienceList: "",
-        curSelectLiberalArts: [],
-        options: [],
-        selectNian: "",
-        dataList: [],
-        yearList: [],
-        pageNum: 1,
-        pageSize: 20,
-        total: 0,
-        keyword: "",
-        isShowTable: false,
-        locationsList: [],
-        typesList: [],
-        characteristicList: [],
-        selectLocation: [], //地区
-        selectTypes: [], //类别
-        selectCharacteristic: [], //选中的特色
-        isShowSchoolPopup: false,
-        isShowMajorPopup: false,
-        marjorsList: [],
-        marjorsList2: [],
-        marjorsList3: [],
-        marjorsType: "本科",
-        marjorsLevel: 1,
-        marjorsCode: "",
-        curMarjorsCode: "",
-        curMarjorsCode2: "",
-        curMarjorsCode3: [],
       };
     },
     created() {
@@ -389,194 +220,65 @@
         this.curSelectLiberalArts.push(this.liberalArts[0]["name"]);
         this.curSelectLiberalArts.push(this.liberalArts[1]["name"]);
       }
-      // 回显
-      if(this.$route.query.curSelectScienceList) {
-        this.curSelectScienceList = this.$route.query.curSelectScienceList
-      }
-
-      if(this.$route.query.curSelectLiberalArts.length > 0) {
-        this.curSelectLiberalArts = this.$route.query.curSelectLiberalArts
-      }
       this.httpGetXkcxYears();
       this.httpUniversityFilters();
       this.httpGetMarjorsList();
+      this.getYears();
+      this.getUniversity();
+
     },
     methods: {
-      onSelectMarjorsAll(res) {
-        if (res) {
-          let len = this.marjorsList3.length;
-          for (let i = 0; i < len; i++) {
-            let name = this.marjorsList3[i]["name"];
-            let index = this.curMarjorsCode3.indexOf(name);
-            if (index < 0) {
-              this.curMarjorsCode3.push(name);
-            }
-          }
-        } else {
-          this.curMarjorsCode3 = [];
-        }
-      },
-      onChangeSchoolPopup() {
-        this.isShowSchoolPopup = !this.isShowSchoolPopup;
-      },
-      onChangeMajorPopup() {
-        this.isShowMajorPopup = !this.isShowMajorPopup;
-      },
-      changeMajor(res) {
-        this.curMarjorsCode3 = [];
-        switch (res.level) {
-          case 1:
-            this.curMarjorsCode = res.code;
-            break;
-          case 2:
-            this.curMarjorsCode2 = res.code;
-            break;
-        }
-        this.marjorsCode = res.code;
-        this.marjorsLevel = res.level + 1;
-        this.httpGetMarjorsList();
-      },
-      schoolSubmit() {
-        this.isShowSchoolPopup = false;
-        this.checkData();
-      },
-      majorSubmit() {
-        this.isShowMajorPopup = false;
-        this.checkData();
-      },
-      cleanSchoolSelect() {
-        this.selectLocation = [];
-        this.selectTypes = [];
-        this.selectCharacteristic = [];
-      },
-      cleanMajorList() {
-        this.curMarjorsCode3 = [];
-      },
-      getSubjectText() {
-        let rText = "";
-        rText += this.curSelectScienceList + "+";
-        let lLen = this.curSelectLiberalArts.length;
-        for (let i = 0; i < lLen; i++) {
-          rText += this.curSelectLiberalArts[i];
-          if (i != lLen - 1) {
-            rText += "+";
-          }
-        }
-        return rText;
-      },
-      clickMarjorsType(type) {
-        this.marjorsType = type;
-        this.marjorsLevel = 1;
-        this.marjorsCode = "";
-        this.httpGetMarjorsList();
-      },
-      httpGetMarjorsList() {
-        marjorsList({
-          type: this.marjorsType,
-          level: this.marjorsLevel,
-          code: this.marjorsCode,
-        }).then((res) => {
-          switch (this.marjorsLevel) {
-            case 2:
-              this.marjorsList2 = res.rows;
-              this.changeMajor(res.rows[0]);
-              break;
-            case 3:
-              this.marjorsList3 = res.rows;
-              break;
-            default:
-              this.marjorsList = res.rows;
-              this.changeMajor(res.rows[0]);
-              break;
-          }
-        });
-      },
-      httpUniversityFilters() {
-        universityFilters({}).then(({data}) => {
-          this.locationsList = data.locations;
-          this.typesList = data.types;
-          this.characteristicList = data.features;
-        });
-      },
-      httpCollectAdd(row) {
-        collectAdd({
-          refId: row.id,
-        }).then((res) => {
-          this.checkData();
-        });
-      },
-      httpCollectRemove(row) {
-        collectRemove({
-          refId: row.id,
-        }).then((res) => {
-          this.checkData();
+      // 取有效年份清单
+      getYears() {
+        xkcxYears().then((res) => {
+          this.form.years = res.data || [];
+          this.selected.years = this.form.years[0]
         });
       },
-      onChangeYear(res) {
-        //切换学年时,取第1页
-        this.pageNum = 1;
-        this.checkData();
-      },
-      onClickScience(item) {
-        if (this.curSelectScienceList == item.name) {
-          return;
-        } else {
-          this.curSelectScienceList = item.name;
-        }
-        this.isShowTable = false;
-      },
-      onClickLiberalArts(item) {
-        let index = this.curSelectLiberalArts.indexOf(item.name);
-        if (index >= 0) {
-          this.curSelectLiberalArts.splice(index, 1);
-        } else {
-          this.curSelectLiberalArts.push(item.name);
-        }
-        this.isShowTable = false;
-      },
-      isShowScience(name) {
-        return this.curSelectScienceList == name;
+      // 取其他条件清单
+      getUniversity() {
+        selectUniversity().then(res => {
+          this.form.features = res.data.features;
+          this.form.locations = res.data.locations;
+          this.form.levels = res.data.levels;
+          this.form.types = res.data.types;
+        })
       },
-      isShowLiberalArts(name) {
-        return this.curSelectLiberalArts.indexOf(name) >= 0;
+
+      yearChange(value) {
+        this.httpGetXkcxList();
       },
-      onSearch() {
-        this.checkData();
+      onScienceChanged(value) {
+        this.httpGetXkcxList();
       },
-      httpGetXkcxYears() {
-        xkcxYears().then((res) => {
-          this.yearList = res.data || [];
-          this.selectNian = this.yearList[0]
-        });
+      locationChange(value) {
+        this.httpGetXkcxList();
       },
-      onChangePage(page) {
-        this.pageSize = page.limit;
-        this.pageNum = page.page;
-        this.checkData();
+      typeChange(value) {
+        this.httpGetXkcxList();
       },
-      checkData(cb) {
-        if (this.curSelectLiberalArts.length != 2) {
-          this.$message.error("请从右侧4门可选科目中点击选择2门");
-          return;
-        }
-
+      featureChange(value) {
         this.httpGetXkcxList();
       },
-      toMyPage() {
-        this.$router.push("/career/subject/myChoice");
+      levelChange(value) {
+        this.httpGetXkcxList();
       },
+      // 查询结果
       httpGetXkcxList() {
+        if (this.selected.sciences[0].length<1 || this.selected.sciences[1].length<2) return;
+
+        //console.log(this.selected);return;
         xkcxlist({
-          level:this.marjorsType,
+          level:this.selected.levels.toString(),
           keyword: this.keyword,
-          course0: this.curSelectScienceList,
-          course1: this.curSelectLiberalArts.toString(),
-          locations: this.selectLocation.toString(),
-          ts: this.selectCharacteristic.toString(),
-          types: this.selectTypes.toString(),
-          year: this.selectNian,
+          course0: this.selected.sciences[0].toString(),
+          course1: this.selected.sciences[1].toString(),
+          locations: this.selected.locations.toString(),
+          ts: this.selected.features.toString(),
+          types: this.selected.types.toString(),
+          year: this.selected.years.toString(),
           pageNum: this.pageNum,
-          marjors: this.curMarjorsCode3.toString(),
+          marjors: [],
           pageSize: this.pageSize,
         })
           .then((res) => {
@@ -589,145 +291,44 @@
             this.cleanSchoolSelect();
           });
       },
+
+      onChangePage(page) {
+        this.pageSize = page.limit;
+        this.pageNum = page.page;
+        this.httpGetXkcxList();
+      },
+      // 收藏
+      httpCollectAdd(row) {
+        row.collect = true;
+        collectAdd({
+          refId: row.id,
+        });
+      },
+      // 取消收藏
+      httpCollectRemove(row) {
+        row.collect = false;
+        collectRemove({
+          refId: row.id,
+        });
+      },
     },
   };
 </script>
 
 <style scoped>
+.xkcx-input-box {
+  padding: 20px 0;
+  display: flex;
+  margin-top: -3em;
+}
   .subject-page {
     padding: 0 100px;
   }
 
-  .college-icon {
-    cursor: pointer;
-  }
-
-  .breadcrumb {
-    padding: 15px 30px;
-    margin: 15px 0;
-    border-bottom: 1px solid #eee;
-    border-radius: 2px;
-    background-color: #fff;
-    box-shadow: 0 1px 2px 0 rgb(0 0 0 / 5%);
-  }
-
-  .el-breadcrumb {
-    font-size: 16px !important;
-  }
-
-  .content-box {
-    padding: 60px 40px 60px 50px;
-  }
-
-  .content-box-title {
-    color: #47c6a2;
-    font-size: 24px;
-  }
-
-  .content-top-box {
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
-  }
-
-  .my-subject-button {
-    color: #47c6a2;
-    font-size: 14px;
-    cursor: pointer;
-    border: 1px solid #47c6a2;
-    padding: 13px 110px;
-  }
-
-  .content-msg {
-    margin: 32px 0;
-    font-size: 16px;
-  }
-
-  .select-box {
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
-  }
-
-  .select-item {
-    box-sizing: border-box;
-    border: 1px dashed rgba(24, 144, 255, 1);
-    height: 334px;
-    padding: 20px;
-    margin-right: 20px;
-  }
-
-  .select-msg {
-    color: #47c6a2;
-    font-size: 14px;
-  }
-
-  .select-click-list {
-    margin-top: 40px;
-    display: flex;
-    flex-wrap: wrap;
-    justify-content: space-between;
-  }
-
-  .select-box-click-item {
-    background-color: #fbfbfb;
-    cursor: pointer;
-    height: 89px;
-    line-height: 89px;
-    font-size: 24px;
-    color: #414141;
-    font-weight: 600;
-    text-align: center;
-    position: relative;
-  }
-
-  .select-box-click-item.two {
-    margin: 10px 0;
-    width: 100%;
-  }
-
-  .select-box-click-item.four {
-    margin: 10px 0;
-    width: 46%;
-  }
-
-  .select-box-click-item.active {
-    background-color: #d4eaff !important;
-  }
-
-  .select-box-click-item-icon {
-    height: 20px;
-    width: 20px;
-    border-radius: 2px;
-    background: #47c6a2;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    font-size: 16px;
-    position: absolute;
-    right: 0;
-    bottom: 0;
-    color: #fff;
-  }
-
-  .select-button {
-    padding: 0px 60px;
-  }
+.college-icon {
+  cursor: pointer;
+}
 
-  .xkcx-list-title {
-    width: 100%;
-    background-color: #e8e8e8;
-    padding: 30px;
-    text-align: center;
-    font-size: 24px;
-    color: #4c4c4c;
-    margin-top: 80px;
-  }
-
-  .xkcx-input-box {
-    padding: 20px 0;
-    display: flex;
-  }
 
   .search_header {
     margin-left: auto;
@@ -756,107 +357,74 @@
     padding-left: 24px;
   }
 
-  .button-school {
-    margin: 0 20px;
-  }
-
-  .button-icon {
-    width: 12px;
-    height: 12px;
-  }
-
-  .el-icon-my-button {
-    background: url(../../../assets/images/subject/icon_shaixuan.png) center no-repeat;
-    background-size: cover;
-  }
-
-  .el-icon-my-button:before {
-    content: "替";
-    font-size: 16px;
-    visibility: hidden;
-  }
-
-  .popup-item-title {
-    color: #414141;
-    font-size: 16px;
-    font-weight: 600;
-  }
-
   .popup-item-title span {
     font-size: 14px;
     font-weight: 500;
   }
 
-  .check-box-item {
-    padding: 8px 0;
-    min-width: 70px;
-  }
+</style>
 
-  .popup-item-content {
-    padding: 20px 0;
-  }
+<style lang="scss" scoped>
+.layui-bg-orange {
+  background-color: var(--themeColor);
+  margin-left: 0;
+}
+</style>
 
-  .popup-msg {
-    color: #ffa400;
-    font-weight: 400;
+<style lang="scss">
+.el-checkbox-button {
+  margin-bottom: 10px;
+  .el-checkbox-button__inner {
     font-size: 14px;
   }
-
-  .bottom-box {
-    display: flex;
-    justify-content: space-between;
-  }
-
-  .button-list {
-    padding: 0 20px;
-  }
-
-  .major-box {
-    display: flex;
-    margin-bottom: 30px;
-  }
-
-  .popup-select {
-    border-right: 1px solid #d7d7d7;
-  }
-
-  .popup-select-item {
-    cursor: pointer;
-    line-height: 30px;
-    width: 100px;
-    padding: 0 20px 0 30px;
-  }
-
-  .popup-select-item.active {
-    color: #47c6a2;
-    border-right: 2px solid #47c6a2;
-  }
-
-  .choice-box {
-    display: flex;
+}
+
+.radioInput {
+  .el-radio {
+    .el-radio__input {
+      display: none;
+    }
+  }
+}
+.radioInput.radioScience {
+  .el-radio-button {
+    border: 1px solid #47C6A2;
+    border-radius: 3px;
+    margin-right: 10px;
+  }
+}
+.radioInput {
+  display: flex;
+  .el-radio-button .el-radio-button__inner {
+    border-radius: 4px !important;
+    border: none;
+    padding: 5px 10px !important;
+    font-weight: 400;
+    font-family: PingFangSC-Regular, PingFang SC;
   }
-
-  .choice-item {
-    margin: 0 10px;
-    min-width: 300px;
-    border: 1px solid #d7d7d7;
-    height: 300px;
-    overflow-x: hidden;
-    overflow-y: auto;
+  .el-radio-button__orig-radio:checked + .el-radio-button__inner {
+    box-shadow: none;
   }
-
-  .choice-item-menv {
-    margin: 15px 20px;
-    cursor: pointer;
-  }
-
-  .choice-item-menv.active {
-    color: #47c6a2;
+  .radiaTitle {
+    display: inline-block;
+    width: 130px;
+    font-size: 14px;
+    text-align: right;
+    margin-top: 2px;
+  }
+}
+.radioInput02 {
+  display: flex;
+  align-items: center;
+  .radiaTitle {
+    display: inline-block;
+    width: 130px;
+    font-size: 14px;
+    text-align: right;
+    margin-top: 2px;
   }
-
-  .choice-item-checkbox {
-    padding: 10px 20px;
-    width: 100%;
-    box-sizing: border-box;
+  .el-input--medium .el-input__inner {
+    border-radius: 50px;
   }
+}
 </style>

+ 854 - 0
src/views/career/subject/subjectChoice.vue.unused

@@ -0,0 +1,854 @@
+<template>
+  <div class="subject-page">
+    <div class="breadcrumb">
+      <el-breadcrumb separator="/">
+        <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
+        <el-breadcrumb-item :to="{ path: '/career/plan/index' }"
+        >生涯·志愿
+        </el-breadcrumb-item
+        >
+        <el-breadcrumb-item :to="{ path: '/career/subject/index' }"
+        >选科查询
+        </el-breadcrumb-item
+        >
+        <el-breadcrumb-item>由科目选专业</el-breadcrumb-item>
+      </el-breadcrumb>
+    </div>
+    <div class="content-box">
+      <div class="content-top-box">
+        <div class="content-box-title">根据科目(组合)查询可报专业</div>
+        <div class="my-subject-button" @click="toMyPage()">我的选科方案</div>
+      </div>
+      <div class="content-msg">
+        高校招生专业必须给出最多3门选考科目要求,根据考生选择的不同选考科目,未来志愿填报时可选择的专业也会有相应不同。任意一个选科组合考生有一定范围的专业选择。您可以根据自己的选考科目优势,或者选考科目的竞争度来自主搭配选考科目组合,查询可报专业。
+      </div>
+
+      <div class="select-box">
+        <div class="select-item">
+          <div class="select-msg">
+            * 请在“物理”和“历史”两门科目中,任意选择1门(必选)
+          </div>
+          <div class="select-click-list">
+            <div
+              class="select-box-click-item two"
+              :class="isShowScience(item.name) ? 'active' : ''"
+              v-for="(item, index) in scienceList"
+              :key="index"
+              @click="onClickScience(item)"
+            >
+              <div>{{ item.name }}</div>
+              <div
+                class="select-box-click-item-icon"
+                v-if="isShowScience(item.name)"
+              >
+                <i class="el-icon-check"></i>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="select-item">
+          <div class="select-msg">
+            * 请从以下4门可选科目中点击选中2个,查询对应的可报专业信息
+          </div>
+          <div class="select-click-list">
+            <div
+              class="select-box-click-item four"
+              :class="isShowLiberalArts(item.name) ? 'active' : ''"
+              v-for="(item, index) in liberalArts"
+              @click="onClickLiberalArts(item)"
+              :key="index"
+            >
+              <div>{{ item.name }}</div>
+              <div
+                class="select-box-click-item-icon"
+                v-if="isShowLiberalArts(item.name)"
+              >
+                <i class="el-icon-check"></i>
+              </div>
+            </div>
+          </div>
+        </div>
+        <img src="@/assets/images/subject/img_dEmAZ_5698_big.png"/>
+      </div>
+      <el-button type="primary" @click="onSearch">查询可报专业</el-button>
+
+      <div class="xkcx-list-box" v-if="isShowTable">
+        <div class="xkcx-list-title">
+          <span>选择“</span>
+          <span>{{ getSubjectText() }}</span>
+          <span>”作为选考科目可填报以下{{ total }}个专业</span>
+        </div>
+        <div class="xkcx-input-box">
+          <div>
+            <el-select
+              v-model="selectNian"
+              @change="onChangeYear"
+              placeholder="全部年份"
+            >
+              <el-option
+                v-for="(item, index) in yearList"
+                :key="index"
+                :label="item"
+                :value="item"
+              >
+              </el-option>
+            </el-select>
+          </div>
+          <div class="button-school">
+            <el-button plain @click="onChangeSchoolPopup">
+              学校
+              <i class="el-icon-my-button"></i>
+            </el-button>
+          </div>
+          <div class="button-major">
+            <el-button plain @click="onChangeMajorPopup">
+              专业<i class="el-icon-my-button"></i
+            ></el-button>
+          </div>
+          <div class="search_header">
+            <input
+              placeholder="请输入内容"
+              v-model="keyword"
+              @keyup.enter="checkData()"
+            />
+            <img
+              src="@/assets/images/icon_search2.png"
+              alt=""
+              @click="checkData()"
+            />
+          </div>
+        </div>
+        <div class="concerned-college-container">
+          <mx-table :rows="dataList" :propDefines="propDefines">
+            <template #select="{ row }">
+              <img
+                class="college-icon"
+                v-if="row.collect"
+                @click="httpCollectRemove(row)"
+                src="@/assets/images/subject/icon_shoucang_pre.png"
+              />
+              <img
+                class="college-icon"
+                v-else
+                @click="httpCollectAdd(row)"
+                src="@/assets/images/subject/icon_shoucang_n.png"
+              />
+            </template>
+          </mx-table>
+          <pagination
+            v-show="total > 0"
+            :total="total"
+            :page.sync="pageNum"
+            :limit.sync="pageSize"
+            :page-size="20"
+            @pagination="onChangePage"
+          />
+        </div>
+      </div>
+    </div>
+    <div>
+      <el-dialog
+        :visible="isShowSchoolPopup"
+        width="75%"
+        :before-close="onChangeSchoolPopup"
+      >
+        <div class="popup-box">
+          <div class="popup-item">
+            <div class="popup-item-title">地域选择<span>(可多选)</span></div>
+            <div class="popup-item-content">
+              <el-checkbox-group v-model="selectLocation">
+                <el-checkbox
+                  class="check-box-item"
+                  :label="item"
+                  v-for="(item, index) in locationsList"
+                  :key="index"
+                ></el-checkbox>
+              </el-checkbox-group>
+            </div>
+          </div>
+          <div class="popup-item">
+            <div class="popup-item-title">院校特色<span>(可多选)</span></div>
+            <div class="popup-item-content">
+              <el-checkbox-group v-model="selectCharacteristic">
+                <el-checkbox
+                  class="check-box-item"
+                  :label="item.code"
+                  v-for="(item, index) in characteristicList"
+                  :key="index"
+                >{{ item.label }}
+                </el-checkbox
+                >
+              </el-checkbox-group>
+            </div>
+          </div>
+          <div class="popup-item">
+            <div class="popup-item-title">院校类别<span>(可多选)</span></div>
+            <div class="popup-item-content">
+              <el-checkbox-group v-model="selectTypes">
+                <el-checkbox
+                  class="check-box-item"
+                  :label="item"
+                  v-for="(item, index) in typesList"
+                  :key="index"
+                ></el-checkbox>
+              </el-checkbox-group>
+            </div>
+          </div>
+          <div class="bottom-box">
+            <div class="popup-msg">*请点击(或取消)以下学校信息进行筛选</div>
+            <div class="button-list">
+              <el-button @click="cleanSchoolSelect">清空</el-button>
+              <el-button @click="schoolSubmit" type="primary">确定</el-button>
+            </div>
+          </div>
+        </div>
+      </el-dialog>
+      <el-dialog
+        :visible="isShowMajorPopup"
+        width="75%"
+        :before-close="onChangeMajorPopup"
+      >
+        <div class="popup-box major-box">
+          <div class="popup-select">
+            <div
+              class="popup-select-item"
+              :class="marjorsType == '本科' ? 'active' : ''"
+              @click="clickMarjorsType('本科')"
+            >
+              本科
+            </div>
+            <div
+              class="popup-select-item"
+              :class="marjorsType == '高职专科' ? 'active' : ''"
+              @click="clickMarjorsType('高职专科')"
+            >
+              专科
+            </div>
+          </div>
+          <div class="choice-box">
+            <div class="choice-item">
+              <div
+                class="choice-item-menv"
+                v-for="(item, index) in marjorsList"
+                :key="index"
+                :class="curMarjorsCode == item.code ? 'active' : ''"
+                @click="changeMajor(item)"
+              >
+                {{ item.name }}
+              </div>
+            </div>
+            <div class="choice-item">
+              <div
+                class="choice-item-menv"
+                v-for="(item, index) in marjorsList2"
+                :key="index"
+                :class="curMarjorsCode2 == item.code ? 'active' : ''"
+                @click="changeMajor(item)"
+              >
+                {{ item.name }}
+              </div>
+            </div>
+            <div class="choice-item">
+              <el-checkbox-group v-model="curMarjorsCode3">
+                <el-checkbox
+                  class="choice-item-checkbox"
+                  label="全选"
+                  @change="onSelectMarjorsAll"
+                ></el-checkbox>
+                <el-checkbox
+                  class="choice-item-checkbox"
+                  :label="item.name"
+                  v-for="(item, index) in marjorsList3"
+                  :key="index"
+                ></el-checkbox>
+              </el-checkbox-group>
+            </div>
+          </div>
+        </div>
+        <div class="bottom-box">
+          <div class="popup-msg">*请点击(或取消)以下学校信息进行筛选</div>
+          <div class="button-list">
+            <el-button @click="cleanMajorList">清空</el-button>
+            <el-button @click="majorSubmit" type="primary">确定</el-button>
+          </div>
+        </div>
+      </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script>
+  import {
+    xkcxlist,
+    xkcxYears,
+    collectAdd,
+    collectRemove,
+    universityFilters,
+    marjorsList,
+  } from "@/api/webApi/webQue";
+
+  export default {
+    data() {
+      return {
+        scienceList: [
+          {
+            name: "物理",
+            id: 1,
+          },
+          {
+            name: "历史",
+            id: 2,
+          },
+        ],
+        liberalArts: [
+          {
+            name: "化学",
+            id: 1,
+          },
+          {
+            name: "生物",
+            id: 2,
+          },
+          {
+            name: "地理",
+            id: 3,
+          },
+          {
+            name: "政治",
+            id: 4,
+          },
+        ],
+        propDefines: {
+          universityName: {
+            label: "院校名称",
+          },
+          marjorName: {
+            label: "专业(类)名称",
+          },
+          resourcesName: {
+            label: "类中所含专业",
+            align: "left",
+          },
+          level: {
+            label: "专业层次",
+          },
+          courseRemark0: {
+            label: "首选科目",
+            align: "left",
+          },
+          courseRemark1: {
+            label: "再选科目",
+            align: "left",
+          },
+          year: {
+            label: "年份",
+            align: "left",
+          },
+          collect: {
+            label: "选择",
+            align: "left",
+            slot: "select",
+            width: "100px",
+          },
+        },
+        curSelectScienceList: "",
+        curSelectLiberalArts: [],
+        options: [],
+        selectNian: "",
+        dataList: [],
+        yearList: [],
+        pageNum: 1,
+        pageSize: 20,
+        total: 0,
+        keyword: "",
+        isShowTable: false,
+        locationsList: [],
+        typesList: [],
+        characteristicList: [],
+        selectLocation: [], //地区
+        selectTypes: [], //类别
+        selectCharacteristic: [], //选中的特色
+        isShowSchoolPopup: false,
+        isShowMajorPopup: false,
+        marjorsList: [],
+        marjorsList2: [],
+        marjorsList3: [],
+        marjorsType: "本科",
+        marjorsLevel: 1,
+        marjorsCode: "",
+        curMarjorsCode: "",
+        curMarjorsCode2: "",
+        curMarjorsCode3: [],
+      };
+    },
+    created() {
+      if (this.scienceList.length > 0) {
+        this.curSelectScienceList = this.scienceList[0]["name"];
+      }
+      if (this.liberalArts.length > 2) {
+        this.curSelectLiberalArts.push(this.liberalArts[0]["name"]);
+        this.curSelectLiberalArts.push(this.liberalArts[1]["name"]);
+      }
+      this.httpGetXkcxYears();
+      this.httpUniversityFilters();
+      this.httpGetMarjorsList();
+    },
+    methods: {
+      onSelectMarjorsAll(res) {
+        if (res) {
+          let len = this.marjorsList3.length;
+          for (let i = 0; i < len; i++) {
+            let name = this.marjorsList3[i]["name"];
+            let index = this.curMarjorsCode3.indexOf(name);
+            if (index < 0) {
+              this.curMarjorsCode3.push(name);
+            }
+          }
+        } else {
+          this.curMarjorsCode3 = [];
+        }
+      },
+      onChangeSchoolPopup() {
+        this.isShowSchoolPopup = !this.isShowSchoolPopup;
+      },
+      onChangeMajorPopup() {
+        this.isShowMajorPopup = !this.isShowMajorPopup;
+      },
+      changeMajor(res) {
+        this.curMarjorsCode3 = [];
+        switch (res.level) {
+          case 1:
+            this.curMarjorsCode = res.code;
+            break;
+          case 2:
+            this.curMarjorsCode2 = res.code;
+            break;
+        }
+        this.marjorsCode = res.code;
+        this.marjorsLevel = res.level + 1;
+        this.httpGetMarjorsList();
+      },
+      schoolSubmit() {
+        this.isShowSchoolPopup = false;
+        this.checkData();
+      },
+      majorSubmit() {
+        this.isShowMajorPopup = false;
+        this.checkData();
+      },
+      cleanSchoolSelect() {
+        this.selectLocation = [];
+        this.selectTypes = [];
+        this.selectCharacteristic = [];
+      },
+      cleanMajorList() {
+        this.curMarjorsCode3 = [];
+      },
+      getSubjectText() {
+        let rText = "";
+        rText += this.curSelectScienceList + "+";
+        let lLen = this.curSelectLiberalArts.length;
+        for (let i = 0; i < lLen; i++) {
+          rText += this.curSelectLiberalArts[i];
+          if (i != lLen - 1) {
+            rText += "+";
+          }
+        }
+        return rText;
+      },
+      clickMarjorsType(type) {
+        this.marjorsType = type;
+        this.marjorsLevel = 1;
+        this.marjorsCode = "";
+        this.httpGetMarjorsList();
+      },
+      httpGetMarjorsList() {
+        marjorsList({
+          type: this.marjorsType,
+          level: this.marjorsLevel,
+          code: this.marjorsCode,
+        }).then((res) => {
+          switch (this.marjorsLevel) {
+            case 2:
+              this.marjorsList2 = res.rows;
+              this.changeMajor(res.rows[0]);
+              break;
+            case 3:
+              this.marjorsList3 = res.rows;
+              break;
+            default:
+              this.marjorsList = res.rows;
+              this.changeMajor(res.rows[0]);
+              break;
+          }
+        });
+      },
+      httpUniversityFilters() {
+        universityFilters({}).then(({data}) => {
+          this.locationsList = data.locations;
+          this.typesList = data.types;
+          this.characteristicList = data.features;
+        });
+      },
+      httpCollectAdd(row) {
+        collectAdd({
+          refId: row.id,
+        }).then((res) => {
+          this.checkData();
+        });
+      },
+      httpCollectRemove(row) {
+        collectRemove({
+          refId: row.id,
+        }).then((res) => {
+          this.checkData();
+        });
+      },
+      onChangeYear(res) {
+        //切换学年时,取第1页
+        this.pageNum = 1;
+        this.checkData();
+      },
+      onClickScience(item) {
+        if (this.curSelectScienceList == item.name) {
+          return;
+        } else {
+          this.curSelectScienceList = item.name;
+        }
+        this.isShowTable = false;
+      },
+      onClickLiberalArts(item) {
+        let index = this.curSelectLiberalArts.indexOf(item.name);
+        if (index >= 0) {
+          this.curSelectLiberalArts.splice(index, 1);
+        } else {
+          this.curSelectLiberalArts.push(item.name);
+        }
+        this.isShowTable = false;
+      },
+      isShowScience(name) {
+        return this.curSelectScienceList == name;
+      },
+      isShowLiberalArts(name) {
+        return this.curSelectLiberalArts.indexOf(name) >= 0;
+      },
+      onSearch() {
+        this.checkData();
+      },
+      httpGetXkcxYears() {
+        xkcxYears().then((res) => {
+          this.yearList = res.data || [];
+          this.selectNian = this.yearList[0]
+        });
+      },
+      onChangePage(page) {
+        this.pageSize = page.limit;
+        this.pageNum = page.page;
+        this.checkData();
+      },
+      checkData(cb) {
+        if (this.curSelectLiberalArts.length != 2) {
+          this.$message.error("请从右侧4门可选科目中点击选择2门");
+          return;
+        }
+
+        this.httpGetXkcxList();
+      },
+      toMyPage() {
+        this.$router.push("/career/subject/myChoice");
+      },
+      httpGetXkcxList() {
+        xkcxlist({
+          level:this.marjorsType,
+          keyword: this.keyword,
+          course0: this.curSelectScienceList,
+          course1: this.curSelectLiberalArts.toString(),
+          locations: this.selectLocation.toString(),
+          ts: this.selectCharacteristic.toString(),
+          types: this.selectTypes.toString(),
+          year: this.selectNian,
+          pageNum: this.pageNum,
+          marjors: this.curMarjorsCode3.toString(),
+          pageSize: this.pageSize,
+        })
+          .then((res) => {
+            this.dataList = res.rows;
+            this.total = res.total;
+            this.isShowTable = true;
+          })
+          .catch((err) => {
+            console.log("请求出错!");
+            this.cleanSchoolSelect();
+          });
+      },
+    },
+  };
+</script>
+
+<style scoped>
+  .subject-page {
+    padding: 0 100px;
+  }
+
+  .college-icon {
+    cursor: pointer;
+  }
+
+  .breadcrumb {
+    padding: 15px 30px;
+    margin: 15px 0;
+    border-bottom: 1px solid #eee;
+    border-radius: 2px;
+    background-color: #fff;
+    box-shadow: 0 1px 2px 0 rgb(0 0 0 / 5%);
+  }
+
+  .el-breadcrumb {
+    font-size: 16px !important;
+  }
+
+  .content-box {
+    padding: 60px 40px 60px 50px;
+  }
+
+  .content-box-title {
+    color: #47c6a2;
+    font-size: 24px;
+  }
+
+  .content-top-box {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+  }
+
+  .my-subject-button {
+    color: #47c6a2;
+    font-size: 14px;
+    cursor: pointer;
+    border: 1px solid #47c6a2;
+    padding: 13px 110px;
+  }
+
+  .content-msg {
+    margin: 32px 0;
+    font-size: 16px;
+  }
+
+  .select-box {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+  }
+
+  .select-item {
+    box-sizing: border-box;
+    border: 1px dashed rgba(24, 144, 255, 1);
+    height: 334px;
+    padding: 20px;
+    margin-right: 20px;
+  }
+
+  .select-msg {
+    color: #47c6a2;
+    font-size: 14px;
+  }
+
+  .select-click-list {
+    margin-top: 40px;
+    display: flex;
+    flex-wrap: wrap;
+    justify-content: space-between;
+  }
+
+  .select-box-click-item {
+    background-color: #fbfbfb;
+    cursor: pointer;
+    height: 89px;
+    line-height: 89px;
+    font-size: 24px;
+    color: #414141;
+    font-weight: 600;
+    text-align: center;
+    position: relative;
+  }
+
+  .select-box-click-item.two {
+    margin: 10px 0;
+    width: 100%;
+  }
+
+  .select-box-click-item.four {
+    margin: 10px 0;
+    width: 46%;
+  }
+
+  .select-box-click-item.active {
+    background-color: #d4eaff !important;
+  }
+
+  .select-box-click-item-icon {
+    height: 20px;
+    width: 20px;
+    border-radius: 2px;
+    background: #47c6a2;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    font-size: 16px;
+    position: absolute;
+    right: 0;
+    bottom: 0;
+    color: #fff;
+  }
+
+  .select-button {
+    padding: 0px 60px;
+  }
+
+  .xkcx-list-title {
+    width: 100%;
+    background-color: #e8e8e8;
+    padding: 30px;
+    text-align: center;
+    font-size: 24px;
+    color: #4c4c4c;
+    margin-top: 80px;
+  }
+
+  .xkcx-input-box {
+    padding: 20px 0;
+    display: flex;
+  }
+
+  .search_header {
+    margin-left: auto;
+    display: flex;
+    flex-direction: row;
+    align-items: center;
+    justify-content: flex-end;
+    position: relative;
+    margin-right: 20px;
+  }
+
+  .search_header img {
+    position: absolute;
+    right: 20px;
+    cursor: pointer;
+    top: 6px;
+  }
+
+  .search_header input {
+    background: #f7f7ff;
+    border-radius: 20px;
+    border: 1px solid #c6cbf5;
+    outline: none;
+    width: 340px;
+    height: 32px;
+    padding-left: 24px;
+  }
+
+  .button-school {
+    margin: 0 20px;
+  }
+
+  .button-icon {
+    width: 12px;
+    height: 12px;
+  }
+
+  .el-icon-my-button {
+    background: url(../../../assets/images/subject/icon_shaixuan.png) center no-repeat;
+    background-size: cover;
+  }
+
+  .el-icon-my-button:before {
+    content: "替";
+    font-size: 16px;
+    visibility: hidden;
+  }
+
+  .popup-item-title {
+    color: #414141;
+    font-size: 16px;
+    font-weight: 600;
+  }
+
+  .popup-item-title span {
+    font-size: 14px;
+    font-weight: 500;
+  }
+
+  .check-box-item {
+    padding: 8px 0;
+    min-width: 70px;
+  }
+
+  .popup-item-content {
+    padding: 20px 0;
+  }
+
+  .popup-msg {
+    color: #ffa400;
+    font-weight: 400;
+    font-size: 14px;
+  }
+
+  .bottom-box {
+    display: flex;
+    justify-content: space-between;
+  }
+
+  .button-list {
+    padding: 0 20px;
+  }
+
+  .major-box {
+    display: flex;
+    margin-bottom: 30px;
+  }
+
+  .popup-select {
+    border-right: 1px solid #d7d7d7;
+  }
+
+  .popup-select-item {
+    cursor: pointer;
+    line-height: 30px;
+    width: 100px;
+    padding: 0 20px 0 30px;
+  }
+
+  .popup-select-item.active {
+    color: #47c6a2;
+    border-right: 2px solid #47c6a2;
+  }
+
+  .choice-box {
+    display: flex;
+  }
+
+  .choice-item {
+    margin: 0 10px;
+    min-width: 300px;
+    border: 1px solid #d7d7d7;
+    height: 300px;
+    overflow-x: hidden;
+    overflow-y: auto;
+  }
+
+  .choice-item-menv {
+    margin: 15px 20px;
+    cursor: pointer;
+  }
+
+  .choice-item-menv.active {
+    color: #47c6a2;
+  }
+
+  .choice-item-checkbox {
+    padding: 10px 20px;
+    width: 100%;
+    box-sizing: border-box;
+  }
+</style>