├── .env.example ├── README.md ├── app ├── .DS_Store ├── api │ ├── depends │ │ ├── manager.py │ │ └── mem_session.py │ ├── errors │ │ ├── http_error.py │ │ ├── notauth_error.py │ │ └── validation_error.py │ └── routes │ │ ├── admin │ │ ├── admin.py │ │ ├── admin_log.py │ │ ├── file.py │ │ ├── monitor.py │ │ ├── power.py │ │ ├── role.py │ │ └── user.py │ │ ├── api.py │ │ └── index │ │ └── index.py ├── core │ ├── config.py │ ├── events.py │ └── logging.py ├── main.py ├── models │ └── admin.py ├── resources │ ├── .DS_Store │ ├── static │ │ ├── .DS_Store │ │ ├── admin │ │ │ ├── admin │ │ │ │ ├── css │ │ │ │ │ ├── admin.css │ │ │ │ │ ├── load.css │ │ │ │ │ └── other │ │ │ │ │ │ ├── console1.css │ │ │ │ │ │ ├── console2.css │ │ │ │ │ │ ├── department.css │ │ │ │ │ │ ├── error.css │ │ │ │ │ │ ├── icon.css │ │ │ │ │ │ ├── login.css │ │ │ │ │ │ ├── person.css │ │ │ │ │ │ └── result.css │ │ │ │ ├── data │ │ │ │ │ ├── card.json │ │ │ │ │ ├── dataMenu.json │ │ │ │ │ ├── dataTree2.json │ │ │ │ │ ├── dictData.json │ │ │ │ │ ├── dictType.json │ │ │ │ │ ├── document.json │ │ │ │ │ ├── dtree.json │ │ │ │ │ ├── loginLog.json │ │ │ │ │ ├── menu.json │ │ │ │ │ ├── message.json │ │ │ │ │ ├── operateLog.json │ │ │ │ │ ├── organization.json │ │ │ │ │ ├── organizationtree.json │ │ │ │ │ ├── power.json │ │ │ │ │ ├── role.json │ │ │ │ │ ├── routes.json │ │ │ │ │ ├── table.json │ │ │ │ │ └── user.json │ │ │ │ └── images │ │ │ │ │ ├── 403.svg │ │ │ │ │ ├── 404.svg │ │ │ │ │ ├── 500.svg │ │ │ │ │ ├── act.jpg │ │ │ │ │ ├── avatar.jpg │ │ │ │ │ ├── background.svg │ │ │ │ │ ├── background2.svg │ │ │ │ │ ├── captcha.gif │ │ │ │ │ ├── logo.png │ │ │ │ │ └── show.png │ │ │ ├── component │ │ │ │ ├── code │ │ │ │ │ ├── css │ │ │ │ │ │ └── style.css │ │ │ │ │ └── index.html │ │ │ │ ├── layui │ │ │ │ │ ├── css │ │ │ │ │ │ ├── layui.css │ │ │ │ │ │ ├── layui.mobile.css │ │ │ │ │ │ └── modules │ │ │ │ │ │ │ ├── code.css │ │ │ │ │ │ │ ├── laydate │ │ │ │ │ │ │ └── default │ │ │ │ │ │ │ │ └── laydate.css │ │ │ │ │ │ │ └── layer │ │ │ │ │ │ │ └── default │ │ │ │ │ │ │ ├── icon-ext.png │ │ │ │ │ │ │ ├── icon.png │ │ │ │ │ │ │ ├── layer.css │ │ │ │ │ │ │ ├── loading-0.gif │ │ │ │ │ │ │ ├── loading-1.gif │ │ │ │ │ │ │ └── loading-2.gif │ │ │ │ │ ├── font │ │ │ │ │ │ ├── iconfont.eot │ │ │ │ │ │ ├── iconfont.svg │ │ │ │ │ │ ├── iconfont.ttf │ │ │ │ │ │ ├── iconfont.woff │ │ │ │ │ │ └── iconfont.woff2 │ │ │ │ │ ├── images │ │ │ │ │ │ └── face │ │ │ │ │ │ │ ├── 0.gif │ │ │ │ │ │ │ ├── 1.gif │ │ │ │ │ │ │ ├── 10.gif │ │ │ │ │ │ │ ├── 11.gif │ │ │ │ │ │ │ ├── 12.gif │ │ │ │ │ │ │ ├── 13.gif │ │ │ │ │ │ │ ├── 14.gif │ │ │ │ │ │ │ ├── 15.gif │ │ │ │ │ │ │ ├── 16.gif │ │ │ │ │ │ │ ├── 17.gif │ │ │ │ │ │ │ ├── 18.gif │ │ │ │ │ │ │ ├── 19.gif │ │ │ │ │ │ │ ├── 2.gif │ │ │ │ │ │ │ ├── 20.gif │ │ │ │ │ │ │ ├── 21.gif │ │ │ │ │ │ │ ├── 22.gif │ │ │ │ │ │ │ ├── 23.gif │ │ │ │ │ │ │ ├── 24.gif │ │ │ │ │ │ │ ├── 25.gif │ │ │ │ │ │ │ ├── 26.gif │ │ │ │ │ │ │ ├── 27.gif │ │ │ │ │ │ │ ├── 28.gif │ │ │ │ │ │ │ ├── 29.gif │ │ │ │ │ │ │ ├── 3.gif │ │ │ │ │ │ │ ├── 30.gif │ │ │ │ │ │ │ ├── 31.gif │ │ │ │ │ │ │ ├── 32.gif │ │ │ │ │ │ │ ├── 33.gif │ │ │ │ │ │ │ ├── 34.gif │ │ │ │ │ │ │ ├── 35.gif │ │ │ │ │ │ │ ├── 36.gif │ │ │ │ │ │ │ ├── 37.gif │ │ │ │ │ │ │ ├── 38.gif │ │ │ │ │ │ │ ├── 39.gif │ │ │ │ │ │ │ ├── 4.gif │ │ │ │ │ │ │ ├── 40.gif │ │ │ │ │ │ │ ├── 41.gif │ │ │ │ │ │ │ ├── 42.gif │ │ │ │ │ │ │ ├── 43.gif │ │ │ │ │ │ │ ├── 44.gif │ │ │ │ │ │ │ ├── 45.gif │ │ │ │ │ │ │ ├── 46.gif │ │ │ │ │ │ │ ├── 47.gif │ │ │ │ │ │ │ ├── 48.gif │ │ │ │ │ │ │ ├── 49.gif │ │ │ │ │ │ │ ├── 5.gif │ │ │ │ │ │ │ ├── 50.gif │ │ │ │ │ │ │ ├── 51.gif │ │ │ │ │ │ │ ├── 52.gif │ │ │ │ │ │ │ ├── 53.gif │ │ │ │ │ │ │ ├── 54.gif │ │ │ │ │ │ │ ├── 55.gif │ │ │ │ │ │ │ ├── 56.gif │ │ │ │ │ │ │ ├── 57.gif │ │ │ │ │ │ │ ├── 58.gif │ │ │ │ │ │ │ ├── 59.gif │ │ │ │ │ │ │ ├── 6.gif │ │ │ │ │ │ │ ├── 60.gif │ │ │ │ │ │ │ ├── 61.gif │ │ │ │ │ │ │ ├── 62.gif │ │ │ │ │ │ │ ├── 63.gif │ │ │ │ │ │ │ ├── 64.gif │ │ │ │ │ │ │ ├── 65.gif │ │ │ │ │ │ │ ├── 66.gif │ │ │ │ │ │ │ ├── 67.gif │ │ │ │ │ │ │ ├── 68.gif │ │ │ │ │ │ │ ├── 69.gif │ │ │ │ │ │ │ ├── 7.gif │ │ │ │ │ │ │ ├── 70.gif │ │ │ │ │ │ │ ├── 71.gif │ │ │ │ │ │ │ ├── 8.gif │ │ │ │ │ │ │ └── 9.gif │ │ │ │ │ ├── lay │ │ │ │ │ │ └── modules │ │ │ │ │ │ │ ├── carousel.js │ │ │ │ │ │ │ ├── code.js │ │ │ │ │ │ │ ├── colorpicker.js │ │ │ │ │ │ │ ├── element.js │ │ │ │ │ │ │ ├── flow.js │ │ │ │ │ │ │ ├── form.js │ │ │ │ │ │ │ ├── jquery.js │ │ │ │ │ │ │ ├── laydate.js │ │ │ │ │ │ │ ├── layedit.js │ │ │ │ │ │ │ ├── layer.js │ │ │ │ │ │ │ ├── laypage.js │ │ │ │ │ │ │ ├── laytpl.js │ │ │ │ │ │ │ ├── mobile.js │ │ │ │ │ │ │ ├── rate.js │ │ │ │ │ │ │ ├── slider.js │ │ │ │ │ │ │ ├── table.js │ │ │ │ │ │ │ ├── transfer.js │ │ │ │ │ │ │ ├── tree.js │ │ │ │ │ │ │ ├── upload.js │ │ │ │ │ │ │ └── util.js │ │ │ │ │ ├── layui.all.js │ │ │ │ │ └── layui.js │ │ │ │ └── pear │ │ │ │ │ ├── css │ │ │ │ │ ├── pear-module │ │ │ │ │ │ ├── button.css │ │ │ │ │ │ ├── card.css │ │ │ │ │ │ ├── code.css │ │ │ │ │ │ ├── cropper.css │ │ │ │ │ │ ├── dropdown.css │ │ │ │ │ │ ├── dtree │ │ │ │ │ │ │ ├── dtree.css │ │ │ │ │ │ │ ├── dtree.js │ │ │ │ │ │ │ └── font │ │ │ │ │ │ │ │ ├── dtreefont.css │ │ │ │ │ │ │ │ ├── dtreefont.eot │ │ │ │ │ │ │ │ ├── dtreefont.svg │ │ │ │ │ │ │ │ ├── dtreefont.ttf │ │ │ │ │ │ │ │ ├── dtreefont.woff │ │ │ │ │ │ │ │ └── icons.json │ │ │ │ │ │ ├── form.css │ │ │ │ │ │ ├── frame.css │ │ │ │ │ │ ├── iconPicker.css │ │ │ │ │ │ ├── label.css │ │ │ │ │ │ ├── layer.css │ │ │ │ │ │ ├── layout.css │ │ │ │ │ │ ├── link.css │ │ │ │ │ │ ├── loading.css │ │ │ │ │ │ ├── menu.css │ │ │ │ │ │ ├── message.css │ │ │ │ │ │ ├── notice.css │ │ │ │ │ │ ├── select.css │ │ │ │ │ │ ├── step.css │ │ │ │ │ │ ├── tab.css │ │ │ │ │ │ ├── table.css │ │ │ │ │ │ ├── tag.css │ │ │ │ │ │ ├── topBar.css │ │ │ │ │ │ └── treetable.css │ │ │ │ │ ├── pear.all.css │ │ │ │ │ └── pear.css │ │ │ │ │ ├── font │ │ │ │ │ ├── iconfont.css │ │ │ │ │ ├── iconfont.eot │ │ │ │ │ ├── iconfont.js │ │ │ │ │ ├── iconfont.json │ │ │ │ │ ├── iconfont.svg │ │ │ │ │ ├── iconfont.ttf │ │ │ │ │ ├── iconfont.woff │ │ │ │ │ └── iconfont.woff2 │ │ │ │ │ ├── modules │ │ │ │ │ ├── admin.js │ │ │ │ │ ├── area.js │ │ │ │ │ ├── button.js │ │ │ │ │ ├── card.js │ │ │ │ │ ├── common.js │ │ │ │ │ ├── context.js │ │ │ │ │ ├── convert.js │ │ │ │ │ ├── count.js │ │ │ │ │ ├── cropper.js │ │ │ │ │ ├── design.js │ │ │ │ │ ├── drawer.js │ │ │ │ │ ├── dropdown.js │ │ │ │ │ ├── dtree.js │ │ │ │ │ ├── echarts.js │ │ │ │ │ ├── echartsTheme.js │ │ │ │ │ ├── frame.js │ │ │ │ │ ├── hash.js │ │ │ │ │ ├── http.js │ │ │ │ │ ├── iconPicker.js │ │ │ │ │ ├── loading.js │ │ │ │ │ ├── menu.js │ │ │ │ │ ├── message.js │ │ │ │ │ ├── notice.js │ │ │ │ │ ├── popup.js │ │ │ │ │ ├── select.js │ │ │ │ │ ├── step.js │ │ │ │ │ ├── tab.js │ │ │ │ │ ├── tag.js │ │ │ │ │ ├── theme.js │ │ │ │ │ ├── tinymce │ │ │ │ │ │ ├── tinymce.js │ │ │ │ │ │ └── tinymce │ │ │ │ │ │ │ ├── jquery.tinymce.min.js │ │ │ │ │ │ │ ├── langs │ │ │ │ │ │ │ ├── readme.md │ │ │ │ │ │ │ └── zh_CN.js │ │ │ │ │ │ │ ├── license.txt │ │ │ │ │ │ │ ├── plugins │ │ │ │ │ │ │ ├── advlist │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── anchor │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── autolink │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── autoresize │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── autosave │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── bbcode │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── charmap │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── code │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── codesample │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── colorpicker │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── contextmenu │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── directionality │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── emoticons │ │ │ │ │ │ │ │ ├── js │ │ │ │ │ │ │ │ │ ├── emojis.js │ │ │ │ │ │ │ │ │ └── emojis.min.js │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── fullpage │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── fullscreen │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── help │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── hr │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── image │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── imagetools │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── importcss │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── indent2em │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── insertdatetime │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── legacyoutput │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── link │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── lists │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── media │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── nonbreaking │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── noneditable │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── pagebreak │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── paste │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── preview │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── print │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── quickbars │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── save │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── searchreplace │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── spellchecker │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── tabfocus │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── table │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── template │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── textcolor │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── textpattern │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── toc │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── visualblocks │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── visualchars │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ └── wordcount │ │ │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ │ ├── skins │ │ │ │ │ │ │ ├── content │ │ │ │ │ │ │ │ ├── dark │ │ │ │ │ │ │ │ │ ├── content.css │ │ │ │ │ │ │ │ │ ├── content.min.css │ │ │ │ │ │ │ │ │ └── content.min.css.map │ │ │ │ │ │ │ │ ├── default │ │ │ │ │ │ │ │ │ ├── content.css │ │ │ │ │ │ │ │ │ ├── content.min.css │ │ │ │ │ │ │ │ │ └── content.min.css.map │ │ │ │ │ │ │ │ ├── document │ │ │ │ │ │ │ │ │ ├── content.css │ │ │ │ │ │ │ │ │ ├── content.min.css │ │ │ │ │ │ │ │ │ └── content.min.css.map │ │ │ │ │ │ │ │ └── writer │ │ │ │ │ │ │ │ │ ├── content.css │ │ │ │ │ │ │ │ │ ├── content.min.css │ │ │ │ │ │ │ │ │ └── content.min.css.map │ │ │ │ │ │ │ └── ui │ │ │ │ │ │ │ │ ├── oxide-dark │ │ │ │ │ │ │ │ ├── content.css │ │ │ │ │ │ │ │ ├── content.inline.css │ │ │ │ │ │ │ │ ├── content.inline.min.css │ │ │ │ │ │ │ │ ├── content.inline.min.css.map │ │ │ │ │ │ │ │ ├── content.min.css │ │ │ │ │ │ │ │ ├── content.min.css.map │ │ │ │ │ │ │ │ ├── content.mobile.css │ │ │ │ │ │ │ │ ├── content.mobile.min.css │ │ │ │ │ │ │ │ ├── content.mobile.min.css.map │ │ │ │ │ │ │ │ ├── fonts │ │ │ │ │ │ │ │ │ └── tinymce-mobile.woff │ │ │ │ │ │ │ │ ├── skin.css │ │ │ │ │ │ │ │ ├── skin.min.css │ │ │ │ │ │ │ │ ├── skin.min.css.map │ │ │ │ │ │ │ │ ├── skin.mobile.css │ │ │ │ │ │ │ │ ├── skin.mobile.min.css │ │ │ │ │ │ │ │ └── skin.mobile.min.css.map │ │ │ │ │ │ │ │ └── oxide │ │ │ │ │ │ │ │ ├── content.css │ │ │ │ │ │ │ │ ├── content.inline.css │ │ │ │ │ │ │ │ ├── content.inline.min.css │ │ │ │ │ │ │ │ ├── content.inline.min.css.map │ │ │ │ │ │ │ │ ├── content.min.css │ │ │ │ │ │ │ │ ├── content.min.css.map │ │ │ │ │ │ │ │ ├── content.mobile.css │ │ │ │ │ │ │ │ ├── content.mobile.min.css │ │ │ │ │ │ │ │ ├── content.mobile.min.css.map │ │ │ │ │ │ │ │ ├── fonts │ │ │ │ │ │ │ │ └── tinymce-mobile.woff │ │ │ │ │ │ │ │ ├── skin.min.css │ │ │ │ │ │ │ │ ├── skin.min.css.map │ │ │ │ │ │ │ │ ├── skin.min1.css │ │ │ │ │ │ │ │ ├── skin.mobile.css │ │ │ │ │ │ │ │ ├── skin.mobile.min.css │ │ │ │ │ │ │ │ └── skin.mobile.min.css.map │ │ │ │ │ │ │ ├── themes │ │ │ │ │ │ │ ├── mobile │ │ │ │ │ │ │ │ ├── theme.js │ │ │ │ │ │ │ │ └── theme.min.js │ │ │ │ │ │ │ └── silver │ │ │ │ │ │ │ │ ├── theme.js │ │ │ │ │ │ │ │ └── theme.min.js │ │ │ │ │ │ │ ├── tinymce.js │ │ │ │ │ │ │ └── tinymce.min.js │ │ │ │ │ ├── topBar.js │ │ │ │ │ ├── treetable.js │ │ │ │ │ └── yaml.js │ │ │ │ │ ├── pear.all.js │ │ │ │ │ └── pear.js │ │ │ └── config │ │ │ │ ├── pear.config.json │ │ │ │ └── pear.config.yml │ │ ├── index │ │ │ ├── css │ │ │ │ ├── load.css │ │ │ │ └── main.css │ │ │ ├── font │ │ │ │ ├── demo.css │ │ │ │ ├── demo_index.html │ │ │ │ ├── iconfont.css │ │ │ │ ├── iconfont.eot │ │ │ │ ├── iconfont.js │ │ │ │ ├── iconfont.json │ │ │ │ ├── iconfont.svg │ │ │ │ ├── iconfont.ttf │ │ │ │ ├── iconfont.woff │ │ │ │ └── iconfont.woff2 │ │ │ ├── images │ │ │ │ ├── account_active_ok.png │ │ │ │ ├── admin.png │ │ │ │ ├── ant.PNG │ │ │ │ ├── avatar.png │ │ │ │ ├── boot.png │ │ │ │ ├── code2.png │ │ │ │ ├── empty.png │ │ │ │ ├── error_ic_403.png │ │ │ │ ├── error_ic_404.png │ │ │ │ ├── error_ic_500.png │ │ │ │ ├── error_ic_empty.png │ │ │ │ ├── error_ic_gn.png │ │ │ │ ├── home.png │ │ │ │ ├── ic_alipay_qrcode.png │ │ │ │ ├── ic_pay_ali.png │ │ │ │ ├── ic_pay_qq.png │ │ │ │ ├── ic_pay_wx.png │ │ │ │ ├── icon_date.png │ │ │ │ ├── icon_search.png │ │ │ │ ├── img_qqgroup.png │ │ │ │ ├── img_qr_qq.png │ │ │ │ ├── item-1.jpg │ │ │ │ ├── layui.PNG │ │ │ │ ├── logo - 副本.png │ │ │ │ ├── logo.png │ │ │ │ ├── logo1.png │ │ │ │ ├── logo2.png │ │ │ │ ├── logo3.png │ │ │ │ ├── net.png │ │ │ │ ├── new.svg │ │ │ │ ├── pear.png │ │ │ │ ├── php.png │ │ │ │ ├── show.png │ │ │ │ ├── show2.png │ │ │ │ ├── show3.jpg │ │ │ │ ├── show4.png │ │ │ │ ├── thinkphp.png │ │ │ │ ├── title.PNG │ │ │ │ ├── title2.PNG │ │ │ │ ├── title3.PNG │ │ │ │ ├── un1.svg │ │ │ │ ├── un10.svg │ │ │ │ ├── un11.svg │ │ │ │ ├── un12.svg │ │ │ │ ├── un13.svg │ │ │ │ ├── un14.svg │ │ │ │ ├── un15.svg │ │ │ │ ├── un16.svg │ │ │ │ ├── un17.svg │ │ │ │ ├── un18.svg │ │ │ │ ├── un19.svg │ │ │ │ ├── un2.svg │ │ │ │ ├── un20.svg │ │ │ │ ├── un21.svg │ │ │ │ ├── un22.svg │ │ │ │ ├── un23.svg │ │ │ │ ├── un24.svg │ │ │ │ ├── un25.svg │ │ │ │ ├── un26.svg │ │ │ │ ├── un27.svg │ │ │ │ ├── un28.svg │ │ │ │ ├── un3.svg │ │ │ │ ├── un4.svg │ │ │ │ ├── un5.svg │ │ │ │ ├── un6.svg │ │ │ │ ├── un7.svg │ │ │ │ ├── un8.svg │ │ │ │ ├── un9.svg │ │ │ │ └── vue.png │ │ │ ├── js │ │ │ │ └── common.js │ │ │ ├── layui │ │ │ │ ├── css │ │ │ │ │ ├── layui.css │ │ │ │ │ ├── layui.mobile.css │ │ │ │ │ └── modules │ │ │ │ │ │ ├── code.css │ │ │ │ │ │ ├── laydate │ │ │ │ │ │ └── default │ │ │ │ │ │ │ └── laydate.css │ │ │ │ │ │ └── layer │ │ │ │ │ │ └── default │ │ │ │ │ │ ├── icon-ext.png │ │ │ │ │ │ ├── icon.png │ │ │ │ │ │ ├── layer.css │ │ │ │ │ │ ├── loading-0.gif │ │ │ │ │ │ ├── loading-1.gif │ │ │ │ │ │ └── loading-2.gif │ │ │ │ ├── font │ │ │ │ │ ├── iconfont.eot │ │ │ │ │ ├── iconfont.svg │ │ │ │ │ ├── iconfont.ttf │ │ │ │ │ ├── iconfont.woff │ │ │ │ │ └── iconfont.woff2 │ │ │ │ ├── images │ │ │ │ │ └── face │ │ │ │ │ │ ├── 0.gif │ │ │ │ │ │ ├── 1.gif │ │ │ │ │ │ ├── 10.gif │ │ │ │ │ │ ├── 11.gif │ │ │ │ │ │ ├── 12.gif │ │ │ │ │ │ ├── 13.gif │ │ │ │ │ │ ├── 14.gif │ │ │ │ │ │ ├── 15.gif │ │ │ │ │ │ ├── 16.gif │ │ │ │ │ │ ├── 17.gif │ │ │ │ │ │ ├── 18.gif │ │ │ │ │ │ ├── 19.gif │ │ │ │ │ │ ├── 2.gif │ │ │ │ │ │ ├── 20.gif │ │ │ │ │ │ ├── 21.gif │ │ │ │ │ │ ├── 22.gif │ │ │ │ │ │ ├── 23.gif │ │ │ │ │ │ ├── 24.gif │ │ │ │ │ │ ├── 25.gif │ │ │ │ │ │ ├── 26.gif │ │ │ │ │ │ ├── 27.gif │ │ │ │ │ │ ├── 28.gif │ │ │ │ │ │ ├── 29.gif │ │ │ │ │ │ ├── 3.gif │ │ │ │ │ │ ├── 30.gif │ │ │ │ │ │ ├── 31.gif │ │ │ │ │ │ ├── 32.gif │ │ │ │ │ │ ├── 33.gif │ │ │ │ │ │ ├── 34.gif │ │ │ │ │ │ ├── 35.gif │ │ │ │ │ │ ├── 36.gif │ │ │ │ │ │ ├── 37.gif │ │ │ │ │ │ ├── 38.gif │ │ │ │ │ │ ├── 39.gif │ │ │ │ │ │ ├── 4.gif │ │ │ │ │ │ ├── 40.gif │ │ │ │ │ │ ├── 41.gif │ │ │ │ │ │ ├── 42.gif │ │ │ │ │ │ ├── 43.gif │ │ │ │ │ │ ├── 44.gif │ │ │ │ │ │ ├── 45.gif │ │ │ │ │ │ ├── 46.gif │ │ │ │ │ │ ├── 47.gif │ │ │ │ │ │ ├── 48.gif │ │ │ │ │ │ ├── 49.gif │ │ │ │ │ │ ├── 5.gif │ │ │ │ │ │ ├── 50.gif │ │ │ │ │ │ ├── 51.gif │ │ │ │ │ │ ├── 52.gif │ │ │ │ │ │ ├── 53.gif │ │ │ │ │ │ ├── 54.gif │ │ │ │ │ │ ├── 55.gif │ │ │ │ │ │ ├── 56.gif │ │ │ │ │ │ ├── 57.gif │ │ │ │ │ │ ├── 58.gif │ │ │ │ │ │ ├── 59.gif │ │ │ │ │ │ ├── 6.gif │ │ │ │ │ │ ├── 60.gif │ │ │ │ │ │ ├── 61.gif │ │ │ │ │ │ ├── 62.gif │ │ │ │ │ │ ├── 63.gif │ │ │ │ │ │ ├── 64.gif │ │ │ │ │ │ ├── 65.gif │ │ │ │ │ │ ├── 66.gif │ │ │ │ │ │ ├── 67.gif │ │ │ │ │ │ ├── 68.gif │ │ │ │ │ │ ├── 69.gif │ │ │ │ │ │ ├── 7.gif │ │ │ │ │ │ ├── 70.gif │ │ │ │ │ │ ├── 71.gif │ │ │ │ │ │ ├── 8.gif │ │ │ │ │ │ └── 9.gif │ │ │ │ ├── lay │ │ │ │ │ └── modules │ │ │ │ │ │ ├── carousel.js │ │ │ │ │ │ ├── code.js │ │ │ │ │ │ ├── colorpicker.js │ │ │ │ │ │ ├── element.js │ │ │ │ │ │ ├── flow.js │ │ │ │ │ │ ├── form.js │ │ │ │ │ │ ├── jquery.js │ │ │ │ │ │ ├── laydate.js │ │ │ │ │ │ ├── layedit.js │ │ │ │ │ │ ├── layer.js │ │ │ │ │ │ ├── laypage.js │ │ │ │ │ │ ├── laytpl.js │ │ │ │ │ │ ├── mobile.js │ │ │ │ │ │ ├── rate.js │ │ │ │ │ │ ├── slider.js │ │ │ │ │ │ ├── table.js │ │ │ │ │ │ ├── transfer.js │ │ │ │ │ │ ├── tree.js │ │ │ │ │ │ ├── upload.js │ │ │ │ │ │ └── util.js │ │ │ │ ├── layui.all.js │ │ │ │ └── layui.js │ │ │ └── module │ │ │ │ ├── QRCode.js │ │ │ │ ├── admin.js │ │ │ │ └── formX.js │ │ └── upload │ │ │ ├── 5265086_ncstmkg_1594316803.png │ │ │ ├── 6958819_pear-admin_1607443454.png │ │ │ └── 6958819_pear-admin_1607443454_1.png │ └── templates │ │ ├── .DS_Store │ │ ├── admin │ │ ├── admin_log │ │ │ └── main.html │ │ ├── console │ │ │ └── console.html │ │ ├── index.html │ │ ├── login.html │ │ ├── monitor.html │ │ ├── photo │ │ │ ├── photo.html │ │ │ └── photo_add.html │ │ ├── power │ │ │ ├── add.html │ │ │ ├── edit.html │ │ │ └── main.html │ │ ├── role │ │ │ ├── add.html │ │ │ ├── edit.html │ │ │ ├── main.html │ │ │ └── power.html │ │ └── user │ │ │ ├── add.html │ │ │ ├── edit.html │ │ │ └── main.html │ │ ├── errors │ │ ├── 403.html │ │ ├── 404.html │ │ └── 500.html │ │ └── index │ │ └── index.html └── services │ ├── CaptchaTool.py │ ├── admin │ ├── file.py │ ├── index.py │ ├── power.py │ ├── role.py │ └── user.py │ ├── admin_log.py │ └── route_auth.py ├── initDB.py ├── pear.sql ├── readmes ├── 1.png ├── 2.png ├── 3.png ├── 4.png ├── 5.png ├── 6.png └── home.png └── requirements.txt /.env.example: -------------------------------------------------------------------------------- 1 | SECRET_KEY=secret 2 | DEBUG=True 3 | HOST = '127.0.0.1' 4 | PORT = '3306' 5 | DATABASE = 'PearAdmin' 6 | USERNAME = 'root' 7 | PASSWORD = 'root' -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |

