Merge remote-tracking branch 'zshyx/250207-growth-prod-master_1202-zp' into dev0515

This commit is contained in:
joshen
2025-02-16 17:39:02 +08:00
6 changed files with 289 additions and 288 deletions

View File

@@ -1,6 +1,6 @@
// import ajax from '@/utils/xajax.js' // import ajax from '@/utils/xajax.js'
import ajax from '../ajax'; import ajax from '../ajax';
const baseURL = process.env.VUE_APP_GROWTH_API_PATH; // const baseURL = process.env.VUE_APP_GROWTH_API_PATH;
// const baseURL = '/growth'; const baseURL = '/growth';
// 查询专业力必修列表 // 查询专业力必修列表
export const listData = (obj) => ajax.get(baseURL, '/professional/student/studentGrowthList', { params: obj }) export const listData = (obj) => ajax.get(baseURL, '/professional/student/studentGrowthList', { params: obj })

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -6,7 +6,10 @@
<!-- <div style="height: 20px;"></div> --> <!-- <div style="height: 20px;"></div> -->
</div> </div>
<!-- width: 990px; --> <!-- width: 990px; -->
<div class="main-body" style="padding: 30px 20px;flex:1; background-color: #fff;margin-left: 20px;"> <div class="main-body" :style="{
backgroundColor: bgColor,
padding
}" style="flex:1; margin-left: 20px;">
<!-- <div style="margin-bottom: 10px;padding:10px; border-bottom: 1px solid #dbdbdb;"> --> <!-- <div style="margin-bottom: 10px;padding:10px; border-bottom: 1px solid #dbdbdb;"> -->
<!-- <el-breadcrumb separator-class="el-icon-arrow-right"> <!-- <el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item :to="{ path: '/uc/index' }"><i class="el-icon-arrow-right"></i>个人中心</el-breadcrumb-item> <el-breadcrumb-item :to="{ path: '/uc/index' }"><i class="el-icon-arrow-right"></i>个人中心</el-breadcrumb-item>
@@ -15,7 +18,9 @@
<!-- </div> --> <!-- </div> -->
<transition name="fade-transform" mode="out-in"> <transition name="fade-transform" mode="out-in">
<keep-alive :include="cachedViews"> <keep-alive :include="cachedViews">
<div style="background-color: #FFFFFF;min-height: 600px;padding-bottom: 50px;"> <div :style="{
backgroundColor: bgColor
}" style="min-height: 600px;padding-bottom: 50px;">
<router-view :key="key" /> <router-view :key="key" />
</div> </div>
</keep-alive> </keep-alive>
@@ -39,7 +44,14 @@ export default {
return this.$route.meta.title; return this.$route.meta.title;
}, },
key() { key() {
console.log(this.$route)
return this.$route.path return this.$route.path
},
bgColor() {
return this.$route.path === "/growth/growthPage" ? "rgba(0,0,0,0)" : "#fff";
},
padding(){
return this.$route.path === "/growth/growthPage" ? "0" : "30px 20px";
} }
} }
} }

View File

