|  | @@ -3245,8 +3245,11 @@ class Database
 | 
											
												
													
														|  |          return $result;
 |  |          return $result;
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    private function update_struct($config, $col, $data, $tab = -1, $prefix = '')
 |  | 
 | 
											
												
													
														|  | 
 |  | +    public function update_struct($config, $col, $data, $tab = -1, $prefix = '', $layadmin = false)
 | 
											
												
													
														|  |      {
 |  |      {
 | 
											
												
													
														|  | 
 |  | +        if (!$layadmin) {
 | 
											
												
													
														|  | 
 |  | +            $layadmin = layadmin();
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  |          $result = array();
 |  |          $result = array();
 | 
											
												
													
														|  |          $upload_call = '';
 |  |          $upload_call = '';
 | 
											
												
													
														|  |          if (isset($config['manage']['upload'])) {
 |  |          if (isset($config['manage']['upload'])) {
 | 
											
										
											
												
													
														|  | @@ -3292,7 +3295,7 @@ class Database
 | 
											
												
													
														|  |                  if ($v['update'] == 'hidden') {
 |  |                  if ($v['update'] == 'hidden') {
 | 
											
												
													
														|  |                      $style = 'style="display:none"';
 |  |                      $style = 'style="display:none"';
 | 
											
												
													
														|  |                  }
 |  |                  }
 | 
											
												
													
														|  | -                if (layadmin()) {
 |  | 
 | 
											
												
													
														|  | 
 |  | +                if ($layadmin) {
 | 
											
												
													
														|  |                      $result[$k] = '<div class="layui-form-item ' . $class . '" '.$style.'><div classs="layui-col-lg6">';
 |  |                      $result[$k] = '<div class="layui-form-item ' . $class . '" '.$style.'><div classs="layui-col-lg6">';
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |                      if (is_array($v['update'])) {
 |  |                      if (is_array($v['update'])) {
 | 
											
										
											
												
													
														|  | @@ -3449,7 +3452,7 @@ class Database
 | 
											
												
													
														|  |       */
 |  |       */
 | 
											
												
													
														|  |      public function update_html($param, $key, $index, $data, &$result, $prefix = '')
 |  |      public function update_html($param, $key, $index, $data, &$result, $prefix = '')
 | 
											
												
													
														|  |      {
 |  |      {
 | 
											
												
													
														|  | -        if (isset($param['name']) && $param['update'] != 'hidden' && isset($param['update'])) {
 |  | 
 | 
											
												
													
														|  | 
 |  | +        if (isset($param['name']) && isset($param['update']) && $param['update'] != 'hidden' && $param['update'] != 'load') {
 | 
											
												
													
														|  |              $result .= Html::pageLeft($param);
 |  |              $result .= Html::pageLeft($param);
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -3495,7 +3498,7 @@ class Database
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |              # 处理同步
 |  |              # 处理同步
 | 
											
												
													
														|  | -            if (isset($param['sync']) && strpos($key, '-')) {
 |  | 
 | 
											
												
													
														|  | 
 |  | +            if (isset($param['sync']) && strpos($key, '-') && $param['update'] != 'load') {
 | 
											
												
													
														|  |                  $temp = explode('-', $key);
 |  |                  $temp = explode('-', $key);
 | 
											
												
													
														|  |                  if (isset($data[$param['sync'][0]])) {
 |  |                  if (isset($data[$param['sync'][0]])) {
 | 
											
												
													
														|  |                      if (isset($temp[2])) {
 |  |                      if (isset($temp[2])) {
 | 
											
										
											
												
													
														|  | @@ -3514,10 +3517,20 @@ class Database
 | 
											
												
													
														|  |                          $param['value'] = $load;
 |  |                          $param['value'] = $load;
 | 
											
												
													
														|  |                      }
 |  |                      }
 | 
											
												
													
														|  |                  }
 |  |                  }
 | 
											
												
													
														|  | -                if (!isset($temp[2])) {
 |  | 
 | 
											
												
													
														|  | 
 |  | +                if (!isset($temp[2]) && is_array($param['update'])) {
 | 
											
												
													
														|  |                      $order = false;
 |  |                      $order = false;
 | 
											
												
													
														|  | -                    $config = Dever::db($temp[0] . '/' . $temp[1])->config;
 |  | 
 | 
											
												
													
														|  | -                    $param['update'] = $config['struct'];
 |  | 
 | 
											
												
													
														|  | 
 |  | +                    if (isset($param['update'][0]) && is_string($param['update'][0]) && strstr($param['update'][0], '.')) {
 | 
											
												
													
														|  | 
 |  | +                        if (isset($param['update'][1]) && $param['update'][1]) {
 | 
											
												
													
														|  | 
 |  | +                            $param['update_load'] = $param['update'][0];
 | 
											
												
													
														|  | 
 |  | +                            $param['update'] = 'load';
 | 
											
												
													
														|  | 
 |  | +                        } else {
 | 
											
												
													
														|  | 
 |  | +                            $param['update'] = Dever::load($param['update'][0]);
 | 
											
												
													
														|  | 
 |  | +                        }
 | 
											
												
													
														|  | 
 |  | +                    } else {
 | 
											
												
													
														|  | 
 |  | +                        $config = Dever::db($temp[0] . '/' . $temp[1])->config;
 | 
											
												
													
														|  | 
 |  | +                        $param['update'] = $config['struct']; 
 | 
											
												
													
														|  | 
 |  | +                    }
 | 
											
												
													
														|  | 
 |  | +                    
 | 
											
												
													
														|  |                      if (isset($config['manage']['tab'])) {
 |  |                      if (isset($config['manage']['tab'])) {
 | 
											
												
													
														|  |                          $param['prefix'] = $prefix;
 |  |                          $param['prefix'] = $prefix;
 | 
											
												
													
														|  |                          $param['tab'] = $config['manage']['tab'];
 |  |                          $param['tab'] = $config['manage']['tab'];
 | 
											
										
											
												
													
														|  | @@ -3641,6 +3654,10 @@ class Database
 | 
											
												
													
														|  |                      $param['upload_search_value'] = $this->value($param['upload_search_value'], $data + $param);
 |  |                      $param['upload_search_value'] = $this->value($param['upload_search_value'], $data + $param);
 | 
											
												
													
														|  |                  }
 |  |                  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +                if ($param['update'] == 'load') {
 | 
											
												
													
														|  | 
 |  | +                    $param['where_id'] = $this->id;
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |                  $result .= Html::$method($param);
 |  |                  $result .= Html::$method($param);
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -3883,9 +3900,9 @@ class Database
 | 
											
												
													
														|  |                                  $index = $t[0] . '/' . $t[1];
 |  |                                  $index = $t[0] . '/' . $t[1];
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |                                  $update_col[$i][$index] = $m_col;
 |  |                                  $update_col[$i][$index] = $m_col;
 | 
											
												
													
														|  | -                                $update_set[$i][$index][$num][$temp[1]] = $v;
 |  | 
 | 
											
												
													
														|  | -                                $update_add[$i][$index][$num][$temp[1]] = $v;
 |  | 
 | 
											
												
													
														|  | -                                $update_add[$i][$index][$num][$m_col] = $s_value;
 |  | 
 | 
											
												
													
														|  | 
 |  | +                                $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_id[$i][$index][$num][$m_col] = $s_value;
 |  |                                  $update_id[$i][$index][$num][$m_col] = $s_value;
 | 
											
												
													
														|  |                                  if ($this->id && $temp[1] == 'id') {
 |  |                                  if ($this->id && $temp[1] == 'id') {
 | 
											
												
													
														|  |                                      $update_id[$i][$index][$num]['id'] = $v;
 |  |                                      $update_id[$i][$index][$num]['id'] = $v;
 | 
											
										
											
												
													
														|  | @@ -3938,14 +3955,40 @@ class Database
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |                                  if (isset($temp[2])) {
 |  |                                  if (isset($temp[2])) {
 | 
											
												
													
														|  |                                      $update_col[$i][$index] = $m_col;
 |  |                                      $update_col[$i][$index] = $m_col;
 | 
											
												
													
														|  | -                                    $update_set[$i][$index][0][$temp[2]] = $v;
 |  | 
 | 
											
												
													
														|  | -                                    //$update_set[$i][$index][0][$m_col] = $s_value;
 |  | 
 | 
											
												
													
														|  | 
 |  | +                                    $update_set[$i][$index][0]['set_' . $temp[2]] = $v;
 | 
											
												
													
														|  | 
 |  | +                                    //$update_set[$i][$index][0]['set_' . $m_col] = $s_value;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -                                    $update_add[$i][$index][0][$temp[2]] = $v;
 |  | 
 | 
											
												
													
														|  | -                                    $update_add[$i][$index][0][$m_col] = $s_value;
 |  | 
 | 
											
												
													
														|  | 
 |  | +                                    $update_add[$i][$index][0]['add_' . $temp[2]] = $v;
 | 
											
												
													
														|  | 
 |  | +                                    $update_add[$i][$index][0]['add_' . $m_col] = $s_value;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |                                      $update_id[$i][$index][0][$m_col] = $s_value;
 |  |                                      $update_id[$i][$index][0][$m_col] = $s_value;
 | 
											
												
													
														|  |                                  }
 |  |                                  }
 | 
											
												
													
														|  | 
 |  | +                            } else {
 | 
											
												
													
														|  | 
 |  | +                                $temp = explode('-', $k);
 | 
											
												
													
														|  | 
 |  | +                                if (isset($temp[2])) {
 | 
											
												
													
														|  | 
 |  | +                                    $k = $temp[0] . '-' . $temp[1];
 | 
											
												
													
														|  | 
 |  | +                                    if (isset($config['struct'][$k]) && isset($config['struct'][$k]['sync'])) {
 | 
											
												
													
														|  | 
 |  | +                                        $s_col = $config['struct'][$k]['sync'][0];
 | 
											
												
													
														|  | 
 |  | +                                        $m_col = $config['struct'][$k]['sync'][1];
 | 
											
												
													
														|  | 
 |  | +                                        if ($s_col == 'id') {
 | 
											
												
													
														|  | 
 |  | +                                            $s_value = $this->id;
 | 
											
												
													
														|  | 
 |  | +                                        } else {
 | 
											
												
													
														|  | 
 |  | +                                            $s_one = $this->load('one', $this->id);
 | 
											
												
													
														|  | 
 |  | +                                            $s_value = $s_one[$s_col];
 | 
											
												
													
														|  | 
 |  | +                                        }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +                                        $index = $temp[0] . '/' . $temp[1];
 | 
											
												
													
														|  | 
 |  | +                                        $temp[2] = ltrim($temp[2], '_');
 | 
											
												
													
														|  | 
 |  | +                                        $temp = explode('_', $temp[2]);
 | 
											
												
													
														|  | 
 |  | +                                        $update_col[$i][$index] = $m_col;
 | 
											
												
													
														|  | 
 |  | +                                        $up = array();
 | 
											
												
													
														|  | 
 |  | +                                        $up['add_' . $temp[0] . '_id'] = $temp[1];
 | 
											
												
													
														|  | 
 |  | +                                        $up['add_' . $temp[0] . '_value'] = $v;
 | 
											
												
													
														|  | 
 |  | +                                        $up['add_' . $m_col] = $s_value;
 | 
											
												
													
														|  | 
 |  | +                                        $update_add[$i][$index][] = $up;
 | 
											
												
													
														|  | 
 |  | +                                        $update_delete[$i][$index][][$m_col] = $s_value;
 | 
											
												
													
														|  | 
 |  | +                                    }
 | 
											
												
													
														|  | 
 |  | +                                }
 | 
											
												
													
														|  |                              }
 |  |                              }
 | 
											
												
													
														|  |                          } else {
 |  |                          } else {
 | 
											
												
													
														|  |                              if (is_array($v)) {
 |  |                              if (is_array($v)) {
 | 
											
										
											
												
													
														|  | @@ -3976,8 +4019,7 @@ class Database
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |              //print_r($update_set);
 |  |              //print_r($update_set);
 | 
											
												
													
														|  |              //print_r($update_id);
 |  |              //print_r($update_id);
 | 
											
												
													
														|  | -            //print_r($update_add);
 |  | 
 | 
											
												
													
														|  | -            //print_r($update_set);die;
 |  | 
 | 
											
												
													
														|  | 
 |  | +            //print_r($update_add);die;
 | 
											
												
													
														|  |              //print_r($input);
 |  |              //print_r($input);
 | 
											
												
													
														|  |              //print_r($update_other);
 |  |              //print_r($update_other);
 | 
											
												
													
														|  |              //print_r($config['struct']);die;
 |  |              //print_r($config['struct']);die;
 | 
											
										
											
												
													
														|  | @@ -4024,26 +4066,34 @@ class Database
 | 
											
												
													
														|  |                          }
 |  |                          }
 | 
											
												
													
														|  |                      }
 |  |                      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -                    if (isset($update_id[$k]) && $update_id[$k]) {
 |  | 
 | 
											
												
													
														|  | -                        foreach ($update_set[$k] as $k1 => $v1) {
 |  | 
 | 
											
												
													
														|  | 
 |  | +                    if (isset($update_add[$k]) && $update_add[$k]) {
 | 
											
												
													
														|  | 
 |  | +                        foreach ($update_add[$k] as $k1 => $v1) {
 | 
											
												
													
														|  |                              $col = $update_col[$k][$k1];
 |  |                              $col = $update_col[$k][$k1];
 | 
											
												
													
														|  |                              foreach ($v1 as $k2 => $v2) {
 |  |                              foreach ($v1 as $k2 => $v2) {
 | 
											
												
													
														|  | -                                if (isset($update_id[$k][$k1][$k2][$col])) {
 |  | 
 | 
											
												
													
														|  | -                                    $update_id[$k][$k1][$k2][$col] = $id;
 |  | 
 | 
											
												
													
														|  | -                                }
 |  | 
 | 
											
												
													
														|  | -                                if (isset($update_add[$k][$k1][$k2][$col])) {
 |  | 
 | 
											
												
													
														|  | -                                    $update_add[$k][$k1][$k2][$col] = $id;
 |  | 
 | 
											
												
													
														|  | 
 |  | +                                if (isset($update_set[$k][$k1][$k2][$col])) {
 | 
											
												
													
														|  | 
 |  | +                                    $update_set[$k][$k1][$k2][$col] = $id;
 | 
											
												
													
														|  |                                  }
 |  |                                  }
 | 
											
												
													
														|  |                                  if (isset($v2[$col])) {
 |  |                                  if (isset($v2[$col])) {
 | 
											
												
													
														|  |                                      $v2[$col] = $id;
 |  |                                      $v2[$col] = $id;
 | 
											
												
													
														|  |                                  }
 |  |                                  }
 | 
											
												
													
														|  | -                                $check = Dever::load($k1 . '-one', $update_id[$k][$k1][$k2]);
 |  | 
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +                                $check = false;
 | 
											
												
													
														|  | 
 |  | +                                if (isset($update_id[$k][$k1][$k2])) {
 | 
											
												
													
														|  | 
 |  | +                                    if (isset($update_id[$k][$k1][$k2][$col])) {
 | 
											
												
													
														|  | 
 |  | +                                        $update_id[$k][$k1][$k2][$col] = $id;
 | 
											
												
													
														|  | 
 |  | +                                    }
 | 
											
												
													
														|  | 
 |  | +                                    $check = Dever::load($k1 . '-one', $update_id[$k][$k1][$k2]);
 | 
											
												
													
														|  | 
 |  | +                                } elseif (isset($update_delete[$k][$k1][$k2])) {
 | 
											
												
													
														|  | 
 |  | +                                    # 清理
 | 
											
												
													
														|  | 
 |  | +                                    Dever::load($k1 . '-delete', $update_delete[$k][$k1][$k2]);
 | 
											
												
													
														|  | 
 |  | +                                }
 | 
											
												
													
														|  | 
 |  | +                                
 | 
											
												
													
														|  |                                  if ($check) {
 |  |                                  if ($check) {
 | 
											
												
													
														|  | -                                    unset($v2['id']);
 |  | 
 | 
											
												
													
														|  | -                                    $v2['where_id'] = $check['id'];
 |  | 
 | 
											
												
													
														|  | -                                    Dever::load($k1 . '-update', $v2);
 |  | 
 | 
											
												
													
														|  | 
 |  | +                                    unset($update_set[$k][$k1][$k2]['set_id']);
 | 
											
												
													
														|  | 
 |  | +                                    $update_set[$k][$k1][$k2]['where_id'] = $check['id'];
 | 
											
												
													
														|  | 
 |  | +                                    Dever::load($k1 . '-update', $update_set[$k][$k1][$k2]);
 | 
											
												
													
														|  |                                  } else {
 |  |                                  } else {
 | 
											
												
													
														|  | -                                    Dever::load($k1 . '-insert', $update_add[$k][$k1][$k2]);
 |  | 
 | 
											
												
													
														|  | 
 |  | +                                    Dever::load($k1 . '-insert', $v2);
 | 
											
												
													
														|  |                                  }
 |  |                                  }
 | 
											
												
													
														|  |                              }
 |  |                              }
 | 
											
												
													
														|  |                          }
 |  |                          }
 |