├── .editorconfig ├── .gitattributes ├── .gitignore ├── .npmignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── apps ├── fis3 │ ├── components │ │ ├── browsehappy │ │ │ ├── bg.png │ │ │ ├── bg2.png │ │ │ ├── browsehappy.html │ │ │ ├── firefox.png │ │ │ ├── google.png │ │ │ ├── hj5.png │ │ │ ├── ie.png │ │ │ ├── me.png │ │ │ ├── opera.png │ │ │ └── safari.png │ │ ├── css │ │ │ ├── allInOne.css │ │ │ ├── animation.css │ │ │ ├── base.css │ │ │ ├── box.css │ │ │ ├── custom.css │ │ │ └── progressbar.css │ │ ├── iconfont │ │ │ ├── demo.css │ │ │ ├── demo.html │ │ │ ├── iconfont.css │ │ │ ├── iconfont.eot │ │ │ ├── iconfont.svg │ │ │ ├── iconfont.ttf │ │ │ └── iconfont.woff │ │ ├── ie │ │ │ ├── demo.md │ │ │ └── index.html │ │ ├── img │ │ │ ├── 139426.png │ │ │ ├── YHTML5.png │ │ │ ├── accountEmpty.png │ │ │ ├── background │ │ │ │ └── login-bg3.jpg │ │ │ ├── beijing.png │ │ │ ├── cat.jpeg │ │ │ ├── dog.jpeg │ │ │ ├── feature_notepad.png │ │ │ ├── feature_performance.png │ │ │ ├── girl.gif │ │ │ ├── gongshang.png │ │ │ ├── guangfa.png │ │ │ ├── html5 │ │ │ │ ├── css3-html5-js-logo.png │ │ │ │ ├── html5.png │ │ │ │ ├── html5_abstract_by_kohakuyoshida-d7c40lz.jpg │ │ │ │ └── ionic-package-diagram.jpg │ │ │ ├── huaxia.png │ │ │ ├── jianshe.png │ │ │ ├── jiaotong.png │ │ │ ├── listEmpty.png │ │ │ ├── minsheng.png │ │ │ ├── nongye.png │ │ │ ├── pufa.png │ │ │ ├── zhaoshang.png │ │ │ ├── zhifubao.png │ │ │ └── zhongguo.png │ │ ├── js │ │ │ ├── allInOne.js │ │ │ ├── angular │ │ │ │ ├── ng-ctrl.js │ │ │ │ ├── ng-directive.js │ │ │ │ ├── ng-filter.js │ │ │ │ └── ng-router.js │ │ │ ├── common.js │ │ │ ├── jquery │ │ │ │ ├── jq-do.js │ │ │ │ └── jq-fn.js │ │ │ ├── jsonp.js │ │ │ ├── jweixin-1.0.0.js │ │ │ ├── others │ │ │ │ └── login_interaction.js │ │ │ ├── string.js │ │ │ ├── validator.js │ │ │ └── vue │ │ │ │ └── data.js │ │ ├── other │ │ │ └── shape-shifter │ │ │ │ ├── shape-shifter.css │ │ │ │ ├── shape-shifter.html │ │ │ │ └── shape-shifter.js │ │ └── svg │ │ │ └── github.html │ ├── demo │ │ └── bootstrap4-for-designer │ │ │ ├── components │ │ │ ├── css │ │ │ │ └── yhtml5.css │ │ │ ├── img │ │ │ │ ├── banner0.png │ │ │ │ ├── banner1.png │ │ │ │ ├── banner2.png │ │ │ │ └── banner3.png │ │ │ └── js │ │ │ │ ├── do.js │ │ │ │ ├── fn.js │ │ │ │ ├── holder.min.js │ │ │ │ ├── tether.min.js │ │ │ │ └── yhtml5.js │ │ │ └── page │ │ │ ├── button │ │ │ └── index.html │ │ │ ├── card │ │ │ └── index.html │ │ │ ├── index.html │ │ │ ├── nav │ │ │ └── index.html │ │ │ └── navbar │ │ │ └── index.html │ ├── pages │ │ ├── banner │ │ │ ├── index.css │ │ │ ├── index.html │ │ │ └── lk.design.jpg │ │ ├── card │ │ │ ├── addProperty.html │ │ │ ├── index.css │ │ │ └── index.js │ │ ├── collapse │ │ │ ├── index.css │ │ │ └── infoCustom.html │ │ ├── footer │ │ │ ├── index.css │ │ │ └── index.html │ │ ├── formValidation │ │ │ ├── index.css │ │ │ └── index.js │ │ ├── index │ │ │ ├── allInOne.css │ │ │ ├── allInOne.js │ │ │ └── index.js │ │ ├── list │ │ │ ├── index.css │ │ │ ├── index.js │ │ │ ├── more.html │ │ │ └── order.html │ │ ├── login │ │ │ └── index.css │ │ ├── modal │ │ │ ├── choice.html │ │ │ ├── danger.html │ │ │ ├── index.css │ │ │ ├── index.js │ │ │ ├── invalid.html │ │ │ ├── modal.html │ │ │ ├── notice.html │ │ │ ├── noticeSimple1.design.png │ │ │ └── simple.html │ │ ├── nav │ │ │ ├── dateSelect.html │ │ │ ├── index.css │ │ │ ├── index.js │ │ │ ├── navSelect.html │ │ │ ├── orderManager.html │ │ │ └── simple.html │ │ ├── notice │ │ │ └── index.css │ │ ├── pickadate │ │ │ ├── date.html │ │ │ ├── index.css │ │ │ └── index.js │ │ ├── progress │ │ │ ├── index.css │ │ │ └── orderCreateStep.html │ │ ├── selects │ │ │ ├── buildings.html │ │ │ ├── index.css │ │ │ └── index.js │ │ ├── start │ │ │ ├── 1.js │ │ │ ├── 2.js │ │ │ ├── index.css │ │ │ ├── index.html │ │ │ ├── index2.css │ │ │ └── shape-shifter.js │ │ ├── table │ │ │ ├── index.css │ │ │ └── index.html │ │ └── test │ │ │ ├── other.html │ │ │ └── totalPut.html │ ├── server │ │ ├── author.css │ │ ├── author.js │ │ ├── console.js │ │ └── mock.json │ └── view-myBonus │ │ ├── accountBind │ │ ├── accountBind.html │ │ ├── accountBind.js │ │ ├── tab.html │ │ └── tabTitle.html │ │ ├── agreement │ │ ├── agreement.html │ │ ├── agreement.js │ │ ├── content.html │ │ ├── enterSignature.html │ │ ├── nav.html │ │ └── signature.html │ │ ├── authentication │ │ ├── IDcard.form.html │ │ ├── IDcard.html │ │ ├── actionsheet.html │ │ ├── authentication.html │ │ ├── authentication.js │ │ ├── authentication.php.js │ │ └── nav.html │ │ ├── bankCardDetail │ │ ├── bankCardDetail.html │ │ └── bankCardDetail.js │ │ ├── bankCardList │ │ ├── bankCardList.html │ │ ├── bankCardList.js │ │ ├── bankList.html │ │ └── nav.html │ │ ├── components │ │ ├── actionsheet │ │ │ └── index.css │ │ ├── banner │ │ │ └── index.css │ │ ├── card │ │ │ └── index.css │ │ ├── list │ │ │ └── index.css │ │ ├── nav │ │ │ └── index.css │ │ ├── notice │ │ │ └── index.css │ │ ├── signature │ │ │ └── index.css │ │ └── vue.css │ │ ├── myBonus │ │ ├── banner.html │ │ ├── footer.html │ │ ├── list.account.html │ │ ├── list.waterDetails.html │ │ ├── myBonus.html │ │ ├── myBonus.js │ │ └── nav.html │ │ ├── other │ │ ├── accountBind.html_aio.js │ │ ├── agreement.html_aio.js │ │ ├── authentication.html_aio-old.js │ │ ├── authentication.html_aio.js │ │ ├── bankCardDetail.html_aio.js │ │ ├── bankCardList.html_aio.js │ │ ├── myBonus.html_aio.js │ │ ├── record.html_aio.js │ │ └── withdrawals.html_aio.js │ │ ├── question │ │ └── question.html │ │ ├── record │ │ ├── record.html │ │ ├── record.js │ │ ├── recordList.html │ │ └── recordType.html │ │ ├── start │ │ ├── 1.js │ │ ├── 2.js │ │ ├── index.css │ │ ├── index.html │ │ └── shape-shifter.js │ │ ├── test │ │ ├── img.base64.html │ │ ├── other.html │ │ └── totalPut.html │ │ └── withdrawals │ │ ├── accountList.html │ │ ├── enterMoney.html │ │ ├── footer.html │ │ ├── selectAccount.html │ │ ├── withdrawals.html │ │ └── withdrawals.js ├── mpa │ └── .yhtml5 ├── react-dashboard │ ├── .config.js │ ├── .editorconfig │ ├── .eslintignore │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── document │ │ └── document.md │ ├── package-lock.json │ ├── package.json │ ├── production │ │ └── .yhtml5 │ ├── public │ │ ├── favicon.ico │ │ ├── index.html │ │ ├── logo.png │ │ └── manifest.json │ └── src │ │ ├── Components │ │ ├── Breadcrumb │ │ │ └── index.jsx │ │ ├── Form │ │ │ ├── Select.jsx │ │ │ └── Time.jsx │ │ ├── HelloWorld.jsx │ │ ├── LazilyLoad │ │ │ ├── Bundle.jsx │ │ │ └── index.jsx │ │ ├── Search │ │ │ └── .yhtml5 │ │ ├── Table │ │ │ └── index.jsx │ │ ├── Test │ │ │ ├── a.js │ │ │ ├── b.js │ │ │ ├── c.js │ │ │ ├── codeSplitting.js │ │ │ ├── environment.js │ │ │ ├── index.js │ │ │ └── treeShaking.js │ │ ├── Upload │ │ │ ├── PicturesWall.jsx │ │ │ └── PicturesWall.pcss │ │ └── editor │ │ │ ├── index.js │ │ │ ├── index.pcss │ │ │ └── wangeditor │ │ │ ├── .gitattributes │ │ │ ├── .jshintrc │ │ │ ├── .npmignore │ │ │ ├── .npminstall.done │ │ │ ├── Gruntfile.js │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── bower.json │ │ │ └── package.json │ │ ├── Containers │ │ ├── App │ │ │ ├── action.js │ │ │ ├── ajax.js │ │ │ ├── reduce.js │ │ │ ├── route.js │ │ │ ├── state.js │ │ │ └── task.js │ │ ├── Demo │ │ │ ├── Components │ │ │ │ ├── Test.jsx │ │ │ │ └── Test.pcss │ │ │ ├── action.js │ │ │ ├── ajax.js │ │ │ ├── index.jsx │ │ │ ├── reduce.js │ │ │ ├── state.js │ │ │ └── task.js │ │ ├── Document │ │ │ ├── Components │ │ │ │ ├── Document.jsx │ │ │ │ ├── Document.pcss │ │ │ │ └── document.md │ │ │ ├── action.js │ │ │ ├── ajax.js │ │ │ ├── index.jsx │ │ │ ├── reduce.js │ │ │ ├── state.js │ │ │ └── task.js │ │ ├── Form │ │ │ ├── Components │ │ │ │ ├── Form.jsx │ │ │ │ ├── Form.pcss │ │ │ │ ├── Header.jsx │ │ │ │ ├── Test.jsx │ │ │ │ └── Test.pcss │ │ │ ├── action.js │ │ │ ├── ajax.js │ │ │ ├── index.jsx │ │ │ ├── reduce.js │ │ │ ├── state.js │ │ │ └── task.js │ │ ├── Function │ │ │ ├── Components │ │ │ │ ├── Cards.jsx │ │ │ │ └── Cards.pcss │ │ │ ├── action.js │ │ │ ├── ajax.js │ │ │ ├── index.jsx │ │ │ ├── reduce.js │ │ │ ├── state.js │ │ │ └── task.js │ │ ├── Layout │ │ │ ├── Components │ │ │ │ ├── Content.jsx │ │ │ │ ├── Footer.jsx │ │ │ │ ├── Header.jsx │ │ │ │ ├── Header.pcss │ │ │ │ ├── Sider.jsx │ │ │ │ └── Sider.pcss │ │ │ ├── action.js │ │ │ ├── index.jsx │ │ │ ├── reduce.js │ │ │ ├── state.js │ │ │ └── task.js │ │ ├── Live │ │ │ ├── Components │ │ │ │ ├── Form.jsx │ │ │ │ ├── Form.pcss │ │ │ │ ├── FormImage.jsx │ │ │ │ ├── FormStep.jsx │ │ │ │ ├── FormVideo.jsx │ │ │ │ ├── Search.jsx │ │ │ │ ├── Table.jsx │ │ │ │ └── TableHeader.jsx │ │ │ ├── action.js │ │ │ ├── ajax.js │ │ │ ├── index.jsx │ │ │ ├── index.pcss │ │ │ ├── indexAdd.jsx │ │ │ ├── indexEdit.jsx │ │ │ ├── reduce.js │ │ │ ├── state.js │ │ │ └── task.js │ │ ├── Login │ │ │ ├── Components │ │ │ │ ├── Background.jsx │ │ │ │ ├── Background.pcss │ │ │ │ ├── Form.jsx │ │ │ │ └── Form.pcss │ │ │ ├── action.js │ │ │ ├── ajax.js │ │ │ ├── index.jsx │ │ │ ├── reduce.js │ │ │ ├── state.js │ │ │ └── task.js │ │ ├── Navigation │ │ │ ├── Components │ │ │ │ ├── Modal.jsx │ │ │ │ ├── Search.jsx │ │ │ │ ├── Table.jsx │ │ │ │ └── TableHeader.jsx │ │ │ ├── action.js │ │ │ ├── ajax.js │ │ │ ├── index.jsx │ │ │ ├── index.pcss │ │ │ ├── reduce.js │ │ │ ├── state.js │ │ │ └── task.js │ │ └── Packages │ │ │ ├── Components │ │ │ ├── Form.jsx │ │ │ ├── Form.pcss │ │ │ ├── FormStyle1.jsx │ │ │ ├── FormStyle2.jsx │ │ │ ├── FormStyle3.jsx │ │ │ ├── FormStyle4.jsx │ │ │ ├── FormStyle5.jsx │ │ │ ├── FormStyle6.jsx │ │ │ ├── FormStyle7.jsx │ │ │ ├── FormStyle8.jsx │ │ │ ├── FormStyles.jsx │ │ │ ├── Header.jsx │ │ │ ├── Header.pcss │ │ │ ├── Modal.pcss │ │ │ ├── ModalColumns.jsx │ │ │ ├── ModalIntro.jsx │ │ │ ├── Table.jsx │ │ │ ├── TableHeader.jsx │ │ │ ├── index.pcss │ │ │ └── introduction.png │ │ │ ├── action.js │ │ │ ├── ajax.js │ │ │ ├── index.jsx │ │ │ ├── indexAddEdit.jsx │ │ │ ├── reduce.js │ │ │ ├── state.js │ │ │ └── task.js │ │ ├── Router.jsx │ │ ├── __test__ │ │ ├── Components │ │ │ └── HelloWorld.test.jsx │ │ ├── Router.test.js │ │ └── validator.test.js │ │ ├── config.js │ │ ├── global.css │ │ ├── index.js │ │ ├── redux │ │ ├── actions.js │ │ ├── reducers.js │ │ └── store.js │ │ ├── static │ │ ├── favicon.ico │ │ ├── img │ │ │ └── .yhtml5 │ │ ├── yh.png │ │ └── yhtml5.png │ │ └── util │ │ ├── ajax.js │ │ ├── cookie.js │ │ ├── index.js │ │ ├── localStorage.js │ │ ├── polyfill.js │ │ ├── prototype.js │ │ ├── security.js │ │ ├── util.js │ │ ├── validator.js │ │ └── validator.test.js └── vue │ ├── build │ ├── build.js │ ├── check-versions.js │ ├── dev-client.js │ ├── dev-server.js │ ├── utils.js │ ├── webpack.base.conf.js │ ├── webpack.dev.conf.js │ └── webpack.prod.conf.js │ ├── config │ ├── dev.env.js │ ├── index.js │ ├── prod.env.js │ └── test.env.js │ ├── dist │ └── v1.0.0-2016125204718 │ │ ├── index.html │ │ └── static │ │ ├── css │ │ ├── app.df8dcf776905a9f955261c5def67c48d.css │ │ └── app.df8dcf776905a9f955261c5def67c48d.css.map │ │ ├── favicon.ico │ │ ├── img │ │ ├── icon │ │ │ └── bootstrap.png │ │ └── logo.82b9c7a.png │ │ └── js │ │ ├── app.dacf26fe700e7c0ace5e.js │ │ ├── app.dacf26fe700e7c0ace5e.js.map │ │ ├── manifest.4804dd64a6f48c93a79f.js │ │ ├── manifest.4804dd64a6f48c93a79f.js.map │ │ ├── vendor.9bfa2c2df1213448c889.js │ │ └── vendor.9bfa2c2df1213448c889.js.map │ ├── src │ ├── assets │ │ └── logo.png │ ├── components │ │ ├── Hello.vue │ │ ├── header.vue │ │ └── search.vue │ ├── index.html │ ├── index.js │ ├── router │ │ ├── home.vue │ │ └── router.js │ └── style │ │ └── variable.less │ ├── static │ ├── .gitkeep │ ├── favicon.ico │ └── img │ │ └── icon │ │ └── bootstrap.png │ └── test │ ├── e2e │ ├── custom-assertions │ │ └── elementCount.js │ ├── nightwatch.conf.js │ ├── reports │ │ └── CHROME_54.0.2840.98_MAC_test.xml │ ├── runner.js │ └── specs │ │ └── test.js │ └── unit │ ├── .eslintrc │ ├── coverage │ ├── lcov-report │ │ ├── base.css │ │ ├── index.html │ │ ├── prettify.css │ │ ├── prettify.js │ │ ├── sort-arrow-sprite.png │ │ ├── sorter.js │ │ └── src │ │ │ ├── App.vue.html │ │ │ ├── components │ │ │ ├── Hello.vue.html │ │ │ └── index.html │ │ │ ├── index.html │ │ │ └── router │ │ │ ├── index.html │ │ │ └── index.js.html │ └── lcov.info │ ├── index.js │ ├── karma.conf.js │ └── specs │ └── Hello.spec.js ├── desigin ├── favicon.ico ├── yh.png └── yhtml5.png ├── exmaple └── .yhtml5 ├── package-lock.json ├── package.json ├── problems.md └── server └── package.json /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | 15 | [Makefile] 16 | indent_style = tab 17 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.html linguist-language=javascript -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # custom 2 | logs/* 3 | /**/node_modules/ 4 | /**/bower_components/ 5 | npm-debug.log 6 | coverage 7 | 8 | tmp 9 | .DS_Store 10 | .idea 11 | *.swp 12 | .test.html.swp 13 | .test.html.swo 14 | !.gitkeep 15 | 16 | 17 | # Windows image file caches 18 | Thumbs.db 19 | ehthumbs.db 20 | 21 | # Folder config file 22 | Desktop.ini 23 | 24 | # Recycle Bin used on file shares 25 | $RECYCLE.BIN/ 26 | 27 | # Windows Installer files 28 | *.cab 29 | *.msi 30 | *.msm 31 | *.msp 32 | 33 | # Windows shortcuts 34 | *.lnk 35 | 36 | # ========================= 37 | # Operating System Files 38 | # ========================= 39 | 40 | # OSX 41 | # ========================= 42 | 43 | .DS_Store 44 | .AppleDouble 45 | .LSOverride 46 | 47 | # Thumbnails 48 | ._* 49 | 50 | # Files that might appear in the root of a volume 51 | .DocumentRevisions-V100 52 | .fseventsd 53 | .Spotlight-V100 54 | .TemporaryItems 55 | .Trashes 56 | .VolumeIcon.icns 57 | 58 | # Directories potentially created on remote AFP share 59 | .AppleDB 60 | .AppleDesktop 61 | Network Trash Folder 62 | Temporary Items 63 | .apdisk 64 | 65 | /npm-debug.log 66 | /apps/estateManagement/ 67 | /apps/react-dashboard/production/家装官网v1.0后台/ 68 | /node_modules/ 69 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | demo/ 2 | node_modules/ 3 | examples/ 4 | test/ 5 | /src/*.vue 6 | /src/*.js 7 | /src/*.html 8 | /src/assets/ 9 | /src/demos/ 10 | favicon.ico 11 | logo.png 12 | CNAME 13 | circle.yml 14 | bower.json 15 | /assets/ 16 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ### changeLog 2 | 3 | 4 | #### v0.3.1 (2017.1.11) 5 | * **change** | use webpack build a front end project instead of fis3 6 | * **delete** | delete stacks which require fis3 7 | * **add** | add `.editorconfig, .eslint` for uniform code style 8 | 9 | #### v0.2.1 (2016.12.06) 10 | 11 | * **update** | add package.md to display modules that used or out time 12 | * **release** | git tag v0.2.1 13 | * **note** | we'll never use fis3 bower and no longer support v0.2.1 version 14 | * **add** | add editorconfig http://editorconfig.org/ 15 | 16 | #### v0.2.0 (2016.08.11) 17 | 18 | * 优化 | 融合SPA单页应用模式, 以及普通开发模式 不再以按文件夹区分 19 | * 合并 | merging some files, /components/head.html, /bower.json 20 | * 更新 | update README.md, /components/ie 21 | * 新增 | add CHANGELOG.md, components.md, 22 | * 新增 | add yhtml5Validator, signature_pad canvas 23 | * 新增 | add vue workflow 24 | 25 | 26 | #### v0.1.0 (2015-11-11) 27 | 28 | * create project 29 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016-2018 张大漾 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /apps/fis3/components/browsehappy/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/browsehappy/bg.png -------------------------------------------------------------------------------- /apps/fis3/components/browsehappy/bg2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/browsehappy/bg2.png -------------------------------------------------------------------------------- /apps/fis3/components/browsehappy/firefox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/browsehappy/firefox.png -------------------------------------------------------------------------------- /apps/fis3/components/browsehappy/google.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/browsehappy/google.png -------------------------------------------------------------------------------- /apps/fis3/components/browsehappy/hj5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/browsehappy/hj5.png -------------------------------------------------------------------------------- /apps/fis3/components/browsehappy/ie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/browsehappy/ie.png -------------------------------------------------------------------------------- /apps/fis3/components/browsehappy/me.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/browsehappy/me.png -------------------------------------------------------------------------------- /apps/fis3/components/browsehappy/opera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/browsehappy/opera.png -------------------------------------------------------------------------------- /apps/fis3/components/browsehappy/safari.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/browsehappy/safari.png -------------------------------------------------------------------------------- /apps/fis3/components/css/allInOne.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/css/allInOne.css -------------------------------------------------------------------------------- /apps/fis3/components/css/base.css: -------------------------------------------------------------------------------- 1 | /* 2 | * @require animation.css 3 | * @require box.css 4 | * @require custom.css 5 | */ 6 | 7 | /*==================== base ====================*/ 8 | 9 | .y-bgc-000 { 10 | background-color: #000; 11 | } 12 | 13 | .y-bgc-333 { 14 | background-color: #333; 15 | } 16 | 17 | .y-bgc-666 { 18 | background-color: #666; 19 | } 20 | 21 | .y-bgc-999 { 22 | background-color: #999; 23 | } 24 | 25 | .y-bgc-ccc { 26 | background-color: #ccc; 27 | } 28 | 29 | .y-bgc-fff { 30 | background-color: #fff; 31 | } 32 | 33 | .y-bgc-f5f5f5 { 34 | background-color: #f5f5f5; 35 | } 36 | 37 | .y-bgc-ff0000 { 38 | background-color: #ff0000; 39 | } 40 | 41 | .y-cl-000 { 42 | color: #000; 43 | } 44 | 45 | .y-cl-333 { 46 | color: #333; 47 | } 48 | 49 | .y-cl-666 { 50 | color: #666; 51 | } 52 | 53 | .y-cl-999 { 54 | color: #999; 55 | } 56 | 57 | .y-cl-ccc { 58 | color: #ccc; 59 | } 60 | 61 | .y-cl-ddd { 62 | color: #ddd; 63 | } 64 | 65 | .y-cl-eee { 66 | color: #eee; 67 | } 68 | 69 | .y-cl-fff { 70 | color: #fff; 71 | } 72 | 73 | .y-cl-f5f5f5 { 74 | color: #f5f5f5; 75 | } 76 | 77 | .y-cl-ff0000 { 78 | color: #ff0000; 79 | } 80 | 81 | .y-fs-14 { 82 | font-size: 14px; 83 | } 84 | 85 | .y-fs-16 { 86 | font-size: 16px; 87 | } 88 | 89 | .y-fs-18 { 90 | font-size: 18px; 91 | } 92 | 93 | .y-fs-24 { 94 | font-size: 24px; 95 | } 96 | 97 | .y-fs-28 { 98 | font-size: 28px; 99 | } 100 | 101 | .y-fs-36 { 102 | font-size: 36px; 103 | } 104 | 105 | .y-fs-48 { 106 | font-size: 50px; 107 | } 108 | 109 | .y-fs-90 { 110 | font-size: 90px; 111 | } 112 | 113 | .y-fs-120 { 114 | font-size: 120px; 115 | } 116 | 117 | .y-fw-b { 118 | font-weight: 700; 119 | } 120 | 121 | .y-fw-n { 122 | font-weight: 400; 123 | } -------------------------------------------------------------------------------- /apps/fis3/components/css/custom.css: -------------------------------------------------------------------------------- 1 | .table .y-td-xs { 2 | max-width: 10px; 3 | } 4 | 5 | .table .y-td-sm { 6 | max-width: 50px; 7 | } 8 | 9 | .table .y-td-md { 10 | max-width: 100px; 11 | } 12 | 13 | .table .y-td-lg { 14 | max-width: 324px; 15 | min-width: 200px; 16 | } 17 | 18 | .text-left { 19 | text-align: left; 20 | } 21 | 22 | .text-center { 23 | text-align: center; 24 | } 25 | 26 | .text-indent-2 { 27 | text-indent: 2em; 28 | } 29 | 30 | .text-right { 31 | text-align: right; 32 | } 33 | 34 | .text-truncate { 35 | overflow: hidden; 36 | text-overflow: ellipsis; 37 | white-space: nowrap; 38 | } -------------------------------------------------------------------------------- /apps/fis3/components/css/progressbar.css: -------------------------------------------------------------------------------- 1 | .y-progress-step { 2 | max-width: 1600px; 3 | margin-left: auto; 4 | margin-right: auto; 5 | margin-bottom: 30px; 6 | overflow: hidden; 7 | padding-left: 0; 8 | /*CSS counters to number the steps*/ 9 | counter-reset: step; 10 | } 11 | 12 | .y-progress-step li { 13 | list-style-type: none; 14 | color: #a9a9a9; 15 | text-transform: uppercase; 16 | font-size: 18px; 17 | width: 33.33%; 18 | float: left; 19 | position: relative; 20 | text-align: center; 21 | } 22 | 23 | .y-progress-step li:before { 24 | content: counter(step); 25 | counter-increment: step; 26 | width: 30px; 27 | line-height: 30px; 28 | display: block; 29 | font-size: 16px; 30 | color: #fff; 31 | background: #a9a9a9; 32 | border-radius: 50%; 33 | margin: 0 auto 5px auto; 34 | } 35 | 36 | /*progressbar connectors*/ 37 | 38 | .y-progress-step li:after { 39 | content: ''; 40 | width: 100%; 41 | height: 2px; 42 | background: #a9a9a9; 43 | position: absolute; 44 | left: -50%; 45 | top: 14px; 46 | z-index: -1; 47 | /*put it behind the numbers*/ 48 | } 49 | 50 | .y-progress-step li:first-child:after { 51 | content: none; 52 | /*connector not needed before the first step*/ 53 | } 54 | 55 | /*marking active/completed steps green*/ 56 | 57 | /*The number of the step and the connector before it = green*/ 58 | 59 | .y-progress-step li.active:before, 60 | .y-progress-step li.active:after { 61 | background: #099fdd; 62 | color: white; 63 | } 64 | 65 | .y-progress-step li.active:before, 66 | .y-progress-step li.active:after { 67 | background: #099fdd; 68 | color: white; 69 | } 70 | 71 | .y-progress-step .active .y-turn-blue { 72 | color: #099fdd; 73 | } -------------------------------------------------------------------------------- /apps/fis3/components/iconfont/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/iconfont/iconfont.eot -------------------------------------------------------------------------------- /apps/fis3/components/iconfont/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/iconfont/iconfont.ttf -------------------------------------------------------------------------------- /apps/fis3/components/iconfont/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/iconfont/iconfont.woff -------------------------------------------------------------------------------- /apps/fis3/components/ie/demo.md: -------------------------------------------------------------------------------- 1 | ## 条件注释判断浏览器版本 [引用地址] 2 | 3 | 4 | ### operator 5 | * ! [if !IE] --NOT运算符 6 | * lt [if lt IE 5.5] --小于运算符 7 | * lte [if lte IE 6] --小于或等于运算 8 | * gt [if gt IE 5] --大于运算符 9 | * gte [if gte IE 7] --大于或等于运算 10 | * ( ) [if !(IE 7)] --子表达式。在与布尔运算符用于创建更复杂的表达式 11 | * & [if (gt IE 5)&(lt IE 7)] --AND运算符 12 | * | [if (IE 6)|(IE 7)] --OR运算符 13 | 14 | > less-than, equal, greater-than, operator 15 | 16 | 17 | ### demo 18 | 19 | ``` 20 | 除IE外都可识别 21 | 22 | 23 | 24 | 25 | 26 | 27 | ``` 28 | 29 | ### usage 30 | 31 | ``` 32 | 加载CSS2 33 | 36 | ``` 37 | 38 | [引用地址]:http://www.cnblogs.com/thinkingthigh/archive/2013/06/19/3144239.html -------------------------------------------------------------------------------- /apps/fis3/components/ie/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/fis3/components/img/139426.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/img/139426.png -------------------------------------------------------------------------------- /apps/fis3/components/img/YHTML5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/img/YHTML5.png -------------------------------------------------------------------------------- /apps/fis3/components/img/accountEmpty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/img/accountEmpty.png -------------------------------------------------------------------------------- /apps/fis3/components/img/background/login-bg3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/img/background/login-bg3.jpg -------------------------------------------------------------------------------- /apps/fis3/components/img/beijing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/img/beijing.png -------------------------------------------------------------------------------- /apps/fis3/components/img/cat.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/img/cat.jpeg -------------------------------------------------------------------------------- /apps/fis3/components/img/dog.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/img/dog.jpeg -------------------------------------------------------------------------------- /apps/fis3/components/img/feature_notepad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/img/feature_notepad.png -------------------------------------------------------------------------------- /apps/fis3/components/img/feature_performance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/img/feature_performance.png -------------------------------------------------------------------------------- /apps/fis3/components/img/girl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/img/girl.gif -------------------------------------------------------------------------------- /apps/fis3/components/img/gongshang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/img/gongshang.png -------------------------------------------------------------------------------- /apps/fis3/components/img/guangfa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/img/guangfa.png -------------------------------------------------------------------------------- /apps/fis3/components/img/html5/css3-html5-js-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/img/html5/css3-html5-js-logo.png -------------------------------------------------------------------------------- /apps/fis3/components/img/html5/html5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/img/html5/html5.png -------------------------------------------------------------------------------- /apps/fis3/components/img/html5/html5_abstract_by_kohakuyoshida-d7c40lz.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/img/html5/html5_abstract_by_kohakuyoshida-d7c40lz.jpg -------------------------------------------------------------------------------- /apps/fis3/components/img/html5/ionic-package-diagram.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/img/html5/ionic-package-diagram.jpg -------------------------------------------------------------------------------- /apps/fis3/components/img/huaxia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/img/huaxia.png -------------------------------------------------------------------------------- /apps/fis3/components/img/jianshe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/img/jianshe.png -------------------------------------------------------------------------------- /apps/fis3/components/img/jiaotong.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/img/jiaotong.png -------------------------------------------------------------------------------- /apps/fis3/components/img/listEmpty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/img/listEmpty.png -------------------------------------------------------------------------------- /apps/fis3/components/img/minsheng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/img/minsheng.png -------------------------------------------------------------------------------- /apps/fis3/components/img/nongye.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/img/nongye.png -------------------------------------------------------------------------------- /apps/fis3/components/img/pufa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/img/pufa.png -------------------------------------------------------------------------------- /apps/fis3/components/img/zhaoshang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/img/zhaoshang.png -------------------------------------------------------------------------------- /apps/fis3/components/img/zhifubao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/img/zhifubao.png -------------------------------------------------------------------------------- /apps/fis3/components/img/zhongguo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/components/img/zhongguo.png -------------------------------------------------------------------------------- /apps/fis3/components/js/allInOne.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | -------------------------------------------------------------------------------- /apps/fis3/components/js/angular/ng-ctrl.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @require router.js 3 | * @require directive.js 4 | * @require filter.js 5 | */ 6 | /************************* Ctrl *****************************/ 7 | angular.module('controllers', []) 8 | .controller('controllers', function($scope) { 9 | 10 | }) 11 | .controller('smsConfirmCtrl', function($scope) { 12 | 13 | }) -------------------------------------------------------------------------------- /apps/fis3/components/js/angular/ng-directive.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @require router.js 3 | */ 4 | /************************* Require *****************************/ 5 | angular.module('directive', []) 6 | .directive("repeat", [function() { 7 | return { 8 | restrict: 'A', 9 | require: "ngModel", 10 | link: function(scope, element, attrs, ctrl) { 11 | if (ctrl) { 12 | var otherInput = element.inheritedData("$formController")[attrs.repeat]; 13 | var repeatValidator = function(value) { 14 | var validity = value === otherInput.$viewValue; 15 | ctrl.$setValidity("repeat", validity); 16 | return validity ? value : undefined; 17 | }; 18 | ctrl.$parsers.push(repeatValidator); 19 | ctrl.$formatters.push(repeatValidator); 20 | otherInput.$parsers.push(function(value) { 21 | ctrl.$setValidity("repeat", value === ctrl.$viewValue); 22 | return value; 23 | }); 24 | } 25 | } 26 | }; 27 | }]); -------------------------------------------------------------------------------- /apps/fis3/components/js/angular/ng-filter.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @require router.js 3 | */ 4 | /************************* Filter *****************************/ 5 | -------------------------------------------------------------------------------- /apps/fis3/components/js/angular/ng-router.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @require ../../../server/author.js 3 | */ 4 | /************************* Router *****************************/ 5 | angular.module('yhtml5', [ 6 | 'ui.router', 7 | 'controllers', 8 | 'directive' 9 | ]) 10 | .config(['$compileProvider', function ($compileProvider) { 11 | $compileProvider.aHrefSanitizationWhitelist(/^\s*(|blob|):/); 12 | }]) 13 | .config(function ($stateProvider, $urlRouterProvider) { 14 | $urlRouterProvider 15 | //.when('/dashboard/*', '/dashboard') 16 | .otherwise("") 17 | $stateProvider 18 | .state('dashboard', { 19 | url: "/dashboard", 20 | views: { 21 | "nav": { 22 | templateUrl: "" 23 | }, 24 | "content": { 25 | templateUrl: "" 26 | } 27 | } 28 | }) 29 | }) -------------------------------------------------------------------------------- /apps/fis3/components/js/common.js: -------------------------------------------------------------------------------- 1 | /* 判断浏览器类型 */ 2 | var browserKeywordsMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Opera Mobi|Windows CE|Symbian|Windows Phone|POLARIS|lgtelecom|nokia|SonyEricsson|LG|SAMSUNG|Samsung/i; 3 | var isBrowserMobile = browserKeywordsMobile.test(navigator.userAgent); 4 | if (isBrowserMobile) { 5 | console.log(isBrowserMobile); 6 | } else { 7 | // console.log(a); 8 | } 9 | 10 | function userBrowser(){ 11 | var browserName=navigator.userAgent.toLowerCase(); 12 | if(/msie/i.test(browserName) && !/opera/.test(browserName)){ 13 | alert("IE"); 14 | return ; 15 | }else if(/firefox/i.test(browserName)){ 16 | alert("Firefox"); 17 | return ; 18 | }else if(/chrome/i.test(browserName) && /webkit/i.test(browserName) && /mozilla/i.test(browserName)){ 19 | alert("Chrome"); 20 | return ; 21 | }else if(/opera/i.test(browserName)){ 22 | alert("Opera"); 23 | return ; 24 | }else if(/webkit/i.test(browserName) &&!(/chrome/i.test(browserName) && /webkit/i.test(browserName) && /mozilla/i.test(browserName))){ 25 | alert("Safari"); 26 | return ; 27 | }else{ 28 | alert("unKnow"); 29 | } 30 | } -------------------------------------------------------------------------------- /apps/fis3/components/js/jquery/jq-do.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @require fn.js 3 | * @require shape-shifter.js 4 | */ 5 | /************ do ************/ 6 | $(function () { 7 | getStart(); 8 | doCarouselScanPayDemo(4000) 9 | initDatetimepicker("[y-data='record.timeStart'],[y-data='record.timeEnd']") 10 | toggleValue("[y-menu='record.status'] > li > a", "click", "[y-input='record.status']"); 11 | yFadeToggle("[y-popoper='uploadQRcode'] a", "mouseenter", "mouseleave", "[y-popoper='payee.ewmsml'] img"); 12 | yFadeToggle("[y-popoper='noopsycheMoney']", "mouseenter", "mouseleave", "[y-popoper='infoUl']"); 13 | yFadeToggle("[y-popoper='payee.modified.show.QRcode']", "mouseenter", "mouseleave", "[y-popoper='payee.modified.QRcode'] img"); 14 | $("[y-navbar='nav.user.img']").mouseover(function () { 15 | $("[y-navbar='nav.float.window']").fadeIn(); 16 | }); 17 | $("[y-close='nav.userPanel']").mouseleave(function () { 18 | $("[y-navbar='nav.float.window']").fadeOut(); 19 | }); 20 | toggleActive(".y-nav a", 'click') 21 | }); 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /apps/fis3/components/js/jsonp.js: -------------------------------------------------------------------------------- 1 | 2 | var oScript = document.createElement('script'); 3 | oScript.src = 'http://suggestion.baidu.com/su?wd='+oTxt.value+'&p=3&cb=baidu&from=superpage'; 4 | document.body.appendChild(oScript); 5 | 6 | if(oScript){ 7 | document.body.removeChild(oScript); 8 | } -------------------------------------------------------------------------------- /apps/fis3/components/js/string.js: -------------------------------------------------------------------------------- 1 | // 有这样一个URL 输出函数QuerySearch(),其有一个参数name,输出其对应的value。解析:主要就是进行两次分割。 2 | 'use strict'; 3 | function querySearch(url, name) { 4 | var arr = url.split('?')[1].split('&'); 5 | console.log(arr) 6 | var str = name + '=', index, start; 7 | for (var i = 0; i < arr.length;) { 8 | index = arr[i].indexOf(str); 9 | if (index < 0) { 10 | i++; 11 | } else { 12 | start = index + str.length; 13 | return arr[i].slice(start); 14 | } 15 | } 16 | return ""; 17 | } 18 | 19 | var result = querySearch("http://mail.163.com/?a=1&b=2&c=3&d=xxx&e") 20 | console.log(result) -------------------------------------------------------------------------------- /apps/fis3/components/js/validator.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Enter JavaScript-style regular expression to display 3 | * https://regexper.com/ 4 | * Write and test regular expression 5 | * http://www.regexr.com/ 6 | */ 7 | 8 | var yhtml5Validator = { 9 | isBankCardNum: function () { 10 | var result = /^(\d{14}|\d{16}|\d{19})$/.test(str); 11 | return result 12 | }, 13 | isChinaName: function () { 14 | var result = /^[\u4e00-\u9fa5]{1,10}$/.test(str); 15 | return result 16 | }, 17 | isChinaPhoneNum: function () { 18 | var result = /^(13[0-9]|14[5|7]|15[0-9]|18[0-9])\d{8}$/.test(str); 19 | return result 20 | }, 21 | isEmail: function () { 22 | var result = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(str); 23 | return result 24 | }, 25 | isIdCard: function (str) { 26 | var result = /^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$/.test(str); 27 | return result 28 | }, 29 | isNum: function () { 30 | var result = /^[0-9]*$/.test(str); 31 | return result 32 | }, 33 | isNumSix: function () { 34 | var result = /^[a-zA-Z0-9]\w{5}$/.test(str); 35 | return result 36 | }, 37 | isNumSixToTwenty: function () { 38 | var result = /^[a-zA-Z0-9]\w{5,19}$/.test(str); 39 | return result 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /apps/fis3/components/js/vue/data.js: -------------------------------------------------------------------------------- 1 | var yhtml5Data = { 2 | notice: { 3 | isLoading: false, 4 | isSuccess: false, 5 | isValid: false, 6 | text: '' 7 | }, 8 | confirm: { 9 | isShow:false, 10 | text:'', 11 | title:'', 12 | cancel:'', 13 | confirm:'' 14 | }, 15 | canvasSignature: { 16 | id: document.getElementById("canvasSignature"), 17 | option: { 18 | minWidth: 4, 19 | maxWidth: 6, 20 | penColor: "#333" 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /apps/fis3/demo/bootstrap4-for-designer/components/css/yhtml5.css: -------------------------------------------------------------------------------- 1 | /*========================================================================================= 2 | * Author:Kyle|张大漾 3 | * Author Website:http://yhtml5.com 4 | * Author Gihub:https://github.com/yhtml5 5 | * Description: A Website disgned by boostrap and Jquery.Do something awesome and have fun ! 6 | *==========================================================================================*/ 7 | 8 | 9 | /* base style 10 | * ========== */ 11 | .css-boeder-radius0{ 12 | border-radius: 0; 13 | } 14 | .css-height500 { 15 | height: 500px; 16 | } 17 | .css-mt54 { 18 | margin-top: 54px; 19 | } 20 | .css-width80 { 21 | width: 80%; 22 | } 23 | 24 | .css-width100 { 25 | width: 100%; 26 | } 27 | 28 | 29 | /* cover bootstrap 30 | * =============== */ 31 | 32 | 33 | /* style customized 34 | * ================ */ 35 | .css-banner { 36 | text-align: center; 37 | height: 400px; 38 | overflow: hidden; 39 | background: rgba(0, 0, 0, 0) linear-gradient(135deg, #271b38, #563d7c, #7952b3) repeat scroll 0 0; 40 | } 41 | 42 | .css-banner .lead { 43 | color: #fff; 44 | font-size: 2rem; 45 | line-height: 3rem; 46 | width: 70%; 47 | margin-left: auto; 48 | margin-right: auto; 49 | } 50 | .css-banner button{ 51 | margin-top: 2rem; 52 | margin-bottom: 2rem; 53 | font-size: 4rem; 54 | border-radius: 10px; 55 | } 56 | .css-banner img { 57 | margin-left: auto; 58 | margin-right: auto; 59 | max-width: 500px; 60 | } 61 | 62 | .demo-button button { 63 | margin-bottom: 10px; 64 | } 65 | 66 | .btn-group-vertical button { 67 | margin-bottom: 0; 68 | } -------------------------------------------------------------------------------- /apps/fis3/demo/bootstrap4-for-designer/components/img/banner0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/demo/bootstrap4-for-designer/components/img/banner0.png -------------------------------------------------------------------------------- /apps/fis3/demo/bootstrap4-for-designer/components/img/banner1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/demo/bootstrap4-for-designer/components/img/banner1.png -------------------------------------------------------------------------------- /apps/fis3/demo/bootstrap4-for-designer/components/img/banner2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/demo/bootstrap4-for-designer/components/img/banner2.png -------------------------------------------------------------------------------- /apps/fis3/demo/bootstrap4-for-designer/components/img/banner3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/demo/bootstrap4-for-designer/components/img/banner3.png -------------------------------------------------------------------------------- /apps/fis3/demo/bootstrap4-for-designer/components/js/do.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @require fn.js 3 | * @require shape-shifter.js 4 | */ 5 | /************ do ************/ 6 | $(function () { 7 | getStart(); 8 | doCarouselScanPayDemo(4000) 9 | initDatetimepicker("[y-data='record.timeStart'],[y-data='record.timeEnd']") 10 | toggleValue("[y-menu='record.status'] > li > a", "click", "[y-input='record.status']"); 11 | yFadeToggle("[y-popoper='uploadQRcode'] a", "mouseenter", "mouseleave", "[y-popoper='payee.ewmsml'] img"); 12 | yFadeToggle("[y-popoper='noopsycheMoney']", "mouseenter", "mouseleave", "[y-popoper='infoUl']"); 13 | yFadeToggle("[y-popoper='payee.modified.show.QRcode']", "mouseenter", "mouseleave", "[y-popoper='payee.modified.QRcode'] img"); 14 | $("[y-navbar='nav.user.img']").mouseover(function () { 15 | $("[y-navbar='nav.float.window']").fadeIn(); 16 | }); 17 | $("[y-close='nav.userPanel']").mouseleave(function () { 18 | $("[y-navbar='nav.float.window']").fadeOut(); 19 | }); 20 | }); 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /apps/fis3/demo/bootstrap4-for-designer/page/nav/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/fis3/pages/banner/index.css: -------------------------------------------------------------------------------- 1 | .v-banner { 2 | width: 100%; 3 | min-height: 240px; 4 | padding: 10px; 5 | } 6 | .v-banner.v-banner-black { 7 | background-color: #1d2027; 8 | } 9 | 10 | .v-banner .v-title { 11 | color: #fff; 12 | text-align: center; 13 | } 14 | 15 | .v-banner .v-h6 { 16 | color: #969cac; 17 | font-size: 12px; 18 | } 19 | .v-banner .iconfont { 20 | font-size: 24px; 21 | color: #fff; 22 | opacity: .5; 23 | } 24 | .v-circle { 25 | width: 110px; 26 | height: 110px; 27 | margin-left: auto; 28 | margin-right: auto; 29 | border-radius: 50%; 30 | text-align: center; 31 | background-color: #2a2e38; 32 | } 33 | 34 | 35 | .v-circle.v-circle-white { 36 | background-color: #f8f8f8; 37 | } 38 | 39 | 40 | .v-circle .v-num { 41 | color: #f13d1f; 42 | padding-top: 20px; 43 | font-size: 36px; 44 | } 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /apps/fis3/pages/banner/index.html: -------------------------------------------------------------------------------- 1 |
2 |

