Просмотр исходного кода

Merge remote-tracking branch 'origin/master'

hizhangling 1 месяц назад
Родитель
Сommit
0935437982
19 измененных файлов с 917 добавлено и 474 удалено
  1. 5 0
      src/router/router_environment.js
  2. 47 0
      src/views/xjc-integratedmachine/components/ai_rabit_component.vue
  3. 43 67
      src/views/xjc-integratedmachine/components/collection_component.vue
  4. 83 48
      src/views/xjc-integratedmachine/components/head_component.vue
  5. 37 106
      src/views/xjc-integratedmachine/environment/constrast_career.vue
  6. 23 34
      src/views/xjc-integratedmachine/environment/contrast_major.vue
  7. 40 25
      src/views/xjc-integratedmachine/environment/contrast_university.vue
  8. 24 10
      src/views/xjc-integratedmachine/environment/occ_details_video.vue
  9. 237 7
      src/views/xjc-integratedmachine/environment/occdb_interestcode.vue
  10. 189 16
      src/views/xjc-integratedmachine/environment/occdb_interestcode_list.vue
  11. 0 51
      src/views/xjc-integratedmachine/environment/occdb_interestcode_list1.vue
  12. 5 0
      src/views/xjc-integratedmachine/environment/occdb_search_industry.vue
  13. 25 6
      src/views/xjc-integratedmachine/environment/pro_details_video.vue
  14. 27 4
      src/views/xjc-integratedmachine/environment/prodb_specialtylist1.vue
  15. 92 82
      src/views/xjc-integratedmachine/environment/query_universitydb_conditions.vue
  16. 25 11
      src/views/xjc-integratedmachine/environment/university_details_video.vue
  17. 8 2
      src/views/xjc-integratedmachine/environment/university_list.vue
  18. 5 1
      src/views/xjc-integratedmachine/wakeup/index.vue
  19. 2 4
      vite.config.js

+ 5 - 0
src/router/router_environment.js

