提交 ff59bca6 编写于 作者: xiaoping.di's avatar xiaoping.di

提交

上级 a66cacc4
......@@ -27,6 +27,7 @@
"lodash": "^4.17.15",
"md5": "^2.3.0",
"pre-commit": "^1.2.2",
"storejs": "^2.0.1",
"vant": "^2.8.4",
"vconsole": "^3.3.4",
"vue": "^2.6.11",
......
......@@ -41,6 +41,13 @@ export const getCoopExamResultNews = async (param) => {
params: param,
});
};
export const getCoopResultNewsLocal = async (param) => {
return request({
url: 'app/exam/lives/results',
method: 'GET',
params: param,
});
};
// 当前用户的进行中问诊数据查询
export const getCoopExamWrongRecords = async (param) => {
return request({
......@@ -55,3 +62,11 @@ export const getHotCache = async () => {
method: 'get',
});
};
export const getAnwserExam = async (param) => {
return request({
url: 'app/projectExam/apply',
method: 'POST',
data:param
});
};
......@@ -2,34 +2,38 @@
<!-- Created by Tw93 on 17/07/28. -->
<template>
<!-- <van-cell title="单元格" value="内容" />
<van-cell title="单元格" value="内容" label="描述信息" /> -->
<div :has-bottom-border="false"
@wxcCellClicked="wxcCellClicked"
:accessible="true"
:aria-label="`${title},状态为${checked?'已选中':'未选中'},${disabled?'不可更改':''}`">
<img :src="radioIcon"
slot="label"
class="radio"/>
<div :style="{color:color}"
class="title-text"
slot="title">{{title}}</div>
<div>
<div :has-bottom-border="false" class="radio-all"
@click="wxcCellClicked"
:accessible="true"
:aria-label="`${title},状态为${checked?'已选中':'未选中'},${disabled?'不可更改':''}`">
<img :src="radioIcon"
slot="label"
class="radio"/>
<div :style="{color:color}"
class="title-text"
slot="title">{{title}}</div>
</div>
</div>
</template>
<style scoped>
.radio-all{
display:flex;
align-items:center;
margin-top:10px;
}
.radio {
width: 36px;
height: 36px;
margin-right: 20px;
margin-top: 5px;
width: 18px;
height: 18px;
margin-right: 10px;
}
.title-text {
font-size: 32px;
font-size: 18px;
color: rgb(102, 102, 102);
overflow: visible;
line-height: 45px;
line-height: 23px;
}
</style>
......@@ -72,11 +76,10 @@
}),
computed: {
radioIcon () {
const { icon, disabled, checked, config } = this;
const { icon, checked, config } = this;
const mergeIcon = icon;
config.checkedIcon && (mergeIcon[0] = config.checkedIcon);
config.disabledIcon && (mergeIcon[1] = config.disabledIcon);
// return checked ? mergeIcon[disabled ? 1 : 0] : '';
return checked ? CHECKED : UNCHECKED;
},
backgroundColor () {
......@@ -85,8 +88,6 @@
},
color () {
const { disabled, checked, config } = this;
// let checkedColor = '#EE9900';
// let checkedColor = '#35cbca';
let checkedColor = 'rgb(42, 185, 165)';
config.checkedColor && (checkedColor = config.checkedColor);
return checked && !disabled ? checkedColor : '#3D3D3D';
......
......@@ -110,48 +110,10 @@
},
methods: {
historyMore() {
if(this.$route.name === 'exam_start') {
// this.appBuryingPointEntrust({
// ...click_all_history,
// createdTime: new Date().getTime()
// });
}else if(this.$route.name === 'exam_result') {
// this.appBuryingPointEntrust({
// ...click_all_history_result,
// createdTime: new Date().getTime()
// });
}
this.$emit('watchHistory', 'options');
// this.$router.push({
// path:'/exam_history',
// query:{
// examId: this.examId,
// examType: this.$route.jquery.examType
// }
// })
},
goExamError(obj) {
if (obj.wrongNo > 0) {
if(this.$route.name === 'exam_start') {
// this.appBuryingPointEntrust({
// ...click_check_wrong_collection,
// createdTime: new Date().getTime(),
// labelvalue:this.exam.name
// });
}else if(this.$route.name === 'exam_history') {
// this.appBuryingPointEntrust({
// ...click_check_wrong_collection_history,
// createdTime: new Date().getTime(),
// labelvalue:obj.name
// });
}else if(this.$route.name === 'exam_result') {
// this.appBuryingPointEntrust({
// ...click_down_wrong_collection,
// createdTime: new Date().getTime(),
// labelvalue:this.exam.name
// });
}
if (obj.wrongNo > 0) {
this.$router.push({
path: '/exam-wrong',
query: {
......@@ -172,48 +134,47 @@
justify-content:center;
align-items:center;
background-color:#ffffff;
padding-top:20px;
padding-top:10px;
}
.history_title{
flex-direction:row;
padding-left:30px;
padding-right:30px;
padding-top:22px;
padding-bottom:30px;
padding:11px 15px 15px 15px;
justify-content:space-between;
}
.history_title_text{
font-size:32px;
font-size:16px;
/*font-weight:600;*/
}
.history_title_right{
display:flex;
flex-direction:row;
align-items: center;
}
.history_title_total{
font-size:28px;
font-size:14px;
color:rgba(153,153,153,1);
}
.history_title_img{
height:30px;
width:30px;
height:15px;
width:15px;
}
.history_items{
display:flex;
flex-direction:row;
align-items:center;
justify-content:space-between;
padding-left:30px;
padding-right:30px;
height:75px;
padding:0 15px;
height:auto;
}
.history_item_time{
font-size:28px;
font-size:14px;
color:rgba(153,153,153,1);
flex:5;
/* flex:5; */
}
.history_item_result{
font-size: 28px;
flex:4;
font-size: 14px;
/* flex:4; */
}
.color-success{
color: rgba(42,185,165,1);
......@@ -222,16 +183,17 @@
color: rgba(255,114,114,1);
}
.history_item_info{
font-size:28px;
font-size:14px;
color:rgba(153,153,153,1);
flex:4;
padding-left: 10px;
padding-left: 5px;
}
.flex-8{
flex: 8;
}
.history_item_right{
display:flex;
flex-direction:row;
flex:5;
justify-content:center;
......@@ -240,22 +202,21 @@
line-height: 30px;
}
.history_item_seemore{
font-size:28px;
font-size:14px;
color:rgba(153,153,153,1);
padding-right: 4px;
padding-left: 22px;
padding-left: 6px;
}
.history_item_right_img{
width: 30px;
height: 30px;
width: 15px;
height: 15px;
}
.history_item_radio{
width:16px;
height:16px;
margin-top: 10px;
width:8px;
height:8px;
margin-top: 5px;
}
.history_item_radio_bottom{
margin-top:8px;
margin-top:5px;
width:2px;
height:45px;
background-color:rgba(222,222,222,1)
......@@ -264,5 +225,6 @@
align-items:center;
justify-content:space-between;
flex:2;
margin-left:5px;
}
</style>
......@@ -146,9 +146,8 @@
// ...click_mid_wrong_collection,
// createdTime: new Date().getTime()
// });
this.$router.push({
path: '/exam_wrong',
path: '/exam-wrong',
query: {
answerResultId: obj.answerResultId,
examType: this.$route.query.examType
......@@ -164,7 +163,7 @@
const endDate = new Date(this.options.endDate);
const date = new Date();
if(date > endDate) {
this.showExamFinishedTip = true;
this.showExamFinishedTip = true;
this.$dialog.alert({
title: '',
message: "考试已结束",
......@@ -196,7 +195,10 @@
// createdTime: new Date().getTime()
// });
if(this.examType == 'common') {
weex.requireModule('CourseModule').goBack(2);
this.$router.push({
path: '/stoke'
});
//weex.requireModule('CourseModule').goBack(2);
} else {
this.$router.push({
path: '/'
......@@ -225,81 +227,92 @@
.container{
justify-content:center;
align-items:center;
margin-bottom:20px;
padding-bottom:10px;
background-color:#ffffff;
height: 798px;
width: 750px;
height:auto;
width:100%;
}
.result_content{
justify-content:center;
align-items:center;
background-color: #ffffff;
padding-top: 100px;
padding-left: 30px;
padding-right: 30px;
padding: 25px 7px 0 7px;
}
.result_image{
width: 240px;
height: 240px;
width: 120px;
height: 120px;
display:block;
margin:0 auto;
}
.exam_name{
margin-top:40px;
margin-bottom:30px;
margin-top:20px;
margin-bottom:15px;
margin:0 auto;
}
.exam_name_text{
font-size:34px;
font-size:17px;
color:rgba(51,51,51,1);
font-weight:700;
font-weight:600;
text-align:center;
margin-top:15px;
}
.exam_time{
flex-direction:row;
}
.exam_time_text{
font-size:28px;
font-size:14px;
color:rgba(153,153,153,1);
margin-right:20px;
margin-right:10px;
margin-top:10px;
text-align:center;
}
.exam_time_status{
flex-direction:row;
display:flex;
justify-content:center;
align-items:center;
margin-top:10px;
}
.exam_time_wrang{
font-size:28px;
font-size:14px;
color:rgba(51,51,51,1);
}
.exam_time_img{
width:28px;
height:28px;
width:16px;
height:16px;
}
.exam_button{
height:76px;
height:36px;
background-color:rgba(88, 181, 168,1);
justify-content:center;
align-items:center;
border-radius:44px;
padding-left:65px;
padding-right:65px;
margin-top:40px;
margin-bottom:40px;
width: 380px;
border-radius:20px;
padding:0px 30px;
width: 50%;
line-height:36px;
text-align:center;
margin:0 auto;
margin-top:10px;
margin-bottom:10px;
}
.exam_button_text{
font-size:32px;
font-size:16px;
color:#ffffff;
border-radius:44px;
border-radius:20px;
}
.retry{
display:flex;
justify-content:center;
flex-direction:row;
align-items:center;
}
.retry_text{
font-size:28px;
font-size:14px;
color:rgba(153,153,153,1);
margin-right:10px;
}
.go_retry{
font-size:28px;
font-size:14px;
color:rgba(42 ,185 ,165,1);
border-bottom-style:solid;
border-bottom-width:2px;
......
<template>
<div class="container">
<div class="stroke_container">
<div class="local-exam">
<text class="project_title">现场考试</text>
<div class="code-btn-wrap">
<wxc-button :btnStyle="codeBtn" :textStyle="codeTextStyle" text="输入考试码" @wxcButtonClicked="codeBtnClicked"></wxc-button>
</div>
</div>
<div class="history-wrap">
<div class="history-header">
<text class="project_title his_label">考试记录</text>
<div class="course_see_more" @click="seeMoreHistory" v-if="livesExamContent.localHistoryList.length > 5">
<text class="see_more">更多</text>
<image class="see_more_img" src="https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/arrow_right_gray%403x.png"></image>
</div>
</div>
<local-exam-history :showHeaderH="false" :localHistoryList="livesExamContent.localHistoryList" :examId="11"></local-exam-history>
</div>
</div>
<wxc-loading :show="isShow"></wxc-loading>
<wxc-dialog confirm-text="重新输入"
cancel-text="取消"
:show="showReInputTip"
@wxcDialogCancelBtnClicked="hideReInput"
@wxcDialogConfirmBtnClicked="reInputConfirm">
<text slot="content" class="content-subtext">考试码不正确</text>
</wxc-dialog>
<wxc-dialog confirm-text="我知道了"
:show="showExamNotStartTip"
main-btn-color="#35cbca"
:single="true"
@wxcDialogConfirmBtnClicked="notStartConfirm">
<text slot="content" class="content-subtext">考试未开始</text>
</wxc-dialog>
<wxc-dialog confirm-text="我知道了"
:show="showExamFinishedTip"
main-btn-color="#35cbca"
:single="true"
@wxcDialogConfirmBtnClicked="finishedConfirm">
<text slot="content" class="content-subtext">考试已结束</text>
</wxc-dialog>
<!--height="342"-->
<wxc-mask height="642"
width="750"
border-radius="0"
duration="200"
mask-bg-color="transparent"
:has-animation="true"
:has-overlay="true"
:show-close="false"
:show="showCodeInputDialog">
<div class="code-content">
<div class="code-title-wrap">
<image class="code-img" src="https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/close%403x.png" @click="showCodeInputDialog=false"></image>
<text class="code-title">请输入考试码</text>
</div>
<div class="code-input-wrap">
<input type="text" class="code-input" :class="[code1.length > 0 ? 'code-active': '']" v-model="code1" maxlength="1" @input="codeChange(code1, 'code2')" ref="code1"/>
<input type="text" class="code-input" :class="[code2.length > 0 ? 'code-active': '']" v-model="code2" maxlength="1" @input="codeChange(code2, 'code3')" ref="code2"/>
<input type="text" class="code-input" :class="[code3.length > 0 ? 'code-active': '']" v-model="code3" maxlength="1" @input="codeChange(code3, 'code4')" ref="code3"/>
<input type="text" class="code-input" :class="[code4.length > 0 ? 'code-active': '']" v-model="code4" maxlength="1" @input="codeChange(code4, 'code5')" ref="code4"/>
<input type="text" class="code-input" :class="[code5.length > 0 ? 'code-active': '']" v-model="code5" maxlength="1" @input="codeChange(code5, 'code6')" ref="code5"/>
<input type="text" class="code-input" :class="[code6.length > 0 ? 'code-active': '']" v-model="code6" maxlength="1" @input="codeChange(code6, '')" ref="code6"/>
</div>
</div>
</wxc-mask>
</div>
</template>
<script>
import { Utils, WxcButton, WxcMask } from 'weex-ui'
import WxcDialog from '../components/wxc-dialog'
import picaCommon from '../util/picaCommon'
import WxcLoading from '../components/wxc-loading'
import localExamHistory from '../components/stroke/localExamHistory'
let modal = weex.requireModule('modal')
let configurationModule = weex.requireModule('configurationModule')
let globalEvent = weex.requireModule('globalEvent')
export default {
components: {WxcDialog, Utils, WxcLoading, WxcButton, WxcMask, localExamHistory},
props:['livesExamContent'],
data(){
return{
showExamFinishedTip: false,
showReInputTip: false,
showExamNotStartTip: false,
code1: '',
code2: '',
code3: '',
code4: '',
code5: '',
code6: '',
showCodeInputDialog: false,
showHeaderH: true,
showHeader:false,
y:0,
projectName: '', //项目名称
isShow: false,
isIOS: true,
codeBtn: {
height: '90px',
backgroundColor: 'rgba(106, 159, 233, 0.1)',
borderRadius: '100px',
width: '600px'
},
codeTextStyle: {
color: 'rgb(106, 159, 233)',
fontSize: '32px'
}
}
},
created () {
this.projectId = this.getUrlSearch(weex.config.bundleUrl, 'id') || 1
this.isIOS = Utils.env.isIOS()
// this.init()
},
mounted(){
},
computed: {
},
methods: {
finishedConfirm() {
this.showExamFinishedTip = false
},
hideReInput() {
this.showReInputTip = false
},
reInputConfirm() {
this.hideReInput()
this.showCodeInputDialog = true
this.$nextTick(()=> {
this.$refs['code1'].focus()
})
},
notStartConfirm() {
this.showExamNotStartTip = false
},
clearCode() {
this.code1 = ''
this.code2 = ''
this.code3 = ''
this.code4 = ''
this.code5 = ''
this.code6 = ''
},
checkCodeInputFinished() {
var code
if(this.code1 && this.code2 && this.code3 && this.code4 && this.code5 && this.code6) {
code = '' + this.code1 + this.code2 + this.code3 + this.code4 + this.code5 + this.code6
this.clearCode()
this.showCodeInputDialog = false
this.isShow = true
//考试id
// private Integer examId;
//考试结果标志1表示考试进行中5表示考试未开始10表示考试了已经结束15表示查询不到考试(考试码不正确)20考试被管理员删除(隐藏)
// private Integer resultFlag;
//考试开始时间
// protected Date startDate;
//考试结束时间
// protected Date endDate;
this.GET('app/exam/lives/check',{examCode: code}, (res) => {
this.isShow = false
var result = res.data.checkResult,
flag = result.resultFlag
if(flag == 1) {
this.$router.push({
path:'/exam_result',query:{examId: result.examId, origin: 'start', examType: 'local', endDate: result.endDate}
})
} else if(flag == 5) {
this.showExamNotStartTip = true
} else if(flag == 10 || flag == 20) {
this.showExamFinishedTip = true
} else if(flag == 15) {
this.showReInputTip = true
}
})
}
},
codeChange(val, nextInput) {
if(val && nextInput) {
this.$refs[nextInput].focus()
}
this.checkCodeInputFinished()
},
seeMoreHistory() {
this.$router.push({
path:'/local_exam_history',query:{examId: this.examId}
})
},
codeBtnClicked() {
this.showCodeInputDialog = true
this.$nextTick(()=> {
this.$refs['code1'].focus()
})
},
/* getLength(str, num){
if (str.length > num){
str = str.substr(0, num) + "..."
}
return str
},*/
/* init(){
this.getTop()
},*/
/*getTop(){
this.isShow = true
let _self = this
this.GET('contents/projects/top',{id:this.projectId},function (res) {
console.log('top',res)
// modal.alert({
// message: "top:" + JSON.stringify(res)
// })
if (res && res.data){
// _self.infoMsg = res.data.intro
// _self.info.message = _self.infoMsg
_self.infoLists = res.data.texts //简介(文案)组件
_self.sliderLists = res.data.carousels //轮播图组件
_self.projectName = res.data.projectName //项目名称
_self.projectName = _self.getLength(_self.projectName, 8);
}else{
modal.toast({
message: '网络异常,请稍后再试',
duration: 1.0
})
}
_self.getBottom()
})
},
getBottom(){
let _self = this
this.GET('contents/projects/bottom',{id:this.projectId},function (res) {
console.log('bottom',res)
// modal.alert({
// message: "bottom:" + JSON.stringify(res)
// })
if (res && res.data){
_self.courseLists = res.data.courses //[0].courseModuleList
if (_self.courseLists && _self.courseLists.length){
_self.courseLists.sort(function(a,b){
return a.seq_no - b.seq_no
})
}
_self.courseLists = _self.courseLists.concat([])
}else {
modal.toast({
message: '网络异常,请稍后再试',
duration: 1.0
})
}
_self.getMiddle()
})
},
getMiddle(){
let _self = this
this.GET('contents/projects/middle',{id: this.projectId},function (res) {
console.log("middle",res)
// modal.alert({
// message: "middle:" + JSON.stringify(res)
// })
_self.isShow = false
if (res && res.data){
_self.examLists = res.data.moduleTypeExams
if (_self.examLists && _self.examLists.length){
_self.examLists.sort(function(a,b){
return a.seq_no - b.seq_no
})
_self.examLists.forEach(function (item) {
item.allLists = item.examModuleList
if (item.courseList){
let arr = item.courseList
arr.forEach(function (course) {
let exam_id = course.exam_id
for (let k =0; k < item.allLists.length; k++){
if (exam_id == item.allLists[k].exam_id){
item.allLists.splice(k, 0, course);
break;
}
}
})
}
})
_self.examLists = _self.examLists.concat([])
}else {
_self.examLists = []
}
_self.getOrder()
}else{
modal.toast({
message: '网络异常,请稍后再试',
duration: 1.0
})
}
})
},
getOrder(){
let _self = this
this.GET('contents/projects/'+ this.projectId,{},function (res) {
console.log('order',res)
// modal.alert({
// message: "order:" + JSON.stringify(res)
// })
if (res && res.data){
//组件type
// module_type:1、轮播图组件 5、文案组件 10、考试组件 15、关联课程组件 20、链接组件 25、现场考试组件
_self.orderList = res.data.projectList
if (res.data.respCode != 200){
modal.toast({
message: res.data.respMsg,
duration: 1.0
})
return
}
let arr = [{slot:'type_1'},{slot:'type_2'},{slot:'type_3'},{slot:'type_4'},{slot:'type_5'}]
// arr.map(function (item) {
// _self.slots.push(item)
// })
_self.slots.length = _self.orderList.length
// debugger
for(let i = 0; i < _self.orderList.length; i++){
let number = _self.orderList[i].module_type
switch (number){
case 1:
_self.slots[i] = arr[0];
break;
case 5:
_self.slots[i] = arr[1];
break;
case 10:
_self.slots[i] = arr[2];
break;
case 15:
_self.slots[i] = arr[3];
break;
case 25:
_self.slots[i] = arr[4];
break;
}
}
// debugger
_self.slots = _self.slots.concat([])
_self.infoLists.forEach(function (item) {
_self.allComponentLists.push(item)
})
_self.sliderLists.forEach(function (item) {
_self.allComponentLists.push(item)
})
_self.courseLists.forEach(function (item) {
_self.allComponentLists.push(item)
})
_self.examLists.forEach(function (item) {
_self.allComponentLists.push(item)
})
_self.allComponentLists.sort(function (a,b) {
return a.seq_no - b.seq_no
})
_self.allComponentLists = _self.allComponentLists.concat([])//Object.assign([],)
}else{
modal.toast({
message: '网络异常,请稍后再试',
duration: 1.0
})
}
})
},*/
taggleSlot(){
if(this.slot =='title'){
this.slot ='content'
}else{
this.slot =='title'
}
},
scroll(event){
let y = parseInt(event.contentOffset.y)
if(y < -50){//去认证被遮住
this.showHeader = true
}else{
this.showHeader = false
}
},
openDialog () {
this.show = true;
},
goBack(){
configurationModule.goBack()
},
wxcDialogCancelBtnClicked () {
//此处必须设置,组件为无状态组件,自己管理
// this.show = false;
this.taggleSlot()
},
wxcDialogConfirmBtnClicked () {
//此处必须设置,组件为无状态组件,自己管理
//this.show = false;
},
wxcDialogNoPromptClicked (e) {
//此处必须设置,组件为无状态组件,自己管理
this.isChecked = e.isChecked;
}
/*getLocalExamResults(){
let para = {
examId: this.$route.query.examId,
pageNo: 1,
pageSize: 5
}
/!* if(this.$route.query.examType === 'local') {
url = 'app/exam/lives/results'
}*!/
this.GET('app/exam/lives/results', para, res => {
// this.showLoading = false
let data = res.data
console.log(data)
/!*if(data.respCode === 200) {
// this.isInitFinished = true
this.localHistoryList = this.format(data.examRecordList)
} else {
this.toast({
message: data.respMsg
})
}*!/
})
}*/
// clickJ(){
// this.$refs["mainCp"].map( function (item) {
// if (item.$el.attrs.type == "type_3"){
// console.log("cc:",item)
// }
// })
// console.log("cc:",this.$refs["mainCp"])
// },
// clickShareImage(){
// configurationModule.shareProject()
// },
},
}
</script>
<style scoped>
.content-subtext {
font-size:34px;
color:rgba(102,102,102,1);
line-height:50px;
text-align: center;
}
.code-input-wrap {
flex-direction: row;
justify-content: center;
align-items: center;
height: 244px;
background-color: white;
}
.code-input {
width:90px;
height:90px;
background:rgba(255,255,255,1);
border-radius:4px;
border-width:1px;
border-style:solid;
border-color:rgba(204,204,204,1);
margin-right: 10px;
font-size: 50px;
color:rgba(51,51,51,1);
line-height:50px;
text-align: center;
}
.code-active {
border-color:rgba(65,183,167,1);
}
.code-input:focus {
border-color:rgba(58,172,156,1);
}
.code-title-wrap {
padding: 20px 20px 30px 20px;
flex-direction: row;
justify-content: center;
align-items: center;
border-bottom-width:1px;
border-bottom-style:solid;
border-bottom-color:rgba(240,240,240,1);
background-color: white;
}
.code-img {
width: 50px;
height: 50px;
position: absolute;
left: 20px;
}
.code-title {
font-size:35px;
color:rgba(51,51,51,1);
/*line-height:30px;*/
}
.history-header {
flex-direction:row;
width:750px;
justify-content:space-between;
padding-top:30px;
padding-left:30px;
padding-right:30px;
}
.course_see_more{
flex-direction:row;
height: 48px;
line-height: 48px;
justify-content: center;
align-items: center;
}
.see_more{
font-size:28px;
color:#999999;
padding-right: 6px;
}
.see_more_img{
width:30px;
height:30px;
}
.history-wrap {
background-color: rgb(255, 255, 255);
/*padding: 30px 0 30px 30px;*/
/*margin-top: 20px;*/
border-top-width: 1px;
border-top-style: solid;
border-top-color: rgb(240, 240, 240);
padding-bottom: 40px;
}
.local-exam {
background-color: rgb(255, 255, 255);
padding: 30px;
margin-top: 20px;
}
.code-btn-wrap {
padding-top: 40px;
/*padding-left: 10px;*/
/*padding-right: 40px;*/
justify-content: center;
align-items: center;
}
.project_title{
font-size:36px;
color:#333333;
font-weight:700;
}
.his_label {
color:#999999;
font-weight: 500;
}
.stroke_container{
background-color:#f5f5f5;
}
.stroke_header_statusBar{
position: fixed;
left: 0;
top: 0;
width: 750px;
height: 44px;
align-items: flex-end;
padding-left:0px;
padding-right:0px;
padding-bottom:0px;
flex-direction:row;
justify-content: space-between;
}
.background-fff{
background-color: #ffffff;
}
.background-999{
background-color: #999999;
}
.stroke_header{
position:fixed;
left:0px;
top: 44px;
width:750px;
height: 106px;
align-items: flex-end;
padding-left:30px;
padding-right:30px;
padding-bottom:30px;
flex-direction:row;
justify-content: space-between;
}
.stroke_header_white{
background-color:#ffffff;
}
.stroke_header_left{
flex-direction:row;
align-items: center;
}
.stroke_header_title{
position:absolute;
left:0;
bottom:30px;
width:750px;
text-align:center;
height: 50px;
font-size:36px;
color:#333333;
}
.go_back{
width:50px;
height:50px;
}
.home_page{
font-size:32px;
color:#333333;
}
/*.share_image{*/
/*position: absolute;*/
/*width: 50px;*/
/*height: 50px;*/
/*right: 16px;*/
/*bottom:35px;*/
/*}*/
</style>
......@@ -4,18 +4,18 @@
v-if="showHeaderH"
class="history_title"
>
<text class="history_title_text">
<div class="history_title_text">
考试记录
</text>
</div>
<div
v-if="historyList.length > 2"
class="history_title_right"
@click="historyMore"
>
<text class="history_title_total">
<div class="history_title_total">
全部
</text>
<image
</div>
<img
class="history_title_img"
src="https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/arrow_right_gray%403x.png"
/>
......@@ -28,22 +28,22 @@
class="history-item"
>
<div class="his-left">
<text class="his-title">
<div class="his-title">
{{ value.name }}
</text>
<text class="his-detail">
</div>
<div class="his-detail">
{{ value.passFlag == 5 ? '通过' : '未通过' }}{{ value.correctNo + value.wrongNo }}题 对{{ value.correctNo }}题 错{{ value.wrongNo }}
</text>
</div>
</div>
<div
v-if="value.restTimes < 0 && value.restTimes != -1"
class="his-right"
@click="goExamError(value)"
>
<text class="set_text_see">
<div class="set_text_see">
查看
</text>
<image
</div>
<img
class="item3_right_arrow"
src="https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/arrow_right_black%403x.png"
/>
......@@ -53,41 +53,28 @@
class="his-right"
@click="goExamStart"
>
<text class="re-exam">
<div class="re-exam">
重考
</text>
</div>
</div>
</div>
<!--<div class="history-item">
<div class="his-left">
<text class="his-title">高血压中老年考试考试题,目高血压中老年考试考试题目高,血压中老年考试考试题目高血压中老年考试考试题目</text>
<text class="his-detail">成绩:优秀 共30题 对18题 错12题</text>
</div>
<div class="his-right">
<text class="re-exam">重考</text>
</div>
</div>-->
<div
v-if="localHistoryList == 0"
class="history-empty"
>
<image
<img
class="empty-img"
src="https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/wu%402x.png"
/>
<text class="empty-text">
<div class="empty-text">
暂无现场考试记录
</text>
</div>
</div>
</div>
</template>
<script>
// text collapse
import {click_retest} from '../../util/buryingPoint';
export default {
components: {},
props:['localHistoryList', 'showHeaderH', 'examId'],
......@@ -97,19 +84,8 @@
},
computed: {
// historyListBak:function(){//备份
// return this.historyList.concat([])
// },
// historys:function(){
// var newList = this.limit?this.historyList.splice(0,this.limit):this.historyList
// return newList
// }
},
created () {
// this.historys = this.historyList
// this.historyListBak = this.historyList.concat([])//拷贝一份
// console.log(this.$props['historyList'])
// this.historys = this.$props.historyListBak.splice(0,3)
},
mounted() {
......@@ -117,14 +93,14 @@
methods: {
historyMore() {
this.$router.push({
path:'/exam_history', query:{examId: this.examId}
path:'/exam-history', query:{examId: this.examId}
});
},
// 查看
goExamError(obj) {
if (obj.wrongNo > 0) {
this.$router.push({
path: '/exam_wrong',
path: '/exam-wrong',
query: {
answerResultId: obj.answerResultId
}
......@@ -132,13 +108,8 @@
}
},
examWrongPage(obj) { // 查看错题
this.appBuryingPointEntrust({
...click_mid_wrong_collection,
createdTime: new Date().getTime()
});
this.$router.push({
path: '/exam_wrong',
path: '/exam-wrong',
query: {
answerResultId: obj.answerResultId
}
......@@ -146,19 +117,7 @@
},
// 重考
goExamStart(obj) { // 我要重考
/* if (this.endNum != undefined && this.endNum != null && this.endNum == 0){
modal.toast({
message: "您尚未完成相关培训课程的学习",
duration: 1.0
})
}else {
this.$emit("reExamStart")
}*/
this.$emit('reExamStart');
this.appBuryingPointEntrust({
...click_retest,
createdTime: new Date().getTime()
});
}
},
......
......@@ -3,27 +3,26 @@
<div class="head-fixed">
<div
class="head-bg"
:style="{backgroundColor: headBg, height: headHeight + 'px'}"
:style="{backgroundColor: headBg, height:'auto'}"
/>
<div
class="head wrap"
:style="{paddingTop: (70 - headHeight) + 'px'}"
>
<img
v-if="type != 2"
src="http://pica-pro.oss-cn-shanghai.aliyuncs.com/md_resources/back_gray.png"
style="width: 50px; height: 50px;"
style="width: 25px; height: 25px;"
@click="goBack"
/>
<div
v-if="!showHeader"
style="width:50px;height: 50px;"
style="width:25px;height: 25px;"
>&nbsp;
</div>
<img
v-if="type == 2"
src="https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/close%403x.png"
style="width: 50px; height: 50px;"
style="width: 35px; height: 35px;"
@click="goBack"
/>
<div class="title">
......@@ -56,9 +55,6 @@
created () {
if(this.isAndroid) {
this.headBg = '#999999';
// weex.requireModule('eventModule').getStatusBarSize(res => {
// this.headHeight = parseInt(res.height) / 1.5;
// });
}
},
mounted() {
......@@ -76,11 +72,8 @@
},
},
};
</script>
<style scoped>
.head-fixed {
position: fixed;
......@@ -98,51 +91,14 @@
border-bottom-color: #e7e7e7;
}
.wrap {
padding: 70px 30px 20px 30px;
padding:10px 15px;
}
.empty {
width: 50px;
height: 3px;
width: 25px;
height: 1px;
}
.title {
font-size: 38px;
/*font-weight: 600;*/
font-size: 19px;
color: #333333;
}
/*.result_header{*/
/*position:fixed;*/
/*top:0;*/
/*left:0;*/
/*height:140px;*/
/*width:750px;*/
/*background-color:#ffffff;*/
/*padding-left:20px;*/
/*flex-direction: row;*/
/*align-items:center;*/
/*justify-content: space-between;*/
/*border-bottom-style: solid;*/
/*border-bottom-width: 1px;*/
/*border-bottom-color: #e7e7e7;*/
/*}*/
/*.back_wrap{*/
/*flex-direction: row;*/
/*}*/
/*.back_image{*/
/*width: 50px;*/
/*height: 50px;*/
/*margin-top:35px;*/
/*}*/
/*.title{*/
/*font-size:36px;*/
/*color:rgba(51,51,51,1);*/
/*width:750px;*/
/*position:absolute;*/
/*top:0;*/
/*left:0;*/
/*height:140px;*/
/*text-align:center;*/
/*margin-top:70px;*/
/*}*/
</style>
<template>
<div>
<div class="container">
<text class="project_title">
{{ examContent.module_name }}
</text>
<div
v-if="examContent.allowFlag == 0"
class="project_advice"
@click="clickJoin(examContent)"
>
<text class="project_advice_text">
{{ examContent.show_text }}
</text>
<text class="project_join_text">
{{ examContent.interactive_text }}
</text>
<image
class="project_see_more"
src="https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/arrow_right_red%403x.png"
/>
</div>
<div
v-if="examContent.passFlag == 5"
class="project_advice_auth"
@click="getCertify"
>
<image
class="advice_auth_img"
src="https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/cup%403x.png"
/>
<div class="advice_auth_text">
<text class="advice_auth_text_content">
{{ examContent.all_exam_writing }}
</text>
</div>
<!--<image class="advice_auth_right_img" src="https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/whiteLeft%403x.png"></image>-->
</div>
<div
v-for="(value,key) in examContent.allLists"
:key="key"
:class="[examContent.allLists.length>key+1?'test_list':'test_list1']"
>
<!--左边序号/圆圈-->
<div class="test_item1">
<image
v-if="examContent.exam_order == 5"
class="circle_gray"
:src="examContent.allowFlag==1 ? circleYellow: circleGray"
/>
<text
v-if="examContent.exam_order == 1"
class="order_number"
:class="[(examContent.allowFlag==1 && setOpen(key,examContent.allLists))? ((value.testNumFlag > 0 || value.progress == 100)? 'color-666': 'color-42a'): 'color-ccc']"
>
0{{ key+1 }}.
</text>
<div
v-if="examContent.exam_order == 1 && key < (examContent.allLists.length - 1)"
class="set_line_item"
:class="[(examContent.allowFlag==1 && (value.testNumFlag >0 || value.progress == 100 )) ? 'back-666': 'back-f0']"
/>
</div>
<!--中间文案-->
<div
class="test_item2"
:class="[key < examContent.allLists.length - 1? 'border-bottom': '']"
>
<text
v-if="examContent.allowFlag == 0"
class="test_name color-666"
>
{{ value.course_id ? messages(value.course_name,14) : messages(value.name, 14) }}
</text>
<text
v-if="examContent.allowFlag == 1"
class="test_name"
:class="[ examContent.exam_order == 1 ? setOpen(key,examContent.allLists) ? (value.testNumFlag > 0 || value.progress == 100) ? 'color-333': 'color-42a': 'color-666': 'color-333']"
>
{{ value.course_id ? messages(value.course_name,14) : messages(value.name, 14) }}
</text>
<text
v-if="!value.course_id"
class="test_info"
:class="[examContent.allowFlag==1 ? examContent.exam_order == 1 ? setOpen(key,examContent.allLists) ? 'color-999': 'color-ccc' : 'color-999':'color-ccc']"
>
{{ value.testNumFlag > 0 ? ((value.standard_type == 10 ? "成绩:"+ value.answerResultModel.custom_value : value.standard_type == 5 ? value.answerResultModel.custom_value : "已完成") + " 共"+value.question_no+"题 对"+value.answerResultModel.correct_no+"题 错"+value.answerResultModel.wrong_no+"题"): messages(value.exam_writing, 16) }}
</text>
<text
v-if="value.course_id"
class="test_info"
:class="[examContent.allowFlag==1 ? examContent.exam_order == 1 ? setOpen(key,examContent.allLists) ? 'color-999': 'color-ccc' : 'color-999':'color-ccc']"
>
{{ value.progress > 0 ? (value.progress == 100) ? "已完成学习" : "进行中 完成" + value.progress + "%": messages(value.study_writing, 16) }}
</text>
</div>
<!--右边文案-->
<div
class="test_item3"
:class="[key < examContent.allLists.length - 1? 'border-bottom': '']"
@click="goExam(key,value)"
>
<text
v-if="value.testNumFlag == 0 || value.progress < 100"
class="go_examination"
:class="[examContent.allowFlag==1 ? examContent.exam_order == 1 ? setOpen(key,examContent.examModuleList) ? 'border-color-94': 'border-color-e5' : 'border-color-94' : 'border-color-e5',
examContent.allowFlag==1 ? examContent.exam_order == 1 ? setOpen(key,examContent.examModuleList) ? 'color-42a' : 'color-999': 'color-42a' : 'color-999']"
>
{{ value.course_id ? '去学习':'去考试' }}
</text>
<div
v-if="value.testNumFlag > 0 || value.progress == 100"
class="go_result"
>
<text class="set_text_see">
{{ value.course_id ? "再学一遍": getBoolForExam(value) ? "重考" : "查看" }}
</text>
<image
class="item3_right_arrow"
src="https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/arrow_right_black%403x.png"
/>
</div>
</div>
</div>
</div>
<wxc-dialog
title=""
:content="setContent"
:show="isQuery"
cancel-text="取消"
confirm-text="去考试"
main-btn-color="#35cbca"
@wxcDialogCancelBtnClicked="wxcDialogCancelBtnClicked"
@wxcDialogConfirmBtnClicked="wxcDialogConfirmBtnClicked"
/>
</div>
</template>
<script>
// text collapse
import Vue from 'vue';
const modal = weex.requireModule('modal');
const configurationModule = weex.requireModule('configurationModule');
const globalEvent = weex.requireModule('globalEvent');
import wxcDialog from '../wxc-dialog';
const storage = weex.requireModule('storage');
export default {
components: {wxcDialog},
props:['examContent', 'hasAuth', 'keyIndex'],
data() {
return{
projectId: 1,
hasCertify: false,
circleGray: 'https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/circle_gray%403x.png',
circleYellow: 'https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/circle_red%403x.png',
isQuery: false,
setContent: '学习课程后再参加考试,成绩肯能会更优秀哦!',
currentId: 0,
currentIndex: 0, // 当前选中的考试下标
currentObj: {}, // 当前选中的考试内容
beforeLearningExamNumber: 0,
examNotStartLable: '',
query: {
examId: null,
origin: ''
}
};
},
computed: {
},
created () {
},
mounted() {
},
methods: {
messages (str, num) {
return str.length > num ? str.substr(0, num - 1) + '...' : str;
},
setOpen(index, arr) {
if (index == 0) {
return true;
}else if (index > 0 && ((arr[index - 1].progress == 100 || arr[index - 1].testNumFlag > 0 ) || (arr[index].progress == 100 || arr[index].testNumFlag > 0))) {
return true;
}
return false;
},
clickJoin(obj) {
if (obj.transfer_flag == 1) { // 有跳转路径
const url = obj.url ? obj.url : 'https://vuejs.org';
this.$router.push({
path: '/web_url',
query: {
url: url
}
});
}
},
getCertify() {
},
dateToString(t_date) {
const start_date_y = t_date.getFullYear();
const start_date_m = t_date.getMonth() + 1;
const start_date_d = t_date.getDate();
const start_date_h = t_date.getHours();
const start_date_mm = t_date.getMinutes();
return start_date_m + '月' + start_date_d + '日 ' + start_date_h + ':' + start_date_mm;
},
checkExamBegin(obj) {
if (!obj.course_id && obj.date_type == 5) {// 定时开放
const now_date = new Date();
const start_date = new Date(obj.start_date);
const end_date = new Date(obj.end_date);
const min_time = now_date - start_date;
const max_time = end_date - now_date;
if (min_time > 0 && max_time > 0) {
return true;
}else {
this.examNotStartLable = '考试开放时间 ' + this.dateToString(start_date) + '至' + this.dateToString(end_date);
return false;
}
}else {// 始终开放
return true;
}
},
goIDCardAndEdu(obj) {
const sendObj = {
field_requirement: 0,
roleCode: 'R001',
user_role_list: ''
};
this.GET('contents/projects/guestRoleCode', {}, (res) => {
const configurationModule = weex.requireModule('configurationModule');
if(res.data && res.data.respCode == 200) {
sendObj.roleCode = res.data.roleCode;
const mess = obj.field_requirement ? obj.field_requirement : -1;
sendObj.field_requirement = mess;
sendObj.user_role_list = obj.user_role_list;
configurationModule.checkIDCardAndEducation(sendObj);
}else {
modal.toast({
message: '网络异常,请稍后再试',
duration: 1.0
});
}
});
},
goExam(index, obj) {
// modal.alert({message:'keyIndex ' + this.keyIndex})
storage.setItem('keyIndex', this.keyIndex, (e) => {
// modal.alert({message:e.result})
});
if (this.examContent.allowFlag == 1) {// 加入项目(项目考试组件有权限)
this.currentIndex = index;
this.currentObj = obj;
if (this.checkExamBegin(obj)) {
this.beginLogicForExam(index, obj);
}else {
modal.toast({
message: this.examNotStartLable,
duration: 1.0
});
}
}else {// 未加入项目
modal.toast({
message: this.examContent.show_text,
duration: 1.0
});
}
},
getBoolForExam(obj) { // 在考试至少完成一次情况下
// console.log(obj)
// obj.answerResultModel={
// pass_flag:5
// }
if (obj.answerResultModel.pass_flag == 5) {// 考试通过,不重考
return false;
}else {// 考试不通过
if (obj.again_times == -1 || (obj.again_times - obj.exam_num > 0)) {// 考试无限次,或者考试次数小于允许考试次数
return true;
}else {
return false;
}
}
},
addLogicForExam() {
// modal.alert({
// message:'跳转考试页面前的数据===>'+JSON.stringify(this.query)
// })
this.$router.push({
path:'/exam_result',
query: this.query
});
},
beginLogicForExam(index, obj) {
if (!obj.course_id) {// 考试项
if (obj.testNumFlag > 0) {// 完成考试
const isGoExam = this.getBoolForExam(obj);
if (isGoExam) {// 去重考
if ((index == 0 || index == 1) || (index > 0 && !this.examContent.allLists[index - 1].course_id)) {//
// modal.alert({message:'111'})
this.query = {
examId: obj.exam_id,
origin: 'start'
};
this.currentIndex = index;
this.currentObj = obj;
this.goIDCardAndEdu(obj);
// this.$router.push({
// path:'/exam_result',
// query:{
// examId: obj.exam_id,
// origin: 'start'
// }
// })
}else {
const lastItem = this.examContent.allLists[index - 1];
if (lastItem.progress == 100) {
// modal.alert({message:'222'})
this.query = {
examId: obj.exam_id,
origin: 'start'
};
this.currentIndex = index;
this.currentObj = obj;
this.goIDCardAndEdu(obj);
// this.$router.push({
// path:'/exam_result',
// query:{
// examId: obj.exam_id,
// origin: 'start'
// }
// })
}else {
// modal.alert({message:'333'})
const course_name = lastItem.course_name;
if (obj.times == -1 || (obj.times - obj.exam_num > 0)) {// 学习课程前的考试次数
this.setContent = '您尚未完成“' + course_name + '”课程的学习,是否直接考试?';
this.currentId = obj.exam_id;
this.beforeLearningExamNumber = obj.times == -1 ? 100 : (obj.times - obj.exam_num);
this.currentIndex = index;
this.currentObj = obj;
this.isQuery = true;
}else{
modal.toast({
message: '您尚未完成“' + course_name + '”培训课程的学习。',
duration: 1.0
});
}
}
}
}else {// 不去重考
// modal.alert({message:'444'})
this.query = {
answerResultId: obj.answerResultModel.id,
examId: obj.exam_id,
origin: 'end'
};
if (index > 0 && this.examContent.allLists[index - 1].course_id) {
const lastItem = this.examContent.allLists[index - 1];
if (lastItem.progress < 100) {
this.beforeLearningExamNumber = obj.times == -1 ? 100 : (obj.times - obj.exam_num);
Vue.set(this.query, 'endNum', this.beforeLearningExamNumber);
}
}
this.currentIndex = index;
this.currentObj = obj;
this.goIDCardAndEdu(obj);
// this.$router.push({
// path:'/exam_result',
// query: this.query
// })
}
}else{// 没有考试
if (index > 0) {// 大于第一项
const lastItem = this.examContent.allLists[index - 1];
if (lastItem.course_id) {
if (lastItem.progress == 100) {// 课程已完成
// modal.alert({message:'555'})
this.query = {
examId: obj.exam_id,
origin: 'start'
};
this.currentIndex = index;
this.currentObj = obj;
this.goIDCardAndEdu(obj);
// this.$router.push({
// path:'/exam_result',
// query: this.query
// })
}else {
// modal.alert({message:'666'})
let flag = false;
if (this.examContent.exam_order == 1) {// 考试顺序--序贯
for (let i = 0; i < index; i++) {
if (!this.examContent.allLists[i].course_id) {
if (this.examContent.allLists[i].testNumFlag > 0 && this.examContent.allLists[i].answerResultModel.pass_flag == 5) {
// 之前考试全部通过
}else {
flag = true; // 有一门考试未考,或者未通过
break;
}
}
}
}
if (flag) {
modal.toast({
message: '请按顺序完成学习及考试',
duration: 1.0
});
}else {
const course_name = this.examContent.allLists[index - 1].course_name;
if (obj.times > 0 || obj.times == -1) {// 学习课程前的考试次数
this.setContent = '您尚未完成“' + course_name + '”课程的学习,是否直接考试?';
this.currentId = obj.exam_id;
this.beforeLearningExamNumber = obj.times == -1 ? 100 : obj.times;
this.currentIndex = index;
this.currentObj = obj;
this.isQuery = true;
}else{
modal.toast({
message: '您尚未完成“' + course_name + '”培训课程的学习。',
duration: 1.0
});
}
}
}
}else {// 考试上一项是考试 modal.alert({message:'777'})
const c1 = this.examContent.exam_order == 5; // 考试为并列
const c3 = (this.examContent.exam_order == 1 && lastItem.testNumFlag > 0) && (lastItem.standard_type == 1 || (lastItem.standard_type > 1 && lastItem.answerResultModel.pass_flag == 5)); // 考试为序贯且考试完成,上次考试无结果,或者结果为通过
if (c1 || c3) {
this.query = {
examId: obj.exam_id,
origin: 'start'
};
this.currentIndex = index;
this.currentObj = obj;
this.goIDCardAndEdu(obj);
// this.$router.push({
// path:'/exam_result',
// query:{
// examId: obj.exam_id,
// origin: 'start'
// }
// })
}else {
modal.toast({
message: '请按顺序完成学习及考试',
duration: 1.0
});
}
}
}else { // 第一项
// modal.alert({message:'888'})
this.query = {
examId: obj.exam_id,
origin: 'start'
};
this.currentIndex = index;
this.currentObj = obj;
this.goIDCardAndEdu(obj);
// this.$router.push({
// path:'/exam_result',
// query:{
// examId: obj.exam_id,
// origin: 'start'
// }
// })
}
}
}else {// 课程项
if (this.examContent.exam_order == 5 || index == 0) { // 顺序并列, 或者顺序贯序但为第一项
// modal.alert({message:'999'})
configurationModule.intoCourse(obj);
}else {
// modal.alert({message:'xxxxxx'})
const lastItem = this.examContent.allLists[index - 1];
if ((lastItem.testNumFlag > 0 && lastItem.answerResultModel.pass_flag == 5) || lastItem.progress >= 0) {
configurationModule.intoCourse(obj);
}else {
modal.toast({
message: '请按顺序完成学习及考试',
duration: 1.0
});
}
}
}
},
wxcDialogCancelBtnClicked () {
// 此处必须设置,组件为无状态组件,自己管理
this.isQuery = false;
},
wxcDialogConfirmBtnClicked () {
// 此处必须设置,组件为无状态组件,自己管理
this.isQuery = false;
this.query = {
examId: this.currentId,
origin: 'start'
};
if (this.beforeLearningExamNumber > 0) {
Vue.set(this.query, 'startNum', this.beforeLearningExamNumber);
}
this.goIDCardAndEdu(this.currentObj);
}
},
};
</script>
<style scoped>
.container{
justify-content:start;
align-items:flex-start;
background-color:#ffffff;
padding-top:30px;
padding-left: 30px;
padding-right: 0px;
padding-bottom: 0;
margin-top:20px;
}
.project_title{
font-size:36px;
color:#333333;
font-weight:700;
}
.project_advice{
flex-direction:row;
width:690px;
height:90px;
/*padding-top: 24px;*/
padding-left:30px;
padding-right: 30px;
/*padding-bottom: 30px;*/
margin-top:40px;
margin-bottom:40px;
background-color:#FDFBF5;
justify-content: space-between;
border-radius: 10px;
}
.project_advice_auth{
margin-top:30px;
}
.advice_auth_img{
width:690px;
height:140px;
}
.advice_auth_right_img{
width:40px;
height:40px;
position:absolute;
top:70px;
right:30px;
transform: rotate(180deg);
}
.advice_auth_text{
position:absolute;
left:0;
top:0;
height:140px;
width:690px;
justify-content: center;
align-items: center;
flex-direction:row;
}
.advice_auth_text_content{
font-size:34px;
color:#ffffff;
font-weight:600;
}
.circle_gray{
width:16px;
height:16px;
}
.project_advice_text{
color:#947e2c;
font-size:30px;
font-weight: 600;
height: 90px;
line-height: 90px;
}
.project_join_text{
color:#d86161;
font-size:30px;
padding-right: 20px;
font-weight: 600;
height: 90px;
line-height: 90px;
}
.project_see_more{
width:20px;
height:20px;
position:absolute;
top: 37px;
right: 20px;
transform: rotate(0deg);
}
.test_list{
flex-direction:row;
width:720px;
justify-content:space-between;
}
.test_list1{
flex-direction:row;
width:720px;
justify-content:space-between;
/*padding-bottom:30px;*/
}
.order_number{
font-size: 26px;
width: 45px;
height: 26px;
top: -7px;
font-weight: 600;
}
.test_item1{
flex:3;
padding-top:45px;
height:166px;
/*justify-content:center;*/
}
.test_item2{
flex:29;
padding-top:30px;
padding-bottom: 30px;
height:166px;
justify-content:center;
}
.test_item3{
flex:10;
align-items: flex-end;
height:166px;
padding-bottom: 30px;
padding-top: 30px;
padding-right: 30px;
justify-content:center;
}
.border-bottom{
border-bottom-style:solid;
border-bottom-color:rgba(240,240,240,1);
border-bottom-width:1px;
}
.color-333{
color: #333333;
}
.color-666{
color: #666666;
}
.color-999{
color: #999999;
}
.color-ccc{
color: #cccccc;
}
.color-42a{
color: #2ab9a5;
}
.border-color-e5{
border-color: #e5e5e5;
}
.border-color-94{
border-color: #94dcd2;
}
.test_name{
font-size:32px;
margin-bottom:30px;
font-weight: 600;
}
.test_info{
font-size:26px;
}
.go_examination{
font-size:26px;
/*padding-top:10px;*/
padding-left:20px;
padding-right:20px;
border-radius:25px;
border-style:solid;
border-width:1px;
width: 120px;
height: 50px;
line-height: 50px;
}
.go_result{
flex-direction:row;
align-items:center;
}
.set_text_see{
font-size:28px;
color:rgba(102,102,102,1);
padding-right: 10px;
/*font-weight: 600;*/
}
.item3_right_arrow{
width: 20px;
height: 20px;
}
.set_line_item{
width: 2px;
height: 118px;
left: 10px;
top: 5px;
background-color: #f0f0f0;
}
.back-f0{
}
.back-666{
background-color: #666666;
}
</style>
<template>
<div>
<div class="container">
<text class="project_title">
{{ examContent.module_name }}
</text>
<div
v-if="examContent.allowFlag == 0"
class="project_advice"
@click="clickJoin(examContent)"
>
<text class="project_advice_text">
{{ examContent.show_text }}
</text>
<text class="project_join_text">
{{ examContent.interactive_text }}
</text>
<image
class="project_see_more"
src="https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/arrow_right_red%403x.png"
/>
</div>
<div
v-if="examContent.passFlag == 5"
class="project_advice_auth"
@click="getCertify"
>
<image
class="advice_auth_img"
src="https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/cup%403x.png"
/>
<div class="advice_auth_text">
<text class="advice_auth_text_content">
{{ examContent.all_exam_writing }}
</text>
</div>
<!--<image class="advice_auth_right_img" src="https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/whiteLeft%403x.png"></image>-->
</div>
<div
v-for="(value,key) in examContent.allLists"
:key="key"
:class="[examContent.allLists.length>key+1?'test_list':'test_list1']"
>
<!--左边序号/圆圈-->
<div class="test_item1">
<image
v-if="examContent.exam_order == 5"
class="circle_gray"
:src="examContent.allowFlag==1 ? circleYellow: circleGray"
/>
<text
v-if="examContent.exam_order == 1"
class="order_number"
:class="[(examContent.allowFlag==1 && setOpen(key,examContent.allLists))? ((value.testNumFlag > 0 || value.progress == 100)? 'color-666': 'color-42a'): 'color-ccc']"
>
0{{ key+1 }}.
</text>
<div
v-if="examContent.exam_order == 1 && key < (examContent.allLists.length - 1)"
class="set_line_item"
:class="[(examContent.allowFlag==1 && (value.testNumFlag >0 || value.progress == 100 )) ? 'back-666': 'back-f0']"
/>
</div>
<!--中间文案-->
<div
class="test_item2"
:class="[key < examContent.allLists.length - 1? 'border-bottom': '']"
>
<text
v-if="examContent.allowFlag == 0"
class="test_name color-666"
>
{{ value.course_id ? messages(value.course_name,14) : messages(value.name, 14) }}
</text>
<text
v-if="examContent.allowFlag == 1"
class="test_name"
:class="[ examContent.exam_order == 1 ? setOpen(key,examContent.allLists) ? (value.testNumFlag > 0 || value.progress == 100) ? 'color-333': 'color-42a': 'color-666': 'color-333']"
>
{{ value.course_id ? messages(value.course_name,14) : messages(value.name, 14) }}
</text>
<text
v-if="!value.course_id"
class="test_info"
:class="[examContent.allowFlag==1 ? examContent.exam_order == 1 ? setOpen(key,examContent.allLists) ? 'color-999': 'color-ccc' : 'color-999':'color-ccc']"
>
{{ value.testNumFlag > 0 ? ((value.standard_type == 10 ? "成绩:"+ value.answerResultModel.custom_value : value.standard_type == 5 ? value.answerResultModel.custom_value : "已完成") + " 共"+value.question_no+"题 对"+value.answerResultModel.correct_no+"题 错"+value.answerResultModel.wrong_no+"题"): messages(value.exam_writing, 16) }}
</text>
<text
v-if="value.course_id"
class="test_info"
:class="[examContent.allowFlag==1 ? examContent.exam_order == 1 ? setOpen(key,examContent.allLists) ? 'color-999': 'color-ccc' : 'color-999':'color-ccc']"
>
{{ value.progress > 0 ? (value.progress == 100) ? "已完成学习" : "进行中 完成" + value.progress + "%": messages(value.study_writing, 16) }}
</text>
</div>
<!--右边文案-->
<div
class="test_item3"
:class="[key < examContent.allLists.length - 1? 'border-bottom': '']"
@click="goExam(key,value)"
>
<text
v-if="value.testNumFlag == 0 || value.progress < 100"
class="go_examination"
:class="[examContent.allowFlag==1 ? examContent.exam_order == 1 ? setOpen(key,examContent.examModuleList) ? 'border-color-94': 'border-color-e5' : 'border-color-94' : 'border-color-e5',
examContent.allowFlag==1 ? examContent.exam_order == 1 ? setOpen(key,examContent.examModuleList) ? 'color-42a' : 'color-999': 'color-42a' : 'color-999']"
>
{{ value.course_id ? '去学习':'去考试' }}
</text>
<div
v-if="value.testNumFlag > 0 || value.progress == 100"
class="go_result"
>
<text class="set_text_see">
{{ value.course_id ? "再学一遍": getBoolForExam(value) ? "重考" : "查看" }}
</text>
<image
class="item3_right_arrow"
src="https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/arrow_right_black%403x.png"
/>
</div>
</div>
</div>
</div>
<wxc-dialog
title=""
:content="setContent"
:show="isQuery"
cancel-text="取消"
confirm-text="去考试"
main-btn-color="#35cbca"
@wxcDialogCancelBtnClicked="wxcDialogCancelBtnClicked"
@wxcDialogConfirmBtnClicked="wxcDialogConfirmBtnClicked"
/>
</div>
</template>
<script>
// text collapse
import Vue from 'vue';
const modal = weex.requireModule('modal');
const configurationModule = weex.requireModule('configurationModule');
const globalEvent = weex.requireModule('globalEvent');
import wxcDialog from '../wxc-dialog';
const storage = weex.requireModule('storage');
export default {
components: {wxcDialog},
props:['examContent', 'hasAuth', 'keyIndex'],
data() {
return{
projectId: 1,
hasCertify: false,
circleGray: 'https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/circle_gray%403x.png',
circleYellow: 'https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/circle_red%403x.png',
isQuery: false,
setContent: '学习课程后再参加考试,成绩肯能会更优秀哦!',
currentId: 0,
currentIndex: 0, // 当前选中的考试下标
currentObj: {}, // 当前选中的考试内容
beforeLearningExamNumber: 0,
examNotStartLable: '',
query: {
examId: null,
origin: ''
}
};
},
computed: {
},
created () {
},
mounted() {
},
methods: {
messages (str, num) {
return str.length > num ? str.substr(0, num - 1) + '...' : str;
},
setOpen(index, arr) {
if (index == 0) {
return true;
}else if (index > 0 && ((arr[index - 1].progress == 100 || arr[index - 1].testNumFlag > 0 ) || (arr[index].progress == 100 || arr[index].testNumFlag > 0))) {
return true;
}
return false;
},
clickJoin(obj) {
if (obj.transfer_flag == 1) { // 有跳转路径
const url = obj.url ? obj.url : 'https://vuejs.org';
this.$router.push({
path: '/web_url',
query: {
url: url
}
});
}
},
getCertify() {
},
dateToString(t_date) {
const start_date_y = t_date.getFullYear();
const start_date_m = t_date.getMonth() + 1;
const start_date_d = t_date.getDate();
const start_date_h = t_date.getHours();
const start_date_mm = t_date.getMinutes();
return start_date_m + '月' + start_date_d + '日 ' + start_date_h + ':' + start_date_mm;
},
checkExamBegin(obj) {
if (!obj.course_id && obj.date_type == 5) {// 定时开放
const now_date = new Date();
const start_date = new Date(obj.start_date);
const end_date = new Date(obj.end_date);
const min_time = now_date - start_date;
const max_time = end_date - now_date;
if (min_time > 0 && max_time > 0) {
return true;
}else {
this.examNotStartLable = '考试开放时间 ' + this.dateToString(start_date) + '至' + this.dateToString(end_date);
return false;
}
}else {// 始终开放
return true;
}
},
goIDCardAndEdu(obj) {
// modal.alert({message:'goIDCardAndEdu ' + obj})
const sendObj = {
field_requirement: 0,
roleCode: 'R001',
user_role_list: ''
};
this.GET('contents/projects/guestRoleCode', {}, (res) => {
// modal.alert({message:'goIDCardAndEdu ' + res})
const configurationModule = weex.requireModule('configurationModule');
if(res.data && res.data.respCode == 200) {
sendObj.roleCode = res.data.roleCode;
const mess = obj.field_requirement ? obj.field_requirement : -1;
sendObj.field_requirement = mess;
// sendObj.field_requirement = -1
sendObj.user_role_list = obj.user_role_list;
// modal.alert({message:'goIDCardAndEdu 200' + JSON.stringify(sendObj)})
configurationModule.checkIDCardAndEducation(sendObj);
}else {
modal.toast({
message: '网络异常,请稍后再试',
duration: 1.0
});
}
});
},
goExam(index, obj) {
// modal.alert({message:'keyIndex ' + this.keyIndex})
storage.setItem('keyIndex', this.keyIndex, (e) => {
// modal.alert({message:e.result})
});
if (this.examContent.allowFlag == 1) {// 加入项目(项目考试组件有权限)
this.currentIndex = index;
this.currentObj = obj;
if (this.checkExamBegin(obj)) {
this.beginLogicForExam(index, obj);
}else {
modal.toast({
message: this.examNotStartLable,
duration: 1.0
});
}
}else {// 未加入项目
modal.toast({
message: this.examContent.show_text,
duration: 1.0
});
}
},
getBoolForExam(obj) { // 在考试至少完成一次情况下
// console.log(obj)
// obj.answerResultModel={
// pass_flag:5
// }
if (obj.answerResultModel.pass_flag == 5) {// 考试通过,不重考
return false;
}else {// 考试不通过
if (obj.again_times == -1 || (obj.again_times - obj.exam_num > 0)) {// 考试无限次,或者考试次数小于允许考试次数
return true;
}else {
return false;
}
}
},
addLogicForExam() {
// modal.alert({
// message:'跳转考试页面前的数据===>'+JSON.stringify(this.query)
// })
this.$router.push({
path:'/exam_result',
query: this.query
});
},
beginLogicForExam(index, obj) {
if (!obj.course_id) {// 考试项
if (obj.testNumFlag > 0) {// 完成考试
const isGoExam = this.getBoolForExam(obj);
if (isGoExam) {// 去重考
if ((index == 0 || index == 1) || (index > 0 && !this.examContent.allLists[index - 1].course_id)) {//
// modal.alert({message:'111'})
this.query = {
examId: obj.exam_id,
origin: 'start'
};
this.currentIndex = index;
this.currentObj = obj;
this.goIDCardAndEdu(obj);
// this.$router.push({
// path:'/exam_result',
// query:{
// examId: obj.exam_id,
// origin: 'start'
// }
// })
}else {
const lastItem = this.examContent.allLists[index - 1];
if (lastItem.progress == 100) {
// modal.alert({message:'222'})
this.query = {
examId: obj.exam_id,
origin: 'start'
};
this.currentIndex = index;
this.currentObj = obj;
this.goIDCardAndEdu(obj);
// this.$router.push({
// path:'/exam_result',
// query:{
// examId: obj.exam_id,
// origin: 'start'
// }
// })
}else {
// modal.alert({message:'333'})
const course_name = lastItem.course_name;
if (obj.times == -1 || (obj.times - obj.exam_num > 0)) {// 学习课程前的考试次数
this.setContent = '您尚未完成“' + course_name + '”课程的学习,是否直接考试?';
this.currentId = obj.exam_id;
this.beforeLearningExamNumber = obj.times == -1 ? 100 : (obj.times - obj.exam_num);
this.currentIndex = index;
this.currentObj = obj;
this.isQuery = true;
}else{
modal.toast({
message: '您尚未完成“' + course_name + '”培训课程的学习。',
duration: 1.0
});
}
}
}
}else {// 不去重考
// modal.alert({message:'444'})
this.query = {
answerResultId: obj.answerResultModel.id,
examId: obj.exam_id,
origin: 'end'
};
if (index > 0 && this.examContent.allLists[index - 1].course_id) {
const lastItem = this.examContent.allLists[index - 1];
if (lastItem.progress < 100) {
this.beforeLearningExamNumber = obj.times == -1 ? 100 : (obj.times - obj.exam_num);
Vue.set(this.query, 'endNum', this.beforeLearningExamNumber);
}
}
this.currentIndex = index;
this.currentObj = obj;
this.goIDCardAndEdu(obj);
// this.$router.push({
// path:'/exam_result',
// query: this.query
// })
}
}else{// 没有考试
if (index > 0) {// 大于第一项
const lastItem = this.examContent.allLists[index - 1];
if (lastItem.course_id) {
if (lastItem.progress == 100) {// 课程已完成
// modal.alert({message:'555'})
this.query = {
examId: obj.exam_id,
origin: 'start'
};
this.currentIndex = index;
this.currentObj = obj;
this.goIDCardAndEdu(obj);
// this.$router.push({
// path:'/exam_result',
// query: this.query
// })
}else {
// modal.alert({message:'666'})
let flag = false;
if (this.examContent.exam_order == 1) {// 考试顺序--序贯
for (let i = 0; i < index; i++) {
if (!this.examContent.allLists[i].course_id) {
if (this.examContent.allLists[i].testNumFlag > 0 && this.examContent.allLists[i].answerResultModel.pass_flag == 5) {
// 之前考试全部通过
}else {
flag = true; // 有一门考试未考,或者未通过
break;
}
}
}
}
if (flag) {
modal.toast({
message: '请按顺序完成学习及考试',
duration: 1.0
});
}else {
const course_name = this.examContent.allLists[index - 1].course_name;
if (obj.times > 0 || obj.times == -1) {// 学习课程前的考试次数
this.setContent = '您尚未完成“' + course_name + '”课程的学习,是否直接考试?';
this.currentId = obj.exam_id;
this.beforeLearningExamNumber = obj.times == -1 ? 100 : obj.times;
this.currentIndex = index;
this.currentObj = obj;
this.isQuery = true;
}else{
modal.toast({
message: '您尚未完成“' + course_name + '”培训课程的学习。',
duration: 1.0
});
}
}
}
}else {// 考试上一项是考试 modal.alert({message:'777'})
const c1 = this.examContent.exam_order == 5; // 考试为并列
const c3 = (this.examContent.exam_order == 1 && lastItem.testNumFlag > 0) && (lastItem.standard_type == 1 || (lastItem.standard_type > 1 && lastItem.answerResultModel.pass_flag == 5)); // 考试为序贯且考试完成,上次考试无结果,或者结果为通过
if (c1 || c3) {
this.query = {
examId: obj.exam_id,
origin: 'start'
};
this.currentIndex = index;
this.currentObj = obj;
this.goIDCardAndEdu(obj);
// this.$router.push({
// path:'/exam_result',
// query:{
// examId: obj.exam_id,
// origin: 'start'
// }
// })
}else {
modal.toast({
message: '请按顺序完成学习及考试',
duration: 1.0
});
}
}
}else { // 第一项
// modal.alert({message:'888'})
this.query = {
examId: obj.exam_id,
origin: 'start'
};
this.currentIndex = index;
this.currentObj = obj;
this.goIDCardAndEdu(obj);
// this.$router.push({
// path:'/exam_result',
// query:{
// examId: obj.exam_id,
// origin: 'start'
// }
// })
}
}
}else {// 课程项
if (this.examContent.exam_order == 5 || index == 0) { // 顺序并列, 或者顺序贯序但为第一项
// modal.alert({message:'999'})
configurationModule.intoCourse(obj);
}else {
// modal.alert({message:'xxxxxx'})
const lastItem = this.examContent.allLists[index - 1];
if ((lastItem.testNumFlag > 0 && lastItem.answerResultModel.pass_flag == 5) || lastItem.progress >= 0) {
configurationModule.intoCourse(obj);
}else {
modal.toast({
message: '请按顺序完成学习及考试',
duration: 1.0
});
}
}
}
},
wxcDialogCancelBtnClicked () {
// 此处必须设置,组件为无状态组件,自己管理
this.isQuery = false;
},
wxcDialogConfirmBtnClicked () {
// 此处必须设置,组件为无状态组件,自己管理
this.isQuery = false;
this.query = {
examId: this.currentId,
origin: 'start'
};
if (this.beforeLearningExamNumber > 0) {
Vue.set(this.query, 'startNum', this.beforeLearningExamNumber);
}
this.goIDCardAndEdu(this.currentObj);
}
},
};
</script>
<style scoped>
.container{
justify-content:start;
align-items:flex-start;
background-color:#ffffff;
padding-top:30px;
padding-left: 30px;
padding-right: 0px;
padding-bottom: 0;
margin-top:20px;
}
.project_title{
font-size:36px;
color:#333333;
font-weight:700;
}
.project_advice{
flex-direction:row;
width:690px;
height:90px;
/*padding-top: 24px;*/
padding-left:30px;
padding-right: 30px;
/*padding-bottom: 30px;*/
margin-top:40px;
margin-bottom:40px;
background-color:#FDFBF5;
justify-content: space-between;
border-radius: 10px;
}
.project_advice_auth{
margin-top:30px;
}
.advice_auth_img{
width:690px;
height:140px;
}
.advice_auth_right_img{
width:40px;
height:40px;
position:absolute;
top:70px;
right:30px;
transform: rotate(180deg);
}
.advice_auth_text{
position:absolute;
left:0;
top:0;
height:140px;
width:690px;
justify-content: center;
align-items: center;
flex-direction:row;
}
.advice_auth_text_content{
font-size:34px;
color:#ffffff;
font-weight:600;
}
.circle_gray{
width:16px;
height:16px;
}
.project_advice_text{
color:#947e2c;
font-size:30px;
font-weight: 600;
height: 90px;
line-height: 90px;
}
.project_join_text{
color:#d86161;
font-size:30px;
padding-right: 20px;
font-weight: 600;
height: 90px;
line-height: 90px;
}
.project_see_more{
width:20px;
height:20px;
position:absolute;
top: 37px;
right: 20px;
transform: rotate(0deg);
}
.test_list{
flex-direction:row;
width:720px;
justify-content:space-between;
}
.test_list1{
flex-direction:row;
width:720px;
justify-content:space-between;
/*padding-bottom:30px;*/
}
.order_number{
font-size: 26px;
width: 45px;
height: 26px;
top: -7px;
font-weight: 600;
}
.test_item1{
flex:3;
padding-top:45px;
height:166px;
/*justify-content:center;*/
}
.test_item2{
flex:29;
padding-top:30px;
padding-bottom: 30px;
height:166px;
justify-content:center;
}
.test_item3{
flex:10;
align-items: flex-end;
height:166px;
padding-bottom: 30px;
padding-top: 30px;
padding-right: 30px;
justify-content:center;
}
.border-bottom{
border-bottom-style:solid;
border-bottom-color:rgba(240,240,240,1);
border-bottom-width:1px;
}
.color-333{
color: #333333;
}
.color-666{
color: #666666;
}
.color-999{
color: #999999;
}
.color-ccc{
color: #cccccc;
}
.color-42a{
color: #2ab9a5;
}
.border-color-e5{
border-color: #e5e5e5;
}
.border-color-94{
border-color: #94dcd2;
}
.test_name{
font-size:32px;
margin-bottom:30px;
font-weight: 600;
}
.test_info{
font-size:26px;
}
.go_examination{
font-size:26px;
/*padding-top:10px;*/
padding-left:20px;
padding-right:20px;
border-radius:25px;
border-style:solid;
border-width:1px;
width: 120px;
height: 50px;
line-height: 50px;
}
.go_result{
flex-direction:row;
align-items:center;
}
.set_text_see{
font-size:28px;
color:rgba(102,102,102,1);
padding-right: 10px;
/*font-weight: 600;*/
}
.item3_right_arrow{
width: 20px;
height: 20px;
}
.set_line_item{
width: 2px;
height: 118px;
left: 10px;
top: 5px;
background-color: #f0f0f0;
}
.back-f0{
}
.back-666{
background-color: #666666;
}
</style>
<template>
<div>
<div class="container">
<text class="project_title">
{{ examContent.module_name }}
</text>
<div
v-if="examContent.allowFlag == 0"
class="project_advice"
@click="clickJoin(examContent)"
>
<text class="project_advice_text">
{{ examContent.show_text }}
</text>
<text class="project_join_text">
{{ examContent.interactive_text }}
</text>
<image
class="project_see_more"
src="https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/arrow_right_red%403x.png"
/>
</div>
<div
v-if="examContent.passFlag == 5"
class="project_advice_auth"
@click="getCertify"
>
<image
class="advice_auth_img"
src="https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/cup%403x.png"
/>
<div class="advice_auth_text">
<text class="advice_auth_text_content">
{{ examContent.all_exam_writing }}
</text>
</div>
<!--<image class="advice_auth_right_img" src="https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/whiteLeft%403x.png"></image>-->
</div>
<div
v-for="(value,key) in examContent.allLists"
:key="key"
:class="[examContent.allLists.length>key+1?'test_list':'test_list1']"
>
<!--左边序号/圆圈-->
<div class="test_item1">
<image
v-if="examContent.exam_order == 5"
class="circle_gray"
:src="examContent.allowFlag==1 ? circleYellow: circleGray"
/>
<text
v-if="examContent.exam_order == 1"
class="order_number"
:class="[(examContent.allowFlag==1 && setOpen(key,examContent.allLists))? ((value.testNumFlag > 0 || value.progress == 100)? 'color-666': 'color-42a'): 'color-ccc']"
>
0{{ key+1 }}.
</text>
<div
v-if="examContent.exam_order == 1 && key < (examContent.allLists.length - 1)"
class="set_line_item"
:class="[(examContent.allowFlag==1 && (value.testNumFlag >0 || value.progress == 100 )) ? 'back-666': 'back-f0']"
/>
</div>
<!--中间文案-->
<div
class="test_item2"
:class="[key < examContent.allLists.length - 1? 'border-bottom': '']"
>
<text
v-if="examContent.allowFlag == 0"
class="test_name color-666"
>
{{ value.course_id ? messages(value.course_name,14) : messages(value.name, 14) }}
</text>
<text
v-if="examContent.allowFlag == 1"
class="test_name"
:class="[ examContent.exam_order == 1 ? setOpen(key,examContent.allLists) ? (value.testNumFlag > 0 || value.progress == 100) ? 'color-333': 'color-42a': 'color-666': 'color-333']"
>
{{ value.course_id ? messages(value.course_name,14) : messages(value.name, 14) }}
</text>
<text
v-if="!value.course_id"
class="test_info"
:class="[examContent.allowFlag==1 ? examContent.exam_order == 1 ? setOpen(key,examContent.allLists) ? 'color-999': 'color-ccc' : 'color-999':'color-ccc']"
>
{{ value.testNumFlag > 0 ? ((value.standard_type == 10 ? "成绩:"+ value.answerResultModel.custom_value : value.standard_type == 5 ? value.answerResultModel.custom_value : "已完成") + " 共"+value.question_no+"题 对"+value.answerResultModel.correct_no+"题 错"+value.answerResultModel.wrong_no+"题"): messages(value.exam_writing, 16) }}
</text>
<text
v-if="value.course_id"
class="test_info"
:class="[examContent.allowFlag==1 ? examContent.exam_order == 1 ? setOpen(key,examContent.allLists) ? 'color-999': 'color-ccc' : 'color-999':'color-ccc']"
>
{{ value.progress > 0 ? (value.progress == 100) ? "已完成学习" : "进行中 完成" + value.progress + "%": messages(value.study_writing, 16) }}
</text>
</div>
<!--右边文案-->
<div
class="test_item3"
:class="[key < examContent.allLists.length - 1? 'border-bottom': '']"
@click="goExam(key,value)"
>
<text
v-if="value.testNumFlag == 0 || value.progress < 100"
class="go_examination"
:class="[examContent.allowFlag==1 ? examContent.exam_order == 1 ? setOpen(key,examContent.examModuleList) ? 'border-color-94': 'border-color-e5' : 'border-color-94' : 'border-color-e5',
examContent.allowFlag==1 ? examContent.exam_order == 1 ? setOpen(key,examContent.examModuleList) ? 'color-42a' : 'color-999': 'color-42a' : 'color-999']"
>
{{ value.course_id ? '去学习':'去考试' }}
</text>
<div
v-if="value.testNumFlag > 0 || value.progress == 100"
class="go_result"
>
<text class="set_text_see">
{{ value.course_id ? "再学一遍": getBoolForExam(value) ? "重考" : "查看" }}
</text>
<image
class="item3_right_arrow"
src="https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/arrow_right_black%403x.png"
/>
</div>
</div>
</div>
</div>
<wxc-dialog
title=""
:content="setContent"
:show="isQuery"
cancel-text="取消"
confirm-text="去考试"
main-btn-color="#35cbca"
@wxcDialogCancelBtnClicked="wxcDialogCancelBtnClicked"
@wxcDialogConfirmBtnClicked="wxcDialogConfirmBtnClicked"
/>
</div>
</template>
<script>
// text collapse
import Vue from 'vue';
const modal = weex.requireModule('modal');
const configurationModule = weex.requireModule('configurationModule');
const globalEvent = weex.requireModule('globalEvent');
import wxcDialog from '../wxc-dialog';
const storage = weex.requireModule('storage');
export default {
components: {wxcDialog},
props:['examContent', 'hasAuth', 'keyIndex'],
data() {
return{
projectId: 1,
hasCertify: false,
circleGray: 'https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/circle_gray%403x.png',
circleYellow: 'https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/circle_red%403x.png',
isQuery: false,
setContent: '学习课程后再参加考试,成绩肯能会更优秀哦!',
currentId: 0,
currentIndex: 0, // 当前选中的考试下标
currentObj: {}, // 当前选中的考试内容
beforeLearningExamNumber: 0,
examNotStartLable: '',
query: {
examId: null,
origin: ''
}
};
},
computed: {
},
created () {
},
mounted() {
},
methods: {
messages (str, num) {
return str.length > num ? str.substr(0, num - 1) + '...' : str;
},
setOpen(index, arr) {
if (index == 0) {
return true;
}else if (index > 0 && ((arr[index - 1].progress == 100 || arr[index - 1].testNumFlag > 0 ) || (arr[index].progress == 100 || arr[index].testNumFlag > 0))) {
return true;
}
return false;
},
clickJoin(obj) {
if (obj.transfer_flag == 1) { // 有跳转路径
const url = obj.url ? obj.url : 'https://vuejs.org';
this.$router.push({
path: '/web_url',
query: {
url: url
}
});
}
},
getCertify() {
},
dateToString(t_date) {
const start_date_y = t_date.getFullYear();
const start_date_m = t_date.getMonth() + 1;
const start_date_d = t_date.getDate();
const start_date_h = t_date.getHours();
const start_date_mm = t_date.getMinutes();
return start_date_m + '月' + start_date_d + '日 ' + start_date_h + ':' + start_date_mm;
},
checkExamBegin(obj) {
if (!obj.course_id && obj.date_type == 5) {// 定时开放
const now_date = new Date();
const start_date = new Date(obj.start_date);
const end_date = new Date(obj.end_date);
const min_time = now_date - start_date;
const max_time = end_date - now_date;
if (min_time > 0 && max_time > 0) {
return true;
}else {
this.examNotStartLable = '考试开放时间 ' + this.dateToString(start_date) + '至' + this.dateToString(end_date);
return false;
}
}else {// 始终开放
return true;
}
},
goIDCardAndEdu(obj) {
const sendObj = {
field_requirement: 0,
roleCode: 'R001',
user_role_list: ''
};
this.GET('contents/projects/guestRoleCode', {}, (res) => {
const configurationModule = weex.requireModule('configurationModule');
if(res.data && res.data.respCode == 200) {
sendObj.roleCode = res.data.roleCode;
const mess = obj.field_requirement ? obj.field_requirement : -1;
sendObj.field_requirement = mess;
// sendObj.field_requirement = -1
sendObj.user_role_list = obj.user_role_list;
configurationModule.checkIDCardAndEducation(sendObj);
}else {
modal.toast({
message: '网络异常,请稍后再试',
duration: 1.0
});
}
});
},
goExam(index, obj) {
// modal.alert({message:'keyIndex ' +this.keyIndex})
storage.setItem('keyIndex', this.keyIndex, (e) => {
// modal.alert({message:e.result})
});
if (this.examContent.allowFlag == 1) {// 加入项目(项目考试组件有权限)
this.currentIndex = index;
this.currentObj = obj;
if (this.checkExamBegin(obj)) {
this.beginLogicForExam(index, obj);
}else {
modal.toast({
message: this.examNotStartLable,
duration: 1.0
});
}
}else {// 未加入项目
modal.toast({
message: this.examContent.show_text,
duration: 1.0
});
}
},
getBoolForExam(obj) { // 在考试至少完成一次情况下
// console.log(obj)
// obj.answerResultModel={
// pass_flag:5
// }
if (obj.answerResultModel.pass_flag == 5) {// 考试通过,不重考
return false;
}else {// 考试不通过
if (obj.again_times == -1 || (obj.again_times - obj.exam_num > 0)) {// 考试无限次,或者考试次数小于允许考试次数
return true;
}else {
return false;
}
}
},
addLogicForExam() {
// modal.alert({
// message:'跳转考试页面前的数据===>'+JSON.stringify(this.query)
// })
this.$router.push({
path:'/exam_result',
query: this.query
});
},
beginLogicForExam(index, obj) {
if (!obj.course_id) {// 考试项
if (obj.testNumFlag > 0) {// 完成考试
const isGoExam = this.getBoolForExam(obj);
if (isGoExam) {// 去重考
if ((index == 0 || index == 1) || (index > 0 && !this.examContent.allLists[index - 1].course_id)) {//
// modal.alert({message:'111'})
this.query = {
examId: obj.exam_id,
origin: 'start'
};
this.currentIndex = index;
this.currentObj = obj;
this.goIDCardAndEdu(obj);
// this.$router.push({
// path:'/exam_result',
// query:{
// examId: obj.exam_id,
// origin: 'start'
// }
// })
}else {
const lastItem = this.examContent.allLists[index - 1];
if (lastItem.progress == 100) {
// modal.alert({message:'222'})
this.query = {
examId: obj.exam_id,
origin: 'start'
};
this.currentIndex = index;
this.currentObj = obj;
this.goIDCardAndEdu(obj);
// this.$router.push({
// path:'/exam_result',
// query:{
// examId: obj.exam_id,
// origin: 'start'
// }
// })
}else {
// modal.alert({message:'333'})
const course_name = lastItem.course_name;
if (obj.times == -1 || (obj.times - obj.exam_num > 0)) {// 学习课程前的考试次数
this.setContent = '您尚未完成“' + course_name + '”课程的学习,是否直接考试?';
this.currentId = obj.exam_id;
this.beforeLearningExamNumber = obj.times == -1 ? 100 : (obj.times - obj.exam_num);
this.currentIndex = index;
this.currentObj = obj;
this.isQuery = true;
}else{
modal.toast({
message: '您尚未完成“' + course_name + '”培训课程的学习。',
duration: 1.0
});
}
}
}
}else {// 不去重考
// modal.alert({message:'444'})
this.query = {
answerResultId: obj.answerResultModel.id,
examId: obj.exam_id,
origin: 'end'
};
if (index > 0 && this.examContent.allLists[index - 1].course_id) {
const lastItem = this.examContent.allLists[index - 1];
if (lastItem.progress < 100) {
this.beforeLearningExamNumber = obj.times == -1 ? 100 : (obj.times - obj.exam_num);
Vue.set(this.query, 'endNum', this.beforeLearningExamNumber);
}
}
this.currentIndex = index;
this.currentObj = obj;
this.goIDCardAndEdu(obj);
// this.$router.push({
// path:'/exam_result',
// query: this.query
// })
}
}else{// 没有考试
if (index > 0) {// 大于第一项
const lastItem = this.examContent.allLists[index - 1];
if (lastItem.course_id) {
if (lastItem.progress == 100) {// 课程已完成
// modal.alert({message:'555'})
this.query = {
examId: obj.exam_id,
origin: 'start'
};
this.currentIndex = index;
this.currentObj = obj;
this.goIDCardAndEdu(obj);
// this.$router.push({
// path:'/exam_result',
// query: this.query
// })
}else {
// modal.alert({message:'666'})
let flag = false;
if (this.examContent.exam_order == 1) {// 考试顺序--序贯
for (let i = 0; i < index; i++) {
if (!this.examContent.allLists[i].course_id) {
if (this.examContent.allLists[i].testNumFlag > 0 && this.examContent.allLists[i].answerResultModel.pass_flag == 5) {
// 之前考试全部通过
}else {
flag = true; // 有一门考试未考,或者未通过
break;
}
}
}
}
if (flag) {
modal.toast({
message: '请按顺序完成学习及考试',
duration: 1.0
});
}else {
const course_name = this.examContent.allLists[index - 1].course_name;
if (obj.times > 0 || obj.times == -1) {// 学习课程前的考试次数
this.setContent = '您尚未完成“' + course_name + '”课程的学习,是否直接考试?';
this.currentId = obj.exam_id;
this.beforeLearningExamNumber = obj.times == -1 ? 100 : obj.times;
this.currentIndex = index;
this.currentObj = obj;
this.isQuery = true;
}else{
modal.toast({
message: '您尚未完成“' + course_name + '”培训课程的学习。',
duration: 1.0
});
}
}
}
}else {// 考试上一项是考试
// modal.alert({message:'777'})
const c1 = this.examContent.exam_order == 5; // 考试为并列
const c3 = (this.examContent.exam_order == 1 && lastItem.testNumFlag > 0) && (lastItem.standard_type == 1 || (lastItem.standard_type > 1 && lastItem.answerResultModel.pass_flag == 5)); // 考试为序贯且考试完成,上次考试无结果,或者结果为通过
if (c1 || c3) {
this.query = {
examId: obj.exam_id,
origin: 'start'
};
this.currentIndex = index;
this.currentObj = obj;
this.goIDCardAndEdu(obj);
// this.$router.push({
// path:'/exam_result',
// query:{
// examId: obj.exam_id,
// origin: 'start'
// }
// })
}else {
modal.toast({
message: '请按顺序完成学习及考试',
duration: 1.0
});
}
}
}else { // 第一项
// modal.alert({message:'888'})
this.query = {
examId: obj.exam_id,
origin: 'start'
};
this.currentIndex = index;
this.currentObj = obj;
this.goIDCardAndEdu(obj);
// this.$router.push({
// path:'/exam_result',
// query:{
// examId: obj.exam_id,
// origin: 'start'
// }
// })
}
}
}else {// 课程项
if (this.examContent.exam_order == 5 || index == 0) { // 顺序并列, 或者顺序贯序但为第一项
// modal.alert({message:'999'})
configurationModule.intoCourse(obj);
}else {
// modal.alert({message:'xxxxxx'})
const lastItem = this.examContent.allLists[index - 1];
if ((lastItem.testNumFlag > 0 && lastItem.answerResultModel.pass_flag == 5) || lastItem.progress >= 0) {
configurationModule.intoCourse(obj);
}else {
modal.toast({
message: '请按顺序完成学习及考试',
duration: 1.0
});
}
}
}
},
wxcDialogCancelBtnClicked () {
// 此处必须设置,组件为无状态组件,自己管理
this.isQuery = false;
},
wxcDialogConfirmBtnClicked () {
// 此处必须设置,组件为无状态组件,自己管理
this.isQuery = false;
this.query = {
examId: this.currentId,
origin: 'start'
};
if (this.beforeLearningExamNumber > 0) {
Vue.set(this.query, 'startNum', this.beforeLearningExamNumber);
}
this.goIDCardAndEdu(this.currentObj);
}
},
};
</script>
<style scoped>
.container{
justify-content:start;
align-items:flex-start;
background-color:#ffffff;
padding-top:30px;
padding-left: 30px;
padding-right: 0px;
padding-bottom: 0;
margin-top:20px;
}
.project_title{
font-size:36px;
color:#333333;
font-weight:700;
}
.project_advice{
flex-direction:row;
width:690px;
height:90px;
/*padding-top: 24px;*/
padding-left:30px;
padding-right: 30px;
/*padding-bottom: 30px;*/
margin-top:40px;
margin-bottom:40px;
background-color:#FDFBF5;
justify-content: space-between;
border-radius: 10px;
}
.project_advice_auth{
margin-top:30px;
}
.advice_auth_img{
width:690px;
height:140px;
}
.advice_auth_right_img{
width:40px;
height:40px;
position:absolute;
top:70px;
right:30px;
transform: rotate(180deg);
}
.advice_auth_text{
position:absolute;
left:0;
top:0;
height:140px;
width:690px;
justify-content: center;
align-items: center;
flex-direction:row;
}
.advice_auth_text_content{
font-size:34px;
color:#ffffff;
font-weight:600;
}
.circle_gray{
width:16px;
height:16px;
}
.project_advice_text{
color:#947e2c;
font-size:30px;
font-weight: 600;
height: 90px;
line-height: 90px;
}
.project_join_text{
color:#d86161;
font-size:30px;
padding-right: 20px;
font-weight: 600;
height: 90px;
line-height: 90px;
}
.project_see_more{
width:20px;
height:20px;
position:absolute;
top: 37px;
right: 20px;
transform: rotate(0deg);
}
.test_list{
flex-direction:row;
width:720px;
justify-content:space-between;
}
.test_list1{
flex-direction:row;
width:720px;
justify-content:space-between;
/*padding-bottom:30px;*/
}
.order_number{
font-size: 26px;
width: 45px;
height: 26px;
top: -7px;
font-weight: 600;
}
.test_item1{
flex:3;
padding-top:45px;
height:166px;
/*justify-content:center;*/
}
.test_item2{
flex:29;
padding-top:30px;
padding-bottom: 30px;
height:166px;
justify-content:center;
}
.test_item3{
flex:10;
align-items: flex-end;
height:166px;
padding-bottom: 30px;
padding-top: 30px;
padding-right: 30px;
justify-content:center;
}
.border-bottom{
border-bottom-style:solid;
border-bottom-color:rgba(240,240,240,1);
border-bottom-width:1px;
}
.color-333{
color: #333333;
}
.color-666{
color: #666666;
}
.color-999{
color: #999999;
}
.color-ccc{
color: #cccccc;
}
.color-42a{
color: #2ab9a5;
}
.border-color-e5{
border-color: #e5e5e5;
}
.border-color-94{
border-color: #94dcd2;
}
.test_name{
font-size:32px;
margin-bottom:30px;
font-weight: 600;
}
.test_info{
font-size:26px;
}
.go_examination{
font-size:26px;
/*padding-top:10px;*/
padding-left:20px;
padding-right:20px;
border-radius:25px;
border-style:solid;
border-width:1px;
width: 120px;
height: 50px;
line-height: 50px;
}
.go_result{
flex-direction:row;
align-items:center;
}
.set_text_see{
font-size:28px;
color:rgba(102,102,102,1);
padding-right: 10px;
/*font-weight: 600;*/
}
.item3_right_arrow{
width: 20px;
height: 20px;
}
.set_line_item{
width: 2px;
height: 118px;
left: 10px;
top: 5px;
background-color: #f0f0f0;
}
.back-f0{
}
.back-666{
background-color: #666666;
}
</style>
......@@ -250,6 +250,7 @@
if(sendObj.user_role_list=="R004"){
this.dataOkForExam();
}
alert(123)
//configurationModule.checkIDCardAndEducation(sendObj); 111
}else {
this.$toast("网络异常,请稍后再试");
......@@ -460,19 +461,27 @@
// modal.alert({message:'999'})
configurationModule.intoCourse(obj);
}else {
// modal.alert({message:'xxxxxx'})
const lastItem = this.examContent.allLists[index - 1];
if ((lastItem.testNumFlag > 0 && lastItem.answerResultModel.pass_flag == 5) || lastItem.progress >= 0) {
configurationModule.intoCourse(obj);
}else {
modal.toast({
message: '请按顺序完成学习及考试',
duration: 1.0
});
this.$toast('请按顺序完成学习及考试')
}
}
}
},
goStudyNative(obj){
this.appModuleModel=[{
}]
const paramList = setEventByModuleCode(
JSON.parse(JSON.stringify(this.appModuleModel))
);
this.$rocNative.dispatchEventByModuleCode({
modeCode: 'M200',
jsonString: paramList,
});
},
diaLogConfirm(){
this.$dialog
.confirm({
......
import { router } from '@pica-cli/vue-cli-plugin-pica-cli-plugin/auto';
import Index from '@/views/Home.vue';
// import Index from '@/views/Home.vue';
import {toggleSkeletonRouter} from 'mn-template/plugins/toggleSkeleton.js';
import handleAllRouter from '../public_uat';
const routerConfig = [
{
path: '/',
name: 'Index',
component: Index
component: () => import('@/views/stroke/index.vue')
},
{
path: '/stroke',
......@@ -28,6 +28,16 @@ const routerConfig = [
name: 'exam-wrong',
component: () => import('@/views/exam/exam_wrong.vue')
},
{
path: '/exam-history',
name: 'exam-history',
component: () => import('@/views/exam/exam_history.vue')
},
{
path: '/local-exam-history',
name: 'local-exam-history',
component: () => import('@/views/exam/local_exam_history')
},
{
path: '*',
redirect: process.env.VUE_APP_BASE_ROUTE
......
<template>
<scroller show-scrollbar="false" class="back-fff">
<div class="contenter">
<exam-history :showHeaderH="showHeaderH" :historyList="historyList" :examId="id" :examType="examType"></exam-history>
<pica-header title="考试记录" @goBack="goBack" showHeader="true"></pica-header>
<div class="history-nomore" v-if="historyList.length > 0">
<div class="nomore-text">没有更多记录了</div>
</div>
</div>
</scroller>
</template>
<style scoped>
.back-fff{
background-color: #ffffff;
}
.contenter{
padding-top:150px;
background-color: #ffffff;
}
</style>
<script>
import picaHeader from '@/components/stroke/picaHeader'
import examHistory from '@/components/stroke/examHistory'
import { getCoopExamResultNews ,getCoopResultNewsLocal} from '@/api/exam.js';
export default {
data: () => ({
id: '',
isPassExam: false,
showHeaderH:false,
historyList:[],
examType: ''
}),
computed: {
},
components:{picaHeader,examHistory},
created () {
// this.historyList = this.$route.query.historyList
this.id = this.$route.query.examId
this.init()
},
methods: {
init(){
let funCoop = getCoopExamResultNews
if(this.$route.query.examType == 'local'){
funCoop=getCoopResultNewsLocal
}
funCoop({examId:this.id}).catch(res=>{
this.historyList = res.data.examRecordList
this.historyList.map(res=>{
res.createdTime = res.createdTime.substring(0,10)
})
})
}
}
}
</script>
<style scoped>
.history-nomore{
align-items: center;
margin-top: 15px;
padding-bottom: 15px;
}
.nomore-text{
color:rgba(153,153,153,1);
font-size:15px;
}
</style>
\ No newline at end of file
......@@ -2,26 +2,26 @@
<list>
<cell>
<div class="head-fixed">
<div class="head-bg" :style="{backgroundColor: headBg, height: headHeight + 'px'}"></div>
<div class="head wrap" :style="{paddingTop: (70 - headHeight) + 'px'}">
<img @click="back" src="http://pica-pro.oss-cn-shanghai.aliyuncs.com/md_resources/back_gray.png" style="width: 50px; height: 50px;"/>
<div class="head-bg" :style="{backgroundColor: headBg, height: '5px'}"></div>
<div class="head wrap">
<img @click="back" src="http://pica-pro.oss-cn-shanghai.aliyuncs.com/md_resources/back_gray.png" style="width: 25px; height: 25px;"/>
<text class="title">错题集</text>
<text class="empty"></text>
</div>
</div>
<div class="img-wrap">
<img src="https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/icon_report_grey.png" style="width: 106px; height: 130px;"/>
<img src="https://pica-pro.oss-cn-shanghai.aliyuncs.com/eagle_plan/icon_report_grey.png" style="width: 53px; height: 65px;"/>
</div>
<div class="result-wrap">
<div style="font-size: 32px;">正确题目数 :{{rightNum}}</div>
<div style="padding-left: 30px;font-size: 32px;">错误题目数 :</div>
<div style="color: #d84a38;font-size: 32px;">{{wrongNum}}</div>
<div style="font-size: 16px;">正确题目数 :{{rightNum}}</div>
<div style="padding-left: 15px;font-size: 16px;">错误题目数 :</div>
<div style="color: #d84a38;font-size: 16px;">{{wrongNum}}</div>
</div>
<div style="padding: 0 30px">
<div style="padding: 0 15px">
<div class="separator"></div>
</div>
<div class="info">
<div style="font-size: 40px; padding-bottom: 40px; padding-top: 20px;">试题分析</div>
<div style="font-size: 20px; padding-bottom: 20px; padding-top: 10px;">试题分析</div>
<div class="detail" v-for="(wrong,index) in wrongList" :key="index">
<div class="question-index">{{wrong.seqNo}}题:</div>
<div class="question-title">{{wrong.question}}</div>
......@@ -40,34 +40,34 @@
}
.detail {
position: relative;
/*padding-left: 30px;*/
padding-bottom: 15px;
}
.question-index {
position: absolute;
top: 0px;
left: 20px;
left: 10px;
font-weight: 600;
font-size: 32px;
font-size: 16px;
}
.answer {
font-size: 32px;
line-height: 50px;
font-size: 15px;
line-height: 25px;
font-weight: 600;
padding-left: 150px;
padding-left: 65px;
}
.question-title {
font-size: 32px;
font-size: 16px;
font-weight: 600;
padding-bottom: 10px;
padding-left: 150px;
padding-bottom: 5px;
padding-left:65px;
/*text-indent: -150px;*/
}
.result-wrap {
display:flex;
flex-direction: row;
justify-content: center;
padding: 60px 0 100px;
padding: 30px 0 50px;
}
.separator {
border-bottom-style: solid;
......@@ -80,12 +80,11 @@
height: 3px;
}
.img-wrap {
display:flex;
flex-direction: row;
justify-content: center;
padding-top: 220px;
padding-top: 110px;
}
.head-fixed {
position: fixed;
top: 0px;
......@@ -102,7 +101,7 @@
border-bottom-color: #e7e7e7;
}
.wrap {
padding: 70px 30px 20px 20px;
padding:10px;
}
.title {
......@@ -117,6 +116,7 @@
// import WxcLoading from '../../components/wxc-loading'
//let modal = weex.requireModule('modal')
//import WxcLoading from '../../components/wxc-loading'
import storejs from 'storejs';
import { getCoopExamWrongRecords} from '@/api/exam.js';
export default {
//components: { WxcLoading },
......@@ -127,14 +127,12 @@
wrongNum: '',
headBg: '#ffffff',
headHeight: 0,
token:"E47F468E0BB34ED9ABD38DC16A95CAC2"
token:"FFA8F78823F44BEC86E5BD816BDA73D5"
}),
computed: {
},
},
created () {
if(this.isAndroid) {
this.headBg = '#999999'
}
this.token=storejs.get('token');
this.init()
},
methods: {
......
......@@ -2,10 +2,10 @@
<list>
<cell>
<div class="head-fixed">
<div class="head-bg" :style="{backgroundColor: headBg, height: headHeight + 'px'}"></div>
<div class="head wrap" :style="{paddingTop: (70 - headHeight) + 'px'}">
<div class="head-bg" :style="{backgroundColor: headBg, height:'15px'}"></div>
<div class="head wrap">
<div @click="giveUp" class="back-wrap">
<img src="http://pica-pro.oss-cn-shanghai.aliyuncs.com/md_resources/back_gray.png" style="width: 50px; height: 50px;"/>
<img src="http://pica-pro.oss-cn-shanghai.aliyuncs.com/md_resources/back_gray.png" style="width: 25px; height: 25px;"/>
<div class="back-txt">放弃考试</div>
</div>
<text class="empty"></text>
......@@ -31,7 +31,6 @@
</div>
<div class="questions-wrap">
<div class="question" v-for="(item, index) in questions" :ref="'question_' + index" :key="index">
<div class="description">{{index + 1}}:{{item.name}}</div>
<pica-radio :list="item.answerList" @wxcRadioListChecked="select"></pica-radio>
......@@ -43,6 +42,9 @@
<div class="status-label">已答题:</div>
<div class="status-value">{{selectedCount}}/{{questions.length}}</div>
</div>
<div>
<van-button type="primary" class="coop-btn" @click="submitQuery">{{isSubmitting ? '提交中' : '提交'}}</van-button>
</div>
<!-- <wxc-button :btnStyle="submitBtnStyle" :text="isSubmitting ? '提交中' : '提交'"
@wxcButtonClicked="submitQuery"></wxc-button> 111-->
</div>
......@@ -75,7 +77,6 @@
<text slot="title" class="content-title">提醒</text>
<text slot="content" class="content-subtext cont-center">确认要放弃本次考试吗?</text>
</wxc-dialog>
<wxc-dialog confirm-text="确定"
:show="showUnFinishedTip"
main-btn-color="#2ab9a5"
......@@ -93,56 +94,65 @@
<style scoped>
.status-label {
font-size: 32px;
font-size: 18px;
color: rgb(102, 102, 102);
line-height: 88px;
line-height: 44px;
}
.status-value {
font-size: 32px;
font-size: 16px;
color: rgb(42, 185, 165);
line-height: 88px;
line-height: 44px;
}
.select-status {
display:flex;
flex-direction: row;
padding-right: 80px;
padding: 0px 20px;
}
.back-wrap {
display:flex;
flex-direction: row;
}
.question {
padding: 0 30px 30px;
padding: 0 15px 15px;
border-bottom-style: solid;
border-bottom-width: 1px;
border-bottom-color: rgb(240, 240, 240);
}
.description {
font-weight: 600;
font-size: 32px;
font-size: 16px;
color: #333333;
line-height: 50px;
padding: 40px 0 15px 0;
line-height: 25px;
padding: 20px 0 7px 0;
}
.questions-wrap {
padding: 140px 0px 87px;
padding:60px 0px 45px;
background-color: white;
}
.time-label{
font-size: 38px;
font-size: 16px;
color: rgb(51,51,51);
line-height: 44px;
line-height: 22px;
}
.back-txt {
font-size: 34px;
font-size:17px;
color: rgb(102,102,102);
height: 50px;
line-height: 50px;
height: 25px;
line-height: 25px;
}
.time {
color: #666666;
}
.time-left {
align-items:center;
display:flex;
justify-content:space-between;
flex-direction: row;
}
.van-count-down{
margin-left:10px;
}
.empty {
width: 50px;
height: 3px;
......@@ -173,6 +183,7 @@
z-index: 999;
}
.submit-wrap {
display:flex;
flex-direction: row;
position: fixed;
bottom: 0px;
......@@ -185,6 +196,10 @@
border-top-width: 1px;
border-top-color: rgba(240, 240, 240, 1);
}
.coop-btn{
padding:0 26px;
background:#58b5a8;
}
.head {
flex-direction: row;
justify-content: space-between;
......@@ -193,12 +208,14 @@
border-bottom-color: #e7e7e7;
}
.wrap {
padding: 70px 30px 20px 30px;
padding:10px 15px;
display:flex;
}
</style>
<script>
import storejs from 'storejs';
//import { WxcButton, WxcMinibar, WxcCountdown } from 'weex-ui'
// import WxcLoading from '../../components/wxc-loading'
import PicaRadio from '@/components/pica-radio'
......@@ -209,8 +226,7 @@
// const storage = weex.requireModule('storage')
// const dom = weex.requireModule('dom')
import { getCoopExamQuest} from '@/api/exam.js';
import { getCoopExamQuest,getAnwserExam} from '@/api/exam.js';
export default {
components: {
PicaRadio
......@@ -241,21 +257,15 @@ export default {
borderRadius: 0,
backgroundColor: '#58b5a8',
},
token:"E47F468E0BB34ED9ABD38DC16A95CAC2"
token:"FFA8F78823F44BEC86E5BD816BDA73D5"
}
},
computed: {
},
created () {
// if(this.isAndroid) {
// this.headBg = '#999999'
// weex.requireModule('eventModule').getStatusBarSize(res => {
// this.headHeight = parseInt(res.height)/1.5
// })
// }
this.token= storejs.get('token');
this.startNum = this.$route.query.startNum || -1
this.init()
this.init();
// weex.requireModule('globalEvent').addEventListener("goPreviousPage", e=> {//监听物理返回上一页
// this.back()
// });
......@@ -304,7 +314,7 @@ export default {
this.TIME = new Date().getTime() + this.examTime
console.log(this.TIME,"----000-----");
} else {
this.$toast(data.respMsg);
this.$toast(data.respMsg);
}
})
// this.GET('app/projectExam/questions', para, res => {
......@@ -323,88 +333,135 @@ export default {
// })
},
back() {
weex.requireModule('eventModule').backPreviousPage({})
this.$router.go(-1);
//weex.requireModule('eventModule').backPreviousPage({})
},
getUnselected() {
let result = []
let selected = this.selected
this.questions.forEach( (question, i) => {
if(!selected[i]) {
result.push({
questionId: question.id,
correctId: question.answerList[0].correctId,
answerId: 0,
questionType: question.type,
seqNo: question.answerList[0].seqNo,
type: 2
})
}
})
return result
},
getUnselected() {
let result = []
let selected = this.selected
this.questions.forEach( (question, i) => {
if(!selected[i]) {
result.push({
questionId: question.id,
correctId: question.answerList[0].correctId,
answerId: 0,
questionType: question.type,
seqNo: question.answerList[0].seqNo,
type: 2
})
}
})
return result
},
getAnswerTime() {
let surplusTime = this.TIME - new Date().getTime()
return surplusTime > 0 ? Math.floor((this.examTime - surplusTime)/1000) : this.examTime/1000
},
submit() {
let para = {
answerTime: this.getAnswerTime(),
examId: this.$route.query.examId,
type: 5
//examId: this.getUrlSearch(weex.config.bundleUrl, 'examId') || 1
}
let resultList = []
Object.keys(this.selected).forEach( attr => {
resultList.push(this.selected[attr])
})
if(this.selected.length != this.questions.length) {
resultList = resultList.concat(this.getUnselected())
}
para.resultList = resultList
this.showLoading = true
this.isSubmitting = true
this.POST('app/projectExam/apply', para, res => {
this.showLoading = false
this.isSubmitting = false
let data = res.data
if(data.respCode == 200) {
let para = {
answerTime: this.getAnswerTime(),
examId: this.$route.query.examId,
type: 5
}
let resultList = []
Object.keys(this.selected).forEach( attr => {
resultList.push(this.selected[attr])
});
if(this.selected.length != this.questions.length) {
resultList = resultList.concat(this.getUnselected())
}
para.resultList = resultList
this.showLoading = true
this.isSubmitting = true
getAnwserExam(para).catch(res=>{
this.showLoading = false;
this.isSubmitting = false;
let data = res.data;
if(data.respCode == 200) {
let query = {
examId: this.$route.query.examId,
answerResultId: data.answerResultId,
// origin: 'end',
from: 'exam'
}
}
if (this.startNum >0){
Vue.set(query, "endNum", this.startNum - 1)
}
this.$router.push({
path:'/exam_result',
path:'/exam-result',
query: query
})
} else {
modal.alert({
message: data.respMsg
})
this.$toast(data.respMsg)
}
})
},
submitQuery() {
if(this.isSubmitting) {
return
}
if(this.isAllSelected()) {
this.showSubmitConfirm = true
} else {
this.showUnFinishedTip = true
this.firstUnselectedIndex = this.getFirstUnselected()
}
},
getFirstUnselected() {
})
// this.POST('app/projectExam/apply', para, res => {
// this.showLoading = false
// this.isSubmitting = false
// let data = res.data
// if(data.respCode == 200) {
// let query = {
// examId: this.$route.query.examId,
// answerResultId: data.answerResultId,
// // origin: 'end',
// from: 'exam'
// }
// if (this.startNum >0){
// Vue.set(query, "endNum", this.startNum - 1)
// }
// this.$router.push({
// path:'/exam_result',
// query: query
// })
// } else {
// this.$toast(data.respMsg)
// }
// })
},
submitQuery() {
if(this.isSubmitting) {
return
}
if(this.isAllSelected()) {
this.showSubmitConfirm = true
this.submitDialog();
} else {
this.showUnFinishedTip = true;
this.firstUnselectedIndex = this.getFirstUnselected();
this.submitDialogFinish();
}
},
submitDialogFinish(){
let msg=`第${this.firstUnselectedIndex}题尚未做答,请回答所有题目后再提交`
this.$dialog
.alert({
title: '提醒',
message: msg,
confirmButtonColor: '#94dcd2',
})
.then(() => {
this.unFinishedConfirm();
})
},
submitDialog(){
this.$dialog
.confirm({
title: '确定提交考卷',
message: '一旦提交后,将无法修改答题内容',
cancelButtonText: '在想一下',
confirmButtonText: '提交考卷',
confirmButtonColor: '#94dcd2',
cancelButtonColor: '#666',
})
.then(() => {
this.submitConfirm();
})
.catch(() => {
this.hideSubmitConfirm();
});
},
getFirstUnselected() {
let count = this.questions.length
let selectedIndexs = Object.keys(this.selected)
for(var i = 0; i < count; i++) {
......@@ -412,25 +469,17 @@ export default {
return i + 1
}
}
},
},
unFinishedConfirm() {
this.showUnFinishedTip = false
const el = this.$refs['question_' + (this.firstUnselectedIndex - 1)][0]
//dom.scrollToElement(el, { offset: -140, animated: false })
},
submitConfirm() {
// this.appBuryingPointEntrust({
// ...click_submit_test,
// createdTime: new Date().getTime()
// })
this.showSubmitConfirm = false
this.showSubmitConfirm = false
this.submit()
},
},
hideSubmitConfirm() {
// this.appBuryingPointEntrust({
// ...click_cancel_test,
// createdTime: new Date().getTime()
// })
this.showSubmitConfirm = false
},
select(obj) {
......@@ -441,27 +490,49 @@ export default {
timeout() {
if(!this.showSubmitConfirm) {
this.showTimeoutConfirm = true
}
},
this.$dialog
.alert({
title: '提醒',
message: '您已超过限定答题时间,已帮您自动交卷',
confirmButtonText: '确定',
confirmButtonColor: '#94dcd2',
})
.then(() => {
this.timeoutConfirm();
});
}
},
timeoutConfirm() {
this.showTimeoutConfirm = false
this.submit()
},
},
giveUp() {
if(this.isSubmitting) {
return
}
if(this.isSubmitting) {return}
this.showGiveUpConfirm = true
},
this.$dialog
.confirm({
title: '提醒',
message: '确认要放弃本次考试吗?',
cancelButtonText: '放弃',
confirmButtonText: '继续考试',
confirmButtonColor: '#94dcd2',
cancelButtonColor: '#666',
})
.then(() => {
this.giveUpConfirm();
})
.catch(() => {
this.hideGiveUpConfirm();
});
},
hideGiveUpConfirm() {
this.showGiveUpConfirm = false
this.back()
},
this.showGiveUpConfirm = false
this.back()
},
giveUpConfirm() {
this.showGiveUpConfirm = false
}
},
destoryed: function() {
}
}
}
}
</script>
\ No newline at end of file
<template>
<div class="contenter">
<lives-exam-history :showHeaderH="false" :localHistoryList="historyList" @goExamStart="goExamStart" @watchResult="watchResult"></lives-exam-history>
<div class="history-nomore" v-if="historyList.length > 0">
<div class="nomore-text">没有更多记录了</div>
</div>
<pica-header title="考试记录" @goBack="goBack" showHeader="true"></pica-header>
</div>
</template>
<style scoped>
.back-fff{
background-color: #ffffff;
}
.contenter{
padding-top:75px;
background-color: #ffffff;
}
</style>
<script>
import storejs from 'storejs';
import picaHeader from '@/components/stroke/picaHeader'
import livesExamHistory from "@/components/stroke/livesExamHistory";
import { getCoopLiveExam } from '@/api/storke.js';
export default {
data: () => ({
id: '',
isPassExam: false,
showHeaderH:false,
historyList:[],
livesList:{
examId: '',
examResultId: '',
endDate: ''
},
token:""
}),
computed: {
},
components:{
livesExamHistory,
picaHeader},
created () {
this.token=storejs.get("token");
// this.historyList = this.$route.query.historyList
this.id = this.$route.query.projectId
this.init()
},
methods: {
init(){
/*this.GET('app/exam/lives/results',{examId:id,pageNo:1,pageSize:15},res=>{
console.log("所有现场考试记录",res)
this.historyList = res.data.examRecordList
this.historyList.map(res=>{
// res.createdTime = res.createdTime.substring(0,10)
})
})*/
let _self = this
getCoopLiveExam({id:id,token:this.token}).catch(res=>{
if (res && res.data){
if (res.data.pLiveExamList && res.data.pLiveExamList.length){
_self.historyList = res.data.pLiveExamList
_self.historyList = _self.historyList.concat([])
}else {
_self.historyList = []
}
}else{
this.$toast('网络异常,请稍后再试');
}
});
},
//重考
goExamStart(obj){
this.$router.push({
path: '/exam-result',
query:{
examId: obj.id,
origin: 'start',
examType: 'local',
endDate: obj.endDate,
answerResultId: obj.examResultId
}
})
},
//查看
watchResult(obj){
this.$router.push({
path: '/exam-result',
query:{
examId: obj.id,
origin: '',
examType: 'local',
endDate: obj.endDate,
answerResultId: obj.examResultId
}
})
}
}
}
</script>
<style scoped>
.history-nomore{
align-items: center;
margin-top: 15px;
padding-bottom: 15px;
}
.nomore-text{
color:rgba(153,153,153,1);
font-size:15px;
}
</style>
<template>
<!-- <scroller show-scrollbar="false" style="background-color: white;"> -->
<div>
<div class="body_background">
......@@ -15,10 +14,11 @@
<style scoped>
.body_background{
background-color: #f5f5f5;
padding-top:120px;
padding-top:55px;
}
</style>
<script>
import storejs from 'storejs';
import examInfo from '@/components/stroke/examInfo'
import examHistory from '@/components/stroke/examHistory'
import picaHeader from '@/components/stroke/picaHeader'
......@@ -46,7 +46,7 @@ import { getCoopExam ,getCoopExamResultNew,getCoopExamResultNews} from '@/api/ex
testMsg: '',
examType: 'common',
hasWrong:false,
token:"E47F468E0BB34ED9ABD38DC16A95CAC2"
token:""
}),
computed: {},
components:{
......@@ -55,6 +55,7 @@ import { getCoopExam ,getCoopExamResultNew,getCoopExamResultNews} from '@/api/ex
//WxcLoading
},
created () {
this.token=storejs.get('token');
this.examId = this.$route.query.examId
this.from = this.$route.query.from
this.showHeader = this.from != 'exam'
......@@ -117,10 +118,11 @@ import { getCoopExam ,getCoopExamResultNew,getCoopExamResultNews} from '@/api/ex
})
}else {
this.hasWrong = true;
modal.toast({
message: res.data.respMsg,
duration: 1.0
})
this.$toast(res.data.respMsg)
// modal.toast({
// message: res.data.respMsg,
// duration: 1.0
// })
}
})
// this.GET('app/projectExam/results',{examId:this.examId,pageNo:1,pageSize:3, type: 5},res=>{
......
......@@ -16,7 +16,7 @@
//import WxcDialog from '../components/wxc-dialog'
import storejs from 'storejs';
import componentMain from '@/components/stroke/componentMain';
import CommonHeader from '@/components/common/header';
import livesExamHistory from "@/components/stroke/livesExamHistory";
......@@ -90,7 +90,7 @@ import { getCoopExamResult } from '@/api/exam.js';
needMarginBottom: false,
marginBottom: '0px',
parms:{
id: 4, token: "5CAB7524887647E983660A0F61EE219D"
id: 4, token: "F693C3AF6D344B7B825D8CC39D495D8E"
},
flagLoading:0,
title:"",
......@@ -103,6 +103,11 @@ import { getCoopExamResult } from '@/api/exam.js';
keyIndex(newval) {
this.keyIndex = newval;
},
flagLoading(newv) {
if (newv == 4) {
this.getOrder();
}
}
},
created () {
// modal.alert({message: 22})
......@@ -110,6 +115,10 @@ import { getCoopExamResult } from '@/api/exam.js';
this.allowFlag = this.$route.query.allowFlag || 1;
this.projectId = this.$route.query.projectId || 2;
this.parms.id = this.projectId;
//this.parms.token = this.$route.query.token || '';
storejs.set('token',this.parms.token);
this.init();
},
mounted() {
......@@ -182,13 +191,12 @@ import { getCoopExamResult } from '@/api/exam.js';
} else if (res.data.respCode == 401 || res.data.respCode == 404) {
return this.$rocNative.gotoLogin();
}
this.isShow = false;
var result = res.data.checkResult;
let flag = result.resultFlag;
if(flag == 1) {
this.$router.push({
path:'/exam_result', query:{'examId': result.examId, 'origin': 'start', 'examType': 'local', 'endDate': result.endDate}
path:'/exam-result', query:{'examId': result.examId, 'origin': 'start', 'examType': 'local', 'endDate': result.endDate}
});
} else if(flag == 5) {
this.showExamNotStartTip = true;
......@@ -260,7 +268,7 @@ import { getCoopExamResult } from '@/api/exam.js';
},
seeMoreHistory() {
this.$router.push({
path:'/local_exam_history', query:{projectId: this.projectId}
path:'/local-exam-history', query:{projectId: this.projectId}
});
},
codeBtnClicked() {
......@@ -407,34 +415,13 @@ import { getCoopExamResult } from '@/api/exam.js';
this.pLiveMapping = res.data.pLiveMapping;
if (res.data.pLiveExamList && res.data.pLiveExamList.length) {
this.localHistoryList = res.data.pLiveExamList;
//_self.localHistoryList = _self.localHistoryList.concat([]);
this.localHistoryList = this.localHistoryList.concat([]);
}
} else {
this.$toast("网络异常,请稍后再试");
}
this.getOrder();
//this.getOrder();
});
// this.GET('contents/projects/live/' + this.projectId, {}, function (res) {
// // _self.isShow = false
// if (res && res.data) {
// _self.pLiveMapping = res.data.pLiveMapping;
// if (res.data.pLiveExamList && res.data.pLiveExamList.length) {
// _self.localHistoryList = res.data.pLiveExamList;
// _self.localHistoryList.forEach(function (item) {
// });
// _self.localHistoryList = _self.localHistoryList.concat([]);
// }else {
// _self.localHistoryList = [];
// }
// }else{
// modal.toast({
// message: '网络异常,请稍后再试',
// duration: 1.0
// });
// }
// _self.getOrder();
// });
},
getOrder() {
......@@ -444,7 +431,7 @@ import { getCoopExamResult } from '@/api/exam.js';
// 组件type
// module_type:1、轮播图组件 5、文案组件 10、考试组件 15、关联课程组件 20、链接组件 25、现场考试组件
if (this.flagLoading !=5) {
this.flagLoading=this.flagLoading + 1
this.flagLoading = this.flagLoading + 1;
}
this.orderList = res.data.projectList;
this.orderListFlag = this.orderList.some(item => {
......@@ -500,73 +487,6 @@ import { getCoopExamResult } from '@/api/exam.js';
this.$toast("网络异常,请稍后再试");
}
});
// this.GET('contents/projects/' + this.projectId, {}, function (res) {
// if (res && res.data) {
// // 组件type
// // module_type:1、轮播图组件 5、文案组件 10、考试组件 15、关联课程组件 20、链接组件 25、现场考试组件
// _self.orderList = res.data.projectList;
// if (res.data.respCode != 200) {
// modal.toast({
// message: res.data.respMsg,
// duration: 1.0
// });
// return;
// }
// const arr = [{slot:'type_1'}, {slot:'type_2'}, {slot:'type_3'}, {slot:'type_4'}, {slot:'type_5'}];
// _self.slots.length = _self.orderList.length;
// for(let i = 0; i < _self.orderList.length; i++) {
// const number = _self.orderList[i].module_type;
// switch (number) {
// case 1:
// _self.slots[i] = arr[0];
// break;
// case 5:
// _self.slots[i] = arr[1];
// break;
// case 10:
// _self.slots[i] = arr[2];
// break;
// case 15:
// _self.slots[i] = arr[3];
// break;
// case 25:
// _self.slots[i] = arr[4];
// break;
// }
// }
// _self.slots = _self.slots.concat([]);
// _self.allComponentLists = [];
// console.log('===>', _self.slots);
// _self.sliderLists.forEach(function (item) {
// _self.allComponentLists.push(item);
// });
// _self.infoLists.forEach(function (item) {
// _self.allComponentLists.push(item);
// });
// _self.courseLists.forEach(function (item) {
// _self.allComponentLists.push(item);
// });
// _self.examLists.forEach(function (item) {
// _self.allComponentLists.push(item);
// });
// _self.livesExamLists.forEach(function (item) {
// _self.allComponentLists.push(item);
// });
// _self.allComponentLists.sort(function (a, b) {
// return a.seq_no - b.seq_no;
// });
// _self.allComponentLists = _self.allComponentLists.concat([]);// Object.assign([],)
// console.log('allComponentLists', _self.allComponentLists);
// if(_self.orderList.length == 5) {
// }
// }else{
// modal.toast({
// message: '网络异常,请稍后再试',
// duration: 1.0
// });
// }
// });
},
taggleSlot() {
if(this.slot == 'title') {
......@@ -587,13 +507,20 @@ import { getCoopExamResult } from '@/api/exam.js';
this.show = true;
},
goBack() {
storejs.set('needFlash', 'true');
try {
this.$rocNative.goBack();
} catch (err) {
console.log(err);
this.$router.go(-1);
}
// storage.setItem('needFlash', 'true');
//configurationModule.goBack(); 11
},
// 重考
goExamStart(obj) {
this.$router.push({
path: '/exam_result',
path: '/exam-result',
query:{
examId: obj.id,
origin: 'start',
......@@ -606,7 +533,7 @@ import { getCoopExamResult } from '@/api/exam.js';
// 查看
watchResult(obj) {
this.$router.push({
path: '/exam_result',
path: '/exam-result',
query:{
examId: obj.id,
origin: '',
......
......@@ -156,7 +156,6 @@
</div>
</div>
</div>
</van-overlay>
</div>
</template>
......@@ -165,9 +164,12 @@
import stokeJs from './index';
export default stokeJs;
</script>
<style>
.top-error-message{
display:none;
}
</style>
<style scoped lang="scss">
.project_advice_new {
justify-content:center;
align-items:center;
......
......@@ -12217,6 +12217,11 @@
dependencies:
"graceful-fs" "^4.1.3"
"storejs@^2.0.1":
"integrity" "sha1-NCT0yI/5eeOWJBPOYOpD/WYKllc="
"resolved" "http://192.168.110.93:4873/storejs/-/storejs-2.0.1.tgz"
"version" "2.0.1"
"stream-browserify@^2.0.1":
"integrity" "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg=="
"resolved" "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz"
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册