3 |
4 | 5 |
6 |
房贷通
7 |
8 | 9 |
10 |

11 | 12 |
13 |

3

14 |

本月做单数

15 |
16 |
17 |
18 |

200万

19 |

本月做单总金额

20 |
21 |
22 |

200.00万

23 |

本月放款总金额

24 |
25 |
26 |
27 |
28 | -------------------------------------------------------------------------------- /apps/fis3/pages/banner/lk.design.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/pages/banner/lk.design.jpg -------------------------------------------------------------------------------- /apps/fis3/pages/card/addProperty.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
共同产权人
4 |
5 |
6 |
姓名:
7 |
身份证号码:
8 |
-------------------------------------------------------------------------------- /apps/fis3/pages/card/index.css: -------------------------------------------------------------------------------- 1 | .v-card-group{ 2 | 3 | } 4 | .v-card{ 5 | background-color:#fff; 6 | border-radius: 4px; 7 | margin-top:10px; 8 | display: none; 9 | padding: 20px 26px; 10 | } 11 | 12 | -------------------------------------------------------------------------------- /apps/fis3/pages/card/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @require ../../server/author.js 3 | * @require ../../components/js/fn.js 4 | */ 5 | $("#addPropertyBtn").on("click", function () { 6 | var $card = $('.v-card'); 7 | if ($card.length < 5) { 8 | var date = $('
'); 9 | date.append($card.html()); 10 | $(this).before(date); 11 | date.slideDown(300); 12 | } 13 | }); 14 | $("#infoCustom").delegate("i", "click", function () { 15 | var property = $(this).parents(".v-card"); 16 | property.slideUp(300); 17 | setTimeout(function () { 18 | property.remove(); 19 | }, 300) 20 | }) -------------------------------------------------------------------------------- /apps/fis3/pages/footer/index.css: -------------------------------------------------------------------------------- 1 | .v-footer { 2 | position: fixed; 3 | bottom: 0; 4 | width: 100%; 5 | padding: 6px 18px; 6 | border-top: solid #ddd 1px; 7 | } 8 | -------------------------------------------------------------------------------- /apps/fis3/pages/footer/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/fis3/pages/formValidation/index.css: -------------------------------------------------------------------------------- 1 | .has-error,.help-block{ 2 | color: #f13d1f !important; 3 | } 4 | 5 | -------------------------------------------------------------------------------- /apps/fis3/pages/index/allInOne.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/pages/index/allInOne.css -------------------------------------------------------------------------------- /apps/fis3/pages/index/allInOne.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/pages/index/allInOne.js -------------------------------------------------------------------------------- /apps/fis3/pages/list/index.css: -------------------------------------------------------------------------------- 1 | .v-list-group { 2 | text-align: center; 3 | } 4 | 5 | .v-list-group .v-more { 6 | font-size: 18px; 7 | color: #999; 8 | padding: 16px; 9 | } 10 | 11 | .v-list { 12 | display: block; 13 | color: #333; 14 | padding-top: 16px; 15 | padding-bottom: 12px; 16 | } 17 | 18 | .v-list .v-text-note { 19 | margin-top: 4px; 20 | color: #f13d1f; 21 | } 22 | 23 | .v-list .v-num { 24 | font-size: 18px; 25 | color: #f13d1f; 26 | } 27 | 28 | .v-list-reportForm { 29 | text-align: center; 30 | padding-top: 18px; 31 | color: #666; 32 | } 33 | 34 | .v-list-group-simple { 35 | } 36 | .v-list-group-simple .v-box a{ 37 | display: block; 38 | color:#666; 39 | } 40 | .v-list-group-simple .v-head { 41 | line-height: 30px; 42 | background-color: #f8f8f8; 43 | padding: 0 10px; 44 | font-size: 16px; 45 | border-bottom: 1px solid #ececec; 46 | } 47 | 48 | .v-list-group-simple .v-item { 49 | line-height: 2.5; 50 | padding: 0 10px; 51 | background-color: #fff; 52 | } 53 | 54 | .v-nav-letter { 55 | position: absolute; 56 | top: 50%; 57 | right: 20px; 58 | transform: translateY(-50%); 59 | padding-top: 18px; 60 | color: #666; 61 | } 62 | 63 | .v-empty { 64 | position: relative; 65 | left: 50%; 66 | margin: 40% 0 0 -98px; 67 | } -------------------------------------------------------------------------------- /apps/fis3/pages/list/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @require ../../server/author.js 3 | * @require ../../components/js/fn.js 4 | */ 5 | $('[y-more="apps.start.html"]').on('click', function () { 6 | $(this).find('[y-text="more"]').hide().end().find('[y-loading="more"]').addClass('y-animation-loader-ballpulse'); 7 | setTimeout(function () { 8 | $('[y-more="apps.start.html"]').find('[y-loading="more"]').removeClass('y-animation-loader-ballpulse').end().find('[y-text="more"]').fadeIn() 9 | }, 2000); 10 | }) -------------------------------------------------------------------------------- /apps/fis3/pages/list/more.html: -------------------------------------------------------------------------------- 1 |
2 | 加载更多 3 |
4 |
5 | -------------------------------------------------------------------------------- /apps/fis3/pages/list/order.html: -------------------------------------------------------------------------------- 1 |
2 |
2016.07.09
3 |
张三 (西溪北苑)
4 |
5 |
90
6 |
7 |
8 |
-------------------------------------------------------------------------------- /apps/fis3/pages/login/index.css: -------------------------------------------------------------------------------- 1 | .v-login { 2 | 3 | } 4 | 5 | .v-login .v-logo { 6 | width: 180px; 7 | height: 90px; 8 | background: url(../../components/public/csssprites/logo.csp.png) no-repeat; 9 | background-size: 100%; 10 | margin: 30px auto 0 auto; 11 | } 12 | 13 | .v-login .v-input-list { 14 | height: 60px; 15 | border-bottom: 1px solid #A5A7BD; 16 | } 17 | 18 | .v-login .v-input-list input { 19 | background: none; 20 | border: none; 21 | outline: none; 22 | width: 90%; 23 | } 24 | 25 | .v-login .v-input-list .v-input-c { 26 | clear: both; 27 | } 28 | 29 | .v-login .v-input-list .v-input-r { 30 | float: right; 31 | margin-top: -34px; 32 | } 33 | 34 | .v-login .v-input-list .v-input-s { 35 | width: 45%; 36 | } 37 | .v-login .v-input-list .v-img-code { 38 | display: block; 39 | width:96px; 40 | height:34px; 41 | } 42 | 43 | .v-login .v-login-link { 44 | display: block; 45 | text-align: right; 46 | color: #9c9db3; 47 | padding-top: 12px; 48 | } 49 | 50 | #loginForm .help-block { 51 | color: #f13d1f; 52 | } 53 | 54 | .form-group { 55 | margin-bottom: 0; 56 | } -------------------------------------------------------------------------------- /apps/fis3/pages/modal/choice.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/fis3/pages/modal/danger.html: -------------------------------------------------------------------------------- 1 | 24 |
-------------------------------------------------------------------------------- /apps/fis3/pages/modal/index.css: -------------------------------------------------------------------------------- 1 | .v-dialog { 2 | margin-top: 40px; 3 | } 4 | 5 | .v-dialog .modal-content { 6 | border-radius: 0; 7 | width: 90%; 8 | margin: 0 auto; 9 | } 10 | 11 | .v-dialog .modal-content img { 12 | width: 100%; 13 | height: 100%; 14 | } 15 | 16 | .v-dialog .modal-content .v-close { 17 | margin: -26px -24px 0 0; 18 | color: #fff; 19 | opacity: 1; 20 | font-size: 21px; 21 | } 22 | 23 | .v-modal-simple { 24 | position: fixed; 25 | top: 60%; 26 | left: 0; 27 | right: 0; 28 | z-index: 9999; 29 | margin-left: auto; 30 | margin-right: auto; 31 | padding-top: 10px; 32 | background-color: #333; 33 | width: 200px; 34 | opacity: 0.8; 35 | color: white; 36 | font-size: 18px; 37 | text-align: center; 38 | border-radius: 6px; 39 | } 40 | .v-invalid-txt{ 41 | width:100%; 42 | resize:none; 43 | outline: none; 44 | } -------------------------------------------------------------------------------- /apps/fis3/pages/modal/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @require ../../server/author.js 3 | * @require ../../components/js/fn.js 4 | */ 5 | /************ modal ************/ 6 | 7 | $('[y-modal="choice"] [y-btn="ok"]').on('click', function () { 8 | console.log(true) 9 | }) 10 | $('[y-modal="choice"] [y-btn="cancel"]').on('click', function () { 11 | console.log(false) 12 | }) 13 | $('[y-btn="orderCreateStep1"]').on('click', function () { 14 | $('[y-modal="choice"]').modal('show').end().find('[y-text="choice"]').text('您有未完成订单,继续或取消?'); 15 | }) 16 | 17 | 18 | $('[y-modal="invalid"] [y-btn="cancelInvalid"]').on('click', function () { 19 | console.log("取消作废") 20 | }) 21 | $('[y-modal="invalid"] [y-btn="sureInvalid"]').on('click', function () { 22 | console.log("确定作废") 23 | }) 24 | -------------------------------------------------------------------------------- /apps/fis3/pages/modal/invalid.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/fis3/pages/modal/modal.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/fis3/pages/modal/notice.html: -------------------------------------------------------------------------------- 1 |
2 |

3 |
-------------------------------------------------------------------------------- /apps/fis3/pages/modal/noticeSimple1.design.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/pages/modal/noticeSimple1.design.png -------------------------------------------------------------------------------- /apps/fis3/pages/modal/simple.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/fis3/pages/nav/dateSelect.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 |
6 |
7 | -------------------------------------------------------------------------------- /apps/fis3/pages/nav/index.css: -------------------------------------------------------------------------------- 1 | .v-nav-orderManager { 2 | 3 | } 4 | 5 | .v-nav-orderManager .active { 6 | border-bottom: #f13d1f solid 2px; 7 | } 8 | 9 | .v-nav-orderManager .col-xs-3:hover, 10 | .v-nav-orderManager .col-xs-3:focus { 11 | border-bottom: #f13d1f solid 2px; 12 | } 13 | 14 | .y-nav { 15 | text-align: center; 16 | padding: 16px 0; 17 | color: #999; 18 | } 19 | 20 | .y-nav a { 21 | text-decoration: none; 22 | } 23 | 24 | .y-nav .y-nav-red { 25 | color: #ff6161; 26 | background-color: #ffffff; 27 | border-color: #ff6161; 28 | width: 68px; 29 | } 30 | 31 | .y-nav .y-nav-red.active { 32 | color: #fff; 33 | background-color: #ff6161; 34 | border-color: #ff6161; 35 | box-shadow: none; 36 | } 37 | 38 | .v-nav { 39 | text-align: center; 40 | padding: 16px 0; 41 | color: #999; 42 | } 43 | 44 | .v-nav .active { 45 | color: #f13d1f; 46 | } 47 | 48 | .y-nav-bg { 49 | position: relative; 50 | background-color: #1d2027; 51 | line-height: 50px; 52 | height: 50px; 53 | color: #fff; 54 | } 55 | 56 | .y-nav-bg .daohangfanhui { 57 | position: absolute; 58 | color: #fff; 59 | } 60 | 61 | 62 | 63 | .y-nav-bg .select { 64 | position: absolute; 65 | right: 10px; 66 | top:0; 67 | color: #999; 68 | height: 50px; 69 | background-color: #1d2027; 70 | font-size: 13px; 71 | } 72 | 73 | .y-nav-bg .v-date { 74 | margin: 0 auto; 75 | width: 70px; 76 | color:#fff; 77 | 78 | } 79 | 80 | .y-nav-bg .v-date .picker__input { 81 | border: none; 82 | background-color: #1d2027; 83 | padding: 0; 84 | } -------------------------------------------------------------------------------- /apps/fis3/pages/nav/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @require ../../server/author.js 3 | * @require ../../components/js/fn.js 4 | */ 5 | /************ nav ************/ 6 | 7 | var picker = $('[y-pickadate="dateSelect"]').pickadate({ 8 | format: 'yyyy年mm月', 9 | onStart: function () { 10 | console.log('start') 11 | }, 12 | onRender: function () { 13 | console.log('render') 14 | }, 15 | onOpen: function () { 16 | console.log('open') 17 | }, 18 | onClose: function () { 19 | console.log('close') 20 | }, 21 | onStop: function () { 22 | console.log('stop') 23 | }, 24 | onSet: function (context) { 25 | console.log('set:', context) 26 | }, 27 | }); -------------------------------------------------------------------------------- /apps/fis3/pages/nav/navSelect.html: -------------------------------------------------------------------------------- 1 |
2 |
本月
3 |
全部
4 |
5 | -------------------------------------------------------------------------------- /apps/fis3/pages/nav/orderManager.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

待审核

4 |
17
5 |
6 |
7 |

待放款

8 |
16
9 |
10 |
11 |

已放款

12 |
6
13 |
14 |
15 |

作废单

16 |
0
17 |
18 |
-------------------------------------------------------------------------------- /apps/fis3/pages/nav/simple.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |

这是标题

4 |
5 | -------------------------------------------------------------------------------- /apps/fis3/pages/notice/index.css: -------------------------------------------------------------------------------- 1 | .v-notice{ 2 | background-color: #f8f8f8; 3 | padding: 10px; 4 | color: #c0c0c0; 5 | font-size: 14px; 6 | } 7 | .v-notice .v-num{ 8 | margin: auto 4px; 9 | } -------------------------------------------------------------------------------- /apps/fis3/pages/pickadate/date.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | -------------------------------------------------------------------------------- /apps/fis3/pages/pickadate/index.css: -------------------------------------------------------------------------------- 1 | .v-pickadate { 2 | margin-top: 4px; 3 | } 4 | 5 | .v-pickadate .picker th { 6 | text-align: center; 7 | } 8 | 9 | .v-pickadate input { 10 | width: 100%; 11 | color: #999; 12 | font-size: 18px; 13 | text-align: center; 14 | border: none; 15 | } 16 | 17 | @media (min-height: 33.875em) { 18 | .picker__box { 19 | border-radius: 0; 20 | border: none; 21 | border-top: 1px solid #777; 22 | } 23 | } 24 | 25 | @media (min-height: 40.125em) { 26 | .picker__frame { 27 | margin-bottom: 0; 28 | } 29 | } 30 | 31 | .picker__input.picker__input--active { 32 | border: none; 33 | } 34 | .picker__select--month, .picker__select--year{ 35 | padding: 2px; 36 | text-align: center; 37 | } -------------------------------------------------------------------------------- /apps/fis3/pages/pickadate/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @require ../../server/author.js 3 | * @require ../../components/js/fn.js 4 | */ 5 | $('[y-pickadate="order"]').pickadate({ 6 | format: 'yyyy.mm.dd' 7 | }); 8 | $('[y-pickadate="orderManager"]').pickadate({ 9 | format: 'yyyy.mm' 10 | }); -------------------------------------------------------------------------------- /apps/fis3/pages/progress/orderCreateStep.html: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /apps/fis3/pages/selects/index.css: -------------------------------------------------------------------------------- 1 | .v-selects { 2 | position: absolute; 3 | z-index: 1050; 4 | width: 100%; 5 | background-color: #fff; 6 | border: none; 7 | border-radius: 0 !important; 8 | margin-top: 0 !important; 9 | border-top: solid 1px #eee; 10 | } 11 | 12 | .v-selects-heading { 13 | padding: 10px 15px; 14 | border-radius: 0; 15 | } 16 | 17 | .v-selects .v-title { 18 | font-size: 14px; 19 | color: #999; 20 | text-align: center; 21 | } 22 | 23 | .v-selects .v-icon-down { 24 | font-size: 16px; 25 | color: #b0b0b0; 26 | padding-left: 10px; 27 | } 28 | 29 | .v-selects .v-icon-down.active { 30 | font-size: 16px; 31 | color: #ff8a50; 32 | transform: rotate(180deg); 33 | display: inline-block; 34 | } 35 | 36 | .v-selects-body { 37 | background-color: #f8f8f8; 38 | padding: 0; 39 | border-top: 1px solid #e5e5e5 !important; 40 | } 41 | 42 | .v-selects-body .tab-content { 43 | padding-left: 0; 44 | background-color: #fff; 45 | min-height: 250px; 46 | } 47 | 48 | .v-selects-list { 49 | background-color: #f8f8f8; 50 | margin-left: 0; 51 | padding-left: 0; 52 | min-height: 240px; 53 | } 54 | 55 | .v-selects-list li { 56 | background-color: #f8f8f8; 57 | padding: 8px; 58 | padding-left: 40px; 59 | } 60 | 61 | .v-selects-list-simple { 62 | margin-left: 0; 63 | padding-left: 0; 64 | min-height: 240px; 65 | } 66 | 67 | .v-selects-list-simple li { 68 | padding: 8px; 69 | margin-left: 40px; 70 | margin-right: 20px; 71 | border-bottom: solid 1px #e5e5e5; 72 | } 73 | 74 | .v-selects-list li:hover, 75 | .v-selects-list li.active { 76 | background-color: #fff; 77 | } 78 | 79 | .v-selects > .panel-heading { 80 | color: #333; 81 | background-color: #fff; 82 | border: none; 83 | } 84 | 85 | .v-selects-body li { 86 | list-style-type: none; 87 | } 88 | -------------------------------------------------------------------------------- /apps/fis3/pages/selects/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @require ../../server/author.js 3 | * @require ../../components/js/fn.js 4 | */ 5 | /************ selects ************/ 6 | $('[y-selects="buildings"] .v-selects-heading').on('click', function () { 7 | setTimeout(function () { 8 | $true = $('[y-selects="buildings"] .v-selects-heading [data-toggle="collapse"]:eq(0)').is('[aria-expanded="true"]') || $('[y-selects="buildings"] .v-selects-heading [data-toggle="collapse"]:eq(1)').is('[aria-expanded="true"]') 9 | if ($true) { 10 | $('[y-selects="buildings"]').find('.v-modal-backdrop').addClass('modal-backdrop').addClass('fade').addClass('in') 11 | } else { 12 | $('[y-selects="buildings"]').find('.v-modal-backdrop').removeClass('modal-backdrop').removeClass('in').removeClass('fade') 13 | } 14 | }, 100) 15 | }); 16 | $('[y-selects="buildings"] .v-modal-backdrop').on('click', function () { 17 | console.log("hello") 18 | $(this).removeClass('modal-backdrop').removeClass('in').removeClass('fade') 19 | $('[y-selects="buildings"] #selectsDate, [y-selects="buildings"] #selectsCity').collapse('hide') 20 | }); -------------------------------------------------------------------------------- /apps/fis3/pages/start/1.js: -------------------------------------------------------------------------------- 1 | console.log('1.js') -------------------------------------------------------------------------------- /apps/fis3/pages/start/2.js: -------------------------------------------------------------------------------- 1 | console.log('2.js') -------------------------------------------------------------------------------- /apps/fis3/pages/start/index.css: -------------------------------------------------------------------------------- 1 | .v-start { 2 | position: absolute; 3 | z-index: 1; 4 | top: 0; 5 | bottom: 0; 6 | left: 0; 7 | right: 0; 8 | margin: auto; 9 | width: 50%; 10 | min-width: 200px; 11 | max-width: 500px; 12 | height: 500px; 13 | overflow: hidden; 14 | text-align: center; 15 | } -------------------------------------------------------------------------------- /apps/fis3/pages/start/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 |
11 |

筑家易前端


12 |
13 | PPT 14 | Terminal 15 | Html5 Element 16 | yhtml5 17 | yhtml5 18 |
19 |
20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /apps/fis3/pages/start/index2.css: -------------------------------------------------------------------------------- 1 | .test{ 2 | 3 | } -------------------------------------------------------------------------------- /apps/fis3/pages/table/index.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/pages/table/index.css -------------------------------------------------------------------------------- /apps/fis3/pages/table/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 |
日期做单数做单总额放款时间
08.013120万1000万
08.013120万1000万
08.013120万1000万
08.013120万1000万
-------------------------------------------------------------------------------- /apps/fis3/pages/test/other.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /apps/fis3/pages/test/totalPut.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
-------------------------------------------------------------------------------- /apps/fis3/server/author.css: -------------------------------------------------------------------------------- 1 | /*===================================================================== 2 | * Author: yhtml5 3 | * Website: http://yhtml5.com 4 | * Gihub: https://github.com/yhtml5 5 | * Description: We work hard to contribute our work back 6 | * to the web, mobile, server, & new technology. 7 | *====================================================================*/ 8 | -------------------------------------------------------------------------------- /apps/fis3/server/author.js: -------------------------------------------------------------------------------- 1 | /*===================================================================== 2 | * Author: yhtml5 3 | * Website: http://yhtml5.com 4 | * Gihub: https://github.com/yhtml5 5 | * Description: We work hard to contribute our work back 6 | * to the web, mobile, server, & new technology. 7 | *====================================================================*/ 8 | 'use strict'; 9 | -------------------------------------------------------------------------------- /apps/fis3/server/console.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @require author.js 3 | */ 4 | console.log("%c YHTML5 %c Copyright \xa9 2015-%s", 'font-family: "microsoft yahei", Helvetica, Arial, sans-serif;font-size:64px;color:#00bbee;-webkit-text-fill-color:#00bbee;-webkit-text-stroke: 1px #00bbee;', "font-size:12px;color:#999999;", (new Date).getFullYear()); 5 | console.log("%c " + "温馨提示:请不要调皮地在此粘贴执行任何内容,这可能会导致您的账户受到攻击,给您带来损失 !^_^", "color:#333;font-size:16px;margin:4px;"); 6 | function yhtml5() { 7 | console.clear(); 8 | console.log("%c YHTML5 %c https://github.com/yhtml5", 'font-family: "microsoft yahei", Helvetica, Arial, sans-serif;font-size:64px;color:#00bbee;-webkit-text-fill-color:#00bbee;-webkit-text-stroke: 1px #00bbee;', "font-size:12px;color:#999999;"); 9 | console.log("%c " + "We work hard to contribute our work back to the web, mobile, big data, && new Front-End technology.", "color:#333;font-size:16px;margin:4px;"); 10 | console.log("%c " + "Author: yhtml5", "color:#333;font-size:16px;margin:4px;"); 11 | } 12 | -------------------------------------------------------------------------------- /apps/fis3/server/mock.json: -------------------------------------------------------------------------------- 1 | { 2 | "resultCode": 0, 3 | "errMsg": "", 4 | "userId": "yhtml5", 5 | "accountDetail": [ 6 | { 7 | "createTime": "2016-02-26 19:21:45", 8 | "completionTime": "2016-02-26 19:21:45", 9 | "num": "16022621421937332592", 10 | "orderNum": "7564563434267987", 11 | "class": "手续费", 12 | "expense": "+100", 13 | "income": "-200", 14 | "balance": "3,293.22", 15 | "note": "test", 16 | "money": "-0.22", 17 | "payType": "支付宝", 18 | "state": "支付成功" 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/accountBind/accountBind.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 提交成功 15 | {{notice.text}} 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/accountBind/tabTitle.html: -------------------------------------------------------------------------------- 1 | 2 | 支付宝 3 | 银行卡 4 | -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/agreement/agreement.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 提交成功 16 | {{notice.text}} 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/agreement/content.html: -------------------------------------------------------------------------------- 1 |

按照法律法规规定您提现的金额需要进行缴纳个人所得税,该笔个人所得税将由经纪通平台代为缴纳,故请先签署代扣代缴委托书!

2 |
3 |

委托书

4 |

兹委托贵公司负责办理代开劳务费发票并依法缴纳税款相关事宜,一切产生的责任与后果由我本人承担!特此声明!

5 |

授权有效期限:2016.01.01至2016.12.31

6 |
-------------------------------------------------------------------------------- /apps/fis3/view-myBonus/agreement/enterSignature.html: -------------------------------------------------------------------------------- 1 |
2 |
委托人
3 |
4 |

点击此签名

5 | 6 |
7 |
-------------------------------------------------------------------------------- /apps/fis3/view-myBonus/agreement/nav.html: -------------------------------------------------------------------------------- 1 | 2 | 提交 3 | -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/agreement/signature.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 |
6 |

建议横向手绘,以保证签名完整清晰

7 |
8 |
9 | 10 |
11 |
清除
12 |
13 |
-------------------------------------------------------------------------------- /apps/fis3/view-myBonus/authentication/IDcard.form.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |
5 | 6 |
7 |
8 | 9 | 10 |
11 |
12 |
13 |
14 | 15 |
16 |
17 | 18 | 19 |
20 |
21 | 22 |
23 |
24 | 25 |
26 |
27 | 28 |
29 |
30 |
31 | -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/authentication/IDcard.html: -------------------------------------------------------------------------------- 1 |
2 |

{{IDcard.name}}

3 | 4 |
5 |
6 |
+
7 |
8 | -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/authentication/actionsheet.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 |
5 |
6 |
相机
7 |
照片
8 |
9 |
取消
10 |
11 |
12 |
-------------------------------------------------------------------------------- /apps/fis3/view-myBonus/authentication/authentication.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 |

{{noteTopText}}

12 | 13 |

建议横向拍摄,以保障信息完整清晰

14 | 15 | 16 | 提交成功 17 | {{notice.text}} 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/authentication/nav.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 实名认证 4 |
5 |

6 |
7 | 提交 8 | 重新认证 9 |
10 |
-------------------------------------------------------------------------------- /apps/fis3/view-myBonus/bankCardList/bankCardList.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/bankCardList/bankList.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 |
6 |

{{item.accountName}}

7 |

{{item.accountType}}

8 |

{{item.accountNum}}

9 |
10 |
11 | 12 |
13 | 14 |

请先绑定一个银行/支付宝账户

15 |
-------------------------------------------------------------------------------- /apps/fis3/view-myBonus/bankCardList/nav.html: -------------------------------------------------------------------------------- 1 | 2 | + 3 | -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/components/actionsheet/index.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/fis3/view-myBonus/components/actionsheet/index.css -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/components/banner/index.css: -------------------------------------------------------------------------------- 1 | .v-banner { 2 | background-color: #539fbf; 3 | padding: 20px; 4 | color: #ddd; 5 | } 6 | 7 | .v-banner h4 { 8 | font-size: 14px; 9 | } 10 | 11 | .v-banner .y-hr { 12 | margin-top: 10px; 13 | margin-bottom: 10px; 14 | border: 0; 15 | border-top: 1px solid #ddd; 16 | } 17 | 18 | .v-banner .v-num { 19 | margin-top: 10px; 20 | color: #fff; 21 | font-size: 30px; 22 | min-height: 48px; 23 | } -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/components/card/index.css: -------------------------------------------------------------------------------- 1 | .v-card-group { 2 | 3 | } 4 | 5 | .v-card { 6 | background-color: #fff; 7 | margin-bottom: 10px; 8 | min-height: 100px; 9 | text-align: center; 10 | height: 240px; 11 | position: relative; 12 | } 13 | 14 | .v-card-img { 15 | width: 100%; 16 | height: 100%; 17 | position: absolute; 18 | top: 0; 19 | bottom: 0; 20 | right: 0; 21 | left: 0; 22 | } 23 | 24 | .v-card-backdrop { 25 | position: absolute; 26 | top: 0; 27 | bottom: 0; 28 | left: 0; 29 | right: 0; 30 | background-color: rgba(0, 0, 0, 0); 31 | } 32 | 33 | .v-card-backdrop.v-active { 34 | background-color: rgba(0, 0, 0, .1); 35 | } 36 | 37 | .v-card-add { 38 | width: 180px; 39 | height: 120px; 40 | position: absolute; 41 | top: 60%; 42 | left: 50%; 43 | transform: translate(-50%, -60%); 44 | text-align: center; 45 | font-size: 60px; 46 | border-radius: 4px; 47 | } 48 | 49 | .v-card-backdrop ~ .v-card-add { 50 | color: #539fbf; 51 | border: 1px dashed #539fbf; 52 | } 53 | 54 | .v-card-backdrop.v-active ~ .v-card-add { 55 | color: #fff; 56 | border: 1px dashed #fff; 57 | } 58 | 59 | .ID-title { 60 | padding-top: 25px; 61 | } 62 | 63 | -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/components/list/index.css: -------------------------------------------------------------------------------- 1 | .v-list-group { 2 | background-color: #fff; 3 | margin-bottom: 20px; 4 | } 5 | 6 | .v-list-group .v-title { 7 | padding-top: 10px; 8 | padding-bottom: 10px; 9 | padding-left: 15px; 10 | border-bottom: solid 1px #ddd; 11 | } 12 | 13 | .v-list { 14 | padding: 15px; 15 | border-bottom: solid 1px #ddd; 16 | min-height: 50px; 17 | } 18 | 19 | .v-list .v-lable-warn { 20 | color: #e59313; 21 | font-size:12px; 22 | text-indent: 1em; 23 | line-height: 26px; 24 | } 25 | 26 | .v-list .v-lable-default { 27 | color: #aaa; 28 | font-size:14px; 29 | } 30 | 31 | .v-list-group .v-more { 32 | display: block; 33 | text-align: center; 34 | color: #e59313; 35 | font-size: 18px; 36 | padding: 10px; 37 | } 38 | 39 | .v-list-empty{ 40 | text-align: center; 41 | padding:60px 0; 42 | } 43 | 44 | .v-list-empty img{ 45 | width:60px; 46 | padding:0 0 10px 10px; 47 | } 48 | 49 | .v-accountList { 50 | position: absolute; 51 | z-index: 2; 52 | top: 0; 53 | left: 0; 54 | width: 100%; 55 | height: 100%; 56 | background-color: #fbfbfb; 57 | } 58 | 59 | .v-accountList-ul { 60 | list-style-type: none; 61 | background: #fff; 62 | padding-top: 0px; 63 | padding-left: 14px; 64 | } 65 | 66 | .v-accountList-ul li { 67 | min-height: 50px; 68 | padding-top: 10px; 69 | padding-bottom: 10px; 70 | border-bottom: 1px solid #e0e0e0; 71 | color: #333; 72 | } 73 | 74 | .v-accountList-ul .v-img { 75 | display: block; 76 | width: 36px; 77 | height: 36px; 78 | margin: 6px; 79 | } -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/components/nav/index.css: -------------------------------------------------------------------------------- 1 | .v-nav-orderManager { 2 | 3 | } 4 | 5 | .v-nav-orderManager .active { 6 | border-bottom: #f13d1f solid 2px; 7 | } 8 | 9 | .v-nav-orderManager .col-xs-3:hover, 10 | .v-nav-orderManager .col-xs-3:focus { 11 | border-bottom: #f13d1f solid 2px; 12 | } 13 | 14 | .y-nav { 15 | text-align: center; 16 | padding: 16px 0; 17 | color: #999; 18 | } 19 | 20 | .y-nav a { 21 | text-decoration: none; 22 | } 23 | 24 | .y-nav .y-nav-red { 25 | color: #ff6161; 26 | background-color: #ffffff; 27 | border-color: #ff6161; 28 | width: 68px; 29 | } 30 | 31 | .y-nav .y-nav-red.active { 32 | color: #fff; 33 | background-color: #ff6161; 34 | border-color: #ff6161; 35 | box-shadow: none; 36 | } 37 | 38 | .v-nav { 39 | text-align: center; 40 | padding: 16px 0; 41 | color: #999; 42 | } 43 | 44 | .v-nav .active { 45 | color: #f13d1f; 46 | } 47 | 48 | .y-nav-bg { 49 | position: relative; 50 | background-color: #1d2027; 51 | line-height: 50px; 52 | height: 50px; 53 | color: #fff; 54 | } 55 | 56 | .y-nav-bg .daohangfanhui { 57 | position: absolute; 58 | color: #fff; 59 | } 60 | 61 | 62 | 63 | .y-nav-bg .select { 64 | position: absolute; 65 | right: 10px; 66 | top:0; 67 | color: #999; 68 | height: 50px; 69 | background-color: #1d2027; 70 | font-size: 13px; 71 | } 72 | 73 | .y-nav-bg .v-date { 74 | margin: 0 auto; 75 | width: 70px; 76 | color:#fff; 77 | 78 | } 79 | 80 | .y-nav-bg .v-date .picker__input { 81 | border: none; 82 | background-color: #1d2027; 83 | padding: 0; 84 | } -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/components/notice/index.css: -------------------------------------------------------------------------------- 1 | .v-notice { 2 | background-color: #f8f8f8; 3 | padding: 10px; 4 | color: #c0c0c0; 5 | font-size: 14px; 6 | } 7 | 8 | .v-notice .v-num { 9 | margin: auto 4px; 10 | } 11 | 12 | .v-notice-black { 13 | background-color: #333; 14 | padding: 8px 20px; 15 | color: #999; 16 | font-size: 14px; 17 | } -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/components/signature/index.css: -------------------------------------------------------------------------------- 1 | 2 | .y-open-autograph{ 3 | padding:10px; 4 | background:#fff; 5 | color:#666; 6 | margin-top:10px; 7 | } 8 | 9 | .y-open-autograph .y-autograph-img{ 10 | width:40px; 11 | height:40px; 12 | } 13 | 14 | .v-autograph{ 15 | position:absolute; 16 | top:0; 17 | left:0; 18 | right:0; 19 | bottom:0; 20 | background-color: #fbfbfb; 21 | } 22 | 23 | .v-autograph .vux-header{ 24 | height:46px; 25 | } 26 | 27 | .y-autograph-box{ 28 | width:100%; 29 | height:calc(100% - 86px); 30 | background:#fff; 31 | } 32 | 33 | .y-autograph-box .y-autograph-body{ 34 | position: absolute; 35 | width:100%; 36 | height:calc(100% - 85px); 37 | } 38 | 39 | .y-autograph-clear{ 40 | width:100%; 41 | line-height: 42px; 42 | background-color:#fff; 43 | text-align: center; 44 | color:#666; 45 | border-top:1px solid #e0e0e0; 46 | position: absolute; 47 | bottom: 0; 48 | left:0; 49 | } -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/myBonus/banner.html: -------------------------------------------------------------------------------- 1 |
2 |

我的奖金(元)

3 |

{{myBonusMoney}}

4 |
5 |

待审核: {{myBonusMoneyAudit}}

6 |
-------------------------------------------------------------------------------- /apps/fis3/view-myBonus/myBonus/footer.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/myBonus/list.account.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
我的账户
4 |
立即绑定
5 |
{{myAccountNum}}
6 |
7 |
-------------------------------------------------------------------------------- /apps/fis3/view-myBonus/myBonus/list.waterDetails.html: -------------------------------------------------------------------------------- 1 |
2 |
流水明细 (元)
3 |
4 |
5 |
{{item.title}}
6 |
7 | 8 | 待审核 9 | 审核成功 10 | 审核失败 11 | 12 | 13 | 待提取 14 | 提取成功 15 | 提取失败 16 | 17 |
18 |
{{item.money}}
19 |
20 |
21 |
22 |

{{item.cust_name}} {{item.house_name}} {{item.withdraw_account}} {{item.withdraw_fail_reason}} 23 | 支付宝 24 | 银行卡 25 |

26 |
27 |
{{item.created_at}}
28 |
29 |
30 |
查看更多
31 |
32 |
33 | 34 |

暂无流水明细

35 |
-------------------------------------------------------------------------------- /apps/fis3/view-myBonus/myBonus/myBonus.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 |

您还未实名认证, 无法提现. 12 |  立即认证 > 13 |

14 | 15 | 16 | 17 | 18 | 19 | 20 |

三个工作日内给你回复

21 |
22 | 23 | 24 |

您还没有认证

25 |
26 | 27 | 提交成功 28 | {{notice.text}} 29 |
30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/myBonus/nav.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/record/record.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | {{notice.text}} 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/record/recordList.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |
流水明细 (元)
4 |
5 |
6 |
{{item.title}}
7 |
8 | 9 | 待审核 10 | 审核成功 11 | 审核失败 12 | 13 | 14 | 待提取 15 | 提取成功 16 | 提取失败 17 | 18 |
19 |
{{item.money}}
20 |
21 |
22 |
23 |

{{item.cust_name}} {{item.house_name}} {{item.withdraw_account}} {{item.withdraw_fail_reason}} 24 | 支付宝 25 | 银行卡 26 |

27 |
28 |
{{item.created_at}}
29 |
30 |
31 |
查看更多
32 |
33 |
34 | -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/record/recordType.html: -------------------------------------------------------------------------------- 1 |
2 |
账单类型
3 |
账单时间
4 |
5 |
6 | 11 | 12 | 23 |
24 |
25 |

排序时间由远到近

26 |

排序时间由近到远

27 |
28 | 29 |
-------------------------------------------------------------------------------- /apps/fis3/view-myBonus/start/1.js: -------------------------------------------------------------------------------- 1 | console.log('1.js'); 2 | 3 | function menu(arr){ 4 | var odd = [], 5 | even = []; 6 | for(var i = 0; i < arr.length; i++){ 7 | if(i % 2 == 0){ 8 | odd.push(arr[i]); 9 | }else{ 10 | even.push(arr[i]); 11 | } 12 | } 13 | for(var i = 0; i < odd.length; i++){ 14 | odd[i].style.left = 70 + 'px'; 15 | odd[i].style.top = (80 + 80 * i) + 'px'; 16 | } 17 | for(var i = 0; i < even.length; i++){ 18 | even[i].style.right = 70 + 'px'; 19 | even[i].style.top = (120 + 80 * i) + 'px'; 20 | } 21 | } 22 | 23 | window.onload = function(){ 24 | var arr = document.getElementsByTagName('a'); 25 | console.log(arr.length); 26 | menu(arr); 27 | 28 | }; -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/start/2.js: -------------------------------------------------------------------------------- 1 | console.log('2.js') -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/start/index.css: -------------------------------------------------------------------------------- 1 | a:link{ 2 | text-decoration: none; 3 | background:none; 4 | } 5 | a:active{ 6 | text-decoration: none; 7 | background:none; 8 | } 9 | body{ 10 | background-image: radial-gradient(#374566, #010203); 11 | background-image: -webkit-radial-gradient(#374566, #010203); 12 | } 13 | .v-start { 14 | position: absolute; 15 | z-index: 1; 16 | top: 0; 17 | bottom: 0; 18 | left: 0; 19 | right: 0; 20 | margin: auto; 21 | min-width: 200px; 22 | max-width: 500px; 23 | height: 500px; 24 | overflow: hidden; 25 | text-align: center; 26 | } 27 | .list-group a{ 28 | text-decoration: none; 29 | display: inline-block; 30 | padding: 10px; 31 | background:#539fbf; 32 | color:#fff; 33 | border-radius: 20px; 34 | position:absolute; 35 | } 36 | 37 | 38 | .list-group a:nth-child(2n+1){ 39 | animation: animateLeft 6s ease-in-out infinite; 40 | -webkit-animation: animateLeft 6s ease-in-out infinite; 41 | } 42 | 43 | .list-group a:nth-child(2n){ 44 | animation: animateRight 6s ease-in-out infinite; 45 | -webkit-animation: animateRight 6s ease-in-out infinite; 46 | } 47 | 48 | @-webkit-keyframes animateLeft { 49 | 0%, 100% { 50 | -webkit-transform: translate(100px, 0) rotate(-6deg); 51 | } 52 | 50% { 53 | -webkit-transform: translate(-30px, 0) rotate(8deg); 54 | } 55 | } 56 | 57 | @-webkit-keyframes animateRight { 58 | 0%, 100% { 59 | -webkit-transform: translate(-100px, 0) rotate(8deg); 60 | } 61 | 50% { 62 | -webkit-transform: translate(30px, 0) rotate(-6deg); 63 | } 64 | } -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/start/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 |
11 |

筑家易前端


12 | 22 |
23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/test/other.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/test/totalPut.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
-------------------------------------------------------------------------------- /apps/fis3/view-myBonus/withdrawals/accountList.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |

5 |
6 | 17 |
-------------------------------------------------------------------------------- /apps/fis3/view-myBonus/withdrawals/enterMoney.html: -------------------------------------------------------------------------------- 1 |
2 |

提现金额

3 |
4 |
5 |
6 |
7 |

可用金额:{{availableAmount}}元

8 |
9 |

10 | 注:单月提取超过800元,将需要扣个人所得税,具体见
11 | 12 | 13 |   常见问题 14 |

-------------------------------------------------------------------------------- /apps/fis3/view-myBonus/withdrawals/footer.html: -------------------------------------------------------------------------------- 1 | 保存 2 | 保存 3 |

2小时后到账

-------------------------------------------------------------------------------- /apps/fis3/view-myBonus/withdrawals/selectAccount.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /apps/fis3/view-myBonus/withdrawals/withdrawals.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 | 提交成功 17 | {{notice.text}} 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /apps/mpa/.yhtml5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/mpa/.yhtml5 -------------------------------------------------------------------------------- /apps/react-dashboard/.config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Author: yhtml5 3 | * Description: The configuration file for the yhtml5-scripts should not be packaged into the app 4 | * 5 | */ 6 | const packageJson = require('./package.json') 7 | const { getVersion } = require('yhtml5-dev-utils') 8 | const outputPath = `dist/${getVersion(packageJson.version)}` 9 | 10 | const config = { 11 | devHost: '0.0.0.0', 12 | devPort: 9991, 13 | isAnalyze: true, 14 | analyzerPort: 9992, 15 | outputPath: outputPath, 16 | // host: './', 17 | 18 | entry: 'src/index.js', 19 | distributePort: 9993, 20 | type: '', 21 | test: { 22 | testMatch: ['app/**/__tests__/**/*.js?(x)', 'app/**/?(*.)(spec|test).js?(x)'], 23 | transformIgnorePatterns: ["node_modules/(?!(yhtml5-test|react-redux|react-native-button)/)"], 24 | collectCoverageFrom: ['app/**/*.{js,jsx}'], 25 | // moduleNameMapper: webpackConfigAlias, 26 | } 27 | } 28 | 29 | module.exports = config 30 | -------------------------------------------------------------------------------- /apps/react-dashboard/.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | 15 | [Makefile] 16 | indent_style = tab 17 | -------------------------------------------------------------------------------- /apps/react-dashboard/.eslintignore: -------------------------------------------------------------------------------- 1 | build/*.js 2 | config/*.js 3 | /**/node_modules/ 4 | -------------------------------------------------------------------------------- /apps/react-dashboard/.gitignore: -------------------------------------------------------------------------------- 1 | # custom 2 | logs/* 3 | /**/node_modules/ 4 | /**/bower_components/ 5 | npm-debug.log 6 | dist 7 | 8 | tmp 9 | .DS_Store 10 | .idea 11 | .vscode 12 | *.swp 13 | .test.html.swp 14 | .test.html.swo 15 | !.gitkeep 16 | 17 | # Windows image file caches 18 | Thumbs.db 19 | ehthumbs.db 20 | 21 | # Folder config file 22 | Desktop.ini 23 | 24 | # Recycle Bin used on file shares 25 | $RECYCLE.BIN/ 26 | 27 | # Windows Installer files 28 | *.cab 29 | *.msi 30 | *.msm 31 | *.msp 32 | 33 | # Windows shortcuts 34 | *.lnk 35 | 36 | # ========================= 37 | # Operating System Files 38 | # ========================= 39 | 40 | # OSX 41 | # ========================= 42 | 43 | .DS_Store 44 | .AppleDouble 45 | .LSOverride 46 | 47 | # Thumbnails 48 | ._* 49 | 50 | # Files that might appear in the root of a volume 51 | .DocumentRevisions-V100 52 | .fseventsd 53 | .Spotlight-V100 54 | .TemporaryItems 55 | .Trashes 56 | .VolumeIcon.icns 57 | 58 | # Directories potentially created on remote AFP share 59 | .AppleDB 60 | .AppleDesktop 61 | Network Trash Folder 62 | Temporary Items 63 | .apdisk 64 | -------------------------------------------------------------------------------- /apps/react-dashboard/production/.yhtml5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/react-dashboard/production/.yhtml5 -------------------------------------------------------------------------------- /apps/react-dashboard/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/react-dashboard/public/favicon.ico -------------------------------------------------------------------------------- /apps/react-dashboard/public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/react-dashboard/public/logo.png -------------------------------------------------------------------------------- /apps/react-dashboard/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | } 10 | ], 11 | "start_url": "./index.html", 12 | "display": "standalone", 13 | "theme_color": "#000000", 14 | "background_color": "#ffffff" 15 | } 16 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Components/Breadcrumb/index.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Breadcrumb } from 'antd' 3 | import { Link } from 'react-router-dom'; 4 | import { isStringNotEmpty } from '../../util/validator' 5 | 6 | function Component({ breadcrumbs }) { 7 | 8 | return ( 9 | 13 | {breadcrumbs.map((value, index) => { 14 | return ( 15 | 16 | {(isStringNotEmpty(value.href)) ? {value.name} : value.name} 17 | 18 | ) 19 | })} 20 | 21 | ) 22 | } 23 | 24 | export default Component 25 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Components/Form/Select.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {Select} from 'antd'; 3 | const Option = Select.Option; 4 | 5 | const provinceData = ['Zhejiang', 'Jiangsu']; 6 | const cityData = { 7 | Zhejiang: ['Hangzhou', 'Ningbo', 'Wenzhou'], 8 | Jiangsu: ['Nanjing', 'Suzhou', 'Zhenjiang'], 9 | }; 10 | 11 | class App extends React.Component { 12 | state = { 13 | cities: cityData[provinceData[0]], 14 | secondCity: cityData[provinceData[0]][0], 15 | } 16 | handleProvinceChange = (value) => { 17 | this.setState({ 18 | cities: cityData[value], 19 | secondCity: cityData[value][0], 20 | }); 21 | } 22 | onSecondCityChange = (value) => { 23 | this.setState({ 24 | secondCity: value, 25 | }); 26 | } 27 | 28 | render() { 29 | const provinceOptions = provinceData.map(province => ); 30 | const cityOptions = this.state.cities.map(city => ); 31 | return ( 32 |
33 | 36 | 39 |
40 | ); 41 | } 42 | } 43 | 44 | ReactDOM.render(, mountNode); 45 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Components/Form/Time.jsx: -------------------------------------------------------------------------------- 1 | import {Select} from 'antd' 2 | const Option = Select.Option 3 | 4 | const provinceData = ['Zhejiang', 'Jiangsu']; 5 | const cityData = { 6 | Zhejiang: ['Hangzhou', 'Ningbo', 'Wenzhou'], 7 | Jiangsu: ['Nanjing', 'Suzhou', 'Zhenjiang'], 8 | }; 9 | 10 | class App extends React.Component { 11 | state = { 12 | cities: cityData[provinceData[0]], 13 | secondCity: cityData[provinceData[0]][0], 14 | } 15 | handleProvinceChange = (value) => { 16 | this.setState({ 17 | cities: cityData[value], 18 | secondCity: cityData[value][0], 19 | }) 20 | } 21 | onSecondCityChange = (value) => { 22 | this.setState({ 23 | secondCity: value, 24 | }); 25 | } 26 | 27 | render() { 28 | const provinceOptions = provinceData.map(province => ); 29 | const cityOptions = this.state.cities.map(city => ); 30 | return ( 31 |
32 | 35 | 38 |
39 | ); 40 | } 41 | } 42 | 43 | ReactDOM.render(, mountNode); 44 | 45 | 46 | export {App} 47 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Components/HelloWorld.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | 4 | function HelloWorld() { 5 | return

hello world

6 | } 7 | 8 | 9 | export default HelloWorld 10 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Components/LazilyLoad/Bundle.jsx: -------------------------------------------------------------------------------- 1 | import React, {Component} from 'react' 2 | 3 | class Bundle extends Component { 4 | state = { 5 | // short for "module" but that's a keyword in js, so "mod" 6 | mod: null 7 | } 8 | 9 | componentWillMount() { 10 | this.load(this.props) 11 | } 12 | 13 | componentWillReceiveProps(nextProps) { 14 | if (nextProps.load !== this.props.load) { 15 | this.load(nextProps) 16 | } 17 | } 18 | 19 | load(props) { 20 | this.setState({ 21 | mod: null 22 | }) 23 | props.load((mod) => { 24 | this.setState({ 25 | // handle both es imports and cjs 26 | mod: mod.default ? mod.default : mod 27 | }) 28 | }) 29 | } 30 | 31 | render() { 32 | return this.props.children(this.state.mod) 33 | } 34 | } 35 | 36 | export default Bundle 37 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Components/Search/.yhtml5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/react-dashboard/src/Components/Search/.yhtml5 -------------------------------------------------------------------------------- /apps/react-dashboard/src/Components/Table/index.jsx: -------------------------------------------------------------------------------- 1 | import { isStringEmpty, } from '../../util/validator' 2 | 3 | const renderColumns = (text) => (isStringEmpty(text)) ? '--' : text 4 | const renderStatus = (text, record) => (isStringEmpty(text)) ? '--' : (Number(record.status) === 1) ? '显示' : '隐藏' 5 | const renderNavType = (text, record) => (isStringEmpty(text)) ? '--' : (Number(record.type) === 1) ? '频道' : '链接' 6 | const renderLiveType = (text, record) => (isStringEmpty(text)) ? '--' : (Number(record.type) === 1) ? '视频' : '图文' 7 | const renderRecommendation = (text, record) => (isStringEmpty(text)) ? '--' : (Number(record.is_reco) === 1) ? '已推荐' : '未推荐' 8 | 9 | export { renderColumns, renderStatus, renderNavType, renderLiveType, renderRecommendation } 10 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Components/Test/a.js: -------------------------------------------------------------------------------- 1 | console.log('I AM a') 2 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Components/Test/b.js: -------------------------------------------------------------------------------- 1 | console.log('I AM b') 2 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Components/Test/c.js: -------------------------------------------------------------------------------- 1 | console.log('I AM c') 2 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Components/Test/codeSplitting.js: -------------------------------------------------------------------------------- 1 | function determineDate() { 2 | import('moment').then(function (moment) { 3 | console.log(moment().format()) 4 | }).catch(function (err) { 5 | console.log('Failed to load moment', err) 6 | }) 7 | } 8 | 9 | export {determineDate} 10 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Components/Test/environment.js: -------------------------------------------------------------------------------- 1 | function outputEnvironment() { 2 | if (process.env.NODE_ENV !== 'production') { 3 | console.log('***** Development mode *****') 4 | } 5 | 6 | } 7 | 8 | 9 | export {outputEnvironment} 10 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Components/Test/index.js: -------------------------------------------------------------------------------- 1 | require('./a') 2 | 3 | // setTimeout(() => require.ensure(['./b'], function (require) { 4 | // require('./b') 5 | // require('./c') 6 | // console.log('done!') 7 | // }), 2000) 8 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Components/Test/treeShaking.js: -------------------------------------------------------------------------------- 1 | function treeShaking() { 2 | let a = 2 3 | } 4 | function treeShaking2() { 5 | console('treeShaking2') 6 | } 7 | 8 | export {treeShaking, treeShaking2} 9 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Components/Upload/PicturesWall.pcss: -------------------------------------------------------------------------------- 1 | /* you can make up upload button and sample style by using stylesheets */ 2 | .ant-upload-select-picture-card i { 3 | font-size: 28px; 4 | color: #999; 5 | } 6 | 7 | .ant-upload-select-picture-card .ant-upload-text { 8 | margin-top: 8px; 9 | font-size: 12px; 10 | color: #666; 11 | } 12 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Components/editor/index.pcss: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Components/editor/wangeditor/.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | *.sln merge=union 7 | *.csproj merge=union 8 | *.vbproj merge=union 9 | *.fsproj merge=union 10 | *.dbproj merge=union 11 | 12 | # Standard to msysgit 13 | *.doc diff=astextplain 14 | *.DOC diff=astextplain 15 | *.docx diff=astextplain 16 | *.DOCX diff=astextplain 17 | *.dot diff=astextplain 18 | *.DOT diff=astextplain 19 | *.pdf diff=astextplain 20 | *.PDF diff=astextplain 21 | *.rtf diff=astextplain 22 | *.RTF diff=astextplain 23 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Components/editor/wangeditor/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "boss": false, 3 | "curly": true, 4 | "eqeqeq": true, 5 | "eqnull": true, 6 | "expr": true, 7 | "immed": true, 8 | "newcap": true, 9 | "noempty": true, 10 | "noarg": true, 11 | "undef": true, 12 | "regexp": true, 13 | 14 | "browser": true, 15 | "devel": true, 16 | "node": true 17 | } -------------------------------------------------------------------------------- /apps/react-dashboard/src/Components/editor/wangeditor/.npmignore: -------------------------------------------------------------------------------- 1 | node_modules/* 2 | src/css/* 3 | src/js/* 4 | issue 5 | npm-debug.log 6 | static/* 7 | test/* 8 | uploadfiles/* 9 | server.js 10 | server-for-cros.js -------------------------------------------------------------------------------- /apps/react-dashboard/src/Components/editor/wangeditor/.npminstall.done: -------------------------------------------------------------------------------- 1 | Tue Mar 14 2017 10:44:00 GMT+0800 (中国标准时间) -------------------------------------------------------------------------------- /apps/react-dashboard/src/Components/editor/wangeditor/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 王福朋 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Components/editor/wangeditor/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wangEditor", 3 | "description": "wangEditor - 基于javascript和css开发的 Web富文本编辑器, 轻量、简洁、易用、开源免费", 4 | "main": "dist/js/wangEditor.js", 5 | "authors": [ 6 | "wangfupeng " 7 | ], 8 | "license": "MIT", 9 | "keywords": [ 10 | "wangEditor", 11 | "富文本编辑器" 12 | ], 13 | "homepage": "https://github.com/wangfupeng1988/wangEditor", 14 | "moduleType": [ 15 | "amd", 16 | "cmd", 17 | "node" 18 | ], 19 | "private": true 20 | } 21 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Components/editor/wangeditor/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wangeditor", 3 | "title": "wangEditor", 4 | "version": "2.1.23", 5 | "description": "wangEditor - 基于javascript和css开发的 Web富文本编辑器, 轻量、简洁、易用、开源免费", 6 | "homepage": "http://wangeditor.github.io/", 7 | "author": { 8 | "name": "wangfupeng1988", 9 | "url": "https://github.com/wangfupeng1988" 10 | }, 11 | "keywords": [ 12 | "wangEditor", 13 | "富文本编辑器" 14 | ], 15 | "main": "dist/js/wangEditor.js", 16 | "maintainers": [ 17 | { 18 | "name": "wangfupeng1988", 19 | "web": "http://www.cnblogs.com/wangfupeng1988/default.html?OnlyTitle=1", 20 | "mail": "wangfupeng1988@163.com" 21 | } 22 | ], 23 | "repositories": [ 24 | { 25 | "type": "git", 26 | "url": "https://github.com/wangfupeng1988/wangEditor" 27 | } 28 | ], 29 | "devDependencies": { 30 | "grunt": "^0.4.5", 31 | "grunt-contrib-concat": "^0.5.1", 32 | "grunt-contrib-copy": "^0.8.1", 33 | "grunt-contrib-cssmin": "^0.12.3", 34 | "grunt-contrib-jshint": "^0.11.2", 35 | "grunt-contrib-less": "^1.0.1", 36 | "grunt-contrib-uglify": "^0.9.1", 37 | "grunt-contrib-watch": "^0.6.1" 38 | }, 39 | "dependencies": { 40 | "jquery": "^2.2.3" 41 | }, 42 | "_from": "wangeditor@2.1.23", 43 | "_resolved": "http://registry.npm.taobao.org/wangeditor/download/wangeditor-2.1.23.tgz" 44 | } -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/App/action.js: -------------------------------------------------------------------------------- 1 | import {namespace} from '../../redux/actions' 2 | 3 | const UpdateState = namespace('app', 'UpdateState') 4 | 5 | export {UpdateState} 6 | 7 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/App/reduce.js: -------------------------------------------------------------------------------- 1 | import {UpdateState} from './action' 2 | import initialState from './state' 3 | 4 | function reduce(state = initialState, action = {}) { 5 | switch (action.type) { 6 | case UpdateState: 7 | return {...state, ...action.payload} 8 | case 'UpdatePathname': 9 | return { 10 | ...state, 11 | pathnameCurrent: action.payload, 12 | pathnameChange: action.payload !== state.pathnameCurrent 13 | } 14 | default: 15 | return state; 16 | } 17 | } 18 | export default reduce 19 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/App/state.js: -------------------------------------------------------------------------------- 1 | import {config} from '../../config' 2 | const {title} = config() 3 | 4 | const state = { 5 | title: title, 6 | communityId: '', 7 | uploadToken: '', 8 | pathnameChange: true, 9 | pathnameCurrent: '', 10 | permissions: [], 11 | permissionsCurrent: 5, 12 | selectChannels: [], 13 | selectColumns: [], 14 | selectLabels: [], 15 | selectedChannel: undefined, 16 | selectedColumn: undefined, 17 | selectedLabels: undefined, 18 | } 19 | 20 | export default state 21 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Demo/Components/Test.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Button } from 'antd' 3 | 4 | function Component({ title }) { 5 | return ( 6 | 9 | ) 10 | } 11 | 12 | export default Component 13 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Demo/Components/Test.pcss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/react-dashboard/src/Containers/Demo/Components/Test.pcss -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Demo/action.js: -------------------------------------------------------------------------------- 1 | import { namespace } from '../../redux/actions'; 2 | 3 | const UpdateState = namespace('Demo', 'UpdateState') 4 | 5 | export { UpdateState } 6 | 7 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Demo/index.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Card } from 'antd' 3 | import connect from 'react-redux/es/connect/connect' 4 | import { history } from '../../redux/store' 5 | import Breadcrumb from '../../Components/Breadcrumb/index.jsx' 6 | import Test from './Components/Test.jsx' 7 | import { notRepeating } from '../../util/util' 8 | import { toggleStatus } from './task' 9 | 10 | function Component({ dispatch, props, app }) { 11 | console.log('DemoProps: ', props, app) 12 | 13 | const breadcrumbProps = { 14 | breadcrumbs: [{ 15 | name: '首页', 16 | }, { 17 | name: '列表', 18 | }, { 19 | name: '详情', 20 | }] 21 | } 22 | const testProps = { 23 | title: props.testTitle 24 | } 25 | 26 | return ( 27 |
28 | 29 | 30 | 31 | 32 |
33 | ) 34 | } 35 | 36 | export default connect(state => { 37 | return { 38 | app: state.app, 39 | props: state.demo, 40 | } 41 | })(Component) 42 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Demo/reduce.js: -------------------------------------------------------------------------------- 1 | import {UpdateState} from './action' 2 | import initialState from './state' 3 | 4 | export default function reduce(state = initialState, action = {}) { 5 | switch (action.type) { 6 | case UpdateState: 7 | return {...state, ...action.payload} 8 | default: 9 | return state 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Demo/state.js: -------------------------------------------------------------------------------- 1 | const state = { 2 | testTitle: 'Hello World', 3 | tableData: [], 4 | tableTotals: 0, 5 | tableCurrent: 1, 6 | tablePageSize: 10, 7 | tableLoading: false, 8 | modalVisible: false, 9 | formId: '', 10 | formType: 'add', 11 | formStatus: undefined, 12 | formName: '', 13 | formOkLoading: false, 14 | formOkDisabled: false, 15 | formCancelLoading: false, 16 | formCancelDisabled: false, 17 | } 18 | 19 | export default state -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Document/Components/Document.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Button } from 'antd' 3 | import markdown from './document.md' 4 | import 'github-markdown-css' 5 | 6 | import styles from './Document.pcss' 7 | 8 | class Component extends React.Component { 9 | constructor(props) { 10 | super(props) 11 | } 12 | 13 | componentDidMount() { 14 | const container = document.getElementById("markdown") 15 | container.innerHTML = markdown 16 | } 17 | 18 | render() { 19 | return ( 20 |
21 | ) 22 | } 23 | } 24 | 25 | 26 | export default Component 27 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Document/Components/Document.pcss: -------------------------------------------------------------------------------- 1 | :global { 2 | .markdown-body { 3 | box-sizing: border-box; 4 | width: 100%; 5 | min-width: 200px; 6 | margin: 0 auto; 7 | padding: 0 20px; 8 | } 9 | } -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Document/action.js: -------------------------------------------------------------------------------- 1 | import { namespace } from '../../redux/actions'; 2 | 3 | const UpdateState = namespace('Document', 'UpdateState') 4 | 5 | export { UpdateState } 6 | 7 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Document/index.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Card } from 'antd' 3 | import connect from 'react-redux/es/connect/connect' 4 | import { history } from '../../redux/store' 5 | import Breadcrumb from '../../Components/Breadcrumb/index.jsx' 6 | import Document from './Components/Document.jsx' 7 | import { notRepeating } from '../../util/util' 8 | import { toggleStatus } from './task' 9 | 10 | function Component({ dispatch, props, app }) { 11 | //console.log('DocumentProps: ', props) 12 | 13 | const breadcrumbProps = { 14 | breadcrumbs: [{ 15 | name: '首页', 16 | }, { 17 | name: '系统功能', 18 | }, { 19 | name: '开发文档', 20 | }] 21 | } 22 | const testProps = { 23 | title: props.testTitle 24 | } 25 | 26 | return ( 27 |
28 | 29 | 30 | 31 | 32 |
33 | ) 34 | } 35 | 36 | export default connect(state => { 37 | return { 38 | app: state.app, 39 | props: state.document, 40 | } 41 | })(Component) 42 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Document/reduce.js: -------------------------------------------------------------------------------- 1 | import {UpdateState} from './action' 2 | import initialState from './state' 3 | 4 | export default function reduce(state = initialState, action = {}) { 5 | switch (action.type) { 6 | case UpdateState: 7 | return {...state, ...action.payload} 8 | default: 9 | return state 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Document/state.js: -------------------------------------------------------------------------------- 1 | const state = { 2 | testTitle: 'Hello World', 3 | tableData: [], 4 | tableTotals: 0, 5 | tableCurrent: 1, 6 | tablePageSize: 10, 7 | tableLoading: false, 8 | modalVisible: false, 9 | formId: '', 10 | formType: 'add', 11 | formStatus: undefined, 12 | formName: '', 13 | formOkLoading: false, 14 | formOkDisabled: false, 15 | formCancelLoading: false, 16 | formCancelDisabled: false, 17 | } 18 | 19 | export default state -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Document/task.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/react-dashboard/src/Containers/Document/task.js -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Form/Components/Form.pcss: -------------------------------------------------------------------------------- 1 | .form {} 2 | 3 | .form :global(.ant-form-item) {} 4 | 5 | .pattern{ 6 | height: 32px; 7 | line-height: 32px; 8 | padding-left: 12px; 9 | padding-right: 12px; 10 | } -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Form/Components/Header.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Button } from 'antd' 3 | 4 | function Component({ title }) { 5 | return ( 6 | 9 | ) 10 | } 11 | 12 | export default Component 13 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Form/Components/Test.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Button } from 'antd' 3 | 4 | function Component({ title }) { 5 | return ( 6 | 9 | ) 10 | } 11 | 12 | export default Component 13 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Form/Components/Test.pcss: -------------------------------------------------------------------------------- 1 | .form {} 2 | 3 | .form :global(.ant-form-item) { 4 | width: 240px; 5 | margin-bottom: 20px; 6 | } 7 | 8 | .hr { 9 | margin-left: 0; 10 | margin-right: 0; 11 | margin-top: 30px; 12 | margin-bottom: 30px; 13 | border: solid 1px #ddd; 14 | // max-width: 480px; 15 | width: 100%; 16 | } 17 | 18 | .button { 19 | margin-left: 10px; 20 | margin-top: 40px; 21 | } -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Form/action.js: -------------------------------------------------------------------------------- 1 | import { namespace } from '../../redux/actions'; 2 | 3 | const UpdateState = namespace('Demo', 'UpdateState') 4 | 5 | export { UpdateState } 6 | 7 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Form/index.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Card } from 'antd' 3 | import connect from 'react-redux/es/connect/connect' 4 | import { history } from '../../redux/store' 5 | import Breadcrumb from '../../Components/Breadcrumb/index.jsx' 6 | import Test from './Components/Test.jsx' 7 | import Form from './Components/Form.jsx' 8 | import { notRepeating } from '../../util/util' 9 | import { toggleStatus } from './task' 10 | 11 | function Component({ dispatch, props, app }) { 12 | console.log('PackageProps: ', props, app) 13 | 14 | const breadcrumbProps = { 15 | breadcrumbs: [{ 16 | name: '首页', 17 | }, { 18 | name: '基础组件', 19 | }, { 20 | name: '表单正则', 21 | }] 22 | } 23 | const testProps = { 24 | title: props.testTitle 25 | } 26 | const formProps = { 27 | title: props.testTitle 28 | } 29 | 30 | return ( 31 |
32 | 33 | 34 | 35 | 36 | 37 |
38 | 39 |
40 | ) 41 | } 42 | 43 | export default connect(state => { 44 | return { 45 | app: state.app, 46 | props: state.demo, 47 | } 48 | })(Component) 49 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Form/reduce.js: -------------------------------------------------------------------------------- 1 | import {UpdateState} from './action' 2 | import initialState from './state' 3 | 4 | export default function reduce(state = initialState, action = {}) { 5 | switch (action.type) { 6 | case UpdateState: 7 | return {...state, ...action.payload} 8 | default: 9 | return state 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Form/state.js: -------------------------------------------------------------------------------- 1 | const state = { 2 | testTitle: 'Hello World', 3 | tableData: [], 4 | tableTotals: 0, 5 | tableCurrent: 1, 6 | tablePageSize: 10, 7 | tableLoading: false, 8 | modalVisible: false, 9 | formId: '', 10 | formType: 'add', 11 | formStatus: undefined, 12 | formName: '', 13 | formOkLoading: false, 14 | formOkDisabled: false, 15 | formCancelLoading: false, 16 | formCancelDisabled: false, 17 | } 18 | 19 | export default state -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Function/Components/Cards.pcss: -------------------------------------------------------------------------------- 1 | .code{ 2 | margin-top:40px; 3 | margin-bottom:10px; 4 | } 5 | .code h3{ 6 | margin-bottom:10px; 7 | } 8 | 9 | .card { 10 | margin-right: 20px; 11 | margin-bottom:20px; 12 | height: 300px; 13 | } 14 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Function/action.js: -------------------------------------------------------------------------------- 1 | import { namespace } from '../../redux/actions'; 2 | 3 | const UpdateState = namespace('Function', 'UpdateState') 4 | 5 | export { UpdateState } 6 | 7 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Function/index.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import connect from 'react-redux/es/connect/connect' 3 | import { history } from '../../redux/store' 4 | import Breadcrumb from '../../Components/Breadcrumb/index.jsx' 5 | import Cards from './Components/Cards.jsx' 6 | import { notRepeating } from '../../util/util' 7 | import { toggleStatus } from './task' 8 | 9 | function Component({ dispatch, props, app }) { 10 | console.log('DemoProps: ', props, app) 11 | 12 | const breadcrumbProps = { 13 | breadcrumbs: [{ 14 | name: '首页', 15 | }, { 16 | name: '基础组件', 17 | }, { 18 | name: '功能函数', 19 | }] 20 | } 21 | const cardProps = { 22 | title: props.testTitle 23 | } 24 | 25 | return ( 26 |
27 | 28 | 29 |
30 | ) 31 | } 32 | 33 | export default connect(state => { 34 | return { 35 | app: state.app, 36 | props: state.demo, 37 | } 38 | })(Component) 39 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Function/reduce.js: -------------------------------------------------------------------------------- 1 | import {UpdateState} from './action' 2 | import initialState from './state' 3 | 4 | export default function reduce(state = initialState, action = {}) { 5 | switch (action.type) { 6 | case UpdateState: 7 | return {...state, ...action.payload} 8 | default: 9 | return state 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Function/state.js: -------------------------------------------------------------------------------- 1 | const state = { 2 | testTitle: 'Hello World', 3 | tableData: [], 4 | tableTotals: 0, 5 | tableCurrent: 1, 6 | tablePageSize: 10, 7 | tableLoading: false, 8 | modalVisible: false, 9 | formId: '', 10 | formType: 'add', 11 | formStatus: undefined, 12 | formName: '', 13 | formOkLoading: false, 14 | formOkDisabled: false, 15 | formCancelLoading: false, 16 | formCancelDisabled: false, 17 | } 18 | 19 | export default state -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Function/task.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/react-dashboard/src/Containers/Function/task.js -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Layout/Components/Content.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {Layout, Card} from 'antd' 3 | // import Breadcrumb from '../../../Components/Breadcrumb/index.jsx' 4 | 5 | function Content(props) { 6 | return ( 7 | 8 | {props.children} 9 | 10 | 11 | ) 12 | } 13 | 14 | export default Content 15 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Layout/Components/Footer.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Layout } from 'antd' 3 | import { config } from '../../../config' 4 | const { title, copyright, version } = config() 5 | 6 | const Footer = () => 7 | 8 | Copyright © 2011-2018 {copyright} 当前呈现版本 {version} 9 | 10 | 11 | export default Footer 12 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Layout/Components/Header.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Layout, Icon, Menu, Dropdown } from 'antd' 3 | import { Modal } from 'antd' 4 | import styles from './Header.pcss' 5 | import { config } from '../../../config.js' 6 | import { getCookie } from '../../../util/cookie.js' 7 | let { cookie } = config() 8 | 9 | function Header({ collapsed, onToggleSide, onLogout }) { 10 | 11 | const handleOk = (e) => { 12 | const key = e.key 13 | if (key === 'logout') { 14 | showConfirm() 15 | } else if (key === 'reset') { 16 | console.log('reset') 17 | } else { 18 | console.error('Checkout Layout/Components/Header.jsx') 19 | } 20 | } 21 | 22 | const showConfirm = () => { 23 | Modal.confirm({ 24 | title: '确认退出该账号?', 25 | content: '', 26 | onOk() { 27 | return new Promise((resolve, reject) => { 28 | onLogout(resolve, reject) 29 | }).catch(() => console.log('Oops errors!')) 30 | }, 31 | onCancel() { 32 | 33 | }, 34 | }) 35 | } 36 | 37 | const menu = ( 38 | 42 | 修改密码 43 | 退出登录 44 | 45 | ) 46 | 47 | return ( 48 | 49 | 54 | 55 | 60 | 61 | 62 | ) 63 | } 64 | 65 | 66 | export default Header 67 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Layout/Components/Header.pcss: -------------------------------------------------------------------------------- 1 | .trigger { 2 | font-size: 18px; 3 | line-height: 64px; 4 | padding: 0 16px; 5 | cursor: pointer; 6 | transition: color .3s; 7 | } 8 | 9 | .trigger:hover { 10 | color: #108ee9; 11 | } 12 | 13 | .name { 14 | float: right; 15 | padding: 0 16px; 16 | font-size: 14px; 17 | line-height: 64px; 18 | cursor: pointer; 19 | } 20 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Layout/Components/Sider.pcss: -------------------------------------------------------------------------------- 1 | .sider { 2 | position: fixed !important; 3 | height: 100%; 4 | } 5 | .logo { 6 | height: 32px; 7 | background: #333; 8 | border-radius: 6px; 9 | margin: 16px; 10 | } 11 | .title { 12 | color: #ccc; 13 | font-size: 16px; 14 | padding-top: 4px; 15 | text-align: center; 16 | } 17 | 18 | .link, 19 | .link:hover, 20 | .link:focus { 21 | text-decoration: none; 22 | } 23 | 24 | :global { 25 | 26 | #layout .ant-layout-sider-collapsed .anticon { 27 | font-size: 16px; 28 | } 29 | 30 | #layout .ant-menu-submenu-inline > .ant-menu-submenu-title:after { 31 | 32 | } 33 | 34 | #layout .ant-layout-sider-collapsed .nav-text { 35 | display: none; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Layout/action.js: -------------------------------------------------------------------------------- 1 | import {namespace} from '../../redux/actions'; 2 | 3 | const UpdateState = namespace('Layout', 'UpdateState') 4 | 5 | export {UpdateState} 6 | 7 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Layout/reduce.js: -------------------------------------------------------------------------------- 1 | import { UpdateState } from './action' 2 | import initialState from './state' 3 | 4 | export default function reduce(state = initialState, action = {}) { 5 | switch (action.type) { 6 | case UpdateState: 7 | return { ...state, ...action.payload } 8 | default: 9 | return state 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Layout/state.js: -------------------------------------------------------------------------------- 1 | import { config } from '../../config' 2 | const { title } = config() 3 | 4 | const state = { 5 | title: title, 6 | collapsed: false, 7 | menus: [], 8 | menusOpenKeys: ['1'], 9 | menusDefaultOpenKeys: ['1'], 10 | menusSelectedKeys: [], 11 | menusDefaultSelectedKeys: [] 12 | } 13 | 14 | export default state 15 | 16 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Live/Components/Form.pcss: -------------------------------------------------------------------------------- 1 | .form { 2 | } 3 | 4 | .form :global(.ant-form-item) { 5 | } 6 | 7 | .slider { 8 | margin-bottom: 40px !important; 9 | margin-right: 10% !important; 10 | margin-left: 15% !important; 11 | } 12 | 13 | .hr { 14 | margin-left: 16%; 15 | margin-right: 8%; 16 | margin-bottom: 20px; 17 | border: solid 1px #ccc; 18 | } 19 | 20 | .delete { 21 | cursor: pointer; 22 | position: relative; 23 | top: 4px; 24 | font-size: 24px; 25 | color: #999; 26 | transition: all .3s; 27 | } 28 | 29 | .delete:hover { 30 | color: #777; 31 | } 32 | 33 | .delete[disabled] { 34 | cursor: not-allowed; 35 | opacity: 0.5; 36 | } 37 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Live/Components/FormVideo.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {Radio, Form, Button, Input, Icon, Select, Row, Col, Slider, Upload, Checkbox, Modal} from 'antd' 3 | import PicturesWall from '../../../Components/Upload/PicturesWall.jsx' 4 | import styles from './Form.pcss' 5 | import FormStep from './FormStep.jsx' 6 | 7 | 8 | function FormVideo({form, formItemLayout, formIsDone, formVideoUrl, formVideoView, formVideoIntroduction}) { 9 | 10 | return ( 11 | 12 | 13 | {form.getFieldDecorator('formIsDone', { 14 | initialValue: formIsDone, 15 | rules: [{required: true, message: '请选择是否完工!'}], 16 | })( 17 | 18 | 19 | 20 | 21 | )} 22 | 23 | 24 | {form.getFieldDecorator('formVideoUrl', { 25 | initialValue: formVideoUrl, 26 | rules: [{required: true, message: '请选择直播地址!'}], 27 | })( 28 | 29 | )} 30 | 31 | 32 | {form.getFieldDecorator('formVideoView', { 33 | initialValue: formVideoView, 34 | rules: [{required: true, message: '请输入浏览量!'}], 35 | })( 36 | 37 | )} 38 | 39 | 40 | {form.getFieldDecorator('formVideoIntroduction', { 41 | initialValue: formVideoIntroduction, 42 | })( 43 | 44 | )} 45 | 46 | 47 | ) 48 | } 49 | 50 | export default FormVideo 51 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Live/Components/TableHeader.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {Table, Button} from 'antd' 3 | 4 | function TableHeader({loading, onClick}) { 5 | return ( 6 | 11 | ) 12 | } 13 | 14 | export default TableHeader 15 | 16 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Live/action.js: -------------------------------------------------------------------------------- 1 | import {namespace} from '../../redux/actions'; 2 | 3 | const UpdateState = namespace('Live', 'UpdateState') 4 | 5 | export {UpdateState} 6 | 7 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Live/index.pcss: -------------------------------------------------------------------------------- 1 | .form { 2 | } 3 | 4 | .form :global(.ant-form-item) { 5 | width: 240px; 6 | margin-bottom: 20px; 7 | } 8 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Live/reduce.js: -------------------------------------------------------------------------------- 1 | import {UpdateState} from './action' 2 | import initialState from './state' 3 | 4 | export default function reduce(state = initialState, action = {}) { 5 | switch (action.type) { 6 | case UpdateState: 7 | return {...state, ...action.payload} 8 | default: 9 | return state 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Login/Components/Background.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {Card} from 'antd' 3 | import Footer from '../../Layout/Components/Footer.jsx' 4 | import styles from './Background.pcss' 5 | 6 | function Background({children, title}) { 7 | 8 | return ( 9 |
10 | 11 |

{title}

12 | {children} 13 |
14 |
15 |
16 | ) 17 | } 18 | 19 | export default Background 20 | 21 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Login/Components/Background.pcss: -------------------------------------------------------------------------------- 1 | .login { 2 | height: 100%; 3 | padding-top: 200px; 4 | background-color: #ececec; 5 | } 6 | 7 | .card { 8 | max-width: 300px; 9 | margin-left: auto; 10 | margin-right: auto; 11 | margin-bottom: 100px; 12 | } 13 | 14 | .title { 15 | text-align: center; 16 | margin-bottom: 20px; 17 | } 18 | 19 | .footer { 20 | margin-top: 40px; 21 | } 22 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Login/Components/Form.pcss: -------------------------------------------------------------------------------- 1 | .form { 2 | 3 | } 4 | 5 | .login-forgot { 6 | float: right; 7 | } 8 | 9 | .login-button { 10 | width: 100%; 11 | } 12 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Login/action.js: -------------------------------------------------------------------------------- 1 | import {namespace} from '../../redux/actions'; 2 | 3 | const UpdateState = namespace('Login', 'UpdateState') 4 | 5 | export {UpdateState} 6 | 7 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Login/ajax.js: -------------------------------------------------------------------------------- 1 | import ajax from '../../util/ajax' 2 | import { updateState } from './task' 3 | 4 | /** 5 | * Todo Mapping Parameters 6 | * 7 | * @param {object} params 8 | * @param {function} dispatch 9 | */ 10 | 11 | const ajaxLogin = (params, dispatch) => 12 | new Promise((resolve, reject) => 13 | ajax( 14 | 'website/user/login', 15 | { 16 | username: params.LoginName, 17 | password: params.LoginPassword, 18 | }, 19 | reject, reject, 20 | (response) => { 21 | resolve() 22 | return dispatch(updateState({ 23 | userId: response.data.id, 24 | userName: response.data.username, 25 | token: response.data.token 26 | })) 27 | } 28 | ) 29 | ) 30 | 31 | const ajaxLogout = (params, dispatch) => 32 | new Promise((resolve) => 33 | ajax( 34 | 'website/user/logout', 35 | { 36 | name: params.LoginName, 37 | password: params.LoginPassword, 38 | }, 39 | resolve, 40 | resolve, 41 | (response) => { 42 | return resolve() 43 | } 44 | ) 45 | ) 46 | 47 | export { ajaxLogin, ajaxLogout } 48 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Login/index.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import connect from 'react-redux/es/connect/connect' 3 | import Background from './Components/Background.jsx' 4 | import Form from './Components/Form.jsx' 5 | import { login } from './task' 6 | 7 | /** 8 | * Todo 9 | * https://www.zhihu.com/#signin 10 | * 11 | */ 12 | 13 | function Component({ dispatch, props, app }) { 14 | process.env.NODE_ENV === 'production' || console.log('LoginProps: ', props) 15 | const BackgroundProps = { 16 | title: app.title 17 | } 18 | const FormProps = { 19 | loading: props.LoginLoading, 20 | hasRegister: props.hasRegister, 21 | onSubmit(values) { 22 | dispatch(login(values)) 23 | } 24 | } 25 | 26 | return ( 27 | 28 | 29 | 30 | ) 31 | } 32 | 33 | export default connect(state => { 34 | return { 35 | app: state.app, 36 | props: state.login, 37 | } 38 | })(Component) 39 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Login/reduce.js: -------------------------------------------------------------------------------- 1 | import { UpdateState } from './action' 2 | import initialState from './state' 3 | 4 | export default function reduce(state = initialState, action = {}) { 5 | switch (action.type) { 6 | case UpdateState: 7 | return { ...state, ...action.payload } 8 | default: 9 | return state 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Login/state.js: -------------------------------------------------------------------------------- 1 | const state = { 2 | root: false, 3 | token: '', 4 | userName: '', 5 | userId: '', 6 | LoginName: '', 7 | LoginPassword: '', 8 | LoginRemember: false, 9 | LoginLoading: false, 10 | ResetPhone: '', 11 | ResetCode: '', 12 | ResetPassword: '', 13 | hasForgot: true, 14 | hasRegister: false 15 | } 16 | 17 | export default state -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Navigation/Components/TableHeader.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {Table, Button} from 'antd' 3 | 4 | function TableHeader({loading, onClick}) { 5 | return ( 6 | 11 | ) 12 | } 13 | 14 | export default TableHeader 15 | 16 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Navigation/action.js: -------------------------------------------------------------------------------- 1 | import {namespace} from '../../redux/actions'; 2 | 3 | const UpdateState = namespace('Navigation', 'UpdateState') 4 | 5 | export {UpdateState} 6 | 7 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Navigation/index.pcss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/react-dashboard/src/Containers/Navigation/index.pcss -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Navigation/reduce.js: -------------------------------------------------------------------------------- 1 | import {UpdateState, ToggleSider} from './action' 2 | import initialState from './state' 3 | 4 | export default function reduce(state = initialState, action = {}) { 5 | switch (action.type) { 6 | case UpdateState: 7 | return {...state, ...action.payload} 8 | default: 9 | return state 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Navigation/state.js: -------------------------------------------------------------------------------- 1 | const state = { 2 | searchName: '', 3 | navTypes: [], 4 | tableData: [], 5 | tableTotals: 0, 6 | tableCurrent: 1, 7 | tablePageSize: 10, 8 | tableLoading: false, 9 | modalLoading: false, 10 | modalAddVisible: false, 11 | modalAddConfirmLoading: false, 12 | modalEditVisible: false, 13 | modalEditConfirmLoading: false, 14 | modalId: '', 15 | modalChannel: undefined, 16 | modalLinkUrl: '', 17 | modalName: '11', 18 | modalSort: '', 19 | modalType: undefined, 20 | buttonAddLoading: false, 21 | buttonSearchLoading: false, 22 | buttonResetLoading: false, 23 | } 24 | 25 | export default state 26 | 27 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Packages/Components/Form.pcss: -------------------------------------------------------------------------------- 1 | .form {} 2 | 3 | .form :global(.ant-form-item) {} 4 | 5 | .slider { 6 | margin-bottom: 40px !important; 7 | margin-right: 10% !important; 8 | margin-left: 15% !important; 9 | } 10 | 11 | .hr { 12 | margin-left: 16%; 13 | margin-right: 8%; 14 | margin-bottom: 20px; 15 | border: solid 1px #ccc; 16 | } 17 | 18 | .hr2 { 19 | margin-left: 8%; 20 | margin-right: 8%; 21 | margin-top: 20px; 22 | border: solid 1px #ccc; 23 | } 24 | 25 | .delete { 26 | cursor: pointer; 27 | position: relative; 28 | top: 4px; 29 | font-size: 24px; 30 | color: #999; 31 | transition: all .3s; 32 | } 33 | 34 | .delete:hover { 35 | color: #777; 36 | } 37 | 38 | .delete[disabled] { 39 | cursor: not-allowed; 40 | opacity: 0.5; 41 | } 42 | 43 | .title{ 44 | margin-bottom: 14px; 45 | margin-top: 14px; 46 | } -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Packages/Components/Header.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Row, Col, Button } from 'antd' 3 | import { Link } from 'react-router-dom'; 4 | import styles from './Header.pcss' 5 | 6 | function Component({ 7 | packageId, status, isReco, headerPreviewDisabled, headerOnlineDisabled, headerRecommendDisabled, 8 | onBack, openIntro, onPreview, toggleStatus, toggleRecommendation 9 | }) { 10 | return ( 11 | 12 | 13 | 19 | 20 | 21 | 26 | 31 | 36 | 37 |
38 |
39 | ) 40 | } 41 | 42 | export default Component 43 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Packages/Components/Header.pcss: -------------------------------------------------------------------------------- 1 | .hr { 2 | margin-left: 0; 3 | margin-right: 0; 4 | margin-top: 50px; 5 | margin-bottom: 20px; 6 | border: solid 1px #ccc; 7 | } -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Packages/Components/Modal.pcss: -------------------------------------------------------------------------------- 1 | .modal { 2 | width: 96% !important; 3 | max-width: 1280px; 4 | } 5 | 6 | .modal img { 7 | width: 100% 8 | } 9 | 10 | .card { 11 | width: 170px; 12 | height: 180px; 13 | } 14 | 15 | .card img { 16 | width: 100%; 17 | } -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Packages/Components/ModalColumns.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Modal, Row, Col, Button, Radio } from 'antd' 3 | import { Link } from 'react-router-dom'; 4 | import styles from './Modal.pcss' 5 | 6 | function Component({ id, visible, data, onOK, onCancel, onChange }) { 7 | const handleChange = (e) => { 8 | console.log(e) 9 | onChange(e.target.value) 10 | } 11 | 12 | return ( 13 | 20 | 21 | 22 | {data.map((value, index) => 23 | 24 | {value.value} 25 | {value.value} 26 | )} 27 | 28 | 29 | 30 | ) 31 | } 32 | 33 | export default Component 34 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Packages/Components/ModalIntro.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Modal, Col, Button } from 'antd' 3 | import { Link } from 'react-router-dom'; 4 | import styles from './Modal.pcss' 5 | import url from './introduction.png' 6 | 7 | function Component({ visible, onOK }) { 8 | return ( 9 | 17 | 套餐效果图说明 18 | 19 | ) 20 | } 21 | 22 | export default Component 23 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Packages/Components/TableHeader.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {Table, Button} from 'antd' 3 | 4 | function TableHeader({loading, onClick}) { 5 | return ( 6 | 11 | ) 12 | } 13 | 14 | export default TableHeader 15 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Packages/Components/index.pcss: -------------------------------------------------------------------------------- 1 | .form {} 2 | 3 | .form :global(.ant-form-item) { 4 | width: 240px; 5 | margin-bottom: 20px; 6 | } 7 | 8 | .hr { 9 | margin-left: 0; 10 | margin-right: 0; 11 | margin-top: 30px; 12 | margin-bottom: 30px; 13 | border: solid 1px #ddd; 14 | // max-width: 480px; 15 | width: 100%; 16 | } 17 | 18 | .button { 19 | margin-left: 10px; 20 | margin-top: 40px; 21 | } -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Packages/Components/introduction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/react-dashboard/src/Containers/Packages/Components/introduction.png -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Packages/action.js: -------------------------------------------------------------------------------- 1 | import { namespace } from '../../redux/actions'; 2 | 3 | const UpdateState = namespace('Packages', 'UpdateState') 4 | 5 | export { UpdateState } 6 | 7 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Packages/index.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Card, Pagination } from 'antd' 3 | import connect from 'react-redux/es/connect/connect' 4 | import { history } from '../../redux/store' 5 | import Breadcrumb from '../../Components/Breadcrumb/index.jsx' 6 | import { notRepeating } from '../../util/util' 7 | import Table from './Components/Table.jsx' 8 | import TableHeader from './Components/TableHeader.jsx' 9 | import { 10 | preview, toggleRecommendation, toggleStatus, 11 | searchLiveList, changeSearchChannel, resetLiveList, changePage, toEdit 12 | } from './task' 13 | 14 | function Component({ dispatch, props, app }) { 15 | process.env.NODE_ENV === 'production' || console.log('PackageProps: ', props, app) 16 | 17 | const breadcrumbProps = { 18 | breadcrumbs: [{ 19 | name: '内容管理', 20 | }, { 21 | name: '套餐管理', 22 | }] 23 | } 24 | 25 | const tableHeaderProps = { 26 | onClick() { 27 | history.push('/packages/add') 28 | } 29 | } 30 | 31 | const tableProps = { 32 | dataSource: props.tableData, 33 | loading: props.tableLoading, 34 | toggleStatus(id, status) { 35 | notRepeating(() => dispatch(toggleStatus(id, status))) 36 | }, 37 | toggleRecommendation(id, status) { 38 | notRepeating(() => dispatch(toggleRecommendation(id, status))) 39 | }, 40 | onEdit(id) { 41 | notRepeating(() => dispatch(toEdit(id))) 42 | }, 43 | onPreview(id) { 44 | notRepeating(() => dispatch(preview(id))) 45 | } 46 | } 47 | 48 | return ( 49 |
50 | 51 | 52 | 53 | 54 | 55 | 56 | ) 57 | } 58 | 59 | export default connect(state => { 60 | return { 61 | app: state.app, 62 | props: state.packages, 63 | } 64 | })(Component) 65 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Packages/reduce.js: -------------------------------------------------------------------------------- 1 | import {UpdateState} from './action' 2 | import initialState from './state' 3 | 4 | export default function reduce(state = initialState, action = {}) { 5 | switch (action.type) { 6 | case UpdateState: 7 | return {...state, ...action.payload} 8 | default: 9 | return state 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/Containers/Packages/state.js: -------------------------------------------------------------------------------- 1 | const state = { 2 | packageId: '', 3 | columnId: '', 4 | columnsStyleKey: 0, 5 | previewUrl: '', 6 | tableData: [], 7 | tableTotals: 0, 8 | tableCurrent: 1, 9 | tablePageSize: 10, 10 | tableLoading: false, 11 | modalIntroVisible: false, 12 | modalColumsId: undefined, 13 | modalColumnsStyles: [], 14 | modalColumsVisible: false, 15 | headerPreviewDisabled: true, 16 | headerOnlineDisabled: true, 17 | headerRecommendDisabled: true, 18 | formId: false, 19 | formType: undefined, 20 | formStatus: undefined, 21 | formIsReco: undefined, 22 | formName: '', 23 | formSort: '', 24 | formImage: [], 25 | formPrice: '', 26 | formQuota: '', 27 | formSurplus: '', 28 | formSaveLoading: false, 29 | formSaveDisabled: false, 30 | formAddColumnLoading: false, 31 | columnsStyles: [], 32 | columnsStylesItem: { 33 | id: 'formId', 34 | type_id: 'formColumnTypeId', 35 | title: 'title', 36 | okLoading: false, 37 | cancelLoading: false, 38 | buttonOkDisabled: false, 39 | c_name: 'formName', 40 | n_name: 'formNav', 41 | content: 'formIntro', 42 | sort_order: 'formSort', 43 | sub_title: 'formSubTitle', 44 | image_url: 'formVideoImage[0]', 45 | video_url: 'formVideoUrl', 46 | items: [{ 47 | menu_name: 'formMenuName', 48 | image_url: 'formImageUrl', 49 | external_link: 'formUrl', 50 | image_intro: 'formIntro', 51 | }] 52 | }, 53 | } 54 | 55 | export default state -------------------------------------------------------------------------------- /apps/react-dashboard/src/__test__/Components/HelloWorld.test.jsx: -------------------------------------------------------------------------------- 1 | import HelloWorld from '../../Components/HelloWorld'; 2 | import { rendersWithoutCrashing } from 'yhtml5-test/case'; 3 | 4 | // const rendersWithoutCrashing = (name = '', Component) => { 5 | // if (Object.prototype.toString.call(name) !== '[object String]' && 6 | // Object.prototype.toString.call(name) !== '[object Function]') { 7 | // throw 'The function rendersWithoutCrashing receives [name:string, Component:function] as arguments' 8 | // } 9 | // it(`${name} renders without crashing`, () => { 10 | // const div = document.createElement('div') 11 | // ReactDOM.render(, div) 12 | // }) 13 | // } 14 | 15 | rendersWithoutCrashing('Components.HelloWorld', HelloWorld) 16 | 17 | 18 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/__test__/Router.test.js: -------------------------------------------------------------------------------- 1 | import Router from '../Router.jsx'; 2 | import { shallow } from 'enzyme'; 3 | 4 | it('App Routers tests', () => { 5 | shallow(); 6 | }); -------------------------------------------------------------------------------- /apps/react-dashboard/src/__test__/validator.test.js: -------------------------------------------------------------------------------- 1 | import { 2 | isUndefined, 3 | isNumber, 4 | isFunction, 5 | isArray, isArrayEmpty, 6 | isString, isStringEmpty, isStringNotEmpty, 7 | isObject, isObjectEmpty, isArrayNotEmpty 8 | } from '../util/validator'; 9 | 10 | it('util.validator.isUndefined', () => { 11 | const values = [null, NaN, 111, '111', {}, [], () => { },] 12 | values.forEach((value) => { 13 | expect(isUndefined(value)).toEqual(false); 14 | }); 15 | expect(isUndefined(undefined)).toEqual(true); 16 | }); 17 | 18 | it('util.validator.isNumber', () => { 19 | expect(isNumber(111)).toEqual(true); 20 | }); -------------------------------------------------------------------------------- /apps/react-dashboard/src/global.css: -------------------------------------------------------------------------------- 1 | * { 2 | padding: 0; 3 | margin: 0; 4 | transition: all 0.3s; 5 | } 6 | 7 | #root { 8 | height: 100%; 9 | } 10 | 11 | .y-m-t-20 { 12 | margin-top: 20px; 13 | } 14 | 15 | .y-m-t-40 { 16 | margin-top: 40px; 17 | } 18 | 19 | .y-m-t-100 { 20 | margin-top: 100px; 21 | } 22 | 23 | .y-m-b-20 { 24 | margin-bottom: 20px; 25 | } 26 | 27 | .y-m-b-40 { 28 | margin-bottom: 40px; 29 | } 30 | 31 | .y-m-l-10 { 32 | margin-left: 10px; 33 | } 34 | 35 | .y-m-l-20 { 36 | margin-left: 20px; 37 | } 38 | 39 | .test { 40 | transition: all .3s; 41 | } 42 | 43 | .no-select { 44 | user-select: none; 45 | } 46 | 47 | .route-enter { 48 | opacity: 0.01; 49 | } 50 | 51 | .route-enter.route-enter-active { 52 | opacity: 1; 53 | transition: opacity 500ms ease-in; 54 | } 55 | 56 | .route-leave { 57 | opacity: 1; 58 | } 59 | 60 | .route-leave.route-leave-active { 61 | opacity: 0.01; 62 | transition: opacity 300ms ease-in; 63 | } 64 | 65 | .y-card-pagination { 66 | float: right; 67 | margin-bottom: 20px; 68 | margin-top: 10px; 69 | } 70 | 71 | .table-operating { 72 | padding: 4px; 73 | } 74 | 75 | .y-table .ant-table-thead>tr>th, 76 | .y-table .ant-table-tbody>tr>td { 77 | text-align: center !important; 78 | } 79 | 80 | .y-table { 81 | min-height: 200px; 82 | } 83 | 84 | .y-transition-all { 85 | transition: all 0.3s cubic-bezier(0.215, 0.61, 0.355, 1); 86 | } 87 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactDOM from 'react-dom' 3 | import Router from './Router.jsx' 4 | import './global.css' 5 | 6 | const render = (Components) => { 7 | ReactDOM.render( 8 | // module.hot 9 | // ? (function () { 10 | // const { AppContainer } = require('react-hot-loader') 11 | // return 12 | // 13 | // 14 | // })() 15 | // : 16 | 17 | , document.getElementById('root') 18 | ) 19 | } 20 | 21 | render(Router) 22 | 23 | // Hot Module Replacement API 24 | // if (module.hot) { 25 | // module.hot.accept('./Router.jsx', () => { 26 | // render(Router) 27 | // console.clear() 28 | // }) 29 | // } 30 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/redux/actions.js: -------------------------------------------------------------------------------- 1 | function namespace(namespace, name, v) { 2 | return ( 3 | namespace + '-' + name 4 | ) 5 | } 6 | 7 | export {namespace} 8 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/redux/reducers.js: -------------------------------------------------------------------------------- 1 | import app from '../Containers/App/reduce' 2 | import demo from '../Containers/Demo/reduce' 3 | import document from '../Containers/Document/reduce' 4 | import functions from '../Containers/Function/reduce' 5 | import navigation from '../Containers/Navigation/reduce' 6 | import live from '../Containers/Live/reduce' 7 | import login from '../Containers/Login/reduce' 8 | import layout from '../Containers/Layout/reduce' 9 | import packages from '../Containers/Packages/reduce' 10 | 11 | export default { 12 | app, 13 | demo, 14 | document, 15 | layout, 16 | login, 17 | functions, 18 | navigation, 19 | live, 20 | packages 21 | } 22 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/redux/store.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | import thunk from 'redux-thunk' 3 | import {createStore, combineReducers, applyMiddleware} from 'redux' 4 | import {routerReducer, routerMiddleware, push} from 'react-router-redux' 5 | import createHistory from 'history/createHashHistory' 6 | import reducers from './reducers' 7 | 8 | // Create a history of your choosing (we're using a browser history in this case) 9 | const history = createHistory() 10 | 11 | // Build the middleware for intercepting and dispatching navigation actions 12 | // const routerMiddleware = routerMiddleware(history) 13 | 14 | // Add the reducer to your store on the `router` key 15 | // Also apply our middleware for navigating 16 | const store = createStore( 17 | combineReducers({ 18 | ...reducers, 19 | router: routerReducer 20 | }), 21 | applyMiddleware(thunk, routerMiddleware(history)) 22 | ) 23 | 24 | export {store, history} 25 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/react-dashboard/src/static/favicon.ico -------------------------------------------------------------------------------- /apps/react-dashboard/src/static/img/.yhtml5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/react-dashboard/src/static/img/.yhtml5 -------------------------------------------------------------------------------- /apps/react-dashboard/src/static/yh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/react-dashboard/src/static/yh.png -------------------------------------------------------------------------------- /apps/react-dashboard/src/static/yhtml5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/react-dashboard/src/static/yhtml5.png -------------------------------------------------------------------------------- /apps/react-dashboard/src/util/ajax.js: -------------------------------------------------------------------------------- 1 | import reqwest from 'reqwest' 2 | import { message } from 'antd' 3 | import { config, getApiUrl } from '../config.js' 4 | import { history } from '../redux/store' 5 | import { getCookie } from './cookie.js' 6 | import { isString, isObject, isFunction } from './validator' 7 | let { cookie, entryUrl } = config() 8 | 9 | function ajax(url, param, fail, error, success) { 10 | // console.clear() 11 | if (!isString(url)) { 12 | return console.warn('ajax url should be a non-empty string') 13 | } else if (!(isObject(param) || isString(param))) { 14 | return console.warn('ajax param should be the object') 15 | } else if (!(isFunction(fail) && isFunction(error) && isFunction(success))) { 16 | return console.warn('ajax callback should be a function') 17 | } else { } 18 | let newParam = { 19 | data: JSON.stringify(param), 20 | token: getCookie(cookie.token) 21 | } 22 | console.warn('ajaxParam-' + url + ': ', newParam) 23 | reqwest({ 24 | url: getApiUrl() + '/' + url, 25 | type: 'json', 26 | method: 'get', 27 | data: newParam, 28 | contentType: 'application/json', 29 | error: function (error) { 30 | // setTimeout(() => message.destroy(), 200) 31 | message.error('网络异常, http状态码:' + 500, 3); 32 | console.error(error) 33 | fail() 34 | }, 35 | success: function (response) { 36 | // setTimeout(() => message.destroy(), 200) 37 | if (Number(response.code) === 20000) { 38 | success(response) 39 | } else if (Number(response.code) === 50002) { 40 | message.info('当前登录状态已失效,2秒后自动将跳转到登录页...', 3) 41 | setTimeout(() => { 42 | history.push(entryUrl) 43 | }, 2000) 44 | } else { 45 | message.error((response.error.errorMsg) ? response.error.errorMsg : '网络异常') 46 | error() 47 | } 48 | console.warn('ajaxResponse-' + url + ': ', response) 49 | } 50 | }) 51 | } 52 | 53 | export default ajax -------------------------------------------------------------------------------- /apps/react-dashboard/src/util/cookie.js: -------------------------------------------------------------------------------- 1 | import {encrypt, decrypted} from './security' 2 | 3 | /** 4 | * set cookie. 5 | * 6 | * Todo: sha1 7 | * 8 | * @param {String} name 9 | * @param {String} value 10 | * @param {number} hour 11 | */ 12 | 13 | function setCookie(name, value, hour) { 14 | let currentTime = new Date() 15 | currentTime.setTime(currentTime.getTime() + (hour * 60 * 60 * 1000)) 16 | document.cookie = 'token=null' 17 | document.cookie = `${name}=${encrypt(value)};expires=${currentTime.toGMTString()}` 18 | } 19 | 20 | const getCookie = (name) => { 21 | return (new RegExp(name, 'g').test(document.cookie)) 22 | ? decrypted(document.cookie.split(name)[1].split("=")[1].split(";")[0]) 23 | : false 24 | } 25 | const clearCookie = (name) => { 26 | if (name) { 27 | setCookie(name, '', -1) 28 | } else { 29 | const keys = document.cookie.match(/[^ =;]+(?=\=)/g) 30 | if (keys) { 31 | keys.forEach((key) => setCookie(key, '', -1)) 32 | } 33 | } 34 | } 35 | 36 | export {setCookie, getCookie, clearCookie} 37 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/util/index.js: -------------------------------------------------------------------------------- 1 | // import {notRepeating, downLoad} from './function' 2 | 3 | const ajax = (url, param, fail, error, success) => require.ensure([], require => { 4 | require('./ajax').default(url, param, fail, error, success) 5 | }, 'ajax') 6 | 7 | export {ajax} 8 | 9 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/util/localStorage.js: -------------------------------------------------------------------------------- 1 | function hasLocalStorage() { 2 | try { 3 | return 'localStorage' in window && window['localStorage'] !== null; 4 | } catch (e) { 5 | return false; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/util/polyfill.js: -------------------------------------------------------------------------------- 1 | // function isArray() { 2 | // if (!Array.isArray) { 3 | // Array.isArray = function (arg) { 4 | // return Object.prototype.toString.call(arg) === '[object Array]' 5 | // } 6 | // } 7 | // } 8 | // 9 | // export {isArray} 10 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/util/prototype.js: -------------------------------------------------------------------------------- 1 | // Array.prototype.clone = function () { 2 | // return this.slice(0) 3 | // } 4 | // Array.prototype.clone = function () { 5 | // return [].concat(this) 6 | // } 7 | // 8 | // var prototype = { 9 | // arrayClone: Array.prototype.clone = function () { 10 | // return this.concat() 11 | // } 12 | // } 13 | // 14 | // export {prototype} 15 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/util/security.js: -------------------------------------------------------------------------------- 1 | const createNonceStr = () => Math.random().toString(36).substr(2, 15) 2 | const createTimestamp = () => String(parseInt(new Date().getTime() / 1000)) 3 | const salt = 'zXb1m' 4 | 5 | const encrypt = (value) => createNonceStr() + createTimestamp() + salt + value 6 | const decrypted = (value) => value.split(salt)[1] 7 | 8 | export {encrypt, decrypted, createTimestamp, createNonceStr} 9 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/util/util.js: -------------------------------------------------------------------------------- 1 | import { config } from '../config' 2 | import { history } from '../redux/store' 3 | import { getCookie } from './cookie' 4 | import { isStringNotEmpty } from './validator' 5 | const { cookie } = config() 6 | 7 | let awaitStatus = true 8 | 9 | const timer = () => new Promise((resolve) => setTimeout(resolve, 1000)) 10 | 11 | async function notRepeating(fun) { 12 | if (awaitStatus) { 13 | awaitStatus = false 14 | fun() 15 | await timer() 16 | awaitStatus = true 17 | } 18 | } 19 | 20 | function downLoad(url) { 21 | if (isStringNotEmpty(url)) { 22 | let a = document.createElement('a') 23 | a.href = encodeURI(url) 24 | a.download = 'excel' 25 | a.id = 'downLoad' 26 | a.style.display = 'none' 27 | // a.click() 28 | document.body.appendChild(a) 29 | document.getElementById('downLoad').click() 30 | document.body.removeChild(document.getElementById('downLoad')) 31 | a = null 32 | } else { 33 | console.error('function downLoad url should be a not empty string') 34 | } 35 | } 36 | 37 | function checkToken() { 38 | if (!getCookie(cookie.token) && history.location.pathname !== '/login') { 39 | // 提示信息失效请登录 40 | history.push('/login') 41 | } 42 | } 43 | 44 | export { notRepeating, downLoad, checkToken } 45 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/util/validator.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Enter JavaScript-style regular expression to display 3 | * https://regexper.com/ 4 | * Write and test regular expression 5 | * http://www.regexr.com/ 6 | */ 7 | 8 | // var is ={ 9 | // types : ["Array", "Boolean", "Date", "Number", "Object", "RegExp", "String", "Window", "HTMLDocument"] 10 | // }; 11 | // for(var i = 0, c; c = is.types[i ++ ]; ){ 12 | // is[c] = (function(type){ 13 | // return function(obj){ 14 | // return Object.prototype.toString.call(obj) == "[object " + type + "]"; 15 | // } 16 | // )(c); 17 | // } 18 | 19 | const isUndefined = (value) => typeof value === 'undefined' 20 | const isNull = (value) => Object.prototype.toString.call(value) === '[object Null]' 21 | const isNumber = (value) => Object.prototype.toString.call(value) === '[object Number]' 22 | const isString = (value) => Object.prototype.toString.call(value) === '[object String]' 23 | const isStringEmpty = (value) => Object.prototype.toString.call(value) === '[object String]' && value === '' 24 | const isStringNotEmpty = (value) => Object.prototype.toString.call(value) === '[object String]' && value !== '' 25 | const isFunction = (value) => Object.prototype.toString.call(value) === '[object Function]' 26 | const isArray = (value) => Object.prototype.toString.call(value) === '[object Array]' 27 | const isArrayEmpty = (value) => Array.isArray(value) && value.length === 0 28 | const isArrayNotEmpty = (value) => Array.isArray(value) && value.length > 0 29 | const isObject = (value) => Object.prototype.toString.call(value) === '[object Object]' 30 | const isObjectEmpty = (value) => Object.prototype.isPrototypeOf(value) === '[object Object]' && Object.keys(value).length === 0 31 | 32 | export { 33 | isNull, 34 | isUndefined, 35 | isNumber, 36 | isFunction, 37 | isArray, isArrayEmpty, 38 | isString, isStringEmpty, isStringNotEmpty, 39 | isObject, isObjectEmpty, isArrayNotEmpty 40 | } 41 | -------------------------------------------------------------------------------- /apps/react-dashboard/src/util/validator.test.js: -------------------------------------------------------------------------------- 1 | import { 2 | isUndefined, 3 | isNumber, 4 | isFunction, 5 | isArray, isArrayEmpty, 6 | isString, isStringEmpty, isStringNotEmpty, 7 | isObject, isObjectEmpty, isArrayNotEmpty 8 | } from './validator'; 9 | 10 | it('util.validator.isUndefined', () => { 11 | const values = [null, NaN, 111, '111', {}, [], () => { },] 12 | values.forEach((value) => { 13 | expect(isUndefined(value)).toEqual(false); 14 | }); 15 | expect(isUndefined(undefined)).toEqual(true); 16 | }); 17 | 18 | it('util.validator.isNumber', () => { 19 | expect(isNumber(111)).toEqual(true); 20 | }); -------------------------------------------------------------------------------- /apps/vue/build/build.js: -------------------------------------------------------------------------------- 1 | // https://github.com/shelljs/shelljs 2 | require('./check-versions')() 3 | require('shelljs/global') 4 | env.NODE_ENV = 'production' 5 | 6 | var path = require('path') 7 | var config = require('../config/index') 8 | var ora = require('ora') 9 | var webpack = require('webpack') 10 | var webpackConfig = require('./webpack.prod.conf.js') 11 | 12 | console.log( 13 | ' Tip:\n' + 14 | ' Built files are meant to be served over an HTTP server.\n' + 15 | ' Opening index.html over file:// won\'t work.\n' 16 | ) 17 | 18 | var spinner = ora('building for production...') 19 | spinner.start() 20 | 21 | var assetsPath = path.join(config.build.assetsRoot, config.build.assetsSubDirectory) 22 | rm('-rf', assetsPath) 23 | mkdir('-p', assetsPath) 24 | cp('-R', 'apps/static/*', assetsPath) 25 | 26 | webpack(webpackConfig, function (err, stats) { 27 | spinner.stop() 28 | if (err) throw err 29 | process.stdout.write(stats.toString({ 30 | colors: true, 31 | modules: false, 32 | children: false, 33 | chunks: false, 34 | chunkModules: false 35 | }) + '\n') 36 | }) 37 | -------------------------------------------------------------------------------- /apps/vue/build/check-versions.js: -------------------------------------------------------------------------------- 1 | var semver = require('semver') 2 | var chalk = require('chalk') 3 | var packageConfig = require('../../package.json') 4 | var exec = function (cmd) { 5 | return require('child_process') 6 | .execSync(cmd).toString().trim() 7 | } 8 | 9 | var versionRequirements = [ 10 | { 11 | name: 'node', 12 | currentVersion: semver.clean(process.version), 13 | versionRequirement: packageConfig.engines.node 14 | }, 15 | { 16 | name: 'npm', 17 | currentVersion: exec('npm --version'), 18 | versionRequirement: packageConfig.engines.npm 19 | } 20 | ] 21 | 22 | module.exports = function () { 23 | var warnings = [] 24 | for (var i = 0; i < versionRequirements.length; i++) { 25 | var mod = versionRequirements[i] 26 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 27 | warnings.push(mod.name + ': ' + 28 | chalk.red(mod.currentVersion) + ' should be ' + 29 | chalk.green(mod.versionRequirement) 30 | ) 31 | } 32 | } 33 | 34 | if (warnings.length) { 35 | console.log('') 36 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 37 | console.log() 38 | for (var i = 0; i < warnings.length; i++) { 39 | var warning = warnings[i] 40 | console.log(' ' + warning) 41 | } 42 | console.log() 43 | process.exit(1) 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /apps/vue/build/dev-client.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | require('eventsource-polyfill') 3 | var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') 4 | 5 | hotClient.subscribe(function (event) { 6 | if (event.action === 'reload') { 7 | window.location.reload() 8 | } 9 | }) 10 | -------------------------------------------------------------------------------- /apps/vue/build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | var config = require('../config/index') 2 | var webpack = require('webpack') 3 | var merge = require('webpack-merge') 4 | var utils = require('./utils') 5 | var baseWebpackConfig = require('./webpack.base.conf.js') 6 | var HtmlWebpackPlugin = require('html-webpack-plugin') 7 | 8 | // add hot-reload related code to entry chunks 9 | Object.keys(baseWebpackConfig.entry).forEach(function (name) { 10 | baseWebpackConfig.entry[name] = ['./apps/build/dev-client'].concat(baseWebpackConfig.entry[name]) 11 | }) 12 | 13 | module.exports = merge(baseWebpackConfig, { 14 | module: { 15 | loaders: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap }) 16 | }, 17 | // eval-source-map is faster for development 18 | devtool: '#eval-source-map', 19 | plugins: [ 20 | new webpack.DefinePlugin({ 21 | 'process.env': config.dev.env 22 | }), 23 | // https://github.com/glenjamin/webpack-hot-middleware#installation--usage 24 | new webpack.optimize.OccurenceOrderPlugin(), 25 | new webpack.HotModuleReplacementPlugin(), 26 | new webpack.NoErrorsPlugin(), 27 | // https://github.com/ampedandwired/html-webpack-plugin 28 | new HtmlWebpackPlugin({ 29 | filename: 'index.html', 30 | template: 'apps/src/index.html', 31 | inject: true 32 | }) 33 | ] 34 | }) 35 | -------------------------------------------------------------------------------- /apps/vue/config/dev.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var prodEnv = require('./prod.env.js') 3 | 4 | module.exports = merge(prodEnv, { 5 | NODE_ENV: '"development"' 6 | }) 7 | -------------------------------------------------------------------------------- /apps/vue/config/index.js: -------------------------------------------------------------------------------- 1 | // see http://vuejs-templates.github.io/webpack for documentation. 2 | var path = require('path') 3 | var packageConfig = require('../../package.json') 4 | 5 | function getVersionDate() { 6 | var date = new Date(); 7 | var year = date.getFullYear(); 8 | var month = date.getMonth() + 1; 9 | var day = date.getDate(); 10 | var hour = date.getHours(); 11 | var minute = date.getMinutes(); 12 | var second = date.getSeconds(); 13 | return year + '' + month + '' + day + '' + hour + '' + minute + '' + second 14 | } 15 | 16 | const indexVersion = '../dist/v' + packageConfig.version + '-' + getVersionDate() + '/index.html' 17 | const assetsRootVersion = '../dist/v' + packageConfig.version + '-' + getVersionDate() 18 | 19 | module.exports = { 20 | build: { 21 | env: require('./prod.env.js'), 22 | index: path.resolve(__dirname, indexVersion), 23 | assetsRoot: path.resolve(__dirname, assetsRootVersion), 24 | assetsSubDirectory: 'static', 25 | assetsPublicPath: './', 26 | productionSourceMap: true, 27 | // Gzip off by default as many popular static hosts such as 28 | // Surge or Netlify already gzip all static assets for you. 29 | // Before setting to `true`, make sure to: 30 | // npm install --save-dev compression-webpack-plugin 31 | productionGzip: false, 32 | productionGzipExtensions: ['js', 'css'] 33 | }, 34 | dev: { 35 | env: require('./dev.env.js'), 36 | port: 8080, 37 | assetsSubDirectory: 'static', 38 | assetsPublicPath: '/', 39 | proxyTable: {}, 40 | // CSS Sourcemaps off by default because relative paths are "buggy" 41 | // with this option, according to the CSS-Loader README 42 | // (https://github.com/webpack/css-loader#sourcemaps) 43 | // In our experience, they generally work as expected, 44 | // just be aware of this issue when enabling this option. 45 | cssSourceMap: false 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /apps/vue/config/prod.env.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | NODE_ENV: '"production"' 3 | } 4 | -------------------------------------------------------------------------------- /apps/vue/config/test.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var devEnv = require('./dev.env.js') 3 | 4 | module.exports = merge(devEnv, { 5 | NODE_ENV: '"testing"' 6 | }) 7 | -------------------------------------------------------------------------------- /apps/vue/dist/v1.0.0-2016125204718/index.html: -------------------------------------------------------------------------------- 1 | YHTML5
-------------------------------------------------------------------------------- /apps/vue/dist/v1.0.0-2016125204718/static/css/app.df8dcf776905a9f955261c5def67c48d.css: -------------------------------------------------------------------------------- 1 | #app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#2c3e50;margin-top:60px}h1[data-v-c4b8dffe],h2[data-v-c4b8dffe]{font-weight:400}ul[data-v-c4b8dffe]{list-style-type:none;padding:0}li[data-v-c4b8dffe]{display:inline-block;margin:0 10px}a[data-v-c4b8dffe]{color:#42b983} 2 | /*# sourceMappingURL=apps.df8dcf776905a9f955261c5def67c48d.css.map*/ -------------------------------------------------------------------------------- /apps/vue/dist/v1.0.0-2016125204718/static/css/app.df8dcf776905a9f955261c5def67c48d.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["webpack:///webpack:///app/src/App.vue","webpack:///webpack:///app/src/components/Hello.vue"],"names":[],"mappings":"AACA,KACE,8CACA,mCACA,kCACA,kBACA,cACA,eAAiB,CCNnB,wCACE,eAAoB,CAEtB,oBACE,qBACA,SAAW,CAEb,oBACE,qBACA,aAAe,CAEjB,mBACE,aAAe","file":"static/css/app.df8dcf776905a9f955261c5def67c48d.css","sourcesContent":["\n#app {\n font-family: 'Avenir', Helvetica, Arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-align: center;\n color: #2c3e50;\n margin-top: 60px;\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///app/src/App.vue","\nh1[data-v-c4b8dffe], h2[data-v-c4b8dffe] {\n font-weight: normal;\n}\nul[data-v-c4b8dffe] {\n list-style-type: none;\n padding: 0;\n}\nli[data-v-c4b8dffe] {\n display: inline-block;\n margin: 0 10px;\n}\na[data-v-c4b8dffe] {\n color: #42b983;\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///app/src/components/Hello.vue"],"sourceRoot":""} -------------------------------------------------------------------------------- /apps/vue/dist/v1.0.0-2016125204718/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/vue/dist/v1.0.0-2016125204718/static/favicon.ico -------------------------------------------------------------------------------- /apps/vue/dist/v1.0.0-2016125204718/static/img/icon/bootstrap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/vue/dist/v1.0.0-2016125204718/static/img/icon/bootstrap.png -------------------------------------------------------------------------------- /apps/vue/dist/v1.0.0-2016125204718/static/img/logo.82b9c7a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/vue/dist/v1.0.0-2016125204718/static/img/logo.82b9c7a.png -------------------------------------------------------------------------------- /apps/vue/dist/v1.0.0-2016125204718/static/js/manifest.4804dd64a6f48c93a79f.js: -------------------------------------------------------------------------------- 1 | !function(e){function t(n){if(a[n])return a[n].exports;var r=a[n]={exports:{},id:n,loaded:!1};return e[n].call(r.exports,r,r.exports,t),r.loaded=!0,r.exports}var n=window.webpackJsonp;window.webpackJsonp=function(c,o){for(var p,s,l=0,i=[];l 2 |
3 |

{{ msg }}

4 |

Essential Links

5 | 13 |

Ecosystem

14 | 20 |
21 | 22 | 23 | 33 | 34 | 35 | 54 | -------------------------------------------------------------------------------- /apps/vue/src/components/search.vue: -------------------------------------------------------------------------------- 1 | 17 | 42 | 43 | 48 | -------------------------------------------------------------------------------- /apps/vue/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | YHTML5 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /apps/vue/src/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import router from './router/router' 3 | import Index from './router/home.vue' 4 | 5 | /* eslint-disable no-new */ 6 | new Vue({ 7 | el: '#apps', 8 | router, 9 | template: '', 10 | components: {Index} 11 | }).$mount('#apps') 12 | -------------------------------------------------------------------------------- /apps/vue/src/router/home.vue: -------------------------------------------------------------------------------- 1 | 29 | 30 | 44 | 55 | -------------------------------------------------------------------------------- /apps/vue/static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/vue/static/.gitkeep -------------------------------------------------------------------------------- /apps/vue/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/vue/static/favicon.ico -------------------------------------------------------------------------------- /apps/vue/static/img/icon/bootstrap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/vue/static/img/icon/bootstrap.png -------------------------------------------------------------------------------- /apps/vue/test/e2e/custom-assertions/elementCount.js: -------------------------------------------------------------------------------- 1 | // A custom Nightwatch assertion. 2 | // the name of the method is the filename. 3 | // can be used in tests like this: 4 | // 5 | // browser.assert.elementCount(selector, count) 6 | // 7 | // for how to write custom assertions see 8 | // http://nightwatchjs.org/guide#writing-custom-assertions 9 | exports.assertion = function (selector, count) { 10 | this.message = 'Testing if element <' + selector + '> has count: ' + count 11 | this.expected = count 12 | this.pass = function (val) { 13 | return val === this.expected 14 | } 15 | this.value = function (res) { 16 | return res.value 17 | } 18 | this.command = function (cb) { 19 | var self = this 20 | return this.api.execute(function (selector) { 21 | return document.querySelectorAll(selector).length 22 | }, [selector], function (res) { 23 | cb.call(self, res) 24 | }) 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /apps/vue/test/e2e/nightwatch.conf.js: -------------------------------------------------------------------------------- 1 | require('babel-register') 2 | var config = require('../../config/index') 3 | 4 | // http://nightwatchjs.org/guide#settings-file 5 | module.exports = { 6 | "src_folders": ["apps/test/e2e/specs"], 7 | "output_folder": "apps/test/e2e/reports", 8 | "custom_assertions_path": ["apps/test/e2e/custom-assertions"], 9 | 10 | "selenium": { 11 | "start_process": true, 12 | "server_path": "node_modules/selenium-server/lib/runner/selenium-server-standalone-2.53.1.jar", 13 | "host": "127.0.0.1", 14 | "port": 4444, 15 | "cli_args": { 16 | "webdriver.chrome.driver": require('chromedriver').path 17 | } 18 | }, 19 | 20 | "test_settings": { 21 | "default": { 22 | "selenium_port": 4444, 23 | "selenium_host": "localhost", 24 | "silent": true, 25 | "globals": { 26 | "devServerURL": "http://localhost:" + (process.env.PORT || config.dev.port) 27 | } 28 | }, 29 | 30 | "chrome": { 31 | "desiredCapabilities": { 32 | "browserName": "chrome", 33 | "javascriptEnabled": true, 34 | "acceptSslCerts": true 35 | } 36 | }, 37 | 38 | "firefox": { 39 | "desiredCapabilities": { 40 | "browserName": "firefox", 41 | "javascriptEnabled": true, 42 | "acceptSslCerts": true 43 | } 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /apps/vue/test/e2e/reports/CHROME_54.0.2840.98_MAC_test.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /apps/vue/test/e2e/runner.js: -------------------------------------------------------------------------------- 1 | // 1. start the dev server using production config 2 | process.env.NODE_ENV = 'testing' 3 | var server = require('../../build/dev-server.js') 4 | 5 | // 2. run the nightwatch test suite against it 6 | // to run in additional browsers: 7 | // 1. add an entry in test/e2e/nightwatch.conf.json under "test_settings" 8 | // 2. add it to the --env flag below 9 | // or override the environment flag, for example: `npm run e2e -- --env chrome,firefox` 10 | // For more information on Nightwatch's config file, see 11 | // http://nightwatchjs.org/guide#settings-file 12 | var opts = process.argv.slice(2) 13 | if (opts.indexOf('--config') === -1) { 14 | opts = opts.concat(['--config', 'apps/test/e2e/nightwatch.conf.js']) 15 | } 16 | if (opts.indexOf('--env') === -1) { 17 | opts = opts.concat(['--env', 'chrome']) 18 | } 19 | 20 | var spawn = require('cross-spawn') 21 | var runner = spawn('./node_modules/.bin/nightwatch', opts, { stdio: 'inherit' }) 22 | 23 | runner.on('exit', function (code) { 24 | server.close() 25 | process.exit(code) 26 | }) 27 | 28 | runner.on('error', function (err) { 29 | server.close() 30 | throw err 31 | }) 32 | -------------------------------------------------------------------------------- /apps/vue/test/e2e/specs/test.js: -------------------------------------------------------------------------------- 1 | // For authoring Nightwatch tests, see 2 | // http://nightwatchjs.org/guide#usage 3 | 4 | module.exports = { 5 | 'default e2e tests': function (browser) { 6 | // automatically uses dev Server port from /config.index.js 7 | // default: http://localhost:8080 8 | // see nightwatch.conf.js 9 | const devServer = browser.globals.devServerURL 10 | 11 | browser 12 | .url(devServer) 13 | .waitForElementVisible('#apps', 5000) 14 | .assert.elementPresent('.hello') 15 | .assert.containsText('h1', 'Welcome to Your Vue.js App') 16 | .assert.elementCount('img', 1) 17 | .end() 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /apps/vue/test/unit/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "mocha": true 4 | }, 5 | "globals": { 6 | "expect": true, 7 | "sinon": true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /apps/vue/test/unit/coverage/lcov-report/prettify.css: -------------------------------------------------------------------------------- 1 | .pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} 2 | -------------------------------------------------------------------------------- /apps/vue/test/unit/coverage/lcov-report/sort-arrow-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/apps/vue/test/unit/coverage/lcov-report/sort-arrow-sprite.png -------------------------------------------------------------------------------- /apps/vue/test/unit/coverage/lcov.info: -------------------------------------------------------------------------------- 1 | TN: 2 | SF:/Users/yhtml5/projects/github/YHTML5-Seed/app/src/components/Hello.vue 3 | FN:8,data 4 | FNF:1 5 | FNH:1 6 | FNDA:1,data 7 | DA:0,1 8 | DA:27,1 9 | LF:2 10 | LH:2 11 | BRF:0 12 | BRH:0 13 | end_of_record 14 | TN: 15 | SF:/Users/yhtml5/projects/github/YHTML5-Seed/app/src/App.vue 16 | FN:11,_interopRequireDefault 17 | FNF:1 18 | FNH:1 19 | FNDA:1,_interopRequireDefault 20 | DA:0,1 21 | DA:28,1 22 | LF:2 23 | LH:2 24 | BRDA:11,1,0,0 25 | BRDA:11,1,1,1 26 | BRDA:11,2,0,1 27 | BRDA:11,2,1,1 28 | BRF:4 29 | BRH:4 30 | end_of_record 31 | TN: 32 | SF:/Users/yhtml5/projects/github/YHTML5-Seed/app/src/router/router.js 33 | FN:15,_interopRequireDefault 34 | FNF:1 35 | FNH:1 36 | FNDA:2,_interopRequireDefault 37 | DA:0,2 38 | DA:1,1 39 | DA:2,1 40 | DA:5,1 41 | DA:8,1 42 | DA:11,1 43 | DA:14,1 44 | DA:17,1 45 | DA:20,1 46 | DA:23,1 47 | DA:31,1 48 | DA:34,1 49 | DA:35,1 50 | DA:36,1 51 | LF:14 52 | LH:14 53 | BRDA:15,1,0,0 54 | BRDA:15,1,1,2 55 | BRDA:15,2,0,2 56 | BRDA:15,2,1,2 57 | BRF:4 58 | BRH:4 59 | end_of_record 60 | -------------------------------------------------------------------------------- /apps/vue/test/unit/index.js: -------------------------------------------------------------------------------- 1 | // Polyfill fn.bind() for PhantomJS 2 | /* eslint-disable no-extend-native */ 3 | Function.prototype.bind = require('function-bind') 4 | 5 | // require all test files (files that ends with .spec.js) 6 | const testsContext = require.context('./specs', true, /\.spec$/) 7 | testsContext.keys().forEach(testsContext) 8 | 9 | // require all src files except main.js for coverage. 10 | // you can also change this to match only the subset of files that 11 | // you want coverage for. 12 | const srcContext = require.context('../../src', true, /^\.\/(?!main(\.js)?$)/) 13 | srcContext.keys().forEach(srcContext) 14 | -------------------------------------------------------------------------------- /apps/vue/test/unit/specs/Hello.spec.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Hello from 'src/components/Hello' 3 | 4 | describe('Hello.vue', () => { 5 | it('should render correct contents', () => { 6 | const vm = new Vue({ 7 | el: document.createElement('div'), 8 | render: (h) => h(Hello) 9 | }) 10 | expect(vm.$el.querySelector('.hello h1').textContent) 11 | .to.equal('Welcome to Your Vue.js App') 12 | }) 13 | }) 14 | -------------------------------------------------------------------------------- /desigin/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/desigin/favicon.ico -------------------------------------------------------------------------------- /desigin/yh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/desigin/yh.png -------------------------------------------------------------------------------- /desigin/yhtml5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/desigin/yhtml5.png -------------------------------------------------------------------------------- /exmaple/.yhtml5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/exmaple/.yhtml5 -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "yhtml5-seed", 3 | "version": "1.1.4", 4 | "author": "yhtml5 <1417376255@qq.com>", 5 | "description": "The web's scaffolding tool for modern webapps", 6 | "main": "app/index.js", 7 | "license": "MIT", 8 | "repository": "git@github.com:yhtml5/YHTML5-Seed.git", 9 | "keywords": [ 10 | "component", 11 | "framework", 12 | "frontend", 13 | "mobile", 14 | "react", 15 | "redux", 16 | "scaffold", 17 | "vue", 18 | "web", 19 | "webpack", 20 | "weui" 21 | ], 22 | "peerDependencies": {}, 23 | "dependencies": { 24 | "antd-mobile": "^1.6.0", 25 | "lodash": "^4.17.4", 26 | "moment": "^2.17.1" 27 | }, 28 | "devDependencies": { 29 | }, 30 | "engines": { 31 | "node": ">= 6.0.0", 32 | "npm": ">= 3.0.0" 33 | }, 34 | "scripts": { 35 | "git": "clear && git status && git add -A && git commit -m", 36 | "postgit": "git pull && git push && git push origin dev:master", 37 | "update": "rimraf site && cd site/static && mkdir vendors && cp CNAME site/" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /problems.md: -------------------------------------------------------------------------------- 1 | # Problems 2 | 3 | ### Production 4 | - [x] 服务管理表格,新增子服务,页面交互? 5 | - [x] 字段描述不清晰,demo:产品文档中字段为交易编号,接口返回没有这个字段,希望给个备注 6 | 7 | ### Ant design components 8 | - [ ] How to use breadcrumb with router 9 | - [ ] Menu only double click that can render active style 10 | - [ ] How to send and receive data and correctly render in the component 11 | - [ ] How to use DataPicker and moment.js 12 | 13 | ### Technology stack 14 | - [ ] How to learn react technology stack step by step 15 | - [ ] How to use qs send parameter and request data 16 | - [x] What's form data,request payload,query string parameters in HTTP [blog] 17 | * step1: HTTP params `query string parameters` 18 | * step2: parsed `data:{"bill_id":1002}` 19 | * step3: source `data=%7B%22bill_id%22%3A1002%7D` 20 | * step4: code `stringify({data: JSON.stringify({bill_id: payload.currentItem.number}),token: 111111})` 21 | - [ ] Send data twice when use reqwest 22 | - [ ] How to exchange format between url params, json string and json data 23 | - [ ] How to solve cross-domain problems 24 | * set cross-allow in the server 25 | * jsonp, how to use jsonp 26 | - [ ] The basis for handling the data flow is object manipulation 27 | * Number,String,Date,Array,Boolean,Math,RegExp 28 | * String, object, array, url parameter conversion between each other 29 | - [ ] 优化搜索时间判断 30 | 31 | ### New ideas 32 | - [ ] Create a Mortgage Calculator component 33 | - [ ] Change left nav width and hide text when screen width small then 960px 34 | 35 | ### Incomplete module 36 | - [ ] 导出报表 Payment.Search 37 | - [ ] 服务管理: 新增服务、新增子服务、编辑服务; ManageService 38 | - [ ] 上传模块 39 | - [ ] login system 40 | 41 | ### bugs 42 | - [ ] report export handle error result 43 | - [ ] 每次重新打开浏览器 44 | - [ ] style-loader, post-loader, 不要内嵌css 45 | 46 | 47 | 48 | [blog]:http://www.cnblogs.com/hsp-blog/p/5919877.html 49 | -------------------------------------------------------------------------------- /server/package.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yhtml5/yhtml5-seed/0dfb24d0a322ecdc6ee4d3f68d63b950269a453a/server/package.json --------------------------------------------------------------------------------