From 8361c04de9e641031046fa43c19cdbd6a43cce65 Mon Sep 17 00:00:00 2001 From: Marvin Zhang Date: Sun, 3 Mar 2019 10:48:04 +0800 Subject: [PATCH] added setup.py --- .gitignore | 3 + app.py | 2 +- frontend/.editorconfig | 5 + frontend/.eslintrc.js | 17 + frontend/.gitignore | 21 + frontend/LICENSE | 21 + frontend/README.md | 34 + frontend/README.zh-CN.md | 233 + frontend/babel.config.js | 5 + frontend/conf/mime.types | 88 + frontend/conf/nginx.conf | 19 + frontend/docs/file-manager-prototype.png | Bin 0 -> 92019 bytes frontend/favicon.ico | Bin 0 -> 67646 bytes frontend/index.html | 15 + frontend/jest.config.js | 23 + frontend/package.json | 44 + frontend/postcss.config.js | 5 + frontend/src/App.vue | 51 + frontend/src/api/login.js | 27 + frontend/src/api/request.js | 42 + frontend/src/api/table.js | 9 + frontend/src/assets/404_images/404.png | Bin 0 -> 98071 bytes frontend/src/assets/404_images/404_cloud.png | Bin 0 -> 4766 bytes frontend/src/components/BackToTop/index.vue | 116 + frontend/src/components/Breadcrumb/index.vue | 86 + frontend/src/components/Charts/keyboard.vue | 156 + frontend/src/components/Charts/lineMarker.vue | 227 + frontend/src/components/Charts/mixChart.vue | 271 + .../src/components/Charts/mixins/resize.js | 32 + frontend/src/components/Common/DialogView.vue | 165 + frontend/src/components/DndList/index.vue | 157 + frontend/src/components/DragSelect/index.vue | 61 + frontend/src/components/Dropzone/index.vue | 297 + frontend/src/components/ErrorLog/index.vue | 63 + frontend/src/components/FileList/FileList.vue | 200 + .../src/components/GithubCorner/index.vue | 51 + frontend/src/components/Hamburger/index.vue | 42 + .../src/components/HeaderSearch/index.vue | 187 + .../src/components/ImageCropper/index.vue | 1420 +++ .../ImageCropper/utils/data2blob.js | 19 + .../ImageCropper/utils/effectRipple.js | 39 + .../components/ImageCropper/utils/language.js | 232 + .../components/ImageCropper/utils/mimes.js | 7 + .../src/components/InfoView/NodeInfoView.vue | 73 + .../components/InfoView/SpiderInfoView.vue | 112 + .../src/components/InfoView/TaskInfoView.vue | 89 + frontend/src/components/JsonEditor/index.vue | 72 + frontend/src/components/Kanban/index.vue | 89 + frontend/src/components/LangSelect/index.vue | 32 + frontend/src/components/MDinput/index.vue | 354 + .../MarkdownEditor/defaultOptions.js | 31 + .../src/components/MarkdownEditor/index.vue | 118 + .../src/components/Overview/NodeOverview.vue | 55 + .../components/Overview/SpiderOverview.vue | 63 + .../src/components/Overview/TaskOverview.vue | 89 + frontend/src/components/Pagination/index.vue | 100 + frontend/src/components/PanThumb/index.vue | 140 + frontend/src/components/Screenfull/index.vue | 51 + frontend/src/components/ScrollPane/index.vue | 81 + .../src/components/Share/dropdownMenu.vue | 100 + frontend/src/components/SizeSelect/index.vue | 55 + frontend/src/components/Sticky/index.vue | 88 + frontend/src/components/SvgIcon/index.vue | 43 + .../components/TableView/DeployTableView.vue | 73 + .../components/TableView/TaskTableView.vue | 94 + .../src/components/TextHoverEffect/Mallki.vue | 113 + frontend/src/components/ThemePicker/index.vue | 148 + .../Tinymce/components/editorImage.vue | 103 + frontend/src/components/Tinymce/index.vue | 210 + frontend/src/components/Tinymce/plugins.js | 7 + frontend/src/components/Tinymce/toolbar.js | 6 + frontend/src/components/TreeTable/eval.js | 29 + frontend/src/components/TreeTable/index.vue | 127 + frontend/src/components/TreeTable/readme.md | 89 + .../src/components/Upload/singleImage.vue | 132 + .../src/components/Upload/singleImage2.vue | 127 + .../src/components/Upload/singleImage3.vue | 154 + frontend/src/components/UploadExcel/index.vue | 136 + frontend/src/icons/index.js | 9 + frontend/src/icons/svg/example.svg | 1 + frontend/src/icons/svg/eye-open.svg | 1 + frontend/src/icons/svg/eye.svg | 1 + frontend/src/icons/svg/form.svg | 1 + frontend/src/icons/svg/link.svg | 1 + frontend/src/icons/svg/nested.svg | 1 + frontend/src/icons/svg/password.svg | 1 + frontend/src/icons/svg/table.svg | 1 + frontend/src/icons/svg/tree.svg | 1 + frontend/src/icons/svg/user.svg | 1 + frontend/src/icons/svgo.yml | 22 + frontend/src/main.js | 36 + frontend/src/permission.js | 42 + frontend/src/router/index.js | 173 + frontend/src/store/getters.js | 9 + frontend/src/store/index.js | 31 + frontend/src/store/modules/app.js | 43 + frontend/src/store/modules/deploy.js | 34 + frontend/src/store/modules/dialogView.js | 19 + frontend/src/store/modules/file.js | 52 + frontend/src/store/modules/node.js | 99 + frontend/src/store/modules/spider.js | 127 + frontend/src/store/modules/tagsView.js | 161 + frontend/src/store/modules/task.js | 66 + frontend/src/store/modules/user.js | 87 + frontend/src/styles/element-ui.scss | 30 + frontend/src/styles/index.scss | 78 + frontend/src/styles/mixin.scss | 28 + frontend/src/styles/sidebar.scss | 177 + frontend/src/styles/transition.scss | 48 + frontend/src/styles/variables.scss | 24 + frontend/src/utils/auth.js | 15 + frontend/src/utils/i18n.js | 12 + frontend/src/utils/request.js | 73 + frontend/src/utils/validate.js | 12 + frontend/src/views/404.vue | 228 + frontend/src/views/dashboard/index.vue | 32 + frontend/src/views/deploy/DeployDetail.vue | 15 + frontend/src/views/deploy/DeployList.vue | 181 + frontend/src/views/form/index.vue | 84 + frontend/src/views/home/Home.vue | 160 + frontend/src/views/layout/Layout.vue | 79 + .../src/views/layout/components/AppMain.vue | 29 + .../src/views/layout/components/Navbar.vue | 99 + .../views/layout/components/Sidebar/Item.vue | 34 + .../views/layout/components/Sidebar/Link.vue | 35 + .../layout/components/Sidebar/SidebarItem.vue | 103 + .../views/layout/components/Sidebar/index.vue | 44 + .../src/views/layout/components/TagsView.vue | 294 + frontend/src/views/layout/components/index.js | 4 + .../src/views/layout/mixin/ResizeHandler.js | 41 + frontend/src/views/login/index.vue | 209 + frontend/src/views/nested/menu1/index.vue | 7 + .../src/views/nested/menu1/menu1-1/index.vue | 7 + .../src/views/nested/menu1/menu1-2/index.vue | 7 + .../nested/menu1/menu1-2/menu1-2-1/index.vue | 5 + .../nested/menu1/menu1-2/menu1-2-2/index.vue | 5 + .../src/views/nested/menu1/menu1-3/index.vue | 5 + frontend/src/views/nested/menu2/index.vue | 5 + frontend/src/views/node/NodeDetail.vue | 93 + frontend/src/views/node/NodeList.vue | 220 + frontend/src/views/result/ResultDetail.vue | 95 + frontend/src/views/result/ResultList.vue | 296 + frontend/src/views/spider/SpiderDetail.vue | 94 + frontend/src/views/spider/SpiderList.vue | 319 + frontend/src/views/table/index.vue | 78 + frontend/src/views/task/TaskDetail.vue | 75 + frontend/src/views/task/TaskList.vue | 238 + frontend/src/views/tree/index.vue | 77 + frontend/yarn.lock | 8889 +++++++++++++++++ routes/spiders.py | 23 +- setup.py | 18 + 151 files changed, 21609 insertions(+), 10 deletions(-) create mode 100644 frontend/.editorconfig create mode 100644 frontend/.eslintrc.js create mode 100644 frontend/.gitignore create mode 100644 frontend/LICENSE create mode 100644 frontend/README.md create mode 100644 frontend/README.zh-CN.md create mode 100644 frontend/babel.config.js create mode 100644 frontend/conf/mime.types create mode 100644 frontend/conf/nginx.conf create mode 100644 frontend/docs/file-manager-prototype.png create mode 100644 frontend/favicon.ico create mode 100644 frontend/index.html create mode 100644 frontend/jest.config.js create mode 100644 frontend/package.json create mode 100644 frontend/postcss.config.js create mode 100644 frontend/src/App.vue create mode 100644 frontend/src/api/login.js create mode 100644 frontend/src/api/request.js create mode 100644 frontend/src/api/table.js create mode 100644 frontend/src/assets/404_images/404.png create mode 100644 frontend/src/assets/404_images/404_cloud.png create mode 100644 frontend/src/components/BackToTop/index.vue create mode 100644 frontend/src/components/Breadcrumb/index.vue create mode 100644 frontend/src/components/Charts/keyboard.vue create mode 100644 frontend/src/components/Charts/lineMarker.vue create mode 100644 frontend/src/components/Charts/mixChart.vue create mode 100644 frontend/src/components/Charts/mixins/resize.js create mode 100644 frontend/src/components/Common/DialogView.vue create mode 100644 frontend/src/components/DndList/index.vue create mode 100644 frontend/src/components/DragSelect/index.vue create mode 100644 frontend/src/components/Dropzone/index.vue create mode 100644 frontend/src/components/ErrorLog/index.vue create mode 100644 frontend/src/components/FileList/FileList.vue create mode 100644 frontend/src/components/GithubCorner/index.vue create mode 100644 frontend/src/components/Hamburger/index.vue create mode 100644 frontend/src/components/HeaderSearch/index.vue create mode 100644 frontend/src/components/ImageCropper/index.vue create mode 100755 frontend/src/components/ImageCropper/utils/data2blob.js create mode 100755 frontend/src/components/ImageCropper/utils/effectRipple.js create mode 100755 frontend/src/components/ImageCropper/utils/language.js create mode 100755 frontend/src/components/ImageCropper/utils/mimes.js create mode 100644 frontend/src/components/InfoView/NodeInfoView.vue create mode 100644 frontend/src/components/InfoView/SpiderInfoView.vue create mode 100644 frontend/src/components/InfoView/TaskInfoView.vue create mode 100644 frontend/src/components/JsonEditor/index.vue create mode 100644 frontend/src/components/Kanban/index.vue create mode 100644 frontend/src/components/LangSelect/index.vue create mode 100644 frontend/src/components/MDinput/index.vue create mode 100644 frontend/src/components/MarkdownEditor/defaultOptions.js create mode 100644 frontend/src/components/MarkdownEditor/index.vue create mode 100644 frontend/src/components/Overview/NodeOverview.vue create mode 100644 frontend/src/components/Overview/SpiderOverview.vue create mode 100644 frontend/src/components/Overview/TaskOverview.vue create mode 100644 frontend/src/components/Pagination/index.vue create mode 100644 frontend/src/components/PanThumb/index.vue create mode 100644 frontend/src/components/Screenfull/index.vue create mode 100644 frontend/src/components/ScrollPane/index.vue create mode 100644 frontend/src/components/Share/dropdownMenu.vue create mode 100644 frontend/src/components/SizeSelect/index.vue create mode 100644 frontend/src/components/Sticky/index.vue create mode 100644 frontend/src/components/SvgIcon/index.vue create mode 100644 frontend/src/components/TableView/DeployTableView.vue create mode 100644 frontend/src/components/TableView/TaskTableView.vue create mode 100644 frontend/src/components/TextHoverEffect/Mallki.vue create mode 100644 frontend/src/components/ThemePicker/index.vue create mode 100644 frontend/src/components/Tinymce/components/editorImage.vue create mode 100644 frontend/src/components/Tinymce/index.vue create mode 100644 frontend/src/components/Tinymce/plugins.js create mode 100644 frontend/src/components/Tinymce/toolbar.js create mode 100644 frontend/src/components/TreeTable/eval.js create mode 100644 frontend/src/components/TreeTable/index.vue create mode 100644 frontend/src/components/TreeTable/readme.md create mode 100644 frontend/src/components/Upload/singleImage.vue create mode 100644 frontend/src/components/Upload/singleImage2.vue create mode 100644 frontend/src/components/Upload/singleImage3.vue create mode 100644 frontend/src/components/UploadExcel/index.vue create mode 100644 frontend/src/icons/index.js create mode 100644 frontend/src/icons/svg/example.svg create mode 100644 frontend/src/icons/svg/eye-open.svg create mode 100644 frontend/src/icons/svg/eye.svg create mode 100644 frontend/src/icons/svg/form.svg create mode 100644 frontend/src/icons/svg/link.svg create mode 100644 frontend/src/icons/svg/nested.svg create mode 100644 frontend/src/icons/svg/password.svg create mode 100644 frontend/src/icons/svg/table.svg create mode 100644 frontend/src/icons/svg/tree.svg create mode 100644 frontend/src/icons/svg/user.svg create mode 100644 frontend/src/icons/svgo.yml create mode 100644 frontend/src/main.js create mode 100644 frontend/src/permission.js create mode 100644 frontend/src/router/index.js create mode 100644 frontend/src/store/getters.js create mode 100644 frontend/src/store/index.js create mode 100644 frontend/src/store/modules/app.js create mode 100644 frontend/src/store/modules/deploy.js create mode 100644 frontend/src/store/modules/dialogView.js create mode 100644 frontend/src/store/modules/file.js create mode 100644 frontend/src/store/modules/node.js create mode 100644 frontend/src/store/modules/spider.js create mode 100644 frontend/src/store/modules/tagsView.js create mode 100644 frontend/src/store/modules/task.js create mode 100644 frontend/src/store/modules/user.js create mode 100644 frontend/src/styles/element-ui.scss create mode 100644 frontend/src/styles/index.scss create mode 100644 frontend/src/styles/mixin.scss create mode 100644 frontend/src/styles/sidebar.scss create mode 100644 frontend/src/styles/transition.scss create mode 100644 frontend/src/styles/variables.scss create mode 100644 frontend/src/utils/auth.js create mode 100644 frontend/src/utils/i18n.js create mode 100644 frontend/src/utils/request.js create mode 100644 frontend/src/utils/validate.js create mode 100644 frontend/src/views/404.vue create mode 100644 frontend/src/views/dashboard/index.vue create mode 100644 frontend/src/views/deploy/DeployDetail.vue create mode 100644 frontend/src/views/deploy/DeployList.vue create mode 100644 frontend/src/views/form/index.vue create mode 100644 frontend/src/views/home/Home.vue create mode 100644 frontend/src/views/layout/Layout.vue create mode 100644 frontend/src/views/layout/components/AppMain.vue create mode 100644 frontend/src/views/layout/components/Navbar.vue create mode 100644 frontend/src/views/layout/components/Sidebar/Item.vue create mode 100644 frontend/src/views/layout/components/Sidebar/Link.vue create mode 100644 frontend/src/views/layout/components/Sidebar/SidebarItem.vue create mode 100644 frontend/src/views/layout/components/Sidebar/index.vue create mode 100644 frontend/src/views/layout/components/TagsView.vue create mode 100644 frontend/src/views/layout/components/index.js create mode 100644 frontend/src/views/layout/mixin/ResizeHandler.js create mode 100644 frontend/src/views/login/index.vue create mode 100644 frontend/src/views/nested/menu1/index.vue create mode 100644 frontend/src/views/nested/menu1/menu1-1/index.vue create mode 100644 frontend/src/views/nested/menu1/menu1-2/index.vue create mode 100644 frontend/src/views/nested/menu1/menu1-2/menu1-2-1/index.vue create mode 100644 frontend/src/views/nested/menu1/menu1-2/menu1-2-2/index.vue create mode 100644 frontend/src/views/nested/menu1/menu1-3/index.vue create mode 100644 frontend/src/views/nested/menu2/index.vue create mode 100644 frontend/src/views/node/NodeDetail.vue create mode 100644 frontend/src/views/node/NodeList.vue create mode 100644 frontend/src/views/result/ResultDetail.vue create mode 100644 frontend/src/views/result/ResultList.vue create mode 100644 frontend/src/views/spider/SpiderDetail.vue create mode 100644 frontend/src/views/spider/SpiderList.vue create mode 100644 frontend/src/views/table/index.vue create mode 100644 frontend/src/views/task/TaskDetail.vue create mode 100644 frontend/src/views/task/TaskList.vue create mode 100644 frontend/src/views/tree/index.vue create mode 100644 frontend/yarn.lock create mode 100644 setup.py diff --git a/.gitignore b/.gitignore index 04e1286c..c7a90ab9 100644 --- a/.gitignore +++ b/.gitignore @@ -104,3 +104,6 @@ venv.bak/ # mypy .mypy_cache/ + +# node_modules +node_modules/ diff --git a/app.py b/app.py index 91ba55f6..a9d9c5bf 100644 --- a/app.py +++ b/app.py @@ -49,7 +49,7 @@ api.add_resource(StatsApi, '/api/stats/') # create folder if it does not exist -if os.path.exists(PROJECT_LOGS_FOLDER): +if not os.path.exists(PROJECT_LOGS_FOLDER): os.makedirs(PROJECT_LOGS_FOLDER) if __name__ == '__main__': diff --git a/frontend/.editorconfig b/frontend/.editorconfig new file mode 100644 index 00000000..7053c49a --- /dev/null +++ b/frontend/.editorconfig @@ -0,0 +1,5 @@ +[*.{js,jsx,ts,tsx,vue}] +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js new file mode 100644 index 00000000..98d04316 --- /dev/null +++ b/frontend/.eslintrc.js @@ -0,0 +1,17 @@ +module.exports = { + root: true, + env: { + node: true + }, + 'extends': [ + 'plugin:vue/essential', + '@vue/standard' + ], + rules: { + 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' + }, + parserOptions: { + parser: 'babel-eslint' + } +} diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 00000000..185e6631 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,21 @@ +.DS_Store +node_modules +/dist + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw* diff --git a/frontend/LICENSE b/frontend/LICENSE new file mode 100644 index 00000000..61515750 --- /dev/null +++ b/frontend/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present PanJiaChen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 00000000..006332d0 --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,34 @@ +# tmp + +## Project setup +``` +yarn install +``` + +### Compiles and hot-reloads for development +``` +yarn run serve +``` + +### Compiles and minifies for production +``` +yarn run build +``` + +### Run your tests +``` +yarn run test +``` + +### Lints and fixes files +``` +yarn run lint +``` + +### Run your unit tests +``` +yarn run test:unit +``` + +### Customize configuration +See [Configuration Reference](https://cli.vuejs.org/config/). diff --git a/frontend/README.zh-CN.md b/frontend/README.zh-CN.md new file mode 100644 index 00000000..5dc9f1d7 --- /dev/null +++ b/frontend/README.zh-CN.md @@ -0,0 +1,233 @@ +

