/** * * DWSurvey 3.0 中关于问卷设计Javascript * * @desc: design survey * @author: keyuan(@keyuan, keyuan258@gmail.com) * @github: https://github.com/wkeyuan/DWSurvey * * Copyright 2012, 2017 调问问卷(DWSurvey,http://dwsurvey.net) * */ //判断浏览窗口大小 var browseWidth=$(window).width(); var browseHeight=$(window).height(); var ctx=""; var questionBelongId=""; var svTag=2;//表示题目是问卷题还是题库中题 //题目保存后回调时机比较参数 var quCBNum=0;//比较值1 var quCBNum2=0;//比较值2 var curEditObj=null; var curEditObjOldHtml=""; var dwDialogObj=null; var ueEditObj=null;//UE编辑器,关联的编辑对象 var isDrag=false; var appQuObj=null; var myeditor=null; var ueDialog=null; var isSaveProgress=false; $(document).ready(function(){ ctx=$("#ctx").val(); questionBelongId=$("#id").val(); browseWidth=$(window).width(); resizeWrapSize(); //窗口大小发生改变时 $(window).resize(function(){ browseWidth=$(window).width(); resizeWrapSize(); //修正当前编辑的浮动编辑区位置 if(curEditObj!=null){ var editOffset=$(curEditObj).offset(); $("#dwCommonEditRoot").show(); $("#dwCommonEditRoot").offset({top:editOffset.top,left:editOffset.left}); } if(dwDialogObj!=null){ setShowDialogOffset(dwDialogObj); } }); ueDialog=$( "#dialog" ).dialog({ width:680, /*height:450,*/ autoOpen: false, modal:true, position:["center","top"], title:"高级编辑器", show: {effect:"blind",direction:"up",duration: 500}, hide: {effect:"blind",direction:"left",duration: 200, open:function(event,ui){ } } }); //实例化一个不带ui的编辑器,注意此处的实例化对象是baidu.editor下的Editor,而非baidu.editor.ui下的Editor //ueeditor myeditor = UE.getEditor("dialogUeditor",{ //toolbars:[[]], initialContent: "",//初始化编辑器的内容 elementPathEnabled:false, wordCount:false, autosave:false, //下面注释参数不要随便调,在滚动时效果更好 //enableAutoSave:false, //autoHeightEnabled:false, //topOffset:60, //imagePopup:true, initialFrameWidth : 680, initialFrameHeight : 300 }); //窗口滚动条发生scroll时 $(window).scroll( function() { var scrollTop=$(window).scrollTop(); var quDesignDialog=$("#tools_wrap"); var headerHeight=55; var quDesignHeight=125; if(scrollTop>=headerHeight){ quDesignDialog.css({ top: "0px"}); }else{ quDesignDialog.css({ top: (headerHeight-scrollTop)+"px"}); } var dwBodyLeft=$("#dw_body_left"); var dwBodyRight=$("#dw_body_right"); if(scrollTop>=headerHeight){ dwBodyLeft.css({top:"136px"}); dwBodyRight.css({top:"136px"}); }else{ dwBodyLeft.css({ top: (headerHeight+quDesignHeight+10-scrollTop)+"px"}); dwBodyRight.css({ top: (headerHeight+quDesignHeight+10-scrollTop)+"px"}); } if(scrollTop>=headerHeight && scrollTop<=100){ //console.debug("(135+(30-(100-scrollTop)))+px:"+(135+(30-(100-scrollTop)))+"px,scrollTop"+scrollTop); $("#dw_body").css({"margin-top":(135+((100-headerHeight)-(100-scrollTop)))+"px"}); }else{ $("#dw_body").css({"margin-top":"135px"}); } //修正当前编辑的浮动编辑区位置 if(curEditObj!=null){ var editOffset=$(curEditObj).offset(); $("#dwCommonEditRoot").show(); $("#dwCommonEditRoot").offset({top:editOffset.top,left:editOffset.left}); } if(dwDialogObj!=null){ setShowDialogOffset(dwDialogObj); } //ueDialog.dialog( "option",{position:["center","top"]} ); } ); //定时保存逻辑 三分钟检查一次 function intervalSaveSurvey(){ var saveTag=$("#dwSurveyQuContentAppUl input[name='saveTag'][value='0']"); var nmSaveTag=$("#dw_body_content input[name='svyNmSaveTag'][value='0']"); var noteSaveTag=$("#dw_body_content input[name='svyNoteSaveTag'][value='0']"); //curEditObj!=null dwDialogObj if(!isSaveProgress && ( saveTag[0] || nmSaveTag[0] || noteSaveTag[0]) && !isDrag && curEditObj==null && dwDialogObj==null){ notify("自动保存中...",5000); saveSurvey(function(){ isSaveProgress=false; notify("自动保存成功",1000); }); } } var intervalSave=setInterval(intervalSaveSurvey, 5000); //window.clearInterval(intervalSave); var isSort=false; //拖入题目到问卷中 $( ".dragQuUl li" ).draggable({ connectToSortable: "#dwSurveyQuContentAppUl", zIndex:27000, cursor: "move",cursorAt:{left: 40, top: 25}, scroll: true , scrollSensitivity: 30, scrollSpeed: 30, appendTo: "#dw_body_content", helper: function(event){ return $(this).find(".dwQuTypeModel").html(); }, start: function(event, ui) { isDrag=true; //$("#tools_wrap").fadeTo("slow", 0.6); $("#tools_wrap").css({"zIndex":30}); /* var scrollTop=$(window).scrollTop(); if(scrollTop>=70){ $("#tools_wrap").hide("slide",{direction:"up"},300,function(){ $("#tools_wrap").css({"zIndex":30}); }).show("slide",{direction:"up"},500); }else{ $("#tools_wrap").css({"zIndex":30}); } */ resetQuItemHover(null); //$("#tools_wrap").hide(); //console.debug($(this).attr("class")+":"+$(this).css("zIndex")); dwCommonDialogHide(); curEditCallback(); }, drag: function(event, ui) { //console.debug( $( "#designQutypes li" ).draggable('option', 'zIndex')); //console.debug($(ui.helper).css("zIndex")+$(ui.helper).css("position")); isDrag=true; }, stop: function(event, ui) { //$("#tools_wrap").fadeTo("slow", 0.6).fadeTo("slow", 1); //$("#tools_wrap").css({"zIndex":200}); if(!isSort){ $("#tools_wrap").animate({zIndex: 200}, 200 ,function(){ //$("#tools_wrap").css({"zIndex":200}); resetQuItem(); bindQuHoverItem(); }); } /*var scrollTop=$(window).scrollTop(); if(scrollTop>=70){ $("#tools_wrap").hide("slide",{direction:"up"},100,function(){ $("#tools_wrap").css({"zIndex":200}); }).show("slide",{direction:"up"},800); }else{ $("#tools_wrap").css({"zIndex":200}); }*/ if(false){ isDrag=false; //alert(this); //判断加入----根据initLine显示状态来判断是否加入进去 if(appQuObj!=null){ //$("#defaultAppQuObj").before($(this).find(".quTypeModel").html()); $(appQuObj).before($(this).find(".dwQuTypeModel").html()); $(appQuObj).prev().hide(); $(appQuObj).prev().removeClass("quDragBody"); $(appQuObj).prev().show("slow"); //更新orderById /* var orderById=$(appQuObj).find("input[name='orderById']").val(); //$(".initLine").hide(); //执行题目-保存 $(appQuObj).prev().find("input[name='orderById']").val(orderById); saveQu($(appQuObj).prev()); //修改数据 quItem*/ resetQuItem(); bindQuHoverItem(); } } } }); $( "#dwSurveyQuContentAppUl" ).sortable({ revert: true, delay:800, placeholder:"showLine", tolerance:"pointer", opacity :0.7, //helper : "clone", handle : ".dwQuMove", scrollSensitivity: 30, scrollSpeed: 30, start: function(event,ui){ //$("#tools_wrap").fadeTo("slow", 0.6); $("#tools_wrap").css({"zIndex":30}); $(".showLine").height(ui.item.height()); dwCommonDialogHide(); curEditCallback(); isSort=true; }, sort: function(event,ui){ isSort=true; $(".ui-sortable-placeholder").css({"background":"red"}); }, receive:function(event,ui){ //当一个已连接的sortable对象接收到另一个sortable对象的元素后触发此事件。 }, out:function(event,ui){ //当一个元素拖拽移出sortable对象移出并进入另一个sortable对象后触发此事件。 isSort=false; }, update: function( event, ui ) { if(!isDrag){ //根据排序ID,计算出是前排序,还是后排序 //ui.item.find("input[name='saveTag']").val(0); //$(this).find("input[name='saveTag']").val(0); $("#dwSurveyQuContentAppUl input[name='saveTag']").val(0); } }, stop: function(event,ui){ //console.debug("sort isDrag:"+isDrag+",isSort:"+isSort); if(isDrag){ isDrag=false; isSort=false; ui.item.html(ui.item.find(".dwQuTypeModel").html()); ui.item.removeClass("ui-draggable"); ui.item.find(".quDragBody").removeClass("quDragBody"); //新加入题-选定题目标题 ui.item.find(".surveyQuItemBody").addClass("hover"); ui.item.addClass("li_surveyQuItemBody"); var quType=ui.item.find(".surveyQuItemBody input[name='quType']").val(); if(quType!="PAGETAG"){ editAble(ui.item.find(".surveyQuItemBody .quCoTitleEdit")); } //判断是否会初头部工具条盖住 //var curItemBodyOffset=ui.item.offset(); //alert(curItemBodyOffset.top); //$(document).scrollTop(curItemBodyOffset.top-370); //$(document).animate({scrollTop:curItemBodyOffset.top-370}, 800); //$("body").animate({scrollTop:curItemBodyOffset.top-370}, 800); } var curItemBodyOffset=ui.item.offset(); $("html,body").animate({scrollTop:curItemBodyOffset.top-370}, 500,function(){ $("#tools_wrap").css({"zIndex":200}); resetQuItem(); bindQuHoverItem(); }); /* //之前的实现 $("#tools_wrap").css({"zIndex":200}); //$("#tools_wrap").animate({zIndex: 200}, 1000 ); //$("#tools_wrap").fadeTo("slow", 0.6).fadeTo("slow", 1); resetQuItem(); bindQuHoverItem();*/ } }); /* $("#dwSurveyTitle").keydown(function(event){ if(event.keyCode==13){ return false; } }); */ /*$(".tools_tabs_left ul li").hover(function(){ var curId=$(this).attr("id"); var tabId=curId.replace("_li",""); $(".tools_tab_div").hide(); $("#"+tabId).show(); $(".tools_tabs_left ul li").removeClass("current"); $(this).addClass("current"); },function(){});*/ var isDialogClick=false; $(document).click(function(){ curEditCallback(); if(!isDialogClick){ dwCommonDialogHide(); resetQuItemHover(null); } isDialogClick=false; }); $("#dwCommonEditRoot").unbind(); $("#dwCommonEditRoot").click(function(){ return false; }); $("#dwCommonDialog").click(function(){ isDialogClick=true; }); $( "#modelUIDialog" ).click(function(){ isDialogClick=true; }); $( "#modelUIDialog" ).dialog({ title: "选项设置", height: 260, width: 550, modal: true, autoOpen: false }); $(".tools_tabs_left ul li").click(function(){ var curId=$(this).attr("id"); var tabId=curId.replace("_li",""); $(".tools_tab_div").hide(); $("#"+tabId).show(); $(".tools_tabs_left ul li").removeClass("current"); $(this).addClass("current"); }); //绑定变动 bindQuHoverItem(); //问卷设置,收集规则什么的 $("#surveyAttrSetToolbar").click(function(){ showUIDialog($(this)); /*$(".tabbarDialog").offset({top:$(this).offset().top+60}); $(".tabbarDialog").show(); $(this).addClass("hover");*/ return false; }); $("#logicToolbar").click(function(){ showUIDialog($(this)); return false; }); //绑定设置关联联系人属性设置 $("input[name='setAutoContacts']").change(function(){ var check=$(this).prop("checked"); if(check){ $(".contactsFieldLi").show(); }else{ $(".contactsFieldLi").hide(); } }); //切换设置题目时,选项排列个数 option_range $(".option_range").change(function(){ var selVal=$(this).val(); $(this).next().hide(); if(selVal==3){ $(this).next().show(); validateGen(); } }); //逻辑设置时添加逻辑项 $(".dwQuDialogAddLogic").click(function(){ addQuDialogLogicTr(true,function(){},function(){alert("此题已经设置了任意选项!");}); return false; }); //保存逻辑设置 $("#dwDialogSaveLogic").click(function(){ var quItemBody=$(dwDialogObj).parents(".surveyQuItemBody"); var quLogicInputCase=quItemBody.find(".quLogicInputCase"); var quType=quItemBody.find("input[name='quType']").val(); var dwQuLogicTrs=$("#dwQuLogicTable tr"); var quLogicItemHtml=$("#quLogicItemModel").html(); $.each(dwQuLogicTrs,function(){ var cgQuItemId=$(this).find(".logicQuOptionSel").val(); var skQuId=$(this).find(".logicQuSel").val(); var logicType=$(this).find(".logicType").val(); var quLogicItemClass=$(this).attr("class"); //判断已经保存过的,保存过的只做修改 if(skQuId!="" && cgQuItemId!=""){ var quLogicItem=quLogicInputCase.find("."+quLogicItemClass); if(quLogicItem[0]){ //已经有值--检查值是否有发生变化 var oldSkQuId=quLogicItem.find("input[name='skQuId']").val(); var oldCgQuItemId=quLogicItem.find("input[name='cgQuItemId']").val(); var oldLogicType=quLogicItem.find("input[name='logicType']").val(); if(oldSkQuId!=skQuId || cgQuItemId!=oldCgQuItemId || oldLogicType!=logicType){ quLogicItem.find("input[name='logicSaveTag']").val("0"); quItemBody.find("input[name='saveTag']").val("0"); //后来修复的 quLogicItem.find("input[name='skQuId']").val(skQuId); quLogicItem.find("input[name='cgQuItemId']").val(cgQuItemId); quLogicItem.find("input[name='logicType']").val(logicType); } //如果是评分题 if(quType==="SCORE"){ //geLe scoreNum //logicScoreGtLt logicScoreNum logicEvent var logicScoreGtLt=$(this).find(".logicScoreGtLt").val(); var logicScoreNum=$(this).find(".logicScoreNum").val(); // var logicEvent=$(this).find(".logicEvent").val(); quLogicItem.find("input[name='geLe']").val(logicScoreGtLt); quLogicItem.find("input[name='scoreNum']").val(logicScoreNum); quLogicItem.find("input[name='logicType']").val(logicType); // quLogicItem.find("input[name='logicEvent']").val(logicEvent); //状态 quLogicItem.find("input[name='logicSaveTag']").val("0"); quItemBody.find("input[name='saveTag']").val("0"); } }else{ quLogicInputCase.append(quLogicItemHtml); quLogicItem=quLogicInputCase.find(".quLogicItem").last(); quLogicItem.addClass(quLogicItemClass); //修改值 quLogicItem.find("input[name='quLogicId']").val(""); quLogicItem.find("input[name='skQuId']").val(skQuId); quLogicItem.find("input[name='cgQuItemId']").val(cgQuItemId); quLogicItem.find("input[name='visibility']").val("1"); quLogicItem.find("input[name='logicType']").val(logicType); quItemBody.find("input[name='saveTag']").val("0"); //如果是评分题 if(quType==="SCORE"){ //geLe scoreNum //logicScoreGtLt logicScoreNum logicEvent var logicScoreGtLt=$(this).find(".logicScoreGtLt").val(); var logicScoreNum=$(this).find(".logicScoreNum").val(); // var logicEvent=$(this).find(".logicEvent").val(); quLogicItem.find("input[name='geLe']").val(logicScoreGtLt); quLogicItem.find("input[name='scoreNum']").val(logicScoreNum); quLogicItem.find("input[name='logicType']").val(logicType); // quLogicItem.find("input[name='logicEvent']").val(logicEvent); } } } }); refreshQuLogicInfo(quItemBody); dwCommonDialogHide(); return false; }); //批量添加弹出窗口-保存事件 $("#dwDialogSaveMoreItem").click(function(){ var quItemBody=$(dwDialogObj).parents(".surveyQuItemBody"); var quType=quItemBody.find("input[name='quType']").val(); var areaVal=$("#dwQuMoreTextarea").val(); var areaValSplits=areaVal.split("\n"); $.each(areaValSplits,function(i,item){ item=$.trim(item); if(item!=""){ if(quType=="RADIO"){ //添加单选选项 addRadioItem(quItemBody,item); }else if(quType=="CHECKBOX"){ //添加多选选项 addCheckboxItem(quItemBody,item); }else if(quType=="SCORE"){ addScoreItem(quItemBody,item); }else if(quType=="ORDERQU"){ addOrderquItem(quItemBody, item); }else if(quType=="MULTIFILLBLANK"){ addMultiFillblankItem(quItemBody, item); }else if(quType=="CHENRADIO" || quType=="CHENCHECKBOX" || quType=="CHENFBK" || quType=="CHENSCORE"){ addChenItem(dwDialogObj,quItemBody, item); } } }); $("#dwQuMoreTextarea").val(""); bindQuHoverItem(); dwCommonDialogHide(); }); //高级编辑器OK事件 $("#dwDialogUeOk").click(function(){ var myeditorContent=myeditor.getContent(); curEditObj=ueEditObj; setCurEditContent(myeditorContent); curEditCallback(); ueDialog.dialog("close"); ueEditObj=null; curEditObj=null; return false; }); //设置窗口保存事件 $("#dwDialogQuSetSave").click(function(){ if(dwDialogObj!=null){ var quItemBody=$(dwDialogObj).parents(".surveyQuItemBody"); //var quType=quItemBody.find("input[name='quType']").val(); var setIsRequired=$("#dwCommonDialog input[name='setIsRequired']:checked"); var setRandOrder=$("#dwCommonDialog input[name='setRandOrder']:checked"); var setHv=$("#dwCommonDialog select[name='setHv']").val(); var setCellCount=$("#dwCommonDialog input[name='setCellCount']").val(); var setAutoContacts=$("#dwCommonDialog input[name='setAutoContacts']:checked"); var setContactsField=$("#dwCommonDialog select[name='setContactsField']").val(); var oldHv=quItemBody.find("input[name='hv']").val(); var oldCellCount=quItemBody.find("input[name='cellCount']").val(); //alert(set_isRequired+":"+set_randOrder+":"+set_hv); quItemBody.find("input[name='isRequired']").val(setIsRequired[0]?1:0); quItemBody.find("input[name='hv']").val(setHv); quItemBody.find("input[name='randOrder']").val(setRandOrder[0]?1:0); quItemBody.find("input[name='cellCount']").val(setCellCount); quItemBody.find("input[name='saveTag']").val(0); var quType=quItemBody.find("input[name='quType']").val(); if(quType=="RADIO" || quType=="CHECKBOX" || quType=="FILLBLANK"){ quItemBody.find("input[name='contactsAttr']").val(setAutoContacts[0]?1:0); quItemBody.find("input[name='contactsField']").val(setContactsField); }else if(quType=="SCORE"){ /*var paramInt01=$("#dwCommonDialog .scoreMinMax .minScore"); if(paramInt01[0]){ quItemBody.find("input[name='paramInt01']").val(paramInt01.val()); }*/ quItemBody.find("input[name='paramInt01']").val(1); var paramInt02=$("#dwCommonDialog .scoreMinMax .maxScore"); if(paramInt02[0]){ quItemBody.find("input[name='paramInt02']").val(paramInt02.val()); } //根据分数设置评分选项 var paramInt01Val=1; var paramInt02Val=paramInt02.val(); var scoreNumTableTr=quItemBody.find(".scoreNumTable tr"); $.each(scoreNumTableTr,function(){ $(this).empty(); for(var i=paramInt01Val;i<=paramInt02Val;i++){ $(this).append(""+i+""); } }); }else if(quType==="MULTIFILLBLANK"){ var paramInt01=$("#dwCommonDialog .minMaxLi .minNum"); if(paramInt01[0]){ quItemBody.find("input[name='paramInt01']").val(paramInt01.val()); } quItemBody.find("input[name='paramInt02']").val(10); } var selVal=$(".option_range").val(); if(selVal==1){ //横排 transverse if(oldHv==3){ quTableOptoin2Li(quItemBody); } quItemBody.find(".quCoItem ul").addClass("transverse"); }else if(selVal==2){ if(oldHv==3){ quTableOptoin2Li(quItemBody); }else{ //竖排 quItemBody.find(".quCoItem ul").removeClass("transverse"); quItemBody.find(".quCoItem ul li").width(""); } }else if(selVal==3){ if(!$("#dwCommonDialogForm").valid()){ notify("参数不对,请检查!",800); return false; } if(oldHv==3){ if(oldCellCount!=setCellCount){ quTableOption2Table(quItemBody); } }else{ quLiOption2Table(quItemBody); } } } dwCommonDialogHide(); return false; }); //保存设置规则属性 $("#dwDialogSurveyAttrSave").click(function(){ //调用保存事件 $("input[name='svyAttrSaveTag']").val(0); notify("保存中...",5000); saveSurvey(function(){ isSaveProgress=false; notify("保存成功",1000); }); //关闭窗口 $("#modelUIDialog").dialog("close"); dwCommonDialogHide(); /*var url=""; var data=""; $.ajax({ url:url, data:data, type:"post", success:function(msg){ alert(msg); } });*/ return false; }); //选项设置-保存事件 $("#dwDialogQuOptionSetSave").click(function(){ var quItemBody=$(dwDialogObj).parents(".surveyQuItemBody"); var quOptionParent=$(dwDialogObj).parent(); //设置回显值 isNote checkType var quOption_isNote=$("#modelUIDialog input[name='quOption_isNote']"); var isNote=quOptionParent.find("input[name='isNote']"); var checkType=quOptionParent.find("input[name='checkType']"); var isRequiredFill=quOptionParent.find("input[name='isRequiredFill']"); if(quOption_isNote.prop("checked")&&(isNote.val()=="0" || isNote.val()=="")){ quItemBody.find("input[name='saveTag']").val(0); quOptionParent.find("input[name='quItemSaveTag']").val(0); } //alert(isNote.attr("name")); if(quOption_isNote.prop("checked")){ isNote.val(1); }else{ isNote.val(0); } checkType.val("NO"); isRequiredFill.val(0); //显示填空框 //$(dwDialogObj).after(""); quOptionParent.find(".optionInpText").show(); $("#modelUIDialog").dialog("close"); //resetQuItemHover(null); dwCommonDialogHide(); return false; }); //填空题--填空框设置 $("#dwDialogQuFillOptionSave").click(function(){ var quItemBody=$(dwDialogObj).parents(".surveyQuItemBody"); var qu_inputWidth=$("#modelUIDialog input[name='qu_inputWidth']"); var qu_inputRow=$("#modelUIDialog input[name='qu_inputRow']"); var checkType=quItemBody.find("input[name='checkType']"); var answerInputWidth=quItemBody.find("input[name='answerInputWidth']"); var answerInputRow=quItemBody.find("input[name='answerInputRow']"); if(answerInputWidth.val()!=qu_inputWidth.val() || answerInputRow.val()!=qu_inputRow.val()){ quItemBody.find("input[name='saveTag']").val(0); } checkType.val("NO"); answerInputWidth.val(qu_inputWidth.val()); answerInputRow.val(qu_inputRow.val()); if(qu_inputRow.val()>1){ quItemBody.find(".quFillblankAnswerTextarea").show(); quItemBody.find(".quFillblankAnswerInput").hide(); quItemBody.find(".quFillblankAnswerTextarea").attr("rows",qu_inputRow.val()); quItemBody.find(".quFillblankAnswerTextarea").width(qu_inputWidth.val()); }else{ quItemBody.find(".quFillblankAnswerTextarea").hide(); quItemBody.find(".quFillblankAnswerInput").show(); quItemBody.find(".quFillblankAnswerInput").width(qu_inputWidth.val()); } quItemBody.find(".quCoItemUlLi").removeClass("hover"); $("#modelUIDialog").dialog("close"); resetQuItemHover(null); dwCommonDialogHide(); return false; }); function quTableOptoin2Li(quItemBody){ var quCoItemTds=quItemBody.find(".quCoItem .tableQuColItem tr td"); var ulLiHtml="