From 7c08c2885e7a96a46f0cfd199e6de0f5ad8a64d4 Mon Sep 17 00:00:00 2001 From: gboy Date: Fri, 22 Mar 2024 15:50:26 +0800 Subject: [PATCH] first --- .editorconfig | 14 + .env.production | 8 + .env.staging | 8 + .eslintignore | 4 + .eslintrc.js | 198 + .gitignore | 23 + .travis.yml | 5 + LICENSE | 21 + README.es.md | 215 + README.ja.md | 215 + README.md | 215 + README.zh-CN.md | 215 + babel.config.js | 5 + build/index.js | 44 + jest.config.js | 24 + jsconfig.json | 9 + mock/article.js | 123 + mock/index.js | 65 + mock/mock-server.js | 93 + mock/remote-search.js | 58 + mock/role/index.js | 107 + mock/role/routes.js | 533 + mock/user.js | 92 + package.json | 134 + patches/element-ui+2.13.2.patch | 69 + plop-templates/component/index.hbs | 26 + plop-templates/component/prompt.js | 55 + plop-templates/store/index.hbs | 16 + plop-templates/store/prompt.js | 62 + plop-templates/utils.js | 9 + plop-templates/view/index.hbs | 26 + plop-templates/view/prompt.js | 55 + plopfile.js | 9 + postcss.config.js | 5 + public/UEditor/dialogs/anchor/anchor.html | 40 + .../UEditor/dialogs/attachment/attachment.css | 681 + .../dialogs/attachment/attachment.html | 60 + .../UEditor/dialogs/attachment/attachment.js | 760 + .../attachment/fileTypeImages/icon_chm.gif | Bin 0 -> 923 bytes .../fileTypeImages/icon_default.png | Bin 0 -> 841 bytes .../attachment/fileTypeImages/icon_doc.gif | Bin 0 -> 1012 bytes .../attachment/fileTypeImages/icon_exe.gif | Bin 0 -> 949 bytes .../attachment/fileTypeImages/icon_jpg.gif | Bin 0 -> 950 bytes .../attachment/fileTypeImages/icon_mp3.gif | Bin 0 -> 986 bytes .../attachment/fileTypeImages/icon_mv.gif | Bin 0 -> 1001 bytes .../attachment/fileTypeImages/icon_pdf.gif | Bin 0 -> 996 bytes .../attachment/fileTypeImages/icon_ppt.gif | Bin 0 -> 1001 bytes .../attachment/fileTypeImages/icon_psd.gif | Bin 0 -> 1009 bytes .../attachment/fileTypeImages/icon_rar.gif | Bin 0 -> 1007 bytes .../attachment/fileTypeImages/icon_txt.gif | Bin 0 -> 970 bytes .../attachment/fileTypeImages/icon_xls.gif | Bin 0 -> 1005 bytes .../dialogs/attachment/images/alignicon.gif | Bin 0 -> 1051 bytes .../dialogs/attachment/images/alignicon.png | Bin 0 -> 3714 bytes .../UEditor/dialogs/attachment/images/bg.png | Bin 0 -> 2810 bytes .../dialogs/attachment/images/file-icons.gif | Bin 0 -> 20097 bytes .../dialogs/attachment/images/file-icons.png | Bin 0 -> 44070 bytes .../dialogs/attachment/images/icons.gif | Bin 0 -> 453 bytes .../dialogs/attachment/images/icons.png | Bin 0 -> 2678 bytes .../dialogs/attachment/images/image.png | Bin 0 -> 1672 bytes .../dialogs/attachment/images/progress.png | Bin 0 -> 1269 bytes .../dialogs/attachment/images/success.gif | Bin 0 -> 445 bytes .../dialogs/attachment/images/success.png | Bin 0 -> 1621 bytes .../UEditor/dialogs/background/background.css | 94 + .../dialogs/background/background.html | 56 + .../UEditor/dialogs/background/background.js | 376 + .../UEditor/dialogs/background/images/bg.png | Bin 0 -> 2810 bytes .../dialogs/background/images/success.png | Bin 0 -> 1621 bytes public/UEditor/dialogs/charts/chart.config.js | 65 + public/UEditor/dialogs/charts/charts.css | 170 + public/UEditor/dialogs/charts/charts.html | 89 + public/UEditor/dialogs/charts/charts.js | 519 + .../UEditor/dialogs/charts/images/charts0.png | Bin 0 -> 25306 bytes .../UEditor/dialogs/charts/images/charts1.png | Bin 0 -> 19263 bytes .../UEditor/dialogs/charts/images/charts2.png | Bin 0 -> 23016 bytes .../UEditor/dialogs/charts/images/charts3.png | Bin 0 -> 7823 bytes .../UEditor/dialogs/charts/images/charts4.png | Bin 0 -> 8344 bytes .../UEditor/dialogs/charts/images/charts5.png | Bin 0 -> 47084 bytes public/UEditor/dialogs/emotion/emotion.css | 43 + public/UEditor/dialogs/emotion/emotion.html | 54 + public/UEditor/dialogs/emotion/emotion.js | 186 + public/UEditor/dialogs/emotion/images/0.gif | Bin 0 -> 43 bytes .../UEditor/dialogs/emotion/images/bface.gif | Bin 0 -> 27167 bytes .../UEditor/dialogs/emotion/images/cface.gif | Bin 0 -> 8603 bytes .../UEditor/dialogs/emotion/images/fface.gif | Bin 0 -> 18479 bytes .../dialogs/emotion/images/jxface2.gif | Bin 0 -> 40706 bytes .../emotion/images/neweditor-tab-bg.png | Bin 0 -> 216 bytes .../UEditor/dialogs/emotion/images/tface.gif | Bin 0 -> 19805 bytes .../UEditor/dialogs/emotion/images/wface.gif | Bin 0 -> 49850 bytes .../UEditor/dialogs/emotion/images/yface.gif | Bin 0 -> 28409 bytes public/UEditor/dialogs/gmap/gmap.html | 89 + public/UEditor/dialogs/help/help.css | 7 + public/UEditor/dialogs/help/help.html | 82 + public/UEditor/dialogs/help/help.js | 56 + public/UEditor/dialogs/image/image.css | 894 + public/UEditor/dialogs/image/image.html | 120 + public/UEditor/dialogs/image/image.js | 1148 + .../dialogs/image/images/alignicon.jpg | Bin 0 -> 16101 bytes public/UEditor/dialogs/image/images/bg.png | Bin 0 -> 2810 bytes public/UEditor/dialogs/image/images/icons.gif | Bin 0 -> 453 bytes public/UEditor/dialogs/image/images/icons.png | Bin 0 -> 2678 bytes public/UEditor/dialogs/image/images/image.png | Bin 0 -> 1672 bytes .../UEditor/dialogs/image/images/progress.png | Bin 0 -> 1269 bytes .../UEditor/dialogs/image/images/success.gif | Bin 0 -> 445 bytes .../UEditor/dialogs/image/images/success.png | Bin 0 -> 1621 bytes .../dialogs/insertframe/insertframe.html | 98 + public/UEditor/dialogs/internal.js | 80 + public/UEditor/dialogs/link/link.html | 126 + public/UEditor/dialogs/map/map.html | 135 + public/UEditor/dialogs/map/show.html | 118 + public/UEditor/dialogs/music/music.css | 30 + public/UEditor/dialogs/music/music.html | 32 + public/UEditor/dialogs/music/music.js | 192 + public/UEditor/dialogs/preview/preview.html | 40 + .../UEditor/dialogs/scrawl/images/addimg.png | Bin 0 -> 628 bytes .../UEditor/dialogs/scrawl/images/brush.png | Bin 0 -> 608 bytes .../UEditor/dialogs/scrawl/images/delimg.png | Bin 0 -> 516 bytes .../UEditor/dialogs/scrawl/images/delimgH.png | Bin 0 -> 578 bytes .../UEditor/dialogs/scrawl/images/empty.png | Bin 0 -> 519 bytes .../UEditor/dialogs/scrawl/images/emptyH.png | Bin 0 -> 657 bytes .../UEditor/dialogs/scrawl/images/eraser.png | Bin 0 -> 43271 bytes public/UEditor/dialogs/scrawl/images/redo.png | Bin 0 -> 454 bytes .../UEditor/dialogs/scrawl/images/redoH.png | Bin 0 -> 536 bytes .../UEditor/dialogs/scrawl/images/scale.png | Bin 0 -> 435 bytes .../UEditor/dialogs/scrawl/images/scaleH.png | Bin 0 -> 330 bytes public/UEditor/dialogs/scrawl/images/size.png | Bin 0 -> 775 bytes public/UEditor/dialogs/scrawl/images/undo.png | Bin 0 -> 444 bytes .../UEditor/dialogs/scrawl/images/undoH.png | Bin 0 -> 511 bytes public/UEditor/dialogs/scrawl/scrawl.css | 72 + public/UEditor/dialogs/scrawl/scrawl.html | 95 + public/UEditor/dialogs/scrawl/scrawl.js | 671 + .../dialogs/searchreplace/searchreplace.html | 102 + .../dialogs/searchreplace/searchreplace.js | 164 + .../dialogs/snapscreen/snapscreen.html | 58 + public/UEditor/dialogs/spechars/spechars.html | 21 + public/UEditor/dialogs/spechars/spechars.js | 57 + public/UEditor/dialogs/table/dragicon.png | Bin 0 -> 304 bytes public/UEditor/dialogs/table/edittable.css | 84 + public/UEditor/dialogs/table/edittable.html | 64 + public/UEditor/dialogs/table/edittable.js | 237 + public/UEditor/dialogs/table/edittd.html | 61 + public/UEditor/dialogs/table/edittip.html | 33 + public/UEditor/dialogs/template/config.js | 42 + public/UEditor/dialogs/template/images/bg.gif | Bin 0 -> 84 bytes .../UEditor/dialogs/template/images/pre0.png | Bin 0 -> 250 bytes .../UEditor/dialogs/template/images/pre1.png | Bin 0 -> 291 bytes .../UEditor/dialogs/template/images/pre2.png | Bin 0 -> 394 bytes .../UEditor/dialogs/template/images/pre3.png | Bin 0 -> 485 bytes .../UEditor/dialogs/template/images/pre4.png | Bin 0 -> 393 bytes public/UEditor/dialogs/template/template.css | 18 + public/UEditor/dialogs/template/template.html | 26 + public/UEditor/dialogs/template/template.js | 53 + public/UEditor/dialogs/video/images/bg.png | Bin 0 -> 2810 bytes .../dialogs/video/images/center_focus.jpg | Bin 0 -> 11795 bytes .../dialogs/video/images/file-icons.gif | Bin 0 -> 20097 bytes .../dialogs/video/images/file-icons.png | Bin 0 -> 44070 bytes public/UEditor/dialogs/video/images/icons.gif | Bin 0 -> 453 bytes public/UEditor/dialogs/video/images/icons.png | Bin 0 -> 2678 bytes public/UEditor/dialogs/video/images/image.png | Bin 0 -> 1672 bytes .../dialogs/video/images/left_focus.jpg | Bin 0 -> 11423 bytes .../dialogs/video/images/none_focus.jpg | Bin 0 -> 11546 bytes .../UEditor/dialogs/video/images/progress.png | Bin 0 -> 1269 bytes .../dialogs/video/images/right_focus.jpg | Bin 0 -> 11334 bytes .../UEditor/dialogs/video/images/success.gif | Bin 0 -> 445 bytes .../UEditor/dialogs/video/images/success.png | Bin 0 -> 1621 bytes public/UEditor/dialogs/video/video.css | 635 + public/UEditor/dialogs/video/video.html | 86 + public/UEditor/dialogs/video/video.js | 797 + public/UEditor/dialogs/webapp/webapp.html | 53 + public/UEditor/dialogs/wordimage/tangram.js | 1495 + .../UEditor/dialogs/wordimage/wordimage.html | 111 + public/UEditor/dialogs/wordimage/wordimage.js | 157 + public/UEditor/index.html | 175 + public/UEditor/lang/en/en.js | 755 + public/UEditor/lang/en/images/addimage.png | Bin 0 -> 3373 bytes .../lang/en/images/alldeletebtnhoverskin.png | Bin 0 -> 743 bytes .../lang/en/images/alldeletebtnupskin.png | Bin 0 -> 743 bytes public/UEditor/lang/en/images/background.png | Bin 0 -> 3854 bytes public/UEditor/lang/en/images/button.png | Bin 0 -> 4929 bytes public/UEditor/lang/en/images/copy.png | Bin 0 -> 1222 bytes .../UEditor/lang/en/images/deletedisable.png | Bin 0 -> 649 bytes .../UEditor/lang/en/images/deleteenable.png | Bin 0 -> 664 bytes .../UEditor/lang/en/images/listbackground.png | Bin 0 -> 3750 bytes public/UEditor/lang/en/images/localimage.png | Bin 0 -> 3083 bytes public/UEditor/lang/en/images/music.png | Bin 0 -> 91561 bytes .../lang/en/images/rotateleftdisable.png | Bin 0 -> 719 bytes .../lang/en/images/rotateleftenable.png | Bin 0 -> 952 bytes .../lang/en/images/rotaterightdisable.png | Bin 0 -> 754 bytes .../lang/en/images/rotaterightenable.png | Bin 0 -> 1007 bytes public/UEditor/lang/en/images/upload.png | Bin 0 -> 3941 bytes public/UEditor/lang/zh-cn/images/copy.png | Bin 0 -> 4319 bytes .../UEditor/lang/zh-cn/images/localimage.png | Bin 0 -> 6979 bytes public/UEditor/lang/zh-cn/images/music.png | Bin 0 -> 23106 bytes public/UEditor/lang/zh-cn/images/upload.png | Bin 0 -> 6608 bytes public/UEditor/lang/zh-cn/zh-cn.js | 669 + public/UEditor/themes/default/css/ueditor.css | 1904 + .../themes/default/css/ueditor.min.css | 8 + public/UEditor/themes/default/dialogbase.css | 100 + .../UEditor/themes/default/images/anchor.gif | Bin 0 -> 184 bytes .../UEditor/themes/default/images/arrow.png | Bin 0 -> 1173 bytes .../themes/default/images/arrow_down.png | Bin 0 -> 1610 bytes .../themes/default/images/arrow_up.png | Bin 0 -> 1649 bytes .../themes/default/images/button-bg.gif | Bin 0 -> 1114 bytes .../themes/default/images/cancelbutton.gif | Bin 0 -> 1227 bytes .../UEditor/themes/default/images/charts.png | Bin 0 -> 518 bytes .../themes/default/images/cursor_h.gif | Bin 0 -> 253 bytes .../themes/default/images/cursor_h.png | Bin 0 -> 175 bytes .../themes/default/images/cursor_v.gif | Bin 0 -> 370 bytes .../themes/default/images/cursor_v.png | Bin 0 -> 177 bytes .../themes/default/images/dialog-title-bg.png | Bin 0 -> 938 bytes .../themes/default/images/filescan.png | Bin 0 -> 4282 bytes .../themes/default/images/highlighted.gif | Bin 0 -> 111 bytes .../themes/default/images/icons-all.gif | Bin 0 -> 3750 bytes .../UEditor/themes/default/images/icons.gif | Bin 0 -> 20947 bytes .../UEditor/themes/default/images/icons.png | Bin 0 -> 19694 bytes .../themes/default/images/iphone-bg.png | Bin 0 -> 56887 bytes .../themes/default/images/loaderror.png | Bin 0 -> 3209 bytes .../UEditor/themes/default/images/loading.gif | Bin 0 -> 734 bytes public/UEditor/themes/default/images/lock.gif | Bin 0 -> 1062 bytes .../default/images/neweditor-tab-bg.png | Bin 0 -> 216 bytes .../themes/default/images/pagebreak.gif | Bin 0 -> 54 bytes .../themes/default/images/previewMobile.png | Bin 0 -> 630 bytes .../UEditor/themes/default/images/scale.png | Bin 0 -> 167 bytes .../themes/default/images/sortable.png | Bin 0 -> 2851 bytes .../UEditor/themes/default/images/spacer.gif | Bin 0 -> 43 bytes .../themes/default/images/sparator_v.png | Bin 0 -> 122 bytes .../default/images/table-cell-align.png | Bin 0 -> 1847 bytes .../default/images/tangram-colorpicker.png | Bin 0 -> 17355 bytes .../themes/default/images/toolbar_bg.png | Bin 0 -> 170 bytes .../themes/default/images/unhighlighted.gif | Bin 0 -> 111 bytes .../UEditor/themes/default/images/upload.png | Bin 0 -> 6608 bytes .../themes/default/images/videologo.gif | Bin 0 -> 1604 bytes public/UEditor/themes/default/images/word.gif | Bin 0 -> 1019 bytes .../themes/default/images/wordpaste.png | Bin 0 -> 6467 bytes public/UEditor/themes/iframe.css | 1 + .../third-party/SyntaxHighlighter/shCore.js | 3655 ++ .../SyntaxHighlighter/shCoreDefault.css | 1 + .../third-party/codemirror/codemirror.css | 104 + .../third-party/codemirror/codemirror.js | 3581 ++ .../highcharts/adapters/mootools-adapter.js | 13 + .../adapters/mootools-adapter.src.js | 313 + .../highcharts/adapters/prototype-adapter.js | 15 + .../adapters/prototype-adapter.src.js | 316 + .../adapters/standalone-framework.js | 17 + .../adapters/standalone-framework.src.js | 583 + .../third-party/highcharts/highcharts-more.js | 50 + .../highcharts/highcharts-more.src.js | 2430 ++ .../third-party/highcharts/highcharts.js | 283 + .../third-party/highcharts/highcharts.src.js | 16974 +++++++++ .../highcharts/modules/annotations.js | 7 + .../highcharts/modules/annotations.src.js | 401 + .../highcharts/modules/canvas-tools.js | 133 + .../highcharts/modules/canvas-tools.src.js | 3113 ++ .../third-party/highcharts/modules/data.js | 17 + .../highcharts/modules/data.src.js | 582 + .../highcharts/modules/drilldown.js | 11 + .../highcharts/modules/drilldown.src.js | 447 + .../highcharts/modules/exporting.js | 22 + .../highcharts/modules/exporting.src.js | 709 + .../third-party/highcharts/modules/funnel.js | 12 + .../highcharts/modules/funnel.src.js | 289 + .../third-party/highcharts/modules/heatmap.js | 1 + .../highcharts/modules/heatmap.src.js | 53 + .../third-party/highcharts/modules/map.js | 27 + .../third-party/highcharts/modules/map.src.js | 1002 + .../highcharts/modules/no-data-to-display.js | 12 + .../modules/no-data-to-display.src.js | 128 + .../highcharts/themes/dark-blue.js | 254 + .../highcharts/themes/dark-green.js | 255 + .../third-party/highcharts/themes/gray.js | 257 + .../third-party/highcharts/themes/grid.js | 103 + .../third-party/highcharts/themes/skies.js | 89 + public/UEditor/third-party/jquery-1.10.2.js | 9789 +++++ .../UEditor/third-party/jquery-1.10.2.min.js | 6 + .../UEditor/third-party/jquery-1.10.2.min.map | 1 + .../snapscreen/UEditorSnapscreen.exe | Bin 0 -> 519936 bytes .../UEditor/third-party/video-js/font/vjs.eot | Bin 0 -> 3536 bytes .../UEditor/third-party/video-js/font/vjs.svg | 65 + .../UEditor/third-party/video-js/font/vjs.ttf | Bin 0 -> 3372 bytes .../third-party/video-js/font/vjs.woff | Bin 0 -> 4228 bytes .../UEditor/third-party/video-js/video-js.css | 766 + .../third-party/video-js/video-js.min.css | 5 + .../UEditor/third-party/video-js/video.dev.js | 7106 ++++ public/UEditor/third-party/video-js/video.js | 129 + .../third-party/webuploader/webuploader.css | 28 + .../webuploader/webuploader.custom.js | 5670 +++ .../webuploader/webuploader.custom.min.js | 2 + .../webuploader/webuploader.flashonly.js | 4176 +++ .../webuploader/webuploader.flashonly.min.js | 2 + .../webuploader/webuploader.html5only.js | 5559 +++ .../webuploader/webuploader.html5only.min.js | 2 + .../third-party/webuploader/webuploader.js | 6733 ++++ .../webuploader/webuploader.min.js | 2 + .../webuploader/webuploader.withoutimage.js | 4593 +++ .../webuploader.withoutimage.min.js | 2 + public/UEditor/third-party/xss.min.js | 1 + .../zeroclipboard/ZeroClipboard.js | 1256 + .../zeroclipboard/ZeroClipboard.min.js | 9 + public/UEditor/ueditor.all.js | 29566 ++++++++++++++++ public/UEditor/ueditor.all.min.js | 18 + public/UEditor/ueditor.config.js | 477 + public/UEditor/ueditor.parse.js | 1022 + public/UEditor/ueditor.parse.min.js | 7 + public/favicon.ico | Bin 0 -> 4286 bytes public/index.html | 17 + src/App.vue | 67 + src/api/accounts.js | 135 + src/api/app.js | 12 + src/api/dashboard.js | 65 + src/api/diy.js | 191 + src/api/freight.js | 55 + src/api/marketing.js | 424 + src/api/order.js | 342 + src/api/product.js | 619 + src/api/request.js | 83 + src/api/setting.js | 363 + src/api/system.js | 358 + src/api/systemForm.js | 111 + src/api/user.js | 173 + src/assets/401_images/401.gif | Bin 0 -> 164227 bytes src/assets/404_images/404.png | Bin 0 -> 98071 bytes src/assets/404_images/404_cloud.png | Bin 0 -> 4766 bytes .../custom-theme/fonts/element-icons.ttf | Bin 0 -> 11028 bytes .../custom-theme/fonts/element-icons.woff | Bin 0 -> 6124 bytes src/assets/custom-theme/index.css | 1 + src/assets/images/assist_title.png | Bin 0 -> 1857 bytes src/assets/images/bg.jpg | Bin 0 -> 305003 bytes src/assets/images/bjt.png | Bin 0 -> 2182 bytes src/assets/images/broadcast_title.png | Bin 0 -> 1537 bytes src/assets/images/c_presell_bg0.png | Bin 0 -> 38097 bytes src/assets/images/c_presell_bg1.png | Bin 0 -> 26181 bytes src/assets/images/c_presell_bg2.png | Bin 0 -> 28488 bytes src/assets/images/coupon-bg.png | Bin 0 -> 2526 bytes src/assets/images/default.jpg | Bin 0 -> 20200 bytes src/assets/images/electric.png | Bin 0 -> 1773 bytes src/assets/images/expressi.jpg | Bin 0 -> 2634 bytes src/assets/images/f copy.png | Bin 0 -> 7127 bytes src/assets/images/f.png | Bin 0 -> 7127 bytes src/assets/images/foot-001.png | Bin 0 -> 1946 bytes src/assets/images/foot-0010.png | Bin 0 -> 2016 bytes src/assets/images/foot-002.png | Bin 0 -> 1690 bytes src/assets/images/foot-003.png | Bin 0 -> 1519 bytes src/assets/images/foot-004.png | Bin 0 -> 1417 bytes src/assets/images/foot-005.png | Bin 0 -> 3578 bytes src/assets/images/foot-006.png | Bin 0 -> 2681 bytes src/assets/images/foot-007.png | Bin 0 -> 2133 bytes src/assets/images/foot-008.png | Bin 0 -> 1899 bytes src/assets/images/foot-009.png | Bin 0 -> 2482 bytes src/assets/images/formImg.png | Bin 0 -> 33503 bytes src/assets/images/gg.jpg | Bin 0 -> 32035 bytes src/assets/images/group_title.png | Bin 0 -> 1570 bytes src/assets/images/laber.png | Bin 0 -> 5660 bytes src/assets/images/margin01.png | Bin 0 -> 29856 bytes src/assets/images/margin02.png | Bin 0 -> 31133 bytes src/assets/images/margin03.png | Bin 0 -> 28306 bytes src/assets/images/member.png | Bin 0 -> 16763 bytes src/assets/images/member01.png | Bin 0 -> 2626 bytes src/assets/images/mer_avatar.png | Bin 0 -> 17370 bytes src/assets/images/mer_banner.jpg | Bin 0 -> 14667 bytes src/assets/images/mobilefoot.png | Bin 0 -> 1348 bytes src/assets/images/mobilehead.png | Bin 0 -> 12673 bytes src/assets/images/moren copy.jpg | Bin 0 -> 2768 bytes src/assets/images/moren.jpg | Bin 0 -> 2768 bytes src/assets/images/news.png | Bin 0 -> 2991 bytes src/assets/images/no copy.png | Bin 0 -> 4166 bytes src/assets/images/no-message.png | Bin 0 -> 28582 bytes src/assets/images/no-msg.png | Bin 0 -> 28187 bytes src/assets/images/no.png | Bin 0 -> 4166 bytes src/assets/images/order_icon.png | Bin 0 -> 1193 bytes src/assets/images/plant_bg.png | Bin 0 -> 6459 bytes src/assets/images/plant_title.png | Bin 0 -> 1425 bytes src/assets/images/presell_bg.png | Bin 0 -> 4473 bytes src/assets/images/presell_title.png | Bin 0 -> 2518 bytes src/assets/images/product_icon.png | Bin 0 -> 3048 bytes src/assets/images/ren.png | Bin 0 -> 31925 bytes src/assets/images/ren1.png | Bin 0 -> 908 bytes src/assets/images/ren2.png | Bin 0 -> 709 bytes src/assets/images/right.png | Bin 0 -> 3959 bytes src/assets/images/sort01.jpg | Bin 0 -> 57730 bytes src/assets/images/sort02.jpg | Bin 0 -> 116922 bytes src/assets/images/sort03.jpg | Bin 0 -> 82138 bytes src/assets/images/spike_title.png | Bin 0 -> 1949 bytes src/assets/images/split_guide.png | Bin 0 -> 36240 bytes src/assets/images/star.png | Bin 0 -> 348 bytes src/assets/images/star_active.png | Bin 0 -> 373 bytes src/assets/images/svip.png | Bin 0 -> 3546 bytes src/assets/images/topic_title.png | Bin 0 -> 4695 bytes src/assets/images/uploadImg.png | Bin 0 -> 5139 bytes src/assets/images/user01.png | Bin 0 -> 15507 bytes src/assets/images/user_vip.png | Bin 0 -> 36339 bytes src/assets/images/wutu.png | Bin 0 -> 24897 bytes src/assets/js/canvas-nest.min.js | 94 + src/assets/js/jigsaw.css | 127 + src/assets/js/jigsaw.js | 287 + src/assets/video/newOrderAudioLink.mp3 | Bin 0 -> 9216 bytes src/assets/video/notice.mp3 | Bin 0 -> 5268 bytes src/assets/video/notice.wav | Bin 0 -> 130044 bytes src/components/Charts/Keyboard.vue | 164 + src/components/Charts/LineMarker.vue | 236 + src/components/Charts/MixChart.vue | 280 + src/components/Charts/mixins/resize.js | 65 + src/components/SvgIcon/index.vue | 71 + src/components/ThemePicker/index.vue | 182 + src/components/TopNav/index.vue | 170 + src/components/UploadExcel/index.vue | 147 + src/components/attrFrom/index.vue | 286 + src/components/attrList/index.vue | 110 + src/components/breadCrumb/index.vue | 94 + src/components/cards/index.vue | 124 + src/components/copyright/index.vue | 72 + src/components/couponList/index.vue | 292 + src/components/deliveryRecord/index.vue | 321 + src/components/exportFile/fileList.vue | 134 + src/components/exportFile/index.vue | 132 + src/components/from/from.vue | 114 + src/components/goodList/index.vue | 304 + src/components/goodsList/index.vue | 345 + src/components/guidancePop/index.vue | 53 + src/components/hamBurger/index.vue | 53 + src/components/headerNotice/index.vue | 181 + src/components/headerSearch/index.vue | 189 + src/components/iconFrom/element-icons.js | 12 + src/components/iconFrom/index.vue | 115 + src/components/importGoods/goodList.vue | 226 + src/components/importGoods/index.vue | 150 + src/components/lazyCascader/index.vue | 478 + src/components/linkaddress/index.vue | 617 + src/components/map/index.js | 21 + src/components/map/map.vue | 99 + .../mobileConfig/c_auxiliary_box.vue | 84 + .../mobileConfig/c_auxiliary_line.vue | 97 + src/components/mobileConfig/c_banner.vue | 144 + .../mobileConfig/c_home_bargain.vue | 184 + src/components/mobileConfig/c_home_coupon.vue | 114 + .../mobileConfig/c_home_goods_list.vue | 270 + src/components/mobileConfig/c_home_hot.vue | 128 + src/components/mobileConfig/c_home_menu.vue | 193 + src/components/mobileConfig/c_home_pink.vue | 166 + .../mobileConfig/c_home_presell.vue | 149 + .../mobileConfig/c_home_seckill.vue | 145 + src/components/mobileConfig/c_home_title.vue | 141 + src/components/mobileConfig/c_home_topic.vue | 185 + .../mobileConfig/c_picture_cube.vue | 119 + src/components/mobileConfig/c_ueditor_box.vue | 109 + src/components/mobileConfig/c_wechat_live.vue | 96 + src/components/mobileConfig/index.js | 18 + src/components/mobileConfig/pageFoot.vue | 101 + src/components/mobileConfig/pageTitle.vue | 225 + .../mobileConfigRight/c_bg_color.vue | 99 + .../mobileConfigRight/c_cascader.vue | 82 + .../mobileConfigRight/c_comb_data.vue | 113 + .../mobileConfigRight/c_custom_menu_list.vue | 306 + src/components/mobileConfigRight/c_foot.vue | 288 + src/components/mobileConfigRight/c_goods.vue | 150 + .../mobileConfigRight/c_hot_box.vue | 13 + .../mobileConfigRight/c_hot_imgs.vue | 252 + .../mobileConfigRight/c_hot_word.vue | 146 + .../mobileConfigRight/c_input_item.vue | 88 + .../mobileConfigRight/c_input_number.vue | 89 + .../mobileConfigRight/c_is_show.vue | 73 + .../mobileConfigRight/c_menu_list.vue | 336 + .../mobileConfigRight/c_page_ueditor.vue | 117 + .../mobileConfigRight/c_pictrue.vue | 390 + .../mobileConfigRight/c_product.vue | 224 + src/components/mobileConfigRight/c_radio.vue | 85 + src/components/mobileConfigRight/c_select.vue | 79 + .../mobileConfigRight/c_select_item.vue | 203 + src/components/mobileConfigRight/c_set_up.vue | 68 + src/components/mobileConfigRight/c_slider.vue | 71 + src/components/mobileConfigRight/c_status.vue | 93 + src/components/mobileConfigRight/c_tab.vue | 136 + .../mobileConfigRight/c_txt_tab.vue | 144 + .../mobileConfigRight/c_upload_img.vue | 191 + src/components/mobileConfigRight/index.js | 18 + .../mobileFormConfig/c_home_checkbox.vue | 94 + .../mobileFormConfig/c_home_city.vue | 98 + .../mobileFormConfig/c_home_date.vue | 107 + .../mobileFormConfig/c_home_daterange.vue | 113 + .../mobileFormConfig/c_home_radio.vue | 94 + .../mobileFormConfig/c_home_select.vue | 94 + .../mobileFormConfig/c_home_text.vue | 102 + .../mobileFormConfig/c_home_time.vue | 98 + .../mobileFormConfig/c_home_timerange.vue | 98 + .../mobileFormConfig/c_upload_picture.vue | 94 + src/components/mobileFormConfig/index.js | 18 + .../mobileFormPage/home_checkbox.vue | 149 + src/components/mobileFormPage/home_city.vue | 149 + src/components/mobileFormPage/home_date.vue | 184 + .../mobileFormPage/home_daterange.vue | 185 + src/components/mobileFormPage/home_radio.vue | 150 + src/components/mobileFormPage/home_select.vue | 131 + src/components/mobileFormPage/home_text.vue | 162 + src/components/mobileFormPage/home_time.vue | 182 + .../mobileFormPage/home_timerange.vue | 183 + .../mobileFormPage/home_upload_picture.vue | 137 + src/components/mobileFormPage/index.js | 18 + src/components/mobilePage/banner.vue | 324 + src/components/mobilePage/home_bargain.vue | 601 + src/components/mobilePage/home_coupon.vue | 356 + src/components/mobilePage/home_goods_list.vue | 838 + src/components/mobilePage/home_hot.vue | 442 + src/components/mobilePage/home_menu.vue | 501 + src/components/mobilePage/home_pink.vue | 539 + src/components/mobilePage/home_presell.vue | 494 + src/components/mobilePage/home_seckill.vue | 549 + src/components/mobilePage/home_title.vue | 235 + src/components/mobilePage/home_topic.vue | 420 + src/components/mobilePage/index.js | 18 + src/components/mobilePage/picture_cube.vue | 465 + src/components/mobilePage/wechat_live.vue | 512 + src/components/mobilePage/z_auxiliary_box.vue | 114 + .../mobilePage/z_auxiliary_line.vue | 157 + src/components/mobilePage/z_ueditor.vue | 138 + src/components/pagesFoot/index.vue | 109 + src/components/previewBox/index.vue | 66 + src/components/rightBtn/index.vue | 38 + src/components/rightPanel/index.vue | 154 + src/components/screenFull/index.vue | 69 + src/components/serviceGuarantee/index.vue | 231 + src/components/templatesFrom/index.vue | 496 + src/components/ueditorFrom/index.vue | 101 + src/components/uploadImg/index.vue | 524 + src/components/uploadPicture/index.vue | 959 + .../uploadPicture/uploadFrom/index.js | 31 + .../uploadPicture/uploadFrom/index.vue | 54 + src/components/uploadVideo/index.vue | 145 + src/components/userList/index.vue | 152 + src/components/verifition/Verify.vue | 502 + .../verifition/Verify/VerifyPoints.vue | 350 + .../verifition/Verify/VerifySlide.vue | 511 + src/components/verifition/utils/ase.js | 12 + src/components/verifition/utils/util.js | 45 + src/components/wangEditor/editor.js | 36 + src/components/wangEditor/html.js | 35 + src/components/wangEditor/index.vue | 233 + src/components/wangEditor/monaco.vue | 77 + src/filters/commFilter.js | 416 + src/filters/index.js | 78 + src/icons/index.js | 18 + src/icons/svg/404.svg | 1 + src/icons/svg/bug.svg | 1 + src/icons/svg/chart.svg | 1 + src/icons/svg/clipboard.svg | 1 + src/icons/svg/component.svg | 1 + src/icons/svg/dashboard.svg | 1 + src/icons/svg/documentation.svg | 1 + src/icons/svg/drag.svg | 1 + src/icons/svg/edit.svg | 1 + src/icons/svg/education.svg | 1 + src/icons/svg/email.svg | 1 + src/icons/svg/example.svg | 1 + src/icons/svg/excel.svg | 1 + src/icons/svg/exit-fullscreen.svg | 1 + src/icons/svg/eye-open.svg | 1 + src/icons/svg/eye.svg | 1 + src/icons/svg/form.svg | 1 + src/icons/svg/fullscreen.svg | 1 + src/icons/svg/guide.svg | 1 + src/icons/svg/icon.svg | 1 + src/icons/svg/international.svg | 1 + src/icons/svg/language.svg | 1 + src/icons/svg/link.svg | 1 + src/icons/svg/list.svg | 1 + src/icons/svg/lock.svg | 1 + src/icons/svg/message.svg | 1 + src/icons/svg/money.svg | 1 + src/icons/svg/nested.svg | 1 + src/icons/svg/password.svg | 1 + src/icons/svg/pdf.svg | 1 + src/icons/svg/people.svg | 1 + src/icons/svg/peoples.svg | 1 + src/icons/svg/qq.svg | 1 + src/icons/svg/search.svg | 1 + src/icons/svg/shopping.svg | 1 + src/icons/svg/size.svg | 1 + src/icons/svg/skill.svg | 1 + src/icons/svg/star.svg | 1 + src/icons/svg/tab.svg | 1 + src/icons/svg/table.svg | 1 + src/icons/svg/theme.svg | 1 + src/icons/svg/tree-table.svg | 1 + src/icons/svg/tree.svg | 1 + src/icons/svg/user.svg | 1 + src/icons/svg/wechat.svg | 1 + src/icons/svg/zip.svg | 1 + src/icons/svgo.yml | 22 + src/layout/component/aside.vue | 164 + src/layout/component/columnsAside.vue | 310 + src/layout/component/header.vue | 33 + src/layout/component/main.vue | 101 + src/layout/component/transverseAside.vue | 325 + src/layout/footer/index.vue | 39 + src/layout/index.vue | 101 + src/layout/logo/index.vue | 104 + src/layout/main/classic.vue | 39 + src/layout/main/columns.vue | 42 + src/layout/main/defaults.vue | 50 + src/layout/main/transverse.vue | 25 + src/layout/navBars/breadcrumb/breadcrumb.vue | 239 + src/layout/navBars/breadcrumb/index.vue | 103 + src/layout/navBars/breadcrumb/search.vue | 128 + src/layout/navBars/breadcrumb/setings.vue | 830 + src/layout/navBars/breadcrumb/theme.js | 148 + src/layout/navBars/breadcrumb/user.vue | 461 + src/layout/navBars/breadcrumb/userNews.vue | 288 + src/layout/navBars/index.vue | 44 + src/layout/navBars/tagsView/contextmenu.vue | 125 + src/layout/navBars/tagsView/tagsView.vue | 650 + src/layout/navMenu/horizontal.vue | 151 + src/layout/navMenu/subItem.vue | 50 + src/layout/navMenu/vertical.vue | 98 + src/layout/routerView/iframes.vue | 55 + src/layout/routerView/link.vue | 98 + src/layout/routerView/parent.vue | 59 + src/layout/upgrade/index.vue | 141 + src/libs/modal-attr.js | 42 + src/libs/modal-coupon.js | 45 + src/libs/modal-form.js | 88 + src/libs/modal-templates.js | 43 + src/libs/modal-upload.js | 41 + src/libs/modal.js | 287 + src/libs/notice.js | 114 + src/libs/public.js | 57 + src/libs/settingMer.js | 26 + src/libs/tools.js | 241 + src/main.js | 146 + src/permission.js | 112 + src/router/index.js | 188 + src/router/modules/accounts.js | 81 + src/router/modules/charts.js | 45 + src/router/modules/config.js | 80 + src/router/modules/delivery.js | 50 + src/router/modules/devise.js | 47 + src/router/modules/exportFile.js | 34 + src/router/modules/group.js | 58 + src/router/modules/marketing.js | 349 + src/router/modules/order.js | 59 + src/router/modules/product.js | 108 + src/router/modules/setting.js | 83 + src/router/modules/station.js | 34 + src/router/modules/systemForm.js | 106 + src/router/modules/user.js | 57 + src/settings.js | 46 + src/store/getters.js | 28 + src/store/index.js | 39 + src/store/modules/app.js | 65 + src/store/modules/errorLog.js | 37 + src/store/modules/layout.js | 114 + src/store/modules/menu.js | 292 + src/store/modules/mobildConfig.js | 284 + src/store/modules/permission.js | 77 + src/store/modules/settings.js | 55 + src/store/modules/tagsView.js | 169 + src/store/modules/themeConfig.js | 130 + src/store/modules/user.js | 206 + src/styles/app.scss | 262 + src/styles/btn.scss | 99 + src/styles/element-ui.scss | 380 + src/styles/element-variables.scss | 31 + src/styles/font/demo.css | 539 + src/styles/font/demo_index.html | 3459 ++ src/styles/font/iconfont.css | 589 + src/styles/font/iconfont.eot | Bin 0 -> 40148 bytes src/styles/font/iconfont.js | 1 + src/styles/font/iconfont.json | 1010 + src/styles/font/iconfont.svg | 455 + src/styles/font/iconfont.ttf | Bin 0 -> 39980 bytes src/styles/font/iconfont.woff | Bin 0 -> 24332 bytes src/styles/font/iconfont.woff2 | Bin 0 -> 20376 bytes src/styles/form.scss | 53 + src/styles/iconfont/demo.css | 539 + src/styles/iconfont/demo_index.html | 9825 +++++ src/styles/iconfont/iconfont.css | 1691 + src/styles/iconfont/iconfont.js | 1 + src/styles/iconfont/iconfont.json | 2942 ++ src/styles/iconfont/iconfont.ttf | Bin 0 -> 119248 bytes src/styles/iconfont/iconfont.woff | Bin 0 -> 69144 bytes src/styles/iconfont/iconfont.woff2 | Bin 0 -> 57432 bytes src/styles/iconfont2/demo.css | 539 + src/styles/iconfont2/demo_index.html | 13942 ++++++++ src/styles/iconfont2/iconfont.css | 2407 ++ src/styles/iconfont2/iconfont.js | 1 + src/styles/iconfont2/iconfont.json | 4195 +++ src/styles/iconfont2/iconfont.ttf | Bin 0 -> 175876 bytes src/styles/iconfont2/iconfont.woff | Bin 0 -> 105028 bytes src/styles/iconfont2/iconfont.woff2 | Bin 0 -> 86484 bytes src/styles/index.scss | 180 + src/styles/mixin.scss | 66 + src/styles/sidebar.scss | 240 + src/styles/styles.scss | 473 + src/styles/transition.scss | 48 + src/styles/variables.scss | 1146 + src/utils/address.js | 10 + src/utils/auth.js | 26 + src/utils/bus.js | 11 + src/utils/city.js | 5055 +++ src/utils/clipboard.js | 41 + src/utils/compressImg.js | 74 + src/utils/error-log.js | 44 + src/utils/get-page-title.js | 19 + src/utils/index.js | 406 + src/utils/newToExcel.js | 205 + src/utils/open-window.js | 34 + src/utils/permission.js | 34 + src/utils/request.js | 96 + src/utils/scroll-to.js | 67 + src/utils/storage.js | 57 + src/utils/system.js | 282 + src/utils/theme.js | 72 + src/utils/timeOptions.js | 70 + src/utils/toolsValidate.js | 296 + src/utils/util.js | 484 + src/utils/validate.js | 96 + src/utils/videoCloud.js | 315 + src/vendor/Blob.js | 188 + src/vendor/Export2Excel.js | 151 + src/views/accounts/capitalFlow/index.vue | 271 + src/views/accounts/payType.vue | 123 + src/views/accounts/reconciliation/index.vue | 355 + src/views/accounts/reconciliation/record.vue | 444 + src/views/accounts/statement/index.vue | 383 + src/views/accounts/statement/record.vue | 444 + src/views/accounts/transManage/index.vue | 397 + src/views/charts/keyboard.vue | 32 + src/views/charts/line.vue | 32 + src/views/charts/mix-chart.vue | 32 + .../cityDelivery/rechargeRecord/index.vue | 218 + .../cityDelivery/storeManage/addStore.vue | 269 + src/views/cityDelivery/storeManage/index.vue | 276 + src/views/cityDelivery/usageRecord/index.vue | 230 + src/views/clipboard/index.vue | 58 + .../dashboard/admin/components/BarChart.vue | 111 + .../dashboard/admin/components/BoxCard.vue | 124 + .../dashboard/admin/components/LineChart.vue | 260 + .../dashboard/admin/components/PanelGroup.vue | 399 + .../dashboard/admin/components/PieChart.vue | 138 + .../admin/components/RaddarChart.vue | 123 + .../admin/components/TodoList/Todo.vue | 90 + .../admin/components/TodoList/index.scss | 320 + .../admin/components/TodoList/index.vue | 136 + .../dashboard/admin/components/TodoPanel.vue | 404 + .../admin/components/mixins/resize.js | 64 + src/views/dashboard/admin/index.vue | 791 + src/views/dashboard/editor/index.vue | 83 + src/views/dashboard/index.vue | 38 + src/views/devise/index.vue | 1525 + src/views/devise/links.vue | 156 + src/views/devise/list.vue | 464 + src/views/error-page/401.vue | 109 + src/views/error-page/404.vue | 244 + src/views/exportFile/index.vue | 165 + src/views/icons/element-icons.js | 12 + src/views/icons/index.vue | 110 + src/views/icons/svg-icons.js | 19 + src/views/login/index.vue | 663 + .../assist/assist_activity/detail.vue | 142 + .../assist/assist_activity/index.vue | 204 + .../marketing/assist/assist_list/create.vue | 1203 + .../marketing/assist/assist_list/index.vue | 611 + src/views/marketing/assist/index.vue | 3 + .../broadcast/batchAdd/goodsList.vue | 157 + .../marketing/broadcast/batchAdd/index.vue | 158 + .../broadcast/broadcastList/addProduct.vue | 128 + .../broadcast/broadcastList/index.vue | 267 + .../broadcast/broadcastList/proDetail.vue | 150 + src/views/marketing/broadcast/index.vue | 3 + .../combination/combination_goods/create.vue | 1558 + .../combination/combination_goods/index.vue | 736 + src/views/marketing/combination/index.vue | 3 + .../combination/store_combination/detail.vue | 180 + .../combination/store_combination/index.vue | 292 + .../coupon/couponList/creatCoupon.vue | 129 + .../marketing/coupon/couponList/index.vue | 625 + .../marketing/coupon/couponSend/index.vue | 527 + .../marketing/coupon/couponUser/index.vue | 196 + src/views/marketing/coupon/index.vue | 3 + src/views/marketing/discounts/create.vue | 778 + .../discounts/formRule/discountsFrom.js | 43 + .../marketing/discounts/formRule/ruleShip.js | 36 + src/views/marketing/discounts/index.vue | 235 + src/views/marketing/integral/config/index.vue | 120 + src/views/marketing/integral/index.vue | 3 + src/views/marketing/integral/log/index.vue | 194 + src/views/marketing/preSale/create.vue | 1600 + src/views/marketing/preSale/index.vue | 773 + src/views/marketing/seckill/index.vue | 3 + .../seckill/seckillGoods/createGoods.vue | 1582 + .../seckill/seckillGoods/goodsList.vue | 199 + .../marketing/seckill/seckillGoods/index.vue | 789 + .../marketing/studio/assistant/index.vue | 149 + src/views/marketing/studio/index.vue | 3 + .../studio/studioList/creatStudio.vue | 130 + .../marketing/studio/studioList/index.vue | 323 + .../studio/studioList/selectedGoods.vue | 153 + .../studio/studioList/studioDetail.vue | 269 + src/views/notify/smsConfig/index.vue | 174 + src/views/notify/smsConfig/tableList.vue | 185 + src/views/notify/smsPay/index.vue | 257 + src/views/order/index.vue | 1352 + src/views/order/logistics.vue | 112 + src/views/order/orderCancellate.vue | 183 + src/views/order/orderCancellate/index.vue | 343 + src/views/order/orderDetails.vue | 856 + src/views/order/orderInvoice/index.vue | 476 + src/views/order/orderRefund.vue | 233 + src/views/order/orderRefund/index.vue | 670 + src/views/order/orderRefund/refundDetail.vue | 192 + src/views/product/Reviews/index.vue | 334 + src/views/product/addProduct/addCarMy.vue | 268 + src/views/product/addProduct/copyRecord.vue | 109 + src/views/product/addProduct/index.vue | 3400 ++ src/views/product/addProduct/taoBao.vue | 806 + src/views/product/productAttr/index.vue | 154 + src/views/product/productClassify/index.vue | 150 + src/views/product/productLabel/index.vue | 149 + src/views/product/productList/copyRecord.vue | 109 + src/views/product/productList/editAttr.vue | 576 + src/views/product/productList/index.vue | 1244 + src/views/product/productList/proDetails.vue | 844 + src/views/product/productList/taoBao.vue | 1191 + src/views/product/productUnit/index.vue | 142 + src/views/product/specs/create.vue | 159 + src/views/product/specs/list.vue | 205 + src/views/redirect/index.vue | 21 + src/views/setting/dumpConfig/index.vue | 181 + src/views/setting/openAuth/list.vue | 230 + src/views/setting/printer/index.vue | 164 + src/views/setting/systemAdmin/index.vue | 176 + src/views/setting/systemLog/index.vue | 164 + src/views/setting/systemRole/index.vue | 172 + src/views/setting/systemStore/index.vue | 351 + src/views/station/notice/index.vue | 226 + src/views/system/config/picture.vue | 35 + src/views/system/customer_keyword/index.vue | 379 + src/views/system/freight/express/index.vue | 116 + src/views/system/freight/index.vue | 3 + .../freight/shippingTemplates/index.vue | 208 + src/views/system/groupData/data.vue | 220 + src/views/system/groupData/list.vue | 129 + src/views/system/guarantee/index.vue | 213 + src/views/system/service/index.vue | 358 + src/views/system/topic/data.vue | 518 + src/views/systemForm/applyMents/index.vue | 1568 + src/views/systemForm/applyMents/list.vue | 307 + src/views/systemForm/form/create.vue | 1002 + src/views/systemForm/form/details.vue | 177 + src/views/systemForm/form/index.vue | 147 + src/views/systemForm/setSystem/index.vue | 125 + .../systemForm/setSystem/modifyStoreInfo.vue | 1222 + src/views/user/group/index.vue | 136 + src/views/user/label/index.vue | 304 + src/views/user/list/couponList.vue | 232 + src/views/user/list/index.vue | 591 + src/views/user/list/userDetails.vue | 266 + src/views/user/member/record.vue | 143 + src/views/user/search/index.vue | 188 + tests/unit/.eslintrc.js | 5 + tests/unit/components/Hamburger.spec.js | 27 + tests/unit/components/SvgIcon.spec.js | 31 + tests/unit/utils/formatTime.spec.js | 38 + tests/unit/utils/parseTime.spec.js | 41 + tests/unit/utils/validate.spec.js | 37 + vue.config.js | 129 + 862 files changed, 274623 insertions(+) create mode 100644 .editorconfig create mode 100644 .env.production create mode 100644 .env.staging create mode 100644 .eslintignore create mode 100644 .eslintrc.js create mode 100644 .gitignore create mode 100644 .travis.yml create mode 100644 LICENSE create mode 100644 README.es.md create mode 100644 README.ja.md create mode 100644 README.md create mode 100644 README.zh-CN.md create mode 100644 babel.config.js create mode 100644 build/index.js create mode 100644 jest.config.js create mode 100644 jsconfig.json create mode 100644 mock/article.js create mode 100644 mock/index.js create mode 100644 mock/mock-server.js create mode 100644 mock/remote-search.js create mode 100644 mock/role/index.js create mode 100644 mock/role/routes.js create mode 100644 mock/user.js create mode 100644 package.json create mode 100644 patches/element-ui+2.13.2.patch create mode 100644 plop-templates/component/index.hbs create mode 100644 plop-templates/component/prompt.js create mode 100644 plop-templates/store/index.hbs create mode 100644 plop-templates/store/prompt.js create mode 100644 plop-templates/utils.js create mode 100644 plop-templates/view/index.hbs create mode 100644 plop-templates/view/prompt.js create mode 100644 plopfile.js create mode 100644 postcss.config.js create mode 100644 public/UEditor/dialogs/anchor/anchor.html create mode 100644 public/UEditor/dialogs/attachment/attachment.css create mode 100644 public/UEditor/dialogs/attachment/attachment.html create mode 100644 public/UEditor/dialogs/attachment/attachment.js create mode 100644 public/UEditor/dialogs/attachment/fileTypeImages/icon_chm.gif create mode 100644 public/UEditor/dialogs/attachment/fileTypeImages/icon_default.png create mode 100644 public/UEditor/dialogs/attachment/fileTypeImages/icon_doc.gif create mode 100644 public/UEditor/dialogs/attachment/fileTypeImages/icon_exe.gif create mode 100644 public/UEditor/dialogs/attachment/fileTypeImages/icon_jpg.gif create mode 100644 public/UEditor/dialogs/attachment/fileTypeImages/icon_mp3.gif create mode 100644 public/UEditor/dialogs/attachment/fileTypeImages/icon_mv.gif create mode 100644 public/UEditor/dialogs/attachment/fileTypeImages/icon_pdf.gif create mode 100644 public/UEditor/dialogs/attachment/fileTypeImages/icon_ppt.gif create mode 100644 public/UEditor/dialogs/attachment/fileTypeImages/icon_psd.gif create mode 100644 public/UEditor/dialogs/attachment/fileTypeImages/icon_rar.gif create mode 100644 public/UEditor/dialogs/attachment/fileTypeImages/icon_txt.gif create mode 100644 public/UEditor/dialogs/attachment/fileTypeImages/icon_xls.gif create mode 100644 public/UEditor/dialogs/attachment/images/alignicon.gif create mode 100644 public/UEditor/dialogs/attachment/images/alignicon.png create mode 100644 public/UEditor/dialogs/attachment/images/bg.png create mode 100644 public/UEditor/dialogs/attachment/images/file-icons.gif create mode 100644 public/UEditor/dialogs/attachment/images/file-icons.png create mode 100644 public/UEditor/dialogs/attachment/images/icons.gif create mode 100644 public/UEditor/dialogs/attachment/images/icons.png create mode 100644 public/UEditor/dialogs/attachment/images/image.png create mode 100644 public/UEditor/dialogs/attachment/images/progress.png create mode 100644 public/UEditor/dialogs/attachment/images/success.gif create mode 100644 public/UEditor/dialogs/attachment/images/success.png create mode 100644 public/UEditor/dialogs/background/background.css create mode 100644 public/UEditor/dialogs/background/background.html create mode 100644 public/UEditor/dialogs/background/background.js create mode 100644 public/UEditor/dialogs/background/images/bg.png create mode 100644 public/UEditor/dialogs/background/images/success.png create mode 100644 public/UEditor/dialogs/charts/chart.config.js create mode 100644 public/UEditor/dialogs/charts/charts.css create mode 100644 public/UEditor/dialogs/charts/charts.html create mode 100644 public/UEditor/dialogs/charts/charts.js create mode 100644 public/UEditor/dialogs/charts/images/charts0.png create mode 100644 public/UEditor/dialogs/charts/images/charts1.png create mode 100644 public/UEditor/dialogs/charts/images/charts2.png create mode 100644 public/UEditor/dialogs/charts/images/charts3.png create mode 100644 public/UEditor/dialogs/charts/images/charts4.png create mode 100644 public/UEditor/dialogs/charts/images/charts5.png create mode 100644 public/UEditor/dialogs/emotion/emotion.css create mode 100644 public/UEditor/dialogs/emotion/emotion.html create mode 100644 public/UEditor/dialogs/emotion/emotion.js create mode 100644 public/UEditor/dialogs/emotion/images/0.gif create mode 100644 public/UEditor/dialogs/emotion/images/bface.gif create mode 100644 public/UEditor/dialogs/emotion/images/cface.gif create mode 100644 public/UEditor/dialogs/emotion/images/fface.gif create mode 100644 public/UEditor/dialogs/emotion/images/jxface2.gif create mode 100644 public/UEditor/dialogs/emotion/images/neweditor-tab-bg.png create mode 100644 public/UEditor/dialogs/emotion/images/tface.gif create mode 100644 public/UEditor/dialogs/emotion/images/wface.gif create mode 100644 public/UEditor/dialogs/emotion/images/yface.gif create mode 100644 public/UEditor/dialogs/gmap/gmap.html create mode 100644 public/UEditor/dialogs/help/help.css create mode 100644 public/UEditor/dialogs/help/help.html create mode 100644 public/UEditor/dialogs/help/help.js create mode 100644 public/UEditor/dialogs/image/image.css create mode 100644 public/UEditor/dialogs/image/image.html create mode 100644 public/UEditor/dialogs/image/image.js create mode 100644 public/UEditor/dialogs/image/images/alignicon.jpg create mode 100644 public/UEditor/dialogs/image/images/bg.png create mode 100644 public/UEditor/dialogs/image/images/icons.gif create mode 100644 public/UEditor/dialogs/image/images/icons.png create mode 100644 public/UEditor/dialogs/image/images/image.png create mode 100644 public/UEditor/dialogs/image/images/progress.png create mode 100644 public/UEditor/dialogs/image/images/success.gif create mode 100644 public/UEditor/dialogs/image/images/success.png create mode 100644 public/UEditor/dialogs/insertframe/insertframe.html create mode 100644 public/UEditor/dialogs/internal.js create mode 100644 public/UEditor/dialogs/link/link.html create mode 100644 public/UEditor/dialogs/map/map.html create mode 100644 public/UEditor/dialogs/map/show.html create mode 100644 public/UEditor/dialogs/music/music.css create mode 100644 public/UEditor/dialogs/music/music.html create mode 100644 public/UEditor/dialogs/music/music.js create mode 100644 public/UEditor/dialogs/preview/preview.html create mode 100644 public/UEditor/dialogs/scrawl/images/addimg.png create mode 100644 public/UEditor/dialogs/scrawl/images/brush.png create mode 100644 public/UEditor/dialogs/scrawl/images/delimg.png create mode 100644 public/UEditor/dialogs/scrawl/images/delimgH.png create mode 100644 public/UEditor/dialogs/scrawl/images/empty.png create mode 100644 public/UEditor/dialogs/scrawl/images/emptyH.png create mode 100644 public/UEditor/dialogs/scrawl/images/eraser.png create mode 100644 public/UEditor/dialogs/scrawl/images/redo.png create mode 100644 public/UEditor/dialogs/scrawl/images/redoH.png create mode 100644 public/UEditor/dialogs/scrawl/images/scale.png create mode 100644 public/UEditor/dialogs/scrawl/images/scaleH.png create mode 100644 public/UEditor/dialogs/scrawl/images/size.png create mode 100644 public/UEditor/dialogs/scrawl/images/undo.png create mode 100644 public/UEditor/dialogs/scrawl/images/undoH.png create mode 100644 public/UEditor/dialogs/scrawl/scrawl.css create mode 100644 public/UEditor/dialogs/scrawl/scrawl.html create mode 100644 public/UEditor/dialogs/scrawl/scrawl.js create mode 100644 public/UEditor/dialogs/searchreplace/searchreplace.html create mode 100644 public/UEditor/dialogs/searchreplace/searchreplace.js create mode 100644 public/UEditor/dialogs/snapscreen/snapscreen.html create mode 100644 public/UEditor/dialogs/spechars/spechars.html create mode 100644 public/UEditor/dialogs/spechars/spechars.js create mode 100644 public/UEditor/dialogs/table/dragicon.png create mode 100644 public/UEditor/dialogs/table/edittable.css create mode 100644 public/UEditor/dialogs/table/edittable.html create mode 100644 public/UEditor/dialogs/table/edittable.js create mode 100644 public/UEditor/dialogs/table/edittd.html create mode 100644 public/UEditor/dialogs/table/edittip.html create mode 100644 public/UEditor/dialogs/template/config.js create mode 100644 public/UEditor/dialogs/template/images/bg.gif create mode 100644 public/UEditor/dialogs/template/images/pre0.png create mode 100644 public/UEditor/dialogs/template/images/pre1.png create mode 100644 public/UEditor/dialogs/template/images/pre2.png create mode 100644 public/UEditor/dialogs/template/images/pre3.png create mode 100644 public/UEditor/dialogs/template/images/pre4.png create mode 100644 public/UEditor/dialogs/template/template.css create mode 100644 public/UEditor/dialogs/template/template.html create mode 100644 public/UEditor/dialogs/template/template.js create mode 100644 public/UEditor/dialogs/video/images/bg.png create mode 100644 public/UEditor/dialogs/video/images/center_focus.jpg create mode 100644 public/UEditor/dialogs/video/images/file-icons.gif create mode 100644 public/UEditor/dialogs/video/images/file-icons.png create mode 100644 public/UEditor/dialogs/video/images/icons.gif create mode 100644 public/UEditor/dialogs/video/images/icons.png create mode 100644 public/UEditor/dialogs/video/images/image.png create mode 100644 public/UEditor/dialogs/video/images/left_focus.jpg create mode 100644 public/UEditor/dialogs/video/images/none_focus.jpg create mode 100644 public/UEditor/dialogs/video/images/progress.png create mode 100644 public/UEditor/dialogs/video/images/right_focus.jpg create mode 100644 public/UEditor/dialogs/video/images/success.gif create mode 100644 public/UEditor/dialogs/video/images/success.png create mode 100644 public/UEditor/dialogs/video/video.css create mode 100644 public/UEditor/dialogs/video/video.html create mode 100644 public/UEditor/dialogs/video/video.js create mode 100644 public/UEditor/dialogs/webapp/webapp.html create mode 100644 public/UEditor/dialogs/wordimage/tangram.js create mode 100644 public/UEditor/dialogs/wordimage/wordimage.html create mode 100644 public/UEditor/dialogs/wordimage/wordimage.js create mode 100644 public/UEditor/index.html create mode 100644 public/UEditor/lang/en/en.js create mode 100644 public/UEditor/lang/en/images/addimage.png create mode 100644 public/UEditor/lang/en/images/alldeletebtnhoverskin.png create mode 100644 public/UEditor/lang/en/images/alldeletebtnupskin.png create mode 100644 public/UEditor/lang/en/images/background.png create mode 100644 public/UEditor/lang/en/images/button.png create mode 100644 public/UEditor/lang/en/images/copy.png create mode 100644 public/UEditor/lang/en/images/deletedisable.png create mode 100644 public/UEditor/lang/en/images/deleteenable.png create mode 100644 public/UEditor/lang/en/images/listbackground.png create mode 100644 public/UEditor/lang/en/images/localimage.png create mode 100644 public/UEditor/lang/en/images/music.png create mode 100644 public/UEditor/lang/en/images/rotateleftdisable.png create mode 100644 public/UEditor/lang/en/images/rotateleftenable.png create mode 100644 public/UEditor/lang/en/images/rotaterightdisable.png create mode 100644 public/UEditor/lang/en/images/rotaterightenable.png create mode 100644 public/UEditor/lang/en/images/upload.png create mode 100644 public/UEditor/lang/zh-cn/images/copy.png create mode 100644 public/UEditor/lang/zh-cn/images/localimage.png create mode 100644 public/UEditor/lang/zh-cn/images/music.png create mode 100644 public/UEditor/lang/zh-cn/images/upload.png create mode 100644 public/UEditor/lang/zh-cn/zh-cn.js create mode 100644 public/UEditor/themes/default/css/ueditor.css create mode 100644 public/UEditor/themes/default/css/ueditor.min.css create mode 100644 public/UEditor/themes/default/dialogbase.css create mode 100644 public/UEditor/themes/default/images/anchor.gif create mode 100644 public/UEditor/themes/default/images/arrow.png create mode 100644 public/UEditor/themes/default/images/arrow_down.png create mode 100644 public/UEditor/themes/default/images/arrow_up.png create mode 100644 public/UEditor/themes/default/images/button-bg.gif create mode 100644 public/UEditor/themes/default/images/cancelbutton.gif create mode 100644 public/UEditor/themes/default/images/charts.png create mode 100644 public/UEditor/themes/default/images/cursor_h.gif create mode 100644 public/UEditor/themes/default/images/cursor_h.png create mode 100644 public/UEditor/themes/default/images/cursor_v.gif create mode 100644 public/UEditor/themes/default/images/cursor_v.png create mode 100644 public/UEditor/themes/default/images/dialog-title-bg.png create mode 100644 public/UEditor/themes/default/images/filescan.png create mode 100644 public/UEditor/themes/default/images/highlighted.gif create mode 100644 public/UEditor/themes/default/images/icons-all.gif create mode 100644 public/UEditor/themes/default/images/icons.gif create mode 100644 public/UEditor/themes/default/images/icons.png create mode 100644 public/UEditor/themes/default/images/iphone-bg.png create mode 100644 public/UEditor/themes/default/images/loaderror.png create mode 100644 public/UEditor/themes/default/images/loading.gif create mode 100644 public/UEditor/themes/default/images/lock.gif create mode 100644 public/UEditor/themes/default/images/neweditor-tab-bg.png create mode 100644 public/UEditor/themes/default/images/pagebreak.gif create mode 100644 public/UEditor/themes/default/images/previewMobile.png create mode 100644 public/UEditor/themes/default/images/scale.png create mode 100644 public/UEditor/themes/default/images/sortable.png create mode 100644 public/UEditor/themes/default/images/spacer.gif create mode 100644 public/UEditor/themes/default/images/sparator_v.png create mode 100644 public/UEditor/themes/default/images/table-cell-align.png create mode 100644 public/UEditor/themes/default/images/tangram-colorpicker.png create mode 100644 public/UEditor/themes/default/images/toolbar_bg.png create mode 100644 public/UEditor/themes/default/images/unhighlighted.gif create mode 100644 public/UEditor/themes/default/images/upload.png create mode 100644 public/UEditor/themes/default/images/videologo.gif create mode 100644 public/UEditor/themes/default/images/word.gif create mode 100644 public/UEditor/themes/default/images/wordpaste.png create mode 100644 public/UEditor/themes/iframe.css create mode 100644 public/UEditor/third-party/SyntaxHighlighter/shCore.js create mode 100644 public/UEditor/third-party/SyntaxHighlighter/shCoreDefault.css create mode 100644 public/UEditor/third-party/codemirror/codemirror.css create mode 100644 public/UEditor/third-party/codemirror/codemirror.js create mode 100644 public/UEditor/third-party/highcharts/adapters/mootools-adapter.js create mode 100644 public/UEditor/third-party/highcharts/adapters/mootools-adapter.src.js create mode 100644 public/UEditor/third-party/highcharts/adapters/prototype-adapter.js create mode 100644 public/UEditor/third-party/highcharts/adapters/prototype-adapter.src.js create mode 100644 public/UEditor/third-party/highcharts/adapters/standalone-framework.js create mode 100644 public/UEditor/third-party/highcharts/adapters/standalone-framework.src.js create mode 100644 public/UEditor/third-party/highcharts/highcharts-more.js create mode 100644 public/UEditor/third-party/highcharts/highcharts-more.src.js create mode 100644 public/UEditor/third-party/highcharts/highcharts.js create mode 100644 public/UEditor/third-party/highcharts/highcharts.src.js create mode 100644 public/UEditor/third-party/highcharts/modules/annotations.js create mode 100644 public/UEditor/third-party/highcharts/modules/annotations.src.js create mode 100644 public/UEditor/third-party/highcharts/modules/canvas-tools.js create mode 100644 public/UEditor/third-party/highcharts/modules/canvas-tools.src.js create mode 100644 public/UEditor/third-party/highcharts/modules/data.js create mode 100644 public/UEditor/third-party/highcharts/modules/data.src.js create mode 100644 public/UEditor/third-party/highcharts/modules/drilldown.js create mode 100644 public/UEditor/third-party/highcharts/modules/drilldown.src.js create mode 100644 public/UEditor/third-party/highcharts/modules/exporting.js create mode 100644 public/UEditor/third-party/highcharts/modules/exporting.src.js create mode 100644 public/UEditor/third-party/highcharts/modules/funnel.js create mode 100644 public/UEditor/third-party/highcharts/modules/funnel.src.js create mode 100644 public/UEditor/third-party/highcharts/modules/heatmap.js create mode 100644 public/UEditor/third-party/highcharts/modules/heatmap.src.js create mode 100644 public/UEditor/third-party/highcharts/modules/map.js create mode 100644 public/UEditor/third-party/highcharts/modules/map.src.js create mode 100644 public/UEditor/third-party/highcharts/modules/no-data-to-display.js create mode 100644 public/UEditor/third-party/highcharts/modules/no-data-to-display.src.js create mode 100644 public/UEditor/third-party/highcharts/themes/dark-blue.js create mode 100644 public/UEditor/third-party/highcharts/themes/dark-green.js create mode 100644 public/UEditor/third-party/highcharts/themes/gray.js create mode 100644 public/UEditor/third-party/highcharts/themes/grid.js create mode 100644 public/UEditor/third-party/highcharts/themes/skies.js create mode 100644 public/UEditor/third-party/jquery-1.10.2.js create mode 100644 public/UEditor/third-party/jquery-1.10.2.min.js create mode 100644 public/UEditor/third-party/jquery-1.10.2.min.map create mode 100644 public/UEditor/third-party/snapscreen/UEditorSnapscreen.exe create mode 100644 public/UEditor/third-party/video-js/font/vjs.eot create mode 100644 public/UEditor/third-party/video-js/font/vjs.svg create mode 100644 public/UEditor/third-party/video-js/font/vjs.ttf create mode 100644 public/UEditor/third-party/video-js/font/vjs.woff create mode 100644 public/UEditor/third-party/video-js/video-js.css create mode 100644 public/UEditor/third-party/video-js/video-js.min.css create mode 100644 public/UEditor/third-party/video-js/video.dev.js create mode 100644 public/UEditor/third-party/video-js/video.js create mode 100644 public/UEditor/third-party/webuploader/webuploader.css create mode 100644 public/UEditor/third-party/webuploader/webuploader.custom.js create mode 100644 public/UEditor/third-party/webuploader/webuploader.custom.min.js create mode 100644 public/UEditor/third-party/webuploader/webuploader.flashonly.js create mode 100644 public/UEditor/third-party/webuploader/webuploader.flashonly.min.js create mode 100644 public/UEditor/third-party/webuploader/webuploader.html5only.js create mode 100644 public/UEditor/third-party/webuploader/webuploader.html5only.min.js create mode 100644 public/UEditor/third-party/webuploader/webuploader.js create mode 100644 public/UEditor/third-party/webuploader/webuploader.min.js create mode 100644 public/UEditor/third-party/webuploader/webuploader.withoutimage.js create mode 100644 public/UEditor/third-party/webuploader/webuploader.withoutimage.min.js create mode 100644 public/UEditor/third-party/xss.min.js create mode 100644 public/UEditor/third-party/zeroclipboard/ZeroClipboard.js create mode 100644 public/UEditor/third-party/zeroclipboard/ZeroClipboard.min.js create mode 100644 public/UEditor/ueditor.all.js create mode 100644 public/UEditor/ueditor.all.min.js create mode 100644 public/UEditor/ueditor.config.js create mode 100644 public/UEditor/ueditor.parse.js create mode 100644 public/UEditor/ueditor.parse.min.js create mode 100644 public/favicon.ico create mode 100644 public/index.html create mode 100644 src/App.vue create mode 100644 src/api/accounts.js create mode 100644 src/api/app.js create mode 100644 src/api/dashboard.js create mode 100644 src/api/diy.js create mode 100644 src/api/freight.js create mode 100644 src/api/marketing.js create mode 100644 src/api/order.js create mode 100644 src/api/product.js create mode 100644 src/api/request.js create mode 100644 src/api/setting.js create mode 100644 src/api/system.js create mode 100644 src/api/systemForm.js create mode 100644 src/api/user.js create mode 100644 src/assets/401_images/401.gif create mode 100644 src/assets/404_images/404.png create mode 100644 src/assets/404_images/404_cloud.png create mode 100644 src/assets/custom-theme/fonts/element-icons.ttf create mode 100644 src/assets/custom-theme/fonts/element-icons.woff create mode 100644 src/assets/custom-theme/index.css create mode 100644 src/assets/images/assist_title.png create mode 100644 src/assets/images/bg.jpg create mode 100644 src/assets/images/bjt.png create mode 100644 src/assets/images/broadcast_title.png create mode 100644 src/assets/images/c_presell_bg0.png create mode 100644 src/assets/images/c_presell_bg1.png create mode 100644 src/assets/images/c_presell_bg2.png create mode 100644 src/assets/images/coupon-bg.png create mode 100644 src/assets/images/default.jpg create mode 100644 src/assets/images/electric.png create mode 100644 src/assets/images/expressi.jpg create mode 100644 src/assets/images/f copy.png create mode 100644 src/assets/images/f.png create mode 100644 src/assets/images/foot-001.png create mode 100644 src/assets/images/foot-0010.png create mode 100644 src/assets/images/foot-002.png create mode 100644 src/assets/images/foot-003.png create mode 100644 src/assets/images/foot-004.png create mode 100644 src/assets/images/foot-005.png create mode 100644 src/assets/images/foot-006.png create mode 100644 src/assets/images/foot-007.png create mode 100644 src/assets/images/foot-008.png create mode 100644 src/assets/images/foot-009.png create mode 100644 src/assets/images/formImg.png create mode 100644 src/assets/images/gg.jpg create mode 100644 src/assets/images/group_title.png create mode 100644 src/assets/images/laber.png create mode 100644 src/assets/images/margin01.png create mode 100644 src/assets/images/margin02.png create mode 100644 src/assets/images/margin03.png create mode 100644 src/assets/images/member.png create mode 100644 src/assets/images/member01.png create mode 100644 src/assets/images/mer_avatar.png create mode 100644 src/assets/images/mer_banner.jpg create mode 100644 src/assets/images/mobilefoot.png create mode 100644 src/assets/images/mobilehead.png create mode 100644 src/assets/images/moren copy.jpg create mode 100644 src/assets/images/moren.jpg create mode 100644 src/assets/images/news.png create mode 100644 src/assets/images/no copy.png create mode 100644 src/assets/images/no-message.png create mode 100644 src/assets/images/no-msg.png create mode 100644 src/assets/images/no.png create mode 100644 src/assets/images/order_icon.png create mode 100644 src/assets/images/plant_bg.png create mode 100644 src/assets/images/plant_title.png create mode 100644 src/assets/images/presell_bg.png create mode 100644 src/assets/images/presell_title.png create mode 100644 src/assets/images/product_icon.png create mode 100644 src/assets/images/ren.png create mode 100644 src/assets/images/ren1.png create mode 100644 src/assets/images/ren2.png create mode 100644 src/assets/images/right.png create mode 100644 src/assets/images/sort01.jpg create mode 100644 src/assets/images/sort02.jpg create mode 100644 src/assets/images/sort03.jpg create mode 100644 src/assets/images/spike_title.png create mode 100644 src/assets/images/split_guide.png create mode 100644 src/assets/images/star.png create mode 100644 src/assets/images/star_active.png create mode 100644 src/assets/images/svip.png create mode 100644 src/assets/images/topic_title.png create mode 100644 src/assets/images/uploadImg.png create mode 100644 src/assets/images/user01.png create mode 100644 src/assets/images/user_vip.png create mode 100644 src/assets/images/wutu.png create mode 100644 src/assets/js/canvas-nest.min.js create mode 100644 src/assets/js/jigsaw.css create mode 100644 src/assets/js/jigsaw.js create mode 100644 src/assets/video/newOrderAudioLink.mp3 create mode 100644 src/assets/video/notice.mp3 create mode 100644 src/assets/video/notice.wav create mode 100644 src/components/Charts/Keyboard.vue create mode 100644 src/components/Charts/LineMarker.vue create mode 100644 src/components/Charts/MixChart.vue create mode 100644 src/components/Charts/mixins/resize.js create mode 100644 src/components/SvgIcon/index.vue create mode 100644 src/components/ThemePicker/index.vue create mode 100644 src/components/TopNav/index.vue create mode 100644 src/components/UploadExcel/index.vue create mode 100644 src/components/attrFrom/index.vue create mode 100644 src/components/attrList/index.vue create mode 100644 src/components/breadCrumb/index.vue create mode 100644 src/components/cards/index.vue create mode 100644 src/components/copyright/index.vue create mode 100644 src/components/couponList/index.vue create mode 100644 src/components/deliveryRecord/index.vue create mode 100644 src/components/exportFile/fileList.vue create mode 100644 src/components/exportFile/index.vue create mode 100644 src/components/from/from.vue create mode 100644 src/components/goodList/index.vue create mode 100644 src/components/goodsList/index.vue create mode 100644 src/components/guidancePop/index.vue create mode 100644 src/components/hamBurger/index.vue create mode 100644 src/components/headerNotice/index.vue create mode 100644 src/components/headerSearch/index.vue create mode 100644 src/components/iconFrom/element-icons.js create mode 100644 src/components/iconFrom/index.vue create mode 100644 src/components/importGoods/goodList.vue create mode 100644 src/components/importGoods/index.vue create mode 100644 src/components/lazyCascader/index.vue create mode 100644 src/components/linkaddress/index.vue create mode 100644 src/components/map/index.js create mode 100644 src/components/map/map.vue create mode 100644 src/components/mobileConfig/c_auxiliary_box.vue create mode 100644 src/components/mobileConfig/c_auxiliary_line.vue create mode 100644 src/components/mobileConfig/c_banner.vue create mode 100644 src/components/mobileConfig/c_home_bargain.vue create mode 100644 src/components/mobileConfig/c_home_coupon.vue create mode 100644 src/components/mobileConfig/c_home_goods_list.vue create mode 100644 src/components/mobileConfig/c_home_hot.vue create mode 100644 src/components/mobileConfig/c_home_menu.vue create mode 100644 src/components/mobileConfig/c_home_pink.vue create mode 100644 src/components/mobileConfig/c_home_presell.vue create mode 100644 src/components/mobileConfig/c_home_seckill.vue create mode 100644 src/components/mobileConfig/c_home_title.vue create mode 100644 src/components/mobileConfig/c_home_topic.vue create mode 100644 src/components/mobileConfig/c_picture_cube.vue create mode 100644 src/components/mobileConfig/c_ueditor_box.vue create mode 100644 src/components/mobileConfig/c_wechat_live.vue create mode 100644 src/components/mobileConfig/index.js create mode 100644 src/components/mobileConfig/pageFoot.vue create mode 100644 src/components/mobileConfig/pageTitle.vue create mode 100644 src/components/mobileConfigRight/c_bg_color.vue create mode 100644 src/components/mobileConfigRight/c_cascader.vue create mode 100644 src/components/mobileConfigRight/c_comb_data.vue create mode 100644 src/components/mobileConfigRight/c_custom_menu_list.vue create mode 100644 src/components/mobileConfigRight/c_foot.vue create mode 100644 src/components/mobileConfigRight/c_goods.vue create mode 100644 src/components/mobileConfigRight/c_hot_box.vue create mode 100644 src/components/mobileConfigRight/c_hot_imgs.vue create mode 100644 src/components/mobileConfigRight/c_hot_word.vue create mode 100644 src/components/mobileConfigRight/c_input_item.vue create mode 100644 src/components/mobileConfigRight/c_input_number.vue create mode 100644 src/components/mobileConfigRight/c_is_show.vue create mode 100644 src/components/mobileConfigRight/c_menu_list.vue create mode 100644 src/components/mobileConfigRight/c_page_ueditor.vue create mode 100644 src/components/mobileConfigRight/c_pictrue.vue create mode 100644 src/components/mobileConfigRight/c_product.vue create mode 100644 src/components/mobileConfigRight/c_radio.vue create mode 100644 src/components/mobileConfigRight/c_select.vue create mode 100644 src/components/mobileConfigRight/c_select_item.vue create mode 100644 src/components/mobileConfigRight/c_set_up.vue create mode 100644 src/components/mobileConfigRight/c_slider.vue create mode 100644 src/components/mobileConfigRight/c_status.vue create mode 100644 src/components/mobileConfigRight/c_tab.vue create mode 100644 src/components/mobileConfigRight/c_txt_tab.vue create mode 100644 src/components/mobileConfigRight/c_upload_img.vue create mode 100644 src/components/mobileConfigRight/index.js create mode 100644 src/components/mobileFormConfig/c_home_checkbox.vue create mode 100644 src/components/mobileFormConfig/c_home_city.vue create mode 100644 src/components/mobileFormConfig/c_home_date.vue create mode 100644 src/components/mobileFormConfig/c_home_daterange.vue create mode 100644 src/components/mobileFormConfig/c_home_radio.vue create mode 100644 src/components/mobileFormConfig/c_home_select.vue create mode 100644 src/components/mobileFormConfig/c_home_text.vue create mode 100644 src/components/mobileFormConfig/c_home_time.vue create mode 100644 src/components/mobileFormConfig/c_home_timerange.vue create mode 100644 src/components/mobileFormConfig/c_upload_picture.vue create mode 100644 src/components/mobileFormConfig/index.js create mode 100644 src/components/mobileFormPage/home_checkbox.vue create mode 100644 src/components/mobileFormPage/home_city.vue create mode 100644 src/components/mobileFormPage/home_date.vue create mode 100644 src/components/mobileFormPage/home_daterange.vue create mode 100644 src/components/mobileFormPage/home_radio.vue create mode 100644 src/components/mobileFormPage/home_select.vue create mode 100644 src/components/mobileFormPage/home_text.vue create mode 100644 src/components/mobileFormPage/home_time.vue create mode 100644 src/components/mobileFormPage/home_timerange.vue create mode 100644 src/components/mobileFormPage/home_upload_picture.vue create mode 100644 src/components/mobileFormPage/index.js create mode 100644 src/components/mobilePage/banner.vue create mode 100644 src/components/mobilePage/home_bargain.vue create mode 100644 src/components/mobilePage/home_coupon.vue create mode 100644 src/components/mobilePage/home_goods_list.vue create mode 100644 src/components/mobilePage/home_hot.vue create mode 100644 src/components/mobilePage/home_menu.vue create mode 100644 src/components/mobilePage/home_pink.vue create mode 100644 src/components/mobilePage/home_presell.vue create mode 100644 src/components/mobilePage/home_seckill.vue create mode 100644 src/components/mobilePage/home_title.vue create mode 100644 src/components/mobilePage/home_topic.vue create mode 100644 src/components/mobilePage/index.js create mode 100644 src/components/mobilePage/picture_cube.vue create mode 100644 src/components/mobilePage/wechat_live.vue create mode 100644 src/components/mobilePage/z_auxiliary_box.vue create mode 100644 src/components/mobilePage/z_auxiliary_line.vue create mode 100644 src/components/mobilePage/z_ueditor.vue create mode 100644 src/components/pagesFoot/index.vue create mode 100644 src/components/previewBox/index.vue create mode 100644 src/components/rightBtn/index.vue create mode 100644 src/components/rightPanel/index.vue create mode 100644 src/components/screenFull/index.vue create mode 100644 src/components/serviceGuarantee/index.vue create mode 100644 src/components/templatesFrom/index.vue create mode 100644 src/components/ueditorFrom/index.vue create mode 100644 src/components/uploadImg/index.vue create mode 100644 src/components/uploadPicture/index.vue create mode 100644 src/components/uploadPicture/uploadFrom/index.js create mode 100644 src/components/uploadPicture/uploadFrom/index.vue create mode 100644 src/components/uploadVideo/index.vue create mode 100644 src/components/userList/index.vue create mode 100644 src/components/verifition/Verify.vue create mode 100644 src/components/verifition/Verify/VerifyPoints.vue create mode 100644 src/components/verifition/Verify/VerifySlide.vue create mode 100644 src/components/verifition/utils/ase.js create mode 100644 src/components/verifition/utils/util.js create mode 100644 src/components/wangEditor/editor.js create mode 100644 src/components/wangEditor/html.js create mode 100644 src/components/wangEditor/index.vue create mode 100644 src/components/wangEditor/monaco.vue create mode 100644 src/filters/commFilter.js create mode 100644 src/filters/index.js create mode 100644 src/icons/index.js create mode 100644 src/icons/svg/404.svg create mode 100644 src/icons/svg/bug.svg create mode 100644 src/icons/svg/chart.svg create mode 100644 src/icons/svg/clipboard.svg create mode 100644 src/icons/svg/component.svg create mode 100644 src/icons/svg/dashboard.svg create mode 100644 src/icons/svg/documentation.svg create mode 100644 src/icons/svg/drag.svg create mode 100644 src/icons/svg/edit.svg create mode 100644 src/icons/svg/education.svg create mode 100644 src/icons/svg/email.svg create mode 100644 src/icons/svg/example.svg create mode 100644 src/icons/svg/excel.svg create mode 100644 src/icons/svg/exit-fullscreen.svg create mode 100644 src/icons/svg/eye-open.svg create mode 100644 src/icons/svg/eye.svg create mode 100644 src/icons/svg/form.svg create mode 100644 src/icons/svg/fullscreen.svg create mode 100644 src/icons/svg/guide.svg create mode 100644 src/icons/svg/icon.svg create mode 100644 src/icons/svg/international.svg create mode 100644 src/icons/svg/language.svg create mode 100644 src/icons/svg/link.svg create mode 100644 src/icons/svg/list.svg create mode 100644 src/icons/svg/lock.svg create mode 100644 src/icons/svg/message.svg create mode 100644 src/icons/svg/money.svg create mode 100644 src/icons/svg/nested.svg create mode 100644 src/icons/svg/password.svg create mode 100644 src/icons/svg/pdf.svg create mode 100644 src/icons/svg/people.svg create mode 100644 src/icons/svg/peoples.svg create mode 100644 src/icons/svg/qq.svg create mode 100644 src/icons/svg/search.svg create mode 100644 src/icons/svg/shopping.svg create mode 100644 src/icons/svg/size.svg create mode 100644 src/icons/svg/skill.svg create mode 100644 src/icons/svg/star.svg create mode 100644 src/icons/svg/tab.svg create mode 100644 src/icons/svg/table.svg create mode 100644 src/icons/svg/theme.svg create mode 100644 src/icons/svg/tree-table.svg create mode 100644 src/icons/svg/tree.svg create mode 100644 src/icons/svg/user.svg create mode 100644 src/icons/svg/wechat.svg create mode 100644 src/icons/svg/zip.svg create mode 100644 src/icons/svgo.yml create mode 100644 src/layout/component/aside.vue create mode 100644 src/layout/component/columnsAside.vue create mode 100644 src/layout/component/header.vue create mode 100644 src/layout/component/main.vue create mode 100644 src/layout/component/transverseAside.vue create mode 100644 src/layout/footer/index.vue create mode 100644 src/layout/index.vue create mode 100644 src/layout/logo/index.vue create mode 100644 src/layout/main/classic.vue create mode 100644 src/layout/main/columns.vue create mode 100644 src/layout/main/defaults.vue create mode 100644 src/layout/main/transverse.vue create mode 100644 src/layout/navBars/breadcrumb/breadcrumb.vue create mode 100644 src/layout/navBars/breadcrumb/index.vue create mode 100644 src/layout/navBars/breadcrumb/search.vue create mode 100644 src/layout/navBars/breadcrumb/setings.vue create mode 100644 src/layout/navBars/breadcrumb/theme.js create mode 100644 src/layout/navBars/breadcrumb/user.vue create mode 100644 src/layout/navBars/breadcrumb/userNews.vue create mode 100644 src/layout/navBars/index.vue create mode 100644 src/layout/navBars/tagsView/contextmenu.vue create mode 100644 src/layout/navBars/tagsView/tagsView.vue create mode 100644 src/layout/navMenu/horizontal.vue create mode 100644 src/layout/navMenu/subItem.vue create mode 100644 src/layout/navMenu/vertical.vue create mode 100644 src/layout/routerView/iframes.vue create mode 100644 src/layout/routerView/link.vue create mode 100644 src/layout/routerView/parent.vue create mode 100644 src/layout/upgrade/index.vue create mode 100644 src/libs/modal-attr.js create mode 100644 src/libs/modal-coupon.js create mode 100644 src/libs/modal-form.js create mode 100644 src/libs/modal-templates.js create mode 100644 src/libs/modal-upload.js create mode 100644 src/libs/modal.js create mode 100644 src/libs/notice.js create mode 100644 src/libs/public.js create mode 100644 src/libs/settingMer.js create mode 100644 src/libs/tools.js create mode 100644 src/main.js create mode 100644 src/permission.js create mode 100644 src/router/index.js create mode 100644 src/router/modules/accounts.js create mode 100644 src/router/modules/charts.js create mode 100644 src/router/modules/config.js create mode 100644 src/router/modules/delivery.js create mode 100644 src/router/modules/devise.js create mode 100644 src/router/modules/exportFile.js create mode 100644 src/router/modules/group.js create mode 100644 src/router/modules/marketing.js create mode 100644 src/router/modules/order.js create mode 100644 src/router/modules/product.js create mode 100644 src/router/modules/setting.js create mode 100644 src/router/modules/station.js create mode 100644 src/router/modules/systemForm.js create mode 100644 src/router/modules/user.js create mode 100644 src/settings.js create mode 100644 src/store/getters.js create mode 100644 src/store/index.js create mode 100644 src/store/modules/app.js create mode 100644 src/store/modules/errorLog.js create mode 100644 src/store/modules/layout.js create mode 100644 src/store/modules/menu.js create mode 100644 src/store/modules/mobildConfig.js create mode 100644 src/store/modules/permission.js create mode 100644 src/store/modules/settings.js create mode 100644 src/store/modules/tagsView.js create mode 100644 src/store/modules/themeConfig.js create mode 100644 src/store/modules/user.js create mode 100644 src/styles/app.scss create mode 100644 src/styles/btn.scss create mode 100644 src/styles/element-ui.scss create mode 100644 src/styles/element-variables.scss create mode 100644 src/styles/font/demo.css create mode 100644 src/styles/font/demo_index.html create mode 100644 src/styles/font/iconfont.css create mode 100644 src/styles/font/iconfont.eot create mode 100644 src/styles/font/iconfont.js create mode 100644 src/styles/font/iconfont.json create mode 100644 src/styles/font/iconfont.svg create mode 100644 src/styles/font/iconfont.ttf create mode 100644 src/styles/font/iconfont.woff create mode 100644 src/styles/font/iconfont.woff2 create mode 100644 src/styles/form.scss create mode 100644 src/styles/iconfont/demo.css create mode 100644 src/styles/iconfont/demo_index.html create mode 100644 src/styles/iconfont/iconfont.css create mode 100644 src/styles/iconfont/iconfont.js create mode 100644 src/styles/iconfont/iconfont.json create mode 100644 src/styles/iconfont/iconfont.ttf create mode 100644 src/styles/iconfont/iconfont.woff create mode 100644 src/styles/iconfont/iconfont.woff2 create mode 100644 src/styles/iconfont2/demo.css create mode 100644 src/styles/iconfont2/demo_index.html create mode 100644 src/styles/iconfont2/iconfont.css create mode 100644 src/styles/iconfont2/iconfont.js create mode 100644 src/styles/iconfont2/iconfont.json create mode 100644 src/styles/iconfont2/iconfont.ttf create mode 100644 src/styles/iconfont2/iconfont.woff create mode 100644 src/styles/iconfont2/iconfont.woff2 create mode 100644 src/styles/index.scss create mode 100644 src/styles/mixin.scss create mode 100644 src/styles/sidebar.scss create mode 100644 src/styles/styles.scss create mode 100644 src/styles/transition.scss create mode 100644 src/styles/variables.scss create mode 100644 src/utils/address.js create mode 100644 src/utils/auth.js create mode 100644 src/utils/bus.js create mode 100644 src/utils/city.js create mode 100644 src/utils/clipboard.js create mode 100644 src/utils/compressImg.js create mode 100644 src/utils/error-log.js create mode 100644 src/utils/get-page-title.js create mode 100644 src/utils/index.js create mode 100644 src/utils/newToExcel.js create mode 100644 src/utils/open-window.js create mode 100644 src/utils/permission.js create mode 100644 src/utils/request.js create mode 100644 src/utils/scroll-to.js create mode 100644 src/utils/storage.js create mode 100644 src/utils/system.js create mode 100644 src/utils/theme.js create mode 100644 src/utils/timeOptions.js create mode 100644 src/utils/toolsValidate.js create mode 100644 src/utils/util.js create mode 100644 src/utils/validate.js create mode 100644 src/utils/videoCloud.js create mode 100644 src/vendor/Blob.js create mode 100644 src/vendor/Export2Excel.js create mode 100644 src/views/accounts/capitalFlow/index.vue create mode 100644 src/views/accounts/payType.vue create mode 100644 src/views/accounts/reconciliation/index.vue create mode 100644 src/views/accounts/reconciliation/record.vue create mode 100644 src/views/accounts/statement/index.vue create mode 100644 src/views/accounts/statement/record.vue create mode 100644 src/views/accounts/transManage/index.vue create mode 100644 src/views/charts/keyboard.vue create mode 100644 src/views/charts/line.vue create mode 100644 src/views/charts/mix-chart.vue create mode 100644 src/views/cityDelivery/rechargeRecord/index.vue create mode 100644 src/views/cityDelivery/storeManage/addStore.vue create mode 100644 src/views/cityDelivery/storeManage/index.vue create mode 100644 src/views/cityDelivery/usageRecord/index.vue create mode 100644 src/views/clipboard/index.vue create mode 100644 src/views/dashboard/admin/components/BarChart.vue create mode 100644 src/views/dashboard/admin/components/BoxCard.vue create mode 100644 src/views/dashboard/admin/components/LineChart.vue create mode 100644 src/views/dashboard/admin/components/PanelGroup.vue create mode 100644 src/views/dashboard/admin/components/PieChart.vue create mode 100644 src/views/dashboard/admin/components/RaddarChart.vue create mode 100644 src/views/dashboard/admin/components/TodoList/Todo.vue create mode 100644 src/views/dashboard/admin/components/TodoList/index.scss create mode 100644 src/views/dashboard/admin/components/TodoList/index.vue create mode 100644 src/views/dashboard/admin/components/TodoPanel.vue create mode 100644 src/views/dashboard/admin/components/mixins/resize.js create mode 100644 src/views/dashboard/admin/index.vue create mode 100644 src/views/dashboard/editor/index.vue create mode 100644 src/views/dashboard/index.vue create mode 100644 src/views/devise/index.vue create mode 100644 src/views/devise/links.vue create mode 100644 src/views/devise/list.vue create mode 100644 src/views/error-page/401.vue create mode 100644 src/views/error-page/404.vue create mode 100644 src/views/exportFile/index.vue create mode 100644 src/views/icons/element-icons.js create mode 100644 src/views/icons/index.vue create mode 100644 src/views/icons/svg-icons.js create mode 100644 src/views/login/index.vue create mode 100644 src/views/marketing/assist/assist_activity/detail.vue create mode 100644 src/views/marketing/assist/assist_activity/index.vue create mode 100644 src/views/marketing/assist/assist_list/create.vue create mode 100644 src/views/marketing/assist/assist_list/index.vue create mode 100644 src/views/marketing/assist/index.vue create mode 100644 src/views/marketing/broadcast/batchAdd/goodsList.vue create mode 100644 src/views/marketing/broadcast/batchAdd/index.vue create mode 100644 src/views/marketing/broadcast/broadcastList/addProduct.vue create mode 100644 src/views/marketing/broadcast/broadcastList/index.vue create mode 100644 src/views/marketing/broadcast/broadcastList/proDetail.vue create mode 100644 src/views/marketing/broadcast/index.vue create mode 100644 src/views/marketing/combination/combination_goods/create.vue create mode 100644 src/views/marketing/combination/combination_goods/index.vue create mode 100644 src/views/marketing/combination/index.vue create mode 100644 src/views/marketing/combination/store_combination/detail.vue create mode 100644 src/views/marketing/combination/store_combination/index.vue create mode 100644 src/views/marketing/coupon/couponList/creatCoupon.vue create mode 100644 src/views/marketing/coupon/couponList/index.vue create mode 100644 src/views/marketing/coupon/couponSend/index.vue create mode 100644 src/views/marketing/coupon/couponUser/index.vue create mode 100644 src/views/marketing/coupon/index.vue create mode 100644 src/views/marketing/discounts/create.vue create mode 100644 src/views/marketing/discounts/formRule/discountsFrom.js create mode 100644 src/views/marketing/discounts/formRule/ruleShip.js create mode 100644 src/views/marketing/discounts/index.vue create mode 100644 src/views/marketing/integral/config/index.vue create mode 100644 src/views/marketing/integral/index.vue create mode 100644 src/views/marketing/integral/log/index.vue create mode 100644 src/views/marketing/preSale/create.vue create mode 100644 src/views/marketing/preSale/index.vue create mode 100644 src/views/marketing/seckill/index.vue create mode 100644 src/views/marketing/seckill/seckillGoods/createGoods.vue create mode 100644 src/views/marketing/seckill/seckillGoods/goodsList.vue create mode 100644 src/views/marketing/seckill/seckillGoods/index.vue create mode 100644 src/views/marketing/studio/assistant/index.vue create mode 100644 src/views/marketing/studio/index.vue create mode 100644 src/views/marketing/studio/studioList/creatStudio.vue create mode 100644 src/views/marketing/studio/studioList/index.vue create mode 100644 src/views/marketing/studio/studioList/selectedGoods.vue create mode 100644 src/views/marketing/studio/studioList/studioDetail.vue create mode 100644 src/views/notify/smsConfig/index.vue create mode 100644 src/views/notify/smsConfig/tableList.vue create mode 100644 src/views/notify/smsPay/index.vue create mode 100644 src/views/order/index.vue create mode 100644 src/views/order/logistics.vue create mode 100644 src/views/order/orderCancellate.vue create mode 100644 src/views/order/orderCancellate/index.vue create mode 100644 src/views/order/orderDetails.vue create mode 100644 src/views/order/orderInvoice/index.vue create mode 100644 src/views/order/orderRefund.vue create mode 100644 src/views/order/orderRefund/index.vue create mode 100644 src/views/order/orderRefund/refundDetail.vue create mode 100644 src/views/product/Reviews/index.vue create mode 100644 src/views/product/addProduct/addCarMy.vue create mode 100644 src/views/product/addProduct/copyRecord.vue create mode 100644 src/views/product/addProduct/index.vue create mode 100644 src/views/product/addProduct/taoBao.vue create mode 100644 src/views/product/productAttr/index.vue create mode 100644 src/views/product/productClassify/index.vue create mode 100644 src/views/product/productLabel/index.vue create mode 100644 src/views/product/productList/copyRecord.vue create mode 100644 src/views/product/productList/editAttr.vue create mode 100644 src/views/product/productList/index.vue create mode 100644 src/views/product/productList/proDetails.vue create mode 100644 src/views/product/productList/taoBao.vue create mode 100644 src/views/product/productUnit/index.vue create mode 100644 src/views/product/specs/create.vue create mode 100644 src/views/product/specs/list.vue create mode 100644 src/views/redirect/index.vue create mode 100644 src/views/setting/dumpConfig/index.vue create mode 100644 src/views/setting/openAuth/list.vue create mode 100644 src/views/setting/printer/index.vue create mode 100644 src/views/setting/systemAdmin/index.vue create mode 100644 src/views/setting/systemLog/index.vue create mode 100644 src/views/setting/systemRole/index.vue create mode 100644 src/views/setting/systemStore/index.vue create mode 100644 src/views/station/notice/index.vue create mode 100644 src/views/system/config/picture.vue create mode 100644 src/views/system/customer_keyword/index.vue create mode 100644 src/views/system/freight/express/index.vue create mode 100644 src/views/system/freight/index.vue create mode 100644 src/views/system/freight/shippingTemplates/index.vue create mode 100644 src/views/system/groupData/data.vue create mode 100644 src/views/system/groupData/list.vue create mode 100644 src/views/system/guarantee/index.vue create mode 100644 src/views/system/service/index.vue create mode 100644 src/views/system/topic/data.vue create mode 100644 src/views/systemForm/applyMents/index.vue create mode 100644 src/views/systemForm/applyMents/list.vue create mode 100644 src/views/systemForm/form/create.vue create mode 100644 src/views/systemForm/form/details.vue create mode 100644 src/views/systemForm/form/index.vue create mode 100644 src/views/systemForm/setSystem/index.vue create mode 100644 src/views/systemForm/setSystem/modifyStoreInfo.vue create mode 100644 src/views/user/group/index.vue create mode 100644 src/views/user/label/index.vue create mode 100644 src/views/user/list/couponList.vue create mode 100644 src/views/user/list/index.vue create mode 100644 src/views/user/list/userDetails.vue create mode 100644 src/views/user/member/record.vue create mode 100644 src/views/user/search/index.vue create mode 100644 tests/unit/.eslintrc.js create mode 100644 tests/unit/components/Hamburger.spec.js create mode 100644 tests/unit/components/SvgIcon.spec.js create mode 100644 tests/unit/utils/formatTime.spec.js create mode 100644 tests/unit/utils/parseTime.spec.js create mode 100644 tests/unit/utils/validate.spec.js create mode 100644 vue.config.js diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..3454886 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,14 @@ +# https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..f5380e6 --- /dev/null +++ b/.env.production @@ -0,0 +1,8 @@ +# just a flag +ENV = 'production' + +# base api +VUE_APP_BASE_API = +# socket 连接地址 +VUE_APP_WS_URL = + diff --git a/.env.staging b/.env.staging new file mode 100644 index 0000000..a8793a0 --- /dev/null +++ b/.env.staging @@ -0,0 +1,8 @@ +NODE_ENV = production + +# just a flag +ENV = 'staging' + +# base api +VUE_APP_BASE_API = '/stage-api' + diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..e6529fc --- /dev/null +++ b/.eslintignore @@ -0,0 +1,4 @@ +build/*.js +src/assets +public +dist diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..c977505 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,198 @@ +module.exports = { + root: true, + parserOptions: { + parser: 'babel-eslint', + sourceType: 'module' + }, + env: { + browser: true, + node: true, + es6: true, + }, + extends: ['plugin:vue/recommended', 'eslint:recommended'], + + // add your custom rules here + //it is base on https://github.com/vuejs/eslint-config-vue + rules: { + "vue/max-attributes-per-line": [2, { + "singleline": 10, + "multiline": { + "max": 1, + "allowFirstLine": false + } + }], + "vue/singleline-html-element-content-newline": "off", + "vue/multiline-html-element-content-newline":"off", + "vue/name-property-casing": ["error", "PascalCase"], + "vue/no-v-html": "off", + 'accessor-pairs': 2, + 'arrow-spacing': [2, { + 'before': true, + 'after': true + }], + 'block-spacing': [2, 'always'], + 'brace-style': [2, '1tbs', { + 'allowSingleLine': true + }], + 'camelcase': [0, { + 'properties': 'always' + }], + 'comma-dangle': [2, 'never'], + 'comma-spacing': [2, { + 'before': false, + 'after': true + }], + 'comma-style': [2, 'last'], + 'constructor-super': 2, + 'curly': [2, 'multi-line'], + 'dot-location': [2, 'property'], + 'eol-last': 2, + 'eqeqeq': ["error", "always", {"null": "ignore"}], + 'generator-star-spacing': [2, { + 'before': true, + 'after': true + }], + 'handle-callback-err': [2, '^(err|error)$'], + 'indent': [2, 2, { + 'SwitchCase': 1 + }], + 'jsx-quotes': [2, 'prefer-single'], + 'key-spacing': [2, { + 'beforeColon': false, + 'afterColon': true + }], + 'keyword-spacing': [2, { + 'before': true, + 'after': true + }], + 'new-cap': [2, { + 'newIsCap': true, + 'capIsNew': false + }], + 'new-parens': 2, + 'no-array-constructor': 2, + 'no-caller': 2, + 'no-console': 'off', + 'no-class-assign': 2, + 'no-cond-assign': 2, + 'no-const-assign': 2, + 'no-control-regex': 0, + 'no-delete-var': 2, + 'no-dupe-args': 2, + 'no-dupe-class-members': 2, + 'no-dupe-keys': 2, + 'no-duplicate-case': 2, + 'no-empty-character-class': 2, + 'no-empty-pattern': 2, + 'no-eval': 2, + 'no-ex-assign': 2, + 'no-extend-native': 2, + 'no-extra-bind': 2, + 'no-extra-boolean-cast': 2, + 'no-extra-parens': [2, 'functions'], + 'no-fallthrough': 2, + 'no-floating-decimal': 2, + 'no-func-assign': 2, + 'no-implied-eval': 2, + 'no-inner-declarations': [2, 'functions'], + 'no-invalid-regexp': 2, + 'no-irregular-whitespace': 2, + 'no-iterator': 2, + 'no-label-var': 2, + 'no-labels': [2, { + 'allowLoop': false, + 'allowSwitch': false + }], + 'no-lone-blocks': 2, + 'no-mixed-spaces-and-tabs': 2, + 'no-multi-spaces': 2, + 'no-multi-str': 2, + 'no-multiple-empty-lines': [2, { + 'max': 1 + }], + 'no-native-reassign': 2, + 'no-negated-in-lhs': 2, + 'no-new-object': 2, + 'no-new-require': 2, + 'no-new-symbol': 2, + 'no-new-wrappers': 2, + 'no-obj-calls': 2, + 'no-octal': 2, + 'no-octal-escape': 2, + 'no-path-concat': 2, + 'no-proto': 2, + 'no-redeclare': 2, + 'no-regex-spaces': 2, + 'no-return-assign': [2, 'except-parens'], + 'no-self-assign': 2, + 'no-self-compare': 2, + 'no-sequences': 2, + 'no-shadow-restricted-names': 2, + 'no-spaced-func': 2, + 'no-sparse-arrays': 2, + 'no-this-before-super': 2, + 'no-throw-literal': 2, + 'no-trailing-spaces': 2, + 'no-undef': 2, + 'no-undef-init': 2, + 'no-unexpected-multiline': 2, + 'no-unmodified-loop-condition': 2, + 'no-unneeded-ternary': [2, { + 'defaultAssignment': false + }], + 'no-unreachable': 2, + 'no-unsafe-finally': 2, + 'no-unused-vars': [2, { + 'vars': 'all', + 'args': 'none' + }], + 'no-useless-call': 2, + 'no-useless-computed-key': 2, + 'no-useless-constructor': 2, + 'no-useless-escape': 0, + 'no-whitespace-before-property': 2, + 'no-with': 2, + 'one-var': [2, { + 'initialized': 'never' + }], + 'operator-linebreak': [2, 'after', { + 'overrides': { + '?': 'before', + ':': 'before' + } + }], + 'padded-blocks': [2, 'never'], + 'quotes': [2, 'single', { + 'avoidEscape': true, + 'allowTemplateLiterals': true + }], + 'semi': [2, 'never'], + 'semi-spacing': [2, { + 'before': false, + 'after': true + }], + 'space-before-blocks': [2, 'always'], + 'space-before-function-paren': [2, 'never'], + 'space-in-parens': [2, 'never'], + 'space-infix-ops': 2, + 'space-unary-ops': [2, { + 'words': true, + 'nonwords': false + }], + 'spaced-comment': [2, 'always', { + 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ','] + }], + 'template-curly-spacing': [2, 'never'], + 'use-isnan': 2, + 'valid-typeof': 2, + 'wrap-iife': [2, 'any'], + 'yield-star-spacing': [2, 'both'], + 'yoda': [2, 'never'], + 'prefer-const': 2, + 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, + 'object-curly-spacing': [2, 'always', { + objectsInObjects: false + }], + 'array-bracket-spacing': [2, 'never'] + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..101c0f2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +.DS_Store +node_modules/ +dist/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* +**/*.log +.env.development +tests/**/coverage/ +tests/e2e/reports +selenium-debug.log + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.local + +package-lock.json +yarn.lock diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..f4be7a0 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: 10 +script: npm run test +notifications: + email: false diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..6151575 --- /dev/null +++ b/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/README.es.md b/README.es.md new file mode 100644 index 0000000..4c3ed60 --- /dev/null +++ b/README.es.md @@ -0,0 +1,215 @@ +# CRMEB多商户 +## 开发规范 +统一使用ES6 语法 +方法注释 +/* +* th => 表头 +* data => 数据 +* fileName => 文件名 +* fileType => 文件类型 +* sheetName => sheet页名 +*/ +export default function toExcel ({ th, data, fileName, fileType, sheetName }) +行注释 // + +### 命名 + +页面目录 文件夹命名格式骆驼式命名法,例如:用户列表 userList +例如:商品模块 +product 商品 + ├─ product 商品管理 + ├─productList 商品管理目录 + ├- index.vue 首页 + +页面命名、组建、文件夹 命名格式小驼峰命名法,例如:用户列表 userList + +类名函数命名 大驼峰式 例如:addUser +变量命名 小驼峰式 例如:user 或者 userInfo _userinfo user-info +常量 采用全大些下划线命名 例如:VUE_APP_API_URl + +### 文件管理规范 +pages 页面模块必须件文件夹区分 +api 接口一个模块一个文件 +组建 一个组建一个文件夹 +plugins 插件一个插件一个文件夹 +vuex 路由状态管理,一个模块在modules 中建一个文件夹 +router 一个模块一个模块在modules 中建一个文件夹 +style 样式尽量采用iView自带组建,common.less 系统通用样式不要轻易动 +自定义通用样式 style.less,每次添加必须加注释,页面独立样式在在页面内写,后缀less 格式 +组建样式 styles 中添加文件夹 composents 对应components 目录新建样式文件 +utils 自定义工具js 独立命名,一般不用新建文件夹 + +## 模块命名 +~~~ +├─ login 登录 +├─ dashboard 首页 +├─ product 商品管理 +├─ order 系统订单管理 +├─ accounts 财务管理 +├─ charts 统计图 +├─ marketing 营销优惠券 +├─ system 系统更新日志 数据库管理 素材管理 运费模板 客服管理 组合数据 +├─ setting 系统身份管理 管理员管理、操作日志 +├─ systemForm 商城设置 +├─ error-page 错误页 + +~~~ +## 目录结构 +主要目录结构及说明: +~~~ + +├── public # 静态资源 +│ ├── favicon.ico # favicon图标 +│ └── index.html # html 模板 +├── src # 源代码 +│ ├── api # 所有接口api +│ │ └──request.js # 请求封装 +│ │ └──accounts.js # 有关财务的接口 +│ │ └──dashboard.js # 有关首页的接口 +│ │ └──freight.js # 有关运费模板的接口 +│ │ └──marketing.js # 有关优惠券的接口 +│ │ └──order.js # 有关订单的接口 +│ │ └──product.js # 有关商品的接口 +│ │ └──settingMer.js # 有关权限管理的接口 +│ │ └──system.js # 有关系统配置的接口 +│ │ └──systemForm.js # 有关表单组件的接口 +│ │ └──user.js # 有关登录、用户的接口 +│ ├── assets # 图片、svg 等静态资源 +│ ├── icons # svg 等静态资源 +│ ├── components # 公共组件 +│ │ └──attrFrom # 商品规格 +│ │ └──Breadcrumb # 头部标题标签 +│ │ └──cards # 统计 +│ │ └──couponList # 优惠劵列表 +│ │ └──goodsList # 商品列表 +│ │ └──Hamburger # 导航收缩组件 +│ │ └──HeaderSearch # 导航搜索组件 +│ │ └──iconFrom # 导航添加图标 +│ │ └──RightPanel # 右侧设置按钮,设置导航相关 +│ │ └──Screenfull # 全屏 +│ │ └──SvgIcon # svg图标 +│ │ └──ThemePicker # 右侧设置按钮,设置组题颜色 +│ │ └──templatesFrom # 运费模板 +│ │ └──ueditorFrom # 富文本编辑器 +│ │ └──uploadPicture # 上传图片组件 +│ │ └──UploadExcel # 下载Excel +│ │ └──userList # 用户列表 +│ ├── layouts # 导航布局 +│ │ ├──index # 主页面 +│ │ ├──components # 导航组件 +│ │ └──Settings # 右边小按钮,设置导航等 +│ │ └──Sidebar # 侧边导航 +│ │ └──TagsView # tab标签页导航 +│ │ └──Navbar # 头部导航 +│ │ └──AppMain # 导航路由 +│ │ └──index.js # 组件引用 +│ │ └──mixins # 自适应大小 +│ ├── libs # 公共js方法 +│ │ └──settingMer # 配置请求地址 +│ ├── views # 所有页面 +│ │ └──login # 登录 +│ │ └──index # 登录 +│ │ └──dashboard # 首页 +│ │ └──product # 商品 +│ │ └──addProduct # 添加商品 +│ │ └──productAttr # 商品规格 +│ │ └──productClassify # 商品分类 +│ │ └──productList # 商品列表 +│ │ └──Reviews # 商品评论 +│ │ └──order # 订单管理 +│ │ └──index # 订单列表 +│ │ └──orderDetail # 订单详情 +│ │ └──logistics # 物流单号 +│ │ └──orderRefund # 退款单 +│ │ └──accounts # 财务 +│ │ └──reconciliation # 财务对账 +│ │ └──index # 财务对账 +│ │ └──record # 对账订单 +│ │ └──charts # 统计图 +│ │ └──marketing # 营销 +│ │ └──coupon # 优惠劵 +│ │ └──index # 路由 +│ │ └──couponList # 优惠券列表 +│ │ └──couponList # 会员领取记录 +│ │ └──system # 设置 +│ │ └──config # 素材管理 +│ │ └──freight # 运费模板 +│ │ └──service # 客服管理 +│ │ └──groupData # 组合设置 +│ │ └──list # 组合数据 +│ │ └──data # 组合数据列表 +│ │ └──setting # 设置-权限管理 +│ │ └──systemRole # 身份管理 +│ │ └──systemAdmin # 管理员管理 +│ │ └──systemLog # 操作日志 +│ │ └──systemForm # 设置-商城设置 +│ │ └──index # 店铺配置 +│ │ └──modifyStoreInfo # 基础配置 +│ │ └──error-page # 错误页 +│ │ └──404 # 错误页404 +│ │ └──403 # 错误页403 +│ ├── filters # 过滤器 +│ ├── router # 路由配置 +│ │ └──modules # 页面路由模块 +│ │ └──accounts.js # 有关财务 +│ │ └──charts.js # 有关首页统计图 +│ │ └──config.js # 有关系统配置 +│ │ └──marketing.js # 有关优惠券 +│ │ └──group.js # 有关组合数据 +│ │ └──order.js # 有关订单 +│ │ └──product.js # 有关商品 +│ │ └──settingMer.js # 有关权限 +│ │ └──systemForm.js # 有关商城设置 +│ │ └──index.js # 路由的汇总 +│ ├── store # Vuex 状态管理 +│ ├── utils # 全局公用方法 +│ ├── styles # 样式管理 +│ ├── permission.js # 路由拦截 +│ ├── settingMer.js # 业务配置文件 +│ ├── main.js # 入口文件 加载组件 初始化等 +│ └── App.vue # 入口页面 +├── tests # 测试 +├── .env.xxx # 环境变量配置 +├── .eslintrc.js # eslint 配置项 +├── .babelrc # babel-loader 配置 +├── .travis.yml # 自动化CI配置 +├── vue.config.js # vue-cli 配置 +├── postcss.config.js # postcss 配置 +└── package.json # package.json + +~~~ +## 开发打包项目 +~~~ +# 进入项目目录 +$ cd admin-iView + +# 安装依赖 +$ npm install + +# 启动项目(本地开发环境) +$ npm run dev + +# 打包项目 +## Build + +```bash +# build for test environment +npm run build:stage + +# build for production environment +npm run build:prod +``` +## Advanced +```bash +# preview the release environment effect +npm run preview + +# preview the release environment effect + static resource analysis +npm run preview -- --report + +# code format check +npm run lint + +# code format check and auto fix +npm run lint -- --fix +``` \ No newline at end of file diff --git a/README.ja.md b/README.ja.md new file mode 100644 index 0000000..4c3ed60 --- /dev/null +++ b/README.ja.md @@ -0,0 +1,215 @@ +# CRMEB多商户 +## 开发规范 +统一使用ES6 语法 +方法注释 +/* +* th => 表头 +* data => 数据 +* fileName => 文件名 +* fileType => 文件类型 +* sheetName => sheet页名 +*/ +export default function toExcel ({ th, data, fileName, fileType, sheetName }) +行注释 // + +### 命名 + +页面目录 文件夹命名格式骆驼式命名法,例如:用户列表 userList +例如:商品模块 +product 商品 + ├─ product 商品管理 + ├─productList 商品管理目录 + ├- index.vue 首页 + +页面命名、组建、文件夹 命名格式小驼峰命名法,例如:用户列表 userList + +类名函数命名 大驼峰式 例如:addUser +变量命名 小驼峰式 例如:user 或者 userInfo _userinfo user-info +常量 采用全大些下划线命名 例如:VUE_APP_API_URl + +### 文件管理规范 +pages 页面模块必须件文件夹区分 +api 接口一个模块一个文件 +组建 一个组建一个文件夹 +plugins 插件一个插件一个文件夹 +vuex 路由状态管理,一个模块在modules 中建一个文件夹 +router 一个模块一个模块在modules 中建一个文件夹 +style 样式尽量采用iView自带组建,common.less 系统通用样式不要轻易动 +自定义通用样式 style.less,每次添加必须加注释,页面独立样式在在页面内写,后缀less 格式 +组建样式 styles 中添加文件夹 composents 对应components 目录新建样式文件 +utils 自定义工具js 独立命名,一般不用新建文件夹 + +## 模块命名 +~~~ +├─ login 登录 +├─ dashboard 首页 +├─ product 商品管理 +├─ order 系统订单管理 +├─ accounts 财务管理 +├─ charts 统计图 +├─ marketing 营销优惠券 +├─ system 系统更新日志 数据库管理 素材管理 运费模板 客服管理 组合数据 +├─ setting 系统身份管理 管理员管理、操作日志 +├─ systemForm 商城设置 +├─ error-page 错误页 + +~~~ +## 目录结构 +主要目录结构及说明: +~~~ + +├── public # 静态资源 +│ ├── favicon.ico # favicon图标 +│ └── index.html # html 模板 +├── src # 源代码 +│ ├── api # 所有接口api +│ │ └──request.js # 请求封装 +│ │ └──accounts.js # 有关财务的接口 +│ │ └──dashboard.js # 有关首页的接口 +│ │ └──freight.js # 有关运费模板的接口 +│ │ └──marketing.js # 有关优惠券的接口 +│ │ └──order.js # 有关订单的接口 +│ │ └──product.js # 有关商品的接口 +│ │ └──settingMer.js # 有关权限管理的接口 +│ │ └──system.js # 有关系统配置的接口 +│ │ └──systemForm.js # 有关表单组件的接口 +│ │ └──user.js # 有关登录、用户的接口 +│ ├── assets # 图片、svg 等静态资源 +│ ├── icons # svg 等静态资源 +│ ├── components # 公共组件 +│ │ └──attrFrom # 商品规格 +│ │ └──Breadcrumb # 头部标题标签 +│ │ └──cards # 统计 +│ │ └──couponList # 优惠劵列表 +│ │ └──goodsList # 商品列表 +│ │ └──Hamburger # 导航收缩组件 +│ │ └──HeaderSearch # 导航搜索组件 +│ │ └──iconFrom # 导航添加图标 +│ │ └──RightPanel # 右侧设置按钮,设置导航相关 +│ │ └──Screenfull # 全屏 +│ │ └──SvgIcon # svg图标 +│ │ └──ThemePicker # 右侧设置按钮,设置组题颜色 +│ │ └──templatesFrom # 运费模板 +│ │ └──ueditorFrom # 富文本编辑器 +│ │ └──uploadPicture # 上传图片组件 +│ │ └──UploadExcel # 下载Excel +│ │ └──userList # 用户列表 +│ ├── layouts # 导航布局 +│ │ ├──index # 主页面 +│ │ ├──components # 导航组件 +│ │ └──Settings # 右边小按钮,设置导航等 +│ │ └──Sidebar # 侧边导航 +│ │ └──TagsView # tab标签页导航 +│ │ └──Navbar # 头部导航 +│ │ └──AppMain # 导航路由 +│ │ └──index.js # 组件引用 +│ │ └──mixins # 自适应大小 +│ ├── libs # 公共js方法 +│ │ └──settingMer # 配置请求地址 +│ ├── views # 所有页面 +│ │ └──login # 登录 +│ │ └──index # 登录 +│ │ └──dashboard # 首页 +│ │ └──product # 商品 +│ │ └──addProduct # 添加商品 +│ │ └──productAttr # 商品规格 +│ │ └──productClassify # 商品分类 +│ │ └──productList # 商品列表 +│ │ └──Reviews # 商品评论 +│ │ └──order # 订单管理 +│ │ └──index # 订单列表 +│ │ └──orderDetail # 订单详情 +│ │ └──logistics # 物流单号 +│ │ └──orderRefund # 退款单 +│ │ └──accounts # 财务 +│ │ └──reconciliation # 财务对账 +│ │ └──index # 财务对账 +│ │ └──record # 对账订单 +│ │ └──charts # 统计图 +│ │ └──marketing # 营销 +│ │ └──coupon # 优惠劵 +│ │ └──index # 路由 +│ │ └──couponList # 优惠券列表 +│ │ └──couponList # 会员领取记录 +│ │ └──system # 设置 +│ │ └──config # 素材管理 +│ │ └──freight # 运费模板 +│ │ └──service # 客服管理 +│ │ └──groupData # 组合设置 +│ │ └──list # 组合数据 +│ │ └──data # 组合数据列表 +│ │ └──setting # 设置-权限管理 +│ │ └──systemRole # 身份管理 +│ │ └──systemAdmin # 管理员管理 +│ │ └──systemLog # 操作日志 +│ │ └──systemForm # 设置-商城设置 +│ │ └──index # 店铺配置 +│ │ └──modifyStoreInfo # 基础配置 +│ │ └──error-page # 错误页 +│ │ └──404 # 错误页404 +│ │ └──403 # 错误页403 +│ ├── filters # 过滤器 +│ ├── router # 路由配置 +│ │ └──modules # 页面路由模块 +│ │ └──accounts.js # 有关财务 +│ │ └──charts.js # 有关首页统计图 +│ │ └──config.js # 有关系统配置 +│ │ └──marketing.js # 有关优惠券 +│ │ └──group.js # 有关组合数据 +│ │ └──order.js # 有关订单 +│ │ └──product.js # 有关商品 +│ │ └──settingMer.js # 有关权限 +│ │ └──systemForm.js # 有关商城设置 +│ │ └──index.js # 路由的汇总 +│ ├── store # Vuex 状态管理 +│ ├── utils # 全局公用方法 +│ ├── styles # 样式管理 +│ ├── permission.js # 路由拦截 +│ ├── settingMer.js # 业务配置文件 +│ ├── main.js # 入口文件 加载组件 初始化等 +│ └── App.vue # 入口页面 +├── tests # 测试 +├── .env.xxx # 环境变量配置 +├── .eslintrc.js # eslint 配置项 +├── .babelrc # babel-loader 配置 +├── .travis.yml # 自动化CI配置 +├── vue.config.js # vue-cli 配置 +├── postcss.config.js # postcss 配置 +└── package.json # package.json + +~~~ +## 开发打包项目 +~~~ +# 进入项目目录 +$ cd admin-iView + +# 安装依赖 +$ npm install + +# 启动项目(本地开发环境) +$ npm run dev + +# 打包项目 +## Build + +```bash +# build for test environment +npm run build:stage + +# build for production environment +npm run build:prod +``` +## Advanced +```bash +# preview the release environment effect +npm run preview + +# preview the release environment effect + static resource analysis +npm run preview -- --report + +# code format check +npm run lint + +# code format check and auto fix +npm run lint -- --fix +``` \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..4c3ed60 --- /dev/null +++ b/README.md @@ -0,0 +1,215 @@ +# CRMEB多商户 +## 开发规范 +统一使用ES6 语法 +方法注释 +/* +* th => 表头 +* data => 数据 +* fileName => 文件名 +* fileType => 文件类型 +* sheetName => sheet页名 +*/ +export default function toExcel ({ th, data, fileName, fileType, sheetName }) +行注释 // + +### 命名 + +页面目录 文件夹命名格式骆驼式命名法,例如:用户列表 userList +例如:商品模块 +product 商品 + ├─ product 商品管理 + ├─productList 商品管理目录 + ├- index.vue 首页 + +页面命名、组建、文件夹 命名格式小驼峰命名法,例如:用户列表 userList + +类名函数命名 大驼峰式 例如:addUser +变量命名 小驼峰式 例如:user 或者 userInfo _userinfo user-info +常量 采用全大些下划线命名 例如:VUE_APP_API_URl + +### 文件管理规范 +pages 页面模块必须件文件夹区分 +api 接口一个模块一个文件 +组建 一个组建一个文件夹 +plugins 插件一个插件一个文件夹 +vuex 路由状态管理,一个模块在modules 中建一个文件夹 +router 一个模块一个模块在modules 中建一个文件夹 +style 样式尽量采用iView自带组建,common.less 系统通用样式不要轻易动 +自定义通用样式 style.less,每次添加必须加注释,页面独立样式在在页面内写,后缀less 格式 +组建样式 styles 中添加文件夹 composents 对应components 目录新建样式文件 +utils 自定义工具js 独立命名,一般不用新建文件夹 + +## 模块命名 +~~~ +├─ login 登录 +├─ dashboard 首页 +├─ product 商品管理 +├─ order 系统订单管理 +├─ accounts 财务管理 +├─ charts 统计图 +├─ marketing 营销优惠券 +├─ system 系统更新日志 数据库管理 素材管理 运费模板 客服管理 组合数据 +├─ setting 系统身份管理 管理员管理、操作日志 +├─ systemForm 商城设置 +├─ error-page 错误页 + +~~~ +## 目录结构 +主要目录结构及说明: +~~~ + +├── public # 静态资源 +│ ├── favicon.ico # favicon图标 +│ └── index.html # html 模板 +├── src # 源代码 +│ ├── api # 所有接口api +│ │ └──request.js # 请求封装 +│ │ └──accounts.js # 有关财务的接口 +│ │ └──dashboard.js # 有关首页的接口 +│ │ └──freight.js # 有关运费模板的接口 +│ │ └──marketing.js # 有关优惠券的接口 +│ │ └──order.js # 有关订单的接口 +│ │ └──product.js # 有关商品的接口 +│ │ └──settingMer.js # 有关权限管理的接口 +│ │ └──system.js # 有关系统配置的接口 +│ │ └──systemForm.js # 有关表单组件的接口 +│ │ └──user.js # 有关登录、用户的接口 +│ ├── assets # 图片、svg 等静态资源 +│ ├── icons # svg 等静态资源 +│ ├── components # 公共组件 +│ │ └──attrFrom # 商品规格 +│ │ └──Breadcrumb # 头部标题标签 +│ │ └──cards # 统计 +│ │ └──couponList # 优惠劵列表 +│ │ └──goodsList # 商品列表 +│ │ └──Hamburger # 导航收缩组件 +│ │ └──HeaderSearch # 导航搜索组件 +│ │ └──iconFrom # 导航添加图标 +│ │ └──RightPanel # 右侧设置按钮,设置导航相关 +│ │ └──Screenfull # 全屏 +│ │ └──SvgIcon # svg图标 +│ │ └──ThemePicker # 右侧设置按钮,设置组题颜色 +│ │ └──templatesFrom # 运费模板 +│ │ └──ueditorFrom # 富文本编辑器 +│ │ └──uploadPicture # 上传图片组件 +│ │ └──UploadExcel # 下载Excel +│ │ └──userList # 用户列表 +│ ├── layouts # 导航布局 +│ │ ├──index # 主页面 +│ │ ├──components # 导航组件 +│ │ └──Settings # 右边小按钮,设置导航等 +│ │ └──Sidebar # 侧边导航 +│ │ └──TagsView # tab标签页导航 +│ │ └──Navbar # 头部导航 +│ │ └──AppMain # 导航路由 +│ │ └──index.js # 组件引用 +│ │ └──mixins # 自适应大小 +│ ├── libs # 公共js方法 +│ │ └──settingMer # 配置请求地址 +│ ├── views # 所有页面 +│ │ └──login # 登录 +│ │ └──index # 登录 +│ │ └──dashboard # 首页 +│ │ └──product # 商品 +│ │ └──addProduct # 添加商品 +│ │ └──productAttr # 商品规格 +│ │ └──productClassify # 商品分类 +│ │ └──productList # 商品列表 +│ │ └──Reviews # 商品评论 +│ │ └──order # 订单管理 +│ │ └──index # 订单列表 +│ │ └──orderDetail # 订单详情 +│ │ └──logistics # 物流单号 +│ │ └──orderRefund # 退款单 +│ │ └──accounts # 财务 +│ │ └──reconciliation # 财务对账 +│ │ └──index # 财务对账 +│ │ └──record # 对账订单 +│ │ └──charts # 统计图 +│ │ └──marketing # 营销 +│ │ └──coupon # 优惠劵 +│ │ └──index # 路由 +│ │ └──couponList # 优惠券列表 +│ │ └──couponList # 会员领取记录 +│ │ └──system # 设置 +│ │ └──config # 素材管理 +│ │ └──freight # 运费模板 +│ │ └──service # 客服管理 +│ │ └──groupData # 组合设置 +│ │ └──list # 组合数据 +│ │ └──data # 组合数据列表 +│ │ └──setting # 设置-权限管理 +│ │ └──systemRole # 身份管理 +│ │ └──systemAdmin # 管理员管理 +│ │ └──systemLog # 操作日志 +│ │ └──systemForm # 设置-商城设置 +│ │ └──index # 店铺配置 +│ │ └──modifyStoreInfo # 基础配置 +│ │ └──error-page # 错误页 +│ │ └──404 # 错误页404 +│ │ └──403 # 错误页403 +│ ├── filters # 过滤器 +│ ├── router # 路由配置 +│ │ └──modules # 页面路由模块 +│ │ └──accounts.js # 有关财务 +│ │ └──charts.js # 有关首页统计图 +│ │ └──config.js # 有关系统配置 +│ │ └──marketing.js # 有关优惠券 +│ │ └──group.js # 有关组合数据 +│ │ └──order.js # 有关订单 +│ │ └──product.js # 有关商品 +│ │ └──settingMer.js # 有关权限 +│ │ └──systemForm.js # 有关商城设置 +│ │ └──index.js # 路由的汇总 +│ ├── store # Vuex 状态管理 +│ ├── utils # 全局公用方法 +│ ├── styles # 样式管理 +│ ├── permission.js # 路由拦截 +│ ├── settingMer.js # 业务配置文件 +│ ├── main.js # 入口文件 加载组件 初始化等 +│ └── App.vue # 入口页面 +├── tests # 测试 +├── .env.xxx # 环境变量配置 +├── .eslintrc.js # eslint 配置项 +├── .babelrc # babel-loader 配置 +├── .travis.yml # 自动化CI配置 +├── vue.config.js # vue-cli 配置 +├── postcss.config.js # postcss 配置 +└── package.json # package.json + +~~~ +## 开发打包项目 +~~~ +# 进入项目目录 +$ cd admin-iView + +# 安装依赖 +$ npm install + +# 启动项目(本地开发环境) +$ npm run dev + +# 打包项目 +## Build + +```bash +# build for test environment +npm run build:stage + +# build for production environment +npm run build:prod +``` +## Advanced +```bash +# preview the release environment effect +npm run preview + +# preview the release environment effect + static resource analysis +npm run preview -- --report + +# code format check +npm run lint + +# code format check and auto fix +npm run lint -- --fix +``` \ No newline at end of file diff --git a/README.zh-CN.md b/README.zh-CN.md new file mode 100644 index 0000000..4c3ed60 --- /dev/null +++ b/README.zh-CN.md @@ -0,0 +1,215 @@ +# CRMEB多商户 +## 开发规范 +统一使用ES6 语法 +方法注释 +/* +* th => 表头 +* data => 数据 +* fileName => 文件名 +* fileType => 文件类型 +* sheetName => sheet页名 +*/ +export default function toExcel ({ th, data, fileName, fileType, sheetName }) +行注释 // + +### 命名 + +页面目录 文件夹命名格式骆驼式命名法,例如:用户列表 userList +例如:商品模块 +product 商品 + ├─ product 商品管理 + ├─productList 商品管理目录 + ├- index.vue 首页 + +页面命名、组建、文件夹 命名格式小驼峰命名法,例如:用户列表 userList + +类名函数命名 大驼峰式 例如:addUser +变量命名 小驼峰式 例如:user 或者 userInfo _userinfo user-info +常量 采用全大些下划线命名 例如:VUE_APP_API_URl + +### 文件管理规范 +pages 页面模块必须件文件夹区分 +api 接口一个模块一个文件 +组建 一个组建一个文件夹 +plugins 插件一个插件一个文件夹 +vuex 路由状态管理,一个模块在modules 中建一个文件夹 +router 一个模块一个模块在modules 中建一个文件夹 +style 样式尽量采用iView自带组建,common.less 系统通用样式不要轻易动 +自定义通用样式 style.less,每次添加必须加注释,页面独立样式在在页面内写,后缀less 格式 +组建样式 styles 中添加文件夹 composents 对应components 目录新建样式文件 +utils 自定义工具js 独立命名,一般不用新建文件夹 + +## 模块命名 +~~~ +├─ login 登录 +├─ dashboard 首页 +├─ product 商品管理 +├─ order 系统订单管理 +├─ accounts 财务管理 +├─ charts 统计图 +├─ marketing 营销优惠券 +├─ system 系统更新日志 数据库管理 素材管理 运费模板 客服管理 组合数据 +├─ setting 系统身份管理 管理员管理、操作日志 +├─ systemForm 商城设置 +├─ error-page 错误页 + +~~~ +## 目录结构 +主要目录结构及说明: +~~~ + +├── public # 静态资源 +│ ├── favicon.ico # favicon图标 +│ └── index.html # html 模板 +├── src # 源代码 +│ ├── api # 所有接口api +│ │ └──request.js # 请求封装 +│ │ └──accounts.js # 有关财务的接口 +│ │ └──dashboard.js # 有关首页的接口 +│ │ └──freight.js # 有关运费模板的接口 +│ │ └──marketing.js # 有关优惠券的接口 +│ │ └──order.js # 有关订单的接口 +│ │ └──product.js # 有关商品的接口 +│ │ └──settingMer.js # 有关权限管理的接口 +│ │ └──system.js # 有关系统配置的接口 +│ │ └──systemForm.js # 有关表单组件的接口 +│ │ └──user.js # 有关登录、用户的接口 +│ ├── assets # 图片、svg 等静态资源 +│ ├── icons # svg 等静态资源 +│ ├── components # 公共组件 +│ │ └──attrFrom # 商品规格 +│ │ └──Breadcrumb # 头部标题标签 +│ │ └──cards # 统计 +│ │ └──couponList # 优惠劵列表 +│ │ └──goodsList # 商品列表 +│ │ └──Hamburger # 导航收缩组件 +│ │ └──HeaderSearch # 导航搜索组件 +│ │ └──iconFrom # 导航添加图标 +│ │ └──RightPanel # 右侧设置按钮,设置导航相关 +│ │ └──Screenfull # 全屏 +│ │ └──SvgIcon # svg图标 +│ │ └──ThemePicker # 右侧设置按钮,设置组题颜色 +│ │ └──templatesFrom # 运费模板 +│ │ └──ueditorFrom # 富文本编辑器 +│ │ └──uploadPicture # 上传图片组件 +│ │ └──UploadExcel # 下载Excel +│ │ └──userList # 用户列表 +│ ├── layouts # 导航布局 +│ │ ├──index # 主页面 +│ │ ├──components # 导航组件 +│ │ └──Settings # 右边小按钮,设置导航等 +│ │ └──Sidebar # 侧边导航 +│ │ └──TagsView # tab标签页导航 +│ │ └──Navbar # 头部导航 +│ │ └──AppMain # 导航路由 +│ │ └──index.js # 组件引用 +│ │ └──mixins # 自适应大小 +│ ├── libs # 公共js方法 +│ │ └──settingMer # 配置请求地址 +│ ├── views # 所有页面 +│ │ └──login # 登录 +│ │ └──index # 登录 +│ │ └──dashboard # 首页 +│ │ └──product # 商品 +│ │ └──addProduct # 添加商品 +│ │ └──productAttr # 商品规格 +│ │ └──productClassify # 商品分类 +│ │ └──productList # 商品列表 +│ │ └──Reviews # 商品评论 +│ │ └──order # 订单管理 +│ │ └──index # 订单列表 +│ │ └──orderDetail # 订单详情 +│ │ └──logistics # 物流单号 +│ │ └──orderRefund # 退款单 +│ │ └──accounts # 财务 +│ │ └──reconciliation # 财务对账 +│ │ └──index # 财务对账 +│ │ └──record # 对账订单 +│ │ └──charts # 统计图 +│ │ └──marketing # 营销 +│ │ └──coupon # 优惠劵 +│ │ └──index # 路由 +│ │ └──couponList # 优惠券列表 +│ │ └──couponList # 会员领取记录 +│ │ └──system # 设置 +│ │ └──config # 素材管理 +│ │ └──freight # 运费模板 +│ │ └──service # 客服管理 +│ │ └──groupData # 组合设置 +│ │ └──list # 组合数据 +│ │ └──data # 组合数据列表 +│ │ └──setting # 设置-权限管理 +│ │ └──systemRole # 身份管理 +│ │ └──systemAdmin # 管理员管理 +│ │ └──systemLog # 操作日志 +│ │ └──systemForm # 设置-商城设置 +│ │ └──index # 店铺配置 +│ │ └──modifyStoreInfo # 基础配置 +│ │ └──error-page # 错误页 +│ │ └──404 # 错误页404 +│ │ └──403 # 错误页403 +│ ├── filters # 过滤器 +│ ├── router # 路由配置 +│ │ └──modules # 页面路由模块 +│ │ └──accounts.js # 有关财务 +│ │ └──charts.js # 有关首页统计图 +│ │ └──config.js # 有关系统配置 +│ │ └──marketing.js # 有关优惠券 +│ │ └──group.js # 有关组合数据 +│ │ └──order.js # 有关订单 +│ │ └──product.js # 有关商品 +│ │ └──settingMer.js # 有关权限 +│ │ └──systemForm.js # 有关商城设置 +│ │ └──index.js # 路由的汇总 +│ ├── store # Vuex 状态管理 +│ ├── utils # 全局公用方法 +│ ├── styles # 样式管理 +│ ├── permission.js # 路由拦截 +│ ├── settingMer.js # 业务配置文件 +│ ├── main.js # 入口文件 加载组件 初始化等 +│ └── App.vue # 入口页面 +├── tests # 测试 +├── .env.xxx # 环境变量配置 +├── .eslintrc.js # eslint 配置项 +├── .babelrc # babel-loader 配置 +├── .travis.yml # 自动化CI配置 +├── vue.config.js # vue-cli 配置 +├── postcss.config.js # postcss 配置 +└── package.json # package.json + +~~~ +## 开发打包项目 +~~~ +# 进入项目目录 +$ cd admin-iView + +# 安装依赖 +$ npm install + +# 启动项目(本地开发环境) +$ npm run dev + +# 打包项目 +## Build + +```bash +# build for test environment +npm run build:stage + +# build for production environment +npm run build:prod +``` +## Advanced +```bash +# preview the release environment effect +npm run preview + +# preview the release environment effect + static resource analysis +npm run preview -- --report + +# code format check +npm run lint + +# code format check and auto fix +npm run lint -- --fix +``` \ No newline at end of file diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..ba17966 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/app' + ] +} diff --git a/build/index.js b/build/index.js new file mode 100644 index 0000000..6873a07 --- /dev/null +++ b/build/index.js @@ -0,0 +1,44 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 +// +---------------------------------------------------------------------- +// | Author: CRMEB Team +// +---------------------------------------------------------------------- +const { run } = require('runjs') +const chalk = require('chalk') +const config = require('../vue.config.js') +const rawArgv = process.argv.slice(2) +const args = rawArgv.join(' ') + +if (process.env.npm_config_preview || rawArgv.includes('--preview')) { + const report = rawArgv.includes('--report') + + run(`vue-cli-service build ${args}`) + + const port = 9526 + const publicPath = config.publicPath + + var connect = require('connect') + var serveStatic = require('serve-static') + const app = connect() + + app.use( + publicPath, + serveStatic('./dist', { + index: ['index.html', '/'] + }) + ) + + app.listen(port, function () { + console.log(chalk.green(`> Preview at http://localhost:${port}${publicPath}`)) + if (report) { + console.log(chalk.green(`> Report at http://localhost:${port}${publicPath}report.html`)) + } + + }) +} else { + run(`vue-cli-service build ${args}`) +} diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..143cdc8 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,24 @@ +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)' + ], + collectCoverageFrom: ['src/utils/**/*.{js,vue}', '!src/utils/auth.js', '!src/utils/request.js', 'src/components/**/*.{js,vue}'], + coverageDirectory: '/tests/unit/coverage', + // 'collectCoverage': true, + 'coverageReporters': [ + 'lcov', + 'text-summary' + ], + testURL: 'http://localhost/' +} diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..958df04 --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "baseUrl": "./", + "paths": { + "@/*": ["src/*"] + } + }, + "exclude": ["node_modules", "dist"] +} \ No newline at end of file diff --git a/mock/article.js b/mock/article.js new file mode 100644 index 0000000..60a9c93 --- /dev/null +++ b/mock/article.js @@ -0,0 +1,123 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 +// +---------------------------------------------------------------------- +// | Author: CRMEB Team +// +---------------------------------------------------------------------- +import Mock from 'mockjs' +const List = [] +const count = 100 +const baseContent = '

