# 考點練習
http://xue.test/index.php?r=croom/passer/answer&scheduleID=199
## 考點強化—函數與導數(高考數學)
http://xue.test/index.php?r=croom/passer/answer&scheduleID=199
```
/**
* 考點練習
* @author zhangjsh 2014/12/03
*/
public function actionAnswer() {
$this->layout = 'passer_answer_layout' ;
if( Yii::app()->user->isGuest)
$this->redirect_msgBox(array('default/index'),array('msg'=>'請先登錄')) ;
$uid = Yii::app()->user->id ;
$scheID = Yii::app()->request->getParam('scheduleID') ;
$alias = Yii::app()->request->getParam('alias');
$tagID = RequestUtils::getNormalRequest('tagID');//題型對應的tagID:一級考點
/*付費限制 @author chenzsh */
if($this->isCharge){
$flag = WebScheduleService::factory()->payRestrict($uid,$scheID,$alias) ;
if(!$flag)
$this->redirect_msgBox(array('index'), array('msg' => $this->statusArr[53],'width'=>'500'));
}
$this->render( 'answer', array(
'scheduleID'=> $scheID,
'alias' => $alias,
'tagID' => $tagID,
));
}
```
## 獲取試題
http://xue.test/index.php?r=croom/passer/getExercise&_t=t&callback=jQuery1112012097318243600563_1547867156118&scheduleID=197&id=907442&alias=&examID=129832&_=1547867156122
'scheduleID'=> $args['scheduleID'] ,
'uid' => $args['uid'] ,
'sname' => $args['scheduleID'] ? StudyScheduleService::factory()->getScheTag($args['scheduleID'])->fdName : ''
GET
```
// 獲取試題
r: croom/passer/getExercise
scheduleID: 197
id: 1562535
alias:
examID: 25866
```
http://xue.test/index.php?r=croom/passer/getRecommend&type=26&eid=149478&subject=2&schoolType=3&len=3
GET
```
//獲取推薦內容
r: croom/passer/getRecommend
type: 26
eid: 149478
subject: 2
schoolType: 3
len: 3
```
http://xue.test/index.php?r=croom/passer/post&callback=jQuery111202673474636363342_1547861699091
POST
```
{
"aeid": "1562534",
"eid": "1075719",
"type": "1",
"duration": 298000,
"videa": 0,
"videaweike": 0,
"vanalysis": 0,
"vweike": 0,
"submitExam": 0,
"item": [{
"exerciseItemID": "1206238",
"question": [{
"type": "1",
"myAnswer": ["2702102"],
"myScore": "5",
"isRight": 1
}]
}],
"scheduleID": "199",
"targetID": null
}
```
## 試題信息 結構看協議
```
ExerJsonForWebService::factory()->getExerInfo($args['id'],$args['examID'],null,
array(
'scheduleID'=> $args['scheduleID'] ,
'uid' => $args['uid'] ,
'sname' => $args['scheduleID'] ? StudyScheduleService::factory()->getScheTag($args['scheduleID'])->fdName : ''
)) ;
```
D:\wamp\www\xue.test\xuetang\protected\service\ExerJsonForWebService.php
```
/**
* 試題信息 結構看協議
* @param $id 題目ID
* @param $examID 試卷ID(傳NUll,題目分數將獲取本身的分數,否則以題目在試卷所占分數為準)
* @param null $aqid
* <pre>
* $arg e.g:
* array(
* 'examID' => 111,//試卷ID
* ...
* )
* </pre>
* @param array $args
* @return array
* @author chenzsh 14-12-16
* @since 2016-1-14 add $args['examID'] by Zhangjsh
*/
public function getExerInfo($id,$examID ,$aqid = null,$args = array()) {
$exercise = Exercise::model()->with('exerciseItems','exerciseAlias','diff')->findByPk($id);
if(!$examID && $aqid){
$aq = wkeAnswerQuestion::model()->findByPk($aqid) ;
$examID = $aq->answerExam->fdExamID ;
}
$data = array() ;
$data['scheduleID'] = $args['scheduleID'] ;
$data['targetID'] = $args['targetID'] ;
$data['sname'] = $args['sname'] ;
$data['myscore'] = $args['myscore'] ;
$data['right'] = $args['right'] ? 1 : 0;
$data['id'] = $id ;
$data['aqid'] = $aqid ;
$data['type'] = $exercise->fdExerciseTypeID;
$data['subjective'] = $this->getExerTypeName($data['type']) ;
$data['alias'] = $exercise->fdAlias ;
$data['aliasname'] = $exercise->exerciseAlias->fdName ;
$data['text'] = $exercise->fdText ;
$data['score'] = $examID ? V2ExamService::factory()->getScore($exercise->id,$examID) : $exercise->fdScore ; //總分
$data['exerNo'] = $examID ? (ExamItemMap::model()->findByAttributes(array('fdExamID'=>$examID,'fdExerciseID'=>$exercise->id))->fdExerNo) : null ; //題號
$data['isFavorite'] = ContentService::factory()->isFavorite($exercise->fdContentID,$args['uid']) ? 1 : 0;
$data['schoolType'] = ContentService::factory()->getIntegerValue($exercise->fdContentID,WK::SECTION_ATTR_ID) ;
$data['subject'] = ContentService::factory()->getIntegerValue($exercise->fdContentID,WK::SUJT_ATTR_ID) ;
$data['diff'] = $exercise->diff->fdValue ;
$data['hasideaweike'] = $this->hasIdeaWeike($exercise->exerciseItems[0]) ;
$data['tag'] = $this->getExerTag($exercise->fdContentID) ;
$data['item'] = array() ;
if ($exercise->exerciseItems) {
foreach ($exercise->exerciseItems as $item) { //循環一道大題
if (in_array($exercise->fdExerciseTypeID, Yii::app()->params['OBJECTIVE_TYPE'])
|| in_array($item->fdType, Yii::app()->params['OBJECTIVE_TYPE'])) {
$temp = $this->getChoose($item, $aqid, $exercise, $examID);
$data['item'][] = $temp;
} else if ($exercise->fdExerciseTypeID == WK::QUESTION_ID || $exercise->fdExerciseTypeID == WK::COMPLETION_ID ||
$item->fdType == WK::QUESTION_ID || $item->fdType == WK::COMPLETION_ID
) {
$temp = $this->getQuestion($item, $aqid, $exercise, $examID);
$data['item'][] = $temp;
}
}
}
return $data ;
}
```
## answer視圖
**D:\wamp\www\xue.test\xuetang\protected\modules\croom\views\passer\answer.php**
```
<link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->baseUrl?>/public/school/css/thickbox.css">
<link href="<?php echo Yii::app()->request->baseUrl; ?>/public/school/images/favicon.ico" mce_href="<?php echo Yii::app()->request->baseUrl; ?>/public/school/images/favicon.ico" rel="bookmark" type="image/x-icon" />
<link href="<?php echo Yii::app()->request->baseUrl; ?>/public/school/images/favicon.ico" mce_href="<?php echo Yii::app()->request->baseUrl; ?>/public/school/images/favicon.ico" rel="icon" type="image/x-icon" />
<link href="<?php echo Yii::app()->request->baseUrl; ?>/public/school/images/favicon.ico" mce_href="<?php echo Yii::app()->request->baseUrl; ?>/public/school/images/favicon.ico" rel="shortcut icon" type="image/x-icon" />
<script type="text/javascript" src="../../../../../public/school/js/showBox-2.js"></script>
<script type="text/javascript" src="<?php echo Yii::app()->request->baseUrl; ?>/public/simditor/simditor.index.js"></script>
<script type="text/javascript" src="<?php echo Yii::app()->baseUrl?>/public/school/js/thickbox.js"></script>
<!--網頁內容-->
<div class="v2_loading_full">
<div class="v2_loading_tips">親,我們正在努力的加載練習信息,稍微等一下下啦。</div>
</div>
<div class="contain bc pb50">
<h2 id="etitle" class="cb_hz_title tc font-y"></h2>
<div class="cb_hz_status font-y">
<div class="w mb30" id="stitle"></div>
<div class="w clearfix" id="status">
</div>
</div>
<div class="w clearfix">
<div class="w780 fl">
<div class="cb_hz_warper on pr box-sizing">
<div id="info" class="header clearfix font-y none">
</div>
<div id="main" class="body">
</div>
</div>
</div>
<div class="w200 fr">
<!-- 幫助臺 -->
<div id="help" class="ch_hz_help_box mb15">
</div>
<!-- 幫助臺 end-->
<!-- 關聯知識 -->
<div id="attach" class="ch_hz_help_box" >
</div>
<!-- 關聯知識 end-->
</div>
<div class="v2_loading_part" style="position:static;border:1px solid #83ca61;">
<div class="v2_loading_tips2">親,我們正在努力的加載題目信息,稍微等一下下啦。</div>
</div>
</div>
</div>
<!--網頁內容 end-->
<script type="text/javascript" src="<?php echo Yii::app()->request->baseUrl; ?>/public/school/js/showBox-2.js"></script>
<script type="text/javascript" src="<?php echo Yii::app()->request->baseUrl; ?>/public/school/js/template.js"></script>
<script type="text/javascript" src="<?php echo Yii::app()->request->baseUrl; ?>/public/school/js/exam-2.js"></script>
<!-- 答題狀態欄 -->
<script type="text/html" id="exerStatus">
<div class="fl">
<div class="fl">答題卡:</div>
<% for(var i = 1, len = situ.length; i <= len; i++) { %>
<% if (situ[i-1].right == 0 ) { %>
<% if (!flag) { %>
<% flag = true; %>
<div class="def now" title="當前題目"><%=i%></div>
<% } else { %>
<div class="def" title="未做"><%=i%></div>
<% } %>
<% } else if(situ[i-1].right == 1 || situ[i-1].right == 2) { %>
<div class="def answer" title="回答正確,得分率100%"><%=i%><div class="right"></div></div>
<% } else if(situ[i-1].right == 3 && situ[i-1].score > 0) { %>
<div class="def answer" title="回答有誤,得分率0~100%之間(不含0%及100%)"><%=i%><div class="warn"></div></div>
<% } else if(situ[i-1].right == 3 && situ[i-1].score == 0) { %>
<div class="def answer" title="回答錯誤,得分率0%"><%=i%><div class="error"></div></div>
<% } %>
<% } %>
</div>
<div class="fr none">
<span class="fl">正確率:</span>
<div class="line fr pr" title="本考點當前正確率:<%=rate ? rate : 0%>%">
<div class="line_left <%=(rate && rate * 1 > 0 ? '': 'none')%>" style="width:<%=rate ? rate : 0%>%;">
<div class="line_right">
<div class="line_center"><%=rate ? rate : 0%>%</div>
</div>
</div>
</div>
</div>
</script>
<!-- 答題狀態欄 end-->
<!-- 試題info -->
<script type="text/html" id="exerInfo">
<div class="f16 fb fl ml20 circle"><%=index%></div>
<span class="gray2 fl ml10">(本題滿分<%=score%>分,難度<%=diff%>)</span>
<div class="collect_group v2_exam_test_green fr">
<a id="collect" href="javaScript:" class="mr20 v2_old_exam_collect <%=(isFavorite ? 'v2_old_exam_collect_on' : '')%>" data-id="<%=id%>" data-type="<%=type%>"><%=(isFavorite ? '取消收藏' : '收藏')%></a>
<a id="error" href="<?php echo $this->createUrl('passer/Feedback',array('width'=>422));?>&value=<%=id%>" class="mr20 v2_old_exam_error thickbox">糾錯</a>
</div>
</script>
<!-- 試題info end-->
<!-- 試題題目 -->
<script type="text/html" id="exerMain">
<% var abc = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O'],
answer = "", fill,
flag = true; %>
<div class="content1 word-warp">
<div id="exercise<%=index%>" data-id="<%=id%>" class="w"><%=#text%></div>
<% if(type * 1 == 1 || type * 1 == 7) { %>
<div class="w mt20 sitems sel_item" data-i="0" data-id="<%=item[0].exerciseItemID%>" data-type="<%=item[0].type%>">
<% for (var i = 0, opt = item[0].question[0].options, len = opt.length; i < len; i++) { %>
<div class="cb_hz_sel clearfix" data-t="<%=abc[i]%>" data-id="<%=opt[i].id%>">
<span class="w30 fl"><%=abc[i]%>.</span>
<div class="w640 ml5 fl"><%=#opt[i].text%></div>
</div>
<% } %>
</div>
<% } else if (type * 1 == 4) { %>
<% for (var i = 0, item = item, len = item.length; i < len; i++) { %>
<% if (item[i].type * 1 == 1 || item[i].type * 1 == 7) { %>
<div class="w clearfix items sel_item mt20" data-i="<%=i%>" data-id="<%=item[i].exerciseItemID%>" data-type="<%=item[i].type%>">
<span class="w40 fl">(<%=(i+1)%>)</span>
<div class="w680 fl"><%=#item[i].text%></div>
<% for(var j = 0, question = item[i].question, len1 = question.length; j < len1; j++) { %>
<div class="w fr word-break mt20">
<% for (var k = 0, opt = question[j].options, len2 = opt.length; k < len2; k++) { %>
<div class="cb_hz_sel clearfix" data-t="<%=abc[k]%>" data-id="<%=opt[k].id%>">
<span class="w20 fl"><%=abc[k]%>.</span>
<div class="w600 ml5 fl"><%=#opt[k].text%></div>
</div>
<% } %>
</div>
<% } %>
</div>
<% } else {%>
<% if (flag) { flag = false; answer = item[i].question[0].myAnswer; fill = item[i].id;}%>
<% var idList = "";%>
<% for (var j = 0, question = item[i].question, len1 = question.length; j < len1; j++) {
idList += question[j].id + (j == (len1 - 1) ? "" : "-");
}%>
<div class="w clearfix items fill_item" data-i="<%=i%>" data-id="<%=item[i].exerciseItemID%>" data-type="<%=item[i].type%>" data-qids="<%=idList%>">
<span class="w40 fl">(<%=(i+1)%>)</span>
<div class="w680 fl"><%=#item[i].text%></div>
</div>
<% } %>
<% } %>
<% } %>
</div>
<div id="myAnswer" class="mt20 maxImg">
<% if (type == 1 || type == 7) { %>
<div class="w mt10 tc v2_exam_gray_btn big clearfix">
<a id="submit-object" class="w120 fr submit-btn" href="javaScript:">提交答案</a>
</div>
<% } else { %>
<% if(type == 2 || type == 3) { answer = item[0].question[0].myAnswer; flag = false;}%>
<% if (!flag) { %>
<% var idList = "";%>
<% for (var j = 0, question = item[0].question, len1 = question.length; j < len1; j++) {
idList += question[j].id + (j == (len1 - 1) ? "" : "-");
}%>
<div id="answer-box">
<textarea id="item-<%=id%>" class="editor mt10" data-id="<%=item[0].exerciseItemID%>" data-type="<%=item[0].type%>" data-info="<%=answer%>" data-qids="<%=idList%>"></textarea>
</div>
<% } %>
<div class="w mt10 tc v2_exam_next_btn big clearfix">
<a id="submit-subject" class="w120 fr" href="javaScript:">提交答案</a>
</div>
<% } %>
</div>
</script>
<!-- 試題題目 end-->
<!-- 解題思路 -->
<script type="text/html" id="exerIdea">
<% for(var i = (start ? start: 0), item = data.item, len = (end ? end: item.length); i < len; i++) { %>
<div class="mt20 border_t_d gray2 exer_answer" data-i="<%=i%>">
<h3 class="f16 fb mt20 mb20"><%=item.length == 1 ? '【參考答案】' : "(" + (i + 1) + ")、參考答案"%></h3>
<div class="w mb20 pb10">
<h4 class="cb_hz_item_title">解題思路</h4>
<div class="w clearfix pr mt10">
<div class="fl w660 ml20">
<% if(item[i].idea) { %>
<%=#item[i].idea%>
<% } else { %>
暫無解題思路內容
<% } %>
</div>
<% if (item[i].ideaweike && item[i].ideaweike != 0) { %>
<a href="javaScript:" class="pa watchidea" style="right:10px;top:0;" data-id="<%=item[i].ideaweike%>" data-index="<%=i%>">
<img src="<?php echo Yii::app()->request->baseUrl; ?>/public/school/images/v2_country_play_big.png" alt="">
</a>
<% } %>
</div>
</div>
</div>
<% } %>
</script>
<!-- 解題思路 end-->
<!-- 解題過程 -->
<script type="text/html" id="exerAnalysis">
<div class="w mb20 border_t_d pb10">
<h4 class="cb_hz_item_title mt20">解題過程</h4>
<div class="w clearfix pr mt10">
<div class="fl w660 ml20">
<% if(item.analysis) { %>
<%=#item.analysis%>
<% } else { %>
暫無解題過程內容
<% } %>
</div>
<% if (item.weike && item.weike != 0) { %>
<a href="javaScript:" class="pa watchweike" style="right:10px;top:0;" data-id="<%=item.weike%>" data-index="<%=i%>">
<img src="<?php echo Yii::app()->request->baseUrl; ?>/public/school/images/v2_country_play_big.png" alt="">
</a>
<% } %>
</div>
</div>
<% if (item.type * 1== 2 || item.type * 1 == 3) { %>
<div class="w mb20 border_t_d pb10">
<h4 class="cb_hz_item_title mt20">答案</h4>
<div class="w clearfix pr mt10">
<div class="fl w660 ml20">
<% var answerText = ""; %>
<% for (var i = 0, ques = item.question, len = ques.length; i < len; i++) { %>
<% if(ques[i].text) { answerText += ques[i].text + '</br>';} %>
<% } %>
<% if(answerText.length > 0) { %>
<%=#answerText%>
<% } else { %>
暫無答案內容
<% } %>
</div>
</div>
</div>
<div class="w mb20 border_t_d pb10">
<% if (item.question[0].points && item.question[0].points.length > 0) { %>
<h4 class="cb_hz_item_title mt20">采分點</h4>
<div class="w700 ml20 mt20 exer-points">
<% for (var i = 0, point = item.question[0].points, len = point.length; i < len; i++) { %>
<div class="point_item v2_exam_test_checkbox mt10 clr" data-score="<%=point[i].score || 0%>" data-id="<%=point[i].id%>">
<div class="fl"><%=#point[i].text%></div>
<span class="fl orange">(<%=point[i].score || 0%>分)</span>
</div>
<% }%>
</div>
<% } %>
<div class="w cleafix mt30 <%=(item.question[0].points && item.question[0].points.length > 0? 'border_t_d pt20' : '')%>">
<h4 class="cb_hz_item_title fl">自評得分:</h4>
<input type="text" class="fl w50 h25 lh25 tc mr5 selfscore" data-max="<%=item.score || 0%>" maxlength="4" data-id="<%=item.exerciseItemID%>">
<span class="fl">分</span>
<span class="fl orange">(滿分<%=item.score || 0%>分)</span>
</div>
</div>
<% } %>
</script>
<!-- 解題過程 end-->
<!-- 幫助臺 -->
<script type="text/html" id="exerHelp">
<div class="mt20 ml20 font-y f16 fb">幫助臺</div>
<% for (var i = 0, len = item.length; i < len; i++) { %>
<% if (item[i].ideaweike && item[i].ideaweike != 0) { %>
<div class="v2_exam_savebtn mt25 tc">
<a class="w120 idea-btn" data-index="<%=i%>" href="javaScript:">
<img src="<?php echo Yii::app()->request->baseUrl; ?>/public/school/images/v2_country_play_white.png" alt="" class="vm mr5"><%=len > 1 ? '('+(i+1)+')解題思路' : '查看解題思路'%>
</a>
</div>
<% } %>
<% } %>
</script>
<!-- 幫助臺 end-->
<!-- 關聯知識 -->
<script type="text/html" id="rcmList">
<% if (list.length > 0) { %>
<div class="mt20 ml20 font-y f16 fb">關聯知識</div>
<div class="w150 h100 mt20 ml20 pr">
<a href="<?php echo $this->createUrl('exam/videoTipTable1');?>&width=590&height=454&id=<%=list[0].id%>" class="thickbox">
<img id="rcm-img" src="<%=list[0].thumb%>" alt="推薦專題圖" width="150px" height="100px">
<div class="v2_exam_rcm_box">
<img class="vm ml5 mr5" src="<?php echo Yii::app()->request->baseUrl; ?>/public/school/images/v2_country_play_white.png" alt="">
<span class="inline-block w120 lh25 word-ellipsis vm" title="<%=list[0].name%>"><%=list[0].name%></span>
</div>
</a>
</div>
<% if (list.length > 1) { %>
<div class="ml20 w160 mt15" id="rcm-list">
<% for (var i = 1, len = list.length; i < len; i++) {%>
<div class="w h25">
<a class="thickbox" href="<?php echo $this->createUrl('exam/videoTipTable1');?>&width=590&height=454&id=<%=list[i].id%>">
<img class="vm ml5 mr5" src="<?php echo Yii::app()->request->baseUrl; ?>/public/school/images/v2_country_play_gray.png" alt="">
<span class="inline-block w130 lh25 word-ellipsis vm" title="<%=list[i].name%>"><%=list[i].name%></span>
</a>
</div>
<% } %>
</div>
<% } %>
<% } %>
</script>
<!-- 關聯知識 end-->
<!-- 題型練習彈窗 -->
<script type="text/html" id="tipBox">
<div class="v2_exam_guide_bg"></div>
<div class="v2_pay_table_box" style="width:545px;position:fixed;left:50%;top:50%;margin-left:-269px;margin-top:-114px;z-index:10002;">
<div class="w pt8 tr">
<a href="javaScript:void(0)" class="close-btn mr8" title="點擊關閉當前彈窗,并跳轉至報告頁">
<img src="<?php echo Yii::app()->request->baseUrl; ?>/public/school/images/v2_pay_close.png">
</a>
</div>
<h2 class="ml15 font-y f18 fb" style="margin-top:-15px; width:480px;"><%=(result < 80 ? '好樣的,你已完成本組練習,再練一次會更好!' : '本組練習成績很棒,馬上開始下一知識點的學習吧!')%></h2>
<div class="w496 bc clr mt20 pb20">
<div class="fl f12 mt5">
<div class="cb_index_table_circle ml5">
<P class="<%=result >= 80 ? 'green3' : 'orange'%> mt15 font-y"><span style="font-size:30px"><%=result%></span><span class="f20">%</span></P>
<P class="f12 mt3">正確率</P>
</div>
</div>
<div class="fr w358">
<div class="w f14 lh180" style="min-height:100px;">
<div class="w pb7 clr">
<span class="fl w290 word-ellipsis" title="<%=name || '未知'%>">練習內容:<%=name || '未知'%></span>
</div>
<% var typeAdd = {
1: ["<?php echo $this->createUrl('passer/perExer');?>&answerExamID=" + aeid,
"<?php echo $this->createUrl('passer/CountryAnalysis');?>&answerExamID=" + aeid,
"<?php echo $this->createUrl('passer/answer');?>&scheduleID=" + nextId,
"<?php echo $this->createUrl('passer/answer');?>&scheduleID=" + id],
2: ["<?php echo $this->createUrl('passer/perExer');?>&answerExamID=" + aeid,
"<?php echo $this->createUrl('passer/AliasAnalysis');?>&answerExamID=" + aeid,
"<?php echo $this->createUrl('passer/answer');?>&alias=" + nextId,
"<?php echo $this->createUrl('passer/answer');?>&alias=" + id]
};%>
<div class="w pb7 clr">
<span class="fl w280 word-ellipsis">答題概況:正確<span class="orange"><%=right || 0%></span>,有誤<span class="orange"><%=warn || 0%></span>,錯誤<span class="orange"><%=wrong || 0%></span></span>
<span class="fr blue f13 mt2"><a href="<%=typeAdd[type][0]%>">習題解析>></a></span>
</div>
<div class="w pb7 clr">
<span class="fl w280 word-ellipsis">練習結果:
<% if (result >= 80) { %>
<span class="green3">掌握良好</span>
<% } else { %>
<span class="orange">未掌握</span>
<% } %>
</span>
<span class="fr blue f13 mt2"><a href="<%=typeAdd[type][1]%>">評估報告>></a></span>
</div>
</div>
<div class="w mt10 clearfix f14 font-y">
<span class="v2_exam_next_btn middle fr ml2"><a class="fr" style="width:104px;" href="<%=typeAdd[type][3]%>">再做一組練習</a></span>
<span class="v2_exam_access_btn middle fr" <%=(type * 1 == 1 && nextId? '' : "style=display:none;")%>><a style="width:104px;" href="<%=typeAdd[type][2]%>">下一知識點練習</a></span>
</div>
</div>
</div>
</div>
</script>
<!-- 題型練習彈窗 end-->
<!-- 考點強化彈窗 -->
<script type="text/html" id="countryBox">
<div class="v2_exam_guide_bg"></div>
<div class="v2_pay_table_box" style="width:545px;position:fixed;left:50%;top:50%;margin-left:-269px;margin-top:-114px;z-index:10002;">
<div class="w pt8 tr">
<a href="javaScript:void(0)" class="close-btn mr8" title="點擊關閉當前彈窗,并跳轉至報告頁">
<img src="<?php echo Yii::app()->request->baseUrl; ?>/public/school/images/v2_pay_close.png">
</a>
</div>
<div class="pa" style="top:-50px;left:-35px;">
<img src="<?php echo Yii::app()->request->baseUrl; ?>/public/school/images/chabu/mascot.png" width="166" height="237">
</div>
<div class="w360 mt15" style="min-height:150px;margin-left:130px;">
<% if (type == 1) { %>
<p class="font-y lh35 fb f16 t2">好樣的,<%=name%>,你已經完成了一個考點的強化練習,我們建議你創建一個系統的備考練習計劃,復習零死角,考試提分嗖嗖嗖...</p>
<% } else { %>
<p class="font-y lh35 fb f16 t2">hi,<%=name%>,依據你的學習計劃,當前有<span class="orange">2</span>個考點等待練習掌握,趕快去消滅它們,向學霸進發!</p>
<% } %>
<div class="w mt10 clearfix f14 font-y">
<span class="v2_exam_access_btn middle fl mr20"><a class="close-btn" style="width:104px;" href="javaScript:">我知道了</a></span>
<span class="v2_exam_next_btn middle fl"><a class="fl" style="width:104px;" href="<%=(type == 1? "<?php echo $this->createUrl('/personal/user/CreatePlan');?>": "<?php echo $this->createUrl('/personal/user/plan');?>")%>"><%=(type == 1? '制定學習計劃': '查看學習計劃')%></a></span>
</div>
</div>
</div>
</script>
<!-- 考點強化彈窗 end-->
<script>
var weikeInfo;
var weikeType;
$(function() {
// CKEDITOR.disableAutoInline = true;
var uid = "<?php echo Yii::app()->user->id;?>", answerExamID, scheduleID = '<?php echo $scheduleID;?>', examID,
alias = '<?php echo $alias;?>', school = {}, time = 0, start_time, timer, save, index = 0, list = [], editor = null,
userName = '<?php echo Yii::app()->user->id ? $this->getShowName(Yii::app()->user->id):"游客"; ?>',
abc = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O'],
examType = null;
var preload = {},
waitList = {exer:[], rcm:[]},
view = {};
var allScore = 0,
mineScore = 0;
var btnG = {
submit : '<div class="w v2_exam_gray_btn big clearfix mt10 tc"><a id="submit-again" class="w120 fr submit-btn" href="javaScript:">再次提交答案</a></div>',
idea: '<div class="w v2_exam_next_btn big clearfix mt10 tc"><a id="watchidea" class="w120 idea-btn fr" href="javaScript:" data-index="0">查看解題思路</a><img src="<?php echo Yii::app()->request->baseUrl; ?>/public/school/images/v2_exam_error_face.png" alt=" fr" class="vm mt10 mr10 fr"><div class="w fr mt5 tr orange">答案錯誤,請重新選擇!</div></div>',
analysis: '<div class="w v2_exam_next_btn big clearfix mt10 tc"><a id="watchweike" class="w120 weike-btn fr" href="javaScript:" data-index="0">習題解題過程</a><img src="<?php echo Yii::app()->request->baseUrl; ?>/public/school/images/v2_exam_error_face.png" alt="" class="vm mt10 mr10 fr"></div>',
errorN: function() {
return '<div class="w v2_exam_next_btn big clearfix mt10 tc"><a class="w120 next-btn fr" href="javaScript:">' + (index == list.length ? '完成練習': '下一道') + '</a><img src="<?php echo Yii::app()->request->baseUrl; ?>/public/school/images/v2_exam_error_face.png" alt="" class="vm mt10 mr10 fr"></div>';
},
rightN: function() {
return '<div class="w v2_exam_next_btn big clearfix mt10 tc"><a class="w120 next-btn fr" href="javaScript:">' + (index == list.length ? '完成練習': '下一道') + '</a><img src="<?php echo Yii::app()->request->baseUrl; ?>/public/school/images/v2_exam_right_face.png" alt="" class="vm mt10 mr10 fr"></div>';
},
rightS: function() {
return '<div class="w v2_exam_next_btn big clearfix mt10 tc"><a class="w120 next-btn fr" href="javaScript:">' + (index == list.length ? '完成練習': '下一道') + '</a></div>';
}
};
var stD;
// 獲取題目狀態欄
(function getStatus() {
$.ajax({
url:'<?php echo $this->createUrl("passer/test");?>',
dataType:'jsonp',
type:'get',
data:{scheduleID: scheduleID, alias: alias, tagID: "<?php echo $tagID;?>"},//json為json數據
success:function(data) {
stD = data;
if (stD.status == 0) {
var jsonD = stD['data'];
answerExamID = jsonD.aeid;
examID = jsonD.examID;
time = jsonD.spend / 1000;
var t = timeFormat(parseInt(jsonD.spend / 1000));
$("#time").text(t.time);
$("#time").parent().attr('title', t.title);
$("#print").attr("href", "<?php echo $this->createUrl('Exam/PrintExam');?>&id=" + jsonD.eid);
$("#download").attr("href", "<?php echo $this->createUrl('exam/download');?>&examID="
+ jsonD.eid + "&examName=" + jsonD.schoolType + " " + jsonD.subject + " " + jsonD.title);
if (jsonD.type == 1) {
$("#etitle").text("考點強化—" + jsonD.title + "(" +jsonD.schoolType + jsonD.subject + ")");
$("#stitle").text("強化點:" + jsonD.title + "—" + jsonD.lev3Title);
} else {
$("#etitle").text("題型練習—" + jsonD.title + "(" +jsonD.schoolType + jsonD.subject + ")");
$("#stitle").text("強化題型:" + jsonD.title);
}
examType = jsonD.type;
setStatus(jsonD.situation, jsonD.rate.current);
$('.v2_loading_full').hide();
school.schoolType = jsonD.schoolTypeID;
school.subject = jsonD.subjectID;
getExercise(list[index].eid);
// getExercise(1415);
// 1415
// 176115
} else {
$('.v2_loading_full').hide();
if (data.status == 401) {
$.showBox2({contents: data.msg, isAutoClose: true, second:3, callBack: function (){
var url = "<?php echo $this->createUrl('default/LoginBox');?>&width=330&height=419";
tb_show(null, url, false, null);
}});
} else if (data.status == 36) {
$.showBox2({contents: data.msg+"! 3秒后跳回升學復習主頁!", isAutoClose: true, second:3, callBack: function (){
window.location.href = "<?php echo $this->createUrl('default/upgradeReview');?>";
}});
} else {
$.showBox2({contents: data.msg+"! 3秒后跳回升學復習主頁!", isAutoClose: true, second:3, callBack: function (){
window.location.href = "<?php echo $this->createUrl('default/upgradeReview');?>";
}});
}
}
}
});
})();
// 設置題目狀態欄
function setStatus(situ, rate) {
// 獲取當前題目index
var flag = true;
for (var i = 0, len = situ.length; i < len; i++) {
if (situ[i].right == 0 && flag) {
index = i;
flag = false;
}
allScore += situ[i].exerscore ? parseFloat(situ[i].exerscore) : 0;
mineScore = situ[i].score ? toFloat(mineScore + situ[i].score) : mineScore;
}
list = situ;
$('#status').html(template.render('exerStatus', {
situ: situ,
rate: rate
}));
}
// 獲取試題
function getExercise(eid) {
clearInterval(timer);
$('.v2_loading_part').show();
$('.v2_loading_part').siblings().hide();
$.ajax({
url:'<?php echo $this->createUrl("passer/getExercise");?>',
dataType:'jsonp',
type:'get',
data:{scheduleID: scheduleID, id: eid, alias:alias, examID: examID},//json為json數據
success: successHandle
});
getRCM(eid, school);
}
// 預加載下一道題目和推薦
function preGetExer(eid) {
preload.exer = null;
preload.rcm = null;
$.ajax({
url:'<?php echo $this->createUrl("passer/getExercise");?>',
dataType:'jsonp',
type:'get',
data:{scheduleID: scheduleID, id: eid, alias:alias, examID: examID},//json為json數據
success: function(data) {
preload.exer = data;
if (waitList.exer && waitList.exer.length > 0) {
waitList.exer.pop()(data);
}
}
});
$.ajax({
url:'<?php echo $this->createUrl("passer/getRecommend");?>',
type:'get',
data:{type: '<?php echo WK::WEIKE_TYPE_ID;?>', eid: eid, subject: school.subject,
schoolType: school.schoolType, len: 3},//json為json數據
success: function(data) {
preload.rcm = data;
if (waitList.rcm && waitList.rcm.length > 0) {
waitList.rcm.pop()(data);
}
}
});
}
// 獲取推薦列表
function getRCM(eid, jsonD) {
$.ajax({
url:'<?php echo $this->createUrl("passer/getRecommend");?>',
type:'get',
data:{type: '<?php echo WK::WEIKE_TYPE_ID;?>', eid: eid, subject: jsonD.subject,
schoolType: jsonD.schoolType, len: 3},//json為json數據
success: getRCMHandle
});
}
// 獲取試題回調
function successHandle(data){
view = {};
answer_state = 0;
if (data.status == 0) {
var jsonD = data.data;
save = jsonD;
jsonD.index = index + 1;
$('#info').html(template.render('exerInfo', jsonD)).show();
$('#main').html(template.render('exerMain', jsonD));
$("#help").html(template.render('exerHelp', jsonD));
$("#help").find(".idea-btn").length > 0 ? $("#help").show() : $("#help").append('<div class="w160 mt10 ml20">當前題目不含有解題思路微課!</div>').show();
index++;
if (index < list.length) {
preGetExer(list[index].eid);
}
editor = null;
if ($(".editor").length) {
$('.editor').each(function() {
var answers = $(this).attr("data-info");
var $self = $(this);
var id = $self.attr("id");
SimditorReady.addEvent(function () {
editor = new Simditor({
textarea: $self,
placeholder: '建議您先在草稿紙上答題,然后點擊“提交答案”查看答案,進行自主評分',
toolbarFloat: false,
upload: {
url: '<?php echo Yii::app()->request->hostInfo."/index.php?r=upload/UploadFile"?>',//粘貼圖片上傳路徑
params: {from: 'answerExercise'}//可選,上傳圖片請求附帶參數
},
_allowedTags: ['br', 'span', 'img', 'b', 'strong', 'i', 'strike', 'u', 'font', 'p', 'ul', 'ol', 'li', 'blockquote', 'pre', 'code', 'h1', 'h2', 'h3', 'h4', 'hr', 'table', 'tbody', 'thead', 'tfoot', 'th', 'tr', 'td', 'colgroup', 'col', 'sub', 'sup'],
defaultImage: '<?php echo Yii::app()->request->baseUrl; ?>/public/school/images/ckimg.png',
imageButton: ['upload'],
pasteImage: true,//啟用粘貼圖片
toolbar: ['image', 'mathquill'],//工具欄按鈕,'emoji'為表情,'mathquill'為公式編輯器
CKEDITOR_config: {
toolbar: [
['Image', 'jme'],
]
}
});
if (!isIE || safariVersion > DEFAULT_VERSION) {
editor.uploader.on({
beforeupload: function() {
$('#submit-subject').text("圖片上傳中...");
$('#submit-subject').parent().removeClass('v2_exam_next_btn').addClass('v2_exam_gray_btn');
},
uploadready: function() {
$('#submit-subject').text("提交答案");
$('#submit-subject').parent().removeClass('v2_exam_gray_btn').addClass('v2_exam_next_btn');
}
});
}
answers.length > 0 && editor.setValue(answers);
});
});
// CKEDITOR.inline($(".editor").attr("id"));
}
start_time = time;
timeCount();
// 重置分數
scoreT = {
subject: 0,
object: 0
}
$("body").scrollTop(0);
} else {
}
$('.v2_loading_part').hide();
$('.v2_loading_part').siblings().show();
}
// 獲取關聯知識回調
function getRCMHandle(data){
data = JSON.parse(data);
if (data.status == 0) {
var list = data.data;
if (list.length > 0) {
var html = template.render('rcmList', {list: list});
$('#attach').html(html);
var $re = $('.v2_exam_rcm_box');
if (list[0].thumb) {
$('#rcm-img').load(function() {});
$('#rcm-img').error(function() {
$('#rcm-img').attr('src', '<?php echo Yii::app()->request->baseUrl; ?>/public/school/images/v2_pay_rcm.png');
});
}
$('#attach').show();
} else {
$('#attach').hide();
}
}
}
// 計時
function timeCount() {
var count = function() {
time++;
var t = timeFormat(time);
$("#time").text(t.time);
$("#time").parent().attr('title', t.title);
}
timer = setInterval(count, 1000);
}
// 時間轉化
function timeFormat(time) {
var hour = parseInt(time / 3600);
var minute = parseInt(time % 3600 / 60);
var second = time % 60;
var title = "已耗時:" + hour + "時" + minute + "分" + second + "秒";
if (hour < 10) {hour = "0" + hour;}
if (minute < 10) {minute = "0" + minute;}
if (second < 10) {second = "0" + second;}
return {
time:minute + "分" + second + "秒",
title:title
};
}
// 判斷單選題目答案是否正確
function checkAnswer(itemID, optID, items) {
for (var i = 0, len = items.length; i < len; i++) {
if (items[i].exerciseItemID == itemID) {
for (var j = 0, opt = items[i].question[0].options, len1 = opt.length; j < len1; j++) {
if (opt[j].id == optID) {
return parseInt(opt[j].right) ? items[i].score : 0;
}
}
return 0;
}
}
return 0;
}
// 保存答案
var answerSave;
function saveAnswer(hasdone) {
answerSave = new Answer({
aeid : answerExamID,
eid : save.id,
type : save.type,
duration : (time - start_time) * 1000,
videa : 0,
videaweike : 0,
vanalysis : 0,
vweike : 0,
submitExam : (index == list.length ? 1 : 0)
});
if (save.scheduleID) {
answerSave.scheduleID = save.scheduleID;
answerSave.targetID = save.targetID;
} else if (save.alias) {
answerSave.alias = save.alias;
}
var s_type = parseInt(save.type);
if (s_type == 1 || s_type == 7) {
var $item = $('.sitems');
$item.each(function() {
var itemID = $(this).attr('data-id');
var $sel = $(this).find('.cb_hz_sel.on');
var optID = $sel.attr("data-id");
var score = checkAnswer(itemID, optID, save.item);
var need = {
type : $(this).attr('data-type'),
myAnswer : [optID],
myScore : score,
isRight : (score == 0 ? 0 : 1)
};
answerInit(answerSave, itemID, need);
})
} else if (s_type == 4) {
var $item = $('.items');
var flag = true;
$item.each(function() {
var itemID = $(this).attr('data-id');
if ($(this).find('.cb_hz_sel').length > 0) {
var $sel = $(this).find('.cb_hz_sel.on');
var optID = $sel.attr("data-id");
var score = checkAnswer(itemID, optID, save.item);
var need = {
type : $(this).attr('data-type'),
myAnswer : hasdone ? [] : [optID],
myScore : hasdone ? 0 : score,
isRight : hasdone ? 0 : (score == 0 ? 0 : 1)
};
answerInit(answerSave, itemID, need);
} else {
var $edit = $('.editor');
var id = $edit.attr("id");
$edit.find('.gray_tips').remove();
var str = editor.getValue();
var text = editor.getValue();
if (str.replace(/^(( )|(<br\s*\/>)|\s)*$/g, '').length == 0) {
text = '';
}
var idList = $(this).attr("data-qids").split("-");
for (var di = 0, dlen = idList.length; di < dlen; di++) {
var need = {
type : $(this).attr('data-type'),
id : idList[di],
myAnswer : hasdone ? '' : (flag ? text : '')
}
flag = false;
answerInit(answerSave, itemID, need);
}
}
})
} else {
var flag = true;
var $edit = $('.editor');
$edit.find('.gray_tips').remove();
var id = $edit.attr('id');
var itemID = $edit.attr('data-id');
var str = editor.getValue();
var text = editor.getValue();
if (str.replace(/^(( )|(<br\s*\/>)|\s)*$/g, '').length == 0) {
text = '';
}
var idList = $edit.attr("data-qids").split("-");
for (var di = 0, dlen = idList.length; di < dlen; di++) {
var need = {
type : $edit.attr('data-type'),
id : idList[di],
myAnswer : hasdone ? '' : (flag ? text : '')
}
flag = false;
answerInit(answerSave, itemID, need);
}
}
}
// aexidObj用于保存返回的用于自評分的aexid
var aexidObj;
var aexidWait = [];
function postAnswer() {
aexidObj = null;
$.ajax({
url:'<?php echo $this->createUrl("passer/post");?>',
dataType:'jsonp',
type:'post',
data:{data:JSON.stringify(answerSave)},//json為json數據
success:function(data){
if (data.status == 0) {
aexidObj = data.data;
if (aexidWait.length > 0) {
aexidWait.pop()();
}
}
}
})
}
// 檢測用戶,如果有用戶已登錄,那么可以提交答案
function checkAndSave(hasdone) {
saveAnswer(hasdone);
if (checkUser()) {
postAnswer();
return true;
} else {
return false;
}
}
// 檢測用戶
function checkUser(){
var flag = '';
$.ajax({
type:'post',
async:false,
url :"<?php echo $this->createUrl('user/CheckUserID');?>",
success:function(data){
flag = data;
}
})
var isLogExp = /^\S+$/;
if (isLogExp.test(flag)) {
return true;
} else {
clearInterval(timer);
var url = "<?php echo $this->createUrl('default/LoginBox');?>&width=330&height=419";
tb_show(null, url, false, null);
return false;
}
}
// 設置正確答案
function setRightAnswer() {
var $items = $('.sel_item');
$items.each(function() {
var itemId = $(this).attr('data-id');
var $sel = $(this).find('.cb_hz_sel');
$sel.each(function() {
if (checkAnswer(itemId, $(this).attr('data-id'), save.item) != 0) {
$(this).addClass('right');
}
});
})
}
// 設置解題思路
function setIdeas(start, end) {
$("#main").append(template.render('exerIdea', {
data: save,
start: start,
end: end
}));
// 綜合題有多個小題是,幫助臺解題思路不按順序的時候排序
var $els = $(".exer_answer");
$els.sort(function(a,b) {
return parseInt($(a).attr('data-i')) > parseInt($(b).attr('data-i'));
});
$(".exer_answer").remove();
$("#main").append($els);
}
// 設置解題過程
function setAnalysis() {
$(".exer_answer").each(function(i) {
$(this).append(template.render('exerAnalysis', {
item: save.item[i],
i: i
}))
})
}
// 測試自評分是否符合要求
function testScore(score, max) {
var reg = /(^[1-9]\d*([.][0-9])?$)|(^0([.][0-9])?$)/;
return reg.test(score) && toFloat(score) <= toFloat(max);
}
// 累加分數
function addScore() {
var all = 0;
$(".selfscore").each(function() {
var result = testScore($(this).val(), $(this).attr('data-max'));
if (result) {
all += parseFloat($(this).val());
} else {
all += 0;
}
})
scoreT.subject = all;
}
// 解決0.1+0.2產生的問題,保留最多一位小數
function toFloat(num) {
return parseInt(num * 10) / 10;
}
// 設置采分點分數
var scoreFlag = false; //用于表示自評分改變的方式,true表示通過點擊采分點改變,false則是輸入改變
function setScore($el) {
var score = 0;
var $select = $el.parent().children('.v2_exam_test_checkbox_select');
var $input = $el.parent().next().find('input');
$select.each(function() {
score += parseFloat($(this).attr('data-score') || 0);
});
scoreFlag = true;
$input.val(toFloat(score));
$input.blur();
scoreFlag = false;
}
// 提交自評分
function scorePost() {
if (!aexidObj) {
aexidWait.push(scorePost);
}
var data = {
uid: uid,
appraise: [],
app: 'web.xuetang'
};
if (save.scheduleID) {
data.scheduleID = save.scheduleID;
data.targetID = save.targetID;
} else if (save.alias) {
data.alias = save.alias;
}
$('.selfscore').each(function() {
var scoreObj = {
points: [],
myscore: $(this).val(),
aexid: aexidObj[$(this).attr('data-id')]
}
var $points = $(this).parent().prev('.exer-points');
if ($points.length > 0) {
var $sel = $points.find('.v2_exam_test_checkbox_select');
$sel.each(function() {
scoreObj.points.push({
id: $(this).attr('data-id'),
score: $(this).attr('data-score')
});
});
}
data.appraise.push(scoreObj);
});
$.ajax({
url: '<?php echo $this->createUrl("passer/selfAppraises");?>',
type: 'post',
data: {data:JSON.stringify(data)},
success: function(data) {
}
});
}
// 獲得題目狀態
function statusChange() {
return toFloat(scoreT.subject + scoreT.object) >= parseFloat(save.score) * 1 ? 2 : (toFloat(scoreT.subject + scoreT.object) > 0 ? 1 : 0);
}
// 設置正確率欄
function setStatusLine() {
var $answer = $(".cb_hz_status .answer");
var $right = $(".cb_hz_status .answer .right");
var rate = $answer.length > 0 ? parseInt($right.length / $answer.length * 100): 0;
var $line = $(".cb_hz_status .line");
if (rate > 0) {
$line.attr("title", "本考點當前正確率:" + rate + "%");
$line.children(".line_left").css("width", rate + "%").show();
$line.find(".line_center").text(rate + "%");
} else {
$line.attr("title", "本考點當前正確率:0%");
$line.children(".line_left").hide();
}
}
// 完成試卷彈框
function finalTips() {
$('.v2_exam_guide_bg').remove();
$('.v2_pay_table_box').remove();
var rlen = $(".cb_hz_status .answer .right").length;
var tD = stD.data;
if (examType == 2) {
$('body').append($(template.render('tipBox', {
name: tD.type * 1 == 1 ? tD.title + "—" + tD.lev3Title : tD.title,
result: list.length > 0 ? toFloat(100 * rlen / list.length) : 0,
type: tD.type,
aeid: tD.aeid,
right: rlen,
wrong: $(".cb_hz_status .answer .error").length,
warn: $(".cb_hz_status .answer .warn").length,
nextId: tD.type * 1 == 1 ? tD.nextScheID : alias,
id: tD.type * 1 == 1 ? tD.scheduleID : alias
})));
} else {
$.ajax({
url: "<?php echo $this->createUrl('//personal/user/GetTagSituation')?>",
type: 'GET',
dataType: 'text',
data: {},
success: function(data) {
if (data == "meet" || data == "create") {
$("body").append(template.render('countryBox', {
type: data == "create" ? 1 : 2,
name: userName
}));
} else {
$.showBox2("正在為您跳轉到報告頁面!");
setTimeout(function() {
window.location.href = "<?php echo $this->createUrl('passer/CountryAnalysis');?>&answerExamID="
+ tD.aeid;
}, 500);
}
}
})
}
$('.close-btn').live('click', function() {
$('.v2_exam_guide_bg').remove();
$('.v2_pay_table_box').remove();
$.showBox2("正在為您跳轉到報告頁面!");
setTimeout(function() {
if (tD.type * 1 == 1) {
window.location.href = "<?php echo $this->createUrl('passer/CountryAnalysis');?>&answerExamID="
+ tD.aeid;
} else {
window.location.href = "<?php echo $this->createUrl('passer/AliasAnalysis');?>&answerExamID="
+ tD.aeid;
}
}, 500);
});
}
// 單選題選項選中
var answer_state = 0;
$(".cb_hz_sel").live('click', function() {
if ($(this).parent().hasClass('prevent')) { return false;}
if ($(this).hasClass("on")) {
$(this).removeClass("on right wrong");
if ($(this).parent().hasClass('sitems') && answer_state == 0) {
$(".submit-btn").parent().removeClass('v2_exam_next_btn').addClass('v2_exam_gray_btn');
} else if (answer_state == 1) {
$("#watchidea").parent().length > 0 && $("#watchidea").parent().replaceWith(btnG.submit) && setIdeas();
$("#submit-again").parent().removeClass('v2_exam_next_btn').addClass('v2_exam_gray_btn');
$(".idea-btn").removeClass('idea-btn').addClass('watchidea');
}
} else {
$(this).addClass("on").siblings().removeClass("on right wrong");
if ($(this).parent().hasClass('sitems') && answer_state == 0) {
$(".submit-btn").parent().addClass('v2_exam_next_btn').removeClass('v2_exam_gray_btn');
} else if (answer_state == 1) {
$("#watchidea").parent().length > 0 && $("#watchidea").parent().replaceWith(btnG.submit) && setIdeas();
$("#submit-again").parent().addClass('v2_exam_next_btn').removeClass('v2_exam_gray_btn')
$(".idea-btn").removeClass('idea-btn').addClass('watchidea');
}
}
})
// 采分點
$('.point_item').live('click', function(){
if ($(this).parents('.exer-points').hasClass('prevent')) {return false;}
if ($(this).hasClass('v2_exam_test_checkbox_select')) {
$(this).removeClass('v2_exam_test_checkbox_select');
} else {
$(this).addClass('v2_exam_test_checkbox_select');
}
setScore($(this));
})
// 答案輸入框響應事件
// var $sp = $('<span class="gray gray_tips">建議您先在草稿紙上答題,然后點擊“提交答案”查看答案,進行自主評分</span>');
// $(".editor").live({
// focus: function() {
// $(this).find('.gray_tips').remove();
// },
// blur: function() {
// var str = CKEDITOR.instances[$(this).attr('id')].getData();
// if (str.replace(/^(( )|(<br\s*\/>)|\s)*$/g, '').length == 0) {
// $(this).html('');
// $(this).append($sp);
// }
// }
// });
// 暫停事件
$("#pause").live('click', function() {
clearInterval(timer);
$.showBox2({contents: '不要暫停離開太久,要保持做題的節奏喔。',
greets: 'Hi,親愛的'+userName+':', hasConfirmButton: true, confirmValue: '繼續答題', isAutoClose: false,
confirmFunction: timeCount, closeFunction: timeCount});
});
// 收藏試題
$('#collect').live('click', function() {
if ($(this).attr('prevent')) {
return false;
}
$(this).attr('prevent', true);
var self = $(this);
var exerciseID = $(this).attr('data-id');
var eType = $(this).attr('data-type');
if(self.text() == "收藏") {
$.ajax({
type: 'post',
url: "<?php echo $this->createUrl('Exercise/AddFavorite');?>",
data: {exerciseID: exerciseID, eType: eType},
success: function(data) {
self.removeAttr('prevent');
if (data == "success") {
self.text("取消收藏");
self.addClass('v2_old_exam_collect_on');
} else {
$.showBox2("收藏失敗");
}
}
});
} else {
$.ajax({
type: 'post',
url: "<?php echo $this->createUrl('Exercise/RemoveFavorite');?>",
data: {exerciseID:exerciseID},
success: function(data) {
self.removeAttr('prevent');
if (data == "success") {
self.text("收藏");
self.removeClass('v2_old_exam_collect_on');
} else {
$.showBox2("取消收藏失敗");
}
}
})
}
});
// 客觀題提交按鈕
$("#submit-object").live('click', function() {
if ($(this).parent().hasClass('v2_exam_gray_btn')) {return false;}
var $sel = $('.cb_hz_sel.on');
var result = checkAnswer($sel.parent().attr('data-id'), $sel.attr('data-id'), save.item);
if (result == 0) {
// 答案錯誤,如果是判斷題則直接顯示下一題按鈕及解題思路和過程內容
if (save.type == 7) {
scoreT.object = toFloat(result);
if (checkAndSave()) {
$sel.addClass('wrong');
$sel.parent().addClass('prevent');
var $main = $(this).parents("#main");
$(this).parents("#myAnswer").remove();
setIdeas();
setAnalysis();
$main.append(btnG.rightS());
// 防止點擊查看解題思路按鈕后再次添加解題思路信息
$(".idea-btn").removeClass('idea-btn').addClass('watchidea');
} else {
return false;
}
} else {
// 答案錯誤,如果有解題思路,則顯示解題思路按鈕
if(save.item[0].idea && save.item[0].ideaweike && save.item[0].ideaweike != "0") {
$sel.addClass('wrong');
$(this).parent().replaceWith(btnG.idea);
answer_state = 1;
} else {
// 如果沒有則顯示再次提交按鈕
$(".cb_hz_sel").removeClass("on right wrong");
$(this).parent().replaceWith(btnG.submit);
$("#submit-again").text("再次選擇答案");
$("#submit-again").parent().removeClass('v2_exam_next_btn').addClass('v2_exam_gray_btn');
setIdeas();
// 防止點擊查看解題思路按鈕后再次添加解題思路信息
$(".idea-btn").removeClass('idea-btn').addClass('watchidea');
}
}
} else {
// 如果答案正確則顯示下一題按鈕且顯示解題思路解題過程
scoreT.object = toFloat(result);
if (checkAndSave()) {
$sel.addClass('right');
$sel.parent().addClass('prevent');
var $main = $(this).parents("#main");
$(this).parents("#myAnswer").remove();
setIdeas();
setAnalysis();
$main.append(btnG.rightS());
// 防止點擊查看解題思路按鈕后再次添加解題思路信息
$(".idea-btn").removeClass('idea-btn').addClass('watchidea');
} else {
return false;
}
}
});
// 查看解題思路按鈕
$(".idea-btn").live('click', function() {
var $help = $('#help');
if ($(this).parents("#help").length > 0) {
$(this).removeClass('idea-btn').addClass('watchidea');
} else {
$help.find('.idea-btn').removeClass('idea-btn').addClass('watchidea');
}
weikeInfo = save.item[$(this).attr('data-index')].idea;
weikeType = 1;
tb_show(null, '<?php echo $this->createUrl("exam/VideoTipTable2"); ?>&width=810&height=488&id=' + save.item[$(this).attr('data-index')].ideaweike, false, null);
view.idea = 1;
if (save.type == 1 || save.type == 7) {
answer_state = 1;
$(".cb_hz_sel").removeClass("on right wrong");
$("#watchidea").length > 0 ? $("#watchidea").parent().replaceWith(btnG.submit) : $("#submit-object").parent().replaceWith(btnG.submit);
$("#submit-again").parent().removeClass('v2_exam_next_btn').addClass('v2_exam_gray_btn');
setIdeas();
} else {
var i = parseInt($(this).attr("data-index"));
!isNaN(i) && setIdeas(i, i + 1);
}
})
// 客觀題再次提交按鈕
$("#submit-again").live('click', function() {
if ($(this).parent().hasClass('v2_exam_gray_btn')) {
return false;
}
var $sel = $('.cb_hz_sel.on');
var result = checkAnswer($sel.parent().attr('data-id'), $sel.attr('data-id'), save.item);
$sel.parent().addClass('prevent');
if (result == 0) {
$sel.addClass('wrong');
// 答案錯誤,如果有解題過程,則顯示解題過程按鈕
if(save.item[0].analysis && save.item[0].weike && save.item[0].weike != "0") {
$(this).parent().replaceWith(btnG.analysis);
} else {
// 如果沒有則顯示錯誤的下一題
scoreT.object = 0;
if (checkAndSave()) {
$(this).parents("#main").append(btnG.rightS());
$(this).parents("#myAnswer").remove();
setRightAnswer()
setAnalysis();
} else {
return false;
}
}
} else {
// 如果答案正確則顯示下一題按鈕且顯示解題思路解題過程
scoreT.object = toFloat(result);
if (checkAndSave()) {
$sel.addClass('right');
$(this).parents("#main").append(btnG.rightS());
$(this).parents("#myAnswer").remove();
setAnalysis();
} else {
return false;
}
}
});
// 查看解題過程按鈕
$(".weike-btn").live('click', function() {
weikeInfo = save.item[$(this).attr('data-index')].analysis;
weikeType = 2;
tb_show(null, '<?php echo $this->createUrl("exam/VideoTipTable2"); ?>&width=810&height=488&id=' + save.item[$(this).attr('data-index')].weike, false, null);
view.weike = 1;
if (save.type == 1 || save.type == 7) {
scoreT.object = 0;
if (checkAndSave()) {
$("#watchweike").parents("#main").append(btnG.rightS());
$("#watchweike").parents("#myAnswer").remove();
setRightAnswer()
setAnalysis();
} else {
return false;
}
}
});
// 解題思路播放按鈕
$(".watchidea").live('click', function() {
weikeInfo = save.item[$(this).attr('data-index')].idea;
weikeType = 1;
tb_show(null, '<?php echo $this->createUrl("exam/VideoTipTable2"); ?>&width=810&height=488&id=' + save.item[$(this).attr('data-index')].ideaweike, false, null);
});
// 解題過程播放按鈕
$(".watchweike").live('click', function() {
weikeInfo = save.item[$(this).attr('data-index')].analysis;
weikeType = 2;
tb_show(null, '<?php echo $this->createUrl("exam/VideoTipTable2"); ?>&width=810&height=488&id=' + save.item[$(this).attr('data-index')].weike, false, null);
});
// 記錄分數
var scoreT = {
subject: 0,
object: 0
}
// 主觀題
$("#submit-subject").live('click', function() {
var $self = $(this);
if (checkAndSave()) {
setRightAnswer();
// 移除現有的參考答案,后面重新渲染
$(".exer_answer").remove();
var $sel = $('.cb_hz_sel.on');
// 如果有選擇題,則計算選擇題的累積分值以及設置相應的對錯
$sel.each(function() {
var $p = $(this).parents('.sel_item');
var result = checkAnswer($p.attr('data-id'), $(this).attr('data-id'), save.item);
scoreT.object += parseFloat(result);
result ? $(this).addClass('right'): $(this).addClass('wrong');
});
$('.cb_hz_sel').parent().addClass('prevent');
if (editor) {
$("#answer-box").html('<div class="answer_box mt10">' + editor.getValue() + '</div>');
editor = null;
}
setIdeas();
setAnalysis();
$self.parents("#main").append(btnG.rightS());
$self.parent().remove();
// 防止點擊查看解題思路按鈕后再次添加解題思路信息
$(".idea-btn").removeClass('idea-btn').addClass('watchidea');
} else {
return false;
}
});
// 下一題按鈕
$(".next-btn").live('click', function() {
// 獲取當前自評分輸入框,并檢測是否都已輸入完畢并正確
var $sinput = $(".selfscore");
var len = $sinput.length;
if (len > 0) {
var tlen = 0;
var $first;
$sinput.each(function() {
var result = testScore($(this).val(), $(this).attr('data-max'));
tlen += (result ? 1 : 0);
if (!$first && !result) {
$first = $(this);
}
})
if (len > tlen) {
$.showBox2({contents: '完成當前習題評分后可進入下一題!',
greets: 'Hi,親愛的'+userName+':', hasConfirmButton: true, confirmValue: '自動關閉', isAutoClose: true,
second:2, timecount: true});
$first.focus();
return false;
}
}
// 如果含有自評分輸入框,則保存自評分
if ($('.selfscore').length > 0) {
scorePost();
}
var $now = $('.cb_hz_status .now');
var $div = $(statusChange() == 2 ? '<div class="right"></div>' : statusChange() == 1 ? '<div class="warn"></div>': '<div class="error"></div>');
$now.removeClass('now').addClass('answer').attr("title", statusChange() == 2 ? "回答正確,得分率100%": statusChange() == 1 ? "回答有誤,得分率0~100%之間(不含0%及100%)" : "回答錯誤,得分率0").append($div);
mineScore += toFloat(scoreT.subject + scoreT.object);
// 如果當前題目不為最后一題
if (index < list.length) {
var $next = $now.next();
$next.addClass('now').attr("title", "當前題目");
$('#info').html('');
$('#main').html('');
$('.v2_loading_part').show();
$('.v2_loading_part').siblings().hide();
clearInterval(timer);
if (preload.exer) {
successHandle(preload.exer);
} else {
waitList.exer.push(successHandle);
}
if (preload.rcm) {
getRCMHandle(preload.rcm);
} else {
waitList.rcm.push(getRCMHandle);
}
} else {
// 如果為最后一題則彈窗
finalTips();
$(".exer-points").addClass('prevent');
$('.selfscore').length > 0 && $('.selfscore').each(function() {
var val = $(this).val();
$(this).replaceWith('<span class="orange fl">' + val + '</span>');
})
}
setStatusLine();
});
// 自評分
$(".selfscore").live('blur', function() {
var result = testScore($(this).val(), $(this).attr('data-max'));
if (result) {
$(this).parent().children('.orange.tip').remove();
} else {
$(this).parent().children('.orange.tip').remove();
$(this).parent().append('<span class="fl ml20 orange tip">輸入需為整數或最多一位小數(且不能超過該小題最大分值),請重新輸入!</span>');
}
//如果不是通過設置采分點來設置分數的,采分點全部取消選擇
!scoreFlag && $(this).parent().prev('.exer-points').children('.v2_exam_test_checkbox').removeClass('v2_exam_test_checkbox_select');
// 累加分數
addScore();
});
})
</script>
<!--網頁內容 end-->
```
wkwke.tbAnswerExam.fdUserID ~ wkwke.tbAnswerExam.id
## 表 wkwke.tbAnswerExam
```
CREATE TABLE `tbAnswerExam` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fdName` varchar(255) DEFAULT NULL COMMENT '報告名稱',
`fdUserID` int(11) NOT NULL COMMENT '對應tbUser.id',
`fdExamID` int(11) NOT NULL COMMENT '試卷ID',
`fdCreate` datetime NOT NULL COMMENT '創建時間',
`fdStart` datetime DEFAULT NULL COMMENT '開始做試卷的時間',
`fdEnd` datetime DEFAULT NULL COMMENT '介紹做試卷的時間',
`fdUsed` int(11) NOT NULL DEFAULT '0' COMMENT '試卷已經使用的時間(單位是秒)',
`fdScore` double DEFAULT NULL COMMENT '試卷總得分',
`fdScoreRate` float DEFAULT '0' COMMENT '得分率 0-100',
`fdRate` float DEFAULT '0' COMMENT '答題正確率,0最低,100最好',
`fdStatus` tinyint(4) NOT NULL DEFAULT '0' COMMENT '狀態 0:未交卷,1:交卷,2:刪除記錄',
`fdType` int(11) DEFAULT '0' COMMENT '試卷類型,當前答題所在位置:0:作業,1:上課',
`fdAppID` int(11) DEFAULT '0' COMMENT '應用ID',
`fdMethod` tinyint(4) DEFAULT '0' COMMENT '答卷方式0:普通練習 1:閱卷任務',
`fdSelf` tinyint(4) DEFAULT '0' COMMENT '是否完成自評 0未完成 1完成',
`fdIsSyncMongo` tinyint(4) DEFAULT '0' COMMENT '是否同步到mongo',
`fdSyncTime` int(11) DEFAULT '0' COMMENT '同步時間',
PRIMARY KEY (`id`),
KEY `FK_Reference_41` (`fdExamID`),
KEY `fdUserID` (`fdUserID`),
KEY `answerexam_syncmongo` (`fdIsSyncMongo`),
KEY `ae_synctime` (`fdSyncTime`),
KEY `ae_status` (`fdStatus`),
KEY `sync-status` (`fdStatus`,`fdSyncTime`),
KEY `fdEnd` (`fdEnd`),
KEY `appid_syncmongo` (`fdAppID`,`fdIsSyncMongo`)
) ENGINE=MyISAM AUTO_INCREMENT=1562542 DEFAULT CHARSET=utf8 COMMENT='回答試卷';
```
## 表 wkwke.tbPasserUserSchedule
```
CREATE TABLE `tbPasserUserSchedule` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fdUserID` int(11) NOT NULL COMMENT '用戶ID',
`fdTagID` int(11) NOT NULL COMMENT '三級考點ID',
`fdScheduleID` int(11) NOT NULL COMMENT '對應到tbPasserSchedule.id',
`fdAeid` int(11) NOT NULL COMMENT '通關答卷ID',
`fdScheduleType` tinyint(4) DEFAULT '0' COMMENT '學習類型,0:自由學習 1:任務系統',
`fdIsFirstPass` tinyint(4) DEFAULT '0' COMMENT '是否為第一次通關',
`fdCreate` datetime NOT NULL,
`fdUpdate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `passusersche_uid` (`fdUserID`)
) ENGINE=MyISAM AUTO_INCREMENT=22798 DEFAULT CHARSET=utf8 COMMENT='用戶考點通關進度表';
```
## 回答試題表 wkwke.tbAnswerQuestion
```
CREATE TABLE `tbAnswerQuestion` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fdAnswerExamID` int(11) NOT NULL COMMENT '對應答卷ID,對應到tbAnswerExam.id',
`fdExerciseID` int(11) NOT NULL COMMENT '題目ID,對應到tbExercise.id',
`fdScore` float DEFAULT '0' COMMENT '當前題目得分,如果題目有多道小題,應為多道小題題目得分之和',
`fdSelf` float DEFAULT NULL COMMENT '學生自評分',
`fdTscore` double DEFAULT NULL COMMENT '教師評分',
`fdCreate` datetime NOT NULL,
`fdUpdate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`fdStatus` tinyint(4) DEFAULT '0' COMMENT '作答狀態 0:有做答,1:用戶沒作答',
`fdRight` tinyint(4) DEFAULT '0' COMMENT '題目是否正確,0表示錯誤,1表示正確',
`fdCount` int(11) DEFAULT '0',
`fdErrSync` tinyint(4) DEFAULT '0' COMMENT '是否已經同步了正誤狀態',
PRIMARY KEY (`id`),
KEY `fdAnswerExamID` (`fdAnswerExamID`),
KEY `fdExerciseID` (`fdExerciseID`),
KEY `answerquestion_errsync` (`fdErrSync`)
) ENGINE=MyISAM AUTO_INCREMENT=36011035 DEFAULT CHARSET=utf8 COMMENT='回答試題';
```
## 回答試卷中的題目 wkwke.tbAnswerExercise
```
CREATE TABLE `tbAnswerExercise` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fdAnswerExamID` int(11) NOT NULL,
`fdAnswerQuestionID` int(11) DEFAULT '0' COMMENT '答題ID 對應到tbAnswerQuestion.id',
`fdExerciseID` int(11) DEFAULT '0' COMMENT '題目ID',
`fdExerciseItemID` int(11) NOT NULL,
`fdRight` varchar(255) DEFAULT NULL COMMENT '客觀題選項',
`fdSelf` double DEFAULT NULL COMMENT '自評總得分',
`fdTscore` double DEFAULT NULL COMMENT '教師評分',
`fdScore` double NOT NULL DEFAULT '0' COMMENT '本題最終得分',
`fdOrder` int(11) DEFAULT NULL,
`fdVanalysis` tinyint(4) DEFAULT '0' COMMENT '是否察看答案解析',
`fdVweike` tinyint(4) DEFAULT '0' COMMENT '是否查看了解析微課',
`fdVidea` tinyint(4) DEFAULT '0' COMMENT '是否查看解析思路',
`fdVideaweike` tinyint(4) DEFAULT '0' COMMENT '是否查看解題思路微課',
`fdMark` tinyint(4) DEFAULT '0' COMMENT '教師標記標識',
`fdTeacherID` int(11) DEFAULT '0' COMMENT '評分教師ID',
`fdExaminationRecordID` int(11) DEFAULT '0' COMMENT '考試記錄ID',
`fdLockTime` int(11) DEFAULT '0' COMMENT '鎖定時間',
`fdScoreRate` float DEFAULT '0' COMMENT '當前小題得分率',
`fdFlag` tinyint(4) DEFAULT '0' COMMENT '跑腳本標識',
PRIMARY KEY (`id`),
KEY `FK_Reference_40` (`fdExerciseItemID`),
KEY `FK_Reference_42` (`fdAnswerExamID`),
KEY `fdAnswerQuestionID` (`fdAnswerQuestionID`),
KEY `examinationrecordid` (`fdExaminationRecordID`),
KEY `answerexercise_exid` (`fdExerciseID`),
KEY `fdFlag` (`fdFlag`)
) ENGINE=MyISAM AUTO_INCREMENT=38392684 DEFAULT CHARSET=utf8 COMMENT='回答試卷中的題目';
SELECT COUNT(fdScore) FROM wkwke.tbAnswerExercise WHERE fdAnswerExamID=:id
```
## 練習題
```
CREATE TABLE `tbExercise` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fdContentID` int(11) NOT NULL COMMENT '微課標識,對應content.tbContent.id',
`fdUserID` int(11) DEFAULT NULL COMMENT '題目上傳者',
`fdExerciseTypeID` int(11) NOT NULL COMMENT '題目類型,對應tbExerciseType.id\n ',
`fdScore` double DEFAULT NULL,
`fdText` text COMMENT '題干',
`fdAnswer` text COMMENT '題目解析',
`fdCreate` datetime NOT NULL COMMENT '記錄創建時間',
`fdApproverID` int(11) NOT NULL COMMENT '審核人標識,對應tbOperator.id',
`fdApprove` datetime DEFAULT NULL COMMENT '審核時間',
`fdStatus` int(11) DEFAULT NULL COMMENT '審核狀態,0-懸而未決,1-審核通過,2-審核不通過',
`fdAlias` mediumint(9) DEFAULT NULL,
`fdDraft` mediumint(9) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `FK_Reference_35` (`fdExerciseTypeID`),
KEY `fdContentID` (`fdContentID`),
KEY `nxExercise_Alias` (`fdAlias`),
KEY `nxExercise_Draft` (`fdDraft`),
KEY `nxExercise_Status` (`fdStatus`),
KEY `exercise-userid` (`fdUserID`)
) ENGINE=MyISAM AUTO_INCREMENT=1443817 DEFAULT CHARSET=utf8 COMMENT='練習題';
```
## 試卷 wkwke.tbExam
```
CREATE TABLE `tbExam` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`idString` varchar(64) DEFAULT NULL,
`fdContentID` int(11) NOT NULL COMMENT '試卷標識,對應content.tbContent.id',
`fdUserID` int(11) DEFAULT NULL COMMENT '用戶ID',
`fdExamTypeID` int(11) NOT NULL COMMENT '試卷類型,對應tbExamType.id\n ',
`fdTotal` double NOT NULL COMMENT '試卷總分',
`fdGrade` double NOT NULL COMMENT '及格分數線',
`fdSpend` int(11) DEFAULT NULL COMMENT '試卷最大多少分鐘完成',
`fdCreate` datetime NOT NULL COMMENT '記錄創建時間',
`fdApproverID` int(11) NOT NULL COMMENT '審核人標識,對應tbOperator.id',
`fdApprove` datetime DEFAULT NULL COMMENT '審核時間',
`fdStatus` int(11) DEFAULT NULL COMMENT '審核狀態,0-懸而未決,1-審核通過,2-審核不通過',
`fdAlias` int(11) DEFAULT NULL COMMENT '題目題型、僅在題型練習試卷用于記錄題型,其他為空',
`fdDraft` mediumint(9) NOT NULL COMMENT '0:臨時組卷;1:草稿;2:發布試卷;3:學堂考點強化;4學堂題型練習;5:學堂錯題復習',
`fdIsfix` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否已經修復過分數',
PRIMARY KEY (`id`),
KEY `FK_Reference_32` (`fdExamTypeID`),
KEY `fdContentID` (`fdContentID`),
KEY `exam-userid` (`fdUserID`),
KEY `fdIsfix` (`fdIsfix`)
) ENGINE=MyISAM AUTO_INCREMENT=129835 DEFAULT CHARSET=utf8 COMMENT='試卷';
```
- 說明
- 開發任務
- 星課-真光
- 課表
- Excel Down
- 調課
- 課表修改
- 課表代碼分析
- 課堂
- 課堂:應用商店通信管理協議
- 教師賬號強制綁定手機或郵箱
- 強制綁定手機和修改密碼的規則
- 學堂
- 課程學習:討論功能
- 后臺:課程討論管理
- 課程直播接口
- 學習統計功能(舊版)
- 學習統計功能(新版)
- 同步課程統計功能
- 同步課程編輯-新增視頻
- 第三方接口
- 學科網
- 安徽第三方
- 大賽
- 管控系統
- 日志管理
- 設備日志
- 平板接口
- 渝教
- 教學總結
- 空白目錄
- Yii 1.1
- 學堂架構
- Yii 1.1一些方法的解讀
- MVCS結構
- 基礎使用語法
- 創建1個新模塊
- 關聯模型
- CDbCriteria
- 學生-課堂記錄
- 學生端頁面展示
- 教師端頁面展示
- 編輯課程文檔
- SQL
- 課堂項目運行入口
- 上傳資源示意圖
- 行為
- PHPStorm
- 源碼閱讀
- 會診答卷頁面
- 考點練習
- 資源首頁
- 同步課程
- 同步課程:章節信息
- 升學復習
- 統計圖-范例
- 模塊
- 非法詞
- 服務層
- MongoDB類
- 學堂作答記錄從Mongo新集合獲取數據
- MongoYii
- 錯題集
- 小技巧
- 完善資料
- 郵件發送
- K12
- JSpang視頻課程
- MongoDB
- 創業
- 項目
- 包包