@@ -167,6 +167,11 @@ const router = [
     {
         path: '/xjc-integratedmachine/environment/contrast_major',
         component: () => import('@/views/xjc-integratedmachine/environment/contrast_major.vue'),
+    },
+    //专业对比
+    {
+        path: '/xjc-integratedmachine/environment/contrast_career',
+        component: () => import('@/views/xjc-integratedmachine/environment/constrast_career.vue'),
     }
 ]
 export default {

+ 47 - 0
src/views/xjc-integratedmachine/components/ai_rabit_component.vue

@@ -0,0 +1,47 @@
+<template>
+  <div class="ai_rabit_component">
+      <div class="ai-rabit">
+        <img src="@/assets/images/wakeup/ai-rabit.png"/>
+      </div>
+<!--    </div>-->
+  </div>
+</template>
+<script setup>
+import {ref, onMounted, onUnmounted} from 'vue';
+
+onMounted(() => {
+});
+
+</script>
+
+
+<style scoped lang="scss">
+.ai_rabit_component{
+position: absolute;
+right: 0px;
+bottom: 20px;
+  .ai-rabit{
+    border: 1px solid;
+    display: flex;
+    align-items: center;
+    .ai-rabit-text{
+      width: 345px;
+      height: 89px;
+      background: #E8EEF7;
+      font-weight: 300;
+      margin-bottom: 20px;
+      font-size: 22px;
+      color: #000000;
+      padding:16px;
+      border-radius: 24px 24px 24px 24px;
+    }
+    img{
+      width: 178px;
+      height: 270px;
+    }
+  }
+}
+
+
+
+</style>

+ 43 - 67
src/views/xjc-integratedmachine/components/collection_component.vue

@@ -7,9 +7,9 @@
     <img @click="cancle_collection" v-if="collectionList.length >= 1" src="@/assets/images/environment/collaged.png">
     <p @click="cancle_collection" v-if="collectionList.length >= 1">取消收藏</p>
   </div>
-    <div class="item-img" >
-      <img v-if="isContrastVal" @click="contrastCancel" src="@/assets/images/environment/contrasted.png">
-      <img v-else @click="contrastAdd" src="@/assets/images/environment/contrast.png">
+    <div class="item-img">
+      <img @click="contrastCancel" v-if="isContrast"  src="@/assets/images/environment/contrasted.png">
+      <img @click="addCompareList" v-else src="@/assets/images/environment/contrast.png">
       <p>对比</p>
     </div>
 </template>
@@ -17,9 +17,11 @@
 <script setup>
 import {addCollection, getCollection, removeCollection} from '@/api/xjc-integratedmachine/environment/university.js'
 import {ElMessage} from "element-plus";
+import { inject } from 'vue';
 import {handleThemeStyle} from "@/utils/theme.js";
 import useSettingsStore from "@/store/modules/settings.js";
 import { defineExpose } from 'vue';
+import {addCompare, removeBybusinessId} from "@/api/xjc-integratedmachine/environment/common.js";
 const props = defineProps({
   collection: {
     contentType: null,
@@ -30,7 +32,7 @@ const props = defineProps({
 })
 
 const collectionList = ref([])
-const isContrastVal = ref(false)
+
 function collection() {
   let data = {
     contentType: props.collection.contentType,
@@ -40,70 +42,35 @@ function collection() {
     queryConnection()
   })
 }
-let SESSION_COLLECT_KEY = 'contrastList'
-function getSource (source){
-  console.log("11111",source);
-  if(props.collection.source === 'pro_details_video' || source ===  'pro_details_video'){
-    SESSION_COLLECT_KEY = 'majorList'
-  }else if(props.collection.source === 'occ_details_video' || source ===  'occ_details_video'){
-    SESSION_COLLECT_KEY = 'occList'
-  }else {
-    SESSION_COLLECT_KEY = 'contrastList'
-  }
-}
-//查询详情中学校是否被加入对比列表
-function isContrast (val,source){
-  let collectArrayStr = window.sessionStorage.getItem(SESSION_COLLECT_KEY);
-  // 如果有值
-  if(collectArrayStr){
-    let collectArray = JSON.parse(collectArrayStr);
-    isContrastVal.value = collectArrayStr.includes(JSON.stringify(val.value));
-  }
-  // 如果没有值
-  else{
-    isContrastVal.value = false;
-  }
-}
+//加入对比
+function addCompareList (){
 
-function contrastAdd(){
-  let contrastArrayStr = sessionStorage.getItem(SESSION_COLLECT_KEY)
-  if(contrastArrayStr){
-    let contrastArray = JSON.parse(contrastArrayStr);
-    if(contrastArray.includes(JSON.stringify(props.collection.contentVal))){
-      ElMessage.error('已加入,不可以在加入对比列表')
-    }else{
-      if(contrastArray.length == 2){
-        ElMessage.error('对比列表已满')
-      }else{
-        contrastArray.push(props.collection.contentVal);
-        window.sessionStorage.setItem(SESSION_COLLECT_KEY,  JSON.stringify(contrastArray));
-        isContrastVal.value = true;
-        ElMessage.success('加入对比成功');
-      }
-    }
-  }
-  // 如果没有值
-  else{
-    let contrastArray = new Array();
-  contrastArray.push(props.collection.contentVal);
-  window.sessionStorage.setItem(SESSION_COLLECT_KEY, JSON.stringify(contrastArray));
-  isContrastVal.value = true;
-  ElMessage.success('加入对比成功');
+  let data = {
+    type: props.collection.contentType,
+    businessId: props.collection.contentId
   }
+  addCompare(
+      data
+  ).then(resp => {
+
+  })
+  parentMethod();
 }
-function contrastCancel(){
-  let collectArrayStr = window.sessionStorage.getItem(SESSION_COLLECT_KEY);
-  // 如果有值
-  if(collectArrayStr){
-    let collectArray = JSON.parse(collectArrayStr);
-    if(collectArrayStr.includes(JSON.stringify(props.collection.contentVal))){
-      let index = collectArray.indexOf(props.collection.contentVal);
-      collectArray.splice(index, 1);
-      window.sessionStorage.setItem(SESSION_COLLECT_KEY, JSON.stringify(collectArray));
-      isContrastVal.value = false;
-      ElMessage.success('取消对比成功')
-    }
+
+const parentMethod = inject('parentMethod');
+
+//取消对比
+function contrastCancel (){
+
+  let data = {
+    type: props.collection.contentType,
+    businessId: props.collection.contentId
   }
+  removeBybusinessId(
+      data
+  ).then(resp => {
+    parentMethod();
+  })
 }
 function queryConnection() {
   let data = {
@@ -115,7 +82,7 @@ function queryConnection() {
   })
 }
 onMounted(() => {
-  getSource()
+
 })
 function cancle_collection() {
   let data = {
@@ -125,9 +92,18 @@ function cancle_collection() {
     queryConnection()
   })
 }
+const isContrast = ref(false)
+function getIsContrast(val){
+   console.log("val-------",val.compare)
+  if(val.compare > 0  ){
+    isContrast.value = true
+  }else {
+    isContrast.value = false
+  }
+}
 defineExpose({
-  isContrast,getSource
-})
+  getIsContrast
+});
 
 </script>
 

+ 83 - 48
src/views/xjc-integratedmachine/components/head_component.vue

@@ -7,12 +7,14 @@
       <div class="head-title">
         <div v-if="headinfo.title">{{headinfo.title}}</div>
       </div>
-      <div class="contrast-box">
-        <img  v-show="headinfo.contrast" class="contrast" src="@/assets/images/environment/contrast-btn.png" @click="contrastTo">
+      <div class="contrast-box" v-show="headinfo.contrast" >
+        <img class="contrast"  src="@/assets/images/environment/contrast-btn.png"
+             @click="contrastTo">
+        <p class="text">{{contrastSize}}</p>
       </div>
       <div class="head-right" v-if="!headinfo.isLogin">
         <div class="right-user">
-          <img  src="@/assets/images/wakeup/user.png" @click="backTo" alt="404">
+          <img src="@/assets/images/wakeup/user.png" @click="backTo" alt="404">
         </div>
         <el-button class="head-right-btn1" v-if="headinfo.isHome">使用说明</el-button>
         <el-button class="head-right-btn1" v-else @click="homeUrlTo">首页</el-button>
@@ -23,55 +25,79 @@
 
 <script setup>
     import {ElMessage} from "element-plus";
+    import {getCompareSize} from '@/api/xjc-integratedmachine/environment/common.js'
     import {defineEmits} from "vue";
     const {proxy} = getCurrentInstance()
     const router = useRouter()
     const props = defineProps({
       headinfo: {}
     })
-    const emit = defineEmits(['backTo']);
+    const contrastSize = ref(null);
+    const emit = defineEmits(['childEvent']);
     function backTo() {
+      clear()
       if(props.headinfo.backUrlUse){
         router.push({
-            path: props.headinfo.backUrl
+            path: props.headinfo.backUrl,
+            query:{
+             code : props.headinfo.backQuery
+          }
         })
       }else {
         router.go(-1);
       }
-      clearData()
+      emit('childEvent')
     }
-    function clearData(){
-      let contrastList = [];
-      console.log("props.headinfo.contrastType",props.headinfo.contrastType)
-      if(props.headinfo.contrastType === 'major'){
-        contrastList = JSON.parse(sessionStorage.getItem('majorList'));
-        if(contrastList && contrastList.length >= 2 ){
-          sessionStorage.removeItem('majorList');
-        }
-      }else if(props.headinfo.contrastType === 'university'){
-        contrastList = JSON.parse(sessionStorage.getItem('contrastList'));
-        if(contrastList && contrastList.length >= 2 ){
-          sessionStorage.removeItem('contrastList');
-        }
+    function clear(){
+      if(props.headinfo.contrastPage){
+        // clearData()
       }
-
     }
+    //返回后清空对比数据;
+    // function clearData(){
+    //   let contrastList = [];
+    //   console.log("props.headinfo.contrastType",props.headinfo.contrastType)
+    //   if(props.headinfo.contrastType === 'major'){
+    //     contrastList = JSON.parse(sessionStorage.getItem('majorList'));
+    //     if(contrastList && contrastList.length >= 2 ){
+    //       sessionStorage.removeItem('majorList');
+    //     }
+    //   }else if(props.headinfo.contrastType === 'university'){
+    //     contrastList = JSON.parse(sessionStorage.getItem('contrastList'));
+    //     if(contrastList && contrastList.length >= 2 ){
+    //       sessionStorage.removeItem('contrastList');
+    //     }
+    //   }else if(props.headinfo.contrastType === 'occ'){
+    //     contrastList = JSON.parse(sessionStorage.getItem('occList'));
+    //     if(contrastList && contrastList.length >= 2 ){
+    //       sessionStorage.removeItem('occList');
+    //     }
+    //   }
+    //
+    // }
     function homeUrlTo() {
         router.push({
           path: props.headinfo.homeUrl
         })
     }
+    //跳转对比页面
     function contrastTo(){
-      let contrastList = [];
-      if(props.headinfo.contrastType === 'major'){
-         contrastList = JSON.parse(sessionStorage.getItem('majorList'));
-      }else if(props.headinfo.contrastType === 'university'){
-         contrastList = JSON.parse(sessionStorage.getItem('contrastList'));
-      }else if(props.headinfo.contrastType === 'occ'){
-        contrastList = JSON.parse(sessionStorage.getItem('occList'));
-      }
-      if(contrastList && contrastList.length <= 2 ){
-       //暂无
+      console.log('contrastSize.value',contrastSize.value)
+      if(contrastSize.value === 2){
+       console.log("props.headinfo.contrastType",props.headinfo.contrastType)
+        if(props.headinfo.contrastType === 2){
+          router.push({
+            path: '/xjc-integratedmachine/environment/contrast_major'
+          })
+        }else if(props.headinfo.contrastType === 1){
+          router.push({
+            path: '/xjc-integratedmachine/environment/contrast_university'
+          })
+        }else if(props.headinfo.contrastType === 3){
+          router.push({
+            path: '/xjc-integratedmachine/environment/contrast_career'
+          })
+        }
       }else {
         ElMessage({
           type: 'info',
@@ -79,22 +105,6 @@
         })
         return;
       }
-
-      if(props.headinfo.contrastType === 'major'){
-        router.push({
-          path: '/xjc-integratedmachine/environment/contrast_major'
-        })
-      }else if(props.headinfo.contrastType === 'university'){
-        router.push({
-          path: '/xjc-integratedmachine/environment/contrast_university'
-        })
-      }else if(props.headinfo.contrastType === 'occ'){
-        router.push({
-          path: '/xjc-integratedmachine/environment/contrast_career'
-        })
-      }
-
-
     }
 
     function exit() {
@@ -106,11 +116,24 @@
         }).catch(() => {
         })
     }
-
+    //拿到对比数量
+   function getCompareSizeData (num){
+      console.log("num",num)
+     getCompareSize({
+       type:props.headinfo.contrastType || num
+     }).then(resp => {
+       contrastSize.value =  resp.data
+     })
+   }
+    onMounted(() => {
+      // getCompareSizeData()
+    })
+    defineExpose({
+      getCompareSizeData
+    });
 </script>
 
 <style scoped lang='scss'>
-
     .contenter{
       position: absolute;
       top: 0;
@@ -140,10 +163,22 @@
       .contrast-box{
         width: 209px;
         height: 80px;
+        position: relative;
         img{
           width: 209px;
           height: 80px;
         }
+        .text{
+          position: absolute;
+          bottom: 3px;
+          left: 107px;
+          font-size: 20px;
+          color: #2BC17B;
+          font-size: 20px;
+          color: #2BC17B;
+          line-height: 31px;
+          bottom: -7px;
+        }
       }
       .head-right{
           width:750px;

+ 37 - 106
src/views/xjc-integratedmachine/environment/constrast_career.vue

@@ -5,29 +5,14 @@
       <div class="content-left">
         <div class="tab-box">
           <div :class="[onePage?'item-box-active':'item-box']" @click="showPage(1)">
-            <img v-if="onePage" src="@/assets/images/environment/contrast/01-active.png">
-            <img v-else src="@/assets/images/environment/contrast/01.png">
+            <img v-if="onePage" src="@/assets/images/environment/contrast/career/01-active.png">
+            <img v-else src="@/assets/images/environment/contrast/career/01.png">
             基本信息
           </div>
           <div :class="[twoPage?'item-box-active':'item-box']" @click="showPage(2)">
-            <img v-if="twoPage" src="@/assets/images/environment/contrast/02-active.png">
-            <img v-else src="@/assets/images/environment/contrast/02.png">
-            主修课程
-          </div>
-          <div :class="[threePage?'item-box-active':'item-box']" @click="showPage(3)">
-            <img v-if="threePage" src="@/assets/images/environment/contrast/03.png">
-            <img v-else src="@/assets/images/environment/contrast/03-active.png">
-            专业解读
-          </div>
-          <div :class="[fourPage?'item-box-active':'item-box']" @click="showPage(4)">
-            <img v-if="fourPage" src="@/assets/images/environment/contrast/04-active.png">
-            <img v-else src="@/assets/images/environment/contrast/04.png">
-            就业前景与方向
-          </div>
-          <div :class="[fivePage?'item-box-active':'item-box']" @click="showPage(5)">
-            <img v-if="fivePage" src="@/assets/images/environment/contrast/05-active.png">
-            <img v-else src="@/assets/images/environment/contrast/05.png">
-            开设院校
+            <img v-if="twoPage" src="@/assets/images/environment/contrast/career/02-active.png">
+            <img v-else src="@/assets/images/environment/contrast/career/02.png">
+            工作内容
           </div>
         </div>
       </div>
@@ -37,39 +22,35 @@
             <thead>
             <tr class="one-tr">
               <td class="first-title">专业名称</td>
-              <td v-for="(item,index) in contrastData" :key="index">{{ item.name }}</td>
+              <td v-for="(item,index) in contrastData" :key="index">{{ item.occupation.name }}</td>
             </tr>
             </thead>
             <tbody>
             <tr v-show="false"></tr>
             <tr class="two-tr">
-              <td>专业代码</td>
+              <td>职业兴趣代码</td>
               <td class="text-td" v-for="(item,index) in contrastData" :key="index">
-                <p style="text-align: center">{{ item.code }}</p>
+                <p style="text-align: center">{{ item.occupation.interestcode }}</p>
               </td>
             </tr>
             <tr>
-              <td>学科门类</td>
+              <td>行业分类</td>
               <td class="text-td" v-for="(item,index) in contrastData" :key="index">
-                <p style="text-align: center">{{ item.subjectcategories }}</p>
+                <p style="text-align: center;font-size:32px;">{{ item.occupation.industryname }}</p>
               </td>
             </tr>
             <tr>
-              <td>一级学科</td>
+              <td>职业定义</td>
               <td class="text-td" v-for="(item,index) in contrastData" :key="index">
-                <p style="text-align: center">{{ item.firstsubject }}</p>
+                <p style="padding:0 15px;text-indent: 2em;" v-html="item.occupation.definition"></p>
               </td>
             </tr>
             <tr>
-              <td>授权学位</td>
-              <td v-for="(item,index) in contrastData" :key="index" >
-                <p>{{ item.degree }}</p>
+              <td>相关专业</td>
+              <td v-for="(item,index) in contrastData" :key="index">
+                <p v-for="(ite,index) in item.bk_list">{{ ite.name }}</p>
               </td>
             </tr>
-            <tr>
-              <td>修学年限</td>
-              <td v-for="(item,index) in contrastData" :key="index" class="text-td">{{ item.years }}</td>
-            </tr>
             </tbody>
           </table>
         </div>
@@ -77,79 +58,16 @@
           <table class="table table-bordered">
             <thead>
             <tr class="one-tr">
-              <td class="first-title">专业名称</td>
-              <td v-for="(item,index) in contrastData" :key="index">{{ item.name }}</td>
-            </tr>
-            </thead>
-            <tbody>
-            <tr v-show="false"></tr>
-            <tr class="two-tr">
-              <td>主修课程</td>
-              <td class="text-td" v-for="(item,index) in contrastData" :key="index">
-                <p style="text-align: center" v-html="item.course"></p>
-              </td>
-            </tr>
-            </tbody>
-          </table>
-        </div>
-        <div class="three-page" v-show="threePage">
-          <table class="table table-bordered">
-            <thead>
-            <tr class="one-tr">
-              <td class="first-title">专业名称</td>
-              <td v-for="(item,index) in contrastData" :key="index">{{ item.name }}</td>
-            </tr>
-            </thead>
-            <tbody>
-            <tr v-show="false"></tr>
-            <tr class="two-tr">
-              <td>专业解读</td>
-              <td class="text-td" v-for="(item,index) in contrastData" :key="index">
-                <div class="info" v-if="!item.describe"  v-html="item.describe"></div>
-                <div class="info" v-else >暂无</div>
-
-                <!--                <p style="text-align: center" >{{ item.code }}</p>-->
-              </td>
-            </tr>
-            </tbody>
-          </table>
-        </div>
-        <div class="four-page" v-show="fourPage">
-          <table class="table table-bordered">
-            <thead>
-            <tr class="one-tr">
-              <td class="first-title">专业名称</td>
-              <td v-for="(item,index) in contrastData" :key="index">{{ item.name }}</td>
+              <td class="first-title">职业名称</td>
+              <td v-for="(item,index) in contrastData" :key="index">{{ item.occupation.name }}</td>
             </tr>
             </thead>
             <tbody>
             <tr v-show="false"></tr>
             <tr class="two-tr">
-              <td>就业前景与方向</td>
+              <td>工作内容</td>
               <td class="text-td" v-for="(item,index) in contrastData" :key="index">
-                <div class="info"  v-html="item.describe"></div>
-                <!--                <p style="text-align: center" >{{ item.code }}</p>-->
-              </td>
-            </tr>
-            </tbody>
-          </table>
-        </div>
-        <div class="five-page" v-show="fivePage">
-          <table class="table table-bordered">
-            <thead>
-            <tr class="one-tr">
-              <td class="first-title">专业名称</td>
-              <td v-for="(item,index) in contrastData" :key="index">{{ item.name }}</td>
-            </tr>
-            </thead>
-            <tbody>
-            <tr v-show="false"></tr>
-            <tr class="two-tr">
-              <td>开设院校</td>
-              <td class="school-box" v-for="(item,index) in contrastData" :key="index">
-                <div class="info"  v-for="(item,index) in item.kaishe_list">
-                  {{ item.name }}
-                </div>
+                <p style="font-size:32px;padding:0 15px;text-indent: 2em;text-align: left;" v-html="item.occupation.definition"></p>
               </td>
             </tr>
             </tbody>
@@ -167,6 +85,8 @@ import headComponent from '@/views/xjc-integratedmachine/components/head_compone
 import Drag_component from "@/views/xjc-integratedmachine/components/drag_component.vue";
 import {ref} from "vue";
 import {getUniversityByKeyword} from "@/api/xjc-integratedmachine/environment/university.js";
+import {getCompareList} from "@/api/xjc-integratedmachine/environment/common.js";
+import {occupationDetail} from "@/api/xjc-integratedmachine/environment/occupation.js";
 
 
 const router = useRouter()
@@ -198,7 +118,9 @@ function setHeadinfo() {
       nickName: '张三'
     },
     backUrl: '/xjc-integratedmachine/environment/index',
-    homeUrl: '/xjc-integratedmachine/environment/index'
+    homeUrl: '/xjc-integratedmachine/environment/index',
+    contrastPage:true,
+    contrastType:'occ'
   }
 }
 
@@ -251,14 +173,23 @@ function backTo() {
 
 onMounted(() => {
   setHeadinfo()
-
+  getData();
 })
 
 const contrastData = ref({})
 function getData() {
-  const contrastList = sessionStorage.getItem('majorList') && JSON.parse(sessionStorage.getItem('majorList'));
-  contrastData.value = contrastList;
-  console.log("{{contrastA.name}}", contrastData.value)
+  getCompareList({
+    type:'3'
+  }).then(resp => {
+    contrastData.value = resp.rows
+    contrastData.value.map(item =>{
+      occupationDetail({
+        id: item.id
+      }).then(res => {
+        item.bk_list = res.bk_list;
+      })
+    })
+  })
 }
 
 const universityList = ref([])

+ 23 - 34
src/views/xjc-integratedmachine/environment/contrast_major.vue

@@ -37,7 +37,7 @@
             <thead>
             <tr class="one-tr">
               <td class="first-title">专业名称</td>
-              <td v-for="(item,index) in contrastData" :key="index">{{ item.name }}</td>
+              <td v-for="(item,index) in contrastData" :key="index">{{ item.specialty.name }}</td>
             </tr>
             </thead>
             <tbody>
@@ -45,26 +45,27 @@
             <tr class="two-tr">
               <td>专业代码</td>
               <td class="text-td" v-for="(item,index) in contrastData" :key="index">
-                <p style="text-align: center">{{ item.code }}</p>
+                <p style="text-align: center">{{ item.specialty.code }}</p>
               </td>
             </tr>
             <tr>
               <td>学科门类</td>
-              <td class="text-td" v-for="(item,index) in contrastData" :key="index">
-                <p style="text-align: center">{{ item.subjectcategories }}</p>
-              </td>
+<!--              <td class="text-td" v-for="(item,index) in contrastData" :key="index">-->
+<!--                <p style="text-align: center;font-size: 32px">{{ item.smoSpecialty.subjectcategories }}</p>-->
+<!--              </td>-->
             </tr>
             <tr>
               <td>一级学科</td>
-              <td class="text-td" v-for="(item,index) in contrastData" :key="index">
-                <p style="text-align: center">{{ item.firstsubject }}</p>
-              </td>
+<!--              <td class="text-td" v-for="(item,index) in contrastData" :key="index">-->
+<!--                <p style="text-align: center">{{ item.smoSpecialty.firstsubject }}</p>-->
+<!--              </td>-->
             </tr>
             <tr>
               <td>授权学位</td>
               <td v-for="(item,index) in contrastData" :key="index" >
-                <p>{{ item.degree }}</p>
+                <p>{{ item.specialty.degree }}</p>
                 </td>
+
             </tr>
             <tr>
               <td>修学年限</td>
@@ -167,6 +168,7 @@ import headComponent from '@/views/xjc-integratedmachine/components/head_compone
 import Drag_component from "@/views/xjc-integratedmachine/components/drag_component.vue";
 import {ref} from "vue";
 import {getUniversityByKeyword} from "@/api/xjc-integratedmachine/environment/university.js";
+import {getCompareList} from "@/api/xjc-integratedmachine/environment/common.js";
 
 
 const router = useRouter()
@@ -198,7 +200,9 @@ function setHeadinfo() {
       nickName: '张三'
     },
     backUrl: '/xjc-integratedmachine/environment/index',
-    homeUrl: '/xjc-integratedmachine/environment/index'
+    homeUrl: '/xjc-integratedmachine/environment/index',
+    contrastPage:true,
+    contrastType:'major'
   }
 }
 
@@ -245,8 +249,6 @@ function jumpTo(path) {
 }
 
 function backTo() {
-  sessionStorage.removeItem('contrastA');
-  sessionStorage.removeItem('contrastB');
 }
 
 onMounted(() => {
@@ -254,14 +256,18 @@ onMounted(() => {
 
 })
 
-const contrastData = ref({})
+const contrastData = ref([])
+
 function getData() {
-  const contrastList = sessionStorage.getItem('majorList') && JSON.parse(sessionStorage.getItem('majorList'));
-  contrastData.value = contrastList;
-  console.log("{{contrastA.name}}", contrastData.value)
+  getCompareList({
+    type:'2'
+  }).then(resp => {
+    console.log("resp.rows",resp.rows)
+    contrastData.value = resp.rows
+    console.log("contrastData.value----",contrastData.value)
+  })
 }
 
-const universityList = ref([])
 
 // 定义一个函数,用于将关键词变为红色
 function highlightKeywords(text, keywords) {
@@ -277,19 +283,6 @@ function highlightKeywords(text, keywords) {
   return text;
 }
 
-function byKeyword() {
-  getUniversityByKeyword(form.value).then(resp => {
-    resp.list.map(item => {
-      item.selected = false;
-      let keyWord = form.value.name
-      item.name = highlightKeywords(item.name, [keyWord]);
-      console.log(" item.name", item.name)
-      // 遍历数据数组,并处理每个字符串
-    })
-
-    universityList.value = resp.list
-  })
-}
 
 
 function toDetail(row) {
@@ -364,10 +357,6 @@ function search() {
 onMounted(() => {
   setHeadinfo()
   getData()
-  const contrastData = JSON.parse(sessionStorage.getItem('contrastList'));
-  if (contrastData) {
-    contrastList.value = contrastData
-  }
 })
 </script>
 

+ 40 - 25
src/views/xjc-integratedmachine/environment/contrast_university.vue

@@ -22,7 +22,7 @@
             <thead>
             <tr class="one-tr">
               <td class="first-title">大学名称</td>
-              <td v-for="(item,index) in contrastData" :key="index">{{ item.name }}</td>
+              <td v-for="(item,index) in contrastData" :key="index">{{ item.university.name }}</td>
             </tr>
             </thead>
             <tbody>
@@ -30,43 +30,43 @@
             <tr class="two-tr">
               <td>基本信息</td>
               <td class="text-td" v-for="(item,index) in contrastData" :key="index">
-                <p>创建时间:<span>{{ item.ctime }}</span></p>
-                <p>所在地区:<span>{{ item.areaname }}</span></p>
-                <p>院校隶属:<span>{{ item.subjection }}</span></p>
+                <p>创建时间:<span>{{ item.university.ctime }}</span></p>
+                <p>所在地区:<span>{{ item.university.areaname }}</span></p>
+                <p>院校隶属:<span>{{ item.university.subjection }}</span></p>
                 <p class="text-td-p">院校类型:<span>  <dict-tag :options="school_category"
-                                                                :value="item.categoryid"/></span></p>
+                                                                :value="item.university.categoryid"/></span></p>
               </td>
             </tr>
             <tr>
               <td>院校特色</td>
               <td v-for="(item,index) in contrastData" :key="index">
                 <div class="school-level-box">
-                  <p class="school-level" style="background-color: #B3FC7C" v-show="item.nef==='1'">
+                  <p class="school-level" style="background-color: #B3FC7C" v-show="item.university.nef==='1'">
                     985</p>
-                  <p class="school-level" style="background-color: #BBF88D" v-show="item.too==='1'">
+                  <p class="school-level" style="background-color: #BBF88D" v-show="item.university.too==='1'">
                     211</p>
                   <p class="school-level" style="background-color: #8CE349"
-                     v-show="item.istopschool==='1'">
+                     v-show="item.university.istopschool==='1'">
                     一流大学</p>
                   <p class="school-level" style="background-color: #9DFF51"
-                     v-show="item.istopsubject==='1'">
+                     v-show="item.university.istopsubject==='1'">
                     一流学科</p>
-                  <p class="school-level" style="background-color: #8ADFC4" v-show="item.self==='1'">
+                  <p class="school-level" style="background-color: #8ADFC4" v-show="item.university.self==='1'">
                     强</p>
                   <p class="school-level" style="background-color: #1EC590"
-                     v-show="item.graduate==='1'">研</p>
+                     v-show="item.university.graduate==='1'">研</p>
                 </div>
               </td>
             </tr>
             <tr>
               <td>学校性质</td>
               <td v-for="(item,index) in contrastData" class="text-td ">
-                <dict-tag :options="property" :value="item.property"/>
+                <dict-tag :options="property" :value="item.university.property"/>
               </td>
             </tr>
             <tr>
               <td>学校地址</td>
-              <td v-for="(item,index) in contrastData" :key="index" class="text-td">{{ item.address }}
+              <td v-for="(item,index) in contrastData" :key="index" class="text-td">{{ item.university.address }}
               </td>
             </tr>
             </tbody>
@@ -77,7 +77,7 @@
             <thead>
             <tr class="one-tr">
               <td class="first-title">大学名称</td>
-              <td v-for="(item,index) in contrastData" :key="index">{{ item.name }}</td>
+              <td v-for="(item,index) in contrastData" :key="index">{{ item.university.name }}</td>
             </tr>
             </thead>
             <tbody>
@@ -211,7 +211,13 @@
 import headComponent from '@/views/xjc-integratedmachine/components/head_component.vue'
 import Drag_component from "@/views/xjc-integratedmachine/components/drag_component.vue";
 import {ref} from "vue";
-import {getUniversityByKeyword, getScoreInfo} from "@/api/xjc-integratedmachine/environment/university.js";
+import {
+  getUniversityByKeyword,
+  getScoreInfo,
+  universityDetail
+} from "@/api/xjc-integratedmachine/environment/university.js";
+import {getCompareList} from "@/api/xjc-integratedmachine/environment/common.js";
+import {occupationDetail} from "@/api/xjc-integratedmachine/environment/occupation.js";
 
 
 const router = useRouter()
@@ -241,7 +247,9 @@ function setHeadinfo() {
       nickName: '张三'
     },
     backUrl: '/xjc-integratedmachine/environment/index',
-    homeUrl: '/xjc-integratedmachine/environment/index'
+    homeUrl: '/xjc-integratedmachine/environment/index',
+    contrastPage:true,
+    contrastType:'university'
   }
 }
 
@@ -281,12 +289,19 @@ onMounted(() => {
 
 const contrastData = ref({})
 
+// function getData() {
+//   // const contrastList = sessionStorage.getItem('contrastList') && JSON.parse(sessionStorage.getItem('contrastList'));
+//   // contrastData.value = contrastList;
+//   // console.log("{{contrastA.name}}", contrastData.value)
+//
+// }
 function getData() {
-  const contrastList = sessionStorage.getItem('contrastList') && JSON.parse(sessionStorage.getItem('contrastList'));
-  contrastData.value = contrastList;
-  console.log("{{contrastA.name}}", contrastData.value)
+  getCompareList({
+    type:'1'
+  }).then(resp => {
+    contrastData.value = resp.rows
+  })
 }
-
 const universityList = ref([])
 
 // 定义一个函数,用于将关键词变为红色
@@ -393,7 +408,7 @@ const dbForm = ref({})
 const dbData = ref({})
 
 function dbResult(e) {
-  let univercity = JSON.parse(sessionStorage.getItem("contrastList"))
+  let univercity = contrastData.value
   if (univercity.length != 2) {
     alert("选择2个学校啊,现在是" + univercity.length)
   } else {
@@ -409,10 +424,10 @@ function dbResult(e) {
 onMounted(() => {
   setHeadinfo()
   getData()
-  const contrastData = JSON.parse(sessionStorage.getItem('contrastList'));
-  if (contrastData) {
-    contrastList.value = contrastData
-  }
+  // const contrastData = JSON.parse(sessionStorage.getItem('contrastList'));
+  // if (contrastData) {
+  //   contrastList.value = contrastData
+  // }
   // dbResult();
 })
 </script>

+ 24 - 10
src/views/xjc-integratedmachine/environment/occ_details_video.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="pro_details_video">
-    <head-component :headinfo=headinfo></head-component>
+    <head-component :headinfo=headinfo ref="headinfoRef"></head-component>
     <div class="page-content">
       <div class="page-img-box">
         <div class="top-content">
@@ -18,7 +18,7 @@
             </div>
             <div class="info-box">
               <p class="title"> 职业兴趣类代码</p>
-              <p class="answer" >{{entity.industryname}}</p>
+              <p class="answer" >{{entity.interestcode}}</p>
             </div>
           </div>
         </div>
@@ -105,14 +105,10 @@
 import videojs from 'video.js';
 import 'video.js/dist/video-js.css';
 import collectionComponent from '@/views/xjc-integratedmachine/components/collection_component.vue'
-import {specialtyDetail} from '@/api/xjc-integratedmachine/environment/specialty.js'
-import {ref} from "vue";
+import { provide, ref } from 'vue';
 import headComponent from '@/views/xjc-integratedmachine/components/head_component.vue'
 import Drag_component from "@/views/xjc-integratedmachine/components/drag_component.vue";
-import {handleThemeStyle} from "@/utils/theme.js";
-import useSettingsStore from "@/store/modules/settings.js";
 import {occupationDetail} from "@/api/xjc-integratedmachine/environment/occupation.js";
-
 const {proxy} = getCurrentInstance()
 const {educationlevel} = proxy.useDict('educationlevel')
 
@@ -138,7 +134,7 @@ function setHeadinfo(){
     backUrl : '/xjc-integratedmachine/environment/query_universitydb_conditions',
     homeUrl:'/xjc-integratedmachine/environment/index',
     contrast:true,
-    contrastType:'occ'
+    contrastType:3
   }
 }
 
@@ -156,6 +152,8 @@ const pinggu_list = ref([])
 const similar_list = ref([])
 const collectionRef = ref(null)
 const collection_data = ref({})
+const headinfoRef = ref(null);
+
 function setCollection_data(){
   collection_data.value = {
     contentType: 3,
@@ -163,18 +161,27 @@ function setCollection_data(){
     contentVal: entity.value,
     source:'occ_details_video'
   }
-  console.log("entity.value",entity.value)
+
 }
 
 const bk_list = ref([])
 const zk_list = ref([])
 function detail() {
+  console.log("param.id",param.id)
   occupationDetail({
     id: param.id
   }).then(resp => {
+    resp.entity.bk_list = resp.bk_list
+    resp.entity.compare = resp.compare
     entity.value = resp.entity
-    bk_list.value = resp.bk_list
+    console.log("entity.value",entity.value)
+    bk_list.value = entity.value.bk_list
     zk_list.value = resp.zk_list
+    setTimeout(() => {
+      setCollection_data();
+      // collectionRef.value.getSource('occ_details_video');
+      // collectionRef.value.isContrast(entity.value);
+    }, 500);
   })
 }
 
@@ -244,6 +251,13 @@ function jumpZY(item){
     }
   })
 }
+const parentMethod = () => {
+  console.log('父组件方法被调用');
+  if (headinfoRef.value) {
+    headinfoRef.value.getCompareSizeData(); // 调用子组件的 sayHello 函数
+  }
+};
+provide('parentMethod', parentMethod);
 </script>
 
 <style scoped lang="scss">

+ 237 - 7
src/views/xjc-integratedmachine/environment/occdb_interestcode.vue

@@ -1,25 +1,255 @@
 <template>
-  霍兰德码查询
-  <div v-for="(item,index) in interestcode" @click="jumpToList(item)">
-    {{item.label}}
+  <div class="occdb_interestcode">
+    <head-component :headinfo=headinfo @childEvent="backTo"></head-component>
+    <div class="page-content">
+      <div class="content">
+        <div class="result-box">
+          <div class="two-page-result">
+            <div  v-for="(item,index) in interestcode"
+                  :class="{
+                itemResultBoxActive: item.isSelected,
+                itemResultBox: !item.isSelected
+            }"
+                 @click="addSelected(item,index)">
+              <div>{{item.label}} {{item.value}}</div>
+            </div>
+          </div>
+        </div>
+        <div class="search-btn">
+          <p v-show="conditions">
+            <span style="margin-right: 3px;margin-left: 3px">已选择条件:</span>
+            <span style="margin-left: 3px" v-for="item in conditions">{{item}}</span>
+          </p>
+          <img @click="jumpToList()" style="z-index:10" src="@/assets/images/environment/search-btn.png">
+        </div>
+      </div>
+    </div>
+<!--    <drag_component></drag_component>-->
   </div>
 </template>
 
 <script setup>
+import headComponent from '@/views/xjc-integratedmachine/components/head_component.vue'
+import Drag_component from "@/views/xjc-integratedmachine/components/drag_component.vue";
+import {handleThemeStyle} from "@/utils/theme.js";
+import useSettingsStore from "@/store/modules/settings.js";
+import { getCurrentInstance } from 'vue';
+const instance = getCurrentInstance();
 const {proxy} = getCurrentInstance()
 const {interestcode} = proxy.useDict('interestcode')
 const router = useRouter()
+const route = useRoute()
+const headinfo = ref({})
+const interestData = ref([])
+const conditions = ref([])
+function setHeadinfo() {
+  headinfo.value = {
+    title: '行业分类列表',
+    user: {
+      avatar: '头像路径',
+      nickName: '张三'
+    },
+    backUrl: '/xjc-integratedmachine/environment/index',
+    homeUrl: '/xjc-integratedmachine/environment/index',
+    interestcodePage:true,
+  }
+}
+onMounted(() => {
+  setHeadinfo()
+  nextTick(() => {
+    getData()
+  })
+})
+function getData (){
+  let lettersToFindArray = JSON.parse(sessionStorage.getItem('conditionsList'))
+  if(!lettersToFindArray){
+    interestcode.value = interestcode.value.map((item,index)=>{
+      item.isSelected = false;
+    })
+  }
+  // interestcode.push({});
+  // interestcode.pop();
+  let obj = {};
+  if(lettersToFindArray){
+    // 遍历对象数组
+    interestcode.value.forEach(obj => {
+      // 重置selected属性(如果需要的话,可以根据实际情况决定是否需要这一步)
+      obj.selected = false; // 这里我们先重置为false,稍后再根据查找结果设置
+      // 遍历要查找的字符数组
+      lettersToFindArray.forEach(letter => {
+        // 检查对象的value属性是否包含当前要查找的字母
+        if (obj.value.includes(letter)) {
+          obj.selected = true; // 只要有一个字母匹配,就将selected设置为true
+        }
+      });
+    });
+    console.log("interestcode",interestcode.value,lettersToFindArray)
+    conditions.value = lettersToFindArray;
+  }
 
-function jumpToList(item) {
+}
+function jumpToList(item){
+  interestcode.value.map(item =>{
+    item.isSelected = false;
+  })
   router.push({
     path : '/xjc-integratedmachine/environment/occdb_interestcode_list',
     query:{
-      code : item.value
+      code : conditions.value.join('')
+    }
+  })
+}
+let list = [];
+function addSelected(item,index){
+    const button = interestcode.value[index];
+    // 如果按钮已经被选中,则取消选中
+    if (button.isSelected) {
+      // button.isSelected = false;
+
+    } else {
+      // 计算当前选中的按钮数量
+      const selectedCount = interestcode.value.filter(b => b.isSelected).length;
+
+      // 如果选中按钮数量已经达到3个,则取消第一个选中的按钮
+      if (selectedCount === 3) {
+        const firstSelectedIndex = interestcode.value.findIndex(b => b.isSelected);
+        if (firstSelectedIndex !== -1) {
+          interestcode.value[firstSelectedIndex].isSelected = false
+          list.shift();
+        }
+      }
+      // 选中当前按钮
+      button.isSelected = true;
+      list.push(item.value);
     }
+  conditions.value = list;
+  // sessionStorage.setItem('conditionsList',JSON.stringify(conditions.value));
+}
+
+function backTo(){
+  // sessionStorage.removeItem('conditionsList');
+  interestcode.value.map(item =>{
+    item.isSelected = false;
   })
 }
+
 </script>
 
-<style scoped>
+<style scoped lang="scss">
+div,p{
+  margin: 0;
+  padding: 0;
+}
+.occdb_interestcode {
+  background: url('@/assets/images/login/login-home-background.png') no-repeat;
+  background-size: 1920px 1080px;
+  z-index: 10;
+  width: 100%;
+  height: 1080px;
+  .page-content {
+    width: 100%;
+    position: absolute;
+    top: 100px;
+    bottom: 0;
+    display: flex;
+    justify-content: center;
+
+    .content{
+      width: 1832px;
+      height: 922px;
+      background: #FFFFFF;
+      border-radius: 35px 35px 35px 35px;
+      margin-top:13px;
+    }
+    .result-box {
+      width: 100%;
+      height: 750px;
+      overflow: auto;
+      display: flex;
+      justify-content: center;
+      flex-direction: column;
+      align-items: center;
+
+      .two-page-result {
+        width: 1280px;
+        height: 400px;
+        display: flex;
+        flex-wrap: wrap;
+        margin-top: 100px;
+
+        .itemResultBoxActive {
+          min-width: 320px;
+          height: 92px;
+          background: linear-gradient(180deg, #B6FFEF 0%, #C5EEFF 100%);
+          box-shadow: inset 0px -2px 7px 0px #1E410E;
+          border-radius: 5px 5px 5px 5px;
+          border: 1px solid #A2F57F;
+          font-weight: 400;
+          font-size: 30px;
+          color: #0DE6A1;
+          line-height: 90px;
+          text-align: center;
+          margin-left: 50px;
+          margin-right: 50px;
+          margin-top: 32px;
+          padding-left: 20px;
+          padding-right: 20px;
+        }
+
+        .itemResultBox {
+          width: 320px;
+          height: 92px;
+          background: #E0EEF4;
+          border-radius: 5px 5px 5px 5px;
+          font-weight: 400;
+          font-size: 30px;
+          color: #000000;
+          line-height: 90px;
+          text-align: center;
+          margin-left: 50px;
+          margin-right: 50px;
+          margin-top: 32px;
+          padding-left: 20px;
+          padding-right: 20px;
+        }
 
-</style>
+        .itemResultBox:hover {
+          min-width: 320px;
+          height: 92px;
+          background: linear-gradient(180deg, #B6FFEF 0%, #C5EEFF 100%);
+          box-shadow: inset 0px -2px 7px 0px #1E410E;
+          border-radius: 5px 5px 5px 5px;
+          border: 1px solid #A2F57F;
+          font-weight: 400;
+          font-size: 30px;
+          color: #000000;
+          line-height: 90px;
+          text-align: center;
+          margin-left: 50px;
+          margin-top: 32px;
+          padding-left: 20px;
+          padding-right: 20px;
+        }
+      }
+    }
+    .search-btn {
+      display: flex;
+      align-items: center;
+      flex-direction: column;
+      justify-content: space-around;
+      margin-top: 54px;
+      img {
+        width: 244px;
+        height: 100px;
+      }
+      p{
+
+      }
+      span{
+        margin-left: 3px;
+      }
+    }
+  }
+
+}
+</style>

+ 189 - 16
src/views/xjc-integratedmachine/environment/occdb_interestcode_list.vue

@@ -1,51 +1,224 @@
 <template>
-  <div v-for="(item,index) in code_list">
-    {{item.code}}---{{item.name}}
-    <div v-for="(it,ind) in code_map">
-      <div v-for="(i,d) in it">
-        <div v-if="i.code==item.code">
-          {{i.name}}
+  <div class="prodb_specialtylist1" v-loading='loading'>
+    <head-component :headinfo=headinfo></head-component>
+    <div class="page-content">
+      <div class="content">
+        <div class="result-box">
+          <div class="two-page-result">
+<!--            <div  v-for="(item,index) in interestcode"-->
+<!--                  :class="{-->
+<!--                itemResultBoxActive: item.isSelected,-->
+<!--                itemResultBox: !item.isSelected-->
+<!--            }"-->
+
+<!--                  @click="addSelected(item,index)">-->
+<!--              <div>{{item.label}} {{item.value}}</div>-->
+<!--            </div>-->
+
+            <div v-for="(item,index) in code_list">
+              <p class="title">{{item.code}}--{{item.name}}</p>
+            <div  v-for="(it,ind) in code_map" class="two-page-result">
+              <div v-for="(i,d) in it" >
+                <div :class="[item.selected?'item-result-box-active':'item-result-box']"
+                     v-if="i.code==item.code"  @click="toDetail(i)">
+                  {{i.name}}
+                </div>
+              </div>
+            </div>
+          </div>
+          </div>
         </div>
       </div>
     </div>
+    <!--    <drag_component></drag_component>-->
   </div>
 </template>
 
 <script setup>
+import headComponent from '@/views/xjc-integratedmachine/components/head_component.vue'
+import Drag_component from "@/views/xjc-integratedmachine/components/drag_component.vue";
 import {codeList} from '@/api/xjc-integratedmachine/environment/occupation.js'
+const {proxy} = getCurrentInstance()
+const {interestcode} = proxy.useDict('interestcode')
 
+const headinfo = ref({})
+const interestData = ref([])
+const conditions = ref('')
 const router = useRouter()
 const route = useRoute()
 
 const param = route.query
-//
 const code_list = ref([])
 const code_map = ref([])
-
+const loading = ref(false)
 function list() {
+  headinfo.value.backQuery = param.code;
+  loading.value = true
   codeList({
     code: param.code
   }).then(resp => {
     code_list.value = resp.code_list
-    console.log("ssssss", code_list.value)
     code_map.value = resp.code_map
+    loading.value = false
   })
 }
 
-function toDetail(item) {
+list()
+
+function setHeadinfo() {
+  headinfo.value = {
+    title: '行业分类列表',
+    user: {
+      avatar: '头像路径',
+      nickName: '张三'
+    },
+    homeUrl: '/xjc-integratedmachine/environment/index',
+    backUrl:'/xjc-integratedmachine/environment/occdb_search_industry',
+    // backUrlUse:true,
+  }
+}
+onMounted(() => {
+  setHeadinfo()
+})
+
+function toDetail(item){
   router.push({
-    path: '/xjc-integratedmachine/environment/occ_details_video',
-    query: {
-      id: item.id
+    path : '/xjc-integratedmachine/environment/occ_details_video',
+    query :{
+      id :  item.id
     }
   })
 }
+</script>
 
-list()
+<style scoped lang="scss">
+div,p{
+  margin: 0;
+  padding: 0;
+}
+.prodb_specialtylist1 {
+  background: url('@/assets/images/login/login-home-background.png') no-repeat;
+  background-size: 1920px 1080px;
+  z-index: 10;
+  width: 100%;
+  height: 1080px;
+  .page-content {
+    width: 100%;
+    position: absolute;
+    top: 100px;
+    bottom: 0;
+    display: flex;
+    justify-content: center;
+    .content{
+      width: 1832px;
+      height: 922px;
+      background: #FFFFFF;
+      border-radius: 35px 35px 35px 35px;
+      margin-top:13px;
+      overflow: auto;
+      padding-bottom: 20px;
+    }
+    .result-box {
+      width: 100%;
+      //height: 750px;
+      overflow: auto;
+      //display: flex;
+      //margin-left: 33px;
+      //justify-content: center;
+      //flex-direction: column;
+      //align-items: center;
+      .title {
+        height: 40px;
+        border-left: 8px #8CE349 solid;
+        font-weight: bold;
+        font-size: 32px;
+        color: #333333;
+        line-height: 40px;
+        margin-left: 50px;
+        padding-left: 11px;
+        margin-top: 30px;
+      }
+      .two-page-result {
+        //width: 1280px;
+        //height: 400px;
+        display: flex;
+        flex-wrap: wrap;
 
 
-</script>
+        .item-result-box-active {
+          min-width: 320px;
+          height: 92px;
+          background: linear-gradient(180deg, #B6FFEF 0%, #C5EEFF 100%);
+          box-shadow: inset 0px -2px 7px 0px #1E410E;
+          border-radius: 5px 5px 5px 5px;
+          border: 1px solid #A2F57F;
+          font-weight: 400;
+          font-size: 30px;
+          color: #0DE6A1;
+          line-height: 90px;
+          text-align: center;
+          margin-left: 50px;
+          margin-right: 50px;
+          margin-top: 32px;
+          padding-left: 20px;
+          padding-right: 20px;
+        }
 
-<style scoped>
+        .item-result-box {
+          min-width: 320px;
+          height: 92px;
+          background: #E0EEF4;
+          border-radius: 5px 5px 5px 5px;
+          font-weight: 400;
+          font-size: 30px;
+          color: #000000;
+          line-height: 90px;
+          text-align: center;
+          margin-left: 50px;
+          margin-right: 50px;
+          margin-top: 32px;
+          padding-left: 20px;
+          padding-right: 20px;
+        }
+
+        .item-result-box:hover {
+          min-width: 320px;
+          height: 92px;
+          background: linear-gradient(180deg, #B6FFEF 0%, #C5EEFF 100%);
+          box-shadow: inset 0px -2px 7px 0px #1E410E;
+          border-radius: 5px 5px 5px 5px;
+          border: 1px solid #A2F57F;
+          font-weight: 400;
+          font-size: 30px;
+          color: #000000;
+          line-height: 90px;
+          text-align: center;
+          margin-left: 50px;
+          margin-top: 32px;
+          padding-left: 20px;
+          padding-right: 20px;
+        }
+      }
+    }
+    .search-btn {
+      display: flex;
+      align-items: center;
+      flex-direction: column;
+      justify-content: space-around;
+      margin-top: 54px;
+      img {
+        width: 244px;
+        height: 100px;
+      }
+      p{
 
+      }
+      span{
+        margin-left: 3px;
+      }
+    }
+  }
+
+
+}
 </style>

+ 0 - 51
src/views/xjc-integratedmachine/environment/occdb_interestcode_list1.vue

@@ -1,51 +0,0 @@
-<template>
-  <div v-for="(item,index) in code_list">
-    {{item.code}}---{{item.name}}
-    <div v-for="(it,ind) in code_map">
-      <div v-for="(i,d) in it">
-        <div v-if="i.code==item.code">
-          {{i.name}}
-        </div>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script setup>
-import {codeList} from '@/api/xjc-integratedmachine/environment/occupation.js'
-
-const router = useRouter()
-const route = useRoute()
-
-const param = route.query
-//
-const code_list = ref([])
-const code_map = ref([])
-
-function list() {
-  codeList({
-    code: param.code
-  }).then(resp => {
-    code_list.value = resp.code_list
-    console.log("ssssss", code_list.value)
-    code_map.value = resp.code_map
-  })
-}
-
-function toDetail(item) {
-  router.push({
-    path: '/xjc-integratedmachine/environment/occ_details_video',
-    query: {
-      id: item.id
-    }
-  })
-}
-
-list()
-
-
-</script>
-
-<style scoped>
-
-</style>

+ 5 - 0
src/views/xjc-integratedmachine/environment/occdb_search_industry.vue

@@ -149,6 +149,7 @@ function setHeadinfo() {
       nickName: '张三'
     },
     backUrl: '/xjc-integratedmachine/environment/index',
+    backUrlUse:true,
     homeUrl: '/xjc-integratedmachine/environment/index'
   }
 }
@@ -175,6 +176,10 @@ function jumpTo(path) {
     path: path,
     query: {name: 123}
   })
+  let flag = sessionStorage.getItem('conditionsStr') || false;
+  if(flag){
+    sessionStorage.removeItem('conditionsStr');
+  }
 }
 
 onMounted(() => {

+ 25 - 6
src/views/xjc-integratedmachine/environment/pro_details_video.vue

@@ -1,6 +1,6 @@
 <template>
-  <div class="pro_details_video">
-    <head-component :headinfo=headinfo></head-component>
+  <div class="pro_details_video" v-loading="loading">
+    <head-component :headinfo=headinfo ref="headinfoRef"></head-component>
     <div class="page-content">
       <div class="page-img-box">
         <div class="top-content">
@@ -112,7 +112,7 @@ import videojs from 'video.js';
 import 'video.js/dist/video-js.css';
 import collectionComponent from '@/views/xjc-integratedmachine/components/collection_component.vue'
 import {specialtyDetail} from '@/api/xjc-integratedmachine/environment/specialty.js'
-import {ref} from "vue";
+import {provide, ref} from "vue";
 import headComponent from '@/views/xjc-integratedmachine/components/head_component.vue'
 import Drag_component from "@/views/xjc-integratedmachine/components/drag_component.vue";
 import {handleThemeStyle} from "@/utils/theme.js";
@@ -126,11 +126,14 @@ const router = useRouter()
 const route = useRoute()
 const tabIndex = ref("zyjd")
 const headinfo = ref({})
+const headinfoRef = ref(null);
+
 const onePage = ref(true)
 const twoPage = ref(false)
 const threePage = ref(false)
 const fourPage = ref(false)
 const fivePage = ref(false)
+const loading = ref(false)
 function setHeadinfo(){
   headinfo.value = {
     title: '专业详情',
@@ -141,7 +144,7 @@ function setHeadinfo(){
     backUrl : '/xjc-integratedmachine/environment/query_universitydb_conditions',
     homeUrl:'/xjc-integratedmachine/environment/index',
     contrast:true,
-    contrastType:'major'
+    contrastType:2
   }
 }
 
@@ -170,17 +173,26 @@ function setCollection_data(){
   console.log("entity.value",entity.value)
 }
 function detail(id) {
+  loading.value = true;
   specialtyDetail({
     id: id || param.id
   }).then(resp => {
+    resp.entity.smoSpecialty = resp.smoSpecialty
+    resp.entity.compare = resp.compare
     entity.value = resp.entity
     kaishe_list.value = resp.kaishe_list
     pinggu_list.value = resp.pinggu_list
     similar_list.value = resp.similar_list
     entity.value.kaishe_list = kaishe_list
+    loading.value = false
+    setCollection_data()
+    collectionRef.value.getIsContrast(entity.value)
+    if (headinfoRef.value) {
+      headinfoRef.value.getCompareSizeData(2); // 调用子组件的 sayHello 函数
+    }
   })
 setTimeout(() => {
-    setCollection_data();
+    setCollection_data()
     collectionRef.value.isContrast(entity.value);
     collectionRef.value.getSource('pro_details_video');
   }, 500);
@@ -262,7 +274,14 @@ function toDetail(item){
   // })
   detail(item.id)
 }
-
+const parentMethod = () => {
+  console.log('父组件方法被调用');
+  detail()
+  if (headinfoRef.value) {
+    headinfoRef.value.getCompareSizeData(1); // 调用子组件的 sayHello 函数
+  }
+};
+provide('parentMethod', parentMethod);
 </script>
 
 <style scoped lang="scss">

+ 27 - 4
src/views/xjc-integratedmachine/environment/prodb_specialtylist1.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="prodb_specialtylist1">
+  <div class="prodb_specialtylist1" v-loading="loading">
     <head-component :headinfo=headinfo></head-component>
     <div class="page-content">
       <div class="content">
@@ -12,13 +12,26 @@
             </div>
           </div>
         </div>
+        <div class="pagination">
+<!--          <pagination v-show="total > 0" size="large" :total="total" v-model:page="queryParams.pageNum"-->
+<!--                      v-model:limit="queryParams.pageSize" @pagination="list1"/>-->
+<!--          <el-pagination-->
+<!--              size="small"-->
+<!--              background-->
+<!--              layout="prev, pager, next"-->
+<!--              :total="total"-->
+<!--              v-model:page="queryParams.pageNum"-->
+<!--              v-model:limit="queryParams.pageSize"-->
+<!--              @pagination="list1"-->
+<!--              class="mt-4"-->
+<!--          />-->
+        </div>
       </div>
     </div>
     <drag_component></drag_component>
   </div>
 
-<!--  <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"-->
-<!--              v-model:limit="queryParams.pageSize" @pagination="list1"/>-->
+
 </template>
 
 <script setup>
@@ -32,6 +45,7 @@ const total = ref(0)
 const param = route.query
 const data_rows = ref([])
 const headinfo = ref({})
+const loading= ref(false)
 function setHeadinfo() {
   headinfo.value = {
     title: '专业类',
@@ -54,9 +68,11 @@ const queryParams = ref({
 })
 
 function list1() {
+  loading.value = true;
   specialtyList1(queryParams.value).then(resp => {
     data_rows.value = resp.data.rows
     total.value = resp.data.total
+    loading.value = false;
   })
 }
 
@@ -97,10 +113,17 @@ div,p{
       background: #FFFFFF;
       border-radius: 35px 35px 35px 35px;
       margin-top:13px;
+      .pagination{
+          //border: 1px solid;
+          display: flex;
+          justify-content: center;
+          margin-top: 30px;
+          font-size: 32px;
+      }
     }
     .result-box {
       width: 100%;
-      height: 750px;
+      height: 830px;
       overflow: auto;
 
       .two-page-result {

+ 92 - 82
src/views/xjc-integratedmachine/environment/query_universitydb_conditions.vue

@@ -84,13 +84,12 @@
         </div>
       </div>
       <drag_component></drag_component>
-
     </div>
     <div>
       <!--院校属地-->
-      <el-dialog v-model="showAreaChoose" width="1000px" append-to-body>
+      <el-dialog v-model="showAreaChoose" append-to-body width="1500">
         <div class="dialog-box">
-          <div v-for="dict in gk_province" :key="dict.value" @click="chooseArea(dict)">
+          <div v-for="(dict,index) in gk_province" :class="[dict.selected?'item-result-box-active':'item-result-box']"  :key="dict.value" @click="chooseArea(dict,index)">
             <p>
               {{ dict.label }}
             </p>
@@ -101,9 +100,10 @@
     </div>
     <div>
       <!--学历层次-->
-      <el-dialog v-model="showEducationlevel" width="1000px" append-to-body>
+      <el-dialog v-model="showEducationlevel" width="1500" append-to-body>
         <div class="dialog-box dialog-box2">
-          <div v-for="dict in educationlevel" :key="dict.value" @click="chooseEducationlevel(dict)">
+          <div v-for="(dict,index) in educationlevel" :key="dict.value" @click="chooseEducationlevel(dict,index)"
+               :class="[dict.selected?'item-result-box-active':'item-result-box']" >
             <p>
               {{ dict.label }}
             </p>
@@ -114,8 +114,9 @@
     <div>
       <!--特色-->
       <el-dialog v-model="showCharacteristic" width="1000px" append-to-body>
-        <div class="dialog-box">
-          <div v-for="dict in characteristic" :key="dict.value" @click="chooseCharacteristic(dict)">
+        <div class="dialog-box dialog-box2">
+          <div v-for="(dict,index) in characteristic" :key="dict.value" @click="chooseCharacteristic(dict,index)"
+               :class="[dict.selected?'item-result-box-active':'item-result-box']">
             <p>
               {{ dict.label }}
             </p>
@@ -190,6 +191,7 @@ function jumpTo(path) {
 
 onMounted(() => {
   setHeadinfo()
+  // getDate();
 })
 const universityList = ref([])
 
@@ -252,9 +254,13 @@ function showAreaChooseHandler() {
   showAreaChoose.value = true
 }
 
-function chooseArea(item) {
+function chooseArea(item,index) {
   form.value.areaid = item.value
   form.value.areaname = item.label
+  gk_province.value.map(ite =>{
+    ite.selected = false;
+  })
+  gk_province.value[index].selected = true;
   showAreaChoose.value = false
 }
 
@@ -262,9 +268,13 @@ function showEducationlevelHandler() {
   showEducationlevel.value = true
 }
 
-function chooseEducationlevel(item) {
+function chooseEducationlevel(item,index) {
   form.value.educationlevel = item.value
   form.value.educationlevelName = item.label
+  educationlevel.value.map(ite =>{
+    ite.selected = false;
+  })
+  educationlevel.value[index].selected = true;
   showEducationlevel.value = false
 }
 
@@ -272,10 +282,14 @@ function showCharacteristicHandler() {
   showCharacteristic.value = true
 }
 
-function chooseCharacteristic(item) {
+function chooseCharacteristic(item,index) {
   form.value.characteristic = item.value
   form.value.characteristicName = item.label
   showCharacteristic.value = false
+  characteristic.value.map(ite =>{
+    ite.selected = false;
+  })
+  characteristic.value[index].selected = true;
 }
 
 function search() {
@@ -293,6 +307,10 @@ function clearResult(item) {
 
 
 <style scoped lang="scss">
+p , div{
+  margin: 0;
+  padding: 0;
+}
 .query_universitydb_conditions {
   background: url('@/assets/images/login/login-home-background.png') no-repeat;
   background-size: 1920px 1080px;
@@ -435,59 +453,6 @@ function clearResult(item) {
             justify-content: space-between;
             align-items: center;
 
-            .item-result-box-active {
-              min-width: 320px;
-              height: 92px;
-              background: linear-gradient(180deg, #B6FFEF 0%, #C5EEFF 100%);
-              box-shadow: inset 0px -2px 7px 0px #1E410E;
-              border-radius: 5px 5px 5px 5px;
-              border: 1px solid #A2F57F;
-              font-weight: 400;
-              font-size: 30px;
-              color: #0DE6A1;
-              line-height: 90px;
-              text-align: center;
-              margin-left: 50px;
-              margin-right: 50px;
-              margin-top: 32px;
-              padding-left: 20px;
-              padding-right: 20px;
-            }
-
-            .item-result-box {
-              min-width: 320px;
-              height: 92px;
-              background: #E0EEF4;
-              border-radius: 5px 5px 5px 5px;
-              font-weight: 400;
-              font-size: 30px;
-              color: #000000;
-              line-height: 90px;
-              text-align: center;
-              margin-left: 50px;
-              margin-right: 50px;
-              margin-top: 32px;
-              padding-left: 20px;
-              padding-right: 20px;
-            }
-
-            .item-result-box:hover {
-              min-width: 320px;
-              height: 92px;
-              background: linear-gradient(180deg, #B6FFEF 0%, #C5EEFF 100%);
-              box-shadow: inset 0px -2px 7px 0px #1E410E;
-              border-radius: 5px 5px 5px 5px;
-              border: 1px solid #A2F57F;
-              font-weight: 400;
-              font-size: 30px;
-              color: #000000;
-              line-height: 90px;
-              text-align: center;
-              margin-left: 50px;
-              margin-top: 32px;
-              padding-left: 20px;
-              padding-right: 20px;
-            }
           }
         }
         .input-component {
@@ -546,35 +511,80 @@ function clearResult(item) {
   flex-wrap: wrap;
   justify-content: space-between;
 
-  div {
-    //border: 1px solid;
-    //width: 244px;
-    //height: 92px;
-    //background: linear-gradient( 180deg, #B6FFEF 0%, #C5EEFF 100%);
-    //box-shadow: inset 0px -2px 7px 0px #1E410E;
-    //border-radius: 5px 5px 5px 5px;
-    //border: 1px solid #A2F57F;
+
+  .item-result-box-active {
+    min-width: 220px;
+    height: 92px;
+    background: linear-gradient(180deg, #B6FFEF 0%, #C5EEFF 100%);
+    box-shadow: inset 0px -2px 7px 0px #1E410E;
+    border-radius: 5px 5px 5px 5px;
+    border: 1px solid #A2F57F;
+    font-weight: 400;
+    font-size: 30px;
+    color: #0DE6A1;
+    line-height: 90px;
+    text-align: center;
+    margin-left: 50px;
+    margin-right: 50px;
+    margin-top: 32px;
+    padding-left: 20px;
+    padding-right: 20px;
+  }
+
+  .item-result-box {
+    min-width: 220px;
+    height: 92px;
+    background: #E0EEF4;
+    border-radius: 5px 5px 5px 5px;
+    font-weight: 400;
+    font-size: 30px;
+    color: #000000;
+    line-height: 92px;
+    text-align: center;
+    margin-left: 50px;
+    margin-right: 50px;
+    margin-top: 32px;
+    padding-left: 20px;
+    padding-right: 20px;
   }
 
-  p {
-    min-width: 120px;
-    padding-left: 10px;
-    padding-right:10px;
-    height: 60px;
-    margin-left: 10px;
-    margin-right: 10px;
-    border: 1px solid;
+  .item-result-box:hover {
+    min-width: 220px;
+    height: 92px;
+    background: linear-gradient(180deg, #B6FFEF 0%, #C5EEFF 100%);
+    box-shadow: inset 0px -2px 7px 0px #1E410E;
+    border-radius: 5px 5px 5px 5px;
+    border: 1px solid #A2F57F;
     font-weight: 400;
     font-size: 30px;
-    color: #333333;
+    color: #000000;
+    //line-height: 90px;
     text-align: center;
-    line-height: 60px;
-    //border-radius: 10px;
+    margin-left: 50px;
+    margin-top: 32px;
+    padding-left: 20px;
+    padding-right: 20px;
   }
+  //p {
+  //  min-width: 120px;
+  //  padding-left: 10px;
+  //  padding-right:10px;
+  //  height: 60px;
+  //  margin-left: 10px;
+  //  margin-right: 10px;
+  //  border: 1px solid;
+  //  font-weight: 400;
+  //  font-size: 30px;
+  //  color: #333333;
+  //  text-align: center;
+  //  line-height: 60px;
+  //  //border-radius: 10px;
+  //}
 }
 .dialog-box2{
      display: flex;
      justify-content: space-around;
+     padding-bottom: 20px;
 }
 .el-dialog{
   border-radius: 35px 35px 35px 35px !important;

+ 25 - 11
src/views/xjc-integratedmachine/environment/university_details_video.vue

@@ -1,6 +1,6 @@
 <template>
-  <div class="university_details_video">
-    <head-component :headinfo=headinfo></head-component>
+  <div class="university_details_video" v-loading="loading">
+    <head-component :headinfo=headinfo ref="headinfoRef"></head-component>
     <div class="page-content">
       <div class="page-img-box">
         <div class="top-content">
@@ -9,7 +9,7 @@
             <div class="right-top">
               <p class="title">{{ entity.name }}</p>
               <div class="right-top-icon">
-                <collectionComponent ref="collectionRef" :collection="collection_data"></collectionComponent>
+                <collectionComponent ref="collectionRef" :collection="collection_data" ></collectionComponent>
               </div>
             </div>
             <div class="school-level-box">
@@ -285,7 +285,7 @@ import videojs from 'video.js';
 import 'video.js/dist/video-js.css';
 
 import collectionComponent from '@/views/xjc-integratedmachine/components/collection_component.vue'
-import {ref} from "vue";
+import {provide, ref} from "vue";
 import {getConfigKey} from "@/api/system/config.js";
 
 
@@ -330,7 +330,7 @@ const fivePage = ref(false)
 const fivePageDialog = ref(false)
 const sixPageDialog = ref(false)
 const eightPageDialog = ref(false)
-
+const loading = ref(false)
 
 const sixPage = ref(false)
 const senvenPage = ref(false)
@@ -346,7 +346,7 @@ function setHeadinfo(){
     backUrl : '/xjc-integratedmachine/environment/query_universitydb_conditions',
     homeUrl:'/xjc-integratedmachine/environment/index',
     contrast:true,
-    contrastType:'university',
+    contrastType:1,
   }
 }
 
@@ -359,18 +359,24 @@ function setCollection_data(){
     source:'university_details_video'
   }
 }
-
+const collectionRef = ref(null)
 function detail() {
+  loading.value = true;
   universityDetail({
     id: param.id
-  }).then(resp => {
+  }).then(resp =>{
+    resp.entity.compare = resp.compare
     entity.value.oldid = resp.entity.oldid
     //学校信息在这里
     entity.value = resp.entity
     //看看收藏
     queryConnection()
     setCollection_data()
-    collectionRef.value.isContrast(entity,);
+    collectionRef.value.getIsContrast(entity.value)
+    if (headinfoRef.value) {
+      headinfoRef.value.getCompareSizeData(1); // 调用子组件的 sayHello 函数
+    }
+    loading.value = false;
   })
 }
 
@@ -489,7 +495,15 @@ function cancle_collection() {
     queryConnection()
   })
 }
-
+const headinfoRef = ref(null);
+const parentMethod = () => {
+  console.log('父组件方法被调用');
+  detail()
+  if (headinfoRef.value) {
+    headinfoRef.value.getCompareSizeData(1); // 调用子组件的 sayHello 函数
+  }
+};
+provide('parentMethod', parentMethod);
 
 detail()
 const showPage = (val) => {
@@ -575,7 +589,7 @@ const showPage = (val) => {
   form.university = '';
   form.categoryName = '';
 }
-const collectionRef = ref(null)
+
 onMounted(() => {
   proxy.getConfigKey('sys_resource_root2').then(res => {
     baseUrl.value = res.msg;

+ 8 - 2
src/views/xjc-integratedmachine/environment/university_list.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="university_details_video">
-    <head-component :headinfo=headinfo></head-component>
+    <head-component :headinfo=headinfo ref="headinfoRef"></head-component>
     <div class="page-content">
       <div class="page-img-box">
         <div class="box-content">
@@ -40,6 +40,7 @@ import {ref} from "vue";
 const router = useRouter()
 const route = useRoute()
 const headinfo = ref({})
+const headinfoRef = ref(null);
 const params = route.query
 
 const total = ref(0)
@@ -66,6 +67,8 @@ function getList() {
     tableData.value = resp.data.rows
     total.value = resp.data.total
   })
+
+
 }
 
 function handleDetail(row) {
@@ -94,7 +97,10 @@ function setHeadinfo() {
     backUrl: '/xjc-integratedmachine/environment/query_universitydb_conditions',
     homeUrl: '/xjc-integratedmachine/environment/index',
     contrast:true,
-    contrastType:'university',
+    contrastType:1,
+  }
+  if (headinfoRef.value) {
+    headinfoRef.value.getCompareSizeData(1); // 调用子组件的 sayHello 函数
   }
 }
 

+ 5 - 1
src/views/xjc-integratedmachine/wakeup/index.vue

@@ -25,16 +25,20 @@
         </div>
       </div>
      <drag_component></drag_component>
+<!--     <ai_rabit_component></ai_rabit_component>-->
     </div>
   </div>
 </template>
 
 <script setup>
     import headComponent from '@/views/xjc-integratedmachine/components/head_component.vue'
+    import drag_component from "@/views/xjc-integratedmachine/components/drag_component.vue";
+    // import ai_rabit_component from "@/views/xjc-integratedmachine/components/ai_rabit_component.vue";
+
     const router = useRouter()
     const headinfo = ref({})
     import { ref, onMounted, onUnmounted } from 'vue';
-    import drag_component from "@/views/xjc-integratedmachine/components/drag_component.vue";
+
 
     function setHeadinfo(){
         headinfo.value = {

+ 2 - 4
vite.config.js

@@ -46,10 +46,8 @@ export default defineConfig(({ mode, command }) => {
       proxy: {
         // https://cn.vitejs.dev/config/#server-proxy
         '/dev-api': {
-          target: 'http://localhost:8080',
-          // target: 'http://test.chuiinxgk.com',//服务器
-          // target: 'http://192.168.3.100:8080',//服务器
-
+          // target: 'http://localhost:8080',
+          target: 'http://192.168.1.13:8080',//临时11
           changeOrigin: true,
           rewrite: (p) => p.replace(/^\/dev-api/, '')
         }