From 76942b2a71e0e46d12a3ecd9eae679fc3189d6f3 Mon Sep 17 00:00:00 2001 From: gboy Date: Fri, 22 Mar 2024 15:48:25 +0800 Subject: [PATCH] first --- .editorconfig | 14 + .env.development | 20 + .env.production | 7 + .env.staging | 8 + .eslintignore | 5 + .eslintrc.js | 198 + .github/FUNDING.yml | 4 + .github/ISSUE_TEMPLATE/bug_report.md | 33 + .github/ISSUE_TEMPLATE/feature_request.md | 7 + .github/ISSUE_TEMPLATE/question.md | 35 + .gitignore | 23 + .travis.yml | 5 + LICENSE | 21 + README.es.md | 263 + README.ja.md | 263 + README.md | 263 + README.zh-CN.md | 263 + babel.config.js | 5 + build/index.js | 45 + jest.config.js | 24 + jsconfig.json | 9 + mock/article.js | 125 + mock/index.js | 66 + mock/mock-server.js | 93 + mock/remote-search.js | 60 + mock/role/index.js | 98 + mock/role/routes.js | 525 + mock/user.js | 92 + package.json | 136 + patches/element-ui+2.13.2.patch | 69 + plop-templates/component/index.hbs | 26 + plop-templates/component/prompt.js | 64 + 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 | 95 + .../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 | 165 + 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 | 1905 + .../themes/default/css/ueditor.min.css | 8 + public/UEditor/themes/default/dialogbase.css | 100 + .../UEditor/themes/default/html/preview.html | 22 + .../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 | 7105 ++ 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 | 29559 +++++ public/UEditor/ueditor.all.min.js | 18 + public/UEditor/ueditor.config.js | 474 + public/UEditor/ueditor.parse.js | 1022 + public/UEditor/ueditor.parse.min.js | 7 + public/favicon.ico | Bin 0 -> 4286 bytes public/index.html | 21 + public/screen/110000.json | 1 + public/screen/120000.json | 1 + public/screen/130000.json | 1 + public/screen/140000.json | 1 + public/screen/150000.json | 1 + public/screen/210000.json | 1 + public/screen/220000.json | 1 + public/screen/230000.json | 1 + public/screen/310000.json | 1 + public/screen/320000.json | 1 + public/screen/330000.json | 1 + public/screen/340000.json | 1 + public/screen/350000.json | 1 + public/screen/360000.json | 1 + public/screen/370000.json | 1 + public/screen/410000.json | 1 + public/screen/420000.json | 1 + public/screen/430000.json | 1 + public/screen/440000.json | 1 + public/screen/450000.json | 1 + public/screen/460000.json | 1 + public/screen/500000.json | 1 + public/screen/510000.json | 1 + public/screen/520000.json | 1 + public/screen/530000.json | 1 + public/screen/540000.json | 1 + public/screen/610000.json | 1 + public/screen/620000.json | 1 + public/screen/630000.json | 1 + public/screen/640000.json | 1 + public/screen/650000.json | 1 + public/screen/710000.json | 1 + public/screen/810000.json | 1 + public/screen/820000.json | 1 + public/screen/china.json | 98604 ++++++++++++++++ public/screen/chinaNanhai.json | 1 + sh.exe.stackdump | 11 + src/App.vue | 69 + src/api/accounts.js | 274 + src/api/app.js | 233 + src/api/cms.js | 83 + src/api/community.js | 165 + src/api/diy.js | 361 + src/api/freight.js | 47 + src/api/home.js | 84 + src/api/maintain.js | 114 + src/api/marketing.js | 665 + src/api/merchant.js | 380 + src/api/order.js | 165 + src/api/product.js | 530 + src/api/promoter.js | 233 + src/api/request.js | 82 + src/api/screen.js | 28 + src/api/setting.js | 415 + src/api/sms.js | 94 + src/api/system.js | 389 + src/api/systemForm.js | 73 + src/api/user.js | 477 + src/api/userFeedback.js | 77 + 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/bluesgin.png | Bin 0 -> 20432 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/dui.png | Bin 0 -> 177 bytes src/assets/images/edit.png | Bin 0 -> 437 bytes src/assets/images/electric.png | Bin 0 -> 1773 bytes src/assets/images/expressi.jpg | Bin 0 -> 2634 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/goods_icon.png | Bin 0 -> 2028 bytes src/assets/images/greesgin.png | Bin 0 -> 23714 bytes src/assets/images/group_title.png | Bin 0 -> 1570 bytes src/assets/images/head.gif | Bin 0 -> 129103 bytes src/assets/images/icons.png | Bin 0 -> 19694 bytes src/assets/images/integral.png | Bin 0 -> 142579 bytes src/assets/images/laber.png | Bin 0 -> 11730 bytes src/assets/images/member.png | Bin 0 -> 16763 bytes src/assets/images/member01.png | Bin 0 -> 2626 bytes src/assets/images/mobilefoot.png | Bin 0 -> 1348 bytes src/assets/images/mobilehead.png | Bin 0 -> 12673 bytes src/assets/images/moren.jpg | Bin 0 -> 2768 bytes src/assets/images/news.png | Bin 0 -> 2991 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/oragesgin.png | Bin 0 -> 20903 bytes src/assets/images/order1.png | Bin 0 -> 1183 bytes src/assets/images/order2.png | Bin 0 -> 1306 bytes src/assets/images/order3.png | Bin 0 -> 1759 bytes src/assets/images/order4.png | Bin 0 -> 1936 bytes src/assets/images/order5.png | Bin 0 -> 1576 bytes src/assets/images/order_icon.png | Bin 0 -> 1193 bytes src/assets/images/pclogin.png | Bin 0 -> 82634 bytes src/assets/images/phoneBox.png | Bin 0 -> 8601 bytes src/assets/images/pinksgin.png | Bin 0 -> 21931 bytes src/assets/images/plant_bg.png | Bin 0 -> 6459 bytes src/assets/images/plant_form.png | Bin 0 -> 8968 bytes src/assets/images/plant_title.png | Bin 0 -> 1425 bytes src/assets/images/points_mall.png | Bin 0 -> 79096 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/purplesign.png | Bin 0 -> 20556 bytes src/assets/images/rank_cate.png | Bin 0 -> 523 bytes src/assets/images/rank_num.png | Bin 0 -> 257 bytes src/assets/images/rank_title.png | Bin 0 -> 4841 bytes src/assets/images/redsgin.png | Bin 0 -> 22235 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 -> 24394 bytes src/assets/images/sort02.jpg | Bin 0 -> 17689 bytes src/assets/images/sort03.jpg | Bin 0 -> 26578 bytes src/assets/images/sort11.jpg | Bin 0 -> 25526 bytes src/assets/images/sort12.jpg | Bin 0 -> 18771 bytes src/assets/images/sort13.jpg | Bin 0 -> 27670 bytes src/assets/images/spike_title.png | Bin 0 -> 1949 bytes src/assets/images/store_avatar.png | Bin 0 -> 17370 bytes src/assets/images/store_bg.png | Bin 0 -> 145016 bytes src/assets/images/store_icon.png | Bin 0 -> 2599 bytes src/assets/images/svip.png | Bin 0 -> 3546 bytes src/assets/images/themStyle/blue1.jpg | Bin 0 -> 176997 bytes src/assets/images/themStyle/blue2.jpg | Bin 0 -> 121784 bytes src/assets/images/themStyle/blue3.jpg | Bin 0 -> 119728 bytes src/assets/images/themStyle/green1.jpg | Bin 0 -> 170185 bytes src/assets/images/themStyle/green2.jpg | Bin 0 -> 119430 bytes src/assets/images/themStyle/green3.jpg | Bin 0 -> 117574 bytes src/assets/images/themStyle/orange1.jpg | Bin 0 -> 171494 bytes src/assets/images/themStyle/orange2.jpg | Bin 0 -> 120052 bytes src/assets/images/themStyle/orange3.jpg | Bin 0 -> 118704 bytes src/assets/images/themStyle/pink1.jpg | Bin 0 -> 163865 bytes src/assets/images/themStyle/pink2.jpg | Bin 0 -> 113670 bytes src/assets/images/themStyle/pink3.jpg | Bin 0 -> 113778 bytes src/assets/images/themStyle/purple1.jpg | Bin 0 -> 167935 bytes src/assets/images/themStyle/purple2.jpg | Bin 0 -> 115959 bytes src/assets/images/themStyle/purple3.jpg | Bin 0 -> 114242 bytes src/assets/images/themStyle/red1.jpg | Bin 0 -> 172741 bytes src/assets/images/themStyle/red2.jpg | Bin 0 -> 121761 bytes src/assets/images/themStyle/red3.jpg | Bin 0 -> 119315 bytes src/assets/images/topic_title.png | Bin 0 -> 4695 bytes src/assets/images/type_icon.png | Bin 0 -> 3125 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 | 277 + 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/SvgIcon/index.vue | 71 + src/components/ThemePicker/index.vue | 183 + src/components/TopNav/index.vue | 200 + src/components/attrList/index.vue | 110 + src/components/breadCrumb/index.vue | 92 + src/components/cards/index.vue | 130 + src/components/copyright/index.vue | 73 + src/components/crossStore/index.vue | 304 + src/components/echarts/index.vue | 85 + src/components/echarts/mixins/resize.js | 65 + src/components/exportFile/fileList.vue | 134 + src/components/from/from.vue | 114 + src/components/goodList/index.vue | 179 + src/components/goodsList/index.vue | 413 + src/components/guidancePop/index.vue | 53 + src/components/hamBurger/index.vue | 53 + src/components/headerNotice/index.vue | 323 + src/components/headerSearch/index.vue | 189 + src/components/iconFrom/element-icons.js | 12 + src/components/iconFrom/index.vue | 117 + src/components/labelList/index.vue | 142 + src/components/linkaddress/index.vue | 715 + .../mobileConfig/c_auxiliary_box.vue | 84 + .../mobileConfig/c_auxiliary_line.vue | 97 + src/components/mobileConfig/c_banner.vue | 144 + .../mobileConfig/c_home_bargain.vue | 186 + src/components/mobileConfig/c_home_comb.vue | 156 + src/components/mobileConfig/c_home_coupon.vue | 114 + .../mobileConfig/c_home_goods_list.vue | 263 + src/components/mobileConfig/c_home_hot.vue | 128 + .../mobileConfig/c_home_hotranking.vue | 113 + src/components/mobileConfig/c_home_menu.vue | 189 + src/components/mobileConfig/c_home_pink.vue | 168 + src/components/mobileConfig/c_home_plant.vue | 146 + .../mobileConfig/c_home_presell.vue | 150 + .../mobileConfig/c_home_seckill.vue | 141 + .../mobileConfig/c_home_service.vue | 119 + src/components/mobileConfig/c_home_shop.vue | 148 + src/components/mobileConfig/c_home_title.vue | 141 + src/components/mobileConfig/c_home_topic.vue | 180 + src/components/mobileConfig/c_nav_bar.vue | 100 + src/components/mobileConfig/c_news_roll.vue | 140 + .../mobileConfig/c_picture_cube.vue | 119 + src/components/mobileConfig/c_search_box.vue | 135 + src/components/mobileConfig/c_ueditor_box.vue | 109 + .../mobileConfig/c_wechat_attention.vue | 125 + src/components/mobileConfig/c_wechat_live.vue | 97 + src/components/mobileConfig/index.js | 18 + src/components/mobileConfig/pageFoot.vue | 106 + src/components/mobileConfig/pageTitle.vue | 257 + .../mobileConfigRight/c_bg_color.vue | 98 + .../mobileConfigRight/c_cascader.vue | 82 + .../mobileConfigRight/c_comb_data.vue | 113 + src/components/mobileConfigRight/c_foot.vue | 278 + src/components/mobileConfigRight/c_goods.vue | 153 + .../mobileConfigRight/c_hot_box.vue | 22 + .../mobileConfigRight/c_hot_imgs.vue | 252 + .../mobileConfigRight/c_hot_word.vue | 153 + .../mobileConfigRight/c_input_item.vue | 91 + .../mobileConfigRight/c_input_number.vue | 88 + .../mobileConfigRight/c_is_show.vue | 73 + .../mobileConfigRight/c_menu_list.vue | 329 + .../mobileConfigRight/c_page_ueditor.vue | 127 + .../mobileConfigRight/c_pictrue.vue | 355 + .../mobileConfigRight/c_product.vue | 220 + src/components/mobileConfigRight/c_radio.vue | 85 + src/components/mobileConfigRight/c_select.vue | 79 + .../mobileConfigRight/c_select_item.vue | 203 + .../mobileConfigRight/c_select_list.vue | 255 + src/components/mobileConfigRight/c_set_up.vue | 68 + src/components/mobileConfigRight/c_slider.vue | 71 + src/components/mobileConfigRight/c_status.vue | 95 + src/components/mobileConfigRight/c_tab.vue | 144 + src/components/mobileConfigRight/c_text.vue | 68 + .../mobileConfigRight/c_txt_tab.vue | 144 + .../mobileConfigRight/c_upload_img.vue | 179 + 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 | 110 + .../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 | 182 + .../mobileFormPage/home_upload_picture.vue | 138 + src/components/mobileFormPage/index.js | 18 + src/components/mobilePage/banner.vue | 322 + src/components/mobilePage/home_bargain.vue | 601 + src/components/mobilePage/home_comb.vue | 449 + src/components/mobilePage/home_coupon.vue | 353 + src/components/mobilePage/home_goods_list.vue | 854 + src/components/mobilePage/home_hot.vue | 442 + src/components/mobilePage/home_hotranking.vue | 422 + src/components/mobilePage/home_menu.vue | 515 + src/components/mobilePage/home_news_roll.vue | 252 + src/components/mobilePage/home_pink.vue | 535 + src/components/mobilePage/home_plant.vue | 408 + src/components/mobilePage/home_presell.vue | 496 + src/components/mobilePage/home_seckill.vue | 539 + src/components/mobilePage/home_service.vue | 135 + src/components/mobilePage/home_shop.vue | 465 + src/components/mobilePage/home_title.vue | 235 + src/components/mobilePage/home_topic.vue | 404 + src/components/mobilePage/index.js | 17 + src/components/mobilePage/nav_bar.vue | 225 + src/components/mobilePage/picture_cube.vue | 465 + src/components/mobilePage/search_box.vue | 242 + src/components/mobilePage/wechat_live.vue | 503 + src/components/mobilePage/z_auxiliary_box.vue | 114 + .../mobilePage/z_auxiliary_line.vue | 157 + src/components/mobilePage/z_ueditor.vue | 136 + .../mobilePage/z_wechat_attention.vue | 209 + src/components/newsCategory/index.vue | 345 + .../newsCategory/newsCategoryFrom/index.js | 31 + .../newsCategory/newsCategoryFrom/index.vue | 56 + src/components/pagesFoot/index.vue | 120 + src/components/previewBox/index.vue | 66 + src/components/referrerList/index.vue | 165 + src/components/rightBtn/index.vue | 38 + src/components/rightPanel/index.vue | 154 + src/components/screenFull/index.vue | 69 + src/components/settingGuide/app.vue | 142 + src/components/settingGuide/index.js | 16 + src/components/settingGuide/routine.vue | 255 + src/components/settingGuide/wechat.vue | 379 + src/components/ueditorFrom/index.vue | 104 + src/components/uploadImg/index.vue | 532 + src/components/uploadPicture/index.vue | 1023 + .../uploadPicture/uploadFrom/index.js | 32 + .../uploadPicture/uploadFrom/index.vue | 54 + src/components/uploadVideo/index.vue | 142 + src/components/userList/index.vue | 151 + src/components/verifition/Verify.vue | 501 + .../verifition/Verify/VerifyPoints.vue | 350 + .../verifition/Verify/VerifySlide.vue | 511 + src/components/verifition/utils/ase.js | 21 + src/components/verifition/utils/util.js | 45 + src/components/wangEditor/editor.js | 36 + src/components/wangEditor/html.js | 35 + src/components/wangEditor/index.vue | 220 + src/components/wangEditor/monaco.vue | 76 + src/directive/clipboard/clipboard.js | 57 + src/directive/clipboard/index.js | 22 + src/directive/el-drag-dialog/drag.js | 86 + src/directive/el-drag-dialog/index.js | 22 + src/directive/el-table/adaptive.js | 50 + src/directive/el-table/index.js | 22 + src/directive/permission/index.js | 22 + src/directive/permission/permission.js | 31 + src/directive/sticky.js | 100 + src/directive/waves/index.js | 22 + src/directive/waves/waves.css | 26 + src/directive/waves/waves.js | 81 + src/filters/commFilter.js | 506 + 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 | 156 + src/layout/component/columnsAside.vue | 311 + src/layout/component/header.vue | 33 + src/layout/component/main.vue | 101 + src/layout/component/transverseAside.vue | 328 + src/layout/footer/index.vue | 39 + src/layout/index.vue | 101 + src/layout/logo/index.vue | 102 + 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 | 98 + src/layout/navBars/breadcrumb/search.vue | 124 + src/layout/navBars/breadcrumb/setings.vue | 824 + src/layout/navBars/breadcrumb/theme.js | 140 + src/layout/navBars/breadcrumb/user.vue | 464 + src/layout/navBars/breadcrumb/userNews.vue | 301 + src/layout/navBars/index.vue | 44 + src/layout/navBars/tagsView/contextmenu.vue | 125 + src/layout/navBars/tagsView/tagsView.vue | 662 + 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/constants.js | 38 + src/libs/currency.js | 431 + src/libs/dataScreen.js | 67 + src/libs/dd-moment.js | 92 + src/libs/index.js | 18 + src/libs/modal-form.js | 89 + src/libs/modal-newsCategory.js | 63 + src/libs/modal-upload.js | 50 + src/libs/modal.js | 287 + src/libs/notice.js | 91 + src/libs/public.js | 87 + src/libs/settingMer.js | 26 + src/libs/socket.js | 120 + src/libs/system/index.js | 236 + src/libs/tools.js | 241 + src/libs/types.js | 47 + src/libs/util.cookies.js | 101 + src/libs/util.db.js | 22 + src/libs/util.js | 70 + src/libs/util.log.js | 89 + src/main.js | 202 + src/permission.js | 75 + src/router/index.js | 217 + src/router/modules/accounts.js | 156 + src/router/modules/app.js | 128 + src/router/modules/cms.js | 51 + src/router/modules/community.js | 63 + src/router/modules/config.js | 52 + src/router/modules/delivery.js | 50 + src/router/modules/freight.js | 43 + src/router/modules/group.js | 68 + src/router/modules/maintain.js | 61 + src/router/modules/marketing.js | 481 + src/router/modules/merchant.js | 135 + src/router/modules/order.js | 51 + src/router/modules/product.js | 140 + src/router/modules/promoter.js | 99 + src/router/modules/routine.js | 34 + src/router/modules/safe.js | 42 + src/router/modules/service.js | 58 + src/router/modules/setting.js | 229 + src/router/modules/sms.js | 49 + src/router/modules/station.js | 33 + src/router/modules/systemForm.js | 68 + src/router/modules/user.js | 151 + src/router/modules/userFeedback.js | 44 + src/setting.js | 120 + src/settings.js | 47 + src/store/getters.js | 26 + src/store/index.js | 34 + src/store/modules/app.js | 65 + src/store/modules/errorLog.js | 37 + src/store/modules/layout.js | 117 + src/store/modules/menu.js | 317 + src/store/modules/mobildConfig.js | 289 + src/store/modules/permission.js | 77 + src/store/modules/screenSetting.js | 63 + src/store/modules/settings.js | 47 + src/store/modules/tagsView.js | 169 + src/store/modules/themeConfig.js | 130 + src/store/modules/user.js | 221 + src/store/modules/users.js | 70 + src/styles/app.scss | 262 + src/styles/btn.scss | 99 + src/styles/element-ui.scss | 407 + src/styles/element-variables.scss | 31 + src/styles/font/demo.css | 539 + src/styles/font/demo_index.html | 3459 + src/styles/font/iconfont.css | 586 + 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 | 41 + src/styles/iconfont/demo.css | 539 + src/styles/iconfont/demo_index.html | 11182 ++ .../font_1945396_bzyvwsjuo37/demo.css | 539 + .../font_1945396_bzyvwsjuo37/demo_index.html | 11182 ++ .../font_1945396_bzyvwsjuo37/iconfont.css | 1927 + .../font_1945396_bzyvwsjuo37/iconfont.js | 1 + .../font_1945396_bzyvwsjuo37/iconfont.json | 3355 + .../font_1945396_bzyvwsjuo37/iconfont.ttf | Bin 0 -> 133332 bytes .../font_1945396_bzyvwsjuo37/iconfont.woff | Bin 0 -> 76908 bytes .../font_1945396_bzyvwsjuo37/iconfont.woff2 | Bin 0 -> 63956 bytes src/styles/iconfont/iconfont.css | 1927 + src/styles/iconfont/iconfont.js | 1 + src/styles/iconfont/iconfont.json | 3355 + src/styles/iconfont/iconfont.ttf | Bin 0 -> 133332 bytes src/styles/iconfont/iconfont.woff | Bin 0 -> 76908 bytes src/styles/iconfont/iconfont.woff2 | Bin 0 -> 64036 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 | 175 + src/styles/mixin.scss | 66 + src/styles/sidebar.scss | 223 + src/styles/styles.scss | 491 + src/styles/transition.scss | 48 + src/styles/variables.scss | 1148 + src/utils/auth.js | 26 + src/utils/bus.js | 11 + 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 | 415 + src/utils/newToExcel.js | 205 + src/utils/open-window.js | 34 + src/utils/permission.js | 32 + 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 | 595 + src/utils/validate.js | 96 + src/utils/videoCloud.js | 282 + src/views/accounts/bill/index.vue | 223 + src/views/accounts/capital/index.vue | 225 + src/views/accounts/capitalFlow/index.vue | 247 + src/views/accounts/extract/index.vue | 406 + src/views/accounts/invoiceDesc/index.vue | 168 + src/views/accounts/receipt/index.vue | 374 + src/views/accounts/reconciliation/index.vue | 343 + src/views/accounts/settings/index.vue | 204 + src/views/accounts/statement/index.vue | 387 + src/views/accounts/statement/merchantBill.vue | 180 + .../accounts/statement/merchantDetail.vue | 420 + src/views/accounts/transferManage/setting.vue | 98 + src/views/accounts/transferRecord/index.vue | 601 + src/views/app/routine/download/index.vue | 222 + src/views/app/wechat/file/index.vue | 100 + src/views/app/wechat/menus/index.vue | 412 + src/views/app/wechat/newsCategory/index.vue | 35 + src/views/app/wechat/newsCategory/save.vue | 412 + src/views/app/wechat/reply/follow/index.vue | 658 + src/views/app/wechat/reply/index.vue | 3 + src/views/app/wechat/reply/keyword/index.vue | 151 + src/views/app/wechat/wxTemplate/index.vue | 193 + .../cityDelivery/rechargeRecord/index.vue | 232 + src/views/cityDelivery/storeManage/index.vue | 200 + src/views/cityDelivery/usageRecord/index.vue | 271 + src/views/cms/addArticle/index.vue | 361 + src/views/cms/article/index.vue | 165 + src/views/cms/articleCategory/index.vue | 158 + .../community/communityClassify/index.vue | 149 + .../community/communityComment/index.vue | 273 + src/views/community/communityConfig/index.vue | 170 + src/views/community/communityList/index.vue | 574 + src/views/community/communityTopic/index.vue | 202 + src/views/dashboard/components/TodoPanel.vue | 446 + src/views/dashboard/components/baseInfo.vue | 364 + .../dashboard/components/merchantRate.vue | 116 + src/views/dashboard/components/ranking.vue | 118 + src/views/dashboard/components/toDay.vue | 473 + src/views/dashboard/components/user.vue | 591 + src/views/dashboard/components/userData.vue | 232 + src/views/dashboard/index.vue | 167 + src/views/dataScreen/assets/css/index.scss | 381 + .../dataScreen/assets/css/modules/reset.scss | 186 + .../assets/css/modules/variables.scss | 98 + src/views/dataScreen/assets/css/public.scss | 221 + .../assets/css/theme/fonts/element-icons.ttf | Bin 0 -> 55956 bytes .../assets/css/theme/fonts/element-icons.woff | Bin 0 -> 28200 bytes .../dataScreen/assets/css/theme/index.css | 1 + src/views/dataScreen/assets/css/variable.scss | 0 .../dataScreen/assets/css/webfont/index.css | 18 + .../dataScreen/assets/font/D-DINExp-Bold.otf | Bin 0 -> 56068 bytes .../dataScreen/assets/iconfont/iconfont.css | 23 + .../dataScreen/assets/iconfont/iconfont.ttf | Bin 0 -> 2476 bytes .../dataScreen/assets/iconfont/iconfont.woff | Bin 0 -> 1672 bytes .../dataScreen/assets/iconfont/iconfont.woff2 | Bin 0 -> 1284 bytes .../dataScreen/assets/img/center_map.png | Bin 0 -> 26425 bytes src/views/dataScreen/assets/img/frame.png | Bin 0 -> 15167 bytes src/views/dataScreen/assets/img/guang.png | Bin 0 -> 63109 bytes .../dataScreen/assets/img/headers/juxing1.png | Bin 0 -> 1679 bytes .../dataScreen/assets/img/headers/juxing2.png | Bin 0 -> 1657 bytes .../dataScreen/assets/img/left_top_hong.png | Bin 0 -> 5260 bytes .../dataScreen/assets/img/left_top_huang.png | Bin 0 -> 5294 bytes .../dataScreen/assets/img/left_top_lan.png | Bin 0 -> 5266 bytes .../dataScreen/assets/img/left_top_lv.png | Bin 0 -> 5287 bytes src/views/dataScreen/assets/img/pageBg.png | Bin 0 -> 413995 bytes .../dataScreen/assets/img/titles/you.png | Bin 0 -> 1548 bytes .../dataScreen/assets/img/titles/zuo.png | Bin 0 -> 1547 bytes src/views/dataScreen/assets/img/top.png | Bin 0 -> 9050 bytes src/views/dataScreen/assets/img/xieyou.png | Bin 0 -> 1623 bytes src/views/dataScreen/assets/img/xiezuo.png | Bin 0 -> 1590 bytes .../dataScreen/assets/img/zuo_xuxian.png | Bin 0 -> 2117 bytes .../dataScreen/components/echart/index.vue | 72 + .../components/item-wrap/item-wrap.vue | 101 + src/views/dataScreen/components/kong.vue | 51 + .../dataScreen/components/message/message.js | 50 + .../dataScreen/components/message/message.vue | 76 + .../components/reacquire/reacquire.vue | 65 + .../components/scale-screen/scale-screen.vue | 260 + src/views/dataScreen/home.scss | 263 + src/views/dataScreen/home.vue | 166 + src/views/dataScreen/indexs/center-bottom.vue | 227 + src/views/dataScreen/indexs/center-map.vue | 397 + src/views/dataScreen/indexs/center-top.vue | 171 + src/views/dataScreen/indexs/index.vue | 160 + src/views/dataScreen/indexs/left-bottom.vue | 292 + src/views/dataScreen/indexs/left-center.vue | 226 + src/views/dataScreen/indexs/left-top.vue | 248 + src/views/dataScreen/indexs/right-bottom.vue | 239 + src/views/dataScreen/indexs/right-center.vue | 156 + src/views/dataScreen/indexs/right-top.vue | 312 + src/views/dataScreen/setting.vue | 119 + src/views/dataScreen/utils/drawMixin.js | 67 + src/views/dataScreen/utils/index.js | 50 + src/views/dataScreen/utils/map/china.json | 25711 ++++ src/views/dataScreen/utils/map/xzqCode.js | 177 + src/views/error-page/401.vue | 108 + src/views/error-page/404.vue | 245 + src/views/freight/city/index.vue | 127 + src/views/freight/express/index.vue | 186 + src/views/login/index.vue | 681 + src/views/login/mixins.js | 20 + src/views/maintain/auth/index.vue | 331 + src/views/maintain/cache/index.vue | 68 + src/views/maintain/copyRight/index.vue | 83 + src/views/maintain/dataBackup/index.vue | 325 + .../application/handle/applicationDetails.vue | 320 + .../application/handle/applicationInfo.vue | 349 + .../marketing/application/handle/create.vue | 331 + .../marketing/application/handle/editForm.vue | 441 + src/views/marketing/application/index.vue | 3 + .../marketing/application/list/create.vue | 360 + .../marketing/application/list/index.vue | 268 + .../marketing/assist/assist_goods/detail.vue | 264 + .../marketing/assist/assist_goods/index.vue | 701 + .../marketing/assist/assist_goods/info.vue | 372 + .../marketing/assist/assist_list/detail.vue | 102 + .../marketing/assist/assist_list/index.vue | 328 + src/views/marketing/assist/index.vue | 3 + .../atmosphereList/addAtmosphere.vue | 490 + .../atmosphere/atmosphereList/goodsList.vue | 245 + .../atmosphere/atmosphereList/index.vue | 239 + src/views/marketing/atmosphere/index.vue | 3 + .../marketing/border/borderList/addBorder.vue | 485 + .../marketing/border/borderList/index.vue | 241 + src/views/marketing/border/index.vue | 3 + .../broadcast/broadcastList/index.vue | 263 + .../broadcast/broadcastList/proDetail.vue | 152 + src/views/marketing/broadcast/index.vue | 3 + .../combination/combination_goods/detail.vue | 335 + .../combination/combination_goods/index.vue | 699 + .../combination/combination_goods/info.vue | 382 + .../combination/combination_set/index.vue | 91 + src/views/marketing/combination/index.vue | 3 + .../combination/store_combination/detail.vue | 190 + .../combination/store_combination/index.vue | 336 + .../coupon/couponList/creatCoupon.vue | 92 + .../marketing/coupon/couponList/index.vue | 595 + .../marketing/coupon/couponUser/index.vue | 229 + src/views/marketing/coupon/index.vue | 3 + src/views/marketing/discounts/index.vue | 403 + .../integral/addProduct/copyRecord.vue | 109 + .../marketing/integral/addProduct/index.vue | 1749 + .../marketing/integral/classify/index.vue | 151 + src/views/marketing/integral/config/index.vue | 384 + src/views/marketing/integral/index.vue | 3 + src/views/marketing/integral/log/index.vue | 204 + .../marketing/integral/orderList/index.vue | 571 + .../integral/orderList/orderDetails.vue | 673 + .../integral/productList/goodsList.vue | 160 + .../marketing/integral/productList/index.vue | 251 + src/views/marketing/integral/sign/index.vue | 195 + .../couponInstructions/index.vue | 193 + .../platformCoupon/couponList/creatCoupon.vue | 121 + .../platformCoupon/couponList/index.vue | 698 + .../platformCoupon/couponRecord/index.vue | 242 + .../platformCoupon/couponSend/index.vue | 618 + src/views/marketing/platformCoupon/index.vue | 3 + src/views/marketing/preSale/agreement.vue | 180 + src/views/marketing/preSale/detail.vue | 375 + src/views/marketing/preSale/index.vue | 665 + src/views/marketing/preSale/info.vue | 463 + src/views/marketing/seckill/index.vue | 3 + .../marketing/seckill/seckillConfig/index.vue | 209 + .../marketing/seckill/seckillGoods/index.vue | 993 + .../marketing/seckill/seckillGoods/info.vue | 366 + src/views/marketing/studio/index.vue | 3 + .../marketing/studio/studioList/index.vue | 447 + .../studio/studioList/selectedGoods.vue | 124 + .../studio/studioList/studioDetail.vue | 269 + .../studio/studioProList/creatProduct.vue | 107 + .../marketing/studio/studioProList/index.vue | 196 + src/views/merchant/agreement/index.vue | 171 + src/views/merchant/application/index.vue | 310 + src/views/merchant/applyments/index.vue | 488 + src/views/merchant/applyments/list.vue | 339 + src/views/merchant/classify/index.vue | 135 + src/views/merchant/deposit/index.vue | 720 + src/views/merchant/list/handle/merDetails.vue | 336 + .../merchant/list/handle/merEditForm.vue | 511 + src/views/merchant/list/handle/merInfo.vue | 420 + src/views/merchant/list/index.vue | 419 + src/views/merchant/list/record.vue | 616 + src/views/merchant/rechargeRecord/index.vue | 203 + src/views/merchant/system/index.vue | 146 + src/views/merchant/type/description.vue | 170 + src/views/merchant/type/index.vue | 250 + src/views/merchant/type/record.vue | 615 + src/views/merchant/type/typeDetails.vue | 323 + src/views/merchant/type/typeEditForm.vue | 308 + src/views/merchant/type/typeInfo.vue | 151 + .../smsConfig/components/forgetPassword.vue | 249 + .../smsConfig/components/forgetPhone.vue | 222 + .../notify/smsConfig/components/loginFrom.vue | 131 + .../notify/smsConfig/components/register.vue | 202 + src/views/notify/smsConfig/config.vue | 170 + src/views/notify/smsConfig/index.vue | 339 + src/views/notify/smsConfig/tableList.vue | 783 + src/views/notify/smsPay/index.vue | 273 + src/views/notify/smsTemplateApply/index.vue | 446 + src/views/order/list/index.vue | 660 + src/views/order/list/orderDetails.vue | 769 + src/views/order/orderCancellate/index.vue | 365 + src/views/order/refund/index.vue | 407 + src/views/product/band/bandClassify/index.vue | 142 + src/views/product/band/bandList/index.vue | 190 + src/views/product/band/index.vue | 3 + src/views/product/priceDescription/index.vue | 281 + src/views/product/productClassify/index.vue | 185 + src/views/product/productComment/index.vue | 255 + src/views/product/productExamine/index.vue | 783 + src/views/product/productExamine/info.vue | 397 + .../product/productExamine/proDetails.vue | 877 + src/views/product/productGuarantee/index.vue | 241 + src/views/product/productLabel/index.vue | 148 + src/views/product/specs/create.vue | 195 + src/views/product/specs/list.vue | 230 + src/views/product/specs/merList.vue | 205 + src/views/promoter/commission/index.vue | 166 + src/views/promoter/config/index.vue | 187 + .../promoter/distributionRules/index.vue | 170 + src/views/promoter/gift/index.vue | 481 + src/views/promoter/membershipLevel/index.vue | 645 + src/views/promoter/order/index.vue | 632 + src/views/promoter/order/orderDetails.vue | 737 + src/views/promoter/user/index.vue | 537 + src/views/safe/pageLinks/index.vue | 770 + src/views/safe/pcLinks/index.vue | 323 + src/views/service/balanceRecord/index.vue | 205 + src/views/service/customer/index.vue | 347 + src/views/service/purchase/index.vue | 265 + src/views/service/settings/index.vue | 192 + src/views/setting/agreements/index.vue | 173 + src/views/setting/devise/cateMerchant.vue | 116 + src/views/setting/devise/catePlantform.vue | 114 + .../setting/devise/components/uploadPic.vue | 219 + src/views/setting/devise/index.vue | 1392 + src/views/setting/devise/linkList.vue | 146 + src/views/setting/devise/links.vue | 156 + src/views/setting/devise/list.vue | 378 + src/views/setting/devise/merLink.vue | 146 + src/views/setting/devise/merchantList.vue | 427 + src/views/setting/devise/microList.vue | 316 + src/views/setting/devise/shopStreet.vue | 184 + src/views/setting/devise/users.vue | 696 + src/views/setting/devise/visualization.vue | 1489 + src/views/setting/systemAdmin/index.vue | 220 + src/views/setting/systemLog/index.vue | 190 + src/views/setting/systemMenu/index.vue | 139 + src/views/setting/systemRole/index.vue | 168 + src/views/setting/themeStyle/index.vue | 269 + .../sms/smsConfig/components/changePsd.vue | 212 + .../smsConfig/components/changeSignature.vue | 235 + .../sms/smsConfig/components/loginFrom.vue | 180 + .../sms/smsConfig/components/register.vue | 273 + .../sms/smsConfig/components/tableList.vue | 123 + src/views/sms/smsConfig/index.vue | 185 + src/views/sms/smsPay/index.vue | 271 + src/views/sms/smsTemplate/applyList.vue | 170 + src/views/sms/smsTemplate/index.vue | 230 + src/views/station/notice/index.vue | 316 + src/views/system/config/classify.vue | 193 + src/views/system/config/picture.vue | 35 + src/views/system/config/setting.vue | 226 + src/views/system/customer_keyword/index.vue | 384 + src/views/system/exportFile/index.vue | 172 + src/views/system/groupData/data.vue | 245 + src/views/system/groupData/list.vue | 132 + src/views/system/notification/index.vue | 211 + src/views/system/topic/data.vue | 534 + src/views/systemForm/cityDelivery/index.vue | 92 + src/views/systemForm/form/create.vue | 1001 + src/views/systemForm/form/details.vue | 200 + src/views/systemForm/form/index.vue | 149 + src/views/systemForm/setSystem/index.vue | 257 + src/views/user/agreement/index.vue | 170 + src/views/user/group/index.vue | 162 + src/views/user/list/couponList.vue | 238 + src/views/user/list/index.vue | 1011 + src/views/user/list/userCreate.vue | 263 + src/views/user/list/userDetails.vue | 1431 + src/views/user/member/config.vue | 83 + src/views/user/member/description.vue | 171 + src/views/user/member/equity.vue | 122 + src/views/user/member/index.vue | 3 + src/views/user/member/interests.vue | 127 + src/views/user/member/list.vue | 129 + src/views/user/member/record.vue | 172 + src/views/user/member/type.vue | 149 + src/views/user/member/vipAgreement.vue | 168 + src/views/user/search/index.vue | 235 + src/views/user/setupUser/index.vue | 614 + src/views/userFeedback/classify/index.vue | 149 + src/views/userFeedback/list/index.vue | 201 + 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 | 137 + 1156 files changed, 449417 insertions(+) create mode 100644 .editorconfig create mode 100644 .env.development create mode 100644 .env.production create mode 100644 .env.staging create mode 100644 .eslintignore create mode 100644 .eslintrc.js create mode 100644 .github/FUNDING.yml create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/ISSUE_TEMPLATE/question.md 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/html/preview.html 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 public/screen/110000.json create mode 100644 public/screen/120000.json create mode 100644 public/screen/130000.json create mode 100644 public/screen/140000.json create mode 100644 public/screen/150000.json create mode 100644 public/screen/210000.json create mode 100644 public/screen/220000.json create mode 100644 public/screen/230000.json create mode 100644 public/screen/310000.json create mode 100644 public/screen/320000.json create mode 100644 public/screen/330000.json create mode 100644 public/screen/340000.json create mode 100644 public/screen/350000.json create mode 100644 public/screen/360000.json create mode 100644 public/screen/370000.json create mode 100644 public/screen/410000.json create mode 100644 public/screen/420000.json create mode 100644 public/screen/430000.json create mode 100644 public/screen/440000.json create mode 100644 public/screen/450000.json create mode 100644 public/screen/460000.json create mode 100644 public/screen/500000.json create mode 100644 public/screen/510000.json create mode 100644 public/screen/520000.json create mode 100644 public/screen/530000.json create mode 100644 public/screen/540000.json create mode 100644 public/screen/610000.json create mode 100644 public/screen/620000.json create mode 100644 public/screen/630000.json create mode 100644 public/screen/640000.json create mode 100644 public/screen/650000.json create mode 100644 public/screen/710000.json create mode 100644 public/screen/810000.json create mode 100644 public/screen/820000.json create mode 100644 public/screen/china.json create mode 100644 public/screen/chinaNanhai.json create mode 100644 sh.exe.stackdump 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/cms.js create mode 100644 src/api/community.js create mode 100644 src/api/diy.js create mode 100644 src/api/freight.js create mode 100644 src/api/home.js create mode 100644 src/api/maintain.js create mode 100644 src/api/marketing.js create mode 100644 src/api/merchant.js create mode 100644 src/api/order.js create mode 100644 src/api/product.js create mode 100644 src/api/promoter.js create mode 100644 src/api/request.js create mode 100644 src/api/screen.js create mode 100644 src/api/setting.js create mode 100644 src/api/sms.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/api/userFeedback.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/bluesgin.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/dui.png create mode 100644 src/assets/images/edit.png create mode 100644 src/assets/images/electric.png create mode 100644 src/assets/images/expressi.jpg 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/goods_icon.png create mode 100644 src/assets/images/greesgin.png create mode 100644 src/assets/images/group_title.png create mode 100644 src/assets/images/head.gif create mode 100644 src/assets/images/icons.png create mode 100644 src/assets/images/integral.png create mode 100644 src/assets/images/laber.png create mode 100644 src/assets/images/member.png create mode 100644 src/assets/images/member01.png create mode 100644 src/assets/images/mobilefoot.png create mode 100644 src/assets/images/mobilehead.png create mode 100644 src/assets/images/moren.jpg create mode 100644 src/assets/images/news.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/oragesgin.png create mode 100644 src/assets/images/order1.png create mode 100644 src/assets/images/order2.png create mode 100644 src/assets/images/order3.png create mode 100644 src/assets/images/order4.png create mode 100644 src/assets/images/order5.png create mode 100644 src/assets/images/order_icon.png create mode 100644 src/assets/images/pclogin.png create mode 100644 src/assets/images/phoneBox.png create mode 100644 src/assets/images/pinksgin.png create mode 100644 src/assets/images/plant_bg.png create mode 100644 src/assets/images/plant_form.png create mode 100644 src/assets/images/plant_title.png create mode 100644 src/assets/images/points_mall.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/purplesign.png create mode 100644 src/assets/images/rank_cate.png create mode 100644 src/assets/images/rank_num.png create mode 100644 src/assets/images/rank_title.png create mode 100644 src/assets/images/redsgin.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/sort11.jpg create mode 100644 src/assets/images/sort12.jpg create mode 100644 src/assets/images/sort13.jpg create mode 100644 src/assets/images/spike_title.png create mode 100644 src/assets/images/store_avatar.png create mode 100644 src/assets/images/store_bg.png create mode 100644 src/assets/images/store_icon.png create mode 100644 src/assets/images/svip.png create mode 100644 src/assets/images/themStyle/blue1.jpg create mode 100644 src/assets/images/themStyle/blue2.jpg create mode 100644 src/assets/images/themStyle/blue3.jpg create mode 100644 src/assets/images/themStyle/green1.jpg create mode 100644 src/assets/images/themStyle/green2.jpg create mode 100644 src/assets/images/themStyle/green3.jpg create mode 100644 src/assets/images/themStyle/orange1.jpg create mode 100644 src/assets/images/themStyle/orange2.jpg create mode 100644 src/assets/images/themStyle/orange3.jpg create mode 100644 src/assets/images/themStyle/pink1.jpg create mode 100644 src/assets/images/themStyle/pink2.jpg create mode 100644 src/assets/images/themStyle/pink3.jpg create mode 100644 src/assets/images/themStyle/purple1.jpg create mode 100644 src/assets/images/themStyle/purple2.jpg create mode 100644 src/assets/images/themStyle/purple3.jpg create mode 100644 src/assets/images/themStyle/red1.jpg create mode 100644 src/assets/images/themStyle/red2.jpg create mode 100644 src/assets/images/themStyle/red3.jpg create mode 100644 src/assets/images/topic_title.png create mode 100644 src/assets/images/type_icon.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/SvgIcon/index.vue create mode 100644 src/components/ThemePicker/index.vue create mode 100644 src/components/TopNav/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/crossStore/index.vue create mode 100644 src/components/echarts/index.vue create mode 100644 src/components/echarts/mixins/resize.js create mode 100644 src/components/exportFile/fileList.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/labelList/index.vue create mode 100644 src/components/linkaddress/index.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_comb.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_hotranking.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_plant.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_service.vue create mode 100644 src/components/mobileConfig/c_home_shop.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_nav_bar.vue create mode 100644 src/components/mobileConfig/c_news_roll.vue create mode 100644 src/components/mobileConfig/c_picture_cube.vue create mode 100644 src/components/mobileConfig/c_search_box.vue create mode 100644 src/components/mobileConfig/c_ueditor_box.vue create mode 100644 src/components/mobileConfig/c_wechat_attention.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_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_select_list.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_text.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_comb.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_hotranking.vue create mode 100644 src/components/mobilePage/home_menu.vue create mode 100644 src/components/mobilePage/home_news_roll.vue create mode 100644 src/components/mobilePage/home_pink.vue create mode 100644 src/components/mobilePage/home_plant.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_service.vue create mode 100644 src/components/mobilePage/home_shop.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/nav_bar.vue create mode 100644 src/components/mobilePage/picture_cube.vue create mode 100644 src/components/mobilePage/search_box.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/mobilePage/z_wechat_attention.vue create mode 100644 src/components/newsCategory/index.vue create mode 100644 src/components/newsCategory/newsCategoryFrom/index.js create mode 100644 src/components/newsCategory/newsCategoryFrom/index.vue create mode 100644 src/components/pagesFoot/index.vue create mode 100644 src/components/previewBox/index.vue create mode 100644 src/components/referrerList/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/settingGuide/app.vue create mode 100644 src/components/settingGuide/index.js create mode 100644 src/components/settingGuide/routine.vue create mode 100644 src/components/settingGuide/wechat.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/directive/clipboard/clipboard.js create mode 100644 src/directive/clipboard/index.js create mode 100644 src/directive/el-drag-dialog/drag.js create mode 100644 src/directive/el-drag-dialog/index.js create mode 100644 src/directive/el-table/adaptive.js create mode 100644 src/directive/el-table/index.js create mode 100644 src/directive/permission/index.js create mode 100644 src/directive/permission/permission.js create mode 100644 src/directive/sticky.js create mode 100644 src/directive/waves/index.js create mode 100644 src/directive/waves/waves.css create mode 100644 src/directive/waves/waves.js 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/constants.js create mode 100644 src/libs/currency.js create mode 100644 src/libs/dataScreen.js create mode 100644 src/libs/dd-moment.js create mode 100644 src/libs/index.js create mode 100644 src/libs/modal-form.js create mode 100644 src/libs/modal-newsCategory.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/socket.js create mode 100644 src/libs/system/index.js create mode 100644 src/libs/tools.js create mode 100644 src/libs/types.js create mode 100644 src/libs/util.cookies.js create mode 100644 src/libs/util.db.js create mode 100644 src/libs/util.js create mode 100644 src/libs/util.log.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/app.js create mode 100644 src/router/modules/cms.js create mode 100644 src/router/modules/community.js create mode 100644 src/router/modules/config.js create mode 100644 src/router/modules/delivery.js create mode 100644 src/router/modules/freight.js create mode 100644 src/router/modules/group.js create mode 100644 src/router/modules/maintain.js create mode 100644 src/router/modules/marketing.js create mode 100644 src/router/modules/merchant.js create mode 100644 src/router/modules/order.js create mode 100644 src/router/modules/product.js create mode 100644 src/router/modules/promoter.js create mode 100644 src/router/modules/routine.js create mode 100644 src/router/modules/safe.js create mode 100644 src/router/modules/service.js create mode 100644 src/router/modules/setting.js create mode 100644 src/router/modules/sms.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/router/modules/userFeedback.js create mode 100644 src/setting.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/screenSetting.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/store/modules/users.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/font_1945396_bzyvwsjuo37/demo.css create mode 100644 src/styles/iconfont/font_1945396_bzyvwsjuo37/demo_index.html create mode 100644 src/styles/iconfont/font_1945396_bzyvwsjuo37/iconfont.css create mode 100644 src/styles/iconfont/font_1945396_bzyvwsjuo37/iconfont.js create mode 100644 src/styles/iconfont/font_1945396_bzyvwsjuo37/iconfont.json create mode 100644 src/styles/iconfont/font_1945396_bzyvwsjuo37/iconfont.ttf create mode 100644 src/styles/iconfont/font_1945396_bzyvwsjuo37/iconfont.woff create mode 100644 src/styles/iconfont/font_1945396_bzyvwsjuo37/iconfont.woff2 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/auth.js create mode 100644 src/utils/bus.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/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/views/accounts/bill/index.vue create mode 100644 src/views/accounts/capital/index.vue create mode 100644 src/views/accounts/capitalFlow/index.vue create mode 100644 src/views/accounts/extract/index.vue create mode 100644 src/views/accounts/invoiceDesc/index.vue create mode 100644 src/views/accounts/receipt/index.vue create mode 100644 src/views/accounts/reconciliation/index.vue create mode 100644 src/views/accounts/settings/index.vue create mode 100644 src/views/accounts/statement/index.vue create mode 100644 src/views/accounts/statement/merchantBill.vue create mode 100644 src/views/accounts/statement/merchantDetail.vue create mode 100644 src/views/accounts/transferManage/setting.vue create mode 100644 src/views/accounts/transferRecord/index.vue create mode 100644 src/views/app/routine/download/index.vue create mode 100644 src/views/app/wechat/file/index.vue create mode 100644 src/views/app/wechat/menus/index.vue create mode 100644 src/views/app/wechat/newsCategory/index.vue create mode 100644 src/views/app/wechat/newsCategory/save.vue create mode 100644 src/views/app/wechat/reply/follow/index.vue create mode 100644 src/views/app/wechat/reply/index.vue create mode 100644 src/views/app/wechat/reply/keyword/index.vue create mode 100644 src/views/app/wechat/wxTemplate/index.vue create mode 100644 src/views/cityDelivery/rechargeRecord/index.vue create mode 100644 src/views/cityDelivery/storeManage/index.vue create mode 100644 src/views/cityDelivery/usageRecord/index.vue create mode 100644 src/views/cms/addArticle/index.vue create mode 100644 src/views/cms/article/index.vue create mode 100644 src/views/cms/articleCategory/index.vue create mode 100644 src/views/community/communityClassify/index.vue create mode 100644 src/views/community/communityComment/index.vue create mode 100644 src/views/community/communityConfig/index.vue create mode 100644 src/views/community/communityList/index.vue create mode 100644 src/views/community/communityTopic/index.vue create mode 100644 src/views/dashboard/components/TodoPanel.vue create mode 100644 src/views/dashboard/components/baseInfo.vue create mode 100644 src/views/dashboard/components/merchantRate.vue create mode 100644 src/views/dashboard/components/ranking.vue create mode 100644 src/views/dashboard/components/toDay.vue create mode 100644 src/views/dashboard/components/user.vue create mode 100644 src/views/dashboard/components/userData.vue create mode 100644 src/views/dashboard/index.vue create mode 100644 src/views/dataScreen/assets/css/index.scss create mode 100644 src/views/dataScreen/assets/css/modules/reset.scss create mode 100644 src/views/dataScreen/assets/css/modules/variables.scss create mode 100644 src/views/dataScreen/assets/css/public.scss create mode 100644 src/views/dataScreen/assets/css/theme/fonts/element-icons.ttf create mode 100644 src/views/dataScreen/assets/css/theme/fonts/element-icons.woff create mode 100644 src/views/dataScreen/assets/css/theme/index.css create mode 100644 src/views/dataScreen/assets/css/variable.scss create mode 100644 src/views/dataScreen/assets/css/webfont/index.css create mode 100644 src/views/dataScreen/assets/font/D-DINExp-Bold.otf create mode 100644 src/views/dataScreen/assets/iconfont/iconfont.css create mode 100644 src/views/dataScreen/assets/iconfont/iconfont.ttf create mode 100644 src/views/dataScreen/assets/iconfont/iconfont.woff create mode 100644 src/views/dataScreen/assets/iconfont/iconfont.woff2 create mode 100644 src/views/dataScreen/assets/img/center_map.png create mode 100644 src/views/dataScreen/assets/img/frame.png create mode 100644 src/views/dataScreen/assets/img/guang.png create mode 100644 src/views/dataScreen/assets/img/headers/juxing1.png create mode 100644 src/views/dataScreen/assets/img/headers/juxing2.png create mode 100644 src/views/dataScreen/assets/img/left_top_hong.png create mode 100644 src/views/dataScreen/assets/img/left_top_huang.png create mode 100644 src/views/dataScreen/assets/img/left_top_lan.png create mode 100644 src/views/dataScreen/assets/img/left_top_lv.png create mode 100644 src/views/dataScreen/assets/img/pageBg.png create mode 100644 src/views/dataScreen/assets/img/titles/you.png create mode 100644 src/views/dataScreen/assets/img/titles/zuo.png create mode 100644 src/views/dataScreen/assets/img/top.png create mode 100644 src/views/dataScreen/assets/img/xieyou.png create mode 100644 src/views/dataScreen/assets/img/xiezuo.png create mode 100644 src/views/dataScreen/assets/img/zuo_xuxian.png create mode 100644 src/views/dataScreen/components/echart/index.vue create mode 100644 src/views/dataScreen/components/item-wrap/item-wrap.vue create mode 100644 src/views/dataScreen/components/kong.vue create mode 100644 src/views/dataScreen/components/message/message.js create mode 100644 src/views/dataScreen/components/message/message.vue create mode 100644 src/views/dataScreen/components/reacquire/reacquire.vue create mode 100644 src/views/dataScreen/components/scale-screen/scale-screen.vue create mode 100644 src/views/dataScreen/home.scss create mode 100644 src/views/dataScreen/home.vue create mode 100644 src/views/dataScreen/indexs/center-bottom.vue create mode 100644 src/views/dataScreen/indexs/center-map.vue create mode 100644 src/views/dataScreen/indexs/center-top.vue create mode 100644 src/views/dataScreen/indexs/index.vue create mode 100644 src/views/dataScreen/indexs/left-bottom.vue create mode 100644 src/views/dataScreen/indexs/left-center.vue create mode 100644 src/views/dataScreen/indexs/left-top.vue create mode 100644 src/views/dataScreen/indexs/right-bottom.vue create mode 100644 src/views/dataScreen/indexs/right-center.vue create mode 100644 src/views/dataScreen/indexs/right-top.vue create mode 100644 src/views/dataScreen/setting.vue create mode 100644 src/views/dataScreen/utils/drawMixin.js create mode 100644 src/views/dataScreen/utils/index.js create mode 100644 src/views/dataScreen/utils/map/china.json create mode 100644 src/views/dataScreen/utils/map/xzqCode.js create mode 100644 src/views/error-page/401.vue create mode 100644 src/views/error-page/404.vue create mode 100644 src/views/freight/city/index.vue create mode 100644 src/views/freight/express/index.vue create mode 100644 src/views/login/index.vue create mode 100644 src/views/login/mixins.js create mode 100644 src/views/maintain/auth/index.vue create mode 100644 src/views/maintain/cache/index.vue create mode 100644 src/views/maintain/copyRight/index.vue create mode 100644 src/views/maintain/dataBackup/index.vue create mode 100644 src/views/marketing/application/handle/applicationDetails.vue create mode 100644 src/views/marketing/application/handle/applicationInfo.vue create mode 100644 src/views/marketing/application/handle/create.vue create mode 100644 src/views/marketing/application/handle/editForm.vue create mode 100644 src/views/marketing/application/index.vue create mode 100644 src/views/marketing/application/list/create.vue create mode 100644 src/views/marketing/application/list/index.vue create mode 100644 src/views/marketing/assist/assist_goods/detail.vue create mode 100644 src/views/marketing/assist/assist_goods/index.vue create mode 100644 src/views/marketing/assist/assist_goods/info.vue create mode 100644 src/views/marketing/assist/assist_list/detail.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/atmosphere/atmosphereList/addAtmosphere.vue create mode 100644 src/views/marketing/atmosphere/atmosphereList/goodsList.vue create mode 100644 src/views/marketing/atmosphere/atmosphereList/index.vue create mode 100644 src/views/marketing/atmosphere/index.vue create mode 100644 src/views/marketing/border/borderList/addBorder.vue create mode 100644 src/views/marketing/border/borderList/index.vue create mode 100644 src/views/marketing/border/index.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/detail.vue create mode 100644 src/views/marketing/combination/combination_goods/index.vue create mode 100644 src/views/marketing/combination/combination_goods/info.vue create mode 100644 src/views/marketing/combination/combination_set/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/couponUser/index.vue create mode 100644 src/views/marketing/coupon/index.vue create mode 100644 src/views/marketing/discounts/index.vue create mode 100644 src/views/marketing/integral/addProduct/copyRecord.vue create mode 100644 src/views/marketing/integral/addProduct/index.vue create mode 100644 src/views/marketing/integral/classify/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/integral/orderList/index.vue create mode 100644 src/views/marketing/integral/orderList/orderDetails.vue create mode 100644 src/views/marketing/integral/productList/goodsList.vue create mode 100644 src/views/marketing/integral/productList/index.vue create mode 100644 src/views/marketing/integral/sign/index.vue create mode 100644 src/views/marketing/platformCoupon/couponInstructions/index.vue create mode 100644 src/views/marketing/platformCoupon/couponList/creatCoupon.vue create mode 100644 src/views/marketing/platformCoupon/couponList/index.vue create mode 100644 src/views/marketing/platformCoupon/couponRecord/index.vue create mode 100644 src/views/marketing/platformCoupon/couponSend/index.vue create mode 100644 src/views/marketing/platformCoupon/index.vue create mode 100644 src/views/marketing/preSale/agreement.vue create mode 100644 src/views/marketing/preSale/detail.vue create mode 100644 src/views/marketing/preSale/index.vue create mode 100644 src/views/marketing/preSale/info.vue create mode 100644 src/views/marketing/seckill/index.vue create mode 100644 src/views/marketing/seckill/seckillConfig/index.vue create mode 100644 src/views/marketing/seckill/seckillGoods/index.vue create mode 100644 src/views/marketing/seckill/seckillGoods/info.vue create mode 100644 src/views/marketing/studio/index.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/marketing/studio/studioProList/creatProduct.vue create mode 100644 src/views/marketing/studio/studioProList/index.vue create mode 100644 src/views/merchant/agreement/index.vue create mode 100644 src/views/merchant/application/index.vue create mode 100644 src/views/merchant/applyments/index.vue create mode 100644 src/views/merchant/applyments/list.vue create mode 100644 src/views/merchant/classify/index.vue create mode 100644 src/views/merchant/deposit/index.vue create mode 100644 src/views/merchant/list/handle/merDetails.vue create mode 100644 src/views/merchant/list/handle/merEditForm.vue create mode 100644 src/views/merchant/list/handle/merInfo.vue create mode 100644 src/views/merchant/list/index.vue create mode 100644 src/views/merchant/list/record.vue create mode 100644 src/views/merchant/rechargeRecord/index.vue create mode 100644 src/views/merchant/system/index.vue create mode 100644 src/views/merchant/type/description.vue create mode 100644 src/views/merchant/type/index.vue create mode 100644 src/views/merchant/type/record.vue create mode 100644 src/views/merchant/type/typeDetails.vue create mode 100644 src/views/merchant/type/typeEditForm.vue create mode 100644 src/views/merchant/type/typeInfo.vue create mode 100644 src/views/notify/smsConfig/components/forgetPassword.vue create mode 100644 src/views/notify/smsConfig/components/forgetPhone.vue create mode 100644 src/views/notify/smsConfig/components/loginFrom.vue create mode 100644 src/views/notify/smsConfig/components/register.vue create mode 100644 src/views/notify/smsConfig/config.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/notify/smsTemplateApply/index.vue create mode 100644 src/views/order/list/index.vue create mode 100644 src/views/order/list/orderDetails.vue create mode 100644 src/views/order/orderCancellate/index.vue create mode 100644 src/views/order/refund/index.vue create mode 100644 src/views/product/band/bandClassify/index.vue create mode 100644 src/views/product/band/bandList/index.vue create mode 100644 src/views/product/band/index.vue create mode 100644 src/views/product/priceDescription/index.vue create mode 100644 src/views/product/productClassify/index.vue create mode 100644 src/views/product/productComment/index.vue create mode 100644 src/views/product/productExamine/index.vue create mode 100644 src/views/product/productExamine/info.vue create mode 100644 src/views/product/productExamine/proDetails.vue create mode 100644 src/views/product/productGuarantee/index.vue create mode 100644 src/views/product/productLabel/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/product/specs/merList.vue create mode 100644 src/views/promoter/commission/index.vue create mode 100644 src/views/promoter/config/index.vue create mode 100644 src/views/promoter/distributionRules/index.vue create mode 100644 src/views/promoter/gift/index.vue create mode 100644 src/views/promoter/membershipLevel/index.vue create mode 100644 src/views/promoter/order/index.vue create mode 100644 src/views/promoter/order/orderDetails.vue create mode 100644 src/views/promoter/user/index.vue create mode 100644 src/views/safe/pageLinks/index.vue create mode 100644 src/views/safe/pcLinks/index.vue create mode 100644 src/views/service/balanceRecord/index.vue create mode 100644 src/views/service/customer/index.vue create mode 100644 src/views/service/purchase/index.vue create mode 100644 src/views/service/settings/index.vue create mode 100644 src/views/setting/agreements/index.vue create mode 100644 src/views/setting/devise/cateMerchant.vue create mode 100644 src/views/setting/devise/catePlantform.vue create mode 100644 src/views/setting/devise/components/uploadPic.vue create mode 100644 src/views/setting/devise/index.vue create mode 100644 src/views/setting/devise/linkList.vue create mode 100644 src/views/setting/devise/links.vue create mode 100644 src/views/setting/devise/list.vue create mode 100644 src/views/setting/devise/merLink.vue create mode 100644 src/views/setting/devise/merchantList.vue create mode 100644 src/views/setting/devise/microList.vue create mode 100644 src/views/setting/devise/shopStreet.vue create mode 100644 src/views/setting/devise/users.vue create mode 100644 src/views/setting/devise/visualization.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/systemMenu/index.vue create mode 100644 src/views/setting/systemRole/index.vue create mode 100644 src/views/setting/themeStyle/index.vue create mode 100644 src/views/sms/smsConfig/components/changePsd.vue create mode 100644 src/views/sms/smsConfig/components/changeSignature.vue create mode 100644 src/views/sms/smsConfig/components/loginFrom.vue create mode 100644 src/views/sms/smsConfig/components/register.vue create mode 100644 src/views/sms/smsConfig/components/tableList.vue create mode 100644 src/views/sms/smsConfig/index.vue create mode 100644 src/views/sms/smsPay/index.vue create mode 100644 src/views/sms/smsTemplate/applyList.vue create mode 100644 src/views/sms/smsTemplate/index.vue create mode 100644 src/views/station/notice/index.vue create mode 100644 src/views/system/config/classify.vue create mode 100644 src/views/system/config/picture.vue create mode 100644 src/views/system/config/setting.vue create mode 100644 src/views/system/customer_keyword/index.vue create mode 100644 src/views/system/exportFile/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/notification/index.vue create mode 100644 src/views/system/topic/data.vue create mode 100644 src/views/systemForm/cityDelivery/index.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/user/agreement/index.vue create mode 100644 src/views/user/group/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/userCreate.vue create mode 100644 src/views/user/list/userDetails.vue create mode 100644 src/views/user/member/config.vue create mode 100644 src/views/user/member/description.vue create mode 100644 src/views/user/member/equity.vue create mode 100644 src/views/user/member/index.vue create mode 100644 src/views/user/member/interests.vue create mode 100644 src/views/user/member/list.vue create mode 100644 src/views/user/member/record.vue create mode 100644 src/views/user/member/type.vue create mode 100644 src/views/user/member/vipAgreement.vue create mode 100644 src/views/user/search/index.vue create mode 100644 src/views/user/setupUser/index.vue create mode 100644 src/views/userFeedback/classify/index.vue create mode 100644 src/views/userFeedback/list/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.development b/.env.development new file mode 100644 index 0000000..934211c --- /dev/null +++ b/.env.development @@ -0,0 +1,20 @@ +# just a flag +ENV = 'development' +# http://192.168.1.43:8324/admin +# http://mer.crmeb.net/admin +# base api +# VUE_APP_BASE_API = 'http://192.168.31.106:8324' +VUE_APP_BASE_API = 'https://mer1.crmeb.net' + +# socket 连接地址 +# VUE_APP_WS_URL = 'ws://0.0.0.0:8324' +VUE_APP_WS_URL = 'ws://mer1.crmeb.net' + +# vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable, +# to control whether the babel-plugin-dynamic-import-node plugin is enabled. +# It only does one thing by converting all import() to require(). +# This configuration can significantly increase the speed of hot updates, +# when you have a large number of pages. +# Detail: https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/babel-preset-app/index.js + +VUE_CLI_BABEL_TRANSPILE_MODULES = true diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..18fb70a --- /dev/null +++ b/.env.production @@ -0,0 +1,7 @@ +# 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..5bf07e6 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,5 @@ +build/*.js +src/assets +public +dist +src/ 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/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..d540802 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,4 @@ +# These are supported funding model platforms + +patreon: panjiachen +custom: https://panjiachen.github.io/vue-element-admin-site/donate diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..1a114bc --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,33 @@ +--- +name: Bug report(报告问题) +about: Create a report to help us improve +--- + + + +## Bug report(问题描述) + +#### Steps to reproduce(问题复现步骤) + + +#### Screenshot or Gif(截图或动态图) + + +#### Link to minimal reproduction(最小可在线还原demo) + + + +#### Other relevant information(格外信息) +- Your OS: +- Node.js version: +- vue-element-admin version: diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..c33d10d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,7 @@ +--- +name: Feature Request(新功能建议) +about: Suggest an idea for this project +--- + +## Feature request(新功能建议) + diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md new file mode 100644 index 0000000..7608354 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.md @@ -0,0 +1,35 @@ +--- +name: Question(提问) +about: Asking questions about use +--- + +## Question(提问) + + + +#### Steps to reproduce(问题复现步骤) + + +#### Screenshot or Gif(截图或动态图) + + +#### Link to minimal reproduction(最小可在线还原demo) + + + +#### Other relevant information(格外信息) +- Your OS: +- Node.js version: +- vue-element-admin version: diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..78a752d --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +.DS_Store +node_modules/ +dist/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* +**/*.log + +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..fadb9a9 --- /dev/null +++ b/README.es.md @@ -0,0 +1,263 @@ +# 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 系统订单管理 +├─ promoter 分销 +├─ user 用户管理 +├─ accounts 财务管理 +├─ merchant 商户管理 +├─ app 各个应用模块功能管理公众号、小程序、支付宝、百度小程序、今日头条小程序 +├─ system 系统更新日志 数据库管理 素材管理 +├─ setting 系统身份管理 系统权限管理、系统菜单管理、操作日志 +├─ sms 短信设置 +├─ systemForm 商城设置 +├─ freight 物流设置 +├─ maintain 安全维护 +├─ safe 维护-页面链接 +├─ userFeedback 用户反馈 +├─ error-page 错误页 + +~~~ +## 目录结构 +主要目录结构及说明: +~~~ + +├── public # 静态资源 +│ ├── favicon.ico # favicon图标 +│ └── index.html # html 模板 +├── src # 源代码 +│ ├── api # 所有接口api +│ │ └──request.js # 请求封装 +│ │ └──accounts.js # 有关财务的接口 +│ │ └──promoter.js # 有关分销的接口 +│ │ └──app.js # 有关应用(小程序、公众号)的接口 +│ │ └──cms.js # 有关内容(文章管理、分类)的接口 +│ │ └──home.js # 有关首页的接口 +│ │ └──order.js # 有关订单的接口 +│ │ └──product.js # 有关商品的接口 +│ │ └──setting.js # 有关权限管理的接口 +│ │ └──system.js # 有关系统配置的接口 +│ │ └──systemForm.js # 有关表单组件的接口 +│ │ └──maintain.js # 有关安全维护的接口 +│ │ └──merchant.js # 有关商户的接口 +│ │ └──sms.js # 有关短信设置的接口 +│ │ └──user.js # 有关登录、用户的接口 +│ │ └──userFeedback.js # 有关用户反馈的接口 +│ │ └──freight.js # 有关物流设置的接口 +│ ├── assets # 图片、svg 等静态资源 +│ ├── icons # svg 等静态资源 +│ ├── components # 公共组件 +│ │ └──Breadcrumb # 头部标题标签 +│ │ └──cards # 统计 +│ │ └──echarts # 统计图 +│ │ └──goodsList # 商品列表 +│ │ └──Hamburger # 导航收缩组件 +│ │ └──HeaderSearch # 导航搜索组件 +│ │ └──iconFrom # 导航添加图标 +│ │ └──newsCategory # 图文组件 +│ │ └──RightPanel # 右侧设置按钮,设置导航相关 +│ │ └──Screenfull # 全屏 +│ │ └──SvgIcon # svg图标 +│ │ └──ThemePicker # 右侧设置按钮,设置组题颜色 +│ │ └──ueditorFrom # 富文本编辑器 +│ │ └──uploadPicture # 上传图片组件 +│ ├── layouts # 导航布局 +│ │ ├──index # 主页面 +│ │ ├──components # 导航组件 +│ │ └──Settings # 右边小按钮,设置导航等 +│ │ └──Sidebar # 侧边导航 +│ │ └──TagsView # tab标签页导航 +│ │ └──Navbar # 头部导航 +│ │ └──AppMain # 导航路由 +│ │ └──index.js # 组件引用 +│ │ └──mixins # 自适应大小 +│ ├── libs # 公共js方法 +│ │ └──settingMer # 配置请求地址 +│ ├── views # 所有页面 +│ │ └──login # 登录 +│ │ └──index # 登录 +│ │ └──dashboard # 首页 +│ │ └──product # 商品 +│ │ └──band # 品牌管理 +│ │ └──productClassify # 商品分类 +│ │ └──productExamine # 商品审核 +│ │ └──productComment # 商品评论管理 +│ │ └──order # 订单管理 +│ │ └──promoter # 分销 +│ │ └──user # 分销员列表 +│ │ └──config # 分销设置 +│ │ └──cms # 内容 +│ │ └──addArticle # 添加文章/编辑文章 +│ │ └──article # 文章管理 +│ │ └──articleCategory # 文章分类 +│ │ └──user # 用户 +│ │ └──group # 用户分组 +│ │ └──group # 用户标签 +│ │ └──list # 用户管理 +│ │ └──accounts # 财务 +│ │ └──bill # 充值记录 +│ │ └──capital # 资金记录 +│ │ └──extract # 提现管理 +│ │ └──reconciliation # 财务对账 +│ │ └──merchant # 商户 +│ │ └──list # 商户列表 +│ │ └──classify # 商户分类 +│ │ └──system # 商户菜单管理 +│ │ └──app # 应用 +│ │ └──wechat # 公众号 +│ │ └──menus # 微信菜单 +│ │ └──newsCategory # 图文管理 +│ │ └──save # 图文添加 +│ │ └──reply # 自动回复 +│ │ └──follow # 微信关注回复/无效关键词回复 +│ │ └──keyword # 关键字回复 +│ │ └──wxTemplate # 微信/小程序模板消息 +│ │ └──system # 设置 +│ │ └──config # 系统设置 +│ │ └──classify # 配置分类 +│ │ └──setting # 配置管理 +│ │ └──picture # 素材管理 +│ │ └──groupData # 组合设置 +│ │ └──list # 组合数据 +│ │ └──data # 组合数据列表/登录页幻灯片/首页幻灯片/首页导航按钮/首页推荐区/个人中心幻灯片/个人中心菜单/热门搜索/分销特权/分销海报/充值金额配置 +│ │ └──setting # 设置-权限管理 +│ │ └──systemRole # 身份管理 +│ │ └──systemAdmin # 管理员管理 +│ │ └──systemLog # 操作日志 +│ │ └──systemMenu # 菜单管理 +│ │ └──systemForm # 设置-商城设置 +│ │ └──setSystem # 基础配置/商城配置/余额充值设置/文件上传/短信提醒开关/公众号支付配置/小程序支付配置/公众号配置/小程序配置 +│ │ └──sms # 短信设置 +│ │ └──smsConfig # 短信账户 +│ │ └──smsTemplate # 短信模板 +│ │ └──smsPay # 短信购买 +│ │ └──freight # 物流设置 +│ │ └──express # 物流公司 +│ │ └──maintain # 安全维护 +│ │ └──dataBackup # 数据备份 +│ │ └──auth # 商业授权 +│ │ └──safe # 维护-页面链接 +│ │ └──pageLinks # 页面链接 +│ │ └──userFeedback # 用户-用户反馈 +│ │ └──list # 反馈列表 +│ │ └──classify # 反馈分类 +│ │ └──error-page # 错误页 +│ │ └──404 # 错误页404 +│ │ └──403 # 错误页403 +│ ├── filters # 过滤器 +│ ├── router # 路由配置 +│ │ └──modules # 页面路由模块 +│ │ └──accounts.js # 有关财务 +│ │ └──app.js # 有关应用(公众号) +│ │ └──cms.js # 有关内容(文章管理、文章分类) +│ │ └──config.js # 有关系统配置 +│ │ └──freight.js # 有关物流设置 +│ │ └──group.js # 有关组合数据 +│ │ └──maintain.js # 有关安全维护 +│ │ └──merchant.js # 有关商户 +│ │ └──order.js # 有关订单 +│ │ └──product.js # 有关商品 +│ │ └──promoter.js # 有关分销 +│ │ └──routine.js # 有关小程序 +│ │ └──safe.js # 有关维护 +│ │ └──setting.js # 有关权限 +│ │ └──sms.js # 有关短信 +│ │ └──systemForm.js # 有关商城设置 +│ │ └──user.js # 有关用户 +│ │ └──feedback.js # 有关用户反馈 +│ │ └──index.js # 路由的汇总 +│ ├── store # Vuex 状态管理 +│ ├── utils # 全局公用方法 +│ ├── styles # 样式管理 +│ ├── permission.js # 路由拦截 +│ ├── setting.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..fadb9a9 --- /dev/null +++ b/README.ja.md @@ -0,0 +1,263 @@ +# 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 系统订单管理 +├─ promoter 分销 +├─ user 用户管理 +├─ accounts 财务管理 +├─ merchant 商户管理 +├─ app 各个应用模块功能管理公众号、小程序、支付宝、百度小程序、今日头条小程序 +├─ system 系统更新日志 数据库管理 素材管理 +├─ setting 系统身份管理 系统权限管理、系统菜单管理、操作日志 +├─ sms 短信设置 +├─ systemForm 商城设置 +├─ freight 物流设置 +├─ maintain 安全维护 +├─ safe 维护-页面链接 +├─ userFeedback 用户反馈 +├─ error-page 错误页 + +~~~ +## 目录结构 +主要目录结构及说明: +~~~ + +├── public # 静态资源 +│ ├── favicon.ico # favicon图标 +│ └── index.html # html 模板 +├── src # 源代码 +│ ├── api # 所有接口api +│ │ └──request.js # 请求封装 +│ │ └──accounts.js # 有关财务的接口 +│ │ └──promoter.js # 有关分销的接口 +│ │ └──app.js # 有关应用(小程序、公众号)的接口 +│ │ └──cms.js # 有关内容(文章管理、分类)的接口 +│ │ └──home.js # 有关首页的接口 +│ │ └──order.js # 有关订单的接口 +│ │ └──product.js # 有关商品的接口 +│ │ └──setting.js # 有关权限管理的接口 +│ │ └──system.js # 有关系统配置的接口 +│ │ └──systemForm.js # 有关表单组件的接口 +│ │ └──maintain.js # 有关安全维护的接口 +│ │ └──merchant.js # 有关商户的接口 +│ │ └──sms.js # 有关短信设置的接口 +│ │ └──user.js # 有关登录、用户的接口 +│ │ └──userFeedback.js # 有关用户反馈的接口 +│ │ └──freight.js # 有关物流设置的接口 +│ ├── assets # 图片、svg 等静态资源 +│ ├── icons # svg 等静态资源 +│ ├── components # 公共组件 +│ │ └──Breadcrumb # 头部标题标签 +│ │ └──cards # 统计 +│ │ └──echarts # 统计图 +│ │ └──goodsList # 商品列表 +│ │ └──Hamburger # 导航收缩组件 +│ │ └──HeaderSearch # 导航搜索组件 +│ │ └──iconFrom # 导航添加图标 +│ │ └──newsCategory # 图文组件 +│ │ └──RightPanel # 右侧设置按钮,设置导航相关 +│ │ └──Screenfull # 全屏 +│ │ └──SvgIcon # svg图标 +│ │ └──ThemePicker # 右侧设置按钮,设置组题颜色 +│ │ └──ueditorFrom # 富文本编辑器 +│ │ └──uploadPicture # 上传图片组件 +│ ├── layouts # 导航布局 +│ │ ├──index # 主页面 +│ │ ├──components # 导航组件 +│ │ └──Settings # 右边小按钮,设置导航等 +│ │ └──Sidebar # 侧边导航 +│ │ └──TagsView # tab标签页导航 +│ │ └──Navbar # 头部导航 +│ │ └──AppMain # 导航路由 +│ │ └──index.js # 组件引用 +│ │ └──mixins # 自适应大小 +│ ├── libs # 公共js方法 +│ │ └──settingMer # 配置请求地址 +│ ├── views # 所有页面 +│ │ └──login # 登录 +│ │ └──index # 登录 +│ │ └──dashboard # 首页 +│ │ └──product # 商品 +│ │ └──band # 品牌管理 +│ │ └──productClassify # 商品分类 +│ │ └──productExamine # 商品审核 +│ │ └──productComment # 商品评论管理 +│ │ └──order # 订单管理 +│ │ └──promoter # 分销 +│ │ └──user # 分销员列表 +│ │ └──config # 分销设置 +│ │ └──cms # 内容 +│ │ └──addArticle # 添加文章/编辑文章 +│ │ └──article # 文章管理 +│ │ └──articleCategory # 文章分类 +│ │ └──user # 用户 +│ │ └──group # 用户分组 +│ │ └──group # 用户标签 +│ │ └──list # 用户管理 +│ │ └──accounts # 财务 +│ │ └──bill # 充值记录 +│ │ └──capital # 资金记录 +│ │ └──extract # 提现管理 +│ │ └──reconciliation # 财务对账 +│ │ └──merchant # 商户 +│ │ └──list # 商户列表 +│ │ └──classify # 商户分类 +│ │ └──system # 商户菜单管理 +│ │ └──app # 应用 +│ │ └──wechat # 公众号 +│ │ └──menus # 微信菜单 +│ │ └──newsCategory # 图文管理 +│ │ └──save # 图文添加 +│ │ └──reply # 自动回复 +│ │ └──follow # 微信关注回复/无效关键词回复 +│ │ └──keyword # 关键字回复 +│ │ └──wxTemplate # 微信/小程序模板消息 +│ │ └──system # 设置 +│ │ └──config # 系统设置 +│ │ └──classify # 配置分类 +│ │ └──setting # 配置管理 +│ │ └──picture # 素材管理 +│ │ └──groupData # 组合设置 +│ │ └──list # 组合数据 +│ │ └──data # 组合数据列表/登录页幻灯片/首页幻灯片/首页导航按钮/首页推荐区/个人中心幻灯片/个人中心菜单/热门搜索/分销特权/分销海报/充值金额配置 +│ │ └──setting # 设置-权限管理 +│ │ └──systemRole # 身份管理 +│ │ └──systemAdmin # 管理员管理 +│ │ └──systemLog # 操作日志 +│ │ └──systemMenu # 菜单管理 +│ │ └──systemForm # 设置-商城设置 +│ │ └──setSystem # 基础配置/商城配置/余额充值设置/文件上传/短信提醒开关/公众号支付配置/小程序支付配置/公众号配置/小程序配置 +│ │ └──sms # 短信设置 +│ │ └──smsConfig # 短信账户 +│ │ └──smsTemplate # 短信模板 +│ │ └──smsPay # 短信购买 +│ │ └──freight # 物流设置 +│ │ └──express # 物流公司 +│ │ └──maintain # 安全维护 +│ │ └──dataBackup # 数据备份 +│ │ └──auth # 商业授权 +│ │ └──safe # 维护-页面链接 +│ │ └──pageLinks # 页面链接 +│ │ └──userFeedback # 用户-用户反馈 +│ │ └──list # 反馈列表 +│ │ └──classify # 反馈分类 +│ │ └──error-page # 错误页 +│ │ └──404 # 错误页404 +│ │ └──403 # 错误页403 +│ ├── filters # 过滤器 +│ ├── router # 路由配置 +│ │ └──modules # 页面路由模块 +│ │ └──accounts.js # 有关财务 +│ │ └──app.js # 有关应用(公众号) +│ │ └──cms.js # 有关内容(文章管理、文章分类) +│ │ └──config.js # 有关系统配置 +│ │ └──freight.js # 有关物流设置 +│ │ └──group.js # 有关组合数据 +│ │ └──maintain.js # 有关安全维护 +│ │ └──merchant.js # 有关商户 +│ │ └──order.js # 有关订单 +│ │ └──product.js # 有关商品 +│ │ └──promoter.js # 有关分销 +│ │ └──routine.js # 有关小程序 +│ │ └──safe.js # 有关维护 +│ │ └──setting.js # 有关权限 +│ │ └──sms.js # 有关短信 +│ │ └──systemForm.js # 有关商城设置 +│ │ └──user.js # 有关用户 +│ │ └──feedback.js # 有关用户反馈 +│ │ └──index.js # 路由的汇总 +│ ├── store # Vuex 状态管理 +│ ├── utils # 全局公用方法 +│ ├── styles # 样式管理 +│ ├── permission.js # 路由拦截 +│ ├── setting.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..fadb9a9 --- /dev/null +++ b/README.md @@ -0,0 +1,263 @@ +# 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 系统订单管理 +├─ promoter 分销 +├─ user 用户管理 +├─ accounts 财务管理 +├─ merchant 商户管理 +├─ app 各个应用模块功能管理公众号、小程序、支付宝、百度小程序、今日头条小程序 +├─ system 系统更新日志 数据库管理 素材管理 +├─ setting 系统身份管理 系统权限管理、系统菜单管理、操作日志 +├─ sms 短信设置 +├─ systemForm 商城设置 +├─ freight 物流设置 +├─ maintain 安全维护 +├─ safe 维护-页面链接 +├─ userFeedback 用户反馈 +├─ error-page 错误页 + +~~~ +## 目录结构 +主要目录结构及说明: +~~~ + +├── public # 静态资源 +│ ├── favicon.ico # favicon图标 +│ └── index.html # html 模板 +├── src # 源代码 +│ ├── api # 所有接口api +│ │ └──request.js # 请求封装 +│ │ └──accounts.js # 有关财务的接口 +│ │ └──promoter.js # 有关分销的接口 +│ │ └──app.js # 有关应用(小程序、公众号)的接口 +│ │ └──cms.js # 有关内容(文章管理、分类)的接口 +│ │ └──home.js # 有关首页的接口 +│ │ └──order.js # 有关订单的接口 +│ │ └──product.js # 有关商品的接口 +│ │ └──setting.js # 有关权限管理的接口 +│ │ └──system.js # 有关系统配置的接口 +│ │ └──systemForm.js # 有关表单组件的接口 +│ │ └──maintain.js # 有关安全维护的接口 +│ │ └──merchant.js # 有关商户的接口 +│ │ └──sms.js # 有关短信设置的接口 +│ │ └──user.js # 有关登录、用户的接口 +│ │ └──userFeedback.js # 有关用户反馈的接口 +│ │ └──freight.js # 有关物流设置的接口 +│ ├── assets # 图片、svg 等静态资源 +│ ├── icons # svg 等静态资源 +│ ├── components # 公共组件 +│ │ └──Breadcrumb # 头部标题标签 +│ │ └──cards # 统计 +│ │ └──echarts # 统计图 +│ │ └──goodsList # 商品列表 +│ │ └──Hamburger # 导航收缩组件 +│ │ └──HeaderSearch # 导航搜索组件 +│ │ └──iconFrom # 导航添加图标 +│ │ └──newsCategory # 图文组件 +│ │ └──RightPanel # 右侧设置按钮,设置导航相关 +│ │ └──Screenfull # 全屏 +│ │ └──SvgIcon # svg图标 +│ │ └──ThemePicker # 右侧设置按钮,设置组题颜色 +│ │ └──ueditorFrom # 富文本编辑器 +│ │ └──uploadPicture # 上传图片组件 +│ ├── layouts # 导航布局 +│ │ ├──index # 主页面 +│ │ ├──components # 导航组件 +│ │ └──Settings # 右边小按钮,设置导航等 +│ │ └──Sidebar # 侧边导航 +│ │ └──TagsView # tab标签页导航 +│ │ └──Navbar # 头部导航 +│ │ └──AppMain # 导航路由 +│ │ └──index.js # 组件引用 +│ │ └──mixins # 自适应大小 +│ ├── libs # 公共js方法 +│ │ └──settingMer # 配置请求地址 +│ ├── views # 所有页面 +│ │ └──login # 登录 +│ │ └──index # 登录 +│ │ └──dashboard # 首页 +│ │ └──product # 商品 +│ │ └──band # 品牌管理 +│ │ └──productClassify # 商品分类 +│ │ └──productExamine # 商品审核 +│ │ └──productComment # 商品评论管理 +│ │ └──order # 订单管理 +│ │ └──promoter # 分销 +│ │ └──user # 分销员列表 +│ │ └──config # 分销设置 +│ │ └──cms # 内容 +│ │ └──addArticle # 添加文章/编辑文章 +│ │ └──article # 文章管理 +│ │ └──articleCategory # 文章分类 +│ │ └──user # 用户 +│ │ └──group # 用户分组 +│ │ └──group # 用户标签 +│ │ └──list # 用户管理 +│ │ └──accounts # 财务 +│ │ └──bill # 充值记录 +│ │ └──capital # 资金记录 +│ │ └──extract # 提现管理 +│ │ └──reconciliation # 财务对账 +│ │ └──merchant # 商户 +│ │ └──list # 商户列表 +│ │ └──classify # 商户分类 +│ │ └──system # 商户菜单管理 +│ │ └──app # 应用 +│ │ └──wechat # 公众号 +│ │ └──menus # 微信菜单 +│ │ └──newsCategory # 图文管理 +│ │ └──save # 图文添加 +│ │ └──reply # 自动回复 +│ │ └──follow # 微信关注回复/无效关键词回复 +│ │ └──keyword # 关键字回复 +│ │ └──wxTemplate # 微信/小程序模板消息 +│ │ └──system # 设置 +│ │ └──config # 系统设置 +│ │ └──classify # 配置分类 +│ │ └──setting # 配置管理 +│ │ └──picture # 素材管理 +│ │ └──groupData # 组合设置 +│ │ └──list # 组合数据 +│ │ └──data # 组合数据列表/登录页幻灯片/首页幻灯片/首页导航按钮/首页推荐区/个人中心幻灯片/个人中心菜单/热门搜索/分销特权/分销海报/充值金额配置 +│ │ └──setting # 设置-权限管理 +│ │ └──systemRole # 身份管理 +│ │ └──systemAdmin # 管理员管理 +│ │ └──systemLog # 操作日志 +│ │ └──systemMenu # 菜单管理 +│ │ └──systemForm # 设置-商城设置 +│ │ └──setSystem # 基础配置/商城配置/余额充值设置/文件上传/短信提醒开关/公众号支付配置/小程序支付配置/公众号配置/小程序配置 +│ │ └──sms # 短信设置 +│ │ └──smsConfig # 短信账户 +│ │ └──smsTemplate # 短信模板 +│ │ └──smsPay # 短信购买 +│ │ └──freight # 物流设置 +│ │ └──express # 物流公司 +│ │ └──maintain # 安全维护 +│ │ └──dataBackup # 数据备份 +│ │ └──auth # 商业授权 +│ │ └──safe # 维护-页面链接 +│ │ └──pageLinks # 页面链接 +│ │ └──userFeedback # 用户-用户反馈 +│ │ └──list # 反馈列表 +│ │ └──classify # 反馈分类 +│ │ └──error-page # 错误页 +│ │ └──404 # 错误页404 +│ │ └──403 # 错误页403 +│ ├── filters # 过滤器 +│ ├── router # 路由配置 +│ │ └──modules # 页面路由模块 +│ │ └──accounts.js # 有关财务 +│ │ └──app.js # 有关应用(公众号) +│ │ └──cms.js # 有关内容(文章管理、文章分类) +│ │ └──config.js # 有关系统配置 +│ │ └──freight.js # 有关物流设置 +│ │ └──group.js # 有关组合数据 +│ │ └──maintain.js # 有关安全维护 +│ │ └──merchant.js # 有关商户 +│ │ └──order.js # 有关订单 +│ │ └──product.js # 有关商品 +│ │ └──promoter.js # 有关分销 +│ │ └──routine.js # 有关小程序 +│ │ └──safe.js # 有关维护 +│ │ └──setting.js # 有关权限 +│ │ └──sms.js # 有关短信 +│ │ └──systemForm.js # 有关商城设置 +│ │ └──user.js # 有关用户 +│ │ └──feedback.js # 有关用户反馈 +│ │ └──index.js # 路由的汇总 +│ ├── store # Vuex 状态管理 +│ ├── utils # 全局公用方法 +│ ├── styles # 样式管理 +│ ├── permission.js # 路由拦截 +│ ├── setting.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..fadb9a9 --- /dev/null +++ b/README.zh-CN.md @@ -0,0 +1,263 @@ +# 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 系统订单管理 +├─ promoter 分销 +├─ user 用户管理 +├─ accounts 财务管理 +├─ merchant 商户管理 +├─ app 各个应用模块功能管理公众号、小程序、支付宝、百度小程序、今日头条小程序 +├─ system 系统更新日志 数据库管理 素材管理 +├─ setting 系统身份管理 系统权限管理、系统菜单管理、操作日志 +├─ sms 短信设置 +├─ systemForm 商城设置 +├─ freight 物流设置 +├─ maintain 安全维护 +├─ safe 维护-页面链接 +├─ userFeedback 用户反馈 +├─ error-page 错误页 + +~~~ +## 目录结构 +主要目录结构及说明: +~~~ + +├── public # 静态资源 +│ ├── favicon.ico # favicon图标 +│ └── index.html # html 模板 +├── src # 源代码 +│ ├── api # 所有接口api +│ │ └──request.js # 请求封装 +│ │ └──accounts.js # 有关财务的接口 +│ │ └──promoter.js # 有关分销的接口 +│ │ └──app.js # 有关应用(小程序、公众号)的接口 +│ │ └──cms.js # 有关内容(文章管理、分类)的接口 +│ │ └──home.js # 有关首页的接口 +│ │ └──order.js # 有关订单的接口 +│ │ └──product.js # 有关商品的接口 +│ │ └──setting.js # 有关权限管理的接口 +│ │ └──system.js # 有关系统配置的接口 +│ │ └──systemForm.js # 有关表单组件的接口 +│ │ └──maintain.js # 有关安全维护的接口 +│ │ └──merchant.js # 有关商户的接口 +│ │ └──sms.js # 有关短信设置的接口 +│ │ └──user.js # 有关登录、用户的接口 +│ │ └──userFeedback.js # 有关用户反馈的接口 +│ │ └──freight.js # 有关物流设置的接口 +│ ├── assets # 图片、svg 等静态资源 +│ ├── icons # svg 等静态资源 +│ ├── components # 公共组件 +│ │ └──Breadcrumb # 头部标题标签 +│ │ └──cards # 统计 +│ │ └──echarts # 统计图 +│ │ └──goodsList # 商品列表 +│ │ └──Hamburger # 导航收缩组件 +│ │ └──HeaderSearch # 导航搜索组件 +│ │ └──iconFrom # 导航添加图标 +│ │ └──newsCategory # 图文组件 +│ │ └──RightPanel # 右侧设置按钮,设置导航相关 +│ │ └──Screenfull # 全屏 +│ │ └──SvgIcon # svg图标 +│ │ └──ThemePicker # 右侧设置按钮,设置组题颜色 +│ │ └──ueditorFrom # 富文本编辑器 +│ │ └──uploadPicture # 上传图片组件 +│ ├── layouts # 导航布局 +│ │ ├──index # 主页面 +│ │ ├──components # 导航组件 +│ │ └──Settings # 右边小按钮,设置导航等 +│ │ └──Sidebar # 侧边导航 +│ │ └──TagsView # tab标签页导航 +│ │ └──Navbar # 头部导航 +│ │ └──AppMain # 导航路由 +│ │ └──index.js # 组件引用 +│ │ └──mixins # 自适应大小 +│ ├── libs # 公共js方法 +│ │ └──settingMer # 配置请求地址 +│ ├── views # 所有页面 +│ │ └──login # 登录 +│ │ └──index # 登录 +│ │ └──dashboard # 首页 +│ │ └──product # 商品 +│ │ └──band # 品牌管理 +│ │ └──productClassify # 商品分类 +│ │ └──productExamine # 商品审核 +│ │ └──productComment # 商品评论管理 +│ │ └──order # 订单管理 +│ │ └──promoter # 分销 +│ │ └──user # 分销员列表 +│ │ └──config # 分销设置 +│ │ └──cms # 内容 +│ │ └──addArticle # 添加文章/编辑文章 +│ │ └──article # 文章管理 +│ │ └──articleCategory # 文章分类 +│ │ └──user # 用户 +│ │ └──group # 用户分组 +│ │ └──group # 用户标签 +│ │ └──list # 用户管理 +│ │ └──accounts # 财务 +│ │ └──bill # 充值记录 +│ │ └──capital # 资金记录 +│ │ └──extract # 提现管理 +│ │ └──reconciliation # 财务对账 +│ │ └──merchant # 商户 +│ │ └──list # 商户列表 +│ │ └──classify # 商户分类 +│ │ └──system # 商户菜单管理 +│ │ └──app # 应用 +│ │ └──wechat # 公众号 +│ │ └──menus # 微信菜单 +│ │ └──newsCategory # 图文管理 +│ │ └──save # 图文添加 +│ │ └──reply # 自动回复 +│ │ └──follow # 微信关注回复/无效关键词回复 +│ │ └──keyword # 关键字回复 +│ │ └──wxTemplate # 微信/小程序模板消息 +│ │ └──system # 设置 +│ │ └──config # 系统设置 +│ │ └──classify # 配置分类 +│ │ └──setting # 配置管理 +│ │ └──picture # 素材管理 +│ │ └──groupData # 组合设置 +│ │ └──list # 组合数据 +│ │ └──data # 组合数据列表/登录页幻灯片/首页幻灯片/首页导航按钮/首页推荐区/个人中心幻灯片/个人中心菜单/热门搜索/分销特权/分销海报/充值金额配置 +│ │ └──setting # 设置-权限管理 +│ │ └──systemRole # 身份管理 +│ │ └──systemAdmin # 管理员管理 +│ │ └──systemLog # 操作日志 +│ │ └──systemMenu # 菜单管理 +│ │ └──systemForm # 设置-商城设置 +│ │ └──setSystem # 基础配置/商城配置/余额充值设置/文件上传/短信提醒开关/公众号支付配置/小程序支付配置/公众号配置/小程序配置 +│ │ └──sms # 短信设置 +│ │ └──smsConfig # 短信账户 +│ │ └──smsTemplate # 短信模板 +│ │ └──smsPay # 短信购买 +│ │ └──freight # 物流设置 +│ │ └──express # 物流公司 +│ │ └──maintain # 安全维护 +│ │ └──dataBackup # 数据备份 +│ │ └──auth # 商业授权 +│ │ └──safe # 维护-页面链接 +│ │ └──pageLinks # 页面链接 +│ │ └──userFeedback # 用户-用户反馈 +│ │ └──list # 反馈列表 +│ │ └──classify # 反馈分类 +│ │ └──error-page # 错误页 +│ │ └──404 # 错误页404 +│ │ └──403 # 错误页403 +│ ├── filters # 过滤器 +│ ├── router # 路由配置 +│ │ └──modules # 页面路由模块 +│ │ └──accounts.js # 有关财务 +│ │ └──app.js # 有关应用(公众号) +│ │ └──cms.js # 有关内容(文章管理、文章分类) +│ │ └──config.js # 有关系统配置 +│ │ └──freight.js # 有关物流设置 +│ │ └──group.js # 有关组合数据 +│ │ └──maintain.js # 有关安全维护 +│ │ └──merchant.js # 有关商户 +│ │ └──order.js # 有关订单 +│ │ └──product.js # 有关商品 +│ │ └──promoter.js # 有关分销 +│ │ └──routine.js # 有关小程序 +│ │ └──safe.js # 有关维护 +│ │ └──setting.js # 有关权限 +│ │ └──sms.js # 有关短信 +│ │ └──systemForm.js # 有关商城设置 +│ │ └──user.js # 有关用户 +│ │ └──feedback.js # 有关用户反馈 +│ │ └──index.js # 路由的汇总 +│ ├── store # Vuex 状态管理 +│ ├── utils # 全局公用方法 +│ ├── styles # 样式管理 +│ ├── permission.js # 路由拦截 +│ ├── setting.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..bcba030 --- /dev/null +++ b/build/index.js @@ -0,0 +1,45 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2024 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..e527426 --- /dev/null +++ b/mock/article.js @@ -0,0 +1,125 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2024 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..3a043fa --- /dev/null +++ b/mock/index.js @@ -0,0 +1,66 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2024 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..2b0119c --- /dev/null +++ b/mock/mock-server.js @@ -0,0 +1,93 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2024 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..91d3548 --- /dev/null +++ b/mock/remote-search.js @@ -0,0 +1,60 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2024 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..d957493 --- /dev/null +++ b/mock/role/index.js @@ -0,0 +1,98 @@ +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..d718919 --- /dev/null +++ b/mock/role/routes.js @@ -0,0 +1,525 @@ +// 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..90e4078 --- /dev/null +++ b/mock/user.js @@ -0,0 +1,92 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2024 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..ef93fef --- /dev/null +++ b/package.json @@ -0,0 +1,136 @@ +{ + "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" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "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", + "@jiaminghi/data-view": "^2.10.0", + "axios": "0.18.1", + "clipboard": "^2.0.6", + "codemirror": "5.45.0", + "core-js": "^2.6.12", + "cos-js-sdk-v5": "^1.4.5", + "crypto-js": "^4.1.1", + "driver.js": "0.9.5", + "dropzone": "5.5.1", + "echarts": "^5.4.0", + "element-ui": "^2.15.12", + "exceljs": "^4.3.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", + "krry-transfer": "^1.2.21", + "lowdb": "^1.0.0", + "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", + "qiniu-js": "^3.4.1", + "qrcodejs2": "0.0.2", + "screenfull": "4.2.0", + "script-loader": "0.7.2", + "showdown": "1.9.0", + "sortablejs": "1.8.4", + "v-viewer": "^1.5.1", + "vue": "2.6.10", + "vue-awesome-swiper": "^3.1.3", + "vue-count-to": "1.0.13", + "vue-easytable": "^2.27.1", + "vue-qr": "^2.5.0", + "vue-router": "3.0.2", + "vue-seamless-scroll": "^1.1.23", + "vue-splitpane": "1.0.4", + "vue-ueditor-wrap": "^2.4.1", + "vue-waterfall-easy": "^2.4.4", + "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", + "plop": "2.3.0", + "runjs": "^4.3.2", + "sass-loader": "^7.3.1", + "script-ext-html-webpack-plugin": "2.1.3", + "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", + "webpack": "^4.44.2" + }, + "engines": { + "node": ">=8.9", + "npm": ">= 3.0.0" + }, + "browserslist": [ + "> 1%", + "last 2 versions" + ] +} 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..287f98d --- /dev/null +++ b/plop-templates/component/prompt.js @@ -0,0 +1,64 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2024 https://www.crmeb.com All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 +// +---------------------------------------------------------------------- +// | Author: CRMEB Team +// +---------------------------------------------------------------------- +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: ' + + diff --git a/src/views/promoter/user/index.vue b/src/views/promoter/user/index.vue new file mode 100644 index 0000000..0b56870 --- /dev/null +++ b/src/views/promoter/user/index.vue @@ -0,0 +1,537 @@ + + + + + diff --git a/src/views/safe/pageLinks/index.vue b/src/views/safe/pageLinks/index.vue new file mode 100644 index 0000000..cf0bb25 --- /dev/null +++ b/src/views/safe/pageLinks/index.vue @@ -0,0 +1,770 @@ + + + + + diff --git a/src/views/safe/pcLinks/index.vue b/src/views/safe/pcLinks/index.vue new file mode 100644 index 0000000..9c4f648 --- /dev/null +++ b/src/views/safe/pcLinks/index.vue @@ -0,0 +1,323 @@ + + + + + diff --git a/src/views/service/balanceRecord/index.vue b/src/views/service/balanceRecord/index.vue new file mode 100644 index 0000000..27c1134 --- /dev/null +++ b/src/views/service/balanceRecord/index.vue @@ -0,0 +1,205 @@ + + + + + diff --git a/src/views/service/customer/index.vue b/src/views/service/customer/index.vue new file mode 100644 index 0000000..e054164 --- /dev/null +++ b/src/views/service/customer/index.vue @@ -0,0 +1,347 @@ + + + + + diff --git a/src/views/service/purchase/index.vue b/src/views/service/purchase/index.vue new file mode 100644 index 0000000..c38fcc7 --- /dev/null +++ b/src/views/service/purchase/index.vue @@ -0,0 +1,265 @@ + + + + + diff --git a/src/views/service/settings/index.vue b/src/views/service/settings/index.vue new file mode 100644 index 0000000..d4ae85d --- /dev/null +++ b/src/views/service/settings/index.vue @@ -0,0 +1,192 @@ + + + + + diff --git a/src/views/setting/agreements/index.vue b/src/views/setting/agreements/index.vue new file mode 100644 index 0000000..2b17e27 --- /dev/null +++ b/src/views/setting/agreements/index.vue @@ -0,0 +1,173 @@ + + + \ No newline at end of file diff --git a/src/views/setting/devise/cateMerchant.vue b/src/views/setting/devise/cateMerchant.vue new file mode 100644 index 0000000..b790053 --- /dev/null +++ b/src/views/setting/devise/cateMerchant.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/src/views/setting/devise/catePlantform.vue b/src/views/setting/devise/catePlantform.vue new file mode 100644 index 0000000..a637c1b --- /dev/null +++ b/src/views/setting/devise/catePlantform.vue @@ -0,0 +1,114 @@ + + + + + diff --git a/src/views/setting/devise/components/uploadPic.vue b/src/views/setting/devise/components/uploadPic.vue new file mode 100644 index 0000000..99b0122 --- /dev/null +++ b/src/views/setting/devise/components/uploadPic.vue @@ -0,0 +1,219 @@ + + + + + \ No newline at end of file diff --git a/src/views/setting/devise/index.vue b/src/views/setting/devise/index.vue new file mode 100644 index 0000000..39fb65e --- /dev/null +++ b/src/views/setting/devise/index.vue @@ -0,0 +1,1392 @@ + + + + + diff --git a/src/views/setting/devise/linkList.vue b/src/views/setting/devise/linkList.vue new file mode 100644 index 0000000..89289fc --- /dev/null +++ b/src/views/setting/devise/linkList.vue @@ -0,0 +1,146 @@ + + + + + diff --git a/src/views/setting/devise/links.vue b/src/views/setting/devise/links.vue new file mode 100644 index 0000000..da59eeb --- /dev/null +++ b/src/views/setting/devise/links.vue @@ -0,0 +1,156 @@ + + + + + diff --git a/src/views/setting/devise/list.vue b/src/views/setting/devise/list.vue new file mode 100644 index 0000000..af65f83 --- /dev/null +++ b/src/views/setting/devise/list.vue @@ -0,0 +1,378 @@ + + + + + diff --git a/src/views/setting/devise/merLink.vue b/src/views/setting/devise/merLink.vue new file mode 100644 index 0000000..2cfe466 --- /dev/null +++ b/src/views/setting/devise/merLink.vue @@ -0,0 +1,146 @@ + + + + + diff --git a/src/views/setting/devise/merchantList.vue b/src/views/setting/devise/merchantList.vue new file mode 100644 index 0000000..c3bc4ee --- /dev/null +++ b/src/views/setting/devise/merchantList.vue @@ -0,0 +1,427 @@ + + + + + diff --git a/src/views/setting/devise/microList.vue b/src/views/setting/devise/microList.vue new file mode 100644 index 0000000..5f8f40d --- /dev/null +++ b/src/views/setting/devise/microList.vue @@ -0,0 +1,316 @@ + + + + + diff --git a/src/views/setting/devise/shopStreet.vue b/src/views/setting/devise/shopStreet.vue new file mode 100644 index 0000000..e555cec --- /dev/null +++ b/src/views/setting/devise/shopStreet.vue @@ -0,0 +1,184 @@ + + + + diff --git a/src/views/setting/devise/users.vue b/src/views/setting/devise/users.vue new file mode 100644 index 0000000..1bd9c60 --- /dev/null +++ b/src/views/setting/devise/users.vue @@ -0,0 +1,696 @@ + + + + diff --git a/src/views/setting/devise/visualization.vue b/src/views/setting/devise/visualization.vue new file mode 100644 index 0000000..cba2e06 --- /dev/null +++ b/src/views/setting/devise/visualization.vue @@ -0,0 +1,1489 @@ + + + + + diff --git a/src/views/setting/systemAdmin/index.vue b/src/views/setting/systemAdmin/index.vue new file mode 100644 index 0000000..f0963a9 --- /dev/null +++ b/src/views/setting/systemAdmin/index.vue @@ -0,0 +1,220 @@ + + + + + diff --git a/src/views/setting/systemLog/index.vue b/src/views/setting/systemLog/index.vue new file mode 100644 index 0000000..13d00d2 --- /dev/null +++ b/src/views/setting/systemLog/index.vue @@ -0,0 +1,190 @@ + + + + + diff --git a/src/views/setting/systemMenu/index.vue b/src/views/setting/systemMenu/index.vue new file mode 100644 index 0000000..851e5ce --- /dev/null +++ b/src/views/setting/systemMenu/index.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/src/views/setting/systemRole/index.vue b/src/views/setting/systemRole/index.vue new file mode 100644 index 0000000..243ea37 --- /dev/null +++ b/src/views/setting/systemRole/index.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/views/setting/themeStyle/index.vue b/src/views/setting/themeStyle/index.vue new file mode 100644 index 0000000..30a647f --- /dev/null +++ b/src/views/setting/themeStyle/index.vue @@ -0,0 +1,269 @@ + + + + diff --git a/src/views/sms/smsConfig/components/changePsd.vue b/src/views/sms/smsConfig/components/changePsd.vue new file mode 100644 index 0000000..686a286 --- /dev/null +++ b/src/views/sms/smsConfig/components/changePsd.vue @@ -0,0 +1,212 @@ + + + + diff --git a/src/views/sms/smsConfig/components/changeSignature.vue b/src/views/sms/smsConfig/components/changeSignature.vue new file mode 100644 index 0000000..63f4980 --- /dev/null +++ b/src/views/sms/smsConfig/components/changeSignature.vue @@ -0,0 +1,235 @@ + + + + diff --git a/src/views/sms/smsConfig/components/loginFrom.vue b/src/views/sms/smsConfig/components/loginFrom.vue new file mode 100644 index 0000000..7180eaa --- /dev/null +++ b/src/views/sms/smsConfig/components/loginFrom.vue @@ -0,0 +1,180 @@ + + + + diff --git a/src/views/sms/smsConfig/components/register.vue b/src/views/sms/smsConfig/components/register.vue new file mode 100644 index 0000000..807f7b8 --- /dev/null +++ b/src/views/sms/smsConfig/components/register.vue @@ -0,0 +1,273 @@ + + + + diff --git a/src/views/sms/smsConfig/components/tableList.vue b/src/views/sms/smsConfig/components/tableList.vue new file mode 100644 index 0000000..90621ec --- /dev/null +++ b/src/views/sms/smsConfig/components/tableList.vue @@ -0,0 +1,123 @@ + + + + + diff --git a/src/views/sms/smsConfig/index.vue b/src/views/sms/smsConfig/index.vue new file mode 100644 index 0000000..122e5ae --- /dev/null +++ b/src/views/sms/smsConfig/index.vue @@ -0,0 +1,185 @@ + + + + + diff --git a/src/views/sms/smsPay/index.vue b/src/views/sms/smsPay/index.vue new file mode 100644 index 0000000..a1c2485 --- /dev/null +++ b/src/views/sms/smsPay/index.vue @@ -0,0 +1,271 @@ + + + + + diff --git a/src/views/sms/smsTemplate/applyList.vue b/src/views/sms/smsTemplate/applyList.vue new file mode 100644 index 0000000..feed09f --- /dev/null +++ b/src/views/sms/smsTemplate/applyList.vue @@ -0,0 +1,170 @@ + + + + + diff --git a/src/views/sms/smsTemplate/index.vue b/src/views/sms/smsTemplate/index.vue new file mode 100644 index 0000000..66313d6 --- /dev/null +++ b/src/views/sms/smsTemplate/index.vue @@ -0,0 +1,230 @@ + + + + + diff --git a/src/views/station/notice/index.vue b/src/views/station/notice/index.vue new file mode 100644 index 0000000..c31f0a9 --- /dev/null +++ b/src/views/station/notice/index.vue @@ -0,0 +1,316 @@ + + + + + diff --git a/src/views/system/config/classify.vue b/src/views/system/config/classify.vue new file mode 100644 index 0000000..d822446 --- /dev/null +++ b/src/views/system/config/classify.vue @@ -0,0 +1,193 @@ + + + + + diff --git a/src/views/system/config/picture.vue b/src/views/system/config/picture.vue new file mode 100644 index 0000000..41f35db --- /dev/null +++ b/src/views/system/config/picture.vue @@ -0,0 +1,35 @@ + + + + + diff --git a/src/views/system/config/setting.vue b/src/views/system/config/setting.vue new file mode 100644 index 0000000..8615de8 --- /dev/null +++ b/src/views/system/config/setting.vue @@ -0,0 +1,226 @@ + + + + + diff --git a/src/views/system/customer_keyword/index.vue b/src/views/system/customer_keyword/index.vue new file mode 100644 index 0000000..c0bf55a --- /dev/null +++ b/src/views/system/customer_keyword/index.vue @@ -0,0 +1,384 @@ + + + + + diff --git a/src/views/system/exportFile/index.vue b/src/views/system/exportFile/index.vue new file mode 100644 index 0000000..8f80354 --- /dev/null +++ b/src/views/system/exportFile/index.vue @@ -0,0 +1,172 @@ + + + + + diff --git a/src/views/system/groupData/data.vue b/src/views/system/groupData/data.vue new file mode 100644 index 0000000..f7d8370 --- /dev/null +++ b/src/views/system/groupData/data.vue @@ -0,0 +1,245 @@ + + + + + diff --git a/src/views/system/groupData/list.vue b/src/views/system/groupData/list.vue new file mode 100644 index 0000000..30addf3 --- /dev/null +++ b/src/views/system/groupData/list.vue @@ -0,0 +1,132 @@ + + + + + diff --git a/src/views/system/notification/index.vue b/src/views/system/notification/index.vue new file mode 100644 index 0000000..ba593ff --- /dev/null +++ b/src/views/system/notification/index.vue @@ -0,0 +1,211 @@ + + + + + diff --git a/src/views/system/topic/data.vue b/src/views/system/topic/data.vue new file mode 100644 index 0000000..995d2e4 --- /dev/null +++ b/src/views/system/topic/data.vue @@ -0,0 +1,534 @@ + + + + + diff --git a/src/views/systemForm/cityDelivery/index.vue b/src/views/systemForm/cityDelivery/index.vue new file mode 100644 index 0000000..98b7744 --- /dev/null +++ b/src/views/systemForm/cityDelivery/index.vue @@ -0,0 +1,92 @@ + + + + + diff --git a/src/views/systemForm/form/create.vue b/src/views/systemForm/form/create.vue new file mode 100644 index 0000000..d1079fd --- /dev/null +++ b/src/views/systemForm/form/create.vue @@ -0,0 +1,1001 @@ + + + + + \ No newline at end of file diff --git a/src/views/systemForm/form/details.vue b/src/views/systemForm/form/details.vue new file mode 100644 index 0000000..4dbf317 --- /dev/null +++ b/src/views/systemForm/form/details.vue @@ -0,0 +1,200 @@ + + + + diff --git a/src/views/systemForm/form/index.vue b/src/views/systemForm/form/index.vue new file mode 100644 index 0000000..bc75e55 --- /dev/null +++ b/src/views/systemForm/form/index.vue @@ -0,0 +1,149 @@ + + + + + diff --git a/src/views/systemForm/setSystem/index.vue b/src/views/systemForm/setSystem/index.vue new file mode 100644 index 0000000..e0bc57e --- /dev/null +++ b/src/views/systemForm/setSystem/index.vue @@ -0,0 +1,257 @@ + + + + + diff --git a/src/views/user/agreement/index.vue b/src/views/user/agreement/index.vue new file mode 100644 index 0000000..2b9e108 --- /dev/null +++ b/src/views/user/agreement/index.vue @@ -0,0 +1,170 @@ + + + + + + + + diff --git a/src/views/user/group/index.vue b/src/views/user/group/index.vue new file mode 100644 index 0000000..c036ee8 --- /dev/null +++ b/src/views/user/group/index.vue @@ -0,0 +1,162 @@ + + + + + diff --git a/src/views/user/list/couponList.vue b/src/views/user/list/couponList.vue new file mode 100644 index 0000000..6a76574 --- /dev/null +++ b/src/views/user/list/couponList.vue @@ -0,0 +1,238 @@ + + + + + diff --git a/src/views/user/list/index.vue b/src/views/user/list/index.vue new file mode 100644 index 0000000..3c751e2 --- /dev/null +++ b/src/views/user/list/index.vue @@ -0,0 +1,1011 @@ + + + + + diff --git a/src/views/user/list/userCreate.vue b/src/views/user/list/userCreate.vue new file mode 100644 index 0000000..f93bc79 --- /dev/null +++ b/src/views/user/list/userCreate.vue @@ -0,0 +1,263 @@ + + + + diff --git a/src/views/user/list/userDetails.vue b/src/views/user/list/userDetails.vue new file mode 100644 index 0000000..6d1c85c --- /dev/null +++ b/src/views/user/list/userDetails.vue @@ -0,0 +1,1431 @@ + + + + + diff --git a/src/views/user/member/config.vue b/src/views/user/member/config.vue new file mode 100644 index 0000000..a678d74 --- /dev/null +++ b/src/views/user/member/config.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/src/views/user/member/description.vue b/src/views/user/member/description.vue new file mode 100644 index 0000000..f16b075 --- /dev/null +++ b/src/views/user/member/description.vue @@ -0,0 +1,171 @@ + + + + + + + + diff --git a/src/views/user/member/equity.vue b/src/views/user/member/equity.vue new file mode 100644 index 0000000..96307a5 --- /dev/null +++ b/src/views/user/member/equity.vue @@ -0,0 +1,122 @@ + + + + + diff --git a/src/views/user/member/index.vue b/src/views/user/member/index.vue new file mode 100644 index 0000000..87ed26e --- /dev/null +++ b/src/views/user/member/index.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/src/views/user/member/interests.vue b/src/views/user/member/interests.vue new file mode 100644 index 0000000..699f894 --- /dev/null +++ b/src/views/user/member/interests.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/src/views/user/member/list.vue b/src/views/user/member/list.vue new file mode 100644 index 0000000..1fea7a0 --- /dev/null +++ b/src/views/user/member/list.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/src/views/user/member/record.vue b/src/views/user/member/record.vue new file mode 100644 index 0000000..aacce48 --- /dev/null +++ b/src/views/user/member/record.vue @@ -0,0 +1,172 @@ + + + + + diff --git a/src/views/user/member/type.vue b/src/views/user/member/type.vue new file mode 100644 index 0000000..dbeddc6 --- /dev/null +++ b/src/views/user/member/type.vue @@ -0,0 +1,149 @@ + + + + + diff --git a/src/views/user/member/vipAgreement.vue b/src/views/user/member/vipAgreement.vue new file mode 100644 index 0000000..9f2afa8 --- /dev/null +++ b/src/views/user/member/vipAgreement.vue @@ -0,0 +1,168 @@ + + + + + + + + diff --git a/src/views/user/search/index.vue b/src/views/user/search/index.vue new file mode 100644 index 0000000..e29e78b --- /dev/null +++ b/src/views/user/search/index.vue @@ -0,0 +1,235 @@ + + + + diff --git a/src/views/user/setupUser/index.vue b/src/views/user/setupUser/index.vue new file mode 100644 index 0000000..26ebba2 --- /dev/null +++ b/src/views/user/setupUser/index.vue @@ -0,0 +1,614 @@ + + + diff --git a/src/views/userFeedback/classify/index.vue b/src/views/userFeedback/classify/index.vue new file mode 100644 index 0000000..3ce4fce --- /dev/null +++ b/src/views/userFeedback/classify/index.vue @@ -0,0 +1,149 @@ + + + + + diff --git a/src/views/userFeedback/list/index.vue b/src/views/userFeedback/list/index.vue new file mode 100644 index 0000000..7c93178 --- /dev/null +++ b/src/views/userFeedback/list/index.vue @@ -0,0 +1,201 @@ + + + + + diff --git a/tests/unit/.eslintrc.js b/tests/unit/.eslintrc.js new file mode 100644 index 0000000..958d51b --- /dev/null +++ b/tests/unit/.eslintrc.js @@ -0,0 +1,5 @@ +module.exports = { + env: { + jest: true + } +} diff --git a/tests/unit/components/Hamburger.spec.js b/tests/unit/components/Hamburger.spec.js new file mode 100644 index 0000000..266e79d --- /dev/null +++ b/tests/unit/components/Hamburger.spec.js @@ -0,0 +1,27 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 +// +---------------------------------------------------------------------- +// | Author: CRMEB Team +// +---------------------------------------------------------------------- +import { shallowMount } from '@vue/test-utils' +import Hamburger from '@/components/hamBurger/index.vue' +describe('Hamburger.vue', () => { + it('toggle click', () => { + const wrapper = shallowMount(Hamburger) + const mockFn = jest.fn() + wrapper.vm.$on('toggleClick', mockFn) + wrapper.find('.hamburger').trigger('click') + expect(mockFn).toBeCalled() + }) + it('prop isActive', () => { + const wrapper = shallowMount(Hamburger) + wrapper.setProps({ isActive: true }) + expect(wrapper.contains('.is-active')).toBe(true) + wrapper.setProps({ isActive: false }) + expect(wrapper.contains('.is-active')).toBe(false) + }) +}) diff --git a/tests/unit/components/SvgIcon.spec.js b/tests/unit/components/SvgIcon.spec.js new file mode 100644 index 0000000..ac8a85a --- /dev/null +++ b/tests/unit/components/SvgIcon.spec.js @@ -0,0 +1,31 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 +// +---------------------------------------------------------------------- +// | Author: CRMEB Team +// +---------------------------------------------------------------------- +import { shallowMount } from '@vue/test-utils' +import SvgIcon from '@/components/SvgIcon/index.vue' +describe('SvgIcon.vue', () => { + it('iconClass', () => { + const wrapper = shallowMount(SvgIcon, { + propsData: { + iconClass: 'test' + } + }) + expect(wrapper.find('use').attributes().href).toBe('#icon-test') + }) + it('className', () => { + const wrapper = shallowMount(SvgIcon, { + propsData: { + iconClass: 'test' + } + }) + expect(wrapper.classes().length).toBe(1) + wrapper.setProps({ className: 'test' }) + expect(wrapper.classes().includes('test')).toBe(true) + }) +}) diff --git a/tests/unit/utils/formatTime.spec.js b/tests/unit/utils/formatTime.spec.js new file mode 100644 index 0000000..67eda05 --- /dev/null +++ b/tests/unit/utils/formatTime.spec.js @@ -0,0 +1,38 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 +// +---------------------------------------------------------------------- +// | Author: CRMEB Team +// +---------------------------------------------------------------------- +import { formatTime } from '@/utils/index.js' +describe('Utils:formatTime', () => { + const d = new Date('2018-07-13 17:54:01') // "2018-07-13 17:54:01" + const retrofit = 5 * 1000 + + it('ten digits timestamp', () => { + expect(formatTime((d / 1000).toFixed(0))).toBe('7月13日17时54分') + }) + it('test now', () => { + expect(formatTime(+new Date() - 1)).toBe('刚刚') + }) + it('less two minute', () => { + expect(formatTime(+new Date() - 60 * 2 * 1000 + retrofit)).toBe('2分钟前') + }) + it('less two hour', () => { + expect(formatTime(+new Date() - 60 * 60 * 2 * 1000 + retrofit)).toBe('2小时前') + }) + it('less one day', () => { + expect(formatTime(+new Date() - 60 * 60 * 24 * 1 * 1000)).toBe('1天前') + }) + it('more than one day', () => { + expect(formatTime(d)).toBe('7月13日17时54分') + }) + it('format', () => { + expect(formatTime(d, '{y}-{m}-{d} {h}:{i}')).toBe('2018-07-13 17:54') + expect(formatTime(d, '{y}-{m}-{d}')).toBe('2018-07-13') + expect(formatTime(d, '{y}/{m}/{d} {h}-{i}')).toBe('2018/07/13 17-54') + }) +}) diff --git a/tests/unit/utils/parseTime.spec.js b/tests/unit/utils/parseTime.spec.js new file mode 100644 index 0000000..9c2a3ee --- /dev/null +++ b/tests/unit/utils/parseTime.spec.js @@ -0,0 +1,41 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 +// +---------------------------------------------------------------------- +// | Author: CRMEB Team +// +---------------------------------------------------------------------- +import { parseTime } from '@/utils/index.js' +describe('Utils:parseTime', () => { + const d = new Date('2018-07-13 17:54:01') // "2018-07-13 17:54:01" + it('timestamp', () => { + expect(parseTime(d)).toBe('2018-07-13 17:54:01') + }) + + it('timestamp string', () => { + expect(parseTime((d + ''))).toBe('2018-07-13 17:54:01') + }) + + it('ten digits timestamp', () => { + expect(parseTime((d / 1000).toFixed(0))).toBe('2018-07-13 17:54:01') + }) + it('new Date', () => { + expect(parseTime(new Date(d))).toBe('2018-07-13 17:54:01') + }) + it('format', () => { + expect(parseTime(d, '{y}-{m}-{d} {h}:{i}')).toBe('2018-07-13 17:54') + expect(parseTime(d, '{y}-{m}-{d}')).toBe('2018-07-13') + expect(parseTime(d, '{y}/{m}/{d} {h}-{i}')).toBe('2018/07/13 17-54') + }) + it('get the day of the week', () => { + expect(parseTime(d, '{a}')).toBe('五') // 星期五 + }) + it('get the day of the week', () => { + expect(parseTime(+d + 1000 * 60 * 60 * 24 * 2, '{a}')).toBe('日') // 星期日 + }) + it('empty argument', () => { + expect(parseTime()).toBeNull() + }) +}) diff --git a/tests/unit/utils/validate.spec.js b/tests/unit/utils/validate.spec.js new file mode 100644 index 0000000..a1a0823 --- /dev/null +++ b/tests/unit/utils/validate.spec.js @@ -0,0 +1,37 @@ + +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 +// +---------------------------------------------------------------------- +// | Author: CRMEB Team +// +----------------------------------------------------------------------import { validUsername, validURL, validLowerCase, validUpperCase, validAlphabets } from '@/utils/validate.js' +describe('Utils:validate', () => { + it('validUsername', () => { + expect(validUsername('admin')).toBe(true) + expect(validUsername('editor')).toBe(true) + expect(validUsername('xxxx')).toBe(false) + }) + it('validURL', () => { + expect(validURL('https://github.com/PanJiaChen/vue-element-admin')).toBe(true) + expect(validURL('http://github.com/PanJiaChen/vue-element-admin')).toBe(true) + expect(validURL('github.com/PanJiaChen/vue-element-admin')).toBe(false) + }) + it('validLowerCase', () => { + expect(validLowerCase('abc')).toBe(true) + expect(validLowerCase('Abc')).toBe(false) + expect(validLowerCase('123abc')).toBe(false) + }) + it('validUpperCase', () => { + expect(validUpperCase('ABC')).toBe(true) + expect(validUpperCase('Abc')).toBe(false) + expect(validUpperCase('123ABC')).toBe(false) + }) + it('validAlphabets', () => { + expect(validAlphabets('ABC')).toBe(true) + expect(validAlphabets('Abc')).toBe(true) + expect(validAlphabets('123aBC')).toBe(false) + }) +}) diff --git a/vue.config.js b/vue.config.js new file mode 100644 index 0000000..6138b33 --- /dev/null +++ b/vue.config.js @@ -0,0 +1,137 @@ +'use strict' +const path = require('path') +const defaultSettings = require('./src/settings.js') + +function resolve(dir) { + return path.join(__dirname, dir) +} + +const name = defaultSettings.title || 'vue Element Admin' // page title + +// If your port is set to 80, +// use administrator privileges to execute the command line. +// For example, Mac: sudo npm run +// You can change the port by the following method: +// port = 9527 npm run dev OR npm run dev --port = 9527 +const port = process.env.port || process.env.npm_config_port || 9527 // dev port + +// All configuration item explanations can be find in https://cli.vuejs.org/config/ +module.exports = { + /** + * You will need to set publicPath if you plan to deploy your site under a sub path, + * for example GitHub Pages. If you plan to deploy your site to https://foo.github.io/bar/, + * then publicPath should be set to "/bar/". + * In most cases please use '/' !!! + * Detail: https://cli.vuejs.org/config/#publicpath + */ + publicPath: '/', + outputDir: 'dist', + assetsDir: 'system', + indexPath: process.env.NODE_ENV === 'development' ? 'index.html' : 'system.html', + lintOnSave: process.env.NODE_ENV === 'development', + productionSourceMap: false, + devServer: { + port: port, + // open: true, + overlay: { + warnings: false, + errors: true + }, + before: require('./mock/mock-server.js') + }, + configureWebpack: { + // provide the app's title in webpack's name field, so that + // it can be accessed in index.html to inject the correct title. + name: name, + resolve: { + alias: { + '@': resolve('src') + } + } + }, + css: { + loaderOptions: { + sass: { + // data:`@import "~@/assets/variable.scss";` v7之前使用 的是data,现在改成了prependData + data: `@import "@/styles/variables.scss";` + } + } + }, + chainWebpack(config) { + config.plugins.delete('preload') // TODO: need test + config.plugins.delete('prefetch') // TODO: need test + + // set svg-sprite-loader + config.module + .rule('svg') + .exclude.add(resolve('src/icons')) + .end() + + config.module + .rule('icons') + .test(/\.svg$/) + .include.add(resolve('src/icons')) + .end() + .use('svg-sprite-loader') + .loader('svg-sprite-loader') + .options({ + symbolId: 'icon-[name]' + }) + .end() + // set preserveWhitespace + config.module + .rule('vue') + .use('vue-loader') + .loader('vue-loader') + .tap(options => { + options.compilerOptions.preserveWhitespace = true + return options + }) + .end() + + config + // https://webpack.js.org/configuration/devtool/#development + .when(process.env.NODE_ENV === 'development', + config => config.devtool('cheap-source-map') + ) + + config + .when(process.env.NODE_ENV !== 'development', + config => { + config + .plugin('ScriptExtHtmlWebpackPlugin') + .after('html') + .use('script-ext-html-webpack-plugin', [{ + // `runtime` must same as runtimeChunk name. default is `runtime` + inline: /runtime\..*\.js$/ + }]) + .end() + config + .optimization.splitChunks({ + chunks: 'all', + cacheGroups: { + libs: { + name: 'chunk-libs', + test: /[\\/]node_modules[\\/]/, + priority: 10, + chunks: 'initial' // only package third parties that are initially dependent + }, + elementUI: { + name: 'chunk-elementUI', // split elementUI into a single package + priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app + test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm + }, + commons: { + name: 'chunk-commons', + test: resolve('src/components'), // can customize your rules + minChunks: 3, // minimum common number + priority: 5, + reuseExistingChunk: true + } + } + }) + config.optimization.runtimeChunk('single') + } + ) + } +}