├── .babelrc ├── .editorconfig ├── .gitignore ├── .postcssrc.js ├── .slugignore ├── .travis.yml ├── README.md ├── build ├── build.js ├── check-versions.js ├── dev-client.js ├── dev-server.js ├── utils.js ├── vue-loader.conf.js ├── webpack.base.conf.js ├── webpack.dev.conf.js ├── webpack.prod.conf.js └── webpack.publish.conf.js ├── config ├── db.js ├── dev.env.js ├── index.js └── prod.env.js ├── docs ├── 功能.xmind └── 结构.xmind ├── env.sample ├── index.html ├── index.js ├── migrations └── 201706161508_add_avatar_field_to_users.js ├── package.json ├── public └── 3 │ ├── index.html │ ├── preview.2ffd299d.js │ ├── preview.2ffd299d.js.map │ ├── preview.5c6ac4be.js │ ├── preview.5c6ac4be.js.map │ ├── preview.627d0d64.js │ ├── preview.627d0d64.js.map │ ├── preview.f6480c81.js │ ├── preview.f6480c81.js.map │ ├── vendor.0ae739aa.js │ ├── vendor.0ae739aa.js.map │ ├── vendor.664ca3cb.js │ ├── vendor.664ca3cb.js.map │ ├── vendor.88e1cfca.js │ ├── vendor.88e1cfca.js.map │ ├── vendor.d777f03f.js │ └── vendor.d777f03f.js.map ├── screen.png ├── server ├── constants.js ├── controllers │ ├── changelogs.js │ ├── count.js │ ├── files.js │ ├── page.js │ ├── pages.js │ ├── publish.js │ └── users.js ├── index.js ├── lib │ ├── api.js │ ├── errorlog.js │ ├── passport.js │ └── publish │ │ ├── index.js │ │ ├── opads.js │ │ └── qiniu.js ├── models │ ├── changelog.js │ ├── index.js │ ├── pages.js │ └── users.js └── views │ └── activity.ejs ├── src ├── App.vue ├── api │ └── index.js ├── app.js ├── assets │ └── img │ │ ├── phone-head.png │ │ └── piper_logo.svg ├── components │ ├── ProgressBar.vue │ ├── countdown.vue │ ├── ctrl-bar.vue │ ├── drag-drop.vue │ ├── drag-move.vue │ ├── header.vue │ ├── index.js │ ├── loading.vue │ ├── module-container.vue │ ├── preview.vue │ ├── property.vue │ ├── qrcode.vue │ ├── render.vue │ └── swiper │ │ ├── index.vue │ │ ├── swiper-item.vue │ │ └── swiper.js ├── constants │ ├── default.js │ ├── lang.js │ ├── props.js │ └── rules.js ├── filters │ └── index.js ├── modules │ ├── btn.vue │ ├── countdown.vue │ ├── index.js │ ├── poster.vue │ ├── relative.vue │ ├── swipe.vue │ └── txt.vue ├── preview.js ├── property │ ├── common.js │ ├── group.vue │ ├── html-style.vue │ ├── index.js │ ├── input-checkbox.vue │ ├── input-color.vue │ ├── input-date.vue │ ├── input-font.vue │ ├── input-image.vue │ ├── input-number.vue │ ├── input-radio.vue │ ├── input-text.vue │ ├── input-textarea.vue │ ├── input-wheel.vue │ └── input.js ├── router │ └── index.js ├── skin │ ├── _base.less │ ├── _variable.less │ └── dpi.less ├── store │ ├── actions.js │ ├── getters.js │ ├── index.js │ ├── modules │ │ ├── base.js │ │ └── render.js │ └── mutation-types.js ├── utils │ └── index.js └── views │ ├── Changelog.vue │ ├── Designer.vue │ ├── Home.vue │ ├── Layout.vue │ ├── Login.vue │ ├── PageList.vue │ ├── Preview.vue │ └── Users.vue ├── static └── .gitKeep └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "targets": { 5 | "node": true, 6 | "uglify": true 7 | } 8 | }], 9 | "stage-2" 10 | ], 11 | "plugins": ["transform-runtime", "transform-decorators-legacy"], 12 | "comments": false, 13 | "env": { 14 | "test": { 15 | "presets": ["env", "stage-2"], 16 | "plugins": [ "istanbul" ] 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.log 3 | .DS_Store 4 | /dist 5 | .idea 6 | public/* 7 | .vscode 8 | now.json 9 | .env 10 | .env.now 11 | -------------------------------------------------------------------------------- /.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | // to edit target browsers: use "browserlist" field in package.json 6 | "autoprefixer": {} 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /.slugignore: -------------------------------------------------------------------------------- 1 | yarn.lock 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: enabled 2 | dist: trusty 3 | language: node_js 4 | node_js: 5 | - stable 6 | - "8" 7 | - "7" 8 | before_install: 9 | - export PATH=/usr/local/phantomjs-2.0.0/bin:$PATH 10 | - export DISPLAY=:99.0 11 | - sh -e /etc/init.d/xvfb start 12 | - npm i -g npm@^5.3.0 13 | - npm config set spin false 14 | install: 15 | - npm install 16 | cache: 17 | directories: 18 | - node_modules 19 | after_script: 20 | - npm run build 21 | - npm run start 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Piper [](https://travis-ci.org/fireyy/piper) 2 | 3 |
4 |
5 |
6 |
7 | Live Demo
8 |
9 |