From 01448b7113dda20983d927a64e0459d2b02ea906 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A6=86=E9=92=B1=E8=90=BD=E5=B0=BD=E6=A7=BF=E8=8A=B1?= =?UTF-8?q?=E7=A8=80?= <2675540038@qq.com> Date: Fri, 9 May 2025 17:07:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=A4=9A=E4=B8=AA?= =?UTF-8?q?=E9=9D=99=E6=80=81=E5=9B=BE=E7=89=87=E8=B5=84=E6=BA=90=E5=8F=8A?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增了多个静态图片资源文件,包括01.png、02.png等,并添加了相关的配置文件和组件,如vue.config.js、package.json等。同时引入了Tuniao UI库,并配置了相关的依赖和设置,以支持项目的开发和构建。 --- .gitignore | 23 + App.vue | 168 + index.html | 21 + libs/components/demo-title.vue | 94 + libs/components/dynamic-demo-template.vue | 689 ++++ libs/components/multiple-options-demo.vue | 147 + libs/components/nav-index-button.vue | 169 + libs/mixin/dynamic_demo_mixin.js | 52 + libs/mixin/template_page_mixin.js | 60 + main.js | 30 + manifest.json | 97 + package.json | 5 + pages.json | 258 ++ pages/index/directory.vue | 469 +++ pages/index/home.vue | 730 ++++ pages/index/index.vue | 270 ++ pages/index/pizz.vue | 211 ++ pages/index/pizz_info.vue | 377 ++ pages/index/search.vue | 355 ++ pages/index/service.vue | 228 ++ pages/index/tissue.vue | 118 + pages/index/user.vue | 504 +++ pages/index/web.vue | 27 + pages/packageA/info/discovery.vue | 240 ++ pages/packageA/info/policy.vue | 86 + pages/packageA/info/policy_info.vue | 91 + pages/packageA/info/policy_list.vue | 90 + pages/packageA/user/apply_in.vue | 798 +++++ pages/packageA/user/events_my.vue | 104 + pages/packageA/user/my_apply.vue | 108 + pages/packageA/user/my_card.vue | 589 ++++ pages/packageA/user/my_card_holder.vue | 98 + pages/packageA/user/my_desc.vue | 82 + pages/packageA/user/my_edit.vue | 674 ++++ pages/packageA/user/my_idea.vue | 163 + pages/packageA/user/my_invite.vue | 227 ++ pages/packageA/user/my_msg.vue | 359 ++ pages/packageA/user/my_sign.vue | 134 + pages/packageA/user/my_vip.vue | 220 ++ pages/packageA/user/my_vip_clerk.vue | 268 ++ pages/packageA/user/my_vip_info.vue | 127 + pages/packageA/user/my_vip_off.vue | 168 + pages/packageA/user/user_activity.vue | 511 +++ pages/packageA/user/user_auditing.vue | 258 ++ pages/packageA/user/user_auditing_info.vue | 330 ++ pages/packageB/ask/add.vue | 68 + pages/packageB/ask/index.vue | 105 + pages/packageB/ask/info.vue | 90 + pages/packageB/ask/user_list.vue | 85 + pages/packageB/event/event_info.vue | 617 ++++ pages/packageB/news/new_info.vue | 127 + pages/packageB/news/notice_info.vue | 116 + static/01.png | Bin 0 -> 1072 bytes static/01_1.png | Bin 0 -> 1036 bytes static/02.png | Bin 0 -> 1584 bytes static/02_2.png | Bin 0 -> 1466 bytes static/03.png | Bin 0 -> 2330 bytes static/03_3.png | Bin 0 -> 2202 bytes static/04.png | Bin 0 -> 1639 bytes static/04_4.png | Bin 0 -> 1537 bytes static/ask_dai.png | Bin 0 -> 4549 bytes static/ask_no.png | Bin 0 -> 3955 bytes static/ask_ok.png | Bin 0 -> 4548 bytes static/b1.png | Bin 0 -> 1739 bytes static/book.png | Bin 0 -> 727 bytes static/c1.png | Bin 0 -> 523 bytes static/c1455.png | Bin 0 -> 547 bytes static/c2.png | Bin 0 -> 630 bytes static/c3.png | Bin 0 -> 1974 bytes static/css/components/demo_page_common.scss | 193 ++ static/css/my.scss | 241 ++ static/css/templatePage/custom_nav_bar.scss | 38 + static/da.png | Bin 0 -> 1070 bytes static/def.png | Bin 0 -> 6816 bytes static/h1.png | Bin 0 -> 2308 bytes static/h2.png | Bin 0 -> 2700 bytes static/h3.png | Bin 0 -> 2280 bytes static/h4.png | Bin 0 -> 4000 bytes static/h_back.png | Bin 0 -> 1952 bytes static/hqzc.png | Bin 0 -> 1413 bytes static/ico1.png | Bin 0 -> 2447 bytes static/ico10.png | Bin 0 -> 3009 bytes static/ico11.png | Bin 0 -> 3538 bytes static/ico12.png | Bin 0 -> 2526 bytes static/ico13.png | Bin 0 -> 2200 bytes static/ico16.png | Bin 0 -> 8334 bytes static/ico2.png | Bin 0 -> 2839 bytes static/ico3.png | Bin 0 -> 3061 bytes static/ico4.png | Bin 0 -> 2331 bytes static/ico5.png | Bin 0 -> 2810 bytes static/ico6.png | Bin 0 -> 2188 bytes static/ico8.png | Bin 0 -> 2629 bytes static/ico9.png | Bin 0 -> 2346 bytes static/icon100.png | Bin 0 -> 1408 bytes static/icon13.png | Bin 0 -> 1000 bytes static/icon14.png | Bin 0 -> 607 bytes static/icon15.png | Bin 0 -> 1715 bytes static/jj.png | Bin 0 -> 7074 bytes static/notice_icon.png | Bin 0 -> 3695 bytes static/pic.png | Bin 0 -> 1133 bytes static/right.png | Bin 0 -> 872 bytes static/sh.png | Bin 0 -> 6742 bytes static/t1.png | Bin 0 -> 2416 bytes static/t2.png | Bin 0 -> 2075 bytes static/tg.png | Bin 0 -> 6863 bytes static/tiwen.png | Bin 0 -> 6572 bytes static/vip.png | Bin 0 -> 1176 bytes static/w_back.png | Bin 0 -> 1815 bytes static/wen.png | Bin 0 -> 694 bytes store/$tn.mixin.js | 28 + store/index.js | 83 + template.h5.html | 30 + tuniao-ui/README.md | 4 + .../tn-action-sheet/tn-action-sheet.vue | 206 ++ .../tn-avatar-group/tn-avatar-group.vue | 95 + tuniao-ui/components/tn-avatar/tn-avatar.vue | 298 ++ tuniao-ui/components/tn-badge/tn-badge.vue | 173 + tuniao-ui/components/tn-button/tn-button.vue | 348 ++ .../components/tn-calendar/tn-calendar.vue | 707 ++++ .../tn-car-keyboard/tn-car-keyboard.vue | 320 ++ .../tn-cascade-selection.vue | 654 ++++ .../tn-checkbox-group/tn-checkbox-group.vue | 134 + .../components/tn-checkbox/tn-checkbox.vue | 328 ++ .../tn-circle-progress/tn-circle-progress.vue | 223 ++ .../tn-collapse-item/tn-collapse-item.vue | 236 ++ .../components/tn-collapse/tn-collapse.vue | 98 + .../tn-color-icon/tn-color-icon.vue | 318 ++ .../tn-column-notice/tn-column-notice.vue | 241 ++ .../tn-count-down/tn-count-down.vue | 314 ++ .../tn-count-scroll/tn-count-scroll.vue | 171 + .../components/tn-count-to/tn-count-to.vue | 231 ++ tuniao-ui/components/tn-cropper/index.wxs | 332 ++ .../components/tn-cropper/tn-cropper.vue | 574 ++++ .../tn-custom-swiper-item/index.wxs | 288 ++ .../tn-custom-swiper-item.vue | 277 ++ .../tn-custom-swiper/tn-custom-swiper.vue | 535 +++ tuniao-ui/components/tn-drag/index.wxs | 265 ++ tuniao-ui/components/tn-drag/tn-drag.vue | 278 ++ tuniao-ui/components/tn-empty/tn-empty.vue | 190 + tuniao-ui/components/tn-fab/tn-fab.vue | 523 +++ .../components/tn-form-item/tn-form-item.vue | 457 +++ tuniao-ui/components/tn-form/tn-form.vue | 139 + .../components/tn-goods-nav/tn-goods-nav.vue | 382 ++ .../components/tn-grid-item/tn-grid-item.vue | 104 + tuniao-ui/components/tn-grid/tn-grid.vue | 111 + .../tn-image-upload-drag.vue | 996 ++++++ .../tn-image-upload/tn-image-upload.vue | 695 ++++ .../tn-index-anchor/tn-index-anchor.vue | 90 + .../tn-index-list/tn-index-list.vue | 361 ++ tuniao-ui/components/tn-input/tn-input.vue | 447 +++ .../components/tn-keyboard/tn-keyboard.vue | 220 ++ .../components/tn-landscape/tn-landscape.vue | 225 ++ .../components/tn-lazy-load/tn-lazy-load.vue | 254 ++ .../tn-line-progress/tn-line-progress.vue | 143 + .../components/tn-list-cell/tn-list-cell.vue | 209 ++ .../components/tn-list-view/tn-list-view.vue | 184 + .../components/tn-load-more/tn-load-more.vue | 188 + .../components/tn-loading/tn-loading.vue | 114 + tuniao-ui/components/tn-modal/tn-modal.vue | 246 ++ .../components/tn-nav-bar/tn-nav-bar.vue | 355 ++ .../tn-notice-bar/tn-notice-bar.vue | 171 + .../tn-number-box/tn-number-box.vue | 401 +++ .../tn-number-keyboard/tn-number-keyboard.vue | 182 + tuniao-ui/components/tn-picker/tn-picker.vue | 727 ++++ tuniao-ui/components/tn-popup/tn-popup.vue | 492 +++ .../tn-radio-group/tn-radio-group.vue | 124 + tuniao-ui/components/tn-radio/tn-radio.vue | 276 ++ tuniao-ui/components/tn-rate/tn-rate.vue | 325 ++ .../components/tn-read-more/tn-read-more.vue | 222 ++ .../tn-row-notice/tn-row-notice.vue | 301 ++ .../tn-scroll-list/tn-scroll-list.vue | 177 + .../tn-scroll-view/tn-scroll-view.vue | 401 +++ tuniao-ui/components/tn-select/tn-select.vue | 428 +++ .../tn-sign-board/tn-sign-board.vue | 690 ++++ .../components/tn-skeleton/tn-skeleton.vue | 254 ++ tuniao-ui/components/tn-slider/tn-slider.vue | 255 ++ .../components/tn-stack-swiper/index-h5.wxs | 657 ++++ .../components/tn-stack-swiper/index.wxs | 657 ++++ .../tn-stack-swiper/tn-stack-swiper.vue | 284 ++ tuniao-ui/components/tn-steps/tn-steps.vue | 346 ++ tuniao-ui/components/tn-sticky/tn-sticky.vue | 186 + .../tn-subsection/tn-subsection.vue | 414 +++ .../components/tn-swipe-action-item/index.wxs | 230 ++ .../tn-swipe-action-item.vue | 215 ++ .../tn-swipe-action/tn-swipe-action.vue | 61 + tuniao-ui/components/tn-swiper/tn-swiper.vue | 364 ++ tuniao-ui/components/tn-switch/tn-switch.vue | 241 ++ tuniao-ui/components/tn-tabbar/tn-tabbar.vue | 554 +++ tuniao-ui/components/tn-table/tn-table.vue | 100 + .../tn-tabs-swiper/tn-tabs-swiper.vue | 444 +++ tuniao-ui/components/tn-tabs/tn-tabs.vue | 348 ++ tuniao-ui/components/tn-tag/tn-tag.vue | 223 ++ tuniao-ui/components/tn-td/tn-td.vue | 307 ++ .../tn-time-line-item/tn-time-line-item.vue | 71 + .../tn-time-line-item.vue_bk | 71 + .../components/tn-time-line/tn-time-line.vue | 39 + .../tn-time-line/tn-time-line.vue_bk | 39 + tuniao-ui/components/tn-tips/tn-tips.vue | 240 ++ tuniao-ui/components/tn-toast/tn-toast.vue | 227 ++ tuniao-ui/components/tn-tr/tn-tr.vue | 210 ++ .../components/tn-tree-node/tn-tree-node.vue | 143 + .../components/tn-tree-view/tn-tree-view.vue | 50 + .../tn-verification-code-input.vue | 324 ++ .../tn-verification-code.vue | 149 + .../components/tn-waterfall/tn-waterfall.vue | 165 + tuniao-ui/iconfont.css | 3061 +++++++++++++++++ tuniao-ui/index.js | 73 + tuniao-ui/index.scss | 13 + tuniao-ui/libs/config/color.js | 15 + tuniao-ui/libs/config/zIndex.js | 17 + tuniao-ui/libs/css/color.scss | 563 +++ tuniao-ui/libs/css/main.scss | 730 ++++ tuniao-ui/libs/css/style.h5.scss | 35 + tuniao-ui/libs/css/style.mp.scss | 52 + tuniao-ui/libs/function/$parent.js | 18 + tuniao-ui/libs/function/applyEven.js | 28 + tuniao-ui/libs/function/array.js | 22 + tuniao-ui/libs/function/color.js | 270 ++ tuniao-ui/libs/function/deepClone.js | 29 + tuniao-ui/libs/function/message.js | 74 + tuniao-ui/libs/function/number.js | 128 + tuniao-ui/libs/function/string.js | 69 + tuniao-ui/libs/function/test.js | 232 ++ .../libs/function/updateCustomBarInfo.js | 44 + tuniao-ui/libs/function/uuid.js | 41 + tuniao-ui/libs/luch-request/adapters/index.js | 99 + .../luch-request/core/InterceptorManager.js | 51 + tuniao-ui/libs/luch-request/core/Request.js | 200 ++ .../libs/luch-request/core/buildFullPath.js | 20 + tuniao-ui/libs/luch-request/core/defaults.js | 30 + .../libs/luch-request/core/dispatchRequest.js | 6 + .../libs/luch-request/core/mergeConfig.js | 103 + tuniao-ui/libs/luch-request/core/settle.js | 16 + .../libs/luch-request/helpers/buildURL.js | 69 + .../libs/luch-request/helpers/combineURLs.js | 14 + .../luch-request/helpers/isAbsoluteURL.js | 14 + tuniao-ui/libs/luch-request/index.d.ts | 116 + tuniao-ui/libs/luch-request/index.js | 2 + tuniao-ui/libs/luch-request/utils.js | 135 + tuniao-ui/libs/luch-request/utils/clone.js | 264 ++ tuniao-ui/libs/mixin/components_color.js | 47 + tuniao-ui/libs/mixin/mixin.js | 68 + tuniao-ui/libs/mixin/mpShare.js | 30 + tuniao-ui/libs/mixin/touch.js | 61 + tuniao-ui/libs/utils/area.js | 1 + tuniao-ui/libs/utils/async-validator.js | 1356 ++++++++ tuniao-ui/libs/utils/calendar.js | 546 +++ tuniao-ui/libs/utils/city.js | 1 + tuniao-ui/libs/utils/emitter.js | 55 + tuniao-ui/libs/utils/province.js | 1 + tuniao-ui/theme.scss | 183 + uni.promisify.adaptor.js | 10 + uni.scss | 11 + uni_modules/cc-noticeBar/changelog.md | 8 + .../components/cc-noticeBar/cc-noticeBar.vue | 94 + .../components/cc-noticeBar/notice_icon.png | Bin 0 -> 1527 bytes uni_modules/cc-noticeBar/package.json | 86 + uni_modules/cc-noticeBar/readme.md | 145 + .../jp-verification-literalness/changelog.md | 4 + .../jp-verification-literalness.vue | 170 + .../jp-verification-literalness/package.json | 85 + .../pages/index/index.vue | 38 + .../jp-verification-literalness/readme.md | 79 + uni_modules/lime-clipper/changelog.md | 56 + .../components/l-clipper/index.scss | 184 + .../components/l-clipper/l-clipper.vue | 840 +++++ .../components/l-clipper/utils.js | 248 ++ .../components/lime-clipper/lime-clipper.vue | 21 + uni_modules/lime-clipper/package.json | 76 + uni_modules/lime-clipper/readme.md | 239 ++ uni_modules/lime-clipper/static/photo.svg | 19 + uni_modules/lime-clipper/static/rotate.svg | 15 + uni_modules/lime-painter/changelog.md | 225 ++ .../components/common/relation.js | 150 + .../l-painter-image/l-painter-image.vue | 28 + .../l-painter-qrcode/l-painter-qrcode.vue | 27 + .../l-painter-text/l-painter-text.vue | 33 + .../l-painter-view/l-painter-view.vue | 34 + .../components/l-painter/l-painter.vue | 461 +++ .../lime-painter/components/l-painter/nvue.js | 214 ++ .../components/l-painter/painter.js | 1 + .../components/l-painter/props.js | 56 + .../components/l-painter/single.js | 1 + .../components/l-painter/utils.js | 368 ++ .../components/lime-painter/lime-painter.vue | 235 ++ .../lime-painter/hybrid/html/index.html | 119 + .../lime-painter/hybrid/html/painter.js | 1 + .../hybrid/html/uni.webview.1.5.3.js | 1 + uni_modules/lime-painter/package.json | 93 + uni_modules/lime-painter/parser.js | 388 +++ uni_modules/lime-painter/readme.md | 961 ++++++ uni_modules/sp-editor/changelog.md | 109 + .../components/sp-editor/color-picker.vue | 825 +++++ .../components/sp-editor/link-edit.vue | 152 + .../components/sp-editor/sp-editor.vue | 518 +++ uni_modules/sp-editor/icons/editor-icon.css | 238 ++ uni_modules/sp-editor/icons/iconfont.ttf | Bin 0 -> 11188 bytes uni_modules/sp-editor/package.json | 83 + uni_modules/sp-editor/readme.md | 11 + .../sp-editor/static/image-resize.min.js | 1 + uni_modules/sp-editor/static/quill.min.js | 8 + uni_modules/sp-editor/utils/index.js | 68 + util/api.js | 88 + util/jwexin.js | 60 + util/request.js | 68 + util/requestManager.js | 66 + util/utils.js | 136 + util/wx-sdk.js | 93 + vue.config.js | 1 + 309 files changed, 57065 insertions(+) create mode 100644 .gitignore create mode 100644 App.vue create mode 100644 index.html create mode 100644 libs/components/demo-title.vue create mode 100644 libs/components/dynamic-demo-template.vue create mode 100644 libs/components/multiple-options-demo.vue create mode 100644 libs/components/nav-index-button.vue create mode 100644 libs/mixin/dynamic_demo_mixin.js create mode 100644 libs/mixin/template_page_mixin.js create mode 100644 main.js create mode 100644 manifest.json create mode 100644 package.json create mode 100644 pages.json create mode 100644 pages/index/directory.vue create mode 100644 pages/index/home.vue create mode 100644 pages/index/index.vue create mode 100644 pages/index/pizz.vue create mode 100644 pages/index/pizz_info.vue create mode 100644 pages/index/search.vue create mode 100644 pages/index/service.vue create mode 100644 pages/index/tissue.vue create mode 100644 pages/index/user.vue create mode 100644 pages/index/web.vue create mode 100644 pages/packageA/info/discovery.vue create mode 100644 pages/packageA/info/policy.vue create mode 100644 pages/packageA/info/policy_info.vue create mode 100644 pages/packageA/info/policy_list.vue create mode 100644 pages/packageA/user/apply_in.vue create mode 100644 pages/packageA/user/events_my.vue create mode 100644 pages/packageA/user/my_apply.vue create mode 100644 pages/packageA/user/my_card.vue create mode 100644 pages/packageA/user/my_card_holder.vue create mode 100644 pages/packageA/user/my_desc.vue create mode 100644 pages/packageA/user/my_edit.vue create mode 100644 pages/packageA/user/my_idea.vue create mode 100644 pages/packageA/user/my_invite.vue create mode 100644 pages/packageA/user/my_msg.vue create mode 100644 pages/packageA/user/my_sign.vue create mode 100644 pages/packageA/user/my_vip.vue create mode 100644 pages/packageA/user/my_vip_clerk.vue create mode 100644 pages/packageA/user/my_vip_info.vue create mode 100644 pages/packageA/user/my_vip_off.vue create mode 100644 pages/packageA/user/user_activity.vue create mode 100644 pages/packageA/user/user_auditing.vue create mode 100644 pages/packageA/user/user_auditing_info.vue create mode 100644 pages/packageB/ask/add.vue create mode 100644 pages/packageB/ask/index.vue create mode 100644 pages/packageB/ask/info.vue create mode 100644 pages/packageB/ask/user_list.vue create mode 100644 pages/packageB/event/event_info.vue create mode 100644 pages/packageB/news/new_info.vue create mode 100644 pages/packageB/news/notice_info.vue create mode 100644 static/01.png create mode 100644 static/01_1.png create mode 100644 static/02.png create mode 100644 static/02_2.png create mode 100644 static/03.png create mode 100644 static/03_3.png create mode 100644 static/04.png create mode 100644 static/04_4.png create mode 100644 static/ask_dai.png create mode 100644 static/ask_no.png create mode 100644 static/ask_ok.png create mode 100644 static/b1.png create mode 100644 static/book.png create mode 100644 static/c1.png create mode 100644 static/c1455.png create mode 100644 static/c2.png create mode 100644 static/c3.png create mode 100644 static/css/components/demo_page_common.scss create mode 100644 static/css/my.scss create mode 100644 static/css/templatePage/custom_nav_bar.scss create mode 100644 static/da.png create mode 100644 static/def.png create mode 100644 static/h1.png create mode 100644 static/h2.png create mode 100644 static/h3.png create mode 100644 static/h4.png create mode 100644 static/h_back.png create mode 100644 static/hqzc.png create mode 100644 static/ico1.png create mode 100644 static/ico10.png create mode 100644 static/ico11.png create mode 100644 static/ico12.png create mode 100644 static/ico13.png create mode 100644 static/ico16.png create mode 100644 static/ico2.png create mode 100644 static/ico3.png create mode 100644 static/ico4.png create mode 100644 static/ico5.png create mode 100644 static/ico6.png create mode 100644 static/ico8.png create mode 100644 static/ico9.png create mode 100644 static/icon100.png create mode 100644 static/icon13.png create mode 100644 static/icon14.png create mode 100644 static/icon15.png create mode 100644 static/jj.png create mode 100644 static/notice_icon.png create mode 100644 static/pic.png create mode 100644 static/right.png create mode 100644 static/sh.png create mode 100644 static/t1.png create mode 100644 static/t2.png create mode 100644 static/tg.png create mode 100644 static/tiwen.png create mode 100644 static/vip.png create mode 100644 static/w_back.png create mode 100644 static/wen.png create mode 100644 store/$tn.mixin.js create mode 100644 store/index.js create mode 100644 template.h5.html create mode 100644 tuniao-ui/README.md create mode 100644 tuniao-ui/components/tn-action-sheet/tn-action-sheet.vue create mode 100644 tuniao-ui/components/tn-avatar-group/tn-avatar-group.vue create mode 100644 tuniao-ui/components/tn-avatar/tn-avatar.vue create mode 100644 tuniao-ui/components/tn-badge/tn-badge.vue create mode 100644 tuniao-ui/components/tn-button/tn-button.vue create mode 100644 tuniao-ui/components/tn-calendar/tn-calendar.vue create mode 100644 tuniao-ui/components/tn-car-keyboard/tn-car-keyboard.vue create mode 100644 tuniao-ui/components/tn-cascade-selection/tn-cascade-selection.vue create mode 100644 tuniao-ui/components/tn-checkbox-group/tn-checkbox-group.vue create mode 100644 tuniao-ui/components/tn-checkbox/tn-checkbox.vue create mode 100644 tuniao-ui/components/tn-circle-progress/tn-circle-progress.vue create mode 100644 tuniao-ui/components/tn-collapse-item/tn-collapse-item.vue create mode 100644 tuniao-ui/components/tn-collapse/tn-collapse.vue create mode 100644 tuniao-ui/components/tn-color-icon/tn-color-icon.vue create mode 100644 tuniao-ui/components/tn-column-notice/tn-column-notice.vue create mode 100644 tuniao-ui/components/tn-count-down/tn-count-down.vue create mode 100644 tuniao-ui/components/tn-count-scroll/tn-count-scroll.vue create mode 100644 tuniao-ui/components/tn-count-to/tn-count-to.vue create mode 100644 tuniao-ui/components/tn-cropper/index.wxs create mode 100644 tuniao-ui/components/tn-cropper/tn-cropper.vue create mode 100644 tuniao-ui/components/tn-custom-swiper-item/index.wxs create mode 100644 tuniao-ui/components/tn-custom-swiper-item/tn-custom-swiper-item.vue create mode 100644 tuniao-ui/components/tn-custom-swiper/tn-custom-swiper.vue create mode 100644 tuniao-ui/components/tn-drag/index.wxs create mode 100644 tuniao-ui/components/tn-drag/tn-drag.vue create mode 100644 tuniao-ui/components/tn-empty/tn-empty.vue create mode 100644 tuniao-ui/components/tn-fab/tn-fab.vue create mode 100644 tuniao-ui/components/tn-form-item/tn-form-item.vue create mode 100644 tuniao-ui/components/tn-form/tn-form.vue create mode 100644 tuniao-ui/components/tn-goods-nav/tn-goods-nav.vue create mode 100644 tuniao-ui/components/tn-grid-item/tn-grid-item.vue create mode 100644 tuniao-ui/components/tn-grid/tn-grid.vue create mode 100644 tuniao-ui/components/tn-image-upload-drag/tn-image-upload-drag.vue create mode 100644 tuniao-ui/components/tn-image-upload/tn-image-upload.vue create mode 100644 tuniao-ui/components/tn-index-anchor/tn-index-anchor.vue create mode 100644 tuniao-ui/components/tn-index-list/tn-index-list.vue create mode 100644 tuniao-ui/components/tn-input/tn-input.vue create mode 100644 tuniao-ui/components/tn-keyboard/tn-keyboard.vue create mode 100644 tuniao-ui/components/tn-landscape/tn-landscape.vue create mode 100644 tuniao-ui/components/tn-lazy-load/tn-lazy-load.vue create mode 100644 tuniao-ui/components/tn-line-progress/tn-line-progress.vue create mode 100644 tuniao-ui/components/tn-list-cell/tn-list-cell.vue create mode 100644 tuniao-ui/components/tn-list-view/tn-list-view.vue create mode 100644 tuniao-ui/components/tn-load-more/tn-load-more.vue create mode 100644 tuniao-ui/components/tn-loading/tn-loading.vue create mode 100644 tuniao-ui/components/tn-modal/tn-modal.vue create mode 100644 tuniao-ui/components/tn-nav-bar/tn-nav-bar.vue create mode 100644 tuniao-ui/components/tn-notice-bar/tn-notice-bar.vue create mode 100644 tuniao-ui/components/tn-number-box/tn-number-box.vue create mode 100644 tuniao-ui/components/tn-number-keyboard/tn-number-keyboard.vue create mode 100644 tuniao-ui/components/tn-picker/tn-picker.vue create mode 100644 tuniao-ui/components/tn-popup/tn-popup.vue create mode 100644 tuniao-ui/components/tn-radio-group/tn-radio-group.vue create mode 100644 tuniao-ui/components/tn-radio/tn-radio.vue create mode 100644 tuniao-ui/components/tn-rate/tn-rate.vue create mode 100644 tuniao-ui/components/tn-read-more/tn-read-more.vue create mode 100644 tuniao-ui/components/tn-row-notice/tn-row-notice.vue create mode 100644 tuniao-ui/components/tn-scroll-list/tn-scroll-list.vue create mode 100644 tuniao-ui/components/tn-scroll-view/tn-scroll-view.vue create mode 100644 tuniao-ui/components/tn-select/tn-select.vue create mode 100644 tuniao-ui/components/tn-sign-board/tn-sign-board.vue create mode 100644 tuniao-ui/components/tn-skeleton/tn-skeleton.vue create mode 100644 tuniao-ui/components/tn-slider/tn-slider.vue create mode 100644 tuniao-ui/components/tn-stack-swiper/index-h5.wxs create mode 100644 tuniao-ui/components/tn-stack-swiper/index.wxs create mode 100644 tuniao-ui/components/tn-stack-swiper/tn-stack-swiper.vue create mode 100644 tuniao-ui/components/tn-steps/tn-steps.vue create mode 100644 tuniao-ui/components/tn-sticky/tn-sticky.vue create mode 100644 tuniao-ui/components/tn-subsection/tn-subsection.vue create mode 100644 tuniao-ui/components/tn-swipe-action-item/index.wxs create mode 100644 tuniao-ui/components/tn-swipe-action-item/tn-swipe-action-item.vue create mode 100644 tuniao-ui/components/tn-swipe-action/tn-swipe-action.vue create mode 100644 tuniao-ui/components/tn-swiper/tn-swiper.vue create mode 100644 tuniao-ui/components/tn-switch/tn-switch.vue create mode 100644 tuniao-ui/components/tn-tabbar/tn-tabbar.vue create mode 100644 tuniao-ui/components/tn-table/tn-table.vue create mode 100644 tuniao-ui/components/tn-tabs-swiper/tn-tabs-swiper.vue create mode 100644 tuniao-ui/components/tn-tabs/tn-tabs.vue create mode 100644 tuniao-ui/components/tn-tag/tn-tag.vue create mode 100644 tuniao-ui/components/tn-td/tn-td.vue create mode 100644 tuniao-ui/components/tn-time-line-item/tn-time-line-item.vue create mode 100644 tuniao-ui/components/tn-time-line-item/tn-time-line-item.vue_bk create mode 100644 tuniao-ui/components/tn-time-line/tn-time-line.vue create mode 100644 tuniao-ui/components/tn-time-line/tn-time-line.vue_bk create mode 100644 tuniao-ui/components/tn-tips/tn-tips.vue create mode 100644 tuniao-ui/components/tn-toast/tn-toast.vue create mode 100644 tuniao-ui/components/tn-tr/tn-tr.vue create mode 100644 tuniao-ui/components/tn-tree-node/tn-tree-node.vue create mode 100644 tuniao-ui/components/tn-tree-view/tn-tree-view.vue create mode 100644 tuniao-ui/components/tn-verification-code-input/tn-verification-code-input.vue create mode 100644 tuniao-ui/components/tn-verification-code/tn-verification-code.vue create mode 100644 tuniao-ui/components/tn-waterfall/tn-waterfall.vue create mode 100644 tuniao-ui/iconfont.css create mode 100644 tuniao-ui/index.js create mode 100644 tuniao-ui/index.scss create mode 100644 tuniao-ui/libs/config/color.js create mode 100644 tuniao-ui/libs/config/zIndex.js create mode 100644 tuniao-ui/libs/css/color.scss create mode 100644 tuniao-ui/libs/css/main.scss create mode 100644 tuniao-ui/libs/css/style.h5.scss create mode 100644 tuniao-ui/libs/css/style.mp.scss create mode 100644 tuniao-ui/libs/function/$parent.js create mode 100644 tuniao-ui/libs/function/applyEven.js create mode 100644 tuniao-ui/libs/function/array.js create mode 100644 tuniao-ui/libs/function/color.js create mode 100644 tuniao-ui/libs/function/deepClone.js create mode 100644 tuniao-ui/libs/function/message.js create mode 100644 tuniao-ui/libs/function/number.js create mode 100644 tuniao-ui/libs/function/string.js create mode 100644 tuniao-ui/libs/function/test.js create mode 100644 tuniao-ui/libs/function/updateCustomBarInfo.js create mode 100644 tuniao-ui/libs/function/uuid.js create mode 100644 tuniao-ui/libs/luch-request/adapters/index.js create mode 100644 tuniao-ui/libs/luch-request/core/InterceptorManager.js create mode 100644 tuniao-ui/libs/luch-request/core/Request.js create mode 100644 tuniao-ui/libs/luch-request/core/buildFullPath.js create mode 100644 tuniao-ui/libs/luch-request/core/defaults.js create mode 100644 tuniao-ui/libs/luch-request/core/dispatchRequest.js create mode 100644 tuniao-ui/libs/luch-request/core/mergeConfig.js create mode 100644 tuniao-ui/libs/luch-request/core/settle.js create mode 100644 tuniao-ui/libs/luch-request/helpers/buildURL.js create mode 100644 tuniao-ui/libs/luch-request/helpers/combineURLs.js create mode 100644 tuniao-ui/libs/luch-request/helpers/isAbsoluteURL.js create mode 100644 tuniao-ui/libs/luch-request/index.d.ts create mode 100644 tuniao-ui/libs/luch-request/index.js create mode 100644 tuniao-ui/libs/luch-request/utils.js create mode 100644 tuniao-ui/libs/luch-request/utils/clone.js create mode 100644 tuniao-ui/libs/mixin/components_color.js create mode 100644 tuniao-ui/libs/mixin/mixin.js create mode 100644 tuniao-ui/libs/mixin/mpShare.js create mode 100644 tuniao-ui/libs/mixin/touch.js create mode 100644 tuniao-ui/libs/utils/area.js create mode 100644 tuniao-ui/libs/utils/async-validator.js create mode 100644 tuniao-ui/libs/utils/calendar.js create mode 100644 tuniao-ui/libs/utils/city.js create mode 100644 tuniao-ui/libs/utils/emitter.js create mode 100644 tuniao-ui/libs/utils/province.js create mode 100644 tuniao-ui/theme.scss create mode 100644 uni.promisify.adaptor.js create mode 100644 uni.scss create mode 100644 uni_modules/cc-noticeBar/changelog.md create mode 100644 uni_modules/cc-noticeBar/components/cc-noticeBar/cc-noticeBar.vue create mode 100644 uni_modules/cc-noticeBar/components/cc-noticeBar/notice_icon.png create mode 100644 uni_modules/cc-noticeBar/package.json create mode 100644 uni_modules/cc-noticeBar/readme.md create mode 100644 uni_modules/jp-verification-literalness/changelog.md create mode 100644 uni_modules/jp-verification-literalness/components/jp-verification-literalness/jp-verification-literalness.vue create mode 100644 uni_modules/jp-verification-literalness/package.json create mode 100644 uni_modules/jp-verification-literalness/pages/index/index.vue create mode 100644 uni_modules/jp-verification-literalness/readme.md create mode 100644 uni_modules/lime-clipper/changelog.md create mode 100644 uni_modules/lime-clipper/components/l-clipper/index.scss create mode 100644 uni_modules/lime-clipper/components/l-clipper/l-clipper.vue create mode 100644 uni_modules/lime-clipper/components/l-clipper/utils.js create mode 100644 uni_modules/lime-clipper/components/lime-clipper/lime-clipper.vue create mode 100644 uni_modules/lime-clipper/package.json create mode 100644 uni_modules/lime-clipper/readme.md create mode 100644 uni_modules/lime-clipper/static/photo.svg create mode 100644 uni_modules/lime-clipper/static/rotate.svg create mode 100644 uni_modules/lime-painter/changelog.md create mode 100644 uni_modules/lime-painter/components/common/relation.js create mode 100644 uni_modules/lime-painter/components/l-painter-image/l-painter-image.vue create mode 100644 uni_modules/lime-painter/components/l-painter-qrcode/l-painter-qrcode.vue create mode 100644 uni_modules/lime-painter/components/l-painter-text/l-painter-text.vue create mode 100644 uni_modules/lime-painter/components/l-painter-view/l-painter-view.vue create mode 100644 uni_modules/lime-painter/components/l-painter/l-painter.vue create mode 100644 uni_modules/lime-painter/components/l-painter/nvue.js create mode 100644 uni_modules/lime-painter/components/l-painter/painter.js create mode 100644 uni_modules/lime-painter/components/l-painter/props.js create mode 100644 uni_modules/lime-painter/components/l-painter/single.js create mode 100644 uni_modules/lime-painter/components/l-painter/utils.js create mode 100644 uni_modules/lime-painter/components/lime-painter/lime-painter.vue create mode 100644 uni_modules/lime-painter/hybrid/html/index.html create mode 100644 uni_modules/lime-painter/hybrid/html/painter.js create mode 100644 uni_modules/lime-painter/hybrid/html/uni.webview.1.5.3.js create mode 100644 uni_modules/lime-painter/package.json create mode 100644 uni_modules/lime-painter/parser.js create mode 100644 uni_modules/lime-painter/readme.md create mode 100644 uni_modules/sp-editor/changelog.md create mode 100644 uni_modules/sp-editor/components/sp-editor/color-picker.vue create mode 100644 uni_modules/sp-editor/components/sp-editor/link-edit.vue create mode 100644 uni_modules/sp-editor/components/sp-editor/sp-editor.vue create mode 100644 uni_modules/sp-editor/icons/editor-icon.css create mode 100644 uni_modules/sp-editor/icons/iconfont.ttf create mode 100644 uni_modules/sp-editor/package.json create mode 100644 uni_modules/sp-editor/readme.md create mode 100644 uni_modules/sp-editor/static/image-resize.min.js create mode 100644 uni_modules/sp-editor/static/quill.min.js create mode 100644 uni_modules/sp-editor/utils/index.js create mode 100644 util/api.js create mode 100644 util/jwexin.js create mode 100644 util/request.js create mode 100644 util/requestManager.js create mode 100644 util/utils.js create mode 100644 util/wx-sdk.js create mode 100644 vue.config.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..184d193 --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +.DS_Store +node_modules/ +unpackage/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* +**/*.log +.eslintignore +tests/**/coverage/ +tests/e2e/reports +selenium-debug.log + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.local + +package-lock.json +yarn.lock diff --git a/App.vue b/App.vue new file mode 100644 index 0000000..56062f3 --- /dev/null +++ b/App.vue @@ -0,0 +1,168 @@ + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..dbde560 --- /dev/null +++ b/index.html @@ -0,0 +1,21 @@ + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/libs/components/demo-title.vue b/libs/components/demo-title.vue new file mode 100644 index 0000000..1386ff8 --- /dev/null +++ b/libs/components/demo-title.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/libs/components/dynamic-demo-template.vue b/libs/components/dynamic-demo-template.vue new file mode 100644 index 0000000..525e316 --- /dev/null +++ b/libs/components/dynamic-demo-template.vue @@ -0,0 +1,689 @@ + + + + + diff --git a/libs/components/multiple-options-demo.vue b/libs/components/multiple-options-demo.vue new file mode 100644 index 0000000..f3644b6 --- /dev/null +++ b/libs/components/multiple-options-demo.vue @@ -0,0 +1,147 @@ + + + + + diff --git a/libs/components/nav-index-button.vue b/libs/components/nav-index-button.vue new file mode 100644 index 0000000..d626df0 --- /dev/null +++ b/libs/components/nav-index-button.vue @@ -0,0 +1,169 @@ + + + + + diff --git a/libs/mixin/dynamic_demo_mixin.js b/libs/mixin/dynamic_demo_mixin.js new file mode 100644 index 0000000..66ff992 --- /dev/null +++ b/libs/mixin/dynamic_demo_mixin.js @@ -0,0 +1,52 @@ +/** + * 动态参数演示mixin + */ +module.exports = { + data() { + return { + // 效果显示框top的值 + contentContainerTop: '0px', + contentContainerIsTop: false, + + // 参数显示框top的值 + sectionContainerTop: '0px' + } + }, + onReady() { + this.updateSectionContainerTop() + }, + methods: { + // 处理演示效果框的位置 + async _handleContentConatinerPosition() { + // 获取效果演示框的节点信息 + const contentContainer = await this._tGetRect('#content_container') + // 获取参数框的节点信息 + this._tGetRect('#section_container').then((res) => { + // 判断参数框是否在移动,如果是则更新效果框的位置 + // 如果效果框的顶部已经触控到顶部导航栏就停止跟随 + if (res.top - contentContainer.bottom != 15) { + const newTop = res.top - (contentContainer.height + uni.upx2px(20)) + const minTop = this.vuex_custom_bar_height + 1 + if (newTop < minTop) { + this.contentContainerTop = minTop + 'px' + this.contentContainerIsTop = true + } else { + this.contentContainerTop = newTop + 'px' + this.contentContainerIsTop = false + } + } + }) + }, + // 更新状态切换栏位置信息 + updateSectionContainerTop() { + this._tGetRect('#content_container').then((res) => { + this.contentContainerTop = (this.vuex_custom_bar_height + 148) + 'px' + this.sectionContainerTop = (res.height + 20) + 'px' + }) + } + }, + // 监听页面滚动 + onPageScroll() { + this._handleContentConatinerPosition() + } +} diff --git a/libs/mixin/template_page_mixin.js b/libs/mixin/template_page_mixin.js new file mode 100644 index 0000000..2314549 --- /dev/null +++ b/libs/mixin/template_page_mixin.js @@ -0,0 +1,60 @@ +/** + * 演示页面mixin + */ +module.exports = { + data() { + return { + + } + }, + onLoad() { + // 更新顶部导航栏信息 + this.updateCustomBarInfo() + }, + methods: { + // 点击左上角返回按钮时触发事件 + goBack() { + // 通过判断当前页面的页面栈信息,是否有上一页进行返回,如果没有则跳转到首页 + const pages = getCurrentPages() + if (pages && pages.length > 0) { + const firstPage = pages[0] + if (pages.length == 1 && (!firstPage.route || firstPage.route != 'pages/index/index')) { + uni.reLaunch({ + url: '/pages/index/index' + }) + } else { + uni.navigateBack({ + delta: 1 + }) + } + } else { + uni.reLaunch({ + url: '/pages/index/index' + }) + } + }, + // 更新顶部导航栏信息 + async updateCustomBarInfo() { + // 获取vuex中的自定义顶栏的高度 + let customBarHeight = this.vuex_custom_bar_height + let statusBarHeight = this.vuex_status_bar_height + // 如果获取失败则重新获取 + if (!customBarHeight) { + try { + const navBarInfo = await this.$tn.updateCustomBar() + customBarHeight = navBarInfo.customBarHeight + statusBarHeight = navBarInfo.statusBarHeight + } catch(e) { + setTimeout(() => { + this.updateCustomBarInfo() + }, 10) + return + } + } + + // 更新vuex中的导航栏信息 + this.$tn.vuex('vuex_status_bar_height', statusBarHeight) + this.$tn.vuex('vuex_custom_bar_height', customBarHeight) + } + } +} \ No newline at end of file diff --git a/main.js b/main.js new file mode 100644 index 0000000..56802cb --- /dev/null +++ b/main.js @@ -0,0 +1,30 @@ +import App from './App' +import store from './store' + +import Vue from 'vue' +Vue.config.productionTip = false +App.mpType = 'app' + +// 引入全局TuniaoUI +import TuniaoUI from 'tuniao-ui' +Vue.use(TuniaoUI) + +// 引入TuniaoUI提供的vuex简写方法 +let vuexStore = require('@/store/$tn.mixin.js') +Vue.mixin(vuexStore) + +// 引入TuniaoUI对小程序分享的mixin封装 +let mpShare = require('tuniao-ui/libs/mixin/mpShare.js') +Vue.mixin(mpShare) + +import { + wxshare +} from "util/jwexin.js" +Vue.prototype.$wxshare = wxshare; + +const app = new Vue({ + store, + ...App +}) + +app.$mount() \ No newline at end of file diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..b3e514e --- /dev/null +++ b/manifest.json @@ -0,0 +1,97 @@ +{ + "name" : "智慧云商协", + "appid" : "__UNI__F702B81", + "description" : "", + "versionName" : "1.0.0", + "versionCode" : "100", + "transformPx" : false, + /* 5+App特有相关 */ + "app-plus" : { + "usingComponents" : true, + "nvueStyleCompiler" : "uni-app", + "compilerVersion" : 3, + "splashscreen" : { + "alwaysShowBeforeRender" : true, + "waiting" : true, + "autoclose" : true, + "delay" : 0 + }, + /* 模块配置 */ + "modules" : {}, + /* 应用发布信息 */ + "distribute" : { + /* android打包配置 */ + "android" : { + "permissions" : [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + /* ios打包配置 */ + "ios" : {}, + /* SDK配置 */ + "sdkConfigs" : { + "share" : {} + } + } + }, + /* 快应用特有相关 */ + "quickapp" : {}, + /* 小程序特有相关 */ + "mp-weixin" : { + "appid" : "wx51c40ff1c6337652", + "setting" : { + "urlCheck" : true, + "minified" : true, + "postcss" : true + }, + "usingComponents" : true + }, + "mp-alipay" : { + "usingComponents" : true + }, + "mp-baidu" : { + "usingComponents" : true + }, + "mp-toutiao" : { + "usingComponents" : true + }, + "uniStatistics" : { + "enable" : false + }, + "vueVersion" : "2", + "h5" : { + "router" : { + "base" : "" + }, + "template" : "", + "devServer" : { + "port" : 80, + "https" : false, + "disableHostCheck" : true, + "proxy" : { + "/api" : { + "target" : "http://192.168.3.130", //域名 + "changeOrigin" : true, + "secure" : false, + "pathRewrite" : { + "^/api" : "/api" + } + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..a690ac8 --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "jweixin-module": "^1.6.0" + } +} diff --git a/pages.json b/pages.json new file mode 100644 index 0000000..a79cecc --- /dev/null +++ b/pages.json @@ -0,0 +1,258 @@ +{ + "easycom": { + "^tn-(.*)": "@/tuniao-ui/components/tn-$1/tn-$1.vue" + }, + "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages + { + "path": "pages/index/index", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, + { + "path": "pages/index/home", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, + { + "path": "pages/index/service", + "style": { + "navigationBarTitleText": "智慧云商协", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/index/pizz", + "style": { + "navigationBarTitleText": "智慧云商协", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/index/pizz_info", + "style": { + "navigationBarTitleText": "智慧云商协", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/index/user", + "style": { + "navigationBarTitleText": "智慧云商协", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/index/directory", + "style": { + "navigationBarTitleText": "智慧云商协", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/index/web", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, + { + "path": "pages/index/search", + "style": { + "navigationBarTitleText": "智慧云商协" + } + } + ], + "subPackages": [{ + "root": "pages/packageA", + "pages": [{ + "path": "info/discovery", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, + { + "path": "info/policy", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, + { + "path": "info/policy_info", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, + { + "path": "info/policy_list", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, + { + "path": "user/apply_in", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, + { + "path": "user/events_my", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, + { + "path": "user/my_apply", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, + { + "path": "user/my_card", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, + { + "path": "user/my_card_holder", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, + { + "path": "user/my_desc", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, + { + "path": "user/my_edit", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, + { + "path": "user/my_idea", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, + { + "path": "user/my_invite", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, + { + "path": "user/my_msg", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, + { + "path": "user/my_sign", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, + { + "path": "user/user_activity", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, + { + "path": "user/user_auditing", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, + { + "path": "user/user_auditing_info", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, + { + "path": "user/my_vip", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, + { + "path": "user/my_vip_info", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, + { + "path": "user/my_vip_clerk", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, + { + "path": "user/my_vip_off", + "style": { + "navigationBarTitleText": "智慧云商协" + } + } + ] + }, { + "root": "pages/packageB", + "pages": [{ + "path": "event/event_info", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, { + "path": "news/new_info", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, + { + "path": "news/notice_info", + "style": { + "navigationBarTitleText": "智慧云商协" + } + }, + { + "path" : "ask/index", + "style" : + { + "navigationBarTitleText" : "智慧云商协" + } + }, + { + "path" : "ask/add", + "style" : + { + "navigationBarTitleText" : "智慧云商协" + } + }, + { + "path" : "ask/info", + "style" : + { + "navigationBarTitleText" : "智慧云商协" + } + }, + { + "path" : "ask/user_list", + "style" : + { + "navigationBarTitleText" : "智慧云商协" + } + } + ] + }], + "globalStyle": { + "navigationStyle": "custom", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "uni-app", + "navigationBarBackgroundColor": "#F8F8F8", + "backgroundColor": "#F8F8F8" + }, + "uniIdRouter": {} +} \ No newline at end of file diff --git a/pages/index/directory.vue b/pages/index/directory.vue new file mode 100644 index 0000000..a9f267d --- /dev/null +++ b/pages/index/directory.vue @@ -0,0 +1,469 @@ + + + + + + \ No newline at end of file diff --git a/pages/index/home.vue b/pages/index/home.vue new file mode 100644 index 0000000..ab63c5e --- /dev/null +++ b/pages/index/home.vue @@ -0,0 +1,730 @@ + + + + + + \ No newline at end of file diff --git a/pages/index/index.vue b/pages/index/index.vue new file mode 100644 index 0000000..645bbe9 --- /dev/null +++ b/pages/index/index.vue @@ -0,0 +1,270 @@ + + + + + \ No newline at end of file diff --git a/pages/index/pizz.vue b/pages/index/pizz.vue new file mode 100644 index 0000000..2f34a53 --- /dev/null +++ b/pages/index/pizz.vue @@ -0,0 +1,211 @@ + + + + + \ No newline at end of file diff --git a/pages/index/pizz_info.vue b/pages/index/pizz_info.vue new file mode 100644 index 0000000..5b61d6b --- /dev/null +++ b/pages/index/pizz_info.vue @@ -0,0 +1,377 @@ + + + + + diff --git a/pages/index/search.vue b/pages/index/search.vue new file mode 100644 index 0000000..5271c89 --- /dev/null +++ b/pages/index/search.vue @@ -0,0 +1,355 @@ + + + + + \ No newline at end of file diff --git a/pages/index/service.vue b/pages/index/service.vue new file mode 100644 index 0000000..d287cfa --- /dev/null +++ b/pages/index/service.vue @@ -0,0 +1,228 @@ + + + + + diff --git a/pages/index/tissue.vue b/pages/index/tissue.vue new file mode 100644 index 0000000..33eb2ed --- /dev/null +++ b/pages/index/tissue.vue @@ -0,0 +1,118 @@ + + + + + diff --git a/pages/index/user.vue b/pages/index/user.vue new file mode 100644 index 0000000..fc3abc7 --- /dev/null +++ b/pages/index/user.vue @@ -0,0 +1,504 @@ + + + + + \ No newline at end of file diff --git a/pages/index/web.vue b/pages/index/web.vue new file mode 100644 index 0000000..9321b74 --- /dev/null +++ b/pages/index/web.vue @@ -0,0 +1,27 @@ + + + + + \ No newline at end of file diff --git a/pages/packageA/info/discovery.vue b/pages/packageA/info/discovery.vue new file mode 100644 index 0000000..01586fb --- /dev/null +++ b/pages/packageA/info/discovery.vue @@ -0,0 +1,240 @@ + + + + + diff --git a/pages/packageA/info/policy.vue b/pages/packageA/info/policy.vue new file mode 100644 index 0000000..9cbfd52 --- /dev/null +++ b/pages/packageA/info/policy.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/pages/packageA/info/policy_info.vue b/pages/packageA/info/policy_info.vue new file mode 100644 index 0000000..3aca720 --- /dev/null +++ b/pages/packageA/info/policy_info.vue @@ -0,0 +1,91 @@ + + + + + \ No newline at end of file diff --git a/pages/packageA/info/policy_list.vue b/pages/packageA/info/policy_list.vue new file mode 100644 index 0000000..6e41ff5 --- /dev/null +++ b/pages/packageA/info/policy_list.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/pages/packageA/user/apply_in.vue b/pages/packageA/user/apply_in.vue new file mode 100644 index 0000000..bddde59 --- /dev/null +++ b/pages/packageA/user/apply_in.vue @@ -0,0 +1,798 @@ + + + + + \ No newline at end of file diff --git a/pages/packageA/user/events_my.vue b/pages/packageA/user/events_my.vue new file mode 100644 index 0000000..fb2f3d1 --- /dev/null +++ b/pages/packageA/user/events_my.vue @@ -0,0 +1,104 @@ + + + + + \ No newline at end of file diff --git a/pages/packageA/user/my_apply.vue b/pages/packageA/user/my_apply.vue new file mode 100644 index 0000000..f2cbc46 --- /dev/null +++ b/pages/packageA/user/my_apply.vue @@ -0,0 +1,108 @@ + + + + + diff --git a/pages/packageA/user/my_card.vue b/pages/packageA/user/my_card.vue new file mode 100644 index 0000000..602f01b --- /dev/null +++ b/pages/packageA/user/my_card.vue @@ -0,0 +1,589 @@ + + + + + \ No newline at end of file diff --git a/pages/packageA/user/my_card_holder.vue b/pages/packageA/user/my_card_holder.vue new file mode 100644 index 0000000..b801a98 --- /dev/null +++ b/pages/packageA/user/my_card_holder.vue @@ -0,0 +1,98 @@ + + + + + diff --git a/pages/packageA/user/my_desc.vue b/pages/packageA/user/my_desc.vue new file mode 100644 index 0000000..0d3e37a --- /dev/null +++ b/pages/packageA/user/my_desc.vue @@ -0,0 +1,82 @@ + + + + + \ No newline at end of file diff --git a/pages/packageA/user/my_edit.vue b/pages/packageA/user/my_edit.vue new file mode 100644 index 0000000..9a69edd --- /dev/null +++ b/pages/packageA/user/my_edit.vue @@ -0,0 +1,674 @@ + + + + + \ No newline at end of file diff --git a/pages/packageA/user/my_idea.vue b/pages/packageA/user/my_idea.vue new file mode 100644 index 0000000..1d5e251 --- /dev/null +++ b/pages/packageA/user/my_idea.vue @@ -0,0 +1,163 @@ + + + + + diff --git a/pages/packageA/user/my_invite.vue b/pages/packageA/user/my_invite.vue new file mode 100644 index 0000000..27298e5 --- /dev/null +++ b/pages/packageA/user/my_invite.vue @@ -0,0 +1,227 @@ + + + + + \ No newline at end of file diff --git a/pages/packageA/user/my_msg.vue b/pages/packageA/user/my_msg.vue new file mode 100644 index 0000000..74cc3a1 --- /dev/null +++ b/pages/packageA/user/my_msg.vue @@ -0,0 +1,359 @@ + + + + + \ No newline at end of file diff --git a/pages/packageA/user/my_sign.vue b/pages/packageA/user/my_sign.vue new file mode 100644 index 0000000..ddd7b60 --- /dev/null +++ b/pages/packageA/user/my_sign.vue @@ -0,0 +1,134 @@ + + + + + \ No newline at end of file diff --git a/pages/packageA/user/my_vip.vue b/pages/packageA/user/my_vip.vue new file mode 100644 index 0000000..e295eea --- /dev/null +++ b/pages/packageA/user/my_vip.vue @@ -0,0 +1,220 @@ + + + + + \ No newline at end of file diff --git a/pages/packageA/user/my_vip_clerk.vue b/pages/packageA/user/my_vip_clerk.vue new file mode 100644 index 0000000..d96ed60 --- /dev/null +++ b/pages/packageA/user/my_vip_clerk.vue @@ -0,0 +1,268 @@ + + + + + diff --git a/pages/packageA/user/my_vip_info.vue b/pages/packageA/user/my_vip_info.vue new file mode 100644 index 0000000..2e4dd0e --- /dev/null +++ b/pages/packageA/user/my_vip_info.vue @@ -0,0 +1,127 @@ + + + + + \ No newline at end of file diff --git a/pages/packageA/user/my_vip_off.vue b/pages/packageA/user/my_vip_off.vue new file mode 100644 index 0000000..56e239f --- /dev/null +++ b/pages/packageA/user/my_vip_off.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/pages/packageA/user/user_activity.vue b/pages/packageA/user/user_activity.vue new file mode 100644 index 0000000..a28b78d --- /dev/null +++ b/pages/packageA/user/user_activity.vue @@ -0,0 +1,511 @@ + + + + + diff --git a/pages/packageA/user/user_auditing.vue b/pages/packageA/user/user_auditing.vue new file mode 100644 index 0000000..0a40bfb --- /dev/null +++ b/pages/packageA/user/user_auditing.vue @@ -0,0 +1,258 @@ + + + + + diff --git a/pages/packageA/user/user_auditing_info.vue b/pages/packageA/user/user_auditing_info.vue new file mode 100644 index 0000000..5659243 --- /dev/null +++ b/pages/packageA/user/user_auditing_info.vue @@ -0,0 +1,330 @@ + + + + + \ No newline at end of file diff --git a/pages/packageB/ask/add.vue b/pages/packageB/ask/add.vue new file mode 100644 index 0000000..8824262 --- /dev/null +++ b/pages/packageB/ask/add.vue @@ -0,0 +1,68 @@ + + + + + \ No newline at end of file diff --git a/pages/packageB/ask/index.vue b/pages/packageB/ask/index.vue new file mode 100644 index 0000000..4501b5d --- /dev/null +++ b/pages/packageB/ask/index.vue @@ -0,0 +1,105 @@ + + + + + \ No newline at end of file diff --git a/pages/packageB/ask/info.vue b/pages/packageB/ask/info.vue new file mode 100644 index 0000000..9caa937 --- /dev/null +++ b/pages/packageB/ask/info.vue @@ -0,0 +1,90 @@ + + + + + \ No newline at end of file diff --git a/pages/packageB/ask/user_list.vue b/pages/packageB/ask/user_list.vue new file mode 100644 index 0000000..8171ef8 --- /dev/null +++ b/pages/packageB/ask/user_list.vue @@ -0,0 +1,85 @@ + + + + + \ No newline at end of file diff --git a/pages/packageB/event/event_info.vue b/pages/packageB/event/event_info.vue new file mode 100644 index 0000000..72a0418 --- /dev/null +++ b/pages/packageB/event/event_info.vue @@ -0,0 +1,617 @@ + + + + + \ No newline at end of file diff --git a/pages/packageB/news/new_info.vue b/pages/packageB/news/new_info.vue new file mode 100644 index 0000000..252a01a --- /dev/null +++ b/pages/packageB/news/new_info.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/pages/packageB/news/notice_info.vue b/pages/packageB/news/notice_info.vue new file mode 100644 index 0000000..c7b9307 --- /dev/null +++ b/pages/packageB/news/notice_info.vue @@ -0,0 +1,116 @@ + + + + + \ No newline at end of file diff --git a/static/01.png b/static/01.png new file mode 100644 index 0000000000000000000000000000000000000000..8cb8d1594a8369ce1abc3ad8573191968fff00f7 GIT binary patch literal 1072 zcmeAS@N?(olHy`uVBq!ia0vp^Q6S901|%(3I5Gh#&H|6fVg?2=RS;(M3{v?36l5$8 za(7}_cTVOdki(Mh=O zGCzy9>{DIBZ*07O<9t>Lzw7%~?A!BiZ%bGzH_H{4BvHqZ$NH>146X^06(7VOJZau7 z)Uc4lV21MlH^N>wWxD73TW@*L-Fc{2klSYvPXH)3K1qou00j)3m@_wSn&C5qivSLvu`*)y{~xcBSU zE50c`f{SebuW1#scMf#9?5UBk`HWiRstnUzdk?J6JGN~4G=*6ncQ&O=SBnb2?0r%| zaJ%`vwQ>xGOHB?t|Gyr@IY~5B(Pev&ny22c6ZZF+GP7suY-$pkb!C&Mcl-1C?^i8h zKc>K^xAy2;-||WhR%a!vysCn$T|q9)XPTFIis=EliY1HZZ((^BRFR{<#jRhRd$X#x z%!b3=`Nx;Hp8eF?c};TpN)4lJ;z3qjU6(^d1aEKc*0b>oUTC>3Ti91-`N|7s6Eg&3 zgXS!A^3FMbm&d#3a!5w!+np|}mxY(jS*Dbqb3VrEO!wuGl(d--%Tf9T7hHF*Ey` zp>g(?#hsT!&UCyj@3Q;y`?r71rW0NTnYQu!Z2$S{%C3sp@Z^leN7MPyDlV%9^|+LH z6E+FQMtt5gf9uIu&Wqc4t}^l&>~z>&lq}>qjW02uakBiLndU-^Se4j?Y(uK|?lb;1 zLE!A?O?FySv(vZaUio{mUsBAMrCY7ZRruhd&V-9D8#0t4OaygiaUcn=Xi!Y}vfr#x zprLF7m(!HGm)9jODx@yo_ir2Lte2I4XX!rL9qZld&5ouGhiRkZ=EJtaUFQ5$l?p z>791Z(tUMv^34v}glA10%o~*DxUd9inTGGGqD0T4g iFWUd-+@9@Gf0*-{+W&I=Fy{nja0X9TKbLh*2~7Y>;Ld6Q literal 0 HcmV?d00001 diff --git a/static/01_1.png b/static/01_1.png new file mode 100644 index 0000000000000000000000000000000000000000..b4ed032bec6b9d769b6d931384e6ee8b18020c22 GIT binary patch literal 1036 zcmeAS@N?(olHy`uVBq!ia0vp^Q6S901|%(3I5Gh#&H|6fVg?2=RS;(M3{v?36l5$8 za(7}_cTVOdki(Mh=;t|pR~F^p65X&0Q-&x?cvIYos#y`|KyUwj(oGf(M6@{@lL zxHVs02zgViadENA&v%Op^j%LkZ}5ElAY}h;v8QfFejUEqd+xgOCyw_n(kCbXni@CH zSL^5#3#;2UivBAmx}WGbw>IHC^l4IXR_sl=8fE_vX|DILC$nn@%yCJ7eLTc4u4CHU z+3V`G<4=mdESaRTJJjr?m+S0{Yvp1@va2dD`WDT|30K{{Nh){Nz1>wE6Xz^?{cpE| zN$mnAEkRxT)=TG7CeCJC+u5x(OC@GY&iz*{>Dik!eAsoRqZX(BUjOg0n(QZb*}LxZ zOYi=3?`!NZ^L<~t*V{{WVtK->CB+xZ3wNzk=Tb9+O51fZV&agS!>F^dt}1(d*j_*8P5x)TA$v?^EEN^TfD)1V#LaeKP-9=#pUSh z?m7fyc;)D;-ZI(y>aj^z(8j$5z26M{7Hf#yF7Ezj?YH>EeU;+QI>|yQ*L^qk74_C- zRO$SjSF^EJ^c1nsC5>Nq z-HVS=-OIVTIjT%LQ>O40diYeb*q)N^USv7p#-fG#;U>%dH-(v;KfR5k>DiZs;rsjR z&ThyM(2-*4W;?jZ5j&IR39r_*_`G8&^N;=6`cUhGXNkSl{TCBbpEUmS%5(}3F^sWt zz^;>gQOQM9KmUL5Ax&U0`}FQbm*=jNuvQWAmru*-ak_qFiu=X)H|HJ_bLDr}ugI_K z7g%KeyTozJPZ5#73d>lu`p#YZz1e-!^1hTShUV`LST7ttQn1Ii-XwTS{{5gvk&;Rwr`etp?JoiACtUa=G^S^A0i>vxQd!lcN%6B%~RV$Tkf93uv rI6u#R$#>UP9miJ5|Gl*%rtDe$v7KRmO0=p#`JTbk)z4*}Q$iB}KrPg5 literal 0 HcmV?d00001 diff --git a/static/02.png b/static/02.png new file mode 100644 index 0000000000000000000000000000000000000000..1726d78c687b240a90e8bf3c001e149dde636e8a GIT binary patch literal 1584 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 Ur2swA+5i9m07*qoM6N<$f=0Qe=Kufz literal 0 HcmV?d00001 diff --git a/static/03.png b/static/03.png new file mode 100644 index 0000000000000000000000000000000000000000..57ee4e76effd98cbe27fadae7a64b6651c6b8fd1 GIT binary patch literal 2330 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 As{jB1 literal 0 HcmV?d00001 diff --git a/static/03_3.png b/static/03_3.png new file mode 100644 index 0000000000000000000000000000000000000000..3faa3fab65383e22d7ec1f3b7342a860bb090ce7 GIT binary patch literal 2202 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 literal 0 HcmV?d00001 diff --git a/static/04_4.png b/static/04_4.png new file mode 100644 index 0000000000000000000000000000000000000000..6baf3c5f5e145dc0d41d8b01ea7f55a525bcbd3e GIT binary patch literal 1537 zcmV+c2LAbpP)#5(vx#vex%wO+Yju z@q!BN#P*^o}k68#%pv-@9C~cTqW!*h+9aU1KDSvM0YN<7Wh@=16^)o zW^u=$1Q+5kJzhA1W1I?|yuJQFV(h}Sz{4oPv-Vbcx^fFgI1xH|cTq#9azO81hh28l zFRF6B36a&TE#w`Ll4YWwrbN#B3L5X{A{7k(Gw@mcK{RGGLW-ZiXmurTHOI7d=;I?yYSgE9w4_lMNi%P@@Dik>t7k#m9& zo?AyI!>?wI@cdyIg*4@U3>m_x<3&&k9V(^JmMDcD3GI>_#;nk>`5SbDG`?ADxT4#) zcnL`OEp+l zB4k8#4hD=1tLiw z?Ra(@I@JO7JffXt8E|lTa;ak?LcIO_03tm3lpgakP90jyKo?~!flMi z=JhUpv(Oztf7D!TrC%4%;RyG^D8F6T5y=BKD^WvB8ui#tGZ@C7sGp6i2Hnk$LBUmA z#7CE5DE)XN^c}@a5^Hq%=IN(8)wvRRq^AC^D|i_1gziV%N{nUt_}A%6i9S!OY=!ue zRt5!BP!(;Y%9OUy&V8xgl9HE?A8~ARWC?kkXnPQ{1}T0jUKO?O_xU1Va0Ie{Jg%n8H@`XS2Jg~o23Oz8XQOVJ3r7hEC5A!2!yela&? zf40!9*`lsdC$3`bnGpP0LR-rgb&aa>) zWCWryP2&1Qp-a1%f*h-pw#go~jw1516nP>MzD)`z99z+P8l6{+w}HJ_CPXBUtY|&k z%d37y5&Mc-Fnc85bhLH6iUUc>^$oe5Y}|}op?n~8H&?Xu<(ZKqgTEhEbdi!7!W$xlw98s4^LkWR&*Y%q2&3fsve5n928o{Wi^{(D7CjIw6+bu_VmJLD7E*# zqC*YW_LU*~i27eZiCLd1q0_I+`?@Wm#0(t_^v?`rKo-GWvc00i2Kx9PH5L7w2o2PS00000NkvXXu0mjfjr!9` literal 0 HcmV?d00001 diff --git a/static/ask_dai.png b/static/ask_dai.png new file mode 100644 index 0000000000000000000000000000000000000000..8f795a6e36a87f46ef0a3648b60087d6eaca26d2 GIT binary patch literal 4549 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 N002ovPDHLkV1kS|pH=_> literal 0 HcmV?d00001 diff --git a/static/ask_ok.png b/static/ask_ok.png new file mode 100644 index 0000000000000000000000000000000000000000..708c15e73c4e27c9a8ff919d9918025c89664670 GIT binary patch literal 4548 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 literal 0 HcmV?d00001 diff --git a/static/book.png b/static/book.png new file mode 100644 index 0000000000000000000000000000000000000000..2dffccdc04c8ac98024dd33d8ccb1178d2d94474 GIT binary patch literal 727 zcmeAS@N?(olHy`uVBq!ia0vp^ZXnFT1|$ph9<=}|&H|6fVg?3oVGw3ym^DX&fq|*h z)5S5QV$Rz+`@4l5MULC^Z`pn7+&dS`?#&iT8Zo77xw<&a;?kGS{l|PPjOC#Ao=D(j!zUjMcMx%m8 z)7!G9CA9}M7clDd?pb7G$E3R;H|@N8nW(3@O6{eRPb$mbzw4N|g(v5UNgU&?v@#Xd z!UYnZ#Rt?j%m@y3-I0>^+I6yxp?Kr&o2sGBO9D3^@035Sv&>7!>sEeRe3wdPl9-pq z3NINpFTvnyryl3EM?H4ktgSwLX5Tlt)oUd@XCL_Z?s)Nm#(R&qiYRBc)(0^>Q(Zgb zX7~Qas4mGifyV+#GC*A&g&c-_ipLa>ShPsAlP$PVFX^6`?~3Lb*VDEIo2=wZl3S*7 zcGryaX=S#mh0~6j1TS?cG_-Gg`z~AbCgZk-X)|q4XRhd&VODVO%(h}Z3tbVx;;ni? z2^EI#i`t)UFdP^&8i2{C9Bjl?9uVw!XT<9@ee)v}cC4 z*SoUMaUwuXXaY(Tikd2a+7&%81j~?q}kS-&EbtWow<0`nNKmA z-HAuf^l$3mEHKdYzVw)}S~W&{=Z;Q=OutLV8vdD9o&W51M*BfY{2EP8tIgN*pH82?qig*8uC#>4u`_a>S&Z(-gRVWj&4Jl=pMP2da|D1!4Cucd0CwusIR zs&oXpfof~s1?+}oUi;n^z=6k>GJoF)d_?mpV9PfErIw<`yNCWMFs^Lu0IR^g7lV`(R5&7+6_NfF-AWOe z6_LlZ6xe(gfmUm7j^jbac>|aOzP$brI)E(D<`V&*PS}|8=SgG1Wh|dQkaTjU!Fkit zeZU7tz}hdxt6@?w?-J@7FsET(9;EU{p{=-Jq+Lilft%0-CLNvdFuH66zm$GDQZXI1 z)ZmxW9>+Gh4C&Y=aAnQyhe>xtE-3!pHZ(7xV&cc+bQyRk5`z~Y^9_7NE&Nyws4V~h N002ovPDHLkV1kV%>=^(6 literal 0 HcmV?d00001 diff --git a/static/c1455.png b/static/c1455.png new file mode 100644 index 0000000000000000000000000000000000000000..a40e24c799523fbb926bf94b6595efcd128ccd44 GIT binary patch literal 547 zcmV+;0^I$HP)}*rprx8&SC1A9$3kYH@iNV7B0ZRHHA{fv@l0Yhx*roHew6nC5 zG7AA@_LHS|8=8LC-1H`jVFiBAU7+0$gu_N&! zg>iLLpyDtN&TA>nG zrlk(k$o$ype&20}W_JP)iKtu+jT317-tXfj7WoU>vvs+y*{G-ltt-FK`H0h@^4-VZTMIv{?iLh@FIAs<4#ShG)yB(#mB1=rCz~*V ztH42EtVw7)aIr>oAMiTz&KJ4ZQkU)bI{H2E1h@%2@AR&yql?XI;Hgrjcc7tvPqw;A zZF~pL2K!bs9gU32Khq>+giqVU)H2j0#xfJYYR^xDJ_(cYw+IoGx0b;-q?Dlxq2i5p zPhy{_Av3N3n}Bz~63;_Ph=~wE1z;I`M=BY*5IPTh^7ih8KG8zLx-zfivD-=Zj@lA>)JQk46{w@{;eq@4oN%{r>O& zl_tbRP4ipmClZOK8KVt}V1|X^GX=cyDE|v!@^wY0aUzlbY++0i?b|mqbOB2x z6~vjzf^1S_fpu%3)gBxWI4GWgJPx~)!#!GflotnUVH<&=Q3#){g~J7bP^u{b(laat zsbp#?i7Hi4s78jW6-td}C4|Y*Rfv2Qf-0n_8du7341>lW7)WC+Ry@)0&bTb_rG+zj z-i0HG+wGRQ6*7jkA*e>9LF5>MVN!sQa`{f4@JOB9;t2)=#gQ!S;%UYS35-Mrlgn#i zpy`+i4wskK$&I@SI1KR+E(Ddy1(QaB7SfAz<+Aos;T961?39CY@*KdTUaTvV;TbNI z`5S8Q@k;`LYfUDvj92R7aCk*lr)40>MB# z#f$q!y*`0uth5~*aEVb7kTFuPMm1`+6qBK&>Y7Zr(aG_IlcbCWEe!l4qiG9{l31uU z6jMnR7ECTh70OU4VYL##Yz>NG85tUsQcm1AFl4Tf1rzrz|MPx4OM@yT?61uu)TWR= zcr?v{z~+xvPZE_gzOvKMXvW|KDO7?MCWREBEb#a?{n{QFqjhIefb<{oVhqMHR^Cmp zRJaXz>%XKP0`y0OvK=!8`Ky(qXD^ia1RV4YVd-sH;KSSUC@1K1ENEy~0;)kL6|XfK z!p*5AeS6Mk&j}BF_n>58QOGsj+Jq`7OA=gSTD#+LaEXsP{QCU&edf+uX_z57*=Rgg zQj#1E^}Lxkw|Jl`!AKCF9(pn}xMi>B!^rz>b$9!&)Eet9`TIAxzy0djL;1PR&d4J_ zM+yDP4`HssTP=6L5hNt*c!Nz00+`bJSl(VFz+h!NHKr&kY%SNLu#oOEit z|M?5wC>l;RUF)fn;4?ReZRrTBdTdLtZ@J?TtLNPdt?!?j^~Sr4KDdw*S$$gbn{H5+_CN^acRA$|}Mb|kQ@;!#$*J~MuH-^SLTuT~gxh8|977jN0VLO%U_ z$+CsN-I+dB)Ytty?OvDi-l@rjx?dL$t?oZjr2Fx9b^CW|y!B>MZfjk~(`V)Do*zdle*x6vR&^ii4ZhhOSo7J&@_|apu(LT}X+K%B zdG>jC`M@*Du)aBdNxyDG>A|9ysw^=X(vMBrxp$!Wd6}dz@XP9!y5w8!nKc3Lb^XFG z=?R##E_C#FCnt&@K qepf%=HTltk!JN~}dPf?XN2bKyTyP{PCbeAnvl=7g47CyI#eV|cWXsF| literal 0 HcmV?d00001 diff --git a/static/css/components/demo_page_common.scss b/static/css/components/demo_page_common.scss new file mode 100644 index 0000000..f40b136 --- /dev/null +++ b/static/css/components/demo_page_common.scss @@ -0,0 +1,193 @@ +/* 顶部 start */ +.header { + padding: 80rpx 60rpx 40rpx 60rpx; + + .title { + font-size: 36rpx; + color: $tn-font-color; + font-weight: bold; + } + + .sub-title { + font-size: 28rpx; + color: $tn-content-color; + padding-top: 18rpx; + } + + .tips-title { + font-size: 24rpx; + color: $tn-font-sub-color; + padding-top: 5rpx; + } +} +/* 顶部 end */ + +/* 展示内容容器 start */ +.show-content-container { + + /* 标题容器 start */ + .title-container { + display: flex; + position: relative; + align-items: center; + justify-content: space-between; + min-height: 100rpx; + + // 标题样式 + .title { + height: 100%; + max-width: 100%; + margin: 0 20rpx; + font-size: 30rpx; + display: flex; + align-items: center; + justify-content: center; + + // 标题前面小点 + &:before { + content: " "; + background-color: $tn-main-color; + width: 15rpx; + height: 15rpx; + border-radius: 10rpx; + margin-right: 18rpx; + } + } + } + /* 标题容器 end */ + + /* 内容 start */ + .content { + padding: 20rpx; + } + /* 内容 end */ + +} +/* 展示内容容器 end */ + +/* 内容容器 start */ +.demo-content-container { + border: 1rpx dashed $tn-main-color; + margin: 20rpx; + margin-top: 0rpx; + + position: fixed; + width: 95%; + z-index: 10; + + transition: all 0.15s ease-out; + + &.top { + width: 100%; + margin: 0; + } + + &.no-fixed { + position: relative !important; + } + + /* 标题容器 start */ + .title-container { + display: flex; + position: relative; + align-items: center; + justify-content: center; + min-height: 100rpx; + + // 标题样式 + .title { + height: 100%; + max-width: 100%; + margin: 0 30rpx; + font-size: 30rpx; + display: flex; + align-items: center; + justify-content: center; + } + } + /* 标题容器 end */ + + /* 内容 start */ + .content { + padding: 30rpx; + display: flex; + align-items: center; + justify-content: center; + } + /* 内容 end */ + +} +/* 内容容器 end */ + +/* 可选项内容容器 start */ +.demo-section-container { + margin: 20rpx; + height: 100%; + + /* 标题容器 start */ + .title-container { + display: flex; + position: relative; + align-items: center; + justify-content: center; + min-height: 100rpx; + margin-bottom: 10rpx; + + // 标题样式 + .title { + height: 100%; + max-width: 100%; + margin: 0 30rpx; + font-size: 30rpx; + display: flex; + align-items: center; + justify-content: center; + } + + &::after { + content: " "; + box-sizing: border-box; + width: 90%; + height: 100%; + position: absolute; + top: 0; + left: 50%; + transform: translateX(-50%); + border-bottom: 1rpx solid $tn-border-solid-color; + } + } + /* 标题容器 end */ + + /* 参数内容 start*/ + .content { + padding: 0 20rpx 10rpx 20rpx; + + // 标题样式 + .title { + padding-left: 20rpx; + height: 100%; + position: relative; + + &::before { + content: " "; + position: absolute; + top: 50%; + left: 0; + width: 4rpx; + height: 90%; + background-color: $tn-main-color; + border-radius: 6rpx; + transform: translateY(-50%); + } + } + + // 参数样式 + .section { + margin-top: 15rpx; + margin-bottom: 20rpx; + } + } + /* 参数内容 end*/ + +} +/* 可选项内容容器 end */ \ No newline at end of file diff --git a/static/css/my.scss b/static/css/my.scss new file mode 100644 index 0000000..1e46364 --- /dev/null +++ b/static/css/my.scss @@ -0,0 +1,241 @@ +.pages-a { + max-height: 100vh; +} + +/* 自定义导航栏内容 start */ +.custom-nav { + height: 100%; + + &__back { + margin: auto 5rpx; + font-size: 50rpx; + margin-right: 10rpx; + margin-left: 30rpx; + flex-basis: 5%; + } +} + +/* 底部安全边距 start*/ +.tn-tabbar-height { + min-height: 120rpx; + height: calc(140rpx + env(safe-area-inset-bottom) / 2); + height: calc(140rpx + constant(safe-area-inset-bottom)); +} + +/* 图标容器5 start */ +.icon5 { + &__item { + // width: 30%; + background-color: #FFFFFF; + border-radius: 10rpx; + padding: 0rpx; + margin: 0rpx; + transform: scale(1); + transition: transform 0.3s linear; + transform-origin: center center; + + &--icon { + width: 96rpx; + height: 96rpx; + border-radius: 50%; + margin-bottom: 18rpx; + position: relative; + z-index: 1; + } + } +} + +/* 轮播视觉差 start */ +.card-swiper { + height: 450rpx; +} + +.card-swiper swiper-item { + width: 750rpx; + left: 0rpx; + box-sizing: border-box; + padding: 40rpx 30rpx 30rpx 30rpx; + overflow: initial; +} + +.card-swiper swiper-item .swiper-item { + width: 100%; + display: block; + height: 100%; + border-radius: 15rpx; + transform: scale(1); + transition: all 0.2s ease-in 0s; + will-change: transform; + // overflow: hidden; +} + +.card-swiper swiper-item.cur .swiper-item { + transform: none; + transition: all 0.2s ease-in 0s; + will-change: transform; +} + +.card-swiper swiper-item .swiper-item-text { + margin-top: -220rpx; + text-align: center; + width: 100%; + display: block; + border-radius: 10rpx; + transform: translate(100rpx, 0rpx) scale(0.9, 0.9); + transition: all 0.6s ease 0s; + will-change: transform; + overflow: hidden; +} + +.card-swiper swiper-item.cur .swiper-item-text { + margin-top: -220rpx; + width: 100%; + transform: translate(0rpx, 0rpx) scale(0.9, 0.9); + transition: all 0.6s ease 0s; + will-change: transform; +} + +.image-banner { + display: flex; + align-items: center; + justify-content: center; +} + +.image-banner image { + width: 100%; + height: 100%; +} + +/* 轮播指示点 start*/ +.indication { + z-index: 9999; + width: 100%; + height: 36rpx; + position: absolute; + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; +} + +.spot { + background-color: #FFFFFF; + opacity: 0.6; + width: 10rpx; + height: 10rpx; + border-radius: 20rpx; + top: -70rpx; + margin: 0 8rpx !important; + position: relative; +} + +.spot.active { + opacity: 1; + width: 10rpx; + height: 10rpx; + background-color: rgb(217, 217, 217); +} + + +/* 胶囊banner*/ +.image-capsule { + padding: 100rpx 0rpx; + font-size: 40rpx; + font-weight: 300; + position: relative; +} + +.image-piccapsule { + background-size: cover; + background-repeat: no-repeat; + // background-attachment:fixed; + background-position: top; + border-radius: 20rpx 20rpx 0 0; +} + +/* 用户头像 start */ +.logo-image { + width: 40rpx; + height: 40rpx; + position: relative; +} + +.logo-pic { + background-size: cover; + background-repeat: no-repeat; + // background-attachment:fixed; + background-position: top; + border: 1rpx solid rgba(255, 255, 255, 0.05); + // box-shadow: 0rpx 0rpx 80rpx 0rpx rgba(0, 0, 0, 0.15); + border-radius: 50%; + overflow: hidden; + // background-color: #FFFFFF; +} + +/* 瀑布流*/ +.wallpaper__item { + background-color: #FFFFFF; + overflow: hidden; + margin: 0 10rpx; + margin-bottom: 40rpx; + // box-shadow: 0rpx 0rpx 30rpx 0rpx rgba(0, 0, 0, 0.07); + + .item { + + /* 图片 start */ + &__image { + width: 100%; + height: auto; + background-color: #FFFFFF; + border: 1rpx solid #F8F7F8; + border-radius: 10rpx; + overflow: hidden; + } + + /* 图片 end */ + + /* 内容 start */ + &__data { + padding: 14rpx 0rpx; + } + + /* 标题 start */ + &__title-container { + text-align: justify; + line-height: 38rpx; + vertical-align: middle; + } + + &__title { + font-size: 30rpx; + } + + /* 标题 end */ + + /* 标签 start */ + &__tags-container { + display: flex; + flex-direction: row; + flex-wrap: nowrap; + align-items: center; + justify-content: flex-start; + } + + &__tag { + margin: 10rpx; + color: #7C8191; + background-color: #F3F2F7; + padding: 4rpx 14rpx 6rpx; + border-radius: 10rpx; + font-size: 20rpx; + + &:first-child { + margin-left: 0rpx !important; + } + } + + /* 标签 end */ + + /* 内容 end */ + } +} diff --git a/static/css/templatePage/custom_nav_bar.scss b/static/css/templatePage/custom_nav_bar.scss new file mode 100644 index 0000000..7cc0960 --- /dev/null +++ b/static/css/templatePage/custom_nav_bar.scss @@ -0,0 +1,38 @@ +.tn-custom-nav-bar__back { + width: 100%; + height: 100%; + position: relative; + display: flex; + justify-content: space-evenly; + align-items: center; + box-sizing: border-box; + background-color: rgba(0, 0, 0, 0.15); + border-radius: 1000rpx; + border: 1rpx solid rgba(255, 255, 255, 0.5); + color: #FFFFFF; + font-size: 18px; + + .icon { + display: block; + flex: 1; + margin: auto; + text-align: center; + } + + &:before { + content: " "; + width: 1rpx; + height: 110%; + position: absolute; + top: 22.5%; + left: 0; + right: 0; + margin: auto; + transform: scale(0.5); + transform-origin: 0 0; + pointer-events: none; + box-sizing: border-box; + opacity: 0.7; + background-color: #FFFFFF; + } +} \ No newline at end of file diff --git a/static/da.png b/static/da.png new file mode 100644 index 0000000000000000000000000000000000000000..3ebcf639687609b88797fb0afd43f466b84e6aab GIT binary patch literal 1070 zcmV+}1kwA6P)Px&=t)FDR9HvdS8r%jR}}xf z>VnR86z25PoCQI#1tr)?wO9wvj!a59`9c6`JHp_`JMYCNSghQ2`|s6go+PA)B=E5pRQ%(Lmh@n`T?~G!LCO5 zN@aR1VQ0S|$%P_*=O{8Pa@vh3n9IRtNi1c`MxrYE@5RyRjltI^cYrf~fL8Ne0((1; zm)`PMy(g5o-xV_DFXcI&A4Jrjk9H&Qcqu_ypweDwIR2H}G9}KFPTa@C@b=181Z6>g zbG2p3JNf*S0=PCHV{={jDnWT*sOyN$I?a^XnrlT93acoo2@MmJ2h{6(8tmnH! z&;{V`KMMAJ9l;lyOqe%|8v~~Mj*PlC5w%V;a$d>O4OTaR&rV0+?UB&_W%ju3N!Ne5 zDdXo_D|k+SDRlw3Js8LO10yUd%QIb?H=9GP)5O-fEZ|k!Sm$|jI84-GngB#eg|jY< zham;K)(P-ji~&&LUXwr~7zmm!#V{C9P`yDw=j}LJu1MIn(un*yiBe=+2v)sm7`H5% z0BTN!aiLSjnJNp4=ksXw$FQe4itj(4hJ~+l==@#A#|;tGyUbX&fCmM<@lYaLZF{wu zJSBh;QAKrQ1jX|>RIW}$OdYt6g;_S}|4&XtK=(E7v^=eSd!K}s%MuQ5F>BJfW(Fp@ z&J@V56A}3OWf*y|^lx2ZOzQ&Dv!4sV{YMJR%&q%z9NlilgOG~--$b!6heJ)dfOHr& zEdVs?qZdSW>F8}gTw!MSf*R$C{pV;a#_@I@$4aCJh%Nw+hZVG5mDm`47*d(TwZ%N^ zfM<VI7~GQUZ|UD)yX?;$oMCm<%|Icx-bRaneg$ably< z)AG=kz4t(2+(El0_qDMMs+obNOCkmXDxAxWX;Ewv9-Vk$QAKItbMnCGIBQ#?EHXVd z(?(G5(tclPW?-~4XWa;6ywZa4qehXZrt1Up3kpC_ z36iZiDJA&rF9mu3O}U8*{Kwx41Rj|$LBo$C1Org9BK6b#rydD^K2kLIjhY34p^n2g zYo>*WRtr#}viMW_C@l;6n|524(0M+UHtJa(-0djh>$Tb|)8IbxgyHLxb`UU8I^AEj z!L(>frCFQUf#8j$|BKUj>|1*wU*d8k#A&953Kb$$oSyN;;O&*VktLKT#A(u)NL}m# oNX4YebAq!7{M!KE8&T@|2|~^SGwL9~W&i*H07*qoM6N<$g1W2y3jhEB literal 0 HcmV?d00001 diff --git a/static/def.png b/static/def.png new file mode 100644 index 0000000000000000000000000000000000000000..b8cbf66c3160b92b63e2301f98cd3e9062a6a4f6 GIT binary patch literal 6816 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 T%DNo100000NkvXXu0mjfT5+Xp literal 0 HcmV?d00001 diff --git a/static/ico1.png b/static/ico1.png new file mode 100644 index 0000000000000000000000000000000000000000..be9f34a1e36e22e12c7003ca1f430936b227f341 GIT binary patch literal 2447 zcmaJ@dpK148eVqVE|IirG$}13>@H@_g)uWBnsF`mY~f= zy*dB@nvM>1SH;L!yj8zfJWpwl%M=4zZ0jXW z2U%kNGUesW0BML22FeUAIjr> zMT^9)@ZWy_r?AL9OaMc!um}kivJ?jwV6YfUK&1&`rWg^rBS`R46&Znu7!d^`0+2>q ztQrOU(UZ$(BNEY;&m3oGsv}<{X7X9EBi$0CP{DG!Y^n{BY)2;J@f1564Uf0ACF5*p zG&2g#)ZCO#HZ#L5ap?#vln3+0OI-HfT*5cGi|xP@C?eBgA@>l>wi6;e@N?Q!?l-;Q z?7pe@h0Ff77u+|wkirbKc)0&{*h^cA4qBXkZC%CUYxBc=MaK&jtzF-erU?Mc7aZv} z?$XEaa(Ib*ZP(r5OjgPQ*c0cy)2?KsPMSE_9FG2RnKtRXvcwUWXsV7m2F|T=2Vz*TTc21?jph)EBRPH4k=6#$gMQA- zoY|bgTq4xg+Q0GvWrhBc%+;%uqm=U73c5?klWz=Ks;c7BiudJs42;MA8rG;XD&L5m zBK1#=Pi|swkM4@^iEh5w>omiBH^~QAIpDPl)Q_v~cf*0@BJgB#^GeYl& zFlSFk_zozcw8jX{uFb0p2ck7rXxFdoNR>x%LZ;OS%JV(sO|ctdasr99x7zDtng@zF zvWpEhI(IZve8DlAUc&gGhWw?qUd-jFe#5#)pOlJeDE(^Hkvy-b$qs|d=E0}uY)+wo zr{ctZl>v** z79~~-%h2)RTJ!jvqj7U5CtMz83rRX7y5Q97$i6C`QB45L3r zTXd}JEZ*9OE{R6(YIJjWJ01}`968wO>Gix{ld|Qb^)sDAG}11QmJZKT!`>cJHN(=> zbf2=w`*Cd^I(m`~cSBGaz4#QJ{Z#9$h271=K=KX}=KjnD0P20R1(osQQ1cAXR;Bw$ z^-jp7b<`O&_!Db=@D#3-yLzB{E;N>TbQNd>`Oqy18V##i%+1QLVaWcS)`7R&GXc za~pY7U7qwLvr{GMyV_2E(t9PYtoe0G)9z7+vzz2lbIsm_k#_Z50xOSX)Ub+HWEy&0Am9zOB_hc4?~xZDSy>wNky|LUm-jQhquf z!B^#6zAS&$>p{%!C_VI#YV?O4&!43=&K_%tJAcmDY_nO7$G-zL%#184L#gF|=+f(0 z2WGB#?U(p$H|K;G-KB493@n@KYVY`0HNPysJVG8AH%fiDcQ-dKXnDhhCKn^mF27+_ z1h{LSZ#;4nLObc1`1mEhlI^+jqRu-!AlRy-I3UX2aMU1NsyTAK2%DtmU+I_j=J-|p zAd}&TPP4`Z{pUXXe$mzG5?8B&{Vw*C5j}9@e+tW?Z6E6$#{S9ql5s5IV# zY+hT2ms{VHVRx}Fo{{%oJ-n8Xpv`?#TSsUh)|8(JYu?DneJ0`t))>Rywn~jL(yzPJ@pO7jYi?v_X`;IEyU*CzV*WIsxr{;y8_j&Ub0ewY! zvt5M}i=>b0km6;kQv)9tesJA0vsSDd9%p}p&)ZYRpVmS1Qd10(Yxv}M`WBWAe>Cc@ x82mW*_%_Xc8k!H+pGyw|)&Yk%e)_>5n2UdC`})RP(&8_Yqpb`5$}azyKLNZg8esqc literal 0 HcmV?d00001 diff --git a/static/ico10.png b/static/ico10.png new file mode 100644 index 0000000000000000000000000000000000000000..377b9dbb7f9413f5ee7628f55cc91726d38314f1 GIT binary patch literal 3009 zcmaJ@dpy&7AJ>Bpa=%2mG@FpJ8#ddS+-A0Aa=%o{Y{O!qI?o?Z&+qm6{l1si`~Cjh-hccue7rq1)YhvhC@5$U z@K`_j>a+5ytd@UI>daNkmvvl^5UxKnlAAzg(-d5(%m^BQz#vD_{Agrq;=WEAMnOT* zk{%Gk4Iz1_2;W05H_G%g^57DbP90?ypH1q9HkPQYLX5|qSp zr$y88No<;bl6L?lDTacg0-d)4Fg&zefI;Ju0X#-*90$#F0)Ej&%l9kS5Fp?Sgd5`o z{5z=-k`KV0$)*7uzzACk%-#WjM1f%lJ9`vr3jhvK1{jj*NvE(NwU^JJ@LPH=42?^i?J1~qq-1-~TDh2}oqoAbvCsGoDS64=xh45{iX(XVb`BCOd%1jQ!R{pJ*nR$%$sN z0PgN9T|)t^gXwWpW&&r^7Y>PpCd6^LoY@d^bNWPVRWN+}gGV>#is$ zsK5wV*8rYmDvTMOA86$4|I6Mp=TO`tFE{@R!Um#8OzzmlUKbPn%5?|uM{cGIdY$pp z?yCiaH=PSdqd5l&$FQ8=`-3#b4GG0T>%H9SFX9*l277z@K30PV=8NC9%(RZT%q+Z4 z-Eb|r=RnW=^3XVD9CgUH`QXRq^*Iypz5KK(s#k+nNc|Wa;e0C>S_UojArujdysSZa zk$I-TWiQ8V6IR6l6VMx7FfMR-(zbn8*T@g2cSUu9e*y3?h)+| zNKgEr#EKRIZ*8GbkQtGzoS_O09vmd-)Y6pX=K=l?!gt|&oxCe7l+M@{|Z;x5A zS-9cWGaBrrjX_GwrF&#Q@jbw1n6VNU;EZdwp?y0rsbAKS+wQsW~P#EV%4MFqG~~eGqB`| z@qBb;YHcpG-AAfc2-4MZw9+1}8~-c9`f+CY;x(c`#+%k?!w^0Rtjt(Az^{y>x90_C zM@#u9KN`=nx2czg7+*x~)JxZVQEM(Oacx1JmZ|22rav$c6g3GOD0RT>doPgt+r)!r zo{vBKmv*_4EKJhJb~uSwZ$)`mG##KTU695fHm%@{wA7%>&pO|MU?-9Fc( zms~2_<>GBf48ODfPA${3+z3C^D27(fAp)oD0z=dG%_BrH>0xiB*=2C~NYFYbCDe3GZ z(DgoJw25MBnckxSXxPB zEnF>!#B?Lu6wCOt-qr0cfpOECrFX}VU#`=@kYX@q&6)#jrc9`1STR3!4G`;imNRCVAA~DPgc*6D;=h86S;9y@5 zJxht$u)SZ$G1OnCtK4^7(;yRmbzrOxL>`P!j<=jtd9+bn^NWMlY0+rmuElLVr-jPq z=WeD7{YbaXJMQn}>^fdoEh;K>nsPd~?Azh)Nb7XHOo!i2kbc%2ny?p{;`bzBdW2YM zcqUP>?6G7%J=3lVghKZ@5a?b>w%+*VHKXAHhbs%(&dTh~LFu4R1QYdFDkft6;%x1i z`lRAcVs(uSSfq|&m+p(uXb4M+<7}^AKXs*X75KajKFJ3E#HtERCw!;G>BMO2ahJD`fFVN8bjs zOWL*Z@OB^HfW$p^dDPyaBc8HE&7q+Y_VJ9D*ow9zUI1A4q%K1=Q2FwNgVZOn^z7&Y zd3Sgc;Q~SirEk~U8hAN35B&2gha0)>=S@( zSe0FlAs&E_h1t`(AHQ2>g_@lT7I3RYVy+@{vDWn8H4gTHrQE45yY0m)C8Un90SV^b zF_+>qW7Cm^>K0}}`x_H1%%uzK?-}3ZM_5NGrM3A3W{;giaiDQt(8LpB-@OgN0rz5j z+(^D7;MCRbJABi4os_%Jm2`sDOC;*1s|O!xFTT$eb5ff6MWY#NsD47WX`{VMVZQ)= zr_}JhBp07se(6%s>6t&CSAB9XS6veUI63)D%hc+=u+X77}8I zkGn`05?ZWK(c56m#-ek-g&jg-Fxwt2B;4su>)P6-oH-`@^@aIIU(4*`pF>+pj}W>sw`dB`kaVl<-Yyqo!-A)s~+y z*@(l_9UFU)@@0X^g#OWAxExA58H*_}42+k2Nsq-349wYxm74xWB|Ub0)+S!L$_ r%Rt#v;-B|EOS7kpczq9?|D~?5AuD)msHC!Y<)@n9;f<|v3s3tG{AeF> literal 0 HcmV?d00001 diff --git a/static/ico11.png b/static/ico11.png new file mode 100644 index 0000000000000000000000000000000000000000..e05061324272760346438208dd239ee72be12101 GIT binary patch literal 3538 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 FzXRfKj8^~v literal 0 HcmV?d00001 diff --git a/static/ico16.png b/static/ico16.png new file mode 100644 index 0000000000000000000000000000000000000000..8210212da5cb4c35b7e86872852ccb850081c2ec GIT binary patch literal 8334 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 TIR!nnd;wJ@O~opC%dr0ek)I_8 literal 0 HcmV?d00001 diff --git a/static/ico2.png b/static/ico2.png new file mode 100644 index 0000000000000000000000000000000000000000..b140322c3eaa5aeb5a24b7be4dfcebe846cc7368 GIT binary patch literal 2839 zcmaJ@c|4T)A0J1AWF%LLXQq-BGX_mFgJBMXn4F2EHOIqD%nUPwag}joDji~7xoyNs zr43m{On2+Z?&ip9Q&v*0sl`&i(N_EW`23s&7z- zKp>iKu4Eti>b3H&R*`>CYR_JfFNQ+r0HH50R2WO+gAf9fM+X5n4lNAy0cp&*sC%G2 z1fpch_6raOP(5%A9tS~Ni9v`sk#aNyV(%!5q%p!lAwUPi*jxwr)K6`2fX#G(@7+PQ zqDGQH7TYzR5BkRM_G83{Gq6m!BOb69;p7AyP)GwroCvM}Cvt#)_{P-#|2gxX>?w+&;c%2`cDa*$S<^9!KXIK8-^6oB9SPB)k;a91F6*i zAIjl;i53Wbz<>4rPhx>zTqKC}0R_BhK0`jZ(9J8UB5@=>NE7n-emq{p=Pr7&ctW0l z#ft<;q?N8=0kgeqE|V84_~s*qO2xTx1wtB^0lJYL;BpoOo6W=#Feo&ZL?L1+BoYec z>`Wk9k%$;Fg=j_Di6&vOpRr^fBbozpg`cs^f3c*mVpr_IiIit1gM4-j$fWRj9N=Tw zIQG}IV86=u3CsMt7Q$DtNVyo~%5eW{*q^WD4qDlMv9A2^#rz;w?s&f3+Ju@&8WiFtPsX(Q_6|7=A(F)$C{(}mCUDW z@hnkxa@IBxK}S=?%HH+#T_v@=tqLa$yt(zsGy-BkH_rfp&HQk&_{~cYSNu*GFUk)c z`XKuo*Vkv#*CkxM8VOSt_|DXfK{3ge#e*H&rzQ*Ur0C%44s587??69e6eh~Ht-}X? z-_n|Ys%Ex&GW%Rkw!i-t%ZhjNF*jwM6{!c4Gewu~DCDSt_gb(7i?Xk-7%CD6ApBYI)nFN1a^;deq_|QMgkl<`&S0>vRJP&n zc5y&ws~hp*!2l0f3<>Q$u!odc+|jBo;gJ&fKXz3?69C?x0bF%ahd->5gTLXo|8hKhX8)U*&P`1fqpT(o+NWYB8ucAtC z%}CoDw^d#VRwR#dJzhea_8I4#TL?kB=STd z@-s;irPHf=&K(%s2!By&pYzxLd#MfAfKbO3gdWpD277oB-WRI1Yqm`7mr$P3;i0!Z zLAjL1tI$s0pjIQDw0%w`;&*T?#R`A-S~Fw>>_>FQiVrHtc!<$0#0BESon6wTo5P1J zY)5fIjWa<^1Gnnw(hrY>YA|7(xla(CEz!y5#||wzOl1Wv(eH0$UGne7rfZUiLY1f4%IPbrCSZfG2Zav;?T5>tFlU`tP{QiE+ptmtUXu8+mROViYF3}8B zUDjyv*DowjcGX|HYCVNB2;DpV3D|_E9BTLN*f*1ao)&@+om-`UZsaINLV<=)C?u(RtD-7ZaFRHnN~W}l zyor2;A|-fau%1XTl0kgP;5UiG1dnu4@L^5a_2pSzWmS~=Ofxe(O7nSL*OF^@<=SVG zDKqQd$4(Pb`)du@yOvH$83Bh0^WQ30B;Srfw#GhB$eBd+ztJfg)*$7XKiQiGeD6Gy z0Bf!}w5Oj_9y$7BlPUrpt&Lu69@V}0kkUV`X=vt&RP2qtF+pgKGH*AK;^syRnq1ms z24VxL`6;oO*d5yb9wSp5&z{{Q9#Vi`KRKflkx|~}Sri8m?W*+Y@nzk#w{epRL}#e#%j>jp#5msIZ+FqDTTh*hs@~V1hmk+{ z8ups>A(u3!@_Ot-3N=NzP&vc3u2FDOn_cki^?9Rpq0g~n-PmC@_STy}v_$`QK*{p4RP@TDlr&(rbm~FO!c_H4_OZT& z;PF3uV1aWHja`Fkw>wRAiHH`J7lM? VdCh8qarw%xs+;p}ay>C5U-f&?idjOZw!fC!>t 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%0A;4d#yXK;e?8FA?C9}Ti z{pENu(D#b+YCV#AeML$5+)D(SH-Q>9KN?)Q2M#18kGB}L>&!X2mXw$M@(XN_N44!Z z443aSz0rgcc&;kf>xRr|GOOx$N@Dav07m7+(!eQwP|^GivSGWJeADw~gTtWCTYQ0< z=pv|f@XmdVa_74ZiNE*MV=bLZlchT7C4{QPwm7y^SL!tPi{1fzlxdbigh9yL^jY$} z8pi-(E)Er|u1C-1`1bXzEEryesih35B&CN4It!B3#|zubGebvpSWSn#x`z}8wpjE! zRYmNt99hyY=R&9%mg+fg4s$DxI~^si+{%avYQIo(K$563mDm&yzfJS5;Typ|=9mG|s7|7L{~e7&Z;a zK9W`{d7Iua)cGvycyMIrz@drktEI!x@HMz^>Z&-F5>*Ba2 z><$um8h~5Zhqd(P5~qvrIb2xj2I4TleLZCrwww@!J%upAqwMV_xL2idT}*nw2(rwY zs9%?x=a_v+p*AyH#cciM;p#jY9nkka|BpX)r%8Ka>8a+DVo7?{^U9R_p!)sONZ+tn ztGII}6|1X$TIM${r_GQsZ40YOo!+p*3gyUhx}nN>%wh)fk?9DcRL5j4Zz2R?;DE^!S%?X4Pcf&mv=;(=}lQ z-_vh&zw@n?a1E|V^M4T5@8}x!v|dcGyKH7HcA7vFl7W6T$PGbXVhB_5jegCwS1Y2j z4|@fPJ~f54b6b-f&Nwx=0$aS^WDKpXh<=(HEZE`P-d1c^ENwM}k9^yxnE@MAq}0pW z%+EXYE|w-G&Tsv0c_ZPiPmWJn=IuO)J%^wZRWp_iop zZ0(YL<2@UeLRP!VdgJfP)jXz=5>4zP&A+8*X7umh3Cw=mzHasYrF2Ib!0Ha)K+%L( zs4>e`oEMMer!{E1)=ZKxqw`1)kZ$?HNy2?7E9ElifNI@o@>#uoo+WO+#+ntpP^U*YWu~b>mo92b61# z2jA&dRqj$TUg~_ivuJe+-tbDL|4x%dn?tSMvzo_y)6D~e9k&Z8zE99On8a&_Nvl-o z(Xu@zs>dJxxMgu9mA;U#eEW=ldESfDk6}Ib;_!}Bl0CAij$N+3*OXJuOS9e^y6;W9 z+IZR13}@A-`783_-UwMCaEkl-etQ8WRN!qu<0QD_xkr?5TUNBvg3WEK?^qs`VoscD ydH+qwyP;8Qm(ANOQzi1_<%YL*nd~^Bs0HvTxdTq_BHY^i8zqyx-EO*urv3-c9lF8* literal 0 HcmV?d00001 diff --git a/static/ico6.png b/static/ico6.png new file mode 100644 index 0000000000000000000000000000000000000000..67e691218be42f49d44c00c949ab820d58a15a5a GIT binary patch literal 2188 zcmaJ@X;f2Z8jfrdK?{*xn_i+utB?&6NKAmpWfQRhf`BL*k_$vgZcHvFL|GDKao4Gp zqR1#ziUa6a3ZkYW1jabn0>wieT!12rRwdwqxYXWIvGZe?d(M5oxu0Os#y!9dT z=ef<(YnKE7TsepQuF_S0pG7iH4IAr9cj0xFR?S0>UJM6etQ3h%&d| zfY=y}IZ@1yL*gRVv4pUMBrst}Dv1nbV=!!gl}sQ^gAgDIN)byrgt0441VAj}5Mt>O zln7ZMlqwEY%b{rXdcIJdCS-~T{(b;k#Xk!$&~9 z$wkSmC@}bgFZ9GAq#}rnMJ6kiN|Mrx1j|#%R3?*2rqIYVnkS0zRAfpKfyz^=STdsk zLJFZ=EJMVw6fh|YlHd%4LqH?_GX;t4qpVc%p-gDO$SQ%1OeIlFDa`;QBK|*ABKe3` zAW_g?@%~R?1wT^;k)t35oFNyYjZ0o)awTI0${_&)%lR;zK2t?rDvZF2R9FTC2AZnI z1Xjd~r6O3V_a$Wf&xaz2mci17)DJ-^T)VRt}0PoWQ$XeyYJJM-w6+TVaJK# zaf6+oB=cQ1Q_QZgV|v@ZC&1k~cO@Chk()!Mb(f3bt;27Ax>;J+eyC*X>eTRKwW|=n z_GL8A9musfjKKx0owjD7doZ|bap5=2$=jZK;&vnvPVRXWe~JXe8|uH|Ja+YH%<25W z<1L=Jt1O0Nb1NY$SeEd9k`?ouXUm&Iwp24j+e-Cmd2b6CM6I*i&ae&F!t-wL-ZU@E z?}5?6HM0*G3*_v(Uwlegm`z?5fRtKocV&|2d@CW|`fBvR<4kOp=c6rNo0n)04gyb! zD|DUW)t|n|=zO;3iN@|!lV0#(vDUe&L#sY|7V~=1vm>z!b^qMC_wdNWbptV@qsvq+ zJC7A^99U{I$TfnKln(yM&r5@hyN!)yr@aXl9k|5)sU8fr3|ID(15t%jZCq_X*Qf^Y zgRfoX&fDbfHj%}yK1Tjd!Ca%1o377@Hh4vKHdwy)!xt50sNAA&JLzof+RRkC+ApVe zFzz-z-m_d~wkqA`eoE2aY~N#BzH^%5)#$rvgaWIYtt3jklI`-tAZ<932^IrLo1KeU)EsvK^`<>Pl8zzid6WvenTr zR$y#Q`>JD?G`3)~3g_RMS{SKmc-NWWUHaf2sipcw{yomkWVRC;a|VcdSr(ue^#Ow9^Y^~9Zs;m(J_D6y8lc?jfOoiar~l{Tu8W_bGINJeQmoeC9KdZu?uj@FuH7l(Tw$wSi=VoCag)F)@ zn4L)P-MG2H2S0(4Yq0EEI&a~9iQzz_D#dpqIDpUX8(Qrbb9FSjpuykXCG$taiPL@; zY`$o;+SW37`s^7-|9ET2N@dl>v~_nn?6s3yU`Bq56VEYch0?WWpuBzHxN`q?XYeXM zLR;$AOh4a>Wj8zY&|F4%ySCrhx_I{{64gb2s;6QyX!KK(zP*ierqcL)vG`KGMAp^Y zGZk~bwRfVpv|)aJeN1y5B6K+S?^x%}j?%WA;EL+#0=l|;;B`aMzDzi=byh? ztgd%Ve)sptgXL~&rJ4S>+_+ETE1t|<@ak{78lP(X%%{A!T_xJ-Ch>hoMjQ-Y8;mvj z_~z~g?2uJXR>Av=b>p^&n!MkKzY1BjGS@9F@kF1Y_092bEe|axzq72W19NnN7%VVn pY3@;LleIXEGg(U4&;E0)FyW1_l#@%Jfavo86Be`{Jhx`6_74V>fQ$eD literal 0 HcmV?d00001 diff --git a/static/ico8.png b/static/ico8.png new file mode 100644 index 0000000000000000000000000000000000000000..ee91af48ed62bdb56fc23fc117bc7c06ebadebbf GIT binary patch literal 2629 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 RC-&@*9gD%CSNm*A`wQ`}KbHUi literal 0 HcmV?d00001 diff --git a/static/ico9.png b/static/ico9.png new file mode 100644 index 0000000000000000000000000000000000000000..233318c1a8ba282b468910efcb08d996e14f2505 GIT binary patch literal 2346 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 literal 0 HcmV?d00001 diff --git a/static/icon15.png b/static/icon15.png new file mode 100644 index 0000000000000000000000000000000000000000..736f670e94231936dc5602fb6c6a76930a598167 GIT binary patch literal 1715 zcmV;k22A;hP)8r5?kYV&OaZXSI=>?+c) z|8O34^FD|bSo!5s2T^UoEd?R$9@>j9vd?`5R;|-rzI>i}=fcgSnYr&AIEz1;4{+5Q zZ1ew{=m7!j)?wsyouxk9Fk0406R@_Wi0tT@23qSG=CptaTSVbYLc90!p#!%BJ!i?~ zKj*16Xt0Po@(ckj{_95HuyU{*x4_|BxP_>)MMT$Z^ULNt1%|f?HNJJom~+ZID!AiV zfNMnCqQ(%;ngqIu;molu_bY(?1z0@lI(TJAF?R(d7!p?2iS&jDFVE0eXz|;cfBcT! z_uz8~w1ITdX3MPTG6C+aSZ6LNW%sQ6GdYqgE6}n&H!JA9 z2?Wo+r9SZtv#WDiIp186sG$*-k^CUljJ`ymCTg$4tFoh^ve|R)yJk-s(dK@(JyN^o za|vYeupH$OX21#$#tp?f-ArugZ+PWk14Mg zppXJ$f9C9JBfSj@qNJJ=;s1L1;5Ez%H5$f!$tq;`R3Qa;Gq$5^F%5I}r64js?aWhn zftV84!`e&&GIIqcV{$5zDrgFMA#T)6{0XM)x=y3b zp{hM2Jv_dyf(W&KAKwI&PmDqekP+VN`pdETF7z_*U`~+ysLCtOY029t2-aZa4!N)l zQK}+~8(k+`Asdv%+~--gL%*Ll=It#hzrZ~a&KD5JIiXw>RltodR)3>!;F_=i7tQFJ zj4?B5M9KmRDS$>JJsLcQYXTYGP8nHgMzNF=Ddm1U2o1r0ObY1?fnVrYo?c zYo9DI*tnV=zBk(zQb61orwpCwJ};>%3#lJeid?3>p0ya)0y<6kcd~B0up9MgluD|u zx(YJ0Pwl~ern+x+|blKhuX(U^=gC>jB}tqlfmZ^HMn?uneaY2#?{}XNt!v8 z_~0xaaS9zTrO&AGfGy|q#Pc;dQDOUiOsdl633$TE*^*RjSsF(6g%AOW@csx5Q1>Rr zp3=nD3Y!I!w&Fb!TSn|~7U|4Nr9`}Hnh;1stIBpBZ+azaQO>XwRC&46i5GX$^;D&! zw0F#X9_6=Xibl~oAE9n!1^4qH7MQtG;ewI^CWomL1x_HGMOoT1>2k|Hv&@6I45U9d z%BRBGBF;L~NYj&&UJru_ny7^0dNZD(bF7vMP(AyhBR0;L9T-2J6+xLo2Z^X{NEFBj z9&BiHU&w!L3f+h;f8*dj7#eD|&?!R+Mp$*u)=^VCpwXp<#W8{TnXF2eZF^6uylE>x zb`T$~1m?aB;KCGeW4CGqpGojdq1yObu4|+Izh$esJSE~ynf=^X;4z2l8DVHIu zL>vcvLY4hAyR*GuiKj!n1?ls-74$`L`0}f5?Xz{kzJa@r{{bb{F)AEKzh3|V002ov JPDHLkV1hmmC-wjU literal 0 HcmV?d00001 diff --git a/static/jj.png b/static/jj.png new file mode 100644 index 0000000000000000000000000000000000000000..7b93efd36193c625d2094e0a960b1273023d64c3 GIT binary patch literal 7074 zcmV;T8(rjyP)7&4Tum3+D<$9-XKI*;4bSXsear5l&m$X7ydV>7d-d?LFg9joI zJL)RmPei*id5KTFt zmU^F-dLQ+ViMNsPXRtJF^*$FA($8Bzp0sI+v6KXXm7pNp7Lp#tErce6xKKaaVZZxv z>&G8UJwflk`)-43jg24>_Y~wux~pL zb)=+=K#0rQdgG@>#{^f(qV({Fy8O)-wQ;rJ4O~s=QN=2t8P^)OAt*A`FzA$NO>s*9aWta zY4~t(@IaZ7U3GJ3c(1q=6n_8h>FEVk5S1fH0x>%3pdQ!ntbM;KDJ9&{AgDcetqR8~ zAsuf1aPkvX2$dnoO&~@btkHbx?x=M9`Oy7{%f1{uu1buuaDw0<4Z7VU<&&S9yH=hU zNqE0^u&Ts`;ImJ%GG=wrurZ3#Rd)3~i*q}3C&>G~yE(GB(DS~$<0PCp2*3s4vC*RX8 zGQ*A6U`+-xygv_@Q#wJ668e_r{KZxg?uBMt&a<-Jb3i46SuetO>Sj|_L(d!QYjqh5XVw5NyJ;F&K^;TD9wWK2bc7me^Ke{=Gn;$x`j7<*gJS`(_!`V#pcP$ z5tV>a2=dFp!LbcSRhF{5$UNSHgXGVjx5H3;74>wOt}>}Js(2rX%CJ5;M^Yqm-@(k|;dB6WenLqi6_~6Q&MHSX;BT-qMWxCIU+UmPr zgnjXGQB~Pr_V;%biIt`VH%{l@o}4@;kMK&65pwi<_see9iNn-$9;nZ-lRyY1;mbCO zpdEFU^?JY6*VcX)jmH1REdnf#di=|=ZZa8eD9ba}xdy_h|5Rl*cr)*|Lo_Xkdc(we zeo5kuAdXv^D>*_oH_kX}b`bT5EaVWH2)9QcjJ*OFv+k!a$t&r(TLp;_% z-J!PDc(!V70ZC>2GL%qlg>j)#bC#er7ePj&U`k(nTH zEjAuNnnoT0fd^)gGa@0{H?1vz%lOK2;Jbq)h)YD!=2sinT+ zf+!$0ZsnF79KFzwG~Q#|EZ-3cb0ONTOFk*{xei z2fG^^xT^FY8WDK_RxgqXSf^Q$DHbGrsh=dhSr6_TF)D0796Y33OhkRHai3LJmHyAF zhQ`6csU$6!O|c@W1cCLiC(>773c$OfEDPJ#6mf9Ok=&uT?d2_i{8)lZN| zCIYrxShIkJP}29lg0)N10nk9Z`j6-gw>`-6iG8++8&*S!ohF~M%L3>CJj zNQ)WJ4VU*MLk+b-YhE=p4Oy&6kbI}mO*xV-eH6*cRAH+M#9IB&-CzIV=orv6KI}hv zC+c)nGhJVKV5_rv)zCDIT9M#s(sRZL;#>E?>tThuelvMI(?WETmBS?>eZN3r83m+%5EETrukkJ@#+Jz;t!MV^) z)~IoeSmvyX=`3pKBxur^*Zb5Rvm#>zu~$3#J*gndQel??iWp{@h3$r;Bh){li$qE$ z2-fmwx6^o+)griRs22fE4)nPZVmtoO2tg2>+SJy^v^}2WN4imW)m#fsCQi<@E8n&* zpl8>O=cEv=Uk;wU){EPjM42su&T3eSCm#W;X=+XkR!0aTB-WV_2d7jJt8P6ooluqK ze-*X*%Sq3}7;g9C&>14T7(PDiiUco@V4WkYt3lJY`I~J&1wHFAf_v`0qXZ$T*Kr7W zP6e^b)`Jm{F2f6v>=q;ksgWxIP;L(-y*0lggE-ncJ^6a`L|JQ-O^Ev1OUeKfJDi)p zc|=7a2kbGV;PpHaB7(T?rRV~rn-F^p!jMnAOxRrl;5}&!Y@C5!40qL?lR@OFk3@eX z2j=hPZqba!x*1qDyUPVIv>*f0rp1GM@tp}(5ozBGaR~>G!tDBhZAxsMffa!KldGvC zSpzJBvbLPUN)f!ya>7k4a!Dx}NL~oZZHd(H8&5(GLG*qr!zUGi&rGP|;49Al0%9O8 zVG&FPp?s%VP>%E#%Qj%0BWoe($jw3;ch)YVWeQnOc$9&-^WSGfNW`AQashB+5dB5^ zBK$}Nz&k#9%!I0pxRw#!FXc697u4Y$sR%p~E&I3;y!gc0ECgz^U5rM0GC?K*xLV4mrX?E_g!g#kpH#d-RvKZ* zLngEcAk)B=Y$g_Q}d z5Nl#gVlxnuh20Ex>(U=7U{2KWp9pxf9u+&tODX`)gruKLXx^~9O-Q4B>Ju+_RT?_= zdqiu9?ZsjC!n1&8q2%^mb#v##Uk@Hojqa-7LA+-4K4;0t3t}2FLKTx7sb3Q_Lbw@a z?V=2%$gmvsULOV4I+!3^#~>!4`rPjqia%78qkY#BxffeVa}>=;pO{8+o3h$9#KKw= zNBaQWm_r@$3wQb>)&Na(!8I6)dF%s=TB3OY zafVY!BkTXOjIy{g@r21@nplb&hNg5LbJcKL9CMg}6+i9!OlzmuIyq_E%*NFx;;UAKt6}Lns1MWnK@HN~a-w{nHn(j_4dV@hTs0Y`Q z-GtoP`r-6vC5FA^NFdM_gy*My?!A>-{JKx!;2G)VrLC;*qqhj5shWrqBrof525VB8KCludn#P!^b zO9F`HRQ%Dyl~-@PwbPfrJ$)7Z9ZL0l(zQtTCP`L^S-6g#;Pfg($pS7+ZukG$g(_Y^ zgW|2|m6Ri!fh{)4f)>Q4%9uk+3kDCLQL#l_IC2*a$>d$LBMrn{xu(iWV>(76tZG_s zq>tvhb0=!^inN|VH1}(}t>h3IvxS-;hx;2Z!$>(Q*8E;*fXkH-2mxN+j zP=oGp*L?^ww<6D>BWFhk->8|$Fk1Q^Jqu0uX~;u!LhmQNr4}1Q+~f<67rCE}cF=*i zJ(b=zNVz5o4sCDg`k&U%F*K*o!LsBaR$Xw1X{m4O*T#V0z@CfQ5d^_+%6>o*ZsO&% z1qoy(X?Fr_pTjjR7*VZ5UD5I8-jS5kScRyo%c_~CsAfegxA!7V&W;phJ%W5Y-d?G9 zWzcigKM{+Pwzu@9BJA(c5MpeNdh+V-EIJZSEZ+#j78O7w^DCmMx|+5i^@1@-^y0;d zRv2z&)NSs?6^wv$D05S@!G$%gfusekqdG<{v0uYjPCc?Ac5>}3S$Bfa*4fEQQ&;Nj!&>Z$BCD8uFUR+Q(1i| zA!ZGi9%R~z)qcmcSzm}D;(@C>X|U|ogtnTjmF$zRX-2rO6WD;J=t;GWGZ>6d6@ehZ zSEGOm339-XR9#5pz;K9Pu6hgY(^3?|PNM;EmIUyrJj0x{rNJ~o zqjBg7M=I@o|JQ@3Za+xY>;en2?QM_}b3Im}AJ->Aq5>6pLcDngRsnSlJQlYGF5+>J zyQY;%pvVC!+`MMTUCyY4rejCNoLX_!?E+6;V?nk{+C{`-&awCQ-hmaiCY6%2!1iZi z8!sw|_%Z>>)kW?5F_xQ5QOa6_EEpj{y>T@rh1=#|+%)cFk_Ct?8@CIXT^vjo)}mkn zXJnLx2x4PAPIJis9OXfqZ1&x_3QJ&@Z!cD{$(E?_O&Rs~ud+{Ic&;1VscCsu@_;EU`1W%E`NaWz7r9Jv~uI!M~z zDUIW?xixj(=g8(qx~r>Ww2vM4dG0_JR}4#-@6pN9E;w(5VW=<8f)(|MXsRX?2veBJ zdt&3TRotwV#95kmTsX})6K8C(F5!>^*@Y#6s#m^@yC_&J*E-qO0c+XdnzFVF&KvgF z7pYsV>j`;C4op;!RA^g zQ-O^v8+O;K@ZL50*ayX$wjwU546m*tH(fg^7=zT->zC?EBX?C+9B?PtVt$xwD#O=zi~h);Pn3)kfkbfAjR@ zA$mWws5QR*=cF{)j&ee^H>plj#W*7sW=)a^J@f>dwunEevPIxr`Sg#1lWJ@{6Uy{S zer`HwPx_=RL;2S*aYmK})Du67iLGp7cKm%YzoX18 z<>v-ZBRAOPnk{MVad(P!dSP*rInDzno0hYinJ3=3l~kit7A<^%=)$guufSrivfysp zQdIUIh`P2O&g#gBAWEK1H^+HlUMtI%SAg3yyMn)sNZ|Is*@JY2ns${Jt>P94UKW= zg}vytB7)@2KqkQ*@;YsVQ}j1Z194IjZ4#22cc5=@wY8#?27JKhu;R2#Xry5XZ^SnW z4nyPD64J=i*@wKky`x#jK&CbCOlucdcK9AvY%?K2Vnk?*b(Dp6&c!Yjgq~EBZ`+D^ z@94DU4OMR5DI4BLog4Sk?RQ7&P9p?y3s^K6>jgSI~CAkS(!j__iLCGNCboxEY9-Ew7x>30bofw}BWv z8*n8ftL2uXd8ZU$hKb!q#MhQ_G$9ijBZxWRm$>a?K)frb=gCf(SavF)*>H!~#pGy9 zTs4%j|KBugl)UUghFVz4xvU@!R!&EDGU#?Q?}x&Rt(7hV+1&=9x!V#~2zLKJTqr)8 zn9K;&ZQSk+dWm9UB0=&_@}kur9Vz9}ec*YarF7HQ(Wr01kPP=*yTt_B~bi9J<(uH#)**fl+5 zMp^h;y~n|BhHYCWFTM0^MF1OovRc~hy`x)9L_erSy)it>!UNo3SJmDoy8DR)DZ`5J zc!qHBkn28DZYa?!yFPNmfDu;iAR6+7eh}>1*n>AzoPg`o^UnoE*fcca~kOAeof$5~WZK^cKO+$>t+5l=oPZd7J5-<%Mss{j^j zXjiq#Ck=KoqU{OwO%8X$0gnmKD70lBAmcU{tGbBSD;)=-F2lPva77AylXQ}3>kt!= z@)jeWTNY+jVRKCwvTCUMx06Q=%>o;^+J+$vnDhM}RRpg!#(+LEo}!G&h*pJV^5s-v zGrJfI_%RH1DVAvvU)ZW7Y`(RR>&3?{m*)Dr9$-@LioY``+-TM0s3`MQ(xs z_5^~FXw)gAoftUwziLC-l66eZ#yD&%q$=&YJa6n&qR>LA`3lf?EGZTbA1lj@3mKwA8w>;oTACb5m zHdI%gC}zXur=|(q)UwKnHC#B71aEy(q=%*uLE;}q)uQhw4RP^_B%&x>r~~n)D$PW8 zcL*Y9l_K1U${@-nGvXV)#+fK_&%B%{Ob~!aHwfN6$-BUlhD3|PItrmK`VuTzsW-LkYMi9X6utakv$?*O6?*$^* zMW3Zh7K4tNV9>@K(IAk&Nm=V)e>UvY6hDy&EHV4MHVB$QUADqdd}YQ%ZkTC;BmFUg z7jB6QN#Vu3+aq0aV6%g7PhRB`!zRHiK>(K|>gVG{#RWKMRBLRgtNVe_TgJD@BS44{ z16w4u>veIlsD1jhYYTa_sBdxr-U$M@N@&^!fb)h{Ee9kBMve2nv^AwEtgZcAh4nb^_x6;kZRflBb1N=NAqe0Eu2i;8auZ>74*tbc zK$?Wo2m-hyfo9RTv$oPJ?&pDc4Tnc{l_#`g`kEgLk#qb%&jdT3l>fg3pT6pw?b^=cT1Go`ub0+s+}Yf1JjcPwt}t3 zxQogV#Nz7U;K4we-LGj_m0hJ6Wf_QJQ8|KGC@J{?g(@XB7R8`ajX`;l)<{%EVpvp` zAQq^~2933+RcQ>$i_}JQl22WTTH}pGJYrN_ z&a;uID3*pGE_8#;+9Ty|cEo@Jb~ zwv+^M!Hq#dLtU+MN0DQ!(~E&|n!E+Q?&)y5$?$NR)v;@Eu$R3MgXXZSOtvO8A$73d z3bxc(WFwI;EImQuK--~i3gXQQTU2l#zG-kf%dm~ts!d~DIfBH&F~J{yv_zxv74PUM zM3Z-xmJ%&`Ej%Z!9Z{Gq&1_ehauprkjXDsWu;2aI_~MJ}Rqt>4f2|*z|7O86X8-^I M07*qoM6N<$g6*GM{Qv*} literal 0 HcmV?d00001 diff --git a/static/notice_icon.png b/static/notice_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e9d52841ee488fad92ce022645397e0cab4afd53 GIT binary patch literal 3695 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 literal 0 HcmV?d00001 diff --git a/static/right.png b/static/right.png new file mode 100644 index 0000000000000000000000000000000000000000..d8669b442f30dd0b9aeab94f51402abc53608fb6 GIT binary patch literal 872 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 literal 0 HcmV?d00001 diff --git a/static/t1.png b/static/t1.png new file mode 100644 index 0000000000000000000000000000000000000000..d2f328d9763a6c52b4a8c1c623bd467c0dde3c6c GIT binary patch literal 2416 zcmbVO3se(V8cy2-Du@(ud1)~ndDvx>$%GKdNMJDm6D5&ifN)S`l1xG%$%M=R0V;|` z3U+-Um8aWoSH%!1iWNbr6gUA&Ti2=xQL((bvTQ|BcXbup?u6H|d)!y&oICfW4PwJA2Fzqq=N^ERW>6^MSbo%; zEb@yBq!NT42Epv?Y--LRf2jO4K)4x3G5(xDl3MIuSYK>CNSRx3z7l}t`Bg3{PQ!3tV%FiSy`L1c!pLLgMmW+Jj6R?z%?J|@q!Wx@P? z#s7JKvq4Q(A)@)kJhs}jr4KAn<78lS=Bj54nlZQ1sHrm<10!-?o zi~Lw|utMM=EOLH!Hw3b%H_S8=x zlczo%*LPRpO20eKtLvMSq5D)BE#a0wwVw=WGC!yG zAG`0UaY+(rCWMu5o||6&JJVl(a%$)q-}id!GBCv$f6jGNqeEWa5pnj}k*LsJy@^lX z9NaySmYJsWjBAL?2jf$uSJyp|0@E2+r}v6A?aam<= zH*|NyU#xOcjb=s*bKQ0A0UOq2xrME;cit}dhV6?b1xt+1*UIuea794EmtM~9Mac(m z`Ymk^KUOrh?QZuEH;ivg3?-H2FHJ7Lfr~Xzt>1aqfs}-Bfy+9EGdcpqk69(njss@v z_kEU+S2kwIqU=8WW><4V!M@IE_m-viP4!>bvf>LOOTOB9;$Z|7Xr;gN_0Vg-y}LL$ z`X_k%DpPM~cl-(V%F`6NrQEyo!XatXo*S3T&6nT!ThUI7d9d{G?Y-|G8Z1$rxlj|6 zmPTv7+`XZ0YFFi@wpV=0<#xJF4`CP2;+TPgQsGD2ItS~=sv~^t4wx)oI5ME#Y0CtS z(Oj6A*fIUCz#+f8th276=TzeDo6#S}Eq^L002ftxAlT82hI^h-VUN$cAzSRSo;zDi z3V?G?_0V!?R#oam(6J4^z!)d7QDZnw({@06RD z4Viy`Jl}7B&d#G9z0#6LX?>ZuKB?_D|^egw@GnSiLF?8$ziy`)2c@q1xU6j(GS~8@vdz4Oi z_{9#rdMoYhgwuHhj5#kDmsa-H)Fee6{t8&_zrIV5vCg~TTGs>m{yg`4u5Bi7V%R%l zv7hN5jcy~Bied5LO^?smOs|=GT=tC7zHuK^BdNu?EWY2y{(i0 literal 0 HcmV?d00001 diff --git a/static/t2.png b/static/t2.png new file mode 100644 index 0000000000000000000000000000000000000000..2948144699b5315efab6c449e957268897f10f78 GIT binary patch literal 2075 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 JPDHLkV1gSB*S-J% literal 0 HcmV?d00001 diff --git a/static/tiwen.png b/static/tiwen.png new file mode 100644 index 0000000000000000000000000000000000000000..6f332d1dcdc80bfe33249fb5a025ef8065d5a0af GIT binary patch literal 6572 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 this.$tn.vuex('user.name', '图鸟小菜') + // 修改vuexde state中的version变量为1.0.1 => this.$tn.vuex('version', 1.0.1) + this.$tn.vuex = (name, value) => { + this.$store.commit('$tStore', { + name, value + }) + } + }, + computed: { + // 将vuex的state中的变量结构到全局混入mixin中 + ...mapState($tStoreKey) + } +} \ No newline at end of file diff --git a/store/index.js b/store/index.js new file mode 100644 index 0000000..6254237 --- /dev/null +++ b/store/index.js @@ -0,0 +1,83 @@ +import Vue from 'vue' +import Vuex from 'vuex' + +Vue.use(Vuex) + +let lifeData = {} + +// 尝试获取本地是否存在lifeData变量,第一次启动时不存在 +try { + lifeData = uni.getStorageSync('lifeData') +} catch (e) { + +} + +// 标记需要永久存储的变量,在每次启动时取出,在state中的变量名 +let saveStateKeys = ['vuex_user'] + +// 保存变量到本地存储 +const saveLifeData = function(key, value) { + // 判断变量是否在存储数组中 + if (saveStateKeys.indexOf(key) != -1) { + // 获取本地存储的lifeData对象,将变量添加到对象中 + let tmpLifeData = uni.getStorageSync('lifeData') + // 第一次启动时不存在,则放一个空对象 + tmpLifeData = tmpLifeData ? tmpLifeData : {}, + tmpLifeData[key] = value + // 将变量再次放回本地存储中 + uni.setStorageSync('lifeData', tmpLifeData) + } +} + +const store = new Vuex.Store({ + state: { + // 如果上面从本地获取的lifeData对象下有对应的属性,就赋值给state中对应的变量 + // 加上vuex_前缀,是防止变量名冲突,也让人一目了然 + vuex_user: lifeData.vuex_user ? lifeData.vuex_user : { + name: '灵睿' + }, + + // 如果vuex_version无需保存到本地永久存储,无需lifeData.vuex_version方式 + // app版本 + vuex_version: "1.0.49", + // 是否使用自定义导航栏 + vuex_custom_nav_bar: true, + // 状态栏高度 + vuex_status_bar_height: 0, + // 自定义导航栏的高度 + vuex_custom_bar_height: 0, + Gid: 1, + Gname: '洛阳市青年企业家协会', + msgCount: 0, + // imgUrl: "http://192.168.3.130", + // apiUrl: "http://192.168.3.130/api" + imgUrl: "https://ysx.hschool.com.cn", + apiUrl: "https://ysx.hschool.com.cn/api" + }, + mutations: { + $tStore(state, payload) { + // 判断是否多层调用,state中为对象存在的情况,例如user.info.score = 1 + let nameArr = payload.name.split('.') + let saveKey = '' + let len = nameArr.length + if (len >= 2) { + let obj = state[nameArr[0]] + for (let i = 1; i < len - 1; i++) { + obj = obj[nameArr[i]] + } + obj[nameArr[len - 1]] = payload.value + saveKey = nameArr[0] + } else { + // 单层级变量 + state[payload.name] = payload.value + saveKey = payload.name + } + + // 保存变量到本地中 + saveLifeData(saveKey, state[saveKey]) + } + }, + actions: {} +}) + +export default store \ No newline at end of file diff --git a/template.h5.html b/template.h5.html new file mode 100644 index 0000000..96ba3f8 --- /dev/null +++ b/template.h5.html @@ -0,0 +1,30 @@ + + + + + + + <%= htmlWebpackPlugin.options.title %> + + + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/tuniao-ui/README.md b/tuniao-ui/README.md new file mode 100644 index 0000000..ccb9fcb --- /dev/null +++ b/tuniao-ui/README.md @@ -0,0 +1,4 @@ +TuniaoUi for uniApp v1.0.0 | by 图鸟 2021-09-01 +仅供开发,如作它用所承受的法律责任一概与作者无关 + +*使用TuniaoUi开发扩展与插件时,请注明基于tuniao字眼 \ No newline at end of file diff --git a/tuniao-ui/components/tn-action-sheet/tn-action-sheet.vue b/tuniao-ui/components/tn-action-sheet/tn-action-sheet.vue new file mode 100644 index 0000000..85ffe40 --- /dev/null +++ b/tuniao-ui/components/tn-action-sheet/tn-action-sheet.vue @@ -0,0 +1,206 @@ + + + + + diff --git a/tuniao-ui/components/tn-avatar-group/tn-avatar-group.vue b/tuniao-ui/components/tn-avatar-group/tn-avatar-group.vue new file mode 100644 index 0000000..3b7bb21 --- /dev/null +++ b/tuniao-ui/components/tn-avatar-group/tn-avatar-group.vue @@ -0,0 +1,95 @@ + + + + + \ No newline at end of file diff --git a/tuniao-ui/components/tn-avatar/tn-avatar.vue b/tuniao-ui/components/tn-avatar/tn-avatar.vue new file mode 100644 index 0000000..96e7100 --- /dev/null +++ b/tuniao-ui/components/tn-avatar/tn-avatar.vue @@ -0,0 +1,298 @@ + + + + + diff --git a/tuniao-ui/components/tn-badge/tn-badge.vue b/tuniao-ui/components/tn-badge/tn-badge.vue new file mode 100644 index 0000000..d92f5f6 --- /dev/null +++ b/tuniao-ui/components/tn-badge/tn-badge.vue @@ -0,0 +1,173 @@ + + + + + diff --git a/tuniao-ui/components/tn-button/tn-button.vue b/tuniao-ui/components/tn-button/tn-button.vue new file mode 100644 index 0000000..793f343 --- /dev/null +++ b/tuniao-ui/components/tn-button/tn-button.vue @@ -0,0 +1,348 @@ + + + + + \ No newline at end of file diff --git a/tuniao-ui/components/tn-calendar/tn-calendar.vue b/tuniao-ui/components/tn-calendar/tn-calendar.vue new file mode 100644 index 0000000..289b67b --- /dev/null +++ b/tuniao-ui/components/tn-calendar/tn-calendar.vue @@ -0,0 +1,707 @@ + + + + + diff --git a/tuniao-ui/components/tn-car-keyboard/tn-car-keyboard.vue b/tuniao-ui/components/tn-car-keyboard/tn-car-keyboard.vue new file mode 100644 index 0000000..2e4c6cc --- /dev/null +++ b/tuniao-ui/components/tn-car-keyboard/tn-car-keyboard.vue @@ -0,0 +1,320 @@ + + + + + diff --git a/tuniao-ui/components/tn-cascade-selection/tn-cascade-selection.vue b/tuniao-ui/components/tn-cascade-selection/tn-cascade-selection.vue new file mode 100644 index 0000000..02ac406 --- /dev/null +++ b/tuniao-ui/components/tn-cascade-selection/tn-cascade-selection.vue @@ -0,0 +1,654 @@ + + + + + diff --git a/tuniao-ui/components/tn-checkbox-group/tn-checkbox-group.vue b/tuniao-ui/components/tn-checkbox-group/tn-checkbox-group.vue new file mode 100644 index 0000000..5472ad5 --- /dev/null +++ b/tuniao-ui/components/tn-checkbox-group/tn-checkbox-group.vue @@ -0,0 +1,134 @@ + + + + + diff --git a/tuniao-ui/components/tn-checkbox/tn-checkbox.vue b/tuniao-ui/components/tn-checkbox/tn-checkbox.vue new file mode 100644 index 0000000..0ad3a3f --- /dev/null +++ b/tuniao-ui/components/tn-checkbox/tn-checkbox.vue @@ -0,0 +1,328 @@ + + + + + diff --git a/tuniao-ui/components/tn-circle-progress/tn-circle-progress.vue b/tuniao-ui/components/tn-circle-progress/tn-circle-progress.vue new file mode 100644 index 0000000..31c1a38 --- /dev/null +++ b/tuniao-ui/components/tn-circle-progress/tn-circle-progress.vue @@ -0,0 +1,223 @@ + + + + + diff --git a/tuniao-ui/components/tn-collapse-item/tn-collapse-item.vue b/tuniao-ui/components/tn-collapse-item/tn-collapse-item.vue new file mode 100644 index 0000000..998879f --- /dev/null +++ b/tuniao-ui/components/tn-collapse-item/tn-collapse-item.vue @@ -0,0 +1,236 @@ + + + + + diff --git a/tuniao-ui/components/tn-collapse/tn-collapse.vue b/tuniao-ui/components/tn-collapse/tn-collapse.vue new file mode 100644 index 0000000..00ec9a2 --- /dev/null +++ b/tuniao-ui/components/tn-collapse/tn-collapse.vue @@ -0,0 +1,98 @@ + + + + + diff --git a/tuniao-ui/components/tn-color-icon/tn-color-icon.vue b/tuniao-ui/components/tn-color-icon/tn-color-icon.vue new file mode 100644 index 0000000..c7ad83b --- /dev/null +++ b/tuniao-ui/components/tn-color-icon/tn-color-icon.vue @@ -0,0 +1,318 @@ + + + + + diff --git a/tuniao-ui/components/tn-column-notice/tn-column-notice.vue b/tuniao-ui/components/tn-column-notice/tn-column-notice.vue new file mode 100644 index 0000000..f56775c --- /dev/null +++ b/tuniao-ui/components/tn-column-notice/tn-column-notice.vue @@ -0,0 +1,241 @@ + + + + + \ No newline at end of file diff --git a/tuniao-ui/components/tn-count-down/tn-count-down.vue b/tuniao-ui/components/tn-count-down/tn-count-down.vue new file mode 100644 index 0000000..cd31e69 --- /dev/null +++ b/tuniao-ui/components/tn-count-down/tn-count-down.vue @@ -0,0 +1,314 @@ + + + + + diff --git a/tuniao-ui/components/tn-count-scroll/tn-count-scroll.vue b/tuniao-ui/components/tn-count-scroll/tn-count-scroll.vue new file mode 100644 index 0000000..b9c2eef --- /dev/null +++ b/tuniao-ui/components/tn-count-scroll/tn-count-scroll.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/tuniao-ui/components/tn-count-to/tn-count-to.vue b/tuniao-ui/components/tn-count-to/tn-count-to.vue new file mode 100644 index 0000000..c3d8854 --- /dev/null +++ b/tuniao-ui/components/tn-count-to/tn-count-to.vue @@ -0,0 +1,231 @@ + + + + + diff --git a/tuniao-ui/components/tn-cropper/index.wxs b/tuniao-ui/components/tn-cropper/index.wxs new file mode 100644 index 0000000..0181a93 --- /dev/null +++ b/tuniao-ui/components/tn-cropper/index.wxs @@ -0,0 +1,332 @@ +var cropper = { + // 画布x轴起点 + cutX: 0, + // 画布y轴起点 + cutY: 0, + // 触摸点信息(手指与图片中心点的相对位置) + touchRelactive: [{ + x: 0, + y: 0 + }], + // 双指触摸时斜边的长度 + hypotenuseLength:0, + // 是否结束触摸 + touchEndFlag: false, + // 画布宽高 + canvasWidth: 0, + canvasHeight: 0, + // 图片宽高 + imgWidth: 0, + imgHeight: 0, + // 图片缩放比例 + scale: 1, + // 图片旋转角度 + angle: 0, + // 图片上边距 + imgTop: 0, + // 图片左边距 + imgLeft: 0, + // 窗口宽高 + windowWidth: 0, + windowHeight: 0, + init: true +} + +function bool(str) { + return str === 'true' || str === true +} + +function propChange(prop, oldProp, ownerInstance, instance) { + if (prop && prop !== 'null') { + var params = prop.split(',') + var type = +params[0] + var dataset = instance.getDataset() + if (cropper.init || type == 4) { + cropper.canvasWidth = +dataset.width + cropper.canvasHeight = +dataset.height + cropper.imgTop = +dataset.windowheight / 2 + cropper.imgLeft = +dataset.windowwidth / 2 + cropper.imgWidth = +dataset.imgwidth + cropper.imgHeight = +dataset.imgheight + cropper.windowHeight = +dataset.windowheight + cropper.windowWidth = +dataset.windowwidth + cropper.init = false + } else if (type == 2 || type == 3) { + cropper.imgWidth = +dataset.imgwidth + cropper.imgHeight = +dataset.imgheight + } + cropper.angle = +dataset.angle + if (type == 3) { + imgTransform(ownerInstance) + } + switch(type) { + case 1: + setCutCenter(ownerInstance) + // // 设置裁剪框大小 + computeCutSize(ownerInstance) + // // 检查裁剪框是否在范围内 + cutDetectionPosition(ownerInstance) + break + case 2: + setCutCenter(ownerInstance) + break + case 3: + imgMarginDetectionScale(ownerInstance) + break + case 4: + imageReset(ownerInstance) + break + case 5: + setCutCenter(ownerInstance) + break + default: + break + } + } +} + +function touchStart(event, ownerInstance) { + var touch = event.touches || event.changedTouches + cropper.touchEndFlag = false + if (touch.length === 1) { + cropper.touchRelactive[0] = { + x: touch[0].pageX - cropper.imgLeft, + y: touch[0].pageY - cropper.imgTop + } + } else { + var width = Math.abs(touch[0].pageX - touch[1].pageX) + var height = Math.abs(touch[0].pageY - touch[1].pageY) + cropper.touchRelactive = [{ + x: touch[0].pageX - cropper.imgLeft, + y: touch[0].pageY - cropper.imgTop + },{ + x: touch[1].pageX - cropper.imgLeft, + y: touch[1].pageY - cropper.imgTop + }] + cropper.hypotenuseLength = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2)) + } +} + +function touchMove(event, ownerInstance) { + var touch = event.touches || event.changedTouches + if (cropper.touchEndFlag) return + moveDuring(ownerInstance) + if (event.touches.length === 1) { + var left = touch[0].pageX - cropper.touchRelactive[0].x, + top = touch[0].pageY - cropper.touchRelactive[0].y; + cropper.imgLeft = left + cropper.imgTop = top + imgTransform(ownerInstance) + imgMarginDetectionPosition(ownerInstance) + } else { + var dataset = event.instance.getDataset() + var minScale = +dataset.minscale + var maxScale = +dataset.maxscale + var width = Math.abs(touch[0].pageX - touch[1].pageX), + height = Math.abs(touch[0].pageY - touch[1].pageY), + hypotenuse = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2)), + scale = cropper.scale * (hypotenuse / cropper.hypotenuseLength), + current_deg = 0; + scale = scale <= minScale ? minScale : scale + scale = scale >= maxScale ? maxScale : scale + cropper.scale = scale + imgMarginDetectionScale(ownerInstance, true) + var touchRelative = [{ + x: touch[0].pageX - cropper.imgLeft, + y: touch[0].pageY - cropper.imgTop + }, { + x: touch[1].pageX - cropper.imgLeft, + y: touch[1].pageY - cropper.imgTop + }] + cropper.touchRelactive = touchRelative + cropper.hypotenuseLength = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2)) + // 更新视图 + cropper.angle = cropper.angle + current_deg + imgTransform(ownerInstance) + } +} + +function touchEnd(event, ownerInstance) { + cropper.touchEndFlag = true + moveStop(ownerInstance) + updateData(ownerInstance) +} + +function moveDuring(ownerInstance) { + if (!ownerInstance) return + ownerInstance.callMethod('moveDuring') +} + +function moveStop(ownerInstance) { + if (!ownerInstance) return + ownerInstance.callMethod('moveStop') +} + +function setCutCenter(ownerInstance) { + var cutX = (cropper.windowWidth - cropper.canvasWidth) * 0.5 + var cutY = (cropper.windowHeight - cropper.canvasHeight) * 0.5 + + cropper.imgTop = cropper.imgTop - cropper.cutY + cutY + cropper.cutY = cutY + cropper.imgLeft = cropper.imgLeft - cropper.cutX + cutX + cropper.cutX = cutX + cutDetectionPosition(ownerInstance) + imgTransform(ownerInstance) + updateData(ownerInstance) +} + +// 检测剪裁框位置是否在允许的范围内(屏幕内) +function cutDetectionPosition(ownerInstance) { + var windowHeight = cropper.windowHeight, + windowWidth = cropper.windowWidth; + + // 检测上边距是否在范围内 + var cutDetectionPositionTop = function() { + if (cropper.cutY < 0) { + cropper.cutY = 0 + } + if (cropper.cutY > windowHeight - cropper.canvasHeight) { + cropper.cutY = windowHeight - cropper.canvasHeight + } + } + + // 检测左边距是否在范围内 + var cutDetectionPositionLeft = function() { + if (cropper.cutX < 0) { + cropper.cutX = 0 + } + if (cropper.cutX > windowWidth - cropper.canvasWidth) { + cropper.cutX = windowWidth - cropper.canvasWidth + } + } + + // 裁剪框坐标处理(如果只写一个参数则另一个默认为0,都不写默认为居中) + if (cropper.cutX === null && cropper.cutY === null) { + var cutX = (windowWidth - cropper.canvasWidth) * 0.5, + cutY = (windowHeight - cropper.canvasHeight) * 0.5; + cropper.cutX = cutX + cropper.cutY = cutY + } else if (cropper.cutX !== null && cropper.cutX !== null) { + cutDetectionPositionTop() + cutDetectionPositionLeft() + } else if (cropper.cutX !== null && cropper.cutY === null) { + cutDetectionPositionLeft() + cropper.cutY = (windowHeight - cropper.canvasHeight) / 2 + } else if (cropper.cutX === null && cropper.cutY !== null) { + cutDetectionPositionTop() + cropper.cutX = (windowWidth - cropper.canvasWidth) / 2 + } +} + +// 图片边缘检测-缩放 +function imgMarginDetectionScale(ownerInstance, delay) { + var scale = cropper.scale, + imgWidth = cropper.imgWidth, + imgHeight = cropper.imgHeight; + if ((cropper.angle / 90) % 2) { + imgWidth = cropper.imgHeight + imgHeight = cropper.imgWidth + } + if (imgWidth * scale < cropper.canvasWidth) { + scale = cropper.canvasWidth / imgWidth + } + if (imgHeight * scale < cropper.canvasHeight) { + scale = Math.max(scale, cropper.canvasHeight / imgHeight) + } + imgMarginDetectionPosition(ownerInstance, scale, delay) +} + +// 图片边缘检测-位置 +function imgMarginDetectionPosition(ownerInstance, scale, delay) { + var left = cropper.imgLeft, + top = cropper.imgTop, + imgWidth = cropper.imgWidth, + imgHeight = cropper.imgHeight; + scale = scale || cropper.scale + if ((cropper.angle / 90) % 2) { + imgWidth = cropper.imgHeight + imgHeight = cropper.imgWidth + } + + left = cropper.cutX + (imgWidth * scale) / 2 >= left ? left : cropper.cutX + (imgWidth * scale) / 2 + left = cropper.cutX + cropper.canvasWidth - (imgWidth * scale) / 2 <= left ? left : cropper.cutX + cropper.canvasWidth - (imgWidth * scale) / 2 + top = cropper.cutY + (imgHeight * scale) / 2 >= top ? top : cropper.cutY + (imgHeight * scale) / 2 + top = cropper.cutY + cropper.canvasHeight - (imgHeight * scale) / 2 <= top ? top : cropper.cutY + cropper.canvasHeight - (imgHeight * scale) / 2 + + cropper.imgLeft = left + cropper.imgTop = top + cropper.scale = scale + if (!delay || delay === 'null') { + imgTransform(ownerInstance) + } +} + +// 改变截取值大小 +function computeCutSize(ownerInstance) { + if (cropper.canvasWidth > cropper.windowWidth) { + cropper.canvasWidth = cropper.windowWidth + } else if (cropper.canvasWidth + cropper.cutX > cropper.windowWidth) { + cropper.cutX = cropper.windowWidth - cropper.cutX + } + if (cropper.canvasHeight > cropper.windowHeight) { + cropper.canvasHeight = cropper.windowHeight + } else if (cropper.canvasHeight + cropper.cutY > cropper.windowHeight) { + cropper.cutY = cropper.windowHeight - cropper.cutY + } +} + +// 图片动画 +function imgTransform(ownerInstance) { + try { + var image = ownerInstance.selectComponent('.tn-cropper__image') + if (!image) return + var x = cropper.imgLeft - cropper.imgWidth / 2, + y = cropper.imgTop - cropper.imgHeight / 2; + image.setStyle({ + 'transform': 'translate3d('+ x + 'px,' + y + 'px,0) scale(' + cropper.scale +') rotate(' + cropper.angle + 'deg)' + }) + } catch(e) { + + } +} + +// 图片重置 +function imageReset(ownerInstance) { + cropper.scale = 1 + cropper.angle = 0 + imgTransform(ownerInstance) +} + +// 高度变化 +function canvasHeight(ownerInstance) { + if (!ownerInstance) return + computeCutSize(ownerInstance) +} + +// 宽度变化 +function canvasWidth(ownerInstance) { + if (!ownerInstance) return + computeCutSize(ownerInstance) +} + +// 更新数据 +function updateData(ownerInstance) { + if (!ownerInstance) return + ownerInstance.callMethod('change', { + cutX: cropper.cutX, + cutY: cropper.cutY, + imgWidth: cropper.imgWidth, + imgHeight: cropper.imgHeight, + scale: cropper.scale, + angle: cropper.angle, + imgTop: cropper.imgTop, + imgLeft: cropper.imgLeft + }) +} + +module.exports = { + touchStart: touchStart, + touchMove: touchMove, + touchEnd: touchEnd, + propChange: propChange +} \ No newline at end of file diff --git a/tuniao-ui/components/tn-cropper/tn-cropper.vue b/tuniao-ui/components/tn-cropper/tn-cropper.vue new file mode 100644 index 0000000..6d22d6f --- /dev/null +++ b/tuniao-ui/components/tn-cropper/tn-cropper.vue @@ -0,0 +1,574 @@ + + + + + + diff --git a/tuniao-ui/components/tn-custom-swiper-item/index.wxs b/tuniao-ui/components/tn-custom-swiper-item/index.wxs new file mode 100644 index 0000000..a6c12b7 --- /dev/null +++ b/tuniao-ui/components/tn-custom-swiper-item/index.wxs @@ -0,0 +1,288 @@ + +function setTimeout(instance, cb, time) { + if (time > 0) { + var s = getDate().getTime() + var fn = function () { + if (getDate().getTime() - s > time) { + cb && cb() + } else + instance.requestAnimationFrame(fn) + } + fn() + } + else + cb && cb() +} + +// 判断触摸的移动方向 +function decideSwiperDirection(startTouches, currentTouches, vertical) { + // 震动偏移容差 + var toleranceShake = 150 + // 移动容差 + var toleranceTranslate = 10 + + if (!vertical) { + // 水平方向移动 + if (Math.abs(currentTouches.y - startTouches.y) <= toleranceShake) { + // console.log(currentTouches.x, startTouches.x); + if (Math.abs(currentTouches.x - startTouches.x) > toleranceTranslate) { + if (currentTouches.x - startTouches.x > 0) { + return 'right' + } else if (currentTouches.x - startTouches.x < 0) { + return 'left' + } + } + } + } else { + // 垂直方向移动 + if (Math.abs(currentTouches.x - startTouches.x) <= toleranceShake) { + // console.log(currentTouches.x, startTouches.x); + if (Math.abs(currentTouches.y - startTouches.y) > toleranceTranslate) { + if (currentTouches.y - startTouches.y > 0) { + return 'down' + } else if (currentTouches.y - startTouches.y < 0) { + return 'up' + } + } + } + } + return '' +} + +// swiperItem参数数据更新 +var itemDataObserver = function(newVal, oldVal, ownerInstance, instance) { + if (!newVal || newVal === 'undefined') return + var state = ownerInstance.getState() + state.itemData = newVal +} + +// swiperIndex数据更新 +var currentIndexObserver = function(newVal, oldVal, ownerInstance, instance) { + if ((!newVal && newVal != 0) || newVal === 'undefined') return + var state = ownerInstance.getState() + state.currentIndex = newVal +} + +// containerData数据更新 +var containerDataObserver = function(newVal, oldVal, ownerInstance, instance) { + if (!newVal || newVal === 'undefined') return + var state = ownerInstance.getState() + state.containerData = newVal +} + +// 开始触摸 +var touchStart = function(event, ownerInstance) { + console.log('touchStart'); + var instance = event.instance + var dataset = instance.getDataset() + var state = ownerInstance.getState() + var itemData = state.itemData + var containerData = state.containerData + + // 由于当前SwiperIndex初始为0,可能会导致swiperIndex数据没有更新 + if (!state.currentIndex || state.currentIndex === 'undefined') { + state.currentIndex = 0 + } + + if (!containerData || containerData.circular === 'undefined') { + containerData.circular = false + } + state.containerData = containerData + + // 如果当前切换动画还没执行结束,再次触摸会重新加载对应的swiperContainer的信息 + // console.log(containerData.animationFinish); + if (!containerData.animationFinish) { + ownerInstance.callMethod('changeParentSwiperContainerStyleStatus',{ + status: 'reload' + }) + } + + // 判断是否为为当前显示的SwiperItem + if (itemData.index != state.currentIndex) return + + var touches = event.changedTouches[0] + if (!touches) return + + // 标记滑动开始时间 + state.touchStartTime = getDate().getTime() + + // 记录当前滑动开始的x,y坐标 + state.touchRelactive = { + x: touches.pageX, + y: touches.pageY + } + // 记录触摸id,用于处理多指的情况 + state.touchId = touches.identifier + + // 标记开始触摸 + state.touching = true + ownerInstance.callMethod('updateTouchingStatus', { + status: true + }) +} + +// 正在移动 +var touchMove = function(event, ownerInstance) { + console.log('touchMove'); + var instance = event.instance + var dataset = instance.getDataset() + var state = ownerInstance.getState() + var itemData = state.itemData + var containerData = state.containerData + + // 判断是否为为当前显示的SwiperItem + if (itemData.index != state.currentIndex) return + + // 判断是否开始触摸 + if (!state.touching) return + + var touches = event.changedTouches[0] + if (!touches) return + // 判断是否为同一个触摸点 + if (state.touchId != touches.identifier) return + + var currentTouchRelactive = { + x: touches.pageX, + y: touches.pageY + } + + // 计算相对位移比例 + if (containerData.vertical) { + var touchDistance = currentTouchRelactive.y - state.touchRelactive.y + var itemHeight = itemData.itemHeight + var distanceRate = touchDistance / itemHeight + // console.log(currentTouchRelactive.y, touchDistance, itemHeight, distanceRate); + + // 判断是否为衔接轮播,如果不是衔接轮播,如果当前为第一个swiperItem并且向下滑、当前为最后一个swiperItem并且向上滑时不进行操作 + if (!containerData.circular && + ((state.currentIndex === 0 && touchDistance > 0) || (state.currentIndex === containerData.swiperItemLength - 1 && touchDistance < 0)) + ) { + return + } + + // 如果超出了距离则不进行操作 + if((Math.abs(touchDistance) > (itemData.itemTop + itemData.itemHeight))) { + ownerInstance.callMethod('updateParentSwiperContainerStyle', { + value: distanceRate < 0 ? -1 : 1 + }) + return + } + } else { + var touchDistance = currentTouchRelactive.x - state.touchRelactive.x + var itemWidth = itemData.itemWidth + var distanceRate = touchDistance / itemWidth + // console.log(currentTouchRelactive.x, touchDistance, itemWidth, distanceRate); + + // 判断是否为衔接轮播,如果不是衔接轮播,如果当前为第一个swiperItem并且向右滑、当前为最后一个swiperItem并且向左滑时不进行操作 + if (!containerData.circular && + ((state.currentIndex === 0 && touchDistance > 0) || (state.currentIndex === containerData.swiperItemLength - 1 && touchDistance < 0)) + ) { + return + } + + // 如果超出了距离则不进行操作 + if((Math.abs(touchDistance) > (itemData.itemLeft + itemData.itemWidth))) { + ownerInstance.callMethod('updateParentSwiperContainerStyle', { + value: distanceRate < 0 ? -1 : 1 + }) + return + } + } + + ownerInstance.callMethod('updateParentSwiperContainerStyle', { + value: distanceRate + }) +} + +// 移动结束 +var touchEnd = function(event, ownerInstance) { + console.log('touchEnd'); + var instance = event.instance + var dataset = instance.getDataset() + var state = ownerInstance.getState() + var itemData = state.itemData + var containerData = state.containerData + + // 判断是否为为当前显示的SwiperItem + if (itemData.index != state.currentIndex) return + + // 判断是否开始触摸 + if (!state.touching) return + + var touches = event.changedTouches[0] + if (!touches) return + // 判断是否为同一个触摸点 + if (state.touchId != touches.identifier) return + + + var currentTime = getDate().getTime() + var currentTouchRelactive = { + x: touches.pageX, + y: touches.pageY + } + + if (containerData.vertical) { + // 判断触摸移动方向 + var direction = decideSwiperDirection(state.touchRelactive, currentTouchRelactive, true) + // 判断是否为衔接轮播,如果不是衔接轮播,如果当前为第一个swiperItem并且向下滑、当前为最后一个swiperItem并且向上滑时不进行操作 + if (containerData.circular || + !((state.currentIndex === 0 && direction === 'down') || (state.currentIndex === containerData.swiperItemLength - 1 && direction === 'up')) + ) { + // 判断触摸的时间和移动的距离是否超过了当前itemHeight的一半,如果是则执行切换操作 + // console.log(currentTime - state.touchStartTime, Math.abs(currentTouchRelactive.y - state.touchRelactive.y)); + if ((currentTime - state.touchStartTime) > 200 && Math.abs(currentTouchRelactive.y - state.touchRelactive.y) < itemData.itemHeight / 2) { + ownerInstance.callMethod('changeParentSwiperContainerStyleStatus',{ + status: 'reset' + }) + } else { + // console.log(direction, state.touchRelactive.y, currentTouchRelactive.y); + + ownerInstance.callMethod('updateParentSwiperContainerStyleWithDirection', { + direction: direction + }) + } + } + } else { + // 判断触摸移动方向 + var direction = decideSwiperDirection(state.touchRelactive, currentTouchRelactive, false) + // 判断是否为衔接轮播,如果不是衔接轮播,如果当前为第一个swiperItem并且向右滑、当前为最后一个swiperItem并且向左滑时不进行操作 + if (containerData.circular || + !((state.currentIndex === 0 && direction === 'right') || (state.currentIndex === containerData.swiperItemLength - 1 && direction === 'left')) + ) { + // 判断触摸的时间和移动的距离是否超过了当前itemWidth的一半,如果是则执行切换操作 + // console.log(currentTime - state.touchStartTime, Math.abs(currentTouchRelactive.x - state.touchRelactive.x)); + if ((currentTime - state.touchStartTime) > 200 && Math.abs(currentTouchRelactive.x - state.touchRelactive.x) < itemData.itemWidth / 2) { + ownerInstance.callMethod('changeParentSwiperContainerStyleStatus',{ + status: 'reset' + }) + } else { + // console.log(direction, state.touchRelactive.x, currentTouchRelactive.x); + + ownerInstance.callMethod('updateParentSwiperContainerStyleWithDirection', { + direction: direction + }) + } + } + } + + // 清除标记 + state.touchId = null + state.touchRelactive = null + state.touchStartTime = 0 + + + // 标记停止触摸 + state.touching = true + ownerInstance.callMethod('updateTouchingStatus', { + status: false + }) +} + +module.exports = { + itemDataObserver: itemDataObserver, + currentIndexObserver: currentIndexObserver, + containerDataObserver: containerDataObserver, + touchStart: touchStart, + touchMove: touchMove, + touchEnd: touchEnd +} \ No newline at end of file diff --git a/tuniao-ui/components/tn-custom-swiper-item/tn-custom-swiper-item.vue b/tuniao-ui/components/tn-custom-swiper-item/tn-custom-swiper-item.vue new file mode 100644 index 0000000..5fd3c5b --- /dev/null +++ b/tuniao-ui/components/tn-custom-swiper-item/tn-custom-swiper-item.vue @@ -0,0 +1,277 @@ + + + + + + diff --git a/tuniao-ui/components/tn-custom-swiper/tn-custom-swiper.vue b/tuniao-ui/components/tn-custom-swiper/tn-custom-swiper.vue new file mode 100644 index 0000000..2094fe6 --- /dev/null +++ b/tuniao-ui/components/tn-custom-swiper/tn-custom-swiper.vue @@ -0,0 +1,535 @@ + + + + + diff --git a/tuniao-ui/components/tn-drag/index.wxs b/tuniao-ui/components/tn-drag/index.wxs new file mode 100644 index 0000000..6df1e84 --- /dev/null +++ b/tuniao-ui/components/tn-drag/index.wxs @@ -0,0 +1,265 @@ +// 判断是否出界 +var isOutRange = function(x1, y1, x2, y2, x3, y3) { + return x1 < 0 || x1 >= y1 || x2 < 0 || x2 >= y2 || x3 < 0 || x3 >= y3 +} +var edit = false + +function bool(str) { + return str === 'true' || str === true +} +/** + * 排序核心 + * @param {Object} startKey 开始时位置 + * @param {Object} endKey 结束时位置 + * @param {Object} instance wxs内的局部变量快照 + */ +var sortCore = function(startKey, endKey, state) { + var basedata = state.basedata + var excludeFix = function(sortKey, type) { + // fixed 元素位置不会变化, 这里直接用 sortKey 获取,更加便捷 + if (state.list[sortKey].fixed) { + var _sortKey = type ? --sortKey : ++sortKey + return excludeFix(sortKey, type) + } + return sortKey + } + + // 先获取到 endKey 对应的 realKey, 防止下面排序过程中该 realKey 被修改 + var endRealKey = -1 + state.list.forEach(function(item) { + if (item.sortKey === endKey) endRealKey = item.realKey + }) + + return state.list.map(function(item) { + if (item.fixed) return item + var sortKey = item.sortKey + var realKey = item.realKey + + if (startKey < endKey) { + // 正序拖动 + if (sortKey > startKey && sortKey <= endKey) { + --realKey + sortKey = excludeFix(--sortKey, true) + } else if (sortKey === startKey) { + realKey = endRealKey + sortKey = endKey + } + } else if (startKey > endKey) { + // 倒序拖动 + if (sortKey >= endKey && sortKey < startKey) { + ++realKey + sortKey = excludeFix(++sortKey, false) + } else if (sortKey === startKey) { + realKey = endRealKey + sortKey = endKey + } + } + + if (item.sortKey != sortKey) { + item.translateX = (sortKey % basedata.columns) * 100 + '%' + item.translateY = Math.floor(sortKey / basedata.columns) * 100 + '%' + item.sortKey = sortKey + item.realKey = realKey + } + return item + }) +} + +var triggerCustomEvent = function(list, type, instance) { + if (!instance) return + var _list = [], + listData = []; + + list.forEach(function(item) { + _list[item.sortKey] = item + }) + _list.forEach(function(item) { + listData.push(item.data) + }) + + // 编译到小程序 funcName作为参数传递导致事件不执行 + switch(type) { + case 'change': + instance.callMethod('change', {data: listData}) + break + case 'sortEnd': + instance.callMethod('sortEnd', {data: listData}) + break + } +} + +var listObserver = function(newVal, oldVal, ownerInstance, instance) { + var state = ownerInstance.getState() + state.itemsInstance = ownerInstance.selectAllComponents('.tn-drag__item') + + state.list = newVal || [] + + state.list.forEach(function(item, index) { + var itemInstance = state.itemsInstance[index] + if (item && itemInstance) { + itemInstance.setStyle({ + 'transform': 'translate3d('+ item.translateX + ',' + item.translateY +', 0)' + }) + if (item.fixed) itemInstance.addClass('tn-drag__fixed') + } + }) +} + +var baseDataObserver = function(newVal, oldVal, ownerInstance, instance) { + var state = ownerInstance.getState() + state.basedata = newVal +} + +var longPress = function(event, ownerInstance) { + var instance = event.instance + var dataset = instance.getDataset() + var state = ownerInstance.getState() + + edit = bool(dataset.edit) + if (!edit) return + if (!state.basedata || state.basedata === 'undefined') { + state.basedata = JSON.parse(dataset.basedata) + } + var basedata = state.basedata + var touches = event.changedTouches[0] + if (!touches) return + + state.current = +dataset.index + + // 初始项是固定项则返回 + var item = state.list[state.current] + if (item && item.fixed) return + + // 如果已经在 drag 中则返回, 防止多指触发 drag 动作, touchstart 事件中有效果 + if (state.dragging) return + + ownerInstance.callMethod("drag", { + dragging: true + }) + + // 计算X, Y轴初始位移,使item中心移动到点击处,单列的时候X轴初始不做位移 + state.translateX = basedata.columns === 1 ? 0 : touches.pageX - (basedata.itemWidth / 2 + basedata.left) + state.translateY = touches.pageY - (basedata.itemHeight / 2 + basedata.top) + state.touchId = touches.identifier + + instance.setStyle({ + 'transform': 'translate3d(' + state.translateX + 'px,' + state.translateY +'px, 0)' + }) + state.itemsInstance.forEach(function(item, index) { + item.removeClass("tn-drag__transition").removeClass("tn-drag__current") + item.addClass(index === state.current ? "tn-drag__current" : "tn-drag__transition") + }) + + ownerInstance.callMethod("vibrate") + state.dragging = true +} + +var touchStart = function(event, ownerInstance) { + var instance = event.instance + var dataset = instance.getDataset() + edit = bool(dataset.edit) +} + +var touchMove = function(event, ownerInstance) { + var instance = event.instance + var dataset = instance.getDataset() + var state = ownerInstance.getState() + var basedata = state.basedata + + if (!state.dragging || !edit) return + var touches = event.changedTouches[0] + if (!touches) return + + // 如果不是同一个触发点则返回 + if (state.touchId !== touches.identifier) return + + // 计算X,Y轴位移, 单列时候X轴初始不做位移 + var translateX = basedata.columns === 1 ? 0 : touches.pageX - (basedata.itemWidth / 2 + basedata.left) + var translateY = touches.pageY - (basedata.itemHeight / 2 + basedata.top) + + // 到顶到低自动滑动 + if (touches.clientY > basedata.windowHeight - basedata.itemHeight - basedata.realBottomSize) { + // 当前触摸点pageY + item高度 - (屏幕高度 - 底部固定区域高度) + ownerInstance.callMethod('pageScroll', { + scrollTop: touches.pageY + basedata.itemHeight - (basedata.windowHeight - basedata.realBottomSize) + }) + } else if (touches.clientY < basedata.itemHeight + basedata.realTopSize) { + // 当前触摸点pageY - item高度 - 顶部固定区域高 + ownerInstance.callMethod('pageScroll', { + scrollTop: touches.pageY - basedata.itemHeight - basedata.realTopSize + }) + } + + // 设置当前激活元素的偏移量 + instance.setStyle({ + 'transform': 'translate3d('+ translateX + 'px,' + translateY + 'px, 0)' + }) + + var startKey = state.list[state.current].sortKey + var currentX = Math.round(translateX / basedata.itemWidth) + var currentY = Math.round(translateY / basedata.itemHeight) + var endKey = currentX + basedata.columns * currentY + + // 目标项时固定项则返回 + var item = state.list[endKey] + if (item && item.fixed) return + + // X轴或者Y轴超出范围则返回 + if (isOutRange(currentX, basedata.columns, currentY, basedata.rows, endKey, state.list.length)) return + + // 防止拖拽过程中发生乱序问题 + if (startKey === endKey || startKey === state.preStartKey) return + state.preStartKey = startKey + + var list = sortCore(startKey, endKey, state) + state.itemsInstance.forEach(function(itemInstance, index) { + var item = list[index] + if (index !== state.current) { + itemInstance.setStyle({ + 'transform': 'translate3d('+ item.translateX + ',' + item.translateY +', 0)' + }) + } + }) + + // ownerInstance.callMethod('vibrate') + ownerInstance.callMethod('listDataChange', { + data: list + }) + triggerCustomEvent(list, "change", ownerInstance) +} + +var touchEnd = function(event, ownerInstance) { + var instance = event.instance + var dataset = instance.getDataset() + var state = ownerInstance.getState() + var basedata = state.basedata + + if (!state.dragging || !edit) return + triggerCustomEvent(state.list, "sortEnd", ownerInstance) + + instance.addClass('tn-drag__transition') + instance.setStyle({ + 'transform': 'translate3d('+ state.list[state.current].translateX + ',' + state.list[state.current].translateY + ', 0)' + }) + state.itemsInstance.forEach(function(item, index) { + item.removeClass('tn-drag__transition') + }) + + state.preStartKey = -1 + state.dragging = false + ownerInstance.callMethod('drag', { + dragging: false + }) + state.current = -1 + state.translateX = 0 + state.translateY = 0 +} + +module.exports = { + longPress: longPress, + touchStart: touchStart, + touchMove: touchMove, + touchEnd: touchEnd, + baseDataObserver: baseDataObserver, + listObserver: listObserver +} \ No newline at end of file diff --git a/tuniao-ui/components/tn-drag/tn-drag.vue b/tuniao-ui/components/tn-drag/tn-drag.vue new file mode 100644 index 0000000..17d269d --- /dev/null +++ b/tuniao-ui/components/tn-drag/tn-drag.vue @@ -0,0 +1,278 @@ + + + + + diff --git a/tuniao-ui/components/tn-empty/tn-empty.vue b/tuniao-ui/components/tn-empty/tn-empty.vue new file mode 100644 index 0000000..3a85b15 --- /dev/null +++ b/tuniao-ui/components/tn-empty/tn-empty.vue @@ -0,0 +1,190 @@ + + + + + diff --git a/tuniao-ui/components/tn-fab/tn-fab.vue b/tuniao-ui/components/tn-fab/tn-fab.vue new file mode 100644 index 0000000..9ce0cde --- /dev/null +++ b/tuniao-ui/components/tn-fab/tn-fab.vue @@ -0,0 +1,523 @@ + + + + + diff --git a/tuniao-ui/components/tn-form-item/tn-form-item.vue b/tuniao-ui/components/tn-form-item/tn-form-item.vue new file mode 100644 index 0000000..f60dbec --- /dev/null +++ b/tuniao-ui/components/tn-form-item/tn-form-item.vue @@ -0,0 +1,457 @@ + + + + + diff --git a/tuniao-ui/components/tn-form/tn-form.vue b/tuniao-ui/components/tn-form/tn-form.vue new file mode 100644 index 0000000..6a2524f --- /dev/null +++ b/tuniao-ui/components/tn-form/tn-form.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/tuniao-ui/components/tn-goods-nav/tn-goods-nav.vue b/tuniao-ui/components/tn-goods-nav/tn-goods-nav.vue new file mode 100644 index 0000000..b3d3a60 --- /dev/null +++ b/tuniao-ui/components/tn-goods-nav/tn-goods-nav.vue @@ -0,0 +1,382 @@ + + + + + diff --git a/tuniao-ui/components/tn-grid-item/tn-grid-item.vue b/tuniao-ui/components/tn-grid-item/tn-grid-item.vue new file mode 100644 index 0000000..312f60e --- /dev/null +++ b/tuniao-ui/components/tn-grid-item/tn-grid-item.vue @@ -0,0 +1,104 @@ + + + + + \ No newline at end of file diff --git a/tuniao-ui/components/tn-grid/tn-grid.vue b/tuniao-ui/components/tn-grid/tn-grid.vue new file mode 100644 index 0000000..f5487c6 --- /dev/null +++ b/tuniao-ui/components/tn-grid/tn-grid.vue @@ -0,0 +1,111 @@ + + + + + diff --git a/tuniao-ui/components/tn-image-upload-drag/tn-image-upload-drag.vue b/tuniao-ui/components/tn-image-upload-drag/tn-image-upload-drag.vue new file mode 100644 index 0000000..a72c6d8 --- /dev/null +++ b/tuniao-ui/components/tn-image-upload-drag/tn-image-upload-drag.vue @@ -0,0 +1,996 @@ + + + + + diff --git a/tuniao-ui/components/tn-image-upload/tn-image-upload.vue b/tuniao-ui/components/tn-image-upload/tn-image-upload.vue new file mode 100644 index 0000000..e7e9418 --- /dev/null +++ b/tuniao-ui/components/tn-image-upload/tn-image-upload.vue @@ -0,0 +1,695 @@ + + + + + diff --git a/tuniao-ui/components/tn-index-anchor/tn-index-anchor.vue b/tuniao-ui/components/tn-index-anchor/tn-index-anchor.vue new file mode 100644 index 0000000..435597d --- /dev/null +++ b/tuniao-ui/components/tn-index-anchor/tn-index-anchor.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/tuniao-ui/components/tn-index-list/tn-index-list.vue b/tuniao-ui/components/tn-index-list/tn-index-list.vue new file mode 100644 index 0000000..5187896 --- /dev/null +++ b/tuniao-ui/components/tn-index-list/tn-index-list.vue @@ -0,0 +1,361 @@ + + + + + diff --git a/tuniao-ui/components/tn-input/tn-input.vue b/tuniao-ui/components/tn-input/tn-input.vue new file mode 100644 index 0000000..e16a1ad --- /dev/null +++ b/tuniao-ui/components/tn-input/tn-input.vue @@ -0,0 +1,447 @@ +