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

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

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

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

See merge request !1
...@@ -692,13 +692,15 @@ ...@@ -692,13 +692,15 @@
"version": "0.3.2", "version": "0.3.2",
"resolved": "http://192.168.110.93:4873/array-unique/-/array-unique-0.3.2.tgz", "resolved": "http://192.168.110.93:4873/array-unique/-/array-unique-0.3.2.tgz",
"integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
"dev": true "dev": true,
"optional": true
}, },
"braces": { "braces": {
"version": "2.3.2", "version": "2.3.2",
"resolved": "http://192.168.110.93:4873/braces/-/braces-2.3.2.tgz", "resolved": "http://192.168.110.93:4873/braces/-/braces-2.3.2.tgz",
"integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"arr-flatten": "^1.1.0", "arr-flatten": "^1.1.0",
"array-unique": "^0.3.2", "array-unique": "^0.3.2",
...@@ -717,6 +719,7 @@ ...@@ -717,6 +719,7 @@
"resolved": "http://192.168.110.93:4873/extend-shallow/-/extend-shallow-2.0.1.tgz", "resolved": "http://192.168.110.93:4873/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"is-extendable": "^0.1.0" "is-extendable": "^0.1.0"
} }
...@@ -899,6 +902,7 @@ ...@@ -899,6 +902,7 @@
"resolved": "http://192.168.110.93:4873/fill-range/-/fill-range-4.0.0.tgz", "resolved": "http://192.168.110.93:4873/fill-range/-/fill-range-4.0.0.tgz",
"integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"extend-shallow": "^2.0.1", "extend-shallow": "^2.0.1",
"is-number": "^3.0.0", "is-number": "^3.0.0",
...@@ -911,6 +915,7 @@ ...@@ -911,6 +915,7 @@
"resolved": "http://192.168.110.93:4873/extend-shallow/-/extend-shallow-2.0.1.tgz", "resolved": "http://192.168.110.93:4873/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"is-extendable": "^0.1.0" "is-extendable": "^0.1.0"
} }
...@@ -937,7 +942,8 @@ ...@@ -937,7 +942,8 @@
"ansi-regex": { "ansi-regex": {
"version": "2.1.1", "version": "2.1.1",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"aproba": { "aproba": {
"version": "1.2.0", "version": "1.2.0",
...@@ -958,12 +964,14 @@ ...@@ -958,12 +964,14 @@
"balanced-match": { "balanced-match": {
"version": "1.0.0", "version": "1.0.0",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"brace-expansion": { "brace-expansion": {
"version": "1.1.11", "version": "1.1.11",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"balanced-match": "^1.0.0", "balanced-match": "^1.0.0",
"concat-map": "0.0.1" "concat-map": "0.0.1"
...@@ -978,17 +986,20 @@ ...@@ -978,17 +986,20 @@
"code-point-at": { "code-point-at": {
"version": "1.1.0", "version": "1.1.0",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"concat-map": { "concat-map": {
"version": "0.0.1", "version": "0.0.1",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"console-control-strings": { "console-control-strings": {
"version": "1.1.0", "version": "1.1.0",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"core-util-is": { "core-util-is": {
"version": "1.0.2", "version": "1.0.2",
...@@ -1105,7 +1116,8 @@ ...@@ -1105,7 +1116,8 @@
"inherits": { "inherits": {
"version": "2.0.3", "version": "2.0.3",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"ini": { "ini": {
"version": "1.3.5", "version": "1.3.5",
...@@ -1117,6 +1129,7 @@ ...@@ -1117,6 +1129,7 @@
"version": "1.0.0", "version": "1.0.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"number-is-nan": "^1.0.0" "number-is-nan": "^1.0.0"
} }
...@@ -1131,6 +1144,7 @@ ...@@ -1131,6 +1144,7 @@
"version": "3.0.4", "version": "3.0.4",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"brace-expansion": "^1.1.7" "brace-expansion": "^1.1.7"
} }
...@@ -1138,12 +1152,14 @@ ...@@ -1138,12 +1152,14 @@
"minimist": { "minimist": {
"version": "0.0.8", "version": "0.0.8",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"minipass": { "minipass": {
"version": "2.3.5", "version": "2.3.5",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"safe-buffer": "^5.1.2", "safe-buffer": "^5.1.2",
"yallist": "^3.0.0" "yallist": "^3.0.0"
...@@ -1162,6 +1178,7 @@ ...@@ -1162,6 +1178,7 @@
"version": "0.5.1", "version": "0.5.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"minimist": "0.0.8" "minimist": "0.0.8"
} }
...@@ -1242,7 +1259,8 @@ ...@@ -1242,7 +1259,8 @@
"number-is-nan": { "number-is-nan": {
"version": "1.0.1", "version": "1.0.1",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"object-assign": { "object-assign": {
"version": "4.1.1", "version": "4.1.1",
...@@ -1254,6 +1272,7 @@ ...@@ -1254,6 +1272,7 @@
"version": "1.4.0", "version": "1.4.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"wrappy": "1" "wrappy": "1"
} }
...@@ -1339,7 +1358,8 @@ ...@@ -1339,7 +1358,8 @@
"safe-buffer": { "safe-buffer": {
"version": "5.1.2", "version": "5.1.2",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"safer-buffer": { "safer-buffer": {
"version": "2.1.2", "version": "2.1.2",
...@@ -1375,6 +1395,7 @@ ...@@ -1375,6 +1395,7 @@
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"code-point-at": "^1.0.0", "code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0", "is-fullwidth-code-point": "^1.0.0",
...@@ -1394,6 +1415,7 @@ ...@@ -1394,6 +1415,7 @@
"version": "3.0.1", "version": "3.0.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"ansi-regex": "^2.0.0" "ansi-regex": "^2.0.0"
} }
...@@ -1437,12 +1459,14 @@ ...@@ -1437,12 +1459,14 @@
"wrappy": { "wrappy": {
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"yallist": { "yallist": {
"version": "3.0.3", "version": "3.0.3",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
} }
} }
}, },
...@@ -1516,6 +1540,7 @@ ...@@ -1516,6 +1540,7 @@
"resolved": "http://192.168.110.93:4873/is-number/-/is-number-3.0.0.tgz", "resolved": "http://192.168.110.93:4873/is-number/-/is-number-3.0.0.tgz",
"integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"kind-of": "^3.0.2" "kind-of": "^3.0.2"
}, },
...@@ -1525,6 +1550,7 @@ ...@@ -1525,6 +1550,7 @@
"resolved": "http://192.168.110.93:4873/kind-of/-/kind-of-3.2.2.tgz", "resolved": "http://192.168.110.93:4873/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"is-buffer": "^1.1.5" "is-buffer": "^1.1.5"
} }
...@@ -1535,13 +1561,15 @@ ...@@ -1535,13 +1561,15 @@
"version": "3.0.1", "version": "3.0.1",
"resolved": "http://192.168.110.93:4873/isobject/-/isobject-3.0.1.tgz", "resolved": "http://192.168.110.93:4873/isobject/-/isobject-3.0.1.tgz",
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
"dev": true "dev": true,
"optional": true
}, },
"kind-of": { "kind-of": {
"version": "6.0.2", "version": "6.0.2",
"resolved": "http://192.168.110.93:4873/kind-of/-/kind-of-6.0.2.tgz", "resolved": "http://192.168.110.93:4873/kind-of/-/kind-of-6.0.2.tgz",
"integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
"dev": true "dev": true,
"optional": true
}, },
"micromatch": { "micromatch": {
"version": "3.1.10", "version": "3.1.10",
...@@ -2367,6 +2395,7 @@ ...@@ -2367,6 +2395,7 @@
"resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
"integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"hoek": "2.x.x" "hoek": "2.x.x"
} }
...@@ -3856,7 +3885,8 @@ ...@@ -3856,7 +3885,8 @@
"ansi-regex": { "ansi-regex": {
"version": "2.1.1", "version": "2.1.1",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"aproba": { "aproba": {
"version": "1.2.0", "version": "1.2.0",
...@@ -3877,12 +3907,14 @@ ...@@ -3877,12 +3907,14 @@
"balanced-match": { "balanced-match": {
"version": "1.0.0", "version": "1.0.0",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"brace-expansion": { "brace-expansion": {
"version": "1.1.11", "version": "1.1.11",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"balanced-match": "^1.0.0", "balanced-match": "^1.0.0",
"concat-map": "0.0.1" "concat-map": "0.0.1"
...@@ -3897,17 +3929,20 @@ ...@@ -3897,17 +3929,20 @@
"code-point-at": { "code-point-at": {
"version": "1.1.0", "version": "1.1.0",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"concat-map": { "concat-map": {
"version": "0.0.1", "version": "0.0.1",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"console-control-strings": { "console-control-strings": {
"version": "1.1.0", "version": "1.1.0",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"core-util-is": { "core-util-is": {
"version": "1.0.2", "version": "1.0.2",
...@@ -4024,7 +4059,8 @@ ...@@ -4024,7 +4059,8 @@
"inherits": { "inherits": {
"version": "2.0.3", "version": "2.0.3",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"ini": { "ini": {
"version": "1.3.5", "version": "1.3.5",
...@@ -4036,6 +4072,7 @@ ...@@ -4036,6 +4072,7 @@
"version": "1.0.0", "version": "1.0.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"number-is-nan": "^1.0.0" "number-is-nan": "^1.0.0"
} }
...@@ -4050,6 +4087,7 @@ ...@@ -4050,6 +4087,7 @@
"version": "3.0.4", "version": "3.0.4",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"brace-expansion": "^1.1.7" "brace-expansion": "^1.1.7"
} }
...@@ -4057,12 +4095,14 @@ ...@@ -4057,12 +4095,14 @@
"minimist": { "minimist": {
"version": "0.0.8", "version": "0.0.8",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"minipass": { "minipass": {
"version": "2.3.5", "version": "2.3.5",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"safe-buffer": "^5.1.2", "safe-buffer": "^5.1.2",
"yallist": "^3.0.0" "yallist": "^3.0.0"
...@@ -4081,6 +4121,7 @@ ...@@ -4081,6 +4121,7 @@
"version": "0.5.1", "version": "0.5.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"minimist": "0.0.8" "minimist": "0.0.8"
} }
...@@ -4161,7 +4202,8 @@ ...@@ -4161,7 +4202,8 @@
"number-is-nan": { "number-is-nan": {
"version": "1.0.1", "version": "1.0.1",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"object-assign": { "object-assign": {
"version": "4.1.1", "version": "4.1.1",
...@@ -4173,6 +4215,7 @@ ...@@ -4173,6 +4215,7 @@
"version": "1.4.0", "version": "1.4.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"wrappy": "1" "wrappy": "1"
} }
...@@ -4258,7 +4301,8 @@ ...@@ -4258,7 +4301,8 @@
"safe-buffer": { "safe-buffer": {
"version": "5.1.2", "version": "5.1.2",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"safer-buffer": { "safer-buffer": {
"version": "2.1.2", "version": "2.1.2",
...@@ -4294,6 +4338,7 @@ ...@@ -4294,6 +4338,7 @@
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"code-point-at": "^1.0.0", "code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0", "is-fullwidth-code-point": "^1.0.0",
...@@ -4313,6 +4358,7 @@ ...@@ -4313,6 +4358,7 @@
"version": "3.0.1", "version": "3.0.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"ansi-regex": "^2.0.0" "ansi-regex": "^2.0.0"
} }
...@@ -4356,12 +4402,14 @@ ...@@ -4356,12 +4402,14 @@
"wrappy": { "wrappy": {
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"yallist": { "yallist": {
"version": "3.0.3", "version": "3.0.3",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
} }
} }
}, },
...@@ -4719,7 +4767,8 @@ ...@@ -4719,7 +4767,8 @@
"version": "2.16.3", "version": "2.16.3",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
"integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
"dev": true "dev": true,
"optional": true
}, },
"home-or-tmp": { "home-or-tmp": {
"version": "2.0.0", "version": "2.0.0",
......
...@@ -6,12 +6,12 @@ ...@@ -6,12 +6,12 @@
v-for="(component , index) in projectComponent" v-for="(component , index) in projectComponent"
:key="index"> :key="index">
<!-- <CommonTitle :fontWeight="500" :title="component.name" :isShowCert="true" :isShowExplain="true" @showDialog="showDialog(component.introduce)"></CommonTitle> --> <!-- <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 v-model="activeNames" @change="changeCollapse">
<van-collapse-item <van-collapse-item
v-for="(portalModule , index) in component.portalModuleDTOS" v-for="(portalModule, index) in component.portalModuleDTOS"
:key="index" :key="index"
:title="portalModule.moduleName | shortName(19)" :title="(parseInt(index) + 1) + '.' + portalModule.moduleName | shortName(19)"
:name="portalModule.expandKey" :name="portalModule.expandKey"
:value="portalModule.value" :value="portalModule.value"
:disabled="portalModule.disabled" :disabled="portalModule.disabled"
...@@ -45,10 +45,10 @@ ...@@ -45,10 +45,10 @@
<!-- <img v-show="item.status == 13" class="text-action-dh" src="../../images/icon-dh.png"> --> <!-- <img v-show="item.status == 13" class="text-action-dh" src="../../images/icon-dh.png"> -->
{{getActionText(item.status)}} {{getActionText(item.status)}}
</span> </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}" :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"> v-if="index+1 < portalModule.contentList.length && portalModule.contentList[index].templetId == portalModule.contentList[index+1].templetId">
</div> </div> -->
<div class="foot-line" <div class="foot-line"
v-if="index+1 < portalModule.contentList.length && portalModule.contentList[index].templetId == portalModule.contentList[index+1].templetId"> v-if="index+1 < portalModule.contentList.length && portalModule.contentList[index].templetId == portalModule.contentList[index+1].templetId">
</div> </div>
...@@ -61,9 +61,10 @@ ...@@ -61,9 +61,10 @@
</van-collapse-item> </van-collapse-item>
</van-collapse> </van-collapse>
<!-- <Toast ref="toastTitle"></Toast> --> <!-- <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> </div>
<NoMoreContent v-if="detailNum > 9" /> <!-- <NoMoreContent v-if="detailNum > 9" /> -->
<NoMoreContent />
<div v-if="detailNum <= 9" class="no-more-bottom"></div> <div v-if="detailNum <= 9" class="no-more-bottom"></div>
<van-dialog <van-dialog
v-model="dialogState" v-model="dialogState"
...@@ -94,73 +95,33 @@ const actionMap = { ...@@ -94,73 +95,33 @@ const actionMap = {
22: "继续学习", 22: "继续学习",
23: "去复习" 23: "去复习"
}; };
const sendBuriedDataMap = {
11: "211012",
12: "211013",
21: "211009",
22: "211010",
23: "211011"
}
export default { export default {
name: "cell-list-item", name: "cell-list-item",
data() { data() {
return { return {
appVersion: "200", appVersion: "200",
hocImg: require("../../images/has-owner-cert.png"), hocImg: require("../../images/has-owner-cert.png"),
activeNames: [], activeNames: [1],
dialogState: false, dialogState: false,
projectId: 1, 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节',
},
],
}
],
}; };
}, },
props: { props: {
moduleName: { // moduleName: {
type: String, // type: String,
default: "" // default: ""
}, // },
paramData: { // paramData: {
type: Array, // type: Array,
default: () => [] // default: () => []
}, // },
projectComponent: { projectComponent: {
type: Array, type: Array,
default: () => [] default: () => []
...@@ -224,7 +185,13 @@ export default { ...@@ -224,7 +185,13 @@ export default {
} else if (item.type == 2) { } else if (item.type == 2) {
this.gotoCourse(item.id); 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 { ...@@ -288,13 +255,13 @@ export default {
getActionText(status) { getActionText(status) {
return actionMap[status]; return actionMap[status];
}, },
showDialog(introduce) { // showDialog(introduce) {
Dialog.alert({ // Dialog.alert({
title: '说明', // title: '说明',
message: introduce, // message: introduce,
confirmButtonText: '我知道了', // confirmButtonText: '我知道了',
}) // })
}, // },
changeCollapse(activeNames) { changeCollapse(activeNames) {
console.log('activeNames',activeNames); console.log('activeNames',activeNames);
let param = { let param = {
...@@ -451,7 +418,7 @@ export default { ...@@ -451,7 +418,7 @@ export default {
.cell-container { .cell-container {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
margin: px2rem(20px) px2rem(15px) px2rem(-28px) px2rem(15px); margin: px2rem(20px) px2rem(0px) px2rem(-28px) px2rem(0px);
&-item { &-item {
position: relative; position: relative;
display: flex; display: flex;
...@@ -539,7 +506,7 @@ export default { ...@@ -539,7 +506,7 @@ export default {
// font-family: "PingFangSC-Medium", "PingFangSC", "Microsoft Yahei"; // font-family: "PingFangSC-Medium", "PingFangSC", "Microsoft Yahei";
width: px2rem(231px); width: px2rem(231px);
font-size: px2rem(15px); font-size: px2rem(15px);
font-weight: 500; font-weight: 700;
line-height: px2rem(22px); line-height: px2rem(22px);
color: #333333; color: #333333;
float: left; float: left;
......
...@@ -9,37 +9,39 @@ ...@@ -9,37 +9,39 @@
@click="coopDetails(item)" @click="coopDetails(item)"
> >
<div class="coop-item-left"> <div class="coop-item-left">
<img :src="item.imgUrl"> <img :src="item.imgUrl" />
<span v-if="item.projectStatus" <span
v-if="item.projectStatusValue"
class="coop-container-status" class="coop-container-status"
:style="{'background': cBgColor(item)}" :style="{'background': cBgColor(item)}"
>{{item.projectStatus | statusText}}</span> >{{item.projectStatusValue | statusText}}</span>
</div> </div>
<div class="coop-item-right"> <div class="coop-item-right">
<span class="coop-item-right-title">{{item.projectName}}</span> <span class="coop-item-right-title">{{item.name}}</span>
<span class="coop-item-right-other">发起机构 {{item.organizationName}}</span> <span class="coop-item-right-other">{{item.level}} | {{item.credit}} | {{item.scope}}</span>
<span v-if="item.pType == 1" <!-- <span v-if="item.pType == 1"
class="coop-item-right-other" class="coop-item-right-other"
>起止日期 {{item.oldTime}}</span> >起止日期 {{item.oldTime}}</span>-->
<span v-else <!-- <span v-else
class="coop-item-right-other" 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>
</div> </div>
<NoMoreContent v-show="paramData.length > 9"></NoMoreContent> <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>--> <!--<UpdateDialog :showGoUpdate="showGoUpdate" @goUpdateHandler="goUpdateHandler"></UpdateDialog>-->
<van-popup <!-- <van-popup
v-model="showGoUpdate" v-model="showGoUpdate"
position="bottom" position="bottom"
:style="{ height: '4.427rem' }" :style="{ height: '4.427rem' }"
> >
<div class="update-dialog-content"> <div class="update-dialog-content">
<p class="title">本项目需要更新至最新版本才能参加哦</p> <p class="title">该项目仅对河北石家庄市的用户开放</p>
<p class="update-btn v-hairline-top confirm-btn" @click="goUpdateHandler">立即更新</p> <p class="update-btn v-hairline-top confirm-btn" @click="goUpdateHandler">确定</p>
<p class="update-btn v-hairline-top" @click="showGoUpdate = false">取消</p> <p class="update-btn v-hairline-top" @click="showGoUpdate = false">取消</p>
</div> </div>
</van-popup> </van-popup>-->
</section> </section>
</template> </template>
...@@ -50,7 +52,7 @@ import UpdateDialog from "@/components/business/update-dialog"; ...@@ -50,7 +52,7 @@ import UpdateDialog from "@/components/business/update-dialog";
import { setEventByModuleCode, deepCopy, getWebPageUrl } from "@/utils/index"; import { setEventByModuleCode, deepCopy, getWebPageUrl } from "@/utils/index";
import { getAppVersion } from "@/utils"; import { getAppVersion } from "@/utils";
import { mapActions, mapGetters } from "vuex"; import { mapActions, mapGetters } from "vuex";
import { Popup } from 'vant'; import { Popup } from "vant";
export default { export default {
name: "coop-list-item", name: "coop-list-item",
...@@ -58,7 +60,7 @@ export default { ...@@ -58,7 +60,7 @@ export default {
return { return {
bgColor: "green", bgColor: "green",
statusText: "进行中", statusText: "进行中",
showGoUpdate: false, showGoUpdate: false
}; };
}, },
props: { props: {
...@@ -78,6 +80,10 @@ export default { ...@@ -78,6 +80,10 @@ export default {
type: Number, type: Number,
default: 1 default: 1
}, },
userMobile: {
type: String,
default: ""
}
}, },
computed: { computed: {
...mapGetters(["userInfo"]) ...mapGetters(["userInfo"])
...@@ -87,7 +93,7 @@ export default { ...@@ -87,7 +93,7 @@ export default {
components: { components: {
NoMoreContent, NoMoreContent,
NoContent, NoContent,
UpdateDialog, UpdateDialog
}, },
mounted() {}, mounted() {},
filters: { filters: {
...@@ -104,121 +110,138 @@ export default { ...@@ -104,121 +110,138 @@ export default {
} }
}, },
methods: { methods: {
...mapActions(['setProjectTabIndex']), ...mapActions(["setProjectTabIndex"]),
cBgColor(item) { cBgColor(item) {
if (item.projectStatus === 1) { if (item.projectStatusValue === 1) {
return "#5890DD"; return "#5890DD";
} else if (item.projectStatus === 5) { } else if (item.projectStatusValue === 5) {
return "#449284"; return "#449284";
} else if (item.projectStatus === 10) { } else if (item.projectStatusValue === 10) {
return "#373839"; return "#373839";
} else { } else {
return "#5890DD"; return "#5890DD";
} }
}, },
coopDetails(item) { coopDetails(item) {
this.$sendBuriedData({ if (this.userMobile) {
component_tag: '089#400081#0#'+item.projectName let paramList = [
});
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", 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, type: 4,
seqNo: 1 seqNo: 1
} }
] ];
rocNative.dispatchEventByModuleCode({
modeCode: "M300",
jsonString: paramList
});
} else { } else {
pageUrl = getWebPageUrl('coopv2/#/parent'); rocNative.gotoLogin();
paramList = [
{
key: "pageUrl",
value: pageUrl + `?entryId=${item.entryId}`,
type: 4,
seqNo: 1
}
]
} }
rocNative.dispatchEventByModuleCode({
modeCode: "M300", this.$sendBuriedData({
jsonString: paramList 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) { goToPage(item) {
let _this = this; let _this = this;
// 如果是湖北考试项目,则做相应权限判断 湖北的projectId=3 // 如果是湖北考试项目,则做相应权限判断 湖北的projectId=3
if( item.id == '3') { if (item.id == "3") {
if(!_this.userInfo.userToken) { if (!_this.userInfo.userToken) {
rocNative.gotoLogin(); rocNative.gotoLogin();
return; return;
} }
...@@ -227,27 +250,27 @@ export default { ...@@ -227,27 +250,27 @@ export default {
token: _this.userInfo.userToken || _this.token, token: _this.userInfo.userToken || _this.token,
setEntry: true setEntry: true
}; };
this.GET("portal/portalApp/role/3", param).then( this.GET("portal/portalApp/role/3", param).then(res => {
res => { if (res.code == "000000") {
if (res.code == "000000") { // {
// { // "data": 0, // 0就是无权限,1有权限
// "data": 0, // 0就是无权限,1有权限 // "code": "000000",
// "code": "000000", // "message": "成功"
// "message": "成功" // }
// } if (res.data == 0) {
if(res.data == 0) { rocNative.showNativeToast({
rocNative.showNativeToast({ message: "您不属于该项目,无法查看" }); message: "您不属于该项目,无法查看"
return; });
}
} else {
rocNative.gotoLogin();
return; return;
} }
_this.goToPage1(item.contentListModel) } else {
rocNative.gotoLogin();
return;
} }
); _this.goToPage1(item.contentListModel);
});
} else { } else {
_this.goToPage1(item.contentListModel) _this.goToPage1(item.contentListModel);
} }
}, },
// 跳转 // 跳转
...@@ -259,7 +282,9 @@ export default { ...@@ -259,7 +282,9 @@ export default {
paramList[0]["value"].indexOf("stroke.js") !== -1; paramList[0]["value"].indexOf("stroke.js") !== -1;
let strokeUrl = ""; let strokeUrl = "";
if (isStrokeUrl) { 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; paramList[0]["value"] = strokeUrl;
} }
rocNative.dispatchEventByModuleCode({ rocNative.dispatchEventByModuleCode({
...@@ -275,7 +300,7 @@ export default { ...@@ -275,7 +300,7 @@ export default {
// createdTime: new Date().getTime() // createdTime: new Date().getTime()
// }); // });
}, },
goUpdateHandler () { goUpdateHandler() {
//去更新 //去更新
rocNative.upGradeVersion(); rocNative.upGradeVersion();
this.showGoUpdate = false; this.showGoUpdate = false;
...@@ -346,33 +371,33 @@ export default { ...@@ -346,33 +371,33 @@ export default {
} }
} }
} }
.update-dialog-content{ .update-dialog-content {
padding: 0 px2rem(15px); padding: 0 px2rem(15px);
box-sizing: border-box; box-sizing: border-box;
.title{ .title {
text-align: center; text-align: center;
color: #373839; color: #373839;
font-size: px2rem(18px); font-size: px2rem(18px);
padding: px2rem(15px) 0; padding: px2rem(15px) 0;
line-height: px2rem(25px); 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{ &.v-hairline-top::after {
text-align: center; border-top-width: 1px;
height: px2rem(55px);
line-height: px2rem(55px);
font-size: px2rem(16px);
color: #979899;
&.confirm-btn{
color: #449284;
}
&.v-hairline-top::after{
border-top-width: 1px;
}
} }
} }
}
</style> </style>
<style> <style>
.van-overlay{ .van-overlay {
background-color: rgba(0,0,0,0.5); background-color: rgba(0, 0, 0, 0.5);
} }
</style> </style>
...@@ -3,15 +3,21 @@ ...@@ -3,15 +3,21 @@
<section class="nc-container"> <section class="nc-container">
<img <img
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> </section>
</template> </template>
<script> <script>
export default { export default {
name: "no-content", name: "no-content",
props: {
tabNum: {
default: 1
}
},
data() { data() {
return {}; return {};
} }
...@@ -26,7 +32,7 @@ export default { ...@@ -26,7 +32,7 @@ export default {
flex-direction: column; flex-direction: column;
justify-content: center; justify-content: center;
align-content: center; align-content: center;
margin-top: px2rem(20px); margin-top: px2rem(150px);
margin-bottom: px2rem(20px); margin-bottom: px2rem(20px);
text-align: center; text-align: center;
// margin: 0 auto; // margin: 0 auto;
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<div class="dialog-mask-container" v-if="showGoUpdate"> <div class="dialog-mask-container" v-if="showGoUpdate">
<div class="dialog-mask"></div> <div class="dialog-mask"></div>
<div class="dialog-container"> <div class="dialog-container">
<div class="dialog-content">更新至最新版本才能观看视频哦</div> <div class="dialog-content">更新至最新版本才能观看视频哦更新至最新版本才能观看视频哦</div>
<div class="dialog-footer v-hairline-top"> <div class="dialog-footer v-hairline-top">
<span @click.stop.prevent="goUpdateHandler(1)">取消</span> <span @click.stop.prevent="goUpdateHandler(1)">取消</span>
<span class="confirm-btn v-hairline-left" @click.stop.prevent="goUpdateHandler(2)">立即更新</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> <template>
<div> <div class="desc-container">
<div class="desc-title" v-show="isShowTitle"> <div class="desc-title">
<span>{{descTitle}}</span> <span>{{projectName}}</span>
</div> </div>
<div class="desc-detail"> <div class="desc-detail">
<span class="desc_text" v-html="message"></span> <span class="desc_text" v-if="studyNum && subject">{{newStudyNum}}人已学/{{subject}}</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>
</div> </div>
</div> </div>
</template> </template>
...@@ -20,109 +14,80 @@ export default { ...@@ -20,109 +14,80 @@ export default {
name: "common-description", name: "common-description",
data() { data() {
return { return {
isShowFlag: false
}; };
}, },
computed: {
CommonSpliteLine
},
props: { props: {
isShowTitle: { projectName: {
type: Boolean,
default: true
},
descTitle: {
type: String, type: String,
default: "" default: ""
}, },
value: { studyNum: {
type: Number,
default: 0
},
subject: {
type: String, type: String,
default: "" default: ""
} }
}, },
created() {},
mounted() {},
computed: { computed: {
message: function() { newStudyNum: function() {
// return this.isShowFlag if(this.studyNum > 1000 && this.studyNum < 10000) {
// ? '<span style="color: red;">简介</span>' + this.value return (this.studyNum / 1000 + 'K');
// : '<span style="color: red;">简介</span>' + }else if(this.studyNum > 10000) {
// this.value.slice(0, 34) + return (this.studyNum / 10000 + 'W');
// "..."; }else {
let shortMsg = this.value || ""; return this.studyNum;
if (shortMsg.length > 63) {
shortMsg = this.value.slice(0, 63) + "...";
} }
return this.isShowFlag ? this.value : shortMsg;
} }
},
created() {},
mounted() {
}, },
methods: { methods: {
showDesc() {
this.isShowFlag = !this.isShowFlag;
}
} }
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import "../../style/mixin"; @import "../../style/mixin";
.desc-title { .desc-container {
display: flex; padding: px2rem(20px) px2rem(15px);
padding: px2rem(15px); .desc-title {
padding-bottom: 0px; display: flex;
line-height: px2rem(22px); padding-bottom: 0px;
font-weight: 700; line-height: px2rem(22px);
color: rgba(51, 51, 51, 1);
span {
font-family: "PingFangSC-Medium", "PingFangSC", "Microsoft Yahei";
font-size: px2rem(18px);
font-weight: 700; 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> </style>
<template> <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'"> --> <!-- <section v-if="isWeb" :class="isFixNavbar ? 'nav-top fixed' : 'nav-top'"> -->
<div <div
class="nav-part" class="nav-part"
...@@ -14,11 +14,11 @@ ...@@ -14,11 +14,11 @@
<!-- <img class="nav-back" src="../../images//grey-throw.png"/> --> <!-- <img class="nav-back" src="../../images//grey-throw.png"/> -->
</span> </span>
<span class="nav-title-title" v-show="bgColor!=='none'">{{title}}</span> <span class="nav-title-title" v-show="bgColor!=='none'">{{title}}</span>
<span v-show="isShowShare" class="nav-share" @click="goShare"> <span v-if="isShowShare" class="nav-share" @click="goShare">
<img <img v-show="isBlack"
src="https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/courses/Group17_hover%403x.png" 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> </span>
</div> </div>
</div> </div>
...@@ -71,6 +71,14 @@ export default { ...@@ -71,6 +71,14 @@ export default {
isBlack: { isBlack: {
type: Boolean, type: Boolean,
default: true default: true
},
shareTitle: {
type: String,
default: ""
},
shareTitleInfo: {
type: String,
default: ""
} }
}, },
computed: { computed: {
...@@ -121,9 +129,9 @@ export default { ...@@ -121,9 +129,9 @@ export default {
// shareImageUrl: '_this.shareImageUrl' // shareImageUrl: '_this.shareImageUrl'
type: 6, type: 6,
shareId: 0, shareId: 0,
shareUrl: 'shareUrl', shareUrl: url,
title1: "this.shareTitle1", title1: _this.shareTitle,
title2: "this.shareTitle2", title2: _this.shareTitleInfo,
shareImageUrl: "https://file.yunqueyi.com/logo.png?version=" + new Date().getTime() shareImageUrl: "https://file.yunqueyi.com/logo.png?version=" + new Date().getTime()
}); });
} }
......
...@@ -8,11 +8,16 @@ import '@/utils/rem' // 引入自适应 ...@@ -8,11 +8,16 @@ import '@/utils/rem' // 引入自适应
import '@/utils/yqy-bridge' // 移动端服务 import '@/utils/yqy-bridge' // 移动端服务
// import FastClick from 'fastclick' // import FastClick from 'fastclick'
import vueFilters from '@/utils/filter' import vueFilters from '@/utils/filter'
// import VConsole from 'vconsole/dist/vconsole.min.js' import VConsole from 'vconsole/dist/vconsole.min.js'
// if(!(process.env.BUILD_ENV === 'uat' || process.env.BUILD_ENV === 'pro')) { 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')) { // if(!(process.env.BUILD_ENV === 'pro')) {
// let vConsole = new VConsole() // 初始化 let vConsole = new VConsole() // 初始化
// } }
// 可调试 // 可调试
// Vue.config.devtools = true; // Vue.config.devtools = true;
...@@ -53,7 +58,6 @@ Vue.mixin({ ...@@ -53,7 +58,6 @@ Vue.mixin({
}) })
// import './plugins'; // import './plugins';
import BuriedPoint,{ sendBuriedData} from 'web-buried-point';
// import { buriedURL } from './apiConfig'; // import { buriedURL } from './apiConfig';
let domain = ''; let domain = '';
if (process.env.BUILD_ENV === 'prod') { if (process.env.BUILD_ENV === 'prod') {
...@@ -69,13 +73,11 @@ if (process.env.BUILD_ENV === 'prod') { ...@@ -69,13 +73,11 @@ if (process.env.BUILD_ENV === 'prod') {
} }
Vue.use(BuriedPoint, { Vue.use(BuriedPoint, {
class_name: `web_app_cooperation`, class_name: 'web_app_cme',
url: `${domain}/file/log/trace1` url: `${domain}/file/log/trace1`
}); });
Vue.prototype.$sendBuriedData = sendBuriedData; Vue.prototype.$sendBuriedData = sendBuriedData;
import Vant from 'vant';
import 'vant/lib/index.css';
Vue.use(Vant); Vue.use(Vant);
new Vue({ new Vue({
......
...@@ -5,6 +5,10 @@ const complist = r => require.ensure([], () => r(require('../views/component-det ...@@ -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 cooplist = r => require.ensure([], () => r(require('../views/cooperation-details')), 'cooplist')
const parent = r => require.ensure([], () => r(require('../views/parent-page')), 'parent') const parent = r => require.ensure([], () => r(require('../views/parent-page')), 'parent')
const merge = r => require.ensure([], () => r(require('../views/merge-detail')), 'merge') 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 [{ export default [{
path: '/', path: '/',
...@@ -38,5 +42,22 @@ export default [{ ...@@ -38,5 +42,22 @@ export default [{
path: '/coop', path: '/coop',
component: merge 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 ...@@ -12,8 +12,8 @@ body, div, span, header, footer, nav, section, aside, article, ul, dl, dt, dd, l
font-style: normal; font-style: normal;
text-decoration: none; text-decoration: none;
border: none; border: none;
font-size: px2rem(14px); // font-size: px2rem(14px);
color: #333; // color: #333;
font-weight: normal; font-weight: normal;
// font-family: "PingFangSC-Medium", "PingFangSC", "Microsoft Yahei"; // font-family: "PingFangSC-Medium", "PingFangSC", "Microsoft Yahei";
font-family: "PingFangSC-Regular","-apple-system-font","Source Han Sans","Helvetica Neue","sans-serif"; font-family: "PingFangSC-Regular","-apple-system-font","Source Han Sans","Helvetica Neue","sans-serif";
...@@ -139,4 +139,7 @@ html,body{ ...@@ -139,4 +139,7 @@ html,body{
border: 0 solid #F0F1F2; border: 0 solid #F0F1F2;
} }
} }
// .van-toast__text {
// color: #fff !important;
// }
...@@ -82,4 +82,31 @@ ...@@ -82,4 +82,31 @@
} }
.fs30{ .fs30{
font-size: px2rem(15px); 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 = { ...@@ -7,17 +7,17 @@ export const envConfig = {
// baseUrl: 'https://dev-sc.yunqueyi.com/', // baseUrl: 'https://dev-sc.yunqueyi.com/',
// baseUrl: 'http://10.177.15.180:10202/', // baseUrl: 'http://10.177.15.180:10202/',
// baseUrl: 'http://192.168.140.14:10201/', // baseUrl: 'http://192.168.140.14:10201/',
// apiUrl: 'https://dev-api.yunqueyi.com/', apiUrl: 'https://dev-api.yunqueyi.com/',
// webPageUrl: 'https://dev-phome.yunqueyi.com/', webPageUrl: 'https://dev-phome.yunqueyi.com/',
// baseUrl: 'https://dev-sc.yunqueyi.com/', baseUrl: 'https://test1-sc.yunqueyi.com/',
// baseUrl: 'https://test1-sc.yunqueyi.com/', // baseUrl: 'https://test1-sc.yunqueyi.com/',
// apiUrl: 'https://test1-api.yunqueyi.com/', // apiUrl: 'https://test1-api.yunqueyi.com/',
// webPageUrl: 'https://test1-phome.yunqueyi.com/' // webPageUrl: 'https://test1-phome.yunqueyi.com/'
baseUrl: 'https://uat-sc.yunqueyi.com/', // baseUrl: 'https://uat-sc.yunqueyi.com/',
apiUrl: 'https://uat-api.yunqueyi.com/', // apiUrl: 'https://uat-api.yunqueyi.com/',
webPageUrl: 'https://uat-phome.yunqueyi.com/' // webPageUrl: 'https://uat-phome.yunqueyi.com/'
// baseUrl: 'https://sc.yunqueyi.com/', // baseUrl: 'https://sc.yunqueyi.com/',
// apiUrl: 'https://api.yunqueyi.com/', // apiUrl: 'https://api.yunqueyi.com/',
......
...@@ -11,13 +11,15 @@ const service = axios.create({ ...@@ -11,13 +11,15 @@ const service = axios.create({
// request拦截器 // request拦截器
service.interceptors.request.use(config => { service.interceptors.request.use(config => {
// debugger
if (config.data && config.data.setEntry) { if (config.data && config.data.setEntry) {
config.headers['sysCode'] = config.data.sysCode || 10 config.headers['sysCode'] = config.data.sysCode || 10
if(config.data.token){ if(config.data.token){
config.headers['token'] = config.data.token || '0F32D60C3D7042158BCF1FB574E482BE' config.headers['token'] = config.data.token || '0F32D60C3D7042158BCF1FB574E482BE'
if( process.env.BUILD_ENV == "development" ){ // 本地开发环境 if( process.env.BUILD_ENV == "development" ){ // 本地开发环境
config.headers['token'] = '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' }) 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) { ...@@ -25,8 +25,8 @@ function getConfigByEnvType(urlType) {
// 日期与时间解析函数 // 日期与时间解析函数
export function parseTime(time, cFormat) { export function parseTime(time, cFormat) {
if (arguments.length === 0) { if (arguments.length === 0 || !time) {
return null return ''
} }
const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}' const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
let date let date
...@@ -117,4 +117,25 @@ export function deepCopy(obj) { ...@@ -117,4 +117,25 @@ export function deepCopy(obj) {
export function mergeObjs(...ojbs){ 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' ...@@ -4,26 +4,16 @@ import { getBaseUrl, getApiUrl } from '@/utils/index'
module.exports = { module.exports = {
data: function () { data: function () {
return { return {
// isIpx: Utils.env.isIPhoneX(),//是不是iphoneX
// isAndroid: Utils.env.isAndroid(),
// isIOS: false,
// isWeb: false,
token: null token: null
} }
}, },
created: function () { created: function () {
// let query = (this.$router && this.$router.query) || {};
// let query = this.$router.query
let query; let query;
if(this.$router !== undefined) { if (this.$route !== undefined) {
query = this.$router.query query = this.$route.query
} }
// this.token = this.getUrlSearch(location.href, 'token') || (query && query.token) || null // alert('this.token' + this.token)
// this.token = this.getUrlKey('token') || (query && query.token) || '1540EC1ECF7042CFA7F43363A72A7C81' this.token = this.getUrlKey('token') || (query && query.token) || '9B62E5874DA94979A54DB3E9DFC1443F'
// 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'
}, },
mounted() { mounted() {
...@@ -44,16 +34,16 @@ module.exports = { ...@@ -44,16 +34,16 @@ module.exports = {
return '' return ''
}, },
// 埋点 // 埋点
pageBurialPoin(options){ pageBurialPoin(options) {
rocNative.appBuryingPointEntrust(options) rocNative.appBuryingPointEntrust(options)
}, },
setRouterParm(paramList){ setRouterParm(paramList) {
let parm = {}; let parm = {};
if(paramList.length<=1){ if (paramList.length <= 1) {
return ''; return '';
} }
for(let i=1;i<paramList.length;i++){ for (let i = 1; i < paramList.length; i++) {
parm[paramList[i].key] = paramList[i].value; parm[paramList[i].key] = paramList[i].value;
} }
return parm; return parm;
...@@ -61,12 +51,12 @@ module.exports = { ...@@ -61,12 +51,12 @@ module.exports = {
// 拼接多个参数 // 拼接多个参数
getUrlParmByCode(paramList) { getUrlParmByCode(paramList) {
if ( paramList.length <= 1) { if (paramList.length <= 1) {
return '' return ''
} }
let dataStr = '' let dataStr = ''
let list = []; 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) list.push(paramList[i].key + '=' + paramList[i].value)
} }
dataStr = list.join('&') dataStr = list.join('&')
...@@ -83,57 +73,17 @@ module.exports = { ...@@ -83,57 +73,17 @@ module.exports = {
return d; return d;
}, },
// 根据条件排序 setEventByModuleCode(itemData) {
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){
let modeCode = itemData.appModuleInfo.code || ''; let modeCode = itemData.appModuleInfo.code || '';
let paramList = itemData.appModuleInfo.paramList ? itemData.appModuleInfo.paramList : '' let paramList = itemData.appModuleInfo.paramList ? itemData.appModuleInfo.paramList : ''
if( modeCode === 'M001' || modeCode === 'M002' || modeCode === 'M003') { if (modeCode === 'M001' || modeCode === 'M002' || modeCode === 'M003') {
paramList = '' paramList = ''
}else if( modeCode === 'M100' || modeCode === 'M300' ) { } else if (modeCode === 'M100' || modeCode === 'M300') {
// 支持多个参数 // 支持多个参数
let urlPara = this.getUrlParmByCode(paramList); let urlPara = this.getUrlParmByCode(paramList);
if(paramList[0]){ if (paramList[0]) {
if( paramList[0].value.indexOf("?") == -1){ if (paramList[0].value.indexOf("?") == -1) {
paramList[0].value += urlPara paramList[0].value += urlPara
} }
} }
...@@ -142,23 +92,24 @@ module.exports = { ...@@ -142,23 +92,24 @@ module.exports = {
let v = paramList[0]['value']; let v = paramList[0]['value'];
let query = this.setRouterParm(paramList); let query = this.setRouterParm(paramList);
paramList = [{ paramList = [{
url:v, url: v,
query:query query: query
}] }]
this.$router.push({ this.$router.push({
path: v, path: v,
query: query query: query
}) })
return 'NO' return 'NO'
} }
if(typeof paramList === 'string' && !paramList){ if (typeof paramList === 'string' && !paramList) {
paramList = [] paramList = []
} }
return paramList; return paramList;
}, },
// 通用GET请求 // 通用GET请求
GET(api, para, callback,str) { GET(api, para, callback, str) {
// debugger
para.token = para.token || this.token || '006EAC5D201B4547A27C842505F0E368' para.token = para.token || this.token || '006EAC5D201B4547A27C842505F0E368'
let url = api + this.getUrlPara(para) let url = api + this.getUrlPara(para)
return fetch({ return fetch({
...@@ -168,7 +119,7 @@ module.exports = { ...@@ -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' para.token = para.token || this.token || '006EAC5D201B4547A27C842505F0E368'
let url = api + this.getUrlPara(para) let url = api + this.getUrlPara(para)
return fetch({ return fetch({
...@@ -179,7 +130,7 @@ module.exports = { ...@@ -179,7 +130,7 @@ module.exports = {
}, },
// 通用GET2请求 // 通用GET2请求
GET2(api, para, callback,str) { GET2(api, para, callback, str) {
para.token = para.token || this.token || '4B43CD3CD5DB4979AC1B5B3F508391CA' para.token = para.token || this.token || '4B43CD3CD5DB4979AC1B5B3F508391CA'
// let url = api + this.getUrlPara(para) // let url = api + this.getUrlPara(para)
// let url = 'http://192.168.140.38:12801' + api // let url = 'http://192.168.140.38:12801' + api
...@@ -210,7 +161,7 @@ module.exports = { ...@@ -210,7 +161,7 @@ module.exports = {
data: para data: para
}) })
}, },
// 通用GET请求 // 通用GET请求
API_GET(api, para, callback) { API_GET(api, para, callback) {
para.token = para.token || this.token || '00175A13D70D4234822D90AC3C74202C' //'AF3DFCF2DD4B4115AC47ACA25D5420E9''F90DF48D3EFA49DFAE1267A67DBEFB18'//token para.token = para.token || this.token || '00175A13D70D4234822D90AC3C74202C' //'AF3DFCF2DD4B4115AC47ACA25D5420E9''F90DF48D3EFA49DFAE1267A67DBEFB18'//token
......
...@@ -4,38 +4,9 @@ ...@@ -4,38 +4,9 @@
e.rocNative = { e.rocNative = {
// 参数说明 e:回传回来的移动端服务名称; t:前端自己传递的回调JS方法 // 参数说明 e:回传回来的移动端服务名称; t:前端自己传递的回调JS方法
__nativeCall: function (e, t, n) { __nativeCall: function (e, t, n) {
// if(t == '__refresh'){ if (window[t]) {
// console.log('!__refresh: ',t,n);
// __refresh(n);
// // return;
// }
if( window[t] ){
window[t](n) 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) { __callNative: function (t, a, o) {
"function" == typeof o && (n++ , i[n] = o); "function" == typeof o && (n++ , i[n] = o);
...@@ -82,7 +53,7 @@ ...@@ -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) { if (e.__rocAndroid) {
e.__isAndroid = true e.__isAndroid = true
e.__isIOS = false e.__isIOS = false
...@@ -96,7 +67,7 @@ ...@@ -96,7 +67,7 @@
e.__isIOS = false e.__isIOS = false
e.__isWeb = true e.__isWeb = true
} }
if(window.__isIOS){ if (window.__isIOS) {
rocNative.appInit() rocNative.appInit()
} }
}(window); }(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 @@ ...@@ -22,7 +22,7 @@
<td @click="changeTab(2)" :class="{'active': tabIndex === 2}"> <td @click="changeTab(2)" :class="{'active': tabIndex === 2}">
<div class="tap-title"> <div class="tap-title">
<!-- <span>其它项目</span> --> <!-- <span>其它项目</span> -->
<span :style="{'color': tabIndex === 2 ? '#333' : '#999'}">其它项目</span> <span :style="{'color': tabIndex === 2 ? '#333' : '#999'}">全部项目</span>
<span></span> <span></span>
</div> </div>
</td> </td>
...@@ -30,10 +30,20 @@ ...@@ -30,10 +30,20 @@
</table> </table>
<article class="page-content-list"> <article class="page-content-list">
<section v-if="tabIndex === 1"> <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>
<section v-if="tabIndex === 2"> <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> </section>
</article> </article>
</section> </section>
...@@ -58,15 +68,15 @@ export default { ...@@ -58,15 +68,15 @@ export default {
showLoading: false, showLoading: false,
bgColor: "#fff", bgColor: "#fff",
isShow: false, isShow: false,
navTitle: "专项合作", navTitle: "CME项目",
compTitle: "组件名称", compTitle: "组件名称",
isShowNavbar: true, isShowNavbar: true,
isFixNavbar: false, isFixNavbar: false,
pointStyle: "activity", pointStyle: "activity",
descTitle: "规定从何处开始选取。如果是负数", descTitle: "规定从何处开始选取。如果是负数",
tabIndex: 1, tabIndex: 1,
joinProjectList: [], joinProjectList: [], // 我的项目
otherProjectList: [], otherProjectList: [], // 全部项目
token: "", token: "",
toastTitle: "", toastTitle: "",
userMobile: "" userMobile: ""
...@@ -96,11 +106,18 @@ export default { ...@@ -96,11 +106,18 @@ export default {
_this.getCoopData(); _this.getCoopData();
} }
window.__refresh = function() { window.__refresh = function() {
_this.tabIndex = _this.projectTabIndex; //_this.tabIndex = _this.projectTabIndex;
// _this.getUserInfo(); _this.getUserInfo();
// document.documentElement.scrollTop = 0; // document.documentElement.scrollTop = 0;
// document.body.scrollTop = 0; // document.body.scrollTop = 0;
}; };
// 打开页面埋点
this.$sendBuriedData({
action: '打开页面',
component_tag: '210#0#0#0'
});
}, },
mounted() { mounted() {
var _this = this; var _this = this;
...@@ -123,9 +140,12 @@ export default { ...@@ -123,9 +140,12 @@ export default {
}); });
}, },
changeTab(index) { changeTab(index) {
let tag = index == 1 ? '089#400079' : '089#400080'; let tag = index == 1 ? '210#210001#0' : '210#210001#1';
this.tabIndex = index; this.tabIndex = index;
if(index == 1 && !this.userMobile) {
rocNative.gotoLogin();
this.tabIndex = 2;
}
this.$sendBuriedData({ this.$sendBuriedData({
component_tag: tag component_tag: tag
}); });
...@@ -142,45 +162,48 @@ export default { ...@@ -142,45 +162,48 @@ export default {
let cachedOtherProjectList = [] let cachedOtherProjectList = []
_this.otherProjectList = [] _this.otherProjectList = []
_this.showLoading = true; _this.showLoading = true;
this.GET("portal/portalApp/queryProjectCooperationInfoV2", param).then( this.GET("cme/project/list", param).then(
res => { res => {
_this.showLoading = false; _this.showLoading = false;
if (res.code == "000000") { if (res.code == "000000") {
let oldProjects1 = []; // let oldProjects1 = [];
let oldProjects2 = []; // let oldProjects2 = [];
for(let i=0;i<res.data.oldProjects.length;i++) { // for(let i = 0; i < res.data.oldProjects.length; i++) {
if(res.data.oldProjects[i].roleFlag == 1) { // if(res.data.oldProjects[i].roleFlag == 1) {
oldProjects1.push(res.data.oldProjects[i]); // oldProjects1.push(res.data.oldProjects[i]);
} else if (res.data.oldProjects[i].roleFlag == 0) { // } else if (res.data.oldProjects[i].roleFlag == 0) {
oldProjects2.push(res.data.oldProjects[i]); // oldProjects2.push(res.data.oldProjects[i]);
} // }
} // }
// console.log('项目1',oldProjects1,'项目2',oldProjects2); // console.log('项目1',oldProjects1,'项目2',oldProjects2);
// cachedJoinProjectList = res.data.myProjectList; cachedJoinProjectList = res.data.myCMEProjectListDtoList;
// _this.joinProjectList = res.data.myProjectList; cachedOtherProjectList = res.data.allCMEProjectListDtoList;
// _this.otherProjectList = res.data.otherProjectList; _this.joinProjectList = res.data.myCMEProjectListDtoList;
cachedJoinProjectList = _this.handleOldProject( _this.otherProjectList = res.data.allCMEProjectListDtoList;
oldProjects1, // cachedJoinProjectList = _this.handleOldProject(
res.data.myProjectList // oldProjects1,
); // res.data.myProjectList
cachedOtherProjectList = _this.handleOldProject( // );
oldProjects2, // cachedOtherProjectList = _this.handleOldProject(
res.data.otherProjectList // oldProjects2,
); // res.data.otherProjectList
// );
// 如果用户已经登陆,则将"至今"的几个项目移到我的列表中 // 如果用户已经登陆,则将"至今"的几个项目移到我的列表中
if(_this.userMobile) { if(_this.userMobile) {
cachedOtherProjectList.map(item => { // cachedOtherProjectList.map(item => {
if(item.projectName && item.projectName.indexOf('国家基本公共卫生服务项目基层高血压管理办公室') >= 0) { // if(item.projectName && item.projectName.indexOf('国家基本公共卫生服务项目基层高血压管理办公室') >= 0) {
cachedJoinProjectList.unshift(item); // cachedJoinProjectList.unshift(item);
} else { // } else {
_this.otherProjectList.push(item); // _this.otherProjectList.push(item);
} // }
}) // })
_this.tabIndex = 1;
} else { } else {
_this.otherProjectList = cachedOtherProjectList _this.tabIndex = 2;
// _this.otherProjectList = cachedOtherProjectList
} }
_this.joinProjectList = cachedJoinProjectList; // _this.joinProjectList = cachedJoinProjectList;
if (_this.joinProjectList && _this.joinProjectList.length === 0) { if (_this.joinProjectList && _this.joinProjectList.length === 0) {
_this.tabIndex = 2; _this.tabIndex = 2;
} }
...@@ -208,6 +231,7 @@ export default { ...@@ -208,6 +231,7 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import "../style/mixin"; @import "../style/mixin";
.page-content { .page-content {
&-table { &-table {
position: fixed; position: fixed;
......
...@@ -2,110 +2,191 @@ ...@@ -2,110 +2,191 @@
<!-- 组件详情页面:模块列表及其下面的元件列表 --> <!-- 组件详情页面:模块列表及其下面的元件列表 -->
<div class="page-container-merge"> <div class="page-container-merge">
<CommonNavbar <CommonNavbar
id="header"
:bgColor="bgColor" :bgColor="bgColor"
v-show="isShowNavbar" v-show="isShowNavbar"
:isBlack="isBlack" :isBlack="isBlack"
:isShowShare="isShowShare"
:title="navTitle" :title="navTitle"
:shareTitle="project.projectName"
:shareTitleInfo="project.projectIntro"
:isFixNavbar="isFixNavbar" :isFixNavbar="isFixNavbar"
:burialPoint="pointStyle" :burialPoint="pointStyle"
borderStyle="0px solid #fff" borderStyle="0px solid #fff"
:backMethod="from" :backMethod="from"
></CommonNavbar> ></CommonNavbar>
<div class="page-content list-container"> <div class="page-content list-container">
<!-- <img <!-- banner图片 -->
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"> -->
<div v-if="bannerType == 1" class="page-content-img-container"> <div v-if="bannerType == 1" class="page-content-img-container">
<img class="banner-img" :src="attachmentUrl"> <img class="banner-img" :src="attachmentUrl" />
<img v-show="pStatus == 1" class="banner-img-1" src="../images/status-join.png"> <!-- <img v-show="project.status == 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="project.status == 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 v-show="project.status == 10" class="banner-img-10" src="../images/status-end-cme.png" />
</div> </div>
<!-- <CommonBannerVideo v-if="bannerType == 1" :videoOptions="videoOptions"></CommonBannerVideo> --> <!-- banner视频 -->
<CommonTcPlayer v-if="bannerType == 2" style="flex" :options="videoOptions"></CommonTcPlayer> <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> <CommonDescription
<CommonSpliteLine></CommonSpliteLine> :projectName="project.projectName"
<!-- <CellListItem :paramData="contentList" :moduleName="moduleName"></CellListItem> --> :studyNum="project.studyNum"
<CertShow v-if="projectStatus === 2"></CertShow> :subject="project.subject"
<CellListDetail v-if="visibleFlag == 1" :projectComponent="projectComponentDTOS" :paramData="contentList" :moduleName="moduleName" :actionList="actionList" :detailNum="detailNum" :courseRequire="courseRequire"></CellListDetail> />
<NoPermContent v-if="visibleFlag == 2"></NoPermContent> <!-- 步骤条 -->
<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> </div>
<Loading v-show="showLoading"/> <Loading v-show="showLoading" />
<PopNotice v-show="isShowNotice" @clickNotice="clickNotice" :noticeData="noticeData"></PopNotice> <!-- 弹框 -->
<CommonDialog
:isShowDialog="isShowDialog"
:isSingle="isSingle"
:cancleBtnText="cancleBtnText"
:confirmBtnText="confirmBtnText"
:content="dialogContent"
@handlerAction="handlerAction"
/>
</div> </div>
</template> </template>
<script> <script>
import CommonNavbar from "@/components/common/common-navbar"; import CommonNavbar from "@/components/common/common-navbar";
import CommonDescription from "@/components/common/common-description"; import CommonDescription from "@/components/common/common-description";
import CommonSpliteLine from "@/components/common/common-splite-line"; 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 CellListDetail from "@/components/business/cell-list-detail";
import NoPermContent from "@/components/business/no-perm-content"; // import NoPermContent from "@/components/business/no-perm-content";
import CommonBannerVideo from "@/components/common/common-banner-video"; // import CommonBannerVideo from "@/components/common/common-banner-video";
import CommonTcPlayer from "@/components/common/common-tcplayer"; import CommonTcPlayer from "@/components/common/common-tcplayer";
import Loading from "@/components/common/common-loading"; 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 { mapGetters, mapActions } from "vuex";
import vueFilters from '@/utils/filter'; import vueFilters from "@/utils/filter";
import PopNotice from "@/components/business/pop-notice";
import NoticeItem from "@/components/business/notice-item";
export default { export default {
data() { data() {
return { 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", from: "inner",
isBlack: false, isBlack: false,
showLoading: false, showLoading: false,
projectId: 1, projectId: "1",
componentId: 1, //componentId: 1,
moduleId: 1, //moduleId: 1,
contentList: [], contentList: [],
moduleName: "", //moduleName: "",
bannerType: 1, bannerType: 1, // 1 图片 2视频
videoOptions: { videoOptions: {
mp4: "", 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浏览器,以及大部分移动端浏览器是不开放视频自动播放这个能力的 autoplay: false, //iOS下safari浏览器,以及大部分移动端浏览器是不开放视频自动播放这个能力的
coverpic: require("../images/video-cover.png"), coverpic: require("../images/video-cover.png"),
width: "415", //视频的显示宽度,请尽量使用视频分辨率宽度 width: "415", //视频的显示宽度,请尽量使用视频分辨率宽度
height: "210" //视频的显示高度,请尽量使用视频分辨率高度 height: "210" //视频的显示高度,请尽量使用视频分辨率高度
}, },
projectStatus: 1, //1没有获得证书 2是获得全部证书 //projectStatus: 1, //1没有获得证书 2是获得全部证书
pStatus: 0, // 项目状态 1是参加中 5是进行中 10是已结束
projectIntro: "",
projectName: "",
attachmentUrl: require("../images/banner-default.png"), attachmentUrl: require("../images/banner-default.png"),
bgColor: "none", bgColor: "none",
navTitle: "", navTitle: "项目详情",
compTitle: "组件名称", // compTitle: "组件名称",
isShowNavbar: true, isShowNavbar: true,
isFixNavbar: true, isFixNavbar: true,
pointStyle: "activity", pointStyle: "activity",
descTitle: "规定从何处开始选取。如果是负数",
description:
"必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置那么它规定从数组尾部开始算起的位置那么它规定从数组尾部开始算起的位置那么它规定从数组尾部开始算起的位置。也就是说那么它规定从数组尾部开始算起的位置。也就是说那么它规定从数组尾部开始算起的位置。也就是说那么它规定从数组尾部开始算起的位置。也就是说那么它规定从数组尾部开始算起的位置。" +
" 也就是说那么它规定从数组尾部开始算起的位置。也就是说,必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推第二个元素。",
projectComponentDTOS: [], projectComponentDTOS: [],
actionList: [], actionList: [],
detailNum: 0, detailNum: 0,
visibleFlag: 0,
courseRequire: 0, courseRequire: 0,
noticeData: {
noticeContent: '',
noticeId: '',
noticeTitle: '',
readFlag: 1 // 已读标识:1已读 2未读
},
isShowNotice: false,
isShowNoticeItem: false,
clientType: 0 clientType: 0
}; };
}, },
...@@ -113,16 +194,16 @@ export default { ...@@ -113,16 +194,16 @@ export default {
CommonNavbar, CommonNavbar,
CommonDescription, CommonDescription,
CommonSpliteLine, CommonSpliteLine,
CommonTitle,
CertShow,
// CellListItem,
CellListDetail, CellListDetail,
NoPermContent,
CommonBannerVideo,
Loading, Loading,
CommonTcPlayer, CommonTcPlayer,
PopNotice, CmeStep,
NoticeItem BasicInfo,
LearnKnow,
ItemIntro,
ItemLeader,
TeacterIntro,
CommonDialog
}, },
computed: { computed: {
...mapGetters(["userInfo"]) ...mapGetters(["userInfo"])
...@@ -130,41 +211,32 @@ export default { ...@@ -130,41 +211,32 @@ export default {
created() { created() {
let _this = this; let _this = this;
this.from = this.$route.query.from || this.from || "native"; this.from = this.$route.query.from || this.from || "native";
this.projectId = this.$route.query.id; this.projectId = this.$route.query.id || 1;
this.componentId = this.$route.query.componentId;
this.moduleId = this.$route.query.moduleId;
this.moduleName = this.$route.query.moduleName;
this.courseRequire = this.$route.query.courseRequire; this.courseRequire = this.$route.query.courseRequire;
// window.__refresh = function() {
// console.log('created __refresh');
// // _this.getContentList(_this.moduleId);
// _this.getProjectParticularsV2();
// };
window.__getUserInfo64Comp = function(param) { window.__getUserInfo64Comp = function(param) {
// alert('__getUserInfo64Comp');
// console.log('__getUserInfo64Comp');
_this.token = param.userToken; _this.token = param.userToken;
_this.setUserInfo(param); _this.setUserInfo(param);
_this.checkToken(); _this.checkToken();
// _this.getContentList(_this.moduleId);
// _this.getComponentInfoById(_this.componentId);
_this.getCoopNoticeInfo()
_this.getProjectParticularsV2(); _this.getProjectParticularsV2();
}; };
_this.getUserInfo(); _this.getUserInfo();
if (__isWeb && process.env.BUILD_ENV == "development") { // if (__isWeb && process.env.BUILD_ENV == "development") {
let param = {}; // let param = {};
__getUserInfo64Comp(param); // __getUserInfo64Comp(param);
// }
if (__isWeb) {
_this.getProjectParticularsV2();
} }
// alert('mounted __before');
window.__refresh = function() { window.__refresh = function() {
// alert('mounted __refresh'); _this.getUserInfo();
// console.log('mounted __refresh');
// _this.getProjectParticularsV2();
_this.getUserInfo();
}; };
// 打开页面埋点
this.$sendBuriedData({
action: "打开页面",
component_tag: `211#0#${this.projectId}#0`
});
}, },
mounted() { mounted() {
window.addEventListener("scroll", this.scrollFun); window.addEventListener("scroll", this.scrollFun);
...@@ -181,32 +253,144 @@ export default { ...@@ -181,32 +253,144 @@ export default {
__funcName: "__getUserInfo64Comp" __funcName: "__getUserInfo64Comp"
}); });
}, },
// 获取单个模块信息 scrollFun() {
getComponentInfoById(componentId) { 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 _this = this;
let param = { let param = {
componentId: componentId, id: _this.projectId,
token: _this.userInfo.userToken, creditId: _this.project.creditId,
token: _this.userInfo.userToken || this.token,
setEntry: true setEntry: true
}; };
this.GET("portal/portalApp/component", param).then(res => { _this.NEW_POST("cme/credit/applyCheck", param).then(res => {
if (res.code == "000000") { if (res.code == "000000") {
_this.attachmentUrl = res.data.imageUrl; gotoPage(
_this.projectIntro = res.data.introduce; _this,
_this.projectName = res.data.name; `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;
} }
}); });
}, },
// 弹框按钮事件
// 获取单个项目信息 handlerAction(data) {
getCoopInfo(projectId) { 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 _this = this;
let param = { let param = {
portalProjectId: projectId, token: _this.userInfo.userToken || this.token,
token: _this.userInfo.userToken,
setEntry: true 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") { if (res.code == "000000") {
// 先设置视频URL再显示视频组件 ------------ BEGIN // 先设置视频URL再显示视频组件 ------------ BEGIN
if (res.data.attachmentType == 2) { if (res.data.attachmentType == 2) {
...@@ -215,63 +399,56 @@ export default { ...@@ -215,63 +399,56 @@ export default {
_this.attachmentUrl = res.data.attachmentUrl; _this.attachmentUrl = res.data.attachmentUrl;
} }
_this.bannerType = res.data.attachmentType; _this.bannerType = res.data.attachmentType;
if(_this.bannerType == 2) { if (_this.bannerType == 2) {
_this.clientType = __isWeb ? 1 : __isAndroid ? 2 : 3; _this.clientType = __isWeb ? 1 : __isAndroid ? 2 : 3;
} }
// 先设置视频URL再显示视频组件 ------------ END // 先设置视频URL再显示视频组件 ------------ END
_this.projectIntro = res.data.projectIntro; _this.project = res.data;
_this.projectName = res.data.projectName; if(_this.project.projectIntro) {
_this.pStatus = res.data.status; _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; changeLeaderText(data) {
for(let i=0;i<list.length;i++) { let _this = this;
let len = vueFilters.strLength(list[i].name); if(_this.projectLeader.info) {
let certificate = list[i].certificateFlag; if(!data.allTextFlag) {
if(len > 30 && certificate == 2) { _this.leaderText = _this.projectLeader.info.length > 70 ? _this.projectLeader.info.slice(0, 70) + "..." : this.projectLeader.info;
list[i].height = "2"; }else {
} else if (len > 30 && certificate != 2) { _this.leaderText = _this.projectLeader.info;
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) { itemIntroText(data) {
let _this = this; let _this = this;
let param = { if(_this.project.projectIntro) {
moduleId: _this.moduleId, if(!data.allTextFlag) {
token: _this.userInfo.userToken, _this.textContent = _this.project.projectIntro.length > 70 ? _this.project.projectIntro.slice(0, 70) + "..." : this.project.projectIntro;
setEntry: true, }else {
projectId: _this.projectId, _this.textContent = _this.project.projectIntro;
};
_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);
} }
});
},
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) { setListData(data) {
...@@ -279,157 +456,225 @@ export default { ...@@ -279,157 +456,225 @@ export default {
let list = data; let list = data;
let actionList = []; let actionList = [];
let detailNum = 0; let detailNum = 0;
for(let i = 0; i < list.length; i++) { for (let i = 0; i < list.length; i++) {
for(let j=0; j < list[i].portalModuleDTOS.length; j++) { for (let j = 0; j < list[i].portalModuleDTOS.length; j++) {
detailNum ++; detailNum++;
if(list[i].portalModuleDTOS[j].status === 2) { if (list[i].portalModuleDTOS[j].status === 2) {
list[i].portalModuleDTOS[j].value = '共'+list[i].portalModuleDTOS[j].nodeCount + '节'; list[i].portalModuleDTOS[j].value =
"共" + list[i].portalModuleDTOS[j].nodeCount + "节";
} else { } 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); actionList.push(list[i].portalModuleDTOS[j].expandKey);
} }
for(let z = 0; z<list[i].portalModuleDTOS[j].contentList.length ; z++) { for (
list[i].portalModuleDTOS[j].contentList[z].height = _this.getHight(list[i].portalModuleDTOS[j].contentList[z]); 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.actionList = actionList;
_this.detailNum = detailNum; _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[0].certificateFlag = 2;
// list[0].portalModuleDTOS[3].contentList[1].certificateFlag = 2; // list[0].portalModuleDTOS[3].contentList[1].certificateFlag = 2;
return list; return list;
}, },
checkToken() { getHight(data) {
let _this = this; let len = vueFilters.strLength(data.name);
let param = { let certificate = data.certificateFlag;
token: _this.userInfo.userToken, if (len > 30 && certificate == 2) {
setEntry: true, return "2";
}; } else if (len > 30 && certificate != 2) {
this.GET("campaign/admin/task/checkToken", param).then(res => { return 2;
if(res.code !== '000000') { } else if (len <= 30 && certificate == 2) {
//未登录 跳转登录页 return "1";
console.log('跳登录'); } else if (len <= 30 && certificate != 2) {
rocNative.gotoLogin(); return 1;
}
});
},
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";
} }
}, }
clickNotice() { // 获取单个模块信息
this.isShowNotice = false // getComponentInfoById(componentId) {
}, // let _this = this;
clickNoticeItem() { // let param = {
this.isShowNotice = true // componentId: componentId,
}, // token: _this.userInfo.userToken,
// setEntry: true
// 获取单个项目公告信息 // };
getCoopNoticeInfo() { // this.GET("portal/portalApp/component", param).then(res => {
let _this = this; // if (res.code == "000000") {
let param = { // _this.attachmentUrl = res.data.imageUrl;
projectId: _this.projectId, // _this.projectIntro = res.data.introduce;
token: _this.userInfo.userToken, // _this.projectName = res.data.name;
setEntry: true // }
}; // });
// },
this.GET("portal/portalApp/getNotice", param).then(res => { // 获取单个项目信息
if (res.code == "000000") { // getCoopInfo(projectId) {
let cData = res.data // let _this = this;
// if(cData.noticeId) { // let param = {
if(cData.noticeId) { // portalProjectId: projectId,
this.noticeData = cData; // token: _this.userInfo.userToken,
this.isShowNoticeItem = true; // setEntry: true
if(cData.readFlag == 2) { // };
this.isShowNotice = true; // this.GET("portal/portalApp/queryProjectParticulars", param).then(res => {
} // if (res.code == "000000") {
} // // 先设置视频URL再显示视频组件 ------------ BEGIN
} // if (res.data.attachmentType == 2) {
}); // _this.videoOptions.mp4 = res.data.attachmentUrl;
}, // } else {
// _this.attachmentUrl = res.data.attachmentUrl;
// }
// _this.bannerType = res.data.attachmentType;
// if(_this.bannerType == 2) {
// _this.clientType = __isWeb ? 1 : __isAndroid ? 2 : 3;
// }
// // 先设置视频URL再显示视频组件 ------------ END
// _this.projectIntro = res.data.projectIntro;
// _this.projectName = res.data.projectName;
// _this.pStatus = res.data.status;
// }
// });
// },
// setContent(data) {
// let list = data;
// for(let i=0;i<list.length;i++) {
// let len = vueFilters.strLength(list[i].name);
// let certificate = list[i].certificateFlag;
// if(len > 30 && certificate == 2) {
// list[i].height = "2";
// } else if (len > 30 && certificate != 2) {
// list[i].height = 2;
// } else if (len <= 30 && certificate == 2) {
// list[i].height = "1";
// } else if(len <= 30 && certificate != 2) {
// list[i].height = 1;
// }
// }
// console.log('contentList!',list);
// return list;
// },
// 获取内容列表
// getContentList(moduleId) {
// let _this = this;
// let param = {
// moduleId: _this.moduleId,
// token: _this.userInfo.userToken,
// setEntry: true,
// projectId: _this.projectId,
// };
// _this.showLoading = true;
// this.GET("portal/portalApp/contentList", param).then(res => {
// // _this.showLoading = false;
// if (res.code == "000000") {
// _this.contentList = _this.setContent(res.data.contentList);
// }
// });
// },
} }
}; };
</script> </script>
<style lang="scss" > <style lang="scss" scoped>
@import "../style/mixin"; @import "../style/mixin";
.page-container-merge { .page-container-merge {
.nav-top .nav-title { .nav-top .nav-title {
height: px2rem(0px); height: px2rem(0px);
padding: px2rem(18px); // 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);
} }
&-5 { .banner-img {
position: absolute; display: inherit;
left: 0; width: px2rem(375px);
top: px2rem(180px); height: px2rem(210px);
width: px2rem(76px); &-1 {
height: px2rem(30px); 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 { .list-container {
position: absolute; // margin-bottom: px2rem(40px);
left: 0; }
top: px2rem(180px); .intro-catalogue-container {
width: px2rem(148px); .title {
height: px2rem(30px); 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> </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 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册