123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433 |
- /**
- * bootstable 表单录入插件
- * caratename:雨中磐石(rainrock)
- * caratetime:2014-04-06 21:40:00
- * email:admin@rockoa.com
- * homepage:www.rockoa.com
- */
- (function ($) {
-
- function bootsform(element, options){
- var obj = element;
- var can = options;
- var rand = can.rand;
- var me = this;
- this.form = null;
- this.editdata = {};
- this.itemsdata = {};
-
- this.init = function(){
- if(rand=='')rand=js.getrand();
- if(!can.window)return;
- can.windowid = 'window_'+rand+'';
- var s = this._create();
- js.tanbody(can.windowid, can.title, can.width, can.height,{bbar:'none',html:s,titlecls:can.saveCls});
- can.render = ''+can.windowid+'_body';
- obj = $('#'+can.render+'');
- this.createafter();
- $('#cancel_'+rand+'').focus();
- };
- this.forminit = function(){
- this.createafter();
- };
- this.createafter = function(){
- this.form = document['form_'+rand+''];
- var saveid = can.saveid;
- if(saveid=='')saveid = 'save_'+rand+'';
- $('#'+saveid+'').click(function(){
- me._save(this, 0);
- });
- $('#cancel_'+rand+'').click(function(){
- me._cancel(this);
- });
- var a = can.items,b=[],i;
- if(can.requiredfields!='')b = can.requiredfields.split(',');
- for(i=0; i<a.length; i++){
- if(a[i].required)b.push(a[i].name);
- }
- for(i=0; i<b.length; i++){
- $(this.form[b[i]]).change(function(){
- me.isValid();
- });
- $(this.form[b[i]]).blur(function(){
- me.isValid();
- });
- }
- if(obj){
- obj.find("button[changeuser]").click(function(){
- me._changeuser($(this));
- return false;
- });
- obj.find("button[changeclear]").click(function(){
- me._changeclear($(this));
- return false;
- });
- obj.find("button[changedate]").click(function(){
- me._changedate($(this));
- return false;
- });
- }
- };
- this._changeuser = function(o){
- var cn = o.attr('changeuser');
- var ssa = this.itemsdata[cn].changeuser;
- if(!ssa)ssa={};
- ssa.nameobj = this.form[cn];
- if(ssa.idname){
- ssa.value = this.getValue(ssa.idname);
- ssa.idobj = this.form[ssa.idname];
- }
- js.getuser(ssa);
- };
- this._changedate = function(o){
- var viev = o.attr('changedate'),atr='',
- inpu = o.attr('inputid');
- var cans = {view:viev,inputid:inpu,initshow:true};
- o.rockdatepicker(cans);
- };
- this._changeclear = function(o){
- var cn = o.attr('changeclear');
- var ssa = this.itemsdata[cn].changeuser;
- if(!ssa)ssa={};
- if(ssa.idname){
- this.setValue(ssa.idname, '');
- }
- this.setValue(cn, '');
- };
- this._create = function(){
- var s = '',a=can.items,i,i1,style='padding:10px';
- if(can.bodyheight!=0)style+=';height:'+can.bodyheight+'px';
- s+='<div align="center" style="'+style+';overflow-y:auto" >';
- s+='<form id="form_'+rand+'" name="form_'+rand+'" style="padding:0px;maring:0px">';
- s+='<input name="id" value="0" type="hidden">';
- s+='<table width="'+can.bodywidth+'">';
- for(i=0; i<a.length; i++){
- can.items[i] = js.applyIf(a[i], can.defaultfields);
- a[i] = can.items[i];
- this.itemsdata[a[i].name] = a[i];
- var bl=a[i].blankText,bt='',attr = a[i].attr;
- if(!bl)bl='';if(!attr)attr='';
- if(a[i].required)bt='<font color="red">*</font>';
- if(a[i].readOnly)attr+=' readonly';
- if(a[i].repEmpty)attr+=' onblur="this.value=strreplace(this.value)"';
- if(a[i].type=='number')attr+=' onfocus="js.focusval=this.value" onblur="js.number(this)"';
- var inp = '<input placeholder="'+bl+'" '+attr+' type="'+a[i].type+'" value="'+a[i].value+'" name="'+a[i].name+'" class="form-control">';
- if(a[i].type=='checkbox'){
- if(a[i].checked)attr+=' checked';
- inp = '<label><input name="'+a[i].name+'" '+attr+' value="1" type="checkbox"> '+a[i].labelBox+'</label>';
- }else if(a[i].type=='textarea'){
- inp = '<textarea placeholder="'+bl+'" '+attr+' name="'+a[i].name+'" class="form-control" style="height:'+a[i].height+'px">'+a[i].value+'</textarea>';
- }else if(a[i].type=='select'){
- inp = '<select name="'+a[i].name+'" class="form-control">';
- var sto = a[i].store;
- for(i1=0;i1<sto.length;i1++){
- inp+='<option value="'+sto[i1][a[i].valuefields]+'">'+sto[i1][a[i].displayfields]+'</option>';
- }
- inp += '</select>';
- }else if(a[i].type=='changeuser'){
- inp = '<div class="input-group"><input placeholder="'+bl+'" readonly class="form-control" name="'+a[i].name+'" >';
- inp+= '<span class="input-group-btn">';
- if(a[i].clearbool)inp+= '<button class="btn btn-default" changeclear="'+a[i].name+'" type="button"><i class="icon-remove"></i></button>';
- inp+= '<button class="btn btn-default" changeuser="'+a[i].name+'" type="button"><i class="icon-search"></i></button>';
- inp+= '</span></div>';
- }else if(a[i].type=='date'){
- inp = '<div class="input-group"><input readonly class="form-control" id="'+a[i].name+'-'+rand+'-inputid" name="'+a[i].name+'" >';
- inp+= '<span class="input-group-btn">';
- inp+= '<button class="btn btn-default" '+attr+' changedate="'+a[i].view+'" inputid="'+a[i].name+'-'+rand+'-inputid" type="button"><i class="icon-calendar"></i></button>';
- inp+= '</span></div>';
- }else if(a[i].type=='html'){
- inp = a[i].html;
- }
- if(a[i].type == 'hidden'){
- s+='<tr><td></td><td>'+inp+'</td></tr>';
- }else{
- s+='<tr na="'+a[i].name+'">';
- s+='<td align="'+can.labelAlign+'" style="padding-right:5px" width="'+can.labelWidth+'">'+bt+''+a[i].labelText+'</td>';
- s+='<td style="padding:5px" align="left">'+inp+'</td>'
- s+='</tr>';
- }
- }
- s+='</table>';
- s+='</form>';
- s+='</div>';
- s+='<div style="padding:8px 10px;background:#eeeeee;line-height:30px" align="right"><span id="msgview_'+rand+'"></span> ';
- s+=' <button type="button" class="btn btn-'+can.saveCls+'" disabled id="save_'+rand+'"><i class="icon-save"></i> '+can.saveText+'</button>';
- if(can.cancelbtn)s+=' <button type="button" class="btn btn-default" id="cancel_'+rand+'"><i class="icon-remove"></i> 取消</button>';
- s+='</div>';
- return s;
- };
- this.setVisited=function(na, bo){
- var o = obj.find("tr[na='"+na+"']");
- if(bo){o.show();}else{o.hide();}
- };
- this.isValid = function(){
- var bo= false,o;
- var a = can.items,s='';
- for(i=0; i<a.length; i++){
- if(a[i].required){
- if(isempt(this.getValue(a[i].name))){
- bo = true;
- s = a[i].tipText;
- if(!s)s=''+a[i].labelText+'不能为空';
- break;
- }
- }
- }
- if(!bo && can.requiredfields!=''){
- a = can.requiredfields.split(',');
- for(i=0; i<a.length; i++){
- if(isempt(this.getValue(a[i]))){
- bo = true;
- s = '*是必填的';
- break;
- }
- }
- }
- o = get('save_'+rand+'');
- if(o){
- o.disabled=bo;
- o.title=s;
- }
- this.isValidText = s;
- return bo;
- };
-
- this._cancel = function(o1){
- if(can.windowid!='')js.tanclose(can.windowid);
- };
- this.close = function(){
- this._cancel();
- };
- this.save = function(o1){
- this._save(o1, 1);
- };
- this.signature= function(da, url){
- var time = parseInt(js.now('time')*0.001);
- var siaa = ''+NOWURL+''+url+''+da.tablename_postabc+''+time+'_'+adminid+'';
- var sign = md5(siaa);
- da.sys_signature= sign;
- da.sys_timeature= time;
- return da;
- };
- this._save = function(o1, lx){
- if(this.isValid()){
- this.setmsg(this.isValidText);
- return;
- }
- var data = this.getValues(),ac,ebo=false,s,i;
- var fids = can.submitfields.split(',');
- for(i=0;i<fids.length;i++){
- ac = fids[i];
- if(data[ac]!=this.editdata[ac]){
- ebo = true;
- break;
- }
- }
- if(!ebo && lx == 0 && can.pdedit){
- //this.setmsg('数据没修改,不用保存','#F92FB6');
- //return;
- };
- s = can.submitcheck(data, me);
- if(typeof(s)=='string' && s){
- this.setmsg(s);
- return;
- }
- this.setmsg('处理中...','#ff6600');
- for(ac in can.params)data[ac]=can.params[ac];
- if(typeof(s)=='object'){
- for(ac in s)data[ac]=s[ac];
- }
- data.tablename_postabc = jm.encrypt(can.tablename);
- data.submitfields_postabc = jm.base64encode(can.submitfields);
- data.aftersaveaction = can.aftersaveaction;
- data.beforesaveaction = can.beforesaveaction;
- data.editrecord_postabc = can.editrecord;
- data.sysmodenumabc = can.modenum;
- o1.disabled = true;
- $.ajax({
- type:'post',
- url:can.url,
- data:this.signature(data, can.url),
- success:function(da){
- var a = js.decode(da);
- if(a.success){
- me.setmsg(a.msg, 'green');
- if(can.autoclose){
- js.msg('success', a.msg);
- me._cancel();
- }
- can.success(a, me);
- }else{
- o1.disabled = false;
- me.setmsg(a.msg);
- if(!a.msg)js.msg('msg', da);
- can.error();
- }
- },
- error:function(e){
- o1.disabled = false;
- me.setmsg('Error:'+e.responseText+'');
- can.error();
- }
- });
- };
- this.getValue = function(na){
- var o = this.form[na];
- if(!o)return '';
- return o.value;
- };
- this.setValue = function(na,val){
- var o = this.form[na];
- if(!o)return;
- o.value = val;
- };
- this.setUrl = function(url){
- can.url = url;
- };
- this.setmsg = function(txt,col){
- if(!col)col='red';
- var msgid = can.msgviewid;
- if(msgid == '')msgid='msgview_'+rand+'';
- $('#'+msgid+'').html(js.getmsg(txt,col));
- };
- this.getValues=function(){
- var da ={},i,ona='',o;
- for(i=0;i<this.form.length;i++){
- o = this.form[i];
- var type = o.type,
- val = o.value,
- na = o.name;
- if(type=='checkbox'){
- val = '0';
- if(o.checked)val='1';
- da[na] = val;
- }else if(type=='radio'){
- if(o.checked)da[na] = val;
- }else{
- da[na] = val;
- }
- if(na.indexOf('[]')>-1){
- if(ona.indexOf(na)<0)ona+=','+na+'';
- }
- }
- if(ona != ''){
- var onas = ona.split(',');
- for(i=1; i<onas.length; i++){
- da[onas[i].replace('[]','')] = js.getchecked(onas[i]);
- }
- }
- return da;
- };
- this.getType = function(na){
- var o = this.form[na];
- if(!o)return '';
- return a.type;
- };
- this.setValues=function(da, otf){
- var na,type,v,o,i,
- fis = can.submitfields.split(',');
- if(otf){
- var otfs = otf.split(',');
- for(i=0; i<otfs.length; i++)fis.push(otfs[i]);
- }
- for(i=0;i<fis.length;i++){
- na = fis[i];
- o = this.form[na];
- if(!o)continue;
- type= o.type;
- v = da[na];
- if(v==null)v='';
- da[na] = v;
- if(type == 'checkbox'){
- o.checked=(v=='1')?true:false;
- }else{
- o.value = v;
- }
- }
- this.setValue('id', da.id);
- this.editdata = da;
- this.isValid();
- };
- this.reset=function(){
- this.form.reset();
- };
- this.getField=function(na){
- return this.form[na];
- };
- this.setTitle = function(tit){
- $('#'+can.windowid+'_title').html(tit);
- };
-
- this.load = function(url){
- this.setmsg('加载中...');
- $.get(url, function(da){
- var a = js.decode(da);
- me._loadback(a);
- });
- };
-
- this._loadback = function(a){
- can.load(a, this, this.form);
- if(a.data)this.setValues(a.data);
- this.setmsg('');
- can.loadafter(a,this.form);
- };
-
- this.setReadOnly = function(na){
- if(na){
- this.getField(na).readOnly = true;
- }else{
- for(var i=0;i<this.form.length;i++){
- this.form[i].readOnly = true;
- }
- }
- };
- this.setDisabled = function(na){
- if(na){
- this.getField(na).disabled = true;
- }else{
- for(var i=0;i<this.form.length;i++){
- this.form[i].disabled = true;
- }
- }
- }
- };
-
-
- $.bootsform = function(options){
- var defaultVal = {
- items:[],labelWidth:90,width:500,height:400,
- labelAlign:'right',saveCls:'primary',
- tablename:'', //对应表名
- modenum:'', //对应模块编号
- url:js.getajaxurl('publicsave','index'),
- submitfields:'',autoclose:true,cancelbtn:true,
- params:{},bodywidth:'90%',addCls:'primary',editCls:'info',bodyheight:0,isedit:0,
- render:'',saveText:'确定',window:true,windowid:'',
- editrecord:'false', //是否保存修改记录
- defaultfields:{type:'text',blankText:'',labelText:'',required:false,readOnly:false,labelBox:'',attr:'',value:''},
- success:function(){},loadafter:function(){},
- load:function(){},
- aftersaveaction:'', //保存后处理方法
- beforesaveaction:'', //保存前处理方法
- requiredfields:'',
- error:function(){},saveid:'',msgviewid:'',rand:'',
- pdedit:true,
- submitcheck:function(){return ''}
- };
- var can = $.extend({}, defaultVal, options);
- if(can.isedit==0){
- can.saveCls = can.addCls;
- can.title = '<i class="icon-plus"></i> 新增 '+can.title+'';
- }
- if(can.isedit==1){
- can.saveCls = can.editCls;
- can.title = '<i class="icon-edit"></i> 编辑 '+can.title+'';
- }
- var clsa = new bootsform(false, can);
- clsa.init();
- return clsa;
- };
- })(jQuery);
|