├── .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 | 
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 | |  |  |
42 | | |  |
43 | |  |  |
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('- '+o.replace(/[\r\t\n]+/g,"
- ")+"
"),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('");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()+'