YNICTE/BO/Views/cm/qr.cshtml

446 lines
27 KiB
Plaintext
Raw Normal View History

2020-10-12 14:39:23 +09:00
@model NP.Model.VMCM
@{
var qdiff = Model.ComCodes.Where(w => w.cgroup == "ccdiff");
var qt1 = Model.ComCodes.Where(w => w.cgroup == "cc1");
var qt2 = Model.ComCodes.Where(w => w.cgroup == "cc2");
var qt3 = Model.ComCodes.Where(w => w.cgroup == "cc3");
var qt4 = Model.ComCodes.Where(w => w.cgroup == "cc4");
var qt5 = Model.ComCodes.Where(w => w.cgroup == "cc5");
var isqdiff = qdiff.Count() > 0;
var isqt1 = qt1.Count() > 0;
var isqt2 = qt2.Count() > 0;
var isqt3 = qt3.Count() > 0;
var isqt4 = qt4.Count() > 0;
var isqt5 = qt5.Count() > 0;
}
<div>
<ul class="pagination pagination-md" style="margin: 0;">
<li class=""><a href="#" onclick="gotab(1);" data-toggle="tab">학습콘텐츠</a></li>
<li class=""><a href="#" onclick="gotab(0);" data-toggle="tab">그룹코드관리</a></li>
<li class="active"><a href="#" data-toggle="tab">문제</a></li>
<li class=""><a href="#" onclick="gotab(3);" data-toggle="tab">설문지</a></li>
</ul>
</div>
<br />
<div class="row">
<form id="mform" method="post" enctype="multipart/form-data" class="form-horizontal">
<section class="panel panel-default">
<header class="panel-heading"><strong>문제 @(Model.Question.qno > 0 ? "수정" : "등록")</strong></header>
<div class="panel-body">
<div class="form-group">
<label class="col-sm-4 col-md-2 control-label">과정</label>
<div class="col-sm-8 col-md-10">@Html.Partial("./Partial/Select", Model.CMs, new ViewDataDictionary { { "special", "reg" }, { "name", "Question.cmno" }, { "selected", Model.Question.cmno }, { "df", ":-과정선택" } })</div>
</div>
@if (isqdiff)
{<div class="line line-dashed line-lg pull-in"></div><div class="form-group"><label class="col-sm-4 col-md-2 control-label" id="lblqdiff">@qdiff.First().cgroupname</label><div class="col-sm-8 col-md-10">@Html.Radio(new NP.Model.InputRadio() { Name = "qdiff", Selected = Model.Question.qdiff.ToString(), ComCodes = Model.ComCodes.Where(w => w.cgroup == "ccdiff").ToList(), ChangeId = "Question_qdiff" })</div></div>}
@if (isqt1)
{<div class="line line-dashed line-lg pull-in"></div><div class="form-group"><label class="col-sm-4 col-md-2 control-label" id="lblqt1">@qt1.First().cgroupname</label><div class="col-sm-8 col-md-10">@Html.HiddenFor(m => m.Question.cc1)@Html.Radio(new NP.Model.InputRadio() { Name = "cc1", Selected = Model.Question.cc1.ToString(), ComCodes = Model.ComCodes.Where(w => w.cgroup == "cc1").ToList(), ChangeId = "Question_cc1" })</div></div>}
@if (isqt2)
{<div class="line line-dashed line-lg pull-in"></div><div class="form-group"><label class="col-sm-4 col-md-2 control-label" id="lblqt2">@qt2.First().cgroupname</label><div class="col-sm-8 col-md-10">@Html.HiddenFor(m => m.Question.cc2)@Html.Radio(new NP.Model.InputRadio() { Name = "cc2", Selected = Model.Question.cc2.ToString(), ComCodes = Model.ComCodes.Where(w => w.cgroup == "cc2").ToList(), ChangeId = "Question_cc2" })</div></div>}
@if (isqt3)
{<div class="line line-dashed line-lg pull-in"></div><div class="form-group"><label class="col-sm-4 col-md-2 control-label" id="lblqt3">@qt3.First().cgroupname</label><div class="col-sm-8 col-md-10">@Html.HiddenFor(m => m.Question.cc3)@Html.Radio(new NP.Model.InputRadio() { Name = "cc3", Selected = Model.Question.cc3.ToString(), ComCodes = Model.ComCodes.Where(w => w.cgroup == "cc3").ToList(), ChangeId = "Question_cc3" })</div></div>}
@if (isqt4)
{<div class="line line-dashed line-lg pull-in"></div><div class="form-group"><label class="col-sm-4 col-md-2 control-label" id="lblqt4">@qt4.First().cgroupname</label><div class="col-sm-8 col-md-10">@Html.HiddenFor(m => m.Question.cc4)@Html.Radio(new NP.Model.InputRadio() { Name = "cc4", Selected = Model.Question.cc4.ToString(), ComCodes = Model.ComCodes.Where(w => w.cgroup == "cc4").ToList(), ChangeId = "Question_cc4" })</div></div>}
@if (isqt5)
{<div class="line line-dashed line-lg pull-in"></div><div class="form-group"><label class="col-sm-4 col-md-2 control-label" id="lblqt5">@qt5.First().cgroupname</label><div class="col-sm-8 col-md-10">@Html.HiddenFor(m => m.Question.cc5)@Html.Radio(new NP.Model.InputRadio() { Name = "cc5", Selected = Model.Question.cc5.ToString(), ComCodes = Model.ComCodes.Where(w => w.cgroup == "cc5").ToList(), ChangeId = "Question_cc5" })</div></div>}
<div class="line line-dashed line-lg pull-in"></div><div class="form-group"><label class="col-sm-4 col-md-2 control-label req">사용여부</label><div class="col-sm-8 col-md-10">@Html.Partial("./Partial/Radio", "1:사용;0:미사용", new ViewDataDictionary { { "special", "stringlist" }, { "name", "Question.isuse" }, { "checked", Model.Question.isuse } })</div></div>
<div class="line line-dashed line-lg pull-in"></div>
<div class="form-group">
<label class="col-sm-4 col-md-2 control-label req">문제유형</label>
<div class="col-sm-8 col-md-10">
<div style="@(Model.Question.qno > 0?"display: none;":"")">
@Html.HiddenFor(m => m.Question.atype)@Html.Radio(new NP.Model.InputRadio() { Name = "atype", Special = NP.Model.ENUM.Special.StringList, ListData = "0:객관식;1:단답형;2:서술형", Selected = Model.Question.atype.ToString(), ChangeId = "Question_atype" })
</div>
<div style="@(Model.Question.qno < 1?"display: none;":"")">@Model.Question.atypename</div>
</div>
</div>
<div class="line line-dashed line-lg pull-in atype1box"></div><div class="form-group"><label class="col-sm-4 col-md-2 control-label">기본점수(시험전용)</label><div class="col-sm-8 col-md-10">@Html.TextBoxFor(m => m.Question.dpoint, new { @class = "int center form-control text-center", @style = "width: 80px;" })</div></div>
<div class="line line-dashed line-lg pull-in"></div><div class="form-group"><label class="col-sm-4 col-md-2 control-label req">문제</label><div class="col-sm-8 col-md-10">@Html.HiddenFor(m => m.Question.qtextstring)<textarea name="Question.qtext" id="Question_qtext">@Model.Question.qtext</textarea></div></div>
<div class="line line-dashed line-lg pull-in"></div><div class="form-group"><label class="col-sm-4 col-md-2 control-label">해설(시험전용)</label><div class="col-sm-8 col-md-10"><textarea name="Question.qdesc" id="Question_qdesc">@Model.Question.qdesc</textarea></div></div>
<div class="line line-dashed line-lg pull-in atype1box hideatype2"></div><div class="form-group atype1box hideatype2">
<label class="col-sm-4 col-md-2 control-label">정답설정</label><div class="col-sm-8 col-md-10">
<label><input type="checkbox" id="ispassspace" name="Question.ispassspace" value="@(Model.Question.ispassspace)" @(Model.Question.ispassspace == 1 ? "checked" : "") /> 공백문자(Space)허용</label>&nbsp;&nbsp;
<label><input type="checkbox" id="isignorecase" name="Question.isignorecase" value="@(Model.Question.isignorecase)" @(Model.Question.isignorecase == 1 ? "checked" : "") /> 대/소문자 구별안함</label>
</div>
</div>
<div id="qtypebox">
@for (int i = 0; i < 10; i++)
{
var qi = Model.Question.qno < 1 || Model.Question.atype == 2 ? new NP.Model.QuestionItem() { } : Model.Question.QIs[i];
<div class="qibox" data-idx="@(i+1)">
<div class="line line-dashed line-lg pull-in"></div>
<div class="form-group">
<input type="hidden" class="qino" name="qino@(i+1)" value="@qi.qino" />
<label class="col-sm-4 col-md-2 control-label"><label class="lblitem">보기@(i + 1)</label>&nbsp;<input type="checkbox" name="chkqi@(i+1)" value="1" class="chkqi" id="chkqi@(i + 1)" @(qi.isright == 1 ? "checked" : "") /><label class="forcheckbox" for="chkqi@(i+1)">정답</label>&nbsp;<a href="#" class="btn btn-xs btn-danger" onclick="javascript: deleteItem(@(qi.qino), this);" style="@(Model.intval3 > 0 ? "display: none;":"")">삭제</a></label>
<div class="col-sm-8 col-md-10">
<div class="ie10">
@Html.Partial("./Partial/File", Model.FileList.Where(w=>w.fgno == qi.fgno).ToList(), new ViewDataDictionary {
{ "name", "qifile" + (i + 1) },{"value", qi.fgno },{ "fname", "file" + (i + 1)},
{"width", null },{"table", "questionitem" },{ "column", "fgno"},{"filecount", 1 },
{"readmode", 0 },{"hidemode", 0 },
{ "isimage", 1 },{ "imageid", "img" + (i + 1) },{ "dftsrc", "/img/common/profile_sample.jpg" },
{ "fileext", "" }, { "loginfo",qi.qino+"|9"}
})
<img id="img@(i+1)" src="@(Model.FileList.Where(w=>w.fgno == qi.fgno).Count() > 0 && !string.IsNullOrEmpty(Model.FileList.Where(w=>w.fgno == qi.fgno).First().fileurl) ? string.Format("{0}{1}", Model.Files, Model.FileList.Where(w=>w.fgno == qi.fgno).First().fileurl) : "/img/common/profile_sample.jpg")" class="qiimg" />
</div>
@Html.TextArea("qitext" + (i + 1), qi.qitext, new { @style = "resize: none; width: 100%; padding: 5px; height: 70px;", @placeholder = "보기내용", @class = "viewitemtext" })
@Html.TextBox("qitext2" + (i + 1), qi.qitext, new { @class = "viewitemtext2 form-control" })
</div>
</div>
</div>
if ((Model.Question.qno < 1 && i == 1) || (Model.Question.qno > 0 && i == Model.Question.QIs.Count() - 1))
{
break;
}
}
</div>
<div class="form-group hideatype2" id="divguid"><label class="col-sm-4 col-md-2 control-label">&nbsp</label><div class="col-sm-8 col-md-10 hideatype2">※ 여러 개의 답안을 입력하시면, 그중 하나라도 맞을 경우 정답으로 인정됩니다.<br />※ 답안을 입력하지 않아도 가능하나, 전부 수동으로 채점하셔야 합니다.</div></div>
</div>
</section>
<div class="form-group" style="font-weight: bold; @(Model.intval3 > 0 ? "" : "display: none;")">
<div class="col-sm-4 col-md-2 text-right">&nbsp;</div>
<div class="col-sm-8 col-md-10" style="background-color: black; color: yellow; padding-top: 5px; height: 30px;">
*이미 출제된 문제입니다. 문제/해설/보기내용/정답 데이터만 저장됩니다.
</div>
</div>
<input type="hidden" name="Question.qno" id="datakey" value="@Model.Question.qno" />
<input type="hidden" name="QuestionItem.qino" id="qino" />
<input type="hidden" name="savedata" id="sdata" />
@Html.HiddenFor(m => m.issaveimage)
@Html.HiddenFor(m => m.Question.qdiff)
@Html.HiddenFor(m => m.Question.cc1)
@Html.HiddenFor(m => m.Question.cc2)
@Html.HiddenFor(m => m.Question.cc3)
@Html.HiddenFor(m => m.Question.cc4)
@Html.HiddenFor(m => m.Question.cc5)
@Html.Partial("./Partial/DForm", Model)
</form>
<form id="dform" method="post" action="/cm/qs">
@Html.Partial("./Partial/DForm", Model, new ViewDataDictionary { { "preform", 1 } })
</form>
<iframe id="ifr01" name="ifr01" style="display: none;"></iframe>
<iframe id="ifr02" name="ifr02" style="display: none;"></iframe>
<form id="fileform" method="post" action="/ZAXCommon/UploadFiles2" target="ifr02" enctype="multipart/form-data"></form>
</div>
<div class="botfixempty">&nbsp;</div>
<div class="botfix islayer">
<div class="col-sm-4 text-right">
<a id="btnaddicon" href="#" class="btn btn-default" onclick="add();">@(Model.Question.atype == 0 ? "보기" : "답안")추가</a>
</div>
<div class="col-sm-2">&nbsp;</div>
<div class="col-sm-6 text-left">
<a href="#" class="btn btn-primary" onclick="save(0);">저장</a>
<a href="#" class="btn btn-primary" onclick="save(1);" id="savennew">저장 후 신규추가</a>
<a href="#" class="btn btn-default" onclick="gotab(2);">목록</a>
@if (Model.Question.qno > 0)
{
<a style="margin-left: 100px;" href="#" class="btn btn-default" onclick="viewquestion(@Model.Question.qno);">미리보기</a>
}
</div>
</div>
@section styles{
@Html.Partial("./Partial/SummerNoteStyle")
<style type="text/css">
input[type=radio], input[type=checkbox] {
width: 18px;
height: 18px;
vertical-align: sub;
}
.qiimg {
max-width: 100%;
max-height: 50px;
border-radius: 5px;
margin-bottom: 5px;
}
.qibox {
padding: 10px 0;
}
</style>
}
@section scriptsHeader{
@*@Html.Partial("./Partial/ScriptEditor")*@
@*@Html.Partial("./Partial/ScriptFile")*@
@Html.Partial("./Partial/FileScript")
@Html.Partial("./Partial/SummerNote")
}
@section scripts{
<script>
function setQItems() {
$("#divguid").hide();
$("#btnaddicon").text("보기추가");
$(".chkqi, .forcheckbox, #btnaddicon,.hideatype2,#qtypebox").show();
if (_isMulti) {
$.each($(".qibox"), function (i, e) {
$(e).find(".lblitem").text($(e).find(".lblitem").text().replace("정답", "보기"));
if (!isie9) {
$(e).find(".ie10").show();
}
else {
$(".ie9").show();
}
$(e).find(".viewitemtext").show();$(e).find(".viewitemtext2").hide();
});
}
else if (getrv("atype") == "1") {
$("#divguid").show();
$("#btnaddicon").text("답안추가");
$.each($(".qibox"), function (i, e) {
$(e).find(".lblitem").text($(e).find(".lblitem").text().replace("보기", "정답"));
$(e).find("input[type=checkbox], label.forcheckbox, .ie10").hide();
$(e).find(".viewitemtext").hide(); $(e).find(".viewitemtext2").show();
});
}
else if (getrv("atype") == "2") {
$("#divguid").show();
$("#btnaddicon,#qtypebox").hide();
$(".hideatype2").hide();
}
}
var isie9 = false;
$(window).on("load", function () {
if (navigator.appName.indexOf("Internet Explorer") != -1) { //yeah, he's using IE
isie9 = navigator.appVersion.indexOf("MSIE 9") > -1;
}
if (isie9) {
$(".ie10").remove();
$("#savennew").hide();
}
else {
$(".ie9").remove();
}
this.document.getElementById("mform").onsubmit = function () {
if (isie9) {
document.getElementById("mform").target = "ifr01";
}
}
this.document.getElementById("ifr01").onload = function () {
//alert($("#ifr01").html());
golist();
}
this.document.getElementById("ifr02").onload = function () {
//capp("/ZAXCommon/getmyimage", null, "cbmyimage");
msg("크롬 또는 Internet Explore 10 브라우저를 이용해주세요.");
}
});
function cbmyimage() {
if (capResult.code == 1000) {
$(_uploadeditorimageitem).summernote('editor.insertImage', capResult.Obj);
}
}
function ifrresult(r) {
alert(r);
}
$(document).ready(function () {
$('#Question_qdesc, #Question_qtext').summernote({
height: 100,
tabsize: 2,
callbacks: {
onImageUpload: function (files, editor, welEditable) {
if (!isie9) {
var fdata = new FormData();
fdata.append('img', files[0]);
fdata.append('fd', "Editor");
uploadeditorimage(files, this, fdata, "cbeditorupload()");
} else {
msg("크롬 또는 Internet Explore 10 브라우저를 이용해주세요.");
//$("#fileform input").remove();
////var f = $(files).clone();
//$(files).parent().append("<input name=\"files\" class=\"note-image-input note-form-control note-input\" type=\"file\" accept=\"image/*\">");
//_uploadeditorimageitem = this;
//$("#fileform").html(files);
//$("#fileform").submit();
}
}
}
});
setQItems();
$.each($(".radiobox input:checked"), function (i, r) {
$(r).parent().css("color", "red");
});
$(".radiobox span").css("display", "inline-block");
$("input[name='atype']").on("change", function () {
$(".atype1box").hide();
_isMulti = true;
if ($(this).val() != '0') {
_isMulti = false;
$(".atype1box").show();
}
setQItems();
});
if ('@Model.Question.atype' == '0') {
$(".atype1box").hide();
}
});
var saveandnew = false;
var imgids = [];
var _qidel;
var _isMulti = "@Model.Question.atype" == "0";
function save(new01) {
saveandnew = new01 == 1;
//editorSubmit();
var isInputA = false;
if (!_isMulti) {
$.each($(".viewitemtext2"), function (i, e) {
if (getBytes($(e).val()) > 0) {
isInputA = true; return false;
}
});
}
var cdata = $('#Question_qtext').summernote('code');
cdata = cdata == "<p><br></p>" ? "" : cdata;
$("#Question_qtext").val(cdata);
var qts = $.trim($("#Question_qtext").summernote("code").replace(/<\/p>/gi, "")).replace(/<br\/?>/gi, "").replace(/<\/?[^>]+(>|$)/g, "");
$("#Question_qtextstring").val(qts == "" ? "이미지" : qts);
if (getBytes(val("Question_qtext")) < 1) { $("#Question_dpoint")[0].scrollIntoView(); $('#Question_qtext').summernote('focus'); alert("문제를 입력하세요."); }
else if (val("Question_atype") == '0' && $("div.qibox input[type=checkbox]:checked").length < 1) { msg("정답을 선택하세요."); }
else if (val("Question_atype") == '1' && !isInputA) { msg("답안을 입력하세요."); }
else {
var isValid = true;
if ('0' == val("Question_atype")) {
$.each($("div.qibox"), function (i, r) {
if ($(r).find("input.file_input_opacity").val() == "" && getBytes($(r).find("textarea.viewitemtext").val()) < 1 && $(r).find(".filelist a").length < 1) {
isValid = false;
$(r).find("textarea.viewitemtext").focus();
msg((i + 1) + "번 보기의 파일이나 내용을 입력하세요.");
return false;
}
});
}
if (isValid && confirm('@(Model.Question.qno)' == '0' ? "저장하시겠습니까?" : "수정하시겠습니까?")) {
if (!isie9) {
$("#ispassspace").val($("#ispassspace").prop("checked") ? 1 : 0);
$("#isignorecase").val($("#isignorecase").prop("checked") ? 1 : 0);
if (getrv("atype") != "2") {
var sdata = "";
//$.each($("div.qibox"), function (i, r) {
// sdata += ";" + $(r).find("input.qino").val() + ":" + $(r).find("input.file").attr("data-fgno") + ":" + (_isMulti ? $(r).find("input[type=checkbox]:checked").length : 1) + ":"
// + (_isMulti ? $.trim($(r).find("textarea.viewitemtext").val()).replace(/:/gi, '').replace(/;/, '') : $.trim($(r).find("input.viewitemtext2").val()).replace(/:/gi, '').replace(/;/, ''));
//});
$.each($("div.qibox"), function (i, r) {
sdata += "," + $(r).attr("data-idx");
});
$("#sdata").val(sdata.substr(1));
}
//cap("/acommon/questionsave", "mform", "cbsave");
capfileform("/acommon/questionsave", "mform", "cbsave");
}
else {
msg("크롬 또는 Internet Explore 10 브라우저를 이용해주세요.");
}
}
}
}
var ie9imgcount = 0;
function add() {
var vid = $("div.qibox").length + 1;
if (vid > 10) {
msg("10개까지 추가할 수 있습니다.");
}
else {
var newidx = getint($("#qtypebox .qibox").last().attr("data-idx")) + 1;
$("#qtypebox .qibox").last().clone().appendTo("#qtypebox");
var qi = $("#qtypebox .qibox").last();
qi.attr("data-idx", newidx);
qi.find("input.qino").attr("name", "qino" + newidx).val(0);
qi.find(".lblitem").text((getrv("atype") == "0" ? "보기" : "정답") + $("#qtypebox .qibox").length);
qi.find("input.chkqi").attr("name", "chkqi" + newidx).attr("id", "chkqi" + newidx).prop("checked", false);
qi.find("label.forcheckbox").attr("for", "chkqi" + newidx);
qi.find(".fgbox").attr("data-imageid", "img" + newidx);
qi.find(".fgno").attr("name", "qifile" + newidx).val("");
qi.find(".filelist").html("");
qi.find(".file_search_area").show();
qi.find(".file_input_textbox").val("");
qi.find(".file_input_opacity").attr("name", "file" + newidx).val("");
qi.find("img.qiimg").attr("id", "img" + newidx).attr("src", "/img/common/profile_sample.jpg");
qi.find("textarea.viewitemtext").attr("id", "qitext" + newidx).attr("name", "qitext" + newidx).val("");
qi.find("input.viewitemtext2").attr("id", "qitext2" + newidx).attr("name", "qitext2" + newidx).val("");
setQItems();
}
}
function deleteItem(qino, a) {
var atype = getint(getrv("atype"));
if (_isMulti && $("div.qibox").length < 3) {
msg("객관식문제는 최소 2개의 보기가 필요합니다. 삭제할 수 없습니다.");
}
else if (!_isMulti && atype == 1 && $("div.qibox").length < 2) {
msg("단답형문제의 답은 최소 1개가 필요합니다. 삭제할 수 없습니다.");
}
else {
if (qino > 0) {
if (confirm(_isMulti && $(a).closest("div.qibox").find("input[type=checkbox]:checked").length > 0 && $("div#qtypebox input[type=checkbox]:checked").length == 1 ? "다른 보기에 정답을 체크한 후 저장해야합니다.\n보기를 정말 삭제하시겠습니까?" : "정말 삭제하시겠습니까?")) {
$("#qino").val(qino);
_qidel = a;
capp("/acommon/deletequestionitem", {qino: qino}, "cbqidel");
}
}
else {
$(a).closest("div.qibox").remove();
}
}
$.each($("#qtypebox .qibox"), function (i, b) {
$(b).find(".lblitem").text((atype == 0 ? "보기":"정답")+(i+1));
});
}
function cbqidel() {
if (capOK) {
$(_qidel).closest("div.qibox").remove();
}
else {
msg("이미 응시기록이 있는 데이터는 삭제할 수 없습니다.");
}
}
function cbsave() {
if (capOK) {
if (saveandnew) {
$("#intval, #Question_qno").val(0);
}
else if ('@(Model.Question.qno)' == '0') {
$("#intval").val(capResult.obj);
}
$("#Question_qtext, #Question_qdesc").val("");
timesubmit("mform",10);
}
else {
msg("문제등록 중 올바르지 않는 데이터로 반영되지 않았습니다. 시스템관리자에게 문의해주세요.");
clearFile();
//timesubmit();
}
}
function cbdel() {
if (capOK) {
$("#dform").submit();
}
}
@*function viewquestion(qno) {
window.open('@(ViewBag.Front)/Account/ViewQuestion?QNo=' + qno, 'viewquestion', 'width=' + (screen.width - 200) + ', height=' + (screen.height - 200));
}*@
var _qno;
var _dtype = 2;
function viewquestion(qno) {
_qno = qno;
capp("/acommon/setauthkey", { dtype: _dtype, intval: _qno }, "cbauth");
}
function cbauth() {
if (capResult.code == 1000) {
var pop = window.open("@(ViewBag.Front)/Open/ViewQuestion?authtype=" + _dtype +"&authkey=" + capResult.obj + "&qno=" + _qno, 'viewquestion', 'width=' + (screen.width - 200) + ', height=' + (screen.height - 200));
if (pop == null) {
msg("팝업이 차단되어 있습니다. 차단을 해제해 주세요.");
}
}
}
function gotab(idx, t) {
bglayer();
t = t || 0;
setTimeout(function () {
if (idx == 0) { location.href = "/cm/cc"; }
else if (idx == 1) { location.href = "/cm/cts"; }
else if (idx == 2) { location.href = "/cm/qs"; }
else if (idx == 3) { location.href = "/cm/rs"; }
}, t);
}
</script>
}