Browse Source

feat 新增学职资讯

sys5923812@126.com 2 months ago
parent
commit
087e94edc1

+ 1 - 1
package.json

@@ -21,7 +21,7 @@
     "@vueuse/core": "13.3.0",
     "axios": "1.9.0",
     "clipboard": "2.0.11",
-    "echarts": "5.6.0",
+    "echarts": "^5.6.0",
     "element-plus": "2.9.9",
     "fabric": "^6.7.0",
     "file-saver": "2.0.5",

+ 69 - 0
src/api/xjc-integratedmachine/tscareer.js

@@ -0,0 +1,69 @@
+import request from '@/utils/request'
+
+export function subjectspecialdetail(data) {
+    return request({
+        url: '/integratedmachine/tsytj/tscareer/subjectspecialdetail',
+        method: 'post',
+        data : data
+    })
+}
+export function subjectreportlist(data) {
+    return request({
+        url: '/integratedmachine/tsytj/tscareer/subjectreportlist',
+        method: 'post',
+        data : data
+    })
+}
+export function subjectreportdetail(data){
+    return request({
+        url: '/integratedmachine/tsytj/tscareer/subjectreportdetail',
+        method: 'post',
+        data : data
+    })
+}
+export function evaluationresults(data){
+    return request({
+        url: '/integratedmachine/tsytj/tscareer/evaluationresults',
+        method: 'post',
+        data : data
+    })
+}
+export function rankinglist(data){
+    return request({
+        url: '/integratedmachine/tsytj/tscareer/rankinglist',
+        method: 'get',
+        params : data
+    })
+}
+export function talentbase(data){
+    return request({
+        url: '/integratedmachine/tsytj/tscareer/talentbase',
+        method: 'get',
+        params : data
+    })
+}
+
+export function careerinformation(data){
+    return request({
+        url: '/integratedmachine/tsytj/tscareer/careerinformation',
+        method: 'get',
+        params : data
+    })
+}
+export function careerdetail(data){
+    return request({
+        url: '/integratedmachine/tsytj/tscareer/careerdetail',
+        method: 'post',
+        data : data
+    })
+}
+export function mycosdetail(data){
+    return request({
+        url: '/integratedmachine/tsytj/tscareer/mycosdetail',
+        method: 'post',
+        data : data
+    })
+}
+
+
+

+ 2 - 1
src/permission.js

@@ -13,7 +13,8 @@ NProgress.configure({showSpinner: false})
 
 const whiteList = ['/login', '/register', '/xjc_index',
     '/xjc-integratedmachine/wakeup/index',
-    '/integratedmachine/wakeup/rainbow/paint',
+    '/xjc-integratedmachine/wakeup/rainbow/paint',
+    '/xjc-integratedmachine/wakeup/rainbow/paint2',
     '/xjc-integratedmachine/cognize/index',
     '/xjc-integratedmachine/environment/index',
     '/xjc-integratedmachine/decision/index',

+ 5 - 0
src/router/router_decision.js

@@ -89,6 +89,11 @@ const router=[
         path: '/xjc-integratedmachine/decision/decision_balance_sheet',
         component: () => import('@/views/xjc-integratedmachine/decision/decision_balance_sheet.vue'),
     },
+    //选科流程图
+    {
+        path : '/xjc-integratedmachine/decision/process_diagram_selecting_subjects',
+        component: () => import('@/views/xjc-integratedmachine/decision/process_diagram_selecting_subjects.vue'),
+    }
 
 
 ]

+ 1 - 1
src/router/router_environment.js

@@ -110,7 +110,7 @@ const router = [
     },
     //学科评估报告2
     {
-        path: '/xjc-integratedmachine/environment/',
+        path: '/xjc-integratedmachine/environment/subject_evaluation_report2',
         component: () => import('@/views/xjc-integratedmachine/environment/subject_evaluation_report2.vue'),
     },
     //高校排名查询1

+ 5 - 1
src/router/router_wakeup.js