+ +

+ +

+ + vue + + + element-ui + + + Build Status + + + license + + + GitHub release + + + gitter + + + donate + +

+ +简体中文 | [English](./README.md) + +## 简介 + +[vue-element-admin](http://panjiachen.github.io/vue-element-admin) 是一个后台集成解决方案,它基于 [vue](https://github.com/vuejs/vue) 和 [element](https://github.com/ElemeFE/element)。它使用了最新的前端技术栈,内置了 i18 国际化解决方案,动态路由,权限验证,提炼了典型的业务模型,提供了丰富的功能组件,它可以帮助你快速搭建企业级中后台产品原型。相信不管你的需求是什么,本项目都能帮助到你。 + +- [在线访问](http://panjiachen.github.io/vue-element-admin) + +- [使用文档](https://panjiachen.github.io/vue-element-admin-site/zh/) + +- [Gitter 讨论组](https://gitter.im/vue-element-admin/discuss) + +- [Wiki](https://github.com/PanJiaChen/vue-element-admin/wiki) + +- [Donate](https://panjiachen.gitee.io/vue-element-admin-site/zh/donate) + +- [Gitee](https://panjiachen.gitee.io/vue-element-admin/) 国内用户可访问该地址在线预览 + +- [国内访问文档](https://panjiachen.gitee.io/vue-element-admin-site/zh/) 方便没翻墙的用户查看文档 + +**本项目的定位是后台集成方案,不适合当基础模板来开发。** + +- 模板建议使用: [vue-admin-template](https://github.com/PanJiaChen/vue-admin-template) +- 桌面端: [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin) +- Typescript版: [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) (鸣谢: [@Armour](https://github.com/Armour)) + +群主 **[圈子](https://jianshiapp.com/circles/1209)** 楼主会经常分享一些技术相关的东西,或者加入[qq 群](https://github.com/PanJiaChen/vue-element-admin/issues/602) + +**注意:该项目使用 element-ui@2.3.0+ 版本,所以最低兼容 vue@2.5.0+** + +**从`v3.8.0`开始使用`webpack4`。所以若还想使用`webpack3`开发,请使用该分支[webpack3](https://github.com/PanJiaChen/vue-element-admin/tree/webpack3)** + +**该项目不支持低版本浏览器(如 ie),有需求请自行添加 polyfill [详情](https://github.com/PanJiaChen/vue-element-admin/wiki#babel-polyfill)** + +## 前序准备 + +你需要在本地安装 [node](http://nodejs.org/) 和 [git](https://git-scm.com/)。本项目技术栈基于 [ES2015+](http://es6.ruanyifeng.com/)、[vue](https://cn.vuejs.org/index.html)、[vuex](https://vuex.vuejs.org/zh-cn/)、[vue-router](https://router.vuejs.org/zh-cn/) 、[axios](https://github.com/axios/axios) 和 [element-ui](https://github.com/ElemeFE/element),所有的请求数据都使用[Mock.js](https://github.com/nuysoft/Mock)模拟,提前了解和学习这些知识会对使用本项目有很大的帮助。 + +同时配套一个系列的教程文章,如何从零构建后一个完整的后台项目,建议大家先看完这些文章再来实践本项目 + +- [手摸手,带你用 vue 撸后台 系列一(基础篇)](https://juejin.im/post/59097cd7a22b9d0065fb61d2) +- [手摸手,带你用 vue 撸后台 系列二(登录权限篇)](https://juejin.im/post/591aa14f570c35006961acac) +- [手摸手,带你用 vue 撸后台 系列三 (实战篇)](https://juejin.im/post/593121aa0ce4630057f70d35) +- [手摸手,带你用 vue 撸后台 系列四(vueAdmin 一个极简的后台基础模板)](https://juejin.im/post/595b4d776fb9a06bbe7dba56) +- [手摸手,带你封装一个 vue component](https://segmentfault.com/a/1190000009090836) +- [手摸手,带你优雅的使用 icon](https://juejin.im/post/59bb864b5188257e7a427c09) +- [手摸手,带你用合理的姿势使用 webpack4(上)](https://juejin.im/post/5b56909a518825195f499806) +- [手摸手,带你用合理的姿势使用 webpack4(下)](https://juejin.im/post/5b5d6d6f6fb9a04fea58aabc) + +**如有问题请先看上述使用文档和文章,若不能满足,欢迎 issue 和 pr** + +

