├── .gitattributes ├── LICENSE ├── README.md ├── backend ├── .gitignore ├── README.md ├── account │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── migrations │ │ └── __init__.py │ ├── mixins.py │ ├── models.py │ ├── serializers.py │ ├── tests.py │ ├── urls.py │ └── views.py ├── dashboard │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── migrations │ │ └── __init__.py │ ├── mixins.py │ ├── models.py │ ├── serializers.py │ ├── tests.py │ ├── urls.py │ └── views.py ├── logs │ └── .gitignore ├── manage.py ├── media │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── migrations │ │ └── __init__.py │ ├── mixins.py │ ├── models.py │ ├── tests.py │ ├── urls.py │ └── views.py ├── requirements.txt ├── sqlmng │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── data.py │ ├── management.py │ ├── migrations │ │ └── __init__.py │ ├── mixins.py │ ├── models.py │ ├── permissions.py │ ├── serializers.py │ ├── tasks.py │ ├── tests.py │ ├── urls.py │ └── views │ │ ├── __init__.py │ │ ├── auth_rules.py │ │ ├── db_cluster.py │ │ ├── inception_check.py │ │ ├── select_data.py │ │ ├── settings.py │ │ ├── step.py │ │ ├── suggestion.py │ │ ├── target_db.py │ │ └── workorder_main.py ├── sqlweb │ ├── __init__.py │ ├── gunicorn_config.py │ ├── settings.py │ ├── urls.py │ ├── uwsgi.ini │ └── wsgi.py ├── utils │ ├── __init__.py │ ├── auto_dict.py │ ├── basecomponent.py │ ├── basemixins.py │ ├── basemodels.py │ ├── baseviews.py │ ├── dbcrypt.py │ ├── exceptions.py │ ├── inception_test.py │ ├── ldaptools.py │ ├── lock.py │ ├── mail.py │ ├── permissions.py │ ├── sqltools.py │ ├── tasks.py │ ├── unitaryauth.py │ └── wrappers.py └── workflow │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── migrations │ └── __init__.py │ ├── models.py │ ├── serializers.py │ ├── tests.py │ └── views.py └── frontend ├── .babelrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.json ├── .gitignore ├── .postcssrc.js ├── .travis.yml ├── LICENSE ├── README.md ├── build ├── config.js ├── webpack.base.config.js ├── webpack.dev.config.js └── webpack.prod.config.js ├── dist ├── dist │ ├── 0.f706dad6998257a946d8.chunk.js │ ├── 05acfdb568b3df49ad31355b19495d4a.woff │ ├── 1.f706dad6998257a946d8.chunk.js │ ├── 10.f706dad6998257a946d8.chunk.js │ ├── 11.f706dad6998257a946d8.chunk.js │ ├── 12.f706dad6998257a946d8.chunk.js │ ├── 13.f706dad6998257a946d8.chunk.js │ ├── 14.f706dad6998257a946d8.chunk.js │ ├── 15.f706dad6998257a946d8.chunk.js │ ├── 18.f706dad6998257a946d8.chunk.js │ ├── 2.f706dad6998257a946d8.chunk.js │ ├── 24712f6c47821394fba7942fbb52c3b2.ttf │ ├── 2c2ae068be3b089e0a5b59abb1831550.eot │ ├── 3.f706dad6998257a946d8.chunk.js │ ├── 4.f706dad6998257a946d8.chunk.js │ ├── 5.f706dad6998257a946d8.chunk.js │ ├── 6.f706dad6998257a946d8.chunk.js │ ├── 621bd386841f74e0053cb8e67f8a0604.svg │ ├── 7.f706dad6998257a946d8.chunk.js │ ├── 8.f706dad6998257a946d8.chunk.js │ ├── 9.f706dad6998257a946d8.chunk.js │ ├── c2a57202c856f8b4b12a79029911f8e2.jpg │ ├── cce1a3aa586ce757cc2cbfce7ebdfde5.png │ ├── fonts │ │ ├── ionicons.eot │ │ ├── ionicons.svg │ │ ├── ionicons.ttf │ │ └── ionicons.woff │ ├── g.css │ ├── langs │ │ ├── en_GB.js │ │ └── zh_CN.GB2312.js │ ├── main.f706dad6998257a946d8.css │ ├── main.f706dad6998257a946d8.js │ ├── plugins │ │ ├── advlist │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── anchor │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── autolink │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── autoresize │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── autosave │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── bbcode │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── charmap │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── code │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── codesample │ │ │ ├── css │ │ │ │ └── prism.css │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── colorpicker │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── contextmenu │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── directionality │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── emoticons │ │ │ ├── img │ │ │ │ ├── smiley-cool.gif │ │ │ │ ├── smiley-cry.gif │ │ │ │ ├── smiley-embarassed.gif │ │ │ │ ├── smiley-foot-in-mouth.gif │ │ │ │ ├── smiley-frown.gif │ │ │ │ ├── smiley-innocent.gif │ │ │ │ ├── smiley-kiss.gif │ │ │ │ ├── smiley-laughing.gif │ │ │ │ ├── smiley-money-mouth.gif │ │ │ │ ├── smiley-sealed.gif │ │ │ │ ├── smiley-smile.gif │ │ │ │ ├── smiley-surprised.gif │ │ │ │ ├── smiley-tongue-out.gif │ │ │ │ ├── smiley-undecided.gif │ │ │ │ ├── smiley-wink.gif │ │ │ │ └── smiley-yell.gif │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── fullpage │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── fullscreen │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── help │ │ │ ├── img │ │ │ │ └── logo.png │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── hr │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── image │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── imagetools │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── importcss │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── insertdatetime │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── legacyoutput │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── link │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── lists │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── media │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── nonbreaking │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── noneditable │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── pagebreak │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── paste │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── preview │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── print │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── save │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── searchreplace │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── spellchecker │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── tabfocus │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── table │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── template │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── textcolor │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── textpattern │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── toc │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── visualblocks │ │ │ ├── css │ │ │ │ └── visualblocks.css │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── visualchars │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ └── wordcount │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ ├── r.css │ ├── skins │ │ └── lightgray │ │ │ ├── content.inline.min.css │ │ │ ├── content.min.css │ │ │ ├── content.mobile.min.css │ │ │ ├── fonts │ │ │ ├── tinymce-mobile.woff │ │ │ ├── tinymce-small.eot │ │ │ ├── tinymce-small.svg │ │ │ ├── tinymce-small.ttf │ │ │ ├── tinymce-small.woff │ │ │ ├── tinymce.eot │ │ │ ├── tinymce.svg │ │ │ ├── tinymce.ttf │ │ │ └── tinymce.woff │ │ │ ├── img │ │ │ ├── anchor.gif │ │ │ ├── loader.gif │ │ │ ├── object.gif │ │ │ └── trans.gif │ │ │ ├── skin.min.css │ │ │ └── skin.mobile.min.css │ ├── td_icon.ico │ ├── themes │ │ ├── inlite │ │ │ ├── index.js │ │ │ ├── theme.js │ │ │ └── theme.min.js │ │ └── modern │ │ │ ├── index.js │ │ │ ├── theme.js │ │ │ └── theme.min.js │ ├── vender-base.f706dad6998257a946d8.js │ ├── vender-exten.f706dad6998257a946d8.js │ └── y.css └── index.html ├── github-gif ├── access.gif ├── article-publish.gif ├── code.png ├── count-to.gif ├── dragable-list.gif ├── dragable-table.gif ├── editable-table.gif ├── error-page.gif ├── exportable-table.gif ├── home.gif ├── image-editor.gif ├── locking.gif ├── message.gif ├── page-tags.gif ├── sidebarmenu.gif ├── split-pane.gif ├── table2image.gif ├── theme.gif ├── upload.gif └── workflow.gif ├── index.html ├── package-lock.json ├── package.json ├── src ├── api │ ├── account │ │ └── account.js │ ├── dashboard │ │ └── chart.js │ ├── login.js │ └── sql │ │ ├── authRules.js │ │ ├── check.js │ │ ├── cluster.js │ │ ├── dbs.js │ │ ├── dbworkorder.js │ │ ├── inception.js │ │ ├── inceptionSettings.js │ │ ├── mailactions.js │ │ ├── sqlquery.js │ │ ├── sqlsettings.js │ │ ├── strategy.js │ │ └── suggestion.js ├── app.vue ├── files │ ├── install.md │ └── soar ├── images │ ├── cropper-test.png │ ├── github │ │ ├── api.png │ │ ├── check.png │ │ ├── dashboard.png │ │ ├── detail1.png │ │ ├── detail2.png │ │ ├── detail3.png │ │ ├── list.png │ │ ├── mail.png │ │ ├── plantformsettings.png │ │ ├── platsettings.png │ │ ├── query.png │ │ └── user.png │ ├── logo-min.jpg │ ├── logo.jpg │ └── mysql.png ├── libs │ ├── http.js │ ├── table2excel.js │ └── util.js ├── locale │ ├── index.js │ └── locale.js ├── main.js ├── router │ ├── index.js │ └── router.js ├── static │ └── base.css ├── store │ ├── index.js │ └── modules │ │ ├── app.js │ │ ├── mystore.js │ │ └── user.js ├── styles │ ├── common.less │ ├── fonts │ │ ├── ionicons.eot │ │ ├── ionicons.svg │ │ ├── ionicons.ttf │ │ └── ionicons.woff │ ├── loading.less │ └── login_bg.jpg ├── template │ └── index.ejs ├── utils │ ├── account │ │ └── account.js │ ├── base │ │ ├── contains.js │ │ └── date.js │ └── sql │ │ ├── data.js │ │ ├── formatData.js │ │ └── inception.js ├── vendors │ ├── vendors.base.js │ └── vendors.exten.js └── views │ ├── Main.vue │ ├── access │ ├── access-test.vue │ ├── access.less │ └── access.vue │ ├── account │ ├── group.vue │ └── user.vue │ ├── login.less │ ├── login.vue │ ├── main-components │ ├── breadcrumb-nav.vue │ ├── fullscreen.vue │ ├── lockscreen │ │ ├── components │ │ │ ├── locking-page.vue │ │ │ └── unlock.vue │ │ ├── lockscreen.vue │ │ └── styles │ │ │ └── unlock.less │ ├── message-tip.vue │ ├── shrinkable-menu │ │ ├── components │ │ │ ├── sidebarMenu.vue │ │ │ └── sidebarMenuShrink.vue │ │ ├── shrinkable-menu.vue │ │ └── styles │ │ │ └── menu.less │ ├── tags-page-opened.vue │ └── theme-switch │ │ ├── theme-switch.vue │ │ └── theme │ │ ├── g.css │ │ ├── r.css │ │ └── y.css │ ├── main.less │ ├── my-components │ ├── area-linkage │ │ ├── area-linkage.less │ │ ├── area-linkage.vue │ │ ├── components │ │ │ ├── al-cascader.vue │ │ │ └── al-selector.vue │ │ └── util │ │ │ └── index.js │ ├── count-to │ │ ├── CountTo.vue │ │ ├── count-to.less │ │ └── count-to.vue │ ├── draggable-list │ │ ├── draggable-list.less │ │ └── draggable-list.vue │ ├── file-upload │ │ ├── file-upload.vue │ │ └── upload.less │ ├── image-editor │ │ ├── cropper.min.css │ │ ├── image-editor.less │ │ └── image-editor.vue │ ├── markdown-editor │ │ ├── markdown-editor.less │ │ ├── markdown-editor.vue │ │ └── simplemde.min.css │ ├── public │ │ └── copyright.vue │ ├── split-pane │ │ ├── split-pane-page.vue │ │ └── split-pane │ │ │ ├── index.js │ │ │ ├── split-pane.less │ │ │ └── split-pane.vue │ ├── sql │ │ └── editor.vue │ └── text-editor │ │ ├── text-editor.vue │ │ └── tinymce │ │ ├── langs │ │ ├── en_GB.js │ │ └── zh_CN.GB2312.js │ │ ├── plugins │ │ ├── advlist │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── anchor │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── autolink │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── autoresize │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── autosave │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── bbcode │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── charmap │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── code │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── codesample │ │ │ ├── css │ │ │ │ └── prism.css │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── colorpicker │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── contextmenu │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── directionality │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── emoticons │ │ │ ├── img │ │ │ │ ├── smiley-cool.gif │ │ │ │ ├── smiley-cry.gif │ │ │ │ ├── smiley-embarassed.gif │ │ │ │ ├── smiley-foot-in-mouth.gif │ │ │ │ ├── smiley-frown.gif │ │ │ │ ├── smiley-innocent.gif │ │ │ │ ├── smiley-kiss.gif │ │ │ │ ├── smiley-laughing.gif │ │ │ │ ├── smiley-money-mouth.gif │ │ │ │ ├── smiley-sealed.gif │ │ │ │ ├── smiley-smile.gif │ │ │ │ ├── smiley-surprised.gif │ │ │ │ ├── smiley-tongue-out.gif │ │ │ │ ├── smiley-undecided.gif │ │ │ │ ├── smiley-wink.gif │ │ │ │ └── smiley-yell.gif │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── fullpage │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── fullscreen │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── help │ │ │ ├── img │ │ │ │ └── logo.png │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── hr │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── image │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── imagetools │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── importcss │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── insertdatetime │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── legacyoutput │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── link │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── lists │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── media │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── nonbreaking │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── noneditable │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── pagebreak │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── paste │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── preview │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── print │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── save │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── searchreplace │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── spellchecker │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── tabfocus │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── table │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── template │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── textcolor │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── textpattern │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── toc │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── visualblocks │ │ │ ├── css │ │ │ │ └── visualblocks.css │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── visualchars │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ └── wordcount │ │ │ ├── index.js │ │ │ ├── plugin.js │ │ │ └── plugin.min.js │ │ ├── skins │ │ └── lightgray │ │ │ ├── content.inline.min.css │ │ │ ├── content.min.css │ │ │ ├── content.mobile.min.css │ │ │ ├── fonts │ │ │ ├── tinymce-mobile.woff │ │ │ ├── tinymce-small.eot │ │ │ ├── tinymce-small.svg │ │ │ ├── tinymce-small.ttf │ │ │ ├── tinymce-small.woff │ │ │ ├── tinymce.eot │ │ │ ├── tinymce.svg │ │ │ ├── tinymce.ttf │ │ │ └── tinymce.woff │ │ │ ├── img │ │ │ ├── anchor.gif │ │ │ ├── loader.gif │ │ │ ├── object.gif │ │ │ └── trans.gif │ │ │ ├── skin.min.css │ │ │ └── skin.mobile.min.css │ │ └── themes │ │ ├── inlite │ │ ├── index.js │ │ ├── theme.js │ │ └── theme.min.js │ │ └── modern │ │ ├── index.js │ │ ├── theme.js │ │ └── theme.min.js │ ├── own-space │ ├── own-space.less │ └── own-space.vue │ ├── pandect │ ├── components │ │ ├── countUp.vue │ │ ├── dataSourcePie.vue │ │ ├── inforCard.vue │ │ ├── serviceRequests.vue │ │ ├── styles │ │ │ ├── infor-card.less │ │ │ └── to-do-list-item.less │ │ ├── toDoListItem.vue │ │ ├── userFlow.vue │ │ └── visiteVolume.vue │ ├── dashboard.vue │ ├── home.less │ └── map-data │ │ ├── china.json │ │ ├── get-city-value.js │ │ ├── get-geography-value.js │ │ └── get-style-json.js │ └── sql │ ├── authRules.vue │ ├── check.vue │ ├── components │ ├── baseInfo.vue │ ├── handleResult.vue │ ├── sqlContentInfo.vue │ └── suggestionInfo.vue │ ├── dbList.vue │ ├── dbcluster.vue │ ├── dbworkorder.vue │ ├── inceptionDetail.vue │ ├── inceptionList.vue │ ├── inceptionSettings.vue │ ├── optimize.vue │ ├── personalSettings.vue │ └── platformSettings.vue └── td_icon.ico /.gitattributes: -------------------------------------------------------------------------------- 1 | 2 | *.js linguist-language=Vue 3 | -------------------------------------------------------------------------------- /backend/.gitignore: -------------------------------------------------------------------------------- 1 | *.7z 2 | *.dmg 3 | *.gz 4 | *.iso 5 | *.jar 6 | *.rar 7 | *.tar 8 | *.zip 9 | *.log 10 | *.sql 11 | -------------------------------------------------------------------------------- /backend/README.md: -------------------------------------------------------------------------------- 1 | # backend 2 | 3 | > A Django project 4 | 5 | ## Build Setup 6 | 7 | ``` bash 8 | # install dependencies 9 | pip install --upgrade pip 10 | pip install -r requirements.txt --trusted-host mirrors.aliyun.com -i https://mirrors.aliyun.com/pypi/simple/ 11 | ``` 12 | 13 | ## Start Services 14 | Make sure that the service has been deployed successfully 15 | - Inception 16 | - Redis 17 | - Mysql 18 | - Celery 19 | - Django 20 | 21 | -------------------------------------------------------------------------------- /backend/account/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/backend/account/__init__.py -------------------------------------------------------------------------------- /backend/account/admin.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | from .models import User 4 | from django.contrib import admin 5 | 6 | # Register your models here. 7 | 8 | class UserAdmin(admin.ModelAdmin): 9 | list_display = ( 10 | 'username', 11 | 'email', 12 | 'role', 13 | 'remark', 14 | ) 15 | 16 | admin.site.register(User, UserAdmin) 17 | -------------------------------------------------------------------------------- /backend/account/apps.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | from django.apps import AppConfig 5 | 6 | 7 | class AccountConfig(AppConfig): 8 | name = 'account' 9 | -------------------------------------------------------------------------------- /backend/account/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/backend/account/migrations/__init__.py -------------------------------------------------------------------------------- /backend/account/mixins.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from django.conf import settings 3 | from sqlmng.models import DbConf 4 | 5 | class SetPerm(object): 6 | 7 | perm = settings.PERM_DATABASE 8 | 9 | def get_perms(self, perm_list): 10 | perms = [] 11 | for perm in perm_list: 12 | db_instance = DbConf.objects.filter(pk=perm.object_pk) 13 | if db_instance: 14 | item = { 15 | 'id': int(perm.object_pk), 16 | 'name': db_instance[0].name 17 | } 18 | perms.append(item) 19 | return perms 20 | 21 | def create_perm(self, instance, db_id_list, user_group): 22 | for db_id in db_id_list: 23 | obj = DbConf.objects.get(id=db_id) 24 | user_group.objects.assign_perm(self.perm, instance, obj=obj) 25 | -------------------------------------------------------------------------------- /backend/account/models.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from django.db import models 3 | from django.contrib.auth.models import AbstractUser 4 | 5 | class User(AbstractUser): 6 | ROLES = ( 7 | ('developer_supremo', u'总监'), 8 | ('developer_manager', u'经理'), 9 | ('developer', u'研发'), 10 | ) 11 | leader = models.ForeignKey('User', null=True, blank=True, on_delete=models.SET_NULL, related_name='leader_devs') 12 | admin_mail = models.ForeignKey('User', null=True, blank=True, on_delete=models.SET_NULL, related_name='admin_devs') 13 | role = models.CharField(max_length=32, default='developer', choices=ROLES) 14 | mail_list_extend = models.TextField(null=True, blank=True) 15 | remark = models.CharField(max_length=128, default='', blank=True) 16 | 17 | class Meta: 18 | verbose_name_plural = u'用户' 19 | 20 | def __unicode__(self): 21 | return self.username 22 | -------------------------------------------------------------------------------- /backend/account/tests.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | from django.test import TestCase 5 | 6 | # Create your tests here. 7 | -------------------------------------------------------------------------------- /backend/account/urls.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from django.conf.urls import include, url 3 | from rest_framework.routers import DefaultRouter 4 | from .views import * 5 | 6 | router = DefaultRouter() 7 | router.register(r'permissions', PermissionViewSet) 8 | router.register(r'groups', GroupViewSet) 9 | router.register(r'users', UserViewSet) 10 | router.register(r'personal', PersonalCenterViewSet, base_name='PersonalCenterViewSet') 11 | 12 | urlpatterns = [ 13 | url(r'^', include(router.urls)), 14 | url(r'^unitaryauth/$', UnitaryAuthView.as_view()) 15 | ] 16 | -------------------------------------------------------------------------------- /backend/dashboard/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/backend/dashboard/__init__.py -------------------------------------------------------------------------------- /backend/dashboard/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /backend/dashboard/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class DashboardConfig(AppConfig): 5 | name = 'dashboard' 6 | -------------------------------------------------------------------------------- /backend/dashboard/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/backend/dashboard/migrations/__init__.py -------------------------------------------------------------------------------- /backend/dashboard/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | # Create your models here. 4 | -------------------------------------------------------------------------------- /backend/dashboard/serializers.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/backend/dashboard/serializers.py -------------------------------------------------------------------------------- /backend/dashboard/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /backend/dashboard/urls.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from django.conf.urls import include, url 3 | from rest_framework.routers import DefaultRouter 4 | from .views import * 5 | 6 | router = DefaultRouter() 7 | router.register(r'chart', ChartViewSet) 8 | 9 | urlpatterns = [ 10 | url(r'^', include(router.urls)), 11 | ] 12 | -------------------------------------------------------------------------------- /backend/dashboard/views.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | from rest_framework.response import Response 4 | from utils.baseviews import ReturnFormatMixin as res 5 | from utils.baseviews import MaxSizePagination, BaseView 6 | from sqlmng.models import InceptionWorkOrder 7 | from sqlmng.serializers import * 8 | from account.serializers import * 9 | from .mixins import HandleData 10 | 11 | class ChartViewSet(HandleData, BaseView): 12 | ''' 13 | Dashboard 查询 14 | ''' 15 | pagination_class = MaxSizePagination 16 | queryset = InceptionWorkOrder.objects.all() 17 | serializer_user = UserSerializer 18 | serializer_group = GroupSerializer 19 | serializer_class = ListInceptionSerializer 20 | 21 | def list(self, request, *args, **kwargs): 22 | ret = res.get_ret() 23 | ret['data']['user_info'] = self.get_user_info 24 | ret['data']['count_data'] = self.get_count_data 25 | ret['data']['sql_status_data'] = self.get_status_data 26 | ret['data']['sql_trend_data'] = self.get_trend_data 27 | ret['data']['sql_today_data'] = self.get_today_data 28 | ret['data']['sql_type_data'] = self.get_type_data 29 | return Response(ret) 30 | -------------------------------------------------------------------------------- /backend/logs/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore everything in this directory 2 | * 3 | # Except this file 4 | !.gitignore 5 | -------------------------------------------------------------------------------- /backend/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", "sqlweb.settings") 7 | try: 8 | from django.core.management import execute_from_command_line 9 | except ImportError as exc: 10 | raise ImportError( 11 | "Couldn't import Django. Are you sure it's installed and " 12 | "available on your PYTHONPATH environment variable? Did you " 13 | "forget to activate a virtual environment?" 14 | ) from exc 15 | execute_from_command_line(sys.argv) 16 | -------------------------------------------------------------------------------- /backend/media/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/backend/media/__init__.py -------------------------------------------------------------------------------- /backend/media/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /backend/media/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class MediaConfig(AppConfig): 5 | name = 'media' 6 | -------------------------------------------------------------------------------- /backend/media/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/backend/media/migrations/__init__.py -------------------------------------------------------------------------------- /backend/media/mixins.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import os 3 | import json 4 | from django.conf import settings 5 | from rest_framework.views import APIView 6 | from rest_framework.exceptions import ParseError 7 | from django.http import StreamingHttpResponse 8 | from utils.basemixins import PromptMixin 9 | 10 | class RenderFile(object): 11 | path = settings.MEDIA.get('sql_file_path') 12 | 13 | def create_file(self, params, content): 14 | pk, sfx = params.get('pk'), params.get('sfx') 15 | file_name = '{}.{}'.format(pk, sfx) 16 | if not os.path.exists(self.path): 17 | os.makedirs(self.path) 18 | path = os.path.join(self.path, file_name) 19 | with open(path, 'w') as f: 20 | content_list = json.loads(content) 21 | length = len(content_list) 22 | if isinstance(content_list, list): 23 | for row in content_list: 24 | f.write(str(row)) 25 | if content_list.index(row) < length - 1: 26 | f.write('\n') 27 | else: 28 | f.write(content) 29 | return path, file_name 30 | 31 | def file_iterator(self, file_path, chunk_size=512): 32 | with open(file_path) as f: 33 | while True: 34 | c = f.read(chunk_size) 35 | if c: 36 | yield c 37 | else: 38 | break 39 | 40 | class DownloadBaseView(PromptMixin, RenderFile, APIView): 41 | 42 | def check_content(self): 43 | content = self.get_content() 44 | if not content: 45 | raise ParseError(self.get_content_fail) 46 | return content 47 | 48 | def get(self, request, *args, **kwargs): 49 | content = self.check_content() 50 | file_path, file_name = self.create_file(kwargs, content) 51 | response = StreamingHttpResponse(self.file_iterator(file_path)) 52 | response['Content-Type'] = 'application/octet-stream' 53 | response['Content-Disposition'] = 'attachment;filename="{0}"'.format(file_name) 54 | return response 55 | -------------------------------------------------------------------------------- /backend/media/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | # Create your models here. 4 | -------------------------------------------------------------------------------- /backend/media/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /backend/media/urls.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from django.conf.urls import url 3 | from.views import SqlFileView 4 | 5 | urlpatterns = [ 6 | url(r'^download/sqlhandle/(?P\d+).(?P\w+)$', SqlFileView.as_view()) 7 | ] -------------------------------------------------------------------------------- /backend/media/views.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from sqlmng.models import InceptionWorkOrder 3 | from .mixins import DownloadBaseView 4 | 5 | class SqlFileView(DownloadBaseView): 6 | ''' 7 | 文件下载 8 | ''' 9 | model = InceptionWorkOrder 10 | 11 | def get_content(self): 12 | pk = self.kwargs.get('pk') 13 | data_type = self.request.GET.get('data_type') 14 | instance = self.model.objects.get(pk=pk) 15 | content = getattr(instance, data_type) 16 | return content 17 | -------------------------------------------------------------------------------- /backend/requirements.txt: -------------------------------------------------------------------------------- 1 | python-ldap==3.2.0 2 | cryptography==2.3 3 | redis==2.10.6 4 | celery==3.1.22 5 | celery-with-redis==3.0 6 | uwsgi==2.0.17.1 7 | gunicorn==19.9.0 8 | pymysql==0.9.2 9 | django==2.0.7 10 | djangorestframework==3.8.2 11 | django-filter==2.0.0 12 | django-rest-swagger==2.1.1 13 | djangorestframework-jwt==1.11.0 14 | django-cors-headers==2.4.0 15 | django-celery==3.2.2 16 | djangorestframework-bulk==0.2.1 17 | django-guardian==1.4.9 18 | -------------------------------------------------------------------------------- /backend/sqlmng/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/backend/sqlmng/__init__.py -------------------------------------------------------------------------------- /backend/sqlmng/admin.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | from django.contrib import admin 5 | 6 | # Register your models here. 7 | -------------------------------------------------------------------------------- /backend/sqlmng/apps.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | from django.apps import AppConfig 5 | 6 | 7 | class SqlmngConfig(AppConfig): 8 | name = 'sqlmng' 9 | -------------------------------------------------------------------------------- /backend/sqlmng/management.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from django.conf import settings 3 | from django.dispatch import receiver 4 | from django.db.models.signals import post_migrate 5 | from django.contrib.contenttypes.models import ContentType 6 | from django.contrib.auth.models import Permission 7 | from .models import * 8 | from .data import * 9 | 10 | class AppMap(object): 11 | 12 | content_type = 'dbconf' 13 | perm = settings.PERM_DATABASE 14 | 15 | @property 16 | def data_list(self): 17 | return ( 18 | (InceptionConnection, inception_conn), 19 | (SqlSettings, sql_settings) 20 | ) 21 | 22 | def handle_data(self, model, data, count): 23 | queryset = model.objects.filter(**data) 24 | if queryset.count() is not count: 25 | queryset.delete() 26 | model.objects.create(**data) 27 | 28 | def sqlmng(self): 29 | for item in self.data_list: 30 | self.handle_data(item[0], item[1][0], 1) 31 | 32 | def auth(self): 33 | content_type = ContentType.objects.filter(model=self.content_type) 34 | if content_type: 35 | data = { 36 | 'name': 'Can manage target database', 37 | 'content_type': content_type[0], 38 | 'codename': self.perm 39 | } 40 | self.handle_data(Permission, data, 1) 41 | 42 | @receiver(post_migrate) 43 | def callback(sender, **kwargs): 44 | sender_name = sender.name.split('.')[-1] 45 | func = getattr(AppMap(), sender_name, None) 46 | if func: 47 | func() -------------------------------------------------------------------------------- /backend/sqlmng/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/backend/sqlmng/migrations/__init__.py -------------------------------------------------------------------------------- /backend/sqlmng/permissions.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from rest_framework.exceptions import PermissionDenied 3 | from rest_framework import permissions 4 | from utils.permissions import SAFE_METHODS 5 | from utils.basemixins import HttpMixin, AppellationMixin, PromptMixin 6 | from sqlmng.serializers import AuthRulesSerializer 7 | from sqlmng.models import * 8 | 9 | reject_perms = ['reject'] 10 | approve_perms = ['approve', 'disapprove'] 11 | handle_perms = ['execute', 'rollback', 'cron'] 12 | 13 | class IsHandleAble(HttpMixin, AppellationMixin, permissions.BasePermission): 14 | 15 | def parse_result(self, has_auth, desc): 16 | if not has_auth: 17 | raise PermissionDenied(desc) 18 | return True 19 | 20 | def get_approve_user(self, obj): 21 | approve_step_instance = obj.work_order.step_set.order_by('id')[1] 22 | return approve_step_instance.user 23 | 24 | def has_object_permission(self, request, view, obj): 25 | user = request.user 26 | env = obj.env 27 | is_manual_review = obj.is_manual_review 28 | role = self.admin if user.is_superuser else user.role 29 | action = self.get_urls_action(request) 30 | if (request.method in SAFE_METHODS and action not in reject_perms + approve_perms + handle_perms) or env == self.env_test: 31 | return True 32 | if obj.is_manual_review is True: 33 | approve_user = self.get_approve_user(obj) 34 | if action in handle_perms: 35 | if not obj.work_order.status: 36 | raise PermissionDenied(PromptMixin.require_handleable) 37 | if approve_user == user: 38 | raise PermissionDenied(PromptMixin.require_different) 39 | elif action in approve_perms: 40 | if approve_user != user and role != self.dev_spm: 41 | raise PermissionDenied(PromptMixin.require_same) 42 | return self.check_perm(env, is_manual_review, role, action) 43 | 44 | def check_perm(self, env, is_manual_review, role, action): 45 | try: 46 | perm_obj = AuthRules.objects.get(env=env, is_manual_review=is_manual_review, role=role) 47 | perm_serializer = AuthRulesSerializer(perm_obj) 48 | return perm_serializer.data.get(action) 49 | except Exception as e: 50 | print(e) 51 | return False 52 | -------------------------------------------------------------------------------- /backend/sqlmng/tasks.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import time 3 | from celery import task 4 | from django.conf import settings 5 | from account.models import User 6 | from utils.lock import RedisLock 7 | from utils.wrappers import close_old_conn 8 | from utils.basemixins import AppellationMixin 9 | from .models import InceptionWorkOrder 10 | from .mixins import Handle, MailMixin 11 | 12 | locals().update(settings.CELERY_BUSINESS_PARAMS) 13 | 14 | class HandleAction(MailMixin, Handle): 15 | 16 | def __init__(self, instance=None): 17 | self.steps = instance.work_order.step_set.all() 18 | 19 | def get_user(self, user_id): 20 | return User.objects.get(id=user_id) 21 | 22 | @close_old_conn 23 | def handle_result(self, instance, affected_rows, step_number, timer, user_id, _type): 24 | user = self.get_user(user_id) 25 | instance.execute_time = timer 26 | instance.affected_rows = affected_rows 27 | self.replace_remark(instance, _type, user) 28 | self.handle_workflow(2, 1, step_number, instance) 29 | self.save_instance(instance) 30 | RedisLock.delete_lock(instance.id) 31 | self.mail(instance, _type, user, self.name_mail_inception) 32 | 33 | @task 34 | def task_worker(pk, step_number, _type, user_id): 35 | instance = InceptionWorkOrder.objects.get(pk=pk) 36 | status = 7 if _type == AppellationMixin.urn_rollback else 6 37 | Handle.save_instance(instance, status) 38 | action = HandleAction(instance) 39 | handle = getattr(action, _type) 40 | (instance, affected_rows), timer = handle(instance) 41 | action.handle_result(instance, affected_rows, step_number, timer, user_id, _type) 42 | 43 | @task 44 | def cron_task(): 45 | current_time = time.strftime(date_format, time.localtime(time.time())) 46 | crontab_tasks = InceptionWorkOrder.objects.filter(cron_time=current_time, status=5) 47 | if not crontab_tasks: 48 | return 49 | cron_user, _ = User.objects.get_or_create(username=username) 50 | for instance in crontab_tasks: 51 | _type = instance.type or handle_type 52 | task_worker.delay(instance.id, 3, _type, cron_user.id) -------------------------------------------------------------------------------- /backend/sqlmng/tests.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | from django.test import TestCase 5 | 6 | # Create your tests here. 7 | -------------------------------------------------------------------------------- /backend/sqlmng/urls.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from django.conf.urls import include, url 3 | from rest_framework.routers import DefaultRouter 4 | 5 | from .views.inception_check import InceptionCheckView 6 | from .views.select_data import SelectDataView 7 | from .views.target_db import DbViewSet, DbWorkOrderViewSet 8 | from .views.workorder_main import InceptionMainView 9 | from .views.auth_rules import AuthRulesViewSet 10 | from .views.suggestion import SuggestionViewSet 11 | from .views.db_cluster import DbClusterViewSet 12 | from .views.settings import \ 13 | SqlSettingsViewSet, \ 14 | StrategyViewSet, \ 15 | PersonalSettingsViewSet, \ 16 | InceptionVariablesViewSet, \ 17 | InceptionConnectionViewSet, \ 18 | MailActionsSettingsViewSet, \ 19 | InceptionBackupView, \ 20 | ConnectionCheckView, \ 21 | ShowDatabasesView 22 | 23 | router = DefaultRouter() 24 | router.register(r'dbconfs', DbViewSet, base_name='DbViewSet') 25 | router.register(r'inceptions', InceptionMainView, base_name='InceptionMainView') 26 | router.register(r'inceptioncheck', InceptionCheckView, base_name='InceptionCheckView') 27 | router.register(r'autoselects', SelectDataView, base_name='SelectDataView') 28 | router.register(r'sqlsettings', SqlSettingsViewSet, base_name='SqlSettingsViewSet') 29 | router.register(r'strategy', StrategyViewSet, base_name='StrategyViewSet') 30 | router.register(r'personalsettings', PersonalSettingsViewSet, base_name='PersonalSettingsViewSet') 31 | router.register(r'authrules', AuthRulesViewSet, base_name='AuthRulesViewSet') 32 | router.register(r'suggestion', SuggestionViewSet, base_name='SuggestionViewSet') 33 | router.register(r'dbcluster', DbClusterViewSet, base_name='DbClusterViewSet') 34 | router.register(r'mailactions', MailActionsSettingsViewSet, base_name='MailActionsSettingsViewSet') 35 | router.register(r'inception/variables', InceptionVariablesViewSet, base_name='InceptionVariablesViewSet') 36 | router.register(r'inception/connection', InceptionConnectionViewSet, base_name='InceptionConnectionViewSet') 37 | router.register(r'dbworkorder', DbWorkOrderViewSet, base_name='DbWorkOrderViewSet') 38 | 39 | urlpatterns = [ 40 | url(r'^', include(router.urls)), 41 | url(r'^inception/backup/$', InceptionBackupView.as_view()), 42 | url(r'^inception/conncheck/$', ConnectionCheckView.as_view()), 43 | url(r'^inception/showdatabases/$', ShowDatabasesView.as_view()), 44 | ] 45 | -------------------------------------------------------------------------------- /backend/sqlmng/views/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/backend/sqlmng/views/__init__.py -------------------------------------------------------------------------------- /backend/sqlmng/views/auth_rules.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from utils.baseviews import BaseView 3 | from sqlmng.serializers import * 4 | from sqlmng.data import auth_rules 5 | from sqlmng.mixins import FixedDataMixin 6 | 7 | class AuthRulesViewSet(FixedDataMixin, BaseView): 8 | ''' 9 | 平台权限 10 | ''' 11 | serializer_class = AuthRulesSerializer 12 | search_fields = ['env'] 13 | source_data = auth_rules -------------------------------------------------------------------------------- /backend/sqlmng/views/db_cluster.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from rest_framework.response import Response 3 | from utils.baseviews import BaseView 4 | from utils.permissions import IsSuperUser 5 | from sqlmng.serializers import * 6 | from sqlmng.models import * 7 | 8 | class DbClusterViewSet(BaseView): 9 | ''' 10 | 数据库集群 11 | ''' 12 | queryset = Cluster.objects.all() 13 | serializer_class = DbClusterSerializer 14 | permission_classes = [IsSuperUser] 15 | search_fields = ['name','remark'] 16 | 17 | def update(self, request, *args, **kwargs): 18 | data = request.data 19 | instance = self.get_object() 20 | serializer = self.serializer_class(instance, data=data) 21 | serializer.is_valid(raise_exception=True) 22 | serializer.save() 23 | dbs = data.get('dbs') 24 | db_queryset = DbConf.objects.filter(id__in=dbs) 25 | instance.dbconf_set.set(db_queryset) 26 | return Response(self.serializer_class(instance).data) -------------------------------------------------------------------------------- /backend/sqlmng/views/select_data.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from rest_framework.response import Response 3 | from utils.baseviews import BaseView 4 | from utils.baseviews import ReturnFormatMixin as res 5 | from utils.basemixins import AppellationMixin 6 | from account.serializers import UserSerializer 7 | from sqlmng.serializers import DbSerializer 8 | from sqlmng.mixins import PermissionDatabases 9 | from sqlmng.models import * 10 | 11 | class SelectDataView(AppellationMixin, PermissionDatabases, BaseView): 12 | ''' 13 | 根据用户身份返回check sql时需要的执行人,数据库数据 14 | ''' 15 | queryset = DbConf.objects.all() 16 | serializer_class = DbSerializer 17 | serializer_user = UserSerializer 18 | 19 | def create(self, request, *args, **kwargs): 20 | ret = res.get_ret() 21 | env = request.data.get('env') 22 | cluster = request.data.get('cluster') or None 23 | qs_db = self.queryset.filter(env=env, cluster_id=cluster) 24 | qs_db = self.filter_databases(qs_db) 25 | qs_admin = self.serializer_user.Meta.model.objects.filter(is_superuser=True) 26 | ret['data']['dbs'] = self.serializer_class(qs_db, many=True).data 27 | ret['data']['admins'] = self.serializer_user(qs_admin, many=True).data 28 | user_instance = request.user 29 | user_data = self.serializer_user(user_instance).data 30 | ret['data']['commiter'] = user_data 31 | if user_instance.is_superuser or env == self.env_test or user_instance.role != self.dev: 32 | treaters = [user_data] 33 | else: 34 | group = user_instance.groups.first() 35 | treaters = self.serializer_user(group.user_set.filter(role=self.dev_mng), many=True).data if group else [] 36 | ret['data']['treaters'] = treaters 37 | return Response(ret) 38 | -------------------------------------------------------------------------------- /backend/sqlmng/views/step.py: -------------------------------------------------------------------------------- 1 | #coding=utf8 2 | from utils.baseviews import BaseView 3 | from sqlmng.serializers import * 4 | from sqlmng.models import * 5 | 6 | class StepViewSet(BaseView): 7 | ''' 8 | 工单审批流 9 | ''' 10 | queryset = Step.objects.all() 11 | serializer_class = StepSerializer -------------------------------------------------------------------------------- /backend/sqlmng/views/suggestion.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from rest_framework.response import Response 3 | from rest_framework import status 4 | from utils.baseviews import BaseView 5 | from sqlmng.serializers import * 6 | from sqlmng.models import * 7 | 8 | class SuggestionViewSet(BaseView): 9 | ''' 10 | 工单意见评论 11 | ''' 12 | serializer_class = SuggestionSerializer 13 | 14 | def get_queryset(self): 15 | work_order_id = self.request.GET.get('work_order_id') 16 | return Suggestion.objects.filter(work_order_id = work_order_id) 17 | 18 | def create(self, request, *args, **kwargs): 19 | request_data = request.data 20 | request_data['user'] = request.user.id 21 | serializer = self.get_serializer(data=request.data) 22 | serializer.is_valid(raise_exception=True) 23 | self.perform_create(serializer) 24 | headers = self.get_success_headers(serializer.data) 25 | return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) 26 | -------------------------------------------------------------------------------- /backend/sqlweb/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/backend/sqlweb/__init__.py -------------------------------------------------------------------------------- /backend/sqlweb/gunicorn_config.py: -------------------------------------------------------------------------------- 1 | # 配置服务器的监听ip和端口 2 | bind = '127.0.0.1:8090' 3 | # 以守护进程方式运行 4 | daemon = True 5 | # worker数量 6 | workers = 2 7 | # 错误日志路径 8 | errorlog = 'logs/gunicorn.error.log' 9 | # 访问日志路径 10 | accesslog = 'logs/gunicorn.access.log' 11 | -------------------------------------------------------------------------------- /backend/sqlweb/urls.py: -------------------------------------------------------------------------------- 1 | """sqlweb URL Configuration 2 | 3 | The `urlpatterns` list routes URLs to views. For more information please see: 4 | https://docs.djangoproject.com/en/2.0/topics/http/urls/ 5 | Examples: 6 | Function views 7 | 1. Add an import: from my_app import views 8 | 2. Add a URL to urlpatterns: path('', views.home, name='home') 9 | Class-based views 10 | 1. Add an import: from other_app.views import Home 11 | 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') 12 | Including another URLconf 13 | 1. Import the include() function: from django.urls import include, path 14 | 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) 15 | """ 16 | 17 | from django.contrib import admin 18 | from django.urls import path, include 19 | 20 | # swagger pakeage 21 | from rest_framework.schemas import get_schema_view 22 | from rest_framework_swagger.renderers import SwaggerUIRenderer, OpenAPIRenderer 23 | from rest_framework_jwt.views import obtain_jwt_token 24 | 25 | schema_view = get_schema_view(title='Users API', renderer_classes=[OpenAPIRenderer, SwaggerUIRenderer]) 26 | 27 | urlpatterns = [ 28 | path('admin/', admin.site.urls), 29 | path('api/docs/', schema_view), # swagger doc 30 | path('api/api-auth/', include('rest_framework.urls', namespace='rest_framework')), # wagger login 31 | path('api/api-token-auth/', obtain_jwt_token), 32 | path('api/media/', include('media.urls')), 33 | path('api/sqlmng/', include('sqlmng.urls')), 34 | path('api/account/', include('account.urls')), 35 | path('api/dashboard/', include('dashboard.urls')), 36 | ] 37 | -------------------------------------------------------------------------------- /backend/sqlweb/uwsgi.ini: -------------------------------------------------------------------------------- 1 | [uwsgi] 2 | # 配置服务器的监听ip和端口,让uWSGI作为nginx的支持服务器的话,设置socke就行;如果要让uWSGI作为单独的web-server,用http 3 | http = 127.0.0.1:200 4 | #socket = 127.0.0.1:8090 5 | # 配置项目目录(此处设置为项目的根目录) 6 | chdir = /mnt/sqlweb 7 | # 配置入口模块 (django的入口函数的模块,即setting同级目录下的wsgi.py) 8 | wsgi-file = sqlweb/wsgi.py 9 | # 开启master, 将会多开一个管理进程, 管理其他服务进程 10 | master = True 11 | # 服务器开启的进程数量 12 | processes = 2 13 | # 以守护进程方式提供服, 输出信息将会打印到log中 14 | daemonize = wsgi.log 15 | # 服务器进程开启的线程数量 16 | threads = 4 17 | # 退出的时候清空环境变量 18 | vacuum = true 19 | # 进程pid 20 | pidfile = uwsgi.pid -------------------------------------------------------------------------------- /backend/sqlweb/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for sqlweb 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/2.0/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", "sqlweb.settings") 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /backend/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/backend/utils/__init__.py -------------------------------------------------------------------------------- /backend/utils/auto_dict.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | class AutoVivification(dict): 4 | 5 | def __getitem__(self, item): 6 | try: 7 | return dict.__getitem__(self, item) 8 | except KeyError: 9 | value = self[item] = type(self)() 10 | return value 11 | -------------------------------------------------------------------------------- /backend/utils/basecomponent.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import json 3 | import datetime 4 | 5 | class DateEncoder(json.JSONEncoder): 6 | 7 | def default(self, obj): 8 | if isinstance(obj, datetime.datetime): 9 | return obj.strftime('%Y-%m-%d %H:%M:%S') 10 | elif isinstance(obj, datetime.date): 11 | return obj.strftime('%Y-%m-%d') 12 | else: 13 | return json.JSONEncoder.default(self, obj) 14 | -------------------------------------------------------------------------------- /backend/utils/basemodels.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from django.db import models 3 | 4 | class Basemodel(models.Model): 5 | ''' 6 | 基础表(抽象类) 7 | ''' 8 | name = models.CharField(default='', null=True, blank=True, max_length=128, verbose_name='名字') 9 | createtime = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') 10 | updatetime = models.DateTimeField(auto_now=True, verbose_name='修改时间') 11 | remark = models.TextField(default='', null=True, blank=True, verbose_name='备注') 12 | 13 | def __unicode__(self): 14 | return self.name 15 | 16 | class Meta: 17 | abstract = True 18 | ordering = ['-id'] 19 | -------------------------------------------------------------------------------- /backend/utils/baseviews.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from rest_framework import viewsets 3 | from rest_framework import filters 4 | from rest_framework.permissions import IsAuthenticated 5 | from rest_framework.pagination import PageNumberPagination 6 | 7 | class ReturnFormatMixin(object): 8 | 9 | @classmethod 10 | def get_ret(cls): 11 | return {'status': 0, 'msg': '', 'data': {}} 12 | 13 | class BasePagination(PageNumberPagination): 14 | page_size_query_param = 'pagesize' 15 | page_query_param = 'page' 16 | max_page_size = 1000 17 | 18 | class DefaultPagination(BasePagination): 19 | page_size = 10 20 | 21 | class MaxSizePagination(BasePagination): 22 | page_size = 1000 23 | 24 | class BaseView(viewsets.ModelViewSet): 25 | queryset = None 26 | serializer_class = None 27 | permission_classes = [IsAuthenticated] 28 | # 分页 29 | pagination_class = DefaultPagination 30 | # 搜索 31 | filter_backends = [filters.SearchFilter] 32 | search_fields = [] 33 | -------------------------------------------------------------------------------- /backend/utils/dbcrypt.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from cryptography.fernet import Fernet 3 | 4 | ## key = base64.urlsafe_b64encode(os.urandom(32)) 生成key 5 | 6 | class prpcrypt: 7 | 8 | key = 'P30cMRRBa9kF3YNYpeKNmlUquLsX6ssOuBdy4yZe8wU=' 9 | 10 | @classmethod 11 | def encrypt(cls, password): 12 | fn = Fernet(cls.key) 13 | password_encode = password.encode() 14 | token = fn.encrypt(password_encode) 15 | return token.decode() 16 | 17 | @classmethod 18 | def decrypt(cls, password): 19 | fn = Fernet(cls.key) 20 | password_encode = password.encode() 21 | token = fn.decrypt(password_encode) 22 | return token.decode() 23 | -------------------------------------------------------------------------------- /backend/utils/exceptions.py: -------------------------------------------------------------------------------- 1 | from rest_framework import status 2 | from rest_framework.exceptions import APIException 3 | 4 | class NotValid(APIException): 5 | status_code = status.HTTP_402_PAYMENT_REQUIRED 6 | default_detail = 'commited sql were not valid.' 7 | default_code = 'invalid' 8 | -------------------------------------------------------------------------------- /backend/utils/inception_test.py: -------------------------------------------------------------------------------- 1 | #-\*-coding: utf-8-\*- 2 | 3 | ''' 建表语句 4 | CREATE DATABASE pro1; 5 | CREATE TABLE IF NOT EXISTS pro1.mytable1 ( 6 | `id` INT UNSIGNED AUTO_INCREMENT comment "用户id", 7 | `myname` VARCHAR(10) DEFAULT "" NOT NULL comment "用户name", 8 | PRIMARY KEY ( `id` ) 9 | )ENGINE=InnoDB DEFAULT CHARSET=utf8 comment="表的注释"; 10 | 11 | ''' 12 | 13 | import pymysql 14 | 15 | # 待审核/执行的sql语句(需包含目标数据库的地址、端口 等参数) 16 | sql = '/* --user=root;--password=123456;--host=127.0.0.1;--port=3306;--enable-execute; */\ 17 | inception_magic_start;\ 18 | use pro1;\ 19 | insert into mytable1 (myname) values ("xianyu1"),("xianyu2");\ 20 | insert into mytable1 (myname) values ("xianyu1"),("xianyu2");\ 21 | inception_magic_commit;' 22 | try: 23 | conn = pymysql.connect(host='127.0.0.1',user='',passwd='',db='',port=6669,use_unicode=True,charset="utf8") # inception的地址、端口等 24 | cur = conn.cursor() 25 | ret = cur.execute(sql) 26 | result = cur.fetchall() 27 | cur.close() 28 | conn.close() 29 | for res in result: 30 | print(res) 31 | except pymysql.Error as e: 32 | print("Mysql Error %d: %s" % (e.args[0], e.args[1]) ) 33 | -------------------------------------------------------------------------------- /backend/utils/ldaptools.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import ldap 3 | from django.conf import settings 4 | 5 | class LdapSee(object): 6 | 7 | locals().update(settings.LDAP) 8 | ret = {} 9 | 10 | def check(self, ldap_user, ldap_password): 11 | uri = "ldap://{}:{}".format(self.host, self.port) 12 | conn = ldap.initialize(uri) 13 | try: 14 | conn.simple_bind_s(ldap_user, ldap_password) 15 | status = 0 16 | except ldap.INVALID_CREDENTIALS: 17 | status = -1 18 | except Exception as e: 19 | status = -2 20 | self.ret["data"] = e 21 | self.ret["status"] = status 22 | return self.ret 23 | -------------------------------------------------------------------------------- /backend/utils/lock.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import redis 3 | import time 4 | from django.conf import settings 5 | from utils.wrappers import catch_exception 6 | 7 | locals().update(settings.LOCK) 8 | 9 | class RedisLock(object): 10 | 11 | pool = redis.ConnectionPool(host=host, port=port, db=db, password=password) 12 | redis_client = redis.Redis(connection_pool=pool) 13 | timeout = timeout 14 | 15 | @classmethod 16 | def delete_lock(cls, key): 17 | cls.redis_client.delete(key) 18 | 19 | @classmethod 20 | @catch_exception 21 | def set_lock(cls, key, value): 22 | return cls.redis_client.setnx(key, value) 23 | 24 | @classmethod 25 | def locked(cls, key): 26 | now = int(time.time()) 27 | if cls.set_lock(key, now): 28 | return True 29 | lock_time = cls.redis_client.get(key) 30 | if now > int(lock_time) + cls.timeout: 31 | cls.delete_lock(key) 32 | return cls.set_lock(key, now) 33 | return False 34 | -------------------------------------------------------------------------------- /backend/utils/permissions.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from rest_framework import permissions 3 | 4 | SAFE_METHODS = ('GET', 'HEAD', 'OPTIONS') 5 | 6 | class IsSuperUser(permissions.BasePermission): 7 | """ 8 | Allows access only to super users. 9 | """ 10 | def has_permission(self, request, view): 11 | return request.method in SAFE_METHODS or request.user.is_superuser 12 | -------------------------------------------------------------------------------- /backend/utils/tasks.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from celery import task 3 | from .mail import Mail 4 | 5 | @task 6 | def send_mail(**kwargs): 7 | return Mail.send(kwargs) 8 | -------------------------------------------------------------------------------- /backend/utils/unitaryauth.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from utils.ldaptools import LdapSee 3 | 4 | class UnitaryAuth(object): 5 | 6 | @property 7 | def authenticate(self): 8 | ''' 9 | 1. 请求认证接口, 入参:需要根据接口的定义, 一般是 用户名(username), 密码(password) 10 | 2. 接口认证成功,本方法返回True, 失败返回False 11 | :return: True/False 12 | ''' 13 | data = self.request.data 14 | ldap = LdapSee() 15 | ret = ldap.check(data.get('username'), data.get('password')) 16 | status = ret['status'] 17 | return True if status == 0 else False 18 | -------------------------------------------------------------------------------- /backend/utils/wrappers.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import time 3 | import logging 4 | from functools import wraps 5 | from django.db import close_old_connections 6 | from rest_framework.exceptions import ParseError 7 | from rest_framework.exceptions import PermissionDenied 8 | 9 | def timer(func): 10 | @wraps(func) 11 | def wrapper(*args,**kwargs): 12 | start = time.time() 13 | try: 14 | result = func(*args,**kwargs) 15 | end = time.time() 16 | runtime = end - start 17 | return result, '%.3f' % runtime 18 | except Exception as e: 19 | logging.error('programe running err:{}',format(e)) 20 | return wrapper 21 | 22 | def close_old_conn(func): 23 | @wraps(func) 24 | def wrapper(*args,**kwargs): 25 | try: 26 | close_old_connections() 27 | return func(*args,**kwargs) 28 | except Exception as e: 29 | logging.error('programe running err:{}',format(e)) 30 | return wrapper 31 | 32 | def catch_exception(func): 33 | @wraps(func) 34 | def wrapper(*args, **kwargs): 35 | try: 36 | return func(*args, **kwargs) 37 | except Exception as e: 38 | raise ParseError(e) 39 | return wrapper 40 | 41 | def permission_admin(func): 42 | @wraps(func) 43 | def wrapper(self, *args, **kwargs): 44 | if self.request.user.is_superuser: 45 | return func(self, *args, **kwargs) 46 | raise PermissionDenied 47 | return wrapper 48 | -------------------------------------------------------------------------------- /backend/workflow/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/backend/workflow/__init__.py -------------------------------------------------------------------------------- /backend/workflow/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /backend/workflow/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class WorkflowConfig(AppConfig): 5 | name = 'workflow' 6 | -------------------------------------------------------------------------------- /backend/workflow/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/backend/workflow/migrations/__init__.py -------------------------------------------------------------------------------- /backend/workflow/models.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from django.db import models 3 | from account.models import User 4 | from utils.basemodels import Basemodel 5 | 6 | # Create your models here. 7 | 8 | class WorkOrder(Basemodel): 9 | status = models.BooleanField(default=False, verbose_name='审批状态') 10 | 11 | class Step(Basemodel): 12 | STATUS = ( 13 | (-1, u'终止'), 14 | (0, u'待处理'), 15 | (1, u'通过'), 16 | (2, u'驳回'), 17 | (3, u'放弃') 18 | ) 19 | work_order = models.ForeignKey(WorkOrder, on_delete=models.CASCADE) 20 | user = models.ForeignKey(User, null=True, blank=True, on_delete=models.CASCADE) 21 | status = models.IntegerField(default=0, choices=STATUS) 22 | -------------------------------------------------------------------------------- /backend/workflow/serializers.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from rest_framework import serializers 3 | from .models import WorkOrder, Step 4 | 5 | class WorkOrderSerializer(serializers.ModelSerializer): 6 | 7 | class Meta: 8 | model = WorkOrder 9 | fields = '__all__' 10 | 11 | class StepSerializer(serializers.ModelSerializer): 12 | 13 | class Meta: 14 | model = Step 15 | fields = '__all__' 16 | -------------------------------------------------------------------------------- /backend/workflow/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /backend/workflow/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | 3 | # Create your views here. 4 | -------------------------------------------------------------------------------- /frontend/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["stage-3", "env"], 3 | "plugins": ["transform-runtime", "syntax-dynamic-import"], 4 | "comments": false 5 | } 6 | -------------------------------------------------------------------------------- /frontend/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | charset = utf-8 4 | indent_style = space 5 | indent_size = 4 6 | end_of_line = lf 7 | insert_final_newline = true 8 | trim_trailing_whitespace = true 9 | -------------------------------------------------------------------------------- /frontend/.eslintignore: -------------------------------------------------------------------------------- 1 | src/vendors 2 | src/libs/table2excel.js 3 | build 4 | router.js 5 | src/views/my-components/text-editor/tinymce -------------------------------------------------------------------------------- /frontend/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "standard", 3 | "root": true, 4 | "parserOptions": { 5 | "ecmaVersion": 6, 6 | "sourceType": "module" 7 | }, 8 | "env": { 9 | "browser": true, 10 | "node": true 11 | }, 12 | "plugins": [ "html", "standard" ], 13 | "rules": { 14 | "indent": ["error", 4, { "SwitchCase": 1 }], 15 | "quotes": ["error", "single"], 16 | "semi": ["error", "always"], 17 | "no-console": ["error"], 18 | "no-empty": 2, 19 | "no-eq-null": 2, 20 | "no-new": 0, 21 | "no-fallthrough": 0, 22 | "no-unreachable": 0 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /frontend/.gitignore: -------------------------------------------------------------------------------- 1 | npm-debug.log 2 | node_modules 3 | .project 4 | .vscode 5 | .history 6 | .DS_Store 7 | \.settings/ 8 | build/env.js 9 | *.gz 10 | *.zip 11 | -------------------------------------------------------------------------------- /frontend/.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | // to edit target browsers: use "browserslist" field in package.json 6 | "autoprefixer": {} 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /frontend/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "6" 4 | script: 5 | - npm run test 6 | -------------------------------------------------------------------------------- /frontend/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 iView 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /frontend/README.md: -------------------------------------------------------------------------------- 1 | # frontend 2 | 3 | > A Vue.js project 4 | 5 | ## Build Setup 6 | 7 | ``` bash 8 | # install dependencies 9 | npm install 10 | 11 | # serve with hot reload at localhost:8080 12 | npm run dev 13 | 14 | # build for production with minification 15 | npm run build 16 | 17 | # build for production and view the bundle analyzer report 18 | npm run build --report 19 | ``` 20 | 21 | For detailed explanation on how things work, checkout the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader). 22 | -------------------------------------------------------------------------------- /frontend/build/config.js: -------------------------------------------------------------------------------- 1 | import Env from './env'; 2 | 3 | let config = { 4 | env: Env 5 | }; 6 | export default config; 7 | -------------------------------------------------------------------------------- /frontend/build/webpack.dev.config.js: -------------------------------------------------------------------------------- 1 | const webpack = require('webpack'); 2 | const HtmlWebpackPlugin = require('html-webpack-plugin'); 3 | const ExtractTextPlugin = require('extract-text-webpack-plugin'); 4 | const CopyWebpackPlugin = require('copy-webpack-plugin'); 5 | const merge = require('webpack-merge'); 6 | const webpackBaseConfig = require('./webpack.base.config.js'); 7 | const fs = require('fs'); 8 | const package = require('../package.json'); 9 | 10 | fs.open('./build/env.js', 'w', function(err, fd) { 11 | const buf = 'export default "development";'; 12 | fs.write(fd, buf, 0, buf.length, 0, function(err, written, buffer) {}); 13 | }); 14 | 15 | module.exports = merge(webpackBaseConfig, { 16 | devtool: '#source-map', 17 | output: { 18 | publicPath: '/dist/', 19 | filename: '[name].js', 20 | chunkFilename: '[name].chunk.js' 21 | }, 22 | plugins: [ 23 | new ExtractTextPlugin({ 24 | filename: '[name].css', 25 | allChunks: true 26 | }), 27 | new webpack.optimize.CommonsChunkPlugin({ 28 | name: ['vender-exten', 'vender-base'], 29 | minChunks: Infinity 30 | }), 31 | new HtmlWebpackPlugin({ 32 | title: 'iView admin v' + package.version, 33 | filename: '../index.html', 34 | inject: false 35 | }), 36 | new CopyWebpackPlugin([ 37 | { 38 | from: 'src/views/main-components/theme-switch/theme' 39 | }, 40 | { 41 | from: 'src/views/my-components/text-editor/tinymce' 42 | } 43 | ], { 44 | ignore: [ 45 | 'text-editor.vue' 46 | ] 47 | }) 48 | ], 49 | 50 | //设置跨域代理 51 | devServer: { 52 | historyApiFallback: true, 53 | hot: true, 54 | inline: true, 55 | stats: { colors: true }, 56 | proxy: { 57 | //匹配代理的url 58 | '/api': { 59 | // 目标服务器地址 60 | target: 'http://192.168.247.10:200', 61 | //路径重写 62 | pathRewrite: {'^/api' : '/api'}, 63 | changeOrigin: true 64 | } 65 | } 66 | } 67 | 68 | }); -------------------------------------------------------------------------------- /frontend/dist/dist/05acfdb568b3df49ad31355b19495d4a.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/05acfdb568b3df49ad31355b19495d4a.woff -------------------------------------------------------------------------------- /frontend/dist/dist/24712f6c47821394fba7942fbb52c3b2.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/24712f6c47821394fba7942fbb52c3b2.ttf -------------------------------------------------------------------------------- /frontend/dist/dist/2c2ae068be3b089e0a5b59abb1831550.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/2c2ae068be3b089e0a5b59abb1831550.eot -------------------------------------------------------------------------------- /frontend/dist/dist/c2a57202c856f8b4b12a79029911f8e2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/c2a57202c856f8b4b12a79029911f8e2.jpg -------------------------------------------------------------------------------- /frontend/dist/dist/cce1a3aa586ce757cc2cbfce7ebdfde5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/cce1a3aa586ce757cc2cbfce7ebdfde5.png -------------------------------------------------------------------------------- /frontend/dist/dist/fonts/ionicons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/fonts/ionicons.eot -------------------------------------------------------------------------------- /frontend/dist/dist/fonts/ionicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/fonts/ionicons.ttf -------------------------------------------------------------------------------- /frontend/dist/dist/fonts/ionicons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/fonts/ionicons.woff -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/advlist/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "advlist" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/advlist') 5 | // ES2015: 6 | // import 'tinymce/plugins/advlist' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/anchor/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "anchor" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/anchor') 5 | // ES2015: 6 | // import 'tinymce/plugins/anchor' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/autolink/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "autolink" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/autolink') 5 | // ES2015: 6 | // import 'tinymce/plugins/autolink' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/autoresize/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "autoresize" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/autoresize') 5 | // ES2015: 6 | // import 'tinymce/plugins/autoresize' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/autosave/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "autosave" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/autosave') 5 | // ES2015: 6 | // import 'tinymce/plugins/autosave' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/bbcode/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "bbcode" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/bbcode') 5 | // ES2015: 6 | // import 'tinymce/plugins/bbcode' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/charmap/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "charmap" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/charmap') 5 | // ES2015: 6 | // import 'tinymce/plugins/charmap' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/code/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "code" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/code') 5 | // ES2015: 6 | // import 'tinymce/plugins/code' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/codesample/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "codesample" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/codesample') 5 | // ES2015: 6 | // import 'tinymce/plugins/codesample' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/colorpicker/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "colorpicker" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/colorpicker') 5 | // ES2015: 6 | // import 'tinymce/plugins/colorpicker' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/contextmenu/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "contextmenu" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/contextmenu') 5 | // ES2015: 6 | // import 'tinymce/plugins/contextmenu' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/directionality/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "directionality" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/directionality') 5 | // ES2015: 6 | // import 'tinymce/plugins/directionality' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/directionality/plugin.min.js: -------------------------------------------------------------------------------- 1 | !(function () { var a = {}, b = function (b) { for (var c = a[b], e = c.deps, f = c.defn, g = e.length, h = new Array(g), i = 0; i < g; ++i)h[i] = d(e[i]); var j = f.apply(null, h); if (void 0 === j) throw 'module [' + b + '] returned undefined'; c.instance = j; }, c = function (b, c, d) { if (typeof b !== 'string') throw 'module id must be a string'; if (void 0 === c) throw 'no dependencies for ' + b; if (void 0 === d) throw 'no definition function for ' + b; a[b] = {deps: c, defn: d, instance: void 0}; }, d = function (c) { var d = a[c]; if (void 0 === d) throw 'module [' + c + '] was undefined'; return void 0 === d.instance && b(c), d.instance; }, e = function (a, b) { for (var c = a.length, e = new Array(c), f = 0; f < c; ++f)e[f] = d(a[f]); b.apply(null, e); }, f = {}; f.bolt = {module: {api: {define: c, require: e, demand: d}}}; var g = c, h = function (a, b) { g(a, [], function () { return b; }); }; h('4', tinymce.util.Tools.resolve), g('1', ['4'], function (a) { return a('tinymce.PluginManager'); }), g('6', ['4'], function (a) { return a('tinymce.util.Tools'); }), g('5', ['6'], function (a) { var b = function (b, c) { var d, e = b.dom, f = b.selection.getSelectedBlocks(); f.length && (d = e.getAttrib(f[0], 'dir'), a.each(f, function (a) { e.getParent(a.parentNode, '*[dir="' + c + '"]', e.getRoot()) || e.setAttrib(a, 'dir', d !== c ? c : null); }), b.nodeChanged()); }; return {setDir: b}; }), g('2', ['5'], function (a) { var b = function (b) { b.addCommand('mceDirectionLTR', function () { a.setDir(b, 'ltr'); }), b.addCommand('mceDirectionRTL', function () { a.setDir(b, 'rtl'); }); }; return {register: b}; }), g('3', ['6'], function (a) { var b = function (b) { var c = []; return a.each('h1 h2 h3 h4 h5 h6 div p'.split(' '), function (a) { c.push(a + '[dir=' + b + ']'); }), c.join(','); }, c = function (a) { a.addButton('ltr', {title: 'Left to right', cmd: 'mceDirectionLTR', stateSelector: b('ltr')}), a.addButton('rtl', {title: 'Right to left', cmd: 'mceDirectionRTL', stateSelector: b('rtl')}); }; return {register: c}; }), g('0', ['1', '2', '3'], function (a, b, c) { return a.add('directionality', function (a) { b.register(a), c.register(a); }), function () {}; }), d('0')(); }()); 2 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/emoticons/img/smiley-cool.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/plugins/emoticons/img/smiley-cool.gif -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/emoticons/img/smiley-cry.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/plugins/emoticons/img/smiley-cry.gif -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/emoticons/img/smiley-embarassed.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/plugins/emoticons/img/smiley-embarassed.gif -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/emoticons/img/smiley-foot-in-mouth.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/plugins/emoticons/img/smiley-foot-in-mouth.gif -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/emoticons/img/smiley-frown.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/plugins/emoticons/img/smiley-frown.gif -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/emoticons/img/smiley-innocent.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/plugins/emoticons/img/smiley-innocent.gif -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/emoticons/img/smiley-kiss.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/plugins/emoticons/img/smiley-kiss.gif -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/emoticons/img/smiley-laughing.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/plugins/emoticons/img/smiley-laughing.gif -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/emoticons/img/smiley-money-mouth.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/plugins/emoticons/img/smiley-money-mouth.gif -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/emoticons/img/smiley-sealed.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/plugins/emoticons/img/smiley-sealed.gif -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/emoticons/img/smiley-smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/plugins/emoticons/img/smiley-smile.gif -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/emoticons/img/smiley-surprised.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/plugins/emoticons/img/smiley-surprised.gif -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/emoticons/img/smiley-tongue-out.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/plugins/emoticons/img/smiley-tongue-out.gif -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/emoticons/img/smiley-undecided.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/plugins/emoticons/img/smiley-undecided.gif -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/emoticons/img/smiley-wink.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/plugins/emoticons/img/smiley-wink.gif -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/emoticons/img/smiley-yell.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/plugins/emoticons/img/smiley-yell.gif -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/emoticons/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "emoticons" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/emoticons') 5 | // ES2015: 6 | // import 'tinymce/plugins/emoticons' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/emoticons/plugin.min.js: -------------------------------------------------------------------------------- 1 | !(function () { var a = {}, b = function (b) { for (var c = a[b], e = c.deps, f = c.defn, g = e.length, h = new Array(g), i = 0; i < g; ++i)h[i] = d(e[i]); var j = f.apply(null, h); if (void 0 === j) throw 'module [' + b + '] returned undefined'; c.instance = j; }, c = function (b, c, d) { if (typeof b !== 'string') throw 'module id must be a string'; if (void 0 === c) throw 'no dependencies for ' + b; if (void 0 === d) throw 'no definition function for ' + b; a[b] = {deps: c, defn: d, instance: void 0}; }, d = function (c) { var d = a[c]; if (void 0 === d) throw 'module [' + c + '] was undefined'; return void 0 === d.instance && b(c), d.instance; }, e = function (a, b) { for (var c = a.length, e = new Array(c), f = 0; f < c; ++f)e[f] = d(a[f]); b.apply(null, e); }, f = {}; f.bolt = {module: {api: {define: c, require: e, demand: d}}}; var g = c, h = function (a, b) { g(a, [], function () { return b; }); }; h('3', tinymce.util.Tools.resolve), g('1', ['3'], function (a) { return a('tinymce.PluginManager'); }), g('5', ['3'], function (a) { return a('tinymce.util.Tools'); }), g('4', ['5'], function (a) { var b = [['cool', 'cry', 'embarassed', 'foot-in-mouth'], ['frown', 'innocent', 'kiss', 'laughing'], ['money-mouth', 'sealed', 'smile', 'surprised'], ['tongue-out', 'undecided', 'wink', 'yell']], c = function (c) { var d; return d = '', a.each(b, function (b) { d += '', a.each(b, function (a) { var b = c + '/img/smiley-' + a + '.gif'; d += ''; }), d += ''; }), d += '
'; }; return {getHtml: c}; }), g('2', ['4'], function (a) { var b = function (a, b, c) { a.insertContent(a.dom.createHTML('img', {src: b, alt: c})); }, c = function (c, d) { var e = a.getHtml(d); c.addButton('emoticons', {type: 'panelbutton', panel: {role: 'application', autohide: !0, html: e, onclick: function (a) { var d = c.dom.getParent(a.target, 'a'); d && (b(c, d.getAttribute('data-mce-url'), d.getAttribute('data-mce-alt')), this.hide()); }}, tooltip: 'Emoticons'}); }; return {register: c}; }), g('0', ['1', '2'], function (a, b) { return a.add('emoticons', function (a, c) { b.register(a, c); }), function () {}; }), d('0')(); }()); 2 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/fullpage/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "fullpage" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/fullpage') 5 | // ES2015: 6 | // import 'tinymce/plugins/fullpage' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/fullscreen/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "fullscreen" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/fullscreen') 5 | // ES2015: 6 | // import 'tinymce/plugins/fullscreen' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/help/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/plugins/help/img/logo.png -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/help/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "help" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/help') 5 | // ES2015: 6 | // import 'tinymce/plugins/help' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/hr/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "hr" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/hr') 5 | // ES2015: 6 | // import 'tinymce/plugins/hr' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/hr/plugin.min.js: -------------------------------------------------------------------------------- 1 | !(function () { var a = {}, b = function (b) { for (var c = a[b], e = c.deps, f = c.defn, g = e.length, h = new Array(g), i = 0; i < g; ++i)h[i] = d(e[i]); var j = f.apply(null, h); if (void 0 === j) throw 'module [' + b + '] returned undefined'; c.instance = j; }, c = function (b, c, d) { if (typeof b !== 'string') throw 'module id must be a string'; if (void 0 === c) throw 'no dependencies for ' + b; if (void 0 === d) throw 'no definition function for ' + b; a[b] = {deps: c, defn: d, instance: void 0}; }, d = function (c) { var d = a[c]; if (void 0 === d) throw 'module [' + c + '] was undefined'; return void 0 === d.instance && b(c), d.instance; }, e = function (a, b) { for (var c = a.length, e = new Array(c), f = 0; f < c; ++f)e[f] = d(a[f]); b.apply(null, e); }, f = {}; f.bolt = {module: {api: {define: c, require: e, demand: d}}}; var g = c, h = function (a, b) { g(a, [], function () { return b; }); }; h('4', tinymce.util.Tools.resolve), g('1', ['4'], function (a) { return a('tinymce.PluginManager'); }), g('2', [], function () { var a = function (a) { a.addCommand('InsertHorizontalRule', function () { a.execCommand('mceInsertContent', !1, '
'); }); }; return {register: a}; }), g('3', [], function () { var a = function (a) { a.addButton('hr', {icon: 'hr', tooltip: 'Horizontal line', cmd: 'InsertHorizontalRule'}), a.addMenuItem('hr', {icon: 'hr', text: 'Horizontal line', cmd: 'InsertHorizontalRule', context: 'insert'}); }; return {register: a}; }), g('0', ['1', '2', '3'], function (a, b, c) { return a.add('hr', function (a) { b.register(a), c.register(a); }), function () {}; }), d('0')(); }()); 2 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/image/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "image" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/image') 5 | // ES2015: 6 | // import 'tinymce/plugins/image' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/imagetools/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "imagetools" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/imagetools') 5 | // ES2015: 6 | // import 'tinymce/plugins/imagetools' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/importcss/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "importcss" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/importcss') 5 | // ES2015: 6 | // import 'tinymce/plugins/importcss' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/insertdatetime/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "insertdatetime" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/insertdatetime') 5 | // ES2015: 6 | // import 'tinymce/plugins/insertdatetime' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/legacyoutput/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "legacyoutput" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/legacyoutput') 5 | // ES2015: 6 | // import 'tinymce/plugins/legacyoutput' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/link/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "link" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/link') 5 | // ES2015: 6 | // import 'tinymce/plugins/link' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/lists/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "lists" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/lists') 5 | // ES2015: 6 | // import 'tinymce/plugins/lists' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/media/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "media" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/media') 5 | // ES2015: 6 | // import 'tinymce/plugins/media' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/nonbreaking/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "nonbreaking" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/nonbreaking') 5 | // ES2015: 6 | // import 'tinymce/plugins/nonbreaking' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/nonbreaking/plugin.min.js: -------------------------------------------------------------------------------- 1 | !(function () { var a = {}, b = function (b) { for (var c = a[b], e = c.deps, f = c.defn, g = e.length, h = new Array(g), i = 0; i < g; ++i)h[i] = d(e[i]); var j = f.apply(null, h); if (void 0 === j) throw 'module [' + b + '] returned undefined'; c.instance = j; }, c = function (b, c, d) { if (typeof b !== 'string') throw 'module id must be a string'; if (void 0 === c) throw 'no dependencies for ' + b; if (void 0 === d) throw 'no definition function for ' + b; a[b] = {deps: c, defn: d, instance: void 0}; }, d = function (c) { var d = a[c]; if (void 0 === d) throw 'module [' + c + '] was undefined'; return void 0 === d.instance && b(c), d.instance; }, e = function (a, b) { for (var c = a.length, e = new Array(c), f = 0; f < c; ++f)e[f] = d(a[f]); b.apply(null, e); }, f = {}; f.bolt = {module: {api: {define: c, require: e, demand: d}}}; var g = c, h = function (a, b) { g(a, [], function () { return b; }); }; h('5', tinymce.util.Tools.resolve), g('1', ['5'], function (a) { return a('tinymce.PluginManager'); }), g('6', [], function () { var a = function (a, b) { for (var c = '', d = 0; d < b; d++)c += a; return c; }, b = function (a) { return !!a.plugins.visualchars && a.plugins.visualchars.isEnabled(); }, c = function (c, d) { var e = b(c) ? ' ' : ' '; c.insertContent(a(e, d)), c.dom.setAttrib(c.dom.select('span.mce-nbsp'), 'data-mce-bogus', '1'); }; return {insertNbsp: c}; }), g('2', ['6'], function (a) { var b = function (b) { b.addCommand('mceNonBreaking', function () { a.insertNbsp(b, 1); }); }; return {register: b}; }), g('7', [], function () { var a = function (a) { var b = a.getParam('nonbreaking_force_tab', 0); return typeof tabs === 'boolean' ? b === !0 ? 3 : 0 : b; }; return {getKeyboardSpaces: a}; }), g('3', ['7', '6'], function (a, b) { var c = function (c) { var d = a.getKeyboardSpaces(c); d > 0 && c.on('keydown', function (a) { if (a.keyCode === 9) { if (a.shiftKey) return; a.preventDefault(), b.insertNbsp(c, d); } }); }; return {setup: c}; }), g('4', [], function () { var a = function (a) { a.addButton('nonbreaking', {title: 'Nonbreaking space', cmd: 'mceNonBreaking'}), a.addMenuItem('nonbreaking', {text: 'Nonbreaking space', cmd: 'mceNonBreaking', context: 'insert'}); }; return {register: a}; }), g('0', ['1', '2', '3', '4'], function (a, b, c, d) { return a.add('nonbreaking', function (a) { b.register(a), d.register(a), c.setup(a); }), function () {}; }), d('0')(); }()); 2 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/noneditable/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "noneditable" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/noneditable') 5 | // ES2015: 6 | // import 'tinymce/plugins/noneditable' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/pagebreak/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "pagebreak" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/pagebreak') 5 | // ES2015: 6 | // import 'tinymce/plugins/pagebreak' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/paste/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "paste" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/paste') 5 | // ES2015: 6 | // import 'tinymce/plugins/paste' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/preview/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "preview" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/preview') 5 | // ES2015: 6 | // import 'tinymce/plugins/preview' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/print/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "print" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/print') 5 | // ES2015: 6 | // import 'tinymce/plugins/print' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/print/plugin.min.js: -------------------------------------------------------------------------------- 1 | !(function () { var a = {}, b = function (b) { for (var c = a[b], e = c.deps, f = c.defn, g = e.length, h = new Array(g), i = 0; i < g; ++i)h[i] = d(e[i]); var j = f.apply(null, h); if (void 0 === j) throw 'module [' + b + '] returned undefined'; c.instance = j; }, c = function (b, c, d) { if (typeof b !== 'string') throw 'module id must be a string'; if (void 0 === c) throw 'no dependencies for ' + b; if (void 0 === d) throw 'no definition function for ' + b; a[b] = {deps: c, defn: d, instance: void 0}; }, d = function (c) { var d = a[c]; if (void 0 === d) throw 'module [' + c + '] was undefined'; return void 0 === d.instance && b(c), d.instance; }, e = function (a, b) { for (var c = a.length, e = new Array(c), f = 0; f < c; ++f)e[f] = d(a[f]); b.apply(null, e); }, f = {}; f.bolt = {module: {api: {define: c, require: e, demand: d}}}; var g = c, h = function (a, b) { g(a, [], function () { return b; }); }; h('4', tinymce.util.Tools.resolve), g('1', ['4'], function (a) { return a('tinymce.PluginManager'); }), g('2', [], function () { var a = function (a) { a.addCommand('mcePrint', function () { a.getWin().print(); }); }; return {register: a}; }), g('3', [], function () { var a = function (a) { a.addButton('print', {title: 'Print', cmd: 'mcePrint'}), a.addMenuItem('print', {text: 'Print', cmd: 'mcePrint', icon: 'print'}); }; return {register: a}; }), g('0', ['1', '2', '3'], function (a, b, c) { return a.add('print', function (a) { b.register(a), c.register(a), a.addShortcut('Meta+P', '', 'mcePrint'); }), function () {}; }), d('0')(); }()); 2 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/save/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "save" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/save') 5 | // ES2015: 6 | // import 'tinymce/plugins/save' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/searchreplace/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "searchreplace" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/searchreplace') 5 | // ES2015: 6 | // import 'tinymce/plugins/searchreplace' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/spellchecker/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "spellchecker" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/spellchecker') 5 | // ES2015: 6 | // import 'tinymce/plugins/spellchecker' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/tabfocus/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "tabfocus" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/tabfocus') 5 | // ES2015: 6 | // import 'tinymce/plugins/tabfocus' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/table/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "table" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/table') 5 | // ES2015: 6 | // import 'tinymce/plugins/table' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/template/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "template" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/template') 5 | // ES2015: 6 | // import 'tinymce/plugins/template' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/textcolor/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "textcolor" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/textcolor') 5 | // ES2015: 6 | // import 'tinymce/plugins/textcolor' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/textpattern/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "textpattern" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/textpattern') 5 | // ES2015: 6 | // import 'tinymce/plugins/textpattern' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/toc/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "toc" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/toc') 5 | // ES2015: 6 | // import 'tinymce/plugins/toc' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/visualblocks/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "visualblocks" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/visualblocks') 5 | // ES2015: 6 | // import 'tinymce/plugins/visualblocks' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/visualchars/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "visualchars" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/visualchars') 5 | // ES2015: 6 | // import 'tinymce/plugins/visualchars' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/plugins/wordcount/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "wordcount" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/wordcount') 5 | // ES2015: 6 | // import 'tinymce/plugins/wordcount' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/skins/lightgray/content.mobile.min.css: -------------------------------------------------------------------------------- 1 | .tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection{position:absolute;display:inline-block;background-color:green;opacity:.5}body{-webkit-text-size-adjust:none}body img{max-width:96vw}body table img{max-width:95%} -------------------------------------------------------------------------------- /frontend/dist/dist/skins/lightgray/fonts/tinymce-mobile.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/skins/lightgray/fonts/tinymce-mobile.woff -------------------------------------------------------------------------------- /frontend/dist/dist/skins/lightgray/fonts/tinymce-small.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/skins/lightgray/fonts/tinymce-small.eot -------------------------------------------------------------------------------- /frontend/dist/dist/skins/lightgray/fonts/tinymce-small.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/skins/lightgray/fonts/tinymce-small.ttf -------------------------------------------------------------------------------- /frontend/dist/dist/skins/lightgray/fonts/tinymce-small.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/skins/lightgray/fonts/tinymce-small.woff -------------------------------------------------------------------------------- /frontend/dist/dist/skins/lightgray/fonts/tinymce.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/skins/lightgray/fonts/tinymce.eot -------------------------------------------------------------------------------- /frontend/dist/dist/skins/lightgray/fonts/tinymce.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/skins/lightgray/fonts/tinymce.ttf -------------------------------------------------------------------------------- /frontend/dist/dist/skins/lightgray/fonts/tinymce.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/skins/lightgray/fonts/tinymce.woff -------------------------------------------------------------------------------- /frontend/dist/dist/skins/lightgray/img/anchor.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/skins/lightgray/img/anchor.gif -------------------------------------------------------------------------------- /frontend/dist/dist/skins/lightgray/img/loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/skins/lightgray/img/loader.gif -------------------------------------------------------------------------------- /frontend/dist/dist/skins/lightgray/img/object.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/skins/lightgray/img/object.gif -------------------------------------------------------------------------------- /frontend/dist/dist/skins/lightgray/img/trans.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/skins/lightgray/img/trans.gif -------------------------------------------------------------------------------- /frontend/dist/dist/td_icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/dist/dist/td_icon.ico -------------------------------------------------------------------------------- /frontend/dist/dist/themes/inlite/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "inlite" theme for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/themes/inlite') 5 | // ES2015: 6 | // import 'tinymce/themes/inlite' 7 | require('./theme.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/dist/themes/modern/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "modern" theme for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/themes/modern') 5 | // ES2015: 6 | // import 'tinymce/themes/modern' 7 | require('./theme.js'); 8 | -------------------------------------------------------------------------------- /frontend/dist/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | iView admin v1.3.1 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /frontend/github-gif/access.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/github-gif/access.gif -------------------------------------------------------------------------------- /frontend/github-gif/article-publish.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/github-gif/article-publish.gif -------------------------------------------------------------------------------- /frontend/github-gif/code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/github-gif/code.png -------------------------------------------------------------------------------- /frontend/github-gif/count-to.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/github-gif/count-to.gif -------------------------------------------------------------------------------- /frontend/github-gif/dragable-list.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/github-gif/dragable-list.gif -------------------------------------------------------------------------------- /frontend/github-gif/dragable-table.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/github-gif/dragable-table.gif -------------------------------------------------------------------------------- /frontend/github-gif/editable-table.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/github-gif/editable-table.gif -------------------------------------------------------------------------------- /frontend/github-gif/error-page.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/github-gif/error-page.gif -------------------------------------------------------------------------------- /frontend/github-gif/exportable-table.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/github-gif/exportable-table.gif -------------------------------------------------------------------------------- /frontend/github-gif/home.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/github-gif/home.gif -------------------------------------------------------------------------------- /frontend/github-gif/image-editor.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/github-gif/image-editor.gif -------------------------------------------------------------------------------- /frontend/github-gif/locking.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/github-gif/locking.gif -------------------------------------------------------------------------------- /frontend/github-gif/message.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/github-gif/message.gif -------------------------------------------------------------------------------- /frontend/github-gif/page-tags.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/github-gif/page-tags.gif -------------------------------------------------------------------------------- /frontend/github-gif/sidebarmenu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/github-gif/sidebarmenu.gif -------------------------------------------------------------------------------- /frontend/github-gif/split-pane.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/github-gif/split-pane.gif -------------------------------------------------------------------------------- /frontend/github-gif/table2image.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/github-gif/table2image.gif -------------------------------------------------------------------------------- /frontend/github-gif/theme.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/github-gif/theme.gif -------------------------------------------------------------------------------- /frontend/github-gif/upload.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/github-gif/upload.gif -------------------------------------------------------------------------------- /frontend/github-gif/workflow.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/github-gif/workflow.gif -------------------------------------------------------------------------------- /frontend/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | iView admin 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /frontend/src/api/account/account.js: -------------------------------------------------------------------------------- 1 | import axios from '../../libs/http'; 2 | 3 | const users = '/api/account/users/'; 4 | const groups = '/api/account/groups/'; 5 | const permissions = '/api/account/permissions/'; 6 | const personal = '/api/account/personal/' 7 | 8 | export function GetUserList(params) { 9 | return axios({ 10 | url: users, 11 | method: 'get', 12 | params 13 | }); 14 | } 15 | 16 | export function UpdateUser(id, data) { 17 | return axios({ 18 | url: users + id + '/', 19 | method: 'put', 20 | data: data 21 | }); 22 | } 23 | 24 | export function CreateUser(data) { 25 | return axios({ 26 | url: users, 27 | method: 'post', 28 | data: data 29 | }); 30 | } 31 | 32 | export function DeleteUser(id) { 33 | return axios({ 34 | url: users + id + '/', 35 | method: 'delete', 36 | }); 37 | } 38 | 39 | export function GetGroupList(params) { 40 | return axios({ 41 | url: groups, 42 | method: 'get', 43 | params 44 | }); 45 | } 46 | 47 | export function CreateGroup(data) { 48 | return axios({ 49 | url: groups, 50 | method: 'post', 51 | data: data 52 | }); 53 | } 54 | 55 | export function UpdateGroup(id, data) { 56 | return axios({ 57 | url: groups + id + '/', 58 | method: 'put', 59 | data: data 60 | }); 61 | } 62 | 63 | export function DeleteGroup(id) { 64 | return axios({ 65 | url: groups + id + '/', 66 | method: 'delete', 67 | }); 68 | } 69 | 70 | export function GetPermissonList(params) { 71 | return axios({ 72 | url: permissions, 73 | method: 'get', 74 | params 75 | }); 76 | } 77 | 78 | export function GetPersonal(params) { 79 | return axios({ 80 | url: personal, 81 | method: 'get', 82 | params 83 | }); 84 | } 85 | 86 | export function UpdatePersonal(data) { 87 | return axios({ 88 | url: personal, 89 | method: 'post', 90 | data: data 91 | }); 92 | } -------------------------------------------------------------------------------- /frontend/src/api/dashboard/chart.js: -------------------------------------------------------------------------------- 1 | import axios from '../../libs/http'; 2 | 3 | const chart = '/api/dashboard/chart/'; 4 | 5 | export function GetChartData(params) { 6 | return axios({ 7 | url: chart, 8 | method: 'get', 9 | params 10 | }); 11 | }; -------------------------------------------------------------------------------- /frontend/src/api/login.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | const authUrl = '/api/api-token-auth/'; 4 | const unifiedAuthUrl = '/api/account/unitaryauth/'; 5 | 6 | export function Login (data) { 7 | return axios({ 8 | url: authUrl, 9 | method: 'post', 10 | data: data 11 | }); 12 | }; 13 | 14 | export function UnifiedAuth (data) { 15 | return axios({ 16 | url: unifiedAuthUrl, 17 | method: 'post', 18 | data: data 19 | }); 20 | }; -------------------------------------------------------------------------------- /frontend/src/api/sql/authRules.js: -------------------------------------------------------------------------------- 1 | import axios from '../../libs/http'; 2 | 3 | const authRules = '/api/sqlmng/authrules/'; 4 | 5 | export function GetAuthRules(params) { 6 | return axios({ 7 | url: authRules, 8 | method: 'get', 9 | params 10 | }); 11 | } -------------------------------------------------------------------------------- /frontend/src/api/sql/check.js: -------------------------------------------------------------------------------- 1 | import axios from '../../libs/http' 2 | 3 | const autoSelects = '/api/sqlmng/autoselects/' 4 | const inceptionCheck = '/api/sqlmng/inceptioncheck/' 5 | const personalSettings = '/api/sqlmng/personalsettings/' 6 | 7 | export function GetSelectData(data) { 8 | return axios({ 9 | url: autoSelects, 10 | method: 'post', 11 | data: data 12 | }) 13 | } 14 | 15 | export function CheckSql(data) { 16 | return axios({ 17 | url: inceptionCheck, 18 | method: 'post', 19 | data: data 20 | }) 21 | } 22 | 23 | export function GetPersonalSettings(params) { 24 | return axios({ 25 | url: personalSettings, 26 | method: 'get', 27 | params 28 | }) 29 | } 30 | 31 | export function CreatePersonalSettings(data) { 32 | return axios({ 33 | url: personalSettings, 34 | method: 'post', 35 | data: data 36 | }) 37 | } 38 | 39 | -------------------------------------------------------------------------------- /frontend/src/api/sql/cluster.js: -------------------------------------------------------------------------------- 1 | import axios from '../../libs/http'; 2 | 3 | const dbCluster = '/api/sqlmng/dbcluster/'; 4 | 5 | const dbConfs = '/api/sqlmng/dbconfs/'; 6 | 7 | export function GetDbList (params) { 8 | return axios({ 9 | url: dbConfs, 10 | method: 'get', 11 | params 12 | }); 13 | } 14 | 15 | export function GetClusterList (params) { 16 | return axios({ 17 | url: dbCluster, 18 | method: 'get', 19 | params 20 | }); 21 | } 22 | 23 | export function UpdateCluster (id, data) { 24 | return axios({ 25 | url: dbCluster + id + '/', 26 | method: 'put', 27 | data: data 28 | }); 29 | } 30 | 31 | export function CreateCluster (data) { 32 | return axios({ 33 | url: dbCluster, 34 | method: 'post', 35 | data: data 36 | }); 37 | } 38 | 39 | export function DeleteCluster (id) { 40 | return axios({ 41 | url: dbCluster + id + '/', 42 | method: 'delete', 43 | }); 44 | } -------------------------------------------------------------------------------- /frontend/src/api/sql/dbs.js: -------------------------------------------------------------------------------- 1 | import axios from '../../libs/http'; 2 | 3 | const dbConfs = '/api/sqlmng/dbconfs/'; 4 | const checkConnUrl = '/api/sqlmng/inception/conncheck/' 5 | const GetDatabasesUrl = '/api/sqlmng/inception/showdatabases/' 6 | 7 | export function GetDbList(params) { 8 | return axios({ 9 | url: dbConfs, 10 | method: 'get', 11 | params 12 | }); 13 | } 14 | 15 | export function UpdateDb(id, data) { 16 | return axios({ 17 | url: dbConfs + id + '/', 18 | method: 'put', 19 | data: data 20 | }); 21 | } 22 | 23 | export function CreateDb(data) { 24 | return axios({ 25 | url: dbConfs, 26 | method: 'post', 27 | data: data 28 | }); 29 | } 30 | 31 | export function DeleteDb(id) { 32 | return axios({ 33 | url: dbConfs + id + '/', 34 | method: 'delete', 35 | }); 36 | } 37 | 38 | export function CheckConn(data) { 39 | return axios({ 40 | url: checkConnUrl, 41 | method: 'post', 42 | data: data 43 | }); 44 | } 45 | 46 | export function GetDatabases(data) { 47 | return axios({ 48 | url: GetDatabasesUrl, 49 | method: 'post', 50 | data: data 51 | }); 52 | } 53 | 54 | -------------------------------------------------------------------------------- /frontend/src/api/sql/dbworkorder.js: -------------------------------------------------------------------------------- 1 | import axios from '../../libs/http'; 2 | 3 | const dbWorkOrder = '/api/sqlmng/dbworkorder/'; 4 | 5 | export function GetDbWorkOrderList (params) { 6 | return axios({ 7 | url: dbWorkOrder, 8 | method: 'get', 9 | params 10 | }); 11 | } 12 | 13 | export function UpdateDbWorkOrder (id, data) { 14 | return axios({ 15 | url: dbWorkOrder + id + '/', 16 | method: 'put', 17 | data: data 18 | }); 19 | } 20 | 21 | export function CreateDbWorkOrder (data) { 22 | return axios({ 23 | url: dbWorkOrder, 24 | method: 'post', 25 | data: data 26 | }); 27 | } 28 | 29 | export function ManageDbWorkOrder (data) { 30 | let urnMap = { 31 | 1: 'database_order_approve', 32 | 2: 'database_order_disapprove', 33 | 3: 'database_order_reject' 34 | } 35 | let status = data.status; 36 | let urn = urnMap[status]; 37 | return axios({ 38 | url: dbWorkOrder + data.id + '/' + urn + '/', 39 | method: 'post', 40 | data: data 41 | }); 42 | } 43 | -------------------------------------------------------------------------------- /frontend/src/api/sql/inception.js: -------------------------------------------------------------------------------- 1 | import axios from '../../libs/http'; 2 | 3 | const inceptions = '/api/sqlmng/inceptions/'; 4 | 5 | export function GetSqlList (params) { 6 | return axios({ 7 | url: inceptions, 8 | method: 'get', 9 | params 10 | }); 11 | } 12 | 13 | export function GetSqlDetail (id) { 14 | return axios.get(inceptions + id + '/'); 15 | } 16 | 17 | export function SqlAction (id, action) { 18 | return axios.get(inceptions + id + '/' + action + '/'); 19 | } 20 | 21 | export function SetCron (id, action, data) { 22 | return axios({ 23 | url: inceptions + id + '/' + action + '/', 24 | method: 'post', 25 | data: data 26 | }); 27 | } -------------------------------------------------------------------------------- /frontend/src/api/sql/inceptionSettings.js: -------------------------------------------------------------------------------- 1 | import axios from '../../libs/http'; 2 | 3 | const variablesUrl = '/api/sqlmng/inception/variables/'; 4 | const connectionUrl = '/api/sqlmng/inception/connection/'; 5 | const backupUrl = '/api/sqlmng/inception/backup/'; 6 | const checkConnUrl = '/api/sqlmng/inception/conncheck/'; 7 | 8 | export function GetInceptionVariables (params) { 9 | return axios({ 10 | url: variablesUrl, 11 | method: 'get', 12 | params 13 | }); 14 | } 15 | 16 | export function SetInceptionVariables (data) { 17 | return axios({ 18 | url: variablesUrl, 19 | method: 'post', 20 | data: data 21 | }); 22 | } 23 | 24 | export function CheckConn (data) { 25 | return axios({ 26 | url: checkConnUrl, 27 | method: 'post', 28 | data: data 29 | }); 30 | } 31 | 32 | export function GetInceptionBackup (params) { 33 | return axios({ 34 | url: backupUrl, 35 | method: 'get', 36 | params 37 | }) 38 | } 39 | 40 | export function GetInceptionConnection (params) { 41 | return axios({ 42 | url: connectionUrl, 43 | method: 'get', 44 | params 45 | }); 46 | } 47 | 48 | export function UpdateInceptionConnection (id, data) { 49 | return axios({ 50 | url: connectionUrl + id + '/', 51 | method: 'put', 52 | data: data 53 | }); 54 | } 55 | 56 | export function CreateInceptionConnection (data) { 57 | return axios({ 58 | url: connectionUrl, 59 | method: 'post', 60 | data: data 61 | }); 62 | } 63 | -------------------------------------------------------------------------------- /frontend/src/api/sql/mailactions.js: -------------------------------------------------------------------------------- 1 | import axios from '../../libs/http'; 2 | 3 | const mailactions = '/api/sqlmng/mailactions/'; 4 | 5 | export function GetMailActions(params) { 6 | return axios({ 7 | url: mailactions, 8 | method: 'get', 9 | params 10 | }); 11 | } 12 | 13 | export function SetMailActions(data) { 14 | return axios({ 15 | url: mailactions, 16 | method: 'post', 17 | data: data 18 | }); 19 | } -------------------------------------------------------------------------------- /frontend/src/api/sql/sqlquery.js: -------------------------------------------------------------------------------- 1 | import axios from '../../libs/http'; 2 | const dbConfs = '/api/sqlmng/dbconfs/'; 3 | 4 | export function GetTableList(id) { 5 | return axios.get(dbConfs + id + '/tables/'); 6 | } 7 | 8 | export function GetTableInfo(id, tableName) { 9 | return axios.get(dbConfs + id + '/table_info/?table_name=' + tableName); 10 | } 11 | 12 | export function GetSqlAdvisor (id, data) { 13 | return axios({ 14 | url: dbConfs + id + '/sql_advisor/', 15 | method: 'post', 16 | data: data 17 | }); 18 | } 19 | 20 | export function GetSqlSOAR (id, data) { 21 | return axios({ 22 | url: dbConfs + id + '/sql_soar/', 23 | method: 'post', 24 | data: data 25 | }); 26 | } 27 | 28 | export function GetTableRelatedStatus (id) { 29 | return axios.get(dbConfs + id + '/relate_permission/'); 30 | } 31 | -------------------------------------------------------------------------------- /frontend/src/api/sql/sqlsettings.js: -------------------------------------------------------------------------------- 1 | import axios from '../../libs/http'; 2 | 3 | const sqlsettings = '/api/sqlmng/sqlsettings/'; 4 | 5 | export function GetFWList(params) { 6 | return axios({ 7 | url: sqlsettings, 8 | method: 'get', 9 | params 10 | }); 11 | } 12 | 13 | export function UpdateFW(id, data) { 14 | return axios({ 15 | url: sqlsettings + id + '/', 16 | method: 'put', 17 | data: data 18 | }); 19 | } 20 | 21 | export function CreateFW(data) { 22 | return axios({ 23 | url: sqlsettings, 24 | method: 'post', 25 | data: data 26 | }); 27 | } -------------------------------------------------------------------------------- /frontend/src/api/sql/strategy.js: -------------------------------------------------------------------------------- 1 | import axios from '../../libs/http'; 2 | 3 | const strategy = '/api/sqlmng/strategy/'; 4 | 5 | export function GetStrategyList(params) { 6 | return axios({ 7 | url: strategy, 8 | method: 'get', 9 | params 10 | }); 11 | } 12 | 13 | export function UpdateStrategy(id, data) { 14 | return axios({ 15 | url: strategy + id + '/', 16 | method: 'put', 17 | data: data 18 | }); 19 | } 20 | 21 | export function CreateStrategy(data) { 22 | return axios({ 23 | url: strategy, 24 | method: 'post', 25 | data: data 26 | }); 27 | } -------------------------------------------------------------------------------- /frontend/src/api/sql/suggestion.js: -------------------------------------------------------------------------------- 1 | import axios from '../../libs/http'; 2 | 3 | const suggestion = '/api/sqlmng/suggestion/'; 4 | 5 | export function GetSuggestionList(params) { 6 | return axios({ 7 | url: suggestion, 8 | method: 'get', 9 | params 10 | }); 11 | } 12 | 13 | export function CreateSuggestion(data) { 14 | return axios({ 15 | url: suggestion, 16 | method: 'post', 17 | data: data 18 | }); 19 | } 20 | 21 | export function DeleteSuggestion(id) { 22 | return axios({ 23 | url: suggestion + id + '/', 24 | method: 'delete', 25 | }); 26 | } -------------------------------------------------------------------------------- /frontend/src/app.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 25 | 26 | 38 | -------------------------------------------------------------------------------- /frontend/src/files/soar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/files/soar -------------------------------------------------------------------------------- /frontend/src/images/cropper-test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/images/cropper-test.png -------------------------------------------------------------------------------- /frontend/src/images/github/api.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/images/github/api.png -------------------------------------------------------------------------------- /frontend/src/images/github/check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/images/github/check.png -------------------------------------------------------------------------------- /frontend/src/images/github/dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/images/github/dashboard.png -------------------------------------------------------------------------------- /frontend/src/images/github/detail1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/images/github/detail1.png -------------------------------------------------------------------------------- /frontend/src/images/github/detail2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/images/github/detail2.png -------------------------------------------------------------------------------- /frontend/src/images/github/detail3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/images/github/detail3.png -------------------------------------------------------------------------------- /frontend/src/images/github/list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/images/github/list.png -------------------------------------------------------------------------------- /frontend/src/images/github/mail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/images/github/mail.png -------------------------------------------------------------------------------- /frontend/src/images/github/plantformsettings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/images/github/plantformsettings.png -------------------------------------------------------------------------------- /frontend/src/images/github/platsettings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/images/github/platsettings.png -------------------------------------------------------------------------------- /frontend/src/images/github/query.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/images/github/query.png -------------------------------------------------------------------------------- /frontend/src/images/github/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/images/github/user.png -------------------------------------------------------------------------------- /frontend/src/images/logo-min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/images/logo-min.jpg -------------------------------------------------------------------------------- /frontend/src/images/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/images/logo.jpg -------------------------------------------------------------------------------- /frontend/src/images/mysql.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/images/mysql.png -------------------------------------------------------------------------------- /frontend/src/libs/http.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by superman on 17/2/16. 3 | * http配置 4 | */ 5 | 6 | import Cookies from 'js-cookie'; 7 | import axios from 'axios'; 8 | import store from '../store'; 9 | import { router } from '../router'; 10 | import Vue from 'vue'; 11 | import iView from 'iview'; 12 | 13 | // axios 配置 14 | axios.defaults.timeout = 30000; 15 | 16 | function permerror(nodesc, title, desc) { 17 | iView.Notice.error({ 18 | duration: 10, 19 | title: title, 20 | desc: nodesc ? '' : desc 21 | }); 22 | } 23 | 24 | // http request 拦截器 25 | axios.interceptors.request.use( 26 | function(config) { 27 | let token = Cookies.get('token') 28 | if (token) { // 获取到了本地的token 29 | config.headers.Authorization = 'JWT ' + token 30 | } 31 | return config 32 | }, 33 | err => { 34 | return Promise.reject(err) 35 | }) 36 | 37 | // http response 拦截器 38 | axios.interceptors.response.use( 39 | (response) => { 40 | return response 41 | }, 42 | error => { 43 | console.log(iView) 44 | 45 | if (error.response) { 46 | //console.log('response_error:', error.response) 47 | switch (error.response.status) { 48 | case 400: 49 | permerror(false, error.response.request.statusText, error.response.request.responseText) 50 | break 51 | 52 | case 401: // 拦截验证token失败的请求,清除token信息并跳转到登录页面 53 | store.commit('logout') 54 | router.push({ 55 | name: 'login' 56 | }) 57 | break 58 | 59 | case 403: 60 | permerror(false, error.response.statusText, error.response.data.detail) 61 | break 62 | 63 | case 500: 64 | permerror(false, error.response.status, error.response.statusText) 65 | break 66 | 67 | } 68 | } 69 | // console.log(JSON.stringify(error));//console : Error: Request failed with status code 402 70 | return Promise.reject(error) // 返回错误信息 71 | 72 | }) 73 | 74 | export default axios -------------------------------------------------------------------------------- /frontend/src/locale/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import Locales from './locale'; 3 | import zhLocale from 'iview/src/locale/lang/zh-CN'; 4 | import enLocale from 'iview/src/locale/lang/en-US'; 5 | import zhTLocale from 'iview/src/locale/lang/zh-TW'; 6 | 7 | // 自动设置语言 8 | const navLang = navigator.language; 9 | const localLang = (navLang === 'zh-CN' || navLang === 'en-US') ? navLang : false; 10 | const lang = window.localStorage.lang || localLang || 'zh-CN'; 11 | 12 | Vue.config.lang = lang; 13 | 14 | // 多语言配置 15 | const locales = Locales; 16 | const mergeZH = Object.assign(zhLocale, locales['zh-CN']); 17 | const mergeEN = Object.assign(enLocale, locales['en-US']); 18 | const mergeTW = Object.assign(zhTLocale, locales['zh-TW']); 19 | Vue.locale('zh-CN', mergeZH); 20 | Vue.locale('en-US', mergeEN); 21 | Vue.locale('zh-TW', mergeTW); 22 | -------------------------------------------------------------------------------- /frontend/src/locale/locale.js: -------------------------------------------------------------------------------- 1 | export default { 2 | 'zh-CN': { 3 | home: '首页', 4 | switchLangTitle: '切换语言', 5 | international: '多语言切换', 6 | iviewComponentTitle: 'iview组件多语言切换', 7 | tip: '注:iview-admin只是为了示范如何实现多语言切换,所以只对当前页做了翻译。', 8 | intro: 'iview目前支持15种语言,只要你看得到的iview组件出现iview内置文字的地方都会根据你设置的语言类型自动切换对应的语言。', 9 | placeholderText: '请输入文字...', 10 | placeholderDate: '选择日期', 11 | name: '姓名', 12 | company: '公司', 13 | btnText: '点击查看模态框', 14 | modalText: '在这里你可以看到iview模态框默认的确定和取消按钮会切换语言', 15 | poptip: '国际化的气泡提示', 16 | showPoptipText: '点击显示气泡提示' 17 | }, 18 | 'zh-TW': { 19 | home: '首頁', 20 | switchLangTitle: '切換語言', 21 | international: '多語言切換', 22 | iviewComponentTitle: 'iview組件多語言切換', 23 | tip: '注:iview-admin只是為了示範如何實現多語言切換,所以只對當前頁做了翻譯。', 24 | intro: 'iview目前支持15種語言,只要你看得到的iview組件出現iview內置文字的地方都會根據你設置的語言類型自動切換對應的語言。', 25 | placeholderText: '請輸入文字...', 26 | placeholderDate: '選擇日期', 27 | name: '姓名', 28 | company: '公司', 29 | btnText: '點擊查看模態框', 30 | modalText: '在這裡你可以看到iview模態框默認的確定和取消按鈕會切換語言', 31 | poptip: '國際化的氣泡提示', 32 | showPoptipText: '點擊顯示氣泡提示' 33 | }, 34 | 'en-US': { 35 | home: 'home', 36 | switchLangTitle: 'Switch Lang', 37 | international: 'Switch Lang', 38 | tip: 'Note: iview-admin just to demonstrate how to achieve multi-language switching, so only the current page to do the translation.', 39 | iviewComponentTitle: 'The effect on the iview', 40 | intro: 'iview currently supports 15 languages, as long as you see the iview component where the text will be based on your language type automatically set the corresponding language.', 41 | placeholderText: 'please enter text...', 42 | placeholderDate: 'Select Date', 43 | name: 'name', 44 | company: 'company', 45 | btnText: 'Click to show modal', 46 | modalText: 'Here you can see the iview modal box by default to the OK and Cancel buttons that will switch the language', 47 | poptip: 'international poptip', 48 | showPoptipText: 'Click to show poptip' 49 | } 50 | }; 51 | -------------------------------------------------------------------------------- /frontend/src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import iView from 'iview' 3 | import { router } from './router/index' 4 | import { appRouter } from './router/router' 5 | import App from './app.vue' 6 | import '@/locale' 7 | import 'iview/dist/styles/iview.css' 8 | import VueI18n from 'vue-i18n' 9 | import util from './libs/util' 10 | import store from './store' 11 | 12 | Vue.use(VueI18n) 13 | Vue.use(iView) 14 | Vue.prototype.util = util 15 | 16 | new Vue({ 17 | el: '#app', 18 | router: router, 19 | store: store, 20 | render: h => h(App), 21 | data: { 22 | currentPageName: '' 23 | }, 24 | mounted() { 25 | this.currentPageName = this.$route.name 26 | // 显示打开的页面的列表 27 | this.$store.commit('setOpenedList') 28 | this.$store.commit('initCachepage') 29 | // 权限菜单过滤相关 30 | this.$store.commit('updateMenulist') 31 | // iview-admin检查更新 32 | // util.checkUpdate(this) 33 | }, 34 | created() { 35 | let tagsList = [] 36 | appRouter.map((item) => { 37 | if (item.children.length <= 1) { 38 | tagsList.push(item.children[0]) 39 | } else { 40 | tagsList.push(...item.children) 41 | } 42 | }) 43 | this.$store.commit('setTagsList', tagsList) 44 | } 45 | }) -------------------------------------------------------------------------------- /frontend/src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import iView from 'iview'; 3 | import Util from '../libs/util'; 4 | import VueRouter from 'vue-router'; 5 | import Cookies from 'js-cookie'; 6 | import {routers, otherRouter, appRouter} from './router'; 7 | 8 | Vue.use(VueRouter); 9 | 10 | // 路由配置 11 | const RouterConfig = { 12 | mode: 'history', 13 | routes: routers 14 | }; 15 | 16 | export const router = new VueRouter(RouterConfig); 17 | 18 | router.beforeEach((to, from, next) => { 19 | iView.LoadingBar.start(); 20 | Util.title(to.meta.title); 21 | if (Cookies.get('locking') === '1' && to.name !== 'locking') { // 判断当前是否是锁定状态 22 | next({ 23 | replace: true, 24 | name: 'locking' 25 | }); 26 | } else if (Cookies.get('locking') === '0' && to.name === 'locking') { 27 | next(false); 28 | } else { 29 | if (!Cookies.get('user') && to.name !== 'login') { // 判断是否已经登录且前往的页面不是登录页 30 | next({ 31 | name: 'login' 32 | }); 33 | } else if (Cookies.get('user') && to.name === 'login') { // 判断是否已经登录且前往的是登录页 34 | Util.title(); 35 | next({ 36 | name: 'home_index' 37 | }); 38 | } else { 39 | const curRouterObj = Util.getRouterObjByName([otherRouter, ...appRouter], to.name); 40 | if (curRouterObj && curRouterObj.access !== undefined) { // 需要判断权限的路由 41 | if (curRouterObj.access === parseInt(Cookies.get('access'))) { 42 | Util.toDefaultPage([otherRouter, ...appRouter], to.name, router, next); // 如果在地址栏输入的是一级菜单则默认打开其第一个二级菜单的页面 43 | } else { 44 | next({ 45 | replace: true, 46 | name: 'error-403' 47 | }); 48 | } 49 | } else { // 没有配置权限的路由, 直接通过 50 | Util.toDefaultPage([...routers], to.name, router, next); 51 | } 52 | } 53 | } 54 | }); 55 | 56 | router.afterEach((to) => { 57 | Util.openNewPage(router.app, to.name, to.params, to.query); 58 | iView.LoadingBar.finish(); 59 | window.scrollTo(0, 0); 60 | }); 61 | -------------------------------------------------------------------------------- /frontend/src/static/base.css: -------------------------------------------------------------------------------- 1 | 2 | .modalcontent { 3 | max-height:300px; 4 | overflow-y:auto 5 | } 6 | -------------------------------------------------------------------------------- /frontend/src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import Vuex from 'vuex'; 3 | 4 | import app from './modules/app'; 5 | import user from './modules/user'; 6 | import mystore from './modules/mystore'; 7 | 8 | Vue.use(Vuex); 9 | 10 | const store = new Vuex.Store({ 11 | state: { 12 | // 13 | }, 14 | mutations: { 15 | // 16 | }, 17 | actions: { 18 | 19 | }, 20 | modules: { 21 | app, 22 | user, 23 | mystore 24 | } 25 | }); 26 | 27 | export default store; -------------------------------------------------------------------------------- /frontend/src/store/modules/mystore.js: -------------------------------------------------------------------------------- 1 | import Cookies from 'js-cookie'; 2 | 3 | const mystore = { 4 | state: { 5 | count: 6 6 | }, 7 | 8 | mutations: { 9 | add(state) { 10 | state.count += 1; 11 | }, 12 | reduce(state, payload) { 13 | state.count -= payload.num; 14 | }, 15 | }, 16 | getters: { 17 | gcount: function(state) { 18 | state.count += 200; 19 | return state.count; 20 | } 21 | }, 22 | 23 | actions: { 24 | addAsync({ commit }) { 25 | setTimeout(() => { 26 | commit('add'); 27 | }, 1000); 28 | } 29 | } 30 | } 31 | 32 | export default mystore -------------------------------------------------------------------------------- /frontend/src/store/modules/user.js: -------------------------------------------------------------------------------- 1 | import Cookies from 'js-cookie' 2 | 3 | const user = { 4 | state: { 5 | token: '' 6 | }, 7 | mutations: { 8 | logout(state, vm) { 9 | Cookies.remove('user') 10 | Cookies.remove('password') 11 | Cookies.remove('token') 12 | 13 | // 恢复默认样式 14 | let themeLink = document.querySelector('link[name="theme"]') 15 | themeLink.setAttribute('href', '') 16 | // 清空打开的页面等数据,但是保存主题数据 17 | let theme = '' 18 | if (localStorage.theme) { 19 | theme = localStorage.theme 20 | } 21 | // localStorage.clear() 22 | if (theme) { 23 | localStorage.theme = theme 24 | } 25 | } 26 | } 27 | } 28 | 29 | export default user -------------------------------------------------------------------------------- /frontend/src/styles/common.less: -------------------------------------------------------------------------------- 1 | .margin-top-8{ 2 | margin-top: 8px; 3 | } 4 | .margin-top-10{ 5 | margin-top: 10px; 6 | } 7 | .margin-top-20{ 8 | margin-top: 20px; 9 | } 10 | .margin-left-10{ 11 | margin-left: 10px; 12 | } 13 | .margin-bottom-10{ 14 | margin-bottom: 10px; 15 | } 16 | .margin-bottom-100{ 17 | margin-bottom: 100px; 18 | } 19 | .margin-right-10{ 20 | margin-right: 10px; 21 | } 22 | .padding-left-6{ 23 | padding-left: 6px; 24 | } 25 | .padding-left-8{ 26 | padding-left: 5px; 27 | } 28 | .padding-left-10{ 29 | padding-left: 10px; 30 | } 31 | .padding-left-20{ 32 | padding-left: 20px; 33 | } 34 | .height-100{ 35 | height: 100%; 36 | } 37 | .height-120px{ 38 | height: 100px; 39 | } 40 | .height-200px{ 41 | height: 200px; 42 | } 43 | .height-492px{ 44 | height: 492px; 45 | } 46 | .height-460px{ 47 | height: 460px; 48 | } 49 | .line-gray{ 50 | height: 0; 51 | border-bottom: 2px solid #dcdcdc; 52 | } 53 | .notwrap{ 54 | word-break:keep-all; 55 | white-space:nowrap; 56 | overflow: hidden; 57 | text-overflow: ellipsis; 58 | } 59 | .padding-left-5{ 60 | padding-left: 10px; 61 | } 62 | [v-cloak]{ 63 | display: none; 64 | } -------------------------------------------------------------------------------- /frontend/src/styles/fonts/ionicons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/styles/fonts/ionicons.eot -------------------------------------------------------------------------------- /frontend/src/styles/fonts/ionicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/styles/fonts/ionicons.ttf -------------------------------------------------------------------------------- /frontend/src/styles/fonts/ionicons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/styles/fonts/ionicons.woff -------------------------------------------------------------------------------- /frontend/src/styles/loading.less: -------------------------------------------------------------------------------- 1 | .demo-spin-icon-load{ 2 | animation: ani-demo-spin 1s linear infinite; 3 | } 4 | @keyframes ani-demo-spin { 5 | from { transform: rotate(0deg);} 6 | 50% { transform: rotate(180deg);} 7 | to { transform: rotate(360deg);} 8 | } -------------------------------------------------------------------------------- /frontend/src/styles/login_bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/styles/login_bg.jpg -------------------------------------------------------------------------------- /frontend/src/template/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | <%= htmlWebpackPlugin.options.title %> 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /frontend/src/utils/account/account.js: -------------------------------------------------------------------------------- 1 | 2 | export function contains (arr, obj) { 3 | var i = arr.length; 4 | while (i--) { 5 | if (arr[i].id === obj) { 6 | return true; 7 | } 8 | } 9 | return false; 10 | } 11 | -------------------------------------------------------------------------------- /frontend/src/utils/base/contains.js: -------------------------------------------------------------------------------- 1 | export function ContainsIdList (arr, id) { 2 | var i = arr.length; 3 | while (i--) { 4 | if (arr[i] === id) { 5 | return true; 6 | } 7 | } 8 | return false; 9 | } 10 | -------------------------------------------------------------------------------- /frontend/src/utils/base/date.js: -------------------------------------------------------------------------------- 1 | 2 | export function addDate (date, days) { 3 | var d = new Date(date); 4 | d.setDate(d.getDate() + days); 5 | var m = d.getMonth() + 1; 6 | return d.getFullYear() + '-' + m + '-' + d.getDate(); 7 | } 8 | export function convertNumber (num) { 9 | if (num > 0 && num < 10) { 10 | num = '0' + num; 11 | } 12 | return num; 13 | } 14 | 15 | export function formatDate (date) { 16 | if (typeof (date) === 'string') { 17 | return date; 18 | } 19 | let year = date.getFullYear(); 20 | let month = date.getMonth() + 1; 21 | let day = date.getDate(); 22 | month = convertNumber(month); 23 | day = convertNumber(day); 24 | return year + '-' + month + '-' + day; 25 | } 26 | 27 | export function formatTime (time) { 28 | return time.split('.')[0].replace('T',' ') 29 | } -------------------------------------------------------------------------------- /frontend/src/utils/sql/data.js: -------------------------------------------------------------------------------- 1 | 2 | export const dateOption = { 3 | shortcuts: [ 4 | { 5 | text: '1 周', 6 | value () { 7 | const end = new Date(); 8 | const start = new Date(); 9 | start.setTime(start.getTime() - 3600 * 1000 * 24 * 7); 10 | return [start, end]; 11 | } 12 | }, 13 | { 14 | text: '1 月', 15 | value () { 16 | const end = new Date(); 17 | const start = new Date(); 18 | start.setTime(start.getTime() - 3600 * 1000 * 24 * 30); 19 | return [start, end]; 20 | } 21 | }, 22 | { 23 | text: '3 月', 24 | value () { 25 | const end = new Date(); 26 | const start = new Date(); 27 | start.setTime(start.getTime() - 3600 * 1000 * 24 * 90); 28 | return [start, end]; 29 | } 30 | } 31 | ] 32 | } 33 | 34 | 35 | const baseData = { 36 | dateOption: dateOption, 37 | 38 | }; 39 | 40 | export default baseData; 41 | 42 | -------------------------------------------------------------------------------- /frontend/src/utils/sql/formatData.js: -------------------------------------------------------------------------------- 1 | export function CascaderData (dbs) { 2 | let formatDataList = [] 3 | for (let i in dbs) { 4 | let itemb = dbs[i] 5 | if ( formatDataList.length == 0) { 6 | let data = { 7 | value: itemb.cluster_id, 8 | label: itemb.cluster_name, 9 | children: [ 10 | { 11 | value: itemb.env, 12 | label: itemb.env, 13 | children: [ 14 | { 15 | value: itemb.id, 16 | label: itemb.name, 17 | }, 18 | ] 19 | }, 20 | ] 21 | } 22 | formatDataList.push(data) 23 | } else { 24 | let tag = 0 25 | for (let j in formatDataList) { 26 | let itema = formatDataList[j] 27 | if (itemb.cluster_name == itema.label) { 28 | let env_children = itema.children 29 | if (env_children.length == 2) { 30 | for (let m in env_children) { 31 | let env_item = env_children[m] 32 | if (env_item.value == itemb.env) { 33 | let host = {value:itemb.id, label:itemb.name} 34 | env_item.children.push(host) 35 | break 36 | } 37 | } 38 | 39 | } else if (env_children.length == 1) { 40 | let env_children0 = env_children[0] 41 | if (env_children0.value == itemb.env) { 42 | let host = {value:itemb.id, label:itemb.name} 43 | env_children0.children.push(host) 44 | } else { 45 | let data = 46 | { 47 | value: itemb.env, 48 | label: itemb.env, 49 | children: [ 50 | { 51 | value: itemb.id, 52 | label: itemb.name, 53 | }, 54 | ] 55 | } 56 | env_children.push(data) 57 | } 58 | } 59 | tag = 1 60 | break 61 | } 62 | } 63 | if (tag == 0) { 64 | let data = { 65 | value: itemb.cluster_id, 66 | label: itemb.cluster_name, 67 | children: [ 68 | { 69 | value: itemb.env, 70 | label: itemb.env, 71 | children: [ 72 | { 73 | value: itemb.id, 74 | label: itemb.name, 75 | }, 76 | ] 77 | }, 78 | ] 79 | } 80 | formatDataList.push(data) 81 | } 82 | 83 | } 84 | 85 | } 86 | return formatDataList 87 | } -------------------------------------------------------------------------------- /frontend/src/utils/sql/inception.js: -------------------------------------------------------------------------------- 1 | 2 | export function getSqlContent (sqlContent) { 3 | const sqlContentList = sqlContent.split(';') 4 | sqlContent = [] 5 | sqlContentList.map( (item) => { 6 | if (item.length > 2) { 7 | sqlContent.push({ 8 | value:item + ';', 9 | }) 10 | } 11 | }) 12 | return sqlContent 13 | } 14 | 15 | export function handleBadgeData (steps) { 16 | let count = 0 // status不为0即纳入计数 17 | let badgeStatus = '' // 最后一个不为0的step 状态,即为徽标状态 18 | for (let i in steps) { 19 | let step = steps[i] 20 | let status = step.status 21 | if (status != 0) { // 不为0的状态 22 | count += 1 23 | if (i < steps.length - 1){ 24 | if (steps[i+1] == 0){ // 后一位是状态0 25 | badgeStatus = status 26 | } 27 | } else { // 最后一个元素 28 | badgeStatus = status 29 | } 30 | } 31 | } 32 | return {count:count, badgeStatus:badgeStatus} 33 | } 34 | 35 | 36 | -------------------------------------------------------------------------------- /frontend/src/vendors/vendors.base.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import iView from 'iview'; 3 | import VueRouter from 'vue-router'; 4 | import Vuex from 'vuex'; 5 | -------------------------------------------------------------------------------- /frontend/src/vendors/vendors.exten.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | // import echarts from 'echarts'; 3 | import Cookies from 'js-cookie'; 4 | import clipboard from 'clipboard'; 5 | import html2canvas from 'html2canvas'; 6 | import rasterizehtml from 'rasterizehtml'; 7 | -------------------------------------------------------------------------------- /frontend/src/views/access/access-test.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | 15 | 18 | -------------------------------------------------------------------------------- /frontend/src/views/access/access.less: -------------------------------------------------------------------------------- 1 | .access{ 2 | &-user-con{ 3 | height: 200px; 4 | } 5 | &-current-user-con{ 6 | text-align: center; 7 | padding-top: 10px; 8 | img{ 9 | display: block; 10 | width: 100px; 11 | height: 100px; 12 | border: 2px solid #dddde2; 13 | border-radius: 50%; 14 | margin: 0px auto 10px; 15 | } 16 | p{ 17 | display: block; 18 | padding: 20px 0 0; 19 | b{ 20 | margin: 0 10px; 21 | color: #2d8cf0; 22 | } 23 | } 24 | } 25 | &-change-access-con{ 26 | &-row{ 27 | height: 200px; 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /frontend/src/views/login.less: -------------------------------------------------------------------------------- 1 | .login{ 2 | width: 100%; 3 | height: 100%; 4 | //background-image: url('https://file.iviewui.com/iview-admin/login_bg.jpg'); 5 | background-image: url('../styles/login_bg.jpg'); 6 | background-size: cover; 7 | background-position: center; 8 | position: relative; 9 | &-con{ 10 | position: absolute; 11 | right: 160px; 12 | top: 50%; 13 | transform: translateY(-60%); 14 | width: 300px; 15 | &-header{ 16 | font-size: 16px; 17 | font-weight: 300; 18 | text-align: center; 19 | padding: 30px 0; 20 | } 21 | .form-con{ 22 | padding: 10px 0 0; 23 | } 24 | .login-tip{ 25 | font-size: 10px; 26 | text-align: center; 27 | color: #c3c3c3; 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /frontend/src/views/main-components/breadcrumb-nav.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 28 | 29 | -------------------------------------------------------------------------------- /frontend/src/views/main-components/lockscreen/components/locking-page.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 45 | -------------------------------------------------------------------------------- /frontend/src/views/main-components/message-tip.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 31 | -------------------------------------------------------------------------------- /frontend/src/views/main-components/shrinkable-menu/styles/menu.less: -------------------------------------------------------------------------------- 1 | .ivu-shrinkable-menu{ 2 | height: 100%; 3 | width: 100%; 4 | } -------------------------------------------------------------------------------- /frontend/src/views/my-components/area-linkage/area-linkage.less: -------------------------------------------------------------------------------- 1 | .area-linkage-page{ 2 | &-row1{ 3 | height: 366px !important; 4 | } 5 | &-row2{ 6 | height: 112px !important; 7 | } 8 | } -------------------------------------------------------------------------------- /frontend/src/views/my-components/area-linkage/util/index.js: -------------------------------------------------------------------------------- 1 | let util = {}; 2 | 3 | util.levelArr = [0, 1, 2, 3]; 4 | 5 | util.oneOf = (item, arr) => { 6 | return arr.some(i => { 7 | return i === item; 8 | }); 9 | }; 10 | util.getIndex = (list, name) => { 11 | for (const i in list) { 12 | if (list[i] === name) { 13 | return i; 14 | } 15 | } 16 | }; 17 | 18 | util.dataType = ['all', 'code', 'name']; 19 | 20 | util.checkLevel = val => { 21 | return util.oneOf(val, util.levelArr); 22 | }; 23 | 24 | export default util; 25 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/count-to/count-to.less: -------------------------------------------------------------------------------- 1 | .countto-page-row{ 2 | height: 200px; 3 | } 4 | .count-to-con{ 5 | display: block; 6 | width: 100%; 7 | text-align: center; 8 | } 9 | .pre-code-show-con p{ 10 | height: 30px; 11 | margin: 0; 12 | } -------------------------------------------------------------------------------- /frontend/src/views/my-components/draggable-list/draggable-list.less: -------------------------------------------------------------------------------- 1 | .iview-admin-draggable-list{ 2 | height: 100%; 3 | } 4 | .iview-admin-draggable-list li{ 5 | padding: 9px; 6 | border: 1px solid #e7ebee; 7 | border-radius: 3px; 8 | margin-bottom: 5px; 9 | cursor: pointer; 10 | position: relative; 11 | transition: all .2s; 12 | } 13 | .iview-admin-draggable-list li:hover{ 14 | color: #87b4ee; 15 | border-color: #87b4ee; 16 | transition: all .2s; 17 | } 18 | .iview-admin-draggable-delete{ 19 | height: 100%; 20 | position: absolute; 21 | right: -8px; 22 | top: 0px; 23 | display: none; 24 | } 25 | .iview-admin-draggable-list li:hover .iview-admin-draggable-delete{ 26 | display: block; 27 | } 28 | .placeholder-style{ 29 | display: block !important; 30 | color: transparent; 31 | border-style: dashed !important; 32 | } 33 | .delte-item-animation{ 34 | opacity: 0; 35 | transition: all .2s; 36 | } 37 | .iview-admin-draggable-list{ 38 | overflow: auto 39 | } -------------------------------------------------------------------------------- /frontend/src/views/my-components/file-upload/upload.less: -------------------------------------------------------------------------------- 1 | .admin-upload-list{ 2 | display: inline-block; 3 | width: 60px; 4 | height: 60px; 5 | text-align: center; 6 | line-height: 60px; 7 | border: 1px solid transparent; 8 | border-radius: 4px; 9 | overflow: hidden; 10 | background: #fff; 11 | position: relative; 12 | box-shadow: 0 1px 1px rgba(0,0,0,.2); 13 | margin-right: 4px; 14 | } 15 | .admin-upload-list img{ 16 | width: 100%; 17 | height: 100%; 18 | } 19 | .admin-upload-list-cover{ 20 | display: none; 21 | position: absolute; 22 | top: 0; 23 | bottom: 0; 24 | left: 0; 25 | right: 0; 26 | background: rgba(0,0,0,.6); 27 | } 28 | .admin-upload-list:hover .admin-upload-list-cover{ 29 | display: block; 30 | } 31 | .admin-upload-list-cover i{ 32 | color: #fff; 33 | font-size: 20px; 34 | cursor: pointer; 35 | margin: 0 2px; 36 | } -------------------------------------------------------------------------------- /frontend/src/views/my-components/image-editor/image-editor.less: -------------------------------------------------------------------------------- 1 | .image-editor{ 2 | .cropper{ 3 | box-sizing: border-box; 4 | border: 1px solid #c3c3c3; 5 | width: 100%; 6 | height: 100%; 7 | img{ 8 | max-height: 100%; 9 | } 10 | } 11 | .fileinput{ 12 | display: none; 13 | } 14 | .filelabel{ 15 | display: block; 16 | padding: 6px 15px; 17 | background: #2d8cf0; 18 | display: inline-block; 19 | border: 1px solid #2d8cf0; 20 | border-radius: 4px; 21 | cursor: pointer; 22 | color: white; 23 | font-size: 12px; 24 | text-align: center; 25 | transition: all .2s; 26 | &:hover{ 27 | background: #5cadff; 28 | border: 1px solid #5cadff; 29 | transition: all .2s; 30 | } 31 | } 32 | &-con1{ 33 | height: 300px; 34 | &-preview-con{ 35 | width: 100% !important; 36 | height: 200px !important; 37 | border: 1px solid #c3c3c3; 38 | #preview1{ 39 | width: 100%; 40 | height: 100%; 41 | overflow: hidden; 42 | } 43 | } 44 | } 45 | &-con2{ 46 | height: 300px; 47 | p{ 48 | font-size: 14px; 49 | padding: 6px; 50 | border-bottom: 1px solid #c3c3c3; 51 | b{ 52 | display: inline-block; 53 | width: 80px; 54 | } 55 | } 56 | } 57 | &-con3{ 58 | height: 300px; 59 | .cropper3{ 60 | box-sizing: border-box; 61 | border: 1px solid #c3c3c3; 62 | width: 100%; 63 | height: 100%; 64 | img{ 65 | max-height: 100%; 66 | } 67 | } 68 | &-btn-box{ 69 | text-align: center; 70 | } 71 | .filelabel3{ 72 | width: 190px; 73 | box-sizing: border-box; 74 | } 75 | .crop3-btn-box{ 76 | text-align: center; 77 | } 78 | &-preview-con{ 79 | width: 100% !important; 80 | height: 300px !important; 81 | border: 1px solid #c3c3c3; 82 | #preview3{ 83 | width: 100%; 84 | height: 100%; 85 | overflow: hidden; 86 | } 87 | } 88 | } 89 | } -------------------------------------------------------------------------------- /frontend/src/views/my-components/markdown-editor/markdown-editor.less: -------------------------------------------------------------------------------- 1 | .CodeMirror, .CodeMirror-scroll { 2 | min-height: 600px !important; 3 | } 4 | .CodeMirror{ 5 | height: 400px; 6 | } -------------------------------------------------------------------------------- /frontend/src/views/my-components/markdown-editor/markdown-editor.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 20 | 21 | 34 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/public/copyright.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/split-pane/split-pane/index.js: -------------------------------------------------------------------------------- 1 | import splitPane from './split-pane.vue'; 2 | 3 | export default splitPane; 4 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/split-pane/split-pane/split-pane.less: -------------------------------------------------------------------------------- 1 | @prefix: ~"split-pane"; 2 | @container: ~"@{prefix}-container"; 3 | @trigger: ~"@{prefix}-trigger"; 4 | 5 | .@{prefix}{ 6 | position: relative; 7 | &-container{ 8 | height: 100%; 9 | width: 100%; 10 | } 11 | 12 | &-horizontal{ 13 | & > div > .@{trigger}{ 14 | transform: translateX(-50%); 15 | cursor: col-resize; 16 | width: 2px; 17 | height: 100%; 18 | margin: 0 1px; 19 | } 20 | } 21 | 22 | &-vertical{ 23 | & > div > .@{trigger}{ 24 | transform: translateY(-50%); 25 | cursor: row-resize; 26 | height: 2px; 27 | width: 100%; 28 | margin: 1px 0; 29 | } 30 | } 31 | 32 | &-trigger{ 33 | position: absolute; 34 | z-index: 3; 35 | background: #BDBDBD; 36 | } 37 | 38 | &-left-area{ 39 | height: 100%; 40 | float: left; 41 | z-index: 2; 42 | overflow: auto; 43 | } 44 | 45 | &-right-area{ 46 | height: 100%; 47 | float: left; 48 | z-index: 2; 49 | overflow: auto; 50 | } 51 | 52 | &-top-area{ 53 | width: 100%; 54 | z-index: 2; 55 | overflow: auto; 56 | } 57 | 58 | &-bottom-area{ 59 | width: 100%; 60 | z-index: 2; 61 | overflow: auto; 62 | } 63 | } -------------------------------------------------------------------------------- /frontend/src/views/my-components/sql/editor.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 67 | 68 | 70 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/advlist/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "advlist" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/advlist') 5 | // ES2015: 6 | // import 'tinymce/plugins/advlist' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/anchor/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "anchor" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/anchor') 5 | // ES2015: 6 | // import 'tinymce/plugins/anchor' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/autolink/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "autolink" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/autolink') 5 | // ES2015: 6 | // import 'tinymce/plugins/autolink' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/autoresize/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "autoresize" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/autoresize') 5 | // ES2015: 6 | // import 'tinymce/plugins/autoresize' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/autosave/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "autosave" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/autosave') 5 | // ES2015: 6 | // import 'tinymce/plugins/autosave' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/bbcode/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "bbcode" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/bbcode') 5 | // ES2015: 6 | // import 'tinymce/plugins/bbcode' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/charmap/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "charmap" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/charmap') 5 | // ES2015: 6 | // import 'tinymce/plugins/charmap' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/code/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "code" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/code') 5 | // ES2015: 6 | // import 'tinymce/plugins/code' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/codesample/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "codesample" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/codesample') 5 | // ES2015: 6 | // import 'tinymce/plugins/codesample' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/colorpicker/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "colorpicker" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/colorpicker') 5 | // ES2015: 6 | // import 'tinymce/plugins/colorpicker' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/contextmenu/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "contextmenu" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/contextmenu') 5 | // ES2015: 6 | // import 'tinymce/plugins/contextmenu' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/directionality/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "directionality" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/directionality') 5 | // ES2015: 6 | // import 'tinymce/plugins/directionality' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/directionality/plugin.min.js: -------------------------------------------------------------------------------- 1 | !(function () { var a = {}, b = function (b) { for (var c = a[b], e = c.deps, f = c.defn, g = e.length, h = new Array(g), i = 0; i < g; ++i)h[i] = d(e[i]); var j = f.apply(null, h); if (void 0 === j) throw 'module [' + b + '] returned undefined'; c.instance = j; }, c = function (b, c, d) { if (typeof b !== 'string') throw 'module id must be a string'; if (void 0 === c) throw 'no dependencies for ' + b; if (void 0 === d) throw 'no definition function for ' + b; a[b] = {deps: c, defn: d, instance: void 0}; }, d = function (c) { var d = a[c]; if (void 0 === d) throw 'module [' + c + '] was undefined'; return void 0 === d.instance && b(c), d.instance; }, e = function (a, b) { for (var c = a.length, e = new Array(c), f = 0; f < c; ++f)e[f] = d(a[f]); b.apply(null, e); }, f = {}; f.bolt = {module: {api: {define: c, require: e, demand: d}}}; var g = c, h = function (a, b) { g(a, [], function () { return b; }); }; h('4', tinymce.util.Tools.resolve), g('1', ['4'], function (a) { return a('tinymce.PluginManager'); }), g('6', ['4'], function (a) { return a('tinymce.util.Tools'); }), g('5', ['6'], function (a) { var b = function (b, c) { var d, e = b.dom, f = b.selection.getSelectedBlocks(); f.length && (d = e.getAttrib(f[0], 'dir'), a.each(f, function (a) { e.getParent(a.parentNode, '*[dir="' + c + '"]', e.getRoot()) || e.setAttrib(a, 'dir', d !== c ? c : null); }), b.nodeChanged()); }; return {setDir: b}; }), g('2', ['5'], function (a) { var b = function (b) { b.addCommand('mceDirectionLTR', function () { a.setDir(b, 'ltr'); }), b.addCommand('mceDirectionRTL', function () { a.setDir(b, 'rtl'); }); }; return {register: b}; }), g('3', ['6'], function (a) { var b = function (b) { var c = []; return a.each('h1 h2 h3 h4 h5 h6 div p'.split(' '), function (a) { c.push(a + '[dir=' + b + ']'); }), c.join(','); }, c = function (a) { a.addButton('ltr', {title: 'Left to right', cmd: 'mceDirectionLTR', stateSelector: b('ltr')}), a.addButton('rtl', {title: 'Right to left', cmd: 'mceDirectionRTL', stateSelector: b('rtl')}); }; return {register: c}; }), g('0', ['1', '2', '3'], function (a, b, c) { return a.add('directionality', function (a) { b.register(a), c.register(a); }), function () {}; }), d('0')(); }()); 2 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-cool.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-cool.gif -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-cry.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-cry.gif -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-embarassed.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-embarassed.gif -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-frown.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-frown.gif -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-innocent.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-innocent.gif -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-kiss.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-kiss.gif -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-laughing.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-laughing.gif -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-money-mouth.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-money-mouth.gif -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-sealed.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-sealed.gif -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-smile.gif -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-surprised.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-surprised.gif -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-tongue-out.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-tongue-out.gif -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-undecided.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-undecided.gif -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-wink.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-wink.gif -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-yell.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/img/smiley-yell.gif -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "emoticons" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/emoticons') 5 | // ES2015: 6 | // import 'tinymce/plugins/emoticons' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/emoticons/plugin.min.js: -------------------------------------------------------------------------------- 1 | !(function () { var a = {}, b = function (b) { for (var c = a[b], e = c.deps, f = c.defn, g = e.length, h = new Array(g), i = 0; i < g; ++i)h[i] = d(e[i]); var j = f.apply(null, h); if (void 0 === j) throw 'module [' + b + '] returned undefined'; c.instance = j; }, c = function (b, c, d) { if (typeof b !== 'string') throw 'module id must be a string'; if (void 0 === c) throw 'no dependencies for ' + b; if (void 0 === d) throw 'no definition function for ' + b; a[b] = {deps: c, defn: d, instance: void 0}; }, d = function (c) { var d = a[c]; if (void 0 === d) throw 'module [' + c + '] was undefined'; return void 0 === d.instance && b(c), d.instance; }, e = function (a, b) { for (var c = a.length, e = new Array(c), f = 0; f < c; ++f)e[f] = d(a[f]); b.apply(null, e); }, f = {}; f.bolt = {module: {api: {define: c, require: e, demand: d}}}; var g = c, h = function (a, b) { g(a, [], function () { return b; }); }; h('3', tinymce.util.Tools.resolve), g('1', ['3'], function (a) { return a('tinymce.PluginManager'); }), g('5', ['3'], function (a) { return a('tinymce.util.Tools'); }), g('4', ['5'], function (a) { var b = [['cool', 'cry', 'embarassed', 'foot-in-mouth'], ['frown', 'innocent', 'kiss', 'laughing'], ['money-mouth', 'sealed', 'smile', 'surprised'], ['tongue-out', 'undecided', 'wink', 'yell']], c = function (c) { var d; return d = '', a.each(b, function (b) { d += '', a.each(b, function (a) { var b = c + '/img/smiley-' + a + '.gif'; d += ''; }), d += ''; }), d += '
'; }; return {getHtml: c}; }), g('2', ['4'], function (a) { var b = function (a, b, c) { a.insertContent(a.dom.createHTML('img', {src: b, alt: c})); }, c = function (c, d) { var e = a.getHtml(d); c.addButton('emoticons', {type: 'panelbutton', panel: {role: 'application', autohide: !0, html: e, onclick: function (a) { var d = c.dom.getParent(a.target, 'a'); d && (b(c, d.getAttribute('data-mce-url'), d.getAttribute('data-mce-alt')), this.hide()); }}, tooltip: 'Emoticons'}); }; return {register: c}; }), g('0', ['1', '2'], function (a, b) { return a.add('emoticons', function (a, c) { b.register(a, c); }), function () {}; }), d('0')(); }()); 2 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/fullpage/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "fullpage" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/fullpage') 5 | // ES2015: 6 | // import 'tinymce/plugins/fullpage' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/fullscreen/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "fullscreen" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/fullscreen') 5 | // ES2015: 6 | // import 'tinymce/plugins/fullscreen' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/help/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/plugins/help/img/logo.png -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/help/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "help" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/help') 5 | // ES2015: 6 | // import 'tinymce/plugins/help' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/hr/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "hr" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/hr') 5 | // ES2015: 6 | // import 'tinymce/plugins/hr' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/hr/plugin.min.js: -------------------------------------------------------------------------------- 1 | !(function () { var a = {}, b = function (b) { for (var c = a[b], e = c.deps, f = c.defn, g = e.length, h = new Array(g), i = 0; i < g; ++i)h[i] = d(e[i]); var j = f.apply(null, h); if (void 0 === j) throw 'module [' + b + '] returned undefined'; c.instance = j; }, c = function (b, c, d) { if (typeof b !== 'string') throw 'module id must be a string'; if (void 0 === c) throw 'no dependencies for ' + b; if (void 0 === d) throw 'no definition function for ' + b; a[b] = {deps: c, defn: d, instance: void 0}; }, d = function (c) { var d = a[c]; if (void 0 === d) throw 'module [' + c + '] was undefined'; return void 0 === d.instance && b(c), d.instance; }, e = function (a, b) { for (var c = a.length, e = new Array(c), f = 0; f < c; ++f)e[f] = d(a[f]); b.apply(null, e); }, f = {}; f.bolt = {module: {api: {define: c, require: e, demand: d}}}; var g = c, h = function (a, b) { g(a, [], function () { return b; }); }; h('4', tinymce.util.Tools.resolve), g('1', ['4'], function (a) { return a('tinymce.PluginManager'); }), g('2', [], function () { var a = function (a) { a.addCommand('InsertHorizontalRule', function () { a.execCommand('mceInsertContent', !1, '
'); }); }; return {register: a}; }), g('3', [], function () { var a = function (a) { a.addButton('hr', {icon: 'hr', tooltip: 'Horizontal line', cmd: 'InsertHorizontalRule'}), a.addMenuItem('hr', {icon: 'hr', text: 'Horizontal line', cmd: 'InsertHorizontalRule', context: 'insert'}); }; return {register: a}; }), g('0', ['1', '2', '3'], function (a, b, c) { return a.add('hr', function (a) { b.register(a), c.register(a); }), function () {}; }), d('0')(); }()); 2 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/image/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "image" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/image') 5 | // ES2015: 6 | // import 'tinymce/plugins/image' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/imagetools/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "imagetools" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/imagetools') 5 | // ES2015: 6 | // import 'tinymce/plugins/imagetools' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/importcss/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "importcss" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/importcss') 5 | // ES2015: 6 | // import 'tinymce/plugins/importcss' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/insertdatetime/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "insertdatetime" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/insertdatetime') 5 | // ES2015: 6 | // import 'tinymce/plugins/insertdatetime' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/legacyoutput/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "legacyoutput" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/legacyoutput') 5 | // ES2015: 6 | // import 'tinymce/plugins/legacyoutput' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/link/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "link" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/link') 5 | // ES2015: 6 | // import 'tinymce/plugins/link' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/lists/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "lists" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/lists') 5 | // ES2015: 6 | // import 'tinymce/plugins/lists' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/media/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "media" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/media') 5 | // ES2015: 6 | // import 'tinymce/plugins/media' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/nonbreaking/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "nonbreaking" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/nonbreaking') 5 | // ES2015: 6 | // import 'tinymce/plugins/nonbreaking' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/nonbreaking/plugin.min.js: -------------------------------------------------------------------------------- 1 | !(function () { var a = {}, b = function (b) { for (var c = a[b], e = c.deps, f = c.defn, g = e.length, h = new Array(g), i = 0; i < g; ++i)h[i] = d(e[i]); var j = f.apply(null, h); if (void 0 === j) throw 'module [' + b + '] returned undefined'; c.instance = j; }, c = function (b, c, d) { if (typeof b !== 'string') throw 'module id must be a string'; if (void 0 === c) throw 'no dependencies for ' + b; if (void 0 === d) throw 'no definition function for ' + b; a[b] = {deps: c, defn: d, instance: void 0}; }, d = function (c) { var d = a[c]; if (void 0 === d) throw 'module [' + c + '] was undefined'; return void 0 === d.instance && b(c), d.instance; }, e = function (a, b) { for (var c = a.length, e = new Array(c), f = 0; f < c; ++f)e[f] = d(a[f]); b.apply(null, e); }, f = {}; f.bolt = {module: {api: {define: c, require: e, demand: d}}}; var g = c, h = function (a, b) { g(a, [], function () { return b; }); }; h('5', tinymce.util.Tools.resolve), g('1', ['5'], function (a) { return a('tinymce.PluginManager'); }), g('6', [], function () { var a = function (a, b) { for (var c = '', d = 0; d < b; d++)c += a; return c; }, b = function (a) { return !!a.plugins.visualchars && a.plugins.visualchars.isEnabled(); }, c = function (c, d) { var e = b(c) ? ' ' : ' '; c.insertContent(a(e, d)), c.dom.setAttrib(c.dom.select('span.mce-nbsp'), 'data-mce-bogus', '1'); }; return {insertNbsp: c}; }), g('2', ['6'], function (a) { var b = function (b) { b.addCommand('mceNonBreaking', function () { a.insertNbsp(b, 1); }); }; return {register: b}; }), g('7', [], function () { var a = function (a) { var b = a.getParam('nonbreaking_force_tab', 0); return typeof tabs === 'boolean' ? b === !0 ? 3 : 0 : b; }; return {getKeyboardSpaces: a}; }), g('3', ['7', '6'], function (a, b) { var c = function (c) { var d = a.getKeyboardSpaces(c); d > 0 && c.on('keydown', function (a) { if (a.keyCode === 9) { if (a.shiftKey) return; a.preventDefault(), b.insertNbsp(c, d); } }); }; return {setup: c}; }), g('4', [], function () { var a = function (a) { a.addButton('nonbreaking', {title: 'Nonbreaking space', cmd: 'mceNonBreaking'}), a.addMenuItem('nonbreaking', {text: 'Nonbreaking space', cmd: 'mceNonBreaking', context: 'insert'}); }; return {register: a}; }), g('0', ['1', '2', '3', '4'], function (a, b, c, d) { return a.add('nonbreaking', function (a) { b.register(a), d.register(a), c.setup(a); }), function () {}; }), d('0')(); }()); 2 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/noneditable/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "noneditable" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/noneditable') 5 | // ES2015: 6 | // import 'tinymce/plugins/noneditable' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/pagebreak/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "pagebreak" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/pagebreak') 5 | // ES2015: 6 | // import 'tinymce/plugins/pagebreak' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/paste/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "paste" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/paste') 5 | // ES2015: 6 | // import 'tinymce/plugins/paste' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/preview/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "preview" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/preview') 5 | // ES2015: 6 | // import 'tinymce/plugins/preview' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/print/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "print" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/print') 5 | // ES2015: 6 | // import 'tinymce/plugins/print' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/print/plugin.min.js: -------------------------------------------------------------------------------- 1 | !(function () { var a = {}, b = function (b) { for (var c = a[b], e = c.deps, f = c.defn, g = e.length, h = new Array(g), i = 0; i < g; ++i)h[i] = d(e[i]); var j = f.apply(null, h); if (void 0 === j) throw 'module [' + b + '] returned undefined'; c.instance = j; }, c = function (b, c, d) { if (typeof b !== 'string') throw 'module id must be a string'; if (void 0 === c) throw 'no dependencies for ' + b; if (void 0 === d) throw 'no definition function for ' + b; a[b] = {deps: c, defn: d, instance: void 0}; }, d = function (c) { var d = a[c]; if (void 0 === d) throw 'module [' + c + '] was undefined'; return void 0 === d.instance && b(c), d.instance; }, e = function (a, b) { for (var c = a.length, e = new Array(c), f = 0; f < c; ++f)e[f] = d(a[f]); b.apply(null, e); }, f = {}; f.bolt = {module: {api: {define: c, require: e, demand: d}}}; var g = c, h = function (a, b) { g(a, [], function () { return b; }); }; h('4', tinymce.util.Tools.resolve), g('1', ['4'], function (a) { return a('tinymce.PluginManager'); }), g('2', [], function () { var a = function (a) { a.addCommand('mcePrint', function () { a.getWin().print(); }); }; return {register: a}; }), g('3', [], function () { var a = function (a) { a.addButton('print', {title: 'Print', cmd: 'mcePrint'}), a.addMenuItem('print', {text: 'Print', cmd: 'mcePrint', icon: 'print'}); }; return {register: a}; }), g('0', ['1', '2', '3'], function (a, b, c) { return a.add('print', function (a) { b.register(a), c.register(a), a.addShortcut('Meta+P', '', 'mcePrint'); }), function () {}; }), d('0')(); }()); 2 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/save/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "save" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/save') 5 | // ES2015: 6 | // import 'tinymce/plugins/save' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/searchreplace/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "searchreplace" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/searchreplace') 5 | // ES2015: 6 | // import 'tinymce/plugins/searchreplace' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/spellchecker/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "spellchecker" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/spellchecker') 5 | // ES2015: 6 | // import 'tinymce/plugins/spellchecker' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/tabfocus/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "tabfocus" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/tabfocus') 5 | // ES2015: 6 | // import 'tinymce/plugins/tabfocus' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/table/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "table" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/table') 5 | // ES2015: 6 | // import 'tinymce/plugins/table' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/template/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "template" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/template') 5 | // ES2015: 6 | // import 'tinymce/plugins/template' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/textcolor/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "textcolor" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/textcolor') 5 | // ES2015: 6 | // import 'tinymce/plugins/textcolor' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/textpattern/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "textpattern" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/textpattern') 5 | // ES2015: 6 | // import 'tinymce/plugins/textpattern' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/toc/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "toc" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/toc') 5 | // ES2015: 6 | // import 'tinymce/plugins/toc' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/visualblocks/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "visualblocks" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/visualblocks') 5 | // ES2015: 6 | // import 'tinymce/plugins/visualblocks' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/visualchars/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "visualchars" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/visualchars') 5 | // ES2015: 6 | // import 'tinymce/plugins/visualchars' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/plugins/wordcount/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "wordcount" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/wordcount') 5 | // ES2015: 6 | // import 'tinymce/plugins/wordcount' 7 | require('./plugin.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/skins/lightgray/content.mobile.min.css: -------------------------------------------------------------------------------- 1 | .tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection{position:absolute;display:inline-block;background-color:green;opacity:.5}body{-webkit-text-size-adjust:none}body img{max-width:96vw}body table img{max-width:95%} -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/skins/lightgray/fonts/tinymce-mobile.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/skins/lightgray/fonts/tinymce-mobile.woff -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/skins/lightgray/fonts/tinymce-small.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/skins/lightgray/fonts/tinymce-small.eot -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/skins/lightgray/fonts/tinymce-small.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/skins/lightgray/fonts/tinymce-small.ttf -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/skins/lightgray/fonts/tinymce-small.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/skins/lightgray/fonts/tinymce-small.woff -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/skins/lightgray/fonts/tinymce.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/skins/lightgray/fonts/tinymce.eot -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/skins/lightgray/fonts/tinymce.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/skins/lightgray/fonts/tinymce.ttf -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/skins/lightgray/fonts/tinymce.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/skins/lightgray/fonts/tinymce.woff -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/skins/lightgray/img/anchor.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/skins/lightgray/img/anchor.gif -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/skins/lightgray/img/loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/skins/lightgray/img/loader.gif -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/skins/lightgray/img/object.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/skins/lightgray/img/object.gif -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/skins/lightgray/img/trans.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/src/views/my-components/text-editor/tinymce/skins/lightgray/img/trans.gif -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/themes/inlite/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "inlite" theme for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/themes/inlite') 5 | // ES2015: 6 | // import 'tinymce/themes/inlite' 7 | require('./theme.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/my-components/text-editor/tinymce/themes/modern/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "modern" theme for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/themes/modern') 5 | // ES2015: 6 | // import 'tinymce/themes/modern' 7 | require('./theme.js'); 8 | -------------------------------------------------------------------------------- /frontend/src/views/own-space/own-space.less: -------------------------------------------------------------------------------- 1 | .own-space{ 2 | &-btn-box{ 3 | margin-bottom: 10px; 4 | button{ 5 | padding-left: 0; 6 | span{ 7 | color: #2D8CF0; 8 | transition: all .2s; 9 | } 10 | span:hover{ 11 | color: #0C25F1; 12 | transition: all .2s; 13 | } 14 | } 15 | } 16 | &-tra{ 17 | width:10px; 18 | height:10px; 19 | transform:rotate(45deg); 20 | position:absolute; 21 | top:50%; 22 | margin-top:-6px; 23 | left:-3px; 24 | box-shadow:0 0 2px 3px rgba(0,0,0,.1); 25 | background-color:white;z-index:100; 26 | } 27 | &-input-identifycode-con{ 28 | position:absolute; 29 | width:200px; 30 | height:100px; 31 | right:-220px; 32 | top:50%; 33 | margin-top:-50px; 34 | border-radius:4px; 35 | box-shadow:0 0 2px 3px rgba(0,0,0,.1); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /frontend/src/views/pandect/components/inforCard.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 30 | 31 | 60 | 61 | -------------------------------------------------------------------------------- /frontend/src/views/pandect/components/serviceRequests.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | -------------------------------------------------------------------------------- /frontend/src/views/pandect/components/styles/infor-card.less: -------------------------------------------------------------------------------- 1 | .infor-card-icon-con{ 2 | height: 100%; 3 | } 4 | .height-100{ 5 | height: 100%; 6 | } 7 | .infor-card-con{ 8 | height: 100px; 9 | } 10 | .infor-intro-text{ 11 | font-size:12px; 12 | font-weight:500; 13 | color:#C8C8C8; 14 | } -------------------------------------------------------------------------------- /frontend/src/views/pandect/components/styles/to-do-list-item.less: -------------------------------------------------------------------------------- 1 | .to-do-list-item-text{ 2 | word-break:keep-all; 3 | white-space:nowrap; 4 | overflow: hidden; 5 | text-overflow: ellipsis; 6 | font-weight: 500; 7 | cursor: pointer; 8 | height: 36px; 9 | 10 | .height-100{ 11 | height: 100%; 12 | } 13 | .infor-icon-row{ 14 | color: #c8c8c8; 15 | } 16 | } 17 | .hasDid{ 18 | text-decoration: line-through; 19 | color: gray; 20 | font-weight: 100; 21 | } -------------------------------------------------------------------------------- /frontend/src/views/pandect/components/toDoListItem.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 19 | 20 | -------------------------------------------------------------------------------- /frontend/src/views/pandect/components/userFlow.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 82 | -------------------------------------------------------------------------------- /frontend/src/views/pandect/home.less: -------------------------------------------------------------------------------- 1 | .user-infor{ 2 | height: 65px; 3 | } 4 | .avator-img{ 5 | display: block; 6 | width: 80%; 7 | max-width: 100px; 8 | height: auto; 9 | } 10 | .card-user-infor-name{ 11 | font-size: 2em; 12 | color: #2d8cf0; 13 | } 14 | .card-title{ 15 | color: #abafbd; 16 | } 17 | .made-child-con-middle{ 18 | height: 100%; 19 | } 20 | .to-do-list-con{ 21 | height: 145px; 22 | overflow: auto; 23 | } 24 | .to-do-item{ 25 | padding: 2px; 26 | } 27 | .infor-card-con{ 28 | height: 100px; 29 | } 30 | .infor-card-icon-con{ 31 | height: 100%; 32 | color: white; 33 | border-radius: 3px 0 0 3px; 34 | } 35 | .map-con{ 36 | height: 305px; 37 | } 38 | .map-incon{ 39 | height: 100%; 40 | } 41 | .data-source-row{ 42 | height: 200px; 43 | } 44 | .line-chart-con{ 45 | height: 100px; 46 | } 47 | -------------------------------------------------------------------------------- /frontend/src/views/pandect/map-data/get-city-value.js: -------------------------------------------------------------------------------- 1 | export default [ 2 | {name: '海门', value: 45}, 3 | {name: '鄂尔多斯', value: 34}, 4 | {name: '招远', value: 47}, 5 | {name: '舟山', value: 22}, 6 | {name: '齐齐哈尔', value: 74}, 7 | {name: '广州', value: 138}, 8 | {name: '盐城', value: 15}, 9 | {name: '北京', value: 250}, 10 | {name: '深圳', value: 141}, 11 | {name: '赤峰', value: 16}, 12 | {name: '青岛', value: 89}, 13 | {name: '乳山', value: 18}, 14 | {name: '金昌', value: 34}, 15 | {name: '泉州', value: 21}, 16 | {name: '莱西', value: 66}, 17 | {name: '日照', value: 45}, 18 | {name: '胶南', value: 23}, 19 | {name: '南通', value: 54}, 20 | {name: '拉萨', value: 22}, 21 | {name: '云浮', value: 78}, 22 | {name: '梅州', value: 23}, 23 | {name: '文登', value: 78}, 24 | {name: '上海', value: 218} 25 | ]; 26 | -------------------------------------------------------------------------------- /frontend/src/views/pandect/map-data/get-geography-value.js: -------------------------------------------------------------------------------- 1 | export default { 2 | '海门': [121.15, 31.89], 3 | '鄂尔多斯': [109.781327, 39.608266], 4 | '招远': [120.38, 37.35], 5 | '舟山': [122.207216, 29.985295], 6 | '齐齐哈尔': [123.97, 47.33], 7 | '广州': [113.23, 23.16], 8 | '盐城': [120.13, 33.38], 9 | '赤峰': [118.87, 42.28], 10 | '深圳': [114.07, 22.62], 11 | '青岛': [120.33, 36.07], 12 | '北京': [116.46, 39.92], 13 | '乳山': [121.52, 36.89], 14 | '金昌': [102.188043, 38.520089], 15 | '泉州': [118.58, 24.93], 16 | '莱西': [120.53, 36.86], 17 | '日照': [119.46, 35.42], 18 | '胶南': [119.97, 35.88], 19 | '南通': [121.05, 32.08], 20 | '拉萨': [91.11, 29.97], 21 | '云浮': [112.02, 22.93], 22 | '梅州': [116.1, 24.55], 23 | '文登': [122.05, 37.2], 24 | '上海': [121.48, 31.22] 25 | }; 26 | -------------------------------------------------------------------------------- /frontend/src/views/pandect/map-data/get-style-json.js: -------------------------------------------------------------------------------- 1 | export default [{ 2 | 'featureType': 'water', 3 | 'elementType': 'all', 4 | 'stylers': { 5 | 'visibility': 'off' 6 | } 7 | }, { 8 | 'featureType': 'land', 9 | 'elementType': 'all', 10 | 'stylers': { 11 | 'color': 'red' 12 | } 13 | }, { 14 | 'featureType': 'railway', 15 | 'elementType': 'all', 16 | 'stylers': { 17 | 'visibility': 'off' 18 | } 19 | }, { 20 | 'featureType': 'highway', 21 | 'elementType': 'all', 22 | 'stylers': { 23 | 'color': '#fdfdfd' 24 | } 25 | }, { 26 | 'featureType': 'highway', 27 | 'elementType': 'labels', 28 | 'stylers': { 29 | 'visibility': 'off' 30 | } 31 | }, { 32 | 'featureType': 'arterial', 33 | 'elementType': 'geometry', 34 | 'stylers': { 35 | 'color': '#00ff00' 36 | } 37 | }, { 38 | 'featureType': 'arterial', 39 | 'elementType': 'geometry.fill', 40 | 'stylers': { 41 | 'color': '#fefefe' 42 | } 43 | }, { 44 | 'featureType': 'poi', 45 | 'elementType': 'all', 46 | 'stylers': { 47 | 'visibility': 'off' 48 | } 49 | }, { 50 | 'featureType': 'green', 51 | 'elementType': 'all', 52 | 'stylers': { 53 | 'visibility': 'off' 54 | } 55 | }, { 56 | 'featureType': 'subway', 57 | 'elementType': 'all', 58 | 'stylers': { 59 | 'visibility': 'off' 60 | } 61 | }, { 62 | 'featureType': 'manmade', 63 | 'elementType': 'all', 64 | 'stylers': { 65 | 'color': 'red' 66 | } 67 | }, { 68 | 'featureType': 'local', 69 | 'elementType': 'all', 70 | 'stylers': { 71 | 'color': 'red' 72 | } 73 | }, { 74 | 'featureType': 'arterial', 75 | 'elementType': 'labels', 76 | 'stylers': { 77 | 'visibility': 'off' 78 | } 79 | }, { 80 | 'featureType': 'boundary', 81 | 'elementType': 'all', 82 | 'stylers': { 83 | 'color': '#000' 84 | } 85 | }, { 86 | 'featureType': 'building', 87 | 'elementType': 'all', 88 | 'stylers': { 89 | 'color': '#d1d1d1' 90 | } 91 | }, { 92 | 'featureType': 'label', 93 | 'elementType': 'labels.text.fill', 94 | 'stylers': { 95 | 'color': '#999999' 96 | } 97 | }]; 98 | -------------------------------------------------------------------------------- /frontend/src/views/sql/components/sqlContentInfo.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 20 | 21 | 26 | -------------------------------------------------------------------------------- /frontend/td_icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myide/see/21a16ebc80ab590c27c583fc5b928af4c5b28ebe/frontend/td_icon.ico --------------------------------------------------------------------------------