|
@@ -8,10 +8,10 @@ class Update extends Page
|
|
|
{
|
|
|
parent::__construct('update', $load, $id);
|
|
|
}
|
|
|
- public function get($value = array(), &$option = array())
|
|
|
+ public function get(&$value = array(), &$option = array())
|
|
|
{
|
|
|
$func = $this->checkFunc();
|
|
|
- $remote = $show = array();
|
|
|
+ $remote = $show = $spec = array();
|
|
|
$data['update'] = $data['field'] = $data['option'] = array();
|
|
|
$this->setting('field', $data['update'], true, 'text');
|
|
|
foreach ($data['update'] as $k => $v) {
|
|
@@ -19,13 +19,18 @@ class Update extends Page
|
|
|
$v['value'] = array();
|
|
|
}
|
|
|
if (isset($v['remote'])) {
|
|
|
- # 需要设置remote
|
|
|
- $remote[$v['key']] = array($k, $v['remote']);
|
|
|
+ $remote[$v['key']] = array($k, $v['remote'], $v['key']);
|
|
|
+ }
|
|
|
+ if (isset($v['spec_data'])) {
|
|
|
+ $spec[$v['key']] = array($k, $v['spec_data'], $v['key'] . '_spec');
|
|
|
}
|
|
|
if (isset($v['show']) && is_string($v['show'])) {
|
|
|
$show[$v['key']] = array($k, $v['show']);
|
|
|
}
|
|
|
$data['field'][$v['key']] = $v['value'];
|
|
|
+ if ($v['type'] == 'sku') {
|
|
|
+ $data['field'][$v['key'] . '_spec'] = [];
|
|
|
+ }
|
|
|
if (isset($v['option'])) {
|
|
|
$data['option'][$v['key']] = $v['option'];
|
|
|
unset($data['update'][$k]['option']);
|
|
@@ -53,15 +58,31 @@ class Update extends Page
|
|
|
if ($this->info) {
|
|
|
$info = $this->info;
|
|
|
$this->setInfo($info, $data, $remote, $show);
|
|
|
+ if ($spec) {
|
|
|
+ foreach ($spec as $k => $v) {
|
|
|
+ $data['update'][$spec[$k][0]]['remote'] = Dever::url($spec[$k][1]);
|
|
|
+ $result = Dever::call($spec[$k][1], array($this->info['id']));
|
|
|
+ if ($result) {
|
|
|
+ $data['field'][$spec[$k][2]] = $result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
} elseif ($value) {
|
|
|
- foreach ($value as $k => $v) {
|
|
|
- $this->setInfo($v, $data, $remote, $show);
|
|
|
+ foreach ($value as $k => &$v) {
|
|
|
+ $this->setInfo($v, $data, $remote, $show, 2);
|
|
|
$option[$k] = $data['option'];
|
|
|
}
|
|
|
} else {
|
|
|
if ($remote) {
|
|
|
+ $info = array();
|
|
|
foreach ($remote as $k => $v) {
|
|
|
$data['update'][$v[0]]['remote'] = Dever::url($v[1]);
|
|
|
+ if (isset($v[2]) && isset($data['option'][$v[2]]) && $data['option'][$v[2]] & $m = Dever::isset($data['option'][$v[2]][0], 'id')) {
|
|
|
+ $result = Dever::call($v[1], array($m), 'api');
|
|
|
+ if ($result) {
|
|
|
+ $this->setUpdate($info, $data, $result);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
if ($show) {
|
|
@@ -82,7 +103,7 @@ class Update extends Page
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
|
- private function setInfo($info, &$data, $remote, $show)
|
|
|
+ private function setInfo(&$info, &$data, $remote, $show, $type = 1)
|
|
|
{
|
|
|
foreach ($info as $k => $v) {
|
|
|
if (isset($data['field'][$k])) {
|
|
@@ -93,16 +114,17 @@ class Update extends Page
|
|
|
$v = array();
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
if (isset($this->config['field'][$k]) && isset($this->config['field'][$k]['update'])) {
|
|
|
$v = $this->config['field'][$k]['update'];
|
|
|
}
|
|
|
- $data['field'][$k] = $v;
|
|
|
+ if ($type == 1) {
|
|
|
+ $data['field'][$k] = $v;
|
|
|
+ }
|
|
|
if (isset($remote[$k])) {
|
|
|
$data['update'][$remote[$k][0]]['remote'] = Dever::url($remote[$k][1]);
|
|
|
$result = Dever::call($remote[$k][1], array($v), 'api');
|
|
|
if ($result) {
|
|
|
- $this->setUpdate($data['update'], $data['option'], $result);
|
|
|
+ $this->setUpdate($info, $data, $result);
|
|
|
}
|
|
|
}
|
|
|
if (isset($show[$k])) {
|
|
@@ -112,15 +134,21 @@ class Update extends Page
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private function setUpdate(&$update, &$option, $result)
|
|
|
+ private function setUpdate(&$info, &$data, $result)
|
|
|
{
|
|
|
- foreach ($update as $k => $v) {
|
|
|
+ foreach ($data['update'] as $k => $v) {
|
|
|
if (isset($result[$v['key']])) {
|
|
|
if (isset($result[$v['key']]['option'])) {
|
|
|
- $option[$v['key']] = $result[$v['key']]['option'];
|
|
|
+ $data['option'][$v['key']] = $result[$v['key']]['option'];
|
|
|
unset($result[$v['key']]['option']);
|
|
|
}
|
|
|
- $update[$k] = array_merge($update[$k], $result[$v['key']]);
|
|
|
+ if (empty($data['field'][$v['key']]) && isset($result[$v['key']]['value'])) {
|
|
|
+ $data['field'][$v['key']] = $result[$v['key']]['value'];
|
|
|
+ }
|
|
|
+ if (isset($result[$v['key']]['set']) && $info) {
|
|
|
+ $info = array_merge($info, $result[$v['key']]['set']);
|
|
|
+ }
|
|
|
+ $data['update'][$k] = array_merge($data['update'][$k], $result[$v['key']]);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -234,7 +262,7 @@ class Update extends Page
|
|
|
$update = array();
|
|
|
$this->setting('field', $update, true, 'text');
|
|
|
if ($update) {
|
|
|
- $data = $other = array();
|
|
|
+ $data = $other = $sku = array();
|
|
|
$input = Dever::input();
|
|
|
$id = false;
|
|
|
if (isset($input['id']) && $input['id'] > 0) {
|
|
@@ -245,7 +273,9 @@ class Update extends Page
|
|
|
if (isset($v['rules'])) {
|
|
|
$this->checkRules($v, $input[$v['key']]);
|
|
|
}
|
|
|
- if (strpos($v['key'], '/')) {
|
|
|
+ if ($v['type'] == 'sku') {
|
|
|
+ $sku[$v['key']] = array($v['where'], $v['content']['field'], $v['spec'], $v['spec_field'], $input[$v['key'] . '_spec'], $input[$v['key']]);
|
|
|
+ } elseif (strpos($v['key'], '/')) {
|
|
|
$other[$v['key']] = array($v['where'], $v['content']['field'], $v['content']['drag'], $input[$v['key']]);
|
|
|
} else {
|
|
|
$this->doData($data, $v['key'], $input[$v['key']]);
|
|
@@ -281,6 +311,7 @@ class Update extends Page
|
|
|
}
|
|
|
$this->end($id, $data);
|
|
|
$this->other($id, $data, $other);
|
|
|
+ $this->sku($id, $data, $sku);
|
|
|
return '操作成功';
|
|
|
}
|
|
|
}
|
|
@@ -358,6 +389,9 @@ class Update extends Page
|
|
|
{
|
|
|
if ($other) {
|
|
|
foreach ($other as $k => $v) {
|
|
|
+ if (strpos($k, '#')) {
|
|
|
+ $k = str_replace('#', '', $k);
|
|
|
+ }
|
|
|
$common = $v[0];
|
|
|
$update = $v[1];
|
|
|
$drag = $v[2];
|
|
@@ -368,10 +402,14 @@ class Update extends Page
|
|
|
$value['id'] = $v1['id'];
|
|
|
}
|
|
|
foreach ($common as $k2 => $v2) {
|
|
|
- if ($v2 == 'id') {
|
|
|
- $value[$k2] = $rid;
|
|
|
- } elseif (isset($data[$v2])) {
|
|
|
- $value[$k2] = $data[$v2];
|
|
|
+ if (!is_array($v2)) {
|
|
|
+ if ($v2 == 'id') {
|
|
|
+ $value[$k2] = $rid;
|
|
|
+ } elseif (isset($data[$v2])) {
|
|
|
+ $value[$k2] = $data[$v2];
|
|
|
+ } else {
|
|
|
+ $value[$k2] = $v2;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
foreach ($update as $k2 => $v2) {
|
|
@@ -393,4 +431,96 @@ class Update extends Page
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ private function sku($rid, $data, $sku)
|
|
|
+ {
|
|
|
+ if ($sku) {
|
|
|
+ foreach ($sku as $k => $v) {
|
|
|
+ if (strpos($k, '#')) {
|
|
|
+ $k = str_replace('#', '', $k);
|
|
|
+ }
|
|
|
+ $common = $v[0];
|
|
|
+ $update = $v[1];
|
|
|
+ $spec_table = $v[2];
|
|
|
+ $spec_value_table = $spec_table . '_value';
|
|
|
+ $spec_field = $v[3];
|
|
|
+ $spec = $v[4];
|
|
|
+ $input = $v[5];
|
|
|
+ $value = $spec_value = array();
|
|
|
+ Dever::db($spec_table)->update(array($spec_field => $rid), array('state' => 2));
|
|
|
+ Dever::db($spec_value_table)->update(array($spec_field => $rid), array('state' => 2));
|
|
|
+ foreach ($spec as $k1 => &$v1) {
|
|
|
+ $spec_data = array();
|
|
|
+ $spec_data['state'] = 1;
|
|
|
+ $spec_data[$spec_field] = $rid;
|
|
|
+ $spec_data['name'] = $v1['name'];
|
|
|
+ $spec_data['sort'] = $k1+1;
|
|
|
+ if (isset($v1['id']) && $v1['id']) {
|
|
|
+ Dever::db($spec_table)->update($v1['id'], $spec_data);
|
|
|
+ } else {
|
|
|
+ $v1['id'] = Dever::db($spec_table)->insert($spec_data);
|
|
|
+ }
|
|
|
+ if ($v1['id']) {
|
|
|
+ foreach ($v1['value'] as $k2 => &$v2) {
|
|
|
+ $spec_value_data = array();
|
|
|
+ $spec_value_data['state'] = 1;
|
|
|
+ $spec_value_data[$spec_field] = $rid;
|
|
|
+ $spec_value_data['spec_id'] = $v1['id'];
|
|
|
+ $spec_value_data['value'] = $v2['value'] ?? $v2['name'];
|
|
|
+ $spec_value_data['sort'] = $k2+1;
|
|
|
+ $spec_value_data['is_checked'] = $v2['checked'] == 'true' ? 1 : 2;
|
|
|
+ if (isset($v2['id']) && $v2['id']) {
|
|
|
+ Dever::db($spec_value_table)->update($v2['id'], $spec_value_data);
|
|
|
+ } else {
|
|
|
+ $v2['id'] = Dever::db($spec_value_table)->insert($spec_value_data);
|
|
|
+ }
|
|
|
+ $spec_value[$spec_data['name']][$spec_value_data['value']] = array($v1['id'] . '_' . $v2['id'], $spec_data['sort']);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Dever::db($spec_table)->delete(array($spec_field => $rid, 'state' => 2));
|
|
|
+ Dever::db($spec_value_table)->delete(array($spec_field => $rid, 'state' => 2));
|
|
|
+ Dever::db($k)->update(array($spec_field => $rid), array('state' => 2));
|
|
|
+ foreach ($input as $k1 => $v1) {
|
|
|
+ if (isset($v1['id'])) {
|
|
|
+ $value['id'] = $v1['id'];
|
|
|
+ }
|
|
|
+ foreach ($common as $k2 => $v2) {
|
|
|
+ if (!is_array($v2)) {
|
|
|
+ if ($v2 == 'id') {
|
|
|
+ $value[$k2] = $rid;
|
|
|
+ } elseif (isset($data[$v2])) {
|
|
|
+ $value[$k2] = $data[$v2];
|
|
|
+ } else {
|
|
|
+ $value[$k2] = $v2;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ foreach ($update as $k2 => $v2) {
|
|
|
+ if (isset($v1[$k2])) {
|
|
|
+ $value[$k2] = $v1[$k2];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $value['key'] = array();
|
|
|
+ foreach ($v1 as $k2 => $v2) {
|
|
|
+ if (isset($spec_value[$k2]) && isset($spec_value[$k2][$v2])) {
|
|
|
+ $value['key'][$spec_value[$k2][$v2][1]] = $spec_value[$k2][$v2][0];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ($value['key']) {
|
|
|
+ $value['key'] = implode(',' , $value['key']);
|
|
|
+ }
|
|
|
+ $value['state'] = 1;
|
|
|
+ if (isset($value['id']) && $value['id'] > 0) {
|
|
|
+ $id = $value['id'];
|
|
|
+ unset($value['id']);
|
|
|
+ Dever::db($k)->update($id, $value);
|
|
|
+ } else {
|
|
|
+ Dever::db($k)->insert($value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Dever::db($k)->delete(array($spec_field => $rid, 'state' => 2));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|