6 | Pear Admin FastAPI 7 |

8 |

9 | 开 箱 即 用 的 FastAPI 快 速 开 发 平 台 10 |

11 | 12 | [预 览](http://flask.pearadmin.com) | [官 网](http://www.pearadmin.com/) | [群聊](https://jq.qq.com/?_wv=1027&k=5OdSmve) | [社区](http://forum.pearadmin.com/) 13 | 14 | ![](readmes/home.png) 15 | 16 |
17 | 18 | #### 项目简介 19 | >Pear Admin FastAPI 基于 FastAPI 的后台管理系统,拥抱应用广泛的python语言,通过使用本系统,即可快速构建你的功能业务 20 | > 21 | >项目旨在为python开发者提供一个后台管理系统的模板,成为您构建信息管理系统,物联网后台....等等应用时灵活,简单的工具 22 | > 23 | >各位Python爱好者多多指教 24 | 25 | #### 内置功能 26 | 27 | - [x] 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 28 | - [x] 权限管理:配置系统菜单,操作权限,按钮权限标识等。 29 | - [x] 角色管理:角色菜单权限分配。 30 | - [x] 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 31 | - [x] 登录日志:系统登录日志记录查询包含登录异常。 32 | - [x] 服务监控:监视当前系统CPU、内存、磁盘、python版本,运行时长等相关信息。 33 | - [x] 文件上传: 图片上传示例 34 | - [ ] 代码生成: 构想中.... 35 | 36 | 37 | #### 预览项目 38 | 39 | | | | 40 | |---------------------|---------------------| 41 | | ![](readmes/1.png) | ![](readmes/2.png) | 42 | | ![](readmes/3.png)| ![](readmes/4.png) | 43 | | ![](readmes/5.png) | ![](readmes/6.png) | 44 | -------------------------------------------------------------------------------- /app/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/.DS_Store -------------------------------------------------------------------------------- /app/api/depends/manager.py: -------------------------------------------------------------------------------- 1 | from fastapi_login import LoginManager 2 | from fastapi_sqlalchemy import db 3 | from app.models.admin import User 4 | from app.core.config import SECRET_KEY 5 | from app.api.errors.notauth_error import NotAuthenticatedException 6 | 7 | manager = LoginManager(SECRET_KEY, token_url='/admin/login', use_cookie=True) 8 | manager.not_authenticated_exception = NotAuthenticatedException 9 | 10 | 11 | @manager.user_loader 12 | def load_user(username: str): # could also be an asynchronous function 13 | user = db.session.query(User).filter_by(username=username).first() 14 | return user -------------------------------------------------------------------------------- /app/api/depends/mem_session.py: -------------------------------------------------------------------------------- 1 | mem_session = dict() -------------------------------------------------------------------------------- /app/api/errors/http_error.py: -------------------------------------------------------------------------------- 1 | from fastapi import HTTPException 2 | from starlette.requests import Request 3 | from starlette.responses import JSONResponse 4 | from starlette.templating import Jinja2Templates 5 | 6 | templates = Jinja2Templates(directory="app/resources/templates") 7 | 8 | 9 | async def http_error_handler(_: Request, exc: HTTPException): 10 | if exc.status_code == 404: 11 | return templates.TemplateResponse("errors/404.html", {"request": _}, status_code=exc.status_code) 12 | elif exc.status_code == 403: 13 | return templates.TemplateResponse("errors/403.html", {"request": _}, status_code=exc.status_code) 14 | elif exc.status_code == 500: 15 | return templates.TemplateResponse("errors/500.html", {"request": _}, status_code=exc.status_code) 16 | return JSONResponse({"errors": [exc.detail]}, status_code=exc.status_code) -------------------------------------------------------------------------------- /app/api/errors/notauth_error.py: -------------------------------------------------------------------------------- 1 | from starlette.responses import RedirectResponse 2 | 3 | class NotAuthenticatedException(Exception): 4 | pass 5 | 6 | # these two argument are mandatory 7 | def exc_handler(request, exc): 8 | return RedirectResponse(url='/admin/login') -------------------------------------------------------------------------------- /app/api/errors/validation_error.py: -------------------------------------------------------------------------------- 1 | from typing import Union 2 | 3 | from fastapi.exceptions import RequestValidationError 4 | from fastapi.openapi.constants import REF_PREFIX 5 | from fastapi.openapi.utils import validation_error_response_definition 6 | from pydantic import ValidationError 7 | from starlette.requests import Request 8 | from starlette.responses import JSONResponse 9 | from starlette.status import HTTP_422_UNPROCESSABLE_ENTITY 10 | 11 | 12 | async def http422_error_handler( 13 | _: Request, 14 | exc: Union[RequestValidationError, ValidationError], 15 | ) -> JSONResponse: 16 | return JSONResponse( 17 | {"errors": exc.errors()}, 18 | status_code=HTTP_422_UNPROCESSABLE_ENTITY, 19 | ) 20 | 21 | 22 | validation_error_response_definition["properties"] = { 23 | "errors": { 24 | "title": "Errors", 25 | "type": "array", 26 | "items": {"$ref": "{0}ValidationError".format(REF_PREFIX)}, 27 | }, 28 | } -------------------------------------------------------------------------------- /app/api/routes/api.py: -------------------------------------------------------------------------------- 1 | from fastapi import APIRouter 2 | 3 | 4 | router = APIRouter() 5 | 6 | from app.api.routes.index import index 7 | from app.api.routes.admin import admin 8 | from app.api.routes.admin import monitor 9 | from app.api.routes.admin import admin_log 10 | from app.api.routes.admin import role 11 | from app.api.routes.admin import power 12 | from app.api.routes.admin import user 13 | from app.api.routes.admin import file 14 | 15 | 16 | router = APIRouter() 17 | 18 | router.include_router(index.router, tags=["index"]) 19 | router.include_router(admin.router, tags=["admin"], prefix="/admin") 20 | router.include_router(monitor.router, tags=["admin:monitor"], prefix="/admin/monitor") 21 | router.include_router(admin_log.router, tags=["admin:log"], prefix="/admin/log") 22 | router.include_router(role.router, tags=["admin:role"], prefix="/admin/role") 23 | router.include_router(power.router, tags=["admin:power"], prefix="/admin/power") 24 | router.include_router(user.router, tags=["admin:user"], prefix="/admin/user") 25 | router.include_router(file.router, tags=["admin:file"], prefix="/admin/file") 26 | -------------------------------------------------------------------------------- /app/api/routes/index/index.py: -------------------------------------------------------------------------------- 1 | from fastapi import APIRouter, Request, Depends 2 | from fastapi.templating import Jinja2Templates 3 | from app.api.depends.manager import manager 4 | 5 | 6 | templates = Jinja2Templates(directory="app/resources/templates") 7 | 8 | 9 | router = APIRouter() 10 | 11 | @router.get("/") 12 | async def index(request: Request): 13 | return templates.TemplateResponse("index/index.html", {"request": request}) 14 | -------------------------------------------------------------------------------- /app/core/config.py: -------------------------------------------------------------------------------- 1 | 2 | import logging 3 | import sys 4 | from typing import List 5 | 6 | from loguru import logger 7 | from starlette.config import Config 8 | from starlette.datastructures import CommaSeparatedStrings 9 | 10 | from app.core.logging import InterceptHandler 11 | 12 | API_PREFIX = "" 13 | 14 | JWT_TOKEN_PREFIX = "Token" # noqa: S105 15 | VERSION = "0.0.0" 16 | 17 | config = Config(".env") 18 | 19 | DEBUG: bool = config("DEBUG", cast=bool, default=False) 20 | 21 | HOST: str = config("HOST", cast=str) 22 | USERNAME: str = config("USERNAME", cast=str) 23 | PASSWORD: str = config("PASSWORD", cast=str) 24 | DATABASE: str = config("DATABASE", cast=str) 25 | PORT: str = config("PORT", cast=str) 26 | 27 | DATABASE_URL = "mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8".format(username=USERNAME,password=PASSWORD, host=HOST,port=PORT, db=DATABASE) 28 | 29 | SECRET_KEY: str = config("SECRET_KEY", cast=str) 30 | 31 | PROJECT_NAME: str = config("PROJECT_NAME", default="FastAPI example application") 32 | ALLOWED_HOSTS: List[str] = config( 33 | "ALLOWED_HOSTS", 34 | cast=CommaSeparatedStrings, 35 | default="", 36 | ) 37 | 38 | # logging configuration 39 | 40 | LOGGING_LEVEL = logging.DEBUG if DEBUG else logging.INFO 41 | LOGGERS = ("uvicorn.asgi", "uvicorn.access") 42 | 43 | logging.getLogger().handlers = [InterceptHandler()] 44 | for logger_name in LOGGERS: 45 | logging_logger = logging.getLogger(logger_name) 46 | logging_logger.handlers = [InterceptHandler(level=LOGGING_LEVEL)] 47 | 48 | logger.configure(handlers=[{"sink": sys.stderr, "level": LOGGING_LEVEL}]) -------------------------------------------------------------------------------- /app/core/events.py: -------------------------------------------------------------------------------- 1 | from typing import Callable 2 | 3 | from fastapi import FastAPI 4 | from loguru import logger 5 | 6 | 7 | def create_start_app_handler(app: FastAPI) -> Callable: # type: ignore 8 | async def start_app() -> None: 9 | pass 10 | 11 | return start_app 12 | 13 | 14 | def create_stop_app_handler(app: FastAPI) -> Callable: # type: ignore 15 | @logger.catch 16 | async def stop_app() -> None: 17 | pass 18 | 19 | return stop_app -------------------------------------------------------------------------------- /app/core/logging.py: -------------------------------------------------------------------------------- 1 | import logging 2 | from types import FrameType 3 | from typing import cast 4 | 5 | from loguru import logger 6 | 7 | 8 | class InterceptHandler(logging.Handler): 9 | def emit(self, record: logging.LogRecord) -> None: # pragma: no cover 10 | # Get corresponding Loguru level if it exists 11 | try: 12 | level = logger.level(record.levelname).name 13 | except ValueError: 14 | level = str(record.levelno) 15 | 16 | # Find caller from where originated the logged message 17 | frame, depth = logging.currentframe(), 2 18 | while frame.f_code.co_filename == logging.__file__: # noqa: WPS609 19 | frame = cast(FrameType, frame.f_back) 20 | depth += 1 21 | 22 | logger.opt(depth=depth, exception=record.exc_info).log( 23 | level, 24 | record.getMessage(), 25 | ) -------------------------------------------------------------------------------- /app/main.py: -------------------------------------------------------------------------------- 1 | from fastapi import FastAPI 2 | from fastapi.exceptions import RequestValidationError 3 | from starlette.exceptions import HTTPException 4 | from starlette.middleware.cors import CORSMiddleware 5 | from fastapi_sqlalchemy import DBSessionMiddleware # middleware helper 6 | 7 | from app.api.errors.http_error import http_error_handler 8 | from app.api.errors.validation_error import http422_error_handler 9 | from app.api.errors.notauth_error import NotAuthenticatedException, exc_handler 10 | from app.api.routes.api import router as api_router 11 | from app.core.config import ALLOWED_HOSTS, API_PREFIX, DEBUG, PROJECT_NAME, VERSION, DATABASE_URL 12 | from app.core.events import create_start_app_handler, create_stop_app_handler 13 | from starlette.responses import RedirectResponse 14 | from fastapi.staticfiles import StaticFiles 15 | 16 | 17 | def get_application() -> FastAPI: 18 | application = FastAPI(title=PROJECT_NAME, debug=DEBUG, version=VERSION) 19 | 20 | application.add_middleware( 21 | CORSMiddleware, 22 | allow_origins=ALLOWED_HOSTS or ["*"], 23 | allow_credentials=True, 24 | allow_methods=["*"], 25 | allow_headers=["*"], 26 | ) 27 | application.add_middleware(DBSessionMiddleware, db_url=DATABASE_URL) 28 | 29 | application.mount("/static", StaticFiles(directory="app/resources/static"), name="static") 30 | 31 | application.add_event_handler("startup", create_start_app_handler(application)) 32 | application.add_event_handler("shutdown", create_stop_app_handler(application)) 33 | 34 | application.add_exception_handler(HTTPException, http_error_handler) 35 | application.add_exception_handler(RequestValidationError, http422_error_handler) 36 | application.add_exception_handler(NotAuthenticatedException, exc_handler) 37 | 38 | application.include_router(api_router, prefix=API_PREFIX) 39 | 40 | 41 | return application 42 | 43 | 44 | app = get_application() -------------------------------------------------------------------------------- /app/resources/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/.DS_Store -------------------------------------------------------------------------------- /app/resources/static/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/.DS_Store -------------------------------------------------------------------------------- /app/resources/static/admin/admin/css/load.css: -------------------------------------------------------------------------------- 1 | .loader-main{ 2 | position: fixed; 3 | width: 100%; 4 | height: 100%; 5 | background-color: whitesmoke; 6 | z-index: 9999999; 7 | margin-top: -61px; 8 | } 9 | .loader { 10 | width: 50px; 11 | height: 50px; 12 | margin: 30px auto 40px; 13 | margin-top: 20%; 14 | position: relative; 15 | z-index: 999999; 16 | background-color: whitesmoke; 17 | } 18 | .loader:before { 19 | content: ""; 20 | width: 50px; 21 | height: 7px; 22 | border-radius: 50%; 23 | background: #000; 24 | opacity: 0.1; 25 | position: absolute; 26 | top: 59px; 27 | left: 0; 28 | animation: shadow .5s linear infinite; 29 | } 30 | .loader:after { 31 | content: ""; 32 | width: 50px; 33 | height: 50px; 34 | border-radius: 3px; 35 | background-color: #5FB878; 36 | position: absolute; 37 | top: 0; 38 | left: 0; 39 | animation: loading .5s linear infinite; 40 | } 41 | @-webkit-keyframes loading { 42 | 17% { 43 | border-bottom-right-radius: 3px; 44 | } 45 | 46 | 25% { 47 | transform: translateY(9px) rotate(22.5deg); 48 | } 49 | 50 | 50% { 51 | transform: translateY(18px) scale(1, 0.9) rotate(45deg); 52 | border-bottom-right-radius: 40px; 53 | } 54 | 55 | 75% { 56 | transform: translateY(9px) rotate(67.5deg); 57 | } 58 | 59 | 100% { 60 | transform: translateY(0) rotate(90deg); 61 | } 62 | } 63 | @keyframes loading { 64 | 17% { 65 | border-bottom-right-radius: 3px; 66 | } 67 | 68 | 25% { 69 | transform: translateY(9px) rotate(22.5deg); 70 | } 71 | 72 | 50% { 73 | transform: translateY(18px) scale(1, 0.9) rotate(45deg); 74 | border-bottom-right-radius: 40px; 75 | } 76 | 77 | 75% { 78 | transform: translateY(9px) rotate(67.5deg); 79 | } 80 | 81 | 100% { 82 | transform: translateY(0) rotate(90deg); 83 | } 84 | } 85 | @-webkit-keyframes shadow { 86 | 87 | 0%, 88 | 100% { 89 | transform: scale(1, 1); 90 | } 91 | 92 | 50% { 93 | transform: scale(1.2, 1); 94 | } 95 | } 96 | @keyframes shadow { 97 | 98 | 0%, 99 | 100% { 100 | transform: scale(1, 1); 101 | } 102 | 103 | 50% { 104 | transform: scale(1.2, 1); 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /app/resources/static/admin/admin/css/other/console2.css: -------------------------------------------------------------------------------- 1 | .pear-container {background-color: whitesmoke;margin: 10px;} 2 | .pear-card {width: 100%;height: 66px;background-color: #F8F8F8;display: inline-block;border-radius: 5px;text-align: center;margin-bottom: 3px;} 3 | .pear-card:hover,.pear-card2:hover{box-shadow: 2px 0 8px 0 lightgray!important;}.pear-card2 {width: 100%;height: 90px;background-color: #F8F8F8;display: inline-block;border-radius: 5px;text-align: center;margin-bottom: 3px;} 4 | .pear-card2 i {font-size: 30px;height: 90px;line-height: 90px;} 5 | .pear-card i {font-size: 30px;height: 66px;line-height: 66px;} 6 | .layui-col-md3 {text-align: center;} 7 | .pear-card-title {margin-top: 3px;} 8 | .person img {width: 90px;height: 90px;border-radius: 4px;margin-top: 8px;margin-left: 8px;} 9 | .pear-card2 .count {color: #51A351;font-size: 30px;margin-top: 12px;} 10 | .pear-card2 .title {color: gray;font-size: 14px;margin-top: 14px;} 11 | .pear-card-status {padding: 0 10px 10px;} 12 | .pear-card-status li {position: relative;padding: 10px 0;border-bottom: 1px solid #EEE;} 13 | .pear-card-status li h3 {padding-bottom: 5px;font-weight: 700;} 14 | .pear-card-status li p {padding-bottom: 10px;padding-top: 3px ;} 15 | .pear-card-status li>span {color: #999;} 16 | .pear-reply {position: absolute;right: 20px;} 17 | .person .title{font-size: 17px;font-weight: 600;margin-left: 18px;margin-top: 16px;position: absolute;display: inline-block;} 18 | .person .desc{font-size: 16px;font-weight: 600;margin-left: 115px;margin-top: -30px;position: absolute;display: inline-block;} -------------------------------------------------------------------------------- /app/resources/static/admin/admin/css/other/department.css: -------------------------------------------------------------------------------- 1 | .organizationTree { 2 | width: 100% !important; 3 | height: -webkit-calc(100vh - 130px); 4 | height: -moz-calc(100vh - 130px); 5 | height: calc(100vh - 130px); 6 | } 7 | -------------------------------------------------------------------------------- /app/resources/static/admin/admin/css/other/error.css: -------------------------------------------------------------------------------- 1 | * { 2 | padding: 0; 3 | margin: 0; 4 | font-size: 0.38rem; 5 | } 6 | 7 | ul { 8 | list-style: none; 9 | } 10 | 11 | a { 12 | text-decoration: none; 13 | -webkit-tap-highlight-color: transparent 14 | } 15 | 16 | .clearfix:after { 17 | content: ''; 18 | width: 0; 19 | height: 0; 20 | display: block; 21 | clear: both; 22 | } 23 | 24 | html { 25 | height: 100%; 26 | width: 100%; 27 | } 28 | 29 | body { 30 | font-size: 0.28rem; 31 | height: 100%; 32 | width: 100%; 33 | display: flex; 34 | flex-direction: column; 35 | position: relative; 36 | background-color: white !important; 37 | } 38 | 39 | .content { 40 | position: absolute; 41 | top: 50%; 42 | transform: translateY(-50%); 43 | width: 100%; 44 | text-align: center; 45 | } 46 | 47 | .content>img { 48 | height: 300px; 49 | max-width: 370px; 50 | margin-right: 180px; 51 | } 52 | 53 | .content>* { 54 | display: inline-block; 55 | } 56 | 57 | .content-r { 58 | vertical-align: top; 59 | } 60 | 61 | .content-r>h1 { 62 | font-size: 72px; 63 | color: #434e59; 64 | margin-bottom: 24px; 65 | font-weight: 600; 66 | } 67 | 68 | .content-r>p { 69 | font-size: 20px; 70 | color: rgba(0, 0, 0, .45); 71 | margin-bottom: 16px; 72 | } 73 | 74 | button { 75 | margin-top: 20px; 76 | } 77 | -------------------------------------------------------------------------------- /app/resources/static/admin/admin/css/other/login.css: -------------------------------------------------------------------------------- 1 | .layui-form { 2 | width: 320px !important; 3 | margin: auto !important; 4 | margin-top: 160px !important; 5 | } 6 | 7 | .layui-form button { 8 | width: 100% !important; 9 | height: 44px !important; 10 | line-height: 44px !important; 11 | font-size: 16px !important; 12 | background-color: #5FB878 !important; 13 | font-weight: 550 !important; 14 | } 15 | 16 | .layui-form-checked[lay-skin=primary] i { 17 | border-color: #5FB878 !important; 18 | background-color: #5FB878 !important; 19 | color: #fff !important; 20 | } 21 | 22 | .layui-tab-content { 23 | margin-top: 15px !important; 24 | padding-left: 0px !important; 25 | padding-right: 0px !important; 26 | } 27 | 28 | .layui-form-item { 29 | margin-top: 20px !important; 30 | } 31 | 32 | .layui-input { 33 | height: 44px !important; 34 | line-height: 44px !important; 35 | padding-left: 15px !important; 36 | border-radius: 3px !important; 37 | } 38 | 39 | .layui-input:focus { 40 | box-shadow: 0px 0px 3px 1px #5FB878 !important; 41 | } 42 | 43 | .logo { 44 | width: 60px !important; 45 | margin-top: 10px !important; 46 | margin-bottom: 10px !important; 47 | margin-left: 20px !important; 48 | } 49 | 50 | .title { 51 | font-size: 30px !important; 52 | font-weight: 550 !important; 53 | margin-left: 20px !important; 54 | color: #5FB878 !important; 55 | display: inline-block !important; 56 | height: 60px !important; 57 | line-height: 60px !important; 58 | margin-top: 10px !important; 59 | position: absolute !important; 60 | } 61 | 62 | .desc { 63 | width: 100% !important; 64 | text-align: center !important; 65 | color: gray !important; 66 | height: 60px !important; 67 | line-height: 60px !important; 68 | } 69 | 70 | body { 71 | background-repeat:no-repeat; 72 | background-color: whitesmoke; 73 | background-size: 100%; 74 | height: 100%; 75 | } 76 | 77 | .code { 78 | float: left; 79 | margin-right: 13px; 80 | margin: 0px !important; 81 | border: #e6e6e6 1px solid; 82 | display: inline-block!important; 83 | } 84 | 85 | .codeImage { 86 | float: right; 87 | height: 42px; 88 | border: #e6e6e6 1px solid; 89 | } 90 | -------------------------------------------------------------------------------- /app/resources/static/admin/admin/css/other/person.css: -------------------------------------------------------------------------------- 1 | .pear-container { 2 | background-color: whitesmoke; 3 | margin: 10px; 4 | } 5 | .layui-body { 6 | padding: 25px; 7 | } 8 | .text-center { 9 | text-align: center; 10 | } 11 | .user-info-head { 12 | width: 110px; 13 | height: 110px; 14 | line-height: 110px; 15 | position: relative; 16 | display: inline-block; 17 | border-radius: 50%; 18 | overflow: hidden; 19 | cursor: pointer; 20 | margin: 0 auto; 21 | } 22 | .layui-line-dash { 23 | border-bottom: 1px dashed #ccc; 24 | margin: 15px 0; 25 | } 26 | .comment { 27 | position: absolute; 28 | bottom: 3px; 29 | right: 10px; 30 | font-size: 12px; 31 | color: dimgray; 32 | } 33 | .content { 34 | padding-left: 13px; 35 | font-size: 13px; 36 | color: dimgray; 37 | } 38 | .title { 39 | padding-left: 13.5px; 40 | } 41 | .layui-tab-title { 42 | border-bottom: none; 43 | } 44 | .fl-item { 45 | height: 30px; 46 | font-size: 13.5; 47 | } 48 | .dot { 49 | width: 10px; 50 | height: 10px; 51 | border-radius: 50px; 52 | background-color: gray; 53 | display: inline-block; 54 | margin-right: 10px; 55 | } 56 | 57 | .list .list-item { 58 | height: 32px; 59 | line-height: 32px; 60 | color: gray; 61 | padding: 5px; 62 | padding-left: 15px; 63 | border-radius: 4px; 64 | margin-top: 5.2px; 65 | } 66 | 67 | .list .list-item:hover { 68 | background-color: whitesmoke; 69 | } 70 | 71 | .list .list-item .title { 72 | font-size: 13px; 73 | width: 100%; 74 | } 75 | 76 | .list .list-item .footer { 77 | position: absolute; 78 | right: 30px; 79 | font-size: 12px; 80 | } 81 | -------------------------------------------------------------------------------- /app/resources/static/admin/admin/css/other/result.css: -------------------------------------------------------------------------------- 1 | .result { 2 | text-align: center; 3 | 4 | } 5 | .result .success svg { 6 | color: #32C682; 7 | text-align: center; 8 | margin-top: 40px; 9 | 10 | } 11 | .result .error svg { 12 | color: #f56c6c; 13 | text-align: center; 14 | margin-top: 40px; 15 | 16 | } 17 | .result .title { 18 | margin-top: 25px; 19 | 20 | } 21 | .result .desc { 22 | margin-top: 25px; 23 | width: 60%; 24 | margin-left: 20%; 25 | color: rgba(0, 0, 0, .45); 26 | } 27 | .result .content { 28 | margin-top: 20px; 29 | width: 80%; 30 | border-radius: 10px; 31 | background-color: whitesmoke; 32 | height: 200px; 33 | margin-left: 10%; 34 | } 35 | .result .action { 36 | padding-top: 10px; 37 | border-top: 1px whitesmoke solid; 38 | margin-top: 25px; 39 | } 40 | -------------------------------------------------------------------------------- /app/resources/static/admin/admin/data/card.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": 0, 3 | "msg": "...", 4 | "count": 3, 5 | "data": [{ 6 | "id": "1", 7 | "image": "https://gw.alipayobjects.com/zos/rmsportal/gLaIAoVWTtLbBWZNYEMg.png", 8 | "title": "Alipay", 9 | "remark": "那是一种内在的东西, 他们到达不了,也无法触及的", 10 | "time": "几秒前" 11 | },{ 12 | "id": "2", 13 | "image": "https://gw.alipayobjects.com/zos/rmsportal/iXjVmWVHbCJAyqvDxdtx.png", 14 | "title": "Layui", 15 | "remark": "生命就像一盒巧克力,结果往往出人意料", 16 | "time": "几秒前" 17 | },{ 18 | "id": "1", 19 | "image": "https://gw.alipayobjects.com/zos/rmsportal/iZBVOIhGJiAnhplqjvZW.png", 20 | "title": "Angular", 21 | "remark": "希望是一个好东西,也许是最好的,好东西是不会消亡的", 22 | "time": "几秒前" 23 | }, 24 | { 25 | "id": "1", 26 | "image": "https://gw.alipayobjects.com/zos/rmsportal/uMfMFlvUuceEyPpotzlq.png", 27 | "title": "React", 28 | "remark": "那是一种内在的东西, 他们到达不了,也无法触及的", 29 | "time": "几秒前" 30 | },{ 31 | "id": "1", 32 | "image": "https://gw.alipayobjects.com/zos/rmsportal/gLaIAoVWTtLbBWZNYEMg.png", 33 | "title": "Alipay", 34 | "remark": "那是一种内在的东西, 他们到达不了,也无法触及的", 35 | "time": "几秒前" 36 | },{ 37 | "id": "2", 38 | "image": "https://gw.alipayobjects.com/zos/rmsportal/iXjVmWVHbCJAyqvDxdtx.png", 39 | "title": "Layui", 40 | "remark": "生命就像一盒巧克力,结果往往出人意料", 41 | "time": "几秒前" 42 | },{ 43 | "id": "1", 44 | "image": "https://gw.alipayobjects.com/zos/rmsportal/iZBVOIhGJiAnhplqjvZW.png", 45 | "title": "Angular", 46 | "remark": "希望是一个好东西,也许是最好的,好东西是不会消亡的", 47 | "time": "几秒前" 48 | }, 49 | { 50 | "id": "1", 51 | "image": "https://gw.alipayobjects.com/zos/rmsportal/uMfMFlvUuceEyPpotzlq.png", 52 | "title": "React", 53 | "remark": "那是一种内在的东西, 他们到达不了,也无法触及的", 54 | "time": "几秒前" 55 | }] 56 | } 57 | -------------------------------------------------------------------------------- /app/resources/static/admin/admin/data/dataTree2.json: -------------------------------------------------------------------------------- 1 | { 2 | "status":{"code":200,"message":"操作成功"}, 3 | "data": [ 4 | {"id":"001","title": "湖南省","checkArr": "0","parentId": "0"}, 5 | {"id":"002","title": "湖北省","checkArr": "0","parentId": "0"}, 6 | {"id":"003","title": "广东省","checkArr": "0","parentId": "0"}, 7 | {"id":"004","title": "浙江省","checkArr": "0","parentId": "0"}, 8 | {"id":"005","title": "福建省","checkArr": "0","parentId": "0"} 9 | ] 10 | } -------------------------------------------------------------------------------- /app/resources/static/admin/admin/data/dictData.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": 0, 3 | "msg": null, 4 | "count": 2, 5 | "data": [{ 6 | "createTime": null, 7 | "createBy": null, 8 | "createName": null, 9 | "updateTime": null, 10 | "updateBy": null, 11 | "updateName": null, 12 | "remark": "男 : body", 13 | "params": null, 14 | "dataId": "1317401149287956480", 15 | "dataLabel": "男", 16 | "dataValue": "boy", 17 | "typeCode": "user_sex", 18 | "isDefault": null, 19 | "enable": "0" 20 | }, { 21 | "createTime": null, 22 | "createBy": null, 23 | "createName": null, 24 | "updateTime": null, 25 | "updateBy": null, 26 | "updateName": null, 27 | "remark": "女 : girl", 28 | "params": null, 29 | "dataId": "1317402976670711808", 30 | "dataLabel": "女", 31 | "dataValue": "girl", 32 | "typeCode": "user_sex", 33 | "isDefault": null, 34 | "enable": "0" 35 | }] 36 | } 37 | -------------------------------------------------------------------------------- /app/resources/static/admin/admin/data/document.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/admin/data/document.json -------------------------------------------------------------------------------- /app/resources/static/admin/admin/data/message.json: -------------------------------------------------------------------------------- 1 | [{ 2 | "id": 1, 3 | "title": "私信", 4 | "children": [{ 5 | "id": 11, 6 | "avatar":"admin/images/avatar.jpg", 7 | "title": "收到一条私人消息", 8 | "context": "这是消息内容。", 9 | "form": "就眠仪式", 10 | "time": "2019-02-15" 11 | }, { 12 | "id": 12, 13 | "avatar":"admin/images/avatar.jpg", 14 | "title": "收到一条私人消息", 15 | "context": "这是消息内容。", 16 | "form": "就眠仪式", 17 | "time": "2019-02-15" 18 | }] 19 | }, 20 | { 21 | "id": 2, 22 | "title": "消息", 23 | "children": [{ 24 | "id": 11, 25 | "avatar":"admin/images/avatar.jpg", 26 | "title": "收到一条紧急任务", 27 | "context": "这是消息内容。", 28 | "form": "就眠仪式", 29 | "time": "2019-02-15" 30 | }, { 31 | "id": 12, 32 | "avatar":"admin/images/avatar.jpg", 33 | "title": "收到一条紧急任务", 34 | "context": "这是消息内容。", 35 | "form": "就眠仪式", 36 | "time": "2019-02-15" 37 | }, 38 | { 39 | "id": 11, 40 | "avatar":"admin/images/avatar.jpg", 41 | "title": "收到一条紧急任务", 42 | "context": "这是消息内容。", 43 | "form": "就眠仪式", 44 | "time": "2019-02-15" 45 | }, { 46 | "id": 12, 47 | "avatar":"admin/images/avatar.jpg", 48 | "title": "收到一条紧急任务", 49 | "context": "这是消息内容。", 50 | "form": "就眠仪式", 51 | "time": "2019-02-15" 52 | }, 53 | { 54 | "id": 11, 55 | "avatar":"admin/images/avatar.jpg", 56 | "title": "收到一条紧急任务", 57 | "context": "这是消息内容。", 58 | "form": "就眠仪式", 59 | "time": "2019-02-15" 60 | }, { 61 | "id": 12, 62 | "avatar":"admin/images/avatar.jpg", 63 | "title": "收到一条紧急任务", 64 | "context": "这是消息内容。", 65 | "form": "就眠仪式", 66 | "time": "2019-02-15" 67 | }] 68 | }, 69 | { 70 | "id": 3, 71 | "title": "通知", 72 | "children": [{ 73 | "id": 11, 74 | "avatar":"admin/images/avatar.jpg", 75 | "title": "收到一条警告通知", 76 | "context": "这是消息内容。", 77 | "form": "就眠仪式", 78 | "time": "2019-02-15" 79 | }, { 80 | "id": 12, 81 | "avatar":"admin/images/avatar.jpg", 82 | "title": "收到一条警告通知", 83 | "context": "这是消息内容。", 84 | "form": "就眠仪式", 85 | "time": "2019-02-15" 86 | }] 87 | } 88 | ] 89 | -------------------------------------------------------------------------------- /app/resources/static/admin/admin/data/organization.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": 0, 3 | "msg": "...", 4 | "count": 3, 5 | "data": [{ 6 | "name": "软件部", 7 | "userCount": 324, 8 | "location": "二楼201", 9 | "leader": "皮卡丘" 10 | },{ 11 | "name": "美工部", 12 | "userCount": 98, 13 | "location": "二楼101", 14 | "leader": "皮卡丘" 15 | },{ 16 | "name": "设计部", 17 | "userCount": 43, 18 | "location": "六楼602", 19 | "leader": "皮卡丘" 20 | },{ 21 | "name": "销售部", 22 | "userCount": 12, 23 | "location": "一楼131", 24 | "leader": "皮卡丘" 25 | },{ 26 | "name": "产品部", 27 | "userCount": 128, 28 | "location": "四楼401", 29 | "leader": "皮卡丘" 30 | },{ 31 | "name": "财务部", 32 | "userCount": 23, 33 | "location": "三楼105", 34 | "leader": "皮卡丘" 35 | },{ 36 | "name": "人事部", 37 | "userCount": 67, 38 | "location": "二楼201", 39 | "leader": "皮卡丘" 40 | }] 41 | } 42 | -------------------------------------------------------------------------------- /app/resources/static/admin/admin/data/role.json: -------------------------------------------------------------------------------- 1 | {"createTime":null,"createBy":null,"updateTime":null,"updateBy":null,"remark":null,"code":0,"msg":"...","count":3,"data":[{"createTime":null,"createBy":null,"updateTime":null,"updateBy":null,"remark":null,"roleId":"1","roleName":"超级管理员","roleCode":"admin","enable":"1","details":"超级管理员","checked":false},{"createTime":null,"createBy":null,"updateTime":null,"updateBy":null,"remark":null,"roleId":"2","roleName":"普通管理员","roleCode":"manager","enable":"0","details":"普通管理员","checked":false},{"createTime":null,"createBy":null,"updateTime":null,"updateBy":null,"remark":null,"roleId":"3","roleName":"普通用户","roleCode":"pearson","enable":"0","details":"普通用户","checked":false}]} -------------------------------------------------------------------------------- /app/resources/static/admin/admin/data/routes.json: -------------------------------------------------------------------------------- 1 | [{ 2 | "id": 1, 3 | "title": "工作空间", 4 | "type": 0, 5 | "icon": "layui-icon layui-icon-console", 6 | "href": "", 7 | "children": [{ 8 | "id": 10, 9 | "title": "控制后台", 10 | "icon": "layui-icon layui-icon-console", 11 | "type": 1, 12 | "openType": "_iframe", 13 | "href": "view/console/console1.html" 14 | }] 15 | }] 16 | -------------------------------------------------------------------------------- /app/resources/static/admin/admin/images/act.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/admin/images/act.jpg -------------------------------------------------------------------------------- /app/resources/static/admin/admin/images/avatar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/admin/images/avatar.jpg -------------------------------------------------------------------------------- /app/resources/static/admin/admin/images/captcha.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/admin/images/captcha.gif -------------------------------------------------------------------------------- /app/resources/static/admin/admin/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/admin/images/logo.png -------------------------------------------------------------------------------- /app/resources/static/admin/admin/images/show.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/admin/images/show.png -------------------------------------------------------------------------------- /app/resources/static/admin/component/code/css/style.css: -------------------------------------------------------------------------------- 1 | html,body{background-color: whitesmoke} 2 | .layui-fluid{margin-top: 15px;} 3 | .content{min-height: 796px;} 4 | .nav{text-align: center;} 5 | .nav button{margin-bottom: 3px;width: 100%;margin-top: 3px;margin-bottom: 3px;border-radius: 1px;} 6 | .nav button:hover{background-color: #5FB878;border: 1px solid #5FB878;color: white;} 7 | .layui-card-body .layui-btn+.layui-btn{margin-left: 0px;} 8 | .code-show{min-height: 454px;} 9 | .js-show{min-height: 200px;} -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/css/modules/code.css: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.7 MIT License */ 2 | html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none} -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/css/modules/layer/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/css/modules/layer/default/icon-ext.png -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/css/modules/layer/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/css/modules/layer/default/icon.png -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/css/modules/layer/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/css/modules/layer/default/loading-0.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/css/modules/layer/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/css/modules/layer/default/loading-1.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/css/modules/layer/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/css/modules/layer/default/loading-2.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/font/iconfont.eot -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/font/iconfont.ttf -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/font/iconfont.woff -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/font/iconfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/font/iconfont.woff2 -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/0.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/1.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/10.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/10.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/11.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/11.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/12.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/12.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/13.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/13.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/14.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/14.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/15.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/15.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/16.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/16.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/17.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/17.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/18.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/18.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/19.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/19.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/2.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/20.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/20.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/21.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/21.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/22.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/22.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/23.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/23.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/24.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/24.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/25.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/25.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/26.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/26.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/27.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/27.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/28.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/28.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/29.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/29.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/3.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/30.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/30.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/31.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/31.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/32.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/32.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/33.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/33.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/34.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/34.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/35.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/35.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/36.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/36.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/37.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/37.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/38.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/38.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/39.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/39.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/4.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/40.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/40.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/41.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/41.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/42.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/42.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/43.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/43.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/44.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/44.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/45.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/45.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/46.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/46.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/47.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/47.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/48.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/48.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/49.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/49.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/5.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/50.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/50.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/51.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/51.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/52.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/52.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/53.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/53.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/54.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/54.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/55.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/55.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/56.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/56.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/57.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/57.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/58.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/58.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/59.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/59.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/6.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/6.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/60.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/60.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/61.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/61.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/62.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/62.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/63.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/63.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/64.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/64.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/65.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/65.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/66.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/66.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/67.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/67.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/68.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/68.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/69.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/69.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/7.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/7.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/70.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/70.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/71.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/71.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/8.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/8.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/images/face/9.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/layui/images/face/9.gif -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/lay/modules/code.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.7 MIT License */ 2 | ;layui.define("jquery",function(e){"use strict";var a=layui.$,l="http://www.layui.com/doc/modules/code.html";e("code",function(e){var t=[];e=e||{},e.elem=a(e.elem||".layui-code"),e.about=!("about"in e)||e.about,e.elem.each(function(){t.push(this)}),layui.each(t.reverse(),function(t,i){var c=a(i),o=c.html();(c.attr("lay-encode")||e.encode)&&(o=o.replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")),c.html('
  1. '+o.replace(/[\r\t\n]+/g,"
  2. ")+"
"),c.find(">.layui-code-h3")[0]||c.prepend('

'+(c.attr("lay-title")||e.title||"code")+(e.about?'layui.code':"")+"

");var d=c.find(">.layui-code-ol");c.addClass("layui-box layui-code-view"),(c.attr("lay-skin")||e.skin)&&c.addClass("layui-code-"+(c.attr("lay-skin")||e.skin)),(d.find("li").length/100|0)>0&&d.css("margin-left",(d.find("li").length/100|0)+"px"),(c.attr("lay-height")||e.height)&&d.css("max-height",c.attr("lay-height")||e.height)})})}).addcss("modules/code.css","skincodecss"); -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/lay/modules/flow.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.7 MIT License */ 2 | ;layui.define("jquery",function(e){"use strict";var l=layui.$,o=function(e){},t='';o.prototype.load=function(e){var o,i,n,r,a=this,c=0;e=e||{};var f=l(e.elem);if(f[0]){var m=l(e.scrollElem||document),u=e.mb||50,s=!("isAuto"in e)||e.isAuto,v=e.end||"没有更多了",y=e.scrollElem&&e.scrollElem!==document,d="加载更多",h=l('
'+d+"
");f.find(".layui-flow-more")[0]||f.append(h);var p=function(e,t){e=l(e),h.before(e),t=0==t||null,t?h.html(v):h.find("a").html(d),i=t,o=null,n&&n()},g=function(){o=!0,h.find("a").html(t),"function"==typeof e.done&&e.done(++c,p)};if(g(),h.find("a").on("click",function(){l(this);i||o||g()}),e.isLazyimg)var n=a.lazyimg({elem:e.elem+" img",scrollElem:e.scrollElem});return s?(m.on("scroll",function(){var e=l(this),t=e.scrollTop();r&&clearTimeout(r),!i&&f.width()&&(r=setTimeout(function(){var i=y?e.height():l(window).height(),n=y?e.prop("scrollHeight"):document.documentElement.scrollHeight;n-t-i<=u&&(o||g())},100))}),a):a}},o.prototype.lazyimg=function(e){var o,t=this,i=0;e=e||{};var n=l(e.scrollElem||document),r=e.elem||"img",a=e.scrollElem&&e.scrollElem!==document,c=function(e,l){var o=n.scrollTop(),r=o+l,c=a?function(){return e.offset().top-n.offset().top+o}():e.offset().top;if(c>=o&&c<=r&&!e.attr("src")){var m=e.attr("lay-src");layui.img(m,function(){var l=t.lazyimg.elem.eq(i);e.attr("src",m).removeAttr("lay-src"),l[0]&&f(l),i++})}},f=function(e,o){var f=a?(o||n).height():l(window).height(),m=n.scrollTop(),u=m+f;if(t.lazyimg.elem=l(r),e)c(e,f);else for(var s=0;su)break}};if(f(),!o){var m;n.on("scroll",function(){var e=l(this);m&&clearTimeout(m),m=setTimeout(function(){f(null,e)},50)}),o=!0}return f},e("flow",new o)}); -------------------------------------------------------------------------------- /app/resources/static/admin/component/layui/lay/modules/laytpl.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.7 MIT License */ 2 | ;layui.define(function(e){"use strict";var r={open:"{{",close:"}}"},c={exp:function(e){return new RegExp(e,"g")},query:function(e,c,t){var o=["#([\\s\\S])+?","([^{#}])*?"][e||0];return n((c||"")+r.open+o+r.close+(t||""))},escape:function(e){return String(e||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")},error:function(e,r){var c="Laytpl Error:";return"object"==typeof console&&console.error(c+e+"\n"+(r||"")),c+e}},n=c.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=n("^"+r.open+"#",""),l=n(r.close+"$","");e=e.replace(/\s+|\r|\t|\n/g," ").replace(n(r.open+"#"),r.open+"# ").replace(n(r.close+"}"),"} "+r.close).replace(/\\/g,"\\\\").replace(n(r.open+"!(.+?)!"+r.close),function(e){return e=e.replace(n("^"+r.open+"!"),"").replace(n("!"+r.close),"").replace(n(r.open+"|"+r.close),function(e){return e.replace(/(.)/g,"\\$1")})}).replace(/(?="|')/g,"\\").replace(c.query(),function(e){return e=e.replace(a,"").replace(l,""),'";'+e.replace(/\\/g,"")+';view+="'}).replace(c.query(1),function(e){var c='"+(';return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(n(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),c='"+_escape_('),c+e.replace(/\\/g,"")+')+"')}),e='"use strict";var view = "'+e+'";return view;';try{return o.cache=e=new Function("d, _escape_",e),e(t,c.escape)}catch(u){return delete o.cache,c.error(u,p)}},t.pt.render=function(e,r){var n,t=this;return e?(n=t.cache?t.cache(e,c.escape):t.parse(t.tpl,e),r?void r(n):n):c.error("no data")};var o=function(e){return"string"!=typeof e?c.error("Template not found"):new t(e)};o.config=function(e){e=e||{};for(var c in e)r[c]=e[c]},o.v="1.2.0",e("laytpl",o)}); -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/css/pear-module/card.css: -------------------------------------------------------------------------------- 1 | .project-list-item { 2 | background-color: #fff; 3 | border-radius: 4px; 4 | cursor: pointer; 5 | transition: all .2s; 6 | } 7 | 8 | .project-list-item:hover { 9 | box-shadow: 2px 0 4px rgba(0, 21, 41, .35); 10 | } 11 | 12 | .project-list-item .project-list-item-cover { 13 | width: 100%; 14 | height: 180px; 15 | display: block; 16 | border-top-left-radius: 4px; 17 | border-top-right-radius: 4px; 18 | } 19 | 20 | .project-list-item-body { 21 | padding: 20px; 22 | border: 1px solid #e8e8e8; 23 | } 24 | 25 | .project-list-item .project-list-item-body>h2 { 26 | font-size: 16px; 27 | color: #333; 28 | margin-bottom: 12px; 29 | } 30 | 31 | .project-list-item .project-list-item-text { 32 | height: 40px; 33 | overflow: hidden; 34 | margin-bottom: 12px; 35 | } 36 | 37 | .project-list-item .project-list-item-desc { 38 | position: relative; 39 | } 40 | 41 | .project-list-item .project-list-item-desc .time { 42 | color: #999; 43 | font-size: 12px; 44 | } 45 | 46 | .project-list-item .project-list-item-desc .ew-head-list { 47 | position: absolute; 48 | right: 0; 49 | top: 0; 50 | } 51 | 52 | .ew-head-list .ew-head-list-item:first-child { 53 | margin-left: 0; 54 | } 55 | 56 | .ew-head-list .ew-head-list-item { 57 | width: 22px; 58 | height: 22px; 59 | border-radius: 50%; 60 | border: 1px solid #fff; 61 | margin-left: -10px; 62 | } 63 | 64 | .ew-head-list .ew-head-list-item { 65 | width: 22px; 66 | height: 22px; 67 | border-radius: 50%; 68 | border: 1px solid #fff; 69 | margin-left: -10px; 70 | } 71 | 72 | .pear-card-component { 73 | padding: 20px; 74 | } 75 | 76 | .pear-card-component .layui-laypage .layui-laypage-curr .layui-laypage-em { 77 | border-radius: 0px !important; 78 | } 79 | -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/css/pear-module/code.css: -------------------------------------------------------------------------------- 1 | .layui-colla-content{ 2 | padding: 0px; 3 | } 4 | .layui-code-view{ 5 | margin: 0px!important; 6 | } 7 | .layui-code-h3{ 8 | display: none!important; 9 | } -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/css/pear-module/dtree/font/dtreefont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/pear/css/pear-module/dtree/font/dtreefont.eot -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/css/pear-module/dtree/font/dtreefont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/pear/css/pear-module/dtree/font/dtreefont.ttf -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/css/pear-module/dtree/font/dtreefont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/pear/css/pear-module/dtree/font/dtreefont.woff -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/css/pear-module/form.css: -------------------------------------------------------------------------------- 1 | .layui-card-body .layui-form{ 2 | margin-top: 15px; 3 | } 4 | input::-webkit-input-placeholder, 5 | textarea::-webkit-input-placeholder { 6 | color: #ccc; 7 | } 8 | .layui-input:hover, 9 | .layui-textarea:hover, 10 | .layui-input:focus, 11 | .layui-textarea:focus { 12 | border-color: #eee; 13 | } 14 | .layui-input:focus, 15 | .layui-textarea:focus { 16 | border-color: #5FB878!important; 17 | } 18 | 19 | .layui-input[success] { 20 | box-shadow: 0px 0px 3px 1px #5FB878 !important; 21 | border: #5FB878 1px solid!important; 22 | } 23 | 24 | .layui-input[failure] { 25 | box-shadow: 0px 0px 3px 1px #F56C6C; 26 | border: #F56C6C 1px solid; 27 | } 28 | 29 | .layui-input, 30 | .layui-select, 31 | .layui-textarea { 32 | border-radius: 4px; 33 | border-color: #eee; 34 | transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; 35 | } 36 | 37 | .layui-form-select dl::-webkit-scrollbar { 38 | width: 0px; 39 | height: 0px; 40 | } 41 | 42 | .layui-form-select dl::-webkit-scrollbar { 43 | width: 6px; 44 | height: 6px; 45 | } 46 | 47 | .layui-form-select dl::-webkit-scrollbar-track { 48 | background: white; 49 | border-radius: 3px; 50 | } 51 | 52 | .layui-form-select dl::-webkit-scrollbar-thumb { 53 | background: #E6E6E6; 54 | border-radius: 3px; 55 | } 56 | 57 | .layui-form-select dl::-webkit-scrollbar-thumb:hover { 58 | background: #E6E6E6; 59 | } 60 | 61 | .layui-form-select dl::-webkit-scrollbar-corner { 62 | background: #f6f6f6; 63 | } -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/css/pear-module/iconPicker.css: -------------------------------------------------------------------------------- 1 | .layui-iconpicker .layui-anim{ 2 | width: 300px!important; 3 | } -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/css/pear-module/label.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/pear/css/pear-module/label.css -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/css/pear-module/layer.css: -------------------------------------------------------------------------------- 1 | .layui-layer-msg{ 2 | border-color: transparent!important; 3 | box-shadow: 2px 0 6px rgb(0 21 41 / 0.05)!important; 4 | } -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/css/pear-module/link.css: -------------------------------------------------------------------------------- 1 | .pear-link{ 2 | font-size: 15px!important; 3 | } 4 | 5 | .pear-link.pear-link-primary{ 6 | color : #5FB878 ; 7 | } 8 | 9 | .pear-link.pear-link-success{ 10 | color : #5FB878 ; 11 | } 12 | 13 | .pear-link .pear-link-warming{ 14 | 15 | 16 | } 17 | 18 | .pear-link .pear-link-danger{ 19 | 20 | } -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/css/pear-module/message.css: -------------------------------------------------------------------------------- 1 | .pear-notice .layui-this { 2 | color: #5FB878 !important; 3 | } 4 | 5 | .pear-notice li { 6 | border-right: 1px solid whitesmoke; 7 | } 8 | 9 | .pear-notice * { 10 | color: dimgray !important; 11 | } 12 | 13 | .pear-notice{ 14 | width: 285px!important; 15 | } 16 | 17 | .pear-notice span{ 18 | margin-left: 20px; 19 | font-size: 13px; 20 | } 21 | 22 | .pear-notice img{ 23 | margin-left: 8px; 24 | width: 33px!important; 25 | height: 33px!important; 26 | border-radius: 50px; 27 | } 28 | 29 | .pear-notice-item{ 30 | height: 45px!important; 31 | line-height: 45px!important; 32 | } 33 | 34 | .pear-notice .layui-tab-title{ 35 | border: whitesmoke; 36 | } 37 | 38 | 39 | /** 滚动条样式 */ 40 | .pear-notice *::-webkit-scrollbar{width:0px;height:0px;} 41 | .pear-notice *::-webkit-scrollbar-track{background: white;border-radius:2px;} 42 | .pear-notice *::-webkit-scrollbar-thumb{background: #E6E6E6;border-radius:2px;} 43 | .pear-notice *::-webkit-scrollbar-thumb:hover{background: #E6E6E6;} 44 | .pear-notice *::-webkit-scrollbar-corner{background: #f6f6f6;} 45 | 46 | 47 | -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/css/pear-module/step.css: -------------------------------------------------------------------------------- 1 | .lay-step { 2 | font-size: 0; 3 | margin: 0 auto; 4 | max-width: 100%; 5 | width: 60%; 6 | padding-left: 15%; 7 | 8 | } 9 | 10 | .step-item { 11 | display: inline-block; 12 | line-height: 35px; 13 | position: relative; 14 | font-size: 15px; 15 | vertical-align: top; 16 | } 17 | 18 | .step-item-tail { 19 | width: 100%; 20 | padding: 0 10px; 21 | position: absolute; 22 | left: 0; 23 | top: 13px; 24 | } 25 | 26 | .step-item-tail i { 27 | display: inline-block; 28 | width: 100%; 29 | height: 3px; 30 | margin-top: 4px; 31 | vertical-align: top; 32 | background: #5FB878; 33 | position: relative; 34 | } 35 | 36 | .step-item-tail .step-item-tail-done { 37 | background: #5FB878; 38 | height: 3px; 39 | margin-top: 4px; 40 | } 41 | 42 | .step-item-head { 43 | position: relative; 44 | display: inline-block; 45 | height: 35px; 46 | width: 35px; 47 | text-align: center; 48 | vertical-align: top; 49 | color: #5FB878; 50 | border: 3px solid #5FB878; 51 | border-radius: 50%; 52 | background: #ffffff; 53 | } 54 | 55 | .step-item-head.step-item-head-active { 56 | background: #5FB878; 57 | color: #ffffff; 58 | } 59 | 60 | .step-item-main { 61 | display: block; 62 | position: relative; 63 | margin-left: -50%; 64 | margin-right: 50%; 65 | padding-left: 26px; 66 | text-align: center; 67 | } 68 | 69 | .step-item-main-title { 70 | font-weight: bolder; 71 | color: #555555; 72 | } 73 | 74 | .step-item-main-desc { 75 | color: #aaaaaa; 76 | } 77 | 78 | .step-item-main-time { 79 | color: #aaaaaa; 80 | } 81 | 82 | .lay-step + [carousel-item]:before { 83 | display: none; 84 | } 85 | 86 | .lay-step + [carousel-item] > * { 87 | background-color: transparent; 88 | } -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/css/pear-module/table.css: -------------------------------------------------------------------------------- 1 | .layui-table-tool-panel { 2 | margin-top: 10px !important; 3 | } 4 | 5 | .layui-table-tool { 6 | background-color: white !important; 7 | border-bottom: none !important; 8 | padding-bottom: 10px !important; 9 | } 10 | 11 | .layui-table-header, 12 | .layui-table-header th { 13 | background-color: white !important; 14 | } 15 | 16 | .layui-table-view { 17 | border: none !important; 18 | } 19 | 20 | .layui-table-cell { 21 | height: 34px !important; 22 | line-height: 34px !important; 23 | } 24 | 25 | .layui-table .layui-laypage .layui-laypage-curr .layui-laypage-em { 26 | border-radius: 50px !important; 27 | background-color: #5FB878 !important; 28 | } 29 | 30 | .layui-table-view .layui-table{ 31 | width: 100%; 32 | } 33 | 34 | .layui-table tr { 35 | height: 34px !important; 36 | line-height: 34px !important; 37 | } 38 | 39 | .layui-table-cell { 40 | padding-top: 1px !important; 41 | } 42 | 43 | .layui-table-box * { 44 | font-size: 13px !important; 45 | } 46 | 47 | .layui-table-page .layui-laypage input { 48 | width: 40px; 49 | height: 26.5px!important; 50 | } 51 | 52 | .layui-table-box button { 53 | font-size: 15px !important; 54 | } 55 | 56 | .layui-table-page { 57 | height: 45px !important; 58 | padding-top: 10px !important; 59 | } 60 | 61 | .layui-table-tool .layui-inline { 62 | border-radius: 3px !important; 63 | width: 30px !important; 64 | height: 30px !important; 65 | line-height: 20px !important; 66 | } 67 | 68 | .layui-table-view .layui-table[lay-skin=line] { 69 | border: none !important; 70 | } 71 | .layui-table-body::-webkit-scrollbar { 72 | width: 0px; 73 | height: 0px; 74 | } 75 | 76 | .layui-table-body::-webkit-scrollbar { 77 | width: 6px; 78 | height: 6px; 79 | } 80 | .layui-table-body::-webkit-scrollbar-track { 81 | background: white; 82 | border-radius: 2px; 83 | } 84 | 85 | .layui-table-body::-webkit-scrollbar-thumb { 86 | background: #E6E6E6; 87 | border-radius: 2px; 88 | } 89 | 90 | .layui-table-body::-webkit-scrollbar-thumb:hover { 91 | background: #E6E6E6; 92 | } 93 | 94 | .layui-table-body::-webkit-scrollbar-corner { 95 | background: #f6f6f6; 96 | } 97 | -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/css/pear-module/tag.css: -------------------------------------------------------------------------------- 1 | .input-new-tag { 2 | width: 90px; 3 | } 4 | 5 | .input-new-tag input { 6 | height: 100%!important; 7 | border: none; 8 | padding-left: 0px; 9 | } 10 | 11 | .tag .layui-btn .tag-close:hover { 12 | border-radius: 2px; 13 | color: #fff; 14 | } 15 | 16 | .tag .layui-btn .tag-close { 17 | margin-left: 8px; 18 | transition: all .2s; 19 | -webkit-transition: all .2s; 20 | } 21 | .tag-item { 22 | background-color: #5FB878; 23 | color: white; 24 | border: none; 25 | } 26 | 27 | .tag-item:hover { 28 | 29 | color: white; 30 | 31 | } 32 | .tag-item-normal { 33 | background-color: #5FB878; 34 | color: white; 35 | border: none; 36 | } 37 | 38 | .tag-item-warm { 39 | background-color: #f6ad55; 40 | color: white; 41 | border: none; 42 | } 43 | 44 | .tag-item-danger { 45 | background-color: #f56c6c; 46 | color: white; 47 | border: none; 48 | } 49 | 50 | .tag-item-dark { 51 | background-color: #525252; 52 | color: white; 53 | border: none; 54 | } 55 | 56 | .tag-item-primary { 57 | background-color: white !important; 58 | color: dimgray; 59 | border: 1px solid dimgray; 60 | } 61 | 62 | .tag-item-normal:hover { 63 | 64 | color: white !important; 65 | } 66 | 67 | .tag-item-warm:hover { 68 | 69 | color: white; 70 | } 71 | 72 | .tag-item-danger:hover { 73 | 74 | color: white; 75 | } 76 | 77 | .tag-item-dark:hover { 78 | 79 | color: white; 80 | } 81 | 82 | .tag-item-primary:hover { 83 | color: dimgray; 84 | border: 1px solid dimgray; 85 | } -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/css/pear-module/topBar.css: -------------------------------------------------------------------------------- 1 | .layui-fixbar li { 2 | border-radius: 4px; 3 | background-color: #5FB878; 4 | color: white; 5 | } 6 | -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/css/pear-module/treetable.css: -------------------------------------------------------------------------------- 1 | .treeTable-icon i:last-child{ 2 | display: none!important; 3 | } 4 | 5 | .treeTable-empty{ 6 | margin-left: -3px; 7 | } 8 | .treeTable-empty { 9 | width: 20px; 10 | display: inline-block; 11 | } 12 | 13 | .treeTable-icon { 14 | cursor: pointer; 15 | } 16 | 17 | .treeTable-icon .layui-icon-triangle-d:before { 18 | content: "\e623"; 19 | } 20 | 21 | .treeTable-icon.open .layui-icon-triangle-d:before { 22 | content: "\e625"; 23 | background-color: transparent; 24 | } 25 | 26 | -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/css/pear.all.css: -------------------------------------------------------------------------------- 1 | @import url("../../layui/css/layui.css"); 2 | @import url("../font/iconfont.css"); 3 | 4 | @import url("pear-module/dtree/font/dtreefont.css"); 5 | @import url("pear-module/dtree/dtree.css"); 6 | @import url("pear-module/iconPicker.css"); 7 | @import url("pear-module/treetable.css"); 8 | @import url("pear-module/dropdown.css"); 9 | @import url("pear-module/message.css"); 10 | @import url("pear-module/cropper.css"); 11 | @import url("pear-module/loading.css"); 12 | @import url("pear-module/topBar.css"); 13 | @import url("pear-module/select.css"); 14 | @import url("pear-module/layout.css"); 15 | @import url("pear-module/notice.css"); 16 | @import url("pear-module/button.css"); 17 | @import url("pear-module/table.css"); 18 | @import url("pear-module/frame.css"); 19 | @import url("pear-module/layer.css"); 20 | @import url("pear-module/menu.css"); 21 | @import url("pear-module/form.css"); 22 | @import url("pear-module/link.css"); 23 | @import url("pear-module/form.css"); 24 | @import url("pear-module/code.css"); 25 | @import url("pear-module/link.css"); 26 | @import url("pear-module/step.css"); 27 | @import url("pear-module/card.css"); 28 | @import url("pear-module/tab.css"); 29 | @import url("pear-module/tag.css"); -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/css/pear.css: -------------------------------------------------------------------------------- 1 | @import url("../../layui/css/layui.css"); 2 | @import url("../font/iconfont.css"); 3 | 4 | @import url("pear-module/dtree/font/dtreefont.css"); 5 | @import url("pear-module/dtree/dtree.css"); 6 | @import url("pear-module/iconPicker.css"); 7 | @import url("pear-module/treetable.css"); 8 | @import url("pear-module/dropdown.css"); 9 | @import url("pear-module/message.css"); 10 | @import url("pear-module/cropper.css"); 11 | @import url("pear-module/loading.css"); 12 | @import url("pear-module/topBar.css"); 13 | @import url("pear-module/select.css"); 14 | @import url("pear-module/layout.css"); 15 | @import url("pear-module/notice.css"); 16 | @import url("pear-module/button.css"); 17 | @import url("pear-module/table.css"); 18 | @import url("pear-module/frame.css"); 19 | @import url("pear-module/layer.css"); 20 | @import url("pear-module/menu.css"); 21 | @import url("pear-module/form.css"); 22 | @import url("pear-module/link.css"); 23 | @import url("pear-module/form.css"); 24 | @import url("pear-module/code.css"); 25 | @import url("pear-module/link.css"); 26 | @import url("pear-module/step.css"); 27 | @import url("pear-module/card.css"); 28 | @import url("pear-module/tab.css"); 29 | @import url("pear-module/tag.css"); -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/pear/font/iconfont.eot -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/pear/font/iconfont.ttf -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/pear/font/iconfont.woff -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/font/iconfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Linklelo/pear-admin-fastapi/943dd85b926752f8b05fce3962328b38aee93181/app/resources/static/admin/component/pear/font/iconfont.woff2 -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/modules/button.js: -------------------------------------------------------------------------------- 1 | layui.define(['jquery'], function(exports) { 2 | "use strict"; 3 | 4 | /** 5 | * Button component 6 | * */ 7 | var MOD_NAME = 'button', 8 | $ = layui.jquery; 9 | 10 | var button = function(opt) { 11 | this.option = opt; 12 | }; 13 | 14 | /** 15 | * Button start loading 16 | * */ 17 | button.prototype.load = function(opt) { 18 | 19 | var option = { 20 | elem: opt.elem, 21 | time: opt.time ? opt.time : false, 22 | done: opt.done ? opt.done : function(){} 23 | } 24 | var text = $(option.elem).text(); 25 | 26 | $(option.elem).html(""); 27 | 28 | var buttons = $(option.elem); 29 | 30 | if (option.time != "" || option.time !=false) { 31 | setTimeout(function() { 32 | buttons.html(text); 33 | option.done(); 34 | }, option.time); 35 | } 36 | option.text = text; 37 | return new button(option); 38 | } 39 | 40 | /** 41 | * Button stop loaded 42 | * */ 43 | button.prototype.stop = function(success) { 44 | $(this.option.elem).html(this.option.text); 45 | success(); 46 | } 47 | 48 | exports(MOD_NAME, new button()); 49 | }); 50 | -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/modules/common.js: -------------------------------------------------------------------------------- 1 | layui.define(['jquery', 'element','table'], function(exports) { 2 | "use strict"; 3 | 4 | /** 5 | * 常用封装类 6 | * */ 7 | var MOD_NAME = 'common', 8 | $ = layui.jquery, 9 | table = layui.table, 10 | element = layui.element; 11 | 12 | var common = new function() { 13 | 14 | /** 15 | * 获取当前表格选中字段 16 | * @param obj 表格回调参数 17 | * @param field 要获取的字段 18 | * */ 19 | this.checkField = function(obj, field) { 20 | let data = table.checkStatus(obj.config.id).data; 21 | if (data.length === 0) { 22 | return ""; 23 | } 24 | let ids = ""; 25 | for (let i = 0; i < data.length; i++) { 26 | ids += data[i][field] + ","; 27 | } 28 | ids = ids.substr(0, ids.length - 1); 29 | return ids; 30 | } 31 | 32 | /** 33 | * 当前是否为与移动端 34 | * */ 35 | this.isModile = function(){ 36 | if ($(window).width() <= 768) { 37 | return true; 38 | } 39 | return false; 40 | } 41 | 42 | 43 | /** 44 | * 提交 json 数据 45 | * @param data 提交数据 46 | * @param href 提交接口 47 | * @param table 刷新父级表 48 | * 49 | * */ 50 | this.submit = function(data,href,table,callback){ 51 | $.ajax({ 52 | url:href, 53 | data:JSON.stringify(data), 54 | dataType:'json', 55 | contentType:'application/json', 56 | type:'post', 57 | success:callback !=null?callback(result):function(result){ 58 | if(result.success){ 59 | layer.msg(result.msg,{icon:1,time:1000},function(){ 60 | parent.layer.close(parent.layer.getFrameIndex(window.name));//关闭当前页 61 | parent.layui.table.reload(table); 62 | }); 63 | }else{ 64 | layer.msg(result.msg,{icon:2,time:1000}); 65 | } 66 | } 67 | }) 68 | } 69 | } 70 | exports(MOD_NAME, common); 71 | }); 72 | -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/modules/context.js: -------------------------------------------------------------------------------- 1 | layui.define(['jquery', 'element'], function(exports) { 2 | "use strict"; 3 | 4 | var MOD_NAME = 'context', 5 | $ = layui.jquery, 6 | element = layui.element; 7 | 8 | var context = new function() { 9 | 10 | this.put = function(key,value){ 11 | localStorage.setItem(key,value); 12 | } 13 | 14 | this.get = function(key){ 15 | return localStorage.getItem(key); 16 | } 17 | } 18 | exports(MOD_NAME, context); 19 | }); 20 | -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/modules/convert.js: -------------------------------------------------------------------------------- 1 | layui.define(['jquery', 'element'], function(exports) { 2 | "use strict"; 3 | 4 | /** 5 | * 类 型 转 换 工 具 类 6 | * */ 7 | var MOD_NAME = 'convert', 8 | $ = layui.jquery, 9 | element = layui.element; 10 | 11 | var convert = new function() { 12 | 13 | // image 转 base64 14 | this.imageToBase64 = function(img) { 15 | var canvas = document.createElement("canvas"); 16 | canvas.width = img.width; 17 | canvas.height = img.height; 18 | var ctx = canvas.getContext("2d"); 19 | ctx.drawImage(img, 0, 0, img.width, img.height); 20 | var ext = img.src.substring(img.src.lastIndexOf(".")+1).toLowerCase(); 21 | var dataURL = canvas.toDataURL("image/"+ext); 22 | return dataURL; 23 | } 24 | 25 | } 26 | exports(MOD_NAME, convert); 27 | }); 28 | -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/modules/count.js: -------------------------------------------------------------------------------- 1 | layui.define(['jquery', 'element'], function(exports) { 2 | "use strict"; 3 | 4 | var MOD_NAME = 'count', 5 | $ = layui.jquery, 6 | element = layui.element; 7 | 8 | var count = new function() { 9 | 10 | this.up = function(targetEle, options) { 11 | 12 | options = options || {}; 13 | 14 | var $this = document.getElementById(targetEle), 15 | time = options.time, 16 | finalNum = options.num, 17 | regulator = options.regulator, 18 | step = finalNum / (time / regulator), 19 | count = 0.00, 20 | initial = 0; 21 | 22 | var timer = setInterval(function() { 23 | count = count + step; 24 | if (count >= finalNum) { 25 | clearInterval(timer); 26 | count = finalNum; 27 | } 28 | var t = count.toFixed(options.bit?options.bit:0);; 29 | if (t == initial) return; 30 | initial = t; 31 | $this.innerHTML = initial; 32 | }, 30); 33 | } 34 | 35 | } 36 | exports(MOD_NAME, count); 37 | }); 38 | -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/modules/popup.js: -------------------------------------------------------------------------------- 1 | layui.define(['layer', 'jquery', 'element'], function(exports) { 2 | "use strict"; 3 | 4 | var MOD_NAME = 'popup', 5 | $ = layui.jquery, 6 | layer = layui.layer, 7 | element = layui.element; 8 | 9 | var popup = new function() { 10 | 11 | this.success = function(msg) { 12 | layer.msg(msg, { 13 | icon: 1, 14 | time: 1000 15 | }) 16 | }, 17 | this.failure = function(msg) { 18 | layer.msg(msg, { 19 | icon: 2, 20 | time: 1000 21 | }) 22 | }, 23 | this.warming = function(msg) { 24 | layer.msg(msg, { 25 | icon: 3, 26 | time: 1000 27 | }) 28 | }, 29 | this.success = function(msg, callback) { 30 | layer.msg(msg, { 31 | icon: 1, 32 | time: 1000 33 | }, callback); 34 | }, 35 | this.failure = function(msg, callback) { 36 | layer.msg(msg, { 37 | icon: 2, 38 | time: 1000 39 | }, callback); 40 | }, 41 | this.warning = function(msg, callback) { 42 | layer.msg(msg, { 43 | icon: 3, 44 | time: 1000 45 | }, callback); 46 | } 47 | }; 48 | exports(MOD_NAME, popup); 49 | }) 50 | -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/modules/tinymce/tinymce/langs/readme.md: -------------------------------------------------------------------------------- 1 | This is where language files should be placed. 2 | 3 | Please DO NOT translate these directly use this service: https://www.transifex.com/projects/p/tinymce/ 4 | -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/modules/tinymce/tinymce/plugins/anchor/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.0.16 (2019-09-24) 8 | */ 9 | !function(){"use strict";function e(o){return function(t){for(var e=0;e'); 17 | }); 18 | }; 19 | var Commands = { register: register }; 20 | 21 | var register$1 = function (editor) { 22 | editor.ui.registry.addButton('hr', { 23 | icon: 'horizontal-rule', 24 | tooltip: 'Horizontal line', 25 | onAction: function () { 26 | return editor.execCommand('InsertHorizontalRule'); 27 | } 28 | }); 29 | editor.ui.registry.addMenuItem('hr', { 30 | icon: 'horizontal-rule', 31 | text: 'Horizontal line', 32 | onAction: function () { 33 | return editor.execCommand('InsertHorizontalRule'); 34 | } 35 | }); 36 | }; 37 | var Buttons = { register: register$1 }; 38 | 39 | function Plugin () { 40 | global.add('hr', function (editor) { 41 | Commands.register(editor); 42 | Buttons.register(editor); 43 | }); 44 | } 45 | 46 | Plugin(); 47 | 48 | }()); 49 | -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/modules/tinymce/tinymce/plugins/hr/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.0.16 (2019-09-24) 8 | */ 9 | !function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),o=function(n){n.addCommand("InsertHorizontalRule",function(){n.execCommand("mceInsertContent",!1,"
")})},t=function(n){n.ui.registry.addButton("hr",{icon:"horizontal-rule",tooltip:"Horizontal line",onAction:function(){return n.execCommand("InsertHorizontalRule")}}),n.ui.registry.addMenuItem("hr",{icon:"horizontal-rule",text:"Horizontal line",onAction:function(){return n.execCommand("InsertHorizontalRule")}})};!function e(){n.add("hr",function(n){o(n),t(n)})}()}(); -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/modules/tinymce/tinymce/plugins/indent2em/plugin.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add('indent2em', function(editor, url) { 2 | var pluginName='首行缩进'; 3 | var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools'); 4 | var indent2em_val = editor.getParam('indent2em_val', '2em'); 5 | var doAct = function () { 6 | var dom = editor.dom; 7 | var blocks = editor.selection.getSelectedBlocks(); 8 | var act = ''; 9 | global$1.each(blocks, function (block) { 10 | if(act==''){ 11 | act = dom.getStyle(block,'text-indent')==indent2em_val ? 'remove' : 'add'; 12 | } 13 | if( act=='add' ){ 14 | dom.setStyle(block, 'text-indent', indent2em_val); 15 | }else{ 16 | var style=dom.getAttrib(block,'style'); 17 | style = style.replace(/text-indent:[\s]*2em;/ig,''); 18 | dom.setAttrib(block,'style',style); 19 | } 20 | 21 | }); 22 | }; 23 | 24 | editor.ui.registry.addButton('indent2em', { 25 | text: '', 26 | tooltip: pluginName, 27 | onAction: function () { 28 | doAct(); 29 | } 30 | }); 31 | 32 | editor.ui.registry.addMenuItem('indent2em', { 33 | text: pluginName, 34 | onAction: function() { 35 | doAct(); 36 | } 37 | }); 38 | 39 | return { 40 | getMetadata: function () { 41 | return { 42 | name: pluginName, 43 | url: "http://tinymce.ax-z.cn/more-plugins/indent2em.php", 44 | }; 45 | } 46 | }; 47 | }); 48 | -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/modules/tinymce/tinymce/plugins/indent2em/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add('indent2em', function(editor, url) { 2 | var pluginName='首行缩进'; 3 | var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools'); 4 | var indent2em_val = editor.getParam('indent2em_val', '2em'); 5 | var doAct = function () { 6 | var dom = editor.dom; 7 | var blocks = editor.selection.getSelectedBlocks(); 8 | var act = ''; 9 | global$1.each(blocks, function (block) { 10 | if(act==''){ 11 | act = dom.getStyle(block,'text-indent')==indent2em_val ? 'remove' : 'add'; 12 | } 13 | if( act=='add' ){ 14 | dom.setStyle(block, 'text-indent', indent2em_val); 15 | }else{ 16 | var style=dom.getAttrib(block,'style'); 17 | style = style.replace(/text-indent:[\s]*2em;/ig,''); 18 | dom.setAttrib(block,'style',style); 19 | } 20 | 21 | }); 22 | }; 23 | 24 | editor.ui.registry.addButton('indent2em', { 25 | text: '', 26 | tooltip: pluginName, 27 | onAction: function () { 28 | doAct(); 29 | } 30 | }); 31 | 32 | editor.ui.registry.addMenuItem('indent2em', { 33 | text: pluginName, 34 | onAction: function() { 35 | doAct(); 36 | } 37 | }); 38 | 39 | return { 40 | getMetadata: function () { 41 | return { 42 | name: pluginName, 43 | url: "http://tinymce.ax-z.cn/more-plugins/indent2em.php", 44 | }; 45 | } 46 | }; 47 | }); 48 | -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/modules/tinymce/tinymce/plugins/nonbreaking/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.0.16 (2019-09-24) 8 | */ 9 | !function(){"use strict";function o(n,e){for(var t="",o=0;o'+o(" ",e)+"":o(" ",e);n.undoManager.transact(function(){return n.insertContent(t)})},e=function(n){n.addCommand("mceNonBreaking",function(){r(n,1)})},c=tinymce.util.Tools.resolve("tinymce.util.VK"),t=function(e){var t=i(e);0"===r){var a=o.lastIndexOf("<",e);if(-1!==a)if(-1!==o.substring(a,e).indexOf('contenteditable="false"'))return t}return''+i.dom.encode("string"==typeof n[1]?n[1]:n[0])+""}}var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=tinymce.util.Tools.resolve("tinymce.util.Tools"),f=function(t){return t.getParam("noneditable_noneditable_class","mceNonEditable")},s=function(t){return t.getParam("noneditable_editable_class","mceEditable")},d=function(t){var n=t.getParam("noneditable_regexp",[]);return n&&n.constructor===RegExp?[n]:n},n=function(n){var t,e,r="contenteditable";t=" "+u.trim(s(n))+" ",e=" "+u.trim(f(n))+" ";var a=c(t),i=c(e),o=d(n);n.on("PreInit",function(){0'}var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.Env"),r=function(e){return e.getParam("pagebreak_separator","\x3c!-- pagebreak --\x3e")},i=function(e){return e.getParam("pagebreak_split_block",!1)},o=function(o){var c=r(o),n=new RegExp(c.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(e){return"\\"+e}),"gi");o.on("BeforeSetContent",function(e){e.content=e.content.replace(n,a())}),o.on("PreInit",function(){o.serializer.addNodeFilter("img",function(e){for(var n,a,t=e.length;t--;)if((a=(n=e[t]).attr("class"))&&-1!==a.indexOf("mce-pagebreak")){var r=n.parent;if(o.schema.getBlockElements()[r.name]&&i(o)){r.type=3,r.value=c,r.raw=!0,n.remove();continue}n.type=3,n.value=c,n.raw=!0}})})},c=a,u=e,g=function(e){e.addCommand("mcePageBreak",function(){e.settings.pagebreak_split_block?e.insertContent("

"+c()+"

"):e.insertContent(c())})},m=function(n){n.on("ResolveName",function(e){"IMG"===e.target.nodeName&&n.dom.hasClass(e.target,u())&&(e.name="pagebreak")})},s=function(e){e.ui.registry.addButton("pagebreak",{icon:"page-break",tooltip:"Page break",onAction:function(){return e.execCommand("mcePageBreak")}}),e.ui.registry.addMenuItem("pagebreak",{text:"Page break",icon:"page-break",onAction:function(){return e.execCommand("mcePageBreak")}})};!function l(){n.add("pagebreak",function(e){g(e),s(e),o(e),m(e)})}()}(); -------------------------------------------------------------------------------- /app/resources/static/admin/component/pear/modules/tinymce/tinymce/plugins/preview/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.0.16 (2019-09-24) 8 | */ 9 | !function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),d=tinymce.util.Tools.resolve("tinymce.util.Tools"),l=function(e){return e.getParam("content_style","")},m=function(e){return e.getParam("content_css_cors",!1,"boolean")},n=function(t){var n="",i=t.dom.encode,e=l(t);n+='',e&&(n+='");var o=m(t)?' crossorigin="anonymous"':"";d.each(t.contentCSS,function(e){n+='"});var r=t.settings.body_id||"tinymce";-1!==r.indexOf("=")&&(r=(r=t.getParam("body_id","","hash"))[t.id]||r);var a=t.settings.body_class||"";-1!==a.indexOf("=")&&(a=(a=t.getParam("body_class","","hash"))[t.id]||"");var c=t.getBody().dir,s=c?' dir="'+i(c)+'"':"";return""+n+'"+t.getContent()+'