rabin 2 년 전
부모
커밋
6f31a3badf
2개의 변경된 파일165개의 추가작업 그리고 93개의 파일을 삭제
  1. 159 92
      src/Database.php
  2. 6 1
      src/Lib/Input.php

+ 159 - 92
src/Database.php

@@ -3535,7 +3535,7 @@ class Database
      *
      * @return string
      */
-    public function update_html($param, $key, $index, $data, &$result, $prefix = '')
+    public function update_html($param, $key, $index, $data, &$result, $prefix = '', $ext = 'update')
     {
         if (isset($param['name']) && isset($param['update']) && $param['update'] != 'hidden' && $param['update'] != 'load') {
             $result .= Html::pageLeft($param);
@@ -3544,7 +3544,7 @@ class Database
         if ($param['update']) {
             $order = true;
             # 名称带前缀
-            $param['name'] = 'update_' . $param['ext'];
+            $param['name'] = $ext . '_' . $param['ext'];
             $param['index'] = $index;
 
             //$param['value'] = '';
@@ -3592,9 +3592,9 @@ class Database
                         $m = 'select';
                     }
                     if ($data[$param['sync'][0]] > 0) {
-                        $load = Dever::load($temp[0] . '/' . $temp[1] . '-' . $m, array('option_' . $param['sync'][1] => $data[$param['sync'][0]], 'order' => array('id' => 'asc')));
+                        $load = Dever::load($temp[0] . '/' . $temp[1] . '-' . $m, array('option_' . $param['sync'][1] => $data[$param['sync'][0]], 'orders' => array('id' => 'asc')));
                     } else {
-                        $load = Dever::load($temp[0] . '/' . $temp[1] . '-' . $m, array('option_' . $param['sync'][3] => $data[$param['sync'][2]], 'option_' . $param['sync'][4] => $data[$param['sync'][0]], 'order' => array('id' => 'asc')));
+                        $load = Dever::load($temp[0] . '/' . $temp[1] . '-' . $m, array('option_' . $param['sync'][3] => $data[$param['sync'][2]], 'option_' . $param['sync'][4] => $data[$param['sync'][0]], 'orders' => array('id' => 'asc')));
                     }
                     if ($m == 'one') {
                         $param['value'] = isset($load[$temp[2]]) ? $load[$temp[2]] : $param['default'];
@@ -3636,121 +3636,180 @@ class Database
                 }
 
                 $delete = true;
-                if (isset($param['option'])) {
-                    $delete = false;
-                    $result .= '<ul class="nav nav-tabs '.$c.'" style="height:100%;">{tab}</ul>';
-
-                    $order = array
-                    (
-                        'col'       => $key,
-                        'name'      => $param['desc'],
-                        'default'   => '1',
-                        'desc'      => $param['desc'],
-                        'match'     => 'is_string',
-                        'update'    => 'hidden',
-                        'option'    => $param['option']
-                    );
-                    array_unshift($method, $order);
+                if (isset($param['update_type']) && $param['update_type'] == 2) {
+                    $table = '';
+                    $table .= '<table class="layui-table">';
+                    $table_header = '<thead><tr>';
+                    $table_body = '<tbody>';
+                    $table_body .= '<tr class="table_copy" style="display:none;">';
+                    foreach ($param['update'] as $hk => $hv) {
+                        if ($this->id && $hk == 'id') {
+                            $hv['update'] = 'hidden';
+                        }
+                        if (isset($hv['update']) && $hv['update']) {
+                            $n = $hv['name'];
+                            unset($hv['name']);
+                            $s = '';
+                            $hv['ext'] = $param['name'] . '_c_-1_i_' . $hk;
+                            $this->update_html($hv, $hk, $hk, array(), $s, '', 'up');
+                            if ($hv['update'] == 'hidden') {
+                                $table_header .= '<td style="display:none;">'.$n.'</td>';
+                                $table_body .= '<td style="display:none;">'.$s.'</td>';
+                            } else {
+                                $table_header .= '<td>'.$n.'</td>';
+                                $table_body .= '<td>'.$s.'</td>';
+                            }
+                        }
+                    }
+                    $table_header .= '<td>操作</td>';
+                    $table_body .= '<td><a href="javascript:;" onclick="var self = $(this);var index = layer.confirm(\'确定进行此项操作吗?\', function(i, l){self.parent().parent().remove();layer.close(index);});" class="layui-btn layui-btn-xs">删除</a></td>';
+                    $table_body .= '</tr>';
 
                     if (isset($param['value']) && $param['value']) {
-                        $value = Dever::array_decode($param['value']);
-                        $param['value'] = array();
-                        if (!$value) {
-                            foreach ($param['option'] as $k => $v) {
-                                if (isset($v['name'])) {
-                                    $v = $v['name'];
+                        foreach ($param['value'] as $bk => $bv) {
+                            $table_body .= '<tr>';
+                            foreach ($param['update'] as $hk => $hv) {
+                                if ($this->id && $hk == 'id') {
+                                    $hv['update'] = 'hidden';
                                 }
-                                $param['value'][$v][$key] = $k;
-                            }
-                        } else {
-                            foreach ($param['option'] as $k => $v) {
-                                if (isset($v['name'])) {
-                                    $v = $v['name'];
-                                }
-                                foreach ($value[$k-1] as $k1 => $v1) {
-                                    $param['value'][$v][$k1] = $v1;
+                                if (isset($hv['update']) && $hv['update']) {
+                                    unset($hv['name']);
+                                    $s = '';
+                                    $hv['ext'] = $param['name'] . '_c_' . $bk . '_i_' . $hk;
+                                    $this->update_html($hv, $hk, $hk, $bv, $s);
+                                    if ($hv['update'] == 'hidden') {
+                                        $table_body .= '<td style="display:none;">'.$s.'</td>';
+                                    } else {
+                                        $table_body .= '<td>'.$s.'</td>';
+                                    }
                                 }
                             }
-                        }
-                        
-                        
-                    } else {
-                        $param['value'] = array();
-                        foreach ($param['option'] as $k => $v) {
-                            if (isset($v['name'])) {
-                                $v = $v['name'];
-                            }
-                            $param['value'][$v][$key] = $k;
+                            $table_body .= '<td><a href="javascript:;" onclick="var self = $(this);var index = layer.confirm(\'确定进行此项操作吗?\', function(i, l){self.parent().parent().remove();layer.close(index);});" class="layui-btn layui-btn-xs">删除</a></td>';
+                            $table_body .= '</tr>';
                         }
                     }
-
+                    $table_body .= '</tbody>';
+                    $table_header .= '</tr></thead>';
+                    $table .= $table_body . $table_header;
+                    $table .= '</table>';
+                    $result .= $table;
                 } else {
-                    $result .= '<ul class="nav nav-tabs '.$c.'" style="height:100%;">{tab}<li style="margin:0px;padding:0 15px;"><a href="javascript:;" class="dever_form_add" toggle_key="' . $key . '">增加一条</a></li></ul>';
+                    if (isset($param['option'])) {
+                        $delete = false;
+                        $result .= '<ul class="nav nav-tabs '.$c.'" style="height:100%;">{tab}</ul>';
 
-                    if ($order) {
                         $order = array
                         (
-                            'col'       => 'order',
-                            'name'      => '排序-按照数字正序排列',
+                            'col'       => $key,
+                            'name'      => $param['desc'],
                             'default'   => '1',
-                            'desc'      => '排序',
+                            'desc'      => $param['desc'],
                             'match'     => 'is_string',
-                            'update'    => 'text',
+                            'update'    => 'hidden',
+                            'option'    => $param['option']
                         );
                         array_unshift($method, $order);
+
+                        if (isset($param['value']) && $param['value']) {
+                            $value = Dever::array_decode($param['value']);
+                            $param['value'] = array();
+                            if (!$value) {
+                                foreach ($param['option'] as $k => $v) {
+                                    if (isset($v['name'])) {
+                                        $v = $v['name'];
+                                    }
+                                    $param['value'][$v][$key] = $k;
+                                }
+                            } else {
+                                foreach ($param['option'] as $k => $v) {
+                                    if (isset($v['name'])) {
+                                        $v = $v['name'];
+                                    }
+                                    foreach ($value[$k-1] as $k1 => $v1) {
+                                        $param['value'][$v][$k1] = $v1;
+                                    }
+                                }
+                            }
+                            
+                            
+                        } else {
+                            $param['value'] = array();
+                            foreach ($param['option'] as $k => $v) {
+                                if (isset($v['name'])) {
+                                    $v = $v['name'];
+                                }
+                                $param['value'][$v][$key] = $k;
+                            }
+                        }
+
+                    } else {
+                        $result .= '<ul class="nav nav-tabs '.$c.'" style="height:100%;">{tab}<li style="margin:0px;padding:0 15px;"><a href="javascript:;" class="dever_form_add" toggle_key="' . $key . '">增加一条</a></li></ul>';
+
+                        if ($order) {
+                            $order = array
+                            (
+                                'col'       => 'order',
+                                'name'      => '排序-按照数字正序排列',
+                                'default'   => '1',
+                                'desc'      => '排序',
+                                'match'     => 'is_string',
+                                'update'    => 'text',
+                            );
+                            array_unshift($method, $order);
+                        }
                     }
-                }
 
-                $tab = '';
+                    $tab = '';
 
-                $this->update_child(array(), $method, $key, $result, -1, $param, $delete);
+                    $this->update_child(array(), $method, $key, $result, -1, $param, $delete);
 
-                if (isset($param['value']) && $param['value']) {
+                    if (isset($param['value']) && $param['value']) {
 
-                    if (!is_array($param['value'])) {
-                        $param['value'] = Dever::array_decode($param['value']);
-                    }
+                        if (!is_array($param['value'])) {
+                            $param['value'] = Dever::array_decode($param['value']);
+                        }
 
-                    if (is_array($param['value'])) {
-                        $i = 0;
-                        foreach ($param['value'] as $k => $v) {
-                            $n = $k;
-                            if (is_string($k)) {
-                                $k = $i;
-                            }
-                            $this->update_child($v, $method, $key, $result, $k, $param, $delete);
+                        if (is_array($param['value'])) {
+                            $i = 0;
+                            foreach ($param['value'] as $k => $v) {
+                                $n = $k;
+                                if (is_string($k)) {
+                                    $k = $i;
+                                }
+                                $this->update_child($v, $method, $key, $result, $k, $param, $delete);
 
-                            $active = '';
-                            if ($k == 0) {
-                                $active = 'active';
-                            }
-                            if (layadmin() && $active) {
-                                $active .= ' layui-this';
-                            }
-                            $k = $k + 1;
-                            if (!is_string($n)) {
-                                $n = '第' . $k . '条';
-                            }
-                            if (isset($param['option']) && count($param['option']) <= 1) {
+                                $active = '';
+                                if ($k == 0) {
+                                    $active = 'active';
+                                }
+                                if (layadmin() && $active) {
+                                    $active .= ' layui-this';
+                                }
+                                $k = $k + 1;
+                                if (!is_string($n)) {
+                                    $n = '第' . $k . '条';
+                                }
+                                if (isset($param['option']) && count($param['option']) <= 1) {
 
-                            } else {
-                                $tab .= '<li class="' . $active . '" style="margin:0px;padding:0 15px;"><a href="javascript:;" id="tab-' . $key . '-child-' . $k . '" toggle_key="' . $key . '" toggle_id="' . $k . '" toggle_child=".dever_' . $key . '_child" toggle="#' . $key . '-child-' . $k . '" onclick="showToggle($(this))">'.$n.'</a></li>';
-                                $i++;
+                                } else {
+                                    $tab .= '<li class="' . $active . '" style="margin:0px;padding:0 15px;"><a href="javascript:;" id="tab-' . $key . '-child-' . $k . '" toggle_key="' . $key . '" toggle_id="' . $k . '" toggle_child=".dever_' . $key . '_child" toggle="#' . $key . '-child-' . $k . '" onclick="showToggle($(this))">'.$n.'</a></li>';
+                                    $i++;
+                                }
+                                
                             }
-                            
                         }
-                    }
-                    
-                } else {
-                    $this->update_child(array(), $method, $key, $result, 0, $param, $delete);
+                        
+                    } else {
+                        $this->update_child(array(), $method, $key, $result, 0, $param, $delete);
 
-                    $tab = '<li class="active layui-this" style="margin:0px;padding:0 15px;"><a href="javascript:;" id="tab-' . $key . '-child-1" toggle_key="' . $key . '" toggle_id="1" toggle_child=".dever_' . $param['col'] . '_child" toggle="#' . $key . '-child-1" onclick="showToggle($(this))">第1条</a></li>';
-                }
+                        $tab = '<li class="active layui-this" style="margin:0px;padding:0 15px;"><a href="javascript:;" id="tab-' . $key . '-child-1" toggle_key="' . $key . '" toggle_id="1" toggle_child=".dever_' . $param['col'] . '_child" toggle="#' . $key . '-child-1" onclick="showToggle($(this))">第1条</a></li>';
+                    }
 
-                if ($tab) {
-                    $result = str_replace('{tab}', $tab, $result);
-                } else {
-                    $result = str_replace('<ul class="nav nav-tabs layui-tab-title" style="height:100%;">{tab}</ul>', '', $result);
+                    if ($tab) {
+                        $result = str_replace('{tab}', $tab, $result);
+                    } else {
+                        $result = str_replace('<ul class="nav nav-tabs layui-tab-title" style="height:100%;">{tab}</ul>', '', $result);
+                    }
                 }
                 
             } else {
@@ -4019,6 +4078,7 @@ class Database
                                 $update_set[$i][$index][$num]['set_' . $temp[1]] = $v;
                                 $update_add[$i][$index][$num]['add_' . $temp[1]] = $v;
                                 $update_add[$i][$index][$num]['add_' . $m_col] = $s_value;
+                                $update_deletes[$i][$index][$m_col] = $s_value;
                                 $update_id[$i][$index][$num][$m_col] = $s_value;
                                 if ($this->id && $temp[1] == 'id') {
                                     $update_id[$i][$index][$num]['id'] = $v;
@@ -4183,6 +4243,12 @@ class Database
                     }
 
                     if (isset($update_add[$k]) && $update_add[$k]) {
+                        if (isset($update_deletes[$k]) && $update_deletes[$k]) {
+                            foreach ($update_deletes[$k] as $k1 => $v1) {
+                                $v1['set_state'] = 2;
+                                Dever::load($k1 . '-updates', $v1);
+                            }
+                        }
                         foreach ($update_add[$k] as $k1 => $v1) {
                             $col = $update_col[$k][$k1];
                             foreach ($v1 as $k2 => $v2) {
@@ -4207,6 +4273,7 @@ class Database
                                 if ($check) {
                                     unset($update_set[$k][$k1][$k2]['set_id']);
                                     $update_set[$k][$k1][$k2]['where_id'] = $check['id'];
+                                    $update_set[$k][$k1][$k2]['set_state'] = 1;
                                     Dever::load($k1 . '-update', $update_set[$k][$k1][$k2]);
                                 } else {
                                     Dever::load($k1 . '-insert', $v2);

+ 6 - 1
src/Lib/Input.php

@@ -166,6 +166,11 @@ class Input
             $param['cue'] = '<span style="font-size:12px;font-weight:normal;font-color:#bababa;margin-left:5px;">[' . $param['cue'] . ']</span>';
         }
 
+        $param['button'] = '';
+        if (isset($param['update_type']) && $param['update_type'] == 2) {
+            $param['button'] = '<a href="javascript:;" onclick="var e = $(this).parent().parent().parent().find(\'.table_copy\');var html = e.html();var parent = e.parent();var total = parent.find(\'tr\').length-1;html = html.replaceAll(\'_-1_\', \'_\' + total + \'_\');html = html.replaceAll(\'up_\', \'update_\');parent.append(\'<tr>\' + html + \'</tr>\');form.render();" style="margin-left:5px;" class="layui-btn layui-btn-xs layui-btn-normal">新增</a>';
+        }
+
         $class = '';
         $style = '';
         if (layadmin()) {
@@ -175,7 +180,7 @@ class Input
             }
         }
         
-        $html = '<div '.$style.'><label style="font-size:14px;font-weight:bold;" class="'.$class.'">' . $param['name'] . $param['cue'] . '</label></div>';
+        $html = '<div '.$style.'><label style="font-size:14px;font-weight:bold;" class="'.$class.'">' . $param['name'] . $param['cue'] . $param['button'] . '</label></div>';
 
         return $html;
     }