提交 7bd781a3 编写于 作者: 张平's avatar 张平

Merge branch 'dev-phase2-0512' into 'release'

教培二期需求  code reviewer: 张平

教培二期需求  code reviewer: 张平

See merge request !8
<template>
<!-- 专项合作列表 -->
<section class="coop-container">
<div
v-show="paramData.length && isShow"
v-for="(item , index) in paramData"
:key="index"
class="coop-item"
@click="coopDetails(item)"
>
<div class="coop-item-left">
<img :src="item.imgUrl" />
<span
v-if="item.projectStatusValue"
class="coop-container-status"
:style="{'background': cBgColor(item)}"
>{{item.projectStatusValue | statusText}}</span>
</div>
<div class="coop-item-right">
<span class="coop-item-right-title">{{item.name}}</span>
<span class="coop-item-right-other">{{item.level}} | {{item.credit}} | {{item.scope}}</span>
<!-- <span v-if="item.pType == 1"
class="coop-item-right-other"
>起止日期 {{item.oldTime}}</span>-->
<!-- <span v-else
class="coop-item-right-other"
>起止日期 {{item.projectBegintimeLong | formatTime}}-{{item.projectEndtimeLong | formatTime}}</span>-->
<span class="coop-item-right-other">{{item.startDate | formatTime('{y}.{m}.{d}')}}{{item.endDate | formatTime('{y}.{m}.{d}')}}</span>
</div>
</div>
<NoMoreContent v-show="paramData.length > 9"></NoMoreContent>
<NoContent v-show="!paramData.length && isShow" :tabNum="tabTo"></NoContent>
<!--<UpdateDialog :showGoUpdate="showGoUpdate" @goUpdateHandler="goUpdateHandler"></UpdateDialog>-->
<!-- <van-popup
v-model="showGoUpdate"
position="bottom"
:style="{ height: '4.427rem' }"
>
<div class="update-dialog-content">
<p class="title">该项目仅对河北石家庄市的用户开放</p>
<p class="update-btn v-hairline-top confirm-btn" @click="goUpdateHandler">确定</p>
<p class="update-btn v-hairline-top" @click="showGoUpdate = false">取消</p>
</div>
</van-popup>-->
</section>
</template>
<script>
import NoMoreContent from "@/components/business/no-more-content";
import NoContent from "@/components/business/no-content";
import UpdateDialog from "@/components/business/update-dialog";
import { setEventByModuleCode, deepCopy, getWebPageUrl } from "@/utils/index";
import { getAppVersion } from "@/utils";
import { mapActions, mapGetters } from "vuex";
import { Popup } from "vant";
export default {
name: "coop-list-item",
data() {
return {
bgColor: "green",
statusText: "进行中",
showGoUpdate: false
};
},
props: {
paramData: {
type: Array,
default: () => []
},
coopType: {
type: Number,
default: 1
},
isShow: {
type: Boolean,
default: false
},
tabTo: {
type: Number,
default: 1
},
userMobile: {
type: String,
default: ""
}
},
computed: {
...mapGetters(["userInfo"])
// cBgColor() {
// }
},
components: {
NoMoreContent,
NoContent,
UpdateDialog
},
mounted() {},
filters: {
statusText(status) {
if (status === 1) {
return "参加中";
} else if (status === 5) {
return "进行中";
} else if (status === 10) {
return "已结束";
} else {
return "已结束";
}
}
},
methods: {
...mapActions(["setProjectTabIndex"]),
cBgColor(item) {
if (item.projectStatusValue === 1) {
return "#5890DD";
} else if (item.projectStatusValue === 5) {
return "#449284";
} else if (item.projectStatusValue === 10) {
return "#373839";
} else {
return "#5890DD";
}
},
coopDetails(item) {
if (this.userMobile) {
let paramList = [
{
key: "pageUrl",
value: getWebPageUrl(`cme/#/coop?id=${item.id}&courseRequire=${item.courseRequire}`),
type: 4,
seqNo: 1
}
];
rocNative.dispatchEventByModuleCode({
modeCode: "M300",
jsonString: paramList
});
} else {
rocNative.gotoLogin();
}
this.$sendBuriedData({
component_tag: `210#210002#${item.id}#${item.name}` //'210#210002#0#'+item.projectName
});
// if (item.courseRequire == 1) { //对课程完成度有控制,需判断版本号
// let appVersion = getAppVersion(this.userInfo.appVersion);
// // alert('版本'+appVersion)
// let flag = appVersion < 315;
// if (flag === true) {
// // 小于315版本,添加去更新弹层
// this.showGoUpdate = true;
// }else {
// // 跳转到老项目
// if(this.tabTo != 3) {
// this.setProjectTabIndex(this.tabTo)
// }
// if (item.pType == 1) {
// this.goToPage(item);
// // 跳转到新项目
// } else {
// this.showModule(item, this.coopType, this.tabTo, item.courseRequire)
// }
// }
// } else {
// // 跳转到老项目
// if(this.tabTo != 3) {
// this.setProjectTabIndex(this.tabTo)
// }
// if (item.pType == 1) {
// this.goToPage(item);
// // 跳转到新项目
// } else {
// this.showModule(item, this.coopType, this.tabTo, item.courseRequire)
// // this.$router.push({
// // path: "/coop",
// // query: {
// // id: item.id,
// // coopType: this.coopType
// // }
// // });
// }
// }
},
// 跳转到新项目
// showModule(item, coopType, tabTo, courseRequire) {
// if (window.__isWeb) {
// if(item.parent === false) {
// this.$router.push({
// path: "/coop",
// query: {
// id: item.id,
// coopType: coopType,
// tabTo: tabTo,
// courseRequire: courseRequire,
// }
// });
// } else {
// this.$router.push({
// path: "/parent",
// query: {
// entryId: item.entryId,
// }
// });
// }
// return;
// }
// let pageUrl = "";
// let paramList = [];
// if(item.parent === false) {
// pageUrl = getWebPageUrl('coopv2/#/coop');
// paramList = [
// {
// key: "pageUrl",
// value: pageUrl + `?id=${item.id}&coopType=${coopType}&tabTo=${tabTo}&courseRequire=${courseRequire}`,
// type: 4,
// seqNo: 1
// }
// ]
// } else {
// pageUrl = getWebPageUrl('coopv2/#/parent');
// paramList = [
// {
// key: "pageUrl",
// value: pageUrl + `?entryId=${item.entryId}`,
// type: 4,
// seqNo: 1
// }
// ]
// }
// rocNative.dispatchEventByModuleCode({
// modeCode: "M300",
// jsonString: paramList
// });
// },
goToPage(item) {
let _this = this;
// 如果是湖北考试项目,则做相应权限判断 湖北的projectId=3
if (item.id == "3") {
if (!_this.userInfo.userToken) {
rocNative.gotoLogin();
return;
}
let param = {
type: 1,
token: _this.userInfo.userToken || _this.token,
setEntry: true
};
this.GET("portal/portalApp/role/3", param).then(res => {
if (res.code == "000000") {
// {
// "data": 0, // 0就是无权限,1有权限
// "code": "000000",
// "message": "成功"
// }
if (res.data == 0) {
rocNative.showNativeToast({
message: "您不属于该项目,无法查看"
});
return;
}
} else {
rocNative.gotoLogin();
return;
}
_this.goToPage1(item.contentListModel);
});
} else {
_this.goToPage1(item.contentListModel);
}
},
// 跳转
goToPage1(itemData) {
let paramList = deepCopy(setEventByModuleCode(itemData));
let isStrokeUrl =
paramList[0] &&
paramList[0]["value"] &&
paramList[0]["value"].indexOf("stroke.js") !== -1;
let strokeUrl = "";
if (isStrokeUrl) {
strokeUrl =
paramList[0]["value"] + "&token=" + this.userInfo.userToken ||
_this.token;
paramList[0]["value"] = strokeUrl;
}
rocNative.dispatchEventByModuleCode({
modeCode: itemData.appModuleInfo.code,
jsonString: paramList
});
// this.appBuryingPointEntrust({
// ...activity_action,
// labelId: itemData.id,
// functionCode: this.id == 1 ? "c_project" : "f_activity",
// actionCode: this.id == 1 ? "c_project_tab" : "c_activity_tab",
// labelValue: itemData.title,
// createdTime: new Date().getTime()
// });
},
goUpdateHandler() {
//去更新
rocNative.upGradeVersion();
this.showGoUpdate = false;
}
}
};
</script>
<style lang="scss" scoped>
@import "../../style/mixin";
.coop-container {
position: relative;
margin: px2rem(0px) px2rem(15px);
&-status {
position: absolute;
top: px2rem(6px);
left: 0;
// display: block;
width: px2rem(44px);
height: px2rem(18px);
line-height: px2rem(18px);
padding: px2rem(0px) 0 0 px2rem(4px);
background: rgba(88, 144, 221, 1);
color: #fff;
font-size: px2rem(11px);
border-top-right-radius: px2rem(3px);
border-bottom-right-radius: px2rem(3px);
}
}
.coop-item {
display: flex;
width: 100%;
height: px2rem(128px);
border-bottom: 1px solid #f0f0f0;
background: #fff;
flex-direction: row;
justify-content: center;
align-items: center;
img {
width: px2rem(115px);
height: px2rem(86px);
margin-right: px2rem(15px);
border-radius: px2rem(3px);
}
&-left {
display: flex;
position: relative;
top: 0;
}
&-right {
display: flex;
width: px2rem(215px);
flex-direction: column;
padding-top: px2rem(4px);
&-title {
height: px2rem(50px);
line-height: px2rem(20px);
font-size: px2rem(16px);
font-weight: 700;
color: rgba(55, 56, 57, 1);
}
&-other {
height: px2rem(21px);
line-height: px2rem(20px);
font-size: px2rem(13px);
font-weight: 400;
color: rgba(151, 152, 153, 1);
width: px2rem(210px);
overflow : hidden;
text-overflow: ellipsis;
white-space:nowrap;
}
}
}
.update-dialog-content {
padding: 0 px2rem(15px);
box-sizing: border-box;
.title {
text-align: center;
color: #373839;
font-size: px2rem(18px);
padding: px2rem(15px) 0;
line-height: px2rem(25px);
}
.update-btn {
text-align: center;
height: px2rem(55px);
line-height: px2rem(55px);
font-size: px2rem(16px);
color: #979899;
&.confirm-btn {
color: #449284;
}
&.v-hairline-top::after {
border-top-width: 1px;
}
}
}
</style>
<style>
.van-overlay {
background-color: rgba(0, 0, 0, 0.5);
}
</style>
...@@ -123,6 +123,19 @@ export default { ...@@ -123,6 +123,19 @@ export default {
} }
}, },
coopDetails(item) { coopDetails(item) {
// 临时添加
if(window.__isWeb) {
this.$router.push({
path: "/coop",
query: {
id: item.id,
coopType: this.coopType,
courseRequire: item.courseRequire
}
});
return;
}
if (this.userMobile) { if (this.userMobile) {
let paramList = [ let paramList = [
{ {
......
<template> <template>
<div class="basic-container"> <div class="basic-container">
<div class="basic-title">基本信息</div> <div class="basic-title">基本信息</div>
<div class="content"> <div v-if="projectNo" class="content">
<span>项目编号</span> <span>项目编号</span>
<span>{{projectNo}}</span> <span>{{projectNo}}</span>
</div> </div>
......
...@@ -40,7 +40,7 @@ export default { ...@@ -40,7 +40,7 @@ export default {
line-height: px2rem(50px); line-height: px2rem(50px);
width: 100%; width: 100%;
border-radius: px2rem(25px); border-radius: px2rem(25px);
font-size: 17px; font-size: px2rem(17px);
font-weight: 700; font-weight: 700;
color: #FFFFFF; color: #FFFFFF;
background: #449284; background: #449284;
......
<template>
<div class="exjumper-button-wrapper button-default" :class="type" @click="btnClick">
<span>{{btnText}}</span>
</div>
</template>
<script>
export default {
props: {
btnText: {
type: String,
default: '确定'
},
type: {
type: String,
default: 'primary'
}
},
data() {
return {
}
},
methods: {
btnClick() {
if(this.type == 'disabled') return;
this.$emit('btnClick');
}
},
}
</script>
<style lang="scss" scoped>
@import "../../style/mixin";
.exjumper-button-wrapper {
position: fixed;
left: 0;
bottom: 0;
right: 0;
z-index: 1000;
font-size: px2rem(14px);
margin: px2rem(20px) px2rem(15px);
text-align: center;
&.button-default {
span {
display: block;
height: px2rem(50px);
line-height: px2rem(50px);
width: 100%;
border-radius: px2rem(25px);
font-size: px2rem(17px);
font-weight: 700;
color: #FFFFFF;
background: #449284;
}
}
&.primary {
span {
color: #FFFFFF;
background: #449284;
}
}
&.disabled {
span {
color: rgba(255, 255, 255, 0.95);
background: #C7C8C9;
}
}
}
</style>
\ No newline at end of file
<template>
<div class="exjumper-dialog-wrraper" v-if="isShowDialog">
<div class="dialog-mask"></div>
<div class="dialog-container">
<div class="title" v-html="title"></div>
<div class="dialog-content">{{content}}</div>
<div v-show="needSubContent" class="dialog-sub-content" v-html="subContent"></div>
<div class="dialog-footer v-hairline-top">
<span :class="{'single-btn': isSingle}" @click.stop.prevent="handlerAction(1)">{{cancleBtnText}}</span>
<span v-show="!isSingle" class="confirm-btn v-hairline-left" @click.stop.prevent="handlerAction(2)">{{confirmBtnText}}</span>
</div>
</div>
</div>
</template>
<script>
export default {
name: "common-dialog",
data() {
return {
};
},
props: {
title: {
type: String,
default: '即将打开<br/>“中华医学教育在线”平台'
},
content: {
type: String,
default: ''
},
needSubContent: {
type: Boolean,
default: false
},
subContent: {
type: String,
default: ''
},
cancleBtnText: {
type: String,
default: '取消'
},
confirmBtnText: {
type: String,
default: '确定'
},
isShowDialog: {
type: Boolean,
default: false
},
isSingle: {
type: Boolean,
default: false
},
},
methods: {
handlerAction(type) {
this.$emit("handlerAction", type);
}
}
};
</script>
<style lang="scss" scoped>
@import "../../style/mixin";
.exjumper-dialog-wrraper {
position: fixed;
top: 0;
left: 0;
bottom: 0;
width: 100%;
height: 100%;
z-index: 2019;
.dialog-mask {
position: absolute;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
z-index: 2020;
}
.dialog-container {
z-index: 2021;
position: absolute;
top: 50%;
left: 50%;
overflow: hidden;
width: px2rem(300px);
font-size: px2rem(18px);
-webkit-transition: 0.3s;
transition: 0.3s;
border-radius: px2rem(4px);
background-color: #fff;
-webkit-transform: translate3d(-50%, -50%, 0);
transform: translate3d(-50%, -50%, 0);
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
.title {
margin-top: px2rem(30px);
text-align: center;
font-size: px2rem(18px);
font-weight: 700;
color: #373839;
}
.dialog-content {
// margin: px2rem(30px) px2rem(22px);
margin: px2rem(20px) px2rem(30px) px2rem(30px);
text-align: left;
font-size: px2rem(14px);
font-weight: 400;
color: #373839;
}
.dialog-sub-content {
margin: px2rem(-16px) px2rem(30px) px2rem(20px);
// margin: px2rem(-16px) px2rem(22px) px2rem(30px);
text-align: left;
font-size: px2rem(14px);
line-height: px2rem(24px);
font-weight: 400;
color: #979899;
}
.dialog-footer {
height: px2rem(50px);
display: flex;
align-items: center;
&.v-hairline-top::after {
border-top-width: 1px;
}
span {
display: inline-block;
// width: 50%;
flex: 1;
height: px2rem(50px);
line-height: px2rem(50px);
font-size: px2rem(17px);
text-align: center;
color: #979899;
&.v-hairline-left::after {
border-left-width: 1px;
}
&.confirm-btn {
color: #449284;
}
&.single-btn {
color: #449284;
}
}
}
}
[class*="v-hairline"] {
position: relative;
&::after {
content: " ";
position: absolute;
pointer-events: none;
box-sizing: border-box;
top: -50%;
left: -50%;
right: -50%;
bottom: -50%;
-webkit-transform: scale(0.5);
transform: scale(0.5);
border: 0 solid #f0f1f2;
}
}
}
</style>
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
</div> </div>
</div> </div>
<div class="content"> <div class="content">
<div class="text">{{leaderText}}</div> <div class="text" v-html="leaderText"></div>
<div v-if="leaderText.length > 70" class="desc" @click="allText"> <div v-if="leaderText.length > 70" class="desc" @click="allText">
<span>{{btnText}}</span> <span>{{btnText}}</span>
<img v-if="!allTextFlag" src="../../images/down.png" /> <img v-if="!allTextFlag" src="../../images/down.png" />
......
...@@ -26,8 +26,8 @@ ...@@ -26,8 +26,8 @@
left: 0; left: 0;
bottom: 0; bottom: 0;
right: 0; right: 0;
z-index: 200; z-index: 1000;
background: rgba(0, 0, 0, 0); background: rgba(0, 0, 0, 0.5);
} }
svg { svg {
position: fixed; position: fixed;
......
...@@ -9,7 +9,7 @@ export const envConfig = { ...@@ -9,7 +9,7 @@ export const envConfig = {
// baseUrl: 'http://192.168.140.14:10201/', // baseUrl: 'http://192.168.140.14:10201/',
apiUrl: 'https://dev-api.yunqueyi.com/', apiUrl: 'https://dev-api.yunqueyi.com/',
webPageUrl: 'https://dev-phome.yunqueyi.com/', webPageUrl: 'https://dev-phome.yunqueyi.com/',
baseUrl: 'https://test1-sc.yunqueyi.com/', baseUrl: 'https://dev-sc.yunqueyi.com/',
// baseUrl: 'https://test1-sc.yunqueyi.com/', // baseUrl: 'https://test1-sc.yunqueyi.com/',
// apiUrl: 'https://test1-api.yunqueyi.com/', // apiUrl: 'https://test1-api.yunqueyi.com/',
......
...@@ -17,7 +17,7 @@ service.interceptors.request.use(config => { ...@@ -17,7 +17,7 @@ service.interceptors.request.use(config => {
if(config.data.token){ if(config.data.token){
config.headers['token'] = config.data.token || '0F32D60C3D7042158BCF1FB574E482BE' config.headers['token'] = config.data.token || '0F32D60C3D7042158BCF1FB574E482BE'
if( process.env.BUILD_ENV == "development" ){ // 本地开发环境 if( process.env.BUILD_ENV == "development" ){ // 本地开发环境
config.headers['token'] = config.data.token || 'DA2A4E43343E47DEB4C4B708288D02D4' || 'F5CE3BAEC4934864B1022C1C4D39EB40'; config.headers['token'] = config.data.token || '7A15D95AC2AF4C7C8FEEE23E7FF6EF34';
} }
// delete config.data.token; // delete config.data.token;
} }
......
...@@ -13,7 +13,7 @@ module.exports = { ...@@ -13,7 +13,7 @@ module.exports = {
query = this.$route.query query = this.$route.query
} }
// alert('this.token' + this.token) // alert('this.token' + this.token)
this.token = this.getUrlKey('token') || (query && query.token) || '9B62E5874DA94979A54DB3E9DFC1443F' this.token = this.getUrlKey('token') || (query && query.token) || '413649EAAF9D4C719DA183FB49E1911F'
}, },
mounted() { mounted() {
......
...@@ -10,6 +10,8 @@ ...@@ -10,6 +10,8 @@
borderStyle="1px solid #fff" borderStyle="1px solid #fff"
></CommonNavbar> ></CommonNavbar>
<section class="page-content"> <section class="page-content">
<!-- <button @click="jumpToExamAction" style="margin: 20px;font-size:20px;text-align:center;padding:10px;border-radius:10px;">测试按钮1</button>
<button @click="jumpToExamAction2" style="margin: 20px;font-size:20px;text-align:center;padding:10px;border-radius:10px;">测试按钮2</button> -->
<!-- {{token}} --> <!-- {{token}} -->
<table class="page-content-table"> <table class="page-content-table">
<tr> <tr>
...@@ -131,7 +133,54 @@ export default { ...@@ -131,7 +133,54 @@ export default {
}, },
methods: { methods: {
// 跳转到第三方考试页面
//
jumpToExamAction() {
let paramList = [
{
key: "pageUrl",
value: 'http://cmeonline.cma-cmc.com.cn/cms/weixinCourseDetail.htm?courseId=a245b2060ac0495cae440de859321b91&openCourseId=2d9b152a85dc4833892aeaa713362b9f',
type: 4,
seqNo: 1
},
// 此字段不配置,则用原来的逻辑
{
key: "needCache",
value: '1', // 0不缓存,其它值都做缓存
type: 4,
seqNo: 1
}
];
rocNative.dispatchEventByModuleCode({
modeCode: "M300",
jsonString: paramList
});
},
jumpToExamAction2() {
let paramList = [
{
key: "pageUrl",
value: 'http://cmeonline.cma-cmc.com.cn/cms/weixinCourseDetail.htm?courseId=0aeee9f7712b4543ab8eadb0571a78a7&openCourseId=e9e124392d3f4e2494d46e8f990b085e',
type: 4,
seqNo: 1
},
// 此字段不配置,则用原来的逻辑
{
key: "needCache",
value: '1', // 0不缓存,其它值都做缓存
type: 4,
seqNo: 1
}
];
rocNative.dispatchEventByModuleCode({
modeCode: "M300",
jsonString: paramList
});
},
...mapActions(["setUserInfo"]), ...mapActions(["setUserInfo"]),
//获取版本号 //获取版本号
getUserInfo() { getUserInfo() {
rocNative.getUserInfo({ rocNative.getUserInfo({
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
borderStyle="0px solid #fff" borderStyle="0px solid #fff"
:backMethod="from" :backMethod="from"
></CommonNavbar> ></CommonNavbar>
<div class="page-content list-container"> <div class="page-content list-container">
<!-- banner图片 --> <!-- banner图片 -->
<div v-if="bannerType == 1" class="page-content-img-container"> <div v-if="bannerType == 1" class="page-content-img-container">
<img class="banner-img" :src="attachmentUrl" /> <img class="banner-img" :src="attachmentUrl" />
...@@ -32,25 +32,30 @@ ...@@ -32,25 +32,30 @@
:subject="project.subject" :subject="project.subject"
/> />
<!-- 步骤条 --> <!-- 步骤条 -->
<div ref="cmeStepRef"> <div v-if="project.cmeType != 2">
<CmeStep <CmeStep
:currentProgress="project.currentProgress" :currentProgress="project.currentProgress"
:studyProgress="project.studyProgress" :studyProgress="project.studyProgress"
:credit="project.credit" :credit="project.credit"
:creditId="project.creditId" :creditId="project.creditId"
:certificateUrl="project.certificateUrl" :certificateUrl="project.certificateUrl"
:inScope="project.inScope" :inScope="project.inScope"
:projectId="projectId" :projectId="projectId"
:certificateId="project.certificateId" :certificateId="project.certificateId"
@applicationCredit="applicationCredit" @applicationCredit="applicationCredit"
/> />
</div> </div>
<!-- 简介和目录 --> <!-- 简介和目录 -->
<div class="intro-catalogue-container"> <div class="intro-catalogue-container">
<div id="content-title" class="title" :class="{'fixed-title-1': (fixedFlag && !isWeb), 'fixed-title-2': (fixedFlag && isWeb)}"> <div
id="content-title"
class="title"
:class="{'fixed-title-1': (fixedFlag && !isWeb), 'fixed-title-2': (fixedFlag && isWeb)}"
>
<span :class="{'focus': tabFlag}" @click="jumpIntro">简介</span> <span :class="{'focus': tabFlag}" @click="jumpIntro">简介</span>
<span :class="{'focus': !tabFlag}" @click="jumpCatalogue">目录</span> <span :class="{'focus': !tabFlag}" @click="jumpCatalogue">目录</span>
</div> </div>
<div v-show="fixedFlag" class="fixed-flag-height"></div>
<div id="intro-content" class="intro-content"> <div id="intro-content" class="intro-content">
<BasicInfo <BasicInfo
:projectNo="project.projectNo" :projectNo="project.projectNo"
...@@ -66,11 +71,12 @@ ...@@ -66,11 +71,12 @@
<LearnKnow :mustKnow="project.mustKnow"></LearnKnow> <LearnKnow :mustKnow="project.mustKnow"></LearnKnow>
<CommonSpliteLine></CommonSpliteLine> <CommonSpliteLine></CommonSpliteLine>
<ItemIntro :textContent="textContent" @itemIntroText="itemIntroText"></ItemIntro> <ItemIntro :textContent="textContent" @itemIntroText="itemIntroText"></ItemIntro>
<ItemLeader <ItemLeader v-if="projectLeader"
:projectLeader="projectLeader" :projectLeader="projectLeader"
:leaderText="leaderText" :leaderText="leaderText"
@changeLeaderText="changeLeaderText"/> @changeLeaderText="changeLeaderText"
<TeacterIntro :doctorList="doctorList"></TeacterIntro> />
<TeacterIntro v-if="doctorList.length" :doctorList="doctorList"></TeacterIntro>
</div> </div>
<CommonSpliteLine></CommonSpliteLine> <CommonSpliteLine></CommonSpliteLine>
<div id="catalogue-content" class="catalogue-content"> <div id="catalogue-content" class="catalogue-content">
...@@ -93,7 +99,23 @@ ...@@ -93,7 +99,23 @@
:confirmBtnText="confirmBtnText" :confirmBtnText="confirmBtnText"
:content="dialogContent" :content="dialogContent"
@handlerAction="handlerAction" @handlerAction="handlerAction"
/>
<!-- 弹框 -->
<ExjumperDialog
:isShowDialog="isShowEJDialog"
isSingle
needSubContent
content="确保您已经从云鹊平台购买优惠学习卡。跳转后请申请考试、激活学习卡,考试通过后申请证书。"
subContent="学分由中华医学电子音像出版社授予,如有问题可致电400-920-8899云鹊医客服咨询。"
cancleBtnText="我知道了"
@handlerAction="handlerEJAction"
/> />
<ExjumperButton
@btnClick="beforeJumpToExam"
v-if="project.cmeType == 2 && project.inScope !== 0"
:btnText="project.currentProgress > 1 ? '参加考试' : '学完全部课程,可参加考试'"
:type="project.currentProgress > 1 ? 'primary' : 'disabled'"></ExjumperButton>
<div v-if="project.cmeType == 2 && project.inScope !== 0" style="padding-top: 30px"></div>
</div> </div>
</template> </template>
<script> <script>
...@@ -114,10 +136,17 @@ import ItemIntro from "@/components/cme/item-intro"; ...@@ -114,10 +136,17 @@ import ItemIntro from "@/components/cme/item-intro";
import ItemLeader from "@/components/cme/item-leader"; import ItemLeader from "@/components/cme/item-leader";
import TeacterIntro from "@/components/cme/teacter-intro"; import TeacterIntro from "@/components/cme/teacter-intro";
import CommonDialog from "@/components/cme/common-dialog"; import CommonDialog from "@/components/cme/common-dialog";
import ExjumperDialog from "@/components/cme/exjumper-dialog";
import ExjumperButton from "@/components/cme/exjumper-button";
import { getWebPageUrl, gotoPage } from "@/utils/index"; import { getWebPageUrl, gotoPage } from "@/utils/index";
import { mapGetters, mapActions } from "vuex"; import { mapGetters, mapActions } from "vuex";
import vueFilters from "@/utils/filter"; import vueFilters from "@/utils/filter";
import { Toast } from 'vant';
let cataOffsetTop = 0;
let intorOffsetTop = 0;
let titleOffsetHeight = 50;
export default { export default {
data() { data() {
...@@ -134,6 +163,7 @@ export default { ...@@ -134,6 +163,7 @@ export default {
confirmBtnText: "", // 弹框按钮 confirmBtnText: "", // 弹框按钮
cancleBtnText: "", cancleBtnText: "",
isShowDialog: false, isShowDialog: false,
isShowEJDialog: false,
tabFlag: true, // 显示目录还是简介 tabFlag: true, // 显示目录还是简介
fixedFlag: false, // 目录和简介是否固定 fixedFlag: false, // 目录和简介是否固定
project: { project: {
...@@ -157,7 +187,16 @@ export default { ...@@ -157,7 +187,16 @@ export default {
certificateUrl: "", // 证书url certificateUrl: "", // 证书url
inScope: 0, // 是否在范围内判断 inScope: 0, // 是否在范围内判断
projectCredit: "", // 学分 projectCredit: "", // 学分
certificateId: "0" certificateId: "0",
cmeType: 1, // 1: 自营项目; 2: 中华医学会二类
examBtnUrl: '', // 考试按钮跳转连接
firstIntoExam: false, // true弹框,是否首次进入考试,用于首次跳转弹框提示,只跟项目和人员有关
jumpToContents: false, // 是否跳转到目录
// cmeType=2时不显示进度,
// projectNo为空时不显示项目编号,
// projectLeader为空时不显示项目负责人,
// inScope=0时考试按钮不显示,
// currentProgress>1时考试按钮显示并可用
}, },
projectLeader: {}, projectLeader: {},
doctorList: [], doctorList: [],
...@@ -189,7 +228,10 @@ export default { ...@@ -189,7 +228,10 @@ export default {
actionList: [], actionList: [],
detailNum: 0, detailNum: 0,
courseRequire: 0, courseRequire: 0,
clientType: 0 clientType: 0,
// currentProgress>1时考试按钮显示并可用
btnType: 'primary', // primary: 可跳转时(currentProgress = 1); disabled: 不可跳转时
btnText: '学完全部课程,可参加考试' // 参加考试(currentProgress = 1); 或者学完全部课程,可参加考试
}; };
}, },
components: { components: {
...@@ -205,11 +247,15 @@ export default { ...@@ -205,11 +247,15 @@ export default {
ItemIntro, ItemIntro,
ItemLeader, ItemLeader,
TeacterIntro, TeacterIntro,
CommonDialog CommonDialog,
ExjumperButton,
ExjumperDialog
}, },
computed: { computed: {
...mapGetters(["userInfo"]) ...mapGetters(["userInfo"]),
}, },
created() { created() {
let _this = this; let _this = this;
this.from = this.$route.query.from || this.from || "native"; this.from = this.$route.query.from || this.from || "native";
...@@ -217,6 +263,8 @@ export default { ...@@ -217,6 +263,8 @@ export default {
this.courseRequire = this.$route.query.courseRequire; this.courseRequire = this.$route.query.courseRequire;
window.__getUserInfo64Comp = function(param) { window.__getUserInfo64Comp = function(param) {
// appVersion 安卓 3.2.2 iOS
console.log('__getUserInfo64Comp', param);
_this.token = param.userToken; _this.token = param.userToken;
_this.setUserInfo(param); _this.setUserInfo(param);
_this.checkToken(); _this.checkToken();
...@@ -239,6 +287,7 @@ export default { ...@@ -239,6 +287,7 @@ export default {
// action: "打开页面", // action: "打开页面",
component_tag: `211#0#${this.projectId}#0` component_tag: `211#0#${this.projectId}#0`
}); });
}, },
mounted() { mounted() {
window.addEventListener("scroll", this.scrollFun); window.addEventListener("scroll", this.scrollFun);
...@@ -249,28 +298,75 @@ export default { ...@@ -249,28 +298,75 @@ export default {
}, },
methods: { methods: {
...mapActions(["setUserInfo"]), ...mapActions(["setUserInfo"]),
// 点击“参与考试”
beforeJumpToExam() {
// 如果是首次,则弹出弹框
if(this.project.firstIntoExam) {
this.isShowEJDialog = true;
} else {
this.jumpToExamAction();
}
},
// 第一次跳转弹框,点击时调用相应接口
handlerEJAction() {
this.isShowEJDialog = false;
this.jumpToExamAction();
this.firstIntoExamAction();
},
// 跳转到第三方考试页面
jumpToExamAction() {
// 判断版本号,如果小于3.4.0,则只做提示
let appVersion = this.userInfo.appVersion;
let appVersionNum = appVersion.split('.').join('');
if(appVersionNum < 340) {
Toast('请您下载新版本App');
return;
}
let paramList = [
{
key: "pageUrl",
value: this.project.examBtnUrl,
type: 4,
seqNo: 1
},
// 此字段不配置,则用原来的逻辑
{
key: "needCache",
value: '1', // 0不缓存,其它值都做缓存
type: 4,
seqNo: 1
}
];
rocNative.dispatchEventByModuleCode({
modeCode: "M300",
jsonString: paramList
});
},
// 首次进入考试时记录(点击‘我知道了’时调用)
firstIntoExamAction() {
let _this = this;
let param = {
token: _this.userInfo.userToken || this.token,
setEntry: true
};
this.NEW_POST(`cme/project/${_this.projectId}/firstIntoExam`, param).then(res => {
if (res.code == "000000") {
this.project.firstIntoExam = false;
}
});
},
//获取用户信息 //获取用户信息
getUserInfo() { getUserInfo() {
rocNative.getUserInfo({ rocNative.getUserInfo({
__funcName: "__getUserInfo64Comp" __funcName: "__getUserInfo64Comp"
}); });
}, },
scrollFun() {
let scrollTop =
document.body.scrollTop || document.documentElement.scrollTop;
const catalogue = document.getElementById("catalogue-content");
const h = catalogue.offsetTop - 600;
if (scrollTop > 20) {
this.isBlack = true;
this.bgColor = "#fff";
} else {
this.isBlack = false;
this.bgColor = "none";
}
this.fixedFlag = scrollTop > 300 ? true : false;
this.tabFlag = scrollTop > h ? false : true;
},
// token是否失效校验 // token是否失效校验
checkToken() { checkToken() {
let _this = this; let _this = this;
...@@ -291,6 +387,7 @@ export default { ...@@ -291,6 +387,7 @@ export default {
} }
}); });
}, },
//(判断是否加入机构,是否为认证用户,是否在申请范围内) //(判断是否加入机构,是否为认证用户,是否在申请范围内)
permission() { permission() {
let _this = this; let _this = this;
...@@ -312,6 +409,7 @@ export default { ...@@ -312,6 +409,7 @@ export default {
} }
}); });
}, },
// 立即申请学分 // 立即申请学分
applicationCredit() { applicationCredit() {
let _this = this; let _this = this;
...@@ -334,7 +432,7 @@ export default { ...@@ -334,7 +432,7 @@ export default {
permCode: "009014" permCode: "009014"
}; };
rocNative.checkPermissions(params); rocNative.checkPermissions(params);
} }
// else if (res.code == "219012") { // else if (res.code == "219012") {
// this.dialogContent = res.message; // this.dialogContent = res.message;
// this.cancleBtnText = "我知道了"; // this.cancleBtnText = "我知道了";
...@@ -349,21 +447,59 @@ export default { ...@@ -349,21 +447,59 @@ export default {
} }
}); });
}, },
// 弹框按钮事件 // 弹框按钮事件
handlerAction(data) { handlerAction(data) {
this.isShowDialog = false; this.isShowDialog = false;
}, },
scrollFun() {
let scrollTop =
document.body.scrollTop || document.documentElement.scrollTop;
let h = intorOffsetTop - 135
// 显示头部导航
if (scrollTop > 20) {
this.isBlack = true;
this.bgColor = "#fff";
} else {
this.isBlack = false;
this.bgColor = "none";
}
if(window.__isWeb) {
h = intorOffsetTop - 75;
} else if(window.__isIOS) {
h = intorOffsetTop - 140;
}
// 如果滚动高度大于简介头部(并减去tab高度),则进行固定
if(scrollTop > h) {
this.fixedFlag = true;
} else {
this.fixedFlag = false;
}
// 如果滚动高度大于
if(scrollTop > cataOffsetTop - 600) {
this.tabFlag = false;
} else {
this.tabFlag = true;
}
},
// 锚点到简介 // 锚点到简介
jumpIntro() { jumpIntro() {
this.tabFlag = true; if(!this.tabFlag) {
this.fixedFlag = true; this.tabFlag = true;
const intro = document.getElementById("intro-content"); }
const title = document.getElementById("content-title"); if(!this.fixedFlag) {
this.fixedFlag = true;
}
let h; let h;
if(this.isWeb) { if (this.isWeb) {
h = intro.offsetTop - title.offsetHeight; h = intorOffsetTop - 30 - titleOffsetHeight;
}else { } else {
h = intro.offsetTop - 75 - title.offsetHeight; h = intorOffsetTop - 85 - titleOffsetHeight;
} }
window.scrollTo(0, h); window.scrollTo(0, h);
this.isBlack = true; this.isBlack = true;
...@@ -372,17 +508,20 @@ export default { ...@@ -372,17 +508,20 @@ export default {
component_tag: `211#211007#${this.projectId}` component_tag: `211#211007#${this.projectId}`
}); });
}, },
// 锚点到目录 // 锚点到目录
jumpCatalogue() { jumpCatalogue() {
this.tabFlag = false; if(this.tabFlag) {
this.fixedFlag = true; this.tabFlag = false;
const catalogue = document.getElementById("catalogue-content"); }
const title = document.getElementById("content-title"); if(!this.fixedFlag) {
this.fixedFlag = true;
}
let h; let h;
if(this.isWeb) { if (this.isWeb) {
h = catalogue.offsetTop - title.offsetHeight; h = cataOffsetTop - titleOffsetHeight;
}else { } else {
h = catalogue.offsetTop - 85 - title.offsetHeight; h = cataOffsetTop - 100;
} }
window.scrollTo(0, h); window.scrollTo(0, h);
this.isBlack = true; this.isBlack = true;
...@@ -391,6 +530,7 @@ export default { ...@@ -391,6 +530,7 @@ export default {
component_tag: `211#211008#${this.projectId}` component_tag: `211#211008#${this.projectId}`
}); });
}, },
// 获取项目详情 // 获取项目详情
getProjectParticularsV2() { getProjectParticularsV2() {
let _this = this; let _this = this;
...@@ -398,7 +538,7 @@ export default { ...@@ -398,7 +538,7 @@ export default {
token: _this.userInfo.userToken || this.token, token: _this.userInfo.userToken || this.token,
setEntry: true setEntry: true
}; };
// _this.showLoading = true; _this.showLoading = true;
this.NEW_GET(`cme/project/${_this.projectId}/info`, param).then(res => { this.NEW_GET(`cme/project/${_this.projectId}/info`, param).then(res => {
if (res.code == "000000") { if (res.code == "000000") {
// 先设置视频URL再显示视频组件 ------------ BEGIN // 先设置视频URL再显示视频组件 ------------ BEGIN
...@@ -414,14 +554,23 @@ export default { ...@@ -414,14 +554,23 @@ export default {
// 先设置视频URL再显示视频组件 ------------ END // 先设置视频URL再显示视频组件 ------------ END
_this.project = res.data; _this.project = res.data;
if(_this.project.projectIntro) { if (_this.project.projectIntro) {
_this.textContent = _this.project.projectIntro.length > 70 ? _this.project.projectIntro.slice(0, 70) + "..." : this.project.projectIntro; _this.textContent =
_this.project.projectIntro.length > 70
? _this.project.projectIntro.slice(0, 70) + "..."
: this.project.projectIntro;
} }
_this.project.mustKnow = _this.project.mustKnow.replace(/(\r\n)|\r|\n/g,"<br>"); _this.project.mustKnow = _this.project.mustKnow.replace(
/(\r\n)|\r|\n/g,
"<br>"
);
_this.projectLeader = res.data.projectLeader || {}; _this.projectLeader = res.data.projectLeader;
if(_this.projectLeader.info) { if (_this.projectLeader && _this.projectLeader.info) {
_this.leaderText = _this.projectLeader.info.length > 70 ? _this.projectLeader.info.slice(0, 70) + "..." : this.projectLeader.info; _this.leaderText =
_this.projectLeader.info.length > 70
? _this.projectLeader.info.slice(0, 70) + "..."
: this.projectLeader.info;
} }
_this.doctorList = res.data.doctorList; _this.doctorList = res.data.doctorList;
...@@ -430,30 +579,45 @@ export default { ...@@ -430,30 +579,45 @@ export default {
res.data.projectComponentDTOS res.data.projectComponentDTOS
); );
if(!_this.isWeb && !_this.premissionFlag) { if (!_this.isWeb && !_this.premissionFlag) {
_this.premissionFlag = true; _this.premissionFlag = true;
_this.permission(); // 提示是否有机构和在申请范围内 _this.permission(); // 提示是否有机构和在申请范围内
} }
// TODO Add by Anndy Yang // TODO Add by Anndy Yang
if(_this.project.currentProgress == 2) { if (_this.project.currentProgress == 2) {
this.$nextTick( () => { this.$nextTick(() => {
window.scrollTo(0, 0); window.scrollTo(0, 0);
// window.scrollTo(0, this.$refs.cmeStepRef.offsetTop - 100); });
// window.scrollTo(0, this.$refs.cmeStepRef.offsetTop - 100);
})
} }
setTimeout( () => {
cataOffsetTop = document.getElementById("catalogue-content").offsetTop;
intorOffsetTop = document.getElementById("intro-content").offsetTop;
console.log('getProjectParticularsV2', cataOffsetTop, intorOffsetTop);
// 直接跳转
if(_this.project.jumpToContents) {
setTimeout(() => {
this.jumpCatalogue();
}, 200);
}
}, 200);
setTimeout(() => {
_this.showLoading = false;
}, 800);
} }
//_this.showLoading = false;
}); });
}, },
// 项目负责人--详情(收起) // 项目负责人--详情(收起)
changeLeaderText(data) { changeLeaderText(data) {
let _this = this; let _this = this;
if(_this.projectLeader.info) { if (_this.projectLeader.info) {
if(!data.allTextFlag) { if (!data.allTextFlag) {
_this.leaderText = _this.projectLeader.info.length > 70 ? _this.projectLeader.info.slice(0, 70) + "..." : this.projectLeader.info; _this.leaderText =
}else { _this.projectLeader.info.length > 70
? _this.projectLeader.info.slice(0, 70) + "..."
: this.projectLeader.info;
} else {
_this.leaderText = _this.projectLeader.info; _this.leaderText = _this.projectLeader.info;
} }
} }
...@@ -461,10 +625,13 @@ export default { ...@@ -461,10 +625,13 @@ export default {
// 项目介绍 // 项目介绍
itemIntroText(data) { itemIntroText(data) {
let _this = this; let _this = this;
if(_this.project.projectIntro) { if (_this.project.projectIntro) {
if(!data.allTextFlag) { if (!data.allTextFlag) {
_this.textContent = _this.project.projectIntro.length > 70 ? _this.project.projectIntro.slice(0, 70) + "..." : this.project.projectIntro; _this.textContent =
}else { _this.project.projectIntro.length > 70
? _this.project.projectIntro.slice(0, 70) + "..."
: this.project.projectIntro;
} else {
_this.textContent = _this.project.projectIntro; _this.textContent = _this.project.projectIntro;
} }
} }
...@@ -520,86 +687,6 @@ export default { ...@@ -520,86 +687,6 @@ export default {
return 1; return 1;
} }
} }
// 获取单个模块信息
// getComponentInfoById(componentId) {
// let _this = this;
// let param = {
// componentId: componentId,
// token: _this.userInfo.userToken,
// setEntry: true
// };
// this.GET("portal/portalApp/component", param).then(res => {
// if (res.code == "000000") {
// _this.attachmentUrl = res.data.imageUrl;
// _this.projectIntro = res.data.introduce;
// _this.projectName = res.data.name;
// }
// });
// },
// 获取单个项目信息
// getCoopInfo(projectId) {
// let _this = this;
// let param = {
// portalProjectId: projectId,
// token: _this.userInfo.userToken,
// setEntry: true
// };
// this.GET("portal/portalApp/queryProjectParticulars", param).then(res => {
// if (res.code == "000000") {
// // 先设置视频URL再显示视频组件 ------------ BEGIN
// if (res.data.attachmentType == 2) {
// _this.videoOptions.mp4 = res.data.attachmentUrl;
// } else {
// _this.attachmentUrl = res.data.attachmentUrl;
// }
// _this.bannerType = res.data.attachmentType;
// if(_this.bannerType == 2) {
// _this.clientType = __isWeb ? 1 : __isAndroid ? 2 : 3;
// }
// // 先设置视频URL再显示视频组件 ------------ END
// _this.projectIntro = res.data.projectIntro;
// _this.projectName = res.data.projectName;
// _this.pStatus = res.data.status;
// }
// });
// },
// setContent(data) {
// let list = data;
// for(let i=0;i<list.length;i++) {
// let len = vueFilters.strLength(list[i].name);
// let certificate = list[i].certificateFlag;
// if(len > 30 && certificate == 2) {
// list[i].height = "2";
// } else if (len > 30 && certificate != 2) {
// list[i].height = 2;
// } else if (len <= 30 && certificate == 2) {
// list[i].height = "1";
// } else if(len <= 30 && certificate != 2) {
// list[i].height = 1;
// }
// }
// console.log('contentList!',list);
// return list;
// },
// 获取内容列表
// getContentList(moduleId) {
// let _this = this;
// let param = {
// moduleId: _this.moduleId,
// token: _this.userInfo.userToken,
// setEntry: true,
// projectId: _this.projectId,
// };
// _this.showLoading = true;
// this.GET("portal/portalApp/contentList", param).then(res => {
// // _this.showLoading = false;
// if (res.code == "000000") {
// _this.contentList = _this.setContent(res.data.contentList);
// }
// });
// },
} }
}; };
</script> </script>
...@@ -640,6 +727,7 @@ export default { ...@@ -640,6 +727,7 @@ export default {
// margin-bottom: px2rem(40px); // margin-bottom: px2rem(40px);
} }
.intro-catalogue-container { .intro-catalogue-container {
.title { .title {
height: px2rem(50px); height: px2rem(50px);
line-height: px2rem(30px); line-height: px2rem(30px);
...@@ -693,6 +781,9 @@ export default { ...@@ -693,6 +781,9 @@ export default {
margin-bottom: px2rem(16px); margin-bottom: px2rem(16px);
} }
} }
.fixed-flag-height {
height: px2rem(50px);
}
} }
} }
</style> </style>
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册