setting(); $this->top = Dever::input('top'); if ($this->top) { Dever::load('manage/top.update_action', $this->top); } $this->lang_set = Dever::config('base')->lang_set && count(Dever::config('base')->lang_set) > 1; } public function setting() { $this->project = Dever::input('project'); $this->table = Dever::input('table'); $this->menu = Dever::input('menu'); $this->menu_id = Dever::input('menu_id'); $this->id = Dever::input('update_where_id', Dever::input('where_id')); $this->name = $this->project . '/' . $this->table; #alias=goods_marea $alias = Dever::input('alias'); if ($alias) { $temp = explode('_', $alias); $alias = Dever::config('base', $temp[0])->alias; if ($alias && isset($alias[$this->project])) { Dever::setAlias($this->project, $temp[1]); } } else { $alias = Dever::config('base', $this->project)->alias; if ($alias) { Dever::config('base')->alias = $alias; } } return $this; } /** * 提供给异步获取数据的接口 * * @return array */ public function getAjax($data) { $key = Dever::input('key'); $value = Dever::input('value'); $source = Dever::input('source'); $config = Dever::db($source)->config['struct'][$key]; $config['value'] = $value; $config['option'] = $data; return $this->create_update_html($key, $config); } /** * url * * @return array */ public function url($key = false, $id = 0, $table = false, $suffix = '', $project = '', $param = array()) { $table = $table ? $table : $this->table; $project = $project ? $project : $this->project; if (strpos($table, 'http://') !== false || strpos($table, 'javascript') !== false) { return $table; } if ($id) { $id = '&where_id=' . $id; } $config = array ( 'project' => 'project/database?project=' . $project, 'list' => 'project/database/list?{param}', 'search' => 'project/database/list?{param}', 'add' => 'project/database/update?{param}', 'update' => 'project/database/update?{param}' . $id, # 增加快捷更新 'edit' => 'project/database/update?{param}' . $id, 'updateAction' => 'database.update_action_commit', 'url' => '', 'delete' => 'database.delete_action?{param}' . $id, 'recovery' => 'database.recovery_action?{param}' . $id, 'stat' => 'project/database/stat?{param}', 'excel' => 'database.list_excel?{param}', 'stat_excel' => 'database.stat_excel?{param}', 'reset' => 'project/database/list?project=' . $project . '&table=' . $table . '&menu=' . $this->menu . '&menu_id=' . $this->menu_id, 'diy' => 'list?{param}', ); $state = $this->getState(); if ($key == 'delete' && $state == 2) { $key = 'recovery'; } if (strpos($key, 'list') !== false) { $config[$key] = $config['list']; } elseif (strpos($key, 'add') !== false) { $config[$key] = $config['add']; } elseif (strpos($key, 'edit') !== false) { $config[$key] = $config['edit']; } if (isset($config[$key])) { if (strpos($config[$key], '{param}')) { $param = $this->getUrlParam($key, $table, $suffix, $state, $project, $param); $config[$key] = str_replace('{param}', $param, $config[$key]); } return Dever::url($config[$key]); } return $config; } /** * 获取url需要的参数 * * @return string */ private function getUrlParam($key, $table, $suffix, $state, $project = '', $input = array()) { $this->param = array(); if (!$this->param) { if ($key != 'listParent') { if ($where = Dever::preInput('search_', $input)) { unset($where['search_option_state']); $this->param += $where; } } /* if ($where = Dever::preInput('oper_', $input)) { $this->param += $where; } */ if ($where = Dever::preInput('set_', $input)) { $this->param += $where; } /* if ($search_limit = Dever::input('search_limit')) { $this->param['search_limit'] = $search_limit; }*/ if ($page_type = Dever::input('page_type')) { $this->param['page_type'] = $page_type; } if ($state) { $this->param['search_option_state'] = $state; } $alias = Dever::input('alias'); if ($alias) { $this->param['alias'] = $alias; } $this->param['menu'] = $this->menu; $this->param['menu_id'] = $this->menu_id; $this->parent(); } $param = $this->param; if ($this->parent) { if ($key == 'listParent') { $parent = $this->parent['parent']; if ($this->parent['project']) { $project = $this->parent['project']; } $table = $this->parent['table']; } else { $parent = $this->parent['link']; } if (strstr($parent, '=')) { parse_str($parent, $array); $param = array_merge($this->param, $array); } else { $param['parent'] = $parent; } } $param['project'] = $project; $param['table'] = $table; if (strstr($table, '&')) { $temp = explode('&', $table, 2); $param['table'] = $temp[0]; parse_str($temp[1], $array); $param = array_merge($param, $array); } if ($suffix) { parse_str($suffix, $array); $param = array_merge($param, $array); } return urldecode(http_build_query($param)); } private function parent() { $this->parent = array(); $parent = Dever::input('parent'); if ($parent) { $this->parent['project'] = ''; $this->parent['link'] = $parent; $parent = explode('.', $parent); $cur = array_pop($parent); if ($cur && strstr($cur, '/')) { $temp = explode('/', $cur); $cur = $temp[1]; $this->parent['project'] = $temp[0]; } $this->parent['parent'] = implode('.', $parent); $this->parent['table'] = $cur; } else { # 此处为了兼容旧版本的一些设置 这里后续废弃 $parent = Dever::input('oper_table', Dever::input('oper_parent')); if ($parent) { $link = ''; $this->parent['link'] = 'oper_table=' . $parent; $this->parent['table'] = $parent; $this->parent['project'] = Dever::input('oper_project'); $top = Dever::preInput('top_'); if ($top) { $top_query = http_build_query($top); $this->parent['link'] .= '&' . $top_query; if (strstr($top_query, '.')) { foreach ($top as $k => $v) { $temp = explode('.', $v); $k = str_replace('top_', '', $k); $link .= '&oper_' . $k . '=' . $temp[0]; if (isset($temp[1])) { $link .= '&top_' . $k . '=' . $temp[1]; } } } else { $link .= '&' . str_replace('top_', 'oper_', $top_query); } } $this->parent['parent'] = $link; } } } /** * 获得refer * * @return string */ private function refer($type = 'project') { return ''; switch ($type) { case 'project': $name = '数据库操作'; break; case 'list': $name = '数据列表'; break; case 'url': $name = '项目列表'; break; } $name = '返回上一级'; $url = $this->url($type); $refer = '-[' . $name . ']'; return $refer; } /** * getAdminInfo * * @return array */ private function getAdminInfo($data) { $admin = Dever::load('manage/auth.info'); $data['my_admin_id'] = $admin['id']; $data['my_role_id'] = $admin['role']; return $data; } /** * cookie 处理cookie * * @return array */ public function cookie() { $cookie = $_COOKIE; $array = array(); # 判断手机版 $mobile = Dever::mobile(); if ((isset($cookie['left_menu']) && $cookie['left_menu'] == 'close') || $mobile) { $array['wrapper'] = 'enlarged forced'; } else { $array['wrapper'] = 'forced'; } return $array; } /** * listStyle * * @return array */ public function listStyle() { $mobile = Dever::mobile(); if ($mobile) { $style = '.container_list .panel-heading .form-control,#mul .form-control,#page .form-control { width:70%; } .row { margin-right: -15px; margin-left: -15px; } #dever_modal_body img { max-width:300px; } '; } else { $style = '#dever_modal_body img { max-width:300px; }'; } return $style; } /** * info 处理一些基本的信息,供模板使用 * * @return array */ public function info() { if ($this->info) { return $this->info; } $config = $this->config(); $menu = isset($config['lang']) ? $config['lang'] : $this->project . '-' . $this->table; if (isset($config['state']) && $config['state'] == 2) { $menu .= '[回收站]'; } $top = Dever::load('manage/top.get'); //print_r($top);die; $this->info = array ( 'action' => $this->url('updateAction'), 'list' => $this->url('list'), 'search' => $this->url('search'), 'mul' => $this->url('list'), //'add' => 'location.href=\'' . $this->url('add') . '\'', 'add' => $this->url('add'), 'state' => $this->getState(), 'l' => 'project/database/list', 'project' => $this->project, 'table' => $this->table, 'menu' => $this->menu, 'menu_id' => $this->menu_id, 'id' => $this->id, 'main' => '数据管理' . $this->refer('url'), 'list_header' => $menu, 'list_desc' => '数据列表', 'project_name' => Dever::load('manage/project.name', $this->project), 'update_header' => $menu, 'update_desc' => '更新数据', 'updateMul' => (!$this->id && isset($config['manage']['updateMul']) && $config['manage']['updateMul']) ? '增加一条' : false, 'updateDesc' => isset($config['manage']['desc']) ? $config['manage']['desc'] : '', 'listInfo' => isset($config['info']) ? $config['info'] : '', 'listDesc' => isset($config['desc']) ? $config['desc'] : '', 'struct' => isset($config['manage']['struct']) ? $config['manage']['struct'] : '', 'stat_desc' => '主动统计', 'search_param' => '', 'parent' => '', 'parent_value' => Dever::input('parent'), 'alias' => Dever::input('alias'), ); if ($this->parent) { $this->info['parent'] = $this->url(Dever::input('parent_link', 'listParent')); } $this->info['submit'] = $this->info['parent'] ? $this->info['parent'] : $this->info['list']; # 保存页面 $this->info['save'] = Dever::input('oper_save_table', Dever::input('oper_save_jump')); if ($this->info['save']) { $this->info['save_project'] = Dever::input('oper_save_project'); $this->info['list'] = $this->url(Dever::input('oper_index', 'list'), 0, $this->info['save'], '', $this->info['save_project']); } $search = Dever::preInput('search_'); if ($search) { $this->info['mul'] .= '&' . http_build_query($search); if (layadmin()) { foreach ($search as $k => $v) { if (!strstr($k, 'search_option_')) { if (is_array($v)) { $v = implode(',', $v); } $this->info['search_param'] .= ''; } } } } $search = Dever::preInput('set_'); if ($search) { $this->info['mul'] .= '&' . http_build_query($search); if (layadmin()) { foreach ($search as $k => $v) { if (is_array($v)) { $v = implode(',', $v); } $this->info['search_param'] .= ''; } } } if ($this->id) { $this->info['update_header'] = $menu . '-更新数据' . $this->refer('list'); } return $this->info; } /** * 获取表名 * * @return array */ public function getTableName($project, $table) { if ($project == 'other') { return '无数据表'; } $path = Dever::load('manage/project.path', $project); $config = $this->config($project, $path, $table); $data = isset($config['lang']) ? $config['lang'] : $project; return $data; } private function getState() { return Dever::input('search_option_state', 1); } /** * config * * @return array */ public function config($project = false, $path = false, $table = false) { if (!$project) { $project = $this->project; $table = $this->table; } if (!$project) { return array(); } Dever::$global['manage']['project'] = $project; $config = Dever::load('manage/project.config', $project); if (!is_array($config)) { Dever::alert($project . ' error'); } $project = $config['name']; if (!$path) { if (isset($config['base']) && isset($config['rel'])) { $path = DEVER_INCLUDE_PATH . $config['rel']; } else { $path = $config['path']; } } if ($project && $path && empty($this->config[$path])) { $this->config[$path] = array(); $dir = $path . 'database/'; if (is_dir($dir)) { $database = scandir($dir); foreach ($database as $k => $v) { if (strpos($v, '.php') !== false) { $k = str_replace('.php', '', $v); $this->config[$path][$k] = $this->struct($dir . $v, $project); } } } } if (isset($this->config[$path][$table])) { return $this->config[$path][$table]; } return $this->config[$path]; } # 得到重写的配置 public function getConfig() { $config = $this->config(); if (!isset($config['info'])) { $config['info'] = ''; } if (!isset($config['desc'])) { $config['desc'] = ''; } $manage = Dever::config('base')->manage; if ($manage) { if (isset($manage['info'])) { $config['info'] = $manage['info']; } if (isset($manage['desc'])) { $config['desc'] = $manage['desc']; } } return $config; } /** * 对database配置文件进行解析 * * @return array */ private function struct($file, $project = false) { $config = include $file; if (isset($config['struct']) && is_array($config['struct']['id'])) { $config['update'] = false; $config['manage']['struct'] = ''; $config['level'] = 1; foreach ($config['struct'] as $k => $v) { if (isset($v['level'])) { $config['level'] = 3; } if (isset($v['search_parent'])) { $config['manage']['search_parent'][$v['search_parent']] = $k; $config['manage']['search_child'][$k] = $v['search_parent']; } if (!isset($config['search'])) { if (isset($v['search_name'])) { $v['name'] = $v['search_name']; } if (isset($v['search']) && is_string($v['search'])) { if ($v['search'] == 'sday') { $config['manage']['search']['sday'][$k]['key'] = $v['search']; $config['manage']['search']['sday'][$k]['lang'] = $v['name']; } elseif ($v['search'] == 'sdate') { $config['manage']['search']['sdate'][$k]['key'] = $v['search']; $config['manage']['search']['sdate'][$k]['lang'] = $v['name']; } elseif (strpos($v['search'], 'time') !== false || strpos($v['search'], 'day') !== false) { $config['manage']['search']['day'][$k]['key'] = $v['search']; $config['manage']['search']['day'][$k]['lang'] = $v['name']; } elseif (strpos($v['search'], 'date') !== false) { $config['manage']['search']['date'][$k]['key'] = $v['search']; $config['manage']['search']['date'][$k]['lang'] = $v['name']; } elseif (strpos($v['search'], 'year') !== false) { $config['manage']['search']['year'][$k]['key'] = $v['search']; $config['manage']['search']['year'][$k]['lang'] = $v['name']; } elseif (strpos($v['search'], 'month') !== false) { $config['manage']['search']['month'][$k]['key'] = $v['search']; $config['manage']['search']['month'][$k]['lang'] = $v['name']; } if (strpos($v['search'], 'exp') !== false) { $config['manage']['search']['exp'][$k] = $v['name']; } if (strpos($v['search'], 'ins') !== false) { $config['manage']['search']['ins'][$k] = $v['name']; } if (strpos($v['search'], 'fulltext') !== false) { $config['manage']['search']['fulltext'][$k] = $v['name']; isset($v['match']) && $config['request']['list']['option'][$k] = array('option', 'like_score'); } elseif (strpos($v['search'], 'text') !== false) { $config['manage']['search']['text'][$k] = $v['name']; } elseif (strpos($v['search'], 'hidden') !== false) { $config['manage']['search']['hidden'][$k] = $v['name']; } if (isset($v['exist']) && strpos($v['search'], 'exist') !== false) { $config['manage']['search']['exist'][$k]['option'] = $v['exist']; $config['manage']['search']['exist'][$k]['lang'] = $v['name']; } if (isset($v['option']) && strpos($v['search'], 'selects') !== false) { $config['manage']['search']['selects'][$k]['option'] = $v['option']; $config['manage']['search']['selects'][$k]['lang'] = $v['name']; if (isset($v['default'])) { $config['manage']['search']['selects'][$k]['default'] = $v['default']; } } elseif (isset($v['option']) && strpos($v['search'], 'select') !== false) { $config['manage']['search']['select'][$k]['option'] = $v['option']; $config['manage']['search']['select'][$k]['lang'] = $v['name']; if (isset($v['default'])) { $config['manage']['search']['select'][$k]['default'] = $v['default']; } } if (isset($v['option']) && strpos($v['search'], 'group') !== false) { $config['manage']['search']['group'][$k]['option'] = $v['option']; $config['manage']['search']['group'][$k]['lang'] = $v['name']; if (isset($v['default'])) { $config['manage']['search']['group'][$k]['default'] = $v['default']; } } if (isset($v['option']) && strpos($v['search'], 'linkage') !== false) { $config['manage']['search']['linkage'][$k]['option'] = $v['option']; $config['manage']['search']['linkage'][$k]['lang'] = $v['name']; if (isset($v['default'])) { $config['manage']['search']['linkage'][$k]['default'] = $v['default']; } } } elseif (isset($v['search']) && is_array($v['search'])) { if (isset($v['search']['api'])) { $config['manage']['search']['api'][$k] = $v['search']; $config['manage']['search']['api'][$k]['lang'] = $v['name']; } } if (isset($v['search_button'])) { $config['manage']['search']['button'][$k] = $v['search_button']; } } /* if (isset($v['table']) && !isset($config['end'])) { $config['end']['insert'] = $v['value']; } */ if (isset($v['update'])) { if (!isset($config['manage']['insert'])) { $config['manage']['insert'] = true; } $config['update'] = true; } if (isset($v['type'])) { $config['manage']['struct'] .= Dever::tbody(array($k, $v['type'], $v['name'])); } } $config['manage']['struct'] .= '
'; $config['manage']['_list'] = array ( 'col' => 'manage', 'name' => '管理', 'value' => array(), ); if (!isset($config['manage']['edit']) || (isset($config['manage']['edit']) && $config['manage']['edit'] == true)) { if (!isset($config['manage']['list_button']['update'])) { $config['manage']['_list']['value']['update'] = '编辑'; } } if (isset($config['manage']['list'][0]) && is_array($config['manage']['list'][0])) { $config['manage']['_list']['value'] += $config['manage']['list'][0]; unset($config['manage']['list'][0]); } elseif (isset($config['manage']['list_button']) && $config['manage']['list_button']) { $config['manage']['_list']['value'] += $config['manage']['list_button']; } if (!isset($config['manage']['delete']) || (isset($config['manage']['delete']) && $config['manage']['delete'] == true)) { if (!isset($config['manage']['list_button']['delete'])) { $config['manage']['_list']['value']['delete'] = '删除'; } } if (!$config['manage']['_list']['value']) { unset($config['manage']['_list']); } if (isset($config['manage']['list_type'])) { $config['manage']['list_table'] = 'html'; } # 新增排序 $l = isset($_GET['l']) ? $_GET['l'] : ''; if ($l == 'project/database/list' || $l == 'database.list_excel') { $list_order = array(); $i = 0; foreach ($config['struct'] as $ki => $vi) { if (isset($vi['list_order'])) { $list_order[] = $vi['list_order']; } else { $config['struct'][$ki]['list_order'] = $i; $list_order[] = $i; } $i++; } if ($list_order) { array_multisort($list_order, SORT_ASC, SORT_NUMERIC, $config['struct']); } } } else { echo $file;die; } $config['state'] = $this->getState(); $config['project'] = $project; return $config; } public function submit() { $data = Dever::submit(); return $data; } /** * 自定义列表页面 * * @return array */ public function page($key = 'list') { $key = Dever::input('page_value', $key); $type = Dever::input('page_type', 1); $config = $this->config(); $result = array(); $result['s1'] = 'display:none'; $result['s2'] = 'display:'; $result['content'] = ''; $key = 'page_' . $key; if (isset($config['manage'][$key]) && $type == 1) { if ($config['manage'][$key] == 'photo' && isset($config['manage']['photo'])) { $result['content'] = Dever::view('list/photo', false, 'manage'); } else { $result['content'] = Dever::view($config['manage'][$key], 'manage', $this->project); } //echo $result['content'];die; if ($result['content']) { Dever::setInput('page_content', 1); $result['s1'] = 'display:'; $result['s2'] = 'display:none'; # 添加底部 if ($key != 'page_list_table') { $result['content'] .= Dever::view('inc/foot', false, 'manage'); } } } elseif (strstr($key, 'list_table')) { Dever::setInput('page_type', 2); } return $result; } /** * 自定义列表页面 * * @return array */ public function page_list() { return $this->page('list'); } /** * 自定义列表页面 只接管table部分,同时必须传值page_type=1 * * @return array */ public function page_list_table() { $type = Dever::input('page_type', 2); if ($type == 1) { return $this->page('list_table'); } else { return $this->page('list_table_default'); } } /** * 自定义列表页面 * * @return array */ public function page_update() { return $this->page('update'); } /** * 载入自定义资源 * * @return array */ public function res() { $result = array ( 'js' => '', 'css' => '', ); if (!$this->project) { return $result; } $config = $this->config(); if (isset($config['manage']['res'])) { foreach ($config['manage']['res'] as $k => $v) { $result[$k] = $this->getRes($k, $v); } } return $result; } /** * 载入默认样式 * * @return array */ public function css() { $css = ''; $fast = Dever::input('fast'); if ($fast == 1) { $css = '.layui-input,.xm-select-parent { width: 100%; }'; } else { $css = '.layui-input,.xm-select-parent,.layui-form-select { width: 50%; } .layui-form-select .layui-input { width:100%; } @media screen and (max-width: 1024px) { .layui-input,.xm-select-parent { width: 90%; } }'; } return $css; } /** * getRes * * @return string */ protected function getRes($path, $value) { if (is_array($value)) { $res = ''; foreach ($value as $k => $v) { $res .= $this->getRes($path, $v); } return $res; } else { if ($this->project != 'manage') { $base = str_replace('assets/', 'assets/manage/', Dever::config('host', $this->project)->$path); } else { $base = Dever::config('host', $this->project)->$path; } $file = $base . $value . '.' . $path; if ($path == 'js') { $res = ''; } else { $res = ' '; } return $res; } } /** * 头部banner * * @return array */ public function banner() { if (!$this->project) { return ''; } $config = $this->config(); $result = ''; if (isset($config['manage']['banner'])) { foreach ($config['manage']['banner'] as $k => $v) { $config['manage']['banner'][$k] = $this->value($v, 'yes'); } if (empty($config['manage']['banner']['link'])) { $config['manage']['banner']['link'] = '#'; $config['manage']['banner']['target'] = '_self'; } if (empty($config['manage']['banner']['target'])) { $config['manage']['banner']['target'] = '_blank'; } $result = ' ' . $config['manage']['banner']['name'] . ''; } return $result; } /** * 列表页搜索 * * @return array */ public function list_search_select(&$result, $search, $name, $lang, $option, $default = false, $bind = array(), $parent = '', $mul = false) { $value = array(); if (strpos($lang, '-')) { $temp = explode('-', $lang); $lang = $temp[0]; } $value['name'] = $name; $value['lang'] = $lang; $value['option'] = $option; if (isset($search[$name])) { $value['value'] = $search[$name]; } if ($default) { //$value['default'] = $default; } if ($bind) { $value['bind'] = $bind; } $value['parent'] = $parent; if ($mul) { $value['update'] = 'selects'; $value['match'] = 'option'; } $result .= Html::select($value, false); } /** * 列表页搜索 * * @return array */ public function list_search_group(&$result, $search, $name, $lang, $option, $default = false) { $value = array(); $value['name'] = $name; $value['lang'] = $lang; $value['option'] = $option; if (isset($search[$name])) { $value['value'] = $search[$name]; } if ($default) { //$value['default'] = $default; } $result .= Html::group($value, false); } /** * 列表页搜索 * * @return array */ public function list_search_linkage(&$result, $search, $name, $lang, $option, $default = false) { $value = array(); $value['name'] = $name; $value['lang'] = $lang; $value['option'] = $option; $value['search_state'] = true; if (isset($search[$name])) { $value['value'] = $search[$name]; } if ($default) { //$value['default'] = $default; } $result .= Html::linkage($value, 'span'); } /** * 列表页搜索 * * @return array */ public function list_search_time(&$result, $search, $prefix, $key, $config, $type = 'time') { $start = $end = true; $eq = $eqs = false; if (is_array($config)) { $lang = $config['lang']; $search_key = $config['key']; if (strstr($search_key, '_')) { $temp = explode('_', $search_key); $start = $end = false; if (isset($temp[1])) { if ($temp[1] == 'start') { $start = true; } elseif ($temp[1] == 'end') { $end = true; } elseif ($temp[1] == 'eq') { $eq = true; } elseif ($temp[1] == 'eqs') { $eqs = true; } } } } else { $lang = $config; } if ($eqs) { $value = array(); $value['name'] = $prefix . 'option_' . $key; Dever::setInput($value['name'], '', 'search_'); $value['lang'] = $lang; if (isset($search[$value['name']]) && $search[$value['name']]) { $value['value'] = Dever::maketime($search[$value['name']]); $start_value = $end_value = $value['value']; if ($type == 'time' || $type == 'day' || $type == 'date') { $start_value = Dever::maketime($search[$value['name']] . ' 00:00:00'); $end_value = Dever::maketime($search[$value['name']] . ' 23:59:59'); } elseif ($type == 'month') { $start_value = Dever::maketime($search[$value['name']] . '-01 00:00:00'); $end_value = date('t', $start_value); $end_value = Dever::maketime($search[$value['name']] . '-'.$end_value.' 23:59:59'); } elseif ($type == 'year') { $start_value = Dever::maketime($search[$value['name']] . '-01-01 00:00:00'); $end_value = date('12-t', $start_value); $end_value = Dever::maketime($search[$value['name']] . '-'.$end_value.' 23:59:59'); } Dever::setInput($prefix . 'option_start_' . $key, $start_value, 'search_'); Dever::setInput($prefix . 'option_end_' . $key, $end_value, 'search_'); } $result .= Html::$type($value, false); } elseif ($eq) { $value = array(); $value['name'] = $prefix . 'option_' . $key; $value['lang'] = $lang; if (isset($search[$value['name']]) && $search[$value['name']]) { $value['value'] = Dever::maketime($search[$value['name']]); Dever::setInput($value['name'], $value['value'], 'search_'); } $result .= Html::$type($value, false); } else { if ($start) { $value = array(); $value['name'] = $prefix . 'option_start_' . $key; $value['lang'] = '>=' . $lang; if (isset($search[$value['name']]) && $search[$value['name']]) { $value['value'] = Dever::maketime($search[$value['name']]); Dever::setInput($value['name'], $value['value'], 'search_'); } $result .= Html::$type($value, false); } if ($end) { $value = array(); $value['name'] = $prefix . 'option_end_' . $key; $value['lang'] = '<=' . $lang; if (isset($search[$value['name']]) && $search[$value['name']]) { $value['value'] = Dever::maketime($search[$value['name']]); Dever::setInput($value['name'], $value['value'], 'search_'); } $result .= Html::$type($value, false); } } } /** * 列表页头部按钮 * * @return array */ public function list_button() { /* if (Dever::load('manage/auth.oper', 2) == false) { return ''; } */ $button = array(); $config = $this->config(); $result = ''; $suffix = ''; if (isset($config['manage']['link'])) { $suffix = $config['manage']['link']; } # 增加返回上一页按钮 $info = $this->info(); if ($info['parent']) { $parent_name = '返回上一页'; $parent_show = false; if (isset($config['manage']['parent']) && $config['manage']['parent']) { if (is_string($config['manage']['parent'])) { $parent_name = $config['manage']['parent']; } $parent_show = true; } elseif (!isset($config['manage']['parent'])) { $parent_show = true; } if ($parent_show) { $button[$parent_name] = $info['parent']; } } if ($info['add']) { $add_name = '新增'; $add_show = false; if (isset($config['manage']['insert']) && $config['manage']['insert']) { if (is_string($config['manage']['insert'])) { $add_name = $config['manage']['insert']; } $add_show = true; } elseif (!isset($config['manage']['insert'])) { $add_show = true; } $insert_state = Dever::load('manage/auth.oper', 4); if ($insert_state) { if ($add_show) { $button[$add_name] = $info['add'] . '&' . $suffix; } } elseif (isset($config['manage']['button']['新增'])) { unset($config['manage']['button']['新增']); } } # 增加主动统计按钮 if ($this->state && isset($config['manage']['stat'])) { $name = '数据统计'; if (is_string($config['manage']['stat'])) { $name = $config['manage']['stat']; } $button[$name] = $this->url('stat', false, false, $suffix); } if (isset($config['manage']['button']) && $config['manage']['button']) { $button += $config['manage']['button']; } # 增加下载报表按钮 if ($this->state && isset($config['manage']['excel']) && $config['manage']['excel']) { $url = $this->url('excel'); if (is_array($config['manage']['excel'])) { foreach ($config['manage']['excel'] as $k => $v) { if (is_array($v)) { $name = $v[0]; $u = $url . '&excel_name='.$v[1].'&excel_load=' . $v[2]; $button[$name] = 'onclick="jump(\''.$u.'\', \'#form1\')"'; } else { $name = $v; $button[$name] = 'onclick="jump(\''.$url.'\', \'#form1\')"'; } } } else { $name = '导出数据'; if (is_string($config['manage']['excel']) && !strstr($config['manage']['excel'], '.')) { $name = $config['manage']['excel']; } $button[$name] = 'onclick="jump(\''.$url.'\', \'#form1\')"'; } } # 增加回收站 if (Dever::load('manage/auth.oper', 5) != false && isset($config['struct']['state']) && (!isset($config['manage']['delete']) || (isset($config['manage']['delete']) && $config['manage']['delete'] && isset($config['manage']['_list']['value']['delete'])))) { if ($config['state'] == 2) { $button['返回数据列表'] = $this->url('list', 0, false, 'search_option_state=1', $this->project); } else { $button['回收站'] = $this->url('list', 0, false, 'search_option_state=2', $this->project); } } # 列表页按钮 if ($button) { $result .= $this->list_button_show($button, $suffix, $config); } /* if (Dever::load('manage/auth.oper', 6) != false && isset($config['manage']['button'])) { $result .= $this->list_button_show($config['manage']['button']); }*/ return $result; } /** * 更新页按钮 * * @return array */ public function update_button() { # 新增权限 /* if (Dever::load('manage/auth.oper', 2) == false) { Dever::alert('你没有权限'); } */ $info = $this->info(); $config = $this->config(); $result = ''; $save_name = '提交保存'; if (isset($config['manage']['update_save']) && !$config['manage']['update_save']) { $save_name = ''; } if ($save_name) { $result .= ''; } $close_name = '放弃保存'; if (isset($config['manage']['update_close']) && !$config['manage']['update_close']) { $close_name = ''; } if ($close_name) { $result .= ''.$close_name.''; } if (isset($config['manage']['update_button']) && $config['manage']['update_button']) { $result = ''; foreach ($config['manage']['update_button'] as $k => $v) { if ($v == 'save-data') { $result .= ''; } elseif ($v == 'copy-data') { $result .= '' . $k . ''; } elseif ($v == 'copy-datas') { $result .= '' . $k . ''; } else { $result .= '' . $k . ''; } } } return $result; } private function list_button_show($button, $suffix = '', $config = array()) { $result = ''; $refer = Dever::input('refer'); if ($refer) { $button['返回上一页'] = array('location', Dever::decode($refer)); } # 不显示哪个按钮 $manage = Dever::config('base')->manage; foreach ($button as $k => $v) { if ($manage && isset($manage['deleteButton']) && in_array($k, $manage['deleteButton'])) { continue; } # 增加细分权限 if ($config && isset($config['manage']['auth']) && $config['manage']['auth'] && !Dever::load('manage/auth.check', $config['lang'] . '-' . $k, $this->menu_id)) { continue; } if (is_array($v)) { if ($v[0] == 'location') { if ($v[1] == 'add') { $url = $this->url('add', false, false, $suffix); } elseif ($v[1] == 'list') { $url = $this->url('list', false, false, $suffix); } else { $url = Dever::url($v[1]); } $result .= '  ' . $k . ''; } elseif ($v[0] == 'import') { $result .= '  ' . $k . ''; } elseif ($v[0] == 'excel' || $v[0] == 'search') { $url = Dever::url($v[1]); $result .= '  ' . $k . ''; } elseif ($v[0] == 'oper') { $url = Dever::url($v[1]); $content = ''; if (isset($v[2])) { $content = $v[2]; } $title = ''; if (isset($v[3])) { $title = $v[3]; } $url .= '&manage_log=update.' . $this->project . '.' . $this->table . '&manage_oper=' . $k; $result .= '  ' . $k . ''; } elseif ($v[0] == 'oper_mul') { $url = Dever::url($v[1]); if (!isset($v[2])) { $v[2] = 1; } //$url .= '&manage_log=update.' . $this->project . '.' . $this->table . '&manage_oper=' . $k; $result .= '  ' . $k . ''; } elseif ($v[0] == 'show') { $url = Dever::url($v[1]); $submit = ''; if (isset($v[2])) { $submit = Dever::url($v[2]); } $result .= '  ' . $k . ''; } elseif ($v[0] == 'fast') { if (isset($v[2]) && $v[2]) { $url = $this->url('add', $v[1], $v[2], $suffix); } elseif (isset($v[1]) && $v[1]) { $url = Dever::url($v[1], false, false, $suffix); } else { $url = $this->url('add', false, false, $suffix); } $result .= '  ' . $k . ''; } elseif ($v[0] == 'fasts') { $result .= '  ' . $k . ''; } elseif ($v[0] == 'onclick') { $result .= '  ' . $k . ''; } else { $result .= '  ' . $k . ''; } } elseif (strpos($v, 'modal|') !== false) { $t = explode('modal|', $v); $result .= '  ' . $k . ''; } elseif (strpos($v, '|') !== false) { $t = explode('|', $v); $result .= $t[0] . '  ' . $k . ''; } elseif (strpos($v, 'onclick') !== false) { $result .= '  ' . $k . ''; } elseif (strpos($v, 'http://') !== false || strpos($v, 'https://') !== false) { //$result .= '  '.$k.''; $result .= '  ' . $k . ''; } else { $result .= '  ' . $k . ''; } } $result = ltrim($result, '  '); return $result; } /** * 列表页搜索 * * @return array */ public function list_search() { if (Dever::load('manage/auth.oper', 2) == false) { return ''; } # 将以下判断合并 # 权限验证 /* if (!Dever::load('manage/auth.check', '搜索', $this->menu_id)) { return ''; } */ /* # 新增权限 if (Dever::load('manage/auth.oper', 2) == false) { return ''; } if (!Dever::load('manage/auth.checkFunc', $this->menu_id, false, '搜索')) { return ''; } */ $config = $this->config(); # 增加细分权限 /* if ($config && isset($config['manage']['auth']) && $config['manage']['auth'] && !Dever::load('manage/auth.check', $config['lang'] . '-' . '搜索', $this->menu_id)) { return ''; }*/ $result = ''; $top_result = ''; # 搜索 if (isset($config['struct']) && isset($config['manage']['search']) && $config['manage']['search']) { $search = Dever::preInput('search_'); $set = Dever::preInput('set_'); $node = Html::node(array(' style="margin-top:0px;"', '')); $btn = '
'; if (isset($config['manage']['search']['button'])) { foreach ($config['manage']['search']['button'] as $k => $v) { $i = 0; foreach ($v['option'] as $k1 => $v1) { $value = $k . '~' . $v['sum'] . '~' . $k1; if (isset($v['group'])) { $value .= '~' . $v['group']; } if (!isset($search['search_button']) && $i == 0) { $search['search_button'] = $value; } if (isset($search['search_button']) && $search['search_button'] == $value) { $class = 'layui-btn-normal'; } else { $class = 'layui-btn-primary'; } $url = $this->url('list', 0, false, 'search_button=' . $value); $btn .= ''.$v1.'  '; } } } $btn .= '
'; //$result .= '
'; $prefix = 'search_'; $result .= $node[0]; if (isset($config['manage']['search']['linkage'])) { foreach ($config['manage']['search']['linkage'] as $k => $v) { $this->list_search_linkage($result, $search, $prefix . 'linkage_' . $k, $v['lang'], $this->option($v['option']), $v['default']); if (!layadmin()) { $result .= '
'; } } } if (isset($config['manage']['search']['selects'])) { $this->list_search_br($result); foreach ($config['manage']['search']['selects'] as $k => $v) { $bind = array(); $parent = ''; $option = $this->option($v['option']); if (isset($config['manage']['search_parent'][$k])) { $bind = array ( 'onchange', 'setOption', 'search_option_' . $config['manage']['search_parent'][$k] ); } elseif (isset($config['manage']['search_child'][$k])) { $parent = $config['manage']['search_child'][$k]; } $this->list_search_select($result, $search, $prefix . 'option_' . $k, $v['lang'], $option, $v['default'], $bind, $parent, true); } } if (isset($config['manage']['search']['select'])) { $this->list_search_br($result); foreach ($config['manage']['search']['select'] as $k => $v) { $bind = array(); $parent = ''; $option = $this->option($v['option']); if (isset($config['manage']['search_parent'][$k])) { $bind = array ( 'onchange', 'setOption', 'search_option_' . $config['manage']['search_parent'][$k] ); } elseif (isset($config['manage']['search_child'][$k])) { $parent = $config['manage']['search_child'][$k]; } $this->list_search_select($result, $search, $prefix . 'option_' . $k, $v['lang'], $option, $v['default'], $bind, $parent); } } if (isset($config['manage']['search']['exist'])) { $this->list_search_br($result); foreach ($config['manage']['search']['exist'] as $k => $v) { $this->list_search_select($result, $search, $prefix . 'exist_' . $k, $v['lang'], $this->option($v['option']), ''); } } if (isset($config['manage']['search']['group'])) { $this->list_search_br($result); foreach ($config['manage']['search']['group'] as $k => $v) { $this->list_search_group($result, $search, $prefix . 'option_' . $k, $v['lang'], $this->option($v['option']), $v['default']); } } if (isset($config['manage']['search']['api'])) { $this->list_search_br($result); foreach ($config['manage']['search']['api'] as $k => $v) { $value = array(); $value['name'] = $prefix . 'api_' . $k; $value['class'] = 'form-control'; if (isset($search[$value['name']])) { $value['value'] = $search[$value['name']]; } if (strpos($v['lang'], '-') !== false) { $t = explode('-', $v['lang']); $v['lang'] = $t[0]; } $value['placeholder'] = $v['lang']; if (isset($v['option']) && $v['option']) { $value['option'] = $this->option($v['option']); $value['lang'] = $v['lang']; if (isset($v['top']) && $v['top']) { $top_result .= Html::select($value, false); } else { $result .= Html::select($value, false); } } else { $result .= Html::text($value, false); } } } if (isset($config['manage']['search']['text'])) { $this->list_search_br($result); foreach ($config['manage']['search']['text'] as $k => $v) { $value = array(); $value['name'] = $prefix . 'option_' . $k; $value['class'] = 'form-control'; if (isset($search[$value['name']])) { $value['value'] = $search[$value['name']]; } if (strpos($v, '-') !== false) { $t = explode('-', $v); $v = $t[0]; } $value['placeholder'] = $v; $result .= Html::text($value, false); } } if (isset($config['manage']['search']['hidden'])) { $this->list_search_br($result); foreach ($config['manage']['search']['hidden'] as $k => $v) { $value = array(); $value['name'] = $prefix . 'option_' . $k; $value['class'] = 'form-control'; if (isset($set[$value['name']])) { $value['name'] = 'set_option_' . $k; $value['value'] = $set[$value['name']]; } elseif (isset($search[$value['name']])) { $value['value'] = $search[$value['name']]; } if (strpos($v, '-') !== false) { $t = explode('-', $v); $v = $t[0]; } $value['placeholder'] = $v; $value['type'] = 'hidden'; $result .= Html::hidden($value, false); } } if (isset($config['manage']['search']['ins'])) { $this->list_search_br($result); foreach ($config['manage']['search']['ins'] as $k => $v) { $value = array(); $value['name'] = $prefix . 'option_' . $k; $value['class'] = 'form-control'; if (isset($search[$value['name']])) { $value['value'] = $search[$value['name']]; } if (strpos($v, '-') !== false) { $t = explode('-', $v); $v = $t[0]; } $value['placeholder'] = $v; $result .= Html::text($value, false); } } if (isset($config['manage']['search']['fulltext'])) { $this->list_search_br($result); foreach ($config['manage']['search']['fulltext'] as $k => $v) { $value = array(); $value['name'] = $prefix . 'fulltext_' . $k; $value['class'] = 'form-control'; if (isset($search[$value['name']])) { $value['value'] = $search[$value['name']]; } if (strpos($v, '-') !== false) { $t = explode('-', $v); $v = $t[0]; } $value['placeholder'] = $v; $result .= Html::text($value, false); } } if (isset($config['manage']['search']['exp'])) { $result .= '
'; $this->list_search_select($result, $search, $prefix . 'exp_col', '选择检索项', $config['manage']['search']['exp']); $this->list_search_select($result, $search, $prefix . 'exp_type', '', array ( 3 => '大于', 4 => '大于等于', 5 => '小于', 6 => '小于等于', ), 1); $value = array(); $value['name'] = $prefix . 'exp_value'; $value['class'] = 'form-control'; if (isset($search[$value['name']])) { $value['value'] = $search[$value['name']]; } $value['placeholder'] = '填写值'; $result .= Html::text($value, false); } if (isset($config['manage']['search']['day'])) { foreach ($config['manage']['search']['day'] as $k => $v) { $this->list_search_time($result, $search, $prefix, $k, $v, 'day'); } } if (isset($config['manage']['search']['date'])) { foreach ($config['manage']['search']['date'] as $k => $v) { $this->list_search_time($result, $search, $prefix, $k, $v, 'date'); } } if (isset($config['manage']['search']['year'])) { foreach ($config['manage']['search']['year'] as $k => $v) { $this->list_search_time($result, $search, $prefix, $k, $v, 'year'); } } if (isset($config['manage']['search']['month'])) { foreach ($config['manage']['search']['month'] as $k => $v) { $this->list_search_time($result, $search, $prefix, $k, $v, 'month'); } } if (isset($config['manage']['search']['sday'])) { $result .= '
'; foreach ($config['manage']['search']['sday'] as $k => $v) { $this->list_search_time($result, $search, $prefix, $k, $v, 'sday'); } $sday = Dever::input('search_option_sday'); $s1 = $s2 = $s3 = ''; if ($sday == 7) { $s2 = 'sday_button_border'; } elseif ($sday == 30) { $s3 = 'sday_button_border'; } elseif ($sday) { $s1 = 'sday_button_border'; } $result .= ''; $result .= ''; $result .= ''; $result .= ''; } elseif (isset($config['manage']['search']['sdate'])) { $result .= '
'; foreach ($config['manage']['search']['sdate'] as $k => $v) { $this->list_search_time($result, $search, $prefix, $k, $v, 'sdate'); } $sdate = Dever::input('search_option_sdate'); $s1 = $s2 = $s3 = ''; if ($sdate == 7) { $s2 = 'sdate_button_border'; } elseif ($sdate == 30) { $s3 = 'sdate_button_border'; } elseif ($sdate) { $s1 = 'sdate_button_border'; } $result .= ''; $result .= ''; $result .= ''; $result .= ''; } # 列表页按钮 if (isset($config['manage']['search_button'])) { $btn .= $this->list_button_show($config['manage']['search_button'], '', $config); } $result .= $btn . $node[1]; //$result .= '
'; # 增加每页显示条数 $config['manage']['num'] = $this->getNumConfig($config); /* if ($config['manage']['num']) { $result = $this->num($result, $config['manage']['num']); } */ } $oper = Dever::preInput('oper_'); if ($oper) { foreach ($oper as $k => $v) { $result .= ''; } } $top = Dever::input('top_parent'); if ($top) { $result .= ''; } $page_type = Dever::input('page_type'); if ($page_type) { $result .= ''; } if ($top_result) { $result = $top_result . $result; } return $result; } private function list_search_br(&$result) { if (strpos($result, '  ') && !strpos($result, '
')) { $result .= '
'; } } /** * 获取条数配置 * * @return array */ private function getNumConfig($config) { if (isset($config['manage']['list_type'])) { return false; } if (isset($config['manage']['num']) && $config['manage']['num'] == false) { return false; } if (!isset($config['manage']['num'])) { $config['manage']['num'] = array(20,30,40,50,60,70,80,90,100); } Dever::config('base')->page_num = $config['manage']['num']; return $config['manage']['num']; } /** * 生成条数的html * * @return string */ private function num($result, $config) { return $result; $limit = ''; $cur = Dever::input('search_limit', 0); foreach($config as $k => $v) { if ($cur == $k) { $btn = 'success'; } else { $btn = 'default'; } $url = $this->url('list', 0, false, 'search_limit=' . $k); $limit .= ''.$v.' '; } $num = '
'.$limit.'
'; /* if (layadmin()) { $num = ''; }*/ $result .= $num; return $result; } /** * 列表页表格头 * * @return array */ public function list_thead($type = false) { if (Dever::load('manage/auth.oper', 1) == false) { Dever::alert('你没有权限'); } $config = $this->config(); if ($type == 'layui') { if (!isset($config['manage']['list_table']) || (isset($config['manage']['list_table']) && $config['manage']['list_table'] == 'html')) { return false; } } else { if (isset($config['manage']['list_table']) && $config['manage']['list_table'] == 'js') { return ''; } } $result = array(); /* $tbody = Dever::load('manage/database.list_tbody'); if (!$tbody) { return $result; } */ if (isset($config['struct'])) { if (isset($config['manage']['list']) && $config['manage']['list'] == 'update') { # 验证头部权限 这里如果是多个选择权限的话,暂时无法实现。。。 if (isset($config['top']) && is_string($config['top'])) { $top = Dever::load('manage/auth.getTop', array($config['top'])); if ($top) { $url = $this->url('update', $top['value']); } } else { $url = $this->url('update', Dever::input('where_id', 1)); } return Dever::location($url); } else { if (isset($config['manage']['mul']) && $config['manage']['mul']) { if ($type == 'layui') { $layui = array ( 'field' => 'checkbox', 'title' => '', //'fixed' => 'left', ); $result[] = $layui; } else { $result[] = ''; } } $data = array(); $data = $this->getAdminInfo($data); foreach ($config['struct'] as $k => $v) { if (isset($v['list']) && $v['list']) { # 处理权限 if (isset($v['auth'])) { $auth = $this->value($v['auth'], $data); if (!$auth) { continue; } } if (isset($v['list_name'])) { $v['name'] = $v['list_name']; } else { $temp = Html::cue(array('name' => $v['name'])); $v['name'] = $temp['name']; } if (!isset($v['level'])) { $v['level'] = $config['level']; } if (isset($v['search']) && is_string($v['search']) && strpos($v['search'], 'order') !== false) { $link = Dever::url(); $order = 'search_order_' . $k . ''; if (strpos($link, $order) !== false) { $link = preg_replace('/[?|&]' . $order . '=(desc|asc)/i', '{order}', $link); } else { $link .= '{order}'; } $search = Dever::input($order); $cancel = ''; if ($search) { $asc = $search; $cancel = ' '; } else { $asc = 'desc'; if (!isset($v['order']) && $k != 'id') { //$cancel = ' '; } } if ($asc == 'asc') { $asc = 'desc'; $icon = 'down'; $text = '降序'; } else { $asc = 'asc'; $icon = 'up'; $text = '升序'; } $link = str_replace('{order}', '&' . $order . '=' . $asc, $link); if ($type == 'layui') { $layui = array ( 'field' => $k, 'title' => '' . $v['name'] . ' ', ); $result[] = $layui; } else { $result[] = '' . $v['name'] . ' ' . $cancel . ''; } } else { if ($type == 'layui') { if ($k == 'id' || isset($v['fixed'])) { $layui = array ( 'field' => $k, 'title' => $v['name'], //'fixed' => 'left', ); } else { $layui = array ( 'field' => $k, 'title' => $v['name'], ); } if (isset($v['list_header']) && $v['list_header']) { $layui += $v['list_header']; } $result[] = $layui; } else { $result[] = '' . $v['name'] . ''; } } } } //if ((Dever::load('manage/auth.oper', 3) != false || Dever::load('manage/auth.oper', 5) != false) && isset($config['manage']['_list']['value'])) { if (isset($config['manage']['_list']['value']) && $this->manage_button) { if ($type == 'layui') { $layui = array ( 'field' => $config['manage']['_list']['col'], 'title' => $config['manage']['_list']['name'], //'fixed' => 'right', ); $result[] = $layui; } else { $result[] = '' . $config['manage']['_list']['name'] . ''; } } } } return $result; } # layui表头 /* public function list_thead_layui() { $html = 'config.table = {};config.table.cols = [];'; $data = $this->list_thead('layui'); if ($data) { $data = array($data); $data = Dever::json_encode($data); $html .= 'config.table.cols = ' . $data; return $html; } else { $html .= 'config.table.cols = []'; return $html; } } # layui表的数据 没有使用其异步方式 public function list_tbody_layui() { $html = 'config.table.data = [];'; $data = $this->list_tbody(false, 'layui'); $data = Dever::json_encode($data); $html .= 'config.table.data = ' . $data; return $html; } */ /** * 导出列表 * * @return array */ public function list_excel_api() { Dever::$global['base']['excel'] = 1; $this->list_search(); $data = $this->list_tbody(true); if ($data) { $config = $this->config(); if (isset($config['manage']['excel']) && $config['manage']['excel']) { $method = 'excel'; $info = $this->info(); $load = Dever::input('excel_load'); if ($load) { return Dever::load($load, $data); } elseif (is_string($config['manage']['excel']) && strstr($config['manage']['excel'], '.')) { return Dever::load($config['manage']['excel'], $data); } else { $data = $this->getAdminInfo($data); return $this->excel($info, $data, $config); } } } else { Dever::alert('无导出数据'); } //print_r($data);die; } private function excel($info, $data, $config) { $file = Dever::input('excel_name'); if (!$file) { $file = $info['list_header'] . '的' . $info['list_desc'] . '-' . $info['project_name']; } $header = $body = array(); $i = 0; foreach ($config['struct'] as $k => $v) { if (isset($v['list']) && $v['list']) { # 处理权限 if (isset($v['auth'])) { $auth = $this->value($v['auth'], $data); if (!$auth) { continue; } } //$v['name'] = mb_convert_encoding($v['name'],'gb2312','utf-8'); if (isset($v['list_name']) && $v['list_name']) { $v['name'] = $v['list_name']; } $header[$i] = $v['name']; $j = 0; foreach ($data as $ki => $vi) { if (is_array($vi)) { if (isset($data[$ki][$k])) { $data[$ki]['cur_value'] = $data[$ki][$k]; } $body[$j][$i] = ''; //if (isset($vi[$k])) { # 处理同步 # 兼容旧版,之后去掉 if (isset($v['sync']) && isset($v['sync'][0]) && (strstr($k, '-') || strstr($k, '.'))) { $temp = explode('-', $k); if ($vi[$v['sync'][0]] > 0) { $load = Dever::load($temp[0] . '/' . $temp[1] . '-one', array('option_' . $v['sync'][1] => $vi[$v['sync'][0]])); } else { $load = Dever::load($temp[0] . '/' . $temp[1] . '-one', array('option_' . $v['sync'][3] => $vi[$v['sync'][2]], 'option_' . $v['sync'][4] => $vi[$v['sync'][0]])); } if (isset($temp[2])) { $data[$ki][$k] = $vi[$k] = isset($load[$temp[2]]) ? $load[$temp[2]] : $v['default']; } } elseif (isset($v['sync']) && (strstr($k, '-') || strstr($k, '.'))) { $v['sync']['dever-read'] = $vi; $data[$ki][$k] = Dever::load($k, $v['sync']); } if (true) { $value = $vi[$k]; if (is_string($v['list'])) { $value = $this->value($v['list'], $data[$ki], $config['struct']); } if (isset($v['option'])) { $value = $this->getOptionValue($value, $v); } //$value = mb_convert_encoding($value,'gb2312','utf-8'); $body[$j][$i] = $value; $j++; } } } $i++; } } return Dever::excelExport($body, $header, $file); } private function getOptionValue($value, $v) { # 验证option是否是匿名函数 $v['option'] = $this->option($v['option']); # 位运算 if (isset($v['bit'])) { $ts = array(); foreach ($v['option'] as $tm => $tv) { if (isset($v['bit'][$tm]) && ($value & $tm) > 0) { $ts[] = $tv; } } $value = implode(',', $ts); } if ((isset($v['child_name']) || (isset($v['show']) && is_string($v['show'])))) { if (isset($v['option'][$value]) && is_array($v['option'][$value])) { $value = $v['option'][$value]['name']; } else { $value = isset($v['option'][$value]) ? $v['option'][$value] : $value; } } else { if (strstr($value, ',')) { $temp = explode(',', $value); $t = array(); foreach ($temp as $vv) { if (isset($v['option'][$vv]) && is_array($v['option'][$vv])) { $t[] = $v['option'][$vv]['name']; } elseif(isset($v['option'][$vv])) { $t[] = $v['option'][$vv]; } else { $t[] = $vv; } } $value = implode("\r\n", $t); } elseif (isset($v['option'][$value]) && is_array($v['option'][$value])) { $value = $v['option'][$value]['name']; } else { $value = isset($v['option'][$value]) ? $v['option'][$value] : $value; } } return $value; } private function _getChr($start, $num) { $num = $start + $num; $max = floor($num / 91); if ($max > 0) { $num = $num - (91 * $max) + $start; $num = chr($start) . chr($num); } else { $num = chr($num); } return $num; } /** * 列表页数据列表 检索 * * @return array */ private function list_tbody_search($config, $param, $high, $search) { # 根据api的数据检索到id $api = Dever::preInput('search_api_'); if ($api) { foreach ($api as $k => $v) { if ($v) { unset($search[$k]); $k = str_replace('search_api_', '', $k); # 设定检索高亮 $high[$k] = $v; if (isset($config['manage']['search']['api'][$k]['api'])) { $col = $config['manage']['search']['api'][$k]['col']; $v = ltrim($v); $v = rtrim($v); if ($v == 'no') { $param['option_no'] = $config['manage']['search']['api'][$k]['no']; } else { $option = array($col => $v, 'clear_top' => true); # 此处可以增加关联关系 $v = Dever::load($config['manage']['search']['api'][$k]['api'], $option); $result = $config['manage']['search']['api'][$k]['result']; if ($v && is_array($v)) { if (isset($v[$result])) { $v = $v[$result]; } else { if ($result == 'id') { $v = array_keys($v); } else { $t = array(); foreach ($v as $k1 => $v1) { $t[] = $v1[$result]; } $v = $t; } if (isset($config['manage']['search']['api'][$k]['search'])) { $param['option'][$config['manage']['search']['api'][$k]['search']] = array('yes', 'in'); } else { $param['option'][$k] = array('yes', 'in'); } } } else { $v = '-100'; } } } if (!isset($param['option_no'])) { if (isset($config['manage']['search']['api'][$k]['search'])) { $param['option_' . $config['manage']['search']['api'][$k]['search']] = $v; } else { $param['option_' . $k] = $v; } } } } } # 检索有无值 $exist = Dever::preInput('search_exist_'); if ($exist) { foreach ($exist as $k => $v) { if ($v) { $v = ltrim(rtrim($v)); unset($search[$k]); $k = str_replace('search_exist_', '', $k); if ($v == 'yes') { # 有值 $param['option'][$k] = array('yes', '!='); //$param['option_' . $k] = 'null'; } elseif ($v == 'no') { # 无值 $param['option'][$k] = array('yes', '='); //$param['option_' . $k] = 'null'; } elseif (strpos($v, '|')) { # 有无值或者自定义的值 $temp = explode('|', $v); $param['option_' . $k] = $temp[1]; if ($temp[0] == 'yes') { $param['option'][$k] = array('yes', '!='); $param['option'][$k . '_t1'] = array('yes-' . $k, '!='); } else { $param['option'][$k] = array('yes', '=', 'and('); $param['option'][$k . '_t1'] = array('yes-' . $k, '=', 'or)'); } //$param['option_' . $k . '_t1'] = 'null'; } else { # 自定义的值 $param['option_' . $k] = $v; } } } } # 检索in $in = Dever::preInput('search_in_'); if ($in) { $in_state = false; foreach ($in as $k => $v) { if ($v) { $v = ltrim(rtrim($v)); unset($search[$k]); $k = str_replace('search_in_', '', $k); $param['option'][$k] = array('yes', 'in'); $param['option_' . $k] = $v; # 设定检索高亮 //$high[$k] = $v; $in_state = true; } } $this->search = true; } $fulltext = Dever::preInput('search_fulltext_'); if ($fulltext) { $fulltext_state = false; foreach ($fulltext as $k => $v) { if ($v) { $v = ltrim(rtrim($v)); unset($search[$k]); $k = str_replace('search_fulltext_', '', $k); $param['option_' . $k] = $v; # 设定检索高亮 $high[$k] = $v; $fulltext_state = true; } } $this->search = true; } $linkage = Dever::preInput('search_linkage_'); if ($linkage) { foreach ($linkage as $k => $v) { if ($v && $v != -1) { unset($search[$k]); $k = str_replace('search_linkage_', '', $k); if (isset($config['struct'][$k]['search_col'])) { $temp = explode(',', $config['struct'][$k]['search_col']); if (!is_array($v)) { $v = explode(',', $v); } foreach ($temp as $k1 => $v1) { if (isset($v[$k1]) && $v[$k1] != -1) { $param['option_' . $v1] = $v[$k1]; } } } else { if (is_array($v)) { $v = implode(',', $v); } if ($v != -1) { $v = Dever::defaultValue($v); $param['option_' . $k] = $v; # 设定检索高亮 $high[$k] = $v; } } } } $this->search = true; } $exp = Dever::preInput('search_exp_'); if ($exp) { $k = $search['search_exp_col']; $v = $search['search_exp_value']; $v = ltrim(rtrim($v)); $param['option_' . $k] = $v; $param['search_type'] = $search['search_exp_type']; $this->search = true; } $order = Dever::preInput('search_order_'); if ($order) { foreach ($order as $k => $v) { $v = ltrim(rtrim($v)); $k = str_replace('search_order_', '', $k); $param['order'][0][$k] = $v; unset($search[$k]); } } $set = Dever::preInput('set_'); if ($set) { foreach ($set as $k => $v) { $v = ltrim(rtrim($v)); $k = str_replace('set_', '', $k); $param[$k] = $v; } } foreach ($search as $k => $v) { if ($v) { if (is_string($v)) { $v = ltrim(rtrim($v)); } if (strstr($k, '-') || strstr($k, '.')) { $k = str_replace('search_option_', '', $k); $struct = $config['struct'][$k]; if (isset($struct['search_col']) && $struct['search_col']) { $param[$struct['search_col']] = $v; } elseif (isset($struct['sync']) && isset($struct['sync'][0])) { # 兼容旧版,之后去掉 $temp = explode('-', $k); $load = Dever::load($temp[0] . '/' . $temp[1] . '-one', array('option_' . $struct['sync'][1] => $v)); /* if ($v[$vi['sync'][0]] > 0) { $load = Dever::load($temp[0] . '/' . $temp[1] . '-one', array('option_' . $vi['sync'][1] => $v[$vi['sync'][0]])); } else { $lw = array('option_' . $vi['sync'][3] => $v[$vi['sync'][2]], 'option_' . $vi['sync'][4] => $v[$vi['sync'][0]]); $load = Dever::load($temp[0] . '/' . $temp[1] . '-one', $lw); }*/ if (isset($temp[2])) { $v = isset($load[$temp[2]]) ? $load[$temp[2]] : $struct['default']; $param[str_replace('search_', '', $k)] = $v; } }elseif (isset($struct['sync'])) { $struct['sync']['dever-read']['id'] = $v; $v = Dever::load($k, $struct['sync']); if (!$v) { $v = $struct['default']; } $param[str_replace('search_', '', $k)] = $v; } } elseif (strpos($k, 'dever_') !== false) { continue; } elseif (strpos($k, 'option_') !== false) { //Dever::setInput(str_replace('search_', '', $k), $v); if (is_array($v)) { if ($v[0] == 0) { continue; } $v = str_replace(',0', '', implode(',', $v)); $t = explode(',', $v); $parent = end($t); $v .= '%'; } $param[str_replace('search_', '', $k)] = $v; $this->search = true; } elseif ($k == 'search_limit') { $num = $this->getNumConfig($config); if ($num) { $param['page'][0] = $num[$v]; } } } } return array($param, $high); } private function list_tbody_mul($config, $send) { $mul = Dever::load('manage/auth.oper', 3) ? Dever::preInput('mul_') : false; $method = Dever::input('method'); if (strstr($method, 'mul') && $mul && $mul['mul_type'] > 0) { if ($mul['mul_type'] == 1 && empty($mul['mul_where_id'])) { Dever::alert('您还未选择任何数据条目'); } Dever::config('base')->mul_type = $mul['mul_type']; unset($mul['mul_type']); $param = $send; if (isset($param['page'])) { unset($param['page']); } foreach ($mul as $k => $v) { if ($v) { if (is_array($v)) { $v = implode(',', $v); } $param[str_replace('mul_', '', $k)] = $v; if (strstr($k, 'mul_set_')) { $k = str_replace('mul_set_', '', $k); if (isset($config['struct'][$k]) && isset($config['struct'][$k]['mul_where'])) { $param = array_merge(Dever::prefix($config['struct'][$k]['mul_where'], 'option_'), $param); } } } } //print_r($param);die; if (isset($param)) { $data = Dever::db($this->project . '/' . $this->table)->getmul($param); if ($data) { Dever::config('base')->mul_data = array_keys($data); if (strstr($method, 'mul.')) { $url = str_replace('mul.', '', $method); if ($url) { $send = array(); foreach ($param as $k => $v) { $send['search_' . $k] = $v; } $send['search_ids'] = implode(',', Dever::config('base')->mul_data); if (strstr($url, '?')) { $url .= '&' . http_build_query($send); } else { $url .= '?' . http_build_query($send); } Dever::alert($url, 2); } } $method = $this->project . '/' . $this->table . '-updatemul'; $state = Dever::load($method, $param); } } Dever::alert('reload'); } } /** * 列表页数据列表:图片形式 * * @return array */ public function list_photo() { $config = $this->config(); $result = array(); if (isset($config['manage']['photo'])) { $high = array(); $search = Dever::load('manage/auth.oper', 2) ? Dever::preInput('search_') : false; $param = array(); $parent = 0; if ($search) { list($param, $high) = $this->list_tbody_search($config, $param, $high, $search); } if (empty($param['page'])) { $num = $this->getNumConfig($config); if ($num) { $param['page'][0] = $num[0]; } } $method = $this->project . '/' . $this->table . '-list'; $result = Dever::load($method, $param); if ($result) { foreach ($result as $k => $v) { $result[$k] = Dever::load($config['manage']['photo'], $v); $result[$k]['button'] = $this->list_tbody_button($config, $v, 'div'); } } } return $result; } /** * 列表页数据列表:表格形式 * * @return array */ public function list_tbody($excel = false, $type = false) { $this->state = false; # 新增权限 if (Dever::load('manage/auth.oper', 1) == false) { Dever::alert('你没有权限'); } if (Dever::input('page_content') == 1) { return ''; } $config = $this->config(); $high = array(); $search = Dever::load('manage/auth.oper', 2) ? Dever::preInput('search_') : false; $param = array(); $parent = 0; if ($search) { list($param, $high) = $this->list_tbody_search($config, $param, $high, $search); } $num = $this->getNumConfig($config); if (empty($param['page']) && $num) { $param['page'][0] = $num[0]; } # 批量更新 $this->list_tbody_mul($config, $param); $result = $return = array(); if (isset($config['top_option']) && $config['top_option']) { if (isset($config['top_option'][0])) { foreach ($config['top_option'] as $k => $v) { if (isset($v['join'])) { $param['join'][] = $v['join']; $col = 't_2.' . $v['col']; $param['option']['state'] = 'yes-t_1.state'; } else { $col = $v['col']; } if ($v['value']) { $param['option'][$v['col']] = array('yes-' . $col, 'in'); $param[$v['col']] = $v['value']; } } } else { $param['option'][$config['top_option']['col']] = array($config['top_option']['value'], 'in'); } } if (isset($config['manage']['company']) && is_array($config['manage']['company']) && isset($config['manage']['company']['join'])) { $param['join'][] = $config['manage']['company']['join']; } if ($excel == true) { $method = $this->project . '/' . $this->table . '-list';//all } else { $method = $this->project . '/' . $this->table . '-list'; } //print_r($param); $data = Dever::load($method, $param); //print_r(Dever::sql());die; if (isset($config['manage']['list_type']) && $config['manage']['list_type'] == 'parent') { $parent = array(); $child = array(); foreach ($data as $k => $v) { if ($v[$config['name'] . '_id'] <= 0) { $parent[$k] = $v; } else { $v['name'] = '|-----' . $v['name']; $child[$v[$config['name'] . '_id']][$k] = $v; } } if ($parent) { $data = array(); foreach ($parent as $k => $v) { $data[$v['id']] = $v; if (isset($child[$v['id']])) { foreach ($child[$v['id']] as $i => $j) { $data[$j['id']] = $j; } } } } } elseif (isset($config['manage']['list_type']) && $config['manage']['list_type'] == 'tree') { $data = $this->tree($data, $config, -1); } if ($excel == true) { return $data; } if (Dever::input('page_type') == 1) { Dever::$global['manage']['list_data'] = $data; return; } //print_r($data);die; //print_r(Helper::page("current"));die; $this->manage_button = false; if ($data && isset($config['struct'])) { $i = 0; $pg = Dever::input('pg', 1); $cur = Dever::input('search_limit', 0); foreach ($data as $k => $v) { $data[$k] = $this->getAdminInfo($data[$k]); $data[$k]['i'] = $i; $ii = isset($num[$cur]) ? intval($num[$cur])*($pg-1) : 0; $data[$k]['r'] = $i+1+$ii; $result[$k] = ''; $return[$i] = array(); if (isset($config['manage']['mul']) && $config['manage']['mul']) { $mul_state = false; if ($config['manage']['mul'] && is_string($config['manage']['mul'])) { $mul_state = $this->value($config['manage']['mul'], $data[$k]); } else { $mul_state = true; } if ($mul_state) { $checkbox = ''; } else { $checkbox = ''; } $result[$k] .= ''.$checkbox.''; $return[$i]['checkbox'] = $checkbox; } foreach ($config['struct'] as $ki => $vi) { if (isset($data[$k][$ki])) { $data[$k]['cur_value'] = $data[$k][$ki]; } # 处理同步 # 兼容处理,之后删除 if (isset($vi['sync']) && (isset($vi['sync'][0]) && strpos($ki, '-'))) { $temp = explode('-', $ki); if ($v[$vi['sync'][0]] > 0) { $load = Dever::load($temp[0] . '/' . $temp[1] . '-one', array('option_' . $vi['sync'][1] => $v[$vi['sync'][0]])); } else { $lw = array('option_' . $vi['sync'][3] => $v[$vi['sync'][2]], 'option_' . $vi['sync'][4] => $v[$vi['sync'][0]]); $load = Dever::load($temp[0] . '/' . $temp[1] . '-one', $lw); } if (isset($temp[2])) { $data[$k][$ki] = $v[$ki] = isset($load[$temp[2]]) ? $load[$temp[2]] : $vi['default']; } } elseif (isset($vi['sync']) && (strstr($ki, '-') || strstr($ki, '.'))) { $vi['sync']['dever-read'] = $v; $v[$ki] = Dever::load($ki, $vi['sync']); if (!$v[$ki]) { $v[$ki] = $vi['default']; } $data[$k][$ki] = $v[$ki]; } if (isset($vi['list']) && $vi['list']) { if (empty($v[$ki])) { $v[$ki] = isset($vi['default']) ? $vi['default'] : ''; } # 处理权限 if (isset($vi['auth'])) { $auth = $this->value($vi['auth'], $data[$k]); if (!$auth) { continue; } } $show = $v[$ki]; if (is_string($vi['list'])) { $show = $this->value($vi['list'], $data[$k], $config['struct']); } if (isset($vi['key']) && $vi['update'] != 'editor') { $show = Dever::upload($show); } if (isset($vi['modal'])) { $show = Html::modal($this->value($vi['modal'], $data[$k], $config['struct']), $show); } elseif (isset($vi['option']) && !is_string($vi['list'])) { # 验证option是否是匿名函数 if ((isset($vi['edit']) && $vi['edit'])) { $vi['option'] = $this->option($vi['option'], $vi['edit']); } else { $vi['option'] = $this->option($vi['option']); } # 位运算 if (isset($vi['bit'])) { $ts = array(); foreach ($vi['option'] as $tm => $tv) { if (isset($vi['bit'][$tm]) && ($show & $tm) > 0) { $ts[] = $tv; } } $show = implode(',', $ts); } if ((isset($vi['child_name']) || (isset($vi['show']) && is_string($vi['show'])))) { if (isset($vi['option'][$show]) && is_array($vi['option'][$show])) { $show = $vi['option'][$show]['name']; } else { $show = isset($vi['option'][$show]) ? $vi['option'][$show] : $show; } } //elseif ($config['state'] == 1 && (isset($vi['edit']) && $vi['edit']) || $ki == 'status') elseif ($config['state'] == 1 && (isset($vi['edit']) && $vi['edit'])) { $vi['name'] = 'up_col_' . $ki; $vi['value'] = $v[$ki]; $m = 'select'; if (isset($vi['update']) && $vi['update'] == 'group') { $m = 'group'; } $show_edit = $this->value($vi['edit'], $data[$k], $config['struct']); if ($show_edit) { $show = Html::$m($vi, 'form-list', '', 'style="min-width: 100px;" data-old="'.$show.'" onchange="update($(this), \'' . $v['id'] . '\', \'' . $this->project . '\', \'' . $this->table . '\', \'\', \'' . $this->menu_id . '\')"'); } else { if (isset($vi['option'][$show]) && is_array($vi['option'][$show])) { $show = $vi['option'][$show]['name']; } else { $show = isset($vi['option'][$show]) ? $vi['option'][$show] : $show; } //$show = ''; } } else { if (strstr($show, ',')) { $temp = explode(',', $show); $t = array(); foreach ($temp as $vv) { if (isset($vi['option'][$vv]) && is_array($vi['option'][$vv])) { $t[] = $vi['option'][$vv]['name']; } elseif(isset($vi['option'][$vv])) { $t[] = $vi['option'][$vv]; } else { $t[] = $vv; } } $show = implode('
', $t); } elseif (isset($vi['option'][$show]) && is_array($vi['option'][$show])) { if (isset($vi['option'][$show]['style'])) { $vi['option'][$show]['name'] = '' . $vi['option'][$show]['name'] . ''; } $show = $vi['option'][$show]['name']; } else { $show = isset($vi['option'][$show]) ? $vi['option'][$show] : $show; } } } $text = $show; if ($high && isset($high[$ki])) { if (isset($v['s_' . $ki])) { $text = $v['s_' . $ki]; $text = str_replace('', '', $text); $text = str_replace('', '', $text); } elseif (strlen($high[$ki]) > 1) { $text = preg_replace('/('.$high[$ki].')/i', '${1}', $text, 1); } } if (!isset($vi['option']) && isset($vi['edit']) && $vi['edit']) { //$url = Dever::url($vi['edit'] . '?where_id=' . $v['id'] . '&col=' . $vi['col']. '&key=' . $this->project . '&table=' . $this->table); $url = $this->url('updateAction'); $vi['edit'] = $vi['edit'] == 'textarea' ? $vi['edit'] : 'text'; $text = ''.$text.''; $result[$k] .= '' . $text . ''; if (isset($return[$i][$ki])) { $text = $return[$i][$ki] . $text; } $return[$i][$ki] = $text; } else { $result[$k] .= '' . $text . ''; if (isset($return[$i][$ki])) { $text = $return[$i][$ki] . $text; } $return[$i][$ki] = $text; } if (isset($config['manage']['chart'])) { $this->chart($config['manage']['chart'], $ki, $return[$i][$ki], $vi); } } } $button = $this->list_tbody_button($config, $data[$k]); if ($button == '') { $button = str_replace('', ' ', $button); } $result[$k] .= $button; $return[$i]['manage'] = str_replace(array('', ''), '', $button); $result[$k] .= ''; $i++; } } if ($result) { $this->state = true; $result = implode('', $result); if (!$this->manage_button) { $result = str_replace(' ', '', $result); } } else { $result = ''; } if ($type) { return $return; } return $result; } private function list_tbody_button($config, $data, $type = 'td') { if (isset($data['cur_value'])) { unset($data['cur_value']); } $result = ''; $auth = Dever::load('manage/auth.oper', 3) != false || Dever::load('manage/auth.oper', 5) != false; if (isset($config['manage']['_list']['value']['list']) && isset($config['manage']['_list']['value']['list'][0]) && $config['manage']['_list']['value']['list'][0] == '查看详情') { $auth = true; } if ($auth && isset($config['manage']['_list']['value'])) { //if (isset($config['manage']['_list']['value'])) { $result = '<'.$type.'>'; if ($config['state'] == 2) { if (isset($config['manage']['_list']['value']['update'])) { unset($config['manage']['_list']['value']['update']); } if (isset($config['manage']['_list']['value']['delete'])) { $config['manage']['_list']['value']['delete'] = '恢复'; } } $suffix = ''; if (isset($config['manage']['link'])) { $suffix = $config['manage']['link']; } foreach ($config['manage']['_list']['value'] as $kj => $vj) { $pj = false; $h = ''; if (strstr($kj, 'new') || strstr($kj, 'location') || strstr($kj, 'list')) { $oper = true; } elseif ($kj == 'delete') { $oper = Dever::load('manage/auth.oper', 5); $h = ''; } else { $oper = Dever::load('manage/auth.oper', 3); } if (is_array($vj) && isset($vj[1])) { if (isset($vj[2])) { $oper = $this->value($vj[2], $data); } if ($oper && strpos($vj[1], 'modal|') === false) { $pj = $this->value($vj[1], $data); $vjn = $vj[0]; } } else { $vjn = $vj; } # 增加细分权限 if ($config && isset($config['manage']['auth']) && $config['manage']['auth'] && !Dever::load('manage/auth.check', $config['lang'] . '-' . $vjn, $this->menu_id)) { continue; } if ($oper == true) { $this->manage_button = true; if ($kj == 'delete') { $class = 'layui-btn layui-btn-danger'; } else { $class = 'layui-btn'; } if (layadmin()) { $class .= ' layui-btn-xs'; } if (strpos($kj, 'fast_list') !== false) { if (!isset($vj[3])) { $vj[3] = ''; } $result .= '  '; } elseif (strpos($kj, 'fast_add') !== false) { if (!isset($vj[3])) { $vj[3] = ''; } $result .= '  '; } elseif (strpos($kj, 'fast') !== false) { if (!isset($vj[3])) { $vj[3] = ''; } $result .= '  '; } elseif (strpos($kj, 'edits') !== false) { if (!isset($vj[1])) { $vj[1] = ''; } $result .= '  '; } elseif (strpos($kj, 'copy') !== false) { $vj[1] = $this->value($vj[1], $data); $vj[1] = Dever::load($vj[1]); $result .= '  '; } elseif (strpos($kj, 'edit') !== false) { if (!isset($vj[1])) { $vj[1] = ''; } if (strstr($vj[1], 'http')) { $url = $vj[1] . '&id=' . $data['id']; } else { $url = $this->url($kj, $data['id'], false, $suffix); } $result .= '  '; } elseif (strpos($kj, 'location') !== false) { if (!isset($vj[1])) { $vj[1] = ''; } if (strstr($vj[1], 'http')) { $url = $vj[1] . '&id=' . $data['id']; } else { $url = $this->url($kj, $data['id'], false, $suffix); } $result .= '  '; } elseif (strpos($kj, 'oper') !== false) { $content = ''; $title = ''; if (isset($vj[3])) { $content = $this->value($vj[3], $data); } if (isset($vj[4])) { $title = $vj[4]; } $url = Dever::url($pj) . '&manage_log=update.' . $this->project . '.' . $this->table . '&manage_oper=' . $vj[0]; $result .= '  '; } elseif (strpos($kj, 'new') !== false) { if (!isset($vj[1])) { $vj[1] = ''; } if (!isset($vj[2])) { $vj[2] = ''; } if (strstr($vj[1], 'http')) { $url = $vj[1] . '&id=' . $data['id']; } elseif($vj[2]) { $url = Dever::url($this->value($vj[1], $data), $vj[2]); } else { $url = $this->url($kj, $data['id'], false, $suffix); } $result .= '  '; } elseif (isset($vj[1]) && strpos($vj[1], 'modal|') !== false) { $t = explode('|', $vj[1]); $result .= '' . $vj[0] . '  '; } elseif (isset($vj[1]) || $kj == 'delete') { $result .= '  '; } elseif ($vj) { $result .= '' . $vj[0] . ''; } } } $result .= ''; } return $result; } /** * 多级分类 * * @return array */ private function tree($data, $config, $parent = 0) { $key = $config['name'] . '_id'; $result = array(); $this->treeData($data, $result, $key, $parent); return $result; } private function treeData($array, &$result, $key, $parent_id = 0, $level = 0) { if (empty($array)) { return; } $level++; foreach ($array as $k => $v) { if ((isset($v[$key]) && $v[$key] == $parent_id) || (isset($v['parent_id']) && $v['parent_id'] == $parent_id)) { $v['level'] = $level; $v['name'] = $this->treeName($v['name'], $level); $result[] = $v; unset($array[$k]); $this->treeData($array, $result, $key, $v['id'], $level); } } } private function treeName($name, $level = 1) { $string = ''; if ($level > 1) { /* $num = 4; $string = '-'; //STR_PAD_LEFT $string = str_pad('|', $level * $num, $string); */ $string = str_repeat(' ',$level-1); $string .= '|—'; } return $string . $name; } /** * 列表页批量管理 * * @return array */ public function list_mul() { # 新增权限:更新权限 if (Dever::load('manage/auth.oper', 3) == false) { return ''; } $config = $this->config(); $result = ''; if ($this->state && isset($config['struct']) && isset($config['manage']['mul']) && $config['manage']['mul']) { $mul = Dever::preInput('mul_'); $node = Html::node(array('class="am-u-sm-12" style="margin-top:10px;"', 'class="am-form-group am-input-group-sm"')); $btn = ''; $prefix = 'mul_'; $result .= $node[0]; $default = 0; $option = array ( 1 => '本页选中的数据', ); # 只有当有搜索条件时才会出现 if (Dever::load('manage/auth.oper', 2) && $this->search == true) { $option[2] = '所有页面的数据'; $default = 2; } $this->list_search_select($result, $mul, $prefix . 'type' . '" id="' . $prefix . 'type', '请选择要批量操作的数据', $option, $default); foreach ($config['struct'] as $k => $v) { if ($k == 'state' && (!isset($config['manage']['delete']) || (isset($config['manage']['delete']) && $config['manage']['delete']))) { $v['option'] = Dever::config('base')->state; if ($this->getState() == 2) { unset($v['option'][2]); } else { unset($v['option'][1]); } $v['edit'] = true; } $select = false; if (isset($v['mul'])) { $select = $v['mul']; } elseif (isset($v['edit'])) { $select = $v['edit']; } if ($select) { if (isset($v['mul_option']) && (is_array($v['mul_option']) || is_object($v['mul_option']))) { $result .= '  '; $this->list_search_select($result, $mul, $prefix . 'set_' . $k, $v['name'], $this->option($v['mul_option'], $select), $v['default']); } elseif (isset($v['option']) && (is_array($v['option']) || is_object($v['option']))) { $result .= '  '; $this->list_search_select($result, $mul, $prefix . 'set_' . $k, $v['name'], $this->option($v['option'], $select), $v['default']); } } } $result .= $btn . $node[1]; } //print_r($result);die; return $result; } private function value($value, $data, $struct = array()) { if (!$data) { return $value; } if (isset($data['cur_value'])) { if ($value == 'time') { return $data['cur_value'] ? date('Y-m-d H:i', $data['cur_value']) : '-'; } elseif (!strstr($value, 'Dever') && !strstr($value, '&') && !strstr($value, '
') && !strstr($value, '{') && (strstr($value, '/') || strstr($value, '.'))) { return $data['cur_value'] ? Dever::load($value, $data['cur_value']) : '-'; } } if (strstr($value, '={') && !strstr($value, '"')) { $value = '"' . $value . '"'; } if (is_string($data)) { $eval = '$value = ' . $value . ';'; eval($eval); return $value; } if ($value == 'table' && $struct) { $result = $this->struct_data($struct, $data); $value = Dever::table($result); } elseif (strpos($value, '{') !== false && strpos($value, '{"') === false) { # 这里用到了/e,注意这里无论如何不能传入$_GET之类的用户参数 2015/7/21更新为callback方式 //$eval = '$value = ' . preg_replace('/{(.*?)}/e', "\$data['$1']", $value) . ';'; $func = function ($r) use ($data) { if (isset($data[$r[1]])) { return $data[$r[1]]; } return false; }; $value = preg_replace_callback('/{(.*?)}/', $func, $value); if (strstr($value, '', '});', $value); } $eval = '$value = ' . $value . ';'; eval($eval); } return $value; } /** * update * * @return array */ public function update() { $config = $this->config(); $data = array(); if ($this->id) { # 新增权限 if (isset($config['manage']['list']) && $config['manage']['list'] == 'update') { $auth = 1; } else { $auth = 3; } if (Dever::load('manage/auth.oper', $auth) == false) { Dever::alert('你没有权限'); } $data = $this->load('one', $this->id); } else { # 新增权限 if (isset($config['manage']['list']) && $config['manage']['list'] == 'update') { $auth = 1; } else { $auth = 4; } if (Dever::load('manage/auth.oper', $auth) == false) { Dever::alert('你没有权限'); } } $data = $this->getAdminInfo($data); $col = Dever::input('col'); $result = $this->update_struct($config, $col, $data); //print_r($result);die; return $result; } public function update_content() { $config = $this->config(); $data = array(); if ($this->id) { # 新增权限 if (isset($config['manage']['list']) && $config['manage']['list'] == 'update') { $auth = 1; } else { $auth = 3; } if (Dever::load('manage/auth.oper', $auth) == false) { Dever::alert('你没有权限'); } $data = $this->load('one', $this->id); } else { # 新增权限 if (isset($config['manage']['list']) && $config['manage']['list'] == 'update') { $auth = 1; } else { $auth = 4; } if (Dever::load('manage/auth.oper', $auth) == false) { Dever::alert('你没有权限'); } } $data = $this->getAdminInfo($data); $col = Dever::input('col'); Dever::setInput('ajax', 1); $result = '
'; $desc = Dever::load('manage/database.info#updateDesc'); if ($desc) { if (is_object($desc)) { $function = $desc; $desc = $function(); } $result .= $desc; } if (isset($config['manage']['lang']) && $this->lang_set) { $result .= '
    '; $tab = '
    '; $i = 0; if ($col) { $col = explode(',', $col); $config['manage']['lang'] = explode(',', $config['manage']['lang']); $config['manage']['lang'] = array_intersect($config['manage']['lang'], $col); $config['manage']['lang'] = implode(',', $config['manage']['lang']); $col = implode(',', $col); } foreach (Dever::config('base')->lang_set as $k => $v) { if ($i == 0) { $prefix = ''; } else { $prefix = $k; $col = $config['manage']['lang']; //$prefix = 'l-l' . $k . 'l-l'; //$data = $this->load('one', $this->id, $this->table . '__' . $k); } if (isset($config['manage']['tab']) && $config['manage']['tab']) { $content = '
      '; $tab_content = '
      '; $j = 0; foreach ($config['manage']['tab'] as $k1 => $v1) { $html = $this->update_struct($config, $col, $data, $k1, $prefix); if ($html) { $class_0 = $class_1 = ''; if ($j == 0) { $class_0 = 'layui-this'; $class_1 = 'layui-show'; } $content .= '
    • '.$v1.'
    • '; $tab_content .= '
      '.$html.'
      '; $j++; } } $tab_content .= '
      '; $content .= '
    ' . $tab_content . '
    '; if ($content) { $class_0 = $class_1 = ''; if ($i == 0) { $class_0 = 'layui-this'; $class_1 = 'layui-show'; } $result .= '
  • '.$v.'
  • '; $tab .= '
    '.$content.'
    '; $i++; } } else { $content = $this->update_struct($config, $col, $data, -1, $prefix); if ($content) { $class_0 = $class_1 = ''; if ($i == 0) { $class_0 = 'layui-this'; $class_1 = 'layui-show'; } $result .= '
  • '.$v.'
  • '; $tab .= '
    '.$content.'
    '; $i++; } } } $tab .= '
    '; $result .= '
' . $tab . '
'; } elseif (isset($config['manage']['tab']) && $config['manage']['tab']) { $result .= '
    '; $tab = '
    '; $i = 0; foreach ($config['manage']['tab'] as $k => $v) { $content = $this->update_struct($config, $col, $data, $k); if ($content) { $class_0 = $class_1 = ''; if ($i == 0) { $class_0 = 'layui-this'; $class_1 = 'layui-show'; } $result .= '
  • '.$v.'
  • '; $tab .= '
    '.$content.'
    '; $i++; } } $tab .= '
    '; $result .= '
' . $tab . '
'; } else { $result .= $this->update_struct($config, $col, $data); } if (isset($this->card) && $this->card) { $result = str_replace('{style}', 'style="display:none"', $result); } $button = ''; if (Dever::input('fast') != 1) { $button = '
' . $this->update_button() . '
'; } else { if (isset($config['manage']['update_save']) && !$config['manage']['update_save']) { $button = ''; } } $result .= '
'.$button.'
'; //print_r($result);die; return $result; } public function update_struct($config, $col, $data, $tab = -1, $prefix = '', $layadmin = false, $show = true) { if (!$layadmin) { $layadmin = layadmin(); } $result = array(); $upload_call = ''; if (isset($config['manage']['upload'])) { $upload_call = $this->value($config['manage']['upload'], $data); } foreach ($config['struct'] as $k => $v) { if (isset($config['manage']['lang']) && $this->lang_set && isset($v['sync']) && (strstr($k, '-') || strstr($k, '.'))) { continue; } $state = false; if ($tab == 0) { if (!isset($v['tab']) || (isset($v['tab']) && $v['tab'] == $tab)) { $state = true; } } elseif ($tab > 0) { if (isset($v['tab']) && $v['tab'] == $tab) { $state = true; } } else { $state = true; } if (isset($v['update']) && $v['update'] && $state) { if ($col && !strstr(',' . $col . ',', ',' . $k . ',')) { continue; } //处理权限 if (isset($v['auth'])) { $auth = $this->value($v['auth'], $data); if (!$auth) { continue; } } $index = $k; if ($prefix && !strstr($k, '-')) { $k = $prefix . '_' . $k; } # 处理show模式下的class $class = $this->update_class($k, $v, '', $data); $result[$k] = '
'; $style = ''; if ($col && $v['update'] == 'hidden') { $style = 'style="display:none"'; } if ($v['update'] == 'sku') { $class = $class . ' layui-tab-card'; $style = 'style="padding: 10px;"'; } if ($layadmin) { $result[$k] = '
'; if (is_array($v['update'])) { $result[$k] = '
'; } } if (!$show) { $result[$k] = '
'; } if ($upload_call) { $v['upload_call'] = $upload_call . '&key=' . $k; } if (isset($config['manage']['sku']) && $v['update'] == 'sku') { $v['sku'] = $config['manage']['sku']; $v['data'] = $data; } $result[$k] .= $this->create_update_html($k, $v, $data, false, $prefix); if (!$show) { $result[$k] .= '
'; } else { $result[$k] .= '
'; } } elseif (!$col && isset($v['class'])) { # 分割线 $v['name'] = $this->value($v['name'], array('test' => 1)); if (isset($v['right'])) { $this->card_right = true; } $this->card = true; $result[$k] = Html::hr($v); } } if (Dever::input('ajax') == 1) { return implode('', $result); } return $result; } public function card() { if (isset($this->card_right)) { return 'layui-col-md6'; } return 'layui-col-md12'; } public function layui_card() { if (isset($this->card)) { return false; } return true; } /** * update_class * * @return string */ public function update_class($name, $param, $prefix = '', $data = array()) { $class = ''; $key = 'show'; if (isset($param[$key]) && $param[$key]) { $parent = array(); $child = array(); if (is_string($param[$key])) { parse_str($param[$key], $param[$key]); } if (is_array($param[$key])) { foreach ($param[$key] as $k => $v) { if ($k == 'no') { $child[$k . '_' . $v] = $key . '_no'; } elseif (strstr($v, '/')) { $parent[$k] = $key . '_' . $k; $k = $k . '_ajax'; $value = ''; if (isset($data[$name])) { $value = $data[$name]; } $v = str_replace('?', '?key='.$name.'&value='.$value.'&source='.$this->name.'&', $v); $child[$k] = $key . '_' . $k .'" dever-ajax="'.Dever::url($v).'"'; } else { if (strpos($v, ',')) { $temp = explode(',', $v); foreach ($temp as $v1) { $show = $k . '_' . $v1; if ($prefix) { $k = str_replace($name, $k, $prefix); $show = str_replace($name, $show, $prefix); } $parent[$k] = $key . '_' . $k; $child[$show] = $key . '_' . $show; } } else { $show = $k . '_' . $v; if ($prefix) { $k = str_replace($name, $k, $prefix); $show = str_replace($name, $show, $prefix); } $parent[$k] = $key . '_' . $k; $child[$show] = $key . '_' . $show; } } } } $class = implode(' ', $parent) . ' ' . implode(' ', $child); } if (isset($param['control'])) { $class .= ' ' . $key . '_input'; } if (isset($param['control_url'])) { $class .= ' control_url'; } return $class; } /** * update_html * * @return string */ public function create_update_html($key, $value, $data = array(), $index = false, $prefix = '') { $result = ''; $this->update_key($key, $value); $value['ext'] = $value['col'] = $key; $value['update'] = $value['update'] ? $value['update'] : 'text'; if (is_string($value['update']) && strpos($value['update'], 'copy.') !== false) { $value['value'] = $value['update']; $value['update'] = 'hidden'; } if (!$index) { $index = $key; } $this->update_html($value, $key, $index, $data, $result, $prefix); return $result; } private function update_key(&$key, &$value) { $value['source_key'] = $key; if (strstr($key, '/')) { if (strstr($key, '-')) { $temp = explode('-', $key); $value['api'] = $temp[0]; $value['method'] = $temp[1]; } else { $value['api'] = $key; } $key = str_replace('/', '--', $key); } } /** * update_html * * @return string */ public function update_html($param, $key, $index, $data, &$result, $prefix = '', $ext = 'update') { if (isset($param['match']) && $param['match'] != 'option') { if (is_string($param['match']) && strpos($param['match'], '/') !== false) { if (strstr($param['match'], 'option||')) { $param['valid'] = 'validate[custom[' . $key . ']]'; } else { $param['valid'] = 'validate[required,custom[' . $key . ']]'; } } else { $param['valid'] = 'validate[required]'; } } if (isset($param['name']) && $param['name'] && isset($param['update']) && $param['update'] != 'hidden' && $param['update'] != 'load') { $result .= Html::pageLeft($param); } if ($param['update']) { $order = true; # 名称带前缀 $param['name'] = $ext . '_' . $param['ext']; $param['index'] = $index; //$param['value'] = ''; # 得到当前的值 //if (isset($data[$index]) && !isset($param['value'])) { if (isset($data[$index])) { $param['value'] = $data[$index]; } # 得到下级的值 if (isset($param['child_value']) && isset($data['id'])) { $param['child_value'] = $this->value($param['child_value'], $data); } # 验证option是否是匿名函数 if (isset($param['option'])) { $param['option'] = $this->option($param['option']); } if (isset($data[$index]) && !isset($param['value']) && isset($param['key']) && $param['update'] != 'editor') { $param['value'] = Dever::upload($data[$index]); } # 处理下级字段 if (isset($param['child'])) { $param['child'] = $this->option($param['child']); if (isset($data[$key . '_parent'])) { $param['parent_value'] = $data[$key . '_parent']; } } # 设置默认值 if (isset($param['default'])) { $param['default'] = $this->option($param['default']); } # 处理关联数据 兼容处理,以后删除 if (isset($param['sync']) && isset($param['sync'][0]) && strpos($key, '-') && $param['update'] != 'load') { $temp = explode('-', $key); if (isset($data[$param['sync'][0]])) { if (isset($temp[2])) { $m = 'one'; } else { $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]], '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]], 'orders' => array('id' => 'asc'))); } if ($m == 'one') { $param['value'] = isset($load[$temp[2]]) ? $load[$temp[2]] : $param['default']; } else { $param['value'] = $load; } } if (!isset($temp[2]) && is_array($param['update'])) { $order = false; 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'])) { $param['prefix'] = $prefix; $param['tab_config'] = $config['manage']['tab']; if (isset($config['manage']['lang'])) { $param['lang'] = $config['manage']['lang']; } } //$param['value'] = Dever::db($temp[0] . '/' . $temp[1]); } } elseif (isset($param['sync']) && isset($param['api']) && $param['update'] != 'load') { $param['sync']['dever-read'] = $data; if (is_array($param['update'])) { $param['value'] = Dever::load($param['api'], $param['sync']); $order = false; 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($param['api'])->config; $param['update'] = $config['struct']; } if (isset($config['manage']['tab'])) { $param['prefix'] = $prefix; $param['tab_config'] = $config['manage']['tab']; if (isset($config['manage']['lang'])) { $param['lang'] = $config['manage']['lang']; } } } elseif (strstr($param['api'], '.')) { $param['value'] = Dever::load($param['api'], $param['sync']); } elseif (isset($param['method'])) { $param['value'] = Dever::load($param['api'] . '-' . $param['method'], $param['sync']); } } $method = $param['update']; if (is_array($method)) { $c = ''; if (layadmin()) { $c = 'layui-tab-title'; } $delete = true; if (isset($param['update_type']) && $param['update_type'] == 2) { $table = ''; $table .= ''; $table_header = ''; $table_body = ''; $table_key = ''; if (isset($param['option'])) { $param['value'] = $param['value'] + $param['option']; $table_key = '1'; if (isset($param['value']) && $param['value']) { $table_body .= ''; $table_up = 'dever_up'; } else { $table_body .= ''; $table_up = 'update'; } } else { $table_body .= ''; $table_key = '-1'; $table_up = 'dever_up'; } if ($table_key) { foreach ($param['update'] as $hk => $hv) { if (isset($hv['col'])) { $hk = $hv['col']; } $this->update_key($hk, $hv); if ($this->id && $hk === 'id') { $hv['update'] = 'hidden'; } if (isset($hv['update']) && $hv['update'] && (!isset($hv['tab']) || (isset($hv['tab']) && $hv['tab'] <= 0))) { $n = $hv['name']; unset($hv['name']); $s = ''; $hv['ext'] = $param['name'] . '_c_'.$table_key.'_i_' . $hk; if ($hv['update'] == 'linkage') { $hv['update_width'] = '30%'; } $this->update_html($hv, $hk, $hk, array(), $s, '', $table_up); if ($hv['update'] == 'hidden') { $table_header .= ''; $table_body .= ''; } else { $table_header .= ''; $table_body .= ''; } } } if ($table_key == '-1') { $table_header .= ''; $table_body .= ''; } $table_body .= ''; } $total = array(); if (isset($param['value']) && $param['value']) { if (!is_array($param['value'])) { $param['value'] = Dever::json_decode($param['value']); } foreach ($param['value'] as $bk => $bv) { $table_body .= ''; foreach ($param['update'] as $hk => $hv) { if (isset($hv['col'])) { $hk = $hv['col']; } $this->update_key($hk, $hv); if ($this->id && $hk === 'id') { $hv['update'] = 'hidden'; } if (isset($hv['update']) && $hv['update'] && (!isset($hv['tab']) || (isset($hv['tab']) && $hv['tab'] <= 0))) { unset($hv['name']); $s = ''; $hv['ext'] = $param['name'] . '_c_' . $bk . '_i_' . $hk; if ($hv['update'] == 'linkage') { $hv['update_width'] = '30%'; } $hv = $this->update_html($hv, $hk, $hk, $bv, $s); if (isset($param['update_show']) && $param['update_show'] && is_array($param['update_show'])) { if (isset($param['update_show'][$hv['source_key']])) { if (!isset($total[$hv['source_key']])) { $total[$hv['source_key']] = array($hv['desc'], $param['update_show'][$hv['source_key']], 0); } $total[$hv['source_key']][2] += $hv['value']; } } if ($hv['update'] == 'hidden') { $table_body .= ''; } else { $table_body .= ''; } } } if ($table_key == '-1') { if (isset($param['api'])) { $del_table = $param['api']; $del_id = Dever::encode($bv['id']); $table_body .= ''; } else { $table_body .= ''; } } $table_body .= ''; } } else { if (isset($param['update_show']) && $param['update_show'] && is_array($param['update_show'])) { foreach ($param['update_show'] as $uk => $uv) { if (isset($param['update'][$uk])) { if (!isset($total[$uk])) { $total[$uk] = array($param['update'][$uk]['desc'], $uv, 0); } } } } } $table_body .= ''; $table_header .= ''; $table .= $table_body . $table_header; $table .= '
'.$s.''.$s.'删除删除
'; $result .= $table; if ($total) { $result .= '
'; foreach ($total as $k => $v) { $result .= ''.$v[0].':'.$v[2].'    '; } $result .= '
'; } } elseif (isset($param['update_type']) && $param['update_type'] == 3) { $table = ''; $table .= ''; $table_header = ''; $table_body = ''; $table_body .= ''; foreach ($param['update'] as $hk => $hv) { if (isset($hv['col'])) { $hk = $hv['col']; } $this->update_key($hk, $hv); if ($this->id && $hk === 'id') { $hv['update'] = 'hidden'; } if (isset($hv['update']) && $hv['update'] && (!isset($hv['tab']) || (isset($hv['tab']) && $hv['tab'] <= 0))) { $n = $hv['name']; unset($hv['name']); $s = ''; $hv['ext'] = $param['name'] . '_c_-1_i_' . $hk; if ($hv['update'] == 'linkage') { $hv['update_width'] = '30%'; } $this->update_html($hv, $hk, $hk, array(), $s, '', 'dever_up'); if ($hv['update'] == 'hidden') { $table_header .= ''; $table_body .= ''; } else { $table_header .= ''; $table_body .= ''; } } } $table_body .= ''; if (isset($param['value']) && $param['value']) { if (!is_array($param['value'])) { $param['value'] = Dever::json_decode($param['value']); } foreach ($param['value'] as $bk => $bv) { $table_body .= ''; foreach ($param['update'] as $hk => $hv) { if (isset($hv['col'])) { $hk = $hv['col']; } $this->update_key($hk, $hv); if ($this->id && $hk === 'id') { $hv['update'] = 'hidden'; } if (isset($hv['update']) && $hv['update'] && (!isset($hv['tab']) || (isset($hv['tab']) && $hv['tab'] <= 0))) { unset($hv['name']); $s = ''; $hv['ext'] = $param['name'] . '_c_' . $bk . '_i_' . $hk; if ($hv['update'] == 'linkage') { $hv['update_width'] = '30%'; } if ($hv['update'] != 'hidden') { $hv['update_type'] = $hv['update']; $hv['update'] = 'show'; } $this->update_html($hv, $hk, $hk, $bv, $s); if ($hv['update'] == 'hidden') { $table_body .= ''; } else { $table_body .= ''; } } } $table_body .= ''; } } $table_body .= ''; $table_header .= ''; $table .= $table_body . $table_header; $table .= '
'.$s.''.$s.'
'; $result .= $table; } else { if (isset($param['option'])) { $delete = false; $result .= ''; $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['value']) && $param['value']) { $value = $param['value']; if (!is_array($value)) { $value = Dever::json_decode($value); } $param['value'] = array(); if (!$value) { foreach ($param['option'] as $k => $v) { if (isset($v['name'])) { $v = $v['name']; } $param['value'][$v]['main_' . $key] = $k; } } else { foreach ($param['option'] as $k => $v) { if (isset($v['name'])) { $v = $v['name']; } foreach ($value[$k] as $k1 => $v1) { $param['value'][$v][$k1] = $v1; } /* 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]['main_' . $key] = $k; } } } else { $result .= ''; if ($order) { $order = array ( 'col' => 'order', 'name' => '排序-按照数字正序排列', 'default' => '1', 'desc' => '排序', 'match' => 'is_string', 'update' => 'text', ); array_unshift($method, $order); } } $tab = ''; $this->update_child(array(), $method, $key, $result, -1, $param, $delete); if (isset($param['value']) && $param['value']) { if (!is_array($param['value'])) { $param['value'] = Dever::array_decode($param['value']); } //print_r($param['value']);die; 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) { } else { $tab .= '
  • '.$n.'
  • '; $i++; } } } } else { $this->update_child(array(), $method, $key, $result, 0, $param, $delete); $tab = '
  • 第1条
  • '; } if ($tab) { $result = str_replace('{tab}', $tab, $result); } else { $result = str_replace('', '', $result); } } } else { if (isset($param['update_input']) && isset($data[$index . '_input'])) { $param['update_input_data'] = explode(',', $data[$index . '_input']); } $param['project'] = $this->project; $param['table'] = $this->table; if (isset($param['upload_search'])) { $param['upload_search'] = $this->value($param['upload_search'], $data + $param); } if (isset($param['upload_search_value'])) { $param['upload_search_value'] = $this->value($param['upload_search_value'], $data + $param); } if (isset($param['update_search_value'])) { $param['update_search_value'] = $this->value($param['update_search_value'], $data + $param); } $param['where_id'] = $this->id; $result .= Html::$method($param); } if (isset($param['desc']) && ($param['update'] == 'text' || $param['update'] == 'password')) { $result .= Html::desc($param['desc']); } } return $param; } /** * update_action * * @return array */ private function update_child($data, $param, $key, &$result, $index, $config, $delete = true) { if (isset($config['tab_config']) && $config['tab_config']) { if ($index != 0) { $style = 'display:none;'; } else { $style = ''; } $result .= '
    '; if ($delete) { $result .= '
    [删除]
      '; } else { $result .= '
        '; } $tab = '
        '; $i = 0; foreach ($config['tab_config'] as $k => $v) { $content = $this->update_child_data($data, $param, $key, $index, $k, $config); if ($content) { $class_0 = $class_1 = ''; if ($i == 0) { $class_0 = 'layui-this'; $class_1 = 'layui-show'; } $result .= '
      • '.$v.'
      • '; $tab .= '
        '.$content.'
        '; $i++; } } $tab .= '
        '; $result .= '
      ' . $tab . '
    '; } else { $style = 'margin:10px;'; if ($index != 0) { $style = 'display:none;margin:10px;'; } $result .= '
    '; if ($delete) { $result .= '
    [删除]
    '; } $result .= $content = $this->update_child_data($data, $param, $key, $index, 0, $config); $result .= '
    '; } } private function update_child_data($data, $param, $key, $index, $tab = -1, $config = array()) { $result = ''; foreach ($param as $k => $v) { if (is_string($k)) { $v['col'] = $k; } if ($this->id && $v['col'] == 'id') { $v['update'] = 'hidden'; } if (!isset($v['update'])) { continue; } if (isset($config['prefix']) && $config['prefix']) { if (isset($config['lang']) && $config['lang'] && !in_array($v['col'], $config['lang'])) { continue; } $v['col'] = $config['prefix'] . '_' . $v['col']; } $state = false; if ($tab == 0) { if (!isset($v['tab']) || (isset($v['tab']) && $v['tab'] == $tab)) { $state = true; } } elseif ($tab > 0) { if (isset($v['tab']) && $v['tab'] == $tab) { $state = true; } } else { $state = true; } if (isset($v['update']) && $v['update'] && $state) { $v['type'] = $v['update']; $prefix = ''; if ($index < 0) { $v['ext'] = $key . '_c_' . $v['col']; $prefix = $v['ext']; } else { $v['ext'] = $key . '_c_' . $index . '_i_' . $v['col']; $prefix = $v['ext']; } if ($v['col'] == 'order') { $v['default'] = $index+1; } $class = $this->update_class($v['col'], $v, $prefix); if ($v['update'] == 'hidden') { $result .= ''; } else { $result .= '
    '; $this->update_html($v, $key, $v['col'], $data, $result); $result .= '
    '; } } } return $result; } /** * update_action * * @return array */ public function update_action_commit_api() { $key = Dever::input('dever_submit_key'); $col = Dever::input('col'); $value = Dever::input('value'); if ($key) { Dever::submit_check($key, false, true); } $method = false; $config = $this->config(); $input = Dever::preInput('update_'); $info = array(); if ($this->id) { # 新增权限 if (isset($config['manage']['list']) && $config['manage']['list'] == 'update') { $auth = 1; } else { $auth = 3; } if (Dever::load('manage/auth.oper', $auth) == false) { Dever::alert('你没有权限'); } Dever::setInput('where_id', $this->id); //Dever::setInput('update_where_id', $this->id); $info = $this->load('one', $this->id); if ($info) { $method = 'update'; if ($col && $value) { $method = 'update_' . $col; //Dever::setInput('set_' . $col, $value); //Dever::setInput('update_' . $col, $value); $param['where_id'] = $this->id; $param['set_' . $col] = $value; $this->load($method, $param); $struct = $this->struct_data($config['struct'], array($col => $value)); Log::add($this->project, $this->table, $this->menu_id, '', $method, $struct, $this->id); Dever::out('yes'); return; } $prefix = 'set'; } else { $method = 'insert'; $prefix = 'add'; } } if (!$method) { # 新增权限 if (isset($config['manage']['list']) && $config['manage']['list'] == 'update') { $auth = 1; } else { $auth = 4; } if (Dever::load('manage/auth.oper', $auth) == false) { Dever::alert('你没有权限'); } $method = 'insert'; $prefix = 'add'; } if ($method && $input) { $update = $order = $update_other = array(); $i = 0; $c = array(); foreach ($input as $k => $v) { if ($v === '') { $v = 'null'; } if ($v && is_string($v) && strpos($v, 'copy.') !== false) { $temp = str_replace('copy.', '', $v); if (isset($input['update_' . $temp])) { $v = $input['update_' . $temp]; } } if (strpos($k, '_c_') !== false) { if (strstr($k, 'update_update_')) { $k = str_replace('update_update_', 'update_', $k); } if ($v == 'null') { $v = ''; } $temp = explode('_c_', $k); $h = $temp[0]; $k = str_replace('update_', $prefix . '_', $h); if (!isset($c[$k])) { $c[$k] = array(); } if (strpos($temp[1], '_i_') !== false) { $temp = explode('_i_', $temp[1]); if (!isset($c[$k][$temp[1]])) { $c[$k][$temp[1]] = 0; } else { $c[$k][$temp[1]]++; } $num = $c[$k][$temp[1]]; if (strpos($h, '-')) { $h = str_replace('update_', '', $h); $h = str_replace('--', '/', $h); # 兼容处理 之后删除 if (isset($config['struct'][$h]) && isset($config['struct'][$h]['sync']) && isset($config['struct'][$h]['sync'][0])) { $s_col = $config['struct'][$h]['sync'][0]; $m_col = $config['struct'][$h]['sync'][1]; if ($s_col == 'id') { $s_value = $this->id; } elseif (isset($info[$s_col])) { $s_value = $info[$s_col]; } else { $s_value = $input['update_' . $s_col]; } $t = explode('-', $h); $index = $t[0] . '/' . $t[1]; if (Dever::zero($v)) { $v = (string) $v; } elseif (!$v) { $v = 'null'; } $update_col[$i][$index] = $m_col; $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; } } elseif (isset($config['struct'][$h]) && isset($config['struct'][$h]['sync'])) { $t = explode('-', $h); $index = $t[0]; if (Dever::zero($v)) { $v = (string) $v; } elseif (!$v) { $v = 'null'; } $update_set[$i][$index][$num]['set_' . $temp[1]] = $v; $update_add[$i][$index][$num]['add_' . $temp[1]] = $v; if ($this->id && $temp[1] == 'id') { $update_id[$i][$index][$num]['id'] = $v; } foreach ($config['struct'][$h]['sync'] as $ks => $vs) { if ($vs == 'id') { $vs = $this->id; $update_col[$i][$index] = $ks; } elseif (isset($info[$vs])) { $vs = $info[$vs]; } elseif (isset($input['update_' . $vs])) { $vs = $input['update_' . $vs]; } $update_add[$i][$index][$num]['add_' . $ks] = $vs; $update_deletes[$i][$index][$ks] = $vs; $update_id[$i][$index][$num][$ks] = $vs; } } } else { $update[$i][$k][$num][$temp[1]] = $v; if ($temp[1] == 'order') { $order[$i][$k][$num] = $v; } } } else { //$update[$i][$k][$c][$temp[1]] = $v; } } elseif (strpos($k, '__') !== false) { $temp1 = explode('__', $k); $temp2 = explode('_', $temp1[0]); $i = $temp2[1] - 1; if (strpos($k, 'where_id') !== false) { //$update[$i]['where_id'] = $v; } else { $update[$i]['add_' . $temp1[1]] = $v; } } else { $ki = str_replace('update_', $prefix . '_', $k); if (strpos($ki, 'where_id') !== false) { if ($method != 'insert') { $update[$i]['where_id'] = $v; } } else { if (strpos($k, 'l-l')) { $temp = explode('l-l', $k); $k = str_replace('_', '', $temp[2]); $update_other[$i][$temp[1]][$k] = $v; } elseif (strpos($k, '-') && isset($config['struct'][$k]['sync'][0])) { # 兼容处理,之后删除 $k = str_replace('update_', '', $k); 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; } elseif (isset($info[$s_col])) { $s_value = $info[$s_col]; } else { $s_value = $input['update_' . $s_col]; } $temp = explode('-', $k); $index = $temp[0] . '/' . $temp[1]; if (isset($temp[2])) { $update_col[$i][$index] = $m_col; $update_set[$i][$index][0]['set_' . $temp[2]] = $v; //$update_set[$i][$index][0]['set_' . $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; } } 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; } elseif (isset($info[$s_col])) { $s_value = $info[$s_col]; } else { $s_value = $input['update_' . $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; } } } } elseif (strpos($k, '#')) { $k = str_replace('update_', '', $k); $k = str_replace('--', '/', $k); # 此处需要改造 --- if (isset($config['struct'][$k]) && isset($config['struct'][$k]['sync'])) { $temp = explode('-', $k); $index = $temp[0]; $temp = explode('#', $temp[1]); $c_col = $temp[1]; $update_set[$i][$index][0]['set_' . $c_col] = $v; $update_add[$i][$index][0]['add_' . $c_col] = $v; foreach ($config['struct'][$k]['sync'] as $ks => $vs) { if ($vs == 'id') { $vs = $this->id; $update_col[$i][$index] = $ks; } elseif (isset($info[$vs])) { $vs = $info[$vs]; } elseif (isset($input['update_' . $vs])) { $vs = $input['update_' . $vs]; } $update_add[$i][$index][0]['add_' . $ks] = $vs; $update_id[$i][$index][0][$ks] = $vs; } } else { $temp = explode('-', $k); $k = $index = $temp[0]; $temp = explode('#', $temp[1]); $c_col = $temp[1]; if (isset($config['struct'][$k]) && isset($config['struct'][$k]['sync'])) { $c_col = ltrim($c_col, '_'); $temp = explode('_', $c_col); $up = array(); $up['add_' . $temp[0] . '_id'] = $temp[1]; $up['add_' . $temp[0] . '_value'] = $v; foreach ($config['struct'][$k]['sync'] as $ks => $vs) { if ($vs == 'id') { $vs = $this->id; $update_col[$i][$index] = $ks; } elseif (isset($info[$vs])) { $vs = $info[$vs]; } elseif (isset($input['update_' . $vs])) { $vs = $input['update_' . $vs]; } $up['add_' . $ks] = $vs; $update_delete[$i][$index][][$ks] = $vs; } $update_add[$i][$index][] = $up; } } } else { if (is_array($v)) { $k = str_replace('update_', '', $k); $kd = $k . '_id'; if (isset($config['struct'][$kd])) { foreach ($v as $vk => $vt) { if ($vt == -1) { if ($vk != 0) { unset($v[$vk]); } } } if ($v) { $vd = end($v); $kdi = $prefix . '_' . $kd; $update[$i][$kdi] = $vd; } } if (isset($config['struct'][$k]) && strpos($config['struct'][$k]['type'], 'int') !== false) { $v = end($v); } } $update[$i][$ki] = $v; } } } } //print_r($update_col); //print_r($update_set); //print_r($update_id); //print_r($update_add);die; //print_r($input); //print_r($update_other);die; //print_r($config['struct']);die; $this->checkSpec($config); # 增加复制的数量 $copy_num = Dever::input('copy_num'); if ($copy_num > 0) { $update[0]['where_id'] = 0; for ($i = 1; $i < $copy_num; $i++) { $update[$i] = $update[0]; # 缓存处理 $update[$i]['rank'] = $i; } } if ($this->id && !$info) { $update[0]['add_id'] = $this->id; } //print_r($update);die; $fast = Dever::input('fast'); foreach ($update as $k => $v) { $method = 'insert'; $old = array(); if (isset($v['where_id']) && $v['where_id']) { $method = 'update'; $old = $this->load('one', $v['where_id']); } if ($method == 'insert' && isset($config['manage']['insert_check'])) { $insert_check = explode(',', $config['manage']['insert_check']); foreach ($insert_check as $k1 => $v1) { if (strstr($v1, '-')) { $t = explode('-', $v1); $v1 = $t[0] . '/' . $t[1]; } if (isset($config['struct'][$v1])) { if (strstr($v1, '/') && !isset($update_id[$k][$v1])) { Dever::alert($config['struct'][$v1]['name'] . '不能为空'); } elseif (isset($v['add_' . $v1]) && is_string($v['add_' . $v1]) && (!$v['add_' . $v1] || $v['add_' . $v1] == 'null')) { Dever::alert($config['struct'][$v1]['name'] . '不能为空'); } } } } if ($method == 'update' && isset($config['manage']['update_check'])) { $update_check = explode(',', $config['manage']['update_check']); foreach ($update_check as $k1 => $v1) { if (strstr($v1, '-')) { $t = explode('-', $v1); $v1 = $t[0] . '/' . $t[1]; } if (isset($config['struct'][$v1])) { if (strstr($v1, '/') && !isset($update_id[$k][$v1])) { Dever::alert($config['struct'][$v1]['name'] . '不能为空'); } elseif (isset($v['set_' . $v1]) && is_string($v['set_' . $v1]) && (!$v['set_' . $v1] || $v['set_' . $v1] == 'null')) { Dever::alert($config['struct'][$v1]['name'] . '不能为空'); } } } } if (isset($order[$k])) { foreach ($order[$k] as $i => $j) { array_multisort($j, SORT_ASC, $v[$i]); } } if (isset($v['set_password']) && (!$v['set_password'] || $v['set_password'] == 'null')) { unset($v['set_password']); } $id = $this->load($method, $v); if ($id) { $struct = $this->struct_data($config['struct'], $v, $old); Log::add($this->project, $this->table, $this->menu_id, '', $method, $struct, $id ? $id : $this->id); if ($update_other && isset($update_other[$k])) { foreach ($update_other[$k] as $k1 => $v1) { $v1['id'] = $id; $this->load($method, $v1, $this->table . '__' . $k1); } } 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 = isset($update_col[$k][$k1]) ? $update_col[$k][$k1] : false; foreach ($v1 as $k2 => $v2) { if ($col) { if (isset($update_set[$k][$k1][$k2]['set_' . $col])) { $update_set[$k][$k1][$k2]['set_' . $col] = $id; } if (isset($v2['add_' . $col])) { $v2['add_' . $col] = $id; } } $check = false; if (isset($update_id[$k][$k1][$k2])) { if ($col && 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) { 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); } } } } $this->spec($id, $config); if ($method == 'insert' && isset($config['manage']['insert_end'])) { Dever::load($config['manage']['insert_end'], $id); } if ($method == 'update' && isset($config['manage']['update_end'])) { Dever::load($config['manage']['update_end'], $id); } } } } Dever::out('yes'); } private function checkSpec($config) { $type = Dever::input('update_type'); if ($type && isset($type[0]) && $type[0] > 10) { //Dever::setInput('update_spec_type', -1); return; } $spec_type = Dever::input('update_spec_type'); if ($spec_type == 1) { $sku = Dever::input('skus'); if (!isset($sku[-1])) { Dever::alert('规格设置不能为空'); } if (!$sku[-1]['code']) { Dever::alert('规格设置不能为空'); } } elseif ($spec_type == 2) { $spec = Dever::input('spec'); if (!$spec) { Dever::alert('规格设置不能为空'); } } } private function spec($id, $config) { $spec_type = Dever::input('update_spec_type'); if ($spec_type && $spec_type > 0) { if (isset($config['manage']['sku'])) { $spec_table = $config['manage']['sku']['spec']; $sku_table = $config['manage']['sku']['sku']; } if (!isset($sku_table)) { $sku_table = 'info_sku'; } $sku_table = $this->project . '/' . $sku_table; if ($spec_type == 2) { $spec = Dever::input('spec'); $sku = Dever::input('skus'); if ($spec && $sku) { if (!isset($spec_table)) { $spec_table = 'info_spec'; } $spec_table = $this->project . '/' . $spec_table; $spec_value_table = $spec_table . '_value'; $spec = Dever::json_decode($spec); if ($spec) { $sku_id = array(); Dever::db($spec_table)->updates(array('option_info_id' => $id, 'set_state' => 2)); Dever::db($spec_value_table)->updates(array('option_info_id' => $id, 'set_state' => 2)); foreach ($spec as $k1 => $v1) { $order = $k1 + 1; if (is_numeric($v1['id'])) { $spec_id = Dever::db($spec_table)->update(array('where_id' => $v1['id'], 'set_state' => 1, 'set_reorder' => $order)); } else { $spec_id = Dever::db($spec_table)->insert(array('name' => $v1['title'], 'info_id' => $id, 'reorder' => $order)); } foreach ($v1['child'] as $k2 => $v2) { $v2['checked'] = $v2['checked'] ? 1 : 2; if (is_numeric($v2['id'])) { Dever::db($spec_value_table)->update(array('where_id' => $v2['id'], 'set_state' => 1, 'set_is_checked' => $v2['checked'])); } else { $sku_id[$v2['id']] = Dever::db($spec_value_table)->insert(array('value' => $v2['title'], 'is_checked' => $v2['checked'], 'info_id' => $id, 'spec_id' => $spec_id)); } } } Dever::db($spec_table)->delete(array('info_id' => $id, 'state' => 2)); Dever::db($spec_value_table)->delete(array('info_id' => $id, 'state' => 2)); $this->sku($id, $sku_table, $sku, $sku_id); } } } else { $sku = Dever::input('skus'); if ($sku) { $this->sku($id, $sku_table, $sku); //Dever::db($spec_table)->delete(array('info_id' => $id)); //Dever::db($spec_value_table)->delete(array('info_id' => $id)); } } } } private function sku($id, $sku_table, $sku, $sku_id = false) { Dever::db($sku_table)->updates(array('option_info_id' => $id, 'set_state' => 2)); foreach ($sku as $k1 => $v1) { if ($sku_id) { foreach ($sku_id as $k2 => $v2) { $k1 = str_replace($k2, $v2, $k1); } } $sku_data = array(); $sku_data['info_id'] = $id; $sku_data['key'] = $k1; $sku_info = Dever::db($sku_table)->one($sku_data); foreach ($v1 as $k3 => $v3) { $sku_data[$k3] = $v3; } if ($sku_info) { $sku_data['where_id'] = $sku_info['id']; $sku_data['state'] = 1; Dever::db($sku_table)->update($sku_data); } else { Dever::db($sku_table)->insert($sku_data); } } Dever::db($sku_table)->delete(array('info_id' => $id, 'state' => 2)); } public function struct_data($struct, $data, $old = array()) { $log = $tlog = array(); foreach ($struct as $i => $j) { if (isset($data[$i])) { $data['cur_value'] = $data[$i]; } /* if ($i == 'reorder' || $i == 'id') { continue; } */ if (isset($j['list_name'])) { $j['name'] = $j['list_name']; } elseif (strpos($j['name'], '-')) { $temp = explode('-', $j['name']); $j['name'] = $temp[0]; } if (isset($j['list_table'])) { $j['list'] = $j['list_table']; if ($j['list'] == false) { $data[$i] = false; } } $list = (isset($j['list']) && is_string($j['list']) && $j['list'] != 'table'); $update = true; if ($old && isset($j['update'])) { $update = (is_string($j['update']) && $j['update'] != 'linkage'); } if (isset($data['where_' . $i]) && $data['where_' . $i]) { $log[$j['name']] = $data['where_' . $i]; } elseif (isset($data['set_' . $i]) && $data['set_' . $i]) { $log[$j['name']] = $data['set_' . $i]; } elseif (isset($data['add_' . $i]) && $data['add_' . $i]) { $log[$j['name']] = $data['add_' . $i]; } elseif (isset($data[$i]) && $data[$i]) { if ($i == 'id') { $log[$j['name']] = $data[$i]; } else { $log[$j['name']] = $list ? $this->value($j['list'], $data) : $data[$i]; } } if (isset($log[$j['name']])) { $tlog[$j['name']] = $log[$j['name']]; if (is_array($tlog[$j['name']])) { if (isset($tlog[$j['name']][0]) && is_array($tlog[$j['name']][0])) { $tlog[$j['name']] = json_encode($tlog[$j['name']]); if (isset($old[$i]) && is_array($old[$i])) { $old[$i] = json_encode($old[$i]); } } elseif (isset($tlog[$j['name']][0])) { $tlog[$j['name']] = implode(',', $tlog[$j['name']]); if (isset($old[$i]) && is_array($old[$i])) { $old[$i] = implode(',', $old[$i]); } } } elseif (strpos($log[$j['name']], 'http://wx.qlogo.cn/') !== false || strpos($log[$j['name']], '.jpg') !== false || strpos($log[$j['name']], '.gif') !== false || strpos($log[$j['name']], '.png') !== false) { $log[$j['name']] = ''; if (isset($old[$i]) && $old[$i]) { $old[$i] = Dever::pic($old[$i]); $old[$i] = ''; } } elseif (is_numeric($log[$j['name']]) && (strpos($i, 'time') !== false || strpos($i, 'date') !== false)) { if (!strstr($log[$j['name']], '-')) { $log[$j['name']] = date("Y-m-d H:i:s", $log[$j['name']]); } if (isset($old[$i]) && $old[$i]) { $old[$i] = date("Y-m-d H:i:s", $old[$i]); } } elseif (is_numeric($log[$j['name']]) && (strpos($i, 'day') !== false)) { if (!strstr($log[$j['name']], '-')) { $log[$j['name']] = date("Y-m-d", $log[$j['name']]); } if (isset($old[$i]) && $old[$i]) { $old[$i] = date("Y-m-d", $old[$i]); } } elseif (is_numeric($log[$j['name']]) && (strpos($i, 'month') !== false)) { if (!strstr($log[$j['name']], '-')) { $log[$j['name']] = date("Y-m", $log[$j['name']]); } if (isset($old[$i]) && $old[$i]) { $old[$i] = date("Y-m", $old[$i]); } } elseif (isset($j['decode'])) { $log[$j['name']] = Dever::array_decode($log[$j['name']]); if (isset($old[$i]) && $old[$i]) { $old[$i] = Dever::array_decode($old[$i]); } } if (isset($j['option']) && !$list && $update) { $name = array(); $old_name = array(); $option = $this->option($j['option']); if (is_array($option)) { foreach ($option as $a => $b) { if (!is_array($log[$j['name']])) { if ($a == $log[$j['name']]) { $name[] = (is_array($b) && isset($b['name'])) ? $b['name'] : $b; } } elseif (in_array($a, $log[$j['name']])) { $name[] = (is_array($b) && isset($b['name'])) ? $b['name'] : $b; } if ($old && isset($old[$i])) { if (!is_array($old[$i])) { if ($a == $old[$i]) { $old_name[] = (is_array($b) && isset($b['name'])) ? $b['name'] : $b; } } elseif (in_array($a, $old[$i])) { $old_name[] = (is_array($b) && isset($b['name'])) ? $b['name'] : $b; } } } } $log[$j['name']] = implode(',', $name); if ($old_name) { $old[$i] = implode(',', $old_name); } } if ($log[$j['name']] == 'null') { unset($log[$j['name']]); } if ($old && strstr($i, 'area')) { $old[$i] = Dever::load('area/api')->string($old[$i]); if (isset($log[$j['name']]) && $log[$j['name']]) { $log[$j['name']] = Dever::load('area/api')->string($log[$j['name']]); } } if (isset($log[$j['name']]) && isset($old[$i]) && $old[$i] != $tlog[$j['name']] && $old[$i] != $log[$j['name']]) { $log[$j['name']] = array('更新前' => $old[$i], '更新后' => $log[$j['name']]); } elseif ($old) { //unset($log[$j['name']]); } } } return $log; } /** * delete_action * * @return array */ public function delete_action_api() { if (Dever::load('manage/auth.oper', 5) == false) { Dever::alert('您没有权限'); } $config = $this->config(); if (isset($config['struct']['state']) && (!isset($config['manage']['delete']) || (isset($config['manage']['delete']) && $config['manage']['delete']))) { $name = '逻辑删除'; $this->load('update', array('where_id' => $this->id, 'state' => 2)); } else { $name = '物理删除'; $this->load('delete', $this->id); } Log::add($this->project, $this->table, $this->menu_id, '', 3, array('ID' => $this->id, '方式' => $name), $this->id); return 'reload'; return 'reloaderror'; } /** * recovery_action * * @return array */ public function recovery_action_api() { if (Dever::load('manage/auth.oper', 5) == false) { Dever::alert('您没有权限'); } $this->load('update', array('where_id' => $this->id, 'state' => 1)); Log::add($this->project, $this->table, $this->menu_id, '', 4, array('ID' => $this->id, '方式' => '逻辑恢复'), $this->id); return 'reload'; } /** * list_data * * @return array */ public function list_data() { $config = $this->config(); $data = array(); if (isset($config['manage']['data']) && $config['manage']['data']) { $num = count($config['manage']['data']); if ($num <= 4) { $xs = '3'; } else { $xs = '1'; } foreach ($config['manage']['data'] as $k => $v) { if (is_object($v[1])) { $function = $v[1]; $v[1] = $function(); } $link = ''; if (isset($v[2]) && $v[2]) { $link = 'project/database/list?project=' . $this->project . '&table=' . $this->table . '&' . $v[2]; $link = 'href="' . Dever::url($link, 'manage') . '"'; } $data[] = '
  • '.$v[0].'

    '.$v[1].'

  • '; } } return $data; } /** * list_data * * @return array */ public function list_data_show() { $config = $this->config(); if (isset($config['manage']['data']) && $config['manage']['data']) { return 'display:block'; } return 'display:none'; } /** * chart * * @return array */ public function chart($config, $key, $data, $struct) { if (!$this->chart) { $this->chart = array(); $this->chart['x'] = array(); $this->chart['data'] = array(); } if ($config['x'] == $key) { $this->chart['x'][] = $data; } elseif (in_array($key, $config['data'])) { if (!isset($this->chart['data'][$key])) { $this->chart['data'][$key] = array ( 'name' => $struct['name'], 'type' => 'line', 'stack' => 'Total', 'data' => array(), ); } $this->chart['data'][$key]['data'][] = $data; } } /** * chart_data * * @return array */ public function list_chart() { $config = $this->config(); $chart = ''; if (isset($config['manage']['chart']) && $this->chart) { $this->chart['x'] = array_reverse($this->chart['x']); $x = Dever::json_encode($this->chart['x']); $this->chart['data'] = array_values($this->chart['data']); foreach ($this->chart['data'] as $k => $v) { $this->chart['data'][$k]['data'] = array_reverse($this->chart['data'][$k]['data']); } $data = Dever::json_encode($this->chart['data']); $echarts = Dever::assets('lib/echarts/echarts.common.min.js', 'script'); $chart = '"; } return $chart; } /** * chart_data * * @return array */ public function list_chart_show() { $config = $this->config(); if (isset($config['manage']['chart'])) { return 'display:block'; } return 'display:none'; } /** * stat 为主动统计提供相关数据 * * @return array */ public function stat() { //bundle 包依赖工具 $config = $this->config(); if (empty($config['manage']['stat'])) { Dever::alert('该项目主动统计功能未开放'); } $data = $config['manage']; $data['table'] = ''; $method = $this->project . '/' . $this->table . '-all'; $gp = Dever::input('gp', 'month,day'); $col = is_string($gp) ? explode(',', $gp) : $gp; $data['search'] = $this->stat_search($config['struct'], $gp, $config['manage']['stat'], $config['manage']['search']); foreach ($col as $k => $v) { $this->stat_data($data, $config['struct'], $v, $method); } return $data; } /** * stat 为主动统计提供导出数据 后续优化 * * @return array */ public function stat_excel() { Dever::$global['base']['excel'] = 1; //print_r($data['thead']);die; $data = $this->stat(); if ($data && isset($data['list'])) { $xls = new \PHPExcel(); $xls->getProperties()->setCreator("Maze Stat Excel") ->setLastModifiedBy("Maze Stat Excel") ->setTitle("Office 2007 XLSX Maze Document") ->setSubject("Office 2007 XLSX Maze Document") ->setDescription("Dever Stat Excel") ->setKeywords("Dever Stat Excel") ->setCategory("Dever Stat Excel"); $info = $this->info(); $name = $info['list_header'] . '的' . $info['stat_desc'] . '-' . $info['project_name']; $start = 65; $s = 0; foreach ($data['thead'] as $k => $v) { if ($s > 0) { $xls->createSheet(); } $act = $xls->setActiveSheetIndex($s); $act->setTitle($v[0]); $s++; $i = 0; foreach ($v as $kj => $vj) { $num = 1; $cell = $this->_getChr($start, $i); $act->setCellValue($cell . '' . $num, $vj); $act->getColumnDimension($cell)->setWidth(20); $i++; if (isset($data['list'][$k])) { foreach ($data['list'][$k] as $ki => $vi) { if (isset($vi[$kj])) { $num += 1; $act->setCellValue($cell . $num, $vi[$kj]); } } } } } //$act->getStyle('A1:'.$k.'20')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); // 垂直居中 //$act->getStyle('A1:'.$k.'20')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);// 水平居中 $xls->setActiveSheetIndex(0); $filename = $name . '.xlsx'; header('Pragma: public'); header('Expires: 0'); header('Cache-Control:must-revalidate,post-check=0,pre-check=0'); header('Content-Type:application/force-download'); header('Content-Type:application/vnd.ms-execl'); header('Content-Type:application/octet-stream'); header('Content-Type:application/download'); header("Content-Disposition:attachment;filename='" . $filename . "'"); header('Content-Transfer-Encoding:binary'); $write = \PHPExcel_IOFactory::createWriter($xls, 'Excel2007'); $write->save('php://output'); } } /** * stat_search * * @return mixed */ private function stat_search($struct, $col, $stat, $search) { unset($struct['id']); unset($struct['cdate']); if ($stat) { $stat = explode(',', $stat); foreach ($stat as $k => $v) { if (isset($struct[$v])) { unset($struct[$v]); } } } $struct['day']['name'] = '天'; $struct['month']['name'] = '月'; $struct['year']['name'] = '年'; $param['update'] = 'checkbox'; $param['name'] = 'gp'; $param['value'] = $col; $param['option'] = $struct; $html = '
    '; $html .= '
    '; $html .= Html::pageLeft(array('name' => '统计项', 'col' => 'col')); $html .= Html::radio($param); $html .= '
    '; $input = Dever::preInput('search_'); if (isset($search['date'])) { foreach ($search['date'] as $k => $v) { $html .= '
    '; $this->list_search_time($html, $input, 'search_', $k, $v, 'date'); $html .= '
    '; } $input = Dever::preInput('search_'); if ($input) { foreach ($input as $k => $v) { if ($v && strpos($k, 'option_') !== false) { Dever::setInput(str_replace('search_', '', $k), $v); } } } } if (isset($search['fulltext'])) { $html .= '
    '; $this->list_search_select($html, $input, 'search_fulltext', '选择检索项', $search['fulltext']); $this->list_search_select($html, $input, 'search_fulltext_type', '', array ( 1 => '精确匹配', 2 => '模糊匹配', 3 => '大于', 4 => '大于等于', 5 => '小于', 6 => '小于等于', ), 1); $value = array(); $value['name'] = 'search_fulltext_value'; $value['class'] = 'form-control'; if (isset($input[$value['name']])) { $value['value'] = $input[$value['name']]; $fix = ''; if ($input['search_fulltext_type'] == 2) { $fix = '%'; } Dever::setInput('option_' . $input['search_fulltext'], $fix . $value['value'] . $fix); //print_r(Dever::input('option_name'));die; } $html .= Html::text($value, false); $html .= '
    '; } $html .= '确定'; $html .= '  下载报表'; $html .= '
    '; return $html; } /** * stat_data * * @return mixed */ private function stat_data(&$data, $struct, $col, $method) { Dever::setInput('group', $col); switch ($col) { case 'year': $name = '按年统计'; break; case 'month': $name = '按月统计'; break; case 'day': $name = '按天统计'; break; default: $name = $struct[$col]['name']; break; } $list = Dever::load($method, array('group' => $col, 'col' => 'count(1) as total,id')); $data['table'] .= '
    '; $data['table'] .= ''; $data['thead'][$col] = array($name, '统计数字'); if ($list) { $data['table'] .= ''; $total = 0; foreach ($list as $k => $v) { if (isset($v[$col])) { if (isset($struct[$col]['option'])) { $option = $this->option($struct[$col]['option']); if (isset($option[$v[$col]])) { $v[$col] = $option[$v[$col]]; if (is_array($v[$col])) { $v[$col] = $v[$col]['name']; } } } $data['table'] .= ''; $total += $v['total']; $data['list'][$col][] = array($v[$col], $v['total']); } } $data['table'] .= ''; if ($total > 0 && $k > 0) { $data['table'] .= ''; $data['list'][$col][] = array('汇总', $total); } } $data['table'] .= '
    ' . $name . '统计数字
    ' . $v[$col] . '' . $v['total'] . '
    汇总' . $total . '
    '; } /** * load * * @return mixed */ private function load($method = 'one', $param = array(), $table = false) { if (!$table) { $table = $this->table; } return Dever::load($this->project . '/' . $table . '-' . $method, $param); } /** * __call * * @return object */ public function __call($method, $param) { if (strpos($method, 'html_') !== false) { return Html::text($param); } return $this; } /** * option * * @return string */ private function option($option, $value = false) { if (is_object($option)) { $function = $option; $option = $function(); } if ($value && is_array($value)) { $state = false; foreach ($value as $k => $v) { if ($v === true) { $state = true; break; } } if ($state) { $option = array_intersect_key($option, $value); } else { $option = $value; } } return $option; } /** * option * * @return string */ public function manage() { $config = $this->config(); return $config; } /** * valid * * @return string */ public function valid() { //http://placehold.it/350x150 $config = $this->config(); if (isset($config['struct'])) { $rule = array(); $rule['required']['regex'] = 'none'; $rule['required']['alertText'] = '此项不能为空'; $rule['required']['alertTextCheckboxMultiple'] = '请选择一个选项'; $rule['required']['alertTextCheckboxe'] = '请选择一个选项'; $rule['required']['alertTextDateRange'] = '日期范围不可空白'; foreach ($config['struct'] as $k => $v) { if (isset($v['match']) && $v['match'] != 'option' && is_string($v['match']) && strpos($v['match'], '/') !== false) { if (strstr($v['match'], 'option||')) { $v['match'] = str_replace('option||', '', $v['match']); } $rule[$k]['regex'] = $v['match']; $rule[$k]['alertText'] = $v['desc']; } } } $script = ''; //print_r($script);die; return $script; } /** * save * * @return string */ public function save() { $config = $this->config(); if (isset($config['manage']['save'])) { return 'yes'; } return 'no'; } }