I am testing data, I am testing data.

' +const image_uri = 'https://wpimg.wallstcn.com/e4558086-631c-425c-9430-56ffb46e70b3' + +for (let i = 0; i < count; i++) { + List.push(Mock.mock({ + id: '@increment', + timestamp: +Mock.Random.date('T'), + author: '@first', + reviewer: '@first', + title: '@title(5, 10)', + content_short: 'mock data', + content: baseContent, + forecast: '@float(0, 100, 2, 2)', + importance: '@integer(1, 3)', + 'type|1': ['CN', 'US', 'JP', 'EU'], + 'status|1': ['published', 'draft'], + display_time: '@datetime', + comment_disabled: true, + pageviews: '@integer(300, 5000)', + image_uri, + platforms: ['a-platform'] + })) +} + +export default [ + { + url: '/vue-element-admin/article/list', + type: 'get', + response: config => { + const { importance, type, title, page = 1, limit = 20, sort } = config.query + + let mockList = List.filter(item => { + if (importance && item.importance !== +importance) return false + if (type && item.type !== type) return false + if (title && item.title.indexOf(title) < 0) return false + return true + }) + + if (sort === '-id') { + mockList = mockList.reverse() + } + + const pageList = mockList.filter((item, index) => index < limit * page && index >= limit * (page - 1)) + + return { + code: 20000, + data: { + total: mockList.length, + items: pageList + } + } + } + }, + + { + url: '/vue-element-admin/article/detail', + type: 'get', + response: config => { + const { id } = config.query + for (const article of List) { + if (article.id === +id) { + return { + code: 20000, + data: article + } + } + } + } + }, + + { + url: '/vue-element-admin/article/pv', + type: 'get', + response: _ => { + return { + code: 20000, + data: { + pvData: [ + { key: 'PC', pv: 1024 }, + { key: 'mobile', pv: 1024 }, + { key: 'ios', pv: 1024 }, + { key: 'android', pv: 1024 } + ] + } + } + } + }, + + { + url: '/vue-element-admin/article/create', + type: 'post', + response: _ => { + return { + code: 20000, + data: 'success' + } + } + }, + + { + url: '/vue-element-admin/article/update', + type: 'post', + response: _ => { + return { + code: 20000, + data: 'success' + } + } + } +] + diff --git a/mock/index.js b/mock/index.js new file mode 100644 index 0000000..38cedf3 --- /dev/null +++ b/mock/index.js @@ -0,0 +1,65 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 +// +---------------------------------------------------------------------- +// | Author: CRMEB Team +// +---------------------------------------------------------------------- +import Mock from 'mockjs' +import { param2Obj } from '../src/utils' +import user from './user' +import role from './role' +import article from './article' +import search from './remote-search' + +const mocks = [ + ...user, + ...role, + ...article, + ...search +] + +// for front mock +// please use it cautiously, it will redefine XMLHttpRequest, +// which will cause many of your third-party libraries to be invalidated(like progress event). +export function mockXHR() { + // mock patch + // https://github.com/nuysoft/Mock/issues/300 + Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send + Mock.XHR.prototype.send = function() { + if (this.custom.xhr) { + this.custom.xhr.withCredentials = this.withCredentials || false + + if (this.responseType) { + this.custom.xhr.responseType = this.responseType + } + } + this.proxy_send(...arguments) + } + + function XHR2ExpressReqWrap(respond) { + return function(options) { + let result = null + if (respond instanceof Function) { + const { body, type, url } = options + // https://expressjs.com/en/4x/api.html#req + result = respond({ + method: type, + body: JSON.parse(body), + query: param2Obj(url) + }) + } else { + result = respond + } + return Mock.mock(result) + } + } + + for (const i of mocks) { + Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response)) + } +} + +export default mocks diff --git a/mock/mock-server.js b/mock/mock-server.js new file mode 100644 index 0000000..3fd5f73 --- /dev/null +++ b/mock/mock-server.js @@ -0,0 +1,93 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 +// +---------------------------------------------------------------------- +// | Author: CRMEB Team +// +---------------------------------------------------------------------- +const chokidar = require('chokidar') +const bodyParser = require('body-parser') +const chalk = require('chalk') +const path = require('path') +const Mock = require('mockjs') + +const mockDir = path.join(process.cwd(), 'mock') + +function registerRoutes(app) { + let mockLastIndex + const { default: mocks } = require('./index.js') + const mocksForServer = mocks.map(route => { + return responseFake(route.url, route.type, route.response) + }) + for (const mock of mocksForServer) { + app[mock.type](mock.url, mock.response) + mockLastIndex = app._router.stack.length + } + const mockRoutesLength = Object.keys(mocksForServer).length + return { + mockRoutesLength: mockRoutesLength, + mockStartIndex: mockLastIndex - mockRoutesLength + } +} + +function unregisterRoutes() { + Object.keys(require.cache).forEach(i => { + if (i.includes(mockDir)) { + delete require.cache[require.resolve(i)] + } + }) +} + +// for mock server +const responseFake = (url, type, respond) => { + return { + url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`), + type: type || 'get', + response(req, res) { + console.log('request invoke:' + req.path) + res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond)) + } + } +} + +module.exports = app => { + // es6 polyfill + require('@babel/register') + + // parse app.body + // https://expressjs.com/en/4x/api.html#req.body + app.use(bodyParser.json()) + app.use(bodyParser.urlencoded({ + extended: true + })) + + const mockRoutes = registerRoutes(app) + var mockRoutesLength = mockRoutes.mockRoutesLength + var mockStartIndex = mockRoutes.mockStartIndex + + // watch files, hot reload mock server + chokidar.watch(mockDir, { + ignored: /mock-server/, + ignoreInitial: true + }).on('all', (event, path) => { + if (event === 'change' || event === 'add') { + try { + // remove mock routes stack + app._router.stack.splice(mockStartIndex, mockRoutesLength) + + // clear routes cache + unregisterRoutes() + + const mockRoutes = registerRoutes(app) + mockRoutesLength = mockRoutes.mockRoutesLength + mockStartIndex = mockRoutes.mockStartIndex + + console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`)) + } catch (error) { + console.log(chalk.redBright(error)) + } + } + }) +} diff --git a/mock/remote-search.js b/mock/remote-search.js new file mode 100644 index 0000000..e1655be --- /dev/null +++ b/mock/remote-search.js @@ -0,0 +1,58 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 +// +---------------------------------------------------------------------- +// | Author: CRMEB Team +// +---------------------------------------------------------------------- +import Mock from 'mockjs' +const NameList = [] +const count = 100 +for (let i = 0; i < count; i++) { + NameList.push(Mock.mock({ + name: '@first' + })) +} +NameList.push({ name: 'mock-Pan' }) + +export default [ + // username search + { + url: '/vue-element-admin/search/user', + type: 'get', + response: config => { + const { name } = config.query + const mockNameList = NameList.filter(item => { + const lowerCaseName = item.name.toLowerCase() + return !(name && lowerCaseName.indexOf(name.toLowerCase()) < 0) + }) + return { + code: 20000, + data: { items: mockNameList } + } + } + }, + + // transaction list + { + url: '/vue-element-admin/transaction/list', + type: 'get', + response: _ => { + return { + code: 20000, + data: { + total: 20, + 'items|20': [{ + order_no: '@guid()', + timestamp: +Mock.Random.date('T'), + username: '@name()', + price: '@float(1000, 15000, 0, 2)', + 'status|1': ['success', 'pending'] + }] + } + } + } + } +] diff --git a/mock/role/index.js b/mock/role/index.js new file mode 100644 index 0000000..9fff9cc --- /dev/null +++ b/mock/role/index.js @@ -0,0 +1,107 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 +// +---------------------------------------------------------------------- +// | Author: CRMEB Team +// +---------------------------------------------------------------------- +import Mock from 'mockjs' +import { deepClone } from '../../src/utils/index.js' +import { asyncRoutes, constantRoutes } from './routes.js' + +const routes = deepClone([...constantRoutes, ...asyncRoutes]) + +const roles = [ + { + key: 'admin', + name: 'admin', + description: 'Super Administrator. Have access to view all pages.', + routes: routes + }, + { + key: 'editor', + name: 'editor', + description: 'Normal Editor. Can see all pages except permission page', + routes: routes.filter(i => i.path !== '/permission')// just a mock + }, + { + key: 'visitor', + name: 'visitor', + description: 'Just a visitor. Can only see the home page and the document page', + routes: [{ + path: '', + redirect: 'dashboard', + children: [ + { + path: 'dashboard', + name: 'Dashboard', + meta: { title: 'dashboard', icon: 'dashboard' } + } + ] + }] + } +] + +export default [ + // mock get all routes form server + { + url: '/vue-element-admin/routes', + type: 'get', + response: _ => { + return { + code: 20000, + data: routes + } + } + }, + + // mock get all roles form server + { + url: '/vue-element-admin/roles', + type: 'get', + response: _ => { + return { + code: 20000, + data: roles + } + } + }, + + // add role + { + url: '/vue-element-admin/role', + type: 'post', + response: { + code: 20000, + data: { + key: Mock.mock('@integer(300, 5000)') + } + } + }, + + // update role + { + url: '/vue-element-admin/role/[A-Za-z0-9]', + type: 'put', + response: { + code: 20000, + data: { + status: 'success' + } + } + }, + + // delete role + { + url: '/vue-element-admin/role/[A-Za-z0-9]', + type: 'delete', + response: { + code: 20000, + data: { + status: 'success' + } + } + } +] diff --git a/mock/role/routes.js b/mock/role/routes.js new file mode 100644 index 0000000..99d54e2 --- /dev/null +++ b/mock/role/routes.js @@ -0,0 +1,533 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 +// +---------------------------------------------------------------------- +// | Author: CRMEB Team +// +---------------------------------------------------------------------- +// Just a mock data +export const constantRoutes = [ + { + path: '/redirect', + component: 'layout/Layout', + hidden: true, + children: [ + { + path: '/redirect/:path*', + component: 'views/redirect/index' + } + ] + }, + { + path: '/login', + component: 'views/login/index', + hidden: true + }, + { + path: '/auth-redirect', + component: 'views/login/auth-redirect', + hidden: true + }, + { + path: '/404', + component: 'views/error-page/404', + hidden: true + }, + { + path: '/401', + component: 'views/error-page/401', + hidden: true + }, + { + path: '', + component: 'layout/Layout', + redirect: 'dashboard', + children: [ + { + path: 'dashboard', + component: 'views/dashboard/index', + name: 'Dashboard', + meta: { title: 'Dashboard', icon: 'dashboard', affix: true } + } + ] + }, + { + path: '/documentation', + component: 'layout/Layout', + children: [ + { + path: 'index', + component: 'views/documentation/index', + name: 'Documentation', + meta: { title: 'Documentation', icon: 'documentation', affix: true } + } + ] + }, + { + path: '/guide', + component: 'layout/Layout', + redirect: '/guide/index', + children: [ + { + path: 'index', + component: 'views/guide/index', + name: 'Guide', + meta: { title: 'Guide', icon: 'guide', noCache: true } + } + ] + } +] + +export const asyncRoutes = [ + { + path: '/permission', + component: 'layout/Layout', + redirect: '/permission/index', + alwaysShow: true, + meta: { + title: 'Permission', + icon: 'lock', + roles: ['admin', 'editor'] + }, + children: [ + { + path: 'page', + component: 'views/permission/page', + name: 'PagePermission', + meta: { + title: 'Page Permission', + roles: ['admin'] + } + }, + { + path: 'directive', + component: 'views/permission/directive', + name: 'DirectivePermission', + meta: { + title: 'Directive Permission' + } + }, + { + path: 'role', + component: 'views/permission/role', + name: 'RolePermission', + meta: { + title: 'Role Permission', + roles: ['admin'] + } + } + ] + }, + + { + path: '/icon', + component: 'layout/Layout', + children: [ + { + path: 'index', + component: 'views/icons/index', + name: 'Icons', + meta: { title: 'Icons', icon: 'icon', noCache: true } + } + ] + }, + + { + path: '/components', + component: 'layout/Layout', + redirect: 'noRedirect', + name: 'ComponentDemo', + meta: { + title: 'Components', + icon: 'component' + }, + children: [ + { + path: 'tinymce', + component: 'views/components-demo/tinymce', + name: 'TinymceDemo', + meta: { title: 'Tinymce' } + }, + { + path: 'markdown', + component: 'views/components-demo/markdown', + name: 'MarkdownDemo', + meta: { title: 'Markdown' } + }, + { + path: 'json-editor', + component: 'views/components-demo/json-editor', + name: 'JsonEditorDemo', + meta: { title: 'Json Editor' } + }, + { + path: 'split-pane', + component: 'views/components-demo/split-pane', + name: 'SplitpaneDemo', + meta: { title: 'SplitPane' } + }, + { + path: 'avatar-upload', + component: 'views/components-demo/avatar-upload', + name: 'AvatarUploadDemo', + meta: { title: 'Avatar Upload' } + }, + { + path: 'dropzone', + component: 'views/components-demo/dropzone', + name: 'DropzoneDemo', + meta: { title: 'Dropzone' } + }, + { + path: 'sticky', + component: 'views/components-demo/sticky', + name: 'StickyDemo', + meta: { title: 'Sticky' } + }, + { + path: 'count-to', + component: 'views/components-demo/count-to', + name: 'CountToDemo', + meta: { title: 'Count To' } + }, + { + path: 'mixin', + component: 'views/components-demo/mixin', + name: 'ComponentMixinDemo', + meta: { title: 'componentMixin' } + }, + { + path: 'back-to-top', + component: 'views/components-demo/back-to-top', + name: 'BackToTopDemo', + meta: { title: 'Back To Top' } + }, + { + path: 'drag-dialog', + component: 'views/components-demo/drag-dialog', + name: 'DragDialogDemo', + meta: { title: 'Drag Dialog' } + }, + { + path: 'drag-select', + component: 'views/components-demo/drag-select', + name: 'DragSelectDemo', + meta: { title: 'Drag Select' } + }, + { + path: 'dnd-list', + component: 'views/components-demo/dnd-list', + name: 'DndListDemo', + meta: { title: 'Dnd List' } + }, + { + path: 'drag-kanban', + component: 'views/components-demo/drag-kanban', + name: 'DragKanbanDemo', + meta: { title: 'Drag Kanban' } + } + ] + }, + { + path: '/charts', + component: 'layout/Layout', + redirect: 'noRedirect', + name: 'Charts', + meta: { + title: 'Charts', + icon: 'chart' + }, + children: [ + { + path: 'keyboard', + component: 'views/charts/keyboard', + name: 'KeyboardChart', + meta: { title: 'Keyboard Chart', noCache: true } + }, + { + path: 'line', + component: 'views/charts/line', + name: 'LineChart', + meta: { title: 'Line Chart', noCache: true } + }, + { + path: 'mixchart', + component: 'views/charts/mixChart', + name: 'MixChart', + meta: { title: 'Mix Chart', noCache: true } + } + ] + }, + { + path: '/nested', + component: 'layout/Layout', + redirect: '/nested/menu1/menu1-1', + name: 'Nested', + meta: { + title: 'Nested', + icon: 'nested' + }, + children: [ + { + path: 'menu1', + component: 'views/nested/menu1/index', + name: 'Menu1', + meta: { title: 'Menu1' }, + redirect: '/nested/menu1/menu1-1', + children: [ + { + path: 'menu1-1', + component: 'views/nested/menu1/menu1-1', + name: 'Menu1-1', + meta: { title: 'Menu1-1' } + }, + { + path: 'menu1-2', + component: 'views/nested/menu1/menu1-2', + name: 'Menu1-2', + redirect: '/nested/menu1/menu1-2/menu1-2-1', + meta: { title: 'Menu1-2' }, + children: [ + { + path: 'menu1-2-1', + component: 'views/nested/menu1/menu1-2/menu1-2-1', + name: 'Menu1-2-1', + meta: { title: 'Menu1-2-1' } + }, + { + path: 'menu1-2-2', + component: 'views/nested/menu1/menu1-2/menu1-2-2', + name: 'Menu1-2-2', + meta: { title: 'Menu1-2-2' } + } + ] + }, + { + path: 'menu1-3', + component: 'views/nested/menu1/menu1-3', + name: 'Menu1-3', + meta: { title: 'Menu1-3' } + } + ] + }, + { + path: 'menu2', + name: 'Menu2', + component: 'views/nested/menu2/index', + meta: { title: 'Menu2' } + } + ] + }, + + { + path: '/example', + component: 'layout/Layout', + redirect: '/example/list', + name: 'Example', + meta: { + title: 'Example', + icon: 'example' + }, + children: [ + { + path: 'create', + component: 'views/example/create', + name: 'CreateArticle', + meta: { title: 'Create Article', icon: 'edit' } + }, + { + path: 'edit/:id(\\d+)', + component: 'views/example/edit', + name: 'EditArticle', + meta: { title: 'Edit Article', noCache: true }, + hidden: true + }, + { + path: 'list', + component: 'views/example/list', + name: 'ArticleList', + meta: { title: 'Article List', icon: 'list' } + } + ] + }, + + { + path: '/tab', + component: 'layout/Layout', + children: [ + { + path: 'index', + component: 'views/tab/index', + name: 'Tab', + meta: { title: 'Tab', icon: 'tab' } + } + ] + }, + + { + path: '/error', + component: 'layout/Layout', + redirect: 'noRedirect', + name: 'ErrorPages', + meta: { + title: 'Error Pages', + icon: '404' + }, + children: [ + { + path: '401', + component: 'views/error-page/401', + name: 'Page401', + meta: { title: 'Page 401', noCache: true } + }, + { + path: '404', + component: 'views/error-page/404', + name: 'Page404', + meta: { title: 'Page 404', noCache: true } + } + ] + }, + + { + path: '/error-log', + component: 'layout/Layout', + redirect: 'noRedirect', + children: [ + { + path: 'log', + component: 'views/error-log/index', + name: 'ErrorLog', + meta: { title: 'Error Log', icon: 'bug' } + } + ] + }, + + { + path: '/excel', + component: 'layout/Layout', + redirect: '/excel/export-excel', + name: 'Excel', + meta: { + title: 'Excel', + icon: 'excel' + }, + children: [ + { + path: 'export-excel', + component: 'views/excel/export-excel', + name: 'ExportExcel', + meta: { title: 'Export Excel' } + }, + { + path: 'export-selected-excel', + component: 'views/excel/select-excel', + name: 'SelectExcel', + meta: { title: 'Select Excel' } + }, + { + path: 'export-merge-header', + component: 'views/excel/merge-header', + name: 'MergeHeader', + meta: { title: 'Merge Header' } + }, + { + path: 'upload-excel', + component: 'views/excel/upload-excel', + name: 'UploadExcel', + meta: { title: 'Upload Excel' } + } + ] + }, + + { + path: '/zip', + component: 'layout/Layout', + redirect: '/zip/download', + alwaysShow: true, + meta: { title: 'Zip', icon: 'zip' }, + children: [ + { + path: 'download', + component: 'views/zip/index', + name: 'ExportZip', + meta: { title: 'Export Zip' } + } + ] + }, + + { + path: '/pdf', + component: 'layout/Layout', + redirect: '/pdf/index', + children: [ + { + path: 'index', + component: 'views/pdf/index', + name: 'PDF', + meta: { title: 'PDF', icon: 'pdf' } + } + ] + }, + { + path: '/pdf/download', + component: 'views/pdf/download', + hidden: true + }, + + { + path: '/theme', + component: 'layout/Layout', + redirect: 'noRedirect', + children: [ + { + path: 'index', + component: 'views/theme/index', + name: 'Theme', + meta: { title: 'Theme', icon: 'theme' } + } + ] + }, + + { + path: '/clipboard', + component: 'layout/Layout', + redirect: 'noRedirect', + children: [ + { + path: 'index', + component: 'views/clipboard/index', + name: 'ClipboardDemo', + meta: { title: 'Clipboard Demo', icon: 'clipboard' } + } + ] + }, + + { + path: '/i18n', + component: 'layout/Layout', + children: [ + { + path: 'index', + component: 'views/i18n-demo/index', + name: 'I18n', + meta: { title: 'I18n', icon: 'international' } + } + ] + }, + + { + path: 'external-link', + component: 'layout/Layout', + children: [ + { + path: 'https://github.com/PanJiaChen/vue-element-admin', + meta: { title: 'External Link', icon: 'link' } + } + ] + }, + + { path: '*', redirect: '/404', hidden: true } +] diff --git a/mock/user.js b/mock/user.js new file mode 100644 index 0000000..2a06fa6 --- /dev/null +++ b/mock/user.js @@ -0,0 +1,92 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 +// +---------------------------------------------------------------------- +// | Author: CRMEB Team +// +---------------------------------------------------------------------- +const tokens = { + admin: { + token: 'admin-token' + }, + editor: { + token: 'editor-token' + } +} + +const users = { + 'admin-token': { + roles: ['admin'], + introduction: 'I am a super administrator', + avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif', + name: 'Super Admin' + }, + 'editor-token': { + roles: ['editor'], + introduction: 'I am an editor', + avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif', + name: 'Normal Editor' + } +} + +export default [ + // user login + { + url: '/vue-element-admin/user/login', + type: 'post', + response: config => { + const { username } = config.body + const token = tokens[username] + + // mock error + if (!token) { + return { + code: 60204, + message: 'Account and password are incorrect.' + } + } + + return { + code: 20000, + data: token + } + } + }, + + // get user info + { + url: '/vue-element-admin/user/info\.*', + type: 'get', + response: config => { + const { token } = config.query + const info = users[token] + + // mock error + if (!info) { + return { + code: 50008, + message: 'Login failed, unable to get user details.' + } + } + + return { + code: 20000, + data: info + } + } + }, + + // user logout + { + url: '/vue-element-admin/user/logout', + type: 'post', + response: _ => { + return { + code: 20000, + data: 'success' + } + } + } +] diff --git a/package.json b/package.json new file mode 100644 index 0000000..f7da6b1 --- /dev/null +++ b/package.json @@ -0,0 +1,134 @@ +{ + "name": "vue-element-admin", + "version": "4.2.1", + "description": "A magical vue admin. An out-of-box UI solution for enterprise applications. Newest development stack of vue. Lots of awesome features", + "author": "Pan ", + "license": "MIT", + "scripts": { + "dev": "vue-cli-service serve", + "build:prod": "vue-cli-service build", + "build:stage": "vue-cli-service build --mode staging", + "preview": "node build/index.js --preview", + "lint": "eslint --ext .js,.vue src", + "test:unit": "jest --clearCache && vue-cli-service test:unit", + "test:ci": "npm run lint && npm run test:unit", + "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml", + "new": "plop", + "postinstall": "patch-package" + }, + "lint-staged": { + "src/**/*.{js,vue}": [ + "eslint --fix", + "git add" + ] + }, + "keywords": [ + "vue", + "admin", + "dashboard", + "element-ui", + "boilerplate", + "admin-template", + "management-system" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/PanJiaChen/vue-element-admin.git" + }, + "bugs": { + "url": "https://github.com/PanJiaChen/vue-element-admin/issues" + }, + "dependencies": { + "@form-create/element-ui": "^2.5.27", + "axios": "0.18.1", + "clipboard": "2.0.4", + "codemirror": "5.45.0", + "cos-js-sdk-v5": "^1.4.5", + "crypto-js": "^4.1.1", + "driver.js": "0.9.5", + "dropzone": "5.5.1", + "echarts": "4.2.1", + "element-ui": "2.13.2", + "exceljs": "^4.2.0", + "file-saver": "2.0.1", + "fuse.js": "3.4.4", + "html2canvas": "^1.1.0", + "js-cookie": "2.2.0", + "jsonlint": "1.6.3", + "jszip": "3.2.1", + "moment": "^2.29.1", + "monaco-editor": "^0.19.3", + "node-sass": "^4.13.1", + "normalize.css": "7.0.0", + "nprogress": "0.2.0", + "path-to-regexp": "2.4.0", + "print-js": "^1.6.0", + "printjs": "^1.1.0", + "qiniu-js": "^2.5.5", + "qrcodejs2": "0.0.2", + "screenfull": "4.2.0", + "showdown": "1.9.0", + "sortablejs": "^1.15.0", + "view-design": "^4.3.2", + "v-viewer": "^1.5.1", + "vue": "2.6.10", + "vue-awesome-swiper": "^3.1.3", + "vue-count-to": "1.0.13", + "vue-qr": "^2.5.0", + "vue-router": "3.0.2", + "vue-splitpane": "1.0.4", + "vue-ueditor-wrap": "^2.4.1", + "vuedraggable": "2.20.0", + "vuex": "3.1.0", + "wangeditor": "^4.7.12", + "xlsx": "0.14.1" + }, + "devDependencies": { + "@babel/core": "7.0.0", + "@babel/register": "7.0.0", + "@vue/cli-plugin-babel": "3.5.3", + "@vue/cli-plugin-eslint": "^3.9.1", + "@vue/cli-plugin-unit-jest": "3.5.3", + "@vue/cli-service": "3.5.3", + "@vue/test-utils": "1.0.0-beta.29", + "autoprefixer": "^9.5.1", + "babel-core": "7.0.0-bridge.0", + "babel-eslint": "10.0.1", + "babel-jest": "23.6.0", + "cache-loader": "^2.0.1", + "chalk": "2.4.2", + "chokidar": "2.1.5", + "connect": "3.6.6", + "eslint": "5.15.3", + "eslint-plugin-vue": "5.2.2", + "html-webpack-plugin": "3.2.0", + "husky": "1.3.1", + "lint-staged": "8.1.5", + "mockjs": "1.0.1-beta3", + "patch-package": "^6.2.2", + "plop": "2.3.0", + "runjs": "^4.3.2", + "sass-loader": "^7.3.1", + "script-ext-html-webpack-plugin": "2.1.3", + "script-loader": "^0.7.2", + "serve-static": "^1.13.2", + "svg-sprite-loader": "4.1.3", + "svgo": "1.2.0", + "vue-lazyload": "^1.3.3", + "vue-template-compiler": "2.6.10", + "vuex-persist": "^3.1.3" + }, + "engines": { + "node": ">=8.9", + "npm": ">= 3.0.0" + }, + "browserslist": [ + "> 1%", + "last 2 versions" + ], + "homepage": "https://github.com/PanJiaChen/vue-element-admin#readme", + "main": ".eslintrc.js", + "directories": { + "test": "tests" + } +} diff --git a/patches/element-ui+2.13.2.patch b/patches/element-ui+2.13.2.patch new file mode 100644 index 0000000..e7d2526 --- /dev/null +++ b/patches/element-ui+2.13.2.patch @@ -0,0 +1,69 @@ +diff --git a/node_modules/element-ui/lib/cascader-panel.js b/node_modules/element-ui/lib/cascader-panel.js +index 0f3f827..aba337b 100644 +--- a/node_modules/element-ui/lib/cascader-panel.js ++++ b/node_modules/element-ui/lib/cascader-panel.js +@@ -1050,7 +1050,7 @@ var store_Store = function () { + }; + + Store.prototype.getNodeByValue = function getNodeByValue(value) { +- if (value) { ++ if (value || value === 0) { + var nodes = this.getFlattedNodes(false, !this.config.lazy).filter(function (node) { + return Object(util_["valueEquals"])(node.path, value) || node.value === value; + }); +diff --git a/node_modules/element-ui/lib/cascader.js b/node_modules/element-ui/lib/cascader.js +index ee4bc3d..d39b5a4 100644 +--- a/node_modules/element-ui/lib/cascader.js ++++ b/node_modules/element-ui/lib/cascader.js +@@ -911,7 +911,7 @@ var InputSizeMap = { + data: function data() { + return { + dropDownVisible: false, +- checkedValue: this.value || null, ++ checkedValue: this.value, + inputHover: false, + inputValue: null, + presentText: null, +@@ -1039,7 +1039,7 @@ var InputSizeMap = { + this.inputInitialHeight = input.$el.offsetHeight || InputSizeMap[this.realSize] || 40; + } + +- if (!Object(util_["isEmpty"])(this.value)) { ++ if (this.value === 0 || !Object(util_["isEmpty"])(this.value)) { + this.computePresentContent(); + } + +@@ -1189,7 +1189,7 @@ var InputSizeMap = { + var checkedValue = this.checkedValue, + config = this.config; + +- if (!Object(util_["isEmpty"])(checkedValue)) { ++ if (checkedValue === 0 || !Object(util_["isEmpty"])(checkedValue)) { + var node = this.panel.getNodeByValue(checkedValue); + if (node && (config.checkStrictly || node.isLeaf)) { + this.presentText = node.getText(this.showAllLevels, this.separator); +diff --git a/node_modules/element-ui/lib/utils/util.js b/node_modules/element-ui/lib/utils/util.js +index 1ced2ab..bfa9001 100644 +--- a/node_modules/element-ui/lib/utils/util.js ++++ b/node_modules/element-ui/lib/utils/util.js +@@ -215,7 +215,7 @@ var isEmpty = exports.isEmpty = function isEmpty(val) { + + if (typeof val === 'boolean') return false; + +- if (typeof val === 'number') return !val; ++ if (typeof val === 'number') return false; + + if (val instanceof Error) return val.message === ''; + +diff --git a/node_modules/element-ui/packages/.DS_Store b/node_modules/element-ui/packages/.DS_Store +deleted file mode 100644 +index 1c1f7f4..0000000 +Binary files a/node_modules/element-ui/packages/.DS_Store and /dev/null differ +diff --git a/node_modules/element-ui/packages/theme-chalk/src/.DS_Store b/node_modules/element-ui/packages/theme-chalk/src/.DS_Store +deleted file mode 100644 +index 94b4cf9..0000000 +Binary files a/node_modules/element-ui/packages/theme-chalk/src/.DS_Store and /dev/null differ +diff --git a/node_modules/element-ui/packages/theme-chalk/src/fonts/.DS_Store b/node_modules/element-ui/packages/theme-chalk/src/fonts/.DS_Store +deleted file mode 100644 +index 5008ddf..0000000 +Binary files a/node_modules/element-ui/packages/theme-chalk/src/fonts/.DS_Store and /dev/null differ diff --git a/plop-templates/component/index.hbs b/plop-templates/component/index.hbs new file mode 100644 index 0000000..7661055 --- /dev/null +++ b/plop-templates/component/index.hbs @@ -0,0 +1,26 @@ +{{#if template}} + +{{/if}} + +{{#if script}} + +{{/if}} + +{{#if style}} + +{{/if}} diff --git a/plop-templates/component/prompt.js b/plop-templates/component/prompt.js new file mode 100644 index 0000000..3723e8e --- /dev/null +++ b/plop-templates/component/prompt.js @@ -0,0 +1,55 @@ +const { notEmpty } = require('../utils.js') + +module.exports = { + description: 'generate vue component', + prompts: [{ + type: 'input', + name: 'name', + message: 'component name please', + validate: notEmpty('name') + }, + { + type: 'checkbox', + name: 'blocks', + message: 'Blocks:', + choices: [{ + name: '