zoukankan      html  css  js  c++  java
  • easyui-datagrid 主从表(一对多)表结构,明细在前端存json,一键保存至数据库

    效果图:

     这里主要说一下 明细表的 easyui-datagrid 可编辑的功能

    Html

          <input id='task_detail_list_complaint' name='task_detail_list_complaint' type="hidden"  value="" />
          <table id="grid_task_detail_complaint" style="1150px;height:230px" 
                  data-options="iconCls:'icon-edit',singleSelect:true"
                  title="投诉任务单"  rownumbers='true' ><!-- height:auto -->
               <thead>
                  <tr >
                      <th data-options="field:'task_detail_detail_name', align:'center',formatter:productFormatter,
                                       editor:{
                                           type:'combobox',
                                           options:{
                                               valueField:'productid',
                                               textField:'name',
                                               data:products,
                                               editable:false,
                                               required:true 
                                           }
                                        }"  width='150' >下发部门</th> 
                       <th data-options="field:'task_detail_detail_description' ,align:'center',editor:'textarea'  " width='950' >描述</th> 
                   </tr>
                </thead>
           </table>

    Javascript

     一、初始化及下拉菜单的赋值

    <script>
            //订单明细-----------------------------------------------------------------------------------
            var products = [
                /*
                {productid:'鲜奶',name:'鲜奶'},
                {productid:'酸奶',name:'酸奶'},
                {productid:'巴氏酸',name:'巴氏酸'} 
                */
                <{$task_belongs_unit}>
            ];
            function productFormatter(value){
                for(var i=0; i<products.length; i++){
                    if (products[i].productid == value) return products[i].name;
                }
                return value;
            }
    
            var editIndex = undefined;
            function endEditing(){
                if (editIndex == undefined){return true}
                if ($('#grid_task_detail_complaint').datagrid('validateRow', editIndex)){
                    $('#grid_task_detail_complaint').datagrid('endEdit', editIndex);
                    editIndex = undefined;
                    return true;
                } else {
                    return false;
                }
            }
            //确认
            function acceptChanges(){
                $('#grid_task_detail_complaint').datagrid('acceptChanges');
            }
    
            $(function(){
                var lastIndex;
                
                $('#grid_task_detail_complaint').datagrid({
                    toolbar:[{
                        text:'新增',
                        iconCls:'icon-add',
                        handler:function(){
                            if (endEditing()){
                                $('#grid_task_detail_complaint').datagrid('endEdit', lastIndex);
                                $('#grid_task_detail_complaint').datagrid('appendRow', {});
                                lastIndex = $('#grid_task_detail_complaint').datagrid('getRows').length-1;
                                $('#grid_task_detail_complaint').datagrid('selectRow', lastIndex);
                                $('#grid_task_detail_complaint').datagrid('beginEdit', lastIndex);
                                
                                //赋默认值
                                //$('#grid_task_detail_complaint').datagrid('appendRow',{task_detail_detail_description:'P1111111111'});
                                //$('#grid_task_detail_complaint').datagrid('appendRow',{task_detail_detail_name:'运营管理部'});
                                //新增
                                editIndex = $('#grid_task_detail_complaint').datagrid('getRows').length-1;
                                //$('#grid_task_detail_complaint').datagrid('selectRow', editIndex)
                                //        .datagrid('beginEdit', editIndex);
                            }
                        }
                    },'-',{
                        text:'删除',
                        iconCls:'icon-remove',
                        handler:function(){  
                            var row = $('#grid_task_detail_complaint').datagrid('getSelected');
                            if (row){
                                var index = $('#grid_task_detail_complaint').datagrid('getRowIndex', row);
                                $('#grid_task_detail_complaint').datagrid('deleteRow', index);
                            }
                        }
                    }],
                    onBeforeLoad:function(){
                        $(this).datagrid('rejectChanges');
                    },
                    onClickRow:function(rowIndex){
                        if (lastIndex != rowIndex){
                            $('#grid_task_detail_complaint').datagrid('endEdit', lastIndex);
                            $('#grid_task_detail_complaint').datagrid('beginEdit', rowIndex);
                        }
                        lastIndex = rowIndex;
                    }
                });
            });
    </script>
    其中  <{$task_belongs_unit}> 为后端 读数据库获取 并整理成 下面的 字符串
    {productid:'鲜奶',name:'鲜奶'},
    {productid:'酸奶',name:'酸奶'},
    {productid:'巴氏酸',name:'巴氏酸'} 

    php的写法

    $strSql="SELECT value_name FROM item_value where deleted=0 and value_name<>'' and item_name='"."投诉所属单位"."' order by orderby asc "; //order by date_entered asc
    //echo($strSql);
    $result_rows=$db->query($strSql);
    while($row=mysql_fetch_array($result_rows)){ 
        //echo($row[0]);
        $option.="{productid:'".$row[0]."',name:'".$row[0]."'},";
    }
    //echo($option);
    $option =substr($option,0,strlen($option)-1);
    //echo($option);
    $smarty->assign('task_belongs_unit', $option); 

    二、点击保存时 下拉菜单 和 文本框不能为空

            $('#grid_task_detail_complaint').datagrid('acceptChanges');//退出编辑模式
            var rows = $('#grid_task_detail_complaint').datagrid('getRows');  
            
            for ( var i = 0; i < rows.length; i++) {
                //alert(rows[i].task_detail_detail_name);
                if(rows[i].task_detail_detail_name=="" || rows[i].task_detail_detail_name==undefined){
                    $.messager.alert('消息','任务单的下发部门不能为空!','info');
                    return;
                }
                if(rows[i].task_detail_detail_description=="" || rows[i].task_detail_detail_description==undefined ){
                    $.messager.alert('消息','任务单的描述不能为空!','info');
                    return;
                }
            }

    三、保存,将datagrid中的数据库转为json存在input中 提交

            //明细----------------------------------------------------------
            //关闭编辑 状态
            var rows = $('#grid_task_detail_complaint').datagrid('getRows');  
            //alert(rows.length);
            for ( var i = 0; i < rows.length; i++) {
                $('#grid_task_detail_complaint').datagrid('endEdit', i);
            }
            
            if(rows.length>0){  //alert('4444' );
                var order_form_detail_row = $('#grid_task_detail_complaint').datagrid('getRows'); //取表格的所有数据
                 //alert('1212');
                var task_detail_list_complaint=JSON.stringify(order_form_detail_row);
                //alert(task_detail_list_complaint);
                $("#task_detail_list_complaint").val(task_detail_list_complaint);
                 //alert('33333');
            }
            //alert($("#task_detail_list_complaint").val());

    四、后端php取值

    task_detail_list_complaint 为 input标签 用于 存放 已转为json的datagrid表格中的数据
            //明细表 ----------------------------------------------------
            $task_detail_list=json_decode($_POST['task_detail_list_complaint']); 
            for( $i=0; $i<count($task_detail_list); $i++){
                $task_belongs_unit=$task_detail_list[$i]->task_detail_detail_name;//任务名称   下发部门  运营管理部
                $task_description=$task_detail_list[$i]->task_detail_detail_description;//任务描述 
             
                $task_id=CreateGUID();
                $created_by="PC";
                $task_type="";//暂时没用上
                $task_status="已下发";
                $work_order_type="投诉";
                $task_name="投诉";
    
                $send_date=$date_entered;//下发时间
    
                $sql_detail="insert into jc_task (id,date_entered,date_modified,assigned_user_id,modified_user_id,created_user_id,created_by,name,description,deleted," ;   
                $sql_detail.=" assigned_user_name,modified_user_name,created_user_name,";
                $sql_detail.=" type,status,work_order_id,work_order_type,send_date,belongs_unit ";
                $sql_detail.=" ) values( ";  
                $sql_detail.=" '{$task_id}','{$date_entered}','{$date_entered}','{$assigned_user_id}','{$assigned_user_id}','{$assigned_user_id}','{$created_by}', ";
                $sql_detail.=" '{$task_name}','{$task_description}','0', "; 
                $sql_detail.=" '{$assigned_user_name}','{$assigned_user_name}','{$assigned_user_name}', "; 
                $sql_detail.=" '{$task_type}','{$task_status}' ,'{$work_order_id}','{$work_order_type}','{$send_date}','{$task_belongs_unit}' ";
                $sql_detail.="  )";  
                $result_detail = $db->execute($sql_detail);//订单明细表order_form_detail 添加
                //WriteLog($sql_detail);
            }
            //--------------------------------------------------------------------------------------------
  • 相关阅读:
    防火墙(Iptables NAT)
    zookeeper-分布式协调技术的搭建
    Cobbler 自动安装 配置
    GPG非对称加密
    服务管理--Nginx
    NTP时间服务器
    Javascript-数据类型、类型转换
    移动端计算页面尺寸
    javascript 给关键字加链接
    JS三元运算符
  • 原文地址:https://www.cnblogs.com/hailexuexi/p/15357654.html
Copyright © 2011-2022 走看看