提交 86b5da0e 编写于 作者: 张平's avatar 张平

Merge branch 'dev-cme-1216' into 'release'

查看cme 项目列表和项目详情页  codereviewer:张平

查看cme 项目列表和项目详情页  codereviewer:张平1

See merge request !1
......@@ -692,13 +692,15 @@
"version": "0.3.2",
"resolved": "http://192.168.110.93:4873/array-unique/-/array-unique-0.3.2.tgz",
"integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
"dev": true
"dev": true,
"optional": true
},
"braces": {
"version": "2.3.2",
"resolved": "http://192.168.110.93:4873/braces/-/braces-2.3.2.tgz",
"integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
"dev": true,
"optional": true,
"requires": {
"arr-flatten": "^1.1.0",
"array-unique": "^0.3.2",
......@@ -717,6 +719,7 @@
"resolved": "http://192.168.110.93:4873/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"optional": true,
"requires": {
"is-extendable": "^0.1.0"
}
......@@ -899,6 +902,7 @@
"resolved": "http://192.168.110.93:4873/fill-range/-/fill-range-4.0.0.tgz",
"integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
"dev": true,
"optional": true,
"requires": {
"extend-shallow": "^2.0.1",
"is-number": "^3.0.0",
......@@ -911,6 +915,7 @@
"resolved": "http://192.168.110.93:4873/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"optional": true,
"requires": {
"is-extendable": "^0.1.0"
}
......@@ -937,7 +942,8 @@
"ansi-regex": {
"version": "2.1.1",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"aproba": {
"version": "1.2.0",
......@@ -958,12 +964,14 @@
"balanced-match": {
"version": "1.0.0",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
......@@ -978,17 +986,20 @@
"code-point-at": {
"version": "1.1.0",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"core-util-is": {
"version": "1.0.2",
......@@ -1105,7 +1116,8 @@
"inherits": {
"version": "2.0.3",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"ini": {
"version": "1.3.5",
......@@ -1117,6 +1129,7 @@
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"number-is-nan": "^1.0.0"
}
......@@ -1131,6 +1144,7 @@
"version": "3.0.4",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"brace-expansion": "^1.1.7"
}
......@@ -1138,12 +1152,14 @@
"minimist": {
"version": "0.0.8",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"minipass": {
"version": "2.3.5",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
......@@ -1162,6 +1178,7 @@
"version": "0.5.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minimist": "0.0.8"
}
......@@ -1242,7 +1259,8 @@
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"object-assign": {
"version": "4.1.1",
......@@ -1254,6 +1272,7 @@
"version": "1.4.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"wrappy": "1"
}
......@@ -1339,7 +1358,8 @@
"safe-buffer": {
"version": "5.1.2",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"safer-buffer": {
"version": "2.1.2",
......@@ -1375,6 +1395,7 @@
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
......@@ -1394,6 +1415,7 @@
"version": "3.0.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
......@@ -1437,12 +1459,14 @@
"wrappy": {
"version": "1.0.2",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"yallist": {
"version": "3.0.3",
"bundled": true,
"dev": true
"dev": true,
"optional": true
}
}
},
......@@ -1516,6 +1540,7 @@
"resolved": "http://192.168.110.93:4873/is-number/-/is-number-3.0.0.tgz",
"integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
"dev": true,
"optional": true,
"requires": {
"kind-of": "^3.0.2"
},
......@@ -1525,6 +1550,7 @@
"resolved": "http://192.168.110.93:4873/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"optional": true,
"requires": {
"is-buffer": "^1.1.5"
}
......@@ -1535,13 +1561,15 @@
"version": "3.0.1",
"resolved": "http://192.168.110.93:4873/isobject/-/isobject-3.0.1.tgz",
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
"dev": true
"dev": true,
"optional": true
},
"kind-of": {
"version": "6.0.2",
"resolved": "http://192.168.110.93:4873/kind-of/-/kind-of-6.0.2.tgz",
"integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
"dev": true
"dev": true,
"optional": true
},
"micromatch": {
"version": "3.1.10",
......@@ -2367,6 +2395,7 @@
"resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
"integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
"dev": true,
"optional": true,
"requires": {
"hoek": "2.x.x"
}
......@@ -3856,7 +3885,8 @@
"ansi-regex": {
"version": "2.1.1",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"aproba": {
"version": "1.2.0",
......@@ -3877,12 +3907,14 @@
"balanced-match": {
"version": "1.0.0",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
......@@ -3897,17 +3929,20 @@
"code-point-at": {
"version": "1.1.0",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"core-util-is": {
"version": "1.0.2",
......@@ -4024,7 +4059,8 @@
"inherits": {
"version": "2.0.3",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"ini": {
"version": "1.3.5",
......@@ -4036,6 +4072,7 @@
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"number-is-nan": "^1.0.0"
}
......@@ -4050,6 +4087,7 @@
"version": "3.0.4",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"brace-expansion": "^1.1.7"
}
......@@ -4057,12 +4095,14 @@
"minimist": {
"version": "0.0.8",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"minipass": {
"version": "2.3.5",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
......@@ -4081,6 +4121,7 @@
"version": "0.5.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minimist": "0.0.8"
}
......@@ -4161,7 +4202,8 @@
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"object-assign": {
"version": "4.1.1",
......@@ -4173,6 +4215,7 @@
"version": "1.4.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"wrappy": "1"
}
......@@ -4258,7 +4301,8 @@
"safe-buffer": {
"version": "5.1.2",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"safer-buffer": {
"version": "2.1.2",
......@@ -4294,6 +4338,7 @@
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
......@@ -4313,6 +4358,7 @@
"version": "3.0.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
......@@ -4356,12 +4402,14 @@
"wrappy": {
"version": "1.0.2",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"yallist": {
"version": "3.0.3",
"bundled": true,
"dev": true
"dev": true,
"optional": true
}
}
},
......@@ -4719,7 +4767,8 @@
"version": "2.16.3",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
"integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
"dev": true
"dev": true,
"optional": true
},
"home-or-tmp": {
"version": "2.0.0",
......
......@@ -6,12 +6,12 @@
v-for="(component , index) in projectComponent"
:key="index">
<!-- <CommonTitle :fontWeight="500" :title="component.name" :isShowCert="true" :isShowExplain="true" @showDialog="showDialog(component.introduce)"></CommonTitle> -->
<MergeTitle :fontWeight="500" :title="component.name" :isShowCert="component.status" :isShowExplain="true" @showDialog="showDialog(component.introduce)"></MergeTitle>
<!-- <MergeTitle :fontWeight="500" :title="component.name" :isShowCert="component.status" :isShowExplain="true" @showDialog="showDialog(component.introduce)"></MergeTitle> -->
<van-collapse v-model="activeNames" @change="changeCollapse">
<van-collapse-item
v-for="(portalModule , index) in component.portalModuleDTOS"
v-for="(portalModule, index) in component.portalModuleDTOS"
:key="index"
:title="portalModule.moduleName | shortName(19)"
:title="(parseInt(index) + 1) + '.' + portalModule.moduleName | shortName(19)"
:name="portalModule.expandKey"
:value="portalModule.value"
:disabled="portalModule.disabled"
......@@ -45,10 +45,10 @@
<!-- <img v-show="item.status == 13" class="text-action-dh" src="../../images/icon-dh.png"> -->
{{getActionText(item.status)}}
</span>
<div class="connect-line"
<!-- <div class="connect-line"
:class="{'len1': item.height === 1, 'len2': item.height === '1','len3': item.height === 2, 'len4': item.height === '2', 'line-complete': index+1 < portalModule.contentList.length && portalModule.contentList[index+1].useFlag == 1}"
v-if="index+1 < portalModule.contentList.length && portalModule.contentList[index].templetId == portalModule.contentList[index+1].templetId">
</div>
</div> -->
<div class="foot-line"
v-if="index+1 < portalModule.contentList.length && portalModule.contentList[index].templetId == portalModule.contentList[index+1].templetId">
</div>
......@@ -61,9 +61,10 @@
</van-collapse-item>
</van-collapse>
<!-- <Toast ref="toastTitle"></Toast> -->
<div v-if="index+1 < projectComponent.length" class="line-component"></div>
<!-- <div v-if="index+1 < projectComponent.length" class="line-component"></div> -->
</div>
<NoMoreContent v-if="detailNum > 9" />
<!-- <NoMoreContent v-if="detailNum > 9" /> -->
<NoMoreContent />
<div v-if="detailNum <= 9" class="no-more-bottom"></div>
<van-dialog
v-model="dialogState"
......@@ -94,73 +95,33 @@ const actionMap = {
22: "继续学习",
23: "去复习"
};
const sendBuriedDataMap = {
11: "211012",
12: "211013",
21: "211009",
22: "211010",
23: "211011"
}
export default {
name: "cell-list-item",
data() {
return {
appVersion: "200",
hocImg: require("../../images/has-owner-cert.png"),
activeNames: [],
activeNames: [1],
dialogState: false,
projectId: 1,
componentList: [
{
name: '教培考核-必修部分',
introduce: '本次培训工作以指南为依据,本次培训工作以指南为依据。 <br>必修部分共10门课程,需全部考核通过,单门课程成绩总60-79分为合格,80-100分为优秀,每门考试共可考2次,支持中途退出后继续答题。',
portalModuleDTOS: [
{
moduleName: '1 总论篇',
expandKey: '1',
value: '共3节',
disabled: false,
},
{
moduleName: '2 诊断篇',
expandKey: '2',
value: '共3节',
disabled: false,
},
{
moduleName: '3 老年高血压篇',
expandKey: '3',
value: '尚未开始',
disabled: true,
},
],
},
{
name: '教培考核-选修部分',
introduce: '本次培训工作以指南为依据。 \n必修部分共11门课,需全部通过',
portalModuleDTOS: [
{
moduleName: '1 高血压慢病资格',
expandKey: 'abc',
value: '共3节',
},
{
moduleName: '2 诊断篇',
expandKey: '6',
value: '共3节',
},
{
moduleName: '3 老年高血压篇',
expandKey: '7',
value: '共3节',
},
],
}
],
projectId: 1
};
},
props: {
moduleName: {
type: String,
default: ""
},
paramData: {
type: Array,
default: () => []
},
// moduleName: {
// type: String,
// default: ""
// },
// paramData: {
// type: Array,
// default: () => []
// },
projectComponent: {
type: Array,
default: () => []
......@@ -224,7 +185,13 @@ export default {
} else if (item.type == 2) {
this.gotoCourse(item.id);
}
console.log(item);
// 埋点:去学习、继续学习、复习、去考试、重考
let actionCode = sendBuriedDataMap[item.status];
if(actionCode) {
this.$sendBuriedData({
component_tag: `211#${actionCode}#${this.projectId}`
});
}
},
// 跳转到课程
......@@ -288,13 +255,13 @@ export default {
getActionText(status) {
return actionMap[status];
},
showDialog(introduce) {
Dialog.alert({
title: '说明',
message: introduce,
confirmButtonText: '我知道了',
})
},
// showDialog(introduce) {
// Dialog.alert({
// title: '说明',
// message: introduce,
// confirmButtonText: '我知道了',
// })
// },
changeCollapse(activeNames) {
console.log('activeNames',activeNames);
let param = {
......@@ -451,7 +418,7 @@ export default {
.cell-container {
display: flex;
flex-direction: column;
margin: px2rem(20px) px2rem(15px) px2rem(-28px) px2rem(15px);
margin: px2rem(20px) px2rem(0px) px2rem(-28px) px2rem(0px);
&-item {
position: relative;
display: flex;
......@@ -539,7 +506,7 @@ export default {
// font-family: "PingFangSC-Medium", "PingFangSC", "Microsoft Yahei";
width: px2rem(231px);
font-size: px2rem(15px);
font-weight: 500;
font-weight: 700;
line-height: px2rem(22px);
color: #333333;
float: left;
......
......@@ -9,37 +9,39 @@
@click="coopDetails(item)"
>
<div class="coop-item-left">
<img :src="item.imgUrl">
<span v-if="item.projectStatus"
<img :src="item.imgUrl" />
<span
v-if="item.projectStatusValue"
class="coop-container-status"
:style="{'background': cBgColor(item)}"
>{{item.projectStatus | statusText}}</span>
>{{item.projectStatusValue | statusText}}</span>
</div>
<div class="coop-item-right">
<span class="coop-item-right-title">{{item.projectName}}</span>
<span class="coop-item-right-other">发起机构 {{item.organizationName}}</span>
<span v-if="item.pType == 1"
<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
>起止日期 {{item.oldTime}}</span>-->
<!-- <span v-else
class="coop-item-right-other"
>起止日期 {{item.projectBegintimeLong | formatTime}}-{{item.projectEndtimeLong | formatTime}}</span>
>起止日期 {{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"></NoContent>
<NoContent v-show="!paramData.length && isShow" :tabNum="tabTo"></NoContent>
<!--<UpdateDialog :showGoUpdate="showGoUpdate" @goUpdateHandler="goUpdateHandler"></UpdateDialog>-->
<van-popup
<!-- <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="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>
</van-popup>-->
</section>
</template>
......@@ -50,7 +52,7 @@ 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';
import { Popup } from "vant";
export default {
name: "coop-list-item",
......@@ -58,7 +60,7 @@ export default {
return {
bgColor: "green",
statusText: "进行中",
showGoUpdate: false,
showGoUpdate: false
};
},
props: {
......@@ -78,6 +80,10 @@ export default {
type: Number,
default: 1
},
userMobile: {
type: String,
default: ""
}
},
computed: {
...mapGetters(["userInfo"])
......@@ -87,7 +93,7 @@ export default {
components: {
NoMoreContent,
NoContent,
UpdateDialog,
UpdateDialog
},
mounted() {},
filters: {
......@@ -104,121 +110,138 @@ export default {
}
},
methods: {
...mapActions(['setProjectTabIndex']),
...mapActions(["setProjectTabIndex"]),
cBgColor(item) {
if (item.projectStatus === 1) {
if (item.projectStatusValue === 1) {
return "#5890DD";
} else if (item.projectStatus === 5) {
} else if (item.projectStatusValue === 5) {
return "#449284";
} else if (item.projectStatus === 10) {
} else if (item.projectStatusValue === 10) {
return "#373839";
} else {
return "#5890DD";
}
},
coopDetails(item) {
this.$sendBuriedData({
component_tag: '089#400081#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 = [
if (this.userMobile) {
let paramList = [
{
key: "pageUrl",
value: pageUrl + `?id=${item.id}&coopType=${coopType}&tabTo=${tabTo}&courseRequire=${courseRequire}`,
value: getWebPageUrl(`cme/#/coop?id=${item.id}&courseRequire=${item.courseRequire}`),
type: 4,
seqNo: 1
}
]
];
rocNative.dispatchEventByModuleCode({
modeCode: "M300",
jsonString: paramList
});
} else {
pageUrl = getWebPageUrl('coopv2/#/parent');
paramList = [
{
key: "pageUrl",
value: pageUrl + `?entryId=${item.entryId}`,
type: 4,
seqNo: 1
}
]
rocNative.gotoLogin();
}
rocNative.dispatchEventByModuleCode({
modeCode: "M300",
jsonString: paramList
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) {
if (item.id == "3") {
if (!_this.userInfo.userToken) {
rocNative.gotoLogin();
return;
}
......@@ -227,27 +250,27 @@ export default {
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();
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;
}
_this.goToPage1(item.contentListModel)
} else {
rocNative.gotoLogin();
return;
}
);
_this.goToPage1(item.contentListModel);
});
} else {
_this.goToPage1(item.contentListModel)
_this.goToPage1(item.contentListModel);
}
},
// 跳转
......@@ -259,7 +282,9 @@ export default {
paramList[0]["value"].indexOf("stroke.js") !== -1;
let strokeUrl = "";
if (isStrokeUrl) {
strokeUrl = paramList[0]["value"] + "&token=" + this.userInfo.userToken || _this.token;
strokeUrl =
paramList[0]["value"] + "&token=" + this.userInfo.userToken ||
_this.token;
paramList[0]["value"] = strokeUrl;
}
rocNative.dispatchEventByModuleCode({
......@@ -275,7 +300,7 @@ export default {
// createdTime: new Date().getTime()
// });
},
goUpdateHandler () {
goUpdateHandler() {
//去更新
rocNative.upGradeVersion();
this.showGoUpdate = false;
......@@ -346,33 +371,33 @@ export default {
}
}
}
.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-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;
}
.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;
}
&.v-hairline-top::after {
border-top-width: 1px;
}
}
}
</style>
<style>
.van-overlay{
background-color: rgba(0,0,0,0.5);
}
.van-overlay {
background-color: rgba(0, 0, 0, 0.5);
}
</style>
......@@ -3,15 +3,21 @@
<section class="nc-container">
<img
class="nc-container-img"
src="https://pica-pro.oss-cn-shanghai.aliyuncs.com/2019/03/07/cooperation/no-content.png"
src="../../images/cme/no-content.png"
>
<span class="nc-container-text">暂无内容</span>
<span v-if="tabNum == 1" class="nc-container-text">您还未参加CME项目哦~</span>
<span v-if="tabNum == 2" class="nc-container-text">当前无可学CME项目哦~</span>
</section>
</template>
<script>
export default {
name: "no-content",
props: {
tabNum: {
default: 1
}
},
data() {
return {};
}
......@@ -26,7 +32,7 @@ export default {
flex-direction: column;
justify-content: center;
align-content: center;
margin-top: px2rem(20px);
margin-top: px2rem(150px);
margin-bottom: px2rem(20px);
text-align: center;
// margin: 0 auto;
......
......@@ -2,7 +2,7 @@
<div class="dialog-mask-container" v-if="showGoUpdate">
<div class="dialog-mask"></div>
<div class="dialog-container">
<div class="dialog-content">更新至最新版本才能观看视频哦</div>
<div class="dialog-content">更新至最新版本才能观看视频哦更新至最新版本才能观看视频哦</div>
<div class="dialog-footer v-hairline-top">
<span @click.stop.prevent="goUpdateHandler(1)">取消</span>
<span class="confirm-btn v-hairline-left" @click.stop.prevent="goUpdateHandler(2)">立即更新</span>
......
<template>
<div class="basic-container">
<div class="basic-title">基本信息</div>
<div class="content">
<span>项目名称</span>
<span>{{projectNo}}</span>
</div>
<div class="content">
<span>学习收获</span>
<span>{{level}} {{projectCredit}}</span>
</div>
<div class="content">
<span>申请范围</span>
<span>{{scope}}</span>
</div>
<div class="remind" v-if="remind">
<span>{{remind}}</span>
</div>
<div class="content">
<span>起止时间</span>
<span>{{startDate | formatTime('{y}.{m}.{d}')}}{{endDate | formatTime('{y}.{m}.{d}')}}</span>
</div>
<div class="content">
<span>发起机构</span>
<span>{{organName}}</span>
</div>
</div>
</template>
<script>
export default {
props: {
projectNo: {
type: String,
default: "GWKX-20180326-42843"
},
credit: {
type: String,
default: ""
},
level: {
type: String,
default: ""
},
scope: {
type: String,
default: ""
},
startDate: {
type: Number,
default: ""
},
endDate: {
type: Number,
default: ""
},
organName: {
type: String,
default: ""
},
remind: {
type: String,
default: ""
},
projectCredit: {
type: String,
default: ""
}
}
}
</script>
<style lang="scss" scoped>
@import "../../style/mixin";
.basic-container {
padding-bottom: px2rem(20px);
margin: px2rem(30px) px2rem(15px) 0px;
border-bottom: px2rem(1px) solid #E7E8E9;
.basic-title {
font-size: px2rem(18px);
line-height: px2rem(18px);
color: #373839;
font-weight: 700;
}
.content {
margin-top: px2rem(16px);
height: px2rem(16px);
line-height: px2rem(0px);
span {
display: inline-block;
font-size: px2rem(14px);
}
span:first-child {
color: #979899;
}
span:last-child {
margin-left: px2rem(15px);
color: #676869;
}
}
.remind {
line-height: px2rem(14px);
margin-top: px2rem(10px);
span {
position: relative;
display: inline-block;
padding: px2rem(5px) px2rem(10px);
margin-left: px2rem(78px);
font-size: px2rem(14px);
color: #FB5B52;
background: #FCEEED;
border-radius: px2rem(4px);
}
span:after {
content: "";
position: absolute;
left: px2rem(10px);
bottom: px2rem(20px);
width: 0;
height: 0;
border-width: 0 px2rem(8px) px2rem(8px);
border-style: solid;
border-color: transparent transparent #FCEEED;
}
}
}
</style>
\ No newline at end of file
<template>
<div class="step-content">
<p class="step-text step1-text" v-if="step1">学习进度{{studyProgress}}</p>
<div class="step-item">
<span :class="{'actived': step1 || step2 || step3 || step4}">1</span>
<p :class="{'actived': step1 || step2 || step3 || step4}">项目学习</p>
</div>
<div class="step-line step-one-line" :class="{'actived': step2 || step3 || step4}"></div>
<p class="step-text step2-text" v-if="step2" @click="applyFor">
立即申请
<img src="../../images/cme/step-right-arrow.png"/>
</p>
<div class="step-item">
<span :class="{'actived': step2 || step3 || step4}">2</span>
<p :class="{'actived': step2 || step3 || step4}">申请学分</p>
</div>
<div class="step-line step-two-line" :class="{'actived': step3 || step4}"></div>
<p class="step-text step3-text" v-if="step3" @click="verifyResult">
{{progressText}}
<img src="../../images/cme/step-right-arrow.png"/>
</p>
<div class="step-item">
<span :class="{'actived': step3 || step4}">3</span>
<p :class="{'actived': step3 || step4}">学分审核</p>
</div>
<div class="step-line step-three-line" :class="{'actived': step4}"></div>
<p class="step-text step4-text" v-if="step4" @click="getScore">
获得{{credit}}
<img src="../../images/cme/step-right-arrow.png"/>
</p>
<div class="step-item">
<span :class="{'actived': step4}">4</span>
<p :class="{'actived': step4}">申请成功</p>
</div>
<!-- 申请学分提示框 -->
<div class="apply-score-content" v-if="showTip">
<div class="lm">
<img src="../../images/cme/hand.png" />
</div>
<div class="title">恭喜您完成该项目学习及考试,快去申请学分</div>
<div class="line"></div>
<div class="rm" @click="closeTip">
<img src="../../images/cme/delete.png" />
</div>
</div>
</div>
</template>
<script>
import { getWebPageUrl, gotoPage } from "@/utils/index";
export default {
props: {
currentProgress: {
type: Number,
default: 0
},
studyProgress: {
type: String,
default: "0%"
},
credit: {
type: String,
default: ""
},
creditId: {
type: Number,
default: 0
},
certificateUrl: {
type: String,
default: ""
},
certificateId: {
type: String,
default: ""
},
projectId: {
type: String,
default: "1"
},
inScope: {
type: Number,
default: 0
}
},
data() {
return {
step1: false,
step2: false,
step3: false,
step4: false,
progressText: "",
showTip: false,
btnDisabled: true
};
},
watch: {
currentProgress(n,o) {
let _this = this;
if(n == 1) { // 项目学习
_this.step1 = true;
_this.step2 = false;
_this.step3 = false;
_this.step4 = false;
}else if(n == 2) { // 申请学分
_this.step1 = false;
_this.step2 = true;
_this.step3 = false;
_this.step4 = false;
_this.showTip = true;
setInterval(() => {
_this.showTip = false;
},5000)
}else if(n == 3) { // 学分审核
_this.step1 = false;
_this.step2 = false;
_this.step3 = true;
_this.step4 = false;
_this.progressText = "审核中";
}else if(n == 4) { // 审核失败
_this.step1 = false;
_this.step2 = false;
_this.step3 = true;
_this.step4 = false;
_this.progressText = "审核失败";
}else if(n == 5 || n == 6) { // 申请成功
_this.step1 = false;
_this.step2 = false;
_this.step3 = false;
_this.step4 = true;
}
}
},
created() {},
methods: {
// 立即申请
applyFor() {
this.$sendBuriedData({
component_tag: `211#211001#${this.projectId}`
});
this.$emit("applicationCredit");
},
// 关闭提示
closeTip() {
this.showTip = false;
},
// 审核
verifyResult() {
if(this.currentProgress == 3) {
this.$sendBuriedData({
component_tag: `211#211003#${this.projectId}`
});
}else if(this.currentProgress == 4) {
this.$sendBuriedData({
component_tag: `211#211005#${this.projectId}`
});
}
gotoPage(this,`cme/#/credit-detail?creditId=${this.creditId}&projectId=${this.projectId}`);
},
// 获得学分--下载证书
getScore() {
let paramList = [
{
key: "className",
value:
"com.picahealth.yunque.activitys.honor.CheckCertificatesActivity###YQWebView",
type: 4,
seqNo: 1
},
{
key: "url",
value: this.certificateUrl,
type: 4,
seqNo: 2
},
{
key: "id",
value: this.certificateId,
type: 4,
seqNo: 3
},
{
key: "navTitle",
value: "学分详情",
type: 4,
seqNo: 4
},
{
key: "isNotTab",
value: true,
type: 4,
seqNo: 5
},
{
key: "isShowDownload",
value: true,
type: 4,
seqNo: 6
}
];
rocNative.dispatchEventByModuleCode({
modeCode: "M200",
jsonString: paramList
});
this.$sendBuriedData({
component_tag: `211#211004#${this.projectId}`
});
}
}
};
</script>
<style lang="scss" scoped>
@import "../../style/mixin";
.step-content {
position: relative;
height: px2rem(110px);
background: rgba(248, 249, 250, 1);
display: flex;
flex-direction: row;
justify-content: flex-start;
align-items: center;
.step-item {
flex-grow: 1;
text-align: center;
padding-top: px2rem(20px);
line-height: px2rem(20px);
span {
display: inline-block;
width: px2rem(20px);
height: px2rem(20px);
line-height: px2rem(17px);
border-radius: 50%;
background: #676869;
border: 2px solid rgba(255, 255, 255, 1);
color: #fff;
font-size: px2rem(12px);
font-weight: 700;
}
span.actived {
background: #449284;
}
p {
font-size: px2rem(13px);
color: #373839;
}
p.actived {
color: #449284;
}
}
.step-line {
position: absolute;
top: px2rem(58px);
width: px2rem(75px);
height: px2rem(3px);
background: #dadde1;
}
.step-one-line {
left: px2rem(56px);
}
.step-two-line {
left: px2rem(150px);
}
.step-three-line {
right: px2rem(56px);
}
.step-one-line.actived,
.step-two-line.actived,
.step-three-line.actived {
background: #449284;
}
.step-text {
position: absolute;
top: px2rem(25px);
padding: px2rem(4px) px2rem(6px);
background: #449284;
border-radius: px2rem(10px);
font-size: px2rem(12px);
line-height: px2rem(12px);
color: #fff;
img {
display: inline-block;
width: px2rem(6px);
height: px2rem(9px);
padding-left: px2rem(4px);
}
}
.step1-text {
left: px2rem(20px);
}
.step1-text:after {
content: "";
width: px2rem(0px);
height: px2rem(0px);
border-top: px2rem(7px) solid #449284;
border-left: px2rem(7px) solid transparent;
border-right: px2rem(7px) solid transparent;
position: absolute;
top: px2rem(18px);
left: px2rem(21px);
}
.step2-text {
left: px2rem(106px);
}
.step2-text:after,
.step3-text:after {
content: "";
width: px2rem(0px);
height: px2rem(0px);
border-top: px2rem(7px) solid #449284;
border-left: px2rem(7px) solid transparent;
border-right: px2rem(7px) solid transparent;
position: absolute;
top: px2rem(18px);
left: px2rem(29px);
}
.step3-text {
left: px2rem(207px);
}
.step3-text:after {
content: "";
width: px2rem(0px);
height: px2rem(0px);
border-top: px2rem(7px) solid #449284;
border-left: px2rem(7px) solid transparent;
border-right: px2rem(7px) solid transparent;
position: absolute;
top: px2rem(18px);
left: px2rem(21px);
}
.step4-text {
right: px2rem(20px);
}
.step4-text:after {
content: "";
width: px2rem(0px);
height: px2rem(0px);
border-top: px2rem(7px) solid #449284;
border-left: px2rem(7px) solid transparent;
border-right: px2rem(7px) solid transparent;
position: absolute;
top: px2rem(18px);
right: px2rem(20px);
}
.apply-score-content {
display: flex;
position: absolute;
left: px2rem(105px);
top: px2rem(-42px);
background: #000;
opacity: 0.6;
width: px2rem(236px);
height: px2rem(51px);
border-radius: px2rem(6px);
.title {
font-size: px2rem(12px);
color: rgba(255, 255, 255, 1);
margin: px2rem(7px) px2rem(11px) 0 px2rem(0px);
width: px2rem(133px);
}
.lm {
width: px2rem(41px);
img {
display: inline-block;
width: px2rem(20px);
padding: 0 0 px2rem(7px) px2rem(15px);
}
}
.line {
width: px2rem(1px);
height: px2rem(51px);
background: #fff;
opacity: 0.18;
}
.rm {
width: px2rem(41px);
img {
display: inline-block;
width: px2rem(15px);
padding: 0 px2rem(15px) px2rem(7px);
}
}
}
}
</style>
\ No newline at end of file
<template>
<div class="common-bottom-info-wrapper">
<div class="common-bottom">
<span>若有问题可联系客服:</span>
<img src="../../images/cme/icon-phone.png" />
<span>400-920-8877</span>
</div>
</div>
</template>
<style lang="scss" scoped>
@import "../../style/mixin";
.common-bottom-info-wrapper {
position: fixed;
width: 100%;
bottom: 0;
left: 0;
margin: 20px auto;
.common-bottom {
display: flex;
display: 100%;
flex-direction: row;
font-size: 14px;
text-align: center;
justify-content: center;
align-items: center;
span {
font-size: 14px;
font-weight: 400;
height: 14px;
line-height: 14px;
color: #676869;
&:nth-child(3) {
color: #449284;
}
}
// span:nth-child(1) {
// color: #449284;
// }
img {
margin-right: 4px;
width: 10px;
height: 12px;
}
}
}
</style>
<template>
<div class="common-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";
.common-button-wrapper {
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: 17px;
font-weight: 700;
color: #FFFFFF;
background: #449284;
}
}
&.primary {
span {
color: #FFFFFF;
background: #449284;
}
}
&.disabled {
span {
color: rgba(255, 255, 255, 0.95);
background: rgba(68, 146, 132, 0.4);;
}
}
}
</style>
\ No newline at end of file
<template>
<div class="common-dialog-wrraper" v-if="isShowDialog">
<div class="dialog-mask"></div>
<div class="dialog-container">
<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: {
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";
.common-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;
.dialog-content {
// margin: px2rem(30px) px2rem(22px);
margin: px2rem(30px);
text-align: center;
font-size: px2rem(18px);
font-weight: 400;
color: #373839;
}
.dialog-sub-content {
margin: px2rem(-16px) px2rem(30px) px2rem(30px);
// margin: px2rem(-16px) px2rem(22px) px2rem(30px);
text-align: left;
font-size: px2rem(14px);
line-height: px2rem(24px);
font-weight: 400;
color: #676869;
}
.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>
<template>
<div class="item-intro-container">
<div class="basic-title">项目介绍</div>
<div class="content">
<div class="text">{{textContent}}</div>
<div v-if="textContent.length > 70" class="desc" @click="allText">
<span>{{btnText}}</span>
<img v-if="!allTextFlag" src="../../images/down.png"/>
<img v-if="allTextFlag" src="../../images/up.png"/>
</div>
</div>
</div>
</template>
<script>
export default {
props: {
textContent: {
type: String,
default: ''
}
},
data() {
return {
btnText: '详情',
allTextFlag: false
}
},
methods: {
allText() {
let _this = this;
if(!_this.allTextFlag) {
_this.btnText = '收起';
_this.allTextFlag = true;
}else {
_this.btnText = '详情';
_this.allTextFlag = false;
}
_this.$emit("itemIntroText", {allTextFlag: _this.allTextFlag});
}
}
}
</script>
<style lang="scss" scoped>
@import "../../style/mixin";
.item-intro-container {
padding-bottom: px2rem(20px);
margin: px2rem(30px) px2rem(15px) 0px;
border-bottom: px2rem(1px) solid #E7E8E9;
.basic-title {
font-size: px2rem(18px);
line-height: px2rem(18px);
color: #373839;
font-weight: 700;
}
.content {
position: relative;
margin-top: px2rem(16px);
.text {
font-size: px2rem(14px);
line-height: px2rem(21px);
color: #676869;
}
.desc {
// position: absolute;
// right: 0;
// bottom: px2rem(1px);
text-align: right;
background: #fff;
line-height: px2rem(14px);
z-index: 99;
span {
font-size: px2rem(14px);
line-height: px2rem(14px);
color: #449284;
}
img {
width: px2rem(12px);
}
}
}
}
</style>
\ No newline at end of file
<template>
<div class="item-leader-container">
<div class="basic-title">项目负责人</div>
<div class="leader-info">
<img :src="projectLeader.appImageUrl" />
<div class="leader-text">
<div class="leader-con">
<span>{{projectLeader.name}}</span>
<span class="leader-title">{{projectLeader.title}}</span>
</div>
<div class="address">{{projectLeader.hospital}}</div>
</div>
</div>
<div class="content">
<div class="text">{{leaderText}}</div>
<div v-if="leaderText.length > 70" class="desc" @click="allText">
<span>{{btnText}}</span>
<img v-if="!allTextFlag" src="../../images/down.png" />
<img v-if="allTextFlag" src="../../images/up.png" />
</div>
</div>
</div>
</template>
<script>
export default {
props: {
projectLeader: {
type: Object,
default: () => {}
},
leaderText: {
type: String,
default: ""
}
},
data() {
return {
btnText: "详情",
allTextFlag: false
};
},
methods: {
allText() {
if (!this.allTextFlag) {
this.btnText = "收起";
this.allTextFlag = true;
} else {
this.btnText = "详情";
this.allTextFlag = false;
}
this.$emit("changeLeaderText",{allTextFlag: this.allTextFlag});
}
}
};
</script>
<style lang="scss" scoped>
@import "../../style/mixin";
.item-leader-container {
padding-bottom: px2rem(20px);
margin: px2rem(30px) px2rem(15px) 0px;
border-bottom: px2rem(1px) solid #e7e8e9;
.basic-title {
font-size: px2rem(18px);
line-height: px2rem(18px);
color: #373839;
font-weight: 700;
}
.leader-info {
display: flex;
flex-direction: row;
margin-top: px2rem(16px);
img {
display: inline-block;
width: px2rem(44px);
height: px2rem(44px);
border-radius: 50%;
}
.leader-text {
margin-left: px2rem(16px);
margin-top: px2rem(6px);
.leader-con {
line-height: px2rem(14px);
display: flex;
flex-direction: row;
span {
font-size: px2rem(16px);
color: #676869;
}
span:first-child {
font-size: px2rem(16px);
color: #373839;
font-weight: 700;
}
.leader-title {
width: px2rem(220px);
overflow : hidden;
text-overflow: ellipsis;
white-space:nowrap;
line-height: px2rem(16px);
margin-left: px2rem(10px);
}
}
.address {
margin-top: px2rem(5px);
font-size: px2rem(13px);
color: #979899;
width: px2rem(240px);
overflow : hidden;
text-overflow: ellipsis;
white-space:nowrap;
}
}
}
.content {
position: relative;
margin-top: px2rem(16px);
.text {
font-size: px2rem(14px);
line-height: px2rem(21px);
color: #676869;
}
.desc {
// position: absolute;
// right: 0;
// bottom: px2rem(1px);
text-align: right;
background: #fff;
line-height: px2rem(14px);
z-index: 99;
span {
font-size: px2rem(14px);
color: #449284;
}
img {
width: px2rem(12px);
}
}
}
}
</style>
\ No newline at end of file
<template>
<div class="learn-know-container">
<div class="basic-title">学习须知</div>
<div class="content">
<span v-html="mustKnow"></span>
</div>
</div>
</template>
<script>
export default {
props: {
mustKnow: {
type: String,
default: ''
}
}
}
</script>
<style lang="scss" scoped>
@import "../../style/mixin";
.learn-know-container {
margin: px2rem(30px) px2rem(15px) px2rem(20px);
.basic-title {
font-size: px2rem(18px);
line-height: px2rem(18px);
color: #373839;
font-weight: 700;
}
.content {
margin-top: px2rem(16px);
line-height: px2rem(21px);
span {
display: inline-block;
font-size: px2rem(14px);
color: #676869;
}
}
}
</style>
\ No newline at end of file
<template>
<div class="teacter-intro-container">
<div class="basic-title">讲师介绍</div>
<div class="leader-info" v-for="(item,index) in doctorList" :key="index">
<img :src="item.appImageUrl"/>
<div class="leader-text">
<div class="leader-con">
<span>{{item.name}}</span>
<span class="leader-title">{{item.title}}</span>
</div>
<div class="address">{{item.hospital}}</div>
</div>
</div>
</div>
</template>
<script>
export default {
props: {
doctorList: {
type: Array,
default: () => []
}
},
data() {
return {
}
},
created() {
},
mounted() {
},
methods: {
}
}
</script>
<style lang="scss" scoped>
@import "../../style/mixin";
.teacter-intro-container {
margin: px2rem(30px) px2rem(15px) 0px;
.basic-title {
font-size: px2rem(18px);
line-height: px2rem(18px);
color: #373839;
font-weight: 700;
}
.leader-info {
display: flex;
flex-direction: row;
margin-top: px2rem(16px);
padding-bottom: px2rem(16px);
img {
display: inline-block;
width: px2rem(44px);
height: px2rem(44px);
border-radius: 50%;
}
.leader-text {
margin-left: px2rem(16px);
margin-top: px2rem(6px);
.leader-con {
line-height: px2rem(14px);
display: flex;
flex-direction: row;
span {
font-size: px2rem(16px);
color: #676869;
}
span:first-child {
font-size: px2rem(16px);
color: #373839;
font-weight: 700;
}
.leader-title {
width: px2rem(220px);
overflow : hidden;
text-overflow: ellipsis;
white-space:nowrap;
line-height: px2rem(16px);
margin-left: px2rem(10px);
}
}
.address {
margin-top: px2rem(5px);
font-size: px2rem(13px);
color: #979899;
width: px2rem(240px);
overflow : hidden;
text-overflow: ellipsis;
white-space:nowrap;
}
}
}
}
</style>
\ No newline at end of file
<template>
<div>
<div class="desc-title" v-show="isShowTitle">
<span>{{descTitle}}</span>
<div class="desc-container">
<div class="desc-title">
<span>{{projectName}}</span>
</div>
<div class="desc-detail">
<span class="desc_text" v-html="message"></span>
<!-- <CommonSpliteLine></CommonSpliteLine> -->
<div class="split-line"></div>
<div class="desc_text_tp" @click="showDesc()">
<span v-show="!isShowFlag">显示全部</span>
<span v-show="isShowFlag">收起</span>
</div>
<span class="desc_text" v-if="studyNum && subject">{{newStudyNum}}人已学/{{subject}}</span>
</div>
</div>
</template>
......@@ -20,109 +14,80 @@ export default {
name: "common-description",
data() {
return {
isShowFlag: false
};
},
computed: {
CommonSpliteLine
},
props: {
isShowTitle: {
type: Boolean,
default: true
},
descTitle: {
projectName: {
type: String,
default: ""
},
value: {
studyNum: {
type: Number,
default: 0
},
subject: {
type: String,
default: ""
}
},
created() {},
mounted() {},
computed: {
message: function() {
// return this.isShowFlag
// ? '<span style="color: red;">简介</span>' + this.value
// : '<span style="color: red;">简介</span>' +
// this.value.slice(0, 34) +
// "...";
let shortMsg = this.value || "";
if (shortMsg.length > 63) {
shortMsg = this.value.slice(0, 63) + "...";
newStudyNum: function() {
if(this.studyNum > 1000 && this.studyNum < 10000) {
return (this.studyNum / 1000 + 'K');
}else if(this.studyNum > 10000) {
return (this.studyNum / 10000 + 'W');
}else {
return this.studyNum;
}
return this.isShowFlag ? this.value : shortMsg;
}
},
created() {},
mounted() {
},
methods: {
showDesc() {
this.isShowFlag = !this.isShowFlag;
}
}
};
</script>
<style lang="scss" scoped>
@import "../../style/mixin";
.desc-title {
display: flex;
padding: px2rem(15px);
padding-bottom: 0px;
line-height: px2rem(22px);
font-weight: 700;
color: rgba(51, 51, 51, 1);
span {
font-family: "PingFangSC-Medium", "PingFangSC", "Microsoft Yahei";
font-size: px2rem(18px);
.desc-container {
padding: px2rem(20px) px2rem(15px);
.desc-title {
display: flex;
padding-bottom: 0px;
line-height: px2rem(22px);
font-weight: 700;
span {
font-family: "PingFangSC-Medium", "PingFangSC", "Microsoft Yahei";
font-size: px2rem(18px);
font-weight: 700;
color: #333333;
}
}
.desc-detail {
display: flex;
position: relative;
word-break: normal;
// margin-bottom: px2rem(40px);
// height: px2rem(60px);
.desc_text {
padding-top: px2rem(6px);
font-size: px2rem(13px);
color: #676869;
line-height: px2rem(25px);
letter-spacing: 1px;
word-wrap: break-word;
word-break: break-all;
// word-break: normal;
text-align: justify;
flex-direction: row;
flex-wrap: wrap;
}
}
}
.desc-detail {
display: flex;
position: relative;
word-break: normal;
margin-bottom: px2rem(40px);
// height: px2rem(60px);
}
.display-none {
position: fixed;
top: 0;
visibility: hidden;
}
.desc_text {
padding: px2rem(15px);
padding-top: px2rem(6px);
font-size: px2rem(14px);
color: #999999;
line-height: px2rem(25px);
letter-spacing: 1px;
word-wrap: break-word;
word-break: break-all;
// word-break: normal;
text-align: justify;
flex-direction: row;
flex-wrap: wrap;
}
.desc_text_tp {
position: absolute;
left: 0;
bottom: px2rem(-30px);
// left: 50%;
// transform: translateX(px2rem(-32px));
width: 100%;
text-align: center;
font-size: px2rem(16px);
font-weight: 700;
color: #cccccc;
// border-top: 1px solid #f1f1f1;
}
.split-line {
display: flex;
width: 92%;
position: absolute;
left: 4%;
bottom: px2rem(0px);
border-bottom: 0.5px solid #f1f1f1;
}
</style>
<template>
<section :class="isFixNavbar ? 'nav-top fixed' : 'nav-top'" :style="'height:' + navHeight">
<section v-if="!isWeb" :class="isFixNavbar ? 'nav-top fixed' : 'nav-top'" :style="'height:' + navHeight">
<!-- <section v-if="isWeb" :class="isFixNavbar ? 'nav-top fixed' : 'nav-top'"> -->
<div
class="nav-part"
......@@ -14,11 +14,11 @@
<!-- <img class="nav-back" src="../../images//grey-throw.png"/> -->
</span>
<span class="nav-title-title" v-show="bgColor!=='none'">{{title}}</span>
<span v-show="isShowShare" class="nav-share" @click="goShare">
<img
src="https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/courses/Group17_hover%403x.png"
<span v-if="isShowShare" class="nav-share" @click="goShare">
<img v-show="isBlack"
src="../../images/cme/share-icon-black.png"
>
<!-- <img src="../../images/share-icon.png"/> -->
<img v-show="!isBlack" src="../../images/cme/share-icon-white.png"/>
</span>
</div>
</div>
......@@ -71,6 +71,14 @@ export default {
isBlack: {
type: Boolean,
default: true
},
shareTitle: {
type: String,
default: ""
},
shareTitleInfo: {
type: String,
default: ""
}
},
computed: {
......@@ -121,9 +129,9 @@ export default {
// shareImageUrl: '_this.shareImageUrl'
type: 6,
shareId: 0,
shareUrl: 'shareUrl',
title1: "this.shareTitle1",
title2: "this.shareTitle2",
shareUrl: url,
title1: _this.shareTitle,
title2: _this.shareTitleInfo,
shareImageUrl: "https://file.yunqueyi.com/logo.png?version=" + new Date().getTime()
});
}
......
......@@ -8,11 +8,16 @@ import '@/utils/rem' // 引入自适应
import '@/utils/yqy-bridge' // 移动端服务
// import FastClick from 'fastclick'
import vueFilters from '@/utils/filter'
// import VConsole from 'vconsole/dist/vconsole.min.js'
// if(!(process.env.BUILD_ENV === 'uat' || process.env.BUILD_ENV === 'pro')) {
import VConsole from 'vconsole/dist/vconsole.min.js'
import BuriedPoint,{ sendBuriedData} from 'web-buried-point';
import Vant from 'vant';
import 'vant/lib/index.css';
if(!(process.env.BUILD_ENV === 'uat' || process.env.BUILD_ENV === 'pro')) {
// if(!(process.env.BUILD_ENV === 'pro')) {
// let vConsole = new VConsole() // 初始化
// }
let vConsole = new VConsole() // 初始化
}
// 可调试
// Vue.config.devtools = true;
......@@ -53,7 +58,6 @@ Vue.mixin({
})
// import './plugins';
import BuriedPoint,{ sendBuriedData} from 'web-buried-point';
// import { buriedURL } from './apiConfig';
let domain = '';
if (process.env.BUILD_ENV === 'prod') {
......@@ -69,13 +73,11 @@ if (process.env.BUILD_ENV === 'prod') {
}
Vue.use(BuriedPoint, {
class_name: `web_app_cooperation`,
class_name: 'web_app_cme',
url: `${domain}/file/log/trace1`
});
Vue.prototype.$sendBuriedData = sendBuriedData;
import Vant from 'vant';
import 'vant/lib/index.css';
Vue.use(Vant);
new Vue({
......
......@@ -5,6 +5,10 @@ const complist = r => require.ensure([], () => r(require('../views/component-det
const cooplist = r => require.ensure([], () => r(require('../views/cooperation-details')), 'cooplist')
const parent = r => require.ensure([], () => r(require('../views/parent-page')), 'parent')
const merge = r => require.ensure([], () => r(require('../views/merge-detail')), 'merge')
const test = r => require.ensure([], () => r(require('../views/test-components')), 'test-components')
const creditedit = r => require.ensure([], () => r(require('../views/credit-edit')), 'credit-edit')
const creditdetail = r => require.ensure([], () => r(require('../views/credit-detail')), 'credit-detail')
const excgtips = r => require.ensure([], () => r(require('../views/exchange-tips')), 'exchange-tips')
export default [{
path: '/',
......@@ -38,5 +42,22 @@ export default [{
path: '/coop',
component: merge
},
{
path: '/test',
component: test
},
{
path: '/credit-edit',
component: creditedit
},
{
path: '/credit-detail',
component: creditdetail
},
{
path: '/excg-tips',
component: excgtips
},
]
}]
......@@ -12,8 +12,8 @@ body, div, span, header, footer, nav, section, aside, article, ul, dl, dt, dd, l
font-style: normal;
text-decoration: none;
border: none;
font-size: px2rem(14px);
color: #333;
// font-size: px2rem(14px);
// color: #333;
font-weight: normal;
// font-family: "PingFangSC-Medium", "PingFangSC", "Microsoft Yahei";
font-family: "PingFangSC-Regular","-apple-system-font","Source Han Sans","Helvetica Neue","sans-serif";
......@@ -139,4 +139,7 @@ html,body{
border: 0 solid #F0F1F2;
}
}
// .van-toast__text {
// color: #fff !important;
// }
......@@ -82,4 +82,31 @@
}
.fs30{
font-size: px2rem(15px);
}
.van-cell {
padding: px2rem(17px) px2rem(15px) !important;
font-size: px2rem(15px) !important;
color: #373839 !important;
}
.van-cell:not(:last-child)::after {
left: 0 !important;
}
.van-field__control {
text-align: right !important;
}
// .van-hairline--top-bottom::after, .van-hairline-unset--top-bottom::after {
// border-width: px2rem(1px) 0 !important;
// }
// .van-hairline, .van-hairline--surround, .van-hairline--top, .van-hairline--top-bottom {
// position: inherit !important;
// }
// .van-hairline--top {
// }
// .van-field__label, .van-field__body {
// height: px2rem(15px) !important;
// line-height: px2rem(15px) !important;
// }
.van-cell__title span {
font-weight: 700 !important;
}
\ No newline at end of file
......@@ -7,17 +7,17 @@ export const envConfig = {
// baseUrl: 'https://dev-sc.yunqueyi.com/',
// baseUrl: 'http://10.177.15.180:10202/',
// baseUrl: 'http://192.168.140.14:10201/',
// apiUrl: 'https://dev-api.yunqueyi.com/',
// webPageUrl: 'https://dev-phome.yunqueyi.com/',
// baseUrl: 'https://dev-sc.yunqueyi.com/',
apiUrl: 'https://dev-api.yunqueyi.com/',
webPageUrl: 'https://dev-phome.yunqueyi.com/',
baseUrl: 'https://test1-sc.yunqueyi.com/',
// baseUrl: 'https://test1-sc.yunqueyi.com/',
// apiUrl: 'https://test1-api.yunqueyi.com/',
// webPageUrl: 'https://test1-phome.yunqueyi.com/'
baseUrl: 'https://uat-sc.yunqueyi.com/',
apiUrl: 'https://uat-api.yunqueyi.com/',
webPageUrl: 'https://uat-phome.yunqueyi.com/'
// baseUrl: 'https://uat-sc.yunqueyi.com/',
// apiUrl: 'https://uat-api.yunqueyi.com/',
// webPageUrl: 'https://uat-phome.yunqueyi.com/'
// baseUrl: 'https://sc.yunqueyi.com/',
// apiUrl: 'https://api.yunqueyi.com/',
......
......@@ -11,13 +11,15 @@ const service = axios.create({
// request拦截器
service.interceptors.request.use(config => {
// debugger
if (config.data && config.data.setEntry) {
config.headers['sysCode'] = config.data.sysCode || 10
if(config.data.token){
config.headers['token'] = config.data.token || '0F32D60C3D7042158BCF1FB574E482BE'
if( process.env.BUILD_ENV == "development" ){ // 本地开发环境
config.headers['token'] = '11B8076631AE45999D350EC08A7E66AE';
config.headers['token'] = config.data.token || 'DA2A4E43343E47DEB4C4B708288D02D4' || 'F5CE3BAEC4934864B1022C1C4D39EB40';
}
// delete config.data.token;
}
config.headers['deviceInfo'] = JSON.stringify({ "app_channel": "", "app_mac": "", "app_uuid": "", "app_version": "", "device_brand": "", "device_ip": "", "device_model": "", "device_net": "", "device_ops": "", "resolution_wh": "", "system_level": "", "device_type": '10' })
......
......@@ -25,8 +25,8 @@ function getConfigByEnvType(urlType) {
// 日期与时间解析函数
export function parseTime(time, cFormat) {
if (arguments.length === 0) {
return null
if (arguments.length === 0 || !time) {
return ''
}
const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
let date
......@@ -117,4 +117,25 @@ export function deepCopy(obj) {
export function mergeObjs(...ojbs){
}
// 跳转:在App中使用原生跳转,在浏览器中使用本地路由跳转
export function gotoPage(context, pageUrl) {
if(__isWeb) {
context.$router.push(pageUrl)
// context.$router.push({path: pageUrl, query: query});
} else {
let paramList = [
{
key: "pageUrl",
value: getWebPageUrl(pageUrl),
type: 4,
seqNo: 1
}
];
rocNative.dispatchEventByModuleCode({
modeCode: "M300",
jsonString: paramList
});
}
}
\ No newline at end of file
......@@ -4,26 +4,16 @@ import { getBaseUrl, getApiUrl } from '@/utils/index'
module.exports = {
data: function () {
return {
// isIpx: Utils.env.isIPhoneX(),//是不是iphoneX
// isAndroid: Utils.env.isAndroid(),
// isIOS: false,
// isWeb: false,
token: null
}
},
created: function () {
// let query = (this.$router && this.$router.query) || {};
// let query = this.$router.query
let query;
if(this.$router !== undefined) {
query = this.$router.query
if (this.$route !== undefined) {
query = this.$route.query
}
// this.token = this.getUrlSearch(location.href, 'token') || (query && query.token) || null
// this.token = this.getUrlKey('token') || (query && query.token) || '1540EC1ECF7042CFA7F43363A72A7C81'
// this.token = this.getUrlKey('token') || (query && query.token) || '40C891A41D774DAEABF809071BD4B3BF'
// this.token = this.getUrlKey('token') || (query && query.token) || '5782BC5A96A44C2E8B1EC48F54462A6E'
this.token = this.getUrlKey('token') || (query && query.token) || '006EAC5D201B4547A27C842505F0E368'
// alert('this.token' + this.token)
this.token = this.getUrlKey('token') || (query && query.token) || '9B62E5874DA94979A54DB3E9DFC1443F'
},
mounted() {
......@@ -44,16 +34,16 @@ module.exports = {
return ''
},
// 埋点
pageBurialPoin(options){
pageBurialPoin(options) {
rocNative.appBuryingPointEntrust(options)
},
setRouterParm(paramList){
setRouterParm(paramList) {
let parm = {};
if(paramList.length<=1){
if (paramList.length <= 1) {
return '';
}
for(let i=1;i<paramList.length;i++){
for (let i = 1; i < paramList.length; i++) {
parm[paramList[i].key] = paramList[i].value;
}
return parm;
......@@ -61,12 +51,12 @@ module.exports = {
// 拼接多个参数
getUrlParmByCode(paramList) {
if ( paramList.length <= 1) {
if (paramList.length <= 1) {
return ''
}
let dataStr = ''
let list = [];
for( let i = 1; i < paramList.length; i ++) {
for (let i = 1; i < paramList.length; i++) {
list.push(paramList[i].key + '=' + paramList[i].value)
}
dataStr = list.join('&')
......@@ -83,57 +73,17 @@ module.exports = {
return d;
},
// 根据条件排序
async searchForOrder(searchCategory = '1', searchValue = '', sortItem = 1, pageSize = 10, sourceData = []) {
if(pageSize <=0 ) return;
let str2 = (searchValue || '').replace(/[\-\_\,\!\|\~\`\(\)\#\$\%\^\&\*\{\}\:\;\"\L\<\>\?]/g, '');// 去掉特殊字符
let _this = this,
para = {
searchCategory: searchCategory,
searchValue: str2,
keywordColor: 'rgba(244,122,72,1)',
sortItem: sortItem,
pageNo: 1,
pageSize: pageSize,
token: _this.token,
setEntry: 'headers',
}
let url = 'contents/searchKeyword/searchContent'
let csourceData = await this.GET(url, para).then(res => {
// _this.searchText = ''
if (res.code == '000000') {
// 课程
if(searchCategory.indexOf('1') >= 0) {
sourceData = (res.data && res.data.contentAppModels) || []
}
if(searchCategory.indexOf('2') >= 0) {
// sourceData = []
sourceData = this.handelFive(res.data.fiveMinutesMedicalContentList || [])
}
if(searchCategory.indexOf('3') >= 0) {
sourceData = (res.data && res.data.pCourseDoctorModels) || []
}
if(searchCategory.indexOf('4') >= 0) {
sourceData = res.data.educationContents
}
}
return sourceData || []
})
return csourceData
},
setEventByModuleCode(itemData){
setEventByModuleCode(itemData) {
let modeCode = itemData.appModuleInfo.code || '';
let paramList = itemData.appModuleInfo.paramList ? itemData.appModuleInfo.paramList : ''
if( modeCode === 'M001' || modeCode === 'M002' || modeCode === 'M003') {
if (modeCode === 'M001' || modeCode === 'M002' || modeCode === 'M003') {
paramList = ''
}else if( modeCode === 'M100' || modeCode === 'M300' ) {
} else if (modeCode === 'M100' || modeCode === 'M300') {
// 支持多个参数
let urlPara = this.getUrlParmByCode(paramList);
if(paramList[0]){
if( paramList[0].value.indexOf("?") == -1){
if (paramList[0]) {
if (paramList[0].value.indexOf("?") == -1) {
paramList[0].value += urlPara
}
}
......@@ -142,23 +92,24 @@ module.exports = {
let v = paramList[0]['value'];
let query = this.setRouterParm(paramList);
paramList = [{
url:v,
query:query
url: v,
query: query
}]
this.$router.push({
path: v,
query: query
})
return 'NO'
return 'NO'
}
if(typeof paramList === 'string' && !paramList){
if (typeof paramList === 'string' && !paramList) {
paramList = []
}
return paramList;
},
// 通用GET请求
GET(api, para, callback,str) {
GET(api, para, callback, str) {
// debugger
para.token = para.token || this.token || '006EAC5D201B4547A27C842505F0E368'
let url = api + this.getUrlPara(para)
return fetch({
......@@ -168,7 +119,7 @@ module.exports = {
})
},
NEW_GET(api, para, callback,str) {
NEW_GET(api, para, callback, str) {
para.token = para.token || this.token || '006EAC5D201B4547A27C842505F0E368'
let url = api + this.getUrlPara(para)
return fetch({
......@@ -179,7 +130,7 @@ module.exports = {
},
// 通用GET2请求
GET2(api, para, callback,str) {
GET2(api, para, callback, str) {
para.token = para.token || this.token || '4B43CD3CD5DB4979AC1B5B3F508391CA'
// let url = api + this.getUrlPara(para)
// let url = 'http://192.168.140.38:12801' + api
......@@ -210,7 +161,7 @@ module.exports = {
data: para
})
},
// 通用GET请求
API_GET(api, para, callback) {
para.token = para.token || this.token || '00175A13D70D4234822D90AC3C74202C' //'AF3DFCF2DD4B4115AC47ACA25D5420E9''F90DF48D3EFA49DFAE1267A67DBEFB18'//token
......
......@@ -4,38 +4,9 @@
e.rocNative = {
// 参数说明 e:回传回来的移动端服务名称; t:前端自己传递的回调JS方法
__nativeCall: function (e, t, n) {
// if(t == '__refresh'){
// console.log('!__refresh: ',t,n);
// __refresh(n);
// // return;
// }
if( window[t] ){
if (window[t]) {
window[t](n)
}
// if(t == '__getUserInfo64Comp') {
// __getUserInfo64Comp(n);
// }
// if(t == '__getUserInfo'){
// __getUserInfo(n);
// // return;
// }
// if(t == '__getUserInfo4Comp'){
// __getUserInfo4Comp(n);
// // return;
// }
// if(t == '__getUserInfo4Coop'){
// __getUserInfo4Coop(n);
// // return;
// }
// if (t == '__sendBuriedPoint') {
// __sendBuriedPoint(n);
// // return
// }
// if (t == '__openErrorDebug') {
// __openErrorDebug(n);
// // return
// }
},
__callNative: function (t, a, o) {
"function" == typeof o && (n++ , i[n] = o);
......@@ -82,7 +53,7 @@
})
}
})
}("gotoLogin", "dispatchEventByModuleCode", "gotoAuthentication", "shareWechat", "backPreviousPage", "bindingWechat", "getDeviceInfo", "goBack", "appBuryingPointEntrust", "getAuthPermission", "getAppVersionCode", "getToken", "gotoNewActivity", "gotoNewActivityWithParams", "gotoNewWebActivity", "gotoYidianActivity", "readMessage", "openFiveMintusAudio", "getStatusBarSize", "showNativeDialog", "showNativeToast", "gotoViewTop", "appInit", "checkPermissions", "getStatusBarHeight", "setTabMiniIcon", "getUserInfo", "pauseAudioView", "sendBuriedPoint", "openErrorDebug", "upGradeVersion","getLocalData");
}("gotoLogin", "dispatchEventByModuleCode", "gotoAuthentication", "shareWechat", "backPreviousPage", "bindingWechat", "getDeviceInfo", "goBack", "appBuryingPointEntrust", "getAuthPermission", "getAppVersionCode", "getToken", "gotoNewActivity", "gotoNewActivityWithParams", "gotoNewWebActivity", "gotoYidianActivity", "readMessage", "openFiveMintusAudio", "getStatusBarSize", "showNativeDialog", "showNativeToast", "gotoViewTop", "appInit", "checkPermissions", "getStatusBarHeight", "setTabMiniIcon", "getUserInfo", "pauseAudioView", "sendBuriedPoint", "openErrorDebug", "upGradeVersion", "getLocalData");
if (e.__rocAndroid) {
e.__isAndroid = true
e.__isIOS = false
......@@ -96,7 +67,7 @@
e.__isIOS = false
e.__isWeb = true
}
if(window.__isIOS){
if (window.__isIOS) {
rocNative.appInit()
}
}(window);
<!-- 学分:个人信息编辑页面 -->
<template>
<section class="credit-detail-wrapper">
<CommonNavbar
:bgColor="bgColor"
v-show="isShowNavbar"
:isBlack="isBlack"
:title="navTitle"
:isFixNavbar="isFixNavbar"
:burialPoint="pointStyle"
borderStyle="0px solid #fff"
:backMethod="from"
></CommonNavbar>
<section class="info">
<div class="credit-basic">
<ul>
<li>
<span>项目名称</span>
<span>{{formData.projectName}}</span>
</li>
<li>
<span>学分等级</span>
<span>{{formData.grade}}</span>
</li>
<li>
<span>学分</span>
<span>{{formData.value}}</span>
</li>
<li>
<span>申请范围</span>
<span>{{formData.applyRange}}</span>
</li>
<li>
<span>状态</span>
<!-- <span :class="statusStyle">{{statusText}}</span> -->
<span :class="statusStyle">{{formData.statusDesc}}</span>
</li>
</ul>
<div v-show="needShowTips" class="tips">
<span class="triangle"></span>
{{formData.tips}}
<!-- 您提交的信息不准确,请重新提交或联系云鹊医官方客服 -->
</div>
</div>
<CommonSpliteLine v-if="needShowUserInfo"></CommonSpliteLine>
<div v-if="needShowUserInfo" class="credit-user">
<ul>
<li>
<span>申请人</span>
<span>{{formData.name}}</span>
</li>
<li>
<span>身份证号</span>
<span>{{formData.idCardNumber}}</span>
</li>
<li>
<span>继续医学教育IC卡号</span>
<span>{{formData.icCardNumber}}</span>
</li>
<li>
<span>申请时间</span>
<span>{{formData.applyTime | formatTime('{y}年{m}月{d}日 {h}:{i}:{s}')}}</span>
</li>
</ul>
</div>
</section>
<CommonButton v-if="needShowBtn" @btnClick="btnClick" :btnText="btnText"></CommonButton>
<CommonBottomInfo></CommonBottomInfo>
<CommonDialog
:isShowDialog="isShowDialog"
:isSingle="isSingle"
:cancleBtnText="cancleBtnText"
:confirmBtnText="confirmBtnText"
:content="dialogContent"
@handlerAction="handlerAction"
/>
</section>
</template>
<script>
import CommonNavbar from "@/components/common/common-navbar";
import CommonButton from "@/components/cme/common-button";
import CommonSpliteLine from "@/components/common/common-splite-line";
import CommonBottomInfo from "@/components/cme/common-bottom-info";
import CommonDialog from "@/components/cme/common-dialog";
import { gotoPage } from "@/utils/index";
export default {
components: {
CommonNavbar,
CommonButton,
CommonSpliteLine,
CommonBottomInfo,
CommonDialog
},
data() {
return {
isSingle: false,
dialogContent: "", // 弹框内容
confirmBtnText: "", // 弹框按钮
cancleBtnText: "",
isShowDialog: false,
from: "native",
isBlack: true,
bgColor: "#fff",
navTitle: "学分详情",
isShowNavbar: true,
isFixNavbar: false,
pointStyle: "activity",
// buttonStyleType: "primary",
// 我的进度状态 0: 未学习 1: 学习中 2:待申请 3:已申请审核中 4:审核失败 5:审核成功 6: 已获证
// 1: 学习中 continue 不显示用户信息 不显示提示信息
// 2: 学习已经完成 completed 不显示用户信息 不显示提示信息
// 3:审核中 continue 显示用户信息 预计2019年12月10日前有反馈结果
// 4: 审核失败 error 显示用户信息 您提交的信息不准确,请重新提交或联系云鹊医官方客服
// 5: 审核通过 continue 不显示用户信息 不显示提示信息
status: 1,
statusStyle: "continue",
statusText: "学习中",
// statusDescText: "",
needShowTips: false,
needShowUserInfo: false,
needShowBtn: false,
btnText: "去学习",
formData: {
applyAgain: 0,
applyRange: "",
applyTime: "",
creditId: 0,
grade: "",
icCardNumber: "",
idCardNumber: "",
name: "",
projectName: "",
status: 1,
statusDesc: "",
tips: "",
value: 0,
},
projectId: 1,
token: "9B62E5874DA94979A54DB3E9DFC1443F"
};
},
created() {
let _this = this;
window.__getUserInfoInCDetail = function(param) {
_this.token = param.userToken;
_this.getLatestApplyRecord();
};
window.__refresh = function() {
_this.getUserInfo();
};
// this.projectId =
// (this.$route && this.$route.query && this.$route.query.projectId) || this.projectId;
this.from =
(this.$route && this.$route.query && this.$route.query.from) || this.from;
this.creditId =
(this.$route && this.$route.query && this.$route.query.creditId) || 393;
this.token =
(this.$route && this.$route.query && this.$route.query.token) ||
this.token;
this.status =
(this.$route && this.$route.query && this.$route.query.status) || 1; // 测试用
if (__isWeb) {
this.getLatestApplyRecord();
} else {
this.getUserInfo();
}
},
methods: {
// 获取用户信息
getUserInfo() {
rocNative.getUserInfo({
__funcName: "__getUserInfoInCDetail"
});
},
// 根据状态显示不同的文本
statusChanged(status) {
this.needShowUserInfo = false;
this.needShowTips = false;
// this.statusDescText = '';
this.statusText = "学习中";
this.statusStyle = "continue";
this.needShowBtn = true;
this.btnText = "去学习";
if (status == 1) {
} else if (status == 2) {
this.statusText = "学习已经完成";
this.btnText = "申请学分";
this.statusStyle = "completed";
} else if (status == 3) {
this.needShowUserInfo = true;
this.needShowTips = true;
this.needShowBtn = false;
this.statusText = "审核中";
// this.statusDescText = '预计2019年12月10日前有反馈结果';
} else if (status == 4) {
this.needShowUserInfo = true;
this.needShowTips = true;
this.statusText = "审核失败";
this.statusStyle = "error";
// 如果applyAgain为0时,则不显示按钮
if(this.formData.applyAgain == 0) {
this.needShowBtn = false;
}
this.btnText = "重新提交";
// this.statusDescText = '您提交的信息不准确,请重新提交或联系云鹊医官方客服';
} else if (status == 5) {
this.needShowUserInfo = true;
this.needShowBtn = false;
this.statusText = "审核通过";
}
},
btnClick() {
if (this.formData.status == 1 || this.formData.status == 0) {
gotoPage(this, `cme/#/coop?id=${this.projectId}`);
// 判断是否加入机构
// 判断加入机构与学习范围是否一致
// this.permission();
// alert("去学习");
this.$sendBuriedData({
component_tag: `416#212005#${this.creditId}#`
});
} else if (this.formData.status == 2) {
// alert("调用申请学分的接口");
this.$sendBuriedData({
component_tag: `416#212004#${this.creditId}#`
});
this.applicationCredit();
} else if (this.formData.status == 4) {
// alert("调用重新提交的接口");
this.$sendBuriedData({
component_tag: `211#211006#${this.projectId}`
});
gotoPage(this, `cme/#/credit-edit?creditId=${this.creditId}`);
}
},
// 弹框按钮事件
handlerAction(data) {
// alert(data)
if(this.formData.status == 1) {
gotoPage(this, `cme/#/coop?id=${this.projectId}`);
} else if(this.formData.status == 2) {
if (window.__isWeb) {
this.$router.back(-1);
} else {
rocNative.goBack();
}
}
},
// 立即申请学分
applicationCredit() {
let _this = this;
let param = {
creditId: _this.creditId || 1,
token: _this.token,
setEntry: true
};
_this.POST("cme/credit/applyCheck", param).then(res => {
if (res.code == "000000") {
gotoPage(_this, `cme/#/credit-edit?creditId=${this.creditId}`);
} else if (res.code == "219004" || res.code == "219005") {
// 未加入机构 219004 未身份认证 219005 不在申请范围 219012
let params = {
__funcName: "__checkPermissions",
permCode: "009014"
};
rocNative.checkPermissions(params);
} else if (res.code == "219012") {
this.dialogContent = `您的所属机构不在可申请范围内`;
// this.dialogContent = `您的所属机构不在可申请范围(${_this.formData.applyRange})内`;
this.cancleBtnText = "我知道了";
this.isShowDialog = true;
this.isSingle = true;
}
});
},
// 最后一次提交信息
getLatestApplyRecord() {
let param = {
token: this.token,
setEntry: true
};
this.POST("cme/credit/latestApplyRecord/" + this.creditId, param).then(
res => {
this.formData = res.data;
this.projectId = this.formData.projectId;
this.statusChanged(this.formData.status);
// this.statusChanged(5);
}
);
}
}
};
</script>
<style lang="scss" scoped>
@import "../style/mixin";
.credit-detail {
&-wrapper {
.tips {
position: relative;
top: 0;
left: 0;
margin: px2rem(10px) 0 px2rem(10px);
border-radius: px2rem(4px);
padding: px2rem(10px);
font-weight: 400;
font-size: px2rem(12px);
// height: px2rem(32px);
line-height: px2rem(12px);
color: #979899;
background: #f8f9fa;
.triangle {
position: absolute;
top: px2rem(-5px);
transform: rotateZ(45deg);
right: px2rem(10px);
width: px2rem(10px);
height: px2rem(10px);
background: #f8f9fa;
}
}
.info {
font-size: px2rem(14px);
font-weight: 400;
margin-bottom: px2rem(50px);
.credit-basic {
margin: px2rem(20px) px2rem(15px);
}
.credit-user {
margin: px2rem(20px) px2rem(15px);
}
ul {
li {
display: flex;
flex-direction: row;
justify-content: space-between;
height: px2rem(30px);
line-height: px2rem(30px);
span {
&:nth-child(1) {
color: #979899;
}
&:nth-child(2) {
color: #373839;
}
&.continue {
color: #449284;
}
&.error {
color: #fb5b52;
}
&.completed {
color: #373839;
}
}
}
}
}
}
}
</style>
<!-- 学分:个人信息编辑页面 -->
<template>
<section class="credit-edit-wrapper">
<CommonNavbar
:bgColor="bgColor"
v-show="isShowNavbar"
:isBlack="isBlack"
:title="navTitle"
:isFixNavbar="isFixNavbar"
:burialPoint="pointStyle"
borderStyle="0px solid #fff"
:backMethod="from"
></CommonNavbar>
<van-cell-group class="group">
<van-field label-width="150" disabled v-model="formData.name" label="姓名" placeholder="" />
<van-field label-width="150" v-model="formData.idCardNumber" label="身份证号" maxlength=18 placeholder="请填写您的真实身份证号" />
<van-field label-width="150" v-model="formData.icCardNumber" label="继续医学教育IC卡号" maxlength=9 placeholder="请填写您的IC卡号" />
</van-cell-group>
<div class="tips">
您的身份证号将用于生成项目学分证书对应的编号,请确保您所填写的身份证号的真实性
</div>
<CommonButton :type="buttonStyleType" @btnClick="applyCredit" btnText="提交"></CommonButton>
<CommonDialog content="提交成功" subContent="您可在“个人中心-证书与学分”中查看审核结果" cancleBtnText="我知道了" isSingle needSubContent :isShowDialog="isShowDialog" @handlerAction="handlerDialogAction"></CommonDialog>
</section>
</template>
<script>
import CommonNavbar from "@/components/common/common-navbar";
import CommonButton from "@/components/cme/common-button";
import CommonDialog from "@/components/cme/common-dialog";
export default {
components: {
CommonNavbar,
CommonButton,
CommonDialog
},
data() {
return {
formData: {
creditId: "",
id: "",
name: "",
idCardNumber: "",
icCardNumber: "",
},
// projectId: "",
token: "9B62E5874DA94979A54DB3E9DFC1443F",
buttonStyleType: 'disabled',
from: "native",
isBlack: true,
bgColor: "#fff",
navTitle: "申请学分",
isShowNavbar: true,
isFixNavbar: false,
pointStyle: "activity",
isShowDialog: false,
creditId: 0
};
},
watch: {
formData: {
handler(newVal) {
let idCardReg = /^[1-9]{1}[0-9]{14}$|^[1-9]{1}[0-9]{16}([0-9]|[xX])$/;
let icCardReg = /^[a-zA-Z0-9]{9}$/;
if(newVal.name && newVal.idCardNumber && newVal.icCardNumber
&& idCardReg.test(newVal.idCardNumber)
&& icCardReg.test(newVal.icCardNumber)) {
this.buttonStyleType = 'primary';
} else {
this.buttonStyleType = 'disabled';
}
},
deep: true
}
},
created() {
let _this = this;
window.__getUserInfoInCEdit = function(param) {
_this.token = param.userToken;
_this.getUserInfoByToken();
_this.getLatestApplyRecord();
};
window.__refresh = function() {
_this.getUserInfo();
};
// 前一页面传creditId
// this.projectId = this.$route && this.$route.query && this.$route.query.projectId || '';
this.from = this.$route && this.$route.query && this.$route.query.from || this.from;
this.creditId = this.$route && this.$route.query && this.$route.query.creditId || this.creditId;
// this.formData.id = this.projectId;
this.formData.creditId = this.creditId;
this.token = this.$route && this.$route.query && this.$route.query.token || this.token || ''
if (__isWeb) {
this.getUserInfoByToken();
this.getLatestApplyRecord();
} else {
this.getUserInfo()
}
},
methods: {
getUserInfo() {
rocNative.getUserInfo({
__funcName: "__getUserInfoInCEdit"
});
},
// 提交申请
applyCredit() {
let param = {
...this.formData,
token: this.token,
setEntry: true
};
this.POST("cme/credit/apply", param).then(res => {
if(res.code == '000000') {
this.isShowDialog = true
} else {
this.$toast({message: res.message});
}
})
},
// 最后一次提交信息:获取用户的idCardNumber
getLatestApplyRecord() {
let param = {
token: this.token,
setEntry: true
};
this.POST("cme/credit/latestApplyRecord/" + this.creditId, param).then(res => {
this.formData.icCardNumber = res.data.icCardNumber;
})
},
// 根据token获取用户信息
getUserInfoByToken() {
let param = {
token: this.token,
setEntry: true
};
this.GET("cme/credit/doctor/info", param).then(res => {
this.formData.name = res.data.name;
this.formData.idCardNumber = res.data.card;
// this.isShowDialog = true
})
},
// 显示提交成功的提示信息
handlerDialogAction(type) {
this.isShowDialog = false;
// 跳转到前一页面
if (window.__isWeb) {
this.$router.back(-1);
} else {
rocNative.goBack();
}
},
},
};
</script>
<style lang="scss">
@import "../style/mixin";
.credit-edit-wrapper {
.group {
margin: 10px 15px;
}
.tips {
margin: px2rem(10px) px2rem(15px) px2rem(50px);
font-weight: 400;
font-size: px2rem(14px);
line-height: px2rem(21px);
color: #979899;
}
.van-cell__title .van-field__label {
line-height: px2rem(30px) !important;
height: px2rem(20px) !important;
}
.van-cell {
padding: px2rem(20px) 0 !important;
font-size: px2rem(15px) !important;
color: #373839 !important;
}
.van-cell__title span {
font-weight: 400 !important;
}
.van-field__body {
line-height: px2rem(30px) !important;
height: px2rem(20px) !important;
}
.van-field__control {
padding-top: px2rem(8px) !important;
line-height: px2rem(20px) !important;
font-size: px2rem(15px);
}
}
</style>
\ No newline at end of file
<template>
<div>
<header class="header">
<span>兑换须知</span>
<!-- <img src="../images/cme/close.png" alt=""> -->
</header>
<div class="exchange-tips-wrapper fixed">
<div class="content">
<p class="title">一、云鹊医课程的版权归属何方?</p>
<p class="text">云鹊医平台所有的在线课程版权归云鹊医所有,任何以录屏或其它方式进行的盗版或盗版售卖行为均属侵权行为,一经发现,云鹊医将采取最严厉的措施进行打击并维权,包括但不限于:起诉侵权人、发函侵权人学校或单位、云鹊医全平台公示侵权人所有信息、在一定时间内或永久限制该侵权人购买、观看课程的权利。</p>
<p class="title">二、我应该如何兑换课程?</p>
<p class="text">点击课程页面上的“点击兑换”,即可通过云鹊豆兑换等值的课程。如果云鹊豆不足,可以通过云鹊豆中心的任务列表赚取。目前仅支持完整课程的兑换,暂不支持单独章节的兑换。在云鹊豆系统上线以前、用户已经加入学习的课程不受影响。</p>
<p class="title">三、兑换课程以后如何看课?</p>
<p class="text">打开云鹊医app,进入“个人中心”- “我的课程”,在“学习中”即可看到兑换成功的课程。课程兑换成功以后,用户可以永久收看该门课程。</p>
<p class="title">四、我兑换课程以后后悔了,可以退课吗?</p>
<p class="text">目前云鹊医平台不支持通过云鹊豆兑换的课程退货,即不支持退回云鹊豆的动作,所以请在兑换成功前自行确认是否要用云鹊豆兑换该课程。对于用户自主消费云鹊豆的行为产生的云鹊豆减少,云鹊医平台不作后续处理。</p>
<p class="title">五、其它提示:</p>
<p class="text">由于学员较多,如有问题请直接留言,客服会在24小时以内回复,请谅解。 如果事件过于紧急,请联系云鹊医客服电话:4009208877。</p>
</div>
</div>
</div>
</template>
<style lang="scss" scoped>
@import "../style/mixin";
.header {
width: 100%;
position: fixed;
top: 0;
left: 0;
text-align: center;
padding: px2rem(26px) 0 px2rem(20px);
font-size: px2rem(18px);
line-height: px2rem(18px);
color: #333333;
background: #fff;
// img {
// position: absolute;
// right: px2rem(20px);
// width: px2rem(13px);
// height: px2rem(13px);
// }
}
.exchange-tips-wrapper {
padding-top: px2rem(40px);
margin: px2rem(20px);
font-size: px2rem(16px);
.content {
.title {
line-height: px2rem(18px);
font-weight: 700;
color: #373839;
margin: px2rem(12px) 0;
}
.text {
color: #676869;
// text-align-last: justify;
text-align: justify;
}
}
}
</style>
\ No newline at end of file
......@@ -22,7 +22,7 @@
<td @click="changeTab(2)" :class="{'active': tabIndex === 2}">
<div class="tap-title">
<!-- <span>其它项目</span> -->
<span :style="{'color': tabIndex === 2 ? '#333' : '#999'}">其它项目</span>
<span :style="{'color': tabIndex === 2 ? '#333' : '#999'}">全部项目</span>
<span></span>
</div>
</td>
......@@ -30,10 +30,20 @@
</table>
<article class="page-content-list">
<section v-if="tabIndex === 1">
<CoopListItem :paramData="joinProjectList" :coopType="1" :tabTo="1" :isShow="isShow"></CoopListItem>
<CoopListItem
:paramData="joinProjectList"
:coopType="1"
:tabTo="1"
:isShow="isShow"
:userMobile="userMobile"></CoopListItem>
</section>
<section v-if="tabIndex === 2">
<CoopListItem :paramData="otherProjectList" :coopType="1" :tabTo="2" :isShow="isShow"></CoopListItem>
<CoopListItem
:paramData="otherProjectList"
:coopType="1"
:tabTo="2"
:isShow="isShow"
:userMobile="userMobile"></CoopListItem>
</section>
</article>
</section>
......@@ -58,15 +68,15 @@ export default {
showLoading: false,
bgColor: "#fff",
isShow: false,
navTitle: "专项合作",
navTitle: "CME项目",
compTitle: "组件名称",
isShowNavbar: true,
isFixNavbar: false,
pointStyle: "activity",
descTitle: "规定从何处开始选取。如果是负数",
tabIndex: 1,
joinProjectList: [],
otherProjectList: [],
joinProjectList: [], // 我的项目
otherProjectList: [], // 全部项目
token: "",
toastTitle: "",
userMobile: ""
......@@ -96,11 +106,18 @@ export default {
_this.getCoopData();
}
window.__refresh = function() {
_this.tabIndex = _this.projectTabIndex;
// _this.getUserInfo();
//_this.tabIndex = _this.projectTabIndex;
_this.getUserInfo();
// document.documentElement.scrollTop = 0;
// document.body.scrollTop = 0;
};
// 打开页面埋点
this.$sendBuriedData({
action: '打开页面',
component_tag: '210#0#0#0'
});
},
mounted() {
var _this = this;
......@@ -123,9 +140,12 @@ export default {
});
},
changeTab(index) {
let tag = index == 1 ? '089#400079' : '089#400080';
let tag = index == 1 ? '210#210001#0' : '210#210001#1';
this.tabIndex = index;
if(index == 1 && !this.userMobile) {
rocNative.gotoLogin();
this.tabIndex = 2;
}
this.$sendBuriedData({
component_tag: tag
});
......@@ -142,45 +162,48 @@ export default {
let cachedOtherProjectList = []
_this.otherProjectList = []
_this.showLoading = true;
this.GET("portal/portalApp/queryProjectCooperationInfoV2", param).then(
this.GET("cme/project/list", param).then(
res => {
_this.showLoading = false;
if (res.code == "000000") {
let oldProjects1 = [];
let oldProjects2 = [];
for(let i=0;i<res.data.oldProjects.length;i++) {
if(res.data.oldProjects[i].roleFlag == 1) {
oldProjects1.push(res.data.oldProjects[i]);
} else if (res.data.oldProjects[i].roleFlag == 0) {
oldProjects2.push(res.data.oldProjects[i]);
}
}
// let oldProjects1 = [];
// let oldProjects2 = [];
// for(let i = 0; i < res.data.oldProjects.length; i++) {
// if(res.data.oldProjects[i].roleFlag == 1) {
// oldProjects1.push(res.data.oldProjects[i]);
// } else if (res.data.oldProjects[i].roleFlag == 0) {
// oldProjects2.push(res.data.oldProjects[i]);
// }
// }
// console.log('项目1',oldProjects1,'项目2',oldProjects2);
// cachedJoinProjectList = res.data.myProjectList;
// _this.joinProjectList = res.data.myProjectList;
// _this.otherProjectList = res.data.otherProjectList;
cachedJoinProjectList = _this.handleOldProject(
oldProjects1,
res.data.myProjectList
);
cachedOtherProjectList = _this.handleOldProject(
oldProjects2,
res.data.otherProjectList
);
cachedJoinProjectList = res.data.myCMEProjectListDtoList;
cachedOtherProjectList = res.data.allCMEProjectListDtoList;
_this.joinProjectList = res.data.myCMEProjectListDtoList;
_this.otherProjectList = res.data.allCMEProjectListDtoList;
// cachedJoinProjectList = _this.handleOldProject(
// oldProjects1,
// res.data.myProjectList
// );
// cachedOtherProjectList = _this.handleOldProject(
// oldProjects2,
// res.data.otherProjectList
// );
// 如果用户已经登陆,则将"至今"的几个项目移到我的列表中
if(_this.userMobile) {
cachedOtherProjectList.map(item => {
if(item.projectName && item.projectName.indexOf('国家基本公共卫生服务项目基层高血压管理办公室') >= 0) {
cachedJoinProjectList.unshift(item);
} else {
_this.otherProjectList.push(item);
}
})
// cachedOtherProjectList.map(item => {
// if(item.projectName && item.projectName.indexOf('国家基本公共卫生服务项目基层高血压管理办公室') >= 0) {
// cachedJoinProjectList.unshift(item);
// } else {
// _this.otherProjectList.push(item);
// }
// })
_this.tabIndex = 1;
} else {
_this.otherProjectList = cachedOtherProjectList
_this.tabIndex = 2;
// _this.otherProjectList = cachedOtherProjectList
}
_this.joinProjectList = cachedJoinProjectList;
// _this.joinProjectList = cachedJoinProjectList;
if (_this.joinProjectList && _this.joinProjectList.length === 0) {
_this.tabIndex = 2;
}
......@@ -208,6 +231,7 @@ export default {
</script>
<style lang="scss" scoped>
@import "../style/mixin";
.page-content {
&-table {
position: fixed;
......
......@@ -2,110 +2,191 @@
<!-- 组件详情页面:模块列表及其下面的元件列表 -->
<div class="page-container-merge">
<CommonNavbar
id="header"
:bgColor="bgColor"
v-show="isShowNavbar"
:isBlack="isBlack"
:isShowShare="isShowShare"
:title="navTitle"
:shareTitle="project.projectName"
:shareTitleInfo="project.projectIntro"
:isFixNavbar="isFixNavbar"
:burialPoint="pointStyle"
borderStyle="0px solid #fff"
:backMethod="from"
></CommonNavbar>
<div class="page-content list-container">
<!-- <img
v-if="bannerType == 1"
class="banner-img"
src="https://files.yunqueyi.com/image/jpeg/common/20190214153449966.jpg"
>-->
<!-- <div v-if="bannerType == 1" class="page-content-img-container"> -->
<!-- banner图片 -->
<div v-if="bannerType == 1" class="page-content-img-container">
<img class="banner-img" :src="attachmentUrl">
<img v-show="pStatus == 1" class="banner-img-1" src="../images/status-join.png">
<img v-show="pStatus == 5" class="banner-img-5" src="../images/status-keep-on.png">
<img v-show="pStatus == 10" class="banner-img-10" src="../images/status-end.png">
<img class="banner-img" :src="attachmentUrl" />
<!-- <img v-show="project.status == 1" class="banner-img-1" src="../images/status-join.png" /> -->
<img v-show="project.status == 5" class="banner-img-5" src="../images/status-keep-on.png" />
<img v-show="project.status == 10" class="banner-img-10" src="../images/status-end-cme.png" />
</div>
<!-- <CommonBannerVideo v-if="bannerType == 1" :videoOptions="videoOptions"></CommonBannerVideo> -->
<!-- banner视频 -->
<CommonTcPlayer v-if="bannerType == 2" style="flex" :options="videoOptions"></CommonTcPlayer>
<NoticeItem :clientType="clientType" v-show="isShowNoticeItem" :content="noticeData.noticeTitle" @clickNoticeItem="clickNoticeItem"></NoticeItem>
<CommonDescription :descTitle="projectName" :value="projectIntro"></CommonDescription>
<CommonSpliteLine></CommonSpliteLine>
<!-- <CellListItem :paramData="contentList" :moduleName="moduleName"></CellListItem> -->
<CertShow v-if="projectStatus === 2"></CertShow>
<CellListDetail v-if="visibleFlag == 1" :projectComponent="projectComponentDTOS" :paramData="contentList" :moduleName="moduleName" :actionList="actionList" :detailNum="detailNum" :courseRequire="courseRequire"></CellListDetail>
<NoPermContent v-if="visibleFlag == 2"></NoPermContent>
<!-- 项目标题 -->
<CommonDescription
:projectName="project.projectName"
:studyNum="project.studyNum"
:subject="project.subject"
/>
<!-- 步骤条 -->
<CmeStep
:currentProgress="project.currentProgress"
:studyProgress="project.studyProgress"
:credit="project.credit"
:creditId="project.creditId"
:certificateUrl="project.certificateUrl"
:inScope="project.inScope"
:projectId="projectId"
:certificateId="project.certificateId"
@applicationCredit="applicationCredit"
/>
<!-- 简介和目录 -->
<div class="intro-catalogue-container">
<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="jumpCatalogue">目录</span>
</div>
<div id="intro-content" class="intro-content">
<BasicInfo
:projectNo="project.projectNo"
:credit="project.credit"
:level="project.level"
:scope="project.scope"
:startDate="project.startDate"
:endDate="project.endDate"
:organName="project.organName"
:remind="project.remind"
:projectCredit="project.projectCredit"
/>
<LearnKnow :mustKnow="project.mustKnow"></LearnKnow>
<CommonSpliteLine></CommonSpliteLine>
<ItemIntro :textContent="textContent" @itemIntroText="itemIntroText"></ItemIntro>
<ItemLeader
:projectLeader="projectLeader"
:leaderText="leaderText"
@changeLeaderText="changeLeaderText"/>
<TeacterIntro :doctorList="doctorList"></TeacterIntro>
</div>
<CommonSpliteLine></CommonSpliteLine>
<div id="catalogue-content" class="catalogue-content">
<div class="catalogue-title">目录</div>
<CellListDetail
:projectComponent="projectComponentDTOS"
:actionList="actionList"
:detailNum="detailNum"
:courseRequire="courseRequire"
/>
</div>
</div>
</div>
<Loading v-show="showLoading"/>
<PopNotice v-show="isShowNotice" @clickNotice="clickNotice" :noticeData="noticeData"></PopNotice>
<Loading v-show="showLoading" />
<!-- 弹框 -->
<CommonDialog
:isShowDialog="isShowDialog"
:isSingle="isSingle"
:cancleBtnText="cancleBtnText"
:confirmBtnText="confirmBtnText"
:content="dialogContent"
@handlerAction="handlerAction"
/>
</div>
</template>
<script>
import CommonNavbar from "@/components/common/common-navbar";
import CommonDescription from "@/components/common/common-description";
import CommonSpliteLine from "@/components/common/common-splite-line";
import CommonTitle from "@/components/common/common-title";
import CertShow from "@/components/business/cert-show";
// import CellListItem from "@/components/business/cell-list-item";
import CellListDetail from "@/components/business/cell-list-detail";
import NoPermContent from "@/components/business/no-perm-content";
import CommonBannerVideo from "@/components/common/common-banner-video";
// import NoPermContent from "@/components/business/no-perm-content";
// import CommonBannerVideo from "@/components/common/common-banner-video";
import CommonTcPlayer from "@/components/common/common-tcplayer";
import Loading from "@/components/common/common-loading";
import CmeStep from "@/components/cme/cme-step";
import BasicInfo from "@/components/cme/basic-info";
import LearnKnow from "@/components/cme/learn-know";
import ItemIntro from "@/components/cme/item-intro";
import ItemLeader from "@/components/cme/item-leader";
import TeacterIntro from "@/components/cme/teacter-intro";
import CommonDialog from "@/components/cme/common-dialog";
import { getWebPageUrl, gotoPage } from "@/utils/index";
import { mapGetters, mapActions } from "vuex";
import vueFilters from '@/utils/filter';
import PopNotice from "@/components/business/pop-notice";
import NoticeItem from "@/components/business/notice-item";
import vueFilters from "@/utils/filter";
export default {
data() {
return {
// token: "9B62E5874DA94979A54DB3E9DFC1443F",
isWeb: window.__isWeb,
textContent: "",
leaderText: "",
pageTitle: "",
isShowShare: true,
premissionFlag: false,
isSingle: false,
dialogContent: "", // 弹框内容
confirmBtnText: "", // 弹框按钮
cancleBtnText: "",
isShowDialog: false,
tabFlag: true, // 显示目录还是简介
fixedFlag: false, // 目录和简介是否固定
project: {
credit: "", // 学分
creditId: 0, // 学分Id
level: "", // 项目等级
scope: "", // 申请范围
remind: "", // 在不在范围提醒
startDate: 0, // 开始时间
endDate: 0, // 结束时间
organName: "", // 发起机构
projectName: "", // 项目名称
projectNo: "", // 项目编号
currentProgress: 0, // 项目进度
projectIntro: "", // 项目介绍
mustKnow: "", // 学习须知
studyNum: 0, // 学习人数
studyProgress: "0%", // 学习进度
subject: "", // 学科
status: 0, // 项目状态 5是进行中 10是已结束
certificateUrl: "", // 证书url
inScope: 0, // 是否在范围内判断
projectCredit: "", // 学分
certificateId: "0"
},
projectLeader: {},
doctorList: [],
from: "inner",
isBlack: false,
showLoading: false,
projectId: 1,
componentId: 1,
moduleId: 1,
projectId: "1",
//componentId: 1,
//moduleId: 1,
contentList: [],
moduleName: "",
bannerType: 1,
//moduleName: "",
bannerType: 1, // 1 图片 2视频
videoOptions: {
mp4: "",
// mp4: "https://pica-pro.oss-cn-shanghai.aliyuncs.com/2019/03/05/movie.mp4",
// "mp4": "http://1258717429.vod2.myqcloud.com/24a74910vodcq1258717429/7c37c18f5285890786204547811/9BFIyaoXYAcA.mp4",
// "m3u8": "http://2157.liveplay.myqcloud.com/2157_358535a.m3u8",
// "flv": "http://2157.liveplay.myqcloud.com/live/2157_358535a.flv", //增加了一个flv的播放地址,用于PC平台的播放 请替换成实际可用的播放地址
autoplay: false, //iOS下safari浏览器,以及大部分移动端浏览器是不开放视频自动播放这个能力的
coverpic: require("../images/video-cover.png"),
width: "415", //视频的显示宽度,请尽量使用视频分辨率宽度
height: "210" //视频的显示高度,请尽量使用视频分辨率高度
},
projectStatus: 1, //1没有获得证书 2是获得全部证书
pStatus: 0, // 项目状态 1是参加中 5是进行中 10是已结束
projectIntro: "",
projectName: "",
//projectStatus: 1, //1没有获得证书 2是获得全部证书
attachmentUrl: require("../images/banner-default.png"),
bgColor: "none",
navTitle: "",
compTitle: "组件名称",
navTitle: "项目详情",
// compTitle: "组件名称",
isShowNavbar: true,
isFixNavbar: true,
pointStyle: "activity",
descTitle: "规定从何处开始选取。如果是负数",
description:
"必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置那么它规定从数组尾部开始算起的位置那么它规定从数组尾部开始算起的位置那么它规定从数组尾部开始算起的位置。也就是说那么它规定从数组尾部开始算起的位置。也就是说那么它规定从数组尾部开始算起的位置。也就是说那么它规定从数组尾部开始算起的位置。也就是说那么它规定从数组尾部开始算起的位置。" +
" 也就是说那么它规定从数组尾部开始算起的位置。也就是说,必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推第二个元素。",
projectComponentDTOS: [],
actionList: [],
detailNum: 0,
visibleFlag: 0,
courseRequire: 0,
noticeData: {
noticeContent: '',
noticeId: '',
noticeTitle: '',
readFlag: 1 // 已读标识:1已读 2未读
},
isShowNotice: false,
isShowNoticeItem: false,
clientType: 0
};
},
......@@ -113,16 +194,16 @@ export default {
CommonNavbar,
CommonDescription,
CommonSpliteLine,
CommonTitle,
CertShow,
// CellListItem,
CellListDetail,
NoPermContent,
CommonBannerVideo,
Loading,
CommonTcPlayer,
PopNotice,
NoticeItem
CmeStep,
BasicInfo,
LearnKnow,
ItemIntro,
ItemLeader,
TeacterIntro,
CommonDialog
},
computed: {
...mapGetters(["userInfo"])
......@@ -130,41 +211,32 @@ export default {
created() {
let _this = this;
this.from = this.$route.query.from || this.from || "native";
this.projectId = this.$route.query.id;
this.componentId = this.$route.query.componentId;
this.moduleId = this.$route.query.moduleId;
this.moduleName = this.$route.query.moduleName;
this.projectId = this.$route.query.id || 1;
this.courseRequire = this.$route.query.courseRequire;
// window.__refresh = function() {
// console.log('created __refresh');
// // _this.getContentList(_this.moduleId);
// _this.getProjectParticularsV2();
// };
window.__getUserInfo64Comp = function(param) {
// alert('__getUserInfo64Comp');
// console.log('__getUserInfo64Comp');
_this.token = param.userToken;
_this.setUserInfo(param);
_this.checkToken();
// _this.getContentList(_this.moduleId);
// _this.getComponentInfoById(_this.componentId);
_this.getCoopNoticeInfo()
_this.getProjectParticularsV2();
};
_this.getUserInfo();
if (__isWeb && process.env.BUILD_ENV == "development") {
let param = {};
__getUserInfo64Comp(param);
// if (__isWeb && process.env.BUILD_ENV == "development") {
// let param = {};
// __getUserInfo64Comp(param);
// }
if (__isWeb) {
_this.getProjectParticularsV2();
}
// alert('mounted __before');
window.__refresh = function() {
// alert('mounted __refresh');
// console.log('mounted __refresh');
// _this.getProjectParticularsV2();
_this.getUserInfo();
_this.getUserInfo();
};
// 打开页面埋点
this.$sendBuriedData({
action: "打开页面",
component_tag: `211#0#${this.projectId}#0`
});
},
mounted() {
window.addEventListener("scroll", this.scrollFun);
......@@ -181,32 +253,144 @@ export default {
__funcName: "__getUserInfo64Comp"
});
},
// 获取单个模块信息
getComponentInfoById(componentId) {
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是否失效校验
checkToken() {
let _this = this;
let param = {
token: _this.userInfo.userToken || _this.token,
setEntry: true
};
this.GET("campaign/admin/task/checkToken", param).then(res => {
if (res.code !== "000000") {
//未登录 跳转登录页
console.log("跳登录");
rocNative.gotoLogin();
} else {
// if (!_this.premissionFlag) {
// _this.premissionFlag = true;
// _this.permission(); // 提示是否有机构和在申请范围内
// }
}
});
},
//(判断是否加入机构,是否为认证用户,是否在申请范围内)
permission() {
let _this = this;
let param = {
id: _this.projectId,
creditId: _this.project.creditId,
token: _this.userInfo.userToken || this.token,
setEntry: true
};
_this.NEW_POST("cme/credit/applyCheck", param).then(res => {
if (res.code == "219004" || res.code == "219012") {
// 未加入机构 219004 未身份认证 219005 不在申请范围 219012
this.dialogContent = `该项目仅对${_this.project.scope}的用户开放`;
this.cancleBtnText = "我知道了";
this.isShowDialog = true;
this.isSingle = true;
} else {
this.isShowDialog = false;
}
});
},
// 立即申请学分
applicationCredit() {
let _this = this;
let param = {
componentId: componentId,
token: _this.userInfo.userToken,
id: _this.projectId,
creditId: _this.project.creditId,
token: _this.userInfo.userToken || this.token,
setEntry: true
};
this.GET("portal/portalApp/component", param).then(res => {
_this.NEW_POST("cme/credit/applyCheck", param).then(res => {
if (res.code == "000000") {
_this.attachmentUrl = res.data.imageUrl;
_this.projectIntro = res.data.introduce;
_this.projectName = res.data.name;
gotoPage(
_this,
`cme/#/credit-edit?creditId=${_this.project.creditId}`
);
} else if (res.code == "219004" || res.code == "219005") {
// 未加入机构 219004 未身份认证 219005 不在申请范围 219012
let params = {
__funcName: "__checkPermissions",
permCode: "009014"
};
rocNative.checkPermissions(params);
} else if (res.code == "219012") {
this.dialogContent = res.message;
this.cancleBtnText = "我知道了";
this.isShowDialog = true;
this.isSingle = true;
}
});
},
// 获取单个项目信息
getCoopInfo(projectId) {
// 弹框按钮事件
handlerAction(data) {
this.isShowDialog = false;
},
// 锚点到简介
jumpIntro() {
this.tabFlag = true;
this.fixedFlag = true;
const intro = document.getElementById("intro-content");
const title = document.getElementById("content-title");
let h;
if(this.isWeb) {
h = intro.offsetTop - title.offsetHeight;
}else {
h = intro.offsetTop - 75 - title.offsetHeight;
}
window.scrollTo(0, h);
this.isBlack = true;
this.bgColor = "#fff";
this.$sendBuriedData({
component_tag: `211#211007#${this.projectId}`
});
},
// 锚点到目录
jumpCatalogue() {
this.tabFlag = false;
this.fixedFlag = true;
const catalogue = document.getElementById("catalogue-content");
const title = document.getElementById("content-title");
let h;
if(this.isWeb) {
h = catalogue.offsetTop - title.offsetHeight;
}else {
h = catalogue.offsetTop - 85 - title.offsetHeight;
}
window.scrollTo(0, h);
this.isBlack = true;
this.bgColor = "#fff";
this.$sendBuriedData({
component_tag: `211#211008#${this.projectId}`
});
},
// 获取项目详情
getProjectParticularsV2() {
let _this = this;
let param = {
portalProjectId: projectId,
token: _this.userInfo.userToken,
token: _this.userInfo.userToken || this.token,
setEntry: true
};
this.GET("portal/portalApp/queryProjectParticulars", param).then(res => {
// _this.showLoading = true;
this.NEW_GET(`cme/project/${_this.projectId}/info`, param).then(res => {
if (res.code == "000000") {
// 先设置视频URL再显示视频组件 ------------ BEGIN
if (res.data.attachmentType == 2) {
......@@ -215,63 +399,56 @@ export default {
_this.attachmentUrl = res.data.attachmentUrl;
}
_this.bannerType = res.data.attachmentType;
if(_this.bannerType == 2) {
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;
_this.project = res.data;
if(_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.projectLeader = res.data.projectLeader || {};
if(_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.projectStatus = res.data.projectStatus;
_this.projectComponentDTOS = _this.setListData(
res.data.projectComponentDTOS
);
if(!_this.isWeb && !_this.premissionFlag) {
_this.premissionFlag = true;
_this.permission(); // 提示是否有机构和在申请范围内
}
}
//_this.showLoading = false;
});
},
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;
// 项目负责人--详情(收起)
changeLeaderText(data) {
let _this = this;
if(_this.projectLeader.info) {
if(!data.allTextFlag) {
_this.leaderText = _this.projectLeader.info.length > 70 ? _this.projectLeader.info.slice(0, 70) + "..." : this.projectLeader.info;
}else {
_this.leaderText = _this.projectLeader.info;
}
}
console.log('contentList!',list);
return list;
},
// 获取内容列表
getContentList(moduleId) {
// 项目介绍
itemIntroText(data) {
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);
if(_this.project.projectIntro) {
if(!data.allTextFlag) {
_this.textContent = _this.project.projectIntro.length > 70 ? _this.project.projectIntro.slice(0, 70) + "..." : this.project.projectIntro;
}else {
_this.textContent = _this.project.projectIntro;
}
});
},
getHight(data) {
let len = vueFilters.strLength(data.name);
let certificate = data.certificateFlag;
if(len > 30 && certificate == 2) {
return "2";
} else if (len > 30 && certificate != 2) {
return 2;
} else if (len <= 30 && certificate == 2) {
return "1";
} else if(len <= 30 && certificate != 2) {
return 1;
}
},
setListData(data) {
......@@ -279,157 +456,225 @@ export default {
let list = data;
let actionList = [];
let detailNum = 0;
for(let i = 0; i < list.length; i++) {
for(let j=0; j < list[i].portalModuleDTOS.length; j++) {
detailNum ++;
if(list[i].portalModuleDTOS[j].status === 2) {
list[i].portalModuleDTOS[j].value = '共'+list[i].portalModuleDTOS[j].nodeCount + '节';
for (let i = 0; i < list.length; i++) {
for (let j = 0; j < list[i].portalModuleDTOS.length; j++) {
detailNum++;
if (list[i].portalModuleDTOS[j].status === 2) {
list[i].portalModuleDTOS[j].value =
"共" + list[i].portalModuleDTOS[j].nodeCount + "节";
} else {
list[i].portalModuleDTOS[j].value = '尚未开始';
list[i].portalModuleDTOS[j].value = "尚未开始";
}
list[i].portalModuleDTOS[j].disabled = list[i].portalModuleDTOS[j].status === 2 ? false : true;
list[i].portalModuleDTOS[j].disabled =
list[i].portalModuleDTOS[j].status === 2 ? false : true;
//展开项记录
if(list[i].portalModuleDTOS[j].expandStatus == 1) {
if (list[i].portalModuleDTOS[j].expandStatus == 1) {
actionList.push(list[i].portalModuleDTOS[j].expandKey);
}
for(let z = 0; z<list[i].portalModuleDTOS[j].contentList.length ; z++) {
list[i].portalModuleDTOS[j].contentList[z].height = _this.getHight(list[i].portalModuleDTOS[j].contentList[z]);
for (
let z = 0;
z < list[i].portalModuleDTOS[j].contentList.length;
z++
) {
list[i].portalModuleDTOS[j].contentList[z].height = _this.getHight(
list[i].portalModuleDTOS[j].contentList[z]
);
}
}
}
}
_this.actionList = actionList;
_this.detailNum = detailNum;
console.log('list转为:',list,actionList,detailNum);
console.log("list转为:", list, actionList, detailNum);
// list[0].portalModuleDTOS[3].contentList[0].certificateFlag = 2;
// list[0].portalModuleDTOS[3].contentList[1].certificateFlag = 2;
return list;
},
checkToken() {
let _this = this;
let param = {
token: _this.userInfo.userToken,
setEntry: true,
};
this.GET("campaign/admin/task/checkToken", param).then(res => {
if(res.code !== '000000') {
//未登录 跳转登录页
console.log('跳登录');
rocNative.gotoLogin();
}
});
},
getProjectParticularsV2() {
let _this = this;
let param = {
token: _this.userInfo.userToken,
setEntry: true,
portalProjectId: _this.projectId,
};
_this.showLoading = true;
this.NEW_GET("portal/portalApp/queryProjectParticularsV2", param).then(res => {
// _this.showLoading = false;
if (res.code == "000000") {
_this.visibleFlag = res.data.learnableFlag;
// 先设置视频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;
_this.projectStatus = res.data.projectStatus;
_this.projectComponentDTOS = _this.setListData(res.data.projectComponentDTOS);
}
_this.showLoading = false;
});
},
scrollFun() {
let scrollTop =
document.body.scrollTop || document.documentElement.scrollTop;
if (scrollTop > 20) {
this.isBlack = true;
this.bgColor = "#fff";
} else {
this.isBlack = false;
this.bgColor = "none";
getHight(data) {
let len = vueFilters.strLength(data.name);
let certificate = data.certificateFlag;
if (len > 30 && certificate == 2) {
return "2";
} else if (len > 30 && certificate != 2) {
return 2;
} else if (len <= 30 && certificate == 2) {
return "1";
} else if (len <= 30 && certificate != 2) {
return 1;
}
},
clickNotice() {
this.isShowNotice = false
},
clickNoticeItem() {
this.isShowNotice = true
},
// 获取单个项目公告信息
getCoopNoticeInfo() {
let _this = this;
let param = {
projectId: _this.projectId,
token: _this.userInfo.userToken,
setEntry: true
};
}
// 获取单个模块信息
// 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;
// }
// });
// },
this.GET("portal/portalApp/getNotice", param).then(res => {
if (res.code == "000000") {
let cData = res.data
// if(cData.noticeId) {
if(cData.noticeId) {
this.noticeData = cData;
this.isShowNoticeItem = true;
if(cData.readFlag == 2) {
this.isShowNotice = true;
}
}
}
});
},
// 获取单个项目信息
// 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>
<style lang="scss" >
<style lang="scss" scoped>
@import "../style/mixin";
.page-container-merge {
.nav-top .nav-title {
height: px2rem(0px);
padding: px2rem(18px);
}
.banner-img {
display: inherit;
width: px2rem(375px);
height: px2rem(210px);
&-1 {
position: absolute;
left: 0;
top: px2rem(180px);
width: px2rem(76px);
height: px2rem(30px);
.nav-top .nav-title {
height: px2rem(0px);
// padding: px2rem(18px);
}
&-5 {
position: absolute;
left: 0;
top: px2rem(180px);
width: px2rem(76px);
height: px2rem(30px);
.banner-img {
display: inherit;
width: px2rem(375px);
height: px2rem(210px);
&-1 {
position: absolute;
left: 0;
top: px2rem(180px);
width: px2rem(76px);
height: px2rem(30px);
}
&-5 {
position: absolute;
left: 0;
top: px2rem(180px);
width: px2rem(76px);
height: px2rem(30px);
}
&-10 {
position: absolute;
left: 0;
top: px2rem(180px);
width: px2rem(76px);
height: px2rem(30px);
}
}
&-10 {
position: absolute;
left: 0;
top: px2rem(180px);
width: px2rem(148px);
height: px2rem(30px);
.list-container {
// margin-bottom: px2rem(40px);
}
.intro-catalogue-container {
.title {
height: px2rem(50px);
line-height: px2rem(30px);
padding: 0 px2rem(15px);
border-bottom: 1px solid #f0f1f2;
span {
display: inline-block;
line-height: px2rem(15px);
font-size: px2rem(15px);
color: #979899;
padding-right: px2rem(35px);
}
span.focus {
position: relative;
color: #373839;
}
span.focus:after {
content: "";
position: absolute;
left: px2rem(7px);
bottom: px2rem(-14px);
background: #449284;
// border-bottom: px2rem(1px) solid #449284;
width: px2rem(10px);
height: px2rem(3px);
border-radius: px2rem(3px);
}
}
.title.fixed-title-1 {
position: fixed;
left: 0;
top: px2rem(60px);
background: #fff;
width: 100%;
z-index: 999;
}
.title.fixed-title-2 {
position: fixed;
left: 0;
top: px2rem(0px);
background: #fff;
width: 100%;
z-index: 999;
}
.catalogue-content {
padding: px2rem(30px) px2rem(15px) 0;
.catalogue-title {
font-size: px2rem(18px);
color: #373839;
font-weight: 700;
margin-bottom: px2rem(16px);
}
}
}
}
.list-container {
// margin-bottom: px2rem(40px);
}
}
</style>
<template>
<div class="test-container">
<CommonButton btnText="去学习"></CommonButton>
<!-- <CommonDialog content="该项目仅对河北省石家庄市的用户开放" :isShowDialog="isShowDialog" @handlerAction="handlerDialogAction"></CommonDialog> -->
<!-- <CommonDialog content="您暂未认证身份,完成认证身份后可申请学分" confirmBtnText="去认证" :isShowDialog="isShowDialog" @handlerAction="handlerDialogAction"></CommonDialog> -->
<!-- <CommonDialog content="您暂未加入机构,加入机构后且认证身份后可申请学分" confirmBtnText="加入机构" :isShowDialog="isShowDialog" @handlerAction="handlerDialogAction"></CommonDialog> -->
<!-- <CommonDialog content="您的所属机构不在可申请范围(河北省石家庄市)内" cancleBtnText="我知道了" isSingle :isShowDialog="isShowDialog" @handlerAction="handlerDialogAction"></CommonDialog> -->
<CommonDialog content="提交成功" subContent="您可在“个人中心-证书与学分”中查看审核结果" cancleBtnText="我知道了" isSingle needSubContent :isShowDialog="isShowDialog" @handlerAction="handlerDialogAction"></CommonDialog>
<!-- <CommonDialog content="兑换" subContent="确定要花200云鹊豆兑换课程吗?<br>我的云鹊豆:<span style='color:#FF9A4B;'>1500</span>" cancleBtnText="我再想想" confirmBtnText="确认兑换" needSubContent :isShowDialog="isShowDialog" @handlerAction="handlerDialogAction"></CommonDialog> -->
<CommonBottomInfo></CommonBottomInfo>
</div>
</template>
<script>
import CommonButton from "@/components/cme/common-button";
import CommonDialog from "@/components/cme/common-dialog";
import CommonBottomInfo from "@/components/cme/common-bottom-info";
export default {
data() {
return {
isShowDialog: true,
};
},
components: {
CommonButton,
CommonDialog,
CommonBottomInfo
},
mounted() {
// Toast
this.$toast({message: '展示图片', duration: 3000 });
},
beforeDestroyed() {},
methods: {
handlerDialogAction(type) {
this.isShowDialog = false;
}
}
};
</script>
<style lang="scss" scoped>
@import "../style/mixin";
</style>
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册