├── .meteor ├── .gitignore ├── release ├── platforms ├── .id ├── .finished-upgraders └── packages ├── maodou ├── posts │ ├── .gitignore │ ├── README.md │ ├── lib │ │ ├── configs │ │ │ ├── i18n │ │ │ │ ├── zh-cn.js │ │ │ │ ├── en-us.js │ │ │ │ └── index.js │ │ │ └── index.js │ │ └── collections │ │ │ ├── index.js │ │ │ └── posts.js │ ├── client │ │ ├── actions │ │ │ └── index.js │ │ ├── components │ │ │ ├── admin │ │ │ │ ├── index.js │ │ │ │ └── postsAdd.js │ │ │ ├── tabs.js │ │ │ └── post.js │ │ ├── containers │ │ │ ├── admin │ │ │ │ ├── index.js │ │ │ │ ├── postsList.js │ │ │ │ └── postsConfigure.js │ │ │ ├── post.js │ │ │ ├── tabs.js │ │ │ └── posts.js │ │ ├── routes.js │ │ ├── index.js │ │ ├── reducers │ │ │ └── index.js │ │ ├── admin-routes.js │ │ └── main.scss │ └── server │ │ ├── permissions │ │ └── index.js │ │ ├── publications │ │ └── index.js │ │ ├── index.js │ │ └── methods │ │ └── index.js ├── events │ ├── .gitignore │ ├── README.md │ ├── lib │ │ ├── configs │ │ │ ├── i18n │ │ │ │ ├── zh-cn.js │ │ │ │ ├── en-us.js │ │ │ │ └── index.js │ │ │ └── index.js │ │ └── collections │ │ │ ├── index.js │ │ │ └── events.js │ ├── client │ │ ├── actions │ │ │ └── index.js │ │ ├── components │ │ │ ├── admin │ │ │ │ └── index.js │ │ │ └── event.js │ │ ├── reducers │ │ │ └── index.js │ │ ├── main.scss │ │ ├── containers │ │ │ ├── admin │ │ │ │ ├── index.js │ │ │ │ └── eventsList.js │ │ │ ├── event.js │ │ │ └── events.js │ │ ├── routes.js │ │ ├── index.js │ │ └── admin-routes.js │ └── server │ │ ├── permissions │ │ └── index.js │ │ ├── publications │ │ └── index.js │ │ ├── methods │ │ └── index.js │ │ ├── index.js │ │ └── seed.js ├── wechat │ ├── .gitignore │ ├── README.md │ ├── configs │ │ ├── i18n │ │ │ ├── en-us.js │ │ │ ├── zh-cn.js │ │ │ └── index.js │ │ └── index.js │ ├── actions │ │ ├── index.js │ │ └── wechat.js │ ├── client │ │ ├── routes.js │ │ ├── admin-routes.js │ │ ├── index.js │ │ ├── components │ │ │ ├── sign-in-button.js │ │ │ └── admin │ │ │ │ └── index.js │ │ └── containers │ │ │ └── admin │ │ │ └── index.js │ └── server │ │ ├── publications │ │ └── index.js │ │ ├── middleware.js │ │ └── index.js ├── singlePages │ ├── .gitignore │ ├── README.md │ ├── client │ │ ├── actions │ │ │ └── index.js │ │ ├── components │ │ │ └── admin │ │ │ │ ├── index.js │ │ │ │ └── singlePagesConf │ │ │ │ ├── config │ │ │ │ ├── iframe.js │ │ │ │ ├── content.js │ │ │ │ └── index.js │ │ │ │ ├── preview.js │ │ │ │ └── index.js │ │ ├── routes.js │ │ ├── containers │ │ │ ├── admin │ │ │ │ ├── index.js │ │ │ │ ├── singlePagesConf │ │ │ │ │ ├── config │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── index.js │ │ │ │ │ └── preview.js │ │ │ │ └── singlePagesList.js │ │ │ └── mainPage.js │ │ ├── index.js │ │ ├── reducers │ │ │ └── index.js │ │ └── admin-routes.js │ ├── lib │ │ ├── collections │ │ │ ├── index.js │ │ │ └── singlePages.js │ │ └── configs │ │ │ └── index.js │ ├── server │ │ ├── publications │ │ │ └── index.js │ │ └── index.js │ ├── templates │ │ └── index.js │ └── js │ │ └── navbar.js ├── customers │ ├── server │ │ ├── config │ │ │ └── index.js │ │ ├── permissions │ │ │ └── index.js │ │ ├── publications │ │ │ └── index.js │ │ ├── methods │ │ │ └── index.js │ │ └── index.js │ ├── client │ │ ├── reducers │ │ │ └── index.js │ │ ├── actions │ │ │ └── index.js │ │ ├── components │ │ │ ├── admin │ │ │ │ └── index.js │ │ │ └── customer.js │ │ ├── containers │ │ │ ├── admin │ │ │ │ ├── index.js │ │ │ │ ├── customersAdd.js │ │ │ │ ├── customersList.js │ │ │ │ └── customersEdit.js │ │ │ ├── customers.js │ │ │ └── customer.js │ │ ├── index.js │ │ ├── routes.js │ │ └── admin-routes.js │ └── lib │ │ ├── collections │ │ └── index.js │ │ └── configs │ │ └── index.js └── bizplans │ ├── client │ ├── actions │ │ ├── index.js │ │ └── bizplans.js │ ├── components │ │ ├── admin │ │ │ ├── index.js │ │ │ └── bizplan │ │ │ │ ├── style.scss │ │ │ │ └── index.js │ │ ├── bizplansAdd │ │ │ ├── uploadButton.js │ │ │ ├── failedMsg.js │ │ │ └── successMsg.js │ │ └── singleBizplan │ │ │ ├── style.scss │ │ │ └── index.js │ ├── containers │ │ ├── admin │ │ │ ├── index.js │ │ │ ├── bizplan.js │ │ │ └── bizplansList.js │ │ ├── singleBizplan.js │ │ ├── bizplansList.js │ │ └── bizplansAdd │ │ │ ├── uploadButton.js │ │ │ └── index.js │ ├── index.js │ ├── routes.js │ ├── admin-routes.js │ └── reducers │ │ └── index.js │ ├── lib │ ├── collections │ │ ├── index.js │ │ └── bizplans.js │ └── config │ │ └── index.js │ └── server │ ├── publications │ └── index.js │ ├── methods │ └── index.js │ └── index.js ├── server ├── configs │ ├── events.js │ ├── posts.js │ ├── wechat.js │ └── core.js ├── permissions │ └── index.js ├── methods │ ├── index.js │ ├── files.js │ └── core.js ├── context.js ├── publications │ └── index.js ├── lib │ └── middlewares │ │ └── middleware.js ├── main.js └── index.js ├── lib ├── configs │ ├── i18n │ │ ├── en-us.js │ │ ├── zh-cn.js │ │ └── index.js │ └── index.js ├── collections │ ├── packages.js │ ├── index.js │ └── users.js ├── middlewares │ ├── collections.js │ └── configs.js └── helpers │ └── index.js ├── client ├── lib │ ├── imports │ │ ├── theme-homer │ │ │ ├── _tour.scss │ │ │ ├── _text_editor.scss │ │ │ ├── _tooltip.scss │ │ │ ├── _fonts.scss │ │ │ ├── _projects.scss │ │ │ ├── _social_board.scss │ │ │ ├── _grid.scss │ │ │ ├── _contact.scss │ │ │ ├── _login.scss │ │ │ ├── _loader.scss │ │ │ ├── _lists.scss │ │ │ ├── _nestable_list.scss │ │ │ ├── _progress_bar.scss │ │ │ ├── _modal.scss │ │ │ ├── style.scss │ │ │ ├── _dropdown.scss │ │ │ ├── _icheck.scss │ │ │ ├── _mailbox.scss │ │ │ ├── _forum.scss │ │ │ ├── _alerts.scss │ │ │ └── _calendar.scss │ │ └── toastr │ │ │ └── toastr.scss │ ├── plupload │ │ └── js │ │ │ └── Moxie.xap │ ├── middlewares │ │ ├── layouts.js │ │ └── i18n.js │ └── compose-with-redux.js ├── actions │ ├── index.js │ └── core.js ├── components │ ├── layout │ │ ├── footer.js │ │ └── index.js │ ├── admin │ │ ├── layout │ │ │ ├── index.js │ │ │ ├── aside.js │ │ │ └── nav.js │ │ └── index.js │ ├── common │ │ ├── errorPage.js │ │ ├── welcome.js │ │ └── loading.js │ ├── users │ │ ├── login.js │ │ ├── reset-password.js │ │ ├── email-enrollment-form.js │ │ ├── login-form.js │ │ └── register.js │ └── home │ │ └── index.js ├── main.html ├── reducers │ └── index.js ├── index.js ├── containers │ ├── layout │ │ ├── index.js │ │ └── nav.js │ ├── users │ │ ├── register.js │ │ ├── reset-password.js │ │ ├── login-form.js │ │ ├── email-enrollment-form.js │ │ └── login.js │ ├── admin │ │ ├── layout │ │ │ ├── index.js │ │ │ ├── aside.js │ │ │ └── nav.js │ │ └── index.js │ └── home │ │ └── index.js ├── main.scss ├── context.js └── main.js ├── .gitignore ├── public ├── Moxie.swf ├── images │ ├── logo.png │ ├── logo_short.png │ ├── logos │ │ ├── logo_1.png │ │ ├── logo_2.png │ │ ├── logo_3.png │ │ ├── logo_4.png │ │ ├── logo_5.png │ │ └── logo_6.png │ ├── tense │ │ ├── lbt1.jpg │ │ ├── lbt2.jpg │ │ ├── lbt3.jpg │ │ ├── logo1.png │ │ ├── logo2.png │ │ ├── logo3.png │ │ ├── logo4.png │ │ ├── logo5.png │ │ ├── logo6.png │ │ ├── say1.png │ │ ├── say2.png │ │ ├── say3.png │ │ ├── say4.png │ │ ├── say5.png │ │ ├── say6.png │ │ ├── bgWorks.jpg │ │ ├── member1.png │ │ ├── member2.png │ │ ├── member3.png │ │ ├── member4.png │ │ ├── welcome.jpg │ │ ├── 600X400new1.png │ │ ├── 600X400new2.png │ │ ├── 600X400new3.png │ │ ├── bgPricing.jpg │ │ ├── logo57x56.png │ │ ├── logo66x64.png │ │ ├── 600X400work1.png │ │ ├── 600X400work2.png │ │ ├── 600X400work3.png │ │ ├── 600X400work4.png │ │ ├── 600X400work5.png │ │ └── 600X400work6.png │ ├── aboutadd-iphone.png │ ├── aboutadd-full-macbook.png │ ├── aboutadd-half-macbook.png │ ├── aboutadd-iphone-half.png │ └── light-bulb.svg └── fonts │ ├── FontAwesome.otf │ ├── Pe-icon-7-stroke.eot │ ├── Pe-icon-7-stroke.ttf │ ├── Pe-icon-7-stroke.woff │ ├── fontawesome-webfont.eot │ ├── fontawesome-webfont.ttf │ ├── fontawesome-webfont.woff │ ├── fontawesome-webfont.woff2 │ └── bootstrap │ └── glyphicons-halflings-regular.woff2 ├── webpack.json ├── .editorconfig ├── scripts ├── build_runtime_npm.sh └── run_app.sh ├── Dockerfile ├── settings.json ├── .eslintrc.js ├── README.md └── LICENSE /.meteor/.gitignore: -------------------------------------------------------------------------------- 1 | local 2 | -------------------------------------------------------------------------------- /maodou/posts/.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | -------------------------------------------------------------------------------- /.meteor/release: -------------------------------------------------------------------------------- 1 | METEOR@1.4.1.1 2 | -------------------------------------------------------------------------------- /maodou/events/.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | -------------------------------------------------------------------------------- /maodou/events/README.md: -------------------------------------------------------------------------------- 1 | # maodou-events -------------------------------------------------------------------------------- /maodou/posts/README.md: -------------------------------------------------------------------------------- 1 | # maodou-posts -------------------------------------------------------------------------------- /maodou/wechat/.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | -------------------------------------------------------------------------------- /maodou/wechat/README.md: -------------------------------------------------------------------------------- 1 | # maodou-wechat -------------------------------------------------------------------------------- /.meteor/platforms: -------------------------------------------------------------------------------- 1 | server 2 | browser 3 | -------------------------------------------------------------------------------- /maodou/singlePages/.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | -------------------------------------------------------------------------------- /maodou/singlePages/README.md: -------------------------------------------------------------------------------- 1 | # maodou-singlepage 2 | -------------------------------------------------------------------------------- /server/configs/events.js: -------------------------------------------------------------------------------- 1 | export default { 2 | 3 | }; 4 | -------------------------------------------------------------------------------- /server/configs/posts.js: -------------------------------------------------------------------------------- 1 | export default { 2 | 3 | }; 4 | -------------------------------------------------------------------------------- /server/permissions/index.js: -------------------------------------------------------------------------------- 1 | export default () => { 2 | 3 | } 4 | -------------------------------------------------------------------------------- /lib/configs/i18n/en-us.js: -------------------------------------------------------------------------------- 1 | export default { 2 | login: 'Login' 3 | } 4 | -------------------------------------------------------------------------------- /lib/configs/i18n/zh-cn.js: -------------------------------------------------------------------------------- 1 | export default { 2 | login: '登录' 3 | } 4 | -------------------------------------------------------------------------------- /maodou/customers/server/config/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | 3 | }; 4 | -------------------------------------------------------------------------------- /maodou/customers/client/reducers/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | 3 | }; 4 | -------------------------------------------------------------------------------- /maodou/wechat/configs/i18n/en-us.js: -------------------------------------------------------------------------------- 1 | export default { 2 | hi: 'hi' 3 | } 4 | -------------------------------------------------------------------------------- /client/lib/imports/theme-homer/_tour.scss: -------------------------------------------------------------------------------- 1 | .tour-backdrop { 2 | opacity: 0.5; 3 | } -------------------------------------------------------------------------------- /maodou/wechat/configs/i18n/zh-cn.js: -------------------------------------------------------------------------------- 1 | export default { 2 | hi: 'ni hao' 3 | } 4 | -------------------------------------------------------------------------------- /maodou/events/lib/configs/i18n/zh-cn.js: -------------------------------------------------------------------------------- 1 | export default { 2 | comments: '评论' 3 | } 4 | -------------------------------------------------------------------------------- /maodou/posts/lib/configs/i18n/zh-cn.js: -------------------------------------------------------------------------------- 1 | export default { 2 | comments: '评论' 3 | } 4 | -------------------------------------------------------------------------------- /maodou/events/lib/configs/i18n/en-us.js: -------------------------------------------------------------------------------- 1 | export default { 2 | comments: 'comments' 3 | } 4 | -------------------------------------------------------------------------------- /maodou/posts/lib/configs/i18n/en-us.js: -------------------------------------------------------------------------------- 1 | export default { 2 | comments: 'comments' 3 | } 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .idea 3 | deploy/ 4 | npm-debug.log 5 | .DS_Store 6 | mup.json 7 | -------------------------------------------------------------------------------- /public/Moxie.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/Moxie.swf -------------------------------------------------------------------------------- /maodou/wechat/actions/index.js: -------------------------------------------------------------------------------- 1 | import wechat from './wechat'; 2 | 3 | export default { 4 | wechat 5 | }; 6 | -------------------------------------------------------------------------------- /public/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/logo.png -------------------------------------------------------------------------------- /maodou/events/client/actions/index.js: -------------------------------------------------------------------------------- 1 | import events from './events'; 2 | 3 | export default { 4 | events 5 | }; 6 | -------------------------------------------------------------------------------- /maodou/events/lib/collections/index.js: -------------------------------------------------------------------------------- 1 | import Events from './events'; 2 | 3 | export default{ 4 | Events 5 | }; 6 | -------------------------------------------------------------------------------- /maodou/posts/client/actions/index.js: -------------------------------------------------------------------------------- 1 | import posts from './posts'; 2 | 3 | export default { 4 | posts 5 | }; 6 | -------------------------------------------------------------------------------- /maodou/posts/lib/collections/index.js: -------------------------------------------------------------------------------- 1 | import Posts from './posts'; 2 | 3 | export default{ 4 | Posts 5 | }; 6 | -------------------------------------------------------------------------------- /maodou/wechat/client/routes.js: -------------------------------------------------------------------------------- 1 | export default function() { 2 | return { 3 | '/admin': ['wechat'] 4 | }; 5 | } 6 | -------------------------------------------------------------------------------- /lib/collections/packages.js: -------------------------------------------------------------------------------- 1 | import { Mongo } from 'meteor/mongo'; 2 | 3 | export default new Mongo.Collection('packages'); 4 | -------------------------------------------------------------------------------- /maodou/bizplans/client/actions/index.js: -------------------------------------------------------------------------------- 1 | import bizplans from './bizplans' 2 | 3 | export default { 4 | bizplans 5 | } 6 | -------------------------------------------------------------------------------- /maodou/bizplans/lib/collections/index.js: -------------------------------------------------------------------------------- 1 | import Bizplans from './bizplans' 2 | 3 | export default{ 4 | Bizplans 5 | } 6 | -------------------------------------------------------------------------------- /public/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /public/images/logo_short.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/logo_short.png -------------------------------------------------------------------------------- /public/images/logos/logo_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/logos/logo_1.png -------------------------------------------------------------------------------- /public/images/logos/logo_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/logos/logo_2.png -------------------------------------------------------------------------------- /public/images/logos/logo_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/logos/logo_3.png -------------------------------------------------------------------------------- /public/images/logos/logo_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/logos/logo_4.png -------------------------------------------------------------------------------- /public/images/logos/logo_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/logos/logo_5.png -------------------------------------------------------------------------------- /public/images/logos/logo_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/logos/logo_6.png -------------------------------------------------------------------------------- /public/images/tense/lbt1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/lbt1.jpg -------------------------------------------------------------------------------- /public/images/tense/lbt2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/lbt2.jpg -------------------------------------------------------------------------------- /public/images/tense/lbt3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/lbt3.jpg -------------------------------------------------------------------------------- /public/images/tense/logo1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/logo1.png -------------------------------------------------------------------------------- /public/images/tense/logo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/logo2.png -------------------------------------------------------------------------------- /public/images/tense/logo3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/logo3.png -------------------------------------------------------------------------------- /public/images/tense/logo4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/logo4.png -------------------------------------------------------------------------------- /public/images/tense/logo5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/logo5.png -------------------------------------------------------------------------------- /public/images/tense/logo6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/logo6.png -------------------------------------------------------------------------------- /public/images/tense/say1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/say1.png -------------------------------------------------------------------------------- /public/images/tense/say2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/say2.png -------------------------------------------------------------------------------- /public/images/tense/say3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/say3.png -------------------------------------------------------------------------------- /public/images/tense/say4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/say4.png -------------------------------------------------------------------------------- /public/images/tense/say5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/say5.png -------------------------------------------------------------------------------- /public/images/tense/say6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/say6.png -------------------------------------------------------------------------------- /client/lib/plupload/js/Moxie.xap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/client/lib/plupload/js/Moxie.xap -------------------------------------------------------------------------------- /maodou/customers/client/actions/index.js: -------------------------------------------------------------------------------- 1 | import customers from './customers'; 2 | 3 | export default { 4 | customers 5 | }; 6 | -------------------------------------------------------------------------------- /maodou/customers/lib/collections/index.js: -------------------------------------------------------------------------------- 1 | import Customers from './customers'; 2 | 3 | export default{ 4 | Customers 5 | }; 6 | -------------------------------------------------------------------------------- /public/images/tense/bgWorks.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/bgWorks.jpg -------------------------------------------------------------------------------- /public/images/tense/member1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/member1.png -------------------------------------------------------------------------------- /public/images/tense/member2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/member2.png -------------------------------------------------------------------------------- /public/images/tense/member3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/member3.png -------------------------------------------------------------------------------- /public/images/tense/member4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/member4.png -------------------------------------------------------------------------------- /public/images/tense/welcome.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/welcome.jpg -------------------------------------------------------------------------------- /webpack.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": ".", 3 | "devtool": "source-map", 4 | "devServer": { 5 | "host": "localhost" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /maodou/singlePages/client/actions/index.js: -------------------------------------------------------------------------------- 1 | import singlePages from './singlePages'; 2 | 3 | export default { 4 | singlePages 5 | }; 6 | -------------------------------------------------------------------------------- /maodou/singlePages/lib/collections/index.js: -------------------------------------------------------------------------------- 1 | import SinglePages from './singlePages' 2 | 3 | export default{ 4 | SinglePages 5 | } 6 | -------------------------------------------------------------------------------- /public/fonts/Pe-icon-7-stroke.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/fonts/Pe-icon-7-stroke.eot -------------------------------------------------------------------------------- /public/fonts/Pe-icon-7-stroke.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/fonts/Pe-icon-7-stroke.ttf -------------------------------------------------------------------------------- /public/fonts/Pe-icon-7-stroke.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/fonts/Pe-icon-7-stroke.woff -------------------------------------------------------------------------------- /public/images/aboutadd-iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/aboutadd-iphone.png -------------------------------------------------------------------------------- /public/images/tense/600X400new1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/600X400new1.png -------------------------------------------------------------------------------- /public/images/tense/600X400new2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/600X400new2.png -------------------------------------------------------------------------------- /public/images/tense/600X400new3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/600X400new3.png -------------------------------------------------------------------------------- /public/images/tense/bgPricing.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/bgPricing.jpg -------------------------------------------------------------------------------- /public/images/tense/logo57x56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/logo57x56.png -------------------------------------------------------------------------------- /public/images/tense/logo66x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/logo66x64.png -------------------------------------------------------------------------------- /public/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /public/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /public/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /public/images/tense/600X400work1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/600X400work1.png -------------------------------------------------------------------------------- /public/images/tense/600X400work2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/600X400work2.png -------------------------------------------------------------------------------- /public/images/tense/600X400work3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/600X400work3.png -------------------------------------------------------------------------------- /public/images/tense/600X400work4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/600X400work4.png -------------------------------------------------------------------------------- /public/images/tense/600X400work5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/600X400work5.png -------------------------------------------------------------------------------- /public/images/tense/600X400work6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/tense/600X400work6.png -------------------------------------------------------------------------------- /client/actions/index.js: -------------------------------------------------------------------------------- 1 | import core from './core'; 2 | import users from './users'; 3 | 4 | export default { 5 | core, 6 | users 7 | }; 8 | -------------------------------------------------------------------------------- /lib/configs/i18n/index.js: -------------------------------------------------------------------------------- 1 | import enUS from './en-us'; 2 | import zhCN from './zh-cn'; 3 | 4 | export default { 5 | enUS, 6 | zhCN 7 | }; 8 | -------------------------------------------------------------------------------- /public/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /public/images/aboutadd-full-macbook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/aboutadd-full-macbook.png -------------------------------------------------------------------------------- /public/images/aboutadd-half-macbook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/aboutadd-half-macbook.png -------------------------------------------------------------------------------- /public/images/aboutadd-iphone-half.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/images/aboutadd-iphone-half.png -------------------------------------------------------------------------------- /client/components/layout/footer.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export default () => ( 4 |
5 | 6 |
7 | ); 8 | -------------------------------------------------------------------------------- /maodou/posts/lib/configs/i18n/index.js: -------------------------------------------------------------------------------- 1 | import enUS from './en-us'; 2 | import zhCN from './zh-cn'; 3 | 4 | export default { 5 | enUS, 6 | zhCN 7 | }; 8 | -------------------------------------------------------------------------------- /maodou/wechat/configs/i18n/index.js: -------------------------------------------------------------------------------- 1 | import enUS from './en-us'; 2 | import zhCN from './zh-cn'; 3 | 4 | export default { 5 | enUS, 6 | zhCN 7 | }; 8 | -------------------------------------------------------------------------------- /maodou/events/lib/configs/i18n/index.js: -------------------------------------------------------------------------------- 1 | import enUS from './en-us'; 2 | import zhCN from './zh-cn'; 3 | 4 | export default { 5 | enUS, 6 | zhCN 7 | }; 8 | -------------------------------------------------------------------------------- /client/main.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | 7 | -------------------------------------------------------------------------------- /lib/collections/index.js: -------------------------------------------------------------------------------- 1 | import { Meteor } from 'meteor/meteor'; 2 | import Packages from './packages'; 3 | 4 | export default{ 5 | Users: Meteor.users, 6 | Packages 7 | }; 8 | -------------------------------------------------------------------------------- /public/fonts/bootstrap/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maodouio/meteor-react-redux-base/HEAD/public/fonts/bootstrap/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /maodou/bizplans/lib/config/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | bizplans: { 3 | adminLabel: '项目管理', 4 | subMenu: [ 5 | { label: '所有项目', href: '/admin/bizplans/list' } 6 | ] 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /maodou/wechat/configs/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | wechat: { 3 | adminLabel: '微信配置', 4 | adminHref: '/admin/wechat', 5 | appId: Meteor.settings.public.wechat.appId || 'xxx' 6 | } 7 | }; 8 | -------------------------------------------------------------------------------- /maodou/bizplans/client/components/admin/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export default (props) => { 4 | return ( 5 |
6 | {props.children} 7 |
8 | ) 9 | } 10 | -------------------------------------------------------------------------------- /maodou/posts/client/components/admin/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export default (props) => { 4 | return ( 5 |
6 | {props.children} 7 |
8 | ); 9 | } 10 | -------------------------------------------------------------------------------- /maodou/wechat/client/admin-routes.js: -------------------------------------------------------------------------------- 1 | import WechatAdmin from './containers/admin'; 2 | 3 | export default function (injectDeps, { configs }) { 4 | return [{path: 'wechat', component: WechatAdmin}]; 5 | } 6 | -------------------------------------------------------------------------------- /maodou/singlePages/client/components/admin/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export default (props) => { 4 | return ( 5 |
6 | {props.children} 7 |
8 | ); 9 | } 10 | -------------------------------------------------------------------------------- /server/configs/wechat.js: -------------------------------------------------------------------------------- 1 | export default { 2 | wechat: { 3 | appSecret: Meteor.settings.wechat.appSecret, 4 | token: Meteor.settings.wechat.token, 5 | encodingAESKey: Meteor.settings.wechat.encodingAESKey 6 | } 7 | }; 8 | -------------------------------------------------------------------------------- /server/methods/index.js: -------------------------------------------------------------------------------- 1 | import core from './core'; 2 | import users from './users'; 3 | import files from './files'; 4 | 5 | export default (context) => { 6 | core(context); 7 | users(context); 8 | files(context); 9 | } 10 | -------------------------------------------------------------------------------- /maodou/customers/client/components/admin/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export default (props) => { 4 | return ( 5 |
6 | {props.children} 7 |
8 | ); 9 | } 10 | -------------------------------------------------------------------------------- /maodou/events/client/components/admin/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export default (props) => { 4 | return ( 5 |
6 | {props.children} 7 |
8 | ); 9 | } 10 | -------------------------------------------------------------------------------- /maodou/bizplans/server/publications/index.js: -------------------------------------------------------------------------------- 1 | export default ({ Meteor, Collections }) => { 2 | const { Bizplans } = Collections 3 | 4 | Meteor.publish('bizplans.list', function (category) { 5 | return Bizplans.find({ category }) 6 | }) 7 | } 8 | -------------------------------------------------------------------------------- /maodou/events/lib/configs/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | events: { 3 | adminLabel: '活动管理', 4 | subMenu: [ 5 | { label: '所有活动', href: '/admin/events/list' }, 6 | { label: '添加新活动', href: '/admin/event/add' }, 7 | ] 8 | } 9 | }; 10 | -------------------------------------------------------------------------------- /server/context.js: -------------------------------------------------------------------------------- 1 | import { Meteor } from 'meteor/meteor'; 2 | import { Roles } from 'meteor/alanning:roles'; 3 | import Qiniu from 'qiniu'; 4 | 5 | export default function() { 6 | return { 7 | Meteor, 8 | Roles, 9 | Qiniu 10 | }; 11 | } 12 | -------------------------------------------------------------------------------- /maodou/events/client/reducers/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | eventTmpCover(state = '', action) { 3 | switch (action.type) { 4 | case 'ADD_POST_COVER': 5 | return action.url; 6 | default: 7 | return state; 8 | } 9 | }, 10 | }; 11 | -------------------------------------------------------------------------------- /client/lib/imports/theme-homer/_text_editor.scss: -------------------------------------------------------------------------------- 1 | .note-editor { 2 | border: 1px solid $border-color; 3 | } 4 | .note-editor .note-toolbar { 5 | border-bottom: 1px solid $border-color; 6 | } 7 | 8 | .note-editor .btn-default { 9 | border-color: $border-color; 10 | } -------------------------------------------------------------------------------- /maodou/customers/lib/configs/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | customers: { 3 | adminLabel: '客户管理', 4 | subMenu: [ 5 | { label: '所有客户', href: '/admin/customers/list' }, 6 | { label: '添加新客户', href: '/admin/customers/add' }, 7 | ] 8 | } 9 | }; 10 | -------------------------------------------------------------------------------- /maodou/wechat/client/index.js: -------------------------------------------------------------------------------- 1 | import actions from '../actions'; 2 | import configs from '../configs'; 3 | import i18n from '../configs/i18n'; 4 | import routes from './routes'; 5 | 6 | export default { 7 | actions, 8 | configs, 9 | i18n, 10 | routes 11 | }; 12 | -------------------------------------------------------------------------------- /client/components/layout/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Nav from '../../containers/layout/nav'; 3 | import Footer from './footer'; 4 | 5 | export default (props) => ( 6 |
7 |
11 | ); 12 | -------------------------------------------------------------------------------- /maodou/singlePages/client/routes.js: -------------------------------------------------------------------------------- 1 | import MainPage from './containers/mainPage'; 2 | 3 | export default function (injectDeps, { configs }) { 4 | return { 5 | '/admin': ['singlePages'], 6 | 7 | // insert routes for other layouts here 8 | '/': [ 9 | {path: '/', component: MainPage} 10 | ] 11 | }; 12 | } 13 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # @see http://editorconfig.org/ 2 | 3 | # This is the top-most .editorconfig file; do not search in parent directories. 4 | root = true 5 | 6 | # All files. 7 | [*] 8 | end_of_line = LF 9 | indent_style = space 10 | indent_size = 2 11 | charset = utf-8 12 | trim_trailing_whitespace = true 13 | insert_final_newline = true 14 | -------------------------------------------------------------------------------- /client/lib/middlewares/layouts.js: -------------------------------------------------------------------------------- 1 | import { injectDeps } from 'react-simple-di'; 2 | 3 | export default function(layouts) { 4 | return { 5 | moduleWillInit() { 6 | for (const layout of layouts) { 7 | this.context[layout.name] = injectDeps(this.context, this.actions)(layout.component); 8 | } 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /.meteor/.id: -------------------------------------------------------------------------------- 1 | # This file contains a token that is unique to your project. 2 | # Check it into your repository along with the rest of this directory. 3 | # It can be used for purposes such as: 4 | # - ensuring you don't accidentally deploy one app on top of another 5 | # - providing package authors with aggregated statistics 6 | 7 | 18sz1161xqqec24b2uir 8 | -------------------------------------------------------------------------------- /scripts/build_runtime_npm.sh: -------------------------------------------------------------------------------- 1 | set -e 2 | 3 | echo "=> build runtime npm." 4 | 5 | cd /bundle/bundle/programs/server/ 6 | # fix cloneCurrentTree problem 7 | rm npm-shrinkwrap.json 8 | # echo "=> [zhaoic] fix fibers" 9 | # npm uninstall fibers 10 | # npm install fibers 11 | echo "=> npm install." 12 | npm install --unsafe-perm 13 | 14 | cd /bundle/bundle 15 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM index.alauda.cn/zhaoic/debian:m1 2 | MAINTAINER Maodou Ltd. 3 | 4 | ENV METEORD_DIR /opt/meteord 5 | 6 | ADD bundle.tar.gz /bundle 7 | COPY scripts/build_runtime_npm.sh $METEORD_DIR/ 8 | COPY scripts/run_app.sh $METEORD_DIR/ 9 | 10 | RUN bash $METEORD_DIR/build_runtime_npm.sh 11 | 12 | EXPOSE 80 13 | ENTRYPOINT bash $METEORD_DIR/run_app.sh 14 | -------------------------------------------------------------------------------- /maodou/posts/client/containers/admin/index.js: -------------------------------------------------------------------------------- 1 | import { useDeps } from 'react-simple-di'; 2 | import { composeAll } from 'react-komposer-plus'; 3 | 4 | import PostsAdmin from '../../components/admin'; 5 | 6 | const depsToProps = (context, actions) => ({ 7 | context 8 | }); 9 | 10 | export default composeAll( 11 | useDeps(depsToProps) 12 | )(PostsAdmin); 13 | -------------------------------------------------------------------------------- /maodou/singlePages/lib/configs/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | singlePages: { 3 | adminLabel: '单页面管理', 4 | subMenu: [ 5 | { label: '选择模板', href: '/admin/singlePages/list' }, 6 | { label: '配置模板', href: '/admin/singlePages/config' } 7 | ], 8 | sectionsName: ['企业简介', '团队介绍', '业务类型', '工作动态', '团队案例', '合作伙伴', '联系我们', '其他'] 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /maodou/bizplans/client/containers/admin/index.js: -------------------------------------------------------------------------------- 1 | import { useDeps } from 'react-simple-di' 2 | import { composeAll } from 'react-komposer-plus' 3 | 4 | import BizplansAdmin from '../../components/admin' 5 | 6 | const depsToProps = (context, actions) => ({ 7 | context 8 | }) 9 | 10 | export default composeAll( 11 | useDeps(depsToProps) 12 | )(BizplansAdmin) 13 | -------------------------------------------------------------------------------- /server/configs/core.js: -------------------------------------------------------------------------------- 1 | import { Meteor } from 'meteor/meteor'; 2 | 3 | export default { 4 | core: { 5 | qiniu: { 6 | ACCESS_KEY: Meteor.settings.core.qiniu.ACCESS_KEY, 7 | SECRET_KEY: Meteor.settings.core.qiniu.SECRET_KEY, 8 | BUCKET_NAME: 'maodou-base', 9 | DOMAIN_NAME: 'http://oimlv898n.bkt.clouddn.com/' 10 | } 11 | } 12 | }; 13 | -------------------------------------------------------------------------------- /maodou/posts/server/permissions/index.js: -------------------------------------------------------------------------------- 1 | export default ({ Collections }) => { 2 | const { Posts } = Collections; 3 | 4 | Posts.allow({ 5 | insert: function() { 6 | return true; 7 | }, 8 | update: function() { 9 | return true; 10 | }, 11 | remove: function() { 12 | return true; 13 | }, 14 | fetch: null 15 | }); 16 | } 17 | -------------------------------------------------------------------------------- /maodou/singlePages/client/containers/admin/index.js: -------------------------------------------------------------------------------- 1 | import { useDeps } from 'react-simple-di'; 2 | import { composeAll } from 'react-komposer-plus'; 3 | 4 | import SectionsAdmin from '../../components/admin'; 5 | 6 | const depsToProps = (context, actions) => ({ 7 | context 8 | }); 9 | 10 | export default composeAll( 11 | useDeps(depsToProps) 12 | )(SectionsAdmin); 13 | -------------------------------------------------------------------------------- /maodou/wechat/actions/wechat.js: -------------------------------------------------------------------------------- 1 | export default { 2 | saveConfigs({ Meteor, toastr }, configs) { 3 | return (disptch) => { 4 | Meteor.call('wechat.saveConfigs', configs, (err) => { 5 | if (err) { 6 | toastr.error("配置保存失败"); 7 | } else { 8 | toastr.success("保存配置成功"); 9 | } 10 | }); 11 | }; 12 | } 13 | }; 14 | -------------------------------------------------------------------------------- /maodou/wechat/server/publications/index.js: -------------------------------------------------------------------------------- 1 | export default ({ Meteor, Collections }) => { 2 | const { Packages } = Collections; 3 | 4 | Meteor.publish('wechat.configs.user', function () { 5 | return Packages.find({ name: 'wechat' }); 6 | }); 7 | Meteor.publish('wechat.configs', function () { 8 | return Packages.find({ name: 'wechat' }); 9 | }); 10 | } 11 | -------------------------------------------------------------------------------- /client/reducers/index.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | export default { 4 | test(state = 0, action) { 5 | switch (action.type) { 6 | default: 7 | return state; 8 | } 9 | }, 10 | i18n(state = {}, action) { 11 | switch (action.type){ 12 | case 'SET_LANGUAGE': 13 | return action.i18n; 14 | default: 15 | return state; 16 | } 17 | } 18 | }; 19 | -------------------------------------------------------------------------------- /maodou/events/client/main.scss: -------------------------------------------------------------------------------- 1 | .panel-footer { 2 | .fa { 3 | margin-right: 5px; 4 | } 5 | } 6 | 7 | .event-desc { 8 | padding: 0px; 9 | margin-top: -10px; 10 | font-size: 13px; 11 | text-overflow: ellipsis; 12 | display: -webkit-box; 13 | -webkit-line-clamp: 2; 14 | -webkit-box-orient: vertical; 15 | overflow: hidden; 16 | margin-bottom: -15px; 17 | } 18 | -------------------------------------------------------------------------------- /maodou/bizplans/server/methods/index.js: -------------------------------------------------------------------------------- 1 | export default (context) => { 2 | const { Meteor, Collections } = context 3 | const { Bizplans } = Collections 4 | 5 | Meteor.methods({ 6 | 'bizplans.add' (data) { 7 | Bizplans.insert({ 8 | ...data 9 | }) 10 | }, 11 | 'bizplans.remove' (_id) { 12 | Bizplans.remove({ _id }) 13 | } 14 | }) 15 | } 16 | -------------------------------------------------------------------------------- /server/publications/index.js: -------------------------------------------------------------------------------- 1 | export default ({ Meteor, Collections }) => { 2 | const { Packages } = Collections; 3 | 4 | Meteor.publish('core.configs.user', function () { 5 | // TODO: Add configs filter for normal users 6 | return Packages.find({ name: 'core' }); 7 | }); 8 | 9 | Meteor.publish('core.configs', function () { 10 | return Packages.find({ name: 'core' }); 11 | }); 12 | } 13 | -------------------------------------------------------------------------------- /client/index.js: -------------------------------------------------------------------------------- 1 | import configs from '../lib/configs'; 2 | import i18n from '../lib/configs/i18n'; 3 | import collections from '../lib/collections'; 4 | import actions from './actions'; 5 | import reducers from './reducers'; 6 | 7 | export default { 8 | configs, 9 | i18n, 10 | collections, 11 | actions, 12 | reducers, 13 | init(context, actions) { 14 | // console.log(context); 15 | } 16 | }; 17 | -------------------------------------------------------------------------------- /maodou/bizplans/client/index.js: -------------------------------------------------------------------------------- 1 | import configs from '../lib/config' 2 | import collections from '../lib/collections' 3 | import actions from './actions' 4 | import reducers from './reducers' 5 | import routes from './routes' 6 | 7 | export default { 8 | configs, 9 | collections, 10 | actions, 11 | reducers, 12 | routes, 13 | init (context, actions) { 14 | // console.log(context) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /maodou/events/client/containers/admin/index.js: -------------------------------------------------------------------------------- 1 | import { useDeps } from 'react-simple-di'; 2 | import { compose, withHandlers, withTracker, withRedux, composeAll } from 'react-komposer-plus'; 3 | 4 | import EventsAdmin from '../../components/admin'; 5 | 6 | const depsToProps = (context, actions) => ({ 7 | context 8 | }); 9 | 10 | export default composeAll( 11 | useDeps(depsToProps) 12 | )(EventsAdmin); 13 | -------------------------------------------------------------------------------- /maodou/posts/client/routes.js: -------------------------------------------------------------------------------- 1 | import Posts from './containers/posts'; 2 | import Post from './containers/post'; 3 | 4 | export default function (injectDeps, { configs }) { 5 | return { 6 | '/admin': ['posts'], 7 | 8 | // insert routes for other layouts here 9 | '/': [ 10 | {path: 'posts/list', component: Posts}, 11 | {path: 'post/:id', component: Post} 12 | ] 13 | }; 14 | } 15 | -------------------------------------------------------------------------------- /maodou/bizplans/client/components/bizplansAdd/uploadButton.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react' 2 | 3 | export default class UploadButton extends Component { 4 | render () { 5 | return ( 6 | 点击上传 7 | ) 8 | } 9 | } 10 | 11 | const styles = { 12 | uploadButton: { 13 | width: '200px' 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /maodou/customers/server/permissions/index.js: -------------------------------------------------------------------------------- 1 | export default ({ Collections }) => { 2 | // const { Posts } = Collections; 3 | // 4 | // Posts.allow({ 5 | // insert: function() { 6 | // return true; 7 | // }, 8 | // update: function() { 9 | // return true; 10 | // }, 11 | // remove: function() { 12 | // return true; 13 | // }, 14 | // fetch: null 15 | // }); 16 | } 17 | -------------------------------------------------------------------------------- /maodou/events/server/permissions/index.js: -------------------------------------------------------------------------------- 1 | export default ({ Collections }) => { 2 | // const { Posts } = Collections; 3 | // 4 | // Posts.allow({ 5 | // insert: function() { 6 | // return true; 7 | // }, 8 | // update: function() { 9 | // return true; 10 | // }, 11 | // remove: function() { 12 | // return true; 13 | // }, 14 | // fetch: null 15 | // }); 16 | } 17 | -------------------------------------------------------------------------------- /maodou/customers/client/containers/admin/index.js: -------------------------------------------------------------------------------- 1 | import { useDeps } from 'react-simple-di'; 2 | import { compose, withHandlers, withTracker, withRedux, composeAll } from 'react-komposer-plus'; 3 | 4 | import CustomersAdmin from '../../components/admin'; 5 | 6 | const depsToProps = (context, actions) => ({ 7 | context 8 | }); 9 | 10 | export default composeAll( 11 | useDeps(depsToProps) 12 | )(CustomersAdmin); 13 | -------------------------------------------------------------------------------- /maodou/singlePages/client/index.js: -------------------------------------------------------------------------------- 1 | import configs from '../lib/configs'; 2 | import collections from '../lib/collections'; 3 | import actions from './actions'; 4 | import reducers from './reducers'; 5 | import routes from './routes'; 6 | 7 | export default { 8 | configs, 9 | collections, 10 | actions, 11 | reducers, 12 | routes, 13 | init (context, actions) { 14 | // console.log(context) 15 | } 16 | }; 17 | -------------------------------------------------------------------------------- /client/actions/core.js: -------------------------------------------------------------------------------- 1 | export default { 2 | setLanguage(i18n) { 3 | return { type: 'SET_LANGUAGE', i18n }; 4 | }, 5 | saveConfigs({ Meteor, toastr }, configs) { 6 | return (disptch) => { 7 | Meteor.call('core.saveConfigs', configs, (err) => { 8 | if (err) { 9 | toastr.error("配置保存失败"); 10 | } else { 11 | toastr.success("保存配置成功"); 12 | } 13 | }); 14 | }; 15 | } 16 | }; 17 | -------------------------------------------------------------------------------- /client/components/admin/layout/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Nav from '../../../containers/admin/layout/nav'; 3 | import Aside from '../../../containers/admin/layout/aside'; 4 | 5 | export default (props) => ( 6 |
7 |
14 | ); 15 | -------------------------------------------------------------------------------- /maodou/events/client/routes.js: -------------------------------------------------------------------------------- 1 | import Events from './containers/events'; 2 | import Event from './containers/event'; 3 | 4 | export default function (injectDeps, { configs }) { 5 | const routes = { 6 | '/admin': ['events'], 7 | 8 | // insert routes for other layouts here 9 | 10 | '/': [ 11 | {path: 'events/list', component: Events}, 12 | {path: 'event/:id', component: Event} 13 | ] 14 | }; 15 | 16 | return routes; 17 | } 18 | -------------------------------------------------------------------------------- /client/lib/imports/theme-homer/_tooltip.scss: -------------------------------------------------------------------------------- 1 | // tooltip 2 | .tooltip-inner { 3 | background-color: $color-navy-blue; 4 | } 5 | 6 | .tooltip.top .tooltip-arrow { 7 | border-top-color: $color-navy-blue; 8 | } 9 | .tooltip.right .tooltip-arrow { 10 | border-right-color: $color-navy-blue; 11 | } 12 | .tooltip.bottom .tooltip-arrow { 13 | border-bottom-color: $color-navy-blue; 14 | } 15 | .tooltip.left .tooltip-arrow { 16 | border-left-color: $color-navy-blue; 17 | } -------------------------------------------------------------------------------- /maodou/events/client/index.js: -------------------------------------------------------------------------------- 1 | import configs from '../lib/configs'; 2 | import i18n from '../lib/configs/i18n'; 3 | import collections from '../lib/collections'; 4 | import actions from './actions'; 5 | import reducers from './reducers'; 6 | import routes from './routes'; 7 | 8 | export default { 9 | configs, 10 | i18n, 11 | collections, 12 | actions, 13 | reducers, 14 | routes, 15 | init(context, actions) { 16 | // console.log(context); 17 | } 18 | }; 19 | -------------------------------------------------------------------------------- /maodou/posts/client/index.js: -------------------------------------------------------------------------------- 1 | import configs from '../lib/configs'; 2 | import i18n from '../lib/configs/i18n'; 3 | import collections from '../lib/collections'; 4 | import actions from './actions'; 5 | import reducers from './reducers'; 6 | import routes from './routes'; 7 | 8 | export default { 9 | configs, 10 | i18n, 11 | collections, 12 | actions, 13 | reducers, 14 | routes, 15 | init(context, actions) { 16 | // console.log(context); 17 | } 18 | }; 19 | -------------------------------------------------------------------------------- /maodou/posts/client/reducers/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | postTmpCover(state = '', action) { 3 | switch (action.type){ 4 | case 'ADD_POST_COVER': 5 | return action.url; 6 | default: 7 | return state; 8 | } 9 | }, 10 | postsCategory(state = '', action) { 11 | switch (action.type){ 12 | case 'CHANGE_POSTS_CATEGORY': 13 | return action.category; 14 | default: 15 | return state; 16 | } 17 | } 18 | }; 19 | -------------------------------------------------------------------------------- /maodou/singlePages/client/components/admin/singlePagesConf/config/iframe.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | 3 | export default class Iframe extends Component { 4 | render () { 5 | return ( 6 |
7 | 14 |
15 | ); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /maodou/customers/client/index.js: -------------------------------------------------------------------------------- 1 | import configs from '../lib/configs'; 2 | // import i18n from '../lib/configs/i18n'; 3 | import collections from '../lib/collections'; 4 | import actions from './actions'; 5 | import reducers from './reducers'; 6 | import routes from './routes'; 7 | 8 | export default { 9 | configs, 10 | // i18n, 11 | collections, 12 | actions, 13 | reducers, 14 | routes, 15 | init(context, actions) { 16 | // console.log(context); 17 | } 18 | }; 19 | -------------------------------------------------------------------------------- /maodou/customers/client/routes.js: -------------------------------------------------------------------------------- 1 | import Customers from './containers/customers'; 2 | import Customer from './containers/customer'; 3 | 4 | export default function (injectDeps, { configs }) { 5 | const routes = { 6 | '/admin': ['customers'], 7 | 8 | // insert routes for other layouts here 9 | 10 | '/': [ 11 | {path: 'customers/list', component: Customers}, 12 | {path: 'customers/:id', component: Customer}, 13 | ] 14 | }; 15 | 16 | return routes; 17 | } 18 | -------------------------------------------------------------------------------- /maodou/singlePages/client/reducers/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | selectedSection(state = '', action) { 3 | switch (action.type){ 4 | case 'SELECT_SECTION': 5 | return action.sectionName; 6 | default: 7 | return state; 8 | } 9 | }, 10 | singlePageLogo(state = '', action) { 11 | switch (action.type){ 12 | case 'CHANGE_SINGLEPAGE_LOGO': 13 | return action.url; 14 | default: 15 | return state; 16 | } 17 | } 18 | }; 19 | -------------------------------------------------------------------------------- /maodou/customers/server/publications/index.js: -------------------------------------------------------------------------------- 1 | export default ({ Meteor, Collections }) => { 2 | const { Customers, Packages } = Collections; 3 | 4 | Meteor.publish('customers.list', function () { 5 | return Customers.find({}); 6 | }); 7 | 8 | Meteor.publish('customers.configs.user', function () { 9 | return Packages.find({ name: 'customers' }); 10 | }); 11 | Meteor.publish('customers.configs', function () { 12 | return Packages.find({ name: 'customers' }); 13 | }); 14 | } 15 | -------------------------------------------------------------------------------- /maodou/events/server/publications/index.js: -------------------------------------------------------------------------------- 1 | export default ({ Meteor, Collections }) => { 2 | const { Events, Packages } = Collections; 3 | 4 | Meteor.publish('events.list', function () { 5 | return Events.find({}, {sort: { time: -1}}); 6 | }); 7 | 8 | Meteor.publish('events.configs.user', function () { 9 | return Packages.find({ name: 'events' }); 10 | }); 11 | Meteor.publish('events.configs', function () { 12 | return Packages.find({ name: 'events' }); 13 | }); 14 | } 15 | -------------------------------------------------------------------------------- /maodou/posts/lib/configs/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | posts: { 3 | adminLabel: '文章管理', 4 | subMenu: [ 5 | { label: '配置选项', href: '/admin/posts/configure' }, 6 | { label: '所有文章', href: '/admin/posts/list' }, 7 | { label: '添加新文章', href: '/admin/post/add' } 8 | ], 9 | categories: ['初创公司', '创业学院', '孵化服务'], 10 | UI: { 11 | listImgPosition: 'left', 12 | categoriesPosition: 'bottom', 13 | categoriesTabsColor: 'green' 14 | } 15 | } 16 | }; 17 | -------------------------------------------------------------------------------- /client/components/common/errorPage.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import {Link} from 'react-router'; 3 | 4 | export default ({ code, info, description }) => ( 5 |
6 | 7 |

{code}

8 |

{info}

9 |

{description}

10 | 11 | 回到首页 12 | 13 |
14 | ); 15 | -------------------------------------------------------------------------------- /client/components/common/welcome.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export default () => ( 4 |
5 |
6 |

Welcome

7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |

loading...

15 |
16 |
17 | ); 18 | -------------------------------------------------------------------------------- /client/components/common/loading.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export default () => ( 4 |
5 |
6 |

Loading...

7 | {/*

some loading descriptions

*/} 8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | ); 18 | -------------------------------------------------------------------------------- /maodou/singlePages/client/containers/admin/singlePagesConf/config/index.js: -------------------------------------------------------------------------------- 1 | import { useDeps } from 'react-simple-di'; 2 | import { composeAll, withRedux } from 'react-komposer-plus'; 3 | import Config from '../../../../components/admin/singlePagesConf/config'; 4 | 5 | const mapStateToProps = ({ selectedSection }) => ({ 6 | selectedSection 7 | }); 8 | 9 | const depsToProps = (context) => ({ 10 | context, 11 | }); 12 | 13 | export default composeAll( 14 | withRedux(mapStateToProps), 15 | useDeps(depsToProps) 16 | )(Config); 17 | -------------------------------------------------------------------------------- /server/methods/files.js: -------------------------------------------------------------------------------- 1 | export default ({ Meteor, Roles, Qiniu, privateConfigs }) => { 2 | const bucketName = Qiniu.conf.BUCKET_NAME; 3 | const qiniuClient = new Qiniu.rs.Client(); 4 | const wrappedQiniuIoPut = Meteor.wrapAsync(Qiniu.io.put, Qiniu.io); 5 | // const wrappedQiniuClient = Async.wrap(qiniuClient, ['stat', 'remove', 'copy', 'move']); 6 | 7 | Meteor.methods({ 8 | 'files.token'() { 9 | const putPolicy = new Qiniu.rs.PutPolicy(bucketName); 10 | return putPolicy.token(); 11 | } 12 | }); 13 | } 14 | -------------------------------------------------------------------------------- /.meteor/.finished-upgraders: -------------------------------------------------------------------------------- 1 | # This file contains information which helps Meteor properly upgrade your 2 | # app when you run 'meteor update'. You should check it into version control 3 | # with your project. 4 | 5 | notices-for-0.9.0 6 | notices-for-0.9.1 7 | 0.9.4-platform-file 8 | notices-for-facebook-graph-api-2 9 | 1.2.0-standard-minifiers-package 10 | 1.2.0-meteor-platform-split 11 | 1.2.0-cordova-changes 12 | 1.2.0-breaking-changes 13 | 1.3.0-split-minifiers-package 14 | 1.4.0-remove-old-dev-bundle-link 15 | 1.4.1-add-shell-server-package 16 | -------------------------------------------------------------------------------- /maodou/singlePages/server/publications/index.js: -------------------------------------------------------------------------------- 1 | export default ({ Meteor, Collections }) => { 2 | const { SinglePages, Packages } = Collections; 3 | 4 | Meteor.publish('singlePages.list', () => { 5 | return SinglePages.find({ defaultTemplate: false}); 6 | }); 7 | 8 | Meteor.publish('singlePages.selected', () => { 9 | return SinglePages.find({ selected: true, defaultTemplate: false }); 10 | }); 11 | 12 | Meteor.publish('singlePages.configs', () => { 13 | return Packages.find({ name: 'singlePages' }); 14 | }); 15 | }; 16 | -------------------------------------------------------------------------------- /client/lib/imports/theme-homer/_fonts.scss: -------------------------------------------------------------------------------- 1 | /* Fonts */ 2 | .font-light { 3 | font-weight: 300; 4 | } 5 | .font-normal { 6 | font-weight: 400; 7 | } 8 | .font-bold { 9 | font-weight: 600; 10 | } 11 | .font-extra-bold { 12 | font-weight: 700; 13 | } 14 | 15 | .font-uppercase { 16 | text-transform: uppercase; 17 | } 18 | 19 | .font-trans { 20 | opacity: 0.5 !important; 21 | } 22 | 23 | .text-big { 24 | font-size: 60px; 25 | } 26 | 27 | h1, .h1, h2, .h2, h3, .h3 { 28 | margin-top: 10px; 29 | margin-bottom: 10px; 30 | font-weight: 200; 31 | } -------------------------------------------------------------------------------- /lib/configs/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | core: { 3 | adminLabel: '核心配置', 4 | adminHref: '/admin/core', 5 | appName: Meteor.settings.public.core.appName || 'myApp', 6 | appLogo: Meteor.settings.public.core.appLogo || '/images/logo.png', 7 | ownerEmail: Meteor.settings.public.core.ownerEmail || 'app@example.com', 8 | i18n: false, 9 | languages: ['enUS'], 10 | loginMethod: 'wechat', 11 | qiniu: { 12 | BUCKET_NAME: 'maodou-base', 13 | DOMAIN_NAME: 'http://oimlv898n.bkt.clouddn.com/' 14 | } 15 | } 16 | }; 17 | -------------------------------------------------------------------------------- /server/methods/core.js: -------------------------------------------------------------------------------- 1 | export default ({ Meteor, Collections }) => { 2 | const { Packages } = Collections; 3 | Meteor.methods(({ 4 | 'core.saveConfigs'(configs) { 5 | Packages.update({ name: 'core' }, { 6 | $set: { 7 | 'configs.appName': configs.appName 8 | } 9 | }); 10 | }, 11 | 'resetData'(){ 12 | Collections.Users.remove({}); 13 | Collections.Posts.remove({}); 14 | Collections.Events.remove({}); 15 | Collections.Bizplans.remove({}); 16 | Collections.SinglePages.remove({}); 17 | } 18 | })); 19 | }; 20 | -------------------------------------------------------------------------------- /lib/middlewares/collections.js: -------------------------------------------------------------------------------- 1 | export default () => { 2 | return { 3 | moduleWillLoad(module) { 4 | if (module.collections) { 5 | if (typeof module.collections !== 'object') { 6 | const message = 'Module\'s collections field should be an object.'; 7 | throw new Error(message); 8 | } 9 | this._collections = this._collections || {}; 10 | Object.assign(this._collections, module.collections); 11 | } 12 | }, 13 | 14 | moduleWillInit() { 15 | this.context.Collections = this._collections; 16 | } 17 | }; 18 | }; 19 | -------------------------------------------------------------------------------- /maodou/posts/server/publications/index.js: -------------------------------------------------------------------------------- 1 | export default ({ Meteor, Collections }) => { 2 | const { Posts, Packages } = Collections; 3 | 4 | Meteor.publish('posts.list', function (category) { 5 | if (!category) { 6 | return Posts.find({}, {sort: { createdAt: -1}}); 7 | } 8 | return Posts.find({ category }, {sort: { createdAt: -1}}); 9 | }); 10 | 11 | Meteor.publish('posts.configs.user', function () { 12 | return Packages.find({ name: 'posts' }); 13 | }); 14 | Meteor.publish('posts.configs', function () { 15 | return Packages.find({ name: 'posts' }); 16 | }); 17 | } 18 | -------------------------------------------------------------------------------- /client/components/admin/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export default (props) => ( 4 |
5 |
6 |
7 |

核心配置

8 |
9 |
10 | 11 | 12 |
13 | 14 |
15 |
16 |
17 |
18 | ); 19 | -------------------------------------------------------------------------------- /maodou/bizplans/client/routes.js: -------------------------------------------------------------------------------- 1 | import BizplansList from './containers/bizplansList' 2 | import SingleBizplan from './containers/singleBizplan' 3 | import BizplansAdd from './containers/bizplansAdd' 4 | 5 | export default function (injectDeps, { configs }) { 6 | const routes = { 7 | '/admin': ['bizplans'], 8 | 9 | // insert routes for other layouts here 10 | 11 | '/': [ 12 | {path: '/bizplans/list', component: BizplansList}, 13 | {path: '/bizplan/add', component: BizplansAdd}, 14 | {path: '/bizplan/:id', component: SingleBizplan}, 15 | ] 16 | } 17 | 18 | return routes 19 | } 20 | -------------------------------------------------------------------------------- /client/containers/layout/index.js: -------------------------------------------------------------------------------- 1 | import { useDeps } from 'react-simple-di'; 2 | import { withTracker, composeAll } from 'react-komposer-plus'; 3 | 4 | import Layout from '../../components/layout'; 5 | 6 | const subscriptions = ({ context }, onData) => { 7 | const { Meteor } = context; 8 | _.keys(context.configs).map((module) => { 9 | Meteor.subscribe(`${module}.configs.user`); 10 | }); 11 | onData(null, {}); 12 | }; 13 | 14 | const depsToProps = (context, actions) => ({ 15 | context 16 | }); 17 | 18 | export default composeAll( 19 | withTracker(subscriptions), 20 | useDeps(depsToProps) 21 | )(Layout); 22 | -------------------------------------------------------------------------------- /maodou/wechat/client/components/sign-in-button.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export const UIState = { 4 | IDLE: 'idle', 5 | LOGGING_IN: 'loggingIn', 6 | LOGGED_IN: 'loggedIn', 7 | ERROR: 'error' 8 | }; 9 | 10 | export default (props) => { 11 | switch (props.uiState) { 12 | case UIState.IDLE: 13 | return 微信一键登录; 14 | 15 | case UIState.LOGGED_IN: 16 | return 已登录; 17 | 18 | case UIState.LOGGING_IN: 19 | return 正在登录...; 20 | 21 | default: 22 | return
登录失败 重试登录
; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /client/containers/users/register.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import {useDeps} from 'react-simple-di'; 3 | import {composeAll, withTracker} from 'react-komposer-plus'; 4 | 5 | import Register from '../../components/users/register'; 6 | 7 | function composer({context}, onData) { 8 | onData(null, { 9 | loggedIn: !!context.Meteor.user() 10 | }); 11 | } 12 | 13 | const depsToProps = (context, actions) => ({ 14 | context, 15 | dispatch: context.dispatch, 16 | createNewUser: actions.users.createNewUser, 17 | }); 18 | 19 | export default composeAll( 20 | withTracker(composer), 21 | useDeps(depsToProps) 22 | )(Register); 23 | -------------------------------------------------------------------------------- /client/containers/users/reset-password.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import {useDeps} from 'react-simple-di'; 3 | import {composeAll} from 'react-komposer-plus'; 4 | 5 | import ResetPassword from '../../components/users/reset-password'; 6 | 7 | const bindTokenToAction = C => props => { 8 | const {token, resetPassword, ...other} = props; 9 | return ; 10 | }; 11 | 12 | const depsToProps = (context, actions) => ({ 13 | resetPassword: actions.users.resetPassword 14 | }); 15 | 16 | export default composeAll( 17 | bindTokenToAction, 18 | useDeps(depsToProps) 19 | )(ResetPassword); 20 | -------------------------------------------------------------------------------- /maodou/wechat/server/middleware.js: -------------------------------------------------------------------------------- 1 | import express from 'express'; 2 | import wechat from 'wechat'; 3 | 4 | export default function(context) { 5 | const app = express(); 6 | 7 | app.use('/wechat', wechat({ 8 | // TODO: use packages, not context 9 | token: context.privateConfigs.wechat.token, 10 | appid: context.configs.wechat.appId, 11 | encodingAESKey: context.privateConfigs.wechat.encodingAESKey 12 | }).middlewarify()); 13 | 14 | app.use('/wechat', function (req, res, next) { 15 | res.end(); // looks like there's a next('route') call in the above middleware, which needs to be terminated here 16 | }); 17 | 18 | return app; 19 | } 20 | -------------------------------------------------------------------------------- /server/lib/middlewares/middleware.js: -------------------------------------------------------------------------------- 1 | import {Picker} from 'meteor/meteorhacks:picker'; 2 | 3 | export default { 4 | moduleWillLoad(module) { 5 | if (module.middleware) { 6 | if (typeof module.middleware !== 'function') { 7 | const message = 'Module\'s middleware field should be an function.'; 8 | throw new Error(message); 9 | } 10 | this._middlewareFns = this._middlewareFns || []; 11 | this._middlewareFns.push(module.middleware); 12 | } 13 | }, 14 | 15 | moduleWillInit() { 16 | this._middlewareFns && this._middlewareFns.forEach(middlewareFn => Picker.middleware(middlewareFn(this.context))); 17 | } 18 | }; 19 | -------------------------------------------------------------------------------- /maodou/singlePages/server/index.js: -------------------------------------------------------------------------------- 1 | import collections from '../lib/collections'; 2 | import configs from '../lib/configs'; 3 | import publications from './publications'; 4 | import methods from './methods'; 5 | import templates from '../templates'; 6 | 7 | export default { 8 | configs, 9 | collections, 10 | publications, 11 | methods, 12 | init (context) { 13 | const { Collections } = context; 14 | if (!Collections.Packages.findOne({ name: 'singlePages' })) { 15 | Collections.Packages.insert({ 16 | name: 'singlePages', 17 | configs: context.configs.singlePages || {} 18 | }); 19 | } 20 | templates(); 21 | } 22 | }; 23 | -------------------------------------------------------------------------------- /client/containers/users/login-form.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import {useDeps} from 'react-simple-di'; 3 | import {composeAll, withTracker} from 'react-komposer-plus'; 4 | 5 | import EmailEnrollmentForm from '../../components/users/login-form'; 6 | 7 | function composer({context}, onData) { 8 | onData(null, { 9 | loggingIn: context.Meteor.loggingIn(), 10 | loggedIn: !!context.Meteor.user() 11 | }); 12 | } 13 | 14 | const depsToProps = (context, actions) => ({ 15 | context, 16 | loginWithPassword: actions.users.loginWithPassword 17 | }); 18 | 19 | export default composeAll( 20 | withTracker(composer), 21 | useDeps(depsToProps) 22 | )(EmailEnrollmentForm); 23 | -------------------------------------------------------------------------------- /client/components/users/login.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react'; 2 | import WeChatSignIn from 'maodou/wechat/client/containers/sign-in-button'; 3 | import EmailForm from '../../containers/users/email-enrollment-form'; 4 | import LoginForm from '../../containers/users/login-form'; 5 | 6 | export default (props) => ( 7 |
8 | {/* props.isWechatVerified ? : props.notWechat ? : */} 9 | {/* props.avatar ? : */} 10 | {} 11 | {
} 12 |
13 | ); 14 | -------------------------------------------------------------------------------- /settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "public": { 3 | "core": { 4 | "appName": "创投加速器", 5 | "appLogo": "/images/logo.png", 6 | "ownerEmail": "app@example.com" 7 | }, 8 | "posts": { 9 | "showType": "list", 10 | "categories": ["cate1", "cate2", "cate3"], 11 | "UI": { 12 | "categoriesPosition": "top" 13 | } 14 | }, 15 | "wechat": { 16 | "appId": "" 17 | } 18 | }, 19 | "core": { 20 | "qiniu": { 21 | "ACCESS_KEY": "Du_Lx2xanFiDZE0NBFyvjMhGzE9KYY2rrUiiDzbI", 22 | "SECRET_KEY": "6JLS8xc9xGCws07A8WYM0E8Hg0rt0Qd_mLhfLlWi" 23 | } 24 | }, 25 | "wechat": { 26 | "appSecret": "" 27 | }, 28 | "mailUrl": "" 29 | } 30 | -------------------------------------------------------------------------------- /client/containers/users/email-enrollment-form.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import {useDeps} from 'react-simple-di'; 3 | import {composeAll, withTracker} from 'react-komposer-plus'; 4 | 5 | import EmailEnrollmentForm from '../../components/users/email-enrollment-form'; 6 | 7 | function composer({context}, onData) { 8 | onData(null, { 9 | loggingIn: context.Meteor.loggingIn(), 10 | loggedIn: !!context.Meteor.user() 11 | }); 12 | } 13 | 14 | const depsToProps = (context, actions) => ({ 15 | context, 16 | enrollWithEmail: actions.users.enrollWithEmail 17 | }); 18 | 19 | export default composeAll( 20 | withTracker(composer), 21 | useDeps(depsToProps)) 22 | (EmailEnrollmentForm); 23 | -------------------------------------------------------------------------------- /maodou/singlePages/client/components/admin/singlePagesConf/config/content.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react'; 2 | import wangEditor from 'wangeditor'; 3 | import { $ } from 'meteor/jquery'; 4 | 5 | export default class Content extends Component { 6 | render () { 7 | return ( 8 |
9 |
10 |
11 |
12 | ); 13 | } 14 | } 15 | 16 | Content.propTypes = { 17 | content: PropTypes.string 18 | }; 19 | 20 | // 编辑器样式 21 | const style = { 22 | width: '100%', 23 | height: '800px' 24 | }; 25 | //
26 | -------------------------------------------------------------------------------- /maodou/singlePages/templates/index.js: -------------------------------------------------------------------------------- 1 | import SinglePages from '../lib/collections/singlePages'; 2 | 3 | import simpleConfig from './simple'; 4 | import creativeConfig from './creative'; 5 | import tenseConfig from './tense'; 6 | 7 | const register = (config) => { 8 | const template = SinglePages.findOne({templateName: config.templateName}); 9 | 10 | if (template) { 11 | return null; 12 | } 13 | 14 | SinglePages.insert({ 15 | defaultTemplate: true, 16 | ...config 17 | }); 18 | 19 | SinglePages.insert({ 20 | defaultTemplate: false, 21 | ...config 22 | }); 23 | 24 | }; 25 | 26 | export default () => { 27 | register(simpleConfig); 28 | register(creativeConfig); 29 | register(tenseConfig); 30 | }; 31 | -------------------------------------------------------------------------------- /maodou/bizplans/client/containers/admin/bizplan.js: -------------------------------------------------------------------------------- 1 | import { useDeps } from 'react-simple-di' 2 | import { withTracker, composeAll } from 'react-komposer-plus' 3 | 4 | import Bizplan from '../../components/admin/bizplan' 5 | 6 | const data = ({ context, params }, onData) => { 7 | const { Meteor, Collections } = context 8 | if (Meteor.subscribe('bizplans.list').ready()) { 9 | const bizplan = Collections.Bizplans.findOne({ _id: params.id }) 10 | 11 | onData(null, { 12 | bizplan 13 | }) 14 | } 15 | } 16 | 17 | const depsToProps = (context, actions) => ({ 18 | context, 19 | dispatch: context.dispatch 20 | }) 21 | 22 | export default composeAll( 23 | withTracker(data), 24 | useDeps(depsToProps) 25 | )(Bizplan) 26 | -------------------------------------------------------------------------------- /maodou/bizplans/client/containers/singleBizplan.js: -------------------------------------------------------------------------------- 1 | import { useDeps } from 'react-simple-di' 2 | import { withTracker, composeAll } from 'react-komposer-plus' 3 | 4 | import SingleBizplan from '../components/singleBizplan' 5 | 6 | const data = ({ context, params }, onData) => { 7 | const { Meteor, Collections } = context 8 | if (Meteor.subscribe('bizplans.list').ready()) { 9 | const bizplan = Collections.Bizplans.findOne({ _id: params.id}) 10 | onData(null, { 11 | bizplan 12 | }) 13 | } 14 | } 15 | 16 | const depsToProps = (context, actions) => ({ 17 | context, 18 | dispatch: context.dispatch 19 | }) 20 | 21 | export default composeAll( 22 | withTracker(data), 23 | useDeps(depsToProps) 24 | )(SingleBizplan) 25 | -------------------------------------------------------------------------------- /maodou/bizplans/client/admin-routes.js: -------------------------------------------------------------------------------- 1 | import BizplansAdmin from './components/admin'; 2 | import BizplansList from './containers/admin/bizplansList'; 3 | import Bizplan from './containers/admin/bizplan'; 4 | 5 | export default function (injectDeps, { configs }) { 6 | const routes = [ 7 | {path: 'bizplans', component: BizplansAdmin, childRoutes: []}, 8 | {path: 'bizplan/:id', component: Bizplan, childRoutes: []} 9 | ]; 10 | 11 | const subMenu = configs.bizplans.subMenu; 12 | const subMenuComponents = [ 13 | BizplansList 14 | ]; 15 | subMenu.map((menu, index) => { 16 | routes[0].childRoutes.push({ 17 | path: menu.href, 18 | component: subMenuComponents[index] 19 | }); 20 | }); 21 | return routes; 22 | } 23 | -------------------------------------------------------------------------------- /maodou/singlePages/client/admin-routes.js: -------------------------------------------------------------------------------- 1 | import SinglePagesAdmin from './components/admin'; 2 | import SinglePagesList from './containers/admin/singlePagesList'; 3 | import SinglePagesConf from './containers/admin/singlePagesConf'; 4 | 5 | export default function (injectDeps, { configs }) { 6 | const routes = [ 7 | {path: 'singlePages', component: SinglePagesAdmin, childRoutes: []} 8 | ]; 9 | 10 | const subMenu = configs.singlePages.subMenu; 11 | const subMenuComponents = [ 12 | SinglePagesList, 13 | SinglePagesConf 14 | ]; 15 | subMenu.map((menu, index) => { 16 | routes[0].childRoutes.push({ 17 | path: menu.href, 18 | component: subMenuComponents[index] 19 | }); 20 | }); 21 | 22 | return routes; 23 | } 24 | -------------------------------------------------------------------------------- /maodou/bizplans/client/containers/bizplansList.js: -------------------------------------------------------------------------------- 1 | import { useDeps } from 'react-simple-di' 2 | import { withTracker, composeAll } from 'react-komposer-plus' 3 | 4 | import BizplansList from '../components/bizplansList' 5 | 6 | const data = ({ context }, onData) => { 7 | const { Meteor, Collections } = context 8 | if (Meteor.subscribe('bizplans.list').ready()) { 9 | const bizplans = Collections.Bizplans.find({}, { sort: { createdAt: -1 } }).fetch() 10 | 11 | onData(null, { 12 | bizplans 13 | }) 14 | } 15 | } 16 | 17 | const depsToProps = (context, actions) => ({ 18 | context, 19 | dispatch: context.dispatch 20 | }) 21 | 22 | export default composeAll( 23 | withTracker(data), 24 | useDeps(depsToProps) 25 | )(BizplansList) 26 | -------------------------------------------------------------------------------- /client/lib/imports/theme-homer/_projects.scss: -------------------------------------------------------------------------------- 1 | .projects .project-label { 2 | font-weight: 600; 3 | } 4 | 5 | .projects .hpanel .panel-body { 6 | border-bottom: none; 7 | } 8 | 9 | .projects .hpanel:last-child .panel-body { 10 | border-bottom: 1px solid $border-color; 11 | } 12 | 13 | .projects .hpanel:last-child .panel-body{ 14 | border-bottom: 1px solid $border-color; 15 | } 16 | 17 | .projects .hpanel h4 a { 18 | color: $color-text; 19 | } 20 | 21 | .projects .project-people img { 22 | width: 28px; 23 | height: 28px; 24 | margin-left: 2px; 25 | margin-bottom: 4px; 26 | } 27 | 28 | .projects .project-info { 29 | text-align: right; 30 | } 31 | 32 | @media(max-width:768px) { 33 | .projects .project-info { 34 | text-align: left; 35 | } 36 | } -------------------------------------------------------------------------------- /maodou/singlePages/client/components/admin/singlePagesConf/config/index.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react'; 2 | 3 | import Section from '../../../../containers/admin/singlePagesConf/config/section'; 4 | import Content from '../../../../containers/admin/singlePagesConf/config/content'; 5 | import Iframe from './iframe'; 6 | 7 | 8 | export default class Config extends Component { 9 | render () { 10 | const { selectedSection } = this.props; 11 | 12 | return ( 13 |
14 |
15 |
16 |
17 | { selectedSection ? :