├── .browserslistrc ├── .eslintrc.js ├── .gitignore ├── README.md ├── TODOconfig.json ├── babel.config.js ├── client ├── App.vue ├── api │ ├── index.js │ └── modules │ │ ├── image.js │ │ ├── page.js │ │ ├── psd.js │ │ └── user.js ├── common │ ├── animateCssData.js │ ├── fonts │ │ ├── demo.css │ │ ├── demo_index.html │ │ ├── iconfont.css │ │ ├── iconfont.eot │ │ ├── iconfont.js │ │ ├── iconfont.json │ │ ├── iconfont.svg │ │ ├── iconfont.ttf │ │ ├── iconfont.woff │ │ └── iconfont.woff2 │ ├── images │ │ ├── elementIcon │ │ │ ├── Switch.jpg │ │ │ ├── avatar.png │ │ │ ├── banner.png │ │ │ ├── border.png │ │ │ ├── button.png │ │ │ ├── calend.png │ │ │ ├── carousel.png │ │ │ ├── checkbox.jpg │ │ │ ├── circle-border.png │ │ │ ├── empty.png │ │ │ ├── form.png │ │ │ ├── funnel.jpg │ │ │ ├── iframe.png │ │ │ ├── image.png │ │ │ ├── lineCharts.jpg │ │ │ ├── map.png │ │ │ ├── map2.png │ │ │ ├── music.png │ │ │ ├── notice.png │ │ │ ├── pieCharts.jpg │ │ │ ├── qcode.png │ │ │ ├── radio.jpg │ │ │ ├── rate.jpg │ │ │ ├── splitLine.png │ │ │ ├── stepper.jpg │ │ │ ├── tabars.png │ │ │ ├── text.png │ │ │ ├── video.png │ │ │ ├── video2.png │ │ │ ├── wordcloud.jpg │ │ │ ├── 未标题-1.psd │ │ │ ├── 视频短信.png │ │ │ └── 轮播图.png │ │ ├── head.png │ │ ├── headerImage.png │ │ ├── login_bg.png │ │ ├── login_bg2.png │ │ ├── logo.png │ │ ├── logo.psd │ │ ├── nodata.jpg │ │ ├── nodata.png │ │ ├── pagecover-image.png │ │ ├── phoneModel.png │ │ ├── placeholder │ │ │ ├── placeholder-1.jpg │ │ │ ├── placeholder-10.jpg │ │ │ ├── placeholder-11.jpg │ │ │ ├── placeholder-12.jpg │ │ │ ├── placeholder-13.jpg │ │ │ ├── placeholder-2.jpg │ │ │ ├── placeholder-3.jpg │ │ │ ├── placeholder-4.jpg │ │ │ ├── placeholder-5.jpg │ │ │ ├── placeholder-6.jpg │ │ │ ├── placeholder-7.jpg │ │ │ ├── placeholder-8.jpg │ │ │ └── placeholder-9.jpg │ │ ├── quark--pagecover-image.psd │ │ ├── use-beb469.png │ │ ├── website │ │ │ ├── app-shots │ │ │ │ ├── app-screen-moc.png │ │ │ │ ├── app-shot-1-1.jpg │ │ │ │ ├── app-shot-1-2.jpg │ │ │ │ ├── app-shot-1-3.jpg │ │ │ │ ├── app-shot-1-4.jpg │ │ │ │ └── app-shot-1-5.jpg │ │ │ ├── background │ │ │ │ ├── app-shot-bg.png │ │ │ │ ├── banner-2-bg.jpg │ │ │ │ ├── banner-bg-1-1.png │ │ │ │ ├── cta-one-bg.png │ │ │ │ ├── faq-one-bg.png │ │ │ │ ├── inner-banner-bg-1-1.jpg │ │ │ │ └── video-one-bg.png │ │ │ ├── banner.png │ │ │ └── resources │ │ │ │ ├── brand-1-1.png │ │ │ │ ├── logo-dark.png │ │ │ │ ├── logo-light.png │ │ │ │ ├── preloader.png │ │ │ │ ├── testi-1-1.png │ │ │ │ └── video-1-1.jpg │ │ └── 未标题-1.png │ ├── js │ │ ├── mUtils.js │ │ ├── runAnimations.js │ │ └── secret.js │ ├── styles │ │ ├── bootstrap.min.css │ │ ├── element-variables.scss │ │ ├── index.scss │ │ ├── normalize.css │ │ └── variables.scss │ └── webfonts │ │ └── webfont.css ├── components │ ├── SketchRuleBg.vue │ ├── add-cooperationer │ │ ├── index.js │ │ └── index.vue │ ├── crawler-program │ │ ├── baiduh5.vue │ │ ├── h5ds.vue │ │ └── yiqixiu.vue │ ├── edit-shape.vue │ ├── image-cropper.vue │ ├── image-libs.vue │ ├── image-select.vue │ ├── login-background │ │ └── index.vue │ ├── notFundData.vue │ ├── page-header.vue │ ├── preview-wrapper.vue │ ├── reset-password.vue │ ├── thumbnail-panel.vue │ ├── upload-json.vue │ ├── upload-psd.vue │ ├── user-head-btn.vue │ └── user-info.vue ├── config │ └── index.js ├── eventBus │ └── index.js ├── filters │ └── index.js ├── libs │ ├── drag │ │ ├── draggable.vue │ │ ├── droppable.vue │ │ └── index.js │ ├── keypress │ │ ├── keycode.js │ │ └── keypress.js │ ├── sensitive_words │ │ ├── index.js │ │ ├── keywords.js │ │ └── keywordsAll.js │ └── userModel.js ├── main.js ├── mixins │ ├── contextmenu.js │ ├── elementEvents.js │ ├── ossUpload.js │ ├── pageModel.js │ └── userModel.js ├── pages │ ├── Login.vue │ ├── editor │ │ ├── DataModel.js │ │ ├── Index.vue │ │ ├── components │ │ │ ├── attr-configure │ │ │ │ ├── animation-edit.vue │ │ │ │ ├── attr-edit.vue │ │ │ │ ├── attr-props-components │ │ │ │ │ ├── base-attr.vue │ │ │ │ │ └── props-attr │ │ │ │ │ │ ├── NoticeBar.vue │ │ │ │ │ │ ├── avatar.vue │ │ │ │ │ │ ├── btnType.vue │ │ │ │ │ │ ├── grid.vue │ │ │ │ │ │ ├── imageSrc.vue │ │ │ │ │ │ ├── imageSrcList.vue │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ ├── location.vue │ │ │ │ │ │ ├── musicSrc.vue │ │ │ │ │ │ ├── text.vue │ │ │ │ │ │ ├── url.vue │ │ │ │ │ │ └── video.vue │ │ │ │ ├── event-edit.vue │ │ │ │ ├── page-attr-edit.vue │ │ │ │ └── script-edit.vue │ │ │ ├── component-libs │ │ │ │ └── Index.vue │ │ │ ├── control-bar.vue │ │ │ ├── editor-panel │ │ │ │ └── Index.vue │ │ │ ├── history.vue │ │ │ ├── keyboard.vue │ │ │ ├── page-manage.vue │ │ │ ├── preview.vue │ │ │ └── template-libs.vue │ │ └── ele-config.js │ ├── home │ │ ├── components │ │ │ ├── preview-template.vue │ │ │ └── preview.vue │ │ ├── index.vue │ │ ├── my-template.vue │ │ ├── page-data-detail.vue │ │ ├── page-data.vue │ │ ├── page-list.vue │ │ └── template-list.vue │ ├── layout.vue │ ├── template-view-example │ │ └── swiper-h5.vue │ └── website │ │ ├── components │ │ ├── banner.vue │ │ ├── contact.vue │ │ ├── footer.vue │ │ ├── headerNav.vue │ │ ├── products.vue │ │ └── question.vue │ │ └── index.vue ├── permission.js ├── plugins │ ├── AddressEdit │ │ ├── index.js │ │ └── src │ │ │ └── index.vue │ ├── FunnelChart │ │ ├── index.js │ │ └── src │ │ │ └── index.vue │ ├── LineChart │ │ ├── index.js │ │ └── src │ │ │ └── index.vue │ ├── NavBar │ │ ├── index.js │ │ └── src │ │ │ └── index.vue │ ├── PieChart │ │ ├── index.js │ │ └── src │ │ │ └── index.vue │ ├── WordCloud │ │ ├── index.js │ │ └── src │ │ │ └── index.vue │ ├── avatar │ │ ├── index.js │ │ └── src │ │ │ └── index.vue │ ├── banner │ │ ├── index.js │ │ └── src │ │ │ └── index.vue │ ├── bg-music │ │ ├── index.js │ │ └── src │ │ │ ├── index.vue │ │ │ └── music.png │ ├── button │ │ ├── index.js │ │ └── src │ │ │ └── index.vue │ ├── checkbox │ │ ├── index.js │ │ └── src │ │ │ └── index.vue │ ├── circle-border │ │ ├── index.js │ │ └── src │ │ │ └── index.vue │ ├── iframe │ │ ├── index.js │ │ └── src │ │ │ └── index.vue │ ├── image-carousel │ │ ├── index.js │ │ └── src │ │ │ └── index.vue │ ├── image │ │ ├── index.js │ │ └── src │ │ │ └── index.vue │ ├── index.js │ ├── input │ │ ├── index.js │ │ └── src │ │ │ └── index.vue │ ├── map │ │ ├── index.js │ │ └── src │ │ │ └── index.vue │ ├── notice │ │ ├── index.js │ │ └── src │ │ │ └── index.vue │ ├── qrcode │ │ ├── index.js │ │ └── src │ │ │ └── index.vue │ ├── radio │ │ ├── index.js │ │ └── src │ │ │ └── index.vue │ ├── rate │ │ ├── index.js │ │ └── src │ │ │ └── index.vue │ ├── rectangle-border │ │ ├── index.js │ │ └── src │ │ │ └── index.vue │ ├── stepper │ │ ├── index.js │ │ └── src │ │ │ └── index.vue │ ├── tabars │ │ ├── index.js │ │ └── src │ │ │ └── index.vue │ ├── text │ │ ├── index.js │ │ └── src │ │ │ └── index.vue │ └── video │ │ ├── index.js │ │ └── src │ │ └── index.vue ├── router │ └── index.js ├── service │ └── httpServer.js └── store │ ├── index.js │ └── modules │ ├── editor.js │ └── user.js ├── common ├── ajax.js ├── secret.js ├── swiper-config.js └── uitls.js ├── docs ├── .nojekyll ├── README.md ├── _coverpage.md ├── index.html └── static │ └── image │ ├── admin.png │ ├── index.jpg │ ├── login.png │ └── logo.png ├── engine-template ├── components │ └── components-template.vue ├── engine-h5-long │ ├── index.js │ └── src │ │ └── index.vue ├── engine-h5-relative │ ├── index.js │ └── src │ │ └── index.vue ├── engine-h5-swiper │ ├── index.js │ └── src │ │ ├── components-template.vue │ │ └── index.vue └── engine-pc │ ├── index.js │ └── src │ └── index.vue ├── package-lock.json ├── package.json ├── public ├── index.html └── static │ ├── css │ ├── chunk-0069f99e.9fab0072.css │ ├── chunk-05aa684b.836f79d0.css │ ├── chunk-1b5ebbde.04778ce4.css │ ├── chunk-2e03a6bb.26108f10.css │ ├── chunk-30466f2e.346304c2.css │ ├── chunk-39d883ed.4d235bf0.css │ ├── chunk-45ad6033.dd934ab5.css │ ├── chunk-5cac0eae.8aeb7fe6.css │ ├── chunk-6f24315e.c3a401dd.css │ ├── chunk-7997af12.e9e1cbc7.css │ ├── chunk-90f63cb6.b4463508.css │ ├── chunk-936c35bc.bc7cc5c2.css │ ├── chunk-vendors.df6b3f8b.css │ └── index.8b7b23b4.css │ ├── fonts │ ├── element-icons.535877f5.woff │ ├── element-icons.732389de.ttf │ ├── iconfont.2adcd9a2.eot │ ├── iconfont.4e2258a0.ttf │ └── iconfont.687560f7.woff │ ├── img │ ├── Switch.a0e8f86f.jpg │ ├── avatar.e033ea29.png │ ├── banner.95ab5f16.png │ ├── banner.f77c57eb.png │ ├── button.b3883c1e.png │ ├── carousel.a5b2553e.png │ ├── checkbox.bd4b7763.jpg │ ├── circle-border.5fe597d1.png │ ├── form.d3b05bae.png │ ├── funnel.c69030ce.jpg │ ├── headerImage.baefd97f.png │ ├── iconfont.d177932d.svg │ ├── iframe.6d67bf34.png │ ├── image.e19d7f4a.png │ ├── lineCharts.ae72a114.jpg │ ├── login_bg.b2d321f6.png │ ├── login_bg2.53ecd4df.png │ ├── logo.30525635.png │ ├── map.cdd0a85e.png │ ├── music.4a52a7c8.png │ ├── nodata.6b16cccd.jpg │ ├── notice.1a7c4d2d.png │ ├── pagecover-image.677bc94e.png │ ├── pieCharts.1c159a3c.jpg │ ├── qcode.5d8d13b4.png │ ├── radio.8232ca9c.jpg │ ├── rate.45d4b8f2.jpg │ ├── stepper.4d9b0ce6.jpg │ ├── tabars.ca6734c0.png │ ├── text.857c2679.png │ ├── use-beb469.beb469b6.png │ ├── video.9e4bd305.png │ └── wordcloud.7d29abbe.jpg │ └── js │ ├── chunk-0069f99e.71c57878.js │ ├── chunk-0069f99e.71c57878.js.map │ ├── chunk-05aa684b.63a748a2.js │ ├── chunk-05aa684b.63a748a2.js.map │ ├── chunk-1b5ebbde.5cca8649.js │ ├── chunk-1b5ebbde.5cca8649.js.map │ ├── chunk-2e03a6bb.9a328952.js │ ├── chunk-2e03a6bb.9a328952.js.map │ ├── chunk-30466f2e.e31c4bb0.js │ ├── chunk-30466f2e.e31c4bb0.js.map │ ├── chunk-39d883ed.8cccd16a.js │ ├── chunk-39d883ed.8cccd16a.js.map │ ├── chunk-45ad6033.bf74defa.js │ ├── chunk-45ad6033.bf74defa.js.map │ ├── chunk-5cac0eae.33177303.js │ ├── chunk-5cac0eae.33177303.js.map │ ├── chunk-6f24315e.f88c00cf.js │ ├── chunk-6f24315e.f88c00cf.js.map │ ├── chunk-7997af12.ca42408c.js │ ├── chunk-7997af12.ca42408c.js.map │ ├── chunk-90f63cb6.a8d41848.js │ ├── chunk-90f63cb6.a8d41848.js.map │ ├── chunk-936c35bc.c0ef5926.js │ ├── chunk-936c35bc.c0ef5926.js.map │ ├── chunk-vendors.5de3f4ba.js │ ├── chunk-vendors.5de3f4ba.js.map │ ├── index.c184ba9b.js │ └── index.c184ba9b.js.map ├── service ├── api │ ├── file.js │ ├── image.js │ ├── page.js │ └── user.js ├── app.js ├── config │ └── index.js ├── controller │ ├── API.js │ ├── auth.js │ ├── cooperation.js │ ├── htmlToCanvas.js │ ├── image.js │ ├── page.js │ ├── psd.js │ └── user.js ├── core │ ├── index.js │ └── loader.js ├── extend │ └── helper.js ├── middleware │ ├── auth.js │ └── handlerError.js ├── model │ ├── image.js │ ├── page.js │ └── user.js ├── public │ ├── admin.html │ ├── engine_libs │ │ └── h5-swiper │ │ │ ├── demo.html │ │ │ ├── page-engine.common.js │ │ │ ├── page-engine.common.js.map │ │ │ ├── page-engine.css │ │ │ ├── page-engine.umd.js │ │ │ ├── page-engine.umd.js.map │ │ │ ├── page-engine.umd.min.js │ │ │ └── page-engine.umd.min.js.map │ ├── favicon.ico │ ├── index.html │ ├── resource │ │ ├── avatar │ │ │ └── admin │ │ │ │ ├── logo - 副本.png │ │ │ │ └── v2-73b8307b2db44c617f4e8515ce67dd39_r.jpg │ │ └── image_lib │ │ │ └── admin │ │ │ ├── 1618634024488 │ │ │ └── 003.png │ │ │ ├── 1619146421668 │ │ │ └── 未命名文件 (9).png │ │ │ ├── 1619163776451 │ │ │ └── 未命名文件.png │ │ │ ├── 1620103978503 │ │ │ └── 企业个人微信.jpg │ │ │ ├── 1620892910720 │ │ │ └── afc6a3f40b8710341f17d2215b934c62.jpg │ │ │ ├── 1621152723716 │ │ │ └── logo - 副本.png │ │ │ ├── 1621443988481 │ │ │ └── logo - 副本.png │ │ │ ├── 1621473749516 │ │ │ └── FpN9kX1crwd3K8dPEtclPett39Qb.jpg │ │ │ └── 1621474863689 │ │ │ └── FpN9kX1crwd3K8dPEtclPett39Qb.jpg │ ├── static │ │ ├── css │ │ │ ├── chunk-0069f99e.9fab0072.css │ │ │ ├── chunk-05aa684b.836f79d0.css │ │ │ ├── chunk-1b5ebbde.04778ce4.css │ │ │ ├── chunk-2e03a6bb.26108f10.css │ │ │ ├── chunk-30466f2e.346304c2.css │ │ │ ├── chunk-39d883ed.4d235bf0.css │ │ │ ├── chunk-45ad6033.dd934ab5.css │ │ │ ├── chunk-5cac0eae.8aeb7fe6.css │ │ │ ├── chunk-6f24315e.c3a401dd.css │ │ │ ├── chunk-7997af12.e9e1cbc7.css │ │ │ ├── chunk-90f63cb6.b4463508.css │ │ │ ├── chunk-936c35bc.bc7cc5c2.css │ │ │ ├── chunk-vendors.df6b3f8b.css │ │ │ └── index.8b7b23b4.css │ │ ├── fonts │ │ │ ├── element-icons.535877f5.woff │ │ │ ├── element-icons.732389de.ttf │ │ │ ├── iconfont.2adcd9a2.eot │ │ │ ├── iconfont.4e2258a0.ttf │ │ │ └── iconfont.687560f7.woff │ │ ├── img │ │ │ ├── Switch.a0e8f86f.jpg │ │ │ ├── avatar.e033ea29.png │ │ │ ├── banner.95ab5f16.png │ │ │ ├── banner.f77c57eb.png │ │ │ ├── button.b3883c1e.png │ │ │ ├── carousel.a5b2553e.png │ │ │ ├── checkbox.bd4b7763.jpg │ │ │ ├── circle-border.5fe597d1.png │ │ │ ├── form.d3b05bae.png │ │ │ ├── funnel.c69030ce.jpg │ │ │ ├── headerImage.baefd97f.png │ │ │ ├── iconfont.d177932d.svg │ │ │ ├── iframe.6d67bf34.png │ │ │ ├── image.e19d7f4a.png │ │ │ ├── lineCharts.ae72a114.jpg │ │ │ ├── login_bg.b2d321f6.png │ │ │ ├── login_bg2.53ecd4df.png │ │ │ ├── logo.30525635.png │ │ │ ├── map.cdd0a85e.png │ │ │ ├── music.4a52a7c8.png │ │ │ ├── nodata.6b16cccd.jpg │ │ │ ├── notice.1a7c4d2d.png │ │ │ ├── pagecover-image.677bc94e.png │ │ │ ├── pieCharts.1c159a3c.jpg │ │ │ ├── qcode.5d8d13b4.png │ │ │ ├── radio.8232ca9c.jpg │ │ │ ├── rate.45d4b8f2.jpg │ │ │ ├── stepper.4d9b0ce6.jpg │ │ │ ├── tabars.ca6734c0.png │ │ │ ├── text.857c2679.png │ │ │ ├── use-beb469.beb469b6.png │ │ │ ├── video.9e4bd305.png │ │ │ └── wordcloud.7d29abbe.jpg │ │ ├── js │ │ │ ├── chunk-0069f99e.71c57878.js │ │ │ ├── chunk-0069f99e.71c57878.js.map │ │ │ ├── chunk-0069f99e.e3bb6e53.js │ │ │ ├── chunk-0069f99e.e3bb6e53.js.map │ │ │ ├── chunk-05aa684b.63a748a2.js │ │ │ ├── chunk-05aa684b.63a748a2.js.map │ │ │ ├── chunk-05aa684b.75ff04ee.js │ │ │ ├── chunk-05aa684b.75ff04ee.js.map │ │ │ ├── chunk-1b5ebbde.5cca8649.js │ │ │ ├── chunk-1b5ebbde.5cca8649.js.map │ │ │ ├── chunk-1b5ebbde.aef366f5.js │ │ │ ├── chunk-1b5ebbde.aef366f5.js.map │ │ │ ├── chunk-2e03a6bb.9a328952.js │ │ │ ├── chunk-2e03a6bb.9a328952.js.map │ │ │ ├── chunk-2e03a6bb.c65c9862.js │ │ │ ├── chunk-2e03a6bb.c65c9862.js.map │ │ │ ├── chunk-30466f2e.c0790ae7.js │ │ │ ├── chunk-30466f2e.c0790ae7.js.map │ │ │ ├── chunk-30466f2e.e31c4bb0.js │ │ │ ├── chunk-30466f2e.e31c4bb0.js.map │ │ │ ├── chunk-39d883ed.4e3c9d4d.js │ │ │ ├── chunk-39d883ed.4e3c9d4d.js.map │ │ │ ├── chunk-39d883ed.8cccd16a.js │ │ │ ├── chunk-39d883ed.8cccd16a.js.map │ │ │ ├── chunk-45ad6033.b4347f8b.js │ │ │ ├── chunk-45ad6033.b4347f8b.js.map │ │ │ ├── chunk-45ad6033.bf74defa.js │ │ │ ├── chunk-45ad6033.bf74defa.js.map │ │ │ ├── chunk-5cac0eae.33177303.js │ │ │ ├── chunk-5cac0eae.33177303.js.map │ │ │ ├── chunk-5cac0eae.362a9cfb.js │ │ │ ├── chunk-5cac0eae.362a9cfb.js.map │ │ │ ├── chunk-6f24315e.3123290a.js │ │ │ ├── chunk-6f24315e.3123290a.js.map │ │ │ ├── chunk-6f24315e.f88c00cf.js │ │ │ ├── chunk-6f24315e.f88c00cf.js.map │ │ │ ├── chunk-7997af12.ca42408c.js │ │ │ ├── chunk-7997af12.ca42408c.js.map │ │ │ ├── chunk-7997af12.fcc9c2c3.js │ │ │ ├── chunk-7997af12.fcc9c2c3.js.map │ │ │ ├── chunk-90f63cb6.1c456727.js │ │ │ ├── chunk-90f63cb6.1c456727.js.map │ │ │ ├── chunk-90f63cb6.a8d41848.js │ │ │ ├── chunk-90f63cb6.a8d41848.js.map │ │ │ ├── chunk-936c35bc.c0ef5926.js │ │ │ ├── chunk-936c35bc.c0ef5926.js.map │ │ │ ├── chunk-936c35bc.f83149e5.js │ │ │ ├── chunk-936c35bc.f83149e5.js.map │ │ │ ├── chunk-vendors.27f78258.js │ │ │ ├── chunk-vendors.27f78258.js.map │ │ │ ├── chunk-vendors.5de3f4ba.js │ │ │ ├── chunk-vendors.5de3f4ba.js.map │ │ │ ├── index.a2b1e05a.js │ │ │ ├── index.a2b1e05a.js.map │ │ │ ├── index.a9614292.js │ │ │ ├── index.a9614292.js.map │ │ │ ├── index.c184ba9b.js │ │ │ └── index.c184ba9b.js.map │ │ └── psd.min.js │ ├── third-libs │ │ ├── animate.min.css │ │ ├── elementUI.css │ │ ├── elementUI.js │ │ ├── flexible.js │ │ ├── iSlider.js │ │ ├── swiper-animation.umd.min.js │ │ ├── swiper.min.css │ │ ├── swiper.min.js │ │ ├── vant.css │ │ ├── vant.min.js │ │ ├── vue-mini-player.css │ │ ├── vue-mini-player.umd.js │ │ └── vue.js │ └── user.png ├── router.js └── views │ ├── h5-long.ejs │ └── h5-swiper.ejs └── vue.config.js /.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | android >= 4.4 4 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | 4 | env: { 5 | node: true 6 | }, 7 | 8 | 'extends': [ 9 | 'plugin:vue/essential', 10 | 'eslint:recommended' 11 | ], 12 | 13 | rules: { 14 | 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', 15 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' 16 | }, 17 | 18 | parserOptions: { 19 | parser: 'babel-eslint' 20 | }, 21 | 22 | overrides: [ 23 | { 24 | files: [ 25 | '**/__tests__/*.{j,t}s?(x)', 26 | '**/tests/unit/**/*.spec.{j,t}s?(x)' 27 | ], 28 | env: { 29 | jest: true 30 | } 31 | } 32 | ] 33 | } 34 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | # local env files 6 | .env.local 7 | .env.*.local 8 | 9 | # Log files 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | 14 | # Editor directories and files 15 | .idea 16 | .vscode 17 | *.suo 18 | *.ntvs* 19 | *.njsproj 20 | *.sln 21 | *.sw? 22 | /server/public/psd_static 23 | -------------------------------------------------------------------------------- /TODOconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "port": "4000", 3 | "adminAccount": "admin", 4 | "db": { 5 | "servername": "127.0.0.1", 6 | "DATABASE": "", 7 | "port": 27017, 8 | "user": "", 9 | "pass": "", 10 | "authSource": "" 11 | }, 12 | "baseURL": "", 13 | "tips": "该文件后期处理,client与server的配置信息整合一起" 14 | } -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/app' 4 | ], 5 | plugins: [ 6 | ['import', { 7 | libraryName: 'vant', 8 | libraryDirectory: 'es', 9 | style: true 10 | }, 'vant'] 11 | ] 12 | } -------------------------------------------------------------------------------- /client/App.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 11 | 27 | -------------------------------------------------------------------------------- /client/api/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * API 统一管理 3 | * */ 4 | 5 | // 用户相关 6 | export * from './modules/user' 7 | // 页面相关 8 | export * from './modules/page' 9 | // 图片库相关 10 | export * from './modules/image' 11 | // 解析psd 12 | export * from './modules/psd' -------------------------------------------------------------------------------- /client/api/modules/image.js: -------------------------------------------------------------------------------- 1 | /* 2 | * image 图片库 3 | **/ 4 | import $axios from "@/service/httpServer"; 5 | 6 | // 获取我的图片列表 7 | export const getMyImages = p => $axios.get('/imageLib/myImages', p); 8 | // 上传图片 9 | export const uploadImage = p => $axios.post('/imageLib/upload', p) 10 | export const uploadCommonImage = p => $axios.post('/imageCommon/upload', p) 11 | 12 | // 获取外部图片列表 13 | export const getExternalImages = p => $axios.get('/imageLib/ExternalImages', p) -------------------------------------------------------------------------------- /client/api/modules/page.js: -------------------------------------------------------------------------------- 1 | /* 2 | 页面相关api 3 | **/ 4 | import $axios from "@/service/httpServer"; 5 | // 获取我的页面列表 6 | export const getMyPages = p => $axios.get('/page/getMyPages', p); 7 | // 获取我的页面详情 8 | export const getPageDetail = p => $axios.get('/page/detail', p); 9 | // 新增页面 10 | export const createPage = p => $axios.post('/page/create', p); 11 | // 更新页面 12 | export const updatePage = p => $axios.post('/page/update', p); 13 | // 删除页面 14 | export const deletePage = p => $axios.post('/page/delete', p); 15 | // 复制页面 16 | export const copyPage = p => $axios.post('/page/copy', p); 17 | // 设置为模板 18 | export const setTemplatePage = p => $axios.post('/page/setTemplate', p); 19 | // 发布页面 20 | export const publishPage = p => $axios.post('/page/setPublish', p); 21 | 22 | /** 23 | * ======================================================================== 24 | * */ 25 | // 获取我的模板 26 | export const getMyTemplates = p => $axios.get('/page/getMyTemplates', p); 27 | 28 | 29 | /** 30 | * ======================================================================== 31 | * */ 32 | // 获取模板市场模板 33 | export const getPublishTemplates = p => $axios.get('/page/getPublishTemplates', p); 34 | 35 | /** 36 | * ======================================================================== 37 | * */ 38 | // 获取协作人列表 39 | export const getCooperationUserListByPageId = p => $axios.get('/page/getCooperationList', p) 40 | // 按userIds添加协作人 41 | export const addCooperation = p => $axios.post('/page/addCooperation', p) 42 | // 删除协作人 43 | export const delCooperation = p => $axios.post('/page/delCooperation', p) -------------------------------------------------------------------------------- /client/api/modules/psd.js: -------------------------------------------------------------------------------- 1 | /* 2 | * psd 3 | **/ 4 | import $axios from "@/service/httpServer"; 5 | 6 | // 上传psd解析 7 | export const psdPpload = p => $axios.post('/psd/upload', p) -------------------------------------------------------------------------------- /client/api/modules/user.js: -------------------------------------------------------------------------------- 1 | /* 2 | 用户相关api 3 | **/ 4 | import $axios from "@/service/httpServer"; 5 | // 登录 6 | export const login = p => $axios.post('/auth/login', p); 7 | // 注册 8 | export const register = p => $axios.post('/auth/register', p); 9 | // 获取用户信息 10 | export const getUserInfo = () => $axios.get('/user/info'); 11 | // 修改用户昵称 12 | export const updateNickName = p => $axios.post('/user/update/name', p); 13 | // 修改密码 14 | export const updateUserPass = p => $axios.post('/user/update/pass', p); 15 | // 修改头像 16 | export const updateUserAvatar = p => $axios.post('/user/update/avatar', p); 17 | // 关键字搜索用户列表 18 | export const getUserListByKeywords = p => $axios.get('/user/getUserList', p); 19 | 20 | // 下载JSON文件 21 | export const JsonDownload = p => $axios.get('/tool/jsonload', p) -------------------------------------------------------------------------------- /client/common/fonts/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/fonts/iconfont.eot -------------------------------------------------------------------------------- /client/common/fonts/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/fonts/iconfont.ttf -------------------------------------------------------------------------------- /client/common/fonts/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/fonts/iconfont.woff -------------------------------------------------------------------------------- /client/common/fonts/iconfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/fonts/iconfont.woff2 -------------------------------------------------------------------------------- /client/common/images/elementIcon/Switch.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/Switch.jpg -------------------------------------------------------------------------------- /client/common/images/elementIcon/avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/avatar.png -------------------------------------------------------------------------------- /client/common/images/elementIcon/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/banner.png -------------------------------------------------------------------------------- /client/common/images/elementIcon/border.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/border.png -------------------------------------------------------------------------------- /client/common/images/elementIcon/button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/button.png -------------------------------------------------------------------------------- /client/common/images/elementIcon/calend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/calend.png -------------------------------------------------------------------------------- /client/common/images/elementIcon/carousel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/carousel.png -------------------------------------------------------------------------------- /client/common/images/elementIcon/checkbox.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/checkbox.jpg -------------------------------------------------------------------------------- /client/common/images/elementIcon/circle-border.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/circle-border.png -------------------------------------------------------------------------------- /client/common/images/elementIcon/empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/empty.png -------------------------------------------------------------------------------- /client/common/images/elementIcon/form.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/form.png -------------------------------------------------------------------------------- /client/common/images/elementIcon/funnel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/funnel.jpg -------------------------------------------------------------------------------- /client/common/images/elementIcon/iframe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/iframe.png -------------------------------------------------------------------------------- /client/common/images/elementIcon/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/image.png -------------------------------------------------------------------------------- /client/common/images/elementIcon/lineCharts.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/lineCharts.jpg -------------------------------------------------------------------------------- /client/common/images/elementIcon/map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/map.png -------------------------------------------------------------------------------- /client/common/images/elementIcon/map2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/map2.png -------------------------------------------------------------------------------- /client/common/images/elementIcon/music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/music.png -------------------------------------------------------------------------------- /client/common/images/elementIcon/notice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/notice.png -------------------------------------------------------------------------------- /client/common/images/elementIcon/pieCharts.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/pieCharts.jpg -------------------------------------------------------------------------------- /client/common/images/elementIcon/qcode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/qcode.png -------------------------------------------------------------------------------- /client/common/images/elementIcon/radio.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/radio.jpg -------------------------------------------------------------------------------- /client/common/images/elementIcon/rate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/rate.jpg -------------------------------------------------------------------------------- /client/common/images/elementIcon/splitLine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/splitLine.png -------------------------------------------------------------------------------- /client/common/images/elementIcon/stepper.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/stepper.jpg -------------------------------------------------------------------------------- /client/common/images/elementIcon/tabars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/tabars.png -------------------------------------------------------------------------------- /client/common/images/elementIcon/text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/text.png -------------------------------------------------------------------------------- /client/common/images/elementIcon/video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/video.png -------------------------------------------------------------------------------- /client/common/images/elementIcon/video2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/video2.png -------------------------------------------------------------------------------- /client/common/images/elementIcon/wordcloud.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/wordcloud.jpg -------------------------------------------------------------------------------- /client/common/images/elementIcon/未标题-1.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/未标题-1.psd -------------------------------------------------------------------------------- /client/common/images/elementIcon/视频短信.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/视频短信.png -------------------------------------------------------------------------------- /client/common/images/elementIcon/轮播图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/elementIcon/轮播图.png -------------------------------------------------------------------------------- /client/common/images/head.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/head.png -------------------------------------------------------------------------------- /client/common/images/headerImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/headerImage.png -------------------------------------------------------------------------------- /client/common/images/login_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/login_bg.png -------------------------------------------------------------------------------- /client/common/images/login_bg2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/login_bg2.png -------------------------------------------------------------------------------- /client/common/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/logo.png -------------------------------------------------------------------------------- /client/common/images/logo.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/logo.psd -------------------------------------------------------------------------------- /client/common/images/nodata.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/nodata.jpg -------------------------------------------------------------------------------- /client/common/images/nodata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/nodata.png -------------------------------------------------------------------------------- /client/common/images/pagecover-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/pagecover-image.png -------------------------------------------------------------------------------- /client/common/images/phoneModel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/phoneModel.png -------------------------------------------------------------------------------- /client/common/images/placeholder/placeholder-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/placeholder/placeholder-1.jpg -------------------------------------------------------------------------------- /client/common/images/placeholder/placeholder-10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/placeholder/placeholder-10.jpg -------------------------------------------------------------------------------- /client/common/images/placeholder/placeholder-11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/placeholder/placeholder-11.jpg -------------------------------------------------------------------------------- /client/common/images/placeholder/placeholder-12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/placeholder/placeholder-12.jpg -------------------------------------------------------------------------------- /client/common/images/placeholder/placeholder-13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/placeholder/placeholder-13.jpg -------------------------------------------------------------------------------- /client/common/images/placeholder/placeholder-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/placeholder/placeholder-2.jpg -------------------------------------------------------------------------------- /client/common/images/placeholder/placeholder-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/placeholder/placeholder-3.jpg -------------------------------------------------------------------------------- /client/common/images/placeholder/placeholder-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/placeholder/placeholder-4.jpg -------------------------------------------------------------------------------- /client/common/images/placeholder/placeholder-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/placeholder/placeholder-5.jpg -------------------------------------------------------------------------------- /client/common/images/placeholder/placeholder-6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/placeholder/placeholder-6.jpg -------------------------------------------------------------------------------- /client/common/images/placeholder/placeholder-7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/placeholder/placeholder-7.jpg -------------------------------------------------------------------------------- /client/common/images/placeholder/placeholder-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/placeholder/placeholder-8.jpg -------------------------------------------------------------------------------- /client/common/images/placeholder/placeholder-9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/placeholder/placeholder-9.jpg -------------------------------------------------------------------------------- /client/common/images/quark--pagecover-image.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/quark--pagecover-image.psd -------------------------------------------------------------------------------- /client/common/images/use-beb469.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/use-beb469.png -------------------------------------------------------------------------------- /client/common/images/website/app-shots/app-screen-moc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/website/app-shots/app-screen-moc.png -------------------------------------------------------------------------------- /client/common/images/website/app-shots/app-shot-1-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/website/app-shots/app-shot-1-1.jpg -------------------------------------------------------------------------------- /client/common/images/website/app-shots/app-shot-1-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/website/app-shots/app-shot-1-2.jpg -------------------------------------------------------------------------------- /client/common/images/website/app-shots/app-shot-1-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/website/app-shots/app-shot-1-3.jpg -------------------------------------------------------------------------------- /client/common/images/website/app-shots/app-shot-1-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/website/app-shots/app-shot-1-4.jpg -------------------------------------------------------------------------------- /client/common/images/website/app-shots/app-shot-1-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/website/app-shots/app-shot-1-5.jpg -------------------------------------------------------------------------------- /client/common/images/website/background/app-shot-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/website/background/app-shot-bg.png -------------------------------------------------------------------------------- /client/common/images/website/background/banner-2-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/website/background/banner-2-bg.jpg -------------------------------------------------------------------------------- /client/common/images/website/background/banner-bg-1-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/website/background/banner-bg-1-1.png -------------------------------------------------------------------------------- /client/common/images/website/background/cta-one-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/website/background/cta-one-bg.png -------------------------------------------------------------------------------- /client/common/images/website/background/faq-one-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/website/background/faq-one-bg.png -------------------------------------------------------------------------------- /client/common/images/website/background/inner-banner-bg-1-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/website/background/inner-banner-bg-1-1.jpg -------------------------------------------------------------------------------- /client/common/images/website/background/video-one-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/website/background/video-one-bg.png -------------------------------------------------------------------------------- /client/common/images/website/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/website/banner.png -------------------------------------------------------------------------------- /client/common/images/website/resources/brand-1-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/website/resources/brand-1-1.png -------------------------------------------------------------------------------- /client/common/images/website/resources/logo-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/website/resources/logo-dark.png -------------------------------------------------------------------------------- /client/common/images/website/resources/logo-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/website/resources/logo-light.png -------------------------------------------------------------------------------- /client/common/images/website/resources/preloader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/website/resources/preloader.png -------------------------------------------------------------------------------- /client/common/images/website/resources/testi-1-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/website/resources/testi-1-1.png -------------------------------------------------------------------------------- /client/common/images/website/resources/video-1-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/website/resources/video-1-1.jpg -------------------------------------------------------------------------------- /client/common/images/未标题-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/common/images/未标题-1.png -------------------------------------------------------------------------------- /client/common/js/runAnimations.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 动画方法, 将动画css加入到元素上,返回promise提供执行后续操作(将动画重置) 3 | * @param $el 当前被执行动画的元素 4 | * @param animationList 动画列表 5 | * @param isDebugger 动画列表 6 | * @returns {Promise} 7 | */ 8 | export default async function runAnimation($el, animationList = [], isDebug , callback){ 9 | let playFn = function (animation) { 10 | return new Promise(resolve => { 11 | $el.style.animationName = animation.type 12 | $el.style.animationDuration = `${animation.duration}s` 13 | // 如果是循环播放就将循环次数置为1,这样有效避免编辑时因为预览循环播放组件播放动画无法触发animationend来暂停组件动画 14 | $el.style.animationIterationCount = animation.infinite ? (isDebug ? 1 : 'infinite') : animation.interationCount 15 | $el.style.animationDelay = `${animation.delay}s` 16 | $el.style.animationFillMode = 'both' 17 | let resolveFn = function(){ 18 | $el.removeEventListener('animationend', resolveFn, false); 19 | $el.removeEventListener('animationcancel', resolveFn, false); 20 | resolve() 21 | } 22 | $el.addEventListener('animationend', resolveFn, false) 23 | $el.addEventListener('animationcancel', resolveFn, false); 24 | }) 25 | } 26 | for(let i = 0, len = animationList.length; i < len; i++){ 27 | await playFn(animationList[i]) 28 | } 29 | if(callback){ 30 | callback() 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /client/common/js/secret.js: -------------------------------------------------------------------------------- 1 | const CryptoJS = require('crypto-js'); //引用AES源码js 2 | 3 | const keyStr = "===Oct1a_H==="; //十六位十六进制数作为密钥 4 | const ivStr = ''; // 偏移量 5 | 6 | function Encrypt(data) { 7 | var key = CryptoJS.enc.Utf8.parse(keyStr); 8 | var iv = CryptoJS.enc.Utf8.parse(ivStr); 9 | var encrypted = CryptoJS.AES.encrypt(data, key, { 10 | iv: iv, 11 | mode: CryptoJS.mode.ECB, 12 | padding: CryptoJS.pad.Pkcs7 13 | }); 14 | //返回的是base64格式的密文 15 | return encrypted.ciphertext.toString(); 16 | } 17 | 18 | // encrypted 为是base64格式的密文 19 | function Decrypt(encrypted) { 20 | var encryptedHexStr = CryptoJS.enc.Hex.parse(encrypted); 21 | var srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr); 22 | var key = CryptoJS.enc.Utf8.parse(keyStr); 23 | var iv = CryptoJS.enc.Utf8.parse(ivStr); 24 | var decrypted = CryptoJS.AES.decrypt(srcs, key, { 25 | iv: iv, 26 | mode: CryptoJS.mode.CBC, 27 | padding: CryptoJS.pad.Pkcs7 28 | }); 29 | return decrypted.toString(CryptoJS.enc.Utf8); 30 | } 31 | 32 | // 测试加、解密 33 | // function testAES() { 34 | // var data = "1234567890123456"; // 明文 35 | 36 | // console.log("加密前:" + data); 37 | 38 | // // 测试加密 39 | // var encrypted = Encrypt(data); // 密文 40 | // console.log("加密后: " + encrypted); 41 | 42 | // // var decryptedStr = Decrypt(encrypted); 43 | // // console.log("解密后: " + decryptedStr); 44 | // } 45 | // testAES() 46 | export default { 47 | Decrypt, 48 | Encrypt 49 | } -------------------------------------------------------------------------------- /client/common/styles/element-variables.scss: -------------------------------------------------------------------------------- 1 | /* 改变主题色变量 */ 2 | 3 | $--color-primary: #00acee; 4 | 5 | /* 改变 icon 字体路径变量,必需 */ 6 | 7 | $--font-path: '~element-ui/lib/theme-chalk/fonts'; 8 | @import "~element-ui/packages/theme-chalk/src/index"; -------------------------------------------------------------------------------- /client/common/styles/variables.scss: -------------------------------------------------------------------------------- 1 | /*================================================================= 2 | 颜色 3 | =================================================================*/ 4 | 5 | $border-color: #e6ebed; 6 | $white: #fff; 7 | $primary: #00acee; 8 | $success: #3DBD37; 9 | $gray: #7F8593; 10 | $error: #ea5361; 11 | $color-gradient: linear-gradient(to right, #5ac66a 0%, #3caa7d 80%, #3AA27F 100%); // 渐变 12 | $color-gradient-hover: linear-gradient(to right, #5ac66a 0%, #3caa7d 80%, #3AA27F 100%); // 渐变 13 | $color-gradient: linear-gradient(to right, #5ac66a 0%, #3caa7d 80%, #3AA27F 100%); // 渐变 14 | // $page-bg-color : #F0F2F5; 15 | $page-bg-color: #f9f9f9; 16 | 17 | /*================================================================= 18 | 动画 19 | =================================================================*/ 20 | 21 | $transition-time: 0.28s; // 动画时间 22 | 23 | /*================================================================= 24 | 侧边栏导航 25 | =================================================================*/ 26 | 27 | $side-bar-background-color: #304156; 28 | $side-bar-background-color-active: #2F404F; 29 | 30 | /*================================================================= 31 | 页面布局相关 32 | =================================================================*/ 33 | 34 | $header-height: 48px; // 顶部header的高度 35 | $side-bar-width: 68px; // 侧边栏 36 | $header-both-sides-padding: 24px; //页面边缘与内容间的padding 37 | $content-both-sides-padding: 32px; //页面边缘与内容间的padding 38 | // 页尾背景色 39 | $footer-background-color: #858585; 40 | // 首页 前三大模块中 hover 背景色 41 | $home-li-hover-background-color:#00acee; -------------------------------------------------------------------------------- /client/components/SketchRuleBg.vue: -------------------------------------------------------------------------------- 1 | 2 | 13 | 14 | 15 | 77 | 78 | -------------------------------------------------------------------------------- /client/components/add-cooperationer/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import Index from './index.vue'; 3 | let ComponentConstructor = Vue.extend(Index); 4 | let instance; 5 | 6 | /** 7 | * 管理协作人 8 | * @param documentId 文档id 9 | * @constructor 10 | */ 11 | let Component = function(pageId, callback) { 12 | instance = new ComponentConstructor({ 13 | data: { 14 | pageId: pageId 15 | } 16 | }); 17 | instance.$mount(); 18 | instance.callback = callback; 19 | document.body.appendChild(instance.$el); 20 | instance.visible = true; 21 | return instance; 22 | } 23 | 24 | export default Component; 25 | -------------------------------------------------------------------------------- /client/components/crawler-program/baiduh5.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /client/components/crawler-program/h5ds.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /client/components/crawler-program/yiqixiu.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /client/components/notFundData.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 暂无数据 6 | 7 | 8 | 9 | 10 | 25 | 26 | 48 | -------------------------------------------------------------------------------- /client/components/page-header.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 42 | 43 | 84 | -------------------------------------------------------------------------------- /client/components/upload-psd.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 将文件拖到此处,或点击上传 12 | 只能上传PSD文件,且不超过40MB 13 | 14 | 15 | 16 | 文字可编辑模式 17 | 图层全转为图片模式 18 | 19 | 20 | 21 | 22 | 64 | 65 | 70 | -------------------------------------------------------------------------------- /client/config/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 公共配置文件 3 | */ 4 | // import $config from '../../config' 5 | 6 | 7 | const configDict = { 8 | development: { 9 | baseURL: 'http://localhost:8080' 10 | }, 11 | production: { 12 | baseURL: 'http://localhost:3333' 13 | } 14 | } 15 | 16 | const currentConfigKey = process.env.NODE_ENV 17 | const isDev = process.env.NODE_ENV === 'development' 18 | const isTest = process.env.NODE_ENV === 'development' 19 | 20 | const configObj = { 21 | isDevelop: (isDev || isTest), 22 | ...configDict[currentConfigKey], 23 | // h5模式宽高 24 | canvasH5Width: 375, 25 | canvasH5Height: 644, 26 | pageModeList: [{ 27 | value: 'h5', 28 | label: 'H5', 29 | disabled: false 30 | }, { 31 | value: 'longPage', 32 | label: '长页H5', 33 | disabled: true 34 | }, { 35 | name: 'relativePage', 36 | label: '排版图文', 37 | disabled: true 38 | }, { 39 | value: 'pc', 40 | label: 'PC页面', 41 | disabled: true 42 | }] 43 | } 44 | 45 | export default configObj -------------------------------------------------------------------------------- /client/eventBus/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | export default new Vue(); -------------------------------------------------------------------------------- /client/filters/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 封装些共用的过滤器 3 | */ 4 | 5 | const filter = { 6 | /** 7 | * 将 boolean 转换成 文字是否 8 | * @param value 9 | * @returns {string} 10 | */ 11 | booleanToText: function(value) { 12 | return value ? '是' : '否' 13 | }, 14 | /** 15 | * 根据value获取label 16 | * @param value 17 | * @param list 对象列表 18 | */ 19 | getLabelText(value, list, label = 'label') { 20 | let data = list.find(v => v.value === value); 21 | if (data) { 22 | return data[label]; 23 | } else { 24 | return '' 25 | } 26 | }, 27 | 28 | } 29 | export default filter -------------------------------------------------------------------------------- /client/libs/drag/draggable.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 61 | -------------------------------------------------------------------------------- /client/libs/drag/droppable.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 70 | -------------------------------------------------------------------------------- /client/libs/drag/index.js: -------------------------------------------------------------------------------- 1 | import Draggable from './draggable.vue' 2 | import Droppable from './droppable.vue' 3 | 4 | export { 5 | Draggable, 6 | Droppable 7 | } -------------------------------------------------------------------------------- /client/libs/keypress/keypress.js: -------------------------------------------------------------------------------- 1 | import keyCode from './keycode'; 2 | const getKeyMap = (keymap) => Object.keys(keymap).map((input) => { 3 | const result = { callback: () => { console.log(11); } }; 4 | input.split('.').forEach((keyName) => { 5 | switch (keyName.toLowerCase()) { 6 | case 'ctrl': 7 | case 'alt': 8 | case 'shift': 9 | case 'meta': 10 | result[keyName] = true; 11 | break; 12 | default: 13 | result.keyCode = keyCode(keyName); 14 | } 15 | }); 16 | result.callback = keymap[input]; 17 | return result; 18 | }); 19 | export default { 20 | install(Vue) { 21 | Vue.directive('hotkey', { 22 | bind(el, binding) { 23 | const _keymap = getKeyMap(binding.value); 24 | el._keyHandler = (e) => { 25 | for (const hotkey of _keymap) { 26 | hotkey.keyCode === e.keyCode && 27 | !!hotkey.ctrl === e.ctrlKey && 28 | !!hotkey.alt === e.altKey && 29 | !!hotkey.shift === e.shiftKey && 30 | !!hotkey.meta === e.metaKey && 31 | hotkey.callback(e); 32 | } 33 | }; 34 | document.addEventListener('keydown', el._keyHandler); 35 | }, 36 | unbind(el) { 37 | document.removeEventListener('keydown', el._keyHandler); 38 | } 39 | }); 40 | } 41 | }; -------------------------------------------------------------------------------- /client/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App.vue' 3 | import router from './router' 4 | import store from './store' 5 | import httpServer from '@client/service/httpServer' // axios拦截器配置 6 | import '@/permission' // 权限控制 7 | import * as mUtils from '@/common/js/mUtils' //工具类 8 | import config from '@/config' 9 | import filters from './filters/index' //过滤器 10 | import AES from '@/common/js/secret' 11 | import * as API from '@/api/index' 12 | 13 | import Element from 'element-ui' 14 | import '@/common/styles/element-variables.scss' 15 | import '@/common/styles/index.scss' // 自定义 css 16 | import 'animate.css' //动画 css 17 | import VueClipboard from 'vue-clipboard2' //获取剪切板 18 | import hotKey from '@client/libs/keypress/keypress' //快捷键 19 | import Contextmenu from "vue-contextmenujs" 20 | 21 | // 视频组件,todo:后期改为局部注册 22 | import vueMiniPlayer from 'vue-mini-player' 23 | import 'vue-mini-player/lib/vue-mini-player.css' 24 | 25 | import VCharts from 'v-charts' 26 | Vue.use(VCharts) 27 | 28 | 29 | Vue.use(Element); 30 | Vue.use(VueClipboard) 31 | Vue.use(hotKey) 32 | Vue.use(Contextmenu); 33 | Vue.use(vueMiniPlayer); 34 | 35 | /** 36 | * 引入公共方法mUtils 37 | */ 38 | Vue.prototype.$mUtils = mUtils; 39 | Vue.prototype.AES = AES 40 | Vue.prototype.$axios = httpServer; 41 | Vue.prototype.$api = API; 42 | Vue.prototype.$API = API; 43 | 44 | /** 45 | * 公共配置信息 46 | */ 47 | Vue.prototype.$config = config 48 | 49 | // 注册全局过滤器 50 | Object.keys(filters).forEach(key => { 51 | Vue.filter(key, filters[key]) 52 | }) 53 | 54 | 55 | // 登录后跳转回之前停留页面 56 | Vue.prototype.goBeforeLoginUrl = () => { 57 | let url = mUtils.Cookie.get('beforeLoginUrl') 58 | url = decodeURIComponent(url) 59 | if (!url || url.indexOf('/author') != -1) { 60 | router.push('/login') 61 | } else { 62 | router.push(url) 63 | mUtils.Cookie.set('beforeLoginUrl', '', 1 / 24 / 60, window.location.host, window.location.pathname.substring(0, window.location.pathname.length - 1)) 64 | } 65 | }; 66 | 67 | // 查询多个,全局替换 68 | String.prototype.replaceAll = function(s1, s2) { 69 | return this.replace(new RegExp(s1, "gm"), s2); 70 | } 71 | 72 | Vue.config.productionTip = false 73 | 74 | store.commit('UPDATE_USER_FROM_LOCAL') 75 | 76 | new Vue({ 77 | router, 78 | store, 79 | render: h => h(App) 80 | }).$mount('#app') -------------------------------------------------------------------------------- /client/mixins/elementEvents.js: -------------------------------------------------------------------------------- 1 | import { register_components_object } from '@client/plugins/index' 2 | import { camelCase } from 'lodash' 3 | /** 4 | * 元素点击事件相关方法 5 | * */ 6 | export default { 7 | methods: { 8 | /** 9 | * 链接跳转 10 | */ 11 | _event_link(eventData) { 12 | return new Promise((resolve) => { 13 | if (eventData.url) { 14 | window.location.href = eventData.url; 15 | } 16 | resolve() 17 | }) 18 | }, 19 | /** 20 | * 分享 21 | * @private 22 | */ 23 | _event_share() { 24 | return new Promise((resolve) => { 25 | window.alert('分享') 26 | resolve() 27 | }) 28 | }, 29 | /** 30 | * 表单提交 31 | * @private 32 | */ 33 | _event_submitForm() { 34 | // return new Promise((resolve) => { 35 | // window.alert('表单提交,待完善...') 36 | //获歇提交接口 37 | var apiUrl = eventData.url; //获歇页面表单数据 38 | var formdata = {}; 39 | page.pages.forEach(function(data) { 40 | data.elements.forEach(function(item) { 41 | if (!item.isForm) return; 42 | var key = item.propsValue.keyName || ''; 43 | formdata[key] = item.value; 44 | }); 45 | }); 46 | console.log(apiUrl); 47 | console.log(formdata); 48 | 49 | // resolve() 50 | // }) 51 | }, 52 | 53 | /** 54 | * 根据elname获取组件默认props数据 55 | * @param elName 56 | */ 57 | getComponentProps(elName) { 58 | let elComponentData 59 | for (let key in register_components_object) { 60 | if (key.toLowerCase() === camelCase(elName).toLowerCase()) { 61 | elComponentData = register_components_object[key]; 62 | break; 63 | } 64 | } 65 | if (!elComponentData) return {} 66 | 67 | let props = {} 68 | for (let key in elComponentData.props) { 69 | props[key] = [Object, Array].includes(elComponentData.props[key].type) ? elComponentData.props[key].default() : elComponentData.props[key].default 70 | } 71 | return props; 72 | }, 73 | 74 | 75 | } 76 | } -------------------------------------------------------------------------------- /client/mixins/ossUpload.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 上传相关 3 | */ 4 | import OSS from 'ali-oss'; 5 | import { mapState } from 'vuex' 6 | export default { 7 | data(){ 8 | return { 9 | 10 | } 11 | }, 12 | computed: { 13 | ...mapState({ 14 | ossConfig: state => state.ossConfig 15 | }) 16 | }, 17 | created() { 18 | if(!this.ossConfig.stsToken){ 19 | this.$store.dispatch('getOssToken') 20 | } 21 | }, 22 | methods: { 23 | ossUpload(file){ 24 | return new Promise((resolve, reject) => { 25 | this.$store.dispatch('getOssToken').then(() => { 26 | let client = new OSS({ 27 | stsToken: this.ossConfig.stsToken, 28 | accessKeyId: this.ossConfig.accessKeyId, 29 | accessKeySecret: this.ossConfig.accessKeySecret, 30 | bucket: this.ossConfig.bucket, 31 | region: this.ossConfig.region, 32 | }); 33 | let bojName = 'dwwb/portal/web_docs/' + new Date().getTime() + '/' 34 | async function putBlob () { 35 | try { 36 | let result = await client.put(bojName + file.name, file); 37 | resolve(result); 38 | } catch (e) { 39 | reject(e); 40 | } 41 | } 42 | putBlob(); 43 | }).catch(err => { 44 | reject(err); 45 | }) 46 | }) 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /client/mixins/pageModel.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 针对页面的一些操作方法 3 | * */ 4 | export default { 5 | methods: { 6 | savePage(){}, 7 | publishPage(){}, 8 | 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /client/mixins/userModel.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 登陆相关mixins 3 | * */ 4 | export default { 5 | data() { 6 | return { 7 | 8 | } 9 | }, 10 | methods: { 11 | /** 12 | * 退出登录 13 | */ 14 | _logout() { 15 | this.$store.commit('UPDATE_OAUTH', {}); 16 | sessionStorage.clear(); 17 | this._linkToLogout(); 18 | }, 19 | _linkToLogout() { 20 | this.$router.push({ name: 'Login' }) 21 | }, 22 | } 23 | } -------------------------------------------------------------------------------- /client/pages/editor/components/attr-configure/attr-edit.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 请在画板上选择需要编辑得元素 13 | 14 | 15 | 16 | 17 | 41 | 42 | 56 | 63 | -------------------------------------------------------------------------------- /client/pages/editor/components/attr-configure/attr-props-components/props-attr/NoticeBar.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 11 | 12 | 13 | 14 | 静止 15 | 滚动 16 | 17 | 18 | 是 19 | 否 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 58 | 59 | 62 | -------------------------------------------------------------------------------- /client/pages/editor/components/attr-configure/attr-props-components/props-attr/avatar.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 45 | 46 | 49 | -------------------------------------------------------------------------------- /client/pages/editor/components/attr-configure/attr-props-components/props-attr/btnType.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 40 | 41 | 44 | -------------------------------------------------------------------------------- /client/pages/editor/components/attr-configure/attr-props-components/props-attr/grid.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 14 | 15 | 16 | 17 | 18 | 19 | 43 | 44 | 52 | -------------------------------------------------------------------------------- /client/pages/editor/components/attr-configure/attr-props-components/props-attr/imageSrc.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 35 | 36 | 39 | -------------------------------------------------------------------------------- /client/pages/editor/components/attr-configure/attr-props-components/props-attr/imageSrcList.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 69 | 70 | 73 | -------------------------------------------------------------------------------- /client/pages/editor/components/attr-configure/attr-props-components/props-attr/index.js: -------------------------------------------------------------------------------- 1 | import Text from './text' 2 | import imageSrc from './imageSrc' 3 | import imageSrcList from './imageSrcList' 4 | import Url from './url' 5 | import musicSrc from './musicSrc' 6 | import btnType from './btnType' 7 | import location from './location' 8 | import grid from './grid' 9 | import NoticeBar from './NoticeBar' 10 | import avatar from './avatar' 11 | import Video from './video' 12 | 13 | export default { 14 | [Text.name]: Text, 15 | [imageSrc.name]: imageSrc, 16 | [Url.name]: Url, 17 | [musicSrc.name]: musicSrc, 18 | [imageSrcList.name]: imageSrcList, 19 | [btnType.name]: btnType, //类型选择 20 | [location.name]: location, //地图位置 21 | [grid.name]: grid, //地图位置 22 | [NoticeBar.name]: NoticeBar, 23 | [avatar.name]: avatar, 24 | [Video.name]: Video, 25 | } -------------------------------------------------------------------------------- /client/pages/editor/components/attr-configure/attr-props-components/props-attr/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 组件属性 5 | 6 | 11 | 12 | 13 | 14 | 15 | 60 | 61 | 64 | -------------------------------------------------------------------------------- /client/pages/editor/components/attr-configure/attr-props-components/props-attr/musicSrc.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 | 11 | 12 | 36 | 37 | 40 | -------------------------------------------------------------------------------- /client/pages/editor/components/attr-configure/attr-props-components/props-attr/text.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 | 11 | 12 | 36 | 37 | 40 | -------------------------------------------------------------------------------- /client/pages/editor/components/attr-configure/attr-props-components/props-attr/url.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 | 11 | 12 | 36 | 37 | 40 | -------------------------------------------------------------------------------- /client/pages/editor/components/attr-configure/script-edit.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 脚本编辑 4 | js脚本在编辑模式下无效果 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 39 | 40 | 43 | -------------------------------------------------------------------------------- /client/pages/editor/components/history.vue: -------------------------------------------------------------------------------- 1 | 2 | 11 | 14 | 15 | 历史记录 16 | x 17 | 18 | 19 | 20 | 21 | 22 | 23 | 55 | 56 | -------------------------------------------------------------------------------- /client/pages/editor/components/keyboard.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {{key}} 6 | {{ele}} 7 | 8 | 9 | 10 | 11 | 12 | 13 | 53 | 54 | -------------------------------------------------------------------------------- /client/pages/editor/components/template-libs.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 模板库 4 | 待完善... 5 | 6 | 7 | 8 | 9 | 14 | 15 | 18 | -------------------------------------------------------------------------------- /client/pages/home/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 我的作品 8 | 9 | 10 | 11 | 我的模板 12 | 13 | 14 | 15 | 我的数据 16 | 17 | 18 | 19 | 创意模板 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 33 | 34 | 56 | -------------------------------------------------------------------------------- /client/pages/home/page-data-detail.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 16 | 17 | 22 | -------------------------------------------------------------------------------- /client/pages/home/page-data.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 16 | 17 | 22 | -------------------------------------------------------------------------------- /client/pages/layout.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 18 | 19 | 36 | -------------------------------------------------------------------------------- /client/pages/template-view-example/swiper-h5.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 21 | 22 | 29 | -------------------------------------------------------------------------------- /client/permission.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 路由权限相关管理 3 | * */ 4 | import router from '@/router' 5 | import NProgress from 'nprogress' // 进度条 6 | import 'nprogress/nprogress.css' // 进度条样式 7 | import userModel from '@/libs/userModel' 8 | 9 | // 导航守卫 10 | router.beforeEach(async(to, from, next) => { 11 | NProgress.start() 12 | // 检测是否需要用户登录验证 13 | if (to.meta.noNeedLogin) { 14 | next() 15 | return; 16 | } 17 | // 用户登录状态拦截,未登录将跳转登录界面 18 | let loginStatus = await userModel.checkLoginState(); 19 | if (!loginStatus) { 20 | userModel.goLogin(); 21 | return false; 22 | } 23 | console.log(to) 24 | //TODO 根据加载的资源,更新路由meta属性中的title属性,所有的页面title使用route.meta.title 25 | next() 26 | }) 27 | 28 | router.afterEach(() => { 29 | NProgress.done() // 结束Progress 30 | }) -------------------------------------------------------------------------------- /client/plugins/AddressEdit/index.js: -------------------------------------------------------------------------------- 1 | // 为组件提供 install 方法,供组件对外按需引入 2 | import Component from './src/index' 3 | Component.install = Vue => { 4 | Vue.component(Component.name, Component) 5 | } 6 | export default Component -------------------------------------------------------------------------------- /client/plugins/AddressEdit/src/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 19 | 20 | 31 | -------------------------------------------------------------------------------- /client/plugins/FunnelChart/index.js: -------------------------------------------------------------------------------- 1 | // 为组件提供 install 方法,供组件对外按需引入 2 | import Component from './src/index' 3 | Component.install = Vue => { 4 | Vue.component(Component.name, Component) 5 | } 6 | export default Component 7 | -------------------------------------------------------------------------------- /client/plugins/FunnelChart/src/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 31 | 32 | 35 | -------------------------------------------------------------------------------- /client/plugins/LineChart/index.js: -------------------------------------------------------------------------------- 1 | // 为组件提供 install 方法,供组件对外按需引入 2 | import Component from './src/index' 3 | Component.install = Vue => { 4 | Vue.component(Component.name, Component) 5 | } 6 | export default Component 7 | -------------------------------------------------------------------------------- /client/plugins/NavBar/index.js: -------------------------------------------------------------------------------- 1 | // 为组件提供 install 方法,供组件对外按需引入 2 | import Component from './src/index' 3 | Component.install = Vue => { 4 | Vue.component(Component.name, Component) 5 | } 6 | export default Component -------------------------------------------------------------------------------- /client/plugins/NavBar/src/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 19 | 20 | 31 | -------------------------------------------------------------------------------- /client/plugins/PieChart/index.js: -------------------------------------------------------------------------------- 1 | // 为组件提供 install 方法,供组件对外按需引入 2 | import Component from './src/index' 3 | Component.install = Vue => { 4 | Vue.component(Component.name, Component) 5 | } 6 | export default Component 7 | -------------------------------------------------------------------------------- /client/plugins/PieChart/src/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 33 | 34 | 37 | -------------------------------------------------------------------------------- /client/plugins/WordCloud/index.js: -------------------------------------------------------------------------------- 1 | // 为组件提供 install 方法,供组件对外按需引入 2 | import Component from './src/index' 3 | Component.install = Vue => { 4 | Vue.component(Component.name, Component) 5 | } 6 | export default Component 7 | -------------------------------------------------------------------------------- /client/plugins/WordCloud/src/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 32 | 33 | 36 | -------------------------------------------------------------------------------- /client/plugins/avatar/index.js: -------------------------------------------------------------------------------- 1 | // 为组件提供 install 方法,供组件对外按需引入 2 | import Component from './src/index' 3 | Component.install = Vue => { 4 | Vue.component(Component.name, Component) 5 | } 6 | export default Component -------------------------------------------------------------------------------- /client/plugins/avatar/src/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 45 | 46 | 60 | -------------------------------------------------------------------------------- /client/plugins/banner/index.js: -------------------------------------------------------------------------------- 1 | // 为组件提供 install 方法,供组件对外按需引入 2 | import Component from './src/index' 3 | Component.install = Vue => { 4 | Vue.component(Component.name, Component) 5 | } 6 | export default Component 7 | -------------------------------------------------------------------------------- /client/plugins/banner/src/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 37 | 38 | 49 | -------------------------------------------------------------------------------- /client/plugins/bg-music/index.js: -------------------------------------------------------------------------------- 1 | // 为组件提供 install 方法,供组件对外按需引入 2 | import Component from './src/index' 3 | Component.install = Vue => { 4 | Vue.component(Component.name, Component) 5 | } 6 | export default Component 7 | -------------------------------------------------------------------------------- /client/plugins/bg-music/src/music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/client/plugins/bg-music/src/music.png -------------------------------------------------------------------------------- /client/plugins/button/index.js: -------------------------------------------------------------------------------- 1 | // 为组件提供 install 方法,供组件对外按需引入 2 | import Component from './src/index' 3 | Component.install = Vue => { 4 | Vue.component(Component.name, Component) 5 | } 6 | export default Component 7 | -------------------------------------------------------------------------------- /client/plugins/button/src/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{text}} 5 | 6 | 7 | 8 | 31 | 32 | 39 | -------------------------------------------------------------------------------- /client/plugins/checkbox/index.js: -------------------------------------------------------------------------------- 1 | // 为组件提供 install 方法,供组件对外按需引入 2 | import Component from './src/index' 3 | Component.install = Vue => { 4 | Vue.component(Component.name, Component) 5 | } 6 | export default Component 7 | -------------------------------------------------------------------------------- /client/plugins/checkbox/src/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 复选框 5 | 6 | 7 | 8 | 29 | 30 | 33 | -------------------------------------------------------------------------------- /client/plugins/circle-border/index.js: -------------------------------------------------------------------------------- 1 | // 为组件提供 install 方法,供组件对外按需引入 2 | import Component from './src/index' 3 | Component.install = Vue => { 4 | Vue.component(Component.name, Component) 5 | } 6 | export default Component 7 | -------------------------------------------------------------------------------- /client/plugins/circle-border/src/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 13 | 14 | 16 | -------------------------------------------------------------------------------- /client/plugins/iframe/index.js: -------------------------------------------------------------------------------- 1 | // 为组件提供 install 方法,供组件对外按需引入 2 | import Component from './src/index' 3 | Component.install = Vue => { 4 | Vue.component(Component.name, Component) 5 | } 6 | export default Component -------------------------------------------------------------------------------- /client/plugins/iframe/src/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 27 | 28 | 34 | -------------------------------------------------------------------------------- /client/plugins/image-carousel/index.js: -------------------------------------------------------------------------------- 1 | // 为组件提供 install 方法,供组件对外按需引入 2 | import Component from './src/index' 3 | Component.install = Vue => { 4 | Vue.component(Component.name, Component) 5 | } 6 | export default Component 7 | -------------------------------------------------------------------------------- /client/plugins/image-carousel/src/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 47 | 48 | 57 | 62 | -------------------------------------------------------------------------------- /client/plugins/image/index.js: -------------------------------------------------------------------------------- 1 | // 为组件提供 install 方法,供组件对外按需引入 2 | import Component from './src/index' 3 | Component.install = Vue => { 4 | Vue.component(Component.name, Component) 5 | } 6 | export default Component 7 | -------------------------------------------------------------------------------- /client/plugins/image/src/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 26 | 27 | 38 | -------------------------------------------------------------------------------- /client/plugins/input/index.js: -------------------------------------------------------------------------------- 1 | // 为组件提供 install 方法,供组件对外按需引入 2 | import Component from './src/index' 3 | Component.install = Vue => { 4 | Vue.component(Component.name, Component) 5 | } 6 | export default Component 7 | -------------------------------------------------------------------------------- /client/plugins/input/src/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 30 | 31 | 34 | -------------------------------------------------------------------------------- /client/plugins/map/index.js: -------------------------------------------------------------------------------- 1 | // 为组件提供 install 方法,供组件对外按需引入 2 | import Component from './src/index' 3 | Component.install = Vue => { 4 | Vue.component(Component.name, Component) 5 | } 6 | export default Component 7 | -------------------------------------------------------------------------------- /client/plugins/notice/index.js: -------------------------------------------------------------------------------- 1 | // 为组件提供 install 方法,供组件对外按需引入 2 | import Component from './src/index' 3 | Component.install = Vue => { 4 | Vue.component(Component.name, Component) 5 | } 6 | export default Component 7 | -------------------------------------------------------------------------------- /client/plugins/notice/src/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 13 | 14 | 15 | 16 | 43 | 44 | 49 | -------------------------------------------------------------------------------- /client/plugins/qrcode/index.js: -------------------------------------------------------------------------------- 1 | // 为组件提供 install 方法,供组件对外按需引入 2 | import Component from './src/index' 3 | Component.install = Vue => { 4 | Vue.component(Component.name, Component) 5 | } 6 | export default Component 7 | -------------------------------------------------------------------------------- /client/plugins/qrcode/src/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 25 | 26 | 29 | -------------------------------------------------------------------------------- /client/plugins/radio/index.js: -------------------------------------------------------------------------------- 1 | // 为组件提供 install 方法,供组件对外按需引入 2 | import Component from './src/index' 3 | Component.install = Vue => { 4 | Vue.component(Component.name, Component) 5 | } 6 | export default Component 7 | -------------------------------------------------------------------------------- /client/plugins/radio/src/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 单选框 1 5 | 单选框 2 6 | 7 | 8 | 9 | 30 | 31 | 34 | -------------------------------------------------------------------------------- /client/plugins/rate/index.js: -------------------------------------------------------------------------------- 1 | // 为组件提供 install 方法,供组件对外按需引入 2 | import Component from './src/index' 3 | Component.install = Vue => { 4 | Vue.component(Component.name, Component) 5 | } 6 | export default Component 7 | -------------------------------------------------------------------------------- /client/plugins/rate/src/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 26 | 27 | 30 | -------------------------------------------------------------------------------- /client/plugins/rectangle-border/index.js: -------------------------------------------------------------------------------- 1 | // 为组件提供 install 方法,供组件对外按需引入 2 | import Component from './src/index' 3 | Component.install = Vue => { 4 | Vue.component(Component.name, Component) 5 | } 6 | export default Component 7 | -------------------------------------------------------------------------------- /client/plugins/rectangle-border/src/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 13 | 14 | 17 | -------------------------------------------------------------------------------- /client/plugins/stepper/index.js: -------------------------------------------------------------------------------- 1 | // 为组件提供 install 方法,供组件对外按需引入 2 | import Component from './src/index' 3 | Component.install = Vue => { 4 | Vue.component(Component.name, Component) 5 | } 6 | export default Component 7 | -------------------------------------------------------------------------------- /client/plugins/stepper/src/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 26 | 27 | 30 | -------------------------------------------------------------------------------- /client/plugins/tabars/index.js: -------------------------------------------------------------------------------- 1 | // 为组件提供 install 方法,供组件对外按需引入 2 | import Component from './src/index' 3 | Component.install = Vue => { 4 | Vue.component(Component.name, Component) 5 | } 6 | export default Component 7 | -------------------------------------------------------------------------------- /client/plugins/tabars/src/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 标签 5 | 标签 6 | 标签 7 | 标签 8 | 9 | 10 | 11 | 12 | 52 | 53 | 58 | -------------------------------------------------------------------------------- /client/plugins/text/index.js: -------------------------------------------------------------------------------- 1 | // 为组件提供 install 方法,供组件对外按需引入 2 | import Component from './src/index' 3 | Component.install = Vue => { 4 | Vue.component(Component.name, Component) 5 | } 6 | export default Component 7 | -------------------------------------------------------------------------------- /client/plugins/text/src/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 64 | 65 | 70 | -------------------------------------------------------------------------------- /client/plugins/video/index.js: -------------------------------------------------------------------------------- 1 | // 为组件提供 install 方法,供组件对外按需引入 2 | import Component from './src/index' 3 | Component.install = Vue => { 4 | Vue.component(Component.name, Component) 5 | } 6 | export default Component -------------------------------------------------------------------------------- /client/plugins/video/src/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 38 | 39 | 41 | -------------------------------------------------------------------------------- /client/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | 4 | Vue.use(Router) 5 | 6 | /** 各个模块 */ 7 | export default new Router({ 8 | // mode: 'history', 9 | routes: [{ 10 | path: '/', 11 | name: 'Layout', 12 | component: () => 13 | import ('@/pages/layout'), 14 | redirect: { name: 'Index' }, 15 | children: [{ 16 | path: 'home', 17 | name: 'Home', 18 | component: () => 19 | import ('@/pages/home/index'), 20 | redirect: { name: 'pageList' }, 21 | children: [{ 22 | path: 'page-list', 23 | name: 'pageList', 24 | component: () => 25 | import ('@/pages/home/page-list'), 26 | }, { 27 | path: 'my-template', 28 | name: 'myTemplate', 29 | component: () => 30 | import ('@/pages/home/my-template'), 31 | }, { 32 | path: 'page-data', 33 | name: 'pageData', 34 | component: () => 35 | import ('@/pages/home/page-data'), 36 | }, { 37 | path: 'page-data-detail', 38 | name: 'pageDataDetail', 39 | component: () => 40 | import ('@/pages/home/page-data-detail'), 41 | }, { 42 | path: 'template-list', 43 | name: 'templateList', 44 | component: () => 45 | import ('@/pages/home/template-list'), 46 | }] 47 | }, { 48 | path: '/editor', 49 | name: 'Editor', 50 | component: () => 51 | import ('@/pages/editor/Index') 52 | }, ], 53 | }, 54 | { 55 | path: '/login', 56 | name: 'Login', 57 | component: () => 58 | import ('@/pages/Login'), 59 | meta: { 60 | hideHeader: true, 61 | trust: true, 62 | noNeedLogin: true 63 | } 64 | }, { //官网 65 | path: '/index', 66 | name: 'Index', 67 | component: () => 68 | import ('@/pages/website/index'), 69 | meta: { 70 | hideHeader: true, 71 | trust: true, 72 | noNeedLogin: true 73 | } 74 | } 75 | 76 | ] 77 | }) -------------------------------------------------------------------------------- /client/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | 4 | // 各个模块 5 | import editor from './modules/editor' 6 | import user from './modules/user' 7 | 8 | 9 | import { Message } from 'element-ui' 10 | /** 11 | * 全局状态管理 12 | */ 13 | const state = { 14 | 15 | }; 16 | const actions = { 17 | 18 | /** 19 | * 显示提示 msg.type 类型 msg.data 消息内容 20 | * @param commit 21 | * @param msg 22 | */ 23 | showMassage(store, msg) { 24 | console.log(msg) 25 | Message({ 26 | type: msg.type, 27 | message: msg.message || msg.data 28 | }) 29 | }, 30 | }; 31 | const mutations = {}; 32 | const getters = {}; 33 | 34 | Vue.use(Vuex); 35 | export default new Vuex.Store({ 36 | state, 37 | getters, 38 | actions, 39 | mutations, 40 | modules: { 41 | editor, 42 | user 43 | } 44 | }); 45 | -------------------------------------------------------------------------------- /client/store/modules/user.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 用户相关 3 | */ 4 | import { setLocalStorage, getLocalStorage } from '@/common/js/mUtils' 5 | const state = { 6 | access_token: '', 7 | permissionsList: [], 8 | userInfo: {}, 9 | } 10 | const actions = { 11 | 12 | }; 13 | 14 | const mutations = { 15 | /** 16 | * 更新用户data info数据 17 | */ 18 | UPDATE_USER_INFO(state, data) { 19 | state.userInfo = {...data } 20 | // 存储状态 21 | mutations['SAVE_USER_TO_LOCAL'](state) 22 | }, 23 | /** 24 | * 更新oauth相关 25 | */ 26 | UPDATE_ACCESS_TOKEN(state, data) { 27 | state.access_token = data || '' 28 | // 存储状态 29 | mutations['SAVE_USER_TO_LOCAL'](state) 30 | }, 31 | /** 32 | * 更新个人权限相关 33 | * @param state 34 | * @param data 35 | */ 36 | UPDATE_USER_PERMISSION(state, data) { 37 | state.permissionsList = data || []; 38 | // 存储状态 39 | mutations['SAVE_USER_TO_LOCAL'](state) 40 | }, 41 | 42 | /** 43 | * 将user state 数据存储在localstore里面 44 | * @param state 45 | */ 46 | SAVE_USER_TO_LOCAL(state) { 47 | setLocalStorage('user', state) 48 | }, 49 | /** 50 | * 从localstorage里取出数据更新user 51 | * @param state 52 | */ 53 | UPDATE_USER_FROM_LOCAL(state) { 54 | let user = getLocalStorage('user') 55 | if (user) { 56 | for (let key in state) { 57 | state[key] = user[key] 58 | } 59 | } 60 | } 61 | } 62 | 63 | 64 | const getters = { 65 | authorization(state) { 66 | return state.access_token ? 'Bearer ' + state.access_token : '' 67 | }, 68 | userInfo(state) { 69 | return state.userInfo 70 | } 71 | }; 72 | 73 | 74 | export default { 75 | state, 76 | actions, 77 | getters, 78 | mutations 79 | } -------------------------------------------------------------------------------- /common/ajax.js: -------------------------------------------------------------------------------- 1 | /** 2 | * http请求封装 3 | * @param opt 4 | */ 5 | /*-------------------Ajax start--------------------*/ 6 | 7 | function ajax(options) { 8 | return new Promise((resolve, reject) => { 9 | options = options || {}; 10 | options.type = (options.type || "GET").toUpperCase(); 11 | options.dataType = options.dataType || "json"; 12 | var params = formatParams(options.data); 13 | var xhr; 14 | 15 | //创建 - 第一步 16 | xhr = new XMLHttpRequest(); 17 | 18 | //连接 和 发送 - 第二步 19 | if (options.type == "GET") { 20 | xhr.open("GET", options.url + "?" + params, true); 21 | xhr.send(null); 22 | } else if (options.type == "POST") { 23 | xhr.open("POST", options.url, true); 24 | //设置表单提交时的内容类型 25 | xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 26 | xhr.send(params); 27 | } 28 | 29 | //接收 - 第三步 30 | xhr.onreadystatechange = function () { 31 | if (xhr.readyState == 4) { 32 | var status = xhr.status; 33 | if (status >= 200 && status < 300 || status == 304) { 34 | resolve(xhr.responseText, xhr.responseXML) 35 | } else { 36 | reject(status) 37 | } 38 | } 39 | } 40 | }) 41 | } 42 | 43 | //格式化参数 44 | function formatParams(data){ 45 | var arr = []; 46 | for (var name in data) { 47 | arr.push(encodeURIComponent(name) + "=" + encodeURIComponent(data[name])); 48 | } 49 | arr.push(("v=" + Math.random()).replace(".","")); 50 | return arr.join("&"); 51 | } 52 | 53 | /*-------------------Ajax end-------------------*/ 54 | 55 | export default ajax 56 | -------------------------------------------------------------------------------- /common/secret.js: -------------------------------------------------------------------------------- 1 | const CryptoJS = require('crypto-js'); //引用AES源码js 2 | 3 | const keyStr = "icklsdufidsakdfa"; //十六位十六进制数作为密钥 4 | const ivStr = ''; // 偏移量 5 | 6 | function Encrypt(data){ 7 | var key = CryptoJS.enc.Utf8.parse(keyStr); 8 | var iv = CryptoJS.enc.Utf8.parse(ivStr); 9 | var encrypted =CryptoJS.AES.encrypt(data,key,{ 10 | iv:iv, 11 | mode:CryptoJS.mode.ECB, 12 | padding:CryptoJS.pad.Pkcs7 13 | }); 14 | //返回的是base64格式的密文 15 | return encrypted.ciphertext.toString(); 16 | } 17 | 18 | // encrypted 为是base64格式的密文 19 | function Decrypt(encrypted){ 20 | var encryptedHexStr = CryptoJS.enc.Hex.parse(encrypted); 21 | var srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr); 22 | var key = CryptoJS.enc.Utf8.parse(keyStr); 23 | var iv = CryptoJS.enc.Utf8.parse(ivStr); 24 | var decrypted =CryptoJS.AES.decrypt(srcs,key,{ 25 | iv:iv, 26 | mode:CryptoJS.mode.CBC, 27 | padding:CryptoJS.pad.Pkcs7 28 | }); 29 | return decrypted.toString(CryptoJS.enc.Utf8); 30 | } 31 | 32 | // 测试加、解密 33 | function testAES(){ 34 | var data = "1234567890123456"; // 明文 35 | 36 | console.log("加密前:" + data); 37 | 38 | // 测试加密 39 | var encrypted = Encrypt(data); // 密文 40 | console.log("加密后: " + encrypted); 41 | 42 | // var decryptedStr = Decrypt(encrypted); 43 | // console.log("解密后: " + decryptedStr); 44 | } 45 | // testAES() 46 | export default { 47 | Decrypt , 48 | Encrypt 49 | } 50 | -------------------------------------------------------------------------------- /common/swiper-config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | 3 | } 4 | -------------------------------------------------------------------------------- /common/uitls.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 生成uuid方法 3 | * @returns {string} 4 | * https://segmentfault.com/q/1010000039371012?utm_source=sf-similar-question 5 | */ 6 | export const createUUID = function() { 7 | var d = new Date().getTime(); 8 | if (window.performance && typeof window.performance.now === "function") { 9 | d += performance.now(); //use high-precision timer if available 10 | } 11 | var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { 12 | var r = (d + Math.random() * 16) % 16 | 0; //按位或运算 13 | d = Math.floor(d / 16); 14 | return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16); //将一个 Number 对象转换为 16 进制字符串 15 | }); 16 | return uuid; 17 | } 18 | 19 | /** 20 | * 深拷贝 21 | * @param {*} obj 拷贝对象(object or array) 22 | * @param {*} cache 缓存数组 23 | */ 24 | export const deepClone = function(obj, cache = []) { 25 | // typeof [] => 'object' 26 | // typeof {} => 'object' 27 | if (obj === null || typeof obj !== 'object') { 28 | return obj 29 | } 30 | // 如果传入的对象与缓存的相等, 则递归结束, 这样防止循环 31 | /** 32 | * 类似下面这种 33 | * var a = {b:1} 34 | * a.c = a 35 | * 资料: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Cyclic_object_value 36 | */ 37 | const hit = cache.filter(c => c.original === obj)[0] 38 | if (hit) { 39 | return hit.copy 40 | } 41 | 42 | const copy = Array.isArray(obj) ? [] : {} 43 | // 将copy首先放入cache, 因为我们需要在递归deepCopy的时候引用它 44 | cache.push({ 45 | original: obj, 46 | copy 47 | }) 48 | Object.keys(obj).forEach(key => { 49 | copy[key] = deepClone(obj[key], cache) 50 | }) 51 | 52 | return copy 53 | } -------------------------------------------------------------------------------- /docs/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/docs/.nojekyll -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 |  2 |  3 | 想完成但未完善问题(争取近期完善): 4 | 5 | - [ ] 导入PSD角度问题 6 | - [ ] 导入PSD的文本字体大小不一致问题 7 | - [ ] 个别PSD导入出现错误情况 8 | - [ ] 画布大小自定义 9 | - [ ] 组件锁定 10 | - [ ] 右键菜单不同区域显示不同菜单 11 | - [ ] 剪切组件 12 | - [ ] 预览添加手机壳模型 13 | - [ ] 组件拖拽多选 14 | - [ ] 添加新人引导动画 15 | - [ ] 完善表单数据功能 16 | - [ ] 完善模板库 17 | 18 | 已有功能: 19 | 20 | - [x] 拖拉组件至画布 21 | - [x] 面板可收缩展开 22 | - [x] 点击添加组件位置为默认位置 23 | - [x] 添加导入PSD时显示进度条 24 | - [x] 保存JSON文件 25 | - [x] 上传JSON文件 26 | - [x] 根据画布截图生成预览图 27 | - [x] 自定义画布右键菜单 28 | - [x] 添加常用快捷键 29 | - [x] 清空画布 30 | - [x] 画布标尺 31 | - [x] 解决一些小问题 32 | - [x] 创建外部图片库 33 | - [x] 历史记录面板 34 | - [x] 文本组件过滤敏感词 35 | - [x] 自动保存画布内容 36 | - [x] 用户登录界面美化 37 | - [x] 用户登录增加滑动验证 38 | - [x] 制作产品官网 39 | - [x] 作品状态设置,外部不可访问 40 | - [x] 增加二维码组件 41 | - [x] 导入PSD可选择文字可编辑与全转为图片模式 42 | 43 | 44 | 45 | 46 | ## 工程目录结构 47 | 48 | ``` 49 | |-- client --------前端项目界面代码 50 | |--common --------前端界面对应静态资源 51 | |--components --------组件 52 | |--config --------配置文件 53 | |--eventBus --------eventBus 54 | |--filter --------过滤器 55 | |--mixins --------混入 56 | |--pages --------页面 57 | |--router --------路由配置 58 | |--store --------vuex状态管理 59 | |--service --------axios封装 60 | |--App.vue --------App 61 | |--main.js --------入口文件 62 | |--permission.js --------权限控制 63 | |-- server --------服务器端项目代码 64 | |--confog --------配置文件 65 | |--controller --------数据库链接相关 66 | |--extend --------框架扩展 67 | |--model -------Schema和Model 68 | |--middleware --------中间件 69 | |--core --------Koa MVC实现自动加载核心文件 70 | |--views --------ejs页面模板 71 | |--public --------静态资源 72 | |--router.js --------路由 73 | |--app.js --------服务端入口 74 | |-- common --------前后端公用代码模块(如加解密) 75 | |-- engine-template --------页面模板引擎,使用webpack打包成js提供页面引用 76 | |-- docs --------预留编写项目文档目录 77 | |-- config.json --------配置文件 78 | ``` -------------------------------------------------------------------------------- /docs/_coverpage.md: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | >一个神奇的文档网站生成器。 6 | 7 | 8 | 9 | - 简单、轻便 (压缩后 ~21kB) 10 | - 无需生成 html 文件 11 | - 众多主题 12 | 13 | [GitHub](https://github.com/docsifyjs/docsify/) [Get Started](#docsify) 14 | 15 | 16 |  -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Dcode-Editor 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /docs/static/image/admin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/docs/static/image/admin.png -------------------------------------------------------------------------------- /docs/static/image/index.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/docs/static/image/index.jpg -------------------------------------------------------------------------------- /docs/static/image/login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/docs/static/image/login.png -------------------------------------------------------------------------------- /docs/static/image/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/docs/static/image/logo.png -------------------------------------------------------------------------------- /engine-template/components/components-template.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 39 | -------------------------------------------------------------------------------- /engine-template/engine-h5-long/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * engine-h5-swiper 是多页面h5引擎模板 3 | */ 4 | import Template from './src/index.vue' 5 | 6 | const install = function (Vue) { 7 | Vue.component(Template.name, Template) 8 | } 9 | 10 | // 检测到 Vue 才执行,毕竟我们是基于 Vue 的 11 | if (typeof window !== 'undefined' && window.Vue) { 12 | install(window.Vue) 13 | } 14 | 15 | export default { 16 | install, 17 | // 所有组件,必须具有 install,才能使用 Vue.use() 18 | Template 19 | } 20 | -------------------------------------------------------------------------------- /engine-template/engine-h5-relative/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * engine-h5-swiper 是多页面h5引擎模板 3 | */ 4 | import Template from './src/index.vue' 5 | 6 | const install = function (Vue) { 7 | Vue.component(Template.name, Template) 8 | } 9 | 10 | // 检测到 Vue 才执行,毕竟我们是基于 Vue 的 11 | if (typeof window !== 'undefined' && window.Vue) { 12 | install(window.Vue) 13 | } 14 | 15 | export default { 16 | install, 17 | // 所有组件,必须具有 install,才能使用 Vue.use() 18 | Template 19 | } 20 | -------------------------------------------------------------------------------- /engine-template/engine-h5-swiper/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * engine-h5-swiper 是多页面h5引擎模板 3 | */ 4 | import Template from './src/index.vue' 5 | 6 | const install = function (Vue) { 7 | Vue.component(Template.name, Template) 8 | } 9 | 10 | // 检测到 Vue 才执行,毕竟我们是基于 Vue 的 11 | if (typeof window !== 'undefined' && window.Vue) { 12 | install(window.Vue) 13 | } 14 | 15 | export default { 16 | install, 17 | // 所有组件,必须具有 install,才能使用 Vue.use() 18 | Template 19 | } 20 | -------------------------------------------------------------------------------- /engine-template/engine-h5-swiper/src/components-template.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 57 | -------------------------------------------------------------------------------- /engine-template/engine-pc/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * engine-h5-swiper 是多页面h5引擎模板 3 | */ 4 | import Template from './src/index.vue' 5 | 6 | const install = function (Vue) { 7 | Vue.component(Template.name, Template) 8 | } 9 | 10 | // 检测到 Vue 才执行,毕竟我们是基于 Vue 的 11 | if (typeof window !== 'undefined' && window.Vue) { 12 | install(window.Vue) 13 | } 14 | 15 | export default { 16 | install, 17 | // 所有组件,必须具有 install,才能使用 Vue.use() 18 | Template 19 | } 20 | -------------------------------------------------------------------------------- /public/static/css/chunk-0069f99e.9fab0072.css: -------------------------------------------------------------------------------- 1 | .page-home[data-v-659890ee]{display:flex;width:100%;height:100%;background:#f0f3f4}.page-home .home-side-bar[data-v-659890ee]{width:200px;background-color:#fff;border-right:1px solid #e6ebed;padding-top:8px;z-index:2}.page-home .my-page-list[data-v-659890ee]{flex:1;height:100%}.page-home .my-page-list .sub-page[data-v-659890ee]{height:100%} -------------------------------------------------------------------------------- /public/static/css/chunk-1b5ebbde.04778ce4.css: -------------------------------------------------------------------------------- 1 | .components-preview-inner[data-v-655a0d3a]{width:100%}.setting-bg[data-v-655a0d3a]{position:fixed;left:0;right:0;top:0;bottom:0;background-color:rgba(0,0,0,.8);z-index:1042}.left-panel[data-v-655a0d3a]{position:fixed;top:0;bottom:0;left:0;right:640px;z-index:1050;overflow:hidden}.right-panel[data-v-655a0d3a]{position:fixed;width:640px;top:0;right:0;bottom:0;z-index:1050;background-color:#fff;overflow-y:auto;color:#333}.iframe-wrapper[data-v-655a0d3a]{position:absolute;left:50%;top:50%;margin-left:-185px;margin-top:-334px;background:#fff}.cloase-btn[data-v-655a0d3a]{position:fixed;top:8px;right:20px;font-size:28px;color:#7f8593;-webkit-transition:all .28s;transition:all .28s;z-index:1060;cursor:pointer}.cloase-btn[data-v-655a0d3a]:hover{color:#00acee} -------------------------------------------------------------------------------- /public/static/css/chunk-30466f2e.346304c2.css: -------------------------------------------------------------------------------- 1 | .my-page-list[data-v-48a3b697],.page-list-wrapper[data-v-48a3b697]{height:100%}.my-page-nav-list[data-v-48a3b697]{height:40px;line-height:40px;z-index:2;margin-bottom:20px}.my-page-nav-list .my-page-nav-item[data-v-48a3b697]{float:left;padding-right:32px;text-align:center;cursor:pointer}.my-page-nav-list .my-page-nav-item.active[data-v-48a3b697],.my-page-nav-list .my-page-nav-item[data-v-48a3b697]:hover{color:#00acee}.full-input-w[data-v-48a3b697]{width:100%}.nav-tabs-label[data-v-48a3b697]{display:inline-block;padding:0 16px;height:60px;line-height:60px}.page-search-wrapper[data-v-48a3b697]{padding:0}.page-item-wrapper .page-item[data-v-48a3b697]{float:left;margin-right:20px;margin-bottom:40px}.my-page-list .page-search-wrapper .el-tabs__header{margin:0}.my-page-list .page-search-wrapper .el-tabs__nav-wrap{padding:0 30px} -------------------------------------------------------------------------------- /public/static/css/chunk-39d883ed.4d235bf0.css: -------------------------------------------------------------------------------- 1 | .my-page-list[data-v-26f12d29],.page-list-wrapper[data-v-26f12d29]{height:100%}.my-page-nav-list[data-v-26f12d29]{height:40px;line-height:40px;z-index:2;margin-bottom:20px}.my-page-nav-list .my-page-nav-item[data-v-26f12d29]{float:left;padding-right:32px;text-align:center;cursor:pointer}.my-page-nav-list .my-page-nav-item.active[data-v-26f12d29],.my-page-nav-list .my-page-nav-item[data-v-26f12d29]:hover{color:#00acee}.full-input-w[data-v-26f12d29]{width:100%}.nav-tabs-label[data-v-26f12d29]{display:inline-block;padding:0 16px;height:60px;line-height:60px}.page-search-wrapper[data-v-26f12d29]{padding:0}.page-item-wrapper .page-item[data-v-26f12d29]{float:left;margin-right:20px;margin-bottom:40px}.my-page-list .page-search-wrapper .el-tabs__header{margin:0}.my-page-list .page-search-wrapper .el-tabs__nav-wrap{padding:0 30px} -------------------------------------------------------------------------------- /public/static/css/chunk-45ad6033.dd934ab5.css: -------------------------------------------------------------------------------- 1 | .components-default-style[data-v-402cadde]{width:100%;height:100%;text-align:center;position:relative;display:flex;justify-content:center;align-items:center;background:#fff}.components-default-style .default-style-img[data-v-402cadde],.components-default-style>div[data-v-402cadde]{display:inline-block}.components-default-style .tips[data-v-402cadde]{margin-top:30px;color:grey}.page-data-list[data-v-6c309750]{height:100%} -------------------------------------------------------------------------------- /public/static/css/chunk-6f24315e.c3a401dd.css: -------------------------------------------------------------------------------- 1 | .page[data-v-5ad9cf8a]{position:relative;margin-top:7%;width:100%;height:100%;background:url(../../static/img/login_bg2.53ecd4df.png) no-repeat 0 0;background-size:494px 602px}.login-card[data-v-5ad9cf8a]{height:100%;padding-right:130px;padding-top:80px;width:100%}.title[data-v-5ad9cf8a]{font-size:2.3rem;font-weight:700;margin:20px 0 50px 40px}.changeBtn[data-v-5ad9cf8a]{cursor:pointer}[data-v-5ad9cf8a] .el-input__inner{border-radius:30px;line-height:80px;background-color:#f5f5f5;border:none;text-indent:20px;height:50px}[data-v-5ad9cf8a] .el-input__prefix{font-size:1.4rem;padding:8px}[data-v-5ad9cf8a] .el-form-item__error{padding-left:50px}[data-v-5ad9cf8a] .el-form-item{margin-bottom:40px}[data-v-5ad9cf8a] .el-dialog__header{text-align:center}[data-v-5ad9cf8a] .el-dialog__body{padding:3px 25px 25px 25px}[data-v-5ad9cf8a] .el-dialog__body .drag_verify{margin-top:20px} -------------------------------------------------------------------------------- /public/static/css/chunk-90f63cb6.b4463508.css: -------------------------------------------------------------------------------- 1 | .components-default-style[data-v-402cadde]{width:100%;height:100%;text-align:center;position:relative;display:flex;justify-content:center;align-items:center;background:#fff}.components-default-style .default-style-img[data-v-402cadde],.components-default-style>div[data-v-402cadde]{display:inline-block}.components-default-style .tips[data-v-402cadde]{margin-top:30px;color:grey}.page-data-list[data-v-0d27c64c]{height:100%} -------------------------------------------------------------------------------- /public/static/fonts/element-icons.535877f5.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/fonts/element-icons.535877f5.woff -------------------------------------------------------------------------------- /public/static/fonts/element-icons.732389de.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/fonts/element-icons.732389de.ttf -------------------------------------------------------------------------------- /public/static/fonts/iconfont.2adcd9a2.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/fonts/iconfont.2adcd9a2.eot -------------------------------------------------------------------------------- /public/static/fonts/iconfont.4e2258a0.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/fonts/iconfont.4e2258a0.ttf -------------------------------------------------------------------------------- /public/static/fonts/iconfont.687560f7.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/fonts/iconfont.687560f7.woff -------------------------------------------------------------------------------- /public/static/img/Switch.a0e8f86f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/Switch.a0e8f86f.jpg -------------------------------------------------------------------------------- /public/static/img/avatar.e033ea29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/avatar.e033ea29.png -------------------------------------------------------------------------------- /public/static/img/banner.95ab5f16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/banner.95ab5f16.png -------------------------------------------------------------------------------- /public/static/img/banner.f77c57eb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/banner.f77c57eb.png -------------------------------------------------------------------------------- /public/static/img/button.b3883c1e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/button.b3883c1e.png -------------------------------------------------------------------------------- /public/static/img/carousel.a5b2553e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/carousel.a5b2553e.png -------------------------------------------------------------------------------- /public/static/img/checkbox.bd4b7763.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/checkbox.bd4b7763.jpg -------------------------------------------------------------------------------- /public/static/img/circle-border.5fe597d1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/circle-border.5fe597d1.png -------------------------------------------------------------------------------- /public/static/img/form.d3b05bae.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/form.d3b05bae.png -------------------------------------------------------------------------------- /public/static/img/funnel.c69030ce.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/funnel.c69030ce.jpg -------------------------------------------------------------------------------- /public/static/img/headerImage.baefd97f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/headerImage.baefd97f.png -------------------------------------------------------------------------------- /public/static/img/iframe.6d67bf34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/iframe.6d67bf34.png -------------------------------------------------------------------------------- /public/static/img/image.e19d7f4a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/image.e19d7f4a.png -------------------------------------------------------------------------------- /public/static/img/lineCharts.ae72a114.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/lineCharts.ae72a114.jpg -------------------------------------------------------------------------------- /public/static/img/login_bg.b2d321f6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/login_bg.b2d321f6.png -------------------------------------------------------------------------------- /public/static/img/login_bg2.53ecd4df.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/login_bg2.53ecd4df.png -------------------------------------------------------------------------------- /public/static/img/logo.30525635.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/logo.30525635.png -------------------------------------------------------------------------------- /public/static/img/map.cdd0a85e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/map.cdd0a85e.png -------------------------------------------------------------------------------- /public/static/img/music.4a52a7c8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/music.4a52a7c8.png -------------------------------------------------------------------------------- /public/static/img/nodata.6b16cccd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/nodata.6b16cccd.jpg -------------------------------------------------------------------------------- /public/static/img/notice.1a7c4d2d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/notice.1a7c4d2d.png -------------------------------------------------------------------------------- /public/static/img/pagecover-image.677bc94e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/pagecover-image.677bc94e.png -------------------------------------------------------------------------------- /public/static/img/pieCharts.1c159a3c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/pieCharts.1c159a3c.jpg -------------------------------------------------------------------------------- /public/static/img/qcode.5d8d13b4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/qcode.5d8d13b4.png -------------------------------------------------------------------------------- /public/static/img/radio.8232ca9c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/radio.8232ca9c.jpg -------------------------------------------------------------------------------- /public/static/img/rate.45d4b8f2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/rate.45d4b8f2.jpg -------------------------------------------------------------------------------- /public/static/img/stepper.4d9b0ce6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/stepper.4d9b0ce6.jpg -------------------------------------------------------------------------------- /public/static/img/tabars.ca6734c0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/tabars.ca6734c0.png -------------------------------------------------------------------------------- /public/static/img/text.857c2679.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/text.857c2679.png -------------------------------------------------------------------------------- /public/static/img/use-beb469.beb469b6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/use-beb469.beb469b6.png -------------------------------------------------------------------------------- /public/static/img/video.9e4bd305.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/video.9e4bd305.png -------------------------------------------------------------------------------- /public/static/img/wordcloud.7d29abbe.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/public/static/img/wordcloud.7d29abbe.jpg -------------------------------------------------------------------------------- /public/static/js/chunk-0069f99e.71c57878.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-0069f99e"],{"720d":function(t,e,s){"use strict";s.r(e);var i=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"page-home"},[s("div",{staticClass:"home-side-bar"},[s("el-menu",{attrs:{"default-active":"/page-list",router:""}},[s("el-menu-item",{attrs:{index:"/home/page-list"}},[s("i",{staticClass:"el-icon-mobile"}),s("span",{attrs:{slot:"title"},slot:"title"},[t._v("我的作品")])]),s("el-menu-item",{attrs:{index:"/home/my-template"}},[s("i",{staticClass:"el-icon-document"}),s("span",{attrs:{slot:"title"},slot:"title"},[t._v("我的模板")])]),s("el-menu-item",{attrs:{index:"/home/page-data"}},[s("i",{staticClass:"el-icon-menu"}),s("span",{attrs:{slot:"title"},slot:"title"},[t._v("我的数据")])]),s("el-menu-item",{attrs:{index:"/home/template-list"}},[s("i",{staticClass:"el-icon-s-shop"}),s("span",{attrs:{slot:"title"},slot:"title"},[t._v("创意模板")])])],1)],1),s("div",{staticClass:"clearfix my-page-list"},[s("router-view",{staticClass:"sub-page"})],1)])},a=[],l={},n=l,o=(s("8053"),s("4ac2")),c=Object(o["a"])(n,i,a,!1,null,"659890ee",null);e["default"]=c.exports},"7d47":function(t,e,s){},8053:function(t,e,s){"use strict";s("7d47")}}]); 2 | //# sourceMappingURL=chunk-0069f99e.71c57878.js.map -------------------------------------------------------------------------------- /public/static/js/chunk-39d883ed.8cccd16a.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-39d883ed"],{"566d":function(e,a,t){"use strict";t.r(a);var s=function(){var e=this,a=e.$createElement,t=e._self._c||a;return t("div",{staticClass:"clearfix my-page-list"},[t("div",{staticClass:"page-search-wrapper bg-white"},[t("el-tabs",{on:{"tab-click":e.handlePageModeClick},model:{value:e.searchParams.pageMode,callback:function(a){e.$set(e.searchParams,"pageMode",a)},expression:"searchParams.pageMode"}},e._l(e.pageModeList,(function(a,s){return t("el-tab-pane",{key:s,attrs:{name:a.value,disabled:a.disabled}},[t("div",{attrs:{slot:"label"},slot:"label"},[t("span",{staticClass:"nav-tabs-label"},[e._v(e._s(a.label))])])])})),1)],1),t("div",{staticClass:"scroll-wrapper page-list-wrapper"},[e.pageList.length?t("el-scrollbar",{staticStyle:{height:"100%"}},[t("div",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticClass:"page-content"},[t("div",{staticClass:"page-item-wrapper"},e._l(e.pageList,(function(a,s){return t("div",{key:s,staticClass:"page-item"},[t("thumbnailPanel",{attrs:{pageData:a,btnList:["useTemplate"],showMoreBtn:!1,showPublishState:!1},on:{refresh:e.getPageList,showPreview:e.showPreviewFn}})],1)})),0)])]):t("notFundData")],1),e.showPreview?t("previewPage",{attrs:{pageId:e.previewId},on:{closePreview:function(a){e.showPreview=!1}}}):e._e()],1)},i=[],n=(t("a450"),t("c5c7")),r=t("2f88"),o=t("bf8b"),l={components:{notFundData:n["a"],thumbnailPanel:r["a"],previewPage:o["a"]},data:function(){return{loading:!1,pageList:[],pageModeList:[],searchParams:{pageMode:"h5"},previewId:"",showPreview:!1}},created:function(){this.pageModeList=this.$config.pageModeList,this.getPageList()},methods:{handlePageModeClick:function(e){this.searchParams.pageMode=e.name,this.getPageList()},getPageList:function(){var e=this;this.$API.getPublishTemplates(this.searchParams).then((function(a){e.pageList=a.body||[]}))},showPreviewFn:function(e){this.previewId=e,this.showPreview=!0}}},c=l,d=(t("c8ea"),t("8bc8"),t("4ac2")),p=Object(d["a"])(c,s,i,!1,null,"26f12d29",null);a["default"]=p.exports},"8bc8":function(e,a,t){"use strict";t("d85e")},"9ddc":function(e,a,t){},c8ea:function(e,a,t){"use strict";t("9ddc")},d85e:function(e,a,t){}}]); 2 | //# sourceMappingURL=chunk-39d883ed.8cccd16a.js.map -------------------------------------------------------------------------------- /public/static/js/chunk-45ad6033.bf74defa.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-45ad6033"],{"46a8":function(t,a,e){"use strict";e("8794")},"4c72":function(t,a,e){},5114:function(t,a,e){"use strict";e.r(a);var n=function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("div",{staticClass:"page-data-list"},[e("div"),e("notFundData")],1)},c=[],s=e("c5c7"),i={components:{notFundData:s["a"]}},u=i,l=(e("46a8"),e("4ac2")),o=Object(l["a"])(u,n,c,!1,null,"6c309750",null);a["default"]=o.exports},8508:function(t,a,e){t.exports=e.p+"static/img/nodata.6b16cccd.jpg"},8794:function(t,a,e){},c5c7:function(t,a,e){"use strict";var n=function(){var t=this,a=t.$createElement,n=t._self._c||a;return n("div",{staticClass:"components-default-style"},[n("div",[n("img",{staticClass:"default-style-img",style:{width:t.width,height:t.height},attrs:{src:e("8508"),alt:""}}),n("p",{staticClass:"tips"},[t._v("暂无数据")])])])},c=[],s={name:"notFundData",props:{width:{type:String,default:"80%"},height:{type:String,default:"80%"}}},i=s,u=(e("e17e"),e("4ac2")),l=Object(u["a"])(i,n,c,!1,null,"402cadde",null);a["a"]=l.exports},e17e:function(t,a,e){"use strict";e("4c72")}}]); 2 | //# sourceMappingURL=chunk-45ad6033.bf74defa.js.map -------------------------------------------------------------------------------- /public/static/js/chunk-90f63cb6.a8d41848.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-90f63cb6"],{"0bdd":function(t,e,c){},"4c72":function(t,e,c){},"504b":function(t,e,c){"use strict";c.r(e);var n=function(){var t=this,e=t.$createElement,c=t._self._c||e;return c("div",{staticClass:"page-data-detail"},[c("div"),c("notFundData")],1)},a=[],s=c("c5c7"),i={components:{notFundData:s["a"]}},d=i,u=(c("d7bd"),c("4ac2")),l=Object(u["a"])(d,n,a,!1,null,"0d27c64c",null);e["default"]=l.exports},8508:function(t,e,c){t.exports=c.p+"static/img/nodata.6b16cccd.jpg"},c5c7:function(t,e,c){"use strict";var n=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"components-default-style"},[n("div",[n("img",{staticClass:"default-style-img",style:{width:t.width,height:t.height},attrs:{src:c("8508"),alt:""}}),n("p",{staticClass:"tips"},[t._v("暂无数据")])])])},a=[],s={name:"notFundData",props:{width:{type:String,default:"80%"},height:{type:String,default:"80%"}}},i=s,d=(c("e17e"),c("4ac2")),u=Object(d["a"])(i,n,a,!1,null,"402cadde",null);e["a"]=u.exports},d7bd:function(t,e,c){"use strict";c("0bdd")},e17e:function(t,e,c){"use strict";c("4c72")}}]); 2 | //# sourceMappingURL=chunk-90f63cb6.a8d41848.js.map -------------------------------------------------------------------------------- /service/api/file.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const path = require('path') 3 | 4 | module.exports = app => ({ 5 | /** 6 | * 单文件上传 7 | * @param file 要上传的文件 8 | * @param folderPath 保存目标目录 9 | * @returns {Promise<{fileName: *, url: string}>} 10 | */ 11 | async upload(file, folderName) { 12 | let {$config, $helper} = app; 13 | // 读取文件 14 | let fileData = fs.readFileSync(file.path) 15 | // 将文件存到指定位置 16 | let folderPath = path.join(path.join(__dirname, '../public/resource/'), folderName) // 拼接文件夹 17 | // 判断文件夹是否存在不存在则新建一个 18 | await $helper.dirExists(folderPath); 19 | // 拼接文件路径 20 | let filePath = path.join(folderPath, file.name) // 拼接文件路径 21 | fs.writeFileSync(filePath, fileData) 22 | // 返回文件信息 23 | return { 24 | fileName: file.filename, 25 | url: $config.baseUrl + `/resource/${folderName ? folderName + '/' : ''}${file.name}` 26 | } 27 | } 28 | }) 29 | -------------------------------------------------------------------------------- /service/api/image.js: -------------------------------------------------------------------------------- 1 | const request = require('request'); 2 | const $config = require('../config') 3 | module.exports = app => ({ 4 | /** 5 | * 获取我的图片列表 6 | * @returns {Promise<*>} 7 | */ 8 | async getMyImages() { 9 | const { ctx, $model } = app; 10 | let userData = ctx.userData 11 | let query = { author: userData._id }; 12 | return await $model.image.find(query).select('_id url').exec(); 13 | }, 14 | /** 15 | * 添加图片 16 | * @param url 17 | * @returns {Promise<*>} 18 | */ 19 | async addImage(url) { 20 | const { ctx, $model } = app; 21 | let userData = ctx.userData; 22 | return await $model.image.create({ 23 | author: userData._id, 24 | url: url 25 | }); 26 | }, 27 | /** 28 | * 获取外部图片 29 | */ 30 | async getExternalImages() { 31 | const { ctx } = app; 32 | let url = 'https://material-api.eqxiu.com/m/material/category/template/list?categoryId=898438&searchCode=94231&sortBy=0&fee=&pageNo=5&pageSize=20' 33 | // let url = 'https://www.vcg.com/api/common/searchImage?assetFormat%5B%5D=png&phrase=%E4%BA%BA%E7%89%A9&graphicalStyle=6&transform=renwu&isRecommendCreativeFreshData=false' 34 | var options = { 35 | url, 36 | 'method': 'GET', 37 | 'headers': { 38 | 'cookie': $config.eqxiuCookie 39 | } 40 | }; 41 | return new Promise((resolve, reject) => { 42 | request(options, function(error, response, body) { 43 | if (!error && response.statusCode == 200) { 44 | let arr = JSON.parse(body) 45 | resolve(arr.obj) 46 | // resolve(JSON.stringify(arr.list, ['equalw_url', 'url800', 'width', 'height'])) 47 | } else { 48 | reject(error) 49 | } 50 | }) 51 | }) 52 | } 53 | }) -------------------------------------------------------------------------------- /service/app.js: -------------------------------------------------------------------------------- 1 | const Application = require('./core'); 2 | 3 | const app = new Application(); 4 | 5 | app.start(3333); -------------------------------------------------------------------------------- /service/config/index.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | port: 3333, 3 | mongodb: { 4 | url: 'mongodb://localhost:27017/Oct1a', 5 | options: {} 6 | }, 7 | middleware: ['handlerError'], 8 | jwt: { secret: 'Oct1a_H' }, 9 | crypto: { secret: '#*#*Oct1a_H*#*#' }, 10 | baseUrl: '', 11 | eqxiuCookie: '_tracker_distinct_id_=2020111920aaabbc; ARK_ID=JSdfda9e002ba3079ecdec774543e214ebdfda; _tracker_user_id_=b9564bd5d2714e12b5cc243eabfe3ea1; bigdata_user_reg_time=2020-12-17%2008%3A46%3A50; Hm_lvt_93cd06ebda2db598041456a9d18c7299=1618806303,1619361256,1620872002; _tracker_ab=abTest_v1_undefined_undefined; ab_trace_id=8794808596b941fa865a543cb2a7fef8; JSESSIONID=79319b30297241978acbcbf913cc818d; canvasId=51a92dcf-a5f0-4040-90a5-b108292fc4f5; ARK_STARTUP=eyJTVEFSVFVQIjp0cnVlLCJTVEFSVFVQVElNRSI6IjIwMjEtMDUtMjAgMDk6MTA6NTEuMTgwIn0%3D; eip-user-login-first={"e3ea1":"2021-05-20"}; _tracker_session_id_=3d01aaab-e93c-42d0-88d6-4cda23b74234; _tracker_launch_=1; FZ_STROAGE.eqxiu.com=eyJBUktTVVBFUiI6eyJwcm9kdWN0IjoiSDXllYbln44ifSwiU0VFU0lPTklEIjoiZjU1YjI0NTk0MDkzOTFlZSIsIlNFRVNJT05EQVRFIjoxNjIxNDczMDYxODgzLCJBTlNBUFBJRCI6ImYxY2MwYWUzZTBkMDc4MjIiLCJBTlMkREVCVUciOjAsIkFOU1VQTE9BRFVSTCI6Imh0dHBzOi8vYXJrLXB1c2gxLmVxeGl1LmNvbS8iLCJGUklTVERBWSI6IjIwMjEwNTE0IiwiRlJJU1RJTUUiOmZhbHNlLCJBUktfSUQiOiJKU2RmZGE5ZTAwMmJhMzA3OWVjZGVjNzc0NTQzZTIxNGViZGZkYSIsIkFSS0ZSSVNUUFJPRklMRSI6IjIwMjEtMDUtMTQgMTU6MzY6NTAuMzUxIn0%3D; _tracker_share_level_=0; _tracker_from_user_=; _tracker_from_id_=' 12 | } -------------------------------------------------------------------------------- /service/controller/API.js: -------------------------------------------------------------------------------- 1 | module.exports = app => ({ 2 | /** 3 | * 获取用户作品列表 4 | * @returns {Promise<*>} 5 | */ 6 | async getWorks() { 7 | const { $model, $helper } = app; 8 | let works = await $model.page.find(); 9 | $helper.returnBody(true, works) 10 | }, 11 | /** 12 | * 获取用户列表 13 | * @returns {Promise<*>} 14 | */ 15 | async getUsers() { 16 | const { $model, $helper } = app; 17 | let users = await $model.user.find(); 18 | $helper.returnBody(true, users) 19 | }, 20 | 21 | /** 22 | * 更新用户状态 23 | * @returns {Promise} 24 | */ 25 | async updateUserStatus() { 26 | const { ctx, $service, $helper } = app; 27 | const { id, state } = ctx.request.body 28 | await $service.user.updateUserStatus(id, state); 29 | $helper.returnBody(true) 30 | }, 31 | 32 | /** 33 | * 更新用户权限 34 | * @returns {Promise} 35 | */ 36 | async updateUserPower() { 37 | const { ctx, $service, $helper } = app; 38 | const { id } = ctx.request.body 39 | await $service.user.updateUserPower(id); 40 | $helper.returnBody(true) 41 | }, 42 | 43 | /** 44 | * 删除作品 45 | */ 46 | async delWork() { 47 | const { ctx, $service, $helper } = app; 48 | let { id } = ctx.request.body; 49 | await $service.page.deletePage(id); 50 | $helper.returnBody(true) 51 | } 52 | 53 | }) -------------------------------------------------------------------------------- /service/controller/cooperation.js: -------------------------------------------------------------------------------- 1 | module.exports = app => ({ 2 | /** 3 | * 通过用户列表添加协作人 4 | * @returns {Promise} 5 | */ 6 | async addCooperationUser(){ 7 | const {ctx, $service, $helper} = app; 8 | const {userIds, pageId} = ctx.request.body; 9 | let cooperationList = await $service.page.addCooperationUser(pageId, userIds); 10 | $helper.returnBody(true, cooperationList) 11 | }, 12 | /** 13 | * 获取协作人列表 14 | * @returns {Promise} 15 | */ 16 | async getCooperationUserListByPageId(){ 17 | const {ctx, $service, $helper} = app; 18 | const {pageId} = ctx.request.query; 19 | let cooperationList = await $service.page.getCooperationUserListByPageId(pageId); 20 | $helper.returnBody(true, cooperationList) 21 | }, 22 | /** 23 | * 删除协作人 24 | * @returns {Promise} 25 | */ 26 | async removeCooperationUser(){ 27 | const {ctx, $service, $helper} = app; 28 | const {pageId, userId} = ctx.request.body; 29 | const cooperationList = await $service.page.removeCooperationUser(pageId, userId); 30 | $helper.returnBody(true, cooperationList) 31 | }, 32 | 33 | }) 34 | -------------------------------------------------------------------------------- /service/controller/htmlToCanvas.js: -------------------------------------------------------------------------------- 1 | /** 2 | * html2canvas所需接口相关 3 | * @type {request} 4 | */ 5 | const request = require('request'); 6 | module.exports = app => ({ 7 | /** 8 | * html2canvas 跨域接口设置 9 | * @returns {Promise} 10 | */ 11 | async corsproxy(){ 12 | const {ctx} = app; 13 | const {url} = ctx.request.query; 14 | ctx.status = 200; 15 | ctx.body = await request(url) 16 | } 17 | }) 18 | -------------------------------------------------------------------------------- /service/controller/image.js: -------------------------------------------------------------------------------- 1 | /** 2 | * images lib 相关 3 | * @param app 4 | * @returns {{corsproxy(): Promise}} 5 | */ 6 | 7 | module.exports = app => ({ 8 | /** 9 | * 获取我的图片列表 10 | * @returns {Promise} 11 | */ 12 | async getMyImages() { 13 | const { $service, $helper } = app; 14 | const imageList = await $service.image.getMyImages(); 15 | $helper.returnBody(true, imageList) 16 | }, 17 | /** 18 | * 上传我的图片 19 | * @returns {Promise} 20 | */ 21 | async uploadImage() { 22 | const { ctx, $service, $helper } = app; 23 | let userData = ctx.userData; 24 | // 时间戳 25 | let timestamps = (new Date().getTime()).toString(); 26 | let file = ctx.request.files.file; 27 | let fileResult = await $service.file.upload(file, 'image_lib/' + userData.username + '/' + timestamps); 28 | const imageData = await $service.image.addImage(fileResult.url); 29 | $helper.returnBody(true, imageData) 30 | }, 31 | /** 32 | * 获取外部图片 33 | */ 34 | async getExternalImages() { 35 | const { ctx, $service, $helper } = app; 36 | const imageData = await $service.image.getExternalImages().then(r => r) 37 | // $helper.returnBody(true, { data: JSON.parse(imageData) }) 38 | // console.log(imageData) 39 | $helper.returnBody(true, { data: imageData }) 40 | } 41 | }) -------------------------------------------------------------------------------- /service/controller/psd.js: -------------------------------------------------------------------------------- 1 | /** 2 | * psd解析 3 | * @param app 4 | * @returns {{corsproxy(): Promise}} 5 | * 文档:https://github.com/meltingice/psd.js 6 | */ 7 | const PSD = require('psd'); 8 | const path = require('path') 9 | module.exports = app => ({ 10 | /** 11 | * 解析psd 12 | * @returns {Promise} 13 | */ 14 | async psdPpload() { 15 | const { ctx, $config, $helper } = app; 16 | let file = ctx.request.files.file; 17 | let psdModel = ctx.request.body.psdModel //上传模式 18 | let psd = await PSD.open(file.path) 19 | let timeStr = +new Date(); 20 | let descendantsList = psd.tree().descendants(); 21 | descendantsList.reverse(); 22 | let psdSourceList = [] 23 | let currentPathDir = `/resource/upload_psd/${timeStr}` 24 | // 判断文件夹是否存在不存在则新建一个 25 | await $helper.dirExists(path.join(__dirname, '../public' + currentPathDir)); 26 | // 遍历图层 27 | for (var i = 0; i < descendantsList.length; i++) { 28 | if (descendantsList[i].isGroup()) continue; 29 | if (!descendantsList[i].visible) continue; 30 | // 如果是文本,先处理文本,否则存为图片 31 | if (psdModel != "image" && descendantsList[i].export().text) { 32 | psdSourceList.push({ 33 | ...descendantsList[i].export(), 34 | type: 'text', 35 | }) 36 | } else { 37 | try { 38 | await descendantsList[i].saveAsPng(path.join(__dirname, '../public' + currentPathDir + `/${i}.png`)) 39 | psdSourceList.push({ 40 | ...descendantsList[i].export(), 41 | type: 'picture', 42 | imageSrc: ($config.baseUrl || '') + `${currentPathDir}/${i}.png`, 43 | }) 44 | } catch (e) { 45 | // 转换不出来的图层先忽略 46 | continue; 47 | } 48 | } 49 | } 50 | $helper.returnBody(true, { 51 | elements: psdSourceList, 52 | document: psd.tree().export().document 53 | }) 54 | } 55 | }) -------------------------------------------------------------------------------- /service/controller/user.js: -------------------------------------------------------------------------------- 1 | module.exports = app => ({ 2 | /** 3 | * 获取个人信息 4 | * @returns {Promise} 5 | */ 6 | async getUserInfo() { 7 | const { ctx, $helper } = app; 8 | $helper.returnBody(true, ctx.userData) 9 | }, 10 | /** 11 | * 更新个人昵称 12 | * @returns {Promise} 13 | */ 14 | async updateUserName() { 15 | const { ctx, $service, $helper } = app; 16 | const { name } = ctx.request.body 17 | const user = await $service.user.updateUserName(name); 18 | $helper.returnBody(true, user) 19 | }, 20 | 21 | /** 22 | * 更新用户密码 23 | * @returns {Promise} 24 | */ 25 | async updateUserPass() { 26 | const { ctx, $service, $helper } = app; 27 | const userData = ctx.userData; 28 | const { oldPass, newPass } = ctx.request.body; 29 | // 校验老密码是否正确 30 | const userCurrentPass = await $service.user.getUsersPasswordByUsername(userData.username); 31 | const verifyPass = await $helper.checkPassword(oldPass, userCurrentPass.password) 32 | if (!verifyPass) { 33 | $helper.returnBody(false, '', "原密码错误,请输入正确原密码!"); 34 | return; 35 | } 36 | const pass = await $helper.createPassword(newPass) 37 | const user = await $service.user.updateUserPass(pass); 38 | $helper.returnBody(true, user) 39 | }, 40 | 41 | /** 42 | * 更新个人头像 43 | * @returns {Promise} 44 | */ 45 | async updateUserAvatar() { 46 | const { ctx, $service, $helper } = app; 47 | let userData = ctx.userData; 48 | let file = ctx.request.files.file; 49 | let fileResult = await $service.file.upload(file, 'avatar/' + userData.username); 50 | const user = await $service.user.updateUserAvatar(fileResult.url); 51 | $helper.returnBody(true, user) 52 | }, 53 | /** 54 | * 模糊查询用户 55 | * @returns {Promise} 56 | */ 57 | async getUserList() { 58 | const { ctx, $service, $helper } = app; 59 | const { keywords } = ctx.request.query; 60 | const users = await $service.user.getUserByKeyWords(keywords); 61 | $helper.returnBody(true, users) 62 | } 63 | 64 | }) -------------------------------------------------------------------------------- /service/core/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 封装koa mvc基础架构初始化工作 3 | */ 4 | const path = require('path') 5 | const Koa = require('koa'); 6 | const { initConfig, initController, initService, initModel, initRouter, initMiddleware, initExtend, initSchedule } = require('./loader'); 7 | class Application { 8 | constructor() { 9 | this.$app = new Koa(); 10 | // 注册默认内置中间件 11 | this.initDefaultMiddleware(); 12 | 13 | // 初始化config 14 | this.$config = initConfig(this); 15 | // 初始化controller 16 | this.$controller = initController(this); 17 | // 初始化service 18 | this.$service = initService(this); 19 | // 初始化middleware 20 | this.$middleware = initMiddleware(this); 21 | // 初始化model 22 | this.$model = initModel(this) 23 | // 初始化router 24 | this.$router = initRouter(this); 25 | // 初始化扩展 26 | initExtend(this); 27 | // 初始化定时任务schedule 28 | initSchedule(this) 29 | 30 | // 将ctx注入到app上 31 | this.$app.use(async(ctx, next) => { 32 | this.ctx = ctx; 33 | await next() 34 | }) 35 | this.$app.use(this.$router.routes()); 36 | } 37 | 38 | // 设置内置中间件 39 | initDefaultMiddleware() { 40 | const koaStatic = require('koa-static'); 41 | const koaBody = require('koa-body'); 42 | const cors = require('koa2-cors'); 43 | const views = require('koa-views'); 44 | 45 | // 配置静态web 46 | this.$app.use(koaStatic(path.resolve(__dirname, '../public')), { 47 | gzip: true, 48 | setHeaders: function(res) { 49 | res.header('Access-Control-Allow-Origin', '*') 50 | } 51 | }); 52 | //跨域处理 53 | this.$app.use(cors()); 54 | // body接口数据处理 55 | this.$app.use(koaBody({ 56 | multipart: true, 57 | formidable: { 58 | maxFileSize: 3000 * 1024 * 1024 // 设置上传文件大小最大限制,默认30M 59 | } 60 | })); 61 | //配置需要渲染的文件路径及文件后缀 62 | this.$app.use(views(path.join(__dirname, '../views'), { 63 | extension: 'ejs' 64 | })) 65 | } 66 | 67 | // 启动服务 68 | start(port) { 69 | this.$app.listen(port, () => { 70 | console.log('API服务已启动...http://localhost:' + port); 71 | }); 72 | } 73 | } 74 | 75 | module.exports = Application; -------------------------------------------------------------------------------- /service/middleware/auth.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /** 4 | * 登录验证 5 | * @author Oct1a_H 6 | * @return {null} null 7 | */ 8 | module.exports = app => { 9 | return async function(ctx, next) { 10 | let { $helper } = app; 11 | let token = ''; 12 | if ( 13 | ctx.headers.authorization && ctx.headers.authorization.split(' ')[0] === 'Bearer' 14 | ) { 15 | token = ctx.headers.authorization.split(' ')[1]; 16 | } else if (ctx.query.accesstoken) { 17 | token = ctx.query.accesstoken; 18 | } else if (ctx.request.body.accesstoken) { 19 | token = ctx.request.body.accesstoken; 20 | } else if (ctx.request.header.cookie) { 21 | token = ctx.request.header.cookie.split('x-csrf-token=')[1] //针对后台接口 22 | } 23 | let user; 24 | try { 25 | user = await $helper.checkToken(token); 26 | } catch (e) { 27 | $helper.returnBody(false, {}, 'Token 无效,请重新登录', 401); 28 | } 29 | if (!user) { 30 | $helper.returnBody(false, {}, 'Token 无效,请重新登录', 401); 31 | return; 32 | } 33 | ctx.userData = user; 34 | app.userData = user; 35 | await next(); 36 | }; 37 | }; -------------------------------------------------------------------------------- /service/middleware/handlerError.js: -------------------------------------------------------------------------------- 1 | module.exports = app => { 2 | return async function(ctx, next) { 3 | try { 4 | await next(); 5 | } catch (err) { 6 | console.log(err) 7 | const status = err.status || 500; 8 | // 如果时生产环境的时候 500错误的详细错误内容不返回给客户端 9 | const error = status === 500 ? '网络错误' : err.message; 10 | 11 | ctx.body = { 12 | msg: error, 13 | status: false, 14 | body: {}, 15 | code: status 16 | }; 17 | } 18 | }; 19 | }; 20 | -------------------------------------------------------------------------------- /service/model/image.js: -------------------------------------------------------------------------------- 1 | module.exports = app => { 2 | const { mongoose } = app; 3 | const Schema = mongoose.Schema 4 | // Schema 5 | const schema = new Schema({ 6 | url: { type: String, default: '' }, 7 | author: { 8 | type: mongoose.Schema.Types.ObjectId, 9 | ref: 'user' 10 | } 11 | }, {timestamps: {createdAt: 'created', updatedAt: 'updated'}}) 12 | return mongoose.model('image', schema); 13 | }; 14 | -------------------------------------------------------------------------------- /service/model/page.js: -------------------------------------------------------------------------------- 1 | module.exports = app => { 2 | const { mongoose } = app; 3 | const Schema = mongoose.Schema 4 | // Schema 5 | const schema = new Schema({ 6 | title: { type: String, default: '未命名场景' }, 7 | coverImage: { type: String, default: '' }, 8 | description: { type: String, default: '我用Dcode-Editor可视化编辑器做了一个超酷炫的H5,快来看看吧。' }, 9 | shareConfig: { 10 | shareWx: { type: Boolean, default: false }, 11 | coverImage: { type: String, default: '' }, 12 | title: { type: String, default: '这是#分享者#的大力推荐' }, 13 | description: { type: String, default: '这是#分享者#大力推荐的H5' }, 14 | }, 15 | pages: Schema.Types.Mixed, //用于原始数据存储 16 | script: { type: String, default: '' }, // 第三方脚本插件 17 | author: { 18 | type: String, 19 | ref: "user" 20 | }, 21 | width: { type: Number, default: 375 }, // 页面宽 22 | height: { type: Number, default: 611 }, // 页面高度 23 | pageMode: { type: String, default: 'h5' }, // 渲染模式 24 | flipType: { type: Number, default: 0 }, // 翻页模式 25 | slideNumber: { type: Boolean, default: false }, // 翻页是否显示页码翻页指示 26 | add_time: Number, 27 | up_time: Number, 28 | status: { type: Number, enum: [0, 1], default: 1 }, // 0 不允许访问, 1 允许访问 29 | isPublish: { type: Boolean, default: false }, // 发布状态 30 | isTemplate: { type: Boolean, default: false }, 31 | members: [{ 32 | type: String, 33 | ref: "user" 34 | }], // 共享人员列表 35 | version: { 36 | type: Number, 37 | default: 1 38 | } 39 | }, { timestamps: { createdAt: 'created', updatedAt: 'updated' } }) 40 | return mongoose.model('page', schema); 41 | }; -------------------------------------------------------------------------------- /service/model/user.js: -------------------------------------------------------------------------------- 1 | module.exports = app => { 2 | const { mongoose } = app; 3 | const Schema = mongoose.Schema 4 | // Schema 5 | const usersSchema = new Schema({ 6 | username: { type: String, required: [true, 'username不能为空'] }, 7 | password: { type: String, required: [true, 'password不能为空'] }, 8 | name: { type: String, default: '' }, 9 | email: { type: String, default: '' }, 10 | avatar: { type: String, default: '' }, 11 | permissions: { type: Number, default: 0 }, //0普通用户,1管理员 12 | status: { type: Boolean, default: true } 13 | }, { timestamps: { createdAt: 'created', updatedAt: 'updated' } }) 14 | return mongoose.model('user', usersSchema); 15 | }; -------------------------------------------------------------------------------- /service/public/admin.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Dcode-Editor 10 | 11 | 12 | 13 | 14 | We're sorry but doesn't work properly without JavaScript enabled. Please enable it to continue. 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /service/public/engine_libs/h5-swiper/demo.html: -------------------------------------------------------------------------------- 1 | 2 | page-engine demo 3 | 4 | 5 | 6 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /service/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/favicon.ico -------------------------------------------------------------------------------- /service/public/resource/avatar/admin/logo - 副本.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/resource/avatar/admin/logo - 副本.png -------------------------------------------------------------------------------- /service/public/resource/avatar/admin/v2-73b8307b2db44c617f4e8515ce67dd39_r.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/resource/avatar/admin/v2-73b8307b2db44c617f4e8515ce67dd39_r.jpg -------------------------------------------------------------------------------- /service/public/resource/image_lib/admin/1618634024488/003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/resource/image_lib/admin/1618634024488/003.png -------------------------------------------------------------------------------- /service/public/resource/image_lib/admin/1619146421668/未命名文件 (9).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/resource/image_lib/admin/1619146421668/未命名文件 (9).png -------------------------------------------------------------------------------- /service/public/resource/image_lib/admin/1619163776451/未命名文件.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/resource/image_lib/admin/1619163776451/未命名文件.png -------------------------------------------------------------------------------- /service/public/resource/image_lib/admin/1620103978503/企业个人微信.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/resource/image_lib/admin/1620103978503/企业个人微信.jpg -------------------------------------------------------------------------------- /service/public/resource/image_lib/admin/1620892910720/afc6a3f40b8710341f17d2215b934c62.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/resource/image_lib/admin/1620892910720/afc6a3f40b8710341f17d2215b934c62.jpg -------------------------------------------------------------------------------- /service/public/resource/image_lib/admin/1621152723716/logo - 副本.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/resource/image_lib/admin/1621152723716/logo - 副本.png -------------------------------------------------------------------------------- /service/public/resource/image_lib/admin/1621443988481/logo - 副本.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/resource/image_lib/admin/1621443988481/logo - 副本.png -------------------------------------------------------------------------------- /service/public/resource/image_lib/admin/1621473749516/FpN9kX1crwd3K8dPEtclPett39Qb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/resource/image_lib/admin/1621473749516/FpN9kX1crwd3K8dPEtclPett39Qb.jpg -------------------------------------------------------------------------------- /service/public/resource/image_lib/admin/1621474863689/FpN9kX1crwd3K8dPEtclPett39Qb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/resource/image_lib/admin/1621474863689/FpN9kX1crwd3K8dPEtclPett39Qb.jpg -------------------------------------------------------------------------------- /service/public/static/css/chunk-0069f99e.9fab0072.css: -------------------------------------------------------------------------------- 1 | .page-home[data-v-659890ee]{display:flex;width:100%;height:100%;background:#f0f3f4}.page-home .home-side-bar[data-v-659890ee]{width:200px;background-color:#fff;border-right:1px solid #e6ebed;padding-top:8px;z-index:2}.page-home .my-page-list[data-v-659890ee]{flex:1;height:100%}.page-home .my-page-list .sub-page[data-v-659890ee]{height:100%} -------------------------------------------------------------------------------- /service/public/static/css/chunk-1b5ebbde.04778ce4.css: -------------------------------------------------------------------------------- 1 | .components-preview-inner[data-v-655a0d3a]{width:100%}.setting-bg[data-v-655a0d3a]{position:fixed;left:0;right:0;top:0;bottom:0;background-color:rgba(0,0,0,.8);z-index:1042}.left-panel[data-v-655a0d3a]{position:fixed;top:0;bottom:0;left:0;right:640px;z-index:1050;overflow:hidden}.right-panel[data-v-655a0d3a]{position:fixed;width:640px;top:0;right:0;bottom:0;z-index:1050;background-color:#fff;overflow-y:auto;color:#333}.iframe-wrapper[data-v-655a0d3a]{position:absolute;left:50%;top:50%;margin-left:-185px;margin-top:-334px;background:#fff}.cloase-btn[data-v-655a0d3a]{position:fixed;top:8px;right:20px;font-size:28px;color:#7f8593;-webkit-transition:all .28s;transition:all .28s;z-index:1060;cursor:pointer}.cloase-btn[data-v-655a0d3a]:hover{color:#00acee} -------------------------------------------------------------------------------- /service/public/static/css/chunk-30466f2e.346304c2.css: -------------------------------------------------------------------------------- 1 | .my-page-list[data-v-48a3b697],.page-list-wrapper[data-v-48a3b697]{height:100%}.my-page-nav-list[data-v-48a3b697]{height:40px;line-height:40px;z-index:2;margin-bottom:20px}.my-page-nav-list .my-page-nav-item[data-v-48a3b697]{float:left;padding-right:32px;text-align:center;cursor:pointer}.my-page-nav-list .my-page-nav-item.active[data-v-48a3b697],.my-page-nav-list .my-page-nav-item[data-v-48a3b697]:hover{color:#00acee}.full-input-w[data-v-48a3b697]{width:100%}.nav-tabs-label[data-v-48a3b697]{display:inline-block;padding:0 16px;height:60px;line-height:60px}.page-search-wrapper[data-v-48a3b697]{padding:0}.page-item-wrapper .page-item[data-v-48a3b697]{float:left;margin-right:20px;margin-bottom:40px}.my-page-list .page-search-wrapper .el-tabs__header{margin:0}.my-page-list .page-search-wrapper .el-tabs__nav-wrap{padding:0 30px} -------------------------------------------------------------------------------- /service/public/static/css/chunk-39d883ed.4d235bf0.css: -------------------------------------------------------------------------------- 1 | .my-page-list[data-v-26f12d29],.page-list-wrapper[data-v-26f12d29]{height:100%}.my-page-nav-list[data-v-26f12d29]{height:40px;line-height:40px;z-index:2;margin-bottom:20px}.my-page-nav-list .my-page-nav-item[data-v-26f12d29]{float:left;padding-right:32px;text-align:center;cursor:pointer}.my-page-nav-list .my-page-nav-item.active[data-v-26f12d29],.my-page-nav-list .my-page-nav-item[data-v-26f12d29]:hover{color:#00acee}.full-input-w[data-v-26f12d29]{width:100%}.nav-tabs-label[data-v-26f12d29]{display:inline-block;padding:0 16px;height:60px;line-height:60px}.page-search-wrapper[data-v-26f12d29]{padding:0}.page-item-wrapper .page-item[data-v-26f12d29]{float:left;margin-right:20px;margin-bottom:40px}.my-page-list .page-search-wrapper .el-tabs__header{margin:0}.my-page-list .page-search-wrapper .el-tabs__nav-wrap{padding:0 30px} -------------------------------------------------------------------------------- /service/public/static/css/chunk-45ad6033.dd934ab5.css: -------------------------------------------------------------------------------- 1 | .components-default-style[data-v-402cadde]{width:100%;height:100%;text-align:center;position:relative;display:flex;justify-content:center;align-items:center;background:#fff}.components-default-style .default-style-img[data-v-402cadde],.components-default-style>div[data-v-402cadde]{display:inline-block}.components-default-style .tips[data-v-402cadde]{margin-top:30px;color:grey}.page-data-list[data-v-6c309750]{height:100%} -------------------------------------------------------------------------------- /service/public/static/css/chunk-6f24315e.c3a401dd.css: -------------------------------------------------------------------------------- 1 | .page[data-v-5ad9cf8a]{position:relative;margin-top:7%;width:100%;height:100%;background:url(../../static/img/login_bg2.53ecd4df.png) no-repeat 0 0;background-size:494px 602px}.login-card[data-v-5ad9cf8a]{height:100%;padding-right:130px;padding-top:80px;width:100%}.title[data-v-5ad9cf8a]{font-size:2.3rem;font-weight:700;margin:20px 0 50px 40px}.changeBtn[data-v-5ad9cf8a]{cursor:pointer}[data-v-5ad9cf8a] .el-input__inner{border-radius:30px;line-height:80px;background-color:#f5f5f5;border:none;text-indent:20px;height:50px}[data-v-5ad9cf8a] .el-input__prefix{font-size:1.4rem;padding:8px}[data-v-5ad9cf8a] .el-form-item__error{padding-left:50px}[data-v-5ad9cf8a] .el-form-item{margin-bottom:40px}[data-v-5ad9cf8a] .el-dialog__header{text-align:center}[data-v-5ad9cf8a] .el-dialog__body{padding:3px 25px 25px 25px}[data-v-5ad9cf8a] .el-dialog__body .drag_verify{margin-top:20px} -------------------------------------------------------------------------------- /service/public/static/css/chunk-90f63cb6.b4463508.css: -------------------------------------------------------------------------------- 1 | .components-default-style[data-v-402cadde]{width:100%;height:100%;text-align:center;position:relative;display:flex;justify-content:center;align-items:center;background:#fff}.components-default-style .default-style-img[data-v-402cadde],.components-default-style>div[data-v-402cadde]{display:inline-block}.components-default-style .tips[data-v-402cadde]{margin-top:30px;color:grey}.page-data-list[data-v-0d27c64c]{height:100%} -------------------------------------------------------------------------------- /service/public/static/fonts/element-icons.535877f5.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/fonts/element-icons.535877f5.woff -------------------------------------------------------------------------------- /service/public/static/fonts/element-icons.732389de.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/fonts/element-icons.732389de.ttf -------------------------------------------------------------------------------- /service/public/static/fonts/iconfont.2adcd9a2.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/fonts/iconfont.2adcd9a2.eot -------------------------------------------------------------------------------- /service/public/static/fonts/iconfont.4e2258a0.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/fonts/iconfont.4e2258a0.ttf -------------------------------------------------------------------------------- /service/public/static/fonts/iconfont.687560f7.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/fonts/iconfont.687560f7.woff -------------------------------------------------------------------------------- /service/public/static/img/Switch.a0e8f86f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/Switch.a0e8f86f.jpg -------------------------------------------------------------------------------- /service/public/static/img/avatar.e033ea29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/avatar.e033ea29.png -------------------------------------------------------------------------------- /service/public/static/img/banner.95ab5f16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/banner.95ab5f16.png -------------------------------------------------------------------------------- /service/public/static/img/banner.f77c57eb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/banner.f77c57eb.png -------------------------------------------------------------------------------- /service/public/static/img/button.b3883c1e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/button.b3883c1e.png -------------------------------------------------------------------------------- /service/public/static/img/carousel.a5b2553e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/carousel.a5b2553e.png -------------------------------------------------------------------------------- /service/public/static/img/checkbox.bd4b7763.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/checkbox.bd4b7763.jpg -------------------------------------------------------------------------------- /service/public/static/img/circle-border.5fe597d1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/circle-border.5fe597d1.png -------------------------------------------------------------------------------- /service/public/static/img/form.d3b05bae.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/form.d3b05bae.png -------------------------------------------------------------------------------- /service/public/static/img/funnel.c69030ce.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/funnel.c69030ce.jpg -------------------------------------------------------------------------------- /service/public/static/img/headerImage.baefd97f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/headerImage.baefd97f.png -------------------------------------------------------------------------------- /service/public/static/img/iframe.6d67bf34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/iframe.6d67bf34.png -------------------------------------------------------------------------------- /service/public/static/img/image.e19d7f4a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/image.e19d7f4a.png -------------------------------------------------------------------------------- /service/public/static/img/lineCharts.ae72a114.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/lineCharts.ae72a114.jpg -------------------------------------------------------------------------------- /service/public/static/img/login_bg.b2d321f6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/login_bg.b2d321f6.png -------------------------------------------------------------------------------- /service/public/static/img/login_bg2.53ecd4df.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/login_bg2.53ecd4df.png -------------------------------------------------------------------------------- /service/public/static/img/logo.30525635.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/logo.30525635.png -------------------------------------------------------------------------------- /service/public/static/img/map.cdd0a85e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/map.cdd0a85e.png -------------------------------------------------------------------------------- /service/public/static/img/music.4a52a7c8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/music.4a52a7c8.png -------------------------------------------------------------------------------- /service/public/static/img/nodata.6b16cccd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/nodata.6b16cccd.jpg -------------------------------------------------------------------------------- /service/public/static/img/notice.1a7c4d2d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/notice.1a7c4d2d.png -------------------------------------------------------------------------------- /service/public/static/img/pagecover-image.677bc94e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/pagecover-image.677bc94e.png -------------------------------------------------------------------------------- /service/public/static/img/pieCharts.1c159a3c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/pieCharts.1c159a3c.jpg -------------------------------------------------------------------------------- /service/public/static/img/qcode.5d8d13b4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/qcode.5d8d13b4.png -------------------------------------------------------------------------------- /service/public/static/img/radio.8232ca9c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/radio.8232ca9c.jpg -------------------------------------------------------------------------------- /service/public/static/img/rate.45d4b8f2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/rate.45d4b8f2.jpg -------------------------------------------------------------------------------- /service/public/static/img/stepper.4d9b0ce6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/stepper.4d9b0ce6.jpg -------------------------------------------------------------------------------- /service/public/static/img/tabars.ca6734c0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/tabars.ca6734c0.png -------------------------------------------------------------------------------- /service/public/static/img/text.857c2679.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/text.857c2679.png -------------------------------------------------------------------------------- /service/public/static/img/use-beb469.beb469b6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/use-beb469.beb469b6.png -------------------------------------------------------------------------------- /service/public/static/img/video.9e4bd305.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/video.9e4bd305.png -------------------------------------------------------------------------------- /service/public/static/img/wordcloud.7d29abbe.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/static/img/wordcloud.7d29abbe.jpg -------------------------------------------------------------------------------- /service/public/static/js/chunk-0069f99e.71c57878.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-0069f99e"],{"720d":function(t,e,s){"use strict";s.r(e);var i=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"page-home"},[s("div",{staticClass:"home-side-bar"},[s("el-menu",{attrs:{"default-active":"/page-list",router:""}},[s("el-menu-item",{attrs:{index:"/home/page-list"}},[s("i",{staticClass:"el-icon-mobile"}),s("span",{attrs:{slot:"title"},slot:"title"},[t._v("我的作品")])]),s("el-menu-item",{attrs:{index:"/home/my-template"}},[s("i",{staticClass:"el-icon-document"}),s("span",{attrs:{slot:"title"},slot:"title"},[t._v("我的模板")])]),s("el-menu-item",{attrs:{index:"/home/page-data"}},[s("i",{staticClass:"el-icon-menu"}),s("span",{attrs:{slot:"title"},slot:"title"},[t._v("我的数据")])]),s("el-menu-item",{attrs:{index:"/home/template-list"}},[s("i",{staticClass:"el-icon-s-shop"}),s("span",{attrs:{slot:"title"},slot:"title"},[t._v("创意模板")])])],1)],1),s("div",{staticClass:"clearfix my-page-list"},[s("router-view",{staticClass:"sub-page"})],1)])},a=[],l={},n=l,o=(s("8053"),s("4ac2")),c=Object(o["a"])(n,i,a,!1,null,"659890ee",null);e["default"]=c.exports},"7d47":function(t,e,s){},8053:function(t,e,s){"use strict";s("7d47")}}]); 2 | //# sourceMappingURL=chunk-0069f99e.71c57878.js.map -------------------------------------------------------------------------------- /service/public/static/js/chunk-0069f99e.e3bb6e53.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-0069f99e"],{"720d":function(t,e,s){"use strict";s.r(e);var i=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"page-home"},[s("div",{staticClass:"home-side-bar"},[s("el-menu",{attrs:{"default-active":"/page-list",router:""}},[s("el-menu-item",{attrs:{index:"/home/page-list"}},[s("i",{staticClass:"el-icon-mobile"}),s("span",{attrs:{slot:"title"},slot:"title"},[t._v("我的作品")])]),s("el-menu-item",{attrs:{index:"/home/my-template"}},[s("i",{staticClass:"el-icon-document"}),s("span",{attrs:{slot:"title"},slot:"title"},[t._v("我的模板")])]),s("el-menu-item",{attrs:{index:"/home/page-data"}},[s("i",{staticClass:"el-icon-menu"}),s("span",{attrs:{slot:"title"},slot:"title"},[t._v("我的数据")])]),s("el-menu-item",{attrs:{index:"/home/template-list"}},[s("i",{staticClass:"el-icon-s-shop"}),s("span",{attrs:{slot:"title"},slot:"title"},[t._v("创意模板")])])],1)],1),s("div",{staticClass:"clearfix my-page-list"},[s("router-view",{staticClass:"sub-page"})],1)])},a=[],l={},n=l,o=(s("8053"),s("4ac2")),c=Object(o["a"])(n,i,a,!1,null,"659890ee",null);e["default"]=c.exports},"7d47":function(t,e,s){},8053:function(t,e,s){"use strict";s("7d47")}}]); 2 | //# sourceMappingURL=chunk-0069f99e.e3bb6e53.js.map -------------------------------------------------------------------------------- /service/public/static/js/chunk-39d883ed.4e3c9d4d.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-39d883ed"],{"566d":function(e,a,t){"use strict";t.r(a);var s=function(){var e=this,a=e.$createElement,t=e._self._c||a;return t("div",{staticClass:"clearfix my-page-list"},[t("div",{staticClass:"page-search-wrapper bg-white"},[t("el-tabs",{on:{"tab-click":e.handlePageModeClick},model:{value:e.searchParams.pageMode,callback:function(a){e.$set(e.searchParams,"pageMode",a)},expression:"searchParams.pageMode"}},e._l(e.pageModeList,(function(a,s){return t("el-tab-pane",{key:s,attrs:{name:a.value,disabled:a.disabled}},[t("div",{attrs:{slot:"label"},slot:"label"},[t("span",{staticClass:"nav-tabs-label"},[e._v(e._s(a.label))])])])})),1)],1),t("div",{staticClass:"scroll-wrapper page-list-wrapper"},[e.pageList.length?t("el-scrollbar",{staticStyle:{height:"100%"}},[t("div",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticClass:"page-content"},[t("div",{staticClass:"page-item-wrapper"},e._l(e.pageList,(function(a,s){return t("div",{key:s,staticClass:"page-item"},[t("thumbnailPanel",{attrs:{pageData:a,btnList:["useTemplate"],showMoreBtn:!1,showPublishState:!1},on:{refresh:e.getPageList,showPreview:e.showPreviewFn}})],1)})),0)])]):t("notFundData")],1),e.showPreview?t("previewPage",{attrs:{pageId:e.previewId},on:{closePreview:function(a){e.showPreview=!1}}}):e._e()],1)},i=[],n=(t("a450"),t("c5c7")),r=t("2f88"),o=t("bf8b"),l={components:{notFundData:n["a"],thumbnailPanel:r["a"],previewPage:o["a"]},data:function(){return{loading:!1,pageList:[],pageModeList:[],searchParams:{pageMode:"h5"},previewId:"",showPreview:!1}},created:function(){this.pageModeList=this.$config.pageModeList,this.getPageList()},methods:{handlePageModeClick:function(e){this.searchParams.pageMode=e.name,this.getPageList()},getPageList:function(){var e=this;this.$API.getPublishTemplates(this.searchParams).then((function(a){e.pageList=a.body||[]}))},showPreviewFn:function(e){this.previewId=e,this.showPreview=!0}}},c=l,d=(t("c8ea"),t("8bc8"),t("4ac2")),p=Object(d["a"])(c,s,i,!1,null,"26f12d29",null);a["default"]=p.exports},"8bc8":function(e,a,t){"use strict";t("d85e")},"9ddc":function(e,a,t){},c8ea:function(e,a,t){"use strict";t("9ddc")},d85e:function(e,a,t){}}]); 2 | //# sourceMappingURL=chunk-39d883ed.4e3c9d4d.js.map -------------------------------------------------------------------------------- /service/public/static/js/chunk-39d883ed.8cccd16a.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-39d883ed"],{"566d":function(e,a,t){"use strict";t.r(a);var s=function(){var e=this,a=e.$createElement,t=e._self._c||a;return t("div",{staticClass:"clearfix my-page-list"},[t("div",{staticClass:"page-search-wrapper bg-white"},[t("el-tabs",{on:{"tab-click":e.handlePageModeClick},model:{value:e.searchParams.pageMode,callback:function(a){e.$set(e.searchParams,"pageMode",a)},expression:"searchParams.pageMode"}},e._l(e.pageModeList,(function(a,s){return t("el-tab-pane",{key:s,attrs:{name:a.value,disabled:a.disabled}},[t("div",{attrs:{slot:"label"},slot:"label"},[t("span",{staticClass:"nav-tabs-label"},[e._v(e._s(a.label))])])])})),1)],1),t("div",{staticClass:"scroll-wrapper page-list-wrapper"},[e.pageList.length?t("el-scrollbar",{staticStyle:{height:"100%"}},[t("div",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticClass:"page-content"},[t("div",{staticClass:"page-item-wrapper"},e._l(e.pageList,(function(a,s){return t("div",{key:s,staticClass:"page-item"},[t("thumbnailPanel",{attrs:{pageData:a,btnList:["useTemplate"],showMoreBtn:!1,showPublishState:!1},on:{refresh:e.getPageList,showPreview:e.showPreviewFn}})],1)})),0)])]):t("notFundData")],1),e.showPreview?t("previewPage",{attrs:{pageId:e.previewId},on:{closePreview:function(a){e.showPreview=!1}}}):e._e()],1)},i=[],n=(t("a450"),t("c5c7")),r=t("2f88"),o=t("bf8b"),l={components:{notFundData:n["a"],thumbnailPanel:r["a"],previewPage:o["a"]},data:function(){return{loading:!1,pageList:[],pageModeList:[],searchParams:{pageMode:"h5"},previewId:"",showPreview:!1}},created:function(){this.pageModeList=this.$config.pageModeList,this.getPageList()},methods:{handlePageModeClick:function(e){this.searchParams.pageMode=e.name,this.getPageList()},getPageList:function(){var e=this;this.$API.getPublishTemplates(this.searchParams).then((function(a){e.pageList=a.body||[]}))},showPreviewFn:function(e){this.previewId=e,this.showPreview=!0}}},c=l,d=(t("c8ea"),t("8bc8"),t("4ac2")),p=Object(d["a"])(c,s,i,!1,null,"26f12d29",null);a["default"]=p.exports},"8bc8":function(e,a,t){"use strict";t("d85e")},"9ddc":function(e,a,t){},c8ea:function(e,a,t){"use strict";t("9ddc")},d85e:function(e,a,t){}}]); 2 | //# sourceMappingURL=chunk-39d883ed.8cccd16a.js.map -------------------------------------------------------------------------------- /service/public/static/js/chunk-45ad6033.b4347f8b.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-45ad6033"],{"46a8":function(t,a,e){"use strict";e("8794")},"4c72":function(t,a,e){},5114:function(t,a,e){"use strict";e.r(a);var n=function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("div",{staticClass:"page-data-list"},[e("div"),e("notFundData")],1)},c=[],s=e("c5c7"),i={components:{notFundData:s["a"]}},u=i,l=(e("46a8"),e("4ac2")),o=Object(l["a"])(u,n,c,!1,null,"6c309750",null);a["default"]=o.exports},8508:function(t,a,e){t.exports=e.p+"static/img/nodata.6b16cccd.jpg"},8794:function(t,a,e){},c5c7:function(t,a,e){"use strict";var n=function(){var t=this,a=t.$createElement,n=t._self._c||a;return n("div",{staticClass:"components-default-style"},[n("div",[n("img",{staticClass:"default-style-img",style:{width:t.width,height:t.height},attrs:{src:e("8508"),alt:""}}),n("p",{staticClass:"tips"},[t._v("暂无数据")])])])},c=[],s={name:"notFundData",props:{width:{type:String,default:"80%"},height:{type:String,default:"80%"}}},i=s,u=(e("e17e"),e("4ac2")),l=Object(u["a"])(i,n,c,!1,null,"402cadde",null);a["a"]=l.exports},e17e:function(t,a,e){"use strict";e("4c72")}}]); 2 | //# sourceMappingURL=chunk-45ad6033.b4347f8b.js.map -------------------------------------------------------------------------------- /service/public/static/js/chunk-45ad6033.bf74defa.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-45ad6033"],{"46a8":function(t,a,e){"use strict";e("8794")},"4c72":function(t,a,e){},5114:function(t,a,e){"use strict";e.r(a);var n=function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("div",{staticClass:"page-data-list"},[e("div"),e("notFundData")],1)},c=[],s=e("c5c7"),i={components:{notFundData:s["a"]}},u=i,l=(e("46a8"),e("4ac2")),o=Object(l["a"])(u,n,c,!1,null,"6c309750",null);a["default"]=o.exports},8508:function(t,a,e){t.exports=e.p+"static/img/nodata.6b16cccd.jpg"},8794:function(t,a,e){},c5c7:function(t,a,e){"use strict";var n=function(){var t=this,a=t.$createElement,n=t._self._c||a;return n("div",{staticClass:"components-default-style"},[n("div",[n("img",{staticClass:"default-style-img",style:{width:t.width,height:t.height},attrs:{src:e("8508"),alt:""}}),n("p",{staticClass:"tips"},[t._v("暂无数据")])])])},c=[],s={name:"notFundData",props:{width:{type:String,default:"80%"},height:{type:String,default:"80%"}}},i=s,u=(e("e17e"),e("4ac2")),l=Object(u["a"])(i,n,c,!1,null,"402cadde",null);a["a"]=l.exports},e17e:function(t,a,e){"use strict";e("4c72")}}]); 2 | //# sourceMappingURL=chunk-45ad6033.bf74defa.js.map -------------------------------------------------------------------------------- /service/public/static/js/chunk-90f63cb6.1c456727.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-90f63cb6"],{"0bdd":function(t,e,c){},"4c72":function(t,e,c){},"504b":function(t,e,c){"use strict";c.r(e);var n=function(){var t=this,e=t.$createElement,c=t._self._c||e;return c("div",{staticClass:"page-data-detail"},[c("div"),c("notFundData")],1)},a=[],s=c("c5c7"),i={components:{notFundData:s["a"]}},d=i,u=(c("d7bd"),c("4ac2")),l=Object(u["a"])(d,n,a,!1,null,"0d27c64c",null);e["default"]=l.exports},8508:function(t,e,c){t.exports=c.p+"static/img/nodata.6b16cccd.jpg"},c5c7:function(t,e,c){"use strict";var n=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"components-default-style"},[n("div",[n("img",{staticClass:"default-style-img",style:{width:t.width,height:t.height},attrs:{src:c("8508"),alt:""}}),n("p",{staticClass:"tips"},[t._v("暂无数据")])])])},a=[],s={name:"notFundData",props:{width:{type:String,default:"80%"},height:{type:String,default:"80%"}}},i=s,d=(c("e17e"),c("4ac2")),u=Object(d["a"])(i,n,a,!1,null,"402cadde",null);e["a"]=u.exports},d7bd:function(t,e,c){"use strict";c("0bdd")},e17e:function(t,e,c){"use strict";c("4c72")}}]); 2 | //# sourceMappingURL=chunk-90f63cb6.1c456727.js.map -------------------------------------------------------------------------------- /service/public/static/js/chunk-90f63cb6.a8d41848.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-90f63cb6"],{"0bdd":function(t,e,c){},"4c72":function(t,e,c){},"504b":function(t,e,c){"use strict";c.r(e);var n=function(){var t=this,e=t.$createElement,c=t._self._c||e;return c("div",{staticClass:"page-data-detail"},[c("div"),c("notFundData")],1)},a=[],s=c("c5c7"),i={components:{notFundData:s["a"]}},d=i,u=(c("d7bd"),c("4ac2")),l=Object(u["a"])(d,n,a,!1,null,"0d27c64c",null);e["default"]=l.exports},8508:function(t,e,c){t.exports=c.p+"static/img/nodata.6b16cccd.jpg"},c5c7:function(t,e,c){"use strict";var n=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"components-default-style"},[n("div",[n("img",{staticClass:"default-style-img",style:{width:t.width,height:t.height},attrs:{src:c("8508"),alt:""}}),n("p",{staticClass:"tips"},[t._v("暂无数据")])])])},a=[],s={name:"notFundData",props:{width:{type:String,default:"80%"},height:{type:String,default:"80%"}}},i=s,d=(c("e17e"),c("4ac2")),u=Object(d["a"])(i,n,a,!1,null,"402cadde",null);e["a"]=u.exports},d7bd:function(t,e,c){"use strict";c("0bdd")},e17e:function(t,e,c){"use strict";c("4c72")}}]); 2 | //# sourceMappingURL=chunk-90f63cb6.a8d41848.js.map -------------------------------------------------------------------------------- /service/public/third-libs/flexible.js: -------------------------------------------------------------------------------- 1 | !function(a,b){function c(){var b=f.getBoundingClientRect().width;b/i>540&&(b=540*i);var c=b/10;f.style.fontSize=c+'px',k.rem=a.rem=c;}var d,e=a.document,f=e.documentElement,g=e.querySelector('meta[name="viewport"]'),h=e.querySelector('meta[name="flexible"]'),i=0,j=0,k=b.flexible||(b.flexible={});if(g){console.warn('将根据已有的meta标签来设置缩放比?');var l=g.getAttribute('content').match(/initial\-scale=([\d\.]+)/);l&&(j=parseFloat(l[1]),i=parseInt(1/j));}else if(h){var m=h.getAttribute('content');if(m){var n=m.match(/initial\-dpr=([\d\.]+)/),o=m.match(/maximum\-dpr=([\d\.]+)/);n&&(i=parseFloat(n[1]),j=parseFloat((1/i).toFixed(2))),o&&(i=parseFloat(o[1]),j=parseFloat((1/i).toFixed(2)));}}if(!i&&!j){var p=(a.navigator.appVersion.match(/android/gi),a.navigator.appVersion.match(/iphone/gi)),q=a.devicePixelRatio;i=p?q>=3&&(!i||i>=3)?3:q>=2&&(!i||i>=2)?2:1:1,j=1/i;}if(f.setAttribute('data-dpr',i),!g)if(g=e.createElement('meta'),g.setAttribute('name','viewport'),g.setAttribute('content','initial-scale='+j+', maximum-scale='+j+', minimum-scale='+j+', user-scalable=no'),f.firstElementChild)f.firstElementChild.appendChild(g);else{var r=e.createElement('div');r.appendChild(g),e.write(r.innerHTML);}a.addEventListener('resize',function(){clearTimeout(d),d=setTimeout(c,300);},!1),a.addEventListener('pageshow',function(a){a.persisted&&(clearTimeout(d),d=setTimeout(c,300));},!1),'complete'===e.readyState?e.body.style.fontSize=12*i+'px':e.addEventListener('DOMContentLoaded',function(){e.body.style.fontSize=12*i+'px';},!1),c(),k.dpr=a.dpr=i,k.refreshRem=c,k.rem2px=function(a){var b=parseFloat(a)*this.rem;return'string'==typeof a&&a.match(/rem$/)&&(b+='px'),b;},k.px2rem=function(a){var b=parseFloat(a)/this.rem;return'string'==typeof a&&a.match(/px$/)&&(b+='rem'),b;};}(window,window.lib||(window.lib={})); -------------------------------------------------------------------------------- /service/public/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Oct1a/Dcode-Editor/f40710766b97cd2abdd96e638c56cf36f4b7629f/service/public/user.png -------------------------------------------------------------------------------- /service/views/h5-long.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 31 | 34 | 35 | 36 | 37 | 38 | 39 | 44 | 45 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /vue.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | const fs = require('fs') 3 | 4 | function resolve(dir) { 5 | return path.join(__dirname, dir) 6 | } 7 | 8 | let devServer = { 9 | proxy: { // 代理 10 | '/': { 11 | target: 'http://localhost:3333', //设置你调用的接口域名和端口号 别忘了加http 12 | ws: false, //如果要代理 websockets 13 | changeOrigin: true, //将主机标头的原点更改为目标URL 14 | pathRewrite: {}, 15 | } 16 | } 17 | } 18 | 19 | module.exports = { 20 | devServer: devServer, 21 | // 输出文件目录 22 | assetsDir: "static", 23 | outputDir: './service/public', 24 | // publicPath: "./service/public", 25 | publicPath: "./", 26 | // 修改 pages 入口 27 | pages: { 28 | index: { 29 | entry: 'client/main.js', // 入口 30 | template: 'public/engine-h5-long.html', // 模板 31 | filename: 'index.html', // 输出文件 32 | } 33 | }, 34 | css: { 35 | loaderOptions: { 36 | sass: { 37 | // @/ 是 src/ 的别名,设置全局css变量 38 | data: fs.readFileSync(path.resolve(__dirname, `./client/common/styles/variables.scss`), 'utf-8') // 公共变量文件注入 39 | } 40 | } 41 | }, 42 | // 扩展 webpack 配置 43 | chainWebpack: config => { 44 | // @ 默认指向 src 目录,这里要改成 examples 45 | // 另外也可以新增一个 ~ 指向 packages 46 | config.resolve.alias 47 | .set('@', path.resolve('client')) 48 | .set('@client', path.resolve('client')) 49 | .set('@plugins', path.resolve('plugins')) 50 | .set('@service', path.resolve('service')) 51 | config.module 52 | .rule('js') 53 | .include.add(/engine-template/).end() 54 | .include.add(/client/).end() 55 | .include.add(/common/).end() 56 | .use('babel') 57 | .loader('babel-loader') 58 | 59 | .tap(options => { 60 | // 修改它的选项... 61 | return options 62 | }) 63 | // 移除 prefetch 插件,当页面太多时,会导致太多无意义的请求 64 | config.plugins.delete('prefetch') 65 | 66 | } 67 | } --------------------------------------------------------------------------------
暂无数据
请在画板上选择需要编辑得元素
脚本编辑
js脚本在编辑模式下无效果
历史记录 16 | x 17 |
模板库
待完善...