@@ -6,9 +6,13 @@ const router = [
     },
     //彩虹图
     {
-        path: '/integratedmachine/wakeup/rainbow/paint',
+        path: '/xjc-integratedmachine/wakeup/rainbow/paint',
         component: () => import('@/views/xjc-integratedmachine/wakeup/rainbow/paint'),
     },
+    {
+        path: '/xjc-integratedmachine/wakeup/rainbow/paint2',
+        component: () => import('@/views/xjc-integratedmachine/wakeup/rainbow/paint2'),
+    },
     //认识生涯
     {
         path: '/xjc-integratedmachine/wakeup/career_recognize/index',

+ 1 - 0
src/views/xjc-integratedmachine/decision/choose_subjects_1.vue

@@ -1,5 +1,6 @@
 <template>
     根据高校/专业选科目1
+
 </template>
 
 <script setup>

+ 23 - 1
src/views/xjc-integratedmachine/decision/index.vue

@@ -1,9 +1,31 @@
 <template>
-    生涯决策首页
+    生涯决策学习系统
+
+    <el-button @click="jumpTo('/xjc-integratedmachine/decision/process_diagram_selecting_subjects')">高中选科流程图</el-button>
+    <el-button>优势学科测评</el-button>
+    <el-button>专业选择测评</el-button>
+    <el-button @click="jumpTo('/xjc-integratedmachine/decision/choose_subjects_1')">根据高校/专业选科目</el-button>
+    <el-button>根据科目选专业</el-button>
+<br>
+    <el-button>学科专业相关性</el-button>
+    <el-button>学科与未来专业</el-button>
+    <el-button>SWOT态势分析</el-button>
+    <el-button>决策风格测试</el-button>
+    <el-button>选科决策平衡单</el-button>
+
 </template>
 
 <script setup>
 
+    const router = useRouter()
+    const route = useRoute()
+
+    function jumpTo(path) {
+        router.push({
+            path : path
+        })
+    }
+
 </script>
 
 <style scoped>

+ 14 - 0
src/views/xjc-integratedmachine/decision/process_diagram_selecting_subjects.vue

@@ -0,0 +1,14 @@
+<template>
+    高中选科流程图<br>
+
+美工大哥:给我一张图片
+
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped>
+
+</style>

+ 38 - 0
src/views/xjc-integratedmachine/environment/career_story1.vue

@@ -1,8 +1,46 @@
 <template>
     生涯故事1
+    <div v-for="(item,index) in list" @click="toDetail(item)">
+        <div v-html="item.title"></div>
+        <div v-html="item.content.substr(0,10)"></div>
+        <div @click="toDetail(item)">>>>></div>
+    </div>
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+                v-model:limit="queryParams.pageSize" @pagination="query"/>
 </template>
 
 <script setup>
+    import {careerinformation} from '@/api/xjc-integratedmachine/tscareer.js'
+    const router = useRouter()
+    const route = useRoute()
+    const list = ref([])
+    const total = ref(0)
+
+    const queryParams = ref({
+        pageNum: 1,
+        pageSize: 10,
+        type: '5'
+    })
+
+    function query() {
+        careerinformation(queryParams.value).then(resp => {
+            console.log(resp.data_list.rows)
+            list.value = resp.data_list.rows
+            total.value = resp.data_list.total
+        })
+    }
+
+    function toDetail(item) {
+        router.push({
+            path : '/xjc-integratedmachine/environment/career_story2',
+            query :{
+                id : item.id
+            }
+        })
+    }
+
+    query()
 
 </script>
 

+ 16 - 1
src/views/xjc-integratedmachine/environment/career_story2.vue

@@ -1,8 +1,23 @@
 <template>
-    生涯故事1
+    <div v-html="data.title"></div>
+    <div v-html="data.content"></div>
 </template>
 
 <script setup>
+    import {careerdetail} from '@/api/xjc-integratedmachine/tscareer.js'
+    const router = useRouter()
+    const route = useRoute()
+    const param = route.query
+
+    const data = ref({})
+    function detail() {
+        careerdetail({
+            id : param.id
+        }).then(resp =>{
+            data.value = resp.entity
+        })
+    }
+    detail()
 
 </script>
 

+ 2 - 7
src/views/xjc-integratedmachine/environment/index.vue

@@ -6,13 +6,8 @@
     <button @click="jumpTo('/xjc-integratedmachine/environment/prodb_search_undergraduate')">专业库</button>
     <button @click="jumpTo('/xjc-integratedmachine/environment/occdb_search_industry')">职业库</button>
     <button @click="jumpTo('/xjc-integratedmachine/environment/studyocc_information')">学职资讯</button>
-    <button>高校视频</button>
-    <button>专业视频</button>
-    <button>职业视频</button>
-    <button>家庭职业树</button>
-    <button>科学与未来专业职业</button>
-    <button>专业检索体验单</button>
-    <button>职业检索体验单</button>
+    <button>AI生涯访谈</button>
+
 
 
 </template>

+ 19 - 1
src/views/xjc-integratedmachine/environment/info_detail.vue

@@ -1,8 +1,26 @@
 <template>
-    资讯详情
+    <div>{{data.title}}</div>
+    <div v-html="data.content"></div>
 </template>
 
 <script setup>
+    import {mycosdetail} from '@/api/xjc-integratedmachine/tscareer.js'
+
+    const router = useRouter()
+    const route = useRoute()
+    const param = route.query
+
+    const data = ref({})
+
+    function detail() {
+        mycosdetail({
+            id: param.id
+        }).then(resp => {
+            data.value = resp.entity
+        })
+    }
+
+    detail()
 
 </script>
 

+ 35 - 1
src/views/xjc-integratedmachine/environment/mycos_info.vue

@@ -1,8 +1,42 @@
 <template>
-    myCos资讯
+    cos
+    <div v-for="(item,index) in list" @click="toDetail(item)">
+        <div v-html="item.title"></div><br>
+        <div v-html="item.content"></div>
+        <div @click="toDetail(item)">>>>></div>
+    </div>
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+                v-model:limit="queryParams.pageSize" @pagination="list"/>
 </template>
 
 <script setup>
+    import {careerinformation} from '@/api/xjc-integratedmachine/tscareer.js'
+    const router = useRouter()
+    const list = ref([])
+    const total = ref(0)
+
+    const queryParams = ref({
+        pageNum: 1,
+        pageSize: 10,
+        type : '1'
+    })
+    function query() {
+        careerinformation(queryParams.value).then(resp =>{
+            console.log(resp.data_list.rows)
+            list.value = resp.data_list.rows
+            total.value = resp.data_list.total
+        })
+    }
+    function toDetail(item) {
+        router.push({
+            path : '/xjc-integratedmachine/environment/info_detail',
+            query :{
+                id : item.id
+            }
+        })
+    }
+    query()
 
 </script>
 

+ 14 - 6
src/views/xjc-integratedmachine/environment/studyocc_information.vue

@@ -1,26 +1,34 @@
 <template>
     学职资讯<br>
-    <div>
+    <div @click="jumpTo('/xjc-integratedmachine/environment/subject_suitable_profession')">
         学科适合专业
     </div>
-    <div>
+    <div @click="jumpTo('/xjc-integratedmachine/environment/subject_evaluation_report1')">
         学科评估报告
     </div>
-    <div>
+    <div @click="jumpTo('/xjc-integratedmachine/environment/university_ranking_query1')">
 高校排名
     </div>
-    <div>
+    <div @click="jumpTo('/xjc-integratedmachine/environment/university_talent_base')">
 高校人才基地
     </div>
-    <div>
+    <div @click="jumpTo('/xjc-integratedmachine/environment/career_story1')">
 生涯故事
     </div>
-    <div>
+    <div @click="jumpTo('/xjc-integratedmachine/environment/mycos_info')">
 MYcos资讯
     </div>
 </template>
 
 <script setup>
+    const router = useRouter()
+    const route = useRoute()
+
+    function jumpTo(path) {
+        router.push({
+            path : path
+        })
+    }
 
 </script>
 

+ 40 - 0
src/views/xjc-integratedmachine/environment/subject_evaluation_report1.vue

@@ -1,9 +1,49 @@
 <template>
     学科评估报告1
+    <br>
+    学科门类<br><br><br><br><br>
+    <div v-for="(item,index) in data_list" @click="detail(item.sepeialitt)">
+        {{item.sepeialitt}}
+    </div>
+    <br>----------------<br>
+    专业<br><br><br><br><br>
+    <div v-for="(item,index) in subjectreportdetail_list" @click="jumpToReport2(item)">
+        {{item.subjectname}}
+    </div>
+
+
 </template>
 
 <script setup>
+    import {subjectreportlist,subjectreportdetail} from '@/api/xjc-integratedmachine/tscareer.js'
+    const router = useRouter()
+    const data_list = ref([])
+    function list() {
+        subjectreportlist().then(resp =>{
+            console.log(resp)
+            data_list.value = resp.getsepeiality
+
+        })
+    }
+    const subjectreportdetail_list = ref([])
+    function detail(data){
+        subjectreportdetail({
+            id : data
+        }).then(resp =>{
+            subjectreportdetail_list.value = resp.subjectreportdetail
+        })
+    }
+
+    function jumpToReport2(item){
+        router.push({
+            path : '/xjc-integratedmachine/environment/subject_evaluation_report2',
+            query :{
+                id : item.subjectcode
+            }
+        })
+    }
 
+    list()
 </script>
 
 <style scoped>

+ 35 - 1
src/views/xjc-integratedmachine/environment/subject_evaluation_report2.vue

@@ -1,9 +1,43 @@
 <template>
-    学科评估报告2
+    学科评估报告2<br>
+
+    本一级学科中......<br>
+
+    <div v-for="(item,index) in evaluationresults_list">
+        {{item.university}}-{{item.univercode}}=={{item.result}}--
+        <div @click="jumpToPro_details_video(item)">
+            详情>>
+        </div>
+    </div>
 </template>
 
 <script setup>
 
+    import {evaluationresults} from '@/api/xjc-integratedmachine/tscareer.js'
+    const router = useRouter()
+    const route = useRoute()
+
+    const param = route.query
+
+    const evaluationresults_list = ref([])
+    function results(){
+        evaluationresults({
+            id : param.id
+        }).then(resp =>{
+            evaluationresults_list.value = resp.evaluationresults
+        })
+    }
+    function jumpToPro_details_video(item){
+        console.log("-------",item.id)
+        router.push({
+            path : '/xjc-integratedmachine/environment/university_details_video',
+            query :{
+                id : item.id
+            }
+        })
+    }
+
+    results()
 </script>
 
 <style scoped>

+ 32 - 1
src/views/xjc-integratedmachine/environment/subject_suitable_profession.vue

@@ -1,8 +1,39 @@
 <template>
-    学科适合专业
+    学科适合专业<br>
+    高中学科<br><br><br><br>
+    <div v-for="(item,index) in subject" @click="detail(item.value)">
+        {{item.value}}
+    </div>
+<br><br><br><br><br>
+    <div v-for="(item,index) in data_list" @click="jumpToPro_details_video(item)">
+        {{item.major}}
+    </div>
 </template>
 
 <script setup>
+    import {subjectspecialdetail} from '@/api/xjc-integratedmachine/tscareer.js'
+    const router = useRouter()
+    const {proxy} = getCurrentInstance()
+    const {subject} = proxy.useDict('subject')
+
+    const data_list = ref([])
+    function detail(data) {
+        subjectspecialdetail({
+            id : data
+        }).then(resp =>{
+            data_list.value = resp.subjectspecialdetail
+        })
+    }
+
+    function jumpToPro_details_video(item){
+        router.push({
+            path : '/xjc-integratedmachine/environment/pro_details_video',
+            query :{
+                id : item.majorid
+            }
+        })
+    }
+
 
 </script>
 

+ 9 - 1
src/views/xjc-integratedmachine/environment/university_ranking_query1.vue

@@ -1,8 +1,16 @@
 <template>
-    高校排名查询1
+    高校排名查询1<br>
+    软科中国大学排名..........................
+    <el-button @click="jumpTo">点击查询</el-button>
 </template>
 
 <script setup>
+    const router = useRouter()
+    function jumpTo() {
+        router.push({
+            path : '/xjc-integratedmachine/environment/university_ranking_query2'
+        })
+    }
 
 </script>
 

+ 22 - 1
src/views/xjc-integratedmachine/environment/university_ranking_query2.vue

@@ -1,8 +1,29 @@
 <template>
-    高校排名查询2
+    高校排名查询2<br>
+    <div v-for="(item,index) in data_list">
+        {{item.logo}}--{{item.schoolname}}--
+        创建时间:{{item.ctime}},所在地区{{item.areaname}},院校隶属{{item.subjection}},院校类型:<dict-tag :options="school_category" :value="item.categoryid"/>
+    </div>
+
+
 </template>
 
 <script setup>
+    const {proxy} = getCurrentInstance()
+    const {school_category} = proxy.useDict('school_category')
+    import {rankinglist} from '@/api/xjc-integratedmachine/tscareer.js'
+    const router = useRouter()
+    const route = useRoute()
+
+
+    const data_list = ref([])
+    function list() {
+        rankinglist().then(resp =>{
+            console.log("##",resp)
+            data_list.value = resp.data_list.rows
+        })
+    }
+    list()
 
 </script>
 

+ 46 - 0
src/views/xjc-integratedmachine/environment/university_talent_base.vue

@@ -1,9 +1,55 @@
 <template>
     高校人才基地
+    <el-el-card>
+        <div @click="changeTab('zygcs')">卓越工程师</div>
+        <div @click="changeTab('zdsys')">重点实验室</div>
+        <div @click="changeTab('lkjd')">理科基地</div>
+        <div @click="changeTab('wkjd')">文科基地</div>
+        <div @click="changeTab('gkjd')">工科基地</div>
+        <div @click="changeTab('zfjh')">珠峰计划</div>
+    </el-el-card>
+    <div v-show="tab == 'zygcs'" v-html="data_list[0].content">
+    </div>
+    <div v-show="tab == 'zdsys'" v-html="data_list[1].content">
+
+    </div>
+    <div v-show="tab == 'lkjd'" v-html="data_list[2].content">
+
+    </div>
+    <div v-show="tab == 'wkjd'" v-html="data_list[3].content">
+
+    </div>
+    <div v-show="tab == 'gkjd'" v-html="data_list[4].content">
+
+    </div>
+    <div v-show="tab == 'zfjh'" v-html="data_list[5].content">
+
+    </div>
+
+
+
+
+
 </template>
 
 <script setup>
 
+    import {talentbase} from '@/api/xjc-integratedmachine/tscareer.js'
+
+    const tab = ref("zygcs")
+
+    function changeTab(path) {
+        tab.value = path
+    }
+    const data_list = ref([])
+    function base() {
+        talentbase({}).then(resp =>{
+            data_list.value = resp.talentbase
+            console.log("######",resp)
+        })
+    }
+    base();
+
 </script>
 
 <style scoped>

+ 161 - 0
src/views/xjc-integratedmachine/wakeup/rainbow/paint2.vue

@@ -0,0 +1,161 @@
+<template>
+    <!-- 图表容器:设置宽度和高度 -->
+    <div class="chartRef" ref="chartRef" id="chartRef" @mousemove="moving" @click="paint"></div>
+</template>
+
+<script setup>
+    var e = ref(0)
+    // 引入 Vue 的 Composition API
+    import {ref, onMounted, onBeforeUnmount} from 'vue'
+    // 引入 echarts 库
+    import * as echarts from 'echarts'
+
+    // 获取 DOM 元素的引用(用于初始化图表)
+    const chartRef = ref(null)
+    // 存储 ECharts 实例
+    let chartInstance = null
+
+    var option =ref( {
+        title: {
+            show: true,
+            // text: e + "%",
+            x: "center",
+            y: "center",// 通过x,y将标题(进度)定位在圆环中心
+            textStyle: {
+                fontSize: "25",
+                color: "white",
+                fontWeight: "400",
+                fontFamily: "DINPro, DINPro-Regular",
+            },
+        },
+        tooltip: {
+            trigger: "item",
+            formatter: "{d}%",
+            show: false,
+        },
+        legend: {
+            orient: "vertical",
+            x: "left",
+            show: false,
+        },
+        series: {
+            name: "",
+            type: "pie",
+            radius: ["65%", "85%"],
+            avoidLabelOverlap: true,
+            hoverAnimation: false,
+            label: {
+                normal: {
+                    show: false,
+                    position: "center",
+                },
+                emphasis: {
+                    show: false,
+                },
+            },
+            labelLine: {
+                normal: {
+                    show: false,
+                },
+            },
+            data: [
+                {
+                    value: e.value,
+                    name: "",
+                    itemStyle: {
+                        color: "#2AB296",
+                    },
+                },
+                {
+                    value: 100 - e.value,
+                    name: "",
+                    itemStyle: {
+                        color: "transparent",//透明色,也可以设置把其他颜色
+                    },
+                },
+            ],
+        },
+    })
+
+    // 初始化图表的方法
+    const initChart = () => {
+        if (chartRef.value) {
+            // 初始化 echarts 实例
+            chartInstance = echarts.init(chartRef.value)
+
+            // 配置项
+
+
+
+            // 使用配置项渲染图表
+
+            paint()
+        }
+    }
+
+    // 窗口大小变化时调整图表尺寸
+    const resizeChart = () => {
+        chartInstance?.resize()
+    }
+
+    // 组件挂载后执行初始化
+    onMounted(() => {
+        initChart()
+        // 监听窗口大小变化事件以支持响应式
+        window.addEventListener('resize', resizeChart)
+    })
+
+    // 组件卸载前清理资源,防止内存泄漏
+    onBeforeUnmount(() => {
+        window.removeEventListener('resize', resizeChart)
+        chartInstance?.dispose() // 销毁 echarts 实例
+    })
+    //孙一石
+    const width = 800
+    const height = 800
+
+    function paint(){
+        option.value.series.data[0].value = e.value
+        option.value.series.data[1].value = 100 -e.value
+        // e.value= parseInt(e.value)+1
+        chartInstance.setOption(option.value)
+        // window.setTimeout(paint,1000)
+    }
+    // let x0 = document.getElementById("chartRef").offsetLeft
+    // let y0 = document.getElementById("chartRef").offsetTop
+    let i =0;
+    function moving(event) {
+        console.log("*********************",i++)
+        let center_x = width/2;
+        let center_y = height/2;
+        let mouse_x = event.pageX;
+        let mouse_y = event.pageY;
+        let ang = 180+calculateAngleDegrees(center_x,center_y,mouse_x,mouse_y)
+        let result;
+        if(ang >=0 && ang <=180){
+            e.value= ang*5/18
+            paint()
+        }
+        // console.log(mouse_x,mouse_y)
+    }
+    function calculateAngleDegrees(x1, y1, x2, y2) {
+        const dx = x2 - x1;
+        const dy = y2 - y1;
+        const radians = Math.atan2(dy, dx);
+        return radians * (180 / Math.PI); // 弧度转角度
+    }
+
+
+
+</script>
+
+<style>
+    .chartRef{
+        position: absolute;
+
+        transform: rotate(-90deg);
+        background: #ffff00;
+        width: 800px;
+        height: 800px;
+    }
+</style>