+ +

+ +## Sponsors +Become a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor]](https://www.patreon.com/panjiachen) + +

Admin Dashboard Templates made with Vue, React and Angular.

+ +## 功能 + +``` +- 登录 / 注销 + +- 权限验证 + - 页面权限 + - 指令权限 + - 二步登录 + +- 多环境发布 + - dev sit stage prod + +- 全局功能 + - 国际化多语言 + - 多种动态换肤 + - 动态侧边栏(支持多级路由嵌套) + - 动态面包屑 + - 快捷导航(标签页) + - Svg Sprite 图标 + - 本地mock数据 + - Screenfull全屏 + - 自适应收缩侧边栏 + +- 编辑器 + - 富文本 + - Markdown + - JSON 等多格式 + +- Excel + - 导出excel + - 导出zip + - 导入excel + - 前端可视化excel + +- 表格 + - 动态表格 + - 拖拽表格 + - 树形表格 + - 内联编辑 + +- 错误页面 + - 401 + - 404 + +- 組件 + - 头像上传 + - 返回顶部 + - 拖拽Dialog + - 拖拽Select + - 拖拽看板 + - 列表拖拽 + - SplitPane + - Dropzone + - Sticky + - CountTo + +- 综合实例 +- 错误日志 +- Dashboard +- 引导页 +- ECharts 图表 +- Clipboard(剪贴复制) +- Markdown2html +``` + +## 开发 + +```bash +# 克隆项目 +git clone https://github.com/PanJiaChen/vue-element-admin.git + +# 安装依赖 +npm install + +# 建议不要用 cnpm 安装 会有各种诡异的bug 可以通过如下操作解决 npm 下载速度慢的问题 +npm install --registry=https://registry.npm.taobao.org + +# 启动服务 +npm run dev +``` + +浏览器访问 http://localhost:9527 + +## 发布 + +```bash +# 构建测试环境 +npm run build:sit + +# 构建生产环境 +npm run build:prod +``` + +## 其它 + +```bash +# --report to build with bundle size analytics +npm run build:prod + +# --generate a bundle size analytics. default: bundle-report.html +npm run build:prod --generate_report + +# --preview to start a server in local to preview +npm run build:prod --preview + +# lint code +npm run lint + +# auto fix +npm run lint -- --fix +``` + +更多信息请参考 [使用文档](https://panjiachen.github.io/vue-element-admin-site/zh/) + +## Changelog + +Detailed changes for each release are documented in the [release notes](https://github.com/PanJiaChen/vue-element-admin/releases). + +## Online Demo + +[在线 Demo](http://panjiachen.github.io/vue-element-admin) + +## Donate + +如果你觉得这个项目帮助到了你,你可以帮作者买一杯果汁表示鼓励 :tropical_drink: +![donate](https://panjiachen.github.io/donate/donation.png) + +[更多捐赠方式](https://panjiachen.gitee.io/vue-element-admin-site/zh/donate) + +[Paypal Me](https://www.paypal.me/panfree23) + +## Browsers support + +Modern browsers and Internet Explorer 10+. + +| [IE / Edge](http://godban.github.io/browsers-support-badges/)
IE / Edge | [Firefox](http://godban.github.io/browsers-support-badges/)
Firefox | [Chrome](http://godban.github.io/browsers-support-badges/)
Chrome | [Safari](http://godban.github.io/browsers-support-badges/)
Safari | +| --------- | --------- | --------- | --------- | +| IE10, IE11, Edge| last 2 versions| last 2 versions| last 2 versions + +## License + +[MIT](https://github.com/PanJiaChen/vue-element-admin/blob/master/LICENSE) + +Copyright (c) 2017-present PanJiaChen diff --git a/frontend/babel.config.js b/frontend/babel.config.js new file mode 100644 index 00000000..ba179669 --- /dev/null +++ b/frontend/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/app' + ] +} diff --git a/frontend/conf/mime.types b/frontend/conf/mime.types new file mode 100644 index 00000000..cd3d700e --- /dev/null +++ b/frontend/conf/mime.types @@ -0,0 +1,88 @@ +types { + text/html html htm shtml; + text/css css; + text/xml xml; + image/gif gif; + image/jpeg jpeg jpg; + application/javascript js; + application/atom+xml atom; + application/rss+xml rss; + + text/mathml mml; + text/plain txt; + text/vnd.sun.j2me.app-descriptor jad; + text/vnd.wap.wml wml; + text/x-component htc; + + image/png png; + image/tiff tif tiff; + image/vnd.wap.wbmp wbmp; + image/x-icon ico; + image/x-jng jng; + image/x-ms-bmp bmp; + image/svg+xml svg svgz; + image/webp webp; + + application/font-woff woff; + application/java-archive jar war ear; + application/json json; + application/mac-binhex40 hqx; + application/msword doc; + application/pdf pdf; + application/postscript ps eps ai; + application/rtf rtf; + application/vnd.apple.mpegurl m3u8; + application/vnd.ms-excel xls; + application/vnd.ms-fontobject eot; + application/vnd.ms-powerpoint ppt; + application/vnd.wap.wmlc wmlc; + application/vnd.google-earth.kml+xml kml; + application/vnd.google-earth.kmz kmz; + application/x-7z-compressed 7z; + application/x-cocoa cco; + application/x-java-archive-diff jardiff; + application/x-java-jnlp-file jnlp; + application/x-makeself run; + application/x-perl pl pm; + application/x-pilot prc pdb; + application/x-rar-compressed rar; + application/x-redhat-package-manager rpm; + application/x-sea sea; + application/x-shockwave-flash swf; + application/x-stuffit sit; + application/x-tcl tcl tk; + application/x-x509-ca-cert der pem crt; + application/x-xpinstall xpi; + application/xhtml+xml xhtml; + application/xspf+xml xspf; + application/zip zip; + + application/octet-stream bin exe dll; + application/octet-stream deb; + application/octet-stream dmg; + application/octet-stream iso img; + application/octet-stream msi msp msm; + + application/vnd.openxmlformats-officedocument.wordprocessingml.document docx; + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx; + application/vnd.openxmlformats-officedocument.presentationml.presentation pptx; + + audio/midi mid midi kar; + audio/mpeg mp3; + audio/ogg ogg; + audio/x-m4a m4a; + audio/x-realaudio ra; + + video/3gpp 3gpp 3gp; + video/mp2t ts; + video/mp4 mp4; + video/mpeg mpeg mpg; + video/quicktime mov; + video/webm webm; + video/x-flv flv; + video/x-m4v m4v; + video/x-mng mng; + video/x-ms-asf asx asf; + video/x-ms-wmv wmv; + video/x-msvideo avi; +} diff --git a/frontend/conf/nginx.conf b/frontend/conf/nginx.conf new file mode 100644 index 00000000..72c248d2 --- /dev/null +++ b/frontend/conf/nginx.conf @@ -0,0 +1,19 @@ +events { + worker_connections 1024; + multi_accept on; +} + +http { + include mime.types; + default_type application/octet-stream; + + server { + listen 8888; + root /Users/yeqing/projects/crawlab-frontend/dist; + index index.html; + + location ~ .*\.(js|css)?$ { + expires 1d; + } + } +} diff --git a/frontend/docs/file-manager-prototype.png b/frontend/docs/file-manager-prototype.png new file mode 100644 index 0000000000000000000000000000000000000000..270435b7e232204cd62671b093dc30646277d624 GIT binary patch literal 92019 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 literal 0 HcmV?d00001 diff --git a/frontend/favicon.ico b/frontend/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..34b63ac63a87ee3ea8e7a0f3f5b5406c437e2112 GIT binary patch literal 67646 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 X;@D+E7Ad=S_FbjlW&KY_+xPzm3MBT? literal 0 HcmV?d00001 diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 00000000..98cf9b85 --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,15 @@ + + + + + + + + Crawlab + + + +
+ + + diff --git a/frontend/jest.config.js b/frontend/jest.config.js new file mode 100644 index 00000000..29fee32b --- /dev/null +++ b/frontend/jest.config.js @@ -0,0 +1,23 @@ +module.exports = { + moduleFileExtensions: [ + 'js', + 'jsx', + 'json', + 'vue' + ], + transform: { + '^.+\\.vue$': 'vue-jest', + '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub', + '^.+\\.jsx?$': 'babel-jest' + }, + moduleNameMapper: { + '^@/(.*)$': '/src/$1' + }, + snapshotSerializers: [ + 'jest-serializer-vue' + ], + testMatch: [ + '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)' + ], + testURL: 'http://localhost/' +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 00000000..ad1b8ceb --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,44 @@ +{ + "name": "crawlab", + "version": "0.0.1", + "private": true, + "scripts": { + "serve": "vue-cli-service serve --ip=0.0.0.0", + "config": "vue ui", + "build": "vue-cli-service build", + "lint": "vue-cli-service lint", + "test:unit": "vue-cli-service test:unit" + }, + "dependencies": { + "@tinymce/tinymce-vue": "^2.0.0", + "axios": "0.18.0", + "dayjs": "^1.8.6", + "echarts": "^4.1.0", + "element-ui": "2.4.6", + "font-awesome": "^4.7.0", + "js-cookie": "2.2.0", + "normalize.css": "7.0.0", + "nprogress": "0.2.0", + "path": "^0.12.7", + "vue": "^2.5.22", + "vue-codemirror-lite": "^1.0.4", + "vue-router": "^3.0.1", + "vuex": "^3.0.1" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "^3.4.0", + "@vue/cli-plugin-eslint": "^3.4.0", + "@vue/cli-plugin-unit-jest": "^3.4.0", + "@vue/cli-service": "^3.4.0", + "@vue/eslint-config-standard": "^4.0.0", + "@vue/test-utils": "^1.0.0-beta.20", + "babel-core": "7.0.0-bridge.0", + "babel-eslint": "^10.0.1", + "babel-jest": "^23.6.0", + "eslint": "^5.8.0", + "eslint-plugin-vue": "^5.0.0", + "node-sass": "^4.9.0", + "sass-loader": "^7.1.0", + "vue-template-compiler": "^2.5.21" + } +} diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js new file mode 100644 index 00000000..961986e2 --- /dev/null +++ b/frontend/postcss.config.js @@ -0,0 +1,5 @@ +module.exports = { + plugins: { + autoprefixer: {} + } +} diff --git a/frontend/src/App.vue b/frontend/src/App.vue new file mode 100644 index 00000000..7b5c9085 --- /dev/null +++ b/frontend/src/App.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/frontend/src/api/login.js b/frontend/src/api/login.js new file mode 100644 index 00000000..4699f07e --- /dev/null +++ b/frontend/src/api/login.js @@ -0,0 +1,27 @@ +import request from '@/utils/request' + +export function login (username, password) { + return request({ + url: '/user/login', + method: 'post', + data: { + username, + password + } + }) +} + +export function getInfo (token) { + return request({ + url: '/user/info', + method: 'get', + params: { token } + }) +} + +export function logout () { + return request({ + url: '/user/logout', + method: 'post' + }) +} diff --git a/frontend/src/api/request.js b/frontend/src/api/request.js new file mode 100644 index 00000000..a7570fea --- /dev/null +++ b/frontend/src/api/request.js @@ -0,0 +1,42 @@ +import axios from 'axios' + +const baseUrl = 'http://localhost:5000/api' + +const request = (method, path, params, data) => { + return new Promise((resolve, reject) => { + const url = `${baseUrl}${path}` + axios({ + method, + url, + params, + data + }) + .then(resolve) + .catch(reject) + }) +} + +const get = (path, params) => { + return request('GET', path, params) +} + +const post = (path, data) => { + return request('POST', path, {}, data) +} + +const put = (path, data) => { + return request('PUT', path, {}, data) +} + +const del = (path, data) => { + return request('DELETE', path) +} + +export default { + baseUrl, + request, + get, + post, + put, + delete: del +} diff --git a/frontend/src/api/table.js b/frontend/src/api/table.js new file mode 100644 index 00000000..95d1df60 --- /dev/null +++ b/frontend/src/api/table.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +export function getList (params) { + return request({ + url: '/table/list', + method: 'get', + params + }) +} diff --git a/frontend/src/assets/404_images/404.png b/frontend/src/assets/404_images/404.png new file mode 100644 index 0000000000000000000000000000000000000000..3d8e2305cc973ad2121403aee4bf08728f76c461 GIT binary patch literal 98071 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 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/404_images/404_cloud.png b/frontend/src/assets/404_images/404_cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..c6281d09013e0a2c5f8e699a0a6038d9480291e5 GIT binary patch literal 4766 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 literal 0 HcmV?d00001 diff --git a/frontend/src/components/BackToTop/index.vue b/frontend/src/components/BackToTop/index.vue new file mode 100644 index 00000000..39977178 --- /dev/null +++ b/frontend/src/components/BackToTop/index.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/frontend/src/components/Breadcrumb/index.vue b/frontend/src/components/Breadcrumb/index.vue new file mode 100644 index 00000000..5b12d2d3 --- /dev/null +++ b/frontend/src/components/Breadcrumb/index.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/frontend/src/components/Charts/keyboard.vue b/frontend/src/components/Charts/keyboard.vue new file mode 100644 index 00000000..857b26ae --- /dev/null +++ b/frontend/src/components/Charts/keyboard.vue @@ -0,0 +1,156 @@ + + + diff --git a/frontend/src/components/Charts/lineMarker.vue b/frontend/src/components/Charts/lineMarker.vue new file mode 100644 index 00000000..5d41b022 --- /dev/null +++ b/frontend/src/components/Charts/lineMarker.vue @@ -0,0 +1,227 @@ + + + diff --git a/frontend/src/components/Charts/mixChart.vue b/frontend/src/components/Charts/mixChart.vue new file mode 100644 index 00000000..a8e271ca --- /dev/null +++ b/frontend/src/components/Charts/mixChart.vue @@ -0,0 +1,271 @@ + + + diff --git a/frontend/src/components/Charts/mixins/resize.js b/frontend/src/components/Charts/mixins/resize.js new file mode 100644 index 00000000..c4c432f4 --- /dev/null +++ b/frontend/src/components/Charts/mixins/resize.js @@ -0,0 +1,32 @@ +import { debounce } from '@/utils' + +export default { + data() { + return { + sidebarElm: null + } + }, + mounted() { + this.__resizeHandler = debounce(() => { + if (this.chart) { + this.chart.resize() + } + }, 100) + window.addEventListener('resize', this.__resizeHandler) + + this.sidebarElm = document.getElementsByClassName('sidebar-container')[0] + this.sidebarElm && this.sidebarElm.addEventListener('transitionend', this.sidebarResizeHandler) + }, + beforeDestroy() { + window.removeEventListener('resize', this.__resizeHandler) + + this.sidebarElm && this.sidebarElm.removeEventListener('transitionend', this.sidebarResizeHandler) + }, + methods: { + sidebarResizeHandler(e) { + if (e.propertyName === 'width') { + this.__resizeHandler() + } + } + } +} diff --git a/frontend/src/components/Common/DialogView.vue b/frontend/src/components/Common/DialogView.vue new file mode 100644 index 00000000..41917279 --- /dev/null +++ b/frontend/src/components/Common/DialogView.vue @@ -0,0 +1,165 @@ + + + + + diff --git a/frontend/src/components/DndList/index.vue b/frontend/src/components/DndList/index.vue new file mode 100644 index 00000000..7587daa7 --- /dev/null +++ b/frontend/src/components/DndList/index.vue @@ -0,0 +1,157 @@ + + + + + diff --git a/frontend/src/components/DragSelect/index.vue b/frontend/src/components/DragSelect/index.vue new file mode 100644 index 00000000..513be006 --- /dev/null +++ b/frontend/src/components/DragSelect/index.vue @@ -0,0 +1,61 @@ + + + + + diff --git a/frontend/src/components/Dropzone/index.vue b/frontend/src/components/Dropzone/index.vue new file mode 100644 index 00000000..15d811d9 --- /dev/null +++ b/frontend/src/components/Dropzone/index.vue @@ -0,0 +1,297 @@ + + + + + diff --git a/frontend/src/components/ErrorLog/index.vue b/frontend/src/components/ErrorLog/index.vue new file mode 100644 index 00000000..c46cf110 --- /dev/null +++ b/frontend/src/components/ErrorLog/index.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/frontend/src/components/FileList/FileList.vue b/frontend/src/components/FileList/FileList.vue new file mode 100644 index 00000000..f1850b21 --- /dev/null +++ b/frontend/src/components/FileList/FileList.vue @@ -0,0 +1,200 @@ + + + + + + + diff --git a/frontend/src/components/GithubCorner/index.vue b/frontend/src/components/GithubCorner/index.vue new file mode 100644 index 00000000..b5da8874 --- /dev/null +++ b/frontend/src/components/GithubCorner/index.vue @@ -0,0 +1,51 @@ + + + diff --git a/frontend/src/components/Hamburger/index.vue b/frontend/src/components/Hamburger/index.vue new file mode 100644 index 00000000..220d67ec --- /dev/null +++ b/frontend/src/components/Hamburger/index.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/frontend/src/components/HeaderSearch/index.vue b/frontend/src/components/HeaderSearch/index.vue new file mode 100644 index 00000000..ab0d556a --- /dev/null +++ b/frontend/src/components/HeaderSearch/index.vue @@ -0,0 +1,187 @@ + + + + + diff --git a/frontend/src/components/ImageCropper/index.vue b/frontend/src/components/ImageCropper/index.vue new file mode 100644 index 00000000..04b1ede9 --- /dev/null +++ b/frontend/src/components/ImageCropper/index.vue @@ -0,0 +1,1420 @@ + + + + + + + diff --git a/frontend/src/components/ImageCropper/utils/data2blob.js b/frontend/src/components/ImageCropper/utils/data2blob.js new file mode 100755 index 00000000..9c47f8af --- /dev/null +++ b/frontend/src/components/ImageCropper/utils/data2blob.js @@ -0,0 +1,19 @@ +/** + * database64文件格式转换为2进制 + * + * @param {[String]} data dataURL 的格式为 “data:image/png;base64,****”,逗号之前都是一些说明性的文字,我们只需要逗号之后的就行了 + * @param {[String]} mime [description] + * @return {[blob]} [description] + */ +export default function(data, mime) { + data = data.split(',')[1] + data = window.atob(data) + var ia = new Uint8Array(data.length) + for (var i = 0; i < data.length; i++) { + ia[i] = data.charCodeAt(i) + } + // canvas.toDataURL 返回的默认格式就是 image/png + return new Blob([ia], { + type: mime + }) +} diff --git a/frontend/src/components/ImageCropper/utils/effectRipple.js b/frontend/src/components/ImageCropper/utils/effectRipple.js new file mode 100755 index 00000000..46a01640 --- /dev/null +++ b/frontend/src/components/ImageCropper/utils/effectRipple.js @@ -0,0 +1,39 @@ +/** + * 点击波纹效果 + * + * @param {[event]} e [description] + * @param {[Object]} arg_opts [description] + * @return {[bollean]} [description] + */ +export default function(e, arg_opts) { + var opts = Object.assign({ + ele: e.target, // 波纹作用元素 + type: 'hit', // hit点击位置扩散center中心点扩展 + bgc: 'rgba(0, 0, 0, 0.15)' // 波纹颜色 + }, arg_opts) + var target = opts.ele + if (target) { + var rect = target.getBoundingClientRect() + var ripple = target.querySelector('.e-ripple') + if (!ripple) { + ripple = document.createElement('span') + ripple.className = 'e-ripple' + ripple.style.height = ripple.style.width = Math.max(rect.width, rect.height) + 'px' + target.appendChild(ripple) + } else { + ripple.className = 'e-ripple' + } + switch (opts.type) { + case 'center': + ripple.style.top = (rect.height / 2 - ripple.offsetHeight / 2) + 'px' + ripple.style.left = (rect.width / 2 - ripple.offsetWidth / 2) + 'px' + break + default: + ripple.style.top = (e.pageY - rect.top - ripple.offsetHeight / 2 - document.body.scrollTop) + 'px' + ripple.style.left = (e.pageX - rect.left - ripple.offsetWidth / 2 - document.body.scrollLeft) + 'px' + } + ripple.style.backgroundColor = opts.bgc + ripple.className = 'e-ripple z-active' + return false + } +} diff --git a/frontend/src/components/ImageCropper/utils/language.js b/frontend/src/components/ImageCropper/utils/language.js new file mode 100755 index 00000000..727872d9 --- /dev/null +++ b/frontend/src/components/ImageCropper/utils/language.js @@ -0,0 +1,232 @@ +export default { + zh: { + hint: '点击,或拖动图片至此处', + loading: '正在上传……', + noSupported: '浏览器不支持该功能,请使用IE10以上或其他现在浏览器!', + success: '上传成功', + fail: '图片上传失败', + preview: '头像预览', + btn: { + off: '取消', + close: '关闭', + back: '上一步', + save: '保存' + }, + error: { + onlyImg: '仅限图片格式', + outOfSize: '单文件大小不能超过 ', + lowestPx: '图片最低像素为(宽*高):' + } + }, + 'zh-tw': { + hint: '點擊,或拖動圖片至此處', + loading: '正在上傳……', + noSupported: '瀏覽器不支持該功能,請使用IE10以上或其他現代瀏覽器!', + success: '上傳成功', + fail: '圖片上傳失敗', + preview: '頭像預覽', + btn: { + off: '取消', + close: '關閉', + back: '上一步', + save: '保存' + }, + error: { + onlyImg: '僅限圖片格式', + outOfSize: '單文件大小不能超過 ', + lowestPx: '圖片最低像素為(寬*高):' + } + }, + en: { + hint: 'Click or drag the file here to upload', + loading: 'Uploading…', + noSupported: 'Browser is not supported, please use IE10+ or other browsers', + success: 'Upload success', + fail: 'Upload failed', + preview: 'Preview', + btn: { + off: 'Cancel', + close: 'Close', + back: 'Back', + save: 'Save' + }, + error: { + onlyImg: 'Image only', + outOfSize: 'Image exceeds size limit: ', + lowestPx: 'Image\'s size is too low. Expected at least: ' + } + }, + ro: { + hint: 'Atinge sau trage fișierul aici', + loading: 'Se încarcă', + noSupported: 'Browser-ul tău nu suportă acest feature. Te rugăm încearcă cu alt browser.', + success: 'S-a încărcat cu succes', + fail: 'A apărut o problemă la încărcare', + preview: 'Previzualizează', + + btn: { + off: 'Anulează', + close: 'Închide', + back: 'Înapoi', + save: 'Salvează' + }, + + error: { + onlyImg: 'Doar imagini', + outOfSize: 'Imaginea depășește limita de: ', + loewstPx: 'Imaginea este prea mică; Minim: ' + } + }, + ru: { + hint: 'Нажмите, или перетащите файл в это окно', + loading: 'Загружаю……', + noSupported: 'Ваш браузер не поддерживается, пожалуйста, используйте IE10 + или другие браузеры', + success: 'Загрузка выполнена успешно', + fail: 'Ошибка загрузки', + preview: 'Предпросмотр', + btn: { + off: 'Отменить', + close: 'Закрыть', + back: 'Назад', + save: 'Сохранить' + }, + error: { + onlyImg: 'Только изображения', + outOfSize: 'Изображение превышает предельный размер: ', + lowestPx: 'Минимальный размер изображения: ' + } + }, + 'pt-br': { + hint: 'Clique ou arraste o arquivo aqui para carregar', + loading: 'Carregando…', + noSupported: 'Browser não suportado, use o IE10+ ou outro browser', + success: 'Sucesso ao carregar imagem', + fail: 'Falha ao carregar imagem', + preview: 'Pré-visualizar', + btn: { + off: 'Cancelar', + close: 'Fechar', + back: 'Voltar', + save: 'Salvar' + }, + error: { + onlyImg: 'Apenas imagens', + outOfSize: 'A imagem excede o limite de tamanho: ', + lowestPx: 'O tamanho da imagem é muito pequeno. Tamanho mínimo: ' + } + }, + fr: { + hint: 'Cliquez ou glissez le fichier ici.', + loading: 'Téléchargement…', + noSupported: 'Votre navigateur n\'est pas supporté. Utilisez IE10 + ou un autre navigateur s\'il vous plaît.', + success: 'Téléchargement réussit', + fail: 'Téléchargement echoué', + preview: 'Aperçu', + btn: { + off: 'Annuler', + close: 'Fermer', + back: 'Retour', + save: 'Enregistrer' + }, + error: { + onlyImg: 'Image uniquement', + outOfSize: 'L\'image sélectionnée dépasse la taille maximum: ', + lowestPx: 'L\'image sélectionnée est trop petite. Dimensions attendues: ' + } + }, + nl: { + hint: 'Klik hier of sleep een afbeelding in dit vlak', + loading: 'Uploaden…', + noSupported: 'Je browser wordt helaas niet ondersteund. Gebruik IE10+ of een andere browser.', + success: 'Upload succesvol', + fail: 'Upload mislukt', + preview: 'Voorbeeld', + btn: { + off: 'Annuleren', + close: 'Sluiten', + back: 'Terug', + save: 'Opslaan' + }, + error: { + onlyImg: 'Alleen afbeeldingen', + outOfSize: 'De afbeelding is groter dan: ', + lowestPx: 'De afbeelding is te klein! Minimale afmetingen: ' + } + }, + tr: { + hint: 'Tıkla veya yüklemek istediğini buraya sürükle', + loading: 'Yükleniyor…', + noSupported: 'Tarayıcı desteklenmiyor, lütfen IE10+ veya farklı tarayıcı kullanın', + success: 'Yükleme başarılı', + fail: 'Yüklemede hata oluştu', + preview: 'Önizle', + btn: { + off: 'İptal', + close: 'Kapat', + back: 'Geri', + save: 'Kaydet' + }, + error: { + onlyImg: 'Sadece resim', + outOfSize: 'Resim yükleme limitini aşıyor: ', + lowestPx: 'Resmin boyutu çok küçük. En az olması gereken: ' + } + }, + 'es-MX': { + hint: 'Selecciona o arrastra una imagen', + loading: 'Subiendo...', + noSupported: 'Tu navegador no es soportado, porfavor usa IE10+ u otros navegadores mas recientes', + success: 'Subido exitosamente', + fail: 'Sucedió un error', + preview: 'Vista previa', + btn: { + off: 'Cancelar', + close: 'Cerrar', + back: 'Atras', + save: 'Guardar' + }, + error: { + onlyImg: 'Unicamente imagenes', + outOfSize: 'La imagen excede el tamaño maximo:', + lowestPx: 'La imagen es demasiado pequeño. Se espera por lo menos:' + } + }, + de: { + hint: 'Klick hier oder zieh eine Datei hier rein zum Hochladen', + loading: 'Hochladen…', + noSupported: 'Browser wird nicht unterstützt, bitte verwende IE10+ oder andere Browser', + success: 'Upload erfolgreich', + fail: 'Upload fehlgeschlagen', + preview: 'Vorschau', + btn: { + off: 'Abbrechen', + close: 'Schließen', + back: 'Zurück', + save: 'Speichern' + }, + error: { + onlyImg: 'Nur Bilder', + outOfSize: 'Das Bild ist zu groß: ', + lowestPx: 'Das Bild ist zu klein. Mindestens: ' + } + }, + ja: { + hint: 'クリック・ドラッグしてファイルをアップロード', + loading: 'アップロード中...', + noSupported: 'このブラウザは対応されていません。IE10+かその他の主要ブラウザをお使いください。', + success: 'アップロード成功', + fail: 'アップロード失敗', + preview: 'プレビュー', + btn: { + off: 'キャンセル', + close: '閉じる', + back: '戻る', + save: '保存' + }, + error: { + onlyImg: '画像のみ', + outOfSize: '画像サイズが上限を超えています。上限: ', + lowestPx: '画像が小さすぎます。最小サイズ: ' + } + } +} diff --git a/frontend/src/components/ImageCropper/utils/mimes.js b/frontend/src/components/ImageCropper/utils/mimes.js new file mode 100755 index 00000000..e20c085c --- /dev/null +++ b/frontend/src/components/ImageCropper/utils/mimes.js @@ -0,0 +1,7 @@ +export default { + 'jpg': 'image/jpeg', + 'png': 'image/png', + 'gif': 'image/gif', + 'svg': 'image/svg+xml', + 'psd': 'image/photoshop' +} diff --git a/frontend/src/components/InfoView/NodeInfoView.vue b/frontend/src/components/InfoView/NodeInfoView.vue new file mode 100644 index 00000000..109bb288 --- /dev/null +++ b/frontend/src/components/InfoView/NodeInfoView.vue @@ -0,0 +1,73 @@ + + + + + diff --git a/frontend/src/components/InfoView/SpiderInfoView.vue b/frontend/src/components/InfoView/SpiderInfoView.vue new file mode 100644 index 00000000..94cec531 --- /dev/null +++ b/frontend/src/components/InfoView/SpiderInfoView.vue @@ -0,0 +1,112 @@ + + + + + diff --git a/frontend/src/components/InfoView/TaskInfoView.vue b/frontend/src/components/InfoView/TaskInfoView.vue new file mode 100644 index 00000000..a81174d2 --- /dev/null +++ b/frontend/src/components/InfoView/TaskInfoView.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/frontend/src/components/JsonEditor/index.vue b/frontend/src/components/JsonEditor/index.vue new file mode 100644 index 00000000..d68b8c05 --- /dev/null +++ b/frontend/src/components/JsonEditor/index.vue @@ -0,0 +1,72 @@ +