├── .gitignore
├── README.md
├── archer_dbmp
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
├── common
├── __init__.py
├── model_choices_field_value
│ ├── __init__.py
│ ├── field_dbmp_inception_business.py
│ ├── field_dbmp_inception_business_detail.py
│ ├── field_dbmp_inception_database.py
│ ├── field_dbmp_inception_record.py
│ ├── field_dbmp_mysql_backup_info.py
│ ├── field_dbmp_mysql_backup_instance.py
│ └── field_dbmp_mysql_instance.py
└── util
│ ├── __init__.py
│ ├── decorator_tool.py
│ ├── inception_tool.py
│ ├── ip_tool.py
│ ├── json_date_encoder.py
│ ├── mysql_admin_tool.py
│ ├── pagination.py
│ ├── ssh_tool.py
│ └── view_url_path.py
├── dbmp
├── __init__.py
├── admin.py
├── migrations
│ └── __init__.py
├── models
│ ├── __init__.py
│ ├── cmdb_os.py
│ ├── dbmp_inception_business.py
│ ├── dbmp_inception_business_detail.py
│ ├── dbmp_inception_database.py
│ ├── dbmp_inception_instance.py
│ ├── dbmp_inception_record.py
│ ├── dbmp_mysql_backup_info.py
│ ├── dbmp_mysql_backup_instance.py
│ ├── dbmp_mysql_backup_remote.py
│ ├── dbmp_mysql_business.py
│ ├── dbmp_mysql_business_detail.py
│ ├── dbmp_mysql_database.py
│ ├── dbmp_mysql_ha_group.py
│ ├── dbmp_mysql_ha_group_detail.py
│ ├── dbmp_mysql_instance.py
│ └── dbmp_mysql_instance_info.py
├── templates
│ ├── dbmp_base.html
│ ├── dbmp_inception_business
│ │ └── run_inception.html
│ ├── dbmp_inception_business_detail
│ │ ├── index.html
│ │ └── run_inception.html
│ ├── dbmp_inception_database
│ │ └── run_inception.html
│ ├── dbmp_inception_record
│ │ ├── add.html
│ │ ├── check.html
│ │ ├── index.html
│ │ ├── run_inception.html
│ │ ├── run_inception_in_view.html
│ │ └── view.html
│ ├── dbmp_mysql_backup_instance
│ │ ├── add.html
│ │ ├── edit.html
│ │ ├── iframe_os_list.html
│ │ ├── index.html
│ │ ├── test.html
│ │ └── view.html
│ ├── dbmp_mysql_business
│ │ ├── add.html
│ │ ├── edit.html
│ │ ├── index.html
│ │ ├── list_business_use_inception_record_add.html
│ │ └── view.html
│ ├── dbmp_mysql_business_detail
│ │ ├── add.html
│ │ ├── edit.html
│ │ ├── iframe_os_list.html
│ │ ├── index.html
│ │ ├── test.html
│ │ └── view.html
│ ├── dbmp_mysql_database
│ │ ├── list_database_use_business_detail.html
│ │ ├── list_database_use_inception_record_add.html
│ │ ├── list_database_use_inception_record_check.html
│ │ └── view.html
│ ├── dbmp_mysql_handler
│ │ ├── restart_instance_terminal.html
│ │ ├── start_instance_terminal.html
│ │ ├── stop_instance_terminal.html
│ │ └── terminal_sql_console.html
│ └── dbmp_mysql_instance
│ │ ├── add.html
│ │ ├── edit.html
│ │ ├── iframe_os_list.html
│ │ ├── index.html
│ │ ├── list_instance_use_business_detail.html
│ │ ├── list_instance_use_inception_record_add.html
│ │ ├── list_instance_use_inception_record_check.html
│ │ ├── test.html
│ │ └── view.html
├── templatetags
│ ├── __init__.py
│ ├── filters_dbmp_inception_business.py
│ ├── filters_dbmp_inception_business_detail.py
│ ├── filters_dbmp_inception_database.py
│ ├── filters_dbmp_inception_record.py
│ ├── filters_dbmp_mysql_backup_instance.py
│ ├── filters_dbmp_mysql_instance.py
│ └── ip_filters.py
├── tests.py
├── urls.py
└── views
│ ├── __init__.py
│ ├── forms
│ ├── __init__.py
│ ├── form_dbmp_mysql_backup_instance.py
│ ├── form_dbmp_mysql_business.py
│ └── form_dbmp_mysql_instance.py
│ ├── sql_handler
│ ├── __init__.py
│ ├── s_dbmp_inception_business.py
│ ├── s_dbmp_inception_business_detail.py
│ ├── s_dbmp_inception_database.py
│ ├── s_dbmp_inception_record.py
│ └── s_dbmp_mysql_business_detail.py
│ ├── v_dbmp_inception_business.py
│ ├── v_dbmp_inception_business_detail.py
│ ├── v_dbmp_inception_database.py
│ ├── v_dbmp_inception_instance.py
│ ├── v_dbmp_inception_record.py
│ ├── v_dbmp_mysql_backup_instance.py
│ ├── v_dbmp_mysql_business.py
│ ├── v_dbmp_mysql_business_detail.py
│ ├── v_dbmp_mysql_database.py
│ ├── v_dbmp_mysql_handler.py
│ └── v_dbmp_mysql_instance.py
├── logs
└── default.log
├── manage.py
├── sql
├── alter_2016-07-25.sql
├── alter_2016-07-27.sql
├── alter_2016-08-01.sql
├── alter_2016-08-07.sql
├── alter_2016-09-05.sql
├── alter_2016-09-18.sql
├── alter_2016-09-21.sql
├── alter_2016-09-28.sql
├── alter_2016-10-08.sql
├── alter_2016-10-11.sql
├── alter_2016-10-12.sql
├── alter_2016-10-18.sql
├── generate.txt
├── insert_2016-07-30.sql
├── models.py
└── my_free_schema.sql
├── static
├── 404.html
├── 500.html
├── GET
├── README.md
├── agile_board.html
├── article.html
├── badges_labels.html
├── basic_gallery.html
├── blog.html
├── blueimp.html
├── buttons.html
├── calendar.html
├── carousel.html
├── chat_view.html
├── clients.html
├── code_editor.html
├── contacts.html
├── css
│ ├── animate.css
│ ├── animate.min.css
│ ├── bootstrap-duallistbox.css
│ ├── bootstrap.min.css
│ ├── bootstrap.min14ed.css
│ ├── demo
│ │ └── webuploader-demo.min.css
│ ├── font-awesome.min93e3.css
│ ├── login.min.css
│ ├── patterns
│ │ ├── header-profile-skin-1.png
│ │ ├── header-profile-skin-3.png
│ │ ├── header-profile.png
│ │ └── shattered.png
│ ├── plugins
│ │ ├── awesome-bootstrap-checkbox
│ │ │ └── awesome-bootstrap-checkbox.css
│ │ ├── blueimp
│ │ │ ├── css
│ │ │ │ └── blueimp-gallery.min.css
│ │ │ └── img
│ │ │ │ ├── error.png
│ │ │ │ ├── error.svg
│ │ │ │ ├── loading.gif
│ │ │ │ ├── play-pause.png
│ │ │ │ ├── play-pause.svg
│ │ │ │ ├── video-play.png
│ │ │ │ └── video-play.svg
│ │ ├── bootstrap-table
│ │ │ └── bootstrap-table.min.css
│ │ ├── bootstrapvalidator
│ │ │ └── bootstrapValidator.min.css
│ │ ├── chosen
│ │ │ ├── chosen-sprite.png
│ │ │ ├── chosen-sprite@2x.png
│ │ │ └── chosen.css
│ │ ├── clockpicker
│ │ │ └── clockpicker.css
│ │ ├── codemirror
│ │ │ ├── ambiance.css
│ │ │ └── codemirror.css
│ │ ├── colorpicker
│ │ │ ├── css
│ │ │ │ └── bootstrap-colorpicker.min.css
│ │ │ └── img
│ │ │ │ └── bootstrap-colorpicker
│ │ │ │ ├── alpha-horizontal.png
│ │ │ │ ├── alpha.png
│ │ │ │ ├── hue-horizontal.png
│ │ │ │ ├── hue.png
│ │ │ │ └── saturation.png
│ │ ├── cropper
│ │ │ └── cropper.min.css
│ │ ├── dataTables
│ │ │ └── dataTables.bootstrap.css
│ │ ├── datapicker
│ │ │ └── datepicker3.css
│ │ ├── dropzone
│ │ │ ├── basic.css
│ │ │ └── dropzone.css
│ │ ├── footable
│ │ │ ├── fonts
│ │ │ │ ├── footable.eot
│ │ │ │ ├── footable.svg
│ │ │ │ ├── footable.ttf
│ │ │ │ ├── footable.woff
│ │ │ │ └── footabled41d.eot
│ │ │ └── footable.core.css
│ │ ├── fullcalendar
│ │ │ ├── fullcalendar.css
│ │ │ └── fullcalendar.print.css
│ │ ├── iCheck
│ │ │ ├── custom.css
│ │ │ ├── green.png
│ │ │ └── green@2x.png
│ │ ├── images
│ │ │ ├── sort_asc.png
│ │ │ ├── sort_desc.png
│ │ │ ├── sprite-skin-flat.png
│ │ │ ├── spritemap.png
│ │ │ └── spritemap@2x.png
│ │ ├── ionRangeSlider
│ │ │ ├── ion.rangeSlider.css
│ │ │ └── ion.rangeSlider.skinFlat.css
│ │ ├── jasny
│ │ │ └── jasny-bootstrap.min.css
│ │ ├── jqgrid
│ │ │ └── ui.jqgridffe4.css
│ │ ├── jsTree
│ │ │ └── style.min.css
│ │ ├── markdown
│ │ │ └── bootstrap-markdown.min.css
│ │ ├── morris
│ │ │ └── morris-0.4.3.min.css
│ │ ├── nouslider
│ │ │ └── jquery.nouislider.css
│ │ ├── plyr
│ │ │ ├── plyr.css
│ │ │ └── sprite.svg
│ │ ├── simditor
│ │ │ └── simditor.css
│ │ ├── steps
│ │ │ └── jquery.steps.css
│ │ ├── summernote
│ │ │ ├── summernote-bs3.css
│ │ │ └── summernote.css
│ │ ├── sweetalert
│ │ │ └── sweetalert.css
│ │ ├── switchery
│ │ │ └── switchery.css
│ │ ├── toastr
│ │ │ └── toastr.min.css
│ │ ├── treeview
│ │ │ └── bootstrap-treeview.css
│ │ └── webuploader
│ │ │ └── webuploader.css
│ ├── style.css
│ ├── style.min.css
│ └── style.min862f.css
├── css_animation.html
├── diff.html
├── draggable_panels.html
├── empty_page.html
├── faq.html
├── favicon.ico
├── file_manager.html
├── fontawesome.html
├── fonts
│ ├── fontawesome-webfont93e3.eot
│ ├── fontawesome-webfont93e3.svg
│ ├── fontawesome-webfont93e3.ttf
│ ├── fontawesome-webfont93e3.woff
│ ├── fontawesome-webfont93e3.woff2
│ ├── fontawesome-webfontd41d.eot
│ ├── glyphicons-halflings-regular.eot
│ ├── glyphicons-halflings-regular.svg
│ ├── glyphicons-halflings-regular.ttf
│ ├── glyphicons-halflings-regular.woff
│ ├── glyphicons-halflings-regular.woff2
│ └── glyphicons-halflings-regulard41d.eot
├── form_advanced - 副本.html
├── form_advanced.html
├── form_avatar.html
├── form_basic.html
├── form_builder.html
├── form_editors.html
├── form_file_upload.html
├── form_markdown.html
├── form_simditor.html
├── form_validate.html
├── form_webuploader.html
├── form_wizard.html
├── forum_main.html
├── forum_post.html
├── glyphicons.html
├── graph_echarts.html
├── graph_flot.html
├── graph_metrics.html
├── graph_morris.html
├── graph_peity.html
├── graph_rickshaw.html
├── graph_sparkline.html
├── grid_options.html
├── iconfont.html
├── icons.html
├── img
│ ├── a1.jpg
│ ├── a2.jpg
│ ├── a3.jpg
│ ├── a4.jpg
│ ├── a5.jpg
│ ├── a6.jpg
│ ├── a7.jpg
│ ├── a8.jpg
│ ├── a9.jpg
│ ├── bg.png
│ ├── iconfont-logo.png
│ ├── icons.png
│ ├── index.jpg
│ ├── index_4.jpg
│ ├── loading-upload.gif
│ ├── loading.gif
│ ├── locked.png
│ ├── login-background.jpg
│ ├── p1.jpg
│ ├── p2.jpg
│ ├── p3.jpg
│ ├── p_big1.jpg
│ ├── p_big2.jpg
│ ├── p_big3.jpg
│ ├── pay.png
│ ├── profile.jpg
│ ├── profile_big.jpg
│ ├── profile_small.jpg
│ ├── progress.png
│ ├── qr_code.png
│ ├── success.png
│ ├── user.png
│ └── wenku_logo.png
├── index-2.html
├── index.html
├── index_3.html
├── index_4.html
├── index_v1.html
├── index_v148b2.html
├── index_v2.html
├── index_v3.html
├── index_v4.html
├── index_v5.html
├── invoice.html
├── invoice_print.html
├── javascript;.html
├── js
│ ├── Chart.js
│ ├── bootstrap.min.js
│ ├── contabs.min.js
│ ├── content.min.js
│ ├── demo
│ │ ├── bootstrap-table-demo.min.js
│ │ ├── echarts-demo.min.js
│ │ ├── flot-demo.min.js
│ │ ├── form-advanced-demo.min.js
│ │ ├── form-validate-demo.min.js
│ │ ├── layer-demo.min.js
│ │ ├── morris-demo.min.js
│ │ ├── peity-demo.min.js
│ │ ├── rickshaw-demo.min.js
│ │ ├── sparkline-demo.min.js
│ │ ├── treeview-demo.min.js
│ │ └── webuploader-demo.min.js
│ ├── hplus.min.js
│ ├── inspinia.js
│ ├── jquery-ui-1.10.4.min.js
│ ├── jquery-ui.custom.min.js
│ ├── jquery.bootstrap-duallistbox.js
│ ├── jquery.js
│ ├── jquery.min.js
│ ├── multiselect.min.js
│ ├── nb_tools.js
│ ├── plugins
│ │ ├── beautifyhtml
│ │ │ └── beautifyhtml.js
│ │ ├── blueimp
│ │ │ └── jquery.blueimp-gallery.min.js
│ │ ├── bootstrap-table
│ │ │ ├── bootstrap-table-mobile.min.js
│ │ │ ├── bootstrap-table.min.js
│ │ │ └── locale
│ │ │ │ └── bootstrap-table-zh-CN.min.js
│ │ ├── bootstrapvalidator
│ │ │ ├── bootstrapValidator.min.js
│ │ │ └── language
│ │ │ │ ├── ar_MA.js
│ │ │ │ ├── be_FR.js
│ │ │ │ ├── be_NL.js
│ │ │ │ ├── bg_BG.js
│ │ │ │ ├── cs_CZ.js
│ │ │ │ ├── da_DK.js
│ │ │ │ ├── de_DE.js
│ │ │ │ ├── en_US.js
│ │ │ │ ├── es_CL.js
│ │ │ │ ├── es_ES.js
│ │ │ │ ├── fa_IR.js
│ │ │ │ ├── fr_FR.js
│ │ │ │ ├── gr_EL.js
│ │ │ │ ├── he_IL.js
│ │ │ │ ├── hu_HU.js
│ │ │ │ ├── id_ID.js
│ │ │ │ ├── it_IT.js
│ │ │ │ ├── ja_JP.js
│ │ │ │ ├── nl_NL.js
│ │ │ │ ├── no_NO.js
│ │ │ │ ├── pl_PL.js
│ │ │ │ ├── pt_BR.js
│ │ │ │ ├── pt_PT.js
│ │ │ │ ├── ro_RO.js
│ │ │ │ ├── ru_RU.js
│ │ │ │ ├── sq_AL.js
│ │ │ │ ├── sr_RS.js
│ │ │ │ ├── sv_SE.js
│ │ │ │ ├── th_TH.js
│ │ │ │ ├── tr_TR.js
│ │ │ │ ├── ua_UA.js
│ │ │ │ ├── vi_VN.js
│ │ │ │ ├── zh_CN.js
│ │ │ │ └── zh_TW.js
│ │ ├── chartJs
│ │ │ └── Chart.min.js
│ │ ├── chosen
│ │ │ └── chosen.jquery.js
│ │ ├── clockpicker
│ │ │ └── clockpicker.js
│ │ ├── codemirror
│ │ │ ├── codemirror.js
│ │ │ └── mode
│ │ │ │ └── javascript
│ │ │ │ └── javascript.js
│ │ ├── colorpicker
│ │ │ └── bootstrap-colorpicker.min.js
│ │ ├── cropper
│ │ │ └── cropper.min.js
│ │ ├── dataTables
│ │ │ ├── dataTables.bootstrap.js
│ │ │ └── jquery.dataTables.js
│ │ ├── datapicker
│ │ │ └── bootstrap-datepicker.js
│ │ ├── diff_match_patch
│ │ │ └── diff_match_patch.js
│ │ ├── dropzone
│ │ │ └── dropzone.js
│ │ ├── easypiechart
│ │ │ └── jquery.easypiechart.js
│ │ ├── echarts
│ │ │ └── echarts-all.js
│ │ ├── fancybox
│ │ │ ├── blank.gif
│ │ │ ├── fancybox_loading.gif
│ │ │ ├── fancybox_loading@2x.gif
│ │ │ ├── fancybox_overlay.png
│ │ │ ├── fancybox_sprite.png
│ │ │ ├── fancybox_sprite@2x.png
│ │ │ ├── jquery.fancybox.css
│ │ │ └── jquery.fancybox.js
│ │ ├── flot
│ │ │ ├── curvedLines.js
│ │ │ ├── jquery.flot.js
│ │ │ ├── jquery.flot.pie.js
│ │ │ ├── jquery.flot.resize.js
│ │ │ ├── jquery.flot.spline.js
│ │ │ ├── jquery.flot.symbol.js
│ │ │ └── jquery.flot.tooltip.min.js
│ │ ├── footable
│ │ │ └── footable.all.min.js
│ │ ├── fullcalendar
│ │ │ └── fullcalendar.min.js
│ │ ├── gritter
│ │ │ ├── images
│ │ │ │ ├── gritter-light.png
│ │ │ │ ├── gritter.png
│ │ │ │ └── ie-spacer.gif
│ │ │ ├── jquery.gritter.css
│ │ │ └── jquery.gritter.min.js
│ │ ├── iCheck
│ │ │ └── icheck.min.js
│ │ ├── ionRangeSlider
│ │ │ └── ion.rangeSlider.min.js
│ │ ├── jasny
│ │ │ └── jasny-bootstrap.min.js
│ │ ├── jeditable
│ │ │ └── jquery.jeditable.js
│ │ ├── jqconsole
│ │ │ ├── css
│ │ │ │ └── ansi.css
│ │ │ └── js
│ │ │ │ ├── jqconsole-2.7.min.js
│ │ │ │ └── jquery-1.5.1.js
│ │ ├── jqgrid
│ │ │ ├── i18n
│ │ │ │ └── grid.locale-cnffe4.js
│ │ │ └── jquery.jqGrid.minffe4.js
│ │ ├── jquery-ui
│ │ │ └── jquery-ui.min.js
│ │ ├── jsKnob
│ │ │ └── jquery.knob.js
│ │ ├── jsTree
│ │ │ └── jstree.min.js
│ │ ├── jvectormap
│ │ │ ├── jquery-jvectormap-1.2.2.min.js
│ │ │ └── jquery-jvectormap-world-mill-en.js
│ │ ├── layer
│ │ │ ├── extend
│ │ │ │ └── layer.ext.js
│ │ │ ├── laydate-v1.1
│ │ │ │ ├── demo.html
│ │ │ │ ├── layDate官网.url
│ │ │ │ ├── laydate
│ │ │ │ │ ├── laydate.js
│ │ │ │ │ ├── need
│ │ │ │ │ │ └── laydate.css
│ │ │ │ │ └── skins
│ │ │ │ │ │ ├── dahong
│ │ │ │ │ │ ├── icon.png
│ │ │ │ │ │ └── laydate.css
│ │ │ │ │ │ ├── default
│ │ │ │ │ │ ├── icon.png
│ │ │ │ │ │ └── laydate.css
│ │ │ │ │ │ └── molv
│ │ │ │ │ │ ├── icon.png
│ │ │ │ │ │ └── laydate.css
│ │ │ │ └── 更新日志.txt
│ │ │ ├── laydate
│ │ │ │ ├── laydate.js
│ │ │ │ ├── need
│ │ │ │ │ └── laydate.css
│ │ │ │ └── skins
│ │ │ │ │ ├── dahong
│ │ │ │ │ ├── icon.png
│ │ │ │ │ └── laydate.css
│ │ │ │ │ ├── default
│ │ │ │ │ ├── icon.png
│ │ │ │ │ └── laydate.css
│ │ │ │ │ └── molv
│ │ │ │ │ ├── icon.png
│ │ │ │ │ └── laydate.css
│ │ │ ├── layer.min.js
│ │ │ ├── layim
│ │ │ │ ├── layim.css
│ │ │ │ ├── layim.js
│ │ │ │ └── loading.gif
│ │ │ └── skin
│ │ │ │ ├── default
│ │ │ │ ├── icon-ext.png
│ │ │ │ ├── icon.png
│ │ │ │ ├── loading-0.gif
│ │ │ │ ├── loading-1.gif
│ │ │ │ └── loading-2.gif
│ │ │ │ └── layer.css
│ │ ├── markdown
│ │ │ ├── bootstrap-markdown.js
│ │ │ ├── bootstrap-markdown.zh.js
│ │ │ ├── markdown.js
│ │ │ └── to-markdown.js
│ │ ├── metisMenu
│ │ │ └── jquery.metisMenu.js
│ │ ├── morris
│ │ │ ├── morris.js
│ │ │ └── raphael-2.1.0.min.js
│ │ ├── nestable
│ │ │ └── jquery.nestable.js
│ │ ├── nouslider
│ │ │ └── jquery.nouislider.min.js
│ │ ├── pace
│ │ │ └── pace.min.js
│ │ ├── peity
│ │ │ └── jquery.peity.min.js
│ │ ├── plyr
│ │ │ └── plyr.js
│ │ ├── preetyTextDiff
│ │ │ └── jquery.pretty-text-diff.min.js
│ │ ├── prettyfile
│ │ │ └── bootstrap-prettyfile.js
│ │ ├── rickshaw
│ │ │ ├── rickshaw.min.js
│ │ │ └── vendor
│ │ │ │ └── d3.v3.js
│ │ ├── simditor
│ │ │ ├── hotkeys.js
│ │ │ ├── module.js
│ │ │ ├── simditor.js
│ │ │ └── uploader.js
│ │ ├── slimscroll
│ │ │ └── jquery.slimscroll.min.js
│ │ ├── sparkline
│ │ │ └── jquery.sparkline.min.js
│ │ ├── staps
│ │ │ └── jquery.steps.min.js
│ │ ├── suggest
│ │ │ └── bootstrap-suggest.min.js
│ │ ├── summernote
│ │ │ ├── summernote-zh-CN.js
│ │ │ └── summernote.min.js
│ │ ├── sweetalert
│ │ │ └── sweetalert.min.js
│ │ ├── switchery
│ │ │ └── switchery.js
│ │ ├── toastr
│ │ │ └── toastr.min.js
│ │ ├── treeview
│ │ │ └── bootstrap-treeview.js
│ │ ├── validate
│ │ │ ├── jquery.validate.min.js
│ │ │ └── messages_zh.min.js
│ │ └── webuploader
│ │ │ ├── index.html
│ │ │ └── webuploader.min.js
│ ├── socketclient.js
│ └── welcome.min.js
├── jstree.html
├── layer.html
├── layerdate.html
├── layouts.html
├── line.html
├── lockscreen.html
├── login.html
├── login_v2.html
├── mail_compose.html
├── mail_detail.html
├── mailbox.html
├── modal_window.html
├── nestable_list.html
├── notifications.html
├── pin_board.html
├── plyr.html
├── profile.html
├── project_detail.html
├── projects.html
├── register.html
├── search_results.html
├── social_feed.html
├── spinners.html
├── suggest.html
├── sweetalert.html
├── table_basic.html
├── table_bootstrap.html
├── table_data_tables.html
├── table_foo_table.html
├── table_jqgrid.html
├── tabs_panels.html
├── teams_board.html
├── timeline.html
├── timeline_v2.html
├── toastr_notifications.html
├── tree_view.html
├── tree_view_v2.html
├── typography.html
├── validation.html
├── webim.html
└── widgets.html
└── templates
├── app_base.html
├── home.html
├── menu_header_module.html
└── menu_mysql_module.html
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | env/
12 | build/
13 | develop-eggs/
14 | dist/
15 | downloads/
16 | eggs/
17 | .eggs/
18 | lib/
19 | lib64/
20 | parts/
21 | sdist/
22 | var/
23 | *.egg-info/
24 | .installed.cfg
25 | *.egg
26 |
27 | # PyInstaller
28 | # Usually these files are written by a python script from a template
29 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
30 | *.manifest
31 | *.spec
32 |
33 | # Installer logs
34 | pip-log.txt
35 | pip-delete-this-directory.txt
36 |
37 | # Unit test / coverage reports
38 | htmlcov/
39 | .tox/
40 | .coverage
41 | .coverage.*
42 | .cache
43 | nosetests.xml
44 | coverage.xml
45 | *,cover
46 | .hypothesis/
47 |
48 | # Translations
49 | *.mo
50 | *.pot
51 |
52 | # Django stuff:
53 | *.log
54 | local_settings.py
55 |
56 | # Flask stuff:
57 | instance/
58 | .webassets-cache
59 |
60 | # Scrapy stuff:
61 | .scrapy
62 |
63 | # Sphinx documentation
64 | docs/_build/
65 |
66 | # PyBuilder
67 | target/
68 |
69 | # IPython Notebook
70 | .ipynb_checkpoints
71 |
72 | # pyenv
73 | .python-version
74 |
75 | # celery beat schedule file
76 | celerybeat-schedule
77 |
78 | # dotenv
79 | .env
80 |
81 | # virtualenv
82 | venv/
83 | ENV/
84 |
85 | # Spyder project settings
86 | .spyderproject
87 |
88 | # Rope project settings
89 | .ropeproject
90 |
91 | # add by HH
92 | .swp
93 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # archer_dbmp
2 |
3 | 该项目主要是为了让MySQL数据库维护管理尽量的自动化起来,对于基本的操作能解放相关人员的双手。并且同时也能让相关的开发人员更好的对数据库进行操作。
4 |
5 | 该项目是使用Django开发的,属于一个web项目。
6 |
7 | ### 前奏
8 |
9 | 安装一些包和模块
10 |
11 | ```
12 | yum install lzma libffi-devel -y
13 | pip install Django
14 | pip install paramiko
15 | pip install MySQL-python
16 |
17 | # 在备份客户端中有用到此模块
18 | pip install sqlalchemy
19 | pip install sqlacodegen
20 | ```
21 |
22 | >**传送门:**
23 | >
24 | >备份客户端介绍:
25 | >https://github.com/daiguadaidai/mysql_backup_client
26 |
27 |
28 | ### 初始化数据库
29 |
30 | 在项目的中有一个`sql`目录,该目录下有一个`my_free_schema.sql`文件。将该文件导入到`MySQL`数据库中就行了。
31 |
32 | ###### 目录结构
33 |
34 | ```
35 | .
36 | ├── archer_dbmp
37 | │ ├── settings.py
38 | ├── common
39 | ├── dbmp
40 | ├── logs
41 | ├── manage.py
42 | ├── README.md
43 | ├── sql
44 | │ ├── models.py
45 | │ └── my_free_schema.sql
46 | ├── static
47 | └── templates
48 | ```
49 |
50 | ###### 导入数据库表结构
51 |
52 | ```
53 | mysql -uroot -pxxx -h127.0.0.1 -P3306 < my_free_schema.sql
54 | ```
55 |
56 | 这样就在`MySQL`实例中创建了一个`my_free`的数据库
57 |
58 | ###### 初始化一条操作系统记录
59 |
60 | 在数据库中执行以下命令:
61 |
62 | ```
63 | INSERT INTO cmdb_os VALUES(NULL,
64 | 'hostname-0',
65 | 'alias-0',
66 | inet_aton('192.168.111.0'),
67 | 'username-0',
68 | 'password-0',
69 | '(0)this is remark',
70 | NOW(),
71 | NOW());
72 | ```
73 |
74 | 有关表字段的相关含义等内容,请自行到数据库中查看注释。
75 |
76 | > **Tips:**
77 | > 如果你有多个操作系统,也可以初始化多条`cmdb_os`的记录,在该项目没有添加操作系统的功能。主要是因为操作系统的信息主要是在`archer_cmdb`中实现。
78 |
79 | ### 启动使用archer_dbmp
80 |
81 | 启动和使用`archer_dbmp`其实就是启动一个Django项目
82 |
83 | ###### 稍微设置`setting.py`文件
84 |
85 | ```
86 | cat archer_dbmp/settings.py
87 |
88 | ... omit ...
89 |
90 | DATABASES = {
91 | 'default': {
92 | 'ENGINE': 'django.db.backends.mysql',
93 | 'NAME': 'my_free',
94 | 'USER':'root',
95 | 'PASSWORD':'xxx',
96 | 'HOST':'127.0.0.1',
97 | 'PORT':'3306',
98 | # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
99 | }
100 | }
101 |
102 | ... omit ...
103 | ```
104 |
105 | ###### 启动`archer_dbmp`
106 |
107 | ```
108 | python manage.py runserver 0.0.0.0:8000
109 | ```
110 |
111 | ###### 访问`archer_dbmp`
112 |
113 | 在浏览器上输入一下地址(注意替换为自己的地址):
114 |
115 | ```
116 | http://127.0.0.1:8000
117 | ```
118 |
119 | >**Tips:**
120 | >有能力的朋友可以结合Nnigx来搭建环境。
121 |
--------------------------------------------------------------------------------
/archer_dbmp/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/archer_dbmp/__init__.py
--------------------------------------------------------------------------------
/archer_dbmp/urls.py:
--------------------------------------------------------------------------------
1 | """archer_dbmp URL Configuration
2 |
3 | The `urlpatterns` list routes URLs to views. For more information please see:
4 | https://docs.djangoproject.com/en/1.8/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: url(r'^$', 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: url(r'^$', Home.as_view(), name='home')
12 | Including another URLconf
13 | 1. Add an import: from blog import urls as blog_urls
14 | 2. Add a URL to urlpatterns: url(r'^blog/', include(blog_urls))
15 | """
16 | from django.conf.urls import include, url
17 | from django.contrib import admin
18 |
19 | urlpatterns = [
20 | url(r'^$', include('dbmp.urls')),
21 | url(r'^dbmp/', include('dbmp.urls')),
22 | url(r'^admin/', include(admin.site.urls)),
23 | ]
24 |
--------------------------------------------------------------------------------
/archer_dbmp/wsgi.py:
--------------------------------------------------------------------------------
1 | """
2 | WSGI config for archer_dbmp 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/1.8/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", "archer_dbmp.settings")
15 |
16 | application = get_wsgi_application()
17 |
--------------------------------------------------------------------------------
/common/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/common/__init__.py
--------------------------------------------------------------------------------
/common/model_choices_field_value/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/common/model_choices_field_value/__init__.py
--------------------------------------------------------------------------------
/common/model_choices_field_value/field_dbmp_inception_business.py:
--------------------------------------------------------------------------------
1 | # -*- coding:utf-8 -*-
2 |
3 | class FieldDbmpInceptionBusiness(object):
4 | """用于Model字段值的选择"""
5 |
6 | def __init__(self):
7 | pass
8 |
9 | @classmethod
10 | def inc_bus_execute_status(self):
11 | """数据库执行SQL审核状态"""
12 | value = (
13 | (1, '未执行'),
14 | (2, '执行成功'),
15 | (3, '执行失败'),
16 | (4, '部分失败'),
17 | )
18 | return value
19 |
20 | @classmethod
21 | def inc_bus_execute_status_color(self):
22 | """MySQL实例正在运行状态 对应显示的颜色"""
23 | value = (
24 | (1, 'success'),
25 | (2, 'primary'),
26 | (3, 'danger'),
27 | (4, 'warning'),
28 | )
29 | return value
30 |
--------------------------------------------------------------------------------
/common/model_choices_field_value/field_dbmp_inception_business_detail.py:
--------------------------------------------------------------------------------
1 | # -*- coding:utf-8 -*-
2 |
3 | class FieldDbmpInceptionBusinessDetail(object):
4 | """用于Model字段值的选择"""
5 |
6 | def __init__(self):
7 | pass
8 |
9 | @classmethod
10 | def inc_bus_det_execute_status(self):
11 | """数据库执行SQL审核状态"""
12 | value = (
13 | (1, '未执行'),
14 | (2, '执行成功'),
15 | (3, '执行失败'),
16 | )
17 | return value
18 |
19 | @classmethod
20 | def inc_bus_det_execute_status_color(self):
21 | """MySQL实例正在运行状态 对应显示的颜色"""
22 | value = (
23 | (1, 'success'),
24 | (2, 'primary'),
25 | (3, 'danger'),
26 | )
27 | return value
28 |
--------------------------------------------------------------------------------
/common/model_choices_field_value/field_dbmp_inception_database.py:
--------------------------------------------------------------------------------
1 | # -*- coding:utf-8 -*-
2 |
3 | class FieldDbmpInceptionDatabase(object):
4 | """用于Model字段值的选择"""
5 |
6 | def __init__(self):
7 | pass
8 |
9 | @classmethod
10 | def inc_db_execute_status(self):
11 | """数据库执行SQL审核状态"""
12 | value = (
13 | (1, '未执行'),
14 | (2, '执行成功'),
15 | (3, '执行失败'),
16 | )
17 | return value
18 |
19 | @classmethod
20 | def inc_db_execute_status_color(self):
21 | """MySQL实例正在运行状态 对应显示的颜色"""
22 | value = (
23 | (1, 'success'),
24 | (2, 'primary'),
25 | (3, 'danger'),
26 | )
27 | return value
28 |
--------------------------------------------------------------------------------
/common/model_choices_field_value/field_dbmp_inception_record.py:
--------------------------------------------------------------------------------
1 | # -*- coding:utf-8 -*-
2 |
3 | class FieldDbmpInceptionRecord(object):
4 | """用于Model字段值的选择"""
5 |
6 | def __init__(self):
7 | pass
8 |
9 | @classmethod
10 | def is_remote_backup(self):
11 | """审核前是否备份"""
12 | value = (
13 | (0, '否'),
14 | (1, '是'),
15 | )
16 | return value
17 |
18 | @classmethod
19 | def inc_rec_execute_status(self):
20 | """数据库执行SQL审核状态"""
21 | value = (
22 | (1, '未执行'),
23 | (2, '执行成功'),
24 | (3, '执行失败'),
25 | (4, '部分失败'),
26 | )
27 | return value
28 |
29 | @classmethod
30 | def inc_rec_execute_status_color(self):
31 | """MySQL实例正在运行状态 对应显示的颜色"""
32 | value = (
33 | (1, ''),
34 | (2, 'success'),
35 | (3, 'danger'),
36 | (4, 'warning'),
37 | )
38 | return value
39 |
40 | @classmethod
41 | def inc_rec_inception_target(self):
42 | """MySQL实例正在运行状态 对应显示的颜色"""
43 | value = (
44 | (1, '仅数据库'),
45 | (2, '仅业务组'),
46 | (3, '混合(数据库/业务组)'),
47 | )
48 | return value
49 |
--------------------------------------------------------------------------------
/common/model_choices_field_value/field_dbmp_mysql_backup_info.py:
--------------------------------------------------------------------------------
1 | # -*- coding:utf-8 -*-
2 |
3 | class FieldDbmpMysqlBackupInfo(object):
4 | """用于Model字段值的选择"""
5 |
6 | def __init__(self):
7 | pass
8 |
9 | @classmethod
10 | def backup_status(self):
11 | """备份状态"""
12 | value = (
13 | (1, '未备份'),
14 | (2, '正在备份'),
15 | (3, '备份完成'),
16 | (4, '备份失败'),
17 | (5, '备份完成但和指定的有差异'),
18 | )
19 | return value
20 |
21 | @classmethod
22 | def backup_data_status(self):
23 | """备份数据状态"""
24 | value = (
25 | (1, '未备份'),
26 | (2, '备份失败'),
27 | (3, '备份完成'),
28 | )
29 | return value
30 |
31 | @classmethod
32 | def check_status(self):
33 | """校验备份集状态"""
34 | value = (
35 | (1, '未校验'),
36 | (2, '正在校验'),
37 | (3, '校验完成'),
38 | (4, '校验失败'),
39 | )
40 | return value
41 |
42 | @classmethod
43 | def binlog_status(self):
44 | """binlog备份状态"""
45 | value = (
46 | (1, '未备份'),
47 | (2, '备份失败'),
48 | (3, '备份完成'),
49 | )
50 | return value
51 |
52 | @classmethod
53 | def trans_data_status(self):
54 | """备份数据远程传输状态"""
55 | value = (
56 | (1, '未传输'),
57 | (2, '传输失败'),
58 | (3, '传输完成'),
59 | )
60 | return value
61 |
62 | @classmethod
63 | def trans_binlog_status(self):
64 | """备份binlog远程传输状态"""
65 | value = (
66 | (1, '未传输'),
67 | (2, '传输失败'),
68 | (3, '传输完成'),
69 | )
70 | return value
71 |
72 | @classmethod
73 | def compress_status(self):
74 | """binlog备份状态"""
75 | value = (
76 | (1, '未压缩'),
77 | (2, '压缩失败'),
78 | (3, '压缩完成未传输'),
79 | )
80 | return value
81 |
--------------------------------------------------------------------------------
/common/model_choices_field_value/field_dbmp_mysql_backup_instance.py:
--------------------------------------------------------------------------------
1 | # -*- coding:utf-8 -*-
2 |
3 | class FieldDbmpMysqlBackupInstance(object):
4 | """用于Model字段值的选择"""
5 |
6 | def __init__(self):
7 | pass
8 |
9 | @classmethod
10 | def backup_tool(self):
11 | """使用备份工具"""
12 | value = (
13 | (1, 'mysqldump'),
14 | (2, 'mysqlpump'),
15 | (3, 'mydumper'),
16 | (4, 'xtrabackup'),
17 | )
18 | return value
19 |
20 | @classmethod
21 | def backup_type(self):
22 | """备份类型"""
23 | value = (
24 | (1, '强制指定实例备份'),
25 | (2, '强制寻找备份'),
26 | (3, '最优型备份'),
27 | )
28 | return value
29 |
30 | @classmethod
31 | def is_all_instance(self):
32 | """是否备份整个实例"""
33 | value = (
34 | (0, '否'),
35 | (1, '是'),
36 | )
37 | return value
38 |
39 | @classmethod
40 | def is_binlog(self):
41 | """是否备份binlog"""
42 | value = (
43 | (0, '否'),
44 | (1, '是'),
45 | )
46 | return value
47 |
48 | @classmethod
49 | def is_compress(self):
50 | """备份集是否压缩"""
51 | value = (
52 | (0, '否'),
53 | (1, '是'),
54 | )
55 | return value
56 |
57 | @classmethod
58 | def is_to_remote(self):
59 | """将备份传输至远程"""
60 | value = (
61 | (0, '否'),
62 | (1, '是'),
63 | )
64 | return value
65 |
--------------------------------------------------------------------------------
/common/model_choices_field_value/field_dbmp_mysql_instance.py:
--------------------------------------------------------------------------------
1 | # -*- coding:utf-8 -*-
2 |
3 | class FieldDbmpMysqlInstance(object):
4 | """用于Model字段值的选择"""
5 |
6 | def __init__(self):
7 | pass
8 |
9 | @classmethod
10 | def run_status(self):
11 | """MySQL实例正在运行状态"""
12 | value = (
13 | (1, '已停止'),
14 | (2, '运行中'),
15 | (3, '未知'),
16 | (4, '正在关闭'),
17 | (5, '正在启动'),
18 | )
19 | return value
20 |
21 | @classmethod
22 | def run_status_color(self):
23 | """MySQL实例正在运行状态 对应显示的颜色"""
24 | value = (
25 | (1, 'danger'),
26 | (2, 'primary'),
27 | (3, 'warning'),
28 | (4, 'danger'),
29 | (5, 'info'),
30 | )
31 | return value
32 |
--------------------------------------------------------------------------------
/common/util/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/common/util/__init__.py
--------------------------------------------------------------------------------
/common/util/decorator_tool.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | import simplejson as json
4 |
5 | class DecoratorTool(object):
6 |
7 | def __init__(self):
8 | pass
9 |
10 | @classmethod
11 | def get_request_alert_message(self, func):
12 | """获得请求的alter信息"""
13 | def warpper(request):
14 | request.session['alert_message_now'] = {}
15 |
16 | request.session['alert_message_now'] = {
17 | 'default_code': request.session.get('default_code', 'warning'),
18 | 'default_msg': request.session.get('default_msg', []),
19 | 'primary_code': request.session.get('primary_code', 'info'),
20 | 'primary_msg': request.session.get('primary_msg', []),
21 | 'warning_code': request.session.get('warning_code', 'warning'),
22 | 'warning_msg': request.session.get('warning_msg', []),
23 | 'info_code': request.session.get('info_code', 'info'),
24 | 'info_msg': request.session.get('info_msg', []),
25 | 'danger_code': request.session.get('danger_code', 'danger'),
26 | 'danger_msg': request.session.get('danger_msg', []),
27 | 'success_code': request.session.get('success_code', 'success'),
28 | 'success_msg': request.session.get('success_msg', []),
29 | }
30 | request.session['default_code'] = 'default'
31 | request.session['default_msg'] = []
32 | request.session['primary_code'] = 'primary'
33 | request.session['primary_msg'] = []
34 | request.session['warning_code'] = 'warning'
35 | request.session['warning_msg'] = []
36 | request.session['info_code'] = 'info'
37 | request.session['info_msg'] = []
38 | request.session['danger_code'] = 'danger'
39 | request.session['danger_msg'] = []
40 | request.session['success_code'] = 'success'
41 | request.session['success_msg'] = []
42 |
43 | # form danger信息
44 | if request.session.has_key('form_danger_message'):
45 | messages = request.session.get('form_danger_message', {})
46 | for label, msgs in messages.items():
47 | for msg in msgs:
48 | request.session['alert_message_now']['danger_msg'].append(msg)
49 | request.session.pop('form_danger_message')
50 |
51 | return func(request)
52 |
53 | return warpper
54 |
55 | @classmethod
56 | def clean_alert_message(self, func):
57 | """获得请求的alter信息"""
58 | def warpper(request):
59 | request.session['alert_message_now'] = {}
60 |
61 | request.session['default_code'] = 'default'
62 | request.session['default_msg'] = []
63 | request.session['primary_code'] = 'primary'
64 | request.session['primary_msg'] = []
65 | request.session['warning_code'] = 'warning'
66 | request.session['warning_msg'] = []
67 | request.session['info_code'] = 'info'
68 | request.session['info_msg'] = []
69 | request.session['danger_code'] = 'danger'
70 | request.session['danger_msg'] = []
71 | request.session['success_code'] = 'success'
72 | request.session['success_msg'] = []
73 |
74 | return func(request)
75 |
76 | return warpper
77 |
--------------------------------------------------------------------------------
/common/util/ip_tool.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | import os
4 | import sys
5 | import socket
6 | import struct
7 |
8 | class IpTool(object):
9 | """这是一个IP转化工具类
10 | """
11 | def __init__(self):
12 | pass
13 |
14 | @classmethod
15 | def num2ip(self, num):
16 | """将一个10位数转化成一个IP
17 | Args:
18 | num: 一个整数
19 | Return:
20 | 返回一个 字符串 IP
21 | 如: 10.10.10.11
22 | Raise: None
23 | """
24 | if isinstance(num, int) or isinstance(num, long):
25 | return socket.inet_ntoa(struct.pack('I', socket.htonl(num)))
26 | else:
27 | return ''
28 |
29 | @classmethod
30 | def ip2num(self, ip):
31 | """将一个IP转化为整数
32 | Args:
33 | ip: 一个ip: 10.10.10.11
34 | Return:
35 | 返回一个 Long 类型的数字
36 | 如: 123456789
37 | Raise: None
38 | """
39 |
40 | return socket.ntohl(struct.unpack('I', socket.inet_aton(str(ip)))[0])
41 |
42 |
43 | def main():
44 | print Toolkit.ip2num('127.0.0.1')
45 |
46 |
47 | if __name__ == '__main__':
48 | main()
49 |
--------------------------------------------------------------------------------
/common/util/json_date_encoder.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | from time import mktime
4 |
5 | import simplejson as json
6 | import datetime
7 |
8 | class JsonDateEncoder(json.JSONEncoder):
9 | def default(self, obj):
10 | if isinstance(obj, datetime.datetime):
11 | return int(mktime(obj.timetuple()))
12 |
13 | return json.JSONEncoder.default(self, obj)
14 |
15 | def main():
16 | pass
17 |
18 | if __name__ == '__main__':
19 | main()
20 |
--------------------------------------------------------------------------------
/common/util/view_url_path.py:
--------------------------------------------------------------------------------
1 | #-*- coding:utf-8 -*-
2 |
3 | class ViewUrlPath(object):
4 | """view中需要转跳的url 路径定义
5 | """
6 |
7 | def __init__(self):
8 | pass
9 |
10 | @classmethod
11 | def path_dbmp_mysql_instance(self):
12 | """MySQL实例列表"""
13 | return '/dbmp/dbmp_mysql_instance'
14 |
15 | @classmethod
16 | def path_dbmp_mysql_backup_instance(self):
17 | """MySQL备份实例列表"""
18 | return '/dbmp/dbmp_mysql_backup_instance'
19 |
20 | @classmethod
21 | def path_dbmp_mysql_business(self):
22 | """MySQL业务组列表"""
23 | return '/dbmp/dbmp_mysql_business'
24 |
25 | @classmethod
26 | def path_dbmp_inception_record(self):
27 | """SQL审核记录"""
28 | return '/dbmp/dbmp_inception_record'
29 |
--------------------------------------------------------------------------------
/dbmp/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/dbmp/__init__.py
--------------------------------------------------------------------------------
/dbmp/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 |
3 | # Register your models here.
4 |
--------------------------------------------------------------------------------
/dbmp/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/dbmp/migrations/__init__.py
--------------------------------------------------------------------------------
/dbmp/models/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/dbmp/models/__init__.py
--------------------------------------------------------------------------------
/dbmp/models/cmdb_os.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | # This is an auto-generated Django model module.
4 | # You'll have to do the following manually to clean this up:
5 | # * Rearrange models' order
6 | # * Make sure each model has one field with primary_key=True
7 | # * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
8 | # Feel free to rename the models, but don't rename db_table values or field names.
9 | #
10 | # Also note: You'll have to insert the output of 'django-admin sqlcustom [app_label]'
11 | # into your database.
12 | from __future__ import unicode_literals
13 |
14 | from django.db import models
15 |
16 | class CmdbOs(models.Model):
17 | os_id = models.AutoField(primary_key=True)
18 | hostname = models.CharField(max_length=50)
19 | alias = models.CharField(max_length=40)
20 | ip = models.IntegerField()
21 | username = models.CharField(max_length=30)
22 | password = models.CharField(max_length=200)
23 | remark = models.CharField(max_length=50)
24 | create_time = models.DateTimeField(auto_now_add=True)
25 | update_time = models.DateTimeField(auto_now=True)
26 |
27 | def __unicode__(self):
28 | """Java toString 方法"""
29 | print_str = 'ip({ip}), hostname({hostname}), alias({alias})'.format(
30 | ip = self.ip,
31 | hostname = self.hostname,
32 | alias = self.alias)
33 | return print_str
34 |
35 | class Meta:
36 | managed = False
37 | db_table = 'cmdb_os'
38 |
--------------------------------------------------------------------------------
/dbmp/models/dbmp_inception_business.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | # This is an auto-generated Django model module.
4 | # You'll have to do the following manually to clean this up:
5 | # * Rearrange models' order
6 | # * Make sure each model has one field with primary_key=True
7 | # * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
8 | # Feel free to rename the models, but don't rename db_table values or field names.
9 | #
10 | # Also note: You'll have to insert the output of 'django-admin sqlcustom [app_label]'
11 | # into your database.
12 | from __future__ import unicode_literals
13 |
14 | from django.db import models
15 |
16 | class DbmpInceptionBusiness(models.Model):
17 | inception_business_id = models.AutoField(primary_key=True)
18 | inception_record_id = models.IntegerField()
19 | mysql_business_id = models.IntegerField()
20 | execute_status = models.IntegerField()
21 | create_time = models.DateTimeField(auto_now_add=True)
22 | update_time = models.DateTimeField(auto_now=True)
23 |
24 | def __unicode__(self):
25 | """Java toString 方法"""
26 | print_str = ('DbmpInceptionBusiness({inception_business_id},'
27 | '{inception_record_id},'
28 | '{mysql_business_id})'.format(
29 | inception_business_id = self.inception_business_id,
30 | inception_record_id = self.inception_record_id,
31 | mysql_business_id = self.mysql_business_id))
32 | return print_str
33 |
34 | class Meta:
35 | managed = False
36 | db_table = 'dbmp_inception_business'
37 | unique_together = (('inception_record_id', 'mysql_business_id'),)
38 |
--------------------------------------------------------------------------------
/dbmp/models/dbmp_inception_business_detail.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | # This is an auto-generated Django model module.
4 | # You'll have to do the following manually to clean this up:
5 | # * Rearrange models' order
6 | # * Make sure each model has one field with primary_key=True
7 | # * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
8 | # Feel free to rename the models, but don't rename db_table values or field names.
9 | #
10 | # Also note: You'll have to insert the output of 'django-admin sqlcustom [app_label]'
11 | # into your database.
12 | from __future__ import unicode_literals
13 |
14 | from django.db import models
15 |
16 | class DbmpInceptionBusinessDetail(models.Model):
17 | inception_business_detail_id = models.AutoField(primary_key=True)
18 | inception_business_id = models.IntegerField()
19 | inception_record_id = models.IntegerField()
20 | mysql_business_id = models.IntegerField()
21 | mysql_database_id = models.IntegerField()
22 | execute_status = models.IntegerField()
23 | create_time = models.DateTimeField(auto_now_add=True)
24 | update_time = models.DateTimeField(auto_now=True)
25 |
26 | def __unicode__(self):
27 | """Java toString 方法"""
28 | print_str = ('DbmpInceptionBusiness({inception_business_detail_id},'
29 | '{inception_business_id},'
30 | '{inception_record_id},'
31 | '{mysql_business_id},'
32 | '{mysql_database_id})'.format(
33 | inception_business_detail_id = self.inception_business_detail_id,
34 | inception_business_id = self.inception_business_id,
35 | inception_record_id = self.inception_record_id,
36 | mysql_business_id = self.mysql_business_id,
37 | mysql_database_id = self.mysql_database_id))
38 | return print_str
39 |
40 | class Meta:
41 | managed = False
42 | db_table = 'dbmp_inception_business_detail'
43 | unique_together = (('inception_record_id', 'mysql_database_id'),)
44 |
--------------------------------------------------------------------------------
/dbmp/models/dbmp_inception_database.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | # This is an auto-generated Django model module.
4 | # You'll have to do the following manually to clean this up:
5 | # * Rearrange models' order
6 | # * Make sure each model has one field with primary_key=True
7 | # * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
8 | # Feel free to rename the models, but don't rename db_table values or field names.
9 | #
10 | # Also note: You'll have to insert the output of 'django-admin sqlcustom [app_label]'
11 | # into your database.
12 | from __future__ import unicode_literals
13 |
14 | from django.db import models
15 |
16 | class DbmpInceptionDatabase(models.Model):
17 | inception_database_id = models.AutoField(primary_key=True)
18 | inception_record_id = models.IntegerField()
19 | mysql_database_id = models.IntegerField()
20 | execute_status = models.IntegerField()
21 | create_time = models.DateTimeField(auto_now_add=True)
22 | update_time = models.DateTimeField(auto_now=True)
23 |
24 | def __unicode__(self):
25 | """Java toString 方法"""
26 | print_str = ('DbmpInceptionDatabase({inception_database_id}, '
27 | '{inception_record_id}, {mysql_database_id})'.format(
28 | inception_database_id = self.inception_database_id,
29 | inception_record_id = self.inception_record_id,
30 | mysql_database_id = self.mysql_database_id))
31 | return print_str
32 |
33 | class Meta:
34 | managed = False
35 | db_table = 'dbmp_inception_database'
36 | unique_together = (('inception_record_id', 'mysql_database_id'),)
37 |
--------------------------------------------------------------------------------
/dbmp/models/dbmp_inception_instance.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | # This is an auto-generated Django model module.
4 | # You'll have to do the following manually to clean this up:
5 | # * Rearrange models' order
6 | # * Make sure each model has one field with primary_key=True
7 | # * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
8 | # Feel free to rename the models, but don't rename db_table values or field names.
9 | #
10 | # Also note: You'll have to insert the output of 'django-admin sqlcustom [app_label]'
11 | # into your database.
12 | from __future__ import unicode_literals
13 |
14 | from django.db import models
15 |
16 | class DbmpInceptionInstance(models.Model):
17 | inception_instance_id = models.AutoField(primary_key=True)
18 | host = models.IntegerField()
19 | port = models.IntegerField()
20 | alias = models.CharField(max_length=50)
21 | create_time = models.DateTimeField(auto_now_add=True)
22 | update_time = models.DateTimeField(auto_now=True)
23 |
24 | def __unicode__(self):
25 | """Java toString 方法"""
26 | print_str = 'DbmpInceptionInstance({alias})'.format(
27 | alias = self.alias)
28 | return print_str
29 |
30 | class Meta:
31 | managed = False
32 | db_table = 'dbmp_inception_instance'
33 | unique_together = (('host', 'port'),)
34 |
--------------------------------------------------------------------------------
/dbmp/models/dbmp_inception_record.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | # This is an auto-generated Django model module.
4 | # You'll have to do the following manually to clean this up:
5 | # * Rearrange models' order
6 | # * Make sure each model has one field with primary_key=True
7 | # * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
8 | # Feel free to rename the models, but don't rename db_table values or field names.
9 | #
10 | # Also note: You'll have to insert the output of 'django-admin sqlcustom [app_label]'
11 | # into your database.
12 | from __future__ import unicode_literals
13 |
14 | from django.db import models
15 |
16 | class DbmpInceptionRecord(models.Model):
17 | inception_record_id = models.AutoField(primary_key=True)
18 | inception_instance_id = models.IntegerField()
19 | is_remote_backup = models.IntegerField()
20 | inception_target = models.IntegerField()
21 | tag = models.CharField(max_length=20)
22 | remark = models.CharField(max_length=200)
23 | sql_text = models.TextField(blank=True, null=True)
24 | create_time = models.DateTimeField(auto_now_add=True)
25 | update_time = models.DateTimeField(auto_now=True)
26 | charset = models.CharField(max_length=20)
27 | execute_status = models.IntegerField()
28 |
29 | def __unicode__(self):
30 | """Java toString 方法"""
31 | print_str = 'DbmpInceptionRecord({inception_record_id})'.format(
32 | inception_record_id = self.inception_record_id)
33 | return print_str
34 |
35 | class Meta:
36 | managed = False
37 | db_table = 'dbmp_inception_record'
38 |
--------------------------------------------------------------------------------
/dbmp/models/dbmp_mysql_backup_info.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | # This is an auto-generated Django model module.
4 | # You'll have to do the following manually to clean this up:
5 | # * Rearrange models' order
6 | # * Make sure each model has one field with primary_key=True
7 | # * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
8 | # Feel free to rename the models, but don't rename db_table values or field names.
9 | #
10 | # Also note: You'll have to insert the output of 'django-admin sqlcustom [app_label]'
11 | # into your database.
12 | from __future__ import unicode_literals
13 |
14 | from django.db import models
15 | from common.model_choices_field_value.field_dbmp_mysql_backup_info import FieldDbmpMysqlBackupInfo
16 |
17 | class DbmpMysqlBackupInfo(models.Model):
18 | mysql_backup_info_id = models.AutoField(primary_key=True)
19 | mysql_instance_id = models.IntegerField()
20 | backup_status = models.IntegerField(choices=FieldDbmpMysqlBackupInfo.backup_status())
21 | backup_data_status = models.IntegerField(choices=FieldDbmpMysqlBackupInfo.backup_data_status())
22 | check_status = models.IntegerField(choices=FieldDbmpMysqlBackupInfo.check_status())
23 | binlog_status = models.IntegerField(choices=FieldDbmpMysqlBackupInfo.binlog_status())
24 | trans_data_status = models.IntegerField(choices=FieldDbmpMysqlBackupInfo.trans_data_status())
25 | trans_binlog_status = models.IntegerField(choices=FieldDbmpMysqlBackupInfo.trans_binlog_status())
26 | compress_status = models.IntegerField(choices=FieldDbmpMysqlBackupInfo.compress_status())
27 | thread_id = models.IntegerField()
28 | backup_dir = models.CharField(max_length=250)
29 | remote_backup_dir = models.CharField(max_length=250)
30 | backup_size = models.BigIntegerField()
31 | backup_start_time = models.DateTimeField(auto_now_add=True)
32 | backup_end_time = models.DateTimeField(blank=True, null=True)
33 | check_start_time = models.DateTimeField(blank=True, null=True)
34 | check_end_time = models.DateTimeField(blank=True, null=True)
35 | trans_start_time = models.DateTimeField(blank=True, null=True)
36 | trans_end_time = models.DateTimeField(blank=True, null=True)
37 | message = models.CharField(max_length=50)
38 | create_time = models.DateTimeField(auto_now_add=True)
39 | update_time = models.DateTimeField(auto_now=True)
40 |
41 | def __unicode__(self):
42 | """Java toString 方法"""
43 | print_str = ('mysql_backup_info_id({mysql_backup_info_id}), '
44 | 'mysql_instance_id({mysql_instance_id})'.format(
45 | mysql_backup_info_id = self.mysql_backup_info_id,
46 | mysql_instance_id = self.mysql_instance_id))
47 | return print_str
48 |
49 | class Meta:
50 | managed = False
51 | db_table = 'dbmp_mysql_backup_info'
52 |
--------------------------------------------------------------------------------
/dbmp/models/dbmp_mysql_backup_instance.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | # This is an auto-generated Django model module.
4 | # You'll have to do the following manually to clean this up:
5 | # * Rearrange models' order
6 | # * Make sure each model has one field with primary_key=True
7 | # * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
8 | # Feel free to rename the models, but don't rename db_table values or field names.
9 | #
10 | # Also note: You'll have to insert the output of 'django-admin sqlcustom [app_label]'
11 | # into your database.
12 | from __future__ import unicode_literals
13 |
14 | from django.db import models
15 | from common.model_choices_field_value.field_dbmp_mysql_backup_instance import FieldDbmpMysqlBackupInstance
16 |
17 | class DbmpMysqlBackupInstance(models.Model):
18 | mysql_backup_instance_id = models.AutoField(primary_key=True)
19 | mysql_instance_id = models.IntegerField(unique=True)
20 | backup_tool = models.IntegerField(choices=FieldDbmpMysqlBackupInstance.backup_tool())
21 | backup_type = models.IntegerField(choices=FieldDbmpMysqlBackupInstance.backup_type())
22 | is_all_instance = models.IntegerField(choices=FieldDbmpMysqlBackupInstance.is_all_instance())
23 | is_binlog = models.IntegerField(choices=FieldDbmpMysqlBackupInstance.is_binlog())
24 | is_compress = models.IntegerField(choices=FieldDbmpMysqlBackupInstance.is_compress())
25 | is_to_remote = models.IntegerField(choices=FieldDbmpMysqlBackupInstance.is_to_remote())
26 | backup_dir = models.CharField(max_length=200)
27 | backup_tool_file = models.CharField(max_length=200)
28 | backup_tool_param = models.CharField(max_length=200)
29 | backup_name = models.CharField(max_length=100)
30 | create_time = models.DateTimeField(auto_now_add=True)
31 | update_time = models.DateTimeField(auto_now=True)
32 |
33 | def __unicode__(self):
34 | """Java toString 方法"""
35 | print_str = 'DbmpMysqlBackupInstance({mysql_backup_instance_id})'.format(
36 | mysql_backup_info_id = self.mysql_backup_instance_id)
37 | return print_str
38 |
39 | class Meta:
40 | managed = False
41 | db_table = 'dbmp_mysql_backup_instance'
42 |
--------------------------------------------------------------------------------
/dbmp/models/dbmp_mysql_backup_remote.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | # This is an auto-generated Django model module.
4 | # You'll have to do the following manually to clean this up:
5 | # * Rearrange models' order
6 | # * Make sure each model has one field with primary_key=True
7 | # * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
8 | # Feel free to rename the models, but don't rename db_table values or field names.
9 | #
10 | # Also note: You'll have to insert the output of 'django-admin sqlcustom [app_label]'
11 | # into your database.
12 | from __future__ import unicode_literals
13 |
14 | from django.db import models
15 |
16 | class DbmpMysqlBackupRemote(models.Model):
17 | mysql_backup_remote_id = models.AutoField(primary_key=True)
18 | mysql_backup_instance_id = models.IntegerField(unique=True)
19 | os_id = models.IntegerField()
20 | mysql_instance_id = models.IntegerField(unique=True)
21 | remote_dir = models.CharField(max_length=200)
22 | create_time = models.DateTimeField(auto_now_add=True)
23 | update_time = models.DateTimeField(auto_now=True)
24 |
25 | def __unicode__(self):
26 | """Java toString 方法"""
27 | print_str = 'DbmpMysqlBackupRemote({mysql_backup_remote_id})'.format(
28 | mysql_backup_remote_id = self.mysql_backup_remote_id)
29 | return print_str
30 |
31 | class Meta:
32 | managed = False
33 | db_table = 'dbmp_mysql_backup_remote'
34 |
--------------------------------------------------------------------------------
/dbmp/models/dbmp_mysql_business.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | # This is an auto-generated Django model module.
4 | # You'll have to do the following manually to clean this up:
5 | # * Rearrange models' order
6 | # * Make sure each model has one field with primary_key=True
7 | # * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
8 | # Feel free to rename the models, but don't rename db_table values or field names.
9 | #
10 | # Also note: You'll have to insert the output of 'django-admin sqlcustom [app_label]'
11 | # into your database.
12 | from __future__ import unicode_literals
13 |
14 | from django.db import models
15 |
16 | class DbmpMysqlBusiness(models.Model):
17 | mysql_business_id = models.AutoField(primary_key=True)
18 | name = models.CharField(unique=True, max_length=50)
19 | remark = models.CharField(max_length=200)
20 | create_time = models.DateTimeField(auto_now_add=True)
21 | update_time = models.DateTimeField(auto_now=True)
22 |
23 | def __unicode__(self):
24 | """Java toString 方法"""
25 | print_str = 'DbmpMysqlBusiness({name})'.format(
26 | name = self.name)
27 | return print_str
28 |
29 | class Meta:
30 | managed = False
31 | db_table = 'dbmp_mysql_business'
32 |
--------------------------------------------------------------------------------
/dbmp/models/dbmp_mysql_business_detail.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | # This is an auto-generated Django model module.
4 | # You'll have to do the following manually to clean this up:
5 | # * Rearrange models' order
6 | # * Make sure each model has one field with primary_key=True
7 | # * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
8 | # Feel free to rename the models, but don't rename db_table values or field names.
9 | #
10 | # Also note: You'll have to insert the output of 'django-admin sqlcustom [app_label]'
11 | # into your database.
12 | from __future__ import unicode_literals
13 |
14 | from django.db import models
15 |
16 | class DbmpMysqlBusinessDetail(models.Model):
17 | mysql_business_detail_id = models.AutoField(primary_key=True)
18 | mysql_business_id = models.IntegerField()
19 | mysql_database_id = models.IntegerField()
20 | create_time = models.DateTimeField(auto_now_add=True)
21 | update_time = models.DateTimeField(auto_now=True)
22 |
23 | def __unicode__(self):
24 | """Java toString 方法"""
25 | print_str = 'DbmpMysqlBusinessDetail({id})'.format(
26 | id = self.mysql_business_detail_id)
27 | return print_str
28 |
29 | class Meta:
30 | managed = False
31 | db_table = 'dbmp_mysql_business_detail'
32 |
--------------------------------------------------------------------------------
/dbmp/models/dbmp_mysql_database.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | # This is an auto-generated Django model module.
4 | # You'll have to do the following manually to clean this up:
5 | # * Rearrange models' order
6 | # * Make sure each model has one field with primary_key=True
7 | # * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
8 | # Feel free to rename the models, but don't rename db_table values or field names.
9 | #
10 | # Also note: You'll have to insert the output of 'django-admin sqlcustom [app_label]'
11 | # into your database.
12 | from __future__ import unicode_literals
13 |
14 | from django.db import models
15 |
16 | class DbmpMysqlDatabase(models.Model):
17 | mysql_database_id = models.AutoField(primary_key=True)
18 | mysql_instance_id = models.IntegerField()
19 | name = models.CharField(max_length=50)
20 | create_time = models.DateTimeField(auto_now_add=True)
21 | update_time = models.DateTimeField(auto_now=True)
22 |
23 | def __unicode__(self):
24 | """Java toString 方法"""
25 | print_str = 'database name: {name}'.format(
26 | name = self.name)
27 | return print_str
28 |
29 | class Meta:
30 | managed = False
31 | db_table = 'dbmp_mysql_database'
32 | unique_together = (('mysql_instance_id', 'name'),)
33 |
--------------------------------------------------------------------------------
/dbmp/models/dbmp_mysql_ha_group.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | # This is an auto-generated Django model module.
4 | # You'll have to do the following manually to clean this up:
5 | # * Rearrange models' order
6 | # * Make sure each model has one field with primary_key=True
7 | # * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
8 | # Feel free to rename the models, but don't rename db_table values or field names.
9 | #
10 | # Also note: You'll have to insert the output of 'django-admin sqlcustom [app_label]'
11 | # into your database.
12 | from __future__ import unicode_literals
13 |
14 | from django.db import models
15 |
16 | class DbmpMysqlHaGroup(models.Model):
17 | mysql_ha_group_id = models.AutoField(primary_key=True)
18 | alias = models.CharField(max_length=40)
19 | remark = models.CharField(max_length=50)
20 | create_time = models.DateTimeField(auto_now_add=True)
21 | update_time = models.DateTimeField(auto_now=True)
22 |
23 | def __unicode__(self):
24 | """Java toString 方法"""
25 | print_str = 'DbmpMysqlHaGroup({alias})'.format(
26 | alias = self.alias)
27 | return print_str
28 |
29 | class Meta:
30 | managed = False
31 | db_table = 'dbmp_mysql_ha_group'
32 |
--------------------------------------------------------------------------------
/dbmp/models/dbmp_mysql_ha_group_detail.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | # This is an auto-generated Django model module.
4 | # You'll have to do the following manually to clean this up:
5 | # * Rearrange models' order
6 | # * Make sure each model has one field with primary_key=True
7 | # * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
8 | # Feel free to rename the models, but don't rename db_table values or field names.
9 | #
10 | # Also note: You'll have to insert the output of 'django-admin sqlcustom [app_label]'
11 | # into your database.
12 | from __future__ import unicode_literals
13 |
14 | from django.db import models
15 |
16 | class DbmpMysqlHaGroupDetail(models.Model):
17 | mysql_ha_group_detail_id = models.AutoField(primary_key=True)
18 | mysql_instance_id = models.IntegerField(unique=True)
19 | mysql_ha_group_id = models.IntegerField()
20 | backup_priority = models.IntegerField()
21 | create_time = models.DateTimeField(auto_now_add=True)
22 | update_time = models.DateTimeField(auto_now=True)
23 |
24 | def __unicode__(self):
25 | """Java toString 方法"""
26 | print_str = 'DbmpMysqlHaGroup({mysql_ha_group_detail_id})'.format(
27 | mysql_ha_group_detail_id = self.mysql_ha_group_detail_id)
28 | return print_str
29 |
30 | class Meta:
31 | managed = False
32 | db_table = 'dbmp_mysql_ha_group_detail'
33 |
--------------------------------------------------------------------------------
/dbmp/models/dbmp_mysql_instance.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | # This is an auto-generated Django model module.
4 | # You'll have to do the following manually to clean this up:
5 | # * Rearrange models' order
6 | # * Make sure each model has one field with primary_key=True
7 | # * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
8 | # Feel free to rename the models, but don't rename db_table values or field names.
9 | #
10 | # Also note: You'll have to insert the output of 'django-admin sqlcustom [app_label]'
11 | # into your database.
12 | from __future__ import unicode_literals
13 |
14 | from django.db import models
15 | from common.model_choices_field_value.field_dbmp_mysql_instance import FieldDbmpMysqlInstance
16 |
17 | class DbmpMysqlInstance(models.Model):
18 | mysql_instance_id = models.AutoField(primary_key=True)
19 | os_id = models.IntegerField()
20 | host = models.IntegerField()
21 | port = models.IntegerField()
22 | username = models.CharField(max_length=50)
23 | password = models.CharField(max_length=200)
24 | run_status = models.IntegerField(choices=FieldDbmpMysqlInstance.run_status())
25 | possible_pid = models.CharField(max_length=100)
26 | remark = models.CharField(max_length=50)
27 | create_time = models.DateTimeField(auto_now_add=True)
28 | update_time = models.DateTimeField(auto_now=True)
29 |
30 | def __unicode__(self):
31 | """Java toString 方法"""
32 | print_str = 'host({host}), port({port}), os_id({os_id})'.format(
33 | host = self.host,
34 | port = self.port,
35 | os_id = self.os_id)
36 | return print_str
37 |
38 | class Meta:
39 | managed = False
40 | db_table = 'dbmp_mysql_instance'
41 | unique_together = (('os_id', 'port'),)
42 |
--------------------------------------------------------------------------------
/dbmp/models/dbmp_mysql_instance_info.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | # This is an auto-generated Django model module.
4 | # You'll have to do the following manually to clean this up:
5 | # * Rearrange models' order
6 | # * Make sure each model has one field with primary_key=True
7 | # * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
8 | # Feel free to rename the models, but don't rename db_table values or field names.
9 | #
10 | # Also note: You'll have to insert the output of 'django-admin sqlcustom [app_label]'
11 | # into your database.
12 | from __future__ import unicode_literals
13 |
14 | from django.db import models
15 |
16 | class DbmpMysqlInstanceInfo(models.Model):
17 | mysql_instance_info_id = models.AutoField(primary_key=True)
18 | mysql_instance_id = models.IntegerField(unique=True)
19 | my_cnf_path = models.CharField(max_length=200)
20 | base_dir = models.CharField(max_length=200)
21 | start_cmd = models.CharField(max_length=200)
22 | create_time = models.DateTimeField(auto_now_add=True)
23 | update_time = models.DateTimeField(auto_now=True)
24 |
25 | def __unicode__(self):
26 | """Java toString 方法"""
27 | print_str = 'DbmpMysqlInstanceInfo({mysql_instance_info_id})'.format(
28 | mysql_instance_info_id = self.mysql_instance_info_id)
29 | return print_str
30 |
31 | class Meta:
32 | managed = False
33 | db_table = 'dbmp_mysql_instance_info'
34 |
--------------------------------------------------------------------------------
/dbmp/templates/dbmp_mysql_business/view.html:
--------------------------------------------------------------------------------
1 | {%extends 'dbmp_base.html' %}
2 |
3 | {% load staticfiles %}
4 |
5 |
6 | {% block css %}
7 |
8 |
9 | {% endblock %}
10 |
11 | {% block app_title %}业务组详细信息{% endblock %}
12 |
13 |
14 | {% block top_element %}
15 |
24 | {% endblock %}
25 |
26 |
27 | {% block content %}
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | 业务组名:
36 | {{ dbmp_mysql_business.name }}
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 | 备注:
45 | {{ dbmp_mysql_business.remark}}
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 | 创建时间:
54 | {{ dbmp_mysql_business.create_time | date:"Y-m-d H:i:s" }}
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 | 更新时间:
63 | {{ dbmp_mysql_business.update_time | date:"Y-m-d H:i:s" }}
64 |
65 |
66 |
67 |
68 |
69 |
78 |
79 |
80 | {% endblock %}
81 |
82 |
83 | {% block js %}
84 |
85 |
86 |
87 |
95 | {% endblock %}
96 |
--------------------------------------------------------------------------------
/dbmp/templates/dbmp_mysql_business_detail/view.html:
--------------------------------------------------------------------------------
1 | {%extends 'dbmp_base.html' %}
2 |
3 | {% load staticfiles %}
4 |
5 |
6 | {% block css %}
7 |
8 |
9 | {% endblock %}
10 |
11 | {% block app_title %}业务组详细信息{% endblock %}
12 |
13 |
14 | {% block top_element %}
15 |
24 | {% endblock %}
25 |
26 |
27 | {% block content %}
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | 业务组名:
36 | {{ dbmp_mysql_business.name }}
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 | 备注:
45 | {{ dbmp_mysql_business.remark}}
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 | 创建时间:
54 | {{ dbmp_mysql_business.create_time | date:"Y-m-d H:i:s" }}
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 | 更新时间:
63 | {{ dbmp_mysql_business.update_time | date:"Y-m-d H:i:s" }}
64 |
65 |
66 |
67 |
68 |
69 |
78 |
79 |
80 | {% endblock %}
81 |
82 |
83 | {% block js %}
84 |
85 |
86 |
87 |
95 | {% endblock %}
96 |
--------------------------------------------------------------------------------
/dbmp/templatetags/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/dbmp/templatetags/__init__.py
--------------------------------------------------------------------------------
/dbmp/templatetags/filters_dbmp_inception_business.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | from django import template
4 | from common.model_choices_field_value.field_dbmp_inception_business import FieldDbmpInceptionBusiness
5 |
6 | register = template.Library()
7 |
8 | @register.filter(name='f_inc_bus_execute_status')
9 | def f_inc_bus_execute_status(num):
10 | """通过数字获得Model的状态值"""
11 | execute_status = dict(FieldDbmpInceptionBusiness.inc_bus_execute_status())
12 |
13 | return execute_status.get(num, '无效状态')
14 |
15 | @register.filter(name='f_inc_bus_execute_status_color')
16 | def f_inc_bus_execute_status_color(num):
17 | """通过数字获得Model的状态值应该显示的颜色"""
18 | execute_status_color = dict(FieldDbmpInceptionBusiness.inc_bus_execute_status_color())
19 |
20 | return execute_status_color.get(num, 'default')
21 |
--------------------------------------------------------------------------------
/dbmp/templatetags/filters_dbmp_inception_business_detail.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | from django import template
4 | from common.model_choices_field_value.field_dbmp_inception_business_detail import FieldDbmpInceptionBusinessDetail
5 |
6 | register = template.Library()
7 |
8 | @register.filter(name='f_inc_bus_det_execute_status')
9 | def f_inc_bus_det_execute_status(num):
10 | """通过数字获得Model的状态值"""
11 | execute_status = dict(FieldDbmpInceptionBusinessDetail.inc_bus_det_execute_status())
12 |
13 | return execute_status.get(num, '无效状态')
14 |
15 | @register.filter(name='f_inc_bus_det_execute_status_color')
16 | def f_inc_bus_det_execute_status_color(num):
17 | """通过数字获得Model的状态值应该显示的颜色"""
18 | execute_status_color = dict(FieldDbmpInceptionBusinessDetail.inc_bus_det_execute_status_color())
19 |
20 | return execute_status_color.get(num, 'default')
21 |
--------------------------------------------------------------------------------
/dbmp/templatetags/filters_dbmp_inception_database.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | from django import template
4 | from common.model_choices_field_value.field_dbmp_inception_database import FieldDbmpInceptionDatabase
5 |
6 | register = template.Library()
7 |
8 | @register.filter(name='f_inc_db_execute_status')
9 | def f_inc_db_execute_status(num):
10 | """通过数字获得Model的状态值"""
11 | execute_status = dict(FieldDbmpInceptionDatabase.inc_db_execute_status())
12 |
13 | return execute_status.get(num, '无效状态')
14 |
15 | @register.filter(name='f_inc_db_execute_status_color')
16 | def f_inc_db_execute_status_color(num):
17 | """通过数字获得Model的状态值应该显示的颜色"""
18 | execute_status_color = dict(FieldDbmpInceptionDatabase.inc_db_execute_status_color())
19 |
20 | return execute_status_color.get(num, 'default')
21 |
--------------------------------------------------------------------------------
/dbmp/templatetags/filters_dbmp_inception_record.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | from django import template
4 | from common.model_choices_field_value.field_dbmp_inception_record import FieldDbmpInceptionRecord
5 |
6 | register = template.Library()
7 |
8 | @register.filter(name='f_inc_rec_execute_status')
9 | def f_inc_rec_execute_status(num):
10 | """通过数字获得Model的状态值"""
11 | execute_status = dict(FieldDbmpInceptionRecord.inc_rec_execute_status())
12 |
13 | return execute_status.get(num, '无效状态')
14 |
15 | @register.filter(name='f_inc_rec_execute_status_color')
16 | def f_inc_rec_execute_status_color(num):
17 | """通过数字获得Model的状态值应该显示的颜色"""
18 | execute_status_color = dict(FieldDbmpInceptionRecord.inc_rec_execute_status_color())
19 |
20 | return execute_status_color.get(num, 'default')
21 |
22 | @register.filter(name='f_inc_rec_inception_target')
23 | def f_inc_rec_inception_target(num):
24 | """通过数字获得Model的状态值"""
25 | inception_target = dict(FieldDbmpInceptionRecord.inc_rec_inception_target())
26 |
27 | return inception_target.get(num, '未知')
28 |
--------------------------------------------------------------------------------
/dbmp/templatetags/filters_dbmp_mysql_backup_instance.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | from django import template
4 | from common.model_choices_field_value.field_dbmp_mysql_backup_instance import FieldDbmpMysqlBackupInstance
5 |
6 | register = template.Library()
7 |
8 | @register.filter(name='f_backup_tool')
9 | def f_backup_tool(num):
10 | """通过数字获得Model的状态值"""
11 | backup_tool = dict(FieldDbmpMysqlBackupInstance.backup_tool())
12 |
13 | return backup_tool.get(num, '未知')
14 |
15 | @register.filter(name='f_backup_type')
16 | def f_backup_type(num):
17 | """通过数字获得Model的状态值"""
18 | backup_type = dict(FieldDbmpMysqlBackupInstance.backup_type())
19 |
20 | return backup_type.get(num, '未知')
21 |
22 | @register.filter(name='f_is_all_instance')
23 | def f_is_all_instance(num):
24 | """通过数字获得Model的状态值"""
25 | is_all_instance = dict(FieldDbmpMysqlBackupInstance.is_all_instance())
26 |
27 | return is_all_instance.get(num, '未知')
28 |
29 | @register.filter(name='f_is_binlog')
30 | def f_is_binlog(num):
31 | """通过数字获得Model的状态值"""
32 | is_binlog = dict(FieldDbmpMysqlBackupInstance.is_binlog())
33 |
34 | return is_binlog.get(num, '未知')
35 |
36 | @register.filter(name='f_is_compress')
37 | def f_is_compress(num):
38 | """通过数字获得Model的状态值"""
39 | is_compress = dict(FieldDbmpMysqlBackupInstance.is_compress())
40 |
41 | return is_compress.get(num, '未知')
42 |
43 | @register.filter(name='f_is_to_remote')
44 | def f_is_to_remote(num):
45 | """通过数字获得Model的状态值"""
46 | is_to_remote = dict(FieldDbmpMysqlBackupInstance.is_to_remote())
47 |
48 | return is_to_remote.get(num, '未知')
49 |
--------------------------------------------------------------------------------
/dbmp/templatetags/filters_dbmp_mysql_instance.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | from django import template
4 | from common.util.ip_tool import IpTool
5 | from common.model_choices_field_value.field_dbmp_mysql_instance import FieldDbmpMysqlInstance
6 |
7 | register = template.Library()
8 |
9 | @register.filter(name='f_run_status')
10 | def f_run_status(num):
11 | """通过数字获得Model的状态值"""
12 | run_status = dict(FieldDbmpMysqlInstance.run_status())
13 |
14 | return run_status.get(num, '无效状态')
15 |
16 | @register.filter(name='f_run_status_color')
17 | def f_run_status_color(num):
18 | """通过数字获得Model的状态值应该显示的颜色"""
19 | run_status_color = dict(FieldDbmpMysqlInstance.run_status_color())
20 |
21 | return run_status_color.get(num, 'default')
22 |
--------------------------------------------------------------------------------
/dbmp/templatetags/ip_filters.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | from django import template
4 | from common.util.ip_tool import IpTool
5 |
6 | register = template.Library()
7 |
8 | @register.filter(name='f_ip2num')
9 | def f_ip2num(ip):
10 | return IpTool.ip2num(ip)
11 |
12 | @register.filter(name='f_num2ip')
13 | def f_num2ip(num):
14 | return IpTool.num2ip(num)
15 |
16 |
17 |
--------------------------------------------------------------------------------
/dbmp/tests.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 |
3 | # Create your tests here.
4 |
--------------------------------------------------------------------------------
/dbmp/views/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/dbmp/views/__init__.py
--------------------------------------------------------------------------------
/dbmp/views/forms/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/dbmp/views/forms/__init__.py
--------------------------------------------------------------------------------
/dbmp/views/forms/form_dbmp_mysql_business.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | from django import forms
4 |
5 | class EditForm(forms.Form):
6 | mysql_business_id = forms.IntegerField(required = True, min_value = 0,
7 | error_messages = {'required': '找不到业务组', 'invalid': '不合法业务组'})
8 | name = forms.CharField(required = True, min_length = 1, max_length = 50,
9 | error_messages = {'required': '业务组名称不能为空', 'invalid': '业务组名称长度范围应该1到50'})
10 | remark = forms.CharField(required = True, min_length = 1, max_length = 200,
11 | error_messages = {'required': '业务组备注不能为空', 'invalid': '业务组备注长度范围应该1到200'})
12 |
13 | class AddForm(forms.Form):
14 | name = forms.CharField(required = True, min_length = 1, max_length = 50,
15 | error_messages = {'required': '业务组名称不能为空', 'invalid': '业务组名称长度范围应该1到50'})
16 | remark = forms.CharField(required = True, min_length = 1, max_length = 200,
17 | error_messages = {'required': '业务组备注不能为空', 'invalid': '业务组备注长度范围应该1到200'})
18 |
--------------------------------------------------------------------------------
/dbmp/views/forms/form_dbmp_mysql_instance.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | from django import forms
4 |
5 | class EditForm(forms.Form):
6 | mysql_instance_id = forms.IntegerField(required = True, min_value = 0,
7 | error_messages = {'required': '找不到MySQL实例', 'invalid': '不合法MySQL实例'})
8 | os_id = forms.IntegerField(required = True, min_value = 0,
9 | error_messages = {'required': '找不到MySQL实例对应的OS', 'invalid': '不合法的OS信息'})
10 | host = forms.GenericIPAddressField(required = True,
11 | error_messages = {'required': 'MySQL Host 不能为空', 'invalid': '您输出的 MySQL Host 不符合IP的规范'})
12 | port = forms.IntegerField(required = True, min_value = 1025, max_value = 65535,
13 | error_messages = {'required': 'MySQL Port 不能为空', 'invalid': 'Port 的范围应该1025到65535'})
14 | username = forms.CharField(required = True, min_length = 1, max_length = 200,
15 | error_messages = {'required': 'MySQL 用户名不能为空', 'invalid': 'MySQL 用户名长度范围应该1到200'})
16 | password = forms.CharField(required = True, min_length = 5, max_length = 200,
17 | error_messages = {'required': 'MySQL 用户密码不能为空', 'invalid': 'MySQL 用户密码长度范围应该1到200'})
18 | remark = forms.CharField(required = False, max_length = 200,
19 | error_messages = {'invalid': 'MySQL 备注长度范围应该1到200'})
20 | my_cnf_path = forms.CharField(required = True, min_length = 5, max_length = 200,
21 | error_messages = {'required': 'MySQL 配置文件路径不能为空', 'invalid': 'MySQL 配置文件路径长度范围应该1到200'})
22 | base_dir = forms.CharField(required = True, min_length = 5, max_length = 200,
23 | error_messages = {'required': 'MySQL 软件路径(base_dir)不能为空', 'invalid': 'MySQL 软件路径(base_dir)长度范围应该1到200'})
24 | start_cmd = forms.CharField(required = True, min_length = 5, max_length = 200,
25 | error_messages = {'required': 'MySQL 启动命令不能为空', 'invalid': 'MySQL 启动命令长度范围应该1到200'})
26 |
27 | mysql_instance_info_id = forms.IntegerField(required=False)
28 |
29 | class AddForm(forms.Form):
30 | os_id = forms.IntegerField(required = True, min_value = 0,
31 | error_messages = {'required': '找不到MySQL实例对应的OS', 'invalid': '不合法的OS信息'})
32 | host = forms.GenericIPAddressField(required = True,
33 | error_messages = {'required': 'MySQL Host 不能为空', 'invalid': '您输出的 MySQL Host 不符合IP的规范'})
34 | port = forms.IntegerField(required = True, min_value = 1025, max_value = 65535,
35 | error_messages = {'required': 'MySQL Port 不能为空', 'invalid': 'Port 的范围应该1025到65535'})
36 | username = forms.CharField(required = True, min_length = 1, max_length = 200,
37 | error_messages = {'required': 'MySQL 用户名不能为空', 'invalid': 'MySQL 用户名长度范围应该1到200'})
38 | password = forms.CharField(required = True, min_length = 5, max_length = 200,
39 | error_messages = {'required': 'MySQL 用户密码不能为空', 'invalid': 'MySQL 用户密码长度范围应该1到200'})
40 | remark = forms.CharField(required = False, max_length = 200,
41 | error_messages = {'invalid': 'MySQL 备注长度范围应该1到200'})
42 | my_cnf_path = forms.CharField(required = True, min_length = 5, max_length = 200,
43 | error_messages = {'required': 'MySQL 配置文件路径不能为空', 'invalid': 'MySQL 配置文件路径长度范围应该1到200'})
44 | base_dir = forms.CharField(required = True, min_length = 5, max_length = 200,
45 | error_messages = {'required': 'MySQL 软件路径(base_dir)不能为空', 'invalid': 'MySQL 软件路径(base_dir)长度范围应该1到200'})
46 | start_cmd = forms.CharField(required = True, min_length = 5, max_length = 200,
47 | error_messages = {'required': 'MySQL 启动命令不能为空', 'invalid': 'MySQL 启动命令长度范围应该1到200'})
48 | mysql_instance_info_id = forms.IntegerField(required=False)
49 |
50 |
--------------------------------------------------------------------------------
/dbmp/views/sql_handler/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/dbmp/views/sql_handler/__init__.py
--------------------------------------------------------------------------------
/dbmp/views/sql_handler/s_dbmp_inception_business.py:
--------------------------------------------------------------------------------
1 | #-*- coding:utf-8 -*-
2 |
3 | from django.db import connection
4 |
5 | class SQLDbmpInceptionBusiness(object):
6 |
7 | def __ini__(self):
8 | pass
9 |
10 | def get_business_by_id(self, inception_business_id):
11 | """获得审核业务组信息"""
12 | if not inception_business_id:
13 | return None
14 |
15 | sql = """
16 | SELECT dib.inception_business_id,
17 | dib.inception_record_id,
18 | dib.mysql_business_id,
19 | dib.execute_status,
20 | dmb.name
21 | FROM dbmp_inception_business AS dib
22 | INNER JOIN dbmp_mysql_business AS dmb
23 | ON dib.mysql_business_id = dmb.mysql_business_id
24 | AND dib.inception_business_id = {inception_business_id}
25 | """.format(inception_business_id = inception_business_id)
26 |
27 | cursor = connection.cursor()
28 | cursor.execute(sql)
29 | results = self._dict_fetchone(cursor)
30 | return results
31 |
32 | def get_business_by_id_2(self, inception_business_id):
33 | """获得审核业务组信息"""
34 | if not inception_business_id:
35 | return None
36 |
37 | sql = """
38 | SELECT dib.inception_business_id,
39 | dib.inception_record_id,
40 | dib.mysql_business_id,
41 | dib.execute_status,
42 | dir.sql_text,
43 | dir.tag,
44 | dir.remark,
45 | dir.charset,
46 | dmb.name
47 | FROM dbmp_inception_business AS dib
48 | INNER JOIN dbmp_inception_record AS dir
49 | ON dib.inception_record_id = dir.inception_record_id
50 | AND dib.inception_business_id = {inception_business_id}
51 | INNER JOIN dbmp_mysql_business AS dmb
52 | ON dib.mysql_business_id = dmb.mysql_business_id
53 | """.format(inception_business_id = inception_business_id)
54 |
55 | cursor = connection.cursor()
56 | cursor.execute(sql)
57 | results = self._dict_fetchone(cursor)
58 | return results
59 |
60 | def find_businesses_by_inception_record_id(self, inception_record_id):
61 | """获得审核数据库信息"""
62 | if not inception_record_id:
63 | return None
64 |
65 | sql = """
66 | SELECT dib.inception_business_id,
67 | dib.inception_record_id,
68 | dib.mysql_business_id,
69 | dib.execute_status,
70 | dmb.name,
71 | dmb.remark
72 | FROM dbmp_inception_business AS dib
73 | INNER JOIN dbmp_mysql_business AS dmb
74 | ON dib.mysql_business_id = dmb.mysql_business_id
75 | AND dib.inception_record_id = {inception_record_id}
76 | """.format(inception_record_id = inception_record_id)
77 |
78 | cursor = connection.cursor()
79 | cursor.execute(sql)
80 | results = self._dict_fetchall(cursor)
81 | return results
82 |
83 | def _dict_fetchone(self, cursor):
84 | "转化所有的行为dict"
85 | columns = [col[0] for col in cursor.description]
86 | return dict(zip(columns, cursor.fetchone()))
87 |
88 | def _dict_fetchall(self, cursor):
89 | "转化所有的行为dict"
90 | columns = [col[0] for col in cursor.description]
91 | return [
92 | dict(zip(columns, row))
93 | for row in cursor.fetchall()
94 | ]
95 |
--------------------------------------------------------------------------------
/dbmp/views/sql_handler/s_dbmp_mysql_business_detail.py:
--------------------------------------------------------------------------------
1 | #-*- coding:utf-8 -*-
2 |
3 | from django.db import connection
4 |
5 | class SQLDbmpMysqlBusinessDetail(object):
6 |
7 | def get_business_detail_index(self, mysql_business_id):
8 | """获得MySQL 业务Detail index 页面的信息"""
9 | if not mysql_business_id:
10 | return None
11 |
12 | sql = """
13 | SELECT dmb.mysql_business_id AS mysql_business_id,
14 | dmbd.mysql_business_detail_id AS mysql_business_detail_id,
15 | dmb.name AS business_name,
16 | dmb.remark AS business_remark,
17 | dmd.name AS database_name,
18 | INET_NTOA(dmi.host) AS instance_host,
19 | dmi.port AS instance_port,
20 | dmi.remark AS instance_remark
21 | FROM dbmp_mysql_business AS dmb
22 | INNER JOIN dbmp_mysql_business_detail AS dmbd
23 | ON dmb.mysql_business_id = dmbd.mysql_business_id
24 | AND dmb.mysql_business_id = {mysql_business_id}
25 | INNER JOIN dbmp_mysql_database AS dmd
26 | ON dmbd.mysql_database_id = dmd.mysql_database_id
27 | INNER JOIN dbmp_mysql_instance AS dmi
28 | ON dmd.mysql_instance_id = dmi.mysql_instance_id
29 | """.format(mysql_business_id = mysql_business_id)
30 |
31 | cursor = connection.cursor()
32 | cursor.execute(sql)
33 | results = self._dict_fetchall(cursor)
34 | return results
35 |
36 | def get_business_detail_by_id(self, mysql_business_detail_id):
37 | """通过mysql_business_detail_id(主键) 获得MysqlBusinessDetail数据"""
38 |
39 | if not mysql_business_detail_id:
40 | return None
41 |
42 | sql = """
43 | SELECT dmb.mysql_business_id AS mysql_business_id,
44 | dmbd.mysql_business_detail_id AS mysql_business_detail_id,
45 | dmb.name AS business_name,
46 | dmb.remark AS business_remark,
47 | dmd.name AS database_name,
48 | INET_NTOA(dmi.host) AS instance_host,
49 | dmi.port AS instance_port,
50 | dmi.remark AS instance_remark
51 | FROM dbmp_mysql_business AS dmb
52 | INNER JOIN dbmp_mysql_business_detail AS dmbd
53 | ON dmb.mysql_business_id = dmbd.mysql_business_id
54 | AND dmbd.mysql_business_detail_id = {mysql_business_detail_id}
55 | INNER JOIN dbmp_mysql_database AS dmd
56 | ON dmbd.mysql_database_id = dmd.mysql_database_id
57 | INNER JOIN dbmp_mysql_instance AS dmi
58 | ON dmd.mysql_instance_id = dmi.mysql_instance_id
59 | """.format(mysql_business_detail_id = mysql_business_detail_id)
60 |
61 | cursor = connection.cursor()
62 | cursor.execute(sql)
63 | results = self._dict_fetchone(cursor)
64 | return results
65 |
66 | def _dict_fetchone(self, cursor):
67 | "转化所有的行为dict"
68 | columns = [col[0] for col in cursor.description]
69 | return dict(zip(columns, cursor.fetchone()))
70 |
71 | def _dict_fetchall(self, cursor):
72 | "转化所有的行为dict"
73 | columns = [col[0] for col in cursor.description]
74 | return [
75 | dict(zip(columns, row))
76 | for row in cursor.fetchall()
77 | ]
78 |
--------------------------------------------------------------------------------
/dbmp/views/v_dbmp_inception_instance.py:
--------------------------------------------------------------------------------
1 | #-*- coding: utf-8 -*-
2 |
3 | from django.shortcuts import render
4 | from django.http import HttpResponse
5 | from dbmp.models.dbmp_inception_instance import DbmpInceptionInstance
6 |
7 | import simplejson as json
8 | import traceback
9 | import logging
10 |
11 | logger = logging.getLogger('default')
12 |
13 | # Create your views here.
14 |
15 | def ajax_get_all(request):
16 | """ajax 获得所有的 Inception 实例"""
17 |
18 | if request.method == 'POST':
19 | try:
20 | # 查找所有的 Inception 实例
21 | dbmp_inception_instances = DbmpInceptionInstance.objects.values(
22 | 'inception_instance_id',
23 | 'alias').all()
24 | print dbmp_inception_instances
25 | respons_data = json.dumps(list(dbmp_inception_instances))
26 | return HttpResponse(respons_data, content_type='application/json')
27 | except Exception, e:
28 | logger.info(traceback.format_exc())
29 |
--------------------------------------------------------------------------------
/logs/default.log:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/logs/default.log
--------------------------------------------------------------------------------
/manage.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | import os
3 | import sys
4 |
5 | if __name__ == "__main__":
6 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "archer_dbmp.settings")
7 |
8 | from django.core.management import execute_from_command_line
9 |
10 | execute_from_command_line(sys.argv)
11 |
--------------------------------------------------------------------------------
/sql/alter_2016-07-25.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE dbmp_mysql_instance
2 | ADD run_status TINYINT NOT NULL DEFAULT 1
3 | COMMENT 'MySQL运行状态:1、停止,2、运行中,3、未知' AFTER password;
4 |
--------------------------------------------------------------------------------
/sql/alter_2016-07-27.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE dbmp_mysql_instance
2 | MODIFY `username` varchar(50) NOT NULL DEFAULT '' COMMENT '管理MySQL用户名';
3 |
4 | ALTER TABLE dbmp_mysql_instance_info
5 | ADD start_cmd VARCHAR(200) NOT NULL DEFAULT '' COMMENT '启动MySQL命令' AFTER my_cnf_path,
6 | ADD base_dir VARCHAR(200) NOT NULL DEFAULT '' COMMENT 'MySQL软件目录' AFTER my_cnf_path;
7 |
8 | UPDATE dbmp_mysql_instance_info
9 | SET start_cmd = '/bin/bash /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my_3306.cnf > /dev/null 2>&1 &',
10 | base_dir = '/usr/local/mysql';
11 |
12 | ALTER TABLE dbmp_mysql_instance_info
13 | ADD UNIQUE KEY udx$mysql_instance_id(mysql_instance_id);
14 |
--------------------------------------------------------------------------------
/sql/alter_2016-08-01.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE dbmp_mysql_instance_info DROP INDEX idx$mysql_instance_id;
2 |
--------------------------------------------------------------------------------
/sql/alter_2016-08-07.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE dbmp_mysql_instance
2 | MODIFY `run_status` tinyint(4) NOT NULL DEFAULT '1'
3 | COMMENT 'MySQL运行状态:1、停止,2、运行中,3、未知,4、正在关闭,5、正在启动';
4 |
5 | ALTER TABLE dbmp_mysql_instance
6 | ADD possible_pid VARCHAR(100) NOT NULL DEFAULT ''
7 | COMMENT 'MySQL可能运行的PID' AFTER run_status;
8 |
--------------------------------------------------------------------------------
/sql/alter_2016-09-05.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE dbmp_mysql_backup_remote
2 | ADD mysql_backup_instance_id INT unsigned NOT NULL COMMENT '备份实例ID' AFTER mysql_backup_remote_id,
3 | ADD UNIQUE INDEX udx$mysql_backup_instance_id(mysql_backup_instance_id);
4 |
--------------------------------------------------------------------------------
/sql/alter_2016-09-18.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE dbmp_mysql_database(
2 | mysql_database_id INT unsigned NOT NULL AUTO_INCREMENT COMMENT 'MySQL数据库ID',
3 | mysql_instance_id int(10) unsigned NOT NULL COMMENT 'MySQL实例ID',
4 | name varchar(50) NOT NULL DEFAULT '' COMMENT 'MySQL数据库名称',
5 | create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
6 | update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
7 | PRIMARY KEY (mysql_database_id),
8 | INDEX idx$mysql_instance_id(mysql_instance_id)
9 | )COMMENT='MySQL数据库实例';
10 |
--------------------------------------------------------------------------------
/sql/alter_2016-09-21.sql:
--------------------------------------------------------------------------------
1 | DROP TABLE dbmp_mysql_business_group;
2 | CREATE TABLE dbmp_mysql_business(
3 | `mysql_business_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '业务组ID',
4 | `name` varchar(50) NOT NULL DEFAULT '' COMMENT '业务名称',
5 | `remark` varchar(200) NOT NULL DEFAULT '' COMMENT '备注',
6 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
7 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
8 | PRIMARY KEY (`mysql_business_id`),
9 | UNIQUE KEY udx$name(name)
10 | )COMMENT='MySQL业务库,主要记录表结构相同的数据库';
11 |
12 | CREATE TABLE dbmp_mysql_business_detail(
13 | mysql_business_detail_id INT unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
14 | mysql_business_id int(10) unsigned NOT NULL COMMENT '业务组ID',
15 | mysql_database_id int(10) unsigned NOT NULL COMMENT 'MySQL数据库ID',
16 | create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
17 | update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
18 | PRIMARY KEY (`mysql_business_detail_id`),
19 | KEY idx$mysql_business_id(mysql_business_id),
20 | KEY idx$mysql_database_id(mysql_database_id)
21 | )COMMENT='记录着业务相关表结构相同的数据库';
22 |
--------------------------------------------------------------------------------
/sql/alter_2016-09-28.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE dbmp_mysql_business_detail
2 | ADD UNIQUE INDEX udx$mysql_business_database_id(mysql_business_id, mysql_database_id),
3 | DROP INDEX idx$mysql_business_id,
4 | DROP INDEX idx$mysql_database_id;
5 |
--------------------------------------------------------------------------------
/sql/alter_2016-10-08.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE dbmp_inception_instance(
2 | inception_instance_id INT unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
3 | host int(10) unsigned NOT NULL DEFAULT '0' COMMENT '链接Inception HOST',
4 | port int(10) unsigned NOT NULL DEFAULT '0' COMMENT '链接Inception PORT',
5 | alias VARCHAR(50) NOT NULL DEFAULT '' COMMENT '别名',
6 | create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
7 | update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
8 | PRIMARY KEY (inception_instance_id),
9 | UNIQUE INDEX udx$host_port(host, port)
10 | )COMMENT='Inception实例';
11 |
12 | CREATE TABLE dbmp_inception_record(
13 | inception_record_id INT unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
14 | inception_instance_id INT unsigned NOT NULL COMMENT 'Inception 实例ID',
15 | is_remote_backup TINYINT NOT NULL DEFAULT 0 COMMENT '执行前是否进行备份:0否 1是',
16 | tag VARCHAR(20) NOT NULL DEFAULT '' COMMENT '用于标记该审核语句的特点',
17 | remark VARCHAR(200) NOT NULL DEFAULT '' COMMENT '该语句的备注说明',
18 | sql_text TEXT DEFAULT NULL COMMENT '审核是SQL语句',
19 | create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
20 | update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
21 | PRIMARY KEY(inception_record_id),
22 | INDEX idx$inception_instance_id(inception_instance_id)
23 | )COMMENT='需要审核的记录';
24 |
25 | INSERT INTO dbmp_inception_instance VALUES(NULL, INET_ATON('127.0.0.1'), 6669, '测试Inception', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP());
26 |
--------------------------------------------------------------------------------
/sql/alter_2016-10-11.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE dbmp_inception_record
2 | ADD inception_target TINYINT NOT NULL DEFAULT 1
3 | COMMENT 'SQL审核对象:1仅数据库 2仅业务组 3混合'
4 | AFTER is_remote_backup,
5 | ADD charset VARCHAR(20) NOT NULL DEFAULT '' COMMENT '字符集',
6 | MODIFY is_remote_backup tinyint(4) NOT NULL DEFAULT '1'
7 | COMMENT '执行前是否进行备份:0否 1是';
8 |
9 | CREATE TABLE dbmp_inception_database(
10 | inception_database_id INT unsigned NOT NULL AUTO_INCREMENT COMMENT '需要执行审核的SQL ID',
11 | inception_record_id int(10) unsigned NOT NULL COMMENT 'MySQL数据库ID',
12 | mysql_database_id int(10) unsigned NOT NULL COMMENT 'MySQL实例ID',
13 | execute_status TINYINT NOT NULL DEFAULT 1 COMMENT '执行状态: 1未执行 2执行成功 3执行失败',
14 | create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
15 | update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
16 | PRIMARY KEY(inception_database_id),
17 | UNIQUE INDEX udx$record_database(inception_record_id, mysql_database_id)
18 | ) COMMENT ='需要执行审核的SQL';
19 |
--------------------------------------------------------------------------------
/sql/alter_2016-10-12.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE dbmp_inception_database
2 | MODIFY `inception_record_id` int(10) unsigned NOT NULL COMMENT '审核记录ID',
3 | MODIFY `mysql_database_id` int(10) unsigned NOT NULL COMMENT '数据库ID';
4 |
5 | CREATE TABLE dbmp_inception_business(
6 | inception_business_id INT unsigned NOT NULL AUTO_INCREMENT COMMENT 'SQL审核业务组ID',
7 | inception_record_id int(10) unsigned NOT NULL COMMENT '审核记录ID',
8 | mysql_business_id int(10) unsigned NOT NULL COMMENT '业务组ID',
9 | execute_status tinyint(4) NOT NULL DEFAULT '1' COMMENT '执行状态: 1未执行 2执行成功 3执行失败 4部分执行失败',
10 | create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
11 | update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
12 | PRIMARY KEY(inception_business_id),
13 | UNIQUE INDEX udx$record_business_id(inception_record_id, mysql_business_id),
14 | INDEX idx$mysql_business_id(mysql_business_id)
15 | )COMMENT = 'SQL审核业务组';
16 |
17 | CREATE TABLE dbmp_inception_business_detail(
18 | inception_business_id INT unsigned NOT NULL AUTO_INCREMENT COMMENT 'SQL审核业务组ID',
19 | inception_record_id int(10) unsigned NOT NULL COMMENT '审核记录ID',
20 | mysql_business_id int(10) unsigned NOT NULL COMMENT '业务组ID',
21 | mysql_database_id int(10) unsigned NOT NULL COMMENT '数据库ID',
22 | execute_status tinyint(4) NOT NULL DEFAULT '1' COMMENT '执行状态: 1未执行 2执行成功 3执行失败 4部分执行失败',
23 | create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
24 | update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
25 | PRIMARY KEY(inception_business_id),
26 | UNIQUE INDEX udx$record_business_id(inception_record_id, mysql_database_id),
27 | INDEX idx$mysql_business_id(mysql_business_id),
28 | INDEX idx$mysql_database_id(mysql_database_id)
29 | )COMMENT = 'SQL审核业务组明细';
30 |
--------------------------------------------------------------------------------
/sql/alter_2016-10-18.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE dbmp_inception_database
2 | MODIFY `execute_status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '执行状态: 1未执行 2执行成功 3执行失败';
3 |
4 | ALTER TABLE dbmp_inception_business
5 | MODIFY `execute_status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '执行状态: 1未执行 2执行成功 3执行失败 4部分失败';
6 |
7 | ALTER TABLE dbmp_inception_business_detail
8 | MODIFY `execute_status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '执行状态: 1未执行 2执行成功 3执行失败';
9 |
--------------------------------------------------------------------------------
/sql/generate.txt:
--------------------------------------------------------------------------------
1 | # 更新语句
2 | mysqldump \
3 | -h192.168.1.233 \
4 | -P3306 \
5 | -uHH \
6 | -poracle \
7 | --set-gtid-purged=OFF \
8 | --no-data \
9 | my_free > my_free_schema.sql
10 |
11 | python manage.py inspectdb > models.py
12 |
--------------------------------------------------------------------------------
/static/404.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | H+ 后台主题UI框架 - 404 页面
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
404
27 |
页面未找到!
28 |
29 |
30 | 抱歉,页面好像去火星了~
31 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/static/500.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | H+ 后台主题UI框架 - 500错误
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
500
27 |
服务器内部错误
28 |
29 |
30 | 服务器好像出错了...
31 |
您可以返回主页看看
32 |
主页
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/static/README.md:
--------------------------------------------------------------------------------
1 | ## 静态文件
2 | 域名:static.archer.xin
--------------------------------------------------------------------------------
/static/css/bootstrap-duallistbox.css:
--------------------------------------------------------------------------------
1 | .bootstrap-duallistbox-container .buttons {
2 | width: 100%;
3 | margin-bottom: -1px;
4 | }
5 |
6 | .bootstrap-duallistbox-container label {
7 | display: block;
8 | }
9 |
10 | .bootstrap-duallistbox-container .info {
11 | display: inline-block;
12 | margin-bottom: 5px;
13 | font-size: 11px;
14 | }
15 |
16 | .bootstrap-duallistbox-container .clear1,
17 | .bootstrap-duallistbox-container .clear2 {
18 | display: none;
19 | font-size: 10px;
20 | }
21 |
22 | .bootstrap-duallistbox-container .box1.filtered .clear1,
23 | .bootstrap-duallistbox-container .box2.filtered .clear2 {
24 | display: inline-block;
25 | }
26 |
27 | .bootstrap-duallistbox-container .move,
28 | .bootstrap-duallistbox-container .remove {
29 | width: 60%;
30 | }
31 |
32 | .bootstrap-duallistbox-container .btn-group .btn {
33 | border-bottom-left-radius: 0;
34 | border-bottom-right-radius: 0;
35 | }
36 | .bootstrap-duallistbox-container select {
37 | border-top-left-radius: 0;
38 | border-top-right-radius: 0;
39 | }
40 |
41 | .bootstrap-duallistbox-container .moveall,
42 | .bootstrap-duallistbox-container .removeall {
43 | width: 40%;
44 | }
45 |
46 | .bootstrap-duallistbox-container.bs2compatible .btn-group > .btn + .btn {
47 | margin-left: 0;
48 | }
49 |
50 | .bootstrap-duallistbox-container select {
51 | width: 100%;
52 | height: 300px;
53 | padding: 0;
54 | }
55 |
56 | .bootstrap-duallistbox-container .filter {
57 | display: inline-block;
58 | width: 100%;
59 | height: 31px;
60 | margin: 0 0 5px 0;
61 | -webkit-box-sizing: border-box;
62 | -moz-box-sizing: border-box;
63 | box-sizing: border-box;
64 | }
65 |
66 | .bootstrap-duallistbox-container .filter.placeholder {
67 | color: #aaa;
68 | }
69 |
70 | .bootstrap-duallistbox-container.moveonselect .move,
71 | .bootstrap-duallistbox-container.moveonselect .remove {
72 | display:none;
73 | }
74 |
75 | .bootstrap-duallistbox-container.moveonselect .moveall,
76 | .bootstrap-duallistbox-container.moveonselect .removeall {
77 | width: 100%;
78 | }
79 |
--------------------------------------------------------------------------------
/static/css/login.min.css:
--------------------------------------------------------------------------------
1 | html{height:100%}body.signin{height:auto;background:url(../img/login-background.jpg) no-repeat center fixed;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;color:rgba(255,255,255,.95)}.signinpanel{width:750px;margin:10% auto 0}.signinpanel .logopanel{float:none;width:auto;padding:0;background:0 0}.signinpanel .signin-info ul{list-style:none;padding:0;margin:20px 0}.signinpanel .form-control{display:block;margin-top:15px}.signinpanel .uname{background:#fff url(../img/user.png) no-repeat 95% center;color:#333}.signinpanel .pword{background:#fff url(../img/locked.png) no-repeat 95% center;color:#333}.signinpanel .btn{margin-top:15px}.signinpanel form{background:rgba(255,255,255,.2);border:1px solid rgba(255,255,255,.3);-moz-box-shadow:0 3px 0 rgba(12,12,12,.03);-webkit-box-shadow:0 3px 0 rgba(12,12,12,.03);box-shadow:0 3px 0 rgba(12,12,12,.03);-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:30px}.signup-footer{border-top:solid 1px rgba(255,255,255,.3);margin:20px 0;padding-top:15px}@media screen and (max-width:768px){.signinpanel,.signuppanel{margin:0 auto;width:420px!important;padding:20px}.signinpanel form{margin-top:20px}.signup-footer,.signuppanel .form-control{margin-bottom:10px}.signup-footer .pull-left,.signup-footer .pull-right{float:none!important;text-align:center}.signinpanel .signin-info ul{display:none}}@media screen and (max-width:320px){.signinpanel,.signuppanel{margin:0 20px;width:auto}}
2 |
--------------------------------------------------------------------------------
/static/css/patterns/header-profile-skin-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/css/patterns/header-profile-skin-1.png
--------------------------------------------------------------------------------
/static/css/patterns/header-profile-skin-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/css/patterns/header-profile-skin-3.png
--------------------------------------------------------------------------------
/static/css/patterns/header-profile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/css/patterns/header-profile.png
--------------------------------------------------------------------------------
/static/css/patterns/shattered.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/css/patterns/shattered.png
--------------------------------------------------------------------------------
/static/css/plugins/blueimp/img/error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/css/plugins/blueimp/img/error.png
--------------------------------------------------------------------------------
/static/css/plugins/blueimp/img/error.svg:
--------------------------------------------------------------------------------
1 |
2 |
6 |
--------------------------------------------------------------------------------
/static/css/plugins/blueimp/img/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/css/plugins/blueimp/img/loading.gif
--------------------------------------------------------------------------------
/static/css/plugins/blueimp/img/play-pause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/css/plugins/blueimp/img/play-pause.png
--------------------------------------------------------------------------------
/static/css/plugins/blueimp/img/play-pause.svg:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/static/css/plugins/blueimp/img/video-play.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/css/plugins/blueimp/img/video-play.png
--------------------------------------------------------------------------------
/static/css/plugins/blueimp/img/video-play.svg:
--------------------------------------------------------------------------------
1 |
2 |
6 |
--------------------------------------------------------------------------------
/static/css/plugins/bootstrapvalidator/bootstrapValidator.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * BootstrapValidator (http://bootstrapvalidator.com)
3 | * The best jQuery plugin to validate form fields. Designed to use with Bootstrap 3
4 | *
5 | * @version v0.5.3, built on 2014-11-05 9:14:18 PM
6 | * @author https://twitter.com/nghuuphuoc
7 | * @copyright (c) 2013 - 2014 Nguyen Huu Phuoc
8 | * @license Commercial: http://bootstrapvalidator.com/license/
9 | * Non-commercial: http://creativecommons.org/licenses/by-nc-nd/3.0/
10 | */
11 |
12 | .bv-form .help-block{margin-bottom:0}.bv-form .tooltip-inner{text-align:left}.nav-tabs li.bv-tab-success>a{color:#3c763d}.nav-tabs li.bv-tab-error>a{color:#a94442}.bv-form .bv-icon-no-label{top:0}.bv-form .bv-icon-input-group{top:0;z-index:100}
--------------------------------------------------------------------------------
/static/css/plugins/chosen/chosen-sprite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/css/plugins/chosen/chosen-sprite.png
--------------------------------------------------------------------------------
/static/css/plugins/chosen/chosen-sprite@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/css/plugins/chosen/chosen-sprite@2x.png
--------------------------------------------------------------------------------
/static/css/plugins/colorpicker/css/bootstrap-colorpicker.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap Colorpicker
3 | * http://mjolnic.github.io/bootstrap-colorpicker/
4 | *
5 | * Originally written by (c) 2012 Stefan Petre
6 | * Licensed under the Apache License v2.0
7 | * http://www.apache.org/licenses/LICENSE-2.0.txt
8 | *
9 | */.colorpicker-saturation{float:left;width:100px;height:100px;cursor:crosshair;background-image:url("../img/bootstrap-colorpicker/saturation.png")}.colorpicker-saturation i{position:absolute;top:0;left:0;display:block;width:5px;height:5px;margin:-4px 0 0 -4px;border:1px solid #000;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.colorpicker-saturation i b{display:block;width:5px;height:5px;border:1px solid #fff;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.colorpicker-hue,.colorpicker-alpha{float:left;width:15px;height:100px;margin-bottom:4px;margin-left:4px;cursor:row-resize}.colorpicker-hue i,.colorpicker-alpha i{position:absolute;top:0;left:0;display:block;width:100%;height:1px;margin-top:-1px;background:#000;border-top:1px solid #fff}.colorpicker-hue{background-image:url("../img/bootstrap-colorpicker/hue.png")}.colorpicker-alpha{display:none;background-image:url("../img/bootstrap-colorpicker/alpha.png")}.colorpicker{top:0;left:0;z-index:25000!important;min-width:130px;padding:4px;margin-top:1px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1}.colorpicker:before,.colorpicker:after{display:table;line-height:0;content:""}.colorpicker:after{clear:both}.colorpicker:before{position:absolute;top:-7px;left:6px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.colorpicker:after{position:absolute;top:-6px;left:7px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.colorpicker div{position:relative}.colorpicker.colorpicker-with-alpha{min-width:140px}.colorpicker.colorpicker-with-alpha .colorpicker-alpha{display:block}.colorpicker-color{height:10px;margin-top:5px;clear:both;background-image:url("../img/bootstrap-colorpicker/alpha.png");background-position:0 100%}.colorpicker-color div{height:10px}.colorpicker-element .input-group-addon i,.colorpicker-element .add-on i{display:inline-block;width:16px;height:16px;vertical-align:text-top;cursor:pointer}.colorpicker.colorpicker-inline{position:relative;z-index:auto;display:inline-block;float:none}.colorpicker.colorpicker-horizontal{width:110px;height:auto;min-width:110px}.colorpicker.colorpicker-horizontal .colorpicker-saturation{margin-bottom:4px}.colorpicker.colorpicker-horizontal .colorpicker-color{width:100px}.colorpicker.colorpicker-horizontal .colorpicker-hue,.colorpicker.colorpicker-horizontal .colorpicker-alpha{float:left;width:100px;height:15px;margin-bottom:4px;margin-left:0;cursor:col-resize}.colorpicker.colorpicker-horizontal .colorpicker-hue i,.colorpicker.colorpicker-horizontal .colorpicker-alpha i{position:absolute;top:0;left:0;display:block;width:1px;height:15px;margin-top:0;background:#fff;border:0}.colorpicker.colorpicker-horizontal .colorpicker-hue{background-image:url("../img/bootstrap-colorpicker/hue-horizontal.png")}.colorpicker.colorpicker-horizontal .colorpicker-alpha{background-image:url("../img/bootstrap-colorpicker/alpha-horizontal.png")}.colorpicker.colorpicker-hidden{display:none}.colorpicker.colorpicker-visible{display:block}.colorpicker-inline.colorpicker-visible{display:inline-block}
10 |
--------------------------------------------------------------------------------
/static/css/plugins/colorpicker/img/bootstrap-colorpicker/alpha-horizontal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/css/plugins/colorpicker/img/bootstrap-colorpicker/alpha-horizontal.png
--------------------------------------------------------------------------------
/static/css/plugins/colorpicker/img/bootstrap-colorpicker/alpha.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/css/plugins/colorpicker/img/bootstrap-colorpicker/alpha.png
--------------------------------------------------------------------------------
/static/css/plugins/colorpicker/img/bootstrap-colorpicker/hue-horizontal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/css/plugins/colorpicker/img/bootstrap-colorpicker/hue-horizontal.png
--------------------------------------------------------------------------------
/static/css/plugins/colorpicker/img/bootstrap-colorpicker/hue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/css/plugins/colorpicker/img/bootstrap-colorpicker/hue.png
--------------------------------------------------------------------------------
/static/css/plugins/colorpicker/img/bootstrap-colorpicker/saturation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/css/plugins/colorpicker/img/bootstrap-colorpicker/saturation.png
--------------------------------------------------------------------------------
/static/css/plugins/cropper/cropper.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Cropper v0.7.6-beta
3 | * https://github.com/fengyuanchen/cropper
4 | *
5 | * Copyright 2014 Fengyuan Chen
6 | * Released under the MIT license
7 | */
8 |
9 | .cropper-container{position:relative;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}.cropper-container img{width:100%;height:100%;min-width:0!important;min-height:0!important;max-width:none!important;max-height:none!important}.cropper-modal,.cropper-canvas{position:absolute;top:0;right:0;bottom:0;left:0}.cropper-canvas{background-color:#fff;opacity:0;filter:alpha(opacity=0)}.cropper-modal{background-color:#000;opacity:.5;filter:alpha(opacity=50)}.cropper-dragger{position:absolute;top:10%;left:10%;width:80%;height:80%}.cropper-viewer{display:block;width:100%;height:100%;overflow:hidden;outline-width:1px;outline-style:solid;outline-color:#69f;outline-color:rgba(51,102,255,.75)}.cropper-dashed{position:absolute;display:block;border:0 dashed #fff;opacity:.5;filter:alpha(opacity=50)}.cropper-dashed.dashed-h{top:33.3%;left:0;width:100%;height:33.3%;border-top-width:1px;border-bottom-width:1px}.cropper-dashed.dashed-v{top:0;left:33.3%;width:33.3%;height:100%;border-right-width:1px;border-left-width:1px}.cropper-face,.cropper-line,.cropper-point{position:absolute;display:block;width:100%;height:100%;opacity:.1;filter:alpha(opacity=10)}.cropper-face{top:0;left:0;cursor:move;background-color:#fff}.cropper-line{background-color:#69f}.cropper-line.line-e{top:0;right:-3px;width:5px;cursor:e-resize}.cropper-line.line-n{top:-3px;left:0;height:5px;cursor:n-resize}.cropper-line.line-w{top:0;left:-3px;width:5px;cursor:w-resize}.cropper-line.line-s{bottom:-3px;left:0;height:5px;cursor:s-resize}.cropper-point{width:5px;height:5px;background-color:#69f;opacity:.75;filter:alpha(opacity=75)}.cropper-point.point-e{top:50%;right:-3px;margin-top:-3px;cursor:e-resize}.cropper-point.point-n{top:-3px;left:50%;margin-left:-3px;cursor:n-resize}.cropper-point.point-w{top:50%;left:-3px;margin-top:-3px;cursor:w-resize}.cropper-point.point-s{bottom:-3px;left:50%;margin-left:-3px;cursor:s-resize}.cropper-point.point-ne{top:-3px;right:-3px;cursor:ne-resize}.cropper-point.point-nw{top:-3px;left:-3px;cursor:nw-resize}.cropper-point.point-sw{bottom:-3px;left:-3px;cursor:sw-resize}.cropper-point.point-se{right:-3px;bottom:-3px;width:20px;height:20px;cursor:se-resize;opacity:1;filter:alpha(opacity=100)}.cropper-point.point-se:before{position:absolute;right:-50%;bottom:-50%;display:block;width:200%;height:200%;content:" ";background-color:#69f;opacity:0;filter:alpha(opacity=0)}@media (min-width:768px){.cropper-point.point-se{width:15px;height:15px}}@media (min-width:992px){.cropper-point.point-se{width:10px;height:10px}}@media (min-width:1200px){.cropper-point.point-se{width:5px;height:5px;opacity:.75;filter:alpha(opacity=75)}}.cropper-hidden{display:none!important}.cropper-invisible{position:fixed;top:0;left:0;z-index:-1;width:auto!important;max-width:none!important;height:auto!important;max-height:none!important;opacity:0;filter:alpha(opacity=0)}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-canvas,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed}
10 |
--------------------------------------------------------------------------------
/static/css/plugins/footable/fonts/footable.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/css/plugins/footable/fonts/footable.eot
--------------------------------------------------------------------------------
/static/css/plugins/footable/fonts/footable.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/css/plugins/footable/fonts/footable.ttf
--------------------------------------------------------------------------------
/static/css/plugins/footable/fonts/footable.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/css/plugins/footable/fonts/footable.woff
--------------------------------------------------------------------------------
/static/css/plugins/footable/fonts/footabled41d.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/css/plugins/footable/fonts/footabled41d.eot
--------------------------------------------------------------------------------
/static/css/plugins/fullcalendar/fullcalendar.print.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * FullCalendar v1.6.4 Print Stylesheet
3 | * Docs & License: http://arshaw.com/fullcalendar/
4 | * (c) 2013 Adam Shaw
5 | */
6 |
7 | /*
8 | * Include this stylesheet on your page to get a more printer-friendly calendar.
9 | * When including this stylesheet, use the media='print' attribute of the tag.
10 | * Make sure to include this stylesheet IN ADDITION to the regular fullcalendar.css.
11 | */
12 |
13 |
14 | /* Events
15 | -----------------------------------------------------*/
16 |
17 | .fc-event {
18 | background: #fff !important;
19 | color: #000 !important;
20 | }
21 |
22 | /* for vertical events */
23 |
24 | .fc-event-bg {
25 | display: none !important;
26 | }
27 |
28 | .fc-event .ui-resizable-handle {
29 | display: none !important;
30 | }
31 |
32 |
33 |
--------------------------------------------------------------------------------
/static/css/plugins/iCheck/custom.css:
--------------------------------------------------------------------------------
1 | /* iCheck plugin Square skin, green
2 | ----------------------------------- */
3 | .icheckbox_square-green,
4 | .iradio_square-green {
5 | display: inline-block;
6 | *display: inline;
7 | vertical-align: middle;
8 | margin: 0;
9 | padding: 0;
10 | width: 22px;
11 | height: 22px;
12 | background: url(green.png) no-repeat;
13 | border: none;
14 | cursor: pointer;
15 | }
16 |
17 | .icheckbox_square-green {
18 | background-position: 0 0;
19 | }
20 | .icheckbox_square-green.hover {
21 | background-position: -24px 0;
22 | }
23 | .icheckbox_square-green.checked {
24 | background-position: -48px 0;
25 | }
26 | .icheckbox_square-green.disabled {
27 | background-position: -72px 0;
28 | cursor: default;
29 | }
30 | .icheckbox_square-green.checked.disabled {
31 | background-position: -96px 0;
32 | }
33 |
34 | .iradio_square-green {
35 | background-position: -120px 0;
36 | }
37 | .iradio_square-green.hover {
38 | background-position: -144px 0;
39 | }
40 | .iradio_square-green.checked {
41 | background-position: -168px 0;
42 | }
43 | .iradio_square-green.disabled {
44 | background-position: -192px 0;
45 | cursor: default;
46 | }
47 | .iradio_square-green.checked.disabled {
48 | background-position: -216px 0;
49 | }
50 |
51 | /* HiDPI support */
52 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) {
53 | .icheckbox_square-green,
54 | .iradio_square-green {
55 | background-image: url(green%402x.png);
56 | -webkit-background-size: 240px 24px;
57 | background-size: 240px 24px;
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/static/css/plugins/iCheck/green.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/css/plugins/iCheck/green.png
--------------------------------------------------------------------------------
/static/css/plugins/iCheck/green@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/css/plugins/iCheck/green@2x.png
--------------------------------------------------------------------------------
/static/css/plugins/images/sort_asc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/css/plugins/images/sort_asc.png
--------------------------------------------------------------------------------
/static/css/plugins/images/sort_desc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/css/plugins/images/sort_desc.png
--------------------------------------------------------------------------------
/static/css/plugins/images/sprite-skin-flat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/css/plugins/images/sprite-skin-flat.png
--------------------------------------------------------------------------------
/static/css/plugins/images/spritemap.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/css/plugins/images/spritemap.png
--------------------------------------------------------------------------------
/static/css/plugins/images/spritemap@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/css/plugins/images/spritemap@2x.png
--------------------------------------------------------------------------------
/static/css/plugins/ionRangeSlider/ion.rangeSlider.skinFlat.css:
--------------------------------------------------------------------------------
1 | /* Ion.RangeSlider, Flat UI Skin
2 | // css version 1.8.5
3 | // by Denis Ineshin | ionden.com
4 | // ===================================================================================================================*/
5 |
6 | /* =====================================================================================================================
7 | // Skin details */
8 |
9 | .irs-line-mid,
10 | .irs-line-left,
11 | .irs-line-right,
12 | .irs-diapason,
13 | .irs-slider {
14 | background: url(../images/sprite-skin-flat.png) repeat-x;
15 | }
16 |
17 | .irs {
18 | height: 40px;
19 | }
20 | .irs-with-grid {
21 | height: 60px;
22 | }
23 | .irs-line {
24 | height: 12px; top: 25px;
25 | }
26 | .irs-line-left {
27 | height: 12px;
28 | background-position: 0 -30px;
29 | }
30 | .irs-line-mid {
31 | height: 12px;
32 | background-position: 0 0;
33 | }
34 | .irs-line-right {
35 | height: 12px;
36 | background-position: 100% -30px;
37 | }
38 |
39 | .irs-diapason {
40 | height: 12px; top: 25px;
41 | background-position: 0 -60px;
42 | }
43 |
44 | .irs-slider {
45 | width: 16px; height: 18px;
46 | top: 22px;
47 | background-position: 0 -90px;
48 | }
49 | #irs-active-slider, .irs-slider:hover {
50 | background-position: 0 -120px;
51 | }
52 |
53 | .irs-min, .irs-max {
54 | color: #999;
55 | font-size: 10px; line-height: 1.333;
56 | text-shadow: none;
57 | top: 0; padding: 1px 3px;
58 | background: #e1e4e9;
59 | border-radius: 4px;
60 | }
61 |
62 | .irs-from, .irs-to, .irs-single {
63 | color: #fff;
64 | font-size: 10px; line-height: 1.333;
65 | text-shadow: none;
66 | padding: 1px 5px;
67 | background: #ed5565;
68 | border-radius: 4px;
69 | }
70 | .irs-from:after, .irs-to:after, .irs-single:after {
71 | position: absolute; display: block; content: "";
72 | bottom: -6px; left: 50%;
73 | width: 0; height: 0;
74 | margin-left: -3px;
75 | overflow: hidden;
76 | border: 3px solid transparent;
77 | border-top-color: #ed5565;
78 | }
79 |
80 |
81 | .irs-grid-pol {
82 | background: #e1e4e9;
83 | }
84 | .irs-grid-text {
85 | color: #999;
86 | }
87 |
88 | .irs-disabled {
89 | }
90 |
--------------------------------------------------------------------------------
/static/css/plugins/markdown/bootstrap-markdown.min.css:
--------------------------------------------------------------------------------
1 | .md-editor{display:block;border:1px solid #ddd}.md-editor .md-footer,.md-editor>.md-header{display:block;padding:6px 4px;background:#f5f5f5}.md-editor>.md-header{margin:0}.md-editor>.md-preview{background:#fff;border-top:1px dashed #ddd;border-bottom:1px dashed #ddd;min-height:10px;overflow:auto}.md-editor>textarea{font-family:Menlo, Monaco, Consolas, "Courier New", monospace;font-size:14px;outline:0;margin:0;display:block;padding:15px;width:100%;border:0;border-top:1px dashed #ddd;border-bottom:1px dashed #ddd;border-radius:0;box-shadow:none;background:#fafafa}.md-editor>textarea:focus{box-shadow:none;background:#fff}.md-editor.active{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6)}.md-editor .md-controls{float:right;padding:3px}.md-editor .md-controls .md-control{right:5px;color:#bebebe;padding:3px 3px 3px 10px}.md-editor .md-controls .md-control:hover{color:#333}.md-editor.md-fullscreen-mode{width:100%;height:100%;position:fixed;top:0;left:0;z-index:99999;padding:60px 30px 15px;background:#fff!important;border:0!important}.md-editor.md-fullscreen-mode .md-footer{display:none}.md-editor.md-fullscreen-mode .md-input,.md-editor.md-fullscreen-mode .md-preview{margin:0 auto!important;height:100%!important;font-size:20px!important;padding:20px!important;color:#999;line-height:1.6em!important;resize:none!important;box-shadow:none!important;background:#fff!important;border:0!important}.md-editor.md-fullscreen-mode .md-preview{color:#333;overflow:auto}.md-editor.md-fullscreen-mode .md-input:focus,.md-editor.md-fullscreen-mode .md-input:hover{color:#333;background:#fff!important}.md-editor.md-fullscreen-mode .md-header{background:0 0;text-align:center;position:fixed;width:100%;top:20px}.md-editor.md-fullscreen-mode .btn-group{float:none}.md-editor.md-fullscreen-mode .btn{border:0;background:0 0;color:#b3b3b3}.md-editor.md-fullscreen-mode .btn.active,.md-editor.md-fullscreen-mode .btn:active,.md-editor.md-fullscreen-mode .btn:focus,.md-editor.md-fullscreen-mode .btn:hover{box-shadow:none;color:#333}.md-editor.md-fullscreen-mode .md-fullscreen-controls{position:absolute;top:20px;right:20px;text-align:right;z-index:1002;display:block}.md-editor.md-fullscreen-mode .md-fullscreen-controls a{color:#b3b3b3;clear:right;margin:10px;width:30px;height:30px;text-align:center}.md-editor.md-fullscreen-mode .md-fullscreen-controls a:hover{color:#333;text-decoration:none}.md-editor.md-fullscreen-mode .md-editor{height:100%!important;position:relative}.md-editor .md-fullscreen-controls{display:none}.md-nooverflow{overflow:hidden;position:fixed;width:100%}
2 |
--------------------------------------------------------------------------------
/static/css/plugins/morris/morris-0.4.3.min.css:
--------------------------------------------------------------------------------
1 | .morris-hover{position:absolute;z-index:1000;}.morris-hover.morris-default-style{border-radius:10px;padding:6px;color:#666;background:rgba(255, 255, 255, 0.8);border:solid 2px rgba(230, 230, 230, 0.8);font-family:sans-serif;font-size:12px;text-align:center;}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:bold;margin:0.25em 0;}
2 | .morris-hover.morris-default-style .morris-hover-point{white-space:nowrap;margin:0.1em 0;}
3 |
--------------------------------------------------------------------------------
/static/css/plugins/switchery/switchery.css:
--------------------------------------------------------------------------------
1 | /*
2 | *
3 | * Main stylesheet for Switchery.
4 | * http://abpetkov.github.io/switchery/
5 | *
6 | */
7 |
8 | .switchery {
9 | background-color: #fff;
10 | border: 1px solid #dfdfdf;
11 | border-radius: 20px;
12 | cursor: pointer;
13 | display: inline-block;
14 | height: 30px;
15 | position: relative;
16 | vertical-align: middle;
17 | width: 50px;
18 |
19 | -webkit-box-sizing: content-box;
20 | -moz-box-sizing: content-box;
21 | box-sizing: content-box;
22 | }
23 |
24 | .switchery > small {
25 | background: #fff;
26 | border-radius: 100%;
27 | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
28 | height: 30px;
29 | position: absolute;
30 | top: 0;
31 | width: 30px;
32 | }
33 |
--------------------------------------------------------------------------------
/static/css/plugins/treeview/bootstrap-treeview.css:
--------------------------------------------------------------------------------
1 | /* =========================================================
2 | * bootstrap-treeview.css v1.0.0
3 | * =========================================================
4 | * Copyright 2013 Jonathan Miles
5 | * Project URL : http://www.jondmiles.com/bootstrap-treeview
6 | *
7 | * Licensed under the Apache License, Version 2.0 (the "License");
8 | * you may not use this file except in compliance with the License.
9 | * You may obtain a copy of the License at
10 | *
11 | * http://www.apache.org/licenses/LICENSE-2.0
12 | *
13 | * Unless required by applicable law or agreed to in writing, software
14 | * distributed under the License is distributed on an "AS IS" BASIS,
15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 | * See the License for the specific language governing permissions and
17 | * limitations under the License.
18 | * ========================================================= */
19 |
20 | .list-group-item {
21 | cursor: pointer;
22 | }
23 |
24 | /*.list-group-item:hover {
25 | background-color: #f5f5f5;
26 | }*/
27 |
28 | span.indent {
29 | margin-left: 10px;
30 | margin-right: 10px;
31 | }
32 |
33 | span.icon {
34 | margin-right: 5px;
35 | }
36 |
--------------------------------------------------------------------------------
/static/css/plugins/webuploader/webuploader.css:
--------------------------------------------------------------------------------
1 | .webuploader-container {
2 | position: relative;
3 | }
4 | .webuploader-element-invisible {
5 | position: absolute !important;
6 | clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
7 | clip: rect(1px,1px,1px,1px);
8 | }
9 | .webuploader-pick {
10 | position: relative;
11 | display: inline-block;
12 | cursor: pointer;
13 | background: #00b7ee;
14 | padding: 10px 15px;
15 | color: #fff;
16 | text-align: center;
17 | border-radius: 3px;
18 | overflow: hidden;
19 | }
20 | .webuploader-pick-hover {
21 | background: #00a2d4;
22 | }
23 |
24 | .webuploader-pick-disable {
25 | opacity: 0.6;
26 | pointer-events:none;
27 | }
28 |
29 |
--------------------------------------------------------------------------------
/static/empty_page.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | H+ 后台主题UI框架 - 空白页
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
标题
28 |
29 | -
30 | 主页
31 |
32 | -
33 | 包屑导航
34 |
35 |
36 |
37 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
这里是页面内容
49 |
50 |
51 | 您可以在这里添加栅格,参考首页及其他页面完成不同的布局
52 |
打开主页
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/static/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/favicon.ico
--------------------------------------------------------------------------------
/static/fonts/fontawesome-webfont93e3.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/fonts/fontawesome-webfont93e3.eot
--------------------------------------------------------------------------------
/static/fonts/fontawesome-webfont93e3.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/fonts/fontawesome-webfont93e3.ttf
--------------------------------------------------------------------------------
/static/fonts/fontawesome-webfont93e3.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/fonts/fontawesome-webfont93e3.woff
--------------------------------------------------------------------------------
/static/fonts/fontawesome-webfont93e3.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/fonts/fontawesome-webfont93e3.woff2
--------------------------------------------------------------------------------
/static/fonts/fontawesome-webfontd41d.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/fonts/fontawesome-webfontd41d.eot
--------------------------------------------------------------------------------
/static/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/static/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/static/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/static/fonts/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/fonts/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/static/fonts/glyphicons-halflings-regulard41d.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/fonts/glyphicons-halflings-regulard41d.eot
--------------------------------------------------------------------------------
/static/img/a1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/a1.jpg
--------------------------------------------------------------------------------
/static/img/a2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/a2.jpg
--------------------------------------------------------------------------------
/static/img/a3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/a3.jpg
--------------------------------------------------------------------------------
/static/img/a4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/a4.jpg
--------------------------------------------------------------------------------
/static/img/a5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/a5.jpg
--------------------------------------------------------------------------------
/static/img/a6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/a6.jpg
--------------------------------------------------------------------------------
/static/img/a7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/a7.jpg
--------------------------------------------------------------------------------
/static/img/a8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/a8.jpg
--------------------------------------------------------------------------------
/static/img/a9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/a9.jpg
--------------------------------------------------------------------------------
/static/img/bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/bg.png
--------------------------------------------------------------------------------
/static/img/iconfont-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/iconfont-logo.png
--------------------------------------------------------------------------------
/static/img/icons.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/icons.png
--------------------------------------------------------------------------------
/static/img/index.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/index.jpg
--------------------------------------------------------------------------------
/static/img/index_4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/index_4.jpg
--------------------------------------------------------------------------------
/static/img/loading-upload.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/loading-upload.gif
--------------------------------------------------------------------------------
/static/img/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/loading.gif
--------------------------------------------------------------------------------
/static/img/locked.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/locked.png
--------------------------------------------------------------------------------
/static/img/login-background.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/login-background.jpg
--------------------------------------------------------------------------------
/static/img/p1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/p1.jpg
--------------------------------------------------------------------------------
/static/img/p2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/p2.jpg
--------------------------------------------------------------------------------
/static/img/p3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/p3.jpg
--------------------------------------------------------------------------------
/static/img/p_big1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/p_big1.jpg
--------------------------------------------------------------------------------
/static/img/p_big2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/p_big2.jpg
--------------------------------------------------------------------------------
/static/img/p_big3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/p_big3.jpg
--------------------------------------------------------------------------------
/static/img/pay.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/pay.png
--------------------------------------------------------------------------------
/static/img/profile.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/profile.jpg
--------------------------------------------------------------------------------
/static/img/profile_big.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/profile_big.jpg
--------------------------------------------------------------------------------
/static/img/profile_small.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/profile_small.jpg
--------------------------------------------------------------------------------
/static/img/progress.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/progress.png
--------------------------------------------------------------------------------
/static/img/qr_code.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/qr_code.png
--------------------------------------------------------------------------------
/static/img/success.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/success.png
--------------------------------------------------------------------------------
/static/img/user.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/user.png
--------------------------------------------------------------------------------
/static/img/wenku_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/img/wenku_logo.png
--------------------------------------------------------------------------------
/static/js/content.min.js:
--------------------------------------------------------------------------------
1 | function $childNode(o){return window.frames[o]}function animationHover(o,e){o=$(o),o.hover(function(){o.addClass("animated "+e)},function(){window.setTimeout(function(){o.removeClass("animated "+e)},2e3)})}function WinMove(){var o="[class*=col]",e=".ibox-title",i="[class*=col]";$(o).sortable({handle:e,connectWith:i,tolerance:"pointer",forcePlaceholderSize:!0,opacity:.8}).disableSelection()}var $parentNode=window.parent.document;if($(".tooltip-demo").tooltip({selector:"[data-toggle=tooltip]",container:"body"}),$(".modal").appendTo("body"),$("[data-toggle=popover]").popover(),$(".collapse-link").click(function(){var o=$(this).closest("div.ibox"),e=$(this).find("i"),i=o.find("div.ibox-content");i.slideToggle(200),e.toggleClass("fa-chevron-up").toggleClass("fa-chevron-down"),o.toggleClass("").toggleClass("border-bottom"),setTimeout(function(){o.resize(),o.find("[id^=map-]").resize()},50)}),$(".close-link").click(function(){var o=$(this).closest("div.ibox");o.remove()}),top==this){var gohome='';$("body").append(gohome)}
2 |
--------------------------------------------------------------------------------
/static/js/demo/bootstrap-table-demo.min.js:
--------------------------------------------------------------------------------
1 | function cellStyle(e,t,o){var n=["active","success","info","warning","danger"];return o%2===0&&o/2t?1:t>e?-1:0}function nameFormatter(e){return e+' '}function starsFormatter(e){return' '+e}function queryParams(){return{type:"owner",sort:"updated",direction:"desc",per_page:100,page:1}}function buildTable(e,t,o){var n,l,s,a=[],c=[];for(n=0;t>n;n++)a.push({field:"字段"+n,title:"单元"+n});for(n=0;o>n;n++){for(s={},l=0;t>l;l++)s["字段"+l]="Row-"+n+"-"+l;c.push(s)}e.bootstrapTable("destroy").bootstrapTable({columns:a,data:c,iconSize:"outline",icons:{columns:"glyphicon-list"}})}!function(e,t,o){"use strict";!function(){var e=[{Tid:"1",First:"奔波儿灞",sex:"男",Score:"50"},{Tid:"2",First:"灞波儿奔",sex:"男",Score:"94"},{Tid:"3",First:"作家崔成浩",sex:"男",Score:"80"},{Tid:"4",First:"韩寒",sex:"男",Score:"67"},{Tid:"5",First:"郭敬明",sex:"男",Score:"100"},{Tid:"6",First:"马云",sex:"男",Score:"77"},{Tid:"7",First:"范爷",sex:"女",Score:"87"}];o("#exampleTableFromData").bootstrapTable({data:e,height:"250"})}(),function(){o("#exampleTableColumns").bootstrapTable({url:"js/demo/bootstrap_table_test.json",height:"400",iconSize:"outline",showColumns:!0,icons:{refresh:"glyphicon-repeat",toggle:"glyphicon-list-alt",columns:"glyphicon-list"}})}(),buildTable(o("#exampleTableLargeColumns"),50,50),function(){o("#exampleTableToolbar").bootstrapTable({url:"js/demo/bootstrap_table_test2.json",search:!0,showRefresh:!0,showToggle:!0,showColumns:!0,toolbar:"#exampleToolbar",iconSize:"outline",icons:{refresh:"glyphicon-repeat",toggle:"glyphicon-list-alt",columns:"glyphicon-list"}})}(),function(){o("#exampleTableEvents").bootstrapTable({url:"js/demo/bootstrap_table_test.json",search:!0,pagination:!0,showRefresh:!0,showToggle:!0,showColumns:!0,iconSize:"outline",toolbar:"#exampleTableEventsToolbar",icons:{refresh:"glyphicon-repeat",toggle:"glyphicon-list-alt",columns:"glyphicon-list"}});var e=o("#examplebtTableEventsResult");o("#exampleTableEvents").on("all.bs.table",function(e,t,o){console.log("Event:",t,", data:",o)}).on("click-row.bs.table",function(){e.text("Event: click-row.bs.table")}).on("dbl-click-row.bs.table",function(){e.text("Event: dbl-click-row.bs.table")}).on("sort.bs.table",function(){e.text("Event: sort.bs.table")}).on("check.bs.table",function(){e.text("Event: check.bs.table")}).on("uncheck.bs.table",function(){e.text("Event: uncheck.bs.table")}).on("check-all.bs.table",function(){e.text("Event: check-all.bs.table")}).on("uncheck-all.bs.table",function(){e.text("Event: uncheck-all.bs.table")}).on("load-success.bs.table",function(){e.text("Event: load-success.bs.table")}).on("load-error.bs.table",function(){e.text("Event: load-error.bs.table")}).on("column-switch.bs.table",function(){e.text("Event: column-switch.bs.table")}).on("page-change.bs.table",function(){e.text("Event: page-change.bs.table")}).on("search.bs.table",function(){e.text("Event: search.bs.table")})}()}(document,window,jQuery);
2 |
--------------------------------------------------------------------------------
/static/js/demo/form-validate-demo.min.js:
--------------------------------------------------------------------------------
1 | $.validator.setDefaults({highlight:function(e){$(e).closest(".form-group").removeClass("has-success").addClass("has-error")},success:function(e){e.closest(".form-group").removeClass("has-error").addClass("has-success")},errorElement:"span",errorPlacement:function(e,r){e.appendTo(r.is(":radio")||r.is(":checkbox")?r.parent().parent().parent():r.parent())},errorClass:"help-block m-b-none",validClass:"help-block m-b-none"}),$().ready(function(){$("#commentForm").validate();var e=" ";$("#signupForm").validate({rules:{firstname:"required",lastname:"required",username:{required:!0,minlength:2},password:{required:!0,minlength:5},confirm_password:{required:!0,minlength:5,equalTo:"#password"},email:{required:!0,email:!0},topic:{required:"#newsletter:checked",minlength:2},agree:"required"},messages:{firstname:e+"请输入你的姓",lastname:e+"请输入您的名字",username:{required:e+"请输入您的用户名",minlength:e+"用户名必须两个字符以上"},password:{required:e+"请输入您的密码",minlength:e+"密码必须5个字符以上"},confirm_password:{required:e+"请再次输入密码",minlength:e+"密码必须5个字符以上",equalTo:e+"两次输入的密码不一致"},email:e+"请输入您的E-mail",agree:{required:e+"必须同意协议后才能注册",element:"#agree-error"}}}),$("#username").focus(function(){var e=$("#firstname").val(),r=$("#lastname").val();e&&r&&!this.value&&(this.value=e+"."+r)})});
2 |
--------------------------------------------------------------------------------
/static/js/demo/layer-demo.min.js:
--------------------------------------------------------------------------------
1 | !function(){var e={htdy:$("html, body")};e.demo1=$("#demo1"),$("#chutiyan>a").on("click",function(){var t=$(this),a=t.index(),r=e.demo1.children("p").eq(a),n=r.position().top;switch(e.demo1.animate({scrollTop:e.demo1.scrollTop()+n},0),a){case 0:var o=-1;!function s(){var e=parent.layer.alert("点击确认更换图标",{icon:o,shadeClose:!0,title:-1===o?"初体验":"icon:"+o},s);8===++o&&layer.close(e)}();break;case 1:var o=0;!function p(){parent.layer.alert("点击确认更换图标",{icon:o,shadeClose:!0,skin:"layer-ext-moon",shift:5,title:-1===o?"第三方扩展皮肤":"icon:"+o},p);9===++o&&parent.layer.confirm("怎么样,是否很喜欢该皮肤,去下载?",{skin:"layer-ext-moon"},function(e,t){t.find(".layui-layer-btn0").attr({href:"http://layer.layui.com/skin.html",target:"_blank"}),parent.layer.close(e)})}();break;case 6:parent.layer.open({type:1,area:["420px","240px"],skin:"layui-layer-rim",content:'即直接给content传入html字符
当内容宽高超过定义宽高,会自动出现滚动条。
很高兴在下面遇见你
'});break;case 7:parent.layer.open({type:1,skin:"layui-layer-demo",closeBtn:!1,area:"350px",shift:2,shadeClose:!0,content:'即传入skin:"样式名",然后你就可以为所欲为了。
你怎么样给她整容都行
我是华丽的酱油==。
'});break;case 8:layer.tips("Hi,我是tips",this);break;case 11:var i=parent.layer.load(0,{shade:!1});setTimeout(function(){parent.layer.close(i)},5e3);break;case 12:var l=parent.layer.load(1,{shade:[.1,"#fff"]});setTimeout(function(){parent.layer.close(l)},3e3);break;case 13:layer.tips("我是另外一个tips,只不过我长得跟之前那位稍有些不一样。",this,{tips:[1,"#3595CC"],time:4e3});break;case 14:parent.layer.prompt({title:"输入任何口令,并确认",formType:1},function(e){parent.layer.prompt({title:"随便写点啥,并确认",formType:2},function(t){parent.layer.msg("演示完毕!您的口令:"+e+"
您最后写下了:"+t)})});break;case 15:parent.layer.tab({area:["600px","300px"],tab:[{title:"无题",content:'欢迎体验layer.tab
此时此刻不禁让人吟诗一首:
一入前端深似海
从此妹纸是浮云
以下省略七个字
。。。。。。。
——贤心
'},{title:"TAB2",content:'TAB2该说些啥
'},{title:"TAB3",content:'有一种坚持叫:layer
'}]});break;case 16:e.photoJSON?layer.photos({photos:e.photoJSON}):$.getJSON("js/demo/photos.json?v=",function(t){e.photoJSON=t,layer.photos({photos:t})});break;default:new Function(r.text())()}})}();
2 |
--------------------------------------------------------------------------------
/static/js/demo/morris-demo.min.js:
--------------------------------------------------------------------------------
1 | $(function(){Morris.Line({element:"morris-one-line-chart",data:[{year:"2008",value:5},{year:"2009",value:10},{year:"2010",value:8},{year:"2011",value:22},{year:"2012",value:8},{year:"2014",value:10},{year:"2015",value:5}],xkey:"year",ykeys:["value"],resize:!0,lineWidth:4,labels:["Value"],lineColors:["#1ab394"],pointSize:5}),Morris.Area({element:"morris-area-chart",data:[{period:"2010 Q1",iphone:2666,ipad:null,itouch:2647},{period:"2010 Q2",iphone:2778,ipad:2294,itouch:2441},{period:"2010 Q3",iphone:4912,ipad:1969,itouch:2501},{period:"2010 Q4",iphone:3767,ipad:3597,itouch:5689},{period:"2011 Q1",iphone:6810,ipad:1914,itouch:2293},{period:"2011 Q2",iphone:5670,ipad:4293,itouch:1881},{period:"2011 Q3",iphone:4820,ipad:3795,itouch:1588},{period:"2011 Q4",iphone:15073,ipad:5967,itouch:5175},{period:"2012 Q1",iphone:10687,ipad:4460,itouch:2028},{period:"2012 Q2",iphone:8432,ipad:5713,itouch:1791}],xkey:"period",ykeys:["iphone","ipad","itouch"],labels:["iPhone","iPad","iPod Touch"],pointSize:2,hideHover:"auto",resize:!0,lineColors:["#87d6c6","#54cdb4","#1ab394"],lineWidth:2,pointSize:1}),Morris.Donut({element:"morris-donut-chart",data:[{label:"A系列",value:12},{label:"B系列",value:30},{label:"C系列",value:20}],resize:!0,colors:["#87d6c6","#54cdb4","#1ab394"]}),Morris.Bar({element:"morris-bar-chart",data:[{y:"2006",a:60,b:50},{y:"2007",a:75,b:65},{y:"2008",a:50,b:40},{y:"2009",a:75,b:65},{y:"2010",a:50,b:40},{y:"2011",a:75,b:65},{y:"2012",a:100,b:90}],xkey:"y",ykeys:["a","b"],labels:["A系列","B系列"],hideHover:"auto",resize:!0,barColors:["#1ab394","#cacaca"]}),Morris.Line({element:"morris-line-chart",data:[{y:"2006",a:100,b:90},{y:"2007",a:75,b:65},{y:"2008",a:50,b:40},{y:"2009",a:75,b:65},{y:"2010",a:50,b:40},{y:"2011",a:75,b:65},{y:"2012",a:100,b:90}],xkey:"y",ykeys:["a","b"],labels:["A系列","B系列"],hideHover:"auto",resize:!0,lineColors:["#54cdb4","#1ab394"]})});
2 |
--------------------------------------------------------------------------------
/static/js/demo/peity-demo.min.js:
--------------------------------------------------------------------------------
1 | $(function(){$("span.pie").peity("pie",{fill:["#1ab394","#d7d7d7","#ffffff"]}),$(".line").peity("line",{fill:"#1ab394",stroke:"#169c81"}),$(".bar").peity("bar",{fill:["#1ab394","#d7d7d7"]}),$(".bar_dashboard").peity("bar",{fill:["#1ab394","#d7d7d7"],width:100});var i=$(".updating-chart").peity("line",{fill:"#1ab394",stroke:"#169c81",width:64});setInterval(function(){var t=Math.round(10*Math.random()),a=i.text().split(",");a.shift(),a.push(t),i.text(a.join(",")).change()},1e3)});
2 |
--------------------------------------------------------------------------------
/static/js/demo/rickshaw-demo.min.js:
--------------------------------------------------------------------------------
1 | $(function(){var e=new Rickshaw.Graph({element:document.querySelector("#chart"),series:[{color:"#1ab394",data:[{x:0,y:40},{x:1,y:49},{x:2,y:38},{x:3,y:30},{x:4,y:32}]}]});e.render();var r=new Rickshaw.Graph({element:document.querySelector("#rickshaw_multi"),renderer:"area",stroke:!0,series:[{data:[{x:0,y:40},{x:1,y:49},{x:2,y:38},{x:3,y:20},{x:4,y:16}],color:"#1ab394",stroke:"#17997f"},{data:[{x:0,y:22},{x:1,y:25},{x:2,y:38},{x:3,y:44},{x:4,y:46}],color:"#eeeeee",stroke:"#d7d7d7"}]});r.renderer.unstack=!0,r.render();var a=new Rickshaw.Graph({element:document.querySelector("#rickshaw_line"),renderer:"line",series:[{data:[{x:0,y:40},{x:1,y:49},{x:2,y:38},{x:3,y:30},{x:4,y:32}],color:"#1ab394"}]});a.render();var y=new Rickshaw.Graph({element:document.querySelector("#rickshaw_multi_line"),renderer:"line",series:[{data:[{x:0,y:40},{x:1,y:49},{x:2,y:38},{x:3,y:30},{x:4,y:32}],color:"#1ab394"},{data:[{x:0,y:20},{x:1,y:24},{x:2,y:19},{x:3,y:15},{x:4,y:16}],color:"#d7d7d7"}]});y.render();var x=new Rickshaw.Graph({element:document.querySelector("#rickshaw_bars"),renderer:"bar",series:[{data:[{x:0,y:40},{x:1,y:49},{x:2,y:38},{x:3,y:30},{x:4,y:32}],color:"#1ab394"}]});x.render();var t=new Rickshaw.Graph({element:document.querySelector("#rickshaw_bars_stacked"),renderer:"bar",series:[{data:[{x:0,y:40},{x:1,y:49},{x:2,y:38},{x:3,y:30},{x:4,y:32}],color:"#1ab394"},{data:[{x:0,y:20},{x:1,y:24},{x:2,y:19},{x:3,y:15},{x:4,y:16}],color:"#d7d7d7"}]});t.render();var c=new Rickshaw.Graph({element:document.querySelector("#rickshaw_scatterplot"),renderer:"scatterplot",stroke:!0,padding:{top:.05,left:.05,right:.05},series:[{data:[{x:0,y:15},{x:1,y:18},{x:2,y:10},{x:3,y:12},{x:4,y:15},{x:5,y:24},{x:6,y:28},{x:7,y:31},{x:8,y:22},{x:9,y:18},{x:10,y:16}],color:"#1ab394"}]});c.render()});
2 |
--------------------------------------------------------------------------------
/static/js/demo/sparkline-demo.min.js:
--------------------------------------------------------------------------------
1 | $(function(){$("#sparkline1").sparkline([34,43,43,35,44,32,44,52,25],{type:"line",lineColor:"#17997f",fillColor:"#1ab394"}),$("#sparkline2").sparkline([5,6,7,2,0,-4,-2,4],{type:"bar",barColor:"#1ab394",negBarColor:"#c6c6c6"}),$("#sparkline3").sparkline([1,1,2],{type:"pie",sliceColors:["#1ab394","#b3b3b3","#e4f0fb"]}),$("#sparkline4").sparkline([34,43,43,35,44,32,15,22,46,33,86,54,73,53,12,53,23,65,23,63,53,42,34,56,76,15,54,23,44],{type:"line",lineColor:"#17997f",fillColor:"#ffffff"}),$("#sparkline5").sparkline([1,1,0,1,-1,-1,1,-1,0,0,1,1],{type:"tristate",posBarColor:"#1ab394",negBarColor:"#bfbfbf"}),$("#sparkline6").sparkline([4,6,7,7,4,3,2,1,4,4,5,6,3,4,5,8,7,6,9,3,2,4,1,5,6,4,3,7],{type:"discrete",lineColor:"#1ab394"}),$("#sparkline7").sparkline([52,12,44],{type:"pie",height:"150px",sliceColors:["#1ab394","#b3b3b3","#e4f0fb"]}),$("#sparkline8").sparkline([5,6,7,2,0,4,2,4,5,7,2,4,12,14,4,2,14,12,7],{type:"bar",barWidth:8,height:"150px",barColor:"#1ab394",negBarColor:"#c6c6c6"}),$("#sparkline9").sparkline([34,43,43,35,44,32,15,22,46,33,86,54,73,53,12,53,23,65,23,63,53,42,34,56,76,15,54,23,44],{type:"line",lineWidth:1,height:"150px",lineColor:"#17997f",fillColor:"#ffffff"})});
2 |
--------------------------------------------------------------------------------
/static/js/demo/treeview-demo.min.js:
--------------------------------------------------------------------------------
1 | $(function(){var e=[{text:"父节点 1",href:"#parent1",tags:["4"],nodes:[{text:"子节点 1",href:"#child1",tags:["2"],nodes:[{text:"孙子节点 1",href:"#grandchild1",tags:["0"]},{text:"孙子节点 2",href:"#grandchild2",tags:["0"]}]},{text:"子节点 2",href:"#child2",tags:["0"]}]},{text:"父节点 2",href:"#parent2",tags:["0"]},{text:"父节点 3",href:"#parent3",tags:["0"]},{text:"父节点 4",href:"#parent4",tags:["0"]},{text:"父节点 5",href:"#parent5",tags:["0"]}],o=[{text:"父节点 1",tags:["2"],nodes:[{text:"子节点 1",tags:["3"],nodes:[{text:"孙子节点 1",tags:["6"]},{text:"孙子节点 2",tags:["3"]}]},{text:"子节点 2",tags:["3"]}]},{text:"父节点 2",tags:["7"]},{text:"父节点 3",icon:"glyphicon glyphicon-earphone",href:"#demo",tags:["11"]},{text:"父节点 4",icon:"glyphicon glyphicon-cloud-download",href:"/demo.html",tags:["19"],selected:!0},{text:"父节点 5",icon:"glyphicon glyphicon-certificate",color:"pink",backColor:"red",href:"http://www.tesco.com",tags:["available","0"]}],t='[{"text": "父节点 1","nodes": [{"text": "子节点 1","nodes": [{"text": "孙子节点 1"},{"text": "孙子节点 2"}]},{"text": "子节点 2"}]},{"text": "父节点 2"},{"text": "父节点 3"},{"text": "父节点 4"},{"text": "父节点 5"}]';$("#treeview1").treeview({data:e}),$("#treeview2").treeview({levels:1,data:e}),$("#treeview3").treeview({levels:99,data:e}),$("#treeview4").treeview({color:"#428bca",data:e}),$("#treeview5").treeview({color:"#428bca",expandIcon:"glyphicon glyphicon-chevron-right",collapseIcon:"glyphicon glyphicon-chevron-down",nodeIcon:"glyphicon glyphicon-bookmark",data:e}),$("#treeview6").treeview({color:"#428bca",expandIcon:"glyphicon glyphicon-stop",collapseIcon:"glyphicon glyphicon-unchecked",nodeIcon:"glyphicon glyphicon-user",showTags:!0,data:e}),$("#treeview7").treeview({color:"#428bca",showBorder:!1,data:e}),$("#treeview8").treeview({expandIcon:"glyphicon glyphicon-stop",collapseIcon:"glyphicon glyphicon-unchecked",nodeIcon:"glyphicon glyphicon-user",color:"yellow",backColor:"purple",onhoverColor:"orange",borderColor:"red",showBorder:!1,showTags:!0,highlightSelected:!0,selectedColor:"yellow",selectedBackColor:"darkorange",data:e}),$("#treeview9").treeview({expandIcon:"glyphicon glyphicon-stop",collapseIcon:"glyphicon glyphicon-unchecked",nodeIcon:"glyphicon glyphicon-user",color:"yellow",backColor:"purple",onhoverColor:"orange",borderColor:"red",showBorder:!1,showTags:!0,highlightSelected:!0,selectedColor:"yellow",selectedBackColor:"darkorange",data:o}),$("#treeview10").treeview({color:"#428bca",enableLinks:!0,data:e}),$("#treeview11").treeview({color:"#428bca",data:e,onNodeSelected:function(e,o){$("#event_output").prepend("您单击了 "+o.text+"
")}}),$("#treeview12").treeview({data:t})});
2 |
--------------------------------------------------------------------------------
/static/js/plugins/bootstrap-table/bootstrap-table-mobile.min.js:
--------------------------------------------------------------------------------
1 | /*
2 | * bootstrap-table - v1.9.0 - 2015-09-30
3 | * https://github.com/wenzhixin/bootstrap-table
4 | * Copyright (c) 2015 zhixin wen
5 | * Licensed MIT License
6 | */
7 | !function(a){"use strict";var b=function(b,c){b.options.columnsHidden.length>0&&a.each(b.columns,function(d,e){-1!==b.options.columnsHidden.indexOf(e.field)&&e.visible!==c&&b.toggleColumn(a.fn.bootstrapTable.utils.getFieldIndex(b.columns,e.field),c,!0)})},c=function(a){(a.options.height||a.options.showFooter)&&setTimeout(a.resetView,1)},d=function(a,b,d){a.options.minHeight?b<=a.options.minWidth&&d<=a.options.minHeight?e(a):b>a.options.minWidth&&d>a.options.minHeight&&f(a):b<=a.options.minWidth?e(a):b>a.options.minWidth&&f(a),c(a)},e=function(a){g(a,!1),b(a,!1)},f=function(a){g(a,!0),b(a,!0)},g=function(a,b){a.options.cardView=b,a.toggleView()},h=function(a,b){var c;return function(){var d=this,e=arguments,f=function(){c=null,a.apply(d,e)};clearTimeout(c),c=setTimeout(f,b)}};a.extend(a.fn.bootstrapTable.defaults,{mobileResponsive:!1,minWidth:562,minHeight:void 0,heightThreshold:100,checkOnInit:!0,columnsHidden:[]});var i=a.fn.bootstrapTable.Constructor,j=i.prototype.init;i.prototype.init=function(){if(j.apply(this,Array.prototype.slice.apply(arguments)),this.options.mobileResponsive&&this.options.minWidth){var b=this,c={width:a(window).width(),height:a(window).height()};if(a(window).on("resize orientationchange",h(function(){var e=a(this).height(),f=a(this).width();(Math.abs(c.height-e)>b.options.heightThreshold||c.width!=f)&&(d(b,f,e),c={width:f,height:e})},200)),this.options.checkOnInit){var e=a(window).height(),f=a(window).width();d(this,f,e),c={width:f,height:e}}}}}(jQuery);
8 |
--------------------------------------------------------------------------------
/static/js/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js:
--------------------------------------------------------------------------------
1 | /*
2 | * bootstrap-table - v1.9.0 - 2015-09-30
3 | * https://github.com/wenzhixin/bootstrap-table
4 | * Copyright (c) 2015 zhixin wen
5 | * Licensed MIT License
6 | */
7 | !function(a){"use strict";a.fn.bootstrapTable.locales["zh-CN"]={formatLoadingMessage:function(){return"正在努力地加载数据中,请稍候……"},formatRecordsPerPage:function(a){return"每页显示 "+a+" 条记录"},formatShowingRows:function(a,b,c){return"显示第 "+a+" 到第 "+b+" 条记录,总共 "+c+" 条记录"},formatSearch:function(){return"搜索"},formatNoMatches:function(){return"没有找到匹配的记录"},formatPaginationSwitch:function(){return"隐藏/显示分页"},formatRefresh:function(){return"刷新"},formatToggle:function(){return"切换"},formatColumns:function(){return"列"}},a.extend(a.fn.bootstrapTable.defaults,a.fn.bootstrapTable.locales["zh-CN"])}(jQuery);
8 |
--------------------------------------------------------------------------------
/static/js/plugins/fancybox/blank.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/js/plugins/fancybox/blank.gif
--------------------------------------------------------------------------------
/static/js/plugins/fancybox/fancybox_loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/js/plugins/fancybox/fancybox_loading.gif
--------------------------------------------------------------------------------
/static/js/plugins/fancybox/fancybox_loading@2x.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/js/plugins/fancybox/fancybox_loading@2x.gif
--------------------------------------------------------------------------------
/static/js/plugins/fancybox/fancybox_overlay.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/js/plugins/fancybox/fancybox_overlay.png
--------------------------------------------------------------------------------
/static/js/plugins/fancybox/fancybox_sprite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/js/plugins/fancybox/fancybox_sprite.png
--------------------------------------------------------------------------------
/static/js/plugins/fancybox/fancybox_sprite@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/js/plugins/fancybox/fancybox_sprite@2x.png
--------------------------------------------------------------------------------
/static/js/plugins/flot/jquery.flot.resize.js:
--------------------------------------------------------------------------------
1 | /* Flot plugin for automatically redrawing plots as the placeholder resizes.
2 |
3 | Copyright (c) 2007-2013 IOLA and Ole Laursen.
4 | Licensed under the MIT license.
5 |
6 | It works by listening for changes on the placeholder div (through the jQuery
7 | resize event plugin) - if the size changes, it will redraw the plot.
8 |
9 | There are no options. If you need to disable the plugin for some plots, you
10 | can just fix the size of their placeholders.
11 |
12 | */
13 |
14 | /* Inline dependency:
15 | * jQuery resize event - v1.1 - 3/14/2010
16 | * http://benalman.com/projects/jquery-resize-plugin/
17 | *
18 | * Copyright (c) 2010 "Cowboy" Ben Alman
19 | * Dual licensed under the MIT and GPL licenses.
20 | * http://benalman.com/about/license/
21 | */
22 |
23 | (function($,h,c){var a=$([]),e=$.resize=$.extend($.resize,{}),i,k="setTimeout",j="resize",d=j+"-special-event",b="delay",f="throttleWindow";e[b]=250;e[f]=true;$.event.special[j]={setup:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.add(l);$.data(this,d,{w:l.width(),h:l.height()});if(a.length===1){g()}},teardown:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.not(l);l.removeData(d);if(!a.length){clearTimeout(i)}},add:function(l){if(!e[f]&&this[k]){return false}var n;function m(s,o,p){var q=$(this),r=$.data(this,d);r.w=o!==c?o:q.width();r.h=p!==c?p:q.height();n.apply(this,arguments)}if($.isFunction(l)){n=l;return m}else{n=l.handler;l.handler=m}}};function g(){i=h[k](function(){a.each(function(){var n=$(this),m=n.width(),l=n.height(),o=$.data(this,d);if(m!==o.w||l!==o.h){n.trigger(j,[o.w=m,o.h=l])}});g()},e[b])}})(jQuery,this);
24 |
25 | (function ($) {
26 | var options = { }; // no options
27 |
28 | function init(plot) {
29 | function onResize() {
30 | var placeholder = plot.getPlaceholder();
31 |
32 | // somebody might have hidden us and we can't plot
33 | // when we don't have the dimensions
34 | if (placeholder.width() == 0 || placeholder.height() == 0)
35 | return;
36 |
37 | plot.resize();
38 | plot.setupGrid();
39 | plot.draw();
40 | }
41 |
42 | function bindEvents(plot, eventHolder) {
43 | plot.getPlaceholder().resize(onResize);
44 | }
45 |
46 | function shutdown(plot, eventHolder) {
47 | plot.getPlaceholder().unbind("resize", onResize);
48 | }
49 |
50 | plot.hooks.bindEvents.push(bindEvents);
51 | plot.hooks.shutdown.push(shutdown);
52 | }
53 |
54 | $.plot.plugins.push({
55 | init: init,
56 | options: options,
57 | name: 'resize',
58 | version: '1.0'
59 | });
60 | })(jQuery);
61 |
--------------------------------------------------------------------------------
/static/js/plugins/flot/jquery.flot.symbol.js:
--------------------------------------------------------------------------------
1 | /* Flot plugin that adds some extra symbols for plotting points.
2 |
3 | Copyright (c) 2007-2014 IOLA and Ole Laursen.
4 | Licensed under the MIT license.
5 |
6 | The symbols are accessed as strings through the standard symbol options:
7 |
8 | series: {
9 | points: {
10 | symbol: "square" // or "diamond", "triangle", "cross"
11 | }
12 | }
13 |
14 | */
15 |
16 | (function ($) {
17 | function processRawData(plot, series, datapoints) {
18 | // we normalize the area of each symbol so it is approximately the
19 | // same as a circle of the given radius
20 |
21 | var handlers = {
22 | square: function (ctx, x, y, radius, shadow) {
23 | // pi * r^2 = (2s)^2 => s = r * sqrt(pi)/2
24 | var size = radius * Math.sqrt(Math.PI) / 2;
25 | ctx.rect(x - size, y - size, size + size, size + size);
26 | },
27 | diamond: function (ctx, x, y, radius, shadow) {
28 | // pi * r^2 = 2s^2 => s = r * sqrt(pi/2)
29 | var size = radius * Math.sqrt(Math.PI / 2);
30 | ctx.moveTo(x - size, y);
31 | ctx.lineTo(x, y - size);
32 | ctx.lineTo(x + size, y);
33 | ctx.lineTo(x, y + size);
34 | ctx.lineTo(x - size, y);
35 | },
36 | triangle: function (ctx, x, y, radius, shadow) {
37 | // pi * r^2 = 1/2 * s^2 * sin (pi / 3) => s = r * sqrt(2 * pi / sin(pi / 3))
38 | var size = radius * Math.sqrt(2 * Math.PI / Math.sin(Math.PI / 3));
39 | var height = size * Math.sin(Math.PI / 3);
40 | ctx.moveTo(x - size/2, y + height/2);
41 | ctx.lineTo(x + size/2, y + height/2);
42 | if (!shadow) {
43 | ctx.lineTo(x, y - height/2);
44 | ctx.lineTo(x - size/2, y + height/2);
45 | }
46 | },
47 | cross: function (ctx, x, y, radius, shadow) {
48 | // pi * r^2 = (2s)^2 => s = r * sqrt(pi)/2
49 | var size = radius * Math.sqrt(Math.PI) / 2;
50 | ctx.moveTo(x - size, y - size);
51 | ctx.lineTo(x + size, y + size);
52 | ctx.moveTo(x - size, y + size);
53 | ctx.lineTo(x + size, y - size);
54 | }
55 | };
56 |
57 | var s = series.points.symbol;
58 | if (handlers[s])
59 | series.points.symbol = handlers[s];
60 | }
61 |
62 | function init(plot) {
63 | plot.hooks.processDatapoints.push(processRawData);
64 | }
65 |
66 | $.plot.plugins.push({
67 | init: init,
68 | name: 'symbols',
69 | version: '1.0'
70 | });
71 | })(jQuery);
72 |
--------------------------------------------------------------------------------
/static/js/plugins/gritter/images/gritter-light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/js/plugins/gritter/images/gritter-light.png
--------------------------------------------------------------------------------
/static/js/plugins/gritter/images/gritter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/js/plugins/gritter/images/gritter.png
--------------------------------------------------------------------------------
/static/js/plugins/gritter/images/ie-spacer.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/js/plugins/gritter/images/ie-spacer.gif
--------------------------------------------------------------------------------
/static/js/plugins/gritter/jquery.gritter.css:
--------------------------------------------------------------------------------
1 | /* the norm */
2 | #gritter-notice-wrapper {
3 | position:fixed;
4 | top:40px;
5 | right:20px;
6 | width:301px;
7 | z-index:9999;
8 |
9 | -webkit-animation-duration: 1s;
10 | animation-duration: 1s;
11 | -webkit-animation-fill-mode: both;
12 | animation-fill-mode: both;
13 |
14 | -webkit-animation-name: bounceIn;
15 | animation-name: bounceIn;
16 | }
17 | @keyframes bounceIn {
18 | 0% {
19 | opacity: 0;
20 | -webkit-transform: scale(.3);
21 | -ms-transform: scale(.3);
22 | transform: scale(.3);
23 | }
24 |
25 | 50% {
26 | opacity: 1;
27 | -webkit-transform: scale(1.05);
28 | -ms-transform: scale(1.05);
29 | transform: scale(1.05);
30 | }
31 |
32 | 70% {
33 | -webkit-transform: scale(.9);
34 | -ms-transform: scale(.9);
35 | transform: scale(.9);
36 | }
37 |
38 | 100% {
39 | opacity: 1;
40 | -webkit-transform: scale(1);
41 | -ms-transform: scale(1);
42 | transform: scale(1);
43 | }
44 | }
45 | #gritter-notice-wrapper.top-left {
46 | left: 20px;
47 | right: auto;
48 | }
49 | #gritter-notice-wrapper.bottom-right {
50 | top: auto;
51 | left: auto;
52 | bottom: 20px;
53 | right: 20px;
54 | }
55 | #gritter-notice-wrapper.bottom-left {
56 | top: auto;
57 | right: auto;
58 | bottom: 20px;
59 | left: 20px;
60 | }
61 | .gritter-item-wrapper {
62 | position:relative;
63 | margin:0 0 10px 0;
64 | background:url('images/ie-spacer.gif'); /* ie7/8 fix */
65 | }
66 |
67 | .hover .gritter-top {
68 | /*background-position:right -30px;*/
69 | }
70 | .gritter-bottom {
71 | height:8px;
72 | margin:0;
73 | }
74 |
75 | .gritter-item {
76 | display:block;
77 | background-color: rgba(39,58,75,0.8);
78 | border-radius: 4px;
79 | color:#eee;
80 | padding:10px 11px 10px 11px;
81 | font-size: 11px;
82 | font-family:verdana;
83 | }
84 | .hover .gritter-item {
85 | background-position:right -40px;
86 | }
87 | .gritter-item p {
88 | padding:0;
89 | margin:0;
90 | word-wrap:break-word;
91 | }
92 |
93 | .gritter-item a:hover {
94 | color: #f8ac59;
95 | text-decoration: underline;
96 | }
97 | .gritter-close {
98 | display:none;
99 | position:absolute;
100 | top:5px;
101 | right:3px;
102 | background:url(images/gritter.png) no-repeat left top;
103 | cursor:pointer;
104 | width:30px;
105 | height:30px;
106 | text-indent:-9999em;
107 | }
108 | .gritter-title {
109 | font-size:12px;
110 | font-weight:bold;
111 | padding:0 0 7px 0;
112 | display:block;
113 | text-transform: uppercase;
114 | }
115 | .gritter-image {
116 | width:48px;
117 | height:48px;
118 | float:left;
119 | }
120 | .gritter-with-image,
121 | .gritter-without-image {
122 | padding:0;
123 | }
124 | .gritter-with-image {
125 | width:220px;
126 | float:right;
127 | }
128 | /* for the light (white) version of the gritter notice */
129 | .gritter-light .gritter-item,
130 | .gritter-light .gritter-bottom,
131 | .gritter-light .gritter-top,
132 | .gritter-light .gritter-close {
133 | background-image: url(images/gritter-light.png);
134 | color: #222;
135 | }
136 | .gritter-light .gritter-title {
137 | text-shadow: none;
138 | }
139 |
--------------------------------------------------------------------------------
/static/js/plugins/layer/laydate-v1.1/demo.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | layDate Demo
6 |
7 |
15 |
16 |
17 |
18 | 演示一:
19 |
20 |
36 |
37 |
现在,您已经看到了layDate的第一个版本了,路漫漫其修远兮,不管您的网站是否存有别的日期控件,但我相信总有一日您会对layDate情有独钟。
38 |
使用文档
39 |
皮肤库
40 |
更新日志
41 |
有问必答
42 |
43 |
44 |
55 |
56 |
--------------------------------------------------------------------------------
/static/js/plugins/layer/laydate-v1.1/layDate官网.url:
--------------------------------------------------------------------------------
1 | [{000214A0-0000-0000-C000-000000000046}]
2 | Prop3=19,2
3 | [InternetShortcut]
4 | URL=http://sentsin.com/layui/laydate/
5 | IDList=
6 | HotKey=0
7 |
--------------------------------------------------------------------------------
/static/js/plugins/layer/laydate-v1.1/laydate/skins/dahong/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/js/plugins/layer/laydate-v1.1/laydate/skins/dahong/icon.png
--------------------------------------------------------------------------------
/static/js/plugins/layer/laydate-v1.1/laydate/skins/dahong/laydate.css:
--------------------------------------------------------------------------------
1 | /**
2 |
3 | @Name: laydate皮肤:大红
4 | @Author:贤心
5 | @Site:http://sentsin.com/layui/laydate
6 |
7 | **/
8 |
9 | .laydate-icon{border:1px solid #ccc; background-image:url(icon.png)}
10 |
11 | .laydate_body .laydate_bottom #laydate_hms,
12 | .laydate_body .laydate_time{border:1px solid #ccc;}
13 |
14 | .laydate_body .laydate_box,
15 | .laydate_body .laydate_time{box-shadow: 2px 2px 5px rgba(0,0,0,.1);}
16 |
17 | .laydate_body .laydate_box{border-top:none; border-bottom:none; background-color:#fff; color:#333;}
18 | .laydate_body .laydate_box input{background:none!important; color:#fff;}
19 | .laydate_body .laydate_box .laydate_void{color:#ccc!important;}
20 | .laydate_body .laydate_box a, .laydate_body .laydate_box a:hover{color:#333;}
21 | .laydate_body .laydate_box a:hover{color:#666;}
22 | .laydate_body .laydate_click{background-color:#F32043!important; color:#fff!important;}
23 | .laydate_body .laydate_top{border-top:1px solid #D91600; background-color:#D91600}
24 | .laydate_body .laydate_ym{border:1px solid #D91600; background-color:#D91600;}
25 | .laydate_body .laydate_ym .laydate_yms{border:1px solid #D91600; background-color:#D91600; color:#fff;}
26 | .laydate_body .laydate_y .laydate_yms a{border-bottom:1px solid #D91600;}
27 | .laydate_body .laydate_y .laydate_yms .laydate_chdown{border-top:1px solid #D91600; border-bottom:none;}
28 | .laydate_body .laydate_choose{border-left:1px solid #D91600;}
29 | .laydate_body .laydate_chprev{border-left:none; border-right:1px solid #D91600;}
30 | .laydate_body .laydate_choose:hover,
31 | .laydate_body .laydate_y .laydate_yms a:hover{background-color:#F54766;}
32 | .laydate_body .laydate_chtop cite{border-bottom-color:#fff;}
33 | .laydate_body .laydate_chdown cite, .laydate_body .laydate_ym label{border-top-color:#fff;}
34 | .laydate_body .laydate_chprev cite{border-right-style:solid; border-right-color:#fff;}
35 | .laydate_body .laydate_chnext cite{border-left-style:solid; border-left-color:#fff;}
36 | .laydate_body .laydate_table{width: 240px!important; margin: 0!important; border:1px solid #ccc; border-top:none; border-bottom:none;}
37 | .laydate_body .laydate_table td{border:none; height:21px!important; line-height:21px!important; background-color:#fff; color:#333;}
38 | .laydate_body .laydate_table .laydate_nothis{color:#999;}
39 | .laydate_body .laydate_table thead{border-bottom:1px solid #ccc; height:21px!important; line-height:21px!important;}
40 | .laydate_body .laydate_table thead th{}
41 | .laydate_body .laydate_bottom{border:1px solid #ccc; border-top:none;}
42 | .laydate_body .laydate_bottom #laydate_hms{background-color:#fff;}
43 | .laydate_body .laydate_time{background-color:#fff;}
44 | .laydate_body .laydate_time1{width: 226px!important; height: 152px!important;}
45 | .laydate_body .laydate_bottom .laydate_sj{width:31px!important; border-right:1px solid #ccc; background-color:#fff;}
46 | .laydate_body .laydate_bottom input{background-color:#fff; color:#333;}
47 | .laydate_body .laydate_bottom .laydte_hsmtex{border-bottom:1px solid #ccc;}
48 | .laydate_body .laydate_bottom .laydate_btn{border-right:1px solid #ccc;}
49 | .laydate_body .laydate_bottom .laydate_v{color:#999}
50 | .laydate_body .laydate_bottom .laydate_btn a{border: 1px solid #ccc; border-right:none; background-color:#fff;}
51 | .laydate_body .laydate_bottom .laydate_btn a:hover{background-color:#F6F6F6; color:#333;}
52 |
53 | .laydate_body .laydate_m .laydate_yms span:hover,
54 | .laydate_body .laydate_time .laydate_hmsno span:hover,
55 | .laydate_body .laydate_y .laydate_yms ul li:hover,
56 | .laydate_body .laydate_table td:hover{background-color:#F54766; color:#fff;}
57 |
58 |
59 |
--------------------------------------------------------------------------------
/static/js/plugins/layer/laydate-v1.1/laydate/skins/default/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/js/plugins/layer/laydate-v1.1/laydate/skins/default/icon.png
--------------------------------------------------------------------------------
/static/js/plugins/layer/laydate-v1.1/laydate/skins/molv/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/js/plugins/layer/laydate-v1.1/laydate/skins/molv/icon.png
--------------------------------------------------------------------------------
/static/js/plugins/layer/laydate-v1.1/更新日志.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/js/plugins/layer/laydate-v1.1/更新日志.txt
--------------------------------------------------------------------------------
/static/js/plugins/layer/laydate/skins/dahong/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/js/plugins/layer/laydate/skins/dahong/icon.png
--------------------------------------------------------------------------------
/static/js/plugins/layer/laydate/skins/dahong/laydate.css:
--------------------------------------------------------------------------------
1 | /**
2 |
3 | @Name: laydate皮肤:大红
4 | @Author:贤心
5 | @Site:http://sentsin.com/layui/laydate
6 |
7 | **/
8 |
9 | .laydate-icon{border:1px solid #ccc; background-image:url(icon.png)}
10 |
11 | .laydate_body .laydate_bottom #laydate_hms,
12 | .laydate_body .laydate_time{border:1px solid #ccc;}
13 |
14 | .laydate_body .laydate_box,
15 | .laydate_body .laydate_time{box-shadow: 2px 2px 5px rgba(0,0,0,.1);}
16 |
17 | .laydate_body .laydate_box{border-top:none; border-bottom:none; background-color:#fff; color:#333;}
18 | .laydate_body .laydate_box input{background:none!important; color:#fff;}
19 | .laydate_body .laydate_box .laydate_void{color:#ccc!important;}
20 | .laydate_body .laydate_box a, .laydate_body .laydate_box a:hover{color:#333;}
21 | .laydate_body .laydate_box a:hover{color:#666;}
22 | .laydate_body .laydate_click{background-color:#F32043!important; color:#fff!important;}
23 | .laydate_body .laydate_top{border-top:1px solid #D91600; background-color:#D91600}
24 | .laydate_body .laydate_ym{border:1px solid #D91600; background-color:#D91600;}
25 | .laydate_body .laydate_ym .laydate_yms{border:1px solid #D91600; background-color:#D91600; color:#fff;}
26 | .laydate_body .laydate_y .laydate_yms a{border-bottom:1px solid #D91600;}
27 | .laydate_body .laydate_y .laydate_yms .laydate_chdown{border-top:1px solid #D91600; border-bottom:none;}
28 | .laydate_body .laydate_choose{border-left:1px solid #D91600;}
29 | .laydate_body .laydate_chprev{border-left:none; border-right:1px solid #D91600;}
30 | .laydate_body .laydate_choose:hover,
31 | .laydate_body .laydate_y .laydate_yms a:hover{background-color:#F54766;}
32 | .laydate_body .laydate_chtop cite{border-bottom-color:#fff;}
33 | .laydate_body .laydate_chdown cite, .laydate_body .laydate_ym label{border-top-color:#fff;}
34 | .laydate_body .laydate_chprev cite{border-right-style:solid; border-right-color:#fff;}
35 | .laydate_body .laydate_chnext cite{border-left-style:solid; border-left-color:#fff;}
36 | .laydate_body .laydate_table{width: 240px!important; margin: 0!important; border:1px solid #ccc; border-top:none; border-bottom:none;}
37 | .laydate_body .laydate_table td{border:none; height:21px!important; line-height:21px!important; background-color:#fff; color:#333;}
38 | .laydate_body .laydate_table .laydate_nothis{color:#999;}
39 | .laydate_body .laydate_table thead{border-bottom:1px solid #ccc; height:21px!important; line-height:21px!important;}
40 | .laydate_body .laydate_table thead th{}
41 | .laydate_body .laydate_bottom{border:1px solid #ccc; border-top:none;}
42 | .laydate_body .laydate_bottom #laydate_hms{background-color:#fff;}
43 | .laydate_body .laydate_time{background-color:#fff;}
44 | .laydate_body .laydate_time1{width: 226px!important; height: 152px!important;}
45 | .laydate_body .laydate_bottom .laydate_sj{width:31px!important; border-right:1px solid #ccc; background-color:#fff;}
46 | .laydate_body .laydate_bottom input{background-color:#fff; color:#333;}
47 | .laydate_body .laydate_bottom .laydte_hsmtex{border-bottom:1px solid #ccc;}
48 | .laydate_body .laydate_bottom .laydate_btn{border-right:1px solid #ccc;}
49 | .laydate_body .laydate_bottom .laydate_v{color:#999}
50 | .laydate_body .laydate_bottom .laydate_btn a{border: 1px solid #ccc; border-right:none; background-color:#fff;}
51 | .laydate_body .laydate_bottom .laydate_btn a:hover{background-color:#F6F6F6; color:#333;}
52 |
53 | .laydate_body .laydate_m .laydate_yms span:hover,
54 | .laydate_body .laydate_time .laydate_hmsno span:hover,
55 | .laydate_body .laydate_y .laydate_yms ul li:hover,
56 | .laydate_body .laydate_table td:hover{background-color:#F54766; color:#fff;}
57 |
58 |
59 |
--------------------------------------------------------------------------------
/static/js/plugins/layer/laydate/skins/default/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/js/plugins/layer/laydate/skins/default/icon.png
--------------------------------------------------------------------------------
/static/js/plugins/layer/laydate/skins/default/laydate.css:
--------------------------------------------------------------------------------
1 |
2 |
3 | .laydate-icon{border:1px solid #ccc; background-image:url(icon.png)}
4 |
5 | .laydate_body .laydate_bottom #laydate_hms,
6 | .laydate_body .laydate_time{border:1px solid #ccc;}
7 |
8 | .laydate_body .laydate_box,
9 | .laydate_body .laydate_ym .laydate_yms,
10 | .laydate_body .laydate_time{box-shadow: 2px 2px 5px rgba(0,0,0,.1);}
11 |
12 | .laydate_body .laydate_box{border-top:none; border-bottom:none; background-color:#fff; color:#00625A;}
13 | .laydate_body .laydate_box input{background:none!important; color:#fff;}
14 | .laydate_body .laydate_box .laydate_void{color:#00E8D7!important;}
15 | .laydate_body .laydate_box a, .laydate_body .laydate_box a:hover{color:#00625A;}
16 | .laydate_body .laydate_box a:hover{color:#666;}
17 | .laydate_body .laydate_click{background-color:#009F95!important; color:#fff!important;}
18 | .laydate_body .laydate_top{border-top:1px solid #009F95; background-color:#009F95}
19 | .laydate_body .laydate_ym{border:1px solid #009F95; background-color:#009F95;}
20 | .laydate_body .laydate_ym .laydate_yms{border:1px solid #009F95; background-color:#009F95; color:#fff;}
21 | .laydate_body .laydate_y .laydate_yms a{border-bottom:1px solid #009F95;}
22 | .laydate_body .laydate_y .laydate_yms .laydate_chdown{border-top:1px solid #009F95; border-bottom:none;}
23 | .laydate_body .laydate_choose{border-left:1px solid #009F95;}
24 | .laydate_body .laydate_chprev{border-left:none; border-right:1px solid #009F95;}
25 | .laydate_body .laydate_choose:hover,
26 | .laydate_body .laydate_y .laydate_yms a:hover{background-color:#00C1B3;}
27 | .laydate_body .laydate_chtop cite{border-bottom-color:#fff;}
28 | .laydate_body .laydate_chdown cite, .laydate_body .laydate_ym label{border-top-color:#fff;}
29 | .laydate_body .laydate_chprev cite{border-right-style:solid; border-right-color:#fff;}
30 | .laydate_body .laydate_chnext cite{border-left-style:solid; border-left-color:#fff;}
31 | .laydate_body .laydate_table{width: 240px!important; margin: 0!important; border:1px solid #ccc; border-top:none; border-bottom:none;}
32 | .laydate_body .laydate_table td{border:none; height:21px!important; line-height:21px!important; background-color:#fff; color:#00625A;}
33 | .laydate_body .laydate_table .laydate_nothis{color:#999;}
34 | .laydate_body .laydate_table thead{border-bottom:1px solid #ccc; height:21px!important; line-height:21px!important;}
35 | .laydate_body .laydate_table thead th{}
36 | .laydate_body .laydate_bottom{border:1px solid #ccc; border-top:none;}
37 | .laydate_body .laydate_bottom #laydate_hms{background-color:#fff;}
38 | .laydate_body .laydate_time{background-color:#fff;}
39 | .laydate_body .laydate_time1{width: 226px!important; height: 152px!important;}
40 | .laydate_body .laydate_bottom .laydate_sj{width:31px!important; border-right:1px solid #ccc; background-color:#fff;}
41 | .laydate_body .laydate_bottom input{background-color:#fff; color:#00625A;}
42 | .laydate_body .laydate_bottom .laydte_hsmtex{border-bottom:1px solid #ccc;}
43 | .laydate_body .laydate_bottom .laydate_btn{border-right:1px solid #ccc;}
44 | .laydate_body .laydate_bottom .laydate_v{color:#999}
45 | .laydate_body .laydate_bottom .laydate_btn a{border: 1px solid #ccc; border-right:none; background-color:#fff;}
46 | .laydate_body .laydate_bottom .laydate_btn a:hover{background-color:#F6F6F6; color:#00625A;}
47 |
48 | .laydate_body .laydate_m .laydate_yms span:hover,
49 | .laydate_body .laydate_time .laydate_hmsno span:hover,
50 | .laydate_body .laydate_y .laydate_yms ul li:hover,
51 | .laydate_body .laydate_table td:hover{background-color:#00C1B3; color:#fff;}
52 |
53 |
54 |
--------------------------------------------------------------------------------
/static/js/plugins/layer/laydate/skins/molv/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/js/plugins/layer/laydate/skins/molv/icon.png
--------------------------------------------------------------------------------
/static/js/plugins/layer/laydate/skins/molv/laydate.css:
--------------------------------------------------------------------------------
1 | /**
2 |
3 | @Name: laydate皮肤:墨绿
4 | @Author:贤心
5 | @Site:http://sentsin.com/layui/laydate
6 |
7 | **/
8 |
9 | .laydate-icon{border:1px solid #ccc; background-image:url(icon.png)}
10 |
11 | .laydate_body .laydate_bottom #laydate_hms,
12 | .laydate_body .laydate_time{border:1px solid #ccc;}
13 |
14 | .laydate_body .laydate_box,
15 | .laydate_body .laydate_ym .laydate_yms,
16 | .laydate_body .laydate_time{box-shadow: 2px 2px 5px rgba(0,0,0,.1);}
17 |
18 | .laydate_body .laydate_box{border-top:none; border-bottom:none; background-color:#fff; color:#00625A;}
19 | .laydate_body .laydate_box input{background:none!important; color:#fff;}
20 | .laydate_body .laydate_box .laydate_void{color:#00E8D7!important;}
21 | .laydate_body .laydate_box a, .laydate_body .laydate_box a:hover{color:#00625A;}
22 | .laydate_body .laydate_box a:hover{color:#666;}
23 | .laydate_body .laydate_click{background-color:#009F95!important; color:#fff!important;}
24 | .laydate_body .laydate_top{border-top:1px solid #009F95; background-color:#009F95}
25 | .laydate_body .laydate_ym{border:1px solid #009F95; background-color:#009F95;}
26 | .laydate_body .laydate_ym .laydate_yms{border:1px solid #009F95; background-color:#009F95; color:#fff;}
27 | .laydate_body .laydate_y .laydate_yms a{border-bottom:1px solid #009F95;}
28 | .laydate_body .laydate_y .laydate_yms .laydate_chdown{border-top:1px solid #009F95; border-bottom:none;}
29 | .laydate_body .laydate_choose{border-left:1px solid #009F95;}
30 | .laydate_body .laydate_chprev{border-left:none; border-right:1px solid #009F95;}
31 | .laydate_body .laydate_choose:hover,
32 | .laydate_body .laydate_y .laydate_yms a:hover{background-color:#00C1B3;}
33 | .laydate_body .laydate_chtop cite{border-bottom-color:#fff;}
34 | .laydate_body .laydate_chdown cite, .laydate_body .laydate_ym label{border-top-color:#fff;}
35 | .laydate_body .laydate_chprev cite{border-right-style:solid; border-right-color:#fff;}
36 | .laydate_body .laydate_chnext cite{border-left-style:solid; border-left-color:#fff;}
37 | .laydate_body .laydate_table{width: 240px!important; margin: 0!important; border:1px solid #ccc; border-top:none; border-bottom:none;}
38 | .laydate_body .laydate_table td{border:none; height:21px!important; line-height:21px!important; background-color:#fff; color:#00625A;}
39 | .laydate_body .laydate_table .laydate_nothis{color:#999;}
40 | .laydate_body .laydate_table thead{border-bottom:1px solid #ccc; height:21px!important; line-height:21px!important;}
41 | .laydate_body .laydate_table thead th{}
42 | .laydate_body .laydate_bottom{border:1px solid #ccc; border-top:none;}
43 | .laydate_body .laydate_bottom #laydate_hms{background-color:#fff;}
44 | .laydate_body .laydate_time{background-color:#fff;}
45 | .laydate_body .laydate_time1{width: 226px!important; height: 152px!important;}
46 | .laydate_body .laydate_bottom .laydate_sj{width:31px!important; border-right:1px solid #ccc; background-color:#fff;}
47 | .laydate_body .laydate_bottom input{background-color:#fff; color:#00625A;}
48 | .laydate_body .laydate_bottom .laydte_hsmtex{border-bottom:1px solid #ccc;}
49 | .laydate_body .laydate_bottom .laydate_btn{border-right:1px solid #ccc;}
50 | .laydate_body .laydate_bottom .laydate_v{color:#999}
51 | .laydate_body .laydate_bottom .laydate_btn a{border: 1px solid #ccc; border-right:none; background-color:#fff;}
52 | .laydate_body .laydate_bottom .laydate_btn a:hover{background-color:#F6F6F6; color:#00625A;}
53 |
54 | .laydate_body .laydate_m .laydate_yms span:hover,
55 | .laydate_body .laydate_time .laydate_hmsno span:hover,
56 | .laydate_body .laydate_y .laydate_yms ul li:hover,
57 | .laydate_body .laydate_table td:hover{background-color:#00C1B3; color:#fff;}
58 |
59 |
60 |
--------------------------------------------------------------------------------
/static/js/plugins/layer/layim/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/js/plugins/layer/layim/loading.gif
--------------------------------------------------------------------------------
/static/js/plugins/layer/skin/default/icon-ext.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/js/plugins/layer/skin/default/icon-ext.png
--------------------------------------------------------------------------------
/static/js/plugins/layer/skin/default/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/js/plugins/layer/skin/default/icon.png
--------------------------------------------------------------------------------
/static/js/plugins/layer/skin/default/loading-0.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/js/plugins/layer/skin/default/loading-0.gif
--------------------------------------------------------------------------------
/static/js/plugins/layer/skin/default/loading-1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/js/plugins/layer/skin/default/loading-1.gif
--------------------------------------------------------------------------------
/static/js/plugins/layer/skin/default/loading-2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daiguadaidai/archer_dbmp/650809423442a6a9822038833145b6484bb4dc63/static/js/plugins/layer/skin/default/loading-2.gif
--------------------------------------------------------------------------------
/static/js/plugins/markdown/bootstrap-markdown.zh.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Chinese translation for bootstrap-markdown
3 | * benhaile
4 | */
5 | (function ($) {
6 | $.fn.markdown.messages.zh = {
7 | 'Bold': "粗体",
8 | 'Italic': "斜体",
9 | 'Heading': "标题",
10 | 'URL/Link': "链接",
11 | 'Image': "图片",
12 | 'List': "列表",
13 | 'Unordered List': "无序列表",
14 | 'Ordered List': "有序列表",
15 | 'Code': "代码",
16 | 'Quote': "引用",
17 | 'Preview': "预览",
18 | 'strong text': "粗体",
19 | 'emphasized text': "强调",
20 | 'heading text': "标题",
21 | 'enter link description here': "输入链接说明",
22 | 'Insert Hyperlink': "URL地址",
23 | 'enter image description here': "输入图片说明",
24 | 'Insert Image Hyperlink': "图片URL地址",
25 | 'enter image title here': "在这里输入图片标题",
26 | 'list text here': "这里是列表文本",
27 | 'code text here': "这里输入代码",
28 | 'quote here': "这里输入引用文本"
29 |
30 |
31 | };
32 | }(jQuery));
33 |
--------------------------------------------------------------------------------
/static/js/plugins/peity/jquery.peity.min.js:
--------------------------------------------------------------------------------
1 | // Peity jQuery plugin version 2.0.3
2 | // (c) 2014 Ben Pickles
3 | //
4 | // http://benpickles.github.io/peity
5 | //
6 | // Released under MIT license.
7 | (function(e,q,h){var o=function(a,b){var c=q.createElementNS("http://www.w3.org/2000/svg",a);e.each(b,function(a,b){c.setAttribute(a,b)});return c},t="createElementNS"in q&&o("svg",{}).createSVGRect,r=1/(window.devicePixelRatio||1),j=e.fn.peity=function(a,b){t&&this.each(function(){var c=e(this),d=c.data("peity");if(d)a&&(d.type=a),e.extend(d.opts,b);else{var f=j.defaults[a],g={};e.each(c.data(),function(a,b){a in f&&(g[a]=b)});var h=e.extend({},f,g,b),d=new s(c,a,h);c.change(function(){d.draw()}).data("peity",
8 | d)}d.draw()});return this},s=function(a,b,c){this.$el=a;this.type=b;this.opts=c},m=s.prototype;m.draw=function(){j.graphers[this.type].call(this,this.opts)};m.fill=function(){var a=this.opts.fill,b=a;e.isFunction(b)||(b=function(b,d){return a[d%a.length]});return b};m.prepare=function(a,b){var c;this.svg?c=e(this.svg).empty():(this.svg=o("svg",{"class":"peity"}),this.$el.hide().after(this.svg),c=e(this.svg).data("peity",this));this.svg.setAttribute("height",b);this.svg.setAttribute("width",a);return c};
9 | m.values=function(){return e.map(this.$el.text().split(this.opts.delimiter),function(a){return parseFloat(a)})};j.defaults={};j.graphers={};j.register=function(a,b,c){this.defaults[a]=b;this.graphers[a]=c};j.register("pie",{delimiter:null,diameter:16,fill:["#ff9900","#fff4dd","#ffc66e"]},function(a){if(!a.delimiter){var b=this.$el.text().match(/[^0-9\.]/);a.delimiter=b?b[0]:","}b=this.values();if("/"==a.delimiter)var c=b[0],b=[c,h.max(0,b[1]-c)];for(var d=0,c=b.length,f=0;de?1:0,1,q,r,"Z"].join(" ")});i=l}k.setAttribute("fill",j.call(this,n,d,b));this.svg.appendChild(k)}}});j.register("line",{delimiter:",",fill:"#c6d9fd",height:16,max:null,
11 | min:0,stroke:"#4d89f9",strokeWidth:1,width:32},function(a){var b=this.values();1==b.length&&b.push(b[0]);for(var c=h.max.apply(h,b.concat([a.max])),d=h.min.apply(h,b.concat([a.min])),f=this.prepare(a.width,a.height),g=f.width(),f=f.height()-a.strokeWidth,e=g/(b.length-1),c=c-d,j=0==c?f:f/c,m=f+d*j,c=[0,m],i=0;i=d&&0k&&(l+=k,k=-k);n=o("rect",{fill:m.call(this,n,i,b),x:i*g,y:l,width:g-a,height:k});this.svg.appendChild(n)}})})(jQuery,document,Math);
14 |
--------------------------------------------------------------------------------
/static/js/plugins/preetyTextDiff/jquery.pretty-text-diff.min.js:
--------------------------------------------------------------------------------
1 | // Generated by CoffeeScript 1.7.1
2 |
3 | /*
4 | @preserve jQuery.PrettyTextDiff 1.0.4
5 | See https://github.com/arnab/jQuery.PrettyTextDiff/
6 | */
7 |
8 | (function() {
9 | var $;
10 |
11 | $ = jQuery;
12 |
13 | $.fn.extend({
14 | prettyTextDiff: function(options) {
15 | var dmp, settings;
16 | settings = {
17 | originalContainer: ".original",
18 | changedContainer: ".changed",
19 | diffContainer: ".diff",
20 | cleanup: true,
21 | debug: false
22 | };
23 | settings = $.extend(settings, options);
24 | $.fn.prettyTextDiff.debug("Options: ", settings, settings);
25 | dmp = new diff_match_patch();
26 | return this.each(function() {
27 | var changed, diff_as_html, diffs, original;
28 | if (settings.originalContent && settings.changedContent) {
29 | original = $('').html(settings.originalContent).text();
30 | changed = $('').html(settings.changedContent).text();
31 | } else {
32 | original = $(settings.originalContainer, this).text();
33 | changed = $(settings.changedContainer, this).text();
34 | }
35 | $.fn.prettyTextDiff.debug("Original text found: ", original, settings);
36 | $.fn.prettyTextDiff.debug("Changed text found: ", changed, settings);
37 | diffs = dmp.diff_main(original, changed);
38 | if (settings.cleanup) {
39 | dmp.diff_cleanupSemantic(diffs);
40 | }
41 | $.fn.prettyTextDiff.debug("Diffs: ", diffs, settings);
42 | diff_as_html = $.map(diffs, function(diff) {
43 | return $.fn.prettyTextDiff.createHTML(diff);
44 | });
45 | $(settings.diffContainer, this).html(diff_as_html.join(''));
46 | return this;
47 | });
48 | }
49 | });
50 |
51 | $.fn.prettyTextDiff.debug = function(message, object, settings) {
52 | if (settings.debug) {
53 | return console.log(message, object);
54 | }
55 | };
56 |
57 | $.fn.prettyTextDiff.createHTML = function(diff) {
58 | var data, html, operation, pattern_amp, pattern_gt, pattern_lt, pattern_para, text;
59 | html = [];
60 | pattern_amp = /&/g;
61 | pattern_lt = //g;
63 | pattern_para = /\n/g;
64 | operation = diff[0], data = diff[1];
65 | text = data.replace(pattern_amp, '&').replace(pattern_lt, '<').replace(pattern_gt, '>').replace(pattern_para, '
');
66 | switch (operation) {
67 | case DIFF_INSERT:
68 | return '' + text + '';
69 | case DIFF_DELETE:
70 | return '' + text + '';
71 | case DIFF_EQUAL:
72 | return '' + text + '';
73 | }
74 | };
75 |
76 | }).call(this);
77 |
--------------------------------------------------------------------------------
/static/js/plugins/prettyfile/bootstrap-prettyfile.js:
--------------------------------------------------------------------------------
1 | /*
2 | * jQuery and Bootsrap3 Plugin prettyFile
3 | *
4 | * version 2.0, Jan 20th, 2014
5 | * by episage, sujin2f
6 | * Git repository : https://github.com/episage/bootstrap-3-pretty-file-upload
7 | */
8 | ( function( $ ) {
9 | $.fn.extend({
10 | prettyFile: function( options ) {
11 | var defaults = {
12 | text : "选择文件"
13 | };
14 |
15 | var options = $.extend(defaults, options);
16 | var plugin = this;
17 |
18 | function make_form( $el, text ) {
19 | $el.wrap('');
20 |
21 | $el.hide();
22 | $el.after( '\
23 | \
24 | \
25 | \
26 | \
27 | \
28 |
\
29 | ' );
30 |
31 | return $el.parent();
32 | };
33 |
34 | function bind_change( $wrap, multiple ) {
35 | $wrap.find( 'input[type="file"]' ).change(function () {
36 | // When original file input changes, get its value, show it in the fake input
37 | var files = $( this )[0].files,
38 | info = '';
39 |
40 | if ( files.length == 0 )
41 | return false;
42 |
43 | if ( !multiple || files.length == 1 ) {
44 | var path = $( this ).val().split('\\');
45 | info = path[path.length - 1];
46 | } else if ( files.length > 1 ) {
47 | // Display number of selected files instead of filenames
48 | info = "已选择了" + files.length + ' 个文件';
49 | }
50 |
51 | $wrap.find('.input-append input').val( info );
52 | });
53 | };
54 |
55 | function bind_button( $wrap, multiple ) {
56 | $wrap.find( '.input-append' ).click( function( e ) {
57 | e.preventDefault();
58 | $wrap.find( 'input[type="file"]' ).click();
59 | });
60 | };
61 |
62 | return plugin.each( function() {
63 | $this = $( this );
64 |
65 | if ( $this ) {
66 | var multiple = $this.attr( 'multiple' );
67 |
68 | $wrap = make_form( $this, options.text );
69 | bind_change( $wrap, multiple );
70 | bind_button( $wrap );
71 | }
72 | });
73 | }
74 | });
75 | }( jQuery ));
76 |
77 |
--------------------------------------------------------------------------------
/static/js/plugins/summernote/summernote-zh-CN.js:
--------------------------------------------------------------------------------
1 | (function ($) {
2 | $.extend($.summernote.lang, {
3 | 'zh-CN': {
4 | font: {
5 | bold: '粗体',
6 | italic: '斜体',
7 | underline: '下划线',
8 | strikethrough: '删除线',
9 | clear: '清除格式',
10 | height: '行高',
11 | name: '字体',
12 | size: '字号'
13 | },
14 | image: {
15 | image: '图片',
16 | insert: '插入图片',
17 | resizeFull: '调整至 100%',
18 | resizeHalf: '调整至 50%',
19 | resizeQuarter: '调整至 25%',
20 | floatLeft: '左浮动',
21 | floatRight: '右浮动',
22 | floatNone: '不浮动',
23 | dragImageHere: '将图片拖至此处',
24 | selectFromFiles: '从本地上传',
25 | url: '图片地址'
26 | },
27 | link: {
28 | link: '链接',
29 | insert: '插入链接',
30 | unlink: '去除链接',
31 | edit: '编辑链接',
32 | textToDisplay: '显示文本',
33 | url: '链接地址',
34 | openInNewWindow: '在新窗口打开'
35 | },
36 | video: {
37 | video: '视频',
38 | videoLink: '视频链接',
39 | insert: '插入视频',
40 | url: '视频地址',
41 | providers: '(优酷, Instagram, DailyMotion, Youtube等)'
42 | },
43 | table: {
44 | table: '表格'
45 | },
46 | hr: {
47 | insert: '水平线'
48 | },
49 | style: {
50 | style: '样式',
51 | normal: '普通',
52 | blockquote: '引用',
53 | pre: '代码',
54 | h1: '标题 1',
55 | h2: '标题 2',
56 | h3: '标题 3',
57 | h4: '标题 4',
58 | h5: '标题 5',
59 | h6: '标题 6'
60 | },
61 | lists: {
62 | unordered: '无序列表',
63 | ordered: '有序列表'
64 | },
65 | options: {
66 | help: '帮助',
67 | fullscreen: '全屏',
68 | codeview: '源代码'
69 | },
70 | paragraph: {
71 | paragraph: '段落',
72 | outdent: '减少缩进',
73 | indent: '增加缩进',
74 | left: '左对齐',
75 | center: '居中对齐',
76 | right: '右对齐',
77 | justify: '两端对齐'
78 | },
79 | color: {
80 | recent: '最近使用',
81 | more: '更多',
82 | background: '背景',
83 | foreground: '前景',
84 | transparent: '透明',
85 | setTransparent: '透明',
86 | reset: '重置',
87 | resetToDefault: '默认'
88 | },
89 | shortcut: {
90 | shortcuts: '快捷键',
91 | close: '关闭',
92 | textFormatting: '文本格式',
93 | action: '动作',
94 | paragraphFormatting: '段落格式',
95 | documentStyle: '文档样式'
96 | },
97 | history: {
98 | undo: '撤销',
99 | redo: '重做'
100 | }
101 | }
102 | });
103 | })(jQuery);
104 |
--------------------------------------------------------------------------------
/static/js/plugins/validate/messages_zh.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery Validation Plugin - v1.13.1 - 10/14/2014
2 | * http://jqueryvalidation.org/
3 | * Copyright (c) 2014 Jörn Zaefferer; Licensed MIT */
4 | ! function (a) {
5 | "function" == typeof define && define.amd ? define(["jquery", "jquery.validate.min.js"], a) : a(jQuery)
6 | }(function (a) {
7 | var icon = " ";
8 | a.extend(a.validator.messages, {
9 | required: icon + "必填",
10 | remote: icon + "请修正此栏位",
11 | email: icon + "请输入有效的电子邮件",
12 | url: icon + "请输入有效的网址",
13 | date: icon + "请输入有效的日期",
14 | dateISO: icon + "请输入有效的日期 (YYYY-MM-DD)",
15 | number: icon + "请输入正确的数字",
16 | digits: icon + "只能输入数字",
17 | creditcard: icon + "请输入有效的信用卡号码",
18 | equalTo: icon + "你的输入不相同",
19 | extension: icon + "请输入有效的后缀",
20 | maxlength: a.validator.format(icon + "最多 {0} 个字"),
21 | minlength: a.validator.format(icon + "最少 {0} 个字"),
22 | rangelength: a.validator.format(icon + "请输入长度为 {0} 至 {1} 之间的字串"),
23 | range: a.validator.format(icon + "请输入 {0} 至 {1} 之间的数值"),
24 | max: a.validator.format(icon + "请输入不大于 {0} 的数值"),
25 | min: a.validator.format(icon + "请输入不小于 {0} 的数值")
26 | })
27 | });
28 |
--------------------------------------------------------------------------------
/static/js/plugins/webuploader/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | 403 Forbidden
4 |
5 | Forbidden
6 | You don't have permission to access /theme/hplus/js/plugins/webuploader/
7 | on this server.
8 |
9 | Apache Server at www.zi-han.net Port 80
10 |
11 |
--------------------------------------------------------------------------------
/static/js/socketclient.js:
--------------------------------------------------------------------------------
1 | function SocketClient(ip,port,query) {
2 | var _this = this;
3 | this.socket = '';
4 | this.uid = 0;
5 | this.sign = '';
6 | this.connect = function() {
7 | this.socket = new WebSocket('ws://'+ip+':'+port+'/'+query);
8 | this.socket.onopen = function() {
9 | _this.onOpen()
10 | }
11 | this.socket.onmessage = function(event) {
12 | data = event.data;
13 | data = data.split("")
14 | _this.uid = data[0];
15 | _this.sign = data[1];
16 | text = data[2];
17 |
18 | if(text!='SETUID') {
19 | _this.onData(text);
20 | } else {
21 | _this.onRegist()
22 | }
23 | }
24 | this.socket.onclose = function(event) {
25 | _this.onClose();
26 | };
27 | }
28 | this.onRegist = function() {
29 |
30 | }
31 | this.onClose = function() {
32 |
33 | }
34 |
35 | this.onOpen = function() {
36 |
37 | }
38 |
39 | this.onData = function(text) {
40 |
41 | }
42 |
43 | this.sendData = function (text) {
44 | var data = this.uid+''+this.sign+''+text
45 | this.socket.send(data);
46 | }
47 |
48 | this.close = function() {
49 | this.socket.close();
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/static/js/welcome.min.js:
--------------------------------------------------------------------------------
1 | layer.config({extend:["extend/layer.ext.js","skin/moon/style.css"],skin:"layer-ext-moon"}),layer.ready(function(){function e(){parent.layer.open({title:"初见倾心,再见动情",type:1,area:["700px","auto"],content:t,btn:["确定","取消"]})}var t=$("#welcome-template").html();$("a.viewlog").click(function(){return e(),!1}),$("#pay-qrcode").click(function(){var e=$(this).html();parent.layer.open({title:!1,type:1,closeBtn:!1,shadeClose:!0,area:["600px","auto"],content:e})}),console.log("欢迎使用H+,如果您在使用的过程中有碰到问题,可以参考开发文档,感谢您的支持。")});
2 |
--------------------------------------------------------------------------------
/static/line.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Line Chart
5 |
6 |
7 |
8 |
13 |
14 |
15 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/static/lockscreen.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | H+ 后台主题UI框架 - 登录超时
13 |
14 |
15 |
16 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |

37 |
38 |
Beaut-zihan
39 |
您需要再次输入密码
40 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/static/login.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | H+ 后台主题UI框架 - 登录
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
H+
34 |
35 |
36 |
欢迎使用 H+
37 |
38 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/static/login_v2.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | H+ 后台主题UI框架 - 登录
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
21 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
[ H+ ]
34 |
35 |
36 |
欢迎使用 H+ 后台主题UI框架
37 |
38 | - 优势一
39 | - 优势二
40 | - 优势三
41 | - 优势四
42 | - 优势五
43 |
44 |
还没有账号? 立即注册»
45 |
46 |
47 |
57 |
58 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
--------------------------------------------------------------------------------
/static/register.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | H+ 后台主题UI框架 - 注册
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
H+
32 |
33 |
34 |
欢迎注册 H+
35 |
创建一个H+新账户
36 |
58 |
59 |
60 |
61 |
62 |
63 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/templates/app_base.html:
--------------------------------------------------------------------------------
1 | {% load staticfiles %}
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | {% block css %}{% endblock %}
29 |
30 |
31 | {% block title %}默认标题{% endblock %}
32 |
33 |
34 |
35 |
36 |
37 | {% block content %}
38 |
这里是默认内容,所有继承自这个模板的,如果不覆盖就显示这里的默认内容。
39 | {% endblock %}
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 | {% block js %}{% endblock %}
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/templates/menu_header_module.html:
--------------------------------------------------------------------------------
1 | {% load staticfiles %}
2 |
3 |
29 |
--------------------------------------------------------------------------------
/templates/menu_mysql_module.html:
--------------------------------------------------------------------------------
1 | {% load staticfiles %}
2 |
3 |
4 | MySQL维护
5 |
6 | -
7 | 实例管理
8 |
14 |
15 | -
16 |
17 | -
18 |
19 | -
20 | SQL审核
21 |
27 |
28 | -
29 | 运维工具
30 |
31 | -
32 |
33 | -
34 |
35 | -
36 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------