├── .github └── workflows │ └── npm-publish.sh ├── .gitignore ├── LICENSE ├── README.md └── dashboard ├── .editorconfig ├── .env.development ├── .env.development.example ├── .env.production ├── .env.production.example ├── .env.staging ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── .travis.yml ├── LICENSE ├── babel.config.js ├── build └── index.js ├── jest.config.js ├── jsconfig.json ├── package.json ├── plop-templates ├── component │ ├── index.hbs │ └── prompt.js ├── store │ ├── index.hbs │ └── prompt.js ├── utils.js └── view │ ├── index.hbs │ └── prompt.js ├── plopfile.js ├── postcss.config.js ├── public ├── alipay.jpg ├── favicon.ico ├── favicon1.ico ├── index.html ├── qqqun.jpg ├── robots.txt └── wechatpay.jpg ├── src ├── App.vue ├── api │ ├── control_panel │ │ └── database.js │ ├── hiker │ │ ├── developer.js │ │ ├── rule.js │ │ └── rule_type.js │ ├── monitor │ │ ├── cache.js │ │ ├── job.js │ │ ├── jobLog.js │ │ ├── logininfor.js │ │ ├── online.js │ │ ├── operlog.js │ │ ├── pip.js │ │ └── server.js │ ├── permission │ │ ├── label.js │ │ ├── menu.js │ │ ├── role.js │ │ └── user.js │ ├── system │ │ ├── dict │ │ │ ├── data.js │ │ │ └── detail.js │ │ └── parameter.js │ ├── user.js │ └── vod │ │ ├── configs.js │ │ ├── houses.js │ │ ├── rules.js │ │ ├── subs.js │ │ └── web.js ├── assets │ ├── 401_images │ │ └── 401.gif │ ├── 404_images │ │ ├── 404.png │ │ └── 404_cloud.png │ ├── custom-theme │ │ ├── fonts │ │ │ ├── element-icons.ttf │ │ │ └── element-icons.woff │ │ └── index.css │ ├── doc │ │ └── less2css.md │ ├── icons │ │ ├── index.js │ │ ├── svg │ │ │ ├── 404.svg │ │ │ ├── bug.svg │ │ │ ├── build.svg │ │ │ ├── button.svg │ │ │ ├── cascader.svg │ │ │ ├── chart.svg │ │ │ ├── checkbox.svg │ │ │ ├── clipboard.svg │ │ │ ├── code.svg │ │ │ ├── color.svg │ │ │ ├── component.svg │ │ │ ├── dashboard.svg │ │ │ ├── date-range.svg │ │ │ ├── date.svg │ │ │ ├── dict.svg │ │ │ ├── documentation.svg │ │ │ ├── download.svg │ │ │ ├── drag.svg │ │ │ ├── druid.svg │ │ │ ├── edit.svg │ │ │ ├── education.svg │ │ │ ├── email.svg │ │ │ ├── example.svg │ │ │ ├── excel.svg │ │ │ ├── exit-fullscreen.svg │ │ │ ├── eye-open.svg │ │ │ ├── eye.svg │ │ │ ├── form.svg │ │ │ ├── fullscreen.svg │ │ │ ├── github.svg │ │ │ ├── guide.svg │ │ │ ├── icon.svg │ │ │ ├── input.svg │ │ │ ├── international.svg │ │ │ ├── job.svg │ │ │ ├── language.svg │ │ │ ├── link.svg │ │ │ ├── list.svg │ │ │ ├── lock.svg │ │ │ ├── log.svg │ │ │ ├── logininfor.svg │ │ │ ├── message.svg │ │ │ ├── money.svg │ │ │ ├── monitor.svg │ │ │ ├── nested.svg │ │ │ ├── number.svg │ │ │ ├── online.svg │ │ │ ├── password.svg │ │ │ ├── pdf.svg │ │ │ ├── people.svg │ │ │ ├── peoples.svg │ │ │ ├── phone.svg │ │ │ ├── post.svg │ │ │ ├── qq.svg │ │ │ ├── question.svg │ │ │ ├── radio.svg │ │ │ ├── rate.svg │ │ │ ├── redis-list.svg │ │ │ ├── redis.svg │ │ │ ├── row.svg │ │ │ ├── search.svg │ │ │ ├── select.svg │ │ │ ├── server.svg │ │ │ ├── shopping.svg │ │ │ ├── size.svg │ │ │ ├── skill.svg │ │ │ ├── slider.svg │ │ │ ├── star.svg │ │ │ ├── swagger.svg │ │ │ ├── switch.svg │ │ │ ├── system.svg │ │ │ ├── tab.svg │ │ │ ├── table.svg │ │ │ ├── textarea.svg │ │ │ ├── theme.svg │ │ │ ├── time-range.svg │ │ │ ├── time.svg │ │ │ ├── tool.svg │ │ │ ├── tree-table.svg │ │ │ ├── tree.svg │ │ │ ├── upload.svg │ │ │ ├── user.svg │ │ │ ├── validCode.svg │ │ │ ├── wechat.svg │ │ │ └── zip.svg │ │ └── svgo.yml │ ├── images │ │ ├── dark.svg │ │ ├── light.svg │ │ ├── loading.gif │ │ ├── login-background.jpg │ │ ├── logo.png │ │ ├── pay.png │ │ └── profile.jpg │ └── logo │ │ └── logo.png ├── components │ ├── BackToTop │ │ └── index.vue │ ├── Breadcrumb │ │ └── index.vue │ ├── Charts │ │ ├── Keyboard.vue │ │ ├── LineMarker.vue │ │ ├── MixChart.vue │ │ └── mixins │ │ │ └── resize.js │ ├── CodeEditor │ │ └── index.vue │ ├── Crontab │ │ ├── day.vue │ │ ├── hour.vue │ │ ├── index.vue │ │ ├── min.vue │ │ ├── month.vue │ │ ├── result.vue │ │ ├── second.vue │ │ ├── week.vue │ │ └── year.vue │ ├── DictTag │ │ └── index.vue │ ├── DndList │ │ └── index.vue │ ├── DragSelect │ │ └── index.vue │ ├── Dropzone │ │ └── index.vue │ ├── Editor │ │ └── index.vue │ ├── ErrorLog │ │ └── index.vue │ ├── FileUpload │ │ └── index.vue │ ├── GithubCorner │ │ └── index.vue │ ├── Hamburger │ │ └── index.vue │ ├── HeaderSearch │ │ └── index.vue │ ├── IconSelect │ │ ├── index.vue │ │ └── requireIcons.js │ ├── ImageCropper │ │ ├── index.vue │ │ └── utils │ │ │ ├── data2blob.js │ │ │ ├── effectRipple.js │ │ │ ├── language.js │ │ │ └── mimes.js │ ├── ImagePreview │ │ └── index.vue │ ├── ImageUpload │ │ └── index.vue │ ├── JsonEditor │ │ └── index.vue │ ├── Kanban │ │ └── index.vue │ ├── MDinput │ │ └── index.vue │ ├── MarkdownEditor │ │ ├── default-options.js │ │ └── index.vue │ ├── Pagination │ │ └── index.vue │ ├── PanThumb │ │ └── index.vue │ ├── README.md │ ├── RightPanel │ │ └── index.vue │ ├── RightToolbar │ │ └── index.vue │ ├── Screenfull │ │ └── index.vue │ ├── Share │ │ └── DropdownMenu.vue │ ├── SizeSelect │ │ └── index.vue │ ├── Sticky │ │ └── index.vue │ ├── SvgIcon │ │ └── index.vue │ ├── TextHoverEffect │ │ └── Mallki.vue │ ├── ThemePicker │ │ └── index.vue │ ├── Tinymce │ │ ├── components │ │ │ └── EditorImage.vue │ │ ├── dynamicLoadScript.js │ │ ├── index.vue │ │ ├── plugins.js │ │ └── toolbar.js │ ├── Upload │ │ ├── SingleImage.vue │ │ ├── SingleImage2.vue │ │ └── SingleImage3.vue │ ├── UploadExcel │ │ └── index.vue │ └── iFrame │ │ └── index.vue ├── directive │ ├── button_permission │ │ ├── hasPermi.js │ │ ├── hasRole.js │ │ └── index.js │ ├── clipboard │ │ ├── clipboard.js │ │ └── index.js │ ├── el-drag-dialog │ │ ├── drag.js │ │ └── index.js │ ├── el-table │ │ ├── adaptive.js │ │ └── index.js │ ├── permission │ │ ├── index.js │ │ └── permission.js │ ├── sticky.js │ └── waves │ │ ├── index.js │ │ ├── waves.css │ │ └── waves.js ├── filters │ └── index.js ├── icons │ ├── index.js │ ├── svg │ │ ├── 404.svg │ │ ├── bug.svg │ │ ├── build.svg │ │ ├── cascader.svg │ │ ├── chart.svg │ │ ├── checkbox.svg │ │ ├── clipboard.svg │ │ ├── code.svg │ │ ├── color.svg │ │ ├── component.svg │ │ ├── dashboard.svg │ │ ├── date-range.svg │ │ ├── date.svg │ │ ├── dict.svg │ │ ├── documentation.svg │ │ ├── download.svg │ │ ├── drag.svg │ │ ├── druid.svg │ │ ├── edit.svg │ │ ├── education.svg │ │ ├── email.svg │ │ ├── example.svg │ │ ├── excel.svg │ │ ├── exit-fullscreen.svg │ │ ├── eye-open.svg │ │ ├── eye.svg │ │ ├── form.svg │ │ ├── fullscreen.svg │ │ ├── github.svg │ │ ├── guide.svg │ │ ├── icon.svg │ │ ├── input.svg │ │ ├── international.svg │ │ ├── job.svg │ │ ├── language.svg │ │ ├── link.svg │ │ ├── list.svg │ │ ├── lock.svg │ │ ├── log.svg │ │ ├── logininfor.svg │ │ ├── message.svg │ │ ├── money.svg │ │ ├── monitor.svg │ │ ├── nested.svg │ │ ├── number.svg │ │ ├── online.svg │ │ ├── password.svg │ │ ├── pdf.svg │ │ ├── people.svg │ │ ├── peoples.svg │ │ ├── phone.svg │ │ ├── post.svg │ │ ├── qq.svg │ │ ├── question.svg │ │ ├── radio.svg │ │ ├── rate.svg │ │ ├── row.svg │ │ ├── search.svg │ │ ├── select.svg │ │ ├── server.svg │ │ ├── shopping.svg │ │ ├── size.svg │ │ ├── skill.svg │ │ ├── slider.svg │ │ ├── star.svg │ │ ├── swagger.svg │ │ ├── switch.svg │ │ ├── system.svg │ │ ├── tab.svg │ │ ├── table.svg │ │ ├── textarea.svg │ │ ├── theme.svg │ │ ├── time-range.svg │ │ ├── time.svg │ │ ├── tool.svg │ │ ├── tree-table.svg │ │ ├── tree.svg │ │ ├── upload.svg │ │ ├── user.svg │ │ ├── validCode.svg │ │ ├── wechat.svg │ │ └── zip.svg │ └── svgo.yml ├── layout │ ├── components │ │ ├── AppMain.vue │ │ ├── Navbar.vue │ │ ├── Settings │ │ │ └── index.vue │ │ ├── Sidebar │ │ │ ├── FixiOSBug.js │ │ │ ├── Item.vue │ │ │ ├── Link.vue │ │ │ ├── Logo.vue │ │ │ ├── SidebarItem.vue │ │ │ └── index.vue │ │ ├── TagsView │ │ │ ├── ScrollPane.vue │ │ │ └── index.vue │ │ └── index.js │ ├── index.vue │ └── mixin │ │ └── ResizeHandler.js ├── main.js ├── permission.js ├── plugins │ ├── auth.js │ ├── cache.js │ ├── download.js │ ├── index.js │ ├── modal.js │ └── tab.js ├── router │ └── index.js ├── settings.js ├── store │ ├── getters.js │ ├── index.js │ └── modules │ │ ├── app.js │ │ ├── errorLog.js │ │ ├── permission.js │ │ ├── settings.js │ │ ├── tagsView.js │ │ ├── user.js │ │ └── vod.js ├── styles │ ├── btn.scss │ ├── element-ui.scss │ ├── element-variables.scss │ ├── index.scss │ ├── mixin.scss │ ├── reset.scss │ ├── ruoyi.scss │ ├── sidebar.scss │ ├── transition.scss │ └── variables.scss ├── utils │ ├── auth.js │ ├── clipboard.js │ ├── error-log.js │ ├── errorCode.js │ ├── generator │ │ ├── config.js │ │ ├── css.js │ │ ├── drawingDefault.js │ │ ├── html.js │ │ ├── icon.json │ │ ├── js.js │ │ └── render.js │ ├── get-page-title.js │ ├── index.js │ ├── jsencrypt.js │ ├── open-window.js │ ├── permission.js │ ├── random.js │ ├── request.js │ ├── ruoyi.js │ ├── scroll-to.js │ └── validate.js ├── vendor │ ├── Export2Excel.js │ └── Export2Zip.js └── views │ ├── components │ └── icons │ │ ├── element-icons.js │ │ ├── index.vue │ │ └── svg-icons.js │ ├── control_panel │ └── index.vue │ ├── dashboard │ ├── admin │ │ ├── components │ │ │ ├── BarChart.vue │ │ │ ├── BoxCard.vue │ │ │ ├── LineChart.vue │ │ │ ├── PanelGroup.vue │ │ │ ├── PieChart.vue │ │ │ ├── RaddarChart.vue │ │ │ ├── TodoList │ │ │ │ ├── Todo.vue │ │ │ │ ├── index.scss │ │ │ │ └── index.vue │ │ │ └── mixins │ │ │ │ └── resize.js │ │ └── index.vue │ ├── editor │ │ └── index.vue │ └── index.vue │ ├── error-page │ ├── 401.vue │ └── 404.vue │ ├── hiker │ ├── developer │ │ └── index.vue │ ├── rule │ │ └── index.vue │ └── rule_type │ │ └── index.vue │ ├── monitor │ ├── cache │ │ ├── index.vue │ │ └── list.vue │ ├── druid │ │ └── index.vue │ ├── job │ │ ├── index.vue │ │ └── log.vue │ ├── logininfor │ │ └── index.vue │ ├── online │ │ └── index.vue │ ├── operlog │ │ └── index.vue │ ├── pip │ │ └── index.vue │ └── server │ │ └── index.vue │ ├── permission │ ├── label │ │ └── index.vue │ ├── menu │ │ └── index.vue │ ├── role │ │ └── index.vue │ └── user │ │ ├── AvatarUpload.vue │ │ └── index.vue │ ├── profile │ ├── components │ │ ├── Account.vue │ │ ├── ResetPwd.vue │ │ ├── UserCard.vue │ │ └── userAvatar.vue │ └── index.vue │ ├── redirect │ └── index.vue │ ├── system │ ├── dict │ │ ├── detail │ │ │ └── index.vue │ │ └── index.vue │ └── parameter │ │ └── index.vue │ ├── tool │ ├── blog │ │ └── index.vue │ ├── build │ │ ├── CodeTypeDialog.vue │ │ ├── DraggableItem.vue │ │ ├── IconsDialog.vue │ │ ├── RightPanel.vue │ │ ├── TreeNodeDialog.vue │ │ └── index.vue │ ├── liveTool │ │ ├── index.vue │ │ ├── logo.json │ │ └── styles.scss │ ├── swagger │ │ └── index.vue │ └── xfgpt │ │ └── index.vue │ ├── user │ ├── forgetPassword │ │ ├── SetPassword.vue │ │ └── index.vue │ ├── layout.vue │ ├── login │ │ ├── auth-redirect.vue │ │ └── index.vue │ └── register │ │ ├── index.vue │ │ └── verify.vue │ └── vod │ ├── configs │ └── index.vue │ ├── houses │ └── index.vue │ ├── rules │ ├── edit.vue │ └── index.vue │ ├── subs │ └── index.vue │ └── web │ ├── about.vue │ ├── components │ ├── filter.vue │ ├── footer.vue │ ├── header.vue │ ├── menu.vue │ └── videoList.vue │ ├── home │ ├── category.vue │ ├── detail.vue │ └── search.vue │ └── index.vue ├── tests └── unit │ ├── .eslintrc.js │ ├── components │ ├── Hamburger.spec.js │ └── SvgIcon.spec.js │ └── utils │ ├── formatTime.spec.js │ ├── param2Obj.spec.js │ ├── parseTime.spec.js │ └── validate.spec.js └── vue.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | **/.idea 2 | **/.fleet 3 | **/venv 4 | **/log 5 | **/__pycache__ 6 | **.pyc 7 | **.pyo 8 | **.log 9 | 10 | **.yaml 11 | **/.DS_Store 12 | 13 | 14 | **/node_modules 15 | **/dist 16 | 17 | **/.env 18 | **/.env.local 19 | **/.env.development 20 | **/.env.production 21 | **/.env.*.local 22 | -------------------------------------------------------------------------------- /dashboard/.editorconfig: -------------------------------------------------------------------------------- 1 | # https://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | end_of_line = lf 9 | insert_final_newline = true 10 | trim_trailing_whitespace = true 11 | 12 | [*.md] 13 | insert_final_newline = false 14 | trim_trailing_whitespace = false 15 | -------------------------------------------------------------------------------- /dashboard/.env.development: -------------------------------------------------------------------------------- 1 | # just a flag 2 | ENV='development' 3 | 4 | # base api 5 | VUE_APP_BASE_API='http://localhost:5707/api/v1/' 6 | VUE_APP_MEDIA_BASE='http://localhost:5707/media/' 7 | 8 | # vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable, 9 | # to control whether the babel-plugin-dynamic-import-node plugin is enabled. 10 | # It only does one thing by converting all import() to require(). 11 | # This configuration can significantly increase the speed of hot updates, 12 | # when you have a large number of pages. 13 | # Detail: https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/babel-preset-app/index.js 14 | 15 | # VUE_CLI_BABEL_TRANSPILE_MODULES = true 16 | -------------------------------------------------------------------------------- /dashboard/.env.development.example: -------------------------------------------------------------------------------- 1 | # just a flag 2 | ENV='development' 3 | 4 | # base api 5 | VUE_APP_BASE_API='http://127.0.0.1:5707/api/v1/' 6 | VUE_APP_MEDIA_BASE='http://127.0.0.1:5707/media/' 7 | 8 | # vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable, 9 | # to control whether the babel-plugin-dynamic-import-node plugin is enabled. 10 | # It only does one thing by converting all import() to require(). 11 | # This configuration can significantly increase the speed of hot updates, 12 | # when you have a large number of pages. 13 | # Detail: https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/babel-preset-app/index.js 14 | 15 | # VUE_CLI_BABEL_TRANSPILE_MODULES = true 16 | -------------------------------------------------------------------------------- /dashboard/.env.production: -------------------------------------------------------------------------------- 1 | # just a flag 2 | ENV='production' 3 | 4 | # base api 5 | VUE_APP_BASE_API='http://fastapi-vue-api.beginner2020.top/api/v1/' 6 | VUE_APP_MEDIA_BASE='http://fastapi-vue-api.beginner2020.top/media/' 7 | -------------------------------------------------------------------------------- /dashboard/.env.production.example: -------------------------------------------------------------------------------- 1 | # just a flag 2 | ENV='production' 3 | 4 | # base api 5 | VUE_APP_BASE_API='http://fastapi-vue-api.beginner2020.top/api/v1/' 6 | VUE_APP_MEDIA_BASE='http://fastapi-vue-api.beginner2020.top/media/' 7 | -------------------------------------------------------------------------------- /dashboard/.env.staging: -------------------------------------------------------------------------------- 1 | NODE_ENV=production 2 | 3 | # just a flag 4 | ENV='staging' 5 | 6 | # base api 7 | # VUE_APP_BASE_API='http://fastapi-vue-api.beginner2020.top/api/v1/' 8 | # VUE_APP_MEDIA_BASE='http://fastapi-vue-api.beginner2020.top/media/' 9 | 10 | VUE_APP_BASE_API='http://localhost:5707/api/v1/' 11 | VUE_APP_MEDIA_BASE='http://localhost:5707/media/' 12 | -------------------------------------------------------------------------------- /dashboard/.eslintignore: -------------------------------------------------------------------------------- 1 | build/*.js 2 | src/assets 3 | public 4 | dist 5 | -------------------------------------------------------------------------------- /dashboard/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | dist/ 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | **/*.log 8 | 9 | tests/**/coverage/ 10 | tests/e2e/reports 11 | selenium-debug.log 12 | 13 | # Editor directories and files 14 | .idea 15 | .vscode 16 | *.suo 17 | *.ntvs* 18 | *.njsproj 19 | *.sln 20 | *.local 21 | 22 | package-lock.json 23 | yarn.lock 24 | -------------------------------------------------------------------------------- /dashboard/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 10 3 | script: npm run test 4 | notifications: 5 | email: false 6 | -------------------------------------------------------------------------------- /dashboard/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017-present PanJiaChen 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 | -------------------------------------------------------------------------------- /dashboard/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/app' 4 | ], 5 | env: { 6 | development: { 7 | plugins: ['dynamic-import-node'] 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /dashboard/build/index.js: -------------------------------------------------------------------------------- 1 | const { run } = require('runjs') 2 | const chalk = require('chalk') 3 | const config = require('../vue.config.js') 4 | const rawArgv = process.argv.slice(2) 5 | const args = rawArgv.join(' ') 6 | 7 | if (process.env.npm_config_preview || rawArgv.includes('--preview')) { 8 | const report = rawArgv.includes('--report') 9 | 10 | run(`vue-cli-service build ${args}`) 11 | 12 | const port = 9526 13 | const publicPath = config.publicPath 14 | 15 | var connect = require('connect') 16 | var serveStatic = require('serve-static') 17 | const app = connect() 18 | 19 | app.use( 20 | publicPath, 21 | serveStatic('./dist', { 22 | index: ['index.html', '/'] 23 | }) 24 | ) 25 | 26 | app.listen(port, function () { 27 | console.log(chalk.green(`> Preview at http://localhost:${port}${publicPath}`)) 28 | if (report) { 29 | console.log(chalk.green(`> Report at http://localhost:${port}${publicPath}report.html`)) 30 | } 31 | 32 | }) 33 | } else { 34 | run(`vue-cli-service build ${args}`) 35 | } 36 | -------------------------------------------------------------------------------- /dashboard/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | moduleFileExtensions: ['js', 'jsx', 'json', 'vue'], 3 | transform: { 4 | '^.+\\.vue$': 'vue-jest', 5 | '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 6 | 'jest-transform-stub', 7 | '^.+\\.jsx?$': 'babel-jest' 8 | }, 9 | moduleNameMapper: { 10 | '^@/(.*)$': '/src/$1' 11 | }, 12 | snapshotSerializers: ['jest-serializer-vue'], 13 | testMatch: [ 14 | '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)' 15 | ], 16 | collectCoverageFrom: ['src/utils/**/*.{js,vue}', '!src/utils/auth.js', '!src/utils/request.js', 'src/components/**/*.{js,vue}'], 17 | coverageDirectory: '/tests/unit/coverage', 18 | // 'collectCoverage': true, 19 | 'coverageReporters': [ 20 | 'lcov', 21 | 'text-summary' 22 | ], 23 | testURL: 'http://localhost/' 24 | } 25 | -------------------------------------------------------------------------------- /dashboard/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": "./", 4 | "paths": { 5 | "@/*": ["src/*"] 6 | } 7 | }, 8 | "exclude": ["node_modules", "dist"] 9 | } -------------------------------------------------------------------------------- /dashboard/plop-templates/component/index.hbs: -------------------------------------------------------------------------------- 1 | {{#if template}} 2 | 5 | {{/if}} 6 | 7 | {{#if script}} 8 | 20 | {{/if}} 21 | 22 | {{#if style}} 23 | 26 | {{/if}} 27 | -------------------------------------------------------------------------------- /dashboard/plop-templates/component/prompt.js: -------------------------------------------------------------------------------- 1 | const { notEmpty } = require('../utils.js') 2 | 3 | module.exports = { 4 | description: 'generate vue component', 5 | prompts: [{ 6 | type: 'input', 7 | name: 'name', 8 | message: 'component name please', 9 | validate: notEmpty('name') 10 | }, 11 | { 12 | type: 'checkbox', 13 | name: 'blocks', 14 | message: 'Blocks:', 15 | choices: [{ 16 | name: '