/** * @author ZhangHuihua@msn.com */ (function($){ var _lookup = {currentGroup:"", suffix:"", $target:null, pk:"id"}; var _util = { _lookupPrefix: function(key){ var strDot = _lookup.currentGroup ? "." : ""; return _lookup.currentGroup + strDot + key + _lookup.suffix; }, lookupPk: function(key){ return this._lookupPrefix(key); }, lookupField: function(key){ return this.lookupPk(key); } }; $.extend({ bringBackSuggest: function(args){ var $box = _lookup['$target'].parents(".unitBox:first"); $box.find(":input").each(function(){ var $input = $(this), inputName = $input.attr("name"); for (var key in args) { var name = (_lookup.pk == key) ? _util.lookupPk(key) : _util.lookupField(key); if (name == inputName) { $input.val(args[key]); break; } } }); }, bringBack: function(args){ $.bringBackSuggest(args); $.pdialog.closeCurrent(); } }); $.fn.extend({ lookup: function(){ return this.each(function(){ var $this = $(this), options = {mask:true, width:$this.attr('width')||820, height:$this.attr('height')||400, maxable:eval($this.attr("maxable") || "true"), resizable:eval($this.attr("resizable") || "true") }; $this.click(function(event){ _lookup = $.extend(_lookup, { currentGroup: $this.attr("lookupGroup") || "", suffix: $this.attr("suffix") || "", $target: $this, pk: $this.attr("lookupPk") || "id" }); var url = unescape($this.attr("href")).replaceTmById($(event.target).parents(".unitBox:first")); if (!url.isFinishedTm()) { alertMsg.error($this.attr("warn") || DWZ.msg("alertSelectMsg")); return false; } $.pdialog.open(url, "_blank", $this.attr("title") || $this.text(), options); return false; }); }); }, multLookup: function(){ return this.each(function(){ var $this = $(this), args={}; $this.click(function(event){ var $unitBox = $this.parents(".unitBox:first"); $unitBox.find("[name='"+$this.attr("multLookup")+"']").filter(":checked").each(function(){ var _args = DWZ.jsonEval($(this).val()); for (var key in _args) { var value = args[key] ? args[key]+"," : ""; args[key] = value + _args[key]; } }); if ($.isEmptyObject(args)) { alertMsg.error($this.attr("warn") || DWZ.msg("alertSelectMsg")); return false; } $.bringBack(args); }); }); }, suggest: function(){ var op = {suggest$:"#suggest", suggestShadow$: "#suggestShadow"}; var selectedIndex = -1; return this.each(function(){ var $input = $(this).attr('autocomplete', 'off').keydown(function(event){ if (event.keyCode == DWZ.keyCode.ENTER && $(op.suggest$).is(':visible')) return false; //屏蔽回车提交 }); var suggestFields=$input.attr('suggestFields').split(","); function _show(event){ var offset = $input.offset(); var iTop = offset.top+this.offsetHeight; var $suggest = $(op.suggest$); if ($suggest.size() == 0) $suggest = $('
').appendTo($('body')); $suggest.css({ left:offset.left+'px', top:iTop+'px' }).show(); _lookup = $.extend(_lookup, { currentGroup: $input.attr("lookupGroup") || "", suffix: $input.attr("suffix") || "", $target: $input, pk: $input.attr("lookupPk") || "id" }); var url = unescape($input.attr("suggestUrl")).replaceTmById($(event.target).parents(".unitBox:first")); if (!url.isFinishedTm()) { alertMsg.error($input.attr("warn") || DWZ.msg("alertSelectMsg")); return false; } var postData = {}; postData[$input.attr("postField")||"inputValue"] = $input.val(); $.ajax({ global:false, type:'POST', dataType:"json", url:url, cache: false, data: postData, success: function(response){ if (!response) return; var html = ''; $.each(response, function(i){ var liAttr = '', liLabel = ''; for (var i=0; i' + liLabel + ''; }); var $lis = $suggest.html('').find("li"); $lis.hoverClass("selected").click(function(){ _select($(this)); }); if ($lis.size() == 1 && event.keyCode != DWZ.keyCode.BACKSPACE) { _select($lis.eq(0)); } else if ($lis.size() == 0){ var jsonStr = ""; for (var i=0; i= $items.size()-1) selectedIndex = -1; else selectedIndex++; break; case DWZ.keyCode.UP: if (selectedIndex < 0) selectedIndex = $items.size()-1; else selectedIndex--; break; default: _show(event); } $items.removeClass("selected"); if (selectedIndex>=0) { var $item = $items.eq(selectedIndex).addClass("selected"); _select($item); } }); }); }, itemDetail: function(){ return this.each(function(){ var $table = $(this).css("clear","both"), $tbody = $table.find("tbody"); var fields=[]; $table.find("tr:first th[type]").each(function(i){ var $th = $(this); var field = { type: $th.attr("type") || "text", patternDate: $th.attr("dateFmt") || "yyyy-MM-dd", name: $th.attr("name") || "", defaultVal: $th.attr("defaultVal") || "", size: $th.attr("size") || "12", enumUrl: $th.attr("enumUrl") || "", lookupGroup: $th.attr("lookupGroup") || "", lookupUrl: $th.attr("lookupUrl") || "", lookupPk: $th.attr("lookupPk") || "id", suggestUrl: $th.attr("suggestUrl"), suggestFields: $th.attr("suggestFields"), postField: $th.attr("postField") || "", fieldClass: $th.attr("fieldClass") || "", fieldAttrs: $th.attr("fieldAttrs") || "" }; fields.push(field); }); $tbody.find("a.btnDel").click(function(){ var $btnDel = $(this); if ($btnDel.is("[href^=javascript:]")){ $btnDel.parents("tr:first").remove(); initSuffix($tbody); return false; } function delDbData(){ $.ajax({ type:'POST', dataType:"json", url:$btnDel.attr('href'), cache: false, success: function(){ $btnDel.parents("tr:first").remove(); initSuffix($tbody); }, error: DWZ.ajaxError }); } if ($btnDel.attr("title")){ alertMsg.confirm($btnDel.attr("title"), {okCall: delDbData}); } else { delDbData(); } return false; }); var addButTxt = $table.attr('addButton') || "Add New"; if (addButTxt) { var $addBut = $('
').insertBefore($table).find("button"); var $rowNum = $('').insertBefore($table); var trTm = ""; $addBut.click(function(){ if (! trTm) trTm = trHtml(fields); var rowNum = 1; try{rowNum = parseInt($rowNum.val())} catch(e){} for (var i=0; itr').each(function(i){ $(':input, a.btnLook, a.btnAttach', this).each(function(){ var $this = $(this), name = $this.attr('name'), val = $this.val(); if (name) $this.attr('name', name.replaceSuffix(i)); var lookupGroup = $this.attr('lookupGroup'); if (lookupGroup) {$this.attr('lookupGroup', lookupGroup.replaceSuffix(i));} var suffix = $this.attr("suffix"); if (suffix) {$this.attr('suffix', suffix.replaceSuffix(i));} if (val && val.indexOf("#index#") >= 0) $this.val(val.replace('#index#',i+1)); }); }); } function tdHtml(field){ var html = '', suffix = ''; if (field.name.endsWith("[#index#]")) suffix = "[#index#]"; else if (field.name.endsWith("[]")) suffix = "[]"; var suffixFrag = suffix ? ' suffix="' + suffix + '" ' : ''; var attrFrag = ''; if (field.fieldAttrs){ var attrs = DWZ.jsonEval(field.fieldAttrs); for (var key in attrs) { attrFrag += key+'="'+attrs[key]+'"'; } } switch(field.type){ case 'del': html = '删除'; break; case 'lookup': var suggestFrag = ''; if (field.suggestFields) { suggestFrag = 'autocomplete="off" lookupGroup="'+field.lookupGroup+'"'+suffixFrag+' suggestUrl="'+field.suggestUrl+'" suggestFields="'+field.suggestFields+'"' + ' postField="'+field.postField+'"'; } html = '' + '' + '查找带回'; break; case 'attach': html = '' + '' + '查找带回'; break; case 'enum': $.ajax({ type:"POST", dataType:"html", async: false, url:field.enumUrl, data:{inputName:field.name}, success:function(response){ html = response; } }); break; case 'date': html = '' +'选择'; break; default: html = ''; break; } return ''+html+''; } function trHtml(fields){ var html = ''; $(fields).each(function(){ html += tdHtml(this); }); return ''+html+''; } }, selectedTodo: function(){ function _getIds(selectedIds, targetType){ var ids = ""; var $box = targetType == "dialog" ? $.pdialog.getCurrent() : navTab.getCurrentPanel(); $box.find("input:checked").filter("[name='"+selectedIds+"']").each(function(i){ var val = $(this).val(); ids += i==0 ? val : ","+val; }); return ids; } return this.each(function(){ var $this = $(this); var selectedIds = $this.attr("rel") || "ids"; var postType = $this.attr("postType") || "map"; $this.click(function(){ var targetType = $this.attr("targetType"); var ids = _getIds(selectedIds, targetType); if (!ids) { alertMsg.error($this.attr("warn") || DWZ.msg("alertSelectMsg")); return false; } var _callback = $this.attr("callback") || (targetType == "dialog" ? dialogAjaxDone : navTabAjaxDone); if (! $.isFunction(_callback)) _callback = eval('(' + _callback + ')'); function _doPost(){ $.ajax({ type:'POST', url:$this.attr('href'), dataType:'json', cache: false, data: function(){ if (postType == 'map'){ return $.map(ids.split(','), function(val, i) { return {name: selectedIds, value: val}; }) } else { var _data = {}; _data[selectedIds] = ids; return _data; } }(), success: _callback, error: DWZ.ajaxError }); } var title = $this.attr("title"); if (title) { alertMsg.confirm(title, {okCall: _doPost}); } else { _doPost(); } return false; }); }); } }); })(jQuery);