提交代码
This commit is contained in:
17
vendor/encore/laravel-admin/.github/stale.yml
vendored
Normal file
17
vendor/encore/laravel-admin/.github/stale.yml
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
# Number of days of inactivity before an issue becomes stale
|
||||
daysUntilStale: 60
|
||||
# Number of days of inactivity before a stale issue is closed
|
||||
daysUntilClose: 7
|
||||
# Issues with these labels will never be considered stale
|
||||
exemptLabels:
|
||||
- pinned
|
||||
- security
|
||||
# Label to use when marking an issue as stale
|
||||
staleLabel: wontfix
|
||||
# Comment to post when marking an issue as stale. Set to `false` to disable
|
||||
markComment: >
|
||||
This issue has been automatically marked as stale because it has not had
|
||||
recent activity. It will be closed if no further activity occurs. Thank you
|
||||
for your contributions.
|
||||
# Comment to post when closing a stale issue. Set to `false` to disable
|
||||
closeComment: false
|
||||
9
vendor/encore/laravel-admin/.gitignore
vendored
Normal file
9
vendor/encore/laravel-admin/.gitignore
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
.DS_Store
|
||||
phpunit.phar
|
||||
/vendor
|
||||
composer.phar
|
||||
composer.lock
|
||||
*.project
|
||||
.idea/
|
||||
.php_cs.cache
|
||||
.vscode/
|
||||
22
vendor/encore/laravel-admin/.travis.yml
vendored
Normal file
22
vendor/encore/laravel-admin/.travis.yml
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
language: php
|
||||
|
||||
php:
|
||||
- 7
|
||||
|
||||
matrix:
|
||||
fast_finish: true
|
||||
allow_failures:
|
||||
- php: hhvm
|
||||
|
||||
sudo: false
|
||||
|
||||
services:
|
||||
- mysql
|
||||
|
||||
before_script:
|
||||
- mysql -e 'create database if not exists laravel_admin_test;'
|
||||
- travis_retry composer self-update
|
||||
- travis_retry composer install --no-interaction
|
||||
|
||||
script:
|
||||
- composer test
|
||||
2
vendor/encore/laravel-admin/CHANGELOG.md
vendored
Normal file
2
vendor/encore/laravel-admin/CHANGELOG.md
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
# Changelog
|
||||
See https://laravel-admin.org/docs/
|
||||
67
vendor/encore/laravel-admin/CONTRIBUTING.md
vendored
Normal file
67
vendor/encore/laravel-admin/CONTRIBUTING.md
vendored
Normal file
@@ -0,0 +1,67 @@
|
||||
# Contribute
|
||||
|
||||
## Introduction
|
||||
|
||||
First, thank you for considering contributing to laravel-admin! It's people like you that make the open source community such a great community! 😊
|
||||
|
||||
We welcome any type of contribution, not only code. You can help with
|
||||
- **QA**: file bug reports, the more details you can give the better (e.g. screenshots with the console open)
|
||||
- **Marketing**: writing blog posts, howto's, printing stickers, ...
|
||||
- **Community**: presenting the project at meetups, organizing a dedicated meetup for the local community, ...
|
||||
- **Code**: take a look at the [open issues](issues). Even if you can't write code, commenting on them, showing that you care about a given issue matters. It helps us triage them.
|
||||
- **Money**: we welcome financial contributions in full transparency on our [open collective](https://opencollective.com/laravel-admin).
|
||||
|
||||
## Your First Contribution
|
||||
|
||||
Working on your first Pull Request? You can learn how from this *free* series, [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github).
|
||||
|
||||
## Submitting code
|
||||
|
||||
Any code change should be submitted as a pull request. The description should explain what the code does and give steps to execute it. The pull request should also contain tests.
|
||||
|
||||
## Code review process
|
||||
|
||||
The bigger the pull request, the longer it will take to review and merge. Try to break down large pull requests in smaller chunks that are easier to review and merge.
|
||||
It is also always helpful to have some context for your pull request. What was the purpose? Why does it matter to you?
|
||||
|
||||
## Financial contributions
|
||||
|
||||
We also welcome financial contributions in full transparency on our [open collective](https://opencollective.com/laravel-admin).
|
||||
Anyone can file an expense. If the expense makes sense for the development of the community, it will be "merged" in the ledger of our open collective by the core contributors and the person who filed the expense will be reimbursed.
|
||||
|
||||
## Questions
|
||||
|
||||
If you have any questions, create an [issue](issue) (protip: do a quick search first to see if someone else didn't ask the same question before!).
|
||||
You can also reach us at hello@laravel-admin.opencollective.com.
|
||||
|
||||
## Credits
|
||||
|
||||
### Contributors
|
||||
|
||||
Thank you to all the people who have already contributed to laravel-admin!
|
||||
<a href="graphs/contributors"><img src="https://opencollective.com/laravel-admin/contributors.svg?width=890" /></a>
|
||||
|
||||
|
||||
### Backers
|
||||
|
||||
Thank you to all our backers! [[Become a backer](https://opencollective.com/laravel-admin#backer)]
|
||||
|
||||
<a href="https://opencollective.com/laravel-admin#backers" target="_blank"><img src="https://opencollective.com/laravel-admin/backers.svg?width=890"></a>
|
||||
|
||||
|
||||
### Sponsors
|
||||
|
||||
Thank you to all our sponsors! (please ask your company to also support this open source project by [becoming a sponsor](https://opencollective.com/laravel-admin#sponsor))
|
||||
|
||||
<a href="https://opencollective.com/laravel-admin/sponsor/0/website" target="_blank"><img src="https://opencollective.com/laravel-admin/sponsor/0/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/laravel-admin/sponsor/1/website" target="_blank"><img src="https://opencollective.com/laravel-admin/sponsor/1/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/laravel-admin/sponsor/2/website" target="_blank"><img src="https://opencollective.com/laravel-admin/sponsor/2/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/laravel-admin/sponsor/3/website" target="_blank"><img src="https://opencollective.com/laravel-admin/sponsor/3/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/laravel-admin/sponsor/4/website" target="_blank"><img src="https://opencollective.com/laravel-admin/sponsor/4/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/laravel-admin/sponsor/5/website" target="_blank"><img src="https://opencollective.com/laravel-admin/sponsor/5/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/laravel-admin/sponsor/6/website" target="_blank"><img src="https://opencollective.com/laravel-admin/sponsor/6/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/laravel-admin/sponsor/7/website" target="_blank"><img src="https://opencollective.com/laravel-admin/sponsor/7/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/laravel-admin/sponsor/8/website" target="_blank"><img src="https://opencollective.com/laravel-admin/sponsor/8/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/laravel-admin/sponsor/9/website" target="_blank"><img src="https://opencollective.com/laravel-admin/sponsor/9/avatar.svg"></a>
|
||||
|
||||
<!-- This `CONTRIBUTING.md` is based on @nayafia's template https://github.com/nayafia/contributing-template -->
|
||||
4
vendor/encore/laravel-admin/FUNDING.yml
vendored
Normal file
4
vendor/encore/laravel-admin/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
open_collective: laravel-admin
|
||||
custom: http://laravel-admin.org/donate
|
||||
20
vendor/encore/laravel-admin/LICENSE
vendored
Normal file
20
vendor/encore/laravel-admin/LICENSE
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015 Jens Segers
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
158
vendor/encore/laravel-admin/README.md
vendored
Normal file
158
vendor/encore/laravel-admin/README.md
vendored
Normal file
@@ -0,0 +1,158 @@
|
||||
<p align="center">
|
||||
<a href="https://laravel-admin.org/">
|
||||
<img src="https://laravel-admin.org/images/logo002.png" alt="laravel-admin">
|
||||
</a>
|
||||
|
||||
<p align="center">⛵<code>laravel-admin</code> is administrative interface builder for laravel which can help you build CRUD backends just with few lines of code.</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://laravel-admin.org/docs">Documentation</a> |
|
||||
<a href="https://laravel-admin.org/docs/zh">中文文档</a> |
|
||||
<a href="https://demo.laravel-admin.org">Demo</a> |
|
||||
<a href="https://github.com/z-song/demo.laravel-admin.org">Demo source code</a> |
|
||||
<a href="#extensions">Extensions</a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://travis-ci.org/z-song/laravel-admin">
|
||||
<img src="https://travis-ci.org/z-song/laravel-admin.svg?branch=master" alt="Build Status">
|
||||
</a>
|
||||
<a href="https://styleci.io/repos/48796179">
|
||||
<img src="https://styleci.io/repos/48796179/shield" alt="StyleCI">
|
||||
</a>
|
||||
<a href="https://packagist.org/packages/encore/laravel-admin">
|
||||
<img src="https://img.shields.io/packagist/l/encore/laravel-admin.svg?maxAge=2592000&&style=flat-square" alt="Packagist">
|
||||
</a>
|
||||
<a href="https://packagist.org/packages/encore/laravel-admin">
|
||||
<img src="https://img.shields.io/packagist/dt/encore/laravel-admin.svg?style=flat-square" alt="Total Downloads">
|
||||
</a>
|
||||
<a href="https://github.com/z-song/laravel-admin">
|
||||
<img src="https://img.shields.io/badge/Awesome-Laravel-brightgreen.svg?style=flat-square" alt="Awesome Laravel">
|
||||
</a>
|
||||
<a href="#backers" alt="sponsors on Open Collective">
|
||||
<img src="https://opencollective.com/laravel-admin/backers/badge.svg?style=flat-square" />
|
||||
</a>
|
||||
<a href="https://www.paypal.me/zousong" alt="Paypal donate">
|
||||
<img src="https://img.shields.io/badge/Donate-Paypal-green.svg?style=flat-square" />
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<p align="center">
|
||||
Inspired by <a href="https://github.com/sleeping-owl/admin" target="_blank">SleepingOwlAdmin</a> and <a href="https://github.com/zofe/rapyd-laravel" target="_blank">rapyd-laravel</a>.
|
||||
</p>
|
||||
|
||||
Screenshots
|
||||
------------
|
||||
|
||||

|
||||
|
||||
Requirements
|
||||
------------
|
||||
- PHP >= 7.0.0
|
||||
- Laravel >= 5.5.0
|
||||
- Fileinfo PHP Extension
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
||||
> This package requires PHP 7+ and Laravel 5.5, for old versions please refer to [1.4](https://laravel-admin.org/docs/v1.4/#/)
|
||||
|
||||
First, install laravel 5.5, and make sure that the database connection settings are correct.
|
||||
|
||||
```
|
||||
composer require encore/laravel-admin
|
||||
```
|
||||
|
||||
Then run these commands to publish assets and config:
|
||||
|
||||
```
|
||||
php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"
|
||||
```
|
||||
After run command you can find config file in `config/admin.php`, in this file you can change the install directory,db connection or table names.
|
||||
|
||||
At last run following command to finish install.
|
||||
```
|
||||
php artisan admin:install
|
||||
```
|
||||
|
||||
Open `http://localhost/admin/` in browser,use username `admin` and password `admin` to login.
|
||||
|
||||
Configurations
|
||||
------------
|
||||
The file `config/admin.php` contains an array of configurations, you can find the default configurations in there.
|
||||
|
||||
## Extensions
|
||||
|
||||
| Extension | Description | laravel-admin |
|
||||
| ------------------------------------------------ | ---------------------------------------- |---------------------------------------- |
|
||||
| [helpers](https://github.com/laravel-admin-extensions/helpers) | Several tools to help you in development | ~1.5 |
|
||||
| [media-manager](https://github.com/laravel-admin-extensions/media-manager) | Provides a web interface to manage local files | ~1.5 |
|
||||
| [api-tester](https://github.com/laravel-admin-extensions/api-tester) | Help you to test the local laravel APIs |~1.5 |
|
||||
| [scheduling](https://github.com/laravel-admin-extensions/scheduling) | Scheduling task manager for laravel-admin |~1.5 |
|
||||
| [redis-manager](https://github.com/laravel-admin-extensions/redis-manager) | Redis manager for laravel-admin |~1.5 |
|
||||
| [backup](https://github.com/laravel-admin-extensions/backup) | An admin interface for managing backups |~1.5 |
|
||||
| [log-viewer](https://github.com/laravel-admin-extensions/log-viewer) | Log viewer for laravel |~1.5 |
|
||||
| [config](https://github.com/laravel-admin-extensions/config) | Config manager for laravel-admin |~1.5 |
|
||||
| [reporter](https://github.com/laravel-admin-extensions/reporter) | Provides a developer-friendly web interface to view the exception |~1.5 |
|
||||
| [wangEditor](https://github.com/laravel-admin-extensions/wangEditor) | A rich text editor based on [wangeditor](http://www.wangeditor.com/) |~1.6 |
|
||||
| [summernote](https://github.com/laravel-admin-extensions/summernote) | A rich text editor based on [summernote](https://summernote.org/) |~1.6 |
|
||||
| [china-distpicker](https://github.com/laravel-admin-extensions/china-distpicker) | 一个基于[distpicker](https://github.com/fengyuanchen/distpicker)的中国省市区选择器 |~1.6 |
|
||||
| [simplemde](https://github.com/laravel-admin-extensions/simplemde) | A markdown editor based on [simplemde](https://github.com/sparksuite/simplemde-markdown-editor) |~1.6 |
|
||||
| [phpinfo](https://github.com/laravel-admin-extensions/phpinfo) | Integrate the `phpinfo` page into laravel-admin |~1.6 |
|
||||
| [php-editor](https://github.com/laravel-admin-extensions/php-editor) <br/> [python-editor](https://github.com/laravel-admin-extensions/python-editor) <br/> [js-editor](https://github.com/laravel-admin-extensions/js-editor)<br/> [css-editor](https://github.com/laravel-admin-extensions/css-editor)<br/> [clike-editor](https://github.com/laravel-admin-extensions/clike-editor)| Several programing language editor extensions based on code-mirror |~1.6 |
|
||||
| [star-rating](https://github.com/laravel-admin-extensions/star-rating) | Star Rating extension for laravel-admin |~1.6 |
|
||||
| [json-editor](https://github.com/laravel-admin-extensions/json-editor) | JSON Editor for Laravel-admin |~1.6 |
|
||||
| [grid-lightbox](https://github.com/laravel-admin-extensions/grid-lightbox) | Turn your grid into a lightbox & gallery |~1.6 |
|
||||
| [daterangepicker](https://github.com/laravel-admin-extensions/daterangepicker) | Integrates daterangepicker into laravel-admin |~1.6 |
|
||||
| [material-ui](https://github.com/laravel-admin-extensions/material-ui) | Material-UI extension for laravel-admin |~1.6 |
|
||||
| [sparkline](https://github.com/laravel-admin-extensions/sparkline) | Integrates jQuery sparkline into laravel-admin |~1.6 |
|
||||
| [chartjs](https://github.com/laravel-admin-extensions/chartjs) | Use Chartjs in laravel-admin |~1.6 |
|
||||
| [echarts](https://github.com/laravel-admin-extensions/echarts) | Use Echarts in laravel-admin |~1.6 |
|
||||
| [simditor](https://github.com/laravel-admin-extensions/simditor) | Integrates simditor full-rich editor into laravel-admin |~1.6 |
|
||||
| [cropper](https://github.com/laravel-admin-extensions/cropper) | A simple jQuery image cropping plugin. |~1.6 |
|
||||
| [composer-viewer](https://github.com/laravel-admin-extensions/composer-viewer) | A web interface of composer packages in laravel. |~1.6 |
|
||||
| [data-table](https://github.com/laravel-admin-extensions/data-table) | Advanced table widget for laravel-admin |~1.6 |
|
||||
|
||||
|
||||
## Contributors
|
||||
This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].
|
||||
<a href="graphs/contributors"><img src="https://opencollective.com/laravel-admin/contributors.svg?width=890&button=false" /></a>
|
||||
## Backers
|
||||
Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/laravel-admin#backer)]
|
||||
<a href="https://opencollective.com/laravel-admin#backers" target="_blank"><img src="https://opencollective.com/laravel-admin/backers.svg?width=890"></a>
|
||||
## Sponsors
|
||||
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/laravel-admin#sponsor)]
|
||||
<a href="https://opencollective.com/laravel-admin/sponsor/0/website" target="_blank"><img src="https://opencollective.com/laravel-admin/sponsor/0/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/laravel-admin/sponsor/1/website" target="_blank"><img src="https://opencollective.com/laravel-admin/sponsor/1/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/laravel-admin/sponsor/2/website" target="_blank"><img src="https://opencollective.com/laravel-admin/sponsor/2/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/laravel-admin/sponsor/3/website" target="_blank"><img src="https://opencollective.com/laravel-admin/sponsor/3/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/laravel-admin/sponsor/4/website" target="_blank"><img src="https://opencollective.com/laravel-admin/sponsor/4/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/laravel-admin/sponsor/5/website" target="_blank"><img src="https://opencollective.com/laravel-admin/sponsor/5/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/laravel-admin/sponsor/6/website" target="_blank"><img src="https://opencollective.com/laravel-admin/sponsor/6/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/laravel-admin/sponsor/7/website" target="_blank"><img src="https://opencollective.com/laravel-admin/sponsor/7/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/laravel-admin/sponsor/8/website" target="_blank"><img src="https://opencollective.com/laravel-admin/sponsor/8/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/laravel-admin/sponsor/9/website" target="_blank"><img src="https://opencollective.com/laravel-admin/sponsor/9/avatar.svg"></a>
|
||||
|
||||
Other
|
||||
------------
|
||||
`laravel-admin` based on following plugins or services:
|
||||
|
||||
+ [Laravel](https://laravel.com/)
|
||||
+ [AdminLTE](https://adminlte.io/)
|
||||
+ [Datetimepicker](http://eonasdan.github.io/bootstrap-datetimepicker/)
|
||||
+ [font-awesome](http://fontawesome.io)
|
||||
+ [moment](http://momentjs.com/)
|
||||
+ [Google map](https://www.google.com/maps)
|
||||
+ [Tencent map](http://lbs.qq.com/)
|
||||
+ [bootstrap-fileinput](https://github.com/kartik-v/bootstrap-fileinput)
|
||||
+ [jquery-pjax](https://github.com/defunkt/jquery-pjax)
|
||||
+ [Nestable](http://dbushell.github.io/Nestable/)
|
||||
+ [toastr](http://codeseven.github.io/toastr/)
|
||||
+ [X-editable](http://github.com/vitalets/x-editable)
|
||||
+ [bootstrap-number-input](https://github.com/wpic/bootstrap-number-input)
|
||||
+ [fontawesome-iconpicker](https://github.com/itsjavi/fontawesome-iconpicker)
|
||||
+ [sweetalert2](https://github.com/sweetalert2/sweetalert2)
|
||||
|
||||
License
|
||||
------------
|
||||
`laravel-admin` is licensed under [The MIT License (MIT)](LICENSE).
|
||||
64
vendor/encore/laravel-admin/composer.json
vendored
Normal file
64
vendor/encore/laravel-admin/composer.json
vendored
Normal file
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"name": "encore/laravel-admin",
|
||||
"description": "laravel admin",
|
||||
"type": "library",
|
||||
"keywords": ["laravel", "admin", "grid", "form"],
|
||||
"homepage": "https://github.com/z-song/laravel-admin",
|
||||
"license": "MIT",
|
||||
"version": "v1.7.7",
|
||||
"authors": [
|
||||
{
|
||||
"name": "zsong",
|
||||
"email": "zosong@126.com"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=7.0.0",
|
||||
"symfony/dom-crawler": "~3.1|~4.0",
|
||||
"laravel/framework": "~5.5|~6.0",
|
||||
"doctrine/dbal": "2.*"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "~6.0|~8.0",
|
||||
"laravel/laravel": "~5.5|~6.0",
|
||||
"symfony/css-selector": "~3.1",
|
||||
"fzaninotto/faker": "~1.4",
|
||||
"intervention/image": "~2.3",
|
||||
"laravel/browser-kit-testing": "^2.0"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Encore\\Admin\\": "src/"
|
||||
},
|
||||
"files": [
|
||||
"src/helpers.php"
|
||||
]
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"Tests\\Models\\": "tests/models",
|
||||
"Tests\\Controllers\\": "tests/controllers"
|
||||
},
|
||||
"classmap": [
|
||||
"tests/TestCase.php"
|
||||
]
|
||||
},
|
||||
"scripts": {
|
||||
"test": "./vendor/bin/phpunit"
|
||||
},
|
||||
"suggest": {
|
||||
"intervention/image": "Required to handling and manipulation upload images (~2.3).",
|
||||
"spatie/eloquent-sortable": "Required to built orderable gird."
|
||||
},
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"providers": [
|
||||
"Encore\\Admin\\AdminServiceProvider"
|
||||
],
|
||||
"aliases": {
|
||||
"Admin": "Encore\\Admin\\Facades\\Admin"
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
400
vendor/encore/laravel-admin/config/admin.php
vendored
Normal file
400
vendor/encore/laravel-admin/config/admin.php
vendored
Normal file
@@ -0,0 +1,400 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Laravel-admin name
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This value is the name of laravel-admin, This setting is displayed on the
|
||||
| login page.
|
||||
|
|
||||
*/
|
||||
'name' => 'Laravel-admin',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Laravel-admin logo
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The logo of all admin pages. You can also set it as an image by using a
|
||||
| `img` tag, eg '<img src="http://logo-url" alt="Admin logo">'.
|
||||
|
|
||||
*/
|
||||
'logo' => '<b>Laravel</b> admin',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Laravel-admin mini logo
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The logo of all admin pages when the sidebar menu is collapsed. You can
|
||||
| also set it as an image by using a `img` tag, eg
|
||||
| '<img src="http://logo-url" alt="Admin logo">'.
|
||||
|
|
||||
*/
|
||||
'logo-mini' => '<b>La</b>',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Laravel-admin bootstrap setting
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This value is the path of laravel-admin bootstrap file.
|
||||
|
|
||||
*/
|
||||
'bootstrap' => app_path('Admin/bootstrap.php'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Laravel-admin route settings
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The routing configuration of the admin page, including the path prefix,
|
||||
| the controller namespace, and the default middleware. If you want to
|
||||
| access through the root path, just set the prefix to empty string.
|
||||
|
|
||||
*/
|
||||
'route' => [
|
||||
|
||||
'prefix' => env('ADMIN_ROUTE_PREFIX', 'admin'),
|
||||
|
||||
'namespace' => 'App\\Admin\\Controllers',
|
||||
|
||||
'middleware' => ['web', 'admin'],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Laravel-admin install directory
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The installation directory of the controller and routing configuration
|
||||
| files of the administration page. The default is `app/Admin`, which must
|
||||
| be set before running `artisan admin::install` to take effect.
|
||||
|
|
||||
*/
|
||||
'directory' => app_path('Admin'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Laravel-admin html title
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Html title for all pages.
|
||||
|
|
||||
*/
|
||||
'title' => 'Admin',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Access via `https`
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| If your page is going to be accessed via https, set it to `true`.
|
||||
|
|
||||
*/
|
||||
'https' => env('ADMIN_HTTPS', false),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Laravel-admin auth setting
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Authentication settings for all admin pages. Include an authentication
|
||||
| guard and a user provider setting of authentication driver.
|
||||
|
|
||||
| You can specify a controller for `login` `logout` and other auth routes.
|
||||
|
|
||||
*/
|
||||
'auth' => [
|
||||
|
||||
'controller' => App\Admin\Controllers\AuthController::class,
|
||||
|
||||
'guard' => 'admin',
|
||||
|
||||
'guards' => [
|
||||
'admin' => [
|
||||
'driver' => 'session',
|
||||
'provider' => 'admin',
|
||||
],
|
||||
],
|
||||
|
||||
'providers' => [
|
||||
'admin' => [
|
||||
'driver' => 'eloquent',
|
||||
'model' => Encore\Admin\Auth\Database\Administrator::class,
|
||||
],
|
||||
],
|
||||
|
||||
// Add "remember me" to login form
|
||||
'remember' => true,
|
||||
|
||||
// Redirect to the specified URI when user is not authorized.
|
||||
'redirect_to' => 'auth/login',
|
||||
|
||||
// The URIs that should be excluded from authorization.
|
||||
'excepts' => [
|
||||
'auth/login',
|
||||
'auth/logout',
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Laravel-admin upload setting
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| File system configuration for form upload files and images, including
|
||||
| disk and upload path.
|
||||
|
|
||||
*/
|
||||
'upload' => [
|
||||
|
||||
// Disk in `config/filesystem.php`.
|
||||
'disk' => 'admin',
|
||||
|
||||
// Image and file upload path under the disk above.
|
||||
'directory' => [
|
||||
'image' => 'images',
|
||||
'file' => 'files',
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Laravel-admin database settings
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here are database settings for laravel-admin builtin model & tables.
|
||||
|
|
||||
*/
|
||||
'database' => [
|
||||
|
||||
// Database connection for following tables.
|
||||
'connection' => '',
|
||||
|
||||
// User tables and model.
|
||||
'users_table' => 'admin_users',
|
||||
'users_model' => Encore\Admin\Auth\Database\Administrator::class,
|
||||
|
||||
// Role table and model.
|
||||
'roles_table' => 'admin_roles',
|
||||
'roles_model' => Encore\Admin\Auth\Database\Role::class,
|
||||
|
||||
// Permission table and model.
|
||||
'permissions_table' => 'admin_permissions',
|
||||
'permissions_model' => Encore\Admin\Auth\Database\Permission::class,
|
||||
|
||||
// Menu table and model.
|
||||
'menu_table' => 'admin_menu',
|
||||
'menu_model' => Encore\Admin\Auth\Database\Menu::class,
|
||||
|
||||
// Pivot table for table above.
|
||||
'operation_log_table' => 'admin_operation_log',
|
||||
'user_permissions_table' => 'admin_user_permissions',
|
||||
'role_users_table' => 'admin_role_users',
|
||||
'role_permissions_table' => 'admin_role_permissions',
|
||||
'role_menu_table' => 'admin_role_menu',
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| User operation log setting
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| By setting this option to open or close operation log in laravel-admin.
|
||||
|
|
||||
*/
|
||||
'operation_log' => [
|
||||
|
||||
'enable' => true,
|
||||
|
||||
/*
|
||||
* Only logging allowed methods in the list
|
||||
*/
|
||||
'allowed_methods' => ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'CONNECT', 'OPTIONS', 'TRACE', 'PATCH'],
|
||||
|
||||
/*
|
||||
* Routes that will not log to database.
|
||||
*
|
||||
* All method to path like: admin/auth/logs
|
||||
* or specific method to path like: get:admin/auth/logs.
|
||||
*/
|
||||
'except' => [
|
||||
'admin/auth/logs*',
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Indicates whether to check route permission.
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
'check_route_permission' => true,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Indicates whether to check menu roles.
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
'check_menu_roles' => true,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| User default avatar
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Set a default avatar for newly created users.
|
||||
|
|
||||
*/
|
||||
'default_avatar' => '/vendor/laravel-admin/AdminLTE/dist/img/user2-160x160.jpg',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Admin map field provider
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Supported: "tencent", "google", "yandex".
|
||||
|
|
||||
*/
|
||||
'map_provider' => 'google',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Skin
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This value is the skin of admin pages.
|
||||
| @see https://adminlte.io/docs/2.4/layout
|
||||
|
|
||||
| Supported:
|
||||
| "skin-blue", "skin-blue-light", "skin-yellow", "skin-yellow-light",
|
||||
| "skin-green", "skin-green-light", "skin-purple", "skin-purple-light",
|
||||
| "skin-red", "skin-red-light", "skin-black", "skin-black-light".
|
||||
|
|
||||
*/
|
||||
'skin' => 'skin-blue-light',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application layout
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This value is the layout of admin pages.
|
||||
| @see https://adminlte.io/docs/2.4/layout
|
||||
|
|
||||
| Supported: "fixed", "layout-boxed", "layout-top-nav", "sidebar-collapse",
|
||||
| "sidebar-mini".
|
||||
|
|
||||
*/
|
||||
'layout' => ['sidebar-mini', 'sidebar-collapse'],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Login page background image
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This value is used to set the background image of login page.
|
||||
|
|
||||
*/
|
||||
'login_background_image' => '',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Show version at footer
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Whether to display the version number of laravel-admin at the footer of
|
||||
| each page
|
||||
|
|
||||
*/
|
||||
'show_version' => true,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Show environment at footer
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Whether to display the environment at the footer of each page
|
||||
|
|
||||
*/
|
||||
'show_environment' => true,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Menu bind to permission
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| whether enable menu bind to a permission
|
||||
*/
|
||||
'menu_bind_permission' => true,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Enable default breadcrumb
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Whether enable default breadcrumb for every page content.
|
||||
*/
|
||||
'enable_default_breadcrumb' => true,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Enable/Disable assets minify
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
'minify_assets' => [
|
||||
|
||||
// Assets will not be minified.
|
||||
'excepts' => [
|
||||
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Enable/Disable sidebar menu search
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
'enable_menu_search' => true,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Alert message that will displayed on top of the page.
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
'top_alert' => '',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| The global Grid action display class.
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
'grid_action_class' => \Encore\Admin\Grid\Displayers\DropdownActions::class,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Extension Directory
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When you use command `php artisan admin:extend` to generate extensions,
|
||||
| the extension files will be generated in this directory.
|
||||
*/
|
||||
'extension_dir' => app_path('Admin/Extensions'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Settings for extensions.
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| You can find all available extensions here
|
||||
| https://github.com/laravel-admin-extensions.
|
||||
|
|
||||
*/
|
||||
'extensions' => [
|
||||
|
||||
],
|
||||
];
|
||||
119
vendor/encore/laravel-admin/database/migrations/2016_01_04_173148_create_admin_tables.php
vendored
Normal file
119
vendor/encore/laravel-admin/database/migrations/2016_01_04_173148_create_admin_tables.php
vendored
Normal file
@@ -0,0 +1,119 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateAdminTables extends Migration
|
||||
{
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getConnection()
|
||||
{
|
||||
return config('admin.database.connection') ?: config('database.default');
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create(config('admin.database.users_table'), function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->string('username', 190)->unique();
|
||||
$table->string('password', 60);
|
||||
$table->string('name');
|
||||
$table->string('avatar')->nullable();
|
||||
$table->string('remember_token', 100)->nullable();
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
Schema::create(config('admin.database.roles_table'), function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->string('name', 50)->unique();
|
||||
$table->string('slug', 50)->unique();
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
Schema::create(config('admin.database.permissions_table'), function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->string('name', 50)->unique();
|
||||
$table->string('slug', 50)->unique();
|
||||
$table->string('http_method')->nullable();
|
||||
$table->text('http_path')->nullable();
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
Schema::create(config('admin.database.menu_table'), function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('parent_id')->default(0);
|
||||
$table->integer('order')->default(0);
|
||||
$table->string('title', 50);
|
||||
$table->string('icon', 50);
|
||||
$table->string('uri', 50)->nullable();
|
||||
$table->string('permission')->nullable();
|
||||
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
Schema::create(config('admin.database.role_users_table'), function (Blueprint $table) {
|
||||
$table->integer('role_id');
|
||||
$table->integer('user_id');
|
||||
$table->index(['role_id', 'user_id']);
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
Schema::create(config('admin.database.role_permissions_table'), function (Blueprint $table) {
|
||||
$table->integer('role_id');
|
||||
$table->integer('permission_id');
|
||||
$table->index(['role_id', 'permission_id']);
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
Schema::create(config('admin.database.user_permissions_table'), function (Blueprint $table) {
|
||||
$table->integer('user_id');
|
||||
$table->integer('permission_id');
|
||||
$table->index(['user_id', 'permission_id']);
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
Schema::create(config('admin.database.role_menu_table'), function (Blueprint $table) {
|
||||
$table->integer('role_id');
|
||||
$table->integer('menu_id');
|
||||
$table->index(['role_id', 'menu_id']);
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
Schema::create(config('admin.database.operation_log_table'), function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('user_id');
|
||||
$table->string('path');
|
||||
$table->string('method', 10);
|
||||
$table->string('ip');
|
||||
$table->text('input');
|
||||
$table->index('user_id');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists(config('admin.database.users_table'));
|
||||
Schema::dropIfExists(config('admin.database.roles_table'));
|
||||
Schema::dropIfExists(config('admin.database.permissions_table'));
|
||||
Schema::dropIfExists(config('admin.database.menu_table'));
|
||||
Schema::dropIfExists(config('admin.database.user_permissions_table'));
|
||||
Schema::dropIfExists(config('admin.database.role_users_table'));
|
||||
Schema::dropIfExists(config('admin.database.role_permissions_table'));
|
||||
Schema::dropIfExists(config('admin.database.role_menu_table'));
|
||||
Schema::dropIfExists(config('admin.database.operation_log_table'));
|
||||
}
|
||||
}
|
||||
20
vendor/encore/laravel-admin/docs/en/LICENSE.md
vendored
Normal file
20
vendor/encore/laravel-admin/docs/en/LICENSE.md
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015 Jens Segers
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
75
vendor/encore/laravel-admin/docs/en/README.md
vendored
Normal file
75
vendor/encore/laravel-admin/docs/en/README.md
vendored
Normal file
@@ -0,0 +1,75 @@
|
||||
laravel-admin
|
||||
=====
|
||||
|
||||
[](https://travis-ci.org/z-song/laravel-admin)
|
||||
[](https://styleci.io/repos/48796179)
|
||||
[](https://scrutinizer-ci.com/g/z-song/laravel-admin/?branch=master)
|
||||
[](https://packagist.org/packages/encore/laravel-admin)
|
||||
[](https://packagist.org/packages/encore/laravel-admin)
|
||||
[](https://github.com/z-song/laravel-admin)
|
||||
|
||||
`laravel-admin` is administrative interface builder for laravel which can help you build CRUD backends just with few lines of code.
|
||||
|
||||
[Demo](http://laravel-admin.org/demo) use `username/password:admin/admin`
|
||||
|
||||
Inspired by [SleepingOwlAdmin](https://github.com/sleeping-owl/admin) and [rapyd-laravel](https://github.com/zofe/rapyd-laravel).
|
||||
|
||||
[Documentation](http://laravel-admin.org/docs) | [中文文档](http://laravel-admin.org/docs/#/zh/)
|
||||
|
||||
Screenshots
|
||||
------------
|
||||
|
||||

|
||||
|
||||
Installation
|
||||
------------
|
||||
|
||||
> This package requires PHP 7+ and Laravel 5.5, for old versions please refer to [1.4](http://laravel-admin.org/docs/v1.4/#/)
|
||||
|
||||
First, install laravel 5.5, and make sure that the database connection settings are correct.
|
||||
|
||||
```
|
||||
composer require encore/laravel-admin 1.5.*
|
||||
```
|
||||
|
||||
Then run these commands to publish assets and config:
|
||||
|
||||
```
|
||||
php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"
|
||||
```
|
||||
After run command you can find config file in `config/admin.php`, in this file you can change the install directory,db connection or table names.
|
||||
|
||||
At last run following command to finish install.
|
||||
```
|
||||
php artisan admin:install
|
||||
```
|
||||
|
||||
Open `http://localhost/admin/` in browser,use username `admin` and password `admin` to login.
|
||||
|
||||
Default Settings
|
||||
------------
|
||||
The file in `config/admin.php` contains an array of settings, you can find the default settings in there.
|
||||
|
||||
|
||||
Other
|
||||
------------
|
||||
`laravel-admin` based on following plugins or services:
|
||||
|
||||
+ [Laravel](https://laravel.com/)
|
||||
+ [AdminLTE](https://almsaeedstudio.com/)
|
||||
+ [Datetimepicker](http://eonasdan.github.io/bootstrap-datetimepicker/)
|
||||
+ [font-awesome](http://fontawesome.io)
|
||||
+ [moment](http://momentjs.com/)
|
||||
+ [Google map](https://www.google.com/maps)
|
||||
+ [Tencent map](http://lbs.qq.com/)
|
||||
+ [bootstrap-fileinput](https://github.com/kartik-v/bootstrap-fileinput)
|
||||
+ [jquery-pjax](https://github.com/defunkt/jquery-pjax)
|
||||
+ [Nestable](http://dbushell.github.io/Nestable/)
|
||||
+ [toastr](http://codeseven.github.io/toastr/)
|
||||
+ [X-editable](http://github.com/vitalets/x-editable)
|
||||
+ [bootstrap-number-input](https://github.com/wpic/bootstrap-number-input)
|
||||
+ [fontawesome-iconpicker](https://github.com/itsjavi/fontawesome-iconpicker)
|
||||
|
||||
License
|
||||
------------
|
||||
`laravel-admin` is licensed under [The MIT License (MIT)](LICENSE).
|
||||
34
vendor/encore/laravel-admin/docs/en/_sidebar.md
vendored
Normal file
34
vendor/encore/laravel-admin/docs/en/_sidebar.md
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
|
||||
- Getting started
|
||||
- [Installation](/en/installation.md)
|
||||
- [Quick start](/en/quick-start.md)
|
||||
- [Page content & Layout](/en/content-layout.md)
|
||||
- Model grid
|
||||
- [Basic usage](/en/model-grid.md)
|
||||
- [Row actions](/en/model-grid-actions.md)
|
||||
- [Column actions](/en/model-grid-column.md)
|
||||
- [Custom tools](/en/model-grid-custom-tools.md)
|
||||
- [Filters](/en/model-grid-filters.md)
|
||||
- [Data export](/en/model-grid-export.md)
|
||||
- Model form
|
||||
- [Basic usage](/en/model-form.md)
|
||||
- [Image/File upload](/en/model-form-upload.md)
|
||||
- [Form fields](/en/model-form-fields.md)
|
||||
- [Form field management](/en/model-form-field-management.md)
|
||||
- [Form validation](/en/model-form-validation.md)
|
||||
- [Save callback](/en/model-form-callback.md)
|
||||
- [Model-tree](/en/model-tree.md)
|
||||
- Admin extensions
|
||||
- [Helpers](/en/extension-helpers.md)
|
||||
- [Media manager](/en/extension-media-manager.md)
|
||||
- [API tester](/en/extension-api-tester.md)
|
||||
- [Config manager](/en/extension-config.md)
|
||||
- [Task scheduling](/en/extension-scheduling.md)
|
||||
- [Widgets](/en/widgets.md)
|
||||
- [Permissions](/en/permission.md)
|
||||
- [Custom authentication](/en/custom-authentication.md)
|
||||
- [Custom Navbar](/en/custom-navbar.md)
|
||||
- [Custom chart](/en/custom-chart.md)
|
||||
- [Helpers](/en/helpers.md)
|
||||
- [Upgrade precautions](/en/upgrade.md)
|
||||
- [Change log](/en/change-log.md)
|
||||
12
vendor/encore/laravel-admin/docs/en/change-log.md
vendored
Normal file
12
vendor/encore/laravel-admin/docs/en/change-log.md
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
# Change log
|
||||
|
||||
## v1.2.9、v1.3.3、v1.4.1
|
||||
|
||||
- Add user settings and modify avatar function
|
||||
- Embedded form support
|
||||
- Support for customize navigation bar (upper right corner)
|
||||
- Add scaffolding, database command line tool, web artisan help tool
|
||||
- Support for customize login page and login logic
|
||||
- The form supports setting the width and setting the action
|
||||
- Optimize table filters
|
||||
- Fix bugs, optimize code and logic
|
||||
153
vendor/encore/laravel-admin/docs/en/content-layout.md
vendored
Normal file
153
vendor/encore/laravel-admin/docs/en/content-layout.md
vendored
Normal file
@@ -0,0 +1,153 @@
|
||||
# Page content
|
||||
|
||||
The layout usage of `laravel-admin` can be found in the `index()` method of the home page's layout file [HomeController.php](https://github.com/z-song/laravel-admin/blob/master/src/Console/stubs/HomeController.stub).
|
||||
|
||||
The `Encore\Admin\Layout\Content` class is used to implement the layout of the content area. The `Content::body ($element)` method is used to add page content:
|
||||
|
||||
The page code for an unfilled content is as follows:
|
||||
|
||||
```php
|
||||
public function index()
|
||||
{
|
||||
return Admin::content(function (Content $content) {
|
||||
|
||||
// optional
|
||||
$content->header('page header');
|
||||
|
||||
// optional
|
||||
$content->description('page description');
|
||||
|
||||
// add breadcrumb since v1.5.7
|
||||
$content->breadcrumb(
|
||||
['text' => 'Dashboard', 'url' => '/admin'],
|
||||
['text' => 'User management', 'url' => '/admin/users'],
|
||||
['text' => 'Edit user']
|
||||
);
|
||||
|
||||
// Fill the page body part, you can put any renderable objects here
|
||||
$content->body('hello world');
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
Method `$content->body();` can accepts any renderable objects, like string, number, class that has method `__toString`, or implements `Renderable`、`Htmlable` interface , include Laravel View objects.
|
||||
|
||||
## Layout
|
||||
|
||||
`laravel-admin` use grid system of bootstrap,The length of each line is 12, the following is a few simple examples:
|
||||
|
||||
Add a line of content:
|
||||
|
||||
```php
|
||||
$content->row('hello')
|
||||
|
||||
---------------------------------
|
||||
|hello |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
---------------------------------
|
||||
|
||||
```
|
||||
|
||||
Add multiple columns within the line:
|
||||
|
||||
```php
|
||||
$content->row(function(Row $row) {
|
||||
$row->column(4, 'foo');
|
||||
$row->column(4, 'bar');
|
||||
$row->column(4, 'baz');
|
||||
});
|
||||
----------------------------------
|
||||
|foo |bar |baz |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
----------------------------------
|
||||
|
||||
|
||||
$content->row(function(Row $row) {
|
||||
$row->column(4, 'foo');
|
||||
$row->column(8, 'bar');
|
||||
});
|
||||
----------------------------------
|
||||
|foo |bar |
|
||||
| | |
|
||||
| | |
|
||||
| | |
|
||||
| | |
|
||||
| | |
|
||||
----------------------------------
|
||||
|
||||
```
|
||||
|
||||
Column in the column:
|
||||
|
||||
```php
|
||||
$content->row(function (Row $row) {
|
||||
|
||||
$row->column(4, 'xxx');
|
||||
|
||||
$row->column(8, function (Column $column) {
|
||||
$column->row('111');
|
||||
$column->row('222');
|
||||
$column->row('333');
|
||||
});
|
||||
});
|
||||
----------------------------------
|
||||
|xxx |111 |
|
||||
| |---------------------|
|
||||
| |222 |
|
||||
| |---------------------|
|
||||
| |333 |
|
||||
| | |
|
||||
----------------------------------
|
||||
|
||||
|
||||
```
|
||||
|
||||
|
||||
Add rows in rows and add columns:
|
||||
|
||||
```php
|
||||
$content->row(function (Row $row) {
|
||||
|
||||
$row->column(4, 'xxx');
|
||||
|
||||
$row->column(8, function (Column $column) {
|
||||
$column->row('111');
|
||||
$column->row('222');
|
||||
$column->row(function(Row $row) {
|
||||
$row->column(6, '444');
|
||||
$row->column(6, '555');
|
||||
});
|
||||
});
|
||||
});
|
||||
----------------------------------
|
||||
|xxx |111 |
|
||||
| |---------------------|
|
||||
| |222 |
|
||||
| |---------------------|
|
||||
| |444 |555 |
|
||||
| | | |
|
||||
----------------------------------
|
||||
```
|
||||
|
||||
Add body into a page:
|
||||
|
||||
Create a blade view file inside `/project/resources/views/admin/custom.blade.php`
|
||||
|
||||
```php
|
||||
public function customPage($id)
|
||||
{
|
||||
$content = new Content();
|
||||
$content->header('View');
|
||||
$content->description('Description...');
|
||||
$content->body('admin.custom',['id' => $id]);
|
||||
return $content;
|
||||
}
|
||||
```
|
||||
111
vendor/encore/laravel-admin/docs/en/custom-authentication.md
vendored
Normal file
111
vendor/encore/laravel-admin/docs/en/custom-authentication.md
vendored
Normal file
@@ -0,0 +1,111 @@
|
||||
# Custom authentication
|
||||
|
||||
If you do not use the `laravel-admin` built-in authentication login logic, you can refer to the following way to customize the login authentication logic.
|
||||
|
||||
First of all, you need define a `User provider`, used to obtain the user identity, such as `app/Providers/CustomUserProvider.php`:
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Contracts\Auth\Authenticatable;
|
||||
use Illuminate\Contracts\Auth\UserProvider;
|
||||
|
||||
class CustomUserProvider implements UserProvider
|
||||
{
|
||||
public function retrieveById($identifier)
|
||||
{}
|
||||
|
||||
public function retrieveByToken($identifier, $token)
|
||||
{}
|
||||
|
||||
public function updateRememberToken(Authenticatable $user, $token)
|
||||
{}
|
||||
|
||||
public function retrieveByCredentials(array $credentials)
|
||||
{
|
||||
// Use $credentials to get the user data, and then return an object implements interface `Illuminate\Contracts\Auth\Authenticatable`
|
||||
}
|
||||
|
||||
public function validateCredentials(Authenticatable $user, array $credentials)
|
||||
{
|
||||
// Verify the user with the username password in $ credentials, return `true` or `false`
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
In the methods `retrieveByCredentials` and `validateCredentials` the parameter `$credentials` is the user name and password array submitted on the login page, you can use `$credentials` to implement your own login logic.
|
||||
|
||||
The definition of interface `Illuminate\Contracts\Auth\Authenticatable`:
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace Illuminate\Contracts\Auth;
|
||||
|
||||
interface Authenticatable {
|
||||
|
||||
public function getAuthIdentifierName();
|
||||
public function getAuthIdentifier();
|
||||
public function getAuthPassword();
|
||||
public function getRememberToken();
|
||||
public function setRememberToken($value);
|
||||
public function getRememberTokenName();
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
For more details about custom authentication please refer to [adding-custom-user-providers](https://laravel.com/docs/5.5/authentication#adding-custom-user-providers).
|
||||
|
||||
|
||||
After you created cusom user provider, you will need to extend Laravel with it:
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
|
||||
|
||||
class AuthServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Register any application authentication / authorization services.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
$this->registerPolicies();
|
||||
|
||||
Auth::provider('custom', function ($app, array $config) {
|
||||
|
||||
// Return an instance of Illuminate\Contracts\Auth\UserProvider...
|
||||
return new CustomUserProvider();
|
||||
});
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Finally modify the configuration, open `config/admin.php`, find the `auth` part:
|
||||
|
||||
```php
|
||||
'auth' => [
|
||||
'guards' => [
|
||||
'admin' => [
|
||||
'driver' => 'session',
|
||||
'provider' => 'admin',
|
||||
]
|
||||
],
|
||||
|
||||
// Modify the following
|
||||
'providers' => [
|
||||
'admin' => [
|
||||
'driver' => 'custom',
|
||||
]
|
||||
],
|
||||
],
|
||||
```
|
||||
This completes the logic of custom authentication.
|
||||
78
vendor/encore/laravel-admin/docs/en/custom-chart.md
vendored
Normal file
78
vendor/encore/laravel-admin/docs/en/custom-chart.md
vendored
Normal file
@@ -0,0 +1,78 @@
|
||||
# Custom chart
|
||||
|
||||
`laravel-admin 1.5` has removed all the chart components. If you want to add chart components to the page, you can refer to the following process
|
||||
|
||||
Use `chartjs` for example, first download [chartjs](http://chartjs.org/), put it under the public directory, such as in the `public/vendor/chartjs` directory
|
||||
|
||||
Then import the component in `app/Admin/bootstrap.php`:
|
||||
```php
|
||||
use Encore\Admin\Facades\Admin;
|
||||
|
||||
Admin::js('/vendor/chartjs/dist/Chart.min.js');
|
||||
|
||||
```
|
||||
|
||||
Create a new view file `resources/views/admin/charts/bar.blade.php`
|
||||
|
||||
```php
|
||||
<canvas id="myChart" width="400" height="400"></canvas>
|
||||
<script>
|
||||
$(function () {
|
||||
var ctx = document.getElementById("myChart").getContext('2d');
|
||||
var myChart = new Chart(ctx, {
|
||||
type: 'bar',
|
||||
data: {
|
||||
labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
|
||||
datasets: [{
|
||||
label: '# of Votes',
|
||||
data: [12, 19, 3, 5, 2, 3],
|
||||
backgroundColor: [
|
||||
'rgba(255, 99, 132, 0.2)',
|
||||
'rgba(54, 162, 235, 0.2)',
|
||||
'rgba(255, 206, 86, 0.2)',
|
||||
'rgba(75, 192, 192, 0.2)',
|
||||
'rgba(153, 102, 255, 0.2)',
|
||||
'rgba(255, 159, 64, 0.2)'
|
||||
],
|
||||
borderColor: [
|
||||
'rgba(255,99,132,1)',
|
||||
'rgba(54, 162, 235, 1)',
|
||||
'rgba(255, 206, 86, 1)',
|
||||
'rgba(75, 192, 192, 1)',
|
||||
'rgba(153, 102, 255, 1)',
|
||||
'rgba(255, 159, 64, 1)'
|
||||
],
|
||||
borderWidth: 1
|
||||
}]
|
||||
},
|
||||
options: {
|
||||
scales: {
|
||||
yAxes: [{
|
||||
ticks: {
|
||||
beginAtZero:true
|
||||
}
|
||||
}]
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
```
|
||||
|
||||
And then you can introduce this chart view anywhere on the page:
|
||||
|
||||
```php
|
||||
public function index()
|
||||
{
|
||||
return Admin::content(function (Content $content) {
|
||||
|
||||
$content->header('chart');
|
||||
$content->description('.....');
|
||||
|
||||
$content->body(view('admin.charts.bar'));
|
||||
});
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
In the above way you can introduce any chart library. multi-chart page layout, refer to [view layout] (/en/layout.md)
|
||||
148
vendor/encore/laravel-admin/docs/en/custom-navbar.md
vendored
Normal file
148
vendor/encore/laravel-admin/docs/en/custom-navbar.md
vendored
Normal file
@@ -0,0 +1,148 @@
|
||||
# Customize the head navigation bar
|
||||
|
||||
Since version `1.5.6`, you can add the html element to the top navigation bar, open `app/Admin/bootstrap.php`:
|
||||
```php
|
||||
use Encore\Admin\Facades\Admin;
|
||||
|
||||
Admin::navbar(function (\Encore\Admin\Widgets\Navbar $navbar) {
|
||||
|
||||
$navbar->left('html...');
|
||||
|
||||
$navbar->right('html...');
|
||||
|
||||
});
|
||||
```
|
||||
|
||||
Methods `left` and `right` are used to add content to the left and right sides of the head, the method parameters can be any object that can be rendered (objects which impletements `Htmlable`, `Renderable`, or has method `__toString()`) or strings.
|
||||
|
||||
## Add elements to the left
|
||||
|
||||
For example, add a search bar on the left, first create a view `resources/views/search-bar.blade.php`:
|
||||
```php
|
||||
<style>
|
||||
|
||||
.search-form {
|
||||
width: 250px;
|
||||
margin: 10px 0 0 20px;
|
||||
border-radius: 3px;
|
||||
float: left;
|
||||
}
|
||||
.search-form input[type="text"] {
|
||||
color: #666;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.search-form .btn {
|
||||
color: #999;
|
||||
background-color: #fff;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<form action="/admin/posts" method="get" class="search-form" pjax-container>
|
||||
<div class="input-group input-group-sm ">
|
||||
<input type="text" name="title" class="form-control" placeholder="Search...">
|
||||
<span class="input-group-btn">
|
||||
<button type="submit" name="search" id="search-btn" class="btn btn-flat"><i class="fa fa-search"></i></button>
|
||||
</span>
|
||||
</div>
|
||||
</form>
|
||||
```
|
||||
Then add it to the head navigation bar:
|
||||
```php
|
||||
$navbar->left(view('search-bar'));
|
||||
```
|
||||
|
||||
## Add elements to the right
|
||||
|
||||
You can only add the `<li>` tag on the right side of the navigation, such as adding some prompt icons, creating a new rendering class `app/Admin/Extensions/Nav/Links.php`
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Admin\Extensions\Nav;
|
||||
|
||||
class Links
|
||||
{
|
||||
public function __toString()
|
||||
{
|
||||
return <<<HTML
|
||||
|
||||
<li>
|
||||
<a href="#">
|
||||
<i class="fa fa-envelope-o"></i>
|
||||
<span class="label label-success">4</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="#">
|
||||
<i class="fa fa-bell-o"></i>
|
||||
<span class="label label-warning">7</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="#">
|
||||
<i class="fa fa-flag-o"></i>
|
||||
<span class="label label-danger">9</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
HTML;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Then add it to the head navigation bar:
|
||||
```php
|
||||
$navbar->right(new \App\Admin\Extensions\Nav\Links());
|
||||
```
|
||||
|
||||
Or use the following html to add a drop-down menu:
|
||||
```html
|
||||
<li class="dropdown notifications-menu">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
|
||||
<i class="fa fa-bell-o"></i>
|
||||
<span class="label label-warning">10</span>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li class="header">You have 10 notifications</li>
|
||||
<li>
|
||||
<!-- inner menu: contains the actual data -->
|
||||
<ul class="menu">
|
||||
<li>
|
||||
<a href="#">
|
||||
<i class="fa fa-users text-aqua"></i> 5 new members joined today
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<i class="fa fa-warning text-yellow"></i> Very long description here that may not fit into the
|
||||
page and may cause design problems
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<i class="fa fa-users text-red"></i> 5 new members joined
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="#">
|
||||
<i class="fa fa-shopping-cart text-green"></i> 25 sales made
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<i class="fa fa-user text-red"></i> You changed your username
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="footer"><a href="#">View all</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
```
|
||||
|
||||
More components can be found here [Bootstrap](https://getbootstrap.com/)
|
||||
60
vendor/encore/laravel-admin/docs/en/extension-api-tester.md
vendored
Normal file
60
vendor/encore/laravel-admin/docs/en/extension-api-tester.md
vendored
Normal file
@@ -0,0 +1,60 @@
|
||||
# Laravel API tester
|
||||
|
||||
`api-tester` is an API testing tool developed for `laravel` that helps you test your laravel API like `postman`.
|
||||
|
||||

|
||||
|
||||
## Installation
|
||||
|
||||
```shell
|
||||
$ composer require laravel-admin-ext/api-tester -vvv
|
||||
|
||||
$ php artisan vendor:publish --tag=api-tester
|
||||
|
||||
```
|
||||
And then run the following command to import menus and permissions (which can also be added manually)
|
||||
|
||||
```shell
|
||||
$ php artisan admin:import api-tester
|
||||
```
|
||||
|
||||
Then you can find the entry link in the admin menu, `http://localhost/admin/api-tester`.
|
||||
|
||||
## Usage
|
||||
|
||||
Open `routes/api.php` try to add an api:
|
||||
|
||||
```php
|
||||
Route::get('test', function () {
|
||||
return 'hello world';
|
||||
});
|
||||
```
|
||||
|
||||
Open the `api-tester` page, you can see `api/test` on the left, select it and click the `Send` button to send request to the api
|
||||
|
||||
### Login as
|
||||
|
||||
`Login as` Fill in the user id you want to log in, you can log in as the user to request the API, add the following API:
|
||||
|
||||
```php
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
Route::middleware('auth:api')->get('user', function (Request $request) {
|
||||
return $request->user();
|
||||
});
|
||||
```
|
||||
Fill in the user ID in `Login as` input , then request the api and will respond with the user's model
|
||||
|
||||
### Parameters
|
||||
|
||||
Used to set the request parameters for api , the type can be a string or file, add the following API:
|
||||
|
||||
```php
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
Route::get('parameters', function (Request $request) {
|
||||
return $request->all();
|
||||
});
|
||||
```
|
||||
|
||||
Fill in the parameters send request and you can see the results
|
||||
44
vendor/encore/laravel-admin/docs/en/extension-config.md
vendored
Normal file
44
vendor/encore/laravel-admin/docs/en/extension-config.md
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
# Configuration management
|
||||
|
||||
This tool will store the configuration data in the database
|
||||
|
||||

|
||||
|
||||
## Installation
|
||||
|
||||
```
|
||||
$ composer require laravel-admin-ext/config
|
||||
|
||||
$ php artisan migrate
|
||||
```
|
||||
|
||||
Open `app/Providers/AppServiceProvider.php`, and call the `Config::load()` method within the `boot` method:
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Encore\Admin\Config\Config;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
|
||||
class AppServiceProvider extends ServiceProvider
|
||||
{
|
||||
public function boot()
|
||||
{
|
||||
Config::load(); // Add this
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Then run the command to import menus and permissions (which can also be added manually)
|
||||
|
||||
```
|
||||
$ php artisan admin:import config
|
||||
```
|
||||
|
||||
Open `http://localhost/admin/config`.
|
||||
|
||||
## Usage
|
||||
|
||||
After add config in the panel, use `config($key)` to get value you configured.
|
||||
45
vendor/encore/laravel-admin/docs/en/extension-helpers.md
vendored
Normal file
45
vendor/encore/laravel-admin/docs/en/extension-helpers.md
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
# Helpers
|
||||
|
||||
Added support for developers, available in development to help improve efficiency, currently providing `scaffolding`, `database command line` and `artisan command line `three tools, if there are better other utilities The idea of welcome to provide advice.
|
||||
|
||||
Installation:
|
||||
```php
|
||||
composer require laravel-admin-ext/helpers
|
||||
|
||||
php artisan admin:import helpers
|
||||
```
|
||||
|
||||
> Part of the function of the tool will create or delete files in the project, there may be some file or directory permissions errors, the problem needs to be resolved.
|
||||
> Another part of the database and artisan command can not be used in the web environment.
|
||||
|
||||
## Scaffold
|
||||
|
||||
This Tool can help you build controller, model, migrate files, and run migration files.
|
||||
access by visit `http://localhost/admin/helpers/scaffold`.
|
||||
|
||||
Which set the migration table structure, the primary key field is automatically generated do not need to fill out.
|
||||
|
||||

|
||||
|
||||
## Database command line
|
||||
|
||||
Database command line tool for web integration,Currently supports `mysql`,` mongodb` and `redis`,access by visit `http://localhost/admin/helpers/terminal/database`.
|
||||
|
||||
Change the database connection in the upper right corner, and then in the bottom of the input box to enter the corresponding database query and then enter, you can get the query results:
|
||||
|
||||

|
||||
|
||||
The use of the database and the operation of the database is consistent, you can run the selected database support query.
|
||||
|
||||
## Artisan command line
|
||||
|
||||
Web version of `Laravel`'s `artisan` command line,you can run artisan commands in it,access it by visit `http://localhost/admin/helpers/terminal/artisan`.
|
||||
|
||||

|
||||
|
||||
|
||||
## Route list
|
||||
|
||||
This tool can use more intuitive to show all the routes, including uri, http methods and middleware, and also you can query routes. access it by visit`http://localhost/admin/helpers/routes`.
|
||||
|
||||

|
||||
50
vendor/encore/laravel-admin/docs/en/extension-media-manager.md
vendored
Normal file
50
vendor/encore/laravel-admin/docs/en/extension-media-manager.md
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
# Media manager
|
||||
|
||||
This tool for manage local files
|
||||
|
||||

|
||||
|
||||
## Installation
|
||||
|
||||
```
|
||||
$ composer require laravel-admin-ext/media-manager -vvv
|
||||
|
||||
$ php artisan admin:import media-manager
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
Open `config/admin.php` specify the disk you want to manage
|
||||
|
||||
```php
|
||||
|
||||
'extensions' => [
|
||||
|
||||
'media-manager' => [
|
||||
'disk' => 'public' // Points to the disk set in config/filesystem.php
|
||||
],
|
||||
],
|
||||
|
||||
```
|
||||
|
||||
`disk` is the local disk you configured in `config/filesystem.php`, visit by access `http://localhost/admin/media`.
|
||||
|
||||
Note If you want to preview the picture in the disk, you must set the access url in the disk configuration:
|
||||
|
||||
|
||||
`config/filesystem.php`:
|
||||
```php
|
||||
|
||||
'disks' => [
|
||||
|
||||
'public' => [
|
||||
'driver' => 'local',
|
||||
'root' => storage_path('app/public'),
|
||||
'url' => env('APP_URL').'/storage', // set url
|
||||
'visibility' => 'public',
|
||||
],
|
||||
|
||||
...
|
||||
]
|
||||
```
|
||||
|
||||
34
vendor/encore/laravel-admin/docs/en/extension-scheduling.md
vendored
Normal file
34
vendor/encore/laravel-admin/docs/en/extension-scheduling.md
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
# Task scheduling
|
||||
|
||||
This tool is a web interface for manage Laravel's scheduled tasks
|
||||
|
||||

|
||||
|
||||
## Installation
|
||||
|
||||
```
|
||||
$ composer require laravel-admin-ext/scheduling -vvv
|
||||
|
||||
$ php artisan admin:import scheduling
|
||||
```
|
||||
|
||||
Then open `http://localhost/admin/scheduling`
|
||||
|
||||
## Add tasks
|
||||
|
||||
Open `app/Console/Kernel.php`, try adding two scheduled tasks:
|
||||
|
||||
```php
|
||||
class Kernel extends ConsoleKernel
|
||||
{
|
||||
protected function schedule(Schedule $schedule)
|
||||
{
|
||||
$schedule->command('inspire')->everyTenMinutes();
|
||||
|
||||
$schedule->command('route:list')->dailyAt('02:00');
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
And then you can see the tasks with details in the page, and you can also directly run these two tasks in the page.
|
||||
57
vendor/encore/laravel-admin/docs/en/installation.md
vendored
Normal file
57
vendor/encore/laravel-admin/docs/en/installation.md
vendored
Normal file
@@ -0,0 +1,57 @@
|
||||
# Installation
|
||||
|
||||
> This package requires PHP 7+ and Laravel 5.5, for old versions please refer to [1.4](http://laravel-admin.org/docs/v1.4/#/)
|
||||
|
||||
First, install laravel, and make sure that the database connection settings are correct.
|
||||
|
||||
Then install require this package with command:
|
||||
```
|
||||
composer require encore/laravel-admin "1.5.*"
|
||||
```
|
||||
|
||||
Publish assets and config with command:
|
||||
```
|
||||
php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"
|
||||
```
|
||||
|
||||
After runnung previous command you can find config file in `config/admin.php`, in this file you can change default install directory (```/app/Admin```), db connection or table names.
|
||||
|
||||
At last run following command to finish install:
|
||||
```
|
||||
php artisan admin:install
|
||||
```
|
||||
|
||||
To check that all is working, run `php artisan serve` and open `http://localhost/admin/` in browser, use username `admin` and password `admin` to login.
|
||||
|
||||
## Generated files
|
||||
|
||||
After the installation is complete, the following files are generated in the project directory:
|
||||
|
||||
### Configuration file
|
||||
|
||||
After the installation is complete, all configurations are in the `config/admin.php` file.
|
||||
|
||||
### Admin files
|
||||
|
||||
After install,you can find directory`app/Admin`,and then most of our develop work is under this directory.
|
||||
|
||||
```
|
||||
app/Admin
|
||||
├── Controllers
|
||||
│ ├── ExampleController.php
|
||||
│ └── HomeController.php
|
||||
├── bootstrap.php
|
||||
└── routes.php
|
||||
```
|
||||
|
||||
`app/Admin/routes.php` is used to define routes.
|
||||
|
||||
`app/Admin/bootstrap.php` is bootstrapper for laravel-admin, for usage examples see comments inside it.
|
||||
|
||||
The `app/Admin/Controllers` directory is used to store all the controllers.
|
||||
The `HomeController.php` file under this directory is used to handle home request of admin.
|
||||
The `ExampleController.php` file is a controller example.
|
||||
|
||||
### Static assets
|
||||
|
||||
The front-end static files are in the `/public/packages/admin` directory.
|
||||
103
vendor/encore/laravel-admin/docs/en/model-form-callback.md
vendored
Normal file
103
vendor/encore/laravel-admin/docs/en/model-form-callback.md
vendored
Normal file
@@ -0,0 +1,103 @@
|
||||
# Model form callback
|
||||
|
||||
`model-form` currently has three methods for receiving callback functions:
|
||||
|
||||
```php
|
||||
// callback after form submission
|
||||
$form->submitted(function (Form $form) {
|
||||
//...
|
||||
});
|
||||
|
||||
// callback before save
|
||||
$form->saving(function (Form $form) {
|
||||
//...
|
||||
});
|
||||
|
||||
// callback after save
|
||||
$form->saved(function (Form $form) {
|
||||
//...
|
||||
});
|
||||
|
||||
```
|
||||
If required, you can add additional fields to ignore using the submitted function e.g.
|
||||
```php
|
||||
$form->submitted(function (Form $form) {
|
||||
$form->ignore('username');
|
||||
|
||||
});
|
||||
|
||||
```
|
||||
The form data that is currently submitted can be retrieved from the callback parameter `$form`:
|
||||
|
||||
```php
|
||||
$form->saving(function (Form $form) {
|
||||
|
||||
dump($form->username);
|
||||
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
Get data in model
|
||||
```php
|
||||
$form->saved(function (Form $form) {
|
||||
|
||||
$form->model()->id;
|
||||
|
||||
});
|
||||
```
|
||||
|
||||
Can redirect other urls by returning an instance of `Symfony\Component\HttpFoundation\Response` directly in the callback:
|
||||
|
||||
```php
|
||||
$form->saving(function (Form $form) {
|
||||
|
||||
// returns a simple response
|
||||
return response('xxxx');
|
||||
|
||||
});
|
||||
|
||||
$form->saving(function (Form $form) {
|
||||
|
||||
// redirect url
|
||||
return redirect('/admin/users');
|
||||
|
||||
});
|
||||
|
||||
$form->saving(function (Form $form) {
|
||||
|
||||
// throws an exception
|
||||
throw new \Exception('Error friends. . .');
|
||||
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
Return error or success information on the page:
|
||||
|
||||
```php
|
||||
use Illuminate\Support\MessageBag;
|
||||
|
||||
// redirect back with an error message
|
||||
$form->saving(function ($form) {
|
||||
|
||||
$error = new MessageBag([
|
||||
'title' => 'title...',
|
||||
'message' => 'message....',
|
||||
]);
|
||||
|
||||
return back()->with(compact('error'));
|
||||
});
|
||||
|
||||
// redirect back with a successful message
|
||||
$form->saving(function ($form) {
|
||||
|
||||
$success = new MessageBag([
|
||||
'title' => 'title...',
|
||||
'message' => 'message....',
|
||||
]);
|
||||
|
||||
return back()->with(compact('success'));
|
||||
});
|
||||
|
||||
```
|
||||
188
vendor/encore/laravel-admin/docs/en/model-form-field-management.md
vendored
Normal file
188
vendor/encore/laravel-admin/docs/en/model-form-field-management.md
vendored
Normal file
@@ -0,0 +1,188 @@
|
||||
# Fields management
|
||||
|
||||
|
||||
## Remove field
|
||||
|
||||
The built-in `map` and `editor` fields requires the front-end files via cdn, and if there are problems with the network, they can be removed in the following ways
|
||||
|
||||
Locate the file `app/Admin/bootstrap.php`. If the file does not exist, update `laravel-admin` and create this file.
|
||||
|
||||
```php
|
||||
|
||||
<?php
|
||||
|
||||
use Encore\Admin\Form;
|
||||
|
||||
Form::forget('map');
|
||||
Form::forget('editor');
|
||||
|
||||
// or
|
||||
|
||||
Form::forget(['map', 'editor']);
|
||||
|
||||
```
|
||||
|
||||
This removes the two fields, which can be used to remove the other fields.
|
||||
|
||||
## Extend the custom field
|
||||
|
||||
Extend a PHP code editor based on [codemirror](http://codemirror.net/index.html) with the following steps.
|
||||
|
||||
see [PHP mode](http://codemirror.net/mode/php/).
|
||||
|
||||
Download and unzip the [codemirror](http://codemirror.net/codemirror.zip) library to the front-end resource directory, for example, in the directory `public/packages/codemirror-5.20.2`.
|
||||
|
||||
Create a new field class `app/Admin/Extensions/PHPEditor.php`:
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Admin\Extensions;
|
||||
|
||||
use Encore\Admin\Form\Field;
|
||||
|
||||
class PHPEditor extends Field
|
||||
{
|
||||
protected $view = 'admin.php-editor';
|
||||
|
||||
protected static $css = [
|
||||
'/packages/codemirror-5.20.2/lib/codemirror.css',
|
||||
];
|
||||
|
||||
protected static $js = [
|
||||
'/packages/codemirror-5.20.2/lib/codemirror.js',
|
||||
'/packages/codemirror-5.20.2/addon/edit/matchbrackets.js',
|
||||
'/packages/codemirror-5.20.2/mode/htmlmixed/htmlmixed.js',
|
||||
'/packages/codemirror-5.20.2/mode/xml/xml.js',
|
||||
'/packages/codemirror-5.20.2/mode/javascript/javascript.js',
|
||||
'/packages/codemirror-5.20.2/mode/css/css.js',
|
||||
'/packages/codemirror-5.20.2/mode/clike/clike.js',
|
||||
'/packages/codemirror-5.20.2/mode/php/php.js',
|
||||
];
|
||||
|
||||
public function render()
|
||||
{
|
||||
$this->script = <<<EOT
|
||||
|
||||
CodeMirror.fromTextArea(document.getElementById("{$this->id}"), {
|
||||
lineNumbers: true,
|
||||
mode: "text/x-php",
|
||||
extraKeys: {
|
||||
"Tab": function(cm){
|
||||
cm.replaceSelection(" " , "end");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
EOT;
|
||||
return parent::render();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
>Static resources in the class can also be imported from outside, see [Editor.php](https://github.com/z-song/laravel-admin/blob/1.3/src/Form/Field/Editor.php)
|
||||
|
||||
Create a view file `resources/views/admin/php-editor.blade.php`:
|
||||
|
||||
```php
|
||||
|
||||
<div class="form-group {!! !$errors->has($label) ?: 'has-error' !!}">
|
||||
|
||||
<label for="{{$id}}" class="col-sm-2 control-label">{{$label}}</label>
|
||||
|
||||
<div class="col-sm-6">
|
||||
|
||||
@include('admin::form.error')
|
||||
|
||||
<textarea class="form-control" id="{{$id}}" name="{{$name}}" placeholder="{{ trans('admin::lang.input') }} {{$label}}" {!! $attributes !!} >{{ old($column, $value) }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
```
|
||||
|
||||
Finally, find the file `app/Admin/bootstrap.php`, if the file does not exist, update `laravel-admin`, and then create this file, add the following code:
|
||||
|
||||
```
|
||||
<?php
|
||||
|
||||
use App\Admin\Extensions\PHPEditor;
|
||||
use Encore\Admin\Form;
|
||||
|
||||
Form::extend('php', PHPEditor::class);
|
||||
|
||||
```
|
||||
|
||||
And then you can use PHP editor in [model-form](/en/model-form.md):
|
||||
|
||||
```
|
||||
|
||||
$form->php('code');
|
||||
|
||||
```
|
||||
|
||||
In this way, you can add any form fields you want to add.
|
||||
|
||||
## Integrate CKEditor
|
||||
|
||||
Here is another example to show you how to integrate ckeditor.
|
||||
|
||||
At first download [CKEditor](http://ckeditor.com/download), unzip to public directory, for example `public/packages/ckeditor/`.
|
||||
|
||||
Then Write Extension class `app/Admin/Extensions/Form/CKEditor.php`:
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Admin\Extensions\Form;
|
||||
|
||||
use Encore\Admin\Form\Field;
|
||||
|
||||
class CKEditor extends Field
|
||||
{
|
||||
public static $js = [
|
||||
'/packages/ckeditor/ckeditor.js',
|
||||
'/packages/ckeditor/adapters/jquery.js',
|
||||
];
|
||||
|
||||
protected $view = 'admin.ckeditor';
|
||||
|
||||
public function render()
|
||||
{
|
||||
$this->script = "$('textarea.{$this->getElementClass()}').ckeditor();";
|
||||
|
||||
return parent::render();
|
||||
}
|
||||
}
|
||||
```
|
||||
Add blade file `resources/views/admin/ckeditor.blade.php` for view `admin.ckeditor` :
|
||||
```php
|
||||
<div class="form-group {!! !$errors->has($errorKey) ?: 'has-error' !!}">
|
||||
|
||||
<label for="{{$id}}" class="col-sm-2 control-label">{{$label}}</label>
|
||||
|
||||
<div class="col-sm-6">
|
||||
|
||||
@include('admin::form.error')
|
||||
|
||||
<textarea class="form-control {{$class}}" id="{{$id}}" name="{{$name}}" placeholder="{{ $placeholder }}" {!! $attributes !!} >{{ old($column, $value) }}</textarea>
|
||||
|
||||
@include('admin::form.help-block')
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
```
|
||||
Register this extension in `app/Admin/bootstrap.php`:
|
||||
|
||||
```php
|
||||
use Encore\Admin\Form;
|
||||
use App\Admin\Extensions\Form\CKEditor;
|
||||
|
||||
Form::extend('ckeditor', CKEditor::class);
|
||||
```
|
||||
After this you can use ckeditor in your form:
|
||||
|
||||
```php
|
||||
$form->ckeditor('content');
|
||||
```
|
||||
655
vendor/encore/laravel-admin/docs/en/model-form-fields.md
vendored
Normal file
655
vendor/encore/laravel-admin/docs/en/model-form-fields.md
vendored
Normal file
@@ -0,0 +1,655 @@
|
||||
# Builtin form fields
|
||||
|
||||
There are a lots of form components built into the `model-form` to help you quickly build forms.
|
||||
|
||||
## Public methods
|
||||
|
||||
### Set the value to save
|
||||
```php
|
||||
$form->text('title')->value('text...');
|
||||
```
|
||||
|
||||
### Set default value
|
||||
```php
|
||||
$form->text('title')->default('text...');
|
||||
```
|
||||
|
||||
### Set help message
|
||||
```php
|
||||
$form->text('title')->help('help...');
|
||||
```
|
||||
|
||||
### Set fa-icon class
|
||||
```php
|
||||
$form->text('title')->icon('fa-copy');
|
||||
```
|
||||
|
||||
### Set attributes of field element
|
||||
```php
|
||||
$form->text('title')->attribute(['data-title' => 'title...']);
|
||||
|
||||
$form->text('title')->attribute('data-title', 'title...');
|
||||
```
|
||||
|
||||
### Set placeholder
|
||||
```php
|
||||
$form->text('title')->placeholder('Please input...');
|
||||
```
|
||||
|
||||
### Model-form-tab
|
||||
|
||||
If the form contains too many fields, will lead to form page is too long, in which case you can use the tab to separate the form:
|
||||
|
||||
```php
|
||||
|
||||
$form->tab('Basic info', function ($form) {
|
||||
|
||||
$form->text('username');
|
||||
$form->email('email');
|
||||
|
||||
})->tab('Profile', function ($form) {
|
||||
|
||||
$form->image('avatar');
|
||||
$form->text('address');
|
||||
$form->mobile('phone');
|
||||
|
||||
})->tab('Jobs', function ($form) {
|
||||
|
||||
$form->hasMany('jobs', function () {
|
||||
$form->text('company');
|
||||
$form->date('start_date');
|
||||
$form->date('end_date');
|
||||
});
|
||||
|
||||
})
|
||||
|
||||
```
|
||||
|
||||
## Text input
|
||||
|
||||
```php
|
||||
$form->text($column, [$label]);
|
||||
|
||||
// Add a submission validation rule
|
||||
$form->text($column, [$label])->rules('required|min:10');
|
||||
```
|
||||
|
||||
## Select
|
||||
```php
|
||||
$form->select($column[, $label])->options([1 => 'foo', 2 => 'bar', 'val' => 'Option name']);
|
||||
```
|
||||
|
||||
If have too many options, you can load option by ajax:
|
||||
|
||||
```php
|
||||
$form->select('user_id')->options(function ($id) {
|
||||
$user = User::find($id);
|
||||
|
||||
if ($user) {
|
||||
return [$user->id => $user->name];
|
||||
}
|
||||
})->ajax('/admin/api/users');
|
||||
|
||||
// using ajax and show selected item:
|
||||
|
||||
$form->select('user_id')->options(User::class)->ajax('/admin/api/users');
|
||||
|
||||
// or specifying the name and id
|
||||
|
||||
$form->select('user_id')->options(User::class, 'name', 'id')->ajax('/admin/api/users');
|
||||
```
|
||||
|
||||
<sub>Notice:if you have modified the value of the `route.prefix` in the `config/admin.php` file, this api route should be modified to `config('admin.route.prefix').'/api/users'`.</sub>
|
||||
|
||||
The controller method for api `/admin/api/users` is:
|
||||
|
||||
```php
|
||||
public function users(Request $request)
|
||||
{
|
||||
$q = $request->get('q');
|
||||
|
||||
return User::where('name', 'like', "%$q%")->paginate(null, ['id', 'name as text']);
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
The json returned from api `/admin/demo/options`:
|
||||
```
|
||||
{
|
||||
"total": 4,
|
||||
"per_page": 15,
|
||||
"current_page": 1,
|
||||
"last_page": 1,
|
||||
"next_page_url": null,
|
||||
"prev_page_url": null,
|
||||
"from": 1,
|
||||
"to": 3,
|
||||
"data": [
|
||||
{
|
||||
"id": 9,
|
||||
"text": "xxx"
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"text": "xxx"
|
||||
},
|
||||
{
|
||||
"id": 42,
|
||||
"text": "xxx"
|
||||
},
|
||||
{
|
||||
"id": 48,
|
||||
"text": "xxx"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Select linkage
|
||||
|
||||
`select` component supports one-way linkage of parent-child relationship:
|
||||
```php
|
||||
$form->select('province')->options(...)->load('city', '/api/city');
|
||||
|
||||
$form->select('city');
|
||||
|
||||
```
|
||||
|
||||
Where `load('city', '/api/city');` means that, after the current select option is changed, the current option will call the api `/api/city` via the argument` q` api returns the data to fill the options for the city selection box, where api `/api/city` returns the data format that must match:
|
||||
|
||||
```php
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"text": "foo"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"text": "bar"
|
||||
},
|
||||
...
|
||||
]
|
||||
```
|
||||
The code for the controller action is as follows:
|
||||
|
||||
```php
|
||||
public function city(Request $request)
|
||||
{
|
||||
$provinceId = $request->get('q');
|
||||
|
||||
return ChinaArea::city()->where('parent_id', $provinceId)->get(['id', DB::raw('name as text')]);
|
||||
}
|
||||
```
|
||||
|
||||
## Multiple select
|
||||
```php
|
||||
$form->multipleSelect($column[, $label])->options([1 => 'foo', 2 => 'bar', 'val' => 'Option name']);
|
||||
|
||||
// using ajax and show selected items:
|
||||
|
||||
$form->multipleSelect($column[, $label])->options(Model::class)->ajax('ajax_url');
|
||||
|
||||
// or specifying the name and id
|
||||
|
||||
$form->multipleSelect($column[, $label])->options(Model::class, 'name', 'id')->ajax('ajax_url');
|
||||
```
|
||||
|
||||
You can store value of multiple select in two ways, one is `many-to-many` relation.
|
||||
|
||||
```
|
||||
|
||||
class Post extends Models
|
||||
{
|
||||
public function tags()
|
||||
{
|
||||
return $this->belongsToMany(Tag::class);
|
||||
}
|
||||
}
|
||||
|
||||
$form->multipleSelect('tags')->options(Tag::all()->pluck('name', 'id'));
|
||||
|
||||
```
|
||||
|
||||
The second is to store the option array into a single field. If the field is a string type, it is necessary to define [accessor and Mutator](https://laravel.com/docs/5.5/eloquent-mutators) for the field.
|
||||
|
||||
If have too many options, you can load option by ajax
|
||||
|
||||
```php
|
||||
$form->select('user_id')->options(function ($id) {
|
||||
$user = User::find($id);
|
||||
|
||||
if ($user) {
|
||||
return [$user->id => $user->name];
|
||||
}
|
||||
})->ajax('/admin/api/users');
|
||||
```
|
||||
|
||||
<sub>Notice:If you have modified the value of the `route.prefix` in the `config/admin.php` file, this api route should be modified to `config('admin.route.prefix').'/api/users'`.</sub>
|
||||
|
||||
The controller method for api `/admin/api/users` is:
|
||||
|
||||
```php
|
||||
public function users(Request $request)
|
||||
{
|
||||
$q = $request->get('q');
|
||||
|
||||
return User::where('name', 'like', "%$q%")->paginate(null, ['id', 'name as text']);
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
The json returned from api `/admin/demo/options`:
|
||||
```
|
||||
{
|
||||
"total": 4,
|
||||
"per_page": 15,
|
||||
"current_page": 1,
|
||||
"last_page": 1,
|
||||
"next_page_url": null,
|
||||
"prev_page_url": null,
|
||||
"from": 1,
|
||||
"to": 3,
|
||||
"data": [
|
||||
{
|
||||
"id": 9,
|
||||
"text": "xxx"
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"text": "xxx"
|
||||
},
|
||||
{
|
||||
"id": 42,
|
||||
"text": "xxx"
|
||||
},
|
||||
{
|
||||
"id": 48,
|
||||
"text": "xxx"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Listbox
|
||||
|
||||
The usage is as same as mutipleSelect.
|
||||
|
||||
```php
|
||||
$form->listbox($column[, $label])->options([1 => 'foo', 2 => 'bar', 'val' => 'Option name']);
|
||||
```
|
||||
|
||||
## Textarea
|
||||
```php
|
||||
$form->textarea($column[, $label])->rows(10);
|
||||
```
|
||||
|
||||
## Radio
|
||||
```php
|
||||
$form->radio($column[, $label])->options(['m' => 'Female', 'f'=> 'Male'])->default('m');
|
||||
|
||||
$form->radio($column[, $label])->options(['m' => 'Female', 'f'=> 'Male'])->default('m')->stacked();
|
||||
```
|
||||
|
||||
## Checkbox
|
||||
|
||||
`checkbox` can store values in two ways, see[multiple select](#Multiple select)
|
||||
|
||||
The `options()` method is used to set options:
|
||||
```php
|
||||
$form->checkbox($column[, $label])->options([1 => 'foo', 2 => 'bar', 'val' => 'Option name']);
|
||||
|
||||
$form->checkbox($column[, $label])->options([1 => 'foo', 2 => 'bar', 'val' => 'Option name'])->stacked();
|
||||
```
|
||||
|
||||
## Email input
|
||||
```php
|
||||
$form->email($column[, $label]);
|
||||
```
|
||||
|
||||
## Password input
|
||||
```php
|
||||
$form->password($column[, $label]);
|
||||
```
|
||||
|
||||
## URL input
|
||||
```php
|
||||
$form->url($column[, $label]);
|
||||
```
|
||||
|
||||
## Ip input
|
||||
```php
|
||||
$form->ip($column[, $label]);
|
||||
```
|
||||
|
||||
## Phone number input
|
||||
```php
|
||||
$form->mobile($column[, $label])->options(['mask' => '999 9999 9999']);
|
||||
```
|
||||
|
||||
## Color select
|
||||
```php
|
||||
$form->color($column[, $label])->default('#ccc');
|
||||
```
|
||||
|
||||
## Time input
|
||||
```php
|
||||
$form->time($column[, $label]);
|
||||
|
||||
// Set the time format, more formats reference http://momentjs.com/docs/#/displaying/format/
|
||||
$form->time($column[, $label])->format('HH:mm:ss');
|
||||
```
|
||||
|
||||
## Date input
|
||||
```php
|
||||
$form->date($column[, $label]);
|
||||
|
||||
// Date format setting,more format please see http://momentjs.com/docs/#/displaying/format/
|
||||
$form->date($column[, $label])->format('YYYY-MM-DD');
|
||||
```
|
||||
|
||||
## Datetime input
|
||||
```php
|
||||
$form->datetime($column[, $label]);
|
||||
|
||||
// Set the date format, more format reference http://momentjs.com/docs/#/displaying/format/
|
||||
$form->datetime($column[, $label])->format('YYYY-MM-DD HH:mm:ss');
|
||||
```
|
||||
|
||||
## Time range select
|
||||
`$startTime`、`$endTime`is the start and end time fields:
|
||||
```php
|
||||
$form->timeRange($startTime, $endTime, 'Time Range');
|
||||
```
|
||||
|
||||
## Date range select
|
||||
`$startDate`、`$endDate`is the start and end date fields:
|
||||
```php
|
||||
$form->dateRange($startDate, $endDate, 'Date Range');
|
||||
```
|
||||
|
||||
## Datetime range select
|
||||
`$startDateTime`、`$endDateTime` is the start and end datetime fields:
|
||||
```php
|
||||
$form->datetimeRange($startDateTime, $endDateTime, 'DateTime Range');
|
||||
```
|
||||
|
||||
## Currency input
|
||||
```php
|
||||
$form->currency($column[, $label]);
|
||||
|
||||
// set the unit symbol
|
||||
$form->currency($column[, $label])->symbol('¥');
|
||||
|
||||
```
|
||||
|
||||
## Number input
|
||||
```php
|
||||
$form->number($column[, $label]);
|
||||
```
|
||||
|
||||
## Rate input
|
||||
```php
|
||||
$form->rate($column[, $label]);
|
||||
```
|
||||
|
||||
## Image upload
|
||||
|
||||
Before use upload field, you must complete upload configuration, see [image/file upload](/en/model-form-upload.md).
|
||||
|
||||
You can use compression, crop, add watermarks and other methods, please refer to [[Intervention] (http://image.intervention.io/getting_started/introduction)], picture upload directory in the file `config / admin.php` `Upload.image` configuration, if the directory does not exist, you need to create the directory and open write permissions:
|
||||
```php
|
||||
$form->image($column[, $label]);
|
||||
|
||||
// Modify the image upload path and file name
|
||||
$form->image($column[, $label])->move($dir, $name);
|
||||
|
||||
// Crop picture
|
||||
$form->image($column[, $label])->crop(int $width, int $height, [int $x, int $y]);
|
||||
|
||||
// Add a watermark
|
||||
$form->image($column[, $label])->insert($watermark, 'center');
|
||||
|
||||
// add delete button
|
||||
$form->image($column[, $label])->removable();
|
||||
|
||||
```
|
||||
|
||||
## File upload
|
||||
|
||||
Before use upload field, you must complete upload configuration, see [image/file upload](/en/model-form-upload.md).
|
||||
|
||||
The file upload directory is configured in `upload.file` in the file `config/admin.php`. If the directory does not exist, it needs to be created and write-enabled.
|
||||
```php
|
||||
$form->file($column[, $label]);
|
||||
|
||||
// Modify the file upload path and file name
|
||||
$form->file($column[, $label])->move($dir, $name);
|
||||
|
||||
// And set the upload file type
|
||||
$form->file($column[, $label])->rules('mimes:doc,docx,xlsx');
|
||||
|
||||
// add delete button
|
||||
$form->file($column[, $label])->removable();
|
||||
|
||||
```
|
||||
|
||||
## Multiple image/file upload
|
||||
|
||||
```php
|
||||
// multiple image
|
||||
$form->multipleImage($column[, $label]);
|
||||
|
||||
// multiple file
|
||||
$form->multipleFile($column[, $label]);
|
||||
|
||||
// add delete button
|
||||
$form->multipleFile($column[, $label])->removable();
|
||||
```
|
||||
|
||||
The type of data submitted from multiple image/file field is array, if you the type of column in mysql table is array, or use mongodb, then you can save the array directly,
|
||||
but if you use string type to store the array data ,you need to specify a string format, For example, if you want to use json string to store the array data, you need to define
|
||||
a mutator for the column in model mutator, such as the field named `pictures`, define mutator:
|
||||
|
||||
```php
|
||||
public function setPicturesAttribute($pictures)
|
||||
{
|
||||
if (is_array($pictures)) {
|
||||
$this->attributes['pictures'] = json_encode($pictures);
|
||||
}
|
||||
}
|
||||
|
||||
public function getPicturesAttribute($pictures)
|
||||
{
|
||||
return json_decode($pictures, true);
|
||||
}
|
||||
```
|
||||
Of course, you can also specify any other format.
|
||||
|
||||
## Map
|
||||
|
||||
The map field refers to the network resource, and if there is a problem with the network refer to [form Component Management](/en/model-form-field-management.md) to remove the component.
|
||||
|
||||
Used to select the latitude and longitude, `$ latitude`,` $ longitude` for the latitude and longitude field, using Tencent map when `locale` set of laravel is` zh_CN`, otherwise use Google Maps:
|
||||
```php
|
||||
$form->map($latitude, $longitude, $label);
|
||||
|
||||
// Use Tencent map
|
||||
$form->map($latitude, $longitude, $label)->useTencentMap();
|
||||
|
||||
// Use google map
|
||||
$form->map($latitude, $longitude, $label)->useGoogleMap();
|
||||
```
|
||||
|
||||
## Slider
|
||||
Can be used to select the type of digital fields, such as age:
|
||||
```php
|
||||
$form->slider($column[, $label])->options(['max' => 100, 'min' => 1, 'step' => 1, 'postfix' => 'years old']);
|
||||
```
|
||||
More options please ref to https://github.com/IonDen/ion.rangeSlider#settings
|
||||
|
||||
## Rich text editor
|
||||
|
||||
The editor field refers to the network resource, and if there is a problem with the network refer to [form Component Management](/en/model-form-field-management.md) to remove the component.
|
||||
|
||||
```php
|
||||
$form->editor($column[, $label]);
|
||||
```
|
||||
|
||||
## Hidden field
|
||||
```php
|
||||
$form->hidden($column);
|
||||
```
|
||||
|
||||
## Switch
|
||||
`On` and` off` pairs of switches with the values `1` and` 0`:
|
||||
```php
|
||||
$states = [
|
||||
'on' => ['value' => 1, 'text' => 'enable', 'color' => 'success'],
|
||||
'off' => ['value' => 0, 'text' => 'disable', 'color' => 'danger'],
|
||||
];
|
||||
|
||||
$form->switch($column[, $label])->states($states);
|
||||
```
|
||||
|
||||
## Display field
|
||||
Only display the fields and without any action:
|
||||
```php
|
||||
$form->display($column[, $label]);
|
||||
```
|
||||
|
||||
## Divide
|
||||
```php
|
||||
$form->divide();
|
||||
```
|
||||
|
||||
## Html
|
||||
insert html,the argument passed in could be objects which impletements `Htmlable`、`Renderable`, or has method `__toString()`
|
||||
```php
|
||||
$form->html('html contents');
|
||||
```
|
||||
|
||||
## Tags
|
||||
Insert the comma (,) separated string `tags`
|
||||
```php
|
||||
$form->tags('keywords');
|
||||
```
|
||||
|
||||
## Icon
|
||||
Select the `font-awesome` icon.
|
||||
```php
|
||||
$form->icon('icon');
|
||||
```
|
||||
|
||||
## HasMany
|
||||
|
||||
One-to-many built-in tables for dealing with one-to-many relationships. Here is a simple example:
|
||||
|
||||
There are two tables are one-to-many relationship:
|
||||
|
||||
```sql
|
||||
CREATE TABLE `demo_painters` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`username` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`bio` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
|
||||
CREATE TABLE `demo_paintings` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`painter_id` int(10) unsigned NOT NULL,
|
||||
`title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`body` text COLLATE utf8_unicode_ci NOT NULL,
|
||||
`completed_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY painter_id (`painter_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
```
|
||||
|
||||
The model of tables are:
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Models\Demo;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Painter extends Model
|
||||
{
|
||||
public function paintings()
|
||||
{
|
||||
return $this->hasMany(Painting::class, 'painter_id');
|
||||
}
|
||||
}
|
||||
|
||||
<?php
|
||||
|
||||
namespace App\Models\Demo;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Painting extends Model
|
||||
{
|
||||
protected $fillable = ['title', 'body', 'completed_at'];
|
||||
|
||||
public function painter()
|
||||
{
|
||||
return $this->belongsTo(Painter::class, 'painter_id');
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Build the form code as follows:
|
||||
```php
|
||||
$form->display('id', 'ID');
|
||||
|
||||
$form->text('username')->rules('required');
|
||||
$form->textarea('bio')->rules('required');
|
||||
|
||||
$form->hasMany('paintings', function (Form\NestedForm $form) {
|
||||
$form->text('title');
|
||||
$form->image('body');
|
||||
$form->datetime('completed_at');
|
||||
});
|
||||
|
||||
$form->display('created_at', 'Created At');
|
||||
$form->display('updated_at', 'Updated At');
|
||||
```
|
||||
|
||||
## Embeds
|
||||
|
||||
Used to handle the `JSON` type field data of `mysql` or `object` type data of `mongodb`, or the data values of multiple fields can be stored in the form of the` JSON` string in the character type of mysql
|
||||
|
||||
Such as the `extra` column of the `JSON` or string type in the orders table, used to store data for multiple fields:
|
||||
|
||||
```php
|
||||
class Order extends Model
|
||||
{
|
||||
protected $casts = [
|
||||
'extra' => 'json',
|
||||
];
|
||||
}
|
||||
```
|
||||
And then use in the form:
|
||||
```php
|
||||
$form->embeds('extra', function ($form) {
|
||||
|
||||
$form->text('extra1')->rules('required');
|
||||
$form->email('extra2')->rules('required');
|
||||
$form->mobile('extra3');
|
||||
$form->datetime('extra4');
|
||||
|
||||
$form->dateRange('extra5', 'extra6', 'Date range')->rules('required');
|
||||
|
||||
});
|
||||
|
||||
// Customize the title
|
||||
$form->embeds('extra', 'Extra', function ($form) {
|
||||
...
|
||||
});
|
||||
```
|
||||
|
||||
Callback function inside the form element to create the method call and the outside is the same.
|
||||
115
vendor/encore/laravel-admin/docs/en/model-form-upload.md
vendored
Normal file
115
vendor/encore/laravel-admin/docs/en/model-form-upload.md
vendored
Normal file
@@ -0,0 +1,115 @@
|
||||
# File/Image upload
|
||||
|
||||
[model-form](/en/model-form.md) can build file and image upload field with following codes
|
||||
|
||||
```php
|
||||
$form->file('file_column');
|
||||
$form->image('image_column');
|
||||
```
|
||||
|
||||
### Change store path and name
|
||||
|
||||
```php
|
||||
|
||||
// change upload path
|
||||
$form->image('picture')->move('public/upload/image1/');
|
||||
|
||||
// use a unique name (md5(uniqid()).extension)
|
||||
$form->image('picture')->uniqueName();
|
||||
|
||||
// specify filename
|
||||
$form->image('picture')->name(function ($file) {
|
||||
return 'test.'.$file->guessExtension();
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
[model-form](/en/model-form.md) both support for local and cloud storage upload
|
||||
|
||||
### Upload to local
|
||||
|
||||
first add storage configuration, add a disk in `config/filesystems.php`:
|
||||
|
||||
```php
|
||||
|
||||
'disks' => [
|
||||
... ,
|
||||
|
||||
'admin' => [
|
||||
'driver' => 'local',
|
||||
'root' => public_path('uploads'),
|
||||
'visibility' => 'public',
|
||||
'url' => env('APP_URL').'/uploads',
|
||||
],
|
||||
],
|
||||
|
||||
```
|
||||
|
||||
set upload path to `public/upload`(public_path('upload')).
|
||||
|
||||
And then in `config/admin.php` select the `disk` set up above:
|
||||
|
||||
```php
|
||||
|
||||
'upload' => [
|
||||
|
||||
'disk' => 'admin',
|
||||
|
||||
'directory' => [
|
||||
'image' => 'image',
|
||||
'file' => 'file',
|
||||
],
|
||||
],
|
||||
|
||||
```
|
||||
|
||||
Set `disk` to the` admin` that you added above,`directory.image` and `directory.file` is the upload path for `$form->image($column)` and `$form->file($column)`.
|
||||
|
||||
`host` is url prefix for your uploaded files.
|
||||
|
||||
|
||||
### Upload to cloud
|
||||
|
||||
If you need to upload to the cloud storage, need to install a driver which supports `flysystem` adapter, take `qiniu` cloud storage as example.
|
||||
|
||||
first install [zgldh/qiniu-laravel-storage](https://github.com/zgldh/qiniu-laravel-storage).
|
||||
|
||||
Also configure the disk, in the `config/filesystems.php` add an item:
|
||||
|
||||
```php
|
||||
'disks' => [
|
||||
... ,
|
||||
'qiniu' => [
|
||||
'driver' => 'qiniu',
|
||||
'domains' => [
|
||||
'default' => 'xxxxx.com1.z0.glb.clouddn.com',
|
||||
'https' => 'dn-yourdomain.qbox.me',
|
||||
'custom' => 'static.abc.com',
|
||||
],
|
||||
'access_key'=> '', //AccessKey
|
||||
'secret_key'=> '', //SecretKey
|
||||
'bucket' => '', //Bucket
|
||||
'notify_url'=> '', //
|
||||
'url' => 'http://of8kfibjo.bkt.clouddn.com/',
|
||||
],
|
||||
],
|
||||
|
||||
```
|
||||
|
||||
Then modify the upload configuration of `laravel-admin` and open `config/admin.php` to find:
|
||||
|
||||
```php
|
||||
|
||||
'upload' => [
|
||||
|
||||
'disk' => 'qiniu',
|
||||
|
||||
'directory' => [
|
||||
'image' => 'image',
|
||||
'file' => 'file',
|
||||
],
|
||||
],
|
||||
|
||||
```
|
||||
|
||||
Select the above configuration` qiniu` for `disk`
|
||||
36
vendor/encore/laravel-admin/docs/en/model-form-validation.md
vendored
Normal file
36
vendor/encore/laravel-admin/docs/en/model-form-validation.md
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
Form validation
|
||||
========
|
||||
|
||||
`model-form` uses laravel's validation rules to verify the data submitted by the form:
|
||||
|
||||
```php
|
||||
$form->text('title')->rules('required|min:3');
|
||||
|
||||
// Complex validation rules can be implemented in the callback
|
||||
$form->text('title')->rules(function ($form) {
|
||||
|
||||
// If it is not an edit state, add field unique verification
|
||||
if (!$id = $form->model()->id) {
|
||||
return 'unique:users,email_address';
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
You can also customize the error message for the validation rule:
|
||||
|
||||
```php
|
||||
$form->text('code')->rules('required|regex:/^\d+$/|min:10', [
|
||||
'regex' => 'code must be numbers',
|
||||
'min' => 'code can not be less than 10 characters',
|
||||
]);
|
||||
```
|
||||
|
||||
If you want to allow the field to be empty, first in the database table to face the field set to `NULL`, and then
|
||||
|
||||
```php
|
||||
$form->text('title')->rules('nullable');
|
||||
```
|
||||
|
||||
Please refer to the more rules [Validation](https://laravel.com/docs/5.5/validation).
|
||||
179
vendor/encore/laravel-admin/docs/en/model-form.md
vendored
Normal file
179
vendor/encore/laravel-admin/docs/en/model-form.md
vendored
Normal file
@@ -0,0 +1,179 @@
|
||||
# Model-Form
|
||||
|
||||
The `Encore\Admin\Form` class is used to generate a data model-based form. For example, there is a` movies` table in the database
|
||||
|
||||
```sql
|
||||
CREATE TABLE `movies` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`director` int(10) unsigned NOT NULL,
|
||||
`describe` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`rate` tinyint unsigned NOT NULL,
|
||||
`released` enum(0, 1),
|
||||
`release_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
|
||||
```
|
||||
|
||||
The corresponding data model is `App\Models\Movie`, and the following code can generate the` movies` data form:
|
||||
|
||||
```php
|
||||
|
||||
use App\Models\Movie;
|
||||
use Encore\Admin\Form;
|
||||
use Encore\Admin\Facades\Admin;
|
||||
|
||||
$grid = Admin::form(Movie::class, function(Form $grid){
|
||||
|
||||
// Displays the record id
|
||||
$form->display('id', 'ID');
|
||||
|
||||
// Add an input box of type text
|
||||
$form->text('title', 'Movie title');
|
||||
|
||||
$directors = [
|
||||
1 => 'John',
|
||||
2 => 'Smith',
|
||||
3 => 'Kate',
|
||||
];
|
||||
|
||||
$form->select('director', 'Director')->options($directors);
|
||||
|
||||
// Add textarea for the describe field
|
||||
$form->textarea('describe', 'Describe');
|
||||
|
||||
// Number input
|
||||
$form->number('rate', 'Rate');
|
||||
|
||||
// Add a switch field
|
||||
$form->switch('released', 'Released?');
|
||||
|
||||
// Add a date and time selection box
|
||||
$form->dateTime('release_at', 'release time');
|
||||
|
||||
// Display two time column
|
||||
$form->display('created_at', 'Created time');
|
||||
$form->display('updated_at', 'Updated time');
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
## Custom tools
|
||||
|
||||
The top right corner of the form has two button tools by default. You can modify it in the following way:
|
||||
|
||||
```php
|
||||
$form->tools(function (Form\Tools $tools) {
|
||||
|
||||
// Disable back btn.
|
||||
$tools->disableBackButton();
|
||||
|
||||
// Disable list btn
|
||||
$tools->disableListButton();
|
||||
|
||||
// Add a button, the argument can be a string, or an instance of the object that implements the Renderable or Htmlable interface
|
||||
$tools->add('<a class="btn btn-sm btn-danger"><i class="fa fa-trash"></i> delete</a>');
|
||||
});
|
||||
```
|
||||
|
||||
## Other methods
|
||||
|
||||
Disable submit btn:
|
||||
|
||||
```php
|
||||
$form->disableSubmit();
|
||||
```
|
||||
|
||||
Disable reset btn:
|
||||
```php
|
||||
$form->disableReset();
|
||||
```
|
||||
|
||||
Ignore fields to store
|
||||
```php
|
||||
$form->ignore('column1', 'column2', 'column3');
|
||||
```
|
||||
|
||||
Set width for label and field
|
||||
|
||||
```php
|
||||
$form->setWidth(10, 2);
|
||||
```
|
||||
|
||||
Set form action
|
||||
|
||||
```php
|
||||
$form->setAction('admin/users');
|
||||
```
|
||||
|
||||
## Model relationship
|
||||
|
||||
|
||||
### One to One
|
||||
The `users` table and the `profiles` table are generated one-to-one relation through the `profiles.user_id` field.
|
||||
|
||||
```sql
|
||||
|
||||
CREATE TABLE `users` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
|
||||
CREATE TABLE `profiles` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`user_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`age` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`gender` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
```
|
||||
|
||||
The corresponding data model are:
|
||||
|
||||
```php
|
||||
|
||||
class User extends Model
|
||||
{
|
||||
public function profile()
|
||||
{
|
||||
return $this->hasOne(Profile::class);
|
||||
}
|
||||
}
|
||||
|
||||
class Profile extends Model
|
||||
{
|
||||
public function user()
|
||||
{
|
||||
return $this->belongsTo(User::class);
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
You can associate them in a form with the following code:
|
||||
|
||||
```php
|
||||
Admin::form(User::class, function (Form $form) {
|
||||
|
||||
$form->display('id');
|
||||
|
||||
$form->text('name');
|
||||
$form->text('email');
|
||||
|
||||
$form->text('profile.age');
|
||||
$form->text('profile.gender');
|
||||
|
||||
$form->datetime('created_at');
|
||||
$form->datetime('updated_at');
|
||||
});
|
||||
|
||||
```
|
||||
105
vendor/encore/laravel-admin/docs/en/model-grid-actions.md
vendored
Normal file
105
vendor/encore/laravel-admin/docs/en/model-grid-actions.md
vendored
Normal file
@@ -0,0 +1,105 @@
|
||||
# Model grid row actions
|
||||
|
||||
`model-grid` By default, there are two actions `edit` and `delete`, which can be turned off in the following way:
|
||||
|
||||
```php
|
||||
$grid->actions(function ($actions) {
|
||||
$actions->disableDelete();
|
||||
$actions->disableEdit();
|
||||
});
|
||||
```
|
||||
You can get the data for the current row by `$actions` parameter passed in:
|
||||
```php
|
||||
$grid->actions(function ($actions) {
|
||||
|
||||
// the array of data for the current row
|
||||
$actions->row;
|
||||
|
||||
// gets the current row primary key value
|
||||
$actions->getKey();
|
||||
});
|
||||
```
|
||||
|
||||
If you have a custom action button, you can add the following:
|
||||
|
||||
```php
|
||||
$grid->actions(function ($actions) {
|
||||
|
||||
// append an action.
|
||||
$actions->append('<a href=""><i class="fa fa-eye"></i></a>');
|
||||
|
||||
// prepend an action.
|
||||
$actions->prepend('<a href=""><i class="fa fa-paper-plane"></i></a>');
|
||||
}
|
||||
```
|
||||
|
||||
If you have more complex actions, you can refer to the following ways:
|
||||
|
||||
First define the action class:
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Admin\Extensions;
|
||||
|
||||
use Encore\Admin\Admin;
|
||||
|
||||
class CheckRow
|
||||
{
|
||||
protected $id;
|
||||
|
||||
public function __construct($id)
|
||||
{
|
||||
$this->id = $id;
|
||||
}
|
||||
|
||||
protected function script()
|
||||
{
|
||||
return <<<SCRIPT
|
||||
|
||||
$('.grid-check-row').on('click', function () {
|
||||
|
||||
// Your code.
|
||||
console.log($(this).data('id'));
|
||||
|
||||
});
|
||||
|
||||
SCRIPT;
|
||||
}
|
||||
|
||||
protected function render()
|
||||
{
|
||||
Admin::script($this->script());
|
||||
|
||||
return "<a class='btn btn-xs btn-success fa fa-check grid-check-row' data-id='{$this->id}'></a>";
|
||||
}
|
||||
|
||||
public function __toString()
|
||||
{
|
||||
return $this->render();
|
||||
}
|
||||
}
|
||||
```
|
||||
Then add the action:
|
||||
```php
|
||||
$grid->actions(function ($actions) {
|
||||
|
||||
// add action
|
||||
$actions->append(new CheckRow($actions->getKey()));
|
||||
}
|
||||
```
|
||||
|
||||
Row manipulations with column conditions:
|
||||
For row attributes, you can use `$row->model()` array or `$row->column()` method.
|
||||
You need to set style after setting attributes. Otherwise style method will be by-passed
|
||||
```php
|
||||
$grid->rows(function ($row) {
|
||||
// if relased column value is Yes
|
||||
if ( $row->column('released') == 'Yes' ) {
|
||||
// Set attributes for row.
|
||||
$row->setAttributes([ 'data-row-id' => $row->model()['id'], 'data-row-date' => $row->column('release_date') ]);
|
||||
// Set style of row
|
||||
$row->style("background-color:green");
|
||||
}
|
||||
|
||||
});
|
||||
```
|
||||
335
vendor/encore/laravel-admin/docs/en/model-grid-column.md
vendored
Normal file
335
vendor/encore/laravel-admin/docs/en/model-grid-column.md
vendored
Normal file
@@ -0,0 +1,335 @@
|
||||
# Model-grid column
|
||||
|
||||
`model-grid` built-in a lot of the operation of the column, you can use these methods very flexible operation of the column data.
|
||||
|
||||
The `Encore\Admin\Grid\Column` object has a built-in `display()` method to handle the value of the current column through the incoming callback function:
|
||||
```php
|
||||
$grid->column('title')->display(function ($title) {
|
||||
|
||||
return "<span style='color:blue'>$title</span>";
|
||||
|
||||
});
|
||||
```
|
||||
|
||||
The `display` callback bound to the current row data object as a parent object, you can use the data in current row by this way:
|
||||
```php
|
||||
|
||||
$grid->first_name();
|
||||
|
||||
$grid->last_name();
|
||||
|
||||
$grid->column('full_name')->display(function () {
|
||||
return $this->first_name . ' ' . $this->last_name;
|
||||
});
|
||||
```
|
||||
|
||||
> method `value()` is a alias to method `display()`.
|
||||
|
||||
## Built-in methods
|
||||
|
||||
`model-grid` has built-in methods to help you extend the column functionality
|
||||
|
||||
### editable
|
||||
|
||||
With the help of `editable.js`, you can edit the data in the grid directly:
|
||||
```php
|
||||
$grid->title()->editable();
|
||||
|
||||
$grid->title()->editable('textarea');
|
||||
|
||||
$grid->title()->editable('select', [1 => 'option1', 2 => 'option2', 3 => 'option3']);
|
||||
|
||||
$grid->birth()->editable('date');
|
||||
|
||||
$grid->published_at()->editable('datetime');
|
||||
|
||||
$grid->column('year')->editable('year');
|
||||
|
||||
$grid->column('month')->editable('month');
|
||||
|
||||
$grid->column('day')->editable('day');
|
||||
|
||||
```
|
||||
|
||||
### switch
|
||||
|
||||
> notice: If set up a switch for a column the grid, then need to set the column in the form of the same switch
|
||||
|
||||
Quickly turn a column into a switch component using the following methods:
|
||||
```php
|
||||
$grid->status()->switch();
|
||||
|
||||
// set the `text`、`color`、and `value`
|
||||
$states = [
|
||||
'on' => ['value' => 1, 'text' => 'YES', 'color' => 'primary'],
|
||||
'off' => ['value' => 2, 'text' => 'NO', 'color' => 'default'],
|
||||
];
|
||||
$grid->status()->switch($states);
|
||||
|
||||
```
|
||||
|
||||
### switchGroup
|
||||
|
||||
> notice: If set up switch for some columns the grid, then need to set these columns in the form of the same switch
|
||||
|
||||
To quickly change a column into a switch component group, use the following method:
|
||||
```php
|
||||
$states = [
|
||||
'on' => ['text' => 'YES'],
|
||||
'off' => ['text' => 'NO'],
|
||||
];
|
||||
|
||||
$grid->column('switch_group')->switchGroup([
|
||||
'hot' => 'Hot',
|
||||
'new' => 'New',
|
||||
'recommend' => 'Recommend',
|
||||
], $states);
|
||||
|
||||
```
|
||||
|
||||
### select
|
||||
|
||||
```php
|
||||
$grid->options()->select([
|
||||
1 => 'Sed ut perspiciatis unde omni',
|
||||
2 => 'voluptatem accusantium doloremque',
|
||||
3 => 'dicta sunt explicabo',
|
||||
4 => 'laudantium, totam rem aperiam',
|
||||
]);
|
||||
```
|
||||
|
||||
### radio
|
||||
```php
|
||||
$grid->options()->radio([
|
||||
1 => 'Sed ut perspiciatis unde omni',
|
||||
2 => 'voluptatem accusantium doloremque',
|
||||
3 => 'dicta sunt explicabo',
|
||||
4 => 'laudantium, totam rem aperiam',
|
||||
]);
|
||||
```
|
||||
|
||||
### checkbox
|
||||
```php
|
||||
$grid->options()->checkbox([
|
||||
1 => 'Sed ut perspiciatis unde omni',
|
||||
2 => 'voluptatem accusantium doloremque',
|
||||
3 => 'dicta sunt explicabo',
|
||||
4 => 'laudantium, totam rem aperiam',
|
||||
]);
|
||||
```
|
||||
|
||||
### image
|
||||
|
||||
```php
|
||||
$grid->picture()->image();
|
||||
|
||||
//Set host, width and height
|
||||
$grid->picture()->image('http://xxx.com', 100, 100);
|
||||
|
||||
// display multiple images
|
||||
$grid->pictures()->display(function ($pictures) {
|
||||
|
||||
return json_decode($pictures, true);
|
||||
|
||||
})->image('http://xxx.com', 100, 100);
|
||||
```
|
||||
|
||||
### label
|
||||
```php
|
||||
$grid->name()->label();
|
||||
|
||||
//Set color,defaults to `success`, other options `danger`、`warning`、`info`、`primary`、`default`、`success`
|
||||
$grid->name()->label('danger');
|
||||
|
||||
// can handle a array
|
||||
$grid->keywords()->label();
|
||||
```
|
||||
|
||||
### badge
|
||||
|
||||
```php
|
||||
$grid->name()->badge();
|
||||
|
||||
//Set color,defaults to `success`, other options `danger`、`warning`、`info`、`primary`、`default`、`success`
|
||||
$grid->name()->badge('danger');
|
||||
|
||||
// can handle a array
|
||||
$grid->keywords()->badge();
|
||||
```
|
||||
|
||||
## Extend the column
|
||||
|
||||
There are two ways to extend the column function, the first one is through the anonymous function.
|
||||
|
||||
Add following code to `app/Admin/bootstrap.php`:
|
||||
```php
|
||||
use Encore\Admin\Grid\Column;
|
||||
|
||||
Column::extend('color', function ($value, $color) {
|
||||
return "<span style='color: $color'>$value</span>";
|
||||
});
|
||||
```
|
||||
Use this extension in `model-grid`:
|
||||
```php
|
||||
|
||||
$grid->title()->color('#ccc');
|
||||
|
||||
```
|
||||
|
||||
If the column display logic is more complex, you can implement with an extension class.
|
||||
|
||||
Extension class `app/Admin/Extensions/Popover.php`:
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Admin\Extensions;
|
||||
|
||||
use Encore\Admin\Admin;
|
||||
use Encore\Admin\Grid\Displayers\AbstractDisplayer;
|
||||
|
||||
class Popover extends AbstractDisplayer
|
||||
{
|
||||
public function display($placement = 'left')
|
||||
{
|
||||
Admin::script("$('[data-toggle=\"popover\"]').popover()");
|
||||
|
||||
return <<<EOT
|
||||
<button type="button"
|
||||
class="btn btn-secondary"
|
||||
title="popover"
|
||||
data-container="body"
|
||||
data-toggle="popover"
|
||||
data-placement="$placement"
|
||||
data-content="{$this->value}"
|
||||
>
|
||||
Popover
|
||||
</button>
|
||||
|
||||
EOT;
|
||||
|
||||
}
|
||||
}
|
||||
```
|
||||
And then register the extension in `app/Admin/bootstrap.php`:
|
||||
```php
|
||||
use Encore\Admin\Grid\Column;
|
||||
use App\Admin\Extensions\Popover;
|
||||
|
||||
Column::extend('popover', Popover::class);
|
||||
```
|
||||
Use the extension in `model-grid`:
|
||||
```php
|
||||
$grid->desciption()->popover('right');
|
||||
```
|
||||
|
||||
|
||||
## helpers
|
||||
### String operations
|
||||
If the current output data is a string, you can call the method of class `Illuminate\Support\Str`.
|
||||
|
||||
For example, the following column shows the string value of the `title` field:
|
||||
|
||||
```php
|
||||
$grid->title();
|
||||
```
|
||||
|
||||
Call `Str::limit()` on `title` colum.
|
||||
|
||||
Can call `Str::limit()` method on the output string of the `title` column.
|
||||
|
||||
```php
|
||||
$grid->title()->limit(30);
|
||||
```
|
||||
|
||||
Continue to call `Illuminate\Support\Str` method:
|
||||
|
||||
```php
|
||||
$grid->title()->limit(30)->ucfirst();
|
||||
|
||||
$grid->title()->limit(30)->ucfirst()->substr(1, 10);
|
||||
|
||||
```
|
||||
|
||||
### Array operations
|
||||
If the current output data is a array, you can call the method of class `Illuminate\Support\Collection`.
|
||||
|
||||
For example, the `tags` column is an array of data retrieved from a one-to-many relationship:
|
||||
```php
|
||||
$grid->tags();
|
||||
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'id' => '16',
|
||||
'name' => 'php',
|
||||
'created_at' => '2016-11-13 14:03:03',
|
||||
'updated_at' => '2016-12-25 04:29:35',
|
||||
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'id' => '17',
|
||||
'name' => 'python',
|
||||
'created_at' => '2016-11-13 14:03:09',
|
||||
'updated_at' => '2016-12-25 04:30:27',
|
||||
),
|
||||
)
|
||||
|
||||
```
|
||||
|
||||
Call the `Collection::pluck()` method to get the `name` column from the array
|
||||
```php
|
||||
$grid->tags()->pluck('name');
|
||||
|
||||
array (
|
||||
0 => 'php',
|
||||
1 => 'python',
|
||||
),
|
||||
|
||||
```
|
||||
|
||||
The output data is still a array after above, so you can call methods of `Illuminate\Support\Collection` continue.
|
||||
|
||||
```php
|
||||
$grid->tags()->pluck('name')->map('ucwords');
|
||||
|
||||
array (
|
||||
0 => 'Php',
|
||||
1 => 'Python',
|
||||
),
|
||||
```
|
||||
Outputs the array as a string
|
||||
```php
|
||||
$grid->tags()->pluck('name')->map('ucwords')->implode('-');
|
||||
|
||||
"Php-Python"
|
||||
```
|
||||
|
||||
### Mixed use
|
||||
|
||||
In the above two types of method calls, as long as the output of the previous step is to determine the type of value, you can call the corresponding type of method, it can be very flexible mix.
|
||||
|
||||
For example, the `images` field is a JSON-formatted string type that stores a multiple-picture address array:
|
||||
|
||||
```php
|
||||
|
||||
$grid->images();
|
||||
|
||||
"['foo.jpg', 'bar.png']"
|
||||
|
||||
// chain method calls to display multiple images
|
||||
$grid->images()->display(function ($images) {
|
||||
|
||||
return json_decode($images, true);
|
||||
|
||||
})->map(function ($path) {
|
||||
|
||||
return 'http://localhost/images/'. $path;
|
||||
|
||||
})->image();
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
175
vendor/encore/laravel-admin/docs/en/model-grid-custom-tools.md
vendored
Normal file
175
vendor/encore/laravel-admin/docs/en/model-grid-custom-tools.md
vendored
Normal file
@@ -0,0 +1,175 @@
|
||||
# Custom tools
|
||||
|
||||
`model-grid` has `batch delete` and `refresh` operations tools as default, `model-grid` provides custom tool functionality if there are more operational requirements, the following example will show you how to add a `Gender selector` button group tool.
|
||||
|
||||
First define the tool class `app/Admin/Extensions/Tools/UserGender.php`:
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Admin\Extensions\Tools;
|
||||
|
||||
use Encore\Admin\Admin;
|
||||
use Encore\Admin\Grid\Tools\AbstractTool;
|
||||
use Illuminate\Support\Facades\Request;
|
||||
|
||||
class UserGender extends AbstractTool
|
||||
{
|
||||
protected function script()
|
||||
{
|
||||
$url = Request::fullUrlWithQuery(['gender' => '_gender_']);
|
||||
|
||||
return <<<EOT
|
||||
|
||||
$('input:radio.user-gender').change(function () {
|
||||
|
||||
var url = "$url".replace('_gender_', $(this).val());
|
||||
|
||||
$.pjax({container:'#pjax-container', url: url });
|
||||
|
||||
});
|
||||
|
||||
EOT;
|
||||
}
|
||||
|
||||
public function render()
|
||||
{
|
||||
Admin::script($this->script());
|
||||
|
||||
$options = [
|
||||
'all' => 'All',
|
||||
'm' => 'Male',
|
||||
'f' => 'Female',
|
||||
];
|
||||
|
||||
return view('admin.tools.gender', compact('options'));
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
The blade file of view `admin.tools.gender` is `resources/views/admin/tools/gender.blade.php`:
|
||||
```php
|
||||
<div class="btn-group" data-toggle="buttons">
|
||||
@foreach($options as $option => $label)
|
||||
<label class="btn btn-default btn-sm {{ \Request::get('gender', 'all') == $option ? 'active' : '' }}">
|
||||
<input type="radio" class="user-gender" value="{{ $option }}">{{$label}}
|
||||
</label>
|
||||
@endforeach
|
||||
</div>
|
||||
```
|
||||
|
||||
Import this tool in `model-grid`:
|
||||
```php
|
||||
|
||||
$grid->tools(function ($tools) {
|
||||
$tools->append(new UserGender());
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
In the `model-grid`, pass `gender` query to model:
|
||||
```php
|
||||
if (in_array(Request::get('gender'), ['m', 'f'])) {
|
||||
$grid->model()->where('gender', Request::get('gender'));
|
||||
}
|
||||
```
|
||||
|
||||
You can refer to the above way to add your own tools.
|
||||
|
||||
## Batch operation
|
||||
|
||||
At present, the default implementation of the batch delete operation, if you want to turn off the batch delete operation:
|
||||
```php
|
||||
$grid->tools(function ($tools) {
|
||||
$tools->batch(function ($batch) {
|
||||
$batch->disableDelete();
|
||||
});
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
If you want to add a custom batch operation, you can refer to the following example.
|
||||
|
||||
The following example will show you how to implements a `post batch release` operation:
|
||||
|
||||
First define the tool class `app/Admin/Extensions/Tools/ReleasePost.php`:
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Admin\Extensions\Tools;
|
||||
|
||||
use Encore\Admin\Grid\Tools\BatchAction;
|
||||
|
||||
class ReleasePost extends BatchAction
|
||||
{
|
||||
protected $action;
|
||||
|
||||
public function __construct($action = 1)
|
||||
{
|
||||
$this->action = $action;
|
||||
}
|
||||
|
||||
public function script()
|
||||
{
|
||||
return <<<EOT
|
||||
|
||||
$('{$this->getElementClass()}').on('click', function() {
|
||||
|
||||
$.ajax({
|
||||
method: 'post',
|
||||
url: '{$this->resource}/release',
|
||||
data: {
|
||||
_token:LA.token,
|
||||
ids: selectedRows(),
|
||||
action: {$this->action}
|
||||
},
|
||||
success: function () {
|
||||
$.pjax.reload('#pjax-container');
|
||||
toastr.success('操作成功');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
EOT;
|
||||
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
See the code above, use ajax to pass the selected `ids` to back-end api through a POST request, the back-end api modifies the state of the corresponding data according to the received `ids`, and then front-end refresh the page (pjax reload), and pop-up a `toastr` prompt operation is successful.
|
||||
|
||||
Import this operation in `model-grid`:
|
||||
```php
|
||||
$grid->tools(function ($tools) {
|
||||
$tools->batch(function ($batch) {
|
||||
$batch->add('Release post', new ReleasePost(1));
|
||||
$batch->add('Unrelease post', new ReleasePost(0));
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
So that the batch operation of the drop-down button will add the following two operations, the final step is to add an api to handle the request of the batch operation, the api code is as follows:
|
||||
```php
|
||||
|
||||
class PostController extends Controller
|
||||
{
|
||||
...
|
||||
|
||||
public function release(Request $request)
|
||||
{
|
||||
foreach (Post::find($request->get('ids')) as $post) {
|
||||
$post->released = $request->get('action');
|
||||
$post->save();
|
||||
}
|
||||
}
|
||||
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
Then add a route for the api above:
|
||||
```php
|
||||
$router->post('posts/release', 'PostController@release');
|
||||
```
|
||||
|
||||
This completes the entire process.
|
||||
57
vendor/encore/laravel-admin/docs/en/model-grid-export.md
vendored
Normal file
57
vendor/encore/laravel-admin/docs/en/model-grid-export.md
vendored
Normal file
@@ -0,0 +1,57 @@
|
||||
Data export
|
||||
=======
|
||||
|
||||
`model-grid` built-in export function is to achieve a simple csv format file export, if you encounter a file coding problem or can not meet their own needs, you can follow the steps below to customize the export function
|
||||
|
||||
This example uses [Laravel-Excel](https://github.com/Maatwebsite/Laravel-Excel) as an excel library, and of course you can use any other excel library.
|
||||
|
||||
First install it:
|
||||
|
||||
```shell
|
||||
composer require maatwebsite/excel:~2.1.0
|
||||
|
||||
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
|
||||
```
|
||||
|
||||
And then create a new custom export class, such as `app/Admin/Extensions/ExcelExpoter.php`:
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Admin\Extensions;
|
||||
|
||||
use Encore\Admin\Grid\Exporters\AbstractExporter;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
use Illuminate\Support\Arr;
|
||||
|
||||
class ExcelExpoter extends AbstractExporter
|
||||
{
|
||||
public function export()
|
||||
{
|
||||
Excel::create('Filename', function($excel) {
|
||||
|
||||
$excel->sheet('Sheetname', function($sheet) {
|
||||
|
||||
// This logic get the columns that need to be exported from the table data
|
||||
$rows = collect($this->getData())->map(function ($item) {
|
||||
return Arr::only($item, ['id', 'title', 'content', 'rate', 'keywords']);
|
||||
});
|
||||
|
||||
$sheet->rows($rows);
|
||||
|
||||
});
|
||||
|
||||
})->export('xls');
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
And then use this class in `model-grid`:
|
||||
```php
|
||||
|
||||
use App\Admin\Extensions\ExcelExpoter;
|
||||
|
||||
$grid->exporter(new ExcelExpoter());
|
||||
|
||||
```
|
||||
|
||||
For more information on how to use `Laravel-Excel`, refer to [laravel-excel/docs](http://www.maatwebsite.nl/laravel-excel/docs)
|
||||
258
vendor/encore/laravel-admin/docs/en/model-grid-filters.md
vendored
Normal file
258
vendor/encore/laravel-admin/docs/en/model-grid-filters.md
vendored
Normal file
@@ -0,0 +1,258 @@
|
||||
# Model grid filters
|
||||
|
||||
`model-grid`Provides a set of data filters:
|
||||
|
||||
```php
|
||||
$grid->filter(function($filter){
|
||||
|
||||
// Remove the default id filter
|
||||
$filter->disableIdFilter();
|
||||
|
||||
// Add a column filter
|
||||
$filter->like('name', 'name');
|
||||
...
|
||||
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
## Filter type
|
||||
|
||||
Currently supported filter types are the following:
|
||||
|
||||
### Equal
|
||||
`sql: ... WHERE `column` = ""$input""`:
|
||||
```php
|
||||
$filter->equal('column', $label);
|
||||
```
|
||||
|
||||
### Not equal
|
||||
`sql: ... WHERE `column` != ""$input""`:
|
||||
```php
|
||||
$filter->notEqual('column', $label);
|
||||
```
|
||||
|
||||
### Like
|
||||
`sql: ... WHERE `column` LIKE "%"$input"%"`:
|
||||
```php
|
||||
$filter->like('column', $label);
|
||||
```
|
||||
|
||||
### Ilike
|
||||
`sql: ... WHERE `column` ILIKE "%"$input"%"`:
|
||||
```php
|
||||
$filter->ilike('column', $label);
|
||||
```
|
||||
|
||||
### Greater then
|
||||
`sql: ... WHERE `column` > "$input"`:
|
||||
```php
|
||||
$filter->gt('column', $label);
|
||||
```
|
||||
|
||||
### Less than
|
||||
`sql: ... WHERE `column` < "$input"`:
|
||||
```php
|
||||
$filter->lt('column', $label);
|
||||
```
|
||||
|
||||
### Between
|
||||
`sql: ... WHERE `column` BETWEEN "$start" AND "$end"`:
|
||||
```php
|
||||
$filter->between('column', $label);
|
||||
|
||||
// set datetime field type
|
||||
$filter->between('column', $label)->datetime();
|
||||
|
||||
// set time field type
|
||||
$filter->between('column', $label)->time();
|
||||
```
|
||||
|
||||
### In
|
||||
`sql: ... WHERE `column` in (...$inputs)`:
|
||||
```php
|
||||
$filter->in('column', $label)->multipleSelect(['key' => 'value']);
|
||||
```
|
||||
|
||||
### NotIn
|
||||
`sql: ... WHERE `column` not in (...$inputs)`:
|
||||
```php
|
||||
$filter->notIn('column', $label)->multipleSelect(['key' => 'value']);
|
||||
```
|
||||
|
||||
### Date
|
||||
`sql: ... WHERE DATE(`column`) = "$input"`:
|
||||
```php
|
||||
$filter->date('column', $label);
|
||||
```
|
||||
|
||||
### Day
|
||||
`sql: ... WHERE DAY(`column`) = "$input"`:
|
||||
```php
|
||||
$filter->day('column', $label);
|
||||
```
|
||||
|
||||
### Month
|
||||
`sql: ... WHERE MONTH(`column`) = "$input"`:
|
||||
```php
|
||||
$filter->month('column', $label);
|
||||
```
|
||||
|
||||
### year
|
||||
`sql: ... WHERE YEAR(`column`) = "$input"`:
|
||||
```php
|
||||
$filter->year('column', $label);
|
||||
```
|
||||
|
||||
### Where
|
||||
|
||||
You can use `where` to build more complex query filtering
|
||||
|
||||
`sql: ... WHERE `title` LIKE "%$input" OR `content` LIKE "%$input"`:
|
||||
```php
|
||||
$filter->where(function ($query) {
|
||||
|
||||
$query->where('title', 'like', "%{$this->input}%")
|
||||
->orWhere('content', 'like', "%{$this->input}%");
|
||||
|
||||
}, 'Text');
|
||||
```
|
||||
|
||||
`sql: ... WHERE `rate` >= 6 AND `created_at` = {$input}`:
|
||||
```php
|
||||
$filter->where(function ($query) {
|
||||
|
||||
$query->whereRaw("`rate` >= 6 AND `created_at` = {$this->input}");
|
||||
|
||||
}, 'Text');
|
||||
```
|
||||
|
||||
Relationship query, query the corresponding relationship `profile` field:
|
||||
```php
|
||||
$filter->where(function ($query) {
|
||||
|
||||
$query->whereHas('profile', function ($query) {
|
||||
$query->where('address', 'like', "%{$this->input}%")->orWhere('email', 'like', "%{$this->input}%");
|
||||
});
|
||||
|
||||
}, 'Address or mobile');
|
||||
```
|
||||
|
||||
## Field type
|
||||
|
||||
The default field type is text input, set placeholder for text input:
|
||||
|
||||
```php
|
||||
$filter->equal('column')->placeholder('Please input...');
|
||||
```
|
||||
|
||||
You can also restrict the user input format by using some of the following methods:
|
||||
|
||||
```php
|
||||
$filter->equal('column')->url();
|
||||
|
||||
$filter->equal('column')->email();
|
||||
|
||||
$filter->equal('column')->integer();
|
||||
|
||||
$filter->equal('column')->ip();
|
||||
|
||||
$filter->equal('column')->mac();
|
||||
|
||||
$filter->equal('column')->mobile();
|
||||
|
||||
// $options refer to https://github.com/RobinHerbots/Inputmask/blob/4.x/README_numeric.md
|
||||
$filter->equal('column')->decimal($options = []);
|
||||
|
||||
// $options refer to https://github.com/RobinHerbots/Inputmask/blob/4.x/README_numeric.md
|
||||
$filter->equal('column')->currency($options = []);
|
||||
|
||||
// $options refer to https://github.com/RobinHerbots/Inputmask/blob/4.x/README_numeric.md
|
||||
$filter->equal('column')->percentage($options = []);
|
||||
|
||||
// $options refer to https://github.com/RobinHerbots/Inputmask
|
||||
$filter->equal('column')->inputmask($options = [], $icon = 'pencil');
|
||||
```
|
||||
|
||||
### Select
|
||||
```php
|
||||
$filter->equal('column')->select(['key' => 'value'...]);
|
||||
|
||||
// Or from the api to obtain data, api format reference model-form `select` component
|
||||
$filter->equal('column')->select('api/users');
|
||||
```
|
||||
|
||||
### multipleSelect
|
||||
Generally used in conjunction with `in` and` notIn` need to query the array of two types of inquiries can also be used in the `type` type of query:
|
||||
```php
|
||||
$filter->in('column')->multipleSelect(['key' => 'value'...]);
|
||||
|
||||
// // Or from the api to obtain data, api format reference model-form `multipleSelect` component
|
||||
$filter->in('column')->multipleSelect('api/users');
|
||||
```
|
||||
|
||||
### radio
|
||||
The more common scenario is the selection of categories
|
||||
|
||||
```php
|
||||
$filter->equal('released')->radio([
|
||||
'' => 'All',
|
||||
0 => 'Unreleased',
|
||||
1 => 'Released',
|
||||
]);
|
||||
```
|
||||
|
||||
### checkbox
|
||||
The more common scene is do the scope query with `whereIn`:
|
||||
|
||||
```php
|
||||
$filter->in('gender')->checkbox([
|
||||
'm' => 'Male',
|
||||
'f' => 'Female',
|
||||
]);
|
||||
```
|
||||
|
||||
### datetime
|
||||
|
||||
Use date and time components,`$options` parameter and value reference [bootstrap-datetimepicker](http://eonasdan.github.io/bootstrap-datetimepicker/Options/)
|
||||
|
||||
```php
|
||||
$filter->equal('column')->datetime($options);
|
||||
|
||||
// `date()` equals to `datetime(['format' => 'YYYY-MM-DD'])`
|
||||
$filter->equal('column')->date();
|
||||
|
||||
// `time()` equals to `datetime(['format' => 'HH:mm:ss'])`
|
||||
$filter->equal('column')->time();
|
||||
|
||||
// `day()` equals to `datetime(['format' => 'DD'])`
|
||||
$filter->equal('column')->day();
|
||||
|
||||
// `month()` equals to `datetime(['format' => 'MM'])`
|
||||
$filter->equal('column')->month();
|
||||
|
||||
// `year()` equals to `datetime(['format' => 'YYYY'])`
|
||||
$filter->equal('column')->year();
|
||||
|
||||
```
|
||||
|
||||
## Complex query filter
|
||||
|
||||
You can use the `$this->input` to trigger complex custom queries:
|
||||
```php
|
||||
$filter->where(function ($query) {
|
||||
switch ($this->input) {
|
||||
case 'yes':
|
||||
// custom complex query if the 'yes' option is selected
|
||||
$query->has('somerelationship');
|
||||
break;
|
||||
case 'no':
|
||||
$query->doesntHave('somerelationship');
|
||||
break;
|
||||
}
|
||||
}, 'Label of the field', 'name_for_url_shortcut')->radio([
|
||||
'' => 'All',
|
||||
'yes' => 'Only with relationship',
|
||||
'no' => 'Only without relationship',
|
||||
]);
|
||||
```
|
||||
410
vendor/encore/laravel-admin/docs/en/model-grid.md
vendored
Normal file
410
vendor/encore/laravel-admin/docs/en/model-grid.md
vendored
Normal file
@@ -0,0 +1,410 @@
|
||||
# Model-grid
|
||||
|
||||
Class `Encore\Admin\Grid` is used to generate tables based on the data model,for example,we have a table `movies` in database:
|
||||
|
||||
```sql
|
||||
CREATE TABLE `movies` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`director` int(10) unsigned NOT NULL,
|
||||
`describe` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`rate` tinyint unsigned NOT NULL,
|
||||
`released` enum(0, 1),
|
||||
`release_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
|
||||
```
|
||||
|
||||
And the model of this table is `App\Models\Movie`,The following code can generate the data grid for table `movies`:
|
||||
|
||||
```php
|
||||
|
||||
use App\Models\Movie;
|
||||
use Encore\Admin\Grid;
|
||||
use Encore\Admin\Facades\Admin;
|
||||
|
||||
$grid = Admin::grid(Movie::class, function(Grid $grid){
|
||||
|
||||
// The first column displays the id field and sets the column as a sortable column
|
||||
$grid->id('ID')->sortable();
|
||||
|
||||
// The second column shows the title field, because the title field name and the Grid object's title method conflict, so use Grid's column () method instead
|
||||
$grid->column('title');
|
||||
|
||||
// The third column shows the director field, which is set by the display($callback) method to display the corresponding user name in the users table
|
||||
$grid->director()->display(function($userId) {
|
||||
return User::find($userId)->name;
|
||||
});
|
||||
|
||||
// The fourth column appears as the describe field
|
||||
$grid->describe();
|
||||
|
||||
// The fifth column is displayed as the rate field
|
||||
$grid->rate();
|
||||
|
||||
// The sixth column shows the released field, formatting the display output through the display($callback) method
|
||||
$grid->released('Release?')->display(function ($released) {
|
||||
return $released ? 'yes' : 'no';
|
||||
});
|
||||
|
||||
// The following shows the columns for the three time fields
|
||||
$grid->release_at();
|
||||
$grid->created_at();
|
||||
$grid->updated_at();
|
||||
|
||||
// The filter($callback) method is used to set up a simple search box for the table
|
||||
$grid->filter(function ($filter) {
|
||||
|
||||
// Sets the range query for the created_at field
|
||||
$filter->between('created_at', 'Created Time')->datetime();
|
||||
});
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
## Basic Usage
|
||||
|
||||
#### Add a column
|
||||
```php
|
||||
|
||||
// Add the column directly through the field name `username`
|
||||
$grid->username('Username');
|
||||
|
||||
// The effect is the same as above
|
||||
$grid->column('username', 'Username');
|
||||
|
||||
// Add multiple columns
|
||||
$grid->columns('email', 'username' ...);
|
||||
```
|
||||
|
||||
#### Modify the source data
|
||||
```php
|
||||
$grid->model()->where('id', '>', 100);
|
||||
|
||||
$grid->model()->orderBy('id', 'desc');
|
||||
|
||||
$grid->model()->take(100);
|
||||
|
||||
```
|
||||
|
||||
#### Sets the number of lines displayed per page
|
||||
|
||||
```php
|
||||
// The default is 15 per page
|
||||
$grid->paginate(20);
|
||||
```
|
||||
|
||||
#### Modify the display output of column
|
||||
|
||||
```php
|
||||
use Illuminate\Support\Str;
|
||||
$grid->text()->display(function($text) {
|
||||
return Str::limit($text, 30, '...');
|
||||
});
|
||||
|
||||
$grid->name()->display(function ($name) {
|
||||
return "<span class='label'>$name</span>";
|
||||
});
|
||||
|
||||
$grid->email()->display(function ($email) {
|
||||
return "mailto:$email";
|
||||
});
|
||||
|
||||
// column not in table
|
||||
$grid->column('column_not_in_table')->display(function () {
|
||||
return 'blablabla....';
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
The closure passed to method `display()` is bind to row data object, you can use other column data in current row.
|
||||
|
||||
```php
|
||||
$grid->first_name();
|
||||
$grid->last_name();
|
||||
|
||||
// column not in table
|
||||
$grid->column('full_name')->display(function () {
|
||||
return $this->first_name.' '.$this->last_name;
|
||||
});
|
||||
```
|
||||
|
||||
#### Disable the create button
|
||||
```php
|
||||
$grid->disableCreateButton();
|
||||
```
|
||||
|
||||
#### Disable Pagination
|
||||
```php
|
||||
$grid->disablePagination();
|
||||
```
|
||||
|
||||
#### Disable all tools on header of grid. Filter, refresh, export, batch actions
|
||||
```php
|
||||
$grid->disableTools();
|
||||
```
|
||||
|
||||
#### Disable data filter
|
||||
```php
|
||||
$grid->disableFilter();
|
||||
```
|
||||
|
||||
#### Disable the export button
|
||||
```php
|
||||
$grid->disableExport();
|
||||
```
|
||||
|
||||
#### Disable row selector
|
||||
```php
|
||||
$grid->disableRowSelector();
|
||||
```
|
||||
|
||||
#### Disable row actions
|
||||
```php
|
||||
$grid->disableActions();
|
||||
```
|
||||
|
||||
#### Enable orderable grid
|
||||
```php
|
||||
$grid->orderable();
|
||||
```
|
||||
|
||||
#### Set options for perPage selector
|
||||
```php
|
||||
$grid->perPages([10, 20, 30, 40, 50]);
|
||||
```
|
||||
|
||||
## Relation
|
||||
|
||||
|
||||
### One to one
|
||||
|
||||
The `users` table and the `profiles` table are generated one-to-one relation through the `profiles.user_id` field.
|
||||
|
||||
```sql
|
||||
|
||||
CREATE TABLE `users` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
|
||||
CREATE TABLE `profiles` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`user_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`age` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`gender` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
```
|
||||
|
||||
The corresponding data model are:
|
||||
|
||||
```php
|
||||
|
||||
class User extends Model
|
||||
{
|
||||
public function profile()
|
||||
{
|
||||
return $this->hasOne(Profile::class);
|
||||
}
|
||||
}
|
||||
|
||||
class Profile extends Model
|
||||
{
|
||||
public function user()
|
||||
{
|
||||
return $this->belongsTo(User::class);
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
You can associate them in a grid with the following code:
|
||||
|
||||
```php
|
||||
Admin::grid(User::class, function (Grid $grid) {
|
||||
|
||||
$grid->id('ID')->sortable();
|
||||
|
||||
$grid->name();
|
||||
$grid->email();
|
||||
|
||||
$grid->column('profile.age');
|
||||
$grid->column('profile.gender');
|
||||
|
||||
//or
|
||||
$grid->profile()->age();
|
||||
$grid->profile()->gender();
|
||||
|
||||
$grid->created_at();
|
||||
$grid->updated_at();
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
### One to many
|
||||
|
||||
The `posts` and `comments` tables generate a one-to-many association via the `comments.post_id` field
|
||||
|
||||
```sql
|
||||
|
||||
CREATE TABLE `posts` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`content` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
|
||||
CREATE TABLE `comments` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`post_id` int(10) unsigned NOT NULL,
|
||||
`content` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
```
|
||||
|
||||
The corresponding data model are:
|
||||
|
||||
```php
|
||||
|
||||
class Post extends Model
|
||||
{
|
||||
public function comments()
|
||||
{
|
||||
return $this->hasMany(Comment::class);
|
||||
}
|
||||
}
|
||||
|
||||
class Comment extends Model
|
||||
{
|
||||
public function post()
|
||||
{
|
||||
return $this->belongsTo(Post::class);
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
You can associate them in a grid with the following code:
|
||||
|
||||
```php
|
||||
|
||||
return Admin::grid(Post::class, function (Grid $grid) {
|
||||
$grid->id('id')->sortable();
|
||||
$grid->title();
|
||||
$grid->content();
|
||||
|
||||
$grid->comments('Comments count')->display(function ($comments) {
|
||||
$count = count($comments);
|
||||
return "<span class='label label-warning'>{$count}</span>";
|
||||
});
|
||||
|
||||
$grid->created_at();
|
||||
$grid->updated_at();
|
||||
});
|
||||
|
||||
|
||||
return Admin::grid(Comment::class, function (Grid $grid) {
|
||||
$grid->id('id');
|
||||
$grid->post()->title();
|
||||
$grid->content();
|
||||
|
||||
$grid->created_at()->sortable();
|
||||
$grid->updated_at();
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
### Many to many
|
||||
|
||||
The `users` and` roles` tables produce a many-to-many relationship through the pivot table `role_user`
|
||||
|
||||
```sql
|
||||
|
||||
CREATE TABLE `users` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`username` varchar(190) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`password` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`created_at` timestamp NULL DEFAULT NULL,
|
||||
`updated_at` timestamp NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `users_username_unique` (`username`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
|
||||
|
||||
CREATE TABLE `roles` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`slug` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`created_at` timestamp NULL DEFAULT NULL,
|
||||
`updated_at` timestamp NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `roles_name_unique` (`name`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
|
||||
|
||||
CREATE TABLE `role_users` (
|
||||
`role_id` int(11) NOT NULL,
|
||||
`user_id` int(11) NOT NULL,
|
||||
`created_at` timestamp NULL DEFAULT NULL,
|
||||
`updated_at` timestamp NULL DEFAULT NULL,
|
||||
KEY `role_users_role_id_user_id_index` (`role_id`,`user_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
|
||||
```
|
||||
|
||||
The corresponding data model are:
|
||||
|
||||
```php
|
||||
|
||||
class User extends Model
|
||||
{
|
||||
public function roles()
|
||||
{
|
||||
return $this->belongsToMany(Role::class);
|
||||
}
|
||||
}
|
||||
|
||||
class Role extends Model
|
||||
{
|
||||
public function users()
|
||||
{
|
||||
return $this->belongsToMany(User::class);
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
You can associate them in a grid with the following code:
|
||||
|
||||
```php
|
||||
return Admin::grid(User::class, function (Grid $grid) {
|
||||
$grid->id('ID')->sortable();
|
||||
$grid->username();
|
||||
$grid->name();
|
||||
|
||||
$grid->roles()->display(function ($roles) {
|
||||
|
||||
$roles = array_map(function ($role) {
|
||||
return "<span class='label label-success'>{$role['name']}</span>";
|
||||
}, $roles);
|
||||
|
||||
return join(' ', $roles);
|
||||
});
|
||||
|
||||
$grid->created_at();
|
||||
$grid->updated_at();
|
||||
});
|
||||
|
||||
```
|
||||
124
vendor/encore/laravel-admin/docs/en/model-tree.md
vendored
Normal file
124
vendor/encore/laravel-admin/docs/en/model-tree.md
vendored
Normal file
@@ -0,0 +1,124 @@
|
||||
# Model-tree
|
||||
|
||||
Can be achieved through a `model-tree` to a tree-like components, you can drag the way to achieve the level of data, sorting and other operations, the following is the basic usage.
|
||||
|
||||
## Table structure and model
|
||||
|
||||
To use `model-tree`, you have to follow the convention of the table structure:
|
||||
|
||||
```sql
|
||||
CREATE TABLE `demo_categories` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`parent_id` int(11) NOT NULL DEFAULT '0',
|
||||
`order` int(11) NOT NULL DEFAULT '0',
|
||||
`title` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
|
||||
```
|
||||
The above table structure has three necessary fields `parent_id`, `order`, `title`, and the other fields are not required.
|
||||
|
||||
The corresponding model is `app/Models/Category.php`:
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Models\Demo;
|
||||
|
||||
use Encore\Admin\Traits\AdminBuilder;
|
||||
use Encore\Admin\Traits\ModelTree;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Category extends Model
|
||||
{
|
||||
use ModelTree, AdminBuilder;
|
||||
|
||||
protected $table = 'demo_categories';
|
||||
}
|
||||
```
|
||||
|
||||
Table structure in the three fields `parent_id`,` order`, `title` field name can be amended:
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Models\Demo;
|
||||
|
||||
use Encore\Admin\Traits\AdminBuilder;
|
||||
use Encore\Admin\Traits\ModelTree;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Category extends Model
|
||||
{
|
||||
use ModelTree, AdminBuilder;
|
||||
|
||||
protected $table = 'demo_categories';
|
||||
|
||||
public function __construct(array $attributes = [])
|
||||
{
|
||||
parent::__construct($attributes);
|
||||
|
||||
$this->setParentColumn('pid');
|
||||
$this->setOrderColumn('sort');
|
||||
$this->setTitleColumn('name');
|
||||
}
|
||||
}
|
||||
```
|
||||
## Usage
|
||||
然后就是在页面中使用`model-tree`了:
|
||||
|
||||
Then use `model-tree` in your page
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Admin\Controllers\Demo;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Category;
|
||||
use Encore\Admin\Form;
|
||||
use Encore\Admin\Facades\Admin;
|
||||
use Encore\Admin\Layout\Content;
|
||||
use Encore\Admin\Controllers\ModelForm;
|
||||
use Encore\Admin\Tree;
|
||||
|
||||
class CategoryController extends Controller
|
||||
{
|
||||
use ModelForm;
|
||||
|
||||
public function index()
|
||||
{
|
||||
return Admin::content(function (Content $content) {
|
||||
$content->header('Categories');
|
||||
$content->body(Category::tree());
|
||||
});
|
||||
}
|
||||
}
|
||||
```
|
||||
You can modify the display of branch in the following ways:
|
||||
```php
|
||||
Category::tree(function ($tree) {
|
||||
$tree->branch(function ($branch) {
|
||||
$src = config('admin.upload.host') . '/' . $branch['logo'] ;
|
||||
$logo = "<img src='$src' style='max-width:30px;max-height:30px' class='img'/>";
|
||||
|
||||
return "{$branch['id']} - {$branch['title']} $logo";
|
||||
});
|
||||
})
|
||||
```
|
||||
|
||||
The `$branch` parameter is array of current row data.
|
||||
|
||||
If you want to modify the query of the model, use the following way:
|
||||
```php
|
||||
|
||||
Category::tree(function ($tree) {
|
||||
|
||||
$tree->query(function ($model) {
|
||||
return $model->where('type', 1);
|
||||
});
|
||||
|
||||
})
|
||||
```
|
||||
|
||||
|
||||
141
vendor/encore/laravel-admin/docs/en/permission.md
vendored
Normal file
141
vendor/encore/laravel-admin/docs/en/permission.md
vendored
Normal file
@@ -0,0 +1,141 @@
|
||||
# Access Control
|
||||
|
||||
`laravel-admin` has built-in` RBAC` permissions control module, expand the left sidebar `Auth`, you can see user, permissions and roles management panel, the use of permissions control as follows:
|
||||
|
||||
## Route permission
|
||||
|
||||
In the `laravel-admin 1.5`, the permissions and routes are bound together, in the edit permission page which set the current permissions can access the routing, in the `HTTP method` select box to select the method of access to the path, in the `HTTP path` textarea fill in the path to access.
|
||||
|
||||
For example, to add a permission, the permission can access the path `/admin/users` in GET method, then `HTTP method` select `GET`, `HTTP path` fill in `/users`.
|
||||
|
||||
If you want to access all paths with the prefix `/admin/users`, then the `HTTP path` fill in `/users*`, if the permissions include multiple access paths, wrap the line for each path.
|
||||
|
||||
## Page permission
|
||||
|
||||
If you want to control the user's permissions in the page, you can refer to the following example
|
||||
|
||||
### example1
|
||||
|
||||
For example, there is now a scene, here is a article module, we use create articles as an example
|
||||
|
||||
At first open `http://localhost/admi/auth/permissions`, fill up slug field with text `create-post`, and `Create post` in name field, then assign this permission to some roles.
|
||||
|
||||
In your controller action:
|
||||
```php
|
||||
use Encore\Admin\Auth\Permission;
|
||||
|
||||
class PostController extends Controller
|
||||
{
|
||||
public function create()
|
||||
{
|
||||
// check permission, only the roles with permission `create-post` can visit this action
|
||||
Permission::check('create-post');
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### example2
|
||||
|
||||
If you want to control the page elements of the user's display, then you need to first define permissions, such as `delete-image` and `view-title-column`, respectively, to control the permissions to delete pictures and display a column in grid, then assign these two permissions to roles, add following code to the grid:
|
||||
```php
|
||||
$grid->actions(function ($actions) {
|
||||
|
||||
// The roles with this permission will not able to see the delete button in actions column.
|
||||
if (!Admin::user()->can('delete-image')) {
|
||||
$actions->disableDelete();
|
||||
}
|
||||
});
|
||||
|
||||
// Only roles with permission `view-title-column` can view this column in grid
|
||||
if (Admin::user()->can('view-title-column')) {
|
||||
$grid->column('title');
|
||||
}
|
||||
```
|
||||
|
||||
## Other methods
|
||||
|
||||
Get current user object.
|
||||
```php
|
||||
Admin::user();
|
||||
```
|
||||
|
||||
Get current user id.
|
||||
```php
|
||||
Admin::user()->id;
|
||||
```
|
||||
|
||||
Get user's roles.
|
||||
```php
|
||||
Admin::user()->roles;
|
||||
```
|
||||
|
||||
Get user's permissions.
|
||||
```php
|
||||
Admin::user()->permissions;
|
||||
```
|
||||
|
||||
User is role.
|
||||
```php
|
||||
Admin::user()->isRole('developer');
|
||||
```
|
||||
|
||||
User has permission.
|
||||
```php
|
||||
Admin::user()->can('create-post');
|
||||
```
|
||||
|
||||
User don't has permission.
|
||||
```php
|
||||
Admin::user()->cannot('delete-post');
|
||||
```
|
||||
|
||||
Is user super administrator.
|
||||
```php
|
||||
Admin::user()->isAdministrator();
|
||||
```
|
||||
|
||||
Is user in one of roles.
|
||||
```php
|
||||
Admin::user()->inRoles(['editor', 'developer']);
|
||||
```
|
||||
|
||||
## Permission middleware
|
||||
|
||||
You can use permission middleware in the routes to control the routing permission
|
||||
|
||||
```php
|
||||
|
||||
// Allow roles `administrator` and `editor` access the routes under group.
|
||||
Route::group([
|
||||
'middleware' => 'admin.permission:allow,administrator,editor',
|
||||
], function ($router) {
|
||||
|
||||
$router->resource('users', UserController::class);
|
||||
...
|
||||
|
||||
});
|
||||
|
||||
// Deny roles `developer` and `operator` access the routes under group.
|
||||
Route::group([
|
||||
'middleware' => 'admin.permission:deny,developer,operator',
|
||||
], function ($router) {
|
||||
|
||||
$router->resource('users', UserController::class);
|
||||
...
|
||||
|
||||
});
|
||||
|
||||
// User has permission `edit-post`、`create-post` and `delete-post` can access routes under group.
|
||||
Route::group([
|
||||
'middleware' => 'admin.permission:check,edit-post,create-post,delete-post',
|
||||
], function ($router) {
|
||||
|
||||
$router->resource('posts', PostController::class);
|
||||
...
|
||||
|
||||
});
|
||||
```
|
||||
|
||||
The usage of permission middleware is just as same as other middleware.
|
||||
|
||||
|
||||
62
vendor/encore/laravel-admin/docs/en/quick-start.md
vendored
Normal file
62
vendor/encore/laravel-admin/docs/en/quick-start.md
vendored
Normal file
@@ -0,0 +1,62 @@
|
||||
# Quick start
|
||||
|
||||
We use `users` table come with `Laravel` for example,the structure of table is:
|
||||
```sql
|
||||
CREATE TABLE `users` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`password` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`remember_token` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `users_email_unique` (`email`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
|
||||
```
|
||||
And the model for this table is `App\User.php`
|
||||
|
||||
You can follow these steps to setup `CRUD` interfaces of table `users`:
|
||||
|
||||
## Add controller
|
||||
|
||||
Use the following command to create a controller for `App\User` model
|
||||
|
||||
```php
|
||||
php artisan admin:make UserController --model=App\\User
|
||||
|
||||
// under windows use:
|
||||
php artisan admin:make UserController --model=App\User
|
||||
```
|
||||
The above command will create the controller in `app/Admin/Controllers/UserController.php`.
|
||||
|
||||
## Add route
|
||||
|
||||
Add a route in `app/Admin/routes.php`:
|
||||
```
|
||||
$router->resource('demo/users', UserController::class);
|
||||
```
|
||||
|
||||
## Add left menu item
|
||||
|
||||
Open `http://localhost:8000/admin/auth/menu`, add menu link and refresh the page, then you can find a link item in left menu bar.
|
||||
|
||||
> Where `uri` fills in the path part that does not contain the prefix of the route, such as the full path `http://localhost:8000/admin/demo/users`, just input `demo/users`, If you want to add an external link, just fill in the full url, such as `http://laravel-admin.org/`.
|
||||
|
||||
### Menu translations
|
||||
|
||||
append menu titles in menu_titles index at your language files.
|
||||
For example 'Work Units' title:
|
||||
|
||||
in resources/lang/es/admin.php
|
||||
```php
|
||||
...
|
||||
// lowercase and replace spaces with _
|
||||
'menu_titles' => [
|
||||
'work_units' => 'Unidades de trabajo'
|
||||
],
|
||||
```
|
||||
|
||||
## Build grid and form
|
||||
|
||||
The rest needs to be done is open `app/Admin/Contollers/UserController.php`, find `form()` and `grid()` method and write few lines of code with `model-grid` and `model-form`,for more detail, please read [model-grid](/en/model-grid.md) and [model-form](/en/model-form.md).
|
||||
10
vendor/encore/laravel-admin/docs/en/upgrade.md
vendored
Normal file
10
vendor/encore/laravel-admin/docs/en/upgrade.md
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
# Upgrade precautions
|
||||
|
||||
Because `laravel-admin 1.5` built-in table structure has been modified, it is recommended that you re-install `laravel 5.5` and `laravel-admin 1.5`, and then migrate the code over
|
||||
|
||||
Code migration needs attention:
|
||||
|
||||
- Please refer to the table structure changes [tables.php](https://github.com/z-song/laravel-admin/blob/master/database/migrations/2016_01_04_173148_create_admin_tables.php)
|
||||
- Routing file structure is modified please refer to [routes.stub](https://github.com/z-song/laravel-admin/blob/master/src/Console/stubs/routes.stub)
|
||||
- Please refer to the configuration file structure changes [admin.php](https://github.com/z-song/laravel-admin/blob/master/config/admin.php)
|
||||
- The chart component has been removed and can no longer be used, please refer to [Custom chart](/en/custom-chart.md)
|
||||
156
vendor/encore/laravel-admin/docs/en/widgets.md
vendored
Normal file
156
vendor/encore/laravel-admin/docs/en/widgets.md
vendored
Normal file
@@ -0,0 +1,156 @@
|
||||
# Web widgets
|
||||
|
||||
## Box
|
||||
|
||||
`Encore\Admin\Widgets\Box` used to generate box components:
|
||||
|
||||
```php
|
||||
use Encore\Admin\Widgets\Box;
|
||||
|
||||
$box = new Box('Box Title', 'Box content');
|
||||
|
||||
$box->removable();
|
||||
|
||||
$box->collapsable();
|
||||
|
||||
$box->style('info');
|
||||
|
||||
$box->solid();
|
||||
|
||||
echo $box;
|
||||
|
||||
```
|
||||
|
||||
The `$content` parameter is the content element of the Box, which can be either an implementation of the `Illuminate\Contracts\Support\Renderable` interface, or other printable variables.
|
||||
|
||||
`Box::title($title)` method is used to set the Box component title.
|
||||
|
||||
`Box::content($content)` method is used to set the content element of a Box component.
|
||||
|
||||
`Box::removable()` method sets the Box component as removable.
|
||||
|
||||
`Box::collapsable()` method sets the Box component as collapsable.
|
||||
|
||||
`Box::style($style)` method sets the style of the Box component to fill in `primary`, `info`, `danger`, `warning`, `success`, `default`.
|
||||
|
||||
`Box::solid()` method adds a border to the Box component.
|
||||
|
||||
## Collapse
|
||||
|
||||
`Encore\Admin\Widgets\Collapse` class used to generate folding components:
|
||||
```php
|
||||
use Encore\Admin\Widgets\Collapse;
|
||||
|
||||
$collapse = new Collapse();
|
||||
|
||||
$collapse->add('Bar', 'xxxxx');
|
||||
$collapse->add('Orders', new Table());
|
||||
|
||||
echo $collapse->render();
|
||||
|
||||
```
|
||||
|
||||
`Collapse::add($title, $content)` method is used to add a collapsed item to the collapsing component. The `$title` parameter sets the title of the item. The`$content` parameter is used to .
|
||||
|
||||
|
||||
## Form
|
||||
|
||||
`Encore\Admin\Widgets\Form` class is used to quickly build a form:
|
||||
|
||||
```php
|
||||
|
||||
$form = new Form();
|
||||
|
||||
$form->action('example');
|
||||
|
||||
$form->email('email')->default('qwe@aweq.com');
|
||||
$form->password('password');
|
||||
$form->text('name');
|
||||
$form->url('url');
|
||||
$form->color('color');
|
||||
$form->map('lat', 'lng');
|
||||
$form->date('date');
|
||||
$form->json('val');
|
||||
$form->dateRange('created_at', 'updated_at');
|
||||
|
||||
echo $form->render();
|
||||
```
|
||||
|
||||
`Form::__construct($data = [])` generates a form object. If the `$data` parameter is passed, the elements in the `$data` array will be filled into the form.
|
||||
|
||||
`Form::action($uri)` method is used to set the form submission address.
|
||||
|
||||
`Form::method($method)` method is used to set the submit method of the form, the default is `POST` method.
|
||||
|
||||
`Form::disablePjax()` disable pjax for form submit.
|
||||
|
||||
## Infobox
|
||||
|
||||
`Encore\Admin\Widgets\InfoBox` class is used to generate the information presentation block:
|
||||
|
||||
```php
|
||||
use Encore\Admin\Widgets\InfoBox;
|
||||
|
||||
$infoBox = new InfoBox('New Users', 'users', 'aqua', '/admin/users', '1024');
|
||||
|
||||
echo $infoBox->render();
|
||||
|
||||
```
|
||||
|
||||
Refer to the section on the `InfoBox` in the `index()` method of the home page layout file [HomeController.php](https://github.com/z-song/laravel-admin/blob/master/src/Console/stubs/HomeController.stub).
|
||||
|
||||
## Tab component
|
||||
|
||||
`Encore\Admin\Widgets\Tab` class is used to generate the tab components:
|
||||
|
||||
```php
|
||||
use Encore\Admin\Widgets\Tab;
|
||||
|
||||
$tab = new Tab();
|
||||
|
||||
$tab->add('Pie', $pie);
|
||||
$tab->add('Table', new Table());
|
||||
$tab->add('Text', 'blablablabla....');
|
||||
|
||||
echo $tab->render();
|
||||
|
||||
```
|
||||
|
||||
`Tab::add($title, $content)` method is used to add new tab, `$title` is tab title, `$content` is tab content.
|
||||
|
||||
## Table
|
||||
|
||||
`Encore\Admin\Widgets\Table` class is used to generate tables:
|
||||
|
||||
```php
|
||||
use Encore\Admin\Widgets\Table;
|
||||
|
||||
// table 1
|
||||
$headers = ['Id', 'Email', 'Name', 'Company'];
|
||||
$rows = [
|
||||
[1, 'labore21@yahoo.com', 'Ms. Clotilde Gibson', 'Goodwin-Watsica'],
|
||||
[2, 'omnis.in@hotmail.com', 'Allie Kuhic', 'Murphy, Koepp and Morar'],
|
||||
[3, 'quia65@hotmail.com', 'Prof. Drew Heller', 'Kihn LLC'],
|
||||
[4, 'xet@yahoo.com', 'William Koss', 'Becker-Raynor'],
|
||||
[5, 'ipsa.aut@gmail.com', 'Ms. Antonietta Kozey Jr.'],
|
||||
];
|
||||
|
||||
$table = new Table($headers, $rows);
|
||||
|
||||
echo $table->render();
|
||||
|
||||
// table 2
|
||||
$headers = ['Keys', 'Values'];
|
||||
$rows = [
|
||||
'name' => 'Joe',
|
||||
'age' => 25,
|
||||
'gender' => 'Male',
|
||||
'birth' => '1989-12-05',
|
||||
];
|
||||
|
||||
$table = new Table($headers, $rows);
|
||||
|
||||
echo $table->render();
|
||||
|
||||
```
|
||||
|
||||
8
vendor/encore/laravel-admin/docs/issue_template.md
vendored
Normal file
8
vendor/encore/laravel-admin/docs/issue_template.md
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
- Laravel Version: #.#.#
|
||||
- PHP Version:
|
||||
- Laravel-admin: #.#.#
|
||||
|
||||
### Description:
|
||||
|
||||
|
||||
### Steps To Reproduce:
|
||||
20
vendor/encore/laravel-admin/docs/zh/LICENSE.md
vendored
Normal file
20
vendor/encore/laravel-admin/docs/zh/LICENSE.md
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015 Jens Segers
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
67
vendor/encore/laravel-admin/docs/zh/README.md
vendored
Normal file
67
vendor/encore/laravel-admin/docs/zh/README.md
vendored
Normal file
@@ -0,0 +1,67 @@
|
||||
# laravel-admin
|
||||
|
||||
[](https://travis-ci.org/z-song/laravel-admin)
|
||||
[](https://styleci.io/repos/48796179)
|
||||
[](https://scrutinizer-ci.com/g/z-song/laravel-admin/?branch=master)
|
||||
[](https://packagist.org/packages/encore/laravel-admin)
|
||||
[](https://packagist.org/packages/encore/laravel-admin)
|
||||
|
||||
`laravel-admin` 是一个可以快速帮你构建后台管理的工具,它提供的页面组件和表单元素等功能,能帮助你使用很少的代码就实现功能完善的后台管理功能。
|
||||
|
||||
> 当前版本(1.5)需要安装`PHP 7+`和`Laravel 5.5`, 如果你使用更早的版本,请参考文档: [1.4](http://laravel-admin.org/docs/v1.4/#/zh/)
|
||||
|
||||
## 特性
|
||||
|
||||
+ 内置用户和权限系统
|
||||
+ `model-grid`支持快速构建数据表格
|
||||
+ `model-form`支持快速构建数据表单
|
||||
+ `model-tree`支持快速构建树状数据
|
||||
+ 内置40+种form元素组件、以及支持扩展组件
|
||||
+ 支持`Laravel`的多种模型关系
|
||||
+ `mysql`、`mongodb`、`pgsql`等多数据库支持
|
||||
+ 支持引入第三方前端库
|
||||
+ 数据库和artisan命令行工具的web实现
|
||||
+ 支持自定义图表
|
||||
+ 多种常用web组件
|
||||
+ 支持本地和oss文件上传
|
||||
|
||||
## Demo
|
||||
|
||||
打开`http://laravel-admin.org/demo/`,用账号密码`admin/admin`登陆
|
||||
|
||||
# 依赖
|
||||
|
||||
`laravel-admin` 基于以下组件或者服务:
|
||||
|
||||
+ [Laravel](https://laravel.com/)
|
||||
+ [AdminLTE](https://almsaeedstudio.com/)
|
||||
+ [Datetimepicker](http://eonasdan.github.io/bootstrap-datetimepicker/)
|
||||
+ [font-awesome](http://fontawesome.io)
|
||||
+ [moment](http://momentjs.com/)
|
||||
+ [Google map](https://www.google.com/maps)
|
||||
+ [Tencent map](http://lbs.qq.com/)
|
||||
+ [bootstrap-fileinput](https://github.com/kartik-v/bootstrap-fileinput)
|
||||
+ [jquery-pjax](https://github.com/defunkt/jquery-pjax)
|
||||
+ [Nestable](http://dbushell.github.io/Nestable/)
|
||||
+ [toastr](http://codeseven.github.io/toastr/)
|
||||
+ [X-editable](http://github.com/vitalets/x-editable)
|
||||
+ [bootstrap-number-input](https://github.com/wpic/bootstrap-number-input)
|
||||
+ [fontawesome-iconpicker](https://github.com/itsjavi/fontawesome-iconpicker)
|
||||
|
||||
## 交流
|
||||
|
||||
QQ群:278455482(已满)、635881319(已满)、533701919
|
||||
|
||||
> 为了避免广告及不看文档用户,请先到github star此项目,然后附上github账号申请入群
|
||||
|
||||
> 另外我已经屏蔽群私聊,所以请不要找我私聊,也请尽量不要在群里面 @我 🙏
|
||||
|
||||
## 支持
|
||||
|
||||
如果觉得这个项目帮你节约了时间,不妨支持一下;)
|
||||
|
||||

|
||||
|
||||
## License
|
||||
|
||||
`laravel-admin` is licensed under [The MIT License (MIT)](zh/LICENSE).
|
||||
35
vendor/encore/laravel-admin/docs/zh/_sidebar.md
vendored
Normal file
35
vendor/encore/laravel-admin/docs/zh/_sidebar.md
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
|
||||
- 入门
|
||||
- [安装](/zh/installation.md)
|
||||
- [快速开始](/zh/quick-start.md)
|
||||
- [页面内容和布局](/zh/content-layout.md)
|
||||
- 模型表格
|
||||
- [基本使用](/zh/model-grid.md)
|
||||
- [行的使用和扩展](/zh/model-grid-actions.md)
|
||||
- [列的使用和扩展](/zh/model-grid-column.md)
|
||||
- [自定义工具](/zh/model-grid-custom-tools.md)
|
||||
- [修改表格数据源](/zh/model-grid-data.md)
|
||||
- [查询过滤](/zh/model-grid-filters.md)
|
||||
- [数据导出](/zh/model-grid-export.md)
|
||||
- 模型表单
|
||||
- [基本使用](/zh/model-form.md)
|
||||
- [图片/文件上传](/zh/model-form-upload.md)
|
||||
- [Form组件使用](/zh/model-form-fields.md)
|
||||
- [Form组件管理](/zh/model-form-field-management.md)
|
||||
- [表单验证](/zh/model-form-validation.md)
|
||||
- [保存回调](/zh/model-form-callback.md)
|
||||
- [数据模型树](/zh/model-tree.md)
|
||||
- Admin扩展
|
||||
- [帮助工具](/zh/extension-helpers.md)
|
||||
- [文件管理](/zh/extension-media-manager.md)
|
||||
- [API tester](/zh/extension-api-tester.md)
|
||||
- [配置管理](/zh/extension-config.md)
|
||||
- [计划任务](/zh/extension-scheduling.md)
|
||||
- [前端组件](/zh/widgets.md)
|
||||
- [权限控制](/zh/permission.md)
|
||||
- [自定义登陆认证](/zh/custom-authentication.md)
|
||||
- [自定义头部导航](/zh/custom-navbar.md)
|
||||
- [自定义图表](/zh/custom-chart.md)
|
||||
- [常见问题](/zh/qa.md)
|
||||
- [升级注意事项](/zh/upgrade.md)
|
||||
- [Change log](/zh/change-log.md)
|
||||
13
vendor/encore/laravel-admin/docs/zh/change-log.md
vendored
Normal file
13
vendor/encore/laravel-admin/docs/zh/change-log.md
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
# Change log
|
||||
|
||||
## v1.2.9、v1.3.3、v1.4.1
|
||||
|
||||
- 添加用户设置和修改头像功能
|
||||
- model-form自定义工具[参考](zh/model-form.md?id=自定义工具)
|
||||
- 内嵌表单支持[参考](zh/model-form-fields.md?id=embeds)
|
||||
- 支持自定义导航条(右上角)[参考](https://github.com/z-song/laravel-admin/issues/392)
|
||||
- 添加脚手架、数据库命令行工具、web artisan帮助工具[参考](zh/helpers.md)
|
||||
- 支持自定义登陆页面和登陆逻辑[参考](zh/qa.md?id=自定义登陆页面和登陆逻辑)
|
||||
- 表单支持设置宽度、设置action[参考](zh/model-form.md?id=其它方法)
|
||||
- 优化表格过滤器
|
||||
- 修复bug,优化代码和逻辑
|
||||
141
vendor/encore/laravel-admin/docs/zh/content-layout.md
vendored
Normal file
141
vendor/encore/laravel-admin/docs/zh/content-layout.md
vendored
Normal file
@@ -0,0 +1,141 @@
|
||||
# 页面内容
|
||||
|
||||
`laravel-admin`的布局可参考后台首页的布局文件[HomeController.php](https://github.com/z-song/laravel-admin/blob/master/src/Console/stubs/HomeController.stub)的`index()`方法。
|
||||
|
||||
`Encore\Admin\Layout\Content`类用来实现内容区的布局。`Content::body($content)`方法用来添加页面内容:
|
||||
|
||||
一个简单的后台页面代码如下:
|
||||
|
||||
```php
|
||||
public function index()
|
||||
{
|
||||
return Admin::content(function (Content $content) {
|
||||
|
||||
// 选填
|
||||
$content->header('填写页面头标题');
|
||||
|
||||
// 选填
|
||||
$content->description('填写页面描述小标题');
|
||||
|
||||
// 添加面包屑导航 since v1.5.7
|
||||
$content->breadcrumb(
|
||||
['text' => '首页', 'url' => '/admin'],
|
||||
['text' => '用户管理', 'url' => '/admin/users'],
|
||||
['text' => '编辑用户']
|
||||
);
|
||||
|
||||
// 填充页面body部分,这里可以填入任何可被渲染的对象
|
||||
$content->body('hello world');
|
||||
});
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
其中`$content->body();`方法可以接受任何可字符串化的对象作为参数,可以是字符串、数字、包含了`__toString`方法的对象,实现了`Renderable`、`Htmlable`接口的对象,包括laravel的视图。
|
||||
|
||||
|
||||
## 布局
|
||||
|
||||
`laravel-admin`的布局使用bootstrap的栅格系统,每行的长度是12,下面是几个简单的示例:
|
||||
|
||||
添加一行内容:
|
||||
|
||||
```php
|
||||
$content->row('hello')
|
||||
|
||||
---------------------------------
|
||||
|hello |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
---------------------------------
|
||||
|
||||
```
|
||||
|
||||
行内添加多列:
|
||||
|
||||
```php
|
||||
$content->row(function(Row $row) {
|
||||
$row->column(4, 'foo');
|
||||
$row->column(4, 'bar');
|
||||
$row->column(4, 'baz');
|
||||
});
|
||||
----------------------------------
|
||||
|foo |bar |baz |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
----------------------------------
|
||||
|
||||
|
||||
$content->row(function(Row $row) {
|
||||
$row->column(4, 'foo');
|
||||
$row->column(8, 'bar');
|
||||
});
|
||||
----------------------------------
|
||||
|foo |bar |
|
||||
| | |
|
||||
| | |
|
||||
| | |
|
||||
| | |
|
||||
| | |
|
||||
----------------------------------
|
||||
|
||||
```
|
||||
|
||||
列中添加行:
|
||||
|
||||
```php
|
||||
$content->row(function (Row $row) {
|
||||
|
||||
$row->column(4, 'xxx');
|
||||
|
||||
$row->column(8, function (Column $column) {
|
||||
$column->row('111');
|
||||
$column->row('222');
|
||||
$column->row('333');
|
||||
});
|
||||
});
|
||||
----------------------------------
|
||||
|xxx |111 |
|
||||
| |---------------------|
|
||||
| |222 |
|
||||
| |---------------------|
|
||||
| |333 |
|
||||
| | |
|
||||
----------------------------------
|
||||
|
||||
|
||||
```
|
||||
|
||||
|
||||
列中添加行, 行内再添加列:
|
||||
|
||||
```php
|
||||
$content->row(function (Row $row) {
|
||||
|
||||
$row->column(4, 'xxx');
|
||||
|
||||
$row->column(8, function (Column $column) {
|
||||
$column->row('111');
|
||||
$column->row('222');
|
||||
$column->row(function(Row $row) {
|
||||
$row->column(6, '444');
|
||||
$row->column(6, '555');
|
||||
});
|
||||
});
|
||||
});
|
||||
----------------------------------
|
||||
|xxx |111 |
|
||||
| |---------------------|
|
||||
| |222 |
|
||||
| |---------------------|
|
||||
| |444 |555 |
|
||||
| | | |
|
||||
----------------------------------
|
||||
```
|
||||
|
||||
111
vendor/encore/laravel-admin/docs/zh/custom-authentication.md
vendored
Normal file
111
vendor/encore/laravel-admin/docs/zh/custom-authentication.md
vendored
Normal file
@@ -0,0 +1,111 @@
|
||||
# 自定义登陆
|
||||
|
||||
如果不使用`laravel-admin`内置的认证登陆逻辑,可以参考下面的方式自定义登陆认证逻辑
|
||||
|
||||
首先要先定义一个`user provider`,用来获取用户身份, 比如`app/Providers/CustomUserProvider.php`:
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Contracts\Auth\Authenticatable;
|
||||
use Illuminate\Contracts\Auth\UserProvider;
|
||||
|
||||
class CustomUserProvider implements UserProvider
|
||||
{
|
||||
public function retrieveById($identifier)
|
||||
{}
|
||||
|
||||
public function retrieveByToken($identifier, $token)
|
||||
{}
|
||||
|
||||
public function updateRememberToken(Authenticatable $user, $token)
|
||||
{}
|
||||
|
||||
public function retrieveByCredentials(array $credentials)
|
||||
{
|
||||
// 用$credentials里面的用户名密码去获取用户信息,然后返回Illuminate\Contracts\Auth\Authenticatable对象
|
||||
}
|
||||
|
||||
public function validateCredentials(Authenticatable $user, array $credentials)
|
||||
{
|
||||
// 用$credentials里面的用户名密码校验用户,返回true或false
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
在方法`retrieveByCredentials`和`validateCredentials`中, 传入的`$credentials`就是登陆页面提交的用户名和密码数组,然后你可以使用`$credentials`去实现自己的登陆逻辑
|
||||
|
||||
Interface `Illuminate\Contracts\Auth\Authenticatable`的定义如下:
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace Illuminate\Contracts\Auth;
|
||||
|
||||
interface Authenticatable {
|
||||
|
||||
public function getAuthIdentifierName();
|
||||
public function getAuthIdentifier();
|
||||
public function getAuthPassword();
|
||||
public function getRememberToken();
|
||||
public function setRememberToken($value);
|
||||
public function getRememberTokenName();
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
上面interface每个方法的解释参考[adding-custom-user-providers](https://laravel.com/docs/5.5/authentication#adding-custom-user-providers)
|
||||
|
||||
定义好了`User provider`之后,打开`app/Providers/AuthServiceProvider.php`注册它:
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
|
||||
|
||||
class AuthServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Register any application authentication / authorization services.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
$this->registerPolicies();
|
||||
|
||||
Auth::provider('custom', function ($app, array $config) {
|
||||
|
||||
// Return an instance of Illuminate\Contracts\Auth\UserProvider...
|
||||
return new CustomUserProvider();
|
||||
});
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
最后修改一下配置,打开`config/admin.php`,找到`auth`部分修改:
|
||||
|
||||
```php
|
||||
'auth' => [
|
||||
'guards' => [
|
||||
'admin' => [
|
||||
'driver' => 'session',
|
||||
'provider' => 'admin',
|
||||
]
|
||||
],
|
||||
|
||||
// 修改下面
|
||||
'providers' => [
|
||||
'admin' => [
|
||||
'driver' => 'custom',
|
||||
]
|
||||
],
|
||||
],
|
||||
```
|
||||
这样就完成了自定义登陆认证的逻辑,自定义登陆算是laravel中比较复杂的部分,需要开发者有耐心的一步步调试完成。
|
||||
|
||||
79
vendor/encore/laravel-admin/docs/zh/custom-chart.md
vendored
Normal file
79
vendor/encore/laravel-admin/docs/zh/custom-chart.md
vendored
Normal file
@@ -0,0 +1,79 @@
|
||||
# 自定义图表
|
||||
|
||||
`laravel-admin 1.5`已经移除了所有的图表组件,如果要在页面中加入图表组件,可以参考下面的流程
|
||||
|
||||
用`chartjs`举例,首先要下载[chartjs](http://chartjs.org/),放到public目录下面,比如放在`public/vendor/chartjs`目录
|
||||
|
||||
然后在`app/Admin/bootstrap.php`引入组件:
|
||||
```php
|
||||
use Encore\Admin\Facades\Admin;
|
||||
|
||||
Admin::js('/vendor/chartjs/dist/Chart.min.js');
|
||||
|
||||
```
|
||||
|
||||
新建视图文件 `resources/views/admin/charts/bar.blade.php`
|
||||
|
||||
```php
|
||||
<canvas id="myChart" width="400" height="400"></canvas>
|
||||
<script>
|
||||
|
||||
$(function () {
|
||||
var ctx = document.getElementById("myChart").getContext('2d');
|
||||
var myChart = new Chart(ctx, {
|
||||
type: 'bar',
|
||||
data: {
|
||||
labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
|
||||
datasets: [{
|
||||
label: '# of Votes',
|
||||
data: [12, 19, 3, 5, 2, 3],
|
||||
backgroundColor: [
|
||||
'rgba(255, 99, 132, 0.2)',
|
||||
'rgba(54, 162, 235, 0.2)',
|
||||
'rgba(255, 206, 86, 0.2)',
|
||||
'rgba(75, 192, 192, 0.2)',
|
||||
'rgba(153, 102, 255, 0.2)',
|
||||
'rgba(255, 159, 64, 0.2)'
|
||||
],
|
||||
borderColor: [
|
||||
'rgba(255,99,132,1)',
|
||||
'rgba(54, 162, 235, 1)',
|
||||
'rgba(255, 206, 86, 1)',
|
||||
'rgba(75, 192, 192, 1)',
|
||||
'rgba(153, 102, 255, 1)',
|
||||
'rgba(255, 159, 64, 1)'
|
||||
],
|
||||
borderWidth: 1
|
||||
}]
|
||||
},
|
||||
options: {
|
||||
scales: {
|
||||
yAxes: [{
|
||||
ticks: {
|
||||
beginAtZero:true
|
||||
}
|
||||
}]
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
```
|
||||
|
||||
然后就可以在页面的任何地方引入这个图表视图了:
|
||||
|
||||
```php
|
||||
public function index()
|
||||
{
|
||||
return Admin::content(function (Content $content) {
|
||||
|
||||
$content->header('chart');
|
||||
$content->description('.....');
|
||||
|
||||
$content->body(view('admin.charts.bar'));
|
||||
});
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
按照上面的方式可以引入任意图表库,多图表页面的布局,参考[视图布局](/zh/layout.md)
|
||||
148
vendor/encore/laravel-admin/docs/zh/custom-navbar.md
vendored
Normal file
148
vendor/encore/laravel-admin/docs/zh/custom-navbar.md
vendored
Normal file
@@ -0,0 +1,148 @@
|
||||
# 自定义头部导航条
|
||||
|
||||
从版本`1.5.6`开始,可以在顶部导航条上添加html元素了, 打开`app/Admin/bootstrap.php`:
|
||||
```php
|
||||
use Encore\Admin\Facades\Admin;
|
||||
|
||||
Admin::navbar(function (\Encore\Admin\Widgets\Navbar $navbar) {
|
||||
|
||||
$navbar->left('html...');
|
||||
|
||||
$navbar->right('html...');
|
||||
|
||||
});
|
||||
```
|
||||
|
||||
`left`和`right`方法分别用来在头部的左右两边添加内容,方法参数可以是任何可以渲染的对象(实现了`Htmlable`、`Renderable`接口或者包含`__toString()`方法的对象)或字符串
|
||||
|
||||
## 左侧添加示例
|
||||
|
||||
举个例子,比如在左边添加一个搜索条,先创建一个blade视图`resources/views/search-bar.blade.php`:
|
||||
```php
|
||||
<style>
|
||||
|
||||
.search-form {
|
||||
width: 250px;
|
||||
margin: 10px 0 0 20px;
|
||||
border-radius: 3px;
|
||||
float: left;
|
||||
}
|
||||
.search-form input[type="text"] {
|
||||
color: #666;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.search-form .btn {
|
||||
color: #999;
|
||||
background-color: #fff;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<form action="/admin/posts" method="get" class="search-form" pjax-container>
|
||||
<div class="input-group input-group-sm ">
|
||||
<input type="text" name="title" class="form-control" placeholder="Search...">
|
||||
<span class="input-group-btn">
|
||||
<button type="submit" name="search" id="search-btn" class="btn btn-flat"><i class="fa fa-search"></i></button>
|
||||
</span>
|
||||
</div>
|
||||
</form>
|
||||
```
|
||||
然后加入头部导航条:
|
||||
```php
|
||||
$navbar->left(view('search-bar'));
|
||||
```
|
||||
|
||||
## 右侧添加示例
|
||||
|
||||
导航右侧只能添加`<li>`标签, 比如要添加一些提示图标,新建渲染对象`app/Admin/Extensions/Nav/Links.php`
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Admin\Extensions\Nav;
|
||||
|
||||
class Links
|
||||
{
|
||||
public function __toString()
|
||||
{
|
||||
return <<<HTML
|
||||
|
||||
<li>
|
||||
<a href="#">
|
||||
<i class="fa fa-envelope-o"></i>
|
||||
<span class="label label-success">4</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="#">
|
||||
<i class="fa fa-bell-o"></i>
|
||||
<span class="label label-warning">7</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="#">
|
||||
<i class="fa fa-flag-o"></i>
|
||||
<span class="label label-danger">9</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
HTML;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
然后加入头部导航条:
|
||||
```php
|
||||
$navbar->right(new \App\Admin\Extensions\Nav\Links());
|
||||
```
|
||||
|
||||
或者用下面的html加入下拉菜单:
|
||||
```html
|
||||
<li class="dropdown notifications-menu">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
|
||||
<i class="fa fa-bell-o"></i>
|
||||
<span class="label label-warning">10</span>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li class="header">You have 10 notifications</li>
|
||||
<li>
|
||||
<!-- inner menu: contains the actual data -->
|
||||
<ul class="menu">
|
||||
<li>
|
||||
<a href="#">
|
||||
<i class="fa fa-users text-aqua"></i> 5 new members joined today
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<i class="fa fa-warning text-yellow"></i> Very long description here that may not fit into the
|
||||
page and may cause design problems
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<i class="fa fa-users text-red"></i> 5 new members joined
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="#">
|
||||
<i class="fa fa-shopping-cart text-green"></i> 25 sales made
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<i class="fa fa-user text-red"></i> You changed your username
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="footer"><a href="#">View all</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
```
|
||||
|
||||
更多的组件可以参考[Bootstrap](https://getbootstrap.com/)
|
||||
60
vendor/encore/laravel-admin/docs/zh/extension-api-tester.md
vendored
Normal file
60
vendor/encore/laravel-admin/docs/zh/extension-api-tester.md
vendored
Normal file
@@ -0,0 +1,60 @@
|
||||
# Laravel API测试
|
||||
|
||||
`api-tester`是专门针对`laravel`开发的API测试工具,能够帮助你像`postman`一样测试你的laravel API。
|
||||
|
||||

|
||||
|
||||
## 安装
|
||||
|
||||
```shell
|
||||
$ composer require laravel-admin-ext/api-tester -vvv
|
||||
|
||||
$ php artisan vendor:publish --tag=api-tester
|
||||
|
||||
```
|
||||
然后运行下面的命令导入菜单和权限(也可以手动添加)
|
||||
|
||||
```shell
|
||||
$ php artisan admin:import api-tester
|
||||
```
|
||||
|
||||
然后就能在后台的左侧菜单找到入口链接,`http://localhost/admin/api-tester`。
|
||||
|
||||
## 使用
|
||||
|
||||
打开`routes/api.php`试着添加一个api:
|
||||
|
||||
```php
|
||||
Route::get('test', function () {
|
||||
return 'hello world';
|
||||
});
|
||||
```
|
||||
|
||||
打开`api-tester`页面,就能在左侧看到`api/test`, 选择它然后点击右侧的`Send`,就能请求这个API,下面会输出请求结果,
|
||||
|
||||
### Login as
|
||||
|
||||
`Login as`填写你要登陆的用户的id, 就可以以这个用户的身份登陆来请求API,加入下面的API:
|
||||
|
||||
```php
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
Route::middleware('auth:api')->get('user', function (Request $request) {
|
||||
return $request->user();
|
||||
});
|
||||
```
|
||||
`Login as`填写用户ID,请求接口后就能返回这个用户的模型
|
||||
|
||||
### Parameters
|
||||
|
||||
用来填写接口的请求参数,类型可以是字符串或者文件, 添加下面的API:
|
||||
|
||||
```php
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
Route::get('parameters', function (Request $request) {
|
||||
return $request->all();
|
||||
});
|
||||
```
|
||||
|
||||
然后填写参数可以看到效果
|
||||
47
vendor/encore/laravel-admin/docs/zh/extension-config.md
vendored
Normal file
47
vendor/encore/laravel-admin/docs/zh/extension-config.md
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
# 配置管理
|
||||
|
||||
这个工具将配置数据存在数据库中,然后在能在Laravel中能像普通配置一样使用
|
||||
|
||||

|
||||
|
||||
## 安装
|
||||
|
||||
```
|
||||
$ composer require laravel-admin-ext/config
|
||||
|
||||
$ php artisan migrate
|
||||
```
|
||||
|
||||
打开`app/Providers/AppServiceProvider.php`, 在`boot`方法中添加`Config::load();`:
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Encore\Admin\Config\Config;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
|
||||
class AppServiceProvider extends ServiceProvider
|
||||
{
|
||||
public function boot()
|
||||
{
|
||||
Config::load(); // 加上这一行
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
最后运行命令导入菜单和权限(也可以手动添加)
|
||||
|
||||
```
|
||||
$ php artisan admin:import config
|
||||
```
|
||||
|
||||
然后打开`http://localhost/admin/config`访问.
|
||||
|
||||
## 使用
|
||||
|
||||
打开`http://localhost/admin/config`,添加一项配置,填写`Name`、`Value`、和`Description`, `Name`是配置的`key`,`Description`是选填的配置注释
|
||||
|
||||
最后在程序中使用`config($key)`来获取配置,注意,配置的`Name`不要和`config`目录中的已存在的配置冲突,不然会覆盖掉系统的配置
|
||||
|
||||
43
vendor/encore/laravel-admin/docs/zh/extension-helpers.md
vendored
Normal file
43
vendor/encore/laravel-admin/docs/zh/extension-helpers.md
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
# 帮助工具
|
||||
|
||||
在最新的版本中新增了面向开发人员的帮助工具,能在开发中提供帮助提高效率,目前提供`脚手架`,`数据库命令行`和`artisan命令行`三个工具,如果有更好的其它实用工具的想法,欢迎提供建议。
|
||||
|
||||
安装:
|
||||
```php
|
||||
composer require laravel-admin-ext/helpers
|
||||
|
||||
php artisan admin:import helpers
|
||||
```
|
||||
|
||||
> 工具的部分功能会在项目中创建或删除文件,可能会出现文件或目录权限的问题,这个问题需要自行解决。
|
||||
> 另外部分数据库和artisan命令无法在web环境下使用。
|
||||
|
||||
## 脚手架工具
|
||||
|
||||
脚手架工具能帮你一键生成控制器、模型、迁移文件,并运行迁移文件,访问`http://localhost/admin/helpers/scaffold`打开。
|
||||
|
||||
其中设置迁移表结构的时候,主键字段是自动生成的不需要填写。
|
||||
|
||||

|
||||
|
||||
## 数据库命令行
|
||||
|
||||
数据库命令行工具的web集成,目前支持`mysql`、`mongodb` 和 `redis`,访问`http://localhost/admin/helpers/terminal/database`打开。
|
||||
|
||||
在右上角的`select`选择框切换数据库连接,然后在底部的输入框输入对应数据库的查询语句然后回车,就能得到查询结果:
|
||||
|
||||

|
||||
|
||||
实用方式和终端上操作数据库是一致的,可以运行所选择数据库的所支持的查询语句。
|
||||
|
||||
## artisan命令行工具
|
||||
|
||||
`Laravel`的`artisan`命令的web实现,可以在上面运行artisan命令,访问`http://localhost/admin/helpers/terminal/artisan`打开。
|
||||
|
||||

|
||||
|
||||
## 路由列表
|
||||
|
||||
这个工具能用用比较直观的展现出系统的所有路由,包括路由的uri、方法和中间件等,还能查询路由。访问`http://localhost/admin/helpers/routes`打开。
|
||||
|
||||

|
||||
50
vendor/encore/laravel-admin/docs/zh/extension-media-manager.md
vendored
Normal file
50
vendor/encore/laravel-admin/docs/zh/extension-media-manager.md
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
# 文件管理
|
||||
|
||||
文件管理是一个对本地文件的可视化管理的工具
|
||||
|
||||

|
||||
|
||||
## 安装
|
||||
|
||||
```
|
||||
$ composer require laravel-admin-ext/media-manager -vvv
|
||||
|
||||
$ php artisan admin:import media-manager
|
||||
```
|
||||
|
||||
## 配置
|
||||
|
||||
打开`config/admin.php`指定你要管理的disk
|
||||
|
||||
```php
|
||||
|
||||
'extensions' => [
|
||||
|
||||
'media-manager' => [
|
||||
'disk' => 'public' // 指向config/filesystem.php中设置的disk
|
||||
],
|
||||
],
|
||||
|
||||
```
|
||||
|
||||
`disk`为`config/filesystem.php`中设置的本地disk,然后打开`http://localhost/admin/media`访问.
|
||||
|
||||
注意如果要预览disk中的图片,必须在disk中设置访问url前缀:
|
||||
|
||||
|
||||
`config/filesystem.php`:
|
||||
```php
|
||||
|
||||
'disks' => [
|
||||
|
||||
'public' => [
|
||||
'driver' => 'local',
|
||||
'root' => storage_path('app/public'),
|
||||
'url' => env('APP_URL').'/storage', // 设置文件访问url
|
||||
'visibility' => 'public',
|
||||
],
|
||||
|
||||
...
|
||||
]
|
||||
```
|
||||
|
||||
34
vendor/encore/laravel-admin/docs/zh/extension-scheduling.md
vendored
Normal file
34
vendor/encore/laravel-admin/docs/zh/extension-scheduling.md
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
# 定时任务
|
||||
|
||||
这个工具是管理Laravel计划任务的web管理页面
|
||||
|
||||

|
||||
|
||||
## 安装
|
||||
|
||||
```
|
||||
$ composer require laravel-admin-ext/scheduling -vvv
|
||||
|
||||
$ php artisan admin:import scheduling
|
||||
```
|
||||
|
||||
打开`http://localhost/admin/scheduling`访问。
|
||||
|
||||
## 添加任务
|
||||
|
||||
打开`app/Console/Kernel.php`, 试着添加两项计划任务:
|
||||
|
||||
```php
|
||||
class Kernel extends ConsoleKernel
|
||||
{
|
||||
protected function schedule(Schedule $schedule)
|
||||
{
|
||||
$schedule->command('inspire')->everyTenMinutes();
|
||||
|
||||
$schedule->command('route:list')->dailyAt('02:00');
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
然后就能在后台看到这两项计划任务的详细情况,也能直接运行这两个计划任务。
|
||||
54
vendor/encore/laravel-admin/docs/zh/installation.md
vendored
Normal file
54
vendor/encore/laravel-admin/docs/zh/installation.md
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
# 安装
|
||||
|
||||
> 当前版本(1.5)需要安装`PHP 7+`和`Laravel 5.5`, 如果你使用更早的版本,请参考文档: [1.4](http://laravel-admin.org/docs/v1.4/#/zh/)
|
||||
|
||||
首先确保安装好了`laravel`,并且数据库连接设置正确。
|
||||
|
||||
```
|
||||
composer require encore/laravel-admin "1.5.*"
|
||||
```
|
||||
|
||||
然后运行下面的命令来发布资源:
|
||||
|
||||
```
|
||||
php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"
|
||||
```
|
||||
|
||||
在该命令会生成配置文件`config/admin.php`,可以在里面修改安装的地址、数据库连接、以及表名,建议都是用默认配置不修改。
|
||||
|
||||
然后运行下面的命令完成安装:
|
||||
```
|
||||
php artisan admin:install
|
||||
```
|
||||
|
||||
启动服务后,在浏览器打开 `http://localhost/admin/` ,使用用户名 `admin` 和密码 `admin`登陆.
|
||||
|
||||
## 生成的文件
|
||||
|
||||
安装完成之后,会在项目目录中生成以下的文件:
|
||||
|
||||
### 配置文件
|
||||
|
||||
安装完成之后,`laravel-admin`所有的配置都在`config/admin.php`文件中。
|
||||
|
||||
### 后台项目文件
|
||||
安装完成之后,后台的安装目录为`app/Admin`,之后大部分的后台开发编码工作都是在这个目录下进行。
|
||||
|
||||
```
|
||||
app/Admin
|
||||
├── Controllers
|
||||
│ ├── ExampleController.php
|
||||
│ └── HomeController.php
|
||||
├── bootstrap.php
|
||||
└── routes.php
|
||||
```
|
||||
|
||||
`app/Admin/routes.php`文件用来配置后台路由。
|
||||
|
||||
`app/Admin/bootstrap.php` 是`laravel-admin`的启动文件, 使用方法请参考文件里面的注释.
|
||||
|
||||
`app/Admin/Controllers`目录用来存放后台控制器文件,该目录下的`HomeController.php`文件是后台首页的显示控制器,`ExampleController.php`为实例文件。
|
||||
|
||||
### 静态文件
|
||||
|
||||
后台所需的前端静态文件在`/public/vendor/laravel-admin`目录下.
|
||||
89
vendor/encore/laravel-admin/docs/zh/model-form-callback.md
vendored
Normal file
89
vendor/encore/laravel-admin/docs/zh/model-form-callback.md
vendored
Normal file
@@ -0,0 +1,89 @@
|
||||
# 模型表单回调
|
||||
|
||||
`model-form`目前提供了两个方法来接收回调函数:
|
||||
|
||||
```php
|
||||
//保存前回调
|
||||
$form->saving(function (Form $form) {
|
||||
//...
|
||||
});
|
||||
|
||||
//保存后回调
|
||||
$form->saved(function (Form $form) {
|
||||
//...
|
||||
});
|
||||
|
||||
```
|
||||
可以从回调参数`$form`中获取当前提交的表单数据:
|
||||
|
||||
```php
|
||||
$form->saving(function (Form $form) {
|
||||
|
||||
dump($form->username);
|
||||
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
获取获取模型中的数据
|
||||
```php
|
||||
$form->saved(function (Form $form) {
|
||||
|
||||
$form->model()->id;
|
||||
|
||||
});
|
||||
```
|
||||
|
||||
可以直接在回调中返回`Symfony\Component\HttpFoundation\Response`的实例,来跳转或进入页面:
|
||||
```php
|
||||
$form->saving(function (Form $form) {
|
||||
|
||||
// 返回一个简单response
|
||||
return response('xxxx');
|
||||
|
||||
});
|
||||
|
||||
$form->saving(function (Form $form) {
|
||||
|
||||
// 跳转页面
|
||||
return redirect('/admin/users');
|
||||
|
||||
});
|
||||
|
||||
$form->saving(function (Form $form) {
|
||||
|
||||
// 抛出异常
|
||||
throw new \Exception('出错啦。。。');
|
||||
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
返回错误或者成功信息在页面上:
|
||||
|
||||
```php
|
||||
use Illuminate\Support\MessageBag;
|
||||
|
||||
// 抛出错误信息
|
||||
$form->saving(function ($form) {
|
||||
|
||||
$error = new MessageBag([
|
||||
'title' => 'title...',
|
||||
'message' => 'message....',
|
||||
]);
|
||||
|
||||
return back()->with(compact('error'));
|
||||
});
|
||||
|
||||
// 抛出成功信息
|
||||
$form->saving(function ($form) {
|
||||
|
||||
$success = new MessageBag([
|
||||
'title' => 'title...',
|
||||
'message' => 'message....',
|
||||
]);
|
||||
|
||||
return back()->with(compact('success'));
|
||||
});
|
||||
|
||||
```
|
||||
280
vendor/encore/laravel-admin/docs/zh/model-form-field-management.md
vendored
Normal file
280
vendor/encore/laravel-admin/docs/zh/model-form-field-management.md
vendored
Normal file
@@ -0,0 +1,280 @@
|
||||
# 组件管理
|
||||
|
||||
## 移除已有组件
|
||||
|
||||
form表单内置的`map`和`editor`组件通过cdn的方式引用了前端文件,如果网络方面有问题,可以通过下面的方式将它们移除
|
||||
|
||||
找到文件`app/Admin/bootstrap.php`,如果文件不存在,请更新`laravel-admin`,然后新建该文件
|
||||
|
||||
```php
|
||||
|
||||
<?php
|
||||
|
||||
use Encore\Admin\Form;
|
||||
|
||||
Form::forget('map');
|
||||
Form::forget('editor');
|
||||
|
||||
// or
|
||||
|
||||
Form::forget(['map', 'editor']);
|
||||
|
||||
```
|
||||
|
||||
这样就去掉了这两个组件,可以通过该方式去掉其它组件。
|
||||
|
||||
|
||||
## 扩展自定义组件
|
||||
|
||||
|
||||
### 集成富文本编辑器wangEditor
|
||||
|
||||
[wangEditor](http://www.wangeditor.com/)是一个优秀的国产的轻量级富文本编辑器,如果`laravel-admin`自带的基于`ckeditor`的编辑器组件使用上有问题,可以通过下面的步骤可以集成它,并覆盖掉`ckeditor`:
|
||||
|
||||
先下载前端库文件[wangEditor](https://github.com/wangfupeng1988/wangEditor/releases),解压到目录`public/vendor/wangEditor-3.0.9`。
|
||||
|
||||
然后新建组件类`app/Admin/Extensions/WangEditor.php`。
|
||||
|
||||
```php
|
||||
|
||||
<?php
|
||||
|
||||
namespace App\Admin\Extensions;
|
||||
|
||||
use Encore\Admin\Form\Field;
|
||||
|
||||
class WangEditor extends Field
|
||||
{
|
||||
protected $view = 'admin.wang-editor';
|
||||
|
||||
protected static $css = [
|
||||
'/vendor/wangEditor-3.0.9/release/wangEditor.min.css',
|
||||
];
|
||||
|
||||
protected static $js = [
|
||||
'/vendor/wangEditor-3.0.9/release/wangEditor.min.js',
|
||||
];
|
||||
|
||||
public function render()
|
||||
{
|
||||
$name = $this->formatName($this->column);
|
||||
|
||||
$this->script = <<<EOT
|
||||
|
||||
var E = window.wangEditor
|
||||
var editor = new E('#{$this->id}');
|
||||
editor.customConfig.zIndex = 0
|
||||
editor.customConfig.uploadImgShowBase64 = true
|
||||
editor.customConfig.onchange = function (html) {
|
||||
$('input[name=$name]').val(html);
|
||||
}
|
||||
editor.create()
|
||||
|
||||
EOT;
|
||||
return parent::render();
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
新建视图文件`resources/views/admin/wang-editor.blade.php`:
|
||||
```php
|
||||
<div class="form-group {!! !$errors->has($label) ?: 'has-error' !!}">
|
||||
|
||||
<label for="{{$id}}" class="col-sm-2 control-label">{{$label}}</label>
|
||||
|
||||
<div class="{{$viewClass['field']}}">
|
||||
|
||||
@include('admin::form.error')
|
||||
|
||||
<div id="{{$id}}" style="width: 100%; height: 100%;">
|
||||
<p>{!! old($column, $value) !!}</p>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="{{$name}}" value="{{ old($column, $value) }}" />
|
||||
|
||||
</div>
|
||||
</div>
|
||||
```
|
||||
|
||||
然后注册进`laravel-admin`,在`app/Admin/bootstrap.php`中添加以下代码:
|
||||
|
||||
```php
|
||||
|
||||
<?php
|
||||
|
||||
use App\Admin\Extensions\WangEditor;
|
||||
use Encore\Admin\Form;
|
||||
|
||||
Form::extend('editor', WangEditor::class);
|
||||
|
||||
```
|
||||
|
||||
调用:
|
||||
|
||||
```
|
||||
|
||||
$form->editor('body');
|
||||
|
||||
```
|
||||
|
||||
### 集成富文本编辑器ckeditor
|
||||
|
||||
先下载[ckeditor](http://ckeditor.com/download) 并解压到/public目录,比如放在`/public/packages/`目录下。
|
||||
|
||||
然后新建扩展文件`app/Admin/Extensions/Form/CKEditor.php`:
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Admin\Extensions\Form;
|
||||
|
||||
use Encore\Admin\Form\Field;
|
||||
|
||||
class CKEditor extends Field
|
||||
{
|
||||
public static $js = [
|
||||
'/packages/ckeditor/ckeditor.js',
|
||||
'/packages/ckeditor/adapters/jquery.js',
|
||||
];
|
||||
|
||||
protected $view = 'admin.ckeditor';
|
||||
|
||||
public function render()
|
||||
{
|
||||
$this->script = "$('textarea.{$this->getElementClass()}').ckeditor();";
|
||||
|
||||
return parent::render();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
新建view `resources/views/admin/ckeditor.blade.php`:
|
||||
```php
|
||||
<div class="form-group {!! !$errors->has($errorKey) ?: 'has-error' !!}">
|
||||
|
||||
<label for="{{$id}}" class="col-sm-2 control-label">{{$label}}</label>
|
||||
|
||||
<div class="col-sm-6">
|
||||
|
||||
@include('admin::form.error')
|
||||
|
||||
<textarea class="form-control {{ $class }}" name="{{$name}}" placeholder="{{ $placeholder }}" {!! $attributes !!} >{{ old($column, $value) }}</textarea>
|
||||
|
||||
@include('admin::form.help-block')
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
```
|
||||
|
||||
然后在`app/Admin/bootstrap.php`中引入扩展:
|
||||
```php
|
||||
use App\Admin\Extensions\Form\CKEditor;
|
||||
use Encore\Admin\Form;
|
||||
|
||||
Form::extend('ckeditor', CKEditor::class);
|
||||
```
|
||||
|
||||
然后就能在form中使用了:
|
||||
```php
|
||||
$form->ckeditor('content');
|
||||
```
|
||||
|
||||
### 集成PHP editor
|
||||
|
||||
|
||||
通过下面的步骤来扩展一个基于[codemirror](http://codemirror.net/index.html)的PHP代码编辑器,效果参考[PHP mode](http://codemirror.net/mode/php/)。
|
||||
|
||||
先将[codemirror](http://codemirror.net/codemirror.zip)库下载并解压到前端资源目录下,比如放在`public/packages/codemirror-5.20.2`目录下。
|
||||
|
||||
新建组件类`app/Admin/Extensions/PHPEditor.php`:
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Admin\Extensions;
|
||||
|
||||
use Encore\Admin\Form\Field;
|
||||
|
||||
class PHPEditor extends Field
|
||||
{
|
||||
protected $view = 'admin.php-editor';
|
||||
|
||||
protected static $css = [
|
||||
'/packages/codemirror-5.20.2/lib/codemirror.css',
|
||||
];
|
||||
|
||||
protected static $js = [
|
||||
'/packages/codemirror-5.20.2/lib/codemirror.js',
|
||||
'/packages/codemirror-5.20.2/addon/edit/matchbrackets.js',
|
||||
'/packages/codemirror-5.20.2/mode/htmlmixed/htmlmixed.js',
|
||||
'/packages/codemirror-5.20.2/mode/xml/xml.js',
|
||||
'/packages/codemirror-5.20.2/mode/javascript/javascript.js',
|
||||
'/packages/codemirror-5.20.2/mode/css/css.js',
|
||||
'/packages/codemirror-5.20.2/mode/clike/clike.js',
|
||||
'/packages/codemirror-5.20.2/mode/php/php.js',
|
||||
];
|
||||
|
||||
public function render()
|
||||
{
|
||||
$this->script = <<<EOT
|
||||
|
||||
CodeMirror.fromTextArea(document.getElementById("{$this->id}"), {
|
||||
lineNumbers: true,
|
||||
mode: "text/x-php",
|
||||
extraKeys: {
|
||||
"Tab": function(cm){
|
||||
cm.replaceSelection(" " , "end");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
EOT;
|
||||
return parent::render();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
>类中的静态资源也同样可以从外部引入,参考[Editor.php](https://github.com/z-song/laravel-admin/blob/1.3/src/Form/Field/Editor.php)
|
||||
|
||||
创建视图`resources/views/admin/php-editor.blade.php`:
|
||||
|
||||
```php
|
||||
|
||||
<div class="form-group {!! !$errors->has($label) ?: 'has-error' !!}">
|
||||
|
||||
<label for="{{$id}}" class="col-sm-2 control-label">{{$label}}</label>
|
||||
|
||||
<div class="col-sm-6">
|
||||
|
||||
@include('admin::form.error')
|
||||
|
||||
<textarea class="form-control" id="{{$id}}" name="{{$name}}" placeholder="{{ trans('admin::lang.input') }} {{$label}}" {!! $attributes !!} >{{ old($column, $value) }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
```
|
||||
|
||||
最后找到文件`app/Admin/bootstrap.php`,如果文件不存在,请更新`laravel-admin`,然后新建该文件,添加下面代码:
|
||||
|
||||
```
|
||||
<?php
|
||||
|
||||
use App\Admin\Extensions\PHPEditor;
|
||||
use Encore\Admin\Form;
|
||||
|
||||
Form::extend('php', PHPEditor::class);
|
||||
|
||||
```
|
||||
|
||||
这样就能在[model-form](/zh/model-form.md)中使用PHP编辑器了:
|
||||
|
||||
```
|
||||
|
||||
$form->php('code');
|
||||
|
||||
```
|
||||
|
||||
通过这种方式,可以添加任意你想要添加的form组件。
|
||||
702
vendor/encore/laravel-admin/docs/zh/model-form-fields.md
vendored
Normal file
702
vendor/encore/laravel-admin/docs/zh/model-form-fields.md
vendored
Normal file
@@ -0,0 +1,702 @@
|
||||
# 表单组件
|
||||
|
||||
在`model-form`中内置了大量的form组件来帮助你快速的构建form表单
|
||||
|
||||
## 公共方法
|
||||
|
||||
### 设置保存值
|
||||
```php
|
||||
$form->text('title')->value('text...');
|
||||
```
|
||||
|
||||
### 设置默认值
|
||||
```php
|
||||
$form->text('title')->default('text...');
|
||||
```
|
||||
|
||||
### 设置help信息
|
||||
```php
|
||||
$form->text('title')->help('help...');
|
||||
```
|
||||
|
||||
### 设置属性
|
||||
```php
|
||||
$form->text('title')->attribute(['data-title' => 'title...']);
|
||||
|
||||
$form->text('title')->attribute('data-title', 'title...');
|
||||
```
|
||||
|
||||
### 设置placeholder
|
||||
```php
|
||||
$form->text('title')->placeholder('请输入。。。');
|
||||
```
|
||||
|
||||
### model-form-tab
|
||||
|
||||
如果表单元素太多,会导致form页面太长, 这种情况下可以使用tab来分隔form:
|
||||
|
||||
```php
|
||||
|
||||
$form->tab('Basic info', function ($form) {
|
||||
|
||||
$form->text('username');
|
||||
$form->email('email');
|
||||
|
||||
})->tab('Profile', function ($form) {
|
||||
|
||||
$form->image('avatar');
|
||||
$form->text('address');
|
||||
$form->mobile('phone');
|
||||
|
||||
})->tab('Jobs', function ($form) {
|
||||
|
||||
$form->hasMany('jobs', function () {
|
||||
$form->text('company');
|
||||
$form->date('start_date');
|
||||
$form->date('end_date');
|
||||
});
|
||||
|
||||
})
|
||||
|
||||
```
|
||||
|
||||
## 文本输入框
|
||||
|
||||
```php
|
||||
$form->text($column, [$label]);
|
||||
|
||||
// 添加提交验证规则
|
||||
$form->text($column, [$label])->rules('required|min:10');
|
||||
```
|
||||
|
||||
## select选择框
|
||||
```php
|
||||
$form->select($column[, $label])->options([1 => 'foo', 2 => 'bar', 'val' => 'Option name']);
|
||||
```
|
||||
|
||||
或者从api中获取选项列表:
|
||||
```php
|
||||
$form->select($column[, $label])->options('/api/users');
|
||||
|
||||
// 使用ajax并显示所选项目
|
||||
|
||||
$form->select($column[, $label])->options(Model::class)->ajax('/api/users');
|
||||
|
||||
// 或指定名称和ID
|
||||
|
||||
$form->select($column[, $label])->options(Model::class, 'name', 'id')->ajax('/api/users');
|
||||
```
|
||||
其中api接口的格式必须为下面格式:
|
||||
```php
|
||||
[
|
||||
{
|
||||
"id": 9,
|
||||
"text": "xxx"
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"text": "xxx"
|
||||
},
|
||||
...
|
||||
]
|
||||
```
|
||||
|
||||
如果选项过多,可通过ajax方式动态分页载入选项:
|
||||
|
||||
```php
|
||||
$form->select('user_id')->options(function ($id) {
|
||||
$user = User::find($id);
|
||||
|
||||
if ($user) {
|
||||
return [$user->id => $user->name];
|
||||
}
|
||||
})->ajax('/admin/api/users');
|
||||
```
|
||||
|
||||
<sub>注:如果你修改了`config/admin.php`配置文件中`route.prefix`的值,此处的接口路由应该修改为`config('admin.route.prefix').'/api/users'`。</sub>
|
||||
|
||||
API `/admin/api/users`接口的代码:
|
||||
|
||||
```php
|
||||
public function users(Request $request)
|
||||
{
|
||||
$q = $request->get('q');
|
||||
|
||||
return User::where('name', 'like', "%$q%")->paginate(null, ['id', 'name as text']);
|
||||
}
|
||||
|
||||
```
|
||||
接口返回的数据结构为
|
||||
```
|
||||
{
|
||||
"total": 4,
|
||||
"per_page": 15,
|
||||
"current_page": 1,
|
||||
"last_page": 1,
|
||||
"next_page_url": null,
|
||||
"prev_page_url": null,
|
||||
"from": 1,
|
||||
"to": 3,
|
||||
"data": [
|
||||
{
|
||||
"id": 9,
|
||||
"text": "xxx"
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"text": "xxx"
|
||||
},
|
||||
{
|
||||
"id": 42,
|
||||
"text": "xxx"
|
||||
},
|
||||
{
|
||||
"id": 48,
|
||||
"text": "xxx"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### select 联动
|
||||
|
||||
`select`组件支持父子关系的单向联动:
|
||||
```php
|
||||
$form->select('province')->options(...)->load('city', '/api/city');
|
||||
|
||||
$form->select('city');
|
||||
|
||||
```
|
||||
|
||||
其中`load('city', '/api/city');`的意思是,在当前select的选项切换之后,会把当前选项的值通过参数`q`, 调用接口`/api/city`,并把api返回的数据填充为city选择框的选项,其中api`/api/city`返回的数据格式必须符合:
|
||||
|
||||
```php
|
||||
[
|
||||
{
|
||||
"id": 9,
|
||||
"text": "xxx"
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"text": "xxx"
|
||||
},
|
||||
...
|
||||
]
|
||||
```
|
||||
控制器action的代码示例如下:
|
||||
|
||||
```php
|
||||
public function city(Request $request)
|
||||
{
|
||||
$provinceId = $request->get('q');
|
||||
|
||||
return ChinaArea::city()->where('parent_id', $provinceId)->get(['id', DB::raw('name as text')]);
|
||||
}
|
||||
```
|
||||
|
||||
## 多选框
|
||||
|
||||
```php
|
||||
$form->multipleSelect($column[, $label])->options([1 => 'foo', 2 => 'bar', 'val' => 'Option name']);
|
||||
|
||||
// 使用ajax并显示所选项目:
|
||||
|
||||
$form->multipleSelect($column[, $label])->options(Model::class)->ajax('ajax_url');
|
||||
|
||||
// 或指定名称和ID
|
||||
|
||||
$form->multipleSelect($column[, $label])->options(Model::class, 'name', 'id')->ajax('ajax_url');
|
||||
```
|
||||
|
||||
多选框可以处理两种情况,第一种是`ManyToMany`的关系。
|
||||
|
||||
```
|
||||
|
||||
class Post extends Models
|
||||
{
|
||||
public function tags()
|
||||
{
|
||||
return $this->belongsToMany(Tag::class);
|
||||
}
|
||||
}
|
||||
|
||||
$form->multipleSelect('tags')->options(Tag::all()->pluck('name', 'id'));
|
||||
|
||||
```
|
||||
|
||||
第二种是将选项数组存储到单字段中,如果字段是字符串类型,那就需要在模型里面为该字段定义[访问器和修改器](https://laravel.com/docs/5.5/eloquent-mutators)来存储和读取了。
|
||||
|
||||
如果选项过多,可通过ajax方式动态分页载入选项:
|
||||
|
||||
```php
|
||||
$form->select('friends')->options(function ($ids) {
|
||||
|
||||
return User::find($ids)->pluck('name', 'id');
|
||||
|
||||
})->ajax('/admin/api/users');
|
||||
```
|
||||
|
||||
<sub>注:如果你修改了`config/admin.php`配置文件中`route.prefix`的值,此处的接口路由应该修改为`config('admin.route.prefix').'/api/users'`。</sub>
|
||||
|
||||
API `/admin/api/users`接口的代码:
|
||||
|
||||
```php
|
||||
public function users(Request $request)
|
||||
{
|
||||
$q = $request->get('q');
|
||||
|
||||
return User::where('name', 'like', "%$q%")->paginate(null, ['id', 'name as text']);
|
||||
}
|
||||
|
||||
```
|
||||
接口返回的数据结构为
|
||||
```
|
||||
{
|
||||
"total": 4,
|
||||
"per_page": 15,
|
||||
"current_page": 1,
|
||||
"last_page": 1,
|
||||
"next_page_url": null,
|
||||
"prev_page_url": null,
|
||||
"from": 1,
|
||||
"to": 3,
|
||||
"data": [
|
||||
{
|
||||
"id": 9,
|
||||
"text": "xxx"
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"text": "xxx"
|
||||
},
|
||||
{
|
||||
"id": 42,
|
||||
"text": "xxx"
|
||||
},
|
||||
{
|
||||
"id": 48,
|
||||
"text": "xxx"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## listbox
|
||||
|
||||
使用方法和`multipleSelect`类似
|
||||
|
||||
```php
|
||||
$form->listbox($column[, $label])->options([1 => 'foo', 2 => 'bar', 'val' => 'Option name']);
|
||||
```
|
||||
|
||||
## textarea输入框
|
||||
```php
|
||||
$form->textarea($column[, $label])->rows(10);
|
||||
```
|
||||
|
||||
## radio选择
|
||||
```php
|
||||
$form->radio($column[, $label])->options(['m' => 'Female', 'f'=> 'Male'])->default('m');
|
||||
|
||||
// 竖排
|
||||
$form->radio($column[, $label])->options(['m' => 'Female', 'f'=> 'Male'])->stacked();
|
||||
```
|
||||
|
||||
## checkbox选择
|
||||
|
||||
`checkbox`能处理两种数据存储情况,参考[多选框](#多选框)
|
||||
|
||||
`options()`方法用来设置选择项:
|
||||
```php
|
||||
$form->checkbox($column[, $label])->options([1 => 'foo', 2 => 'bar', 'val' => 'Option name']);
|
||||
|
||||
// 竖排
|
||||
$form->checkbox($column[, $label])->options([1 => 'foo', 2 => 'bar', 'val' => 'Option name'])->stacked();
|
||||
```
|
||||
|
||||
## email个数输入框
|
||||
```php
|
||||
$form->email($column[, $label]);
|
||||
```
|
||||
|
||||
## 密码输入框
|
||||
```php
|
||||
$form->password($column[, $label]);
|
||||
```
|
||||
|
||||
## url输入框
|
||||
```php
|
||||
$form->url($column[, $label]);
|
||||
```
|
||||
|
||||
## ip输入框
|
||||
```php
|
||||
$form->ip($column[, $label]);
|
||||
```
|
||||
|
||||
## 电话号码输入框
|
||||
```php
|
||||
$form->mobile($column[, $label])->options(['mask' => '999 9999 9999']);
|
||||
```
|
||||
|
||||
## 颜色选择框
|
||||
```php
|
||||
$form->color($column[, $label])->default('#ccc');
|
||||
```
|
||||
|
||||
## 时间输入框
|
||||
```php
|
||||
$form->time($column[, $label]);
|
||||
|
||||
// 设置时间格式,更多格式参考http://momentjs.com/docs/#/displaying/format/
|
||||
$form->time($column[, $label])->format('HH:mm:ss');
|
||||
```
|
||||
|
||||
## 日期输入框
|
||||
```php
|
||||
$form->date($column[, $label]);
|
||||
|
||||
// 设置日期格式,更多格式参考http://momentjs.com/docs/#/displaying/format/
|
||||
$form->date($column[, $label])->format('YYYY-MM-DD');
|
||||
```
|
||||
|
||||
## 日期时间输入框
|
||||
```php
|
||||
$form->datetime($column[, $label]);
|
||||
|
||||
// 设置日期格式,更多格式参考http://momentjs.com/docs/#/displaying/format/
|
||||
$form->datetime($column[, $label])->format('YYYY-MM-DD HH:mm:ss');
|
||||
```
|
||||
|
||||
## 时间范围选择框
|
||||
`$startTime`、`$endTime`为开始和结束时间字段:
|
||||
```php
|
||||
$form->timeRange($startTime, $endTime, 'Time Range');
|
||||
```
|
||||
|
||||
## 日期范围选框
|
||||
`$startDate`、`$endDate`为开始和结束日期字段:
|
||||
```php
|
||||
$form->dateRange($startDate, $endDate, 'Date Range');
|
||||
```
|
||||
|
||||
## 时间日期范围选择框
|
||||
`$startDateTime`、`$endDateTime`为开始和结束时间日期:
|
||||
```php
|
||||
$form->datetimeRange($startDateTime, $endDateTime, 'DateTime Range');
|
||||
```
|
||||
|
||||
## 货币输入框
|
||||
```php
|
||||
$form->currency($column[, $label]);
|
||||
|
||||
// 设置单位符号
|
||||
$form->currency($column[, $label])->symbol('¥');
|
||||
|
||||
```
|
||||
|
||||
## 数字输入框
|
||||
```php
|
||||
$form->number($column[, $label]);
|
||||
```
|
||||
|
||||
## 比例输入框
|
||||
```php
|
||||
$form->rate($column[, $label]);
|
||||
```
|
||||
|
||||
## 图片上传
|
||||
|
||||
使用图片上传功能之前需要先完成上传配置,请参考:[图片/文件上传](/zh/model-form-upload.md).
|
||||
|
||||
图片上传目录在文件`config/admin.php`中的`upload.image`中配置,如果目录不存在,需要创建该目录并开放写权限。
|
||||
|
||||
可以使用压缩、裁切、添加水印等各种方法,需要先安装[intervention/image](http://image.intervention.io/getting_started/installation).
|
||||
|
||||
更多使用方法请参考[[Intervention](http://image.intervention.io/getting_started/introduction)]:
|
||||
```php
|
||||
$form->image($column[, $label]);
|
||||
|
||||
// 修改图片上传路径和文件名
|
||||
$form->image($column[, $label])->move($dir, $name);
|
||||
|
||||
// 剪裁图片
|
||||
$form->image($column[, $label])->crop(int $width, int $height, [int $x, int $y]);
|
||||
|
||||
// 加水印
|
||||
$form->image($column[, $label])->insert($watermark, 'center');
|
||||
|
||||
// 添加图片删除按钮
|
||||
$form->image($column[, $label])->removable();
|
||||
|
||||
```
|
||||
|
||||
## 文件上传
|
||||
|
||||
使用图片上传功能之前需要先完成上传配置,请参考:[图片/文件上传](/zh/model-form-upload.md).
|
||||
|
||||
文件上传目录在文件`config/admin.php`中的`upload.file`中配置,如果目录不存在,需要创建该目录并开放写权限。
|
||||
```php
|
||||
$form->file($column[, $label]);
|
||||
|
||||
// 修改文件上传路径和文件名
|
||||
$form->file($column[, $label])->move($dir, $name);
|
||||
|
||||
// 并设置上传文件类型
|
||||
$form->file($column[, $label])->rules('mimes:doc,docx,xlsx');
|
||||
|
||||
// 添加文件删除按钮
|
||||
$form->file($column[, $label])->removable();
|
||||
|
||||
```
|
||||
|
||||
## 多图/文件上传
|
||||
|
||||
```php
|
||||
// 多图
|
||||
$form->multipleImage($column[, $label]);
|
||||
|
||||
// 添加删除按钮
|
||||
$form->multipleImage($column[, $label])->removable();
|
||||
|
||||
// 多文件
|
||||
$form->multipleFile($column[, $label]);
|
||||
|
||||
// 添加删除按钮
|
||||
$form->multipleFile($column[, $label])->removable();
|
||||
```
|
||||
|
||||
多图/文件上传的时候提交的数据为文件路径数组,可以直接用mysql的`JSON`类型字段存储,如果用mongodb的话也能直接存储,但是如果用字符串类型来存储的话,就需要指定数据的存储格式了,
|
||||
比如,如果要用json字符串来存储文件数据,就需要在模型中定义字段的mutator,比如字段名为`pictures`,定义mutator:
|
||||
```php
|
||||
public function setPicturesAttribute($pictures)
|
||||
{
|
||||
if (is_array($pictures)) {
|
||||
$this->attributes['pictures'] = json_encode($pictures);
|
||||
}
|
||||
}
|
||||
|
||||
public function getPicturesAttribute($pictures)
|
||||
{
|
||||
return json_decode($pictures, true);
|
||||
}
|
||||
```
|
||||
当然你也可以指定其它任何格式.
|
||||
|
||||
## 地图控件
|
||||
|
||||
地图组件引用了网络资源,默认关闭,如果要开启这个组件参考[form组件管理](/zh/model-form-field-management.md)
|
||||
|
||||
地图控件,用来选择经纬度,`$latitude`, `$longitude`为经纬度字段,`Laravel`的`locale`设置为`zh_CN`的时候使用腾讯地图,否则使用Google地图:
|
||||
```php
|
||||
$form->map($latitude, $longitude, $label);
|
||||
```
|
||||
|
||||
## 滑动选择控件
|
||||
可以用来数字类型字段的选择,比如年龄:
|
||||
```php
|
||||
$form->slider($column[, $label])->options(['max' => 100, 'min' => 1, 'step' => 1, 'postfix' => 'years old']);
|
||||
```
|
||||
更多options请参考:https://github.com/IonDen/ion.rangeSlider#settings
|
||||
|
||||
## 富文本编辑框
|
||||
|
||||
编辑器组件引用了网络资源,默认关闭,如果要开启这个组件参考[form组件管理](/zh/model-form-field-management.md).
|
||||
|
||||
```php
|
||||
$form->editor($column[, $label]);
|
||||
```
|
||||
|
||||
## 隐藏域
|
||||
```php
|
||||
$form->hidden($column);
|
||||
```
|
||||
|
||||
## 开关选择
|
||||
`on`和`off`对用开关的两个值`1`和`0`:
|
||||
```php
|
||||
$states = [
|
||||
'on' => ['value' => 1, 'text' => '打开', 'color' => 'success'],
|
||||
'off' => ['value' => 0, 'text' => '关闭', 'color' => 'danger'],
|
||||
];
|
||||
|
||||
$form->switch($column[, $label])->states($states);
|
||||
```
|
||||
|
||||
## 显示字段
|
||||
只显示字段,不做任何操作:
|
||||
```php
|
||||
$form->display($column[, $label]);
|
||||
|
||||
|
||||
//更复杂的显示
|
||||
$form->display($column[, $label])->with(function ($value) {
|
||||
return "<img src="$value" />";
|
||||
});
|
||||
```
|
||||
|
||||
## 分割线
|
||||
```php
|
||||
$form->divide();
|
||||
```
|
||||
|
||||
## Html
|
||||
插入html内容,参数可以是实现了`Htmlable`、`Renderable`或者实现了`__toString()`方法的类
|
||||
```php
|
||||
$form->html('你的html内容', $label = '');
|
||||
```
|
||||
|
||||
## 标签
|
||||
插入逗号(,)隔开的字符串`tags`
|
||||
```php
|
||||
$form->tags('keywords');
|
||||
```
|
||||
|
||||
`tags`同样支持`ManyToMany`的关系,示例如下:
|
||||
|
||||
```php
|
||||
$form->tags('tags', '文章标签')
|
||||
->pluck('name', 'id') // name 为需要显示的 Tag 模型的字段,id 为主键
|
||||
->options(Tag::all());// 下拉框选项
|
||||
```
|
||||
|
||||
注意:处理`ManyToMany`关系时必须调用`pluck`方法,指定显示的字段名和主键。
|
||||
此外 `options` 方法传入一个`Collection`对象时,`options`会自动调用该对象的`pluck`方法转为`['主键名' => '显示字段名']` 数组,作为下拉框选项。或者可以直接使用`['主键名' => '显示字段名']`这样的数组作为参数。
|
||||
|
||||
`tags`还支持`saving`方法用于处理提交的数据,示例如下:
|
||||
|
||||
```php
|
||||
$form->tags('tags', '文章标签')
|
||||
->pluck('name', 'id')
|
||||
->options(Tag::all())
|
||||
->saving(function ($value) {
|
||||
return $value;
|
||||
});
|
||||
```
|
||||
|
||||
`saving` 方法接收一个「参数为 tags 的提交值,返回值为修改后的 tags 提交值」的闭包,可以用于实现自动创建新 tag 或其它功能。
|
||||
|
||||
## 图标
|
||||
选择`font-awesome`图标
|
||||
```php
|
||||
$form->icon('icon');
|
||||
```
|
||||
|
||||
## 一对多
|
||||
|
||||
一对多内嵌表格,用于处理一对多的关系,下面是个简单的例子:
|
||||
|
||||
有两张表是一对多关系:
|
||||
|
||||
```sql
|
||||
CREATE TABLE `demo_painters` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`username` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`bio` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
|
||||
CREATE TABLE `demo_paintings` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`painter_id` int(10) unsigned NOT NULL,
|
||||
`title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`body` text COLLATE utf8_unicode_ci NOT NULL,
|
||||
`completed_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY painter_id (`painter_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
```
|
||||
|
||||
表的模型为:
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Models\Demo;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Painter extends Model
|
||||
{
|
||||
public function paintings()
|
||||
{
|
||||
return $this->hasMany(Painting::class, 'painter_id');
|
||||
}
|
||||
}
|
||||
|
||||
<?php
|
||||
|
||||
namespace App\Models\Demo;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Painting extends Model
|
||||
{
|
||||
protected $fillable = ['title', 'body', 'completed_at'];
|
||||
|
||||
public function painter()
|
||||
{
|
||||
return $this->belongsTo(Painter::class, 'painter_id');
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
构建表单代码如下:
|
||||
```php
|
||||
$form->display('id', 'ID');
|
||||
|
||||
$form->text('username')->rules('required');
|
||||
$form->textarea('bio')->rules('required');
|
||||
|
||||
$form->hasMany('paintings', function (Form\NestedForm $form) {
|
||||
$form->text('title');
|
||||
$form->image('body');
|
||||
$form->datetime('completed_at');
|
||||
});
|
||||
|
||||
$form->display('created_at', 'Created At');
|
||||
$form->display('updated_at', 'Updated At');
|
||||
|
||||
// 也可以设置label
|
||||
|
||||
$form->hasMany('paintings', '画作', function (Form\NestedForm $form) {
|
||||
|
||||
});
|
||||
```
|
||||
|
||||
## 内嵌
|
||||
|
||||
用于处理`mysql`的`JSON`类型字段数据或者`mongodb`的`object`类型数据,也可以将多个field的数据值以`JSON`字符串的形式存储在`mysql`的字符串类型字段中
|
||||
|
||||
比如`orders`表中的`JSON`或字符串类型的`extra`字段,用来存储多个field的数据,先定义model:
|
||||
```php
|
||||
class Order extends Model
|
||||
{
|
||||
protected $casts = [
|
||||
'extra' => 'json',
|
||||
];
|
||||
}
|
||||
```
|
||||
然后在form中使用:
|
||||
```php
|
||||
$form->embeds('extra', function ($form) {
|
||||
|
||||
$form->text('extra1')->rules('required');
|
||||
$form->email('extra2')->rules('required');
|
||||
$form->mobile('extra3');
|
||||
$form->datetime('extra4');
|
||||
|
||||
$form->dateRange('extra5', 'extra6', '范围')->rules('required');
|
||||
|
||||
});
|
||||
|
||||
// 自定义标题
|
||||
$form->embeds('extra', '附加信息', function ($form) {
|
||||
...
|
||||
});
|
||||
```
|
||||
|
||||
回调函数里面构建表单元素的方法调用和外面是一样的。
|
||||
113
vendor/encore/laravel-admin/docs/zh/model-form-upload.md
vendored
Normal file
113
vendor/encore/laravel-admin/docs/zh/model-form-upload.md
vendored
Normal file
@@ -0,0 +1,113 @@
|
||||
# 文件/图片上传
|
||||
|
||||
[model-form](/zh/model-form.md)通过以下的调用来生成form元素。
|
||||
|
||||
```php
|
||||
$form->file('file_column');
|
||||
$form->image('image_column');
|
||||
```
|
||||
|
||||
## 修改存储路径或文件名
|
||||
|
||||
```php
|
||||
|
||||
// 修改上传目录
|
||||
$form->image('picture')->move('public/upload/image1/');
|
||||
|
||||
// 使用随机生成文件名 (md5(uniqid()).extension)
|
||||
$form->image('picture')->uniqueName();
|
||||
|
||||
// 自定义文件名
|
||||
$form->image('picture')->name(function ($file) {
|
||||
return 'test.'.$file->guessExtension();
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
[model-form](/zh/model-form.md)支持本地和云存储的文件上传
|
||||
|
||||
## 本地上传
|
||||
|
||||
先添加存储配置,`config/filesystems.php` 添加一项`disk`:
|
||||
|
||||
```php
|
||||
|
||||
'disks' => [
|
||||
... ,
|
||||
|
||||
'admin' => [
|
||||
'driver' => 'local',
|
||||
'root' => public_path('uploads'),
|
||||
'visibility' => 'public',
|
||||
'url' => env('APP_URL').'/uploads',
|
||||
],
|
||||
],
|
||||
|
||||
```
|
||||
|
||||
设置上传的路径为`public/uploads`(public_path('uploads'))。
|
||||
|
||||
然后选择上传的`disk`,打开`config/admin.php`找到:
|
||||
|
||||
```php
|
||||
|
||||
'upload' => [
|
||||
|
||||
'disk' => 'admin',
|
||||
|
||||
'directory' => [
|
||||
'image' => 'images',
|
||||
'file' => 'files',
|
||||
]
|
||||
],
|
||||
|
||||
```
|
||||
|
||||
将`disk`设置为上面添加的`admin`,`directory.image`和`directory.file`分别为用`$form->image($column)`和`$form->file($column)`上传的图片和文件的上传目录。
|
||||
|
||||
|
||||
## 云盘上传
|
||||
|
||||
如果需要上传到云存储,需要安装对应`laravel storage`的适配器,拿七牛云存储举例
|
||||
|
||||
首先安装 [zgldh/qiniu-laravel-storage](https://github.com/zgldh/qiniu-laravel-storage)
|
||||
|
||||
同样配置好disk,在`config/filesystems.php` 添加一项:
|
||||
|
||||
```php
|
||||
'disks' => [
|
||||
... ,
|
||||
'qiniu' => [
|
||||
'driver' => 'qiniu',
|
||||
'domains' => [
|
||||
'default' => 'xxxxx.com1.z0.glb.clouddn.com', //你的七牛域名
|
||||
'https' => 'dn-yourdomain.qbox.me', //你的HTTPS域名
|
||||
'custom' => 'static.abc.com', //你的自定义域名
|
||||
],
|
||||
'access_key'=> '', //AccessKey
|
||||
'secret_key'=> '', //SecretKey
|
||||
'bucket' => '', //Bucket名字
|
||||
'notify_url'=> '', //持久化处理回调地址
|
||||
'url' => 'http://of8kfibjo.bkt.clouddn.com/', // 填写文件访问根url
|
||||
],
|
||||
],
|
||||
|
||||
```
|
||||
|
||||
然后修改`laravel-admin`的上传配置,打开`config/admin.php`找到:
|
||||
|
||||
```php
|
||||
|
||||
'upload' => [
|
||||
|
||||
'disk' => 'qiniu',
|
||||
|
||||
'directory' => [
|
||||
'image' => 'image',
|
||||
'file' => 'file',
|
||||
],
|
||||
],
|
||||
|
||||
```
|
||||
|
||||
`disk`选择上面配置的`qiniu`。
|
||||
36
vendor/encore/laravel-admin/docs/zh/model-form-validation.md
vendored
Normal file
36
vendor/encore/laravel-admin/docs/zh/model-form-validation.md
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
表单验证
|
||||
========
|
||||
|
||||
`model-form`使用laravel的验证规则来验证表单提交的数据:
|
||||
|
||||
```php
|
||||
$form->text('title')->rules('required|min:3');
|
||||
|
||||
// 复杂的验证规则可以在回调里面实现
|
||||
$form->text('title')->rules(function ($form) {
|
||||
|
||||
// 如果不是编辑状态,则添加字段唯一验证
|
||||
if (!$id = $form->model()->id) {
|
||||
return 'unique:users,email_address';
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
也可以给验证规则自定义错误提示消息:
|
||||
|
||||
```php
|
||||
$form->text('code')->rules('required|regex:/^\d+$/|min:10', [
|
||||
'regex' => 'code必须全部为数字',
|
||||
'min' => 'code不能少于10个字符',
|
||||
]);
|
||||
```
|
||||
|
||||
如果要允许字段为空,首先要在数据库的表里面对该字段设置为`NULL`,然后
|
||||
|
||||
```php
|
||||
$form->text('title')->rules('nullable');
|
||||
```
|
||||
|
||||
更多规则请参考[Validation](https://laravel.com/docs/5.5/validation).
|
||||
180
vendor/encore/laravel-admin/docs/zh/model-form.md
vendored
Normal file
180
vendor/encore/laravel-admin/docs/zh/model-form.md
vendored
Normal file
@@ -0,0 +1,180 @@
|
||||
# 基于数据模型的表单
|
||||
|
||||
`Encore\Admin\Form`类用于生成基于数据模型的表单,先来个例子,数据库中有`movies`表
|
||||
|
||||
```sql
|
||||
CREATE TABLE `movies` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`director` int(10) unsigned NOT NULL,
|
||||
`describe` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`rate` tinyint unsigned NOT NULL,
|
||||
`released` enum(0, 1),
|
||||
`release_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
|
||||
```
|
||||
|
||||
对应的数据模型为`App\Models\Movie`,下面的代码可以生成`movies`的数据表单:
|
||||
|
||||
```php
|
||||
|
||||
use App\Models\Movie;
|
||||
use Encore\Admin\Form;
|
||||
use Encore\Admin\Facades\Admin;
|
||||
|
||||
$grid = Admin::form(Movie::class, function(Form $form){
|
||||
|
||||
// 显示记录id
|
||||
$form->display('id', 'ID');
|
||||
|
||||
// 添加text类型的input框
|
||||
$form->text('title', '电影标题');
|
||||
|
||||
$directors = [
|
||||
1 => 'John',
|
||||
2 => 'Smith',
|
||||
3 => 'Kate',
|
||||
];
|
||||
|
||||
$form->select('director', '导演')->options($directors);
|
||||
|
||||
// 添加describe的textarea输入框
|
||||
$form->textarea('describe', '简介');
|
||||
|
||||
// 数字输入框
|
||||
$form->number('rate', '打分');
|
||||
|
||||
// 添加开关操作
|
||||
$form->switch('released', '发布?');
|
||||
|
||||
// 添加日期时间选择框
|
||||
$form->dateTime('release_at', '发布时间');
|
||||
|
||||
// 两个时间显示
|
||||
$form->display('created_at', '创建时间');
|
||||
$form->display('updated_at', '修改时间');
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
## 自定义工具
|
||||
|
||||
表单右上角默认有返回和跳转列表两个按钮工具, 可以使用下面的方式修改它:
|
||||
|
||||
```php
|
||||
$form->tools(function (Form\Tools $tools) {
|
||||
|
||||
// 去掉返回按钮
|
||||
$tools->disableBackButton();
|
||||
|
||||
// 去掉跳转列表按钮
|
||||
$tools->disableListButton();
|
||||
|
||||
// 添加一个按钮, 参数可以是字符串, 或者实现了Renderable或Htmlable接口的对象实例
|
||||
$tools->add('<a class="btn btn-sm btn-danger"><i class="fa fa-trash"></i> delete</a>');
|
||||
});
|
||||
```
|
||||
|
||||
## 其它方法
|
||||
|
||||
去掉提交按钮:
|
||||
|
||||
```php
|
||||
$form->disableSubmit();
|
||||
```
|
||||
|
||||
去掉重置按钮:
|
||||
```php
|
||||
$form->disableReset();
|
||||
```
|
||||
|
||||
忽略掉不需要保存的字段
|
||||
|
||||
```php
|
||||
$form->ignore(['column1', 'column2', 'column3']);
|
||||
```
|
||||
|
||||
设置宽度
|
||||
|
||||
```php
|
||||
$form->setWidth(10, 2);
|
||||
```
|
||||
|
||||
设置表单提交的action
|
||||
|
||||
```php
|
||||
$form->setAction('admin/users');
|
||||
```
|
||||
|
||||
## 关联模型
|
||||
|
||||
|
||||
### 一对一
|
||||
`users`表和`profiles`表通过`profiles.user_id`字段生成一对一关联
|
||||
|
||||
```sql
|
||||
|
||||
CREATE TABLE `users` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
|
||||
CREATE TABLE `profiles` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`user_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`age` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`gender` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
```
|
||||
|
||||
对应的数据模分别为:
|
||||
|
||||
```php
|
||||
|
||||
class User extends Model
|
||||
{
|
||||
public function profile()
|
||||
{
|
||||
return $this->hasOne(Profile::class);
|
||||
}
|
||||
}
|
||||
|
||||
class Profile extends Model
|
||||
{
|
||||
public function user()
|
||||
{
|
||||
return $this->belongsTo(User::class);
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
通过下面的代码可以关联在一个form里面:
|
||||
|
||||
```php
|
||||
Admin::form(User::class, function (Form $form) {
|
||||
|
||||
$form->display('id');
|
||||
|
||||
$form->text('name');
|
||||
$form->text('email');
|
||||
|
||||
$form->text('profile.age');
|
||||
$form->text('profile.gender');
|
||||
|
||||
$form->datetime('created_at');
|
||||
$form->datetime('updated_at');
|
||||
});
|
||||
|
||||
```
|
||||
91
vendor/encore/laravel-admin/docs/zh/model-grid-actions.md
vendored
Normal file
91
vendor/encore/laravel-admin/docs/zh/model-grid-actions.md
vendored
Normal file
@@ -0,0 +1,91 @@
|
||||
# 模型表格行操作
|
||||
|
||||
`model-grid`默认有三个行操作`编辑`、`删除`和`详情`,可以通过下面的方式关闭它们:
|
||||
|
||||
```php
|
||||
$grid->actions(function ($actions) {
|
||||
$actions->disableDelete();
|
||||
$actions->disableEdit();
|
||||
$actions->disableView();
|
||||
});
|
||||
```
|
||||
可以通过传入的`$actions`参数来获取当前行的数据:
|
||||
```php
|
||||
$grid->actions(function ($actions) {
|
||||
|
||||
// 当前行的数据数组
|
||||
$actions->row;
|
||||
|
||||
// 获取当前行主键值
|
||||
$actions->getKey();
|
||||
});
|
||||
```
|
||||
|
||||
如果有自定义的操作按钮,可以通过下面的方式添加:
|
||||
|
||||
```php
|
||||
$grid->actions(function ($actions) {
|
||||
|
||||
// append一个操作
|
||||
$actions->append('<a href=""><i class="fa fa-eye"></i></a>');
|
||||
|
||||
// prepend一个操作
|
||||
$actions->prepend('<a href=""><i class="fa fa-paper-plane"></i></a>');
|
||||
}
|
||||
```
|
||||
|
||||
如果有比较复杂的操作,可以参考下面的方式:
|
||||
|
||||
|
||||
先定义操作类
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Admin\Extensions;
|
||||
|
||||
use Encore\Admin\Admin;
|
||||
|
||||
class CheckRow
|
||||
{
|
||||
protected $id;
|
||||
|
||||
public function __construct($id)
|
||||
{
|
||||
$this->id = $id;
|
||||
}
|
||||
|
||||
protected function script()
|
||||
{
|
||||
return <<<SCRIPT
|
||||
|
||||
$('.grid-check-row').on('click', function () {
|
||||
|
||||
// Your code.
|
||||
console.log($(this).data('id'));
|
||||
|
||||
});
|
||||
|
||||
SCRIPT;
|
||||
}
|
||||
|
||||
protected function render()
|
||||
{
|
||||
Admin::script($this->script());
|
||||
|
||||
return "<a class='btn btn-xs btn-success fa fa-check grid-check-row' data-id='{$this->id}'></a>";
|
||||
}
|
||||
|
||||
public function __toString()
|
||||
{
|
||||
return $this->render();
|
||||
}
|
||||
}
|
||||
```
|
||||
然后添加操作:
|
||||
```php
|
||||
$grid->actions(function ($actions) {
|
||||
|
||||
// 添加操作
|
||||
$actions->append(new CheckRow($actions->getKey()));
|
||||
});
|
||||
```
|
||||
343
vendor/encore/laravel-admin/docs/zh/model-grid-column.md
vendored
Normal file
343
vendor/encore/laravel-admin/docs/zh/model-grid-column.md
vendored
Normal file
@@ -0,0 +1,343 @@
|
||||
# 列操作
|
||||
|
||||
`model-grid`内置了很多对于列的操作方法,可以通过这些方法很灵活的操作列数据。
|
||||
|
||||
`Encore\Admin\Grid\Column`对象内置了`display()`方法来通过传入的回调函数来处理当前列的值,
|
||||
```php
|
||||
$grid->column('title')->display(function ($title) {
|
||||
|
||||
return "<span style='color:blue'>$title</span>";
|
||||
|
||||
});
|
||||
```
|
||||
在传入的匿名函数中可以通过任何方式对数据进行处理,另外匿名函数绑定了当前列的数据作为父对象,可以在函数中调用当前行的数据:
|
||||
```php
|
||||
|
||||
$grid->first_name();
|
||||
|
||||
$grid->last_name();
|
||||
|
||||
// 不存在的`full_name`字段
|
||||
$grid->column('full_name')->display(function () {
|
||||
return $this->first_name . ' ' . $this->last_name;
|
||||
});
|
||||
```
|
||||
|
||||
> `value()`方法作为`display()`方法的别名存在
|
||||
|
||||
## 内置方法
|
||||
|
||||
`model-grid`内置了若干方法来帮助你扩展列功能
|
||||
|
||||
### editable
|
||||
|
||||
通过`editable.js`的帮助,可以让你在表格中直接编辑数据,使用方法如下
|
||||
```php
|
||||
$grid->title()->editable();
|
||||
|
||||
$grid->title()->editable('textarea');
|
||||
|
||||
$grid->title()->editable('select', [1 => 'option1', 2 => 'option2', 3 => 'option3']);
|
||||
|
||||
// select 支持传递闭包作为参数,该闭包接收参数为当前行对应的模型
|
||||
$grid->title()->editable('select', function($row) {
|
||||
if ($row->title === 'test') {
|
||||
return ['test1', 'test2'];
|
||||
}
|
||||
return ['test3', 'test4'];
|
||||
});
|
||||
|
||||
$grid->birth()->editable('date');
|
||||
|
||||
$grid->published_at()->editable('datetime');
|
||||
|
||||
$grid->column('year')->editable('year');
|
||||
|
||||
$grid->column('month')->editable('month');
|
||||
|
||||
$grid->column('day')->editable('day');
|
||||
|
||||
```
|
||||
|
||||
### switch
|
||||
|
||||
> 注意:在`grid`中对某字段设置了`switch`,同时需要在`form`里面对该字段设置同样的`switch`
|
||||
|
||||
快速将列变成开关组件,使用方法如下:
|
||||
```php
|
||||
$grid->status()->switch();
|
||||
|
||||
// 设置text、color、和存储值
|
||||
$states = [
|
||||
'on' => ['value' => 1, 'text' => '打开', 'color' => 'primary'],
|
||||
'off' => ['value' => 2, 'text' => '关闭', 'color' => 'default'],
|
||||
];
|
||||
$grid->status()->switch($states);
|
||||
|
||||
```
|
||||
|
||||
### switchGroup
|
||||
|
||||
> 注意:在`grid`中对某些字段设置了`switch`,同时需要在`form`里面对这些字段设置同样的`switch`
|
||||
|
||||
快速将列变成开关组件组,使用方法如下:
|
||||
```php
|
||||
$states = [
|
||||
'on' => ['text' => 'YES'],
|
||||
'off' => ['text' => 'NO'],
|
||||
];
|
||||
|
||||
$grid->column('switch_group')->switchGroup([
|
||||
'hot' => '热门',
|
||||
'new' => '最新',
|
||||
'recommend' => '推荐',
|
||||
'image.show' => '显示图片', // 更新对应关联模型
|
||||
], $states);
|
||||
|
||||
```
|
||||
|
||||
### select
|
||||
|
||||
```php
|
||||
$grid->options()->select([
|
||||
1 => 'Sed ut perspiciatis unde omni',
|
||||
2 => 'voluptatem accusantium doloremque',
|
||||
3 => 'dicta sunt explicabo',
|
||||
4 => 'laudantium, totam rem aperiam',
|
||||
]);
|
||||
```
|
||||
|
||||
`select` 也支持参数为闭包,使用方法和`editable`的`select`类似。
|
||||
|
||||
### radio
|
||||
```php
|
||||
$grid->options()->radio([
|
||||
1 => 'Sed ut perspiciatis unde omni',
|
||||
2 => 'voluptatem accusantium doloremque',
|
||||
3 => 'dicta sunt explicabo',
|
||||
4 => 'laudantium, totam rem aperiam',
|
||||
]);
|
||||
```
|
||||
|
||||
`radio` 也支持参数为闭包,使用方法和`editable`的`select`类似。
|
||||
|
||||
### checkbox
|
||||
```php
|
||||
$grid->options()->checkbox([
|
||||
1 => 'Sed ut perspiciatis unde omni',
|
||||
2 => 'voluptatem accusantium doloremque',
|
||||
3 => 'dicta sunt explicabo',
|
||||
4 => 'laudantium, totam rem aperiam',
|
||||
]);
|
||||
```
|
||||
|
||||
`checkbox` 也支持参数为闭包,使用方法和`editable`的`select`类似。
|
||||
|
||||
### image
|
||||
|
||||
```php
|
||||
$grid->picture()->image();
|
||||
|
||||
//设置服务器和宽高
|
||||
$grid->picture()->image('http://xxx.com', 100, 100);
|
||||
|
||||
// 显示多图
|
||||
$grid->pictures()->display(function ($pictures) {
|
||||
|
||||
return json_decode($pictures, true);
|
||||
|
||||
})->image('http://xxx.com', 100, 100);
|
||||
```
|
||||
|
||||
### label
|
||||
```php
|
||||
$grid->name()->label();
|
||||
|
||||
//设置颜色,默认`success`,可选`danger`、`warning`、`info`、`primary`、`default`、`success`
|
||||
$grid->name()->label('danger');
|
||||
|
||||
// 接收数组
|
||||
$grid->keywords()->label();
|
||||
```
|
||||
|
||||
### badge
|
||||
|
||||
```php
|
||||
$grid->name()->badge();
|
||||
|
||||
//设置颜色,默认`success`,可选`danger`、`warning`、`info`、`primary`、`default`、`success`
|
||||
$grid->name()->badge('danger');
|
||||
|
||||
// 接收数组
|
||||
$grid->keywords()->badge();
|
||||
```
|
||||
|
||||
## 扩展列功能
|
||||
|
||||
可以通过两种方式扩展列功能,第一种是通过匿名函数的方式。
|
||||
|
||||
在`app/Admin/bootstrap.php`加入以下代码:
|
||||
```php
|
||||
use Encore\Admin\Grid\Column;
|
||||
|
||||
Column::extend('color', function ($value, $color) {
|
||||
return "<span style='color: $color'>$value</span>"
|
||||
});
|
||||
```
|
||||
然后在`model-grid`中使用这个扩展:
|
||||
```php
|
||||
|
||||
$grid->title()->color('#ccc');
|
||||
|
||||
```
|
||||
|
||||
如果列显示逻辑比较复杂,可以通过扩展类来实现。
|
||||
|
||||
扩展类`app/Admin/Extensions/Popover.php`:
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Admin\Extensions;
|
||||
|
||||
use Encore\Admin\Admin;
|
||||
use Encore\Admin\Grid\Displayers\AbstractDisplayer;
|
||||
|
||||
class Popover extends AbstractDisplayer
|
||||
{
|
||||
public function display($placement = 'left')
|
||||
{
|
||||
Admin::script("$('[data-toggle=\"popover\"]').popover()");
|
||||
|
||||
return <<<EOT
|
||||
<button type="button"
|
||||
class="btn btn-secondary"
|
||||
title="popover"
|
||||
data-container="body"
|
||||
data-toggle="popover"
|
||||
data-placement="$placement"
|
||||
data-content="{$this->value}"
|
||||
>
|
||||
弹出提示
|
||||
</button>
|
||||
|
||||
EOT;
|
||||
|
||||
}
|
||||
}
|
||||
```
|
||||
然后在`app/Admin/bootstrap.php`注册扩展类:
|
||||
```php
|
||||
use Encore\Admin\Grid\Column;
|
||||
use App\Admin\Extensions\Popover;
|
||||
|
||||
Column::extend('popover', Popover::class);
|
||||
```
|
||||
然后就能在`model-grid`中使用了:
|
||||
```php
|
||||
$grid->desciption()->popover('right');
|
||||
```
|
||||
|
||||
|
||||
## 帮助方法
|
||||
### 字符串操作
|
||||
如果当前里的输出数据为字符串,那么可以通过链式方法调用`Illuminate\Support\Str`的方法。
|
||||
|
||||
比如有如下一列,显示`title`字段的字符串值:
|
||||
|
||||
```php
|
||||
$grid->title();
|
||||
```
|
||||
|
||||
在`title`列输出的字符串基础上调用`Str::limit()`方法
|
||||
```php
|
||||
$grid->title()->limit(30);
|
||||
```
|
||||
调用方法之后输出的还是字符串,所以可以继续调用`Illuminate\Support\Str`的方法:
|
||||
```php
|
||||
$grid->title()->limit(30)->ucfirst();
|
||||
|
||||
$grid->title()->limit(30)->ucfirst()->substr(1, 10);
|
||||
|
||||
```
|
||||
|
||||
### 数组操作
|
||||
如果当前列输出的是数组,可以直接链式调用`Illuminate\Support\Collection`方法。
|
||||
|
||||
比如`tags`列是从一对多关系取出来的数组数据:
|
||||
```php
|
||||
$grid->tags();
|
||||
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'id' => '16',
|
||||
'name' => 'php',
|
||||
'created_at' => '2016-11-13 14:03:03',
|
||||
'updated_at' => '2016-12-25 04:29:35',
|
||||
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'id' => '17',
|
||||
'name' => 'python',
|
||||
'created_at' => '2016-11-13 14:03:09',
|
||||
'updated_at' => '2016-12-25 04:30:27',
|
||||
),
|
||||
)
|
||||
|
||||
```
|
||||
|
||||
调用`Collection::pluck()`方法取出数组的中的`name`列
|
||||
```php
|
||||
$grid->tags()->pluck('name');
|
||||
|
||||
array (
|
||||
0 => 'php',
|
||||
1 => 'python',
|
||||
),
|
||||
|
||||
```
|
||||
取出`name`列之后输出的还是数组,还能继续调用用`Illuminate\Support\Collection`的方法
|
||||
|
||||
```php
|
||||
$grid->tags()->pluck('name')->map('ucwords');
|
||||
|
||||
array (
|
||||
0 => 'Php',
|
||||
1 => 'Python',
|
||||
),
|
||||
```
|
||||
将数组输出为字符串
|
||||
```php
|
||||
$grid->tags()->pluck('name')->map('ucwords')->implode('-');
|
||||
|
||||
"Php-Python"
|
||||
```
|
||||
|
||||
### 混合使用
|
||||
|
||||
在上面两种类型的方法调用中,只要上一步输出的是确定类型的值,便可以调用类型对应的方法,所以可以很灵活的混合使用。
|
||||
|
||||
比如`images`字段是存储多图片地址数组的JSON格式字符串类型:
|
||||
```php
|
||||
|
||||
$grid->images();
|
||||
|
||||
"['foo.jpg', 'bar.png']"
|
||||
|
||||
// 链式方法调用来显示多图
|
||||
$grid->images()->display(function ($images) {
|
||||
|
||||
return json_decode($images, true);
|
||||
|
||||
})->map(function ($path) {
|
||||
|
||||
return 'http://localhost/images/'. $path;
|
||||
|
||||
})->image();
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
174
vendor/encore/laravel-admin/docs/zh/model-grid-custom-tools.md
vendored
Normal file
174
vendor/encore/laravel-admin/docs/zh/model-grid-custom-tools.md
vendored
Normal file
@@ -0,0 +1,174 @@
|
||||
# 自定义工具
|
||||
|
||||
在`model-grid`的头部默认有`批量删除`和`刷新`两个操作工具,如果有更多的操作需求,`model-grid`提供了自定义工具的功能,下面的示例添加一个性别分类选择的按钮组工具。
|
||||
|
||||
先定义工具类`app/Admin/Extensions/Tools/UserGender.php`:
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Admin\Extensions\Tools;
|
||||
|
||||
use Encore\Admin\Admin;
|
||||
use Encore\Admin\Grid\Tools\AbstractTool;
|
||||
use Illuminate\Support\Facades\Request;
|
||||
|
||||
class UserGender extends AbstractTool
|
||||
{
|
||||
protected function script()
|
||||
{
|
||||
$url = Request::fullUrlWithQuery(['gender' => '_gender_']);
|
||||
|
||||
return <<<EOT
|
||||
|
||||
$('input:radio.user-gender').change(function () {
|
||||
|
||||
var url = "$url".replace('_gender_', $(this).val());
|
||||
|
||||
$.pjax({container:'#pjax-container', url: url });
|
||||
|
||||
});
|
||||
|
||||
EOT;
|
||||
}
|
||||
|
||||
public function render()
|
||||
{
|
||||
Admin::script($this->script());
|
||||
|
||||
$options = [
|
||||
'all' => 'All',
|
||||
'm' => 'Male',
|
||||
'f' => 'Female',
|
||||
];
|
||||
|
||||
return view('admin.tools.gender', compact('options'));
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
视图`admin.tools.gender`文件为`resources/views/admin/tools/gender.blade.php`:
|
||||
```php
|
||||
<div class="btn-group" data-toggle="buttons">
|
||||
@foreach($options as $option => $label)
|
||||
<label class="btn btn-default btn-sm {{ \Request::get('gender', 'all') == $option ? 'active' : '' }}">
|
||||
<input type="radio" class="user-gender" value="{{ $option }}">{{$label}}
|
||||
</label>
|
||||
@endforeach
|
||||
</div>
|
||||
```
|
||||
|
||||
在`model-grid`引入这个工具:
|
||||
```php
|
||||
|
||||
$grid->tools(function ($tools) {
|
||||
$tools->append(new UserGender());
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
在`model-grid`定义中接收到`gender`参数后,做好数据查询就可以了:
|
||||
```php
|
||||
if (in_array(Request::get('gender'), ['m', 'f'])) {
|
||||
$grid->model()->where('gender', Request::get('gender'));
|
||||
}
|
||||
```
|
||||
|
||||
可以参考上面的方式来添加自己的工具。
|
||||
|
||||
## 批量操作
|
||||
|
||||
目前默认实现了批量删除操作的功能,如果要关掉批量删除操作:
|
||||
```php
|
||||
$grid->tools(function ($tools) {
|
||||
$tools->batch(function ($batch) {
|
||||
$batch->disableDelete();
|
||||
});
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
如果要添加自定义的批量操作,可以参考下面的例子。
|
||||
|
||||
下面是扩展一个对文章批量发布的功能:
|
||||
|
||||
先定义操作类`app/Admin/Extensions/Tools/ReleasePost.php`:
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Admin\Extensions\Tools;
|
||||
|
||||
use Encore\Admin\Grid\Tools\BatchAction;
|
||||
|
||||
class ReleasePost extends BatchAction
|
||||
{
|
||||
protected $action;
|
||||
|
||||
public function __construct($action = 1)
|
||||
{
|
||||
$this->action = $action;
|
||||
}
|
||||
|
||||
public function script()
|
||||
{
|
||||
return <<<EOT
|
||||
|
||||
$('{$this->getElementClass()}').on('click', function() {
|
||||
|
||||
$.ajax({
|
||||
method: 'post',
|
||||
url: '{$this->resource}/release',
|
||||
data: {
|
||||
_token:LA.token,
|
||||
ids: selectedRows(),
|
||||
action: {$this->action}
|
||||
},
|
||||
success: function () {
|
||||
$.pjax.reload('#pjax-container');
|
||||
toastr.success('操作成功');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
EOT;
|
||||
|
||||
}
|
||||
}
|
||||
```
|
||||
看代码的实现,通过click操作发送一个post请求,把选中的行数据`id`通过数组的形式传给后端接口,后端接口拿到`id`列表和要修改的状态来更新数据,然后前端刷新页面(pjax reload),并弹出`toastr`提示操作成功。
|
||||
|
||||
在`model-grid`中加入这个批量操作功能:
|
||||
```php
|
||||
$grid->tools(function ($tools) {
|
||||
$tools->batch(function ($batch) {
|
||||
$batch->add('发布文章', new ReleasePost(1));
|
||||
$batch->add('文章下线', new ReleasePost(0));
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
这样批量操作下拉按钮下面就会添加两个操作项,最后一步就是添加一个接口来处理批量操作的请求了,接口代码如下:
|
||||
```php
|
||||
|
||||
class PostController extends Controller
|
||||
{
|
||||
...
|
||||
|
||||
public function release(Request $request)
|
||||
{
|
||||
foreach (Post::find($request->get('ids')) as $post) {
|
||||
$post->released = $request->get('action');
|
||||
$post->save();
|
||||
}
|
||||
}
|
||||
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
然后添加路由指向上面的接口:
|
||||
```php
|
||||
$router->post('posts/release', 'PostController@release');
|
||||
```
|
||||
|
||||
这样整个流程就完成了。
|
||||
121
vendor/encore/laravel-admin/docs/zh/model-grid-data.md
vendored
Normal file
121
vendor/encore/laravel-admin/docs/zh/model-grid-data.md
vendored
Normal file
@@ -0,0 +1,121 @@
|
||||
# 表格数据源
|
||||
|
||||
## 数据来自模型
|
||||
|
||||
如果使用模型来获取数据,那么修改来源数据就非常简单:
|
||||
```php
|
||||
// 添加默认查询条件
|
||||
$grid->model()->where('id', '>', 100);
|
||||
|
||||
// 设置初始排序条件
|
||||
$grid->model()->orderBy('id', 'desc');
|
||||
|
||||
...
|
||||
|
||||
```
|
||||
|
||||
其它查询方法可以参考`eloquent`的查询方法.
|
||||
|
||||
## 数据来自外部API
|
||||
|
||||
如果数据是来自外部的API,需要展示在数据表格中那么可以建立model,然后覆盖掉模型的几个获取数据的方法来实现, 下面的例子用`豆瓣电影`的API获取并展示数据:
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Models\Movie;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Pagination\LengthAwarePaginator;
|
||||
use Illuminate\Support\Facades\Request;
|
||||
|
||||
class InTheater extends Model
|
||||
{
|
||||
public function paginate()
|
||||
{
|
||||
$perPage = Request::get('per_page', 10);
|
||||
|
||||
$page = Request::get('page', 1);
|
||||
|
||||
$start = ($page-1)*$perPage;
|
||||
|
||||
$data = file_get_contents("https://api.douban.com/v2/movie/in_theaters?city=上海&start=$start&count=$perPage");
|
||||
|
||||
$data = json_decode($data, true);
|
||||
|
||||
extract($data);
|
||||
|
||||
$movies = static::hydrate($subjects);
|
||||
|
||||
$paginator = new LengthAwarePaginator($movies, $total, $perPage);
|
||||
|
||||
$paginator->setPath(url()->current());
|
||||
|
||||
return $paginator;
|
||||
}
|
||||
|
||||
public static function with($relations)
|
||||
{
|
||||
return new static;
|
||||
}
|
||||
}
|
||||
```
|
||||
通过覆盖模型的`paginate`和`with`方法获取API数据, 通过`findOrFail`方法来获取单项数据展示在表单中
|
||||
|
||||
同理如果要在form表单中获取或者保存数据那么也可以通过覆盖相应的方法来实现:
|
||||
```php
|
||||
// 获取单项数据展示在form中
|
||||
public function findOrFail($id)
|
||||
{
|
||||
$data = file_get_contents("http://api.douban.com/v2/movie/subject/$id");
|
||||
|
||||
$data = json_decode($data, true);
|
||||
|
||||
return static::newFromBuilder($data);
|
||||
}
|
||||
|
||||
// 保存提交的form数据
|
||||
public function save(array $options = [])
|
||||
{
|
||||
$attributes = $this->getAttributes();
|
||||
|
||||
// save $attributes
|
||||
}
|
||||
```
|
||||
|
||||
## 数据来自复杂SQL查询
|
||||
|
||||
如果来源数据需要执行比较复杂的SQL语句获取,那么有两个办法, 第一个办法就是上面的方法,覆盖掉model的方法实现
|
||||
```php
|
||||
|
||||
public function paginate()
|
||||
{
|
||||
$perPage = Request::get('per_page', 10);
|
||||
|
||||
$page = Request::get('page', 1);
|
||||
|
||||
$start = ($page-1)*$perPage;
|
||||
|
||||
// 运行sql获取数据数组
|
||||
$sql = 'select * from ...';
|
||||
|
||||
$result = DB::select($sql);
|
||||
|
||||
$movies = static::hydrate($result);
|
||||
|
||||
$paginator = new LengthAwarePaginator($movies, $total, $perPage);
|
||||
|
||||
$paginator->setPath(url()->current());
|
||||
|
||||
return $paginator;
|
||||
}
|
||||
|
||||
public static function with($relations)
|
||||
{
|
||||
return new static;
|
||||
}
|
||||
|
||||
|
||||
```
|
||||
|
||||
第二个方式是在数据库中建立视图和model绑定(未测试过,理论上可行)
|
||||
57
vendor/encore/laravel-admin/docs/zh/model-grid-export.md
vendored
Normal file
57
vendor/encore/laravel-admin/docs/zh/model-grid-export.md
vendored
Normal file
@@ -0,0 +1,57 @@
|
||||
数据导出
|
||||
=======
|
||||
|
||||
`model-grid`内置的导出功能只是实现了简单的csv格式文件的导出,如果遇到文件编码问题或者满足不了自己需求的情况,可以按照下面的步骤来自定义导出功能
|
||||
|
||||
本示例用[Laravel-Excel](https://github.com/Maatwebsite/Laravel-Excel)作为excel操作库,当然也可以使用任何其他excel库
|
||||
|
||||
首先安装好它:
|
||||
|
||||
```shell
|
||||
composer require maatwebsite/excel:~2.1.0
|
||||
|
||||
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
|
||||
```
|
||||
|
||||
然后新建自定义导出类,比如`app/Admin/Extensions/ExcelExpoter.php`:
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Admin\Extensions;
|
||||
|
||||
use Encore\Admin\Grid\Exporters\AbstractExporter;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
use Illuminate\Support\Arr;
|
||||
|
||||
class ExcelExpoter extends AbstractExporter
|
||||
{
|
||||
public function export()
|
||||
{
|
||||
Excel::create('Filename', function($excel) {
|
||||
|
||||
$excel->sheet('Sheetname', function($sheet) {
|
||||
|
||||
// 这段逻辑是从表格数据中取出需要导出的字段
|
||||
$rows = collect($this->getData())->map(function ($item) {
|
||||
return Arr::only($item, ['id', 'title', 'content', 'rate', 'keywords']);
|
||||
});
|
||||
|
||||
$sheet->rows($rows);
|
||||
|
||||
});
|
||||
|
||||
})->export('xls');
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
然后在`model-grid`中使用这个导出类:
|
||||
```php
|
||||
|
||||
use App\Admin\Extensions\ExcelExpoter;
|
||||
|
||||
$grid->exporter(new ExcelExpoter());
|
||||
|
||||
```
|
||||
|
||||
有关更多`Laravel-Excel`的使用方法,参考[laravel-excel/docs](http://www.maatwebsite.nl/laravel-excel/docs)
|
||||
33
vendor/encore/laravel-admin/docs/zh/model-grid-exporter.md
vendored
Normal file
33
vendor/encore/laravel-admin/docs/zh/model-grid-exporter.md
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
# 自定义导出
|
||||
|
||||
laravel-admin的数据表格默认支持导出csv文件,
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Admin\Extensions;
|
||||
|
||||
use Encore\Admin\Grid\Exporters\AbstractExporter;
|
||||
|
||||
class CustomExporter extends AbstractExporter
|
||||
{
|
||||
public function export()
|
||||
{
|
||||
$filename = $this->getTable().'.csv';
|
||||
|
||||
$data = $this->getData();
|
||||
|
||||
$output = '';
|
||||
|
||||
$headers = [
|
||||
'Content-Encoding' => 'UTF-8',
|
||||
'Content-Type' => 'text/csv;charset=UTF-8',
|
||||
'Content-Disposition' => "attachment; filename=\"$filename\"",
|
||||
];
|
||||
|
||||
response(rtrim($output, "\n"), 200, $headers)->send();
|
||||
|
||||
exit;
|
||||
}
|
||||
}
|
||||
```
|
||||
242
vendor/encore/laravel-admin/docs/zh/model-grid-filters.md
vendored
Normal file
242
vendor/encore/laravel-admin/docs/zh/model-grid-filters.md
vendored
Normal file
@@ -0,0 +1,242 @@
|
||||
# 数据查询过滤
|
||||
|
||||
`model-grid`提供了一系列的方法实现表格数据的查询过滤:
|
||||
|
||||
```php
|
||||
$grid->filter(function($filter){
|
||||
|
||||
// 去掉默认的id过滤器
|
||||
$filter->disableIdFilter();
|
||||
|
||||
// 自定义id过滤器,在去掉默认id过滤器后必须调用 setId 方法,
|
||||
// 并设置一个和主键不同的值,自定义的id过滤器才会显示。
|
||||
$filter->equal('id', '产品序列号')->setId('product_id');
|
||||
|
||||
// 在这里添加字段过滤器
|
||||
$filter->like('name', 'name');
|
||||
...
|
||||
|
||||
});
|
||||
|
||||
```
|
||||
## 查询类型
|
||||
|
||||
目前支持的过滤类型有下面这些:
|
||||
|
||||
### equal
|
||||
`sql: ... WHERE `column` = "$input"`:
|
||||
```php
|
||||
$filter->equal('column', $label);
|
||||
```
|
||||
|
||||
### not equal
|
||||
`sql: ... WHERE `column` != "$input"`:
|
||||
```php
|
||||
$filter->notEqual('column', $label);
|
||||
```
|
||||
|
||||
### like
|
||||
`sql: ... WHERE `column` LIKE "%$input%"`:
|
||||
```php
|
||||
$filter->like('column', $label);
|
||||
```
|
||||
|
||||
### ilike
|
||||
`sql: ... WHERE `column` ILIKE "%$input%"`:
|
||||
```php
|
||||
$filter->ilike('column', $label);
|
||||
```
|
||||
|
||||
### 大于
|
||||
`sql: ... WHERE `column` > "$input"`:
|
||||
```php
|
||||
$filter->gt('column', $label);
|
||||
```
|
||||
|
||||
### 小于
|
||||
`sql: ... WHERE `column` < "$input"`:
|
||||
```php
|
||||
$filter->lt('column', $label);
|
||||
```
|
||||
|
||||
### between
|
||||
`sql: ... WHERE `column` BETWEEN "$start" AND "$end"`:
|
||||
```php
|
||||
$filter->between('column', $label);
|
||||
|
||||
// 设置datetime类型
|
||||
$filter->between('column', $label)->datetime();
|
||||
|
||||
// 设置time类型
|
||||
$filter->between('column', $label)->time();
|
||||
```
|
||||
|
||||
### in
|
||||
`sql: ... WHERE `column` in (...$inputs)`:
|
||||
```php
|
||||
$filter->in('column', $label)->multipleSelect(['key' => 'value']);
|
||||
```
|
||||
|
||||
### notIn
|
||||
`sql: ... WHERE `column` not in (...$inputs)`:
|
||||
```php
|
||||
$filter->notIn('column', $label)->multipleSelect(['key' => 'value']);
|
||||
```
|
||||
|
||||
### date
|
||||
`sql: ... WHERE DATE(`column`) = "$input"`:
|
||||
```php
|
||||
$filter->date('column', $label);
|
||||
```
|
||||
|
||||
### day
|
||||
`sql: ... WHERE DAY(`column`) = "$input"`:
|
||||
```php
|
||||
$filter->day('column', $label);
|
||||
```
|
||||
|
||||
### month
|
||||
`sql: ... WHERE MONTH(`column`) = "$input"`:
|
||||
```php
|
||||
$filter->month('column', $label);
|
||||
```
|
||||
|
||||
### year
|
||||
`sql: ... WHERE YEAR(`column`) = "$input"`:
|
||||
```php
|
||||
$filter->year('column', $label);
|
||||
```
|
||||
|
||||
### where
|
||||
|
||||
可以用where来构建比较复杂的查询过滤
|
||||
|
||||
`sql: ... WHERE `title` LIKE "%$input" OR `content` LIKE "%$input"`:
|
||||
```php
|
||||
$filter->where(function ($query) {
|
||||
|
||||
$query->where('title', 'like', "%{$this->input}%")
|
||||
->orWhere('content', 'like', "%{$this->input}%");
|
||||
|
||||
}, 'Text');
|
||||
```
|
||||
|
||||
`sql: ... WHERE `rate` >= 6 AND `created_at` = {$input}`:
|
||||
```php
|
||||
$filter->where(function ($query) {
|
||||
|
||||
$query->whereRaw("`rate` >= 6 AND `created_at` = {$this->input}");
|
||||
|
||||
}, 'Text');
|
||||
```
|
||||
|
||||
关系查询,查询对应关系`profile`的字段:
|
||||
```php
|
||||
$filter->where(function ($query) {
|
||||
|
||||
$query->whereHas('profile', function ($query) {
|
||||
$query->where('address', 'like', "%{$this->input}%")->orWhere('email', 'like', "%{$this->input}%");
|
||||
});
|
||||
|
||||
}, '地址或手机号');
|
||||
```
|
||||
|
||||
## 表单类型
|
||||
|
||||
### text
|
||||
|
||||
表单类型默认是text input,可以设置placeholder:
|
||||
|
||||
```php
|
||||
$filter->equal('column')->placeholder('请输入。。。');
|
||||
```
|
||||
|
||||
也可以通过下面的一些方法来限制用户输入格式:
|
||||
|
||||
```php
|
||||
$filter->equal('column')->url();
|
||||
|
||||
$filter->equal('column')->email();
|
||||
|
||||
$filter->equal('column')->integer();
|
||||
|
||||
$filter->equal('column')->ip();
|
||||
|
||||
$filter->equal('column')->mac();
|
||||
|
||||
$filter->equal('column')->mobile();
|
||||
|
||||
// $options 参考 https://github.com/RobinHerbots/Inputmask/blob/4.x/README_numeric.md
|
||||
$filter->equal('column')->decimal($options = []);
|
||||
|
||||
// $options 参考 https://github.com/RobinHerbots/Inputmask/blob/4.x/README_numeric.md
|
||||
$filter->equal('column')->currency($options = []);
|
||||
|
||||
// $options 参考 https://github.com/RobinHerbots/Inputmask/blob/4.x/README_numeric.md
|
||||
$filter->equal('column')->percentage($options = []);
|
||||
|
||||
// $options 参考 https://github.com/RobinHerbots/Inputmask, $icon为input前面的图标
|
||||
$filter->equal('column')->inputmask($options = [], $icon = 'pencil');
|
||||
```
|
||||
|
||||
### select
|
||||
```php
|
||||
$filter->equal('column')->select(['key' => 'value'...]);
|
||||
|
||||
// 或者从api获取数据,api的格式参考model-form的select组件
|
||||
$filter->equal('column')->select('api/users');
|
||||
```
|
||||
|
||||
### multipleSelect
|
||||
一般用来配合`in`和`notIn`两个需要查询数组的查询类型使用,也可以在`where`类型的查询中使用:
|
||||
```php
|
||||
$filter->in('column')->multipleSelect(['key' => 'value'...]);
|
||||
|
||||
// 或者从api获取数据,api的格式参考model-form的multipleSelect组件
|
||||
$filter->in('column')->multipleSelect('api/users');
|
||||
```
|
||||
|
||||
### radio
|
||||
比较常见的场景是选择分类
|
||||
|
||||
```php
|
||||
$filter->equal('released')->radio([
|
||||
'' => 'All',
|
||||
0 => 'Unreleased',
|
||||
1 => 'Released',
|
||||
]);
|
||||
```
|
||||
|
||||
### checkbox
|
||||
比较常见的场景是配合`whereIn`来做范围筛选
|
||||
|
||||
```php
|
||||
$filter->in('gender')->checkbox([
|
||||
'm' => 'Male',
|
||||
'f' => 'Female',
|
||||
]);
|
||||
```
|
||||
|
||||
### datetime
|
||||
|
||||
通过日期时间组件来查询,`$options`的参数和值参考[bootstrap-datetimepicker](http://eonasdan.github.io/bootstrap-datetimepicker/Options/)
|
||||
|
||||
```php
|
||||
$filter->equal('column')->datetime($options);
|
||||
|
||||
// `date()` 相当于 `datetime(['format' => 'YYYY-MM-DD'])`
|
||||
$filter->equal('column')->date();
|
||||
|
||||
// `time()` 相当于 `datetime(['format' => 'HH:mm:ss'])`
|
||||
$filter->equal('column')->time();
|
||||
|
||||
// `day()` 相当于 `datetime(['format' => 'DD'])`
|
||||
$filter->equal('column')->day();
|
||||
|
||||
// `month()` 相当于 `datetime(['format' => 'MM'])`
|
||||
$filter->equal('column')->month();
|
||||
|
||||
// `year()` 相当于 `datetime(['format' => 'YYYY'])`
|
||||
$filter->equal('column')->year();
|
||||
|
||||
```
|
||||
404
vendor/encore/laravel-admin/docs/zh/model-grid.md
vendored
Normal file
404
vendor/encore/laravel-admin/docs/zh/model-grid.md
vendored
Normal file
@@ -0,0 +1,404 @@
|
||||
# 基于数据模型的表格
|
||||
|
||||
`Encore\Admin\Grid`类用于生成基于数据模型的表格,先来个例子,数据库中有`movies`表
|
||||
|
||||
```sql
|
||||
CREATE TABLE `movies` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`director` int(10) unsigned NOT NULL,
|
||||
`describe` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`rate` tinyint unsigned NOT NULL,
|
||||
`released` enum(0, 1),
|
||||
`release_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
|
||||
```
|
||||
|
||||
对应的数据模型为`App\Models\Movie`,下面的代码可以生成表`movies`的数据表格:
|
||||
|
||||
```php
|
||||
|
||||
use App\Models\Movie;
|
||||
use Encore\Admin\Grid;
|
||||
use Encore\Admin\Facades\Admin;
|
||||
|
||||
$grid = Admin::grid(Movie::class, function(Grid $grid){
|
||||
|
||||
// 第一列显示id字段,并将这一列设置为可排序列
|
||||
$grid->id('ID')->sortable();
|
||||
|
||||
// 第二列显示title字段,由于title字段名和Grid对象的title方法冲突,所以用Grid的column()方法代替
|
||||
$grid->column('title');
|
||||
|
||||
// 第三列显示director字段,通过display($callback)方法设置这一列的显示内容为users表中对应的用户名
|
||||
$grid->director()->display(function($userId) {
|
||||
return User::find($userId)->name;
|
||||
});
|
||||
|
||||
// 第四列显示为describe字段
|
||||
$grid->describe();
|
||||
|
||||
// 第五列显示为rate字段
|
||||
$grid->rate();
|
||||
|
||||
// 第六列显示released字段,通过display($callback)方法来格式化显示输出
|
||||
$grid->released('上映?')->display(function ($released) {
|
||||
return $released ? '是' : '否';
|
||||
});
|
||||
|
||||
// 下面为三个时间字段的列显示
|
||||
$grid->release_at();
|
||||
$grid->created_at();
|
||||
$grid->updated_at();
|
||||
|
||||
// filter($callback)方法用来设置表格的简单搜索框
|
||||
$grid->filter(function ($filter) {
|
||||
|
||||
// 设置created_at字段的范围查询
|
||||
$filter->between('created_at', 'Created Time')->datetime();
|
||||
});
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
## 基本使用方法
|
||||
|
||||
#### 添加列
|
||||
```php
|
||||
|
||||
// 直接通过字段名`username`添加列
|
||||
$grid->username('用户名');
|
||||
|
||||
// 效果和上面一样
|
||||
$grid->column('username', '用户名');
|
||||
|
||||
// 添加多列
|
||||
$grid->columns('email', 'username' ...);
|
||||
```
|
||||
|
||||
#### 修改来源数据
|
||||
```php
|
||||
$grid->model()->where('id', '>', 100);
|
||||
|
||||
$grid->model()->orderBy('id', 'desc');
|
||||
|
||||
$grid->model()->take(100);
|
||||
|
||||
...
|
||||
|
||||
```
|
||||
|
||||
其它查询方法可以参考`eloquent`的查询方法.
|
||||
|
||||
#### 设置每页显示行数
|
||||
|
||||
```php
|
||||
// 默认为每页20条
|
||||
$grid->paginate(15);
|
||||
```
|
||||
|
||||
#### 修改显示输出
|
||||
|
||||
|
||||
```php
|
||||
use Illuminate\Support\Str;
|
||||
$grid->text()->display(function($text) {
|
||||
return Str::limit($text, 30, '...');
|
||||
});
|
||||
|
||||
$grid->name()->display(function ($name) {
|
||||
return "<span class='label'>$name</span>";
|
||||
});
|
||||
|
||||
$grid->email()->display(function ($email) {
|
||||
return "mailto:$email";
|
||||
});
|
||||
|
||||
// 添加不存在的字段
|
||||
$grid->column('column_not_in_table')->display(function () {
|
||||
return 'blablabla....';
|
||||
});
|
||||
```
|
||||
|
||||
`display()`方法接收的匿名函数绑定了当前行的数据对象,可以在里面调用当前行的其它字段数据
|
||||
|
||||
```php
|
||||
$grid->first_name();
|
||||
$grid->last_name();
|
||||
|
||||
// 不存的字段列
|
||||
$grid->column('full_name')->display(function () {
|
||||
return $this->first_name.' '.$this->last_name;
|
||||
});
|
||||
```
|
||||
|
||||
#### 禁用创建按钮
|
||||
```php
|
||||
$grid->disableCreateButton();
|
||||
```
|
||||
|
||||
#### 禁用分页条
|
||||
```php
|
||||
$grid->disablePagination();
|
||||
```
|
||||
|
||||
#### 禁用查询过滤器
|
||||
```php
|
||||
$grid->disableFilter();
|
||||
```
|
||||
|
||||
#### 禁用导出数据按钮
|
||||
```php
|
||||
$grid->disableExport();
|
||||
```
|
||||
|
||||
#### 禁用行选择checkbox
|
||||
```php
|
||||
$grid->disableRowSelector();
|
||||
```
|
||||
|
||||
#### 禁用行操作列
|
||||
```php
|
||||
$grid->disableActions();
|
||||
```
|
||||
|
||||
#### 设置分页选择器选项
|
||||
```php
|
||||
$grid->perPages([10, 20, 30, 40, 50]);
|
||||
```
|
||||
|
||||
## 关联模型
|
||||
|
||||
|
||||
### 一对一
|
||||
`users`表和`profiles`表通过`profiles.user_id`字段生成一对一关联
|
||||
|
||||
```sql
|
||||
|
||||
CREATE TABLE `users` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
|
||||
CREATE TABLE `profiles` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`user_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`age` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`gender` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
```
|
||||
|
||||
对应的数据模分别为:
|
||||
|
||||
```php
|
||||
|
||||
class User extends Model
|
||||
{
|
||||
public function profile()
|
||||
{
|
||||
return $this->hasOne(Profile::class);
|
||||
}
|
||||
}
|
||||
|
||||
class Profile extends Model
|
||||
{
|
||||
public function user()
|
||||
{
|
||||
return $this->belongsTo(User::class);
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
通过下面的代码可以关联在一个grid里面:
|
||||
|
||||
```php
|
||||
Admin::grid(User::class, function (Grid $grid) {
|
||||
|
||||
$grid->id('ID')->sortable();
|
||||
|
||||
$grid->name();
|
||||
$grid->email();
|
||||
|
||||
$grid->column('profile.age');
|
||||
$grid->column('profile.gender');
|
||||
|
||||
//or
|
||||
$grid->profile()->age();
|
||||
$grid->profile()->gender();
|
||||
|
||||
$grid->created_at();
|
||||
$grid->updated_at();
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
### 一对多
|
||||
|
||||
`posts`表和`comments`表通过`comments.post_id`字段生成一对多关联
|
||||
|
||||
```sql
|
||||
|
||||
CREATE TABLE `posts` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`content` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
|
||||
CREATE TABLE `comments` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`post_id` int(10) unsigned NOT NULL,
|
||||
`content` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
```
|
||||
|
||||
对应的数据模分别为:
|
||||
|
||||
```php
|
||||
|
||||
class Post extends Model
|
||||
{
|
||||
public function comments()
|
||||
{
|
||||
return $this->hasMany(Comment::class);
|
||||
}
|
||||
}
|
||||
|
||||
class Comment extends Model
|
||||
{
|
||||
public function post()
|
||||
{
|
||||
return $this->belongsTo(Post::class);
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
通过下面的代码可以让两个模型在grid里面互相关联:
|
||||
|
||||
```php
|
||||
|
||||
return Admin::grid(Post::class, function (Grid $grid) {
|
||||
$grid->id('id')->sortable();
|
||||
$grid->title();
|
||||
$grid->content();
|
||||
|
||||
$grid->comments('评论数')->display(function ($comments) {
|
||||
$count = count($comments);
|
||||
return "<span class='label label-warning'>{$count}</span>";
|
||||
});
|
||||
|
||||
$grid->created_at();
|
||||
$grid->updated_at();
|
||||
});
|
||||
|
||||
|
||||
return Admin::grid(Comment::class, function (Grid $grid) {
|
||||
$grid->id('id');
|
||||
$grid->post()->title();
|
||||
$grid->content();
|
||||
|
||||
$grid->created_at()->sortable();
|
||||
$grid->updated_at();
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
### 多对多
|
||||
|
||||
`users`和`roles`表通过中间表`role_users`产生多对多关系
|
||||
|
||||
```sql
|
||||
|
||||
CREATE TABLE `users` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`username` varchar(190) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`password` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`created_at` timestamp NULL DEFAULT NULL,
|
||||
`updated_at` timestamp NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `users_username_unique` (`username`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
|
||||
|
||||
CREATE TABLE `roles` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`slug` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`created_at` timestamp NULL DEFAULT NULL,
|
||||
`updated_at` timestamp NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `roles_name_unique` (`name`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
|
||||
|
||||
CREATE TABLE `role_users` (
|
||||
`role_id` int(11) NOT NULL,
|
||||
`user_id` int(11) NOT NULL,
|
||||
`created_at` timestamp NULL DEFAULT NULL,
|
||||
`updated_at` timestamp NULL DEFAULT NULL,
|
||||
KEY `role_users_role_id_user_id_index` (`role_id`,`user_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
|
||||
```
|
||||
|
||||
对应的数据模分别为:
|
||||
|
||||
```php
|
||||
|
||||
class User extends Model
|
||||
{
|
||||
public function roles()
|
||||
{
|
||||
return $this->belongsToMany(Role::class);
|
||||
}
|
||||
}
|
||||
|
||||
class Role extends Model
|
||||
{
|
||||
public function users()
|
||||
{
|
||||
return $this->belongsToMany(User::class);
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
通过下面的代码可以让两个模型在grid里面互相关联:
|
||||
|
||||
|
||||
```php
|
||||
return Admin::grid(User::class, function (Grid $grid) {
|
||||
$grid->id('ID')->sortable();
|
||||
$grid->username();
|
||||
$grid->name();
|
||||
|
||||
$grid->roles()->display(function ($roles) {
|
||||
|
||||
$roles = array_map(function ($role) {
|
||||
return "<span class='label label-success'>{$role['name']}</span>";
|
||||
}, $roles);
|
||||
|
||||
return join(' ', $roles);
|
||||
});
|
||||
|
||||
$grid->created_at();
|
||||
$grid->updated_at();
|
||||
});
|
||||
|
||||
```
|
||||
118
vendor/encore/laravel-admin/docs/zh/model-tree.md
vendored
Normal file
118
vendor/encore/laravel-admin/docs/zh/model-tree.md
vendored
Normal file
@@ -0,0 +1,118 @@
|
||||
# 模型树
|
||||
|
||||
可以通过`model-tree`来实现一个树状组件,可以用拖拽的方式实现数据的层级、排序等操作,下面是基本的用法.
|
||||
|
||||
## 表结构和模型
|
||||
要使用`model-tree`,要遵守约定的表结构:
|
||||
```sql
|
||||
CREATE TABLE `demo_categories` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`parent_id` int(11) NOT NULL DEFAULT '0',
|
||||
`order` int(11) NOT NULL DEFAULT '0',
|
||||
`title` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
|
||||
```
|
||||
上面的表格结构里面有三个必要的字段`parent_id`、`order`、`title`,其它字段没有要求。
|
||||
|
||||
对应的模型为`app/Models/Category.php`:
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Models\Demo;
|
||||
|
||||
use Encore\Admin\Traits\AdminBuilder;
|
||||
use Encore\Admin\Traits\ModelTree;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Category extends Model
|
||||
{
|
||||
use ModelTree, AdminBuilder;
|
||||
|
||||
protected $table = 'demo_categories';
|
||||
}
|
||||
```
|
||||
表结构中的三个字段`parent_id`、`order`、`title`的字段名也是可以修改的:
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Models\Demo;
|
||||
|
||||
use Encore\Admin\Traits\AdminBuilder;
|
||||
use Encore\Admin\Traits\ModelTree;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Category extends Model
|
||||
{
|
||||
use ModelTree, AdminBuilder;
|
||||
|
||||
protected $table = 'demo_categories';
|
||||
|
||||
public function __construct(array $attributes = [])
|
||||
{
|
||||
parent::__construct($attributes);
|
||||
|
||||
$this->setParentColumn('pid');
|
||||
$this->setOrderColumn('sort');
|
||||
$this->setTitleColumn('name');
|
||||
}
|
||||
}
|
||||
```
|
||||
## 使用方法
|
||||
然后就是在页面中使用`model-tree`了:
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Admin\Controllers\Demo;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Category;
|
||||
use Encore\Admin\Form;
|
||||
use Encore\Admin\Facades\Admin;
|
||||
use Encore\Admin\Layout\Content;
|
||||
use Encore\Admin\Controllers\ModelForm;
|
||||
use Encore\Admin\Tree;
|
||||
|
||||
class CategoryController extends Controller
|
||||
{
|
||||
use ModelForm;
|
||||
|
||||
public function index()
|
||||
{
|
||||
return Admin::content(function (Content $content) {
|
||||
$content->header('树状模型');
|
||||
$content->body(Category::tree());
|
||||
});
|
||||
}
|
||||
}
|
||||
```
|
||||
可以通过下面的方式来修改行数据的显示:
|
||||
```php
|
||||
Category::tree(function ($tree) {
|
||||
$tree->branch(function ($branch) {
|
||||
$src = config('admin.upload.host') . '/' . $branch['logo'] ;
|
||||
$logo = "<img src='$src' style='max-width:30px;max-height:30px' class='img'/>";
|
||||
|
||||
return "{$branch['id']} - {$branch['title']} $logo";
|
||||
});
|
||||
})
|
||||
```
|
||||
在回调函数中返回的字符串类型数据,就是在树状组件中的每一行的显示内容,`$branch`参数是当前行的数据数组。
|
||||
|
||||
如果要修改模型的查询,用下面的方式
|
||||
```php
|
||||
|
||||
Category::tree(function ($tree) {
|
||||
|
||||
$tree->query(function ($model) {
|
||||
return $model->where('type', 1);
|
||||
});
|
||||
|
||||
})
|
||||
```
|
||||
|
||||
```
|
||||
|
||||
|
||||
141
vendor/encore/laravel-admin/docs/zh/permission.md
vendored
Normal file
141
vendor/encore/laravel-admin/docs/zh/permission.md
vendored
Normal file
@@ -0,0 +1,141 @@
|
||||
# 权限控制
|
||||
|
||||
`laravel-admin`已经内置了`RBAC`权限控制模块,展开左侧边栏的`Auth`,下面有用户、角色、权限三项的管理面板,权限控制的使用如下:
|
||||
|
||||
## 路由控制
|
||||
|
||||
在`laravel-admin 1.5`中,权限和路由是绑定在一起的,在编辑权限页面里面设置当前权限能访问的路由,在`HTTP方法`select框中选择访问路由的方法,在`HTTP路径`textarea中填写能访问的路径。
|
||||
|
||||
比如要添加一个权限,该权限可以以`GET`方式访问路径`/admin/users`,那么`HTTP方法`选择`GET`,`HTTP路径`填写`/users`。
|
||||
|
||||
如果要访问前缀是`/admin/users`的所有路径,那么`HTTP路径`填写`/users*`,如果权限包括多个访问路径,换行填写每条路径。
|
||||
|
||||
## 页面控制
|
||||
|
||||
如果你要在页面中控制用户的权限,可以参考下面的例子
|
||||
|
||||
### 场景1
|
||||
|
||||
比如现在有一个场景,对文章发布模块做权限管理,以创建文章为例
|
||||
|
||||
首先创建一项权限,进入`http://localhost/admin/auth/permissions`,权限标识(slug)填写`create-post`,权限名称填写`创建文章`,这样权限就创建好了。
|
||||
第二步可以把这个权限直接附加给个人或者角色,在用户编辑页面可以直接把上面创建好的权限附加给当前编辑用户,也可以在编辑角色页面附加给某个角色。
|
||||
第三步,在创建文章控制器里面添加控制代码:
|
||||
```php
|
||||
use Encore\Admin\Auth\Permission;
|
||||
|
||||
class PostController extends Controller
|
||||
{
|
||||
public function create()
|
||||
{
|
||||
// 检查权限,有create-post权限的用户或者角色可以访问创建文章页面
|
||||
Permission::check('create-post');
|
||||
}
|
||||
}
|
||||
```
|
||||
这样就完成了一个页面的权限控制。
|
||||
|
||||
### 场景2
|
||||
|
||||
如果你要在表格中控制用户对元素的显示,那么需要先定义两个权限,比如权限标示`delete-image`、和`view-title-column`分别用来控制有删除图片的权限和显示某一列的权限,把这两个权限赋给你设置的角色,然后在grid中加入代码:
|
||||
```php
|
||||
$grid->actions(function ($actions) {
|
||||
|
||||
// 没有`delete-image`权限的角色不显示删除按钮
|
||||
if (!Admin::user()->can('delete-image')) {
|
||||
$actions->disableDelete();
|
||||
}
|
||||
});
|
||||
|
||||
// 只有具有`view-title-column`权限的用户才能显示`title`这一列
|
||||
if (Admin::user()->can('view-title-column')) {
|
||||
$grid->column('title');
|
||||
}
|
||||
```
|
||||
|
||||
## 相关方法
|
||||
|
||||
获取当前用户对象
|
||||
```php
|
||||
Admin::user();
|
||||
```
|
||||
|
||||
获取当前用户id
|
||||
```php
|
||||
Admin::user()->id;
|
||||
```
|
||||
|
||||
获取用户角色
|
||||
```php
|
||||
Admin::user()->roles;
|
||||
```
|
||||
|
||||
获取用户的权限
|
||||
```php
|
||||
Admin::user()->permissions;
|
||||
```
|
||||
|
||||
用户是否某个角色
|
||||
```php
|
||||
Admin::user()->isRole('developer');
|
||||
```
|
||||
|
||||
是否有某个权限
|
||||
```php
|
||||
Admin::user()->can('create-post');
|
||||
```
|
||||
|
||||
是否没有某个权限
|
||||
```php
|
||||
Admin::user()->cannot('delete-post');
|
||||
```
|
||||
|
||||
是否是超级管理员
|
||||
```php
|
||||
Admin::user()->isAdministrator();
|
||||
```
|
||||
|
||||
是否是其中的角色
|
||||
```php
|
||||
Admin::user()->inRoles(['editor', 'developer']);
|
||||
```
|
||||
|
||||
## 权限中间件
|
||||
|
||||
可以在路由配置上结合权限中间件来控制路由的权限
|
||||
|
||||
```php
|
||||
|
||||
// 允许administrator、editor两个角色访问group里面的路由
|
||||
Route::group([
|
||||
'middleware' => 'admin.permission:allow,administrator,editor',
|
||||
], function ($router) {
|
||||
|
||||
$router->resource('users', UserController::class);
|
||||
...
|
||||
|
||||
});
|
||||
|
||||
// 禁止developer、operator两个角色访问group里面的路由
|
||||
Route::group([
|
||||
'middleware' => 'admin.permission:deny,developer,operator',
|
||||
], function ($router) {
|
||||
|
||||
$router->resource('users', UserController::class);
|
||||
...
|
||||
|
||||
});
|
||||
|
||||
// 有edit-post、create-post、delete-post三个权限的用户可以访问group里面的路由
|
||||
Route::group([
|
||||
'middleware' => 'admin.permission:check,edit-post,create-post,delete-post',
|
||||
], function ($router) {
|
||||
|
||||
$router->resource('posts', PostController::class);
|
||||
...
|
||||
|
||||
});
|
||||
```
|
||||
|
||||
权限中间件和其它中间件使用方法一致。
|
||||
|
||||
59
vendor/encore/laravel-admin/docs/zh/qa.md
vendored
Normal file
59
vendor/encore/laravel-admin/docs/zh/qa.md
vendored
Normal file
@@ -0,0 +1,59 @@
|
||||
# 常见问题汇总
|
||||
|
||||
## 重写内置视图
|
||||
|
||||
如果有需要自己修改view,但是不方便直接修改`laravel-admin`的情况,可以用下面的办法解决
|
||||
|
||||
复制`vendor/encore/laravel-admin/views`到项目的`resources/views/admin`,然后在`app/Admin/bootstrap.php`文件中加入代码:
|
||||
|
||||
```php
|
||||
app('view')->prependNamespace('admin', resource_path('views/admin'));
|
||||
```
|
||||
|
||||
这样就用`resources/views/admin`下的视图覆盖了`laravel-admin`的视图,要注意的问题是,更新`laravel-admin`的时候,如果遇到视图方面的问题,需要重新复制`vendor/encore/laravel-admin/views`到项目的`resources/views/admin`中,注意备份原来已经修改过的视图。
|
||||
|
||||
## 设置语言
|
||||
|
||||
完成安装之后,默认语言为英文(en),如果要使用中文,打开`config/app.php`,将`locale`设置为`zh-CN`即可。
|
||||
|
||||
## 关于扩展自定义组件
|
||||
|
||||
`laravel-admin`默认引用了大量前端资源,如果有网络问题或者有不需要使用的组件,可以参考[form组件管理](/zh/model-form-field-management.md)将其移除。
|
||||
|
||||
关于富文本编辑器,由于静态资源包文件普遍太大,所以`laravel-admin`默认通过cdn的方式引用`ckeditor`,建议大家根据自己的需求扩展编辑器,自行配置。
|
||||
|
||||
## 关于前端资源问题
|
||||
|
||||
如果需要使用自己的前端文件,可以在`app/Admin/bootstrap.php`中引入:
|
||||
|
||||
```php
|
||||
Admin::css('path/to/your/css');
|
||||
Admin::css('path/to/your/js');
|
||||
```
|
||||
|
||||
|
||||
## 重写登陆页面和登陆逻辑
|
||||
|
||||
在路由文件`app/Admin/routes.php`中,覆盖掉登陆页面和登陆逻辑的路由,即可实现自定义的功能
|
||||
|
||||
```php
|
||||
Route::group([
|
||||
'prefix' => config('admin.prefix'),
|
||||
'namespace' => Admin::controllerNamespace(),
|
||||
'middleware' => ['web', 'admin'],
|
||||
], function (Router $router) {
|
||||
|
||||
$router->get('auth/login', 'AuthController@getLogin');
|
||||
$router->post('auth/login', 'AuthController@postLogin');
|
||||
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
在自定义的路由器AuthController中的`getLogin`、`postLogin`方法里分别实现自己的登陆页面和登陆逻辑。
|
||||
|
||||
参考控制器文件[AuthController.php](https://github.com/z-song/laravel-admin/blob/master/src/Controllers/AuthController.php),视图文件[login.blade.php](https://github.com/z-song/laravel-admin/blob/master/views/login.blade.php)
|
||||
|
||||
## 更新静态资源
|
||||
|
||||
如果遇到更新之后,部分组件不能正常使用,那有可能是`laravel-admin`自带的静态资源有更新了,需要运行命令`php artisan vendor:publish --tag=laravel-admin-assets --force`来重新发布前端资源,发布之后不要忘记清理浏览器缓存.
|
||||
63
vendor/encore/laravel-admin/docs/zh/quick-start.md
vendored
Normal file
63
vendor/encore/laravel-admin/docs/zh/quick-start.md
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
# 快速开始
|
||||
|
||||
## 数据表结构
|
||||
用`Laravel`自带的`users`表举例,表结构为:
|
||||
```sql
|
||||
CREATE TABLE `users` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`password` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`remember_token` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `users_email_unique` (`email`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
|
||||
```
|
||||
对应的数据模型为文件 `App\User.php`
|
||||
|
||||
`laravel-admin`可以通过使用以下几步来快速生成`users`表的`CURD`操作页面:
|
||||
|
||||
## 添加路由器
|
||||
|
||||
使用下面的命令来创建一个对应`App\User`模型的路由器
|
||||
```php
|
||||
php artisan admin:make UserController --model=App\\User
|
||||
|
||||
// 在windows系统中
|
||||
php artisan admin:make UserController --model=App\User
|
||||
```
|
||||
|
||||
上面的命令会创建路由器文件`app/Admin/Controllers/UserController.php`.
|
||||
|
||||
## 添加路由配置
|
||||
|
||||
在`laravel-admin`的路由配置文件`app/Admin/routes.php`里添加一行:
|
||||
```
|
||||
$router->resource('users', UserController::class);
|
||||
```
|
||||
|
||||
## 添加左侧菜单栏连接
|
||||
|
||||
打开`http://localhost:8000/admin/auth/menu`,添加对应的menu, 然后就能在后台管理页面的左侧边栏看到用户管理页面的链接入口了。
|
||||
|
||||
> 其中`uri`填写不包含路由前缀的的路径部分,比如完整路径是`http://localhost:8000/admin/demo/users`, 那么就填`demo/users`,如果要添加外部链接,只要填写完整的url即可,比如`http://laravel-admin.org/`.
|
||||
|
||||
### 菜单翻译
|
||||
|
||||
在您的语言文件的menu_titles索引中追加菜单标题。
|
||||
例如“工作单位”标题:
|
||||
|
||||
在resources/lang/es/admin.php中
|
||||
```php
|
||||
...
|
||||
// 用_小写并用_替换空格
|
||||
'menu_titles' => [
|
||||
'work_units' => 'Unidades de trabajo'
|
||||
],
|
||||
```
|
||||
|
||||
## 创建表格表单
|
||||
|
||||
剩下的工作就是构建数据表格和表单了,打开 `app/Admin/Contollers/UserController.php`,找到`form()`和`grid()`方法,然添加构建代码更多详细使用请查看[model-grid](/zh/model-grid.md)和[model-form](/zh/model-form.md)。
|
||||
10
vendor/encore/laravel-admin/docs/zh/upgrade.md
vendored
Normal file
10
vendor/encore/laravel-admin/docs/zh/upgrade.md
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
# 升级注意事项
|
||||
|
||||
因为laravel-admin 1.5的内置表结构有修改,所以建议大家重新安装laravel 5.5和laravel-admin 1.5,然后再将代码迁移过来
|
||||
|
||||
代码迁移需要注意的事项:
|
||||
|
||||
- 表结构有修改 请参考 [tables.php](https://github.com/z-song/laravel-admin/blob/master/database/migrations/2016_01_04_173148_create_admin_tables.php)
|
||||
- 路由文件结构有修改 请参考 [routes.stub](https://github.com/z-song/laravel-admin/blob/master/src/Console/stubs/routes.stub)
|
||||
- 配置文件结构有修改 请参考 [admin.php](https://github.com/z-song/laravel-admin/blob/master/config/admin.php)
|
||||
- 图表组件已经移除,不能再使用,参考 [自定义图表](/zh/custom-chart.md)
|
||||
156
vendor/encore/laravel-admin/docs/zh/widgets.md
vendored
Normal file
156
vendor/encore/laravel-admin/docs/zh/widgets.md
vendored
Normal file
@@ -0,0 +1,156 @@
|
||||
# 前端组件
|
||||
|
||||
## Box组件
|
||||
|
||||
`Encore\Admin\Widgets\Box`用来生成box组件:
|
||||
|
||||
```php
|
||||
use Encore\Admin\Widgets\Box;
|
||||
|
||||
$box = new Box('Box标题', 'Box内容');
|
||||
|
||||
$box->removable();
|
||||
|
||||
$box->collapsable();
|
||||
|
||||
$box->style('info');
|
||||
|
||||
$box->solid();
|
||||
|
||||
echo $box;
|
||||
|
||||
```
|
||||
|
||||
`Box::__construct($title, $content)`,`$title`参数为Box组件的标题,`$content`参数为Box的内容元素,可以是实现了`Illuminate\Contracts\Support\Renderable`接口的对象或者其他可打印变量。
|
||||
|
||||
`Box::title($title)`方法用来设置Box组件标题。
|
||||
|
||||
`Box::content($content)`方法用来设置Box组件的内容元素。
|
||||
|
||||
`Box::removable()`方法将Box组件设置为可关闭。
|
||||
|
||||
`Box::collapsable()`方法将Box组件设置为可展开和收起。
|
||||
|
||||
`Box::style($style)`方法设置Box组件的样式,可填值为`primary`,`info`,`danger`,`warning`,`success`,`default`。
|
||||
|
||||
`Box::solid()`方法为Box组件添加边框。
|
||||
|
||||
## Collapse组件
|
||||
|
||||
`Encore\Admin\Widgets\Collapse`类用来生成折叠插件:
|
||||
```php
|
||||
use Encore\Admin\Widgets\Collapse;
|
||||
|
||||
$collapse = new Collapse();
|
||||
|
||||
$collapse->add('Bar', 'xxxxx');
|
||||
$collapse->add('Orders', new Table());
|
||||
|
||||
echo $collapse->render();
|
||||
|
||||
```
|
||||
|
||||
`Collapse::add($title, $content)`方法用来给折叠组件添加一个折叠项,`$title`参数设置该折叠项的标题,`$content`参数用来舍子折叠区的内用。
|
||||
|
||||
|
||||
## 表单
|
||||
|
||||
`Encore\Admin\Widgets\Form`类用来快速构建表单:
|
||||
|
||||
```php
|
||||
|
||||
$form = new Form();
|
||||
|
||||
$form->action('example');
|
||||
|
||||
$form->email('email')->default('qwe@aweq.com');
|
||||
$form->password('password');
|
||||
$form->text('name', '输入框');
|
||||
$form->url('url');
|
||||
$form->color('color');
|
||||
$form->map('lat', 'lng');
|
||||
$form->date('date');
|
||||
$form->json('val');
|
||||
$form->dateRange('created_at', 'updated_at');
|
||||
|
||||
echo $form->render();
|
||||
```
|
||||
`Form::__construct($data = [])`生成一个form对象,如果传入了`$data`参数,`$data`数组中的元素将会按照`key`对应填入`form`对应name的表单中。
|
||||
|
||||
`Form::action($uri)`方法用来设置表单提交地址。
|
||||
|
||||
`Form::method($method)`方法用来设置form表单的提交方法,默认为`POST`方法。
|
||||
|
||||
`Form::disablePjax()` 不使用pjax方式提交表单。
|
||||
|
||||
|
||||
## Infobox组件
|
||||
|
||||
`Encore\Admin\Widgets\InfoBox`类用来生成信息展示块:
|
||||
|
||||
```php
|
||||
use Encore\Admin\Widgets\InfoBox;
|
||||
|
||||
$infoBox = new InfoBox('New Users', 'users', 'aqua', '/admin/users', '1024');
|
||||
|
||||
echo $infoBox->render();
|
||||
|
||||
```
|
||||
|
||||
效果请参考后台首页的布局文件[HomeController.php](https://github.com/z-song/laravel-admin/blob/master/src/Console/stubs/HomeController.stub)的`index()`方法中,关于`InfoBox`的部分。
|
||||
|
||||
## Tab组件
|
||||
|
||||
`Encore\Admin\Widgets\Tab`类用来生成选项卡组件:
|
||||
|
||||
```php
|
||||
use Encore\Admin\Widgets\Tab;
|
||||
|
||||
$tab = new Tab();
|
||||
|
||||
$tab->add('Pie', $pie);
|
||||
$tab->add('Table', new Table());
|
||||
$tab->add('Text', 'blablablabla....');
|
||||
|
||||
echo $tab->render();
|
||||
|
||||
```
|
||||
|
||||
`Tab::add($title, $content)`方法用来添加一个选项卡,`$title`为选项标题,`$content`选项卡内容。
|
||||
|
||||
## Table
|
||||
|
||||
`Encore\Admin\Widgets\Table`类用来生成表格:
|
||||
|
||||
```php
|
||||
use Encore\Admin\Widgets\Table;
|
||||
|
||||
// table 1
|
||||
$headers = ['Id', 'Email', 'Name', 'Company'];
|
||||
$rows = [
|
||||
[1, 'labore21@yahoo.com', 'Ms. Clotilde Gibson', 'Goodwin-Watsica'],
|
||||
[2, 'omnis.in@hotmail.com', 'Allie Kuhic', 'Murphy, Koepp and Morar'],
|
||||
[3, 'quia65@hotmail.com', 'Prof. Drew Heller', 'Kihn LLC'],
|
||||
[4, 'xet@yahoo.com', 'William Koss', 'Becker-Raynor'],
|
||||
[5, 'ipsa.aut@gmail.com', 'Ms. Antonietta Kozey Jr.'],
|
||||
];
|
||||
|
||||
$table = new Table($headers, $rows);
|
||||
|
||||
echo $table->render();
|
||||
|
||||
// table 2
|
||||
$headers = ['Keys', 'Values'];
|
||||
$rows = [
|
||||
'name' => 'Joe',
|
||||
'age' => 25,
|
||||
'gender' => 'Male',
|
||||
'birth' => '1989-12-05',
|
||||
];
|
||||
|
||||
$table = new Table($headers, $rows);
|
||||
|
||||
echo $table->render();
|
||||
|
||||
```
|
||||
|
||||
19
vendor/encore/laravel-admin/phpunit.xml.dist
vendored
Normal file
19
vendor/encore/laravel-admin/phpunit.xml.dist
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit backupGlobals="false"
|
||||
backupStaticAttributes="false"
|
||||
bootstrap="vendor/autoload.php"
|
||||
colors="true"
|
||||
convertErrorsToExceptions="true"
|
||||
convertNoticesToExceptions="true"
|
||||
convertWarningsToExceptions="true"
|
||||
processIsolation="false"
|
||||
stopOnFailure="true"
|
||||
syntaxCheck="false"
|
||||
verbose="true"
|
||||
>
|
||||
<testsuites>
|
||||
<testsuite name="all">
|
||||
<directory>tests/</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
</phpunit>
|
||||
5
vendor/encore/laravel-admin/resources/assets/AdminLTE/bootstrap/css/bootstrap.min.css
vendored
Normal file
5
vendor/encore/laravel-admin/resources/assets/AdminLTE/bootstrap/css/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
@@ -0,0 +1,288 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata></metadata>
|
||||
<defs>
|
||||
<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
|
||||
<font-face units-per-em="1200" ascent="960" descent="-240" />
|
||||
<missing-glyph horiz-adv-x="500" />
|
||||
<glyph horiz-adv-x="0" />
|
||||
<glyph horiz-adv-x="400" />
|
||||
<glyph unicode=" " />
|
||||
<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" />
|
||||
<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode=" " />
|
||||
<glyph unicode="¥" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" />
|
||||
<glyph unicode=" " horiz-adv-x="650" />
|
||||
<glyph unicode=" " horiz-adv-x="1300" />
|
||||
<glyph unicode=" " horiz-adv-x="650" />
|
||||
<glyph unicode=" " horiz-adv-x="1300" />
|
||||
<glyph unicode=" " horiz-adv-x="433" />
|
||||
<glyph unicode=" " horiz-adv-x="325" />
|
||||
<glyph unicode=" " horiz-adv-x="216" />
|
||||
<glyph unicode=" " horiz-adv-x="216" />
|
||||
<glyph unicode=" " horiz-adv-x="162" />
|
||||
<glyph unicode=" " horiz-adv-x="260" />
|
||||
<glyph unicode=" " horiz-adv-x="72" />
|
||||
<glyph unicode=" " horiz-adv-x="260" />
|
||||
<glyph unicode=" " horiz-adv-x="325" />
|
||||
<glyph unicode="€" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" />
|
||||
<glyph unicode="₽" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" />
|
||||
<glyph unicode="−" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="⌛" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" />
|
||||
<glyph unicode="◼" horiz-adv-x="500" d="M0 0z" />
|
||||
<glyph unicode="☁" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" />
|
||||
<glyph unicode="⛺" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " />
|
||||
<glyph unicode="✉" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" />
|
||||
<glyph unicode="✏" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" />
|
||||
<glyph unicode="" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" />
|
||||
<glyph unicode="" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" />
|
||||
<glyph unicode="" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" />
|
||||
<glyph unicode="" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" />
|
||||
<glyph unicode="" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" />
|
||||
<glyph unicode="" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" />
|
||||
<glyph unicode="" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" />
|
||||
<glyph unicode="" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" />
|
||||
<glyph unicode="" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" />
|
||||
<glyph unicode="" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" />
|
||||
<glyph unicode="" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" />
|
||||
<glyph unicode="" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" />
|
||||
<glyph unicode="" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
|
||||
<glyph unicode="" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" />
|
||||
<glyph unicode="" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" />
|
||||
<glyph unicode="" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" />
|
||||
<glyph unicode="" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" />
|
||||
<glyph unicode="" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" />
|
||||
<glyph unicode="" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" />
|
||||
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" />
|
||||
<glyph unicode="" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" />
|
||||
<glyph unicode="" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" />
|
||||
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " />
|
||||
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" />
|
||||
<glyph unicode="" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" />
|
||||
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
|
||||
<glyph unicode="" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" />
|
||||
<glyph unicode="" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" />
|
||||
<glyph unicode="" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" />
|
||||
<glyph unicode="" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" />
|
||||
<glyph unicode="" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" />
|
||||
<glyph unicode="" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" />
|
||||
<glyph unicode="" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" />
|
||||
<glyph unicode="" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" />
|
||||
<glyph unicode="" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" />
|
||||
<glyph unicode="" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" />
|
||||
<glyph unicode="" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" />
|
||||
<glyph unicode="" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
|
||||
<glyph unicode="" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
|
||||
<glyph unicode="" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" />
|
||||
<glyph unicode="" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" />
|
||||
<glyph unicode="" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" />
|
||||
<glyph unicode="" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" />
|
||||
<glyph unicode="" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" />
|
||||
<glyph unicode="" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" />
|
||||
<glyph unicode="" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" />
|
||||
<glyph unicode="" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" />
|
||||
<glyph unicode="" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" />
|
||||
<glyph unicode="" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" />
|
||||
<glyph unicode="" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" />
|
||||
<glyph unicode="" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" />
|
||||
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" />
|
||||
<glyph unicode="" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" />
|
||||
<glyph unicode="" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" />
|
||||
<glyph unicode="" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" />
|
||||
<glyph unicode="" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" />
|
||||
<glyph unicode="" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" />
|
||||
<glyph unicode="" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" />
|
||||
<glyph unicode="" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" />
|
||||
<glyph unicode="" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" />
|
||||
<glyph unicode="" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" />
|
||||
<glyph unicode="" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" />
|
||||
<glyph unicode="" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" />
|
||||
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" />
|
||||
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" />
|
||||
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" />
|
||||
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" />
|
||||
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
|
||||
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" />
|
||||
<glyph unicode="" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" />
|
||||
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" />
|
||||
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" />
|
||||
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" />
|
||||
<glyph unicode="" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" />
|
||||
<glyph unicode="" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" />
|
||||
<glyph unicode="" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" />
|
||||
<glyph unicode="" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" />
|
||||
<glyph unicode="" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" />
|
||||
<glyph unicode="" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" />
|
||||
<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
|
||||
<glyph unicode="" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" />
|
||||
<glyph unicode="" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" />
|
||||
<glyph unicode="" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" />
|
||||
<glyph unicode="" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
|
||||
<glyph unicode="" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
|
||||
<glyph unicode="" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" />
|
||||
<glyph unicode="" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" />
|
||||
<glyph unicode="" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" />
|
||||
<glyph unicode="" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" />
|
||||
<glyph unicode="" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" />
|
||||
<glyph unicode="" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" />
|
||||
<glyph unicode="" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" />
|
||||
<glyph unicode="" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" />
|
||||
<glyph unicode="" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
|
||||
<glyph unicode="" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" />
|
||||
<glyph unicode="" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" />
|
||||
<glyph unicode="" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" />
|
||||
<glyph unicode="" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
|
||||
<glyph unicode="" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" />
|
||||
<glyph unicode="" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" />
|
||||
<glyph unicode="" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" />
|
||||
<glyph unicode="" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" />
|
||||
<glyph unicode="" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" />
|
||||
<glyph unicode="" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" />
|
||||
<glyph unicode="" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" />
|
||||
<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" />
|
||||
<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" />
|
||||
<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" />
|
||||
<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" />
|
||||
<glyph unicode="" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" />
|
||||
<glyph unicode="" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " />
|
||||
<glyph unicode="" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" />
|
||||
<glyph unicode="" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" />
|
||||
<glyph unicode="" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" />
|
||||
<glyph unicode="" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" />
|
||||
<glyph unicode="" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" />
|
||||
<glyph unicode="" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" />
|
||||
<glyph unicode="" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" />
|
||||
<glyph unicode="" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" />
|
||||
<glyph unicode="" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" />
|
||||
<glyph unicode="" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" />
|
||||
<glyph unicode="" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" />
|
||||
<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
|
||||
<glyph unicode="" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " />
|
||||
<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " />
|
||||
<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" />
|
||||
<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" />
|
||||
<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" />
|
||||
<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" />
|
||||
<glyph unicode="" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" />
|
||||
<glyph unicode="" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
|
||||
<glyph unicode="" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" />
|
||||
<glyph unicode="" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" />
|
||||
<glyph unicode="" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
|
||||
<glyph unicode="" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" />
|
||||
<glyph unicode="" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
|
||||
<glyph unicode="" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" />
|
||||
<glyph unicode="" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" />
|
||||
<glyph unicode="" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
|
||||
<glyph unicode="" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
|
||||
<glyph unicode="" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" />
|
||||
<glyph unicode="" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
|
||||
<glyph unicode="" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
|
||||
<glyph unicode="" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" />
|
||||
<glyph unicode="" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" />
|
||||
<glyph unicode="" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" />
|
||||
<glyph unicode="" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" />
|
||||
<glyph unicode="" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" />
|
||||
<glyph unicode="" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" />
|
||||
<glyph unicode="" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" />
|
||||
<glyph unicode="" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" />
|
||||
<glyph unicode="" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" />
|
||||
<glyph unicode="" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" />
|
||||
<glyph unicode="" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" />
|
||||
<glyph unicode="" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" />
|
||||
<glyph unicode="" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " />
|
||||
<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
|
||||
<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
|
||||
<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" />
|
||||
<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" />
|
||||
<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" />
|
||||
<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" />
|
||||
<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" />
|
||||
<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" />
|
||||
<glyph unicode="" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" />
|
||||
<glyph unicode="" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" />
|
||||
<glyph unicode="" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" />
|
||||
<glyph unicode="" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" />
|
||||
<glyph unicode="" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" />
|
||||
<glyph unicode="" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" />
|
||||
<glyph unicode="" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" />
|
||||
<glyph unicode="" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" />
|
||||
<glyph unicode="" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" />
|
||||
<glyph unicode="" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" />
|
||||
<glyph unicode="" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" />
|
||||
<glyph unicode="" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" />
|
||||
<glyph unicode="" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" />
|
||||
<glyph unicode="" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
|
||||
<glyph unicode="" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" />
|
||||
<glyph unicode="" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" />
|
||||
<glyph unicode="" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" />
|
||||
<glyph unicode="" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" />
|
||||
<glyph unicode="" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " />
|
||||
<glyph unicode="" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" />
|
||||
<glyph unicode="" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" />
|
||||
<glyph unicode="" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" />
|
||||
<glyph unicode="" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" />
|
||||
<glyph unicode="" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
|
||||
<glyph unicode="" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
|
||||
<glyph unicode="" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" />
|
||||
<glyph unicode="" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
|
||||
<glyph unicode="" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
|
||||
<glyph unicode="" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
|
||||
<glyph unicode="" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" />
|
||||
<glyph unicode="" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" />
|
||||
<glyph unicode="" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" />
|
||||
<glyph unicode="" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" />
|
||||
<glyph unicode="" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" />
|
||||
<glyph unicode="" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" />
|
||||
<glyph unicode="" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" />
|
||||
<glyph unicode="" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" />
|
||||
<glyph unicode="" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" />
|
||||
<glyph unicode="" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" />
|
||||
<glyph unicode="" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
|
||||
<glyph unicode="" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" />
|
||||
<glyph unicode="" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" />
|
||||
<glyph unicode="" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" />
|
||||
<glyph unicode="" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" />
|
||||
<glyph unicode="" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" />
|
||||
<glyph unicode="" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" />
|
||||
<glyph unicode="" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" />
|
||||
<glyph unicode="" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" />
|
||||
<glyph unicode="" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" />
|
||||
<glyph unicode="" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" />
|
||||
<glyph unicode="" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" />
|
||||
<glyph unicode="" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" />
|
||||
<glyph unicode="🔑" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" />
|
||||
<glyph unicode="🚪" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" />
|
||||
</font>
|
||||
</defs></svg>
|
||||
|
After Width: | Height: | Size: 106 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
7
vendor/encore/laravel-admin/resources/assets/AdminLTE/bootstrap/js/bootstrap.min.js
vendored
Normal file
7
vendor/encore/laravel-admin/resources/assets/AdminLTE/bootstrap/js/bootstrap.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
7
vendor/encore/laravel-admin/resources/assets/AdminLTE/dist/css/AdminLTE.min.css
vendored
Normal file
7
vendor/encore/laravel-admin/resources/assets/AdminLTE/dist/css/AdminLTE.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
vendor/encore/laravel-admin/resources/assets/AdminLTE/dist/css/skins/_all-skins.min.css
vendored
Normal file
1
vendor/encore/laravel-admin/resources/assets/AdminLTE/dist/css/skins/_all-skins.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
.skin-black-light .main-header{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.skin-black-light .main-header .navbar-toggle{color:#333}.skin-black-light .main-header .navbar-brand{color:#333;border-right:1px solid #eee}.skin-black-light .main-header>.navbar{background-color:#fff}.skin-black-light .main-header>.navbar .nav>li>a{color:#333}.skin-black-light .main-header>.navbar .nav>li>a:hover,.skin-black-light .main-header>.navbar .nav>li>a:active,.skin-black-light .main-header>.navbar .nav>li>a:focus,.skin-black-light .main-header>.navbar .nav .open>a,.skin-black-light .main-header>.navbar .nav .open>a:hover,.skin-black-light .main-header>.navbar .nav .open>a:focus,.skin-black-light .main-header>.navbar .nav>.active>a{background:#fff;color:#999}.skin-black-light .main-header>.navbar .sidebar-toggle{color:#333}.skin-black-light .main-header>.navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black-light .main-header>.navbar>.sidebar-toggle{color:#333;border-right:1px solid #eee}.skin-black-light .main-header>.navbar .navbar-nav>li>a{border-right:1px solid #eee}.skin-black-light .main-header>.navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black-light .main-header>.navbar .navbar-right>li>a{border-left:1px solid #eee;border-right-width:0}.skin-black-light .main-header>.logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #eee}.skin-black-light .main-header>.logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black-light .main-header>.logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black-light .main-header>.logo:hover{background-color:#1f1f1f}}.skin-black-light .main-header li.user-header{background-color:#222}.skin-black-light .content-header{background:transparent;box-shadow:none}.skin-black-light .wrapper,.skin-black-light .main-sidebar,.skin-black-light .left-side{background-color:#f9fafc}.skin-black-light .content-wrapper,.skin-black-light .main-footer{border-left:1px solid #d2d6de}.skin-black-light .user-panel>.info,.skin-black-light .user-panel>.info>a{color:#444}.skin-black-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-black-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-black-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-black-light .sidebar-menu>li:hover>a,.skin-black-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-black-light .sidebar-menu>li.active{border-left-color:#fff}.skin-black-light .sidebar-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-black-light .sidebar a{color:#444}.skin-black-light .sidebar a:hover{text-decoration:none}.skin-black-light .treeview-menu>li>a{color:#777}.skin-black-light .treeview-menu>li.active>a,.skin-black-light .treeview-menu>li>a:hover{color:#000}.skin-black-light .treeview-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-black-light .sidebar-form input[type="text"],.skin-black-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-black-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black-light .sidebar-form input[type="text"]:focus,.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}
|
||||
1
vendor/encore/laravel-admin/resources/assets/AdminLTE/dist/css/skins/skin-black.min.css
vendored
Normal file
1
vendor/encore/laravel-admin/resources/assets/AdminLTE/dist/css/skins/skin-black.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.skin-black .main-header{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.skin-black .main-header .navbar-toggle{color:#333}.skin-black .main-header .navbar-brand{color:#333;border-right:1px solid #eee}.skin-black .main-header>.navbar{background-color:#fff}.skin-black .main-header>.navbar .nav>li>a{color:#333}.skin-black .main-header>.navbar .nav>li>a:hover,.skin-black .main-header>.navbar .nav>li>a:active,.skin-black .main-header>.navbar .nav>li>a:focus,.skin-black .main-header>.navbar .nav .open>a,.skin-black .main-header>.navbar .nav .open>a:hover,.skin-black .main-header>.navbar .nav .open>a:focus,.skin-black .main-header>.navbar .nav>.active>a{background:#fff;color:#999}.skin-black .main-header>.navbar .sidebar-toggle{color:#333}.skin-black .main-header>.navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black .main-header>.navbar>.sidebar-toggle{color:#333;border-right:1px solid #eee}.skin-black .main-header>.navbar .navbar-nav>li>a{border-right:1px solid #eee}.skin-black .main-header>.navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black .main-header>.navbar .navbar-right>li>a{border-left:1px solid #eee;border-right-width:0}.skin-black .main-header>.logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #eee}.skin-black .main-header>.logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black .main-header>.logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black .main-header>.logo:hover{background-color:#1f1f1f}}.skin-black .main-header li.user-header{background-color:#222}.skin-black .content-header{background:transparent;box-shadow:none}.skin-black .wrapper,.skin-black .main-sidebar,.skin-black .left-side{background-color:#222d32}.skin-black .user-panel>.info,.skin-black .user-panel>.info>a{color:#fff}.skin-black .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-black .sidebar-menu>li>a{border-left:3px solid transparent}.skin-black .sidebar-menu>li:hover>a,.skin-black .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#fff}.skin-black .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-black .sidebar a{color:#b8c7ce}.skin-black .sidebar a:hover{text-decoration:none}.skin-black .treeview-menu>li>a{color:#8aa4af}.skin-black .treeview-menu>li.active>a,.skin-black .treeview-menu>li>a:hover{color:#fff}.skin-black .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-black .sidebar-form input[type="text"],.skin-black .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-black .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black .sidebar-form input[type="text"]:focus,.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}
|
||||
1
vendor/encore/laravel-admin/resources/assets/AdminLTE/dist/css/skins/skin-blue-light.min.css
vendored
Normal file
1
vendor/encore/laravel-admin/resources/assets/AdminLTE/dist/css/skins/skin-blue-light.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.skin-blue-light .main-header .navbar{background-color:#3c8dbc}.skin-blue-light .main-header .navbar .nav>li>a{color:#fff}.skin-blue-light .main-header .navbar .nav>li>a:hover,.skin-blue-light .main-header .navbar .nav>li>a:active,.skin-blue-light .main-header .navbar .nav>li>a:focus,.skin-blue-light .main-header .navbar .nav .open>a,.skin-blue-light .main-header .navbar .nav .open>a:hover,.skin-blue-light .main-header .navbar .nav .open>a:focus,.skin-blue-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue-light .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue-light .main-header .logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue-light .main-header .logo:hover{background-color:#3b8ab8}.skin-blue-light .main-header li.user-header{background-color:#3c8dbc}.skin-blue-light .content-header{background:transparent}.skin-blue-light .wrapper,.skin-blue-light .main-sidebar,.skin-blue-light .left-side{background-color:#f9fafc}.skin-blue-light .content-wrapper,.skin-blue-light .main-footer{border-left:1px solid #d2d6de}.skin-blue-light .user-panel>.info,.skin-blue-light .user-panel>.info>a{color:#444}.skin-blue-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-blue-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-blue-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-blue-light .sidebar-menu>li:hover>a,.skin-blue-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-blue-light .sidebar-menu>li.active{border-left-color:#3c8dbc}.skin-blue-light .sidebar-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-blue-light .sidebar a{color:#444}.skin-blue-light .sidebar a:hover{text-decoration:none}.skin-blue-light .treeview-menu>li>a{color:#777}.skin-blue-light .treeview-menu>li.active>a,.skin-blue-light .treeview-menu>li>a:hover{color:#000}.skin-blue-light .treeview-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-blue-light .sidebar-form input[type="text"],.skin-blue-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-blue-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue-light .sidebar-form input[type="text"]:focus,.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-blue-light .main-footer{border-top-color:#d2d6de}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8}
|
||||
1
vendor/encore/laravel-admin/resources/assets/AdminLTE/dist/css/skins/skin-blue.min.css
vendored
Normal file
1
vendor/encore/laravel-admin/resources/assets/AdminLTE/dist/css/skins/skin-blue.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.skin-blue .main-header .navbar{background-color:#3c8dbc}.skin-blue .main-header .navbar .nav>li>a{color:#fff}.skin-blue .main-header .navbar .nav>li>a:hover,.skin-blue .main-header .navbar .nav>li>a:active,.skin-blue .main-header .navbar .nav>li>a:focus,.skin-blue .main-header .navbar .nav .open>a,.skin-blue .main-header .navbar .nav .open>a:hover,.skin-blue .main-header .navbar .nav .open>a:focus,.skin-blue .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue .main-header .logo{background-color:#367fa9;color:#fff;border-bottom:0 solid transparent}.skin-blue .main-header .logo:hover{background-color:#357ca5}.skin-blue .main-header li.user-header{background-color:#3c8dbc}.skin-blue .content-header{background:transparent}.skin-blue .wrapper,.skin-blue .main-sidebar,.skin-blue .left-side{background-color:#222d32}.skin-blue .user-panel>.info,.skin-blue .user-panel>.info>a{color:#fff}.skin-blue .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-blue .sidebar-menu>li>a{border-left:3px solid transparent}.skin-blue .sidebar-menu>li:hover>a,.skin-blue .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#3c8dbc}.skin-blue .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-blue .sidebar a{color:#b8c7ce}.skin-blue .sidebar a:hover{text-decoration:none}.skin-blue .treeview-menu>li>a{color:#8aa4af}.skin-blue .treeview-menu>li.active>a,.skin-blue .treeview-menu>li>a:hover{color:#fff}.skin-blue .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-blue .sidebar-form input[type="text"],.skin-blue .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-blue .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue .sidebar-form input[type="text"]:focus,.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8}
|
||||
@@ -0,0 +1 @@
|
||||
.skin-green-light .main-header .navbar{background-color:#00a65a}.skin-green-light .main-header .navbar .nav>li>a{color:#fff}.skin-green-light .main-header .navbar .nav>li>a:hover,.skin-green-light .main-header .navbar .nav>li>a:active,.skin-green-light .main-header .navbar .nav>li>a:focus,.skin-green-light .main-header .navbar .nav .open>a,.skin-green-light .main-header .navbar .nav .open>a:hover,.skin-green-light .main-header .navbar .nav .open>a:focus,.skin-green-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green-light .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green-light .main-header .logo{background-color:#00a65a;color:#fff;border-bottom:0 solid transparent}.skin-green-light .main-header .logo:hover{background-color:#00a157}.skin-green-light .main-header li.user-header{background-color:#00a65a}.skin-green-light .content-header{background:transparent}.skin-green-light .wrapper,.skin-green-light .main-sidebar,.skin-green-light .left-side{background-color:#f9fafc}.skin-green-light .content-wrapper,.skin-green-light .main-footer{border-left:1px solid #d2d6de}.skin-green-light .user-panel>.info,.skin-green-light .user-panel>.info>a{color:#444}.skin-green-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-green-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-green-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-green-light .sidebar-menu>li:hover>a,.skin-green-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-green-light .sidebar-menu>li.active{border-left-color:#00a65a}.skin-green-light .sidebar-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-green-light .sidebar a{color:#444}.skin-green-light .sidebar a:hover{text-decoration:none}.skin-green-light .treeview-menu>li>a{color:#777}.skin-green-light .treeview-menu>li.active>a,.skin-green-light .treeview-menu>li>a:hover{color:#000}.skin-green-light .treeview-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-green-light .sidebar-form input[type="text"],.skin-green-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-green-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green-light .sidebar-form input[type="text"]:focus,.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-green-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}
|
||||
1
vendor/encore/laravel-admin/resources/assets/AdminLTE/dist/css/skins/skin-green.min.css
vendored
Normal file
1
vendor/encore/laravel-admin/resources/assets/AdminLTE/dist/css/skins/skin-green.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.skin-green .main-header .navbar{background-color:#00a65a}.skin-green .main-header .navbar .nav>li>a{color:#fff}.skin-green .main-header .navbar .nav>li>a:hover,.skin-green .main-header .navbar .nav>li>a:active,.skin-green .main-header .navbar .nav>li>a:focus,.skin-green .main-header .navbar .nav .open>a,.skin-green .main-header .navbar .nav .open>a:hover,.skin-green .main-header .navbar .nav .open>a:focus,.skin-green .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green .main-header .logo{background-color:#008d4c;color:#fff;border-bottom:0 solid transparent}.skin-green .main-header .logo:hover{background-color:#008749}.skin-green .main-header li.user-header{background-color:#00a65a}.skin-green .content-header{background:transparent}.skin-green .wrapper,.skin-green .main-sidebar,.skin-green .left-side{background-color:#222d32}.skin-green .user-panel>.info,.skin-green .user-panel>.info>a{color:#fff}.skin-green .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-green .sidebar-menu>li>a{border-left:3px solid transparent}.skin-green .sidebar-menu>li:hover>a,.skin-green .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#00a65a}.skin-green .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-green .sidebar a{color:#b8c7ce}.skin-green .sidebar a:hover{text-decoration:none}.skin-green .treeview-menu>li>a{color:#8aa4af}.skin-green .treeview-menu>li.active>a,.skin-green .treeview-menu>li>a:hover{color:#fff}.skin-green .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-green .sidebar-form input[type="text"],.skin-green .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-green .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green .sidebar-form input[type="text"]:focus,.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}
|
||||
@@ -0,0 +1 @@
|
||||
.skin-purple-light .main-header .navbar{background-color:#605ca8}.skin-purple-light .main-header .navbar .nav>li>a{color:#fff}.skin-purple-light .main-header .navbar .nav>li>a:hover,.skin-purple-light .main-header .navbar .nav>li>a:active,.skin-purple-light .main-header .navbar .nav>li>a:focus,.skin-purple-light .main-header .navbar .nav .open>a,.skin-purple-light .main-header .navbar .nav .open>a:hover,.skin-purple-light .main-header .navbar .nav .open>a:focus,.skin-purple-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple-light .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple-light .main-header .logo{background-color:#605ca8;color:#fff;border-bottom:0 solid transparent}.skin-purple-light .main-header .logo:hover{background-color:#5d59a6}.skin-purple-light .main-header li.user-header{background-color:#605ca8}.skin-purple-light .content-header{background:transparent}.skin-purple-light .wrapper,.skin-purple-light .main-sidebar,.skin-purple-light .left-side{background-color:#f9fafc}.skin-purple-light .content-wrapper,.skin-purple-light .main-footer{border-left:1px solid #d2d6de}.skin-purple-light .user-panel>.info,.skin-purple-light .user-panel>.info>a{color:#444}.skin-purple-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-purple-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-purple-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-purple-light .sidebar-menu>li:hover>a,.skin-purple-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-purple-light .sidebar-menu>li.active{border-left-color:#605ca8}.skin-purple-light .sidebar-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-purple-light .sidebar a{color:#444}.skin-purple-light .sidebar a:hover{text-decoration:none}.skin-purple-light .treeview-menu>li>a{color:#777}.skin-purple-light .treeview-menu>li.active>a,.skin-purple-light .treeview-menu>li>a:hover{color:#000}.skin-purple-light .treeview-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-purple-light .sidebar-form input[type="text"],.skin-purple-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-purple-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple-light .sidebar-form input[type="text"]:focus,.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-purple-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}
|
||||
1
vendor/encore/laravel-admin/resources/assets/AdminLTE/dist/css/skins/skin-purple.min.css
vendored
Normal file
1
vendor/encore/laravel-admin/resources/assets/AdminLTE/dist/css/skins/skin-purple.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.skin-purple .main-header .navbar{background-color:#605ca8}.skin-purple .main-header .navbar .nav>li>a{color:#fff}.skin-purple .main-header .navbar .nav>li>a:hover,.skin-purple .main-header .navbar .nav>li>a:active,.skin-purple .main-header .navbar .nav>li>a:focus,.skin-purple .main-header .navbar .nav .open>a,.skin-purple .main-header .navbar .nav .open>a:hover,.skin-purple .main-header .navbar .nav .open>a:focus,.skin-purple .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple .main-header .logo{background-color:#555299;color:#fff;border-bottom:0 solid transparent}.skin-purple .main-header .logo:hover{background-color:#545096}.skin-purple .main-header li.user-header{background-color:#605ca8}.skin-purple .content-header{background:transparent}.skin-purple .wrapper,.skin-purple .main-sidebar,.skin-purple .left-side{background-color:#222d32}.skin-purple .user-panel>.info,.skin-purple .user-panel>.info>a{color:#fff}.skin-purple .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-purple .sidebar-menu>li>a{border-left:3px solid transparent}.skin-purple .sidebar-menu>li:hover>a,.skin-purple .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#605ca8}.skin-purple .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-purple .sidebar a{color:#b8c7ce}.skin-purple .sidebar a:hover{text-decoration:none}.skin-purple .treeview-menu>li>a{color:#8aa4af}.skin-purple .treeview-menu>li.active>a,.skin-purple .treeview-menu>li>a:hover{color:#fff}.skin-purple .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-purple .sidebar-form input[type="text"],.skin-purple .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-purple .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple .sidebar-form input[type="text"]:focus,.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}
|
||||
1
vendor/encore/laravel-admin/resources/assets/AdminLTE/dist/css/skins/skin-red-light.min.css
vendored
Normal file
1
vendor/encore/laravel-admin/resources/assets/AdminLTE/dist/css/skins/skin-red-light.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.skin-red-light .main-header .navbar{background-color:#dd4b39}.skin-red-light .main-header .navbar .nav>li>a{color:#fff}.skin-red-light .main-header .navbar .nav>li>a:hover,.skin-red-light .main-header .navbar .nav>li>a:active,.skin-red-light .main-header .navbar .nav>li>a:focus,.skin-red-light .main-header .navbar .nav .open>a,.skin-red-light .main-header .navbar .nav .open>a:hover,.skin-red-light .main-header .navbar .nav .open>a:focus,.skin-red-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red-light .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red-light .main-header .logo{background-color:#dd4b39;color:#fff;border-bottom:0 solid transparent}.skin-red-light .main-header .logo:hover{background-color:#dc4735}.skin-red-light .main-header li.user-header{background-color:#dd4b39}.skin-red-light .content-header{background:transparent}.skin-red-light .wrapper,.skin-red-light .main-sidebar,.skin-red-light .left-side{background-color:#f9fafc}.skin-red-light .content-wrapper,.skin-red-light .main-footer{border-left:1px solid #d2d6de}.skin-red-light .user-panel>.info,.skin-red-light .user-panel>.info>a{color:#444}.skin-red-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-red-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-red-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-red-light .sidebar-menu>li:hover>a,.skin-red-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-red-light .sidebar-menu>li.active{border-left-color:#dd4b39}.skin-red-light .sidebar-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-red-light .sidebar a{color:#444}.skin-red-light .sidebar a:hover{text-decoration:none}.skin-red-light .treeview-menu>li>a{color:#777}.skin-red-light .treeview-menu>li.active>a,.skin-red-light .treeview-menu>li>a:hover{color:#000}.skin-red-light .treeview-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-red-light .sidebar-form input[type="text"],.skin-red-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-red-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red-light .sidebar-form input[type="text"]:focus,.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-red-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}
|
||||
1
vendor/encore/laravel-admin/resources/assets/AdminLTE/dist/css/skins/skin-red.min.css
vendored
Normal file
1
vendor/encore/laravel-admin/resources/assets/AdminLTE/dist/css/skins/skin-red.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.skin-red .main-header .navbar{background-color:#dd4b39}.skin-red .main-header .navbar .nav>li>a{color:#fff}.skin-red .main-header .navbar .nav>li>a:hover,.skin-red .main-header .navbar .nav>li>a:active,.skin-red .main-header .navbar .nav>li>a:focus,.skin-red .main-header .navbar .nav .open>a,.skin-red .main-header .navbar .nav .open>a:hover,.skin-red .main-header .navbar .nav .open>a:focus,.skin-red .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red .main-header .logo{background-color:#d73925;color:#fff;border-bottom:0 solid transparent}.skin-red .main-header .logo:hover{background-color:#d33724}.skin-red .main-header li.user-header{background-color:#dd4b39}.skin-red .content-header{background:transparent}.skin-red .wrapper,.skin-red .main-sidebar,.skin-red .left-side{background-color:#222d32}.skin-red .user-panel>.info,.skin-red .user-panel>.info>a{color:#fff}.skin-red .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-red .sidebar-menu>li>a{border-left:3px solid transparent}.skin-red .sidebar-menu>li:hover>a,.skin-red .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#dd4b39}.skin-red .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-red .sidebar a{color:#b8c7ce}.skin-red .sidebar a:hover{text-decoration:none}.skin-red .treeview-menu>li>a{color:#8aa4af}.skin-red .treeview-menu>li.active>a,.skin-red .treeview-menu>li>a:hover{color:#fff}.skin-red .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-red .sidebar-form input[type="text"],.skin-red .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-red .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red .sidebar-form input[type="text"]:focus,.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}
|
||||
@@ -0,0 +1 @@
|
||||
.skin-yellow-light .main-header .navbar{background-color:#f39c12}.skin-yellow-light .main-header .navbar .nav>li>a{color:#fff}.skin-yellow-light .main-header .navbar .nav>li>a:hover,.skin-yellow-light .main-header .navbar .nav>li>a:active,.skin-yellow-light .main-header .navbar .nav>li>a:focus,.skin-yellow-light .main-header .navbar .nav .open>a,.skin-yellow-light .main-header .navbar .nav .open>a:hover,.skin-yellow-light .main-header .navbar .nav .open>a:focus,.skin-yellow-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow-light .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow-light .main-header .logo{background-color:#f39c12;color:#fff;border-bottom:0 solid transparent}.skin-yellow-light .main-header .logo:hover{background-color:#f39a0d}.skin-yellow-light .main-header li.user-header{background-color:#f39c12}.skin-yellow-light .content-header{background:transparent}.skin-yellow-light .wrapper,.skin-yellow-light .main-sidebar,.skin-yellow-light .left-side{background-color:#f9fafc}.skin-yellow-light .content-wrapper,.skin-yellow-light .main-footer{border-left:1px solid #d2d6de}.skin-yellow-light .user-panel>.info,.skin-yellow-light .user-panel>.info>a{color:#444}.skin-yellow-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-yellow-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-yellow-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-yellow-light .sidebar-menu>li:hover>a,.skin-yellow-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-yellow-light .sidebar-menu>li.active{border-left-color:#f39c12}.skin-yellow-light .sidebar-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-yellow-light .sidebar a{color:#444}.skin-yellow-light .sidebar a:hover{text-decoration:none}.skin-yellow-light .treeview-menu>li>a{color:#777}.skin-yellow-light .treeview-menu>li.active>a,.skin-yellow-light .treeview-menu>li>a:hover{color:#000}.skin-yellow-light .treeview-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-yellow-light .sidebar-form input[type="text"],.skin-yellow-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-yellow-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow-light .sidebar-form input[type="text"]:focus,.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-yellow-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}
|
||||
1
vendor/encore/laravel-admin/resources/assets/AdminLTE/dist/css/skins/skin-yellow.min.css
vendored
Normal file
1
vendor/encore/laravel-admin/resources/assets/AdminLTE/dist/css/skins/skin-yellow.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.skin-yellow .main-header .navbar{background-color:#f39c12}.skin-yellow .main-header .navbar .nav>li>a{color:#fff}.skin-yellow .main-header .navbar .nav>li>a:hover,.skin-yellow .main-header .navbar .nav>li>a:active,.skin-yellow .main-header .navbar .nav>li>a:focus,.skin-yellow .main-header .navbar .nav .open>a,.skin-yellow .main-header .navbar .nav .open>a:hover,.skin-yellow .main-header .navbar .nav .open>a:focus,.skin-yellow .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow .main-header .logo{background-color:#e08e0b;color:#fff;border-bottom:0 solid transparent}.skin-yellow .main-header .logo:hover{background-color:#db8b0b}.skin-yellow .main-header li.user-header{background-color:#f39c12}.skin-yellow .content-header{background:transparent}.skin-yellow .wrapper,.skin-yellow .main-sidebar,.skin-yellow .left-side{background-color:#222d32}.skin-yellow .user-panel>.info,.skin-yellow .user-panel>.info>a{color:#fff}.skin-yellow .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-yellow .sidebar-menu>li>a{border-left:3px solid transparent}.skin-yellow .sidebar-menu>li:hover>a,.skin-yellow .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#f39c12}.skin-yellow .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-yellow .sidebar a{color:#b8c7ce}.skin-yellow .sidebar a:hover{text-decoration:none}.skin-yellow .treeview-menu>li>a{color:#8aa4af}.skin-yellow .treeview-menu>li.active>a,.skin-yellow .treeview-menu>li>a:hover{color:#fff}.skin-yellow .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-yellow .sidebar-form input[type="text"],.skin-yellow .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-yellow .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow .sidebar-form input[type="text"]:focus,.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}
|
||||
BIN
vendor/encore/laravel-admin/resources/assets/AdminLTE/dist/img/boxed-bg.jpg
vendored
Normal file
BIN
vendor/encore/laravel-admin/resources/assets/AdminLTE/dist/img/boxed-bg.jpg
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 121 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user