123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450 |
- /**
- * @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 = $('<div id="suggest"></div>').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<suggestFields.length; i++){
- var str = this[suggestFields[i]];
- if (str) {
- if (liLabel) liLabel += '-';
- liLabel += str;
- }
- }
- for (var key in this) {
- if (liAttr) liAttr += ',';
- liAttr += key+":'"+this[key]+"'";
- }
- html += '<li lookupAttrs="'+liAttr+'">' + liLabel + '</li>';
- });
-
- var $lis = $suggest.html('<ul>'+html+'</ul>').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<suggestFields.length; i++){
- if (_util.lookupField(suggestFields[i]) == event.target.name) {
- break;
- }
- if (jsonStr) jsonStr += ',';
- jsonStr += suggestFields[i]+":''";
- }
- jsonStr = "{"+_lookup.pk+":''," + jsonStr +"}";
- $.bringBackSuggest(DWZ.jsonEval(jsonStr));
- }
- },
- error: function(){
- $suggest.html('');
- }
- });
- $(document).bind("click", _close);
- return false;
- }
- function _select($item){
- var jsonStr = "{"+ $item.attr('lookupAttrs') +"}";
-
- $.bringBackSuggest(DWZ.jsonEval(jsonStr));
- }
- function _close(){
- $(op.suggest$).html('').hide();
- selectedIndex = -1;
- $(document).unbind("click", _close);
- }
-
- $input.focus(_show).click(false).keyup(function(event){
- var $items = $(op.suggest$).find("li");
- switch(event.keyCode){
- case DWZ.keyCode.ESC:
- case DWZ.keyCode.TAB:
- case DWZ.keyCode.SHIFT:
- case DWZ.keyCode.HOME:
- case DWZ.keyCode.END:
- case DWZ.keyCode.LEFT:
- case DWZ.keyCode.RIGHT:
- break;
- case DWZ.keyCode.ENTER:
- _close();
- break;
- case DWZ.keyCode.DOWN:
- if (selectedIndex >= $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 = $('<div class="button"><div class="buttonContent"><button type="button">'+addButTxt+'</button></div></div>').insertBefore($table).find("button");
- var $rowNum = $('<input type="text" name="dwz_rowNum" class="textInput" style="margin:2px;" value="1" size="2"/>').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; i<rowNum; i++){
- var $tr = $(trTm);
- $tr.appendTo($tbody).initUI().find("a.btnDel").click(function(){
- $(this).parents("tr:first").remove();
- initSuffix($tbody);
- return false;
- });
- }
- initSuffix($tbody);
- });
- }
- });
-
- /**
- * 删除时重新初始化下标
- */
- function initSuffix($tbody) {
- $tbody.find('>tr').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 = '<a href="javascript:void(0)" class="btnDel '+ field.fieldClass + '">删除</a>';
- 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 = '<input type="hidden" name="'+field.lookupGroup+'.'+field.lookupPk+suffix+'"/>'
- + '<input type="text" name="'+field.name+'"'+suggestFrag+' lookupPk="'+field.lookupPk+'" size="'+field.size+'" class="'+field.fieldClass+'"/>'
- + '<a class="btnLook" href="'+field.lookupUrl+'" lookupGroup="'+field.lookupGroup+'" '+suggestFrag+' lookupPk="'+field.lookupPk+'" title="查找带回">查找带回</a>';
- break;
- case 'attach':
- html = '<input type="hidden" name="'+field.lookupGroup+'.'+field.lookupPk+suffix+'"/>'
- + '<input type="text" name="'+field.name+'" size="'+field.size+'" readonly="readonly" class="'+field.fieldClass+'"/>'
- + '<a class="btnAttach" href="'+field.lookupUrl+'" lookupGroup="'+field.lookupGroup+'" '+suffixFrag+' lookupPk="'+field.lookupPk+'" width="560" height="300" title="查找带回">查找带回</a>';
- 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 = '<input type="text" name="'+field.name+'" value="'+field.defaultVal+'" class="date '+field.fieldClass+'" dateFmt="'+field.patternDate+'" size="'+field.size+'"/>'
- +'<a class="inputDateButton" href="javascript:void(0)">选择</a>';
- break;
- default:
- html = '<input type="'+field.type+'" name="'+field.name+'" value="'+field.defaultVal+'" size="'+field.size+'" class="'+field.fieldClass+'" '+attrFrag+'/>';
- break;
- }
- return '<td>'+html+'</td>';
- }
- function trHtml(fields){
- var html = '';
- $(fields).each(function(){
- html += tdHtml(this);
- });
- return '<tr class="unitBox">'+html+'</tr>';
- }
- },
-
- 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 csrfName = $this.attr("csrfName");
- var csrfVal = $this.attr("csrfVal");
- 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;
- if (csrfName && csrfVal) {
- _data[csrfName] = csrfVal;
- }
-
- return _data;
- }
- }(),
- success: _callback,
- error: DWZ.ajaxError
- });
- }
- var title = $this.attr("title");
- if (title) {
- alertMsg.confirm(title, {okCall: _doPost});
- } else {
- _doPost();
- }
- return false;
- });
-
- });
- }
- });
- })(jQuery);
|