├── .github
└── ISSUE_TEMPLATE
│ └── bug_report.md
├── README.md
├── asgi.py
├── backend
├── __init__.py
├── apps.py
├── backend_url.py
├── migrations
│ ├── 0001_initial.py
│ ├── 0002_auto_20210117_2002.py
│ ├── 0003_auto_20210117_2017.py
│ ├── 0004_auto_20210117_2311.py
│ ├── 0005_auto_20210118_0856.py
│ ├── 0006_auto_20210118_0926.py
│ ├── 0007_auto_20210118_0931.py
│ ├── 0008_auto_20210118_1453.py
│ ├── 0009_resolver.py
│ ├── 0010_auto_20210118_1620.py
│ ├── 0011_auto_20210118_2002.py
│ ├── 0012_auto_20210118_2044.py
│ ├── 0013_auto_20210122_1747.py
│ ├── 0014_auto_20210125_1839.py
│ ├── 0015_containers_flag_string.py
│ ├── 0016_auto_20210125_2143.py
│ ├── 0017_resolver_address.py
│ ├── 0018_topicname_score_type.py
│ └── __init__.py
├── models
│ ├── __init__.py
│ ├── category.py
│ ├── dockers.py
│ └── users.py
├── static
│ └── backend
│ │ ├── css
│ │ ├── layuimini.css
│ │ ├── public.css
│ │ └── themes
│ │ │ └── default.css
│ │ ├── font
│ │ └── kumo.ttf
│ │ ├── images
│ │ ├── bg.jpg
│ │ ├── captcha.jpg
│ │ ├── donate_qrcode.png
│ │ ├── favicon.ico
│ │ ├── home.png
│ │ ├── icon-login.png
│ │ ├── loginbg.png
│ │ └── logo.png
│ │ ├── js
│ │ ├── lay-config.js
│ │ └── lay-module
│ │ │ ├── echarts
│ │ │ ├── echarts.js
│ │ │ └── echartsTheme.js
│ │ │ ├── iconPicker
│ │ │ └── iconPickerFa.js
│ │ │ ├── layarea
│ │ │ └── layarea.js
│ │ │ ├── layuimini
│ │ │ ├── miniAdmin.js
│ │ │ ├── miniMenu.js
│ │ │ ├── miniTab.js
│ │ │ ├── miniTheme.js
│ │ │ └── miniTongji.js
│ │ │ ├── step-lay
│ │ │ ├── step.css
│ │ │ └── step.js
│ │ │ ├── tableSelect
│ │ │ └── tableSelect.js
│ │ │ ├── treetable-lay
│ │ │ ├── treetable.css
│ │ │ └── treetable.js
│ │ │ └── wangEditor
│ │ │ ├── fonts
│ │ │ └── w-e-icon.woff
│ │ │ ├── wangEditor.css
│ │ │ ├── wangEditor.js
│ │ │ ├── wangEditor.min.css
│ │ │ ├── wangEditor.min.js
│ │ │ └── wangEditor.min.js.map
│ │ └── lib
│ │ ├── font-awesome-4.7.0
│ │ ├── HELP-US-OUT.txt
│ │ ├── css
│ │ │ ├── font-awesome.css
│ │ │ └── font-awesome.min.css
│ │ ├── fonts
│ │ │ ├── FontAwesome.otf
│ │ │ ├── fontawesome-webfont.eot
│ │ │ ├── fontawesome-webfont.svg
│ │ │ ├── fontawesome-webfont.ttf
│ │ │ ├── fontawesome-webfont.woff
│ │ │ └── fontawesome-webfont.woff2
│ │ ├── less
│ │ │ ├── animated.less
│ │ │ ├── bordered-pulled.less
│ │ │ ├── core.less
│ │ │ ├── fixed-width.less
│ │ │ ├── font-awesome.less
│ │ │ ├── icons.less
│ │ │ ├── larger.less
│ │ │ ├── list.less
│ │ │ ├── mixins.less
│ │ │ ├── path.less
│ │ │ ├── rotated-flipped.less
│ │ │ ├── screen-reader.less
│ │ │ ├── stacked.less
│ │ │ └── variables.less
│ │ └── scss
│ │ │ ├── _animated.scss
│ │ │ ├── _bordered-pulled.scss
│ │ │ ├── _core.scss
│ │ │ ├── _fixed-width.scss
│ │ │ ├── _icons.scss
│ │ │ ├── _larger.scss
│ │ │ ├── _list.scss
│ │ │ ├── _mixins.scss
│ │ │ ├── _path.scss
│ │ │ ├── _rotated-flipped.scss
│ │ │ ├── _screen-reader.scss
│ │ │ ├── _stacked.scss
│ │ │ ├── _variables.scss
│ │ │ └── font-awesome.scss
│ │ ├── jq-module
│ │ ├── jquery.particleground.min.js
│ │ ├── paigusu.min.js
│ │ └── zyupload
│ │ │ ├── zyupload-1.0.0.min.css
│ │ │ └── zyupload-1.0.0.min.js
│ │ ├── jquery-3.4.1
│ │ └── jquery-3.4.1.min.js
│ │ └── layui-v2.5.5
│ │ ├── 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
├── templates
│ └── backend
│ │ ├── index.html
│ │ ├── login.html
│ │ └── page
│ │ ├── add.html
│ │ ├── admins
│ │ ├── add.html
│ │ └── user.html
│ │ ├── category
│ │ ├── add.html
│ │ ├── edit.html
│ │ └── table.html
│ │ ├── change.html
│ │ ├── container
│ │ └── table.html
│ │ ├── images
│ │ ├── add.html
│ │ ├── edit.html
│ │ └── table.html
│ │ ├── menu.html
│ │ ├── players
│ │ ├── add.html
│ │ ├── edit.html
│ │ └── table.html
│ │ ├── resolver
│ │ └── table.html
│ │ ├── score
│ │ └── person.html
│ │ ├── setting.html
│ │ └── welcome.html
└── views
│ ├── __init__.py
│ ├── admins.py
│ ├── apis.py
│ ├── category.py
│ ├── container.py
│ ├── images.py
│ ├── index.py
│ ├── login.py
│ ├── players.py
│ ├── resolver.py
│ ├── score.py
│ ├── setting.py
│ ├── uploads.py
│ └── welcome.py
├── data
└── logs
│ └── info.log
├── doc
├── COPYING
├── DEPLOY.md
├── config
│ ├── daphne_supervisor.conf
│ ├── nginx.conf
│ └── nginx_supervisor.conf
├── example
│ ├── 91255b4fc07c33c92711abec6098b8db.txt
│ ├── Dockerfile
│ ├── index.html
│ └── robots.txt
├── img
│ ├── img1.png
│ ├── img2.png
│ ├── img3.png
│ └── stone.png
└── sql.json
├── docker-compose.yml
├── front
├── __init__.py
├── apps.py
├── front_urls.py
├── migrations
│ └── __init__.py
├── static
│ └── front
│ │ ├── bootstrap
│ │ ├── bootstrap.min.css
│ │ └── bootstrap.min.js
│ │ ├── css
│ │ ├── font.css
│ │ ├── formSelects-v4.css
│ │ ├── full.css
│ │ ├── global.css
│ │ ├── iconfont.eot
│ │ ├── iconfont.svg
│ │ ├── iconfont.ttf
│ │ ├── iconfont.woff
│ │ ├── index.css
│ │ ├── layui.css
│ │ ├── layui.mobile.css
│ │ ├── login.css
│ │ ├── main.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
│ │ ├── style.css
│ │ ├── theme1.css
│ │ ├── theme2.css
│ │ ├── theme3.css
│ │ ├── theme4.css
│ │ ├── theme5.css
│ │ └── xadmin.css
│ │ ├── img
│ │ ├── body_bg.png
│ │ ├── bottom_bg.png
│ │ ├── bottom_nav_1.png
│ │ ├── bottom_nav_2.png
│ │ ├── bottom_nav_3.png
│ │ ├── bsjl_img1.png
│ │ ├── bsjl_img2.png
│ │ ├── bsjl_img3.png
│ │ ├── dt_bg.png
│ │ ├── dt_bg2.png
│ │ ├── index-tx.png
│ │ ├── index_banner.png
│ │ ├── index_banner.png_bak
│ │ ├── inform_bg-bottom.png
│ │ ├── inform_bg-center.png
│ │ ├── inform_bg-top.png
│ │ ├── inform_bg.png
│ │ ├── inform_bg2.png
│ │ ├── inform_bg_ul-li.png
│ │ ├── inform_bg_ul.png
│ │ ├── inform_bigBg.png
│ │ ├── inform_new.png
│ │ ├── inform_titleBg.png
│ │ ├── inform_tz.png
│ │ ├── inform_zd.png
│ │ ├── lc_bg.png
│ │ ├── login_bg.png
│ │ ├── login_bg_form.png
│ │ ├── login_icon1.png
│ │ ├── login_icon2.png
│ │ ├── login_icon3.png
│ │ ├── logo.png
│ │ ├── logo_bg.png
│ │ ├── name_bg.png
│ │ ├── nav_bg.png
│ │ ├── question2_fhj.png
│ │ ├── question2_input.png
│ │ ├── question2_tjbg.png
│ │ ├── question2_wtBG.png
│ │ ├── questions_bt.png
│ │ ├── questions_fh.png
│ │ ├── questions_tckBG.png
│ │ ├── questions_tcksc.png
│ │ ├── questions_title_bg.png
│ │ ├── questions_tk_tabBG.png
│ │ ├── questions_tk_tabBGxz.png
│ │ ├── questions_xz.png
│ │ ├── questions_xzbt.png
│ │ ├── ranking-ulBG.png
│ │ ├── ranking_list_titleBG.png
│ │ ├── ranking_ulBG.png
│ │ ├── registe_bg.png
│ │ ├── registe_icon1.png
│ │ ├── registe_icon2.png
│ │ ├── registe_icon3.png
│ │ ├── registe_icon4.png
│ │ ├── registe_icon5.png
│ │ ├── reset-finish-bg.png
│ │ ├── result_nonrBG.png
│ │ ├── result_pieBG.png
│ │ ├── result_titleBG.png
│ │ ├── result_wtBG.png
│ │ ├── set-up-bg.png
│ │ ├── setUp-txtBg.png
│ │ ├── ssjj_bg.png
│ │ ├── stfx_bg.png
│ │ ├── stfx_icon1.png
│ │ ├── stfx_icon2.png
│ │ ├── stfx_icon3.png
│ │ ├── stfx_icon4.png
│ │ ├── stfx_icon5.png
│ │ ├── stfx_icon6.png
│ │ ├── stfx_title1.png
│ │ ├── stfx_title2.png
│ │ ├── theory_input1.png
│ │ ├── theory_modalBody_bg.png
│ │ ├── theory_nr_bg.png
│ │ ├── theory_st_bg.png
│ │ ├── time_bg.png
│ │ ├── time_bg_xb.png
│ │ ├── title_img1.png
│ │ ├── title_img2.png
│ │ ├── top_bg.png
│ │ ├── user_bg.png
│ │ ├── user_bg_djh.png
│ │ ├── user_tableBg.png
│ │ ├── user_titleBG.png
│ │ ├── xiahua.png
│ │ ├── xialadian.png
│ │ └── xialatiao.png
│ │ ├── js
│ │ ├── css
│ │ │ └── modules
│ │ │ │ ├── code.css
│ │ │ │ └── layer
│ │ │ │ └── default
│ │ │ │ ├── icon-ext.png
│ │ │ │ ├── icon.png
│ │ │ │ ├── layer.css
│ │ │ │ ├── loading-0.gif
│ │ │ │ ├── loading-1.gif
│ │ │ │ └── loading-2.gif
│ │ ├── echarts.min.js
│ │ ├── formSelects-v4.min.js
│ │ ├── jquery-1.9.1.min.js
│ │ ├── jquery.min.js
│ │ ├── jquery.page.js
│ │ ├── jquery.validate.min.js
│ │ ├── 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
│ │ ├── login.js
│ │ ├── moment.js
│ │ ├── scrollbar.js
│ │ ├── xadmin.js
│ │ └── xcity.js
│ │ ├── lib
│ │ └── 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
│ │ │ ├── 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
│ │ │ │ ├── tree.js
│ │ │ │ ├── upload.js
│ │ │ │ └── util.js
│ │ │ ├── layui.all.js
│ │ │ └── layui.js
│ │ └── uploads
│ │ └── c2e249483cd5b35aa3e3bcd3ab414cd6.zip
├── templates
│ └── front
│ │ ├── 404.html
│ │ ├── include
│ │ └── nav.html
│ │ ├── index.html
│ │ ├── login.html
│ │ ├── players.html
│ │ ├── ranking.html
│ │ ├── register.html
│ │ ├── stat.html
│ │ ├── topic.html
│ │ └── topics.html
└── views
│ ├── __init__.py
│ ├── captcha.py
│ ├── errors.py
│ ├── flag.py
│ ├── images.py
│ ├── index.py
│ ├── personal.py
│ ├── rank.py
│ ├── topics.py
│ └── users.py
├── librarys
├── __init__.py
├── common
│ ├── __init__.py
│ ├── dockers.py
│ ├── flags.py
│ └── tools.py
├── exception.py
├── mixin
│ ├── __init__.py
│ └── permission.py
├── safety
│ ├── __init__.py
│ └── xss.py
└── utils
│ ├── __init__.py
│ ├── calculation.py
│ ├── files.py
│ └── strings.py
├── manage.py
├── requirements.txt
├── settings
├── __init__.py
├── base.py
├── config.py
├── dev.py
└── prod.py
├── shell
├── debian_run.sh
└── redhat_run.sh
├── urls.py
├── websocket.py
└── wsgi.py
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: 请使用这个中文模板提交Bug
3 | about: "请务必按照模板提交Bug\U0001F64F"
4 | title: 请填写BUG标题
5 | labels: bug
6 | assignees: thunder
7 |
8 | ---
9 |
10 | **是否使用了最新代码**
11 | 是或否(如果不是的话尝试克隆最新的代码再跑一下!)
12 |
13 | **Bug描述**
14 | 清晰而简洁的Bug描述(必写)
15 |
16 | **运行环境**
17 | - 系统:[例如Windows 10 x64](必写)
18 |
19 | **如何复现**
20 | 复现步骤(选写)
21 |
22 | 复现命令(必写)
23 |
24 | **报错文本**
25 | 复制完整的报错文本(必写)
26 |
27 | **预期结果**
28 | 清晰而简洁的预期结果描述(选写,如正常情况应该是怎么样的)
29 |
30 | **实际结果**
31 | 清晰而简洁的实际结果描述(选写,如出现什么错误)
32 |
33 | **屏幕截图**
34 | 完整golang执行流程截图(建议上传)
35 |
36 | **其他补充**
37 | 关于bug的其他一些补充说明
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # ⚔️黑石碑系统
2 |
3 | **项目正在快速迭代中,请即时更新源代码 [源地址](http://www.github.com/thunderbarca/BlackStone)**
4 |
5 | 
6 |
7 | ## 0x01 🍉功能介绍
8 | 该平台是一个CTF比赛平台,可用于企业进行内部人员进行CTF竞赛以及培训.
9 |
10 | 目前平台还在持续开发中。如果对你有帮助,可以帮我点亮小星星,这对我非常重要。
11 |
12 | ## 0x02 🥝系统结构
13 |
14 | ### 开发框架
15 |
16 | 基础语言: **Python(3.9.1)**
17 |
18 | Web框架: **django(3.1.5)**
19 |
20 | 数据库: **Postgresql 13**
21 |
22 | 前端: **Layu-imini**
23 |
24 | ## 0x03 🍓功能介绍
25 |
26 | **前台页面**
27 | 
28 |
29 | **管理页面**
30 | 
31 |
32 | ## 0x04 🖨安装教程
33 |
34 | ### 0x001 一键部署
35 |
36 | 我把步骤都写在shell脚本里, 安装完成就是正式环境
37 |
38 | debian系用户(Debian, Ubuntu, kali)建议运行debian_run.sh,会使用国内源进行安装
39 | ```bash
40 | git clone http://www.github.com/thunderbarca/BlackStone.git
41 | cd BlackStone
42 | source shell/debian_run.sh
43 | ```
44 |
45 | 红帽系操作系统(包括redhat, fedora, centos)请用redhat_run.sh
46 | ```bash
47 | git clone http://www.github.com/thunderbarca/BlackStone.git
48 | cd BlackStone
49 | source shell/redhat_run.sh
50 | ```
51 |
52 | ### 0x002 正式启动系统(开发模式)
53 | ```bash
54 | source ~/.bashrc
55 | python3 manager.py runserver 0.0.0.0:8000
56 | ```
57 |
58 | 默认的用户名和密码是luffy:shadow
59 |
60 | ## 0x05 ⏰长期更新
61 | - [ ] 各视图的协调优化以及BUG修复
62 | - [ ] 前台成绩刷新改成websocket
63 | - [ ] 动态FLAG实现
64 | - [ ] 增加团队竞赛模式
65 | - [x] 分数动态计算
66 |
67 | ## 0x06 🎛题目部署
68 | 详情请参阅[部署](doc/DEPLOY.md)
69 |
70 | ## 0x07 🏓版权协议
71 | 该项目签署了GPL-3.0授权许可,详情请参阅[COPING](doc/COPYING)。
--------------------------------------------------------------------------------
/asgi.py:
--------------------------------------------------------------------------------
1 | """
2 | ASGI config for BlackStone project.
3 |
4 | It exposes the ASGI callable as a module-level variable named ``application``.
5 |
6 | For more information on this file, see
7 | https://docs.djangoproject.com/en/3.1/howto/deployment/asgi/
8 | """
9 |
10 | import os
11 |
12 | from django.core.asgi import get_asgi_application
13 | from websocket import websocket_application
14 |
15 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings.dev')
16 |
17 | django_application = get_asgi_application()
18 |
19 |
20 | async def application(scope, receive, send):
21 | if scope['type'] == 'http':
22 | await django_application(scope, receive, send)
23 | elif scope['type'] == 'websocket':
24 | await websocket_application(scope, receive, send)
25 | else:
26 | raise NotImplementedError(f"Unknown scope type {scope['type']}")
27 |
--------------------------------------------------------------------------------
/backend/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/__init__.py
--------------------------------------------------------------------------------
/backend/apps.py:
--------------------------------------------------------------------------------
1 | from django.apps import AppConfig
2 |
3 |
4 | class BackendConfig(AppConfig):
5 | name = 'backend'
6 |
--------------------------------------------------------------------------------
/backend/migrations/0002_auto_20210117_2002.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.1.5 on 2021-01-17 20:02
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('backend', '0001_initial'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='category',
15 | name='id',
16 | field=models.CharField(max_length=64, primary_key=True, serialize=False),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/backend/migrations/0003_auto_20210117_2017.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.1.5 on 2021-01-17 20:17
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('backend', '0002_auto_20210117_2002'),
10 | ]
11 |
12 | operations = [
13 | migrations.CreateModel(
14 | name='Containers',
15 | fields=[
16 | ('id', models.CharField(max_length=64, primary_key=True, serialize=False)),
17 | ('create_date', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
18 | ('username', models.CharField(max_length=30)),
19 | ('image_id', models.CharField(max_length=512)),
20 | ('image_tag', models.CharField(max_length=216)),
21 | ('image_name', models.CharField(default='1', max_length=216)),
22 | ('inside_port', models.CharField(max_length=128)),
23 | ('outside_port', models.CharField(max_length=128)),
24 | ('contain', models.CharField(max_length=512)),
25 | ('status', models.CharField(default='1', max_length=512)),
26 | ],
27 | ),
28 | migrations.AddField(
29 | model_name='dockername',
30 | name='display',
31 | field=models.BooleanField(default=True),
32 | ),
33 | ]
34 |
--------------------------------------------------------------------------------
/backend/migrations/0004_auto_20210117_2311.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.1.5 on 2021-01-17 23:11
2 |
3 | from django.db import migrations
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('backend', '0003_auto_20210117_2017'),
10 | ]
11 |
12 | operations = [
13 | migrations.RenameModel(
14 | old_name='DockerName',
15 | new_name='TopicName',
16 | ),
17 | ]
18 |
--------------------------------------------------------------------------------
/backend/migrations/0005_auto_20210118_0856.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.1.5 on 2021-01-18 08:56
2 |
3 | from django.db import migrations
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('backend', '0004_auto_20210117_2311'),
10 | ]
11 |
12 | operations = [
13 | migrations.RenameField(
14 | model_name='topicname',
15 | old_name='image_description',
16 | new_name='topic_description',
17 | ),
18 | migrations.RenameField(
19 | model_name='topicname',
20 | old_name='image_name',
21 | new_name='topic_name',
22 | ),
23 | ]
24 |
--------------------------------------------------------------------------------
/backend/migrations/0006_auto_20210118_0926.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.1.5 on 2021-01-18 09:26
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('backend', '0005_auto_20210118_0856'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='topicname',
15 | name='inside_port',
16 | field=models.CharField(default='80', max_length=126),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/backend/migrations/0007_auto_20210118_0931.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.1.5 on 2021-01-18 09:31
2 |
3 | from django.db import migrations
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('backend', '0006_auto_20210118_0926'),
10 | ]
11 |
12 | operations = [
13 | migrations.RenameField(
14 | model_name='topicname',
15 | old_name='images_tag',
16 | new_name='image_tag',
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/backend/migrations/0008_auto_20210118_1453.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.1.5 on 2021-01-18 14:53
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('backend', '0007_auto_20210118_0931'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='topicname',
15 | name='image_tag',
16 | field=models.CharField(max_length=45, null=True, unique=True),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/backend/migrations/0009_resolver.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.1.5 on 2021-01-18 15:10
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('backend', '0008_auto_20210118_1453'),
10 | ]
11 |
12 | operations = [
13 | migrations.CreateModel(
14 | name='Resolver',
15 | fields=[
16 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
17 | ('address', models.CharField(blank=True, max_length=30, null=True, verbose_name='地址')),
18 | ('create_date', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
19 | ('username', models.CharField(blank=True, max_length=30, null=True, verbose_name='用户')),
20 | ('score', models.IntegerField(default=0)),
21 | ('image_name', models.CharField(default='default', max_length=30)),
22 | ('category', models.CharField(max_length=1024)),
23 | ('type', models.CharField(default='docker', max_length=32)),
24 | ('answer', models.BooleanField(default=False)),
25 | ],
26 | ),
27 | ]
28 |
--------------------------------------------------------------------------------
/backend/migrations/0010_auto_20210118_1620.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.1.5 on 2021-01-18 16:20
2 |
3 | from django.db import migrations
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('backend', '0009_resolver'),
10 | ]
11 |
12 | operations = [
13 | migrations.RenameField(
14 | model_name='resolver',
15 | old_name='image_name',
16 | new_name='topic_name',
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/backend/migrations/0011_auto_20210118_2002.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.1.5 on 2021-01-18 20:02
2 |
3 | from django.db import migrations
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('backend', '0010_auto_20210118_1620'),
10 | ]
11 |
12 | operations = [
13 | migrations.RenameField(
14 | model_name='containers',
15 | old_name='image_name',
16 | new_name='topic_name',
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/backend/migrations/0012_auto_20210118_2044.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.1.5 on 2021-01-18 20:44
2 |
3 | from django.db import migrations
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('backend', '0011_auto_20210118_2002'),
10 | ]
11 |
12 | operations = [
13 | migrations.RenameField(
14 | model_name='resolver',
15 | old_name='address',
16 | new_name='image_tag',
17 | ),
18 | migrations.RenameField(
19 | model_name='topicname',
20 | old_name='images_status',
21 | new_name='image_status',
22 | ),
23 | ]
24 |
--------------------------------------------------------------------------------
/backend/migrations/0013_auto_20210122_1747.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.1.5 on 2021-01-22 17:47
2 |
3 | from django.db import migrations, models
4 | import django.db.models.deletion
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('backend', '0012_auto_20210118_2044'),
11 | ]
12 |
13 | operations = [
14 | migrations.AlterModelOptions(
15 | name='category',
16 | options={'ordering': ['create_date']},
17 | ),
18 | migrations.AlterModelOptions(
19 | name='topicname',
20 | options={'ordering': ['create_date']},
21 | ),
22 | migrations.AlterField(
23 | model_name='topicname',
24 | name='category',
25 | field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='category', to='backend.category', verbose_name='镜像分类'),
26 | ),
27 | migrations.AlterField(
28 | model_name='topicname',
29 | name='image_tag',
30 | field=models.CharField(max_length=45, null=True),
31 | ),
32 | ]
33 |
--------------------------------------------------------------------------------
/backend/migrations/0014_auto_20210125_1839.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.1.5 on 2021-01-25 18:39
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('backend', '0013_auto_20210122_1747'),
10 | ]
11 |
12 | operations = [
13 | migrations.AddField(
14 | model_name='topicname',
15 | name='flag_type',
16 | field=models.CharField(default='static', max_length=32),
17 | ),
18 | migrations.AlterField(
19 | model_name='topicname',
20 | name='flag_strings',
21 | field=models.CharField(default='flag{}', max_length=125, null=True),
22 | ),
23 | ]
24 |
--------------------------------------------------------------------------------
/backend/migrations/0015_containers_flag_string.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.1.5 on 2021-01-25 19:06
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('backend', '0014_auto_20210125_1839'),
10 | ]
11 |
12 | operations = [
13 | migrations.AddField(
14 | model_name='containers',
15 | name='flag_string',
16 | field=models.CharField(default='1', max_length=128, null=True),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/backend/migrations/0016_auto_20210125_2143.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.1.5 on 2021-01-25 21:43
2 |
3 | from django.db import migrations
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('backend', '0015_containers_flag_string'),
10 | ]
11 |
12 | operations = [
13 | migrations.RenameField(
14 | model_name='topicname',
15 | old_name='flag_strings',
16 | new_name='flag_string',
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/backend/migrations/0017_resolver_address.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.1.5 on 2021-01-26 11:19
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('backend', '0016_auto_20210125_2143'),
10 | ]
11 |
12 | operations = [
13 | migrations.AddField(
14 | model_name='resolver',
15 | name='address',
16 | field=models.CharField(max_length=32, null=True),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/backend/migrations/0018_topicname_score_type.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.1.5 on 2021-01-26 22:00
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('backend', '0017_resolver_address'),
10 | ]
11 |
12 | operations = [
13 | migrations.AddField(
14 | model_name='topicname',
15 | name='score_type',
16 | field=models.BooleanField(default=True),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/backend/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/migrations/__init__.py
--------------------------------------------------------------------------------
/backend/models/__init__.py:
--------------------------------------------------------------------------------
1 | from backend.models.users import *
2 | from backend.models.dockers import *
3 | from backend.models.category import *
4 |
--------------------------------------------------------------------------------
/backend/models/category.py:
--------------------------------------------------------------------------------
1 | from django.db import models
2 |
3 |
4 | class Category(models.Model):
5 | id = models.CharField(max_length=64, primary_key=True)
6 | category_name = models.CharField(max_length=30, unique=True)
7 | create_date = models.DateTimeField('创建时间', auto_now_add=True, null=True)
8 |
9 | class Meta:
10 | ordering = ['create_date']
11 |
12 | def __str__(self):
13 | return f"<{self.category_name} Category Model>"
14 |
--------------------------------------------------------------------------------
/backend/models/users.py:
--------------------------------------------------------------------------------
1 | from django.db import models
2 | from django.contrib.auth.models import AbstractUser
3 |
4 |
5 | class Users(AbstractUser):
6 | id = models.CharField(max_length=64, primary_key=True)
7 | create_date = models.DateTimeField('创建时间', auto_now_add=True, null=True)
8 | nickname = models.CharField(max_length=32, blank=True, null=True, verbose_name='昵称')
9 | sex = models.CharField(max_length=8, default='男')
10 | is_superuser = models.BooleanField()
11 | remark = models.CharField(max_length=128, blank=True, null=True, verbose_name='备注')
12 | last_ip = models.CharField(max_length=64, default="", verbose_name='最后登录的IP')
13 | last_time = models.CharField(max_length=32, default="", verbose_name='最后的登录时间')
14 |
15 | class Meta:
16 | verbose_name = '用户'
17 | verbose_name_plural = verbose_name
18 | ordering = ['-create_date']
19 |
20 | def __str__(self):
21 | return f"<{self.username}> Model"
22 |
23 |
24 | class Players(models.Model):
25 | id = models.CharField(max_length=64, primary_key=True)
26 | create_date = models.DateTimeField('创建时间', auto_now_add=True, null=True)
27 | username = models.CharField(max_length=32, blank=True, null=True, verbose_name='用户名')
28 | address = models.CharField(max_length=64, blank=True, null=True, verbose_name='地址')
29 | password = models.CharField(max_length=128, blank=True, null=True, verbose_name='密码哈希')
30 |
31 | class Meta:
32 | verbose_name = '参赛者'
33 | ordering = ['-create_date']
34 |
35 | def __str__(self):
36 | return f"<{self.username}> Model"
37 |
--------------------------------------------------------------------------------
/backend/static/backend/css/public.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 15px 15px 15px 15px;
3 | background: #f2f2f2;
4 | }
5 |
6 | .layuimini-container {
7 | border: 1px solid #f2f2f2;
8 | border-radius: 5px;
9 | background-color: #ffffff
10 | }
11 |
12 | .layuimini-main {
13 | margin: 10px 10px 10px 10px;
14 | }
15 |
16 | /**必填红点 */
17 | .layuimini-form > .layui-form-item > .required:after {
18 | content: '*';
19 | color: red;
20 | position: absolute;
21 | margin-left: 4px;
22 | font-weight: bold;
23 | line-height: 1.8em;
24 | top: 6px;
25 | right: 5px;
26 | }
27 |
28 | .layuimini-form > .layui-form-item > .layui-form-label {
29 | width: 120px !important;
30 | }
31 |
32 | .layuimini-form > .layui-form-item > .layui-input-block {
33 | margin-left: 150px !important;
34 | }
35 |
36 | .layuimini-form > .layui-form-item > .layui-input-block > tip {
37 | display: inline-block;
38 | margin-top: 10px;
39 | line-height: 10px;
40 | font-size: 10px;
41 | color: #a29c9c;
42 | }
43 |
44 | /**搜索框*/
45 | .layuimini-container .table-search-fieldset {
46 | margin: 0;
47 | border: 1px solid #e6e6e6;
48 | padding: 10px 20px 5px 20px;
49 | color: #6b6b6b;
50 | }
51 |
52 | /**自定义滚动条样式 */
53 | ::-webkit-scrollbar {
54 | width: 6px;
55 | height: 6px
56 | }
57 |
58 | ::-webkit-scrollbar-track {
59 | background-color: transparent;
60 | -webkit-border-radius: 2em;
61 | -moz-border-radius: 2em;
62 | border-radius: 2em;
63 | }
64 |
65 | ::-webkit-scrollbar-thumb {
66 | background-color: #9c9da0;
67 | -webkit-border-radius: 2em;
68 | -moz-border-radius: 2em;
69 | border-radius: 2em
70 | }
71 |
--------------------------------------------------------------------------------
/backend/static/backend/font/kumo.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/font/kumo.ttf
--------------------------------------------------------------------------------
/backend/static/backend/images/bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/images/bg.jpg
--------------------------------------------------------------------------------
/backend/static/backend/images/captcha.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/images/captcha.jpg
--------------------------------------------------------------------------------
/backend/static/backend/images/donate_qrcode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/images/donate_qrcode.png
--------------------------------------------------------------------------------
/backend/static/backend/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/images/favicon.ico
--------------------------------------------------------------------------------
/backend/static/backend/images/home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/images/home.png
--------------------------------------------------------------------------------
/backend/static/backend/images/icon-login.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/images/icon-login.png
--------------------------------------------------------------------------------
/backend/static/backend/images/loginbg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/images/loginbg.png
--------------------------------------------------------------------------------
/backend/static/backend/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/images/logo.png
--------------------------------------------------------------------------------
/backend/static/backend/js/lay-config.js:
--------------------------------------------------------------------------------
1 | /**
2 | * date:2019/08/16
3 | * author:Mr.Chung
4 | * description:此处放layui自定义扩展
5 | * version:2.0.4
6 | */
7 |
8 | window.rootPath = (function (src) {
9 | src = document.scripts[document.scripts.length - 1].src;
10 | return src.substring(0, src.lastIndexOf("/") + 1);
11 | })();
12 |
13 | layui.config({
14 | base: rootPath + "lay-module/",
15 | version: true
16 | }).extend({
17 | miniAdmin: "layuimini/miniAdmin", // layuimini后台扩展
18 | miniMenu: "layuimini/miniMenu", // layuimini菜单扩展
19 | miniTab: "layuimini/miniTab", // layuimini tab扩展
20 | miniTheme: "layuimini/miniTheme", // layuimini 主题扩展
21 | miniTongji: "layuimini/miniTongji", // layuimini 统计扩展
22 | step: 'step-lay/step', // 分步表单扩展
23 | treetable: 'treetable-lay/treetable', //table树形扩展
24 | tableSelect: 'tableSelect/tableSelect', // table选择扩展
25 | iconPickerFa: 'iconPicker/iconPickerFa', // fa图标选择扩展
26 | echarts: 'echarts/echarts', // echarts图表扩展
27 | echartsTheme: 'echarts/echartsTheme', // echarts图表主题扩展
28 | wangEditor: 'wangEditor/wangEditor', // wangEditor富文本扩展
29 | layarea: 'layarea/layarea', // 省市县区三级联动下拉选择器
30 | });
31 |
--------------------------------------------------------------------------------
/backend/static/backend/js/lay-module/layuimini/miniTongji.js:
--------------------------------------------------------------------------------
1 | /**
2 | * date:2020/03/01
3 | * author:Mr.Chung
4 | * version:2.0
5 | * description:layuimini 统计框架扩展
6 | */
7 | layui.define(["jquery"], function (exports) {
8 | var $ = layui.$;
9 |
10 | var miniTongji = {
11 |
12 | /**
13 | * 初始化
14 | * @param options
15 | */
16 | render: function (options) {
17 | options.specific = options.specific || false;
18 | options.domains = options.domains || [];
19 | var domain = window.location.hostname;
20 | if (options.specific === false || (options.specific === true && options.domains.indexOf(domain) >=0)) {
21 | miniTongji.listen();
22 | }
23 | },
24 |
25 | /**
26 | * 监听统计代码
27 | */
28 | listen: function () {
29 | var _hmt = _hmt || [];
30 | (function () {
31 | var hm = document.createElement("script");
32 | hm.src = "https://hm.baidu.com/hm.js?d97abf6d61c21d773f97835defbdef4e";
33 | var s = document.getElementsByTagName("script")[0];
34 | s.parentNode.insertBefore(hm, s);
35 | })();
36 | }
37 | };
38 |
39 | exports("miniTongji", miniTongji);
40 | });
--------------------------------------------------------------------------------
/backend/static/backend/js/lay-module/step-lay/step.css:
--------------------------------------------------------------------------------
1 | .lay-step {
2 | font-size: 0;
3 | width: 400px;
4 | margin: 0 auto;
5 | max-width: 100%;
6 | padding-left: 200px;
7 | }
8 |
9 | .step-item {
10 | display: inline-block;
11 | line-height: 26px;
12 | position: relative;
13 | font-size: 14px;
14 | }
15 |
16 | .step-item-tail {
17 | width: 100%;
18 | padding: 0 10px;
19 | position: absolute;
20 | left: 0;
21 | top: 13px;
22 | }
23 |
24 | .step-item-tail i {
25 | display: inline-block;
26 | width: 100%;
27 | height: 1px;
28 | vertical-align: top;
29 | background: #c2c2c2;
30 | position: relative;
31 | }
32 |
33 | .step-item-tail .step-item-tail-done {
34 | background: #009688;
35 | }
36 |
37 | .step-item-head {
38 | position: relative;
39 | display: inline-block;
40 | height: 26px;
41 | width: 26px;
42 | text-align: center;
43 | vertical-align: top;
44 | color: #009688;
45 | border: 1px solid #009688;
46 | border-radius: 50%;
47 | background: #ffffff;
48 | }
49 |
50 | .step-item-head.step-item-head-active {
51 | background: #009688;
52 | color: #ffffff;
53 | }
54 |
55 | .step-item-main {
56 | display: block;
57 | position: relative;
58 | margin-left: -50%;
59 | margin-right: 50%;
60 | padding-left: 26px;
61 | text-align: center;
62 | }
63 |
64 | .step-item-main-title {
65 | font-weight: bolder;
66 | color: #555555;
67 | }
68 |
69 | .step-item-main-desc {
70 | color: #aaaaaa;
71 | }
72 |
73 | .lay-step + [carousel-item]:before {
74 | display: none;
75 | }
76 |
77 | .lay-step + [carousel-item] > * {
78 | background-color: transparent;
79 | }
--------------------------------------------------------------------------------
/backend/static/backend/js/lay-module/treetable-lay/treetable.css:
--------------------------------------------------------------------------------
1 | .treeTable-empty {
2 | width: 20px;
3 | display: inline-block;
4 | }
5 |
6 | .treeTable-icon {
7 | cursor: pointer;
8 | }
9 |
10 | .treeTable-icon .layui-icon-triangle-d:before {
11 | content: "\e623";
12 | }
13 |
14 | .treeTable-icon.open .layui-icon-triangle-d:before {
15 | content: "\e625";
16 | background-color: transparent;
17 | }
18 |
19 |
--------------------------------------------------------------------------------
/backend/static/backend/js/lay-module/wangEditor/fonts/w-e-icon.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/js/lay-module/wangEditor/fonts/w-e-icon.woff
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/HELP-US-OUT.txt:
--------------------------------------------------------------------------------
1 | I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project,
2 | Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome,
3 | comprehensive icon sets or copy and paste your own.
4 |
5 | Please. Check it out.
6 |
7 | -Dave Gandy
8 |
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/font-awesome-4.7.0/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/less/animated.less:
--------------------------------------------------------------------------------
1 | // Animated Icons
2 | // --------------------------
3 |
4 | .@{fa-css-prefix}-spin {
5 | -webkit-animation: fa-spin 2s infinite linear;
6 | animation: fa-spin 2s infinite linear;
7 | }
8 |
9 | .@{fa-css-prefix}-pulse {
10 | -webkit-animation: fa-spin 1s infinite steps(8);
11 | animation: fa-spin 1s infinite steps(8);
12 | }
13 |
14 | @-webkit-keyframes fa-spin {
15 | 0% {
16 | -webkit-transform: rotate(0deg);
17 | transform: rotate(0deg);
18 | }
19 | 100% {
20 | -webkit-transform: rotate(359deg);
21 | transform: rotate(359deg);
22 | }
23 | }
24 |
25 | @keyframes fa-spin {
26 | 0% {
27 | -webkit-transform: rotate(0deg);
28 | transform: rotate(0deg);
29 | }
30 | 100% {
31 | -webkit-transform: rotate(359deg);
32 | transform: rotate(359deg);
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/less/bordered-pulled.less:
--------------------------------------------------------------------------------
1 | // Bordered & Pulled
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-border {
5 | padding: .2em .25em .15em;
6 | border: solid .08em @fa-border-color;
7 | border-radius: .1em;
8 | }
9 |
10 | .@{fa-css-prefix}-pull-left { float: left; }
11 | .@{fa-css-prefix}-pull-right { float: right; }
12 |
13 | .@{fa-css-prefix} {
14 | &.@{fa-css-prefix}-pull-left { margin-right: .3em; }
15 | &.@{fa-css-prefix}-pull-right { margin-left: .3em; }
16 | }
17 |
18 | /* Deprecated as of 4.4.0 */
19 | .pull-right { float: right; }
20 | .pull-left { float: left; }
21 |
22 | .@{fa-css-prefix} {
23 | &.pull-left { margin-right: .3em; }
24 | &.pull-right { margin-left: .3em; }
25 | }
26 |
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/less/core.less:
--------------------------------------------------------------------------------
1 | // Base Class Definition
2 | // -------------------------
3 |
4 | .@{fa-css-prefix} {
5 | display: inline-block;
6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/less/fixed-width.less:
--------------------------------------------------------------------------------
1 | // Fixed Width Icons
2 | // -------------------------
3 | .@{fa-css-prefix}-fw {
4 | width: (18em / 14);
5 | text-align: center;
6 | }
7 |
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/less/font-awesome.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */
5 |
6 | @import "variables.less";
7 | @import "mixins.less";
8 | @import "path.less";
9 | @import "core.less";
10 | @import "larger.less";
11 | @import "fixed-width.less";
12 | @import "list.less";
13 | @import "bordered-pulled.less";
14 | @import "animated.less";
15 | @import "rotated-flipped.less";
16 | @import "stacked.less";
17 | @import "icons.less";
18 | @import "screen-reader.less";
19 |
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/less/larger.less:
--------------------------------------------------------------------------------
1 | // Icon Sizes
2 | // -------------------------
3 |
4 | /* makes the font 33% larger relative to the icon container */
5 | .@{fa-css-prefix}-lg {
6 | font-size: (4em / 3);
7 | line-height: (3em / 4);
8 | vertical-align: -15%;
9 | }
10 | .@{fa-css-prefix}-2x { font-size: 2em; }
11 | .@{fa-css-prefix}-3x { font-size: 3em; }
12 | .@{fa-css-prefix}-4x { font-size: 4em; }
13 | .@{fa-css-prefix}-5x { font-size: 5em; }
14 |
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/less/list.less:
--------------------------------------------------------------------------------
1 | // List Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-ul {
5 | padding-left: 0;
6 | margin-left: @fa-li-width;
7 | list-style-type: none;
8 | > li { position: relative; }
9 | }
10 | .@{fa-css-prefix}-li {
11 | position: absolute;
12 | left: -@fa-li-width;
13 | width: @fa-li-width;
14 | top: (2em / 14);
15 | text-align: center;
16 | &.@{fa-css-prefix}-lg {
17 | left: (-@fa-li-width + (4em / 14));
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/less/mixins.less:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------
3 |
4 | .fa-icon() {
5 | display: inline-block;
6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 |
12 | }
13 |
14 | .fa-icon-rotate(@degrees, @rotation) {
15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})";
16 | -webkit-transform: rotate(@degrees);
17 | -ms-transform: rotate(@degrees);
18 | transform: rotate(@degrees);
19 | }
20 |
21 | .fa-icon-flip(@horiz, @vert, @rotation) {
22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)";
23 | -webkit-transform: scale(@horiz, @vert);
24 | -ms-transform: scale(@horiz, @vert);
25 | transform: scale(@horiz, @vert);
26 | }
27 |
28 |
29 | // Only display content to screen readers. A la Bootstrap 4.
30 | //
31 | // See: http://a11yproject.com/posts/how-to-hide-content/
32 |
33 | .sr-only() {
34 | position: absolute;
35 | width: 1px;
36 | height: 1px;
37 | padding: 0;
38 | margin: -1px;
39 | overflow: hidden;
40 | clip: rect(0,0,0,0);
41 | border: 0;
42 | }
43 |
44 | // Use in conjunction with .sr-only to only display content when it's focused.
45 | //
46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
47 | //
48 | // Credit: HTML5 Boilerplate
49 |
50 | .sr-only-focusable() {
51 | &:active,
52 | &:focus {
53 | position: static;
54 | width: auto;
55 | height: auto;
56 | margin: 0;
57 | overflow: visible;
58 | clip: auto;
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/less/path.less:
--------------------------------------------------------------------------------
1 | /* FONT PATH
2 | * -------------------------- */
3 |
4 | @font-face {
5 | font-family: 'FontAwesome';
6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}');
7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'),
8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'),
9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'),
10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'),
11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg');
12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
13 | font-weight: normal;
14 | font-style: normal;
15 | }
16 |
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/less/rotated-flipped.less:
--------------------------------------------------------------------------------
1 | // Rotated & Flipped Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); }
5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); }
6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); }
7 |
8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); }
9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); }
10 |
11 | // Hook for IE8-9
12 | // -------------------------
13 |
14 | :root .@{fa-css-prefix}-rotate-90,
15 | :root .@{fa-css-prefix}-rotate-180,
16 | :root .@{fa-css-prefix}-rotate-270,
17 | :root .@{fa-css-prefix}-flip-horizontal,
18 | :root .@{fa-css-prefix}-flip-vertical {
19 | filter: none;
20 | }
21 |
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/less/screen-reader.less:
--------------------------------------------------------------------------------
1 | // Screen Readers
2 | // -------------------------
3 |
4 | .sr-only { .sr-only(); }
5 | .sr-only-focusable { .sr-only-focusable(); }
6 |
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/less/stacked.less:
--------------------------------------------------------------------------------
1 | // Stacked Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-stack {
5 | position: relative;
6 | display: inline-block;
7 | width: 2em;
8 | height: 2em;
9 | line-height: 2em;
10 | vertical-align: middle;
11 | }
12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {
13 | position: absolute;
14 | left: 0;
15 | width: 100%;
16 | text-align: center;
17 | }
18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; }
19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; }
20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; }
21 |
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/scss/_animated.scss:
--------------------------------------------------------------------------------
1 | // Spinning Icons
2 | // --------------------------
3 |
4 | .#{$fa-css-prefix}-spin {
5 | -webkit-animation: fa-spin 2s infinite linear;
6 | animation: fa-spin 2s infinite linear;
7 | }
8 |
9 | .#{$fa-css-prefix}-pulse {
10 | -webkit-animation: fa-spin 1s infinite steps(8);
11 | animation: fa-spin 1s infinite steps(8);
12 | }
13 |
14 | @-webkit-keyframes fa-spin {
15 | 0% {
16 | -webkit-transform: rotate(0deg);
17 | transform: rotate(0deg);
18 | }
19 | 100% {
20 | -webkit-transform: rotate(359deg);
21 | transform: rotate(359deg);
22 | }
23 | }
24 |
25 | @keyframes fa-spin {
26 | 0% {
27 | -webkit-transform: rotate(0deg);
28 | transform: rotate(0deg);
29 | }
30 | 100% {
31 | -webkit-transform: rotate(359deg);
32 | transform: rotate(359deg);
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/scss/_bordered-pulled.scss:
--------------------------------------------------------------------------------
1 | // Bordered & Pulled
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-border {
5 | padding: .2em .25em .15em;
6 | border: solid .08em $fa-border-color;
7 | border-radius: .1em;
8 | }
9 |
10 | .#{$fa-css-prefix}-pull-left { float: left; }
11 | .#{$fa-css-prefix}-pull-right { float: right; }
12 |
13 | .#{$fa-css-prefix} {
14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; }
15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; }
16 | }
17 |
18 | /* Deprecated as of 4.4.0 */
19 | .pull-right { float: right; }
20 | .pull-left { float: left; }
21 |
22 | .#{$fa-css-prefix} {
23 | &.pull-left { margin-right: .3em; }
24 | &.pull-right { margin-left: .3em; }
25 | }
26 |
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/scss/_core.scss:
--------------------------------------------------------------------------------
1 | // Base Class Definition
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix} {
5 | display: inline-block;
6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/scss/_fixed-width.scss:
--------------------------------------------------------------------------------
1 | // Fixed Width Icons
2 | // -------------------------
3 | .#{$fa-css-prefix}-fw {
4 | width: (18em / 14);
5 | text-align: center;
6 | }
7 |
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/scss/_larger.scss:
--------------------------------------------------------------------------------
1 | // Icon Sizes
2 | // -------------------------
3 |
4 | /* makes the font 33% larger relative to the icon container */
5 | .#{$fa-css-prefix}-lg {
6 | font-size: (4em / 3);
7 | line-height: (3em / 4);
8 | vertical-align: -15%;
9 | }
10 | .#{$fa-css-prefix}-2x { font-size: 2em; }
11 | .#{$fa-css-prefix}-3x { font-size: 3em; }
12 | .#{$fa-css-prefix}-4x { font-size: 4em; }
13 | .#{$fa-css-prefix}-5x { font-size: 5em; }
14 |
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/scss/_list.scss:
--------------------------------------------------------------------------------
1 | // List Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-ul {
5 | padding-left: 0;
6 | margin-left: $fa-li-width;
7 | list-style-type: none;
8 | > li { position: relative; }
9 | }
10 | .#{$fa-css-prefix}-li {
11 | position: absolute;
12 | left: -$fa-li-width;
13 | width: $fa-li-width;
14 | top: (2em / 14);
15 | text-align: center;
16 | &.#{$fa-css-prefix}-lg {
17 | left: -$fa-li-width + (4em / 14);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/scss/_mixins.scss:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------
3 |
4 | @mixin fa-icon() {
5 | display: inline-block;
6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 |
12 | }
13 |
14 | @mixin fa-icon-rotate($degrees, $rotation) {
15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})";
16 | -webkit-transform: rotate($degrees);
17 | -ms-transform: rotate($degrees);
18 | transform: rotate($degrees);
19 | }
20 |
21 | @mixin fa-icon-flip($horiz, $vert, $rotation) {
22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)";
23 | -webkit-transform: scale($horiz, $vert);
24 | -ms-transform: scale($horiz, $vert);
25 | transform: scale($horiz, $vert);
26 | }
27 |
28 |
29 | // Only display content to screen readers. A la Bootstrap 4.
30 | //
31 | // See: http://a11yproject.com/posts/how-to-hide-content/
32 |
33 | @mixin sr-only {
34 | position: absolute;
35 | width: 1px;
36 | height: 1px;
37 | padding: 0;
38 | margin: -1px;
39 | overflow: hidden;
40 | clip: rect(0,0,0,0);
41 | border: 0;
42 | }
43 |
44 | // Use in conjunction with .sr-only to only display content when it's focused.
45 | //
46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
47 | //
48 | // Credit: HTML5 Boilerplate
49 |
50 | @mixin sr-only-focusable {
51 | &:active,
52 | &:focus {
53 | position: static;
54 | width: auto;
55 | height: auto;
56 | margin: 0;
57 | overflow: visible;
58 | clip: auto;
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/scss/_path.scss:
--------------------------------------------------------------------------------
1 | /* FONT PATH
2 | * -------------------------- */
3 |
4 | @font-face {
5 | font-family: 'FontAwesome';
6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}');
7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'),
8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'),
9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'),
10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),
11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');
12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
13 | font-weight: normal;
14 | font-style: normal;
15 | }
16 |
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/scss/_rotated-flipped.scss:
--------------------------------------------------------------------------------
1 | // Rotated & Flipped Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); }
5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }
6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }
7 |
8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }
9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); }
10 |
11 | // Hook for IE8-9
12 | // -------------------------
13 |
14 | :root .#{$fa-css-prefix}-rotate-90,
15 | :root .#{$fa-css-prefix}-rotate-180,
16 | :root .#{$fa-css-prefix}-rotate-270,
17 | :root .#{$fa-css-prefix}-flip-horizontal,
18 | :root .#{$fa-css-prefix}-flip-vertical {
19 | filter: none;
20 | }
21 |
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/scss/_screen-reader.scss:
--------------------------------------------------------------------------------
1 | // Screen Readers
2 | // -------------------------
3 |
4 | .sr-only { @include sr-only(); }
5 | .sr-only-focusable { @include sr-only-focusable(); }
6 |
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/scss/_stacked.scss:
--------------------------------------------------------------------------------
1 | // Stacked Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-stack {
5 | position: relative;
6 | display: inline-block;
7 | width: 2em;
8 | height: 2em;
9 | line-height: 2em;
10 | vertical-align: middle;
11 | }
12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {
13 | position: absolute;
14 | left: 0;
15 | width: 100%;
16 | text-align: center;
17 | }
18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; }
19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; }
20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; }
21 |
--------------------------------------------------------------------------------
/backend/static/backend/lib/font-awesome-4.7.0/scss/font-awesome.scss:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */
5 |
6 | @import "variables";
7 | @import "mixins";
8 | @import "path";
9 | @import "core";
10 | @import "larger";
11 | @import "fixed-width";
12 | @import "list";
13 | @import "bordered-pulled";
14 | @import "animated";
15 | @import "rotated-flipped";
16 | @import "stacked";
17 | @import "icons";
18 | @import "screen-reader";
19 |
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/css/modules/code.css:
--------------------------------------------------------------------------------
1 | /** layui-v2.5.5 MIT License By https://www.layui.com */
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}
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/css/modules/layer/default/icon-ext.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/css/modules/layer/default/icon-ext.png
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/css/modules/layer/default/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/css/modules/layer/default/icon.png
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/css/modules/layer/default/loading-0.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/css/modules/layer/default/loading-0.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/css/modules/layer/default/loading-1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/css/modules/layer/default/loading-1.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/css/modules/layer/default/loading-2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/css/modules/layer/default/loading-2.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/font/iconfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/font/iconfont.eot
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/font/iconfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/font/iconfont.ttf
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/font/iconfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/font/iconfont.woff
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/font/iconfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/font/iconfont.woff2
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/0.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/0.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/1.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/10.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/10.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/11.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/11.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/12.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/12.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/13.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/13.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/14.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/14.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/15.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/15.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/16.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/16.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/17.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/17.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/18.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/18.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/19.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/19.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/2.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/20.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/20.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/21.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/21.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/22.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/22.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/23.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/23.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/24.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/24.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/25.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/25.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/26.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/26.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/27.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/27.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/28.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/28.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/29.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/29.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/3.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/3.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/30.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/30.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/31.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/31.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/32.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/32.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/33.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/33.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/34.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/34.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/35.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/35.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/36.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/36.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/37.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/37.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/38.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/38.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/39.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/39.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/4.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/4.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/40.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/40.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/41.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/41.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/42.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/42.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/43.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/43.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/44.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/44.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/45.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/45.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/46.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/46.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/47.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/47.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/48.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/48.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/49.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/49.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/5.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/5.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/50.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/50.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/51.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/51.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/52.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/52.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/53.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/53.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/54.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/54.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/55.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/55.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/56.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/56.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/57.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/57.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/58.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/58.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/59.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/59.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/6.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/6.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/60.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/60.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/61.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/61.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/62.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/62.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/63.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/63.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/64.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/64.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/65.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/65.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/66.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/66.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/67.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/67.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/68.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/68.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/69.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/69.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/7.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/7.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/70.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/70.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/71.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/71.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/8.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/8.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/images/face/9.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/9.gif
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/lay/modules/code.js:
--------------------------------------------------------------------------------
1 | /** layui-v2.5.5 MIT License By https://www.layui.com */
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");
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/lay/modules/flow.js:
--------------------------------------------------------------------------------
1 | /** layui-v2.5.5 MIT License By https://www.layui.com */
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||(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)});
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/lay/modules/laytpl.js:
--------------------------------------------------------------------------------
1 | /** layui-v2.5.5 MIT License By https://www.layui.com */
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)});
--------------------------------------------------------------------------------
/backend/static/backend/lib/layui-v2.5.5/lay/modules/rate.js:
--------------------------------------------------------------------------------
1 | /** layui-v2.5.5 MIT License By https://www.layui.com */
2 | ;layui.define("jquery",function(e){"use strict";var a=layui.jquery,i={config:{},index:layui.rate?layui.rate.index+1e4:0,set:function(e){var i=this;return i.config=a.extend({},i.config,e),i},on:function(e,a){return layui.onevent.call(this,n,e,a)}},l=function(){var e=this,a=e.config;return{setvalue:function(a){e.setvalue.call(e,a)},config:a}},n="rate",t="layui-rate",o="layui-icon-rate",s="layui-icon-rate-solid",u="layui-icon-rate-half",r="layui-icon-rate-solid layui-icon-rate-half",c="layui-icon-rate-solid layui-icon-rate",f="layui-icon-rate layui-icon-rate-half",v=function(e){var l=this;l.index=++i.index,l.config=a.extend({},l.config,i.config,e),l.render()};v.prototype.config={length:5,text:!1,readonly:!1,half:!1,value:0,theme:""},v.prototype.render=function(){var e=this,i=e.config,l=i.theme?'style="color: '+i.theme+';"':"";i.elem=a(i.elem),parseInt(i.value)!==i.value&&(i.half||(i.value=Math.ceil(i.value)-i.value<.5?Math.ceil(i.value):Math.floor(i.value)));for(var n='",u=1;u<=i.length;u++){var r=' ";i.half&&parseInt(i.value)!==i.value&&u==Math.ceil(i.value)?n=n+' ":n+=r}n+="
"+(i.text?''+i.value+"星":"")+"";var c=i.elem,f=c.next("."+t);f[0]&&f.remove(),e.elemTemp=a(n),i.span=e.elemTemp.next("span"),i.setText&&i.setText(i.value),c.html(e.elemTemp),c.addClass("layui-inline"),i.readonly||e.action()},v.prototype.setvalue=function(e){var a=this,i=a.config;i.value=e,a.render()},v.prototype.action=function(){var e=this,i=e.config,l=e.elemTemp,n=l.find("i").width();l.children("li").each(function(e){var t=e+1,v=a(this);v.on("click",function(e){if(i.value=t,i.half){var o=e.pageX-a(this).offset().left;o<=n/2&&(i.value=i.value-.5)}i.text&&l.next("span").text(i.value+"星"),i.choose&&i.choose(i.value),i.setText&&i.setText(i.value)}),v.on("mousemove",function(e){if(l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+t+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half){var c=e.pageX-a(this).offset().left;c<=n/2&&v.children("i").addClass(u).removeClass(s)}}),v.on("mouseleave",function(){l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+Math.floor(i.value)+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half&&parseInt(i.value)!==i.value&&l.children("li:eq("+Math.floor(i.value)+")").children("i").addClass(u).removeClass(c)})})},v.prototype.events=function(){var e=this;e.config},i.render=function(e){var a=new v(e);return l.call(a)},e(n,i)});
--------------------------------------------------------------------------------
/backend/templates/backend/page/category/add.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {% load static %}
5 |
6 | layui
7 |
8 |
9 |
10 |
11 |
12 |
17 |
18 |
19 |
36 |
37 |
75 |
76 |
--------------------------------------------------------------------------------
/backend/views/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/views/__init__.py
--------------------------------------------------------------------------------
/backend/views/container.py:
--------------------------------------------------------------------------------
1 | from django.shortcuts import render
2 | from django.views.generic import View
3 | from django.http import JsonResponse
4 | from django.utils.decorators import method_decorator
5 | from django.views.decorators.clickjacking import xframe_options_exempt
6 |
7 | from librarys.mixin.permission import AdminRequiredMixin
8 | from librarys.common.dockers import ImageStop
9 |
10 | from backend.models.dockers import Containers
11 |
12 |
13 | class ContainerView(AdminRequiredMixin, View):
14 | template_name = "backend/page/container/table.html"
15 |
16 | @method_decorator(xframe_options_exempt)
17 | def get(self, request):
18 | return render(request, self.template_name)
19 |
20 | @staticmethod
21 | def post(request):
22 | uid = request.POST.get("id", "")
23 | action = request.POST.get("action", "")
24 | operate = request.POST.get("operate", "")
25 |
26 | if operate == "delete":
27 |
28 | if action == "each":
29 | Containers.objects.filter(id=uid).delete()
30 |
31 | elif action == "batch":
32 | container_id = uid.split(",")
33 | Containers.objects.filter(id__in=container_id).delete()
34 |
35 | elif action == "all":
36 | containers = Containers.objects.all()
37 | for i in containers:
38 | if i.status == "Running":
39 | # 启用分线程关闭容器
40 | obj = ImageStop(i.contain)
41 | obj.start()
42 |
43 | containers.delete()
44 |
45 | else:
46 | data = {"status": 403, "msg": "方式错误"}
47 | return JsonResponse(data, safe=False)
48 |
49 | data = {"status": 200, "msg": "容器删除成功"}
50 | return JsonResponse(data, safe=False)
51 |
52 | elif operate == "stop":
53 | nums = Containers.objects.filter(id=uid).count()
54 | if nums > 0:
55 | container = Containers.objects.get(id=uid)
56 | container.status = "Stop"
57 | container.save()
58 |
59 | # 启用分线程关闭容器
60 | obj = ImageStop(container.contain)
61 | obj.start()
62 |
63 | data = {"status": 200, "msg": "容器终止"}
64 | return JsonResponse(data, safe=False)
65 |
--------------------------------------------------------------------------------
/backend/views/index.py:
--------------------------------------------------------------------------------
1 | from django.shortcuts import render
2 | from django.shortcuts import HttpResponse
3 | from django.http import JsonResponse
4 | from django.contrib.auth import logout
5 | from django.contrib.auth import authenticate
6 | from django.views.generic import View
7 | from django.utils.decorators import method_decorator
8 | from django.views.decorators.clickjacking import xframe_options_exempt
9 |
10 | from librarys.mixin.permission import AdminRequiredMixin
11 | from backend.models.users import Users
12 |
13 |
14 | class IndexView(AdminRequiredMixin, View):
15 | template_name = "backend/index.html"
16 | title = "管理"
17 |
18 | def get(self, request):
19 | return render(request, self.template_name, {'title': self.title})
20 |
21 |
22 | class LogoutView(AdminRequiredMixin, View):
23 |
24 | @staticmethod
25 | def get(request):
26 | logout(request)
27 | data = {"status": 200}
28 | return JsonResponse(data, safe=False)
29 |
30 |
31 | class ChangeView(AdminRequiredMixin, View):
32 | template_name = "backend/page/change.html"
33 | title = "修改密码"
34 |
35 | @method_decorator(xframe_options_exempt)
36 | def get(self, request):
37 | return render(request, self.template_name, {'title': self.title})
38 |
39 | @staticmethod
40 | def post(request):
41 | password0 = request.POST.get("old_password", "")
42 | password1 = request.POST.get("new_password", "")
43 | password2 = request.POST.get("again_password", "")
44 |
45 | if password1 != password2:
46 | data = {"status": 403, "msg": "两次密码不同"}
47 | return JsonResponse(data, safe=False)
48 |
49 | user = authenticate(username=request.user.username, password=password0)
50 |
51 | if user is not None and user.is_active:
52 | user.set_password(password1)
53 | user.save()
54 |
55 | data = {"status": 200, "msg": "密码修改成功"}
56 | return JsonResponse(data, safe=False)
57 |
58 | else:
59 | data = {"status": 403, "msg": "旧密码不匹配"}
60 | return JsonResponse(data, safe=False)
61 |
62 |
63 | class RegView(View):
64 |
65 | @staticmethod
66 | def get(request):
67 | user = Users.objects.filter(username="luffy")
68 | if user.count() != 0:
69 | return "用户已存在"
70 |
71 | Users.objects.create_user(username="luffy", password="shadow", is_superuser=True)
72 |
73 | return HttpResponse("shadow")
74 |
--------------------------------------------------------------------------------
/backend/views/login.py:
--------------------------------------------------------------------------------
1 | from django.views.generic import View
2 | from django.contrib.auth import authenticate
3 | from django.contrib.auth import login
4 | from django.shortcuts import render
5 | from django.shortcuts import reverse
6 | from django.http import JsonResponse
7 |
8 | from backend.models.users import Users
9 |
10 | from librarys.utils.strings import get_now_time
11 |
12 |
13 | class LoginView(View):
14 | template_name = "backend/login.html"
15 |
16 | def get(self, request):
17 | return render(request, self.template_name)
18 |
19 | @staticmethod
20 | def post(request):
21 | username = request.POST.get("username", None)
22 | password = request.POST.get("password", None)
23 | captcha = request.POST.get("captcha", None)
24 |
25 | if request.session["valid_code"].lower() != captcha.lower():
26 | data = {"status": 403, "msg": "验证码错误"}
27 | return JsonResponse(data, safe=False)
28 |
29 | user = authenticate(username=username, password=password)
30 |
31 | if user is not None:
32 |
33 | # login方法实现登录
34 | login(request, user)
35 |
36 | # 更新用户登录的时间和ip
37 | user = Users.objects.get(username=username)
38 | user.last_time = get_now_time()
39 | user.last_ip = request.META.get('REMOTE_ADDR', '0.0.0.0')
40 | user.save()
41 |
42 | data = {"status": 200, "url_jump": reverse("back_index")}
43 | return JsonResponse(data, safe=False)
44 |
45 | else:
46 | # 无论数据提交是否成功,都要在服务器端刷新一遍验证码
47 | # Refresh(request)
48 |
49 | # res = requests.get("http://127.0.0.1:8000/get_valid_img")
50 | data = {"status": 403, "msg": "用户名或者是密码错误"}
51 | return JsonResponse(data, safe=False)
52 |
--------------------------------------------------------------------------------
/backend/views/resolver.py:
--------------------------------------------------------------------------------
1 | from django.shortcuts import render
2 | from django.views.generic import View
3 | from django.http import JsonResponse
4 | from django.utils.decorators import method_decorator
5 | from django.views.decorators.clickjacking import xframe_options_exempt
6 |
7 | from librarys.mixin.permission import AdminRequiredMixin
8 |
9 | from backend.models.dockers import Resolver
10 |
11 |
12 | class ResolverView(AdminRequiredMixin, View):
13 | template_name = "backend/page/resolver/table.html"
14 |
15 | @method_decorator(xframe_options_exempt)
16 | def get(self, request):
17 | return render(request, self.template_name)
18 |
19 | @staticmethod
20 | def post(request):
21 | # 数据只有清空操作,避免舞弊
22 | action = request.POST.get("action", "")
23 |
24 | if action == "delete":
25 | Resolver.objects.all().delete()
26 |
27 | else:
28 | data = {"status": 403, "msg": "方式错误"}
29 | return JsonResponse(data, safe=False)
30 |
31 | data = {"status": 200, "msg": "信息删除成功"}
32 | return JsonResponse(data, safe=False)
33 |
--------------------------------------------------------------------------------
/backend/views/score.py:
--------------------------------------------------------------------------------
1 | from django.shortcuts import render
2 | from django.views.generic import View
3 | from django.utils.decorators import method_decorator
4 | from django.views.decorators.clickjacking import xframe_options_exempt
5 |
6 | from librarys.mixin.permission import AdminRequiredMixin
7 |
8 |
9 | class PersonScoreView(AdminRequiredMixin, View):
10 | template_name = "backend/page/score/person.html"
11 |
12 | @method_decorator(xframe_options_exempt)
13 | def get(self, request):
14 | return render(request, self.template_name)
15 |
--------------------------------------------------------------------------------
/backend/views/setting.py:
--------------------------------------------------------------------------------
1 | from django.shortcuts import render
2 | from django.views.generic import View
3 | from django.utils.decorators import method_decorator
4 | from django.views.decorators.clickjacking import xframe_options_exempt
5 |
6 | from librarys.mixin.permission import AdminRequiredMixin
7 |
8 |
9 | class SettingMenu(AdminRequiredMixin, View):
10 | template_name = "backend/page/setting.html"
11 |
12 | @method_decorator(xframe_options_exempt)
13 | def get(self, request):
14 | return render(request, self.template_name)
15 |
--------------------------------------------------------------------------------
/backend/views/uploads.py:
--------------------------------------------------------------------------------
1 | import time
2 |
3 | from settings.base import BASE_DIR
4 | from django.views.generic import View
5 | from django.http import JsonResponse
6 | from django.views.decorators.csrf import csrf_exempt
7 |
8 | from librarys.mixin.permission import AdminRequiredMixin
9 | from librarys.utils.strings import gen_md5
10 | from settings.config import WHITE_LIST
11 |
12 |
13 | class UploadView(AdminRequiredMixin, View):
14 |
15 | @staticmethod
16 | def post(request):
17 | upload_file = request.FILES.get("file", None) # 获取上传的文件,如果没有文件,则默认为None
18 | if not upload_file:
19 | data = {
20 | "code": 1,
21 | "msg": "文件上传错误",
22 | }
23 |
24 | return JsonResponse(data)
25 |
26 | extra_name = upload_file.name.split(".")[-1]
27 |
28 | if extra_name not in WHITE_LIST:
29 | data = {
30 | "code": 1,
31 | "msg": f"只允许上传后缀为{','.join(WHITE_LIST)}的文件",
32 | }
33 |
34 | return JsonResponse(data)
35 |
36 | filename = gen_md5(str(time.time()).encode("utf-8")) + "." + upload_file.name.split(".")[-1]
37 | store_path = BASE_DIR.joinpath("front", "static", "front", "uploads", filename)
38 | destination = open(store_path, 'wb+') # 打开特定的文件进行二进制的写操作
39 | for chunk in upload_file.chunks(): # 分块写入文件
40 | destination.write(chunk)
41 | destination.close()
42 |
43 | full_path = str(store_path).replace(str(BASE_DIR.joinpath("front")), "")
44 | data = {
45 | "code": 0,
46 | "msg": "文件上传成功",
47 | "src": full_path,
48 | }
49 |
50 | return JsonResponse(data)
51 |
52 | @csrf_exempt
53 | def dispatch(self, *args, **kwargs):
54 | return super(UploadView, self).dispatch(*args, **kwargs)
55 |
--------------------------------------------------------------------------------
/backend/views/welcome.py:
--------------------------------------------------------------------------------
1 | from django.shortcuts import render
2 | from django.views.generic import View
3 | from django.utils.decorators import method_decorator
4 | from django.views.decorators.clickjacking import xframe_options_exempt
5 |
6 | from backend.models.users import Users
7 | from backend.models.users import Players
8 | from backend.models.dockers import TopicName
9 | from backend.models.category import Category
10 |
11 | from librarys.mixin.permission import AdminRequiredMixin
12 |
13 |
14 | class WelcomeView(AdminRequiredMixin, View):
15 | template_name = "backend/page/welcome.html"
16 |
17 | @method_decorator(xframe_options_exempt)
18 | def get(self, request):
19 | users_nums = Users.objects.count()
20 | players_nums = Players.objects.count()
21 | topic_nums = TopicName.objects.count()
22 | category_nums = Category.objects.count()
23 |
24 | return render(request, self.template_name, locals())
25 |
--------------------------------------------------------------------------------
/data/logs/info.log:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/data/logs/info.log
--------------------------------------------------------------------------------
/doc/DEPLOY.md:
--------------------------------------------------------------------------------
1 | # 镜像部署文档
2 | 0x01 平台地址:http://127.0.0.1:8000/back/login 默认账户 luffy:shadow
3 |
4 | 0x02 要想自己部署题目,必须有docker经验,将题目封装在docker中,镜像对外开放一个或多个端口.
5 |
6 | 0x03 比赛者在启动题目时平台会自动将内网的端口映射到宿主机的随机端口上,端口范围在10000-20000之间,请务必确认该区间的端口没有被占用。
7 |
8 | 0x04 题目部署时平台会先在本地寻找镜像,如果找不到则从仓库中下载,如果仓库中也没有平台则会报错
9 |
10 | 0x05 部署时 题目部署->添加
11 | 
12 | 这里面需要注意的只有两个地方
13 | 镜像标签就是docker的标签,比如nginx:latest
14 | 端口号则是docker镜像开放的端口,采用的形式可以是80或者是80,22。
15 |
16 | 0x06 动态flag题目部署,动态flag只支持docker镜像,只要在根目录下创建一个start.sh,写入修改flag的语句即可(请先确认容器内存在bash,比如apt install bash),示例:
17 |
18 | ```shell script
19 | #!/bin/bash
20 | # BlackStone平台使用
21 | # Author:
22 |
23 | # 替换
24 | sed -i "s/flag{538575657edccfc1c7b9a5bbcb96b66d}/$1/g" /var/www/html/flag.php
25 | # 根目录
26 | echo $1 > /flag.txt
27 | # ELF文件
28 | sed -i "s/flag{538575657edccfc1c7b9a5bbcb96b66d}/$1/g" /flag.c && gcc -o flag flag.c
29 | ```
30 |
--------------------------------------------------------------------------------
/doc/config/daphne_supervisor.conf:
--------------------------------------------------------------------------------
1 | [program:daphne]
2 | directory=/opt/docker/Finisher ;#项目目录
3 | user=root
4 | command=keyword -b 127.0.0.1 -p 8001 asgi:application ;#启动命令
5 | autostart=true
6 | autorestart=true
7 | stdout_logfile=/tmp/daphne.log ;#日志
8 | redirect_stderr=true
--------------------------------------------------------------------------------
/doc/config/nginx_supervisor.conf:
--------------------------------------------------------------------------------
1 | [program:nginx]
2 | directory=/usr/local/nginx ;#项目目录
3 | user=root
4 | command=/usr/local/nginx/sbin/nginx ;#启动命令
5 | autostart=true
6 | autorestart=true
7 | stdout_logfile=/tmp/nginx.log ;#日志
8 | redirect_stderr=true
--------------------------------------------------------------------------------
/doc/example/91255b4fc07c33c92711abec6098b8db.txt:
--------------------------------------------------------------------------------
1 | flag{3473d48903546b3ab996bce49667b040}
--------------------------------------------------------------------------------
/doc/example/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM nginx:latest
2 |
3 | COPY index.html /usr/share/nginx/html/
4 | COPY robots.txt /usr/share/nginx/html/
5 | COPY 91255b4fc07c33c92711abec6098b8db.txt /usr/share/nginx/html/
--------------------------------------------------------------------------------
/doc/example/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 测试
6 |
7 |
8 |
9 | Hello World
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/doc/example/robots.txt:
--------------------------------------------------------------------------------
1 | # robots.txt generated at http://tool.chinaz.com/robots
2 | User-agent: *
3 | Disallow: /91255b4fc07c33c92711abec6098b8db.txt
--------------------------------------------------------------------------------
/doc/img/img1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/doc/img/img1.png
--------------------------------------------------------------------------------
/doc/img/img2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/doc/img/img2.png
--------------------------------------------------------------------------------
/doc/img/img3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/doc/img/img3.png
--------------------------------------------------------------------------------
/doc/img/stone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/doc/img/stone.png
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: "3"
2 | services:
3 | postgres:
4 | image: postgres:13-alpine
5 | restart: always
6 | environment:
7 | POSTGRES_DB: django
8 | POSTGRES_USER: postgres
9 | POSTGRES_PASSWORD: sh@dow
10 | ports:
11 | - 127.0.0.1:5432:5432
--------------------------------------------------------------------------------
/front/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/__init__.py
--------------------------------------------------------------------------------
/front/apps.py:
--------------------------------------------------------------------------------
1 | from django.apps import AppConfig
2 |
3 |
4 | class FrontConfig(AppConfig):
5 | name = 'front'
6 |
--------------------------------------------------------------------------------
/front/front_urls.py:
--------------------------------------------------------------------------------
1 | from front.views.index import IndexView
2 | from front.views.captcha import CaptchaView
3 | from front.views.users import RegisterView
4 | from front.views.users import LoginView
5 | from front.views.users import LogoutView
6 | from front.views.users import ShowPlayersView
7 | from front.views.topics import TopicsView
8 | from front.views.topics import TopicSingleView
9 | from front.views.images import DockerOperationView
10 | from front.views.flag import CheckFlagView
11 | from front.views.rank import RankView
12 | from front.views.personal import PersonalView
13 |
14 | from django.urls import path
15 |
16 | urlpatterns = [
17 | path('', IndexView.as_view(), name="front_index"),
18 | path('captcha/', CaptchaView.as_view(), name="captcha"),
19 | path('reg', RegisterView.as_view(), name="front_reg"),
20 | path('login', LoginView.as_view(), name="front_login"),
21 | path('logout', LogoutView.as_view(), name="front_logout"),
22 | path('players', ShowPlayersView.as_view(), name="front_players"),
23 | path('topics', TopicsView.as_view(), name="front_topics"),
24 | path('topic/', TopicSingleView.as_view(), name="front_topic"),
25 | path('images', DockerOperationView.as_view(), name="front_operate"),
26 | path('flag', CheckFlagView.as_view(), name="front_flag"),
27 | path('score', RankView.as_view(), name="front_rank"),
28 | path('personal/', PersonalView.as_view(), name="front_personal"),
29 | ]
30 |
--------------------------------------------------------------------------------
/front/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/migrations/__init__.py
--------------------------------------------------------------------------------
/front/static/front/css/font.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'iconfont';
3 | src: url('../fonts/iconfont.eot');
4 | src: url('../fonts/iconfont.eot?#iefix') format('embedded-opentype'),
5 | url('../fonts/iconfont.woff') format('woff'),
6 | url('../fonts/iconfont.ttf') format('truetype'),
7 | url('../fonts/iconfont.svg#iconfont') format('svg');
8 | }
9 | .iconfont{
10 | font-family:"iconfont" !important;
11 | font-size:16px;font-style:normal;
12 | -webkit-font-smoothing: antialiased;
13 | -webkit-text-stroke-width: 0.2px;
14 | -moz-osx-font-smoothing: grayscale;
15 | }
16 |
17 |
--------------------------------------------------------------------------------
/front/static/front/css/full.css:
--------------------------------------------------------------------------------
1 | /*! 默认风格 */
2 |
3 | html body{margin-top:0; margin-left: 136px;}
4 | html .fly-full{margin-top: 0;}
5 |
6 | .main{width:auto; margin:15px 24px 15px 24px;}
7 | .content{margin-right: 360px;}
8 | .jie-row li .jie-title{max-width:70%;}
9 |
10 | /* 头部 */
11 | .header{width:136px; height:100%;}
12 | .header .main{position: static; width:auto;}
13 | .logo{top:20px; left:50%; width:86px; height:74px; margin-left:-43px; background:url(../images/logo-1.png);}
14 | .nav{position:relative; left:0; top:110px; border-top:1px solid #282C35;}
15 | .nav a{display:block; height:50px; line-height:50px; padding:0; text-align:center;}
16 | .nav a:first-child{border-top:1px solid #424857;}
17 | .nav-user span{margin-top: 10px;}
18 |
19 | .icon-touxiang{font-size: 60px;}
20 |
21 | .nav-user{top: auto; bottom:20px; left:0; width:100%;}
22 | .nav-user span,
23 | .nav-user .unlogin,
24 | .out-login,
25 | .avatar,
26 | .avatar cite,
27 | .nav-user .nav{display:block; *display:block; text-align:center;}
28 | .nav-user span{top: 0;}
29 | .nav-user span a{padding:0 6px;}
30 | .nav-user .unlogin{margin-right: 0;}
31 | .out-login{margin-left:0; margin-top:20px;}
32 | .out-login a{ padding:0 5px;}
33 | .nav-user .nav{position:relative; margin-left: 0; margin-top: 15px;}
34 |
35 | .avatar img{width:60px; height:60px;}
36 | .avatar cite{margin-left: 0; margin-top:10px; }
37 | .avatar i{margin-left: 0;}
38 |
39 | .nav-message{left: auto; right: 10px;}
40 |
41 | /* 适配 */
42 | @media screen and (max-width: 1024px) {
43 | html body{margin-left: 140px;}
44 | .main{margin: 15px 10px;}
45 | .content{margin: 0;}
46 | .edge{display:none}
47 | }
48 |
49 | @media screen and (max-width: 750px) {
50 | html body{margin-left:0;}
51 | .header{left:-140px;}
52 | .edge{display: block;}
53 | }
54 |
--------------------------------------------------------------------------------
/front/static/front/css/iconfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/css/iconfont.eot
--------------------------------------------------------------------------------
/front/static/front/css/iconfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/css/iconfont.ttf
--------------------------------------------------------------------------------
/front/static/front/css/iconfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/css/iconfont.woff
--------------------------------------------------------------------------------
/front/static/front/css/modules/code.css:
--------------------------------------------------------------------------------
1 | /** layui-v2.5.4 MIT License By https://www.layui.com */
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}
--------------------------------------------------------------------------------
/front/static/front/css/modules/layer/default/icon-ext.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/css/modules/layer/default/icon-ext.png
--------------------------------------------------------------------------------
/front/static/front/css/modules/layer/default/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/css/modules/layer/default/icon.png
--------------------------------------------------------------------------------
/front/static/front/css/modules/layer/default/loading-0.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/css/modules/layer/default/loading-0.gif
--------------------------------------------------------------------------------
/front/static/front/css/modules/layer/default/loading-1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/css/modules/layer/default/loading-1.gif
--------------------------------------------------------------------------------
/front/static/front/css/modules/layer/default/loading-2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/css/modules/layer/default/loading-2.gif
--------------------------------------------------------------------------------
/front/static/front/css/theme1.css:
--------------------------------------------------------------------------------
1 | body{
2 | background:#F2F1F2;
3 | }
4 | .container{
5 | background:#1A1B20;
6 | }
7 | .left-nav{
8 | background:#1A1B20;
9 | }
10 |
11 | .left-nav a{
12 | color:rgba(255,255,255,.7);
13 | }
14 | ..left-nav a.active{
15 | background: #009688 !important;
16 | color: #fff;
17 | }
18 | .left-nav a:hover{
19 | background: #009688 !important;
20 | color: #fff;
21 | }
--------------------------------------------------------------------------------
/front/static/front/css/theme2.css:
--------------------------------------------------------------------------------
1 | body{
2 | background:#EEF5F9;
3 | }
4 | .container{
5 | background:#323640;
6 | }
7 | .left-nav{
8 | background:#fff;
9 | }
10 |
11 | .left-nav a{
12 | color:#686a76;
13 | }
14 | .left-nav a.active{
15 | background: #786AED !important;
16 | color: #fff;
17 | }
18 | .left-nav a:hover{
19 | background: #786AED !important;
20 | color: #fff;
21 | }
22 |
--------------------------------------------------------------------------------
/front/static/front/css/theme3.css:
--------------------------------------------------------------------------------
1 | body{
2 | background:#E8E8E8;
3 | }
4 | .container{
5 | background:#F34743;
6 | }
7 |
8 | .left-nav{
9 | background:#F4F4F4;
10 | }
11 |
12 | .left-nav a{
13 | color:#686a76;
14 | }
15 | .left-nav a.active{
16 | background: #FEFEFE !important;
17 | color: #F34743;
18 | }
19 | .left-nav a:hover{
20 | background: #FEFEFE !important;
21 | color: #F34743;
22 | }
--------------------------------------------------------------------------------
/front/static/front/css/theme4.css:
--------------------------------------------------------------------------------
1 | body{
2 | background:#E4E4E4;
3 | }
4 | .container{
5 | background:#019587;
6 | }
7 | .left-nav{
8 | background:#263035;
9 | }
10 |
11 | .left-nav a{
12 | color:#fff;
13 | }
14 | .left-nav a.active{
15 | background: #212525 !important;
16 | color: #fff !important;
17 | }
18 | .left-nav a:hover{
19 | background: #212525 !important;
20 | color: #fff !important;
21 | }
--------------------------------------------------------------------------------
/front/static/front/css/theme5.css:
--------------------------------------------------------------------------------
1 | body{
2 | background:#EEF5F9 !important;
3 | }
4 | .container{
5 | background:linear-gradient(to left, #7b4397, #2196f3);
6 | }
7 |
8 | .left-nav{
9 | background:#fff !important;
10 | }
11 |
12 | .left-nav a{
13 | color:#686a76 !important;
14 | }
15 | .left-nav a.active{
16 | background: linear-gradient(to left, #7c8ce4, #2196f3) !important;
17 | color: #fff !important;
18 | border-color: #7b4397 !important;
19 | }
20 | .left-nav a:hover{
21 | background: linear-gradient(to left, #7c8ce4, #2196f3) !important;
22 | color: #fff !important;
23 | border-color: #7b4397 !important;
24 | }
25 | .container .logo a{
26 | background: rgba(0,0,0,0) !important;
27 | }
--------------------------------------------------------------------------------
/front/static/front/img/body_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/body_bg.png
--------------------------------------------------------------------------------
/front/static/front/img/bottom_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/bottom_bg.png
--------------------------------------------------------------------------------
/front/static/front/img/bottom_nav_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/bottom_nav_1.png
--------------------------------------------------------------------------------
/front/static/front/img/bottom_nav_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/bottom_nav_2.png
--------------------------------------------------------------------------------
/front/static/front/img/bottom_nav_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/bottom_nav_3.png
--------------------------------------------------------------------------------
/front/static/front/img/bsjl_img1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/bsjl_img1.png
--------------------------------------------------------------------------------
/front/static/front/img/bsjl_img2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/bsjl_img2.png
--------------------------------------------------------------------------------
/front/static/front/img/bsjl_img3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/bsjl_img3.png
--------------------------------------------------------------------------------
/front/static/front/img/dt_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/dt_bg.png
--------------------------------------------------------------------------------
/front/static/front/img/dt_bg2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/dt_bg2.png
--------------------------------------------------------------------------------
/front/static/front/img/index-tx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/index-tx.png
--------------------------------------------------------------------------------
/front/static/front/img/index_banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/index_banner.png
--------------------------------------------------------------------------------
/front/static/front/img/index_banner.png_bak:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/index_banner.png_bak
--------------------------------------------------------------------------------
/front/static/front/img/inform_bg-bottom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/inform_bg-bottom.png
--------------------------------------------------------------------------------
/front/static/front/img/inform_bg-center.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/inform_bg-center.png
--------------------------------------------------------------------------------
/front/static/front/img/inform_bg-top.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/inform_bg-top.png
--------------------------------------------------------------------------------
/front/static/front/img/inform_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/inform_bg.png
--------------------------------------------------------------------------------
/front/static/front/img/inform_bg2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/inform_bg2.png
--------------------------------------------------------------------------------
/front/static/front/img/inform_bg_ul-li.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/inform_bg_ul-li.png
--------------------------------------------------------------------------------
/front/static/front/img/inform_bg_ul.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/inform_bg_ul.png
--------------------------------------------------------------------------------
/front/static/front/img/inform_bigBg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/inform_bigBg.png
--------------------------------------------------------------------------------
/front/static/front/img/inform_new.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/inform_new.png
--------------------------------------------------------------------------------
/front/static/front/img/inform_titleBg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/inform_titleBg.png
--------------------------------------------------------------------------------
/front/static/front/img/inform_tz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/inform_tz.png
--------------------------------------------------------------------------------
/front/static/front/img/inform_zd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/inform_zd.png
--------------------------------------------------------------------------------
/front/static/front/img/lc_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/lc_bg.png
--------------------------------------------------------------------------------
/front/static/front/img/login_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/login_bg.png
--------------------------------------------------------------------------------
/front/static/front/img/login_bg_form.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/login_bg_form.png
--------------------------------------------------------------------------------
/front/static/front/img/login_icon1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/login_icon1.png
--------------------------------------------------------------------------------
/front/static/front/img/login_icon2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/login_icon2.png
--------------------------------------------------------------------------------
/front/static/front/img/login_icon3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/login_icon3.png
--------------------------------------------------------------------------------
/front/static/front/img/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/logo.png
--------------------------------------------------------------------------------
/front/static/front/img/logo_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/logo_bg.png
--------------------------------------------------------------------------------
/front/static/front/img/name_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/name_bg.png
--------------------------------------------------------------------------------
/front/static/front/img/nav_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/nav_bg.png
--------------------------------------------------------------------------------
/front/static/front/img/question2_fhj.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/question2_fhj.png
--------------------------------------------------------------------------------
/front/static/front/img/question2_input.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/question2_input.png
--------------------------------------------------------------------------------
/front/static/front/img/question2_tjbg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/question2_tjbg.png
--------------------------------------------------------------------------------
/front/static/front/img/question2_wtBG.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/question2_wtBG.png
--------------------------------------------------------------------------------
/front/static/front/img/questions_bt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/questions_bt.png
--------------------------------------------------------------------------------
/front/static/front/img/questions_fh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/questions_fh.png
--------------------------------------------------------------------------------
/front/static/front/img/questions_tckBG.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/questions_tckBG.png
--------------------------------------------------------------------------------
/front/static/front/img/questions_tcksc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/questions_tcksc.png
--------------------------------------------------------------------------------
/front/static/front/img/questions_title_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/questions_title_bg.png
--------------------------------------------------------------------------------
/front/static/front/img/questions_tk_tabBG.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/questions_tk_tabBG.png
--------------------------------------------------------------------------------
/front/static/front/img/questions_tk_tabBGxz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/questions_tk_tabBGxz.png
--------------------------------------------------------------------------------
/front/static/front/img/questions_xz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/questions_xz.png
--------------------------------------------------------------------------------
/front/static/front/img/questions_xzbt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/questions_xzbt.png
--------------------------------------------------------------------------------
/front/static/front/img/ranking-ulBG.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/ranking-ulBG.png
--------------------------------------------------------------------------------
/front/static/front/img/ranking_list_titleBG.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/ranking_list_titleBG.png
--------------------------------------------------------------------------------
/front/static/front/img/ranking_ulBG.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/ranking_ulBG.png
--------------------------------------------------------------------------------
/front/static/front/img/registe_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/registe_bg.png
--------------------------------------------------------------------------------
/front/static/front/img/registe_icon1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/registe_icon1.png
--------------------------------------------------------------------------------
/front/static/front/img/registe_icon2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/registe_icon2.png
--------------------------------------------------------------------------------
/front/static/front/img/registe_icon3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/registe_icon3.png
--------------------------------------------------------------------------------
/front/static/front/img/registe_icon4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/registe_icon4.png
--------------------------------------------------------------------------------
/front/static/front/img/registe_icon5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/registe_icon5.png
--------------------------------------------------------------------------------
/front/static/front/img/reset-finish-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/reset-finish-bg.png
--------------------------------------------------------------------------------
/front/static/front/img/result_nonrBG.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/result_nonrBG.png
--------------------------------------------------------------------------------
/front/static/front/img/result_pieBG.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/result_pieBG.png
--------------------------------------------------------------------------------
/front/static/front/img/result_titleBG.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/result_titleBG.png
--------------------------------------------------------------------------------
/front/static/front/img/result_wtBG.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/result_wtBG.png
--------------------------------------------------------------------------------
/front/static/front/img/set-up-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/set-up-bg.png
--------------------------------------------------------------------------------
/front/static/front/img/setUp-txtBg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/setUp-txtBg.png
--------------------------------------------------------------------------------
/front/static/front/img/ssjj_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/ssjj_bg.png
--------------------------------------------------------------------------------
/front/static/front/img/stfx_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/stfx_bg.png
--------------------------------------------------------------------------------
/front/static/front/img/stfx_icon1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/stfx_icon1.png
--------------------------------------------------------------------------------
/front/static/front/img/stfx_icon2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/stfx_icon2.png
--------------------------------------------------------------------------------
/front/static/front/img/stfx_icon3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/stfx_icon3.png
--------------------------------------------------------------------------------
/front/static/front/img/stfx_icon4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/stfx_icon4.png
--------------------------------------------------------------------------------
/front/static/front/img/stfx_icon5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/stfx_icon5.png
--------------------------------------------------------------------------------
/front/static/front/img/stfx_icon6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/stfx_icon6.png
--------------------------------------------------------------------------------
/front/static/front/img/stfx_title1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/stfx_title1.png
--------------------------------------------------------------------------------
/front/static/front/img/stfx_title2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/stfx_title2.png
--------------------------------------------------------------------------------
/front/static/front/img/theory_input1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/theory_input1.png
--------------------------------------------------------------------------------
/front/static/front/img/theory_modalBody_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/theory_modalBody_bg.png
--------------------------------------------------------------------------------
/front/static/front/img/theory_nr_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/theory_nr_bg.png
--------------------------------------------------------------------------------
/front/static/front/img/theory_st_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/theory_st_bg.png
--------------------------------------------------------------------------------
/front/static/front/img/time_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/time_bg.png
--------------------------------------------------------------------------------
/front/static/front/img/time_bg_xb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/time_bg_xb.png
--------------------------------------------------------------------------------
/front/static/front/img/title_img1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/title_img1.png
--------------------------------------------------------------------------------
/front/static/front/img/title_img2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/title_img2.png
--------------------------------------------------------------------------------
/front/static/front/img/top_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/top_bg.png
--------------------------------------------------------------------------------
/front/static/front/img/user_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/user_bg.png
--------------------------------------------------------------------------------
/front/static/front/img/user_bg_djh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/user_bg_djh.png
--------------------------------------------------------------------------------
/front/static/front/img/user_tableBg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/user_tableBg.png
--------------------------------------------------------------------------------
/front/static/front/img/user_titleBG.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/user_titleBG.png
--------------------------------------------------------------------------------
/front/static/front/img/xiahua.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/xiahua.png
--------------------------------------------------------------------------------
/front/static/front/img/xialadian.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/xialadian.png
--------------------------------------------------------------------------------
/front/static/front/img/xialatiao.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/xialatiao.png
--------------------------------------------------------------------------------
/front/static/front/js/css/modules/code.css:
--------------------------------------------------------------------------------
1 | /** layui-v2.5.4 MIT License By https://www.layui.com */
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}
--------------------------------------------------------------------------------
/front/static/front/js/css/modules/layer/default/icon-ext.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/js/css/modules/layer/default/icon-ext.png
--------------------------------------------------------------------------------
/front/static/front/js/css/modules/layer/default/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/js/css/modules/layer/default/icon.png
--------------------------------------------------------------------------------
/front/static/front/js/css/modules/layer/default/loading-0.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/js/css/modules/layer/default/loading-0.gif
--------------------------------------------------------------------------------
/front/static/front/js/css/modules/layer/default/loading-1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/js/css/modules/layer/default/loading-1.gif
--------------------------------------------------------------------------------
/front/static/front/js/css/modules/layer/default/loading-2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/js/css/modules/layer/default/loading-2.gif
--------------------------------------------------------------------------------
/front/static/front/js/lay/modules/code.js:
--------------------------------------------------------------------------------
1 | /** layui-v2.5.4 MIT License By https://www.layui.com */
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");
--------------------------------------------------------------------------------
/front/static/front/js/lay/modules/flow.js:
--------------------------------------------------------------------------------
1 | /** layui-v2.5.4 MIT License By https://www.layui.com */
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||(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)});
--------------------------------------------------------------------------------
/front/static/front/js/lay/modules/laytpl.js:
--------------------------------------------------------------------------------
1 | /** layui-v2.5.4 MIT License By https://www.layui.com */
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)});
--------------------------------------------------------------------------------
/front/static/front/js/lay/modules/rate.js:
--------------------------------------------------------------------------------
1 | /** layui-v2.5.4 MIT License By https://www.layui.com */
2 | ;layui.define("jquery",function(e){"use strict";var a=layui.jquery,i={config:{},index:layui.rate?layui.rate.index+1e4:0,set:function(e){var i=this;return i.config=a.extend({},i.config,e),i},on:function(e,a){return layui.onevent.call(this,n,e,a)}},l=function(){var e=this,a=e.config;return{setvalue:function(a){e.setvalue.call(e,a)},config:a}},n="rate",t="layui-rate",o="layui-icon-rate",s="layui-icon-rate-solid",u="layui-icon-rate-half",r="layui-icon-rate-solid layui-icon-rate-half",c="layui-icon-rate-solid layui-icon-rate",f="layui-icon-rate layui-icon-rate-half",v=function(e){var l=this;l.index=++i.index,l.config=a.extend({},l.config,i.config,e),l.render()};v.prototype.config={length:5,text:!1,readonly:!1,half:!1,value:0,theme:""},v.prototype.render=function(){var e=this,i=e.config,l=i.theme?'style="color: '+i.theme+';"':"";i.elem=a(i.elem),parseInt(i.value)!==i.value&&(i.half||(i.value=Math.ceil(i.value)-i.value<.5?Math.ceil(i.value):Math.floor(i.value)));for(var n='",u=1;u<=i.length;u++){var r=' ";i.half&&parseInt(i.value)!==i.value&&u==Math.ceil(i.value)?n=n+' ":n+=r}n+="
"+(i.text?''+i.value+"星":"")+"";var c=i.elem,f=c.next("."+t);f[0]&&f.remove(),e.elemTemp=a(n),i.span=e.elemTemp.next("span"),i.setText&&i.setText(i.value),c.html(e.elemTemp),c.addClass("layui-inline"),i.readonly||e.action()},v.prototype.setvalue=function(e){var a=this,i=a.config;i.value=e,a.render()},v.prototype.action=function(){var e=this,i=e.config,l=e.elemTemp,n=l.find("i").width();l.children("li").each(function(e){var t=e+1,v=a(this);v.on("click",function(e){if(i.value=t,i.half){var o=e.pageX-a(this).offset().left;o<=n/2&&(i.value=i.value-.5)}i.text&&l.next("span").text(i.value+"星"),i.choose&&i.choose(i.value),i.setText&&i.setText(i.value)}),v.on("mousemove",function(e){if(l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+t+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half){var c=e.pageX-a(this).offset().left;c<=n/2&&v.children("i").addClass(u).removeClass(s)}}),v.on("mouseleave",function(){l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+Math.floor(i.value)+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half&&parseInt(i.value)!==i.value&&l.children("li:eq("+Math.floor(i.value)+")").children("i").addClass(u).removeClass(c)})})},v.prototype.events=function(){var e=this;e.config},i.render=function(e){var a=new v(e);return l.call(a)},e(n,i)});
--------------------------------------------------------------------------------
/front/static/front/lib/layui/css/modules/code.css:
--------------------------------------------------------------------------------
1 | /** layui-v2.4.5 MIT License By https://www.layui.com */
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}
--------------------------------------------------------------------------------
/front/static/front/lib/layui/css/modules/layer/default/icon-ext.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/css/modules/layer/default/icon-ext.png
--------------------------------------------------------------------------------
/front/static/front/lib/layui/css/modules/layer/default/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/css/modules/layer/default/icon.png
--------------------------------------------------------------------------------
/front/static/front/lib/layui/css/modules/layer/default/loading-0.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/css/modules/layer/default/loading-0.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/css/modules/layer/default/loading-1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/css/modules/layer/default/loading-1.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/css/modules/layer/default/loading-2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/css/modules/layer/default/loading-2.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/font/iconfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/font/iconfont.eot
--------------------------------------------------------------------------------
/front/static/front/lib/layui/font/iconfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/font/iconfont.ttf
--------------------------------------------------------------------------------
/front/static/front/lib/layui/font/iconfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/font/iconfont.woff
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/0.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/0.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/1.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/10.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/10.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/11.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/11.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/12.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/12.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/13.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/13.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/14.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/14.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/15.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/15.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/16.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/16.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/17.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/17.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/18.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/18.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/19.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/19.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/2.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/20.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/20.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/21.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/21.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/22.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/22.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/23.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/23.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/24.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/24.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/25.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/25.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/26.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/26.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/27.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/27.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/28.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/28.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/29.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/29.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/3.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/3.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/30.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/30.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/31.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/31.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/32.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/32.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/33.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/33.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/34.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/34.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/35.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/35.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/36.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/36.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/37.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/37.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/38.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/38.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/39.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/39.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/4.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/4.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/40.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/40.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/41.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/41.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/42.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/42.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/43.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/43.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/44.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/44.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/45.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/45.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/46.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/46.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/47.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/47.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/48.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/48.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/49.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/49.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/5.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/5.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/50.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/50.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/51.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/51.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/52.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/52.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/53.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/53.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/54.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/54.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/55.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/55.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/56.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/56.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/57.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/57.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/58.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/58.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/59.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/59.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/6.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/6.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/60.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/60.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/61.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/61.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/62.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/62.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/63.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/63.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/64.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/64.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/65.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/65.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/66.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/66.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/67.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/67.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/68.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/68.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/69.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/69.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/7.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/7.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/70.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/70.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/71.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/71.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/8.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/8.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/images/face/9.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/9.gif
--------------------------------------------------------------------------------
/front/static/front/lib/layui/lay/modules/code.js:
--------------------------------------------------------------------------------
1 | /** layui-v2.4.5 MIT License By https://www.layui.com */
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");
--------------------------------------------------------------------------------
/front/static/front/lib/layui/lay/modules/flow.js:
--------------------------------------------------------------------------------
1 | /** layui-v2.4.5 MIT License By https://www.layui.com */
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||(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)});
--------------------------------------------------------------------------------
/front/static/front/lib/layui/lay/modules/laytpl.js:
--------------------------------------------------------------------------------
1 | /** layui-v2.4.5 MIT License By https://www.layui.com */
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)});
--------------------------------------------------------------------------------
/front/static/front/lib/layui/lay/modules/rate.js:
--------------------------------------------------------------------------------
1 | /** layui-v2.4.5 MIT License By https://www.layui.com */
2 | ;layui.define("jquery",function(e){"use strict";var a=layui.jquery,i={config:{},index:layui.rate?layui.rate.index+1e4:0,set:function(e){var i=this;return i.config=a.extend({},i.config,e),i},on:function(e,a){return layui.onevent.call(this,n,e,a)}},l=function(){var e=this,a=e.config;return{setvalue:function(a){e.setvalue.call(e,a)},config:a}},n="rate",t="layui-rate",o="layui-icon-rate",s="layui-icon-rate-solid",u="layui-icon-rate-half",r="layui-icon-rate-solid layui-icon-rate-half",c="layui-icon-rate-solid layui-icon-rate",f="layui-icon-rate layui-icon-rate-half",v=function(e){var l=this;l.index=++i.index,l.config=a.extend({},l.config,i.config,e),l.render()};v.prototype.config={length:5,text:!1,readonly:!1,half:!1,value:0,theme:""},v.prototype.render=function(){var e=this,i=e.config,l=i.theme?'style="color: '+i.theme+';"':"";i.elem=a(i.elem),parseInt(i.value)!==i.value&&(i.half||(i.value=Math.ceil(i.value)-i.value<.5?Math.ceil(i.value):Math.floor(i.value)));for(var n='",u=1;u<=i.length;u++){var r=' ";i.half&&parseInt(i.value)!==i.value&&u==Math.ceil(i.value)?n=n+' ":n+=r}n+="
"+(i.text?''+i.value+"星":"")+"";var c=i.elem,f=c.next("."+t);f[0]&&f.remove(),e.elemTemp=a(n),i.span=e.elemTemp.next("span"),i.setText&&i.setText(i.value),c.html(e.elemTemp),c.addClass("layui-inline"),i.readonly||e.action()},v.prototype.setvalue=function(e){var a=this,i=a.config;i.value=e,a.render()},v.prototype.action=function(){var e=this,i=e.config,l=e.elemTemp,n=l.find("i").width();l.children("li").each(function(e){var t=e+1,v=a(this);v.on("click",function(e){if(i.value=t,i.half){var o=e.pageX-a(this).offset().left;o<=n/2&&(i.value=i.value-.5)}i.text&&l.next("span").text(i.value+"星"),i.choose&&i.choose(i.value),i.setText&&i.setText(i.value)}),v.on("mousemove",function(e){if(l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+t+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half){var c=e.pageX-a(this).offset().left;c<=n/2&&v.children("i").addClass(u).removeClass(s)}}),v.on("mouseleave",function(){l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+Math.floor(i.value)+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half&&parseInt(i.value)!==i.value&&l.children("li:eq("+Math.floor(i.value)+")").children("i").addClass(u).removeClass(c)})})},v.prototype.events=function(){var e=this;e.config},i.render=function(e){var a=new v(e);return l.call(a)},e(n,i)});
--------------------------------------------------------------------------------
/front/static/front/uploads/c2e249483cd5b35aa3e3bcd3ab414cd6.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/uploads/c2e249483cd5b35aa3e3bcd3ab414cd6.zip
--------------------------------------------------------------------------------
/front/views/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/views/__init__.py
--------------------------------------------------------------------------------
/front/views/captcha.py:
--------------------------------------------------------------------------------
1 | import random
2 |
3 | from PIL import Image
4 | from PIL import ImageDraw
5 | from PIL import ImageFont
6 | from io import BytesIO
7 |
8 | from django.http import HttpResponse
9 | from django.views.generic import View
10 |
11 | from settings.base import BASE_DIR
12 |
13 |
14 | # 获取随机颜色的函数
15 | def get_random_color():
16 | return random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)
17 |
18 |
19 | class CaptchaView(View):
20 |
21 | @staticmethod
22 | def get(request):
23 | # 生成一个图片对象
24 | img_obj = Image.new(
25 | 'RGB',
26 | (200, 45),
27 | get_random_color()
28 | )
29 | # 在生成的图片上写字符
30 | # 生成一个图片画笔对象
31 | draw_obj = ImageDraw.Draw(img_obj)
32 | # 加载字体文件, 得到一个字体对象
33 | font_obj = ImageFont.truetype(str(BASE_DIR.joinpath("backend/static/backend/font/kumo.ttf")), 38)
34 | # 开始生成随机字符串并且写到图片上
35 | tmp_list = []
36 | for i in range(4):
37 | u = chr(random.randint(65, 90)) # 生成大写字母
38 | l = chr(random.randint(97, 122)) # 生成小写字母
39 | n = str(random.randint(0, 9)) # 生成数字,注意要转换成字符串类型
40 |
41 | tmp = random.choice([u, l, n])
42 | tmp_list.append(tmp)
43 | draw_obj.text((20 + 40 * i, 0), tmp, fill=get_random_color(), font=font_obj)
44 |
45 | # 保存到session
46 | request.session["valid_code"] = "".join(tmp_list)
47 |
48 | # 不需要在硬盘上保存文件,直接在内存中加载就可以
49 | io_obj = BytesIO()
50 | # 将生成的图片数据保存在io对象中
51 | img_obj.save(io_obj, "png")
52 | # 从io对象里面取上一步保存的数据
53 | data = io_obj.getvalue()
54 | return HttpResponse(data)
55 |
--------------------------------------------------------------------------------
/front/views/errors.py:
--------------------------------------------------------------------------------
1 | from django.shortcuts import render
2 | from django.views.generic import View
3 |
4 |
5 | class PageNotFound(View):
6 | """
7 | 404页面
8 | """
9 | template_name = "front/404.html"
10 |
11 | def get(self, request, exception):
12 | return render(request, self.template_name)
13 |
--------------------------------------------------------------------------------
/front/views/index.py:
--------------------------------------------------------------------------------
1 | from django.shortcuts import render
2 | from django.views.generic import View
3 |
4 |
5 | class IndexView(View):
6 | template_name = "front/index.html"
7 |
8 | def get(self, request):
9 | return render(request, self.template_name)
10 |
--------------------------------------------------------------------------------
/front/views/personal.py:
--------------------------------------------------------------------------------
1 | from django.shortcuts import render
2 | from django.views.generic import View
3 | from django.db.models import Sum, Count
4 | from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
5 |
6 | from backend.models.users import Players
7 | from backend.models.dockers import Resolver
8 |
9 | from librarys.utils.strings import str2int
10 |
11 |
12 | # 用来显示个人成绩
13 | class PersonalView(View):
14 | template_name = "front/stat.html"
15 |
16 | def get(self, request, username):
17 | user_list = []
18 | score_list = {}
19 | sort_dict = {}
20 |
21 | user = Players.objects.all()
22 |
23 | for i in user:
24 | user_list.append(i.username)
25 |
26 | result = Resolver.objects.filter(answer=True).filter(username__in=user_list).values('username').annotate(
27 | Sum('score')).annotate(Count('username')).order_by("-score__sum")
28 |
29 | for i, line in enumerate(result):
30 | sort_dict[line["username"]] = i + 1
31 | score_list[line["username"]] = line["score__sum"]
32 |
33 | try:
34 | key1 = sort_dict[username]
35 | score = score_list[username]
36 | except KeyError:
37 | key1 = 0
38 | score = 0
39 | answer_list = []
40 | score_list = []
41 | return render(request, self.template_name, locals())
42 |
43 | answer_list = Resolver.objects.filter(answer=True).filter(username=username).all().order_by("create_date")
44 |
45 | # 从前端获取当前的页码数,默认为1
46 | page = request.GET.get('page', 1)
47 |
48 | # 把当前的页码数转换成整数类型
49 | currentPage = str2int(page) if str2int(page) == 0 else 1
50 |
51 | # 生成paginator对象,定义每页显示15条记录
52 | paginator = Paginator(answer_list, 15)
53 |
54 | try:
55 | score_list = paginator.page(page) # 获取当前页码的记录
56 | except PageNotAnInteger:
57 | score_list = paginator.page(1) # 如果用户输入的页码不是整数时,显示第1页的内容
58 | except EmptyPage:
59 | score_list = paginator.page(paginator.num_pages) # 如果用户输入的页数不在系统的页码列表中时,显示最后一页的内容
60 |
61 | return render(request, self.template_name, locals())
62 |
--------------------------------------------------------------------------------
/front/views/rank.py:
--------------------------------------------------------------------------------
1 | from django.shortcuts import render
2 | from django.views.generic import View
3 | from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
4 |
5 | from backend.models.users import Players
6 | from backend.models.dockers import Resolver
7 |
8 | from django.db.models import Sum
9 | from django.db.models import Count
10 | from django.db.models import Max
11 |
12 |
13 | class RankView(View):
14 | template_name = "front/ranking.html"
15 |
16 | def get(self, request):
17 | user_list = []
18 |
19 | user = Players.objects.all()
20 |
21 | for i in user:
22 | user_list.append(i.username)
23 |
24 | info = Resolver.objects.filter(username__in=user_list).values('username').annotate(
25 | Sum('score')).annotate(Count('username')).annotate(Max('address')).order_by("-score__sum")
26 |
27 | # 生成paginator对象,定义每页显示15条记录
28 | paginator = Paginator(info, 15)
29 |
30 | # 从前端获取当前的页码数,默认为1
31 | page = request.GET.get('page', 1)
32 |
33 | # 把当前的页码数转换成整数类型
34 | currentPage = int(page)
35 |
36 | try:
37 | score_list = paginator.page(page) # 获取当前页码的记录
38 | except PageNotAnInteger:
39 | score_list = paginator.page(1) # 如果用户输入的页码不是整数时,显示第1页的内容
40 | except EmptyPage:
41 | score_list = paginator.page(paginator.num_pages) # 如果用户输入的页数不在系统的页码列表中时,显示最后一页的内容
42 |
43 | return render(request, self.template_name, locals())
44 |
--------------------------------------------------------------------------------
/front/views/topics.py:
--------------------------------------------------------------------------------
1 | from django.shortcuts import render
2 | from django.shortcuts import redirect
3 | from django.shortcuts import reverse
4 | from django.views.generic import View
5 |
6 | from backend.models.dockers import Resolver
7 | from backend.models.dockers import TopicName
8 |
9 | from librarys.mixin.permission import LoginRequiredMixin
10 |
11 |
12 | class TopicsView(LoginRequiredMixin, View):
13 | template_name = "front/topics.html"
14 |
15 | def get(self, request):
16 |
17 | search_dict = dict()
18 | user_resolver = []
19 |
20 | search_dict['username'] = request.session.get("user_name", "")
21 |
22 | result = Resolver.objects.filter(**search_dict).all()
23 |
24 | for j in result:
25 | user_resolver.append(j.topic_name)
26 |
27 | docker_list = TopicName.objects.filter(pull_status="Complete").all().order_by("create_date")
28 |
29 | docker_images = []
30 |
31 | for n in docker_list:
32 | docker_images.append(n.image_tag)
33 |
34 | category_info = []
35 | for i in docker_list:
36 | category_info.append(i.category)
37 |
38 | category_info = sorted(set(category_info), key=category_info.index)
39 |
40 | return render(request, self.template_name,
41 | {"category": category_info, "user_resolver": user_resolver, "docker_images": docker_images})
42 |
43 |
44 | class TopicSingleView(LoginRequiredMixin, View):
45 | template_name = "front/topic.html"
46 |
47 | def get(self, request, topic_id):
48 | topic = TopicName.objects.filter(id=topic_id)
49 |
50 | if topic.count() == 0:
51 | return redirect(reverse("front_topics"))
52 |
53 | quest = topic.first()
54 |
55 | result = Resolver.objects.filter(topic_name=quest.topic_name).order_by("create_date").all()[0:10]
56 |
57 | return render(request, self.template_name, {"info": quest, "result": result})
58 |
--------------------------------------------------------------------------------
/librarys/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/librarys/__init__.py
--------------------------------------------------------------------------------
/librarys/common/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/librarys/common/__init__.py
--------------------------------------------------------------------------------
/librarys/common/dockers.py:
--------------------------------------------------------------------------------
1 | import threading
2 | from settings.config import DOCKER_CLIENT
3 | from settings.config import logger
4 |
5 | from backend.models.dockers import TopicName
6 |
7 |
8 | # 使用线程实现docker镜像部署
9 | class DockerDeploy(threading.Thread):
10 |
11 | def __init__(self, name):
12 | super(DockerDeploy, self).__init__()
13 | # threading.Thread.__init__(self)
14 | self.image_name = name
15 |
16 | def run(self):
17 |
18 | if TopicName.objects.filter(image_tag=self.image_name).count() == 0:
19 | return
20 |
21 | obj = TopicName.objects.get(image_tag=self.image_name)
22 |
23 | images_local_list = []
24 |
25 | # 获取本地已存在的镜像
26 | images_list = DOCKER_CLIENT.images.list()
27 |
28 | for i in images_list:
29 | if len(i.tags) > 0:
30 | images_local_list.append(i.tags[0])
31 |
32 | # if self.full_address in images_local_list:
33 | if self.image_name in images_local_list:
34 | obj.pull_status = "Complete"
35 | obj.save()
36 |
37 | return
38 |
39 | try:
40 |
41 | DOCKER_CLIENT.images.pull(self.image_name)
42 | obj.pull_status = "Complete"
43 | obj.save()
44 |
45 | except Exception as e:
46 | logger.warning(str(e))
47 | obj.pull_status = "Failed"
48 | obj.save()
49 |
50 |
51 | # 使用线程实现docker镜像删除
52 | class DockerDelete(threading.Thread):
53 |
54 | def __init__(self, name):
55 | super(DockerDelete, self).__init__()
56 | # threading.Thread.__init__(self)
57 | self.image_name = name
58 |
59 | def run(self):
60 |
61 | try:
62 | images_local_list = []
63 |
64 | # 获取本地已存在的镜像
65 | images_list = DOCKER_CLIENT.images.list()
66 |
67 | for i in images_list:
68 | if len(i.tags) > 0:
69 | images_local_list.append(i.tags[0])
70 |
71 | if self.image_name in images_local_list:
72 | docker = DOCKER_CLIENT.images.remove(self.image_name)
73 | return
74 | except Exception as e:
75 | logger.warning(str(e))
76 | return
77 |
78 |
79 | # 使用线程实现docker镜像停止
80 | class ImageStop(threading.Thread):
81 |
82 | def __init__(self, name):
83 | super(ImageStop, self).__init__()
84 | self.container_id = name
85 |
86 | def run(self):
87 |
88 | try:
89 | container = DOCKER_CLIENT.containers.get(self.container_id)
90 | container.stop()
91 |
92 | return True
93 |
94 | except Exception as e:
95 | logger.warning(str(e))
96 | return False
97 |
--------------------------------------------------------------------------------
/librarys/common/flags.py:
--------------------------------------------------------------------------------
1 | import time
2 |
3 | from librarys.utils.strings import generate_random_str
4 | from librarys.utils.strings import gen_md5
5 |
6 |
7 | def generate_flag(salt: str) -> str:
8 | """
9 | 用来生成动态flag字符串
10 | :param salt:
11 | :return:
12 | """
13 | flag_plain = generate_random_str(12) + salt + str(time.time())
14 | return f'flag{{{gen_md5(flag_plain.encode("utf-8"))}}}'
15 |
--------------------------------------------------------------------------------
/librarys/common/tools.py:
--------------------------------------------------------------------------------
1 | import requests
2 |
3 | from urllib.parse import urlsplit
4 |
5 | from django.shortcuts import reverse
6 | from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
7 |
8 |
9 | # PaginatorResults 是前台用来将数据信息进行处理的分页函数
10 | def PaginatorResults(models, page: int, offset: int = 10) -> (list, Paginator):
11 | user_mess = models.objects.all().order_by('create_date')
12 |
13 | # 生成paginator对象,定义每页显示多少条记录
14 | paginator = Paginator(user_mess, offset)
15 |
16 | # 把当前的页码数转换成整数类型
17 | currentPage = int(page)
18 |
19 | try:
20 | user_list = paginator.page(currentPage) # 获取当前页码的记录
21 | except PageNotAnInteger:
22 | user_list = paginator.page(1) # 如果用户输入的页码不是整数时,显示第1页的内容
23 | except EmptyPage:
24 | user_list = paginator.page(paginator.num_pages) # 如果用户输入的页数不在系统的页码列表中时,显示最后一页的内容
25 |
26 | return user_list, paginator
27 |
28 |
29 | # 从request获取应用全地址
30 | def GenerateHost(request) -> str:
31 | # request.is_secure()
32 | # 如果是https则为True,反之为False
33 | http = urlsplit(request.build_absolute_uri(None)).scheme
34 | # 获得当前的HTTP或HTTPS
35 | host = request.META['HTTP_HOST']
36 | # 获取当前域名
37 | short_url = http + '://' + host
38 | return short_url
39 |
40 |
41 | # 用来刷新验证码的函数
42 | def Refresh(request):
43 | try:
44 | captcha_address = f"{GenerateHost(request)}{reverse('captcha')}"
45 | requests.get(captcha_address)
46 |
47 | except requests.RequestException as e:
48 | print(e)
49 |
--------------------------------------------------------------------------------
/librarys/exception.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | """
4 | Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
5 | See the file 'LICENSE' for copying permission
6 | """
7 |
8 |
9 | class BlackBaseException(Exception):
10 | pass
11 |
12 |
13 | class BlackImageStartException(BlackBaseException):
14 | pass
15 |
16 |
17 | class BlackConnectException(BlackBaseException):
18 | def __init__(self, address):
19 | self.address = address
20 |
21 | def __str__(self):
22 | # print("姓名长度是" + str(self.address) + ",超过长度了")
23 | return f"<{self.address} 无法链接>"
24 |
--------------------------------------------------------------------------------
/librarys/mixin/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/librarys/mixin/__init__.py
--------------------------------------------------------------------------------
/librarys/mixin/permission.py:
--------------------------------------------------------------------------------
1 | from django.contrib.auth.mixins import AccessMixin
2 |
3 |
4 | class LoginRequiredMixin(AccessMixin):
5 | """Verify that the current user is authenticated."""
6 | login_url = "/login"
7 |
8 | redirect_field_name = None
9 |
10 | def dispatch(self, request, *args, **kwargs):
11 | if not request.session.get("user_name", False) and not request.user.is_superuser:
12 | return self.handle_no_permission()
13 | return super().dispatch(request, *args, **kwargs)
14 |
15 |
16 | class AdminRequiredMixin(AccessMixin):
17 | """Verify that the current user is authenticated."""
18 | # 禁止未登录跳转时的next参数
19 | redirect_field_name = None
20 |
21 | def dispatch(self, request, *args, **kwargs):
22 | if not request.user.is_superuser:
23 | return self.handle_no_permission()
24 | return super().dispatch(request, *args, **kwargs)
25 |
--------------------------------------------------------------------------------
/librarys/safety/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/librarys/safety/__init__.py
--------------------------------------------------------------------------------
/librarys/safety/xss.py:
--------------------------------------------------------------------------------
1 | import json
2 |
3 |
4 | def jsonXssFilter(data):
5 | payloads = {
6 | '\'': ''',
7 | '"': '"',
8 | '<': '<',
9 | '>': '>'
10 | }
11 | if type(data) == dict:
12 | new = {}
13 | for key, values in data.items():
14 | new[key] = jsonXssFilter(values)
15 | elif type(data) == list:
16 | new = []
17 | for i in data:
18 | new.append(jsonXssFilter(i))
19 | elif type(data) == int or type(data) == float:
20 | new = data
21 | elif type(data) == str:
22 | new = data
23 | for key, value in payloads.items():
24 | new = new.replace(key, value)
25 | elif type(data) == bytes:
26 | new = data
27 | else:
28 | print('>>> unknown type:')
29 | print(type(data))
30 | new = data
31 | return new
32 |
33 |
34 | def xss_filter(func):
35 | def wrapper(*args, **kwargs):
36 | result = func(*args, **kwargs)
37 | result.content = result.content
38 | try:
39 | jsondata = json.loads(result.content)
40 | result.content = json.dumps(jsonXssFilter(jsondata))
41 | except json.JSONDecodeError:
42 | result.content = jsonXssFilter(result.content)
43 | return result
44 |
45 | return wrapper
46 |
--------------------------------------------------------------------------------
/librarys/utils/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/librarys/utils/__init__.py
--------------------------------------------------------------------------------
/librarys/utils/calculation.py:
--------------------------------------------------------------------------------
1 | import math
2 |
3 |
4 | def DynamicValueChallenge(initial: int, solve_count: int, decay: int = 5) -> int:
5 | """
6 |
7 | :param initial: 题目的初始值
8 | :param solve_count: 已经解答题目的用户数量
9 | :param decay: 前几名动态分
10 | :return:
11 | """
12 | minimum = math.floor(initial / 2)
13 |
14 | if solve_count != 0:
15 | # We subtract -1 to allow the first solver to get max point value
16 | solve_count -= 1
17 |
18 | # 双星表示乘方
19 | value = (((minimum - initial) / (decay ** 2)) * (solve_count ** 2)) + initial
20 | value = math.ceil(value)
21 |
22 | if value < minimum:
23 | value = minimum
24 |
25 | return value
26 |
--------------------------------------------------------------------------------
/librarys/utils/files.py:
--------------------------------------------------------------------------------
1 | import pathlib
2 | import os
3 |
4 |
5 | # 用来检查文件是否存在
6 | def file_exists_check(filename: str) -> bool:
7 | path = pathlib.Path(filename)
8 | return path.exists()
9 |
10 |
11 | # 用来删除文件
12 | def file_delete(name: str):
13 | if file_exists_check(filename=name):
14 | os.unlink(name)
15 |
--------------------------------------------------------------------------------
/librarys/utils/strings.py:
--------------------------------------------------------------------------------
1 | import uuid
2 | import datetime
3 | import hashlib
4 | import time
5 | import random
6 | import string
7 |
8 |
9 | def get_uuid() -> str:
10 | """
11 | 生成唯一id值
12 | :return:
13 | """
14 | return str(uuid.uuid4())
15 |
16 |
17 | # 获取当前时间的字符串表现形式
18 | def get_now_time() -> str:
19 | return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
20 |
21 |
22 | # 将字符转换成实数
23 | def str2int(s):
24 | try:
25 | return int(s)
26 | except ValueError:
27 | if '-' == s[0]:
28 | return 0 - str2int(s[1:])
29 | elif s[0] in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']:
30 | num = 0
31 | for i in range(len(s)):
32 | if s[i] in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']:
33 | num = num * 10 + int(s[i])
34 | else:
35 | return num
36 | else:
37 | return 0
38 |
39 |
40 | def gen_md5(info: bytes) -> str:
41 | """
42 | 用来生成字符串的md5值
43 | :param info:加密的信息
44 | :return:
45 | """
46 | m2 = hashlib.md5()
47 | m2.update(info)
48 | str_md5 = m2.hexdigest()
49 | return str_md5
50 |
51 |
52 | def generate_random_str(length=6) -> str:
53 | """
54 | 用来生成随机字符串的函数
55 | :param length: 随机字符串函数的长度
56 | :return:
57 | """
58 | ascii_char = string.ascii_lowercase + string.digits + string.ascii_uppercase
59 | str_list = [random.choice(ascii_char) for _ in range(length)]
60 | random_str = ''.join(str_list)
61 | return random_str
62 |
--------------------------------------------------------------------------------
/manage.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | """Django's command-line utility for administrative tasks."""
3 | import os
4 | import sys
5 |
6 |
7 | def main():
8 | """Run administrative tasks."""
9 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings.dev')
10 | try:
11 | from django.core.management import execute_from_command_line
12 | except ImportError as exc:
13 | raise ImportError(
14 | "Couldn't import Django. Are you sure it's installed and "
15 | "available on your PYTHONPATH environment variable? Did you "
16 | "forget to activate a virtual environment?"
17 | ) from exc
18 | execute_from_command_line(sys.argv)
19 |
20 |
21 | if __name__ == '__main__':
22 | main()
23 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | asgiref==3.3.1
2 | certifi==2020.12.5
3 | chardet==4.0.0
4 | Django==3.1.6
5 | docker==4.4.1
6 | Pillow==8.1.0
7 | psycopg2-binary==2.8.6
8 | pytz==2021.1
9 | requests==2.25.1
10 | six==1.15.0
11 | sqlparse==0.4.1
12 | urllib3==1.26.3
13 | websocket-client==0.57.0
14 |
--------------------------------------------------------------------------------
/settings/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/settings/__init__.py
--------------------------------------------------------------------------------
/settings/config.py:
--------------------------------------------------------------------------------
1 | import queue
2 | import docker
3 | import logging
4 |
5 | """
6 | 一些全局属性信息
7 | """
8 | PORT_QUEUE = queue.Queue()
9 |
10 | for i in range(10000, 20000):
11 | PORT_QUEUE.put(i)
12 |
13 | # 初始化docker环境
14 | DOCKER_CLIENT = docker.from_env()
15 |
16 | logger = logging.getLogger('django')
17 |
18 | WHITE_LIST = ["zip", "rar", "7z"]
19 |
--------------------------------------------------------------------------------
/settings/dev.py:
--------------------------------------------------------------------------------
1 | import logging
2 | from settings.base import *
3 |
4 | # SECURITY WARNING: don't run with debug turned on in production!
5 | DEBUG = True
6 |
7 | DATABASES = {
8 | 'default': {
9 | 'ENGINE': 'django.db.backends.postgresql',
10 | 'NAME': 'django',
11 | 'USER': 'postgres',
12 | 'PASSWORD': 'sh@dow',
13 | 'HOST': '127.0.0.1',
14 | 'PORT': '5432',
15 | }
16 | }
17 |
18 | # 设置日志
19 | LOGGING = {
20 | 'version': 1,
21 | 'disable_existing_loggers': False,
22 | 'formatters': {
23 | 'verbose_format': {
24 | 'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s'
25 | },
26 | 'simple_format': {
27 | 'format': '%(levelname)s %(module)s %(lineno)d %(message)s'
28 | },
29 | 'standard_format': {
30 | 'format': '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(pathname)s:%(lineno)d]'
31 | '[func:%(funcName)s][%(levelname)s][%(message)s]'}
32 | },
33 | 'filters': {
34 | 'require_debug_true': {
35 | '()': 'django.utils.log.RequireDebugTrue',
36 | },
37 | },
38 | 'handlers': {
39 | 'console': {
40 | 'level': 'DEBUG',
41 | 'filters': ['require_debug_true'],
42 | 'class': 'logging.StreamHandler',
43 | 'formatter': 'simple_format'
44 | },
45 | 'file': {
46 | # 实际开发建议使用WARNING
47 | 'level': 'WARNING',
48 | 'class': 'logging.handlers.RotatingFileHandler',
49 | # 日志位置,日志文件名,日志保存目录必须手动创建,注:这里的文件路径要注意BASE_DIR
50 | 'filename': str(BASE_DIR.joinpath("data/logs/info.log")),
51 | # 日志文件的最大值,这里我们设置300M
52 | 'maxBytes': 300 * 1024 * 1024,
53 | # 日志文件的数量,设置最大日志数量为10
54 | 'backupCount': 10,
55 | # 日志格式:详细格式
56 | 'formatter': 'standard_format'
57 | },
58 | },
59 | # 日志对象
60 | 'loggers': {
61 | 'django': {
62 | 'handlers': ['console', 'file'],
63 | 'propagate': True, # 是否让日志信息继续冒泡给其他的日志处理系统
64 | },
65 | }
66 | }
67 |
68 | logger = logging.getLogger('django')
69 |
--------------------------------------------------------------------------------
/settings/prod.py:
--------------------------------------------------------------------------------
1 | from settings.base import *
2 |
3 | # SECURITY WARNING: don't run with debug turned on in production!
4 | DEBUG = False
5 |
6 | DATABASES = {
7 | 'default': {
8 | 'ENGINE': 'django.db.backends.postgresql',
9 | 'NAME': 'django',
10 | 'USER': 'postgres',
11 | 'PASSWORD': 'sh@dow',
12 | 'HOST': '127.0.0.1',
13 | 'PORT': '5432',
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/urls.py:
--------------------------------------------------------------------------------
1 | """BlackStone URL Configuration
2 |
3 | The `urlpatterns` list routes URLs to views. For more information please see:
4 | https://docs.djangoproject.com/en/3.1/topics/http/urls/
5 | Examples:
6 | Function views
7 | 1. Add an import: from my_app import views
8 | 2. Add a URL to urlpatterns: path('', views.home, name='home')
9 | Class-based views
10 | 1. Add an import: from other_app.views import Home
11 | 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
12 | Including another URLconf
13 | 1. Import the include() function: from django.urls import include, path
14 | 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
15 | """
16 | from django.urls import path
17 | from django.urls import include
18 |
19 | from backend import backend_url
20 | from front import front_urls
21 |
22 | from front.views.errors import PageNotFound
23 |
24 | urlpatterns = [
25 | path('', include(front_urls)),
26 | path('back/', include(backend_url)),
27 | ]
28 |
29 | handler404 = PageNotFound.as_view()
30 |
--------------------------------------------------------------------------------
/websocket.py:
--------------------------------------------------------------------------------
1 | # 异步函数
2 | async def websocket_application(scope, receive, send):
3 | """
4 | var connection = new WebSocket('ws://127.0.0.1:8000/abc')
5 |
6 | scope: 详细如下
7 | {'type': 'websocket',
8 | 'path': '/abc',
9 | 'raw_path': b'/abc',
10 | 'headers': [(b'host', b'127.0.0.1:8000'), (b'upgrade', b'WebSocket'), (b'connection', b'Upgrade'),
11 | (b'sec-websocket-version', b'13'), (b'sec-websocket-key', b'2viLa4ZBnF2953ARONVITw=='),
12 | (b'accept', b'*/*'), (b'accept-encoding', b'gzip, deflate'), (b'user-agent', b'Python/3.8 aiohttp/3.6.2')],
13 | 'query_string': b'',
14 | 'client': ['127.0.0.1', 47220],
15 | 'server': ['127.0.0.1', 8000],
16 | 'subprotocols': [],
17 | 'asgi': {'version': '3.0'}}
18 |
19 | receive: 详细如下
20 | >
21 |
22 | send:
23 |
24 | """
25 | while True:
26 | event = await receive()
27 |
28 | if event['type'] == 'websocket.connect':
29 | await send({
30 | 'type': 'websocket.accept'
31 | })
32 |
33 | if event['type'] == 'websocket.disconnect':
34 | break
35 |
36 | if event['type'] == 'websocket.receive':
37 | if event['text'] == 'ping':
38 | await send({
39 | 'type': 'websocket.send',
40 | 'text': 'pong!'
41 | })
42 |
--------------------------------------------------------------------------------
/wsgi.py:
--------------------------------------------------------------------------------
1 | """
2 | WSGI config for BlackStone project.
3 |
4 | It exposes the WSGI callable as a module-level variable named ``application``.
5 |
6 | For more information on this file, see
7 | https://docs.djangoproject.com/en/3.1/howto/deployment/wsgi/
8 | """
9 |
10 | import os
11 |
12 | from django.core.wsgi import get_wsgi_application
13 |
14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings.dev')
15 |
16 | application = get_wsgi_application()
17 |
--------------------------------------------------------------------------------