|
@@ -25,7 +25,7 @@ class Page extends Auth
|
|
if ($this->menu && $this->menu['show'] == 1) {
|
|
if ($this->menu && $this->menu['show'] == 1) {
|
|
$this->checkMenu($this->menu['id'], false);
|
|
$this->checkMenu($this->menu['id'], false);
|
|
}
|
|
}
|
|
- $this->config = $this->db->config['manage'][$key] ?? [];
|
|
|
|
|
|
+ $this->config = $this->db->config['manage'][$key] ?? $this->db->config['manage'];
|
|
if ($config) {
|
|
if ($config) {
|
|
$this->config = array_merge($this->config, $config);
|
|
$this->config = array_merge($this->config, $config);
|
|
}
|
|
}
|
|
@@ -50,7 +50,7 @@ class Page extends Auth
|
|
if ($field && is_string($field) && strstr($field, 'dever_')) {
|
|
if ($field && is_string($field) && strstr($field, 'dever_')) {
|
|
$field = '';
|
|
$field = '';
|
|
}
|
|
}
|
|
- return $this->setData($setting, $data, $field, $type, $disable);
|
|
|
|
|
|
+ return $this->setData($key, $setting, $data, $field, $type, $disable);
|
|
}
|
|
}
|
|
|
|
|
|
# 获取某个数据的具体展示值
|
|
# 获取某个数据的具体展示值
|
|
@@ -109,9 +109,9 @@ class Page extends Auth
|
|
return [];
|
|
return [];
|
|
}
|
|
}
|
|
|
|
|
|
- public function getShow($show, $data)
|
|
|
|
|
|
+ public function getShow($show, $data, $state = false)
|
|
{
|
|
{
|
|
- return \Dever\Helper\Str::val($show, $data);
|
|
|
|
|
|
+ return \Dever\Helper\Str::val($show, $data, $state);
|
|
}
|
|
}
|
|
|
|
|
|
# 获取菜单标题
|
|
# 获取菜单标题
|
|
@@ -206,10 +206,11 @@ class Page extends Auth
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- private function setData($setting, &$data, $field, $type, $disable)
|
|
|
|
|
|
+ private function setData($key, $setting, &$data, $field, $type, $disable)
|
|
{
|
|
{
|
|
$result = [];
|
|
$result = [];
|
|
foreach ($setting as $k => $v) {
|
|
foreach ($setting as $k => $v) {
|
|
|
|
+ $this->setDefault($key, $k, $v);
|
|
if (!is_array($v)) {
|
|
if (!is_array($v)) {
|
|
if (is_numeric($k)) {
|
|
if (is_numeric($k)) {
|
|
$k = $v;
|
|
$k = $v;
|
|
@@ -267,6 +268,9 @@ class Page extends Auth
|
|
|
|
|
|
private function setField(&$data, $key, $value, $field, $type = 'show', $disable = false)
|
|
private function setField(&$data, $key, $value, $field, $type = 'show', $disable = false)
|
|
{
|
|
{
|
|
|
|
+ if (empty($value['align'])) {
|
|
|
|
+ $value['align'] = 'center';
|
|
|
|
+ }
|
|
$value['key'] = $key;
|
|
$value['key'] = $key;
|
|
$this->setName($value);
|
|
$this->setName($value);
|
|
# 对每个字段进行权限设置
|
|
# 对每个字段进行权限设置
|
|
@@ -323,8 +327,8 @@ class Page extends Auth
|
|
$value['remote'] = Dever::url($value['remote']);
|
|
$value['remote'] = Dever::url($value['remote']);
|
|
}
|
|
}
|
|
if ($type == 'show') {
|
|
if ($type == 'show') {
|
|
- if (!isset($value['tip'])) {
|
|
|
|
- $value['tip'] = false;
|
|
|
|
|
|
+ if (!isset($value['truncate'])) {
|
|
|
|
+ $value['truncate'] = false;
|
|
}
|
|
}
|
|
$in = ['switch', 'select', 'input'];
|
|
$in = ['switch', 'select', 'input'];
|
|
if (in_array($value['type'], $in)) {
|
|
if (in_array($value['type'], $in)) {
|
|
@@ -350,6 +354,39 @@ class Page extends Auth
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private function setDefault($key, &$k, &$v)
|
|
|
|
+ {
|
|
|
|
+ if ($v == 'cdate') {
|
|
|
|
+ $k = $v;
|
|
|
|
+ $v = [
|
|
|
|
+ 'name' => '创建时间',
|
|
|
|
+ 'type' => 'date',
|
|
|
|
+ 'date_type' => 'datetimerange',
|
|
|
|
+ 'value_format' => 'YYYY-MM-DD HH:mm:ss',
|
|
|
|
+ 'start_placeholder' => '开始日期',
|
|
|
|
+ 'end_placeholder' => '结束日期',
|
|
|
|
+ 'range_separator' => '至',
|
|
|
|
+ 'truncate' => true,
|
|
|
|
+ ];
|
|
|
|
+ } elseif ($v == 'sort') {
|
|
|
|
+ $k = $v;
|
|
|
|
+ $v = [
|
|
|
|
+ 'type' => 'input',
|
|
|
|
+ 'tip' => '双击修改,正序排序',
|
|
|
|
+ 'width' => '75px',
|
|
|
|
+ ];
|
|
|
|
+ } elseif ($key != 'search' && $v == 'status') {
|
|
|
|
+ $k = $v;
|
|
|
|
+ $v = [
|
|
|
|
+ 'type' => 'switch',
|
|
|
|
+ 'show' => '{status}',
|
|
|
|
+ 'active_value' => 1,
|
|
|
|
+ 'inactive_value' => 2,
|
|
|
|
+ 'width' => '75px',
|
|
|
|
+ ];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
private function setShow(&$value)
|
|
private function setShow(&$value)
|
|
{
|
|
{
|
|
if ($value['type'] == 'hidden') {
|
|
if ($value['type'] == 'hidden') {
|
|
@@ -379,6 +416,13 @@ class Page extends Auth
|
|
}
|
|
}
|
|
if (empty($value['width'])) {
|
|
if (empty($value['width'])) {
|
|
$value['width'] = 'auto';
|
|
$value['width'] = 'auto';
|
|
|
|
+ if ($this->key == 'update') {
|
|
|
|
+ $fast = Dever::input('fast');
|
|
|
|
+ $value['width'] = '50%';
|
|
|
|
+ if ($fast == 1) {
|
|
|
|
+ $value['width'] = '100%';
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
if (isset($value['upload']) && Dever::project('upload')) {
|
|
if (isset($value['upload']) && Dever::project('upload')) {
|
|
$upload = $this->getUpload($value['key']);
|
|
$upload = $this->getUpload($value['key']);
|
|
@@ -450,12 +494,28 @@ class Page extends Auth
|
|
$value['disable'] = $disable;
|
|
$value['disable'] = $disable;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ # 设置值
|
|
private function setForm(&$value)
|
|
private function setForm(&$value)
|
|
{
|
|
{
|
|
if (empty($value['value'])) {
|
|
if (empty($value['value'])) {
|
|
$value['value'] = Dever::input('search')[$value['key']] ?? '';
|
|
$value['value'] = Dever::input('search')[$value['key']] ?? '';
|
|
}
|
|
}
|
|
- if (is_array($value['value'])) {
|
|
|
|
|
|
+ # (float) 转换一下是为了前端select使用,必须是数字类型
|
|
|
|
+ # 这个比较特殊
|
|
|
|
+ if ($value['type'] == 'select_text') {
|
|
|
|
+ if ($value['value']) {
|
|
|
|
+ if (is_string($value['value'])) {
|
|
|
|
+ $value['value'] = explode('|', $v['value']);
|
|
|
|
+ }
|
|
|
|
+ $value['value'][0] = (float) $value['value'][0];
|
|
|
|
+ } else {
|
|
|
|
+ $value['value'] = [1,''];
|
|
|
|
+ }
|
|
|
|
+ } elseif ($value['type'] == 'date') {
|
|
|
|
+ if (empty($value['shortcuts'])) {
|
|
|
|
+ $value['shortcuts'] = Dever::load('data', 'manage')->getShortcuts($value['date_type']);
|
|
|
|
+ }
|
|
|
|
+ } elseif (is_array($value['value'])) {
|
|
foreach ($value['value'] as &$v) {
|
|
foreach ($value['value'] as &$v) {
|
|
$v = (float) $v;
|
|
$v = (float) $v;
|
|
}
|
|
}
|
|
@@ -470,18 +530,20 @@ class Page extends Auth
|
|
if (isset($value['option']) && $value['option']) {
|
|
if (isset($value['option']) && $value['option']) {
|
|
$this->db->config['option'][$value['key']] = $value['option'];
|
|
$this->db->config['option'][$value['key']] = $value['option'];
|
|
}
|
|
}
|
|
- $send = $this->info;
|
|
|
|
- $send['table'] = $this->db->config['load'];
|
|
|
|
- if ($option = $this->db->value($value['key'], false, 'id,name', $send)) {
|
|
|
|
- if ($value['type'] == 'checkbox') {
|
|
|
|
- $value['value'] = $value['value'] ? explode(',', $value['value']) : [];
|
|
|
|
- }
|
|
|
|
- $value['option'] = $option;
|
|
|
|
- if ($value['type'] == 'text') {
|
|
|
|
- $value['type'] = 'select';
|
|
|
|
- }
|
|
|
|
- if (!is_array($value['value']) && $value['value']) {
|
|
|
|
- $value['value'] = (float) $value['value'];
|
|
|
|
|
|
+ if (isset($this->db->config['load'])) {
|
|
|
|
+ $send = $this->info;
|
|
|
|
+ $send['table'] = $this->db->config['load'];
|
|
|
|
+ if ($option = $this->db->value($value['key'], false, 'id,name', $send)) {
|
|
|
|
+ if ($value['type'] == 'checkbox') {
|
|
|
|
+ $value['value'] = $value['value'] ? explode(',', $value['value']) : [];
|
|
|
|
+ }
|
|
|
|
+ $value['option'] = $option;
|
|
|
|
+ if ($value['type'] == 'text') {
|
|
|
|
+ $value['type'] = 'select';
|
|
|
|
+ }
|
|
|
|
+ if (!is_array($value['value']) && $value['value']) {
|
|
|
|
+ $value['value'] = (float) $value['value'];
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -549,14 +611,18 @@ class Page extends Auth
|
|
if (is_array($v)) {
|
|
if (is_array($v)) {
|
|
if (isset($v[3]) && $data) {
|
|
if (isset($v[3]) && $data) {
|
|
$d = $v[3];
|
|
$d = $v[3];
|
|
- parse_str($d, $t);
|
|
|
|
- $state = false;
|
|
|
|
- foreach ($t as $k1 => $v1) {
|
|
|
|
- if (isset($data[$k1])) {
|
|
|
|
- $v1 = explode(',', $v1);
|
|
|
|
- foreach ($v1 as $v2) {
|
|
|
|
- if ($data[$k1] == $v2) {
|
|
|
|
- $state = true;
|
|
|
|
|
|
+ if (strstr($d, '{')) {
|
|
|
|
+ $state = $this->getShow($d, $data, true);
|
|
|
|
+ } else {
|
|
|
|
+ parse_str($d, $t);
|
|
|
|
+ $state = false;
|
|
|
|
+ foreach ($t as $k1 => $v1) {
|
|
|
|
+ if (isset($data[$k1])) {
|
|
|
|
+ $v1 = explode(',', $v1);
|
|
|
|
+ foreach ($v1 as $v2) {
|
|
|
|
+ if ($data[$k1] == $v2) {
|
|
|
|
+ $state = true;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -582,6 +648,9 @@ class Page extends Auth
|
|
} elseif (strstr($v, 'view')) {
|
|
} elseif (strstr($v, 'view')) {
|
|
$icon = 'View';
|
|
$icon = 'View';
|
|
$button = '';
|
|
$button = '';
|
|
|
|
+ } elseif (strstr($v, 'drawer')) {
|
|
|
|
+ $icon = 'Drawer';
|
|
|
|
+ $button = '';
|
|
} elseif ($v == 'delete') {
|
|
} elseif ($v == 'delete') {
|
|
if ($key == 'button') {
|
|
if ($key == 'button') {
|
|
if (isset($this->config['layout'])) {
|
|
if (isset($this->config['layout'])) {
|
|
@@ -622,6 +691,7 @@ class Page extends Auth
|
|
} elseif ($v == 'link') {
|
|
} elseif ($v == 'link') {
|
|
$icon = 'Link';
|
|
$icon = 'Link';
|
|
$button = 'success';
|
|
$button = 'success';
|
|
|
|
+ $p = $this->getShow($p, $data);
|
|
} elseif ($v == 'route') {
|
|
} elseif ($v == 'route') {
|
|
$icon = 'Link';
|
|
$icon = 'Link';
|
|
$button = 'success';
|
|
$button = 'success';
|
|
@@ -654,4 +724,113 @@ class Page extends Auth
|
|
}
|
|
}
|
|
return $result;
|
|
return $result;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ # 构造搜索
|
|
|
|
+ protected function search(&$where)
|
|
|
|
+ {
|
|
|
|
+ $search = Dever::input('search');
|
|
|
|
+ $set = Dever::input('set');
|
|
|
|
+ $list_search = $result = [];
|
|
|
|
+ $result['form'] = $result['field'] = $result['option'] = [];
|
|
|
|
+ $this->setting('search', $list_search, false, 'text');
|
|
|
|
+ if ($list_search) {
|
|
|
|
+ foreach ($list_search as $v) {
|
|
|
|
+ if ($v['type'] != 'hidden') {
|
|
|
|
+ $result['form'][] = $v;
|
|
|
|
+ if (is_numeric($v['value'])) {
|
|
|
|
+ $v['value'] = (float) $v['value'];
|
|
|
|
+ }
|
|
|
|
+ $result['field'][$v['key']] = $v['value'];
|
|
|
|
+ if ($v['type'] == 'sku') {
|
|
|
|
+ $result['field'][$v['key'] . '_spec'] = [];
|
|
|
|
+ }
|
|
|
|
+ if (isset($v['option'])) {
|
|
|
|
+ $result['option'][$v['key']] = $v['option'];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ $this->searchWhere($search, $v, $where);
|
|
|
|
+ $this->searchWhere($set, $v, $where);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return $result;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ protected function searchWhere($value, $v, &$where)
|
|
|
|
+ {
|
|
|
|
+ if ($value) {
|
|
|
|
+ if ($value = Dever::issets($value, $v['key'])) {
|
|
|
|
+ if (isset($v['search'])) {
|
|
|
|
+ if (is_callable($v['search'])) {
|
|
|
|
+ $value = $v['search']($v['key'], $v['type'], $value);
|
|
|
|
+ } elseif (isset($v['search']['table'])) {
|
|
|
|
+ $v['search']['where'] = Dever::json_decode(str_replace('{value}', $value, Dever::json_encode($v['search']['where'])));
|
|
|
|
+ $search = Dever::db($v['search']['table'])->select($v['search']['where'], $v['search']['set'] ?? []);
|
|
|
|
+ $value = [];
|
|
|
|
+ if ($search) {
|
|
|
|
+ foreach ($search as $v1) {
|
|
|
|
+ $value[] = $v1[$v['search']['field']];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ $value = implode(',', $value);
|
|
|
|
+ $v['type'] = 'in';
|
|
|
|
+ if (isset($v['search']['key'])) {
|
|
|
|
+ $v['key'] = $v['search']['key'];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if ($v['type'] == 'select_text') {
|
|
|
|
+ if ($value[1] === '') {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ $result = current(array_filter($v['option'], function($item) use($value) {
|
|
|
|
+ return $item['id'] == $value[0];
|
|
|
|
+ }));
|
|
|
|
+ if (!$result) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ $v['key'] = $result['value'];
|
|
|
|
+ $v['type'] = '';
|
|
|
|
+ if (strstr($v['key'], '.')) {
|
|
|
|
+ $r = Dever::call($v['key'], $value[1]);
|
|
|
|
+ if ($r) {
|
|
|
|
+ $v['key'] = $r[0];
|
|
|
|
+ $v['type'] = $r[1];
|
|
|
|
+ $value = $r[2];
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ if (strstr($v['key'], ' ')) {
|
|
|
|
+ $temp = explode(' ', $v['key']);
|
|
|
|
+ $v['key'] = $temp[0];
|
|
|
|
+ $v['type'] = $temp[1];
|
|
|
|
+ }
|
|
|
|
+ $value = $value[1];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if ($v['type'] == 'group') {
|
|
|
|
+ $where[$v['key']] = ['group', $value];
|
|
|
|
+ } elseif ($v['type'] == 'selects') {
|
|
|
|
+ $where[$v['key']] = ['group', $value];
|
|
|
|
+ } elseif ($v['type'] == 'cascader') {
|
|
|
|
+ $t = $value;
|
|
|
|
+ if (is_array($value)) {
|
|
|
|
+ $t = implode(',', $value);
|
|
|
|
+ }
|
|
|
|
+ $where[$v['key']] = ['like', $t];
|
|
|
|
+ } elseif ($v['type'] == 'like') {
|
|
|
|
+ $where[$v['key']] = ['like', $value];
|
|
|
|
+ } elseif ($v['type'] == 'in') {
|
|
|
|
+ $where[$v['key']] = ['in', $value];
|
|
|
|
+ } elseif ($v['type'] == 'date') {
|
|
|
|
+ if (strstr($v['date_type'], 'range')) {
|
|
|
|
+ $where[$v['key']] = array('>=', \Dever\Helper\Date::mktime($value[0]));
|
|
|
|
+ $where[$v['key'] . '#'] = array('<=', \Dever\Helper\Date::mktime($value[1]));
|
|
|
|
+ } else {
|
|
|
|
+ $where[$v['key']] = $value;
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ $where[$v['key']] = $value;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|