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"
content="根据您所在的组织、标准岗位、任职资格等级,已为您匹配专业力必修任务,抓紧时间学习吧~"
>
<i
slot="reference"
style="color: #a1a1a1"
class="el-icon-question"
></i>
</el-popover>
</div> </div>
<template v-if="list.length"> <div class="nav-total">
<el-dropdown trigger="click"> <div class="total-num">35</div>
<el-button type="primary"> <div class="total-text">已完成数量</div>
</div>
<div class="nav-total">
<div class="total-num">35</div>
<div class="total-text">未完成数量</div>
</div>
</div>
</div>
<div class="growth-item" v-for="item of list">
<div class="growth-nav">
<div class="growth-name">{{ item.growthName }}</div>
<div class="f-a-c"> <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">
<template v-if="list.length">
<div class="title">
<div style="font-size: 20px">
{{ selectData.growthName }}
</div>
<div style="display: flex; align-items: center">
<div style="display: flex">
<div style="font-size: 18px; color: #333">学习状态</div>
<div <div
style="font-size: 18px" class="growth-state"
:style="{ :style="{
color: color:
selectData.learningState === 0 item.learningState === 0
? '#fe9400' ? '#999999'
: selectData.learningState === 1 : item.learningState === 1
? '#6ba158' ? '#6ba158'
: '#0079ee', : '#F2903D',
}" }"
> >
{{ {{
selectData.learningState === 0 item.learningState === 0
? "未开始" ? "未开始"
: selectData.learningState === 1 : item.learningState === 1
? "已完成" ? "已完成"
: "进行中" : "进行中"
}} }}
</div> </div>
<div class="growth-btn" @click="jumpRouter(item)">去学习</div>
</div> </div>
<div class="learning f-j-c"> </div>
<el-button <div class="tip-title">说明</div>
style="width: 100px; margin-left: 16px" <div class="tip-content">
type="primary" {{ item.description || "暂无说明" }}
@click="jumpRouter" </div>
<div class="progress-title">学习进度</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.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>
</el-button> <div>{{ item.growthName }}</div>
</div> </div>
</div> </div>
</div> <template v-if="!list.length">
<div class="content">
<div class="tip">
<div class="tip-title f-a-c">
<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>
</template>
<template v-else>
<el-empty :image-size="200"></el-empty> <el-empty :image-size="200"></el-empty>
</template> </template>
</section>
</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;
) {
let num =
this.selectData.totalTaskCompletedNum / this.selectData.totalTaskNum;
num = num * 100; num = num * 100;
num = num.toFixed(0); num = num.toFixed(0);
return Number(num); return Number(num);
} else { } else {
return 0; return 0;
} }
};
}, },
// 选修进度 // 选修进度
electiveTaskCompletionRate() { electiveTaskCompletionRate() {
if ( return (item) => {
this.selectData.electiveTaskCompletedNum && if (item.electiveTaskCompletedNum && item.electiveTaskNum) {
this.selectData.electiveTaskNum let num = item.electiveTaskCompletedNum / item.electiveTaskNum;
) {
let num =
this.selectData.electiveTaskCompletedNum /
this.selectData.electiveTaskNum;
num = num * 100; num = num * 100;
num = num.toFixed(0); num = num.toFixed(0);
return Number(num); return Number(num);
} else { } else {
return 0; return 0;
} }
};
}, },
// 必修进度 // 必修进度
requiredTaskCompletionRate() { requiredTaskCompletionRate() {
if ( return (item) => {
this.selectData.requiredTaskCompletedNum && if (item.requiredTaskCompletedNum && item.requiredTaskNum) {
this.selectData.requiredTaskNum let num = item.requiredTaskCompletedNum / item.requiredTaskNum;
) {
let num =
this.selectData.requiredTaskCompletedNum /
this.selectData.requiredTaskNum;
num = num * 100; num = num * 100;
num = num.toFixed(0); num = num.toFixed(0);
return Number(num); return Number(num);
} else { } else {
return 0; 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;
.header-title {
font-size: 24px;
}
.select-active {
font-size: 18px;
max-width: 300px;
white-space: nowrap; /* 防止文本换行 */
overflow: hidden; /* 隐藏溢出的内容 */
text-overflow: ellipsis; /* 显示省略符号来代表被修剪的文本 */
}
}
.container {
.title {
display: flex;
justify-content: space-between;
margin-top: 30px;
padding: 25px 40px;
font-size: 18px;
color: rgb(51, 121, 251);
border: 1px solid #e2eefd;
border-bottom: none;
background-image: linear-gradient(to bottom, #e2eefd, #ffffff);
}
.content {
border: 1px solid #e2eefd;
padding: 25px 50px;
.icon {
width: 40px;
height: 40px;
margin-right: 10px; margin-right: 10px;
}
.tip-title, flex: 1;
.growth-item {
background: #ffffff;
padding: 30px 38px 66px 40px;
margin-bottom: 35px;
.progress-title { .progress-title {
font-size: 24px;
font-weight: 700; font-weight: 700;
font-size: 20px;
color: #000000;
margin: 28px 0 20px 0;
} }
.tip-text { .progress-content {
font-size: 18px; margin-bottom: 28px;
line-height: 35px;
margin-top: 20px;
} }
.tip-text, .tip-title {
.progress-text { font-weight: 700;
padding-left: 50px; font-size: 20px;
color: #000000;
margin: 30px 0 10px 0;
} }
.progress-text { .tip-content {
.el-form-item { font-weight: 700;
margin-bottom: 0;
}
}
.progress {
margin-top: 40px;
}
.progress-item {
display: flex;
align-items: center;
font-size: 14px; font-size: 14px;
margin-top: 20px; color: #333333;
.item-title { line-height: 40px;
width: 80px;
display: flex;
justify-content: flex-end;
margin-right: 20px;
font-size: 18px;
} }
.item-progress { .growth-nav {
width: 400px; display: flex;
position: relative; justify-content: space-between;
align-items: center;
padding-bottom: 28px;
border-bottom: 2px solid #f5f5f5;
}
.growth-name {
font-weight: 500;
font-size: 18px; font-size: 18px;
.mask { color: #0071ed;
position: absolute; }
left: 0; .growth-state {
right: 0; font-size: 14px;
bottom: 0; margin-right: 18px;
top: 0; }
.growth-btn {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
font-size: 12px; width: 120px;
height: 36px;
background: #f2903d;
border-radius: 4px;
font-size: 16px;
color: #ffffff;
cursor: pointer;
} }
} }
.item-text { .navbar {
color: #409eff; display: flex;
margin-left: 8px; align-items: center;
height: 130px;
padding-left: 40px;
margin-bottom: 10px;
color: #ffffff;
background-image: url(../../assets/images/growth/growth-bg.png);
.nav-title {
font-weight: 700;
font-size: 26px;
} }
::v-deep.el-progress-bar__innerText { .nav-total {
display: none; margin-left: 15%;
}
.total-num {
font-weight: bold;
font-size: 30px;
} }
} }
.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',