master
skycaiji 2024-05-15 12:14:51 +08:00
parent a4d3531d5d
commit bf3768e12a
112 changed files with 3688 additions and 670 deletions

View File

@ -92,6 +92,7 @@
.label-custom-opened{font-weight:normal;background-color:#dedede;color:#555;}
.plugin-func-refresh{font-size:12px;}
.plugin-api-refresh{font-size:12px;}
.brl_0{border-left:0;}
.brr_0{border-right:0;}
@ -281,6 +282,27 @@ table.table thead .sorting_desc:after {
/*杂项*/
.form-inline label{font-weight:normal;}
.form-control-slt{width:30px!important;text-align:left;}
.form-control-slt select.form-control {
min-width: 22px !important;
width: 22px !important;
height: 30px !important;
float: none !important;
border: 0 !important;
padding: 0 !important;
margin: 0 !important;
text-indent: -200px !important;
-webkit-appearance: none;
-moz-appearance: none;
-ms-appearance: none;
appearance: none;
background: url('../images/select.png') no-repeat scroll right center transparent;
background-size: 14px;
}
.form-control-slt select.form-control::-ms-expand { display: none; }
.box-header .navbar-toggle{background:#efefef;margin-top:0;}
.box-header .navbar-toggle .icon-bar{background:#aaa;}
@ -407,15 +429,6 @@ footer.footer-end{display:none;}
.tool-json-tree .val{}
.tool-json-tree .text{width:100%;}
.tool-json-tree .text textarea{width:100%;}
/*开发*/
.deve-editor-left{padding-right:0px;}
.deve-editor-right{padding-left:1px;}
.deve-editor-apps-nav{margin-bottom:0;}
.deve-editor-apps{padding-left:5px;list-style:none;}
.deve-editor-apps li{padding:2px 0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}
.deve-editor-apps li a{color:#333;}
.deve-editor-apps li.cur a{font-weight:bold;}
/*采集窗口*/
.win-cem-process-body{position:relative;}
@ -471,8 +484,6 @@ footer.footer-end{display:none;}
}
.content-wrapper .content{padding-top:8px;}
.deve-editor-left,.deve-editor-right{padding-left:15px;padding-right:15px;margin-bottom:10px;}
/*元素最小宽度,防止太窄无法输入*/
.table-responsive .table input.form-control{min-width:100px;}
.table-responsive .table textarea.form-control{min-width:100px;}

View File

@ -114,13 +114,16 @@
#coll_tab_content td .glyphicon.delete{font-size:12px;top:1.1px;vertical-align:middle;}
.c-p-process-accordion .panel-heading .glyphicon.c-p-process-title{font-size:11px;vertical-align:middle;}
.c-p-process-accordion .panel-heading .glyphicon.c-p-process-close{font-size:12px;vertical-align:middle;}
.c-p-process-accordion .panel-heading .glyphicon.c-p-process-closed{color:red}
.c-p-process-accordion .panel-heading .glyphicon.icon-drag-move{font-size:12px;vertical-align:middle;}
.c-p-process-accordion .panel-heading .glyphicon.c-p-process-clone{font-size:12px;top:0.3px;vertical-align:middle;}
.c-p-process-accordion .panel-heading .glyphicon.c-p-process-del{font-size:12px;top:1.1px;vertical-align:middle;}
.c-p-process-accordion .panel-heading .panel-title-title{float:left;}
.c-p-process-accordion .panel-heading .panel-title-title input{display:none;border-radius:2px;border:1px solid #ccc;line-height:14px;font-size:12px;margin-left:5px;padding:1px 1px 1px 2px;}
.c-p-process-accordion .panel-heading .panel-title-title input{display:none;border-radius:2px;border:1px solid #ccc;line-height:14px;font-size:12px;margin-left:2px;padding:1px 1px 1px 3px;}
.c-p-process-accordion .panel-heading .panel-title-ops{float:right;line-height:19px;}
.c-p-process-accordion>.panel{margin-bottom:8px;}
.c-p-process-accordion>.panel:last-child{margin-bottom:0;}
.iga-rt{text-align:left;line-height:20px;}
.iga-rt .blk{display:block;}
@ -135,17 +138,15 @@
/*数据处理*/
.form-control-slt{width:30px!important;text-align:center;}
.form-control-slt select.form-control{min-width:20px!important;width:20px!important;height:30px!important;float:none!important;border:0!important;padding:0!important;margin:0!important;text-indent:-20px!important;}
.process-extract-module{display:none;}
.p-m-func-field,.p-m-insert-field{display:inline;width:80px;border:0;cursor:pointer;margin:0;padding:0;height:auto;color:#555;}
.p-m-func-field,.p-m-apiapp-field,.p-m-insert-field{display:inline;width:80px;border:0;cursor:pointer;margin:0;padding:0;height:auto;color:#555;}
.p-m-api-val-field,.p-m-api-header-field{display:none;margin-left:-1px;padding:0;}
.p-m-api-val-field,.p-m-api-header-field{display:none;border-left:0;padding:0;}
.p-m-api-table table,.p-m-api-header-table table{margin-bottom:0;}
.p-m-api-table td:first-child,.p-m-api-header-table td:first-child{width:200px;}
.p-m-api-table td:last-child,.p-m-api-header-table td:last-child{width:50px;text-align:center;}
.p-m-api-rule-module{display:none;}
.p-m-html-tags{}
.p-m-html-tags a{font-size:12px;font-weight:normal;cursor:pointer;margin-right:5px;}

View File

@ -3,15 +3,16 @@
.skycaiji_bd{border-width:1px!important;border-style:solid!important;}
.skycaiji_bd1{border-color:red!important;}
.skycaiji_bd2{border-color:black!important;}
.skycaiji_bd3{border-color:yellow!important;}
.skycaiji_bd4{border-color:cyan!important;}
.skycaiji_bd3{border-color:blue!important;}
.skycaiji_bd4{border-color:green!important;}
.skycaiji_bd5{border-color:purple!important;}
.skycaiji_bd6{border-color:orange!important;}
.skycaiji_bd7{border-color:brown!important;}
.skycaiji_bd8{border-color:pink!important;}
.skycaiji_bd9{border-color:blue!important;}
.skycaiji_bd9{border-color:yellow!important;}
.skycaiji_bd10{border-color:grey!important;}
.skycaiji_bd11{border-color:green!important;}
.skycaiji_bd11{border-color:cyan!important;}
.skycaiji_bd_list{border-width:1px!important;border-style:dashed!important;}
#skycaiji_wrapper * {
font-size: 14px;

View File

@ -0,0 +1,33 @@
@CHARSET "UTF-8";
.deve-editor-left{padding-right:0px;}
.deve-editor-right{padding-left:1px;}
.deve-editor-apps-nav{margin-bottom:0;}
.deve-editor-apps{padding-left:5px;list-style:none;}
.deve-editor-apps li{padding:2px 0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}
.deve-editor-apps li a{color:#333;}
.deve-editor-apps li.cur a{font-weight:bold;}
@media (max-width: 767px){
.deve-editor-left,.deve-editor-right{padding-left:15px;padding-right:15px;margin-bottom:10px;}
}
.deve-api-request-box .request-header-list td:last-child,.deve-api-request-box .request-param-list td:last-child{text-align:center;}
.deve-api-request-box .request-header-delete,.deve-api-request-box .request-param-delete{margin-top:7px;}
.deve-api-request-box .api-insert-variable-btn{padding:0;}
.deve-api-request-box .api-insert-variable-btn a.dropdown-toggle{border-color:#fff;padding:6px 12px;color:#666;}
.deve-api-request-box .api-insert-variable-btn a.dropdown-toggle:hover{color:#000;}
.deve-api-request-box .api-insert-variable-btn a.dropdown-toggle .caret{margin-top:-2px;}
/*规则样式*/
.iga-rt{text-align:left;line-height:20px;}
.iga-rt .blk{display:block;}
.iga-rt .mgr{margin-right:5px;}
.iga-rt1{padding:0;vertical-align:top;}
.iga-rt1 .slt{width:100%;min-width:58px;height:24px;display:block;color:#555;font-weight:bold;padding:1px;margin:0;border:0;background:#F1F1F1;}
.iga-rt1 .op{margin:0;padding:3px 6px;list-style:none;}
.iga-rt1 .op li{display:none;}

View File

@ -15,9 +15,13 @@
.db-table-bind-op{width:auto;height:auto;display:inline;padding:0;}
.db-table-bind-where-tpl,.db-table-bind-query-tpl{display:none;}
.db-table-bind-where,.db-table-bind-query{display:none;}
.db-table-bind-query{display:none;}
.db-table-bind-data-seq{display:none;}
.db-table-bind-where,.db-table-bind-query,.db-table-bind-data{border:0;}
.db-table-bind-where thead tr th,.db-table-bind-query thead tr th,.db-table-bind-data thead tr th{border:0;}
.db-table-bind-where,.db-table-bind-query,.db-table-bind-data{border:0;border-bottom:solid 1px #eee;}
.db-table-bind-help{margin:0;padding:12px 15px!important;border-bottom:solid 1px #eee;display:none;}
.db-table-bind-signs>.input-group-btn{position:static;}

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 B

View File

@ -7,7 +7,13 @@
| 使用协议 https://www.skycaiji.com/licenses
|--------------------------------------------------------------------------
*/
'use strict';var admincpOp={getConfig:function(key){var cpConfig=window.site_config.admincp;cpConfig=cpConfig?cpConfig:{};return key?cpConfig[key]:cpConfig},init:function(){var bodyWidth=$(document.body).width();var cpConfig=admincpOp.getConfig(null);if(cpConfig.skin){$('body').removeClass('skin-blue').addClass(cpConfig.skin)}
'use strict';function prompt_success(msg){toastr.success(msg?msg:'')}
function prompt_error(msg){toastr.error(msg?msg:'')}
function ajax_check_userpwd(ajaxSet){var oldSuccess=ajaxSet.success;ajaxSet.success=function(data){if(data.data&&data.data._check_pwd_){if(data.msg){toastr.error(data.msg)}
var msg='<div style="text-align:left;"><div style="margin-bottom:15px;">该操作需要验证您的登录密码</div>'+'<input class="form-control" type="password" id="confirm_ipt_check_pwd" placeholder="登录密码" />'+'<div style="margin-top:15px;"><select class="form-control" id="confirm_ipt_check_skip" style="display:inline;width:auto;height:auto;padding:0;margin-right:3px;">';for(var i=0;i<=24;i++){msg+='<option value="'+i+'">'+i+'</option>'}
msg+='</select>小时内不再验证</div></div>';confirmRight({closeAfterFunc:!0,yes:'确定',no:'取消',msg:msg},function(){var ajaxSetData=isNull(ajaxSet.data)?{}:ajaxSet.data;var checkPwd=$('#confirm_ipt_check_pwd').val();var checkSkip=$('#confirm_ipt_check_skip').val();if(typeof(ajaxSetData)=='object'){ajaxSetData._check_pwd_=checkPwd;ajaxSetData._check_skip_=checkSkip}else{ajaxSetData=ajaxSetData?(ajaxSetData+'&'):'';ajaxSetData+='_check_pwd_='+encodeURIComponent(checkPwd);ajaxSetData+='&_check_skip_='+encodeURIComponent(checkSkip)}
ajaxSet.data=ajaxSetData;ajaxSet.success=oldSuccess;ajax_check_userpwd(ajaxSet)});$('#confirm_ipt_check_skip').val(admincpOp.getConfig('check_skip'));$('#confirm_ipt_check_skip').bind('change',function(){admincpOp.config('check_skip',$(this).val())});$('#confirm_ipt_check_pwd').bind('keyup',function(event){if(event.keyCode=="13"){$('#confirm_right .cr-btn-yes').trigger("click")}})}else{if(oldSuccess&&typeof(oldSuccess)=='function'){oldSuccess(data)}}};ajaxOpen(ajaxSet)}
var admincpOp={getConfig:function(key){var cpConfig=window.site_config.admincp;cpConfig=cpConfig?cpConfig:{};return key?cpConfig[key]:cpConfig},init:function(){var bodyWidth=$(document.body).width();var cpConfig=admincpOp.getConfig(null);if(cpConfig.skin){$('body').removeClass('skin-blue').addClass(cpConfig.skin)}
var menuOpts={};if(bodyWidth>767){if(cpConfig.mini==1){$('body').addClass('sidebar-collapse').addClass('sidebar-mini')}
if(cpConfig.narrow==1){$('body').addClass('layout-boxed')}
menuOpts={animationSpeed:300};if(window.navigator.userAgent.indexOf('MSIE')>-1){menuOpts={animationSpeed:0}}}else{menuOpts={animationSpeed:0}}
@ -16,25 +22,30 @@ $('#chk_sidebar_mini').bind('click',function(){var setMini=$(this).is(':checked'
$('#chk_sidebar_narrow').bind('click',function(){var setNarrow=$(this).is(':checked')?1:0;admincpOp.config('narrow',setNarrow,function(){if(setNarrow){$('body').addClass('layout-boxed')}else{$('body').removeClass('layout-boxed')}})})}else{$('#chk_sidebar_mini').parents('li').eq(0).hide();$('#chk_sidebar_narrow').parents('li').eq(0).hide()}
if($('#menu_backstage_task').length>0){$('#menu_backstage_task').bind('click',function(){windowModal('采集任务',ulink('admin/backstage/backstageTask'),{lg:1})});winBackstageTask.count()}})},config:function(op,val,successFunc){ajaxOpen({type:'post',url:ulink('backstage/admincp'),data:{op:op,val:val},success:function(data){if(successFunc&&typeof(successFunc)=='function'){successFunc()}}})},skins:function(){var skinList={'blue':{'name':window.tpl_lang.skin_blue,'top_l_style':'background:#367fa9','top_r_class':'bg-light-blue','left_style':'background: #222d32','right_style':'background: #f4f5f7'},'black':{'name':window.tpl_lang.skin_black,'top_style':'box-shadow: 0 0 2px rgba(0,0,0,0.1)','top_l_style':'background: #fefefe','top_r_style':'background: #fefefe','left_style':'background: #222','right_style':'background: #f4f5f7'},'purple':{'name':window.tpl_lang.skin_purple,'top_l_class':'bg-purple-active','top_r_class':'bg-purple','left_style':'background: #222d32','right_style':'background: #f4f5f7'},'green':{'name':window.tpl_lang.skin_green,'top_l_class':'bg-green-active','top_r_class':'bg-green','left_style':'background: #222d32','right_style':'background: #f4f5f7'},'red':{'name':window.tpl_lang.skin_red,'top_l_class':'bg-red-active','top_r_class':'bg-red','left_style':'background: #222d32','right_style':'background: #f4f5f7'},'yellow':{'name':window.tpl_lang.skin_yellow,'top_l_class':'bg-yellow-active','top_r_class':'bg-yellow','left_style':'background: #222d32','right_style':'background: #f4f5f7'},'blue-light':{'name':window.tpl_lang.skin_blue_light,'top_l_style':'background: #367fa9','top_r_class':'bg-light-blue','left_style':'background: #f9fafc"','right_style':'background: #f4f5f7'},'black-light':{'name':window.tpl_lang.skin_black_light,'top_style':'box-shadow: 0 0 2px rgba(0,0,0,0.1)','top_l_style':'background: #fefefe','top_r_style':'background: #fefefe','left_style':'background: #f9fafc','right_style':'background: #f4f5f7'},'purple-light':{'name':window.tpl_lang.skin_purple_light,'top_l_class':'bg-purple-active','top_r_class':'bg-purple','left_style':'background: #f9fafc','right_style':'background: #f4f5f7'},'green-light':{'name':window.tpl_lang.skin_green_light,'top_l_class':'bg-green-active','top_r_class':'bg-green','left_style':'background: #f9fafc','right_style':'background: #f4f5f7'},'red-light':{'name':window.tpl_lang.skin_red_light,'top_l_class':'bg-red-active','top_r_class':'bg-red','left_style':'background: #f9fafc','right_style':'background: #f4f5f7'},'yellow-light':{'name':window.tpl_lang.skin_yellow_light,'top_l_class':'bg-yellow-active','top_r_class':'bg-yellow','left_style':'background: #f9fafc','right_style':'background: #f4f5f7'},};var html='<ul class="list-unstyled clearfix">';for(var skin in skinList){var skinSet=skinList[skin];html+='<li style="float:left; width: 33.33333%; padding: 5px;">'+'<a href="javascript:void(0)" data-skin="skin-'+skin+'" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">'+'<div style="'+(skinSet.top_style?skinSet.top_style:'')+'">'+'<span style="display:block; width: 20%; float: left; height: 7px; '+(skinSet.top_l_style?skinSet.top_l_style:'')+'" class="'+(skinSet.top_l_class?skinSet.top_l_class:'')+'"></span>'+'<span class="'+(skinSet.top_r_class?skinSet.top_r_class:'')+'" style="display:block; width: 80%; float: left; height: 7px; '+(skinSet.top_r_style?skinSet.top_r_style:'')+'"></span></div>'+'<div><span style="display:block; width: 20%; float: left; height: 20px; '+(skinSet.left_style?skinSet.left_style:'')+'"></span><span style="display:block; width: 80%; float: left; height: 20px; '+(skinSet.right_style?skinSet.right_style:'')+'"></span>'+'</div>'+'</a>'+'<p class="text-center no-margin">'+skinSet.name+'</p>';+'</li>'}
html+='</ul>';$('#sidebar_skins').html(html);$('#sidebar_skins li a[data-skin]').bind('click',function(){var skin=$(this).attr('data-skin');admincpOp.config('skin',skin,function(){for(var i in skinList){i='skin-'+i;$('body').removeClass(i)}
$('body').addClass(skin)})})}};function insertAtCaret(myField,myValue){myField=$(myField);var curObj=myField[0];if(document.selection){myField.focus();var sel=document.selection.createRange();sel.text=myValue;sel.select()}else if(curObj.selectionStart||curObj.selectionStart=='0'){var startPos=curObj.selectionStart;var endPos=curObj.selectionEnd;var restoreTop=curObj.scrollTop;var value=myField.val();value=value.substring(0,startPos)+myValue+value.substring(endPos,value.length);myField.val(value);myField.focus();curObj.selectionStart=startPos+myValue.length;curObj.selectionEnd=startPos+myValue.length}else{myField.val(myField.val()+myValue);myField.focus()}}
function urlUsertoken(){return'_usertoken_='+encodeURIComponent(window.site_config.usertoken)}
function openStoreUrl(url){if(url.indexOf('clientinfo=')<0&&window.site_config.clientinfo){url+=(url.indexOf('?')>-1?'&':'?')+'clientinfo='+encodeURIComponent(window.site_config.clientinfo)}
window.open(url,'_blank')}
function eleExchange(box,move,ele,options){if(!isObject(options)){options={}}
$('body').addClass(skin)})})}};var globalOp={insertAtCaret:function(myField,myValue){myField=$(myField);var curObj=myField[0];if(document.selection){myField.focus();var sel=document.selection.createRange();sel.text=myValue;sel.select()}else if(curObj.selectionStart||curObj.selectionStart=='0'){var startPos=curObj.selectionStart;var endPos=curObj.selectionEnd;var restoreTop=curObj.scrollTop;var value=myField.val();value=value.substring(0,startPos)+myValue+value.substring(endPos,value.length);myField.val(value);myField.focus();curObj.selectionStart=startPos+myValue.length;curObj.selectionEnd=startPos+myValue.length}else{myField.val(myField.val()+myValue);myField.focus()}},urlUsertoken:function(){return'_usertoken_='+encodeURIComponent(window.site_config.usertoken)},openStoreUrl:function(url){if(url.indexOf('clientinfo=')<0&&window.site_config.clientinfo){url+=(url.indexOf('?')>-1?'&':'?')+'clientinfo='+encodeURIComponent(window.site_config.clientinfo)}
window.open(url,'_blank')},eleExchange:function(box,move,ele,options){if(!isObject(options)){options={}}
if(!window.ele_exchange_is_touch){window.ele_exchange_is_touch=1;if('ontouchstart' in window||navigator.maxTouchPoints){window.ele_exchange_is_touch=2}}
if(window.ele_exchange_is_touch==2){$(box).on('click',move,function(){var obj=$(this).parents(ele).eq(0);var next=obj.next(ele);if(next.length>0){next.after(obj)}})}else{var curTrTds={};$(box).on('mousedown',move,function(){var obj=$(this).parents(ele).eq(0);if(obj.is('tr')){curTrTds={};obj.children('th,td').each(function(index){curTrTds[index]={width:$(this).width(),colspan:toInt($(this).attr('colspan')),hidden:$(this).is(':hidden')?true:!1}})}});var sOpts={items:ele,handle:move,axis:'y',start:function(event,ui){if(ui&&ui.item){var obj=$(ui.item[0]);if(obj.is('tr')){obj.children('th,td').each(function(index){var curTrTd=curTrTds[index];if(isObject(curTrTd)){$(this).width(curTrTd.width);if(curTrTd.colspan>0){$(this).attr('colspan',curTrTd.colspan)}
if(curTrTd.hidden){$(this).hide()}}});$('.ui-sortable-placeholder').children('th,td').each(function(index){var curTrTd=curTrTds[index];if(isObject(curTrTd)){$(this).width(curTrTd.width);if(curTrTd.colspan>0){$(this).attr('colspan',curTrTd.colspan)}
if(curTrTd.hidden){$(this).hide()}}})}}}};for(var i in options){sOpts[i]=options[i]}
$(box).sortable(sOpts)}}
function showPanelCollapse(id){$(id).parent().find('a[data-toggle][href="'+id+'"]').attr('aria-expanded',!0).removeClass('collapsed');$(id).addClass('in').attr('aria-expanded',!0).attr('style','')}
function inputSelectCustom(sltObj,iptName,onOptions,customName,changeFunc){customName=customName?customName:'custom';var onChangeFunc=function(curObj,iptEle){var ipt=$(curObj).parents('.input-select-custom').eq(0).find(iptEle);if($(curObj).val()==customName){ipt.show()}else{ipt.hide()}
if(changeFunc&&typeof(changeFunc)=='function'){changeFunc()}};if(sltObj&&iptName){$(sltObj).bind('change',function(){onChangeFunc(this,'[name="'+iptName+'"]')})}else if(onOptions&&typeof(onOptions)=='object'){$(onOptions.box).on('change',onOptions.slt,function(){onChangeFunc(this,onOptions.ipt)})}}
function visualizeData(data){var cacheData=data;data=isNull(data)?'':data;var options={lg:1,hidden_func:function(){window.win_visualize_data=null}};if(dataIsJson(data)){var jsonId='json_'+generateUUID();modal('JSON解析','<div id="'+jsonId+'"></div>',options);var jsonTreeFunc=function(){window.tool_json_tree.treeId='#'+jsonId;window.tool_json_tree.load(data)};if(window.tool_json_tree){jsonTreeFunc()}else{$.getScript(window.site_config.pub+'/static/js/admin/tool_json_tree.js',jsonTreeFunc)}}else{options.loaded_func=function(){data=data.replace(/<script[^<>]*>[\s\S]*?<\/script>/ig,'');data=data.replace(/<meta[^<>]*charset[^<>]*>/i,'');var ifrId='#myModalIframe';$(ifrId).bind('load',function(){if($(ifrId).contents().find('body').html().length<=0){$(ifrId).contents().find('body').html(data)}});$(ifrId).contents().find('body').html(data)};var title='HTML预览';if(data&&data.indexOf('<pre>')===0){title='HTML代码'}
windowIframe(title,'',options)}(function(data){if(data){$('#myModal .modal-footer .close').addClass('btn btn-default').removeClass('close');$('#myModal .modal-footer').prepend('<button type="button" class="btn btn-info btn-back" data-dismiss="modal">返回</button>');$('#myModal .modal-footer .btn-back').bind('click',function(){visualizeData(data)})}})(window.win_visualize_data);window.win_visualize_data=cacheData}
function cpEasyBrowser(url,pageSource,inputUrls){pageSource=pageSource?pageSource:'';inputUrls=inputUrls?inputUrls:{};var data={type:'browser_url',page_source:pageSource,test_url:url,input_urls:inputUrls};data=JSON.stringify(data);window.top.postMessage(data,'*')}
function cpBrowserUrl(collId,pageSource,testUrl,inputedUrls){inputedUrls=inputedUrls?inputedUrls:{};var url='cpattern_test/browser?coll_id=_collid_&page_source=_source_&test_url=_url_';if(inputedUrls){for(var i in inputedUrls){url+='&'+i+'='+encodeURIComponent(inputedUrls[i])}}
url=ulink(url,{'_collid_':collId,'_source_':pageSource,'_url_':testUrl});return url}
var pluginFuncOp={load:function(params){params=params?params:{};var cacheParams=params;var boxObj=$(params.boxObj);var funcObj=boxObj.find(params.funcObj);var paramObj=params.paramObj?boxObj.find(params.paramObj):null;var funcVal=params.funcVal?params.funcVal:'';var winCacheName='win_cache_plugin_func_'+params.module;boxObj.find('.plugin-func-refresh').off('click').bind('click',function(){window[winCacheName]=null;funcObj.removeAttr('data-is-loaded');funcObj.find('[data-is-func]').remove();cacheParams.show_refresh=1;pluginFuncOp.load(cacheParams);return!1});if(paramObj&&paramObj.length>0){if(!funcObj.attr('data-change-pla')){funcObj.attr('data-change-pla',1);funcObj.bind('change',function(){var reStrFunc=function(str){if(str){var regLineR=new RegExp("\\\\r",'g');var regLineN=new RegExp("\\\\n",'g');str=str.replace(regLineR,"\r").replace(regLineN,"\n")}else{str=''}
$(box).sortable(sOpts)}},visualizeData:function(data){var cacheData=data;data=isNull(data)?'':data;var options={lg:1,hidden_func:function(){window.win_visualize_data=null}};if(dataIsJson(data)){var jsonId='json_'+generateUUID();modal('JSON解析','<div id="'+jsonId+'"></div>',options);var jsonTreeFunc=function(){window.tool_json_tree.treeId='#'+jsonId;window.tool_json_tree.load(data)};if(window.tool_json_tree){jsonTreeFunc()}else{$.getScript(window.site_config.pub+'/static/js/admin/tool_json_tree.js',jsonTreeFunc)}}else{options.loaded_func=function(){data=data.replace(/<script[^<>]*>[\s\S]*?<\/script>/ig,'');data=data.replace(/<meta[^<>]*charset[^<>]*>/i,'');var ifrId='#myModalIframe';$(ifrId).bind('load',function(){if($(ifrId).contents().find('body').html().length<=0){$(ifrId).contents().find('body').html(data)}});$(ifrId).contents().find('body').html(data)};var title='HTML预览';if(data&&data.indexOf('<pre>')===0){title='HTML代码'}
windowIframe(title,'',options)}(function(data){if(data){$('#myModal .modal-footer .close').addClass('btn btn-default').removeClass('close');$('#myModal .modal-footer').prepend('<button type="button" class="btn btn-info btn-back" data-dismiss="modal">返回</button>');$('#myModal .modal-footer .btn-back').bind('click',function(){globalOp.visualizeData(data)})}})(window.win_visualize_data);window.win_visualize_data=cacheData},showPanelCollapse:function(id){$(id).parent().find('a[data-toggle][href="'+id+'"]').attr('aria-expanded',!0).removeClass('collapsed');$(id).addClass('in').attr('aria-expanded',!0).attr('style','')},inputSelectCustom:function(sltObj,iptName,onOptions,customName,changeFunc){customName=customName?customName:'custom';var onChangeFunc=function(curObj,iptEle){var ipt=$(curObj).parents('.input-select-custom').eq(0).find(iptEle);if($(curObj).val()==customName){ipt.show()}else{ipt.hide()}
if(changeFunc&&typeof(changeFunc)=='function'){changeFunc()}};if(sltObj&&iptName){$(sltObj).bind('change',function(){onChangeFunc(this,'[name="'+iptName+'"]')})}else if(onOptions&&typeof(onOptions)=='object'){$(onOptions.box).on('change',onOptions.slt,function(){onChangeFunc(this,onOptions.ipt)})}},cpEasyBrowser:function(url,pageSource,inputUrls){pageSource=pageSource?pageSource:'';inputUrls=inputUrls?inputUrls:{};var data={type:'browser_url',page_source:pageSource,test_url:url,input_urls:inputUrls};data=JSON.stringify(data);window.top.postMessage(data,'*')},cpBrowserUrl:function(collId,pageSource,testUrl,inputedUrls){inputedUrls=inputedUrls?inputedUrls:{};var url='cpattern_test/browser?coll_id=_collid_&page_source=_source_&test_url=_url_';if(inputedUrls){for(var i in inputedUrls){url+='&'+i+'='+encodeURIComponent(inputedUrls[i])}}
url=ulink(url,{'_collid_':collId,'_source_':pageSource,'_url_':testUrl});return url},loadFormConfig:function(formObj,config,namePre){if(formObj&&isObject(config)){namePre=namePre?namePre:'';for(var i in config){var eleVal=config[i];var eleValIsArr=isObject(eleVal)?true:!1;var eleName=namePre?(namePre+'['+i+']'):i;var eleObj=$(formObj).find('[name="'+eleName+'"]');if(eleObj.length>0){var eleTag=eleObj.eq(0).prop('tagName').toLowerCase();if(eleTag=='input'){var eleType=eleObj.eq(0).attr('type').toLowerCase();if(eleType=='radio'||eleType=='checkbox'){eleObj.each(function(){if($(this).val()==eleVal){$(this).trigger('click')}})}else{eleObj.val(eleVal)}}else if(eleTag=='textarea'){eleObj.val(eleVal)}else if(eleTag=='select'){eleObj.val(eleVal).trigger('change')}}else{var isConfig=!0;eleObj=$(formObj).find('[name="'+eleName+'[]"]');if(eleObj.length>0){var eleTag=eleObj.eq(0).prop('tagName').toLowerCase();var eleType=eleObj.eq(0).attr('type').toLowerCase();if(eleTag=='input'&&eleType=='checkbox'){isConfig=!1;eleObj.each(function(){var curVal=$(this).val();if(eleValIsArr){if(eleVal.indexOf(curVal)>-1){$(this).prop('checked',!0)}}else{if(curVal==eleVal){$(this).prop('checked',!0)}}})}}
if(isConfig){globalOp.loadFormConfig(formObj,eleVal,eleName)}}}}},tipsCurlPost:function(){var tips='<p>表单数据模拟form表单输入的数据</p><p>表单上传模拟form表单输入并上传的数据</p>'+'<p>JSON数组以json格式发送数据可在“发送数据”的“值”中直接输入json字符串。在“名称”中填入json数组键名子节点名称使用.分隔例如a.b.c。根节点名称可使用###表示</p>';confirmRight({msg:tips,yes:'确定',width:500,textAlign:'left'})},editorCodeIfr:function(ifrEle,options){options=isObject(options)?options:{};if(options.set_value!=null&&typeof(options.set_value)!='undefined'){$(document).ready(function(){$(ifrEle).attr('src','');$(ifrEle).attr('src',ulink('develop/editor_code'));$(ifrEle).off('load').bind('load',function(){if(options.set_value&&$(ifrEle)[0].contentWindow.editor_code_op){$(ifrEle)[0].contentWindow.editor_code_op.set(options.set_value)}})})}else if(options.get_value){var ifrEle=$(ifrEle)[0];var val='';if(ifrEle&&ifrEle.contentWindow.editor_code_op){val=ifrEle.contentWindow.editor_code_op.get()}
return val}},collectorWindow:function(title,uri,uriVals,options){options=options?options:{};options.backdrop_static=1;title=isNull(title)?'':title;title+='<div class="loading-sm" style="margin-left:5px;"></div>';window.win_collector_window_params={title:title,uri:uri,uriVals:uriVals,options:options};windowModal(title,ulink('admin/collector/echo_msg?op=run'),{lg:options.lg})}};var pluginApiOp={load:function(params){params=params?params:{};var cacheParams=params;var boxObj=$(params.boxObj);var appObj=boxObj.find(params.appObj);var appApp=params.appApp?params.appApp:'';var appConfig=isObject(params.appConfig)?params.appConfig:{};var namePre=params.namePre?params.namePre:'config';var winCacheName='win_cache_plugin_api_'+params.module;boxObj.find('.plugin-api-refresh').off('click').bind('click',function(){window[winCacheName]=null;appObj.removeAttr('data-is-loaded');appObj.html('');cacheParams.show_refresh=1;pluginApiOp.load(cacheParams);return!1});if(!appObj.attr('data-change-ops')){appObj.attr('data-change-ops',1);appObj.bind('change',function(){var curVal=$(this).val();if(curVal){var sltOption=$(this).find('option:selected');var ops=sltOption.attr('data-ops');ops=decode_urlbase2json(ops);var html='';if(isObject(ops)){for(var i in ops){var op=ops[i];if(isObject(op)){var userOp=op.user;var nameKey=namePre+'['+op.name_key+']';var defaultVal=userOp['default'];html+='<div class="form-group plugin-api-op"><label>'+htmlspecialchars(op.name)+(userOp.required?'<span style="color:red;font-weight:bold;margin-left:5px;">*</span>':'')+'</label>';if(userOp.tag=='text'){html+='<textarea name="'+nameKey+'" rows="2" class="form-control"';if(defaultVal||defaultVal===0){html+=' placeholder="默认:'+htmlspecialchars(defaultVal)+'"'}
html+='"></textarea>'}else if(userOp.tag=='radio'){defaultVal=toInt(defaultVal);html+='<div class="input-group"><label class="radio-inline"><input type="radio" name="'+nameKey+'" value="1"'+(defaultVal>0?' checked="checked"':'')+'>是</label>'+'<label class="radio-inline"><input type="radio" name="'+nameKey+'" value="0"'+(defaultVal<=0?' checked="checked"':'')+'>否</label></div>'}else if(userOp.tag=='select'){html+='<select name="'+nameKey+'" class="form-control"><option value="">请选择</option>';if(isObject(userOp.tag_select)){for(var tsi in userOp.tag_select){html+='<option value="'+htmlspecialchars(tsi)+'"'+(defaultVal==tsi?' selected="selected"':'')+'>'+htmlspecialchars(userOp.tag_select[tsi])+'</option>'}}
html+='</select>'}
var tipsSltFields='';if(!params.isTest&&params.module=='process'&&userOp.tag=='text'){tipsSltFields='可以<select class="p-m-apiapp-field"><option value="">插入字段</option></select>'}
if(op.desc){tipsSltFields=tipsSltFields?(''+tipsSltFields):'';html+='<p class="help-block">'+htmlspecialchars(op.desc)+tipsSltFields+'</p>'}else{html+='<p class="help-block">'+tipsSltFields+'</p>'}
html+='</div>'}}}
var opListObj=boxObj.find('.plugin-api-op-list');opListObj.html(html);if(html){opListObj.show()}else{opListObj.hide()}
if(params.module=='process'){if(window.c_pattern&&window.c_pattern.cpProcess){window.c_pattern.cpProcess.txt_insert_field(opListObj,'.p-m-apiapp-field',function(sltObj){return $(sltObj).parents('.plugin-api-op').eq(0).find('textarea')})}}
globalOp.loadFormConfig(boxObj,appConfig,namePre)}})}
var setAppVal=function(){appObj.val(appApp).trigger('change')};var setAppOptions=function(opts){var html='<option value="">--请选择--</option>';html=html+(opts?opts:'');appObj.html(html)}
if(appObj.attr('data-is-loaded')){setAppVal()}else{if(params.cache&&window[winCacheName]){appObj.attr('data-is-loaded',1);setAppOptions(window[winCacheName]);setAppVal()}else{var appUrl=ulink('collector/plugin_api?module=_module_',{'_module_':params.module});ajaxOpen({type:'GET',dataType:'json',url:appUrl,async:params.cache?false:!0,success:function(data){if(appObj.attr('data-is-loaded')){setAppVal()}else{appObj.attr('data-is-loaded',1);if(data.code==1){var html='';var apps=data.data;if(isObject(apps)){for(var app in apps){var appData=apps[app];if(isObject(appData)){html+='<option value="'+app+'" data-ops="'+encode_json2urlbase(appData.ops)+'">'+htmlspecialchars(appData.name+''+app+'')+'</option>'}}}
setAppOptions(html);if(params.cache){window[winCacheName]=html}}}
if(params.show_refresh){toastr.success('已刷新')}},error:function(xhr,status,error){appObj.removeAttr('data-is-loaded');toastr.error('接口插件载入失败:'+status+' '+error+' <a href="'+appUrl+'" target="_blank" style="color:#ddd;">查看详细</a>')},complete:function(xhr,status){setAppVal()}})}}}};var pluginFuncOp={load:function(params){params=params?params:{};var cacheParams=params;var boxObj=$(params.boxObj);var funcObj=boxObj.find(params.funcObj);var paramObj=params.paramObj?boxObj.find(params.paramObj):null;var funcVal=params.funcVal?params.funcVal:'';var winCacheName='win_cache_plugin_func_'+params.module;boxObj.find('.plugin-func-refresh').off('click').bind('click',function(){window[winCacheName]=null;funcObj.removeAttr('data-is-loaded');funcObj.find('[data-is-func]').remove();cacheParams.show_refresh=1;pluginFuncOp.load(cacheParams);return!1});if(paramObj&&paramObj.length>0){if(!funcObj.attr('data-change-pla')){funcObj.attr('data-change-pla',1);funcObj.bind('change',function(){var reStrFunc=function(str){if(str){var regLineR=new RegExp("\\\\r",'g');var regLineN=new RegExp("\\\\n",'g');str=str.replace(regLineR,"\r").replace(regLineN,"\n")}else{str=''}
return str};paramObj=boxObj.find(params.paramObj);var placeholder=paramObj.attr('data-placeholder');placeholder=reStrFunc(placeholder);if($(this).val()){var sltOption=$(this).find('option:selected');var funcPrams=sltOption.attr('data-params');funcPrams=funcPrams?funcPrams:'';var funcComment=sltOption.attr('data-comment');funcComment=funcComment?funcComment:'';if(funcPrams||funcComment){if(funcPrams){placeholder+="\r\n函数参数:"+reStrFunc(funcPrams)}
if(funcComment){placeholder+="\r\n函数注释:"+reStrFunc(funcComment)}}}
var rows=3;if(placeholder){var regLine=new RegExp("[\\r\\n]+",'g');var matchLine=placeholder.split(regLine);if(matchLine&&typeof(matchLine)=='object'){rows=parseInt(matchLine.length)+1}}
@ -48,10 +59,8 @@ html+='</optgroup>'}}}
if(optEptObj){optEptObj.after(html)}else{funcObj.append(html)}
if(params.cache){window[winCacheName]=html}}}
if(params.show_refresh){toastr.success('已刷新')}},error:function(xhr,status,error){funcObj.removeAttr('data-is-loaded');toastr.error('函数插件载入失败:'+status+' '+error+' <a href="'+funcUrl+'" target="_blank" style="color:#ddd;">查看详细</a>')},complete:function(xhr,status){setFuncVal()}})}}},addHtml:function(params,module){if(!isObject(params)){params={}}
var funcData=isObject(params.funcData)?params.funcData:{};var funcName=params.funcName?params.funcName:'';var funcParamName=params.funcParamName?params.funcParamName:'';var tplId=params.tplId?params.tplId:'';tplId='#'+tplId;var listId=params.listId?params.listId:'';listId='#'+listId;var funcId=params.funcId?params.funcId:'';var html=$(tplId).html();html=$(html);var randId=generateUUID();funcName=funcName.replace('{id}',randId);funcParamName=funcParamName.replace('{id}',randId);funcId=funcId.replace('{id}',randId);html.find('[data-func-a]').attr('href','#'+funcId).html('使用函数'+(funcData.func?(''+funcData.func):''));html.find('[data-func-panel]').attr('id',funcId);html.find('[data-func-func]').attr('name',funcName);html.find('[data-func-func-param]').attr('name',funcParamName).val(funcData.func_param?funcData.func_param:'');$(listId).append(html);var loadParams={'boxObj':funcId?$('#'+funcId):html.find('[data-func-panel]'),'module':module,'funcObj':'[name="'+funcName+'"]','paramObj':'[name="'+funcParamName+'"]','funcVal':funcData.func};pluginFuncOp.load(loadParams)},initHtml:function(listObj){$(listObj).on('click','a[data-func-insert]',function(){var val=$(this).attr('data-func-insert');if(val){var obj=$(this).parents('[data-func-box]').eq(0).find('textarea[data-func-func-param]');insertAtCaret(obj,obj.val()?("\r\n"+val):val)}});$(listObj).on('click','a[data-func-remove]',function(){var curObj=$(this);confirmRight('确定删除?',function(){curObj.parents('[data-func-box]').eq(0).remove()})});eleExchange(listObj,'a[data-func-move]','[data-func-box]')},tips:function(module){var tips='';if(module=='process'||module=='contentSign'){tips='<p>如需扩展系统函数,请在根目录/data/config.php中添加配置</p>'+"<p>'EXTEND_PROCESS_FUNC'=&gt;array('PHP函数名'=&gt;'描述')</p>"+'<p>如需扩展插件函数,可创建<a href="'+ulink('develop/func?module='+module)+'" target="_blank">函数插件</a></p>'}else if(module=='processIf'){tips='<p>选择函数,取反可获取函数结果的相反值</p>'+'<p>默认将当前字段作为参数传入,如需传入多个参数,一行一个值,可输入任何内容或调用字段</p>'+'<p>请按函数传参,否则运行出错!</p>'+'<p>如需扩展系统函数,请在根目录/data/config.php中添加配置</p>'+"<p>'EXTEND_PROCESS_IF'=&gt;array('PHP函数名'=&gt;'描述')</p>"+'<p>如需扩展插件函数,可创建<a href="'+ulink('develop/func?module=processIf')+'" target="_blank">函数插件</a></p>'}else if(module=='downloadImg'||module=='downloadFile'){window.open(ulink('develop/func?module='+module));return!1}
confirmRight({msg:tips,yes:'确定',width:500,textAlign:'left'})}};function tipsCurlPost(){var tips='<p>表单数据模拟form表单输入的数据</p><p>表单上传模拟form表单输入并上传的数据</p>'+'<p>JSON数组以json格式发送数据可在“发送数据”的“值”中直接输入json字符串。在“名称”中填入json数组键名根节点名称使用###表示,子节点名称使用.分隔例如a.b.c</p>';confirmRight({msg:tips,yes:'确定',width:500,textAlign:'left'})}
function collectorWindow(title,uri,uriVals,options){options=options?options:{};options.backdrop_static=1;title=isNull(title)?'':title;title+='<div class="loading-sm" style="margin-left:5px;"></div>';window.win_collector_window_params={title:title,uri:uri,uriVals:uriVals,options:options};windowModal(title,ulink('admin/collector/echo_msg?op=run'),{lg:options.lg})}
var collectorEchoMsg={config:{},processes:{},close_non_stop:!1,end_set_timeout:null,run:function(config){collectorEchoMsg.config=isObject(config)?config:{};collectorEchoMsg.processes={};collectorEchoMsg.close_non_stop=!1;var winParams=window.win_collector_window_params;winParams=isObject(winParams)?winParams:{};var uri=winParams.uri?winParams.uri:'';var uriVals=isObject(winParams.uriVals)?winParams.uriVals:{};var options=isObject(winParams.options)?winParams.options:{};var winProcessBox=$('#myModal #win_cem_process_box').clone();if(uri){var title=winParams.title+'<small style="margin-left:10px;">日志读取间隔<input type="number" class="form-control input-sm" style="display:inline;width:40px;height:20px;padding:1px 2px 1px 2px;margin:0px 3px 0px 3px;" id="win_cem_interval" value="'+collectorEchoMsg.get_interval()+'" />秒<button type="button" class="btn btn-default btn-xs" id="win_cem_interval_btn" style="margin-left:3px;">保存</button>';var closeFuncs=new Array();if(!isNull(options.close_func)){if(isObject(options.close_func)){closeFuncs=options.close_func}else{closeFuncs.push(options.close_func)}}
var funcData=isObject(params.funcData)?params.funcData:{};var funcName=params.funcName?params.funcName:'';var funcParamName=params.funcParamName?params.funcParamName:'';var tplId=params.tplId?params.tplId:'';tplId='#'+tplId;var listId=params.listId?params.listId:'';listId='#'+listId;var funcId=params.funcId?params.funcId:'';var html=$(tplId).html();html=$(html);var randId=generateUUID();funcName=funcName.replace('{id}',randId);funcParamName=funcParamName.replace('{id}',randId);funcId=funcId.replace('{id}',randId);html.find('[data-func-a]').attr('href','#'+funcId).html('使用函数'+(funcData.func?(''+funcData.func):''));html.find('[data-func-panel]').attr('id',funcId);html.find('[data-func-func]').attr('name',funcName);html.find('[data-func-func-param]').attr('name',funcParamName).val(funcData.func_param?funcData.func_param:'');$(listId).append(html);var loadParams={'boxObj':funcId?$('#'+funcId):html.find('[data-func-panel]'),'module':module,'funcObj':'[name="'+funcName+'"]','paramObj':'[name="'+funcParamName+'"]','funcVal':funcData.func};pluginFuncOp.load(loadParams)},initHtml:function(listObj){$(listObj).on('click','a[data-func-insert]',function(){var val=$(this).attr('data-func-insert');if(val){var obj=$(this).parents('[data-func-box]').eq(0).find('textarea[data-func-func-param]');globalOp.insertAtCaret(obj,obj.val()?("\r\n"+val):val)}});$(listObj).on('click','a[data-func-remove]',function(){var curObj=$(this);confirmRight('确定删除?',function(){curObj.parents('[data-func-box]').eq(0).remove()})});globalOp.eleExchange(listObj,'a[data-func-move]','[data-func-box]')},tips:function(module){var tips='';if(module=='process'||module=='contentSign'){tips='<p>如需扩展系统函数,请在根目录/data/config.php中添加配置</p>'+"<p>'EXTEND_PROCESS_FUNC'=&gt;array('PHP函数名'=&gt;'描述')</p>"+'<p>如需扩展插件函数,可创建<a href="'+ulink('develop/func?module='+module)+'" target="_blank">函数插件</a></p>'}else if(module=='processIf'){tips='<p>选择函数,取反可获取函数结果的相反值</p>'+'<p>默认将当前字段作为参数传入,如需传入多个参数,一行一个值,可输入任何内容或调用字段</p>'+'<p>请按函数传参,否则运行出错!</p>'+'<p>如需扩展系统函数,请在根目录/data/config.php中添加配置</p>'+"<p>'EXTEND_PROCESS_IF'=&gt;array('PHP函数名'=&gt;'描述')</p>"+'<p>如需扩展插件函数,可创建<a href="'+ulink('develop/func?module=processIf')+'" target="_blank">函数插件</a></p>'}else if(module=='downloadImg'||module=='downloadFile'){window.open(ulink('develop/func?module='+module));return!1}
confirmRight({msg:tips,yes:'确定',width:500,textAlign:'left'})}};var collectorEchoMsg={config:{},processes:{},close_non_stop:!1,end_set_timeout:null,run:function(config){collectorEchoMsg.config=isObject(config)?config:{};collectorEchoMsg.processes={};collectorEchoMsg.close_non_stop=!1;var winParams=window.win_collector_window_params;winParams=isObject(winParams)?winParams:{};var uri=winParams.uri?winParams.uri:'';var uriVals=isObject(winParams.uriVals)?winParams.uriVals:{};var options=isObject(winParams.options)?winParams.options:{};var winProcessBox=$('#myModal #win_cem_process_box').clone();if(uri){var title=winParams.title+'<small style="margin-left:10px;">日志读取间隔<input type="number" class="form-control input-sm" style="display:inline;width:40px;height:20px;padding:1px 2px 1px 2px;margin:0px 3px 0px 3px;" id="win_cem_interval" value="'+collectorEchoMsg.get_interval()+'" />秒<button type="button" class="btn btn-default btn-xs" id="win_cem_interval_btn" style="margin-left:3px;">保存</button>';var closeFuncs=new Array();if(!isNull(options.close_func)){if(isObject(options.close_func)){closeFuncs=options.close_func}else{closeFuncs.push(options.close_func)}}
closeFuncs.push(function(){if(!collectorEchoMsg.close_non_stop){collectorEchoMsg.stop_all()}});options.close_func=closeFuncs;windowIframe(title,'',options);$('#myModal #myModalIframe').hide();$('#myModal #win_cem_interval_btn').bind('click',function(){collectorEchoMsg.set_interval($('#win_cem_interval').val())});var runUrl=ulink(uri,uriVals);ajaxOpen({type:'get',url:runUrl,dataType:'json',async:!0,success:function(data){if(data.code==1){var processes=data.data?data.data:{};var collectorKey=processes.collector_key?processes.collector_key:'';var processKeys=isObject(processes.process_keys)?processes.process_keys:[];var processNum=processKeys.length;if(!collectorKey||processNum<=0){return}
$('#myModal .modal-body').append(winProcessBox);if(processNum>1){$('#myModal .modal-body').addClass('win-cem-process-body')}
var processNavHtml='';for(var i=0;i<processNum;i++){processNavHtml+='<li><a href="javascript:;" data-collector-process="'+collectorKey+'-'+processKeys[i]+'">进程'+processKeys[i]+'</a></li>'}
@ -73,24 +82,23 @@ winBackstageTask.count();winBackstageTask.status()}})},init_tasks:function(taskT
if(!url){url=ulink('admin/backstage/backstageTask?op=collected&tid='+taskId)}
ajaxOpen({type:'get',dataType:'html',async:!0,url:url,success:function(data){$('#win_bk_collected_'+taskId).html(data)},complete:function(){if(!isNull(taskType)&&0==toInt(taskType)){winBackstageTask.collected_set_timeout=window.setTimeout(function(){var isEnd=$('#win_bk_tasks_box_0').find('a[href="#win_bk_collected_'+taskId+'"]').attr('data-is-end');var isVisible=$('#win_bk_tasks_box_0 #win_bk_collected_'+taskId).is(':visible');if(!isEnd&&isVisible){winBackstageTask.collected(taskId,taskType,url)}else{window.clearTimeout(winBackstageTask.collected_set_timeout)}},3000)}}})},init_collected:function(taskStatus,taskId){$('[id^="win_bk_collected_"] .pagination').addClass('pagination-sm');$('[id^="win_bk_collected_"] .pagination a').bind('click',function(){var curTaskId=$(this).parents('[id^="win_bk_collected_"]').eq(0).attr('data-task-id');var curTaskType=$(this).parents('[id^="win_bk_tasks_nav_"]').eq(0).attr('data-task-type');winBackstageTask.collected(curTaskId,curTaskType,$(this).attr('href'));return!1});if(taskStatus&&taskId){winBackstageTask.set_task_end(taskId,taskStatus);winBackstageTask.count();winBackstageTask.status()}},set_task_end:function(taskId,status){if(taskId&&status){$('#win_bk_tasks_box_0').find('a[href="#win_bk_collected_'+taskId+'"]').attr('data-is-end','1').find('.is_loading').html('<small>'+status+'</small>')}},status_set_timeout:null,status:function(isLoop){if(!isLoop){window.clearTimeout(winBackstageTask.status_set_timeout)}
var taskIds=[];$('#win_bk_tasks_box_0').find('[id^="win_bk_collected_"]').each(function(){var taskId=$(this).attr('data-task-id');taskIds.push(taskId)});if(taskIds.length>0){ajaxOpen({type:'post',dataType:'json',async:!0,data:{tids:taskIds},url:ulink('admin/backstage/backstageTask?op=status'),success:function(data){var statusList=data.data;if(isObject(statusList)){for(var tid in statusList){if(statusList[tid]){winBackstageTask.set_task_end(tid,statusList[tid])}}}
var isVisible=$('#win_bk_tasks_box_0').is(':visible');var isEnd=!0;$('#win_bk_tasks_box_0').find('a[href^="#win_bk_collected_"]').each(function(){if(!$(this).attr('data-is-end')){isEnd=!1;return!1}});if(!isEnd&&isVisible){winBackstageTask.status_set_timeout=window.setTimeout(function(){winBackstageTask.status(!0)},3000)}else{window.clearTimeout(winBackstageTask.status_set_timeout)}}})}}};function ajax_check_userpwd(ajaxSet){var oldSuccess=ajaxSet.success;ajaxSet.success=function(data){if(data.data&&data.data._check_pwd_){if(data.msg){toastr.error(data.msg)}
var msg='<div style="text-align:left;"><div style="margin-bottom:8px;">该操作需要验证您的登录密码</div>'+'<input class="form-control" type="password" id="confirm_ipt_check_pwd" placeholder="登录密码" />'+'<div class="checkbox" style="margin-bottom:0;"><label><input type="checkbox" value="1" id="confirm_ipt_check_skip" '+(admincpOp.getConfig('check_skip')?' checked="checked" ':'')+' /> 1小时内不再验证</label></div></div>';confirmRight({closeAfterFunc:!0,yes:'确定',no:'取消',msg:msg},function(){var ajaxSetData=isNull(ajaxSet.data)?{}:ajaxSet.data;var checkPwd=$('#confirm_ipt_check_pwd').val();var checkSkip=$('#confirm_ipt_check_skip').is(':checked')?1:'';if(typeof(ajaxSetData)=='object'){ajaxSetData._check_pwd_=checkPwd;ajaxSetData._check_skip_=checkSkip}else{ajaxSetData=ajaxSetData?(ajaxSetData+'&'):'';ajaxSetData+='_check_pwd_='+encodeURIComponent(checkPwd);ajaxSetData+='&_check_skip_='+encodeURIComponent(checkSkip)}
ajaxSet.data=ajaxSetData;ajaxSet.success=oldSuccess;ajax_check_userpwd(ajaxSet)});$('#confirm_ipt_check_skip').bind('click',function(){admincpOp.config('check_skip',$(this).is(':checked')?1:0)});$('body').on('keyup','#confirm_ipt_check_pwd',function(event){if(event.keyCode=="13"){$('#confirm_right .cr-btn-yes').trigger("click")}})}else{if(oldSuccess&&typeof(oldSuccess)=='function'){oldSuccess(data)}}};ajaxOpen(ajaxSet)}
function editorCodeIfr(ifrEle,options){options=isObject(options)?options:{};if(options.set_value!=null&&typeof(options.set_value)!='undefined'){$(document).ready(function(){$(ifrEle).attr('src','');$(ifrEle).attr('src',ulink('develop/editor_code'));$(ifrEle).off('load').bind('load',function(){if(options.set_value&&$(ifrEle)[0].contentWindow.editor_code_op){$(ifrEle)[0].contentWindow.editor_code_op.set(options.set_value)}})})}else if(options.get_value){var ifrEle=$(ifrEle)[0];var val='';if(ifrEle&&ifrEle.contentWindow.editor_code_op){val=ifrEle.contentWindow.editor_code_op.get()}
return val}}
var ruleInsertSign={match:function(toObj,options){if(!options){options={}}
var isVisible=$('#win_bk_tasks_box_0').is(':visible');var isEnd=!0;$('#win_bk_tasks_box_0').find('a[href^="#win_bk_collected_"]').each(function(){if(!$(this).attr('data-is-end')){isEnd=!1;return!1}});if(!isEnd&&isVisible){winBackstageTask.status_set_timeout=window.setTimeout(function(){winBackstageTask.status(!0)},3000)}else{window.clearTimeout(winBackstageTask.status_set_timeout)}}})}}};var ruleInsertSign={match:function(toObj,options){if(!options){options={}}
var sign=window.tpl_lang.sign_match;var group='(?<nr{:id}>[\\s\\S]*?)';if(options.only){sign=sign.replace('{:id}','');var curVal=$(toObj).val();if(curVal.indexOf(sign)<0&&curVal.indexOf('(?<nr>')<0&&curVal.indexOf('(?<content>')<0){if(options.group){sign=group.replace('{:id}','')}
insertAtCaret($(toObj),sign)}else{toastr.error('存在'+sign+'或捕获组')}}else{var regSign=new RegExp(sign.replace('{:id}','(\\w*)').replace('[','\\[').replace(']','\\]'),'g');var regZimu=new RegExp("^([a-zA-Z]+)(\\d+)$",'i');var regP=new RegExp("\\(\\?<(?:content|nr)(\\w*)>",'g');var list=null;var max=0;var zm='';while((list=regSign.exec($(toObj).val()))!=null){var num=0;if(options.zimu){var zimu=regZimu.exec(list[1]);if(zimu){zm=zimu[1];num=parseInt(zimu[2])}}else{num=parseInt(list[1])}
globalOp.insertAtCaret($(toObj),sign)}else{toastr.error('存在'+sign+'或捕获组')}}else{var regSign=new RegExp(sign.replace('{:id}','(\\w*)').replace('[','\\[').replace(']','\\]'),'g');var regZimu=new RegExp("^([a-zA-Z]+)(\\d+)$",'i');var regP=new RegExp("\\(\\?<(?:content|nr)(\\w*)>",'g');var list=null;var max=0;var zm='';while((list=regSign.exec($(toObj).val()))!=null){var num=0;if(options.zimu){var zimu=regZimu.exec(list[1]);if(zimu){zm=zimu[1];num=parseInt(zimu[2])}}else{num=parseInt(list[1])}
if(num>max){max=num}}
list=null;while((list=regP.exec($(toObj).val()))!=null){var num=0;if(options.zimu){var zimu=regZimu.exec(list[1]);if(zimu){zm=zimu[1];num=parseInt(zimu[2])}}else{num=parseInt(list[1])}
if(num>max){max=num}}
if(options.group){sign=group}
var signId='';if(options.zimu){if(!zm){var ranNum=Math.ceil(Math.random()*25);zm=String.fromCharCode(('A').charCodeAt(0)+ranNum);ranNum=Math.ceil(Math.random()*25);zm+=String.fromCharCode(('a').charCodeAt(0)+ranNum)}
signId=zm+(max+1)}else{signId=max+1}
sign=sign.replace('{:id}',signId);insertAtCaret($(toObj),sign)}},matchN:function(fromObj,toObj,options){if(!options){options={}}
sign=sign.replace('{:id}',signId);globalOp.insertAtCaret($(toObj),sign)}},matchN:function(fromObj,toObj,options){if(!options){options={}}
var sign=window.tpl_lang.sign_match;var rule='';if(fromObj){rule=$(fromObj).val()}else if(options.rule){rule=options.rule}
var reP=new RegExp("\\(\\?<(?:content|nr)(\\w*)>.*?\\)",'g');rule=rule.replace(reP,sign.replace('{:id}',"$1"));var regSign=new RegExp(sign.replace('{:id}','(\\w*)').replace('[','\\[').replace(']','\\]'),'g');var list=null;var hasSign=!1;var returnList=new Array();while((list=regSign.exec(rule))!=null){hasSign=!0;var each=list[0];if(!toObj){returnList.push(each)}else if($(toObj).is('select')){if($(toObj).find('option[value="'+each+'"]').length<=0){$(toObj).append('<option value="'+each+'">'+each+'</option>')}}else{if($(toObj).val().indexOf(each)<0){insertAtCaret($(toObj),each)}}}
if(!hasSign){if(options.def){sign=sign.replace('{:id}','');if(!toObj){returnList.push(sign)}else if($(toObj).is('select')){if($(toObj).find('option[value="'+sign+'"]').length<=0){$(toObj).append('<option value="'+sign+'">'+sign+'</option>')}}else{if($(toObj).val().indexOf(sign)<0){insertAtCaret($(toObj),sign)}}}}
var reP=new RegExp("\\(\\?<(?:content|nr)(\\w*)>.*?\\)",'g');rule=rule.replace(reP,sign.replace('{:id}',"$1"));var regSign=new RegExp(sign.replace('{:id}','(\\w*)').replace('[','\\[').replace(']','\\]'),'g');var list=null;var hasSign=!1;var returnList=new Array();while((list=regSign.exec(rule))!=null){hasSign=!0;var each=list[0];if(!toObj){returnList.push(each)}else if($(toObj).is('select')){if($(toObj).find('option[value="'+each+'"]').length<=0){$(toObj).append('<option value="'+each+'">'+each+'</option>')}}else{if($(toObj).val().indexOf(each)<0){globalOp.insertAtCaret($(toObj),each)}}}
if(!hasSign){if(options.def){sign=sign.replace('{:id}','');if(!toObj){returnList.push(sign)}else if($(toObj).is('select')){if($(toObj).find('option[value="'+sign+'"]').length<=0){$(toObj).append('<option value="'+sign+'">'+sign+'</option>')}}else{if($(toObj).val().indexOf(sign)<0){globalOp.insertAtCaret($(toObj),sign)}}}}
if(!toObj){return returnList}},wildcard:function(toObj,options){if(!options){options={}}
var wildcard=window.tpl_lang.sign_wildcard;if(options.only){if($(toObj).val().indexOf(wildcard)<0){insertAtCaret($(toObj),wildcard)}}else{insertAtCaret($(toObj),wildcard)}},tips:function(isPage,isPn){isPage=isPage==1?true:!1;isPn=isPn==1?true:!1;var tips='<p>1、规则中的特殊字符<b>^$.*+|?[]{}()</b> 必须加上“\\”才能转义为字符,否则会识别为正则符号</p><p>2、[内容]标签的标识可由数字、字母及下划线组成</p>';if(isPage){if(isPn){tips+='<p>3、分页[内容]标签不可全局调用,只能在当前分页中调用</p>'}else{tips+='<p>3、页面级别多级页 &gt; 多级页子页 &gt; 内容页 &gt; 关联页 &gt; 关联页子页</p>';tips+='<p>4、[内容]标签可全局调用,但只能调用比自己级别高的页面中的标签,即内容页可调用多级页中的标签而不能调用关联页中的标签</p>';tips+='<p>5、同一页面中有相同标识的[内容]标签时,后面的标签会覆盖前面的同名标签。不同页面中有相同标识的[内容]标签时,低级别页面会覆盖高级别页面中的同名标签</p>'}}
confirmRight({msg:tips,yes:'确定',width:500,textAlign:'left'})},tool_tips:function(){var tips='<p>规则中的特殊字符:<b>^$.*+|?[]{}()</b> 必须加上“\\”才能转义为字符,否则会识别为正则符号</p>';confirmRight({msg:tips,yes:'确定',width:500,textAlign:'left'})}}
var wildcard=window.tpl_lang.sign_wildcard;if(options.only){if($(toObj).val().indexOf(wildcard)<0){globalOp.insertAtCaret($(toObj),wildcard)}}else{globalOp.insertAtCaret($(toObj),wildcard)}},tips:function(isPage,isPn){isPage=isPage==1?true:!1;isPn=isPn==1?true:!1;var tips='<p>1、规则中的特殊字符<b>^$.*+|?[]{}()</b> 必须加上“\\”才能转义为字符,否则会识别为正则符号</p><p>2、[内容]标签的标识可由数字、字母及下划线组成</p>';if(isPage){if(isPn){tips+='<p>3、分页[内容]标签不可全局调用,只能在当前分页中调用</p>'}else{tips+='<p>3、页面级别多级页 &gt; 多级页子页 &gt; 内容页 &gt; 关联页 &gt; 关联页子页</p>';tips+='<p>4、[内容]标签可全局调用,但只能调用比自己级别高的页面中的标签,即内容页可调用多级页中的标签而不能调用关联页中的标签</p>';tips+='<p>5、同一页面中有相同标识的[内容]标签时,后面的标签会覆盖前面的同名标签。不同页面中有相同标识的[内容]标签时,低级别页面会覆盖高级别页面中的同名标签</p>'}}
confirmRight({msg:tips,yes:'确定',width:500,textAlign:'left'})},tool_tips:function(){var tips='<p>规则中的特殊字符:<b>^$.*+|?[]{}()</b> 必须加上“\\”才能转义为字符,否则会识别为正则符号</p>';confirmRight({msg:tips,yes:'确定',width:500,textAlign:'left'})},cpDelimiterTips:function(){var tips='<p>如需使用换行符,请注意区别:</p><p>文本换行符:<b>\\r\\n</b>(适用于系统文件中)</p><p>标签换行符:<b>&lt;br /&gt;</b>适用于网页HTML中</p>';confirmRight({msg:tips,yes:'确定',width:350,textAlign:'left'})},cpRuleModuleInit:function(boxId,name,namePre){namePre=namePre?namePre:'';var isProcess=(name=='data-process')?true:!1;if(isProcess){$(boxId).on('change','[data-process="'+namePre+'rule_multi"]',function(){var prt=$(this).parents('.process-extract-module').eq(0);if($(this).is(':checked')){prt.find('.process-extract-rule-multi-str').show()}else{prt.find('.process-extract-rule-multi-str').hide()}});globalOp.inputSelectCustom(null,null,{box:boxId,slt:'[data-process="'+namePre+'xpath_attr"]',ipt:'[data-process="'+namePre+'xpath_attr_custom"]'});$(boxId).on('change','[data-process="'+namePre+'xpath_multi"]',function(){var prt=$(this).parents('.process-extract-module').eq(0);if($(this).is(':checked')){prt.find('.process-extract-xpath-multi-str').show()}else{prt.find('.process-extract-xpath-multi-str').hide()}});$(boxId).on('change','select[data-process="'+namePre+'json_arr"]',function(){var prt=$(this).parents('.process-extract-module').eq(0);if($(this).val()=='implode'){prt.find('.process-extract-json-arr-implode').show()}else{prt.find('.process-extract-json-arr-implode').hide()}});$(boxId).off('click','a[data-rule-sign]').on('click','a[data-rule-sign]',function(){var prt=$(this).parents('.process-extract-module').eq(0);var obj=prt.find('[data-process$="rule"]');var ruleSign=$(this).attr('data-rule-sign');if(ruleSign=='sign_wildcard'){ruleInsertSign.wildcard(obj)}else if(ruleSign=='sign_match'){ruleInsertSign.match(obj)}else if(ruleSign=='sign_group'){ruleInsertSign.match(obj,{group:1})}else if(ruleSign=='sign_match_n'){var ruleMerge=prt.find('[data-process$="rule_merge"]');ruleInsertSign.matchN(obj,ruleMerge,{def:1})}})}else{var idPre=' #c_p_'+name+'_'+namePre;idPre=idPre.replace(/[\[\]]/g,'_');$(boxId+' [name="'+name+'['+namePre+'rule_multi]"]').bind('change',function(){if($(this).is(':checked')){$(boxId+idPre+'rule_multi_str').show()}else{$(boxId+idPre+'rule_multi_str').hide()}});$(boxId+' [name="'+name+'['+namePre+'rule_multi_type]"]').bind('change',function(){if($(this).val()=='loop'){$(boxId+idPre+'rule_multi_str').find('.box-rule-multi-str').hide()}else{$(boxId+idPre+'rule_multi_str').find('.box-rule-multi-str').show()}});globalOp.inputSelectCustom(boxId+' select[name="'+name+'['+namePre+'xpath_attr]"]',name+'['+namePre+'xpath_attr_custom]');$(boxId+' [name="'+name+'['+namePre+'xpath_multi]"]').bind('change',function(){if($(this).is(':checked')){$(boxId+idPre+'xpath_multi_str').show()}else{$(boxId+idPre+'xpath_multi_str').hide()}});$(boxId+' [name="'+name+'['+namePre+'xpath_multi_type]"]').bind('change',function(){if($(this).val()=='loop'){$(boxId+idPre+'xpath_multi_str').find('.box-xpath-multi-str').hide()}else{$(boxId+idPre+'xpath_multi_str').find('.box-xpath-multi-str').show()}});$(boxId+' select[name="'+name+'['+namePre+'json_arr]"]').bind('change',function(){if($(this).val()=='implode'){$(boxId+idPre+'json_arr_implode').show()}else{$(boxId+idPre+'json_arr_implode').hide()}})}},cpRuleModuleLoad:function(boxId,name,namePre,config){namePre=namePre?namePre:'';if(isObject(config)){$(boxId+' [name="'+name+'['+namePre+'rule]"]').val(config[namePre+'rule']);$(boxId+' [name="'+name+'['+namePre+'rule_merge]"]').val(config[namePre+'rule_merge']);if(config[namePre+'rule_multi']){$(boxId+' [name="'+name+'['+namePre+'rule_multi]"]').prop('checked',!0).trigger('change')}
$(boxId+' [name="'+name+'['+namePre+'rule_multi_type]"]').val(config[namePre+'rule_multi_type']).trigger('click');$(boxId+' [name="'+name+'['+namePre+'rule_multi_str]"]').val(config[namePre+'rule_multi_str']);$(boxId+' [name="'+name+'['+namePre+'xpath]"]').val(config[namePre+'xpath']);$(boxId+' [name="'+name+'['+namePre+'xpath_attr]"]').val(config[namePre+'xpath_attr']).trigger('change');$(boxId+' [name="'+name+'['+namePre+'xpath_attr_custom]"]').val(config[namePre+'xpath_attr_custom']);if(config[namePre+'xpath_multi']){$(boxId+' [name="'+name+'['+namePre+'xpath_multi]"]').prop('checked',!0).trigger('change')}
$(boxId+' [name="'+name+'['+namePre+'xpath_multi_type]"]').val(config[namePre+'xpath_multi_type']).trigger('click');$(boxId+' [name="'+name+'['+namePre+'xpath_multi_str]"]').val(config[namePre+'xpath_multi_str']);$(boxId+' [name="'+name+'['+namePre+'json]"]').val(config[namePre+'json']);if(config[namePre+'json_loop']){$(boxId+' [name="'+name+'['+namePre+'json_loop]"]').prop('checked',!0)}
if(config[namePre+'json_arr']){$(boxId+' [name="'+name+'['+namePre+'json_arr]"]').val(config[namePre+'json_arr']).trigger('change')}
$(boxId+' [name="'+name+'['+namePre+'json_arr_implode]"]').val(config[namePre+'json_arr_implode'])}}}

View File

@ -8,5 +8,5 @@
|--------------------------------------------------------------------------
*/
'use strict';function AppClass(){}
AppClass.prototype={constructor:AppClass,init_list:function(){var $_o=this;$(document).ready(function(){$('#app_list').on('click','.install',function(){var obj=$(this);var parent=obj.parents('tr[data-app]');var app=parent.attr('data-app');if(parent.attr('data-agreement')){windowModal('协议',ulink('admin/app/agreement?app=_app_',{'_app_':app}))}else{confirmRight('是否安装?',function(){windowModal('正在安装...',ulink('admin/app/install?app=_app_',{'_app_':app}))})}});$('#app_list').on('click','.uninstall',function(){var obj=$(this);confirmRight('卸载会清理相关数据,确定卸载?',function(){var app=obj.parents('tr[data-app]').attr('data-app');windowModal('正在卸载...',ulink('admin/app/uninstall?app=_app_',{'_app_':app}))})});$('#app_list').on('click','.upgrade',function(){var obj=$(this);confirmRight('确定升级至新版本?',function(){var app=obj.parents('tr[data-app]').attr('data-app');windowModal('正在升级...',ulink('admin/app/upgrade?app=_app_',{'_app_':app}))})});$('#app_list').on('click','.enable',function(){var app=$(this).parents('tr[data-app]').attr('data-app');var enable=$(this).attr('data-enable');enable=parseInt(enable);enable=enable>0?0:1;windowModal((enable?'开启':'关闭')+'应用',ulink('admin/app/enable?app=_app_&enable=_enable_',{'_app_':app,'_enable_':enable}))});$('#app_list').on('click','.store-detail',function(){openStoreUrl($(this).attr('data-url'))});$('#app_list').on('click','.nav-packs a',function(){if($(this).attr('target')=='_blank'){var url=$(this).attr('data-url');if(url){window.open(url,'_blank');return!1}}});$("[data-toggle='popover']").popover();if($('#auto_check').is(':checked')){$_o.check_update()}
AppClass.prototype={constructor:AppClass,init_list:function(){var $_o=this;$(document).ready(function(){$('#app_list').on('click','.install',function(){var obj=$(this);var parent=obj.parents('tr[data-app]');var app=parent.attr('data-app');if(parent.attr('data-agreement')){windowModal('协议',ulink('admin/app/agreement?app=_app_',{'_app_':app}))}else{confirmRight('是否安装?',function(){windowModal('正在安装...',ulink('admin/app/install?app=_app_',{'_app_':app}))})}});$('#app_list').on('click','.uninstall',function(){var obj=$(this);confirmRight('卸载会清理相关数据,确定卸载?',function(){var app=obj.parents('tr[data-app]').attr('data-app');windowModal('正在卸载...',ulink('admin/app/uninstall?app=_app_',{'_app_':app}))})});$('#app_list').on('click','.upgrade',function(){var obj=$(this);confirmRight('确定升级至新版本?',function(){var app=obj.parents('tr[data-app]').attr('data-app');windowModal('正在升级...',ulink('admin/app/upgrade?app=_app_',{'_app_':app}))})});$('#app_list').on('click','.enable',function(){var app=$(this).parents('tr[data-app]').attr('data-app');var enable=$(this).attr('data-enable');enable=parseInt(enable);enable=enable>0?0:1;windowModal((enable?'开启':'关闭')+'应用',ulink('admin/app/enable?app=_app_&enable=_enable_',{'_app_':app,'_enable_':enable}))});$('#app_list').on('click','.store-detail',function(){globalOp.openStoreUrl($(this).attr('data-url'))});$('#app_list').on('click','.nav-packs a',function(){if($(this).attr('target')=='_blank'){var url=$(this).attr('data-url');if(url){window.open(url,'_blank');return!1}}});$("[data-toggle='popover']").popover();if($('#auto_check').is(':checked')){$_o.check_update()}
$('#auto_check').bind('click',function(){var auto=$(this).is(':checked')?1:0;ajaxOpen({type:"GET",url:ulink('mystore/appOp?op=auto_check&auto='+auto),dataType:"json",success:function(data){data.code==1?toastr.success(data.msg):toastr.error(data.msg)}})});$('#btn_check').bind('click',function(){$_o.check_update()})})},init_manage:function(){$('.manage-nav a').bind('click',function(){if($(this).attr('target')=='_blank'){var url=$(this).attr('data-url');if(url){window.open(url,'_blank');return!1}}});$('#newest_version').bind('click',function(){var obj=$(this);confirmRight('确定升级至新版本?',function(){var app=obj.attr('data-app');windowModal('正在升级...',ulink('admin/app/upgrade?app=_app_',{'_app_':app}))})});$('#enable').bind('click',function(){var app=$(this).attr('data-app');var enable=$(this).attr('data-enable');enable=parseInt(enable);enable=enable>0?0:1;windowModal((enable?'开启':'关闭')+'应用',ulink('admin/app/enable?app=_app_&enable=_enable_',{'_app_':app,'_enable_':enable}))});if(document.getElementById('iframe_main')){var boxHeight=$(window).height()-$('.main-header').height();$('.content').height(boxHeight+'px');boxHeight=boxHeight-$('.content .manage-nav').height();$('.content .manage-wrap').height(boxHeight);$('#iframe_main').on('load',function(){$('.iframe-loading').remove();$(this).show()})}},check_update:function(){var apps=new Array();$('#app_list').find('tr[data-app]').each(function(){apps.push($(this).attr('data-app'))});if(apps.length>0){$('#btn_check').html('检测更新 <div class="loading-sm" style="position:absolute;top:2px;right:-15px;"></div>');$('.store-detail').find('.new-version').remove();ajaxOpen({type:"get",url:ulink('mystore/appOp?op=check_store_update'),dataType:"json",async:!0,data:{apps:apps},success:function(data){if(data.code==1&&data.data){for(var i in data.data){var app=data.data[i];var storeDetail=$('tr[data-app="'+app+'"]').find('.store-detail');storeDetail.append('<span class="new-version">新</span>')}}},complete:function(){$('#btn_check').html('检测更新')}})}},};var appClass=new AppClass()

View File

@ -8,50 +8,51 @@
|--------------------------------------------------------------------------
*/
'use strict';function CollectorPattern(){this.formid='#form_coll';this.cpFrontUrl=null;this.cpLevelUrl=null;this.cpRelationUrl=null;this.cpUrlWeb=null;this.cpRenderer=null;this.cpContentSign=null;this.cpPagination=null;this.cpField=null;this.cpProcess=null}
CollectorPattern.prototype={constructor:CollectorPattern,init:function(){var $_o=this;$($_o.formid).bind('submit',function(){$('#coll_tab_content').find('.tab-pane[id^="coll_pattern_"]').each(function(){if($(this).hasClass('active')){$($_o.formid+' [name="tab_link"]').val($(this).attr('id'));return}});var settings=getFormAjaxSettings($(this));settings.data={'_post_data_':settings.data};ajaxOpen(settings);return!1});$_o.cpFrontUrl=new CpFrontUrl($_o);$_o.cpLevelUrl=new CpLevelUrl($_o);$_o.cpRelationUrl=new CpRelationUrl($_o);$_o.cpUrlWeb=new CpUrlWeb($_o);$_o.cpRenderer=new CpRenderer($_o);$_o.cpContentSign=new CpContentSign($_o);$_o.cpPagination=new CpPagination($_o);$_o.cpField=new CpField($_o);$_o.cpProcess=new CpProcess($_o);inputSelectCustom($_o.formid+' select[name="config[charset]"]','config[charset_custom]',null,null,function(){$_o.cpUrlWeb.def_config_charset('')});inputSelectCustom($_o.formid+' select[name="config[encode]"]','config[encode_custom]',null,null,function(){$_o.cpUrlWeb.def_config_encode('')});$($_o.formid+' [name="config[page_render]"]').bind('click',function(){$_o.cpRenderer.def_config_renderer_open('')});$($_o.formid+' [name="config[request_headers][open]"]').bind('click',function(){$_o.cpUrlWeb.def_config_header_global('')});$($_o.formid+' #coll_pattern_request_headers .dm-useragent li a').bind('click',function(){$($_o.formid+' [name="config[request_headers][useragent]"]').val($(this).attr('data-useragent'))});$($_o.formid+' #coll_pattern_request_headers .add-request-header').bind('click',function(){$_o.add_request_header('','')});$($_o.formid+' #coll_pattern_request_headers .add-request-header-img').bind('click',function(){$_o.add_request_header_img('','')});$($_o.formid+' #coll_pattern_request_headers .add-request-header-file').bind('click',function(){$_o.add_request_header_file('','')});$($_o.formid+' .c-p-request-headers').on('click','.delete-request-header',function(){var curObj=$(this);confirmRight('确定删除?',function(){curObj.parents('tr').eq(0).remove()})});$($_o.formid+' .c-p-request-headers-img').on('click','.delete-request-header-img',function(){var curObj=$(this);confirmRight('确定删除?',function(){curObj.parents('tr').eq(0).remove()})});$($_o.formid+' .c-p-request-headers-file').on('click','.delete-request-header-file',function(){var curObj=$(this);confirmRight('确定删除?',function(){curObj.parents('tr').eq(0).remove()})});$_o.init_page_list_op('front_url');$(this.formid+' #coll_pattern_source_url .add-source-url').bind('click',function(){windowModal('添加起始网址',ulink("cpattern/source"),{lg:1})});$(this.formid+' #coll_pattern_source_url .clear-source-url').bind('click',function(){$_o.source_op('clear_all')});$(this.formid+' #coll_pattern_source_url').on('click','.edit-source-url',function(){var parent=$(this).parents('[id^="source_url_"]').eq(0);var objid=parent.attr('id');var sourceUrl=parent.find('[name="config[source_url][]"]').val();sourceUrl=sourceUrl?sourceUrl:'';var url=ulink("cpattern/source");var options={lg:1};if(objid||sourceUrl){options.ajax={type:'post',data:{'source_url':sourceUrl,'objid':objid}}}
windowModal('添加起始网址',url,options)});$(this.formid+' #coll_pattern_source_url').on('click','.delete-source-url',function(){var obj=$(this);confirmRight(window.tpl_lang.confirm_delete,function(){obj.parents('[id^="source_url_"]').eq(0).remove()})});eleExchange(this.formid+' #coll_pattern_source_url','.icon-drag-move','[id^="source_url_"]');$(this.formid+' [name="config[source_is_url]"]').bind('click',function(){if($_o.source_is_url()){$('#coll_pattern_source_url').css('margin-bottom','0px');$('#alert_coll_pattern_link').show();$('#panel_coll_pattern_source_url_web').hide();$('#panel_coll_pattern_source_url_renderer').hide();$('#panel_coll_pattern_source_url_content_sign').hide();$('#panel_coll_pattern_source_url_pagination').hide();$('#panel_coll_pattern_level_url').hide();$('#panel_coll_pattern_url_content_sign').siblings('.panel').hide();$('#panel_coll_pattern_url_web').show();$('#panel_coll_pattern_url_renderer').show()}else{$('#coll_pattern_source_url').css('margin-bottom','15px');$('#alert_coll_pattern_link').hide();$('#panel_coll_pattern_source_url_web').show();$('#panel_coll_pattern_source_url_renderer').show();$('#panel_coll_pattern_source_url_content_sign').show();$('#panel_coll_pattern_source_url_pagination').show();$('#panel_coll_pattern_level_url').show();$('#panel_coll_pattern_url_content_sign').siblings('.panel').show()}});$_o.init_page('source_url');$_o.init_page('url');$($_o.formid).on('click','.c-p-url-page-signs .btn-page-signs',function(){$_o.parent_page_signs(this)});$_o.init_page_list_op('level_url');$_o.init_page_list_op('relation_url');$(this.formid+' #coll_pattern_field').on('click','.add-field',function(){$_o.field_editor(null,null)});$(this.formid+' #coll_pattern_field').on('click','.field-name',function(){$_o.field_editor($(this),null)});$(this.formid+' #coll_pattern_field').on('click','.add-field-default',function(){$_o.cpField.add_default()});$(this.formid+' #coll_pattern_field').on('click','.sort-field',function(){var fieldNames=$_o.get_field_names(!0);for(var i in fieldNames){var fieldTr=$($_o.formid+' #coll_pattern_field').find('.field-name[data-val="'+fieldNames[i]+'"]').parents('tr[id^="field_"]').eq(0);if(fieldTr.length>0){$($_o.formid+' #coll_pattern_field .c-p-field-list tbody').append(fieldTr)}}
toastr.success('调整完成')});$(this.formid+' #coll_pattern_field').on('click','.field-del',function(){var obj=$(this);confirmRight(window.tpl_lang.confirm_delete,function(){$_o.field_delete_tr(obj)})});$(this.formid+' #coll_pattern_field').on('click','.field-clone',function(){var tr=$(this).parents('tr[id^="field_"]').eq(0);var field=tr.find('[name="config[field_list][]"]').val();var process=tr.find('[name="config[field_process][]"]').val();confirmRight('确定复制字段?',function(){ajaxOpen({type:'POST',dataType:'json',url:ulink("cpattern/clone_field"),data:{field:field,process:process},success:function(data){if(data.code==1){data=data.data;var hasField=!1;do{data.field.name+='_1';hasField=$('#coll_pattern_field .c-p-field-list').find('.field-name[data-val="'+data.field.name+'"]');if(hasField&&hasField.length>0){hasField=!0}else{hasField=!1}}while(hasField);$_o.cpField.add(null,data.field,data.process);toastr.success('字段复制成功:'+data.field.name)}else{toastr.error(data.msg)}}})})});$(this.formid+' #coll_pattern_field').on('click','.field-process',function(){var process=$(this).parent().find('input[name="config[field_process][]"]').val();var prt=$(this).parents('tr[id^="field_"]').eq(0);var objid=prt.attr('id');var field=prt.find('.field-name').attr('data-val');var url=ulink("cpattern/process?task_id=_tid_&field=_field_",{'_tid_':$_o.get_task_id(),'_field_':field});windowModal('数据处理:'+field+'<small><a href="javascript:;" id="window_process_paste" title="粘贴" class="glyphicon glyphicon-paste" style="margin-left:7px;color:#888;"></a></small>',url,{lg:1,ajax:{type:'post',data:{objid:objid,process:process}}});$_o.process_paste()});$(this.formid+' #coll_pattern_process').on('click','.add-process',function(){var url=ulink("cpattern/process?task_id=_tid_&type=common",{'_tid_':$_o.get_task_id()});windowModal('数据处理(通用)<small><a href="javascript:;" id="window_process_paste" title="粘贴" class="glyphicon glyphicon-paste" style="color:#888;"></a></small>',url,{lg:1});$_o.process_paste()});eleExchange(this.formid+' #coll_pattern_field','.icon-drag-move','tr[id^="field_"]');$(this.formid+' [name="effective"]').val(1)},init_test:function(){var $_o=this;$_o.formid='#win_form_cache';$_o.cpUrlWeb=new CpUrlWeb($_o);$_o.cpRenderer=new CpRenderer($_o);$_o.cpUrlWeb.page_init('test');$_o.cpRenderer.page_init('test')},init_echo_url_msg:function(dataUrlWeb,dataRenderer){this.init_test();if(!isObject(dataUrlWeb)){dataUrlWeb={}}
CollectorPattern.prototype={constructor:CollectorPattern,init:function(){var $_o=this;$($_o.formid).bind('submit',function(){$('#coll_tab_content').find('.tab-pane[id^="coll_pattern_"]').each(function(){if($(this).hasClass('active')){$($_o.formid+' [name="tab_link"]').val($(this).attr('id'));return}});var settings=getFormAjaxSettings($(this));settings.data={'_post_data_':settings.data};ajaxOpen(settings);return!1});$_o.cpFrontUrl=new CpFrontUrl($_o);$_o.cpLevelUrl=new CpLevelUrl($_o);$_o.cpRelationUrl=new CpRelationUrl($_o);$_o.cpUrlWeb=new CpUrlWeb($_o);$_o.cpRenderer=new CpRenderer($_o);$_o.cpContentSign=new CpContentSign($_o);$_o.cpPagination=new CpPagination($_o);$_o.cpField=new CpField($_o);$_o.cpProcess=new CpProcess($_o);globalOp.inputSelectCustom($_o.formid+' select[name="config[charset]"]','config[charset_custom]',null,null,function(){$_o.cpUrlWeb.def_config_charset('')});globalOp.inputSelectCustom($_o.formid+' select[name="config[encode]"]','config[encode_custom]',null,null,function(){$_o.cpUrlWeb.def_config_encode('')});$($_o.formid+' [name="config[page_render]"]').bind('click',function(){$_o.cpRenderer.def_config_renderer_open('')});$($_o.formid+' [name="config[request_headers][open]"]').bind('click',function(){$_o.cpUrlWeb.def_config_header_global('')});$($_o.formid+' #coll_pattern_request_headers .dm-useragent li a').bind('click',function(){$($_o.formid+' [name="config[request_headers][useragent]"]').val($(this).attr('data-useragent'))});$($_o.formid+' #coll_pattern_request_headers .add-request-header').bind('click',function(){$_o.add_request_header('','')});$($_o.formid+' #coll_pattern_request_headers .add-request-header-img').bind('click',function(){$_o.add_request_header_img('','')});$($_o.formid+' #coll_pattern_request_headers .add-request-header-file').bind('click',function(){$_o.add_request_header_file('','')});$($_o.formid+' .c-p-request-headers').on('click','.delete-request-header',function(){var curObj=$(this);confirmRight('确定删除?',function(){curObj.parents('tr').eq(0).remove()})});$($_o.formid+' .c-p-request-headers-img').on('click','.delete-request-header-img',function(){var curObj=$(this);confirmRight('确定删除?',function(){curObj.parents('tr').eq(0).remove()})});$($_o.formid+' .c-p-request-headers-file').on('click','.delete-request-header-file',function(){var curObj=$(this);confirmRight('确定删除?',function(){curObj.parents('tr').eq(0).remove()})});$_o.init_page_list_op('front_url');$(this.formid+' #coll_pattern_source_url .add-source-url').bind('click',function(){windowModal('添加起始网址',ulink("cpattern/source"),{lg:1})});$(this.formid+' #coll_pattern_source_url .clear-source-url').bind('click',function(){$_o.source_op('clear_all')});$(this.formid+' #coll_pattern_source_url').on('click','.edit-source-url',function(){var parent=$(this).parents('[id^="source_url_"]').eq(0);var objid=parent.attr('id');var sourceUrl=parent.find('[name="config[source_url][]"]').val();sourceUrl=sourceUrl?sourceUrl:'';var url=ulink("cpattern/source");var options={lg:1};if(objid||sourceUrl){options.ajax={type:'post',data:{'source_url':sourceUrl,'objid':objid}}}
windowModal('添加起始网址',url,options)});$(this.formid+' #coll_pattern_source_url').on('click','.delete-source-url',function(){var obj=$(this);confirmRight(window.tpl_lang.confirm_delete,function(){obj.parents('[id^="source_url_"]').eq(0).remove()})});globalOp.eleExchange(this.formid+' #coll_pattern_source_url','.icon-drag-move','[id^="source_url_"]');$(this.formid+' [name="config[source_is_url]"]').bind('click',function(){if($_o.source_is_url()){$('#coll_pattern_source_url').css('margin-bottom','0px');$('#alert_coll_pattern_link').show();$('#panel_coll_pattern_source_url_web').hide();$('#panel_coll_pattern_source_url_renderer').hide();$('#panel_coll_pattern_source_url_content_sign').hide();$('#panel_coll_pattern_source_url_pagination').hide();$('#panel_coll_pattern_level_url').hide();$('#panel_coll_pattern_url_content_sign').siblings('.panel').hide();$('#panel_coll_pattern_url_web').show();$('#panel_coll_pattern_url_renderer').show()}else{$('#coll_pattern_source_url').css('margin-bottom','15px');$('#alert_coll_pattern_link').hide();$('#panel_coll_pattern_source_url_web').show();$('#panel_coll_pattern_source_url_renderer').show();$('#panel_coll_pattern_source_url_content_sign').show();$('#panel_coll_pattern_source_url_pagination').show();$('#panel_coll_pattern_level_url').show();$('#panel_coll_pattern_url_content_sign').siblings('.panel').show()}});$_o.init_page('source_url');$_o.init_page('url');$($_o.formid).on('click','.c-p-url-page-signs .btn-page-signs',function(){$_o.parent_page_signs(this)});$_o.init_page_list_op('level_url');$_o.init_page_list_op('relation_url');$(this.formid+' #coll_pattern_field').on('click','.add-field',function(){$_o.field_editor(null,null)});$(this.formid+' #coll_pattern_field').on('click','.field-name',function(){$_o.field_editor($(this),null)});$(this.formid+' #coll_pattern_field').on('click','.add-field-default',function(){$_o.cpField.add_default()});$(this.formid+' #coll_pattern_field').on('click','.sort-field',function(){var fieldNames=$_o.get_field_names(!0);for(var i in fieldNames){var fieldTr=$($_o.formid+' #coll_pattern_field').find('.field-name[data-val="'+fieldNames[i]+'"]').parents('tr[id^="field_"]').eq(0);if(fieldTr.length>0){$($_o.formid+' #coll_pattern_field .c-p-field-list tbody').append(fieldTr)}}
toastr.success('调整完成')});$(this.formid+' #coll_pattern_field').on('click','.field-del',function(){var obj=$(this);confirmRight(window.tpl_lang.confirm_delete,function(){$_o.field_delete_tr(obj)})});$(this.formid+' #coll_pattern_field').on('click','.field-clone',function(){var tr=$(this).parents('tr[id^="field_"]').eq(0);var field=tr.find('[name="config[field_list][]"]').val();var process=tr.find('[name="config[field_process][]"]').val();confirmRight('确定复制字段?',function(){ajaxOpen({type:'POST',dataType:'json',url:ulink("cpattern/clone_field"),data:{field:field,process:process},success:function(data){if(data.code==1){data=data.data;var hasField=!1;do{data.field.name+='_1';hasField=$('#coll_pattern_field .c-p-field-list').find('.field-name[data-val="'+data.field.name+'"]');if(hasField&&hasField.length>0){hasField=!0}else{hasField=!1}}while(hasField);$_o.cpField.add(null,data.field,data.process);toastr.success('字段复制成功:'+data.field.name)}else{toastr.error(data.msg)}}})})});$(this.formid+' #coll_pattern_field').on('click','.field-process',function(){var process=$(this).parent().find('input[name="config[field_process][]"]').val();var prt=$(this).parents('tr[id^="field_"]').eq(0);var objid=prt.attr('id');var field=prt.find('.field-name').attr('data-val');var url=ulink("cpattern/process?task_id=_tid_&field=_field_",{'_tid_':$_o.get_task_id(),'_field_':field});windowModal('数据处理:'+field+'<small><a href="javascript:;" id="window_process_paste" title="粘贴" class="glyphicon glyphicon-paste" style="margin-left:7px;color:#888;"></a></small>',url,{lg:1,ajax:{type:'post',data:{objid:objid,process:process}}});$_o.process_paste()});$(this.formid+' #coll_pattern_process').on('click','.add-process',function(){var url=ulink("cpattern/process?task_id=_tid_&type=common",{'_tid_':$_o.get_task_id()});windowModal('数据处理(通用)<small><a href="javascript:;" id="window_process_paste" title="粘贴" class="glyphicon glyphicon-paste" style="color:#888;"></a></small>',url,{lg:1});$_o.process_paste()});globalOp.eleExchange(this.formid+' #coll_pattern_field','.icon-drag-move','tr[id^="field_"]');$(this.formid+' [name="effective"]').val(1)},init_test:function(){var $_o=this;$_o.formid='#win_form_cache';$_o.cpUrlWeb=new CpUrlWeb($_o);$_o.cpRenderer=new CpRenderer($_o);$_o.cpUrlWeb.page_init('test');$_o.cpRenderer.page_init('test')},init_echo_url_msg:function(dataUrlWeb,dataRenderer){this.init_test();if(!isObject(dataUrlWeb)){dataUrlWeb={}}
if(!isObject(dataRenderer)){dataRenderer={}}
var hasUrlWeb=!1;for(var i in dataUrlWeb){hasUrlWeb=!0}
var hasRenderer=!1;for(var i in dataRenderer){hasRenderer=!0}
this.cpUrlWeb.page_load('test',dataUrlWeb);this.cpRenderer.page_load('test',dataRenderer);var urlWebForm=$('.c-p-url-web-form').parents('.form-group').eq(0);var urlWebBox=urlWebForm.parents('.panel[id]').eq(0);if(hasUrlWeb){urlWebBox=urlWebBox.find('.panel-body').eq(0);urlWebBox.html(urlWebForm)}else{urlWebBox.hide()}
var rendererList=$('.c-p-url-renderer-list').parents('.form-group').eq(0);var rendererBox=rendererList.parents('.panel[id]').eq(0);if(hasRenderer){rendererBox=rendererBox.find('.panel-body').eq(0);rendererBox.html(rendererList)}else{rendererBox.hide()}},load:function(config){var $_o=this;if(config){$(this.formid+' [name="config[charset_custom]"]').val(config.charset_custom);$(this.formid+' [name="config[charset]"]').val(config.charset).trigger('change');$(this.formid+' [name="config[encode_custom]"]').val(config.encode_custom);$(this.formid+' [name="config[encode]"]').val(config.encode).trigger('change');$(this.formid+' [name="config[url_complete]"][value="'+toInt(config.url_complete)+'"]').prop('checked',!0);$(this.formid+' [name="config[url_order]"][value="'+config.url_order+'"]').prop('checked',!0);$(this.formid+' [name="config[page_render]"][value="'+toInt(config.page_render)+'"]').prop('checked',!0).trigger('click');$(this.formid+' [name="config[url_repeat]"][value="'+toInt(config.url_repeat)+'"]').prop('checked',!0);$(this.formid+' [name="config[url_no_name]"][value="'+toInt(config.url_no_name)+'"]').prop('checked',!0);$(this.formid+' [name="config[url_encode]"][value="'+toInt(config.url_encode)+'"]').prop('checked',!0);if(config.regexp_flags){for(var i in config.regexp_flags){$(this.formid).find('[name="config[regexp_flags][]"][value="'+config.regexp_flags[i]+'"]').prop('checked',!0)}}
if(isObject(config.front_urls)){for(var i in config.front_urls){$_o.cpFrontUrl.add(null,config.front_urls[i])}
showPanelCollapse('#coll_pattern_front_url')}
globalOp.showPanelCollapse('#coll_pattern_front_url')}
if(config.source_url){var source_url_html_list='';var sourceParams={get:1};for(var i in config.source_url){sourceParams.source_url=config.source_url[i];source_url_html_list+=this.source_op('add',sourceParams)}
if(source_url_html_list){this.source_op('add',{html:source_url_html_list})}}
if(config.source_is_url){$($_o.formid+' [name="config[source_is_url]"]').prop('checked',!1).trigger('click')}
if(config.source_config){$_o.load_page('source_url',config.source_config)}
$_o.load_page('url',config);if(isObject(config.level_urls)){for(var i in config.level_urls){$_o.cpLevelUrl.add(null,config.level_urls[i])}
showPanelCollapse('#coll_pattern_level_url')}
globalOp.showPanelCollapse('#coll_pattern_level_url')}
if(isObject(config.relation_urls)){for(var i in config.relation_urls){$_o.cpRelationUrl.add(null,config.relation_urls[i])}
showPanelCollapse('#coll_pattern_relation_url')}
globalOp.showPanelCollapse('#coll_pattern_relation_url')}
if(config.field_list&&config.field_list.length>0){this.cpField.clearall();for(var i in config.field_list){var fieldProcess=null;if(config.field_process){fieldProcess=config.field_process[i]}
this.cpField.add(null,config.field_list[i],fieldProcess)}}
if(config.field_title){$(this.formid+' [name="config[field_title]"]').each(function(){if($(this).val()==config.field_title){$(this).prop('checked',!0)}})}
if(config.field_content&&isObject(config.field_content)){for(var i in config.field_content){$(this.formid+' [name="config[field_content][]"][value="'+config.field_content[i]+'"]').prop('checked',!0)}}
if(config.common_process&&config.common_process.length>0){showPanelCollapse('#coll_pattern_process');ajaxOpen({type:'post',url:ulink("cpattern/process?task_id=_tid_&type=common&op=load",{'_tid_':$_o.get_task_id()}),data:{process:config.common_process},dataType:'html',beforeSend:function(){$($_o.cpProcess.processForm+' .c-p-process-accordion').append('<div class="loading" style="margin:5px 0 0 -5px;"></div>')},success:function(data){$('body').append(data)},complete:function(){$($_o.cpProcess.processForm+' .c-p-process-accordion').find('.loading').remove()}})}
if(config.common_process&&config.common_process.length>0){globalOp.showPanelCollapse('#coll_pattern_process');ajaxOpen({type:'post',url:ulink("cpattern/process?task_id=_tid_&type=common&op=load",{'_tid_':$_o.get_task_id()}),data:{process:config.common_process},dataType:'html',beforeSend:function(){$($_o.cpProcess.processForm+' .c-p-process-accordion').append('<div class="loading" style="margin:5px 0 0 -5px;"></div>')},success:function(data){$('body').append(data)},complete:function(){$($_o.cpProcess.processForm+' .c-p-process-accordion').find('.loading').remove()}})}
if(config.request_headers){$(this.formid+' [name="config[request_headers][useragent]"]').val(config.request_headers.useragent);$(this.formid+' [name="config[request_headers][cookie]"]').val(config.request_headers.cookie);$(this.formid+' [name="config[request_headers][referer]"]').val(config.request_headers.referer);if(config.request_headers.custom_names){var r_h_vals=config.request_headers.custom_vals?config.request_headers.custom_vals:{};for(var i in config.request_headers.custom_names){$_o.add_request_header(config.request_headers.custom_names[i],r_h_vals[i])}}
config.request_headers.open=toInt(config.request_headers.open);config.request_headers.img=toInt(config.request_headers.img);config.request_headers.file=toInt(config.request_headers.file);$(this.formid+' [name="config[request_headers][open]"][value="'+config.request_headers.open+'"]').prop('checked',!0).trigger('click');$(this.formid+' [name="config[request_headers][img]"][value="'+config.request_headers.img+'"]').prop('checked',!0);$(this.formid+' [name="config[request_headers][img_use_page]"][value="'+config.request_headers.img_use_page+'"]').prop('checked',!0);$(this.formid+' [name="config[request_headers][file]"][value="'+config.request_headers.file+'"]').prop('checked',!0);$(this.formid+' [name="config[request_headers][file_use_page]"][value="'+config.request_headers.file_use_page+'"]').prop('checked',!0);if(config.request_headers.open>0){showPanelCollapse('#coll_pattern_request_headers');showPanelCollapse('#c_p_request_headers_open')}
if(config.request_headers.img>0){showPanelCollapse('#coll_pattern_request_headers');showPanelCollapse('#c_p_request_headers_img')}
config.request_headers.open=toInt(config.request_headers.open);config.request_headers.img=toInt(config.request_headers.img);config.request_headers.file=toInt(config.request_headers.file);$(this.formid+' [name="config[request_headers][open]"][value="'+config.request_headers.open+'"]').prop('checked',!0).trigger('click');$(this.formid+' [name="config[request_headers][img]"][value="'+config.request_headers.img+'"]').prop('checked',!0);$(this.formid+' [name="config[request_headers][img_use_page]"][value="'+config.request_headers.img_use_page+'"]').prop('checked',!0);$(this.formid+' [name="config[request_headers][file]"][value="'+config.request_headers.file+'"]').prop('checked',!0);$(this.formid+' [name="config[request_headers][file_use_page]"][value="'+config.request_headers.file_use_page+'"]').prop('checked',!0);if(config.request_headers.open>0){globalOp.showPanelCollapse('#coll_pattern_request_headers');globalOp.showPanelCollapse('#c_p_request_headers_open')}
if(config.request_headers.img>0){globalOp.showPanelCollapse('#coll_pattern_request_headers');globalOp.showPanelCollapse('#c_p_request_headers_img')}
if(config.request_headers.img_names){var r_h_img_vals=config.request_headers.img_vals?config.request_headers.img_vals:{};for(var i in config.request_headers.img_names){$_o.add_request_header_img(config.request_headers.img_names[i],r_h_img_vals[i])}}
if(config.request_headers.file>0){showPanelCollapse('#coll_pattern_request_headers');showPanelCollapse('#c_p_request_headers_file')}
if(config.request_headers.file>0){globalOp.showPanelCollapse('#coll_pattern_request_headers');globalOp.showPanelCollapse('#c_p_request_headers_file')}
if(config.request_headers.file_names){var r_h_file_vals=config.request_headers.file_vals?config.request_headers.file_vals:{};for(var i in config.request_headers.file_names){$_o.add_request_header_file(config.request_headers.file_names[i],r_h_file_vals[i])}}}}
$(this.formid+' [name="effective_edit"]').val(1)},get_page_vars:function(pageType,returnKey,isPagination){var title='';var boxId='';var namePre='';var formId='';if('front_url'==pageType){title='前置页';boxId='#c_p_front_url';namePre='front_url';formId=this.cpFrontUrl.formObj}else if('source_url'==pageType){title='起始页';boxId='#coll_pattern_source_url';namePre='config[source_config]';formId=this.formid}else if('level_url'==pageType){title='多级页';boxId='#c_p_level_url';namePre='level_url';formId=this.cpLevelUrl.formObj}else if('relation_url'==pageType){title='关联页';boxId='#c_p_relation_url';namePre='relation_url';formId=this.cpRelationUrl.formObj}else if('url'==pageType){title='内容页';boxId='#coll_pattern_url';namePre='config';formId=this.formid}else if('test'==pageType){title='';boxId='#win_coll_pattern_test';namePre='config';formId='#win_form_test'}
if(isPagination){boxId+='_pagination';namePre+='[pagination]'}
var data={title:title,boxId:boxId,namePre:namePre,formId:formId};if(returnKey){return data[returnKey]}else{return data}},page_is_list:function(pageType){if(pageType=='front_url'||pageType=='level_url'||pageType=='relation_url'){return!0}else{return!1}},init_page_list_op:function(pageType){var $_o=this;if(!$_o.page_is_list(pageType)){return}
var pageVars=$_o.get_page_vars(pageType);var listObj='#c_p_'+pageType+'s';var parentObj='[id^="'+pageType+'_"]';$($_o.formid+' #coll_pattern_'+pageType+' .add-'+pageType.replace('_','-')).bind('click',function(){var url=ulink('cpattern/'+pageType);windowModal('添加'+pageVars.title+'规则',url,{lg:1})});$($_o.formid+' '+listObj).on('click','.name',function(){var parent=$(this).parents(parentObj).eq(0);var options={lg:1,ajax:{type:'post',data:{}}};options.ajax.data.objid=parent.attr('id');options.ajax.data[pageType]=parent.find('[name="config['+pageType+'s][]"]').val();windowModal('编辑'+pageVars.title+'规则',ulink('cpattern/'+pageType),options)});$($_o.formid+' '+listObj).on('click','.clone',function(){var parent=$(this).parents(parentObj).eq(0);var pageConfig=parent.find('[name="config['+pageType+'s][]"]').val();var postData={};postData[pageType]=pageConfig;confirmRight('确定复制'+pageVars.title+'',function(){ajaxOpen({type:'POST',dataType:'json',url:ulink('cpattern/clone_'+pageType),data:postData,success:function(data){if(data.code==1){data=data.data;var hasName=!1;do{data[pageType].name+='_1';hasName=$($_o.formid+' '+listObj).find('.name[data-val="'+data[pageType].name+'"]');if(hasName&&hasName.length>0){hasName=!0}else{hasName=!1}}while(hasName);if(pageType=='front_url'){$_o.cpFrontUrl.add(null,data[pageType])}else if(pageType=='level_url'){$_o.cpLevelUrl.add(null,data[pageType])}else if(pageType=='relation_url'){$_o.cpRelationUrl.add(null,data[pageType])}
toastr.success(pageVars.title+'复制成功:'+data[pageType].name)}else{toastr.error(data.msg)}}})})});$($_o.formid+' '+listObj).on('click','.delete',function(){var curObj=$(this);confirmRight('确定删除?',function(){curObj.parents(parentObj).eq(0).remove()})});eleExchange($_o.formid+' '+listObj,'.icon-drag-move','tbody tr')},init_page:function(pageType){var $_o=this;var pageVars=$_o.get_page_vars(pageType);var formId=pageVars.formId;var boxId=pageVars.boxId;var namePre=pageVars.namePre;if(!formId||!boxId||!namePre){return}
toastr.success(pageVars.title+'复制成功:'+data[pageType].name)}else{toastr.error(data.msg)}}})})});$($_o.formid+' '+listObj).on('click','.delete',function(){var curObj=$(this);confirmRight('确定删除?',function(){curObj.parents(parentObj).eq(0).remove()})});globalOp.eleExchange($_o.formid+' '+listObj,'.icon-drag-move','tbody tr')},init_page:function(pageType){var $_o=this;var pageVars=$_o.get_page_vars(pageType);var formId=pageVars.formId;var boxId=pageVars.boxId;var namePre=pageVars.namePre;if(!formId||!boxId||!namePre){return}
$(formId+' select[name="'+namePre+'[area_module]"],select[name="'+namePre+'[url_rule_module]"]').bind('click',function(){$_o.rule_module_slt(this)});$_o.cpUrlWeb.page_init(pageType);$_o.cpRenderer.page_init(pageType);$_o.cpContentSign.page_init(pageType);$_o.cpPagination.page_init(pageType)},load_page_rule:function(pageType,config,isPagination){var $_o=this;var pageVars=$_o.get_page_vars(pageType);var formId=pageVars.formId;var boxId=pageVars.boxId;var namePre=pageVars.namePre;if(!config||!formId||!boxId||!namePre){return}
if(isPagination){boxId+='_pagination';namePre+='[pagination]'}
if(config.area||config.area_merge){$(formId+' [name="'+namePre+'[area]"]').val(config.area);$(formId+' [name="'+namePre+'[area_merge]"]').val(config.area_merge);showPanelCollapse(boxId+'_area')}
if(isPagination){boxId+='_pagination';namePre+='[pagination]';var configNum=config.number;if(isObject(configNum)){for(var i in configNum){configNum[i]=toInt(configNum[i]);var configNumObj=formId+' [name="'+namePre+'[number]['+i+']"]';if(i=='open'){$(configNumObj+'[value="'+configNum[i]+'"]').prop('checked',!0);if(configNum[i]>0){globalOp.showPanelCollapse(boxId+'_no')}}else if(i=='desc'){$(configNumObj).prop('checked',configNum[i]?true:!1)}else{$(configNumObj).val(configNum[i]?configNum[i]:'')}}}}
if(config.area||config.area_merge){$(formId+' [name="'+namePre+'[area]"]').val(config.area);$(formId+' [name="'+namePre+'[area_merge]"]').val(config.area_merge);globalOp.showPanelCollapse(boxId+'_area')}
if(config.area_module){$(formId+' select[name="'+namePre+'[area_module]"]').val(config.area_module).trigger('click').trigger('change')}
if(config.url_rule||config.url_merge){$(formId+' [name="'+namePre+'[url_rule]"]').val(config.url_rule);$(formId+' [name="'+namePre+'[url_merge]"]').val(config.url_merge);showPanelCollapse(boxId+'_url')}
if(config.url_rule||config.url_merge){$(formId+' [name="'+namePre+'[url_rule]"]').val(config.url_rule);$(formId+' [name="'+namePre+'[url_merge]"]').val(config.url_merge);globalOp.showPanelCollapse(boxId+'_url')}
if(config.url_rule_module){$(formId+' select[name="'+namePre+'[url_rule_module]"]').val(config.url_rule_module).trigger('click').trigger('change')}
if(config.url_must||config.url_ban){$(formId+' [name="'+namePre+'[url_must]"]').val(config.url_must);$(formId+' [name="'+namePre+'[url_ban]"]').val(config.url_ban);showPanelCollapse(boxId+'_filter')}},load_page:function(pageType,config){var $_o=this;var pageVars=$_o.get_page_vars(pageType);var formId=pageVars.formId;var boxId=pageVars.boxId;var namePre=pageVars.namePre;if(!config||!formId||!boxId||!namePre){return}
if(config.url_must||config.url_ban){$(formId+' [name="'+namePre+'[url_must]"]').val(config.url_must);$(formId+' [name="'+namePre+'[url_ban]"]').val(config.url_ban);globalOp.showPanelCollapse(boxId+'_filter')}},load_page:function(pageType,config){var $_o=this;var pageVars=$_o.get_page_vars(pageType);var formId=pageVars.formId;var boxId=pageVars.boxId;var namePre=pageVars.namePre;if(!config||!formId||!boxId||!namePre){return}
if(pageType=='level_url'||pageType=='url'||pageType=='relation_url'){$_o.load_page_rule(pageType,config,!1)}
$_o.cpUrlWeb.page_load(pageType,config.url_web);$_o.cpRenderer.page_load(pageType,config.renderer);$_o.cpContentSign.page_load(pageType,config.content_signs);$_o.cpPagination.page_load(pageType,config.pagination)},source_is_url:function(){var isUrl=$(this.formid+' [name="config[source_is_url]"]').is(':checked');isUrl=isUrl?1:'';return isUrl},source_op:function(op,params){var $_o=this;params=params?params:{};var formObj=params.formObj?params.formObj:'#form_source';if(op=='init'){$(formObj+' #source_url_sign').bind('click',function(){var sign=window.tpl_lang.sign_match.replace('{:id}','');var ipt=$('#source_url');if(ipt.val().indexOf(sign)<0){insertAtCaret(ipt,sign)}else{toastr.error('存在'+sign)}});$(formObj).find('.nav-tabs li a').bind('click',function(){$(formObj).find('input[name="source[type]"]').val($(this).attr('source-type'))});$(formObj).find('div[source-param]').find('input,textarea').bind('change',function(){if($(this).attr("type")=='radio'){return!1}
$(this).parents('div[source-param]').find('input[name="source[param]"]').prop('checked',!0)});if(params.source){$(formObj+' .nav-tabs').find('a[source-type="'+params.source.type+'"]').click();if(params.source.type=='custom'){$(formObj+' textarea[name="source[urls]"]').val(params.source.urls)}else if(params.source.type=='batch'){$(formObj+' input[name="source[url]"]').val(params.source.url);var param_type=params.source.param;if(param_type=='num'){$(formObj+' input[name="source[param_num_start]"]').val(params.source.param_num_start);$(formObj+' input[name="source[param_num_end]"]').val(params.source.param_num_end);$(formObj+' input[name="source[param_num_inc]"]').val(params.source.param_num_inc);if(params.source.param_num_desc){$(formObj+' input[name="source[param_num_desc]"]').prop('checked',!0)}}else if(param_type=='letter'){$(formObj+' input[name="source[param_letter_start]"]').val(params.source.param_letter_start);$(formObj+' input[name="source[param_letter_end]"]').val(params.source.param_letter_end);if(params.source.param_letter_desc){$(formObj+' input[name="source[param_letter_desc]"]').prop('checked',!0)}}else if(param_type=='custom'){$(formObj+' textarea[name="source[param_custom]"]').val(params.source.param_custom)}
$_o.cpUrlWeb.page_load(pageType,config.url_web);$_o.cpRenderer.page_load(pageType,config.renderer);$_o.cpContentSign.page_load(pageType,config.content_signs);$_o.cpPagination.page_load(pageType,config.pagination)},source_is_url:function(){var isUrl=$(this.formid+' [name="config[source_is_url]"]').is(':checked');isUrl=isUrl?1:'';return isUrl},source_op:function(op,params){var $_o=this;params=params?params:{};var formObj=params.formObj?params.formObj:'#form_source';if(op=='init'){$(formObj+' #source_url_sign').bind('click',function(){var sign=window.tpl_lang.sign_match.replace('{:id}','');var ipt=$('#source_url');if(ipt.val().indexOf(sign)<0){globalOp.insertAtCaret(ipt,sign)}else{toastr.error('存在'+sign)}});$(formObj).find('.nav-tabs li a').bind('click',function(){$(formObj).find('input[name="source[type]"]').val($(this).attr('source-type'))});$(formObj).find('div[source-param]').find('input,textarea').bind('change',function(){if($(this).attr("type")=='radio'){return!1}
$(this).parents('div[source-param]').find('input[name="source[param]"]').prop('checked',!0)});if(params.source){$(formObj+' .nav-tabs').find('a[source-type="'+params.source.type+'"]').click();if(params.source.type=='custom'){$(formObj+' textarea[name="source[urls]"]').val(params.source.urls)}else if(params.source.type=='batch'){$(formObj+' input[name="source[url]"]').val(params.source.url);var param_type=params.source.param;if(param_type=='num'){$(formObj+' input[name="source[param_num_start]"]').val(params.source.param_num_start);$(formObj+' input[name="source[param_num_end]"]').val(params.source.param_num_end);$(formObj+' input[name="source[param_num_inc]"]').val(params.source.param_num_inc);if(params.source.param_num_desc){$(formObj+' input[name="source[param_num_desc]"]').prop('checked',!0)}
if(params.source.param_num_len){$(formObj+' input[name="source[param_num_len]"]').val(params.source.param_num_len)}}else if(param_type=='letter'){$(formObj+' input[name="source[param_letter_start]"]').val(params.source.param_letter_start);$(formObj+' input[name="source[param_letter_end]"]').val(params.source.param_letter_end);if(params.source.param_letter_desc){$(formObj+' input[name="source[param_letter_desc]"]').prop('checked',!0)}}else if(param_type=='custom'){$(formObj+' textarea[name="source[param_custom]"]').val(params.source.param_custom)}
$(formObj+' input[name="source[param]"][value="'+param_type+'"]').prop('checked',!0)}else if(params.source.type=='large'){$(formObj+' textarea[name="source[large_urls]"]').val(params.source.large_urls)}else if(params.source.type=='api'){$(formObj+' input[name="source[api]"]').val(params.source.api);$(formObj+' input[name="source[api_json]"]').val(params.source.api_json)}}}else if(op=='add'){var html='';if(params.html){html=params.html}else{var htmlObj=$_o.clone_tpl('#coll_tpl_source_url');htmlObj.find('[data-id="source_url_"]').attr('id','source_url_'+generateUUID()).removeAttr('data-id');var regLarge=/[\r\n]/;if(regLarge.test(params.source_url)){htmlObj.find('input[name="config[source_url][]"]').remove()}else{htmlObj.find('textarea[name="config[source_url][]"]').remove()}
html=htmlObj.html();html=html?html:'';html=html.replace('[_source_url_]',htmlspecialchars(params.source_url))}
if(params.get){return html}else{this.source_op('clear_null');$($_o.formid+' #coll_pattern_source_url .c-p-source-urls').append(html)}}else if(op=='add_sub'){ajaxOpen({type:'POST',dataType:'json',url:$(formObj).attr('action'),data:$(formObj).serialize(),success:function(data){var dataList=data.data?data.data:{};var objid=dataList.objid?dataList.objid:'';var addParams={};if(data.code==1){var source_type=$(formObj).find('input[name="source[type]"]').val();if(source_type=='custom'&&isObject(dataList.urls)&&dataList.urls.length>20){source_type='large'}
@ -83,7 +84,7 @@ var dropdownMenu=boxObj.find('.dropdown-menu');if(dropdownMenu.length>0){$(dropd
var iptObj=boxObj.find('[name="'+inputName+'"]');if(!iptObj||iptObj.length<=0){iptObj=null}
var frontUrls=new Array();$('#c_p_front_urls [id^="front_url_"]').each(function(){var frontUrl=$(this).find('[name="config[front_urls][]"]').val();frontUrls.push(frontUrl)});var levelUrls=new Array();$('#c_p_level_urls [id^="level_url_"]').each(function(){var levelUrl=$(this).find('[name="config[level_urls][]"]').val();levelUrls.push(levelUrl)});var relationUrls=new Array();$('#c_p_relation_urls [id^="relation_url_"]').each(function(){var relationUrl=$(this).find('[name="config[relation_urls][]"]').val();relationUrls.push(relationUrl)});var sourceConfig={};sourceConfig.area='';sourceConfig.url_rule='';sourceConfig.content_signs=$_o.get_content_signs($_o.formid+' [name="config[source_config][content_signs][]"]');if(isPagination){sourceConfig.pagination={area:$($_o.formid).find('[name="config[source_config][pagination][area]"]').val(),url_rule:$($_o.formid).find('[name="config[source_config][pagination][url_rule]"]').val()}}
var urlConfig={};urlConfig.area=$($_o.formid+' [name="config[area]"]').val();urlConfig.url_rule=$($_o.formid+' [name="config[url_rule]"]').val();urlConfig.content_signs=$_o.get_content_signs($_o.formid+' [name="config[content_signs][]"]');if(isPagination){urlConfig.pagination={area:$($_o.formid).find('[name="config[pagination][area]"]').val(),url_rule:$($_o.formid).find('[name="config[pagination][url_rule]"]').val()}}
var pageConfig={name:'',area:'',url_rule:'',content_signs:''};var mergeType=iptObj.attr('data-merge-type');mergeType=mergeType?mergeType:'';if($_o.page_is_list(pageType)){var objid='';if(mergeType=='content_sign'){var csPageConfig=$_o.cpContentSign.curPageConfig;objid=csPageConfig.objid;if(pageType=='relation_url'){pageConfig.page=csPageConfig.relation_url.page}
var pageConfig={name:'',area:'',url_rule:'',content_signs:''};var mergeType=iptObj?iptObj.attr('data-merge-type'):'';mergeType=mergeType?mergeType:'';if($_o.page_is_list(pageType)){var objid='';if(mergeType=='content_sign'){var csPageConfig=$_o.cpContentSign.curPageConfig;objid=csPageConfig.objid;if(pageType=='relation_url'){pageConfig.page=csPageConfig.relation_url.page}
pageConfig.area=csPageConfig[namePre].area;pageConfig.url_rule=csPageConfig[namePre].url_rule;pageConfig.content_signs=csPageConfig[namePre].content_signs}else{objid=$(formId).find('[name="objid"]').val();if(pageType=='relation_url'){pageConfig.page=$(formId).find('[name="relation_url[page]"]').val()}
pageConfig.area=$(formId).find('[name="'+namePre+'[area]"]').val();pageConfig.url_rule=$(formId).find('[name="'+namePre+'[url_rule]"]').val();pageConfig.content_signs=$_o.get_content_signs(formId+' [name="'+namePre+'[content_signs][]"]')}
if(objid){pageConfig.name=$('#'+objid).find('.name').attr('data-val')}
@ -95,7 +96,9 @@ var nullTips='';if(sourceIsUrl){nullTips='起始页已设为内容页'}
for(var asi in allSigns){var pageSigns=allSigns[asi]?allSigns[asi]:{};var pageName=pageSigns.name;var signs=pageSigns.signs;signs=signs?signs:{};html+='<tr><td>'+pageName+'</td>';var signKeys=['area','url','content'];for(var ski in signKeys){html+='<td>';var signKey=signKeys[ski];var keySigns=signs[signKey];if(keySigns&&keySigns.length>0){var keyGlobalSigns=signs[signKey+'_global'];for(var ksi in keySigns){var sign=keySigns[ksi];var signHtml=htmlspecialchars(sign);if(keyGlobalSigns&&keyGlobalSigns.indexOf(sign)>-1){var color=valSigns.indexOf(sign)>-1?'color:green;':'';html+='<a href="javascript:;" data-val="'+signHtml+'" style="'+color+'">'+signHtml+'</a>'}else{html+='<span style="color:#999;" title="被覆盖">'+signHtml+'</span>'}}}else{html+='<span style="color:#999;" title="'+nullTips+'">无</span>'}
html+='</td>'}
html+='</tr>'}
if(dropdownMenu.length>0){var signsObj=$_o.clone_tpl('#coll_tpl_page_signs');$(dropdownMenu).append(signsObj);$(dropdownMenu).find('table tbody').html(html);$(dropdownMenu).find('a[data-val]').bind('click',function(){if(iptObj){insertAtCaret(iptObj,$(this).attr('data-val'))}});var sortObj=$(dropdownMenu).find('th.sorting');sortObj.removeClass('sorting');sortObj.addClass(pageSort=='asc'?'sorting_asc':'sorting_desc');sortObj.attr('title','页面'+(pageSort=='asc'?'升序':'降序')+'排列');sortObj.bind('click',function(){ajaxOpen({type:'get',dataType:'json',url:ulink("cpattern/page_signs_sort"),success:function(data){toastr.success(data.msg)}})})}}}})},field_is_loop:function(){var hasLoop=$(this.formid+' #coll_pattern_field .c-p-field-list').find('.field-module[data-is-loop]');if(hasLoop&&hasLoop.length>0){hasLoop=1}else{hasLoop=''}
if(dropdownMenu.length>0){var signsObj=$_o.clone_tpl('#coll_tpl_page_signs');$(dropdownMenu).append(signsObj);$(dropdownMenu).find('table tbody').html(html);if(isPagination&&mergeType=='url'){$(dropdownMenu).find('table tfoot').html('');if($(formId).find('[name="'+namePre+'[pagination][number][open]"][value="1"]').is(':checked')){var htmlFoot='<tr><td colspan="4"><b>分页标签</b></td></tr><tr><td colspan="4"><a href="javascript:;" data-val="[分页序号]"';if(iptObj){if(iptObj.val().indexOf('[分页序号]')>-1){htmlFoot+=' style="color:green;"'}}
htmlFoot+='>[分页序号]</a></td></tr>';$(dropdownMenu).find('table tfoot').show().html(htmlFoot)}}
$(dropdownMenu).find('a[data-val]').bind('click',function(){if(iptObj){globalOp.insertAtCaret(iptObj,$(this).attr('data-val'))}});var sortObj=$(dropdownMenu).find('th.sorting');sortObj.removeClass('sorting');sortObj.addClass(pageSort=='asc'?'sorting_asc':'sorting_desc');sortObj.attr('title','页面'+(pageSort=='asc'?'升序':'降序')+'排列');sortObj.bind('click',function(){ajaxOpen({type:'get',dataType:'json',url:ulink("cpattern/page_signs_sort"),success:function(data){toastr.success(data.msg)}})})}}}})},field_is_loop:function(){var hasLoop=$(this.formid+' #coll_pattern_field .c-p-field-list').find('.field-module[data-is-loop]');if(hasLoop&&hasLoop.length>0){hasLoop=1}else{hasLoop=''}
return hasLoop},get_task_id:function(){var taskId=$(this.formid+' [name="task_id"]').val();taskId=taskId?taskId:'';return taskId}}
function CpFrontUrl(cpClass){this.$_cp=cpClass;this.formObj='#form_front_url'}
CpFrontUrl.prototype={constructor:CpFrontUrl,init:function(front_url){var $_o=this;$($_o.formObj).bind('submit',function(){$_o.add_sub();return!1});$_o.$_cp.init_page('front_url');$($_o.formObj).on('click','.c-p-url-page-signs .btn-page-signs',function(){$_o.$_cp.parent_page_signs(this)});if(front_url){var loadParams=['name','url'];for(var i in loadParams){if(front_url[loadParams[i]]){$($_o.formObj+' [name="front_url['+loadParams[i]+']"]').val(front_url[loadParams[i]])}}
@ -123,9 +126,9 @@ ajaxOpen({type:'POST',dataType:'json',url:$($_o.formObj).attr('action'),data:$($
function CpUrlWeb(cpClass){this.$_cp=cpClass}
CpUrlWeb.prototype={constructor:CpUrlWeb,page_init:function(pageType,isPagination){var $_o=this;var pageVars=$_o.$_cp.get_page_vars(pageType,null,isPagination);var boxId=pageVars.boxId;var namePre=pageVars.namePre;if(!boxId||!namePre){return}
var boxUrlWebId=boxId+'_web';$(boxUrlWebId+' [name="'+namePre+'[url_web][open]"]').bind('click',function(){if($(this).val()==1){$(boxUrlWebId+'_open').show()}else{$(boxUrlWebId+'_open').hide()}
$_o.def_config_use_url_web(pageType)});inputSelectCustom(boxUrlWebId+' select[name="'+namePre+'[url_web][charset]"]',namePre+'[url_web][charset_custom]');inputSelectCustom(boxUrlWebId+' select[name="'+namePre+'[url_web][encode]"]',namePre+'[url_web][encode_custom]');$_o.def_config_charset(pageType);$_o.def_config_encode(pageType);$(boxUrlWebId+' select[name="'+namePre+'[url_web][form_method]"]').bind('change',function(){var obj=$(boxUrlWebId+' .c-p-url-web-content-type');if($(this).val()=='post'){obj.show()}else{obj.hide()}});$_o.def_config_header_global(pageType);$(boxUrlWebId+' .add-url-web-form').bind('click',function(){$_o.add_page_url_web(pageType,isPagination,'form','','')});$(boxUrlWebId+' .c-p-url-web-form').on('click','.delete-url-web-form',function(){var curObj=$(this);confirmRight('确定删除?',function(){curObj.parents('tr').eq(0).remove()})});$(boxUrlWebId+' .add-url-web-header').bind('click',function(){$_o.add_page_url_web(pageType,isPagination,'header','','')});$(boxUrlWebId+' .c-p-url-web-header').on('click','.delete-url-web-header',function(){var curObj=$(this);confirmRight('确定删除?',function(){curObj.parents('tr').eq(0).remove()})})},page_load:function(pageType,urlWebConfig,isPagination){var $_o=this;var pageVars=$_o.$_cp.get_page_vars(pageType,null,isPagination);var formId=pageVars.formId;var boxId=pageVars.boxId;var namePre=pageVars.namePre;if(!formId||!boxId||!namePre){return}
$_o.def_config_use_url_web(pageType)});globalOp.inputSelectCustom(boxUrlWebId+' select[name="'+namePre+'[url_web][charset]"]',namePre+'[url_web][charset_custom]');globalOp.inputSelectCustom(boxUrlWebId+' select[name="'+namePre+'[url_web][encode]"]',namePre+'[url_web][encode_custom]');$_o.def_config_charset(pageType);$_o.def_config_encode(pageType);$(boxUrlWebId+' select[name="'+namePre+'[url_web][form_method]"]').bind('change',function(){var obj=$(boxUrlWebId+' .c-p-url-web-content-type');if($(this).val()=='post'){obj.show()}else{obj.hide()}});$_o.def_config_header_global(pageType);$(boxUrlWebId+' .add-url-web-form').bind('click',function(){$_o.add_page_url_web(pageType,isPagination,'form','','')});$(boxUrlWebId+' .c-p-url-web-form').on('click','.delete-url-web-form',function(){var curObj=$(this);confirmRight('确定删除?',function(){curObj.parents('tr').eq(0).remove()})});$(boxUrlWebId+' .add-url-web-header').bind('click',function(){$_o.add_page_url_web(pageType,isPagination,'header','','')});$(boxUrlWebId+' .c-p-url-web-header').on('click','.delete-url-web-header',function(){var curObj=$(this);confirmRight('确定删除?',function(){curObj.parents('tr').eq(0).remove()})})},page_load:function(pageType,urlWebConfig,isPagination){var $_o=this;var pageVars=$_o.$_cp.get_page_vars(pageType,null,isPagination);var formId=pageVars.formId;var boxId=pageVars.boxId;var namePre=pageVars.namePre;if(!formId||!boxId||!namePre){return}
if(!isObject(urlWebConfig)){urlWebConfig={}}
var urlWebNamePre=namePre+'[url_web]';urlWebConfig.open=toInt(urlWebConfig.open);$(formId+' [name="'+urlWebNamePre+'[open]"][value="'+urlWebConfig.open+'"]').trigger('click');if(urlWebConfig.open>0){showPanelCollapse(boxId+'_web')}
var urlWebNamePre=namePre+'[url_web]';urlWebConfig.open=toInt(urlWebConfig.open);$(formId+' [name="'+urlWebNamePre+'[open]"][value="'+urlWebConfig.open+'"]').trigger('click');if(urlWebConfig.open>0){globalOp.showPanelCollapse(boxId+'_web')}
if(urlWebConfig.charset){$(formId+' select[name="'+urlWebNamePre+'[charset]"]').val(urlWebConfig.charset).trigger('change')}
if(urlWebConfig.charset_custom){$(formId+' [name="'+urlWebNamePre+'[charset_custom]"]').val(urlWebConfig.charset_custom)}
if(urlWebConfig.encode){$(formId+' select[name="'+urlWebNamePre+'[encode]"]').val(urlWebConfig.encode).trigger('change')}
@ -149,11 +152,11 @@ CpRenderer.prototype={constructor:CpRenderer,page_init:function(pageType,isPagin
$_o.def_config_renderer_open(pageType);var rdBoxId=boxId+'_renderer';$(rdBoxId+' .add-url-renderer').bind('click',function(){$_o.add(pageType,isPagination)});$(rdBoxId+' [name="'+namePre+'[renderer][open]"]').bind('click',function(){$_o.def_config_use_renderer(pageType)});if(isPagination){$(rdBoxId+' [name="'+namePre+'[renderer][open_pn]"]').bind('click',function(){if($(this).val()==1){$(rdBoxId+'_open_pn').show()}else{$(rdBoxId+'_open_pn').hide()}})}
$(rdBoxId+' .c-p-url-renderer-list').on('change','select[name="'+namePre+'[renderer][types][]"]',function(){var type=$(this).val();var tr=$(this).parents('tr').eq(0);var types={'wait_time':{content:1,content_tips:'输入数字'},'scroll_top':{content:1,content_tips:'输入数字'},'click':{element:1},'val':{element:1,content:1,content_tips:'输入值'}};var tdTypeCols=3;tr.find('.td-renderer-element,.td-renderer-content').hide();tr.find('input[name="'+namePre+'[renderer][contents][]"]').attr('placeholder','');var curType=types[type];if(isObject(curType)){if(curType.element){tr.find('.td-renderer-element').show();tdTypeCols-=1}
if(curType.content){tr.find('.td-renderer-content').show();tdTypeCols-=1;if(curType.content_tips){tr.find('input[name="'+namePre+'[renderer][contents][]"]').attr('placeholder',curType.content_tips)}}}
tr.find('.td-renderer-type').attr('colspan',tdTypeCols)});$(rdBoxId+' .c-p-url-renderer-list').on('click','.delete-url-renderer',function(){var curObj=$(this);confirmRight('确定删除?',function(){curObj.parents('tr').eq(0).remove()})});eleExchange(rdBoxId+' .c-p-url-renderer-list','.icon-drag-move','tr')},page_load:function(pageType,rdConfig,isPagination){var $_o=this;var pageVars=$_o.$_cp.get_page_vars(pageType,null,isPagination);var boxId=pageVars.boxId;var namePre=pageVars.namePre;if(!boxId||!namePre){return}
tr.find('.td-renderer-type').attr('colspan',tdTypeCols)});$(rdBoxId+' .c-p-url-renderer-list').on('click','.delete-url-renderer',function(){var curObj=$(this);confirmRight('确定删除?',function(){curObj.parents('tr').eq(0).remove()})});globalOp.eleExchange(rdBoxId+' .c-p-url-renderer-list','.icon-drag-move','tr')},page_load:function(pageType,rdConfig,isPagination){var $_o=this;var pageVars=$_o.$_cp.get_page_vars(pageType,null,isPagination);var boxId=pageVars.boxId;var namePre=pageVars.namePre;if(!boxId||!namePre){return}
var rdBoxId=boxId+'_renderer';if(isObject(rdConfig)){$(rdBoxId).find('[name="'+namePre+'[renderer][open]"][value="'+rdConfig.open+'"]').prop('checked',!0).trigger('click');var rdTypes=isObject(rdConfig.types)?rdConfig.types:[];var rdElements=isObject(rdConfig.elements)?rdConfig.elements:[];var rdContents=isObject(rdConfig.contents)?rdConfig.contents:[];var showPanel=!1;var openVal=rdConfig.open=='y'?true:!1;var openDef=$($_o.$_cp.formid+' [name="config[page_render]"]:checked').val();openDef=toInt(openDef);openDef=openDef>0?true:!1;if(rdTypes&&rdTypes.length>0){for(var i in rdTypes){$_o.add(pageType,isPagination,rdTypes[i],rdElements[i],rdContents[i])}
if((!rdConfig.open&&openDef)||openVal){showPanel=!0}}else{if(rdConfig.open){if(openVal!=openDef){showPanel=!0}}}
if(isPagination){$(rdBoxId+' [name="'+namePre+'[renderer][open_pn]"][value="'+rdConfig.open_pn+'"]').prop('checked',!0).trigger('click');if(rdConfig.open_pn){showPanel=!0}else{showPanel=!1}}
if(showPanel){showPanelCollapse(rdBoxId)}}},add:function(pageType,isPagination,rdType,rdElement,rdContent){var $_o=this;var pageVars=$_o.$_cp.get_page_vars(pageType,null,isPagination);var boxId=pageVars.boxId;var namePre=pageVars.namePre;if(!boxId||!namePre){return}
if(showPanel){globalOp.showPanelCollapse(rdBoxId)}}},add:function(pageType,isPagination,rdType,rdElement,rdContent){var $_o=this;var pageVars=$_o.$_cp.get_page_vars(pageType,null,isPagination);var boxId=pageVars.boxId;var namePre=pageVars.namePre;if(!boxId||!namePre){return}
var rdBoxId=boxId+'_renderer';var tr=$_o.$_cp.clone_tpl('#coll_tpl_url_renderer',namePre);if(rdType){tr.find('[name*="[renderer][types]"]').val(rdType);tr.find('[name*="[renderer][elements]"]').val(rdElement);tr.find('[name*="[renderer][contents]"]').val(rdContent)}
tr.find('.c-p-url-page-signs').each(function(){$(this).attr('data-page-type',pageType).attr('data-input-name',namePre+$(this).attr('data-input-name'));if(isPagination){$(this).attr('data-is-pagination',1)}});$(rdBoxId+' .c-p-url-renderer-list table').append(tr);if(rdType){$(rdBoxId+' .c-p-url-renderer-list').find('[name*="[renderer][types]"]:last-child').trigger('change')}},def_config_renderer_open:function(pageType){var $_o=this;var val=$($_o.$_cp.formid+' [name="config[page_render]"]:checked').val();val=toInt(val);var formid=$_o.$_cp.formid;if(pageType){formid=$_o.$_cp.get_page_vars(pageType,'formId')}
$(formid).find('.def-config-page-render').html(val>0?'是':'否')},def_config_use_renderer:function(pageType){var $_o=this;var pageVars=$_o.$_cp.get_page_vars(pageType);var formId=pageVars.formId;var boxId=pageVars.boxId;var namePre=pageVars.namePre;if(!formId||!boxId||!namePre){return}
@ -162,7 +165,7 @@ function CpPagination(cpClass){this.$_cp=cpClass}
CpPagination.prototype={constructor:CpPagination,page_has_pn:function(pageType){if(pageType=='source_url'||pageType=='level_url'||pageType=='url'){return!0}else{return!1}},page_init:function(pageType){var $_o=this;if($_o.page_has_pn(pageType)){var pageVars=$_o.$_cp.get_page_vars(pageType);var formId=pageVars.formId;var boxId=pageVars.boxId;var namePre=pageVars.namePre;if(!formId||!boxId||!namePre){return}
var pnBoxId=boxId+'_pagination';var pnNamePre=namePre+'[pagination]';$(formId+' select[name="'+pnNamePre+'[area_module]"],select[name="'+pnNamePre+'[url_rule_module]"]').bind('click',function(){$_o.$_cp.rule_module_slt(this)});$(pnBoxId+' [name="'+pnNamePre+'[open]"]').bind('click',function(){if($(this).val()==1){$(pnBoxId+'_open').show()}else{$(pnBoxId+'_open').hide()}});if(pageType=='url'){$(pnBoxId).on('click','.add-url-pagination-field',function(){var url=ulink("cpattern/pagination_field?is_loop=_is_loop_",{'_is_loop_':$_o.$_cp.field_is_loop()});windowModal('分页字段',url)});$(pnBoxId+' .c-p-url-pagination-fields').on('click','.field',function(){var parent=$(this).parents('[id^="pagination_field_"]').eq(0);var objid=parent.attr('id');var pnField=parent.find('[name="'+pnNamePre+'[fields][]"]').val();var url=ulink("cpattern/pagination_field?objid=_objid_&pagination_field=_pnfield_&is_loop=_is_loop_",{'_objid_':objid,'_pnfield_':pnField,'_is_loop_':$_o.$_cp.field_is_loop()});windowModal('分页字段',url)});$(pnBoxId+' .c-p-url-pagination-fields').on('click','.delete',function(){var parent=$(this).parents('[id^="pagination_field_"]').eq(0);confirmRight('确定删除?',function(){parent.remove()})})}
$_o.$_cp.cpUrlWeb.page_init(pageType,!0);$_o.$_cp.cpRenderer.page_init(pageType,!0)}},page_load:function(pageType,pnConfig){var $_o=this;if($_o.page_has_pn(pageType)){var pageVars=$_o.$_cp.get_page_vars(pageType);if(!pageVars.boxId||!pageVars.namePre){return}
var pnBoxId=pageVars.boxId+'_pagination';var pnNamePre=pageVars.namePre+'[pagination]';if(isObject(pnConfig)){$_o.$_cp.load_page_rule(pageType,pnConfig,!0);$(pnBoxId+' [name="'+pnNamePre+'[max]"]').val(toInt(pnConfig.max));$(pnBoxId+' [name="'+pnNamePre+'[use_url_web]"][value="'+pnConfig.use_url_web+'"]').prop('checked',!0);$(pnBoxId+' [name="'+pnNamePre+'[use_renderer]"][value="'+pnConfig.use_renderer+'"]').prop('checked',!0);pnConfig.open=toInt(pnConfig.open);if(pnConfig.open){$(pnBoxId+' [name="'+pnNamePre+'[open]"][value="'+pnConfig.open+'"]').trigger('click');if(pnConfig.open>0){showPanelCollapse(pnBoxId)}}
var pnBoxId=pageVars.boxId+'_pagination';var pnNamePre=pageVars.namePre+'[pagination]';if(isObject(pnConfig)){$_o.$_cp.load_page_rule(pageType,pnConfig,!0);$(pnBoxId+' [name="'+pnNamePre+'[max]"]').val(toInt(pnConfig.max));$(pnBoxId+' [name="'+pnNamePre+'[use_url_web]"][value="'+pnConfig.use_url_web+'"]').prop('checked',!0);$(pnBoxId+' [name="'+pnNamePre+'[use_renderer]"][value="'+pnConfig.use_renderer+'"]').prop('checked',!0);pnConfig.open=toInt(pnConfig.open);if(pnConfig.open){$(pnBoxId+' [name="'+pnNamePre+'[open]"][value="'+pnConfig.open+'"]').trigger('click');if(pnConfig.open>0){globalOp.showPanelCollapse(pnBoxId)}}
if(pageType=='url'){if(pnConfig.fields){for(var i in pnConfig.fields){$_o.field_op(pageType,'add',{pagination_field:pnConfig.fields[i]})}}}
$_o.$_cp.cpUrlWeb.page_load(pageType,pnConfig.url_web,!0);$_o.$_cp.cpRenderer.page_load(pageType,pnConfig.renderer,!0)}}},field_op:function(pageType,op,params){var $_o=this;if(pageType!='url'){return}
params=params?params:{};var formObj=params.formObj?params.formObj:'#form_pagination_field';var pageVars=$_o.$_cp.get_page_vars(pageType);if(!pageVars.boxId||!pageVars.namePre){return}
@ -179,20 +182,20 @@ urlConfig.content_signs=$_o.$_cp.get_content_signs(formId+' [name="'+namePre+'[c
var signListId=$_o.formObj+' #c_p_field_sign_list';$(signListId).html('');var signKeys={area:'区域规则',url:'网址规则',content:'提取内容'};var signInKeys={area:['url','content'],url:['content'],content:null};for(var signKey in signKeys){var curPageSigns=pageSigns[signKey];if(isObject(curPageSigns)&&curPageSigns.length>0){var signHtml='<div style="margin-bottom:5px;">'+signKeys[signKey]+'';var signInKey=signInKeys[signKey];for(var cpsi in curPageSigns){var curSign=curPageSigns[cpsi];var curSignExist=!1;if(isObject(signInKey)){for(var siki in signInKey){var pageInSigns=pageSigns[signInKey[siki]];if(isObject(pageInSigns)&&pageInSigns.indexOf(curSign)>-1){curSignExist=!0;break}}}
if(curSignExist){signHtml+='<span style="margin-right:7px;color:#999;" title="被覆盖">'+curSign+'</span>'}else{signHtml+='<a href="javascript:;" style="margin-right:7px;" data-val="'+curSign+'">'+curSign+'</a>'}}
signHtml+='</div>';$(signListId).append(signHtml)}}
$(signListId).off('click','a[data-val]').on('click','a[data-val]',function(){insertAtCaret($($_o.formObj+' [name="field[sign]"]'),$(this).attr('data-val'))})});$($_o.formObj+' select[name="field[module]"]').bind('change',function(){$($_o.formObj+' .c-p-field-module').hide();$($_o.formObj+' .c-p-field-module[module="'+$(this).val()+'"]').show();var source_module=new Array('rule','xpath','json','auto','sign');var in_module=!1;for(var i in source_module){if($(this).val()==source_module[i]){in_module=!0;break}}
$(signListId).off('click','a[data-val]').on('click','a[data-val]',function(){globalOp.insertAtCaret($($_o.formObj+' [name="field[sign]"]'),$(this).attr('data-val'))})});$($_o.formObj+' select[name="field[module]"]').bind('change',function(){$($_o.formObj+' .c-p-field-module').hide();$($_o.formObj+' .c-p-field-module[module="'+$(this).val()+'"]').show();var source_module=new Array('rule','xpath','json','auto','sign');var in_module=!1;for(var i in source_module){if($(this).val()==source_module[i]){in_module=!0;break}}
if(in_module){$($_o.formObj+' .c-p-field-source').show()}else{$($_o.formObj+' select[name="field[source]"]').val('');$($_o.formObj+' .c-p-field-source').hide()}});$($_o.formObj+' select[name="field[extract_module]"]').bind('change',function(){$('.c-p-field-extract-module').hide();$('.c-p-field-extract-module[extract-module="'+$(this).val()+'"]').show()});var fieldNames=$_o.$_cp.get_field_names();for(var i in fieldNames){if(fieldData&&fieldData.name==fieldNames[i]){continue}
$($_o.formObj+' #c_p_field_merge_list').append('<a href="javascript:;" style="margin-right:10px;" data-val="[字段:'+fieldNames[i]+']">[字段:'+fieldNames[i]+']</a>');$($_o.formObj+' [name="field[extract]"]').append('<option value="'+fieldNames[i]+'">'+fieldNames[i]+'</option>')}
$($_o.formObj+' #c_p_field_time_format_list').on('click','a[data-val]',function(){insertAtCaret($($_o.formObj+' [name="field[time_format]"]'),$(this).attr('data-val'))});$($_o.formObj+' #c_p_field_merge_list').on('click','a[data-val]',function(){insertAtCaret($($_o.formObj+' [name="field[merge]"]'),$(this).attr('data-val'))});$.datetimepicker.setLocale('zh');$($_o.formObj+' input[name="field[time_start]"],#form_field input[name="field[time_end]"]').datetimepicker();$($_o.formObj).bind('submit',function(){$_o.add_sub();return!1});cpRuleModuleInit($_o.formObj,'field','');cpRuleModuleInit($_o.formObj,'field','extract_');if(fieldData){for(var i in fieldData){var fieldEle=$($_o.formObj+' [name="field['+i+']"]');if(fieldEle.is('input:text')||fieldEle.is('textarea')){fieldEle.val(fieldData[i])}else if(fieldEle.is('select')){fieldEle.val(fieldData[i]).trigger("change")}}
$($_o.formObj+' #c_p_field_time_format_list').on('click','a[data-val]',function(){globalOp.insertAtCaret($($_o.formObj+' [name="field[time_format]"]'),$(this).attr('data-val'))});$($_o.formObj+' #c_p_field_merge_list').on('click','a[data-val]',function(){globalOp.insertAtCaret($($_o.formObj+' [name="field[merge]"]'),$(this).attr('data-val'))});$.datetimepicker.setLocale('zh');$($_o.formObj+' input[name="field[time_start]"],#form_field input[name="field[time_end]"]').datetimepicker();$($_o.formObj).bind('submit',function(){$_o.add_sub();return!1});ruleInsertSign.cpRuleModuleInit($_o.formObj,'field','');ruleInsertSign.cpRuleModuleInit($_o.formObj,'field','extract_');$($_o.formObj+' .c-p-field-no-reset').bind('click',function(){confirmRight('重置后将以起始数字开始,确定重置?',function(){ajaxOpen({type:'POST',dataType:'json',url:ulink('cpattern/reset_field_no'),data:{task_id:$_o.$_cp.get_task_id(),field_name:$($_o.formObj).find('[name="field[name]"]').val()},success:function(data){if(data.code==1){prompt_success(data.msg)}else{prompt_error(data.msg)}}})})});if(fieldData){for(var i in fieldData){var fieldEle=$($_o.formObj+' [name="field['+i+']"]');if(fieldEle.is('input:text')||fieldEle.is('textarea')){fieldEle.val(fieldData[i])}else if(fieldEle.is('select')){fieldEle.val(fieldData[i]).trigger("change")}}
if(!fieldData.hasOwnProperty('source')){$($_o.formObj+' [name="field[source]"]').trigger("change")}
$($_o.formObj+' [name="field[num_start]"]').val(toInt(fieldData.num_start));$($_o.formObj+' [name="field[num_end]"]').val(toInt(fieldData.num_end));$($_o.formObj+' [name="field[auto]"][value="'+fieldData.auto+'"]').prop('checked',!0);if(fieldData.time_stamp){$($_o.formObj+' [name="field[time_stamp]"]').prop('checked',!0)}
cpRuleModuleLoad($_o.formObj,'field','',fieldData);cpRuleModuleLoad($_o.formObj,'field','extract_',fieldData)}},add:function(objid,fieldData,processData){var $_o=this;var fieldSource='内容页';if(fieldData.source){var fsource=fieldData.source.split(':');fieldSource=$_o.$_cp.get_page_vars(fsource[0],'title');if(fsource[1]){fieldSource+=''+fsource[1]}}
$($_o.formObj+' [name="field[num_start]"]').val(toInt(fieldData.num_start));$($_o.formObj+' [name="field[num_end]"]').val(toInt(fieldData.num_end));fieldData.no_start=toInt(fieldData.no_start);fieldData.no_inc=toInt(fieldData.no_inc);fieldData.no_len=toInt(fieldData.no_len);$($_o.formObj+' [name="field[no_start]"]').val(fieldData.no_start==0?'':fieldData.no_start);$($_o.formObj+' [name="field[no_inc]"]').val(fieldData.no_inc==0?'':fieldData.no_inc);$($_o.formObj+' [name="field[no_len]"]').val(fieldData.no_len>0?fieldData.no_len:'');$($_o.formObj+' [name="field[auto]"][value="'+fieldData.auto+'"]').prop('checked',!0);if(fieldData.time_stamp){$($_o.formObj+' [name="field[time_stamp]"]').prop('checked',!0)}
ruleInsertSign.cpRuleModuleLoad($_o.formObj,'field','',fieldData);ruleInsertSign.cpRuleModuleLoad($_o.formObj,'field','extract_',fieldData)}},add:function(objid,fieldData,processData){var $_o=this;var fieldSource='内容页';if(fieldData.source){var fsource=fieldData.source.split(':');fieldSource=$_o.$_cp.get_page_vars(fsource[0],'title');if(fsource[1]){fieldSource+=''+fsource[1]}}
var fieldModule=window.tpl_lang['field_module_'+fieldData.module];var isLoop=!1;if(fieldData.module=='rule'){if(fieldData.rule_multi&&fieldData.rule_multi_type=='loop'){isLoop=!0}}else if(fieldData.module=='xpath'){if(fieldData.xpath_multi&&fieldData.xpath_multi_type=='loop'){isLoop=!0}}else if(fieldData.module=='json'){if(fieldData.json_loop){isLoop=!0}}else if(fieldData.module=='extract'||fieldData.module=='merge'){$($_o.$_cp.formid+' #coll_pattern_field').find('.sort-field').show();if(fieldData.module=='extract'){if(fieldData.extract_module=='rule'){if(fieldData.extract_rule_multi&&fieldData.extract_rule_multi_type=='loop'){isLoop=!0}}else if(fieldData.extract_module=='xpath'){if(fieldData.extract_xpath_multi&&fieldData.extract_xpath_multi_type=='loop'){isLoop=!0}}else if(fieldData.extract_module=='json'){if(fieldData.extract_json_loop){isLoop=!0}}
fieldModule+=' » '+(fieldData.extract?fieldData.extract:'')}}
if(isLoop){$('#c_p_field_loop_tips').show();fieldModule+='(循环入库)'}
if(objid){var eleObj=$($_o.$_cp.formid+' #'+objid);eleObj.find('.field-name').attr('data-val',fieldData.name).text(fieldData.name);eleObj.find('.field-source').attr('data-val',fieldData.source).text(fieldSource);eleObj.find('.field-module').attr('data-val',fieldData.module).text(fieldModule);if(isLoop){eleObj.find('.field-module').attr('data-is-loop',1)}else{eleObj.find('.field-module').removeAttr('data-is-loop')}
if(objid){var eleObj=$($_o.$_cp.formid+' #'+objid);eleObj.find('.field-name').attr('data-val',fieldData.name).text(fieldData.name).attr('title',fieldData.desc);eleObj.find('.field-source').attr('data-val',fieldData.source).text(fieldSource);eleObj.find('.field-module').attr('data-val',fieldData.module).text(fieldModule);if(isLoop){eleObj.find('.field-module').attr('data-is-loop',1)}else{eleObj.find('.field-module').removeAttr('data-is-loop')}
eleObj.find('input[name="config[field_list][]"]').val(encode_json2urlbase(fieldData))}else{var ptitle='';if(processData){ptitle=[];for(var i in processData){ptitle.push(window.tpl_lang['process_module_'+processData[i].module]+(processData[i].title?(''+processData[i].title):''))}
ptitle=ptitle.join(' / ')}
var html=$_o.$_cp.clone_tpl('#coll_tpl_field');html.attr('id','field_'+generateUUID());html.find('.field-name').attr('data-val',fieldData.name).text(fieldData.name);html.find('.field-source').attr('data-val',fieldData.source).text(fieldSource);html.find('.field-module').attr('data-val',fieldData.module).text(fieldModule);if(isLoop){html.find('.field-module').attr('data-is-loop',1)}else{html.find('.field-module').removeAttr('data-is-loop')}
var html=$_o.$_cp.clone_tpl('#coll_tpl_field');html.attr('id','field_'+generateUUID());html.find('.field-name').attr('data-val',fieldData.name).text(fieldData.name).attr('title',fieldData.desc);html.find('.field-source').attr('data-val',fieldData.source).text(fieldSource);html.find('.field-module').attr('data-val',fieldData.module).text(fieldModule);if(isLoop){html.find('.field-module').attr('data-is-loop',1)}else{html.find('.field-module').removeAttr('data-is-loop')}
html.find('[name="config[field_list][]"]').val(encode_json2urlbase(fieldData));html.find('[name="config[field_process][]"]').val(processData?encode_json2urlbase(processData):'');if(processData&&ptitle){html.find('.field-process').addClass('exist-process')}
html.find('.field-process').attr('title',ptitle);html.find('[name="config[field_title]"]').val(fieldData.name);html.find('[name="config[field_content][]"]').val(fieldData.name);$($_o.$_cp.formid+' #coll_pattern_field .c-p-field-list tbody').append(html)}},add_sub:function(){var $_o=this;var objid=$($_o.formObj+' input[name="objid"]').val();var checkName=!0;if(objid){var fname=$($_o.$_cp.formid+' #'+objid).find('.field-name').attr('data-val');if(fname==$($_o.formObj+' input[name="field[name]"]').val()){checkName=!1}}
if(checkName){var hasName=!1;var fieldNames=$_o.$_cp.get_field_names();for(var i in fieldNames){if($($_o.formObj+' input[name="field[name]"]').val()==fieldNames[i]){hasName=!0;break}}
@ -203,39 +206,41 @@ function CpProcess(cpClass){this.$_cp=cpClass;this.processForm='';this.processBo
CpProcess.prototype={constructor:CpProcess,init:function(processData,isCommon,isCommonLoad){var $_o=this;$_o.processForm=isCommon?$_o.processFormCommon:$_o.processFormField;if(isCommon&&isCommonLoad){$_o.processBox=$_o.processBoxCommon}else{$_o.processBox=$_o.processBoxField}
if($($_o.processForm).is('form')){$($_o.processForm).bind('submit',function(){$_o.add_sub();return!1})}
$($_o.processBox+' .process-add').bind('click',function(){var module=$($_o.processBox+' select[name="process[module]"]').val();$_o.add({'add_new':1,'module':module})});if($($_o.processForm).prop('inited')==1){return!0}
$($_o.processForm).on('click','.p-m-html-tags a[data-val]',function(){var tag=$(this).attr('data-val');var moduleHtml=$(this).parents('.p-m-html-tags').eq(0).attr('module-html');var tagsObj=$(this).parents('section').eq(0).find('input[data-process="html:'+moduleHtml+'"]');var tags=tagsObj.val()+','+tag;tags=tags.replace(/(^,+)|(,+$)/,'');tagsObj.val(tags)});$($_o.processForm).on('change','[data-process="insert:insert_loc"]',function(){var helpEle=$(this).siblings('.help-block');if($(this).val()=='rand'){helpEle.show()}else{helpEle.hide()}});$_o.txt_insert_field($_o.processForm,'.p-m-insert-field',function(sltObj){return $(sltObj).parents('section').eq(0).find('[data-process="insert:insert_txt"]')});inputSelectCustom(null,null,{box:$_o.processForm,slt:'[data-process="translate:translate_from"]',ipt:'[data-process="translate:translate_from_custom"]'});inputSelectCustom(null,null,{box:$_o.processForm,slt:'[data-process="translate:translate_to"]',ipt:'[data-process="translate:translate_to_custom"]'});$_o.txt_insert_field($_o.processForm,'.p-m-func-field',function(sltObj){return $(sltObj).parents('section').eq(0).find('[data-process="func:func_param"]')});$($_o.processForm).on('click','.p-m-if-add',function(){var ifTable=$(this).parents('section').eq(0).find('.p-m-if-table');ifTable.append('<tr>'+ifTable.attr('data-tpl')+'</tr>')});$($_o.processForm).on('click','.p-m-if-del',function(){var tr=$(this).parents('tr').eq(0);confirmRight('确定删除?',function(){tr.remove()})});$($_o.processForm).on('change','[data-process="if:if_cond:"]',function(){var ifCond=$(this).val();var ifTr=$(this).parents('tr').eq(0);var ifTd=ifTr.find('.p-m-if-val').eq(0);var ifVal=ifTd.find('[data-process="if:if_val:"]').eq(0);var ifValInfo={name:ifVal.attr('name'),val:ifVal.val(),process:ifVal.attr('data-process')};var ifValType='def';if(ifCond=='func'){ifValType='func'}else if(ifCond.indexOf('time_')>-1){ifValType='time'}
ifTd.find('.p-m-if-val-def,.p-m-if-val-time,.p-m-if-val-func').hide();ifTd.find('[data-process="if:if_val:"]').removeAttr('name').removeAttr('data-process');var ifValBox=ifTd.find('.p-m-if-val-'+ifValType);var ifValEle=ifValBox.find('.p-m-if-val-ele');ifValEle.attr('name',ifValInfo.name).attr('data-process',ifValInfo.process).val(ifValInfo.val);ifValBox.show();if(ifValType=='func'){$_o.load_if_func(ifTd,null)}});$($_o.processForm).on('change','.p-m-if-val-time-date select',function(){$(this).parents('tr').eq(0).find('[data-process="if:if_val:"]').val($(this).val())});$($_o.processForm).on('click','.p-m-if-val-func-info',function(){pluginFuncOp.tips('processIf')});$_o.txt_insert_field($_o.processForm,'.p-m-if-val-func-field select',function(sltObj){return $(sltObj).parents('td').eq(0).find('[data-process="if:if_val:"]')});$($_o.processForm).on('click','.p-m-if-info',function(){var tips='<p>执行顺序:从上至下判断,逻辑符“并且”的优先级高于“或者”</p>'+'<p>例如(字母表示条件):</p>'+'<p>a &amp;&amp; b || c &amp;&amp; d &amp;&amp; e || f || g &amp;&amp; h &amp;&amp; i &amp;&amp; j 等同于</p>'+'<p>(a &amp;&amp; b) || (c &amp;&amp; d &amp;&amp; e) || f || (g &amp;&amp; h &amp;&amp; i &amp;&amp; j)</p>'+'<p>括号中的条件都为真时才是真否则为假,整条语句中任意一个括号的结果为真最终结果为真,都为假最终结果为假</p>';confirmRight({msg:tips,yes:'确定',width:500,textAlign:'left'})});$_o.txt_insert_field($_o.processForm,'.p-m-api-url-field select',function(sltObj){return $(sltObj).parents('section').eq(0).find('[data-process="api:api_url"]')});$($_o.processForm).on('click','.p-m-api-add',function(){var apiTable=$(this).parents('section').eq(0).find('.p-m-api-table table');apiTable.find('tbody').append('<tr>'+apiTable.attr('data-tpl')+'</tr>')});$($_o.processForm).on('click','.p-m-api-del',function(){var tr=$(this).parents('tr').eq(0);tr.remove()});inputSelectCustom(null,null,{box:$_o.processForm,slt:'[data-process="api:api_charset"]',ipt:'[data-process="api:api_charset_custom"]'});inputSelectCustom(null,null,{box:$_o.processForm,slt:'[data-process="api:api_encode"]',ipt:'[data-process="api:api_encode_custom"]'});$($_o.processForm).on('change','[data-process="api:api_params:val:"],[data-process="api:api_headers:val:"]',function(){var isHeader=!1;if($(this).attr('data-process')=='api:api_headers:val:'){isHeader=!0}
$($_o.processForm).on('click','.p-m-html-tags a[data-val]',function(){var tag=$(this).attr('data-val');var moduleHtml=$(this).parents('.p-m-html-tags').eq(0).attr('module-html');var tagsObj=$(this).parents('section').eq(0).find('input[data-process="html:'+moduleHtml+'"]');var tags=tagsObj.val()+','+tag;tags=tags.replace(/(^,+)|(,+$)/,'');tagsObj.val(tags)});$($_o.processForm).on('change','[data-process="insert:insert_loc"]',function(){var helpEle=$(this).siblings('.help-block');if($(this).val()=='rand'){helpEle.show()}else{helpEle.hide()}});$_o.txt_insert_field($_o.processForm,'.p-m-insert-field',function(sltObj){return $(sltObj).parents('section').eq(0).find('[data-process="insert:insert_txt"]')});globalOp.inputSelectCustom(null,null,{box:$_o.processForm,slt:'[data-process="translate:translate_from"]',ipt:'[data-process="translate:translate_from_custom"]'});globalOp.inputSelectCustom(null,null,{box:$_o.processForm,slt:'[data-process="translate:translate_to"]',ipt:'[data-process="translate:translate_to_custom"]'});$_o.txt_insert_field($_o.processForm,'.p-m-func-field',function(sltObj){return $(sltObj).parents('section').eq(0).find('[data-process="func:func_param"]')});$($_o.processForm).on('click','.p-m-if-add',function(){var ifTable=$(this).parents('section').eq(0).find('.p-m-if-table');ifTable.append('<tr>'+ifTable.attr('data-tpl')+'</tr>')});$($_o.processForm).on('click','.p-m-if-del',function(){var tr=$(this).parents('tr').eq(0);confirmRight('确定删除?',function(){tr.remove()})});$($_o.processForm).on('change','[data-process="if:if_cond:"]',function(){var ifCond=$(this).val();var ifTr=$(this).parents('tr').eq(0);var ifTd=ifTr.find('.p-m-if-val').eq(0);var ifVal=ifTd.find('[data-process="if:if_val:"]').eq(0);var ifValInfo={name:ifVal.attr('name'),val:ifVal.val(),process:ifVal.attr('data-process')};var ifValType='def';if(ifCond=='func'){ifValType='func'}else if(ifCond.indexOf('time_')>-1){ifValType='time'}
ifTd.find('.p-m-if-val-def,.p-m-if-val-time,.p-m-if-val-func').hide();ifTd.find('[data-process="if:if_val:"]').removeAttr('name').removeAttr('data-process');var ifValBox=ifTd.find('.p-m-if-val-'+ifValType);var ifValEle=ifValBox.find('.p-m-if-val-ele');ifValEle.attr('name',ifValInfo.name).attr('data-process',ifValInfo.process).val(ifValInfo.val);ifValBox.show();if(ifValType=='func'){$_o.load_if_func(ifTd,null)}});$($_o.processForm).on('change','.p-m-if-val-time-date select',function(){$(this).parents('tr').eq(0).find('[data-process="if:if_val:"]').val($(this).val())});$($_o.processForm).on('click','.p-m-if-val-func-info',function(){pluginFuncOp.tips('processIf')});$_o.txt_insert_field($_o.processForm,'.p-m-if-val-func-field select',function(sltObj){return $(sltObj).parents('td').eq(0).find('[data-process="if:if_val:"]')});$($_o.processForm).on('click','.p-m-if-info',function(){var tips='<p>执行顺序:从上至下判断,逻辑符“并且”的优先级高于“或者”</p>'+'<p>例如(字母表示条件):</p>'+'<p>a &amp;&amp; b || c &amp;&amp; d &amp;&amp; e || f || g &amp;&amp; h &amp;&amp; i &amp;&amp; j 等同于</p>'+'<p>(a &amp;&amp; b) || (c &amp;&amp; d &amp;&amp; e) || f || (g &amp;&amp; h &amp;&amp; i &amp;&amp; j)</p>'+'<p>括号中的条件都为真时才是真否则为假,整条语句中任意一个括号的结果为真最终结果为真,都为假最终结果为假</p>';confirmRight({msg:tips,yes:'确定',width:500,textAlign:'left'})});$_o.txt_insert_field($_o.processForm,'.p-m-api-url-field select',function(sltObj){return $(sltObj).parents('section').eq(0).find('[data-process="api:api_url"]')});$($_o.processForm).on('click','.p-m-api-add',function(){var apiTable=$(this).parents('section').eq(0).find('.p-m-api-table table');apiTable.find('tbody').append('<tr>'+apiTable.attr('data-tpl')+'</tr>')});$($_o.processForm).on('click','.p-m-api-del',function(){var tr=$(this).parents('tr').eq(0);tr.remove()});globalOp.inputSelectCustom(null,null,{box:$_o.processForm,slt:'[data-process="api:api_charset"]',ipt:'[data-process="api:api_charset_custom"]'});globalOp.inputSelectCustom(null,null,{box:$_o.processForm,slt:'[data-process="api:api_encode"]',ipt:'[data-process="api:api_encode_custom"]'});$($_o.processForm).on('change','[data-process="api:api_params:val:"],[data-process="api:api_headers:val:"]',function(){var isHeader=!1;if($(this).attr('data-process')=='api:api_headers:val:'){isHeader=!0}
var val=$(this).val();var tdObj=$(this).parents('td').eq(0);var iptObj=tdObj.find('[data-process="api:'+(isHeader?'api_headers':'api_params')+':addon:"]');var sltObj=tdObj.find('.p-m-api-'+(isHeader?'header':'val')+'-field');iptObj.hide();sltObj.hide();if(val=='time'||val=='custom'){if(val=='time'){iptObj.attr('placeholder','默认格式Y-m-d H:i:s')}else if(val=='custom'){iptObj.attr('placeholder','输入任何内容');sltObj.css('display','table-cell')}
iptObj.show()}});$_o.txt_insert_field($_o.processForm,'.p-m-api-val-field select',function(sltObj){return $(sltObj).parents('td').eq(0).find('[data-process="api:api_params:addon:"]')});$_o.txt_insert_field($_o.processForm,'.p-m-api-header-field select',function(sltObj){return $(sltObj).parents('td').eq(0).find('[data-process="api:api_headers:addon:"]')});$($_o.processForm).on('click','.p-m-api-header-add',function(){var apiHdTable=$(this).parents('section').eq(0).find('.p-m-api-header-table table');apiHdTable.find('tbody').append('<tr>'+apiHdTable.attr('data-tpl')+'</tr>')});$($_o.processForm).on('click','.p-m-api-header-del',function(){var tr=$(this).parents('tr').eq(0);tr.remove()});$($_o.processForm).on('change','[data-process="api:api_type"]',function(){var obj=$(this).parents('section').eq(0).find('.p-m-api-content-type');if($(this).val()=='post'){obj.show()}else{obj.hide()}});$($_o.processForm).on('change','[data-process="api:api_rule_module"]',function(){var ruleModule=$(this).val();ruleModule=ruleModule?ruleModule:'';var obj=$(this).parents('section').eq(0);obj.find('.p-m-api-rule-module').hide();obj.find('.p-m-api-rule-module[data-rule-module="'+ruleModule+'"]').show()});cpRuleModuleInit($_o.processForm,'data-process','api:api_');$($_o.processForm).on('change','[data-process="download:download_op"]',function(){var obj=$(this).parents('section').eq(0);var val=$(this).val();obj.find('.p-m-download-op').hide();obj.find('.p-m-download-op[data-op="'+val+'"]').show()});$($_o.processForm).on('click','.p-m-download-file-tag .dropdown-menu a[data-val]',function(){var prt=$(this).parents('.p-m-download-file-tag').eq(0);var obj=prt.find('[data-process="download:download_file_tag"]');var val=obj.val();if(val){val=val.split(',')}else{val=new Array()}
val.push($(this).attr('data-val'));val=val.join(',');obj.val(val)});$($_o.processForm).on('click','.c-p-process-sign-wildcard',function(){var toObj=$(this).parent().siblings('[data-process]');ruleInsertSign.wildcard(toObj)});$($_o.processForm).on('click','.c-p-process-title',function(){var panelTitle=$(this).parents('.panel').eq(0).find('.panel-title-title');if(panelTitle.find('input').is(':visible')){panelTitle.find('*').show();panelTitle.find('input').hide()}else{panelTitle.find('*').hide();panelTitle.find('input').show()}});(function(processForm,processBox){$(processForm).on('click','.c-p-process-clone',function(){var panelObj=$(this).parents('.panel[data-name^="process"]').eq(0);var formEle=document.createElement('form');$(formEle).append(panelObj.clone());$(panelObj).find('[name^="process"]').each(function(index){var processEle=$(formEle).find('[name^="process"]').eq(index);if($(this).is('input:radio')||$(this).is('input:checkbox')){processEle.prop('checked',$(this).is(':checked'))}else{processEle.val($(this).val())}});confirmRight({msg:'拷贝或复制数据处理',yes:'复制',no:'拷贝',close:!0},function(){ajaxOpen({type:'POST',dataType:'json',url:ulink('cpattern/clone_process'),data:$(formEle).serialize(),success:function(data){if(data.code==1){$_o.processForm=processForm;$_o.processBox=processBox;$_o.add(data.data);toastr.success(data.msg)}}})},function(){ajaxOpen({type:'POST',dataType:'json',url:ulink('cpattern/clone_process?op=copy'),data:$(formEle).serialize(),success:function(data){if(data.code==1){toastr.success(data.msg)}}})})})})($_o.processForm,$_o.processBox);$($_o.processForm).on('click','.c-p-process-del',function(){$_o.del(this)});eleExchange($_o.processForm+' .c-p-process-accordion','.panel-title-ops .icon-drag-move','.panel');if(processData){for(var i in processData){if(processData[i]){$_o.add(processData[i])}}}
iptObj.show()}});$_o.txt_insert_field($_o.processForm,'.p-m-api-val-field select',function(sltObj){return $(sltObj).parents('td').eq(0).find('[data-process="api:api_params:addon:"]')});$_o.txt_insert_field($_o.processForm,'.p-m-api-header-field select',function(sltObj){return $(sltObj).parents('td').eq(0).find('[data-process="api:api_headers:addon:"]')});$($_o.processForm).on('click','.p-m-api-header-add',function(){var apiHdTable=$(this).parents('section').eq(0).find('.p-m-api-header-table table');apiHdTable.find('tbody').append('<tr>'+apiHdTable.attr('data-tpl')+'</tr>')});$($_o.processForm).on('click','.p-m-api-header-del',function(){var tr=$(this).parents('tr').eq(0);tr.remove()});$($_o.processForm).on('change','[data-process="api:api_type"]',function(){var obj=$(this).parents('section').eq(0).find('.p-m-api-content-type');if($(this).val()=='post'){obj.show()}else{obj.hide()}});$($_o.processForm).on('change','[data-process="api:api_rule_module"]',function(){var ruleModule=$(this).val();ruleModule=ruleModule?ruleModule:'';var obj=$(this).parents('section').eq(0);obj.find('.process-extract-module').hide();obj.find('.process-extract-module[data-rule-module="'+ruleModule+'"]').show()});ruleInsertSign.cpRuleModuleInit($_o.processForm,'data-process','api:api_');$($_o.processForm).on('change','[data-process="extract:extract_module"]',function(){var extractModule=$(this).val();extractModule=extractModule?extractModule:'';var obj=$(this).parents('section').eq(0);obj.find('.process-extract-module').hide();obj.find('.process-extract-module[data-extract-module="'+extractModule+'"]').show()});ruleInsertSign.cpRuleModuleInit($_o.processForm,'data-process','extract:extract_');$($_o.processForm).on('change','[data-process="download:download_op"]',function(){var obj=$(this).parents('section').eq(0);var val=$(this).val();obj.find('.p-m-download-op').hide();obj.find('.p-m-download-op[data-op="'+val+'"]').show()});$($_o.processForm).on('click','.p-m-download-file-tag .dropdown-menu a[data-val]',function(){var prt=$(this).parents('.p-m-download-file-tag').eq(0);var obj=prt.find('[data-process="download:download_file_tag"]');var val=obj.val();if(val){val=val.split(',')}else{val=new Array()}
val.push($(this).attr('data-val'));val=val.join(',');obj.val(val)});$($_o.processForm).on('click','.c-p-process-sign-wildcard',function(){var toObj=$(this).parent().siblings('[data-process]');ruleInsertSign.wildcard(toObj)});$($_o.processForm).on('click','.c-p-process-title',function(){var panelTitle=$(this).parents('.panel[data-name]').eq(0).find('.panel-title-title');if(panelTitle.find('input').is(':visible')){panelTitle.find('*').show();panelTitle.find('input').hide()}else{panelTitle.find('*').hide();panelTitle.find('input').show()}});$($_o.processForm).on('click','.c-p-process-close',function(){var prtBox=$(this).parents('.panel[data-name]').eq(0);var closeObj=prtBox.find('.panel-title-ops').find('input[name$="[close]"]');var closeVal=toInt(closeObj.val());if(closeVal>0){closeObj.val(0);$(this).attr('title','禁用').removeClass('c-p-process-closed');prtBox.removeClass('wrapper-not-enable')}else{closeObj.val(1);$(this).attr('title','已禁用').addClass('c-p-process-closed');prtBox.addClass('wrapper-not-enable')}});(function(processForm,processBox){$(processForm).on('click','.c-p-process-clone',function(){var panelObj=$(this).parents('.panel[data-name^="process"]').eq(0);var formEle=document.createElement('form');$(formEle).append(panelObj.clone());$(panelObj).find('[name^="process"]').each(function(index){var processEle=$(formEle).find('[name^="process"]').eq(index);if($(this).is('input:radio')||$(this).is('input:checkbox')){processEle.prop('checked',$(this).is(':checked'))}else{processEle.val($(this).val())}});confirmRight({msg:'拷贝或复制数据处理',yes:'复制',no:'拷贝',close:!0},function(){ajaxOpen({type:'POST',dataType:'json',url:ulink('cpattern/clone_process'),data:$(formEle).serialize(),success:function(data){if(data.code==1){$_o.processForm=processForm;$_o.processBox=processBox;$_o.add(data.data);toastr.success(data.msg)}}})},function(){ajaxOpen({type:'POST',dataType:'json',url:ulink('cpattern/clone_process?op=copy'),data:$(formEle).serialize(),success:function(data){if(data.code==1){toastr.success(data.msg)}}})})})})($_o.processForm,$_o.processBox);$($_o.processForm).on('click','.c-p-process-del',function(){$_o.del(this)});globalOp.eleExchange($_o.processForm+' .c-p-process-accordion','.panel-title-ops .icon-drag-move','.panel');if(processData){for(var i in processData){if(processData[i]){$_o.add(processData[i])}}}
$($_o.processForm).prop('inited',1)},add_sub:function(){var $_o=this;ajaxOpen({type:'POST',dataType:'json',url:$($_o.processForm).attr('action'),data:$($_o.processForm).serialize(),success:function(data){if(data.code==1){$('#myModal').modal('hide');if(data.data&&data.data.objid){$($_o.$_cp.formid+' #'+data.data.objid).find('input[name="config[field_process][]"]').val(data.data.process_json?url_base64encode(data.data.process_json):'');var ptitle='';var processData=data.data.process;if(processData){ptitle=[];for(var i in processData){ptitle.push(window.tpl_lang['process_module_'+processData[i].module]+(processData[i].title?(''+processData[i].title):''))}
ptitle=ptitle.join(' / ')}
if(processData&&ptitle){$($_o.$_cp.formid+' #'+data.data.objid).find('.field-process').addClass('exist-process').attr('title',ptitle)}else{$($_o.$_cp.formid+' #'+data.data.objid).find('.field-process').removeClass('exist-process').attr('title','')}}}else{toastr.error(data.msg)}},error:function(data){toastr.error(data)}});return!1},del:function(obj){var $_o=this;confirmRight('是否删除?',function(){$(obj).parents('.panel').eq(0).remove()})},load_if_func:function(box,setVal){var $_o=this;pluginFuncOp.load({module:'processIf',boxObj:box,funcObj:'[data-process="if:if_addon:func:"]',paramObj:'[data-process="if:if_val:"]',funcVal:setVal,cache:!0})},add:function(params){var $_o=this;params=params?params:{};if(!params.module){toastr.error('请选择处理方式');return!1}
params.module=htmlspecialchars(params.module);params.title=params.title?htmlspecialchars(params.title):'';var parentid=$($_o.processForm+' .c-p-process-accordion').attr('id');if(!parentid){parentid='p_accordion_'+generateUUID();$($_o.processForm+' .c-p-process-accordion').attr('id',parentid)}
var dataParent=parentid?('data-parent="#'+parentid+'"'):'';var moduleHtml=$($_o.processBox+' .c-p-process-module[module="'+params.module+'"]').html();if(params.module=='html'){moduleHtml=moduleHtml.replace(/p_m_html_allow/ig,'p_m_html_allow_'+generateUUID());moduleHtml=moduleHtml.replace(/p_m_html_filter/ig,'p_m_html_filter_'+generateUUID())}
var processName='process[i_'+generateUUID()+']';moduleHtml='<input type="hidden" name="'+processName+'[module]" value="'+params.module+'" />'+moduleHtml;var collapseId='p_collapse_'+generateUUID();var html=$_o.$_cp.clone_tpl('#coll_tpl_process');html.attr('data-name',processName);html.find('a[data-toggle="collapse"]').attr('data-parent','#'+parentid).attr('href','#'+collapseId);if(params.title){html.find('.panel-title > a[data-toggle="collapse"]').text(window.tpl_lang['process_module_'+params.module]+'');html.find('.panel-title-title > a[data-toggle="collapse"]').text(params.title).show()}else{html.find('.panel-title > a[data-toggle="collapse"]').text(window.tpl_lang['process_module_'+params.module]);html.find('.panel-title-title > a[data-toggle="collapse"]').hide()}
html.find('.panel-title-title > input:text').attr('name',processName+'[title]').val(params.title?params.title:'');html.find('.panel-collapse').attr('id',collapseId);if(params.add_new){html.find('.panel-collapse').addClass('in')}
var processName='process[i_'+generateUUID()+']';moduleHtml='<input type="hidden" name="'+processName+'[module]" value="'+params.module+'" />'+moduleHtml;var collapseId='p_collapse_'+generateUUID();var html=$_o.$_cp.clone_tpl('#coll_tpl_process',processName);html.attr('data-name',processName);html.find('a[data-toggle="collapse"]').attr('data-parent','#'+parentid).attr('href','#'+collapseId);if(params.title){html.find('.panel-title > a[data-toggle="collapse"]').text(window.tpl_lang['process_module_'+params.module]+'');html.find('.panel-title-title > a[data-toggle="collapse"]').text(params.title).show()}else{html.find('.panel-title > a[data-toggle="collapse"]').text(window.tpl_lang['process_module_'+params.module]);html.find('.panel-title-title > a[data-toggle="collapse"]').hide()}
html.find('.panel-title-title input[name$="[title]"]').val(params.title?params.title:'');html.find('.panel-title-ops input[name$="[close]"]').val(params.close?params.close:'');html.find('.panel-collapse').attr('id',collapseId);if(toInt(params.close)>0){html.find('.c-p-process-close').attr('title','已禁用').addClass('c-p-process-closed');html.addClass('wrapper-not-enable')}
if(params.add_new){html.find('.panel-collapse').addClass('in')}
html.find('.panel-body').html(moduleHtml);$($_o.processForm+' .c-p-process-accordion').append(html);$($_o.processForm).show();var curCollapse=$_o.processForm+' #'+collapseId;$(curCollapse).find('[data-process]').each(function(){var eleName=$(this).attr('data-process').split(':');eleName[1]=processName+'['+eleName[1]+']';if(eleName.length>=3){eleName[1]+=eleName[2]?('['+eleName[2]+']'):'[]'}
if(eleName.length>=4){eleName[1]+=eleName[3]?('['+eleName[3]+']'):'[]'}
$(this).attr('name',eleName[1])});if(params.module=='html'){$(curCollapse).find('[data-process="html:html_allow"]').val(params.html_allow?params.html_allow:'');$(curCollapse).find('[data-process="html:html_filter"]').val(params.html_filter?params.html_filter:'');if(params.html_filter){$(curCollapse).find('a[href^="#p_m_html_filter"]').tab('show')}}else if(params.module=='insert'){$(curCollapse).find('[data-process="insert:insert_loc"]').val(params.insert_loc?params.insert_loc:'').trigger('change');$(curCollapse).find('[data-process="insert:insert_txt"]').val(params.insert_txt?params.insert_txt:'')}else if(params.module=='replace'){$(curCollapse).find('[data-process="replace:replace_from"]').val(params.replace_from?params.replace_from:'');$(curCollapse).find('[data-process="replace:replace_to"]').val(params.replace_to?params.replace_to:'')}else if(params.module=='filter'){$(curCollapse).find('[data-process="filter:filter_list"]').val(params.filter_list?params.filter_list:'');$(curCollapse).find('[data-process="filter:filter_replace"]').val(params.filter_replace?params.filter_replace:'');$(curCollapse).find('[data-process="filter:filter_pass"][value="'+params.filter_pass+'"]').prop('checked',!0)}else if(params.module=='tool'){$(curCollapse).find('[data-process="tool:tool_list"]').attr('name',processName+'[tool_list][]');if(params.tool_list){for(var ti in params.tool_list){$(curCollapse).find('[data-process="tool:tool_list"][value="'+params.tool_list[ti]+'"]').prop('checked',!0)}}}else if(params.module=='download'){$(curCollapse).find('[data-process="download:download_op"]').val(params.download_op?params.download_op:'').trigger('change');$(curCollapse).find('[data-process="download:download_file_tag"]').val(params.download_file_tag?params.download_file_tag:'');$(curCollapse).find('[data-process="download:download_file_must"]').val(params.download_file_must?params.download_file_must:'');$(curCollapse).find('[data-process="download:download_file_ban"]').val(params.download_file_ban?params.download_file_ban:'')}else if(params.module=='translate'){$(curCollapse).find('[data-process="translate:translate_from"]').val(params.translate_from?params.translate_from:'').trigger('change');$(curCollapse).find('[data-process="translate:translate_to"]').val(params.translate_to?params.translate_to:'').trigger('change');$(curCollapse).find('[data-process="translate:translate_from_custom"]').val(params.translate_from_custom?params.translate_from_custom:'');$(curCollapse).find('[data-process="translate:translate_to_custom"]').val(params.translate_to_custom?params.translate_to_custom:'')}else if(params.module=='batch'){$(curCollapse).find('[data-process="batch:batch_list"]').val(params.batch_list?params.batch_list:'');$(curCollapse).find('[data-process="batch:batch_sign"]').val(params.batch_sign?params.batch_sign:'')}else if(params.module=='substr'){$(curCollapse).find('[data-process="substr:substr_len"]').val(params.substr_len?params.substr_len:'');$(curCollapse).find('[data-process="substr:substr_end"]').val(params.substr_end?params.substr_end:'')}else if(params.module=='func'){$(curCollapse).find('[data-process="func:func_param"]').val(params.func_param?params.func_param:'');pluginFuncOp.load({module:'process',boxObj:$(curCollapse),funcObj:'[data-process="func:func_name"]',paramObj:'[data-process="func:func_param"]',funcVal:params.func_name,cache:!0})}else if(params.module=='if'){var ifTrTpl=$(curCollapse).find('.p-m-if-table-tpl');var ifTable=$(curCollapse).find('.p-m-if-table');ifTable.attr('data-tpl',ifTrTpl.html());ifTrTpl.remove();if(params.if_type){$(curCollapse).find('[data-process="if:if_type"]').val(params.if_type)}
if(params.if_stop){$(curCollapse).find('[data-process="if:if_stop"]').val(params.if_stop)}
if(params.if_logic&&params.if_cond&&params.if_val){params.if_addon=params.if_addon?params.if_addon:{};for(var i in params.if_logic){ifTable.find('tbody').append('<tr data-if-id="'+i+'">'+ifTable.attr('data-tpl')+'</tr>');var curIfTr=ifTable.find('tr[data-if-id="'+i+'"]');curIfTr.find('[data-process="if:if_logic:"]').val(params.if_logic[i]);curIfTr.find('[data-process="if:if_cond:"]').val(params.if_cond[i]).trigger('change');curIfTr.find('[data-process="if:if_val:"]').val(params.if_val[i]);if(params.if_cond[i]=='func'){var ifFuncVal='';if(params.if_addon.func){ifFuncVal=params.if_addon.func[i]}
$_o.load_if_func(curIfTr,ifFuncVal);if(params.if_addon.turn){curIfTr.find('[data-process="if:if_addon:turn:"]').val(params.if_addon.turn[i])}}}}
eleExchange(curCollapse+' .p-m-if-table','.icon-drag-move','tbody tr')}else if(params.module=='api'){var apiTrTpl=$(curCollapse).find('.p-m-api-table-tpl');var apiTable=$(curCollapse).find('.p-m-api-table table');apiTable.attr('data-tpl',apiTrTpl.html());apiTrTpl.remove();var apiHdTrTpl=$(curCollapse).find('.p-m-api-header-table-tpl');var apiHdTable=$(curCollapse).find('.p-m-api-header-table table');apiHdTable.attr('data-tpl',apiHdTrTpl.html());apiHdTrTpl.remove();if(params.api_params){params.api_params.name=params.api_params.name?params.api_params.name:{};params.api_params.val=params.api_params.val?params.api_params.val:{};params.api_params.addon=params.api_params.addon?params.api_params.addon:{};for(var i in params.api_params.name){var trId='p-m-api-param_'+generateUUID();var trTpl='<tr id="'+trId+'">'+apiTable.attr('data-tpl')+'</tr>';apiTable.find('tbody').append(trTpl);apiTable.find('#'+trId+' [data-process="api:api_params:name:"]').val(params.api_params.name[i]);apiTable.find('#'+trId+' [data-process="api:api_params:val:"]').val(params.api_params.val[i]?params.api_params.val[i]:'').trigger('change');apiTable.find('#'+trId+' [data-process="api:api_params:addon:"]').val(params.api_params.addon[i]?params.api_params.addon[i]:'')}}
globalOp.eleExchange(curCollapse+' .p-m-if-table','.icon-drag-move','tbody tr')}else if(params.module=='api'){var apiTrTpl=$(curCollapse).find('.p-m-api-table-tpl');var apiTable=$(curCollapse).find('.p-m-api-table table');apiTable.attr('data-tpl',apiTrTpl.html());apiTrTpl.remove();var apiHdTrTpl=$(curCollapse).find('.p-m-api-header-table-tpl');var apiHdTable=$(curCollapse).find('.p-m-api-header-table table');apiHdTable.attr('data-tpl',apiHdTrTpl.html());apiHdTrTpl.remove();if(params.api_params){params.api_params.name=params.api_params.name?params.api_params.name:{};params.api_params.val=params.api_params.val?params.api_params.val:{};params.api_params.addon=params.api_params.addon?params.api_params.addon:{};for(var i in params.api_params.name){var trId='p-m-api-param_'+generateUUID();var trTpl='<tr id="'+trId+'">'+apiTable.attr('data-tpl')+'</tr>';apiTable.find('tbody').append(trTpl);apiTable.find('#'+trId+' [data-process="api:api_params:name:"]').val(params.api_params.name[i]);apiTable.find('#'+trId+' [data-process="api:api_params:val:"]').val(params.api_params.val[i]?params.api_params.val[i]:'').trigger('change');apiTable.find('#'+trId+' [data-process="api:api_params:addon:"]').val(params.api_params.addon[i]?params.api_params.addon[i]:'')}}
if(params.api_headers){params.api_headers.name=params.api_headers.name?params.api_headers.name:{};params.api_headers.val=params.api_headers.val?params.api_headers.val:{};params.api_headers.addon=params.api_headers.addon?params.api_headers.addon:{};for(var i in params.api_headers.name){var trId='p-m-api-header_'+generateUUID();var trTpl='<tr id="'+trId+'">'+apiHdTable.attr('data-tpl')+'</tr>';apiHdTable.find('tbody').append(trTpl);apiHdTable.find('#'+trId+' [data-process="api:api_headers:name:"]').val(params.api_headers.name[i]);apiHdTable.find('#'+trId+' [data-process="api:api_headers:val:"]').val(params.api_headers.val[i]?params.api_headers.val[i]:'').trigger('change');apiHdTable.find('#'+trId+' [data-process="api:api_headers:addon:"]').val(params.api_headers.addon[i]?params.api_headers.addon[i]:'')}}
params.api_json_arr=params.api_json_arr?params.api_json_arr:'implode';for(var i in params){if(isObject(params[i])){continue}
$(curCollapse).find('[data-process="api:'+i+'"]').val(params[i]?params[i]:'')}
$(curCollapse).find('[data-process="api:api_type"]').trigger('change');$(curCollapse).find('[data-process="api:api_charset"]').trigger('change');$(curCollapse).find('[data-process="api:api_encode"]').trigger('change');$(curCollapse).find('[data-process="api:api_rule_module"]').trigger('change');cpRuleModuleLoad(curCollapse,processName,'api_',params)}
$(curCollapse).find('[data-process="api:api_type"]').trigger('change');$(curCollapse).find('[data-process="api:api_charset"]').trigger('change');$(curCollapse).find('[data-process="api:api_encode"]').trigger('change');$(curCollapse).find('[data-process="api:api_rule_module"]').trigger('change');ruleInsertSign.cpRuleModuleLoad(curCollapse,processName,'api_',params)}else if(params.module=='apiapp'){pluginApiOp.load({module:'process',boxObj:$(curCollapse),appObj:'[data-process="apiapp:apiapp_app"]',appApp:params.apiapp_app,appConfig:params.apiapp_config,namePre:processName+'[apiapp_config]',cache:!0})}else if(params.module=='extract'){$(curCollapse).find('[data-process="extract:extract_module"]').val(params.extract_module).trigger('change');ruleInsertSign.cpRuleModuleLoad(curCollapse,processName,'extract_',params)}
if($_o.processForm!=$_o.processFormField){$('#myModal').modal('hide')}},txt_insert_field:function(boxEle,sltEle,txtObjFunc){var $_o=this;$(boxEle).on('mouseover',sltEle,function(){if(!$(this).attr('data-loaded')){var fieldNames=$_o.$_cp.get_field_names(!0);var html='<option value="">插入字段</option><option value="###">###表示当前字段</option>';if(fieldNames){var formField=$(this).parents($_o.processFormField).eq(0).find('[name="field"]').val();if(formField){for(var i=0;i<fieldNames.length;i++){var curField=fieldNames[i];if(formField&&formField==curField){if(i<fieldNames.length-1){html+='<optgroup label="不能调用当前字段顺序后面的字段,可移动字段位置使之生效"></optgroup>'}
break}
html+='<option value="[字段:'+curField+']">字段:'+curField+'</option>'}}else{html+='<optgroup label="通用数据处理仅支持调用当前字段"></optgroup>'}}
$(this).html(html);$(this).attr('data-loaded',1)}});$($_o.processForm).on('mouseout',sltEle,function(){$(this).removeAttr('data-loaded')});$($_o.processForm).on('change',sltEle,function(){var val=$(this).val();$(this).val('');if(val&&txtObjFunc){var txtObj=txtObjFunc(this);insertAtCaret(txtObj,val)}})}}
$(this).html(html);$(this).attr('data-loaded',1)}});$($_o.processForm).on('mouseout',sltEle,function(){$(this).removeAttr('data-loaded')});$($_o.processForm).on('change',sltEle,function(){var val=$(this).val();$(this).val('');if(val&&txtObjFunc){var txtObj=txtObjFunc(this);globalOp.insertAtCaret(txtObj,val)}})}}
function CpContentSign(cpClass){this.$_cp=cpClass;this.formObj='#form_content_sign';this.curPageType='';this.curPageConfig={}}
CpContentSign.prototype={constructor:CpContentSign,page_init:function(pageType){var $_o=this;var pageVars=$_o.$_cp.get_page_vars(pageType);var boxId=pageVars.boxId;var namePre=pageVars.namePre;var formId=pageVars.formId;if(!boxId||!namePre){return}
boxId+='_content_sign';var editFunc=function(postData){window.modal_scroll_top=$('#myModal').scrollTop();if(!isObject(postData)){postData={}}
postData.page_type=pageType;if($_o.$_cp.page_is_list(pageType)){postData.page_config=$(formId).serialize()}
var options={};options.ajax={type:'post',data:postData};windowModal('添加内容标签',ulink("cpattern/content_sign"),options)};$(boxId+' .add-url-content-sign').bind('click',function(){editFunc(null)});$(boxId+' .c-p-url-content-signs').on('click','[data-content-sign]',function(){var parent=$(this).parents('[id^="content_sign_"]').eq(0);var objid=parent.attr('id');var postData={};postData.objid=objid;postData.content_sign=parent.find('[name="'+namePre+'[content_signs][]"]').val();editFunc(postData)});$(boxId+' .c-p-url-content-signs').on('click','.delete',function(){var parent=$(this).parents('[id^="content_sign_"]').eq(0);confirmRight('确定删除?',function(){parent.remove()})})},page_load:function(pageType,contentSigns){var $_o=this;var pageVars=$_o.$_cp.get_page_vars(pageType);var boxId=pageVars.boxId;if(!boxId){return}
boxId+='_content_sign';if(isObject(contentSigns)&&contentSigns.length>0){for(var i in contentSigns){$_o.page_add(pageType,'',contentSigns[i])}
showPanelCollapse(boxId)}},page_add:function(pageType,objid,contentSign){if(!isObject(contentSign)){return}
globalOp.showPanelCollapse(boxId)}},page_add:function(pageType,objid,contentSign){if(!isObject(contentSign)){return}
var $_o=this;var pageVars=$_o.$_cp.get_page_vars(pageType);var boxId=pageVars.boxId;var namePre=pageVars.namePre;if(!boxId||!namePre){return}
boxId+='_content_sign';if(contentSign._objid){objid=contentSign._objid;delete contentSign._objid}
var signName=window.tpl_lang.sign_match.replace('{:id}',htmlspecialchars(contentSign.identity));var tpl='<a href="javascript:;" data-content-sign="__ident__">__name__</a><em class="glyphicon glyphicon-remove-circle delete"></em><input type="hidden" name="'+namePre+'[content_signs][]" value="__val__" />';tpl=tpl.replace(/__ident__/ig,htmlspecialchars(contentSign.identity)).replace(/__name__/ig,signName).replace(/__val__/ig,encode_json2urlbase(contentSign));var eleId='content_sign_'+pageType+'_'+url_base64encode(contentSign.identity);if(!objid){$('#'+eleId).remove()}
@ -244,14 +249,7 @@ $('#'+eleId).html(tpl);if(objid&&objid!=eleId){if(document.getElementById(objid)
$($_o.formObj).bind('submit',function(){$_o.add_sub();return!1});if(!isObject(pageConfig)){pageConfig={}}
if(!isObject(pageConfig[namePre])){pageConfig[namePre]={}}
$_o.curPageType=pageType;$_o.curPageConfig=pageConfig;if($_o.$_cp.page_is_list($_o.curPageType)){$('#myModal').on('hidden.bs.modal',function(e){if($_o.$_cp.page_is_list($_o.curPageType)){var curPageVars=$_o.$_cp.get_page_vars($_o.curPageType);var namePre=curPageVars.namePre;var options={'ajax_scroll_top':window.modal_scroll_top,lg:1,ajax:{type:'post',data:{}}};options.ajax.data.objid=$_o.curPageConfig.objid;options.ajax.data[namePre]=encode_json2urlbase($_o.curPageConfig[namePre]);windowModal('编辑'+curPageVars.title+'规则',ulink('cpattern/'+$_o.curPageType),options)}})}
$($_o.formObj+' select[name="content_sign[module]"]').bind('change',function(){$($_o.formObj+' .c-p-content-sign-module').hide();$($_o.formObj+' .c-p-content-sign-module[data-module="'+$(this).val()+'"]').show()});$($_o.formObj+' #c_p_content_sign_add_func').bind('click',function(){$_o.add_func(null)});pluginFuncOp.initHtml($_o.formObj+' #c_p_content_sign_funcs');cpRuleModuleInit($_o.formObj,'content_sign','');if(contentSign){$($_o.formObj+' [name="objid"]').attr('data-identity',contentSign.identity);for(var i in contentSign){var csEle=$($_o.formObj+' [name="content_sign['+i+']"]');if(csEle.is('input:text')){csEle.val(contentSign[i])}else if(csEle.is('select')){csEle.val(contentSign[i]).trigger("change")}}
cpRuleModuleLoad($_o.formObj,'content_sign','',contentSign);if(isObject(contentSign.funcs)){for(var i in contentSign.funcs){$_o.add_func(contentSign.funcs[i])}}}},add_func:function(contentSignFunc){var $_o=this;pluginFuncOp.addHtml({funcData:contentSignFunc,funcName:'content_sign[funcs][{id}][func]',funcParamName:'content_sign[funcs][{id}][func_param]',tplId:'c_p_content_sign_tpl_func',listId:'c_p_content_sign_funcs',funcId:'c_p_content_sign_func_{id}'},'contentSign')},add_sub:function(){var $_o=this;ajaxOpen({type:'POST',dataType:'json',url:$($_o.formObj).attr('action'),data:$($_o.formObj).serialize(),success:function(data){if(data.code==1){data=data.data;if(data&&data.content_sign){var contentSign=data.content_sign;if($_o.$_cp.page_is_list($_o.curPageType)){var namePre=$_o.$_cp.get_page_vars($_o.curPageType,'namePre');var pageTypeConfig=$_o.curPageConfig[namePre];if(!isObject(pageTypeConfig.content_signs)){pageTypeConfig.content_signs=[]}
$($_o.formObj+' select[name="content_sign[module]"]').bind('change',function(){$($_o.formObj+' .c-p-content-sign-module').hide();$($_o.formObj+' .c-p-content-sign-module[data-module="'+$(this).val()+'"]').show()});$($_o.formObj+' #c_p_content_sign_add_func').bind('click',function(){$_o.add_func(null)});pluginFuncOp.initHtml($_o.formObj+' #c_p_content_sign_funcs');ruleInsertSign.cpRuleModuleInit($_o.formObj,'content_sign','');if(contentSign){$($_o.formObj+' [name="objid"]').attr('data-identity',contentSign.identity);for(var i in contentSign){var csEle=$($_o.formObj+' [name="content_sign['+i+']"]');if(csEle.is('input:text')){csEle.val(contentSign[i])}else if(csEle.is('select')){csEle.val(contentSign[i]).trigger("change")}}
ruleInsertSign.cpRuleModuleLoad($_o.formObj,'content_sign','',contentSign);if(isObject(contentSign.funcs)){for(var i in contentSign.funcs){$_o.add_func(contentSign.funcs[i])}}}},add_func:function(contentSignFunc){var $_o=this;pluginFuncOp.addHtml({funcData:contentSignFunc,funcName:'content_sign[funcs][{id}][func]',funcParamName:'content_sign[funcs][{id}][func_param]',tplId:'c_p_content_sign_tpl_func',listId:'c_p_content_sign_funcs',funcId:'c_p_content_sign_func_{id}'},'contentSign')},add_sub:function(){var $_o=this;ajaxOpen({type:'POST',dataType:'json',url:$($_o.formObj).attr('action'),data:$($_o.formObj).serialize(),success:function(data){if(data.code==1){data=data.data;if(data&&data.content_sign){var contentSign=data.content_sign;if($_o.$_cp.page_is_list($_o.curPageType)){var namePre=$_o.$_cp.get_page_vars($_o.curPageType,'namePre');var pageTypeConfig=$_o.curPageConfig[namePre];if(!isObject(pageTypeConfig.content_signs)){pageTypeConfig.content_signs=[]}
contentSign._objid=data.objid;pageTypeConfig.content_signs.push(contentSign);$_o.curPageConfig[namePre]=pageTypeConfig}else{$_o.page_add($_o.curPageType,data.objid,contentSign)}}
$('#myModal').modal('hide')}else{toastr.error(data.msg)}},error:function(data){toastr.error(data)}});return!1}}
function cpRuleModuleInit(boxId,name,namePre){namePre=namePre?namePre:'';var isProcess=(name=='data-process')?true:!1;if(isProcess){$(boxId).on('change','[data-process="'+namePre+'rule_multi"]',function(){var prt=$(this).parents('.p-m-api-rule-module').eq(0);if($(this).is(':checked')){prt.find('.p-m-api-rule-multi-str').show()}else{prt.find('.p-m-api-rule-multi-str').hide()}});inputSelectCustom(null,null,{box:boxId,slt:'[data-process="'+namePre+'xpath_attr"]',ipt:'[data-process="'+namePre+'xpath_attr_custom"]'});$(boxId).on('change','[data-process="'+namePre+'xpath_multi"]',function(){var prt=$(this).parents('.p-m-api-rule-module').eq(0);if($(this).is(':checked')){prt.find('.p-m-api-xpath-multi-str').show()}else{prt.find('.p-m-api-xpath-multi-str').hide()}});$(boxId).on('change','select[data-process="'+namePre+'json_arr"]',function(){var prt=$(this).parents('.p-m-api-rule-module').eq(0);if($(this).val()=='implode'){prt.find('.p-m-api-json-arr-implode').show()}else{prt.find('.p-m-api-json-arr-implode').hide()}});$(boxId).on('click','a[data-rule-sign]',function(){var prt=$(this).parents('.p-m-api-rule-module').eq(0);var obj=prt.find('[data-process="'+namePre+'rule"]');var ruleSign=$(this).attr('data-rule-sign');if(ruleSign=='sign_wildcard'){ruleInsertSign.wildcard(obj)}else if(ruleSign=='sign_match'){ruleInsertSign.match(obj)}else if(ruleSign=='sign_group'){ruleInsertSign.match(obj,{group:1})}else if(ruleSign=='sign_match_n'){var ruleMerge=prt.find('[data-process="'+namePre+'rule_merge"]');ruleInsertSign.matchN(obj,ruleMerge,{def:1})}})}else{$(boxId+' [name="'+name+'['+namePre+'rule_multi]"]').bind('change',function(){if($(this).is(':checked')){$(boxId+' #c_p_'+name+'_'+namePre+'rule_multi_str').show()}else{$(boxId+' #c_p_'+name+'_'+namePre+'rule_multi_str').hide()}});inputSelectCustom(boxId+' select[name="'+name+'['+namePre+'xpath_attr]"]',name+'['+namePre+'xpath_attr_custom]');$(boxId+' [name="'+name+'['+namePre+'xpath_multi]"]').bind('change',function(){if($(this).is(':checked')){$(boxId+' #c_p_'+name+'_'+namePre+'xpath_multi_str').show()}else{$(boxId+' #c_p_'+name+'_'+namePre+'xpath_multi_str').hide()}});$(boxId+' select[name="'+name+'['+namePre+'json_arr]"]').bind('change',function(){if($(this).val()=='implode'){$(boxId+' #c_p_'+name+'_'+namePre+'json_arr_implode').show()}else{$(boxId+' #c_p_'+name+'_'+namePre+'json_arr_implode').hide()}})}}
function cpRuleModuleLoad(boxId,name,namePre,config){namePre=namePre?namePre:'';if(config){$(boxId+' [name="'+name+'['+namePre+'rule]"]').val(config[namePre+'rule']);$(boxId+' [name="'+name+'['+namePre+'rule_merge]"]').val(config[namePre+'rule_merge']);if(config[namePre+'rule_multi']){$(boxId+' [name="'+name+'['+namePre+'rule_multi]"]').prop('checked',!0).trigger('change')}
$(boxId+' [name="'+name+'['+namePre+'rule_multi_type]"][value="'+(config[namePre+'rule_multi_type']?config[namePre+'rule_multi_type']:'')+'"]').prop('checked',!0);$(boxId+' [name="'+name+'['+namePre+'xpath]"]').val(config[namePre+'xpath']);if(config[namePre+'xpath_multi']){$(boxId+' [name="'+name+'['+namePre+'xpath_multi]"]').prop('checked',!0).trigger('change')}
$(boxId+' [name="'+name+'['+namePre+'xpath_multi_type]"][value="'+(config[namePre+'xpath_multi_type']?config[namePre+'xpath_multi_type']:'')+'"]').prop('checked',!0);if(config[namePre+'json_loop']){$(boxId+' [name="'+name+'['+namePre+'json_loop]"]').prop('checked',!0)}
if(config[namePre+'json_arr']){$(boxId+' [name="'+name+'['+namePre+'json_arr]"]').val(config[namePre+'json_arr']).trigger('change')}
$(boxId+' [name="'+name+'['+namePre+'json_arr_implode]"]').val(config[namePre+'json_arr_implode'])}}
function cpDelimiterTips(){var tips='<p>如需使用换行符,请注意区别:</p><p>文本换行符:<b>\\r\\n</b>(适用于系统文件中)</p><p>标签换行符:<b>&lt;br /&gt;</b>适用于网页HTML中</p>';confirmRight({msg:tips,yes:'确定',width:350,textAlign:'left'})}
$('#myModal').modal('hide')}else{toastr.error(data.msg)}},error:function(data){toastr.error(data)}});return!1}}

View File

@ -49,11 +49,13 @@ if(!isShow){if(clickObj){isShow=$(clickObj).data('skycaiji-click')}}
if(typeof isShow=='undefined'||isShow==null){isShow=$($_o.consoleId+' [skycaiji-id="'+btnId+'"]').attr('data-val')==1?true:!1}else{isShow=$_o.toInt(isShow);isShow=isShow==1?true:!1}
if(isShow){if($_o.bdNum>=$_o.bdNumMax){$_o.bdNum=0}
$_o.bdNum+=1}
var bdAll='skycaiji_bd';for(var i=1;i<=$_o.bdNumMax;i++){bdAll+=' skycaiji_bd'+i}
if(ix>-1){var parentXpath=xpath.slice(0,ix+1);parentXpath=parentXpath.join('/');var subXpath=xpath.slice(ix+1);subXpath=subXpath.join('/');var parentCsspath=$_o.xpath2csspath(parentXpath);var subCsspath=$_o.xpath2csspath(subXpath);if(subCsspath){var curIndex=-1;$(parentCsspath).each(function(){curIndex++;var curCsspath=parentCsspath+':eq('+curIndex+')>'+subCsspath;$(curCsspath).removeClass(bdAll);if(isShow){$(curCsspath).addClass('skycaiji_bd skycaiji_bd'+$_o.bdNum)}})}else{$(parentCsspath).removeClass(bdAll);if(isShow){$(parentCsspath).addClass('skycaiji_bd skycaiji_bd'+$_o.bdNum)}}}else{var csspath=$_o.xpath2csspath(xpath.join('/'));$(csspath).removeClass(bdAll);if(isShow){$(csspath).addClass('skycaiji_bd skycaiji_bd'+$_o.bdNum)}}
var bdList=(btnId=='show-listXpath'?' skycaiji_bd_list':'');var bdAll='skycaiji_bd';for(var i=1;i<=$_o.bdNumMax;i++){bdAll+=' skycaiji_bd'+i}
if(ix>-1){var parentXpath=xpath.slice(0,ix+1);parentXpath=parentXpath.join('/');var subXpath=xpath.slice(ix+1);subXpath=subXpath.join('/');var parentCsspath=$_o.xpath2csspath(parentXpath);var subCsspath=$_o.xpath2csspath(subXpath);if(subCsspath){var curIndex=-1;$(parentCsspath).each(function(){curIndex++;var curCsspath=parentCsspath+':eq('+curIndex+')>'+subCsspath;$(curCsspath).removeClass(bdAll);$(curCsspath).removeClass('skycaiji_bd_list');if(isShow){$(curCsspath).addClass('skycaiji_bd skycaiji_bd'+$_o.bdNum+bdList)}})}else{$(parentCsspath).removeClass(bdAll);$(parentCsspath).removeClass('skycaiji_bd_list');if(isShow){$(parentCsspath).addClass('skycaiji_bd skycaiji_bd'+$_o.bdNum+bdList)}}}else{var csspath=$_o.xpath2csspath(xpath.join('/'));$(csspath).removeClass(bdAll);$(csspath).removeClass('skycaiji_bd_list');if(isShow){$(csspath).addClass('skycaiji_bd skycaiji_bd'+$_o.bdNum+bdList)}}
if(clickObj){$(clickObj).removeClass('skycaiji_bd_list')}
$_o.xpath_btn_status(btnId,isShow?0:1)},xpath_btn_status:function(btnId,status){$(this.consoleId+' [skycaiji-id="'+btnId+'"]').attr('data-val',status?1:0).text(status?'显示':'取消')},tips:function(msg,time,addClass,close){var $_o=this;time=$_o.toInt(time);time=time>0?time:3000;if(addClass){$('#skycaiji_tips').addClass(addClass)}else{$('#skycaiji_tips').prop('class','')}
if(close){msg='<div class="skycaiji-close">关闭</div>'+msg}
$('#skycaiji_tips').stop().css('opacity','1.0').html(msg).show();if(!close){$('#skycaiji_tips').fadeOut(time)}},clear_skycaiji_style:function(){var $_o=this;$('*').removeClass('skycaiji_bg');$('*').removeClass('skycaiji_bd');for(var i=1;i<=$_o.bdNumMax;i++){$('*').removeClass('skycaiji_bd'+i)}},copy_val:function(obj){var $_o=this;var val=$(obj).val();if(val){$(obj).select();window.document.execCommand('Copy')}
$('#skycaiji_tips').stop().css('opacity','1.0').html(msg).show();if(!close){$('#skycaiji_tips').fadeOut(time)}},clear_skycaiji_style:function(){var $_o=this;$('*').removeClass('skycaiji_bg');$('*').removeClass('skycaiji_bd');for(var i=1;i<=$_o.bdNumMax;i++){$('*').removeClass('skycaiji_bd'+i)}
$('*').removeClass('skycaiji_bd_list')},copy_val:function(obj){var $_o=this;var val=$(obj).val();if(val){$(obj).select();window.document.execCommand('Copy')}
$_o.tips('复制成功!',1500)},htmlspecialchars:function(str){if(str&&typeof(str)=='string'){str=str.replace(/\&/g,'&amp;').replace(/\</g,'&lt;').replace(/\>/g,'&gt;').replace(/\"/g,'&quot;').replace(/\'/g,'&#039;')}
return str},toInt:function(val){val=val?val:0;val=parseInt(val);if(isNaN(val)){val=0}
return val}}

View File

@ -7,9 +7,9 @@
| 使用协议 https://www.skycaiji.com/licenses
|--------------------------------------------------------------------------
*/
'use strict';function CpatternEasy(){this.collIfrId='#ifr_collector';this.browserIfrId='#ifr_browser';this.guideId='#box_guide';this.timer=null;this.timerCount=0;this.intro=null;this.step={isNext:!1,from:null,to:null,last:null};this.getToStep=null;this.eleList=[];this.eleListBackup=[{element:'#coll_tab [href="#coll_pattern_source"]',intro:'采集网页先配置抓取入口',is_tab:1},{element:'#coll_pattern_source_url .add-source-url',intro:'添加列表页网址',is_modal:1},{element:'#form_source [href="#tab_custom"]',intro:'切换到手工指定',in_modal:1},{element:'#form_source [name="source[urls]"]',intro:'输入网址,一行一条列表页网址(http://或https://开头)',in_modal:1},{element:'#form_source [type="submit"]',intro:'保存网址',in_modal:1,is_submit:1},{element:'#coll_pattern_source_url .c-p-source-urls [id^="source_url_"]:last',intro:'刚才输入的列表页网址 <a href="javascript:;" onclick="cpEasyBrowser($(\'#coll_pattern_source .c-p-source-urls > .form-group:last input:text\').val(),\'source_url\');">分析网页</a>'},{element:'#coll_tab [href="#coll_pattern_link"]',intro:'从列表页中抓取内容页网址',is_tab:1},{element:'[href="#coll_pattern_level_url"]',intro:'如需从起始页中抓取列表页网址可添加多级网址(选填)',no_click:1,in_source_url:1},{element:'#panel_coll_pattern_url',intro:'内容页网址获取',in_source_url:1},{element:'#panel_coll_pattern_url [href="#coll_pattern_url_filter"]',intro:'过滤得到最终的内容页网址(选填)',no_click:1,in_source_url:1},{element:'#panel_coll_pattern_url [href="#coll_pattern_url_area"]',intro:'仅从页面某块区域中提取网址',is_accordion:1,in_source_url:1},{element:'#panel_coll_pattern_url [name="config[area_module]"]',intro:'可选规则类型正则、xpath、json',in_source_url:1},{element:'#panel_coll_pattern_url [name="config[area]"]',intro:'输入获取网址区域的规则',in_source_url:1},{element:'#panel_coll_pattern_url [href="#coll_pattern_url_url"]',intro:'精准抓取某种格式的网址',is_accordion:1,in_source_url:1},{element:'#panel_coll_pattern_url [name="config[url_rule]"]',intro:'输入提取网址规则',in_source_url:1},{element:'#panel_coll_pattern_url [name="config[url_merge]"]',intro:'拼接成最终网址',in_source_url:1},{element:'[href="#coll_pattern_relation_url"]',intro:'如需从其他页面中抓取数据可添加关联页网址(选填)',no_click:1},{element:'#coll_tab [href="#coll_pattern_field"]',intro:'从内容页中抓取数据',is_tab:1},{element:'#coll_pattern_field .add-field',intro:'添加一个字段',is_modal:1},{element:'#form_field [name="field[name]"]',intro:'字段名称',in_modal:1},{element:'#form_field [name="field[source]"]',intro:'选择数据来源(默认内容页),从选中的页面里获取数据',in_modal:1},{element:'#form_field [name="field[module]"]',intro:'获取数据的方式',in_modal:1},{element:'#c_p_field_module',intro:'编辑字段',in_modal:1},{element:'#form_field [type="submit"]',intro:'保存字段',in_modal:1,is_submit:1},{element:'#coll_pattern_field .c-p-field-list tr:last',intro:'刚才保存的字段'},{element:'[href="#coll_pattern_process"]',intro:'将采集到的字段数据进行处理(选填)',no_click:1},{element:'[href="#coll_pattern_url_pagination"]',intro:'从分页中抓取数据(选填)',no_click:1},{element:'#form_coll [type="submit"]',intro:'保存规则'},]}
'use strict';function CpatternEasy(){this.collIfrId='#ifr_collector';this.browserIfrId='#ifr_browser';this.guideId='#box_guide';this.timer=null;this.timerCount=0;this.intro=null;this.step={isNext:!1,from:null,to:null,last:null};this.getToStep=null;this.eleList=[];this.eleListBackup=[{element:'#coll_tab [href="#coll_pattern_source"]',intro:'采集网页先配置抓取入口',is_tab:1},{element:'#coll_pattern_source_url .add-source-url',intro:'添加列表页网址',is_modal:1},{element:'#form_source [href="#tab_custom"]',intro:'切换到手工指定',in_modal:1},{element:'#form_source [name="source[urls]"]',intro:'输入网址,一行一条列表页网址(http://或https://开头)',in_modal:1},{element:'#form_source [type="submit"]',intro:'保存网址',in_modal:1,is_submit:1},{element:'#coll_pattern_source_url .c-p-source-urls [id^="source_url_"]:last',intro:'刚才输入的列表页网址 <a href="javascript:;" onclick="globalOp.cpEasyBrowser($(\'#coll_pattern_source .c-p-source-urls > .form-group:last input:text\').val(),\'source_url\');">分析网页</a>'},{element:'#coll_tab [href="#coll_pattern_link"]',intro:'从列表页中抓取内容页网址',is_tab:1},{element:'[href="#coll_pattern_level_url"]',intro:'如需从起始页中抓取列表页网址可添加多级网址(选填)',no_click:1,in_source_url:1},{element:'#panel_coll_pattern_url',intro:'内容页网址获取',in_source_url:1},{element:'#panel_coll_pattern_url [href="#coll_pattern_url_filter"]',intro:'过滤得到最终的内容页网址(选填)',no_click:1,in_source_url:1},{element:'#panel_coll_pattern_url [href="#coll_pattern_url_area"]',intro:'仅从页面某块区域中提取网址',is_accordion:1,in_source_url:1},{element:'#panel_coll_pattern_url [name="config[area_module]"]',intro:'可选规则类型正则、xpath、json',in_source_url:1},{element:'#panel_coll_pattern_url [name="config[area]"]',intro:'输入获取网址区域的规则',in_source_url:1},{element:'#panel_coll_pattern_url [href="#coll_pattern_url_url"]',intro:'精准抓取某种格式的网址',is_accordion:1,in_source_url:1},{element:'#panel_coll_pattern_url [name="config[url_rule]"]',intro:'输入提取网址规则',in_source_url:1},{element:'#panel_coll_pattern_url [name="config[url_merge]"]',intro:'拼接成最终网址',in_source_url:1},{element:'[href="#coll_pattern_relation_url"]',intro:'如需从其他页面中抓取数据可添加关联页网址(选填)',no_click:1},{element:'#coll_tab [href="#coll_pattern_field"]',intro:'从内容页中抓取数据',is_tab:1},{element:'#coll_pattern_field .add-field',intro:'添加一个字段',is_modal:1},{element:'#form_field [name="field[name]"]',intro:'字段名称',in_modal:1},{element:'#form_field [name="field[source]"]',intro:'选择数据来源(默认内容页),从选中的页面里获取数据',in_modal:1},{element:'#form_field [name="field[module]"]',intro:'获取数据的方式',in_modal:1},{element:'#c_p_field_module',intro:'编辑字段',in_modal:1},{element:'#form_field [type="submit"]',intro:'保存字段',in_modal:1,is_submit:1},{element:'#coll_pattern_field .c-p-field-list tr:last',intro:'刚才保存的字段'},{element:'[href="#coll_pattern_process"]',intro:'将采集到的字段数据进行处理(选填)',no_click:1},{element:'[href="#coll_pattern_url_pagination"]',intro:'从分页中抓取数据(选填)',no_click:1},{element:'#form_coll [type="submit"]',intro:'保存规则'},]}
CpatternEasy.prototype={constructor:CpatternEasy,init:function(resizeWidth){var $_o=this;var wHeight=$(window).height();var wWidth=$(window).width();var ifrWin=$($_o.collIfrId).get(0).contentWindow;if(wWidth>767){$($_o.collIfrId).height(wHeight+'px');$('#ifr_browser_box').height((wHeight-$('#ifr_browser_box').offset().top)+'px');$_o.resize_width(resizeWidth);var boxResize=$('#box_resize');$('#btn_resize').bind('mousedown',function(e){boxResize.addClass('btn-resize-mousedown');var distenceX=boxResize.offset().left-e.pageX;$(document).off('mousemove').bind('mousemove',function(e){var xWidth=e.pageX-distenceX;$_o.resize_width(xWidth)});$(document).off('mouseup').bind('mouseup',function(){boxResize.removeClass('btn-resize-mousedown');$(document).off('mousemove');$(document).off('mouseup');var ifrWidth=$($_o.collIfrId).width();ifrWidth=toInt(ifrWidth);ajaxOpen({type:"GET",url:ulink('cpattern/easymode_resize?width='+ifrWidth),dataType:"json",success:function(data){}})})})}else{$($_o.collIfrId).height((wHeight-50)+'px');$($_o.browserIfrId).height(wHeight+'px')}
window.addEventListener("message",function(event){var json=event.data;if(dataIsJson(json)){json=JSON.parse(json);if(json.type=='browser_url'){$_o.browser_url(json)}}},!1);$('#btn_browser').on('click',function(){var pageSource=$('#browser_source').val();var url=$('#browser_url').val();var urls=$('#browser_urls').val();urls=dataIsJson(urls)?JSON.parse(urls):{};$('#browser_urls').val('');if(url){$('#ifr_loading').remove();$('#ifr_browser_box').append('<div id="ifr_loading"></div>');var browserUrl=cpBrowserUrl($('#coll_id').val(),pageSource,url,urls);$($_o.browserIfrId).hide().attr('src',browserUrl)}});$('#browser_url').on('keyup',function(event){  if(event.keyCode=="13"){    $('#btn_browser').trigger('click');  }});$($_o.collIfrId).bind('load',function(){var ifr=$($_o.collIfrId).contents();var wrapper=ifr.find('body').children('.wrapper');wrapper.children('.main-header').hide();wrapper.children('.main-sidebar').hide();wrapper.children('.content-wrapper').css('margin-left','0px').find('.content-header>.breadcrumb').hide();var link=window.document.createElement('link');link.setAttribute('rel','stylesheet');link.setAttribute('type','text/css');link.setAttribute('href',window.site_config.pub+'/static/css/introjs.css?'+new Date().getTime());var script=window.document.createElement('script');script.setAttribute('type','text/javascript');script.setAttribute('src',window.site_config.pub+'/static/js/intro.js?'+new Date().getTime());var style=window.document.createElement('style');style.type='text/css';style.innerHTML='.intro-form-coll-zindex *{z-index:auto!important;} '+' .intro-hide .introjs-helperLayer,.intro-hide .introjs-tooltipReferenceLayer{display:none!important;}';ifr.find('head')[0].appendChild(link);ifr.find('head')[0].appendChild(script);ifr.find('head')[0].appendChild(style);$_o.intro=null;if(ifrWin.c_pattern){var curVal=$('#browser_source').val();var sourceOptions=ifrWin.c_pattern.page_source_options(!0);if(sourceOptions){$('#browser_source').html('<option value="">页面类型</option>'+sourceOptions).val(curVal)}}
window.addEventListener("message",function(event){var json=event.data;if(dataIsJson(json)){json=JSON.parse(json);if(json.type=='browser_url'){$_o.browser_url(json)}}},!1);$('#btn_browser').on('click',function(){var pageSource=$('#browser_source').val();var url=$('#browser_url').val();var urls=$('#browser_urls').val();urls=dataIsJson(urls)?JSON.parse(urls):{};$('#browser_urls').val('');if(url){$('#ifr_loading').remove();$('#ifr_browser_box').append('<div id="ifr_loading"></div>');var browserUrl=globalOp.cpBrowserUrl($('#coll_id').val(),pageSource,url,urls);$($_o.browserIfrId).hide().attr('src',browserUrl)}});$('#browser_url').on('keyup',function(event){  if(event.keyCode=="13"){    $('#btn_browser').trigger('click');  }});$($_o.collIfrId).bind('load',function(){var ifr=$($_o.collIfrId).contents();var wrapper=ifr.find('body').children('.wrapper');wrapper.children('.main-header').hide();wrapper.children('.main-sidebar').hide();wrapper.children('.content-wrapper').css('margin-left','0px').find('.content-header>.breadcrumb').hide();var link=window.document.createElement('link');link.setAttribute('rel','stylesheet');link.setAttribute('type','text/css');link.setAttribute('href',window.site_config.pub+'/static/css/introjs.css?'+new Date().getTime());var script=window.document.createElement('script');script.setAttribute('type','text/javascript');script.setAttribute('src',window.site_config.pub+'/static/js/intro.js?'+new Date().getTime());var style=window.document.createElement('style');style.type='text/css';style.innerHTML='.intro-form-coll-zindex *{z-index:auto!important;} '+' .intro-hide .introjs-helperLayer,.intro-hide .introjs-tooltipReferenceLayer{display:none!important;}';ifr.find('head')[0].appendChild(link);ifr.find('head')[0].appendChild(script);ifr.find('head')[0].appendChild(style);$_o.intro=null;if(ifrWin.c_pattern){var curVal=$('#browser_source').val();var sourceOptions=ifrWin.c_pattern.page_source_options(!0);if(sourceOptions){$('#browser_source').html('<option value="">页面类型</option>'+sourceOptions).val(curVal)}}
$($_o.collIfrId).show();$($_o.collIfrId).get(0).contentWindow.onunload=function(){$($_o.collIfrId).hide()}});$($_o.browserIfrId).bind('load',function(){$('#ifr_loading').remove();var ifr=$($_o.browserIfrId).contents();var consoleEle=ifr.find('#skycaiji_console');if(!consoleEle||consoleEle.length<=0){var wrapper=ifr.find('body').children('.wrapper');wrapper.children('.main-header').hide();wrapper.children('.main-sidebar').hide();wrapper.children('.content-wrapper').css('margin-left','0px').children('.content-header').hide()}
$($_o.browserIfrId).show();$($_o.browserIfrId).get(0).contentWindow.onunload=function(){$($_o.browserIfrId).hide()}})},resize_width:function(width){width=toInt(width);var minWidth=100;var maxWidth=$(window).width()-100;if(width<minWidth){width=minWidth}
if(width>maxWidth){width=maxWidth}

View File

@ -9,10 +9,10 @@
*/
'use strict';function CpTestSourceUrls(collId,maxNum,sourceIsUrl,hasLevels){this.coll_id=collId;this.max_num=maxNum;this.source_is_url=sourceIsUrl;this.has_levels=hasLevels;this.box_id='#win_test_source_urls';this.url_ajax_requests=new Array()}
CpTestSourceUrls.prototype={constructor:CpTestSourceUrls,init:function(){var $_o=this;$('#myModal').on('hide.bs.modal',function(e){if($_o&&$_o.url_ajax_requests){for(var i in $_o.url_ajax_requests){$_o.url_ajax_requests[i].abort()}}});$($_o.box_id).on('click','.set-test-num .set-num-btn',function(){var testNum=$($_o.box_id+' .set-test-num').find('.set-num').val();ajaxOpen({type:'get',dataType:'json',url:ulink('cpattern_test/level_num'),data:{num:testNum},async:!0,success:function(data){toastr.success(data.msg)}})});$($_o.box_id).on('click','.cont_ceshi',function(){var curUrl=$(this).attr('data-url');var test_url=ulink('cpattern_test/test_url?coll_id=_collid_&test_url=_url_',{'_collid_':$_o.coll_id,'_url_':curUrl});var urls={};$(this).parents('.source_url').each(function(){var surl=$(this).attr('data-url');if(surl){if($(this).attr('data-level')){urls['level'+$(this).attr('data-level')+'_url']=surl}else{urls.source_url=surl}}});if(urls){for(var i in urls){test_url+='&'+i+'='+encodeURIComponent(urls[i])}}
window.open(test_url,'_blank')});$($_o.box_id).on('click','.cont_element',function(){var urls={};$(this).parents('.source_url').each(function(){var surl=$(this).attr('data-url');if(surl){if($(this).attr('data-level')){urls['level'+$(this).attr('data-level')+'_url']=surl}else{urls.source_url=surl}}});if((/\beasymode\s*\=/i).test(window.self.location.href)&&window.top){cpEasyBrowser($(this).attr('data-url'),'url',urls)}else{var testUrl=$(this).attr('data-url');var browserUrl=cpBrowserUrl($_o.coll_id,'url',testUrl,urls);window.open(browserUrl,'_blank')}});$($_o.box_id).on('click','.cont_urls_num a',function(){var status=$(this).attr('status');if(status==1){$(this).html('[展开]');$(this).attr('status',0);$(this).parents('.cont_urls_num').eq(0).siblings('.cont_urls_list').hide()}else{$(this).html('[收起]');$(this).attr('status',1);$(this).parents('.cont_urls_num').eq(0).siblings('.cont_urls_list').show()}});$($_o.box_id+' .source_url').each(function(index){if(!$_o.source_is_url){var source_url=$(this).attr('data-url');if($_o.has_levels){$($_o.box_id+' .set-test-num').show().find('.set-num').val($_o.max_num);if(index<$_o.max_num){$_o.get_cont_urls(source_url,$(this),1)}}else{$_o.get_cont_urls(source_url,$(this),0)}}})},get_cont_urls:function(source_url,curObj,level,parentUrl,parentLevel){parentUrl=parentUrl?parentUrl:'';parentLevel=parentLevel?parentLevel:'';var $_o=this;if(source_url){curObj.children('.cont_urls_list').html('<div class="loading-sm"></div>').show();var url=ulink('cpattern_test/cont_urls?coll_id=_collid_',{'_collid_':$_o.coll_id});var url_ajax_request=ajaxOpen({type:'post',url:url,data:{source_url:source_url,level:level,parent_url:parentUrl,parent_level:parentLevel,},dataType:'json',async:!0,success:function(data){if(data.code==1){data=data.data?data.data:{};var urls=data.urls;var urlMsgLinks=data.urlMsgLinks;if(!isObject(urlMsgLinks)){urlMsgLinks={}}
window.open(test_url,'_blank')});$($_o.box_id).on('click','.cont_element',function(){var urls={};$(this).parents('.source_url').each(function(){var surl=$(this).attr('data-url');if(surl){if($(this).attr('data-level')){urls['level'+$(this).attr('data-level')+'_url']=surl}else{urls.source_url=surl}}});if((/\beasymode\s*\=/i).test(window.self.location.href)&&window.top){globalOp.cpEasyBrowser($(this).attr('data-url'),'url',urls)}else{var testUrl=$(this).attr('data-url');var browserUrl=globalOp.cpBrowserUrl($_o.coll_id,'url',testUrl,urls);window.open(browserUrl,'_blank')}});$($_o.box_id).on('click','.cont_urls_num a',function(){var status=$(this).attr('status');if(status==1){$(this).html('[展开]');$(this).attr('status',0);$(this).parents('.cont_urls_num').eq(0).siblings('.cont_urls_list').hide()}else{$(this).html('[收起]');$(this).attr('status',1);$(this).parents('.cont_urls_num').eq(0).siblings('.cont_urls_list').show()}});$($_o.box_id+' .source_url').each(function(index){if(!$_o.source_is_url){var source_url=$(this).attr('data-url');if($_o.has_levels){$($_o.box_id+' .set-test-num').show().find('.set-num').val($_o.max_num);if(index<$_o.max_num){$_o.get_cont_urls(source_url,$(this),1)}}else{$_o.get_cont_urls(source_url,$(this),0)}}})},get_cont_urls:function(source_url,curObj,level,parentUrl,parentLevel){parentUrl=parentUrl?parentUrl:'';parentLevel=parentLevel?parentLevel:'';var $_o=this;if(source_url){curObj.children('.cont_urls_list').html('<div class="loading-sm"></div>').show();var url=ulink('cpattern_test/cont_urls?coll_id=_collid_',{'_collid_':$_o.coll_id});var url_ajax_request=ajaxOpen({type:'post',url:url,data:{source_url:source_url,level:level,parent_url:parentUrl,parent_level:parentLevel,},dataType:'html',async:!0,success:function(data){if(!dataIsJson(data)){prompt_error(data)}else{data=JSON.parse(data);if(data.code==1){data=data.data?data.data:{};var urls=data.urls;var urlMsgLinks=data.urlMsgLinks;if(!isObject(urlMsgLinks)){urlMsgLinks={}}
var list='<ul style="list-style-type:'+(level>0?'decimal':'square')+';padding-left:15px;white-space:normal;overflow-x:scroll;">';if(level>0){for(var i in urls){var urlMsgLink=urlMsgLinks[urls[i]];urlMsgLink=urlMsgLink?urlMsgLink:'';urls[i]=htmlspecialchars(urls[i]);if(i<$_o.max_num){list+='<li class="source_url" data-url="'+urls[i]+'" data-level="'+level+'"><p><b>抓取第'+level+'级页面 “'+data.levelName+'”:</b>'+data.levelOpened+urls[i]+urlMsgLink+'</p><p class="cont_urls_num"></p><div class="cont_urls_list"></div></li>'}}
list+='</ul>';curObj.children('.cont_urls_list').html(list).show();curObj.children('.cont_urls_num').html('获取到'+urls.length+'条网址'+(urls.length>$_o.max_num?'(只测试前'+$_o.max_num+'条)':'')+' <a href="javascript:;" status="1">[收起]</a>');curObj.children('.cont_urls_list').find('.source_url').each(function(){var obj=$(this);$_o.get_cont_urls(obj.attr('data-url'),obj,data.nextLevel,data.sourceUrl,data.level)})}else{for(var i in urls){var urlMsgLink=urlMsgLinks[urls[i]];urlMsgLink=urlMsgLink?urlMsgLink:'';urls[i]=htmlspecialchars(urls[i]);list+='<li>[<a href="javascript:;" class="cont_ceshi" data-url="'+urls[i]+'">测试</a>] '+'[<a href="javascript:;" class="cont_element" data-url="'+urls[i]+'">分析</a>] '+data.urlOpened+urls[i]+urlMsgLink+'</li>'}
list+='</ul>';curObj.children('.cont_urls_list').html(list).hide();curObj.children('.cont_urls_num').html('获取到'+urls.length+'条网址 <a href="javascript:;" status="0">[展开]</a>')}}else{curObj.children('.cont_urls_list').html('<span style="color:red">'+data.msg+'</span>').show()}}});$_o.url_ajax_requests.push(url_ajax_request)}}}
list+='</ul>';curObj.children('.cont_urls_list').html(list).hide();curObj.children('.cont_urls_num').html('获取到'+urls.length+'条网址 <a href="javascript:;" status="0">[展开]</a>')}}else{curObj.children('.cont_urls_list').html('<span style="color:red">'+data.msg+'</span>').show()}}}});$_o.url_ajax_requests.push(url_ajax_request)}}}
function CpTestUrl(collId,testType,pageSource){this.coll_id=collId;this.test=testType?testType:'get_fields';this.test_async=!0;this.page_source=pageSource?pageSource:'';this.box_id='#win_test_url';this.test_ajax_requests=new Array()}
CpTestUrl.prototype={constructor:CpTestUrl,ajax:function(params){var ajax_request=ajaxOpen(params);this.test_ajax_requests.push(ajax_request)},abort_test:function(){if(this.test_ajax_requests&&this.test_ajax_requests.length>0){for(var i in this.test_ajax_requests){this.test_ajax_requests[i].abort()}
this.test_ajax_requests=new Array()}},load_input_url:function(func){var $_o=this;var urlParams=$($_o.box_id+' [name="url_params"]').val();var inputedUrls={};$('#win_input_urls').find('[name]').each(function(){inputedUrls[$(this).attr('name')]=$(this).val()});var pageSource=$($_o.box_id+' [name="page_source"]').val();var url=ulink('cpattern_test/input_url?test=_test_&coll_id=_collid_&page_source=_source_',{'_test_':$_o.test,'_collid_':$_o.coll_id,'_source_':pageSource});if($($_o.box_id+' button.dropdown-toggle').attr('data-test')=='get_signs'){if($('#win_test_signs').find('[name="signs_cur_all"]').is(':checked')){url+='&signs_cur_all=1'}}
@ -21,7 +21,7 @@ var pageOpenedObj=$('#win_input_urls').find('#input_url_page_opened');if(pageOpe
execVarFuncs(func)}})},init:function(){var $_o=this;$($_o.box_id+' .dropdown-menu a[data-test]').bind('click',function(){$_o.abort_test();var btnObj=$(this).parents('.dropdown-menu').eq(0).siblings('button.dropdown-toggle').eq(0);var testName=$(this).attr('data-test');btnObj.attr('data-test',testName);btnObj.find('.test-tips').text($(this).attr('data-title'));if(testName=='get_html'||testName=='get_browser'||testName=='get_signs'||testName=='get_pagination'){$($_o.box_id+' [name="test_url"]').attr('placeholder','输入网址');$($_o.box_id+' .test-page-sources').show()}else{$($_o.box_id+' [name="test_url"]').attr('placeholder','输入内容页网址');$($_o.box_id+' .test-page-sources').hide()}
$($_o.box_id+' .field-vals').html('');$_o.test=testName;if(testName=='get_signs'){$('#win_test_signs').show()}else{$('#win_test_signs').hide()}
if(testName=='get_pagination'){$('#win_test_pagination').show()}else{$('#win_test_pagination').hide()}
$_o.load_input_url()});$($_o.box_id+' [name="page_source"]').bind('change',function(){$_o.abort_test();$_o.load_input_url()});$($_o.box_id).off('click','[data-test-code]').on('click','[data-test-code]',function(){var objId='#'+$(this).attr('data-test-code');visualizeData('<pre>'+htmlspecialchars($(objId).val())+'</pre>')});$($_o.box_id).off('click','[data-test-visualize]').on('click','[data-test-visualize]',function(){var objId='#'+$(this).attr('data-test-visualize');visualizeData($(objId).val())});$($_o.box_id+' button.test-sub').bind('click',function(){$_o.abort_test();var testOp=$($_o.box_id+' button.dropdown-toggle').attr('data-test');testOp=testOp?testOp:'get_fields';$_o.test_async=testOp=='get_browser'?false:!0;$_o.load_input_url(function(){var test_url=$($_o.box_id+' input[name="test_url"]').val();var page_source=$($_o.box_id+' [name="page_source"]').val();if(!test_url){toastr.error('请输入网址')}else{$($_o.box_id+' .field-vals').html('<div class="loading"></div>');$($_o.box_id+' .echo-msg-box').hide();var url=ulink('cpattern_test/_op_?coll_id=_collid_&page_source=_source_&test_url=_url_',{'_op_':testOp,'_source_':page_source,'_collid_':$_o.coll_id,'_url_':test_url});$('#win_input_urls').find('[name]').each(function(){url+='&'+$(this).attr('name')+'='+encodeURIComponent($(this).val())});if(testOp=='get_html'){$_o.ajax({type:'get',url:url,dataType:'html',success:function(data){$($_o.box_id+' .field-vals').html('');data=data?data:'';if(dataIsJson(data)){var json=JSON.parse(data);$($_o.box_id+' .field-vals').html(json.msg?json.msg:'')}else{data=data.replace(' ','');if(dataIsJson(data)){var html='<label>源码:</label><textarea class="form-control" rows="5">'+htmlspecialchars(data)+'</textarea><label style="margin-top:15px;">JSON解析</label><div id="win_json_tree"></div>';$($_o.box_id+' .field-vals').html(html);var jsonTreeFunc=function(){window.tool_json_tree.treeId='#win_json_tree';window.tool_json_tree.load(data)};if(window.tool_json_tree){jsonTreeFunc()}else{$.getScript(window.site_config.pub+'/static/js/admin/tool_json_tree.js',jsonTreeFunc)}}else{var eleId=generateUUID();data=htmlspecialchars(data);var html='<label>源码:</label> <a href="javascript:;" data-test-visualize="'+eleId+'">预览</a><span style="margin-left:5px;margin-right:5px;">/</span><a href="javascript:;" data-test-browser="1">分析网页</a><textarea id="'+eleId+'" class="form-control" rows="20">'+data+'</textarea>';$($_o.box_id+' .field-vals').html(html);$($_o.box_id).find('[data-test-browser]').bind('click',function(){var pageSource=$($_o.box_id+' [name="page_source"]').val();var testUrl=$($_o.box_id+' input[name="test_url"]').val();var inputedUrls={};$('#win_input_urls').find('[name]').each(function(){inputedUrls[$(this).attr('name')]=$(this).val()});var browserUrl=cpBrowserUrl($_o.coll_id,pageSource,testUrl,inputedUrls);window.open(browserUrl,'_blank')})}}}})}else{if(testOp=='get_signs'){if($('#win_test_signs').find('[name="signs_cur_all"]').is(':checked')){url+='&signs_cur_all=1'}}else if(testOp=='get_pagination'){url+='&pagination_type='+$('#win_test_pagination').find('[name="pagination_type"]:checked').val()}
$_o.load_input_url()});$($_o.box_id+' [name="page_source"]').bind('change',function(){$_o.abort_test();$_o.load_input_url()});$($_o.box_id).off('click','[data-test-code]').on('click','[data-test-code]',function(){var objId='#'+$(this).attr('data-test-code');globalOp.visualizeData('<pre>'+htmlspecialchars($(objId).val())+'</pre>')});$($_o.box_id).off('click','[data-test-visualize]').on('click','[data-test-visualize]',function(){var objId='#'+$(this).attr('data-test-visualize');globalOp.visualizeData($(objId).val())});$($_o.box_id+' button.test-sub').bind('click',function(){$_o.abort_test();var testOp=$($_o.box_id+' button.dropdown-toggle').attr('data-test');testOp=testOp?testOp:'get_fields';$_o.test_async=testOp=='get_browser'?false:!0;$_o.load_input_url(function(){var test_url=$($_o.box_id+' input[name="test_url"]').val();var page_source=$($_o.box_id+' [name="page_source"]').val();if(!test_url){toastr.error('请输入网址')}else{$($_o.box_id+' .field-vals').html('<div class="loading"></div>');$($_o.box_id+' .echo-msg-box').hide();var url=ulink('cpattern_test/_op_?coll_id=_collid_&page_source=_source_&test_url=_url_',{'_op_':testOp,'_source_':page_source,'_collid_':$_o.coll_id,'_url_':test_url});$('#win_input_urls').find('[name]').each(function(){url+='&'+$(this).attr('name')+'='+encodeURIComponent($(this).val())});if(testOp=='get_html'){$_o.ajax({type:'get',url:url,dataType:'html',success:function(data){$($_o.box_id+' .field-vals').html('');data=data?data:'';if(dataIsJson(data)){var json=JSON.parse(data);$($_o.box_id+' .field-vals').html(json.msg?json.msg:'')}else{data=data.replace(' ','');if(dataIsJson(data)){var html='<label>源码:</label><textarea class="form-control" rows="5">'+htmlspecialchars(data)+'</textarea><label style="margin-top:15px;">JSON解析</label><div id="win_json_tree"></div>';$($_o.box_id+' .field-vals').html(html);var jsonTreeFunc=function(){window.tool_json_tree.treeId='#win_json_tree';window.tool_json_tree.load(data)};if(window.tool_json_tree){jsonTreeFunc()}else{$.getScript(window.site_config.pub+'/static/js/admin/tool_json_tree.js',jsonTreeFunc)}}else{var eleId=generateUUID();data=htmlspecialchars(data);var html='<label>源码:</label> <a href="javascript:;" data-test-visualize="'+eleId+'">预览</a><span style="margin-left:5px;margin-right:5px;">/</span><a href="javascript:;" data-test-browser="1">分析网页</a><textarea id="'+eleId+'" class="form-control" rows="20">'+data+'</textarea>';$($_o.box_id+' .field-vals').html(html);$($_o.box_id).find('[data-test-browser]').bind('click',function(){var pageSource=$($_o.box_id+' [name="page_source"]').val();var testUrl=$($_o.box_id+' input[name="test_url"]').val();var inputedUrls={};$('#win_input_urls').find('[name]').each(function(){inputedUrls[$(this).attr('name')]=$(this).val()});var browserUrl=globalOp.cpBrowserUrl($_o.coll_id,pageSource,testUrl,inputedUrls);window.open(browserUrl,'_blank')})}}}})}else{if(testOp=='get_signs'){if($('#win_test_signs').find('[name="signs_cur_all"]').is(':checked')){url+='&signs_cur_all=1'}}else if(testOp=='get_pagination'){url+='&pagination_type='+$('#win_test_pagination').find('[name="pagination_type"]:checked').val()}
$_o.ajax({type:'get',url:url,dataType:'html',async:$_o.test_async,success:function(data){$($_o.box_id+' .field-vals').html('');data=data?data:'';if(data.indexOf('<!--[echo_msg]-->')>-1){var echoMsg='';data=data.replace(/<\!--\[echo_msg\]-->([\s\S]*?)<\!--\[\/echo_msg\]-->/ig,function(match,match1){echoMsg+=match1;return''});if(echoMsg){$($_o.box_id+' .echo-msg-box').show().find('.panel-body').html(echoMsg)}}
if(dataIsJson(data)){data=JSON.parse(data)}else{data={}}
if(data.code==1){var html='';if(testOp=='get_pagination'){var pnType=data.data.pagination_type;var pnUrls=data.data.urls;var pnUrlMsgLinks=data.data.pn_links;if(!isObject(pnUrlMsgLinks)){pnUrlMsgLinks={}}
@ -45,5 +45,5 @@ val=htmlspecialchars(val);signsHtml+='<div style="margin-bottom:5px;"><div style
if(!signsHtml){signsHtml='无'}
html+=signsHtml+'</td>'}
return html}}
function CpTestMatch(){var boxId='#win_test_match';$(boxId+' [name="input_type"]').bind('change',function(){$(boxId+' #input_type_url').hide();$(boxId+' #input_type_content').hide();$(boxId+' #input_type_'+$(this).val()).show()});$(boxId+' [name="type"]').bind('change',function(){$(boxId+' #type_rule').hide();$(boxId+' #type_xpath').hide();$(boxId+' #type_json').hide();$(boxId+' #type_'+$(this).val()).show()});$(boxId+' .test-match-val .visualize').bind('click',function(){visualizeData($('#test_match_val').val())});cpRuleModuleInit(boxId,'field','');$(boxId+' form').bind('submit',function(){$(boxId).append('<div class="test-loading loading"></div>');ajaxOpen({type:'post',url:$(this).attr('action'),dataType:'json',data:$(this).serialize(),success:function(data){$(boxId).find('.test-loading').remove();if(data.code==1){var valObj=$(boxId+' .test-match-val');valObj.show();if(dataIsHtml(data.msg)){valObj.find('.visualize').show()}else{valObj.find('.visualize').hide()}
function CpTestMatch(){var boxId='#win_test_match';$(boxId+' [name="input_type"]').bind('change',function(){$(boxId+' #input_type_url').hide();$(boxId+' #input_type_content').hide();$(boxId+' #input_type_'+$(this).val()).show()});$(boxId+' [name="type"]').bind('change',function(){$(boxId+' #type_rule').hide();$(boxId+' #type_xpath').hide();$(boxId+' #type_json').hide();$(boxId+' #type_'+$(this).val()).show()});$(boxId+' .test-match-val .visualize').bind('click',function(){globalOp.visualizeData($('#test_match_val').val())});ruleInsertSign.cpRuleModuleInit(boxId,'field','');$(boxId+' form').bind('submit',function(){$(boxId).append('<div class="test-loading loading"></div>');ajaxOpen({type:'post',url:$(this).attr('action'),dataType:'json',data:$(this).serialize(),success:function(data){$(boxId).find('.test-loading').remove();if(data.code==1){var valObj=$(boxId+' .test-match-val');valObj.show();if(dataIsHtml(data.msg)){valObj.find('.visualize').show()}else{valObj.find('.visualize').hide()}
valObj.find('#test_match_val').val(data.msg)}else{toastr.error(data.msg)}}});return!1})}

View File

@ -8,7 +8,7 @@
|--------------------------------------------------------------------------
*/
'use strict';function DataapiClass(){this.formid='#form_dataapi'}
DataapiClass.prototype={constructor:DataapiClass,init_list:function(search){$('#dataapi_list .delete').bind('click',function(){var curTr=$(this).parents('tr[data-da-id]').eq(0);confirmRight('删除后将无法请求该接口!确定删除?',function(){ajaxOpen({type:'post',url:ulink('dataapi/op?op=delete'),data:{'id':curTr.attr('data-da-id')},success:function(data){ajaxDataMsg(data);if(data.code==1){curTr.remove()}}})})});$('#dataapi_list .status').bind('click',function(){var curTr=$(this).parents('tr[data-da-id]').eq(0);var curObj=$(this);ajaxOpen({type:'post',url:ulink('dataapi/op?op=status'),data:{'id':curTr.attr('data-da-id'),'status':(curObj.hasClass('status-close')?0:1)},success:function(data){ajaxDataMsg(data);data=data.data;if(data.status){curObj.removeClass('status-close').html('开启')}else{curObj.addClass('status-close').html('关闭')}}})});if(isObject(search)){for(var i in search){$('#form_search').find('[name="'+i+'"]').val(search[i])}}},init:function(dataapi){var $_o=this;$('#btn_dataset').bind('click',function(){windowModal('数据集',ulink('dataset/select?from=dataapi'))});$('#tips_config_cond').bind('click',function(){confirmRight({msg:'<b>传入参数名:</b>请求接口时url中传入或post提交数据中的参数名称',yes:'确定',textAlign:'left'})});$('#add_config_cond').bind('click',function(){$_o.add_cond(null)});$('#config_conds').on('click','.config-cond-add',function(){$_o.add_cond({sub:1},this)});$('#config_conds').on('change','[name="conds[field][]"]',function(){var curTr=$(this).parents('tr[id^="cond_"]').eq(0);var fname=$(this).val();fname=fname?('默认:'+fname):'';curTr.find('[name="conds[name][]"]').attr('placeholder',fname)});$('#config_conds').on('click','.config-cond-dlt',function(){var curObj=$(this);confirmRight('确定删除?',function(){curObj.parents('tr[id^="cond_"]').remove();$_o.first_cond()})});eleExchange('#config_conds','.config-cond-move','tr[id^="cond_"]',{stop:function(event,ui){$_o.first_cond()}});if(isObject(dataapi)){$($_o.formid).find('[name="name"]').val(dataapi.name?dataapi.name:'');$($_o.formid).find('[name="route"]').val(dataapi.route?dataapi.route:'');$($_o.formid).find('[name="desc"]').val(dataapi.desc?dataapi.desc:'');$($_o.formid).find('[name="sort"]').val(dataapi.sort?toInt(dataapi.sort):0);$($_o.formid).find('[name="status"][value="'+toInt(dataapi.status)+'"]').prop('checked',!0);var config=dataapi.config;$_o.dataset_load({'dataset_id':dataapi.ds_id},dataapi.config)}},first_cond:function(){var firstObj=$('#config_conds').find('tr[id^="cond_"]:first').eq(0);if(firstObj.hasClass('config-cond-sub')){firstObj.removeClass('config-cond-sub');firstObj.find('[name="conds[sub][]"]').val('')}},add_cond:function(cond,curObj){cond=isObject(cond)?cond:null;var trId='cond_'+generateUUID();var tr=$('#tpl_config_cond').clone();tr.attr('id',trId);trId='#'+trId;var isSub=!1;if(cond){for(var i in cond){tr.find('[name="conds['+i+'][]"]').val(cond[i]?cond[i]:'')}
DataapiClass.prototype={constructor:DataapiClass,init_list:function(search){$('#dataapi_list .delete').bind('click',function(){var curTr=$(this).parents('tr[data-da-id]').eq(0);confirmRight('删除后将无法请求该接口!确定删除?',function(){ajaxOpen({type:'post',url:ulink('dataapi/op?op=delete'),data:{'id':curTr.attr('data-da-id')},success:function(data){ajaxDataMsg(data);if(data.code==1){curTr.remove()}}})})});$('#dataapi_list .status').bind('click',function(){var curTr=$(this).parents('tr[data-da-id]').eq(0);var curObj=$(this);ajaxOpen({type:'post',url:ulink('dataapi/op?op=status'),data:{'id':curTr.attr('data-da-id'),'status':(curObj.hasClass('status-close')?0:1)},success:function(data){ajaxDataMsg(data);data=data.data;if(data.status){curObj.removeClass('status-close').html('开启')}else{curObj.addClass('status-close').html('关闭')}}})});if(isObject(search)){for(var i in search){$('#form_search').find('[name="'+i+'"]').val(search[i])}}},init:function(dataapi){var $_o=this;$('#btn_dataset').bind('click',function(){windowModal('数据集',ulink('dataset/select?from=dataapi'))});$('#tips_config_cond').bind('click',function(){confirmRight({msg:'<b>传入参数名:</b>请求接口时url中传入或post提交数据中的参数名称',yes:'确定',textAlign:'left'})});$('#add_config_cond').bind('click',function(){$_o.add_cond(null)});$('#config_conds').on('click','.config-cond-add',function(){$_o.add_cond({sub:1},this)});$('#config_conds').on('change','[name="conds[field][]"]',function(){var curTr=$(this).parents('tr[id^="cond_"]').eq(0);var fname=$(this).val();fname=fname?('默认:'+fname):'';curTr.find('[name="conds[name][]"]').attr('placeholder',fname)});$('#config_conds').on('click','.config-cond-dlt',function(){var curObj=$(this);confirmRight('确定删除?',function(){curObj.parents('tr[id^="cond_"]').remove();$_o.first_cond()})});globalOp.eleExchange('#config_conds','.config-cond-move','tr[id^="cond_"]',{stop:function(event,ui){$_o.first_cond()}});if(isObject(dataapi)){$($_o.formid).find('[name="name"]').val(dataapi.name?dataapi.name:'');$($_o.formid).find('[name="route"]').val(dataapi.route?dataapi.route:'');$($_o.formid).find('[name="desc"]').val(dataapi.desc?dataapi.desc:'');$($_o.formid).find('[name="sort"]').val(dataapi.sort?toInt(dataapi.sort):0);$($_o.formid).find('[name="status"][value="'+toInt(dataapi.status)+'"]').prop('checked',!0);var config=dataapi.config;$_o.dataset_load({'dataset_id':dataapi.ds_id},dataapi.config)}},first_cond:function(){var firstObj=$('#config_conds').find('tr[id^="cond_"]:first').eq(0);if(firstObj.hasClass('config-cond-sub')){firstObj.removeClass('config-cond-sub');firstObj.find('[name="conds[sub][]"]').val('')}},add_cond:function(cond,curObj){cond=isObject(cond)?cond:null;var trId='cond_'+generateUUID();var tr=$('#tpl_config_cond').clone();tr.attr('id',trId);trId='#'+trId;var isSub=!1;if(cond){for(var i in cond){tr.find('[name="conds['+i+'][]"]').val(cond[i]?cond[i]:'')}
if(cond.sub){isSub=!0}}
if(isSub&&curObj){var endTr=null;var curTr=$(curObj).parents('tr[id^="cond_"]').eq(0);curTr.nextAll().each(function(){if(!$(this).hasClass('config-cond-sub')){return!1}
endTr=$(this)});if(!endTr){endTr=curTr}

View File

@ -8,7 +8,8 @@
|--------------------------------------------------------------------------
*/
'use strict';function DatasetClass(){this.formid='#form_dataset'}
DatasetClass.prototype={constructor:DatasetClass,init_list:function(search){$('#dataset_list .delete').bind('click',function(){var curTr=$(this).parents('tr[data-ds-id]').eq(0);confirmRight('将清空该数据集的所有数据,确定删除?',function(){ajax_check_userpwd({type:'post',url:ulink('dataset/op?op=delete'),data:{'id':curTr.attr('data-ds-id')},success:function(data){ajaxDataMsg(data);if(data.code==1){curTr.remove()}}})})});var dsIds=[];$('tr[data-ds-id]').each(function(){dsIds.push($(this).attr('data-ds-id'))});ajaxOpen({type:'post',url:ulink('dataset/dbCount'),data:{ids:dsIds},success:function(data){if(data.code==1){var ids=data.data;if(isObject(ids)){for(var i in ids){$('tr[data-ds-id="'+i+'"]').find('.db-count').text(ids[i])}}}}});if(isObject(search)){for(var i in search){$('#form_search').find('[name="'+i+'"]').val(search[i])}}},init:function(dataset){var $_o=this;$('#form_dataset').bind('submit',function(){var formObj=$(this);var settings=getFormAjaxSettings(formObj);settings.complete=function(){formObj.find('button[type="submit"]').removeAttr('disabled')};ajax_check_userpwd(settings);return!1});$('#add_dataset_field').bind('click',function(){windowModal('添加字段',ulink('dataset/field'))});$('#set_dataset_indexes').bind('click',function(){windowModal('合理设置索引可提升数据查询速度',ulink('dataset/indexes?ds_id='+$('#form_dataset').find('[name="id"]').val()),{lg:1})});$('#dataset_fields').on('click','.field-name',function(){var tr=$_o.field_tr(this);var objid=tr.attr('id');var field=tr.find('[name="fields[]"]').val();var options={};options.ajax={type:'post',data:{objid:objid,field:field}};windowModal('编辑字段',ulink('dataset/field'),options)});$('#dataset_fields').on('click','.field-dlt',function(){var tr=$_o.field_tr(this);confirmRight('会清空该字段的所有数据,确定删除?',function(){tr.remove()})});eleExchange('#dataset_fields','.field-move','[id^="field_"]');if(isObject(dataset)){$($_o.formid).find('[name="name"]').val(dataset.name?dataset.name:'');$($_o.formid).find('[name="desc"]').val(dataset.desc?dataset.desc:'');var config=dataset.config;if(isObject(config)){var fields=config.fields;if(isObject(fields)){for(var i in fields){var field=fields[i];if(isObject(field)){field.name_original=field.name;$_o.field_add(field,null)}}}}}},db_init:function(list,search){var $_o=this;$('#dataset_db_list').on('change','input[type="text"],input[type="number"],textarea',function(){$(this).parents('tr').eq(0).find('input[name="ids[]"]').prop('checked',!0)});$('#dataset_db_list').on('focus','textarea',function(){$(this).addClass('txt-big')});$('#dataset_db_list').on('blur','textarea',function(){$(this).removeClass('txt-big')});$.datetimepicker.setLocale('zh');$('#addnew').bind('click',function(){var minId=0;$('[name="ids[]"]').each(function(){var val=toInt($(this).val());if(minId>val){minId=val}});minId=minId-1;$_o.db_add([{id:minId}])});$('#deleteall').bind('click',function(){confirmRight('确定删除选中的数据?',function(){var ids=[];$('input[name="ids[]"]:checked').each(function(){ids.push($(this).val())});$_o.db_delete(ids)})});$('#dataset_db_list').on('click','.db-delete',function(){var tr=$(this).parents('tr').eq(0);var id=tr.find('[name="ids[]"]').val();confirmRight('确定删除数据?',function(){$_o.db_delete(id)})});$_o.db_add(list);if(isObject(search)){for(var i in search){$('#form_search').find('[name="'+i+'"]').val(search[i])}}},db_add:function(list){if(!isObject(list)){list=[]}
DatasetClass.prototype={constructor:DatasetClass,init_list:function(search){$('#dataset_list .delete').bind('click',function(){var curTr=$(this).parents('tr[data-ds-id]').eq(0);confirmRight('将清空该数据集的所有数据,确定删除?',function(){ajax_check_userpwd({type:'post',url:ulink('dataset/op?op=delete'),data:{'id':curTr.attr('data-ds-id')},success:function(data){ajaxDataMsg(data);if(data.code==1){curTr.remove()}}})})});var dsIds=[];$('tr[data-ds-id]').each(function(){dsIds.push($(this).attr('data-ds-id'))});ajaxOpen({type:'post',url:ulink('dataset/dbCount'),data:{ids:dsIds},success:function(data){if(data.code==1){var ids=data.data;if(isObject(ids)){if(isObject(ids.db)){for(var i in ids.db){$('tr[data-ds-id="'+i+'"]').find('.db-count').text(ids.db[i])}}
if(isObject(ids.da)){for(var i in ids.da){$('tr[data-ds-id="'+i+'"]').find('.da-count').text(ids.da[i])}}}}}});if(isObject(search)){for(var i in search){$('#form_search').find('[name="'+i+'"]').val(search[i])}}},init:function(dataset){var $_o=this;$('#form_dataset').bind('submit',function(){var formObj=$(this);var settings=getFormAjaxSettings(formObj);settings.complete=function(){formObj.find('button[type="submit"]').removeAttr('disabled')};ajax_check_userpwd(settings);return!1});$('#add_dataset_field').bind('click',function(){windowModal('添加字段',ulink('dataset/field'))});$('#set_dataset_indexes').bind('click',function(){windowModal('合理设置索引可提升数据查询速度',ulink('dataset/indexes?ds_id='+$('#form_dataset').find('[name="id"]').val()),{lg:1})});$('#dataset_fields').on('click','.field-name',function(){var tr=$_o.field_tr(this);var objid=tr.attr('id');var field=tr.find('[name="fields[]"]').val();var options={};options.ajax={type:'post',data:{objid:objid,field:field}};windowModal('编辑字段',ulink('dataset/field'),options)});$('#dataset_fields').on('click','.field-dlt',function(){var tr=$_o.field_tr(this);confirmRight('会清空该字段的所有数据,确定删除?',function(){tr.remove()})});globalOp.eleExchange('#dataset_fields','.field-move','[id^="field_"]');if(isObject(dataset)){$($_o.formid).find('[name="name"]').val(dataset.name?dataset.name:'');$($_o.formid).find('[name="desc"]').val(dataset.desc?dataset.desc:'');var config=dataset.config;if(isObject(config)){var fields=config.fields;if(isObject(fields)){for(var i in fields){var field=fields[i];if(isObject(field)){field.name_original=field.name;$_o.field_add(field,null)}}}}}},db_init:function(list,search){var $_o=this;$('#dataset_db_list').on('change','input[type="text"],input[type="number"],textarea',function(){$(this).parents('tr').eq(0).find('input[name="ids[]"]').prop('checked',!0)});$('#dataset_db_list').on('focus','textarea',function(){$(this).addClass('txt-big')});$('#dataset_db_list').on('blur','textarea',function(){$(this).removeClass('txt-big')});$.datetimepicker.setLocale('zh');$('#addnew').bind('click',function(){var minId=0;$('[name="ids[]"]').each(function(){var val=toInt($(this).val());if(minId>val){minId=val}});minId=minId-1;$_o.db_add([{id:minId}])});$('#deleteall').bind('click',function(){confirmRight('确定删除选中的数据?',function(){var ids=[];$('input[name="ids[]"]:checked').each(function(){ids.push($(this).val())});$_o.db_delete(ids)})});$('#dataset_db_list').on('click','.db-delete',function(){var tr=$(this).parents('tr').eq(0);var id=tr.find('[name="ids[]"]').val();confirmRight('确定删除数据?',function(){$_o.db_delete(id)})});$_o.db_add(list);if(isObject(search)){for(var i in search){$('#form_search').find('[name="'+i+'"]').val(search[i])}}},db_add:function(list){if(!isObject(list)){list=[]}
var tr=$('#tpl_db').clone();tr.removeAttr('id');var trHtmls='';for(var i in list){var item=list[i];if(!isObject(item)){item={}}
var id=item.id?item.id:'';trHtmls+='<tr data-db-id="'+id+'">'+tr.html().replace(/\[_id_\]/g,'['+id+']')+'</tr>'}
$('#dataset_db_list tbody').append(trHtmls);$('#dataset_db_list').find('.db-time').datetimepicker({format:'Y-m-d H:i:s'});for(var i in list){var item=list[i];if(!isObject(item)){item={}}
@ -18,7 +19,7 @@ if(ids.length>0){var ids1=[];for(var i in ids){if(ids[i]<0){$('tr[data-db-id="'+
ids=ids1}
if(ids.length>0){ajaxOpen({type:'post',url:ulink('dataset/dbDelete?ds_id='+$('#form_list').find('[name="ds_id"]').val()),data:{ids:ids},success:function(data){ajaxDataMsg(data);if(data.code==1){var ids=data.data;if(isObject(ids)){for(var i in ids){$('tr[data-db-id="'+ids[i]+'"]').remove()}}}}})}},field_add:function(field,objid){var tr=null;if(objid){tr=$('#'+objid)}else{tr=$('#tpl_field').clone();tr.attr('id','field_'+generateUUID())}
var fname=field.name;if(field.type=='varchar'&&field.len>0){fname+=' ('+field.len+')'}
tr.find('.field-name').text(fname).attr('data-dbname',field.name_dbname);tr.find('.field-type').text(window.tpl_lang['ds_f_type_'+field.type]);tr.find('.field-desc').text(field.desc);tr.find('[name="fields[]"]').val(encode_json2urlbase(field));if(!objid){$('#dataset_fields tbody').append(tr)}},field_init:function(objid,fieldData){var $_o=this;inputSelectCustom('#form_field [name="type"]','len',null,'varchar');$('#form_field').bind('submit',function(){ajaxOpen({type:'POST',dataType:'json',url:$('#form_field').attr('action'),data:$('#form_field').serialize(),success:function(data){if(data.code==1){data=data.data;if(isObject(data)){var objid=data.objid;var field=data.field;if(isObject(field)){var hasField=!1;var totalLen=0;if(field.type=='varchar'){field.len=toInt(field.len);field.len=field.len>0?field.len:500;totalLen+=field.len}
tr.find('.field-name').text(fname).attr('data-dbname',field.name_dbname);tr.find('.field-type').text(window.tpl_lang['ds_f_type_'+field.type]);tr.find('.field-desc').text(field.desc);tr.find('[name="fields[]"]').val(encode_json2urlbase(field));if(!objid){$('#dataset_fields tbody').append(tr)}},field_init:function(objid,fieldData){var $_o=this;globalOp.inputSelectCustom('#form_field [name="type"]','len',null,'varchar');$('#form_field').bind('submit',function(){ajaxOpen({type:'POST',dataType:'json',url:$('#form_field').attr('action'),data:$('#form_field').serialize(),success:function(data){if(data.code==1){data=data.data;if(isObject(data)){var objid=data.objid;var field=data.field;if(isObject(field)){var hasField=!1;var totalLen=0;if(field.type=='varchar'){field.len=toInt(field.len);field.len=field.len>0?field.len:500;totalLen+=field.len}
$('#dataset_fields tr[id^="field_"]').each(function(){var curId=$(this).attr('id');var dbname=$(this).find('.field-name').attr('data-dbname');if(dbname==field.name_dbname){if(objid&&objid==curId){hasField=!1}else{hasField=!0}}
if(!objid||objid!=curId){var fData=$(this).find('[name="fields[]"]').val();fData=decode_urlbase2json(fData);if(fData.type=='varchar'){fData.len=toInt(fData.len);fData.len=fData.len>0?fData.len:500;totalLen+=fData.len}}});if(hasField){toastr.error('字段名称已存在!')}else if(totalLen>16383){toastr.error('所有字符串字段的总长度不能超过16383')}else{$_o.field_add(field,objid);$('#myModal').modal('hide')}}}}else{toastr.error(data.msg)}}});return!1});if(objid&&isObject(fieldData)){$('#form_field [name="objid"]').val(objid);$('#form_field [name="name"]').val(fieldData.name?fieldData.name:'');$('#form_field [name="name_original"]').val(fieldData.name_original?fieldData.name_original:'');$('#form_field [name="desc"]').val(fieldData.desc?fieldData.desc:'');$('#form_field [name="type"]').val(fieldData.type?fieldData.type:'').trigger('change');fieldData.len=toInt(fieldData.len);$('#form_field [name="len"]').val(fieldData.len>0?fieldData.len:'')}},field_tr:function(curObj){return $(curObj).parents('tr[id^="field_"]').eq(0)},indexes_init:function(indexes){var $_o=this;var tplIndex='#win_dataset_indexes .index-tpl [data-tpl="index"]';var tplFields='#win_dataset_indexes .index-tpl [data-tpl="fields"]';var tableEle='#win_dataset_indexes form table.index-list';$('#win_dataset_indexes .index-add-index').bind('click',function(){$_o.indexes_add(tplIndex,tplFields,tableEle,null)});$('#win_dataset_indexes').on('change','.index-field',function(){var curTr=$(this).parents('tr[id^="index_"]').eq(0);if($(this).val()=='-1'){if(curTr.find('.index-field').length<=1){toastr.error('最少保留一个字段!');$(this).val('')}else{$(this).parents('td').eq(0).remove()}}
var ixSlt=curTr.find('.index-type');var ixVal=ixSlt.val();ixSlt.find('option').prop('disabled',!1).show();var allowIxs={};curTr.find('.index-field').each(function(){var type=$(this).find('option[value="'+$(this).val()+'"]').attr('data-type');var allowTypes={bigint:['index','unique'],double:['index','unique'],mediumtext:['fulltext'],datetime:['index','unique']};if(isObject(allowTypes[type])){ixSlt.find('option').each(function(){if(!$(this).is(':disabled')){var optVal=$(this).attr('value');if(optVal&&allowTypes[type].indexOf(optVal)<0){$(this).prop('disabled',!0).hide()}}})}});if(ixSlt.find('option[value="'+ixVal+'"]').is(':disabled')){var showVal='';ixSlt.find('option').each(function(){var optVal=$(this).attr('value');if(optVal&&!$(this).is(':disabled')){showVal=optVal;return!1}});ixSlt.val(showVal)}});$(tableEle).on('click','.index-add-field',function(){var curTr=$(this).parents('tr[id^="index_"]').eq(0);var indexId=curTr.attr('id');var fieldsObj=$(tplFields).clone();fieldsObj.find('.index-field').attr('name','indexes['+indexId+'][fields][]');curTr.find('.index-fields').append(fieldsObj)});$(tableEle).on('click','.index-delete-index',function(){var curObj=$(this);confirmRight('确定删除?',function(){curObj.parents('tr[id^="index_"]').eq(0).remove()})});if(!isObject(indexes)){indexes={}}

View File

@ -8,16 +8,34 @@
|--------------------------------------------------------------------------
*/
'use strict';function DevelopClass(){this.packTypes={};this.downFrameworkSize=0;this.downFrameworkNum=0}
DevelopClass.prototype={constructor:DevelopClass,release_cms:function(config){var $_o=this;inputSelectCustom('#form_cms select[name="cms_name"]','cms_name_custom');$('#add_param').bind('click',function(){windowModal('参数',ulink('develop/cmsAddParam'))});$('#param_list').on('click','.param-key',function(){var parentObj=$(this).parents('tr[id^="param_"]').eq(0);var paramval=parentObj.find('input[name="params[]"]').val();var objid=parentObj.attr('id');windowModal('参数',ulink('develop/cmsAddParam?objid=_objid_&param=_param_',{'_objid_':objid,'_param_':paramval}))});$('#param_list').on('click','.delete-param',function(){$(this).parents('tr').eq(0).remove()});if(config&&!$.isEmptyObject(config)){$('#form_cms [name="name"]').val(config.name);var cmsnameOpt=$('#form_cms [name="cms_name"] option[value="'+config.cms_name+'"]');if(cmsnameOpt.length>0){$('#form_cms [name="cms_name"]').val(config.cms_name)}else{$('#form_cms [name="cms_name"]').val('custom').trigger('change');$('#form_cms [name="cms_name_custom"]').val(config.cms_name)}
DevelopClass.prototype={constructor:DevelopClass,release_cms:function(config){var $_o=this;globalOp.inputSelectCustom('#form_cms select[name="cms_name"]','cms_name_custom');$('#add_param').bind('click',function(){windowModal('参数',ulink('develop/cmsAddParam'))});$('#param_list').on('click','.param-key',function(){var parentObj=$(this).parents('tr[id^="param_"]').eq(0);var paramval=parentObj.find('input[name="params[]"]').val();var objid=parentObj.attr('id');windowModal('参数',ulink('develop/cmsAddParam?objid=_objid_&param=_param_',{'_objid_':objid,'_param_':paramval}))});$('#param_list').on('click','.delete-param',function(){$(this).parents('tr').eq(0).remove()});if(config&&!$.isEmptyObject(config)){$('#form_cms [name="name"]').val(config.name);var cmsnameOpt=$('#form_cms [name="cms_name"] option[value="'+config.cms_name+'"]');if(cmsnameOpt.length>0){$('#form_cms [name="cms_name"]').val(config.cms_name)}else{$('#form_cms [name="cms_name"]').val('custom').trigger('change');$('#form_cms [name="cms_name_custom"]').val(config.cms_name)}
$('#form_cms [name="identifier"]').val(config.identifier);$('#form_cms [name="copyright"]').val(config.copyright);if(config.is_edit){$('#form_cms [name="cms_name"]').attr("disabled","disabled");$('#form_cms [name="cms_name_custom"]').attr("disabled","disabled");$('#form_cms [name="identifier"]').attr("disabled","disabled");$('#form_cms [name="copyright"]').attr("disabled","disabled")}
if(config.params){for(var i in config.params){$_o.add_cms_param(config.params[i])}}}},init_cms_param:function(){var $_o=this;$('#win_form_param select[name="param[type]"]').bind('change',function(){$('#win_form_param .param-type-select').hide();var curType=$(this).val();if(curType=='select_val'||curType=='select_func'){$('#win_form_param .param-type-select[data-select="'+curType+'"]').show()}});$('#win_form_param').submit(function(){var checkKey=!0;var curKey=$('#win_form_param [name="param[key]"]').val();var objid=$('#win_form_param input[name="objid"]').val();if(objid){if(curKey==$('#'+objid).find('.param-key').attr('data-val')){checkKey=!1}}
if(checkKey){var hasKey=!1;$('#param_list .param-key').each(function(){if(curKey==$(this).attr('data-val')){hasKey=!0;return!1}});if(hasKey){toastr.error('变量名已存在!');return!1}}
ajaxOpen({type:'POST',dataType:'json',url:$(this).attr('action'),data:$(this).serialize(),success:function(data){if(data.code==1){$_o.add_cms_param(data.data,objid);$('#myModal').modal('hide')}else{toastr.error(data.msg)}},error:function(data){toastr.error(data)}});return!1})},load_cms_param:function(param){if(param){$('#win_form_param [name="param[key]"]').val(param.key);$('#win_form_param [name="param[require]"][value="'+param.require+'"]').prop('checked',!0);$('#win_form_param [name="param[name]"]').val(param.name);$('#win_form_param [name="param[type]"]').val(param.type).trigger('change');$('#win_form_param [name="param[select_val]"]').val(param.select_val);$('#win_form_param [name="param[select_func]"]').val(param.select_func)}},add_cms_param:function(param,objid){var paramHtml='<td><a href="javascript:;" class="param-key" data-val="_keyval_">_key_</a></td><td>_require_</td><td>_name_</td><td>_type_</td>'+'<td><a href="javascript:;" class="glyphicon glyphicon-remove delete-param"></a><input type="hidden" name="params[]" value="_param_"/></td>';paramHtml=paramHtml.replace('_keyval_',param.key).replace('_key_',param.key).replace('_require_',(param.require>0?'是':'否')).replace('_name_',param.name).replace('_type_',param.type_name).replace('_param_',encode_json2urlbase(param));if(objid){$('#'+objid).html(paramHtml)}else{$('#param_list tbody').append('<tr id="param_'+generateUUID()+'">'+paramHtml+'</tr>')}},app:function(app){var $_o=this;$('#newest_version').bind('click',function(){confirmRight('确定升级至新版本?',function(){var app=$('#form_app [name="app"]').val();windowModal('正在升级...',ulink('admin/app/upgrade?app=_app_',{'_app_':app}))})});$('#add_pack').bind('click',function(){windowModal('扩展',ulink('develop/appAddPack'))});$('#pack_list').on('click','.pack-name',function(){var parentObj=$(this).parents('tr[id^="pack_"]').eq(0);var packval=parentObj.find('input[name="packs[]"]').val();var objid=parentObj.attr('id');windowModal('扩展',ulink('develop/appAddPack?objid=_objid_&pack=_pack_',{'_objid_':objid,'_pack_':packval}))});$('#pack_list').on('click','.delete-pack',function(){$(this).parents('tr').eq(0).remove()});eleExchange('#pack_list','.move-pack','tr[id^="pack_"]');$('#form_app').on('change','select[name="framework"]',function(){$('[id^="framework_vers_"]').hide();var name=$(this).val();if(name){$('[id^="framework_vers_'+name+'"]').show()}});$('#form_app').on('click','#install_framework',function(){var btnObj=$(this);btnObj.attr('disabled',!0);btnObj.html('<span class="status">正在下载...</span><span class="perct">0</span>%');$_o.down_framework(null)});if(app){if(app.config){var config=app.config;$('#form_app [name="name"]').val(config.name);$('#form_app [name="desc"]').val(config.desc);$('#form_app [name="app"]').val(app.app);$('#form_app [name="website"]').val(config.website);$('#form_app [name="author"]').val(config.author);$('#form_app [name="version"]').val(config.version);$('#form_app [name="phpv"]').val(config.phpv);$('#form_app [name="agreement"]').val(config.agreement);$('#form_app select[name="framework"]').val(config.framework).trigger('change');if(config.framework){$('input[type="radio"][name="framework_version['+config.framework+']"][value="'+config.framework_version+'"]').prop('checked','checked')}
ajaxOpen({type:'POST',dataType:'json',url:$(this).attr('action'),data:$(this).serialize(),success:function(data){if(data.code==1){$_o.add_cms_param(data.data,objid);$('#myModal').modal('hide')}else{toastr.error(data.msg)}},error:function(data){toastr.error(data)}});return!1})},load_cms_param:function(param){if(param){$('#win_form_param [name="param[key]"]').val(param.key);$('#win_form_param [name="param[require]"][value="'+param.require+'"]').prop('checked',!0);$('#win_form_param [name="param[name]"]').val(param.name);$('#win_form_param [name="param[type]"]').val(param.type).trigger('change');$('#win_form_param [name="param[select_val]"]').val(param.select_val);$('#win_form_param [name="param[select_func]"]').val(param.select_func)}},add_cms_param:function(param,objid){var paramHtml='<td><a href="javascript:;" class="param-key" data-val="_keyval_">_key_</a></td><td>_require_</td><td>_name_</td><td>_type_</td>'+'<td><a href="javascript:;" class="glyphicon glyphicon-remove delete-param"></a><input type="hidden" name="params[]" value="_param_"/></td>';paramHtml=paramHtml.replace('_keyval_',param.key).replace('_key_',param.key).replace('_require_',(param.require>0?'是':'否')).replace('_name_',param.name).replace('_type_',param.type_name).replace('_param_',encode_json2urlbase(param));if(objid){$('#'+objid).html(paramHtml)}else{$('#param_list tbody').append('<tr id="param_'+generateUUID()+'">'+paramHtml+'</tr>')}},app:function(app){var $_o=this;$('#newest_version').bind('click',function(){confirmRight('确定升级至新版本?',function(){var app=$('#form_app [name="app"]').val();windowModal('正在升级...',ulink('admin/app/upgrade?app=_app_',{'_app_':app}))})});$('#add_pack').bind('click',function(){windowModal('扩展',ulink('develop/appAddPack'))});$('#pack_list').on('click','.pack-name',function(){var parentObj=$(this).parents('tr[id^="pack_"]').eq(0);var packval=parentObj.find('input[name="packs[]"]').val();var objid=parentObj.attr('id');windowModal('扩展',ulink('develop/appAddPack?objid=_objid_&pack=_pack_',{'_objid_':objid,'_pack_':packval}))});$('#pack_list').on('click','.delete-pack',function(){$(this).parents('tr').eq(0).remove()});globalOp.eleExchange('#pack_list','.move-pack','tr[id^="pack_"]');$('#form_app').on('change','select[name="framework"]',function(){$('[id^="framework_vers_"]').hide();var name=$(this).val();if(name){$('[id^="framework_vers_'+name+'"]').show()}});$('#form_app').on('click','#install_framework',function(){var btnObj=$(this);btnObj.attr('disabled',!0);btnObj.html('<span class="status">正在下载...</span><span class="perct">0</span>%');$_o.down_framework(null)});if(app){if(app.config){var config=app.config;$('#form_app [name="name"]').val(config.name);$('#form_app [name="desc"]').val(config.desc);$('#form_app [name="app"]').val(app.app);$('#form_app [name="website"]').val(config.website);$('#form_app [name="author"]').val(config.author);$('#form_app [name="version"]').val(config.version);$('#form_app [name="phpv"]').val(config.phpv);$('#form_app [name="agreement"]').val(config.agreement);$('#form_app select[name="framework"]').val(config.framework).trigger('change');if(config.framework){$('input[type="radio"][name="framework_version['+config.framework+']"][value="'+config.framework_version+'"]').prop('checked','checked')}
if(config.packs){for(var i in config.packs){$_o.add_app_pack(config.packs[i])}}}
if(app.app_class){var appClass=app.app_class;$('#form_app [name="install"]').val(appClass.install);$('#form_app [name="uninstall"]').val(appClass.uninstall);$('#form_app [name="upgrade"]').val(appClass.upgrade)}}},add_app_pack:function(pack,objid){var packHtml='<td><a href="javascript:;" class="pack-name" data-val="_nameval_">_name_</a></td><td>_type_</td><td>_link_</td><td>'+'<a href="javascript:;" class="glyphicon icon-drag-move move-pack" title="移动"></a>'+'&nbsp;<a href="javascript:;" class="glyphicon glyphicon-remove delete-pack" title="删除"></a>'+'<input type="hidden" name="packs[]" value="_pack_"/></td>';packHtml=packHtml.replace('_nameval_',pack.name).replace('_name_',pack.name).replace('_type_',this.packTypes[pack.type]).replace('_link_',pack.nav_link).replace('_pack_',encode_json2urlbase(pack));if(objid){$('#'+objid).html(packHtml)}else{$('#pack_list tbody').append('<tr id="pack_'+generateUUID()+'">'+packHtml+'</tr>')}},init_app_pack:function(){var $_o=this;$('#win_form_pack').submit(function(){var checkName=!0;var curName=$('#win_form_pack [name="pack[name]"]').val();var objid=$('#win_form_pack input[name="objid"]').val();if(objid){if(curName==$('#'+objid).find('.pack-name').attr('data-val')){checkName=!1}}
if(checkName){var hasName=!1;$('#pack_list .pack-name').each(function(){if(curName==$(this).attr('data-val')){hasName=!0;return!1}});if(hasName){toastr.error('名称已存在!');return!1}}
ajaxOpen({type:'POST',dataType:'json',url:$(this).attr('action'),data:$(this).serialize(),success:function(data){if(data.code==1){$_o.add_app_pack(data.data,objid);$('#myModal').modal('hide')}else{toastr.error(data.msg)}},error:function(data){toastr.error(data)}});return!1});$('#win_form_pack [name="pack[type]"]').bind('change',function(){var type=$(this).val();$(this).siblings('.help-block').each(function(){if($(this).hasClass('type-'+type)){$(this).show()}else{$(this).hide()}})})},load_app_pack:function(pack){if(pack){$('#win_form_pack [name="pack[name]"]').val(pack.name);$('#win_form_pack [name="pack[type]"]').val(pack.type).trigger('change');$('#win_form_pack [name="pack[nav_link]"]').val(pack.nav_link);$('#win_form_pack [name="pack[target]"][value="'+parseInt(pack.target)+'"]').prop('checked','checked')}},down_framework:function(params){var $_o=this;params=params?params:{};var url='develop/installFramework?app='+$('#form_app [name="app"]').val();if(params.block_no){url+='&block_no='+params.block_no}
url=ulink(url);ajaxOpen({type:'get',dataType:'json',url:url,success:function(data){if(data.code==1){var dataData=data.data;dataData=dataData?dataData:{};if(dataData.next_block_no>0){var per=parseInt(parseFloat(dataData.next_block_no/dataData.blocks)*100);$('#install_framework').find('.perct').text(per);$_o.down_framework({'block_no':dataData.next_block_no})}else{$('#install_framework').find('.perct').text('100');ajaxDataMsg(data)}}else{$('#install_framework').attr('disabled',!1).html('下载失败');if(data.msg){toastr.error(data.msg)}}},error:function(){$('#install_framework').attr('disabled',!1).html('下载失败')}})},func:function(module,config){var $_o=this;$('#add_method').bind('click',function(){$_o.func_add_method()});$('#form_func').on('click','.delete-method',function(){$(this).parents('tr').remove()});if(module){$('#form_func [name="module"]').val(module)}
if(config&&!$.isEmptyObject(config)){for(var i in config){$('#form_func [name="'+i+'"]').val(config[i])}
$('#form_func [name="module"]').attr('readonly','readonly').attr('onfocus','this.defaultIndex=this.selectedIndex;').attr('onchange','this.selectedIndex=this.defaultIndex;');$('#form_func [name="identifier"]').attr('readonly','readonly');$('#form_func [name="copyright"]').attr('readonly','readonly')}},func_add_method:function(method,desc){method=method?method:'';desc=desc?desc:'';var tr='<tr><td><input type="text" name="methods[method][]" value="'+htmlspecialchars(method)+'" class="form-control" /></td>'+'<td><input type="text" name="methods[comment][]" class="form-control" value="'+htmlspecialchars(desc)+'" /></td>'+'<td><a href="javascript:;" class="glyphicon glyphicon-remove delete-method" style="margin-top:8px;"></a></td></tr>';$('#form_func table.method_list tbody').append(tr)}}
$('#form_func [name="module"]').attr('readonly','readonly').attr('onfocus','this.defaultIndex=this.selectedIndex;').attr('onchange','this.selectedIndex=this.defaultIndex;');$('#form_func [name="identifier"]').attr('readonly','readonly');$('#form_func [name="copyright"]').attr('readonly','readonly')}},func_add_method:function(method,desc){method=method?method:'';desc=desc?desc:'';var tr='<tr><td><input type="text" name="methods[method][]" value="'+htmlspecialchars(method)+'" class="form-control" /></td>'+'<td><input type="text" name="methods[comment][]" class="form-control" value="'+htmlspecialchars(desc)+'" /></td>'+'<td><a href="javascript:;" class="glyphicon glyphicon-remove delete-method" style="margin-top:8px;"></a></td></tr>';$('#form_func table.method_list tbody').append(tr)},api:function(module,config){var $_o=this;var fid='#form_api';$('#add_variable').bind('click',function(){windowModal('添加'+window.tpl_lang.apiapp_op_variable,ulink('develop/apiVariable'),{lg:1})});$('#add_request').bind('click',function(){windowModal('添加'+window.tpl_lang.apiapp_op_request,ulink('develop/apiRequest'),{lg:1})});globalOp.eleExchange('#op_list','.op-move','tr[id^="op_"]');$('#op_list').on('click','.op-delete',function(){var curObj=$(this);confirmRight('确定删除?',function(){curObj.parents('tr[id^="op_"]').remove()})});$('#op_list').on('click','.op-info',function(){var curTr=$(this).parents('tr[id^="op_"]').eq(0);var op=curTr.find('[name="ops[]"]').val();op=decode_urlbase2json(op);var module=op.module;var config=op.config;config=encode_json2urlbase(config);var objid=curTr.attr('id');if(module=='variable'){windowModal('编辑'+window.tpl_lang.apiapp_op_variable,ulink('develop/apiVariable'),{lg:1,ajax:{data:{objid:objid,variable:config}}})}else if(module=='request'){windowModal('编辑'+window.tpl_lang.apiapp_op_request,ulink('develop/apiRequest'),{lg:1,ajax:{data:{objid:objid,request:config}}})}});$_o.api_insert_variable(fid,null,!0);$('#btn_api_test').bind('click',function(){var app=$(this).attr('data-app');if(app){windowModal('测试接口插件',ulink('develop/apiTest?app=_app_',{'_app_':app}),{lg:1})}else{prompt_error('请先保存!')}});if(config&&!$.isEmptyObject(config)){var ops=config.ops;delete config.ops;globalOp.loadFormConfig(fid,config);$(fid+' [name="module"]').attr('readonly','readonly').attr('onfocus','this.defaultIndex=this.selectedIndex;').attr('onchange','this.selectedIndex=this.defaultIndex;');$(fid+' [name="identifier"]').attr('readonly','readonly');$(fid+' [name="copyright"]').attr('readonly','readonly');if(isObject(ops)){for(var i in ops){var op=ops[i];if(isObject(op)){$_o.api_add_op(op.module,op.config)}}}}},api_test:function(app){$('#win_form_api_test').bind('submit',function(){var resultObj=$('#win_api_result').find('.panel-body');resultObj.html('');$('#win_api_result').hide();var settings=getFormAjaxSettings($(this));var oldSuccess=settings.success;settings.success=function(data){oldSuccess(data);if(data.code==1){data=data.data;if(isObject(data)){$('#win_api_result').show();var opData=isObject(data.data)?data.data:{};var tpl='<div class="form-group"><label></label><textarea rows="3" class="form-control"></textarea></div>';var obj=$(tpl);if(data.success){obj.find('label').text('最终数据');obj.find('textarea').val(opData.content);resultObj.append(obj)}else{obj.find('label').text('错误信息');obj.find('textarea').val(data.msg);resultObj.append(obj)}
if(opData.ops){for(var i in opData.ops){obj=$(tpl);var opName=i.split(':');if(opName[1]=='###'){continue}
obj.find('label').text(window.tpl_lang['apiapp_op_'+opName[0]]+''+opName[1]);obj.find('textarea').val(opData.ops[i]);resultObj.append(obj)}}}}};ajaxOpen(settings);return!1});pluginApiOp.load({module:'process',boxObj:$('#win_form_api_test'),appObj:'#api_apps',appApp:app,isTest:!0,})},api_ops:function(objid,onlyVariable){var varNames=[];var ops=[];$('#op_list').find('tr[id^="op_"]').each(function(){if(objid&&objid==$(this).attr('id')){return!1}
var op=$(this).find('[name="ops[]"]').val();op=decode_urlbase2json(op);if(isObject(op)){var module=op.module;var config=op.config;if(isObject(config)){if(module=='variable'){if(onlyVariable){varNames.push(config.name)}else{ops.push('variable:'+config.name)}}else if(module=='request'){ops.push('request:'+config.name)}}}});return onlyVariable?varNames:ops},api_add_op:function(module,config,objid){config=config?config:{};var trObj=null;if(objid){trObj=$('#'+objid)}else{trObj=$('#tpl_op').clone();trObj.attr('id','op_'+generateUUID());$('#op_list tbody').append(trObj)}
trObj.find('.op-module').text(window.tpl_lang['apiapp_op_'+module]);var info='';if(module=='variable'){info=window.tpl_lang['apiapp_variable_m_'+config.module]+' » '+config.name;if(config.module=='user'&&isObject(config.user)&&toInt(config.user.global)>0){info+='(全局配置)'}}else if(module=='request'){info=config.name+''+config.url+''}
trObj.find('.op-info').text(info);var op={module:module,config:config};op=encode_json2urlbase(op);trObj.find('[name="ops[]"]').val(op)},api_insert_variable:function(fid,objid,allOps){var $_o=this;allOps=allOps?true:!1;$(fid).on('click','.api-insert-variable-btn a.dropdown-toggle',function(){var opNames=$_o.api_ops(objid,allOps?false:!0);var curBox=$(this).parents('.api-insert-variable').eq(0);var html='';if(isObject(opNames)){for(var i in opNames){var opName=opNames[i];var opModule='';if(allOps){opName=opName.split(':');opModule=window.tpl_lang['apiapp_op_'+opName[0]];opName=opName[1]}else{opModule=window.tpl_lang.apiapp_op_variable}
opName=htmlspecialchars(opName);html+='<li><a href="javascript:;" data-val="['+opModule+':'+opName+']">'+opModule+''+opName+'</a></li>'}}
html=html?html:'<li><a href="javascript:;">无</a></li>';if(!allOps){html+='<li><a href="javascript:;"><b>只能调用当前位置之前的变量</b></a></li>'}
curBox.find('.dropdown-menu').html(html).find('a[data-val]').bind('click',function(){var val=$(this).attr('data-val');if(val){globalOp.insertAtCaret(curBox.find('input,textarea'),val)}})})},api_init_variable:function(variable){var $_o=this;var fid='#win_form_variable';$(fid).bind('submit',function(){ajaxOpen({type:'POST',dataType:'json',url:$(this).attr('action'),data:$(this).serialize(),success:function(data){if(data.code==1){data=data.data;var objid=data.objid;var vconfig=data.variable;vconfig=isObject(vconfig)?vconfig:{};var nameRepeat=!1;$('#op_list').find('tr[id^="op_"]').each(function(){var opVal=$(this).find('[name="ops[]"]').val();opVal=decode_urlbase2json(opVal);if(isObject(opVal)&&isObject(opVal.config)){if(opVal.module=='variable'){if(opVal.config.name==vconfig.name){if(!objid||$(this).attr('id')!=objid){nameRepeat=!0;return!1}}}}});if(nameRepeat){prompt_error('变量名称已经存在!')}else{$_o.api_add_op('variable',vconfig,objid);$('#myModal').modal('hide')}}else{prompt_error(data.msg)}}});return!1});$(fid+' [name="variable[module]"]').bind('change',function(){var module=$(this).val();module=module?module:'';$(fid).find('.variable-module').hide();$(fid).find('.variable-module[data-module="'+module+'"]').show()});$(fid+' [name="variable[user][tag]"]').bind('change',function(){if($(this).val()=='select'){$(fid).find('.variable-user-tag-select').show()}else{$(fid).find('.variable-user-tag-select').hide()}});$(fid+' [name="variable[extract][type]"]').bind('change',function(){$(fid+' .variable-module-extract[data-extract-module]').hide();$(fid+' .variable-module-extract[data-extract-module="'+$(this).val()+'"]').show()});$.datetimepicker.setLocale('zh');$(fid+' input[name="variable[time][start]"],'+fid+' input[name="variable[time][end]"]').datetimepicker();$(fid+' .variable-time-format').on('click','a[data-val]',function(){globalOp.insertAtCaret($(fid+' [name="variable[time][format]"]'),$(this).attr('data-val'))});var objid=$(fid).find('[name="objid"]').val();var apiOps=$_o.api_ops(objid,!1);if(isObject(apiOps)){var html='';for(var i in apiOps){var apiOp=apiOps[i].split(':');html+='<option value="'+htmlspecialchars(apiOps[i])+'">'+window.tpl_lang['apiapp_op_'+apiOp[0]]+''+htmlspecialchars(apiOp[1])+'</option>'}
$(fid).find('[name="variable[extract][source]"]').append(html)}
$_o.api_insert_variable(fid,objid);$(fid+' .variable-func-add').bind('click',function(){$_o.api_add_variable_func(fid,objid)});globalOp.eleExchange(fid+' #variable_func','.variable-func-move','tr[id^="variable_func_"]');$(fid+' #variable_func').on('click','.variable-func-del',function(){var curObj=this;confirmRight('确定删除?',function(){$(curObj).parents('tr[id^="variable_func_"]').eq(0).remove()})});$(fid+' #variable_func').on('change','.variable-func-param',function(){var curTr=$(this).parents('tr[id^="variable_func_"]').eq(0);var curVal=$(this).val();if(curVal){globalOp.insertAtCaret(curTr.find('[name="variable[func][params][]"]'),$(this).val())}});ruleInsertSign.cpRuleModuleInit(fid,'variable[extract]','');if(isObject(variable)){var funcConfig=variable.func;delete variable.func;var varExtract=null;if(variable.module=='extract'){varExtract=variable.extract;if(isObject(varExtract)){variable.extract={source:varExtract.source,type:varExtract.type};delete varExtract.source;delete varExtract.type}}
globalOp.loadFormConfig($(fid),variable,'variable');if(variable.module=='extract'){ruleInsertSign.cpRuleModuleLoad(fid,'variable[extract]','',varExtract)}
if(isObject(funcConfig)){if(toInt(funcConfig.open)>0){globalOp.showPanelCollapse('#variable_func')}
$(fid+' [name="variable[func][open]"][value="'+funcConfig.open+'"]').prop('checked',!0);if(isObject(funcConfig.names)){funcConfig.params=isObject(funcConfig.params)?funcConfig.params:[];for(var i in funcConfig.names){$_o.api_add_variable_func(fid,objid,funcConfig.names[i],funcConfig.params[i])}}}}},api_add_variable_func:function(fid,objid,funcName,funcParam){var tr=$('#tpl_variable_func').clone();tr.attr('id','variable_func_'+generateUUID());var varNames=this.api_ops(objid,!0);var html='';for(var i in varNames){varNames[i]=htmlspecialchars(varNames[i]);html+='<option value="['+window.tpl_lang.apiapp_op_variable+':'+varNames[i]+']">'+varNames[i]+'</option>'}
tr.find('.variable-func-param').html(tr.find('.variable-func-param').html()+html+'<optgroup label="只能调用当前位置之前的变量"> </optgroup>');if(funcName){tr.find('[name="variable[func][names][]"]').val(funcName)}
if(funcParam){tr.find('[name="variable[func][params][]"]').val(funcParam)}
$(fid+' #variable_func tbody').append(tr)},api_init_request:function(request){var $_o=this;var fid='#win_form_request';$(fid).bind('submit',function(){ajaxOpen({type:'POST',dataType:'json',url:$(this).attr('action'),data:$(this).serialize(),success:function(data){if(data.code==1){data=data.data;var objid=data.objid;var rconfig=data.request;rconfig=isObject(rconfig)?rconfig:{};var nameRepeat=!1;$('#op_list').find('tr[id^="op_"]').each(function(){var opVal=$(this).find('[name="ops[]"]').val();opVal=decode_urlbase2json(opVal);if(isObject(opVal)&&isObject(opVal.config)){if(opVal.module=='request'){if(opVal.config.name==rconfig.name){if(!objid||$(this).attr('id')!=objid){nameRepeat=!0;return!1}}}}});if(nameRepeat){prompt_error('请求名称已经存在!')}else{$_o.api_add_op('request',rconfig,objid);$('#myModal').modal('hide')}}else{prompt_error(data.msg)}}});return!1});globalOp.inputSelectCustom(fid+' [name="request[charset]"]','request[charset_custom]');globalOp.inputSelectCustom(fid+' [name="request[encode]"]','request[encode_custom]');$(fid).find('[name="request[type]"]').bind('change',function(){if($(this).val()=='post'){$(fid).find('.request-type-post').show()}else{$(fid).find('.request-type-post').hide()}});$(fid+' .request-param-add').bind('click',function(){var trObj=$('#tpl_request_param').clone();trObj.removeAttr('id');$(fid+' .request-param-list').append(trObj)});$(fid+' .request-header-add').bind('click',function(){var trObj=$('#tpl_request_header').clone();trObj.removeAttr('id');$(fid+' .request-header-list').append(trObj)});$(fid).on('click','.request-param-delete',function(){var curObj=$(this);confirmRight('确定删除?',function(){curObj.parents('tr').eq(0).remove()})});$(fid).on('click','.request-header-delete',function(){var curObj=$(this);confirmRight('确定删除?',function(){curObj.parents('tr').eq(0).remove()})});$_o.api_insert_variable(fid,$(fid).find('[name="objid"]').val());if(isObject(request)){if(isObject(request.param_names)){request.param_vals=isObject(request.param_vals)?request.param_vals:[];for(var i in request.param_names){var trObj=$('#tpl_request_param').clone();trObj.removeAttr('id');trObj.find('[name="request[param_names][]"]').val(request.param_names[i]);trObj.find('[name="request[param_vals][]"]').val(request.param_vals[i]);$(fid+' .request-param-list').append(trObj)}}
if(isObject(request.header_names)){request.header_vals=isObject(request.header_vals)?request.header_vals:[];for(var i in request.header_names){var trObj=$('#tpl_request_header').clone();trObj.removeAttr('id');trObj.find('[name="request[header_names][]"]').val(request.header_names[i]);trObj.find('[name="request[header_vals][]"]').val(request.header_vals[i]);$(fid+' .request-header-list').append(trObj)}}
delete request.param_names;delete request.param_vals;delete request.header_names;delete request.header_vals;globalOp.loadFormConfig($('#win_form_request'),request,'request')}}}
var developClass=new DevelopClass()

View File

@ -7,12 +7,12 @@
| 使用协议 https://www.skycaiji.com/licenses
|--------------------------------------------------------------------------
*/
'use strict';$(document).ready(function(){$('#op_clean').bind('click',function(){windowModal('清理缓存',ulink('setting/clean'))});$('#a_run_auto_backstage').bind('click',function(){windowModal('正在激活自动采集...',ulink('admin/backstage/run_auto_backstage'))});$('#a_collect_now').bind('click',function(){collectorWindow('实时采集','admin/backstage/collect',null,{lg:1})});$('#upgrade_db').bind('click',function(){var obj=$(this);ajaxOpen({type:'get',dataType:'json',url:ulink('install/upgrade/db'),success:function(data){if(data.code==1){obj.html(data.msg?data.msg:'升级成功');window.setTimeout(function(){window.location.reload()},1000)}else{obj.html(data.msg?data.msg:'升级失败')}}})});$('body').on('click','#op_upgrade',function(){var obj=$(this);if(obj.attr('upgrading')==1){return!1}
'use strict';$(document).ready(function(){$('#op_clean').bind('click',function(){windowModal('清理缓存',ulink('setting/clean'))});$('#a_run_auto_backstage').bind('click',function(){windowModal('正在激活自动采集...',ulink('admin/backstage/run_auto_backstage'))});$('#a_collect_now').bind('click',function(){globalOp.collectorWindow('实时采集','admin/backstage/collect',null,{lg:1})});$('#upgrade_db').bind('click',function(){var obj=$(this);ajaxOpen({type:'get',dataType:'json',url:ulink('install/upgrade/db'),success:function(data){if(data.code==1){obj.html(data.msg?data.msg:'升级成功');window.setTimeout(function(){window.location.reload()},1000)}else{obj.html(data.msg?data.msg:'升级失败')}}})});$('body').on('click','#op_upgrade',function(){var obj=$(this);if(obj.attr('upgrading')==1){return!1}
$('#upgrade_error').html('').hide();var versionFile=obj.attr('data-version-file');if(versionFile=='zip'){obj.html('正在下载压缩包...')}else{obj.html('正在检索更新文件...')}
ajaxOpen({type:'get',dataType:'json',url:ulink('upgrade/download?version_file=_vfile_',{'_vfile_':versionFile}),success:function(data){obj.attr('upgrading',1);if(versionFile=='zip'){if(data.code==1){data=data.data?data.data:{};var size=toInt(data.size);size=size/(1024*1024);size=Math.floor(size*100)/100;obj.html('正在下载... &nbsp;<span class="size">0MB</span> / '+size+'MB');var upgradeZipClass=new UpgradeZipClass(data.size,data.blocks);upgradeZipClass.down_zip(1)}else{obj.html(data.msg?data.msg:'压缩包下载失败')}}else{if(data.code==1){var fileList=new Array();if(data.data.files){for(var i in data.data.files){fileList.push(data.data.files[i])}}
if(fileList.length>0){obj.html('正在更新...');var upgradeClass=new UpgradeClass(fileList);upgradeClass.down_file(0)}else{obj.html('没有需要更新的文件')}}else{var upgradeClass=new UpgradeClass(null);upgradeClass.down_complete()}}}});return!1});$('#refresh_admin_index').bind('click',function(){$('#skycaiji_admin_index').parents('.box').eq(0).find('.overlay').show();ajaxOpen({type:'get',dataType:'json',async:!0,timeout:10000,url:ulink('backstage/adminIndex?refresh=1'),success:function(data){var html=data.html?data.html:'';$('#skycaiji_admin_index').html(html);$('#skycaiji_admin_index').parents('.box').eq(0).find('.overlay').hide()},error:function(){var times=$('#refresh_admin_index').attr('data-times');times=toInt(times);if(times<3){$('#refresh_admin_index').attr('data-times',times+1).trigger('click')}}})});$('#box_open_basedir .close').bind('click',function(){confirmRight('忽略该问题?',function(){ajaxOpen({type:'get',dataType:'json',url:ulink('backstage/ignoreOpenBasedir'),success:function(data){$('#box_open_basedir').remove()}})})});$('#upgrade_check').html('正在检测更新...');ajaxOpen({type:'get',dataType:'json',async:!0,timeout:10000,url:ulink('backstage/newVersion'),success:function(data){data=data.data;if(data){if(data.is_new_version){var html='<a href="javascript:;" id="op_upgrade" data-version-file="'+(data.version_file?data.version_file:'')+'">检测到新版本V'+data.new_version+'点击升级</a>';if(data.version_link){html+=' &nbsp;<a href="'+data.version_link[1]+'" target="_blank" style="color:red;">'+data.version_link[0]+'</a>'}
$('#upgrade_check').html(html)}else{$('#upgrade_check').html('暂无更新')}
if(data.is_new_admin_index){$('#refresh_admin_index').trigger('click')}}else{$('#upgrade_check').html('')}},error:function(){$('#upgrade_check').html('<a href="javascript:;" onclick="window.location.reload();">检测失败</a>')}});ajaxOpen({type:'get',dataType:'json',async:!0,timeout:60000,url:ulink('backstage/checkUp'),success:function(data){data=data.data;if(data){var list=[];if(data.cliPhpVersion){$('#cli_php_version').show().find('span').html(data.cliPhpVersion)}
if(data.is_new_admin_index){$('#refresh_admin_index').trigger('click')}}else{$('#upgrade_check').html('')}},error:function(){$('#upgrade_check').html('<a href="javascript:;" onclick="window.location.reload();">检测失败</a>')}});$('.content-header h1').append('<div class="loading-sm" style="margin-left:6px;"></div>');ajaxOpen({type:'get',dataType:'json',async:!0,timeout:60000,url:ulink('backstage/checkUp'),success:function(data){data=data.data;if(data){var list=[];if(data.cliPhpVersion){$('#cli_php_version').show().find('span').html(data.cliPhpVersion)}
if(data.swoolePhpVersion){$('#swoole_php_version').show().find('span').html(data.swoolePhpVersion)}
if(data.phpInvalid){list.push('<a href="'+ulink('setting/caiji')+'" target="_blank">cli命令行</a>')}
if(data.swooleInvalid){list.push('<a href="'+ulink('setting/caiji')+'" target="_blank">swoole服务</a>')}
@ -20,7 +20,7 @@ if(data.swoolePhpInvalid){list.push('<a href="'+ulink('setting/caiji')+'" target
if(data.pageRenderInvalid){list.push('<a href="'+ulink('setting/page_render')+'" target="_blank">页面渲染</a>')}
if(list.length>0){list=list.join(' , ');$('#invalid_list').find('[data-box]').html(list);$('#invalid_list').fadeIn()}
if(data.repairTables){$('#repair_tables').find('[data-box]').html(data.repairTables);$('#repair_tables').fadeIn();$('#repair_tables button').bind('click',function(){windowModal('正在修复表...',ulink('backstage/repairTables'),{ajax:{type:'post',data:{'tables':data.repairTables}}})})}
if(data.tongji){for(var i in data.tongji){$('#data_'+i).text(data.tongji[i])}}}}})});function UpgradeZipClass(size,blocks){this.size=size?toInt(size):0;this.blocks=blocks?toInt(blocks):0;this.nextBlockNo=0;this.existBlocks=0}
UpgradeZipClass.prototype={constructor:UpgradeZipClass,down_zip:function(blockNo){var $_o=this;blockNo=toInt(blockNo);$_o.nextBlockNo=0;var url=ulink('upgrade/downZip?block_no='+blockNo);ajaxOpen({type:'get',dataType:'json',url:url,success:function(data){if(data.code==1){var dataData=data.data;$_o.nextBlockNo=toInt(dataData.next_block_no);$_o.existBlocks=toInt(dataData.exist_blocks);var existSize=toInt(dataData.exist_size);existSize=existSize/(1024*1024);existSize=Math.floor(existSize*100)/100;$('#op_upgrade').find('.size').text(existSize+'MB')}else{$('#upgrade_error').show();if(data.msg){$('#upgrade_error').append(data.msg+"\r\n")}else{$('#upgrade_error').append('下载失败:压缩包文件块'+(blockNo+1)+"\r\n")}}},error:function(){$('#upgrade_error').show();$('#upgrade_error').append('下载失败:压缩包文件块'+(blockNo+1)+"\r\n")},complete:function(){if($_o.existBlocks>=$_o.blocks){$_o.down_complete()}else{if($_o.nextBlockNo>0){$_o.down_zip($_o.nextBlockNo)}else{$('#op_upgrade').removeAttr('upgrading').html('请刷新界面重新下载失败的文件!')}}}})},down_complete:function(){$('#op_upgrade').html('正在更新文件...');ajaxOpen({type:'get',dataType:'json',url:ulink('upgrade/downZipComplete?'+urlUsertoken()),success:function(data){if(data.code==1){$('#op_upgrade').html('更新成功')}else{$('#op_upgrade').html('更新失败')}}})}}
if(data.tongji){for(var i in data.tongji){$('#data_'+i).text(data.tongji[i])}}}},complete:function(){$('.content-header h1').find('.loading-sm').remove()}})});function UpgradeZipClass(size,blocks){this.size=size?toInt(size):0;this.blocks=blocks?toInt(blocks):0;this.nextBlockNo=0;this.existBlocks=0}
UpgradeZipClass.prototype={constructor:UpgradeZipClass,down_zip:function(blockNo){var $_o=this;blockNo=toInt(blockNo);$_o.nextBlockNo=0;var url=ulink('upgrade/downZip?block_no='+blockNo);ajaxOpen({type:'get',dataType:'json',url:url,success:function(data){if(data.code==1){var dataData=data.data;$_o.nextBlockNo=toInt(dataData.next_block_no);$_o.existBlocks=toInt(dataData.exist_blocks);var existSize=toInt(dataData.exist_size);existSize=existSize/(1024*1024);existSize=Math.floor(existSize*100)/100;$('#op_upgrade').find('.size').text(existSize+'MB')}else{$('#upgrade_error').show();if(data.msg){$('#upgrade_error').append(data.msg+"\r\n")}else{$('#upgrade_error').append('下载失败:压缩包文件块'+(blockNo+1)+"\r\n")}}},error:function(){$('#upgrade_error').show();$('#upgrade_error').append('下载失败:压缩包文件块'+(blockNo+1)+"\r\n")},complete:function(){if($_o.existBlocks>=$_o.blocks){$_o.down_complete()}else{if($_o.nextBlockNo>0){$_o.down_zip($_o.nextBlockNo)}else{$('#op_upgrade').removeAttr('upgrading').html('请刷新界面重新下载失败的文件!')}}}})},down_complete:function(){$('#op_upgrade').html('正在更新文件...');ajaxOpen({type:'get',dataType:'json',url:ulink('upgrade/downZipComplete?'+globalOp.urlUsertoken()),success:function(data){if(data.code==1){$('#op_upgrade').html('更新成功')}else{$('#op_upgrade').html('更新失败')}}})}}
function UpgradeClass(fileList){this.fileList=fileList;this.fileNum=fileList?fileList.length:0;this.downNum=0}
UpgradeClass.prototype={constructor:UpgradeClass,down_file:function(index){var $_o=this;var file=$_o.fileList[index];ajaxOpen({type:'get',dataType:'json',url:ulink('upgrade/downFile'),data:{filename:file.file,filemd5:file.md5},success:function(data){if(data.code==1){$_o.downNum++;$('#op_upgrade').html('正在更新... '+$_o.downNum+'/'+$_o.fileNum)}else{$('#op_upgrade').html('更新失败');$('#upgrade_error').show();if(data.msg){$('#upgrade_error').append(data.msg+"\r\n")}else{$('#upgrade_error').append('更新失败:'+file.file+"\r\n")}}},error:function(){$('#op_upgrade').html('更新失败');$('#upgrade_error').show();$('#upgrade_error').append('获取失败:'+file.file+"\r\n")},complete:function(){if(index+1>=$_o.fileNum){if($_o.downNum>=$_o.fileNum){$_o.down_complete()}else{$('#op_upgrade').removeAttr('upgrading').html('请刷新界面重新下载失败的文件!')}}else{$_o.down_file(index+1)}}})},down_complete:function(){$('#op_upgrade').html('正在校验更新文件...');ajaxOpen({type:'get',dataType:'json',url:ulink('upgrade/downComplete?'+urlUsertoken()),success:function(data){if(data.code==1){$('#op_upgrade').html('更新成功')}else{$('#op_upgrade').html('更新失败');$('#upgrade_error').show();for(var fi in data.data){$('#upgrade_error').append('文件校验失败:'+data.data[fi]+"\r\n")}}}})}}
UpgradeClass.prototype={constructor:UpgradeClass,down_file:function(index){var $_o=this;var file=$_o.fileList[index];ajaxOpen({type:'get',dataType:'json',url:ulink('upgrade/downFile'),data:{filename:file.file,filemd5:file.md5},success:function(data){if(data.code==1){$_o.downNum++;$('#op_upgrade').html('正在更新... '+$_o.downNum+'/'+$_o.fileNum)}else{$('#op_upgrade').html('更新失败');$('#upgrade_error').show();if(data.msg){$('#upgrade_error').append(data.msg+"\r\n")}else{$('#upgrade_error').append('更新失败:'+file.file+"\r\n")}}},error:function(){$('#op_upgrade').html('更新失败');$('#upgrade_error').show();$('#upgrade_error').append('获取失败:'+file.file+"\r\n")},complete:function(){if(index+1>=$_o.fileNum){if($_o.downNum>=$_o.fileNum){$_o.down_complete()}else{$('#op_upgrade').removeAttr('upgrading').html('请刷新界面重新下载失败的文件!')}}else{$_o.down_file(index+1)}}})},down_complete:function(){$('#op_upgrade').html('正在校验更新文件...');ajaxOpen({type:'get',dataType:'json',url:ulink('upgrade/downComplete?'+globalOp.urlUsertoken()),success:function(data){if(data.code==1){$('#op_upgrade').html('更新成功')}else{$('#op_upgrade').html('更新失败');$('#upgrade_error').show();for(var fi in data.data){$('#upgrade_error').append('文件校验失败:'+data.data[fi]+"\r\n")}}}})}}

View File

@ -10,11 +10,13 @@
'use strict';function MyStoreClass(){}
MyStoreClass.prototype={constructor:MyStoreClass,init_rules:function(){var $_o=this;$('table.datatable thead th[data-order]').bind('click',function(){var order=$(this).attr('data-order');if(!order){return!1}
var className=$(this).attr('class');var sort='desc';if(className=='sorting_desc'){sort='asc'}
window.location.href=ulink('mystore/rule?order='+order+'&sort='+sort);return!1});$('#deleteall').bind('click',function(){var obj=$(this);confirmRight(window.tpl_lang.confirm_delete,function(){ajaxOpen({type:"POST",url:ulink('mystore/ruleOp?op=deleteall'),dataType:"json",data:$('#form_list').serialize(),success:function(data){data.code==1?toastr.success(data.msg):toastr.error(data.msg);window.setTimeout("window.location.reload();",2500)}})})});$('#list_table .delete').bind('click',function(){var obj=$(this);confirmRight(window.tpl_lang.confirm_delete,function(){ajaxOpen({type:"GET",url:obj.attr('url'),dataType:"json",success:function(data){data.code==1?toastr.success(data.msg):toastr.error(data.msg);if(data.code==1){obj.parents('tr').eq(0).remove()}}})})});$('#list_table').on('click','.store-detail',function(){openStoreUrl($(this).attr('data-url'))});$('#check_update').bind('click',function(){$_o.check_rules_update()});$('#auto_check').bind('click',function(){var auto=$(this).is(':checked')?1:0;ajaxOpen({type:"GET",url:ulink('mystore/ruleOp?op=auto_check&auto='+auto),dataType:"json",success:function(data){data.code==1?toastr.success(data.msg):toastr.error(data.msg)}})});if($('#auto_check').is(':checked')){$_o.check_rules_update()}},check_rules_update:function(){var ids=new Array();$('#list_table').find('tr[data-rule-id]').each(function(){ids.push($(this).attr('data-rule-id'))});if(ids.length>0){$('.nav-check-update #check_update').html('<div class="loading-sm"></div> 正在检测更新');$('.store-detail').find('.new-version').remove();ajaxOpen({type:"get",url:ulink('mystore/ruleOp?op=check_store_update'),dataType:"json",async:!0,data:{ids:ids},success:function(data){if(data.code==1){for(var id in data.data){var storeDetail=$('tr[data-rule-id="'+data.data[id]+'"]').find('.store-detail');storeDetail.append('<span class="new-version">新</span>')}}},complete:function(){$('.nav-check-update #check_update').html('检测更新')}})}},init_releaseapp:function(){var $_o=this;$('table.datatable thead th[data-order]').bind('click',function(){var order=$(this).attr('data-order');if(!order){return!1}
window.location.href=ulink('mystore/rule?order='+order+'&sort='+sort);return!1});$('#deleteall').bind('click',function(){var obj=$(this);confirmRight(window.tpl_lang.confirm_delete,function(){ajaxOpen({type:"POST",url:ulink('mystore/ruleOp?op=deleteall'),dataType:"json",data:$('#form_list').serialize(),success:function(data){data.code==1?toastr.success(data.msg):toastr.error(data.msg);window.setTimeout("window.location.reload();",2500)}})})});$('#list_table .delete').bind('click',function(){var obj=$(this);confirmRight(window.tpl_lang.confirm_delete,function(){ajaxOpen({type:"GET",url:obj.attr('url'),dataType:"json",success:function(data){data.code==1?toastr.success(data.msg):toastr.error(data.msg);if(data.code==1){obj.parents('tr').eq(0).remove()}}})})});$('#list_table').on('click','.store-detail',function(){globalOp.openStoreUrl($(this).attr('data-url'))});$('#check_update').bind('click',function(){$_o.check_rules_update()});$('#auto_check').bind('click',function(){var auto=$(this).is(':checked')?1:0;ajaxOpen({type:"GET",url:ulink('mystore/ruleOp?op=auto_check&auto='+auto),dataType:"json",success:function(data){data.code==1?toastr.success(data.msg):toastr.error(data.msg)}})});if($('#auto_check').is(':checked')){$_o.check_rules_update()}},check_rules_update:function(){var ids=new Array();$('#list_table').find('tr[data-rule-id]').each(function(){ids.push($(this).attr('data-rule-id'))});if(ids.length>0){$('.nav-check-update #check_update').html('<div class="loading-sm"></div> 正在检测更新');$('.store-detail').find('.new-version').remove();ajaxOpen({type:"get",url:ulink('mystore/ruleOp?op=check_store_update'),dataType:"json",async:!0,data:{ids:ids},success:function(data){if(data.code==1){for(var id in data.data){var storeDetail=$('tr[data-rule-id="'+data.data[id]+'"]').find('.store-detail');storeDetail.append('<span class="new-version">新</span>')}}},complete:function(){$('.nav-check-update #check_update').html('检测更新')}})}},init_releaseapp:function(){var $_o=this;$('table.datatable thead th[data-order]').bind('click',function(){var order=$(this).attr('data-order');if(!order){return!1}
var className=$(this).attr('class');var sort='desc';if(className=='sorting_desc'){sort='asc'}
window.location.href=ulink('mystore/releaseApp?order='+order+'&sort='+sort);return!1});$('#deleteall').bind('click',function(){var obj=$(this);confirmRight(window.tpl_lang.confirm_delete,function(){ajaxOpen({type:"POST",url:ulink('mystore/releaseAppOp?op=deleteall'),dataType:"json",data:$('#form_list').serialize(),success:function(data){data.code==1?toastr.success(data.msg):toastr.error(data.msg);window.setTimeout("window.location.reload();",2500)}})})});$('#list_table .delete').bind('click',function(){var obj=$(this);confirmRight(window.tpl_lang.confirm_delete,function(){ajaxOpen({type:"GET",url:obj.attr('url'),dataType:"json",success:function(data){data.code==1?toastr.success(data.msg):toastr.error(data.msg);if(data.code==1){obj.parents('tr').eq(0).remove()}}})})});$('#list_table').on('click','.store-detail',function(){openStoreUrl($(this).attr('data-url'))});$('#check_update').bind('click',function(){$_o.check_releaseapp_update()});$('#auto_check').bind('click',function(){var auto=$(this).is(':checked')?1:0;ajaxOpen({type:"GET",url:ulink('mystore/releaseAppOp?op=auto_check&auto='+auto),dataType:"json",success:function(data){data.code==1?toastr.success(data.msg):toastr.error(data.msg)}})});if($('#auto_check').is(':checked')){$_o.check_releaseapp_update()}},check_releaseapp_update:function(){var ids=new Array();$('#list_table').find('tr[data-app-id]').each(function(){ids.push($(this).attr('data-app-id'))});if(ids.length>0){$('.nav-check-update #check_update').html('<div class="loading-sm"></div> 正在检测更新');$('.store-detail').find('.new-version').remove();ajaxOpen({type:"get",url:ulink('mystore/releaseAppOp?op=check_store_update'),dataType:"json",async:!0,data:{ids:ids},success:function(data){if(data.code==1){for(var id in data.data){var storeDetail=$('tr[data-app-id="'+data.data[id]+'"]').find('.store-detail');storeDetail.append('<span class="new-version">新</span>')}}},complete:function(){$('.nav-check-update #check_update').html('检测更新')}})}},init_funcapp:function(){var $_o=this;$('table.datatable thead th[data-order]').bind('click',function(){var order=$(this).attr('data-order');if(!order){return!1}
window.location.href=ulink('mystore/releaseApp?order='+order+'&sort='+sort);return!1});$('#deleteall').bind('click',function(){var obj=$(this);confirmRight(window.tpl_lang.confirm_delete,function(){ajaxOpen({type:"POST",url:ulink('mystore/releaseAppOp?op=deleteall'),dataType:"json",data:$('#form_list').serialize(),success:function(data){data.code==1?toastr.success(data.msg):toastr.error(data.msg);window.setTimeout("window.location.reload();",2500)}})})});$('#list_table .delete').bind('click',function(){var obj=$(this);confirmRight(window.tpl_lang.confirm_delete,function(){ajaxOpen({type:"GET",url:obj.attr('url'),dataType:"json",success:function(data){data.code==1?toastr.success(data.msg):toastr.error(data.msg);if(data.code==1){obj.parents('tr').eq(0).remove()}}})})});$('#list_table').on('click','.store-detail',function(){globalOp.openStoreUrl($(this).attr('data-url'))});$('#check_update').bind('click',function(){$_o.check_releaseapp_update()});$('#auto_check').bind('click',function(){var auto=$(this).is(':checked')?1:0;ajaxOpen({type:"GET",url:ulink('mystore/releaseAppOp?op=auto_check&auto='+auto),dataType:"json",success:function(data){data.code==1?toastr.success(data.msg):toastr.error(data.msg)}})});if($('#auto_check').is(':checked')){$_o.check_releaseapp_update()}},check_releaseapp_update:function(){var ids=new Array();$('#list_table').find('tr[data-app-id]').each(function(){ids.push($(this).attr('data-app-id'))});if(ids.length>0){$('.nav-check-update #check_update').html('<div class="loading-sm"></div> 正在检测更新');$('.store-detail').find('.new-version').remove();ajaxOpen({type:"get",url:ulink('mystore/releaseAppOp?op=check_store_update'),dataType:"json",async:!0,data:{ids:ids},success:function(data){if(data.code==1){for(var id in data.data){var storeDetail=$('tr[data-app-id="'+data.data[id]+'"]').find('.store-detail');storeDetail.append('<span class="new-version">新</span>')}}},complete:function(){$('.nav-check-update #check_update').html('检测更新')}})}},init_funcapp:function(){var $_o=this;$('table.datatable thead th[data-order]').bind('click',function(){var order=$(this).attr('data-order');if(!order){return!1}
var className=$(this).attr('class');var sort='desc';if(className=='sorting_desc'){sort='asc'}
window.location.href=ulink('mystore/funcApp?order='+order+'&sort='+sort);return!1});$('#deleteall').bind('click',function(){var obj=$(this);confirmRight(window.tpl_lang.confirm_delete,function(){ajaxOpen({type:"POST",url:ulink('mystore/funcAppOp?op=deleteall'),dataType:"json",data:$('#form_list').serialize(),success:function(data){data.code==1?toastr.success(data.msg):toastr.error(data.msg);window.setTimeout("window.location.reload();",2500)}})})});$('#list_table .delete').bind('click',function(){var obj=$(this);var id=$(this).parents('tr[data-app-id]').attr('data-app-id');confirmRight(window.tpl_lang.confirm_delete,function(){ajaxOpen({type:"GET",url:ulink('mystore/funcAppOp?op=delete'),dataType:"json",data:{id:id},success:function(data){data.code==1?toastr.success(data.msg):toastr.error(data.msg);if(data.code==1){obj.parents('tr').eq(0).remove()}}})})});$('#list_table .enable').bind('click',function(){var obj=$(this);var id=$(this).parents('tr[data-app-id]').attr('data-app-id');var enable=$(this).attr('data-val');enable=(enable==1)?0:1;ajaxOpen({type:'GET',url:ulink('mystore/funcAppOp?op=enable'),dataType:'json',data:{id:id,enable:enable},success:function(data){if(data.code){obj.attr('data-val',enable?1:0);obj.text(enable?'已启用':'已禁用');obj.css('color',(enable?'green':'red'))}else{toastr.error(data.msg)}}})});$('#list_table .methods .dropdown-toggle').bind('click',function(){var obj=$(this);var id=$(this).parents('tr[data-app-id]').attr('data-app-id');var box=obj.parents('.methods');box.find('.dropdown-menu').html('<li style="padding-left:15px;"><div class="loading-sm"></div></li>');ajaxOpen({type:'GET',url:ulink('mystore/funcAppOp?op=detail'),dataType:'json',data:{id:id},success:function(data){if(data.code&&data.data){var methods=data.data.methods;methods=methods?methods:{};var html='';for(var m in methods){var mMethod=methods[m];mMethod=mMethod?mMethod:{};html+='<li><a href="javascript:;" data-func-method="'+m+'">'+m+''+(mMethod.comment_cut?mMethod.comment_cut:'')+'</a></li>'}
if(!html){html='<li><a href="javascript:;">无方法</a></li>'}
box.find('.dropdown-menu').html(html);box.find('.dropdown-menu [data-func-method]').bind('click',function(){var funcMethod=$(this).attr('data-func-method');windowModal('方法:'+funcMethod,ulink('mystore/funcAppOp?op=method&id=_id_&name=_name_',{'_id_':id,'_name_':funcMethod}),{lg:1,'full_height':1})})}}})});$('#list_table').on('click','.store-detail',function(){openStoreUrl($(this).attr('data-url'))});$('#check_update').bind('click',function(){$_o.check_funcapp_update()});$('#auto_check').bind('click',function(){var auto=$(this).is(':checked')?1:0;ajaxOpen({type:"GET",url:ulink('mystore/funcAppOp?op=auto_check&auto='+auto),dataType:"json",success:function(data){data.code==1?toastr.success(data.msg):toastr.error(data.msg)}})});if($('#auto_check').is(':checked')){$_o.check_funcapp_update()}},check_funcapp_update:function(){var ids=new Array();$('#list_table').find('tr[data-app-id]').each(function(){ids.push($(this).attr('data-app-id'))});if(ids.length>0){$('.nav-check-update #check_update').html('<div class="loading-sm"></div> 正在检测更新');$('.store-detail').find('.new-version').remove();ajaxOpen({type:"get",url:ulink('mystore/funcAppOp?op=check_store_update'),dataType:"json",async:!0,data:{ids:ids},success:function(data){if(data.code==1){for(var id in data.data){var storeDetail=$('tr[data-app-id="'+data.data[id]+'"]').find('.store-detail');storeDetail.append('<span class="new-version">新</span>')}}},complete:function(){$('.nav-check-update #check_update').html('检测更新')}})}}}
box.find('.dropdown-menu').html(html);box.find('.dropdown-menu [data-func-method]').bind('click',function(){var funcMethod=$(this).attr('data-func-method');windowModal('方法:'+funcMethod,ulink('mystore/funcAppOp?op=method&id=_id_&name=_name_',{'_id_':id,'_name_':funcMethod}),{lg:1,'full_height':1})})}}})});$('#list_table').on('click','.store-detail',function(){globalOp.openStoreUrl($(this).attr('data-url'))});$('#check_update').bind('click',function(){$_o.check_funcapp_update()});$('#auto_check').bind('click',function(){var auto=$(this).is(':checked')?1:0;ajaxOpen({type:"GET",url:ulink('mystore/funcAppOp?op=auto_check&auto='+auto),dataType:"json",success:function(data){data.code==1?toastr.success(data.msg):toastr.error(data.msg)}})});if($('#auto_check').is(':checked')){$_o.check_funcapp_update()}},check_funcapp_update:function(){var ids=new Array();$('#list_table').find('tr[data-app-id]').each(function(){ids.push($(this).attr('data-app-id'))});if(ids.length>0){$('.nav-check-update #check_update').html('<div class="loading-sm"></div> 正在检测更新');$('.store-detail').find('.new-version').remove();ajaxOpen({type:"get",url:ulink('mystore/funcAppOp?op=check_store_update'),dataType:"json",async:!0,data:{ids:ids},success:function(data){if(data.code==1){for(var id in data.data){var storeDetail=$('tr[data-app-id="'+data.data[id]+'"]').find('.store-detail');storeDetail.append('<span class="new-version">新</span>')}}},complete:function(){$('.nav-check-update #check_update').html('检测更新')}})}},init_apiapp:function(){var $_o=this;$('table.datatable thead th[data-order]').bind('click',function(){var order=$(this).attr('data-order');if(!order){return!1}
var className=$(this).attr('class');var sort='desc';if(className=='sorting_desc'){sort='asc'}
window.location.href=ulink('mystore/apiApp?order='+order+'&sort='+sort);return!1});$('#list_table .enable').bind('click',function(){var obj=$(this);var id=$(this).parents('tr[data-app-id]').attr('data-app-id');var enable=$(this).attr('data-val');enable=(enable==1)?0:1;ajaxOpen({type:'GET',url:ulink('mystore/apiAppOp?op=enable'),dataType:'json',data:{id:id,enable:enable},success:function(data){if(data.code){obj.attr('data-val',enable?1:0);obj.text(enable?'已启用':'已禁用');obj.css('color',(enable?'green':'red'))}else{toastr.error(data.msg)}}})});$('#list_table .delete').bind('click',function(){var obj=$(this);confirmRight(window.tpl_lang.confirm_delete,function(){ajaxOpen({type:"GET",url:obj.attr('url'),dataType:"json",success:function(data){data.code==1?toastr.success(data.msg):toastr.error(data.msg);if(data.code==1){obj.parents('tr').eq(0).remove()}}})})});$('#list_table .config').bind('click',function(){var curTr=$(this).parents('tr[data-app-id]').eq(0);var appId=curTr.attr('data-app-id');var appName=curTr.find('.name').text();windowModal('全局配置:'+appName,ulink('mystore/apiAppConfig?id='+appId))});$('#list_table').on('click','.store-detail',function(){globalOp.openStoreUrl($(this).attr('data-url'))});$('#check_update').bind('click',function(){$_o.check_apiapp_update()});$('#auto_check').bind('click',function(){var auto=$(this).is(':checked')?1:0;ajaxOpen({type:"GET",url:ulink('mystore/apiAppOp?op=auto_check&auto='+auto),dataType:"json",success:function(data){data.code==1?toastr.success(data.msg):toastr.error(data.msg)}})});if($('#auto_check').is(':checked')){$_o.check_apiapp_update()}},check_apiapp_update:function(){var ids=new Array();$('#list_table').find('tr[data-app-id]').each(function(){ids.push($(this).attr('data-app-id'))});if(ids.length>0){$('.nav-check-update #check_update').html('<div class="loading-sm"></div> 正在检测更新');$('.store-detail').find('.new-version').remove();ajaxOpen({type:"get",url:ulink('mystore/apiAppOp?op=check_store_update'),dataType:"json",async:!0,data:{ids:ids},success:function(data){if(data.code==1){for(var id in data.data){var storeDetail=$('tr[data-app-id="'+data.data[id]+'"]').find('.store-detail');storeDetail.append('<span class="new-version">新</span>')}}},complete:function(){$('.nav-check-update #check_update').html('检测更新')}})}},apiapp_config:function(config){if(isObject(config)){globalOp.loadFormConfig('#win_form_api_app_config',config.global,'global')}},apiapp_config_none:function(){$(document).ready(function(){$('#myModal').modal('hide');prompt_success('无需配置')})}}
var myStoreClass=new MyStoreClass()

View File

@ -8,7 +8,7 @@
|--------------------------------------------------------------------------
*/
'use strict';function ProviderClass(){}
ProviderClass.prototype={constructor:ProviderClass,init_list:function(search){search=search?search:{};$('#form_search [name="title"]').val(search.title?search.title:'');$('#form_search [name="url"]').val(search.url?search.url:'');$('#form_list').on('click','.delete',function(){var tr=$(this).parents('tr[data-id]');var id=tr.attr('data-id');confirmRight('确定删除?',function(){ajaxOpen({type:'GET',url:ulink('provider/delete?id='+id),dataType:'json',success:function(data){if(data.code){tr.remove();toastr.success('删除成功')}else{toastr.error(data.msg)}}})})});$('#form_list').on('click','.comment',function(){var url=$(this).parents('tr[data-url]').attr('data-url');var provStoreUrl=$('#prov_store_url').val();url=provStoreUrl+(provStoreUrl.indexOf('?')>-1?'&':'?')+'url='+encodeURIComponent(url);openStoreUrl(url);return!1});$('#form_list').on('click','.edit',function(){var id=$(this).parents('tr[data-id]').attr('data-id');windowModal('编辑',ulink('provider/save?id='+id));return!1});$('#form_list').on('click','.store',function(){var url=$(this).parents('tr[data-url]').attr('data-url');window.open(ulink('mystore/store?url='+encodeURIComponent(url)));return!1});$('#form_list').on('click','.enable',function(){var obj=$(this);var id=$(this).parents('tr[data-id]').attr('data-id');var enable=$(this).attr('data-val');enable=(enable==1)?0:1;ajaxOpen({type:'GET',url:ulink('provider/enable?id='+id+'&enable='+enable),dataType:'json',success:function(data){if(data.code){obj.attr('data-val',enable?1:0);obj.text(enable?'允许':'拒绝');obj.css('color',(enable?'green':'red'))}else{toastr.error(data.msg)}}})});$('#btn_add').bind('click',function(){windowModal('添加',ulink('provider/save'));return!1});$('#box_tip .close').bind('click',function(){confirmRight('关闭该提示?',function(){ajaxOpen({type:'GET',url:ulink('provider/tip_close'),dataType:'json',success:function(data){$('#box_tip').remove()}})})})},init_prov:function(data){var formId='#win_form_provider';$(formId).bind('submit',function(){var obj=$(this);ajaxOpen({type:'post',url:obj.attr('action'),dataType:'json',data:obj.serialize(),success:function(data){if(data.code==1){ajaxDataMsg(data)}else{if(data.msg){toastr.error(data.msg)}
ProviderClass.prototype={constructor:ProviderClass,init_list:function(search){search=search?search:{};$('#form_search [name="title"]').val(search.title?search.title:'');$('#form_search [name="url"]').val(search.url?search.url:'');$('#form_list').on('click','.delete',function(){var tr=$(this).parents('tr[data-id]');var id=tr.attr('data-id');confirmRight('确定删除?',function(){ajaxOpen({type:'GET',url:ulink('provider/delete?id='+id),dataType:'json',success:function(data){if(data.code){tr.remove();toastr.success('删除成功')}else{toastr.error(data.msg)}}})})});$('#form_list').on('click','.comment',function(){var url=$(this).parents('tr[data-url]').attr('data-url');var provStoreUrl=$('#prov_store_url').val();url=provStoreUrl+(provStoreUrl.indexOf('?')>-1?'&':'?')+'url='+encodeURIComponent(url);globalOp.openStoreUrl(url);return!1});$('#form_list').on('click','.edit',function(){var id=$(this).parents('tr[data-id]').attr('data-id');windowModal('编辑',ulink('provider/save?id='+id));return!1});$('#form_list').on('click','.store',function(){var url=$(this).parents('tr[data-url]').attr('data-url');window.open(ulink('mystore/store?url='+encodeURIComponent(url)));return!1});$('#form_list').on('click','.enable',function(){var obj=$(this);var id=$(this).parents('tr[data-id]').attr('data-id');var enable=$(this).attr('data-val');enable=(enable==1)?0:1;ajaxOpen({type:'GET',url:ulink('provider/enable?id='+id+'&enable='+enable),dataType:'json',success:function(data){if(data.code){obj.attr('data-val',enable?1:0);obj.text(enable?'允许':'拒绝');obj.css('color',(enable?'green':'red'))}else{toastr.error(data.msg)}}})});$('#btn_add').bind('click',function(){windowModal('添加',ulink('provider/save'));return!1});$('#box_tip .close').bind('click',function(){confirmRight('关闭该提示?',function(){ajaxOpen({type:'GET',url:ulink('provider/tip_close'),dataType:'json',success:function(data){$('#box_tip').remove()}})})})},init_prov:function(data){var formId='#win_form_provider';$(formId).bind('submit',function(){var obj=$(this);ajaxOpen({type:'post',url:obj.attr('action'),dataType:'json',data:obj.serialize(),success:function(data){if(data.code==1){ajaxDataMsg(data)}else{if(data.msg){toastr.error(data.msg)}
var data=data.data;if(data&&data.same_as_pwd){confirmRight(data.same_as_pwd,function(){obj.find('[name="same_as_pwd"]').val(1);obj.trigger('submit')})}}}});return!1});if(data){$(formId).find('[name="url"]').val(data.url);$(formId).find('[name="title"]').val(data.title);$(formId).find('[name="authkey"]').val(data.authkey);$(formId).find('[name="sort"]').val(data.sort);$(formId).find('[name="enable"][value="'+data.enable+'"]').prop('checked','checked')}},init_authkeys:function(search){search=search?search:{};$('#search_title').val(search.title?search.title:'');$('#search_url').val(search.url?search.url:'');$('#btn_search').bind('click',function(){var title=$('#search_title').val();var url=$('#search_url').val();window.location.href=ulink('provider/authkeys?url=_url_&title=_title_',{'_url_':url,'_title_':title})});$('#form_list').bind('submit',function(){var obj=$(this);$('#form_list [data-prov-id]').removeClass('has-error');ajaxOpen({type:'post',url:obj.attr('action'),dataType:'json',data:obj.serialize(),success:function(data){if(data.code==1){if(data.msg){toastr.success(data.msg)}
window.setTimeout(function(){window.location.reload()},2000)}else{if(data.msg){toastr.error(data.msg)}
var data=data.data;if(data){if(data.prov_id){$('#form_list').find('[data-prov-id="'+data.prov_id+'"]').addClass('has-error')}

View File

@ -8,13 +8,13 @@
|--------------------------------------------------------------------------
*/
'use strict';function ProxyClass(){}
ProxyClass.prototype={constructor:ProxyClass,init_setting:function(proxyConfig){var $_o=this;$('#proxy_ip_table').attr('data-tpl',$('#proxy_ip_table .proxy-ip-tpl').html());$('#proxy_ip_table .proxy-ip-tpl').remove();$('[name="open"]').bind('click',function(){if($(this).val()==1){$('.content-wrapper').removeClass('wrapper-not-enable')}else{$('.content-wrapper').addClass('wrapper-not-enable')}});$('.edit-proxy-groups').bind('click',function(){windowModal('管理分组',ulink('proxy/groups'))});$('#batch_proxy_ip').bind('click',function(){windowModal('批量添加',ulink('proxy/batch'))});$('#add_proxy_ip').bind('click',function(){windowModal('添加代理IP',ulink('proxy/add'),{lg:1})});$('#invalid_proxy_ip').bind('click',function(){confirmRight('确定清理无效ip',function(){windowModal('正在清理...',ulink('proxy/clearInvalid'),{ajax:{success:function(){$_o.reload_iframe('清理完成')}}})})});$('#proxy_ip_iframe').bind('load',function(){$('#panel_proxy_ip .loading').hide();$(this).show();var mainheight=$(this).contents().find('body').height()+1;$(this).height(mainheight)});$('#proxy_ip_table').on('click','.delete-proxy-ip',function(){$(this).parents('tr').eq(0).remove()});$('[name="use"]').bind('click',function(){$('[id^="proxy_use_"]').hide();$('#proxy_use_'+$(this).val()).show()});$('[name="api[open]"]').bind('click',function(){if($(this).val()==1){showPanelCollapse('#panel_proxy_api')}});$('#proxy_api .p-api-add').bind('click',function(){$_o.add_api()});$('#proxy_api').on('click','.p-api-format a[data-val]',function(){var obj=$(this).parents('.p-api-panel').eq(0).find('[data-name="api_format"]');insertAtCaret(obj,$(this).attr('data-val'))});eleExchange('#proxy_api','.p-api-move','.p-api-panel');$('#proxy_api').on('click','.p-api-delete',function(){var obj=$(this);confirmRight('确定删除?',function(){obj.parents('.p-api-panel').eq(0).remove()})});$('#proxy_api').on('click','.btn-api-test',function(){var config={};$(this).parents('.p-api-panel').eq(0).find('[data-name]').each(function(){var name=$(this).attr('data-name');config[name]=$(this).val()});windowModal('测试接口',ulink('proxy/testApi'),{ajax:{type:'post',data:{config:config}}})});if(proxyConfig){$('[name="open"][value="'+toInt(proxyConfig.open)+'"]').trigger('click');$('[name="failed"]').val(toInt(proxyConfig.failed));$('[name="group_id"]').val(toInt(proxyConfig.group_id));$('[name="use"][value="'+proxyConfig.use+'"]').trigger('click');$('[name="use_num"]').val(toInt(proxyConfig.use_num));$('[name="use_time"]').val(toInt(proxyConfig.use_time));if(proxyConfig.api){$('[name="api[open]"][value="'+toInt(proxyConfig.api.open)+'"]').trigger('click');$('[name="api[insert]"]').val(proxyConfig.api.insert)}
ProxyClass.prototype={constructor:ProxyClass,init_setting:function(proxyConfig){var $_o=this;$('#proxy_ip_table').attr('data-tpl',$('#proxy_ip_table .proxy-ip-tpl').html());$('#proxy_ip_table .proxy-ip-tpl').remove();$('[name="open"]').bind('click',function(){if($(this).val()==1){$('.content-wrapper').removeClass('wrapper-not-enable')}else{$('.content-wrapper').addClass('wrapper-not-enable')}});$('.edit-proxy-groups').bind('click',function(){windowModal('管理分组',ulink('proxy/groups'))});$('#batch_proxy_ip').bind('click',function(){windowModal('批量添加',ulink('proxy/batch'))});$('#add_proxy_ip').bind('click',function(){windowModal('添加代理IP',ulink('proxy/add'),{lg:1})});$('#invalid_proxy_ip').bind('click',function(){confirmRight('确定清理无效ip',function(){windowModal('正在清理...',ulink('proxy/clearInvalid'),{ajax:{success:function(){$_o.reload_iframe('清理完成')}}})})});$('#proxy_ip_iframe').bind('load',function(){$('#panel_proxy_ip .loading').hide();$(this).show();var mainheight=$(this).contents().find('body').height()+1;$(this).height(mainheight)});$('#proxy_ip_table').on('click','.delete-proxy-ip',function(){$(this).parents('tr').eq(0).remove()});$('[name="use"]').bind('click',function(){$('[id^="proxy_use_"]').hide();$('#proxy_use_'+$(this).val()).show()});$('[name="api[open]"]').bind('click',function(){if($(this).val()==1){globalOp.showPanelCollapse('#panel_proxy_api')}});$('#proxy_api .p-api-add').bind('click',function(){$_o.add_api()});$('#proxy_api').on('click','.p-api-format a[data-val]',function(){var obj=$(this).parents('.p-api-panel').eq(0).find('[data-name="api_format"]');globalOp.insertAtCaret(obj,$(this).attr('data-val'))});globalOp.eleExchange('#proxy_api','.p-api-move','.p-api-panel');$('#proxy_api').on('click','.p-api-delete',function(){var obj=$(this);confirmRight('确定删除?',function(){obj.parents('.p-api-panel').eq(0).remove()})});$('#proxy_api').on('click','.btn-api-test',function(){var config={};$(this).parents('.p-api-panel').eq(0).find('[data-name]').each(function(){var name=$(this).attr('data-name');config[name]=$(this).val()});windowModal('测试接口',ulink('proxy/testApi'),{ajax:{type:'post',data:{config:config}}})});if(proxyConfig){$('[name="open"][value="'+toInt(proxyConfig.open)+'"]').trigger('click');$('[name="failed"]').val(toInt(proxyConfig.failed));$('[name="group_id"]').val(toInt(proxyConfig.group_id));$('[name="use"][value="'+proxyConfig.use+'"]').trigger('click');$('[name="use_num"]').val(toInt(proxyConfig.use_num));$('[name="use_time"]').val(toInt(proxyConfig.use_time));if(proxyConfig.api){$('[name="api[open]"][value="'+toInt(proxyConfig.api.open)+'"]').trigger('click');$('[name="api[insert]"]').val(proxyConfig.api.insert)}
if(proxyConfig.apis){for(var i in proxyConfig.apis){$_o.add_api(proxyConfig.apis[i])}}}},reload_iframe:function(msg){$('#myModal').modal('hide');toastr.success(msg);$('#panel_proxy_ip .loading').show();$('#proxy_ip_iframe').hide();$('#proxy_ip_iframe').attr('src',$('#proxy_ip_iframe').attr('src')).hide()},add_api:function(data){data=data?data:{};var tpl=$('#proxy_api_tpl').clone();tpl.removeAttr('id').css('display','block');var unique=generateUUID();var collapseId='api_collapse_'+unique;tpl.find('.p-api-title').attr('href','#'+collapseId);tpl.find('.p-api-collapse').attr('id',collapseId);tpl.find('[data-name]').each(function(){var name=$(this).attr('data-name');$(this).attr('name','apis[i_'+unique+']['+name+']');if(data[name]){$(this).val(data[name])}});if(data.api_url){tpl.find('.p-api-title small').text(''+data.api_url)}
$('#proxy_api_box').append(tpl)},init_list:function(search){search=search?search:{};if(search){for(var i in search){$('#form_search').find('[name="'+i+'"]').val(search[i])}}
$('#form_list').on('change','[data-name="ip_list[]"],[data-name="user_list[]"],[data-name="pwd_list[]"],[data-name="type_list[]"],[data-name="gid_list[]"]',function(){$(this).parents('tr').eq(0).find('[data-name="ips[]"]').prop('checked',!0)});$('#form_list').on('click','.op-delete',function(){var tr=$(this).parents('tr').eq(0);var ip=tr.find('[data-name="ips[]"]').val();ajaxOpen({type:'get',dataType:'json',url:ulink('proxy/op?op=delete&ip=_ip_',{'_ip_':ip}),success:function(data){if(data.code==1){tr.fadeOut(100,function(){tr.remove()});toastr.success(data.msg)}else{toastr.error(data.msg)}}})});$('#form_list').on('click','.check-all-ip',function(){var checked=$(this).is(":checked")?true:!1;$('[data-name="ips[]"]').prop('checked',checked)});$('#form_list').on('click','.delete-all-ip',function(){confirmRight('确定删除选中的IP',function(){$('#form_list').find('[name="op"]').val('delete_all');var ips=new Array();$('#form_list').find('[data-name="ips[]"]').each(function(){if($(this).is(':checked')){ips.push($(this).val())}});if(ips){$('[name="ips"]').val(JSON.stringify(ips))}
$('#form_list').submit()})});$('#form_list').on('click','.update-all-ip',function(){confirmRight('确定修改?',function(){$('#form_list').find('[name="op"]').val('update_all');var ips=new Array();var paramNames=['ip_list','user_list','pwd_list','type_list','gid_list'];var paramDatas={};for(var i in paramNames){paramDatas[paramNames[i]]=new Array()}
$('#form_list').find('[data-name="ips[]"]').each(function(){if($(this).is(':checked')){ips.push($(this).val());var tr=$(this).parents('tr').eq(0);for(var paramName in paramDatas){paramDatas[paramName].push(tr.find('[data-name="'+paramName+'[]"]').val())}}});if(ips){$('[name="ips"]').val(JSON.stringify(ips))}
for(var paramName in paramDatas){if(paramDatas[paramName]){$('[name="'+paramName+'"]').val(JSON.stringify(paramDatas[paramName]))}}
$('#form_list').submit()})})},init_add:function(){var $_o=this;var formid='#win_form_proxy_add';$(formid+' .proxy-ip-list').attr('data-tpl','<tr>'+$(formid+' .tpl-proxy-ip').html()+'</tr>');$(formid+' .tpl-proxy-ip').remove();$(formid+' .add-proxy-ip').bind('click',function(){$(formid+' .proxy-ip-list tbody').append($(formid+' .proxy-ip-list').attr('data-tpl'))});$(formid).on('click','.op-delete',function(){$(this).parents('tr').eq(0).remove()});$(formid).bind('submit',function(){ajaxOpen({type:'post',dataType:'json',url:$(this).attr('action'),data:$(this).serialize(),success:function(data){if(data.code==1){$_o.reload_iframe('添加成功')}else{toastr.error(data.msg)}}});return!1})},init_batch:function(){var $_o=this;var formid='#win_form_proxy_batch';$(formid+' .format a[data-val]').bind('click',function(){var obj=$('#win_form_proxy_batch input[name="format"]');insertAtCaret(obj,$(this).attr('data-val'))});$(formid+' .btn-test').bind('click',function(){$(formid).find('[name="is_test"]').val(1);ajaxOpen({type:'POST',dataType:'json',url:$(formid).attr('action'),data:$(formid).serialize(),success:function(data){if(data.code==1){$(formid+' .test-result').show();$(formid+' .test-result').find('textarea').val(data.msg)}else{toastr.error(data.msg)}}})});$(formid).bind('submit',function(){$(formid).find('[name="is_test"]').val('');ajaxOpen({type:'POST',dataType:'json',url:$(this).attr('action'),data:$(this).serialize(),success:function(data){if(data.code==1){$_o.reload_iframe('添加成功')}else{toastr.error(data.msg)}},});return!1})},init_groups:function(groups){var $_o=this;var formid='#win_form_proxy_groups';$(formid+' .proxy-group-list').attr('data-tpl','<tr>'+$(formid+' .proxy-group-tpl').html()+'</tr>');$(formid+' .proxy-group-tpl').remove();$(formid+' .proxy-group-add').bind('click',function(){$(formid+' .proxy-group-list tbody').append($(formid+' .proxy-group-list').attr('data-tpl'))});$(formid).on('click','.proxy-group-delete',function(){var prtObj=$(this).parents('tr').eq(0);var groupId=prtObj.find('[name="group_id[]"]').val();confirmRight('确定删除该分组?',function(){ajaxOpen({type:'get',dataType:'json',url:ulink('proxy/delete_group?id='+groupId),success:function(data){if(data.code==1){prtObj.remove();if(data.msg){toastr.success(data.msg)}}}})})});if(isObject(groups)){for(var i in groups){var tpl=$(formid+' .proxy-group-list').attr('data-tpl');tpl=$(tpl);var groupData=groups[i];if(isObject(groupData)){tpl.find('[name="group_id[]"]').val(groupData.id);tpl.find('[name="group_sort[]"]').val(groupData.sort);tpl.find('[name="group_name[]"]').val(groupData.name);if(groupData._ip_num){tpl.find('.proxy-group-ip-num').html(groupData._ip_num+'个IP')}}
$('#form_list').submit()})})},init_add:function(){var $_o=this;var formid='#win_form_proxy_add';$(formid+' .proxy-ip-list').attr('data-tpl','<tr>'+$(formid+' .tpl-proxy-ip').html()+'</tr>');$(formid+' .tpl-proxy-ip').remove();$(formid+' .add-proxy-ip').bind('click',function(){$(formid+' .proxy-ip-list tbody').append($(formid+' .proxy-ip-list').attr('data-tpl'))});$(formid).on('click','.op-delete',function(){$(this).parents('tr').eq(0).remove()});$(formid).bind('submit',function(){ajaxOpen({type:'post',dataType:'json',url:$(this).attr('action'),data:$(this).serialize(),success:function(data){if(data.code==1){$_o.reload_iframe('添加成功')}else{toastr.error(data.msg)}}});return!1})},init_batch:function(){var $_o=this;var formid='#win_form_proxy_batch';$(formid+' .format a[data-val]').bind('click',function(){var obj=$('#win_form_proxy_batch input[name="format"]');globalOp.insertAtCaret(obj,$(this).attr('data-val'))});$(formid+' .btn-test').bind('click',function(){$(formid).find('[name="is_test"]').val(1);ajaxOpen({type:'POST',dataType:'json',url:$(formid).attr('action'),data:$(formid).serialize(),success:function(data){if(data.code==1){$(formid+' .test-result').show();$(formid+' .test-result').find('textarea').val(data.msg)}else{toastr.error(data.msg)}}})});$(formid).bind('submit',function(){$(formid).find('[name="is_test"]').val('');ajaxOpen({type:'POST',dataType:'json',url:$(this).attr('action'),data:$(this).serialize(),success:function(data){if(data.code==1){$_o.reload_iframe('添加成功')}else{toastr.error(data.msg)}},});return!1})},init_groups:function(groups){var $_o=this;var formid='#win_form_proxy_groups';$(formid+' .proxy-group-list').attr('data-tpl','<tr>'+$(formid+' .proxy-group-tpl').html()+'</tr>');$(formid+' .proxy-group-tpl').remove();$(formid+' .proxy-group-add').bind('click',function(){$(formid+' .proxy-group-list tbody').append($(formid+' .proxy-group-list').attr('data-tpl'))});$(formid).on('click','.proxy-group-delete',function(){var prtObj=$(this).parents('tr').eq(0);var groupId=prtObj.find('[name="group_id[]"]').val();confirmRight('确定删除该分组?',function(){ajaxOpen({type:'get',dataType:'json',url:ulink('proxy/delete_group?id='+groupId),success:function(data){if(data.code==1){prtObj.remove();if(data.msg){toastr.success(data.msg)}}}})})});if(isObject(groups)){for(var i in groups){var tpl=$(formid+' .proxy-group-list').attr('data-tpl');tpl=$(tpl);var groupData=groups[i];if(isObject(groupData)){tpl.find('[name="group_id[]"]').val(groupData.id);tpl.find('[name="group_sort[]"]').val(groupData.sort);tpl.find('[name="group_name[]"]').val(groupData.name);if(groupData._ip_num){tpl.find('.proxy-group-ip-num').html(groupData._ip_num+'个IP')}}
$(formid+' .proxy-group-list tbody').append(tpl)}}},}
var proxyClass=new ProxyClass()

View File

@ -8,28 +8,29 @@
|--------------------------------------------------------------------------
*/
'use strict';function ReleaseClass(formid,releid){this.formid='#'+formid;this.releid=releid;this.curFocusResIpt=''}
ReleaseClass.prototype={constructor:ReleaseClass,init:function(){var $_o=this;$($_o.formid).bind('submit',function(){var module=$($_o.formid+' select[name="module"]').val();if(module=='diy'&&$_o.has_diy_editor()){var diyCode=editorCodeIfr('#diy_editor_ifr',{'get_value':1});if(diyCode){$($_o.formid+' [name="diy[code]"]').val(diyCode)}}
var settings=getFormAjaxSettings($(this));settings.data={'_post_data_':settings.data};ajaxOpen(settings);return!1});$($_o.formid+' select[name="module"]').bind('change',function(){var module=$(this).val();$($_o.formid+' .rele-module').hide();$($_o.formid+' .rele-module[module="'+module+'"]').show()});$('#rele_module_dataset #btn_dataset_list').bind('click',function(){windowModal('数据集',ulink('dataset/select?from=release'))});$('#rele_module_dataset #btn_dataset_create').bind('click',function(){confirmRight('确定自动创建数据集?',function(){$($_o.formid+' [name="dataset[auto_create]"]').val(1);$($_o.formid).trigger('submit')})});$('#rele_module_cms .btn-cms-detect').bind('click',function(){$_o.cms_detect()});$('#rele_module_cms .btn-cms-bind').bind('click',function(){$_o.cms_bind()});$('#rele_module_cms').on('change','select[name="cms[app]"]',function(){var cmsApp=$(this).val();$_o.cms_bind({cms:{app:cmsApp}})});$('#cms_list').on('click','li a',function(){var path=$(this).attr('path');if(path){$($_o.formid+' [name="cms[path]"]').val(path);$('#cms_tab a[href="#cms_tab_bind"]').tab('show');$_o.cms_bind()}});inputSelectCustom(null,null,{box:'#rele_module_cms',slt:'select[name^="cms_app[param]"]',ipt:'input[name^="cms_app[custom]"]'},'custom:');$('#db_tab_config .dm-db-charset li span').bind('click',function(){var charset=$(this).attr('data-val');charset=charset?charset:'';$('#db_tab_config [name="db[charset]"]').val(charset)});$('#db_tab_config .btn-db-names').bind('click',function(){$_o.db_connect('db_names')});$('#db_tab_config .btn-db-connect').bind('click',function(){$_o.db_connect()});$('#rele_module_file').on('click','.btn-file-rand-path',function(){var randStr=$_o.rand_str(10);$($_o.formid+' [name="file[path]"]').val(randStr)});$('#rele_module_api').on('click','.btn-api-rand-url',function(){var randStr=$_o.rand_str(10);$($_o.formid+' [name="api[key]"]').val(randStr)});$('#diy_tab').on('click','[data-type]',function(){var type=$(this).attr('data-type');$($_o.formid+' [name="diy[type]"]').val(type);if(type=='code'&&$_o.has_diy_editor()){var diyCode=$($_o.formid+' [name="diy[code]"]').val();diyCode=diyCode?diyCode:'';editorCodeIfr('#diy_editor_ifr',{'set_value':diyCode})}});$('#toapi_tab').on('click','[data-module]',function(){var module=$(this).attr('data-module');$($_o.formid+' [name="toapi[module]"]').val(module)});$('#rele_module_toapi').on('change','[name="toapi[type]"]',function(){if($(this).val()=='post'){$('#rele_module_toapi .toapi-content-type').show()}else{$('#rele_module_toapi .toapi-content-type').hide()}});$('#rele_module_toapi').on('click','.toapi-add-param',function(){$_o.toapi_add_param(null,null)});$('#rele_module_toapi').on('click','.toapi-del-param',function(){$(this).parents('tr').eq(0).remove()});$('#rele_module_toapi').on('click','.toapi-field-txt a[data-val]',function(){insertAtCaret($(this).parents('.toapi-field-txt').eq(0).find('input:text,textarea').eq(0),$(this).attr('data-val'))});inputSelectCustom('#rele_module_toapi [name="toapi[charset]"]','toapi[charset_custom]');inputSelectCustom('#rele_module_toapi [name="toapi[encode]"]','toapi[encode_custom]');$('#rele_module_toapi').on('click','.toapi-add-header',function(){$_o.toapi_add_header(null,null)});$('#rele_module_toapi').on('click','.toapi-del-header',function(){$(this).parents('tr').eq(0).remove()});$('#toapi_url_field').bind('change',function(){var val=$(this).val();$(this).val('');insertAtCaret($('#rele_module_toapi [name="toapi[url]"]'),val)});$('#toapi_app_url_field').bind('change',function(){var val=$(this).val();$(this).val('');insertAtCaret($('#rele_module_toapi [name="toapi[app_url]"]'),val)});$($_o.formid).find('[name="toapi[response][module]"]').bind('change',function(){var module=$(this).val();var resNames=['id','target','desc','error'];for(var i in resNames){var obj=$($_o.formid).find('[name="toapi[response]['+resNames[i]+']"]');var objPh=obj.attr('data-placeholder');if(!module){objPh+=',默认:'+resNames[i]}
obj.attr('placeholder',objPh);$('#toapi_resp_module_help').find('[data-module]').hide();$('#toapi_resp_module_help').find('[data-module="'+module+'"]').show()}});$($_o.formid).find('input[name^="toapi[response]"]').bind('focus',function(){$_o.curFocusResIpt=$(this).attr('name')});$('#toapi_resp_module_help').find('[data-rule-sign]').bind('click',function(){var curName=$_o.curFocusResIpt?$_o.curFocusResIpt:'toapi[response][id]';var ruleSign=$(this).attr('data-rule-sign');if(ruleSign=='sign_wildcard'){ruleInsertSign.wildcard('[name="'+curName+'"]')}else if(ruleSign=='sign_match'){ruleInsertSign.match('[name="'+curName+'"]')}else if(ruleSign=='sign_group'){ruleInsertSign.match('[name="'+curName+'"]',{group:1})}});$('#btn_toapi_app').bind('click',function(){$('#toapi_app_params').html('<div class="loading" style="margin-bottom:20px;"></div>');ajaxOpen({type:'post',url:ulink("release/toapiApp"),data:{'task_id':$($_o.formid+' [name="task_id"]').val(),'app_url':$('#rele_module_toapi [name="toapi[app_url]"]').val()},success:function(data){$('#toapi_app_params').html('');if(dataIsJson(data)){var html=data.data?data.data.html:'';if(html){modal('<b>'+data.msg+'<b>',html)}else{ajaxDataMsg(data)}}else{$('#toapi_app_params').html(data)}},error:function(){$('#toapi_app_params').html('')}})});$('#toapi_tab a[href="#toapi_tab_app"]').bind('click',function(){ajaxOpen({type:'get',url:ulink("release/toapiApp?task_id=_id_",{'_id_':$($_o.formid+' [name="task_id"]').val()}),success:function(data){if(dataIsJson(data)){ajaxDataMsg(data)}else{$('#toapi_app_params').html(data)}}})});$('#btn_rele_test').bind('click',function(){collectorWindow('测试','admin/release/test?id='+$_o.releid,null,{lg:1})})},load:function(data){var $_o=this;if(data.module){$($_o.formid+' select[name="module"]').val(data.module).trigger('change')}
ReleaseClass.prototype={constructor:ReleaseClass,init:function(){var $_o=this;$($_o.formid).bind('submit',function(){var module=$($_o.formid+' select[name="module"]').val();if(module=='diy'&&$_o.has_diy_editor()){var diyCode=globalOp.editorCodeIfr('#diy_editor_ifr',{'get_value':1});if(diyCode){$($_o.formid+' [name="diy[code]"]').val(diyCode)}}
var settings=getFormAjaxSettings($(this));settings.data={'_post_data_':settings.data};ajaxOpen(settings);return!1});$($_o.formid+' select[name="module"]').bind('change',function(){var module=$(this).val();$($_o.formid+' .rele-module').hide();$($_o.formid+' .rele-module[module="'+module+'"]').show()});$('#rele_module_dataset #btn_dataset_list').bind('click',function(){windowModal('数据集',ulink('dataset/select?from=release'))});$('#rele_module_dataset #btn_dataset_create').bind('click',function(){confirmRight('确定自动创建数据集?',function(){$($_o.formid+' [name="dataset[auto_create]"]').val(1);$($_o.formid).trigger('submit')})});$('#rele_module_cms .btn-cms-detect').bind('click',function(){$_o.cms_detect()});$('#rele_module_cms .btn-cms-bind').bind('click',function(){$_o.cms_bind()});$('#rele_module_cms').on('change','select[name="cms[app]"]',function(){var cmsApp=$(this).val();$_o.cms_bind({cms:{app:cmsApp}})});$('#cms_list').on('click','li a',function(){var path=$(this).attr('path');if(path){$($_o.formid+' [name="cms[path]"]').val(path);$('#cms_tab a[href="#cms_tab_bind"]').tab('show');$_o.cms_bind()}});globalOp.inputSelectCustom(null,null,{box:'#rele_module_cms',slt:'select[name^="cms_app[param]"]',ipt:'input[name^="cms_app[custom]"]'},'custom:');$('#db_tab_config .dm-db-charset li span').bind('click',function(){var charset=$(this).attr('data-val');charset=charset?charset:'';$('#db_tab_config [name="db[charset]"]').val(charset)});$('#db_tab_config .btn-db-names').bind('click',function(){$_o.db_connect('db_names')});$('#db_tab_config .btn-db-connect').bind('click',function(){$_o.db_connect()});$('#rele_module_file').on('click','.btn-file-rand-path',function(){var randStr=$_o.rand_str(10);$($_o.formid+' [name="file[path]"]').val(randStr)});$('#rele_module_api').on('click','.btn-api-rand-url',function(){var randStr=$_o.rand_str(10);$($_o.formid+' [name="api[key]"]').val(randStr)});$('#diy_tab').on('click','[data-type]',function(){var type=$(this).attr('data-type');$($_o.formid+' [name="diy[type]"]').val(type);if(type=='code'&&$_o.has_diy_editor()){var diyCode=$($_o.formid+' [name="diy[code]"]').val();diyCode=diyCode?diyCode:'';globalOp.editorCodeIfr('#diy_editor_ifr',{'set_value':diyCode})}});$('#toapi_tab').on('click','[data-module]',function(){var module=$(this).attr('data-module');$($_o.formid+' [name="toapi[module]"]').val(module)});$('#rele_module_toapi').on('change','[name="toapi[type]"]',function(){if($(this).val()=='post'){$('#rele_module_toapi .toapi-content-type').show()}else{$('#rele_module_toapi .toapi-content-type').hide()}});$('#rele_module_toapi').on('click','.toapi-add-param',function(){$_o.toapi_add_param(null,null)});$('#rele_module_toapi').on('click','.toapi-del-param',function(){$(this).parents('tr').eq(0).remove()});$('#rele_module_toapi').on('click','.toapi-field-txt a[data-val]',function(){globalOp.insertAtCaret($(this).parents('.toapi-field-txt').eq(0).find('input:text,textarea').eq(0),$(this).attr('data-val'))});globalOp.inputSelectCustom('#rele_module_toapi [name="toapi[charset]"]','toapi[charset_custom]');globalOp.inputSelectCustom('#rele_module_toapi [name="toapi[encode]"]','toapi[encode_custom]');$('#rele_module_toapi').on('click','.toapi-add-header',function(){$_o.toapi_add_header(null,null)});$('#rele_module_toapi').on('click','.toapi-del-header',function(){$(this).parents('tr').eq(0).remove()});$('#toapi_url_field').bind('change',function(){var val=$(this).val();$(this).val('');globalOp.insertAtCaret($('#rele_module_toapi [name="toapi[url]"]'),val)});$('#toapi_app_url_field').bind('change',function(){var val=$(this).val();$(this).val('');globalOp.insertAtCaret($('#rele_module_toapi [name="toapi[app_url]"]'),val)});$($_o.formid).find('[name="toapi[response][module]"]').bind('change',function(){var module=$(this).val();var resNames=['id','target','desc','error'];for(var i in resNames){var obj=$($_o.formid).find('[name="toapi[response]['+resNames[i]+']"]');var objPh=obj.attr('data-placeholder');if(!module){objPh+=',默认:'+resNames[i]}
obj.attr('placeholder',objPh);$('#toapi_resp_module_help').find('[data-module]').hide();$('#toapi_resp_module_help').find('[data-module="'+module+'"]').show()}});$($_o.formid).find('input[name^="toapi[response]"]').bind('focus',function(){$_o.curFocusResIpt=$(this).attr('name')});$('#toapi_resp_module_help').find('[data-rule-sign]').bind('click',function(){var curName=$_o.curFocusResIpt?$_o.curFocusResIpt:'toapi[response][id]';var ruleSign=$(this).attr('data-rule-sign');if(ruleSign=='sign_wildcard'){ruleInsertSign.wildcard('[name="'+curName+'"]')}else if(ruleSign=='sign_match'){ruleInsertSign.match('[name="'+curName+'"]')}else if(ruleSign=='sign_group'){ruleInsertSign.match('[name="'+curName+'"]',{group:1})}});$('#btn_toapi_app').bind('click',function(){$('#toapi_app_params').html('<div class="loading" style="margin-bottom:20px;"></div>');ajaxOpen({type:'post',url:ulink("release/toapiApp"),data:{'task_id':$($_o.formid+' [name="task_id"]').val(),'app_url':$('#rele_module_toapi [name="toapi[app_url]"]').val()},success:function(data){$('#toapi_app_params').html('');if(dataIsJson(data)){var html=data.data?data.data.html:'';if(html){modal('<b>'+data.msg+'<b>',html)}else{ajaxDataMsg(data)}}else{$('#toapi_app_params').html(data)}},error:function(){$('#toapi_app_params').html('')}})});$('#toapi_tab a[href="#toapi_tab_app"]').bind('click',function(){ajaxOpen({type:'get',url:ulink("release/toapiApp?task_id=_id_",{'_id_':$($_o.formid+' [name="task_id"]').val()}),success:function(data){if(dataIsJson(data)){ajaxDataMsg(data)}else{$('#toapi_app_params').html(data)}}})});$('#btn_rele_test').bind('click',function(){globalOp.collectorWindow('测试','admin/release/test?id='+$_o.releid,null,{lg:1})})},load:function(data){var $_o=this;if(data.module){$($_o.formid+' select[name="module"]').val(data.module).trigger('change')}
if(data.config){if('dataset'==data.module){$_o.dataset_load(data.config.dataset)}else if('cms'==data.module){$_o.cms_bind(data.config);$(document).ready(function(){$('#cms_tab a[href="#cms_tab_bind"]').tab('show')})}else if('db'==data.module){$_o.db_bind(data.config)}else if('file'==data.module){if(data.config.file){$($_o.formid+' [name="file[path]"]').val(data.config.file.path);$($_o.formid+' [name="file[type]"]').each(function(){if($(this).val()==data.config.file.type){$(this).prop('checked',!0)}});$($_o.formid+' [name="file[txt_implode]"]').val(data.config.file.txt_implode);$($_o.formid+' [name="file[max_line]"]').val(toInt(data.config.file.max_line));if(data.config.file.hide_fields){for(var fi in data.config.file.hide_fields){$($_o.formid+' [name="file[hide_fields][]"][value="'+data.config.file.hide_fields[fi]+'"]').prop('checked',!0)}}}}else if('api'==data.module){if(data.config.api){$($_o.formid+' [name="api[key]"]').val(data.config.api.key);$($_o.formid+' [name="api[cache_time]"]').val(data.config.api.cache_time);if(data.config.api.hide_fields){for(var fi in data.config.api.hide_fields){$($_o.formid+' [name="api[hide_fields][]"][value="'+data.config.api.hide_fields[fi]+'"]').prop('checked',!0)}}}}else if('diy'==data.module){if(data.config.diy){$(document).ready(function(){$('#diy_tab a[href="#diy_tab_'+data.config.diy.type+'"]').tab('show').trigger('click');for(var i in data.config.diy){$($_o.formid+' [name="diy['+i+']"]').val(data.config.diy[i])}
if(data.config.diy.app){var appName=data.config.diy.app;if(appName.length>1){appName=appName.substr(0,1).toUpperCase()+appName.substr(1).toLowerCase()}else{appName=appName.toUpperCase()}
$($_o.formid+' [name="diy[app]"]').parent().find('.diy-app-name').text(appName+'.php');$($_o.formid+' [name="diy[app]"]').parent().find('.diy-app-editor').show().find('.btn_diy_editor').attr('href',ulink('develop/editor?type=release&module=diy&app=_app_',{'_app_':appName}))}
if($_o.has_diy_editor()&&data.config.diy.code){editorCodeIfr('#diy_editor_ifr',{'set_value':data.config.diy.code})}})}}else if('toapi'==data.module){var config=data.config.toapi;if(config){$($_o.formid+' [name="toapi[module]"]').val(config.module);$($_o.formid+' [name="toapi[url]"]').val(config.url);$($_o.formid+' [name="toapi[type]"]').val(config.type).trigger('change');$($_o.formid+' [name="toapi[content_type]"]').val(config.content_type);$($_o.formid+' [name="toapi[charset_custom]"]').val(config.charset_custom);$($_o.formid+' [name="toapi[charset]"]').val(config.charset).trigger('change');$($_o.formid+' [name="toapi[encode_custom]"]').val(config.encode_custom);$($_o.formid+' [name="toapi[encode]"]').val(config.encode).trigger('change');if(config.response){for(var i in config.response){$($_o.formid+' [name="toapi[response]['+i+']"]').val(config.response[i])}}
if($_o.has_diy_editor()&&data.config.diy.code){globalOp.editorCodeIfr('#diy_editor_ifr',{'set_value':data.config.diy.code})}})}}else if('toapi'==data.module){var config=data.config.toapi;if(config){$($_o.formid+' [name="toapi[module]"]').val(config.module);$($_o.formid+' [name="toapi[url]"]').val(config.url);$($_o.formid+' [name="toapi[type]"]').val(config.type).trigger('change');$($_o.formid+' [name="toapi[content_type]"]').val(config.content_type);$($_o.formid+' [name="toapi[charset_custom]"]').val(config.charset_custom);$($_o.formid+' [name="toapi[charset]"]').val(config.charset).trigger('change');$($_o.formid+' [name="toapi[encode_custom]"]').val(config.encode_custom);$($_o.formid+' [name="toapi[encode]"]').val(config.encode).trigger('change');if(config.response){for(var i in config.response){$($_o.formid+' [name="toapi[response]['+i+']"]').val(config.response[i])}}
$($_o.formid+' [name="toapi[response][module]"]').trigger('change');if(config.param_name){config.param_val=config.param_val?config.param_val:{};for(var i in config.param_name){var pname=config.param_name[i]?config.param_name[i]:'';var pval=config.param_val[i]?config.param_val[i]:'';$_o.toapi_add_param({name:pname,val:pval},i)}}
if(config.header_name){config.header_val=config.header_val?config.header_val:{};for(var i in config.header_name){var hname=config.header_name[i]?config.header_name[i]:'';var hval=config.header_val[i]?config.header_val[i]:'';$_o.toapi_add_header({name:hname,val:hval},i)}}
$($_o.formid+' [name="toapi[app_url]"]').val(config.app_url);config.interval=toInt(config.interval);config.wait=toInt(config.wait);config.retry=toInt(config.retry);$($_o.formid+' [name="toapi[interval]"]').val(config.interval);$($_o.formid+' [name="toapi[wait]"]').val(config.wait);$($_o.formid+' [name="toapi[retry]"]').val(config.retry);$(document).ready(function(){$('#toapi_tab a[href="#toapi_tab_'+config.module+'"]').tab('show').trigger('click');if(config.interval>0||config.wait>0||config.retry>0){showPanelCollapse('#panel_toapi')}})}}}},dataset_load:function(dsConfig){var $_o=this;dsConfig=isObject(dsConfig)?dsConfig:{};var dsId=toInt(dsConfig.dataset_id);if(dsId>0){ajaxOpen({url:ulink('release/dataset?ds_id='+dsId+'&task_id='+$($_o.formid+' [name="task_id"]').val()),dataType:'html',success:function(html){$('#dataset_config').show();$('#myModal').modal('hide');$('#dataset_config').html(html);$('#dataset_config .dataset-field-txt a[data-val]').bind('click',function(){insertAtCaret($(this).parents('.dataset-field-txt').eq(0).find('input[name^="dataset[fields]"]'),$(this).attr('data-val'))});if(isObject(dsConfig.fields)){for(var i in dsConfig.fields){$('#dataset_config').find('[name="dataset[fields]['+i+']"]').val(dsConfig.fields[i]?dsConfig.fields[i]:'')}}}})}},cms_detect:function(){var $_o=this;$('#cms_list').html('').addClass('loading');ajaxOpen({type:'get',url:ulink("release/cmsDetect"),dataType:'json',success:function(data){$('#cms_list').removeClass('loading');if(data.code==1){var html='<p>点击选择CMS</p>';for(var x in data.data){var list=data.data[x];html+='<label>'+x+'</label><ul>';for(var y in list){html+='<li><a href="javascript:;" path="'+list[y]+'">'+list[y]+'</a></li>'}
$($_o.formid+' [name="toapi[app_url]"]').val(config.app_url);config.interval=toInt(config.interval);config.wait=toInt(config.wait);config.retry=toInt(config.retry);$($_o.formid+' [name="toapi[interval]"]').val(config.interval);$($_o.formid+' [name="toapi[wait]"]').val(config.wait);$($_o.formid+' [name="toapi[retry]"]').val(config.retry);$(document).ready(function(){$('#toapi_tab a[href="#toapi_tab_'+config.module+'"]').tab('show').trigger('click');if(config.interval>0||config.wait>0||config.retry>0){globalOp.showPanelCollapse('#panel_toapi')}})}}}},dataset_load:function(dsConfig){var $_o=this;dsConfig=isObject(dsConfig)?dsConfig:{};var dsId=toInt(dsConfig.dataset_id);if(dsId>0){ajaxOpen({url:ulink('release/dataset?ds_id='+dsId+'&task_id='+$($_o.formid+' [name="task_id"]').val()),dataType:'html',success:function(html){$('#dataset_config').show();$('#myModal').modal('hide');$('#dataset_config').html(html);$('#dataset_config .dataset-field-txt a[data-val]').bind('click',function(){globalOp.insertAtCaret($(this).parents('.dataset-field-txt').eq(0).find('input[name^="dataset[fields]"]'),$(this).attr('data-val'))});if(isObject(dsConfig.fields)){for(var i in dsConfig.fields){$('#dataset_config').find('[name="dataset[fields]['+i+']"]').val(dsConfig.fields[i]?dsConfig.fields[i]:'')}}}})}},cms_detect:function(){var $_o=this;$('#cms_list').html('').addClass('loading');ajaxOpen({type:'get',url:ulink("release/cmsDetect"),dataType:'json',success:function(data){$('#cms_list').removeClass('loading');if(data.code==1){var html='<p>点击选择CMS</p>';for(var x in data.data){var list=data.data[x];html+='<label>'+x+'</label><ul>';for(var y in list){html+='<li><a href="javascript:;" path="'+list[y]+'">'+list[y]+'</a></li>'}
html+='</ul>'}
$('#cms_list').html(html)}else{$('#cms_list').html(data.msg)}}})},cms_bind:function(config){var $_o=this;$('#cms_bind').html('').addClass('loading');var postData=$($_o.formid).serialize();if(config&&config.cms&&config.cms.app){postData='cms[app]='+encodeURIComponent(config.cms.app)+'&'+postData}
ajaxOpen({type:'post',url:ulink("release/cmsBind"),dataType:'html',data:postData,success:function(data,textStatus,request){$('#cms_bind').removeClass('loading').show();if((/application\/json/i).test(request.getResponseHeader('Content-Type'))){data=jQuery.parseJSON(data);$('#cms_bind').html('<b style="color:red;">'+data.msg+'</b>')}else{$('#cms_bind').html(data);if(config&&config.cms_app){if(config.cms_app.param){for(var f in config.cms_app.param){var paramEle=$('#cms_bind').find('[name="cms_app[param]['+f+']"]');if(paramEle.is('select')){paramEle.val(config.cms_app.param[f]).trigger('change')}else if(paramEle.is('input:radio')){$('#cms_bind').find('[name="cms_app[param]['+f+']"][value="'+config.cms_app.param[f]+'"]').prop('checked','checked')}else{paramEle.val(config.cms_app.param[f])}}
if(config.cms_app.custom){for(var f in config.cms_app.custom){$('#cms_bind').find('[name="cms_app[custom]['+f+']"]').val(config.cms_app.custom[f])}}}}}},error:function(XMLHttpRequest,textStatus,errorThrown){$('#cms_bind').removeClass('loading').show();$('#cms_bind').html(XMLHttpRequest.responseText)}})},db_bind:function(config){var $_o=this;$($_o.formid+' select[name="db[type]"]').val(config.db.type);$(document).ready(function(){$('#db_tab a[href="#db_tab_table"]').tab('show');$('#db_tab_table .db-table-list').html('').addClass('loading');ajaxOpen({type:'get',url:ulink("release/dbTables?id=_id_",{_id_:$_o.releid}),timeout:10000,dataType:'json',success:function(data){if(data.code==1){$('#db_tab_table .db-table-list').html(data.msg)}else{$('#db_tab_table .db-table-list').css('color','red').html(data.msg)}},complete:function(XMLHttpRequest,status){$('#db_tab_table .db-table-list').removeClass('loading');if(status=='timeout'){$('#db_tab_table .db-table-list').css('color','red').html('数据库连接超时')}}});$('#db_tab_table .db-table-list').on('click','.btn-db-table-bind',function(){var curTable=$(this).parents('.db-table-list').eq(0).find('.db-table-select').val();$_o.db_table_bind(curTable)});eleExchange('#db_table_bind_list','.db-table-bind-move','[id^="db_table_t_"]');$('#db_table_bind_list').on('click','.db-table-bind-del',function(){var obj=$(this);confirmRight(window.tpl_lang.confirm_delete,function(){obj.parents('[id^="db_table_t_"]').eq(0).remove()})});$('#db_tab_table').on('click','.icon-db-table-bind-tips',function(){confirmRight({msg:'<p><b>采集字段:</b>在“任务»采集器设置»获取内容”中添加</p><p><b>查询:</b>在表的查询操作中可添加查询内容</p><p><b>自增主键:</b>在当前表之前有新增表时会自动显示</p>',yes:'确定',width:400,textAlign:'left'})});$('#db_table_bind_list').on('change','.db-table-bind-op',function(){var prtObj=$(this).parents('[id^="db_table_t_"]').eq(0);prtObj.find('.db-table-bind-where').hide();prtObj.find('.db-table-bind-query').hide();prtObj.find('.db-table-bind-data').hide();prtObj.find('.db-table-bind-data-seq').hide();var val=$(this).val();var showData=!1;if(!val){showData=!0;prtObj.find('.db-table-bind-data').show()}else if(val=='update'){showData=!0;prtObj.find('.db-table-bind-where').show();prtObj.find('.db-table-bind-data').show()}else if(val=='query'){prtObj.find('.db-table-bind-where').show();prtObj.find('.db-table-bind-query').show()}
if(showData){var seqObj=prtObj.find('.db-table-bind-data-seq');if(seqObj.length>0){seqObj.show()}}});$('#db_table_bind_list').on('click','.db-table-bind-signs .btn-db-table-bind-signs',function(){var boxObj=$(this).parents('.db-table-bind-signs').eq(0);if(!boxObj||boxObj.length<=0){return}
var dropdownMenu=boxObj.find('.dropdown-menu');if(dropdownMenu.length>0){dropdownMenu.html('');var key=$(this).parents('[id^="db_table_t_"]').eq(0).attr('data-key');ajaxOpen({type:'POST',dataType:'html',url:ulink('release/dbTableBindSings?table_key=_key_',{'_key_':key}),data:$($_o.formid).serialize(),success:function(html){dropdownMenu.html(html);dropdownMenu.find('a[data-val]').bind('click',function(){insertAtCaret($(this).parents('.db-table-bind-signs').eq(0).find('input[name^="db_tables"]').eq(0),$(this).attr('data-val'))})}})}});$('#db_table_bind_list').on('click','.db-table-bind-where-add',function(){$_o.db_table_bind_where_add(this)});$('#db_table_bind_list').on('click','.db-table-bind-where-del',function(){var curObj=$(this);confirmRight('确定删除?',function(){curObj.parents('tr').eq(0).remove()})});$('#db_table_bind_list').on('click','.db-table-bind-query-add',function(){$_o.db_table_bind_query_add(this)});$('#db_table_bind_list').on('click','.db-table-bind-query-del',function(){var curObj=$(this);confirmRight('确定删除?',function(){curObj.parents('tr').eq(0).remove()})});if(isObject(config.db_tables)&&config.db_tables.length>0){$('#db_tab_table .db-table-binding').addClass('loading');$_o.db_table_bind(null,1)}})},db_table_bind:function(curTable,isDbTables){var $_o=this;curTable=curTable?curTable:'';isDbTables=isDbTables?isDbTables:'';var bindUrl=ulink('release/dbTableBind?id=_id_&table=_tb_&is_db_tables=_dbtb_',{'_id_':$_o.releid,'_tb_':curTable,'_dbtb_':isDbTables});ajaxOpen({type:'get',url:bindUrl,dataType:'html',success:function(data){if(dataIsJson(data)){ajaxDataMsg(data)}else{$('#db_table_bind_list').append(data)}},complete:function(){$('#db_tab_table .db-table-binding').removeClass('loading').hide()}})},db_table_bind_load:function(dbTables){var $_o=this;if(isObject(dbTables)){for(var key in dbTables){var tBoxId='#db_table_t_'+key;var namePre='db_tables['+key+']';var dbTable=dbTables[key];if(isObject(dbTable)){$(tBoxId).find('[name="'+namePre+'[op]').val(dbTable.op).trigger('change');var opTypes=['where','query'];for(var opi in opTypes){var opType=opTypes[opi];if(isObject(dbTable[opType])){for(var i in dbTable[opType]){if(!isObject(dbTable[opType])){dbTable[opType][i]=[]}}
if(config.cms_app.custom){for(var f in config.cms_app.custom){$('#cms_bind').find('[name="cms_app[custom]['+f+']"]').val(config.cms_app.custom[f])}}}}}},error:function(XMLHttpRequest,textStatus,errorThrown){$('#cms_bind').removeClass('loading').show();$('#cms_bind').html(XMLHttpRequest.responseText)}})},db_bind:function(config){var $_o=this;$($_o.formid+' select[name="db[type]"]').val(config.db.type);$(document).ready(function(){$('#db_tab a[href="#db_tab_table"]').tab('show');$('#db_tab_table .db-table-list').html('').addClass('loading');ajaxOpen({type:'get',url:ulink("release/dbTables?id=_id_",{_id_:$_o.releid}),timeout:10000,dataType:'json',success:function(data){if(data.code==1){$('#db_tab_table .db-table-list').html(data.msg)}else{$('#db_tab_table .db-table-list').css('color','red').html(data.msg)}},complete:function(XMLHttpRequest,status){$('#db_tab_table .db-table-list').removeClass('loading');if(status=='timeout'){$('#db_tab_table .db-table-list').css('color','red').html('数据库连接超时')}}});$('#db_tab_table .db-table-list').on('click','.btn-db-table-bind',function(){var curTable=$(this).parents('.db-table-list').eq(0).find('.db-table-select').val();$_o.db_table_bind(curTable)});globalOp.eleExchange('#db_table_bind_list','.db-table-bind-move','[id^="db_table_t_"]');$('#db_table_bind_list').on('click','.db-table-bind-del',function(){var obj=$(this);confirmRight(window.tpl_lang.confirm_delete,function(){obj.parents('[id^="db_table_t_"]').eq(0).remove()})});$('#db_tab_table').on('click','.icon-db-table-bind-tips',function(){confirmRight({msg:'<p><b>采集字段:</b>在“任务»采集器设置»获取内容”中添加</p><p><b>查询:</b>在表的查询操作中可添加查询内容</p><p><b>自增主键:</b>在当前表之前有新增表时会自动显示</p>',yes:'确定',width:400,textAlign:'left'})});$('#db_table_bind_list').on('change','.db-table-bind-op',function(){var prtObj=$(this).parents('[id^="db_table_t_"]').eq(0);prtObj.find('.db-table-bind-query').hide();prtObj.find('.db-table-bind-data').hide();prtObj.find('.db-table-bind-data-seq').hide();var val=$(this).val();var showData=!1;if(!val){showData=!0;prtObj.find('.db-table-bind-data').show()}else if(val=='update'){showData=!0;prtObj.find('.db-table-bind-data').show()}else if(val=='query'){prtObj.find('.db-table-bind-query').show()}
if(showData){var seqObj=prtObj.find('.db-table-bind-data-seq');if(seqObj.length>0){seqObj.show()}}
prtObj.find('.db-table-bind-help').hide();prtObj.find('.db-table-bind-help[data-bind-op="'+val+'"]').show()});$('#db_table_bind_list').on('click','.db-table-bind-signs .btn-db-table-bind-signs',function(){var boxObj=$(this).parents('.db-table-bind-signs').eq(0);if(!boxObj||boxObj.length<=0){return}
var dropdownMenu=boxObj.find('.dropdown-menu');if(dropdownMenu.length>0){dropdownMenu.html('');var key=$(this).parents('[id^="db_table_t_"]').eq(0).attr('data-key');ajaxOpen({type:'POST',dataType:'html',url:ulink('release/dbTableBindSings?table_key=_key_',{'_key_':key}),data:$($_o.formid).serialize(),success:function(html){dropdownMenu.html(html);dropdownMenu.find('a[data-val]').bind('click',function(){globalOp.insertAtCaret($(this).parents('.db-table-bind-signs').eq(0).find('input[name^="db_tables"]').eq(0),$(this).attr('data-val'))})}})}});$('#db_table_bind_list').on('click','.db-table-bind-where-add',function(){$_o.db_table_bind_where_add(this)});$('#db_table_bind_list').on('click','.db-table-bind-where-del',function(){var curObj=$(this);confirmRight('确定删除?',function(){curObj.parents('tr').eq(0).remove()})});$('#db_table_bind_list').on('click','.db-table-bind-query-add',function(){$_o.db_table_bind_query_add(this)});$('#db_table_bind_list').on('click','.db-table-bind-query-del',function(){var curObj=$(this);confirmRight('确定删除?',function(){curObj.parents('tr').eq(0).remove()})});if(isObject(config.db_tables)&&config.db_tables.length>0){$('#db_tab_table .db-table-binding').addClass('loading');$_o.db_table_bind(null,1)}})},db_table_bind:function(curTable,isDbTables){var $_o=this;curTable=curTable?curTable:'';isDbTables=isDbTables?isDbTables:'';var bindUrl=ulink('release/dbTableBind?id=_id_&table=_tb_&is_db_tables=_dbtb_',{'_id_':$_o.releid,'_tb_':curTable,'_dbtb_':isDbTables});ajaxOpen({type:'get',url:bindUrl,dataType:'html',success:function(data){if(dataIsJson(data)){ajaxDataMsg(data)}else{$('#db_table_bind_list').append(data)}},complete:function(){$('#db_tab_table .db-table-binding').removeClass('loading').hide()}})},db_table_bind_load:function(dbTables){var $_o=this;if(isObject(dbTables)){for(var key in dbTables){var tBoxId='#db_table_t_'+key;var namePre='db_tables['+key+']';var dbTable=dbTables[key];if(isObject(dbTable)){$(tBoxId).find('[name="'+namePre+'[op]').val(dbTable.op).trigger('change');var opTypes=['where','query'];for(var opi in opTypes){var opType=opTypes[opi];if(isObject(dbTable[opType])){for(var i in dbTable[opType]){if(!isObject(dbTable[opType])){dbTable[opType][i]=[]}}
for(var i in dbTable[opType].field){var opData={};for(var ii in dbTable[opType]){opData[ii]=dbTable[opType][ii][i]}
$_o.db_table_bind_op_add(opType,key,opData)}}}
if(isObject(dbTable.query)){for(var qk in dbTable.query){$(tBoxId).find('[name="'+namePre+'[field]['+qk+']"]').val(dbTable.query[qk])}}
if(isObject(dbTable.field)){for(var fk in dbTable.field){$(tBoxId).find('[name="'+namePre+'[field]['+fk+']"]').val(dbTable.field[fk])}}
if(isObject(dbTable.sequence)){for(var sk in dbTable.sequence){$(tBoxId).find('[name="'+namePre+'[sequence]['+sk+']"]').val(dbTable.sequence[sk])}}
eleExchange(tBoxId+' .db-table-bind-where','.db-table-bind-where-move','tbody tr')}}}},db_table_bind_where_add:function(curObj,whereData){var key=$(curObj).parents('[id^="db_table_t_"]').eq(0).attr('data-key');this.db_table_bind_op_add('where',key,whereData)},db_table_bind_query_add:function(curObj,queryData){var key=$(curObj).parents('[id^="db_table_t_"]').eq(0).attr('data-key');this.db_table_bind_op_add('query',key,queryData)},db_table_bind_op_add:function(opType,key,opData){if(opType&&key){var boxObj=$('#db_table_bind_list').find('#db_table_t_'+key);if(boxObj.length>0){var opTypeClass='.db-table-bind-'+opType;var tbBox=boxObj.find(opTypeClass);if(tbBox.length>0){var tpl=tbBox.find(opTypeClass+'-tpl').clone();tpl.removeClass('db-table-bind-'+opType+'-tpl');if(isObject(opData)){for(var dk in opData){tpl.find('[data-name="['+opType+']['+dk+'][]"]').val(opData[dk])}}
globalOp.eleExchange(tBoxId+' .db-table-bind-where','.db-table-bind-where-move','tbody tr')}}}},db_table_bind_where_add:function(curObj,whereData){var key=$(curObj).parents('[id^="db_table_t_"]').eq(0).attr('data-key');this.db_table_bind_op_add('where',key,whereData)},db_table_bind_query_add:function(curObj,queryData){var key=$(curObj).parents('[id^="db_table_t_"]').eq(0).attr('data-key');this.db_table_bind_op_add('query',key,queryData)},db_table_bind_op_add:function(opType,key,opData){if(opType&&key){var boxObj=$('#db_table_bind_list').find('#db_table_t_'+key);if(boxObj.length>0){var opTypeClass='.db-table-bind-'+opType;var tbBox=boxObj.find(opTypeClass);if(tbBox.length>0){var tpl=tbBox.find(opTypeClass+'-tpl').clone();tpl.removeClass('db-table-bind-'+opType+'-tpl');if(isObject(opData)){for(var dk in opData){tpl.find('[data-name="['+opType+']['+dk+'][]"]').val(opData[dk])}}
tpl.find('[data-name]').each(function(){$(this).attr('name','db_tables['+key+']'+$(this).attr('data-name'));$(this).removeAttr('data-name')});tbBox.find('tbody').append(tpl)}}}},db_connect:function(op){op=op?op:'';var $_o=this;$('#db_tab_config .rele-db-error').html('').addClass('loading');ajaxOpen({type:'post',url:ulink("release/dbConnect?op="+op),timeout:10000,dataType:'json',data:$($_o.formid).serialize(),success:function(data){if(data.code==1){if(op=='db_names'){modal('选择数据库',data.msg)}else{$('#db_tab_config .rele-db-error').css('color','green').html(data.msg)}}else{toastr.error(data.msg);$('#db_tab_config .rele-db-error').css('color','red').html(data.msg)}},complete:function(XMLHttpRequest,status){$('#db_tab_config .rele-db-error').removeClass('loading');if(status=='timeout'){$('#db_tab_config .rele-db-error').css('color','red').html('数据库连接超时')}}})},toapi_add_param:function(param,index){var $_o=this;var paramTable=$('#rele_module_toapi').find('.toapi-param-table table');if(!paramTable.attr('data-tpl')){var paramTpl=$('#rele_module_toapi').find('.toapi-param-tpl');paramTable.attr('data-tpl',paramTpl.html());paramTpl.remove()}
param=param?param:{};if(!index){index=generateUUID()}
paramTable.find('tbody').append('<tr data-param-id="'+index+'">'+paramTable.attr('data-tpl')+'</tr>');var curTr=paramTable.find('[data-param-id="'+index+'"]');curTr.find('[name="toapi[param_name][]"]').val(param.name?param.name:'');curTr.find('[name="toapi[param_val][]"]').val(param.val?param.val:'')},toapi_add_header:function(header,index){var $_o=this;var headerTable=$('#rele_module_toapi').find('.toapi-header-table table');if(!headerTable.attr('data-tpl')){var headerTpl=$('#rele_module_toapi').find('.toapi-header-tpl');headerTable.attr('data-tpl',headerTpl.html());headerTpl.remove()}

View File

@ -10,12 +10,13 @@
'use strict';function SettingClass(){this.caijiForm='#form_set';this.downImgForm='#form_set';this.downFileForm='#form_set';this.pageRenderForm='#form_set';this.transForm='#form_set';this.siteForm='#form_set';this.emailForm='#form_set';this.storeForm='#form_set'}
SettingClass.prototype={constructor:SettingClass,caiji_init:function(caijiConfig){var $_o=this;caijiConfig=caijiConfig?caijiConfig:{};$($_o.caijiForm+' [name="auto"]').bind('click',function(){if($(this).val()>0){$('#set_caiji_run').show()}else{$('#set_caiji_run').hide()}});$($_o.caijiForm+' [name="run"]').bind('change',function(){$('#set_caiji_run .help-block').hide();$('#set_caiji_run .run-'+$(this).val()).show()});$($_o.caijiForm+' [name="api"]').bind('click',function(){if($(this).val()>0){$('#set_caiji_api').show()}else{$('#set_caiji_api').hide()}});$($_o.caijiForm+' [name="server"]').bind('change',function(){var srvVal=$(this).val();srvVal=srvVal?srvVal:'';$('#set_caiji_server [data-server]').hide();$('#set_caiji_server [data-server="'+srvVal+'"]').show()});$('#btn_test_php').bind('click',function(){ajax_check_userpwd({type:'POST',dataType:'json',url:ulink('setting/test_php'),data:{php:$($_o.caijiForm+' [name="server_php"]').val()},beforeSend:function(){$('#btn_test_php').text('测试中...').attr('disabled',!0)},success:function(data){if(data.code==1){toastr.success(data.msg)}else{toastr.error(data.msg)}},complete:function(){$('#btn_test_php').text('测试').removeAttr('disabled')}})});$('#btn_test_swoole_php').bind('click',function(){ajax_check_userpwd({type:'POST',dataType:'json',url:ulink('setting/test_swoole_php'),data:{php:$($_o.caijiForm+' [name="swoole_php"]').val()},beforeSend:function(){$('#btn_test_swoole_php').text('测试中...').attr('disabled',!0)},success:function(data){if(data.code==1){toastr.success(data.msg)}else{toastr.error(data.msg)}},complete:function(){$('#btn_test_swoole_php').text('测试').removeAttr('disabled')}})});$('#test_swoole_restart button').bind('click',function(){ajax_check_userpwd({type:'POST',dataType:'json',url:ulink('setting/restart_swoole'),beforeSend:function(){$('#test_swoole_restart button').text('重启中...').attr('disabled',!0)},success:function(data){ajaxDataMsg(data)},complete:function(){$('#test_swoole_restart button').text('重启').removeAttr('disabled')}})});$($_o.caijiForm).bind('submit',function(){var formObj=$(this);var settings=getFormAjaxSettings(formObj);settings.complete=function(){formObj.find('button[type="submit"]').removeAttr('disabled')};ajax_check_userpwd(settings);return!1});for(var i in caijiConfig){var obj=$($_o.caijiForm+' [name="'+i+'"]');if(!obj.is('input:radio')){obj.val(caijiConfig[i])}}
$($_o.caijiForm+' [name="robots"][value="'+toInt(caijiConfig.robots)+'"]').prop('checked',!0);$($_o.caijiForm+' [name="auto"][value="'+toInt(caijiConfig.auto)+'"]').trigger("click");$($_o.caijiForm+' [name="run"]').val(caijiConfig.run?caijiConfig.run:'backstage').trigger("change");$($_o.caijiForm+' [name="api"][value="'+toInt(caijiConfig.api)+'"]').trigger("click");$($_o.caijiForm+' [name="server"]').trigger("change");$($_o.caijiForm+' [name="same_url"][value="'+toInt(caijiConfig.same_url)+'"]').prop('checked',!0);$($_o.caijiForm+' [name="same_title"][value="'+toInt(caijiConfig.same_title)+'"]').prop('checked',!0);$($_o.caijiForm+' [name="same_content"][value="'+toInt(caijiConfig.same_content)+'"]').prop('checked',!0);$($_o.caijiForm+' [name="real_time"][value="'+toInt(caijiConfig.real_time)+'"]').prop('checked',!0);if(caijiConfig.server=='swoole'){$('#test_swoole_restart').show()}
ajaxOpen({dataType:'json',url:ulink('setting/caiji_check'),async:!0,success:function(data){data=data.data?data.data:{};if(data.error){if(data.server=='cli'){$('#error_server_php').html(data.error).show()}else if(data.server=='swoole'){$('#error_server_swoole').html(data.error).show()}}}})},down_img_init:function(imgConfig){var $_o=this;imgConfig=imgConfig?imgConfig:{};$($_o.downImgForm+' [name="download_img"]').bind('click',function(){if($(this).val()==1){$('.content-wrapper').removeClass('wrapper-not-enable')}else{$('.content-wrapper').addClass('wrapper-not-enable')}});$($_o.downImgForm+' [name="img_name"]').bind('change',function(){if($(this).val()=='custom'){$('#img_name_custom').show()}else{$('#img_name_custom').hide()}});inputSelectCustom($_o.downImgForm+' [name="charset"]','charset_custom');$($_o.downImgForm).on('click','.name-custom-path a[data-val]',function(){insertAtCaret($('[name="name_custom_path"]'),$(this).attr('data-val'))});$($_o.downImgForm+' #add_img_func').bind('click',function(){$_o.add_img_func(null)});pluginFuncOp.initHtml($_o.downImgForm+' #img_funcs');for(var i in imgConfig){var ele=$($_o.downImgForm).find('[name="'+i+'"]').eq(0);if(ele.length>0&&!ele.is('input:radio')){ele.val(imgConfig[i])}}
ajaxOpen({dataType:'json',url:ulink('setting/caiji_check'),async:!0,success:function(data){data=data.data?data.data:{};if(data.error){if(data.server=='cli'){$('#error_server_php').html(data.error).show()}else if(data.server=='swoole'){$('#error_server_swoole').html(data.error).show()}}}})},down_img_init:function(imgConfig){var $_o=this;imgConfig=imgConfig?imgConfig:{};$($_o.downImgForm+' [name="download_img"]').bind('click',function(){if($(this).val()==1){$('.content-wrapper').removeClass('wrapper-not-enable')}else{$('.content-wrapper').addClass('wrapper-not-enable')}});$($_o.downImgForm+' [name="img_name"]').bind('change',function(){if($(this).val()=='custom'){$('#img_name_custom').show()}else{$('#img_name_custom').hide()}});globalOp.inputSelectCustom($_o.downImgForm+' [name="charset"]','charset_custom');$($_o.downImgForm).on('click','.name-custom-path a[data-val]',function(){globalOp.insertAtCaret($('[name="name_custom_path"]'),$(this).attr('data-val'))});$($_o.downImgForm+' #add_img_func').bind('click',function(){$_o.add_img_func(null)});pluginFuncOp.initHtml($_o.downImgForm+' #img_funcs');for(var i in imgConfig){var ele=$($_o.downImgForm).find('[name="'+i+'"]').eq(0);if(ele.length>0&&!ele.is('input:radio')){ele.val(imgConfig[i])}}
if(imgConfig.img_funcs){for(var i in imgConfig.img_funcs){$_o.add_img_func(imgConfig.img_funcs[i])}}
$($_o.downImgForm+' [name="download_img"][value="'+toInt(imgConfig.download_img)+'"]').trigger("click");$($_o.downImgForm+' [name="data_image"][value="'+toInt(imgConfig.data_image)+'"]').trigger("click");$($_o.downImgForm+' [name="url_real"][value="'+toInt(imgConfig.url_real)+'"]').trigger("click");$($_o.downImgForm+' [name="img_name"]').trigger("change");$($_o.downImgForm+' [name="charset"]').trigger("change");$($_o.downImgForm+' [name="img_watermark"][value="'+toInt(imgConfig.img_watermark)+'"]').trigger("click");if(imgConfig.img_wm_logo){$('#img_wm_logo_show').attr('src',window.site_config.root+imgConfig.img_wm_logo+'?'+(new Date().getTime())).show()}},add_img_func:function(funcData){var $_o=this;pluginFuncOp.addHtml({funcData:funcData,funcName:'img_funcs[{id}][func]',funcParamName:'img_funcs[{id}][func_param]',tplId:'img_tpl_func',listId:'img_funcs',funcId:'img_func_{id}'},'downloadImg')},down_file_init:function(fileConfig){var $_o=this;fileConfig=fileConfig?fileConfig:{};$($_o.downFileForm+' [name="download_file"]').bind('click',function(){if($(this).val()==1){$('.content-wrapper').removeClass('wrapper-not-enable')}else{$('.content-wrapper').addClass('wrapper-not-enable')}});$($_o.downFileForm+' [name="file_name"]').bind('change',function(){if($(this).val()=='custom'){$('#file_name_custom').show()}else{$('#file_name_custom').hide()}});inputSelectCustom($_o.downFileForm+' [name="charset"]','charset_custom');$($_o.downFileForm).on('click','.name-custom-path a[data-val]',function(){insertAtCaret($('[name="name_custom_path"]'),$(this).attr('data-val'))});$($_o.downFileForm+' #add_file_func').bind('click',function(){$_o.add_file_func(null)});pluginFuncOp.initHtml($_o.downFileForm+' #file_funcs');for(var i in fileConfig){var ele=$($_o.downFileForm).find('[name="'+i+'"]').eq(0);if(ele.length>0&&!ele.is('input:radio')){ele.val(fileConfig[i])}}
$($_o.downImgForm+' [name="download_img"][value="'+toInt(imgConfig.download_img)+'"]').trigger("click");$($_o.downImgForm+' [name="data_image"][value="'+toInt(imgConfig.data_image)+'"]').trigger("click");$($_o.downImgForm+' [name="url_real"][value="'+toInt(imgConfig.url_real)+'"]').trigger("click");$($_o.downImgForm+' [name="img_name"]').trigger("change");$($_o.downImgForm+' [name="charset"]').trigger("change");$($_o.downImgForm+' [name="img_watermark"][value="'+toInt(imgConfig.img_watermark)+'"]').trigger("click");if(imgConfig.img_wm_logo){$('#img_wm_logo_show').attr('src',window.site_config.root+imgConfig.img_wm_logo+'?'+(new Date().getTime())).show()}},add_img_func:function(funcData){var $_o=this;pluginFuncOp.addHtml({funcData:funcData,funcName:'img_funcs[{id}][func]',funcParamName:'img_funcs[{id}][func_param]',tplId:'img_tpl_func',listId:'img_funcs',funcId:'img_func_{id}'},'downloadImg')},down_file_init:function(fileConfig){var $_o=this;fileConfig=fileConfig?fileConfig:{};$($_o.downFileForm+' [name="download_file"]').bind('click',function(){if($(this).val()==1){$('.content-wrapper').removeClass('wrapper-not-enable')}else{$('.content-wrapper').addClass('wrapper-not-enable')}});$($_o.downFileForm+' [name="file_name"]').bind('change',function(){if($(this).val()=='custom'){$('#file_name_custom').show()}else{$('#file_name_custom').hide()}});globalOp.inputSelectCustom($_o.downFileForm+' [name="charset"]','charset_custom');$($_o.downFileForm).on('click','.name-custom-path a[data-val]',function(){globalOp.insertAtCaret($('[name="name_custom_path"]'),$(this).attr('data-val'))});$($_o.downFileForm+' #add_file_func').bind('click',function(){$_o.add_file_func(null)});pluginFuncOp.initHtml($_o.downFileForm+' #file_funcs');for(var i in fileConfig){var ele=$($_o.downFileForm).find('[name="'+i+'"]').eq(0);if(ele.length>0&&!ele.is('input:radio')){ele.val(fileConfig[i])}}
if(fileConfig.file_funcs){for(var i in fileConfig.file_funcs){$_o.add_file_func(fileConfig.file_funcs[i])}}
$($_o.downFileForm+' [name="download_file"][value="'+toInt(fileConfig.download_file)+'"]').trigger("click");$($_o.downFileForm+' [name="url_real"][value="'+toInt(fileConfig.url_real)+'"]').trigger("click");$($_o.downFileForm+' [name="file_name"]').trigger("change");$($_o.downFileForm+' [name="charset"]').trigger("change")},add_file_func:function(funcData){var $_o=this;pluginFuncOp.addHtml({funcData:funcData,funcName:'file_funcs[{id}][func]',funcParamName:'file_funcs[{id}][func_param]',tplId:'file_tpl_func',listId:'file_funcs',funcId:'file_func_{id}'},'downloadFile')},page_render_init:function(renderConfig){var $_o=this;renderConfig=renderConfig?renderConfig:{};$($_o.pageRenderForm+' [name="tool"]').bind('change',function(){var tool=$(this).val();$($_o.pageRenderForm+' [id^="render_tool_"]').hide();if(tool){$($_o.pageRenderForm+' #render_tool_'+tool).show()}});$($_o.pageRenderForm+' [name="chrome[server]"]').bind('click',function(){if(!$(this).val()){$($_o.pageRenderForm+' [data-chrome-server=""]').show()}else{$($_o.pageRenderForm+' [data-chrome-server=""]').hide()}});$('#btn_chrome_test').bind('click',function(){ajax_check_userpwd({type:'POST',dataType:'json',url:ulink('setting/chrome_test'),data:$($_o.pageRenderForm).serialize(),beforeSend:function(){$('#btn_chrome_test').text('测试中...').attr('disabled',!0)},success:function(data){if(data.code==1){toastr.success(data.msg)}else{var warning=!1;if(data.msg.indexOf(':WARNING')>-1){warning=!0;if(data.msg.indexOf(':ERROR')>-1){warning=!1}}
if(warning){toastr.warning(data.msg)}else{toastr.error(data.msg)}}},complete:function(){$('#btn_chrome_test').text('测试').removeAttr('disabled')}})});$($_o.pageRenderForm).bind('submit',function(){var formObj=$(this);var settings=getFormAjaxSettings(formObj);settings.complete=function(){formObj.find('button[type="submit"]').removeAttr('disabled')};ajax_check_userpwd(settings);return!1});$('#btn_chrome_clean').bind('click',function(){confirmRight('确定清理?',function(){windowModal('正在清理...',ulink('setting/chrome_clean'))})});$('#btn_chrome_restart').bind('click',function(){confirmRight('确定重启?',function(){windowModal('正在重启...',ulink('setting/chrome_restart'))})});$($_o.pageRenderForm+' [name="tool"]').val(renderConfig.tool).trigger('change');if(renderConfig.chrome){$($_o.pageRenderForm+' [name="chrome[server]"][value="'+renderConfig.chrome.server+'"]').prop('checked','checked').trigger('click')}},translate_init:function(transConfig){var $_o=this;transConfig=transConfig?transConfig:{};$($_o.transForm+' [name="open"]').bind('click',function(){if($(this).val()==1){$('.content-wrapper').removeClass('wrapper-not-enable')}else{$('.content-wrapper').addClass('wrapper-not-enable')}});$($_o.transForm+' [name="api"]').bind('change',function(){$('[id^="api_"]').hide();$('#api_'+$(this).val()).show()});$($_o.transForm+' [name="open"][value="'+toInt(transConfig.open)+'"]').trigger('click');$($_o.transForm+' [name="api"]').val(transConfig.api).trigger("change");$($_o.transForm+' [name="pass_html"][value="'+toInt(transConfig.pass_html)+'"]').trigger('click')},site_init:function(siteConfig){var $_o=this;siteConfig=siteConfig?siteConfig:{};siteConfig.login=siteConfig.login?siteConfig.login:{};$($_o.siteForm+' [name="verifycode"]').bind('click',function(){if($(this).val()==1){$('#verifycode_len').show()}else{$('#verifycode_len').hide()}});$($_o.siteForm+' [name="login[limit]"]').bind('click',function(){if($(this).val()==1){$('#login_limit').show()}else{$('#login_limit').hide()}});$($_o.siteForm+' #btn_timezone').bind('click',function(){var nowTime=new Date();var offset=nowTime.getTimezoneOffset()/60;ajaxOpen({type:'post',url:ulink("setting/site_timezone"),data:{time:nowTime.getTime(),offset:offset},dataType:'json',success:function(data){if(data.code==1){if(data.data&&data.data.timezone){if($($_o.siteForm+' [name="timezone"]').find('option[value="'+data.data.timezone+'"]').length>0){$($_o.siteForm+' [name="timezone"]').val(data.data.timezone)}else{toastr.error('自动调整失败,请手动选择!')}}}else{if(data.msg){toastr.error(data.msg)}}}})});$($_o.siteForm+' [name="verifycode"][value="'+toInt(siteConfig.verifycode)+'"]').prop('checked','checked').trigger('click');$($_o.siteForm+' [name="hidehome"][value="'+toInt(siteConfig.hidehome)+'"]').prop('checked','checked');$($_o.siteForm+' [name="closelog"][value="'+toInt(siteConfig.closelog)+'"]').prop('checked','checked');$($_o.siteForm+' [name="dblong"][value="'+toInt(siteConfig.dblong)+'"]').prop('checked','checked');$($_o.siteForm+' [name="login[limit]"][value="'+toInt(siteConfig.login.limit)+'"]').prop('checked','checked').trigger('click');$($_o.siteForm+' [name="closetrans"][value="'+toInt(siteConfig.closetrans)+'"]').prop('checked','checked');$($_o.siteForm+' [name="timezone"]').val(siteConfig.timezone)},email_init:function(emailConfig){var $_o=this;emailConfig=emailConfig?emailConfig:{};$('#btn_test').bind('click',function(){$($_o.emailForm+' [name="is_test"]').val(1);$($_o.emailForm).submit()});$($_o.emailForm+' button[type="submit"]').bind('click',function(){$($_o.emailForm+' [name="is_test"]').val(0)});$($_o.emailForm).bind('submit',function(){var settings=getFormAjaxSettings($(this));var isTest=$($_o.emailForm+' [name="is_test"]').val();if(isTest>0){$('#btn_test').html('正在测试...');$('#btn_test').attr('disabled',!0);settings.complete=function(){$('#btn_test').html('测试').attr('disabled',!1)}}
$($_o.downFileForm+' [name="download_file"][value="'+toInt(fileConfig.download_file)+'"]').trigger("click");$($_o.downFileForm+' [name="url_real"][value="'+toInt(fileConfig.url_real)+'"]').trigger("click");$($_o.downFileForm+' [name="file_name"]').trigger("change");$($_o.downFileForm+' [name="charset"]').trigger("change")},add_file_func:function(funcData){var $_o=this;pluginFuncOp.addHtml({funcData:funcData,funcName:'file_funcs[{id}][func]',funcParamName:'file_funcs[{id}][func_param]',tplId:'file_tpl_func',listId:'file_funcs',funcId:'file_func_{id}'},'downloadFile')},page_render_init:function(renderConfig){var $_o=this;renderConfig=renderConfig?renderConfig:{};$($_o.pageRenderForm+' [name="tool"]').bind('change',function(){var tool=$(this).val();$($_o.pageRenderForm+' [id^="render_tool_"]').hide();if(tool){$($_o.pageRenderForm+' #render_tool_'+tool).show()}});$($_o.pageRenderForm+' [name="chrome[server]"]').bind('click',function(){var curVal=$(this).val();curVal=curVal?curVal:'';$($_o.pageRenderForm+' [data-chrome-server]').hide();$($_o.pageRenderForm+' [data-chrome-server="'+curVal+'"]').show()});$('#btn_chrome_test').bind('click',function(){ajax_check_userpwd({type:'POST',dataType:'json',url:ulink('setting/chrome_test'),data:$($_o.pageRenderForm).serialize(),beforeSend:function(){$('#btn_chrome_test').text('测试中...').attr('disabled',!0)},success:function(data){if(data.code==1){toastr.success(data.msg)}else{var warning=!1;if(data.msg.indexOf(':WARNING')>-1){warning=!0;if(data.msg.indexOf(':ERROR')>-1){warning=!1}}
if(warning){toastr.warning(data.msg)}else{toastr.error(data.msg)}}},complete:function(){$('#btn_chrome_test').text('测试').removeAttr('disabled')}})});$($_o.pageRenderForm).bind('submit',function(){var formObj=$(this);var settings=getFormAjaxSettings(formObj);settings.complete=function(){formObj.find('button[type="submit"]').removeAttr('disabled')};ajax_check_userpwd(settings);return!1});$($_o.pageRenderForm+' [name="tool"]').val(renderConfig.tool).trigger('change');if(renderConfig.chrome){$($_o.pageRenderForm+' [name="chrome[server]"][value="'+renderConfig.chrome.server+'"]').prop('checked','checked').trigger('click')}
if(renderConfig.tool){ajaxOpen({type:'post',url:ulink("setting/page_render_status"),dataType:'html',success:function(html){$('#page_render_status').html(html);$('#btn_page_render_clear').bind('click',function(){confirmRight('该操作会导致正在渲染的页面丢失,确定清理?',function(){windowModal('正在清理...',ulink('setting/page_render_clear'))})});$('#btn_page_render_restart').bind('click',function(){confirmRight('该操作会导致正在渲染的页面丢失,确定重启?',function(){windowModal('正在重启...',ulink('setting/page_render_restart'))})});$('#btn_page_render_api').bind('click',function(){windowModal('API接口',ulink('setting/page_render_api'))})}})}},translate_init:function(transConfig){var $_o=this;transConfig=transConfig?transConfig:{};$($_o.transForm+' [name="open"]').bind('click',function(){if($(this).val()==1){$('.content-wrapper').removeClass('wrapper-not-enable')}else{$('.content-wrapper').addClass('wrapper-not-enable')}});$($_o.transForm+' [name="api"]').bind('change',function(){$('[id^="api_"]').hide();$('#api_'+$(this).val()).show()});$($_o.transForm+' [name="open"][value="'+toInt(transConfig.open)+'"]').trigger('click');$($_o.transForm+' [name="api"]').val(transConfig.api).trigger("change");$($_o.transForm+' [name="pass_html"][value="'+toInt(transConfig.pass_html)+'"]').trigger('click')},site_init:function(siteConfig){var $_o=this;siteConfig=siteConfig?siteConfig:{};siteConfig.login=siteConfig.login?siteConfig.login:{};$($_o.siteForm+' [name="verifycode"]').bind('click',function(){if($(this).val()==1){$('#verifycode_len').show()}else{$('#verifycode_len').hide()}});$($_o.siteForm+' [name="login[limit]"]').bind('click',function(){if($(this).val()==1){$('#login_limit').show()}else{$('#login_limit').hide()}});$($_o.siteForm+' #btn_timezone').bind('click',function(){var nowTime=new Date();var offset=nowTime.getTimezoneOffset()/60;ajaxOpen({type:'post',url:ulink("setting/site_timezone"),data:{time:nowTime.getTime(),offset:offset},dataType:'json',success:function(data){if(data.code==1){if(data.data&&data.data.timezone){if($($_o.siteForm+' [name="timezone"]').find('option[value="'+data.data.timezone+'"]').length>0){$($_o.siteForm+' [name="timezone"]').val(data.data.timezone)}else{toastr.error('自动调整失败,请手动选择!')}}}else{if(data.msg){toastr.error(data.msg)}}}})});$($_o.siteForm+' [name="verifycode"][value="'+toInt(siteConfig.verifycode)+'"]').prop('checked','checked').trigger('click');$($_o.siteForm+' [name="hidehome"][value="'+toInt(siteConfig.hidehome)+'"]').prop('checked','checked');$($_o.siteForm+' [name="closelog"][value="'+toInt(siteConfig.closelog)+'"]').prop('checked','checked');$($_o.siteForm+' [name="dblong"][value="'+toInt(siteConfig.dblong)+'"]').prop('checked','checked');$($_o.siteForm+' [name="login[limit]"][value="'+toInt(siteConfig.login.limit)+'"]').prop('checked','checked').trigger('click');$($_o.siteForm+' [name="closetrans"][value="'+toInt(siteConfig.closetrans)+'"]').prop('checked','checked');$($_o.siteForm+' [name="timezone"]').val(siteConfig.timezone)},email_init:function(emailConfig){var $_o=this;emailConfig=emailConfig?emailConfig:{};$('#btn_test').bind('click',function(){$($_o.emailForm+' [name="is_test"]').val(1);$($_o.emailForm).submit()});$($_o.emailForm+' button[type="submit"]').bind('click',function(){$($_o.emailForm+' [name="is_test"]').val(0)});$($_o.emailForm).bind('submit',function(){var settings=getFormAjaxSettings($(this));var isTest=$($_o.emailForm+' [name="is_test"]').val();if(isTest>0){$('#btn_test').html('正在测试...');$('#btn_test').attr('disabled',!0);settings.complete=function(){$('#btn_test').html('测试').attr('disabled',!1)}}
ajaxOpen(settings);return!1});$($_o.emailForm+' [name="caiji[open]"]').bind('click',function(){if($(this).val()==1){$('#caiji_open').show()}else{$('#caiji_open').hide()}});$($_o.emailForm+' [name="type"][value="'+emailConfig.type+'"]').prop('checked','checked');var caiji=emailConfig.caiji;if(caiji){$($_o.emailForm+' [name="caiji[open]"][value="'+toInt(caiji.open)+'"]').prop('checked',!0).trigger('click');$($_o.emailForm+' [name="caiji[is_auto]"][value="'+toInt(caiji.is_auto)+'"]').prop('checked',!0);$($_o.emailForm+' [name="caiji[failed_interval]"]').val(toInt(caiji.failed_interval));$($_o.emailForm+' [name="caiji[failed_num]"]').val(toInt(caiji.failed_num));$($_o.emailForm+' [name="caiji[report_interval]"]').val(toInt(caiji.report_interval));$($_o.emailForm+' [name="caiji[email]"]').val(caiji.email)}},store_init:function(storeConfig){var $_o=this;storeConfig=storeConfig?storeConfig:{};$($_o.storeForm).bind('submit',function(){var obj=$(this);ajaxOpen({type:'post',url:obj.attr('action'),dataType:'json',data:obj.serialize(),success:function(data){if(data.code==1){ajaxDataMsg(data)}else{if(data.msg){toastr.error(data.msg)}
var data=data.data;if(data&&data.same_as_pwd){confirmRight(data.same_as_pwd,function(){obj.find('[name="same_as_pwd"]').val(1);obj.trigger('submit')})}}}});return!1});$('#provider_authkeys_iframe').bind('load',function(){var mainheight=$(this).contents().find('body').height()+1;$(this).height(mainheight)})}}
var settingClass=new SettingClass()

View File

@ -10,7 +10,7 @@
'use strict';function StoreClass(){}
StoreClass.prototype={constructor:StoreClass,init_store:function(info){var $_o=this;info=info?info:{};if(info.notSafe){confirmRight(info.notSafe,function(){window.location.href=info.url},function(){window.location.href=ulink('admin/provider/list')})}else{window.location.href=info.url}},init_download:function(downloadData){var $_o=this;downloadData=downloadData?downloadData:{};var installFunc=function(){$_o.install(downloadData.provider_id,downloadData.addon_cat,downloadData.addon_id,null)}
if(downloadData.exist_addon){var msg='';if(downloadData.update_addon){msg='确定更新'+downloadData.cat_name+''}else{msg='存在'+downloadData.cat_name+',是否覆盖?'}
confirmRight(msg,function(){installFunc()},function(){toastr.warning('已取消')})}else{installFunc()}},install:function(provId,addonCat,addonId,params){var $_o=this;params=params?params:{};var url='store/install?provider_id=_provid_&addon_cat=_cat_&addon_id=_id_&'+urlUsertoken();var urlParams={'_provid_':provId,'_cat_':addonCat,'_id_':addonId};if(addonCat=='app'){if(params.block_no){url+='&block_no='+params.block_no}}else{$('#down_percentage').text('');$('#down_progress_bar').css('width','30%')}
confirmRight(msg,function(){installFunc()},function(){toastr.warning('已取消')})}else{installFunc()}},install:function(provId,addonCat,addonId,params){var $_o=this;params=params?params:{};var url='store/install?provider_id=_provid_&addon_cat=_cat_&addon_id=_id_&'+globalOp.urlUsertoken();var urlParams={'_provid_':provId,'_cat_':addonCat,'_id_':addonId};if(addonCat=='app'){if(params.block_no){url+='&block_no='+params.block_no}}else{$('#down_percentage').text('');$('#down_progress_bar').css('width','30%')}
url=ulink(url,urlParams);ajaxOpen({type:'get',dataType:'json',url:url,success:function(data){if(data.code==1){if(addonCat=='app'){var dataData=data.data;dataData=dataData?dataData:{};if(dataData.next_block_no>0){var per=parseFloat(dataData.next_block_no/dataData.blocks)*100;per=parseInt(per);$('#down_progress_bar').css('width',per+'%');$('#down_percentage').text(per+'%');$_o.install(provId,addonCat,addonId,{'block_no':dataData.next_block_no})}else{$('#down_progress_bar').css('width','100%');ajaxDataMsg(data)}}else{$('#down_progress_bar').css('width','100%');if(addonCat=='app'){$('#down_percentage').text('100%')}
ajaxDataMsg(data)}}else{toastr.error(data.msg)}}})}}
var storeClass=new StoreClass()

View File

@ -11,16 +11,16 @@
if(val>0){$('#config_task_auto_tips').show()}else{$('#config_task_auto_tips').hide()}});$('select[id^="task_timer_"]').bind('change',function(){var name=$(this).attr('data-name');if(name){var val=$(this).val();val=val?val.join(','):'';$('#form_item [name="'+name+'"]').val(val)}});$('#form_item .btn-rand-single-key').bind('click',function(){var chars='ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';  var maxPos=chars.length;  var str='';  for(var i=0;i<10;i++){    str+=chars.charAt(Math.floor(Math.random()*maxPos));  }
$('#form_item [name="config[single][key]"]').val(str)});$('#form_item [name="config[proxy]"]').bind('click',function(){var open=!1;var val=$(this).val();if(val=='y'){open=!0}else if($(this).attr('data-global')){open=!0}
if(open){$('#config_proxy').removeClass('box-not-enable')}else{$('#config_proxy').addClass('box-not-enable')}});var downFunc=function(isImg){var type=isImg?'img':'file';$('#form_item [name="config[download_'+type+']"]').bind('click',function(){var open=!1;var val=$(this).val();if(val=='y'){open=!0}else if($(this).attr('data-global')){open=!0}
if(open){$('#config_download_'+type).removeClass('box-not-enable')}else{$('#config_download_'+type).addClass('box-not-enable')}});$('#form_item [name="config['+type+'_name]"]').bind('change',function(){var val=$(this).val();if(val=='custom'){$('#config_'+type+'_name_custom').show()}else{$('#config_'+type+'_name_custom').hide()}});var nameType=isImg?'name':'file';$('#config_'+type+'_name_custom').on('click','.'+nameType+'-custom-path a[data-val]',function(){insertAtCaret($('[name="config['+nameType+'_custom_path]"]'),$(this).attr('data-val'))});$('#config_'+type+'_name_custom').on('click','.'+nameType+'-custom-name a[data-val]',function(){insertAtCaret($('[name="config['+nameType+'_custom_name]"]'),$(this).attr('data-val'))});$('#form_item [name="config['+type+'_funcs_open]"]').bind('click',function(){if($(this).val()=='n'){$('#config_'+type+'_funcs_open').hide()}else{$('#config_'+type+'_funcs_open').show()}});$('#form_item #add_config_'+type+'_func').bind('click',function(){if(isImg){taskOpClass.add_config_img_func(null)}else{taskOpClass.add_config_file_func(null)}});pluginFuncOp.initHtml('#config_'+type+'_funcs')};downFunc(!0);downFunc(!1);$('#form_item [name="config[img_watermark]"]').bind('click',function(){var open=!1;var val=$(this).val();if(val=='y'){open=!0}else if($(this).attr('data-global')){open=!0}
if(open){$('#config_download_'+type).removeClass('box-not-enable')}else{$('#config_download_'+type).addClass('box-not-enable')}});$('#form_item [name="config['+type+'_name]"]').bind('change',function(){var val=$(this).val();if(val=='custom'){$('#config_'+type+'_name_custom').show()}else{$('#config_'+type+'_name_custom').hide()}});var nameType=isImg?'name':'file';$('#config_'+type+'_name_custom').on('click','.'+nameType+'-custom-path a[data-val]',function(){globalOp.insertAtCaret($('[name="config['+nameType+'_custom_path]"]'),$(this).attr('data-val'))});$('#config_'+type+'_name_custom').on('click','.'+nameType+'-custom-name a[data-val]',function(){globalOp.insertAtCaret($('[name="config['+nameType+'_custom_name]"]'),$(this).attr('data-val'))});$('#form_item [name="config['+type+'_funcs_open]"]').bind('click',function(){if($(this).val()=='n'){$('#config_'+type+'_funcs_open').hide()}else{$('#config_'+type+'_funcs_open').show()}});$('#form_item #add_config_'+type+'_func').bind('click',function(){if(isImg){taskOpClass.add_config_img_func(null)}else{taskOpClass.add_config_file_func(null)}});pluginFuncOp.initHtml('#config_'+type+'_funcs')};downFunc(!0);downFunc(!1);$('#form_item [name="config[img_watermark]"]').bind('click',function(){var open=!1;var val=$(this).val();if(val=='y'){open=!0}else if($(this).attr('data-global')){open=!0}
if(open){$('#config_img_watermark').show()}else{$('#config_img_watermark').hide()}});$('#img_wm_logo_show a').bind('click',function(){var obj=$(this);confirmRight('删除后恢复使用全局设置logo是否继续',function(){$('#form_item [name="config[img_wm_logo]"]').val('');taskOpClass.show_img_wm_logo()})})},task_load:function(taskData,fieldList){taskOpClass.task_init();$('#form_item').find('[name^="config"]').each(function(){if($(this).is('input:radio')){if(!$(this).val()){$(this).prop('checked',!0).trigger('click')}}else if($(this).is('select')){$(this).val('').trigger('change')}});if(taskData){$('#form_item select[name="tg_id"]').val(toInt(taskData.tg_id));$('#form_item select[name="module"]').val(taskData.module);$('#form_item select[name="auto"]').val(toInt(taskData.auto)).trigger('change');var task_timer=taskData._task_timer;if(task_timer){var timerNames=['month','day','hour','minute'];for(var i in timerNames){var timerName=timerNames[i];var timerData=task_timer[timerName];if(!timerData||typeof(timerData)!='object'){timerData=[]}
if(timerData.length>0){$('#form_item [name="task_timer['+timerName+']"]').val(timerData.join(','));for(var ii in timerData){$('#task_timer_'+timerName).find('option[value="'+timerData[ii]+'"]').prop('selected','selected')}}else{$('#task_timer_'+timerName).find('option[value=""]').prop('selected','selected')}}}
var task_config=taskData.config;var showConfig=!1;if(task_config){var otherConfig=task_config.other;var singleConfig=task_config.single;delete task_config.other;delete task_config.single;if(otherConfig){$('#form_item').find('[name="config[other][timer_again]"][value="'+toInt(otherConfig.timer_again)+'"]').prop('checked',!0)}
if(singleConfig){singleConfig.open=toInt(singleConfig.open);$('#form_item').find('[name="config[single][open]"][value="'+singleConfig.open+'"]').prop('checked',!0);$('#form_item').find('[name="config[single][always]"][value="'+toInt(singleConfig.always)+'"]').prop('checked',!0);$('#form_item').find('[name="config[single][key]"]').val(singleConfig.key);if(singleConfig.open>0){showPanelCollapse('#task_single')}}
if(singleConfig){singleConfig.open=toInt(singleConfig.open);$('#form_item').find('[name="config[single][open]"][value="'+singleConfig.open+'"]').prop('checked',!0);$('#form_item').find('[name="config[single][always]"][value="'+toInt(singleConfig.always)+'"]').prop('checked',!0);$('#form_item').find('[name="config[single][key]"]').val(singleConfig.key);if(singleConfig.open>0){globalOp.showPanelCollapse('#task_single')}}
for(var i in task_config){if((isObject(task_config[i])&&task_config[i].length>0)||(!isObject(task_config[i])&&task_config[i])){showConfig=!0;break}}
var imgFuncs=isObject(task_config.img_funcs)?task_config.img_funcs:[];var fileFuncs=isObject(task_config.file_funcs)?task_config.file_funcs:[];for(var i in task_config){var ele=$('#form_item').find('[name="config['+i+']"]').eq(0);if(ele.length>0){if(ele.is('input:radio')){$('#form_item').find('[name="config['+i+']"][value="'+task_config[i]+'"]').prop('checked',!0).trigger('click')}else{ele.val(task_config[i]);if(ele.is('select')){ele.trigger('change')}}}}
for(var i in imgFuncs){taskOpClass.add_config_img_func(imgFuncs[i])}
for(var i in fileFuncs){taskOpClass.add_config_file_func(fileFuncs[i])}}
if(taskData._show_config||showConfig){showPanelCollapse('#task_config')}
if(taskData._show_config||showConfig){globalOp.showPanelCollapse('#task_config')}
if(fieldList&&fieldList.length>0){$('#config_img_name_custom .name-custom-path-fields').html('');$('#config_img_name_custom .name-custom-name-fields').html('');$('#config_file_name_custom .file-custom-path-fields').html('');$('#config_file_name_custom .file-custom-name-fields').html('');for(var i in fieldList){var fieldHtml='[字段:'+fieldList[i]+']';fieldHtml='<li><a href="javascript:;" data-val="'+fieldHtml+'">'+fieldHtml+'</a></li>';$('#config_img_name_custom .name-custom-path-fields').append(fieldHtml);$('#config_img_name_custom .name-custom-name-fields').append(fieldHtml);$('#config_file_name_custom .file-custom-path-fields').append(fieldHtml);$('#config_file_name_custom .file-custom-name-fields').append(fieldHtml)}}}
taskOpClass.show_img_wm_logo()},show_img_wm_logo:function(){var isGlobal=!1;var imgWmLogo=$('#form_item [name="config[img_wm_logo]"]').val();if(!imgWmLogo){isGlobal=!0;imgWmLogo=$('#img_wm_logo_show').attr('data-global')}
$('#img_wm_logo_show').hide();var imgObj=$('#img_wm_logo_show img');imgObj.attr('src','');if(imgWmLogo){imgWmLogo=window.site_config.root+imgWmLogo;imgObj.attr('src',imgWmLogo+'?'+(new Date().getTime()));if(isGlobal){$('#img_wm_logo_show p.help-block').show();$('#img_wm_logo_show a.glyphicon-remove').hide()}else{$('#img_wm_logo_show p.help-block').hide();$('#img_wm_logo_show a.glyphicon-remove').show()}

View File

@ -8,7 +8,7 @@
|--------------------------------------------------------------------------
*/
'use strict';var tasksOpClass={get_task_id:function(obj){var taskId=$(obj).parents('tr[data-task-id]').eq(0).attr('data-task-id');taskId=taskId?taskId:0;return taskId},init_common:function(){$('table.datatable').on('click','.delete',function(){var obj=$(this);var url=ulink('task/op?op=delete&id=_id_',{'_id_':tasksOpClass.get_task_id(obj)});confirmRight(window.tpl_lang.confirm_delete,function(){ajaxOpen({type:"GET",url:url,dataType:"json",success:function(data){data.code==1?toastr.success(data.msg):toastr.error(data.msg);if(data.code==1){obj.parents('tr').eq(0).remove()}}})})});$('table.datatable').on('click','.auto',function(){var auto=1;var tips=[window.tpl_lang.task_auto_1,'green'];var val=$(this).attr('data-val');val=toInt(val);if(val!=0){auto=0;tips=[window.tpl_lang.task_auto_0,'red']}
var taskid=tasksOpClass.get_task_id(this);if(taskid>0){var curObj=$(this);var url=ulink('task/op?op=auto&auto=_auto_&id=_id_',{'_auto_':auto,'_id_':taskid});ajaxOpen({type:'GET',url:url,success:function(data){if(data.code==1){curObj.attr('data-val',auto);curObj.prop('title','');curObj.html(tips[0]);curObj.css('color',tips[1])}},dataType:'json'})}});var loadedFunc=function(){$('#myModal .modal-footer .close').html('关闭采集').prop('title','关闭并结束任务').addClass('btn btn-primary').removeClass('close');var btnBackstage=$('<button type="button" class="btn btn-default btn-backstage" data-dismiss="modal" title="关闭并在后台继续运行">后台运行</button>');btnBackstage.bind('click',function(){collectorEchoMsg.close_non_stop=!0});$('#myModal .modal-footer').prepend(btnBackstage)};$('table.datatable').on('click','.caiji',function(){var taskid=tasksOpClass.get_task_id(this);collectorWindow('任务采集','admin/task/collect?id=_id_',{'_id_':taskid},{loaded_func:loadedFunc,lg:1})});$('table.datatable').on('click','.caiji-batch',function(){var taskids=[];$('input[name="batch[]"]:checked').each(function(){taskids.push($(this).val())});collectorWindow('批量采集','admin/task/collectBatch?ids=_ids_',{'_ids_':taskids.join(',')},{loaded_func:loadedFunc,lg:1})});$('table.datatable').on('click','.houtai',function(){var taskid=tasksOpClass.get_task_id(this);tasksOpClass.backstage_collect(taskid)});$('table.datatable').on('click','.houtai-batch',function(){var taskids=[];$('input[name="batch[]"]:checked').each(function(){taskids.push($(this).val())});tasksOpClass.backstage_collect(taskids)});$('table.datatable thead th[data-order]').bind('click',function(){var order=$(this).attr('data-order');if(!order){return!1}
var taskid=tasksOpClass.get_task_id(this);if(taskid>0){var curObj=$(this);var url=ulink('task/op?op=auto&auto=_auto_&id=_id_',{'_auto_':auto,'_id_':taskid});ajaxOpen({type:'GET',url:url,success:function(data){if(data.code==1){curObj.attr('data-val',auto);curObj.prop('title','');curObj.html(tips[0]);curObj.css('color',tips[1])}},dataType:'json'})}});var loadedFunc=function(){$('#myModal .modal-footer .close').html('关闭采集').prop('title','关闭并结束任务').addClass('btn btn-primary').removeClass('close');var btnBackstage=$('<button type="button" class="btn btn-default btn-backstage" data-dismiss="modal" title="关闭并在后台继续运行">后台运行</button>');btnBackstage.bind('click',function(){collectorEchoMsg.close_non_stop=!0});$('#myModal .modal-footer').prepend(btnBackstage)};$('table.datatable').on('click','.caiji',function(){var taskid=tasksOpClass.get_task_id(this);globalOp.collectorWindow('任务采集','admin/task/collect?id=_id_',{'_id_':taskid},{loaded_func:loadedFunc,lg:1})});$('table.datatable').on('click','.caiji-batch',function(){var taskids=[];$('input[name="batch[]"]:checked').each(function(){taskids.push($(this).val())});globalOp.collectorWindow('批量采集','admin/task/collectBatch?ids=_ids_',{'_ids_':taskids.join(',')},{loaded_func:loadedFunc,lg:1})});$('table.datatable').on('click','.houtai',function(){var taskid=tasksOpClass.get_task_id(this);tasksOpClass.backstage_collect(taskid)});$('table.datatable').on('click','.houtai-batch',function(){var taskids=[];$('input[name="batch[]"]:checked').each(function(){taskids.push($(this).val())});tasksOpClass.backstage_collect(taskids)});$('table.datatable thead th[data-order]').bind('click',function(){var order=$(this).attr('data-order');if(!order){return!1}
var className=$(this).prop('class');var sort='desc';if(className=='sorting_desc'){sort='asc'}
window.location.href=ulink('task/list?show=list&order='+order+'&sort='+sort);return!1});this.task_collected_num()},task_collected_num:function(){var taskIds=[];$('tr[data-task-id]').each(function(){taskIds.push($(this).attr('data-task-id'))});if(taskIds.length>0){ajaxOpen({type:'POST',url:ulink('task/taskCollectedNum'),data:{'task_ids':taskIds},success:function(data){if(data.code==1){data=data.data;if(isObject(data)){for(var i in data){var num=data[i];if(isObject(num)){var trObj=$('tr[data-task-id="'+i+'"]');trObj.find('.today-num').text(num.today);trObj.find('.total-num').text(num.total)}}}}}})}},init_folder:function(openedTgIds){tasksOpClass.init_common();$('#task_list_folder').on('click','.taskgroup',function(){tasksOpClass.open_folder($(this).parents('tr').eq(0).attr('data-tgid'))});tasksOpClass.open_folder('0',function(){if(isObject(openedTgIds)){for(var i in openedTgIds){tasksOpClass.open_folder(openedTgIds[i])}}})},open_folder:function(tgid,successFunc){var $_o=this;var trBox=$('#task_list_folder').find('tr[data-tgid="'+tgid+'"]').eq(0);var tgObj=trBox.find('.taskgroup');var tgLevel=trBox.attr('data-level');var loadingImg='<div class="'+(tgLevel>0?'loading-sm':'loading')+'"></div>';var opened=tgObj.hasClass('taskgroup-opened')?true:!1;var childs=$('#task_list_folder tr[data-parent-tgid="'+tgid+'"]');childs.css('display',(opened?'none':'table-row'));childs.each(function(){var cTgid=$(this).attr('data-tgid');var cOpened=$(this).hasClass('taskgroup-opened')?true:!1;if(cTgid){if(opened){$('#task_list_folder tr[data-parent-tgid="'+cTgid+'"]').css('display','none')}else{$('#task_list_folder tr[data-parent-tgid="'+cTgid+'"]').css('display',cOpened?'table-row':'none')}}});if(opened){tgObj.removeClass('taskgroup-opened');ajaxOpen({type:"GET",url:ulink('task/tgClose?tg_id=_tgid_',{'_tgid_':tgid}),dataType:"json",success:function(data){}})}else{tgObj.addClass('taskgroup-opened');if(trBox.attr('data-setted')!=1){tgObj.parents('td').eq(0).append(loadingImg);ajaxOpen({type:"GET",url:ulink('task/tgOpen?tg_id=_tgid_',{'_tgid_':tgid}),dataType:"json",success:function(data){if(tgLevel>0){tgObj.siblings('.loading-sm').remove()}else{trBox.hide()}
tgLevel=parseInt(tgLevel);var leftSpace=tgLevel>0?('padding-left:'+tgLevel*25+'px;'):'';var html='';if(data.code==1){if(isNull(data.data)){html=null}else{var html='';if(data.data.tgList){var datalist=data.data.tgList;for(var i in datalist){html+='<tr data-level="'+(tgLevel+1)+'" data-parent-tgid="'+tgid+'" data-tgid="'+datalist[i].id+'"><td style="'+leftSpace+'"><a href="javascript:;" class="taskgroup"> <span class="glyphicon icon-folder-pre"></span> <span class="glyphicon icon-folder"></span> '+datalist[i].name+' </a></td><td colspan="6"></td></tr>'}}

View File

@ -8,7 +8,7 @@
|--------------------------------------------------------------------------
*/
'use strict';function ToolJsonTree(){this.treeId=''}
ToolJsonTree.prototype={constructor:ToolJsonTree,load:function(data){var $_o=this;if(dataIsJson(data)){$($_o.treeId).html('<div class="tool-json-tree"></div>');$($_o.treeId).off('click','[data-tree-visualize]').on('click','[data-tree-visualize]',function(){var objId='#'+$(this).attr('data-tree-visualize');visualizeData($(objId).val())});data=JSON.parse(data);if(data){var html='<ul>';for(var i in data){html+=$_o.node(i,data[i])}
ToolJsonTree.prototype={constructor:ToolJsonTree,load:function(data){var $_o=this;if(dataIsJson(data)){$($_o.treeId).html('<div class="tool-json-tree"></div>');$($_o.treeId).off('click','[data-tree-visualize]').on('click','[data-tree-visualize]',function(){var objId='#'+$(this).attr('data-tree-visualize');globalOp.visualizeData($(objId).val())});data=JSON.parse(data);if(data){var html='<ul>';for(var i in data){html+=$_o.node(i,data[i])}
html+='</ul>';$($_o.treeId+' .tool-json-tree').html(html)}}else{$($_o.treeId).html('未获取到JSON数组')}
$($_o.treeId).on('click','.tree',function(){if($(this).hasClass('glyphicon-triangle-bottom')){$(this).removeClass('glyphicon-triangle-bottom');$(this).addClass('glyphicon-triangle-right');var hasSub=!1;$(this).siblings('ul').children('li').each(function(){var subTree=$(this).find('.tree').eq(0);if(subTree.length>0){subTree.removeClass('glyphicon-triangle-bottom').addClass('glyphicon-triangle-right').siblings('ul').hide();hasSub=!0}});$(this).siblings('ul').hide()}else{$(this).removeClass('glyphicon-triangle-right');$(this).addClass('glyphicon-triangle-bottom');$(this).siblings('ul').show();$(this).siblings('ul').children('li').each(function(){$(this).find('.tree').eq(0).removeClass('glyphicon-triangle-right').addClass('glyphicon-triangle-bottom').siblings('ul').show()})}})},node:function(node,list){var $_o=this;var html='<li>';var isList=!1;if(list){if(typeof(list)=='object'&&!$.isEmptyObject(list)){isList=!0}}
if(isList){html+='<span class="glyphicon glyphicon-triangle-bottom tree"></span><span class="node">'+node+'</span><ul>';for(var i in list){html+=$_o.node(i,list[i])}

File diff suppressed because one or more lines are too long

View File

@ -277,4 +277,57 @@ class Api extends CollectController{
}
return json($updateResult);
}
/*页面渲染接口*/
public function page_renderAction(){
$data=\skycaiji\admin\model\CacheModel::getInstance()->getCache('page_render_api_key','data');
if(empty($data['open'])){
$this->jsonSend('接口未开启');
}else{
if($data['key']){
$key=input('key','');
if(md5($data['key'])!=$key){
$this->jsonSend('密钥错误');
}
}
$op=input('op','');
if($op=='clear'){
\util\ChromeSocket::config_clear();
$this->jsonSend('已清理渲染工具缓存',array(),1);
}elseif($op=='restart'){
$error=\util\ChromeSocket::config_restart();
if($error){
$this->jsonSend($error);
}else{
$this->jsonSend('已重启渲染工具',array(),1);
}
}elseif($op=='list'){
$config=model('Config')->getConfig('page_render','data');
$chromeSocket=\util\ChromeSocket::config_init($config);
$tabs=$chromeSocket?$chromeSocket->getTabs():null;
init_array($tabs);
$this->jsonSend('',$tabs,1);
}elseif($op=='close'){
$config=model('Config')->getConfig('page_render','data');
$chromeSocket=\util\ChromeSocket::config_init($config);
if($chromeSocket){
$id=input('id','');
if($id){
$chromeSocket->closeTab($id);
$this->jsonSend('已关闭渲染页面:'.$id,array(),1);
}else{
$this->jsonSend('请传入渲染页面id');
}
}else{
$this->jsonSend('渲染工具未启动');
}
}else{
$this->jsonSend('无效操作');
}
}
}
}

View File

@ -72,9 +72,11 @@ class BaseController extends \skycaiji\common\controller\BaseController{
$this->error('密码错误','',array('_check_pwd_'=>true));
}
if(input('_check_skip_')){
$checkSkip=input('_check_skip_/d',0);
if($checkSkip>0){
cookie('check_userpwd',$muser->generate_key($user),array('expire'=>3600));
cookie('check_userpwd',$muser->generate_key($user),array('expire'=>3600*$checkSkip));
}
}
}

View File

@ -199,7 +199,7 @@ class Collected extends BaseController {
$nowYear=intval(date('Y',$nowTime));
$nowMonth=intval(date('m',$nowTime));
$nowDay=intval(date('d',$nowTime));
if(in_array($op,array('today','this_month','this_year','years'))){
if(in_array($op,array('today','yesterday','this_month','last_month','this_year','last_year','years'))){
$dataList = array (
'name'=>array(),
'success' => array (),
@ -214,7 +214,16 @@ class Collected extends BaseController {
$start=strtotime($start);
$dateList[$i+1]=array('name'=>($i+1).'点','start'=>$start,'end'=>$end);
}
}if($op=='this_month'){
}elseif($op=='yesterday'){
$yesterday=date('Y-m-d',strtotime("{$nowYear}-{$nowMonth}-{$nowDay} -1 day"));
for($i=0;$i<24;$i++){
$start=$yesterday.' '.$i.':00';
$end=strtotime($start.' +1 hour')-1;
$start=strtotime($start);
$dateList[$i+1]=array('name'=>($i+1).'点','start'=>$start,'end'=>$end);
}
}elseif($op=='this_month'){
$endDay=date('d',strtotime("{$nowYear}-{$nowMonth}-1 +1 month -1 day"));
$endDay=intval($endDay);
@ -224,6 +233,18 @@ class Collected extends BaseController {
$start=strtotime($start);
$dateList[$i]=array('name'=>$i.'号','start'=>$start,'end'=>$end);
}
}elseif($op=='last_month'){
$endDay=strtotime("{$nowYear}-{$nowMonth}-1 -1 day");
$lastMonth=date('Y-m',$endDay);
$endDay=date('d',$endDay);
$endDay=intval($endDay);
for($i=1;$i<=$endDay;$i++){
$start=$lastMonth.'-'.$i;
$end=strtotime($start.' +1 day')-1;
$start=strtotime($start);
$dateList[$i]=array('name'=>$i.'号','start'=>$start,'end'=>$end);
}
}elseif($op=='this_year'){
for($i=1;$i<=12;$i++){
@ -233,6 +254,16 @@ class Collected extends BaseController {
$dateList[$i]=array('name'=>$i.'月','start'=>$start,'end'=>$end);
}
}elseif($op=='last_year'){
$lastYear=$nowYear-1;
for($i=1;$i<=12;$i++){
$start=$lastYear.'-'.$i.'-1';
$end=strtotime($start.' +1 month')-1;
$start=strtotime($start);
$dateList[$i]=array('name'=>$i.'月','start'=>$start,'end'=>$end);
}
}elseif($op=='years'){
$minTime=$mcollected->min('addtime');

View File

@ -11,7 +11,6 @@
namespace skycaiji\admin\controller;
use skycaiji\admin\model\CacheModel;
use skycaiji\admin\model\FuncApp;
use util\Encrypt;
class Collector extends BaseController {
@ -173,6 +172,8 @@ class Collector extends BaseController {
$funcList=array('contentSign'=>array(),'process'=>array(),'processIf'=>array());
$apiAppList=array('process'=>array());
$contentSignFuncPages=array('front_urls','source_url','level_urls','url','relation_urls');
foreach ($contentSignFuncPages as $page){
$pageConfigList=array();
@ -207,6 +208,7 @@ class Collector extends BaseController {
$processList[]=$config['common_process'];
}
$hasPlugin=false;
if($processList){
foreach ($processList as $process){
if(is_array($process)){
@ -218,6 +220,12 @@ class Collector extends BaseController {
if(is_array($v['if_addon'])&&is_array($v['if_addon']['func'])){
$funcList['processIf']=array_merge($funcList['processIf'],$v['if_addon']['func']);
}
}elseif($v['module']=='apiapp'){
if($v['apiapp_app']){
$apiAppList['process'][$v['apiapp_app']]=$v['apiapp_app'];
$hasPlugin=true;
}
}
}
}
@ -225,7 +233,7 @@ class Collector extends BaseController {
}
}
$hasPlugin=false;
foreach ($funcList as $funcModule=>$funcs){
if(is_array($funcs)){
foreach ($funcs as $k=>$v){
@ -268,17 +276,33 @@ class Collector extends BaseController {
if($hasPlugin){
$export_plugin=input('export_plugin/d');
if($export_plugin&&is_array($funcList)){
if($export_plugin){
$exportName.='.含插件';
foreach ($funcList as $funcModule=>$funcs){
if(is_array($funcs)){
foreach ($funcs as $func){
$pluginData=controller('admin/Develop','controller')->_export_plugin_data('func',$funcModule,$func,$pwd);
if(empty($pluginData['success'])){
$this->error($pluginData['msg']);
if(is_array($funcList)){
foreach ($funcList as $funcModule=>$funcs){
if(is_array($funcs)){
foreach ($funcs as $func){
$pluginData=controller('admin/Develop','controller')->_export_plugin_data('func',$funcModule,$func,$pwd);
if(empty($pluginData['success'])){
$this->error($pluginData['msg']);
}
$exportTxt.="\r\n".$pluginData['plugin_txt'];
}
}
}
}
if(is_array($apiAppList)){
foreach ($apiAppList as $apiModule=>$apiApps){
if(is_array($apiApps)){
foreach ($apiApps as $apiApp){
$pluginData=controller('admin/Develop','controller')->_export_plugin_data('api',$apiModule,$apiApp,$pwd);
if(empty($pluginData['success'])){
$this->error($pluginData['msg']);
}
$exportTxt.="\r\n".$pluginData['plugin_txt'];
}
$exportTxt.="\r\n".$pluginData['plugin_txt'];
}
}
}
@ -423,7 +447,7 @@ class Collector extends BaseController {
$startTime=input('start',0,'intval');
$endTime=input('end',0,'intval');
if(abs($endTime-$startTime)>10*1000){
if(abs($endTime-$startTime)>3*1000){
$mconfig=model('Config');
if($mconfig->server_is_cli()){
@ -527,27 +551,18 @@ class Collector extends BaseController {
if(empty($module)){
$this->error('模块错误');
}
$mfuncApp=new FuncApp();
$mfuncApp=model('FuncApp');
$cacheName='cache_plugin_func_method_'.$module;
$cacheName='cache_plugin_func_module_'.$module;
$cacheFuncs=cache($cacheName);
$enableApps=$mfuncApp->where(array('module'=>$module,'enable'=>1))->column('uptime','app');
foreach ($enableApps as $k=>$v){
$appFilename=$mfuncApp->filename($module, $k);
if(file_exists($appFilename)){
$v.=','.filemtime($appFilename);
}
$enableApps[$k]=$v;
}
ksort($enableApps);
$enableApps=$this->_plugin_func_enable_apps($module);
$enableApps=md5(serialize($enableApps));
$apps=array();
if(empty($cacheFuncs)||$enableApps!=$cacheFuncs['key']||abs(time()-$cacheFuncs['time'])>3600){
$appList=$mfuncApp->where(array('module'=>$module,'enable'=>1))->column('uptime','app');
$appList=$this->_plugin_func_enable_apps($module);
$apps=array();
if(!empty($appList)){
foreach ($appList as $k=>$v){
@ -563,4 +578,66 @@ class Collector extends BaseController {
}
$this->success('',null,$apps);
}
private function _plugin_func_enable_apps($module){
$mfuncApp=model('FuncApp');
$enableApps=$mfuncApp->where(array('module'=>$module,'enable'=>1))->column('uptime','app');
foreach ($enableApps as $k=>$v){
$appFilename=$mfuncApp->filename($module, $k);
if(file_exists($appFilename)){
$v.=','.filemtime($appFilename);
}
$enableApps[$k]=$v;
}
ksort($enableApps);
return $enableApps;
}
public function plugin_apiAction(){
$module=input('module');
if(empty($module)){
$this->error('模块错误');
}
$mapiApp=model('ApiApp');
$cacheName='cache_plugin_api_module_'.$module;
$cacheApis=cache($cacheName);
$enableApps=$this->_plugin_api_enable_apps($module);
$enableApps=md5(serialize($enableApps));
$apps=array();
if(empty($cacheApis)||$enableApps!=$cacheApis['key']||abs(time()-$cacheApis['time'])>3600){
$appList=$this->_plugin_api_enable_apps($module);
$apps=array();
if(!empty($appList)){
$apps=$mapiApp->where('app','in',array_keys($appList))->column('*','app');
foreach ($apps as $k=>$v){
$apps[$k]=array(
'name'=>$v['name'],
'ops'=>$mapiApp->get_app_ops($v,null,true,false)
);
}
}
cache($cacheName,array('list'=>$apps,'time'=>time(),'key'=>md5(serialize($appList))));
}else{
$apps=$cacheApis['list'];
}
$this->success('',null,$apps);
}
private function _plugin_api_enable_apps($module){
$mapiApp=model('ApiApp');
$enableApps=$mapiApp->where(array('module'=>$module,'enable'=>1))->column('uptime','app');
foreach ($enableApps as $k=>$v){
$appFilename=$mapiApp->app_filename($module, $k);
if(file_exists($appFilename)){
$v.=','.filemtime($appFilename);
}
$enableApps[$k]=$v;
}
ksort($enableApps);
return $enableApps;
}
}

View File

@ -43,23 +43,13 @@ class Cpattern extends BaseController {
$urlFmt=$source['url'];
if($source['param']=='num'){
$source['param_num_start']=intval($source ['param_num_start']);
$source['param_num_end']=intval($source ['param_num_end']);
$source['param_num_end'] = max ( $source ['param_num_start'], $source ['param_num_end'] );
$source['param_num_inc'] = max ( 1, intval($source ['param_num_inc']));
$source['param_num_desc']=$source['param_num_desc']?1:0;
if($source['param_num_desc']){
for($i=$source['param_num_end'];$i>=$source['param_num_start'];$i--){
$urls[]=str_replace(cp_sign('match'), $source['param_num_start']+($i-$source['param_num_start'])*$source['param_num_inc'], $source['url']);
}
}else{
for($i=$source['param_num_start'];$i<=$source['param_num_end'];$i++){
$urls[]=str_replace(cp_sign('match'), $source['param_num_start']+($i-$source['param_num_start'])*$source['param_num_inc'], $source['url']);
}
$urls=\util\Funcs::increase_nums($source['param_num_start'],$source['param_num_end'],$source['param_num_inc'],$source['param_num_desc'],$source['param_num_len']);
foreach ($urls as $k=>$v){
$urls[$k]=str_replace(cp_sign('match'), $v, $source['url']);
}
$urlFmt=str_replace(cp_sign('match'),"{param:num,{$source['param_num_start']}\t{$source['param_num_end']}\t{$source['param_num_inc']}\t{$source['param_num_desc']}}",$urlFmt);
$urlParamNum="{$source['param_num_start']}\t{$source['param_num_end']}\t{$source['param_num_inc']}\t{$source['param_num_desc']}\t{$source['param_num_len']}";
$urlParamNum=trim($urlParamNum);
$urlFmt=str_replace(cp_sign('match'),"{param:num,{$urlParamNum}}",$urlFmt);
}elseif($source['param']=='letter'){
$letter_start=ord($source['param_letter_start']);
@ -126,6 +116,7 @@ class Cpattern extends BaseController {
$source['param_num_end']=intval($param_val[1]);
$source['param_num_inc']=intval($param_val[2]);
$source['param_num_desc']=intval($param_val[3]);
$source['param_num_len']=intval($param_val[4]);
}elseif($source['param']=='letter'){
$source['param_letter_start']=strtolower($param_val[0]);
$source['param_letter_end']=strtolower($param_val[1]);
@ -173,11 +164,15 @@ class Cpattern extends BaseController {
case 'xpath':if(empty($field['xpath']))$this->error('XPath规则不能为空');break;
case 'json':if(empty($field['json']))$this->error('提取规则不能为空!');break;
case 'num':
$randNum=0;
$field['num_start']=intval($field['num_start']);
$field['num_end']=intval($field['num_end']);
$field['num_end'] = max ( $field['num_start'], $field ['num_end'] );
break;
case 'no':
$field['no_start']=intval($field['no_start']);
$field['no_inc']=intval($field['no_inc']);
$field['no_len']=intval($field['no_len']);
break;
case 'list':if(empty($field['list']))$this->error('列表数据不能为空!');break;
case 'extract':if(empty($field['extract']))$this->error('请选择字段!');break;
@ -193,14 +188,15 @@ class Cpattern extends BaseController {
'xpath' =>array('xpath','xpath_multi','xpath_multi_type','xpath_multi_str','xpath_attr','xpath_attr_custom'),
'json' =>array('json','json_arr','json_arr_implode','json_loop'),
'words' =>'words',
'num' => array('num_start','num_end'),
'num' => array('num_start','num_end'),
'no' => array('no_start','no_inc','no_len'),
'time' => array ('time_format','time_start','time_end','time_stamp'),
'list' => array('list','list_type'),
'extract' =>array('extract','extract_module','extract_rule','extract_rule_merge','extract_rule_multi','extract_rule_multi_type','extract_rule_multi_str','extract_xpath','extract_xpath_attr','extract_xpath_attr_custom','extract_xpath_multi','extract_xpath_multi_type','extract_xpath_multi_str','extract_json','extract_json_arr','extract_json_arr_implode','extract_json_loop'),
'merge' => 'merge',
'sign' => 'sign'
);
$returnField=array('name'=>$field['name'],'source'=>$field['source'],'module'=>$field['module']);
$returnField=array('name'=>$field['name'],'desc'=>$field['desc'],'source'=>$field['source'],'module'=>$field['module']);
if(is_array($modules[$field['module']])){
foreach($modules[$field['module']] as $mparam){
@ -254,6 +250,18 @@ class Cpattern extends BaseController {
}
}
public function reset_field_noAction(){
if(request()->isPost()){
$taskId=input('task_id/d',0);
$fieldName=input('field_name','');
$ckey='taskFNo_'.$taskId.'_'.$fieldName;
CacheModel::getInstance()->deleteCache($ckey);
$this->success('已重置');
}else{
$this->error('操作失败');
}
}
/*数据处理*/
public function processAction(){
$type=input('type');

View File

@ -811,12 +811,14 @@ class CpatternTest extends BaseController {
}
}elseif($pnType=='next'){
$pnUrls=$this->eCpattern->getPaginationUrls($pageType,$pageName,false,$test_url,'',true);
if(!empty($pnUrls)){
$this->eCpattern->used_pagination_urls[$pageSource]=array();
$curPnUrl=reset($pnUrls);
$curPnUrl=$test_url;
$nextPnUrl=$this->eCpattern->getPaginationNext($pageType,$pageName,false,$curPnUrl,'',true);
if(!empty($nextPnUrl)){
$pnUrls=array();
$pnUrls[]=array('cur'=>$test_url,'next'=>$curPnUrl);
$pnUrls[]=array('cur'=>$curPnUrl,'next'=>$nextPnUrl);
$this->eCpattern->used_pagination_urls[$pageSource][md5($curPnUrl)]=1;
$curPnUrl=$nextPnUrl;
$loopMax=10;
$loopNum=0;
do{
@ -826,8 +828,7 @@ class CpatternTest extends BaseController {
$nextPnUrl=$this->eCpattern->getPaginationNext($pageType, $pageName, true, $curPnUrl, '');
if(!empty($nextPnUrl)){
$pnUrls[]=array('cur'=>$curPnUrl,'next'=>$nextPnUrl);
$curPnMd5=md5($curPnUrl);
$this->eCpattern->used_pagination_urls[$pageSource][$curPnMd5]=1;
$this->eCpattern->used_pagination_urls[$pageSource][md5($curPnUrl)]=1;
$curPnUrl=$nextPnUrl;
$doWhile=true;
}

View File

@ -18,12 +18,14 @@ class Dataapi extends BaseController {
$search=array(
'id'=>input('id/d',0),
'name'=>input('name','','trim')
'name'=>input('name','','trim'),
'ds'=>input('ds','')
);
if($search['id']<=0){
unset($search['id']);
}
$mds=model('Dataset');
$mda=model('Dataapi');
$cond=array();
if($search['id']){
@ -32,7 +34,16 @@ class Dataapi extends BaseController {
if($search['name']){
$cond['name']=array('like','%'.$search['name'].'%');
}
if($search['ds']){
if(is_numeric($search['ds'])){
$cond['ds_id']=$search['ds'];
}else{
$dsIds=$mds->where('name','like','%'.$search['ds'].'%')->column('id','id');
if($dsIds){
$cond['ds_id']=array('in',$dsIds);
}
}
}
$daList=array();
$limit=50;
$daList=$mda->where($cond)->order('sort desc')->paginate($limit,false,paginate_auto_config());
@ -49,7 +60,7 @@ class Dataapi extends BaseController {
$this->set_html_tags(
'数据接口',
'数据接口',
'数据接口'.($cond?':搜索':''),
breadcrumb(array(array('url'=>url('dataapi/list'),'title'=>'数据接口'),array('url'=>url('dataapi/list'),'title'=>'列表')))
);

View File

@ -124,14 +124,16 @@ class Dataset extends BaseController {
}
public function dbCountAction(){
$counts=array();
$counts=array('db'=>array(),'da'=>array());
if($this->request->isPost()){
$ids=input('ids/a',array(),'intval');
init_array($ids);
$mda=model('Dataapi');
foreach ($ids as $id){
try{
$dst=DatasetTable::getInstance($id);
$counts[$id]=$dst->db()->count();
$counts['db'][$id]=$dst->db()->count();
$counts['da'][$id]=$mda->where('ds_id',$id)->count();
}catch(\Exception $ex){}
}
}

View File

@ -13,6 +13,7 @@ namespace skycaiji\admin\controller;
use plugin;
use skycaiji\admin\model\FuncApp;
use skycaiji\admin\model\ApiApp;
class Develop extends BaseController {
public static $typeList = array (
'number' => '数字(number)',
@ -268,7 +269,7 @@ class Develop extends BaseController {
foreach ($select_val[0] as $slv){
if(strpos($slv,'=')!==false){
list($slv_k,$slv_v)=explode('=', $slv);
list($slv_k,$slv_v)=explode('=',$slv,2);
if(is_null($slv_k)){
$slv_k=$slv_v;
}
@ -319,67 +320,39 @@ class Develop extends BaseController {
$funcPhp.="\r\n\tpublic function {$v}(){\r\n\t\t/*必须返回键值对数组*/\r\n\t\treturn array();\r\n\t}";
}
}
if(empty($cmsClass)){
$phpCode=<<<EOF
<?php
namespace plugin\\release\\cms;
class {$appData['app']} extends BaseCms{
/*参数*/
public \$_params ={$_params};
{$funcPhp}
/*导入数据*/
public function runImport(\$params){
/*
* -----这里开始写代码-----
* 数据库操作:\$this->db()可参考thinkphp5的数据库操作
* 参数值列表:\$params\$params[变量名] 调用参数的值
*/
/*
* 必须以数组形式返回:
* id必填表示入库返回的自增id或状态
* target可选记录入库的数据位置发布的网址等
* desc可选记录入库的数据位置附加信息
* error可选记录入库失败的错误信息
* 入库的信息可在“已采集数据”中查看
*/
return array('id'=>0,'target'=>'','desc'=>'','error'=>'');
}
}
?>
EOF;
}else{
$phpCode=null;
if($is_old_plugin){
$phpCode=$mapp->oldFileCode($appData['app'],'cms');
$phpCode=preg_replace('/\bthinkphp\s*\d+(\.\d+){0,1}/i', 'thinkphp5', $phpCode);
$phpCode=preg_replace('/\bnamespace\s+Release\\\Cms\;/i', 'namespace plugin\\release\\cms;', $phpCode);
$phpCode=preg_replace('/\bclass\s+(\w+)Cms\s+extends\s+BaseCms\b/i', "class \\1 extends BaseCms", $phpCode);
}else{
$phpCode=file_get_contents($mapp->appFileName($appData['app'],'cms'));
}
$phpCode=preg_replace('/public\s*\$_params\s*\=[\s\S]+?\)\s*;/i', 'public $_params ='.$_params.';', $phpCode);
if(!empty($funcPhp)){
if(preg_match('/namespace[^\r\n]+?\{/', $phpCode)){
$phpCode=preg_replace('/\}\s*\}\s*\?\>/',"\r\n".$funcPhp."\t\r\n}\r\n}\r\n?>",$phpCode);
}else{
$phpCode=preg_replace('/\}\s*\?\>/',"\r\n".$funcPhp."\r\n}\r\n?>",$phpCode);
}
}
}
if(empty($cmsClass)){
$phpCode=file_get_contents(config('app_path').'/public/release_app/class.tpl');
$phpCode=str_replace(array('{$classname}','{$params}','{$funcs}'),array($appData['app'],$_params,$funcPhp),$phpCode);
}else{
$phpCode=null;
if($is_old_plugin){
$phpCode=$mapp->oldFileCode($appData['app'],'cms');
$phpCode=preg_replace('/\bthinkphp\s*\d+(\.\d+){0,1}/i', 'thinkphp5', $phpCode);
$phpCode=preg_replace('/\bnamespace\s+Release\\\Cms\;/i', 'namespace plugin\\release\\cms;', $phpCode);
$phpCode=preg_replace('/\bclass\s+(\w+)Cms\s+extends\s+BaseCms\b/i', "class \\1 extends BaseCms", $phpCode);
}else{
$phpCode=file_get_contents($mapp->appFileName($appData['app'],'cms'));
}
$phpCode=preg_replace('/public\s*\$_params\s*\=[\s\S]+?\)\s*;/i', 'public $_params ='.$_params.';', $phpCode);
if(!empty($funcPhp)){
if(preg_match('/namespace[^\r\n]+?\{/', $phpCode)){
$phpCode=preg_replace('/\}\s*\}\s*\?\>/',"\r\n".$funcPhp."\t\r\n}\r\n}\r\n?>",$phpCode);
}else{
$phpCode=preg_replace('/\}\s*\?\>/',"\r\n".$funcPhp."\r\n}\r\n?>",$phpCode);
}
}
}
if(!empty($phpCode)){
$success=$mapp->addCms(array('app'=>$appData['app'],'name'=>$appData['name']),$phpCode);
if($success){
@ -740,7 +713,7 @@ EOF;
$methods=input('methods/a',array());
if(empty($module)){
$this->error('请选择类型');
$this->error('请选择模块');
}
$module=$mfuncApp->format_module($module);
@ -748,7 +721,7 @@ EOF;
$identifier=$mfuncApp->format_identifier($identifier);
if(!$mfuncApp->right_module($module)){
$this->error('类型错误');
$this->error('模块错误');
}
if(!$mfuncApp->right_identifier($identifier)){
$this->error('功能标识只能由字母或数字组成,且首个字符必须是字母!');
@ -775,6 +748,9 @@ EOF;
}
$app=$mfuncApp->app_name($copyright,$identifier);
if($mfuncApp->where('app',$app)->count()>0){
$this->error('函数插件已存在:'.$app);
}
$id=$mfuncApp->createApp($module,$app,array('name'=>$name,'methods'=>$methods));
@ -822,7 +798,15 @@ EOF;
if(empty($pluginData['success'])){
$this->error($pluginData['msg']);
}
\util\Tools::browser_export_scj($app.($pwd?'.加密':'').'.插件', $pluginData['plugin_txt']);
$typeName='';
if($type=='release'){
$typeName='发布';
}elseif($type=='func'){
$typeName='函数';
}elseif($type=='api'){
$typeName='接口';
}
\util\Tools::browser_export_scj($app.($pwd?'.加密':'').'.'.$typeName.'插件', $pluginData['plugin_txt']);
}else{
$this->set_html_tags(
'导出插件',
@ -843,6 +827,7 @@ EOF;
$app=input('app','');
$mReleApp=model('ReleaseApp');
$mFuncApp=model('FuncApp');
$mApiApp=model('ApiApp');
$isApp=false;
$setTitle='';
$setNav='';
@ -900,6 +885,24 @@ EOF;
}
$setTitle.=' » '.$appName;
$setNav=breadcrumb(array(array('url'=>url('develop/func?app='.$app),'title'=>$app),'编辑插件'));
}elseif($type=='api'){
$setTitle='接口插件';
$appName=$app;
$apiData=$mApiApp->where('app',$app)->find();
if(!empty($apiData)){
if(file_exists($mApiApp->app_filename($apiData['module'],$apiData['app']))){
$appcode=file_get_contents($mApiApp->app_filename($apiData['module'],$apiData['app']));
}
if($apiData['module']){
$setTitle.=' » '.$mApiApp->get_api_module_val($apiData['module'],'name');
}
if($apiData['name']){
$appName.=''.$apiData['name'].'';
}
}
$setTitle.=' » '.$appName;
$setNav=breadcrumb(array(array('url'=>url('develop/api?app='.$app),'title'=>$app),'编辑插件'));
}
$appcode=$appcode?:'';
if($setTitle){
@ -907,7 +910,7 @@ EOF;
}
}
}else{
$type='release';
$type='func';
}
$appList=array();
if($type=='release'){
@ -939,6 +942,8 @@ EOF;
}
}elseif($type=='func'){
$appList=$mFuncApp->order('app asc')->column('name','app');
}elseif($type=='api'){
$appList=$mApiApp->order('app asc')->column('name','app');
}
init_array($appList);
@ -1001,6 +1006,14 @@ EOF;
$this->error('插件不存在');
}
$filename=$mFuncApp->filename($funcData['module'],$funcData['app']);
}elseif($type=='api'){
$mApiApp=model('ApiApp');
$apiData=$mApiApp->where('app',$app)->find();
if(empty($apiData)||empty($apiData['module'])||empty($apiData['app'])){
$this->error('插件不存在');
}
$filename=$mApiApp->app_filename($apiData['module'],$apiData['app']);
}else{
$this->error('类型错误');
}
@ -1067,6 +1080,8 @@ EOF;
$mapp=model('ReleaseApp');
}elseif($type=='func'){
$mapp=model('FuncApp');
}elseif($type=='api'){
$mapp=model('ApiApp');
}else{
return return_result('类型错误');
}
@ -1149,6 +1164,8 @@ EOF;
$reuslt['msg']=lang('rele_m_name_'.$module).'发布插件:'.$app;
}elseif($type=='func'){
$reuslt['msg']=model('FuncApp')->get_func_module_val($module,'name').'函数插件:'.$app;
}elseif($type=='api'){
$reuslt['msg']=model('ApiApp')->get_api_module_val($module,'name').'接口插件:'.$app;
}
$reuslt['msg'].=' » '.$pluginResult['msg'];
}else{
@ -1207,4 +1224,139 @@ EOF;
}
}
}
/*开发接口插件*/
public function apiAction(){
$mapiApp=new ApiApp();
if(request()->isPost()){
$app=input('app');
$module=input('module');
$copyright=input('copyright');
$identifier=input('identifier');
$name=input('name');
$name=$mapiApp->format_str($name);
$content=input('content','',null);
$ops=input('ops/a',array(),'trim');
if(empty($module)){
$this->error('请选择模块');
}
$module=$mapiApp->format_module($module);
$copyright=$mapiApp->format_copyright($copyright);
$identifier=$mapiApp->format_identifier($identifier);
if(!$mapiApp->right_module($module)){
$this->error('模块错误');
}
if(!$mapiApp->right_identifier($identifier)){
$this->error('功能标识只能由字母或数字组成,且首个字符必须是字母!');
}
if(!$mapiApp->right_copyright($copyright)){
$this->error('作者版权只能由字母或数字组成,且首个字符必须是字母!');
}
$app=$mapiApp->app_name($copyright,$identifier);
$count=$mapiApp->where('app',$app)->count();
if(input('?edit')){
if($count<=0){
$this->error('接口插件不存在');
}
}else{
if($count>0){
$this->error('已存在接口插件:'.$app);
}
}
$id=$mapiApp->createApp($module,$app,array('name'=>$name,'ops'=>$ops,'content'=>$content));
if($id>0){
$this->success('创建成功','develop/api?app='.$app);
}else{
$this->error('创建失败');
}
}else{
$mapiApp=model('ApiApp');
$this->set_html_tags(
'开发接口插件',
'开发接口插件 <small><a href="https://www.skycaiji.com/manual/doc/api" target="_blank"><span class="glyphicon glyphicon-info-sign"></span></a></small>',
breadcrumb(array(array('url'=>url('mystore/apiApp'),'title'=>'接口插件'),array('url'=>url('develop/api'),'title'=>'开发接口插件')))
);
$app=input('app','');
if($app){
$apiData=$mapiApp->where('app',$app)->find();
if(!empty($apiData)){
$apiClass=$mapiApp->get_app_class($apiData['module'],$apiData['app']);
$apiClass['name']=$apiData['name'];
$this->assign('apiClass',$apiClass);
}
}
$this->assign('app',$app);
$this->assign('module',$module);
$this->assign('modules',$mapiApp->apiModules);
return $this->fetch();
}
}
public function apiTestAction(){
$app=input('app','','trim');
if(request()->isPost()){
$mapp=model('ApiApp');
$appData=$mapp->where('app',$app)->find();
if(empty($appData)){
$this->error('插件不存在');
}
$config=input('config/a',array(),'trim');
$return=$mapp->execute_app($appData['module'],$appData['app'],'',$config,null,true);
$this->success('','',$return);
}else{
$this->assign('app',$app);
return $this->fetch('apiTest');
}
}
public function apiVariableAction(){
if(request()->isPost()){
$objid=input('post.objid');
$variable=input('post.variable/a',array(),'trim');
$mapiApp=model('ApiApp');
$check=$mapiApp->check_variable_name($variable['name']);
if(!$check['success']){
$this->error($check['msg']);
}
$variable['func']=$mapiApp->filter_variable_func($variable['func']);
$this->success('',null,array('variable'=>$variable,'objid'=>$objid));
}else{
$variable=input('variable','','url_b64decode');
$objid=input('objid');
$variable=$variable?json_decode($variable,true):array();
init_array($variable);
$this->assign('variable',$variable);
$this->assign('objid',$objid);
return $this->fetch('apiVariable');
}
}
public function apiRequestAction(){
if(request()->isPost()){
$objid=input('post.objid');
$request=input('post.request/a',array(),'trim');
$mapiApp=model('ApiApp');
$check=$mapiApp->check_request_name($request['name']);
if(!$check['success']){
$this->error($check['msg']);
}
$this->success('',null,array('request'=>$request,'objid'=>$objid));
}else{
$request=input('request','','url_b64decode');
$objid=input('objid');
$request=$request?json_decode($request,true):array();
init_array($request);
$this->assign('request',$request);
$this->assign('objid',$objid);
return $this->fetch('apiRequest');
}
}
}

View File

@ -12,6 +12,7 @@
namespace skycaiji\admin\controller;
use skycaiji\admin\model\FuncApp;
use skycaiji\admin\model\ApiApp;
class Mystore extends BaseController {
public function indexAction(){
$this->redirect('mystore/store');
@ -118,8 +119,8 @@ class Mystore extends BaseController {
$this->set_html_tags(
lang('rule_'.$type),
'已下载',
breadcrumb(array(array('url'=>url('mystore/rule'),'title'=>'已下载:'.lang('rule_'.$type))))
lang('rule_'.$type),
breadcrumb(array(array('url'=>url('mystore/rule'),'title'=>lang('rule_'.$type))))
);
$this->assign('ruleList',$ruleList);
@ -262,8 +263,8 @@ class Mystore extends BaseController {
$this->set_html_tags(
'发布插件',
'已下载',
breadcrumb(array(array('url'=>url('mystore/releaseApp'),'title'=>'已下载:发布插件')))
'发布插件',
breadcrumb(array(array('url'=>url('mystore/releaseApp'),'title'=>'发布插件')))
);
$this->assign('appList',$appList);
@ -582,13 +583,13 @@ class Mystore extends BaseController {
$this->set_html_tags(
'函数插件',
'已下载',
breadcrumb(array(array('url'=>url('mystore/funcApp'),'title'=>'已下载:函数插件')))
'函数插件',
breadcrumb(array(array('url'=>url('mystore/funcApp'),'title'=>'函数插件')))
);
$this->assign('appList',$appList);
$this->assign('modules',$mfuncApp->funcModules);
return $this->fetch('func');
return $this->fetch('func_app');
}
public function funcAppOpAction(){
@ -666,6 +667,140 @@ class Mystore extends BaseController {
}
}
}
/*接口插件*/
public function apiAppAction(){
$page=max(1,input('p/d',0));
$cond=array();
$sortBy=input('sort','');
$orderKey=input('order','');
\util\Param::set_cache_action_order_by('action_mystore_api_order', $orderKey, $sortBy);
$sortBy=($sortBy=='asc')?'asc':'desc';
$this->assign('sortBy',$sortBy);
$this->assign('orderKey',$orderKey);
$orderBy=empty($orderKey)?'id desc':($orderKey.' '.$sortBy);
$mapiApp=model('ApiApp');
$limit=20;
$count=$mapiApp->where($cond)->count();
$appList=$mapiApp->where($cond)->order($orderBy)->paginate($limit,false,paginate_auto_config());
$pagenav = $appList->render();
$this->assign('pagenav',$pagenav);
$appList=$appList->all();
if(!empty($appList)){
$provList=array();
foreach ($appList as $k=>$v){
if(!empty($v['provider_id'])){
$provList[$v['provider_id']]=$v['provider_id'];
}
}
$mprov=model('Provider');
$provList=$mprov->where('id','in',$provList)->column('*','id');
foreach ($appList as $k=>$v){
$url='';
if(!empty($v['provider_id'])&&!empty($provList[$v['provider_id']])){
$url=$provList[$v['provider_id']]['url'];
$appList[$k]['_is_provider']=true;
}
$appList[$k]['_store_url']=\skycaiji\admin\model\Provider::create_store_url($url,'client/addon/plugin',array('app'=>$v['app']));
}
}
$this->set_html_tags(
'接口插件',
'接口插件',
breadcrumb(array(array('url'=>url('mystore/apiApp'),'title'=>'接口插件')))
);
$this->assign('appList',$appList);
$this->assign('modules',$mapiApp->apiModules);
return $this->fetch('api_app');
}
public function apiAppOpAction(){
$op=input('op');
$id=input('id');
$ops=array('item'=>array('delete','enable'),'list'=>array('check_store_update'),'else'=>array('auto_check'));
if(!in_array($op,$ops['item'])&&!in_array($op,$ops['list'])&&!in_array($op,$ops['else'])){
$this->error(lang('invalid_op'));
}
$mapiApp=new ApiApp();
$appData=$mapiApp->where('id',$id)->find();
if($op=='enable'){
$enable=input('enable/d');
$mapiApp->where('id',$appData['id'])->update(array('enable'=>$enable));
$this->success();
}elseif($op=='delete'){
if(!empty($appData['module'])&&!empty($appData['app'])){
$filename=$mapiApp->app_filename($appData['module'], $appData['app']);
if(file_exists($filename)){
unlink($filename);
}
}
$mapiApp->where('id',$appData['id'])->delete();
$this->success('删除成功');
}elseif($op=='auto_check'){
$this->_auto_check_plugin();
}elseif($op=='check_store_update'){
$ids=input('ids/a',array());
$appList=model('ApiApp')->where(array('id'=>array('in',$ids)))->column('*','app');
$updateList=$this->_check_store_plugin_update($appList);
if(!empty($updateList)){
$this->success('',null,$updateList);
}else{
$this->error();
}
}
}
public function apiAppConfigAction(){
$id=input('id');
$mapiApp=model('ApiApp');
$appData=$mapiApp->where('id',$id)->find();
if(empty($appData)){
$this->error('插件不存在');
}
$config=$mapiApp->compatible_config($appData['config']);
$globalOps=$mapiApp->get_app_ops($appData,null,true,true);
if(request()->isPost()){
$global=input('global/a',array(),null);
foreach($globalOps as $globalOp){
if($globalOp['user']['required']&&is_empty($global[$globalOp['name_key']],true)){
if($globalOp['user']['tag']=='select'||is_empty($globalOp['user']['default'],true)){
$this->error('必填:'.$globalOp['name']);
}
}
}
$config['global']=$global;
$mapiApp->where('id',$id)->update(array('config'=>serialize($config)));
$this->success('配置成功','',array('js'=>"$('#myModal').modal('hide');"));
}else{
$this->assign('globalOps',$globalOps);
$this->assign('appData',$appData);
$this->assign('config',$config);
return $this->fetch();
}
}
/*导入*/
public function uploadAction(){
$type=input('type','');
@ -867,6 +1002,9 @@ class Mystore extends BaseController {
}elseif($pluginData['type']=='func'){
$mapp=model('FuncApp');
$pluginTitle='函数插件:'.$mapp->get_func_module_val($pluginData['module'],'name').' » ';
}elseif($pluginData['type']=='api'){
$mapp=model('ApiApp');
$pluginTitle='接口插件:'.$mapp->get_api_module_val($pluginData['module'],'name').' » ';
}else{
continue;
}
@ -874,12 +1012,12 @@ class Mystore extends BaseController {
$pluginTitle.=$pluginData['app'];
if($mapp->appFileExists($pluginData['app'],'diy')){
$pluginTitle='[已有] '.$pluginTitle;
$pluginTitle='<span style="color:red">[覆盖已有]</span> '.$pluginTitle;
}
}else{
$pluginTitle.=$pluginData['name'].'('.$pluginData['app'].')';
if($mapp->where('app',$pluginData['app'])->count()>0){
$pluginTitle='[已有] '.$pluginTitle;
$pluginTitle='<span style="color:red">[覆盖已有]</span> '.$pluginTitle;
}
}
$pluginList[$pluginData['type'].':'.$pluginData['module'].':'.$pluginData['app']]=$pluginTitle;
@ -903,6 +1041,8 @@ class Mystore extends BaseController {
$isReleDiy=$pluginData['module']=='diy'?true:false;
}elseif($pluginType=='func'){
$pluginTitle='函数插件:';
}elseif($pluginType=='api'){
$pluginTitle='接口插件:';
}else{
continue;
}
@ -937,6 +1077,8 @@ class Mystore extends BaseController {
$mapp=model('ReleaseApp');
}elseif($pluginData['type']=='func'){
$mapp=model('FuncApp');
}elseif($pluginData['type']=='api'){
$mapp=model('ApiApp');
}else{
return return_result('插件类型错误');
}

View File

@ -230,7 +230,7 @@ class Setting extends BaseController {
$mconfig=model('Config');
$config=$mconfig->getConfig('page_render','data');
$this->_chrome_start($config,false,true);
\util\ChromeSocket::config_start($config);
$config=$mconfig->getConfig('caiji','data');
init_array($config);
@ -725,8 +725,13 @@ class Setting extends BaseController {
}
$mconfig->setConfig('page_render',$config);
$this->_chrome_start($config);
$this->success(lang('op_success'),'setting/page_render');
$error=\util\ChromeSocket::config_start($config);
if($error){
$this->error($error);
}else{
$this->success(lang('op_success'),'setting/page_render');
}
}else{
$this->set_html_tags(
'页面渲染设置',
@ -737,14 +742,6 @@ class Setting extends BaseController {
init_array($config);
init_array($config['chrome']);
$this->assign('config',$config);
$chromeSocket=$this->_chrome_socket($config);
$toolIsOpen=$chromeSocket?$chromeSocket->hostIsOpen():false;
$serverIsLocal=$chromeSocket?$chromeSocket->serverIsLocal():false;
$this->assign('toolIsOpen',$toolIsOpen);
$this->assign('serverIsLocal',$serverIsLocal);
return $this->fetch('page_render');
}
}
@ -804,7 +801,7 @@ class Setting extends BaseController {
if($clearPageRender&&(in_array('all', $types)||in_array('page_render', $types))){
$this->_clear_page_render();
\util\ChromeSocket::config_clear();
}
}
@ -899,63 +896,88 @@ class Setting extends BaseController {
}
}elseif($info['error']){
$this->error($info['error']);
}else{
$this->success('测试成功,请保存配置以便生效');
}
}
}
$this->error('测试失败');
}
public function chrome_cleanAction(){
$this->_clear_page_render();
$this->success('清理完成','');
}
public function chrome_restartAction(){
$config=model('Config')->getConfig('page_render','data');
$this->_chrome_start($config,true);
$this->success('重启完成','setting/page_render');
}
private function _chrome_start($config,$restart=false,$noError=false){
init_array($config);
$chromeSocket=$this->_chrome_socket($config);
$error='';
if($chromeSocket){
try {
if($restart){
$chromeSocket->closeBrowser();
$chromeSocket->openHost();
}else{
if(!$chromeSocket->hostIsOpen()){
public function page_render_statusAction(){
if(request()->isPost()){
$config=model('Config')->getConfig('page_render','data');
init_array($config);
init_array($config['chrome']);
$chromeSocket=\util\ChromeSocket::config_init($config);
$toolIsOpen=$chromeSocket?$chromeSocket->hostIsOpen():false;
$serverIsLocal=$chromeSocket?$chromeSocket->serverIsLocal():false;
$tabs=$chromeSocket?$chromeSocket->getTabs():null;
if($tabs){
foreach ($tabs as $k=>$v){
if(empty($v['url'])||!is_array($v)||$v['url']=='about:blank'){
$chromeSocket->openHost();
unset($tabs[$k]);
}
}
}catch (\Exception $ex){
$error=$ex->getMessage();
}
}
if($error&&!$noError){
$this->error($error);
$tabs=$tabs?count($tabs):0;
$this->assign('config',$config);
$this->assign('toolIsOpen',$toolIsOpen);
$this->assign('serverIsLocal',$serverIsLocal);
$this->assign('tabs',$tabs);
return $this->fetch('page_render_status');
}
}
private function _chrome_socket($config){
init_array($config);
init_array($config['chrome']);
$chromeSocket=null;
if(model('Config')->page_render_is_chrome(true,$config['tool'])){
$chromeSocket=new \util\ChromeSocket($config['chrome']['host'],$config['chrome']['port'],$config['timeout'],$config['chrome']['filename'],$config['chrome']);
}
return $chromeSocket;
public function page_render_clearAction(){
\util\ChromeSocket::config_clear();
$this->success('清理完成','setting/page_render');
}
private function _clear_page_render(){
$config=model('Config')->getConfig('page_render','data');
$chromeSocket=$this->_chrome_socket($config);
if($chromeSocket){
$chromeSocket->clearBrowser();
public function page_render_restartAction(){
$error=\util\ChromeSocket::config_restart();
if($error){
$this->error($error,'');
}else{
$this->success('重启完成','setting/page_render');
}
}
public function page_render_apiAction(){
$kname='page_render_api_key';
$mcache=CacheModel::getInstance();
$data=$mcache->getCache($kname,'data');
init_array($data);
if(request()->isPost()){
$mcache->setCache($kname,array(
'open'=>input('open/d',0),
'key'=>input('key','','trim'),
));
$this->success('操作成功','',array('js'=>"windowModal('API接口',ulink('setting/page_render_api'));"));
}else{
$uri='';
if($data['key']){
$uri.='key='.md5($data['key']);
}
$urls=array(
'clear'=>url('admin/api/page_render?'.$uri.($uri?'&':'').'op=clear','',false,true),
'restart'=>url('admin/api/page_render?'.$uri.($uri?'&':'').'op=restart','',false,true),
'list'=>url('admin/api/page_render?'.$uri.($uri?'&':'').'op=list','',false,true),
'close'=>url('admin/api/page_render?'.$uri.($uri?'&':'').'op=close&id=','',false,true)
);
$config=model('Config')->getConfig('page_render','data');
$chromeSocket=\util\ChromeSocket::config_init($config);
$serverIsLocal=$chromeSocket?$chromeSocket->serverIsLocal():false;
$this->assign('data',$data);
$this->assign('urls',$urls);
$this->assign('serverIsLocal',$serverIsLocal);
return $this->fetch('page_render_api');
}
}
}

View File

@ -262,6 +262,12 @@ class Store extends BaseController {
$success=model('FuncApp')->addFunc($newData,$plugin['code']);
$success=$success?true:false;
$result=return_result($success?'成功':'无效的插件',$success);
}elseif($plugin['type']=='api'){
$newData['module']=$plugin['module'];
$success=model('ApiApp')->addApp($newData,$plugin['code']);
$success=$success?true:false;
$result=return_result($success?'成功':'无效的插件',$success);
}else{
$result=return_result('插件类型错误');
}

View File

@ -914,7 +914,11 @@ class Cpattern extends CpatternEvent{
if(empty($html)){
$html=$this->get_page_html($fromUrl, $pageType, $pageName, $isPagination);
}
if(!empty($pnConfig['reg_url'])){
$openPnNum=false;
if($pnConfig['number']&&$pnConfig['number']['open']){
$openPnNum=true;
}
if(!empty($pnConfig['reg_url'])||$openPnNum){
$allowColl=true;
if($pageType=='url'&&empty($pnConfig['new_fields'])){
@ -926,7 +930,7 @@ class Cpattern extends CpatternEvent{
$areaMatch=$this->rule_match_area($pageType, $pageName, true, $html, true);
$pn_area=$areaMatch['area'];
$this->pn_area_matches[$pageType][$pageName]=$areaMatch['matches'];
if(!empty($pn_area)){
if(!empty($pn_area)||$openPnNum){
if(!empty($pnConfig['url_complete'])){
@ -960,12 +964,12 @@ class Cpattern extends CpatternEvent{
$this->pn_url_matches[$pageType][$pageName]=$urlsMatches['matches'];
}else{
if($isTest){
return $this->echo_error('未获取到分页链接,请检查分页链接规则');
return $this->echo_error('未获取到分页链接,请检查“匹配分页网址”或“从选定区域中提取网址”');
}
}
}else{
if($isTest){
return $this->echo_error('未获取到分页区域,请检查分页区域规则');
return $this->echo_error('未获取到分页区域,请检查“从选定区域中提取网址”');
}
}
}else{
@ -1085,12 +1089,14 @@ class Cpattern extends CpatternEvent{
$html=$htmlInfo['html'];
}
}
static $fieldArr=array('words','num','time','list');
static $fieldArr=array('words','num','no','time','list');
$url_info=$this->match_url_info($cur_url, $html, 'set_field');
$val='';
$field_func='field_module_'.$module;
$is_list_data=false;
$list_multi_str='';
if(method_exists($this, $field_func)){
if('extract'==$module){
@ -1116,6 +1122,18 @@ class Cpattern extends CpatternEvent{
);
$val=$this->field_module_extract($field_params, $extract_field_val, $url_info);
}
if($field_params['extract_module']=='rule'){
if($field_params['extract_rule_multi']&&$field_params['extract_rule_multi_type']=='list'){
$is_list_data=true;
$list_multi_str=$field_params['extract_rule_multi_str'];
}
}elseif($field_params['extract_module']=='xpath'){
if($field_params['extract_xpath_multi']&&$field_params['extract_xpath_multi_type']=='list'){
$is_list_data=true;
$list_multi_str=$field_params['extract_xpath_multi_str'];
}
}
}elseif('merge'==$module){
if(empty($this->first_loop_field)){
@ -1171,8 +1189,24 @@ class Cpattern extends CpatternEvent{
$val=$this->$field_func($field_params,empty($cont_url)?$cur_url:$cont_url);
}else{
$val=$this->$field_func($field_params,$html);
if($module=='rule'){
if($field_params['rule_multi']&&$field_params['rule_multi_type']=='list'){
$is_list_data=true;
$list_multi_str=$field_params['rule_multi_str'];
}
}elseif($module=='xpath'){
if($field_params['xpath_multi']&&$field_params['xpath_multi_type']=='list'){
$is_list_data=true;
$list_multi_str=$field_params['xpath_multi_str'];
}
}
}
}
if(!empty($list_multi_str)){
$list_multi_str=str_replace(array('\r','\n'), array("\r","\n"), $list_multi_str);
}
$vals=null;
if(is_array($val)){
@ -1188,9 +1222,11 @@ class Cpattern extends CpatternEvent{
$cont_url_md5=empty($cont_url)?$cur_url_md5:md5($cont_url);
foreach ($vals as $v_k=>$val){
$val=isset($val)?$val:'';
$loopIndex=$is_loop?$v_k:-1;
$this->field_url_complete=true;
$this->field_down_img=true;
$this->field_stop_process=false;
if($is_loop){
@ -1201,14 +1237,33 @@ class Cpattern extends CpatternEvent{
}
}
if(!empty($field_process)){
$val=$this->process_field($field_name,$val,$field_process,$cur_url_md5,$loopIndex,$cont_url_md5);
}
if(!empty($this->config['common_process'])){
$val=$this->process_field($field_name,$val,$this->config['common_process'],$cur_url_md5,$loopIndex,$cont_url_md5);
if($is_list_data){
$val=$val?json_decode($val,true):array();
init_array($val);
foreach ($val as $v_vk=>$v_vv){
if(!empty($field_process)){
$v_vv=$this->process_field($field_name,$v_vv,$field_process,$cur_url_md5,$loopIndex,$cont_url_md5);
}
if(!empty($this->config['common_process'])){
$v_vv=$this->process_field($field_name,$v_vv,$this->config['common_process'],$cur_url_md5,$loopIndex,$cont_url_md5);
}
$val[$v_vk]=$v_vv;
}
$val=implode($list_multi_str, $val);
}else{
if(!empty($field_process)){
$val=$this->process_field($field_name,$val,$field_process,$cur_url_md5,$loopIndex,$cont_url_md5);
}
if(!empty($this->config['common_process'])){
$val=$this->process_field($field_name,$val,$this->config['common_process'],$cur_url_md5,$loopIndex,$cont_url_md5);
}
}
if(isset($this->exclude_cont_urls[$cont_url_md5][$cur_url_md5])){
if(empty($this->first_loop_field)){
@ -1533,10 +1588,10 @@ class Cpattern extends CpatternEvent{
}
$this->used_pagination_urls['url']=array();
$pn_urls=$this->getPaginationUrls('url','',false,$cont_url,$htmlInfo['html']);
if(!empty($pn_urls)){
$nextPnUrl=$this->getPaginationNext('url','',false,$cont_url,$htmlInfo['html']);
if(!empty($nextPnUrl)){
$this->setPaginationFields($cont_url,reset($pn_urls));
$this->setPaginationFields($cont_url,$nextPnUrl);
}
$val_list=array();

View File

@ -70,6 +70,9 @@ class CpatternBase extends CollectBase{
if($configParams['rule_multi_type']=='loop'){
$val=$matchConts;
}elseif($configParams['rule_multi_type']=='list'){
$val=json_encode($matchConts);
}else{
$multiStr=$configParams['rule_multi_str'];
@ -175,7 +178,8 @@ class CpatternBase extends CollectBase{
public function rule_module_xpath_data($configParams,$html){
$vals='';
$vals=array();
$xpathMulti=$configParams['xpath_multi']?true:false;
if(!empty($configParams['xpath'])){
$html=$this->filter_html_tags($html,array('script'));
$dom=new \DOMDocument;
@ -216,23 +220,8 @@ class CpatternBase extends CollectBase{
$nodes = $xPath->query($xpath_q);
$multiStr='';
$is_loop=false;
if(!empty($configParams['xpath_multi'])){
$is_loop='loop'==$configParams['xpath_multi_type']?true:false;
if($is_loop){
$vals=array();
}else{
$multiStr=str_replace(array('\r','\n'), array("\r","\n"), $configParams['xpath_multi_str']);
}
}
$curI=0;
foreach ($nodes as $node){
$curI++;
$val=($curI<=1?'':$multiStr);
$val='';
if($normal_attr){
$val.=$node->nodeValue;
@ -259,15 +248,12 @@ class CpatternBase extends CollectBase{
}
}
if($is_loop){
if($xpathMulti){
$vals[]=$val;
}else{
$vals.=$val;
}
if(empty($configParams['xpath_multi'])){
$vals=$val;
break;
}
}
@ -275,6 +261,25 @@ class CpatternBase extends CollectBase{
libxml_clear_errors();
}
if($xpathMulti){
init_array($vals);
if($configParams['xpath_multi_type']!='loop'){
if($configParams['xpath_multi_type']=='list'){
$vals=json_encode($vals);
}else{
$multiStr=$configParams['xpath_multi_str'];
if(!empty($multiStr)){
$multiStr=str_replace(array('\r','\n'), array("\r","\n"), $multiStr);
}
$vals=implode($multiStr, $vals);
}
}
}
return $vals;
}
@ -705,6 +710,15 @@ class CpatternBase extends CollectBase{
}
$pageConfig['reg_area_module']=$pageConfig['area_module'];
if($isPagination){
init_array($pageConfig['number']);
foreach ($pageConfig['number'] as $k=>$v){
$pageConfig['number'][$k]=intval($v);
}
$pageConfig['number']['inc']=max(1,intval($pageConfig['number']['inc']));
}
if(empty($pageConfig['url_rule_module'])){
@ -1032,5 +1046,23 @@ class CpatternBase extends CollectBase{
}
return $return['data'];
}
/**
* 执行数据处理»接口函数
* @param string $module 模块
* @param string $appName 接口app
* @param string $fieldVal 字段值
* @param string $appConfig 接口配置
* @param array $paramValList 需要替换的数据列表
* @param string $errorTips 错误提示信息
*/
public function execute_plugin_apiapp($module,$appName,$fieldVal,$appConfig,$paramValList=null,$errorTips=null){
$return=model('ApiApp')->execute_app($module,$appName,$fieldVal,$appConfig,$paramValList);
if(empty($return['success'])&&!empty($return['msg'])){
$errorTips=$errorTips?$errorTips:'';
$this->echo_error(htmlspecialchars($return['msg'].$errorTips));
}
return $return['data'];
}
}
?>

View File

@ -45,6 +45,7 @@ class CpatternColl extends CpatternBase{
protected $cache_page_urls=array();
protected $field_url_complete=true;
protected $field_down_img=true;
protected $field_stop_process=false;
/*对象销毁时处理*/
public function __destruct(){
@ -176,9 +177,10 @@ class CpatternColl extends CpatternBase{
if(!is_array($config)){
$config=array();
}
$parentMatches=$this->parent_page_signs2matches($this->parent_page_signs($pageType,$pageName,($isPagination?'pn:':'').'url'));
if(!empty($config['reg_url'])&&!empty($config['reg_url_merge'])){
$parentMatches=$this->parent_page_signs2matches($this->parent_page_signs($pageType,$pageName,($isPagination?'pn:':'').'url'));
if(empty($config['reg_url_module'])){
$cont_urls = $this->get_rule_module_rule_data(array(
@ -228,12 +230,35 @@ class CpatternColl extends CpatternBase{
}
}
if(!is_array($cont_urls)){
$cont_urls=array();
$pnNum=array(
'nums'=>false,
'has'=>$this->pn_number_exists($config['reg_url_merge']),
'ix'=>0,
'count'=>0,
);
if($isPagination&&$config['number']['open']){
$pnNum['nums']=\util\Funcs::increase_nums($config['number']['start'],$config['number']['end'],$config['number']['inc'],$config['number']['desc'],$config['number']['len'],max(count($cont_urls),intval($config['max'])));
$pnNum['count']=count($pnNum['nums']);
}
if(!is_array($cont_urls_matches)){
$cont_urls_matches=array();
if(empty($config['reg_url'])){
if($pnNum['nums']){
$cont_urls=array();
$cont_urls_matches=array();
foreach ($pnNum['nums'] as $k=>$v){
$cont_urls[]=$this->merge_match_signs($parentMatches, $config['reg_url_merge']);
$cont_urls_matches[]=array('match@pn_number'=>$v);
}
}
}
init_array($cont_urls);
init_array($cont_urls_matches);
$doComplete=false;
$doMust=false;
$doBan=false;
@ -258,10 +283,17 @@ class CpatternColl extends CpatternBase{
}
}
$contUrlsCount=count($cont_urls);
$oldContUrls=array();
$urlMatchesMd5s=array();
foreach ($cont_urls as $k=>$contUrl){
if(!isset($contUrl)){
$contUrl='';
}
if($pnNum['nums']){
$oldContUrls[$k]=$contUrl;
}
$urlMatches=$cont_urls_matches[$k];
if(!is_array($urlMatches)){
$urlMatches=array();
@ -277,57 +309,99 @@ class CpatternColl extends CpatternBase{
$doDelete=false;
if(in_array($urlMatchesMd5,$urlMatchesMd5s)){
if(in_array($urlMatchesMd5,$urlMatchesMd5s)||empty($contUrl)||strpos($contUrl,' ')!==false){
$doDelete=true;
}else{
if($doComplete){
if($pnNum['nums']){
$contUrl=\util\Tools::create_complete_url($contUrl, $completeUrlInfo);
$cont_urls[$k]=$contUrl;
}
if($doMust){
if(!preg_match('/'.$config['url_must'].'/'.$this->config['reg_regexp_flags'], $contUrl)){
$doDelete=true;
if($pnNum['has']){
$contUrl=$this->pn_number_replace($contUrl, $pnNum['nums'][$pnNum['ix']]);
}
$urlMatches['@pn_number']=$pnNum['nums'][$pnNum['ix']];
unset($urlMatches['match@pn_number']);
$pnNum['ix']++;
}
if(!$doDelete&&$doBan){
if(preg_match('/'.$config['url_ban'].'/'.$this->config['reg_regexp_flags'], $contUrl)){
$doDelete=true;
}
}
if(!$doDelete&&empty($contUrl)){
$doDelete=true;
}
if(!$doDelete&&!empty($this->config['url_encode'])){
$contUrl=\util\Funcs::url_auto_encode($contUrl, $urlCharset);
$cont_urls[$k]=$contUrl;
}
if(!$doDelete&&strpos($contUrl,' ')!==false){
$doDelete=true;
if(!$doDelete){
$doDelete=$this->_rule_match_urls_url($contUrl,$config,$completeUrlInfo,$urlCharset,$doComplete,$doMust,$doBan);
}
}
if($doDelete){
unset($cont_urls[$k]);
unset($cont_urls_matches[$k]);
unset($oldContUrls[$k]);
}else{
$cont_urls[$k]=$contUrl;
$urlMatchesMd5s[]=$urlMatchesMd5;
$cont_urls_matches[$k]=$urlMatches;
}
}
if($pnNum['nums']&&$contUrlsCount!==count($cont_urls)){
$pnNum['ix']=0;
foreach ($cont_urls as $k=>$contUrl){
if($pnNum['has']){
$contUrl=$this->pn_number_replace($oldContUrls[$k], $pnNum['nums'][$pnNum['ix']]);
}
init_array($cont_urls_matches[$k]);
$cont_urls_matches[$k]['@pn_number']=$pnNum['nums'][$pnNum['ix']];
$pnNum['ix']++;
if($pnNum['has']){
$doDelete=$this->_rule_match_urls_url($contUrl,$config,$completeUrlInfo,$urlCharset,$doComplete,$doMust,$doBan);
if($doDelete){
unset($cont_urls[$k]);
unset($cont_urls_matches[$k]);
}else{
$cont_urls[$k]=$contUrl;
}
}
}
}
return $this->page_convert_url_signs($pageType, $pageName, $isPagination, $cont_urls, $cont_urls_matches, $returnMatch);
}
private function _rule_match_urls_url(&$contUrl,$config,$completeUrlInfo,$urlCharset,$doComplete,$doMust,$doBan){
$doDelete=false;
if($doComplete){
$contUrl=\util\Tools::create_complete_url($contUrl, $completeUrlInfo);
}
if($doMust){
if(!preg_match('/'.$config['url_must'].'/'.$this->config['reg_regexp_flags'], $contUrl)){
$doDelete=true;
}
}
if(!$doDelete&&$doBan){
if(preg_match('/'.$config['url_ban'].'/'.$this->config['reg_regexp_flags'], $contUrl)){
$doDelete=true;
}
}
if(!$doDelete&&empty($contUrl)){
$doDelete=true;
}
if(!$doDelete&&!empty($this->config['url_encode'])){
$contUrl=\util\Funcs::url_auto_encode($contUrl, $urlCharset);
}
if(!$doDelete&&strpos($contUrl,' ')!==false){
$doDelete=true;
}
return $doDelete;
}
/*正则规则匹配数据*/
public function get_rule_module_rule_data($configParams,$html,$parentMatches=array(),$whole=false,$returnMatch=false){
if(!is_array($configParams)){
@ -413,12 +487,17 @@ class CpatternColl extends CpatternBase{
$formData=$this->arrays_to_key_val($pnConfig['url_web']['form_names'], $pnConfig['url_web']['form_vals']);
if(!empty($formData)&&is_array($formData)){
$formParentMatches=$this->page_convert_data_signs($pageType, $pageName, 'pn:form', $formData, true);
$hasPnNum=$this->pn_number_exists($formData);
foreach ($cont_urls as $k=>$v){
$urlFormData=array();
$urlParentMatches=is_array($cont_urls_matches[$k])?array_merge($formParentMatches,$cont_urls_matches[$k]):$formParentMatches;
foreach ($formData as $fk=>$fv){
$urlFormData[$fk]=$this->merge_match_signs($urlParentMatches,$fv);
$fv=$this->merge_match_signs($urlParentMatches,$fv);
if($hasPnNum){
$fv=$this->pn_number_replace($fv,$urlParentMatches['@pn_number']);
}
$urlFormData[$fk]=$fv;
}
$urlsForms[$k]=is_array($urlsForms[$k])?array_merge($urlsForms[$k],$urlFormData):$urlFormData;
}
@ -507,13 +586,18 @@ class CpatternColl extends CpatternBase{
if(!empty($pnConfig['renderer']['types'])){
$renderParentMatches=$this->page_convert_data_signs($pageType, $pageName, 'pn:renderer', $pnConfig['renderer']['contents'], true);
$hasPnNum=$this->pn_number_exists($pnConfig['renderer']['contents']);
foreach ($cont_urls as $k=>$v){
$renderContParentMatches=is_array($cont_urls_matches[$k])?array_merge($renderParentMatches,$cont_urls_matches[$k]):$renderParentMatches;
$renderContent=array();
foreach ($pnConfig['renderer']['contents'] as $rck=>$rcv){
$renderContent[$rck]=$this->merge_match_signs($renderContParentMatches,$rcv);
$rcv=$this->merge_match_signs($renderContParentMatches,$rcv);
if($hasPnNum){
$rcv=$this->pn_number_replace($rcv,$renderContParentMatches['@pn_number']);
}
$renderContent[$rck]=$rcv;
}
$renderContent=array('types'=>$pnConfig['renderer']['types'],'elements'=>$pnConfig['renderer']['elements'],'contents'=>$renderContent);
if($urlRenderList[$k]){
@ -1473,6 +1557,26 @@ class CpatternColl extends CpatternBase{
return $this->get_config('source_is_url')?true:false;
}
public function pn_number_exists($data){
if($data){
if(is_array($data)){
$data=implode('',$data);
}
$data=strpos($data,'[分页序号]')!==false?true:false;
}else{
$data=false;
}
return $data;
}
public function pn_number_replace($str,$val){
if($str){
$val=isset($val)?$val:'';
$str=str_replace('[分页序号]', $val, $str);
}
return $str;
}
/*获取页面代码*/
public function get_page_html($url,$pageType,$pageName,$isPagination=false,$returnInfo=false){
@ -1483,10 +1587,15 @@ class CpatternColl extends CpatternBase{
$pageUrlWeb=$this->get_page_config($pageType,$pageName,'url_web');
$pnConfig=null;
$urlWebConfig=null;
$pnNumberCur='';
if($isPagination){
$pnConfig=$this->get_page_config($pageType,$pageName,'pagination');
$urlWebConfig=$this->pagination_url_web_config($pageUrlWeb,$pnConfig);
if($pnConfig['number']['open']){
$pnNumberCur=\util\Funcs::array_get($this->pn_url_matches,array($pageType,$pageName,md5($this->cur_pagination_urls[$pageSource]),'@pn_number'));
}
}else{
$urlWebConfig=$pageUrlWeb;
@ -1513,6 +1622,12 @@ class CpatternColl extends CpatternBase{
$pnHeaders=$this->page_convert_data_signs($pageType, $pageName, 'pn:header', $pnHeaders);
init_array($pnHeaders);
if(!empty($pnHeaders)){
if($this->pn_number_exists($pnHeaders)){
foreach ($pnHeaders as $k=>$v){
$pnHeaders[$k]=$this->pn_number_replace($v, $pnNumberCur);
}
}
$headers=\util\Funcs::array_key_merge($headers,$pnHeaders);
}
unset($pnHeaders);
@ -1576,6 +1691,12 @@ class CpatternColl extends CpatternBase{
$pnFormData=$this->page_convert_data_signs($pageType, $pageName, 'pn:form', $pnFormData);
init_array($pnFormData);
if(!empty($pnFormData)){
if($this->pn_number_exists($pnFormData)){
foreach ($pnFormData as $k=>$v){
$pnFormData[$k]=$this->pn_number_replace($v, $pnNumberCur);
}
}
$formData=\util\Funcs::array_key_merge($formData,$pnFormData);
}
unset($pnFormData);
@ -1626,6 +1747,12 @@ class CpatternColl extends CpatternBase{
$pnConfig['renderer']['contents']=$this->page_convert_data_signs($pageType, $pageName, 'pn:renderer', $pnConfig['renderer']['contents']);
if($this->pn_number_exists($pnConfig['renderer']['contents'])){
foreach ($pnConfig['renderer']['contents'] as $k=>$v){
$pnConfig['renderer']['contents'][$k]=$this->pn_number_replace($v, $pnNumberCur);
}
}
if(is_array($pnConfig['renderer']['types'])){
init_array($pnConfig['renderer']['elements']);
init_array($pnConfig['renderer']['contents']);

View File

@ -251,6 +251,55 @@ class CpatternEvent extends CpatternColl{
$end=intval($field_params['num_end']);
return rand($start, $end);
}
private $f_m_no_tid;
public function field_module_no($field_params){
static $num=0;
$mcache=\skycaiji\admin\model\CacheModel::getInstance();
$ckey='taskFNo_';
if(empty($this->f_m_no_tid)||$this->f_m_no_tid!=$this->collector['task_id']){
$this->f_m_no_tid=$this->collector['task_id'];
$ckey.=$this->f_m_no_tid.'_'.$field_params['name'];
if($this->is_collecting()){
$cacheData=$mcache->getCache($ckey,'data');
if($cacheData){
$num=intval($cacheData);
}else{
$num=intval($field_params['no_start']);
}
}else{
$num=intval($field_params['no_start']);
}
}else{
$ckey.=$this->f_m_no_tid.'_'.$field_params['name'];
}
$num=$num?:1;
$numStr=$num;
$field_params['no_len']=intval($field_params['no_len']);
if($field_params['no_len']>0){
$numStr=abs($num).'';
$numStr=str_pad($numStr,$field_params['no_len'],'0',STR_PAD_LEFT);
$numStr=($num>=0?'':'-').$numStr;
}
$field_params['no_inc']=intval($field_params['no_inc']);
$num+=$field_params['no_inc']?:1;
if($this->is_collecting()){
$mcache->setCache($ckey,$num);
}
return $numStr;
}
public function field_module_time($field_params){
$val='';
$nowTime=time();
@ -342,6 +391,17 @@ class CpatternEvent extends CpatternColl{
$htmlFilter=array_filter(explode(',',$params['html_filter']));
if(!empty($htmlAllow)){
$delTags=array('script','style','object');
foreach ($delTags as $k=>$v){
if(in_array($v, $htmlAllow)){
unset($delTags[$k]);
}
}
if($delTags){
$fieldVal=$this->filter_html_tags($fieldVal, $delTags);
}
$htmlAllowStr='';
foreach ($htmlAllow as $v){
$htmlAllowStr.='<'.$v.'>';
@ -706,6 +766,15 @@ class CpatternEvent extends CpatternColl{
}
return $fieldVal;
}
public function process_f_apiapp($fieldVal,$params,$curUrlMd5,$loopIndex,$contUrlMd5,$fieldName=''){
init_array($params['apiapp_config']);
$result=$this->execute_plugin_apiapp('process', $params['apiapp_app'], $fieldVal, $params['apiapp_config'], $this->_get_insert_fields(implode("\r\n", $params['apiapp_config']), $curUrlMd5, $loopIndex));
if(isset($result)){
$fieldVal=$result;
}
return $fieldVal;
}
public function process_f_filter($fieldVal,$params,$curUrlMd5,$loopIndex,$contUrlMd5,$fieldName=''){
static $key_list=array();
if(!empty($params['filter_list'])){
@ -914,19 +983,31 @@ class CpatternEvent extends CpatternColl{
$exclude['cond']=$breakCond;
$exclude=json_encode($exclude);
if(!isset($this->exclude_cont_urls[$contUrlMd5])){
$this->exclude_cont_urls[$contUrlMd5]=array();
if($params['if_stop']=='collect'){
$msg=$this->exclude_url_msg($exclude);
$msg=$msg.'»仍采集但跳出处理';
$this->echo_msg($msg,'orange');
$exclude=null;
$this->field_stop_process=true;
}
if(empty($this->first_loop_field)){
if(!empty($exclude)){
$this->exclude_cont_urls[$contUrlMd5][$curUrlMd5]=$exclude;
}else{
if(!isset($this->exclude_cont_urls[$contUrlMd5][$curUrlMd5])){
$this->exclude_cont_urls[$contUrlMd5][$curUrlMd5]=array();
if(!isset($this->exclude_cont_urls[$contUrlMd5])){
$this->exclude_cont_urls[$contUrlMd5]=array();
}
if(empty($this->first_loop_field)){
$this->exclude_cont_urls[$contUrlMd5][$curUrlMd5]=$exclude;
}else{
if(!isset($this->exclude_cont_urls[$contUrlMd5][$curUrlMd5])){
$this->exclude_cont_urls[$contUrlMd5][$curUrlMd5]=array();
}
$this->exclude_cont_urls[$contUrlMd5][$curUrlMd5][$loopIndex]=$exclude;
}
$this->exclude_cont_urls[$contUrlMd5][$curUrlMd5][$loopIndex]=$exclude;
}
}
}
@ -1079,10 +1160,14 @@ class CpatternEvent extends CpatternColl{
if(empty($process)){
return $fieldVal;
}
static $conds=array('filter','if','func','api','download','insert');
static $conds=array('filter','if','func','api','download','insert','apiapp');
static $fnConds=array('translate','tool');
foreach ($process as $params){
if($params['close']){
continue;
}
if(empty($this->first_loop_field)){
if(isset($this->exclude_cont_urls[$contUrlMd5][$curUrlMd5])){
@ -1094,6 +1179,10 @@ class CpatternEvent extends CpatternColl{
return $fieldVal;
}
}
if($this->field_stop_process){
break;
}
$funcName='process_f_'.$params['module'];
if(method_exists($this, $funcName)){
if(in_array($params['module'],$conds)){
@ -1109,6 +1198,35 @@ class CpatternEvent extends CpatternColl{
return $fieldVal;
}
public function process_f_extract($fieldVal,$params){
if('rule'==$params['extract_module']){
$fieldVal=$this->rule_module_rule_data_get(array(
'rule' => $params['extract_rule'],
'rule_merge' => $params['extract_rule_merge'],
'rule_multi' => $params['extract_rule_multi'],
'rule_multi_str' => $params['extract_rule_multi_str'],
'rule_flags'=>'iu',
),$fieldVal,array(),true);
}elseif('xpath'==$params['extract_module']){
$fieldVal=$this->rule_module_xpath_data(array(
'xpath' => $params['extract_xpath'],
'xpath_attr' => $params['extract_xpath_attr'],
'xpath_multi' => $params['extract_xpath_multi'],
'xpath_multi_str' => $params['extract_xpath_multi_str'],
),$fieldVal);
}elseif('json'==$params['extract_module']){
$fieldVal=$this->rule_module_json_data(array(
'json' => $params['extract_json'],
'json_arr' => $params['extract_json_arr'],
'json_arr_implode' => $params['extract_json_arr_implode']
),$fieldVal);
}
return $fieldVal;
}
/**
* 转换起始网址
* @param string $url
@ -1125,21 +1243,9 @@ class CpatternEvent extends CpatternColl{
$val=explode("\t", $match['val']);
if($type=='num'){
$num_start = intval($val[0]);
$num_end = intval($val[1]);
$num_end = max ($num_start,$num_end);
$num_inc = max ( 1, intval($val[2]));
$num_desc =$val[3]?1:0;
if($num_desc){
for($i=$num_end;$i>=$num_start;$i--){
$urls[]=str_replace('__set:param__', $num_start+($i-$num_start)*$num_inc, $fmtUrl);
}
}else{
for($i=$num_start;$i<=$num_end;$i++){
$urls[]=str_replace('__set:param__', $num_start+($i-$num_start)*$num_inc, $fmtUrl);
}
$urls=\util\Funcs::increase_nums($val[0],$val[1],$val[2],$val[3],$val[4]);
foreach ($urls as $k=>$v){
$urls[$k]=str_replace('__set:param__',$v,$fmtUrl);
}
}elseif($type=='letter'){
@ -1165,7 +1271,7 @@ class CpatternEvent extends CpatternColl{
}
}
return $urls;
}if(preg_match('/\{json\:([^\}]*)\}/i',$url,$match)){
}elseif(preg_match('/\{json\:([^\}]*)\}/i',$url,$match)){
$url=preg_replace('/\{json\:([^\}]*)\}/i','',$url);
$jsonRule=trim($match[1]);

View File

@ -210,6 +210,8 @@ class CpatternSingle extends Cpattern{
$this->single_signs_input_urls($isContUrl,true,$pageSigns,$inputedUrls,$input_urls);
$pageSigns=$this->parent_page_signs($pageType,$pageName,'renderer');
$this->single_signs_input_urls($isContUrl,true,$pageSigns,$inputedUrls,$input_urls);
$pageSigns=$this->parent_page_signs($pageType,$pageName,'pn:');
$this->single_signs_input_urls($isContUrl,true,$pageSigns,$inputedUrls,$input_urls);
}
@ -443,6 +445,8 @@ class CpatternSingle extends Cpattern{
$this->single_signs_input_urls(true,true,$pageSigns,$inputedUrls,$input_urls);
$pageSigns=$this->parent_page_signs('url','','renderer');
$this->single_signs_input_urls(true,true,$pageSigns,$inputedUrls,$input_urls);
$pageSigns=$this->parent_page_signs('url','','pn:');
$this->single_signs_input_urls(true,true,$pageSigns,$inputedUrls,$input_urls);
$this->single_urls_parent(true, $input_urls, $inputedUrls, $input_urls);
if(is_array($input_urls['level_url'])){

View File

@ -126,7 +126,7 @@ class Rdb extends Release{
continue;
}
$sqlWhereList=array();
if(!empty($dbTable['op'])){
if(!empty($dbTable['where'])){
$tbWhere=$dbTable['where'];
foreach ($tbWhere['logic'] as $k=>$v){
@ -198,18 +198,35 @@ class Rdb extends Release{
}else{
if(empty($dbTable['op'])){
$status=$mdb->table($table)->insert($tbField);
if($status>0){
$insertTables[]=$table;
if($dbHasSeq){
$autoIds[$table]=$mdb->getLastInsID($sequenceName);
}else{
$autoIds[$table]=$mdb->getLastInsID();
}
}else{
$whereCount=0;
if($sqlWhereList){
throw new \Exception('新增失败');
$mdb=$mdb->table($table);
foreach ($sqlWhereList as $sqlWhere){
if($sqlWhere[0]=='or'){
$mdb=$mdb->whereOr($sqlWhere[1],$sqlWhere[2],$sqlWhere[3]);
}else{
$mdb=$mdb->where($sqlWhere[1],$sqlWhere[2],$sqlWhere[3]);
}
}
$whereCount=$mdb->count();
}
if($whereCount>0){
$this->echo_msg('表'.$table.'新增数据失败:条件已存在记录','orange');
}else{
$status=$mdb->table($table)->insert($tbField);
if($status>0){
$insertTables[]=$table;
if($dbHasSeq){
$autoIds[$table]=$mdb->getLastInsID($sequenceName);
}else{
$autoIds[$table]=$mdb->getLastInsID();
}
}else{
throw new \Exception('新增失败');
}
}
}elseif($dbTable['op']=='update'){
@ -229,7 +246,7 @@ class Rdb extends Release{
$updateTables[]=$table;
}else{
$this->echo_msg('表'.$table.'更新失败','orange');
$this->echo_msg('表'.$table.'更新数据失败:未满足设置的条件','orange');
}
}
}

View File

@ -164,14 +164,16 @@ return array(
'field_module_auto'=>'自动获取',
'field_module_xpath'=>'XPath匹配',
'field_module_words'=>'固定文字',
'field_module_num'=>'随机数字',
'field_module_num'=>'随机数字',
'field_module_no'=>'自增数字',
'field_module_time'=>'时间',
'field_module_list'=>'列表抽取',
'field_module_json'=>'JSON提取',
'field_module_merge'=>'字段组合',
'field_module_extract'=>'字段提取',
'field_module_sign'=>'内容标签',
'process_module_extract'=>'提取内容',
'process_module_html'=>'html标签过滤',
'process_module_insert'=>'插入内容',
'process_module_replace'=>'内容替换',
@ -183,13 +185,13 @@ return array(
'process_module_batch'=>'批量替换',
'process_module_substr'=>'截取字符串',
'process_module_func'=>'使用函数',
'process_module_api'=>'调用接口',
'p_m_if_1'=>'满足条件采集',
'p_m_if_2'=>'满足条件不采集',
'p_m_if_3'=>'不满足条件采集',
'p_m_if_4'=>'不满足条件不采集',
'process_module_api'=>'调用接口',
'process_module_apiapp'=>'接口插件',
'p_m_if_1'=>'满足条件继续操作',
'p_m_if_2'=>'满足条件中断操作',
'p_m_if_3'=>'不满足条件继续操作',
'p_m_if_4'=>'不满足条件中断操作',
'p_m_if_c_has'=>'包含',
'p_m_if_c_nhas'=>'不包含',
@ -368,6 +370,14 @@ return array(
'ds_ix_type_unique'=>'唯一索引',
'ds_ix_type_fulltext'=>'全文索引',
'apiapp_op_variable'=>'变量',
'apiapp_op_request'=>'请求',
'apiapp_variable_m_'=>'直接输入',
'apiapp_variable_m_user'=>'用户输入',
'apiapp_variable_m_extract'=>'提取内容',
'apiapp_variable_m_time'=>'时间',
'apiapp_variable_m_num'=>'随机数字',
'apiapp_variable_m_list'=>'列表抽取',
'release_upgrade'=>'插件版本过低,请升级插件 <a href="https://www.skycaiji.com/manual/doc/release_upgrade" target="_blank">升级教程</a>',
);

View File

@ -0,0 +1,966 @@
<?php
/*
|--------------------------------------------------------------------------
| SkyCaiji (蓝天采集器)
|--------------------------------------------------------------------------
| Copyright (c) 2018 https://www.skycaiji.com All rights reserved.
|--------------------------------------------------------------------------
| 使用协议 https://www.skycaiji.com/licenses
|--------------------------------------------------------------------------
*/
namespace skycaiji\admin\model;
class ApiApp extends \skycaiji\common\model\BaseModel{
public $apiPath;
public $apiModules=array(
'process'=>array (
'name'=>'数据处理',
'loc'=>'任务»采集器设置»数据处理»接口插件',
),
);
public function __construct($data = []){
parent::__construct($data);
$this->apiPath=config('plugin_path').DIRECTORY_SEPARATOR.'api'.DIRECTORY_SEPARATOR;
}
public function getConfigByApp($app){
$config=array();
$apiData=$this->where('app',$app)->find();
if($apiData){
$config=$this->compatible_config($apiData['config']);
}
init_array($config);
return $config;
}
/*添加插件*/
public function addApp($app,$code=''){
if(empty($app['app'])){
return false;
}
$app['module']=$this->format_module($app['module']);
if(!$this->right_module($app['module'])){
return false;
}
$app['uptime']=$app['uptime']>0?$app['uptime']:time();
if(!preg_match('/^([A-Z][a-z0-9]*){2}$/',$app['app'])){
return false;
}
$codeFmt=\util\Funcs::strip_phpcode_comment($code);
if(!preg_match('/^\s*namespace\s+plugin\\\api\b/im',$codeFmt)){
return false;
}
if(!preg_match('/class\s+'.$app['app'].'\b/i',$codeFmt)){
return false;
}
$appData=$this->where('app',$app['app'])->find();
$success=false;
if(!empty($appData)){
$this->strict(false)->where('app',$app['app'])->update($app);
$success=true;
}else{
$app['enable']=1;
$app['id']=$this->insertApp($app);
$success=$app['id']>0?true:false;
}
if($success){
$appPath=config('plugin_path').'/api';
if(!empty($code)){
write_dir_file($appPath.'/'.$app['module'].'/'.ucfirst($app['app']).'.php', $code);
}
}
return $success;
}
/*添加入库*/
public function insertApp($data){
$data=is_array($data)?$data:array();
$data['module']=$this->format_module($data['module']);
$data['name']=strip_tags($data['name']);
$data['addtime']=time();
$data['enable']=intval($data['enable']);
$data['enable']=$data['enable']>0?1:0;
$data['uptime']=$data['uptime']>0?$data['uptime']:time();
return $this->strict(false)->insert($data,false,true);
}
/*创建插件并入库*/
public function createApp($module,$app,$appData=array()){
$module=$this->format_module($module);
$appData['name']=$this->format_str($appData['name']);
$name=$appData['name'];
if(!empty($appData['name'])){
$appData['name']="/**\r\n * ".$appData['name']."\r\n */";
}else{
$appData['name']='';
}
init_array($appData['ops']);
$_ops=$appData['ops'];
foreach ($_ops as $k=>$v){
$v=url_b64decode($v);
$v=json_decode($v,true);
init_array($v);
if($v['module']=='variable'){
$variable=$v['config'];
init_array($variable);
$varModule=$variable['module']?:'value';
$variable=array(
'name'=>$variable['name'],
'desc'=>$variable['desc'],
'module'=>$variable['module'],
$varModule=>$variable[$varModule],
'func'=>$variable['func'],
);
$v['config']=$variable;
}
$v=var_export($v,true);
$v=preg_replace_callback('/^(\s*)(array|\'|\)|\d+\s*\=\>)/m', function($matches){
$returnStr="\t\t";
for($i=0;$i<(strlen($matches[1])/2);$i++){
$returnStr.="\t";
}
return $returnStr.$matches[2];
},$v);
$v=preg_replace('/\s+array\s*\(/i', 'array (', $v);
$_ops[$k]="\t\t".$v.", \r\n";
}
$_ops=" array (\r\n".rtrim(implode('',$_ops))."\r\n\t)";
$isNew=true;
$apiFile=$this->app_filename($module,$app);
if(file_exists($apiFile)){
$appClass=$this->app_import_class($module, $app);
if(!empty($appClass)){
$isNew=false;
}
}
$apiCode='';
if($isNew){
$apiCode=file_get_contents(config('app_path').'/public/api_app/class.tpl');
$apiCode=str_replace(array('{$module}','{$classname}','{$name}','{$content}','{$ops}'), array($module,$app,$appData['name'],$appData['content'],$_ops), $apiCode);
}else{
$apiCode=file_get_contents($apiFile);
if(preg_match('/\bpublic\s*\$_ops\s*\=[\s\S]+?\)\s*;/i',$apiCode)){
$apiCode=preg_replace('/\bpublic\s*\$_ops\s*\=[\s\S]+?\)\s*;/i', 'public $_ops ='.$_ops.';', $apiCode);
}else{
$apiCode=preg_replace('/^\s*class\s+'.$app.'\s*\{/mi', "$0\r\n\tpublic \$_ops ={$_ops};", $apiCode);
}
if(preg_match('/\bpublic\s*\$_content\s*\=[\s\S]+?EOF\;/i',$apiCode)){
$apiCode=preg_replace('/\bpublic\s*\$_content\s*\=[\s\S]+?EOF\;/i', "public \$_content = <<<EOF\r\n{$appData['content']}\r\nEOF;", $apiCode);
}else{
$apiCode=preg_replace('/^\s*class\s+'.$app.'\s*\{/mi', "$0\r\n\tpublic \$_content = <<<EOF\r\n{$appData['content']}\r\nEOF;", $apiCode);
}
}
if(!write_dir_file($apiFile,$apiCode)){
return false;
}
$apiData=$this->where('app',$app)->find();
if(!empty($apiData)){
$this->where('id',$apiData['id'])->update(array('name'=>$name,'uptime'=>time()));
return $apiData['id'];
}else{
return $this->insertApp(array('module'=>$module,'app'=>$app,'name'=>$name,'enable'=>1));
}
}
public function check_variable_name($name){
$result=return_result('');
if(empty($name)){
$result['msg']='变量名称不能为空!';
}elseif(!preg_match('/^[\x{4e00}-\x{9fa5}\w\-]+$/u', $name)){
$result['msg']='变量名称只能由汉字、字母、数字和下划线组成';
}else{
$result['success']=true;
}
return $result;
}
public function check_request_name($name){
$result=return_result('');
if(empty($name)){
$result['msg']='请求名称不能为空!';
}elseif(!preg_match('/^[\x{4e00}-\x{9fa5}\w\-]+$/u', $name)){
$result['msg']='请求名称只能由汉字、字母、数字和下划线组成';
}else{
$result['success']=true;
}
return $result;
}
public function filter_variable_func($funcConfig){
init_array($funcConfig);
init_array($funcConfig['names']);
init_array($funcConfig['params']);
foreach ($funcConfig['names'] as $k=>$v){
if(empty($v)||!preg_match('/^[a-z\_]\w*$/i', $v)){
unset($funcConfig['names'][$k]);
unset($funcConfig['params'][$k]);
}
}
$funcConfig['names']=array_values($funcConfig['names']);
$funcConfig['params']=array_values($funcConfig['params']);
return $funcConfig;
}
public function format_module($module){
$module=strtolower($module);
return $module;
}
public function format_appname($app){
return ucfirst($app);
}
public function format_copyright($copyright){
return ucfirst(strtolower($copyright));
}
public function format_identifier($identifier){
return ucfirst(strtolower($identifier));
}
public function format_str($str){
$str=strip_tags($str);
$str=preg_replace('/(\/\*+)|(\*+\/)/', '', $str);
return $str;
}
public function right_module($module){
if(empty($this->apiModules[$module])){
return false;
}else{
return true;
}
}
public function right_copyright($copyright){
if(preg_match('/^[a-z]+[a-z0-9]*$/i',$copyright)){
return true;
}else{
return false;
}
}
public function right_identifier($identifier){
if(preg_match('/^[a-z]+[a-z0-9]*$/i',$identifier)){
return true;
}else{
return false;
}
}
public function app_filename($module,$app){
$module=$this->format_module($module);
$app=$this->format_appname($app);
return $this->apiPath.$module.DIRECTORY_SEPARATOR.$app.'.php';
}
public function app_classname($module,$app){
$module=$this->format_module($module);
$app=$this->format_appname($app);
return '\\plugin\\api\\'.$module.'\\'.$app;
}
public function app_name($copyright,$identifier){
$copyright=$this->format_copyright($copyright);
$identifier=$this->format_identifier($identifier);
return $identifier.$copyright;
}
public function app_file_exists($module,$app){
$fileName=$this->app_filename($module,$app);
return file_exists($fileName)?true:false;
}
public function app_import_class($module,$app){
$appClass=$this->app_classname($module,$app);
if(\util\Funcs::class_exists_clean($appClass)){
$appClass=new $appClass();
}else{
$appClass=null;
}
return $appClass;
}
public function get_api_module_val($module,$key){
if(is_array($this->apiModules[$module])){
return $this->apiModules[$module][$key];
}else{
return null;
}
}
public function get_app_content($appClass){
$content='';
if($appClass&&is_object($appClass)&&property_exists($appClass,'_content')){
$content=$appClass->_content;
}
return $content;
}
public function get_app_ops($appData,$appClass=null,$isUser=false,$isUserGlobal=false){
$ops=null;
if(!empty($appData)&&empty($appClass)){
$appClass=$this->app_import_class($appData['module'],$appData['app']);
}
if($appClass&&is_object($appClass)&&property_exists($appClass,'_ops')){
$ops=$appClass->_ops;
init_array($ops);
if($isUser){
$userOps=array();
foreach ($ops as $k=>$v){
init_array($v);
if($v['module']=='variable'){
init_array($v['config']);
$vconfig=$v['config'];
if($vconfig['module']=='user'){
init_array($vconfig['user']);
if($isUserGlobal){
if(empty($vconfig['user']['global'])){
continue;
}
}else{
if(!empty($vconfig['user']['global'])){
continue;
}
}
if($vconfig['user']['tag']=='select'){
$tagSelect=array();
if(preg_match_all('/[^\r\n]+/',$vconfig['user']['tag_select'],$matches)){
foreach ($matches[0] as $match){
if(strpos($match,'=')!==false){
list($tsk,$tsv)=explode('=',$match,2);
if(is_null($tsk)){
$tsk=$tsv;
}
$tagSelect[$tsk]=$tsv;
}else{
$tagSelect[$match]=$match;
}
}
}
$vconfig['user']['tag_select']=$tagSelect;
}
if(!is_empty($vconfig['user']['default'],true)){
if($vconfig['user']['tag']=='radio'){
$vconfig['user']['default']=intval($vconfig['user']['default'])>0?1:0;
}
}
$vconfig['name_key']=md5($vconfig['name']);
$userOps[]=$vconfig;
}
}
}
$ops=$userOps;
}
}
init_array($ops);
return $ops;
}
public function get_app_class($module,$app,$options=array()){
$config=array();
$module=$this->format_module($module);
$config['module']=$module;
$config['app']=$app;
$config['ops']=array();
$config['content']='';
if(preg_match('/^(\w+?)([A-Z])(\w*)$/',$app,$mapp)){
$config['identifier']=$mapp[1];
$config['copyright']=$mapp[2].$mapp[3];
}
$filename=$this->app_filename($module,$app);
if(file_exists($filename)){
$appClass=$this->app_import_class($module,$app);
if($appClass){
$config['filename']=$filename;
$config['ops']=$this->get_app_ops(null,$appClass);
$config['content']=$this->get_app_content($appClass);
}
}
return $config;
}
public function compatible_config($config){
if(!is_array($config)){
$config=unserialize($config?:'');
}
init_array($config);
init_array($config['global']);
return $config;
}
/**
* 执行接口插件
* @param string $module 模块
* @param string $appName 接口app
* @param string $fieldVal 字段值
* @param string $appConfig 输入的配置
* @param array $paramValList 所有参数值(调用参数时使用)
*/
public function execute_app($module,$appName,$fieldVal,$appConfig,$paramValList=null,$isTest=false){
static $app_class_list=array('process'=>array());
static $app_config_globals=array('process'=>array());
$class_list=&$app_class_list[$module];
$config_globals=&$app_config_globals[$module];
$options=$this->apiModules[$module];
$result=return_result('',false,array('data'=>null));
if(!isset($class_list[$appName])){
$class=$this->app_classname($module,$appName);
if(!\util\Funcs::class_exists_clean($class)){
$class_list[$appName]=1;
}else{
$enable=$this->field('enable')->where(array('app'=>$appName,'module'=>$module))->value('enable');
if($enable){
$class=new $class();
$class_list[$appName]=$class;
}else{
$class_list[$appName]=2;
}
}
}
if(is_object($class_list[$appName])){
$opVals=array();
$ops=$this->get_app_ops(null,$class_list[$appName]);
$userDefVals=array();
foreach ($ops as $op){
if($op['module']=='variable'){
init_array($op['config']);
if($op['config']['module']=='user'){
init_array($op['config']['user']);
$userDefVals[md5($op['config']['name'])]=$op['config']['user']['default'];
}
}
}
foreach ($appConfig as $k=>$v){
if(is_empty($v,true)){
if(isset($userDefVals[$k])){
$appConfig[$k]=$userDefVals[$k];
}
}
}
foreach ($ops as $op){
$opVal='';
init_array($op['config']);
$opConfig=$op['config'];
$opMsg=sprintf('云端»仓库»接口插件»%s»开发»%s:%s»',$appName,lang('apiapp_op_'.$op['module']),$opConfig['name']);
if($op['module']=='variable'){
$opModule=$opConfig['module']?$opConfig['module']:'value';
$opMethod='_variable_module_'.$opModule;
if(method_exists($this,$opMethod)){
if($opModule=='user'){
if(!isset($config_globals[$appName])){
$apiConfig=$this->getConfigByApp($appName);
$config_globals[$appName]=$apiConfig['global'];
foreach ($config_globals[$appName] as $k=>$v){
if(is_empty($v,true)){
if(isset($userDefVals[$k])){
$config_globals[$appName][$k]=$userDefVals[$k];
}
}
}
}
$opVal=$this->_variable_module_user($opConfig,$appConfig,$config_globals[$appName],$fieldVal,$paramValList);
}elseif($opModule=='value'||$opModule=='extract'){
$opVal=$this->$opMethod($opConfig,$opVals);
}else{
$opVal=$this->$opMethod($opConfig);
}
}
init_array($opConfig['func']);
$opFunc=$opConfig['func'];
if(!empty($opFunc)&&!empty($opFunc['open'])){
$opFunc=$this->filter_variable_func($opFunc);
foreach ($opFunc['names'] as $fk=>$fv){
$opVals['variable:###']=$opVal;
$funcResult=$this->_op_variable_func($module,$appName,$class_list[$appName],$fv,$opFunc['params'][$fk],$opVals);
if(!$funcResult['success']){
$funcResult['msg']=$opMsg.$funcResult['msg'];
if($isTest){
$funcResult['data']=array('ops'=>$opVals);
}
return $funcResult;
break;
}else{
$opVal=$funcResult['data'];
}
}
}
$opVals['variable:###']=$opVal;
}elseif($op['module']=='request'){
$requestResult=$this->_op_request($opConfig,$opVals);
if(!$requestResult['success']){
$requestResult['msg']=$opMsg.$requestResult['msg'];
if($isTest){
$requestResult['data']=array('ops'=>$opVals);
}
return $requestResult;
break;
}else{
$opVal=$requestResult['data'];
}
}
$opVals[$op['module'].':'.$opConfig['name']]=$opVal;
}
$content=$this->get_app_content($class_list[$appName]);
if($content){
$content=$class_list[$appName]->_content;
$content=$this->_op_replace_vars($content,$opVals);
$content=$this->_op_replace_requests($content,$opVals);
}
$result['success']=true;
if($isTest){
$result['data']=array('content'=>$content,'ops'=>$opVals);
}else{
$result['data']=$content;
}
}else{
$msg=$options['loc'].'»';
if($class_list[$appName]==1){
$msg.='不存在插件:';
}elseif($class_list[$appName]==2){
$msg.='已禁用插件:';
}else{
$msg.='无效的插件:';
}
$result['msg']=$msg.$appName;
}
return $result;
}
private function _op_variable_func($module,$appName,$appClass,$funcName,$funcParam,$opVals){
static $func_param_num_list=array('process'=>array());
$param_num_list=&$func_param_num_list[$module];
if(is_empty($funcParam,true)){
$funcParam=array($opVals['variable:###']);
}else{
static $txt_list=array();
$txtMd5=md5($funcParam);
if(!isset($txt_list[$txtMd5])){
if(preg_match_all('/[^\r\n]+/',$funcParam,$mtxt)){
$txt_list[$txtMd5]=$mtxt[0];
}else{
$txt_list[$txtMd5]=array();
}
}
$funcParam=$txt_list[$txtMd5];
foreach ($funcParam as $k=>$v){
$funcParam[$k]=$this->_op_replace_vars($v,$opVals,true);
}
}
$result=return_result('',false,array('data'=>null));
if(!empty($funcParam)&&is_array($funcParam)){
$options = $this->apiModules[$module];
$funcTips='函数:'.$funcName;
try {
$callback=null;
$paramNum=array();
if(method_exists($appClass,$funcName)){
$callback=array($appClass,$funcName);
$appFuncName=$appName.':'.$funcName;
if(!isset($param_num_list[$appFuncName])){
$refMethod=(new \ReflectionClass($appClass))->getMethod($funcName);
$param_num_list[$appFuncName]=array(
'num'=>intval($refMethod->getNumberOfParameters()),
'required'=>intval($refMethod->getNumberOfRequiredParameters()),
);
}
$paramNum=$param_num_list[$appFuncName];
}elseif(function_exists($funcName)){
$callback=$funcName;
if(!isset($param_num_list[$funcName])){
$refFunc=new \ReflectionFunction($funcName);
$param_num_list[$funcName]=array(
'num'=>intval($refFunc->getNumberOfParameters()),
'required'=>intval($refFunc->getNumberOfRequiredParameters()),
);
}
$paramNum=$param_num_list[$funcName];
}
if($callback){
$paramCount=count($funcParam);
if($paramCount<$paramNum['required']){
$result['msg']=$funcTips.'»至少传入'.$paramNum['required'].'个参数';
}else{
if($paramCount>$paramNum['num']){
$funcParam=array_slice($funcParam,0,$paramNum['num']);
}
$result['data']=call_user_func_array($callback, $funcParam);
$result['success']=true;
}
}else{
$result['msg']=$funcTips.='»不存在';
}
}catch (\Exception $ex){
$result['success']=false;
$result['msg']=$funcTips.'»运行错误:'.$ex->getMessage();
}
}
return $result;
}
private function _op_replace_vars($data,$opVals,$def=false){
if($data){
$replace=array();
if(preg_match_all('/\[\x{53d8}\x{91cf}\:(.+?)\]/u',$data,$replace)){
$replace=$replace[1];
$replace=array_unique($replace);
}
init_array($replace);
$replaceData=array();
if($def){
$replaceData['###']=$opVals['variable:###'];
}
foreach ($replace as $v){
$replaceData['[变量:'.$v.']']=$opVals['variable:'.$v];
}
$data=str_replace(array_keys($replaceData), array_values($replaceData), $data);
}
return $data;
}
private function _op_replace_requests($data,$opVals){
if($data){
$replace=array();
if(preg_match_all('/\[\x{8bf7}\x{6c42}\:(.+?)\]/u',$data,$replace)){
$replace=$replace[1];
$replace=array_unique($replace);
}
init_array($replace);
$replaceData=array();
foreach ($replace as $v){
$replaceData['[请求:'.$v.']']=$opVals['request:'.$v];
}
$data=str_replace(array_keys($replaceData), array_values($replaceData), $data);
}
return $data;
}
private function _op_request($config,$varVals){
init_array($config);
static $retryCur=0;
$retryMax=intval($config['retry']);
$retryParams=null;
if($retryMax>0){
$retryParams=array(0=>$config,1=>$varVals);
}
$result=return_result('',false,array('data'=>null));
$url=$this->_op_replace_vars($config['url'],$varVals);
if(\util\Funcs::is_right_url($url)){
$charset=$config['charset']=='custom'?$config['charset_custom']:$config['charset'];
$charset=$charset?:'utf-8';
$url=\util\Funcs::url_auto_encode($url,$charset);
$curlopts=array();
$encode=$config['encode']=='custom'?$config['encode_custom']:$config['encode'];
if($encode){
$curlopts[CURLOPT_ENCODING]=$encode;
}
$postData=array();
init_array($config['param_names']);
init_array($config['param_vals']);
foreach ($config['param_names'] as $k=>$v){
if(empty($v)){
continue;
}
$postData[$v]=$this->_op_replace_vars($config['param_vals'][$k],$varVals);
}
$headers=array();
init_array($config['header_names']);
init_array($config['header_vals']);
foreach ($config['header_names'] as $k=>$v){
if(empty($v)){
continue;
}
$headers[$v]=$this->_op_replace_vars($config['header_vals'][$k],$varVals);
}
if($config['content_type']){
$headers['content-type']=$config['content_type'];
}
if($config['type']=='post'){
$postData=empty($postData)?true:$postData;
}else{
$url=\util\Funcs::url_params_charset($url,$postData,$charset);
$postData=null;
}
$config['timeout']=intval($config['timeout']);
$config['timeout']=$config['timeout']>0?$config['timeout']:60;
$cacheKey='';
$config['cache']=intval($config['cache'])*60;
if($config['cache']>0){
$cacheKey=md5(serialize(array($url,$charset,$encode,$headers,$postData)));
$cacheData=\util\Tools::cache_file('api_request',$cacheKey);
init_array($cacheData);
if(!empty($cacheData)&&(abs(time()-$cacheData['time'])<=$config['cache'])){
return $cacheData['data'];
}
}
$htmlInfo=get_html($url,$headers,array('timeout'=>$config['timeout'],'return_body'=>1,'curlopts'=>$curlopts),$charset,$postData,true);
init_array($htmlInfo);
$config['interval']=intval($config['interval']);
if($config['interval']>0){
usleep($config['interval']*1000);
}
if(!empty($htmlInfo['ok'])){
$retryCur=0;
$result['success']=true;
$result['data']=$htmlInfo['html'];
if($cacheKey){
\util\Tools::cache_file('api_request',$cacheKey,array('time'=>time(),'data'=>$result));
}
}else{
if($retryMax>0&&$retryCur<$retryMax){
$retryCur++;
$config['wait']=intval($config['wait']);
if($config['wait']>0){
sleep($config['wait']);
}
$result=$this->_op_request($retryParams[0], $retryParams[1]);
}else{
$retryCur=0;
if(is_array($htmlInfo)){
if($htmlInfo['error']&&is_array($htmlInfo['error'])){
$result['msg']='Curl Error '.$htmlInfo['error']['no'].': '.$htmlInfo['error']['msg'];
}elseif($htmlInfo['html']){
$result['msg']=$htmlInfo['html'];
}
}
}
}
}else{
$result['msg']='无效网址:'.$url;
}
return $result;
}
private function _variable_module_value($config,$varVals){
$config=$config['value'];
init_array($config);
return $this->_op_replace_vars($config['value'],$varVals);
}
private function _variable_module_extract($config,$opVals){
$config=$config['extract'];
init_array($config);
$content=$config['source']?$opVals[$config['source']]:'';
$val='';
if($content){
static $cpatternBase=null;
if(!isset($cpatternBase)){
$cpatternBase=controller('CpatternBase','event');
}
if($config['type']=='rule'){
$val = $cpatternBase->rule_module_rule_data_get(array(
'rule' => $config['rule'],
'rule_merge' => $config['rule_merge'],
'rule_multi' => $config['rule_multi'],
'rule_multi_str' => $config['rule_multi_str'],
'rule_flags'=>'iu',
), $content,array(),true);
}elseif($config['type']=='xpath'){
$val = $cpatternBase->rule_module_xpath_data(array(
'xpath' => $config['xpath'],
'xpath_attr' => $config['xpath_attr'],
'xpath_multi' => $config['xpath_multi'],
'xpath_multi_str' => $config['xpath_multi_str'],
), $content);
}elseif($config['type']=='json'){
$val = $cpatternBase->rule_module_json_data(array(
'json' => $config['json'],
'json_arr' => $config['json_arr'],
'json_arr_implode' => $config['json_arr_implode'],
), $content);
}
}
return $val;
}
private function _variable_module_time($config){
$config=$config['time'];
init_array($config);
$val='';
$nowTime=time();
$start=empty($config['start'])?$nowTime:strtotime($config['start']);
$end=empty($config['end'])?$nowTime:strtotime($config['end']);
$time=rand($start,$end);
if(empty($config['stamp'])){
$fmt=empty($config['format'])?'Y-m-d H:i':
str_replace(array('[年]','[月]','[日]','[时]','[分]','[秒]'), array('Y','m','d','H','i','s'), $config['format']);
$val=date($fmt,$time);
}else{
$val=$time;
}
return $val;
}
private function _variable_module_num($config){
$config=$config['num'];
init_array($config);
$start=intval($config['start']);
$end=intval($config['end']);
return rand($start, $end);
}
private function _variable_module_list($config){
$config=$config['list'];
init_array($config);
static $list=array();
$key=md5($config['data']);
if(!isset($list[$key])){
if(preg_match_all('/[^\r\n]+/',$config['data'],$strList)){
$strList=$strList[0];
}
init_array($strList);
$list[$key]=$strList;
}
$strList=$list[$key];
$val='';
if(!empty($strList)){
if(empty($config['type'])){
$randi=array_rand($strList,1);
$val=$strList[$randi];
}else{
static $keyIndexs=array();
$isAsc=$config['type']=='asc'?true:false;
$endIndex=count($strList)-1;
if(isset($keyIndexs[$key])){
$curIndex=intval($keyIndexs[$key]);
}else{
$curIndex=$isAsc?0:$endIndex;
}
if($isAsc){
if($curIndex>$endIndex){
$curIndex=0;
}
$val=$strList[$curIndex];
$curIndex++;
}else{
if($curIndex<0){
$curIndex=$endIndex;
}
$val=$strList[$curIndex];
$curIndex--;
}
$keyIndexs[$key]=$curIndex;
}
}
return $val;
}
private function _variable_module_user($config,$appConfig,$globalConfig,$defaultVal,$paramValList){
$nameKey=md5($config['name']);
$config=$config['user'];
init_array($config);
init_array($appConfig);
init_array($globalConfig);
if($config['global']){
return $globalConfig[$nameKey];
}else{
$configStr=$appConfig[$nameKey];
$fieldRule='/\[\x{5b57}\x{6bb5}\:(.+?)\]/u';
$configStr=\util\Funcs::txt_replace_params(false, false, $configStr, $defaultVal, $fieldRule, $paramValList);
return $configStr;
}
}
}
?>

View File

@ -199,13 +199,19 @@ class Collector extends \skycaiji\common\model\BaseModel{
}
}
public static function echo_msg_end_js($isTimeout=false,$errorMsg=null){
public static function echo_msg_end_js($isBreak=false,$errorMsg=null){
$vars='"'.self::url_collector_process().'"';
if($isTimeout){
if($isBreak){
$webServer=\util\Funcs::web_server_name();
$webServer=$webServer?:'web';
$errorMsg='运行中断了,请修改'.$webServer.'服务器的超时时间或将采集运行模式设置为<a href="'.url('admin/setting/caiji').'" target="_blank">cli命令行</a>';
if(g_sc_c('caiji','server')){
$errorMsg='运行中断';
}else{
$webServer=\util\Funcs::web_server_name();
$webServer=$webServer?:'web';
$errorMsg='运行中断了,请修改'.$webServer.'服务器的超时时间或将采集运行模式设置为<a href="'.url('admin/setting/caiji').'" target="_blank">cli命令行</a>';
}
}
if($errorMsg){
$errorMsg=url_b64encode($errorMsg);

View File

@ -150,7 +150,7 @@ class DbCommon{
}
}
}else{
$fields=$this->db()->getFields($tableName);
$fields=$this->db()->getFields($tableName,true);
if(!empty($fields)){
foreach ($fields as $k=>$v){
$tb_fields[$k]=array_change_key_case($v,CASE_LOWER);

View File

@ -138,6 +138,7 @@ class FuncApp extends \skycaiji\common\model\BaseModel{
$success=true;
}else{
$func['enable']=1;
$func['id']=$this->insertApp($func);
$success=$func['id']>0?true:false;
}

View File

@ -257,7 +257,7 @@ class ProxyIp extends \skycaiji\common\model\BaseModel {
'type' => $api ['api_type']?$api ['api_type']:'',
'user' => $api ['api_user']?$api ['api_user']:'',
'pwd' => $api ['api_pwd']?$api ['api_pwd']:'',
'group_id' => $api ['api_group_id']?$api ['api_group_id']:'',
'group_id' => $api ['api_group_id']?$api ['api_group_id']:0,
) );
if(!empty($ips)){

View File

@ -12,8 +12,11 @@
<div class="nav-tabs-custom" id="chart_date">
<ul class="nav nav-tabs">
<li class="active"><a href="javascript:;" data-chart-op="today">今日</a></li>
<li><a href="javascript:;" data-chart-op="yesterday">昨日</a></li>
<li><a href="javascript:;" data-chart-op="this_month">本月</a></li>
<li><a href="javascript:;" data-chart-op="last_month">上月</a></li>
<li><a href="javascript:;" data-chart-op="this_year">今年</a></li>
<li><a href="javascript:;" data-chart-op="last_year">去年</a></li>
<li><a href="javascript:;" data-chart-op="years">全部</a></li>
</ul>
<div class="tab-content" style="padding-top:0;padding-bottom:0;">

View File

@ -18,7 +18,7 @@
<table id="list_table" class="table table-hover datatable">
<thead>
<tr>
<th class="chk">{$Think.lang.select}</th>
<th class="chk">ID</th>
<th class="url">源网址</th>
<th>已发布至</th>
<th>任务名</th>
@ -30,7 +30,7 @@
<tbody>
{foreach name="dataList" item="item"}
<tr>
<td class="chk"><input type="checkbox" name="ids[]" value="{$item['id']}" /></td>
<td class="chk"><label class="checkbox-inline"><input type="checkbox" name="ids[]" value="{$item['id']}" /><small>{$item['id']}</small></label></td>
<td class="url"><a href="{$item['url']}" target="_blank">{$item['url']}</a></td>
<td class="desc">
{if empty($item['status'])}

View File

@ -81,7 +81,7 @@
<li><a href="{:url('admin/dataapi/list')}"><i class="fa fa-circle-o"></i> 数据接口</a></li>
</ul>
</li>
<li class="treeview{$curMenu['store']}{$curMenu['mystore']}{$curMenu['provider']}">
<li class="treeview{$curMenu['store']}{$curMenu['mystore']}{$curMenu['provider']}{$curMenu['develop']}">
<a href="#">
<i class="fa fa-cloud"></i> <span>云端</span>
<span class="pull-right-container">
@ -91,19 +91,34 @@
<ul class="treeview-menu">
<li><a href="{:url('admin/mystore/store')}" target="_blank"><i class="fa fa-circle-o"></i> 云平台</a></li>
<li><a href="{:url('admin/provider/list')}"><i class="fa fa-circle-o"></i> 第三方</a></li>
<li class="treeview menu-open">
<a href="#"><i class="fa fa-circle-o"></i> 已下载
<li class="treeview{$curMenu['develop']?'':' menu-open cur-menu'}">
<a href="#"><i class="fa fa-circle-o"></i> 仓库
<span class="pull-right-container">
<i class="fa fa-angle-left pull-right"></i>
</span>
</a>
<ul class="treeview-menu" style="display:block;">
<ul class="treeview-menu">
<li><a href="{:url('admin/mystore/rule')}"><i class="fa fa-circle-o"></i> 采集规则</a></li>
<li><a href="{:url('admin/mystore/releaseApp')}"><i class="fa fa-circle-o"></i> 发布插件</a></li>
<li><a href="{:url('admin/mystore/funcApp')}"><i class="fa fa-circle-o"></i> 函数插件</a></li>
<li><a href="{:url('admin/mystore/apiApp')}"><i class="fa fa-circle-o"></i> 接口插件</a></li>
<li><a href="{:url('admin/mystore/releaseApp')}"><i class="fa fa-circle-o"></i> 发布插件</a></li>
<li><a href="{:url('admin/mystore/app')}"><i class="fa fa-circle-o"></i> 应用程序</a></li>
</ul>
</li>
<li class="treeview{$curMenu['develop']}">
<a href="#"><i class="fa fa-circle-o"></i> 开发
<span class="pull-right-container">
<i class="fa fa-angle-left pull-right"></i>
</span>
</a>
<ul class="treeview-menu">
<li><a href="{:url('admin/develop/func')}"><i class="fa fa-circle-o"></i> 函数插件</a></li>
<li><a href="{:url('admin/develop/api')}"><i class="fa fa-circle-o"></i> 接口插件</a></li>
<li><a href="{:url('admin/develop/releaseCms')}"><i class="fa fa-circle-o"></i> 发布插件</a></li>
<li><a href="{:url('admin/develop/app')}"><i class="fa fa-circle-o"></i> 应用程序</a></li>
<li><a href="{:url('admin/develop/editor')}"><i class="fa fa-edit"></i> 插件编辑器</a></li>
</ul>
</li>
</ul>
</li>
<li class="treeview{$curMenu['user']}">
@ -117,27 +132,14 @@
<li><a href="{:url('admin/user/list')}"><i class="fa fa-circle-o"></i> {$Think.lang.user_list}</a></li>
</ul>
</li>
<li class="treeview{$curMenu['develop']}{$curMenu['tool']}">
<li class="treeview{$curMenu['tool']}">
<a href="#">
<i class="fa fa-wrench"></i> <span>工具&amp;开发</span>
<i class="fa fa-wrench"></i> <span>工具</span>
<span class="pull-right-container">
<i class="fa fa-angle-left pull-right"></i>
</span>
</a>
<ul class="treeview-menu">
<li class="treeview{$curMenu['develop']}">
<a href="#"><i class="fa fa-circle-o"></i> 开发
<span class="pull-right-container">
<i class="fa fa-angle-left pull-right"></i>
</span>
</a>
<ul class="treeview-menu">
<li><a href="{:url('admin/develop/releaseCms')}"><i class="fa fa-circle-o"></i> CMS发布插件</a></li>
<li><a href="{:url('admin/develop/func')}"><i class="fa fa-circle-o"></i> 函数插件</a></li>
<li><a href="{:url('admin/develop/app')}"><i class="fa fa-circle-o"></i> 应用程序</a></li>
<li><a href="{:url('admin/develop/editor')}"><i class="fa fa-edit"></i> 插件编辑器</a></li>
</ul>
</li>
<li><a href="{:url('admin/tool/fileManager')}"><i class="fa fa-circle-o"></i> 文件管理</a></li>
<li><a href="{:url('admin/tool/preview')}"><i class="fa fa-circle-o"></i> 解析预览</a></li>
<li><a href="{:url('admin/tool/logs')}"><i class="fa fa-circle-o"></i> 错误日志</a></li>

View File

@ -8,6 +8,12 @@
<input type="text" name="field[name]" class="form-control" autocomplete="off" />
</div>
</div>
<div class="form-group">
<div class="input-group">
<span class="input-group-addon" style="background:#f4f4f4;">字段描述</span>
<input type="text" name="field[desc]" class="form-control" autocomplete="off" placeholder="选填" />
</div>
</div>
<div class="form-group c-p-field-source">
<div class="input-group">
<span class="input-group-addon" style="background:#f4f4f4;">数据来源</span>
@ -29,6 +35,7 @@
<optgroup label="数据生成">
<option value="words">{$Think.lang.field_module_words}</option>
<option value="num">{$Think.lang.field_module_num}</option>
<option value="no">{$Think.lang.field_module_no}</option>
<option value="list">{$Think.lang.field_module_list}</option>
<option value="time">{$Think.lang.field_module_time}</option>
</optgroup>
@ -81,10 +88,27 @@
<div class="input-group">
<div class="input-group-addon">范围</div>
<input type="number" name="field[num_start]" class="form-control" />
<div class="input-group-addon" style="border-left:0;border-right:0;"></div>
<div class="input-group-addon brl_0 brr_0"></div>
<input type="number" name="field[num_end]" class="form-control" />
</div>
</div>
<div class="c-p-field-module" module="no" style="display:none;">
<div class="form-group">
<div class="input-group">
<div class="input-group-addon">起始数字</div>
<input type="number" name="field[no_start]" class="form-control" placeholder="默认1" />
<div class="input-group-addon brl_0 brr_0">递增数</div>
<input type="number" name="field[no_inc]" class="form-control" placeholder="默认1" />
</div>
</div>
<div class="form-group">
<div class="input-group">
<div class="input-group-addon">补零位数</div>
<input type="number" name="field[no_len]" class="form-control" placeholder="默认不补零,小于位数的数字开头自动补零" />
</div>
</div>
<p class="help-block">注意:自增数字不受采集退出影响会连续记录(测试除外)如需重新开始可以<a href="javascript:;" class="c-p-field-no-reset">点击重置</a></p>
</div>
<div class="c-p-field-module" module="time" style="display:none;">
<div class="input-group" style="margin-bottom:7px;">
<div class="input-group-addon">格式</div>

View File

@ -10,7 +10,7 @@
</div>
<div class="form-group">
<div class="input-group">
<div class="input-group-addon">分页分隔符 <span title="提示信息" class="glyphicon glyphicon-info-sign icon-info-tips" onclick="cpDelimiterTips()"></span></div>
<div class="input-group-addon">分页分隔符 <span title="提示信息" class="glyphicon glyphicon-info-sign icon-info-tips" onclick="ruleInsertSign.cpDelimiterTips()"></span></div>
<input type="text" name="pagination_field[delimiter]" class="form-control" placeholder="选填,内容多页之间插入字符" />
</div>
{if !empty($isLoop)}

View File

@ -6,6 +6,7 @@
<option value="">请选择</option>
<option value="html">{$Think.lang.process_module_html}</option>
<option value="substr">{$Think.lang.process_module_substr}</option>
<option value="extract">{$Think.lang.process_module_extract}</option>
<option value="insert">{$Think.lang.process_module_insert}</option>
<option value="replace">{$Think.lang.process_module_replace}</option>
<option value="batch">{$Think.lang.process_module_batch}</option>
@ -16,6 +17,7 @@
<option value="if">{$Think.lang.process_module_if}</option>
<option value="func">{$Think.lang.process_module_func}</option>
<option value="api">{$Think.lang.process_module_api}</option>
<option value="apiapp">{$Think.lang.process_module_apiapp}</option>
</select>
<span class="input-group-btn">
<button class="btn btn-default process-add" type="button">添加</button>

View File

@ -1,5 +1,28 @@
<!-- 数据处理模块 -->
<div style="display:none;">
<div class="c-p-process-module" module="extract">
<section>
<div class="form-group" style="margin-bottom:0;">
<label>提取方式</label>
<select class="form-control" data-process="extract:extract_module">
<option value="">请选择</option>
<option value="rule">规则匹配</option>
<option value="xpath">xpath匹配</option>
<option value="json">json提取</option>
</select>
<p class="help-block">从当前字段的值中提取出内容</p>
</div>
<div class="process-extract-module" style="margin-top:15px;" data-extract-module="rule">
{include file="cpattern:rule_module" _type="rule" _name="data-process" _name_pre="extract:extract_" _allow_loop="" /}
</div>
<div class="process-extract-module" style="margin-top:15px;" data-extract-module="xpath">
{include file="cpattern:rule_module" _type="xpath" _name="data-process" _name_pre="extract:extract_" _allow_loop="" /}
</div>
<div class="process-extract-module" style="margin-top:15px;" data-extract-module="json">
{include file="cpattern:rule_module" _type="json" _name="data-process" _name_pre="extract:extract_" _allow_loop="" /}
</div>
</section>
</div>
<div class="c-p-process-module" module="html">
<section>
<ul class="nav nav-tabs">
@ -91,14 +114,23 @@
</div>
<div class="c-p-process-module" module="if">
<section>
<div class="form-group" style="margin-bottom:10px;">
<select data-process="if:if_type" class="form-control">
<option value="1">{$Think.lang.p_m_if_1}</option>
<option value="2">{$Think.lang.p_m_if_2}</option>
<option value="3">{$Think.lang.p_m_if_3}</option>
<option value="4">{$Think.lang.p_m_if_4}</option>
</select>
<div class="form-group">
<div class="input-group">
<span class="input-group-addon">判断</span>
<select data-process="if:if_type" class="form-control">
<option value="1">{$Think.lang.p_m_if_1}{$Think.lang.p_m_if_4}</option>
<option value="2">{$Think.lang.p_m_if_2}{$Think.lang.p_m_if_3}</option>
<option value="3">{$Think.lang.p_m_if_3}{$Think.lang.p_m_if_2}</option>
<option value="4">{$Think.lang.p_m_if_4}{$Think.lang.p_m_if_1}</option>
</select>
<span class="input-group-addon brl_0 brr_0">中断</span>
<select data-process="if:if_stop" class="form-control">
<option value="">遇到中断不采集该条数据</option>
<option value="collect">遇到中断仍采集但跳出处理</option>
</select>
</div>
</div>
<div class="form-group">
<div class="table-responsive">
<table class="table table-bordered table-hover p-m-if-table" style="margin-bottom:0;">
@ -146,6 +178,7 @@
<div class="input-group-addon" style="padding:0;">
<div class="form-control-slt p-m-if-val-time-date">
<select class="form-control">
<option value="">选择时间</option>
<option value="now">当前时间</option>
<option value="today">今天</option>
<option value="today +1 day">明天</option>
@ -449,7 +482,7 @@
</select>
</div>
<div class="form-group p-m-api-content-type" style="display:none;">
<label>POST数据类型 <a href="javascript:;" class="glyphicon glyphicon-info-sign icon-info-tips" onclick="tipsCurlPost()"></a></label>
<label>POST数据类型 <a href="javascript:;" class="glyphicon glyphicon-info-sign icon-info-tips" onclick="globalOp.tipsCurlPost()"></a></label>
<select data-process="api:api_content_type" class="form-control">
<option value="">默认表单数据application/x-www-form-urlencoded</option>
<option value="application/json">JSON数组application/json</option>
@ -464,7 +497,7 @@
<thead>
<tr>
<td>名称</td>
<td></th>
<td></td>
<td>删除</td>
</tr>
</thead>
@ -484,7 +517,7 @@
<option value="custom">自定义</option>
</select>
</div>
<input type="text" data-process="api:api_params:addon:" class="form-control" style="display:none;margin-left:-1px;">
<input type="text" data-process="api:api_params:addon:" class="form-control" style="display:none;">
<div class="input-group-addon p-m-api-val-field">
<div class="form-control-slt">
<select class="form-control">
@ -529,7 +562,7 @@
<option value="custom">自定义</option>
</select>
</div>
<input type="text" data-process="api:api_headers:addon:" class="form-control" style="display:none;margin-left:-1px;">
<input type="text" data-process="api:api_headers:addon:" class="form-control" style="display:none;">
<div class="input-group-addon p-m-api-header-field">
<div class="form-control-slt">
<select class="form-control">
@ -564,22 +597,32 @@
<div class="form-group">
<label>获取结果方式</label>
<select class="form-control" data-process="api:api_rule_module">
<option value="" checked="checked">JSON提取</option>
<option value="" checked="checked">json提取</option>
<option value="rule">规则匹配</option>
<option value="xpath">XPath匹配</option>
<option value="xpath">xpath匹配</option>
</select>
</div>
<div class="form-group">
<div class="p-m-api-rule-module" data-rule-module="">
<div class="process-extract-module" data-rule-module="">
{include file="cpattern:rule_module" _type="json" _name="data-process" _name_pre="api:api_" _allow_loop="" /}
</div>
<div class="p-m-api-rule-module" data-rule-module="rule">
<div class="process-extract-module" data-rule-module="rule">
{include file="cpattern:rule_module" _type="rule" _name="data-process" _name_pre="api:api_" _allow_loop="" /}
</div>
<div class="p-m-api-rule-module" data-rule-module="xpath">
<div class="process-extract-module" data-rule-module="xpath">
{include file="cpattern:rule_module" _type="xpath" _name="data-process" _name_pre="api:api_" _allow_loop="" /}
</div>
</div>
</section>
</div>
<div class="c-p-process-module" module="apiapp">
<div class="form-group" style="margin-bottom:0;">
<label>接口插件</label>
<a href="javascript:;" class="fa fa-refresh plugin-api-refresh" title="刷新"></a>
<select class="form-control" data-process="apiapp:apiapp_app">
<option value="">--请选择--</option>
</select>
</div>
<div class="plugin-api-op-list" style="margin-top:15px;display:none;"></div>
</div>
</div>

View File

@ -2,7 +2,10 @@
{assign name="_tpl_name" value="[_name]" /}
{assign name="_tpl_name_pre" value="[_name_pre]" /}
{assign name="_tpl_allow_loop" value="[_allow_loop]" /}
{php}$_tpl_is_process=($_tpl_name=='data-process')?true:false;{/php}
{php}
$_tpl_is_process=($_tpl_name=='data-process')?true:false;
$_tpl_name_id='c_p_'.str_replace(array('[',']'),'_',$_tpl_name).'_'.str_replace(array('[',']'),'_',$_tpl_name_pre);
{/php}
{if $_tpl_type=='rule'}
<div class="form-group">
<label>规则</label>
@ -30,15 +33,18 @@
</div>
</div>
<div class="checkbox"><label><input type="checkbox" {:\\util\\Tools::cp_rule_module_name($_tpl_name,$_tpl_name_pre,'rule_multi')} value="1"> 允许匹配多个结果</label></div>
<div class="input-group{if $_tpl_is_process} p-m-api-rule-multi-str{/if}" style="display:none;" {if !$_tpl_is_process}id="c_p_{$_tpl_name}_{$_tpl_name_pre}rule_multi_str"{/if}>
<div class="{if $_tpl_is_process}process-extract-rule-multi-str{/if}" style="display:none;" {if !$_tpl_is_process}id="{$_tpl_name_id}rule_multi_str"{/if}>
{if $_tpl_allow_loop}
<div class="input-group-addon" style="border-right:0;"><label class="radio-inline"><input type="radio" {:\\util\\Tools::cp_rule_module_name($_tpl_name,$_tpl_name_pre,'rule_multi_type')} value="">拼接为文本 <span title="提示信息" class="glyphicon glyphicon-info-sign icon-info-tips" onclick="cpDelimiterTips()"></span></label></div>
<input type="text" {:\\util\\Tools::cp_rule_module_name($_tpl_name,$_tpl_name_pre,'rule_multi_str')} class="form-control" placeholder="多个结果之间分隔符">
<div class="input-group-addon"><label class="radio-inline"><input type="radio" {:\\util\\Tools::cp_rule_module_name($_tpl_name,$_tpl_name_pre,'rule_multi_type')} value="loop">循环入库</label></div>
{else /}
<input type="text" {:\\util\\Tools::cp_rule_module_name($_tpl_name,$_tpl_name_pre,'rule_multi_str')} class="form-control" placeholder="多个结果之间分隔符" />
<div class="input-group-addon" style="padding-left:9px;padding-right:9px;"><span title="提示信息" class="glyphicon glyphicon-info-sign icon-info-tips" onclick="cpDelimiterTips()"></span></div>
{/if}
<select {:\\util\\Tools::cp_rule_module_name($_tpl_name,$_tpl_name_pre,'rule_multi_type')} class="form-control">
<option value="">拼接为文本</option>
<option value="loop">循环入库</option>
<option value="list">列表数据,处理后拼接为文本</option>
</select>
{/if}
<div class="input-group box-rule-multi-str" style="margin-top:10px;">
<input type="text" {:\\util\\Tools::cp_rule_module_name($_tpl_name,$_tpl_name_pre,'rule_multi_str')} class="form-control" placeholder="多个结果之间分隔符" />
<div class="input-group-addon" style="padding-left:9px;padding-right:9px;"><span title="提示信息" class="glyphicon glyphicon-info-sign icon-info-tips" onclick="ruleInsertSign.cpDelimiterTips()"></span></div>
</div>
</div>
{elseif $_tpl_type=='xpath' /}
<div class="form-group">
@ -71,15 +77,18 @@
</div>
</div>
<div class="checkbox"><label><input type="checkbox" {:\\util\\Tools::cp_rule_module_name($_tpl_name,$_tpl_name_pre,'xpath_multi')} value="1"> 允许匹配多个结果</label></div>
<div class="input-group{if $_tpl_is_process} p-m-api-xpath-multi-str{/if}" style="display:none;" {if !$_tpl_is_process}id="c_p_{$_tpl_name}_{$_tpl_name_pre}xpath_multi_str"{/if}>
<div class="{if $_tpl_is_process}process-extract-xpath-multi-str{/if}" style="display:none;" {if !$_tpl_is_process}id="{$_tpl_name_id}xpath_multi_str"{/if}>
{if $_tpl_allow_loop}
<div class="input-group-addon" style="border-right:0;"><label class="radio-inline"><input type="radio" {:\\util\\Tools::cp_rule_module_name($_tpl_name,$_tpl_name_pre,'xpath_multi_type')} value="">拼接为文本 <span title="提示信息" class="glyphicon glyphicon-info-sign icon-info-tips" onclick="cpDelimiterTips()"></span></label></div>
<input type="text" {:\\util\\Tools::cp_rule_module_name($_tpl_name,$_tpl_name_pre,'xpath_multi_str')} class="form-control" placeholder="多个结果之间分隔符">
<div class="input-group-addon"><label class="radio-inline"><input type="radio" {:\\util\\Tools::cp_rule_module_name($_tpl_name,$_tpl_name_pre,'xpath_multi_type')} value="loop">循环入库</label></div>
{else /}
<select {:\\util\\Tools::cp_rule_module_name($_tpl_name,$_tpl_name_pre,'xpath_multi_type')} class="form-control">
<option value="">拼接为文本</option>
<option value="loop">循环入库</option>
<option value="list">列表数据,处理后拼接为文本</option>
</select>
{/if}
<div class="input-group box-xpath-multi-str" style="margin-top:10px;">
<input type="text" {:\\util\\Tools::cp_rule_module_name($_tpl_name,$_tpl_name_pre,'xpath_multi_str')} class="form-control" placeholder="多个结果之间分隔符" />
<div class="input-group-addon" style="padding-left:9px;padding-right:9px;"><span title="提示信息" class="glyphicon glyphicon-info-sign icon-info-tips" onclick="cpDelimiterTips()"></span></div>
{/if}
<div class="input-group-addon" style="padding-left:9px;padding-right:9px;"><span title="提示信息" class="glyphicon glyphicon-info-sign icon-info-tips" onclick="ruleInsertSign.cpDelimiterTips()"></span></div>
</div>
</div>
{elseif $_tpl_type=='json' /}
<div class="form-group">
@ -99,9 +108,9 @@
<option value="jsonencode">json编码</option>
<option value="serialize">序列化</option>
</select>
<div class="input-group{if $_tpl_is_process} p-m-api-json-arr-implode{/if}" {if !$_tpl_is_process}id="c_p_{$_tpl_name}_{$_tpl_name_pre}json_arr_implode"{/if} style="margin-top:5px;">
<div class="input-group{if $_tpl_is_process} process-extract-json-arr-implode{/if}" {if !$_tpl_is_process}id="{$_tpl_name_id}json_arr_implode"{/if} style="margin-top:5px;">
<textarea {:\\util\\Tools::cp_rule_module_name($_tpl_name,$_tpl_name_pre,'json_arr_implode')} class="form-control" rows="1" placeholder="输入分隔符"></textarea>
<div class="input-group-addon" style="padding-left:9px;padding-right:9px;"><span title="提示信息" class="glyphicon glyphicon-info-sign icon-info-tips" onclick="cpDelimiterTips()"></span></div>
<div class="input-group-addon" style="padding-left:9px;padding-right:9px;"><span title="提示信息" class="glyphicon glyphicon-info-sign icon-info-tips" onclick="ruleInsertSign.cpDelimiterTips()"></span></div>
</div>
</div>
{/if}

View File

@ -77,6 +77,47 @@
</div>
</div>
{if $_tpl_is_pagination}
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" href="#{$_tpl_id}_no" aria-expanded="false" class="collapsed">使用分页序号</a>
</h4>
</div>
<div id="{$_tpl_id}_no" class="panel-collapse collapse" aria-expanded="false">
<div class="panel-body">
<div class="form-group">
<label class="control-label">开启序号</label>
<div class="input-group">
<label class="radio-inline"><input type="radio" name="{$_tpl_name}[number][open]" value="1"> </label>
<label class="radio-inline"><input type="radio" name="{$_tpl_name}[number][open]" value="0"> </label>
</div>
<p class="help-block">可以指定分页序号范围并在{:cp_sign('match','N')}中调用,开启后可不填写“获取网址区域”和“提取网址规则”直接在“拼接成最终网址”中生成分页</p>
</div>
<div class="form-group">
<div class="input-group">
<span class="input-group-addon">数字,从</span>
<input type="number" name="{$_tpl_name}[number][start]" class="form-control" placeholder="默认0" />
<span class="input-group-addon brl_0 brr_0"></span>
<input type="number" name="{$_tpl_name}[number][end]" class="form-control" placeholder="默认0" />
<span class="input-group-addon brl_0 brr_0">递增数</span>
<input type="number" name="{$_tpl_name}[number][inc]" class="form-control" placeholder="默认1" />
</div>
</div>
<div class="form-group">
<div class="input-group">
<span class="input-group-addon">补零位数</span>
<input type="number" name="{$_tpl_name}[number][len]" class="form-control" placeholder="默认不补零,小于位数的数字开头自动补零" />
<div class="input-group-addon">
<label class="checkbox-inline"><input type="checkbox" name="{$_tpl_name}[number][desc]" value="1">倒序</label>
</div>
</div>
</div>
</div>
</div>
</div>
{/if}
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
@ -88,7 +129,7 @@
<div class="form-group">
<label class="control-label">提取网址规则</label>
<div class="input-group">
<textarea class="form-control" name="{$_tpl_name}[url_rule]" rows="3" {if $_tpl_url_required}data-placeholder-xpath="请输入xpath规则" data-placeholder-json="请输入json规则" placeholder="必须填写规则,{$Think.lang.tips_match_url}"{else/}data-placeholder-xpath="请输入xpath规则默认获取所有链接并保存为{:cp_sign('match')}标签以供拼接调用" data-placeholder-json="请输入json规则" placeholder="默认获取所有链接并保存为{:cp_sign('match')}标签以供拼接调用,{$Think.lang.tips_match_url}"{/if}></textarea>
<textarea class="form-control" name="{$_tpl_name}[url_rule]" rows="3" {if $_tpl_url_required}data-placeholder-xpath="请输入xpath规则" data-placeholder-json="请输入json规则" placeholder="请输入规则,{$Think.lang.tips_match_url}"{else/}data-placeholder-xpath="请输入xpath规则默认获取所有链接并保存为{:cp_sign('match')}标签以供拼接调用" data-placeholder-json="请输入json规则" placeholder="默认获取所有链接并保存为{:cp_sign('match')}标签以供拼接调用,{$Think.lang.tips_match_url}"{/if}></textarea>
<div class="input-group-addon iga-rt iga-rt1">
<select name="{$_tpl_name}[url_rule_module]" data-module-input="{$_tpl_name}[url_rule]" class="slt">
<option value="">正则</option>

View File

@ -85,7 +85,7 @@
</select>
</div>
<div class="form-group c-p-url-web-content-type" style="display:none;">
<label>POST数据类型 <a href="javascript:;" class="glyphicon glyphicon-info-sign icon-info-tips" onclick="tipsCurlPost()"></a></label>
<label>POST数据类型 <a href="javascript:;" class="glyphicon glyphicon-info-sign icon-info-tips" onclick="globalOp.tipsCurlPost()"></a></label>
<select name="{$_tpl_name}[url_web][content_type]" class="form-control">
<option value="">默认表单数据application/x-www-form-urlencoded</option>
<option value="application/json">JSON数组application/json</option>

View File

@ -158,12 +158,14 @@
<a href="javascript:;" data-toggle="collapse" style="float:left;"></a>
<div class="panel-title-title">
<a href="javascript:;" data-toggle="collapse" style="color:inherit;"></a>
<input type="text" />
<input type="text" data-name="[title]" />
</div>
<div class="panel-title-ops">
<input type="hidden" data-name="[close]" />
<a href="javascript:;" class="glyphicon glyphicon-tag c-p-process-title" title="标题"></a>
<a href="javascript:;" class="glyphicon icon-drag-move" title="移动"></a>
<a href="javascript:;" class="glyphicon glyphicon-copy c-p-process-clone" title="复制"></a>
<a href="javascript:;" class="glyphicon glyphicon-ban-circle c-p-process-close" title="禁用"></a>
<a href="javascript:;" class="glyphicon glyphicon-remove c-p-process-del" title="删除"></a>
</div>
</div>
@ -174,6 +176,7 @@
</div>
</div>
<div id="coll_tpl_page_signs" class="c-p-url-ps-table">
<div class=""></div>
<table class="table table-hover">
<thead>
<tr>
@ -185,6 +188,8 @@
</thead>
<tbody>
</tbody>
<tfoot style="display:none;">
</tfoot>
</table>
</div>
</div>

View File

@ -32,19 +32,20 @@
<div class="radio form-inline form-group form-group-sm" source-param="num">
<label>
<input type="radio" name="source[param]" value="num" />
数字
数字
</label>
<div class="source-params">
<input name="source[param_num_start]" type="number" value="1" class="form-control" style="width:70px;">
<input name="source[param_num_end]" type="number" value="5" class="form-control" style="width:70px;">
递增数 <input name="source[param_num_inc]" type="number" value="1" class="form-control" style="width:70px;">
<label><input type="checkbox" name="source[param_num_desc]" value="1"> 倒序</label>
<label style="margin-right:15px;"><input type="checkbox" name="source[param_num_desc]" value="1"> 倒序</label>
最少补零位数 <input name="source[param_num_len]" type="number" value="" class="form-control" style="width:100px;" placeholder="默认不补零">
</div>
</div>
<div class="radio form-inline form-group form-group-sm" source-param="letter">
<label>
<input type="radio" name="source[param]" value="letter" />
字母
字母
</label>
<div class="source-params">
<input name="source[param_letter_start]" type="text" value="a" class="form-control" style="width:50px;">
@ -55,7 +56,7 @@
<div class="radio form-inline form-group form-group-sm" source-param="custom">
<label>
<input type="radio" name="source[param]" value="custom" />
自定义
自定义
</label>
<div class="source-params">
<textarea class="form-control" style="width:auto;" name="source[param_custom]" rows="3"></textarea>

View File

@ -20,8 +20,8 @@
<tr>
<td>
源码<br>
<a href="javascript:;" onclick="visualizeData($('#win_test_font_url_html_{$frontIx}').val());">预览</a><br>
<a href="javascript:;" onclick="visualizeData('<pre>'+htmlspecialchars($('#win_test_font_url_html_{$frontIx}').val())+'</pre>');">查看</a>
<a href="javascript:;" onclick="globalOp.visualizeData($('#win_test_font_url_html_{$frontIx}').val());">预览</a><br>
<a href="javascript:;" onclick="globalOp.visualizeData('<pre>'+htmlspecialchars($('#win_test_font_url_html_{$frontIx}').val())+'</pre>');">查看</a>
</td>
<td><textarea class="form-control" rows="4" id="win_test_font_url_html_{$frontIx}">{$frontData['html']|htmlspecialchars}</textarea></td>
</tr>

View File

@ -46,8 +46,8 @@
<label>获取方式</label>
<select class="form-control" name="type">
<option value="rule" checked="checked">规则匹配</option>
<option value="xpath">XPath匹配</option>
<option value="json">JSON提取</option>
<option value="xpath">xpath匹配</option>
<option value="json">json提取</option>
</select>
</div>

View File

@ -13,21 +13,21 @@
<thead>
<tr>
<th>{$Think.lang.sort}</th>
<th style="width:40px;">ID</th>
<th>名称</th>
<th>ID</th>
<th>状态</th>
<th>数据集</th>
<th style="width:150px;">{$Think.lang.op}</th>
<th style="width:30px;">状态</th>
<th style="width:90px;">{$Think.lang.op}</th>
</tr>
</thead>
<tbody>
{foreach name="daList" item="item"}
<tr data-ds-id="{$item['id']}" data-da-id="{$item['id']}">
<td class="sort"><input type="text" name="newsort[{$item['id']}]" class="form-control" value="{$item['sort']}" autocomplete="off" /></td>
<td><a href="{:url('dataapi/set?id='.$item['id'])}">{$item['name']}</a></td>
<td>{$item['id']}</td>
<td><a href="javascript:;" class="status{$item['status']?'':' status-close'}">{$item['status']?'开启':'关闭'}</a></td>
<td><a href="{:url('dataapi/set?id='.$item['id'])}">{$item['name']}</a></td>
<td><a href="{:url('dataset/set?id='.$item['ds_id'])}">{$dsNames[$item['ds_id']]}</a></td>
<td><a href="javascript:;" class="status{$item['status']?'':' status-close'}">{$item['status']?'开启':'关闭'}</a></td>
<td>
<ul class="in-line">
<li><a href="{:url('dataapi/set?id='.$item['id'])}">编辑</a></li>
@ -67,6 +67,10 @@
<label>名称</label>
<input type="text" name="name" class="form-control" value="" placeholder="模糊搜索" autocomplete="off" />
</div>
<div class="form-group form-group-sm">
<label>数据集</label>
<input type="text" name="ds" class="form-control" value="" placeholder="模糊搜索名称或精确搜索id" autocomplete="off" />
</div>
<div class="form-group form-group-sm">
<button type="submit" class="btn btn-default btn-sm">{$Think.lang.search}</button>
</div>

View File

@ -13,25 +13,29 @@
<thead>
<tr>
<th>{$Think.lang.sort}</th>
<th style="width:40px;">ID</th>
<th style="width:150px;">名称</th>
<th style="width:50px;">ID</th>
<th>字段</th>
<th style="width:100px;">数据量</th>
<th style="width:150px;">{$Think.lang.op}</th>
<th style="width:80px;">数据量</th>
<th style="width:70px;">接口</th>
<th style="width:165px;">{$Think.lang.op}</th>
</tr>
</thead>
<tbody>
{foreach name="dsList" item="item"}
<tr data-ds-id="{$item['id']}">
<td class="sort"><input type="text" name="newsort[{$item['id']}]" class="form-control" value="{$item['sort']}" autocomplete="off" /></td>
<td><a href="{:url('dataset/set?id='.$item['id'])}">{$item['name']}</a></td>
<td>{$item['id']}</td>
<td><a href="{:url('dataset/set?id='.$item['id'])}">{$item['name']}</a></td>
<td>{if !empty($dsFields[$item['id']])}<input type="text" class="form-control fields" readonly="true" value="{$dsFields[$item['id']]|htmlspecialchars}">{/if}</td>
<td><a href="{:url('dataset/db?ds_id='.$item['id'])}" class="db-count">0</a></td>
<td><a href="{:url('dataset/db?ds_id='.$item['id'])}" class="db-count" target="_blank">0</a></td>
<td><a href="{:url('dataapi/list?ds='.$item['id'])}" class="da-count" target="_blank">0</a></td>
<td>
<ul class="in-line">
<li><a href="{:url('dataset/db?ds_id='.$item['id'])}">数据</a></li>
<li class="sep">|</li>
<li><a href="{:url('dataapi/list?ds='.$item['id'])}">接口</a></li>
<li class="sep">|</li>
<li><a href="{:url('dataset/set?id='.$item['id'])}">编辑</a></li>
<li class="sep">|</li>
<li><a href="javascript:;" class="delete">{$Think.lang.delete}</a></li>

View File

@ -52,7 +52,8 @@
<div class="panel panel-default">
<div class="panel-heading">
<a href="javascript:;" id="set_dataset_indexes">设置索引</a> <span class="dataset-sep">|</span>
<a href="{:url('dataset/db?ds_id='.$dsData['id'])}">查看数据</a>
<a href="{:url('dataset/db?ds_id='.$dsData['id'])}">查看数据</a> <span class="dataset-sep">|</span>
<a href="{:url('dataapi/list?ds='.$dsData['id'])}">相关接口</a>
</div>
{if !empty($indexes)}
<div class="panel-body">

View File

@ -0,0 +1,105 @@
{extend name="common:main" /}
{block name="cssjs"}
<link href="__PUBLIC__/static/css/jquery.datetimepicker.css?{$Think.config.html_v}" rel="stylesheet">
<script type="text/javascript" src="__PUBLIC__/static/js/jquery.datetimepicker.js?{$Think.config.html_v}"></script>
<link href="__PUBLIC__/static/css/develop.css?{$Think.config.html_v}" rel="stylesheet" type="text/css">
<script type="text/javascript" src="__PUBLIC__/static/js/admin/develop.js?{$Think.config.html_v}"></script>
{/block}
{block name="content"}
<form id="form_api" method="post" ajax-submit="true" action="{:url('admin/develop/api')}">
<div class="box box-default">
<div class="box-body" style="padding-bottom:0;">
{:html_usertoken()}
{if !empty($apiClass)}
<input type="hidden" name="edit" value="1" />
<div class="alert alert-warning">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
请在 {$apiClass['filename']} 文件中编辑代码 或者 <a href="{:url('develop/editor?type=api&app='.$app)}"><b>使用插件编辑器</b></a>
</div>
<div class="form-group">
<a href="{:url('admin/develop/export?type=api&module='.$apiClass['module'].'&app='.$apiClass['app'])}" class="btn btn-default btn-block" target="_blank">插件另存为</a>
</div>
{/if}
<div class="form-group">
<label>模块</label>
<select name="module" class="form-control">
<option value="">请选择</option>
{foreach $modules as $k=>$v}
<option value="{$k}">{$v['name']}{$v['loc']}</option>
{/foreach}
</select>
</div>
<div class="form-group">
<label>接口名称</label>
<input type="text" name="name" class="form-control">
<p class="help-block">精简描述该接口</p>
</div>
<div class="form-group">
<label>功能标识</label>
<input type="text" name="identifier" class="form-control">
<p class="help-block">表示该插件的作用,只能输入字母或数字</p>
</div>
<div class="form-group">
<label>作者版权</label>
<input type="text" name="copyright" class="form-control">
<p class="help-block">版权归属能有效区分他人开发的插件,只能输入字母或数字</p>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<div class="panel-title">操作流程</div>
</div>
<div class="panel-body" style="padding-bottom:0;">
<div class="form-group">
<button type="button" class="btn btn-default" id="add_variable">添加变量</button>
<button type="button" class="btn btn-default" id="add_request" style="margin-left:5px;">添加请求</button>
</div>
<div class="row">
<div class="table-responsive">
<table class="table table-hover" id="op_list">
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<div class="panel-title">最终数据</div>
</div>
<div class="panel-body">
<div class="form-group api-insert-variable">
<textarea class="form-control" name="content" rows="3"></textarea>
<div class="help-block">
最终生成的数据,可输入任何内容或
<div class="dropup api-insert-variable-btn" style="display:inline;">
<a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">调用操作的值 <span class="caret"></span></a>
<ul class="dropdown-menu dropdown-menu-right">
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="form-group">
<button type="button" class="btn btn-default btn-block" id="btn_api_test" data-app="{$apiClass?$apiClass['app']:''}">测试(需先保存)</button>
</div>
<button type="submit" class="btn btn-primary btn-block">{$Think.lang.save}</button>
</form>
<table style="display:none;">
<tr id="tpl_op">
<td class="op-module" style="width:70px;padding-left:20px;"></td>
<td class="op-info" style="cursor:pointer;color:#3c8dbc"></td>
<td style="width:60px;font-size:12px;vertical-align:middle;">
<input type="hidden" name="ops[]" />
<a href="javascript:;" class="glyphicon icon-drag-move op-move" title="移动"></a>
<a href="javascript:;" class="glyphicon glyphicon-remove op-delete" title="删除" style="top:1.1px"></a>
</td>
</tr>
</table>
<script type="text/javascript">
developClass.api('{$module}',{$apiClass|json_encode});
</script>
{/block}

View File

@ -0,0 +1,158 @@
<form id="win_form_request" class="deve-api-request-box" method="post" action="{:url('develop/apiRequest')}">
{:html_usertoken()}
<input type="hidden" name="objid" value="{$objid}" />
<div class="form-group">
<div class="input-group">
<div class="input-group-addon" style="background:#f4f4f4;">请求名称</div>
<input type="text" name="request[name]" class="form-control" autocomplete="off" />
</div>
</div>
<div class="form-group">
<div class="input-group api-insert-variable">
<div class="input-group-addon" style="background:#f4f4f4;">请求网址</div>
<input type="text" name="request[url]" class="form-control" autocomplete="off" />
<div class="input-group-addon api-insert-variable-btn">
<a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">变量 <span class="caret"></span></a>
<ul class="dropdown-menu dropdown-menu-right">
</ul>
</div>
</div>
</div>
<div class="form-group">
<label>网页编码</label>
<div class="input-group input-select-custom">
<div class="input-group-btn">
<select name="request[charset]" class="form-control">
<option value="">utf-8</option>
<option value="gbk">gbk</option>
<option value="gb2312">gb2312</option>
<option value="custom">自定义</option>
</select>
</div>
<input type="text" class="form-control" name="request[charset_custom]">
</div>
</div>
<div class="form-group">
<label>内容解压缩</label>
<div class="input-group input-select-custom">
<div class="input-group-btn">
<select name="request[encode]" class="form-control">
<option value="">系统默认</option>
<option value="gzip">gzip</option>
<option value="br">br</option>
<option value="compress">compress</option>
<option value="deflate">deflate</option>
<option value="identity">identity</option>
<option value="custom">自定义</option>
</select>
</div>
<input type="text" class="form-control" name="request[encode_custom]">
</div>
</div>
<div class="form-group">
<label>请求方式</label>
<select name="request[type]" class="form-control">
<option value="">GET</option>
<option value="post">POST</option>
</select>
</div>
<div class="form-group request-type-post" style="display:none;">
<label>POST数据类型 <a href="javascript:;" class="glyphicon glyphicon-info-sign icon-info-tips" onclick="globalOp.tipsCurlPost()"></a></label>
<select name="request[content_type]" class="form-control">
<option value="">默认表单数据application/x-www-form-urlencoded</option>
<option value="application/json">JSON数组application/json</option>
<option value="multipart/form-data">表单上传multipart/form-data</option>
</select>
</div>
<div class="form-group">
<label>发送数据</label>
<a href="javascript:;" class="glyphicon glyphicon-plus request-param-add" title="添加"></a>
<table class="table table-bordered table-hover request-param-list">
<thead>
<tr>
<td style="width:150px;">名称</td>
<td></td>
<td style="width:50px;">删除</td>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<div class="form-group">
<label>请求头信息</label>
<a href="javascript:;" class="glyphicon glyphicon-plus request-header-add" title="添加"></a>
<table class="table table-bordered table-hover request-header-list">
<thead>
<tr>
<td style="width:150px;">名称</td>
<td></td>
<td style="width:50px;">删除</td>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<div class="form-group">
<label>请求超时(秒)</label>
<input type="number" name="request[timeout]" class="form-control" placeholder="默认60" />
<p class="help-block">超过请求时间断开连接</p>
</div>
<div class="form-group">
<label>调用间隔毫秒1000毫秒=1秒)</label>
<input type="number" name="request[interval]" class="form-control" placeholder="默认0" />
<p class="help-block">如接口有频率限制,可设置间隔时间避免调用过快导致失败</p>
</div>
<div class="form-group">
<label>失败等待(秒)</label>
<input type="number" name="request[wait]" class="form-control" placeholder="默认0" />
<p class="help-block">一般情况下调用失败都是频繁请求接口导致被禁用,设置该值等待一段时间让接口恢复正常</p>
</div>
<div class="form-group">
<label>失败重试</label>
<input type="number" name="request[retry]" class="form-control" placeholder="默认0" />
<p class="help-block">调用失败重试次数留空或0表示不重试</p>
</div>
<div class="form-group">
<label>缓存结果(分钟)</label>
<input type="number" name="request[cache]" class="form-control" placeholder="默认不缓存" />
<p class="help-block">是否缓存请求响应的结果,默认不缓存</p>
</div>
<div class="form-group form-group-sm">
<button type="submit" class="btn btn-primary btn-block">确定</button>
</div>
</form>
<table style="display:none;">
<tr id="tpl_request_header">
<td><input type="text" name="request[header_names][]" class="form-control" autocomplete="off" /></td>
<td>
<div class="input-group api-insert-variable">
<input type="text" name="request[header_vals][]" class="form-control" autocomplete="off" />
<div class="input-group-addon api-insert-variable-btn">
<a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">变量 <span class="caret"></span></a>
<ul class="dropdown-menu dropdown-menu-right">
</ul>
</div>
</div>
</td>
<td><a href="javascript:;" class="glyphicon glyphicon-remove request-header-delete"></a></td>
</tr>
<tr id="tpl_request_param">
<td><input type="text" name="request[param_names][]" class="form-control" autocomplete="off" /></td>
<td>
<div class="input-group api-insert-variable">
<input type="text" name="request[param_vals][]" class="form-control" autocomplete="off" />
<div class="input-group-addon api-insert-variable-btn">
<a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">变量 <span class="caret"></span></a>
<ul class="dropdown-menu dropdown-menu-right">
</ul>
</div>
</div>
</td>
<td><a href="javascript:;" class="glyphicon glyphicon-remove request-param-delete"></a></td>
</tr>
</table>
<script type="text/javascript">
developClass.api_init_request({$request|json_encode});
</script>

View File

@ -0,0 +1,20 @@
<form method="post" action="{:url('develop/apiTest')}" id="win_form_api_test">
{:html_usertoken()}
<input type="hidden" name="app" value="{$app}" />
<select id="api_apps" style="display:none;"></select>
<div class="alert alert-success">
全局配置需进入“<a href="{:url('mystore/apiApp')}" target="_blank">云端»仓库»接口插件</a>”中设置
</div>
<div class="form-group plugin-api-op-list" style="display:none;"></div>
<button type="submit" class="btn btn-primary btn-block">运行</button>
</form>
<div class="panel panel-default" id="win_api_result" style="margin-top:15px;display:none;">
<div class="panel-heading">
<div class="panel-title">执行结果</div>
</div>
<div class="panel-body">
</div>
</div>
<script type="text/javascript">
developClass.api_test('{$app}');
</script>

View File

@ -0,0 +1,222 @@
<form id="win_form_variable" method="post" action="{:url('develop/apiVariable')}">
{:html_usertoken()}
<input type="hidden" name="objid" value="{$objid}" />
<div class="form-group">
<div class="input-group">
<div class="input-group-addon" style="background:#f4f4f4;">变量名称</div>
<input type="text" name="variable[name]" class="form-control" autocomplete="off" />
</div>
</div>
<div class="form-group">
<div class="input-group">
<div class="input-group-addon" style="background:#f4f4f4;">变量描述</div>
<input type="text" name="variable[desc]" class="form-control" autocomplete="off" placeholder="选填" />
</div>
</div>
<div class="form-group">
<div class="input-group">
<div class="input-group-addon" style="background:#f4f4f4;">获取方式</div>
<select name="variable[module]" class="form-control">
<option value="">{$Think.lang.apiapp_variable_m_}</option>
<option value="user">{$Think.lang.apiapp_variable_m_user}</option>
<option value="extract">{$Think.lang.apiapp_variable_m_extract}</option>
<option value="time">{$Think.lang.apiapp_variable_m_time}</option>
<option value="num">{$Think.lang.apiapp_variable_m_num}</option>
<option value="list">{$Think.lang.apiapp_variable_m_list}</option>
</select>
</div>
</div>
<div class="variable-module" data-module="">
<div class="form-group api-insert-variable">
<label>输入内容</label>
<textarea name="variable[value][value]" class="form-control" rows="3"></textarea>
<div class="help-block api-insert-variable-btn">
可输入任何内容或
<div class="dropdown" style="display:inline;">
<a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">插入变量 <span class="caret"></span></a>
<ul class="dropdown-menu dropdown-menu-right">
</ul>
</div>
</div>
</div>
</div>
<div class="variable-module" data-module="user" style="display:none;">
<p class="help-block">在界面中显示控件,由用户操作输入内容</p>
<div class="form-group">
<label>必填</label>
<div class="input-group">
<label class="radio-inline"><input type="radio" name="variable[user][required]" value="1"></label>
<label class="radio-inline"><input type="radio" name="variable[user][required]" value="0" checked="checked"></label>
</div>
</div>
<div class="form-group">
<label>全局配置</label>
<div class="input-group">
<label class="radio-inline"><input type="radio" name="variable[user][global]" value="1"></label>
<label class="radio-inline"><input type="radio" name="variable[user][global]" value="0" checked="checked"></label>
</div>
<p class="help-block">该变量是否是全局配置(在“云端»仓库»接口插件”中一次性配置)<br>否则在使用插件时配置(使用插件时可设置为不同值)</p>
</div>
<div class="form-group">
<label>变量控件</label>
<select name="variable[user][tag]" class="form-control">
<option value="">请选择</option>
<option value="text">文本</option>
<option value="radio">开关</option>
<option value="select">选项</option>
</select>
</div>
<div class="form-group variable-user-tag-select" style="display:none;">
<label>选项值</label>
<textarea class="form-control" name="variable[user][tag_select]" rows="3" placeholder=""></textarea>
<p class="help-block">
一行一个,直接输入值或键值对形式输入<br/>例如:<br/>
a=好评<br/>
b=中评<br/>
c=差评<br/>
</p>
</div>
<div class="form-group">
<label>默认值</label>
<input type="text" name="variable[user][default]" class="form-control" autocomplete="off" placeholder="选填变量控件为文本可输入任意内容开关输入1或0选项输入键名" />
</div>
</div>
<div class="variable-module" data-module="extract" style="display:none;">
<div class="form-group">
<label>提取来源</label>
<select name="variable[extract][source]" class="form-control">
<option value="">请选择</option>
</select>
</div>
<div class="form-group">
<label>提取方式</label>
<select name="variable[extract][type]" class="form-control">
<option value="">请选择</option>
<option value="json">json提取</option>
<option value="rule">规则匹配</option>
<option value="xpath">xpath匹配</option>
</select>
</div>
<div class="form-group variable-module-extract" data-extract-module="json" style="display:none;">
{include file="cpattern:rule_module" _type="json" _name="variable[extract]" _name_pre="" _allow_loop="" /}
</div>
<div class="form-group variable-module-extract" data-extract-module="rule" style="display:none;">
{include file="cpattern:rule_module" _type="rule" _name="variable[extract]" _name_pre="" _allow_loop="" /}
</div>
<div class="form-group variable-module-extract" data-extract-module="xpath" style="display:none;">
{include file="cpattern:rule_module" _type="xpath" _name="variable[extract]" _name_pre="" _allow_loop="" /}
</div>
</div>
<div class="variable-module" data-module="num" style="display:none;">
<div class="form-group">
<div class="input-group">
<div class="input-group-addon">范围</div>
<input type="number" name="variable[num][start]" class="form-control" />
<div class="input-group-addon" style="border-left:0;border-right:0;"></div>
<input type="number" name="variable[num][end]" class="form-control" />
</div>
</div>
</div>
<div class="variable-module" data-module="time" style="display:none;">
<div class="form-group">
<div class="input-group" style="margin-bottom:7px;">
<div class="input-group-addon">格式</div>
<input type="text" name="variable[time][format]" class="form-control" placeholder="默认:[年]/[月]/[日] [时]:[分]" />
</div>
<div class="help-block variable-time-format">
<span>标签:</span>
<ul class="in-line-mg">
<li><a href="javascript:;" data-val="[年]">[]</a></li>
<li><a href="javascript:;" data-val="[月]">[]</a></li>
<li><a href="javascript:;" data-val="[日]">[]</a></li>
<li><a href="javascript:;" data-val="[时]">[]</a></li>
<li><a href="javascript:;" data-val="[分]">[]</a></li>
<li><a href="javascript:;" data-val="[秒]">[]</a></li>
</ul>
</div>
<div class="input-group">
<div class="input-group-addon">范围随机</div>
<input type="text" name="variable[time][start]" class="form-control" placeholder="默认当前时间" autocomplete="off" />
<div class="input-group-addon" style="border-left:0;border-right:0;"></div>
<input type="text" name="variable[time][end]" class="form-control" placeholder="默认当前时间" autocomplete="off" />
<div class="input-group-btn"><button type="button" class="btn btn-default" onclick="$(this).parent().siblings('input:text').val('');">清空</button></div>
</div>
<div class="checkbox"><label><input type="checkbox" name="variable[time][stamp]" value="1" /> 转换成时间戳</label></div>
</div>
</div>
<div class="variable-module" data-module="list" style="display:none;">
<div class="form-group">
<label>列表数据</label>
<textarea name="variable[list][data]" class="form-control" rows="3"></textarea>
<p class="help-block">一行一条数据,从列表中抽取数据</p>
</div>
<div class="form-group">
<label>抽取方式</label>
<select name="variable[list][type]" class="form-control">
<option value="" selected="selected">随机抽取</option>
<option value="asc">顺序抽取</option>
<option value="desc">倒序抽取</option>
</select>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" href="#variable_func" aria-expanded="false">调用函数</a>
</h4>
</div>
<div id="variable_func" class="panel-collapse collapse">
<div class="panel-body">
<div class="form-group">
<label>开启</label>
<div class="input-group">
<label class="radio-inline"><input type="radio" name="variable[func][open]" value="1"></label>
<label class="radio-inline"><input type="radio" name="variable[func][open]" value="0" checked="checked"></label>
</div>
</div>
<div class="form-group">
<label>函数列表</label>
<table class="table table-bordered table-hover" style="margin-bottom:0;">
<thead>
<tr>
<td style="width:200px;">函数名</td>
<td>传入变量</td>
<td style="width:70px;">操作 <a href="javascript:;" class="glyphicon glyphicon-plus variable-func-add" title="添加" style="font-size:12px;"></a></td>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="form-group form-group-sm">
<button type="submit" class="btn btn-primary btn-block">确定</button>
</div>
</form>
<table style="display:none;">
<tr id="tpl_variable_func">
<td><input type="text" name="variable[func][names][]" class="form-control" placeholder="php函数名或插件方法名" autocomplete="off" /></td>
<td>
<div class="input-group">
<textarea name="variable[func][params][]" class="form-control" rows="3" placeholder="默认传入当前变量&#13;&#10;一行一个值,请按函数传参,否则运行出错!"></textarea>
<div class="input-group-addon" style="padding:0;">
<div class="form-control-slt">
<select class="form-control variable-func-param">
<option value="">插入变量</option>
<option value="###">###表示当前变量</option>
</select>
</div>
</div>
</div>
</td>
<td>
<a href="javascript:;" class="glyphicon icon-drag-move variable-func-move" style="font-size:11px;"></a>
<a href="javascript:;" class="glyphicon glyphicon-remove variable-func-del" style="font-size:11px;"></a>
</td>
</tr>
</table>
<script type="text/javascript">
developClass.api_init_variable({$variable|json_encode});
</script>

View File

@ -1,12 +1,14 @@
{extend name="common:main" /}
{block name="cssjs"}
<link href="__PUBLIC__/static/css/develop.css?{$Think.config.html_v}" rel="stylesheet" type="text/css">
{/block}
{block name="content"}
{if !$isApp}
<div class="nav-tabs-custom">
<ul class="nav nav-tabs">
<li{$type=='release'?' class="active"':''}><a href="{:url('develop/editor')}">发布插件</a></li>
<li{$type=='func'?' class="active"':''}><a href="{:url('develop/editor?type=func')}">函数插件</a></li>
<li{$type=='api'?' class="active"':''}><a href="{:url('develop/editor?type=api')}">接口插件</a></li>
<li{$type=='release'?' class="active"':''}><a href="{:url('develop/editor?type=release')}">发布插件</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active">
@ -40,8 +42,9 @@
<div class="col-sm-4 col-md-3 deve-editor-right">
<div class="nav-tabs-custom deve-editor-apps-nav">
<ul class="nav nav-tabs">
<li{$type=='release'?' class="active"':''}><a href="{:url('develop/editor')}">发布插件</a></li>
<li{$type=='func'?' class="active"':''}><a href="{:url('develop/editor?type=func')}">函数插件</a></li>
<li{$type=='api'?' class="active"':''}><a href="{:url('develop/editor?type=api')}">接口插件</a></li>
<li{$type=='release'?' class="active"':''}><a href="{:url('develop/editor?type=release')}">发布插件</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active">

View File

@ -6,6 +6,6 @@
<iframe id="win_func_method_ifr" style="width:100%;height:100%;border:0;"></iframe>
<script type="text/javascript">
$(document).ready(function(){
editorCodeIfr('#win_func_method_ifr',{'set_value':$('#win_func_method_txt').val()});
globalOp.editorCodeIfr('#win_func_method_ifr',{'set_value':$('#win_func_method_txt').val()});
});
</script>

View File

@ -0,0 +1,76 @@
{extend name="common:main" /}
{block name="cssjs"}
<script src="__PUBLIC__/static/js/admin/mystore.js?{$Think.config.html_v}"></script>
{/block}
{block name="content"}
{php}$orderClass=array($orderKey=>'_'.$sortBy);$orderSort=array($orderKey=>($sortBy=='asc'?'升序':'降序'));{/php}
<div class="nav-tabs-custom" style="margin-bottom:15px;">
{include file="mystore:nav" _type="api" /}
<div class="tab-content">
<div class="tab-pane active">
<div class="table-responsive" style="border:0;">
<form id="form_list" method="post" ajax-submit="true" action="{:url('mystore/apiAppOp')}">
{:html_usertoken()}
<table id="list_table" class="table table-hover datatable">
<thead>
<tr>
<th class="sorting{$orderClass['id']}" data-order="id" title="ID{$orderSort['id']}" style="width:50px;">ID</th>
<th class="sorting{$orderClass['name']}" data-order="name" title="{$orderSort['name']}">名称</th>
<th class="sorting{$orderClass['app']}" data-order="app" title="{$orderSort['app']}">标识</th>
<th class="sorting{$orderClass['module']}" data-order="module" title="{$orderSort['module']}">模块</th>
<th class="sorting{$orderClass['addtime']}" data-order="addtime" title="{$orderSort['addtime']}">本地添加</th>
<th class="sorting{$orderClass['uptime']}" data-order="uptime" title="{$orderSort['uptime']}">平台更新</th>
<th>平台</th>
<th style="width:205px;">{$Think.lang.op}</th>
</tr>
</thead>
<tbody>
{foreach name="appList" item="app"}
<tr data-app-id="{$app['id']}">
<td>{$app['id']}</td>
<td><div class="name">{$app['name']}</div></td>
<td>{$app['app']}</td>
<td title="使用:{$modules[$app['module']]['loc']}">{$modules[$app['module']]['name']}</td>
<td>{:date('Y-m-d H:i',$app['addtime'])}</td>
<td>{:date('Y-m-d H:i',$app['uptime'])}</td>
<td>
<a href="javascript:;" data-url="{$app['_store_url']}" class="store-detail">{$app['_is_provider']?'第三方':'官方'}</a>
</td>
<td>
<div class="in-line-mg"><a href="javascript:;" class="enable" style="color:{$app['enable']?'green':'red'}" data-val="{$app['enable']?1:0}">{$app['enable']?'已启用':'已禁用'}</a></div>
<div class="in-line-mg"><a href="javascript:;" class="config">全局配置</a></div>
<div class="in-line-mg"><a href="{:url('develop/api?app='.$app['app'])}">开发</a></div>
<div class="in-line-mg"><a href="javascript:;" url="{:url('mystore/apiAppOp?op=delete&id='.$app['id'])}" class="delete">删除</a></div>
</td>
</tr>
{/foreach}
</tbody>
<tfoot>
{if empty($appList)}
<tr>
<td colspan="8">没有接口插件</td>
</tr>
{else/}
<tr>
<td colspan="8" style="font-size:12px;padding:0;">
<p class="help-block" style="margin:8px 0 0 8px;">鼠标悬停在“模块”上可显示提示</p>
</td>
</tr>
{/if}
{if condition="!empty($pagenav)"}
<tr>
<td colspan="8">{$pagenav}</td>
</tr>
{/if}
</tfoot>
</table>
</form>
</div>
</div>
</div>
</div>
<a href="{:url('develop/api')}" class="btn btn-primary">开发一个</a>
<script type="text/javascript">
myStoreClass.init_apiapp();
</script>
{/block}

View File

@ -0,0 +1,39 @@
{if !empty($globalOps)}
<form id="win_form_api_app_config" method="post" ajax-submit="true" action="{:url('mystore/apiAppConfig')}">
{:html_usertoken()}
<input type="hidden" name="id" value="{$appData['id']}" />
{foreach $globalOps as $globalOp}
<div class="form-group">
<label>{$globalOp['name']|htmlspecialchars} {if $globalOp['user']['required']}<span style="color:red;font-weight:bold;margin-left:5px;">*</span>{/if}</label>
{if $globalOp['user']['tag']=='text'}
<textarea name="global[{$globalOp['name_key']}]" rows="2" class="form-control"{if !is_empty($globalOp['user']['default'],true)} placeholder="默认:{$globalOp['user']['default']}"{/if}"></textarea>
{elseif $globalOp['user']['tag']=='radio'}
<div class="input-group">
<label class="radio-inline"><input type="radio" name="global[{$globalOp['name_key']}]" value="1"{if $globalOp['user']['default']} checked="checked"{/if}></label>
<label class="radio-inline"><input type="radio" name="global[{$globalOp['name_key']}]" value="0"{if empty($globalOp['user']['default'])} checked="checked"{/if}></label>
</div>
{elseif $globalOp['user']['tag']=='select'}
<select name="global[{$globalOp['name_key']}]" class="form-control">
<option value="">请选择</option>
{foreach $globalOp['user']['tag_select'] as $sk=>$sv}
<option value="{$sk}"{if $globalOp['user']['default']==$sk} selected="selected"{/if}>{$sv}</option>
{/foreach}
</select>
{/if}
{if $globalOp['desc']}
<p class="help-block">{$globalOp['desc']|htmlspecialchars}</p>
{/if}
</div>
{/foreach}
<div class="form-group">
<button type="submit" class="btn btn-primary btn-block">{$Think.lang.submit}</button>
</div>
</form>
<script type="text/javascript">
myStoreClass.apiapp_config({$config|json_encode});
</script>
{else /}
<script type="text/javascript">
myStoreClass.apiapp_config_none();
</script>
{/if}

View File

@ -0,0 +1,79 @@
{extend name="common:main" /}
{block name="cssjs"}
<script src="__PUBLIC__/static/js/admin/mystore.js?{$Think.config.html_v}"></script>
{/block}
{block name="content"}
{php}$orderClass=array($orderKey=>'_'.$sortBy);$orderSort=array($orderKey=>($sortBy=='asc'?'升序':'降序'));{/php}
<div class="nav-tabs-custom" style="margin-bottom:15px;">
{include file="mystore:nav" _type="func" /}
<div class="tab-content">
<div class="tab-pane active">
<div class="table-responsive" style="border:0;">
<form id="form_list" method="post" ajax-submit="true" action="{:url('mystore/funcAppOp')}">
{:html_usertoken()}
<table id="list_table" class="table table-hover datatable">
<thead>
<tr>
<th class="sorting{$orderClass['id']}" data-order="id" title="ID{$orderSort['id']}" style="width:50px;">ID</th>
<th class="sorting{$orderClass['name']}" data-order="name" title="{$orderSort['name']}">名称</th>
<th class="sorting{$orderClass['app']}" data-order="app" title="{$orderSort['app']}">类和方法</th>
<th class="sorting{$orderClass['module']}" data-order="module" title="{$orderSort['module']}">模块</th>
<th class="sorting{$orderClass['addtime']}" data-order="addtime" title="{$orderSort['addtime']}">本地添加</th>
<th class="sorting{$orderClass['uptime']}" data-order="uptime" title="{$orderSort['uptime']}">平台更新</th>
<th>平台</th>
<th style="width:140px;">操作</th>
</tr>
</thead>
<tbody>
{foreach name="appList" item="app"}
<tr data-app-id="{$app['id']}">
<td>{$app['id']}</td>
<td><div class="name">{$app['name']}</div></td>
<td class="dropdown methods">
<a href="javascript:;" class="dropdown-toggle" id="dm_{$app['app']}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">{$app['app']} <span class="caret"></span></a>
<ul class="dropdown-menu" aria-labelledby="dm_{$app['app']}">
</ul>
</td>
<td title="使用:{$modules[$app['module']]['loc']}">{$modules[$app['module']]['name']}</td>
<td>{:date('Y-m-d H:i',$app['addtime'])}</td>
<td>{:date('Y-m-d H:i',$app['uptime'])}</td>
<td>
<a href="javascript:;" data-url="{$app['_store_url']}" class="store-detail">{$app['_is_provider']?'第三方':'官方'}</a>
</td>
<td>
<div class="in-line-mg"><a href="javascript:;" class="enable" style="color:{$app['enable']?'green':'red'}" data-val="{$app['enable']?1:0}">{$app['enable']?'已启用':'已禁用'}</a></div>
<div class="in-line-mg"><a href="{:url('develop/func?app='.$app['app'])}">开发</a></div>
<div class="in-line-mg"><a href="javascript:;" class="delete">删除</a></div>
</td>
</tr>
{/foreach}
</tbody>
<tfoot>
{if empty($appList)}
<tr>
<td colspan="8">没有函数插件</td>
</tr>
{else/}
<tr>
<td colspan="8" style="font-size:12px;padding:0;">
<p class="help-block" style="margin:8px 0 0 8px;">鼠标悬停在“模块”上可显示提示</p>
</td>
</tr>
{/if}
{if condition="!empty($pagenav)"}
<tr>
<td colspan="8">{$pagenav}</td>
</tr>
{/if}
</tfoot>
</table>
</form>
</div>
</div>
</div>
</div>
<a href="{:url('develop/func')}" class="btn btn-primary">开发一个</a>
<script type="text/javascript">
myStoreClass.init_funcapp();
</script>
{/block}

View File

@ -6,6 +6,6 @@
<iframe id="win_func_method_ifr" style="width:100%;height:100%;border:0;"></iframe>
<script type="text/javascript">
$(document).ready(function(){
editorCodeIfr('#win_func_method_ifr',{'set_value':$('#win_func_method_txt').val()});
globalOp.editorCodeIfr('#win_func_method_ifr',{'set_value':$('#win_func_method_txt').val()});
});
</script>

View File

@ -0,0 +1,27 @@
{assign name="_tpl_type" value="[_type]" /}
{php}$curType=array($_tpl_type=>' class="active"');{/php}
<ul class="nav nav-tabs">
<li{$curType['rule']}><a href="{:url('mystore/rule')}">采集规则</a></li>
<li{$curType['func']}><a href="{:url('mystore/funcApp')}">函数插件</a></li>
<li{$curType['api']}><a href="{:url('mystore/apiApp')}">接口插件</a></li>
<li{$curType['release']}><a href="{:url('mystore/releaseApp')}">发布插件</a></li>
{if $_tpl_type=='rule'}
<li class="nav-tab-right">
<div class="nav-check-update">
<a href="javascript:;" id="check_update">检测更新</a>
<input type="checkbox" id="auto_check" {:is_empty(g_sc_c('store_auto_check_rule'))?'':'checked="checked"'} value="1" title="刷新页面时自动检测" />
</div>
<span class="nav-sep">|</span>
<div class="nav-upload"><a href="{:url('mystore/upload?type=rule')}" onclick="windowModal('导入规则',$(this).attr('href'));return false;">导入规则</a></div>
</li>
{else/}
<li class="nav-tab-right">
<div class="nav-check-update">
<a href="javascript:;" id="check_update">检测更新</a>
<input type="checkbox" id="auto_check" {:is_empty(g_sc_c('store_auto_check_plugin'))?'':'checked="checked"'} value="1" title="刷新页面时自动检测" />
</div>
<span class="nav-sep">|</span>
<div class="nav-upload"><a href="{:url('mystore/upload')}" onclick="windowModal('导入插件',$(this).attr('href'));return false;">导入插件</a></div>
</li>
{/if}
</ul>

View File

@ -4,20 +4,8 @@
{/block}
{block name="content"}
{php}$orderClass=array($orderKey=>'_'.$sortBy);$orderSort=array($orderKey=>($sortBy=='asc'?'升序':'降序'));{/php}
<div class="nav-tabs-custom">
<ul class="nav nav-tabs">
<li><a href="{:url('mystore/rule')}">采集规则</a></li>
<li class="active"><a href="{:url('mystore/releaseApp')}">发布插件</a></li>
<li><a href="{:url('mystore/funcApp')}">函数插件</a></li>
<li class="nav-tab-right">
<div class="nav-check-update">
<a href="javascript:;" id="check_update">检测更新</a>
<input type="checkbox" id="auto_check" {:is_empty(g_sc_c('store_auto_check_plugin'))?'':'checked="checked"'} value="1" title="刷新页面时自动检测" />
</div>
<span class="nav-sep">|</span>
<div class="nav-upload"><a href="{:url('mystore/upload')}" onclick="windowModal('导入插件',$(this).attr('href'));return false;">导入插件</a></div>
</li>
</ul>
<div class="nav-tabs-custom" style="margin-bottom:15px;">
{include file="mystore:nav" _type="release" /}
<div class="tab-content">
<div class="tab-pane active">
<div class="table-responsive" style="border:0;">
@ -26,20 +14,20 @@
<table id="list_table" class="table table-hover datatable">
<thead>
<tr>
<th class="sorting{$orderClass['id']}" data-order="id" title="ID{$orderSort['id']}" style="width:65px;min-width:65px;">{$Think.lang.select}</th>
<th class="sorting{$orderClass['id']}" data-order="id" title="ID{$orderSort['id']}" style="width:50px;">ID</th>
<th class="sorting{$orderClass['name']}" data-order="name" title="{$orderSort['name']}">名称</th>
<th class="sorting{$orderClass['app']}" data-order="app" title="{$orderSort['app']}">标识</th>
<th>模块</th>
<th class="sorting{$orderClass['addtime']}" data-order="addtime" title="{$orderSort['addtime']}">本地添加</th>
<th class="sorting{$orderClass['uptime']}" data-order="uptime" title="{$orderSort['uptime']}">平台更新</th>
<th>平台</th>
<th>{$Think.lang.op}</th>
<th style="width:90px;">{$Think.lang.op}</th>
</tr>
</thead>
<tbody>
{foreach name="appList" item="app"}
<tr data-app-id="{$app['id']}">
<td class="chk"><input type="checkbox" name="ids[]" value="{$app['id']}" /></td>
<td>{$app['id']}</td>
<td><div class="name">{$app['name']}</div></td>
<td>{$app['app']}</td>
<td>{$app['module']}</td>
@ -56,18 +44,17 @@
{/foreach}
</tbody>
<tfoot>
{if empty($appList)}
<tr>
<td class="chk"><label class="chk-all"><input type="checkbox" id="chkall" onclick="checkall(this,'ids[]')" /><span>全部</span></label></td>
<td colspan="2">
<button type="button" class="btn btn btn-danger" id="deleteall">{$Think.lang.delete}</button>
&nbsp;<a href="{:url('develop/releaseCms')}" class="btn btn-primary">开发一个</a>
</td>
<td colspan="5" style="text-align:right;font-size:12px;">
{if !empty($appList)}
<p class="help-block"> “任务 &gt; 发布设置 &gt; 本地CMS程序” 中使用</p>
{/if}
<td colspan="8">没有发布插件</td>
</tr>
{else/}
<tr>
<td colspan="8" style="font-size:12px;padding:0;">
<p class="help-block" style="margin:8px 0 0 8px;"> “任务 &gt; 发布设置 &gt; 本地CMS程序” 中使用</p>
</td>
</tr>
{/if}
{if condition="!empty($pagenav)"}
<tr>
<td colspan="8">{$pagenav}</td>
@ -80,6 +67,7 @@
</div>
</div>
</div>
<a href="{:url('develop/releaseCms')}" class="btn btn-primary">开发一个</a>
<script type="text/javascript">
myStoreClass.init_releaseapp();
</script>

View File

@ -5,19 +5,7 @@
{block name="content"}
{php}$orderClass=array($orderKey=>'_'.$sortBy);$orderSort=array($orderKey=>($sortBy=='asc'?'升序':'降序'));{/php}
<div class="nav-tabs-custom">
<ul class="nav nav-tabs">
<li class="active"><a href="{:url('mystore/rule')}">采集规则</a></li>
<li><a href="{:url('mystore/releaseApp')}">发布插件</a></li>
<li><a href="{:url('mystore/funcApp')}">函数插件</a></li>
<li class="nav-tab-right">
<div class="nav-check-update">
<a href="javascript:;" id="check_update">检测更新</a>
<input type="checkbox" id="auto_check" {:is_empty(g_sc_c('store_auto_check_rule'))?'':'checked="checked"'} value="1" title="刷新页面时自动检测" />
</div>
<span class="nav-sep">|</span>
<div class="nav-upload"><a href="{:url('mystore/upload?type=rule')}" onclick="windowModal('导入规则',$(this).attr('href'));return false;">导入规则</a></div>
</li>
</ul>
{include file="mystore:nav" _type="rule" /}
<div class="tab-content">
<div class="tab-pane active">
<div class="table-responsive" style="border:0;">
@ -26,19 +14,19 @@
<table id="list_table" class="table table-hover datatable">
<thead>
<tr>
<th class="sorting{$orderClass['id']}" data-order="id" title="ID{$orderSort['id']}" style="width:65px;min-width:65px;">{$Think.lang.select}</th>
<th class="sorting{$orderClass['id']}" data-order="id" title="ID{$orderSort['id']}" style="width:50px;">ID</th>
<th class="sorting{$orderClass['name']}" data-order="name" title="{$orderSort['name']}">名称</th>
<th>模块</th>
<th class="sorting{$orderClass['addtime']}" data-order="addtime" title="{$orderSort['addtime']}">本地添加</th>
<th class="sorting{$orderClass['uptime']}" data-order="uptime" title="{$orderSort['uptime']}">平台更新</th>
<th>平台</th>
<th>{$Think.lang.op}</th>
<th style="width:50px;">{$Think.lang.op}</th>
</tr>
</thead>
<tbody>
{foreach name="ruleList" item="rule"}
<tr data-rule-id="{$rule['id']}">
<td class="chk"><input type="checkbox" name="ids[]" value="{$rule['id']}" /></td>
<td>{$rule['id']}</td>
<td><div class="name">{$rule['name']}</div></td>
<td>{:lang('task_module_'.$rule['module'])}</td>
<td>{:date('Y-m-d H:i',$rule['addtime'])}</td>
@ -51,15 +39,17 @@
{/foreach}
</tbody>
<tfoot>
{if empty($ruleList)}
<tr>
<td class="chk"><label class="chk-all"><input type="checkbox" id="chkall" onclick="checkall(this,'ids[]')" /><span>全部</span></label></td>
<td><button type="button" class="btn btn-danger" id="deleteall">{$Think.lang.delete}</button></td>
<td colspan="5" style="text-align:right;font-size:12px;">
{if !empty($ruleList)}
<p class="help-block"> “编辑任务 &gt; 导入规则 &gt; 已下载规则” 中使用</p>
{/if}
<td colspan="7">没有采集规则</td>
</tr>
{else/}
<tr>
<td colspan="7" style="font-size:12px;padding:0;">
<p class="help-block" style="margin:8px 0 0 8px;"> “编辑任务 &gt; 导入规则 &gt; 云端仓库规则” 中使用</p>
</td>
</tr>
{/if}
{if condition="!empty($pagenav)"}
<tr>
<td colspan="7">{$pagenav}</td>

View File

@ -12,7 +12,7 @@
(function(){
$('#window_rules #rule_list li a').bind('click',function(){
var id=$(this).attr('data-id');
var name='已下载 » '+$(this).attr('data-title');
var name='云端仓库 » '+$(this).attr('data-title');
taskOpClass.import_rule('rule:'+id,name);
});
$('#window_rules .pagination').addClass('pagination-sm');

View File

@ -12,7 +12,7 @@
<input type="text" name="upload_addon[pwd]" class="form-control" placeholder="该文件已加密,请输入密码">
</div>
<div class="form-group upload-plugins" style="display:none;">
<label style="margin-bottom:0;">检测到文件中包含{$typeIsPlugin?'多个':''}插件,{$typeIsPlugin?'请':'可'}选择需要导入的插件(导入后会覆盖已有插件)</label>
<label style="margin-bottom:0;">检测到文件中包含{$typeIsPlugin?'多个':''}插件,{$typeIsPlugin?'请':'可'}选择需要导入的插件</label>
<div class="upload-plugins-info"></div>
</div>
{if condition="g_sc_c('site','verifycode')"}

View File

@ -6,7 +6,7 @@
{if empty($cacheTip)}
<div class="alert alert-warning alert-dismissible" id="box_tip" style="padding-top:7px;padding-bottom:7px;line-height:20px;margin-bottom:10px;">
<button type="button" class="close" style="top:0px;">×</button>
允许通过下列第三方平台下载规则、插件等,注意:任何第三方平台都可能存在安全隐患,请谨慎下载!
允许通过下列第三方平台安装规则、插件等,注意:第三方平台可能存在安全隐患,请自行甄别
</div>
{/if}
<div class="box box-default">

View File

@ -17,11 +17,11 @@
</div>
<div id="db_table_p_{$dbKey}" class="panel-collapse collapse in">
<div class="panel-body db-table-bind-params">
<div class="table-responsive db-table-bind-where">
<div class="table-responsive db-table-bind-where">
<table class="table table-hover">
<thead>
<tr>
<th style="width:150px;">逻辑</th>
<th style="width:150px;">条件逻辑</th>
<th>数据库字段</th>
<th style="width:220px;">条件</th>
<th>条件值</th>
@ -84,6 +84,9 @@
</tbody>
</table>
</div>
<p class="help-block db-table-bind-help" data-bind-op="">可设置条件当数据库中存在该条件的记录时跳过新增操作例如条件是id = 123 ,查询到记录时跳过,无记录则新增数据</p>
<p class="help-block db-table-bind-help" data-bind-op="update">必须设置条件,当满足条件时更新数据</p>
<p class="help-block db-table-bind-help" data-bind-op="query">可设置条件,当满足条件时执行查询</p>
<div class="table-responsive db-table-bind-query">
<table class="table table-hover">
<thead>
@ -143,8 +146,11 @@
{foreach $tbFields[$dbTable['table']] as $field}
{if isset($dbTable['field'][$field['name']])}
<tr>
<td>
<td {if $field['comment']}style="cursor:help;" title="{$field['comment']|htmlspecialchars}"{/if}>
{$field['name']}
{if $field['comment']}
<span style="font-size:10px;color:#ccc;" class="glyphicon glyphicon-question-sign"></span>
{/if}
</td>
<td>
{$field['type']}
@ -167,8 +173,11 @@
{foreach $tbFields[$dbTable['table']] as $field}
{if !isset($dbTable['field'][$field['name']])}
<tr>
<td>
<td {if $field['comment']}style="cursor:help;" title="{$field['comment']|htmlspecialchars}"{/if}>
{$field['name']}
{if $field['comment']}
<span style="font-size:10px;color:#ccc;" class="glyphicon glyphicon-question-sign"></span>
{/if}
</td>
<td>
{$field['type']}

View File

@ -329,7 +329,7 @@
</select>
</div>
<div class="form-group toapi-content-type">
<label>POST数据类型 <a href="javascript:;" class="glyphicon glyphicon-info-sign icon-info-tips" onclick="tipsCurlPost()"></a></label>
<label>POST数据类型 <a href="javascript:;" class="glyphicon glyphicon-info-sign icon-info-tips" onclick="globalOp.tipsCurlPost()"></a></label>
<select name="toapi[content_type]" class="form-control">
<option value="">默认表单数据application/x-www-form-urlencoded</option>
<option value="application/json">JSON数组application/json</option>

View File

@ -101,14 +101,16 @@
<span class="input-group-addon brl_0 brr_0">间隔</span>
<input type="number" name="api_interval" class="form-control" placeholder="访问接口最小间隔默认15秒" />
</div>
{if !empty($apiUrl)}
<p class="help-block">
{if !empty($apiUrl)}
通过访问接口网址即可触发采集指定任务:<em><b>{:htmlspecialchars($apiUrl)}</b></em>
{if !empty($apiParams)}
<br>{$apiParams}
{/if}
</p>
{else /}
保存后显示接口网址
{/if}
</p>
</div>
</div>
</div>

View File

@ -3,7 +3,7 @@
<div class="well" style="text-align:center;">
<label class="checkbox-inline"><input type="checkbox" name="types[]" value="all"> 所有</label>
<label class="checkbox-inline" title="系统日志、临时文件等"><input type="checkbox" name="types[]" value="system" checked="checked"> 系统缓存</label>
<label class="checkbox-inline" title="采集运行时产生的文件"><input type="checkbox" name="types[]" value="data"> 数据缓存</label>
<label class="checkbox-inline" title="采集运行时缓存的数据"><input type="checkbox" name="types[]" value="data"> 采集缓存</label>
{if $clearPageRender}
<label class="checkbox-inline" title="渲染工具的内存数据"><input type="checkbox" name="types[]" value="page_render"> 渲染工具缓存</label>
{/if}

View File

@ -8,17 +8,9 @@
<div class="tab-content">
<div class="tab-pane active" style="padding:0px 5px;">
{if !empty($config['tool'])}
{if $toolIsOpen}
<div class="alert alert-success" role="alert">
渲染工具正在运行!
<button type="button" id="btn_chrome_clean" class="btn btn-sm btn-success" style="margin-left:5px;">清理渲染工具缓存</button>
{if $serverIsLocal}
<button type="button" id="btn_chrome_restart" class="btn btn-sm btn-success" style="margin-left:5px;">重启渲染工具</button>
{/if}
</div>
{else /}
<div class="alert alert-warning" role="alert">渲染工具服务器未开启,请检查配置是否正确!确认无误后点击保存</div>
{/if}
<div id="page_render_status">
<div class="alert alert-success" role="alert"><div class="loading-sm" style="margin-right:5px;"></div> 正在检测状态</div>
</div>
{/if}
<form id="form_set" method="post" role="form" action="{:url('admin/setting/page_render')}">
{:html_usertoken()}
@ -46,6 +38,9 @@
</div>
</div>
<p class="help-block">浏览器可执行文件在服务器中的绝对路径或者在系统中的环境变量名称</p>
</div>
<div class="form-group" data-chrome-server="remote">
<p class="help-block">请在远程服务器中开启Chrome/Chromium浏览器的headless模式 <a href="https://www.skycaiji.com/manual/q/chrome%20headless" target="_blank">了解headless</a></p>
</div>
<div class="form-group">
<label>浏览器服务器</label>

View File

@ -0,0 +1,24 @@
<form id="win_form_page_render_api" ajax-submit="true" method="post" action="{:url('admin/setting/page_render_api')}">
{:html_usertoken()}
<div class="form-group">
<label>开启接口</label>
<div class="input-group">
<label class="radio-inline"><input type="radio" name="open" value="1" {$data['open']?'checked="checked"':''}></label>
<label class="radio-inline"><input type="radio" name="open" value="0" {$data['open']?'':'checked="checked"'}></label>
</div>
<p class="help-block">可通过接口执行操作,注意:清理{if $serverIsLocal}和重启{/if}操作会导致正在渲染的页面丢失</p>
</div>
<div class="form-group">
<label>接口密钥</label>
<input type="text" name="key" class="form-control" placeholder="选填,防止接口泄露" value="{$data['key']|htmlspecialchars}" />
</div>
<p class="help-block"><b>清理渲染工具缓存:</b><a href="{$urls['clear']}" target="_blank">{$urls['clear']|htmlspecialchars}</a></p>
{if $serverIsLocal}
<p class="help-block"><b>重启渲染工具:</b><a href="{$urls['restart']}" target="_blank">{$urls['restart']|htmlspecialchars}</a></p>
{/if}
<p class="help-block"><b>查看正在渲染的页面:</b><a href="{$urls['list']}" target="_blank">{$urls['list']|htmlspecialchars}</a></p>
<p class="help-block"><b>关闭渲染的页面:</b><a href="{$urls['close']}" target="_blank">{$urls['close']|htmlspecialchars}</a>
<br><b>id</b>可打开“正在渲染的页面”链接输入data子节点中的id属性
</p>
<button type="submit" class="btn btn-primary btn-block">保存</button>
</form>

View File

@ -0,0 +1,14 @@
{if !empty($config['tool'])}
{if $toolIsOpen}
<div class="alert alert-success" role="alert">
<span style="margin-right:3px;">渲染工具运行中{if $tabs>0},有<b>{$tabs}</b>个页面正在渲染{/if}</span>
<button type="button" id="btn_page_render_clear" class="btn btn-sm btn-success" style="margin-left:5px;">清理渲染工具缓存</button>
{if $serverIsLocal}
<button type="button" id="btn_page_render_restart" class="btn btn-sm btn-success" style="margin-left:5px;">重启渲染工具</button>
{/if}
<button type="button" id="btn_page_render_api" class="btn btn-sm btn-success" style="margin-left:5px;">API接口</button>
</div>
{else /}
<div class="alert alert-warning" role="alert">渲染工具服务器未开启,请检查配置是否正确!确认无误后点击保存</div>
{/if}
{/if}

View File

@ -19,8 +19,8 @@
<th>{$Think.lang.task_auto}</th>
<th>{$Think.lang.task_addtime}</th>
<th>{$Think.lang.task_caijitime}</th>
<th width="200">{$Think.lang.task_collected}</th>
<th>{$Think.lang.op}</th>
<th style="width:200px;">{$Think.lang.task_collected}</th>
<th style="width:125px;">{$Think.lang.op}</th>
</tr>
</thead>
<tbody>

View File

@ -21,8 +21,8 @@
<th class="sorting{$orderClass['auto']}" data-order="auto" title="{$orderSort['auto']}" style="min-width:90px;">{$Think.lang.task_auto}</th>
<th class="sorting{$orderClass['addtime']}" data-order="addtime" title="{$orderSort['addtime']}">{$Think.lang.task_addtime}</th>
<th class="sorting{$orderClass['caijitime']}" data-order="caijitime" title="{$orderSort['caijitime']}">{$Think.lang.task_caijitime}</th>
<th width="200">{$Think.lang.task_collected}</th>
<th>{$Think.lang.op}</th>
<th style="width:200px;">{$Think.lang.task_collected}</th>
<th style="width:125px;">{$Think.lang.op}</th>
</tr>
</thead>
<tbody>

View File

@ -40,7 +40,7 @@
导入规则 <span class="caret"></span>
</button>
<ul class="dropdown-menu dropdown-menu-right dropdown-import-rule" aria-labelledby="btn_import_rule">
<li><a href="javascript:;" onclick="windowModal('导入规则会覆盖该任务的采集器设置,且不可恢复','{:url("mystore/rule?tpl=task&type=collect")}');">已下载规则</a></li>
<li><a href="javascript:;" onclick="windowModal('导入规则会覆盖该任务的采集器设置,且不可恢复','{:url("mystore/rule?tpl=task&type=collect")}');">云端仓库规则</a></li>
<li><a href="javascript:;" onclick="windowModal('导入规则会覆盖该任务的采集器设置,且不可恢复','{:url("collector/list?module=pattern&tpl=task")}');">其它任务的规则</a></li>
<li><a href="javascript:;" onclick="windowModal('导入规则会覆盖该任务的采集器设置,且不可恢复','{:url("mystore/upload?type=rule&from_task=1")}');">导入规则文件</a></li>
</ul>

View File

@ -10,9 +10,9 @@
*/
define('SKYCAIJI_VERSION', '2.7');
\think\Loader::addNamespace('plugin', realpath(SKYCAIJI_PATH.'plugin'));
\think\Loader::addNamespace('util',realpath(APP_PATH.'extend/util'));
define('SKYCAIJI_VERSION', '2.8');
\think\Loader::addNamespace('plugin',SKYCAIJI_PATH.'plugin');
\think\Loader::addNamespace('util',APP_PATH.'extend/util');
error_reporting(E_ERROR | E_PARSE);
@ -283,6 +283,23 @@ function get_html($url,$headers=array(),$options=array(),$fromEncode='auto',$pos
}
$postDataJsonKey=&$postDataJsonKey[$kv];
}
if(is_numeric($v)&&is_string($v)){
if(strpos($v,'.')!==false){
if(strlen(str_replace(array('-','.'),'',$v))<=14){
$v=floatval($v);
}
}else{
if(strlen(str_replace('-','',$v))<=18){
$v=intval($v);
}
}
}
$postDataJsonKey=$v;
}
}

View File

@ -31,12 +31,12 @@ class CommonHandle extends \think\exception\Handle {
return parent::renderHttpException($e);
}
}
protected function convertExceptionToResponse(\Exception $exception){
protected function convertExceptionToResponse(\Exception $e){
if(\util\Param::is_collector_collecting()){
$this->_collect_output($e);
}else{
return parent::convertExceptionToResponse($exception);
return parent::convertExceptionToResponse($e);
}
}
private function _collect_output($exception){

View File

@ -303,7 +303,14 @@ class Dataapi extends BaseModel{
return $conds;
}
private function _cond_query($cond,$params){
return array($cond['field'],$this->get_cond_sql($cond['op']),$params[$cond['name']]);
$val=$params[$cond['name']];
if($cond['op']==='like'||$cond['op']==='nlike'){
if(strpos($val,'%')===false&&!is_empty($val,true)){
$val='%'.$val.'%';
}
}
return array($cond['field'],$this->get_cond_sql($cond['op']),$val);
}
}
?>

View File

@ -237,12 +237,12 @@ return [
'html_v'=>'',//css和js版本,在init.php中设置
'root_path'=>realpath(SKYCAIJI_PATH),//站点根目录
'app_path'=>realpath(APP_PATH),//vendor/skycaiji/app项目目录
'apps_path'=>realpath(SKYCAIJI_PATH.'app'),//应用程序目录
'plugin_path'=>realpath(SKYCAIJI_PATH.'plugin'),//插件目录
'vendor_path'=>realpath(VENDOR_PATH),//vendor目录
'runtime_path'=>realpath(RUNTIME_PATH),//runtime目录
'root_path'=>rtrim(SKYCAIJI_PATH,'\/\\'),//站点根目录
'app_path'=>rtrim(APP_PATH,'\/\\'),//vendor/skycaiji/app项目目录
'apps_path'=>rtrim(SKYCAIJI_PATH.'app','\/\\'),//应用程序目录
'plugin_path'=>rtrim(SKYCAIJI_PATH.'plugin','\/\\'),//插件目录
'vendor_path'=>rtrim(VENDOR_PATH,'\/\\'),//vendor目录
'runtime_path'=>rtrim(RUNTIME_PATH,'\/\\'),//runtime目录
'root_url'=>rtrim(preg_replace('/\/index\.php.*/i','',Request::instance()->root()?:''),'\/\\'),//网址根目录
'root_website'=>(Request::instance()->isSsl()?'https':'http').'://'.trim(Request::instance()->host()?:'','\/\\').rtrim(preg_replace('/\/index\.php.*/i','',Request::instance()->root()?:''),'\/\\'),//带域名网站根目录去掉index.php结尾不带/

View File

@ -102,17 +102,22 @@ class ChromeSocket{
$command=\skycaiji\admin\model\Config::cli_safe_filename($command);
}
$command.=' --headless --proxy-server';
if(!empty($options['user_data_dir'])){
$command=sprintf('%s --user-data-dir=%s',$command,$options['user_data_dir']);
}
if($isTest&&$hasProcOpen){
if($isTest&&!IS_WIN){
$command=sprintf('%s',$command);
$command.=' --version';
}else{
$command=sprintf('%s --remote-debugging-port=%s',$command,$port);
$command.=' --headless --proxy-server';
if(!empty($options['user_data_dir'])){
$command=sprintf('%s --user-data-dir=%s',$command,$options['user_data_dir']);
}
if($isTest&&$hasProcOpen){
$command=sprintf('%s',$command);
}else{
$command=sprintf('%s --remote-debugging-port=%s',$command,$port);
}
}
if(!$hasProcOpen){
$return['error']='页面渲染需开启proc_open或在服务器中执行命令'.$command;
@ -693,6 +698,55 @@ class ChromeSocket{
}
}
}
public static function config_init($config){
init_array($config);
init_array($config['chrome']);
$chromeSocket=null;
if(model('admin/Config')->page_render_is_chrome(true,$config['tool'])){
$chromeSocket=new \util\ChromeSocket($config['chrome']['host'],$config['chrome']['port'],$config['timeout'],$config['chrome']['filename'],$config['chrome']);
}
return $chromeSocket;
}
public static function config_start($config,$restart=false){
init_array($config);
$chromeSocket=self::config_init($config);
$error='';
if($chromeSocket){
try {
if($restart){
$chromeSocket->closeBrowser();
$chromeSocket->openHost();
}else{
if(!$chromeSocket->hostIsOpen()){
$chromeSocket->openHost();
}
}
}catch (\Exception $ex){
$error=$ex->getMessage();
}
}
return $error;
}
public static function config_clear(){
$config=model('admin/Config')->getConfig('page_render','data');
$chromeSocket=self::config_init($config);
if($chromeSocket){
$chromeSocket->clearBrowser();
}
}
public static function config_restart(){
$config=model('admin/Config')->getConfig('page_render','data');
$error=self::config_start($config,true);
return $error;
}
}
?>

View File

@ -551,6 +551,44 @@ class Funcs{
}
return $cookies;
}
public static function increase_nums($start,$end,$inc=1,$desc=false,$len=0,$max=0){
$start=intval($start);
$end=intval($end);
$end=max($start,$end);
$inc=intval($inc);
$inc=$inc?$inc:1;
$desc=$desc?1:0;
$len=intval($len);
$max=intval($max);
$nums=array();
if($desc){
for($i=$end;$i>=$start;$i--){
$curNum=$start+($i-$start)*$inc;
if($len>0){
$curNum=str_pad($curNum,$len,'0',STR_PAD_LEFT);
}
$nums[]=$curNum;
if($max>0&&count($nums)>=$max){
break;
}
}
}else{
for($i=$start;$i<=$end;$i++){
$curNum=$start+($i-$start)*$inc;
if($len>0){
$curNum=str_pad($curNum,$len,'0',STR_PAD_LEFT);
}
$nums[]=$curNum;
if($max>0&&count($nums)>=$max){
break;
}
}
}
return $nums;
}
}
?>

View File

@ -676,9 +676,14 @@ class Tools{
$curDomain=self::match_domain_url($base_url,true);
$curDomain=empty($curDomain)?rtrim($params['domain_url'],'/'):$curDomain;
$url=$curDomain.'/'.ltrim($url,'/');
}elseif(stripos($url,'javascript')===0||$url==''||strpos($url,'#')===0){
}elseif(stripos($url,'javascript')===0||$url==''||strpos($url,'#')===0||strpos($url,'?')===0){
$url=($params['base_tag_url']?$params['base_tag_url']:$params['cur_url']).(strpos($url,'#')===0?($params['url_no_name']?'':$url):'');
if(strpos($url,'#')===0){
$url=$params['url_no_name']?'':$url;
}else{
$url=strpos($url,'?')===0?$url:'';
}
$url=($params['base_tag_url']?$params['base_tag_url']:$params['cur_url']).$url;
}elseif(!preg_match('/^\w+\:\/\//', $url)){
$url=$base_url.'/'.ltrim($url,'/');
@ -829,5 +834,24 @@ class Tools{
echo $txt;
ob_end_flush();
}
public static function cache_file($path,$name,$value=''){
static $classList=array();
$path=$path?:'files';
if(!isset($classList[$path])){
$classList[$path]=new \think\cache\driver\File(array('path'=>config('runtime_path').'/'.$path.'/'));
}
$class=$classList[$path];
if(is_null($value)){
$class->rm($name);
}elseif(''===$value){
return $class->get($name);
}else{
$class->set($name,$value);
}
}
}
?>

Some files were not shown because too many files have changed in this diff Show More