diff --git a/api/assets/AppAsset.php b/api/assets/AppAsset.php new file mode 100644 index 0000000..6a7b360 --- /dev/null +++ b/api/assets/AppAsset.php @@ -0,0 +1,26 @@ + 'api', + 'basePath' => dirname(__DIR__), + 'controllerNamespace' => 'api\controllers', + 'bootstrap' => ['log'], + 'modules' => [], + 'components' => [ + 'request' => [ + 'parsers' => [ + 'application/json' => 'yii\web\JsonParser', + ], + 'csrfParam' => '_csrf-backend', + ], + 'user' => [ + 'identityClass' => 'common\models\User', + 'enableAutoLogin' => true, + 'identityCookie' => ['name' => '_identity-backend', 'httpOnly' => true], + ], + 'session' => [ + // this is the name of the session cookie used for login on the app + 'name' => 'advanced-api', + ], + 'log' => [ + 'traceLevel' => YII_DEBUG ? 3 : 0, + 'targets' => [ + [ + 'class' => 'yii\log\FileTarget', + 'levels' => ['error', 'warning'], + ], + ], + ], + 'errorHandler' => [ + 'errorAction' => 'site/error', + ], + 'urlManager' => [ + 'enablePrettyUrl' => true, + 'showScriptName' => true, + 'enableStrictParsing' => false, + 'rules' => [ + ['class' => 'yii\rest\UrlRule', 'controller' => 'test'], + ], + ], + ], + 'params' => $params, +]; diff --git a/api/config/params.php b/api/config/params.php new file mode 100644 index 0000000..d0b9c34 --- /dev/null +++ b/api/config/params.php @@ -0,0 +1,3 @@ + [ + 'class' => 'yii\web\ErrorAction', + ], + ]; + } +} diff --git a/api/controllers/TestController.php b/api/controllers/TestController.php new file mode 100644 index 0000000..7ede9df --- /dev/null +++ b/api/controllers/TestController.php @@ -0,0 +1,59 @@ + Goods::find(), + 'pagination' => [ + 'pageSize' => 1, + ], + ]); + } +} diff --git a/api/runtime/.gitignore b/api/runtime/.gitignore new file mode 100644 index 0000000..c96a04f --- /dev/null +++ b/api/runtime/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/api/views/site/error.php b/api/views/site/error.php new file mode 100644 index 0000000..0ba2574 --- /dev/null +++ b/api/views/site/error.php @@ -0,0 +1,27 @@ +title = $name; +?> +
+ +

title) ?>

+ +
+ +
+ +

+ The above error occurred while the Web server was processing your request. +

+

+ Please contact us if you think this is a server error. Thank you. +

+ +
diff --git a/api/web/.gitignore b/api/web/.gitignore new file mode 100644 index 0000000..ab89d98 --- /dev/null +++ b/api/web/.gitignore @@ -0,0 +1,5 @@ +/index.php +/index-test.php +/robots.txt +uploads + diff --git a/api/web/assets/.gitignore b/api/web/assets/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/api/web/assets/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/api/web/css/site.css b/api/web/css/site.css new file mode 100644 index 0000000..f787e34 --- /dev/null +++ b/api/web/css/site.css @@ -0,0 +1,120 @@ +html, +body { + height: 100%; +} + +.wrap { + min-height: 100%; + height: auto; + margin: 0 auto -60px; + padding: 0 0 60px; +} + +.wrap > .container { + padding: 70px 15px 20px; +} + +.footer { + height: 60px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + padding-top: 20px; +} + +.jumbotron { + text-align: center; + background-color: transparent; +} + +.jumbotron .btn { + font-size: 21px; + padding: 14px 24px; +} + +.not-set { + color: #c55; + font-style: italic; +} + +/* add sorting icons to gridview sort links */ +a.asc:after, a.desc:after { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + padding-left: 5px; +} + +a.asc:after { + content: /*"\e113"*/ "\e151"; +} + +a.desc:after { + content: /*"\e114"*/ "\e152"; +} + +.sort-numerical a.asc:after { + content: "\e153"; +} + +.sort-numerical a.desc:after { + content: "\e154"; +} + +.sort-ordinal a.asc:after { + content: "\e155"; +} + +.sort-ordinal a.desc:after { + content: "\e156"; +} + +.grid-view td { + white-space: nowrap; +} + +.grid-view .filters input, +.grid-view .filters select { + min-width: 50px; +} + +.hint-block { + display: block; + margin-top: 5px; + color: #999; +} + +.error-summary { + color: #a94442; + background: #fdf7f7; + border-left: 3px solid #eed3d7; + padding: 10px 20px; + margin: 0 0 15px 0; +} + +/* align the logout "link" (button in forms) of the navbar */ +.nav li > form > button.logout { + padding: 15px; + border: none; +} + +@media(max-width:767px) { + .nav li > form > button.logout { + display:block; + text-align: left; + width: 100%; + padding: 10px 15px; + } +} + +.nav > li > form > button.logout:focus, +.nav > li > form > button.logout:hover { + text-decoration: none; +} + +.nav > li > form > button.logout:focus { + outline: none; +} diff --git a/api/web/favicon.ico b/api/web/favicon.ico new file mode 100644 index 0000000..580ed73 Binary files /dev/null and b/api/web/favicon.ico differ diff --git a/backend/web/uploads/xls/15738696921690.jpg b/backend/web/uploads/xls/15738696921690.jpg deleted file mode 100644 index ca03e9a..0000000 Binary files a/backend/web/uploads/xls/15738696921690.jpg and /dev/null differ diff --git a/datadictionary.md b/datadictionary.md deleted file mode 100644 index e69de29..0000000 diff --git a/vendor/iron/grid/GridView.php b/vendor/iron/grid/GridView.php index 809a4ad..c2f2ca9 100644 --- a/vendor/iron/grid/GridView.php +++ b/vendor/iron/grid/GridView.php @@ -219,6 +219,7 @@ class GridView extends BaseListView
{batch} + {create} {export} @@ -259,16 +260,17 @@ HTML;
HTML; public $export =<< +
HTML; public $create =<<添加 + 添加 + HTML; /** * @var @@ -295,14 +297,14 @@ HTML; throw new InvalidConfigException('The "formatter" property must be either a Format object or a configuration array.'); } $this->pager = [ - 'options'=>['class'=>['justify-content-end','pagination']], - 'linkOptions'=>['class'=>'page-link'], - 'pageCssClass'=>'paginate_button page-item', - 'disabledPageCssClass'=>'page-link disabled', - 'firstPageLabel'=>'«', - 'prevPageLabel'=>'‹', - 'nextPageLabel'=>'›', - 'lastPageLabel'=>'»',]; + 'options' => ['class' => ['justify-content-end', 'pagination']], + 'linkOptions' => ['class' => 'page-link'], + 'pageCssClass' => 'paginate_button page-item', + 'disabledPageCssClass' => 'page-link disabled', + 'firstPageLabel' => '«', + 'prevPageLabel' => '‹', + 'nextPageLabel' => '›', + 'lastPageLabel' => '»',]; $this->initColumns(); } @@ -459,6 +461,8 @@ SCRIPT; return $this->renderFilter(); case '{batch}': return $this->renderBatch(); + case '{url}': + return Yii::$app->request->url; case '{export}': return $this->renderExport(); case '{create}': diff --git a/vendor/iron/widgets/Menu.php b/vendor/iron/widgets/Menu.php index 4da4c21..f4d2a66 100644 --- a/vendor/iron/widgets/Menu.php +++ b/vendor/iron/widgets/Menu.php @@ -36,7 +36,7 @@ use yii\helpers\Url; * 参照yii\widgets\Menu,根据AdminLTE样式从写的一个小物件 * @author Blobt * @email 380255922@qq.com - * 使用例子 + * 使用例子 * [ @@ -50,10 +50,11 @@ use yii\helpers\Url; * ] * ]); * ?> - * - * + * + * */ -class Menu extends Widget { +class Menu extends Widget +{ /** * @var array 菜单的item数组。 @@ -132,8 +133,8 @@ class Menu extends Widget { public $options = [ 'class' => 'nav nav-pills nav-sidebar flex-column', 'data-widget' => 'treeview', - 'role'=>'menu', - 'data-accordion'=>'false' + 'role' => 'menu', + 'data-accordion' => 'false' ]; /** @@ -164,7 +165,8 @@ class Menu extends Widget { /** * 渲染菜单 */ - public function run() { + public function run() + { if ($this->route === null && Yii::$app->controller !== null) { $this->route = Yii::$app->controller->getRoute(); } @@ -186,7 +188,8 @@ class Menu extends Widget { * @param array $items * @return string 渲染结果 */ - protected function renderItems($items) { + protected function renderItems($items) + { $lines = []; $n = count($items); foreach ($items as $i => $item) { @@ -234,7 +237,8 @@ class Menu extends Widget { * @param array $item * @return string 渲染结果 */ - protected function renderItem($item) { + protected function renderItem($item) + { if (isset($item['url'])) { if (isset($item['template'])) { $template = $item['template']; @@ -244,7 +248,7 @@ class Menu extends Widget { return strtr($template, [ '{url}' => Html::encode(Url::to($item['url'])), '{label}' => Html::encode($item['label']), - '{class}'=>isset($item['active'])?'active':'', + '{class}' => isset($item['active']) ? 'active' : '', '{icon}' => Html::encode($item['icon']) ]); } @@ -253,7 +257,7 @@ class Menu extends Widget { return strtr($template, [ '{label}' => $item['label'], - '{class}'=>isset($item['active'])?'active':'' + '{class}' => isset($item['active']) ? 'active' : '' ]); } @@ -262,21 +266,31 @@ class Menu extends Widget { * @param $item array * @return boolean $item */ - protected function isItemActive($item) { + protected function isItemActive($item) + { if (isset($item['url']) && is_array($item['url']) && isset($item['url'][0])) { $route = Yii::getAlias($item['url'][0]); - if ($route[0] !== '/' && Yii::$app->controller) { $route = Yii::$app->controller->module->getUniqueId() . '/' . $route; } - if (ltrim($route, '/') !== $this->route) { + $route = ltrim($route, '/'); + if ($route != substr($this->route, 0, strrpos($this->route, '/')) && $route != $this->route && + ltrim(Yii::$app->request->url, '/') !== $route) { + return false; } + unset($item['url']['#']); + if (count($item['url']) > 1) { + foreach (array_splice($item['url'], 1) as $name => $value) { + if ($value !== null && (!isset($this->params[$name]) || $this->params[$name] != $value)) { + return false; + } + } + } return true; } - return false; } @@ -285,7 +299,8 @@ class Menu extends Widget { * @param string $item * @param bool $active */ - protected function normalizeItems($items, &$active) { + protected function normalizeItems($items, &$active) + { foreach ($items as $i => $item) { /* 去除visible 为 false的item */ if (isset($item['visible']) && !$item['visible']) {