使用os3grid做一个基于Web和Ajax的工资表录入界面

ajax|web

1 首先对os3grid做一些小的修改:加入下面代码

function strlen(str)
{
var len;
var i;
len = 0;
for (i=0;i<str.length;i++)
{
if (str.charCodeAt(i)>255) len+=2; else len++;
}
return len;
}

然后在function grid_cell_txt_edit ( cell )里面修改以下一行,主要是应付中文

s += ' size="'+ strlen(val) + '" ';

另外,修改一些颜色

 this.cols = { "hover"  : "#d5f1ff",

2 工资表结构

考虑到每一个单位都有不同的帐套,所以按一对多建立帐套表

CREATE TABLE pq_unitgzxm (
   unit_id char(8) NOT NULL DEFAULT '',
   xmbh int NOT NULL DEFAULT 0,
   xmbm varchar(3) NOT NULL PRIMARY KEY,
   xmmc varchar(200) NOT NULL DEFAULT '',
   lx varchar(200)  NOT NULL DEFAULT '',
   jsgs varchar(200)  NOT NULL DEFAULT ''
  )
 
INSERT INTO pq_unitgzxm values ('00000001',1,'F01','员工号','系统值','');
INSERT INTO pq_unitgzxm values ('00000001',2,'F02','姓名','系统值','');
INSERT INTO pq_unitgzxm values ('00000001',3,'F03','单位','系统值','');
INSERT INTO pq_unitgzxm values ('00000001',4,'F04','基本工资','录入值','');
INSERT INTO pq_unitgzxm values ('00000001',5,'F05','奖金','录入值','');
INSERT INTO pq_unitgzxm values ('00000001',6,'F06','应发工资','计算值','');
INSERT INTO pq_unitgzxm values ('00000001',7,'F07','个人所得税','计算值','');
INSERT INTO pq_unitgzxm values ('00000001',8,'F08','应扣工资','计算值','');
INSERT INTO pq_unitgzxm values ('00000001',9,'F09','实发工资','计算值','');

实际工资录入采用空间冗余的办法

CREATE TABLE pq_gzxm (
   gzb_id char(8) NOT NULL DEFAULT '',
   employee_id char(8) NOT NULL DEFAULT '',
   xm varchar(400)  NOT NULL DEFAULT '',
   employeecontract_id char(8) NOT NULL DEFAULT '',
   gzdata1 decimal  NOT NULL DEFAULT '0',
   gzdata2 decimal  NOT NULL DEFAULT '0',
   gzdata3 decimal  NOT NULL DEFAULT '0',
   gzdata4 decimal  NOT NULL DEFAULT '0',
   gzdata5 decimal  NOT NULL DEFAULT '0',
   gzdata6 decimal  NOT NULL DEFAULT '0',
   gzdata7 decimal  NOT NULL DEFAULT '0',
   gzdata8 decimal  NOT NULL DEFAULT '0',
   gzdata9 decimal  NOT NULL DEFAULT '0',
   gzdata10 decimal  NOT NULL DEFAULT '0',
   gzdata11 decimal  NOT NULL DEFAULT '0',
   gzdata12 decimal  NOT NULL DEFAULT '0',
   gzdata13 decimal  NOT NULL DEFAULT '0',
   gzdata14 decimal  NOT NULL DEFAULT '0',
   gzdata15 decimal  NOT NULL DEFAULT '0',
   gzdata16 decimal  NOT NULL DEFAULT '0',
   gzdata17 decimal  NOT NULL DEFAULT '0',
   gzdata18 decimal  NOT NULL DEFAULT '0',
   gzdata19 decimal  NOT NULL DEFAULT '0',
   gzdata20 decimal  NOT NULL DEFAULT '0'
  )   

  
INSERT INTO pq_gzxm (gzb_id,employee_id,xm,employeecontract_id,gzdata1) values ('00000001','00000001','张三','00000001',0);   
INSERT INTO pq_gzxm (gzb_id,employee_id,xm,employeecontract_id,gzdata1) values ('00000001','00000002','李四','00000002',0);   

3  生成表单

function show_form($unit_id = '', $gzyear ='', $gzmonth='',$error = '') {
 global $db, $me, $t,$_POST;

 extract($_POST);
 if ($unit_id && !$error) {
  $rs = $db->Execute("select * from ".TBL_UNITGZXM." where unit_id = '$unit_id'");
  $items = $rs->GetArray();
  $t->assign('items', $items);
  
  //$rs = $db->Execute("select e.employee_id,e.xm,ec.dwmc from ".TBL_EMPLOYEE." e,".TBL_EMPLOYEECONTRACT." ec,".TBL_UNITCONTRACT." uc where e.employee_id=

ec.employee_id and ec.unitcontract_id = uc.unitcontract_id and uc.unit_id ='$unit_id'");
  //$t->assign('employees', $rs->GetArray());
    $gzb_id = '';
    $dwmc = '';

  $gzb = $db->GetRow("select gzb_id,dwmc from ".TBL_GZB." where unit_id = '$unit_id'

and gzyear='2006' and gzmonth='04'");
   
    $gzb_id = $gzb['gzb_id'];
    $dwmc = $gzb['dwmc'];

  $gz_array = array();
  $rs = $db->Execute("select * from ".TBL_GZXM." where gzb_id = '$gzb_id'");
  while (!$rs->EOF) {
   
      $gzdata_array = array();
     
      //gzdata1 从1开始
      for ($i = 1, $count = count($items)-3; $i <= $count; $i++) {
            array_push($gzdata_array, $rs->fields['gzdata'.$i]);
    }

      $gzline = array($rs->fields['employee_id'],$rs->fields['xm'],$dwmc,$gzdata_array);
      array_push($gz_array, $gzline);
        
     $rs->MoveNext();
    }

 } else {
  $t->assign($_POST);
 }
 
 //print_r($gz_array);
 $t->assign('error', $error);
 $t->assign('gz_array', $gz_array);
 $t->render('salary.html', PAGE_TITLE,'wrap.html',False);
}

表单模板

<script>
             var request_id = 0;
     // 这里将录入的数据生成一个xml文件,并使用ajax方法返回给服务器端。
    function get_data ( g)
    {
     var objDom = new ActiveXObject("MSXML.DOMDocument");     //define a DOM object
                    objDom.async=false;
                    var objRoot = objDom.createElement("SALARY");              //create the root
                    objDom.appendChild(objRoot);

     var l = g.length ();
     var t;
     var data, attrs;
     var s = "";
     var i, v;

     for ( t = 0; t < l; t ++ )
     {
      
      var objField = objDom.createElement("Item");
                        objDom.documentElement.appendChild(objField);
                        curnode=objDom.documentElement.lastChild;
                       
      data = g.get_row ( t );
      //alert(data[0]+data[1]+data[2]);
      //attrs = g.get_row_attrs ( t );
      for ( i = 3; i < data.length; i ++ ) {
       
       var gzdata = objDom.createElement("gzdata"+(i-2));
                            gzdata.text=data [ i ];
                            curnode.appendChild(gzdata);
        
         }

     }
     //alert(objDom.xml);
     post_data = "op=savesalary&salarydata=" + escape(objDom.xml);
                    var returnstuff = http_fetch_sync('salary.php',post_data);
                    //alert(returnstuff['responseText']);
                    if(returnstuff['responseText'].indexOf("ok")!=-1)
                    {
                      alert("保存成功!");
                    }
    }

    function row_modified ( grid, cell_pos, row_num, new_val )
    {
     var attrs = grid.get_row_attrs ( row_num );
     attrs [ 'changed' ] = 'YES';
    } 

    // Create an OS3Grid instance
    var g = new OS3Grid ();

    // Set the callback for modifications
    g.onchange = row_modified;

    g.set_size ( "100%", "250px" );
    
    // Grid Headers are the grid column names
    g.set_headers ( <?php
       for ($i = 0, $count = count($items); $i < $count; $i++) {
            echo "'".$items[$i]['xmmc']."'";
            if($i!=$count-1) echo ",";
        }
  ?> );

    // If contents is bigger than container, Grid will automatically show scrollbars
    g.set_scrollbars ( true );

    // The grid will have a solid border (these are CSS attributes)
    g.set_border ( 1, "solid", "#cccccc" );

    // Now, we add some rows
    //g.add_row ( "fsoft", "纯月", "fsoft (@) sourceforge (dot) net" );
    //g.set_row_attr ( -1, 'magic', 'magic-fsoft' );
    //g.set_row_attr ( -1, 'changed', 'NO' );

    <?php
    
     for ($i = 0, $count = count($gz_array); $i < $count; $i++) {
     $str = "";
     $str .= "g.add_row('".$gz_array[$i][0]."','".$gz_array[$i][1]."','".$gz_array[$i][2]."',";
         $gzdata_array = $gz_array[$i][3];
       for ($j = 0, $count2 = count($gzdata_array); $j < $count2; $j++) {
            $str .= "'";
            $str .= $gzdata_array[$j][0];
            $str .= "'";
            if($j!=$count2-1) $str .= ",";
        }
     $str = $str.");";
     echo $str;
   // mygrid.addRow("2","00000002,text1,text2,1,1,1,1,1,1");
              } ?>

    // Enable sortable rows
    //g.set_sortable ( true );

    // Enable highlight of rows with the mouse
    g.set_highlight ( true );

    //g.set_col_editable ( 1, "txt" );
    //g.set_col_editable ( 2, "txt" );
    <?php
       for ($i = 3, $count = count($items); $i <= $count; $i++) {
            echo "g.set_col_editable ( ".$i.", \"txt\" );";
          
        }
         ?>

    g.sort_on_edit = true;

    // Show the grid replacing the original HTML object with the "grid" ID.
    g.render ( 'grid' );

</script>

4 http_fetch_sync 函数如下

var global_xmlhttp = getXMLHTTPinstance();

function http_fetch_sync(url,post_data)
{

global_xmlhttp = getXMLHTTPinstance();

 var method = 'GET';
 if ( typeof(post_data) != 'undefined' )
 {
   method = 'POST';
 }

 try
 {
 //global_xmlhttp.open(method, url,true);
 global_xmlhttp.open(method, url,false);
 }
 catch(e)
 {
   alert('message:'+e.message+":url:"+url);
 }
 if ( method == 'POST')
 {
   global_xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
 }

 global_xmlhttp.send(post_data);
 var args = {"responseText":global_xmlhttp.responseText,"responseXML":global_xmlhttp.responseXML,

"request_id":request_id};
 return args;

}

时间: 2024-11-03 21:26:00

使用os3grid做一个基于Web和Ajax的工资表录入界面的相关文章

上位机-一个物联网方面的问题,做一个基于WiFi的楼宇能耗监测系统,软件部分怎么设计比较好,类似这个文档里的

问题描述 一个物联网方面的问题,做一个基于WiFi的楼宇能耗监测系统,软件部分怎么设计比较好,类似这个文档里的 http://www.docin.com/p-1224986285.html 之前并不知道上位机,也没学过C#.只学了一点php和J2EE.还需要做Android端,想问下各位前辈们的想法,是做成上位机吗?对WiFi那边的硬件也不是很了解, 本来是想做成网页或者客户端的,这个上位机是怎么做的? 怎么设计软件部分比较快一点... 还有APP怎么设计比较好? 解决方案 既然基于WI-FI,

各位大神我想做一个基于android的互联网统一身份认证系统

问题描述 各位大神我想做一个基于android的互联网统一身份认证系统 只要通过android验证就可以访问web服务器的网页,网页简单的就是登陆界面和登录成功失败界面,当用户吧手机号输入到web的登录框点击确定就可以发送到android手机,android端输入用户名和密码就可以完成验证,若点击准许跳转到成功界面,不准许就跳转到失败界面.求大神们帮我啊

linux-想做一个基于图像对比视频监控的监控系统应该看哪些书籍或者推荐学习什么?

问题描述 想做一个基于图像对比视频监控的监控系统应该看哪些书籍或者推荐学习什么? 基于mini2440来做的,主要是通过图像对比看当前采集到的数据和之前的有没有变化,来决定采集到的数据要不要存储.

用户登录-毕设做一个基于安卓的手机网盘,该怎么实现文件加密上传?

问题描述 毕设做一个基于安卓的手机网盘,该怎么实现文件加密上传? 总不能在服务器端随便看到上传的文件吧?还有我只做了上传下载和对服务器端文件的查询删除修改的功能,需不需要做用户登录,用户登录要用数据库做吗? 解决方案 这种数据存储做好是分段加密存储,用文件的CRC校验码做文件名,然后做个列表文件,文件中记录这个文件的一些信息,以及文件是由哪些CRC校验码的文件组成的,以后下载时根据这个文件来组合会原来的文件 这样,在服务器上不会出现很大的数据,客户端处理起来也占资源少 比如你先读取这个文件的CR

求怎样做一个基于贝叶斯的android平台垃圾短信过滤系统

问题描述 求怎样做一个基于贝叶斯的android平台垃圾短信过滤系统 大家好,我目前想做一个基于贝叶斯概率模型的android平台垃圾短信过滤系统,在网上也找了一些关于这一方面的文章和论文,但大多讲的偏理论些,在系统实现的架构和细节上讲的很少.在结构设计上遇到一些问题:1.分类器训练是放在系统软件内部好些还是在外部训练好分类器在放入软件中?2.中分分词问题,有哪些好的分词器,网上查了查开源的分词器iKanalyzer不知这个分词器在android上运行占用内存资源会不会很大? 请大家给些意见,先

分页-我想做一个基于jquery的可操作表格数据展示与处理的控件

问题描述 我想做一个基于jquery的可操作表格数据展示与处理的控件 我是新手,我想做一个基于jquery的可操作表格数据展示与数据处理控件,表格需要提供的功能是排序,搜索,设置基本的增删改,分页的功能,求具体思路.谢谢 解决方案 别求,你看看开源代码,比如jqgrid,这个是jquery的grid组件,看它的代码研究一下 解决方案二: 想做就做呗,思路看来源代码 解决方案三: 基本思路就是前台传递参数条件到后台,再返回结果到前台显示 解决方案四: 去看jquery自带的flexigrid吧,相

oracle数据库-做一个基于Oracle数据库的系统进程研究与分析的论文有以下几个问题求大神指点下感激不尽

问题描述 做一个基于Oracle数据库的系统进程研究与分析的论文有以下几个问题求大神指点下感激不尽 1.系统进程和后台进程的区别 2.系统调优和进程调优区别 3.系统进程研究分析的是什么

mfc初学者,想做一个基于对话框的类似搜索引擎的程序,有没有功能相近源代码借鉴一下

问题描述 mfc初学者,想做一个基于对话框的类似搜索引擎的程序,有没有功能相近源代码借鉴一下 关于注册时的用户名密码怎么存啊,数据库怎么用啊,搜索的文件放哪啊等等问题,不胜感激 解决方案 最简单的是嵌入一个webbrowser控件,链接到网站上. 解决方案二: 建议楼主先参考书籍去MFC 体验一下控件的使用和相关响应函数的编写吧,先动手操作再想思路 解决方案三: 先学好基础再想做实际程序,数据库怎么用这些不是一两句话能说清楚的

我想做一个基于juddiv3的uddi订阅-可总是出这个问题-求帮助-谢谢

问题描述 我想做一个基于juddiv3的uddi订阅-可总是出这个问题-求帮助-谢谢 错误代码: org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Nested exception is org.codehaus.xfire.fault.XFireFault: At least one categoryBag, find_tModel or tModelBag must be supplied org.cod