@@ -1,160 +1,132 @@
<template> <template>
<div class="growth"> <div class="growth" v-loading="loading">
<header class="header"> <div class="growth-left">
<div class="f-a-c header-title"> <div class="navbar">
<div style="margin-right: 8px">我的专业力必修</div> <div style="display: flex; flex: 1">
<div class="nav-title">我的专业力必修</div>
<el-popover <div class="nav-total">
placement="top-start" <div class="total-num">35</div>
width="400" <div class="total-text">总任务数</div>
trigger="hover" </div>
content="根据您所在的组织、标准岗位、任职资格等级,已为您匹配专业力必修任务,抓紧时间学习吧~" <div class="nav-total">
> <div class="total-num">35</div>
<i <div class="total-text">已完成数量</div>
slot="reference" </div>
style="color: #a1a1a1" <div class="nav-total">
class="el-icon-question" <div class="total-num">35</div>
></i> <div class="total-text">未完成数量</div>
</el-popover> </div>
</div>
</div> </div>
<template v-if="list.length">
<el-dropdown trigger="click">
<el-button type="primary">
<div class="f-a-c">
<div class="select-active">{{ selectData.growthName }}</div>
<i class="el-icon-arrow-down el-icon--right"></i>
</div>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item
v-for="item of list"
:disabled="item.id === selectData.id"
>
<div @click="select(item)">
{{ item.growthName }}
</div></el-dropdown-item
>
</el-dropdown-menu>
</el-dropdown>
</template>
</header>
<section class="container"> <div class="growth-item" v-for="item of list">
<template v-if="list.length"> <div class="growth-nav">
<div class="title"> <div class="growth-name">{{ item.growthName }}</div>
<div style="font-size: 20px"> <div class="f-a-c">
{{ selectData.growthName }} <div
</div> class="growth-state"
<div style="display: flex; align-items: center"> :style="{
<div style="display: flex"> color:
<div style="font-size: 18px; color: #333">学习状态</div> item.learningState === 0
<div ? '#999999'
style="font-size: 18px" : item.learningState === 1
:style="{ ? '#6ba158'
color: : '#F2903D',
selectData.learningState === 0 }"
? '#fe9400' >
: selectData.learningState === 1 {{
? '#6ba158' item.learningState === 0
: '#0079ee', ? "未开始"
}" : item.learningState === 1
> ? "已完成"
{{ : "进行中"
selectData.learningState === 0 }}
? "未开始"
: selectData.learningState === 1
? "已完成"
: "进行中"
}}
</div>
</div>
<div class="learning f-j-c">
<el-button
style="width: 100px; margin-left: 16px"
type="primary"
@click="jumpRouter"
>
学习
</el-button>
</div> </div>
<div class="growth-btn" @click="jumpRouter(item)">去学习</div>
</div> </div>
</div> </div>
<div class="content"> <div class="tip-title">说明</div>
<div class="tip"> <div class="tip-content">
<div class="tip-title f-a-c"> {{ item.description || "暂无说明" }}
<img class="icon" src="../../assets/images/shuoming.jpg" />
<div>说明</div>
</div>
<div class="tip-text">
{{ selectData.description || "暂无说明" }}
</div>
</div>
<div class="progress">
<div class="progress-title f-a-c">
<img class="icon" src="../../assets/images/jindu.jpg" />
<div>学习进度</div>
</div>
<div class="progress-text">
<div class="progress-item">
<div class="item-title">总任务</div>
<div class="item-progress">{{ selectData.totalTaskNum }}</div>
</div>
<div class="progress-item">
<div class="item-title">必修进度</div>
<div class="item-progress">
<el-progress
:stroke-width="14"
:text-inside="true"
:percentage="requiredTaskCompletionRate"
></el-progress>
<div class="mask">
{{ selectData.requiredTaskCompletedNum }}/{{
selectData.requiredTaskNum
}}
</div>
</div>
<div class="item-text">{{ requiredTaskCompletionRate }}%</div>
</div>
<div class="progress-item">
<div class="item-title">选修进度</div>
<div class="item-progress">
<el-progress
:stroke-width="14"
:text-inside="true"
:percentage="electiveTaskCompletionRate"
></el-progress>
<div class="mask">
{{ selectData.electiveTaskCompletedNum }}/{{
selectData.electiveTaskNum
}}
</div>
</div>
<div class="item-text">{{ electiveTaskCompletionRate }}%</div>
</div>
<div class="progress-item">
<div class="item-title">总进度</div>
<div class="item-progress">
<el-progress
:stroke-width="14"
:text-inside="true"
:percentage="totalTaskCompletionRate"
></el-progress>
<div class="mask">
{{ selectData.totalTaskCompletedNum }}/{{
selectData.totalTaskNum
}}
</div>
</div>
<div class="item-text">{{ totalTaskCompletionRate }}%</div>
</div>
</div>
</div>
</div> </div>
</template> <div class="progress-title">学习进度</div>
<template v-else>
<el-empty :image-size="200"></el-empty> <div class="progress-content">
</template> <div class="f-j-b" style="margin-bottom: 10px">
</section> <div class="f-a-c">
<div style="font-weight: 700; font-size: 16px; color: #333333">
必修进度
</div>
<div style="font-size: 20px; color: #999999; margin-left: 12px">
{{ item.requiredTaskCompletedNum }}/{{ item.requiredTaskNum }}
</div>
</div>
<div style="font-weight: bold; font-size: 24px; color: #0077ec">
{{ requiredTaskCompletionRate(item) }}%
</div>
</div>
<el-progress
:stroke-width="8"
:show-text="false"
:percentage="requiredTaskCompletionRate(item)"
></el-progress>
</div>
<div class="progress-content">
<div class="f-j-b" style="margin-bottom: 10px">
<div class="f-a-c">
<div style="font-weight: 700; font-size: 16px; color: #333333">
选修进度
</div>
<div style="font-size: 20px; color: #999999; margin-left: 12px">
{{ item.electiveTaskCompletedNum }}/{{ item.electiveTaskNum }}
</div>
</div>
<div style="font-weight: bold; font-size: 24px; color: #0077ec">
{{ electiveTaskCompletionRate(item) }}%
</div>
</div>
<el-progress
:stroke-width="8"
:show-text="false"
:percentage="electiveTaskCompletionRate(item)"
></el-progress>
</div>
<div class="progress-content">
<div class="f-j-b" style="margin-bottom: 10px">
<div class="f-a-c">
<div style="font-weight: 700; font-size: 16px; color: #333333">
总进度
</div>
<div style="font-size: 20px; color: #999999; margin-left: 12px">
{{ item.totalTaskCompletedNum }}/{{ item.totalTaskNum }}
</div>
</div>
<div style="font-weight: bold; font-size: 24px; color: #0077ec">
{{ totalTaskCompletionRate(item) }}%
</div>
</div>
<el-progress
:stroke-width="8"
:show-text="false"
:percentage="totalTaskCompletionRate(item)"
></el-progress>
</div>
</div>
</div>
<div class="growth-right">
<div class="title">专业力必修</div>
<div
class="item-growth"
:class="selectData.id == item.id ? 'active' : ''"
v-for="item of list"
>
<div class="icon"></div>
<div>{{ item.growthName }}</div>
</div>
</div>
<template v-if="!list.length">
<el-empty :image-size="200"></el-empty>
</template>
</div> </div>
</template> </template>
<script> <script>
@@ -164,73 +136,65 @@ export default {
return { return {
selectData: {}, selectData: {},
list: [], list: [],
loading: false,
}; };
}, },
computed: { computed: {
// 完成进度 // 完成进度
totalTaskCompletionRate() { totalTaskCompletionRate() {
if ( return (item) => {
this.selectData.totalTaskCompletedNum && if (item.totalTaskCompletedNum && item.totalTaskNum) {
this.selectData.totalTaskNum let num = item.totalTaskCompletedNum / item.totalTaskNum;
) { num = num * 100;
let num = num = num.toFixed(0);
this.selectData.totalTaskCompletedNum / this.selectData.totalTaskNum; return Number(num);
num = num * 100; } else {
num = num.toFixed(0); return 0;
return Number(num); }
} else { };
return 0;
}
}, },
// 选修进度 // 选修进度
electiveTaskCompletionRate() { electiveTaskCompletionRate() {
if ( return (item) => {
this.selectData.electiveTaskCompletedNum && if (item.electiveTaskCompletedNum && item.electiveTaskNum) {
this.selectData.electiveTaskNum let num = item.electiveTaskCompletedNum / item.electiveTaskNum;
) { num = num * 100;
let num = num = num.toFixed(0);
this.selectData.electiveTaskCompletedNum / return Number(num);
this.selectData.electiveTaskNum; } else {
num = num * 100; return 0;
num = num.toFixed(0); }
return Number(num); };
} else {
return 0;
}
}, },
// 必修进度 // 必修进度
requiredTaskCompletionRate() { requiredTaskCompletionRate() {
if ( return (item) => {
this.selectData.requiredTaskCompletedNum && if (item.requiredTaskCompletedNum && item.requiredTaskNum) {
this.selectData.requiredTaskNum let num = item.requiredTaskCompletedNum / item.requiredTaskNum;
) { num = num * 100;
let num = num = num.toFixed(0);
this.selectData.requiredTaskCompletedNum / return Number(num);
this.selectData.requiredTaskNum; } else {
num = num * 100; return 0;
num = num.toFixed(0); }
return Number(num); };
} else {
return 0;
}
}, },
}, },
methods: { methods: {
select(item) { select(item) {},
this.selectData = item; jumpRouter(item) {
},
jumpRouter() {
let studentPath = process.env.VUE_APP_STUDENT_PATH; let studentPath = process.env.VUE_APP_STUDENT_PATH;
let params = encodeURIComponent("routerId=" + this.selectData.id); let params = encodeURIComponent("routerId=" + item.id);
this.$router.push( this.$router.push(
"/forward?to=" + studentPath + "/growthList&params=" + params "/forward?to=" + studentPath + "/growthList&params=" + params
); );
}, },
}, },
created() { created() {
this.loading = true;
listData().then((res) => { listData().then((res) => {
this.list = res.data; this.list = res.data;
this.selectData = this.list[0]; this.loading = false;
}); });
}, },
}; };
@@ -240,105 +204,130 @@ export default {
display: flex; display: flex;
align-items: center; align-items: center;
} }
.f-j-b {
display: flex;
justify-content: space-between;
}
.f-j-c { .f-j-c {
display: flex; display: flex;
justify-content: center; justify-content: center;
} }
.header { .growth {
display: flex; display: flex;
justify-content: space-between; .growth-left {
align-items: center; margin-right: 10px;
.header-title {
font-size: 24px; flex: 1;
} .growth-item {
.select-active { background: #ffffff;
font-size: 18px; padding: 30px 38px 66px 40px;
max-width: 300px; margin-bottom: 35px;
white-space: nowrap; /* 防止文本换行 */ .progress-title {
overflow: hidden; /* 隐藏溢出的内容 */ font-weight: 700;
text-overflow: ellipsis; /* 显示省略符号来代表被修剪的文本 */ font-size: 20px;
} color: #000000;
} margin: 28px 0 20px 0;
.container { }
.title { .progress-content {
display: flex; margin-bottom: 28px;
justify-content: space-between; }
margin-top: 30px; .tip-title {
padding: 25px 40px; font-weight: 700;
font-size: 18px; font-size: 20px;
color: rgb(51, 121, 251); color: #000000;
border: 1px solid #e2eefd; margin: 30px 0 10px 0;
border-bottom: none; }
background-image: linear-gradient(to bottom, #e2eefd, #ffffff); .tip-content {
} font-weight: 700;
.content { font-size: 14px;
border: 1px solid #e2eefd; color: #333333;
padding: 25px 50px; line-height: 40px;
.icon { }
width: 40px; .growth-nav {
height: 40px; display: flex;
margin-right: 10px; justify-content: space-between;
} align-items: center;
.tip-title, padding-bottom: 28px;
.progress-title { border-bottom: 2px solid #f5f5f5;
font-size: 24px; }
font-weight: 700; .growth-name {
} font-weight: 500;
.tip-text { font-size: 18px;
font-size: 18px; color: #0071ed;
line-height: 35px; }
margin-top: 20px; .growth-state {
} font-size: 14px;
.tip-text, margin-right: 18px;
.progress-text { }
padding-left: 50px; .growth-btn {
} display: flex;
.progress-text { justify-content: center;
.el-form-item { align-items: center;
margin-bottom: 0; width: 120px;
height: 36px;
background: #f2903d;
border-radius: 4px;
font-size: 16px;
color: #ffffff;
cursor: pointer;
} }
} }
.progress { .navbar {
margin-top: 40px;
}
.progress-item {
display: flex; display: flex;
align-items: center; align-items: center;
font-size: 14px; height: 130px;
margin-top: 20px; padding-left: 40px;
.item-title { margin-bottom: 10px;
width: 80px; color: #ffffff;
display: flex; background-image: url(../../assets/images/growth/growth-bg.png);
justify-content: flex-end; .nav-title {
margin-right: 20px; font-weight: 700;
font-size: 18px; font-size: 26px;
} }
.item-progress { .nav-total {
width: 400px; margin-left: 15%;
position: relative;
font-size: 18px;
.mask {
position: absolute;
left: 0;
right: 0;
bottom: 0;
top: 0;
display: flex;
justify-content: center;
align-items: center;
font-size: 12px;
}
} }
.item-text { .total-num {
color: #409eff; font-weight: bold;
margin-left: 8px; font-size: 30px;
}
::v-deep.el-progress-bar__innerText {
display: none;
} }
} }
.learning { }
padding: 45px 0; .growth-right {
width: 464px;
margin-bottom: 35px;
background-color: #ffffff;
padding: 35px 20px 20px 30px;
.title {
font-size: 18px;
color: #000000;
font-weight: 700;
margin-bottom: 35px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.item-growth {
display: flex;
align-items: center;
border-radius: 5px;
font-size: 14px;
color: #666666;
padding: 15px 20px 15px 8px;
}
.icon {
width: 4px;
height: 4px;
background: #4c5564;
border-radius: 50%;
margin-right: 10px;
}
.active {
background: #e3edfe;
color: #000;
.icon {
background: #0077ec;
}
} }
} }
} }

View File

@@ -124,11 +124,11 @@ module.exports = {
// 114.115.162.187 测试环境 // 114.115.162.187 测试环境
// 192.168.0.107 晋宇 // 192.168.0.107 晋宇
proxy: { proxy: {
"/professional": { "/growth": {
// target: 'http://192.168.16.195:32002', target: 'https://u-pre.boe.com',
target: 'http://192.168.150.97:32002',
changeOrigin: true, changeOrigin: true,
}, },
'/manageApi': { '/manageApi': {
// 目标代理服务器地址 // 目标代理服务器地址
target: 'https://u-pre.boe.com', target: 'https://u-pre.boe.com',