├── .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 |
16 | 17 |
18 | 19 | 20 | 业务组列表 21 | 22 |
23 |
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 |
70 | 77 |
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 |
16 | 17 | 23 |
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 |
70 | 77 |
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 |
32 |
33 | 34 |
35 | 36 |
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 | 3 | 4 | 5 | 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 | 3 | 4 | 5 | 6 | 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 | 3 | 4 | 5 | 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 | 36 |
37 |
38 |
39 | 活动区域 40 |
41 |
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 |
21 |
22 |  @Name:laydate-v 日期控件说明
23 |  @Author:贤心
24 |  @Blog:http://sentsin.com
25 |  @官网:http://sentsin.com/layui/laydate
26 |  @开发版源码:http://sentsin.com/lily/lib/laydate/laydate.dev.js
27 | 
28 | 【注意事项】
29 | 一、请千万勿移动laydate中的目录结构,它们具有完整的依赖体系。使用时,只需引入laydate/laydate.js即可。
30 | 二、如果您的网站的js采用合并或模块加载,您需要打开laydate.js,修改path。
31 | 三、laydate遵循LGPL开源协议,永不收费!
32 | 四、版权最终解释权:贤心。
33 | 
34 | 演示二: 35 |
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 |
9 |
10 | 11 |
12 |
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 | image 37 |
38 |

Beaut-zihan

39 |

您需要再次输入密码

40 |
41 |
42 | 43 |
44 | 45 |
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 |
39 |
40 | 41 |
42 |
43 | 44 |
45 | 46 | 47 | 48 |

忘记密码了? | 注册一个新账号 49 |

50 | 51 |
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 | 46 |
47 |
48 |
49 |

登录:

50 |

登录到H+后台主题UI框架

51 | 52 | 53 | 忘记密码了? 54 | 55 |
56 |
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 |
37 |
38 | 39 |
40 |
41 | 42 |
43 |
44 | 45 |
46 |
47 |
48 | 50 |
51 |
52 | 53 | 54 |

已经有账户了?点此登录 55 |

56 | 57 |
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 | 40 |
  • 41 | --------------------------------------------------------------------------------