From 7888df9b85ae43fdcd74372a69b15eeeef0c94a3 Mon Sep 17 00:00:00 2001 From: zhaoxiang <756958008@qq.com> Date: Wed, 21 Feb 2018 23:12:01 +0800 Subject: [PATCH] =?UTF-8?q?added=20=E5=AD=97=E6=AE=B5=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Fields.php | 223 ++++++++++++++++++ .../admin/controller/InterfaceList.php | 2 +- application/admin/controller/Menu.php | 2 +- application/admin/controller/User.php | 2 +- 4 files changed, 226 insertions(+), 3 deletions(-) create mode 100644 application/admin/controller/Fields.php diff --git a/application/admin/controller/Fields.php b/application/admin/controller/Fields.php new file mode 100644 index 0000000..73acfd7 --- /dev/null +++ b/application/admin/controller/Fields.php @@ -0,0 +1,223 @@ + + */ + +namespace app\admin\controller; + + +use app\util\DataType; + +class Fields extends Base { + private $dataType = array( + DataType::TYPE_INTEGER => 'Integer', + DataType::TYPE_STRING => 'String', + DataType::TYPE_BOOLEAN => 'Boolean', + DataType::TYPE_ENUM => 'Enum', + DataType::TYPE_FLOAT => 'Float', + DataType::TYPE_FILE => 'File', + DataType::TYPE_MOBILE => 'Mobile', + DataType::TYPE_OBJECT => 'Object', + DataType::TYPE_ARRAY => 'Array' + ); + + public function index() { + return $this->buildSuccess($this->dataType); + } + + public function request() { + $hash = I('get.hash'); + $where['type'] = 0; + if (!empty($hash)) { + $where['hash'] = $hash; + } + $res = D('ApiFields')->where($where)->select(); + $this->assign('dataType', $this->dataType); + $this->assign('list', $res); + $this->assign('type', 0); + $this->display('index'); + } + + public function response() { + $hash = I('get.hash'); + $where['type'] = 1; + if (!empty($hash)) { + $where['hash'] = $hash; + } + $res = D('ApiFields')->where($where)->select(); + $this->assign('dataType', $this->dataType); + $this->assign('list', $res); + $this->assign('type', 1); + $this->display('index'); + } + + public function add() { + if (IS_POST) { + $data = I('post.'); + $data['fieldName'] = $data['showName']; + $res = D('ApiFields')->add($data); + if ($res === false) { + $this->ajaxError('操作失败'); + } else { + S('ApiRequest_' . $data['hash'], null); + S('ApiResponse_' . $data['hash'], null); + $this->ajaxSuccess('添加成功'); + } + } else { + $this->assign('dataType', $this->dataType); + $this->display(); + } + } + + public function edit() { + if (IS_POST) { + $data = I('post.'); + $data['fieldName'] = $data['showName']; + $res = D('ApiFields')->where(array('id' => $data['id']))->save($data); + if ($res === false) { + $this->ajaxError('操作失败'); + } else { + if ($data['type'] == 0) { + S('ApiRequest_' . $data['hash'], null); + } else { + S('ApiResponse_' . $data['hash'], null); + } + $this->ajaxSuccess('添加成功'); + } + } else { + $id = I('get.id'); + if ($id) { + $detail = D('ApiFields')->where(array('id' => $id))->find(); + $this->assign('detail', $detail); + $this->assign('dataType', $this->dataType); + $this->display('add'); + } + } + } + + public function del() { + if (IS_POST) { + $id = I('post.id'); + if ($id) { + $detail = D('ApiFields')->where(array('id' => $id))->find(); + if ($detail['type'] == 0) { + S('ApiRequest_' . $detail['hash'], null); + } else { + S('ApiResponse_' . $detail['hash'], null); + } + D('ApiFields')->where(array('id' => $id))->delete(); + $this->ajaxSuccess('操作成功'); + } else { + $this->ajaxError('缺少参数'); + } + } + } + + public function upload() { + if (IS_POST) { + $hash = I('post.hash'); + $type = I('post.type'); + $jsonStr = I('post.jsonStr'); + $jsonStr = html_entity_decode($jsonStr); + $data = json_decode($jsonStr, true); + D('ApiList')->where(array('hash' => $hash))->save(array('returnStr' => json_encode($data))); + $this->handle($data['data'], $dataArr); + $old = D('ApiFields')->where(array( + 'hash' => $hash, + 'type' => $type + ))->select(); + $oldArr = array_column($old, 'showName'); + $newArr = array_column($dataArr, 'showName'); + $addArr = array_diff($newArr, $oldArr); + $delArr = array_diff($oldArr, $newArr); + if ($delArr) { + D('ApiFields')->where(array('showName' => array('in', $delArr)))->delete(); + } + if ($addArr) { + $addData = array(); + foreach ($dataArr as $item) { + if (in_array($item['showName'], $addArr)) { + $addData[] = $item; + } + } + D('ApiFields')->addAll($addData); + } + if ($type == 0) { + S('ApiRequest_' . $hash, null); + } else { + S('ApiResponse_' . $hash, null); + } + S('ApiReturnType_' . $hash, null); + $this->ajaxSuccess('操作成功'); + } else { + $this->display(); + } + } + + private function handle($data, &$dataArr, $prefix = 'data', $index = 'data') { + if (!$this->isAssoc($data)) { + $addArr = array( + 'fieldName' => $index, + 'showName' => $prefix, + 'hash' => I('post.hash'), + 'isMust' => 1, + 'dataType' => DataType::TYPE_ARRAY, + 'type' => I('post.type') + ); + $dataArr[] = $addArr; + $prefix .= '[]'; + if (is_array($data[0])) { + $this->handle($data[0], $dataArr, $prefix); + } + } else { + $addArr = array( + 'fieldName' => $index, + 'showName' => $prefix, + 'hash' => I('post.hash'), + 'isMust' => 1, + 'dataType' => DataType::TYPE_OBJECT, + 'type' => I('post.type') + ); + $dataArr[] = $addArr; + $prefix .= '{}'; + foreach ($data as $index => $datum) { + $myPre = $prefix . $index; + $addArr = array( + 'fieldName' => $index, + 'showName' => $myPre, + 'hash' => I('post.hash'), + 'isMust' => 1, + 'dataType' => DataType::TYPE_STRING, + 'type' => I('post.type') + ); + if (is_numeric($datum)) { + if (preg_match('/^\d*$/', $datum)) { + $addArr['dataType'] = DataType::TYPE_INTEGER; + } else { + $addArr['dataType'] = DataType::TYPE_FLOAT; + } + $dataArr[] = $addArr; + } elseif (is_array($datum)) { + $this->handle($datum, $dataArr, $myPre, $index); + } else { + $addArr['dataType'] = DataType::TYPE_STRING; + $dataArr[] = $addArr; + } + } + } + } + + /** + * 判断是否是关联数组(true表示是关联数组) + * @param array $arr + * @author zhaoxiang + * @return bool + */ + private function isAssoc(array $arr) { + if (array() === $arr) return false; + + return array_keys($arr) !== range(0, count($arr) - 1); + } +} diff --git a/application/admin/controller/InterfaceList.php b/application/admin/controller/InterfaceList.php index 0b67511..9863e2f 100644 --- a/application/admin/controller/InterfaceList.php +++ b/application/admin/controller/InterfaceList.php @@ -1,6 +1,6 @@ */ diff --git a/application/admin/controller/Menu.php b/application/admin/controller/Menu.php index cc9fa1d..24f2474 100644 --- a/application/admin/controller/Menu.php +++ b/application/admin/controller/Menu.php @@ -1,6 +1,6 @@ */ diff --git a/application/admin/controller/User.php b/application/admin/controller/User.php index a34f231..08835a6 100644 --- a/application/admin/controller/User.php +++ b/application/admin/controller/User.php @@ -1,6 +1,6 @@ */